ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDFkMzlhNmQuLmRjYTZhYmMgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAKIEQ6IEFzc29ydGVkIFZJQSB4ODYgc3VwcG9ydC4KIEQ6IDIuNSBBR1BHQVJUIG92ZXJoYXVsLgogRDogQ1BVRlJFUSBtYWludGVuYW5jZS4KLUQ6IEZlZG9yYSBrZXJuZWwgbWFpbnRhaW5lbmNlLgorRDogRmVkb3JhIGtlcm5lbCBtYWludGVuYW5jZS4KIEQ6IE1pc2MvT3RoZXIuCiBTOiAzMTQgTGl0dGxldG9uIFJkLCBXZXN0Zm9yZCwgTUEgMDE4ODYsIFVTQQogCkBAIC0zMjExLDcgKzMyMTEsNyBAQAogRToganNpbW1vbnNAaW5mcmFkZWFkLm9yZwogRToganNpbW1vbnNAdXNlcnMuc2YubmV0IAogRDogRnJhbWUgYnVmZmVyIGRldmljZSBtYWludGFpbmVyCi1EOiBpbnB1dCBsYXllciBkZXZlbG9wZW1lbnQgCitEOiBpbnB1dCBsYXllciBkZXZlbG9wbWVudAogRDogdHR5L2NvbnNvbGUgbGF5ZXIKIEQ6IHZhcmlvdXMgbWlwc2VsIGRldmljZXMgCiBTOiAxMTUgQ2FybWVsIEF2ZW51ZSAKQEAgLTMyOTAsNyArMzI5MCw3IEBACiBOOiBNYW5mcmVkIFNwcmF1bAogRTogbWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tCiBXOiBodHRwOi8vd3d3LmNvbG9yZnVsbGlmZS5jb20vfm1hbmZyZWQKLUQ6IExvdHMgb2YgdGlueSBoYWNrcy4gTGFyZ2VyIGltcHJvdm1lbnRzIHRvIFN5c1YgSVBDIG1zZywKK0Q6IExvdHMgb2YgdGlueSBoYWNrcy4gTGFyZ2VyIGltcHJvdmVtZW50cyB0byBTeXNWIElQQyBtc2csCiBEOiBzbGFiLCBwaXBlLCBzZWxlY3QuCiBTOiA3MTcwMSBTY2h3aWViZXJkaW5nZW4KIFM6IEdlcm1hbnkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IGY2MDczNjcuLmMxN2NkNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMjA2LDggKzIwNiw4IEBACiAJLSBkaXJlY3Rvcnkgd2l0aCBsYXB0b3AgcmVsYXRlZCBpbmZvIGFuZCBsYXB0b3AgZHJpdmVyIGRvY3VtZW50YXRpb24uCiBsZG0udHh0CiAJLSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIExETSAoV2luZG93cyBEeW5hbWljIERpc2tzKS4KLWxlZHMtY2xhc3MudHh0Ci0JLSBkb2N1bWVudHMgTEVEIGhhbmRsaW5nIHVuZGVyIExpbnV4LgorbGVkcy8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gYWJvdXQgTEVEIGhhbmRsaW5nIHVuZGVyIExpbnV4LgogbG9jYWxfb3BzLnR4dAogCS0gc2VtYW50aWNzIGFuZCBiZWhhdmlvciBvZiBsb2NhbCBhdG9taWMgb3BlcmF0aW9ucy4KIGxvY2tkZXAtZGVzaWduLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtY3NzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtY3NzCmluZGV4IGI1ODVlYzIuLjI5NzljNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWNzcworKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1jc3MKQEAgLTI5LDcgKzI5LDcgQEAKIAkJbGludXgtczM5MEB2Z2VyLmtlcm5lbC5vcmcKIERlc2NyaXB0aW9uOglDb250YWlucyB0aGUgUElNL1BBTS9QT00gdmFsdWVzLCBhcyByZXBvcnRlZCBieSB0aGUKIAkJY2hhbm5lbCBzdWJzeXN0ZW0gd2hlbiBsYXN0IHF1ZXJpZWQgYnkgdGhlIGNvbW1vbiBJL08KLQkJbGF5ZXIgKHRoaXMgaW1wbGllcyB0aGF0IHRoaXMgYXR0cmlidXRlIGlzIG5vdCBuZWNjZXNzYXJpbHkKKwkJbGF5ZXIgKHRoaXMgaW1wbGllcyB0aGF0IHRoaXMgYXR0cmlidXRlIGlzIG5vdCBuZWNlc3NhcmlseQogCQlpbiBzeW5jIHdpdGggdGhlIHZhbHVlcyBjdXJyZW50IGluIHRoZSBjaGFubmVsIHN1YnN5c3RlbSkuCiAJCU5vdGU6IFRoaXMgaXMgYW4gSS9PLXN1YmNoYW5uZWwgc3BlY2lmaWMgYXR0cmlidXRlLgogVXNlcnM6CQlzMzkwLXRvb2xzLCBIQUwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKaW5kZXggZWRmZjY2My4uMzY0NmVjOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKQEAgLTMzLDUgKzMzLDUgQEAKIERlc2NyaXB0aW9uOgogCQlJbnZlcnQgdGhlIExFRCBvbi9vZmYgc3RhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIHRvCiAJCWdwaW8gYW5kIGJhY2tsaWdodCB0cmlnZ2Vycy4gSW4gY2FzZSBvZiB0aGUgYmFja2xpZ2h0IHRyaWdnZXIsCi0JCWl0IGlzIHVzZWZ1bGwgd2hlbiBkcml2aW5nIGEgTEVEIHdoaWNoIGlzIGludGVuZGVkIHRvIGluZGljYXRlCisJCWl0IGlzIHVzZWZ1bCB3aGVuIGRyaXZpbmcgYSBMRUQgd2hpY2ggaXMgaW50ZW5kZWQgdG8gaW5kaWNhdGUKIAkJYSBkZXZpY2UgaW4gYSBzdGFuZGJ5IGxpa2Ugc3RhdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmUgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmUKaW5kZXggYjRjNGYxNS4uM2NhMzk3MTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmUKQEAgLTQwLDcgKzQwLDcgQEAKIERhdGU6CQlNYXJjaCAyMDEwCiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgcHJlc3Mgb2YgYSBidXR0b24uIEEgcHJvZmlsZSBob2xkcyBpbmZvcm1hdGlvbnMgbGlrZSBidXR0b24KKyAgICAgICAgICAgICAgICBwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGhvbGRzIGluZm9ybWF0aW9uIGxpa2UgYnV0dG9uCiAgICAgICAgICAgICAgICAgbWFwcGluZ3MsIHNlbnNpdGl2aXR5LCB0aGUgY29sb3JzIG9mIHRoZSA1IGxlZHMgYW5kIGxpZ2h0CiAgICAgICAgICAgICAgICAgZWZmZWN0cy4KICAgICAgICAgICAgICAgICBXaGVuIHJlYWQsIHRoZXNlIGZpbGVzIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlLiBUaGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZXBsdXMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmVwbHVzCmluZGV4IDAwZWZjZWQuLjMyNmUwNTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZXBsdXMKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lcGx1cwpAQCAtMzMsNyArMzMsNyBAQAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQogCQlwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGlzIHNwbGl0IGluIHNldHRpbmdzIGFuZCBidXR0b25zLgotCQlwcm9maWxlX2J1dHRvbnMgaG9sZHMgaW5mb3JtYXRpb25zIGFib3V0IGJ1dHRvbiBsYXlvdXQuCisJCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBidXR0b24gbGF5b3V0LgogCQlXaGVuIHdyaXR0ZW4sIHRoaXMgZmlsZSBsZXRzIG9uZSB3cml0ZSB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlCiAJCWJ1dHRvbnMgYmFjayB0byB0aGUgbW91c2UuIFRoZSBkYXRhIGhhcyB0byBiZSA3NyBieXRlcyBsb25nLgogCQlUaGUgbW91c2Ugd2lsbCByZWplY3QgaW52YWxpZCBkYXRhLgpAQCAtNDcsNyArNDcsNyBAQAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQogCQlwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGlzIHNwbGl0IGluIHNldHRpbmdzIGFuZCBidXR0b25zLgotCQlwcm9maWxlX2J1dHRvbnMgaG9sZHMgaW5mb3JtYXRpb25zIGFib3V0IGJ1dHRvbiBsYXlvdXQuCisJCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBidXR0b24gbGF5b3V0LgogCQlXaGVuIHJlYWQsIHRoZXNlIGZpbGVzIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlIGJ1dHRvbnMuCiAJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDc3IGJ5dGVzIGluIHNpemUuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KQEAgLTU4LDcgKzU4LDcgQEAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKIAkJcHJlc3Mgb2YgYSBidXR0b24uIEEgcHJvZmlsZSBpcyBzcGxpdCBpbiBzZXR0aW5ncyBhbmQgYnV0dG9ucy4KLQkJcHJvZmlsZV9zZXR0aW5ncyBob2xkcyBpbmZvcm1hdGlvbnMgbGlrZSByZXNvbHV0aW9uLCBzZW5zaXRpdml0eQorCQlwcm9maWxlX3NldHRpbmdzIGhvbGRzIGluZm9ybWF0aW9uIGxpa2UgcmVzb2x1dGlvbiwgc2Vuc2l0aXZpdHkKIAkJYW5kIGxpZ2h0IGVmZmVjdHMuCiAJCVdoZW4gd3JpdHRlbiwgdGhpcyBmaWxlIGxldHMgb25lIHdyaXRlIHRoZSByZXNwZWN0aXZlIHByb2ZpbGUKIAkJc2V0dGluZ3MgYmFjayB0byB0aGUgbW91c2UuIFRoZSBkYXRhIGhhcyB0byBiZSA0MyBieXRlcyBsb25nLgpAQCAtNzMsNyArNzMsNyBAQAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQogCQlwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGlzIHNwbGl0IGluIHNldHRpbmdzIGFuZCBidXR0b25zLgotCQlwcm9maWxlX3NldHRpbmdzIGhvbGRzIGluZm9ybWF0aW9ucyBsaWtlIHJlc29sdXRpb24sIHNlbnNpdGl2aXR5CisJCXByb2ZpbGVfc2V0dGluZ3MgaG9sZHMgaW5mb3JtYXRpb24gbGlrZSByZXNvbHV0aW9uLCBzZW5zaXRpdml0eQogCQlhbmQgbGlnaHQgZWZmZWN0cy4KIAkJV2hlbiByZWFkLCB0aGVzZSBmaWxlcyByZXR1cm4gdGhlIHJlc3BlY3RpdmUgcHJvZmlsZSBzZXR0aW5ncy4KIAkJVGhlIHJldHVybmVkIGRhdGEgaXMgNDMgYnl0ZXMgaW4gc2l6ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta292YXBsdXMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvdmFwbHVzCmluZGV4IGZkZmExNmYuLjIwZjkzN2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta292YXBsdXMKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb3ZhcGx1cwpAQCAtNTIsNyArNTIsNyBAQAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQogCQlwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGlzIHNwbGl0IGluIHNldHRpbmdzIGFuZCBidXR0b25zLgotCQlwcm9maWxlX2J1dHRvbnMgaG9sZHMgaW5mb3JtYXRpb25zIGFib3V0IGJ1dHRvbiBsYXlvdXQuCisJCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBidXR0b24gbGF5b3V0LgogCQlXaGVuIHdyaXR0ZW4sIHRoaXMgZmlsZSBsZXRzIG9uZSB3cml0ZSB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlCiAJCWJ1dHRvbnMgYmFjayB0byB0aGUgbW91c2UuIFRoZSBkYXRhIGhhcyB0byBiZSAyMyBieXRlcyBsb25nLgogCQlUaGUgbW91c2Ugd2lsbCByZWplY3QgaW52YWxpZCBkYXRhLgpAQCAtNjYsNyArNjYsNyBAQAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQogCQlwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGlzIHNwbGl0IGluIHNldHRpbmdzIGFuZCBidXR0b25zLgotCQlwcm9maWxlX2J1dHRvbnMgaG9sZHMgaW5mb3JtYXRpb25zIGFib3V0IGJ1dHRvbiBsYXlvdXQuCisJCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBidXR0b24gbGF5b3V0LgogCQlXaGVuIHJlYWQsIHRoZXNlIGZpbGVzIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlIGJ1dHRvbnMuCiAJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDIzIGJ5dGVzIGluIHNpemUuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KQEAgLTc3LDcgKzc3LDcgQEAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKIAkJcHJlc3Mgb2YgYSBidXR0b24uIEEgcHJvZmlsZSBpcyBzcGxpdCBpbiBzZXR0aW5ncyBhbmQgYnV0dG9ucy4KLQkJcHJvZmlsZV9zZXR0aW5ncyBob2xkcyBpbmZvcm1hdGlvbnMgbGlrZSByZXNvbHV0aW9uLCBzZW5zaXRpdml0eQorCQlwcm9maWxlX3NldHRpbmdzIGhvbGRzIGluZm9ybWF0aW9uIGxpa2UgcmVzb2x1dGlvbiwgc2Vuc2l0aXZpdHkKIAkJYW5kIGxpZ2h0IGVmZmVjdHMuCiAJCVdoZW4gd3JpdHRlbiwgdGhpcyBmaWxlIGxldHMgb25lIHdyaXRlIHRoZSByZXNwZWN0aXZlIHByb2ZpbGUKIAkJc2V0dGluZ3MgYmFjayB0byB0aGUgbW91c2UuIFRoZSBkYXRhIGhhcyB0byBiZSAxNiBieXRlcyBsb25nLgpAQCAtOTIsNyArOTIsNyBAQAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQogCQlwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGlzIHNwbGl0IGluIHNldHRpbmdzIGFuZCBidXR0b25zLgotCQlwcm9maWxlX3NldHRpbmdzIGhvbGRzIGluZm9ybWF0aW9ucyBsaWtlIHJlc29sdXRpb24sIHNlbnNpdGl2aXR5CisJCXByb2ZpbGVfc2V0dGluZ3MgaG9sZHMgaW5mb3JtYXRpb24gbGlrZSByZXNvbHV0aW9uLCBzZW5zaXRpdml0eQogCQlhbmQgbGlnaHQgZWZmZWN0cy4KIAkJV2hlbiByZWFkLCB0aGVzZSBmaWxlcyByZXR1cm4gdGhlIHJlc3BlY3RpdmUgcHJvZmlsZSBzZXR0aW5ncy4KIAkJVGhlIHJldHVybmVkIGRhdGEgaXMgMTYgYnl0ZXMgaW4gc2l6ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQtcHlyYSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQtcHlyYQppbmRleCA1ZmFiNzFhLi4zZjhkZTUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LXB5cmEKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1weXJhCkBAIC0zOSw3ICszOSw3IEBACiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCiAJCXByZXNzIG9mIGEgYnV0dG9uLiBBIHByb2ZpbGUgaXMgc3BsaXQgaW4gc2V0dGluZ3MgYW5kIGJ1dHRvbnMuCi0JCXByb2ZpbGVfc2V0dGluZ3MgaG9sZHMgaW5mb3JtYXRpb25zIGxpa2UgcmVzb2x1dGlvbiwgc2Vuc2l0aXZpdHkKKwkJcHJvZmlsZV9zZXR0aW5ncyBob2xkcyBpbmZvcm1hdGlvbiBsaWtlIHJlc29sdXRpb24sIHNlbnNpdGl2aXR5CiAJCWFuZCBsaWdodCBlZmZlY3RzLgogCQlXaGVuIHdyaXR0ZW4sIHRoaXMgZmlsZSBsZXRzIG9uZSB3cml0ZSB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlCiAJCXNldHRpbmdzIGJhY2sgdG8gdGhlIG1vdXNlLiBUaGUgZGF0YSBoYXMgdG8gYmUgMTMgYnl0ZXMgbG9uZy4KQEAgLTU0LDcgKzU0LDcgQEAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKIAkJcHJlc3Mgb2YgYSBidXR0b24uIEEgcHJvZmlsZSBpcyBzcGxpdCBpbiBzZXR0aW5ncyBhbmQgYnV0dG9ucy4KLQkJcHJvZmlsZV9zZXR0aW5ncyBob2xkcyBpbmZvcm1hdGlvbnMgbGlrZSByZXNvbHV0aW9uLCBzZW5zaXRpdml0eQorCQlwcm9maWxlX3NldHRpbmdzIGhvbGRzIGluZm9ybWF0aW9uIGxpa2UgcmVzb2x1dGlvbiwgc2Vuc2l0aXZpdHkKIAkJYW5kIGxpZ2h0IGVmZmVjdHMuCiAJCVdoZW4gcmVhZCwgdGhlc2UgZmlsZXMgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHByb2ZpbGUgc2V0dGluZ3MuCiAJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDEzIGJ5dGVzIGluIHNpemUuCkBAIC02Niw3ICs2Niw3IEBACiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCiAJCXByZXNzIG9mIGEgYnV0dG9uLiBBIHByb2ZpbGUgaXMgc3BsaXQgaW4gc2V0dGluZ3MgYW5kIGJ1dHRvbnMuCi0JCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbnMgYWJvdXQgYnV0dG9uIGxheW91dC4KKwkJcHJvZmlsZV9idXR0b25zIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGJ1dHRvbiBsYXlvdXQuCiAJCVdoZW4gd3JpdHRlbiwgdGhpcyBmaWxlIGxldHMgb25lIHdyaXRlIHRoZSByZXNwZWN0aXZlIHByb2ZpbGUKIAkJYnV0dG9ucyBiYWNrIHRvIHRoZSBtb3VzZS4gVGhlIGRhdGEgaGFzIHRvIGJlIDE5IGJ5dGVzIGxvbmcuCiAJCVRoZSBtb3VzZSB3aWxsIHJlamVjdCBpbnZhbGlkIGRhdGEuCkBAIC04MCw3ICs4MCw3IEBACiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCiAJCXByZXNzIG9mIGEgYnV0dG9uLiBBIHByb2ZpbGUgaXMgc3BsaXQgaW4gc2V0dGluZ3MgYW5kIGJ1dHRvbnMuCi0JCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbnMgYWJvdXQgYnV0dG9uIGxheW91dC4KKwkJcHJvZmlsZV9idXR0b25zIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGJ1dHRvbiBsYXlvdXQuCiAJCVdoZW4gcmVhZCwgdGhlc2UgZmlsZXMgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHByb2ZpbGUgYnV0dG9ucy4KIAkJVGhlIHJldHVybmVkIGRhdGEgaXMgMTkgYnl0ZXMgaW4gc2l6ZS4KIAkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hc3VzLWxhcHRvcCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AKaW5kZXggNDFmZjhhZS4uY2Q5ZDY2NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hc3VzLWxhcHRvcAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWFzdXMtbGFwdG9wCkBAIC0yNyw3ICsyNyw3IEBACiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBEZXNjcmlwdGlvbjoKIAkJU29tZSBtb2RlbHMgbGlrZSB0aGUgVzFOIGhhdmUgYSBMRUQgZGlzcGxheSB0aGF0IGNhbiBiZQotCQl1c2VkIHRvIGRpc3BsYXkgc2V2ZXJhbCBpbmZvcm1hdGlvbnMuCisJCXVzZWQgdG8gZGlzcGxheSBzZXZlcmFsIGl0ZW1zIG9mIGluZm9ybWF0aW9uLgogCQlUbyBjb250cm9sIHRoZSBMRUQgZGlzcGxheSwgdXNlIHRoZSBmb2xsb3dpbmcgOgogCQkgICAgZWNobyAweDBUMDAwREREID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wLwogCQl3aGVyZSBUIGNvbnRyb2wgdGhlIDMgbGV0dGVycyBkaXNwbGF5LCBhbmQgREREIHRoZSAzIGRpZ2l0cyBkaXNwbGF5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJwcm9wZXJ0eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbAppbmRleCA1ZjU3YzdjLi45N2YzOTdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbApAQCAtNDAsNyArNDAsNyBAQAogCiAJCQk8cGFyYT5DZW50cmFsIGZyZXF1ZW5jeSBvZiB0aGUgY2hhbm5lbC48L3BhcmE+CiAKLQkJCTxwYXJhPkZvciBJU0RCLVQgdGhlIGNoYW5uZWxzIGFyZSB1c2FsbHkgdHJhbnNtaXR0ZWQgd2l0aCBhbiBvZmZzZXQgb2YgMTQza0h6LiBFLmcuIGEKKwkJCTxwYXJhPkZvciBJU0RCLVQgdGhlIGNoYW5uZWxzIGFyZSB1c3VhbGx5IHRyYW5zbWl0dGVkIHdpdGggYW4gb2Zmc2V0IG9mIDE0M2tIei4gRS5nLiBhCiAJCQkJdmFsaWQgZnJlcXVuY3kgY291bGQgYmUgNDc0MTQzIGtIei4gVGhlIHN0ZXBwaW5nIGlzIGJvdW5kIHRvIHRoZSBiYW5kd2lkdGggb2YKIAkJCQl0aGUgY2hhbm5lbCB3aGljaCBpcyA2TUh6LjwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbAppbmRleCA3OGQ3NTZkLi42MGM2OTc2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbApAQCAtMTM5LDcgKzEzOSw3IEBACiA8c2VjdGlvbiBpZD0iZnJvbnRlbmRfc2VjX3RvbmUiPgogPHRpdGxlPlNFQyBjb250aW51b3VzIHRvbmU8L3RpdGxlPgogCi08cGFyYT5UaGUgY29udGlub3VzIDIyS0h6IHRvbmUgaXMgdXN1YWxseSB1c2VkIHdpdGggbm9uLURpU0VxQyBjYXBhYmxlIExOQnMgdG8gc3dpdGNoIHRoZQorPHBhcmE+VGhlIGNvbnRpbnVvdXMgMjJLSHogdG9uZSBpcyB1c3VhbGx5IHVzZWQgd2l0aCBub24tRGlTRXFDIGNhcGFibGUgTE5CcyB0byBzd2l0Y2ggdGhlCiBoaWdoL2xvdyBiYW5kIG9mIGEgZHVhbC1iYW5kIExOQi4gV2hlbiB1c2luZyBEaVNFcUMgZXB1aXBtZW50IHRoaXMgdm9sdGFnZSBoYXMgdG8KIGJlIHN3aXRjaGVkIGNvbnNpc3RlbnRseSB0byB0aGUgRGlTRXFDIGNvbW1hbmRzIGFzIGRlc2NyaWJlZCBpbiB0aGUgRGlTRXFDCiBzcGVjLjwvcGFyYT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKaW5kZXggZjY2ZjRkZi4uNjdlN2FiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKQEAgLTE3NjMsNyArMTc2Myw3IEBACiBUaGVyZSBpcyBhIGZ1cnRodXIgb3B0aW1pemF0aW9uIHBvc3NpYmxlIGhlcmU6IHJlbWVtYmVyIG91ciBvcmlnaW5hbAogY2FjaGUgY29kZSwgd2hlcmUgdGhlcmUgd2VyZSBubyByZWZlcmVuY2UgY291bnRzIGFuZCB0aGUgY2FsbGVyIHNpbXBseQogaGVsZCB0aGUgbG9jayB3aGVuZXZlciB1c2luZyB0aGUgb2JqZWN0PyAgVGhpcyBpcyBzdGlsbCBwb3NzaWJsZTogaWYKLXlvdSBob2xkIHRoZSBsb2NrLCBub29uZSBjYW4gZGVsZXRlIHRoZSBvYmplY3QsIHNvIHlvdSBkb24ndCBuZWVkIHRvCit5b3UgaG9sZCB0aGUgbG9jaywgbm8gb25lIGNhbiBkZWxldGUgdGhlIG9iamVjdCwgc28geW91IGRvbid0IG5lZWQgdG8KIGdldCBhbmQgcHV0IHRoZSByZWZlcmVuY2UgY291bnQuCiA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbAppbmRleCA4YzU0MTFjLi5jZGQxYmI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogCSAgIDxsaXN0aXRlbT4KIAkgICA8cGFyYT4KIAkgICBUaGlzIGlzIGluZGljYXRlZCBieSBJQ1JDIGJpdCBpbiB0aGUgRVJST1IgcmVnaXN0ZXIgYW5kCi0JICAgbWVhbnMgdGhhdCBjb3JydXB0aW9uIG9jY3VycmVkIGR1cmluZyBkYXRhIHRyYW5zZmVyLiAgVXB0bworCSAgIG1lYW5zIHRoYXQgY29ycnVwdGlvbiBvY2N1cnJlZCBkdXJpbmcgZGF0YSB0cmFuc2Zlci4gIFVwIHRvCiAJICAgQVRBL0FUQVBJLTcsIHRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGlzIGJpdCBpcyBvbmx5CiAJICAgYXBwbGljYWJsZSB0byBVRE1BIHRyYW5zZmVycyBidXQgQVRBL0FUQVBJLTggZHJhZnQgcmV2aXNpb24KIAkgICAxZiBzYXlzIHRoYXQgdGhlIGJpdCBtYXkgYmUgYXBwbGljYWJsZSB0byBtdWx0aXdvcmQgRE1BIGFuZApAQCAtMTA0NSwxMCArMTA0NSwxMCBAQAogCSAgIDx0ZXJtPkFCUlQgZXJyb3IgZHVyaW5nIGRhdGEgdHJhbnNmZXIgb3Igb24gY29tcGxldGlvbjwvdGVybT4KIAkgICA8bGlzdGl0ZW0+CiAJICAgPHBhcmE+Ci0JICAgVXB0byBBVEEvQVRBUEktNywgdGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IEFCUlQgY291bGQgYmUKKwkgICBVcCB0byBBVEEvQVRBUEktNywgdGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IEFCUlQgY291bGQgYmUKIAkgICBzZXQgb24gSUNSQyBlcnJvcnMgYW5kIG9uIGNhc2VzIHdoZXJlIGEgZGV2aWNlIGlzIG5vdCBhYmxlCiAJICAgdG8gY29tcGxldGUgYSBjb21tYW5kLiAgQ29tYmluZWQgd2l0aCB0aGUgZmFjdCB0aGF0IE1XRE1BCi0JICAgYW5kIFBJTyB0cmFuc2ZlciBlcnJvcnMgYXJlbid0IGFsbG93ZWQgdG8gdXNlIElDUkMgYml0IHVwdG8KKwkgICBhbmQgUElPIHRyYW5zZmVyIGVycm9ycyBhcmVuJ3QgYWxsb3dlZCB0byB1c2UgSUNSQyBiaXQgdXAgdG8KIAkgICBBVEEvQVRBUEktNywgaXQgc2VlbXMgdG8gaW1wbHkgdGhhdCBBQlJUIGJpdCBhbG9uZSBjb3VsZAogCSAgIGluZGljYXRlIHRyYW5mZXIgZXJyb3JzLgogCSAgIDwvcGFyYT4KQEAgLTExMjIsNyArMTEyMiw3IEBACiAJPHBhcmE+CiAJRGVwZW5kaW5nIG9uIGNvbW1hbmRzLCBub3QgYWxsIFNUQVRVUy9FUlJPUiBiaXRzIGFyZQogCWFwcGxpY2FibGUuICBUaGVzZSBub24tYXBwbGljYWJsZSBiaXRzIGFyZSBtYXJrZWQgd2l0aAotCSZxdW90O25hJnF1b3Q7IGluIHRoZSBvdXRwdXQgZGVzY3JpcHRpb25zIGJ1dCB1cHRvIEFUQS9BVEFQSS03CisJJnF1b3Q7bmEmcXVvdDsgaW4gdGhlIG91dHB1dCBkZXNjcmlwdGlvbnMgYnV0IHVwIHRvIEFUQS9BVEFQSS03CiAJbm8gZGVmaW5pdGlvbiBvZiAmcXVvdDtuYSZxdW90OyBjYW4gYmUgZm91bmQuICBIb3dldmVyLAogCUFUQS9BVEFQSS04IGRyYWZ0IHJldmlzaW9uIDFmIGRlc2NyaWJlcyAmcXVvdDtOL0EmcXVvdDsgYXMKIAlmb2xsb3dzLgpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAogCTxsaXN0aXRlbT4KIAk8cGFyYT4KLQlDSFMgc2V0IHVwIHdpdGggSU5JVElBTElaRSBERVZJQ0UgUEFSQU1FVEVSUyAoc2VsZG9tbHkgdXNlZCkKKwlDSFMgc2V0IHVwIHdpdGggSU5JVElBTElaRSBERVZJQ0UgUEFSQU1FVEVSUyAoc2VsZG9tIHVzZWQpCiAJPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCmluZGV4IDYyMGViM2YuLjZmMjQyZDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbApAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJUmVlZC1Tb2xvbW9uIGxpYnJhcnkuCiAJCQk8L3BhcmE+CiAJCQk8cGFyYT4KLQkJCQlUaGUgRUNDIGJ5dGVzIG11c3QgYmUgcGxhY2VkIGltbWlkaWF0ZWx5IGFmdGVyIHRoZSBkYXRhCisJCQkJVGhlIEVDQyBieXRlcyBtdXN0IGJlIHBsYWNlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZGF0YQogCQkJCWJ5dGVzIGluIG9yZGVyIHRvIG1ha2UgdGhlIHN5bmRyb21lIGdlbmVyYXRvciB3b3JrLiBUaGlzCiAJCQkJaXMgY29udHJhcnkgdG8gdGhlIHVzdWFsIGxheW91dCB1c2VkIGJ5IHNvZnR3YXJlIEVDQy4gVGhlCiAJCQkJc2VwYXJhdGlvbiBvZiBkYXRhIGFuZCBvdXQgb2YgYmFuZCBhcmVhIGlzIG5vdCBsb25nZXIKQEAgLTYyOSw3ICs2MjksNyBAQAogCQkJCWhvbGRzIHRoZSBiYWQgYmxvY2sgdGFibGUuIFN0b3JlIGEgcG9pbnRlciB0byB0aGUgcGF0dGVybiAgCiAJCQkJaW4gdGhlIHBhdHRlcm4gZmllbGQuIEZ1cnRoZXIgdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybiBoYXMgdG8gYmUgCiAJCQkJc3RvcmVkIGluIGxlbiBhbmQgdGhlIG9mZnNldCBpbiB0aGUgc3BhcmUgYXJlYSBtdXN0IGJlIGdpdmVuCi0JCQkJaW4gdGhlIG9mZnMgbWVtYmVyIG9mIHRoZSBuYW5kX2JidF9kZXNjciBzdHVjdHVyZS4gRm9yIG1pcnJvcmVkCisJCQkJaW4gdGhlIG9mZnMgbWVtYmVyIG9mIHRoZSBuYW5kX2JidF9kZXNjciBzdHJ1Y3R1cmUuIEZvciBtaXJyb3JlZAogCQkJCWJhZCBibG9jayB0YWJsZXMgZGlmZmVyZW50IHBhdHRlcm5zIGFyZSBtYW5kYXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CiAJCQkJPGxpc3RpdGVtPjxwYXJhPlRhYmxlIGNyZWF0aW9uPC9wYXJhPgogCQkJCTxwYXJhPlNldCB0aGUgb3B0aW9uIE5BTkRfQkJUX0NSRUFURSB0byBlbmFibGUgdGhlIHRhYmxlIGNyZWF0aW9uCkBAIC02NDgsNyArNjQ4LDcgQEAKIAkJCQk8bGlzdGl0ZW0+PHBhcmE+VGFibGUgdmVyc2lvbiBjb250cm9sPC9wYXJhPgogCQkJCTxwYXJhPlNldCB0aGUgb3B0aW9uIE5BTkRfQkJUX1ZFUlNJT04gdG8gZW5hYmxlIHRoZSB0YWJsZSB2ZXJzaW9uIGNvbnRyb2wuCiAJCQkJSXQncyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZW5hYmxlIHRoaXMgZm9yIG1pcnJvcmVkIHRhYmxlcyB3aXRoIHdyaXRlCi0JCQkJc3VwcG9ydC4gSXQgbWFrZXMgc3VyZSB0aGF0IHRoZSByaXNrIG9mIGxvb3NpbmcgdGhlIGJhZCBibG9jaworCQkJCXN1cHBvcnQuIEl0IG1ha2VzIHN1cmUgdGhhdCB0aGUgcmlzayBvZiBsb3NpbmcgdGhlIGJhZCBibG9jawogCQkJCXRhYmxlIGluZm9ybWF0aW9uIGlzIHJlZHVjZWQgdG8gdGhlIGxvc3Mgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogCQkJCW9uZSB3b3JuIG91dCBibG9jayB3aGljaCBzaG91bGQgYmUgbWFya2VkIGJhZC4gVGhlIHZlcnNpb24gaXMgc3RvcmVkIGluCiAJCQkJNCBjb25zZWN1dGl2ZSBieXRlcyBpbiB0aGUgc3BhcmUgYXJlYSBvZiB0aGUgZGV2aWNlLiBUaGUgcG9zaXRpb24gb2YKQEAgLTEwNjAsMTkgKzEwNjAsMTkgQEAKIDxyb3c+CiA8ZW50cnk+MHgzRDwvZW50cnk+CiA8ZW50cnk+RUNDIGJ5dGUgMjE8L2VudHJ5PgotPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIGVpZ3RoIDI1NiBCeXRlcyBvZiBkYXRhCis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgZWlnaHRoIDI1NiBCeXRlcyBvZiBkYXRhCiBpbiB0aGlzIHBhZ2U8L2VudHJ5PgogPC9yb3c+CiA8cm93PgogPGVudHJ5PjB4M0U8L2VudHJ5PgogPGVudHJ5PkVDQyBieXRlIDIyPC9lbnRyeT4KLTxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAxIG9mIHRoZSBlaWd0aCAyNTYgQnl0ZXMgb2YgZGF0YQorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIGVpZ2h0aCAyNTYgQnl0ZXMgb2YgZGF0YQogaW4gdGhpcyBwYWdlPC9lbnRyeT4KIDwvcm93PgogPHJvdz4KIDxlbnRyeT4weDNGPC9lbnRyeT4KIDxlbnRyeT5FQ0MgYnl0ZSAyMzwvZW50cnk+Ci08ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgZWlndGggMjU2IEJ5dGVzIG9mIGRhdGEKKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSBlaWdodGggMjU2IEJ5dGVzIG9mIGRhdGEKIGluIHRoaXMgcGFnZTwvZW50cnk+CiA8L3Jvdz4KIDwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3JlZ3VsYXRvci50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3JlZ3VsYXRvci50bXBsCmluZGV4IDUzZjRmOGQuLjM0NmU1NTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9yZWd1bGF0b3IudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcmVndWxhdG9yLnRtcGwKQEAgLTI2Nyw4ICsyNjcsOCBAQAogICAgICA8c2VjdDEgaWQ9Im1hY2hpbmUtY29uc3RyYWludCI+CiAgICAgICAgPHRpdGxlPkNvbnN0cmFpbnRzPC90aXRsZT4KICAgICAgICA8cGFyYT4KLQkgQXMgd2VsbCBhcyBkZWZpbmluaW5nIHRoZSBjb25uZWN0aW9ucyB0aGUgbWFjaGluZSBpbnRlcmZhY2UKLQkgYWxzbyBwcm92aWRlcyBjb25zdHJhaW50cyBkZWZpbmluaW5nIHRoZSBvcGVyYXRpb25zIHRoYXQKKwkgQXMgd2VsbCBhcyBkZWZpbmluZyB0aGUgY29ubmVjdGlvbnMgdGhlIG1hY2hpbmUgaW50ZXJmYWNlCisJIGFsc28gcHJvdmlkZXMgY29uc3RyYWludHMgZGVmaW5pbmcgdGhlIG9wZXJhdGlvbnMgdGhhdAogCSBjbGllbnRzIGFyZSBhbGxvd2VkIHRvIHBlcmZvcm0gYW5kIHRoZSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlCiAJIHNldC4gIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgZ2VuZXJhbGx5IHJlZ3VsYXRvciBkZXZpY2VzIHdpbGwKIAkgb2ZmZXIgbW9yZSBmbGV4aWJpbGl0eSB0aGFuIGl0IGlzIHNhZmUgdG8gdXNlIG9uIGEgZ2l2ZW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbAppbmRleCBiNDY2NWI5Li43YzRiNTE0ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbApAQCAtNzk3LDcgKzc5Nyw3IEBACiAJcGVyZm9ybSBzb21lIGluaXRpYWxpemF0aW9uLiBBZnRlciB0aGF0LCB5b3VyIGhhcmR3YXJlCiAJc3RhcnRzIHdvcmtpbmcgYW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGFzIHNvb24KIAlhcyBpdCdzIGZpbmlzaGVkLCBoYXMgc29tZSBkYXRhIGF2YWlsYWJsZSwgb3IgbmVlZHMgeW91cgotCWF0dGVudGlvbiBiZWNhdXNlIGFuIGVycm9yIG9jY3VyZWQuCisJYXR0ZW50aW9uIGJlY2F1c2UgYW4gZXJyb3Igb2NjdXJyZWQuCiAJPC9wYXJhPgogCTxwYXJhPgogCTxmaWxlbmFtZT4vZGV2L3Vpb1g8L2ZpbGVuYW1lPiBpcyBhIHJlYWQtb25seSBmaWxlLiBBCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwKaW5kZXggYWYyOTM2MC4uOGQ1N2MxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbApAQCAtNjkwLDcgKzY5MCw3IEBACiAJCSAgICA8L3BhcmE+PHBhcmE+CiAJCSAgICBUaGlzIHJlcXVlc3QgbGV0cyBrZXJuZWwgZHJpdmVycyB0YWxrIHRvIHVzZXIgbW9kZSBjb2RlCiAJCSAgICB0aHJvdWdoIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBldmVuIHdoZW4gdGhleSBkb24ndCBjcmVhdGUKLQkJICAgIGEgY2hhcmFjdG9yIG9yIGJsb2NrIHNwZWNpYWwgZGV2aWNlLgorCQkgICAgYSBjaGFyYWN0ZXIgb3IgYmxvY2sgc3BlY2lhbCBkZXZpY2UuCiAJCSAgICBJdCdzIGFsc28gYmVlbiB1c2VkIHRvIGRvIHRoaW5ncyBsaWtlIGFzayBkZXZpY2VzIHdoYXQKIAkJICAgIGRldmljZSBzcGVjaWFsIGZpbGUgc2hvdWxkIGJlIHVzZWQuCiAJCSAgICBUd28gcHJlLWRlZmluZWQgaW9jdGxzIGFyZSB1c2VkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKaW5kZXggZGJhYjc5Yy4uOTAyODcyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tbW9uLnhtbApAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICAgIDxwYXJhPkJ5IGNvbnZlbnRpb24gc3lzdGVtIGFkbWluaXN0cmF0b3JzIGNyZWF0ZSB2YXJpb3VzCiBjaGFyYWN0ZXIgZGV2aWNlIHNwZWNpYWwgZmlsZXMgd2l0aCB0aGVzZSBtYWpvciBhbmQgbWlub3IgbnVtYmVycyBpbgotdGhlIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4gZGlyZWN0b3J5LiBUaGUgbmFtZXMgcmVjb21lbmRlZCBmb3IgdGhlCit0aGUgPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuIFRoZSBuYW1lcyByZWNvbW1lbmRlZCBmb3IgdGhlCiBkaWZmZXJlbnQgVjRMMiBkZXZpY2UgdHlwZXMgYXJlIGxpc3RlZCBpbiA8eHJlZiBsaW5rZW5kPSJkZXZpY2VzIiAvPi4KIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb250cm9scy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbAppbmRleCAyZmFlM2U4Li5hOTIwZWU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbApAQCAtMTI0Myw3ICsxMjQzLDcgQEAKIAkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk11dGVzIHRoZSBhdWRpbyB3aGVuCiBjYXB0dXJpbmcuIFRoaXMgaXMgbm90IGRvbmUgYnkgbXV0aW5nIGF1ZGlvIGhhcmR3YXJlLCB3aGljaCBjYW4gc3RpbGwKIHByb2R1Y2UgYSBzbGlnaHQgaGlzcywgYnV0IGluIHRoZSBlbmNvZGVyIGl0c2VsZiwgZ3VhcmFudGVlaW5nIGEgZml4ZWQKLWFuZCByZXByb2R1Y2FibGUgYXVkaW8gYml0c3RyZWFtLiAwID0gdW5tdXRlZCwgMSA9IG11dGVkLjwvZW50cnk+CithbmQgcmVwcm9kdWNpYmxlIGF1ZGlvIGJpdHN0cmVhbS4gMCA9IHVubXV0ZWQsIDEgPSBtdXRlZC48L2VudHJ5PgogCSAgICAgIDwvcm93PgogCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CiAJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXN1YmRldi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1zdWJkZXYueG1sCmluZGV4IDIxY2FmZjYuLjA1YzhmZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXN1YmRldi54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtc3ViZGV2LnhtbApAQCAtOTAsNyArOTAsNyBAQAogICAgIHByb2Nlc3NpbmcgaGFyZHdhcmUuPC9wYXJhPgogCiAgICAgPGZpZ3VyZSBpZD0icGlwZWxpbmUtc2NhbGluZyI+Ci0gICAgICA8dGl0bGU+SW1hZ2UgRm9ybWF0IE5lZ290YXRpb24gb24gUGlwZWxpbmVzPC90aXRsZT4KKyAgICAgIDx0aXRsZT5JbWFnZSBGb3JtYXQgTmVnb3RpYXRpb24gb24gUGlwZWxpbmVzPC90aXRsZT4KICAgICAgIDxtZWRpYW9iamVjdD4KIAk8aW1hZ2VvYmplY3Q+CiAJICA8aW1hZ2VkYXRhIGZpbGVyZWY9InBpcGVsaW5lLnBkZiIgZm9ybWF0PSJQUyIgLz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlidjRsLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlidjRsLnhtbAppbmRleCBjMTRmYzNkLi4zY2IxMGVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpYnY0bC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9saWJ2NGwueG1sCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJCTxwYXJhPmludCB2NGwyX2dldF9jb250cm9sKGludCBmZCwgaW50IGNpZCkgLQogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgMCAtIDY1NTM1LCBzY2FsZWQgdG8gZnJvbSB0aGUgYWN0dWFsIHJhbmdlCiBvZiB0aGUgZ2l2ZW4gdjRsIGNvbnRyb2wgaWQuIHdoZW4gdGhlIGNpZCBkb2VzIG5vdCBleGlzdCwgY291bGQgbm90IGJlCi1hY2Nlc3NlZCBmb3Igc29tZSByZWFzb24sIG9yIHNvbWUgZXJyb3Igb2NjdXJlZCAwIGlzIHJldHVybmVkLgorYWNjZXNzZWQgZm9yIHNvbWUgcmVhc29uLCBvciBzb21lIGVycm9yIG9jY3VycmVkIDAgaXMgcmV0dXJuZWQuCiA8L3BhcmE+PC9saXN0aXRlbT4KIDwvaXRlbWl6ZWRsaXN0PgogCQk8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwKaW5kZXggM2MzYjY2N2IuLjE2MGU0NjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwKQEAgLTEzMyw3ICsxMzMsNyBAQAogPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9MRUZUPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5MZWZ0IGtleTwvZW50cnk+PGVudHJ5PkxFRlQ8L2VudHJ5Pjwvcm93PgogPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9SSUdIVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UmlnaHQga2V5PC9lbnRyeT48ZW50cnk+UklHSFQ8L2VudHJ5Pjwvcm93PgogCi08cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+TWlzY2VsYW5lb3VzIGtleXM8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+TWlzY2VsbGFuZW91cyBrZXlzPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgogCiA8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0RPVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UmV0dXJuIGEgZG90PC9lbnRyeT48ZW50cnk+LjwvZW50cnk+PC9yb3c+CiA8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0ZOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgYSBmdW5jdGlvbjwvZW50cnk+PGVudHJ5PkZVTkNUSU9OPC9lbnRyeT48L3Jvdz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCmluZGV4IDBiYTE0OWQuLjU4Y2VkMjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtNDc4NCw3ICs0Nzg0LDcgQEAKICAgICAgICAgRk0gcmVnaXN0ZXJzIGNhbiBiZSBkaXJlY3RseSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBkaXJlY3QtRk0gQVBJLAogICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZF9mbS5oJmd0OzwvZmlsZW5hbWU+LiBJbgogICAgICAgQUxTQSBuYXRpdmUgbW9kZSwgRk0gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoCi0gICAgICB0aGUgSGFyZHdhcmUtRGVwZW5kYW50IERldmljZSBkaXJlY3QtRk0gZXh0ZW5zaW9uIEFQSSwgd2hlcmVhcyBpbgorICAgICAgdGhlIEhhcmR3YXJlLURlcGVuZGVudCBEZXZpY2UgZGlyZWN0LUZNIGV4dGVuc2lvbiBBUEksIHdoZXJlYXMgaW4KICAgICAgIE9TUyBjb21wYXRpYmxlIG1vZGUsIEZNIHJlZ2lzdGVycyBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGUgT1NTCiAgICAgICBkaXJlY3QtRk0gY29tcGF0aWJsZSBBUEkgaW4gPGZpbGVuYW1lPi9kZXYvZG1mbVg8L2ZpbGVuYW1lPiBkZXZpY2UuIAogICAgICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvTVNJLUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQKaW5kZXggZGNmN2FjYy4uM2Y1ZTBiMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9QQ0kvTVNJLUhPV1RPLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSS9NU0ktSE9XVE8udHh0CkBAIC0yNTMsOCArMjUzLDggQEAKIG11c3QgYmUgYSBwb3dlciBvZiB0d28pLiAgSW4gYWRkaXRpb24sIHRoZSBNU0kgaW50ZXJydXB0IHZlY3RvcnMgbXVzdAogYmUgYWxsb2NhdGVkIGNvbnNlY3V0aXZlbHksIHNvIHRoZSBzeXN0ZW0gbWF5IG5vdCBiZSBhYmxlIHRvIGFsbG9jYXRlCiBhcyBtYW55IHZlY3RvcnMgZm9yIE1TSSBhcyBpdCBjb3VsZCBmb3IgTVNJLVguICBPbiBzb21lIHBsYXRmb3JtcywgTVNJCi1pbnRlcnJ1cHRzIG11c3QgYWxsIGJlIHRhcmdldHRlZCBhdCB0aGUgc2FtZSBzZXQgb2YgQ1BVcyB3aGVyZWFzIE1TSS1YCi1pbnRlcnJ1cHRzIGNhbiBhbGwgYmUgdGFyZ2V0dGVkIGF0IGRpZmZlcmVudCBDUFVzLgoraW50ZXJydXB0cyBtdXN0IGFsbCBiZSB0YXJnZXRlZCBhdCB0aGUgc2FtZSBzZXQgb2YgQ1BVcyB3aGVyZWFzIE1TSS1YCitpbnRlcnJ1cHRzIGNhbiBhbGwgYmUgdGFyZ2V0ZWQgYXQgZGlmZmVyZW50IENQVXMuCiAKIDQuNS4yIFNwaW5sb2NrcwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1NlY3VyaXR5QnVncyBiL0RvY3VtZW50YXRpb24vU2VjdXJpdHlCdWdzCmluZGV4IDI2YzNiMzYuLmE2NjBkNDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU2VjdXJpdHlCdWdzCisrKyBiL0RvY3VtZW50YXRpb24vU2VjdXJpdHlCdWdzCkBAIC0yOCw3ICsyOCw3IEBACiBBIGRpc2Nsb3N1cmUgZGF0ZSBpcyBuZWdvdGlhdGVkIGJ5IHRoZSBzZWN1cml0eSB0ZWFtIHdvcmtpbmcgd2l0aCB0aGUKIGJ1ZyBzdWJtaXR0ZXIgYXMgd2VsbCBhcyB2ZW5kb3JzLiAgSG93ZXZlciwgdGhlIGtlcm5lbCBzZWN1cml0eSB0ZWFtCiBob2xkcyB0aGUgZmluYWwgc2F5IHdoZW4gc2V0dGluZyBhIGRpc2Nsb3N1cmUgZGF0ZS4gIFRoZSB0aW1lZnJhbWUgZm9yCi1kaXNjbG9zdXJlIGlzIGZyb20gaW1tZWRpYXRlIChlc3AuIGlmIGl0J3MgYWxyZWFkeSBwdWJsaWNhbGx5IGtub3duKQorZGlzY2xvc3VyZSBpcyBmcm9tIGltbWVkaWF0ZSAoZXNwLiBpZiBpdCdzIGFscmVhZHkgcHVibGljbHkga25vd24pCiB0byBhIGZldyB3ZWVrcy4gIEFzIGEgYmFzaWMgZGVmYXVsdCBwb2xpY3ksIHdlIGV4cGVjdCByZXBvcnQgZGF0ZSB0bwogZGlzY2xvc3VyZSBkYXRlIHRvIGJlIG9uIHRoZSBvcmRlciBvZiA3IGRheXMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCmluZGV4IDM4ZDJhYWIuLjMxOWJhYTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCWNvbXBsZXRlIG92ZXJ2aWV3IG9mIHRoZSBwb3dlciBtYW5hZ2VtZW50IGlzc3VlcyByZWxhdGVkIHRvCiAJCWRyaXZlcnMgc2VlIERvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQgLgogCi1Db250cm9sOglJbiBnZW5lcmFsIGlmIHRoZXJlIGlzIGFjdGl2ZSBtYWludGFpbmFuY2Ugb2YgYSBkcml2ZXIgYnkKK0NvbnRyb2w6CUluIGdlbmVyYWwgaWYgdGhlcmUgaXMgYWN0aXZlIG1haW50ZW5hbmNlIG9mIGEgZHJpdmVyIGJ5CiAJCXRoZSBhdXRob3IgdGhlbiBwYXRjaGVzIHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGVtIHVubGVzcwogCQl0aGV5IGFyZSB0b3RhbGx5IG9idmlvdXMgYW5kIHdpdGhvdXQgbmVlZCBvZiBjaGVja2luZy4KIAkJSWYgeW91IHdhbnQgdG8gYmUgdGhlIGNvbnRhY3QgYW5kIHVwZGF0ZSBwb2ludCBmb3IgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCA2ODllMjM3Li5lNDM5Y2QwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTcyOSw3ICs3MjksNyBAQAogICA8aHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNS80LzcvMTgzPgogCiBBbmRpIEtsZWVuLCAiT24gc3VibWl0dGluZyBrZXJuZWwgcGF0Y2hlcyIKLSAgU29tZSBzdHJhdGVnaWVzIHRvIGdldCBkaWZmaWN1bHQgb3IgY29udHJvdmVyc2FsIGNoYW5nZXMgaW4uCisgIFNvbWUgc3RyYXRlZ2llcyB0byBnZXQgZGlmZmljdWx0IG9yIGNvbnRyb3ZlcnNpYWwgY2hhbmdlcyBpbi4KICAgaHR0cDovL2hhbG9iYXRlcy5kZS9vbi1zdWJtaXR0aW5nLXBhdGNoZXMucGRmCiAKIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9JWFA0eHggYi9Eb2N1bWVudGF0aW9uL2FybS9JWFA0eHgKaW5kZXggMTMzYzVmYS4uN2I5MzUxZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eApAQCAtMzYsNyArMzYsNyBAQAogLSBUaW1lcnMgKHdhdGNoZG9nLCBPUykKIAogVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIHRoZSBjaGlwcyBhcmUgbm90IHN1cHBvcnRlZCBieSBMaW51eCBhbmQKLXJlcXVpcmUgdGhlIHVzZSBvZiBJbnRlbCdzIHByb3BpZXRhcnkgQ1NSIHNvZnRhcmU6CityZXF1aXJlIHRoZSB1c2Ugb2YgSW50ZWwncyBwcm9wcmlldGFyeSBDU1Igc29mdGFyZToKIAogLSBVU0IgZGV2aWNlIGludGVyZmFjZQogLSBOZXR3b3JrIGludGVyZmFjZXMgKEhTUywgVXRvcGlhLCBOUEVzLCBldGMpCkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgIGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL3Byb2R1Y3RzL25wZmFtaWx5L2l4cDQyNS5odG0gICAgCiAKLURPIE5PVCBQT1NUIFFVRVNUSU9OUyBUTyBUSEUgTElOVVggTUFJTElORyBMSVNUUyBSRUdBUkRJTkcgVEhFIFBST1BJRVRBUlkKK0RPIE5PVCBQT1NUIFFVRVNUSU9OUyBUTyBUSEUgTElOVVggTUFJTElORyBMSVNUUyBSRUdBUkRJTkcgVEhFIFBST1BSSUVUQVJZCiBTT0ZUV0FSRS4KIAogVGhlcmUgYXJlIHNldmVyYWwgd2Vic2l0ZXMgdGhhdCBwcm92aWRlIGRpcmVjdGlvbnMvcG9pbnRlcnMgb24gdXNpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dAppbmRleCA3ZWRkMGUyLi4xY2E2M2IzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICBBbGxvd3MgdGhlIGVudGlyZSBtZW1vcnkgdG8gYmUgY2hlY2tzdW1tZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUKICAgICBzdXNwZW5kIHRvIHNlZSBpZiB0aGVyZSBoYXMgYmVlbiBhbnkgY29ycnVwdGlvbiBvZiB0aGUgY29udGVudHMuCiAKLSAgICBOb3RlLCB0aGUgdGltZSB0byBjYWxjdWxhdGUgdGhlIENSQyBpcyBkZXBlbmRhbnQgb24gdGhlIENQVSBzcGVlZAorICAgIE5vdGUsIHRoZSB0aW1lIHRvIGNhbGN1bGF0ZSB0aGUgQ1JDIGlzIGRlcGVuZGVudCBvbiB0aGUgQ1BVIHNwZWVkCiAgICAgYW5kIHRoZSBzaXplIG9mIG1lbW9yeS4gRm9yIGFuIDY0TWJ5dGUgUkFNIGFyZWEgb24gYW4gMjAwTUh6CiAgICAgUzNDMjQxMCwgdGhpcyBjYW4gdGFrZSBhcHByb3hpbWF0ZWx5IDQgc2Vjb25kcyB0byBjb21wbGV0ZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy9HUElPLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmcvR1BJTy50eHQKaW5kZXggMDU4NTBjNi4uNTEzZjI1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy9HUElPLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nL0dQSU8udHh0CkBAIC01LDcgKzUsNyBAQAogLS0tLS0tLS0tLS0tCiAKIFRoaXMgb3V0bGluZXMgdGhlIFNhbXN1bmcgR1BJTyBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGFyY2hpdGVjdHVyZQotc3BlY2ZpYyBjYWxscyBwcm92aWRlZCBhbG9uZ2lzZGUgdGhlIGRyaXZlcnMvZ3BpbyBjb3JlLgorc3BlY2lmaWMgY2FsbHMgcHJvdmlkZWQgYWxvbmdpc2RlIHRoZSBkcml2ZXJzL2dwaW8gY29yZS4KIAogCiBTM0MyNFhYIChMZWdhY3kpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKaW5kZXggMmE3YjM4Yy4uYzZkODRjZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dApAQCAtNDk3LDcgKzQ5Nyw3IEBACiBlbnRyaWVzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBkbWEgYWRkcmVzcyBtYXBwaW5ncyBmaWxsZWQgaW4gYXQgdGhlCiBhcHByb3ByaWF0ZSB0aW1lLiBBcyBhbiBvcHRpbWl6YXRpb24sIGNvbnRpZ3VvdXMgcGh5c2ljYWwgcGFnZXMgY2FuIGJlCiBjb3ZlcmVkIGJ5IGEgc2luZ2xlIGVudHJ5IHdoZXJlIDxwYWdlPiByZWZlcnMgdG8gdGhlIGZpcnN0IHBhZ2UgYW5kIDxsZW4+Ci1jb3ZlcnMgdGhlIHJhbmdlIG9mIHBhZ2VzICh1cHRvIDE2IGNvbnRpZ3VvdXMgcGFnZXMgY291bGQgYmUgY292ZXJlZCB0aGlzCitjb3ZlcnMgdGhlIHJhbmdlIG9mIHBhZ2VzICh1cCB0byAxNiBjb250aWd1b3VzIHBhZ2VzIGNvdWxkIGJlIGNvdmVyZWQgdGhpcwogd2F5KS4gVGhlcmUgaXMgYSBoZWxwZXIgcm91dGluZSAoYmxrX3JxX21hcF9zZykgd2hpY2ggZHJpdmVycyBjYW4gdXNlIHRvIGJ1aWxkCiB0aGUgc2cgbGlzdC4KIApAQCAtNTY1LDcgKzU2NSw3IEBACiAJLgogCWludCB0YWc7CS8qIGNvbW1hbmQgdGFnIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0ICovCiAJdm9pZCAqc3BlY2lhbDsgIC8qIHNhbWUgYXMgYmVmb3JlICovCi0JY2hhciAqYnVmZmVyOyAgIC8qIHZhbGlkIG9ubHkgZm9yIGxvdyBtZW1vcnkgYnVmZmVycyB1cHRvCisJY2hhciAqYnVmZmVyOyAgIC8qIHZhbGlkIG9ubHkgZm9yIGxvdyBtZW1vcnkgYnVmZmVycyB1cCB0bwogCQkJIGN1cnJlbnRfbnJfc2VjdG9ycyAqLwogCS4KIAkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggY2JkZmI3ZC4uYWVkZjFiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApAQCAtMTEwLDIyICsxMTAsMjIgQEAKIHRhc2tzIGV0Yy4gVGhlIHJlc291cmNlIHBsYW5uaW5nIGZvciB0aGlzIHNlcnZlciBjb3VsZCBiZSBhbG9uZyB0aGUKIGZvbGxvd2luZyBsaW5lczoKIAotICAgICAgIENQVSA6ICAgICAgICAgICBUb3AgY3B1c2V0CisgICAgICAgQ1BVIDogICAgICAgICAgIlRvcCBjcHVzZXQiCiAgICAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgXAogICAgICAgICAgICAgICAgQ1BVU2V0MSAgICAgICAgIENQVVNldDIKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgIChQcm9mcykgICAgICAgICAoU3R1ZGVudHMpCisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgKFByb2Zlc3NvcnMpICAgIChTdHVkZW50cykKIAogICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gKHN5c3RlbSB0YXNrcykgYXJlIGF0dGFjaGVkIHRvIHRvcGNwdXNldCAoc28KICAgICAgICAgICAgICAgIHRoYXQgdGhleSBjYW4gcnVuIGFueXdoZXJlKSB3aXRoIGEgbGltaXQgb2YgMjAlCiAKLSAgICAgICBNZW1vcnkgOiBQcm9mZXNzb3JzICg1MCUpLCBzdHVkZW50cyAoMzAlKSwgc3lzdGVtICgyMCUpCisgICAgICAgTWVtb3J5IDogUHJvZmVzc29ycyAoNTAlKSwgU3R1ZGVudHMgKDMwJSksIHN5c3RlbSAoMjAlKQogCi0gICAgICAgRGlzayA6IFByb2YgKDUwJSksIHN0dWRlbnRzICgzMCUpLCBzeXN0ZW0gKDIwJSkKKyAgICAgICBEaXNrIDogUHJvZmVzc29ycyAoNTAlKSwgU3R1ZGVudHMgKDMwJSksIHN5c3RlbSAoMjAlKQogCiAgICAgICAgTmV0d29yayA6IFdXVyBicm93c2luZyAoMjAlKSwgTmV0d29yayBGaWxlIFN5c3RlbSAoNjAlKSwgb3RoZXJzICgyMCUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBcCi0gICAgICAgICAgICAgICAgICAgICAgIFByb2YgKDE1JSkgc3R1ZGVudHMgKDUlKQorICAgICAgICAgICAgICAgUHJvZmVzc29ycyAoMTUlKSAgc3R1ZGVudHMgKDUlKQogCiBCcm93c2VycyBsaWtlIEZpcmVmb3gvTHlueCBnbyBpbnRvIHRoZSBXV1cgbmV0d29yayBjbGFzcywgd2hpbGUgKGspbmZzZCBnbwogaW50byBORlMgbmV0d29yayBjbGFzcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKaW5kZXggYjZlZDYxYzkuLjdjMTYzNDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CkBAIC01Miw4ICs1MiwxMCBAQAogIHRhc2tzCQkJCSAjIGF0dGFjaCBhIHRhc2sodGhyZWFkKSBhbmQgc2hvdyBsaXN0IG9mIHRocmVhZHMKICBjZ3JvdXAucHJvY3MJCQkgIyBzaG93IGxpc3Qgb2YgcHJvY2Vzc2VzCiAgY2dyb3VwLmV2ZW50X2NvbnRyb2wJCSAjIGFuIGludGVyZmFjZSBmb3IgZXZlbnRfZmQoKQotIG1lbW9yeS51c2FnZV9pbl9ieXRlcwkJICMgc2hvdyBjdXJyZW50IG1lbW9yeShSU1MrQ2FjaGUpIHVzYWdlLgotIG1lbW9yeS5tZW1zdy51c2FnZV9pbl9ieXRlcwkgIyBzaG93IGN1cnJlbnQgbWVtb3J5K1N3YXAgdXNhZ2UKKyBtZW1vcnkudXNhZ2VfaW5fYnl0ZXMJCSAjIHNob3cgY3VycmVudCByZXNfY291bnRlciB1c2FnZSBmb3IgbWVtb3J5CisJCQkJIChTZWUgNS41IGZvciBkZXRhaWxzKQorIG1lbW9yeS5tZW1zdy51c2FnZV9pbl9ieXRlcwkgIyBzaG93IGN1cnJlbnQgcmVzX2NvdW50ZXIgdXNhZ2UgZm9yIG1lbW9yeStTd2FwCisJCQkJIChTZWUgNS41IGZvciBkZXRhaWxzKQogIG1lbW9yeS5saW1pdF9pbl9ieXRlcwkJICMgc2V0L3Nob3cgbGltaXQgb2YgbWVtb3J5IHVzYWdlCiAgbWVtb3J5Lm1lbXN3LmxpbWl0X2luX2J5dGVzCSAjIHNldC9zaG93IGxpbWl0IG9mIG1lbW9yeStTd2FwIHVzYWdlCiAgbWVtb3J5LmZhaWxjbnQJCQkgIyBzaG93IHRoZSBudW1iZXIgb2YgbWVtb3J5IHVzYWdlIGhpdHMgbGltaXRzCkBAIC00NTMsNiArNDU1LDE1IEBACiBZb3UgY2FuIHJlc2V0IGZhaWxjbnQgYnkgd3JpdGluZyAwIHRvIGZhaWxjbnQgZmlsZS4KICMgZWNobyAwID4gLi4uL21lbW9yeS5mYWlsY250CiAKKzUuNSB1c2FnZV9pbl9ieXRlcworCitGb3IgZWZmaWNpZW5jeSwgYXMgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIG1lbW9yeSBjZ3JvdXAgdXNlcyBzb21lIG9wdGltaXphdGlvbgordG8gYXZvaWQgdW5uZWNlc3NhcnkgY2FjaGVsaW5lIGZhbHNlIHNoYXJpbmcuIHVzYWdlX2luX2J5dGVzIGlzIGFmZmVjdGVkIGJ5IHRoZQorbWV0aG9kIGFuZCBkb2Vzbid0IHNob3cgJ2V4YWN0JyB2YWx1ZSBvZiBtZW1vcnkoYW5kIHN3YXApIHVzYWdlLCBpdCdzIGFuIGZ1enoKK3ZhbHVlIGZvciBlZmZpY2llbnQgYWNjZXNzLiAoT2YgY291cnNlLCB3aGVuIG5lY2Vzc2FyeSwgaXQncyBzeW5jaHJvbml6ZWQuKQorSWYgeW91IHdhbnQgdG8ga25vdyBtb3JlIGV4YWN0IG1lbW9yeSB1c2FnZSwgeW91IHNob3VsZCB1c2UgUlNTK0NBQ0hFKCtTV0FQKQordmFsdWUgaW4gbWVtb3J5LnN0YXQoc2VlIDUuMikuCisKIDYuIEhpZXJhcmNoeSBzdXBwb3J0CiAKIFRoZSBtZW1vcnkgY29udHJvbGxlciBzdXBwb3J0cyBhIGRlZXAgaGllcmFyY2h5IGFuZCBoaWVyYXJjaGljYWwgYWNjb3VudGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQKaW5kZXggNDVkNWEyMS4uYTIwYmZkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQKQEAgLTE5Niw3ICsxOTYsNyBAQAogCSNUbyBkaXNwbGF5IHRoZSBjdXJyZW50IGNwdSBzdGF0ZS4KIAkjY2F0IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvb25saW5lCiAKLVE6IFdoeSBjYW50IGkgcmVtb3ZlIENQVTAgb24gc29tZSBzeXN0ZW1zPworUTogV2h5IGNhbid0IGkgcmVtb3ZlIENQVTAgb24gc29tZSBzeXN0ZW1zPwogQTogU29tZSBhcmNoaXRlY3R1cmVzIG1heSBoYXZlIHNvbWUgc3BlY2lhbCBkZXBlbmRlbmN5IG9uIGEgY2VydGFpbiBDUFUuCiAKIEZvciBlLmcgaW4gSUE2NCBwbGF0Zm9ybXMgd2UgaGF2ZSBhYmlsaXR5IHRvIHNlbnQgcGxhdGZvcm0gaW50ZXJydXB0cyB0byB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWxsX3JidS50eHQKaW5kZXggMTUxNzQ5OC4uZDI2MmUyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZWxsX3JidS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZWxsX3JidS50eHQKQEAgLTYyLDcgKzYyLDcgQEAKIGZpbGUuCiBUaGlzIGZpbGUgaXMgdGhlbiBjb3BpZWQgdG8gL3N5cy9jbGFzcy9maXJtd2FyZS9kZWxsX3JidS9kYXRhLgogT25jZSB0aGlzIGZpbGUgZ2V0cyB0byB0aGUgZHJpdmVyLCB0aGUgZHJpdmVyIGV4dHJhY3RzIHBhY2tldF9zaXplIGRhdGEgZnJvbQotdGhlIGZpbGUgYW5kIHNwcmVhZHMgaXQgYWNjcm9zcyB0aGUgcGh5c2ljYWwgbWVtb3J5IGluIGNvbnRpZ3VvdXMgcGFja2V0X3NpemVkCit0aGUgZmlsZSBhbmQgc3ByZWFkcyBpdCBhY3Jvc3MgdGhlIHBoeXNpY2FsIG1lbW9yeSBpbiBjb250aWd1b3VzIHBhY2tldF9zaXplZAogc3BhY2UuCiBUaGlzIG1ldGhvZCBtYWtlcyBzdXJlIHRoYXQgYWxsIHRoZSBwYWNrZXRzIGdldCB0byB0aGUgZHJpdmVyIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXNlcnZpY2UtdGltZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tc2VydmljZS10aW1lLnR4dAppbmRleCA3ZDAwNjY4Li5mYjFkNGEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tc2VydmljZS10aW1lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tc2VydmljZS10aW1lLnR4dApAQCAtMzcsNyArMzcsNyBAQAogPT09PT09PT09CiAKIGRtLXNlcnZpY2UtdGltZSBhZGRzIHRoZSBJL08gc2l6ZSB0byAnaW4tZmxpZ2h0LXNpemUnIHdoZW4gdGhlIEkvTyBpcwotZGlzcGF0Y2hlZCBhbmQgc3Vic3RyYWN0cyB3aGVuIGNvbXBsZXRlZC4KK2Rpc3BhdGNoZWQgYW5kIHN1YnRyYWN0cyB3aGVuIGNvbXBsZXRlZC4KIEJhc2ljYWxseSwgZG0tc2VydmljZS10aW1lIHNlbGVjdHMgYSBwYXRoIGhhdmluZyBtaW5pbXVtIHNlcnZpY2UgdGltZQogd2hpY2ggaXMgY2FsY3VsYXRlZCBieToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ZiL3NtNTAxZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ZiL3NtNTAxZmIudHh0CmluZGV4IDdkMzE5ZmIuLjlkOWYwMDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9mYi9zbTUwMWZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZmIvc201MDFmYi50eHQKQEAgLTE4LDkgKzE4LDkgQEAKIC0gZWRpZCA6IHZlcmJhdGltIEVESUQgZGF0YSBibG9jayBkZXNjcmliaW5nIGF0dGFjaGVkIGRpc3BsYXkuCiAgIERhdGEgZnJvbSB0aGUgZGV0YWlsZWQgdGltaW5nIGRlc2NyaXB0b3Igd2lsbCBiZSB1c2VkIHRvCiAgIHByb2dyYW0gdGhlIGRpc3BsYXkgY29udHJvbGxlci4KLS0gbGl0dGxlLWVuZGlhbjogYXZhaWxpYWJsZSBvbiBiaWcgZW5kaWFuIHN5c3RlbXMsIHRvCistIGxpdHRsZS1lbmRpYW46IGF2YWlsYWJsZSBvbiBiaWcgZW5kaWFuIHN5c3RlbXMsIHRvCiAgIHNldCBkaWZmZXJlbnQgZm9yZWlnbiBlbmRpYW4uCi0tIGJpZy1lbmRpYW46IGF2YWlsaWFibGUgb24gbGl0dGxlIGVuZGlhbiBzeXN0ZW1zLCB0bworLSBiaWctZW5kaWFuOiBhdmFpbGFibGUgb24gbGl0dGxlIGVuZGlhbiBzeXN0ZW1zLCB0bwogICBzZXQgZGlmZmVyZW50IGZvcmVpZ24gZW5kaWFuLgogCiBFeGFtcGxlIGZvciBNUEM1MjAwOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9mc2wtdXBtLW5hbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9mc2wtdXBtLW5hbmQudHh0CmluZGV4IGE0OGIyY2EuLjAwZjFmNTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZnNsLXVwbS1uYW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2ZzbC11cG0tbmFuZC50eHQKQEAgLTE1LDcgKzE1LDcgQEAKIC0gZ3Bpb3MgOiBtYXkgc3BlY2lmeSBvcHRpb25hbCBHUElPcyBjb25uZWN0ZWQgdG8gdGhlIFJlYWR5LU5vdC1CdXN5IHBpbnMKIAkoUi9CIykuIEZvciBtdWx0aS1jaGlwIGRldmljZXMsICJuIiBHUElPIGRlZmluaXRpb25zIGFyZSByZXF1aXJlZAogCWFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNoaXBzLgotLSBjaGlwLWRlbGF5IDogY2hpcCBkZXBlbmRlbnQgZGVsYXkgZm9yIHRyYW5zZmVyaW5nIGRhdGEgZnJvbSBhcnJheSB0bworLSBjaGlwLWRlbGF5IDogY2hpcCBkZXBlbmRlbnQgZGVsYXkgZm9yIHRyYW5zZmVycmluZyBkYXRhIGZyb20gYXJyYXkgdG8KIAlyZWFkIHJlZ2lzdGVycyAodFIpLiBSZXF1aXJlZCBpZiBwcm9wZXJ0eSAiZ3Bpb3MiIGlzIG5vdCB1c2VkCiAJKFIvQiMgcGlucyBub3QgY29ubmVjdGVkKS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vc2phMTAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9zamExMDAwLnR4dAppbmRleCBkNmQyMDlkLi5jMmRiY2VjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9zamExMDAwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9zamExMDAwLnR4dApAQCAtMzksNyArMzksNyBAQAogCiAtIG54cCxuby1jb21wYXJhdG9yLWJ5cGFzcyA6IEFsbG93cyB0byBkaXNhYmxlIHRoZSBDQU4gaW5wdXQgY29tcGVyYXRvci4KIAotRm9yIGZ1dGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIGhhdmUgYSBsb29rIHRvIHRoZSBTSkExMDAwIGRhdGEgc2hlZXQuCitGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIGhhdmUgYSBsb29rIHRvIHRoZSBTSkExMDAwIGRhdGEgc2hlZXQuCiAKIEV4YW1wbGVzOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKaW5kZXggOGFhMTBmNC4uNGY2MTQ1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dApAQCAtMTk5LDcgKzE5OSw3IEBACiAKIEVYQU1QTEUgNQogCS8qCi0JICogRGVmaW5pdGlvbiBvZiBhbiBlcnJvciBpbnRlcnJ1cHQgKGludGVydXB0IHR5cGUgMSkuCisJICogRGVmaW5pdGlvbiBvZiBhbiBlcnJvciBpbnRlcnJ1cHQgKGludGVycnVwdCB0eXBlIDEpLgogCSAqIFNvQyBpbnRlcnJ1cHQgbnVtYmVyIGlzIDE2IGFuZCB0aGUgc3BlY2lmaWMgZXJyb3IKICAgICAgICAgICogaW50ZXJydXB0IGJpdCBpbiB0aGUgZXJyb3IgaW50ZXJydXB0IHN1bW1hcnkgcmVnaXN0ZXIKIAkgKiBpcyAyMy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9ib290aW5nLXdpdGhvdXQtb2YudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKaW5kZXggNTVmZDI2Mi4uNTA2MTlhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKQEAgLTEzOCw3ICsxMzgsNyBAQAogc2VjdGlvbiBJSUksIGJ1dCwgZm9yIGV4YW1wbGUsIHRoZSBrZXJuZWwgZG9lcyBub3QgcmVxdWlyZSB5b3UgdG8KIGNyZWF0ZSBhIG5vZGUgZm9yIGV2ZXJ5IFBDSSBkZXZpY2UgaW4gdGhlIHN5c3RlbS4gSXQgaXMgYSByZXF1aXJlbWVudAogdG8gaGF2ZSBhIG5vZGUgZm9yIFBDSSBob3N0IGJyaWRnZXMgaW4gb3JkZXIgdG8gcHJvdmlkZSBpbnRlcnJ1cHQKLXJvdXRpbmcgaW5mb3JtYXRpb25zIGFuZCBtZW1vcnkvSU8gcmFuZ2VzLCBhbW9uZyBvdGhlcnMuIEl0IGlzIGFsc28KK3JvdXRpbmcgaW5mb3JtYXRpb24gYW5kIG1lbW9yeS9JTyByYW5nZXMsIGFtb25nIG90aGVycy4gSXQgaXMgYWxzbwogcmVjb21tZW5kZWQgdG8gZGVmaW5lIG5vZGVzIGZvciBvbiBjaGlwIGRldmljZXMgYW5kIG90aGVyIGJ1c2VzIHRoYXQKIGRvbid0IHNwZWNpZmljYWxseSBmaXQgaW4gYW4gZXhpc3RpbmcgT0Ygc3BlY2lmaWNhdGlvbi4gVGhpcyBjcmVhdGVzIGEKIGdyZWF0IGZsZXhpYmlsaXR5IGluIHRoZSB3YXkgdGhlIGtlcm5lbCBjYW4gdGhlbiBwcm9iZSB0aG9zZSBhbmQgbWF0Y2gKQEAgLTM4NSw3ICszODUsNyBAQAogICAgICBhbW9uZyBvdGhlcnMsIGJ5IGtleGVjLiBJZiB5b3UgYXJlIG9uIGFuIFNNUCBzeXN0ZW0sIHRoaXMgdmFsdWUKICAgICAgc2hvdWxkIG1hdGNoIHRoZSBjb250ZW50IG9mIHRoZSAicmVnIiBwcm9wZXJ0eSBvZiB0aGUgQ1BVIG5vZGUgaW4KICAgICAgdGhlIGRldmljZS10cmVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENQVSBjYWxsaW5nIHRoZSBrZXJuZWwgZW50cnkKLSAgICAgcG9pbnQgKHNlZSBmdXJ0aGVyIGNoYXB0ZXJzIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvbiB0aGUgcmVxdWlyZWQKKyAgICAgcG9pbnQgKHNlZSBmdXJ0aGVyIGNoYXB0ZXJzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSByZXF1aXJlZAogICAgICBkZXZpY2UtdHJlZSBjb250ZW50cykKIAogICAgLSBzaXplX2R0X3N0cmluZ3MKQEAgLTU1Myw3ICs1NTMsNyBAQAogCiBUaGlzIHRyZWUgaXMgYWxtb3N0IGEgbWluaW1hbCB0cmVlLiBJdCBwcmV0dHkgbXVjaCBjb250YWlucyB0aGUKIG1pbmltYWwgc2V0IG9mIHJlcXVpcmVkIG5vZGVzIGFuZCBwcm9wZXJ0aWVzIHRvIGJvb3QgYSBsaW51eCBrZXJuZWw7Ci10aGF0IGlzLCBzb21lIGJhc2ljIG1vZGVsIGluZm9ybWF0aW9ucyBhdCB0aGUgcm9vdCwgdGhlIENQVXMsIGFuZCB0aGUKK3RoYXQgaXMsIHNvbWUgYmFzaWMgbW9kZWwgaW5mb3JtYXRpb24gYXQgdGhlIHJvb3QsIHRoZSBDUFVzLCBhbmQgdGhlCiBwaHlzaWNhbCBtZW1vcnkgbGF5b3V0LiAgSXQgYWxzbyBpbmNsdWRlcyBtaXNjIGluZm9ybWF0aW9uIHBhc3NlZAogdGhyb3VnaCAvY2hvc2VuLCBsaWtlIGluIHRoaXMgZXhhbXBsZSwgdGhlIHBsYXRmb3JtIHR5cGUgKG1hbmRhdG9yeSkKIGFuZCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKG9wdGlvbmFsKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGIvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IKaW5kZXggYzgyMzhlNC4uYzRkOTYzYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IKQEAgLTEzOCw3ICsxMzgsNyBAQAogaW4gdGhlIGRldmljZSkuCiAKIElmIHlvdSB3YW50IHRvIGVuYWJsZSBkZWJ1ZyBvdXRwdXQsIHlvdSBoYXZlIHRvIGxvYWQgdGhlIGRyaXZlciBtYW51YWxseSBhbmQKLWZyb20gd2l0aGluZyB0aGUgZHZiLWtlcm5lbCBjdnMgcmVwb3NpdG9yeS4KK2Zyb20gd2l0aGluIHRoZSBkdmIta2VybmVsIGN2cyByZXBvc2l0b3J5LgogCiBmaXJzdCBoYXZlIGEgbG9vaywgd2hpY2ggZGVidWcgbGV2ZWwgYXJlIGF2YWlsYWJsZToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvY2kudHh0CmluZGV4IDRhMGMyYjUuLjZjM2JkYTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2NpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jaS50eHQKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogKiBDSSBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVRoZSBDSSBtb2R1bGUgc3VwcG9ydCBpcyBsYXJnZWx5IGRlcGVuZGFudCB1cG9uIHRoZSBmaXJtd2FyZSBvbiB0aGUgY2FyZHMKK1RoZSBDSSBtb2R1bGUgc3VwcG9ydCBpcyBsYXJnZWx5IGRlcGVuZGVudCB1cG9uIHRoZSBmaXJtd2FyZSBvbiB0aGUgY2FyZHMKIFNvbWUgY2FyZHMgZG8gc3VwcG9ydCBhbG1vc3QgYWxsIG9mIHRoZSBhdmFpbGFibGUgQ0kgbW9kdWxlcy4gVGhlcmUgaXMKIG5vdGhpbmcgbXVjaCB0aGF0IGNhbiBiZSBkb25lIGluIG9yZGVyIHRvIG1ha2UgYWRkaXRpb25hbCBDSSBtb2R1bGVzCiB3b3JraW5nIHdpdGggdGhlc2UgY2FyZHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9mYXEudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dAppbmRleCAxMjE4MzJlLi45N2IxMzczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9mYXEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2ZhcS50eHQKQEAgLTEwNiw3ICsxMDYsNyBAQAogNS4gVGhlIGR2Yl9uZXQgZGV2aWNlIGRvZXNuJ3QgZ2l2ZSBtZSBhbnkgcGFja2V0cyBhdCBhbGwKIAogCVJ1biB0Y3BkdW1wIG9uIHRoZSBkdmIwXzAgaW50ZXJmYWNlLiBUaGlzIHNldHMgdGhlIGludGVyZmFjZQotCWludG8gcHJvbWlzY291cyBtb2RlIHNvIGl0IGFjY2VwdHMgYW55IHBhY2tldHMgZnJvbSB0aGUgUElECisJaW50byBwcm9taXNjdW91cyBtb2RlIHNvIGl0IGFjY2VwdHMgYW55IHBhY2tldHMgZnJvbSB0aGUgUElECiAJeW91IGhhdmUgY29uZmlndXJlZCB3aXRoIHRoZSBkdmJuZXQgdXRpbGl0eS4gQ2hlY2sgaWYgdGhlcmUKIAlhcmUgYW55IHBhY2tldHMgd2l0aCB0aGUgSVAgYWRkciBhbmQgTUFDIGFkZHIgeW91IGhhdmUKIAljb25maWd1cmVkIHdpdGggaWZjb25maWcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi91ZGV2LnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL3VkZXYudHh0CmluZGV4IDY4ZWUyMjQuLjQxMjMwNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL3VkZXYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL3VkZXYudHh0CkBAIC0xLDcgKzEsNyBAQAogVGhlIERWQiBzdWJzeXN0ZW0gY3VycmVudGx5IHJlZ2lzdGVycyB0byB0aGUgc3lzZnMgc3Vic3lzdGVtIHVzaW5nIHRoZQogImNsYXNzX3NpbXBsZSIgaW50ZXJmYWNlLgogCi1UaGlzIG1lYW5zIHRoYXQgb25seSB0aGUgYmFzaWMgaW5mb3JtYXRpb25zIGxpa2UgbW9kdWxlIGxvYWRpbmcgcGFyYW1ldGVycworVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGJhc2ljIGluZm9ybWF0aW9uIGxpa2UgbW9kdWxlIGxvYWRpbmcgcGFyYW1ldGVycwogYXJlIHByZXNlbnRlZCB0aHJvdWdoIHN5c2ZzLiBPdGhlciB0aGluZ3MgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZyBhcmUKIGN1cnJlbnRseSAqbm90KiBhdmFpbGFibGUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy50eHQgYi9Eb2N1bWVudGF0aW9uL2VkYWMudHh0CmluZGV4IDllZTc3NGQuLjI0OTgyMmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9lZGFjLnR4dApAQCAtMzExLDcgKzMxMSw3IEBACiAJJ2NlX25vaW5mb19jb3VudCcKIAogCVRoaXMgYXR0cmlidXRlIGZpbGUgZGlzcGxheXMgdGhlIG51bWJlciBvZiBDRXMgdGhhdAotCWhhdmUgb2NjdXJyZWQgd2hlcmV3aXRoIG5vIGluZm9ybWF0aW9ucyBhcyB0byB3aGljaCBESU1NIHNsb3QKKwloYXZlIG9jY3VycmVkIHdoZXJld2l0aCBubyBpbmZvcm1hdGlvbiBhcyB0byB3aGljaCBESU1NIHNsb3QKIAlpcyBoYXZpbmcgZXJyb3JzLiBNZW1vcnkgaXMgaGFuZGljYXBwZWQsIGJ1dCBvcGVyYXRpb25hbCwKIAl5ZXQgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRvIGluZGljYXRlIHdoaWNoIHNsb3QKIAl0aGUgZmFpbGluZyBtZW1vcnkgaXMgaW4uIFRoaXMgY291bnQgZmllbGQgc2hvdWxkIGJlIGFsc28KQEAgLTc0MSw3ICs3NDEsNyBAQAogICAgQXMgRURBQyBBUEkgbWFwcyB0aGUgbWluaW11bSB1bml0eSBpcyBjc3Jvd3MsIHRoZSBkcml2ZXIgc2VxdWVuY2lhbGx5CiAgICBtYXBzIGNoYW5uZWwvZGltbSBpbnRvIGRpZmZlcmVudCBjc3Jvd3MuCiAKLSAgIEZvciBleGFtcGxlLCBzdXBvc2luZyB0aGUgZm9sbG93aW5nIGxheW91dDoKKyAgIEZvciBleGFtcGxlLCBzdXBwb3NpbmcgdGhlIGZvbGxvd2luZyBsYXlvdXQ6CiAJQ2gwIHBoeSByZDAsIHdyMCAoMHgwNjNmNDAzMSk6IDIgcmFua3MsIFVESU1NcwogCSAgZGltbSAwIDEwMjQgTWIgb2Zmc2V0OiAwLCBiYW5rOiA4LCByYW5rOiAxLCByb3c6IDB4NDAwMCwgY29sOiAweDQwMAogCSAgZGltbSAxIDEwMjQgTWIgb2Zmc2V0OiA0LCBiYW5rOiA4LCByYW5rOiAxLCByb3c6IDB4NDAwMCwgY29sOiAweDQwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9laXNhLnR4dCBiL0RvY3VtZW50YXRpb24vZWlzYS50eHQKaW5kZXggZjI5N2ZjMS4uMzhjZjBjNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9laXNhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Vpc2EudHh0CkBAIC04NCw3ICs4NCw3IEBACiAKIGlkX3RhYmxlCTogYW4gYXJyYXkgb2YgTlVMTCB0ZXJtaW5hdGVkIEVJU0EgaWQgc3RyaW5ncywKIAkJICBmb2xsb3dlZCBieSBhbiBlbXB0eSBzdHJpbmcuIEVhY2ggc3RyaW5nIGNhbgotCQkgIG9wdGlvbmFsbHkgYmUgcGFpcmVkIHdpdGggYSBkcml2ZXItZGVwZW5kYW50IHZhbHVlCisJCSAgb3B0aW9uYWxseSBiZSBwYWlyZWQgd2l0aCBhIGRyaXZlci1kZXBlbmRlbnQgdmFsdWUKIAkJICAoZHJpdmVyX2RhdGEpLgogCiBkcml2ZXIJCTogYSBnZW5lcmljIGRyaXZlciwgc3VjaCBhcyBkZXNjcmliZWQgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvdmlhZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQKaW5kZXggMWEyZThhYS4uNDQ0ZTM0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiAgICAgc3VwcG9ydGVkX291dHB1dF9kZXZpY2VzCiAKLSAgICAgICAgVGhpcyByZWFkLW9ubHkgZmlsZSBjb250YWlucyBhIGZ1bGwgJywnIHNlcGVyYXRlZCBsaXN0IGNvbnRhaW5pbmcgYWxsCisgICAgICAgIFRoaXMgcmVhZC1vbmx5IGZpbGUgY29udGFpbnMgYSBmdWxsICcsJyBzZXBhcmF0ZWQgbGlzdCBjb250YWluaW5nIGFsbAogICAgICAgICBvdXRwdXQgZGV2aWNlcyB0aGF0IGNvdWxkIGJlIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtLiBJdCBpcyBsaWtlbHkKICAgICAgICAgdGhhdCBub3QgYWxsIG9mIHRob3NlIGhhdmUgYSBjb25uZWN0b3Igb24geW91ciBoYXJkd2FyZSBidXQgaXQgc2hvdWxkCiAgICAgICAgIHByb3ZpZGUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhvc2UgbmFtZXMgbWF0Y2gKQEAgLTIyNSw3ICsyMjUsNyBAQAogICAgICAgICBUaGlzIGNhbiBoYXBwZW4gZm9yIGV4YW1wbGUgaWYgb25seSBvbmUgKHRoZSBvdGhlcikgaWdhIGlzIHVzZWQuCiAgICAgICAgIFdyaXRpbmcgdG8gdGhlc2UgZmlsZXMgYWxsb3dzIGFkanVzdGluZyB0aGUgb3V0cHV0IGRldmljZXMgZHVyaW5nCiAgICAgICAgIHJ1bnRpbWUuIE9uZSBjYW4gYWRkIG5ldyBkZXZpY2VzLCByZW1vdmUgZXhpc3Rpbmcgb25lcyBvciBzd2l0Y2gKLSAgICAgICAgYmV0d2VlbiBpZ2FzLiBFc3NlbnRpYWxseSB5b3UgY2FuIHdyaXRlIGEgJywnIHNlcGVyYXRlZCBsaXN0IG9mIGRldmljZQorICAgICAgICBiZXR3ZWVuIGlnYXMuIEVzc2VudGlhbGx5IHlvdSBjYW4gd3JpdGUgYSAnLCcgc2VwYXJhdGVkIGxpc3Qgb2YgZGV2aWNlCiAgICAgICAgIG5hbWVzIChvciBhIHNpbmdsZSBvbmUpIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgb3V0cHV0IHRvIHRob3NlCiAgICAgICAgIGZpbGVzLiBZb3UgY2FuIGFkZCBhICcrJyBvciAnLScgYXMgYSBwcmVmaXggYWxsb3dpbmcgc2ltcGxlIGFkZGl0aW9uCiAgICAgICAgIGFuZCByZW1vdmFsIG9mIGRldmljZXMuIFNvIGEgcHJlZml4ICcrJyBhZGRzIHRoZSBkZXZpY2VzIGZyb20geW91ciBsaXN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggMjc0YjMyZC4uNDkyZTgxZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMzg3LDI2ICszODcsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CVN1cHBvcnQgZm9yIGxjZF9zd2l0Y2ggYW5kIGRpc3BsYXlfZ2V0IGluIGFzdXMtbGFwdG9wIGRyaXZlcgotV2hlbjoJTWFyY2ggMjAxMAotV2h5OglUaGVzZSB0d28gZmVhdHVyZXMgdXNlIG5vbi1zdGFuZGFyZCBpbnRlcmZhY2VzLiBUaGVyZSBhcmUgdGhlCi0Jb25seSBmZWF0dXJlcyB0aGF0IHJlYWxseSBuZWVkIG11bHRpcGxlIHBhdGggdG8gZ3Vlc3Mgd2hhdCdzCi0JdGhlIHJpZ2h0IG1ldGhvZCBuYW1lIG9uIGEgc3BlY2lmaWMgbGFwdG9wLgotCi0JUmVtb3ZpbmcgdGhlbSB3aWxsIGFsbG93IHRvIHJlbW92ZSBhIGxvdCBvZiBjb2RlIGFuIHNpZ25pZmljYW50bHkKLQljbGVhbiB0aGUgZHJpdmVycy4KLQotCVRoaXMgd2lsbCBhZmZlY3QgdGhlIGJhY2tsaWdodCBjb2RlIHdoaWNoIHdvbid0IGJlIGFibGUgdG8ga25vdwotCWlmIHRoZSBiYWNrbGlnaHQgaXMgb24gb3Igb2ZmLiBUaGUgcGxhdGZvcm0gZGlzcGxheSBmaWxlIHdpbGwgYWxzbyBiZQotCXdyaXRlIG9ubHkgKGxpa2UgdGhlIG9uZSBpbiBlZWVwYy1sYXB0b3ApLgotCi0JVGhpcyBzaG91bGQnbnQgYWZmZWN0IGEgbG90IG9mIHVzZXIgYmVjYXVzZSB0aGV5IHVzdWFsbHkga25vdwotCXdoZW4gdGhlaXIgZGlzcGxheSBpcyBvbiBvciBvZmYuCi0KLVdobzoJQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluLmNoYXJ5QGdtYWlsLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglzeXNmcy1jbGFzcy1yZmtpbGwgc3RhdGUgZmlsZQogV2hlbjoJRmViIDIwMTQKIEZpbGVzOgluZXQvcmZraWxsL2NvcmUuYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hdXRvZnM0LW1vdW50LWNvbnRyb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hdXRvZnM0LW1vdW50LWNvbnRyb2wudHh0CmluZGV4IDUxOTg2YmYuLjRjOTU5MzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b2ZzNC1tb3VudC1jb250cm9sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2F1dG9mczQtbW91bnQtY29udHJvbC50eHQKQEAgLTMwOSw3ICszMDksNyBAQAogQVVUT0ZTX0RFVl9JT0NUTF9USU1FT1VUX0NNRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TZXQgdGhlIGV4cGlyZSB0aW1lb3V0IGZvciBtb3VudHMgd2l0aGluZyBhbiBhdXRvZnMgbW91bnQgcG9pbnQuCitTZXQgdGhlIGV4cGlyZSB0aW1lb3V0IGZvciBtb3VudHMgd2l0aGluIGFuIGF1dG9mcyBtb3VudCBwb2ludC4KIAogVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aCB0aGUKIGlvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkIGZyb20gdGhlIG9wZW4gY2FsbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQKaW5kZXggMTkwMmM1Ny4uYTE2N2FiOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQKQEAgLTk1LDcgKzk1LDcgQEAKIHRoZSB0cmVlLiAgVGhlIG5ldGZzIGNhbiBldmVuIG1peCBpbmRpY2VzIGFuZCBkYXRhIGZpbGVzIGF0IHRoZSBzYW1lIGxldmVsLCBidXQKIGl0J3Mgbm90IHJlY29tbWVuZGVkLgogCi1FYWNoIGluZGV4IGVudHJ5IGNvbnNpc3RzIG9mIGEga2V5IG9mIGluZGV0ZXJtaW5hdGUgbGVuZ3RoIHBsdXMgc29tZSBhdXhpbGxpYXJ5CitFYWNoIGluZGV4IGVudHJ5IGNvbnNpc3RzIG9mIGEga2V5IG9mIGluZGV0ZXJtaW5hdGUgbGVuZ3RoIHBsdXMgc29tZSBhdXhpbGlhcnkKIGRhdGEsIGFsc28gb2YgaW5kZXRlcm1pbmF0ZSBsZW5ndGguCiAKIFRoZXJlIGFyZSBzb21lIGxpbWl0cyBvbiBpbmRpY2VzOgpAQCAtMjAzLDIzICsyMDMsMjMgQEAKIAogICAgICBJZiB0aGUgZnVuY3Rpb24gaXMgYWJzZW50LCBhIGZpbGUgc2l6ZSBvZiAwIGlzIGFzc3VtZWQuCiAKLSAoNikgQSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhdXhpbGxpYXJ5IGRhdGEgZnJvbSB0aGUgbmV0ZnMgW29wdGlvbmFsXS4KKyAoNikgQSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhdXhpbGlhcnkgZGF0YSBmcm9tIHRoZSBuZXRmcyBbb3B0aW9uYWxdLgogCiAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV0ZnMgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlCi0gICAgIGNvb2tpZSBhY3F1aXNpdGlvbiBmdW5jdGlvbiBhbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGF1eGlsbGlhcnkgZGF0YSB0aGF0Ci0gICAgIGl0IG1heSBwcm92aWRlLiAgSXQgc2hvdWxkIHdyaXRlIHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW50byB0aGUgZ2l2ZW4gYnVmZmVyCisgICAgIGNvb2tpZSBhY3F1aXNpdGlvbiBmdW5jdGlvbiBhbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGF1eGlsaWFyeSBkYXRhIHRoYXQKKyAgICAgaXQgbWF5IHByb3ZpZGUuICBJdCBzaG91bGQgd3JpdGUgdGhlIGF1eGlsaWFyeSBkYXRhIGludG8gdGhlIGdpdmVuIGJ1ZmZlcgogICAgICBhbmQgcmV0dXJuIHRoZSBxdWFudGl0eSBpdCB3cm90ZS4KIAotICAgICBJZiB0aGlzIGZ1bmN0aW9uIGlzIGFic2VudCwgdGhlIGF1eGlsbGlhcnkgZGF0YSBsZW5ndGggd2lsbCBiZSBzZXQgdG8gMC4KKyAgICAgSWYgdGhpcyBmdW5jdGlvbiBpcyBhYnNlbnQsIHRoZSBhdXhpbGlhcnkgZGF0YSBsZW5ndGggd2lsbCBiZSBzZXQgdG8gMC4KIAotICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBhdXhpbGxpYXJ5IGRhdGEgYnVmZmVyIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIGtleQorICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBhdXhpbGlhcnkgZGF0YSBidWZmZXIgbWF5IGJlIGRlcGVuZGVudCBvbiB0aGUga2V5CiAgICAgIGxlbmd0aC4gIEEgbmV0ZnMgbXVzdG4ndCByZWx5IG9uIGJlaW5nIGFibGUgdG8gcHJvdmlkZSBtb3JlIHRoYW4gNDAwIGJ5dGVzCiAgICAgIGZvciBib3RoLgogCi0gKDcpIEEgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGF1eGlsbGlhcnkgZGF0YSBbb3B0aW9uYWxdLgorICg3KSBBIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBhdXhpbGlhcnkgZGF0YSBbb3B0aW9uYWxdLgogCiAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gY2hlY2sgdGhhdCBhIG1hdGNoIGZvdW5kIGluIHRoZSBjYWNoZSBmb3IKLSAgICAgdGhpcyBvYmplY3QgaXMgdmFsaWQuICBGb3IgaW5zdGFuY2Ugd2l0aCBBRlMgaXQgY291bGQgY2hlY2sgdGhlIGF1eGlsbGlhcnkKKyAgICAgdGhpcyBvYmplY3QgaXMgdmFsaWQuICBGb3IgaW5zdGFuY2Ugd2l0aCBBRlMgaXQgY291bGQgY2hlY2sgdGhlIGF1eGlsaWFyeQogICAgICBkYXRhIGFnYWluc3QgdGhlIGRhdGEgdmVyc2lvbiBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciB0byBkZXRlcm1pbmUKICAgICAgd2hldGhlciB0aGUgaW5kZXggZW50cnkgaW4gYSBjYWNoZSBpcyBzdGlsbCB2YWxpZC4KIApAQCAtMjMyLDcgKzIzMiw3IEBACiAJKCopIEZTQ0FDSEVfQ0hFQ0tBVVhfTkVFRFNfVVBEQVRFCS0gdGhlIGVudHJ5IHJlcXVpcmVzIHVwZGF0ZQogCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFCQktIHRoZSBlbnRyeSBzaG91bGQgYmUgZGVsZXRlZAogCi0gICAgIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBleHRyYWN0IGRhdGEgZnJvbSB0aGUgYXV4aWxsaWFyeSBkYXRhIGluCisgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBleHRyYWN0IGRhdGEgZnJvbSB0aGUgYXV4aWxpYXJ5IGRhdGEgaW4KICAgICAgdGhlIGNhY2hlIGFuZCBjb3B5IGl0IGludG8gdGhlIG5ldGZzJ3Mgc3RydWN0dXJlcy4KIAogICg4KSBBIHBhaXIgb2YgZnVuY3Rpb25zIHRvIG1hbmFnZSBjb250ZXh0cyBmb3IgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmcy50eHQKaW5kZXggZmFiY2IwZS4uZGQ1N2JiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmcy50eHQKQEAgLTQwOSw3ICs0MDksNyBAQAogcm1kaXIoMikuICBUaGV5IGFsc28gYXJlIG5vdCBjb25zaWRlcmVkIHdoZW4gcm1kaXIoMikgb24gdGhlIHBhcmVudAogZ3JvdXAgaXMgY2hlY2tpbmcgZm9yIGNoaWxkcmVuLgogCi1bRGVwZW5kYW50IFN1YnN5c3RlbXNdCitbRGVwZW5kZW50IFN1YnN5c3RlbXNdCiAKIFNvbWV0aW1lcyBvdGhlciBkcml2ZXJzIGRlcGVuZCBvbiBwYXJ0aWN1bGFyIGNvbmZpZ2ZzIGl0ZW1zLiAgRm9yCiBleGFtcGxlLCBvY2ZzMiBtb3VudHMgZGVwZW5kIG9uIGEgaGVhcnRiZWF0IHJlZ2lvbiBpdGVtLiAgSWYgdGhhdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKaW5kZXggNmIwNTA0Ni4uYzc5ZWM1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CkBAIC05Nyw3ICs5Nyw3IEBACiAqIElub2RlIGFsbG9jYXRpb24gdXNpbmcgbGFyZ2UgdmlydHVhbCBibG9jayBncm91cHMgdmlhIGZsZXhfYmcKICogZGVsYXllZCBhbGxvY2F0aW9uCiAqIGxhcmdlIGJsb2NrICh1cCB0byBwYWdlc2l6ZSkgc3VwcG9ydAotKiBlZmZpY2VudCBuZXcgb3JkZXJlZCBtb2RlIGluIEpCRDIgYW5kIGV4dDQoYXZvaWQgdXNpbmcgYnVmZmVyIGhlYWQgdG8gZm9yY2UKKyogZWZmaWNpZW50IG5ldyBvcmRlcmVkIG1vZGUgaW4gSkJEMiBhbmQgZXh0NChhdm9pZCB1c2luZyBidWZmZXIgaGVhZCB0byBmb3JjZQogICB0aGUgb3JkZXJpbmcpCiAKIFsxXSBGaWxlc3lzdGVtcyB3aXRoIGEgYmxvY2sgc2l6ZSBvZiAxayBtYXkgc2VlIGEgbGltaXQgaW1wb3NlZCBieSB0aGUKQEAgLTEwNiw3ICsxMDYsNyBAQAogMi4yIENhbmRpZGF0ZSBmZWF0dXJlcyBmb3IgZnV0dXJlIGluY2x1c2lvbgogCiAqIE9ubGluZSBkZWZyYWcgKHBhdGNoZXMgYXZhaWxhYmxlIGJ1dCBub3Qgd2VsbCB0ZXN0ZWQpCi0qIHJlZHVjZWQgbWtlMmZzIHRpbWUgdmlhIGxhenkgaXRhYmxlIGluaXRpYWxpemF0aW9uIGluIGNvbmp1Y3Rpb24gd2l0aAorKiByZWR1Y2VkIG1rZTJmcyB0aW1lIHZpYSBsYXp5IGl0YWJsZSBpbml0aWFsaXphdGlvbiBpbiBjb25qdW5jdGlvbiB3aXRoCiAgIHRoZSB1bmluaXRfYmcgZmVhdHVyZSAoY2FwYWJpbGl0eSB0byBkbyB0aGlzIGlzIGF2YWlsYWJsZSBpbiBlMmZzcHJvZ3MKICAgYnV0IGEga2VybmVsIHRocmVhZCB0byBkbyBsYXp5IHplcm9pbmcgb2YgdW51c2VkIGlub2RlIHRhYmxlIGJsb2NrcwogICBhZnRlciBmaWxlc3lzdGVtIGlzIGZpcnN0IG1vdW50ZWQgaXMgcmVxdWlyZWQgZm9yIHNhZmV0eSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi11ZXZlbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi11ZXZlbnRzLnR4dAppbmRleCBmZDk2NmRjLi5kODE4ODk2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2dmczItdWV2ZW50cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9nZnMyLXVldmVudHMudHh0CkBAIC02Miw3ICs2Miw3IEBACiAKIFRoZSBSRU1PVkUgdWV2ZW50IGlzIGdlbmVyYXRlZCBhdCB0aGUgZW5kIG9mIGFuIHVuc3VjY2Vzc2Z1bCBtb3VudAogb3IgYXQgdGhlIGVuZCBvZiBhIHVtb3VudCBvZiB0aGUgZmlsZXN5c3RlbS4gQWxsIFJFTU9WRSB1ZXZlbnRzIHdpbGwKLWhhdmUgYmVlbiBwcmVjZWVkZWQgYnkgYXQgbGVhc3QgYW4gQUREIHVldmVudCBmb3IgdGhlIHNhbWUgZmlsZXlzdGVtLAoraGF2ZSBiZWVuIHByZWNlZGVkIGJ5IGF0IGxlYXN0IGFuIEFERCB1ZXZlbnQgZm9yIHRoZSBzYW1lIGZpbGV5c3RlbSwKIGFuZCB1bmxpa2UgdGhlIG90aGVyIHVldmVudHMgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGtlcm5lbCdzCiBrb2JqZWN0IHN1YnN5c3RlbS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9nZnMyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi50eHQKaW5kZXggMGI1OWMwMi4uNGNkYTkyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9nZnMyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2dmczIudHh0CkBAIC0xMSw3ICsxMSw3IEBACiBmZWF0dXJlcyBvZiBHRlMgaXMgcGVyZmVjdCBjb25zaXN0ZW5jeSAtLSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgc3lzdGVtCiBvbiBvbmUgbWFjaGluZSBzaG93IHVwIGltbWVkaWF0ZWx5IG9uIGFsbCBvdGhlciBtYWNoaW5lcyBpbiB0aGUgY2x1c3Rlci4KIAotR0ZTIHVzZXMgaW50ZXJjaGFuZ2FibGUgaW50ZXItbm9kZSBsb2NraW5nIG1lY2hhbmlzbXMsIHRoZSBjdXJyZW50bHkKK0dGUyB1c2VzIGludGVyY2hhbmdlYWJsZSBpbnRlci1ub2RlIGxvY2tpbmcgbWVjaGFuaXNtcywgdGhlIGN1cnJlbnRseQogc3VwcG9ydGVkIG1lY2hhbmlzbXMgYXJlOgogCiAgIGxvY2tfbm9sb2NrIC0tIGFsbG93cyBnZnMgdG8gYmUgdXNlZCBhcyBhIGxvY2FsIGZpbGUgc3lzdGVtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dAppbmRleCA5MzNiYzY2Li43OTFhZjhkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKQEAgLTM1MCw3ICszNTAsNyBAQAogYWxyZWFkeSBpbiBzeW5jIHdoaWNoIHdpbGwgYmUgdGhlIGNhc2Ugb24gYSBjbGVhbiBzaHV0ZG93biBvZiBXaW5kb3dzLiAgSWYgdGhlCiBtaXJyb3JzIGFyZSBub3QgY2xlYW4sIHlvdSBjYW4gc3BlY2lmeSB0aGUgInN5bmMiIG9wdGlvbiBpbnN0ZWFkIG9mICJub3N5bmMiCiBhbmQgdGhlIERldmljZS1NYXBwZXIgZHJpdmVyIHdpbGwgdGhlbiBjb3B5IHRoZSBlbnRpcmV0eSBvZiB0aGUgIlNvdXJjZSBEZXZpY2UiCi10byB0aGUgIlRhcmdldCBEZXZpY2UiIG9yIGlmIHlvdSBzcGVjaWZpZWQgbXVsdGlwbGVkIHRhcmdldCBkZXZpY2VzIHRvIGFsbCBvZgordG8gdGhlICJUYXJnZXQgRGV2aWNlIiBvciBpZiB5b3Ugc3BlY2lmaWVkIG11bHRpcGxlIHRhcmdldCBkZXZpY2VzIHRvIGFsbCBvZgogdGhlbS4KIAogT25jZSB5b3UgaGF2ZSB5b3VyIHRhYmxlLCBzYXZlIGl0IGluIGEgZmlsZSBzb21ld2hlcmUgKGUuZy4gL2V0Yy9udGZzdm9sdW1lMSksCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIudHh0CmluZGV4IDUzOTNlNjYuLjllZDkyMGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIudHh0CkBAIC04MCw3ICs4MCw3IEBACiBub3VzZXJfeGF0dHIJCURpc2FibGVzIEV4dGVuZGVkIFVzZXIgQXR0cmlidXRlcy4KIGFjbAkJCUVuYWJsZXMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgc3VwcG9ydC4KIG5vYWNsCQkoKikJRGlzYWJsZXMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgc3VwcG9ydC4KLXJlc3ZfbGV2ZWw9MgkoKikJU2V0IGhvdyBhZ3Jlc3NpdmUgYWxsb2NhdGlvbiByZXNlcnZhdGlvbnMgd2lsbCBiZS4KK3Jlc3ZfbGV2ZWw9MgkoKikJU2V0IGhvdyBhZ2dyZXNzaXZlIGFsbG9jYXRpb24gcmVzZXJ2YXRpb25zIHdpbGwgYmUuCiAJCQlWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMCAocmVzZXJ2YXRpb25zIG9mZikgdG8gOAogCQkJKG1heGltdW0gc3BhY2UgZm9yIHJlc2VydmF0aW9ucykuCiBkaXJfcmVzdl9sZXZlbD0JKCopCUJ5IGRlZmF1bHQsIGRpcmVjdG9yeSByZXNlcnZhdGlvbnMgd2lsbCBzY2FsZSB3aXRoIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQKaW5kZXggZWI1OWM4Yi4uMzU3MTY2NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQKQEAgLTQyLDcgKzQyLDcgQEAKIEEgbmFtZSBzdHJpbmcgc3BlY2lmaWVzIGEgc3RhcnQgKHJvb3QgZGlyZWN0b3J5LCBjd2QsIGZkLXJlbGF0aXZlKSBhbmQgYQogc2VxdWVuY2Ugb2YgZWxlbWVudHMgKGRpcmVjdG9yeSBlbnRyeSBuYW1lcyksIHdoaWNoIHRvZ2V0aGVyIHJlZmVyIHRvIGEgcGF0aCBpbgogdGhlIG5hbWVzcGFjZS4gQSBwYXRoIGlzIHJlcHJlc2VudGVkIGFzIGEgKGRlbnRyeSwgdmZzbW91bnQpIHR1cGxlLiBUaGUgbmFtZQotZWxlbWVudHMgYXJlIHN1Yi1zdHJpbmdzLCBzZXBlcmF0ZWQgYnkgJy8nLgorZWxlbWVudHMgYXJlIHN1Yi1zdHJpbmdzLCBzZXBhcmF0ZWQgYnkgJy8nLgogCiBOYW1lIGxvb2t1cHMgd2lsbCB3YW50IHRvIGZpbmQgYSBwYXJ0aWN1bGFyIHBhdGggdGhhdCBhIG5hbWUgc3RyaW5nIHJlZmVycyB0bwogKHVzdWFsbHkgdGhlIGZpbmFsIGVsZW1lbnQsIG9yIHBhcmVudCBvZiBmaW5hbCBlbGVtZW50KS4gVGhpcyBpcyBkb25lIGJ5IHRha2luZwpAQCAtMzU0LDcgKzM1NCw3IEBACiAKIFdoYXQgdGhpcyBzaG93cyBpcyB0aGF0IGZhaWxlZCByY3Utd2FsayBsb29rdXBzLCBpZS4gb25lcyB0aGF0IGFyZSByZXN0YXJ0ZWQKIGVudGlyZWx5IHdpdGggcmVmLXdhbGssIGFyZSBxdWl0ZSByYXJlLiBFdmVuIHRoZSAidmZzdGVzdCIgY2FzZSB3aGljaAotc3BlY2lmaWNhbGx5IGhhcyBjb25jdXJyZW50IHJlbmFtZXMvbWtkaXIvcm1kaXIvIGNyZWF0L3VubGluay9ldGMgdG8gZXhjZXJjaXNlCitzcGVjaWZpY2FsbHkgaGFzIGNvbmN1cnJlbnQgcmVuYW1lcy9ta2Rpci9ybWRpci8gY3JlYXQvdW5saW5rL2V0YyB0byBleGVyY2lzZQogc3VjaCByYWNlcyBpcyBub3Qgc2hvd2luZyBhIGh1Z2UgYW1vdW50IG9mIHJlc3RhcnRzLgogCiBEcm9wcGluZyBmcm9tIHJjdS13YWxrIHRvIHJlZi13YWxrIG1lYW4gdGhhdCB3ZSBoYXZlIGVuY291bnRlcmVkIGEgZGVudHJ5IHdoZXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL25ldHdvcmtfcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9uZXR3b3JrX3Byb3RvY29sLnR4dAppbmRleCA0MGVhNmMyLi42NWUwM2RkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL25ldHdvcmtfcHJvdG9jb2wudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvbmV0d29ya19wcm90b2NvbC50eHQKQEAgLTIwLDcgKzIwLDcgQEAKIHNvIG9uZSBjYW4gZXh0ZW5kIHByb3RvY29sIGFzIG5lZWRlZCB3aXRob3V0IGJyZWFraW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgbG9uZwogYXMgb2xkIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuIEFsbCBzdHJpbmcgbGVuZ3RocyBpbmNsdWRlIHRhaWwgMCBieXRlLgogCi1BbGwgY29tbWFucyBhcmUgdHJhbnNmZXJlZCBvdmVyIHRoZSBuZXR3b3JrIGluIGJpZy1lbmRpYW4uIENQVSBlbmRpYW5lc3MgaXMgdXNlZCBhdCB0aGUgZW5kIHBlZXJzLgorQWxsIGNvbW1hbmRzIGFyZSB0cmFuc2ZlcnJlZCBvdmVyIHRoZSBuZXR3b3JrIGluIGJpZy1lbmRpYW4uIENQVSBlbmRpYW5lc3MgaXMgdXNlZCBhdCB0aGUgZW5kIHBlZXJzLgogCiBAY21kIC0gY29tbWFuZCBudW1iZXIsIHdoaWNoIHNwZWNpZmllcyBjb21tYW5kIHRvIGJlIHByb2Nlc3NlZC4gRm9sbG93aW5nCiAJY29tbWFuZHMgYXJlIHVzZWQgY3VycmVudGx5OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKaW5kZXggMjNjYWU2NS4uYjBiODE0ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CkBAIC01NDMsNyArNTQzLDcgQEAKICAgdGhlaXIgc3RhdGlzdGljcyBhcmUgdXNlZCBieSBrZXJuZWwgZGV2ZWxvcGVycyBhbmQgaW50ZXJlc3RlZCB1c2VycyB0bwogICBkZXRlcm1pbmUgdGhlIG9jY3VycmVuY2Ugb2YgaW50ZXJydXB0cyBvZiB0aGUgZ2l2ZW4gdHlwZS4KIAotVGhlIGFib3ZlIElSUSB2ZWN0b3JzIGFyZSBkaXNwbGF5ZWQgb25seSB3aGVuIHJlbGV2ZW50LiAgRm9yIGV4YW1wbGUsCitUaGUgYWJvdmUgSVJRIHZlY3RvcnMgYXJlIGRpc3BsYXllZCBvbmx5IHdoZW4gcmVsZXZhbnQuICBGb3IgZXhhbXBsZSwKIHRoZSB0aHJlc2hvbGQgdmVjdG9yIGRvZXMgbm90IGV4aXN0IG9uIHg4Nl82NCBwbGF0Zm9ybXMuICBPdGhlcnMgYXJlCiBzdXBwcmVzc2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBhIHVuaXByb2Nlc3Nvci4gIEFzIG9mIHRoaXMgd3JpdGluZywgb25seQogaTM4NiBhbmQgeDg2XzY0IHBsYXRmb3JtcyBzdXBwb3J0IHRoZSBuZXcgSVJRIHZlY3RvciBkaXNwbGF5cy4KQEAgLTEyMDIsNyArMTIwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIFcgPSBjYW4gZG8gd3JpdGUgb3BlcmF0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICBVID0gY2FuIGRvIHVuYmxhbmsKICAgZmxhZ3MgICAgICAgICAgICAgICAgRSA9IGl0IGlzIGVuYWJsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgQyA9IGl0IGlzIHByZWZlcmVkIGNvbnNvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgQyA9IGl0IGlzIHByZWZlcnJlZCBjb25zb2xlCiAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBpdCBpcyBwcmltYXJ5IGJvb3QgY29uc29sZQogICAgICAgICAgICAgICAgICAgICAgICBwID0gaXQgaXMgdXNlZCBmb3IgcHJpbnRrIGJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICBiID0gaXQgaXMgbm90IGEgVFRZIGJ1dCBhIEJyYWlsbGUgZGV2aWNlCkBAIC0xMzMxLDcgKzEzMzEsNyBAQAogRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0LgogCiBDYXZlYXQ6IHdoZW4gYSBwYXJlbnQgdGFzayBpcyBzZWxlY3RlZCwgdGhlIG9vbSBraWxsZXIgd2lsbCBzYWNyaWZpY2UgYW55IGZpcnN0Ci1nZW5lcmF0aW9uIGNoaWxkcmVuIHdpdGggc2VwZXJhdGUgYWRkcmVzcyBzcGFjZXMgaW5zdGVhZCwgaWYgcG9zc2libGUuICBUaGlzCitnZW5lcmF0aW9uIGNoaWxkcmVuIHdpdGggc2VwYXJhdGUgYWRkcmVzcyBzcGFjZXMgaW5zdGVhZCwgaWYgcG9zc2libGUuICBUaGlzCiBhdm9pZHMgc2VydmVycyBhbmQgaW1wb3J0YW50IHN5c3RlbSBkYWVtb25zIGZyb20gYmVpbmcga2lsbGVkIGFuZCBsb3NlcyB0aGUKIG1pbmltYWwgYW1vdW50IG9mIHdvcmsuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3F1YXNoZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zcXVhc2hmcy50eHQKaW5kZXggMmQ3OGYxOS4uZDRkNDE0NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zcXVhc2hmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zcXVhc2hmcy50eHQKQEAgLTIxOSw3ICsyMTksNyBAQAogcmVmZXJlbmNlIHRvIHdoZXJlIHRoZSBhY3R1YWwgdmFsdWUgaXMgc3RvcmVkKS4gIFRoaXMgYWxsb3dzIGxhcmdlIHZhbHVlcwogdG8gYmUgc3RvcmVkIG91dCBvZiBsaW5lIGltcHJvdmluZyBzY2FubmluZyBhbmQgbG9va3VwIHBlcmZvcm1hbmNlIGFuZCBpdAogYWxzbyBhbGxvd3MgdmFsdWVzIHRvIGJlIGRlLWR1cGxpY2F0ZWQsIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgb25jZSwgYW5kCi1hbGwgb3RoZXIgb2NjdXJlbmNlcyBob2xkaW5nIGFuIG91dCBvZiBsaW5lIHJlZmVyZW5jZSB0byB0aGF0IHZhbHVlLgorYWxsIG90aGVyIG9jY3VycmVuY2VzIGhvbGRpbmcgYW4gb3V0IG9mIGxpbmUgcmVmZXJlbmNlIHRvIHRoYXQgdmFsdWUuCiAKIFRoZSB4YXR0ciBsaXN0cyBhcmUgcGFja2VkIGludG8gY29tcHJlc3NlZCA4SyBtZXRhZGF0YSBibG9ja3MuCiBUbyByZWR1Y2Ugb3ZlcmhlYWQgaW4gaW5vZGVzLCByYXRoZXIgdGhhbiBzdG9yaW5nIHRoZSBvbi1kaXNrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CmluZGV4IGY4MDZlNTAuLjU5N2Y3MjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CkBAIC02Miw3ICs2Miw3IEBACiAKIE1peGluZyB0eXBlcywgZXhwcmVzc2luZyBtdWx0aXBsZSBsaW5lcyBvZiBkYXRhLCBhbmQgZG9pbmcgZmFuY3kKIGZvcm1hdHRpbmcgb2YgZGF0YSBpcyBoZWF2aWx5IGZyb3duZWQgdXBvbi4gRG9pbmcgdGhlc2UgdGhpbmdzIG1heSBnZXQKLXlvdSBwdWJsaWNhbGx5IGh1bWlsaWF0ZWQgYW5kIHlvdXIgY29kZSByZXdyaXR0ZW4gd2l0aG91dCBub3RpY2UuIAoreW91IHB1YmxpY2x5IGh1bWlsaWF0ZWQgYW5kIHlvdXIgY29kZSByZXdyaXR0ZW4gd2l0aG91dCBub3RpY2UuIAogCiAKIEFuIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGlzIHNpbXBseToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAppbmRleCA4MDgxNWVkLi4yMWE3ZGM0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC05Nyw3ICs5Nyw3IEBACiBUaGUgcGFzc2VkIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGRlc2NyaWJlcyB5b3VyIGZpbGVzeXN0ZW0uIFdoZW4gYQogcmVxdWVzdCBpcyBtYWRlIHRvIG1vdW50IGEgZmlsZXN5c3RlbSBvbnRvIGEgZGlyZWN0b3J5IGluIHlvdXIgbmFtZXNwYWNlLAogdGhlIFZGUyB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIG1vdW50KCkgbWV0aG9kIGZvciB0aGUgc3BlY2lmaWMKLWZpbGVzeXN0ZW0uICBOZXcgdmZzbW91bnQgcmVmZXJpbmcgdG8gdGhlIHRyZWUgcmV0dXJuZWQgYnkgLT5tb3VudCgpCitmaWxlc3lzdGVtLiAgTmV3IHZmc21vdW50IHJlZmVycmluZyB0byB0aGUgdHJlZSByZXR1cm5lZCBieSAtPm1vdW50KCkKIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIG1vdW50cG9pbnQsIHNvIHRoYXQgd2hlbiBwYXRobmFtZSByZXNvbHV0aW9uCiByZWFjaGVzIHRoZSBtb3VudHBvaW50IGl0IHdpbGwganVtcCBpbnRvIHRoZSByb290IG9mIHRoYXQgdmZzbW91bnQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLWRlbGF5ZWQtbG9nZ2luZy1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMtZGVsYXllZC1sb2dnaW5nLWRlc2lnbi50eHQKaW5kZXggNTI4MmUzZS4uMmNlMzY0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMtZGVsYXllZC1sb2dnaW5nLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMtZGVsYXllZC1sb2dnaW5nLWRlc2lnbi50eHQKQEAgLTQyLDcgKzQyLDcgQEAKIFRoaXMgcmVsb2dnaW5nIHRlY2huaXF1ZSBhbHNvIGFsbG93cyBvYmplY3RzIHRvIGJlIG1vdmVkIGZvcndhcmQgaW4gdGhlIGxvZyBzbwogdGhhdCBhbiBvYmplY3QgYmVpbmcgcmVsb2dnZWQgZG9lcyBub3QgcHJldmVudCB0aGUgdGFpbCBvZiB0aGUgbG9nIGZyb20gZXZlcgogbW92aW5nIGZvcndhcmQuICBUaGlzIGNhbiBiZSBzZWVuIGluIHRoZSB0YWJsZSBhYm92ZSBieSB0aGUgY2hhbmdpbmcKLShpbmNyZWFzaW5nKSBMU04gb2YgZWFjaCBzdWJzcXVlbnQgdHJhbnNhY3Rpb24gLSB0aGUgTFNOIGlzIGVmZmVjdGl2ZWx5IGEKKyhpbmNyZWFzaW5nKSBMU04gb2YgZWFjaCBzdWJzZXF1ZW50IHRyYW5zYWN0aW9uIC0gdGhlIExTTiBpcyBlZmZlY3RpdmVseSBhCiBkaXJlY3QgZW5jb2Rpbmcgb2YgdGhlIGxvY2F0aW9uIGluIHRoZSBsb2cgb2YgdGhlIHRyYW5zYWN0aW9uLgogCiBUaGlzIHJlbG9nZ2luZyBpcyBhbHNvIHVzZWQgdG8gaW1wbGVtZW50IGxvbmctcnVubmluZywgbXVsdGlwbGUtY29tbWl0CkBAIC0zMzgsNyArMzM4LDcgQEAKIGludG8gdGhlIG5ldyBDSUwsIHRoZW4gY2hlY2twb2ludCB0cmFuc2FjdGlvbiBjb21taXQgY29kZSBjYW5ub3QgdXNlIGxvZyBpdGVtcwogdG8gc3RvcmUgdGhlIGxpc3Qgb2YgbG9nIHZlY3RvcnMgdGhhdCBuZWVkIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgdHJhbnNhY3Rpb24uCiBIZW5jZSBsb2cgdmVjdG9ycyBuZWVkIHRvIGJlIGFibGUgdG8gYmUgY2hhaW5lZCB0b2dldGhlciB0byBhbGxvdyB0aGVtIHRvIGJlCi1kZXRhdGNoZWQgZnJvbSB0aGUgbG9nIGl0ZW1zLiBUaGF0IGlzLCB3aGVuIHRoZSBDSUwgaXMgZmx1c2hlZCB0aGUgbWVtb3J5CitkZXRhY2hlZCBmcm9tIHRoZSBsb2cgaXRlbXMuIFRoYXQgaXMsIHdoZW4gdGhlIENJTCBpcyBmbHVzaGVkIHRoZSBtZW1vcnkKIGJ1ZmZlciBhbmQgbG9nIHZlY3RvciBhdHRhY2hlZCB0byBlYWNoIGxvZyBpdGVtIG5lZWRzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZQogY2hlY2twb2ludCBjb250ZXh0IHNvIHRoYXQgdGhlIGxvZyBpdGVtIGNhbiBiZSByZWxlYXNlZC4gSW4gZGlhZ3JhbW1hdGljIGZvcm0sCiB0aGUgQ0lMIHdvdWxkIGxvb2sgbGlrZSB0aGlzIGJlZm9yZSB0aGUgZmx1c2g6CkBAIC01NzcsNyArNTc3LDcgQEAKIHBlbmRpbmcgdHJhbnNhY3Rpb25zLiBUaHVzIHRoZSBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgYSBsb2cgaXRlbSBpcyBzeW1tZXRyaWMKIGFzIHRoZXJlIGlzIGEgMToxIHJlbGF0aW9uc2hpcCB3aXRoIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgbG9nIGl0ZW0gY29tcGxldGlvbi4KIAotRm9yIGRlbGF5ZWQgbG9nZ2luZywgaG93ZXZlciwgd2UgaGF2ZSBhbiBhc3N5bWV0cmljIHRyYW5zYWN0aW9uIGNvbW1pdCB0bworRm9yIGRlbGF5ZWQgbG9nZ2luZywgaG93ZXZlciwgd2UgaGF2ZSBhbiBhc3ltbWV0cmljIHRyYW5zYWN0aW9uIGNvbW1pdCB0bwogY29tcGxldGlvbiByZWxhdGlvbnNoaXAuIEV2ZXJ5IHRpbWUgYW4gb2JqZWN0IGlzIHJlbG9nZ2VkIGluIHRoZSBDSUwgaXQgZ29lcwogdGhyb3VnaCB0aGUgY29tbWl0IHByb2Nlc3Mgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgY29tcGxldGlvbiBiZWluZyByZWdpc3RlcmVkLgogVGhhdCBpcywgd2Ugbm93IGhhdmUgYSBtYW55LXRvLW9uZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0cmFuc2FjdGlvbiBjb21taXQgYW5kCkBAIC03ODAsNyArNzgwLDcgQEAKIEZyb20gdGhpcywgaXQgY2FuIGJlIHNlZW4gdGhhdCB0aGUgb25seSBsaWZlIGN5Y2xlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3bwogbG9nZ2luZyBtZXRob2RzIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsaWZlIGN5Y2xlIC0gdGhleSBzdGlsbCBoYXZlIHRoZSBzYW1lCiBiZWdpbm5pbmcgYW5kIGVuZCBhbmQgZXhlY3V0aW9uIGNvbnN0cmFpbnRzLiBUaGUgb25seSBkaWZmZXJlbmNlcyBhcmUgaW4gdGhlCi1jb21taXRpbmcgb2YgdGhlIGxvZyBpdGVtcyB0byB0aGUgbG9nIGl0c2VsZiBhbmQgdGhlIGNvbXBsZXRpb24gcHJvY2Vzc2luZy4KK2NvbW1pdHRpbmcgb2YgdGhlIGxvZyBpdGVtcyB0byB0aGUgbG9nIGl0c2VsZiBhbmQgdGhlIGNvbXBsZXRpb24gcHJvY2Vzc2luZy4KIEhlbmNlIGRlbGF5ZWQgbG9nZ2luZyBzaG91bGQgbm90IGludHJvZHVjZSBhbnkgY29uc3RyYWludHMgb24gbG9nIGl0ZW0KIGJlaGF2aW91ciwgYWxsb2NhdGlvbiBvciBmcmVlaW5nIHRoYXQgZG9uJ3QgYWxyZWFkeSBleGlzdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IGNiOGEzYTAuLmRmOTA0YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTY2LDEwICs2NiwxMCBAQAogZW50ZXJpbmcgYXRvbWljIGNvbnRleHQsIHVzaW5nOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHJlYWxsb2Moc3RydWN0IGZsZXhfYXJyYXkgKmFycmF5LCB1bnNpZ25lZCBpbnQgc3RhcnQsCi0JCQkgICAgdW5zaWduZWQgaW50IGVuZCwgZ2ZwX3QgZmxhZ3MpOworCQkJICAgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgZ2ZwX3QgZmxhZ3MpOwogCiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgbWVtb3J5IGZvciB0aGUgZWxlbWVudHMgaW5kZXhlZCBpbiB0aGUgcmFuZ2UKLWRlZmluZWQgYnkgc3RhcnQgYW5kIGVuZCBoYXMgYmVlbiBhbGxvY2F0ZWQuICBUaGVyZWFmdGVyLCBhCitkZWZpbmVkIGJ5IHN0YXJ0IGFuZCBucl9lbGVtZW50cyBoYXMgYmVlbiBhbGxvY2F0ZWQuICBUaGVyZWFmdGVyLCBhCiBmbGV4X2FycmF5X3B1dCgpIGNhbGwgb24gYW4gZWxlbWVudCBpbiB0aGF0IHJhbmdlIGlzIGd1YXJhbnRlZWQgbm90IHRvCiBibG9jay4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydQppbmRleCA1ZWIzYjlkLi45MTVmMzIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydQpAQCAtNzgsNyArNzgsNyBAQAogCiBUaGUgZmlyc3QgYW5kIHNlY29uZCByZXZpc2lvbiBvZiB0aGUgdUd1cnUgY2hpcCBpbiByZWFsaXR5IGlzIGEgV2luYm9uZAogVzgzTDk1MEQgaW4gZGlzZ3Vpc2UgKGRlc3BpdGUgQWJpdCBjbGFpbWluZyBpdCBpcyAiYSBuZXcgbWljcm9wcm9jZXNzb3IKLWRlc2lnbmVkIGJ5IHRoZSBBQklUIEVuZ2luZWVycyIpLiBVbmZvcnR1bmF0bHkgdGhpcyBkb2Vzbid0IGhlbHAgc2luY2UgdGhlCitkZXNpZ25lZCBieSB0aGUgQUJJVCBFbmdpbmVlcnMiKS4gVW5mb3J0dW5hdGVseSB0aGlzIGRvZXNuJ3QgaGVscCBzaW5jZSB0aGUKIFc4M0w5NTBEIGlzIGEgZ2VuZXJpYyBtaWNyb2NvbnRyb2xsZXIgd2l0aCBhIGN1c3RvbSBBYml0IGFwcGxpY2F0aW9uIHJ1bm5pbmcKIG9uIGl0LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydS1kYXRhc2hlZXQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydS1kYXRhc2hlZXQKaW5kZXggZDkyNTFlZi4uOGQyYmU4YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUtZGF0YXNoZWV0CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWJpdHVndXJ1LWRhdGFzaGVldApAQCAtNSw5ICs1LDkgQEAKIGRhdGFzaGVldCBmcm9tIEFiaXQuIFRoZSBkYXRhIEkgaGF2ZSBnb3Qgb24gdUd1cnUgaGF2ZSBJIGFzc2VtYmxlZCB0aHJvdWdoCiBteSB3ZWFrIGtub3dsZWRnZSBpbiAiYmFja3dhcmRzIGVuZ2luZWVyaW5nIi4KIEFuZCBqdXN0IGZvciB0aGUgcmVjb3JkLCB5b3UgbWF5IGhhdmUgbm90aWNlZCB1R3VydSBpc24ndCBhIGNoaXAgZGV2ZWxvcGVkIGJ5Ci1BYml0LCBhcyB0aGV5IGNsYWltIGl0IHRvIGJlLiBJdCdzIHJlYWx5IGp1c3QgYW4gbWljcm9wcm9jZXNzb3IgKHVDKSBjcmVhdGVkIGJ5CitBYml0LCBhcyB0aGV5IGNsYWltIGl0IHRvIGJlLiBJdCdzIHJlYWxseSBqdXN0IGFuIG1pY3JvcHJvY2Vzc29yICh1QykgY3JlYXRlZCBieQogV2luYm9uZCAoVzgzTDk1MEQpLiBBbmQgbm8sIHJlYWRpbmcgdGhlIG1hbnVhbCBmb3IgdGhpcyBzcGVjaWZpYyB1QyBvcgotbWFpbGluZyAgV2luZGJvbmQgZm9yIGhlbHAgd29uJ3QgZ2l2ZSBhbnkgdXNlZnVsbCBkYXRhIGFib3V0IHVHdXJ1LCBhcyBpdCBpcworbWFpbGluZyAgV2luZGJvbmQgZm9yIGhlbHAgd29uJ3QgZ2l2ZSBhbnkgdXNlZnVsIGRhdGEgYWJvdXQgdUd1cnUsIGFzIGl0IGlzCiB0aGUgcHJvZ3JhbSBpbnNpZGUgdGhlIHVDIHRoYXQgaXMgcmVzcG9uZGluZyB0byBjYWxscy4KIAogT2xsZSBTYW5kYmVyZyA8b2xsZWJ1bGxAZ21haWwuY29tPiwgMjAwNS0wNS0yNQpAQCAtNDEsNyArNDEsNyBAQAogCiBBZnRlciB3aWRlciB0ZXN0aW5nIG9mIHRoZSBMaW51eCBrZXJuZWwgZHJpdmVyIHNvbWUgdmFyaWFudHMgb2YgdGhlIHVHdXJ1IGhhdmUKIHR1cm5lZCB1cCB3aGljaCB3aWxsIGhvbGQgMHgwMCBpbnN0ZWFkIG9mIDB4QUMgYXQgdGhlIENNRCBwb3J0LCB0aHVzIHdlIGFsc28KLWhhdmUgdG8gdGVzdCBDTUQgZm9yIHR3byBkaWZmZXJlbnQgdmFsdWVzLiBPbiB0aGVzZSB1R3VydSdzIERBVEEgd2lsbCBpbml0YWxseQoraGF2ZSB0byB0ZXN0IENNRCBmb3IgdHdvIGRpZmZlcmVudCB2YWx1ZXMuIE9uIHRoZXNlIHVHdXJ1J3MgREFUQSB3aWxsIGluaXRpYWxseQogaG9sZCAweDA5IGFuZCB3aWxsIG9ubHkgaG9sZCAweDA4IGFmdGVyIHJlYWRpbmcgQ01EIGZpcnN0LCBzbyBDTUQgbXVzdCBiZSByZWFkCiBmaXJzdCEKIApAQCAtMzA4LDUgKzMwOCw1IEBACiByZXN1bHRlZCBpbiBhIF9wZXJtYW5lbnRfIHJlcHJvZ3JhbW1pbmcgb2YgdGhlIHZvbHRhZ2VzLCBsdWNraWx5IEkgaGFkIHRoZQogc2Vuc29ycyBwYXJ0IGNvbmZpZ3VyZWQgc28gdGhhdCBpdCB3b3VsZCBzaHV0ZG93biBteSBzeXN0ZW0gb24gYW55IG91dCBvZiBzcGVjCiB2b2x0YWdlcyB3aGljaCBwcm9wcmFibHkgc2FmZWQgbXkgY29tcHV0ZXIgKGFmdGVyIGEgcmVib290IEkgbWFuYWdlZCB0bwotaW1tZWRpYXRseSBlbnRlciB0aGUgYmlvcyBhbmQgcmVsb2FkIHRoZSBkZWZhdWx0cykuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdAoraW1tZWRpYXRlbHkgZW50ZXIgdGhlIGJpb3MgYW5kIHJlbG9hZCB0aGUgZGVmYXVsdHMpLiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQKIHRoZSByZWFkL3dyaXRlIGN5Y2xlIGZvciB0aGUgbm9uIHNlbnNvciBwYXJ0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBzZW5zb3IgcGFydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWJpdHVndXJ1MyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWJpdHVndXJ1MwppbmRleCBmYTU5OGFhLi5hNmNjZmU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydTMKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUzCkBAIC00Nyw3ICs0Nyw3IEBACiB0aGUgQWJpdCB1R3VydSBjaGlwLCBmb3VuZCBvbiByZWNlbnQgQWJpdCB1R3VydSBmZWF0dXJpbmcgbW90aGVyYm9hcmRzLgogCiBUaGUgM3JkIHJldmlzaW9uIG9mIHRoZSB1R3VydSBjaGlwIGluIHJlYWxpdHkgaXMgYSBXaW5ib25kIFc4M0w5NTFHLgotVW5mb3J0dW5hdGx5IHRoaXMgZG9lc24ndCBoZWxwIHNpbmNlIHRoZSBXODNMOTUxRyBpcyBhIGdlbmVyaWMgbWljcm9jb250cm9sbGVyCitVbmZvcnR1bmF0ZWx5IHRoaXMgZG9lc24ndCBoZWxwIHNpbmNlIHRoZSBXODNMOTUxRyBpcyBhIGdlbmVyaWMgbWljcm9jb250cm9sbGVyCiB3aXRoIGEgY3VzdG9tIEFiaXQgYXBwbGljYXRpb24gcnVubmluZyBvbiBpdC4KIAogRGVzcGl0ZSBBYml0IG5vdCByZWxlYXNpbmcgYW55IGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgdUd1cnUgcmV2aXNpb24gMywKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyMSBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyMQppbmRleCAwM2QwMmJmLi4wMmFkOTZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEwMjEKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDIxCkBAIC0xNCwxMCArMTQsNiBAQAogICAgIFByZWZpeDogJ2dsNTIzc20nCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxYSwgMHgyOSAtIDB4MmIsIDB4NGMgLSAweDRlCiAgICAgRGF0YXNoZWV0OgotICAqIEludGVsIFhlb24gUHJvY2Vzc29yCi0gICAgUHJlZml4OiAtIGFueSBvdGhlciAtIG1heSByZXF1aXJlICdmb3JjZV9hZG0xMDIxJyBwYXJhbWV0ZXIKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IEludGVsIHdlYnNpdGUKICAgKiBNYXhpbSBNQVgxNjE3CiAgICAgUHJlZml4OiAnbWF4MTYxNycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTggLSAweDFhLCAweDI5IC0gMHgyYiwgMHg0YyAtIDB4NGUKQEAgLTkxLDIxICs4NywyNyBAQAogQURNMTAyMS1jbG9uZXMgZG8gZmFzdGVyIG1lYXN1cmVtZW50cywgYnV0IHRoZXJlIGlzIHJlYWxseSBubyBnb29kIHJlYXNvbgogZm9yIHRoYXQuCiAKLVhlb24gc3VwcG9ydAotLS0tLS0tLS0tLS0tCiAKLVNvbWUgWGVvbiBwcm9jZXNzb3JzIGhhdmUgcmVhbCBtYXgxNjE3LCBhZG0xMDIxLCBvciBjb21wYXRpYmxlIGNoaXBzCi13aXRoaW4gdGhlbSwgd2l0aCB0d28gdGVtcGVyYXR1cmUgc2Vuc29ycy4KK05ldGJ1cnN0LWJhc2VkIFhlb24gc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU90aGVyIFhlb25zIGhhdmUgY2hpcHMgd2l0aCBvbmx5IG9uZSBzZW5zb3IuCitTb21lIFhlb24gcHJvY2Vzc29ycyBiYXNlZCBvbiB0aGUgTmV0YnVyc3QgKGVhcmx5IFBlbnRpdW0gNCwgZnJvbSAyMDAxIHRvCisyMDAzKSBtaWNyb2FyY2hpdGVjdHVyZSBoYWQgcmVhbCBNQVgxNjE3LCBBRE0xMDIxLCBvciBjb21wYXRpYmxlIGNoaXBzCit3aXRoaW4gdGhlbSwgd2l0aCB0d28gdGVtcGVyYXR1cmUgc2Vuc29ycy4gT3RoZXIgWGVvbiBwcm9jZXNzb3JzIG9mIHRoaXMKK2VyYSAod2l0aCA0MDAgTUh6IEZTQikgaGFkIGNoaXBzIHdpdGggb25seSBvbmUgdGVtcGVyYXR1cmUgc2Vuc29yLgogCi1JZiB5b3UgaGF2ZSBhIFhlb24sIGFuZCB0aGUgYWRtMTAyMSBtb2R1bGUgbG9hZHMsIGFuZCBib3RoIHRlbXBlcmF0dXJlcwotYXBwZWFyIHZhbGlkLCB0aGVuIHRoaW5ncyBhcmUgZ29vZC4KK0lmIHlvdSBoYXZlIHN1Y2ggYW4gb2xkIFhlb24sIGFuZCB5b3UgZ2V0IHR3byB2YWxpZCB0ZW1wZXJhdHVyZXMgd2hlbgorbG9hZGluZyB0aGUgYWRtMTAyMSBtb2R1bGUsIHRoZW4gdGhpbmdzIGFyZSBnb29kLgogCi1JZiB0aGUgYWRtMTAyMSBtb2R1bGUgZG9lc24ndCBsb2FkLCB5b3Ugc2hvdWxkIHRyeSB0aGlzOgotCW1vZHByb2JlIGFkbTEwMjEgZm9yY2VfYWRtMTAyMT1CVVMsQUREUkVTUwotCUFERFJFU1MgY2FuIG9ubHkgYmUgMHgxOCwgMHgxYSwgMHgyOSwgMHgyYiwgMHg0Yywgb3IgMHg0ZS4KK0lmIG5vdGhpbmcgaGFwcGVucyB3aGVuIGxvYWRpbmcgdGhlIGFkbTEwMjEgbW9kdWxlLCBhbmQgeW91IGFyZSBjZXJ0YWluCit0aGF0IHlvdXIgc3BlY2lmaWMgWGVvbiBwcm9jZXNzb3IgbW9kZWwgaW5jbHVkZXMgY29tcGF0aWJsZSBzZW5zb3JzLCB5b3UKK3dpbGwgaGF2ZSB0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlIHRoZSBzZW5zb3IgY2hpcHMgZnJvbSB1c2VyLXNwYWNlLiBTZWUKK21ldGhvZCA0IGluIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcy4gUG9zc2libGUgc2xhdmUKK2FkZHJlc3NlcyBhcmUgMHgxOCwgMHgxYSwgMHgyOSwgMHgyYiwgMHg0Yywgb3IgMHg0ZS4gSXQgaXMgbGlrZWx5IHRoYXQKK29ubHkgdGVtcDIgd2lsbCBiZSBjb3JyZWN0IGFuZCB0ZW1wMSB3aWxsIGhhdmUgdG8gYmUgaWdub3JlZC4KIAotSWYgeW91IGhhdmUgZHVhbCBYZW9ucyB5b3UgbWF5IGhhdmUgYXBwZWFyIHRvIGhhdmUgdHdvIHNlcGFyYXRlCi1hZG0xMDIxLWNvbXBhdGlibGUgY2hpcHMsIG9yIHR3byBzaW5nbGUtdGVtcGVyYXR1cmUgc2Vuc29ycywgYXQgZGlzdGluY3QKLWFkZHJlc3Nlcy4KK1ByZXZpb3VzIGdlbmVyYXRpb25zIG9mIHRoZSBYZW9uIHByb2Nlc3NvciAoYmFzZWQgb24gUGVudGl1bSBJSS9JSUkpCitkaWRuJ3QgaGF2ZSB0aGVzZSBzZW5zb3JzLiBOZXh0IGdlbmVyYXRpb25zIG9mIFhlb24gcHJvY2Vzc29ycyAoNTMzIE1IegorRlNCIGFuZCBmYXN0ZXIpIGxvc3QgdGhlbSwgdW50aWwgdGhlIENvcmUtYmFzZWQgZ2VuZXJhdGlvbiB3aGljaAoraW50cm9kdWNlZCBpbnRlZ3JhdGVkIGRpZ2l0YWwgdGhlcm1hbCBzZW5zb3JzLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5Cit0aGUgY29yZXRlbXAgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCmluZGV4IGZhNDc1YzAuLmYzZWZkMTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKQEAgLTMyLDYgKzMyLDE2IEBACiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9QURUNzQ2MQorICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjFBCisgICAgUHJlZml4OiAnYWR0NzQ2MWEnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9QURUNzQ2MUEKKyAgKiBPTiBTZW1pY29uZHVjdG9yIE5DVDEwMDgKKyAgICBQcmVmaXg6ICduY3QxMDA4JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPU5DVDEwMDgKICAgKiBNYXhpbSBNQVg2NjQ2CiAgICAgUHJlZml4OiAnbWF4NjY0NicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGQKQEAgLTE0OSw3ICsxNTksNyBAQAogICAqIEFMRVJUIGlzIHRyaWdnZXJlZCBieSBvcGVuIHJlbW90ZSBzZW5zb3IuCiAgICogU01CdXMgUEVDIHN1cHBvcnQgZm9yIFdyaXRlIEJ5dGUgYW5kIFJlY2VpdmUgQnl0ZSB0cmFuc2FjdGlvbnMuCiAKLUFEVDc0NjE6CitBRFQ3NDYxLCBBRFQ3NDYxQSwgTkNUMTAwODoKICAgKiBFeHRlbmRlZCB0ZW1wZXJhdHVyZSByYW5nZSAoYnJlYWtzIGNvbXBhdGliaWxpdHkpCiAgICogTG93ZXIgcmVzb2x1dGlvbiBmb3IgcmVtb3RlIHRlbXBlcmF0dXJlCiAKQEAgLTE5NSw5ICsyMDUsOSBAQAogT25seSB0aGUgbG9jYWwgaHlzdGVyZXNpcyBjYW4gYmUgc2V0IGZyb20gdXNlci1zcGFjZSwgYW5kIHRoZSBzYW1lIGRlbHRhCiBhcHBsaWVzIHRvIHRoZSByZW1vdGUgaHlzdGVyZXNpcy4KIAotVGhlIGxtOTAgZHJpdmVyIHdpbGwgbm90IHVwZGF0ZSBpdHMgdmFsdWVzIG1vcmUgZnJlcXVlbnRseSB0aGFuIGV2ZXJ5Ci1vdGhlciBzZWNvbmQ7IHJlYWRpbmcgdGhlbSBtb3JlIG9mdGVuIHdpbGwgZG8gbm8gaGFybSwgYnV0IHdpbGwgcmV0dXJuCi0nb2xkJyB2YWx1ZXMuCitUaGUgbG05MCBkcml2ZXIgd2lsbCBub3QgdXBkYXRlIGl0cyB2YWx1ZXMgbW9yZSBmcmVxdWVudGx5IHRoYW4gY29uZmlndXJlZCB3aXRoCit0aGUgdXBkYXRlX2ludGVydmFsIGF0dHJpYnV0ZTsgcmVhZGluZyB0aGVtIG1vcmUgb2Z0ZW4gd2lsbCBkbyBubyBoYXJtLCBidXQgd2lsbAorcmV0dXJuICdvbGQnIHZhbHVlcy4KIAogU01CdXMgQWxlcnQgU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjA1LDExICsyMTUsMTIgQEAKIFRoaXMgZHJpdmVyIGhhcyBiYXNpYyBzdXBwb3J0IGZvciBTTUJ1cyBhbGVydC4gV2hlbiBhbiBhbGVydCBpcyByZWNlaXZlZCwKIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgcmVhZCBhbmQgdGhlIGZhdWx0eSB0ZW1wZXJhdHVyZSBjaGFubmVsIGlzIGxvZ2dlZC4KIAotVGhlIEFuYWxvZyBEZXZpY2VzIGNoaXBzIChBRE0xMDMyIGFuZCBBRFQ3NDYxKSBkbyBub3QgaW1wbGVtZW50IHRoZSBTTUJ1cwotYWxlcnQgcHJvdG9jb2wgcHJvcGVybHkgc28gYWRkaXRpb25hbCBjYXJlIGlzIG5lZWRlZDogdGhlIEFMRVJUIG91dHB1dCBpcwotZGlzYWJsZWQgd2hlbiBhbiBhbGVydCBpcyByZWNlaXZlZCwgYW5kIGlzIHJlLWVuYWJsZWQgb25seSB3aGVuIHRoZSBhbGFybQotaXMgZ29uZS4gT3RoZXJ3aXNlIHRoZSBjaGlwIHdvdWxkIGJsb2NrIGFsZXJ0cyBmcm9tIG90aGVyIGNoaXBzIGluIHRoZSBidXMKLWFzIGxvbmcgYXMgdGhlIGFsYXJtIGlzIGFjdGl2ZS4KK1RoZSBBbmFsb2cgRGV2aWNlcyBjaGlwcyAoQURNMTAzMiwgQURUNzQ2MSBhbmQgQURUNzQ2MUEpIGFuZCBPTgorU2VtaWNvbmR1Y3RvciBjaGlwcyAoTkNUMTAwOCkgZG8gbm90IGltcGxlbWVudCB0aGUgU01CdXMgYWxlcnQgcHJvdG9jb2wKK3Byb3Blcmx5IHNvIGFkZGl0aW9uYWwgY2FyZSBpcyBuZWVkZWQ6IHRoZSBBTEVSVCBvdXRwdXQgaXMgZGlzYWJsZWQgd2hlbgorYW4gYWxlcnQgaXMgcmVjZWl2ZWQsIGFuZCBpcyByZS1lbmFibGVkIG9ubHkgd2hlbiB0aGUgYWxhcm0gaXMgZ29uZS4KK090aGVyd2lzZSB0aGUgY2hpcCB3b3VsZCBibG9jayBhbGVydHMgZnJvbSBvdGhlciBjaGlwcyBpbiB0aGUgYnVzIGFzIGxvbmcKK2FzIHRoZSBhbGFybSBpcyBhY3RpdmUuCiAKIFBFQyBTdXBwb3J0CiAtLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NCBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3Mjg5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjQKQEAgLTAsMCArMSw2MiBAQAorS2VybmVsIGRyaXZlciBtYXgxNjA2NAorPT09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTWF4aW0gTUFYMTYwNjQKKyAgICBQcmVmaXg6ICdtYXgxNjA2NCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDE2MDY0LnBkZgorCitBdXRob3I6IEd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBtb250b3JpbmcgZm9yIE1heGltIE1BWDE2MDY0IFF1YWQgUG93ZXItU3VwcGx5CitDb250cm9sbGVyIHdpdGggQWN0aXZlLVZvbHRhZ2UgT3V0cHV0IENvbnRyb2wgYW5kIFBNQnVzIEludGVyZmFjZS4KKworVGhlIGRyaXZlciBpcyBhIGNsaWVudCBkcml2ZXIgdG8gdGhlIGNvcmUgUE1CdXMgZHJpdmVyLgorUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzIG9uIFBNQnVzIGNsaWVudCBkcml2ZXJzLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBhdXRvLWRldGVjdCBkZXZpY2VzLiBZb3Ugd2lsbCBoYXZlIHRvIGluc3RhbnRpYXRlIHRoZQorZGV2aWNlcyBleHBsaWNpdGx5LiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBmb3IKK2RldGFpbHMuCisKKworUGxhdGZvcm0gZGF0YSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBzdGFuZGFyZCBQTUJ1cyBkcml2ZXIgcGxhdGZvcm0gZGF0YS4KKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgc3VwcG9ydGVkLiBMaW1pdHMgYXJlIHJlYWQtd3JpdGU7IGFsbCBvdGhlcgorYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgorCitpblsxLTRdX2xhYmVsCQkidm91dFsxLTRdIgoraW5bMS00XV9pbnB1dAkJTWVhc3VyZWQgdm9sdGFnZS4gRnJvbSBSRUFEX1ZPVVQgcmVnaXN0ZXIuCitpblsxLTRdX21pbgkJTWludW11bSBWb2x0YWdlLiBGcm9tIFZPVVRfVVZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luWzEtNF1fbWF4CQlNYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS00XV9sY3JpdAkJQ3JpdGljYWwgbWludW11bSBWb2x0YWdlLiBWT1VUX1VWX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS00XV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luWzEtNF1fbWluX2FsYXJtCVZvbHRhZ2UgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfV0FSTklORyBzdGF0dXMuCitpblsxLTRdX21heF9hbGFybQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtNF1fbGNyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9GQVVMVCBzdGF0dXMuCitpblsxLTRdX2NyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfRkFVTFQgc3RhdHVzLgorCit0ZW1wMV9pbnB1dAkJTWVhc3VyZWQgdGVtcGVyYXR1cmUuIEZyb20gUkVBRF9URU1QRVJBVFVSRV8xIHJlZ2lzdGVyLgordGVtcDFfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlLiBGcm9tIE9UX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wMV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlLiBGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgordGVtcDFfbWF4X2FsYXJtCQlDaGlwIHRlbXBlcmF0dXJlIGhpZ2ggYWxhcm0uIFNldCBieSBjb21wYXJpbmcKKwkJCVJFQURfVEVNUEVSQVRVUkVfMSB3aXRoIE9UX1dBUk5fTElNSVQgaWYgVEVNUF9PVF9XQVJOSU5HCisJCQlzdGF0dXMgaXMgc2V0LgordGVtcDFfY3JpdF9hbGFybQlDaGlwIHRlbXBlcmF0dXJlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIFNldCBieSBjb21wYXJpbmcKKwkJCVJFQURfVEVNUEVSQVRVUkVfMSB3aXRoIE9UX0ZBVUxUX0xJTUlUIGlmIFRFTVBfT1RfRkFVTFQKKwkJCXN0YXR1cyBpcyBzZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDM0NDQwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgzNDQ0MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzUyNWRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgzNDQ0MApAQCAtMCwwICsxLDc5IEBACitLZXJuZWwgZHJpdmVyIG1heDM0NDQwCis9PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBNQVgzNDQ0MAorICAgIFByZWZpeGVzOiAnbWF4MzQ0NDAnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgzNDQ0MC5wZGYKKyAgKiBNYXhpbSBNQVgzNDQ0MQorICAgIFBNQnVzIDUtQ2hhbm5lbCBQb3dlci1TdXBwbHkgTWFuYWdlciBhbmQgSW50ZWxsaWdlbnQgRmFuIENvbnRyb2xsZXIKKyAgICBQcmVmaXhlczogJ21heDM0NDQxJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMzQ0NDEucGRmCisKK0F1dGhvcjogR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIG1vbnRvcmluZyBmb3IgTWF4aW0gTUFYMzQ0NDAgUE1CdXMgNi1DaGFubmVsCitQb3dlci1TdXBwbHkgTWFuYWdlciBhbmQgTUFYMzQ0NDEgUE1CdXMgNS1DaGFubmVsIFBvd2VyLVN1cHBseSBNYW5hZ2VyCithbmQgSW50ZWxsaWdlbnQgRmFuIENvbnRyb2xsZXIuCisKK1RoZSBkcml2ZXIgaXMgYSBjbGllbnQgZHJpdmVyIHRvIHRoZSBjb3JlIFBNQnVzIGRyaXZlci4gUGxlYXNlIHNlZQorRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cyBmb3IgZGV0YWlscyBvbiBQTUJ1cyBjbGllbnQgZHJpdmVycy4KKworCitVc2FnZSBOb3RlcworLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgYXV0by1kZXRlY3QgZGV2aWNlcy4gWW91IHdpbGwgaGF2ZSB0byBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMgZXhwbGljaXRseS4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMgZm9yCitkZXRhaWxzLgorCisKK1BsYXRmb3JtIGRhdGEgc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgc3RhbmRhcmQgUE1CdXMgZHJpdmVyIHBsYXRmb3JtIGRhdGEuCisKKworU3lzZnMgZW50cmllcworLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZC4gTGltaXRzIGFyZSByZWFkLXdyaXRlOyBhbGwgb3RoZXIKK2F0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KKworaW5bMS02XV9sYWJlbAkJInZvdXRbMS02XSIuCitpblsxLTZdX2lucHV0CQlNZWFzdXJlZCB2b2x0YWdlLiBGcm9tIFJFQURfVk9VVCByZWdpc3Rlci4KK2luWzEtNl1fbWluCQlNaW51bXVtIFZvbHRhZ2UuIEZyb20gVk9VVF9VVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS02XV9tYXgJCU1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsxLTZdX2xjcml0CQlDcml0aWNhbCBtaW51bXVtIFZvbHRhZ2UuIFZPVVRfVVZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpblsxLTZdX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS02XV9taW5fYWxhcm0JVm9sdGFnZSBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtNl1fbWF4X2FsYXJtCVZvbHRhZ2UgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX1dBUk5JTkcgc3RhdHVzLgoraW5bMS02XV9sY3JpdF9hbGFybQlWb2x0YWdlIGNyaXRpY2FsIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX0ZBVUxUIHN0YXR1cy4KK2luWzEtNl1fY3JpdF9hbGFybQlWb2x0YWdlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9GQVVMVCBzdGF0dXMuCisKK2N1cnJbMS02XV9sYWJlbAkJImlvdXRbMS02XSIuCitjdXJyWzEtNl1faW5wdXQJCU1lYXN1cmVkIGN1cnJlbnQuIEZyb20gUkVBRF9JT1VUIHJlZ2lzdGVyLgorY3VyclsxLTZdX21heAkJTWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2N1cnJbMS02XV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2N1cnJbMS02XV9tYXhfYWxhcm0JQ3VycmVudCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfV0FSTklORyBzdGF0dXMuCitjdXJyWzEtNl1fY3JpdF9hbGFybQlDdXJyZW50IGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19GQVVMVCBzdGF0dXMuCisKKwkJCWluNiBhbmQgY3VycjYgYXR0cmlidXRlcyBvbmx5IGV4aXN0IGZvciBNQVgzNDQ0MC4KKwordGVtcFsxLThdX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJhdHVyZXMuIEZyb20gUkVBRF9URU1QRVJBVFVSRV8xIHJlZ2lzdGVyLgorCQkJdGVtcDEgaXMgdGhlIGNoaXAncyBpbnRlcm5hbCB0ZW1wZXJhdHVyZS4gdGVtcDIuLnRlbXA1CisJCQlhcmUgcmVtb3RlIEkyQyB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBGb3IgTUFYMzQ0NDEsIHRlbXA2CisJCQlpcyBhIHJlbW90ZSB0aGVybWFsLWRpb2RlIHNlbnNvci4gRm9yIE1BWDM0NDQwLCB0ZW1wNi4uOAorCQkJYXJlIHJlbW90ZSBJMkMgdGVtcGVyYXR1cmUgc2Vuc29ycy4KK3RlbXBbMS04XV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXBbMS04XV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlLiBGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgordGVtcFsxLThdX21heF9hbGFybQlUZW1wZXJhdHVyZSBoaWdoIGFsYXJtLgordGVtcFsxLThdX2NyaXRfYWxhcm0JVGVtcGVyYXR1cmUgY3JpdGljYWwgaGlnaCBhbGFybS4KKworCQkJdGVtcDcgYW5kIHRlbXA4IGF0dHJpYnV0ZXMgb25seSBleGlzdCBmb3IgTUFYMzQ0NDAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDg2ODggYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDg2ODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZDNhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4ODY4OApAQCAtMCwwICsxLDY5IEBACitLZXJuZWwgZHJpdmVyIG1heDg2ODgKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTWF4aW0gTUFYODY4OAorICAgIFByZWZpeDogJ21heDg2ODgnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVg4Njg4LnBkZgorCitBdXRob3I6IEd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBtb250b3JpbmcgZm9yIE1heGltIE1BWDg2ODggRGlnaXRhbCBQb3dlci1TdXBwbHkKK0NvbnRyb2xsZXIvTW9uaXRvciB3aXRoIFBNQnVzIEludGVyZmFjZS4KKworVGhlIGRyaXZlciBpcyBhIGNsaWVudCBkcml2ZXIgdG8gdGhlIGNvcmUgUE1CdXMgZHJpdmVyLiBQbGVhc2Ugc2VlCitEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzIG9uIFBNQnVzIGNsaWVudCBkcml2ZXJzLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBhdXRvLWRldGVjdCBkZXZpY2VzLiBZb3Ugd2lsbCBoYXZlIHRvIGluc3RhbnRpYXRlIHRoZQorZGV2aWNlcyBleHBsaWNpdGx5LiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBmb3IKK2RldGFpbHMuCisKKworUGxhdGZvcm0gZGF0YSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBzdGFuZGFyZCBQTUJ1cyBkcml2ZXIgcGxhdGZvcm0gZGF0YS4KKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgc3VwcG9ydGVkLiBMaW1pdHMgYXJlIHJlYWQtd3JpdGU7IGFsbCBvdGhlcgorYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgorCitpbjFfbGFiZWwJCSJ2b3V0MSIKK2luMV9pbnB1dAkJTWVhc3VyZWQgdm9sdGFnZS4gRnJvbSBSRUFEX1ZPVVQgcmVnaXN0ZXIuCitpbjFfbWluCQkJTWludW11bSBWb2x0YWdlLiBGcm9tIFZPVVRfVVZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luMV9tYXgJCQlNYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW4xX2xjcml0CQlDcml0aWNhbCBtaW51bXVtIFZvbHRhZ2UuIFZPVVRfVVZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpbjFfY3JpdAkJQ3JpdGljYWwgbWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpbjFfbWluX2FsYXJtCQlWb2x0YWdlIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX1dBUk5JTkcgc3RhdHVzLgoraW4xX21heF9hbGFybQkJVm9sdGFnZSBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfV0FSTklORyBzdGF0dXMuCitpbjFfbGNyaXRfYWxhcm0JCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgoraW4xX2NyaXRfYWxhcm0JCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX0ZBVUxUIHN0YXR1cy4KKworY3VycjFfbGFiZWwJCSJpb3V0MSIKK2N1cnIxX2lucHV0CQlNZWFzdXJlZCBjdXJyZW50LiBGcm9tIFJFQURfSU9VVCByZWdpc3Rlci4KK2N1cnIxX21heAkJTWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2N1cnIxX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gY3VycmVudC4gRnJvbSBJT1VUX09DX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgorY3VycjFfbWF4X2FsYXJtCQlDdXJyZW50IGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19XQVJOX0xJTUlUIHJlZ2lzdGVyLgorY3VycjFfY3JpdF9hbGFybQlDdXJyZW50IGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19GQVVMVCBzdGF0dXMuCisKK3RlbXAxX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJhdHVyZS4gRnJvbSBSRUFEX1RFTVBFUkFUVVJFXzEgcmVnaXN0ZXIuCit0ZW1wMV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXAxX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUuIEZyb20gT1RfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCit0ZW1wMV9tYXhfYWxhcm0JCUNoaXAgdGVtcGVyYXR1cmUgaGlnaCBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZworCQkJUkVBRF9URU1QRVJBVFVSRV8xIHdpdGggT1RfV0FSTl9MSU1JVCBpZiBURU1QX09UX1dBUk5JTkcKKwkJCXN0YXR1cyBpcyBzZXQuCit0ZW1wMV9jcml0X2FsYXJtCUNoaXAgdGVtcGVyYXR1cmUgY3JpdGljYWwgaGlnaCBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZworCQkJUkVBRF9URU1QRVJBVFVSRV8xIHdpdGggT1RfRkFVTFRfTElNSVQgaWYgVEVNUF9PVF9GQVVMVAorCQkJc3RhdHVzIGlzIHNldC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzCmluZGV4IGYyZDQyZTguLjVlNDYyZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cwpAQCAtMTMsMjYgKzEzLDYgQEAKICAgICBQcmVmaXg6ICdsdGMyOTc4JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCiAgICAgRGF0YXNoZWV0OiBodHRwOi8vY2RzLmxpbmVhci5jb20vZG9jcy9EYXRhc2hlZXQvMjk3OGZhLnBkZgotICAqIE1heGltIE1BWDE2MDY0Ci0gICAgUXVhZCBQb3dlci1TdXBwbHkgQ29udHJvbGxlcgotICAgIFByZWZpeDogJ21heDE2MDY0JwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMTYwNjQucGRmCi0gICogTWF4aW0gTUFYMzQ0NDAKLSAgICBQTUJ1cyA2LUNoYW5uZWwgUG93ZXItU3VwcGx5IE1hbmFnZXIKLSAgICBQcmVmaXhlczogJ21heDM0NDQwJwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMzQ0NDAucGRmCi0gICogTWF4aW0gTUFYMzQ0NDEKLSAgICBQTUJ1cyA1LUNoYW5uZWwgUG93ZXItU3VwcGx5IE1hbmFnZXIgYW5kIEludGVsbGlnZW50IEZhbiBDb250cm9sbGVyCi0gICAgUHJlZml4ZXM6ICdtYXgzNDQ0MScKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQotICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDM0NDQxLnBkZgotICAqIE1heGltIE1BWDg2ODgKLSAgICBEaWdpdGFsIFBvd2VyLVN1cHBseSBDb250cm9sbGVyL01vbml0b3IKLSAgICBQcmVmaXg6ICdtYXg4Njg4JwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYODY4OC5wZGYKICAgKiBHZW5lcmljIFBNQnVzIGRldmljZXMKICAgICBQcmVmaXg6ICdwbWJ1cycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQpAQCAtMTUwLDExICsxMzAsMTEgQEAKIGF0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KIAogaW5YX2lucHV0CQlNZWFzdXJlZCB2b2x0YWdlLiBGcm9tIFJFQURfVklOIG9yIFJFQURfVk9VVCByZWdpc3Rlci4KLWluWF9taW4JCQlNaW51bXVtIFZvbHRhZ2UuCitpblhfbWluCQkJTWluaW11bSBWb2x0YWdlLgogCQkJRnJvbSBWSU5fVVZfV0FSTl9MSU1JVCBvciBWT1VUX1VWX1dBUk5fTElNSVQgcmVnaXN0ZXIuCiBpblhfbWF4CQkJTWF4aW11bSB2b2x0YWdlLgogCQkJRnJvbSBWSU5fT1ZfV0FSTl9MSU1JVCBvciBWT1VUX09WX1dBUk5fTElNSVQgcmVnaXN0ZXIuCi1pblhfbGNyaXQJCUNyaXRpY2FsIG1pbnVtdW0gVm9sdGFnZS4KK2luWF9sY3JpdAkJQ3JpdGljYWwgbWluaW11bSBWb2x0YWdlLgogCQkJRnJvbSBWSU5fVVZfRkFVTFRfTElNSVQgb3IgVk9VVF9VVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KIGluWF9jcml0CQlDcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UuCiAJCQlGcm9tIFZJTl9PVl9GQVVMVF9MSU1JVCBvciBWT1VUX09WX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgpAQCAtMTY5LDE3ICsxNDksMTkgQEAKIGN1cnJYX2lucHV0CQlNZWFzdXJlZCBjdXJyZW50LiBGcm9tIFJFQURfSUlOIG9yIFJFQURfSU9VVCByZWdpc3Rlci4KIGN1cnJYX21heAkJTWF4aW11bSBjdXJyZW50LgogCQkJRnJvbSBJSU5fT0NfV0FSTl9MSU1JVCBvciBJT1VUX09DX1dBUk5fTElNSVQgcmVnaXN0ZXIuCi1jdXJyWF9sY3JpdAkJQ3JpdGljYWwgbWludW11bSBvdXRwdXQgY3VycmVudC4KK2N1cnJYX2xjcml0CQlDcml0aWNhbCBtaW5pbXVtIG91dHB1dCBjdXJyZW50LgogCQkJRnJvbSBJT1VUX1VDX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgogY3VyclhfY3JpdAkJQ3JpdGljYWwgbWF4aW11bSBjdXJyZW50LgogCQkJRnJvbSBJSU5fT0NfRkFVTFRfTElNSVQgb3IgSU9VVF9PQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KIGN1cnJYX2FsYXJtCQlDdXJyZW50IGhpZ2ggYWxhcm0uCiAJCQlGcm9tIElJTl9PQ19XQVJOSU5HIG9yIElPVVRfT0NfV0FSTklORyBzdGF0dXMuCitjdXJyWF9tYXhfYWxhcm0JCUN1cnJlbnQgaGlnaCBhbGFybS4KKwkJCUZyb20gSUlOX09DX1dBUk5fTElNSVQgb3IgSU9VVF9PQ19XQVJOX0xJTUlUIHN0YXR1cy4KIGN1cnJYX2xjcml0X2FsYXJtCU91dHB1dCBjdXJyZW50IGNyaXRpY2FsIGxvdyBhbGFybS4KIAkJCUZyb20gSU9VVF9VQ19GQVVMVCBzdGF0dXMuCiBjdXJyWF9jcml0X2FsYXJtCUN1cnJlbnQgY3JpdGljYWwgaGlnaCBhbGFybS4KIAkJCUZyb20gSUlOX09DX0ZBVUxUIG9yIElPVVRfT0NfRkFVTFQgc3RhdHVzLgotY3VyclhfbGFiZWwJCSJpaW4iIG9yICJ2aW5ZIgorY3VyclhfbGFiZWwJCSJpaW4iIG9yICJpb3V0WSIKIAogcG93ZXJYX2lucHV0CQlNZWFzdXJlZCBwb3dlci4gRnJvbSBSRUFEX1BJTiBvciBSRUFEX1BPVVQgcmVnaXN0ZXIuCiBwb3dlclhfY2FwCQlPdXRwdXQgcG93ZXIgY2FwLiBGcm9tIFBPVVRfTUFYIHJlZ2lzdGVyLgpAQCAtMTkzLDEzICsxNzUsMTMgQEAKIAkJCUZyb20gUE9VVF9PUF9GQVVMVCBzdGF0dXMuCiBwb3dlclhfbGFiZWwJCSJwaW4iIG9yICJwb3V0WSIKIAotdGVtcFhfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmVyYXR1cmUuCit0ZW1wWF9pbnB1dAkJTWVhc3VyZWQgdGVtcGVyYXR1cmUuCiAJCQlGcm9tIFJFQURfVEVNUEVSQVRVUkVfWCByZWdpc3Rlci4KLXRlbXBYX21pbgkJTWltaW11bSB0ZW1wZXJlcmF0dXJlLiBGcm9tIFVUX1dBUk5fTElNSVQgcmVnaXN0ZXIuCi10ZW1wWF9tYXgJCU1heGltdW0gdGVtcGVyZXJhdHVyZS4gRnJvbSBPVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgotdGVtcFhfbGNyaXQJCUNyaXRpY2FsIGxvdyB0ZW1wZXJlcmF0dXJlLgordGVtcFhfbWluCQlNaW1pbXVtIHRlbXBlcmF0dXJlLiBGcm9tIFVUX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wWF9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXBYX2xjcml0CQlDcml0aWNhbCBsb3cgdGVtcGVyYXR1cmUuCiAJCQlGcm9tIFVUX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgotdGVtcFhfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJlcmF0dXJlLgordGVtcFhfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZS4KIAkJCUZyb20gT1RfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCiB0ZW1wWF9taW5fYWxhcm0JCUNoaXAgdGVtcGVyYXR1cmUgbG93IGFsYXJtLiBTZXQgYnkgY29tcGFyaW5nCiAJCQlSRUFEX1RFTVBFUkFUVVJFX1ggd2l0aCBVVF9XQVJOX0xJTUlUIGlmCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NSBiL0RvY3VtZW50YXRpb24vaHdtb24vc21tNjY1CmluZGV4IDM4MjBmYzkuLjU5ZTMxNjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vc21tNjY1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc21tNjY1CkBAIC0xNTAsOCArMTUwLDggQEAKIGluOV9jcml0X2FsYXJtCQlBSU4xIGNyaXRpY2FsIGFsYXJtCiBpbjEwX2NyaXRfYWxhcm0JCUFJTjIgY3JpdGljYWwgYWxhcm0KIAotdGVtcDFfaW5wdXQJCUNoaXAgdGVtcGVyZXJhdHVyZQotdGVtcDFfbWluCQlNaW1pbXVtIGNoaXAgdGVtcGVyZXJhdHVyZQotdGVtcDFfbWF4CQlNYXhpbXVtIGNoaXAgdGVtcGVyZXJhdHVyZQotdGVtcDFfY3JpdAkJQ3JpdGljYWwgY2hpcCB0ZW1wZXJlcmF0dXJlCit0ZW1wMV9pbnB1dAkJQ2hpcCB0ZW1wZXJhdHVyZQordGVtcDFfbWluCQlNaW1pbXVtIGNoaXAgdGVtcGVyYXR1cmUKK3RlbXAxX21heAkJTWF4aW11bSBjaGlwIHRlbXBlcmF0dXJlCit0ZW1wMV9jcml0CQlDcml0aWNhbCBjaGlwIHRlbXBlcmF0dXJlCiB0ZW1wMV9jcml0X2FsYXJtCVRlbXBlcmF0dXJlIGNyaXRpY2FsIGFsYXJtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N1Ym1pdHRpbmctcGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vaHdtb24vc3VibWl0dGluZy1wYXRjaGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjQyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N1Ym1pdHRpbmctcGF0Y2hlcwpAQCAtMCwwICsxLDEwOSBAQAorCUhvdyB0byBHZXQgWW91ciBQYXRjaCBBY2NlcHRlZCBJbnRvIHRoZSBId21vbiBTdWJzeXN0ZW0KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdGV4dCBpcyBpcyBhIGNvbGxlY3Rpb24gb2Ygc3VnZ2VzdGlvbnMgZm9yIHBlb3BsZSB3cml0aW5nIHBhdGNoZXMgb3IKK2RyaXZlcnMgZm9yIHRoZSBod21vbiBzdWJzeXN0ZW0uIEZvbGxvd2luZyB0aGVzZSBzdWdnZXN0aW9ucyB3aWxsIGdyZWF0bHkKK2luY3JlYXNlIHRoZSBjaGFuY2VzIG9mIHlvdXIgY2hhbmdlIGJlaW5nIGFjY2VwdGVkLgorCisKKzEuIEdlbmVyYWwKKy0tLS0tLS0tLS0KKworKiBJdCBzaG91bGQgYmUgdW5uZWNlc3NhcnkgdG8gbWVudGlvbiwgYnV0IHBsZWFzZSByZWFkIGFuZCBmb2xsb3cKKyAgICBEb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAorICAgIERvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKKyAgICBEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisgICAgRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorCisqIElmIHlvdXIgcGF0Y2ggZ2VuZXJhdGVzIGNoZWNrcGF0Y2ggd2FybmluZ3MsIHBsZWFzZSByZWZyYWluIGZyb20gZXhwbGFuYXRpb25zCisgIHN1Y2ggYXMgIkkgZG9uJ3QgbGlrZSB0aGF0IGNvZGluZyBzdHlsZSIuIEtlZXAgaW4gbWluZCB0aGF0IGVhY2ggdW5uZWNlc3NhcnkKKyAgd2FybmluZyBoZWxwcyBoaWRpbmcgYSByZWFsIHByb2JsZW0uIElmIHlvdSBkb24ndCBsaWtlIHRoZSBrZXJuZWwgY29kaW5nCisgIHN0eWxlLCBkb24ndCB3cml0ZSBrZXJuZWwgZHJpdmVycy4KKworKiBQbGVhc2UgdGVzdCB5b3VyIHBhdGNoIHRob3JvdWdobHkuIFdlIGFyZSBub3QgeW91ciB0ZXN0IGdyb3VwLgorICBTb21ldGltZXMgYSBwYXRjaCBjYW4gbm90IG9yIG5vdCBjb21wbGV0ZWx5IGJlIHRlc3RlZCBiZWNhdXNlIG9mIG1pc3NpbmcKKyAgaGFyZHdhcmUuIEluIHN1Y2ggY2FzZXMsIHlvdSBzaG91bGQgdGVzdC1idWlsZCB0aGUgY29kZSBvbiBhdCBsZWFzdCBvbmUKKyAgYXJjaGl0ZWN0dXJlLiBJZiBydW4tdGltZSB0ZXN0aW5nIHdhcyBub3QgYWNoaWV2ZWQsIGl0IHNob3VsZCBiZSB3cml0dGVuCisgIGV4cGxpY2l0bHkgYmVsb3cgdGhlIHBhdGNoIGhlYWRlci4KKworKiBJZiB5b3VyIHBhdGNoIChvciB0aGUgZHJpdmVyKSBpcyBhZmZlY3RlZCBieSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3VjaCBhcworICBDT05GSUdfU01QIG9yIENPTkZJR19IT1RQTFVHLCBtYWtlIHN1cmUgaXQgY29tcGlsZXMgZm9yIGFsbCBjb25maWd1cmF0aW9uCisgIHZhcmlhbnRzLgorCisKKzIuIEFkZGluZyBmdW5jdGlvbmFsaXR5IHRvIGV4aXN0aW5nIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNYWtlIHN1cmUgdGhlIGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9od21vbi88ZHJpdmVyX25hbWU+IGlzIHVwIHRvCisgIGRhdGUuCisKKyogTWFrZSBzdXJlIHRoZSBpbmZvcm1hdGlvbiBpbiBLY29uZmlnIGlzIHVwIHRvIGRhdGUuCisKKyogSWYgdGhlIGFkZGVkIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgc29tZSBjbGVhbnVwIG9yIHN0cnVjdHVyYWwgY2hhbmdlcywgc3BsaXQKKyAgeW91ciBwYXRjaCBpbnRvIGEgY2xlYW51cCBwYXJ0IGFuZCB0aGUgYWN0dWFsIGFkZGl0aW9uLiBUaGlzIG1ha2VzIGl0IGVhc2llcgorICB0byByZXZpZXcgeW91ciBjaGFuZ2VzLCBhbmQgdG8gYmlzZWN0IGFueSByZXN1bHRpbmcgcHJvYmxlbXMuCisKKyogTmV2ZXIgbWl4IGJ1ZyBmaXhlcywgY2xlYW51cCwgYW5kIGZ1bmN0aW9uYWwgZW5oYW5jZW1lbnRzIGluIGEgc2luZ2xlIHBhdGNoLgorCisKKzMuIE5ldyBkcml2ZXJzCistLS0tLS0tLS0tLS0tLQorCisqIFJ1bm5pbmcgeW91ciBwYXRjaCBvciBkcml2ZXIgZmlsZShzKSB0aHJvdWdoIGNoZWNrcGF0Y2ggZG9lcyBub3QgbWVhbiBpdHMKKyAgZm9ybWF0dGluZyBpcyBjbGVhbi4gSWYgdW5zdXJlIGFib3V0IGZvcm1hdHRpbmcgaW4geW91ciBuZXcgZHJpdmVyLCBydW4gaXQKKyAgdGhyb3VnaCBMaW5kZW50LiBMaW5kZW50IGlzIG5vdCBwZXJmZWN0LCBhbmQgeW91IG1heSBoYXZlIHRvIGRvIHNvbWUgbWlub3IKKyAgY2xlYW51cCwgYnV0IGl0IGlzIGEgZ29vZCBzdGFydC4KKworKiBDb25zaWRlciBhZGRpbmcgeW91cnNlbGYgdG8gTUFJTlRBSU5FUlMuCisKKyogRG9jdW1lbnQgdGhlIGRyaXZlciBpbiBEb2N1bWVudGF0aW9uL2h3bW9uLzxkcml2ZXJfbmFtZT4uCisKKyogQWRkIHRoZSBkcml2ZXIgdG8gS2NvbmZpZyBhbmQgTWFrZWZpbGUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCisqIE1ha2Ugc3VyZSB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIGxpc3RlZCBpbiBLY29uZmlnLiBGb3IgbmV3IGRyaXZlcnMsIGl0CisgIGlzIG1vc3QgbGlrZWx5IHBydWRlbnQgdG8gYWRkIGEgZGVwZW5kZW5jeSBvbiBFWFBFUklNRU5UQUwuCisKKyogQXZvaWQgZm9yd2FyZCBkZWNsYXJhdGlvbnMgaWYgeW91IGNhbi4gUmVhcnJhbmdlIHRoZSBjb2RlIGlmIG5lY2Vzc2FyeS4KKworKiBBdm9pZCBjYWxjdWxhdGlvbnMgaW4gbWFjcm9zIGFuZCBtYWNyby1nZW5lcmF0ZWQgZnVuY3Rpb25zLiBXaGlsZSBzdWNoIG1hY3JvcworICBtYXkgc2F2ZSBhIGxpbmUgb3Igc28gaW4gdGhlIHNvdXJjZSwgaXQgb2JmdXNjYXRlcyB0aGUgY29kZSBhbmQgbWFrZXMgY29kZQorICByZXZpZXcgbW9yZSBkaWZmaWN1bHQuIEl0IG1heSBhbHNvIHJlc3VsdCBpbiBjb2RlIHdoaWNoIGlzIG1vcmUgY29tcGxpY2F0ZWQKKyAgdGhhbiBuZWNlc3NhcnkuIFVzZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGp1c3QgcmVndWxhciBmdW5jdGlvbnMgaW5zdGVhZC4KKworKiBJZiB0aGUgZHJpdmVyIGhhcyBhIGRldGVjdCBmdW5jdGlvbiwgbWFrZSBzdXJlIGl0IGlzIHNpbGVudC4gRGVidWcgbWVzc2FnZXMKKyAgYW5kIG1lc3NhZ2VzIHByaW50ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRldGVjdGlvbiBhcmUgYWNjZXB0YWJsZSwgYnV0IGl0CisgIG11c3Qgbm90IHByaW50IG1lc3NhZ2VzIHN1Y2ggYXMgIkNoaXAgWFhYIG5vdCBmb3VuZC9zdXBwb3J0ZWQiLgorCisgIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBkZXRlY3QgZnVuY3Rpb24gd2lsbCBydW4gZm9yIGFsbCBkcml2ZXJzIHN1cHBvcnRpbmcgYW4KKyAgYWRkcmVzcyBpZiBhIGNoaXAgaXMgZGV0ZWN0ZWQgb24gdGhhdCBhZGRyZXNzLiBVbm5lY2Vzc2FyeSBtZXNzYWdlcyB3aWxsIGp1c3QKKyAgcG9sbHV0ZSB0aGUga2VybmVsIGxvZyBhbmQgbm90IHByb3ZpZGUgYW55IHZhbHVlLgorCisqIFByb3ZpZGUgYSBkZXRlY3QgZnVuY3Rpb24gaWYgYW5kIG9ubHkgaWYgYSBjaGlwIGNhbiBiZSBkZXRlY3RlZCByZWxpYWJseS4KKworKiBBdm9pZCB3cml0aW5nIHRvIGNoaXAgcmVnaXN0ZXJzIGluIHRoZSBkZXRlY3QgZnVuY3Rpb24uIElmIHlvdSBoYXZlIHRvIHdyaXRlLAorICBvbmx5IGRvIGl0IGFmdGVyIHlvdSBoYXZlIGFscmVhZHkgZ2F0aGVyZWQgZW5vdWdoIGRhdGEgdG8gYmUgY2VydGFpbiB0aGF0IHRoZQorICBkZXRlY3Rpb24gaXMgZ29pbmcgdG8gYmUgc3VjY2Vzc2Z1bC4KKworICBLZWVwIGluIG1pbmQgdGhhdCB0aGUgY2hpcCBtaWdodCBub3QgYmUgd2hhdCB5b3VyIGRyaXZlciBiZWxpZXZlcyBpdCBpcywgYW5kCisgIHdyaXRpbmcgdG8gaXQgbWlnaHQgY2F1c2UgYSBiYWQgbWlzY29uZmlndXJhdGlvbi4KKworKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwKKyAgY29tcGxldGVseSBpbml0aWFsaXplIHlvdXIgY2hpcCBmaXJzdCwgdGhlbiBjcmVhdGUgc3lzZnMgZW50cmllcyBhbmQgcmVnaXN0ZXIKKyAgd2l0aCB0aGUgaHdtb24gc3Vic3lzdGVtLgorCisqIERvIG5vdCBwcm92aWRlIHN1cHBvcnQgZm9yIGRlcHJlY2F0ZWQgc3lzZnMgYXR0cmlidXRlcy4KKworKiBEbyBub3QgY3JlYXRlIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzIHVubGVzcyByZWFsbHkgbmVlZGVkLiBJZiB5b3UgaGF2ZSB0byB1c2UKKyAgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZXMsIG9yIHlvdSBiZWxpZXZlIHlvdSBkbywgZGlzY3VzcyBpdCBvbiB0aGUgbWFpbGluZyBsaXN0CisgIGZpcnN0LiBFaXRoZXIgY2FzZSwgcHJvdmlkZSBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIHdoeSB5b3UgbmVlZCB0aGUKKyAgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZShzKS4KKyAgU3RhbmRhcmQgYXR0cmlidXRlcyBhcmUgc3BlY2lmaWVkIGluIERvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlLgorCisqIFdoZW4gZGVjaWRpbmcgd2hpY2ggc3lzZnMgYXR0cmlidXRlcyB0byBzdXBwb3J0LCBsb29rIGF0IHRoZSBjaGlwJ3MKKyAgY2FwYWJpbGl0aWVzLiBXaGlsZSB3ZSBkbyBub3QgZXhwZWN0IHlvdXIgZHJpdmVyIHRvIHN1cHBvcnQgZXZlcnl0aGluZyB0aGUKKyAgY2hpcCBtYXkgb2ZmZXIsIGl0IHNob3VsZCBhdCBsZWFzdCBzdXBwb3J0IGFsbCBsaW1pdHMgYW5kIGFsYXJtcy4KKworKiBMYXN0IGJ1dCBub3QgbGVhc3QsIHBsZWFzZSBjaGVjayBpZiBhIGRyaXZlciBmb3IgeW91ciBjaGlwIGFscmVhZHkgZXhpc3RzCisgIGJlZm9yZSBzdGFydGluZyB0byB3cml0ZSBhIG5ldyBkcml2ZXIuIEVzcGVjaWFsbHkgZm9yIHRlbXBlcmF0dXJlIHNlbnNvcnMsCisgIG5ldyBjaGlwcyBhcmUgb2Z0ZW4gdmFyaWFudHMgb2YgcHJldmlvdXNseSByZWxlYXNlZCBjaGlwcy4gSW4gc29tZSBjYXNlcywKKyAgYSBwcmVzdW1hYmx5IG5ldyBjaGlwIG1heSBzaW1wbHkgaGF2ZSBiZWVuIHJlbGFiZWxlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKaW5kZXggODNhNjk4Ny4uOGY2M2MyNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKQEAgLTU3OSw3ICs1NzksNyBAQAogZmFuWzEtKl1fZmF1bHQKIHRlbXBbMS0qXV9mYXVsdAogCQlJbnB1dCBmYXVsdCBjb25kaXRpb24KLQkJMDogbm8gZmF1bHQgb2NjdXJlZAorCQkwOiBubyBmYXVsdCBvY2N1cnJlZAogCQkxOiBmYXVsdCBjb25kaXRpb24KIAkJUk8KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCmluZGV4IGVjYmMxZTQuLjEyOWIwYTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKQEAgLTQwMyw3ICs0MDMsNyBAQAogCiAweDgwIC0gc2VlbXMgdG8gdHVybiBmYW5zIG9mZiBhZnRlciBzb21lIHRpbWUoMS0yIG1pbnV0ZXMpLi4uIG1pZ2h0IGJlCiBzb21lIGZvcm0gb2YgYXV0by1mYW4tY29udHJvbCBiYXNlZCBvbiB0ZW1wPyBobW0gKFFmYW4/IHRoaXMgbW9ibyBpcyBhbgotb2xkIEFTVVMsIGl0IGlzbid0IG1hcmtldGVkIGFzIFFmYW4uIE1heWJlIHNvbWUgYmV0YSBwcmUtYXR0ZW1wIGF0IFFmYW4KK29sZCBBU1VTLCBpdCBpc24ndCBtYXJrZXRlZCBhcyBRZmFuLiBNYXliZSBzb21lIGJldGEgcHJlLWF0dGVtcHQgYXQgUWZhbgogdGhhdCB3YXMgZHJvcHBlZCBhdCB0aGUgQklPUykKIDB4ODEgLSBvZmYKIDB4ODIgLSBzbGlnaHRseSAib24tbmVyIiB0aGFuIG9mZiwgYnV0IG15IGZhbnMgZG8gbm90IGdldCB0byBtb3ZlLiBJIGNhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCmluZGV4IDU2NjNlNDkuLjkwMzg3YzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKQEAgLTkzLDcgKzkzLDcgQEAKIG1ldGhvZCBvZiBhIHNpbmdsZSBzeXNmcyBiZWVwX21hc2sgZmlsZSB0byBhIG5ld2VyIG1ldGhvZCB1c2luZyBtdWx0aXBsZQogKl9iZWVwIGZpbGVzIGFzIGRlc2NyaWJlZCBpbiAuLi4vRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UuCiAKLUEgc2ltaWxhciBjaGFuZ2UgaGFzIG9jY3VyZWQgZm9yIHRoZSBiaXRtYXAgY29ycmVzcG9uZGluZyB0byB0aGUgYWxhcm1zLiBUaGUKK0Egc2ltaWxhciBjaGFuZ2UgaGFzIG9jY3VycmVkIGZvciB0aGUgYml0bWFwIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsYXJtcy4gVGhlCiBvcmlnaW5hbCBsZWdhY3kgbWV0aG9kIHVzZWQgYSBzaW5nbGUgc3lzZnMgYWxhcm1zIGZpbGUgY29udGFpbmluZyBhIGJpdG1hcAogb2YgdHJpZ2dlcmVkIGFsYXJtcy4gVGhlIG5ld2VyIG1ldGhvZCB1c2VzIG11bHRpcGxlIHN5c2ZzICpfYWxhcm0gZmlsZXMKIChhZ2FpbiBmb2xsb3dpbmcgdGhlIHBhdHRlcm4gZGVzY3JpYmVkIGluIHN5c2ZzLWludGVyZmFjZSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQKaW5kZXggYmRjOWNiYi4uYzIyZWUwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0CisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodApAQCAtNCw3ICs0LDcgQEAKIAogVGhpcyBkcml2ZXIgaXMgYSBsaWdodCB2ZXJzaW9uIG9mIGkyYy1wYXJwb3J0LiBJdCBkb2Vzbid0IGRlcGVuZCAgICAgICAgCiBvbiB0aGUgcGFycG9ydCBkcml2ZXIsIGFuZCB1c2VzIGRpcmVjdCBJL08gYWNjZXNzIGluc3RlYWQuIFRoaXMgbWlnaHQgYmUKLXByZWZlcmVkIG9uIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgd2FzdGluZyBtZW1vcnkgZm9yIHRoZSBjbGVhbiBidXQgaGVhdnkKK3ByZWZlcnJlZCBvbiBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIHdhc3RpbmcgbWVtb3J5IGZvciB0aGUgY2xlYW4gYnV0IGhlYXZ5CiBwYXJwb3J0IGhhbmRsaW5nIGlzIG5vdCBhbiBvcHRpb24uIFRoZSBkcmF3YmFjayBpcyBhIHJlZHVjZWQgcG9ydGFiaWxpdHkKIGFuZCB0aGUgaW1wb3NzaWJpbGl0eSB0byBkYWlzeS1jaGFpbiBvdGhlciBwYXJhbGxlbCBwb3J0IGRldmljZXMuICAgICAgICAgICAgICAgICAKICAgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczk2eCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4CmluZGV4IDcwZTZhMGMuLjBiOTc5ZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4CisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4CkBAIC0zNSw3ICszNSw3IEBACiAKIChrZXJuZWwgdmVyc2lvbnMgbGF0ZXIgdGhhbiAyLjQuMTggbWF5IGZpbGwgaW4gdGhlICJVbmtub3duInMpCiAKLUlmIHlvdSBjYW50IHNlZSBpdCBwbGVhc2UgbG9vayBvbiBxdWlya19zaXNfOTZ4X3NtYnVzCitJZiB5b3UgY2FuJ3Qgc2VlIGl0IHBsZWFzZSBsb29rIG9uIHF1aXJrX3Npc185Nnhfc21idXMKIChkcml2ZXJzL3BjaS9xdWlya3MuYykgKGFsc28gaWYgc291dGhicmlkZ2UgZGV0ZWN0aW9uIGZhaWxzKQogCiBJIHN1c3BlY3QgdGhhdCB0aGlzIGRyaXZlciBjb3VsZCBiZSBtYWRlIHRvIHdvcmsgZm9yIHRoZSBmb2xsb3dpbmcgU2lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXRhb3MtZXZtIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy10YW9zLWV2bQppbmRleCA5MTQ2ZTMzLi42M2Y2MmJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXRhb3MtZXZtCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdGFvcy1ldm0KQEAgLTEzLDcgKzEzLDcgQEAKIAogKiBUQU9TIFRTTDI1NTAgRVZNCiAKLUZvciBhZGR0aW9uYWwgaW5mb3JtYXRpb24gb24gVEFPUyBwcm9kdWN0cywgcGxlYXNlIHNlZQorRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gVEFPUyBwcm9kdWN0cywgcGxlYXNlIHNlZQogICBodHRwOi8vd3d3LnRhb3NpbmMuY29tLwogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJvL1JFQURNRSBiL0RvY3VtZW50YXRpb24vaTJvL1JFQURNRQppbmRleCAwZWJmNThjLi5lZTkxZTI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9pMm8vUkVBRE1FCkBAIC01Myw3ICs1Myw3IEBACiBCb3hIaWxsIENvcnBvcmF0aW9uCiAJTG9hbiBvZiBpbml0aWFsIEZpYnJlQ2hhbm5lbCBkaXNrIGFycmF5IHVzZWQgZm9yIGRldmVsb3BtZW50IHdvcmsuCiAKLUV1cm9wZWFuIENvbWlzc2lvbgorRXVyb3BlYW4gQ29tbWlzc2lvbgogCUZ1bmRpbmcgdGhlIHdvcmsgZG9uZSBieSB0aGUgVW5pdmVyc2l0eSBvZiBIZWxzaW5raQogCiBTeXNLb25uZWN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jIGIvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLXRlc3QuYwppbmRleCAzZGZiNzZjLi41Y2FhMmFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9hbGlhc2luZy10ZXN0LmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiAJCQkvKgogCQkJICogSXQncyBPSyBpZiB0aGUgUk9NIGlzIHVucmVhZGFibGUuICBNYXliZSB0aGVyZQotCQkJICogaXMgbm8gUk9NLCBvciBzb21lIG90aGVyIGVycm9yIG9jdXJyZWQuICBUaGUKKwkJCSAqIGlzIG5vIFJPTSwgb3Igc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZC4gIFRoZQogCQkJICogaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgbm8gTUNBIGhhcHBlbmVkLgogCQkJICovCiAJCQlpZiAocmMgPiAwKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9ldmVudC1jb2Rlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2V2ZW50LWNvZGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2ZjYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9ldmVudC1jb2Rlcy50eHQKQEAgLTAsMCArMSwyNjIgQEAKK1RoZSBpbnB1dCBwcm90b2NvbCB1c2VzIGEgbWFwIG9mIHR5cGVzIGFuZCBjb2RlcyB0byBleHByZXNzIGlucHV0IGRldmljZSB2YWx1ZXMKK3RvIHVzZXJzcGFjZS4gVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHR5cGVzIGFuZCBjb2RlcyBhbmQgaG93IGFuZCB3aGVuIHRoZXkKK21heSBiZSB1c2VkLgorCitBIHNpbmdsZSBoYXJkd2FyZSBldmVudCBnZW5lcmF0ZXMgbXVsdGlwbGUgaW5wdXQgZXZlbnRzLiBFYWNoIGlucHV0IGV2ZW50Citjb250YWlucyB0aGUgbmV3IHZhbHVlIG9mIGEgc2luZ2xlIGRhdGEgaXRlbS4gQSBzcGVjaWFsIGV2ZW50IHR5cGUsIEVWX1NZTiwgaXMKK3VzZWQgdG8gc2VwYXJhdGUgaW5wdXQgZXZlbnRzIGludG8gcGFja2V0cyBvZiBpbnB1dCBkYXRhIGNoYW5nZXMgb2NjdXJyaW5nIGF0Cit0aGUgc2FtZSBtb21lbnQgaW4gdGltZS4gSW4gdGhlIGZvbGxvd2luZywgdGhlIHRlcm0gImV2ZW50IiByZWZlcnMgdG8gYSBzaW5nbGUKK2lucHV0IGV2ZW50IGVuY29tcGFzc2luZyBhIHR5cGUsIGNvZGUsIGFuZCB2YWx1ZS4KKworVGhlIGlucHV0IHByb3RvY29sIGlzIGEgc3RhdGVmdWwgcHJvdG9jb2wuIEV2ZW50cyBhcmUgZW1pdHRlZCBvbmx5IHdoZW4gdmFsdWVzCitvZiBldmVudCBjb2RlcyBoYXZlIGNoYW5nZWQuIEhvd2V2ZXIsIHRoZSBzdGF0ZSBpcyBtYWludGFpbmVkIHdpdGhpbiB0aGUgTGludXgKK2lucHV0IHN1YnN5c3RlbTsgZHJpdmVycyBkbyBub3QgbmVlZCB0byBtYWludGFpbiB0aGUgc3RhdGUgYW5kIG1heSBhdHRlbXB0IHRvCitlbWl0IHVuY2hhbmdlZCB2YWx1ZXMgd2l0aG91dCBoYXJtLiBVc2Vyc3BhY2UgbWF5IG9idGFpbiB0aGUgY3VycmVudCBzdGF0ZSBvZgorZXZlbnQgY29kZSB2YWx1ZXMgdXNpbmcgdGhlIEVWSU9DRyogaW9jdGxzIGRlZmluZWQgaW4gbGludXgvaW5wdXQuaC4gVGhlIGV2ZW50CityZXBvcnRzIHN1cHBvcnRlZCBieSBhIGRldmljZSBhcmUgYWxzbyBwcm92aWRlZCBieSBzeXNmcyBpbgorY2xhc3MvaW5wdXQvZXZlbnQqL2RldmljZS9jYXBhYmlsaXRpZXMvLCBhbmQgdGhlIHByb3BlcnRpZXMgb2YgYSBkZXZpY2UgYXJlCitwcm92aWRlZCBpbiBjbGFzcy9pbnB1dC9ldmVudCovZGV2aWNlL3Byb3BlcnRpZXMuCisKK1R5cGVzOgorPT09PT09PT09PQorVHlwZXMgYXJlIGdyb3VwaW5ncyBvZiBjb2RlcyB1bmRlciBhIGxvZ2ljYWwgaW5wdXQgY29uc3RydWN0LiBFYWNoIHR5cGUgaGFzIGEKK3NldCBvZiBhcHBsaWNhYmxlIGNvZGVzIHRvIGJlIHVzZWQgaW4gZ2VuZXJhdGluZyBldmVudHMuIFNlZSB0aGUgQ29kZXMgc2VjdGlvbgorZm9yIGRldGFpbHMgb24gdmFsaWQgY29kZXMgZm9yIGVhY2ggdHlwZS4KKworKiBFVl9TWU46CisgIC0gVXNlZCBhcyBtYXJrZXJzIHRvIHNlcGFyYXRlIGV2ZW50cy4gRXZlbnRzIG1heSBiZSBzZXBhcmF0ZWQgaW4gdGltZSBvciBpbgorICAgIHNwYWNlLCBzdWNoIGFzIHdpdGggdGhlIG11bHRpdG91Y2ggcHJvdG9jb2wuCisKKyogRVZfS0VZOgorICAtIFVzZWQgdG8gZGVzY3JpYmUgc3RhdGUgY2hhbmdlcyBvZiBrZXlib2FyZHMsIGJ1dHRvbnMsIG9yIG90aGVyIGtleS1saWtlCisgICAgZGV2aWNlcy4KKworKiBFVl9SRUw6CisgIC0gVXNlZCB0byBkZXNjcmliZSByZWxhdGl2ZSBheGlzIHZhbHVlIGNoYW5nZXMsIGUuZy4gbW92aW5nIHRoZSBtb3VzZSA1IHVuaXRzCisgICAgdG8gdGhlIGxlZnQuCisKKyogRVZfQUJTOgorICAtIFVzZWQgdG8gZGVzY3JpYmUgYWJzb2x1dGUgYXhpcyB2YWx1ZSBjaGFuZ2VzLCBlLmcuIGRlc2NyaWJpbmcgdGhlCisgICAgY29vcmRpbmF0ZXMgb2YgYSB0b3VjaCBvbiBhIHRvdWNoc2NyZWVuLgorCisqIEVWX01TQzoKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIG1pc2NlbGxhbmVvdXMgaW5wdXQgZGF0YSB0aGF0IGRvIG5vdCBmaXQgaW50byBvdGhlciB0eXBlcy4KKworKiBFVl9TVzoKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIGJpbmFyeSBzdGF0ZSBpbnB1dCBzd2l0Y2hlcy4KKworKiBFVl9MRUQ6CisgIC0gVXNlZCB0byB0dXJuIExFRHMgb24gZGV2aWNlcyBvbiBhbmQgb2ZmLgorCisqIEVWX1NORDoKKyAgLSBVc2VkIHRvIG91dHB1dCBzb3VuZCB0byBkZXZpY2VzLgorCisqIEVWX1JFUDoKKyAgLSBVc2VkIGZvciBhdXRvcmVwZWF0aW5nIGRldmljZXMuCisKKyogRVZfRkY6CisgIC0gVXNlZCB0byBzZW5kIGZvcmNlIGZlZWRiYWNrIGNvbW1hbmRzIHRvIGFuIGlucHV0IGRldmljZS4KKworKiBFVl9QV1I6CisgIC0gQSBzcGVjaWFsIHR5cGUgZm9yIHBvd2VyIGJ1dHRvbiBhbmQgc3dpdGNoIGlucHV0LgorCisqIEVWX0ZGX1NUQVRVUzoKKyAgLSBVc2VkIHRvIHJlY2VpdmUgZm9yY2UgZmVlZGJhY2sgZGV2aWNlIHN0YXR1cy4KKworQ29kZXM6Cis9PT09PT09PT09CitDb2RlcyBkZWZpbmUgdGhlIHByZWNpc2UgdHlwZSBvZiBldmVudC4KKworRVZfU1lOOgorLS0tLS0tLS0tLQorRVZfU1lOIGV2ZW50IHZhbHVlcyBhcmUgdW5kZWZpbmVkLiBUaGVpciB1c2FnZSBpcyBkZWZpbmVkIG9ubHkgYnkgd2hlbiB0aGV5IGFyZQorc2VudCBpbiB0aGUgZXZkZXYgZXZlbnQgc3RyZWFtLgorCisqIFNZTl9SRVBPUlQ6CisgIC0gVXNlZCB0byBzeW5jaHJvbml6ZSBhbmQgc2VwYXJhdGUgZXZlbnRzIGludG8gcGFja2V0cyBvZiBpbnB1dCBkYXRhIGNoYW5nZXMKKyAgICBvY2N1cnJpbmcgYXQgdGhlIHNhbWUgbW9tZW50IGluIHRpbWUuIEZvciBleGFtcGxlLCBtb3Rpb24gb2YgYSBtb3VzZSBtYXkgc2V0CisgICAgdGhlIFJFTF9YIGFuZCBSRUxfWSB2YWx1ZXMgZm9yIG9uZSBtb3Rpb24sIHRoZW4gZW1pdCBhIFNZTl9SRVBPUlQuIFRoZSBuZXh0CisgICAgbW90aW9uIHdpbGwgZW1pdCBtb3JlIFJFTF9YIGFuZCBSRUxfWSB2YWx1ZXMgYW5kIHNlbmQgYW5vdGhlciBTWU5fUkVQT1JULgorCisqIFNZTl9DT05GSUc6CisgIC0gVEJECisKKyogU1lOX01UX1JFUE9SVDoKKyAgLSBVc2VkIHRvIHN5bmNocm9uaXplIGFuZCBzZXBhcmF0ZSB0b3VjaCBldmVudHMuIFNlZSB0aGUKKyAgICBtdWx0aS10b3VjaC1wcm90b2NvbC50eHQgZG9jdW1lbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyogU1lOX0RST1BQRUQ6CisgIC0gVXNlZCB0byBpbmRpY2F0ZSBidWZmZXIgb3ZlcnJ1biBpbiB0aGUgZXZkZXYgY2xpZW50J3MgZXZlbnQgcXVldWUuCisgICAgQ2xpZW50IHNob3VsZCBpZ25vcmUgYWxsIGV2ZW50cyB1cCB0byBhbmQgaW5jbHVkaW5nIG5leHQgU1lOX1JFUE9SVAorICAgIGV2ZW50IGFuZCBxdWVyeSB0aGUgZGV2aWNlICh1c2luZyBFVklPQ0cqIGlvY3RscykgdG8gb2J0YWluIGl0cworICAgIGN1cnJlbnQgc3RhdGUuCisKK0VWX0tFWToKKy0tLS0tLS0tLS0KK0VWX0tFWSBldmVudHMgdGFrZSB0aGUgZm9ybSBLRVlfPG5hbWU+IG9yIEJUTl88bmFtZT4uIEZvciBleGFtcGxlLCBLRVlfQSBpcyB1c2VkCit0byByZXByZXNlbnQgdGhlICdBJyBrZXkgb24gYSBrZXlib2FyZC4gV2hlbiBhIGtleSBpcyBkZXByZXNzZWQsIGFuIGV2ZW50IHdpdGgKK3RoZSBrZXkncyBjb2RlIGlzIGVtaXR0ZWQgd2l0aCB2YWx1ZSAxLiBXaGVuIHRoZSBrZXkgaXMgcmVsZWFzZWQsIGFuIGV2ZW50IGlzCitlbWl0dGVkIHdpdGggdmFsdWUgMC4gU29tZSBoYXJkd2FyZSBzZW5kIGV2ZW50cyB3aGVuIGEga2V5IGlzIHJlcGVhdGVkLiBUaGVzZQorZXZlbnRzIGhhdmUgYSB2YWx1ZSBvZiAyLiBJbiBnZW5lcmFsLCBLRVlfPG5hbWU+IGlzIHVzZWQgZm9yIGtleWJvYXJkIGtleXMsIGFuZAorQlROXzxuYW1lPiBpcyB1c2VkIGZvciBvdGhlciB0eXBlcyBvZiBtb21lbnRhcnkgc3dpdGNoIGV2ZW50cy4KKworQSBmZXcgRVZfS0VZIGNvZGVzIGhhdmUgc3BlY2lhbCBtZWFuaW5nczoKKworKiBCVE5fVE9PTF88bmFtZT46CisgIC0gVGhlc2UgY29kZXMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBpbnB1dCB0cmFja3BhZHMsIHRhYmxldHMsIGFuZAorICAgIHRvdWNoc2NyZWVucy4gVGhlc2UgZGV2aWNlcyBtYXkgYmUgdXNlZCB3aXRoIGZpbmdlcnMsIHBlbnMsIG9yIG90aGVyIHRvb2xzLgorICAgIFdoZW4gYW4gZXZlbnQgb2NjdXJzIGFuZCBhIHRvb2wgaXMgdXNlZCwgdGhlIGNvcnJlc3BvbmRpbmcgQlROX1RPT0xfPG5hbWU+CisgICAgY29kZSBzaG91bGQgYmUgc2V0IHRvIGEgdmFsdWUgb2YgMS4gV2hlbiB0aGUgdG9vbCBpcyBubyBsb25nZXIgaW50ZXJhY3RpbmcKKyAgICB3aXRoIHRoZSBpbnB1dCBkZXZpY2UsIHRoZSBCVE5fVE9PTF88bmFtZT4gY29kZSBzaG91bGQgYmUgcmVzZXQgdG8gMC4gQWxsCisgICAgdHJhY2twYWRzLCB0YWJsZXRzLCBhbmQgdG91Y2hzY3JlZW5zIHNob3VsZCB1c2UgYXQgbGVhc3Qgb25lIEJUTl9UT09MXzxuYW1lPgorICAgIGNvZGUgd2hlbiBldmVudHMgYXJlIGdlbmVyYXRlZC4KKworKiBCVE5fVE9VQ0g6CisgICAgQlROX1RPVUNIIGlzIHVzZWQgZm9yIHRvdWNoIGNvbnRhY3QuIFdoaWxlIGFuIGlucHV0IHRvb2wgaXMgZGV0ZXJtaW5lZCB0byBiZQorICAgIHdpdGhpbiBtZWFuaW5nZnVsIHBoeXNpY2FsIGNvbnRhY3QsIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IG11c3QgYmUgc2V0CisgICAgdG8gMS4gTWVhbmluZ2Z1bCBwaHlzaWNhbCBjb250YWN0IG1heSBtZWFuIGFueSBjb250YWN0LCBvciBpdCBtYXkgbWVhbgorICAgIGNvbnRhY3QgY29uZGl0aW9uZWQgYnkgYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUsIGEKKyAgICB0b3VjaHBhZCBtYXkgc2V0IHRoZSB2YWx1ZSB0byAxIG9ubHkgd2hlbiB0aGUgdG91Y2ggcHJlc3N1cmUgcmlzZXMgYWJvdmUgYQorICAgIGNlcnRhaW4gdmFsdWUuIEJUTl9UT1VDSCBtYXkgYmUgY29tYmluZWQgd2l0aCBCVE5fVE9PTF88bmFtZT4gY29kZXMuIEZvcgorICAgIGV4YW1wbGUsIGEgcGVuIHRhYmxldCBtYXkgc2V0IEJUTl9UT09MX1BFTiB0byAxIGFuZCBCVE5fVE9VQ0ggdG8gMCB3aGlsZSB0aGUKKyAgICBwZW4gaXMgaG92ZXJpbmcgb3ZlciBidXQgbm90IHRvdWNoaW5nIHRoZSB0YWJsZXQgc3VyZmFjZS4KKworTm90ZTogRm9yIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIG9mIHRoZSBsZWdhY3kgbW91c2VkZXYgZW11bGF0aW9uIGRyaXZlciwKK0JUTl9UT1VDSCBtdXN0IGJlIHRoZSBmaXJzdCBldmRldiBjb2RlIGVtaXR0ZWQgaW4gYSBzeW5jaHJvbml6YXRpb24gZnJhbWUuCisKK05vdGU6IEhpc3RvcmljYWxseSBhIHRvdWNoIGRldmljZSB3aXRoIEJUTl9UT09MX0ZJTkdFUiBhbmQgQlROX1RPVUNIIHdhcworaW50ZXJwcmV0ZWQgYXMgYSB0b3VjaHBhZCBieSB1c2Vyc3BhY2UsIHdoaWxlIGEgc2ltaWxhciBkZXZpY2Ugd2l0aG91dAorQlROX1RPT0xfRklOR0VSIHdhcyBpbnRlcnByZXRlZCBhcyBhIHRvdWNoc2NyZWVuLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK3dpdGggY3VycmVudCB1c2Vyc3BhY2UgaXQgaXMgcmVjb21tZW5kZWQgdG8gZm9sbG93IHRoaXMgZGlzdGluY3Rpb24uIEluIHRoZQorZnV0dXJlLCB0aGlzIGRpc3RpbmN0aW9uIHdpbGwgYmUgZGVwcmVjYXRlZCBhbmQgdGhlIGRldmljZSBwcm9wZXJ0aWVzIGlvY3RsCitFVklPQ0dQUk9QLCBkZWZpbmVkIGluIGxpbnV4L2lucHV0LmgsIHdpbGwgYmUgdXNlZCB0byBjb252ZXkgdGhlIGRldmljZSB0eXBlLgorCisqIEJUTl9UT09MX0ZJTkdFUiwgQlROX1RPT0xfRE9VQkxFVEFQLCBCVE5fVE9PTF9UUklQTEVUQVAsIEJUTl9UT09MX1FVQURUQVA6CisgIC0gVGhlc2UgY29kZXMgZGVub3RlIG9uZSwgdHdvLCB0aHJlZSwgYW5kIGZvdXIgZmluZ2VyIGludGVyYWN0aW9uIG9uIGEKKyAgICB0cmFja3BhZCBvciB0b3VjaHNjcmVlbi4gRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIHVzZXMgdHdvIGZpbmdlcnMgYW5kIG1vdmVzCisgICAgdGhlbSBvbiB0aGUgdG91Y2hwYWQgaW4gYW4gZWZmb3J0IHRvIHNjcm9sbCBjb250ZW50IG9uIHNjcmVlbiwKKyAgICBCVE5fVE9PTF9ET1VCTEVUQVAgc2hvdWxkIGJlIHNldCB0byB2YWx1ZSAxIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1vdGlvbi4KKyAgICBOb3RlIHRoYXQgYWxsIEJUTl9UT09MXzxuYW1lPiBjb2RlcyBhbmQgdGhlIEJUTl9UT1VDSCBjb2RlIGFyZSBvcnRob2dvbmFsIGluCisgICAgcHVycG9zZS4gQSB0cmFja3BhZCBldmVudCBnZW5lcmF0ZWQgYnkgZmluZ2VyIHRvdWNoZXMgc2hvdWxkIGdlbmVyYXRlIGV2ZW50cworICAgIGZvciBvbmUgY29kZSBmcm9tIGVhY2ggZ3JvdXAuIEF0IG1vc3Qgb25seSBvbmUgb2YgdGhlc2UgQlROX1RPT0xfPG5hbWU+CisgICAgY29kZXMgc2hvdWxkIGhhdmUgYSB2YWx1ZSBvZiAxIGR1cmluZyBhbnkgc3luY2hyb25pemF0aW9uIGZyYW1lLgorCitOb3RlOiBIaXN0b3JpY2FsbHkgc29tZSBkcml2ZXJzIGVtaXR0ZWQgbXVsdGlwbGUgb2YgdGhlIGZpbmdlciBjb3VudCBjb2RlcyB3aXRoCithIHZhbHVlIG9mIDEgaW4gdGhlIHNhbWUgc3luY2hyb25pemF0aW9uIGZyYW1lLiBUaGlzIHVzYWdlIGlzIGRlcHJlY2F0ZWQuCisKK05vdGU6IEluIG11bHRpdG91Y2ggZHJpdmVycywgdGhlIGlucHV0X210X3JlcG9ydF9maW5nZXJfY291bnQoKSBmdW5jdGlvbiBzaG91bGQKK2JlIHVzZWQgdG8gZW1pdCB0aGVzZSBjb2Rlcy4gUGxlYXNlIHNlZSBtdWx0aS10b3VjaC1wcm90b2NvbC50eHQgZm9yIGRldGFpbHMuCisKK0VWX1JFTDoKKy0tLS0tLS0tLS0KK0VWX1JFTCBldmVudHMgZGVzY3JpYmUgcmVsYXRpdmUgY2hhbmdlcyBpbiBhIHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgYSBtb3VzZSBtYXkKK21vdmUgdG8gdGhlIGxlZnQgYnkgYSBjZXJ0YWluIG51bWJlciBvZiB1bml0cywgYnV0IGl0cyBhYnNvbHV0ZSBwb3NpdGlvbiBpbgorc3BhY2UgaXMgdW5rbm93bi4gSWYgdGhlIGFic29sdXRlIHBvc2l0aW9uIGlzIGtub3duLCBFVl9BQlMgY29kZXMgc2hvdWxkIGJlIHVzZWQKK2luc3RlYWQgb2YgRVZfUkVMIGNvZGVzLgorCitBIGZldyBFVl9SRUwgY29kZXMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOgorCisqIFJFTF9XSEVFTCwgUkVMX0hXSEVFTDoKKyAgLSBUaGVzZSBjb2RlcyBhcmUgdXNlZCBmb3IgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2Nyb2xsIHdoZWVscywKKyAgICByZXNwZWN0aXZlbHkuCisKK0VWX0FCUzoKKy0tLS0tLS0tLS0KK0VWX0FCUyBldmVudHMgZGVzY3JpYmUgYWJzb2x1dGUgY2hhbmdlcyBpbiBhIHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgYSB0b3VjaHBhZAorbWF5IGVtaXQgY29vcmRpbmF0ZXMgZm9yIGEgdG91Y2ggbG9jYXRpb24uCisKK0EgZmV3IEVWX0FCUyBjb2RlcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6CisKKyogQUJTX0RJU1RBTkNFOgorICAtIFVzZWQgdG8gZGVzY3JpYmUgdGhlIGRpc3RhbmNlIG9mIGEgdG9vbCBmcm9tIGFuIGludGVyYWN0aW9uIHN1cmZhY2UuIFRoaXMKKyAgICBldmVudCBzaG91bGQgb25seSBiZSBlbWl0dGVkIHdoaWxlIHRoZSB0b29sIGlzIGhvdmVyaW5nLCBtZWFuaW5nIGluIGNsb3NlCisgICAgcHJveGltaXR5IG9mIHRoZSBkZXZpY2UgYW5kIHdoaWxlIHRoZSB2YWx1ZSBvZiB0aGUgQlROX1RPVUNIIGNvZGUgaXMgMC4gSWYKKyAgICB0aGUgaW5wdXQgZGV2aWNlIG1heSBiZSB1c2VkIGZyZWVseSBpbiB0aHJlZSBkaW1lbnNpb25zLCBjb25zaWRlciBBQlNfWgorICAgIGluc3RlYWQuCisKKyogQUJTX01UXzxuYW1lPjoKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIG11bHRpdG91Y2ggaW5wdXQgZXZlbnRzLiBQbGVhc2Ugc2VlCisgICAgbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0IGZvciBkZXRhaWxzLgorCitFVl9TVzoKKy0tLS0tLS0tLS0KK0VWX1NXIGV2ZW50cyBkZXNjcmliZSBzdGF0ZWZ1bCBiaW5hcnkgc3dpdGNoZXMuIEZvciBleGFtcGxlLCB0aGUgU1dfTElEIGNvZGUgaXMKK3VzZWQgdG8gZGVub3RlIHdoZW4gYSBsYXB0b3AgbGlkIGlzIGNsb3NlZC4KKworVXBvbiBiaW5kaW5nIHRvIGEgZGV2aWNlIG9yIHJlc3VtaW5nIGZyb20gc3VzcGVuZCwgYSBkcml2ZXIgbXVzdCByZXBvcnQKK3RoZSBjdXJyZW50IHN3aXRjaCBzdGF0ZS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRldmljZSwga2VybmVsLCBhbmQgdXNlcnNwYWNlCitzdGF0ZSBpcyBpbiBzeW5jLgorCitVcG9uIHJlc3VtZSwgaWYgdGhlIHN3aXRjaCBzdGF0ZSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUgc3VzcGVuZCwgdGhlbiB0aGUgaW5wdXQKK3N1YnN5c3RlbSB3aWxsIGZpbHRlciBvdXQgdGhlIGR1cGxpY2F0ZSBzd2l0Y2ggc3RhdGUgcmVwb3J0cy4gVGhlIGRyaXZlciBkb2VzCitub3QgbmVlZCB0byBrZWVwIHRoZSBzdGF0ZSBvZiB0aGUgc3dpdGNoIGF0IGFueSB0aW1lLgorCitFVl9NU0M6CistLS0tLS0tLS0tCitFVl9NU0MgZXZlbnRzIGFyZSB1c2VkIGZvciBpbnB1dCBhbmQgb3V0cHV0IGV2ZW50cyB0aGF0IGRvIG5vdCBmYWxsIHVuZGVyIG90aGVyCitjYXRlZ29yaWVzLgorCitFVl9MRUQ6CistLS0tLS0tLS0tCitFVl9MRUQgZXZlbnRzIGFyZSB1c2VkIGZvciBpbnB1dCBhbmQgb3V0cHV0IHRvIHNldCBhbmQgcXVlcnkgdGhlIHN0YXRlIG9mCit2YXJpb3VzIExFRHMgb24gZGV2aWNlcy4KKworRVZfUkVQOgorLS0tLS0tLS0tLQorRVZfUkVQIGV2ZW50cyBhcmUgdXNlZCBmb3Igc3BlY2lmeWluZyBhdXRvcmVwZWF0aW5nIGV2ZW50cy4KKworRVZfU05EOgorLS0tLS0tLS0tLQorRVZfU05EIGV2ZW50cyBhcmUgdXNlZCBmb3Igc2VuZGluZyBzb3VuZCBjb21tYW5kcyB0byBzaW1wbGUgc291bmQgb3V0cHV0CitkZXZpY2VzLgorCitFVl9GRjoKKy0tLS0tLS0tLS0KK0VWX0ZGIGV2ZW50cyBhcmUgdXNlZCB0byBpbml0aWFsaXplIGEgZm9yY2UgZmVlZGJhY2sgY2FwYWJsZSBkZXZpY2UgYW5kIHRvIGNhdXNlCitzdWNoIGRldmljZSB0byBmZWVkYmFjay4KKworRVZfUFdSOgorLS0tLS0tLS0tLQorRVZfUFdSIGV2ZW50cyBhcmUgYSBzcGVjaWFsIHR5cGUgb2YgZXZlbnQgdXNlZCBzcGVjaWZpY2FsbHkgZm9yIHBvd2VyCittYW5nZW1lbnQuIEl0cyB1c2FnZSBpcyBub3Qgd2VsbCBkZWZpbmVkLiBUbyBiZSBhZGRyZXNzZWQgbGF0ZXIuCisKK0d1aWRlbGluZXM6Cis9PT09PT09PT09CitUaGUgZ3VpZGVsaW5lcyBiZWxvdyBlbnN1cmUgcHJvcGVyIHNpbmdsZS10b3VjaCBhbmQgbXVsdGktZmluZ2VyIGZ1bmN0aW9uYWxpdHkuCitGb3IgbXVsdGktdG91Y2ggZnVuY3Rpb25hbGl0eSwgc2VlIHRoZSBtdWx0aS10b3VjaC1wcm90b2NvbC50eHQgZG9jdW1lbnQgZm9yCittb3JlIGluZm9ybWF0aW9uLgorCitNaWNlOgorLS0tLS0tLS0tLQorUkVMX3tYLFl9IG11c3QgYmUgcmVwb3J0ZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMuIEJUTl9MRUZUIG11c3QgYmUgdXNlZCB0byByZXBvcnQKK3RoZSBwcmltYXJ5IGJ1dHRvbiBwcmVzcy4gQlROX3tNSURETEUsUklHSFQsNCw1LGV0Yy59IHNob3VsZCBiZSB1c2VkIHRvIHJlcG9ydAorZnVydGhlciBidXR0b25zIG9mIHRoZSBkZXZpY2UuIFJFTF9XSEVFTCBhbmQgUkVMX0hXSEVFTCBzaG91bGQgYmUgdXNlZCB0byByZXBvcnQKK3Njcm9sbCB3aGVlbCBldmVudHMgd2hlcmUgYXZhaWxhYmxlLgorCitUb3VjaHNjcmVlbnM6CistLS0tLS0tLS0tCitBQlNfe1gsWX0gbXVzdCBiZSByZXBvcnRlZCB3aXRoIHRoZSBsb2NhdGlvbiBvZiB0aGUgdG91Y2guIEJUTl9UT1VDSCBtdXN0IGJlCit1c2VkIHRvIHJlcG9ydCB3aGVuIGEgdG91Y2ggaXMgYWN0aXZlIG9uIHRoZSBzY3JlZW4uCitCVE5fe01PVVNFLExFRlQsTUlERExFLFJJR0hUfSBtdXN0IG5vdCBiZSByZXBvcnRlZCBhcyB0aGUgcmVzdWx0IG9mIHRvdWNoCitjb250YWN0LiBCVE5fVE9PTF88bmFtZT4gZXZlbnRzIHNob3VsZCBiZSByZXBvcnRlZCB3aGVyZSBwb3NzaWJsZS4KKworVHJhY2twYWRzOgorLS0tLS0tLS0tLQorTGVnYWN5IHRyYWNrcGFkcyB0aGF0IG9ubHkgcHJvdmlkZSByZWxhdGl2ZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBtdXN0IHJlcG9ydAorZXZlbnRzIGxpa2UgbWljZSBkZXNjcmliZWQgYWJvdmUuCisKK1RyYWNrcGFkcyB0aGF0IHByb3ZpZGUgYWJzb2x1dGUgdG91Y2ggcG9zaXRpb24gbXVzdCByZXBvcnQgQUJTX3tYLFl9IGZvciB0aGUKK2xvY2F0aW9uIG9mIHRoZSB0b3VjaC4gQlROX1RPVUNIIHNob3VsZCBiZSB1c2VkIHRvIHJlcG9ydCB3aGVuIGEgdG91Y2ggaXMgYWN0aXZlCitvbiB0aGUgdHJhY2twYWQuIFdoZXJlIG11bHRpLWZpbmdlciBzdXBwb3J0IGlzIGF2YWlsYWJsZSwgQlROX1RPT0xfPG5hbWU+IHNob3VsZAorYmUgdXNlZCB0byByZXBvcnQgdGhlIG51bWJlciBvZiB0b3VjaGVzIGFjdGl2ZSBvbiB0aGUgdHJhY2twYWQuCisKK1RhYmxldHM6CistLS0tLS0tLS0tCitCVE5fVE9PTF88bmFtZT4gZXZlbnRzIG11c3QgYmUgcmVwb3J0ZWQgd2hlbiBhIHN0eWx1cyBvciBvdGhlciB0b29sIGlzIGFjdGl2ZSBvbgordGhlIHRhYmxldC4gQUJTX3tYLFl9IG11c3QgYmUgcmVwb3J0ZWQgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIHRvb2wuIEJUTl9UT1VDSAorc2hvdWxkIGJlIHVzZWQgdG8gcmVwb3J0IHdoZW4gdGhlIHRvb2wgaXMgaW4gY29udGFjdCB3aXRoIHRoZSB0YWJsZXQuCitCVE5fe1NUWUxVUyxTVFlMVVMyfSBzaG91bGQgYmUgdXNlZCB0byByZXBvcnQgYnV0dG9ucyBvbiB0aGUgdG9vbCBpdHNlbGYuIEFueQorYnV0dG9uIG1heSBiZSB1c2VkIGZvciBidXR0b25zIG9uIHRoZSB0YWJsZXQgZXhjZXB0IEJUTl97TU9VU0UsTEVGVH0uCitCVE5fezAsMSwyLGV0Y30gYXJlIGdvb2QgZ2VuZXJpYyBjb2RlcyBmb3IgdW5sYWJlbGVkIGJ1dHRvbnMuIERvIG5vdCB1c2UKK21lYW5pbmdmdWwgYnV0dG9ucywgbGlrZSBCVE5fRk9SV0FSRCwgdW5sZXNzIHRoZSBidXR0b24gaXMgbGFiZWxlZCBmb3IgdGhhdAorcHVycG9zZSBvbiB0aGUgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKaW5kZXggMWM4NTZmMy4uNTY4NzBjNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0CkBAIC0yNzIsNyArMjcyLDcgQEAKIAogICBBbHNvLCB0aGUgY29ubmVjdGlvbiBpcyBhIGJpdCBtb3JlIGNvbXBsZXguIFlvdSdsbCBuZWVkIGEgYnVuY2ggb2YgZGlvZGVzLAogYW5kIG9uZSBwdWxsdXAgcmVzaXN0b3IuIEZpcnN0LCB5b3UgY29ubmVjdCB0aGUgRGlyZWN0aW9ucyBhbmQgdGhlIGJ1dHRvbgotdGhlIHNhbWUgYXMgZm9yIGRiOSwgaG93ZXZlciB3aXRoIHRoZSBkaW9kZXMgaW5iZXR3ZWVuLgordGhlIHNhbWUgYXMgZm9yIGRiOSwgaG93ZXZlciB3aXRoIHRoZSBkaW9kZXMgYmV0d2Vlbi4KIAogCSAgICBEaW9kZXMKIChwaW4gMikgLS0tLS18PHwtLS0tPiBVcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9yb3RhcnktZW5jb2Rlci50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3JvdGFyeS1lbmNvZGVyLnR4dAppbmRleCA4YjQxMjlkLi45NDNlOGY2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L3JvdGFyeS1lbmNvZGVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3JvdGFyeS1lbmNvZGVyLnR4dApAQCAtNDYsNyArNDYsNyBAQAogCiBkKSBGYWxsaW5nIGVkZ2Ugb24gY2hhbm5lbCBCLCBjaGFubmVsIEEgaW4gbG93IHN0YXRlCiAJUGFya2luZyBwb3NpdGlvbi4gSWYgdGhlIGVuY29kZXIgZW50ZXJzIHRoaXMgc3RhdGUsIGEgZnVsbCB0cmFuc2l0aW9uCi0Jc2hvdWxkIGhhdmUgaGFwcGVuZCwgdW5sZXNzIGl0IGZsaXBwZWQgYmFjayBvbiBoYWxmIHRoZSB3YXkuIFRoZQorCXNob3VsZCBoYXZlIGhhcHBlbmVkLCB1bmxlc3MgaXQgZmxpcHBlZCBiYWNrIG9uIGhhbGYgdGhlIHdheS4gVGhlCiAJJ2FybWVkJyBzdGF0ZSB0ZWxscyB1cyBhYm91dCB0aGF0LgogCiAyLiBQbGF0Zm9ybSByZXF1aXJlbWVudHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvd2Fsa2VyYTA3MDEudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC93YWxrZXJhMDcwMS50eHQKaW5kZXggOGY0Mjg5ZS4uNTYxMzg1ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC93YWxrZXJhMDcwMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC93YWxrZXJhMDcwMS50eHQKQEAgLTc3LDcgKzc3LDcgQEAKIAogMjQgYmluK29jdCB2YWx1ZXMgKyAxIGJpbiB2YWx1ZSA9IDI0KjQrMSBiaXRzICA9IDk3IGJpdHMKIAotKFdhcm5pbmcsIHB1bHNlcyBvbiBBQ0sgYXIgaW52ZXJ0ZWQgYnkgdHJhbnNpc3RvciwgaXJxIGlzIHJpc2VkIHVwIG9uIHN5bmMKKyhXYXJuaW5nLCBwdWxzZXMgb24gQUNLIGFyZSBpbnZlcnRlZCBieSB0cmFuc2lzdG9yLCBpcnEgaXMgcmFpc2VkIHVwIG9uIHN5bmMKIHRvIGJpbiBjaGFuZ2Ugb3Igb2N0YWwgdmFsdWUgdG8gYmluIGNoYW5nZSkuCiAKIEJpbmFyeSBkYXRhIHJlcHJlc2VudGF0aW9uczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXJxZmxhZ3MtdHJhY2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL2lycWZsYWdzLXRyYWNpbmcudHh0CmluZGV4IDZhNDQ0ODcuLjY3YWE3MWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaXJxZmxhZ3MtdHJhY2luZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pcnFmbGFncy10cmFjaW5nLnR4dApAQCAtNTMsNSArNTMsNSBAQAogdHVybiBpdHNlbGYgb2ZmLiBJLmUuIHRoZSBsb2NrIHZhbGlkYXRvciB3aWxsIHN0aWxsIGJlIHJlbGlhYmxlLiBUaGVyZQogc2hvdWxkIGJlIG5vIGNyYXNoZXMgZHVlIHRvIGlycS10cmFjaW5nIGJ1Z3MuIChleGNlcHQgaWYgdGhlIGFzc2VtYmx5CiBjaGFuZ2VzIGJyZWFrIG90aGVyIGNvZGUgYnkgbW9kaWZ5aW5nIGNvbmRpdGlvbnMgb3IgcmVnaXN0ZXJzIHRoYXQKLXNob3VsZG50IGJlKQorc2hvdWxkbid0IGJlKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLkNBUEkgYi9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLkNBUEkKaW5kZXggMzA5ZWI1ZS4uMTY4OGI1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5DQVBJCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuQ0FQSQpAQCAtMjQwLDcgKzI0MCw3IEBACiBtZXNzYWdlcyBiZXR3ZWVuIHRoZWlyIHRyYW5zcG9ydCBlbmNvZGluZyBkZXNjcmliZWQgaW4gdGhlIENBUEkgMi4wIHN0YW5kYXJkCiBhbmQgdGhlaXIgX2Ntc2cgc3RydWN0dXJlIHJlcHJlc2VudGF0aW9uLiBOb3RlIHRoYXQgY2FwaV9jbXNnMm1lc3NhZ2UoKSBkb2VzCiBub3Qga25vdyBvciBjaGVjayB0aGUgc2l6ZSBvZiBpdHMgZGVzdGluYXRpb24gYnVmZmVyLiBUaGUgY2FsbGVyIG11c3QgbWFrZQotc3VyZSBpdCBpcyBiaWcgZW5vdWdoIHRvIGFjY29tb2RhdGUgdGhlIHJlc3VsdGluZyBDQVBJIG1lc3NhZ2UuCitzdXJlIGl0IGlzIGJpZyBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIHJlc3VsdGluZyBDQVBJIG1lc3NhZ2UuCiAKIAogNS4gTG93ZXIgTGF5ZXIgSW50ZXJmYWNlIEZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2J1aWxkLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQKaW5kZXggZjE0MzFkMC4uN2MyYTg5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2J1aWxkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rYnVpbGQudHh0CkBAIC0yNiwxMSArMjYsMTEgQEAKIAogQUZMQUdTX01PRFVMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFkZHRpb25hbCBtb2R1bGUgc3BlY2lmaWMgb3B0aW9ucyB0byB1c2UgZm9yICQoQVMpLgorQWRkaXRpb25hbCBtb2R1bGUgc3BlY2lmaWMgb3B0aW9ucyB0byB1c2UgZm9yICQoQVMpLgogCiBBRkxBR1NfS0VSTkVMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQWRkdGlvbmFsIG9wdGlvbnMgZm9yICQoQVMpIHdoZW4gdXNlZCBmb3IgYXNzZW1ibGVyCitBZGRpdGlvbmFsIG9wdGlvbnMgZm9yICQoQVMpIHdoZW4gdXNlZCBmb3IgYXNzZW1ibGVyCiBjb2RlIGZvciBjb2RlIHRoYXQgaXMgY29tcGlsZWQgYXMgYnVpbHQtaW4uCiAKIEtDRkxBR1MKQEAgLTM5LDEyICszOSwxMiBAQAogCiBDRkxBR1NfS0VSTkVMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQWRkdGlvbmFsIG9wdGlvbnMgZm9yICQoQ0MpIHdoZW4gdXNlZCB0byBjb21waWxlCitBZGRpdGlvbmFsIG9wdGlvbnMgZm9yICQoQ0MpIHdoZW4gdXNlZCB0byBjb21waWxlCiBjb2RlIHRoYXQgaXMgY29tcGlsZWQgYXMgYnVpbHQtaW4uCiAKIENGTEFHU19NT0RVTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BZGR0aW9uYWwgbW9kdWxlIHNwZWNpZmljIG9wdGlvbnMgdG8gdXNlIGZvciAkKENDKS4KK0FkZGl0aW9uYWwgbW9kdWxlIHNwZWNpZmljIG9wdGlvbnMgdG8gdXNlIGZvciAkKENDKS4KIAogTERGTEFHU19NT0RVTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGMzNTdhMzEuLmNjODVhOTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC02OTksNyArNjk5LDcgQEAKIAlla2dkYm9jPQlbWDg2LEtHREJdIEFsbG93IGVhcmx5IGtlcm5lbCBjb25zb2xlIGRlYnVnZ2luZwogCQkJZWtnZGJvYz1rYmQKIAotCQkJVGhpcyBpcyBkZXNnaW5lZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKwkJCVRoaXMgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCiAJCQl0aGUgYm9vdCBhcmd1bWVudDogZWFybHlwcmludGs9dmdhCiAKIAllZGQ9CQlbRUREXQpAQCAtMTgzMiwxNSArMTgzMiwxNyBAQAogCQkJCXBlcmZtb24gb24gSW50ZWwgQ1BVcyBpbnN0ZWFkIG9mIHRoZQogCQkJCUNQVSBzcGVjaWZpYyBldmVudCBzZXQuCiAKLQlvb3BzPXBhbmljCUFsd2F5cyBwYW5pYyBvbiBvb3BzZXMuIERlZmF1bHQgaXMgdG8ganVzdCBraWxsIHRoZSBwcm9jZXNzLAotCQkJYnV0IHRoZXJlIGlzIGEgc21hbGwgcHJvYmFiaWxpdHkgb2YgZGVhZGxvY2tpbmcgdGhlIG1hY2hpbmUuCisJb29wcz1wYW5pYwlBbHdheXMgcGFuaWMgb24gb29wc2VzLiBEZWZhdWx0IGlzIHRvIGp1c3Qga2lsbCB0aGUKKwkJCXByb2Nlc3MsIGJ1dCB0aGVyZSBpcyBhIHNtYWxsIHByb2JhYmlsaXR5IG9mCisJCQlkZWFkbG9ja2luZyB0aGUgbWFjaGluZS4KIAkJCVRoaXMgd2lsbCBhbHNvIGNhdXNlIHBhbmljcyBvbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnMuCiAJCQlVc2VmdWwgdG9nZXRoZXIgd2l0aCBwYW5pYz0zMCB0byB0cmlnZ2VyIGEgcmVib290LgogCiAJT1NTCQlbSFcsT1NTXQogCQkJU2VlIERvY3VtZW50YXRpb24vc291bmQvb3NzL29zcy1wYXJhbWV0ZXJzLnR4dAogCi0JcGFuaWM9CQlbS05MXSBLZXJuZWwgYmVoYXZpb3VyIG9uIHBhbmljCisJcGFuaWM9CQlbS05MXSBLZXJuZWwgYmVoYXZpb3VyIG9uIHBhbmljOiBkZWxheSA8dGltZW91dD4KKwkJCXNlY29uZHMgYmVmb3JlIHJlYm9vdGluZwogCQkJRm9ybWF0OiA8dGltZW91dD4KIAogCXBhcmtiZC5wb3J0PQlbSFddIFBhcmFsbGVsIHBvcnQgbnVtYmVyIHRoZSBrZXlib2FyZCBhZGFwdGVyIGlzCkBAIC0yMzQzLDYgKzIzNDUsNyBAQAogCiAJc29mdGxvY2t1cF9wYW5pYz0KIAkJCVtLTkxdIFNob3VsZCB0aGUgc29mdC1sb2NrdXAgZGV0ZWN0b3IgZ2VuZXJhdGUgcGFuaWNzLgorCQkJRm9ybWF0OiA8aW50ZWdlcj4KIAogCXNvbnlwaS4qPQlbSFddIFNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBDb250cm9sIERldmljZSBkcml2ZXIKIAkJCVNlZSBEb2N1bWVudGF0aW9uL3NvbnlwaS50eHQKQEAgLTI0NzUsOCArMjQ3OCw4IEBACiAJdG9wb2xvZ3k9CVtTMzkwXQogCQkJRm9ybWF0OiB7b2ZmIHwgb259CiAJCQlTcGVjaWZ5IGlmIHRoZSBrZXJuZWwgc2hvdWxkIG1ha2UgdXNlIG9mIHRoZSBjcHUKLQkJCXRvcG9sb2d5IGluZm9ybWF0aW9ucyBpZiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgdGhlc2UuCi0JCQlUaGUgc2NoZWR1bGVyIHdpbGwgbWFrZSB1c2Ugb2YgdGhlc2UgaW5mb3JtYXRpb25zIGFuZAorCQkJdG9wb2xvZ3kgaW5mb3JtYXRpb24gaWYgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIHRoaXMuCisJCQlUaGUgc2NoZWR1bGVyIHdpbGwgbWFrZSB1c2Ugb2YgdGhpcyBpbmZvcm1hdGlvbiBhbmQKIAkJCWUuZy4gYmFzZSBpdHMgcHJvY2VzcyBtaWdyYXRpb24gZGVjaXNpb25zIG9uIGl0LgogCQkJRGVmYXVsdCBpcyBvbi4KIApAQCAtMjUyOSw4ICsyNTMyLDcgQEAKIAkJCXJlcG9ydGVkIGVpdGhlci4KIAogCXVua25vd25fbm1pX3BhbmljCi0JCQlbWDg2XQotCQkJU2V0IHVua25vd25fbm1pX3BhbmljPTEgZWFybHkgb24gYm9vdC4KKwkJCVtYODZdIENhdXNlIHBhbmljIG9uIHVua25vd24gTk1JLgogCiAJdXNiY29yZS5hdXRvc3VzcGVuZD0KIAkJCVtVU0JdIFRoZSBhdXRvc3VzcGVuZCB0aW1lIGRlbGF5IChpbiBzZWNvbmRzKSB1c2VkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ttZW1sZWFrLnR4dCBiL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0CmluZGV4IDM0ZjY2MzguLjA5MGU2ZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0CisrKyBiL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0CkBAIC0xMSw2ICsxMSw3IEBACiByZXBvcnRlZCB2aWEgL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWsuIEEgc2ltaWxhciBtZXRob2QgaXMgdXNlZCBieSB0aGUKIFZhbGdyaW5kIHRvb2wgKG1lbWNoZWNrIC0tbGVhay1jaGVjaykgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVha3MgaW4KIHVzZXItc3BhY2UgYXBwbGljYXRpb25zLgorS21lbWxlYWsgaXMgc3VwcG9ydGVkIG9uIHg4NiwgYXJtLCBwb3dlcnBjLCBzcGFyYywgc2gsIG1pY3JvYmxhemUgYW5kIHRpbGUuCiAKIFVzYWdlCiAtLS0tLQpAQCAtMTc4LDUgKzE3OSw0IEBACiB0aGUgcG9pbnRlciBpcyBjYWxjdWxhdGVkIGJ5IG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgdXN1YWwgY29udGFpbmVyX29mCiBtYWNybyBvciB0aGUgcG9pbnRlciBpcyBzdG9yZWQgaW4gYSBsb2NhdGlvbiBub3Qgc2Nhbm5lZCBieSBrbWVtbGVhay4KIAotUGFnZSBhbGxvY2F0aW9ucyBhbmQgaW9yZW1hcCBhcmUgbm90IHRyYWNrZWQuIE9ubHkgdGhlIEFSTSBhbmQgeDg2Ci1hcmNoaXRlY3R1cmVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgorUGFnZSBhbGxvY2F0aW9ucyBhbmQgaW9yZW1hcCBhcmUgbm90IHRyYWNrZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9tbXUudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vbW11LnR4dAppbmRleCAxNDJjYzUxLi5mNDZhYTU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS9tbXUudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL21tdS50eHQKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgICAgICAgIGFuZCBmcmFtZWJ1ZmZlci1iYXNlZCBkaXNwbGF5cwogLSBmb290cHJpbnQ6ICAga2VlcCB0aGUgYW1vdW50IG9mIHBpbm5lZCBrZXJuZWwgbWVtb3J5IGxvdyAobW9zdCBtZW1vcnkKICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzaHJpbmthYmxlKQotLSByZWxpYWJsaXR5OiAgYXZvaWQgbXVsdGlwYWdlIG9yIEdGUF9BVE9NSUMgYWxsb2NhdGlvbnMKKy0gcmVsaWFiaWxpdHk6ICBhdm9pZCBtdWx0aXBhZ2Ugb3IgR0ZQX0FUT01JQyBhbGxvY2F0aW9ucwogCiBBY3JvbnltcwogPT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL3BwYy1wdi50eHQgYi9Eb2N1bWVudGF0aW9uL2t2bS9wcGMtcHYudHh0CmluZGV4IGE3ZjIyNDQuLjNhYjk2OWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va3ZtL3BwYy1wdi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rdm0vcHBjLXB2LnR4dApAQCAtMTM2LDcgKzEzNiw3IEBACiA9PT09PT09PT09PT09PT09PT09PQogCiBUaGUgImxkIiBhbmQgInN0ZCIgaW5zdHJ1Y3Rpb25zIGFyZSB0cmFuc29ybWVkIHRvICJsd3oiIGFuZCAic3R3IiBpbnN0cnVjdGlvbnMKLXJlc3BlY3RpdmVseSBvbiAzMiBiaXQgc3lzdGVtcyB3aXRoIGFuIGFkZGVkIG9mZnNldCBvZiA0IHRvIGFjY29tb2RhdGUgZm9yIGJpZworcmVzcGVjdGl2ZWx5IG9uIDMyIGJpdCBzeXN0ZW1zIHdpdGggYW4gYWRkZWQgb2Zmc2V0IG9mIDQgdG8gYWNjb21tb2RhdGUgZm9yIGJpZwogZW5kaWFubmVzcy4KIAogVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgbWFwcGluZyB0aGUgTGludXgga2VybmVsIHBlcmZvcm1zIHdoZW4gcnVubmluZyBhcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vdGltZWtlZXBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vdGltZWtlZXBpbmcudHh0CmluZGV4IDBjNTAzM2EuLmRmODk0NjM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS90aW1la2VlcGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rdm0vdGltZWtlZXBpbmcudHh0CkBAIC04MSw3ICs4MSw3IEBACiAgd2hlbiB0aGUgZ2F0ZSBpcyBoaWdoIChhbHdheXMgdHJ1ZSBmb3IgdGltZXJzIDAgYW5kIDEpLiAgV2hlbiB0aGUgY291bnQKICByZWFjaGVzIHplcm8sIHRoZSBvdXRwdXQgZ29lcyBoaWdoLgogCi1Nb2RlIDE6IFRyaWdnZXJlZCBPbmUtc2hvdC4gIFRoZSBvdXRwdXQgaXMgaW50aWFsbHkgc2V0IGhpZ2guICBXaGVuIHRoZSBnYXRlCitNb2RlIDE6IFRyaWdnZXJlZCBPbmUtc2hvdC4gIFRoZSBvdXRwdXQgaXMgaW5pdGlhbGx5IHNldCBoaWdoLiAgV2hlbiB0aGUgZ2F0ZQogIGxpbmUgaXMgc2V0IGhpZ2gsIGEgY291bnRkb3duIGlzIGluaXRpYXRlZCAod2hpY2ggZG9lcyBub3Qgc3RvcCBpZiB0aGUgZ2F0ZSBpcwogIGxvd2VyZWQpLCBkdXJpbmcgd2hpY2ggdGhlIG91dHB1dCBpcyBzZXQgbG93LiAgV2hlbiB0aGUgY291bnQgcmVhY2hlcyB6ZXJvLAogIHRoZSBvdXRwdXQgZ29lcyBoaWdoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FzdXMtbGFwdG9wLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hc3VzLWxhcHRvcC50eHQKaW5kZXggYzFjNWJlOC4uODAzZTUxZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FzdXMtbGFwdG9wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvYXN1cy1sYXB0b3AudHh0CkBAIC02MSw3ICs2MSw3IEBACiAgIEhvdGtleXMgYXJlIGFsc28gcmVwb3J0ZWQgYXMgaW5wdXQga2V5cyAobGlrZSBrZXlib2FyZHMpIHlvdSBjYW4gY2hlY2sKICAgd2hpY2gga2V5IGFyZSBzdXBwb3J0ZWQgdXNpbmcgInhldiIgdW5kZXIgWDExLgogCi0gIFlvdSBjYW4gZ2V0IGluZm9ybWF0aW9ucyBvbiB0aGUgdmVyc2lvbiBvZiB5b3VyIERTRFQgdGFibGUgYnkgcmVhZGluZyB0aGUKKyAgWW91IGNhbiBnZXQgaW5mb3JtYXRpb24gb24gdGhlIHZlcnNpb24gb2YgeW91ciBEU0RUIHRhYmxlIGJ5IHJlYWRpbmcgdGhlCiAgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9pbmZvcyBlbnRyeS4gSWYgeW91IGhhdmUgYSBxdWVzdGlvbiBvciBhCiAgIGJ1ZyByZXBvcnQgdG8gZG8sIHBsZWFzZSBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgdGhpcyBlbnRyeS4KIApAQCAtMTc4LDcgKzE3OCw3IEBACiAtLS0tLS0tLS0tLQogCiAgIFNvbWUgbW9kZWxzIGxpa2UgdGhlIFcxTiBoYXZlIGEgTEVEIGRpc3BsYXkgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5Ci0gIHNldmVyYWwgaW5mb3JtYXRpb25zLgorICBzZXZlcmFsIGl0ZW1zIG9mIGluZm9ybWF0aW9uLgogCiAgIExFRCBkaXNwbGF5IHdvcmtzIGZvciB0aGUgZm9sbG93aW5nIG1vZGVsczoKICAgICBXMTAwME4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbGVkcy8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWY0ODFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9sZWRzLzAwLUlOREVYCkBAIC0wLDAgKzEsOCBAQAorbGVkcy1jbGFzcy50eHQKKwktIGRvY3VtZW50cyBMRUQgaGFuZGxpbmcgdW5kZXIgTGludXguCitsZWRzLWxwMzk0NC50eHQKKwktIG5vdGVzIG9uIGhvdyB0byB1c2UgdGhlIGxlZHMtbHAzOTQ0IGRyaXZlci4KK2xlZHMtbHA1NTIxLnR4dAorCS0gbm90ZXMgb24gaG93IHRvIHVzZSB0aGUgbGVkcy1scDU1MjEgZHJpdmVyLgorbGVkcy1scDU1MjMudHh0CisJLSBub3RlcyBvbiBob3cgdG8gdXNlIHRoZSBsZWRzLWxwNTUyMyBkcml2ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMtY2xhc3MudHh0IGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MudHh0CnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnR4dAppbmRleCA1OGIyNjZiLi40OTk2NTg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMtY2xhc3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnR4dApAQCAtOTUsNCArOTUsMyBAQAogcGFydGljdWxhciBMRUQgKEFDUEk/KS4gVGhlIGFkZGl0aW9uIG9mIHRyaWdnZXJzIHByb3ZpZGVkIGJ5IHRoZSBMRUQgZHJpdmVyCiBzaG91bGQgY292ZXIgdGhpcyBvcHRpb24gYW5kIGJlIHBvc3NpYmxlIHRvIGFkZCB3aXRob3V0IGJyZWFraW5nIHRoZQogY3VycmVudCBpbnRlcmZhY2UuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy1scDM5NDQudHh0IGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtbHAzOTQ0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9sZWRzLWxwMzk0NC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWxwMzk0NC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWQudHh0IGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKaW5kZXggYTgxYzdiNC4uMjM2NmIxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTU1Miw2ICs1NTIsMTYgQEAKICAgICAgd2l0aGluIHRoZSBhcnJheSB3aGVyZSBJTyB3aWxsIGJlIGJsb2NrZWQuICBUaGlzIGlzIGN1cnJlbnRseQogICAgICBvbmx5IHN1cHBvcnRlZCBmb3IgcmFpZDQvNS82LgogCisgICBzeW5jX21pbgorICAgc3luY19tYXgKKyAgICAgVGhlIHR3byB2YWx1ZXMsIGdpdmVuIGFzIG51bWJlcnMgb2Ygc2VjdG9ycywgaW5kaWNhdGUgYSByYW5nZQorICAgICB3aXRoaW5nIHRoZSBhcnJheSB3aGVyZSAnY2hlY2snLydyZXBhaXInIHdpbGwgb3BlcmF0ZS4gTXVzdCBiZQorICAgICBhIG11bHRpcGxlIG9mIGNodW5rX3NpemUuIFdoZW4gaXQgcmVhY2hlcyAic3luY19tYXgiIGl0IHdpbGwKKyAgICAgcGF1c2UsIHJhdGhlciB0aGFuIGNvbXBsZXRlLgorICAgICBZb3UgY2FuIHVzZSAnc2VsZWN0JyBvciAncG9sbCcgb24gInN5bmNfY29tcGxldGVkIiB0byB3YWl0IGZvcgorICAgICB0aGF0IG51bWJlciB0byByZWFjaCBzeW5jX21heC4gIFRoZW4geW91IGNhbiBlaXRoZXIgaW5jcmVhc2UKKyAgICAgInN5bmNfbWF4Iiwgb3IgY2FuIHdyaXRlICdpZGxlJyB0byAic3luY19hY3Rpb24iLgorCiAKIEVhY2ggYWN0aXZlIG1kIGRldmljZSBtYXkgYWxzbyBoYXZlIGF0dHJpYnV0ZXMgc3BlY2lmaWMgdG8gdGhlCiBwZXJzb25hbGl0eSBtb2R1bGUgdGhhdCBtYW5hZ2VzIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZWRpYS1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi9tZWRpYS1mcmFtZXdvcmsudHh0CmluZGV4IGZkNDhhZGQuLjc2YTIwODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVkaWEtZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lZGlhLWZyYW1ld29yay50eHQKQEAgLTE5NCw3ICsxOTQsNyBAQAogCiBMaW5rcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBzdHJ1Y3QgbWVkaWFfbGluayBpbnN0YW5jZSwgZGVmaW5lZCBpbgogaW5jbHVkZS9tZWRpYS9tZWRpYS1lbnRpdHkuaC4gRWFjaCBlbnRpdHkgc3RvcmVzIGFsbCBsaW5rcyBvcmlnaW5hdGluZyBhdCBvcgotdGFyZ2V0dGluZyBhbnkgb2YgaXRzIHBhZHMgaW4gYSBsaW5rcyBhcnJheS4gQSBnaXZlbiBsaW5rIGlzIHRodXMgc3RvcmVkCit0YXJnZXRpbmcgYW55IG9mIGl0cyBwYWRzIGluIGEgbGlua3MgYXJyYXkuIEEgZ2l2ZW4gbGluayBpcyB0aHVzIHN0b3JlZAogdHdpY2UsIG9uY2UgaW4gdGhlIHNvdXJjZSBlbnRpdHkgYW5kIG9uY2UgaW4gdGhlIHRhcmdldCBlbnRpdHkuIFRoZSBhcnJheSBpcwogcHJlLWFsbG9jYXRlZCBhbmQgZ3Jvd3MgZHluYW1pY2FsbHkgYXMgbmVlZGVkLgogCkBAIC0zNDgsNiArMzQ4LDYgQEAKIHdpdGggdGhlIE1FRElBX0xOS19GTF9EWU5BTUlDIGZsYWcuCiAKIElmIG90aGVyIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBkaXNhbGxvd2VkIG9uIHN0cmVhbWluZyBlbnRpdGllcyAoc3VjaCBhcwotY2hhbmdpbmcgZW50aXRpZXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzKSBkcml2ZXJzIGNhbiBleHBsaWN0bHkgY2hlY2sgdGhlCitjaGFuZ2luZyBlbnRpdGllcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMpIGRyaXZlcnMgY2FuIGV4cGxpY2l0bHkgY2hlY2sgdGhlCiBtZWRpYV9lbnRpdHkgc3RyZWFtX2NvdW50IGZpZWxkIHRvIGZpbmQgb3V0IGlmIGFuIGVudGl0eSBpcyBzdHJlYW1pbmcuIFRoaXMKIG9wZXJhdGlvbiBtdXN0IGJlIGRvbmUgd2l0aCB0aGUgbWVkaWFfZGV2aWNlIGdyYXBoX211dGV4IGhlbGQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pcHMvQVUxeHh4X0lERS5SRUFETUUgYi9Eb2N1bWVudGF0aW9uL21pcHMvQVUxeHh4X0lERS5SRUFETUUKaW5kZXggOGFjZTM1ZS4uY2M4ODdlYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9taXBzL0FVMXh4eF9JREUuUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vbWlwcy9BVTF4eHhfSURFLlJFQURNRQpAQCAtMzksMTMgKzM5LDEzIEBACiAgICAgICBJbnRlcmZhY2UgYW5kIExpbnV4IERldmljZSBEcml2ZXIiIEFwcGxpY2F0aW9uIE5vdGUuCiAKIAotRklMRVMsIENPTkZJR1MgQU5EIENPTVBBVEFCSUxJVFkKK0ZJTEVTLCBDT05GSUdTIEFORCBDT01QQVRJQklMSVRZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUd28gZmlsZXMgYXJlIGludHJvZHVjZWQ6CiAKICAgYSkgJ2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgnCi0gICAgIGNvbnRhaW5lcyA6IHN0cnVjdCBfYXVpZGVfaHdpZgorICAgICBjb250YWlucyA6IHN0cnVjdCBfYXVpZGVfaHdpZgogICAgICAgICAgICAgICAgICB0aW1pbmcgcGFyYW1ldGVycyBmb3IgUElPIG1vZGUgMC8xLzIvMy80CiAgICAgICAgICAgICAgICAgIHRpbWluZyBwYXJhbWV0ZXJzIGZvciBNV0RNQSAwLzEvMgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9pY3M5MzJzNDAxIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvaWNzOTMyczQwMQppbmRleCAwN2E3MzlmLi5iZGFjNjdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9pY3M5MzJzNDAxCisrKyBiL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2ljczkzMnM0MDEKQEAgLTUsNyArNSw3IEBACiAgICogSURUIElDUzkzMlM0MDEKICAgICBQcmVmaXg6ICdpY3M5MzJzNDAxJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg2OQotICAgIERhdGFzaGVldDogUHVibGljYWxseSBhdmFpbGFibGUgYXQgdGhlIElEVCB3ZWJzaXRlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIElEVCB3ZWJzaXRlCiAKIEF1dGhvcjogRGFycmljayBKLiBXb25nCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2MzNTkudHh0CmluZGV4IDRhZjgwNzEuLmRhZGZlODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjMzU5LnR4dApAQCAtNDUsNyArNDUsNyBAQAogCiBWYXJpYWJsZSBNVFUgc2l6ZToKIAotVGhlIGRyaXZlciBjYW4gaGFuZGxlIGEgTVRVIHNpemUgdXB0byBlaXRoZXIgNDUwMCBvciAxODAwMCBkZXBlbmRpbmcgdXBvbiAKK1RoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwIHRvIGVpdGhlciA0NTAwIG9yIDE4MDAwIGRlcGVuZGluZyB1cG9uIAogcmluZyBzcGVlZC4gIFRoZSBkcml2ZXIgYWxzbyBjaGFuZ2VzIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYXMgcGFydAogb2YgdGhlIG10dSByZS1zaXppbmcsIHNvIGlmIHlvdSBzZXQgbXR1ID0gMTgwMDAsIHlvdSB3aWxsIG5lZWQgdG8gYmUgYWJsZQogdG8gYWxsb2NhdGUgMTYgKiAoc2tfYnVmZiB3aXRoIDE4MDAwIGJ1ZmZlciBzaXplKSBjYWxsIGl0IDE4NTAwIGJ5dGVzIHBlciByaW5nIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCmluZGV4IDYxNmE4ZTUuLmI3NjU4YmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKQEAgLTI1Niw3ICsyNTYsNyBAQAogCiBXaGVyZSAkVkFMVUUgd291bGQgYmUgYSBudW1iZXIgaW4gdGhlIGNhc2Ugb2YgdGhpcyBzeXNmcyBlbnRyeS4gIFRoZSAKIGlucHV0IHRvIHN5c2ZzIGZpbGVzIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBudW1iZXIuICBGb3IgZXhhbXBsZSwgdGhlIAotZmlybXdhcmUgbG9hZGVyIHVzZWQgYnkgaG90cGx1ZyB1dGlsaXplcyBzeXNmcyBlbnRyaWVzIGZvciB0cmFuc2ZlcmluZyAKK2Zpcm13YXJlIGxvYWRlciB1c2VkIGJ5IGhvdHBsdWcgdXRpbGl6ZXMgc3lzZnMgZW50cmllcyBmb3IgdHJhbnNmZXJyaW5nIAogdGhlIGZpcm13YXJlIGltYWdlIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBkcml2ZXIuCiAKIFRoZSBJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IGV4cG9zZXMgc3lzZnMgZW50cmllcyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXRtYW4tYWR2LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXRtYW4tYWR2LnR4dAppbmRleCAxOGFmY2Q4Li5lZTQ5NmViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmF0bWFuLWFkdi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JhdG1hbi1hZHYudHh0CkBAIC03Miw3ICs3Miw3IEBACiAjICBmcmFnbWVudGF0aW9uICAgIGd3X3NlbF9jbGFzcyAgdmlzX21vZGUKIAogCi1UaGVyZSBpcyBhIHNwZWNpYWwgZm9sZGVyIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25zOgorVGhlcmUgaXMgYSBzcGVjaWFsIGZvbGRlciBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uOgogCiAjICBscyAvc3lzL2tlcm5lbC9kZWJ1Zy9iYXRtYW5fYWR2L2JhdDAvCiAjICBnYXRld2F5cyAgICAgc29ja2V0ICAgICAgICB0cmFuc3RhYmxlX2dsb2JhbCAgdmlzX2RhdGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAppbmRleCBiMzZlNzQxLi5lMjcyMDJiYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApAQCAtMzY4LDcgKzM2OCw3IEBACiAJCWdyYXR1aXRvdXMgQVJQIGlzIGxvc3QsIGNvbW11bmljYXRpb24gbWF5IGJlCiAJCWRpc3J1cHRlZC4KIAotCQlXaGVuIHRoaXMgcG9saWN5IGlzIHVzZWQgaW4gY29uanVjdGlvbiB3aXRoIHRoZSBtaWkKKwkJV2hlbiB0aGlzIHBvbGljeSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG1paQogCQltb25pdG9yLCBkZXZpY2VzIHdoaWNoIGFzc2VydCBsaW5rIHVwIHByaW9yIHRvIGJlaW5nCiAJCWFibGUgdG8gYWN0dWFsbHkgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYXJlIHBhcnRpY3VsYXJseQogCQlzdXNjZXB0aWJsZSB0byBsb3NzIG9mIHRoZSBncmF0dWl0b3VzIEFSUCwgYW5kIGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FpZi9MaW51eC1DQUlGLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL0xpbnV4LUNBSUYudHh0CmluZGV4IDdmZTdhOWEuLmU1MmZkNjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL0xpbnV4LUNBSUYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL0xpbnV4LUNBSUYudHh0CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgIC0gQ0ZNVVggQ0FJRiBNdXggbGF5ZXIuIEhhbmRsZXMgbXVsdGlwbGV4aW5nIGJldHdlZW4gbXVsdGlwbGUKIAlwaHlzaWNhbCBiZWFyZXJzIGFuZCBtdWx0aXBsZSBjaGFubmVscyBzdWNoIGFzIFZFSSwgRGF0YWdyYW0sIGV0Yy4KIAlUaGUgTVVYIGtlZXBzIHRyYWNrIG9mIHRoZSBleGlzdGluZyBDQUlGIENoYW5uZWxzIGFuZAotCVBoeXNpY2FsIEluc3RhbmNlcyBhbmQgc2VsZWN0cyB0aGUgYXByb3ByaWF0ZSBpbnN0YW5jZSBiYXNlZAorCVBoeXNpY2FsIEluc3RhbmNlcyBhbmQgc2VsZWN0cyB0aGUgYXBwcm9wcmlhdGUgaW5zdGFuY2UgYmFzZWQKIAlvbiBDaGFubmVsLUlkIGFuZCBQaHlzaWNhbC1JRC4KIAogICAgICAgLSBDRkZSTUwgQ0FJRiBGcmFtaW5nIGxheWVyLiBIYW5kbGVzIEZyYW1pbmcgaS5lLiBGcmFtZSBsZW5ndGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL3NwaV9wb3J0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL3NwaV9wb3J0aW5nLnR4dAppbmRleCAwY2I4Y2I5Li45ZWZkMDY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FpZi9zcGlfcG9ydGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NhaWYvc3BpX3BvcnRpbmcudHh0CkBAIC0xNTAsNyArMTUwLDcgQEAKIHZvaWQgc3NwaV9zaWdfeGZlcihib29sIHhmZXIsIHN0cnVjdCBjZnNwaV9kZXYgKmRldikKIHsKIAkvKiBJZiB4ZmVyIGlzIHRydWUgdGhlbiB5b3Ugc2hvdWxkIGFzc2VydCB0aGUgU1BJX0lOVCB0byBpbmRpY2F0ZSB0bwotCSAqIHRoZSBtYXN0ZXIgdGhhdCB5b3UgYXJlIHJlYWR5IHRvIHJlY2lldmUgdGhlIGRhdGEgZnJvbSB0aGUgbWFzdGVyCisJICogdGhlIG1hc3RlciB0aGF0IHlvdSBhcmUgcmVhZHkgdG8gcmVjZWl2ZSB0aGUgZGF0YSBmcm9tIHRoZSBtYXN0ZXIKIAkgKiBTUEkuIElmIHhmZXIgaXMgZmFsc2UgdGhlbiB5b3Ugc2hvdWxkIGRlLWFzc2VydCBTUElfSU5UIHRvIGluZGljYXRlCiAJICogdGhhdCB0aGUgdHJhbnNmZXIgaXMgZG9uZS4KIAkgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKaW5kZXggNWIwNGI2Ny4uNTZjYTNiNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKQEAgLTI0MCw3ICsyNDAsNyBAQAogICB0aGUgdXNlciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgY29tbW9uIENBTiBmaWx0ZXIgbWVjaGFuaXNtcy4gSW5zaWRlCiAgIHRoaXMgZmlsdGVyIGRlZmluaXRpb24gdGhlIChpbnRlcmVzdGVkKSB0eXBlIG9mIGVycm9ycyBtYXkgYmUKICAgc2VsZWN0ZWQuIFRoZSByZWNlcHRpb24gb2YgZXJyb3IgZnJhbWVzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gIFRoZSBmb3JtYXQgb2YgdGhlIENBTiBlcnJvciBmcmFtZSBpcyBicmllZmx5IGRlY3JpYmVkIGluIHRoZSBMaW51eAorICBUaGUgZm9ybWF0IG9mIHRoZSBDQU4gZXJyb3IgZnJhbWUgaXMgYnJpZWZseSBkZXNjcmliZWQgaW4gdGhlIExpbnV4CiAgIGhlYWRlciBmaWxlICJpbmNsdWRlL2xpbnV4L2Nhbi9lcnJvci5oIi4KIAogNC4gSG93IHRvIHVzZSBTb2NrZXQgQ0FOCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWVlZTgwMjE1NC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWVlZTgwMjE1NC50eHQKaW5kZXggMjNjOTk1ZS4uZjQxZWEyNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2llZWU4MDIxNTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZWVlODAyMTU0LnR4dApAQCAtOSw3ICs5LDcgQEAKIG9mIElFRUUgODAyLjE1LjQgLyBaaWdCZWUgLyA2TG9XUEFOIHByb3RvY29scy4gSUVFRSA4MDIuMTUuNCBpcyBhIHN0YWNrCiBvZiBwcm90b2NvbHMgZm9yIG9yZ2FuaXppbmcgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3Jrcy4KIAotQ3VycmVudGx5IG9ubHkgSUVFRSA4MDIuMTUuNCBsYXllciBpcyBpbXBsZW1lbnRlZC4gV2UgaGF2ZSBjaG9vc2VuCitDdXJyZW50bHkgb25seSBJRUVFIDgwMi4xNS40IGxheWVyIGlzIGltcGxlbWVudGVkLiBXZSBoYXZlIGNob3NlbgogdG8gdXNlIHBsYWluIEJlcmtlbGV5IHNvY2tldCBBUEksIHRoZSBnZW5lcmljIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sKIHRvIHRyYW5zZmVyIElFRUUgODAyLjE1LjQgbWVzc2FnZXMgYW5kIGEgc3BlY2lhbCBwcm90b2NvbCBvdmVyIGdlbmV0bGluawogZm9yIGNvbmZpZ3VyYXRpb24vbWFuYWdlbWVudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29seW1waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29seW1waWMudHh0CmluZGV4IGM2NWE5NDAuLmI5NWI1YmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2x5bXBpYy50eHQKQEAgLTY1LDcgKzY1LDcgQEAKIAogVmFyaWFibGUgTVRVIHNpemU6CiAKLVRoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwdG8gZWl0aGVyIDQ1MDAgb3IgMTgwMDAgZGVwZW5kaW5nIHVwb24gCitUaGUgZHJpdmVyIGNhbiBoYW5kbGUgYSBNVFUgc2l6ZSB1cCB0byBlaXRoZXIgNDUwMCBvciAxODAwMCBkZXBlbmRpbmcgdXBvbiAKIHJpbmcgc3BlZWQuICBUaGUgZHJpdmVyIGFsc28gY2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXJzIGFzIHBhcnQKIG9mIHRoZSBtdHUgcmUtc2l6aW5nLCBzbyBpZiB5b3Ugc2V0IG10dSA9IDE4MDAwLCB5b3Ugd2lsbCBuZWVkIHRvIGJlIGFibGUKIHRvIGFsbG9jYXRlIDE2ICogKHNrX2J1ZmYgd2l0aCAxODAwMCBidWZmZXIgc2l6ZSkgY2FsbCBpdCAxODUwMCBieXRlcyBwZXIgcmluZyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CmluZGV4IDA3Mzg5NGQuLjRhY2VhNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApAQCAtMjIzLDcgKzIyMyw3IEBACiAKIEEgZnJhbWUgY2FuIGJlIG9mIGFueSBzaXplIHdpdGggdGhlIG9ubHkgY29uZGl0aW9uIGl0IGNhbiBmaXQgaW4gYSBibG9jay4gQSBibG9jawogY2FuIG9ubHkgaG9sZCBhbiBpbnRlZ2VyIG51bWJlciBvZiBmcmFtZXMsIG9yIGluIG90aGVyIHdvcmRzLCBhIGZyYW1lIGNhbm5vdCAKLWJlIHNwYXduZWQgYWNjcm9zcyB0d28gYmxvY2tzLCBzbyB0aGVyZSBhcmUgc29tZSBkZXRhaWxzIHlvdSBoYXZlIHRvIHRha2UgaW50byAKK2JlIHNwYXduZWQgYWNyb3NzIHR3byBibG9ja3MsIHNvIHRoZXJlIGFyZSBzb21lIGRldGFpbHMgeW91IGhhdmUgdG8gdGFrZSBpbnRvIAogYWNjb3VudCB3aGVuIGNob29zaW5nIHRoZSBmcmFtZV9zaXplLiBTZWUgIk1hcHBpbmcgYW5kIHVzZSBvZiB0aGUgY2lyY3VsYXIgCiBidWZmZXIgKHJpbmcpIi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0CmluZGV4IDlkNGUwZjQuLjRiZTBjMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKQEAgLTM3LDcgKzM3LDcgQEAKIFRoZSBjb3JyZXNwb25kaW5nIGFkYXB0ZXIncyBMRUQgd2lsbCBibGluayBtdWx0aXBsZSB0aW1lcy4KIAogMy4JRmVhdHVyZXMgc3VwcG9ydGVkOgotYS4gSnVtYm8gZnJhbWVzLiBYZnJhbWUgSS9JSSBzdXBwb3J0cyBNVFUgdXB0byA5NjAwIGJ5dGVzLAorYS4gSnVtYm8gZnJhbWVzLiBYZnJhbWUgSS9JSSBzdXBwb3J0cyBNVFUgdXAgdG8gOTYwMCBieXRlcywKIG1vZGlmaWFibGUgdXNpbmcgaWZjb25maWcgY29tbWFuZC4KIAogYi4gT2ZmbG9hZHMuIFN1cHBvcnRzIGNoZWNrc3VtIG9mZmxvYWQoVENQL1VEUC9JUCkgb24gdHJhbnNtaXQKQEAgLTQ5LDcgKzQ5LDcgQEAKIElCTSB4U2VyaWVzKS4KIAogZC4gTVNJL01TSS1YLiBDYW4gYmUgZW5hYmxlZCBvbiBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCB0aGlzIGZlYXR1cmUKLShJQTY0LCBYZW9uKSByZXN1bHRpbmcgaW4gbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCh1cHRvIDclCisoSUE2NCwgWGVvbikgcmVzdWx0aW5nIGluIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQodXAgdG8gNyUKIG9uIGNlcnRhaW4gcGxhdGZvcm1zKS4KIAogZS4gU3RhdGlzdGljcy4gQ29tcHJlaGVuc2l2ZSBNQUMtbGV2ZWwgYW5kIHNvZnR3YXJlIHN0YXRpc3RpY3MgZGlzcGxheWVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGMtYWN0aW9ucy1lbnYtcnVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjLWFjdGlvbnMtZW52LXJ1bGVzLnR4dAppbmRleCBkY2FkZjZmLi43MGQ2Y2Y2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGMtYWN0aW9ucy1lbnYtcnVsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Yy1hY3Rpb25zLWVudi1ydWxlcy50eHQKQEAgLTEsNSArMSw1IEBACiAKLVRoZSAiZW52aXJvbWVudGFsIiBydWxlcyBmb3IgYXV0aG9ycyBvZiBhbnkgbmV3IHRjIGFjdGlvbnMgYXJlOgorVGhlICJlbnZpcm9ubWVudGFsIiBydWxlcyBmb3IgYXV0aG9ycyBvZiBhbnkgbmV3IHRjIGFjdGlvbnMgYXJlOgogCiAxKSBJZiB5b3Ugc3RlYWxldGggb3IgYm9ycm93ZXRoIGFueSBwYWNrZXQgdGhvdSBzaGFsdCBiZSBicmFuY2hpbmcKIGZyb20gdGhlIHJpZ2h0ZW91cyBwYXRoIGFuZCB0aG91IHNoYWx0IGNsb25ldGguCkBAIC0yMCw3ICsyMCw3IEBACiAzKSBEcm9wcGluZyBwYWNrZXRzIHlvdSBkb24ndCBvd24gaXMgYSBuby1uby4gWW91IHNpbXBseSByZXR1cm4KIFRDX0FDVF9TSE9UIHRvIHRoZSBjYWxsZXIgYW5kIHRoZXkgd2lsbCBkcm9wIGl0LgogCi1UaGUgImVudmlyb21lbnRhbCIgcnVsZXMgZm9yIGNhbGxlcnMgb2YgYWN0aW9ucyAocWRpc2NzIGV0YykgYXJlOgorVGhlICJlbnZpcm9ubWVudGFsIiBydWxlcyBmb3IgY2FsbGVycyBvZiBhY3Rpb25zIChxZGlzY3MgZXRjKSBhcmU6CiAKICopIFRob3UgYXJ0IHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGFueXRoaW5nIHJldHVybmVkIGFzIGJlaW5nCiBUQ19BQ1RfU0hPVC9TVE9MRU4vUVVFVUVELiBJZiBub25lIG9mIFRDX0FDVF9TSE9UL1NUT0xFTi9RVUVVRUQgaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0CmluZGV4IGYwMjNiYTYuLjE5NzFiY2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dApAQCAtMzY3LDcgKzM2Nyw3IEBACiBzdXNwZW5kIG1ldGhvZHMgd2VyZSBjYWxsZWQsIGZvciBleGFtcGxlIGJ5IGNvbXBsZXRlIHJlaW5pdGlhbGl6YXRpb24uCiBUaGlzIG1heSBiZSB0aGUgaGFyZGVzdCBwYXJ0LCBhbmQgdGhlIG9uZSBtb3N0IHByb3RlY3RlZCBieSBOREEnZCBkb2N1bWVudHMKIGFuZCBjaGlwIGVycmF0YS4gIEl0J3Mgc2ltcGxlc3QgaWYgdGhlIGhhcmR3YXJlIHN0YXRlIGhhc24ndCBjaGFuZ2VkIHNpbmNlCi10aGUgc3VzcGVuZCB3YXMgY2FycmllZCBvdXQsIGJ1dCB0aGF0IGNhbid0IGJlIGd1YXJhbnRlZWQgKGluIGZhY3QsIGl0IHVzdXNhbGx5Cit0aGUgc3VzcGVuZCB3YXMgY2FycmllZCBvdXQsIGJ1dCB0aGF0IGNhbid0IGJlIGd1YXJhbnRlZWQgKGluIGZhY3QsIGl0IHVzdWFsbHkKIGlzIG5vdCB0aGUgY2FzZSkuCiAKIERyaXZlcnMgbXVzdCBhbHNvIGJlIHByZXBhcmVkIHRvIG5vdGljZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ub3RpZmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ub3RpZmllcnMudHh0CmluZGV4IGFlMWI3ZWMuLmNmOTgwNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvbm90aWZpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL25vdGlmaWVycy50eHQKQEAgLTI0LDcgKzI0LDcgQEAKIAkJCWJlIGZyb3plbiBpbW1lZGlhdGVseS4KIAogUE1fUE9TVF9ISUJFUk5BVElPTglUaGUgc3lzdGVtIG1lbW9yeSBzdGF0ZSBoYXMgYmVlbiByZXN0b3JlZCBmcm9tIGEKLQkJCWhpYmVybmF0aW9uIGltYWdlIG9yIGFuIGVycm9yIG9jY3VyZWQgZHVyaW5nIHRoZQorCQkJaGliZXJuYXRpb24gaW1hZ2Ugb3IgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZQogCQkJaGliZXJuYXRpb24uICBEZXZpY2UgZHJpdmVycycgLnJlc3VtZSgpIGNhbGxiYWNrcyBoYXZlCiAJCQliZWVuIGV4ZWN1dGVkIGFuZCB0YXNrcyBoYXZlIGJlZW4gdGhhd2VkLgogCkBAIC0zOCw3ICszOCw3IEBACiAKIFBNX1NVU1BFTkRfUFJFUEFSRQlUaGUgc3lzdGVtIGlzIHByZXBhcmluZyBmb3IgYSBzdXNwZW5kLgogCi1QTV9QT1NUX1NVU1BFTkQJCVRoZSBzeXN0ZW0gaGFzIGp1c3QgcmVzdW1lZCBvciBhbiBlcnJvciBvY2N1cmVkIGR1cmluZworUE1fUE9TVF9TVVNQRU5ECQlUaGUgc3lzdGVtIGhhcyBqdXN0IHJlc3VtZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nCiAJCQl0aGUgc3VzcGVuZC4JRGV2aWNlIGRyaXZlcnMnIC5yZXN1bWUoKSBjYWxsYmFja3MgaGF2ZQogCQkJYmVlbiBleGVjdXRlZCBhbmQgdGFza3MgaGF2ZSBiZWVuIHRoYXdlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0CmluZGV4IGNkNDQ1NTguLjVhZTcwYTEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL29wcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0CkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJaWYgKCFJU19FUlIob3BwKSkKIAkJCXNvY19zd2l0Y2hfdG9fZnJlcV92b2x0YWdlKGZyZXEpOwogCQllbHNlCi0JCQkvKiBkbyBzb21ldGhpbmcgd2hlbiB3ZSBjYW50IHNhdGlzZnkgdGhlIHJlcSAqLworCQkJLyogZG8gc29tZXRoaW5nIHdoZW4gd2UgY2FuJ3Qgc2F0aXNmeSB0aGUgcmVxICovCiAJCS8qIGRvIG90aGVyIHN0dWZmICovCiAJIH0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0CmluZGV4IGVhNzE4ODkuLmFjMTkwY2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKQEAgLTE5Miw3ICsxOTIsNyBAQAogZGlzdGluY3Rpb25zIGJldHdlZW4gU1VTUEVORCBhbmQgRlJFRVpFLgogCiBBOiBEb2luZyBTVVNQRU5EIHdoZW4geW91IGFyZSBhc2tlZCB0byBkbyBGUkVFWkUgaXMgYWx3YXlzIGNvcnJlY3QsCi1idXQgaXQgbWF5IGJlIHVubmVjY2Vzc2FyaWx5IHNsb3cuIElmIHlvdSB3YW50IHlvdXIgZHJpdmVyIHRvIHN0YXkgc2ltcGxlLAorYnV0IGl0IG1heSBiZSB1bm5lY2Vzc2FyaWx5IHNsb3cuIElmIHlvdSB3YW50IHlvdXIgZHJpdmVyIHRvIHN0YXkgc2ltcGxlLAogc2xvd25lc3MgbWF5IG5vdCBtYXR0ZXIgdG8geW91LiBJdCBjYW4gYWx3YXlzIGJlIGZpeGVkIGxhdGVyLgogCiBGb3IgZGV2aWNlcyBsaWtlIGRpc2sgaXQgZG9lcyBtYXR0ZXIsIHlvdSBkbyBub3Qgd2FudCB0byBzcGluZG93biBmb3IKQEAgLTIzNyw3ICsyMzcsNyBAQAogCiAgICAgICBydW5uaW5nIHN5c3RlbSwgdXNlciBhc2tzIGZvciBzdXNwZW5kLXRvLWRpc2sKIAotICAgICAgdXNlciBwcm9jZXNzZXMgYXJlIHN0b3BwZWQgKGluIGNvbW1vbiBjYXNlIHRoZXJlIGFyZSBub25lLCBidXQgd2l0aCByZXN1bWUtZnJvbS1pbml0cmQsIG5vb25lIGtub3dzKQorICAgICAgdXNlciBwcm9jZXNzZXMgYXJlIHN0b3BwZWQgKGluIGNvbW1vbiBjYXNlIHRoZXJlIGFyZSBub25lLCBidXQgd2l0aCByZXN1bWUtZnJvbS1pbml0cmQsIG5vIG9uZSBrbm93cykKIAogICAgICAgcmVhZCBpbWFnZSBmcm9tIGRpc2sKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci91c2VybGFuZC1zd3N1c3AudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci91c2VybGFuZC1zd3N1c3AudHh0CmluZGV4IDgxNjgwZjkuLjExMDFiZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvdXNlcmxhbmQtc3dzdXNwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3VzZXJsYW5kLXN3c3VzcC50eHQKQEAgLTk4LDcgKzk4LDcgQEAKIFRoZSBkZXZpY2UncyByZWFkKCkgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHRyYW5zZmVyIHRoZSBzbmFwc2hvdCBpbWFnZSBmcm9tCiB0aGUga2VybmVsLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6CiAtIHlvdSBjYW5ub3QgcmVhZCgpIG1vcmUgdGhhbiBvbmUgdmlydHVhbCBtZW1vcnkgcGFnZSBhdCBhIHRpbWUKLS0gcmVhZCgpcyBhY2Nyb3NzIHBhZ2UgYm91bmRhcmllcyBhcmUgaW1wb3NzaWJsZSAoaWUuIGlmIHlwdSByZWFkKCkgMS8yIG9mCistIHJlYWQoKXMgYWNyb3NzIHBhZ2UgYm91bmRhcmllcyBhcmUgaW1wb3NzaWJsZSAoaWUuIGlmIHlwdSByZWFkKCkgMS8yIG9mCiAJYSBwYWdlIGluIHRoZSBwcmV2aW91cyBjYWxsLCB5b3Ugd2lsbCBvbmx5IGJlIGFibGUgdG8gcmVhZCgpCiAJX2F0XyBfbW9zdF8gMS8yIG9mIHRoZSBwYWdlIGluIHRoZSBuZXh0IGNhbGwpCiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogbWVhbnMsIHN1Y2ggYXMgY2hlY2tzdW1zLCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgc25hcHNob3QgaW1hZ2UuCiAKIFRoZSBzdXNwZW5kaW5nIGFuZCByZXN1bWluZyB1dGlsaXRpZXMgTVVTVCBsb2NrIHRoZW1zZWx2ZXMgaW4gbWVtb3J5LAotcHJlZmVycmFibHkgdXNpbmcgbWxvY2thbGwoKSwgYmVmb3JlIGNhbGxpbmcgU05BUFNIT1RfRlJFRVpFLgorcHJlZmVyYWJseSB1c2luZyBtbG9ja2FsbCgpLCBiZWZvcmUgY2FsbGluZyBTTkFQU0hPVF9GUkVFWkUuCiAKIFRoZSBzdXNwZW5kaW5nIHV0aWxpdHkgTVVTVCBjaGVjayB0aGUgdmFsdWUgc3RvcmVkIGJ5IFNOQVBTSE9UX0NSRUFURV9JTUFHRQogaW4gdGhlIG1lbW9yeSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IHRoZSBsYXN0IGFyZ3VtZW50IG9mIGlvY3RsKCkgYW5kIHByb2NlZWQKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCShhKQlUaGUgc3VzcGVuZGluZyB1dGlsaXR5IE1VU1QgTk9UIGNsb3NlIHRoZSBzbmFwc2hvdCBkZXZpY2UKIAkJX3VubGVzc18gdGhlIHdob2xlIHN1c3BlbmQgcHJvY2VkdXJlIGlzIHRvIGJlIGNhbmNlbGxlZCwgaW4KIAkJd2hpY2ggY2FzZSwgaWYgdGhlIHNuYXBzaG90IGltYWdlIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHRoZQotCQlzdXNwZW5kaW5nIHV0aWxpdHkgU0hPVUxEIGRlc3Ryb3kgaXQsIHByZWZlcnJhYmx5IGJ5IHphcHBpbmcKKwkJc3VzcGVuZGluZyB1dGlsaXR5IFNIT1VMRCBkZXN0cm95IGl0LCBwcmVmZXJhYmx5IGJ5IHphcHBpbmcKIAkJaXRzIGhlYWRlci4gIElmIHRoZSBzdXNwZW5kIGlzIG5vdCB0byBiZSBjYW5jZWxsZWQsIHRoZQogCQlzeXN0ZW0gTVVTVCBiZSBwb3dlcmVkIG9mZiBvciByZWJvb3RlZCBhZnRlciB0aGUgc25hcHNob3QKIAkJaW1hZ2UgaGFzIGJlZW4gc2F2ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvaHZjcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvaHZjcy50eHQKaW5kZXggNmQ4YmUzNC4uYTczMGNhNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2h2Y3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9odmNzLnR4dApAQCAtNTI4LDcgKzUyOCw3IEBACiBvcmRlciB0aGFuIGhvdyB0aGV5IHdvdWxkIGJlIGV4cG9zZWQgb24gbW9kdWxlIGxvYWQuICBSZWJvb3Rpbmcgb3IKIHJlbG9hZGluZyB0aGUgbW9kdWxlIGFmdGVyIGR5bmFtaWMgYWRkaXRpb24gbWF5IHJlc3VsdCBpbiB0aGUgL2Rldi9odmNzKgogYW5kIHZ0eS1zZXJ2ZXIgY291cGxpbmcgY2hhbmdpbmcgaWYgYSB2dHktc2VydmVyIGFkYXB0ZXIgd2FzIGFkZGVkIGluIGEKLXNsb3QgaW5iZXR3ZWVuIHR3byBvdGhlciB2dHktc2VydmVyIGFkYXB0ZXJzLiAgUmVmZXIgdG8gdGhlIHNlY3Rpb24gYWJvdmUKK3Nsb3QgYmV0d2VlbiB0d28gb3RoZXIgdnR5LXNlcnZlciBhZGFwdGVycy4gIFJlZmVyIHRvIHRoZSBzZWN0aW9uIGFib3ZlCiBvbiBob3cgdG8gZGV0ZXJtaW5lIHdoaWNoIHZ0eS1zZXJ2ZXIgZ29lcyB3aXRoIHdoaWNoIC9kZXYvaHZjcyogbm9kZS4KIEhpbnQ7IGxvb2sgYXQgdGhlIHN5c2ZzICJpbmRleCIgYXR0cmlidXRlIGZvciB0aGUgdnR5LXNlcnZlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0RlYnVnZ2luZzM5MC50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dAppbmRleCA4NmY5Zjc0Li5lZmU5OThiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dApAQCAtMjI3Myw3ICsyMjczLDcgQEAKIFRoZXJlIGlzIGEgbG90IG9mIHVzZWZ1bCBpbmZvIGluIGhlcmUgYmVzdCBmb3VuZCBieSBnb2luZyBpbiAmIGhhdmluZyBhIGxvb2sgYXJvdW5kLAogc28gSSdsbCB0YWtlIHlvdSB0aHJvdWdoIHNvbWUgZW50cmllcyBJIGNvbnNpZGVyIGltcG9ydGFudC4KIAotQWxsIHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgbWFjaGluZSBoYXZlIHRoZXJlIG93biBlbnRyeSBkZWZpbmVkIGJ5CitBbGwgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBtYWNoaW5lIGhhdmUgdGhlaXIgb3duIGVudHJ5IGRlZmluZWQgYnkKIC9wcm9jLzxwaWQ+CiBTbyBsZXRzIGhhdmUgYSBsb29rIGF0IHRoZSBpbml0IHByb2Nlc3MKIGNkIC9wcm9jLzEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRvbWFpbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZG9tYWlucy50eHQKaW5kZXggMzczY2VhYy4uYjdlZTM3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZG9tYWlucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZG9tYWlucy50eHQKQEAgLTEsOCArMSw3IEBACi1FYWNoIENQVSBoYXMgYSAiYmFzZSIgc2NoZWR1bGluZyBkb21haW4gKHN0cnVjdCBzY2hlZF9kb21haW4pLiBUaGVzZSBhcmUKLWFjY2Vzc2VkIHZpYSBjcHVfc2NoZWRfZG9tYWluKGkpIGFuZCB0aGlzX3NjaGVkX2RvbWFpbigpIG1hY3Jvcy4gVGhlIGRvbWFpbgorRWFjaCBDUFUgaGFzIGEgImJhc2UiIHNjaGVkdWxpbmcgZG9tYWluIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKS4gVGhlIGRvbWFpbgogaGllcmFyY2h5IGlzIGJ1aWx0IGZyb20gdGhlc2UgYmFzZSBkb21haW5zIHZpYSB0aGUgLT5wYXJlbnQgcG9pbnRlci4gLT5wYXJlbnQKLU1VU1QgYmUgTlVMTCB0ZXJtaW5hdGVkLCBhbmQgZG9tYWluIHN0cnVjdHVyZXMgc2hvdWxkIGJlIHBlci1DUFUgYXMgdGhleQotYXJlIGxvY2tsZXNzbHkgdXBkYXRlZC4KK01VU1QgYmUgTlVMTCB0ZXJtaW5hdGVkLCBhbmQgZG9tYWluIHN0cnVjdHVyZXMgc2hvdWxkIGJlIHBlci1DUFUgYXMgdGhleSBhcmUKK2xvY2tsZXNzbHkgdXBkYXRlZC4KIAogRWFjaCBzY2hlZHVsaW5nIGRvbWFpbiBzcGFucyBhIG51bWJlciBvZiBDUFVzIChzdG9yZWQgaW4gdGhlIC0+c3BhbiBmaWVsZCkuCiBBIGRvbWFpbidzIHNwYW4gTVVTVCBiZSBhIHN1cGVyc2V0IG9mIGl0IGNoaWxkJ3Mgc3BhbiAodGhpcyByZXN0cmljdGlvbiBjb3VsZApAQCAtMjYsMTEgKzI1LDI2IEBACiBsb2FkIG9mIGVhY2ggb2YgaXRzIG1lbWJlciBDUFVzLCBhbmQgb25seSB3aGVuIHRoZSBsb2FkIG9mIGEgZ3JvdXAgYmVjb21lcwogb3V0IG9mIGJhbGFuY2UgYXJlIHRhc2tzIG1vdmVkIGJldHdlZW4gZ3JvdXBzLgogCi1JbiBrZXJuZWwvc2NoZWQuYywgcmViYWxhbmNlX3RpY2sgaXMgcnVuIHBlcmlvZGljYWxseSBvbiBlYWNoIENQVS4gVGhpcwotZnVuY3Rpb24gdGFrZXMgaXRzIENQVSdzIGJhc2Ugc2NoZWQgZG9tYWluIGFuZCBjaGVja3MgdG8gc2VlIGlmIGhhcyByZWFjaGVkCi1pdHMgcmViYWxhbmNlIGludGVydmFsLiBJZiBzbywgdGhlbiBpdCB3aWxsIHJ1biBsb2FkX2JhbGFuY2Ugb24gdGhhdCBkb21haW4uCi1yZWJhbGFuY2VfdGljayB0aGVuIGNoZWNrcyB0aGUgcGFyZW50IHNjaGVkX2RvbWFpbiAoaWYgaXQgZXhpc3RzKSwgYW5kIHRoZQotcGFyZW50IG9mIHRoZSBwYXJlbnQgYW5kIHNvIGZvcnRoLgorSW4ga2VybmVsL3NjaGVkLmMsIHRyaWdnZXJfbG9hZF9iYWxhbmNlKCkgaXMgcnVuIHBlcmlvZGljYWxseSBvbiBlYWNoIENQVQordGhyb3VnaCBzY2hlZHVsZXJfdGljaygpLiBJdCByYWlzZXMgYSBzb2Z0aXJxIGFmdGVyIHRoZSBuZXh0IHJlZ3VsYXJseSBzY2hlZHVsZWQKK3JlYmFsYW5jaW5nIGV2ZW50IGZvciB0aGUgY3VycmVudCBydW5xdWV1ZSBoYXMgYXJyaXZlZC4gVGhlIGFjdHVhbCBsb2FkCitiYWxhbmNpbmcgd29ya2hvcnNlLCBydW5fcmViYWxhbmNlX2RvbWFpbnMoKS0+cmViYWxhbmNlX2RvbWFpbnMoKSwgaXMgdGhlbiBydW4KK2luIHNvZnRpcnEgY29udGV4dCAoU0NIRURfU09GVElSUSkuCisKK1RoZSBsYXR0ZXIgZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50czogdGhlIGN1cnJlbnQgQ1BVIGFuZCB3aGV0aGVyIGl0IHdhcyBpZGxlCithdCB0aGUgdGltZSB0aGUgc2NoZWR1bGVyX3RpY2soKSBoYXBwZW5lZCBhbmQgaXRlcmF0ZXMgb3ZlciBhbGwgc2NoZWQgZG9tYWlucworb3VyIENQVSBpcyBvbiwgc3RhcnRpbmcgZnJvbSBpdHMgYmFzZSBkb21haW4gYW5kIGdvaW5nIHVwIHRoZSAtPnBhcmVudCBjaGFpbi4KK1doaWxlIGRvaW5nIHRoYXQsIGl0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGN1cnJlbnQgZG9tYWluIGhhcyBleGhhdXN0ZWQgaXRzCityZWJhbGFuY2UgaW50ZXJ2YWwuIElmIHNvLCBpdCBydW5zIGxvYWRfYmFsYW5jZSgpIG9uIHRoYXQgZG9tYWluLiBJdCB0aGVuIGNoZWNrcwordGhlIHBhcmVudCBzY2hlZF9kb21haW4gKGlmIGl0IGV4aXN0cyksIGFuZCB0aGUgcGFyZW50IG9mIHRoZSBwYXJlbnQgYW5kIHNvCitmb3J0aC4KKworSW5pdGlhbGx5LCBsb2FkX2JhbGFuY2UoKSBmaW5kcyB0aGUgYnVzaWVzdCBncm91cCBpbiB0aGUgY3VycmVudCBzY2hlZCBkb21haW4uCitJZiBpdCBzdWNjZWVkcywgaXQgbG9va3MgZm9yIHRoZSBidXNpZXN0IHJ1bnF1ZXVlIG9mIGFsbCB0aGUgQ1BVcycgcnVucXVldWVzIGluCit0aGF0IGdyb3VwLiBJZiBpdCBtYW5hZ2VzIHRvIGZpbmQgc3VjaCBhIHJ1bnF1ZXVlLCBpdCBsb2NrcyBib3RoIG91ciBpbml0aWFsCitDUFUncyBydW5xdWV1ZSBhbmQgdGhlIG5ld2x5IGZvdW5kIGJ1c2llc3Qgb25lIGFuZCBzdGFydHMgbW92aW5nIHRhc2tzIGZyb20gaXQKK3RvIG91ciBydW5xdWV1ZS4gVGhlIGV4YWN0IG51bWJlciBvZiB0YXNrcyBhbW91bnRzIHRvIGFuIGltYmFsYW5jZSBwcmV2aW91c2x5Citjb21wdXRlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciB0aGlzIHNjaGVkIGRvbWFpbidzIGdyb3Vwcy4KIAogKioqIEltcGxlbWVudGluZyBzY2hlZCBkb21haW5zICoqKgogVGhlICJiYXNlIiBkb21haW4gd2lsbCAic3BhbiIgdGhlIGZpcnN0IGxldmVsIG9mIHRoZSBoaWVyYXJjaHkuIEluIHRoZSBjYXNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLmxwZmMgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLmxwZmMKaW5kZXggNWU4Mzc2OS4uYzU2ZWM5OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5scGZjCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubHBmYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJICBscGZjX3Njc2lwb3J0LmMKIAkqIEluIHJlbW90ZSBwb3J0IGNoYW5nZXM6IG5vIGxvbmdlciBudWxsaW5nIHRhcmdldC0+cG5vZGUgd2hlbgogCSAgcmVtb3ZpbmcgZnJvbSBtYXBwZWQgbGlzdC4gUG5vZGUgZ2V0IG51bGxlZCB3aGVuIHRoZSBub2RlIGlzCi0JICBmcmVlZCAoYWZ0ZXIgbm9kZXYgdG1vKS4gVGhpcyBidWcgd2FzIGNhdXNpbmcgaS9vIHJlY2lldmVkIGluCisJICBmcmVlZCAoYWZ0ZXIgbm9kZXYgdG1vKS4gVGhpcyBidWcgd2FzIGNhdXNpbmcgaS9vIHJlY2VpdmVkIGluCiAJICB0aGUgc21hbGwgd2luZG93IHdoaWxlIHRoZSBkZXZpY2Ugd2FzIGJsb2NrZWQgdG8gYmUgZXJyb3JlZCB3LwogCSAgZGlkX25vX2Nvbm5lY3QuIFdpdGggdGhlIGZpeCwgaXQgcmV0dXJucyBob3N0X2J1c3kKIAkgIChwZXIgdGhlIHByZS1yZW1vdGUgcG9ydCBjaGFuZ2VzKS4KQEAgLTUzMCw3ICs1MzAsNyBAQAogCSAgY29oZXJlbnQgbWFwcGluZ3MuICBOb3RlOiBUaGVyZSBhcmUgbW9yZSBjb25zaXN0ZW50IG1hcHBpbmdzCiAJICB0aGF0IGFyZSB1c2luZyBwY2lfZG1hX3N5bmMgY2FsbHMuIFByb2JhYmx5IHRoZXNlIHNob3VsZCBiZQogCSAgcmVtb3ZlZCBhcyB3ZWxsLgotCSogTW9kaWZpZWQgbHBmY19mcmVlX3Njc2lfYnVmIHRvIGFjY29tb2RhdGUgYWxsIHRocmVlIHNjc2lfYnVmCisJKiBNb2RpZmllZCBscGZjX2ZyZWVfc2NzaV9idWYgdG8gYWNjb21tb2RhdGUgYWxsIHRocmVlIHNjc2lfYnVmCiAJICBmcmVlIHR5cGVzIHRvIGFsbGV2aWF0ZSBtaXNjZWxsYW5lb3VzIHBhbmljcyB3aXRoIGNhYmxlIHB1bGwKIAkgIHRlc3RpbmcuCiAJKiBTZXQgaG90cGx1ZyB0byBkZWZhdWx0IDAgYW5kIGxwZmNfdGFyZ2V0X3JlbW92ZSB0byBub3QgcmVtb3ZlCkBAIC01ODMsNyArNTgzLDcgQEAKIAkgIGluY2x1ZGVkIG1vcmUgdGhhbiBvbmNlLgogCSogUmVwbGFjZWQgInNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkgIHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCkiIHdpdGggIm1zbGVlcCh0aW1lb3V0KSIuCi0JKiBGaXhub2RlIHdhcyBsb29zaW5nIHN0YXJnZXQgd2hlbiByZWRpc2NvdmVyZWQuIFdlIHNhdyBtZXNzYWdlcworCSogRml4bm9kZSB3YXMgbG9zaW5nIHN0YXJnZXQgd2hlbiByZWRpc2NvdmVyZWQuIFdlIHNhdyBtZXNzYWdlcwogCSAgbGlrZTogbHBmYyAwMDAwOjA0OjAyLjA6IDA6MDI2MyBDYW5ub3QgYmxvY2sgc2NzaSB0YXJnZXQgYXMgYQogCSAgcmVzdWx0LiAgTW92ZWQgc3RhcmdldCBmaWVsZCBpbnRvIHN0cnVjdCBscGZjX3RhcmdldCB3aGljaCBpcwogCSAgcmVmZXJlbmNlZCBmcm9tIHRoZSBub2RlLgpAQCAtNjA0LDcgKzYwNCw3IEBACiAJKiBNYWtlIDMgZnVuY3Rpb25zIHN0YXRpYzogbHBmY19nZXRfaGJhX3N5bV9ub2RlX25hbWUsCiAJICBscGZjX2ludHJfcHJlcCBhbmQgbHBmY19zZXR1cF9zbGltX2FjY2Vzcy4gIE1vdmUgbHBmY19pbnRyX3ByZXAKIAkgIGFuZCBscGZjX3NldHVwX3NsaW1fYWNjZXNzIHNvIHRoZXkncmUgZGVmaW5lZCBiZWZvcmUgYmVpbmcgdXNlZC4KLQkqIFJlbW92ZSBhbiB1bmVjZXNzYXJ5IGxpc3RfZGVsKCkgaW4gbHBmY19oYmFkaXNjLmMuCisJKiBSZW1vdmUgYW4gdW5uZWNlc3NhcnkgbGlzdF9kZWwoKSBpbiBscGZjX2hiYWRpc2MuYy4KIAkqIFNldCBubHBfc3RhdGUgYmVmb3JlIGNhbGxpbmcgbHBmY19ubHBfbGlzdCgpIHNpbmNlIHRoaXMgd2lsbAogCSAgcG90ZW50aWFsbHkgY2FsbCBmY190YXJnZXRfdW5ibG9jayB3aGljaCBtYXkgY2F1c2UgYSByYWNlIGluCiAJICBxdWV1ZWNvbW1hbmQgYnkgcmVsZWFzaW5nIGhvc3RfbG9jay4KQEAgLTc1Myw3ICs3NTMsNyBAQAogCSogQ2hhbmdlZCB2ZXJzaW9uIG51bWJlciB0byA4LjAuMTIKIAkqIFJlbW92ZWQgdXNlZCAjZGVmaW5lczogREVGQVVMVF9QQ0lfTEFURU5DWV9DTE9DS1MgYW5kCiAJICBQQ0lfTEFURU5DWV9WQUxVRSBmcm9tIGxwZmNfaHcuaC4KLQkqIENoYW5nZXMgdG8gYWNjb21vZGF0ZSBybmlkLgorCSogQ2hhbmdlcyB0byBhY2NvbW1vZGF0ZSBybmlkLgogCSogRml4IFJTQ04gaGFuZGxpbmcgc28gUlNDTiBOUyBxdWVyaWVzIG9ubHkgZWZmZWN0IE5Qb3J0cyBmb3VuZCBpbgogCSAgUlNDTiBkYXRhLgogCSogSWYgd2UgcmN2IGEgcGxvZ2kgb24gYSBOUG9ydCBxdWV1ZWQgdXAgZm9yIGRpc2NvdmVyeSwgY2xlYXIgdGhlCkBAIC04MTMsNyArODEzLDcgQEAKIAkgIGNvdW50ZXIgaW5zdGVhZCwgYnJkX25vIGlzbid0IHJldXNlZCBhbnltb3JlLiAgQWxzbyBzb21lIHRpbnkKIAkgIHdoaXRlc3BhY2UgY2xlYW51cHMgaW4gc3Vycm91bmRpbmcgY29kZS4KIAkqIFJlb3JkZXIgZnVuY3Rpb25zIGluIGxwZmNfZWxzLmMgdG8gcmVtb3ZlIG5lZWQgZm9yIHByb3RvdHlwZXMuCi0JKiBSZW1vdmVkIHVuc2VkIHByb3RvdHlwZXMgZnJvbSBscGZjX2NydG4uaCAtCisJKiBSZW1vdmVkIHVudXNlZCBwcm90b3R5cGVzIGZyb20gbHBmY19jcnRuLmggLQogCSAgbHBmY19pcF90aW1lb3V0X2hhbmRsZXIsIGxwZmNfcmVhZF9wY2kgYW5kIGxwZmNfcmV2b2tlLgogCSogUmVtb3ZlZCBzb21lIHVudXNlZCBwcm90b3R5cGVzIGZyb20gbHBmY19jcnRuLmggLQogCSAgbHBmY19zY3NpX2hiYV9yZXNldCwgbHBmY19zY3NpX2lzc3VlX2lucXNuLApAQCAtODYzLDcgKzg2Myw3IEBACiAJKiBNaW5pbWFsIHN1cHBvcnQgZm9yIFNDU0kgZmxhdCBzcGFjZSBhZGRyZXNzaW5nL3ZvbHVtZSBzZXQKIAkgIGFkZHJlc3NpbmcuICBVc2UgMTYgYml0cyBvZiBMVU4gYWRkcmVzcyBzbyB0aGF0IGZsYXQKIAkgIGFkZHJlc3NpbmcvVlNBIHdpbGwgd29yay4KLQkqIENoYW5nZWQgMiBvY2N1cmVuY2VzIG9mIGlmKCAxICE9IGYoeCkpIHRvIGlmKGYoeCkgIT0gMSkKKwkqIENoYW5nZWQgMiBvY2N1cnJlbmNlcyBvZiBpZiggMSAhPSBmKHgpKSB0byBpZihmKHgpICE9IDEpCiAJKiBEcm9wIGluY2x1ZGUgb2YgbHBmY19jZmdwYXJtLmguCiAJKiBSZWR1Y2Ugc3RhY2sgdXNhZ2Ugb2YgbHBmY19mZG1pX2NtZCBpbiBscGZjX2N0LmMuCiAJKiBBZGQgbWluaW11bSByYW5nZSBjaGVja2luZyBwcm9wZXJ0eSB0byAvc3lzIHdyaXRlL3N0b3JlCkBAIC0xNDQ5LDcgKzE0NDksNyBAQAogCSogUmVtb3ZlZCBscGZjX2Vsc19jaGtfbGF0dCBmcm9tIHRoZSBscGZjX2NvbmZpZ19wb3N0IGZ1bmN0aW9uLgogCSAgbHBmY19lbHNfY2hrX2xhdHQgd2lsbCBlbmFibGUgdGhlIGxpbmsgZXZlbnQgaW50ZXJydXB0cyB3aGVuCiAJICBmbG9naSBpcyBwZW5kaW5nIHdoaWNoIGNhdXNlcyB0d28gZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmVzCi0JICBydW5uaW5nIHBhcmFsbGVseS4KKwkgIHJ1bm5pbmcgcGFyYWxsZWxseS4KIAkqIEFkZCBwY2lfZGlzYWJsZV9kZXZpY2UgdG8gdW5sb2FkIHBhdGguCiAJKiBNb3ZlIGxwZmNfc2xlZXBfZXZlbnQgZnJvbSBscGZjX2ZjcC5jIHRvIGxwZmNfdXRpbF9pb2N0bC5jCiAJKiBDYWxsIGRtYV9tYXBfc2luZ2xlKCkgJiBwY2lfbWFwX3NpbmdsZSgpIGRpcmVjdGx5IGluc3RlYWQgb2YgdmlhCkBAIC0xNTkwLDcgKzE1OTAsNyBAQAogCSAgRUxYX1dSSVRFX0hTIEVMWF9XUklURV9IQSBFTFhfV1JJVEVfQ0EgRUxYX1JFQURfSEMKIAkgIEVMWF9SRUFEX0hTIEVMWF9SRUFEX0hBIEVMWF9SRUFEX0NBIEVMWF9SRUFEX01CIEVMWF9SRVNFVAogCSAgRUxYX1JFQURfSEJBIEVMWF9JTlNUQU5DRSBFTFhfTElQLiAgQWxzbyBpbnRyb2R1Y2VkCi0JICBhdHRyaWJ1dGUgInNldCIgdG8gYmUgdXNlZCBpbiBjb25qdWN0aW9uIHdpdGggdGhlIGFib3ZlCisJICBhdHRyaWJ1dGUgInNldCIgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBhYm92ZQogCSAgYXR0cmlidXRlcy4KIAkqIFJlbW92ZWQgRExJTkssIGVucXVlIGFuZCBkZXF1ZSBkZWNsYXJhdGlvbnMgbm93IHRoYXQgY2xvY2sKIAkgIGRvZXNuJ3QgdXNlIHRoZW0gYW55bW9yZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZCBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKaW5kZXggNWUwN2QzMi4uZDIwNTJmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogMS4JU29ydGVkIG91dCBQQ0kgSURzIHRvIHJlbW92ZSBtZWdhcmFpZCBzdXBwb3J0IG92ZXJsYXBzLgogCUJhc2VkIG9uIHRoZSBwYXRjaCBmcm9tIERhbmllbCwgc29ydGVkIG91dCBQQ0kgSURzIGFsb25nIHdpdGgKLQljaGFyYWN0b3Igbm9kZSBuYW1lIGNoYW5nZSBmcm9tICdtZWdhZGV2JyB0byAnbWVnYWRldl9sZWdhY3knIHRvIGF2b2lkCisJY2hhcmFjdGVyIG5vZGUgbmFtZSBjaGFuZ2UgZnJvbSAnbWVnYWRldicgdG8gJ21lZ2FkZXZfbGVnYWN5JyB0byBhdm9pZAogCWNvbmZsaWN0LgogCS0tLQogCUhvcGVmdWxseSB3ZSdsbCBiZSBnZXR0aW5nIHRoZSBidWlsZCByZXN0cmljdGlvbiB6YXBwZWQgbXVjaCBzb29uZXIsIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHggYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm5jcjUzYzh4eAppbmRleCA4YjI3OGMxLi45Mjg4ZTNkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHgKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHgKQEAgLTIwMCw3ICsyMDAsNyBAQAogCSAgQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHVzZXMgYm90aCBJUlFGX1NIQVJFRCBhbmQgSVJRRl9ESVNBQkxFRC4KIAkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAogCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgotCS0gVGlueSBtaXNwZWxsaW5nIGZpeGVkIChBQk9SVCBpbnN0ZWFkIG9mIEFCUlQpLiBXYXMgZm9ydHVuYXRlbHkgCisJLSBUaW55IG1pc3NwZWxsaW5nIGZpeGVkIChBQk9SVCBpbnN0ZWFkIG9mIEFCUlQpLiBXYXMgZm9ydHVuYXRlbHkgCiAJICBoYXJtbGVzcy4KIAktIE5lZ290aWF0ZSBTWU5DIGRhdGEgdHJhbnNmZXJzIHdpdGggQ0NTIGRldmljZXMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHgKaW5kZXggMDJmZmJjMS4uYzE5MzM3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHgKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHgKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogU2F0IERlYyAxOSAgMjE6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKIAkqIHZlcnNpb24gc3ltNTNjOHh4LTEuMAogCS0gRGVmaW5lIHNvbWUgbmV3IElPIHJlZ2lzdGVycyBmb3IgdGhlIDg5NiAoaXN0YXQxLCBtYm94MCwgbWJveDEpCi0JLSBSZXZhbXAgc2xpZ2hseSB0aGUgU3ltYmlvcyBOVlJBTSBsYXktb3V0IGJhc2VkIG9uIHRoZSBleGNlcnB0IG9mIAorCS0gUmV2YW1wIHNsaWdodGx5IHRoZSBTeW1iaW9zIE5WUkFNIGxheS1vdXQgYmFzZWQgb24gdGhlIGV4Y2VycHQgb2YgCiAJICB0aGUgaGVhZGVyIGZpbGUgSSByZWNlaXZlZCBmcm9tIFN5bWJpb3MuCiAJLSBDaGVjayB0aGUgUENJIGJ1cyBudW1iZXIgZm9yIHRoZSBib290IG9yZGVyIChVc2luZyBhIGZhc3QgCiAJICBQQ0kgY29udHJvbGxlciBiZWhpbmcgYSBQQ0ktUENJIGJyaWRnZSBzZWVtcyBzdWItb3B0aW1hbCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQKaW5kZXggMjljZTZkOC4uOTQ4NDg3MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FoYTE1MngudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dApAQCAtMTI0LDcgKzEyNCw3IEBACiB0aGUgcmlnaHQgZ2VvbWV0cnkgdG8gYmUgYWJsZSB0byBpbnRlcnByZXQgaXQuCiAKIE1vcmVvdmVyIHRoZXJlIGFyZSBjZXJ0YWluIGxpbWl0YXRpb25zIHRvIHRoZSBDL0gvUyBhZGRyZXNzaW5nIHNjaGVtZSwKLW5hbWVseSB0aGUgYWRkcmVzcyBzcGFjZSBpcyBsaW1pdGVkIHRvIHVwdG8gMjU1IGhlYWRzLCB1cHRvIDYzIHNlY3RvcnMKK25hbWVseSB0aGUgYWRkcmVzcyBzcGFjZSBpcyBsaW1pdGVkIHRvIHVwIHRvIDI1NSBoZWFkcywgdXAgdG8gNjMgc2VjdG9ycwogYW5kIGEgbWF4aW11bSBvZiAxMDIzIGN5bGluZGVycy4KIAogVGhlIEFIQS0xNTIyIEJJT1MgY2FsY3VsYXRlcyB0aGUgZ2VvbWV0cnkgYnkgZml4aW5nIHRoZSBudW1iZXIgb2YgaGVhZHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dAppbmRleCAxNmUwNTRjLi42NGFjNzA5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzc5eHgudHh0CkBAIC0yNjcsNyArMjY3LDcgQEAKICAgICAgICAgICAgICAgT3B0aW9uOiB0YWdfaW5mbzp7e3ZhbHVlWyx2YWx1ZS4uLl19Wyx7dmFsdWVbLHZhbHVlLi4uXX0uLi5dfQogICAgICAgICAgIERlZmluaXRpb246IFNldCB0aGUgcGVyLXRhcmdldCB0YWdnZWQgcXVldWUgZGVwdGggb24gYQogICAgICAgICAgICAgICAgICAgICAgIHBlciBjb250cm9sbGVyIGJhc2lzLiAgQm90aCBjb250cm9sbGVycyBhbmQgdGFyZ2V0cwotICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQgdGhleSBzaG91bGQgcmV0YWluCisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG9taXR0ZWQgaW5kaWNhdGluZyB0aGF0IHRoZXkgc2hvdWxkIHJldGFpbgogICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHRhZyBkZXB0aC4KICAgICAgICAgICAgIEV4YW1wbGVzOiB0YWdfaW5mbzp7ezE2LDMyLDMyLDY0LDgsOCwsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJ9CiAgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKQEAgLTI5MSw3ICsyOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIFRoZSByZF9zdHJtX2JpdG1hc2sgaXMgYSAxNiBiaXQgaGV4IHZhbHVlIGluIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBiaXQgcmVwcmVzZW50cyBhIHRhcmdldC4gIFNldHRpbmcgdGhlIHRhcmdldCdzCiAgICAgICAgICAgICAgICAgICAgICAgYml0IHRvICcxJyBlbmFibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LiAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC4gIENvbnRyb2xsZXJzIG1heSBiZSBvbWl0dGVkIGluZGljYXRpbmcgdGhhdAogICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgogICAgICAgICAgICAgIEV4YW1wbGU6IHJkX3N0cm06ezB4MDA0MX0KICAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMApAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBPcHRpb246IGR2OiB7dmFsdWVbLHZhbHVlLi4uXX0KICAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgRG9tYWluIFZhbGlkYXRpb24gUG9saWN5IG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFzaXMuCi0gICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbWl0dGVkIGluZGljYXRpbmcgdGhhdAogICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgogICAgICAgICAgICAgIEV4YW1wbGU6IGR2OnstMSwwLCwxLDEsMH0KICAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBsZWF2ZSBEViBhdCBpdHMgZGVmYXVsdCBzZXR0aW5nLgpAQCAtMzQwLDcgKzM0MCw3IEBACiAgICAgICAgICAgICAgIE9wdGlvbjogcHJlY29tcDoge3ZhbHVlWyx2YWx1ZS4uLl19CiAgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IElPIENlbGwgcHJlY29tcGVuc2F0aW9uIHZhbHVlIG9uIGEgcGVyLWNvbnRyb2xsZXIKICAgICAgICAgICAgICAgICAgICAgICBiYXNpcy4KLSAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9taXR0ZWQgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgcmV0YWluIHRoZSBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiBzZXR0aW5nLgogICAgICAgICAgICAgIEV4YW1wbGU6IHByZWNvbXA6ezB4MX0KICAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCkBAIC0zNTMsNyArMzUzLDcgQEAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIE9wdGlvbjogc2xld3JhdGU6IHt2YWx1ZVssdmFsdWUuLi5dfQogICAgICAgICAgIERlZmluaXRpb246IFNldCBJTyBDZWxsIHNsZXcgcmF0ZSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgotICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21pdHRlZCBpbmRpY2F0aW5nIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgc2xldyByYXRlIHNldHRpbmcuCiAgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGU6ezB4MX0KICAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgc2xldyByYXRlIHRvIDEuCkBAIC0zNjYsNyArMzY2LDcgQEAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIE9wdGlvbjogYW1wbGl0dWRlOiB7dmFsdWVbLHZhbHVlLi4uXX0KICAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgSU8gQ2VsbCBzaWduYWwgYW1wbGl0dWRlIG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFzaXMuCi0gICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbWl0dGVkIGluZGljYXRpbmcgdGhhdAogICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgogICAgICAgICAgICAgIEV4YW1wbGU6IGFtcGxpdHVkZTp7MHgxfQogICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQKaW5kZXggNDVkNjFhZC4uYWM0MWE5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQKQEAgLTMwMyw3ICszMDMsNyBAQAogICAgKHNjYikgYW5kIGNhbGxzIGEgbG9jYWwgZnVuY3Rpb24gaXNzdWVfY21kKCksIHdoaWNoIHdyaXRlcyBhIHNjYiAKICAgIGNvbW1hbmQgaW50byBzdWJzeXN0ZW0gSS9PIHBvcnRzLiBPbmNlIHRoZSBzY2IgY29tbWFuZCBpcyBjYXJyaWVkIG91dCwgCiAgICB0aGUgaW50ZXJydXB0X2hhbmRsZXIoKSBpcyBpbnZva2VkLiBJZiBhIGRldmljZSBpcyBkZXRlcm1pbmVkIHRvIGJlIAotICAgZXhpc3RhbnQgYW5kIGl0IGhhcyBub3QgYXNzaWduZWQgYW55IGxkbiwgaXQgZ2V0cyBvbmUgZHluYW1pY2FsbHkuCisgICBleGlzdGVudCBhbmQgaXQgaGFzIG5vdCBhc3NpZ25lZCBhbnkgbGRuLCBpdCBnZXRzIG9uZSBkeW5hbWljYWxseS4KICAgIEZvciB0aGlzLCB0aGUgd2hvbGUgc3R1ZmYgaXMgZG9uZSBpbiBpYm1tY2FfcXVldWVjb21tYW5kKCkuCiAKICAgIDIuNiBBYm9ydCAmIFJlc2V0IENvbW1hbmRzCkBAIC03NDEsNyArNzQxLDcgQEAKICAgICAgIHNvbWUgZXJyb3IgYXBwZWFyZWQsIGVsc2UgaXQgaXMgdW5kZWZpbmVkLiBOb3csIHRoaXMgaXMgZml4ZWQuIEJlZm9yZQogICAgICAgYW55IFNDQiBjb21tYW5kIGdldHMgcXVldWVkLCB0aGUgdHNiLmRldl9zdGF0dXMgaXMgc2V0IHRvIDAsIHNvIHRoZSAKICAgICAgIGNtZC0+cmVzdWx0IHdvbid0IHNjcmV3IHVwIExpbnV4IGhpZ2hlciBsZXZlbCBkcml2ZXJzLgotICAgMikgVGhlIHJlc2V0LWZ1bmN0aW9uIGhhcyBzbGlnaHRseSBpbXByb3ZlZC4gVGhpcyBpcyBzdGlsbCBwbGFuZWQgZm9yIAorICAgMikgVGhlIHJlc2V0LWZ1bmN0aW9uIGhhcyBzbGlnaHRseSBpbXByb3ZlZC4gVGhpcyBpcyBzdGlsbCBwbGFubmVkIGZvciAKICAgICAgIGFib3J0LiBEdXJpbmcgdGhlIGFib3J0IGFuZCB0aGUgcmVzZXQgZnVuY3Rpb24sIG5vIGludGVycnVwdHMgYXJlIAogICAgICAgYWxsb3dlZC4gVGhpcyBpcyBob3dldmVyIHF1aXRlIGhhcmQgdG8gY29wZSB3aXRoLCBzbyB0aGUgSU5ULXN0YXR1cwogICAgICAgcmVnaXN0ZXIgaXMgcmVhZC4gV2hlbiB0aGUgaW50ZXJydXB0IGdldHMgcXVldWVkLCBvbmUgY2FuIGZpbmQgaXRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1jaGFuZ2VyLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLWNoYW5nZXIudHh0CmluZGV4IDAzMjM5OWIuLmFkZTA0NmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLWNoYW5nZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLWNoYW5nZXIudHh0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogSWYgeW91IGluc21vZCB0aGUgZHJpdmVyIHdpdGggImluc21vZCBkZWJ1Zz0xIiwgaXQgd2lsbCBiZSB2ZXJib3NlIGFuZAogcHJpbnRzIGEgbG90IG9mIHN0dWZmIHRvIHRoZSBzeXNsb2cuICBDb21waWxpbmcgdGhlIGtlcm5lbCB3aXRoCi1DT05GSUdfU0NTSV9DT05TVEFOVFM9eSBpbXByb3ZlcyB0aGUgcXVhbGl0eSBvZiB0aGUgZXJyb3IgbWVzc2FnZXMgYWxvdAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkgaW1wcm92ZXMgdGhlIHF1YWxpdHkgb2YgdGhlIGVycm9yIG1lc3NhZ2VzIGEgbG90CiBiZWNhdXNlIHRoZSBrZXJuZWwgd2lsbCB0cmFuc2xhdGUgdGhlIGVycm9yIGNvZGVzIGludG8gaHVtYW4tcmVhZGFibGUKIHN0cmluZ3MgdGhlbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0CmluZGV4IDdhY2JlYmIuLjZmZjE2YjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQKQEAgLTI5MCw3ICsyOTAsNyBAQAogCVNDU0kgdHJhbnNwb3J0cy9MTEREcyBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgc2Vuc2UgZGF0YSBvbgogCWNvbW1hbmQgZmFpbHVyZXMgKGF1dG9zZW5zZSkuICBBdXRvc2Vuc2UgaXMgcmVjb21tZW5kZWQgZm9yCiAJcGVyZm9ybWFuY2UgcmVhc29ucyBhbmQgYXMgc2Vuc2UgaW5mb3JtYXRpb24gY291bGQgZ2V0IG91dCBvZgotCXN5bmMgaW5iZXR3ZWVuIG9jY3VycmVuY2Ugb2YgQ0hFQ0sgQ09ORElUSU9OIGFuZCB0aGlzIGFjdGlvbi4KKwlzeW5jIGJldHdlZW4gb2NjdXJyZW5jZSBvZiBDSEVDSyBDT05ESVRJT04gYW5kIHRoaXMgYWN0aW9uLgogCiAJTm90ZSB0aGF0IGlmIGF1dG9zZW5zZSBpcyBub3Qgc3VwcG9ydGVkLCBzY21kLT5zZW5zZV9idWZmZXIKIAljb250YWlucyBpbnZhbGlkIHNlbnNlIGRhdGEgd2hlbiBlcnJvci1jb21wbGV0aW5nIHRoZSBzY21kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9mY190cmFuc3BvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZmNfdHJhbnNwb3J0LnR4dAppbmRleCBlMDAxOTJkLi5mNzkyODJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9mY190cmFuc3BvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2ZjX3RyYW5zcG9ydC50eHQKQEAgLTI5MSw3ICsyOTEsNyBAQAogVnBvcnQgc3VwcG9ydCBieSBMTEREOgogCiAgIFRoZSBMTEREIGluZGljYXRlcyBzdXBwb3J0IGZvciB2cG9ydHMgYnkgc3VwcGx5aW5nIGEgdnBvcnRfY3JlYXRlKCkKLSAgZnVuY3Rpb24gaW4gdGhlIHRyYW5zcG9ydCB0ZW1wbGF0ZS4gIFRoZSBwcmVzZW5zZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAgZnVuY3Rpb24gaW4gdGhlIHRyYW5zcG9ydCB0ZW1wbGF0ZS4gIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwKICAgY2F1c2UgdGhlIGNyZWF0aW9uIG9mIHRoZSBuZXcgYXR0cmlidXRlcyBvbiB0aGUgZmNfaG9zdC4gIEFzIHBhcnQgb2YKICAgdGhlIHBoeXNpY2FsIHBvcnQgY29tcGxldGluZyBpdHMgaW5pdGlhbGl6YXRpb24gcmVsYXRpdmUgdG8gdGhlCiAgIHRyYW5zcG9ydCwgaXQgc2hvdWxkIHNldCB0aGUgbWF4X25waXZfdnBvcnRzIGF0dHJpYnV0ZSB0byBpbmRpY2F0ZSB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjOHh4XzIudHh0CmluZGV4IDZmNjNiNzkuLjZhZjhmN2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzh4eF8yLnR4dApAQCAtMjg1LDcgKzI4NSw3IEBACiAKIDcuIFByb2ZpbGluZyBpbmZvcm1hdGlvbgogCi1UaGlzIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIHByb2ZpbGluZyBpbmZvcm1hdGlvbnMgYXMgZGlkIGl0cyBwcmVkZWNlc3NvcnMuCitUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIHByb2ZpbGluZyBpbmZvcm1hdGlvbiBhcyBkaWQgaXRzIHByZWRlY2Vzc29ycy4KIFRoaXMgZmVhdHVyZSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBjb2RlLiAKIEFzIHRoZSBkcml2ZXIgY29kZSBnb3QgbW9yZSBjb21wbGV4LCBJIGhhdmUgZGVjaWRlZCB0byByZW1vdmUgZXZlcnl0aGluZyAKIHRoYXQgZGlkbid0IHNlZW0gYWN0dWFsbHkgdXNlZnVsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbW94YS1zbWFydGlvIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbW94YS1zbWFydGlvCmluZGV4IGQxMDQ0MzkuLjVkMmEzM2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2VyaWFsL21veGEtc21hcnRpbworKysgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC9tb3hhLXNtYXJ0aW8KQEAgLTQ3Myw3ICs0NzMsNyBAQAogICAgc3BkX25vcm1hbAkgIFVzZSAgMzguNGtiICB3aGVuICB0aGUgYXBwbGljYXRpb24gcmVxdWVzdHMgMzguNGtiLgogICAgc3BkX2N1c3QJICBVc2UgIHRoZSBjdXN0b20gZGl2aXNvciB0byBzZXQgdGhlIHNwZWVkIHdoZW4gIHRoZQogCQkgIGFwcGxpY2F0aW9uIHJlcXVlc3RzIDM4LjRrYi4KLSAgIGRpdmlzb3IJICBUaGlzIG9wdGlvbiBzZXQgdGhlIGN1c3RvbSBkaXZpc29uLgorICAgZGl2aXNvcgkgIFRoaXMgb3B0aW9uIHNldCB0aGUgY3VzdG9tIGRpdmlzaW9uLgogICAgYmF1ZF9iYXNlCSAgVGhpcyBvcHRpb24gc2V0IHRoZSBiYXNlIGJhdWQgcmF0ZS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsL25fZ3NtLnR4dCBiL0RvY3VtZW50YXRpb24vc2VyaWFsL25fZ3NtLnR4dAppbmRleCAzOTdmNDFhLi5hNWQ5MTEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC9uX2dzbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbl9nc20udHh0CkBAIC0zNCw3ICszNCw3IEBACiAJLyogY29uZmlndXJlIHRoZSBzZXJpYWwgcG9ydCA6IHNwZWVkLCBmbG93IGNvbnRyb2wgLi4uICovCiAKIAkvKiBzZW5kIHRoZSBBVCBjb21tYW5kcyB0byBzd2l0Y2ggdGhlIG1vZGVtIHRvIENNVVggbW9kZQotCSAgIGFuZCBjaGVjayB0aGF0IGl0J3Mgc3VjY2VzZnVsIChzaG91bGQgcmV0dXJuIE9LKSAqLworCSAgIGFuZCBjaGVjayB0aGF0IGl0J3Mgc3VjY2Vzc2Z1bCAoc2hvdWxkIHJldHVybiBPSykgKi8KIAl3cml0ZShmZCwgIkFUK0NNVVg9MFxyIiwgMTApOwogCiAJLyogZXhwZXJpZW5jZSBzaG93ZWQgdGhhdCBzb21lIG1vZGVtcyBuZWVkIHNvbWUgdGltZSBiZWZvcmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggM2MxZWRkZC4uOTgyMmFmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTMyMiw3ICszMjIsNyBAQAogICAgICJwb3J0IiBuZWVkcyB0byBtYXRjaCB0aGUgQkFTRSBBRERSRVNTIGp1bXBlciBvbiB0aGUgY2FyZCAoMHgyMjAgb3IgMHgyNDApCiAgICAgb3IgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgY2FyZCdzIEVFUFJPTSBmb3IgY2FyZHMgdGhhdCBoYXZlIGFuIEVFUFJPTSBhbmQKICAgICB0aGVpciAiQ09ORklHIE1PREUiIGp1bXBlciBzZXQgdG8gIkVFUFJPTSBTRVRUSU5HIi4gVGhlIG90aGVyIHZhbHVlcyBjYW4KLSAgICBiZSBjaG9vc2VuIGZyZWVseSBmcm9tIHRoZSBvcHRpb25zIGVudW1lcmF0ZWQgYWJvdmUuCisgICAgYmUgY2hvc2VuIGZyZWVseSBmcm9tIHRoZSBvcHRpb25zIGVudW1lcmF0ZWQgYWJvdmUuCiAKICAgICBJZiBkbWEyIGlzIHNwZWNpZmllZCBhbmQgZGlmZmVyZW50IGZyb20gZG1hMSwgdGhlIGNhcmQgd2lsbCBvcGVyYXRlIGluCiAgICAgZnVsbC1kdXBsZXggbW9kZS4gV2hlbiBkbWExPTMsIG9ubHkgZG1hMj0wIGlzIHZhbGlkIGFuZCB0aGUgb25seSB3YXkgdG8KQEAgLTM1Niw3ICszNTYsNyBAQAogICAgICJwb3J0IiBuZWVkcyB0byBtYXRjaCB0aGUgQkFTRSBBRERSRVNTIGp1bXBlciBvbiB0aGUgY2FyZCAoMHgyMjAgb3IgMHgyNDApCiAgICAgb3IgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgY2FyZCdzIEVFUFJPTSBmb3IgY2FyZHMgdGhhdCBoYXZlIGFuIEVFUFJPTSBhbmQKICAgICB0aGVpciAiQ09ORklHIE1PREUiIGp1bXBlciBzZXQgdG8gIkVFUFJPTSBTRVRUSU5HIi4gVGhlIG90aGVyIHZhbHVlcyBjYW4KLSAgICBiZSBjaG9vc2VuIGZyZWVseSBmcm9tIHRoZSBvcHRpb25zIGVudW1lcmF0ZWQgYWJvdmUuCisgICAgYmUgY2hvc2VuIGZyZWVseSBmcm9tIHRoZSBvcHRpb25zIGVudW1lcmF0ZWQgYWJvdmUuCiAKICAgICBJZiBkbWEyIGlzIHNwZWNpZmllZCBhbmQgZGlmZmVyZW50IGZyb20gZG1hMSwgdGhlIGNhcmQgd2lsbCBvcGVyYXRlIGluCiAgICAgZnVsbC1kdXBsZXggbW9kZS4gV2hlbiBkbWExPTMsIG9ubHkgZG1hMj0wIGlzIHZhbGlkIGFuZCB0aGUgb25seSB3YXkgdG8KQEAgLTIyMjksNyArMjIyOSw3IEBACiAKIC9wcm9jL2Fzb3VuZC9jYXJkIy9wY20jW2NwXS9vc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgU3RyaW5nICJlcmFzZSIgLSBlcmFzZSBhbGwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbnMgYWJvdXQgT1NTIGFwcGxpY2F0aW9ucworICBTdHJpbmcgImVyYXNlIiAtIGVyYXNlIGFsbCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IE9TUyBhcHBsaWNhdGlvbnMKICAgU3RyaW5nICI8YXBwX25hbWU+IDxmcmFnbWVudHM+IDxmcmFnbWVudF9zaXplPiBbPG9wdGlvbnM+XSIKIAogICAgPGFwcF9uYW1lPiAtIG5hbWUgb2YgYXBwbGljYXRpb24gd2l0aCAoaGlnaGVyIHByaW9yaXR5KSBvciB3aXRob3V0IHBhdGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dAppbmRleCBmNTYzOWQ0Li5mNGI1OTg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvU0ItTGl2ZS1taXhlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0CkBAIC04NywxNCArODcsMTQgQEAKIFRoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCiBQQ00gZGV2aWNlKS4KIAotbmFtZT0nTXVzaWMgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCituYW1lPSdTeW50aCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKIAogVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgRlgtYnVzCiBhY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBzYW1wbGVzLgogVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCiAKLW5hbWU9J011c2ljIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCi1uYW1lPSdNdXNpYyBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorbmFtZT0nU3ludGggQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKK25hbWU9J1N5bnRoIENhcHR1cmUgU3dpdGNoJyxpbmRleD0wCiAKIFRoZXNlIGNvbnRyb2xzIGFyZSB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNSURJIEZYLWJ1cwogYWNjdW11bGF0b3IuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQXVkaW9FeGNlbERTUDE2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQXVkaW9FeGNlbERTUDE2CmluZGV4IGMwZjA4OTIuLmUwZGMwNjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0F1ZGlvRXhjZWxEU1AxNgorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BdWRpb0V4Y2VsRFNQMTYKQEAgLTEsMTAgKzEsMTAgQEAKIERyaXZlcgogLS0tLS0tCiAKLUluZm9ybWF0aW9ucyBhYm91dCBBdWRpbyBFeGNlbCBEU1AgMTYgZHJpdmVyIGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlCitJbmZvcm1hdGlvbiBhYm91dCBBdWRpbyBFeGNlbCBEU1AgMTYgZHJpdmVyIGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlCiBmaWxlIGFlZHNwMTYuYwogUGxlYXNlLCByZWFkIHRoZSBoZWFkIG9mIHRoZSBzb3VyY2UgYmVmb3JlIHVzaW5nIGl0LiBJdCBjb250YWluIHVzZWZ1bAotaW5mb3JtYXRpb25zLgoraW5mb3JtYXRpb24uCiAKIENvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0KQEAgLTY4LDcgKzY4LDcgQEAKIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBTQy02MDAwIGFuZCBTQy02NjAwIGJhc2VkIEdhbGxhbnQncyBzb3VuZCBjYXJkLgogSXQgZG9uJ3Qgc3VwcG9ydCB0aGUgQXVkaW8gRXhjZWwgRFNQIDE2IElJSSAodHJ5IHRoZSBTQy02NjAwIGNvZGUpLgogSSdtIHdvcmtpbmcgb24gdGhlIElJSSB2ZXJzaW9uIG9mIHRoZSBjYXJkOiBpZiBzb21lb25lIGhhdmUgdXNlZnVsCi1pbmZvcm1hdGlvbnMgYWJvdXQgaXQsIHBsZWFzZSBsZXQgbWUga25vdy4KK2luZm9ybWF0aW9uIGFib3V0IGl0LCBwbGVhc2UgbGV0IG1lIGtub3cuCiBGb3IgYWxsIHRoZSBub24tc3VwcG9ydGVkIGF1ZGlvIGNhcmRzLCB5b3UgaGF2ZSB0byBib290IE1TLURPUyAob3IgV0lOOTUpCiBhY3RpdmF0aW5nIHRoZSBhdWRpbyBjYXJkIHdpdGggdGhlIE1TLURPUyBkZXZpY2UgZHJpdmVyLCB0aGVuIHlvdSBoYXZlIHRvCiA8Y3RybD4tPGFsdD4tPGRlbD4gYW5kIGJvb3QgTGludXguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLk9TUwppbmRleCBjNjE1ZGViLi40YmUyNTk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MKQEAgLTEzNTIsNyArMTM1Miw3IEBACiBUaGUgUENNMjAgY29udGFpbnMgYSByYWRpbyB0dW5lciwgd2hpY2ggaXMgYWxzbyBjb250cm9sbGVkIGJ5CiBBQ0kuIFRoaXMgcmFkaW8gdHVuZXIgaXMgc3VwcG9ydGVkIGJ5IHRoZSBBQ0kgZHJpdmVyIHRvZ2V0aGVyIHdpdGggdGhlCiBtaXJvcGNtMjAubyBtb2R1bGUuIEFsc28gdGhlIDctYmFuZCBlcXVhbGl6ZXIgaXMgaW50ZWdyYXRlZAotKGxpbWl0ZWQgYnkgdGhlIE9TUy1kZXNpZ24pLiBEZXZlbG9wZW1lbnQgaGFzIHN0YXJ0ZWQgYW5kIG1heWJlCisobGltaXRlZCBieSB0aGUgT1NTLWRlc2lnbikuIERldmVsb3BtZW50IGhhcyBzdGFydGVkIGFuZCBtYXliZQogZmluaXNoZWQgZm9yIHRoZSBSRFMgZGVjb2RlciBvbiB0aGlzIGNhcmQsIHRvby4gWW91IHdpbGwgYmUgYWJsZSB0bwogcmVhZCBSYWRpb1RleHQsIHRoZSBQcm9ncmFtbWUgU2VydmljZSBuYW1lLCBQcm9ncmFtbWUgVFlwZSBhbmQKIG90aGVycy4gRXZlbiB0aGUgdjRsIHJhZGlvIG1vZHVsZSBiZW5lZml0cyBmcm9tIGl0IHdpdGggYSByZWZpbmVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUueW1mc2IgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUueW1mc2IKaW5kZXggYWY4YTdkMy4uYjZiNzc5MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLnltZnNiCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS55bWZzYgpAQCAtNSw3ICs1LDcgQEAKID09PT09PT09PT09PQogCiAgIFRoaXMgY29kZSByZWZlcmVuY2VzIFlBTUFIQSdzIHNhbXBsZSBjb2RlcyBhbmQgZGF0YSBzaGVldHMuCi0gIEkgcmVzcGVjdCBhbmQgdGhhbmsgZm9yIGFsbCBwZW9wbGUgdGhleSBtYWRlIG9wZW4gdGhlIGluZm9ybWF0aW9ucworICBJIHJlc3BlY3QgYW5kIHRoYW5rIGZvciBhbGwgcGVvcGxlIHRoZXkgbWFkZSBvcGVuIHRoZSBpbmZvcm1hdGlvbgogICBhYm91dCBZTUY3eHggY2FyZHMuCiAKICAgQW5kIHRoaXMgY29kZXMgaGVhdmlseSBiYXNlZCBvbiBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+J3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eCBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eAppbmRleCA2OGE0ZmUzLi40OTNkYWRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CkBAIC0xNDMsNyArMTQzLDcgQEAKIE5PVEU6IHRoZSBTUEkgZHJpdmVyIGNhbm5vdCBjb250cm9sIHRoZSBjaGlwIHNlbGVjdCBpZiBTU1BGUk0gaXMgdXNlZCwgc28gdGhlCiBjaGlwc2VsZWN0IGlzIGRyb3BwZWQgYWZ0ZXIgZWFjaCBzcGlfdHJhbnNmZXIuICBNb3N0IGRldmljZXMgbmVlZCBjaGlwIHNlbGVjdAogYXNzZXJ0ZWQgYXJvdW5kIHRoZSBjb21wbGV0ZSBtZXNzYWdlLiAgVXNlIFNTUEZSTSBhcyBhIEdQSU8gKHRocm91Z2ggY3NfY29udHJvbCkKLXRvIGFjY29tb2RhdGUgdGhlc2UgY2hpcHMuCit0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGlwcy4KIAogCiBOU1NQIFNMQVZFIFNBTVBMRQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLWxtNzBsbHAgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktbG03MGxscAppbmRleCAzNGE5Y2ZkLi40NjNmNmQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktbG03MGxscAorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktbG03MGxscApAQCAtNDYsNyArNDYsNyBAQAogCiBOb3RlIHRoYXQgc2luY2UgdGhlIExNNzAgdXNlcyBhICIzLXdpcmUiIHZhcmlhbnQgb2YgU1BJLCB0aGUgU0kvU08gcGluCiBpcyBjb25uZWN0ZWQgdG8gYm90aCBwaW4gRDcgKGFzIE1hc3RlciBPdXQpIGFuZCBTZWxlY3QgKGFzIE1hc3RlciBJbikKLXVzaW5nIGFuIGFycmFuZ21lbnQgdGhhdCBsZXRzIGVpdGhlciB0aGUgcGFycG9ydCBvciB0aGUgTE03MCBwdWxsIHRoZQordXNpbmcgYW4gYXJyYW5nZW1lbnQgdGhhdCBsZXRzIGVpdGhlciB0aGUgcGFycG9ydCBvciB0aGUgTE03MCBwdWxsIHRoZQogcGluIGxvdy4gIFRoaXMgY2FuJ3QgYmUgc2hhcmVkIHdpdGggdHJ1ZSBTUEkgZGV2aWNlcywgYnV0IG90aGVyIDMtd2lyZQogZGV2aWNlcyBtaWdodCBzaGFyZSB0aGUgc2FtZSBTSS9TTyBwaW4uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQgYi9Eb2N1bWVudGF0aW9uL3RlbGVwaG9ueS9peGoudHh0CmluZGV4IDRmYjMxNGQuLmRiOTRmYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWxlcGhvbnkvaXhqLnR4dApAQCAtNTEsNyArNTEsNyBAQAogU3BlY2lmaWNhbGx5LCB2ZXJ5IG9sZCBJbnRlcm5ldCBQaG9uZUpBQ0sgY2FyZHMgaGF2ZSBub24tc3RhbmRhcmQKIEcuNzIzLjEgY29kZWNzIChkdWUgdG8gdGhlIGVhcmx5IG5hdHVyZSBvZiB0aGUgRFNQcyBpbiB0aG9zZSBkYXlzKS4KIFRoZSBhdXRvLWNvbnZlcnNpb24gY29kZSB0byBicmluZyB0aG9zZSBjYXJkcyBpbnRvIGNvbXBsaWFuY2Ugd2l0aAotdG9kYXlzIHN0YW5kYXJkcyBpcyBhdmFpbGFibGUgYXMgYSBiaW5hcnkgb25seSBtb2R1bGUgdG8gdGhvc2UgcGVvcGxlCit0b2RheSdzIHN0YW5kYXJkcyBpcyBhdmFpbGFibGUgYXMgYSBiaW5hcnkgb25seSBtb2R1bGUgdG8gdGhvc2UgcGVvcGxlCiBuZWVkaW5nIGl0LiAgSWYgeW91IGJvdWdodCB5b3VyIGNhcmQgYWZ0ZXIgMTk5NyBvciBzbywgeW91IGFyZSBPSyAtCiBpdCdzIG9ubHkgdGhlIHZlcnkgb2xkIGNhcmRzIHRoYXQgYXJlIGFmZmVjdGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3JpbmctYnVmZmVyLWRlc2lnbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL3JpbmctYnVmZmVyLWRlc2lnbi50eHQKaW5kZXggZDI5OWZmMy4uN2QzNTBiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9yaW5nLWJ1ZmZlci1kZXNpZ24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvcmluZy1idWZmZXItZGVzaWduLnR4dApAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgICB8d3JpdHRlbiAgfAogICAgICAgKy0tLS0tLS0tLSsKICAgICAgIHx3cml0dGVuICB8Ci0gICAgICArLS0tLS0tLS0tKyAgPC0tLSBuZXh0IHBvc2l0b24gZm9yIHdyaXRlIChjdXJyZW50IGNvbW1pdCkKKyAgICAgICstLS0tLS0tLS0rICA8LS0tIG5leHQgcG9zaXRpb24gZm9yIHdyaXRlIChjdXJyZW50IGNvbW1pdCkKICAgICAgIHwgZW1wdHkgICB8CiAgICAgICArLS0tLS0tLS0tKwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5wdnJ1c2IyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUucHZydXNiMgppbmRleCBhNzQ3MjAwLi4yMTM3YjU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5wdnJ1c2IyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnB2cnVzYjIKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgIHRvIHByb3ZpZGUgYSBzdHJlYW1pbmcgQVBJIHVzYWJsZSBieSBhIHJlYWQoKSBzeXN0ZW0gY2FsbCBzdHlsZSBvZgogICAgIEkvTy4gIFJpZ2h0IG5vdyB0aGlzIGlzIHRoZSBvbmx5IGxheWVyIG9uIHRvcCBvZiBwdnJ1c2IyLWlvLltjaF0sCiAgICAgaG93ZXZlciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgaGVyZSB3YXMgaW50ZW5kZWQgdG8gYWxsb3cgZm9yCi0gICAgb3RoZXIgc3R5bGVzIG9mIEkvTyB0byBiZSBpbXBsZW1lbnRlZCB3aXRoIGFkZGl0b25hbCBtb2R1bGVzLCBsaWtlCisgICAgb3RoZXIgc3R5bGVzIG9mIEkvTyB0byBiZSBpbXBsZW1lbnRlZCB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlcywgbGlrZQogICAgIG1tYXAoKSdlZCBidWZmZXJzIG9yIHNvbWV0aGluZyBldmVuIG1vcmUgZXhvdGljLgogCiAgIHB2cnVzYjItbWFpbi5jIC0gVGhpcyBpcyB0aGUgdG9wIGxldmVsIG9mIHRoZSBkcml2ZXIuICBNb2R1bGUgbGV2ZWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwppbmRleCBiYmUzZWQ2Li4xNGMwNjVmYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwpAQCAtMSw1ICsxLDUgQEAKIAotTm90ZTogIm1vZGluZm8gPG1vZHVsZT4iIHByaW50cyB2YXJpb3VzIGluZm9ybWF0aW9ucyBhYm91dCBhIGtlcm5lbAorTm90ZTogIm1vZGluZm8gPG1vZHVsZT4iIHByaW50cyB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IGEga2VybmVsCiBtb2R1bGUsIGFtb25nIHRoZW0gYSBjb21wbGV0ZSBhbmQgdXAtdG8tZGF0ZSBsaXN0IG9mIGluc21vZCBvcHRpb25zLgogVGhpcyBsaXN0IHRlbmRzIHRvIGJlIG91dGRhdGVkIGJlY2F1c2UgaXQgaXMgdXBkYXRlZCBtYW51YWxseSAuLi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKaW5kZXggM2EzNjdjZC4uN2NiZjRmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCkBAIC03MCw3ICs3MCw3IEBACiBpbnN0ZWFkIG9mIG1haWxpbmcgbWUgZGlyZWN0bHkuICBUaGUgY2hhbmNlIHRoYXQgc29tZW9uZSB3aXRoIHRoZQogc2FtZSBjYXJkIGxpc3RlbnMgdGhlcmUgaXMgbXVjaCBoaWdoZXIuLi4KIAotRm9yIHByb2JsZW1zIHdpdGggc291bmQ6ICBUaGVyZSBhcmUgYWxvdCBvZiBkaWZmZXJlbnQgc3lzdGVtcyB1c2VkCitGb3IgcHJvYmxlbXMgd2l0aCBzb3VuZDogIFRoZXJlIGFyZSBhIGxvdCBvZiBkaWZmZXJlbnQgc3lzdGVtcyB1c2VkCiBmb3IgVFYgc291bmQgYWxsIG92ZXIgdGhlIHdvcmxkLiAgQW5kIHRoZXJlIGFyZSBhbHNvIGRpZmZlcmVudCBjaGlwcwogd2hpY2ggZGVjb2RlIHRoZSBhdWRpbyBzaWduYWwuICBSZXBvcnRzIGFib3V0IHNvdW5kIHByb2JsZW1zICgic3RlcmVvCiBkb2VzJ250IHdvcmsiKSBhcmUgcHJldHR5IHVzZWxlc3MgdW5sZXNzIHlvdSBpbmNsdWRlIHNvbWUgZGV0YWlscwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5mcmVlemUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLmZyZWV6ZQppbmRleCA0MjU5ZGNjLi41ZWRkZmEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLmZyZWV6ZQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLmZyZWV6ZQpAQCAtMzMsNyArMzMsNyBAQAogCiBJJ3ZlIHNlZW4gcmVwb3J0cyB0aGF0IGJ0dHYgMC43LnggY3Jhc2hlcyB3aGVyZWFzIDAuOC54IHdvcmtzIHJvY2sgc29saWQKIGZvciBzb21lIHBlb3BsZS4gIFRodXMgcHJvYmFibHkgYSBzbWFsbCBidWdsZXQgbGVmdCBzb21ld2hlcmUgaW4gYnR0dgotMC43LnguICBJIGhhdmUgbm8gaWRlYSB3aGVyZSBleGFjdGx5LCBpdCB3b3JrcyBzdGFibGUgZm9yIG1lIGFuZCBhbG90IG9mCiswLjcueC4gIEkgaGF2ZSBubyBpZGVhIHdoZXJlIGV4YWN0bHksIGl0IHdvcmtzIHN0YWJsZSBmb3IgbWUgYW5kIGEgbG90IG9mCiBvdGhlciBwZW9wbGUuICBCdXQgaW4gY2FzZSB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSAwLjcueCB2ZXJzaW9ucyB5b3UKIGNhbiBnaXZlIDAuOC54IGEgdHJ5IC4uLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NvdW5kLUZBUQppbmRleCAxZTYzMjhmLi4zOTVmNmM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Tb3VuZC1GQVEKQEAgLTIsMTMgKzIsMTMgQEAKIGJ0dHYgYW5kIHNvdW5kIG1pbmkgaG93dG8KID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlcmUgYXJlIGFsb3Qgb2YgZGlmZmVyZW50IGJ0ODQ4Lzg0OS84NzgvODc5IGJhc2VkIGJvYXJkcyBhdmFpbGFibGUuCitUaGVyZSBhcmUgYSBsb3Qgb2YgZGlmZmVyZW50IGJ0ODQ4Lzg0OS84NzgvODc5IGJhc2VkIGJvYXJkcyBhdmFpbGFibGUuCiBNYWtpbmcgdmlkZW8gd29yayBvZnRlbiBpcyBub3QgYSBiaWcgZGVhbCwgYmVjYXVzZSB0aGlzIGlzIGhhbmRsZWQKIGNvbXBsZXRlbHkgYnkgdGhlIGJ0OHh4IGNoaXAsIHdoaWNoIGlzIGNvbW1vbiBvbiBhbGwgYm9hcmRzLiAgQnV0CiBzb3VuZCBpcyBoYW5kbGVkIGluIHNsaWdodGx5IGRpZmZlcmVudCB3YXlzIG9uIGVhY2ggYm9hcmQuCiAKIFRvIGhhbmRsZSB0aGUgZ3JhYmJlciBib2FyZHMgY29ycmVjdGx5LCB0aGVyZSBpcyBhIGFycmF5IHR2Y2FyZHNbXSBpbgotYnR0di1jYXJkcy5jLCB3aGljaCBob2xkcyB0aGUgaW5mb3JtYXRpb25zIHJlcXVpcmVkIGZvciBlYWNoIGJvYXJkLgorYnR0di1jYXJkcy5jLCB3aGljaCBob2xkcyB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGVhY2ggYm9hcmQuCiBTb3VuZCB3aWxsIHdvcmsgb25seSwgaWYgdGhlIGNvcnJlY3QgZW50cnkgaXMgdXNlZCAoZm9yIHZpZGVvIGl0IG9mdGVuCiBtYWtlcyBubyBkaWZmZXJlbmNlKS4gIFRoZSBidHR2IGRyaXZlciBwcmludHMgYSBsaW5lIHRvIHRoZSBrZXJuZWwKIGxvZywgdGVsbGluZyB3aGljaCBjYXJkIHR5cGUgaXMgdXNlZC4gIExpa2UgdGhpcyBvbmU6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2V0NjF4MjUxLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0CmluZGV4IDEyNDc1NjYuLmUwY2RhZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0CkBAIC0xOTEsMTAgKzE5MSwxMCBAQAogRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6CiAJCTAgPSBub25lICh1c2UgY2FyZWZ1bGx5KQogCQkxID0gY3JpdGljYWwgZXJyb3JzCi0JCTIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMKKwkJMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9uCiAJCTMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMKIAkJTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5IG9uZSBkZXZpY2UKLQkJaXMgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLiBJdCBhbHNvIHNob3dzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbnMKKwkJaXMgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLiBJdCBhbHNvIHNob3dzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbgogCQlhYm91dCB0aGUgaGFyZHdhcmUgYmVpbmcgZGV0ZWN0ZWQuIFRoaXMgbW9kdWxlIHBhcmFtZXRlciBjYW4gYmUKIAkJY2hhbmdlZCBhdCBydW50aW1lIHRoYW5rcyB0byB0aGUgL3N5cyBmaWxlc3lzdGVtIGludGVyZmFjZS4KIERlZmF1bHQ6ICAgICAgICAyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3B4YV9jYW1lcmEudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9weGFfY2FtZXJhLnR4dAppbmRleCA0ZjZkMGNhLi41MWVkMTU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3B4YV9jYW1lcmEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvcHhhX2NhbWVyYS50eHQKQEAgLTg0LDEyICs4NCwxMiBAQAogICAgICAgIHRyYW5zZmVyIGlzIG5vdCBzdGFydGVkLiBPbiAiRW5kIE9mIEZyYW1lIiBpbnRlcnJ1cHQsIHRoZSBpcnEgaGFuZGxlcgogICAgICAgIHN0YXJ0cyB0aGUgRE1BIGNoYWluLgogICAgICAtIGNhcHR1cmUgb2Ygb25lIHZpZGVvYnVmZmVyCi0gICAgICAgVGhlIERNQSBjaGFpbiBzdGFydHMgdHJhbnNmZXJpbmcgZGF0YSBpbnRvIHZpZGVvYnVmZmVyIFJBTSBwYWdlcy4KLSAgICAgICBXaGVuIGFsbCBwYWdlcyBhcmUgdHJhbnNmZXJlZCwgdGhlIERNQSBpcnEgaXMgcmFpc2VkIG9uICJFTkRJTlRSIiBzdGF0dXMKKyAgICAgICBUaGUgRE1BIGNoYWluIHN0YXJ0cyB0cmFuc2ZlcnJpbmcgZGF0YSBpbnRvIHZpZGVvYnVmZmVyIFJBTSBwYWdlcy4KKyAgICAgICBXaGVuIGFsbCBwYWdlcyBhcmUgdHJhbnNmZXJyZWQsIHRoZSBETUEgaXJxIGlzIHJhaXNlZCBvbiAiRU5ESU5UUiIgc3RhdHVzCiAgICAgIC0gZmluaXNoaW5nIG9uZSB2aWRlb2J1ZmZlcgogICAgICAgIFRoZSBETUEgaXJxIGhhbmRsZXIgbWFya3MgdGhlIHZpZGVvYnVmZmVyIGFzICJkb25lIiwgYW5kIHJlbW92ZXMgaXQgZnJvbQogICAgICAgIHRoZSBhY3RpdmUgcnVubmluZyBxdWV1ZQotICAgICAgIE1lYW53aGlsZSwgdGhlIG5leHQgdmlkZW9idWZmZXIgKGlmIHRoZXJlIGlzIG9uZSksIGlzIHRyYW5zZmVyZWQgYnkgRE1BCisgICAgICAgTWVhbndoaWxlLCB0aGUgbmV4dCB2aWRlb2J1ZmZlciAoaWYgdGhlcmUgaXMgb25lKSwgaXMgdHJhbnNmZXJyZWQgYnkgRE1BCiAgICAgIC0gZmluaXNoaW5nIHRoZSBsYXN0IHZpZGVvYnVmZmVyCiAgICAgICAgT24gdGhlIERNQSBpcnEgb2YgdGhlIGxhc3QgdmlkZW9idWZmZXIsIHRoZSBRQ0kgaXMgc3RvcHBlZC4KIApAQCAtMTAxLDcgKzEwMSw3IEBACiAKICAgICAgVGhpcyBzdHJ1Y3R1cmUgaXMgcG9pbnRlZCBieSBkbWEtPnNnX2NwdS4KICAgICAgVGhlIGRlc2NyaXB0b3JzIGFyZSB1c2VkIGFzIGZvbGxvd3MgOgotICAgICAgLSBkZXNjLXNnW2ldOiBpLXRoIGRlc2NyaXB0b3IsIHRyYW5zZmVyaW5nIHRoZSBpLXRoIHNnCisgICAgICAtIGRlc2Mtc2dbaV06IGktdGggZGVzY3JpcHRvciwgdHJhbnNmZXJyaW5nIHRoZSBpLXRoIHNnCiAgICAgICAgIGVsZW1lbnQgdG8gdGhlIHZpZGVvIGJ1ZmZlciBzY2F0dGVyIGdhdGhlcgogICAgICAgLSBmaW5pc2hlcjogaGFzIGRkYWRyPURBRERSX1NUT1AsIGRjbWQ9RU5ESVJRRU4KICAgICAgIC0gbGlua2VyOiBoYXMgZGRhZHI9IGRlc2Mtc2dbMF0gb2YgbmV4dCB2aWRlbyBidWZmZXIsIGRjbWQ9MApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zbjljMTAyLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQKaW5kZXggNzNkZTQwNS4uYjRmNjcwNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zbjljMTAyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NuOWMxMDIudHh0CkBAIC0yMTQsMTAgKzIxNCwxMCBAQAogRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6CiAJCTAgPSBub25lICh1c2UgY2FyZWZ1bGx5KQogCQkxID0gY3JpdGljYWwgZXJyb3JzCi0JCTIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMKKwkJMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9uCiAJCTMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMKIAkJTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seS4gSXQgYWxzbyBzaG93cyBzb21lIG1vcmUKLQkJaW5mb3JtYXRpb25zIGFib3V0IHRoZSBoYXJkd2FyZSBiZWluZyBkZXRlY3RlZC4KKwkJaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhcmR3YXJlIGJlaW5nIGRldGVjdGVkLgogCQlUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBhdCBydW50aW1lIHRoYW5rcyB0byB0aGUgL3N5cwogCQlmaWxlc3lzdGVtIGludGVyZmFjZS4KIERlZmF1bHQ6ICAgICAgICAyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CmluZGV4IDNiMTU2MDguLmNmMjFmN2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CkBAIC0zNDMsNyArMzQzLDcgQEAKIAllcnIgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2Vycih2NGwyX2RldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CiAKIEFueSBlcnJvciBleGNlcHQgLUVOT0lPQ1RMQ01EIHdpbGwgZXhpdCB0aGUgbG9vcCB3aXRoIHRoYXQgZXJyb3IuIElmIG5vCi1lcnJvcnMgKGV4Y2VwdCAtRU5PSU9DVExDTUQpIG9jY3VyZWQsIHRoZW4gMCBpcyByZXR1cm5lZC4KK2Vycm9ycyAoZXhjZXB0IC1FTk9JT0NUTENNRCkgb2NjdXJyZWQsIHRoZW4gMCBpcyByZXR1cm5lZC4KIAogVGhlIHNlY29uZCBhcmd1bWVudCB0byBib3RoIGNhbGxzIGlzIGEgZ3JvdXAgSUQuIElmIDAsIHRoZW4gYWxsIHN1YmRldnMgYXJlCiBjYWxsZWQuIElmIG5vbi16ZXJvLCB0aGVuIG9ubHkgdGhvc2Ugd2hvc2UgZ3JvdXAgSUQgbWF0Y2ggdGhhdCB2YWx1ZSB3aWxsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY4Y2YudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2OGNmLnR4dAppbmRleCAwNTEzOGU4Li45NjQ5NDUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY4Y2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQKQEAgLTQxMyw3ICs0MTMsNyBAQAogRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDY6CiAJCTAgPSBub25lICh1c2UgY2FyZWZ1bGx5KQogCQkxID0gY3JpdGljYWwgZXJyb3JzCi0JCTIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMKKwkJMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9uCiAJCTMgPSBjb25maWd1cmF0aW9uIG9yIGdlbmVyYWwgbWVzc2FnZXMKIAkJNCA9IHdhcm5pbmdzCiAJCTUgPSBjYWxsZWQgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pjMDMwMS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pjMDMwMS50eHQKaW5kZXggYmVmZGZkYWNkLi5iNDFjODNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pjMDMwMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96YzAzMDEudHh0CkBAIC0xODEsMTAgKzE4MSwxMCBAQAogRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6CiAJCTAgPSBub25lICh1c2UgY2FyZWZ1bGx5KQogCQkxID0gY3JpdGljYWwgZXJyb3JzCi0JCTIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMKKwkJMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9uCiAJCTMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMKIAkJTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5IG9uZSBkZXZpY2UKLQkJaXMgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLiBJdCBhbHNvIHNob3dzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbnMKKwkJaXMgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLiBJdCBhbHNvIHNob3dzIHNvbWUgaW5mb3JtYXRpb24KIAkJYWJvdXQgdGhlIGhhcmR3YXJlIGJlaW5nIGRldGVjdGVkLiBUaGlzIG1vZHVsZSBwYXJhbWV0ZXIgY2FuIGJlCiAJCWNoYW5nZWQgYXQgcnVudGltZSB0aGFua3MgdG8gdGhlIC9zeXMgZmlsZXN5c3RlbSBpbnRlcmZhY2UuCiBEZWZhdWx0OiAgICAgICAgMgpAQCAtMjYxLDcgKzI2MSw3IEBACiAKIDExLiBDcmVkaXRzCiA9PT09PT09PT09PQotLSBJbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGNoaXAgaW50ZXJuYWxzIG5lZWRlZCB0byBlbmFibGUgdGhlIEkyQyBwcm90b2NvbCBoYXZlCistIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGlwIGludGVybmFscyBuZWVkZWQgdG8gZW5hYmxlIHRoZSBJMkMgcHJvdG9jb2wgaGF2ZQogICBiZWVuIHRha2VuIGZyb20gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFpDMDMweCBWaWRlbzRMaW51eDEgZHJpdmVyIHdyaXR0ZW4KICAgYnkgQW5kcmV3IEJpcmtldHQgPGFuZHlAbm9idWdzLm9yZz47CiAtIFRoZSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgb2YgdGhlIFpDMDMwMSBjb250cm9sbGVyIGNvbm5lY3RlZCB0byB0aGUgUEFTMjAyQkNCCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2FjdGl2ZV9tbS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2FjdGl2ZV9tbS50eHQKaW5kZXggNGVlMWY2NC4uZGJmNDU4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9hY3RpdmVfbW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vYWN0aXZlX21tLnR4dApAQCAtNzQsNyArNzQsNyBAQAogYW5kIHRoaW5ncyBsaWtlIHRoYXQpLgogCiBBbnl3YXksIEkgcHV0IGEgcHJlLXBhdGNoLTIuMy4xMy0xIG9uIGZ0cC5rZXJuZWwub3JnIGp1c3QgYSBtb21lbnQgYWdvLAotYmVjYXVzZSBpdCBzbGlnaHRseSBjaGFuZ2VzIHRoZSBpbnRlcmZhY2VzIHRvIGFjY29tb2RhdGUgdGhlIGFscGhhICh3aG8KK2JlY2F1c2UgaXQgc2xpZ2h0bHkgY2hhbmdlcyB0aGUgaW50ZXJmYWNlcyB0byBhY2NvbW1vZGF0ZSB0aGUgYWxwaGEgKHdobwogd291bGQgaGF2ZSB0aG91Z2h0IGl0LCBidXQgdGhlIGFscGhhIGFjdHVhbGx5IGVuZHMgdXAgaGF2aW5nIG9uZSBvZiB0aGUKIHVnbGllc3QgY29udGV4dCBzd2l0Y2ggY29kZXMgLSB1bmxpa2UgdGhlIG90aGVyIGFyY2hpdGVjdHVyZXMgd2hlcmUgdGhlIE1NCiBhbmQgcmVnaXN0ZXIgc3RhdGUgaXMgc2VwYXJhdGUsIHRoZSBhbHBoYSBQQUxjb2RlIGpvaW5zIHRoZSB0d28sIGFuZCB5b3UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQKaW5kZXggNDU3NjM0Yy4uZjg1NTFiMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQKQEAgLTcyLDcgKzcyLDcgQEAKIGFsbG9jYXRpbmcgaHVnZSBwYWdlcyBhcyBtZW1vcnkgaGFzIG5vdCB5ZXQgYmVjb21lIGZyYWdtZW50ZWQuCiAKIFNvbWUgcGxhdGZvcm1zIHN1cHBvcnQgbXVsdGlwbGUgaHVnZSBwYWdlIHNpemVzLiAgVG8gYWxsb2NhdGUgaHVnZSBwYWdlcwotb2YgYSBzcGVjaWZpYyBzaXplLCBvbmUgbXVzdCBwcmVjZWVkIHRoZSBodWdlIHBhZ2VzIGJvb3QgY29tbWFuZCBwYXJhbWV0ZXJzCitvZiBhIHNwZWNpZmljIHNpemUsIG9uZSBtdXN0IHByZWNlZGUgdGhlIGh1Z2UgcGFnZXMgYm9vdCBjb21tYW5kIHBhcmFtZXRlcnMKIHdpdGggYSBodWdlIHBhZ2Ugc2l6ZSBzZWxlY3Rpb24gcGFyYW1ldGVyICJodWdlcGFnZXN6PTxzaXplPiIuICA8c2l6ZT4gbXVzdAogYmUgc3BlY2lmaWVkIGluIGJ5dGVzIHdpdGggb3B0aW9uYWwgc2NhbGUgc3VmZml4IFtrS21NZ0ddLiAgVGhlIGRlZmF1bHQgaHVnZQogcGFnZSBzaXplIG1heSBiZSBzZWxlY3RlZCB3aXRoIHRoZSAiZGVmYXVsdF9odWdlcGFnZXN6PTxzaXplPiIgYm9vdCBwYXJhbWV0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL292ZXJjb21taXQtYWNjb3VudGluZyBiL0RvY3VtZW50YXRpb24vdm0vb3ZlcmNvbW1pdC1hY2NvdW50aW5nCmluZGV4IDIxYzdiMWYuLjcwNmQ3ZWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vb3ZlcmNvbW1pdC1hY2NvdW50aW5nCisrKyBiL0RvY3VtZW50YXRpb24vdm0vb3ZlcmNvbW1pdC1hY2NvdW50aW5nCkBAIC00LDcgKzQsNyBAQAogCQlhZGRyZXNzIHNwYWNlIGFyZSByZWZ1c2VkLiBVc2VkIGZvciBhIHR5cGljYWwgc3lzdGVtLiBJdAogCQllbnN1cmVzIGEgc2VyaW91c2x5IHdpbGQgYWxsb2NhdGlvbiBmYWlscyB3aGlsZSBhbGxvd2luZwogCQlvdmVyY29tbWl0IHRvIHJlZHVjZSBzd2FwIHVzYWdlLiAgcm9vdCBpcyBhbGxvd2VkIHRvIAotCQlhbGxvY2F0ZSBzbGlnaGx5IG1vcmUgbWVtb3J5IGluIHRoaXMgbW9kZS4gVGhpcyBpcyB0aGUgCisJCWFsbG9jYXRlIHNsaWdodGx5IG1vcmUgbWVtb3J5IGluIHRoaXMgbW9kZS4gVGhpcyBpcyB0aGUgCiAJCWRlZmF1bHQuCiAKIDEJLQlBbHdheXMgb3ZlcmNvbW1pdC4gQXBwcm9wcmlhdGUgZm9yIHNvbWUgc2NpZW50aWZpYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfZHMyNDIzIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfZHMyNDIzCmluZGV4IDkwYTY1ZDIuLjNmOThiNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzL3cxX2RzMjQyMworKysgYi9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy93MV9kczI0MjMKQEAgLTIxLDggKzIxLDggQEAKIAogRWFjaCBsaW5lcyB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlcyBvZiA0MiBieXRlcyByZWFkIGZyb20gdGhlIGNvdW50ZXIgYW5kCiBtZW1vcnkgcGFnZSBhbG9uZyB0aGUgY3JjPVlFUyBvciBOTyBmb3IgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWFkIG9wZXJhdGlvbgotd2FzIHN1Y2Nlc3NmdWxsIGFuZCBDUkMgbWF0Y2hlZC4KLUlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWxsLCB0aGVyZSBpcyBhbHNvIGluIHRoZSBlbmQgb2YgZWFjaCBsaW5lCit3YXMgc3VjY2Vzc2Z1bCBhbmQgQ1JDIG1hdGNoZWQuCitJZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLCB0aGVyZSBpcyBhbHNvIGluIHRoZSBlbmQgb2YgZWFjaCBsaW5lCiBhIGNvdW50ZXIgdmFsdWUgZXhwcmVzc2VkIGFzIGFuIGludGVnZXIgYWZ0ZXIgYz0KIAogTWVhbmluZyBvZiA0MiBieXRlcyByZXByZXNlbnRlZCBpcyBmb2xsb3dpbmc6CkBAIC0zNCw3ICszNCw3IEBACiAgLSBjcmM9WUVTL05PIGluZGljYXRpbmcgd2hldGhlciByZWFkIHdhcyBvayBhbmQgY3JjIG1hdGNoZWQKICAtIGM9PGludD4gY3VycmVudCBjb3VudGVyIHZhbHVlCiAKLWV4YW1wbGUgZnJvbSB0aGUgc3VjY2Vzc2Z1bGwgcmVhZDoKK2V4YW1wbGUgZnJvbSB0aGUgc3VjY2Vzc2Z1bCByZWFkOgogMDAgMDIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgNmQgMzggMDAgZmYgZmYgMDAgMDAgZmUgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgY3JjPVlFUyBjPTIKIDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIGUwIDFmIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIGNyYz1ZRVMgYz0yCiAwMCAyOSBjNiA1ZCAxOCAwMCAwMCAwMCAwMCAwNCAzNyAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiBjcmM9WUVTIGM9NDA4Nzk4NzYxCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL3cxLm5ldGxpbmsgYi9Eb2N1bWVudGF0aW9uL3cxL3cxLm5ldGxpbmsKaW5kZXggODA0NDQ1Zi4uZjU5YTMxOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93MS93MS5uZXRsaW5rCisrKyBiL0RvY3VtZW50YXRpb24vdzEvdzEubmV0bGluawpAQCAtODEsNyArODEsNyBAQAogZm9ybWF0OgogCiAJY25fbXNnIChDTl9XMV9JRFguQ05fVzFfVkFMIGFzIGlkLCBsZW4gaXMgZXF1YWwgdG8gc2l6ZW9mKHN0cnVjdAotCXcxX25ldGxpbmtfbXNnKSBwbHVzIG51bWJlciBvZiBtYXN0ZXJzIG11bHRpcGxlZCBieSA0KQorCXcxX25ldGxpbmtfbXNnKSBwbHVzIG51bWJlciBvZiBtYXN0ZXJzIG11bHRpcGxpZWQgYnkgNCkKIAl3MV9uZXRsaW5rX21zZyAodHlwZTogVzFfTElTVF9NQVNURVJTLCBsZW4gaXMgZXF1YWwgdG8KIAkJbnVtYmVyIG9mIG1hc3RlcnMgbXVsdGlwbGllZCBieSA0ICh1MzIgc2l6ZSkpCiAJaWQwIC4uLiBpZE4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvaHB3ZHQudHh0IGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9ocHdkdC50eHQKaW5kZXggOWMyNGQ1Zi4uOTQ4ODA3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9ocHdkdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9ocHdkdC50eHQKQEAgLTgsNyArOCw3IEBACiAgVGhlIEhQIGlMTzIgTk1JIFdhdGNoZG9nIGRyaXZlciBpcyBhIGtlcm5lbCBtb2R1bGUgdGhhdCBwcm92aWRlcyBiYXNpYwogIHdhdGNoZG9nIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBhZGRlZCBiZW5lZml0IG9mIE5NSSBzb3VyY2luZy4gQm90aCB0aGUKICB3YXRjaGRvZyBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgTk1JIHNvdXJjaW5nIGNhcGFiaWxpdHkgbmVlZCB0byBiZSBlbmFibGVkCi0gYnkgdGhlIHVzZXIuIFJlbWVtYmVyIHRoYXQgdGhlIHR3byBtb2RlcyBhcmUgbm90IGRlcGVuZGFudCBvbiBvbmUgYW5vdGhlci4KKyBieSB0aGUgdXNlci4gUmVtZW1iZXIgdGhhdCB0aGUgdHdvIG1vZGVzIGFyZSBub3QgZGVwZW5kZW50IG9uIG9uZSBhbm90aGVyLgogIEEgdXNlciBjYW4gaGF2ZSB0aGUgTk1JIHNvdXJjaW5nIHdpdGhvdXQgdGhlIHdhdGNoZG9nIHRpbWVyIGFuZCB2aWNlLXZlcnNhLgogCiAgV2F0Y2hkb2cgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGxpa2UgYW55IG90aGVyIGNvbW1vbiB3YXRjaGRvZyBkcml2ZXIuIFRoYXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dCBiL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dAppbmRleCAwMWM1MTNmLi5hMGI1NzdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CkBAIC0xMiw2ICsxMiw3IEBACiA0LiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgKEFQSSkKIDUuIEV4YW1wbGUgRXhlY3V0aW9uIFNjZW5hcmlvcwogNi4gR3VpZGVsaW5lcworNy4gRGVidWdnaW5nCiAKIAogMS4gSW50cm9kdWN0aW9uCkBAIC0zNzksMyArMzgwLDQyIEBACiAqIFVubGVzcyB3b3JrIGl0ZW1zIGFyZSBleHBlY3RlZCB0byBjb25zdW1lIGEgaHVnZSBhbW91bnQgb2YgQ1BVCiAgIGN5Y2xlcywgdXNpbmcgYSBib3VuZCB3cSBpcyB1c3VhbGx5IGJlbmVmaWNpYWwgZHVlIHRvIHRoZSBpbmNyZWFzZWQKICAgbGV2ZWwgb2YgbG9jYWxpdHkgaW4gd3Egb3BlcmF0aW9ucyBhbmQgd29yayBpdGVtIGV4ZWN1dGlvbi4KKworCis3LiBEZWJ1Z2dpbmcKKworQmVjYXVzZSB0aGUgd29yayBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGJ5IGdlbmVyaWMgd29ya2VyIHRocmVhZHMKK3RoZXJlIGFyZSBhIGZldyB0cmlja3MgbmVlZGVkIHRvIHNoZWQgc29tZSBsaWdodCBvbiBtaXNiZWhhdmluZword29ya3F1ZXVlIHVzZXJzLgorCitXb3JrZXIgdGhyZWFkcyBzaG93IHVwIGluIHRoZSBwcm9jZXNzIGxpc3QgYXM6CisKK3Jvb3QgICAgICA1NjcxICAwLjAgIDAuMCAgICAgIDAgICAgIDAgPyAgICAgICAgUyAgICAxMjowNyAgIDA6MDAgW2t3b3JrZXIvMDoxXQorcm9vdCAgICAgIDU2NzIgIDAuMCAgMC4wICAgICAgMCAgICAgMCA/ICAgICAgICBTICAgIDEyOjA3ICAgMDowMCBba3dvcmtlci8xOjJdCityb290ICAgICAgNTY3MyAgMC4wICAwLjAgICAgICAwICAgICAwID8gICAgICAgIFMgICAgMTI6MTIgICAwOjAwIFtrd29ya2VyLzA6MF0KK3Jvb3QgICAgICA1Njc0ICAwLjAgIDAuMCAgICAgIDAgICAgIDAgPyAgICAgICAgUyAgICAxMjoxMyAgIDA6MDAgW2t3b3JrZXIvMTowXQorCitJZiBrd29ya2VycyBhcmUgZ29pbmcgY3JhenkgKHVzaW5nIHRvbyBtdWNoIGNwdSksIHRoZXJlIGFyZSB0d28gdHlwZXMKK29mIHBvc3NpYmxlIHByb2JsZW1zOgorCisJMS4gU29tZXRoaW5nIGJlZWluZyBzY2hlZHVsZWQgaW4gcmFwaWQgc3VjY2Vzc2lvbgorCTIuIEEgc2luZ2xlIHdvcmsgaXRlbSB0aGF0IGNvbnN1bWVzIGxvdHMgb2YgY3B1IGN5Y2xlcworCitUaGUgZmlyc3Qgb25lIGNhbiBiZSB0cmFja2VkIHVzaW5nIHRyYWNpbmc6CisKKwkkIGVjaG8gd29ya3F1ZXVlOndvcmtxdWV1ZV9xdWV1ZV93b3JrID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9zZXRfZXZlbnQKKwkkIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlX3BpcGUgPiBvdXQudHh0CisJKHdhaXQgYSBmZXcgc2VjcykKKwleQworCitJZiBzb21ldGhpbmcgaXMgYnVzeSBsb29waW5nIG9uIHdvcmsgcXVldWVpbmcsIGl0IHdvdWxkIGJlIGRvbWluYXRpbmcKK3RoZSBvdXRwdXQgYW5kIHRoZSBvZmZlbmRlciBjYW4gYmUgZGV0ZXJtaW5lZCB3aXRoIHRoZSB3b3JrIGl0ZW0KK2Z1bmN0aW9uLgorCitGb3IgdGhlIHNlY29uZCB0eXBlIG9mIHByb2JsZW1zIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqdXN0IGNoZWNrCit0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIG9mZmVuZGluZyB3b3JrZXIgdGhyZWFkLgorCisJJCBjYXQgL3Byb2MvVEhFX09GRkVORElOR19LV09SS0VSL3N0YWNrCisKK1RoZSB3b3JrIGl0ZW0ncyBmdW5jdGlvbiBzaG91bGQgYmUgdHJpdmlhbGx5IHZpc2libGUgaW4gdGhlIHN0YWNrCit0cmFjZS4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNmI0YjljZC4uNjlmMTlmMSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE1MSw2ICsxNTEsNyBAQAogRjoJZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwogCiA4MTY5IDEwLzEwMC8xMDAwIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCitNOglSZWFsdGVrIGxpbnV4IG5pYyBtYWludGFpbmVycyA8bmljX3N3c2RAcmVhbHRlay5jb20+CiBNOglGcmFuY29pcyBSb21pZXUgPHJvbWlldUBmci56b3JlaWwuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZApAQCAtMTg0LDEwICsxODUsOSBAQAogRjoJZnMvOXAvCiAKIEEyMjMyIFNFUklBTCBCT0FSRCBEUklWRVIKLU06CUVudmVyIEhhYXNlIDxBMjIzMkBnbXgubmV0PgogTDoJbGludXgtbTY4a0BsaXN0cy5saW51eC1tNjhrLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9jaGFyL3Nlcl9hMjIzMioKK1M6CU9ycGhhbgorRjoJZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Nlcl9hMjIzMioKIAogQUFDUkFJRCBTQ1NJIFJBSUQgRFJJVkVSCiBNOglBZGFwdGVjIE9FTSBSYWlkIFNvbHV0aW9ucyA8YWFjcmFpZEBhZGFwdGVjLmNvbT4KQEAgLTg3Nyw2ICs4NzcsMTMgQEAKIEY6CWFyY2gvYXJtL21hY2gtb3Jpb241eC8KIEY6CWFyY2gvYXJtL3BsYXQtb3Jpb24vCiAKK0FSTS9PcmlvbiBTb0MvVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03OHh4IHBsYXRmb3JtIHN1cHBvcnQKK006CUFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorVzoJaHR0cDovL3d3dy5kaWdyaXoub3JnLnVrL3RzNzh4eC9rZXJuZWwKK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtKgorCiBBUk0vTUlPQTcwMSBNQUNISU5FIFNVUFBPUlQKIE06CVJvYmVydCBKYXJ6bWlrIDxyb2JlcnQuamFyem1pa0BmcmVlLmZyPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKQEAgLTEwMjUsMTIgKzEwMzIsMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjNjR4eC8KIAotQVJNL1M1UCBBUk0gQVJDSElURUNUVVJFUworQVJNL1M1UCBFWFlOT1MgQVJNIEFSQ0hJVEVDVFVSRVMKIE06CUt1a2ppbiBLaW0gPGtnZW5lLmtpbUBzYW1zdW5nLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBMOglsaW51eC1zYW1zdW5nLXNvY0B2Z2VyLmtlcm5lbC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1zNXAqLworRjoJYXJjaC9hcm0vbWFjaC1leHlub3MqLwogCiBBUk0vU0FNU1VORyBNT0JJTEUgTUFDSElORSBTVVBQT1JUCiBNOglLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgpAQCAtMTA2Myw3ICsxMDcxLDcgQEAKIEY6CWRyaXZlcnMvc2gvCiAKIEFSTS9URUxFQ0hJUFMgQVJNIEFSQ0hJVEVDVFVSRQotTToJIkhhbnMgSi4gS29jaCIgPGhqa0BsaW51dHJvbml4LmRlPgorTToJIkhhbnMgSi4gS29jaCIgPGhqa0BoYW5zamtvY2guZGU+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vcGxhdC10Y2MvCkBAIC0xODIzLDExICsxODMxLDEwIEBACiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKIAogQ09NUFVUT05FIElOVEVMTElQT1JUIE1VTFRJUE9SVCBDQVJECi1NOgkiTWljaGFlbCBILiBXYXJmaWVsZCIgPG1od0B3aXR0c2VuZC5jb20+CiBXOglodHRwOi8vd3d3LndpdHRzZW5kLmNvbS9jb21wdXRvbmUuaHRtbAotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3NlcmlhbC9jb21wdXRvbmUudHh0Ci1GOglkcml2ZXJzL2NoYXIvaXAyLworRjoJZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvCiAKIENPTkVYQU5UIEFDQ0VTU1JVTk5FUiBVU0IgRFJJVkVSCiBNOglTaW1vbiBBcmxvdHQgPGN4YWNydUBmaXJlLmxwMC5ldT4KQEAgLTIwMTAsNyArMjAxNyw3IEBACiBDWUNMQURFUyBBU1lOQyBNVVggRFJJVkVSCiBXOglodHRwOi8vd3d3LmN5Y2xhZGVzLmNvbS8KIFM6CU9ycGhhbgotRjoJZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKK0Y6CWRyaXZlcnMvdHR5L2N5Y2xhZGVzLmMKIEY6CWluY2x1ZGUvbGludXgvY3ljbGFkZXMuaAogCiBDWUNMQURFUyBQQzMwMCBEUklWRVIKQEAgLTIxMjQsOCArMjEzMSw4IEBACiBXOglodHRwOi8vd3d3LmRpZ2kuY29tCiBTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vc2VyaWFsL2RpZ2llcGNhLnR4dAotRjoJZHJpdmVycy9jaGFyL2VwY2EqCi1GOglkcml2ZXJzL2NoYXIvZGlnaSoKK0Y6CWRyaXZlcnMvc3RhZ2luZy90dHkvZXBjYSoKK0Y6CWRyaXZlcnMvc3RhZ2luZy90dHkvZGlnaSoKIAogRElPTEFOIFUyQy0xMiBJMkMgRFJJVkVSCiBNOglHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4KQEAgLTI4MDIsNDIgKzI4MDksMjMgQEAKIE06CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KIFM6CU1haW50YWluZWQKIFQ6CWdpdCBnaXQ6Ly9naXQuc2VjcmV0bGFiLmNhL2dpdC9saW51eC0yLjYuZ2l0Ci1GOglEb2N1bWVudGF0aW9uL2dwaW8vZ3Bpby50eHQKK0Y6CURvY3VtZW50YXRpb24vZ3Bpby50eHQKIEY6CWRyaXZlcnMvZ3Bpby8KIEY6CWluY2x1ZGUvbGludXgvZ3BpbyoKIAorR1JFIERFTVVMVElQTEVYRVIgRFJJVkVSCitNOglEbWl0cnkgS296bG92IDx4ZWJAbWFpbC5ydT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CW5ldC9pcHY0L2dyZS5jCitGOglpbmNsdWRlL25ldC9ncmUuaAorCiBHUkVUSCAxMC8xMDAvMUcgRXRoZXJuZXQgTUFDIGRldmljZSBkcml2ZXIKIE06CUtyaXN0b2ZmZXIgR2xlbWJvIDxrcmlzdG9mZmVyQGdhaXNsZXIuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9uZXQvZ3JldGgqCiAKLUhBUkQgRFJJVkUgQUNUSVZFIFBST1RFQ1RJT04gU1lTVEVNIChIREFQUykgRFJJVkVSCi1NOglGcmFuayBTZWlkZWwgPGZyYW5rQGYtc2VpZGVsLmRlPgotTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9mc2VpZGVsL2hkYXBzLwotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvaGRhcHMuYwotCi1IV1BPSVNPTiBNRU1PUlkgRkFJTFVSRSBIQU5ETElORwotTToJQW5kaSBLbGVlbiA8YW5kaUBmaXJzdGZsb29yLm9yZz4KLUw6CWxpbnV4LW1tQGt2YWNrLm9yZwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9hay9saW51eC1tY2UtMi42LmdpdCBod3BvaXNvbgotUzoJTWFpbnRhaW5lZAotRjoJbW0vbWVtb3J5LWZhaWx1cmUuYwotRjoJbW0vaHdwb2lzb24taW5qZWN0LmMKLQotSFlQRVJWSVNPUiBWSVJUVUFMIENPTlNPTEUgRFJJVkVSCi1MOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwotUzoJT2RkIEZpeGVzCi1GOglkcml2ZXJzL3R0eS9odmMvCi0KLWlTQ1NJIEJPT1QgRklSTVdBUkUgVEFCTEUgKGlCRlQpIERSSVZFUgotTToJUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgotTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWRAa2VybmVsLm9yZz4KLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdCoKLQogR1NQQ0EgRklORVBJWCBTVUJEUklWRVIKIE06CUZyYW5rIFphZ28gPGZyYW5rQHphZ28ubmV0PgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkBAIC0yODg4LDYgKzI4NzYsMjYgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvCiAKK0hBUkQgRFJJVkUgQUNUSVZFIFBST1RFQ1RJT04gU1lTVEVNIChIREFQUykgRFJJVkVSCitNOglGcmFuayBTZWlkZWwgPGZyYW5rQGYtc2VpZGVsLmRlPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9mc2VpZGVsL2hkYXBzLworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvaGRhcHMuYworCitIV1BPSVNPTiBNRU1PUlkgRkFJTFVSRSBIQU5ETElORworTToJQW5kaSBLbGVlbiA8YW5kaUBmaXJzdGZsb29yLm9yZz4KK0w6CWxpbnV4LW1tQGt2YWNrLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9hay9saW51eC1tY2UtMi42LmdpdCBod3BvaXNvbgorUzoJTWFpbnRhaW5lZAorRjoJbW0vbWVtb3J5LWZhaWx1cmUuYworRjoJbW0vaHdwb2lzb24taW5qZWN0LmMKKworSFlQRVJWSVNPUiBWSVJUVUFMIENPTlNPTEUgRFJJVkVSCitMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZworUzoJT2RkIEZpeGVzCitGOglkcml2ZXJzL3R0eS9odmMvCisKIEhBUkRXQVJFIE1PTklUT1JJTkcKIE06CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogTToJR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CkBAIC0zNDcxLDYgKzM0NzksMTIgQEAKIEY6CWRyaXZlcnMvcG5wL2lzYXBucC8KIEY6CWluY2x1ZGUvbGludXgvaXNhcG5wLmgKIAoraVNDU0kgQk9PVCBGSVJNV0FSRSBUQUJMRSAoaUJGVCkgRFJJVkVSCitNOglQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+CitNOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZEBrZXJuZWwub3JnPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0KgorCiBJU0NTSQogTToJTWlrZSBDaHJpc3RpZSA8bWljaGFlbGNAY3Mud2lzYy5lZHU+CiBMOglvcGVuLWlzY3NpQGdvb2dsZWdyb3Vwcy5jb20KQEAgLTQwNzcsNyArNDA5MSw3IEBACiBGOglpbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKIAogTUFYNjY1MCBIQVJEV0FSRSBNT05JVE9SIEFORCBGQU4gQ09OVFJPTExFUiBEUklWRVIKLU06CSJIYW5zIEouIEtvY2giIDxoamtAbGludXRyb25peC5kZT4KK006CSJIYW5zIEouIEtvY2giIDxoamtAaGFuc2prb2NoLmRlPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9tYXg2NjUwCkBAIC00MTkyLDcgKzQyMDYsNyBAQAogTToJSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vc2VyaWFsL21veGEtc21hcnRpbwotRjoJZHJpdmVycy9jaGFyL214c2VyLioKK0Y6CWRyaXZlcnMvdHR5L214c2VyLioKIAogTVNJIExBUFRPUCBTVVBQT1JUCiBNOgkiTGVlLCBDaHVuLVlpIiA8amxlZUBub3ZlbGwuY29tPgpAQCAtNDIzNCw3ICs0MjQ4LDcgQEAKIAogTVVMVElURUNIIE1VTFRJUE9SVCBDQVJEIChJU0lDT00pCiBTOglPcnBoYW4KLUY6CWRyaXZlcnMvY2hhci9pc2ljb20uYworRjoJZHJpdmVycy90dHkvaXNpY29tLmMKIEY6CWluY2x1ZGUvbGludXgvaXNpY29tLmgKIAogTVVTQiBNVUxUSVBPSU5UIEhJR0ggU1BFRUQgRFVBTC1ST0xFIENPTlRST0xMRVIKQEAgLTQ5ODIsNiArNDk5NiwxMyBAQAogRjoJZHJpdmVycy9wcHMvCiBGOglpbmNsdWRlL2xpbnV4L3BwcyouaAogCitQUFRQIERSSVZFUgorTToJRG1pdHJ5IEtvemxvdiA8eGViQG1haWwucnU+CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL25ldC9wcHRwLmMKK1c6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYWNjZWwtcHB0cAorCiBQUkVFTVBUSUJMRSBLRVJORUwKIE06CVJvYmVydCBMb3ZlIDxybWxAdGVjaDkubmV0PgogTDoJa3ByZWVtcHQtdGVjaEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKQEAgLTUyNzMsMTQgKzUyOTQsMTQgQEAKIFJJU0NPTTggRFJJVkVSCiBTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vc2VyaWFsL3Jpc2NvbTgudHh0Ci1GOglkcml2ZXJzL2NoYXIvcmlzY29tOCoKK0Y6CWRyaXZlcnMvc3RhZ2luZy90dHkvcmlzY29tOCoKIAogUk9DS0VUUE9SVCBEUklWRVIKIFA6CUNvbXRyb2wgQ29ycC4KIFc6CWh0dHA6Ly93d3cuY29tdHJvbC5jb20KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vc2VyaWFsL3JvY2tldC50eHQKLUY6CWRyaXZlcnMvY2hhci9yb2NrZXQqCitGOglkcml2ZXJzL3R0eS9yb2NrZXQqCiAKIFJPU0UgTkVUV09SSyBMQVlFUgogTToJUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgpAQCAtNTM5MCw3ICs1NDExLDcgQEAKIEY6CWluY2x1ZGUvbWVkaWEvKjcxNDYqCiAKIFNBTVNVTkcgQVVESU8gKEFTb0MpIERSSVZFUlMKLU06CUphc3NpIEJyYXIgPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CitNOglKYXNzaSBCcmFyIDxqYXNzaXNpbmdoYnJhckBnbWFpbC5jb20+CiBMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJU3VwcG9ydGVkCiBGOglzb3VuZC9zb2Mvc2Ftc3VuZwpAQCAtNTkxNiwxMCArNTkzNyw5IEBACiBGOglhcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwX2V2Yi5jCiAKIFNQRUNJQUxJWCBJTzgrIE1VTFRJUE9SVCBTRVJJQUwgQ0FSRCBEUklWRVIKLU06CVJvZ2VyIFdvbGZmIDxSLkUuV29sZmZAQml0V2l6YXJkLm5sPgotUzoJU3VwcG9ydGVkCitTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vc2VyaWFsL3NwZWNpYWxpeC50eHQKLUY6CWRyaXZlcnMvY2hhci9zcGVjaWFsaXgqCitGOglkcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeCoKIAogU1BJIFNVQlNZU1RFTQogTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CkBAIC01OTY0LDcgKzU5ODQsNiBAQAogCiBTVEFCTEUgQlJBTkNICiBNOglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgotTToJQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAc291cy1zb2wub3JnPgogTDoJc3RhYmxlQGtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIApAQCAtNjI0OCw3ICs2MjY3LDggQEAKIFc6CWh0dHA6Ly93d3cudWNsaW51eC5vcmcvCiBMOgl1Y2xpbnV4LWRldkB1Y2xpbnV4Lm9yZyAgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCi1GOglhcmNoL202OGtub21tdS8KK0Y6CWFyY2gvbTY4ay8qLypfbm8uKgorRjoJYXJjaC9tNjhrL2luY2x1ZGUvYXNtLypfbm8uKgogCiBVQ0xJTlVYIEZPUiBSRU5FU0FTIEg4LzMwMCAoSDgzMDApCiBNOglZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9yZ2UuanA+CkBAIC02NTUwLDcgKzY1NzAsNyBAQAogRjoJZHJpdmVycy91c2IvaG9zdC91aGNpKgogCiBVU0IgIlVTQk5FVCIgRFJJVkVSIEZSQU1FV09SSwotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitNOglPbGl2ZXIgTmV1a3VtIDxvbmV1a3VtQHN1c2UuZGU+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0CiBTOglNYWludGFpbmVkCkBAIC02NjE4LDcgKzY2MzgsNyBAQAogRjoJZnMvaHBwZnMvCiAKIFVTRVJTUEFDRSBJL08gKFVJTykKLU06CSJIYW5zIEouIEtvY2giIDxoamtAbGludXRyb25peC5kZT4KK006CSJIYW5zIEouIEtvY2giIDxoamtAaGFuc2prb2NoLmRlPgogTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbApAQCAtNjkxNiw2ICs2OTM2LDI1IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4NgogCitYRU4gSFlQRVJWSVNPUiBJTlRFUkZBQ0UKK006CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteS5maXR6aGFyZGluZ2VAY2l0cml4LmNvbT4KK006CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KK0w6CXhlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWFyY2gveDg2L3hlbi8KK0Y6CWRyaXZlcnMvKi94ZW4tKmZyb250LmMKK0Y6CWRyaXZlcnMveGVuLworRjoJYXJjaC94ODYvaW5jbHVkZS9hc20veGVuLworRjoJaW5jbHVkZS94ZW4vCisKK1hFTiBORVRXT1JLIEJBQ0tFTkQgRFJJVkVSCitNOglJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgorTDoJeGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL25ldC94ZW4tbmV0YmFjay8qCisKIFhFTiBQQ0kgU1VCU1lTVEVNCiBNOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CiBMOgl4ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC02OTMwLDE4ICs2OTY5LDYgQEAKIEY6CWFyY2gveDg2L3hlbi8qc3dpb3RsYioKIEY6CWRyaXZlcnMveGVuLypzd2lvdGxiKgogCi1YRU4gSFlQRVJWSVNPUiBJTlRFUkZBQ0UKLU06CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteS5maXR6aGFyZGluZ2VAY2l0cml4LmNvbT4KLU06CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KLUw6CXhlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLUw6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCi1TOglTdXBwb3J0ZWQKLUY6CWFyY2gveDg2L3hlbi8KLUY6CWRyaXZlcnMvKi94ZW4tKmZyb250LmMKLUY6CWRyaXZlcnMveGVuLwotRjoJYXJjaC94ODYvaW5jbHVkZS9hc20veGVuLwotRjoJaW5jbHVkZS94ZW4vCi0KIFhGUyBGSUxFU1lTVEVNCiBQOglTaWxpY29uIEdyYXBoaWNzIEluYwogTToJQWxleCBFbGRlciA8YWVsZGVyQHNnaS5jb20+CkBAIC03MDExLDIwICs3MDM4LDYgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdHR5L3NlcmlhbC96cy4qCiAKLUdSRSBERU1VTFRJUExFWEVSIERSSVZFUgotTToJRG1pdHJ5IEtvemxvdiA8eGViQG1haWwucnU+Ci1MOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOglNYWludGFpbmVkCi1GOgluZXQvaXB2NC9ncmUuYwotRjoJaW5jbHVkZS9uZXQvZ3JlLmgKLQotUFBUUCBEUklWRVIKLU06CURtaXRyeSBLb3psb3YgPHhlYkBtYWlsLnJ1PgotTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9uZXQvcHB0cC5jCi1XOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjY2VsLXBwdHAKLQogVEhFIFJFU1QKIE06CUxpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYmE3YTU1Yy4uNDFlYTZmYiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMzkKLUVYVFJBVkVSU0lPTiA9IC1yYzEKK0VYVFJBVkVSU0lPTiA9IC1yYzcKIE5BTUUgPSBGbGVzaC1FYXRpbmcgQmF0cyB3aXRoIEZhbmdzCiAKICMgKkRPQ1VNRU5UQVRJT04qCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA5YmFhZThhLi5kYTU0NDllIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJX3ItPnIwID0gMAogCi0vKiBUaGUgcmVnaXN0ZXJzIGFyZSBsYXllZCBvdXQgaW4gcHRfcmVncyBmb3IgUEFMIGFuZCBzeXNjYWxsCisvKiBUaGUgcmVnaXN0ZXJzIGFyZSBsYWlkIG91dCBpbiBwdF9yZWdzIGZvciBQQUwgYW5kIHN5c2NhbGwKICAgIGNvbnZlbmllbmNlLiAgUmUtb3JkZXIgdGhlbSBmb3IgdGhlIGxpbmVhciBlbGZfZ3JlZ3NldF90LiAgKi8KIAogc3RydWN0IHB0X3JlZ3M7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAwNTg5MzdiLi5iMTgzNDE2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQ1MiwxMCArNDUyLDE0IEBACiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkJNDk0CiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfbWFyawkJNDk1CiAjZGVmaW5lIF9fTlJfcHJsaW1pdDY0CQkJNDk2CisjZGVmaW5lIF9fTlJfbmFtZV90b19oYW5kbGVfYXQJCTQ5NworI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0CQk0OTgKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCQk0OTkKKyNkZWZpbmUgX19OUl9zeW5jZnMJCQk1MDAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ5NworI2RlZmluZSBOUl9TWVNDQUxMUwkJCTUwMQogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlCmluZGV4IDliYjdiODU4Li43YTZkOTA4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FscGhhL2tlcm5lbC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogZXh0cmEteQkJOj0gaGVhZC5vIHZtbGludXgubGRzCiBhc2ZsYWdzLXkJOj0gJChLQlVJTERfQ0ZMQUdTKQotY2NmbGFncy15CTo9IC1XZXJyb3IgLVduby1zaWduLWNvbXBhcmUKK2NjZmxhZ3MteQk6PSAtV25vLXNpZ24tY29tcGFyZQogCiBvYmoteSAgICA6PSBlbnRyeS5vIHRyYXBzLm8gcHJvY2Vzcy5vIGluaXRfdGFzay5vIG9zZl9zeXMubyBpcnEubyBcCiAJICAgIGlycV9hbHBoYS5vIHNpZ25hbC5vIHNldHVwLm8gcHRyYWNlLm8gdGltZS5vIFwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbGNhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2xjYS5jCmluZGV4IDQ4NDNmNmUuLmNiMjgwMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbGNhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9sY2EuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQkvKiBSZXNldCBzdGF0dXMgcmVnaXN0ZXIgdG8gYXZvaWQgbG9vc2luZyBlcnJvcnMuICAqLworCS8qIFJlc2V0IHN0YXR1cyByZWdpc3RlciB0byBhdm9pZCBsb3NpbmcgZXJyb3JzLiAgKi8KIAlzdGF0MCA9ICoodnVscClMQ0FfSU9DX1NUQVQwOwogCSoodnVscClMQ0FfSU9DX1NUQVQwID0gc3RhdDA7CiAJbWIoKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkvKiBhdm9pZCBnZXR0aW5nIGhpdCBieSBtYWNoaW5lIGNoZWNrICovCiAKLQkvKiBSZXNldCBzdGF0dXMgcmVnaXN0ZXIgdG8gYXZvaWQgbG9vc2luZyBlcnJvcnMuICAqLworCS8qIFJlc2V0IHN0YXR1cyByZWdpc3RlciB0byBhdm9pZCBsb3NpbmcgZXJyb3JzLiAgKi8KIAlzdGF0MCA9ICoodnVscClMQ0FfSU9DX1NUQVQwOwogCSoodnVscClMQ0FfSU9DX1NUQVQwID0gc3RhdDA7CiAJbWIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWNwY2lhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21jcGNpYS5jCmluZGV4IDM4MWZlYzAuLmRhN2JjYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWNwY2lhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tY3BjaWEuYwpAQCAtODgsNyArODgsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtaWQgPSBNQ1BDSUFfSE9TRTJNSUQoaG9zZS0+aW5kZXgpOwotCXVuc2lnbmVkIGludCBzdGF0MCwgdmFsdWUsIHRlbXAsIGNwdTsKKwl1bnNpZ25lZCBpbnQgc3RhdDAsIHZhbHVlLCBjcHU7CiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogCXN0YXQwID0gKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCk7CiAJKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCkgPSBzdGF0MDsKIAltYigpOwotCXRlbXAgPSAqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsKKwkqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsKIAlEQkdfQ0ZHKCgiY29uZl9yZWFkOiBNQ1BDSUFfQ0FQX0VSUiglZCkgd2FzIDB4JXhcbiIsIG1pZCwgc3RhdDApKTsKIAogCW1iKCk7CkBAIC0xMzYsNyArMTM2LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWlkID0gTUNQQ0lBX0hPU0UyTUlEKGhvc2UtPmluZGV4KTsKLQl1bnNpZ25lZCBpbnQgc3RhdDAsIHRlbXAsIGNwdTsKKwl1bnNpZ25lZCBpbnQgc3RhdDAsIGNwdTsKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAJLyogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyIHRvIGF2b2lkIGxvc2luZyBlcnJvcnMuICAqLwogCXN0YXQwID0gKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCk7CiAJKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCkgPSBzdGF0MDsgbWIoKTsKLQl0ZW1wID0gKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCk7CisJKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCk7CiAJREJHX0NGRygoImNvbmZfd3JpdGU6IE1DUENJQSBDQVBfRVJSKCVkKSB3YXMgMHgleFxuIiwgbWlkLCBzdGF0MCkpOwogCiAJZHJhaW5hKCk7CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkqKCh2dWlwKWFkZHIpID0gdmFsdWU7CiAJbWIoKTsKIAltYigpOyAgLyogbWFnaWMgKi8KLQl0ZW1wID0gKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCk7IC8qIHJlYWQgdG8gZm9yY2UgdGhlIHdyaXRlICovCisJKih2dWlwKU1DUENJQV9DQVBfRVJSKG1pZCk7IC8qIHJlYWQgdG8gZm9yY2UgdGhlIHdyaXRlICovCiAJbWNoZWNrX2V4cGVjdGVkKGNwdSkgPSAwOwogCW1iKCk7CiAKQEAgLTU3MiwxMiArNTcyLDEwIEBACiB2b2lkCiBtY3BjaWFfbWFjaGluZV9jaGVjayh1bnNpZ25lZCBsb25nIHZlY3RvciwgdW5zaWduZWQgbG9uZyBsYV9wdHIpCiB7Ci0Jc3RydWN0IGVsX2NvbW1vbiAqbWNoa19oZWFkZXI7CiAJc3RydWN0IGVsX01DUENJQV91bmNvcnJlY3RlZF9mcmFtZV9tY2hlY2sgKm1jaGtfbG9nb3V0OwogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGV4cGVjdGVkOwogCi0JbWNoa19oZWFkZXIgPSAoc3RydWN0IGVsX2NvbW1vbiAqKWxhX3B0cjsKIAltY2hrX2xvZ291dCA9IChzdHJ1Y3QgZWxfTUNQQ0lBX3VuY29ycmVjdGVkX2ZyYW1lX21jaGVjayAqKWxhX3B0cjsKIAlleHBlY3RlZCA9IG1jaGVja19leHBlY3RlZChjcHUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMKaW5kZXggNjQ4YWU4OC4uYWU1NGFkOSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2Vycl9tYXJ2ZWwuYwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAkgKiBub3JtYWwgb3BlcmF0aW9uLCBkaXNtaXNzIHRoZW0uCiAJICoKIAkgKiBEaXNtaXNzIGlmOgotCSAqCUNfU1RBVAkJPSAweDE0IAkJKEVycm9yIFJlcG9uc2UpCisJICoJQ19TVEFUCQk9IDB4MTQgCQkoRXJyb3IgUmVzcG9uc2UpCiAJICoJQ19TVFM8Mz4JPSAwICAgIAkJKENfQUREUiB2YWxpZCkKIAkgKglDX0FERFI8NDI+CT0gMSAgICAJCShJL08pCiAJICoJQ19BRERSPDMxOjIyPgk9IDExMTExMHh4YgkoUENJIENvbmZpZyBzcGFjZSkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2Vycl90aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX3RpdGFuLmMKaW5kZXggYzNiMzc4MS4uMTRiMjZjNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX3RpdGFuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX3RpdGFuLmMKQEAgLTUzMyw4ICs1MzMsNiBAQAogc3RhdGljIHN0cnVjdCBlbF9zdWJwYWNrZXQgKgogZWxfcHJvY2Vzc19yZWdhdHRhX3N1YnBhY2tldChzdHJ1Y3QgZWxfc3VicGFja2V0ICpoZWFkZXIpCiB7Ci0JaW50IHN0YXR1czsKLQogCWlmIChoZWFkZXItPmNsYXNzICE9IEVMX0NMQVNTX19SRUdBVFRBX0ZBTUlMWSkgewogCQlwcmludGsoIiVzICAqKiBVbmV4cGVjdGVkIGhlYWRlciBDTEFTUyAlZCBUWVBFICVkLCBhYm9ydGluZ1xuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCkBAIC01NTEsNyArNTQ5LDcgQEAKIAkJcHJpbnRrKCIlcyAgKiogT2NjdXJyZWQgb24gQ1BVICVkOlxuIiwgCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LAogCQkgICAgICAgKGludCloZWFkZXItPmJ5X3R5cGUucmVnYXR0YV9mcmFtZS5jcHVpZCk7Ci0JCXN0YXR1cyA9IHByaXZhdGVlcl9wcm9jZXNzX2xvZ291dF9mcmFtZSgoc3RydWN0IGVsX2NvbW1vbiAqKQorCQlwcml2YXRlZXJfcHJvY2Vzc19sb2dvdXRfZnJhbWUoKHN0cnVjdCBlbF9jb21tb24gKikKIAkJCWhlYWRlci0+YnlfdHlwZS5yZWdhdHRhX2ZyYW1lLmRhdGFfc3RhcnQsIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCAxNDc5ZGM2Li41MWI3ZmJkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtMjI4LDcgKzIyOCw3IEBACiB2b2lkIF9faW5pdAogaW5pdF9ydGNfaXJxKHZvaWQpCiB7Ci0JaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoUlRDX0lSUSwgJm5vX2lycV9jaGlwLAorCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKFJUQ19JUlEsICZkdW1teV9pcnFfY2hpcCwKIAkJCQkgICAgICBoYW5kbGVfc2ltcGxlX2lycSwgIlJUQyIpOwogCXNldHVwX2lycShSVENfSVJRLCAmdGltZXJfaXJxYWN0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCmluZGV4IGQyNjM0ZTQuLmVkYmRkY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwpAQCAtMTQwNCw4ICsxNDA0LDYgQEAKIAljYXNlIFBDQTU2X0NQVToKIAljYXNlIFBDQTU3X0NQVToKIAkgIHsKLQkJdW5zaWduZWQgbG9uZyBjYm94X2NvbmZpZywgc2l6ZTsKLQogCQlpZiAoY3B1X3R5cGUgPT0gUENBNTZfQ1BVKSB7CiAJCQlMMUkgPSBDU0hBUEUoMTYqMTAyNCwgNiwgMSk7CiAJCQlMMUQgPSBDU0hBUEUoOCoxMDI0LCA1LCAxKTsKQEAgLTE0MTUsMTAgKzE0MTMsMTIgQEAKIAkJfQogCQlMMyA9IC0xOwogCisjaWYgMAorCQl1bnNpZ25lZCBsb25nIGNib3hfY29uZmlnLCBzaXplOworCiAJCWNib3hfY29uZmlnID0gKih2dWxwKSBwaHlzX3RvX3ZpcnQgKDB4ZmZmZmYwMDAwOFVMKTsKIAkJc2l6ZSA9IDUxMioxMDI0ICogKDEgPDwgKChjYm94X2NvbmZpZyA+PiAxMikgJiAzKSk7CiAKLSNpZiAwCiAJCUwyID0gKChjYm94X2NvbmZpZyA+PiAzMSkgJiAxID8gQ1NIQVBFIChzaXplLCA2LCAxKSA6IC0xKTsKICNlbHNlCiAJCUwyID0gZXh0ZXJuYWxfY2FjaGVfcHJvYmUoNTEyKjEwMjQsIDYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjOTN4LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zbWMzN2M5M3guYwppbmRleCAzZTZhMjg5Li42ODg2YjgzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zbWMzN2M5M3guYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zbWMzN2M5M3guYwpAQCAtNzksNyArNzksNiBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IFNNQ0NvbmZpZ1N0YXRlKHVuc2lnbmVkIGxvbmcgYmFzZUFkZHIpCiB7CiAJdW5zaWduZWQgY2hhciBkZXZJZDsKLQl1bnNpZ25lZCBjaGFyIGRldlJldjsKIAogCXVuc2lnbmVkIGxvbmcgY29uZmlnUG9ydDsKIAl1bnNpZ25lZCBsb25nIGluZGV4UG9ydDsKQEAgLTEwMCw3ICs5OSw3IEBACiAJCWRldklkID0gaW5iKGRhdGFQb3J0KTsKIAkJaWYgKGRldklkID09IFZBTElEX0RFVklDRV9JRCkgewogCQkJb3V0YihERVZJQ0VfUkVWLCBpbmRleFBvcnQpOwotCQkJZGV2UmV2ID0gaW5iKGRhdGFQb3J0KTsKKwkJCS8qIHVuc2lnbmVkIGNoYXIgZGV2UmV2ID0gKi8gaW5iKGRhdGFQb3J0KTsKIAkJCWJyZWFrOwogCQl9CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c193aWxkZmlyZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMKaW5kZXggZDNjYjI4Yi4uZDkyY2RjNyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMKQEAgLTE1Niw3ICsxNTYsNiBAQAogd2lsZGZpcmVfaW5pdF9pcnFfcGVyX3BjYShpbnQgcWJibm8sIGludCBwY2FubykKIHsKIAlpbnQgaSwgaXJxX2JpYXM7Ci0JdW5zaWduZWQgbG9uZyBpb19iaWFzOwogCXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlzYV9lbmFibGUgPSB7CiAJCS5oYW5kbGVyCT0gbm9fYWN0aW9uLAogCQkubmFtZQkJPSAiaXNhX2VuYWJsZSIsCkBAIC0xNjUsMTAgKzE2NCwxMiBAQAogCWlycV9iaWFzID0gcWJibm8gKiAoV0lMREZJUkVfUENBX1BFUl9RQkIgKiBXSUxERklSRV9JUlFfUEVSX1BDQSkKIAkJICsgcGNhbm8gKiBXSUxERklSRV9JUlFfUEVSX1BDQTsKIAorI2lmIDAKKwl1bnNpZ25lZCBsb25nIGlvX2JpYXM7CisKIAkvKiBPbmx5IG5lZWQgdGhlIGZvbGxvd2luZyBmb3IgZmlyc3QgUENJIGJ1cyBwZXIgUENBLiAqLwogCWlvX2JpYXMgPSBXSUxERklSRV9JTyhxYmJubywgcGNhbm88PDEpIC0gV0lMREZJUkVfSU9fQklBUzsKIAotI2lmIDAKIAlvdXRiKDAsIERNQTFfUkVTRVRfUkVHICsgaW9fYmlhcyk7CiAJb3V0YigwLCBETUEyX1JFU0VUX1JFRyArIGlvX2JpYXMpOwogCW91dGIoRE1BX01PREVfQ0FTQ0FERSwgRE1BMl9NT0RFX1JFRyArIGlvX2JpYXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCmluZGV4IGE2YTFkZTkuLjE1Zjk5OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKQEAgLTQ5OCwyMyArNDk4LDI3IEBACiAJLnF1YWQgc3lzX25pX3N5c2NhbGwJCQkvKiBzeXNfdGltZXJmZCAqLwogCS5xdWFkIHN5c19ldmVudGZkCiAJLnF1YWQgc3lzX3JlY3ZtbXNnCi0JLnF1YWQgc3lzX2ZhbGxvY2F0ZQkJCQkvKiA0ODAgKi8KKwkucXVhZCBzeXNfZmFsbG9jYXRlCQkJLyogNDgwICovCiAJLnF1YWQgc3lzX3RpbWVyZmRfY3JlYXRlCiAJLnF1YWQgc3lzX3RpbWVyZmRfc2V0dGltZQogCS5xdWFkIHN5c190aW1lcmZkX2dldHRpbWUKIAkucXVhZCBzeXNfc2lnbmFsZmQ0Ci0JLnF1YWQgc3lzX2V2ZW50ZmQyCQkJCS8qIDQ4NSAqLworCS5xdWFkIHN5c19ldmVudGZkMgkJCS8qIDQ4NSAqLwogCS5xdWFkIHN5c19lcG9sbF9jcmVhdGUxCiAJLnF1YWQgc3lzX2R1cDMKIAkucXVhZCBzeXNfcGlwZTIKIAkucXVhZCBzeXNfaW5vdGlmeV9pbml0MQotCS5xdWFkIHN5c19wcmVhZHYJCQkJLyogNDkwICovCisJLnF1YWQgc3lzX3ByZWFkdgkJCS8qIDQ5MCAqLwogCS5xdWFkIHN5c19wd3JpdGV2CiAJLnF1YWQgc3lzX3J0X3Rnc2lncXVldWVpbmZvCiAJLnF1YWQgc3lzX3BlcmZfZXZlbnRfb3BlbgogCS5xdWFkIHN5c19mYW5vdGlmeV9pbml0Ci0JLnF1YWQgc3lzX2Zhbm90aWZ5X21hcmsJCQkJLyogNDk1ICovCisJLnF1YWQgc3lzX2Zhbm90aWZ5X21hcmsJCQkvKiA0OTUgKi8KIAkucXVhZCBzeXNfcHJsaW1pdDY0CisJLnF1YWQgc3lzX25hbWVfdG9faGFuZGxlX2F0CisJLnF1YWQgc3lzX29wZW5fYnlfaGFuZGxlX2F0CisJLnF1YWQgc3lzX2Nsb2NrX2FkanRpbWUKKwkucXVhZCBzeXNfc3luY2ZzCQkJLyogNTAwICovCiAKIAkuc2l6ZSBzeXNfY2FsbF90YWJsZSwgLiAtIHN5c19jYWxsX3RhYmxlCiAJLnR5cGUgc3lzX2NhbGxfdGFibGUsIEBvYmplY3QKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCBhNThlODRmLi44MThlNzRlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIAkJeWVhciArPSAxMDA7CiAKIAl0cy0+dHZfc2VjID0gbWt0aW1lKHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYyk7CisJdHMtPnR2X25zZWMgPSAwOwogfQogCiAKQEAgLTM3NCw4ICszNzUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfcnBjY19jbG9ja3NvdXJjZShsb25nIGN5Y2xlX2ZyZXEpCiB7Ci0JY2xvY2tzb3VyY2VfY2FsY19tdWx0X3NoaWZ0KCZjbG9ja3NvdXJjZV9ycGNjLCBjeWNsZV9mcmVxLCA0KTsKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfcnBjYyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX3JwY2MsIGN5Y2xlX2ZyZXEpOwogfQogI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ycGNjX2Nsb2Nrc291cmNlKGxvbmcgY3ljbGVfZnJlcSkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbGliL2V2Njctc3RycmNoci5TIGIvYXJjaC9hbHBoYS9saWIvZXY2Ny1zdHJyY2hyLlMKaW5kZXggM2ZkOGJmNC4uZGQwZDhjNiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9saWIvZXY2Ny1zdHJyY2hyLlMKKysrIGIvYXJjaC9hbHBoYS9saWIvZXY2Ny1zdHJyY2hyLlMKQEAgLTgyLDcgKzgyLDcgQEAKICRlb3M6CiAJbmVncQl0MSwgdDQJCSMgRSA6IGlzb2xhdGUgZmlyc3QgbnVsbCBieXRlIG1hdGNoCiAJYW5kCXQxLCB0NCwgdDQJIyBFIDoKLQlzdWJxCXQ0LCAxLCB0NQkjIEUgOiBidWlsZCBhIG1hc2sgb2YgdGhlIGJ5dGVzIHVwdG8uLi4KKwlzdWJxCXQ0LCAxLCB0NQkjIEUgOiBidWlsZCBhIG1hc2sgb2YgdGhlIGJ5dGVzIHVwIHRvLi4uCiAJb3IJdDQsIHQ1LCB0NAkjIEUgOiAuLi4gYW5kIGluY2x1ZGluZyB0aGUgbnVsbAogCiAJYW5kCXQzLCB0NCwgdDMJIyBFIDogbWFzayBvdXQgY2hhciBtYXRjaGVzIGFmdGVyIG51bGwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbGliL2Zscy5jIGIvYXJjaC9hbHBoYS9saWIvZmxzLmMKaW5kZXggMzJhZmFhMy4uZGRkMDQ4YyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9saWIvZmxzLmMKKysrIGIvYXJjaC9hbHBoYS9saWIvZmxzLmMKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKIC8qIFRoaXMgaXMgZmxzKHgpLTEsIGV4Y2VwdCB6ZXJvIGlzIGhlbGQgdG8gemVyby4gIFRoaXMgYWxsb3dzIG1vc3QKLSAgIGVmZmljZW50IGlucHV0IGludG8gZXh0YmwsIHBsdXMgaXQgYWxsb3dzIGVhc3kgaGFuZGxpbmcgb2YgZmxzKDApPTAuICAqLworICAgZWZmaWNpZW50IGlucHV0IGludG8gZXh0YmwsIHBsdXMgaXQgYWxsb3dzIGVhc3kgaGFuZGxpbmcgb2YgZmxzKDApPTAuICAqLwogCiBjb25zdCB1bnNpZ25lZCBjaGFyIF9fZmxzbTFfdGFiWzI1Nl0gPSAKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbGliL3N0cnJjaHIuUyBiL2FyY2gvYWxwaGEvbGliL3N0cnJjaHIuUwppbmRleCA4MmNmZDBhLi4xOTcwZGMwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2xpYi9zdHJyY2hyLlMKKysrIGIvYXJjaC9hbHBoYS9saWIvc3RycmNoci5TCkBAIC01NCw3ICs1NCw3IEBACiAkZW9zOgogCW5lZ3EJdDEsIHQ0CQkjIGUwICAgIDogaXNvbGF0ZSBmaXJzdCBudWxsIGJ5dGUgbWF0Y2gKIAlhbmQJdDEsIHQ0LCB0NAkjIGUxICAgIDoKLQlzdWJxCXQ0LCAxLCB0NQkjIGUwICAgIDogYnVpbGQgYSBtYXNrIG9mIHRoZSBieXRlcyB1cHRvLi4uCisJc3VicQl0NCwgMSwgdDUJIyBlMCAgICA6IGJ1aWxkIGEgbWFzayBvZiB0aGUgYnl0ZXMgdXAgdG8uLi4KIAlvcgl0NCwgdDUsIHQ0CSMgZTEgICAgOiAuLi4gYW5kIGluY2x1ZGluZyB0aGUgbnVsbAogCiAJYW5kCXQzLCB0NCwgdDMJIyBlMCAgICA6IG1hc2sgb3V0IGNoYXIgbWF0Y2hlcyBhZnRlciBudWxsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL29wcm9maWxlL29wX21vZGVsX2V2NjcuYyBiL2FyY2gvYWxwaGEvb3Byb2ZpbGUvb3BfbW9kZWxfZXY2Ny5jCmluZGV4IDcwMzAyMDguLjViOWQxNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvb3Byb2ZpbGUvb3BfbW9kZWxfZXY2Ny5jCisrKyBiL2FyY2gvYWxwaGEvb3Byb2ZpbGUvb3BfbW9kZWxfZXY2Ny5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJY2FzZSBUUkFQX0lOVkFMSUQxOgogCQljYXNlIFRSQVBfSU5WQUxJRDI6CiAJCWNhc2UgVFJBUF9JTlZBTElEMzoKLQkJCS8qIFBpcGVsaW5lIHJlZGlyZWN0aW9uIG9jdXJyZWQuIFBNUEMgcG9pbnRzCisJCQkvKiBQaXBlbGluZSByZWRpcmVjdGlvbiBvY2N1cnJlZC4gUE1QQyBwb2ludHMKIAkJCSAgIHRvIFBBTGNvZGUuIFJlY29nbml6ZSBJVEIgbWlzcyBieSBQQUxjb2RlCiAJCQkgICBvZmZzZXQgYWRkcmVzcywgYW5kIGdldCBhY3R1YWwgUEMgZnJvbQogCQkJICAgRVhDX0FERFIuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNWI5Zjc4Yi4uMzc3YTdhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC02OTQsNyArNjk0LDcgQEAKIAkgIHRoZSBTYW1zdW5nIFNNREsyNDEwIGRldmVsb3BtZW50IGJvYXJkIChhbmQgZGVyaXZhdGl2ZXMpLgogCiAJICBOb3RlLCB0aGUgUzNDMjQxNiBhbmQgdGhlIFMzQzI0NTAgYXJlIHNvIGNsb3NlIHRoYXQgdGhleSBldmVuIHNoYXJlCi0JICB0aGUgc2FtZSBTb0MgSUQgY29kZS4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHNlcGVyYXRlIG1hY2hpbmUKKwkgIHRoZSBzYW1lIFNvQyBJRCBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gc2VwYXJhdGUgbWFjaGluZQogCSAgZGlyZWN0b3J5IChubyBhcmNoL2FybS9tYWNoLXMzYzI0NTApIGFzIHRoZSBTM0MyNDE2IHdhcyBmaXJzdC4KIAogY29uZmlnIEFSQ0hfUzNDNjRYWApAQCAtMTU0MCw3ICsxNTQwLDYgQEAKIGNvbmZpZyBISUdIUFRFCiAJYm9vbCAiQWxsb2NhdGUgMm5kLWxldmVsIHBhZ2V0YWJsZXMgZnJvbSBoaWdobWVtIgogCWRlcGVuZHMgb24gSElHSE1FTQotCWRlcGVuZHMgb24gIU9VVEVSX0NBQ0hFCiAKIGNvbmZpZyBIV19QRVJGX0VWRU5UUwogCWJvb2wgIkVuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzIgpAQCAtMjAxMiw2ICsyMDExLDggQEAKIAogY29uZmlnIEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCWRlcGVuZHMgb24gIUFSQ0hfUzVQNjRYMCAmJiAhQVJDSF9TNVA2NDQyCisJZGVwZW5kcyBvbiBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfU0ExMTAwIHx8IFwKKwkJQ1BVX1Y2IHx8IENQVV9WNksgfHwgQ1BVX1Y3IHx8IENQVV9YU0MzIHx8IENQVV9YU0NBTEUKIAlkZWZfYm9vbCB5CiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWctbm9tbXUgYi9hcmNoL2FybS9LY29uZmlnLW5vbW11CmluZGV4IDkwMWU2ZGYuLjJjZWY4ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWctbm9tbXUKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy1ub21tdQpAQCAtMzQsNyArMzQsNyBAQAogCSAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBhdXRvLXByb2Jpbmcgd2hpY2ggdXRpbGl6ZXMgdGhlIHJlZ2lzdGVyLgogCiBjb25maWcgUkVNQVBfVkVDVE9SU19UT19SQU0KLQlib29sICdJbnN0YWxsIHZlY3RvcnMgdG8gdGhlIGJlZ2luaW5nIG9mIFJBTScgaWYgRFJBTV9CQVNFCisJYm9vbCAnSW5zdGFsbCB2ZWN0b3JzIHRvIHRoZSBiZWdpbm5pbmcgb2YgUkFNJyBpZiBEUkFNX0JBU0UKIAlkZXBlbmRzIG9uIERSQU1fQkFTRQogCWhlbHAKIAkgIFRoZSBrZXJuZWwgbmVlZHMgdG8gY2hhbmdlIHRoZSBoYXJkd2FyZSBleGNlcHRpb24gdmVjdG9ycy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDQ5NDIyNGEuLjAzZDAxZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtNjMsMTcgKzYzLDYgQEAKIAkgICAgICA4IC0gU0lHU0VHViBmYXVsdHMKIAkgICAgIDE2IC0gU0lHQlVTIGZhdWx0cwogCi1jb25maWcgREVCVUdfRVJST1JTCi0JYm9vbCAiVmVyYm9zZSBrZXJuZWwgZXJyb3IgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBjb250cm9scyB2ZXJib3NlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUKLQkgIHByaW50ZWQgd2hlbiB0aGUga2VybmVsIGRldGVjdHMgYW4gaW50ZXJuYWwgZXJyb3IuIFRoaXMgZGVidWdnaW5nCi0JICBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgdG8ga2VybmVsIGhhY2tlcnMgd2hlbiB0cmFja2luZyBkb3duIHByb2JsZW1zLAotCSAgYnV0IG1vc3RseSBtZWFuaW5nbGVzcyB0byBvdGhlciBwZW9wbGUuIEl0J3Mgc2FmZSB0byBzYXkgWSB1bmxlc3MKLQkgIHlvdSBhcmUgY29uY2VybmVkIHdpdGggdGhlIGNvZGUgc2l6ZSBvciBkb24ndCB3YW50IHRvIHNlZSB0aGVzZQotCSAgbWVzc2FnZXMuCi0KIGNvbmZpZyBERUJVR19TVEFDS19VU0FHRQogCWJvb2wgIkVuYWJsZSBzdGFjayB1dGlsaXphdGlvbiBpbnN0cnVtZW50YXRpb24iCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA4ZWJiYjUxLi4wYzY4NTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC03NCw3ICs3NCw3IEBACiBaQlNTQUREUgk6PSAkKENPTkZJR19aQk9PVF9ST01fQlNTKQogZWxzZQogWlRFWFRBRERSCTo9IDAKLVpCU1NBRERSCTo9IEFMSUdOKDQpCitaQlNTQUREUgk6PSBBTElHTig4KQogZW5kaWYKIAogU0VERkxBR1MJPSBzL1RFWFRfU1RBUlQvJChaVEVYVEFERFIpLztzL0JTU19TVEFSVC8kKFpCU1NBRERSKS8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IGFkZjU4M2MuLjQ5ZjViMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtMTc5LDE1ICsxNzksMTQgQEAKIAkJYmwJY2FjaGVfb24KIAogcmVzdGFydDoJYWRyCXIwLCBMQzAKLQkJbGRtaWEJcjAsIHtyMSwgcjIsIHIzLCByNSwgcjYsIHI5LCByMTEsIHIxMn0KLQkJbGRyCXNwLCBbcjAsICMzMl0KKwkJbGRtaWEJcjAsIHtyMSwgcjIsIHIzLCByNiwgcjksIHIxMSwgcjEyfQorCQlsZHIJc3AsIFtyMCwgIzI4XQogCiAJCS8qCiAJCSAqIFdlIG1pZ2h0IGJlIHJ1bm5pbmcgYXQgYSBkaWZmZXJlbnQgYWRkcmVzcy4gIFdlIG5lZWQKIAkJICogdG8gZml4IHVwIHZhcmlvdXMgcG9pbnRlcnMuCiAJCSAqLwogCQlzdWIJcjAsIHIwLCByMQkJQCBjYWxjdWxhdGUgdGhlIGRlbHRhIG9mZnNldAotCQlhZGQJcjUsIHI1LCByMAkJQCBfc3RhcnQKIAkJYWRkCXI2LCByNiwgcjAJCUAgX2VkYXRhCiAKICNpZm5kZWYgQ09ORklHX1pCT09UX1JPTQpAQCAtMjA2LDMxICsyMDUsNDAgQEAKIC8qCiAgKiBDaGVjayB0byBzZWUgaWYgd2Ugd2lsbCBvdmVyd3JpdGUgb3Vyc2VsdmVzLgogICogICByNCAgPSBmaW5hbCBrZXJuZWwgYWRkcmVzcwotICogICByNSAgPSBzdGFydCBvZiB0aGlzIGltYWdlCiAgKiAgIHI5ICA9IHNpemUgb2YgZGVjb21wcmVzc2VkIGltYWdlCiAgKiAgIHIxMCA9IGVuZCBvZiB0aGlzIGltYWdlLCBpbmNsdWRpbmcgIGJzcy9zdGFjay9tYWxsb2Mgc3BhY2UgaWYgbm9uIFhJUAogICogV2UgYmFzaWNhbGx5IHdhbnQ6Ci0gKiAgIHI0ID49IHIxMCAtPiBPSwotICogICByNCArIGltYWdlIGxlbmd0aCA8PSByNSAtPiBPSworICogICByNCAtIDE2ayBwYWdlIGRpcmVjdG9yeSA+PSByMTAgLT4gT0sKKyAqICAgcjQgKyBpbWFnZSBsZW5ndGggPD0gY3VycmVudCBwb3NpdGlvbiAocGMpIC0+IE9LCiAgKi8KKwkJYWRkCXIxMCwgcjEwLCAjMTYzODQKIAkJY21wCXI0LCByMTAKIAkJYmhzCXdvbnRfb3ZlcndyaXRlCiAJCWFkZAlyMTAsIHI0LCByOQotCQljbXAJcjEwLCByNQorICAgQVJNKAkJY21wCXIxMCwgcGMJCSkKKyBUSFVNQigJCW1vdglsciwgcGMJCSkKKyBUSFVNQigJCWNtcAlyMTAsIGxyCQkpCiAJCWJscwl3b250X292ZXJ3cml0ZQogCiAvKgogICogUmVsb2NhdGUgb3Vyc2VsdmVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGVjb21wcmVzc2VkIGtlcm5lbC4KLSAqICAgcjUgID0gc3RhcnQgb2YgdGhpcyBpbWFnZQogICogICByNiAgPSBfZWRhdGEKICAqICAgcjEwID0gZW5kIG9mIHRoZSBkZWNvbXByZXNzZWQga2VybmVsCiAgKiBCZWNhdXNlIHdlIGFsd2F5cyBjb3B5IGFoZWFkLCB3ZSBuZWVkIHRvIGRvIGl0IGZyb20gdGhlIGVuZCBhbmQgZ28KICAqIGJhY2t3YXJkIGluIGNhc2UgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gb3ZlcmxhcC4KICAqLwotCQkvKiBSb3VuZCB1cCB0byBuZXh0IDI1Ni1ieXRlIGJvdW5kYXJ5LiAqLwotCQlhZGQJcjEwLCByMTAsICMyNTYKKwkJLyoKKwkJICogQnVtcCB0byB0aGUgbmV4dCAyNTYtYnl0ZSBib3VuZGFyeSB3aXRoIHRoZSBzaXplIG9mCisJCSAqIHRoZSByZWxvY2F0aW9uIGNvZGUgYWRkZWQuIFRoaXMgYXZvaWRzIG92ZXJ3cml0aW5nCisJCSAqIG91cnNlbGYgd2hlbiB0aGUgb2Zmc2V0IGlzIHNtYWxsLgorCQkgKi8KKwkJYWRkCXIxMCwgcjEwLCAjKChyZWxvY19jb2RlX2VuZCAtIHJlc3RhcnQgKyAyNTYpICYgfjI1NSkKIAkJYmljCXIxMCwgcjEwLCAjMjU1CiAKKwkJLyogR2V0IHN0YXJ0IG9mIGNvZGUgd2Ugd2FudCB0byBjb3B5IGFuZCBhbGlnbiBpdCBkb3duLiAqLworCQlhZHIJcjUsIHJlc3RhcnQKKwkJYmljCXI1LCByNSwgIzMxCisKIAkJc3ViCXI5LCByNiwgcjUJCUAgc2l6ZSB0byBjb3B5CiAJCWFkZAlyOSwgcjksICMzMQkJQCByb3VuZGVkIHVwIHRvIGEgbXVsdGlwbGUKIAkJYmljCXI5LCByOSwgIzMxCQlAIC4uLiBvZiAzMiBieXRlcwpAQCAtMjQ1LDYgKzI1MywxMSBAQAogCQkvKiBQcmVzZXJ2ZSBvZmZzZXQgdG8gcmVsb2NhdGVkIGNvZGUuICovCiAJCXN1YglyNiwgcjksIHI2CiAKKyNpZm5kZWYgQ09ORklHX1pCT09UX1JPTQorCQkvKiBjYWNoZV9jbGVhbl9mbHVzaCBtYXkgdXNlIHRoZSBzdGFjaywgc28gcmVsb2NhdGUgaXQgKi8KKwkJYWRkCXNwLCBzcCwgcjYKKyNlbmRpZgorCiAJCWJsCWNhY2hlX2NsZWFuX2ZsdXNoCiAKIAkJYWRyCXIwLCBCU1lNKHJlc3RhcnQpCkBAIC0zMzMsNyArMzQ2LDYgQEAKIExDMDoJCS53b3JkCUxDMAkJCUAgcjEKIAkJLndvcmQJX19ic3Nfc3RhcnQJCUAgcjIKIAkJLndvcmQJX2VuZAkJCUAgcjMKLQkJLndvcmQJX3N0YXJ0CQkJQCByNQogCQkud29yZAlfZWRhdGEJCQlAIHI2CiAJCS53b3JkCV9pbWFnZV9zaXplCQlAIHI5CiAJCS53b3JkCV9nb3Rfc3RhcnQJCUAgcjExCkBAIC0xMDYyLDYgKzEwNzQsNyBAQAogI2VuZGlmCiAKIAkJLmx0b3JnCityZWxvY19jb2RlX2VuZDoKIAogCQkuYWxpZ24KIAkJLnNlY3Rpb24gIi5zdGFjayIsICJhdyIsICVub2JpdHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbiBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgppbmRleCA1MzA5OTA5Li5lYTgwYWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCkBAIC01NCw2ICs1NCw3IEBACiAgIC5ic3MJCQk6IHsgKiguYnNzKSB9CiAgIF9lbmQgPSAuOwogCisgIC4gPSBBTElHTig4KTsJCS8qIHRoZSBzdGFjayBtdXN0IGJlIDY0LWJpdCBhbGlnbmVkICovCiAgIC5zdGFjawkJOiB7ICooLnN0YWNrKSB9CiAKICAgLnN0YWIgMAkJOiB7ICooLnN0YWIpIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZQppbmRleCBlNzUyMWJjYS4uNmVhOWI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZQpAQCAtMTYsNSArMTYsNCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfSVhQMjAwMCkJKz0gdWVuZ2luZS5vCiBvYmotJChDT05GSUdfQVJDSF9JWFAyM1hYKQkrPSB1ZW5naW5lLm8KIG9iai0kKENPTkZJR19QQ0lfSE9TVF9JVEU4MTUyKSAgKz0gaXQ4MTUyLm8KLW9iai0kKENPTkZJR19DT01NT05fQ0xLREVWKQkrPSBjbGtkZXYubwogb2JqLSQoQ09ORklHX0FSTV9USU1FUl9TUDgwNCkJKz0gdGltZXItc3AubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3BsMzMwLmMgYi9hcmNoL2FybS9jb21tb24vcGwzMzAuYwppbmRleCA4ZjBmODZkLi45NzkxMmZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vcGwzMzAuYworKysgYi9hcmNoL2FybS9jb21tb24vcGwzMzAuYwpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKIAl1bnNpZ25lZCBsY250MCwgbGNudDEsIGxqbXAwLCBsam1wMTsKIAlzdHJ1Y3QgX2FyZ19MUEVORCBscGVuZDsKIAotCS8qIE1heCBpdGVyYXRpb25zIHBvc3NpYmlsZSBpbiBETUFMUCBpcyAyNTYgKi8KKwkvKiBNYXggaXRlcmF0aW9ucyBwb3NzaWJsZSBpbiBETUFMUCBpcyAyNTYgKi8KIAlpZiAoKmJ1cnN0cyA+PSAyNTYqMjU2KSB7CiAJCWxjbnQxID0gMjU2OwogCQlsY250MCA9IDI1NjsKQEAgLTE0NDYsNyArMTQ0Niw3IEBACiAJfQogCiAJZm9yIChldiA9IDA7IGV2IDwgcGktPnBjZmcubnVtX2V2ZW50czsgZXYrKykgewotCQlpZiAodmFsICYgKDEgPDwgZXYpKSB7IC8qIEV2ZW50IG9jY3VyZWQgKi8KKwkJaWYgKHZhbCAmICgxIDw8IGV2KSkgeyAvKiBFdmVudCBvY2N1cnJlZCAqLwogCQkJc3RydWN0IHBsMzMwX3RocmVhZCAqdGhyZDsKIAkJCXUzMiBpbnRlbiA9IHJlYWRsKHJlZ3MgKyBJTlRFTik7CiAJCQlpbnQgYWN0aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXg0MF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1ZTkyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXg0MF9kZWZjb25maWcKQEAgLTAsMCArMSw0OCBAQAorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJGRCBpcyBub3Qgc2V0CisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQorQ09ORklHX0FSQ0hfQVQ5MVg0MD15CitDT05GSUdfTUFDSF9BVDkxRUIwMT15CitDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDA9eQorQ09ORklHX0NQVV9BUk03VERNST15CitDT05GSUdfU0VUX01FTV9QQVJBTT15CitDT05GSUdfRFJBTV9CQVNFPTB4MDEwMDAwMDAKK0NPTkZJR19EUkFNX1NJWkU9MHgwMDQwMDAwMAorQ09ORklHX0ZMQVNIX01FTV9CQVNFPTB4MDE0MDAwMDAKK0NPTkZJR19QUk9DRVNTT1JfSUQ9MHgxNDAwMDA0MAorQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQklORk1UX0ZMQVQ9eQorIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9ST009eQorQ09ORklHX0JMS19ERVZfUkFNPXkKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAppbmRleCBlZDViYzllLi5jZDQ0NThmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0FTTV9BUk1fQ1BVVFlQRV9ICiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2RlZmluZSBDUFVJRF9JRAkwCiAjZGVmaW5lIENQVUlEX0NBQ0hFVFlQRQkxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9mcHN0YXRlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mcHN0YXRlLmgKaW5kZXggZWU1ZTAzZS4uM2FkNGMxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnBzdGF0ZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Zwc3RhdGUuaApAQCAtMTgsNyArMTgsNyBAQAogICogVkZQIHN0b3JhZ2UgYXJlYSBoYXM6CiAgKiAgLSBGUEVYQywgRlBTQ1IsIEZQSU5TVCBhbmQgRlBJTlNUMi4KICAqICAtIDE2IG9yIDMyIGRvdWJsZSBwcmVjaXNpb24gZGF0YSByZWdpc3RlcnMKLSAqICAtIGFuIGltcGxlbWVudGF0aW9uLWRlcGVuZGFudCB3b3JkIG9mIHN0YXRlIGZvciBGTERNWC9GU1RNWCAocHJlLUFSTXY2KQorICogIC0gYW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdvcmQgb2Ygc3RhdGUgZm9yIEZMRE1YL0ZTVE1YIChwcmUtQVJNdjYpCiAgKiAKICAqICBGUEVYQyB3aWxsIGFsd2F5cyBiZSBub24temVybyBvbmNlIHRoZSBWRlAgaGFzIGJlZW4gdXNlZCBpbiB0aGlzIHByb2Nlc3MuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaAppbmRleCBjN2FmYmM1Li43ZTMwODc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWNhY2hlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1jYWNoZS5oCkBAIC0xMjYsNyArMTI2LDcgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoX0NBQ0hFKSAmJiAhZGVmaW5lZChNVUxUSV9DQUNIRSkKLSNlcnJvciBVbmtub3duIGNhY2hlIG1haW50YWluZW5jZSBtb2RlbAorI2Vycm9yIFVua25vd24gY2FjaGUgbWFpbnRlbmFuY2UgbW9kZWwKICNlbmRpZgogCiAjaWZuZGVmIE1VTFRJX0NBQ0hFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKaW5kZXggMGVjMzVkMS4uZmJmNzFkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaApAQCAtMTAsOCArMTAsOCBAQAogICoKICAqICBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIGdsdWUgdG8gc3RpY2sgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBiaXRzCiAgKiAgaW50byB0aGUga2VybmVsIGluIGFuIGVmZmljaWVudCBtYW5uZXIuICBUaGUgaWRlYSBpcyB0byB1c2UgYnJhbmNoZXMKLSAqICB3aGVuIHdlJ3JlIG9ubHkgdGFyZ2V0dGluZyBvbmUgY2xhc3Mgb2YgVExCLCBvciBpbmRpcmVjdCBjYWxscwotICogIHdoZW4gd2UncmUgdGFyZ2V0dGluZyBtdWx0aXBsZSBjbGFzc2VzIG9mIFRMQnMuCisgKiAgd2hlbiB3ZSdyZSBvbmx5IHRhcmdldGluZyBvbmUgY2xhc3Mgb2YgVExCLCBvciBpbmRpcmVjdCBjYWxscworICogIHdoZW4gd2UncmUgdGFyZ2V0aW5nIG11bHRpcGxlIGNsYXNzZXMgb2YgVExCcy4KICAqLwogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvcGwwODAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3BsMDgwLmgKaW5kZXggZjM1Yjg2ZS4uZTRhMDRlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvcGwwODAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9wbDA4MC5oCkBAIC0xNiw3ICsxNiw3IEBACiAgKiBtYWtlIGl0IG5vdCBlbnRpZXJseSBjb21wYXRpYmxlIHdpdGggdGhlIFBMMDgwIHNwZWNpZmljYXRpb24gZnJvbQogICogQVJNLiBXaGVuIGluIGRvdWJ0LCBjaGVjayB0aGUgU2Ftc3VuZyBkb2N1bWVudGF0aW9uIGZpcnN0LgogICoKLSAqIFRoZSBTYW1zdW5nIGRlZmluZXMgYXJlIFBMMDgwUywgYW5kIGFkZCBhbiBleHRyYSBjb250cm9sbCByZWdpc3RlciwKKyAqIFRoZSBTYW1zdW5nIGRlZmluZXMgYXJlIFBMMDgwUywgYW5kIGFkZCBhbiBleHRyYSBjb250cm9sIHJlZ2lzdGVyLAogICogdGhlIGFiaWxpdHkgdG8gbW92ZSBtb3JlIHRoYW4gMl4xMSBjb3VudHMgb2YgZGF0YSBhbmQgc29tZSBleHRyYQogICogT25lTkFORCBmZWF0dXJlcy4KICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rcHJvYmVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKaW5kZXggYmI4YTE5Yi4uZTQ2YmRkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3Byb2Jlcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMzksMTAgKzM5LDEzIEBACiBzdHJ1Y3Qga3Byb2JlOwogdHlwZWRlZiB2b2lkIChrcHJvYmVfaW5zbl9oYW5kbGVyX3QpKHN0cnVjdCBrcHJvYmUgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiAKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAoa3Byb2JlX2NoZWNrX2NjKSh1bnNpZ25lZCBsb25nKTsKKwogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24uICovCiBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKIAlrcHJvYmVfb3Bjb2RlX3QJCSppbnNuOwogCWtwcm9iZV9pbnNuX2hhbmRsZXJfdAkqaW5zbl9oYW5kbGVyOworCWtwcm9iZV9jaGVja19jYwkJKmluc25fY2hlY2tfY2M7CiB9OwogCiBzdHJ1Y3QgcHJldl9rcHJvYmUgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA5YTg3ODIzLi44MzI4ODhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTU5LDcgKzE1OSw3IEBACiAjaW5jbHVkZSA8bWFjaC9iYXJyaWVycy5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJNX0RNQV9NRU1fQlVGRkVSQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfU01QKQogI2RlZmluZSBtYigpCQlkbyB7IGRzYigpOyBvdXRlcl9zeW5jKCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHJtYigpCQlkbWIoKQorI2RlZmluZSBybWIoKQkJZHNiKCkKICNkZWZpbmUgd21iKCkJCW1iKCkKICNlbHNlCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgpAQCAtMjQ5LDcgKzI0OSw3IEBACiAgKiBjYWNoZSB0b3RhbGx5LiAgVGhpcyBtZWFucyB0aGF0IHRoZSBjYWNoZSBiZWNvbWVzIGluY29uc2lzdGVudCwgYW5kLAogICogc2luY2Ugd2UgdXNlIG5vcm1hbCBsb2Fkcy9zdG9yZXMgYXMgd2VsbCwgdGhpcyBpcyByZWFsbHkgYmFkLgogICogVHlwaWNhbGx5LCB0aGlzIGNhdXNlcyBvb3BzZW4gaW4gZmlscF9jbG9zZSwgYnV0IGNvdWxkIGhhdmUgb3RoZXIsCi0gKiBtb3JlIGRpc2FzdGVyb3VzIGVmZmVjdHMuICBUaGVyZSBhcmUgdHdvIHdvcmstYXJvdW5kczoKKyAqIG1vcmUgZGlzYXN0cm91cyBlZmZlY3RzLiAgVGhlcmUgYXJlIHR3byB3b3JrLWFyb3VuZHM6CiAgKiAgMS4gRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBlbXVsYXRlIHRoZSBhdG9taWMgc3dhcAogICogIDIuIENsZWFuIHRoZSBjYWNoZSwgcGVyZm9ybSBhdG9taWMgc3dhcCwgZmx1c2ggdGhlIGNhY2hlCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX25vdGlmeS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX25vdGlmeS5oCmluZGV4IGM0MzkxYmEuLjFkYzk4MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9ub3RpZnkuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUgVEhSRUFEX05PVElGWV9GTFVTSAkwCiAjZGVmaW5lIFRIUkVBRF9OT1RJRllfRVhJVAkxCiAjZGVmaW5lIFRIUkVBRF9OT1RJRllfU1dJVENICTIKKyNkZWZpbmUgVEhSRUFEX05PVElGWV9DT1BZCTMKIAogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmluZGV4IDQ3ZjAyM2EuLjE0NzQ5YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtNDcsNyArNDcsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSVdNTVhUCi0vKiBpd21teHRfYXJlYSBpcyAweDk4IGJ5dGVzIGxvbmcsIHByZWNlZWRlZCBieSA4IGJ5dGVzIG9mIHNpZ25hdHVyZSAqLworLyogaXdtbXh0X2FyZWEgaXMgMHg5OCBieXRlcyBsb25nLCBwcmVjZWRlZCBieSA4IGJ5dGVzIG9mIHNpZ25hdHVyZSAqLwogI2RlZmluZSBJV01NWFRfTUFHSUMJCTB4MTJlZjg0MmEKICNkZWZpbmUgSVdNTVhUX1NUT1JBR0VfU0laRQkoSVdNTVhUX1NJWkUgKyA4KQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGM4OTFlYjcuLjg3ZGJlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zOTYsNiArMzk2LDEwIEBACiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NykKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCQkoX19OUl9TWVNDQUxMX0JBU0UrMzY4KQogI2RlZmluZSBfX05SX3BybGltaXQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSszNjkpCisjZGVmaW5lIF9fTlJfbmFtZV90b19oYW5kbGVfYXQJCShfX05SX1NZU0NBTExfQkFTRSszNzApCisjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJCShfX05SX1NZU0NBTExfQkFTRSszNzEpCisjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM3MikKKyNkZWZpbmUgX19OUl9zeW5jZnMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzczKQogCiAvKgogICogVGhlIGZvbGxvd2luZyBTV0lzIGFyZSBBUk0gcHJpdmF0ZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCA3NDU1NGYxLi44ZDk1NDQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBvYmotJChDT05GSUdfQVJUSFVSKQkJKz0gYXJ0aHVyLm8KIG9iai0kKENPTkZJR19JU0FfRE1BKQkJKz0gZG1hLWlzYS5vCiBvYmotJChDT05GSUdfUENJKQkJKz0gYmlvczMyLm8gaXNhLm8KLW9iai0kKENPTkZJR19QTSkJCSs9IHNsZWVwLm8KK29iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IHNsZWVwLm8KIG9iai0kKENPTkZJR19IQVZFX1NDSEVEX0NMT0NLKQkrPSBzY2hlZF9jbG9jay5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc21wX3RsYi5vCiBvYmotJChDT05GSUdfSEFWRV9BUk1fU0NVKQkrPSBzbXBfc2N1Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKaW5kZXggNWMyNmVjYy4uN2ZiZjI4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKQEAgLTM3OSw2ICszNzksMTAgQEAKIAkJQ0FMTChzeXNfZmFub3RpZnlfaW5pdCkKIAkJQ0FMTChzeXNfZmFub3RpZnlfbWFyaykKIAkJQ0FMTChzeXNfcHJsaW1pdDY0KQorLyogMzcwICovCUNBTEwoc3lzX25hbWVfdG9faGFuZGxlX2F0KQorCQlDQUxMKHN5c19vcGVuX2J5X2hhbmRsZV9hdCkKKwkJQ0FMTChzeXNfY2xvY2tfYWRqdGltZSkKKwkJQ0FMTChzeXNfc3luY2ZzKQogI2lmbmRlZiBzeXNjYWxsc19jb3VudGVkCiAuZXF1IHN5c2NhbGxzX3BhZGRpbmcsICgoTlJfc3lzY2FsbHMgKyAzKSAmIH4zKSAtIE5SX3N5c2NhbGxzCiAjZGVmaW5lIHN5c2NhbGxzX2NvdW50ZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbGYuYyBiL2FyY2gvYXJtL2tlcm5lbC9lbGYuYwppbmRleCBkNGEwZGExLi45YjA1YzZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZWxmLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VsZi5jCkBAIC00MCwxNSArNDAsMjIgQEAKIHZvaWQgZWxmX3NldF9wZXJzb25hbGl0eShjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICp4KQogewogCXVuc2lnbmVkIGludCBlZmxhZ3MgPSB4LT5lX2ZsYWdzOwotCXVuc2lnbmVkIGludCBwZXJzb25hbGl0eSA9IFBFUl9MSU5VWF8zMkJJVDsKKwl1bnNpZ25lZCBpbnQgcGVyc29uYWxpdHkgPSBjdXJyZW50LT5wZXJzb25hbGl0eSAmIH5QRVJfTUFTSzsKKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IExpbnV4IEVMRiBleGVjdXRhYmxlcywgc28gYWx3YXlzIHNldCB0aGUKKwkgKiBwZXJzb25hbGl0eSB0byBMSU5VWC4KKwkgKi8KKwlwZXJzb25hbGl0eSB8PSBQRVJfTElOVVg7CiAKIAkvKgogCSAqIEFQQ1MtMjYgaXMgb25seSB2YWxpZCBmb3IgT0FCSSBleGVjdXRhYmxlcwogCSAqLwotCWlmICgoZWZsYWdzICYgRUZfQVJNX0VBQklfTUFTSykgPT0gRUZfQVJNX0VBQklfVU5LTk9XTikgewotCQlpZiAoZWZsYWdzICYgRUZfQVJNX0FQQ1NfMjYpCi0JCQlwZXJzb25hbGl0eSA9IFBFUl9MSU5VWDsKLQl9CisJaWYgKChlZmxhZ3MgJiBFRl9BUk1fRUFCSV9NQVNLKSA9PSBFRl9BUk1fRUFCSV9VTktOT1dOICYmCisJICAgIChlZmxhZ3MgJiBFRl9BUk1fQVBDU18yNikpCisJCXBlcnNvbmFsaXR5ICY9IH5BRERSX0xJTUlUXzMyQklUOworCWVsc2UKKwkJcGVyc29uYWxpdHkgfD0gQUREUl9MSU1JVF8zMkJJVDsKIAogCXNldF9wZXJzb25hbGl0eShwZXJzb25hbGl0eSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IDhkYmMxMjYuLjg3YWNjMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtODY4LDYgKzg2OCwxMyBAQAogCQkgKi8KIAkJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzEsIGMwLCA0IiA6IDogInIiICgwKSk7CiAJCWlzYigpOworCisJCS8qCisJCSAqIENsZWFyIGFueSBjb25maWd1cmVkIHZlY3Rvci1jYXRjaCBldmVudHMgYmVmb3JlCisJCSAqIGVuYWJsaW5nIG1vbml0b3IgbW9kZS4KKwkJICovCisJCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMwLCBjNywgMCIgOiA6ICJyIiAoMCkpOworCQlpc2IoKTsKIAl9CiAKIAlpZiAoZW5hYmxlX21vbml0b3JfbW9kZSgpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwppbmRleCAyMzg5MTMxLi4xNWVlZmY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwpAQCAtMzQsOSArMzQsNiBAQAogICoKICAqICAgKikgSWYgdGhlIFBDIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGluc3RydWN0aW9uLCB0aGUKICAqICAgICAgaW5zdHJ1Y3Rpb24gbXVzdCBiZSBmdWxseSBzaW11bGF0ZWQgaW4gc29mdHdhcmUuCi0gKiAgICAgIElmIGl0IGlzIGEgY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb24sIHRoZSBoYW5kbGVyCi0gKiAgICAgIHdpbGwgdXNlIGluc25bMF0gdG8gY29weSBpdHMgY29uZGl0aW9uIGNvZGUgdG8KLSAqCXNldCByMCB0byAxIGFuZCBpbnNuWzFdIHRvICJtb3YgcGMsIGxyIiB0byByZXR1cm4uCiAgKgogICogICAqKSBPdGhlcndpc2UsIGEgbW9kaWZpZWQgZm9ybSBvZiB0aGUgaW5zdHJ1Y3Rpb24gaXMKICAqICAgICAgZGlyZWN0bHkgZXhlY3V0ZWQuICBJdHMgaGFuZGxlciBjYWxscyB0aGUKQEAgLTY4LDEzICs2NSwxNyBAQAogCiAjZGVmaW5lIGJyYW5jaF9kaXNwbGFjZW1lbnQoaW5zbikgc2lnbl9leHRlbmQoKChpbnNuKSAmIDB4ZmZmZmZmKSA8PCAyLCAyNSkKIAorI2RlZmluZSBpc19yMTUoaW5zbiwgYml0cG9zKSAoKChpbnNuKSAmICgweGYgPDwgYml0cG9zKSkgPT0gKDB4ZiA8PCBiaXRwb3MpKQorCisvKgorICogVGVzdCBpZiBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyB3cml0ZWJhY2sgdGhlIGFkZHJlc3MgcmVnaXN0ZXIuCisgKiBpZiBQIChiaXQgMjQpID09IDAgb3IgVyAoYml0IDIxKSA9PSAxCisgKi8KKyNkZWZpbmUgaXNfd3JpdGViYWNrKGluc24pICgoaW5zbiBeIDB4MDEwMDAwMDApICYgMHgwMTIwMDAwMCkKKwogI2RlZmluZSBQU1JfZnMJKFBTUl9mfFBTUl9zKQogCiAjZGVmaW5lIEtQUk9CRV9SRVRVUk5fSU5TVFJVQ1RJT04JMHhlMWEwZjAwZQkvKiBtb3YgcGMsIGxyICovCi0jZGVmaW5lIFNFVF9SMF9UUlVFX0lOU1RSVUNUSU9OCQkweGUzYTAwMDAxCS8qIG1vdglyMCwgIzEgKi8KLQotI2RlZmluZQl0cnVlY2NfaW5zbihpbnNuKQkoKChpbnNuKSAmIDB4ZjAwMDAwMDApIHwgXAotCQkJCSAoU0VUX1IwX1RSVUVfSU5TVFJVQ1RJT04gJiAweDBmZmZmZmZmKSkKIAogdHlwZWRlZiBsb25nIChpbnNuXzBhcmdfZm5fdCkodm9pZCk7CiB0eXBlZGVmIGxvbmcgKGluc25fMWFyZ19mbl90KShsb25nKTsKQEAgLTQxOSwxNCArNDIwLDEwIEBACiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBzaW11bGF0ZV9iYmwoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKIAlsb25nIGlhZGRyID0gKGxvbmcpcC0+YWRkcjsKIAlpbnQgZGlzcCAgPSBicmFuY2hfZGlzcGxhY2VtZW50KGluc24pOwogCi0JaWYgKCFpbnNuc2xvdF8xYXJnX3JmbGFncygwLCByZWdzLT5BUk1fY3BzciwgaV9mbikpCi0JCXJldHVybjsKLQogCWlmIChpbnNuICYgKDEgPDwgMjQpKQogCQlyZWdzLT5BUk1fbHIgPSBpYWRkciArIDQ7CiAKQEAgLTQ0NiwxNCArNDQzLDEwIEBACiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBzaW11bGF0ZV9ibHgyYngoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKIAlpbnQgcm0gPSBpbnNuICYgMHhmOwogCWxvbmcgcm12ID0gcmVncy0+dXJlZ3Nbcm1dOwogCi0JaWYgKCFpbnNuc2xvdF8xYXJnX3JmbGFncygwLCByZWdzLT5BUk1fY3BzciwgaV9mbikpCi0JCXJldHVybjsKLQogCWlmIChpbnNuICYgKDEgPDwgNSkpCiAJCXJlZ3MtPkFSTV9sciA9IChsb25nKXAtPmFkZHIgKyA0OwogCkBAIC00NjMsOSArNDU2LDE2IEBACiAJCXJlZ3MtPkFSTV9jcHNyIHw9IFBTUl9UX0JJVDsKIH0KIAorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNpbXVsYXRlX21ycyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKKwlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMHhmOGZmMDNkZjsgLyogTWFzayBvdXQgZXhlY3V0aW9uIHN0YXRlICovCisJcmVncy0+dXJlZ3NbcmRdID0gcmVncy0+QVJNX2Nwc3IgJiBtYXNrOworfQorCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfbGRtMXN0bTEoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKIAlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CiAJaW50IGxiaXQgPSBpbnNuICYgKDEgPDwgMjApOwpAQCAtNDc2LDkgKzQ3Niw2IEBACiAJaW50IHJlZ19iaXRfdmVjdG9yOwogCWludCByZWdfY291bnQ7CiAKLQlpZiAoIWluc25zbG90XzFhcmdfcmZsYWdzKDAsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKSkKLQkJcmV0dXJuOwotCiAJcmVnX2NvdW50ID0gMDsKIAlyZWdfYml0X3ZlY3RvciA9IGluc24gJiAweGZmZmY7CiAJd2hpbGUgKHJlZ19iaXRfdmVjdG9yKSB7CkBAIC01MTAsMTEgKzUwNyw2IEBACiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBzaW11bGF0ZV9zdG0xX3BjKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07Ci0KLQlpZiAoIWluc25zbG90XzFhcmdfcmZsYWdzKDAsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKSkKLQkJcmV0dXJuOwotCiAJcmVncy0+QVJNX3BjID0gKGxvbmcpcC0+YWRkciArIHN0cl9wY19vZmZzZXQ7CiAJc2ltdWxhdGVfbGRtMXN0bTEocCwgcmVncyk7CiAJcmVncy0+QVJNX3BjID0gKGxvbmcpcC0+YWRkciArIDQ7CkBAIC01MjUsMjQgKzUxNywxNiBAQAogCXJlZ3MtPnVyZWdzWzEyXSA9IHJlZ3MtPnVyZWdzWzEzXTsKIH0KIAotc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfbGRjc3RjKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07Ci0Ja3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7Ci0JaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwotCWxvbmcgcm52ID0gcmVncy0+dXJlZ3Nbcm5dOwotCi0JLyogU2F2ZSBSbiBpbiBjYXNlIG9mIHdyaXRlYmFjay4gKi8KLQlyZWdzLT51cmVnc1tybl0gPSBpbnNuc2xvdF8xYXJnX3JmbGFncyhybnYsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKLX0KLQogc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfbGRyZChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnNuXzJhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzJhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOworCWxvbmcgcHBjID0gKGxvbmcpcC0+YWRkciArIDg7CiAJaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOwogCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKIAlpbnQgcm0gPSBpbnNuICYgMHhmOyAgLyogcm0gbWF5IGJlIGludmFsaWQsIGRvbid0IGNhcmUuICovCisJbG9uZyBybXYgPSAocm0gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm1dOworCWxvbmcgcm52ID0gKHJuID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JuXTsKIAogCS8qIE5vdCBmb2xsb3dpbmcgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uIGhlcmUsIHNvIG5lZWQgYXNtKCkuICovCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKApAQCAtNTU0LDI5ICs1MzgsMzYgQEAKIAkJInN0cglyMCwgJVtybl0JXG5cdCIJLyogaW4gY2FzZSBvZiB3cml0ZWJhY2sgKi8KIAkJInN0cglyMiwgJVtyZDBdCVxuXHQiCiAJCSJzdHIJcjMsICVbcmQxXQlcblx0IgotCQk6IFtybl0gICIrbSIgKHJlZ3MtPnVyZWdzW3JuXSksCisJCTogW3JuXSAgIittIiAocm52KSwKIAkJICBbcmQwXSAiPW0iIChyZWdzLT51cmVnc1tyZF0pLAogCQkgIFtyZDFdICI9bSIgKHJlZ3MtPnVyZWdzW3JkKzFdKQotCQk6IFtybV0gICAibSIgKHJlZ3MtPnVyZWdzW3JtXSksCisJCTogW3JtXSAgICJtIiAocm12KSwKIAkJICBbY3Bzcl0gInIiIChyZWdzLT5BUk1fY3BzciksCiAJCSAgW2lfZm5dICJyIiAoaV9mbikKIAkJOiAicjAiLCAicjEiLCAicjIiLCAicjMiLCAibHIiLCAiY2MiCiAJKTsKKwlpZiAoaXNfd3JpdGViYWNrKGluc24pKQorCQlyZWdzLT51cmVnc1tybl0gPSBybnY7CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3N0cmQoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW5zbl80YXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl80YXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKKwlsb25nIHBwYyA9IChsb25nKXAtPmFkZHIgKyA4OwogCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKIAlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CiAJaW50IHJtICA9IGluc24gJiAweGY7Ci0JbG9uZyBybnYgPSByZWdzLT51cmVnc1tybl07Ci0JbG9uZyBybXYgPSByZWdzLT51cmVnc1tybV07ICAvKiBybS9ybXYgbWF5IGJlIGludmFsaWQsIGRvbid0IGNhcmUuICovCisJbG9uZyBybnYgPSAocm4gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm5dOworCS8qIHJtL3JtdiBtYXkgYmUgaW52YWxpZCwgZG9uJ3QgY2FyZS4gKi8KKwlsb25nIHJtdiA9IChybSA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybV07CisJbG9uZyBybnZfd2I7CiAKLQlyZWdzLT51cmVnc1tybl0gPSBpbnNuc2xvdF80YXJnX3JmbGFncyhybnYsIHJtdiwgcmVncy0+dXJlZ3NbcmRdLAorCXJudl93YiA9IGluc25zbG90XzRhcmdfcmZsYWdzKHJudiwgcm12LCByZWdzLT51cmVnc1tyZF0sCiAJCQkJCSAgICAgICByZWdzLT51cmVnc1tyZCsxXSwKIAkJCQkJICAgICAgIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKKwlpZiAoaXNfd3JpdGViYWNrKGluc24pKQorCQlyZWdzLT51cmVnc1tybl0gPSBybnZfd2I7CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX2xkcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTYzMCwzMSArNjIxLDYgQEAKIAkJcmVncy0+dXJlZ3Nbcm5dID0gcm52X3diOyAgLyogU2F2ZSBSbiBpbiBjYXNlIG9mIHdyaXRlYmFjay4gKi8KIH0KIAotc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfbXJyYyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnNuX2xscmV0XzBhcmdfZm5fdCAqaV9mbiA9IChpbnNuX2xscmV0XzBhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwotCXVuaW9uIHJlZ19wYWlyIGZucjsKLQlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7Ci0JaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwotCi0JZm5yLmRyID0gaW5zbnNsb3RfbGxyZXRfMGFyZ19yZmxhZ3MocmVncy0+QVJNX2Nwc3IsIGlfZm4pOwotCXJlZ3MtPnVyZWdzW3JuXSA9IGZuci5yMDsKLQlyZWdzLT51cmVnc1tyZF0gPSBmbnIucjE7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX21jcnIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW5zbl8yYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8yYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKLQlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKLQlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7Ci0JaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwotCWxvbmcgcm52ID0gcmVncy0+dXJlZ3Nbcm5dOwotCWxvbmcgcmR2ID0gcmVncy0+dXJlZ3NbcmRdOwotCi0JaW5zbnNsb3RfMmFyZ19yZmxhZ3Mocm52LCByZHYsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKLX0KLQogc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfc2F0KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CkBAIC02ODgsMzIgKzY1NCwzMiBAQAogCWluc25zbG90XzBhcmdfcmZsYWdzKHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKIH0KIAotc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfcmQxMihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX25vcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzBhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzBhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMKK2VtdWxhdGVfcmQxMl9tb2RpZnkoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKIAlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7CisJbG9uZyByZHYgPSByZWdzLT51cmVnc1tyZF07CiAKLQlyZWdzLT51cmVnc1tyZF0gPSBpbnNuc2xvdF8wYXJnX3JmbGFncyhyZWdzLT5BUk1fY3BzciwgaV9mbik7CisJcmVncy0+dXJlZ3NbcmRdID0gaW5zbnNsb3RfMWFyZ19yZmxhZ3MocmR2LCByZWdzLT5BUk1fY3BzciwgaV9mbik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX2lyZDEyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgX19rcHJvYmVzCitlbXVsYXRlX3JkMTJybjBfbW9kaWZ5KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CisJaW5zbl8yYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8yYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKLQlpbnQgaXJkID0gKGluc24gPj4gMTIpICYgMHhmOwotCi0JaW5zbnNsb3RfMWFyZ19yZmxhZ3MocmVncy0+dXJlZ3NbaXJkXSwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwotfQotCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9ybjE2KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07Ci0Ja3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7Ci0JaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOworCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKKwlpbnQgcm4gPSBpbnNuICYgMHhmOworCWxvbmcgcmR2ID0gcmVncy0+dXJlZ3NbcmRdOwogCWxvbmcgcm52ID0gcmVncy0+dXJlZ3Nbcm5dOwogCi0JaW5zbnNsb3RfMWFyZ19yZmxhZ3Mocm52LCByZWdzLT5BUk1fY3BzciwgaV9mbik7CisJcmVncy0+dXJlZ3NbcmRdID0gaW5zbnNsb3RfMmFyZ19yZmxhZ3MocmR2LCBybnYsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKIH0KIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfcmQxMnJtMChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTgxOSw2ICs3ODUsMTcgQEAKIH0KIAogc3RhdGljIHZvaWQgX19rcHJvYmVzCitlbXVsYXRlX2FsdV90ZXN0c19pbW0oc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKKwlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CisJbG9uZyBybnYgPSAocm4gPT0gMTUpID8gKGxvbmcpcC0+YWRkciArIDggOiByZWdzLT51cmVnc1tybl07CisKKwlpbnNuc2xvdF8xYXJnX3J3ZmxhZ3Mocm52LCAmcmVncy0+QVJNX2Nwc3IsIGlfZm4pOworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMKIGVtdWxhdGVfYWx1X3JmbGFncyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnNuXzNhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzNhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwpAQCAtODU0LDE0ICs4MzEsMzQgQEAKIAkJaW5zbnNsb3RfM2FyZ19yd2ZsYWdzKHJudiwgcm12LCByc3YsICZyZWdzLT5BUk1fY3BzciwgaV9mbik7CiB9CiAKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcworZW11bGF0ZV9hbHVfdGVzdHMoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW5zbl8zYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8zYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKKwlsb25nIHBwYyA9IChsb25nKXAtPmFkZHIgKyA4OworCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKKwlpbnQgcnMgPSAoaW5zbiA+PiA4KSAmIDB4ZjsJLyogcnMvcnN2IG1heSBiZSBpbnZhbGlkLCBkb24ndCBjYXJlLiAqLworCWludCBybSA9IGluc24gJiAweGY7CisJbG9uZyBybnYgPSAocm4gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm5dOworCWxvbmcgcm12ID0gKHJtID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JtXTsKKwlsb25nIHJzdiA9IHJlZ3MtPnVyZWdzW3JzXTsKKworCWluc25zbG90XzNhcmdfcndmbGFncyhybnYsIHJtdiwgcnN2LCAmcmVncy0+QVJNX2Nwc3IsIGlfZm4pOworfQorCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIHByZXBfZW11bGF0ZV9sZHJfc3RyKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7Ci0JaW50IGliaXQgPSAoaW5zbiAmICgxIDw8IDI2KSkgPyAyNSA6IDIyOworCWludCBub3RfaW1tID0gKGluc24gJiAoMSA8PCAyNikpID8gKGluc24gJiAoMSA8PCAyNSkpCisJCQkJCSA6ICh+aW5zbiAmICgxIDw8IDIyKSk7CisKKwlpZiAoaXNfd3JpdGViYWNrKGluc24pICYmIGlzX3IxNShpbnNuLCAxNikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBXcml0ZWJhY2sgdG8gUEMgKi8KIAogCWluc24gJj0gMHhmZmYwMGZmZjsKIAlpbnNuIHw9IDB4MDAwMDEwMDA7CS8qIFJuID0gcjAsIFJkID0gcjEgKi8KLQlpZiAoaW5zbiAmICgxIDw8IGliaXQpKSB7CisJaWYgKG5vdF9pbW0pIHsKIAkJaW5zbiAmPSB+MHhmOwogCQlpbnNuIHw9IDI7CS8qIFJtID0gcjIgKi8KIAl9CkBAIC04NzEsOCArODY4LDM3IEBACiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcworcHJlcF9lbXVsYXRlX3JkMTJfbW9kaWZ5KGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCit7CisJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCisJaW5zbiAmPSAweGZmZmYwZmZmOwkvKiBSZCA9IHIwICovCisJYXNpLT5pbnNuWzBdID0gaW5zbjsKKwlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfcmQxMl9tb2RpZnk7CisJcmV0dXJuIElOU05fR09PRDsKK30KKworc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCitwcmVwX2VtdWxhdGVfcmQxMnJuMF9tb2RpZnkoa3Byb2JlX29wY29kZV90IGluc24sCisJCQkgICAgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQoreworCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKworCWluc24gJj0gMHhmZmZmMGZmMDsJLyogUmQgPSByMCAqLworCWluc24gfD0gMHgwMDAwMDAwMTsJLyogUm4gPSByMSAqLworCWFzaS0+aW5zblswXSA9IGluc247CisJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX3JkMTJybjBfbW9kaWZ5OworCXJldHVybiBJTlNOX0dPT0Q7Cit9CisKK3N0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwogcHJlcF9lbXVsYXRlX3JkMTJybTAoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKIAlpbnNuICY9IDB4ZmZmZjBmZjA7CS8qIFJkID0gcjAsIFJtID0gcjAgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwogCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9yZDEycm0wOwpAQCAtODgwLDE4ICs5MDYsMTIgQEAKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCi1wcmVwX2VtdWxhdGVfcmQxMihrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQotewotCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLwotCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX3JkMTI7Ci0JcmV0dXJuIElOU05fR09PRDsKLX0KLQotc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGtwcm9iZV9vcGNvZGVfdCBpbnNuLAogCQkJCXN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKIAlpbnNuICY9IDB4ZmZmMDBmZjA7CS8qIFJkID0gcjAsIFJuID0gcjAgKi8KIAlpbnNuIHw9IDB4MDAwMDAwMDE7CS8qIFJtID0gcjEgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtOTAzLDYgKzkyMyw5IEBACiBwcmVwX2VtdWxhdGVfcmQxNnJzOHJtMF93ZmxhZ3Moa3Byb2JlX29wY29kZV90IGluc24sCiAJCQkgICAgICAgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCWlmIChpc19yMTUoaW5zbiwgMTYpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKwogCWluc24gJj0gMHhmZmYwZjBmMDsJLyogUmQgPSByMCwgUnMgPSByMCAqLwogCWluc24gfD0gMHgwMDAwMDAwMTsJLyogUm0gPSByMSAgICAgICAgICAqLwogCWFzaS0+aW5zblswXSA9IGluc247CkBAIC05MTQsNiArOTM3LDkgQEAKIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3Moa3Byb2JlX29wY29kZV90IGluc24sCiAJCQkJICAgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCWlmIChpc19yMTUoaW5zbiwgMTYpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKwogCWluc24gJj0gMHhmZmYwMDBmMDsJLyogUmQgPSByMCwgUm4gPSByMCAqLwogCWluc24gfD0gMHgwMDAwMDEwMjsJLyogUnMgPSByMSwgUm0gPSByMiAqLwogCWFzaS0+aW5zblswXSA9IGluc247CkBAIC05MjUsNiArOTUxLDkgQEAKIHByZXBfZW11bGF0ZV9yZGhpMTZyZGxvMTJyczhybTBfd2ZsYWdzKGtwcm9iZV9vcGNvZGVfdCBpbnNuLAogCQkJCSAgICAgICBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJaWYgKGlzX3IxNShpbnNuLCAxNikgfHwgaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkSGkgb3IgUmRMbyBpcyBQQyAqLworCiAJaW5zbiAmPSAweGZmZjAwMGYwOwkvKiBSZEhpID0gcjAsIFJkTG8gPSByMSAqLwogCWluc24gfD0gMHgwMDAwMTIwMzsJLyogUnMgPSByMiwgUm0gPSByMyAqLwogCWFzaS0+aW5zblswXSA9IGluc247CkBAIC05NDUsMjAgKzk3NCwxMyBAQAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBzcGFjZV8xMTExKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7Ci0JLyogQ1BTIG1tb2QgPT0gMSA6IDExMTEgMDAwMSAwMDAwIHh4MTAgeHh4eCB4eHh4IHh4MHggeHh4eCAqLwotCS8qIFJGRSAgICAgICAgICAgOiAxMTExIDEwMHggeDB4MSB4eHh4IHh4eHggMTAxMCB4eHh4IHh4eHggKi8KLQkvKiBTUlMgICAgICAgICAgIDogMTExMSAxMDB4IHgxeDAgMTEwMSB4eHh4IDAxMDEgeHh4eCB4eHh4ICovCi0JaWYgKChpbnNuICYgMHhmZmYzMDAyMCkgPT0gMHhmMTAyMDAwMCB8fAotCSAgICAoaW5zbiAmIDB4ZmU1MDBmMDApID09IDB4ZjgxMDBhMDAgfHwKLQkgICAgKGluc24gJiAweGZlNWYwZjAwKSA9PSAweGY4NGQwNTAwKQotCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKLQotCS8qIFBMRCA6IDExMTEgMDF4MSB4MTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6ICovCi0JaWYgKChpbnNuICYgMHhmZDcwMDAwMCkgPT0gMHhmNDUwMDAwMCkgewotCQlpbnNuICY9IDB4ZmZmMGZmZmY7CS8qIFJuID0gcjAgKi8KLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX3JuMTY7Ci0JCXJldHVybiBJTlNOX0dPT0Q7CisJLyogbWVtb3J5IGhpbnQgOiAxMTExIDAxMDAgeDAwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLworCS8qIFBMREkgICAgICAgIDogMTExMSAwMTAwIHgxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KKwkvKiBQTERXICAgICAgICA6IDExMTEgMDEwMSB4MDAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6ICovCisJLyogUExEICAgICAgICAgOiAxMTExIDAxMDEgeDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLworCWlmICgoaW5zbiAmIDB4ZmUzMDAwMDApID09IDB4ZjQxMDAwMDApIHsKKwkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX25vcDsKKwkJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogCX0KIAogCS8qIEJMWCgxKSA6IDExMTEgMTAxeCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6ICovCkBAIC05NjcsNDEgKzk4OSwyMiBAQAogCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CiAJfQogCi0JLyogU0VURU5EIDogMTExMSAwMDAxIDAwMDAgMDAwMSB4eHh4IHh4eHggMDAwMCB4eHh4ICovCi0JLyogQ0RQMiAgIDogMTExMSAxMTEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4MCB4eHh4ICovCi0JaWYgKChpbnNuICYgMHhmZmZmMDBmMCkgPT0gMHhmMTAxMDAwMCB8fAotCSAgICAoaW5zbiAmIDB4ZmYwMDAwMTApID09IDB4ZmUwMDAwMDApIHsKLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX25vbmU7Ci0JCXJldHVybiBJTlNOX0dPT0Q7Ci0JfQorCS8qIENQUyAgIDogMTExMSAwMDAxIDAwMDAgeHh4MCB4eHh4IHh4eHggeHgweCB4eHh4ICovCisJLyogU0VURU5EOiAxMTExIDAwMDEgMDAwMCAwMDAxIHh4eHggeHh4eCAwMDAwIHh4eHggKi8KIAorCS8qIFNSUyAgIDogMTExMSAxMDB4IHgxeDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogUkZFICAgOiAxMTExIDEwMHggeDB4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKworCS8qIENvcHJvY2Vzc29yIGluc3RydWN0aW9ucy4uLiAqLwogCS8qIE1DUlIyIDogMTExMSAxMTAwIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKFJkICE9IFJuKSAqLwogCS8qIE1SUkMyIDogMTExMSAxMTAwIDAxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKFJkICE9IFJuKSAqLwotCWlmICgoaW5zbiAmIDB4ZmZlMDAwMDApID09IDB4ZmM0MDAwMDApIHsKLQkJaW5zbiAmPSAweGZmZjAwZmZmOwkvKiBSbiA9IHIwICovCi0JCWluc24gfD0gMHgwMDAwMTAwMDsJLyogUmQgPSByMSAqLwotCQlhc2ktPmluc25bMF0gPSBpbnNuOwotCQlhc2ktPmluc25faGFuZGxlciA9Ci0JCQkoaW5zbiAmICgxIDw8IDIwKSkgPyBlbXVsYXRlX21ycmMgOiBlbXVsYXRlX21jcnI7Ci0JCXJldHVybiBJTlNOX0dPT0Q7Ci0JfQorCS8qIExEQzIgIDogMTExMSAxMTB4IHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogU1RDMiAgOiAxMTExIDExMHggeHh4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkvKiBDRFAyICA6IDExMTEgMTExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLworCS8qIE1DUjIgIDogMTExMSAxMTEwIHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCisJLyogTVJDMiAgOiAxMTExIDExMTAgeHh4MSB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KIAotCS8qIExEQzIgOiAxMTExIDExMHggeHh4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQkvKiBTVEMyIDogMTExMSAxMTB4IHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JaWYgKChpbnNuICYgMHhmZTAwMDAwMCkgPT0gMHhmYzAwMDAwMCkgewotCQlpbnNuICY9IDB4ZmZmMGZmZmY7ICAgICAgLyogUm4gPSByMCAqLwotCQlhc2ktPmluc25bMF0gPSBpbnNuOwotCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbGRjc3RjOwotCQlyZXR1cm4gSU5TTl9HT09EOwotCX0KLQotCS8qIE1DUjIgOiAxMTExIDExMTAgeHh4MCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KLQkvKiBNUkMyIDogMTExMSAxMTEwIHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCi0JaW5zbiAmPSAweGZmZmYwZmZmOwkvKiBSZCA9IHIwICovCi0JYXNpLT5pbnNuWzBdICAgICAgPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gZW11bGF0ZV9yZDEyIDogZW11bGF0ZV9pcmQxMjsKLQlyZXR1cm4gSU5TTl9HT09EOworCXJldHVybiBJTlNOX1JFSkVDVEVEOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKQEAgLTEwMTAsMTkgKzEwMTMsMTggQEAKIAkvKiBjY2NjIDAwMDEgMHh4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLwogCWlmICgoaW5zbiAmIDB4MGY5MDAwMTApID09IDB4MDEwMDAwMDApIHsKIAotCQkvKiBCWEogIDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAxMCB4eHh4ICovCi0JCS8qIE1TUiAgOiBjY2NjIDAwMDEgMHgxMCB4eHh4IHh4eHggeHh4eCAwMDAwIHh4eHggKi8KLQkJaWYgKChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwMTIwMDAyMCB8fAotCQkgICAgKGluc24gJiAweDBmYjAwMGYwKSA9PSAweDAxMjAwMDAwKQotCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7Ci0KLQkJLyogTVJTIDogY2NjYyAwMDAxIDB4MDAgeHh4eCB4eHh4IHh4eHggMDAwMCB4eHh4ICovCi0JCWlmICgoaW5zbiAmIDB4MGZiMDAwMTApID09IDB4MDEwMDAwMDApCi0JCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTIoaW5zbiwgYXNpKTsKKwkJLyogTVJTIGNwc3IgOiBjY2NjIDAwMDEgMDAwMCB4eHh4IHh4eHggeHh4eCAwMDAwIHh4eHggKi8KKwkJaWYgKChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwMTAwMDAwMCkgeworCQkJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisJCQlhc2ktPmluc25faGFuZGxlciA9IHNpbXVsYXRlX21yczsKKwkJCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKKwkJfQogCiAJCS8qIFNNTEFMeHkgOiBjY2NjIDAwMDEgMDEwMCB4eHh4IHh4eHggeHh4eCAxeHgwIHh4eHggKi8KIAkJaWYgKChpbnNuICYgMHgwZmYwMDA5MCkgPT0gMHgwMTQwMDA4MCkKLQkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZGhpMTZyZGxvMTJyczhybTBfd2ZsYWdzKGluc24sCisJCQkJCQkJCQlhc2kpOwogCiAJCS8qIFNNVUxXeSA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDF4MTAgeHh4eCAqLwogCQkvKiBTTVVMeHkgOiBjY2NjIDAwMDEgMDExMCB4eHh4IHh4eHggeHh4eCAxeHgwIHh4eHggKi8KQEAgLTEwMzEsMjQgKzEwMzMsMjkgQEAKIAkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKIAogCQkvKiBTTUxBeHkgOiBjY2NjIDAwMDEgMDAwMCB4eHh4IHh4eHggeHh4eCAxeHgwIHh4eHggOiBRICovCi0JCS8qIFNNTEFXeSA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDB4MDAgeHh4eCA6IFEgKi8KLQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJLyogU01MQVd5IDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMXgwMCB4eHh4IDogUSAqLworCQlpZiAoKGluc24gJiAweDBmZjAwMDkwKSA9PSAweDAxMDAwMDgwIHx8CisJCSAgICAoaW5zbiAmIDB4MGZmMDAwYjApID09IDB4MDEyMDAwODApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwogCisJCS8qIEJYSiAgICAgIDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAxMCB4eHh4ICovCisJCS8qIE1TUiAgICAgIDogY2NjYyAwMDAxIDB4MTAgeHh4eCB4eHh4IHh4eHggMDAwMCB4eHh4ICovCisJCS8qIE1SUyBzcHNyIDogY2NjYyAwMDAxIDAxMDAgeHh4eCB4eHh4IHh4eHggMDAwMCB4eHh4ICovCisKKwkJLyogT3RoZXIgaW5zdHJ1Y3Rpb24gZW5jb2RpbmdzIGFyZW4ndCB5ZXQgZGVmaW5lZCAqLworCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIAl9CiAKIAkvKiBjY2NjIDAwMDEgMHh4MCB4eHh4IHh4eHggeHh4eCB4eHh4IDB4eDEgeHh4eCAqLwogCWVsc2UgaWYgKChpbnNuICYgMHgwZjkwMDA5MCkgPT0gMHgwMTAwMDAxMCkgewogCi0JCS8qIEJLUFQgOiAxMTEwIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggKi8KLQkJaWYgKChpbnNuICYgMHhmZmYwMDBmMCkgPT0gMHhlMTIwMDA3MCkKLQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwotCiAJCS8qIEJMWCgyKSA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCAqLwogCQkvKiBCWCAgICAgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggKi8KIAkJaWYgKChpbnNuICYgMHgwZmYwMDBkMCkgPT0gMHgwMTIwMDAxMCkgewotCQkJYXNpLT5pbnNuWzBdID0gdHJ1ZWNjX2luc24oaW5zbik7CisJCQlpZiAoKGluc24gJiAweDBmZjAwMGZmKSA9PSAweDAxMjAwMDNmKQorCQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOyAvKiBCTFggcGMgKi8KIAkJCWFzaS0+aW5zbl9oYW5kbGVyID0gc2ltdWxhdGVfYmx4MmJ4OwotCQkJcmV0dXJuIElOU05fR09PRDsKKwkJCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKIAkJfQogCiAJCS8qIENMWiA6IGNjY2MgMDAwMSAwMTEwIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCAqLwpAQCAtMTA1OSwxNyArMTA2NiwyNyBAQAogCQkvKiBRU1VCICAgIDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDpRICovCiAJCS8qIFFEQUREICAgOiBjY2NjIDAwMDEgMDEwMCB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOlEgKi8KIAkJLyogUURTVUIgICA6IGNjY2MgMDAwMSAwMTEwIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6USAqLwotCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQlpZiAoKGluc24gJiAweDBmOTAwMGYwKSA9PSAweDAxMDAwMDUwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKworCQkvKiBCS1BUIDogMTExMCAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4ICovCisJCS8qIFNNQyAgOiBjY2NjIDAwMDEgMDExMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggKi8KKworCQkvKiBPdGhlciBpbnN0cnVjdGlvbiBlbmNvZGluZ3MgYXJlbid0IHlldCBkZWZpbmVkICovCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwogCX0KIAogCS8qIGNjY2MgMDAwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCi0JZWxzZSBpZiAoKGluc24gJiAweDBmMDAwMDkwKSA9PSAweDAwMDAwMDkwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBmMDAwMGYwKSA9PSAweDAwMDAwMDkwKSB7CiAKIAkJLyogTVVMICAgIDogY2NjYyAwMDAwIDAwMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwogCQkvKiBNVUxTICAgOiBjY2NjIDAwMDAgMDAwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOmNjICovCiAJCS8qIE1MQSAgICA6IGNjY2MgMDAwMCAwMDEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KIAkJLyogTUxBUyAgIDogY2NjYyAwMDAwIDAwMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpjYyAqLwogCQkvKiBVTUFBTCAgOiBjY2NjIDAwMDAgMDEwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJCS8qIHVuZGVmICA6IGNjY2MgMDAwMCAwMTAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkJLyogTUxTICAgIDogY2NjYyAwMDAwIDAxMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCQkvKiB1bmRlZiAgOiBjY2NjIDAwMDAgMDExMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCiAJCS8qIFVNVUxMICA6IGNjY2MgMDAwMCAxMDAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KIAkJLyogVU1VTExTIDogY2NjYyAwMDAwIDEwMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpjYyAqLwogCQkvKiBVTUxBTCAgOiBjY2NjIDAwMDAgMTAxMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCkBAIC0xMDc4LDEzICsxMDk1LDE1IEBACiAJCS8qIFNNVUxMUyA6IGNjY2MgMDAwMCAxMTAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6Y2MgKi8KIAkJLyogU01MQUwgIDogY2NjYyAwMDAwIDExMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwogCQkvKiBTTUxBTFMgOiBjY2NjIDAwMDAgMTExMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOmNjICovCi0JCWlmICgoaW5zbiAmIDB4MGZlMDAwZjApID09IDB4MDAwMDAwOTApIHsKLQkJICAgICAgIHJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKLQkJfSBlbHNlIGlmICAoKGluc24gJiAweDBmZTAwMGYwKSA9PSAweDAwMjAwMDkwKSB7Ci0JCSAgICAgICByZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwotCQl9IGVsc2UgewotCQkgICAgICAgcmV0dXJuIHByZXBfZW11bGF0ZV9yZGhpMTZyZGxvMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7Ci0JCX0KKwkJaWYgKChpbnNuICYgMHgwMGQwMDAwMCkgPT0gMHgwMDUwMDAwMCkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOworCQllbHNlIGlmICgoaW5zbiAmIDB4MDBlMDAwMDApID09IDB4MDAwMDAwMDApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCWVsc2UgaWYgKChpbnNuICYgMHgwMGEwMDAwMCkgPT0gMHgwMDIwMDAwMCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCWVsc2UKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhpbnNuLAorCQkJCQkJCQkJYXNpKTsKIAl9CiAKIAkvKiBjY2NjIDAwMHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDF4eDEgeHh4eCAqLwpAQCAtMTA5MiwyMyArMTExMSw0NSBAQAogCiAJCS8qIFNXUCAgIDogY2NjYyAwMDAxIDAwMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCiAJCS8qIFNXUEIgIDogY2NjYyAwMDAxIDAxMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCi0JCS8qIExEUkQgIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4ICovCi0JCS8qIFNUUkQgIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4ICovCisJCS8qID8/PyAgIDogY2NjYyAwMDAxIDB4MDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qID8/PyAgIDogY2NjYyAwMDAxIDB4MTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qID8/PyAgIDogY2NjYyAwMDAxIDB4MTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCiAJCS8qIFNUUkVYIDogY2NjYyAwMDAxIDEwMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCiAJCS8qIExEUkVYIDogY2NjYyAwMDAxIDEwMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qIFNUUkVYRDogY2NjYyAwMDAxIDEwMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qIExEUkVYRDogY2NjYyAwMDAxIDEwMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qIFNUUkVYQjogY2NjYyAwMDAxIDExMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qIExEUkVYQjogY2NjYyAwMDAxIDExMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qIFNUUkVYSDogY2NjYyAwMDAxIDExMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisJCS8qIExEUkVYSDogY2NjYyAwMDAxIDExMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4ICovCisKKwkJLyogTERSRCAgOiBjY2NjIDAwMHggeHh4MCB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggKi8KKwkJLyogU1RSRCAgOiBjY2NjIDAwMHggeHh4MCB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggKi8KIAkJLyogTERSSCAgOiBjY2NjIDAwMHggeHh4MSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggKi8KIAkJLyogU1RSSCAgOiBjY2NjIDAwMHggeHh4MCB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggKi8KIAkJLyogTERSU0IgOiBjY2NjIDAwMHggeHh4MSB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggKi8KIAkJLyogTERSU0ggOiBjY2NjIDAwMHggeHh4MSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggKi8KLQkJaWYgKChpbnNuICYgMHgwZmIwMDBmMCkgPT0gMHgwMTAwMDA5MCkgewotCQkJLyogU1dQL1NXUEIgKi8KLQkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCWlmICgoaW5zbiAmIDB4MGYwMDAwZjApID09IDB4MDEwMDAwOTApIHsKKwkJCWlmICgoaW5zbiAmIDB4MGZiMDAwZjApID09IDB4MDEwMDAwOTApIHsKKwkJCQkvKiBTV1AvU1dQQiAqLworCQkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sCisJCQkJCQkJCQlhc2kpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTVFJFWC9MRFJFWCB2YXJpYW50cyBhbmQgdW5hbGxvY2FlZCBzcGFjZSAqLworCQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOworCQkJfQorCiAJCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMTAwMGQwKSA9PSAweDAwMDAwZDApIHsKIAkJCS8qIFNUUkQvTERSRCAqLworCQkJaWYgKChpbnNuICYgMHgwMDAwZTAwMCkgPT0gMHgwMDAwZTAwMCkKKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgTFIgb3IgUEMgKi8KKwkJCWlmIChpc193cml0ZWJhY2soaW5zbikgJiYgaXNfcjE1KGluc24sIDE2KSkKKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogV3JpdGViYWNrIHRvIFBDICovCisKIAkJCWluc24gJj0gMHhmZmYwMGZmZjsKIAkJCWluc24gfD0gMHgwMDAwMjAwMDsJLyogUm4gPSByMCwgUmQgPSByMiAqLwotCQkJaWYgKGluc24gJiAoMSA8PCAyMikpIHsKLQkJCQkvKiBJIGJpdCAqLworCQkJaWYgKCEoaW5zbiAmICgxIDw8IDIyKSkpIHsKKwkJCQkvKiBSZWdpc3RlciBpbmRleCAqLwogCQkJCWluc24gJj0gfjB4ZjsKIAkJCQlpbnNuIHw9IDE7CS8qIFJtID0gcjEgKi8KIAkJCX0KQEAgLTExMTgsNiArMTE1OSw5IEBACiAJCQlyZXR1cm4gSU5TTl9HT09EOwogCQl9CiAKKwkJLyogTERSSC9TVFJIL0xEUlNCL0xEUlNIICovCisJCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCiAJCXJldHVybiBwcmVwX2VtdWxhdGVfbGRyX3N0cihpbnNuLCBhc2kpOwogCX0KIApAQCAtMTEyNSw3ICsxMTY5LDcgQEAKIAogCS8qCiAJICogQUxVIG9wIHdpdGggUyBiaXQgYW5kIFJkID09IDE1IDoKLQkgKiAJY2NjYyAwMDB4IHh4eDEgeHh4eCAxMTExIHh4eHggeHh4eCB4eHh4CisJICoJY2NjYyAwMDB4IHh4eDEgeHh4eCAxMTExIHh4eHggeHh4eCB4eHh4CiAJICovCiAJaWYgKChpbnNuICYgMHgwZTEwZjAwMCkgPT0gMHgwMDEwZjAwMCkKIAkJcmV0dXJuIElOU05fUkVKRUNURUQ7CkBAIC0xMTU0LDIyICsxMTk4LDYxIEBACiAJCWluc24gfD0gMHgwMDAwMDIwMDsgICAgIC8qIFJzID0gcjIgKi8KIAl9CiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/ICAvKiBTLWJpdCAqLworCisJaWYgKChpbnNuICYgMHgwZjkwMDAwMCkgPT0gMHgwMTEwMDAwMCkgeworCQkvKgorCQkgKiBUU1QgOiBjY2NjIDAwMDEgMDAwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogVEVRIDogY2NjYyAwMDAxIDAwMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIENNUCA6IGNjY2MgMDAwMSAwMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBDTU4gOiBjY2NjIDAwMDEgMDExMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICovCisJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9hbHVfdGVzdHM7CisJfSBlbHNlIHsKKwkJLyogQUxVIG9wcyB3aGljaCB3cml0ZSB0byBSZCAqLworCQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/ICAvKiBTLWJpdCAqLwogCQkJCWVtdWxhdGVfYWx1X3J3ZmxhZ3MgOiBlbXVsYXRlX2FsdV9yZmxhZ3M7CisJfQogCXJldHVybiBJTlNOX0dPT0Q7CiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2Jlcwogc3BhY2VfY2NjY18wMDF4KGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJLyogTU9WVyAgOiBjY2NjIDAwMTEgMDAwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkvKiBNT1ZUICA6IGNjY2MgMDAxMSAwMTAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCWlmICgoaW5zbiAmIDB4MGZiMDAwMDApID09IDB4MDMwMDAwMDApCisJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMl9tb2RpZnkoaW5zbiwgYXNpKTsKKworCS8qIGhpbnRzIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJaWYgKChpbnNuICYgMHgwZmZmMDAwMCkgPT0gMHgwMzIwMDAwMCkgeworCQl1bnNpZ25lZCBvcDIgPSBpbnNuICYgMHgwMDAwMDBmZjsKKwkJaWYgKG9wMiA9PSAweDAxIHx8IG9wMiA9PSAweDA0KSB7CisJCQkvKiBZSUVMRCA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAwMSAqLworCQkJLyogU0VWICAgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAxMDAgKi8KKwkJCWFzaS0+aW5zblswXSA9IGluc247CisJCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbm9uZTsKKwkJCXJldHVybiBJTlNOX0dPT0Q7CisJCX0gZWxzZSBpZiAob3AyIDw9IDB4MDMpIHsKKwkJCS8qIE5PUCAgIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMDAwICovCisJCQkvKiBXRkUgICA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAxMCAqLworCQkJLyogV0ZJICAgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAwMTEgKi8KKwkJCS8qCisJCQkgKiBXZSBtYWtlIFdGRSBhbmQgV0ZJIHRydWUgTk9QcyB0byBhdm9pZCBzdGFsbHMgZHVlCisJCQkgKiB0byBtaXNzaW5nIGV2ZW50cyB3aGlsc3QgcHJvY2Vzc2luZyB0aGUgcHJvYmUuCisJCQkgKi8KKwkJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ub3A7CisJCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CisJCX0KKwkJLyogRm9yIERCRyBhbmQgdW5hbGxvY2F0ZWQgaGludHMgaXQncyBzYWZlc3QgdG8gcmVqZWN0IHRoZW0gKi8KKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CisJfQorCiAJLyoKIAkgKiBNU1IgICA6IGNjY2MgMDAxMSAweDEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAotCSAqIFVuZGVmIDogY2NjYyAwMDExIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CiAJICogQUxVIG9wIHdpdGggUyBiaXQgYW5kIFJkID09IDE1IDoKIAkgKgkgICBjY2NjIDAwMXggeHh4MSB4eHh4IDExMTEgeHh4eCB4eHh4IHh4eHgKIAkgKi8KIAlpZiAoKGluc24gJiAweDBmYjAwMDAwKSA9PSAweDAzMjAwMDAwIHx8CS8qIE1TUiAqLwotCSAgICAoaW5zbiAmIDB4MGZmMDAwMDApID09IDB4MDM0MDAwMDAgfHwJLyogVW5kZWYgKi8KIAkgICAgKGluc24gJiAweDBlMTBmMDAwKSA9PSAweDAyMTBmMDAwKQkJLyogQUxVIHMtYml0LCBSMTUgICovCiAJCXJldHVybiBJTlNOX1JFSkVDVEVEOwogCkBAIC0xMTgwLDEwICsxMjYzLDIyIEBACiAJICogKlMgKGJpdCAyMCkgdXBkYXRlcyBjb25kaXRpb24gY29kZXMKIAkgKiBBREMvU0JDL1JTQyByZWFkcyB0aGUgQyBmbGFnCiAJICovCi0JaW5zbiAmPSAweGZmZmYwZmZmOwkvKiBSZCA9IHIwICovCisJaW5zbiAmPSAweGZmZjAwZmZmOwkvKiBSbiA9IHIwIGFuZCBSZCA9IHIwICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/ICAvKiBTLWJpdCAqLworCisJaWYgKChpbnNuICYgMHgwZjkwMDAwMCkgPT0gMHgwMzEwMDAwMCkgeworCQkvKgorCQkgKiBUU1QgOiBjY2NjIDAwMTEgMDAwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogVEVRIDogY2NjYyAwMDExIDAwMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIENNUCA6IGNjY2MgMDAxMSAwMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBDTU4gOiBjY2NjIDAwMTEgMDExMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICovCisJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9hbHVfdGVzdHNfaW1tOworCX0gZWxzZSB7CisJCS8qIEFMVSBvcHMgd2hpY2ggd3JpdGUgdG8gUmQgKi8KKwkJYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyAgLyogUy1iaXQgKi8KIAkJCWVtdWxhdGVfYWx1X2ltbV9yd2ZsYWdzIDogZW11bGF0ZV9hbHVfaW1tX3JmbGFnczsKKwl9CiAJcmV0dXJuIElOU05fR09PRDsKIH0KIApAQCAtMTE5Miw2ICsxMjg3LDggQEAKIHsKIAkvKiBTRUwgOiBjY2NjIDAxMTAgMTAwMCB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggR0U6ICEhISAqLwogCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDY4MDAwYjApIHsKKwkJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KIAkJaW5zbiAmPSAweGZmZjAwZmYwOwkvKiBSZCA9IHIwLCBSbiA9IHIwICovCiAJCWluc24gfD0gMHgwMDAwMDAwMTsJLyogUm0gPSByMSAqLwogCQlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtMTIwNSw2ICsxMzAyLDggQEAKIAkvKiBVU0FUMTYgOiBjY2NjIDAxMTAgMTExMCB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOlEgKi8KIAlpZiAoKGluc24gJiAweDBmYTAwMDMwKSA9PSAweDA2YTAwMDEwIHx8CiAJICAgIChpbnNuICYgMHgwZmIwMDBmMCkgPT0gMHgwNmEwMDAzMCkgeworCQlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLwogCQlpbnNuICY9IDB4ZmZmZjBmZjA7CS8qIFJkID0gcjAsIFJtID0gcjAgKi8KIAkJYXNpLT5pbnNuWzBdID0gaW5zbjsKIAkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX3NhdDsKQEAgLTEyMTMsNTcgKzEzMTIsMTAxIEBACiAKIAkvKiBSRVYgICAgOiBjY2NjIDAxMTAgMTAxMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggKi8KIAkvKiBSRVYxNiAgOiBjY2NjIDAxMTAgMTAxMSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggKi8KKwkvKiBSQklUICAgOiBjY2NjIDAxMTAgMTExMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggKi8KIAkvKiBSRVZTSCAgOiBjY2NjIDAxMTAgMTExMSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggKi8KIAlpZiAoKGluc24gJiAweDBmZjAwMDcwKSA9PSAweDA2YjAwMDMwIHx8Ci0JICAgIChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwNmYwMDBiMCkKKwkgICAgKGluc24gJiAweDBmZjAwMDcwKSA9PSAweDA2ZjAwMDMwKQogCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybTAoaW5zbiwgYXNpKTsKIAorCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDAwIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCA6ICAgKi8KIAkvKiBTQUREMTYgICAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOkdFICovCiAJLyogU0FERFNVQlggIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDpHRSAqLwogCS8qIFNTVUJBRERYICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6R0UgKi8KIAkvKiBTU1VCMTYgICAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOkdFICovCiAJLyogU0FERDggICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpHRSAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogU1NVQjggICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDpHRSAqLwogCS8qIFFBREQxNiAgICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6ICAgKi8KIAkvKiBRQUREU1VCWCAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOiAgICovCiAJLyogUVNVQkFERFggIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDogICAqLwogCS8qIFFTVUIxNiAgICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBRQUREOCAgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBRU1VCOCAgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOiAgICovCiAJLyogU0hBREQxNiAgIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDogICAqLwogCS8qIFNIQUREU1VCWCA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6ICAgKi8KIAkvKiBTSFNVQkFERFggOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOiAgICovCiAJLyogU0hTVUIxNiAgIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFNIQUREOCAgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFNIU1VCOCAgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDEwMCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggOiAgICovCiAJLyogVUFERDE2ICAgIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDpHRSAqLwogCS8qIFVBRERTVUJYICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6R0UgKi8KIAkvKiBVU1VCQUREWCAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOkdFICovCiAJLyogVVNVQjE2ICAgIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDpHRSAqLwogCS8qIFVBREQ4ICAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6R0UgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFVTVUI4ICAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6R0UgKi8KIAkvKiBVUUFERDE2ICAgOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOiAgICovCiAJLyogVVFBRERTVUJYIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDogICAqLwogCS8qIFVRU1VCQUREWCA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6ICAgKi8KIAkvKiBVUVNVQjE2ICAgOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogVVFBREQ4ICAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogVVFTVUI4ICAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDogICAqLwogCS8qIFVIQUREMTYgICA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6ICAgKi8KIAkvKiBVSEFERFNVQlggOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOiAgICovCiAJLyogVUhTVUJBRERYIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDogICAqLwogCS8qIFVIU1VCMTYgICA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBVSEFERDggICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBVSFNVQjggICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOiAgICovCisJaWYgKChpbnNuICYgMHgwZjgwMDAxMCkgPT0gMHgwNjAwMDAxMCkgeworCQlpZiAoKGluc24gJiAweDAwMzAwMDAwKSA9PSAweDAwMDAwMDAwIHx8CisJCSAgICAoaW5zbiAmIDB4MDAwMDAwZTApID09IDB4MDAwMDAwYTAgfHwKKwkJICAgIChpbnNuICYgMHgwMDAwMDBlMCkgPT0gMHgwMDAwMDBjMCkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBVbmFsbG9jYXRlZCBzcGFjZSAqLworCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCX0KKwogCS8qIFBLSEJUICAgICA6IGNjY2MgMDExMCAxMDAwIHh4eHggeHh4eCB4eHh4IHgwMDEgeHh4eCA6ICAgKi8KIAkvKiBQS0hUQiAgICAgOiBjY2NjIDAxMTAgMTAwMCB4eHh4IHh4eHggeHh4eCB4MTAxIHh4eHggOiAgICovCisJaWYgKChpbnNuICYgMHgwZmYwMDAzMCkgPT0gMHgwNjgwMDAxMCkKKwkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwogCS8qIFNYVEFCMTYgICA6IGNjY2MgMDExMCAxMDAwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KLQkvKiBTWFRCICAgICAgOiBjY2NjIDAxMTAgMTAxMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogU1hUQjE2ICAgIDogY2NjYyAwMTEwIDEwMDAgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAxMDAxIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBTWFRBQiAgICAgOiBjY2NjIDAxMTAgMTAxMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogU1hUQiAgICAgIDogY2NjYyAwMTEwIDEwMTAgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFNYVEFIICAgICA6IGNjY2MgMDExMCAxMDExIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiBTWFRIICAgICAgOiBjY2NjIDAxMTAgMTAxMSAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogVVhUQUIxNiAgIDogY2NjYyAwMTEwIDExMDAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qIFVYVEIxNiAgICA6IGNjY2MgMDExMCAxMTAwIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMTEwMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogVVhUQUIgICAgIDogY2NjYyAwMTEwIDExMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qIFVYVEIgICAgICA6IGNjY2MgMDExMCAxMTEwIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBVWFRBSCAgICAgOiBjY2NjIDAxMTAgMTExMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCi0JcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkvKiBVWFRIICAgICAgOiBjY2NjIDAxMTAgMTExMSAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJaWYgKChpbnNuICYgMHgwZjgwMDBmMCkgPT0gMHgwNjgwMDA3MCkgeworCQlpZiAoKGluc24gJiAweDAwMzAwMDAwKSA9PSAweDAwMTAwMDAwKQorCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFVuYWxsb2NhdGVkIHNwYWNlICovCisKKwkJaWYgKChpbnNuICYgMHgwMDBmMDAwMCkgPT0gMHgwMDBmMDAwMCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJtMChpbnNuLCBhc2kpOworCQllbHNlCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCX0KKworCS8qIE90aGVyIGluc3RydWN0aW9uIGVuY29kaW5ncyBhcmVuJ3QgeWV0IGRlZmluZWQgKi8KKwlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCkBAIC0xMjczLDI5ICsxNDE2LDQ5IEBACiAJaWYgKChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwM2YwMDBmMCkKIAkJcmV0dXJuIElOU05fUkVKRUNURUQ7CiAKLQkvKiBVU0FEQTggOiBjY2NjIDAxMTEgMTAwMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggKi8KLQkvKiBVU0FEOCAgOiBjY2NjIDAxMTEgMTAwMCB4eHh4IDExMTEgeHh4eCAwMDAxIHh4eHggKi8KLQlpZiAoKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDA3ODAwMDEwKQotCQkgcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKLQogCS8qIFNNTEFMRCA6IGNjY2MgMDExMSAwMTAwIHh4eHggeHh4eCB4eHh4IDAweDEgeHh4eCAqLwogCS8qIFNNTFNMRCA6IGNjY2MgMDExMSAwMTAwIHh4eHggeHh4eCB4eHh4IDAxeDEgeHh4eCAqLwogCWlmICgoaW5zbiAmIDB4MGZmMDAwOTApID09IDB4MDc0MDAwMTApCiAJCXJldHVybiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwogCiAJLyogU01MQUQgIDogY2NjYyAwMTExIDAwMDAgeHh4eCB4eHh4IHh4eHggMDB4MSB4eHh4IDpRICovCisJLyogU01VQUQgIDogY2NjYyAwMTExIDAwMDAgeHh4eCAxMTExIHh4eHggMDB4MSB4eHh4IDpRICovCiAJLyogU01MU0QgIDogY2NjYyAwMTExIDAwMDAgeHh4eCB4eHh4IHh4eHggMDF4MSB4eHh4IDpRICovCisJLyogU01VU0QgIDogY2NjYyAwMTExIDAwMDAgeHh4eCAxMTExIHh4eHggMDF4MSB4eHh4IDogICovCiAJLyogU01NTEEgIDogY2NjYyAwMTExIDAxMDEgeHh4eCB4eHh4IHh4eHggMDB4MSB4eHh4IDogICovCi0JLyogU01NTFMgIDogY2NjYyAwMTExIDAxMDEgeHh4eCB4eHh4IHh4eHggMTF4MSB4eHh4IDogICovCisJLyogU01NVUwgIDogY2NjYyAwMTExIDAxMDEgeHh4eCAxMTExIHh4eHggMDB4MSB4eHh4IDogICovCisJLyogVVNBREE4IDogY2NjYyAwMTExIDEwMDAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDogICovCisJLyogVVNBRDggIDogY2NjYyAwMTExIDEwMDAgeHh4eCAxMTExIHh4eHggMDAwMSB4eHh4IDogICovCiAJaWYgKChpbnNuICYgMHgwZmYwMDA5MCkgPT0gMHgwNzAwMDAxMCB8fAogCSAgICAoaW5zbiAmIDB4MGZmMDAwZDApID09IDB4MDc1MDAwMTAgfHwKLQkgICAgKGluc24gJiAweDBmZjAwMGQwKSA9PSAweDA3NTAwMGQwKQorCSAgICAoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDc4MDAwMTApIHsKKworCQlpZiAoKGluc24gJiAweDAwMDBmMDAwKSA9PSAweDAwMDBmMDAwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQllbHNlCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCX0KKworCS8qIFNNTUxTICA6IGNjY2MgMDExMSAwMTAxIHh4eHggeHh4eCB4eHh4IDExeDEgeHh4eCA6ICAqLworCWlmICgoaW5zbiAmIDB4MGZmMDAwZDApID09IDB4MDc1MDAwZDApCiAJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CiAKLQkvKiBTTVVTRCAgOiBjY2NjIDAxMTEgMDAwMCB4eHh4IHh4eHggeHh4eCAwMXgxIHh4eHggOiAgKi8KLQkvKiBTTVVBRCAgOiBjY2NjIDAxMTEgMDAwMCB4eHh4IDExMTEgeHh4eCAwMHgxIHh4eHggOlEgKi8KLQkvKiBTTU1VTCAgOiBjY2NjIDAxMTEgMDEwMSB4eHh4IDExMTEgeHh4eCAwMHgxIHh4eHggOiAgKi8KLQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJLyogU0JGWCAgIDogY2NjYyAwMTExIDEwMXggeHh4eCB4eHh4IHh4eHggeDEwMSB4eHh4IDogICovCisJLyogVUJGWCAgIDogY2NjYyAwMTExIDExMXggeHh4eCB4eHh4IHh4eHggeDEwMSB4eHh4IDogICovCisJaWYgKChpbnNuICYgMHgwZmEwMDA3MCkgPT0gMHgwN2EwMDA1MCkKKwkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm0wKGluc24sIGFzaSk7CisKKwkvKiBCRkkgICAgOiBjY2NjIDAxMTEgMTEweCB4eHh4IHh4eHggeHh4eCB4MDAxIHh4eHggOiAgKi8KKwkvKiBCRkMgICAgOiBjY2NjIDAxMTEgMTEweCB4eHh4IHh4eHggeHh4eCB4MDAxIDExMTEgOiAgKi8KKwlpZiAoKGluc24gJiAweDBmZTAwMDcwKSA9PSAweDA3YzAwMDEwKSB7CisKKwkJaWYgKChpbnNuICYgMHgwMDAwMDAwZikgPT0gMHgwMDAwMDAwZikKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMl9tb2RpZnkoaW5zbiwgYXNpKTsKKwkJZWxzZQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4wX21vZGlmeShpbnNuLCBhc2kpOworCX0KKworCXJldHVybiBJTlNOX1JFSkVDVEVEOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKQEAgLTEzMDksNiArMTQ3MiwxMCBAQAogCS8qIFNUUkIgIDogY2NjYyAwMXh4IHgxeDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCiAJLyogU1RSQlQgOiBjY2NjIDAxeDAgeDExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KIAkvKiBTVFJUICA6IGNjY2MgMDF4MCB4MDEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCisJaWYgKChpbnNuICYgMHgwMDUwMDAwMCkgPT0gMHgwMDUwMDAwMCAmJiBpc19yMTUoaW5zbiwgMTIpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogTERSQiBpbnRvIFBDICovCisKIAlyZXR1cm4gcHJlcF9lbXVsYXRlX2xkcl9zdHIoaW5zbiwgYXNpKTsKIH0KIApAQCAtMTMyMywxMCArMTQ5MCw5IEBACiAKIAkvKiBMRE0oMSkgOiBjY2NjIDEwMHggeDB4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KIAkvKiBTVE0oMSkgOiBjY2NjIDEwMHggeDB4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQlhc2ktPmluc25bMF0gPSB0cnVlY2NfaW5zbihpbnNuKTsKIAlhc2ktPmluc25faGFuZGxlciA9ICgoaW5zbiAmIDB4MTA4MDAwKSA9PSAweDAwODAwMCkgPyAvKiBTVE0gJiBSMTUgKi8KIAkJCQlzaW11bGF0ZV9zdG0xX3BjIDogc2ltdWxhdGVfbGRtMXN0bTE7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwpAQCAtMTMzNCw1OCArMTUwMCwxMTcgQEAKIHsKIAkvKiBCICA6IGNjY2MgMTAxMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwogCS8qIEJMIDogY2NjYyAxMDExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JYXNpLT5pbnNuWzBdID0gdHJ1ZWNjX2luc24oaW5zbik7CiAJYXNpLT5pbnNuX2hhbmRsZXIgPSBzaW11bGF0ZV9iYmw7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2Jlcwotc3BhY2VfY2NjY18xMTAwXzAxMHgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3NwYWNlX2NjY2NfMTF4eChrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCS8qIENvcHJvY2Vzc29yIGluc3RydWN0aW9ucy4uLiAqLwogCS8qIE1DUlIgOiBjY2NjIDExMDAgMDEwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAoUmQhPVJuKSAqLwogCS8qIE1SUkMgOiBjY2NjIDExMDAgMDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAoUmQhPVJuKSAqLwotCWluc24gJj0gMHhmZmYwMGZmZjsKLQlpbnNuIHw9IDB4MDAwMDEwMDA7CS8qIFJuID0gcjAsIFJkID0gcjEgKi8KLQlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gZW11bGF0ZV9tcnJjIDogZW11bGF0ZV9tY3JyOwotCXJldHVybiBJTlNOX0dPT0Q7CisJLyogTERDICA6IGNjY2MgMTEweCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIFNUQyAgOiBjY2NjIDExMHggeHh4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkvKiBDRFAgIDogY2NjYyAxMTEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4MCB4eHh4ICovCisJLyogTUNSICA6IGNjY2MgMTExMCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLworCS8qIE1SQyAgOiBjY2NjIDExMTAgeHh4MSB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KKworCS8qIFNWQyAgOiBjY2NjIDExMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKworCXJldHVybiBJTlNOX1JFSkVDVEVEOwogfQogCi1zdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKLXNwYWNlX2NjY2NfMTEweChrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfZXEodW5zaWduZWQgbG9uZyBjcHNyKQogewotCS8qIExEQyA6IGNjY2MgMTEweCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCS8qIFNUQyA6IGNjY2MgMTEweCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWluc24gJj0gMHhmZmYwZmZmZjsJLyogUm4gPSByMCAqLwotCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX2xkY3N0YzsKLQlyZXR1cm4gSU5TTl9HT09EOworCXJldHVybiBjcHNyICYgUFNSX1pfQklUOwogfQogCi1zdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKLXNwYWNlX2NjY2NfMTExeChrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfbmUodW5zaWduZWQgbG9uZyBjcHNyKQogewotCS8qIEJLUFQgOiAxMTEwIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggKi8KLQkvKiBTV0kgIDogY2NjYyAxMTExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JaWYgKChpbnNuICYgMHhmZmYwMDBmMCkgPT0gMHhlMTIwMDA3MCB8fAotCSAgICAoaW5zbiAmIDB4MGYwMDAwMDApID09IDB4MGYwMDAwMDApCi0JCXJldHVybiBJTlNOX1JFSkVDVEVEOwotCi0JLyogQ0RQIDogY2NjYyAxMTEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4MCB4eHh4ICovCi0JaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwZTAwMDAwMCkgewotCQlhc2ktPmluc25bMF0gPSBpbnNuOwotCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbm9uZTsKLQkJcmV0dXJuIElOU05fR09PRDsKLQl9Ci0KLQkvKiBNQ1IgOiBjY2NjIDExMTAgeHh4MCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KLQkvKiBNUkMgOiBjY2NjIDExMTAgeHh4MSB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KLQlpbnNuICY9IDB4ZmZmZjBmZmY7CS8qIFJkID0gcjAgKi8KLQlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gZW11bGF0ZV9yZDEyIDogZW11bGF0ZV9pcmQxMjsKLQlyZXR1cm4gSU5TTl9HT09EOworCXJldHVybiAofmNwc3IpICYgUFNSX1pfQklUOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19jcyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuIGNwc3IgJiBQU1JfQ19CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2NjKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9DX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfbWkodW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiBjcHNyICYgUFNSX05fQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19wbCh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuICh+Y3BzcikgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX3ZzKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gY3BzciAmIFBTUl9WX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfdmModW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiAofmNwc3IpICYgUFNSX1ZfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19oaSh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJY3BzciAmPSB+KGNwc3IgPj4gMSk7IC8qIFBTUl9DX0JJVCAmPSB+UFNSX1pfQklUICovCisJcmV0dXJuIGNwc3IgJiBQU1JfQ19CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2xzKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwljcHNyICY9IH4oY3BzciA+PiAxKTsgLyogUFNSX0NfQklUICY9IH5QU1JfWl9CSVQgKi8KKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9DX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfZ2UodW5zaWduZWQgbG9uZyBjcHNyKQoreworCWNwc3IgXj0gKGNwc3IgPDwgMyk7IC8qIFBTUl9OX0JJVCBePSBQU1JfVl9CSVQgKi8KKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9OX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfbHQodW5zaWduZWQgbG9uZyBjcHNyKQoreworCWNwc3IgXj0gKGNwc3IgPDwgMyk7IC8qIFBTUl9OX0JJVCBePSBQU1JfVl9CSVQgKi8KKwlyZXR1cm4gY3BzciAmIFBTUl9OX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfZ3QodW5zaWduZWQgbG9uZyBjcHNyKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCA9IGNwc3IgXiAoY3BzciA8PCAzKTsgLyogUFNSX05fQklUIF49IFBTUl9WX0JJVCAqLworCXRlbXAgfD0gKGNwc3IgPDwgMSk7CQkJIC8qIFBTUl9OX0JJVCB8PSBQU1JfWl9CSVQgKi8KKwlyZXR1cm4gKH50ZW1wKSAmIFBTUl9OX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfbGUodW5zaWduZWQgbG9uZyBjcHNyKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCA9IGNwc3IgXiAoY3BzciA8PCAzKTsgLyogUFNSX05fQklUIF49IFBTUl9WX0JJVCAqLworCXRlbXAgfD0gKGNwc3IgPDwgMSk7CQkJIC8qIFBTUl9OX0JJVCB8PSBQU1JfWl9CSVQgKi8KKwlyZXR1cm4gdGVtcCAmIFBTUl9OX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfYWwodW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMga3Byb2JlX2NoZWNrX2NjICogY29uc3QgY29uZGl0aW9uX2NoZWNrc1sxNl0gPSB7CisJJl9fY2hlY2tfZXEsICZfX2NoZWNrX25lLCAmX19jaGVja19jcywgJl9fY2hlY2tfY2MsCisJJl9fY2hlY2tfbWksICZfX2NoZWNrX3BsLCAmX19jaGVja192cywgJl9fY2hlY2tfdmMsCisJJl9fY2hlY2tfaGksICZfX2NoZWNrX2xzLCAmX19jaGVja19nZSwgJl9fY2hlY2tfbHQsCisJJl9fY2hlY2tfZ3QsICZfX2NoZWNrX2xlLCAmX19jaGVja19hbCwgJl9fY2hlY2tfYWwKK307CisKIC8qIFJldHVybjoKICAqICAgSU5TTl9SRUpFQ1RFRCAgICAgSWYgaW5zdHJ1Y3Rpb24gaXMgb25lIG5vdCBhbGxvd2VkIHRvIGtwcm9iZSwKICAqICAgSU5TTl9HT09EICAgICAgICAgSWYgaW5zdHJ1Y3Rpb24gaXMgc3VwcG9ydGVkIGFuZCB1c2VzIGluc3RydWN0aW9uIHNsb3QsCkBAIC0xNDAxLDEzMyArMTYyNiw0NSBAQAogZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIGFybV9rcHJvYmVfZGVjb2RlX2luc24oa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlhc2ktPmluc25fY2hlY2tfY2MgPSBjb25kaXRpb25fY2hlY2tzW2luc24+PjI4XTsKIAlhc2ktPmluc25bMV0gPSBLUFJPQkVfUkVUVVJOX0lOU1RSVUNUSU9OOwogCi0JaWYgKChpbnNuICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkgeworCWlmICgoaW5zbiAmIDB4ZjAwMDAwMDApID09IDB4ZjAwMDAwMDApCiAKIAkJcmV0dXJuIHNwYWNlXzExMTEoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDAwMDAwMDAwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDAwMDAwMDAwKQogCiAJCXJldHVybiBzcGFjZV9jY2NjXzAwMHgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDAyMDAwMDAwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDAyMDAwMDAwKQogCiAJCXJldHVybiBzcGFjZV9jY2NjXzAwMXgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBmMDAwMDEwKSA9PSAweDA2MDAwMDEwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBmMDAwMDEwKSA9PSAweDA2MDAwMDEwKQogCiAJCXJldHVybiBzcGFjZV9jY2NjXzAxMTBfXzEoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBmMDAwMDEwKSA9PSAweDA3MDAwMDEwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBmMDAwMDEwKSA9PSAweDA3MDAwMDEwKQogCiAJCXJldHVybiBzcGFjZV9jY2NjXzAxMTFfXzEoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBjMDAwMDAwKSA9PSAweDA0MDAwMDAwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBjMDAwMDAwKSA9PSAweDA0MDAwMDAwKQogCiAJCXJldHVybiBzcGFjZV9jY2NjXzAxeHgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDA4MDAwMDAwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDA4MDAwMDAwKQogCiAJCXJldHVybiBzcGFjZV9jY2NjXzEwMHgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDBhMDAwMDAwKSB7CisJZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDBhMDAwMDAwKQogCiAJCXJldHVybiBzcGFjZV9jY2NjXzEwMXgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBmZTAwMDAwKSA9PSAweDBjNDAwMDAwKSB7Ci0KLQkJcmV0dXJuIHNwYWNlX2NjY2NfMTEwMF8wMTB4KGluc24sIGFzaSk7Ci0KLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgewotCi0JCXJldHVybiBzcGFjZV9jY2NjXzExMHgoaW5zbiwgYXNpKTsKLQotCX0KLQotCXJldHVybiBzcGFjZV9jY2NjXzExMXgoaW5zbiwgYXNpKTsKKwlyZXR1cm4gc3BhY2VfY2NjY18xMXh4KGluc24sIGFzaSk7CiB9CiAKIHZvaWQgX19pbml0IGFybV9rcHJvYmVfZGVjb2RlX2luaXQodm9pZCkKIHsKIAlmaW5kX3N0cl9wY19vZmZzZXQoKTsKIH0KLQotCi0vKgotICogQWxsIEFSTSBpbnN0cnVjdGlvbnMgbGlzdGVkIGJlbG93LgotICoKLSAqIEluc3RydWN0aW9ucyBhbmQgdGhlaXIgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBhcmUgZ2l2ZW4uCi0gKiBJZiBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIgbWF5IG5vdCB1c2UgUjE1LCBpdCBpcyBwcmVmaXhlZCB3aXRoIGEgIiEiLgotICogSWYgbWFya2VkIHdpdGggYSAiKiIgbWVhbnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHJlYWRpbmcgUjE1Ci0gKiBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgotICoKLSAqIEFEQy9BREQvQU5EL0JJQy9DTU4vQ01QL0VPUi9NT1YvTVZOL09SUi9SU0IvUlNDL1NCQy9TVUIvVEVRCi0gKiAgICAgVFNUOiBSZCwgUm4sIFJtLCAhUnMKLSAqIEJYOiBSbQotICogQkxYKDIpOiAhUm0KLSAqIEJYOiBSbSAoUjE1IGxlZ2FsLCBidXQgZGlzY291cmFnZWQpCi0gKiBCWEo6ICFSbSwKLSAqIENMWjogIVJkLCAhUm0KLSAqIENQWTogUmQsIFJtCi0gKiBMREMvMixTVEMvMiBpbW1lZGlhdGUgb2Zmc2V0ICYgdW5pbmRleDogUm4KLSAqIExEQy8yLFNUQy8yIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiAhUm4KLSAqIExETSgxLzMpOiAhUm4sIHJlZ2lzdGVyX2xpc3QKLSAqIExETSgyKTogIVJuLCAhcmVnaXN0ZXJfbGlzdAotICogTERSLFNUUixQTEQgaW1tZWRpYXRlIG9mZnNldDogUmQsIFJuCi0gKiBMRFIsU1RSLFBMRCByZWdpc3RlciBvZmZzZXQ6IFJkLCBSbiwgIVJtCi0gKiBMRFIsU1RSLFBMRCBzY2FsZWQgcmVnaXN0ZXIgb2Zmc2V0OiBSZCwgIVJuLCAhUm0KLSAqIExEUixTVFIgaW1tZWRpYXRlIHByZS9wb3N0LWluZGV4ZWQ6IFJkLCAhUm4KLSAqIExEUixTVFIgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogUmQsICFSbiwgIVJtCi0gKiBMRFIsU1RSIHNjYWxlZCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiBSZCwgIVJuLCAhUm0KLSAqIExEUkIsU1RSQiBpbW1lZGlhdGUgb2Zmc2V0OiAhUmQsIFJuCi0gKiBMRFJCLFNUUkIgcmVnaXN0ZXIgb2Zmc2V0OiAhUmQsIFJuLCAhUm0KLSAqIExEUkIsU1RSQiBzY2FsZWQgcmVnaXN0ZXIgb2Zmc2V0OiAhUmQsICFSbiwgIVJtCi0gKiBMRFJCLFNUUkIgaW1tZWRpYXRlIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuCi0gKiBMRFJCLFNUUkIgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSQixTVFJCIHNjYWxlZCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbiwgIVJtCi0gKiBMRFJULExEUkJULFNUUkJUIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbgotICogTERSVCxMRFJCVCxTVFJCVCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbiwgIVJtCi0gKiBMRFJULExEUkJULFNUUkJUIHNjYWxlZCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbiwgIVJtCi0gKiBMRFJIL1NIL1NCL0QsU1RSSC9TSC9TQi9EIGltbWVkaWF0ZSBvZmZzZXQ6ICFSZCwgUm4KLSAqIExEUkgvU0gvU0IvRCxTVFJIL1NIL1NCL0QgcmVnaXN0ZXIgb2Zmc2V0OiAhUmQsIFJuLCAhUm0KLSAqIExEUkgvU0gvU0IvRCxTVFJIL1NIL1NCL0QgaW1tZWRpYXRlIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuCi0gKiBMRFJIL1NIL1NCL0QsU1RSSC9TSC9TQi9EIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuLCAhUm0KLSAqIExEUkVYOiAhUmQsICFSbgotICogTUNSLzI6ICFSZAotICogTUNSUi8yLE1SUkMvMjogIVJkLCAhUm4KLSAqIE1MQTogIVJkLCAhUm4sICFSbSwgIVJzCi0gKiBNT1Y6IFJkCi0gKiBNUkMvMjogIVJkIChpZiBSZD09MTUsIG9ubHkgY2hhbmdlcyBjb25kIGNvZGVzLCBub3QgdGhlIHJlZ2lzdGVyKQotICogTVJTLE1TUjogIVJkCi0gKiBNVUw6ICFSZCwgIVJtLCAhUnMKLSAqIFBLSHtCVCxUQn06ICFSZCwgIVJuLCAhUm0KLSAqIFFEQURELFtVXVFBREQvMTYvOC9TVUJYOiAhUmQsICFSbSwgIVJuCi0gKiBRRFNVQixbVV1RU1VCLzE2LzgvQUREWDogIVJkLCAhUm0sICFSbgotICogUkVWLzE2L1NIOiAhUmQsICFSbQotICogUkZFOiAhUm4KLSAqIHtTLFV9W0hdQUREezE2LDgsU1VCWH0se1MsVX1bSF1TVUJ7MTYsOCxBRERYfTogIVJkLCAhUm4sICFSbQotICogU0VMOiAhUmQsICFSbiwgIVJtCi0gKiBTTUxBPHg+PHk+LFNNTEF7RCxXPHk+fSxTTUxTRCxTTU1Me0EsU306ICFSZCwgIVJuLCAhUm0sICFScwotICogU01MQUw8eD48eT4sU01MQXtELExEfSxTTUxTTEQsU01NVUxMLFNNVUxXPHk+OiAhUmRIaSwgIVJkTG8sICFSbSwgIVJzCi0gKiBTTU1VTCxTTVVBRCxTTVVMPHg+PHk+LFNNVVNEOiAhUmQsICFSbSwgIVJzCi0gKiBTU0FULzE2OiAhUmQsICFSbQotICogU1RNKDEvMik6ICFSbiwgcmVnaXN0ZXJfbGlzdCogKFIxNSBpbiByZWcgbGlzdCBub3QgcmVjb21tZW5kZWQpCi0gKiBTVFJUIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiBSZCosICFSbgotICogU1RSVCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiBSZCosICFSbiwgIVJtCi0gKiBTVFJUIHNjYWxlZCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiBSZCosICFSbiwgIVJtCi0gKiBTVFJFWDogIVJkLCAhUm4sICFSbQotICogU1dQL0I6ICFSZCwgIVJuLCAhUm0KLSAqIHtTLFV9WFRBe0IsQjE2LEh9OiAhUmQsICFSbiwgIVJtCi0gKiB7UyxVfVhUe0IsQjE2LEh9OiAhUmQsICFSbQotICogVU17QUEsTEEsVUx9TDogIVJkSGksICFSZExvLCAhUm0sICFScwotICogVVNBe0Q4LEE4LFQsVDE2fTogIVJkLCAhUm0sICFScwotICoKLSAqIE1heSB0cmFuc2ZlciBjb250cm9sIGJ5IHdyaXRpbmcgUjE1IChwb3NzaWJsZSBtb2RlIGNoYW5nZXMgb3IgYWx0ZXJuYXRlCi0gKiBtb2RlIGFjY2Vzc2VzIG1hcmtlZCBieSAiKiIpOgotICogQUxVIG9wICgqIHdpdGggcy1iaXQpLCBCLCBCTCwgQktQVCwgQkxYKDEvMiksIEJYLCBCWEosIENQUyosIENQWSwKLSAqIExETSgxKSwgTERNKDIvMykqLCBMRFIsIE1PViwgUkZFKiwgU1dJKgotICoKLSAqIEluc3RydWN0aW9ucyB0aGF0IGRvIG5vdCB0YWtlIGdlbmVyYWwgcmVnaXN0ZXJzLCBub3IgdHJhbnNmZXIgY29udHJvbDoKLSAqIENEUC8yLCBTRVRFTkQsIFNSUyoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMmJhN2RlYi4uMTY1NmM4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMzQsNyArMTM0LDggQEAKIAkJCQkgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlyZWdzLT5BUk1fcGMgKz0gNDsKLQlwLT5haW5zbi5pbnNuX2hhbmRsZXIocCwgcmVncyk7CisJaWYgKHAtPmFpbnNuLmluc25fY2hlY2tfY2MocmVncy0+QVJNX2Nwc3IpKQorCQlwLT5haW5zbi5pbnNuX2hhbmRsZXIocCwgcmVncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA2OWNmZWUwLi4xMzllM2M4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCXByZXZfcmF3X2NvdW50ICY9IGFybXBtdS0+bWF4X3BlcmlvZDsKIAogCWlmIChvdmVyZmxvdykKLQkJZGVsdGEgPSBhcm1wbXUtPm1heF9wZXJpb2QgLSBwcmV2X3Jhd19jb3VudCArIG5ld19yYXdfY291bnQ7CisJCWRlbHRhID0gYXJtcG11LT5tYXhfcGVyaW9kIC0gcHJldl9yYXdfY291bnQgKyBuZXdfcmF3X2NvdW50ICsgMTsKIAllbHNlCiAJCWRlbHRhID0gbmV3X3Jhd19jb3VudCAtIHByZXZfcmF3X2NvdW50OwogCkBAIC03NDYsNyArNzQ2LDggQEAKIAogCXRhaWwgPSAoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICopcmVncy0+QVJNX2ZwIC0gMTsKIAotCXdoaWxlICh0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCisJd2hpbGUgKChlbnRyeS0+bnIgPCBQRVJGX01BWF9TVEFDS19ERVBUSCkgJiYKKwkgICAgICAgdGFpbCAmJiAhKCh1bnNpZ25lZCBsb25nKXRhaWwgJiAweDMpKQogCQl0YWlsID0gdXNlcl9iYWNrdHJhY2UodGFpbCwgZW50cnkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCA5NGJiZWRiLi41ZTFlNTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTM3Miw2ICszNzIsOCBAQAogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKIAkJdGhyZWFkLT50cF92YWx1ZSA9IHJlZ3MtPkFSTV9yMzsKIAorCXRocmVhZF9ub3RpZnkoVEhSRUFEX05PVElGWV9DT1BZLCB0aHJlYWQpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAyYmYyN2YzLi44MTgyZjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC03NjcsMTIgKzc2NywyMCBAQAogCiAjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAogCQljYXNlIFBUUkFDRV9HRVRIQlBSRUdTOgorCQkJaWYgKHB0cmFjZV9nZXRfYnJlYWtwb2ludHMoY2hpbGQpIDwgMCkKKwkJCQlyZXR1cm4gLUVTUkNIOworCiAJCQlyZXQgPSBwdHJhY2VfZ2V0aGJwcmVncyhjaGlsZCwgYWRkciwKIAkJCQkJCSh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQkJcHRyYWNlX3B1dF9icmVha3BvaW50cyhjaGlsZCk7CiAJCQlicmVhazsKIAkJY2FzZSBQVFJBQ0VfU0VUSEJQUkVHUzoKKwkJCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKGNoaWxkKSA8IDApCisJCQkJcmV0dXJuIC1FU1JDSDsKKwogCQkJcmV0ID0gcHRyYWNlX3NldGhicHJlZ3MoY2hpbGQsIGFkZHIsCiAJCQkJCQkodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHMoY2hpbGQpOwogCQkJYnJlYWs7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCmluZGV4IGNiODM5ODMuLjAzNDAyMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKQEAgLTU5NywxOSArNTk3LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3N5c2NhbGxfcmVzdGFydChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZWdzLT5BUk1fcjAgPSByZWdzLT5BUk1fT1JJR19yMDsKLQlyZWdzLT5BUk1fcGMgLT0gdGh1bWJfbW9kZShyZWdzKSA/IDIgOiA0OwotfQotCiAvKgogICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcgogICovCQogc3RhdGljIGludAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkgICAgICBzaWdpbmZvX3QgKmluZm8sIHNpZ3NldF90ICpvbGRzZXQsCi0JICAgICAgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBpbnQgc3lzY2FsbCkKKwkgICAgICBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwpAQCAtNjE3LDI2ICs2MTEsNiBAQAogCWludCByZXQ7CiAKIAkvKgotCSAqIElmIHdlIHdlcmUgZnJvbSBhIHN5c3RlbSBjYWxsLCBjaGVjayBmb3Igc3lzdGVtIGNhbGwgcmVzdGFydGluZy4uLgotCSAqLwotCWlmIChzeXNjYWxsKSB7Ci0JCXN3aXRjaCAocmVncy0+QVJNX3IwKSB7Ci0JCWNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKLQkJY2FzZSAtRVJFU1RBUlROT0hBTkQ6Ci0JCQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7Ci0JCQlicmVhazsKLQkJY2FzZSAtRVJFU1RBUlRTWVM6Ci0JCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkgewotCQkJCXJlZ3MtPkFSTV9yMCA9IC1FSU5UUjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIGZhbGx0aHJvdWdoICovCi0JCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgotCQkJc2V0dXBfc3lzY2FsbF9yZXN0YXJ0KHJlZ3MpOwotCQl9Ci0JfQotCi0JLyoKIAkgKiB0cmFuc2xhdGUgdGhlIHNpZ25hbAogCSAqLwogCWlmICh1c2lnIDwgMzIgJiYgdGhyZWFkLT5leGVjX2RvbWFpbiAmJiB0aHJlYWQtPmV4ZWNfZG9tYWluLT5zaWduYWxfaW52bWFwKQpAQCAtNjg1LDYgKzY1OSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHN5c2NhbGwpCiB7CisJdW5zaWduZWQgaW50IHJldHZhbCA9IDAsIGNvbnRpbnVlX2FkZHIgPSAwLCByZXN0YXJ0X2FkZHIgPSAwOwogCXN0cnVjdCBrX3NpZ2FjdGlvbiBrYTsKIAlzaWdpbmZvX3QgaW5mbzsKIAlpbnQgc2lnbnI7CkBAIC02OTgsMTggKzY3Myw2MSBAQAogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIElmIHdlIHdlcmUgZnJvbSBhIHN5c3RlbSBjYWxsLCBjaGVjayBmb3Igc3lzdGVtIGNhbGwgcmVzdGFydGluZy4uLgorCSAqLworCWlmIChzeXNjYWxsKSB7CisJCWNvbnRpbnVlX2FkZHIgPSByZWdzLT5BUk1fcGM7CisJCXJlc3RhcnRfYWRkciA9IGNvbnRpbnVlX2FkZHIgLSAodGh1bWJfbW9kZShyZWdzKSA/IDIgOiA0KTsKKwkJcmV0dmFsID0gcmVncy0+QVJNX3IwOworCisJCS8qCisJCSAqIFByZXBhcmUgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnQuICBXZSBkbyB0aGlzIGhlcmUgc28gdGhhdCBhCisJCSAqIGRlYnVnZ2VyIHdpbGwgc2VlIHRoZSBhbHJlYWR5IGNoYW5nZWQgUFNXLgorCQkgKi8KKwkJc3dpdGNoIChyZXR2YWwpIHsKKwkJY2FzZSAtRVJFU1RBUlROT0hBTkQ6CisJCWNhc2UgLUVSRVNUQVJUU1lTOgorCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKKwkJCXJlZ3MtPkFSTV9yMCA9IHJlZ3MtPkFSTV9PUklHX3IwOworCQkJcmVncy0+QVJNX3BjID0gcmVzdGFydF9hZGRyOworCQkJYnJlYWs7CisJCWNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKKwkJCXJlZ3MtPkFSTV9yMCA9IC1FSU5UUjsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJaWYgKHRyeV90b19mcmVlemUoKSkKIAkJZ290byBub19zaWduYWw7CiAKKwkvKgorCSAqIEdldCB0aGUgc2lnbmFsIHRvIGRlbGl2ZXIuICBXaGVuIHJ1bm5pbmcgdW5kZXIgcHRyYWNlLCBhdCB0aGlzCisJICogcG9pbnQgdGhlIGRlYnVnZ2VyIG1heSBjaGFuZ2UgYWxsIG91ciByZWdpc3RlcnMgLi4uCisJICovCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7CiAJaWYgKHNpZ25yID4gMCkgewogCQlzaWdzZXRfdCAqb2xkc2V0OwogCisJCS8qCisJCSAqIERlcGVuZGluZyBvbiB0aGUgc2lnbmFsIHNldHRpbmdzIHdlIG1heSBuZWVkIHRvIHJldmVydCB0aGUKKwkJICogZGVjaXNpb24gdG8gcmVzdGFydCB0aGUgc3lzdGVtIGNhbGwuICBCdXQgc2tpcCB0aGlzIGlmIGEKKwkJICogZGVidWdnZXIgaGFzIGNob3NlbiB0byByZXN0YXJ0IGF0IGEgZGlmZmVyZW50IFBDLgorCQkgKi8KKwkJaWYgKHJlZ3MtPkFSTV9wYyA9PSByZXN0YXJ0X2FkZHIpIHsKKwkJCWlmIChyZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5ECisJCQkgICAgfHwgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMKKwkJCQkmJiAhKGthLnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpKSB7CisJCQkJcmVncy0+QVJNX3IwID0gLUVJTlRSOworCQkJCXJlZ3MtPkFSTV9wYyA9IGNvbnRpbnVlX2FkZHI7CisJCQl9CisJCX0KKwogCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkKIAkJCW9sZHNldCA9ICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrOwogCQllbHNlCiAJCQlvbGRzZXQgPSAmY3VycmVudC0+YmxvY2tlZDsKLQkJaWYgKGhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncywgc3lzY2FsbCkgPT0gMCkgeworCQlpZiAoaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LCByZWdzKSA9PSAwKSB7CiAJCQkvKgogCQkJICogQSBzaWduYWwgd2FzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQ7IHRoZSBzYXZlZAogCQkJICogc2lnbWFzayB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHNpZ25hbCBmcmFtZSwKQEAgLTcyMywxMSArNzQxLDE0IEBACiAJfQogCiAgbm9fc2lnbmFsOgotCS8qCi0JICogTm8gc2lnbmFsIHRvIGRlbGl2ZXIgdG8gdGhlIHByb2Nlc3MgLSByZXN0YXJ0IHRoZSBzeXNjYWxsLgotCSAqLwogCWlmIChzeXNjYWxsKSB7Ci0JCWlmIChyZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSykgeworCQkvKgorCQkgKiBIYW5kbGUgcmVzdGFydGluZyBhIGRpZmZlcmVudCBzeXN0ZW0gY2FsbC4gIEFzIGFib3ZlLAorCQkgKiBpZiBhIGRlYnVnZ2VyIGhhcyBjaG9zZW4gdG8gcmVzdGFydCBhdCBhIGRpZmZlcmVudCBQQywKKwkJICogaWdub3JlIHRoZSByZXN0YXJ0LgorCQkgKi8KKwkJaWYgKHJldHZhbCA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLCisJCSAgICAmJiByZWdzLT5BUk1fcGMgPT0gY29udGludWVfYWRkcikgewogCQkJaWYgKHRodW1iX21vZGUocmVncykpIHsKIAkJCQlyZWdzLT5BUk1fcjcgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAtIF9fTlJfU1lTQ0FMTF9CQVNFOwogCQkJCXJlZ3MtPkFSTV9wYyAtPSAyOwpAQCAtNzUwLDExICs3NzEsNiBAQAogI2VuZGlmCiAJCQl9CiAJCX0KLQkJaWYgKHJlZ3MtPkFSTV9yMCA9PSAtRVJFU1RBUlROT0hBTkQgfHwKLQkJICAgIHJlZ3MtPkFSTV9yMCA9PSAtRVJFU1RBUlRTWVMgfHwKLQkJICAgIHJlZ3MtPkFSTV9yMCA9PSAtRVJFU1RBUlROT0lOVFIpIHsKLQkJCXNldHVwX3N5c2NhbGxfcmVzdGFydChyZWdzKTsKLQkJfQogCiAJCS8qIElmIHRoZXJlJ3Mgbm8gc2lnbmFsIHRvIGRlbGl2ZXIsIHdlIGp1c3QgcHV0IHRoZSBzYXZlZCBzaWdtYXNrCiAJCSAqIGJhY2suCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggOGZlMDVhZC4uZjI5YjhhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtNDc5LDcgKzQ3OSw3IEBACiB7CiB9CiAKLXN0YXRpYyB2b2lkIGJyb2FkY2FzdF90aW1lcl9zZXR1cChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYnJvYWRjYXN0X3RpbWVyX3NldHVwKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKIHsKIAlldnQtPm5hbWUJPSAiZHVtbXlfdGltZXIiOwogCWV2dC0+ZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UIHwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zd3BfZW11bGF0ZS5jIGIvYXJjaC9hcm0va2VybmVsL3N3cF9lbXVsYXRlLmMKaW5kZXggN2E1NzYwOTIuLjQwZWU3ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zd3BfZW11bGF0ZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zd3BfZW11bGF0ZS5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCWlmIChyZXMgPT0gMCkgewogCQkvKgotCQkgKiBCYXJyaWVyIGFsc28gcmVxdWlyZWQgYmV0d2VlbiBhcXVpcmluZyBhIGxvY2sgZm9yIGEKKwkJICogQmFycmllciBhbHNvIHJlcXVpcmVkIGJldHdlZW4gYWNxdWlyaW5nIGEgbG9jayBmb3IgYQogCQkgKiBwcm90ZWN0ZWQgcmVzb3VyY2UgYW5kIGFjY2Vzc2luZyB0aGUgcmVzb3VyY2UuIEluc2VydGVkIGZvcgogCQkgKiBzYW1lIHJlYXNvbiBhcyBhYm92ZS4KIAkJICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMgYi9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMKaW5kZXggNGFkOGRhMS4uYWYwYWFlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJbG9uZyBlcnI7CiAJaW50IGk7CiAKLQlpZiAobnNvcHMgPCAxKQorCWlmIChuc29wcyA8IDEgfHwgbnNvcHMgPiBTRU1PUE0pCiAJCXJldHVybiAtRUlOVkFMOwogCXNvcHMgPSBrbWFsbG9jKHNpemVvZigqc29wcykgKiBuc29wcywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzb3BzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCBmMDAwMGUxLi4zYjU0YWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtNDEwLDggKzQxMCw3IEBACiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CiAJc2lnaW5mb190IGluZm87CiAKLQlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgIT0gUEVSX0xJTlVYICYmCi0JICAgIGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWF8zMkJJVCAmJgorCWlmICgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBQRVJfTUFTSykgIT0gUEVSX0xJTlVYICYmCiAJICAgIHRocmVhZC0+ZXhlY19kb21haW4tPmhhbmRsZXIpIHsKIAkJdGhyZWFkLT5leGVjX2RvbWFpbi0+aGFuZGxlcihuLCByZWdzKTsKIAkJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKaW5kZXggMTkzOTAyMy4uMmQyOTliZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKQEAgLTgzLDYgKzgzLDcgQEAKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBIQVZFX0ZCX0FUTUVMCisJc2VsZWN0IEhBVkVfTkVUX01BQ0IKIAogY29uZmlnIEFSQ0hfQVQ1NzJEOTQwSEYKIAlib29sICJBVDU3MkQ5NDBIRiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXJtZXZhLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCmluZGV4IDJlNzRhMTkuLjI5NWUxZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXJtZXZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwpAQCAtNzYsNyArNzYsNyBAQAogCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEQ5LAogfTsKIAotLyogRklYTUU6IHVzZXIgZGVwZW5kYW50ICovCisvKiBGSVhNRTogdXNlciBkZXBlbmRlbnQgKi8KIC8vIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIF9faW5pdGRhdGEgY2FybWV2YV9jZl9kYXRhID0gewogLy8JLmRldF9waW4JPSBBVDkxX1BJTl9QQjAsCiAvLwkucnN0X3Bpbgk9IEFUOTFfUElOX1BDNSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jCmluZGV4IDFmOWQzY2IuLmQ4ZGY1OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViMDEuYwpAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MWViMDFfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxeDQwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGF0OTFlYjAxX21hcF9pbyh2b2lkKQogewogCWF0OTF4NDBfaW5pdGlhbGl6ZSg0MDAwMDAwMCk7CkBAIC0zOCw3ICs0Myw3IEBACiBNQUNISU5FX1NUQVJUKEFUOTFFQjAxLCAiQXRtZWwgQVQ5MSBFQjAxIikKIAkvKiBNYWludGFpbmVyOiBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPiAqLwogCS50aW1lcgkJPSAmYXQ5MXg0MF90aW1lciwKLQkuaW5pdF9pcnEJPSBhdDkxeDQwX2luaXRfaW50ZXJydXB0cywKKwkuaW5pdF9pcnEJPSBhdDkxZWIwMV9pbml0X2lycSwKIAkubWFwX2lvCQk9IGF0OTFlYjAxX21hcF9pbywKIE1BQ0hJTkVfRU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9tY2kuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9tY2kuaAppbmRleCAyN2FjNmY1Li4wMjE4MmMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfbWNpLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX21jaS5oCkBAIC0xMDIsNyArMTAyLDcgQEAKICNkZWZpbmUJCUFUOTFfTUNJX1JESVJFCQkoMSA8PCAxNykJLyogUmVzcG9uc2UgRGlyZWN0aW9uIEVycm9yICovCiAjZGVmaW5lCQlBVDkxX01DSV9SQ1JDRQkJKDEgPDwgMTgpCS8qIFJlc3BvbnNlIENSQyBFcnJvciAqLwogI2RlZmluZQkJQVQ5MV9NQ0lfUkVOREUJCSgxIDw8IDE5KQkvKiBSZXNwb25zZSBFbmQgQml0IEVycm9yICovCi0jZGVmaW5lCQlBVDkxX01DSV9SVE9FCQkoMSA8PCAyMCkJLyogUmVwb25zZSBUaW1lLW91dCBFcnJvciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUlRPRQkJKDEgPDwgMjApCS8qIFJlc3BvbnNlIFRpbWUtb3V0IEVycm9yICovCiAjZGVmaW5lCQlBVDkxX01DSV9EQ1JDRQkJKDEgPDwgMjEpCS8qIERhdGEgQ1JDIEVycm9yICovCiAjZGVmaW5lCQlBVDkxX01DSV9EVE9FCQkoMSA8PCAyMikJLyogRGF0YSBUaW1lLW91dCBFcnJvciAqLwogI2RlZmluZQkJQVQ5MV9NQ0lfT1ZSRQkJKDEgPDwgMzApCS8qIE92ZXJydW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDNiZWY5MzEuLjA3MDBmMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1CTB4ODE5YjA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NU1STAkweDgxOWIwNWEyCS8qIGFrYSA5RzQ1LUVTMiAmIG5vbiBFUyBsb3RzICovCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDVFUwkweDgxOWIwNWExCS8qIDlHNDUtRVMgKEVuZ2luZWVyaW5nIFNhbXBsZSkgKi8KKyNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVg1CTB4ODE5YTA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxQ0FQOQkweDAzOUEwM0EwCiAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVhFMTI4CTB4MzI5OTczYTAKQEAgLTU1LDYgKzU2LDEyIEBACiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUc0NgkweDAwMDAwMDAzCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUc0NQkweDAwMDAwMDA0CiAKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzE1CTB4MDAwMDAwMDAKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzM1CTB4MDAwMDAwMDEKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05WDM1CTB4MDAwMDAwMDIKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzI1CTB4MDAwMDAwMDMKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05WDI1CTB4MDAwMDAwMDQKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfZXhpZF9pZGVudGlmeSh2b2lkKQogewogCXJldHVybiBhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9FWElEKTsKQEAgLTE0Myw2ICsxNTAsMjcgQEAKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05bTExKCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05WDUKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDUoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05WDUpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05RzE1KSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzM1KCkJKGNwdV9pc19hdDkxc2FtOXg1KCkgJiYgXAorCQkJCShhdDkxX2V4aWRfaWRlbnRpZnkoKSA9PSBBUkNIX0VYSURfQVQ5MVNBTTlHMzUpKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MzUoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSAmJiBcCisJCQkJKGF0OTFfZXhpZF9pZGVudGlmeSgpID09IEFSQ0hfRVhJRF9BVDkxU0FNOVgzNSkpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcyNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05RzI1KSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDI1KCkJKGNwdV9pc19hdDkxc2FtOXg1KCkgJiYgXAorCQkJCShhdDkxX2V4aWRfaWRlbnRpZnkoKSA9PSBBUkNIX0VYSURfQVQ5MVNBTTlYMjUpKQorI2Vsc2UKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzE1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWczNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MzUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzI1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXgyNSgpCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxQ0FQOQogI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDkoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFDQVA5KQogI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDlfcmV2QigpCShhdDkxY2FwOV9yZXZfaWRlbnRpZnkoKSA9PSBBUkNIX1JFVklTSU9OX0NBUDlfQikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZGRlYjY0NS4uMDU2ZGM2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiB3cmFwcGVycyBmb3IgIm5ldyBzdHlsZSIgR1BJTyBjYWxscy4gdGhlIG9sZCBBVDkxLXNwZWNmaWMgb25lcyBzaG91bGQKKy8qIHdyYXBwZXJzIGZvciAibmV3IHN0eWxlIiBHUElPIGNhbGxzLiB0aGUgb2xkIEFUOTEtc3BlY2lmaWMgb25lcyBzaG91bGQKICAqIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZCAoYWxvbmcgd2l0aCB0aGlzIGVycm5vLmggaW5jbHVzaW9uKSwgYW5kIHRoZQogICogZ3BpbyByZXF1ZXN0L2ZyZWUgY2FsbHMgc2hvdWxkIHByb2JhYmx5IGJlIGltcGxlbWVudGVkLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMKaW5kZXggNzdmODRiNC4uYTFmMzI4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL2RtYWNId19leHRyYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHdfZXh0cmEuYwpAQCAtNTUxLDcgKzU1MSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqCi0qICBAYnJpZWYgICBDaGVjayB0aGUgZXhpc3RhbmNlIG9mIHBlbmRpbmcgZGVzY3JpcHRvcgorKiAgQGJyaWVmICAgQ2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBwZW5kaW5nIGRlc2NyaXB0b3IKICoKICogIFRoaXMgZnVuY3Rpb24gY29uZmlybWVzIGlmIHRoZXJlIGlzIGFueSBwZW5kaW5nIGRlc2NyaXB0b3IgaW4gdGhlIGNoYWluCiAqICB0byBwcm9ncmFtIHRoZSBjaGFubmVsCkBAIC03NzUsNyArNzc1LDcgQEAKIC8qKgogKiAgQGJyaWVmICAgUmVhZCBkYXRhIERNQWVkIHRvIG1lbW9yeQogKgotKiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgZGF0YSB0aGF0IGhhcyBiZWVuIERNQWVkIHRvIG1lbW9yeSB3aGlsZSB0cmFuc2ZlcmluZyBmcm9tOgorKiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgZGF0YSB0aGF0IGhhcyBiZWVuIERNQWVkIHRvIG1lbW9yeSB3aGlsZSB0cmFuc2ZlcnJpbmcgZnJvbToKICogICAgICAgICAgLSBNZW1vcnkgdG8gbWVtb3J5CiAqICAgICAgICAgIC0gUGVyaXBoZXJhbCB0byBtZW1vcnkKICoKQEAgLTk0MSw3ICs5NDEsNyBAQAogLyoqCiAqICBAYnJpZWYgICBTZXRzIGNoYW5uZWwgc3BlY2lmaWMgdXNlciBkYXRhCiAqCi0qICBUaGlzIGZ1bmN0aW9uIGFzc29jaWF0ZXMgdXNlciBkYXRhIHRvIGEgc3BlY2lmIERNQSBjaGFubmVsCisqICBUaGlzIGZ1bmN0aW9uIGFzc29jaWF0ZXMgdXNlciBkYXRhIHRvIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwKICoKICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYwppbmRleCA4ZDFiYWYzLi5kODdhZDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYS5jCkBAIC02MjksNyArNjI5LDcgQEAKICogICBDb25maWd1cmVzIGEgRE1BIGNoYW5uZWwuCiAqCiAqICAgQHJldHVybgotKiAgICAgICA+PSAwICAgIC0gSW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWxsLgorKiAgICAgICA+PSAwICAgIC0gSW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqCiAqICAgICAgIC1FQlVTWSAgLSBEZXZpY2UgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQuCiAqICAgICAgIC1FTk9ERVYgLSBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCkBAIC02NzMsNyArNjczLDcgQEAKIC8qKgogKiAgIEluaXRpYWxpemVzIGFsbCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRE1BLgogKiAgIEByZXR1cm4KLSogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KKyogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsLgogKgogKiAgICAgICAtRUJVU1kgIC0gRGV2aWNlIGlzIGN1cnJlbnRseSBiZWluZyB1c2VkLgogKiAgICAgICAtRU5PREVWIC0gRGV2aWNlIGhhbmRlZCBpbiBpcyBpbnZhbGlkLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RtYWNIdy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RtYWNIdy5oCmluZGV4IDZjOGRhMmIuLmU2YTFkYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9kbWFjSHcuaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZG1hY0h3LmgKQEAgLTM2Miw3ICszNjIsNyBAQAogLyoqCiAqICBAYnJpZWYgICBSZWFkIGRhdGEgRE1BIHRyYW5zZmVycmVkIHRvIG1lbW9yeQogKgotKiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgZGF0YSB0aGF0IGhhcyBiZWVuIERNQWVkIHRvIG1lbW9yeSB3aGlsZSB0cmFuc2ZlcmluZyBmcm9tOgorKiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgZGF0YSB0aGF0IGhhcyBiZWVuIERNQWVkIHRvIG1lbW9yeSB3aGlsZSB0cmFuc2ZlcnJpbmcgZnJvbToKICogICAgICAgICAgLSBNZW1vcnkgdG8gbWVtb3J5CiAqICAgICAgICAgIC0gUGVyaXBoZXJhbCB0byBtZW1vcnkKICoKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKgotKiAgQGJyaWVmICAgQ2hlY2sgdGhlIGV4aXN0YW5jZSBvZiBwZW5kaW5nIGRlc2NyaXB0b3IKKyogIEBicmllZiAgIENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgcGVuZGluZyBkZXNjcmlwdG9yCiAqCiAqICBUaGlzIGZ1bmN0aW9uIGNvbmZpcm1lcyBpZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBkZXNjcmlwdG9yIGluIHRoZSBjaGFpbgogKiAgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbApAQCAtNTQyLDcgKzU0Miw3IEBACiAvKioKICogIEBicmllZiAgIFNldHMgY2hhbm5lbCBzcGVjaWZpYyB1c2VyIGRhdGEKICoKLSogIFRoaXMgZnVuY3Rpb24gYXNzb2NpYXRlcyB1c2VyIGRhdGEgdG8gYSBzcGVjaWYgRE1BIGNoYW5uZWwKKyogIFRoaXMgZnVuY3Rpb24gYXNzb2NpYXRlcyB1c2VyIGRhdGEgdG8gYSBzcGVjaWZpYyBETUEgY2hhbm5lbAogKgogKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19kZWYuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NoaXBjSHdfZGVmLmgKaW5kZXggNzBlYWVhOC4uMTYxOTczMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19kZWYuaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2RlZi5oCkBAIC0xODAsNyArMTgwLDcgQEAKIAogI2RlZmluZSBjaGlwY0h3X1hUQUxfRlJFUV9IeiAgICAgICAgICAgICAgICAgICAgMjUwMDAwMDAJLyogUmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiAqLwogCi0vKiBQcm9ncmFtYWJsZSBwaW4gZGVmaW5lcyAqLworLyogUHJvZ3JhbW1hYmxlIHBpbiBkZWZpbmVzICovCiAjZGVmaW5lIGNoaXBjSHdfUElOX0dQSU8obikgICAgICAgICAgICAgICAgICAgICAoKCgobikgPj0gMCkgJiYgKChuKSA8IChjaGlwY0h3X0dQSU9fQ09VTlQpKSkgPyAobikgOiAweEZGRkZGRkZGKQogCQkJCQkJCQkJICAgICAvKiBHUElPIHBpbiAwIC0gNjAgKi8KICNkZWZpbmUgY2hpcGNId19QSU5fVUFSVFRYRCAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAwKQkvKiBVQVJUIFRyYW5zbWl0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaAppbmRleCBjNzg4MzNhLi4wMzIzOGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmgKQEAgLTgzMiw3ICs4MzIsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKgotKiAgQGJyaWVmICAgTG93ZXIgbGF5ZXIgZnVudGlvbiB0byBlbmFibGUvZGlzYWJsZSBhIGNsb2NrIG9mIGEgY2VydGFpbiBkZXZpY2UKKyogIEBicmllZiAgIExvd2VyIGxheWVyIGZ1bmN0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGEgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQogKgogKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIGEgY29yZSBjbG9jawogKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvaW50Y0h3X3JlZy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvaW50Y0h3X3JlZy5oCmluZGV4IGUwMWZjNDYuLjBhZWI2YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2ludGNId19yZWcuaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9pbnRjSHdfcmVnLmgKQEAgLTEwOSw5ICsxMDksOSBAQAogI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMEMwICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9ETUEwQzBfQklUTlVNKQogCiAvKiBJTlRDMSAtIGludGVycnVwdCBjb250cm9sbGVyIDEgKi8KLSNkZWZpbmUgSU5UQ0hXX0lOVEMxX0REUlZQTVBfQklUTlVNICAgICAgIDI3CS8qIEREUiBhbmQgVlBNIFBMTCBjbG9jayBwaGFzZSByZWxhdGlvbnNoaXAgaW50ZXJ1cHQgKE5vdCBmb3IgQTApICovCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJWUE1QX0JJVE5VTSAgICAgICAyNwkvKiBERFIgYW5kIFZQTSBQTEwgY2xvY2sgcGhhc2UgcmVsYXRpb25zaGlwIGludGVycnVwdCAoTm90IGZvciBBMCkgKi8KICNkZWZpbmUgSU5UQ0hXX0lOVEMxX0REUlZQTVRfQklUTlVNICAgICAgIDI2CS8qIEREUiBhbmQgVlBNIEhXIHBoYXNlIGFsaWduIHRpbWVvdXQgaW50ZXJydXB0IChOb3QgZm9yIEEwKSAqLwotI2RlZmluZSBJTlRDSFdfSU5UQzFfRERSUF9CSVROVU0gICAgICAgICAgMjYJLyogRERSIGFuZCBQTEwgY2xvY2sgcGhhc2UgcmVsYXRpb25zaGlwIGludGVydXB0IChGb3IgQTAgb25seSkpICovCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJQX0JJVE5VTSAgICAgICAgICAyNgkvKiBERFIgYW5kIFBMTCBjbG9jayBwaGFzZSByZWxhdGlvbnNoaXAgaW50ZXJydXB0IChGb3IgQTAgb25seSkpICovCiAjZGVmaW5lIElOVENIV19JTlRDMV9SVEMyX0JJVE5VTSAgICAgICAgICAyNQkvKiBSZWFsIHRpbWUgY2xvY2sgdGFtcGVyIGludGVycnVwdCAqLwogI2RlZmluZSBJTlRDSFdfSU5UQzFfVkRFQ19CSVROVU0gICAgICAgICAgMjQJLyogSGFudHJvIFZpZGVvIERlY29kZXIgaW50ZXJydXB0ICovCiAvKiBCaXRzIDEzLTIzIGFyZSBub24tc2VjdXJlIHZlcnNpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlY3VyZSBiaXRzIGluIFNJTlRDIGJpdHMgMC0xMC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvcmVnX3VtaS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9yZWdfdW1pLmgKaW5kZXggMDZhMzU1NC4uMDk5Mjg0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9yZWdfdW1pLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9yZWdfdW1pLmgKQEAgLTg4LDcgKzg4LDcgQEAKIC8qIFJFR19VTUlfRkxBU0gwLzEvMl9UQ1IsIFJFR19VTUlfU1JBTTAvMV9UQ1IgYml0cyAqLwogLyogRW5hYmxlIHdhaXQgcGluIGR1cmluZyBidXJzdCB3cml0ZSBvciByZWFkICovCiAjZGVmaW5lIFJFR19VTUlfVENSX1dBSVRFTiAgICAgICAgICAgICAgMHg4MDAwMDAwMAotLyogRW5hYmxlIG1lbSBjdHJsciB0byB3b3JrIGl3dGggZXh0IG1lbSBvZiBsb3dlciBmcmVxIHRoYW4gQUhCIGNsayAqLworLyogRW5hYmxlIG1lbSBjdHJsciB0byB3b3JrIHdpdGggZXh0IG1lbSBvZiBsb3dlciBmcmVxIHRoYW4gQUhCIGNsayAqLwogI2RlZmluZSBSRUdfVU1JX1RDUl9MT1dGUkVRICAgICAgICAgICAgIDB4NDAwMDAwMDAKIC8qIDE9c3luY2ggd3JpdGUsIDA9YXN5bmMgd3JpdGUgKi8KICNkZWZpbmUgUkVHX1VNSV9UQ1JfTUVNVFlQRV9TWU5DV1JJVEUgICAweDIwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCmluZGV4IDMyZjE0NzkuLmMwZGVhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCkBAIC02Myw2ICs2Myw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE02NDR4CiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBDb25maWd1cmUgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgd2hldGhlciB0aGUgYm9hcmQgdXNlZAogCSAgZm9yIGRldmVsb3BtZW50IGlzIGEgRE02NDR4IEVWTQpAQCAtNzIsNiArNzMsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNNjQ0eAogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWxlY3QgdGhlIEx5cnRlY2ggU21hbGwgRm9ybSBGYWN0b3IKIAkgIFNvZnR3YXJlIERlZmluZWQgUmFkaW8gKFNGRlNEUikgYm9hcmQuCkBAIC0xMDUsNiArMTA3LDcgQEAKIAlzZWxlY3QgTUFDSF9EQVZJTkNJX0RNNjQ2N1RFVk0KIAlzZWxlY3QgTUlTQ19ERVZJQ0VTCiAJc2VsZWN0IEVFUFJPTV9BVDI0CisJc2VsZWN0IEkyQwogCWhlbHAKIAkgIENvbmZpZ3VyZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSB3aGV0aGVyIHRoZSBib2FyZCB1c2VkCiAJICBmb3IgZGV2ZWxvcG1lbnQgaXMgYSBETTY0NjcgRVZNCkBAIC0xMTgsNiArMTIxLDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM2NQogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgQ29uZmlndXJlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgYm9hcmQgdXNlZAogCSAgZm9yIGRldmVsb3BtZW50IGlzIGEgRE0zNjUgRVZNCkBAIC0xMjksNiArMTMzLDcgQEAKIAlzZWxlY3QgR1BJT19QQ0Y4NTdYCiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCB0aGUgVEkgREE4MzAvT01BUC1MMTM3L0FNMTd4IEV2YWx1YXRpb24gTW9kdWxlLgogCkBAIC0yMDUsNiArMjEwLDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9EQTg1MAogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWxlY3QgdGhlIENyaXRpY2FsIExpbmsgTWl0eURTUC1MMTM4L01pdHlBUk0tMTgwOAogCSAgU3lzdGVtIG9uIE1vZHVsZS4gIEluZm9ybWF0aW9uIG9uIHRoaXMgU29NIG1heSBiZSBmb3VuZCBhdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCmluZGV4IDJhYTc5YzUuLjYwNmE2ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxtYWNoL211eC5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLmg+CiAKLSNkZWZpbmUgTUlUWU9NQVBMMTM4X1BIWV9JRAkJIjA6MDMiCisjZGVmaW5lIE1JVFlPTUFQTDEzOF9QSFlfSUQJCSIiCiAKICNkZWZpbmUgRkFDVE9SWV9DT05GSUdfTUFHSUMJMHgwMTJDMDEzOAogI2RlZmluZSBGQUNUT1JZX0NPTkZJR19WRVJTSU9OCTB4MDAwMTAwMDEKQEAgLTQxNCw3ICs0MTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaXR5b21hcGwxMzhfbmFuZGZsYXNoX2RldmljZSA9IHsKIAkubmFtZQkJPSAiZGF2aW5jaV9uYW5kIiwKLQkuaWQJCT0gMCwKKwkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbWl0eW9tYXBsMTM4X25hbmRmbGFzaF9kYXRhLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1uZXVyb3Mtb3NkMi5jCmluZGV4IDZjMzg5ZmYuLjNlN2JlMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1uZXVyb3Mtb3NkMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1uZXVyb3Mtb3NkMi5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBETTY0NFgtRVZNIGJvYXJkLiBJdCBoYXM6CiAgKiAJRE02NDQ2TTAyIG1vZHVsZSB3aXRoIDI1Nk1CIE5BTkQsIDI1Nk1CIFJBTSwgVExWMzIwQUlDMzIgQUlDLAogICogCVVTQiwgRXRoZXJuZXQsIFNEL01NQywgVUFSVCwgVEhTODIwMCwgVFZQNzAwMCBmb3IgdmlkZW8uCi0gKiAJQWRkaXRpb25hbHkgcmVhbHRpbWUgY2xvY2ssIElSIHJlbW90ZSBjb250cm9sIHJlY2VpdmVyLAorICogCUFkZGl0aW9uYWxseSByZWFsdGltZSBjbG9jaywgSVIgcmVtb3RlIGNvbnRyb2wgcmVjZWl2ZXIsCiAgKiAJSVIgQmxhc3RlciBiYXNlZCBvbiBNU1A0MzAgKGZpcm13YXJlIGFsdGhvdWdoIGlzIGRpZmZlcmVudAogICogCWZyb20gdXNlZCBpbiBETTY0NFgtRVZNKSwgaW50ZXJuYWwgQVRBLTYgMy414oCdIEhERCBkcml2ZQogICogCXdpdGggUEFUQSBpbnRlcmZhY2UsIHR3byBtdXhlZCByZWQtZ3JlZW4gbGVkcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jCmluZGV4IDRhNjhjMmIuLjBhOTViZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJLyoKIAkgKiBUaW1lIG1lYXN1cmVtZW50IGFjcm9zcyB0aGUgdGFyZ2V0KCkgZnVuY3Rpb24geWllbGRzIH4xNTAwLTE4MDB1cwogCSAqIHRpbWUgdGFrZW4gd2l0aCBubyBkcml2ZXJzIG9uIG5vdGlmaWNhdGlvbiBsaXN0LgotCSAqIFNldHRpbmcgdGhlIGxhdGVuY3kgdG8gMjAwMCB1cyB0byBhY2NvbW9kYXRlIGFkZGl0aW9uIG9mIGRyaXZlcnMKKwkgKiBTZXR0aW5nIHRoZSBsYXRlbmN5IHRvIDIwMDAgdXMgdG8gYWNjb21tb2RhdGUgYWRkaXRpb24gb2YgZHJpdmVycwogCSAqIHRvIHByZS9wb3N0IGNoYW5nZSBub3RpZmljYXRpb24gbGlzdC4KIAkgKi8KIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMjAwMCAqIDEwMDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4NTAuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCmluZGV4IDY4ZmU0YzIuLmI5NWI5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCSAqIFRoaXMgaGVscHMga2VlcGluZyB0aGUgcGVyaXBoZXJhbHMgb24gdGhpcyBkb21haW4gaW5zdWxhdGVkCiAJICogZnJvbSBDUFUgZnJlcXVlbmN5IGNoYW5nZXMgY2F1c2VkIGJ5IERWRlMuIFRoZSBmaXJtd2FyZSBzZXRzCiAJICogYm90aCBQTEwwIGFuZCBQTEwxIHRvIHRoZSBzYW1lIGZyZXF1ZW5jeSBzbywgdGhlcmUgc2hvdWxkIG5vdAotCSAqIGJlIGFueSBub3RpY2libGUgY2hhbmdlIGV2ZW4gaW4gbm9uLURWRlMgdXNlIGNhc2VzLgorCSAqIGJlIGFueSBub3RpY2VhYmxlIGNoYW5nZSBldmVuIGluIG5vbi1EVkZTIHVzZSBjYXNlcy4KIAkgKi8KIAlkYTg1MF9zZXRfYXN5bmMzX3NyYygxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKaW5kZXggNjI1ZDRiNi4uNThhMDJkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCkBAIC0zOSw3ICszOSw4IEBACiAjZGVmaW5lIERBOFhYX0dQSU9fQkFTRQkJCTB4MDFlMjYwMDAKICNkZWZpbmUgREE4WFhfSTJDMV9CQVNFCQkJMHgwMWUyODAwMAogI2RlZmluZSBEQThYWF9TUEkwX0JBU0UJCQkweDAxYzQxMDAwCi0jZGVmaW5lIERBOFhYX1NQSTFfQkFTRQkJCTB4MDFmMGUwMDAKKyNkZWZpbmUgREE4MzBfU1BJMV9CQVNFCQkJMHgwMWUxMjAwMAorI2RlZmluZSBEQTg1MF9TUEkxX0JBU0UJCQkweDAxZjBlMDAwCiAKICNkZWZpbmUgREE4WFhfRU1BQ19DVFJMX1JFR19PRkZTRVQJMHgzMDAwCiAjZGVmaW5lIERBOFhYX0VNQUNfTU9EX1JFR19PRkZTRVQJMHgyMDAwCkBAIC03NjIsOCArNzYzLDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYTh4eF9zcGkxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gREE4WFhfU1BJMV9CQVNFLAotCQkuZW5kCT0gREE4WFhfU1BJMV9CQVNFICsgU1pfNEsgLSAxLAorCQkuc3RhcnQJPSBEQTgzMF9TUEkxX0JBU0UsCisJCS5lbmQJPSBEQTgzMF9TUEkxX0JBU0UgKyBTWl80SyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtODMyLDUgKzgzMywxMCBAQAogCiAJZGE4eHhfc3BpX3BkYXRhW2luc3RhbmNlXS5udW1fY2hpcHNlbGVjdCA9IGxlbjsKIAorCWlmIChpbnN0YW5jZSA9PSAxICYmIGNwdV9pc19kYXZpbmNpX2RhODUwKCkpIHsKKwkJZGE4eHhfc3BpMV9yZXNvdXJjZXNbMF0uc3RhcnQgPSBEQTg1MF9TUEkxX0JBU0U7CisJCWRhOHh4X3NwaTFfcmVzb3VyY2VzWzBdLmVuZCA9IERBODUwX1NQSTFfQkFTRSArIFNaXzRLIC0gMTsKKwl9CisKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYTh4eF9zcGlfZGV2aWNlW2luc3RhbmNlXSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCmluZGV4IDc2MzY0ZDEzNC4uYTNhOTRlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKQEAgLTMxNCw3ICszMTQsNyBAQAogCS5uYW1lID0gInRpbWVyMiIsCiAJLnBhcmVudCA9ICZwbGwxX2F1eF9jbGssCiAJLmxwc2MgPSBEQVZJTkNJX0xQU0NfVElNRVIyLAotCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FudCcgdGhpcyBiZSBkaXNhYmxlZD8gKi8KKwkudXNlY291bnQgPSAxLCAgICAgICAgICAgICAgLyogUkVWSVNJVDogd2h5IGNhbid0IHRoaXMgYmUgZGlzYWJsZWQ/ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0aW1lcjNfY2xrID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCmluZGV4IDlhMjM3NmIuLjRjODJjMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCS5uYW1lID0gInRpbWVyMiIsCiAJLnBhcmVudCA9ICZwbGwxX2F1eF9jbGssCiAJLmxwc2MgPSBEQVZJTkNJX0xQU0NfVElNRVIyLAotCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FudCcgdGhpcyBiZSBkaXNhYmxlZD8gKi8KKwkudXNlY291bnQgPSAxLCAgICAgICAgICAgICAgLyogUkVWSVNJVDogd2h5IGNhbid0IHRoaXMgYmUgZGlzYWJsZWQ/ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgZG02NDR4X2Nsa3NbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvY3B1dHlwZS5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKaW5kZXggY2VhNmI4OS4uOTU3ZmI4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKQEAgLTQsNyArNCw3IEBACiAgKiBBdXRob3I6IEtldmluIEhpbG1hbiwgRGVlcCBSb290IFN5c3RlbXMsIExMQwogICoKICAqIERlZmluZXMgdGhlIGNwdV9pc18qKCkgbWFjcm9zIGZvciBydW50aW1lIGRldGVjdGlvbiBvZiBEYVZpbmNpCi0gKiBkZXZpY2UgdHlwZS4gIEluIGFkZHRpb24sIGlmIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gZGV2aWNlIGlzIG5vdAorICogZGV2aWNlIHR5cGUuICBJbiBhZGRpdGlvbiwgaWYgc3VwcG9ydCBmb3IgYSBnaXZlbiBkZXZpY2UgaXMgbm90CiAgKiBjb21waWxlZCBpbiB0byB0aGUga2VybmVsLCB0aGUgbWFjcm9zIHJldHVybiAwIHNvIHRoYXQKICAqIHJlc3VsdGluZyBjb2RlIGNhbiBiZSBvcHRpbWl6ZWQgb3V0LgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA5ZjFiZWZjLi5mOGI3ZWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yNCw2ICsyNCw5IEBACiAKICNkZWZpbmUgVUFSVF9TSElGVAkyCiAKKyNkZWZpbmUgZGF2aW5jaV91YXJ0X3YycCh4KQkoKHgpIC0gUEFHRV9PRkZTRVQgKyBQTEFUX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBkYXZpbmNpX3VhcnRfcDJ2KHgpCSgoeCkgLSBQTEFUX1BIWVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisKIAkJLnB1c2hzZWN0aW9uIC5kYXRhCiBkYXZpbmNpX3VhcnRfcGh5czoJLndvcmQJMAogZGF2aW5jaV91YXJ0X3ZpcnQ6CS53b3JkCTAKQEAgLTM0LDcgKzM3LDcgQEAKIAkJLyogVXNlIGRhdmluY2lfdWFydF9waHlzL3ZpcnQgaWYgYWxyZWFkeSBjb25maWd1cmVkICovCiAxMDoJCW1yYwlwMTUsIDAsIFxycCwgYzEsIGMwCiAJCXRzdAlccnAsICMxCQkJQCBNTVUgZW5hYmxlZD8KLQkJbGRyZXEJXHJwLCA9X192aXJ0X3RvX3BoeXMoZGF2aW5jaV91YXJ0X3BoeXMpCisJCWxkcmVxCVxycCwgPWRhdmluY2lfdWFydF92MnAoZGF2aW5jaV91YXJ0X3BoeXMpCiAJCWxkcm5lCVxycCwgPWRhdmluY2lfdWFydF9waHlzCiAJCWFkZAlccnYsIFxycCwgIzQJCUAgZGF2aW5jaV91YXJ0X3ZpcnQKIAkJbGRyCVxycCwgW1xycCwgIzBdCkBAIC00OCwxOCArNTEsMTggQEAKIAkJdHN0CVxycCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCiAJCS8qIENvcHkgdWFydCBwaHlzIGFkZHJlc3MgZnJvbSBkZWNvbXByZXNzb3IgdWFydCBpbmZvICovCi0JCWxkcmVxCVxydiwgPV9fdmlydF90b19waHlzKGRhdmluY2lfdWFydF9waHlzKQorCQlsZHJlcQlccnYsID1kYXZpbmNpX3VhcnRfdjJwKGRhdmluY2lfdWFydF9waHlzKQogCQlsZHJuZQlccnYsID1kYXZpbmNpX3VhcnRfcGh5cwogCQlsZHJlcQlccnAsID1EQVZJTkNJX1VBUlRfSU5GTwotCQlsZHJuZQlccnAsID1fX3BoeXNfdG9fdmlydChEQVZJTkNJX1VBUlRfSU5GTykKKwkJbGRybmUJXHJwLCA9ZGF2aW5jaV91YXJ0X3AydihEQVZJTkNJX1VBUlRfSU5GTykKIAkJbGRyCVxycCwgW1xycCwgIzBdCiAJCXN0cglccnAsIFtccnZdCiAKIAkJLyogQ29weSB1YXJ0IHZpcnQgYWRkcmVzcyBmcm9tIGRlY29tcHJlc3NvciB1YXJ0IGluZm8gKi8KLQkJbGRyZXEJXHJ2LCA9X192aXJ0X3RvX3BoeXMoZGF2aW5jaV91YXJ0X3ZpcnQpCisJCWxkcmVxCVxydiwgPWRhdmluY2lfdWFydF92MnAoZGF2aW5jaV91YXJ0X3ZpcnQpCiAJCWxkcm5lCVxydiwgPWRhdmluY2lfdWFydF92aXJ0CiAJCWxkcmVxCVxycCwgPURBVklOQ0lfVUFSVF9JTkZPCi0JCWxkcm5lCVxycCwgPV9fcGh5c190b192aXJ0KERBVklOQ0lfVUFSVF9JTkZPKQorCQlsZHJuZQlccnAsID1kYXZpbmNpX3VhcnRfcDJ2KERBVklOQ0lfVUFSVF9JTkZPKQogCQlsZHIJXHJwLCBbXHJwLCAjNF0KIAkJc3RyCVxycCwgW1xydl0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc2VyaWFsLmgKaW5kZXggODA1MTExMC4uYzllNmNlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCkBAIC0yMiw3ICsyMiw3IEBACiAgKgogICogVGhpcyBhcmVhIHNpdHMganVzdCBiZWxvdyB0aGUgcGFnZSB0YWJsZXMgKHNlZSBhcmNoL2FybS9rZXJuZWwvaGVhZC5TKS4KICAqLwotI2RlZmluZSBEQVZJTkNJX1VBUlRfSU5GTwkoUEhZU19PRkZTRVQgKyAweDNmZjgpCisjZGVmaW5lIERBVklOQ0lfVUFSVF9JTkZPCShQTEFUX1BIWVNfT0ZGU0VUICsgMHgzZmY4KQogCiAjZGVmaW5lIERBVklOQ0lfVUFSVDBfQkFTRQkoSU9fUEhZUyArIDB4MjAwMDApCiAjZGVmaW5lIERBVklOQ0lfVUFSVDFfQkFTRQkoSU9fUEhZUyArIDB4MjA0MDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggMTgwYjhhOS4uYTVhOWZmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtMTAxLDcgKzEwMSw3IEBACiBzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAkvKgotCSAqIG1hcCBkaXNjb250aWd1b3VzIGh3IGlycSByYW5nZSB0byBjb250aW5vdXMgc3cgaXJxIHJhbmdlOgorCSAqIG1hcCBkaXNjb250aWd1b3VzIGh3IGlycSByYW5nZSB0byBjb250aW51b3VzIHN3IGlycSByYW5nZToKIAkgKgogCSAqICBJUlFfRVA5M1hYX0dQSU97MC4uN31NVVggLT4gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9GKHswLi43fSkKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggOTM5NzI4Yi4uYmU5MjY2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKICNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQogCi0vKiBQcmFjdGljYWxseSwgR1BJTyBiYW5rcyB1cHRvIEdQWiBhcmUgdGhlIGNvbmZpZ3VyYWJsZSBncGlvIGJhbmtzICovCisvKiBQcmFjdGljYWxseSwgR1BJTyBiYW5rcyB1cCB0byBHUFogYXJlIHRoZSBjb25maWd1cmFibGUgZ3BpbyBiYW5rcyAqLwogCiAvKiBHUElPIGJhbmsgc2l6ZXMgKi8KICNkZWZpbmUgRVhZTk9TNF9HUElPX0EwX05SCSg4KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L21jdC5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L21jdC5jCmluZGV4IGFmODJhOGYuLjE0YWMxMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tY3QuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWN0LmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCS8qIHVwZGF0ZSBpbnRlcnJ1cHQgY291bnQgYnVmZmVyICovCiAJZXh5bm9zNF9tY3Rfd3JpdGUodG1wLCBtZXZ0LT5iYXNlICsgTUNUX0xfSUNOVEJfT0ZGU0VUKTsKIAotCS8qIGVuYWJsZSBNQ1QgdGljayBpbnRlcnVwdCAqLworCS8qIGVuYWJsZSBNQ1QgdGljayBpbnRlcnJ1cHQgKi8KIAlleHlub3M0X21jdF93cml0ZSgweDEsIG1ldnQtPmJhc2UgKyBNQ1RfTF9JTlRfRU5CX09GRlNFVCk7CiAKIAl0bXAgPSBfX3Jhd19yZWFkbChtZXZ0LT5iYXNlICsgTUNUX0xfVENPTl9PRkZTRVQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLWdwaW8uYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1zZGhjaS1ncGlvLmMKaW5kZXggMWIzZDNhMmQuLmU4ZDA4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1zZGhjaS1ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLWdwaW8uYwpAQCAtMzgsMTQgKzM4LDE0IEBACiAJc3dpdGNoICh3aWR0aCkgewogCWNhc2UgODoKIAkJZm9yIChncGlvID0gRVhZTk9TNF9HUEsxKDMpOyBncGlvIDw9IEVYWU5PUzRfR1BLMSg2KTsgZ3BpbysrKSB7Ci0JCQkvKiBEYXRhIHBpbiBHUEsxWzM6Nl0gdG8gc3BlY2lhbC1mdW50aW9uIDMgKi8KKwkJCS8qIERhdGEgcGluIEdQSzFbMzo2XSB0byBzcGVjaWFsLWZ1bmN0aW9uIDMgKi8KIAkJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMykpOwogCQkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX1VQKTsKIAkJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CiAJCX0KIAljYXNlIDQ6CiAJCWZvciAoZ3BpbyA9IEVYWU5PUzRfR1BLMCgzKTsgZ3BpbyA8PSBFWFlOT1M0X0dQSzAoNik7IGdwaW8rKykgewotCQkJLyogRGF0YSBwaW4gR1BLMFszOjZdIHRvIHNwZWNpYWwtZnVudGlvbiAyICovCisJCQkvKiBEYXRhIHBpbiBHUEswWzM6Nl0gdG8gc3BlY2lhbC1mdW5jdGlvbiAyICovCiAJCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDIpKTsKIAkJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9VUCk7CiAJCQlzNXBfZ3Bpb19zZXRfZHJ2c3RyKGdwaW8sIFM1UF9HUElPX0RSVlNUUl9MVjQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2kuYwppbmRleCA4NWY5NDMzLi4xZTgzZjhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2kuYwpAQCAtMzUsNyArMzUsNyBAQAogewogCXUzMiBjdHJsMiwgY3RybDM7CiAKLQkvKiBkb24ndCBuZWVkIHRvIGFsdGVyIGFueXRoaW5nIGFjb3JkaW5nIHRvIGNhcmQtdHlwZSAqLworCS8qIGRvbid0IG5lZWQgdG8gYWx0ZXIgYW55dGhpbmcgYWNjb3JkaW5nIHRvIGNhcmQtdHlwZSAqLwogCiAJY3RybDIgPSByZWFkbChyICsgUzNDX1NESENJX0NPTlRST0wyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCmluZGV4IDc3M2VhMGMuLmJhM2RhZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogLyogVGhpcyByb3V0aW5lIGNoZWNrcyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbmZpZ3VyYXRpb24gY3ljbGUuICBJZiBhbiBlcnJvcgogICogd2FzIGRldGVjdGVkIGl0IHJldHVybnMgPjAsIGVsc2UgaXQgcmV0dXJucyBhIDAuICBUaGUgZXJyb3JzIGJlaW5nIGNoZWNrZWQKICAqIGFyZSBwYXJpdHksIG1hc3RlciBhYm9ydCwgdGFyZ2V0IGFib3J0IChtYXN0ZXIgYW5kIHRhcmdldCkuICBUaGVzZSB0eXBlcyBvZgotICogZXJyb3JzIG9jY3VyZSBkdXJpbmcgYSBjb25maWcgY3ljbGUgd2hlcmUgdGhlcmUgaXMgbm8gZGV2aWNlLCBsaWtlIGR1cmluZworICogZXJyb3JzIG9jY3VyIGR1cmluZyBhIGNvbmZpZyBjeWNsZSB3aGVyZSB0aGVyZSBpcyBubyBkZXZpY2UsIGxpa2UgZHVyaW5nCiAgKiB0aGUgZGlzY292ZXJ5IHN0YWdlLgogICovCiBzdGF0aWMgaW50IGlvcDEzeHhfYXR1eF9wY2lfc3RhdHVzKGludCBjbGVhcikKQEAgLTMzMiw3ICszMzIsNyBAQAogLyogVGhpcyByb3V0aW5lIGNoZWNrcyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbmZpZ3VyYXRpb24gY3ljbGUuICBJZiBhbiBlcnJvcgogICogd2FzIGRldGVjdGVkIGl0IHJldHVybnMgPjAsIGVsc2UgaXQgcmV0dXJucyBhIDAuICBUaGUgZXJyb3JzIGJlaW5nIGNoZWNrZWQKICAqIGFyZSBwYXJpdHksIG1hc3RlciBhYm9ydCwgdGFyZ2V0IGFib3J0IChtYXN0ZXIgYW5kIHRhcmdldCkuICBUaGVzZSB0eXBlcyBvZgotICogZXJyb3JzIG9jY3VyZSBkdXJpbmcgYSBjb25maWcgY3ljbGUgd2hlcmUgdGhlcmUgaXMgbm8gZGV2aWNlLCBsaWtlIGR1cmluZworICogZXJyb3JzIG9jY3VyIGR1cmluZyBhIGNvbmZpZyBjeWNsZSB3aGVyZSB0aGVyZSBpcyBubyBkZXZpY2UsIGxpa2UgZHVyaW5nCiAgKiB0aGUgZGlzY292ZXJ5IHN0YWdlLgogICovCiBzdGF0aWMgaW50IGlvcDEzeHhfYXR1ZV9wY2lfc3RhdHVzKGludCBjbGVhcikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHN4MXgtY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzeDF4LWNvbW1vbi5jCmluZGV4IGY3ODExNjQuLjI0Mjk0YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHN4MXgtY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90c3gxeC1jb21tb24uYwpAQCAtMTUsNyArMTUsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogMTYgTWlCIE5PUiBmbGFzaC4gVGhlIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlzIG5vdCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUKLSAqICAgICBwYXJ0aXRpb25zIG9uIHRoZSBkZXZpY2UgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgY29tcGF0YWJpbGl0eSB3aXRoCisgKiAgICAgcGFydGl0aW9ucyBvbiB0aGUgZGV2aWNlIGJlY2F1c2Ugd2Ugd2FudCB0byBrZWVwIGNvbXBhdGliaWxpdHkgd2l0aAogICogICAgIHRoZSBRTkFQIGZpcm13YXJlLgogICogTGF5b3V0IGFzIHVzZWQgYnkgUU5BUDoKICAqICAweDAwMDAwMDAwLTB4MDAwODAwMDAgOiAiVS1Cb290IgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3BtLmMgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvcG0uYwppbmRleCBlNzZkNDFiLi5iOWM4MDU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvcG0uYwpAQCAtNDEsNyArNDEsNyBAQAogICogRFJBTSBjbG9ja2luZyBhbmQgcmVmcmVzaCBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50IGZvciBzeXN0ZW1zIHdpdGggRERSCiAgKiBEUkFNIG9yIHJlZ3VsYXIgU0RSQU0gZGV2aWNlcy4gSWYgU0RSQU0gaXMgdXNlZCBpbiB0aGUgc3lzdGVtLCB0aGUKICAqIFNEUkFNIHdpbGwgc3RpbGwgYmUgYWNjZXNzaWJsZSBpbiBkaXJlY3QtcnVuIG1vZGUuIEluIEREUiBiYXNlZCBzeXN0ZW1zLAotICogYSB0cmFuc2lzdGlvbiB0byBkaXJlY3QtcnVuIG1vZGUgd2lsbCBzdG9wIGFsbCBERFIgYWNjZXNzZXMgKG5vIGNsb2NrcykuCisgKiBhIHRyYW5zaXRpb24gdG8gZGlyZWN0LXJ1biBtb2RlIHdpbGwgc3RvcCBhbGwgRERSIGFjY2Vzc2VzIChubyBjbG9ja3MpLgogICogQmVjYXVzZSBvZiB0aGlzLCB0aGUgY29kZSB0byBzd2l0Y2ggcG93ZXIgbW9kZXMgYW5kIHRoZSBjb2RlIHRvIGVudGVyCiAgKiBhbmQgZXhpdCBEUkFNIHNlbGYtcmVmcmVzaCBtb2RlcyBtdXN0IG5vdCBiZSBleGVjdXRlZCBpbiBEUkFNLiBBIHNtYWxsCiAgKiBzZWN0aW9uIG9mIElSQU0gaXMgdXNlZCBpbnN0ZWFkIGZvciB0aGlzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZWU4YjAyZS4uN2JmYjgyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xMCw3ICsxMCw3IEBACiAjZGVmaW5lIEJBTktfT0ZGKG4pCSgoKG4pIDwgMykgPyAobikgPDwgMiA6IDB4MTAwICsgKCgobikgLSAzKSA8PCAyKSkKICNkZWZpbmUgR1BJT19SRUcoeCkJKCooKHZvbGF0aWxlIHUzMiAqKShHUElPX1JFR1NfVklSVCArICh4KSkpKQogCi0jZGVmaW5lIE5SX0JVSUxUSU5fR1BJTwkoMTkyKQorI2RlZmluZSBOUl9CVUlMVElOX0dQSU8JCUlSUV9HUElPX05VTQogCiAjZGVmaW5lIGdwaW9fdG9fYmFuayhncGlvKQkoKGdwaW8pID4+IDUpCiAjZGVmaW5lIGdwaW9fdG9faXJxKGdwaW8pCShJUlFfR1BJT19TVEFSVCArIChncGlvKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTE2OC5oCmluZGV4IDQ2MjEwNjcuLjcxM2JlMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaApAQCAtOCw2ICs4LDE1IEBACiAjZGVmaW5lIE1GUF9EUklWRV9NRURJVU0JKDB4MiA8PCAxMykKICNkZWZpbmUgTUZQX0RSSVZFX0ZBU1QJCSgweDMgPDwgMTMpCiAKKyN1bmRlZiBNRlBfQ0ZHCisjdW5kZWYgTUZQX0NGR19EUlYKKworI2RlZmluZSBNRlBfQ0ZHKHBpbiwgYWYpCQlcCisJKE1GUF9MUE1fSU5QVVQgfCBNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfRFJJVkVfTUVESVVNKQorCisjZGVmaW5lIE1GUF9DRkdfRFJWKHBpbiwgYWYsIGRydikJXAorCShNRlBfTFBNX0lOUFVUIHwgTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQX0RSSVZFXyMjZHJ2KQorCiAvKiBHUElPICovCiAjZGVmaW5lIEdQSU8wX0dQSU8JCU1GUF9DRkcoR1BJTzAsIEFGNSkKICNkZWZpbmUgR1BJTzFfR1BJTwkJTUZQX0NGRyhHUElPMSwgQUY1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCmluZGV4IGFlYjlhZTIuLjk5ODMzYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKQEAgLTksNyArOSw3IEBACiAgKiAgIDIwMDgtMDQtMTE6IEphc29uIENoYWdhcyA8SmFzb24uY2hhZ2FzQG1hcnZlbGwuY29tPgogICogICAyMDA4LTEwLTA4OiBCaW4gWWFuZyA8YmluLnlhbmdAbWFydmVsbC5jb20+CiAgKgotICogVGhlIHRpbWVycyBtb2R1bGUgYWN0dWFsbHkgaW5jbHVkZXMgdGhyZWUgdGltZXJzLCBlYWNoIHRpbWVyIHdpdGggdXB0bworICogVGhlIHRpbWVycyBtb2R1bGUgYWN0dWFsbHkgaW5jbHVkZXMgdGhyZWUgdGltZXJzLCBlYWNoIHRpbWVyIHdpdGggdXAgdG8KICAqIHRocmVlIG1hdGNoIGNvbXBhcmF0b3JzLiBUaW1lciAjMCBpcyB1c2VkIGhlcmUgaW4gZnJlZS1ydW5uaW5nIG1vZGUgYXMKICAqIHRoZSBjbG9jayBzb3VyY2UsIGFuZCBtYXRjaCBjb21wYXJhdG9yICMxIHVzZWQgYXMgY2xvY2sgZXZlbnQgZGV2aWNlLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2FjcHVjbG9jay1hcm0xMS5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYWNwdWNsb2NrLWFybTExLmMKaW5kZXggN2ZmYmQ5OC4uODA1ZDRlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYWNwdWNsb2NrLWFybTExLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYWNwdWNsb2NrLWFybTExLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCQl9CiAJfQogCi0JLyogU2V0IHdhaXQgc3RhdGVzIGZvciBDUFUgaW5iZXR3ZWVuIGZyZXF1ZW5jeSBjaGFuZ2VzICovCisJLyogU2V0IHdhaXQgc3RhdGVzIGZvciBDUFUgYmV0d2VlbiBmcmVxdWVuY3kgY2hhbmdlcyAqLwogCXJlZ19jbGtjdGwgPSByZWFkbChBMTFTX0NMS19DTlRMX0FERFIpOwogCXJlZ19jbGtjdGwgfD0gKDEwMCA8PCAxNik7IC8qIHNldCBXVF9TVF9DTlQgKi8KIAl3cml0ZWwocmVnX2Nsa2N0bCwgQTExU19DTEtfQ05UTF9BRERSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYwppbmRleCA3ZjU2ODYxLi42YTk2OTExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jCkBAIC0xNjAsMTAgKzE2MCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBxc2Q4eDUwX2luaXRfbW1jKHZvaWQpCiB7Ci0JaWYgKG1hY2hpbmVfaXNfcXNkOHg1MF9mZmEoKSB8fCBtYWNoaW5lX2lzX3FzZDh4NTBhX2ZmYSgpKQotCQl2cmVnX21tYyA9IHZyZWdfZ2V0KE5VTEwsICJncDYiKTsKLQllbHNlCi0JCXZyZWdfbW1jID0gdnJlZ19nZXQoTlVMTCwgImdwNSIpOworCXZyZWdfbW1jID0gdnJlZ19nZXQoTlVMTCwgImdwNSIpOwogCiAJaWYgKElTX0VSUih2cmVnX21tYykpIHsKIAkJcHJfZXJyKCJ2cmVnIGdldCBmb3IgdnJlZ19tbWMgZmFpbGVkICglbGQpXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vc2NtLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9zY20uYwppbmRleCBjZmE4MDhkLi4yMzJmOTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9zY20uYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9zY20uYwpAQCAtNDYsNyArNDYsNyBAQAogICogQGlkOiBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkCiAgKiBAYnVmOiBidWZmZXIgcmV0dXJuZWQgZnJvbSBzY21fZ2V0X2NvbW1hbmRfYnVmZmVyKCkKICAqCi0gKiBBbiBTQ00gY29tbWFuZCBpcyBsYXllZCBvdXQgaW4gbWVtb3J5IGFzIGZvbGxvd3M6CisgKiBBbiBTQ00gY29tbWFuZCBpcyBsYWlkIG91dCBpbiBtZW1vcnkgYXMgZm9sbG93czoKICAqCiAgKgktLS0tLS0tLS0tLS0tLS0tLS0tIDwtLS0gc3RydWN0IHNjbV9jb21tYW5kCiAgKgl8IGNvbW1hbmQgaGVhZGVyICB8CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYwppbmRleCA1NmY5MjBjLi4zOGI5NWU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCiAJLyogVXNlIGV4aXN0aW5nIGNsb2NrX2V2ZW50IGZvciBjcHUgMCAqLwogCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJd3JpdGVsKERHVF9DTEtfQ1RMX0RJVl80LCBNU01fVE1SX0JBU0UgKyBER1RfQ0xLX0NUTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtdnByMjAwLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXZwcjIwMC5jCmluZGV4IDJjZjM5MGYuLjQ3YTY5Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtdnByMjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYwpAQCAtMjU3LDExICsyNTcsMTYgQEAKIAkud29ya2Fyb3VuZAk9IEZMU19VU0IyX1dPUktBUk9VTkRfRU5HQ00wOTE1MiwKIH07CiAKK3N0YXRpYyBpbnQgdnByMjAwX3VzYmhfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBteDM1X2luaXRpYWxpemVfdXNiX2h3KHBkZXYtPmlkLAorCQkJTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfCBNWENfRUhDSV9JTlRFUk5BTF9QSFkpOworfQorCiAvKiBVU0IgSE9TVCBjb25maWcgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JfaG9zdF9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkucG9ydHNjCQk9IE1YQ19FSENJX01PREVfU0VSSUFMLAotCS5mbGFncwkJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8Ci0JCQkgIE1YQ19FSENJX0lOVEVSTkFMX1BIWSwKKwkuaW5pdCA9IHZwcjIwMF91c2JoX2luaXQsCisJLnBvcnRzYyA9IE1YQ19FSENJX01PREVfU0VSSUFMLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1M19sb2NvLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYwppbmRleCAxMGExYmVhLi42MjA2YjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJLndha2V1cAkJPSB3YWtlLAkJCQkJXAogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbG9jb19idXR0b25zW10gX19pbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbG9jb19idXR0b25zW10gPSB7CiAJR1BJT19CVVRUT04oTVg1M19MT0NPX1BPV0VSLCBLRVlfUE9XRVIsIDEsICJwb3dlciIsIDApLAogCUdQSU9fQlVUVE9OKE1YNTNfTE9DT19VSTEsIEtFWV9WT0xVTUVVUCwgMSwgInZvbHVtZS11cCIsIDApLAogCUdQSU9fQlVUVE9OKE1YNTNfTE9DT19VSTIsIEtFWV9WT0xVTUVET1dOLCAxLCAidm9sdW1lLWRvd24iLCAwKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYwppbmRleCAxYWQ5N2ZlLi41ZGNjNTlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCkBAIC0yOTUsMTEgKzI5NSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZGlmZiwgcGFyZW50X3JhdGUsIGNhbGNfcmF0ZTsJCQlcCiAJaW50IGk7CQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwkJCVwKIAlkaXZfbWF4ID0gQk1fQ0xLQ1RSTF8jI2RyIyNfRElWID4+IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJXAogCWJtX2J1c3kgPSBCTV9DTEtDVFJMXyMjZHIjI19CVVNZOwkJCQlcCiAJCQkJCQkJCQlcCiAJaWYgKGNsay0+cGFyZW50ID09ICZyZWZfeHRhbF9jbGspIHsJCQkJXAorCQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQlcCiAJCWRpdiA9IERJVl9ST1VORF9VUChwYXJlbnRfcmF0ZSwgcmF0ZSk7CQkJXAogCQlpZiAoY2xrID09ICZjcHVfY2xrKSB7CQkJCQlcCiAJCQlkaXZfbWF4ID0gQk1fQ0xLQ1RSTF9DUFVfRElWX1hUQUwgPj4JCVwKQEAgLTMwOSw2ICszMDksMTEgQEAKIAkJaWYgKGRpdiA9PSAwIHx8IGRpdiA+IGRpdl9tYXgpCQkJCVwKIAkJCXJldHVybiAtRUlOVkFMOwkJCQkJXAogCX0gZWxzZSB7CQkJCQkJCVwKKwkJLyoJCQkJCQkJXAorCQkgKiBoYWNrIGFsZXJ0OiB0aGlzIGJsb2NrIG1vZGlmaWVzIGNsay0+cGFyZW50LCB0b28sCVwKKwkJICogc28gdGhlIGJhc2UgdG8gdXNlIGl0IHRoZSBncmFuZCBwYXJlbnQuCQlcCisJCSAqLwkJCQkJCQlcCisJCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50LT5wYXJlbnQpOwlcCiAJCXJhdGUgPj49IFBBUkVOVF9SQVRFX1NISUZUOwkJCQlcCiAJCXBhcmVudF9yYXRlID4+PSBQQVJFTlRfUkFURV9TSElGVDsJCQlcCiAJCWRpZmYgPSBwYXJlbnRfcmF0ZTsJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYW1zLWRlbHRhLWZpcS1oYW5kbGVyLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Ftcy1kZWx0YS1maXEtaGFuZGxlci5TCmluZGV4IDkyN2Q1YTEuLmMxYzVmYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYW1zLWRlbHRhLWZpcS1oYW5kbGVyLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9hbXMtZGVsdGEtZmlxLWhhbmRsZXIuUwpAQCAtNzksNyArNzksNyBAQAogCiAKIC8qCi0gKiBSZWdpc3RlciB1c2VhZ2UKKyAqIFJlZ2lzdGVyIHVzYWdlCiAgKiByOCAgLSB0ZW1wb3JhcnkKICAqIHI5ICAtIHRoZSBkcml2ZXIgYnVmZmVyCiAgKiByMTAgLSB0ZW1wb3JhcnkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IGQ0MWZlMmQuLjBhZDc4MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJc3gxX21tY19pbml0KCk7CiAKIAkvKiB0dXJuIG9uIFVTQiBwb3dlciAqLwotCS8qIHN4MV9zZXR1c2Jwb3dlcigxKTsgY2FudCBkbyBpdCBoZXJlIGJlY2F1c2UgaTJjIGlzIG5vdCByZWFkeSAqLworCS8qIHN4MV9zZXR1c2Jwb3dlcigxKTsgY2FuJ3QgZG8gaXQgaGVyZSBiZWNhdXNlIGkyYyBpcyBub3QgcmVhZHkgKi8KIAlncGlvX3JlcXVlc3QoMSwgIkFfSVJEQV9PRkYiKTsKIAlncGlvX3JlcXVlc3QoMTEsICJBX1NXSVRDSCIpOwogCWdwaW9fcmVxdWVzdCgxNSwgIkFfVVNCX09OIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCmluZGV4IGIwZjRjMjMuLjM2ZjI2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCkBAIC0yODEsNyArMjgxLDcgQEAKICAqIENsYWltaW5nIEdQSU9zLCBhbmQgc2V0dGluZyB0aGVpciBkaXJlY3Rpb24gYW5kIGluaXRpYWwgdmFsdWVzLCBpcyB0aGUKICAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXZpY2UgZHJpdmVycy4gIFNvIGlzIHJlc3BvbmRpbmcgdG8gcHJvYmUoKS4KICAqCi0gKiBCb2FyZC1zcGVjaWZpYyBrbm93bGVnZSBsaWtlIGNyZWF0aW5nIGRldmljZXMgb3IgcGluIHNldHVwIGlzIHRvIGJlCisgKiBCb2FyZC1zcGVjaWZpYyBrbm93bGVkZ2UgbGlrZSBjcmVhdGluZyBkZXZpY2VzIG9yIHBpbiBzZXR1cCBpcyB0byBiZQogICoga2VwdCBvdXQgb2YgZHJpdmVycyBhcyBtdWNoIGFzIHBvc3NpYmxlLiAgSW4gcGFydGljdWxhciwgcGluIHNldHVwCiAgKiBtYXkgYmUgaGFuZGxlZCBieSB0aGUgYm9vdCBsb2FkZXIsIGFuZCBkcml2ZXJzIHNob3VsZCBleHBlY3QgaXQgd2lsbAogICogbm9ybWFsbHkgaGF2ZSBiZWVuIGRvbmUgYnkgdGhlIHRpbWUgdGhleSdyZSBwcm9iZWQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9hbXMtZGVsdGEtZmlxLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9hbXMtZGVsdGEtZmlxLmgKaW5kZXggN2EyZGYyOS4uMjNlZWQwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvYW1zLWRlbHRhLWZpcS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2Ftcy1kZWx0YS1maXEuaApAQCAtMzEsNyArMzEsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBUaGVzZSBhcmUgdGhlIG9mZnNldHMgZnJvbSB0aGUgYmVnaW5pbmcgb2YgdGhlIGZpcV9idWZmZXIuIFRoZXkgYXJlIHB1dCBoZXJlCisgKiBUaGVzZSBhcmUgdGhlIG9mZnNldHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXFfYnVmZmVyLiBUaGV5IGFyZSBwdXQgaGVyZQogICogc2luY2UgdGhlIGJ1ZmZlciBhbmQgaGVhZGVyIG5lZWQgdG8gYmUgYWNjZXNzZWQgYnkgZHJpdmVycyBzZXJ2aWNpbmcgZGV2aWNlcwogICogd2hpY2ggZ2VuZXJhdGUgR1BJTyBpbnRlcnJ1cHRzIC0gZS5nLiBrZXlib2FyZCwgbW9kZW0sIGhvb2sgc3dpdGNoLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRleCBhNDVjZDY0Li41MTJiMTUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTY4LDcgKzY4LDcgQEAKIG9iai0kKENPTkZJR19PTUFQX1NNQVJUUkVGTEVYX0NMQVNTMykJKz0gc21hcnRyZWZsZXgtY2xhc3MzLm8KIAogQUZMQUdTX3NsZWVwMjR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY2Ci1BRkxBR1Nfc2xlZXAzNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQorQUZMQUdTX3NsZWVwMzR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY3LWEkKHBsdXNfc2VjKQogCiBpZmVxICgkKENPTkZJR19QTV9WRVJCT1NFKSx5KQogQ0ZMQUdTX3BtX2J1cy5vCQkJCSs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYwppbmRleCA1ZjhhMmZkLi4zNGNmOTgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCkBAIC02OTYsNyArNjk2LDcgQEAKIAlpZ2VwMl9pbml0X3Ntc2M5MTF4KCk7CiAKIAkvKgotCSAqIFdMQU4tQlQgY29tYm8gbW9kdWxlIGZyb20gTXVSYXRhIHdpY2ggaGFzIGEgTWFydmVsbCBXTEFOCisJICogV0xBTi1CVCBjb21ibyBtb2R1bGUgZnJvbSBNdVJhdGEgd2hpY2ggaGFzIGEgTWFydmVsbCBXTEFOCiAJICogKDg4Vzg2ODYpICsgQ1NSIEJsdWV0b290aCBjaGlwc2V0LiBVc2VzIFNESU8gaW50ZXJmYWNlLgogCSAqLwogCWlnZXAyX3dsYW5fYnRfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAzMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAzMC5jCmluZGV4IGIxMGRiMGUuLjJjZjg2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDMwLmMKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCWlnZXAzX2xlZHNfaW5pdCgpOwogCiAJLyoKLQkgKiBXTEFOLUJUIGNvbWJvIG1vZHVsZSBmcm9tIE11UmF0YSB3aWNoIGhhcyBhIE1hcnZlbGwgV0xBTgorCSAqIFdMQU4tQlQgY29tYm8gbW9kdWxlIGZyb20gTXVSYXRhIHdoaWNoIGhhcyBhIE1hcnZlbGwgV0xBTgogCSAqICg4OFc4Njg2KSArIENTUiBCbHVldG9vdGggY2hpcHNldC4gVXNlcyBTRElPIGludGVyZmFjZS4KIAkgKi8KIAlpZ2VwM193aWZpX2J0X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKaW5kZXggZTk2NDg5NS4uZjhiYTIwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKQEAgLTE0MSwxNCArMTQxLDE5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zeHh4KCk7Ci0Jcng1MV92aWRlb19tZW1faW5pdCgpOwogCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfcmVzZXJ2ZSh2b2lkKQoreworCXJ4NTFfdmlkZW9fbWVtX2luaXQoKTsKKwlvbWFwX3Jlc2VydmUoKTsKK30KKwogTUFDSElORV9TVEFSVChOT0tJQV9SWDUxLCAiTm9raWEgUlgtNTEgYm9hcmQiKQogCS8qIE1haW50YWluZXI6IExhdXJpIExldWtrdW5lbiA8bGF1cmkubGV1a2t1bmVuQG5va2lhLmNvbT4gKi8KIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAorCS5yZXNlcnZlCT0gcng1MV9yZXNlcnZlLAogCS5tYXBfaW8JCT0gcng1MV9tYXBfaW8sCiAJLmluaXRfZWFybHkJPSByeDUxX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDM0eHhfZHBsbDNtMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKaW5kZXggYjJiMWUzNy4uZDZlMzRkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogCQkJCSAgc2RyY19jczAtPnJmcl9jdHJsLCBzZHJjX2NzMC0+YWN0aW1fY3RybGEsCiAJCQkJICBzZHJjX2NzMC0+YWN0aW1fY3RybGIsIHNkcmNfY3MwLT5tciwKIAkJCQkgIDAsIDAsIDAsIDApOworCWNsay0+cmF0ZSA9IHJhdGU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwppbmRleCAyNzY5OTJkLi44Yzk2NTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCkBAIC0zMTE2LDE0ICszMTE2LDkgQEAKIAlDTEsoTlVMTCwJImRzcF9mY2siLAkJCSZkc3BfZmNrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBkc3NfZHNzIiwJInN5c19jbGsiLAkJCSZkc3Nfc3lzX2NsaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwZHNzX2RzcyIsCSJ0dl9jbGsiLAkJCSZkc3NfdHZfY2xrLAlDS180NDNYKSwKLQlDTEsoIm9tYXBkc3NfZHNzIiwJImRzc19jbGsiLAkJCSZkc3NfZHNzX2NsaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwZHNzX2RzcyIsCSJ2aWRlb19jbGsiLAkJCSZkc3NfNDhtaHpfY2xrLAlDS180NDNYKSwKLQlDTEsoIm9tYXBkc3NfZHNzIiwJImZjayIsCQkJCSZkc3NfZmNrLAlDS180NDNYKSwKLQkvKgotCSAqIE9uIE9NQVA0LCBEU1MgaWNrIGlzIGEgZHVtbXkgY2xvY2s7IHRoaXMgaXMgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5Ci0JICogd2l0aCBPTUFQMi8zLgotCSAqLwotCUNMSygib21hcGRzc19kc3MiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBkc3NfZHNzIiwJImZjayIsCQkJCSZkc3NfZHNzX2NsaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwZHNzX2RzcyIsCSJpY2siLAkJCQkmZHNzX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJlZnVzZV9jdHJsX2N1c3RfZmNrIiwJCSZlZnVzZV9jdHJsX2N1c3RfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImVtaWYxX2ZjayIsCQkJJmVtaWYxX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJlbWlmMl9mY2siLAkJCSZlbWlmMl9mY2ssCUNLXzQ0M1gpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IGFiODc4NTQuLjZjYjZjMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogICogY2xrZG1faW5pdCAtIHNldCB1cCB0aGUgY2xvY2tkb21haW4gbGF5ZXIKICAqIEBjbGtkbXM6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zIHRvIHJlZ2lzdGVyCiAgKiBAaW5pdF9hdXRvZGVwczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBhdXRvZGVwcyB0byByZWdpc3RlcgotICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjZmljIGltcGxlbWVudGF0aW9ucworICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMKICAqCiAgKiBTZXQgdXAgaW50ZXJuYWwgc3RhdGUuICBJZiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zCiAgKiBAY2xrZG1zIHdhcyBzdXBwbGllZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIGNsb2NrZG9tYWlucywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaAppbmRleCA4NWIzZGNlLi41ODIzNTg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oCkBAIC0xMjUsNyArMTI1LDcgQEAKIH07CiAKIC8qKgotICogc3RydWN0IGNsa2RtX29wcyAtIEFyY2ggc3BlY2ZpYyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMKKyAqIHN0cnVjdCBjbGtkbV9vcHMgLSBBcmNoIHNwZWNpZmljIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucwogICogQGNsa2RtX2FkZF93a2RlcDogQWRkIGEgd2FrZXVwIGRlcGVuZGVuY3kgYmV0d2VlbiBjbGsgZG9tYWlucwogICogQGNsa2RtX2RlbF93a2RlcDogRGVsZXRlIGEgd2FrZXVwIGRlcGVuZGVuY3kgYmV0d2VlbiBjbGsgZG9tYWlucwogICogQGNsa2RtX3JlYWRfd2tkZXA6IFJlYWQgd2FrZXVwIGRlcGVuZGVuY3kgc3RhdGUgYmV0d2VlbiBjbGsgZG9tYWlucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jCmluZGV4IDlkMGRlYzguLjM4ODMwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCXUzMiBwZXJfY21fY2xrc2VsOwogCXUzMiBlbXVfY21fY2xrc2VsOwogCXUzMiBlbXVfY21fY2xrc3RjdHJsOworCXUzMiBwbGxfY21fYXV0b2lkbGU7CiAJdTMyIHBsbF9jbV9hdXRvaWRsZTI7CiAJdTMyIHBsbF9jbV9jbGtzZWw0OwogCXUzMiBwbGxfY21fY2xrc2VsNTsKQEAgLTMxOSw2ICszMjAsMTUgQEAKIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpOwogCWNtX2NvbnRleHQuZW11X2NtX2Nsa3N0Y3RybCA9CiAJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9FTVVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCS8qCisJICogQXMgcGVyIGVycmF0dW0gaTY3MSwgUk9NIGNvZGUgZG9lcyBub3QgcmVzcGVjdCB0aGUgUEVSIERQTEwKKwkgKiBwcm9ncmFtbWluZyBzY2hlbWUgaWYgQ01fQVVUT0lETEVfUExMLkFVVE9fUEVSSVBIX0RQTEwgPT0gMS4KKwkgKiBJbiB0aGlzIGNhc2UsIGV2ZW4gdGhvdWdoIHRoaXMgcmVnaXN0ZXIgaGFzIGJlZW4gc2F2ZWQgaW4KKwkgKiBzY3JhdGNocGFkIGNvbnRlbnRzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgQVVUT19QRVJJUEhfRFBMTAorCSAqIGJ5IG91cnNlbHZlcy4gU28sIHdlIG5lZWQgdG8gc2F2ZSBpdCBhbnl3YXkuCisJICovCisJY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQVVUT0lETEUpOwogCWNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiA9CiAJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9BVVRPSURMRTIpOwogCWNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQgPQpAQCAtNDQxLDYgKzQ1MSwxMyBAQAogCQkJICAgICAgIENNX0NMS1NFTDEpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9FTVVfTU9ELAogCQkJICAgICAgIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJLyoKKwkgKiBBcyBwZXIgZXJyYXR1bSBpNjcxLCBST00gY29kZSBkb2VzIG5vdCByZXNwZWN0IHRoZSBQRVIgRFBMTAorCSAqIHByb2dyYW1taW5nIHNjaGVtZSBpZiBDTV9BVVRPSURMRV9QTEwuQVVUT19QRVJJUEhfRFBMTCA9PSAxLgorCSAqIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byByZXN0b3JlIEFVVE9fUEVSSVBIX0RQTEwgYnkgb3Vyc2VsdmVzLgorCSAqLworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUsIFBMTF9NT0QsCisJCQkgICAgICAgQ01fQVVUT0lETEUpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUyLCBQTExfTU9ELAogCQkJICAgICAgIENNX0FVVE9JRExFMik7CiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBsbF9jbV9jbGtzZWw0LCBQTExfTU9ELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwppbmRleCA2OTUyNzk0Li5kYTUzYmEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwpAQCAtMzE2LDggKzMxNiwxNCBAQAogCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBDTV9DTEtTRUwpOwogCXByY21fYmxvY2tfY29udGVudHMuY21fY2xrZW5fcGxsID0KIAkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisJLyoKKwkgKiBBcyBwZXIgZXJyYXR1bSBpNjcxLCBST00gY29kZSBkb2VzIG5vdCByZXNwZWN0IHRoZSBQRVIgRFBMTAorCSAqIHByb2dyYW1taW5nIHNjaGVtZSBpZiBDTV9BVVRPSURMRV9QTEwuLkFVVE9fUEVSSVBIX0RQTEwgPT0gMS4KKwkgKiBUaGVuLCAgaW4gYW55Y2FzZSwgY2xlYXIgdGhlc2UgYml0cyB0byBhdm9pZCBleHRyYSBsYXRlbmNpZXMuCisJICovCiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9hdXRvaWRsZV9wbGwgPQotCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCk7CisJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQVVUT0lETEUpICYKKwkJCX5PTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0s7CiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9jbGtzZWwxX3BsbCA9CiAJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpOwogCXByY21fYmxvY2tfY29udGVudHMuY21fY2xrc2VsMl9wbGwgPQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCmluZGV4IGE0NGM1MjMuLjFjMjQwZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKQEAgLTI5Nyw4ICsyOTcsOCBAQAogCiAvKioKICAqIG9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcygpIC0gVXBkYXRlIHRoZSBjcHVpZGxlIHN0YXRlcwotICogQG1wdV9kZWVwZXN0X3N0YXRlOglFbmFibGUgc3RhdGVzIHVwdG8gYW5kIGluY2x1ZGluZyB0aGlzIGZvciBtcHUgZG9tYWluCi0gKiBAY29yZV9kZWVwZXN0X3N0YXRlOglFbmFibGUgc3RhdGVzIHVwdG8gYW5kIGluY2x1ZGluZyB0aGlzIGZvciBjb3JlIGRvbWFpbgorICogQG1wdV9kZWVwZXN0X3N0YXRlOglFbmFibGUgc3RhdGVzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhpcyBmb3IgbXB1IGRvbWFpbgorICogQGNvcmVfZGVlcGVzdF9zdGF0ZToJRW5hYmxlIHN0YXRlcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoaXMgZm9yIGNvcmUgZG9tYWluCiAgKgogICogVGhpcyBnb2VzIHRocm91Z2ggdGhlIGxpc3Qgb2Ygc3RhdGVzIGF2YWlsYWJsZSBhbmQgZW5hYmxlcyBhbmQgZGlzYWJsZXMgdGhlCiAgKiB2YWxpZGl0eSBvZiBDIHN0YXRlcyBiYXNlZCBvbiBkZWVwZXN0IHN0YXRlIHRoYXQgY2FuIGJlIGFjaGlldmVkIGZvciB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggODRkMWI3My4uN2I4NTU4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTI1Myw3ICsyNTMsNyBAQAogCQkJQVJSQVlfU0laRShvbWFwX2tleWJvYXJkX2xhdGVuY3kpLCAwKTsKIAogCWlmIChJU19FUlIob2QpKSB7Ci0JCVdBUk4oMSwgIkNhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKKwkJV0FSTigxLCAiQ2FuJ3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKIAkJCQkJCW5hbWUsIG9oLT5uYW1lKTsKIAkJcmV0dXJuIFBUUl9FUlIob2QpOwogCX0KQEAgLTM3Myw3ICszNzMsNyBAQAogCW9kID0gb21hcF9kZXZpY2VfYnVpbGQobmFtZSwgc3BpX251bSwgb2gsIHBkYXRhLAogCQkJCXNpemVvZigqcGRhdGEpLAlvbWFwX21jc3BpX2xhdGVuY3ksCiAJCQkJQVJSQVlfU0laRShvbWFwX21jc3BpX2xhdGVuY3kpLCAwKTsKLQlXQVJOKElTX0VSUihvZCksICJDYW50IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolc1xuIiwKKwlXQVJOKElTX0VSUihvZCksICJDYW4ndCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXNcbiIsCiAJCQkJbmFtZSwgb2gtPm5hbWUpOwogCWtmcmVlKHBkYXRhKTsKIAlyZXR1cm4gMDsKQEAgLTcyNSw3ICs3MjUsNyBAQAogCW9kID0gb21hcF9kZXZpY2VfYnVpbGQoZGV2X25hbWUsIGlkLCBvaCwgTlVMTCwgMCwKIAkJCQlvbWFwX3dkdF9sYXRlbmN5LAogCQkJCUFSUkFZX1NJWkUob21hcF93ZHRfbGF0ZW5jeSksIDApOwotCVdBUk4oSVNfRVJSKG9kKSwgIkNhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKKwlXQVJOKElTX0VSUihvZCksICJDYW4ndCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAogCQkJCWRldl9uYW1lLCBvaC0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwppbmRleCAzNDkyMmIyLi5jOWZmMGU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCQkJb21hcDJfZG1hX2xhdGVuY3ksIEFSUkFZX1NJWkUob21hcDJfZG1hX2xhdGVuY3kpLCAwKTsKIAlrZnJlZShwKTsKIAlpZiAoSVNfRVJSKG9kKSkgewotCQlwcl9lcnIoIiVzOiBDYW50IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolcy5cbiIsCisJCXByX2VycigiJXM6IENhbid0IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolcy5cbiIsCiAJCQlfX2Z1bmNfXywgbmFtZSwgb2gtPm5hbWUpOwogCQlyZXR1cm4gUFRSX0VSUihvZCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwaW8uYwppbmRleCA0MTNkZTE4Li45NTI5ODQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwaW8uYwpAQCAtODIsNyArODIsNyBAQAogCWtmcmVlKHBkYXRhKTsKIAogCWlmIChJU19FUlIob2QpKSB7Ci0JCVdBUk4oMSwgIkNhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKKwkJV0FSTigxLCAiQ2FuJ3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKIAkJCQkJbmFtZSwgb2gtPm5hbWUpOwogCQlyZXR1cm4gUFRSX0VSUihvZCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCmluZGV4IDEzN2UxYTUuLmIyZjMwYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKQEAgLTQ2NSw3ICs0NjUsNyBAQAogCW9kID0gb21hcF9kZXZpY2VfYnVpbGQobmFtZSwgY3RybF9uciAtIDEsIG9oLCBtbWNfZGF0YSwKIAkJc2l6ZW9mKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhKSwgb2hsLCBvaGxfY250LCBmYWxzZSk7CiAJaWYgKElTX0VSUihvZCkpIHsKLQkJV0FSTigxLCAiQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLCBuYW1lLCBvaC0+bmFtZSk7CisJCVdBUk4oMSwgIkNhbid0IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolcy5cbiIsIG5hbWUsIG9oLT5uYW1lKTsKIAkJa2ZyZWUobW1jX2RhdGEtPnNsb3RzWzBdLm5hbWUpOwogCQlnb3RvIGRvbmU7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCmluZGV4IDU2NWI5MDYuLjRhNmVmNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCQkJCUFSUkFZX1NJWkUob21hcDJfbWNic3BfbGF0ZW5jeSksIGZhbHNlKTsKIAlrZnJlZShwZGF0YSk7CiAJaWYgKElTX0VSUihvZCkpICB7Ci0JCXByX2VycigiJXM6IENhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwgX19mdW5jX18sCisJCXByX2VycigiJXM6IENhbid0IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolcy5cbiIsIF9fZnVuY19fLAogCQkJCQluYW1lLCBvaC0+bmFtZSk7CiAJCXJldHVybiBQVFJfRVJSKG9kKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCBiYjA0M2NiLi5hNGFiMWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTUxOCw3ICs1MTgsNyBAQAogCQkJc2VxX3ByaW50ZihzLCAiLyogJXMgKi9cbiIsIG0tPm11eG5hbWVzW21vZGVdKTsKIAogCQkvKgotCQkgKiBYWFg6IE1pZ2h0IGJlIHJldmlzaXRlZCB0byBzdXBwb3J0IGRpZmZlcmVuY2VzIGFjY3Jvc3MKKwkJICogWFhYOiBNaWdodCBiZSByZXZpc2l0ZWQgdG8gc3VwcG9ydCBkaWZmZXJlbmNlcyBhY3Jvc3MKIAkJICogc2FtZSBPTUFQIGdlbmVyYXRpb24uCiAJCSAqLwogCQlzZXFfcHJpbnRmKHMsICJPTUFQJWRfTVVYKCVzLCAiLCBvbWFwX2dlbiwgbTBfZGVmKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MjQzMC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmgKaW5kZXggYWRiZWEwZC4uOWZkOTMxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAqIGFic29sdXRlIGFkZHJlc3Nlcy4gIFRoZSBuYW1lIGluIHRoZSBtYWNybyBpcyB0aGUgbW9kZS0wIG5hbWUgb2YKICAqIHRoZSBwaW4uICBOT1RFOiBUaGVzZSByZWdpc3RlcnMgYXJlIDgtYml0cyB3aWRlLgogICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBkZWZpbmVzIHVzZSBTRE1NQyBpbnN0ZWFkIG9mIE1NQyBmb3IgY29tcGFiaWxpdHkKKyAqIE5vdGUgdGhhdCB0aGVzZSBkZWZpbmVzIHVzZSBTRE1NQyBpbnN0ZWFkIG9mIE1NQyBmb3IgY29tcGF0aWJpbGl0eQogICogd2l0aCBzaWduYWwgbmFtZXMgdXNlZCBpbiAzNjMwLgogICovCiAjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0NMS19PRkZTRVQJCTB4MDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKaW5kZXggOGViM2NlMS4uYzRkMGFlODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKQEAgLTE2MzksNiArMTYzOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDJ4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MnhfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNjY5LDYgKzE2NzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQyeF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDJ4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTY5OSw2ICsxNzAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE3MjksNiArMTczMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDJ4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MnhfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNzgyLDcgKzE3ODYsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZG1hX3N5c3RlbV9hZGRyc1tdID0gewogCXsKIAkJLnBhX3N0YXJ0CT0gMHg0ODA1NjAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkucGFfZW5kCQk9IDB4NDgwNTZmZmYsCiAJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwppbmRleCBhODYwZmI1Li45NjgyZGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCkBAIC0xNTU5LDcgKzE1NTksNyBAQAogCQkJICogSTJDSFMgSVAncyBkbyBub3QgZm9sbG93IHRoZSB1c3VhbCBwYXR0ZXJuLgogCQkJICogcHJjbV9yZWdfaWQgYWxvbmUgY2Fubm90IGJlIHVzZWQgdG8gcHJvZ3JhbQogCQkJICogdGhlIGljbGsgYW5kIGZjbGsuIE5lZWRzIHRvIGJlIGhhbmRsZWQgdXNpbmcKLQkJCSAqIGFkZGl0b25hbCBmbGFncyB3aGVuIGNsayBoYW5kbGluZyBpcyBtb3ZlZAorCQkJICogYWRkaXRpb25hbCBmbGFncyB3aGVuIGNsayBoYW5kbGluZyBpcyBtb3ZlZAogCQkJICogdG8gaHdtb2QgZnJhbWV3b3JrLgogCQkJICovCiAJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKQEAgLTE3NDIsNiArMTc0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNzcyLDYgKzE3NzMsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTgwMiw2ICsxODA0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0M3hfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzeF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE4MzIsNiArMTgzNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xODYyLDYgKzE4NjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzVfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW81IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvNV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW81X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvNV9mY2siLApAQCAtMTkxNSw3ICsxOTIwLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX2RtYV9zeXN0ZW1fYWRkcnNbXSA9IHsKIAl7CiAJCS5wYV9zdGFydAk9IDB4NDgwNTYwMDAsCi0JCS5wYV9lbmQJCT0gMHg0YTA1NjBmZiwKKwkJLnBhX2VuZAkJPSAweDQ4MDU2ZmZmLAogCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCiAJfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKaW5kZXggYjk4ZTJkZmMuLjkwOWE4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKQEAgLTIxNDEsNiArMjE0MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW8xX2ljayIsCkBAIC0yMTc3LDYgKzIxNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvMl9pY2siLApAQCAtMjIxMyw2ICsyMjE1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzNfaWNrIiwKQEAgLTIyNDksNiArMjI1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW80X2ljayIsCkBAIC0yMjg1LDYgKzIyODksNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzVfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW81IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvNV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW81X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvNV9pY2siLApAQCAtMjMyMSw2ICsyMzI2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW82X2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvNiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzZfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzZfaWNrIiwKQEAgLTIzODYsNyArMjM5Miw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CiAJewogCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAotCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5wYV9lbmQJCT0gMHg0ODA1NmZmZiwKIAkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IDNlODhkZDMuLmFiYzU0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTg4NSw3ICs4ODUsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZG1hX3N5c3RlbV9hZGRyc1tdID0gewogCXsKIAkJLnBhX3N0YXJ0CT0gMHg0YTA1NjAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkucGFfZW5kCQk9IDB4NGEwNTZmZmYsCiAJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwppbmRleCA1ZjJkYTc1Ni4uNDMyMWU3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX3NteC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwpAQCAtMTk2LDExICsxOTYsMTEgQEAKIAkJLyogTm8gdGltZW91dCBlcnJvciBmb3IgZGVidWcgc291cmNlcyAqLwogCX0KIAotCWJhc2UgPSAoKGwzLT5ydCkgKyAoKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKSkpOwotCiAJLyogaWRlbnRpZnkgdGhlIGVycm9yIHNvdXJjZSAqLwogCWZvciAoZXJyX3NvdXJjZSA9IDA7ICEoc3RhdHVzICYgKDEgPDwgZXJyX3NvdXJjZSkpOyBlcnJfc291cmNlKyspCiAJCQkJCQkJCQk7CisKKwliYXNlID0gbDMtPnJ0ICsgKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKTsKIAllcnJvciA9IG9tYXAzX2wzX3JlYWRsbChiYXNlLCBMM19FUlJPUl9MT0cpOwogCiAJaWYgKGVycm9yKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggZTJlNjA1Zi4uMDVmNmFiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtMTEyLDEyICsxMTIsMTIgQEAKIAkJZWxzZQogCQkJLyoKIAkJCSAqIEVuYWJsZSBWQlVTIFZhbGlkLCBBVmFsaWQgYW5kIElERElHCi0JCQkgKiBoaWdoIGltcGVkZW5jZQorCQkJICogaGlnaCBpbXBlZGFuY2UKIAkJCSAqLwogCQkJX19yYXdfd3JpdGVsKElERElHIHwgQVZBTElEIHwgVkJVU1ZBTElELAogCQkJCQkJY3RybF9iYXNlICsgVVNCT1RHSFNfQ09OVFJPTCk7CiAJfSBlbHNlIHsKLQkJLyogRW5hYmxlIHNlc3Npb24gRU5EIGFuZCBJRElHIHRvIGhpZ2ggaW1wZWRlbmNlLiAqLworCQkvKiBFbmFibGUgc2Vzc2lvbiBFTkQgYW5kIElESUcgdG8gaGlnaCBpbXBlZGFuY2UuICovCiAJCV9fcmF3X3dyaXRlbChTRVNTRU5EIHwgSURESUcsIGN0cmxfYmFzZSArCiAJCQkJCVVTQk9UR0hTX0NPTlRST0wpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYwppbmRleCAwYThlNzRlLi4wN2Q2MTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfdHdsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3R3bC5jCkBAIC0zMDgsNyArMzA4LDcgQEAKICAqIFN0cmF0ZWd5IFNvZnR3YXJlIFNjYWxpbmcgTW9kZSAoRU5BQkxFX1ZNT0RFPTApLCBmb3Igc2V0dGluZyB0aGUgdm9sdGFnZXMsCiAgKiBpbiB0aG9zZSBzY2VuYXJpb3MgdGhpcyBiaXQgaXMgdG8gYmUgY2xlYXJlZCAoZW5hYmxlID0gZmFsc2UpLgogICoKLSAqIFJldHVybnMgMCBvbiBzdWNlc3MsIGVycm9yIGlzIHJldHVybmVkIGlmIEkyQyByZWFkL3dyaXRlIGZhaWxzLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIGlzIHJldHVybmVkIGlmIEkyQyByZWFkL3dyaXRlIGZhaWxzLgogICovCiBpbnQgX19pbml0IG9tYXAzX3R3bF9zZXRfc3JfYml0KGJvb2wgZW5hYmxlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCmluZGV4IDMwYWYzMzUuLjQ5NDg2ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKQEAgLTg5LDYgKzg5LDcgQEAKIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJX2luaXRfb21hcF9kZXZpY2UoImwzX21haW5fMSIsICZsM19kZXYpOwogCQlfaW5pdF9vbWFwX2RldmljZSgiZHNwIiwgJmRzcF9kZXYpOworCQlfaW5pdF9vbWFwX2RldmljZSgiaXZhIiwgJml2YV9kZXYpOwogCX0gZWxzZSB7CiAJCV9pbml0X29tYXBfZGV2aWNlKCJsM19tYWluIiwgJmwzX2Rldik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCmluZGV4IDQ5YzY1MTMuLjlhZjA4NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogLyoqCiAgKiBwd3JkbV9pbml0IC0gc2V0IHVwIHRoZSBwb3dlcmRvbWFpbiBsYXllcgogICogQHB3cmRtX2xpc3Q6IGFycmF5IG9mIHN0cnVjdCBwb3dlcmRvbWFpbiBwb2ludGVycyB0byByZWdpc3RlcgotICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjZmljIGltcGxlbWVudGF0aW9ucworICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMKICAqCiAgKiBMb29wIHRocm91Z2ggdGhlIGFycmF5IG9mIHBvd2VyZG9tYWlucyBAcHdyZG1fbGlzdCwgcmVnaXN0ZXJpbmcgYWxsCiAgKiB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgQ1BVLiBJZiBwd3JkbV9saXN0IGlzIHN1cHBsaWVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmgKaW5kZXggMDI3ZjQwYi4uZDIzZDk3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaApAQCAtMTIxLDcgKzEyMSw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBwd3JkbV9vcHMgLSBBcmNoIHNwZWNmaWMgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCisgKiBzdHJ1Y3QgcHdyZG1fb3BzIC0gQXJjaCBzcGVjaWZpYyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMKICAqIEBwd3JkbV9zZXRfbmV4dF9wd3JzdDogU2V0IHRoZSB0YXJnZXQgcG93ZXIgc3RhdGUgZm9yIGEgcGQKICAqIEBwd3JkbV9yZWFkX25leHRfcHdyc3Q6IFJlYWQgdGhlIHRhcmdldCBwb3dlciBzdGF0ZSBzZXQgZm9yIGEgcGQKICAqIEBwd3JkbV9yZWFkX3B3cnN0OiBSZWFkIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIGEgcGQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczN4eHhfZGF0YS5jCmluZGV4IDljOWMxMTMuLjQ2OWE5MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzeHh4X2RhdGEuYwpAQCAtNzIsNyArNzIsNyBAQAogCiAvKgogICogVGhlIFVTQlRMTCBTYXZlLWFuZC1SZXN0b3JlIG1lY2hhbmlzbSBpcyBicm9rZW4gb24KLSAqIDM0MzBzIHVwdG8gRVMzLjAgYW5kIDM2MzBFUzEuMC4gSGVuY2UgdGhpcyBmZWF0dXJlCisgKiAzNDMwcyB1cCB0byBFUzMuMCBhbmQgMzYzMEVTMS4wLiBIZW5jZSB0aGlzIGZlYXR1cmUKICAqIG5lZWRzIHRvIGJlIGRpc2FibGVkIG9uIHRoZXNlIGNoaXBzLgogICogUmVmZXI6IDM0MzAgZXJyYXRhIElEIGk0NTkgYW5kIDM2MzAgZXJyYXRhIElEIGk1NzkKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKaW5kZXggOGY2NzRjOS4uMTNlMjRmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgKiBkcml2ZXIgcmVnaXN0ZXIgYW5kIHNyIGRldmljZSBpbnRpYWxpenRpb24gQVBJJ3MuIE9ubHkgb25lIGNhbGwKICAqIHdpbGwgdWx0aW1hdGVseSBzdWNjZWVkLgogICoKLSAqIEN1cnJlbmx5IHRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGludGVycnJ1cHQgaGFuZGxlciBmb3IgYSBwYXJ0aWN1bGFyIFNSCisgKiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgaW50ZXJycnVwdCBoYW5kbGVyIGZvciBhIHBhcnRpY3VsYXIgU1IKICAqIGlmIHNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgYW5kIGhhcwogICogcmVxdWVzdGVkIGZvciBpbnRlcnJ1cHRzIGFuZCB0aGUgU1IgaW50ZXJydXB0IGxpbmUgaW4gcHJlc2VudC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwppbmRleCBjNmZhY2Y3Li4wYzE1NTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwpAQCAtMTE0LDcgKzExNCw2IEBACiAJc3lzX2Nsa19zcGVlZCAvPSAxMDAwOwogCiAJLyogR2VuZXJpYyB2b2x0YWdlIHBhcmFtZXRlcnMgKi8KLQl2ZGQtPmN1cnJfdm9sdCA9IDEyMDAwMDA7CiAJdmRkLT52b2x0X3NjYWxlID0gdnBfZm9yY2V1cGRhdGVfc2NhbGVfdm9sdGFnZTsKIAl2ZGQtPnZwX2VuYWJsZWQgPSBmYWxzZTsKIApAQCAtODUxLDcgKzg1MCw3IEBACiAgKiBAdm9sdGRtOglwb2ludGVyIHRvIHRoZSBWREQgd2hvc2Ugdm9sdGFnZSBpcyB0byBiZSByZXNldC4KICAqCiAgKiBUaGlzIEFQSSBmaW5kcyBvdXQgdGhlIGNvcnJlY3Qgdm9sdGFnZSB0aGUgdm9sdGFnZSBkb21haW4gaXMgc3VwcG9zZWQKLSAqIHRvIGJlIGF0IGFuZCByZXNldHMgdGhlIHZvbHRhZ2UgdG8gdGhhdCBsZXZlbC4gU2hvdWxkIGJlIHVzZWQgZXhwZWNpYWxseQorICogdG8gYmUgYXQgYW5kIHJlc2V0cyB0aGUgdm9sdGFnZSB0byB0aGF0IGxldmVsLiBTaG91bGQgYmUgdXNlZCBlc3BlY2lhbGx5CiAgKiB3aGlsZSBkaXNhYmxpbmcgYW55IHZvbHRhZ2UgY29tcGVuc2F0aW9uIG1vZHVsZXMuCiAgKi8KIHZvaWQgb21hcF92b2x0YWdlX3Jlc2V0KHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCkBAIC05MTIsNyArOTExLDcgQEAKICAqIFRoaXMgQVBJIHNlYXJjaGVzIG9ubHkgdGhyb3VnaCB0aGUgbm9uLWNvbXBlbnNhdGVkIHZvbHRhZ2VzIGludCB0aGUKICAqIHZvbHRhZ2UgdGFibGUuCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIHZvbHRhZ2UgdGFibGUgZW50cnkgY29ycmVzcG9uZGluZyB0byB2b2x0IG9uCi0gKiBzdWNlc3MuIFJldHVybnMgLUVOT0RBVEEgaWYgbm8gdm9sdGFnZSB0YWJsZSBleGlzaXRzIGZvciB0aGUgcGFzc2VkIHZvbHRhZ2UKKyAqIHN1Y2Nlc3MuIFJldHVybnMgLUVOT0RBVEEgaWYgbm8gdm9sdGFnZSB0YWJsZSBleGlzaXRzIGZvciB0aGUgcGFzc2VkIHZvbHRhZ2UKICAqIGRvbWFpbiBvciBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyBlbnRyeS4KICAqLwogc3RydWN0IG9tYXBfdm9sdF9kYXRhICpvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHRkYXRhKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvYWRkci1tYXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jCmluZGV4IDFhNWQ2YTAuLjVjZWFmZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKIC8qCi0gKiBUaGUgT3Jpb24gaGFzIGZ1bGx5IHByb2dyYW1hYmxlIGFkZHJlc3MgbWFwLiBUaGVyZSdzIGEgc2VwYXJhdGUgYWRkcmVzcworICogVGhlIE9yaW9uIGhhcyBmdWxseSBwcm9ncmFtbWFibGUgYWRkcmVzcyBtYXAuIFRoZXJlJ3MgYSBzZXBhcmF0ZSBhZGRyZXNzCiAgKiBtYXAgZm9yIGVhY2ggb2YgdGhlIGRldmljZSBfbWFzdGVyXyBpbnRlcmZhY2VzLCBlLmcuIENQVSwgUENJLCBQQ0llLCBVU0IsCiAgKiBHaWdhYml0IEV0aGVybmV0LCBETUEvWE9SIGVuZ2luZXMsIGV0Yy4gRWFjaCBpbnRlcmZhY2UgaGFzIGl0cyBvd24KICAqIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgdGhhdCBhbGxvdyBpdCB0byBhY2Nlc3MgYW55IG9mIHRoZSBPcmlvbiByZXNvdXJjZXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbmV0MmJpZy1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L25ldDJiaWctc2V0dXAuYwppbmRleCA0MjllY2FmLi5hNTkzMGY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbmV0MmJpZy1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9uZXQyYmlnLXNldHVwLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogICogVGhlIHBvd2VyIGZyb250IExFRHMgKGJsdWUgYW5kIHJlZCkgYW5kIFNBVEEgcmVkIExFRHMgYXJlIGNvbnRyb2xsZWQgdmlhIGEKICAqIHNpbmdsZSBHUElPIGxpbmUgYW5kIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIGxlZHMtZ3BpbyBkcml2ZXIuCiAgKgotICogVGhlIFNBVEEgYmx1ZSBMRURzIGhhdmUgc29tZSBoYXJkd2FyZSBibGluayBjYXBhYmlsaXRpZXMgd2hpY2ggYXJlIGRldGFpbGxlZAorICogVGhlIFNBVEEgYmx1ZSBMRURzIGhhdmUgc29tZSBoYXJkd2FyZSBibGluayBjYXBhYmlsaXRpZXMgd2hpY2ggYXJlIGRldGFpbGVkCiAgKiBpbiB0aGUgZm9sbG93aW5nIGFycmF5OgogICoKICAqIFNBVEF4IGJsdWUgTEVEIHwgU0FUQXggYWN0aXZpdHkgfCBMRUQgc3RhdGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czIwOS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMKaW5kZXggZjBmNDNlMS4uZTZkNjQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIDhNaUIgTk9SIGZsYXNoLiBUaGUgc3RydWN0IG10ZF9wYXJ0aXRpb24gaXMgbm90IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQotICogICAgIHBhcnRpdGlvbnMgb24gdGhlIGRldmljZSBiZWNhdXNlIHdlIHdhbnQgdG8ga2VlcCBjb21wYXRhYmlsaXR5IHdpdGgKKyAqICAgICBwYXJ0aXRpb25zIG9uIHRoZSBkZXZpY2UgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoCiAgKiAgICAgZXhpc3RpbmcgUU5BUCBmaXJtd2FyZS4KICAqCiAgKiBMYXlvdXQgYXMgdXNlZCBieSBRTkFQOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNDA5LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM0MDktc2V0dXAuYwppbmRleCA5MmYzOTNmLi45ZWFjODE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM0MDktc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM0MDktc2V0dXAuYwpAQCAtNTYsNyArNTYsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogOE1pQiBOT1IgZmxhc2guIFRoZSBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBpcyBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCi0gKiAgICAgcGFydGl0aW9ucyBvbiB0aGUgZGV2aWNlIGJlY2F1c2Ugd2Ugd2FudCB0byBrZWVwIGNvbXBhdGFiaWxpdHkgd2l0aAorICogICAgIHBhcnRpdGlvbnMgb24gdGhlIGRldmljZSBiZWNhdXNlIHdlIHdhbnQgdG8ga2VlcCBjb21wYXRpYmlsaXR5IHdpdGgKICAqICAgICBleGlzdGluZyBRTkFQIGZpcm13YXJlLgogICoKICAqIExheW91dCBhcyB1c2VkIGJ5IFFOQVA6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCmluZGV4IDZkZTBhZDAuLjljZGNjYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCkBAIC03MTEsNyArNzExLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBicTI0MDIyX2luaXRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7CiAJCS5tYXhfdUEgICAgICAgICA9IDUwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5ULAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX0NVUlJFTlR8UkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IEFSUkFZX1NJWkUoYnEyNDAyMl9jb25zdW1lcnMpLAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gYnEyNDAyMl9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBiMDI0YThiLi5jNDYzOTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTk5LDExICs5OSwyNCBAQAogI2RlZmluZSBHQUZSKHgpCQlHUElPX1JFRygweDU0ICsgKCgoeCkgJiAweDcwKSA+PiAyKSkKIAogCi0jZGVmaW5lIE5SX0JVSUxUSU5fR1BJTyAxMjgKKyNkZWZpbmUgTlJfQlVJTFRJTl9HUElPCQlQWEFfR1BJT19JUlFfTlVNCiAKICNkZWZpbmUgZ3Bpb190b19iYW5rKGdwaW8pCSgoZ3BpbykgPj4gNSkKICNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJSVJRX0dQSU8oZ3BpbykKLSNkZWZpbmUgaXJxX3RvX2dwaW8oaXJxKQlJUlFfVE9fR1BJTyhpcnEpCisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW87CisKKwlpZiAoaXJxID09IElSUV9HUElPMCB8fCBpcnEgPT0gSVJRX0dQSU8xKQorCQlyZXR1cm4gaXJxIC0gSVJRX0dQSU8wOworCisJZ3BpbyA9IGlycSAtIFBYQV9HUElPX0lSUV9CQVNFOworCWlmIChncGlvID49IDIgJiYgZ3BpbyA8IE5SX0JVSUxUSU5fR1BJTykKKwkJcmV0dXJuIGdwaW87CisKKwlyZXR1cm4gLTE7Cit9CiAKICNpZmRlZiBDT05GSUdfQ1BVX1BYQTI2eAogLyogR1BJTzg2Lzg3Lzg4Lzg5IG9uIFBYQTI2eCBoYXZlIHRoZWlyIGRpcmVjdGlvbiBiaXRzIGluIEdQRFIyIGludmVydGVkLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYTQyODVmYy4uMDM4NDAyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC05Myw5ICs5Myw2IEBACiAjZGVmaW5lIEdQSU9fMl94X1RPX0lSUSh4KQkoUFhBX0dQSU9fSVJRX0JBU0UgKyAoeCkpCiAjZGVmaW5lIElSUV9HUElPKHgpCSgoKHgpIDwgMikgPyAoSVJRX0dQSU8wICsgKHgpKSA6IEdQSU9fMl94X1RPX0lSUSh4KSkKIAotI2RlZmluZSBJUlFfVE9fR1BJT18yX3goaSkJKChpKSAtIFBYQV9HUElPX0lSUV9CQVNFKQotI2RlZmluZSBJUlFfVE9fR1BJTyhpKQkoKChpKSA8IElSUV9HUElPKDIpKSA/ICgoaSkgLSBJUlFfR1BJTzApIDogSVJRX1RPX0dQSU9fMl94KGkpKQotCiAvKgogICogVGhlIGZvbGxvd2luZyBpbnRlcnJ1cHRzIGFyZSBmb3IgYm9hcmQgc3BlY2lmaWMgcHVycG9zZXMuIFNpbmNlCiAgKiB0aGUga2VybmVsIGNhbiBvbmx5IHJ1biBvbiBvbmUgbWFjaGluZSBhdCBhIHRpbWUsIHdlIGNhbiByZS11c2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKaW5kZXggZTRmYjQ2NjguLjIwN2VjYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oCkBAIC0zOCw3ICszOCw3IEBACiAjZGVmaW5lIFBDTUQoeCkJCV9fUkVHKDB4NDBGNTAxMTAgKyAoKHgpIDw8IDIpKQogCiAvKgotICogU2xhdmUgUG93ZXIgTWFuYWdtZW50IFVuaXQKKyAqIFNsYXZlIFBvd2VyIE1hbmFnZW1lbnQgVW5pdAogICovCiAjZGVmaW5lIEFTQ1IJCV9fUkVHKDB4NDBmNDAwMDApCS8qIEFwcGxpY2F0aW9uIFN1YnN5c3RlbSBQb3dlciBTdGF0dXMvQ29uZmlndXJhdGlvbiAqLwogI2RlZmluZSBBUlNSCQlfX1JFRygweDQwZjQwMDA0KQkvKiBBcHBsaWNhdGlvbiBTdWJzeXN0ZW0gUmVzZXQgU3RhdHVzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvemV1cy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3pldXMuaAppbmRleCBmYWE0MDhhLi4wNjQxZjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvemV1cy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96ZXVzLmgKQEAgLTY0LDcgKzY0LDcgQEAKIAogLyoKICAqIENQTEQgcmVnaXN0ZXJzOgotICogT25seSA0IHJlZ2lzdGVycywgYnV0IHNwcmVhZGVkIG92ZXIgYSAzMk1CIGFkZHJlc3Mgc3BhY2UuCisgKiBPbmx5IDQgcmVnaXN0ZXJzLCBidXQgc3ByZWFkIG92ZXIgYSAzMk1CIGFkZHJlc3Mgc3BhY2UuCiAgKiBCZSBnZW50bGUsIGFuZCByZW1hcCB0aGF0IG92ZXIgMzJrQi4uLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCmluZGV4IGE3Mjk5M2QuLjk5ODRlZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwpAQCAtNTk5LDcgKzU5OSw3IEBACiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYnEyNDAyMl9pbml0X2RhdGEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewogCQkubWF4X3VBICAgICAgICAgPSA1MDAwMDAsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfQ1VSUkVOVCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5UIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IEFSUkFZX1NJWkUoYnEyNDAyMl9jb25zdW1lcnMpLAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gYnEyNDAyMl9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKaW5kZXggZGQxM2JiNi4uMjM5MjVkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAvKgogICogU3VzcGVuZC9SZXN1bWUgYm9vdHN0cmFwIG1hbmFnZW1lbnQKICAqCi0gKiBNSU8gQTcwMSByZWJvb3Qgc2VxdWVuY2UgaXMgaGlnaGx5IFJPTSBkZXBlbmRhbnQuIEZyb20gdGhlIG9uZSBkaXNzYXNzZW1ibGVkLAorICogTUlPIEE3MDEgcmVib290IHNlcXVlbmNlIGlzIGhpZ2hseSBST00gZGVwZW5kZW50LiBGcm9tIHRoZSBvbmUgZGlzc2Fzc2VtYmxlZCwKICAqIHRoaXMgc2VxdWVuY2UgaXMgYXMgZm9sbG93cyA6CiAgKiAgIC0gZGlzYWJsZXMgaW50ZXJydXB0cwogICogICAtIGluaXRpYWxpemUgU0RSQU0gKHNlbGYgcmVmcmVzaCBSQU0gaW50byBhY3RpdmUgUkFNKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCA2YmRlNTk1Li5hNGFmOGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAKIHN0YXRpYyBpbnQgcHhhMjV4X3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKQogewotCWludCBncGlvID0gSVJRX1RPX0dQSU8oZC0+aXJxKTsKKwlpbnQgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJdWludDMyX3QgbWFzayA9IDA7CiAKIAlpZiAoZ3BpbyA+PSAwICYmIGdwaW8gPCA4NSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggMWNiNWQwZi4uOTA5NzU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTM0NSw3ICszNDUsNyBAQAogICovCiBzdGF0aWMgaW50IHB4YTI3eF9zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBvbikKIHsKLQlpbnQgZ3BpbyA9IElSUV9UT19HUElPKGQtPmlycSk7CisJaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwogCXVpbnQzMl90IG1hc2s7CiAKIAlpZiAoZ3BpbyA+PSAwICYmIGdwaW8gPCAxMjgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYmFycmllcnMuaAppbmRleCAwYzVkNzQ5Li45YTczMjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKQEAgLTQsNSArNCw1IEBACiAgKiBvcGVyYXRpb24gdG8gZGVhZGxvY2sgdGhlIHN5c3RlbS4KICAqLwogI2RlZmluZSBtYigpCQlkc2IoKQotI2RlZmluZSBybWIoKQkJZG1iKCkKKyNkZWZpbmUgcm1iKCkJCWRzYigpCiAjZGVmaW5lIHdtYigpCQltYigpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCBjZjY4MTM2Li5iMmIyYTViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTE5LDcgKzE5LDcgQEAKICNkZWZpbmUgTUFYX0RNQV9UUkFOU0ZFUl9TSVpFICAgMHgxMDAwMDAgLyogRGF0YSBVbml0IGlzIGhhbGYgd29yZCAgKi8KIAogLyogV2UgdXNlIGB2aXJ0dWFsYCBkbWEgY2hhbm5lbHMgdG8gaGlkZSB0aGUgZmFjdCB3ZSBoYXZlIG9ubHkgYSBsaW1pdGVkCi0gKiBudW1iZXIgb2YgRE1BIGNoYW5uZWxzLCBhbmQgbm90IG9mIGFsbCBvZiB0aGVtIChkZXBlbmRhbnQgb24gdGhlIGRldmljZSkKKyAqIG51bWJlciBvZiBETUEgY2hhbm5lbHMsIGFuZCBub3Qgb2YgYWxsIG9mIHRoZW0gKGRlcGVuZGVudCBvbiB0aGUgZGV2aWNlKQogICogY2FuIGJlIGF0dGFjaGVkIHRvIGFueSBETUEgc291cmNlLiBXZSB0aGVyZWZvcmUgbGV0IHRoZSBETUEgY29yZSBoYW5kbGUKICAqIHRoZSBhbGxvY2F0aW9uIG9mIGhhcmR3YXJlIGNoYW5uZWxzIHRvIGNsaWVudHMuCiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oCmluZGV4IDdmN2M1MjkuLjk4OGE2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1tZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtbWVtLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogI2RlZmluZSBTM0MyNDEwX0JBTktDT05fUE1DMTYJCSgweDAzKQogCiAvKiBiYW5rIGNvbmZpZ3VyYXRpb25zIGZvciBiYW5rcyAwLi43LCBub3RlIGJhbmtzCi0gKiA2IGFuZCA3IGhhdmUgZGlmZmVybnQgY29uZmlndXJhdGlvbnMgZGVwZW5kaW5nIG9uCisgKiA2IGFuZCA3IGhhdmUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGRlcGVuZGluZyBvbgogICogdGhlIG1lbW9yeSB0eXBlIGJpdHMgKi8KIAogI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGFjcDIJCSgweDAgPDwgMikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW4zMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMKaW5kZXggNjZmNDQ0NC4uMDc5ZGNhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogCS5kZWZfdHJpZ2dlcgk9ICIiLAogfTsKIAotLyogVGhpcyBpcyB0aGUgYmx1ZSBMRUQgb24gdGhlIGRldmljZS4gT3JpZ2luYWx5IHVzZWQgdG8gaW5kaWNhdGUgR1BTIGFjdGl2aXR5CisvKiBUaGlzIGlzIHRoZSBibHVlIExFRCBvbiB0aGUgZGV2aWNlLiBPcmlnaW5hbGx5IHVzZWQgdG8gaW5kaWNhdGUgR1BTIGFjdGl2aXR5CiAgKiBieSBmbGFzaGluZy4gKi8KIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgbjM1X2JsdWVfbGVkX3BkYXRhID0gewogCS5uYW1lCQk9ICJibHVlX2xlZCIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYwppbmRleCAwZGIyNDExLi43MTY2NjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWd0YTAyLmMKQEAgLTQwOSw2ICs0MDksMTAgQEAKIAkubnVtX3Jlc291cmNlcwk9IDAsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBndGEwMl9kZmJtY3MzMjBfZGV2aWNlID0geworCS5uYW1lID0gImRmYm1jczMyMCIsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGd0YTAyX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2Y1MDYzMyIsIDB4NzMpLApAQCAtNTIzLDYgKzUyNyw3IEBACiAJJnMzY19kZXZpY2VfaWlzLAogCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzM2NfZGV2aWNlX2kyYzAsCisJJmd0YTAyX2RmYm1jczMyMF9kZXZpY2UsCiAJJmd0YTAyX2J1dHRvbnNfZGV2aWNlLAogCSZzM2NfZGV2aWNlX2FkYywKIAkmczNjX2RldmljZV90cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCmluZGV4IGRmZWRjOWMuLmRkMzEyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJICogdGhlIHNhbWUgdGltaW5ncywgaG93ZXZlciwgYW55dGhpbmcgc21hbGxlciB0aGFuIDEwMjR4NzY4CiAJICogd2lsbCBvbmx5IGJlIGRpc3BsYXllZCBpbiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIGEgMTAyNHg3NjgKIAkgKiBYR0Egb3V0cHV0IHVubGVzcyB5b3UgYWRkIG9wdGlvbmFsIGRpcCBzd2l0Y2hlcyB0byB0aGUgc2hpZWxkLgotCSAqIFRoZXJlZm9yZSB0aW1pbmdzIGZvciBvdGhlciByZXNvbHV0aW9ucyBoYXZlIGJlZW4gb21taXRlZCBoZXJlLgorCSAqIFRoZXJlZm9yZSB0aW1pbmdzIGZvciBvdGhlciByZXNvbHV0aW9ucyBoYXZlIGJlZW4gb21pdHRlZCBoZXJlLgogCSAqLwogCVsyXSA9IHsKIAkJX0xDRF9ERUNMQVJFKApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jCmluZGV4IGMzNTU4NWMuLmIxOTcxNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMKQEAgLTMxNSw3ICszMTUsNyBAQAogCWNhc2UgUzNDMjQxMF9ETUFPUF9GTFVTSDoKIAkJcmV0dXJuIHMzYzY0eHhfZG1hX2ZsdXNoKGNoYW4pOwogCi0JLyogYmVsaXZlIFBBVVNFL1JFU1VNRSBhcmUgbm8tb3BzICovCisJLyogYmVsaWV2ZSBQQVVTRS9SRVNVTUUgYXJlIG5vLW9wcyAqLwogCWNhc2UgUzNDMjQxMF9ETUFPUF9QQVVTRToKIAljYXNlIFMzQzI0MTBfRE1BT1BfUkVTVU1FOgogCWNhc2UgUzNDMjQxMF9ETUFPUF9TVEFSVEVEOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9yZWdzLWZiLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaAppbmRleCA0YmU0Y2M5YS4uMDdhYTRkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9yZWdzLWZiLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9yZWdzLWZiLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgV1BBTENPTl9ICQkJCQkoMHgxOWMpCiAjZGVmaW5lIFdQQUxDT05fTAkJCQkJKDB4MWEwKQogCi0vKiBQYWxsZXRlIGNvbnRybyBmb3IgV1BBTDAgYW5kIFdQQUwxIGlzIHRoZSBzYW1lIGFzIGluIFMzQzY0eHgsIGJ1dAorLyogUGFsZXR0ZSBjb250cm9sIGZvciBXUEFMMCBhbmQgV1BBTDEgaXMgdGhlIHNhbWUgYXMgaW4gUzNDNjR4eCwgYnV0CiAgKiBkaWZmZXJlbnQgZm9yIFdQQUwyLTQKICAqLwogLyogSW4gV1BBTENPTl9MIChha2EgV1BBTENPTikgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1zZGhjaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKaW5kZXggZjE2OTQ2ZS4uYmUyNTg3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKQEAgLTQwLDcgKzQwLDcgQEAKIHsKIAl1MzIgY3RybDIsIGN0cmwzOwogCi0JLyogZG9uJ3QgbmVlZCB0byBhbHRlciBhbnl0aGluZyBhY29yZGluZyB0byBjYXJkLXR5cGUgKi8KKwkvKiBkb24ndCBuZWVkIHRvIGFsdGVyIGFueXRoaW5nIGFjY29yZGluZyB0byBjYXJkLXR5cGUgKi8KIAogCXdyaXRlbChTM0M2NFhYX1NESENJX0NPTlRST0w0X0RSSVZFXzltQSwgciArIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDFmNGI1OTUuLmE1YTFlMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xOCw3ICsxOCw3IEBACiAjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCiAjZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKIAotLyogUHJhY3RpY2FsbHksIEdQSU8gYmFua3MgdXB0byBNUDAzIGFyZSB0aGUgY29uZmlndXJhYmxlIGdwaW8gYmFua3MgKi8KKy8qIFByYWN0aWNhbGx5LCBHUElPIGJhbmtzIHVwIHRvIE1QMDMgYXJlIHRoZSBjb25maWd1cmFibGUgZ3BpbyBiYW5rcyAqLwogCiAvKiBHUElPIGJhbmsgc2l6ZXMgKi8KICNkZWZpbmUgUzVQVjIxMF9HUElPX0EwX05SCSg4KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLWdwaW8uYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1zZGhjaS1ncGlvLmMKaW5kZXggNzQ2Nzc3ZC4uM2UzYWMwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLWdwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2ktZ3Bpby5jCkBAIC0zMiwxMCArMzIsMTAgQEAKIAogCXN3aXRjaCAod2lkdGgpIHsKIAljYXNlIDg6Ci0JCS8qIEdQRzFbMzo2XSBzcGVjaWFsLWZ1bnRpb24gMyAqLworCQkvKiBHUEcxWzM6Nl0gc3BlY2lhbC1mdW5jdGlvbiAzICovCiAJCXMzY19ncGlvX2NmZ3JhbmdlX25vcHVsbChTNVBWMjEwX0dQRzEoMyksIDQsIFMzQ19HUElPX1NGTigzKSk7CiAJY2FzZSA0OgotCQkvKiBHUEcwWzM6Nl0gc3BlY2lhbC1mdW50aW9uIDIgKi8KKwkJLyogR1BHMFszOjZdIHNwZWNpYWwtZnVuY3Rpb24gMiAqLwogCQlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzVQVjIxMF9HUEcwKDMpLCA0LCBTM0NfR1BJT19TRk4oMikpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2kuYwppbmRleCBjMzJlMjAyLi5hODNiNmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2kuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2kuYwpAQCAtMzgsNyArMzgsNyBAQAogewogCXUzMiBjdHJsMiwgY3RybDM7CiAKLQkvKiBkb24ndCBuZWVkIHRvIGFsdGVyIGFueXRoaW5nIGFjb3JkaW5nIHRvIGNhcmQtdHlwZSAqLworCS8qIGRvbid0IG5lZWQgdG8gYWx0ZXIgYW55dGhpbmcgYWNjb3JkaW5nIHRvIGNhcmQtdHlwZSAqLwogCiAJd3JpdGVsKFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDRfRFJJVkVfOW1BLCByICsgUzNDNjRYWF9TREhDSV9DT05UUk9MNCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKaW5kZXggZTY5NzY5MS4uNDEyNTJkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKQEAgLTUwLDcgKzUwLDcgQEAKICMgTEVEcyBzdXBwb3J0CiBvYmotJChDT05GSUdfTEVEUykgKz0gJChsZWQteSkKIAotIyBNaXNjZWxhbmVvdXMgZnVuY3Rpb25zCisjIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zCiBvYmotJChDT05GSUdfUE0pCQkJKz0gcG0ubyBzbGVlcC5vCiBvYmotJChDT05GSUdfU0ExMTAwX1NTUCkJCSs9IHNzcC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwppbmRleCAwN2Q0ZThiLi5hYWE4YWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCkBAIC02OCw3ICs2OCw3IEBACiAgKiBjbG9jayBjaGFuZ2UgaW4gUk9NIGFuZCBqdW1wIHRvIHRoYXQgY29kZSBmcm9tIHRoZSBrZXJuZWwuIFRoZSBtYWluCiAgKiBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgUk9NIGhhcyB0byBiZSBtb2RpZmllZCwgd2hpY2ggaXMgbm90CiAgKiBwb3NzaWJsZSBvbiBhbGwgU0EtMTEwMCBwbGF0Zm9ybXMuIEFub3RoZXIgZGlzYWR2YW50YWdlIGlzIHRoYXQKLSAqIGp1bXBpbmcgdG8gUk9NIG1ha2VzIGNsb2NrIHN3aXRjaGluZyB1bmVjZXNzYXJ5IGNvbXBsaWNhdGVkLgorICoganVtcGluZyB0byBST00gbWFrZXMgY2xvY2sgc3dpdGNoaW5nIHVubmVjZXNzYXJ5IGNvbXBsaWNhdGVkLgogICoKICAqIFRoZSBpZGVhIGJlaGluZCB0aGlzIGRyaXZlciBpcyB0aGF0IHRoZSBtZW1vcnkgY29uZmlndXJhdGlvbiBjYW4gYmUKICAqIGNoYW5nZWQgd2hpbGUgcnVubmluZyBmcm9tIERSQU0gKGV2ZW4gd2l0aCBpbnRlcnJ1cHRzIHR1cm5lZCBvbiEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvU0EtMTEwMC5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL1NBLTExMDAuaAppbmRleCA0ZjdlYTAxLi5iYWU4Mjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvU0EtMTEwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9TQS0xMTAwLmgKQEAgLTE3OTQsNyArMTc5NCw3IEBACiAgICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0NCArIEREQVJfMTZCaXREZXYgKyBcCiAgICAgICAgICAgICAgICAgCSBEREFSX1NlcjRTU1BSYyArIEREQVJfRGV2QWRkIChfX1BSRUcoU2VyNFNTRFIpKSkKIAotI2RlZmluZSBEQ1NSX1JVTgkweDAwMDAwMDAxCS8qIERNQSBSVU5pbmcgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENTUl9SVU4JMHgwMDAwMDAwMQkvKiBETUEgcnVubmluZyAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIERDU1JfSUUgCTB4MDAwMDAwMDIJLyogRE1BIEludGVycnVwdCBFbmFibGUgICAgICAgICAgICAqLwogI2RlZmluZSBEQ1NSX0VSUk9SCTB4MDAwMDAwMDQJLyogRE1BIEVSUk9SICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBEQ1NSX0RPTkVBCTB4MDAwMDAwMDgJLyogRE9ORSBETUEgdHJhbnNmZXIgYnVmZmVyIEEgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMF9zc3AuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjBfc3NwLmMKaW5kZXggOWQ0OTBjNi4uZjUwYjAwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMF9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwX3NzcC5jCkBAIC0yOSw3ICsyOSw3IEBACiAvKioKICAqIGpvcm5hZGFfc3NwX3JldmVyc2UgLSByZXZlcnNlcyBpbnB1dCBieXRlCiAgKgotICogd2UgbmVlZCB0byByZXZlcnNlIGFsbCBkYXRhIHdlIHJlY2lldmUgZnJvbSB0aGUgbWN1IGR1ZSB0byBpdHMgcGh5c2ljYWwgbG9jYXRpb24KKyAqIHdlIG5lZWQgdG8gcmV2ZXJzZSBhbGwgZGF0YSB3ZSByZWNlaXZlIGZyb20gdGhlIG1jdSBkdWUgdG8gaXRzIHBoeXNpY2FsIGxvY2F0aW9uCiAgKiByZXR1cm5zIDogMDExMTAxMTEgLT4gMTExMDExMTAKICAqLwogdTggaW5saW5lIGpvcm5hZGFfc3NwX3JldmVyc2UodTggYnl0ZSkKQEAgLTE3OSw3ICsxNzksNyBAQAogCiBzdGF0aWMgaW50IGpvcm5hZGFfc3NwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JLyogTm90ZSB0aGF0IHRoaXMgZG9lc250IGFjdHVhbGx5IHJlbW92ZSB0aGUgZHJpdmVyLCBzaW5jZSB0aGVyZXMgbm90aGluZyB0byByZW1vdmUKKwkvKiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHJlbW92ZSB0aGUgZHJpdmVyLCBzaW5jZSB0aGVyZXMgbm90aGluZyB0byByZW1vdmUKIAkgKiBJdCBqdXN0IG1ha2VzIHN1cmUgZXZlcnl0aGluZyBpcyB0dXJuZWQgb2ZmICovCiAJR1BTUiA9IEdQSU9fR1BJTzI1OwogCXNzcF9leGl0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYwppbmRleCA3ODNiNjZmLi4xZTM1ZmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKQEAgLTk0Nyw3ICs5NDcsNyBAQAogCSZhcDRldmJfY2FtZXJhLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaGRtaV9pbml0X3BtX2Nsb2NrKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaGRtaV9pbml0X3BtX2Nsb2NrKHZvaWQpCiB7CiAJc3RydWN0IGNsayAqaGRtaV9pY2sgPSBjbGtfZ2V0KCZoZG1pX2RldmljZS5kZXYsICJpY2siKTsKIAlpbnQgcmV0OwpAQCAtOTg4LDIwICs5ODgsMTUgQEAKIAlwcl9kZWJ1ZygiUExMQzIgc2V0IGZyZXF1ZW5jeSAlbHVcbiIsIHJhdGUpOwogCiAJcmV0ID0gY2xrX3NldF9wYXJlbnQoaGRtaV9pY2ssICZzaDczNzJfcGxsYzJfY2xrKTsKLQlpZiAocmV0IDwgMCkgeworCWlmIChyZXQgPCAwKQogCQlwcl9lcnIoIkNhbm5vdCBzZXQgSERNSSBwYXJlbnQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9CiAKIG91dDoKIAlpZiAoIUlTX0VSUihoZG1pX2ljaykpCiAJCWNsa19wdXQoaGRtaV9pY2spOwotCXJldHVybiByZXQ7CiB9CiAKLWRldmljZV9pbml0Y2FsbChoZG1pX2luaXRfcG1fY2xvY2spOwotCi1zdGF0aWMgaW50IF9faW5pdCBmc2lfaW5pdF9wbV9jbG9jayh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGZzaV9pbml0X3BtX2Nsb2NrKHZvaWQpCiB7CiAJc3RydWN0IGNsayAqZnNpYV9pY2s7CiAJaW50IHJldDsKQEAgLTEwMTAsNyArMTAwNSw3IEBACiAJaWYgKElTX0VSUihmc2lhX2ljaykpIHsKIAkJcmV0ID0gUFRSX0VSUihmc2lhX2ljayk7CiAJCXByX2VycigiQ2Fubm90IGdldCBGU0kgSUNLOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuOwogCX0KIAogCXJldCA9IGNsa19zZXRfcGFyZW50KGZzaWFfaWNrLCAmc2g3MzcyX2ZzaWFja19jbGspOwpAQCAtMTAxOCwxMCArMTAxMyw3IEBACiAJCXByX2VycigiQ2Fubm90IHNldCBGU0ktQSBwYXJlbnQ6ICVkXG4iLCByZXQpOwogCiAJY2xrX3B1dChmc2lhX2ljayk7Ci0KLQlyZXR1cm4gcmV0OwogfQotZGV2aWNlX2luaXRjYWxsKGZzaV9pbml0X3BtX2Nsb2NrKTsKIAogLyoKICAqIEZJWE1FICEhCkBAIC0xMzQ4LDYgKzEzNDAsOSBAQAogCV9fcmF3X3dyaXRlbChzcmNyNCAmIH4oMSA8PCAxMyksIFNSQ1I0KTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFwNGV2Yl9kZXZpY2VzLCBBUlJBWV9TSVpFKGFwNGV2Yl9kZXZpY2VzKSk7CisKKwloZG1pX2luaXRfcG1fY2xvY2soKTsKKwlmc2lfaW5pdF9wbV9jbG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXA0ZXZiX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwppbmRleCA4MTg0ZDRkLi43ZGEyY2EyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCkBAIC00MjMsNyArNDIzLDcgQEAKIAkubmFtZQkJPSAic2hfZnNpMl9iX2hkbWkiLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaGRtaV9pbml0X3BtX2Nsb2NrKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaGRtaV9pbml0X3BtX2Nsb2NrKHZvaWQpCiB7CiAJc3RydWN0IGNsayAqaGRtaV9pY2sgPSBjbGtfZ2V0KCZoZG1pX2RldmljZS5kZXYsICJpY2siKTsKIAlpbnQgcmV0OwpAQCAtNDY3LDE3ICs0NjcsMTMgQEAKIAlwcl9kZWJ1ZygiUExMQzIgc2V0IGZyZXF1ZW5jeSAlbHVcbiIsIHJhdGUpOwogCiAJcmV0ID0gY2xrX3NldF9wYXJlbnQoaGRtaV9pY2ssICZzaDczNzJfcGxsYzJfY2xrKTsKLQlpZiAocmV0IDwgMCkgeworCWlmIChyZXQgPCAwKQogCQlwcl9lcnIoIkNhbm5vdCBzZXQgSERNSSBwYXJlbnQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9CiAKIG91dDoKIAlpZiAoIUlTX0VSUihoZG1pX2ljaykpCiAJCWNsa19wdXQoaGRtaV9pY2spOwotCXJldHVybiByZXQ7CiB9Ci1kZXZpY2VfaW5pdGNhbGwoaGRtaV9pbml0X3BtX2Nsb2NrKTsKIAogLyogVVNCMSAoSG9zdCkgKi8KIHN0YXRpYyB2b2lkIHVzYjFfaG9zdF9wb3J0X3Bvd2VyKGludCBwb3J0LCBpbnQgcG93ZXIpCkBAIC0xMjE4LDYgKzEyMTQsOCBAQAogCXNoNzM3Ml9hZGRfc3RhbmRhcmRfZGV2aWNlcygpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMobWFja2VyZWxfZGV2aWNlcywgQVJSQVlfU0laRShtYWNrZXJlbF9kZXZpY2VzKSk7CisKKwloZG1pX2luaXRfcG1fY2xvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1hY2tlcmVsX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jLmgKaW5kZXggZTExNTYwYS4uMjFhNTlkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTksNyArOSw3IEBACiAKICNpZmRlZiBDT05GSUdfTUFDSF9BUDRFVkIKICNpbmNsdWRlICJtYWNoL21tYy1hcDRlYi5oIgotI2VsaWYgQ09ORklHX01BQ0hfTUFDS0VSRUwKKyNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfTUFDS0VSRUwpCiAjaW5jbHVkZSAibWFjaC9tbWMtbWFja2VyZWwuaCIKICNlbHNlCiAjZXJyb3IgInVuc3VwcG9ydGVkIGJvYXJkLiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3pib290LmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC96Ym9vdC5oCmluZGV4IDZkNmEyMDUuLjkzMjBhZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3pib290LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvemJvb3QuaApAQCAtMTMsNyArMTMsNyBAQAogI2lmZGVmIENPTkZJR19NQUNIX0FQNEVWQgogI2RlZmluZSBNQUNIX1RZUEUJTUFDSF9UWVBFX0FQNEVWQgogI2luY2x1ZGUgIm1hY2gvaGVhZC1hcDRldmIudHh0IgotI2VsaWYgQ09ORklHX01BQ0hfTUFDS0VSRUwKKyNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfTUFDS0VSRUwpCiAjZGVmaW5lIE1BQ0hfVFlQRQlNQUNIX1RZUEVfTUFDS0VSRUwKICNpbmNsdWRlICJtYWNoL2hlYWQtbWFja2VyZWwudHh0IgogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2RtYS5jCmluZGV4IGU5NDVhZTIuLmY0ZWY1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9kbWEuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAJICogIC0gQ2hhbmdlIHRoZSBzb3VyY2Ugc2VsZWN0b3IgdG8gaW52YWxpZCB0byBzdG9wIHRoZSBETUEgZnJvbQogCSAqICAgIEZJRk8gdG8gbWVtb3J5LgogCSAqICAtIFJlYWQgdGhlIHN0YXR1cyByZWdpc3RlciB0byBrbm93IHRoZSBudW1iZXIgb2YgcGVuZGluZwotCSAqICAgIGJ5dGVzIHRvIGJlIHRyYW5zZmVyZWQuCisJICogICAgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQuCiAJICogIC0gRmluYWxseSBzdG9wIG9yIHByb2dyYW0gdGhlIERNQSB0byB0aGUgbmV4dCBidWZmZXIgaW4gdGhlCiAJICogICAgbGlzdC4KIAkgKi8KQEAgLTI0NCw3ICsyNDQsNyBAQAogCWlmIChzdGF0dXMgJiBTVEFfQlVTWSkKIAkJcmVxLT5ieXRlc190cmFuc2ZlcnJlZCAtPSB0b190cmFuc2ZlcjsKIAotCS8qIEluIGNvbnRpbm91cyB0cmFuc2ZlciBtb2RlLCBETUEgb25seSB0cmFja3MgdGhlIGNvdW50IG9mIHRoZQorCS8qIEluIGNvbnRpbnVvdXMgdHJhbnNmZXIgbW9kZSwgRE1BIG9ubHkgdHJhY2tzIHRoZSBjb3VudCBvZiB0aGUKIAkgKiBoYWxmIERNQSBidWZmZXIuIFNvLCBpZiB0aGUgRE1BIGFscmVhZHkgZmluaXNoZWQgaGFsZiB0aGUgRE1BCiAJICogdGhlbiBhZGQgdGhlIGhhbGYgYnVmZmVyIHRvIHRoZSBjb21wbGV0ZWQgY291bnQuCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKaW5kZXggNzZhM2Y2NS4uNjVhMWFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKQEAgLTI1Nyw3ICsyNTcsOCBAQAogdm9pZCB0ZWdyYV9ncGlvX3Jlc3VtZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGIsIHAsIGk7CisJaW50IGI7CisJaW50IHA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTI4MCw3ICsyODEsOCBAQAogdm9pZCB0ZWdyYV9ncGlvX3N1c3BlbmQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBiLCBwLCBpOworCWludCBiOworCWludCBwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvciAoYiA9IDA7IGIgPCBBUlJBWV9TSVpFKHRlZ3JhX2dwaW9fYmFua3MpOyBiKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCmluZGV4IGNjMTE1MTcuLjQyNWI0MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvYmFycmllcnMuaApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4KIAotI2RlZmluZSBybWIoKQkJZG1iKCkKKyNkZWZpbmUgcm1iKCkJCWRzYigpCiAjZGVmaW5lIHdtYigpCQlkbyB7IGRzYigpOyBvdXRlcl9zeW5jKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIG1iKCkJCXdtYigpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggMzkwMTFiZC4uZDAxMzJlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTkyLDExICs5MiwxMSBAQAogCS8qICBUaGlzIGlzIGEgY2FsbGVkIGZyb20gdGhlIERNQSBJU1IgY29udGV4dCB3aGVuIHRoZSBETUEgaXMgc3RpbGwgaW4KIAkgKiAgcHJvZ3Jlc3MgYW5kIGlzIGFjdGl2ZWx5IGZpbGxpbmcgc2FtZSBidWZmZXIuCiAJICoKLQkgKiAgSW4gY2FzZSBvZiBjb250aW5vdXMgbW9kZSByZWNlaXZlLCB0aGlzIHRocmVzaG9sZCBpcyAxLzIgdGhlIGJ1ZmZlcgorCSAqICBJbiBjYXNlIG9mIGNvbnRpbnVvdXMgbW9kZSByZWNlaXZlLCB0aGlzIHRocmVzaG9sZCBpcyAxLzIgdGhlIGJ1ZmZlcgogCSAqICBzaXplLiBJbiBvdGhlciBjYXNlcywgdGhpcyB3aWxsIG5vdCBldmVuIGJlIGNhbGxlZCBhcyB0aGVyZSBpcyBubwogCSAqICBoYXJkd2FyZSBzdXBwb3J0IGZvciBpdC4KIAkgKgotCSAqIEluIHRoZSBjYXNlIG9mIGNvbnRpbm91cyBtb2RlIHJlY2VpdmUsIGlmIHRoZXJlIGlzIG5leHQgcmVxIGFscmVhZHkKKwkgKiBJbiB0aGUgY2FzZSBvZiBjb250aW51b3VzIG1vZGUgcmVjZWl2ZSwgaWYgdGhlcmUgaXMgbmV4dCByZXEgYWxyZWFkeQogCSAqIHF1ZXVlZCwgRE1BIHByb2dyYW1zIHRoZSBIVyB0byB1c2UgdGhhdCByZXEgd2hlbiB0aGlzIHJlcSBpcwogCSAqIGNvbXBsZXRlZC4gSWYgdGhlcmUgaXMgbm8gIm5leHQgcmVxIiBxdWV1ZWQsIHRoZW4gRE1BIElTUiBkb2Vzbid0IGRvCiAJICogYW55dGhpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBjYWxsYmFjay4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvdGVncmEyX2Nsb2Nrcy5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKaW5kZXggNmQ3YzRlZS4uNDQ1OTQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKQEAgLTEzNjIsMTQgKzEzNjIsMTUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CisJbG9uZyBuZXdfcmF0ZSA9IHJhdGU7CiAKLQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoYy0+cGFyZW50LCByYXRlKTsKLQlpZiAocmF0ZSA8IDApCi0JCXJldHVybiByYXRlOworCW5ld19yYXRlID0gY2xrX3JvdW5kX3JhdGUoYy0+cGFyZW50LCBuZXdfcmF0ZSk7CisJaWYgKG5ld19yYXRlIDwgMCkKKwkJcmV0dXJuIG5ld19yYXRlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPnBhcmVudC0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCWMtPnUuc2hhcmVkX2J1c191c2VyLnJhdGUgPSByYXRlOworCWMtPnUuc2hhcmVkX2J1c191c2VyLnJhdGUgPSBuZXdfcmF0ZTsKIAlyZXQgPSB0ZWdyYV9jbGtfc2hhcmVkX2J1c191cGRhdGUoYy0+cGFyZW50KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnBhcmVudC0+c3BpbmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKaW5kZXggZmFiY2M0OS4uNTUzNWRkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCXZhbCA9IHJlYWR3KFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fQ0NSKTsKIAl2YWwgJj0gflUzMDBfU1lTQ09OX0NDUl9JMlMwX1VTRV9WQ1hPOwogCXdyaXRldyh2YWwsIFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fQ0NSKTsKLQkvKiBEZWFjdGl2YXRlIFZDWE8gaWYgbm9vbmUgZWxzZSBpcyB1c2luZyBWQ1hPICovCisJLyogRGVhY3RpdmF0ZSBWQ1hPIGlmIG5vIG9uZSBlbHNlIGlzIHVzaW5nIFZDWE8gKi8KIAlpZiAoISh2YWwgJiBVMzAwX1NZU0NPTl9DQ1JfSTJTMV9VU0VfVkNYTykpCiAJCXZhbCAmPSB+VTMwMF9TWVNDT05fQ0NSX1RVUk5fVkNYT19PTjsKIAl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NDUik7CkBAIC0yODMsNyArMjgzLDcgQEAKIAl2YWwgPSByZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NDUik7CiAJdmFsICY9IH5VMzAwX1NZU0NPTl9DQ1JfSTJTMV9VU0VfVkNYTzsKIAl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NDUik7Ci0JLyogRGVhY3RpdmF0ZSBWQ1hPIGlmIG5vb25lIGVsc2UgaXMgdXNpbmcgVkNYTyAqLworCS8qIERlYWN0aXZhdGUgVkNYTyBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyBWQ1hPICovCiAJaWYgKCEodmFsICYgVTMwMF9TWVNDT05fQ0NSX0kyUzBfVVNFX1ZDWE8pKQogCQl2YWwgJj0gflUzMDBfU1lTQ09OX0NDUl9UVVJOX1ZDWE9fT047CiAJd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9DQ1IpOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAgKi8KIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JLyogVE9ETzogZ2V0IGFwcm9wcmlhdGUgc3dpdGNoZXMgZm9yIEVNSUZDTEssIEFIQkNMSyBhbmQgTUNMSyAqLworCS8qIFRPRE86IGdldCBhcHByb3ByaWF0ZSBzd2l0Y2hlcyBmb3IgRU1JRkNMSywgQUhCQ0xLIGFuZCBNQ0xLICovCiAJLyogRWxzZSBkZWZhdWx0IHRvIGZpeGVkIHZhbHVlICovCiAKIAlpZiAoY2xrLT5yb3VuZF9yYXRlKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYwppbmRleCBkYzg3NDZkLi42ZTE5MDdmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCkBAIC01Miw3ICs1Miw3IEBACiAJICogb24gdmFsdWUgcHJlc2VudCBpbiBHcGlvU2VsMSB0byBHcGlvU2VsNiBhbmQgQWx0ZXJuYXRGdW5jdGlvbgogCSAqIHJlZ2lzdGVyLiBUaGlzIGlzIHRoZSBhcnJheSBvZiA3IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCiAJICogT25lIGhhcyB0byBjb21waWxlIHRpbWUgZGVjaWRlIHRoZXNlIHNldHRpbmdzLiBCZWxvdyBpcyB0aGUKLQkgKiBleHBsYWluYXRpb24gb2YgdGhlc2Ugc2V0dGluZworCSAqIGV4cGxhbmF0aW9uIG9mIHRoZXNlIHNldHRpbmcKIAkgKiBHcGlvU2VsMSA9IDB4MDAgPT4gUGlucyBHUElPMSB0byBHUElPOCBhcmUgbm90IHVzZWQgYXMgR1BJTwogCSAqIEdwaW9TZWwyID0gMHgxRSA9PiBQaW5zIEdQSU8xMCB0byBHUElPMTMgYXJlIGNvbmZpZ3VyZWQgYXMgR1BJTwogCSAqIEdwaW9TZWwzID0gMHg4MCA9PiBQaW4gR1BJTzI0IGlzIGNvbmZpZ3VyZWQgYXMgR1BJTwpAQCAtMTc4LDE2ICsxNzgsMTUgQEAKIAkJLmlycQkJPSBOT01BRElLX0dQSU9fVE9fSVJRKDIxNyksCiAJCS5wbGF0Zm9ybV9kYXRhICA9ICZtb3A1MDBfdGMzNTg5Ml9kYXRhLAogCX0sCi19OwotCi0vKiBJMkMwIGRldmljZXMgb25seSBhdmFpbGFibGUgcHJpb3IgdG8gSFJFRnY2MCAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG1vcDUwMF9pMmMwX29sZF9kZXZpY2VzW10gPSB7CisJLyogSTJDMCBkZXZpY2VzIG9ubHkgYXZhaWxhYmxlIHByaW9yIHRvIEhSRUZ2NjAgKi8KIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJ0cHM2MTA1MiIsIDB4MzMpLAogCQkucGxhdGZvcm1fZGF0YSAgPSAmbW9wNTAwX3RwczYxMDUyX2RhdGEsCiAJfSwKIH07CiAKKyNkZWZpbmUgTlVNX1BSRV9WNjBfSTJDMF9ERVZJQ0VTIDEKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG1vcDUwMF9pMmMyX2RldmljZXNbXSA9IHsKIAl7CiAJCS8qIGxwNTUyMSBMRUQgZHJpdmVyLCAxc3QgZGV2aWNlICovCkBAIC00MjUsNiArNDI0LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG1vcDUwMF9pbml0X21hY2hpbmUodm9pZCkKIHsKKwlpbnQgaTJjMF9kZXZzOworCiAJLyoKIAkgKiBUaGUgSFJFRnY2MCBib2FyZCByZW1vdmVkIGEgR1BJTyBleHBhbmRlciBhbmQgcm91dGVkCiAJICogYWxsIHRoZXNlIEdQSU8gcGlucyB0byB0aGUgaW50ZXJuYWwgR1BJTyBjb250cm9sbGVyCkBAIC00NDgsMTEgKzQ0OSwxMSBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhYjg1MDBfZGV2aWNlKTsKIAotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1vcDUwMF9pMmMwX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShtb3A1MDBfaTJjMF9kZXZpY2VzKSk7Ci0JaWYgKCFtYWNoaW5lX2lzX2hyZWZ2NjAoKSkKLQkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbW9wNTAwX2kyYzBfb2xkX2RldmljZXMsCi0JCQkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfb2xkX2RldmljZXMpKTsKKwlpMmMwX2RldnMgPSBBUlJBWV9TSVpFKG1vcDUwMF9pMmMwX2RldmljZXMpOworCWlmIChtYWNoaW5lX2lzX2hyZWZ2NjAoKSkKKwkJaTJjMF9kZXZzIC09IE5VTV9QUkVfVjYwX0kyQzBfREVWSUNFUzsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1vcDUwMF9pMmMwX2RldmljZXMsIGkyYzBfZGV2cyk7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMiwgbW9wNTAwX2kyYzJfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKG1vcDUwMF9pMmMyX2RldmljZXMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiODUwMC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kYjg1MDAtcmVncy5oCmluZGV4IDBmZWZiMzQuLjE2NjQ3YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiODUwMC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGI4NTAwLXJlZ3MuaApAQCAtNTgsNyArNTgsNyBAQAogI2RlZmluZSBVODUwMF9HUElPMl9CQVNFCShVODUwMF9QRVIyX0JBU0UgKyAweEUwMDApCiAjZGVmaW5lIFU4NTAwX0dQSU8zX0JBU0UJKFU4NTAwX1BFUjVfQkFTRSArIDB4MUUwMDApCiAKLS8qIHBlcjcgYmFzZSBhZGRyZXNzZXNzICovCisvKiBwZXI3IGJhc2UgYWRkcmVzc2VzICovCiAjZGVmaW5lIFU4NTAwX0NSX0JBU0VfRUQJKFU4NTAwX1BFUjdfQkFTRV9FRCArIDB4ODAwMCkKICNkZWZpbmUgVTg1MDBfTVRVMF9CQVNFX0VECShVODUwMF9QRVI3X0JBU0VfRUQgKyAweGEwMDApCiAjZGVmaW5lIFU4NTAwX01UVTFfQkFTRV9FRAkoVTg1MDBfUEVSN19CQVNFX0VEICsgMHhiMDAwKQpAQCAtNjgsNyArNjgsNyBAQAogI2RlZmluZSBVODUwMF9VQVJUMF9CQVNFCShVODUwMF9QRVIxX0JBU0UgKyAweDAwMDApCiAjZGVmaW5lIFU4NTAwX1VBUlQxX0JBU0UJKFU4NTAwX1BFUjFfQkFTRSArIDB4MTAwMCkKIAotLyogcGVyNiBiYXNlIGFkZHJlc3Nlc3MgKi8KKy8qIHBlcjYgYmFzZSBhZGRyZXNzZXMgKi8KICNkZWZpbmUgVTg1MDBfUk5HX0JBU0UJCShVODUwMF9QRVI2X0JBU0UgKyAweDAwMDApCiAjZGVmaW5lIFU4NTAwX1BLQV9CQVNFCQkoVTg1MDBfUEVSNl9CQVNFICsgMHgxMDAwKQogI2RlZmluZSBVODUwMF9QS0FNX0JBU0UJCShVODUwMF9QRVI2X0JBU0UgKyAweDIwMDApCkBAIC03OSwxMSArNzksMTEgQEAKICNkZWZpbmUgVTg1MDBfQ1JZUFRPMV9CQVNFCShVODUwMF9QRVI2X0JBU0UgKyAweGIwMDApCiAjZGVmaW5lIFU4NTAwX0NMS1JTVDZfQkFTRQkoVTg1MDBfUEVSNl9CQVNFICsgMHhmMDAwKQogCi0vKiBwZXI1IGJhc2UgYWRkcmVzc2VzcyAqLworLyogcGVyNSBiYXNlIGFkZHJlc3NlcyAqLwogI2RlZmluZSBVODUwMF9VU0JPVEdfQkFTRQkoVTg1MDBfUEVSNV9CQVNFICsgMHgwMDAwMCkKICNkZWZpbmUgVTg1MDBfQ0xLUlNUNV9CQVNFCShVODUwMF9QRVI1X0JBU0UgKyAweDFmMDAwKQogCi0vKiBwZXI0IGJhc2UgYWRkcmVzc2VzcyAqLworLyogcGVyNCBiYXNlIGFkZHJlc3NlcyAqLwogI2RlZmluZSBVODUwMF9CQUNLVVBSQU0wX0JBU0UJKFU4NTAwX1BFUjRfQkFTRSArIDB4MDAwMDApCiAjZGVmaW5lIFU4NTAwX0JBQ0tVUFJBTTFfQkFTRQkoVTg1MDBfUEVSNF9CQVNFICsgMHgwMTAwMCkKICNkZWZpbmUgVTg1MDBfUlRUMF9CQVNFCQkoVTg1MDBfUEVSNF9CQVNFICsgMHgwMjAwMCkKQEAgLTEwNiw3ICsxMDYsNyBAQAogI2RlZmluZSBVODUwMF9TREk1X0JBU0UJCShVODUwMF9QRVIzX0JBU0UgKyAweDgwMDApCiAjZGVmaW5lIFU4NTAwX0NMS1JTVDNfQkFTRQkoVTg1MDBfUEVSM19CQVNFICsgMHhmMDAwKQogCi0vKiBwZXIyIGJhc2UgYWRkcmVzc2VzcyAqLworLyogcGVyMiBiYXNlIGFkZHJlc3NlcyAqLwogI2RlZmluZSBVODUwMF9JMkMzX0JBU0UJCShVODUwMF9QRVIyX0JBU0UgKyAweDAwMDApCiAjZGVmaW5lIFU4NTAwX1NQSTJfQkFTRQkJKFU4NTAwX1BFUjJfQkFTRSArIDB4MTAwMCkKICNkZWZpbmUgVTg1MDBfU1BJMV9CQVNFCQkoVTg1MDBfUEVSMl9CQVNFICsgMHgyMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IGQzNjQ0ZGIuLmY0MGM2OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKQEAgLTMyLDcgKzMyLDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KICAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKLSAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqIGNhY2hlIGxpbmUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zLgogICoKICAqICBTaXplICBDbGVhbiAodGlja3MpIERpcnR5ICh0aWNrcykKICAqICAgNDA5NiAgIDIxICAyMCAgMjEgICAgNTMgIDU1ICA1NApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCmluZGV4IDQ5YzJiNjYuLmE3YjI3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKQEAgLTM0LDcgKzM0LDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KICAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKLSAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqIGNhY2hlIGxpbmUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zLgogICoKICAqICoqKiBUaGlzIG5lZWRzIGJlbmNobWFya2luZwogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwppbmRleCA2MTM2ZTY4Li5kYzE4ZDgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTk2LDcgKzk2LDcgQEAKICAqCUZsdXNoIHRoZSBlbnRpcmUgY2FjaGUgc3lzdGVtLgogICogIFRoZSBkYXRhIGNhY2hlIGZsdXNoIGlzIG5vdyBhY2hpZXZlZCB1c2luZyBhdG9taWMgY2xlYW4gLyBpbnZhbGlkYXRlcwogICogIHdvcmtpbmcgb3V0d2FyZHMgZnJvbSBMMSBjYWNoZS4gVGhpcyBpcyBkb25lIHVzaW5nIFNldC9XYXkgYmFzZWQgY2FjaGUKLSAqICBtYWludGFpbmFuY2UgaW5zdHJ1Y3Rpb25zLgorICogIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4KICAqICBUaGUgaW5zdHJ1Y3Rpb24gY2FjaGUgY2FuIHN0aWxsIGJlIGludmFsaWRhdGVkIGJhY2sgdG8gdGhlIHBvaW50IG9mCiAgKiAgdW5pZmljYXRpb24gaW4gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IGU1ZjZmYzQuLmU1OTE1MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTM5Miw3ICszOTIsNyBAQAogCSAqIENvbnZlcnQgc3RhcnRfcGZuL2VuZF9wZm4gdG8gYSBzdHJ1Y3QgcGFnZSBwb2ludGVyLgogCSAqLwogCXN0YXJ0X3BnID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuIC0gMSkgKyAxOwotCWVuZF9wZyA9IHBmbl90b19wYWdlKGVuZF9wZm4pOworCWVuZF9wZyA9IHBmbl90b19wYWdlKGVuZF9wZm4gLSAxKSArIDE7CiAKIAkvKgogCSAqIENvbnZlcnQgdG8gcGh5c2ljYWwgYWRkcmVzc2VzLCBhbmQKQEAgLTQyNiw2ICs0MjYsMTQgQEAKIAogCQliYW5rX3N0YXJ0ID0gYmFua19wZm5fc3RhcnQoYmFuayk7CiAKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCisJCS8qCisJCSAqIFRha2UgY2FyZSBub3QgdG8gZnJlZSBtZW1tYXAgZW50cmllcyB0aGF0IGRvbid0IGV4aXN0CisJCSAqIGR1ZSB0byBTUEFSU0VNRU0gc2VjdGlvbnMgd2hpY2ggYXJlbid0IHByZXNlbnQuCisJCSAqLworCQliYW5rX3N0YXJ0ID0gbWluKGJhbmtfc3RhcnQsCisJCQkJIEFMSUdOKHByZXZfYmFua19lbmQsIFBBR0VTX1BFUl9TRUNUSU9OKSk7CisjZW5kaWYKIAkJLyoKIAkJICogSWYgd2UgaGFkIGEgcHJldmlvdXMgYmFuaywgYW5kIHRoZXJlIGlzIGEgc3BhY2UKIAkJICogYmV0d2VlbiB0aGUgY3VycmVudCBiYW5rIGFuZCB0aGUgcHJldmlvdXMsIGZyZWUgaXQuCkBAIC00NDAsNiArNDQ4LDEyIEBACiAJCSAqLwogCQlwcmV2X2JhbmtfZW5kID0gQUxJR04oYmFua19wZm5fZW5kKGJhbmspLCBNQVhfT1JERVJfTlJfUEFHRVMpOwogCX0KKworI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKwlpZiAoIUlTX0FMSUdORUQocHJldl9iYW5rX2VuZCwgUEFHRVNfUEVSX1NFQ1RJT04pKQorCQlmcmVlX21lbW1hcChwcmV2X2JhbmtfZW5kLAorCQkJICAgIEFMSUdOKHByZXZfYmFua19lbmQsIFBBR0VTX1BFUl9TRUNUSU9OKSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGZyZWVfaGlnaHBhZ2VzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbWFwLmMgYi9hcmNoL2FybS9tbS9tbWFwLmMKaW5kZXggYWZlMjA5ZS4uNzRiZTA1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL21tYXAuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTgyLDcgKzgzLDggQEAKIAkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKIAl9CiAJLyogOCBiaXRzIG9mIHJhbmRvbW5lc3MgaW4gMjAgYWRkcmVzcyBzcGFjZSBiaXRzICovCi0JaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKQorCWlmICgoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpICYmCisJICAgICEoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX05PX1JBTkRPTUlaRSkpCiAJCWFkZHIgKz0gKGdldF9yYW5kb21faW50KCkgJSAoMSA8PCA4KSkgPDwgUEFHRV9TSElGVDsKIAogZnVsbF9zZWFyY2g6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IDIyNmUzZDguLjZjNGU3ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC02NCw3ICs2NCw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCi0gKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKiBjYWNoZSBsaW5lIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4KICAqLwogI2RlZmluZSBDQUNIRV9ETElNSVQJMzI3NjgKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCmluZGV4IDg2ZDljMmMuLjRjZTk0N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTY0LDcgKzY0LDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KICAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKLSAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqIGNhY2hlIGxpbmUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zLgogICovCiAjZGVmaW5lIENBQ0hFX0RMSU1JVAkzMjc2OAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCmluZGV4IDgzZDNkZDMuLmM4ODg0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCkBAIC01Myw3ICs1Myw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCi0gKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKiBjYWNoZSBsaW5lIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4KICAqLwogI2RlZmluZSBDQUNIRV9ETElNSVQJMzI3NjgKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCA2ODYwNDNlLi40MTM2ODQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtNTMsNyArNTMsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bwogICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAotICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICogY2FjaGUgbGluZSBtYWludGVuYW5jZSBpbnN0cnVjdGlvbnMuCiAgKi8KICNkZWZpbmUgQ0FDSEVfRExJTUlUCTMyNzY4CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCmluZGV4IDY2NTI2NmQuLjdhMDZlNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwpAQCAtNjMsNyArNjMsNyBAQAogLyoKICAqIEZ1bmN0aW9uOiBhcm03MjBfcHJvY19kb19pZGxlKHZvaWQpCiAgKiBQYXJhbXMgIDogcjAgPSB1bnVzZWQKLSAqIFB1cnBvc2UgOiBwdXQgdGhlIHByb2Nlc3NlciBpbiBwcm9wZXIgaWRsZSBtb2RlCisgKiBQdXJwb3NlIDogcHV0IHRoZSBwcm9jZXNzb3IgaW4gcHJvcGVyIGlkbGUgbW9kZQogICovCiBFTlRSWShjcHVfYXJtNzIwX2RvX2lkbGUpCiAJCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCmluZGV4IDIxOTk4MGUuLmJmOGExZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwpAQCAtNTMsNyArNTMsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bwogICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAotICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICogY2FjaGUgbGluZSBtYWludGVuYW5jZSBpbnN0cnVjdGlvbnMuCiAgKi8KICNkZWZpbmUgQ0FDSEVfRExJTUlUCTY1NTM2CiAKQEAgLTM5MCw3ICszOTAsNyBAQAogLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyAqLwogLmdsb2JsCWNwdV9hcm05MjBfc3VzcGVuZF9zaXplCiAuZXF1CWNwdV9hcm05MjBfc3VzcGVuZF9zaXplLCA0ICogMwotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogRU5UUlkoY3B1X2FybTkyMF9kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQogCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwppbmRleCAzNjE1NGIxLi45NWJhMWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKQEAgLTU0LDcgKzU0LDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KICAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKLSAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4gIChJIHRoaW5rIHRoaXMgc2hvdWxkCisgKiBjYWNoZSBsaW5lIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4gIChJIHRoaW5rIHRoaXMgc2hvdWxkCiAgKiBiZSAzMjc2OCkuCiAgKi8KICNkZWZpbmUgQ0FDSEVfRExJTUlUCTgxOTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCmluZGV4IDg5YzVlMDAwLi41NDFlNDc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKQEAgLTc3LDcgKzc3LDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KICAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKLSAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqIGNhY2hlIGxpbmUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zLgogICovCiAjZGVmaW5lIENBQ0hFX0RMSU1JVAk4MTkyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCmluZGV4IDZhNGJkYjIuLjBlZDg1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtNDA0LDcgKzQwNCw3IEBACiAvKiBTdXNwZW5kL3Jlc3VtZSBzdXBwb3J0OiB0YWtlbiBmcm9tIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TICovCiAuZ2xvYmwJY3B1X2FybTkyNl9zdXNwZW5kX3NpemUKIC5lcXUJY3B1X2FybTkyNl9zdXNwZW5kX3NpemUsIDQgKiAzCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBFTlRSWShjcHVfYXJtOTI2X2RvX3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjQgLSByNywgbHJ9CiAJbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBQSUQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCmluZGV4IGUzMmZhNDkuLjM0MjYxZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUwpAQCAtODUsNyArODUsNyBAQAogCiAvKgogICogU2FuaXR5IGNoZWNrIHRoZSBQVEUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvZGUgYmVsb3cgLSB3aGljaCBtYWtlcwotICogY2VydGFpbiBhc3N1bXB0aW9ucyBhYm91dCBob3cgdGhlc2UgYml0cyBhcmUgbGF5ZWQgb3V0LgorICogY2VydGFpbiBhc3N1bXB0aW9ucyBhYm91dCBob3cgdGhlc2UgYml0cyBhcmUgbGFpZCBvdXQuCiAgKi8KICNpZmRlZiBDT05GSUdfTU1VCiAjaWYgTF9QVEVfU0hBUkVEICE9IFBURV9FWFRfU0hBUkVECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwppbmRleCA3NDQ4M2QxLi4xODRhOWM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAuZ2xvYmwJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUKIC5lcXUJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUsIDQqNAotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogRU5UUlkoY3B1X3NhMTEwMF9kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQogCW1yYwlwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKaW5kZXggODMyYjZiZC4uN2M5OWNiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtMTI0LDcgKzEyNCw3IEBACiAvKiBTdXNwZW5kL3Jlc3VtZSBzdXBwb3J0OiB0YWtlbiBmcm9tIGFyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TICovCiAuZ2xvYmwJY3B1X3Y2X3N1c3BlbmRfc2l6ZQogLmVxdQljcHVfdjZfc3VzcGVuZF9zaXplLCA0ICogOAotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogRU5UUlkoY3B1X3Y2X2RvX3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjQgLSByMTEsIGxyfQogCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKQEAgLTEzMiw3ICsxMzIsNyBAQAogCW1yYwlwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKIAltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gdGFibGUgYmFzZSAwCiAJbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgMQotCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGxhcnkgY29udHJvbCByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgogCW1yYwlwMTUsIDAsIHIxMCwgYzEsIGMwLCAyCUAgY28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCiAJbXJjCXAxNSwgMCwgcjExLCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZ2lzdGVyCiAJc3RtaWEJcjAsIHtyNCAtIHIxMX0KQEAgLTE1MSw3ICsxNTEsNyBAQAogCW1jcglwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKIAltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gdGFibGUgYmFzZSAwCiAJbWNyCXAxNSwgMCwgcjgsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgMQotCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGxhcnkgY29udHJvbCByZWdpc3RlcgorCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgogCW1jcglwMTUsIDAsIHIxMCwgYzEsIGMwLCAyCUAgY28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCiAJbWNyCXAxNSwgMCwgaXAsIGMyLCBjMCwgMglAIFRUQiBjb250cm9sIHJlZ2lzdGVyCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAlAIElTQgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDI2MmZhODguLmJhYmZiYTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0yMTEsNyArMjExLDcgQEAKIC8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IGRlcml2ZWQgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYyMTAvc2xlZXAuUyAqLwogLmdsb2JsCWNwdV92N19zdXNwZW5kX3NpemUKIC5lcXUJY3B1X3Y3X3N1c3BlbmRfc2l6ZSwgNCAqIDgKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIEVOVFJZKGNwdV92N19kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KIAltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECkBAIC0yMzcsNyArMjM3LDcgQEAKIAltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVFRCIDAKIAltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVFRCIDEKIAltY3IJcDE1LCAwLCBpcCwgYzIsIGMwLCAyCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKLQltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgogCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCiAJbGRyCXI0LCA9UFJSUgkJQCBQUlJSCiAJbGRyCXI1LCA9Tk1SUgkJQCBOTVJSCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCmluZGV4IDYzZDhiMjAuLjU5NjIxMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCkBAIC00MTcsNyArNDE3LDcgQEAKIAogLmdsb2JsCWNwdV94c2MzX3N1c3BlbmRfc2l6ZQogLmVxdQljcHVfeHNjM19zdXNwZW5kX3NpemUsIDQgKiA4Ci0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBFTlRSWShjcHVfeHNjM19kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjEwLCBscn0KIAltcmMJcDE0LCAwLCByNCwgYzYsIGMwLCAwCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgZm9yIHR1cmJvIG1vZGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDA4NjAzOGMuLjQyYWY5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQogCWJlcQl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCiAJYgl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCi1FTkRQUk9DKHhzY3NhbGVfZG1hX2EwX21hcF9hcmVhKQorRU5EUFJPQyh4c2NhbGVfZG1hX2EwX21hcF9hcmVhKQogCiAvKgogICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKQEAgLTUxOCw3ICs1MTgsNyBAQAogCiAuZ2xvYmwJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUKIC5lcXUJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUsIDQgKiA3Ci0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBFTlRSWShjcHVfeHNjYWxlX2RvX3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjQgLSByMTAsIGxyfQogCW1yYwlwMTQsIDAsIHI0LCBjNiwgYzAsIDAJQCBjbG9jayBjb25maWd1cmF0aW9uLCBmb3IgdHVyYm8gbW9kZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvY3B1ZnJlcS5jCmluZGV4IGNlODE0ODEuLjQyNjhhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2NwdWZyZXEuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9jcHVmcmVxLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogLyoKICAqIEEgZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgaS5NWEMgQ1BVZnJlcSBtb2R1bGUuCi0gKiBUaGUgQ1BVRlJFUSBkcml2ZXIgaXMgZm9yIGNvbnRyb2xpbmcgQ1BVIGZyZXF1ZW5jeS4gSXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UKKyAqIFRoZSBDUFVGUkVRIGRyaXZlciBpcyBmb3IgY29udHJvbGxpbmcgQ1BVIGZyZXF1ZW5jeS4gSXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UKICAqIHRoZSBDUFUgY2xvY2sgc3BlZWQgb24gdGhlIGZseS4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKaW5kZXggN2ExMDcyNC4uNmNkNmQ3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwpAQCAtMjk1LDYgKzI5NSwxMiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhpcyBsb2NrIGNsYXNzIHRlbGxzIGxvY2tkZXAgdGhhdCBHUElPIGlycXMgYXJlIGluIGEgZGlmZmVyZW50CisgKiBjYXRlZ29yeSB0aGFuIHRoZWlyIHBhcmVudHMsIHNvIGl0IHdvbid0IHJlcG9ydCBmYWxzZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZ3Bpb19sb2NrX2NsYXNzOworCiBpbnQgX19pbml0IG14Y19ncGlvX2luaXQoc3RydWN0IG14Y19ncGlvX3BvcnQgKnBvcnQsIGludCBjbnQpCiB7CiAJaW50IGksIGo7CkBAIC0zMTEsNiArMzE3LDcgQEAKIAkJX19yYXdfd3JpdGVsKH4wLCBwb3J0W2ldLmJhc2UgKyBHUElPX0lTUik7CiAJCWZvciAoaiA9IHBvcnRbaV0udmlydHVhbF9pcnFfc3RhcnQ7CiAJCQlqIDwgcG9ydFtpXS52aXJ0dWFsX2lycV9zdGFydCArIDMyOyBqKyspIHsKKwkJCWlycV9zZXRfbG9ja2RlcF9jbGFzcyhqLCAmZ3Bpb19sb2NrX2NsYXNzKTsKIAkJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihqLCAmZ3Bpb19pcnFfY2hpcCwKIAkJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJCXNldF9pcnFfZmxhZ3MoaiwgSVJRRl9WQUxJRCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGJkOWJiOTcuLjJlNDllNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0zMyw5ICszMyw5IEBACiAJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCiAJLmVuZG0KIAotCUAgdGhpcyBtYWNybyBjaGVja3Mgd2hpY2ggaW50ZXJydXB0IG9jY3VyZWQKKwlAIHRoaXMgbWFjcm8gY2hlY2tzIHdoaWNoIGludGVycnVwdCBvY2N1cnJlZAogCUAgYW5kIHJldHVybnMgaXRzIG51bWJlciBpbiBpcnFucgotCUAgYW5kIHJldHVybnMgaWYgYW4gaW50ZXJydXB0IG9jY3VyZWQgaW4gaXJxc3RhdAorCUAgYW5kIHJldHVybnMgaWYgYW4gaW50ZXJydXB0IG9jY3VycmVkIGluIGlycXN0YXQKIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAjaWZuZGVmIENPTkZJR19NWENfVFpJQwogCUAgTG9hZCBvZmZzZXQgJiBwcmlvcml0eSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaAppbmRleCAwNGMwZDA2Li42YmI5NmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaApAQCAtMjQsNyArMjQsNyBAQAogCiBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSB7CiAJdW5zaWduZWQgaW50IHdpZHRoOwkvKiBkYXRhIGJ1cyB3aWR0aCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBod19lY2M6MTsJLyogMCBpZiBzdXByZXNzIGhhcmR3YXJlIEVDQyAqLworCXVuc2lnbmVkIGludCBod19lY2M6MTsJLyogMCBpZiBzdXBwcmVzcyBoYXJkd2FyZSBFQ0MgKi8KIAl1bnNpZ25lZCBpbnQgZmxhc2hfYmJ0OjE7IC8qIHNldCB0byAxIHRvIHVzZSBhIGZsYXNoIGJhc2VkIGJidCAqLwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsJLyogcGFydGl0aW9uIHRhYmxlICovCiAJaW50IG5yX3BhcnRzOwkJCS8qIHNpemUgb2YgcGFydHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUwppbmRleCA0ZGRjZTU2Li44Mzk3YTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCkBAIC0xMjQsNiArMTI0LDggQEAKIDE6CiAJCUAgcmV0dXJuIGZyb20gRklRCiAJCXN1YnMJcGMsIGxyLCAjNAorCisJCS5hbGlnbgogaW14X3NzaV9maXFfYmFzZToKIAkJLndvcmQgMHgwCiBpbXhfc3NpX2ZpcV9yeF9idWZmZXI6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA3ZDlmODE1Li5lYTI4Zjk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogICogQ2xhaW1pbmcgR1BJT3MsIGFuZCBzZXR0aW5nIHRoZWlyIGRpcmVjdGlvbiBhbmQgaW5pdGlhbCB2YWx1ZXMsIGlzIHRoZQogICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGRldmljZSBkcml2ZXJzLiAgU28gaXMgcmVzcG9uZGluZyB0byBwcm9iZSgpLgogICoKLSAqIEJvYXJkLXNwZWNpZmljIGtub3dsZWdlIGxpa2UgY3JlYXRpbmcgZGV2aWNlcyBvciBwaW4gc2V0dXAgaXMgdG8gYmUKKyAqIEJvYXJkLXNwZWNpZmljIGtub3dsZWRnZSBsaWtlIGNyZWF0aW5nIGRldmljZXMgb3IgcGluIHNldHVwIGlzIHRvIGJlCiAgKiBrZXB0IG91dCBvZiBkcml2ZXJzIGFzIG11Y2ggYXMgcG9zc2libGUuICBJbiBwYXJ0aWN1bGFyLCBwaW4gc2V0dXAKICAqIG1heSBiZSBoYW5kbGVkIGJ5IHRoZSBib290IGxvYWRlciwgYW5kIGRyaXZlcnMgc2hvdWxkIGV4cGVjdCBpdCB3aWxsCiAgKiBub3JtYWxseSBoYXZlIGJlZW4gZG9uZSBieSB0aGUgdGltZSB0aGV5J3JlIHByb2JlZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCAyZWMzYjVkLi5jMjIyMTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0xMDE5LDcgKzEwMTksNyBAQAogICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KICAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKLSAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCisgKiBpcyBhIGNoYW5jZSBmb3IgQ1NTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGJldHdlZW4gdGhlIHR3byByZWFkcyByZXN1bHRpbmcKICAqIGluIGluY29ycmVjdCByZXR1cm4gdmFsdWUuCiAgKi8KIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX3NyY19wb3MoaW50IGxjaCkKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAgKiBJZiB0aGUgY2hhbm5lbCBpcyBydW5uaW5nIHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGludGVycnVwdHMgcHJpb3IgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbiBhbmQgcHJvY2VzcyB0aGUgcmV0dXJuZWQgdmFsdWUgYmVmb3JlIHJlLWVuYWJsaW5nIGludGVycnVwdCB0bwogICogcHJldmVudCByYWNlcyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gTm90ZSB0aGF0IGluIGNvbnRpbnVvdXMgbW9kZSB0aGVyZQotICogaXMgYSBjaGFuY2UgZm9yIENEU0FfTCByZWdpc3RlciBvdmVyZmxvdyBpbmJldHdlZW4gdGhlIHR3byByZWFkcyByZXN1bHRpbmcKKyAqIGlzIGEgY2hhbmNlIGZvciBDRFNBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZwogICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KICAqLwogZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCBkNmY5ZmEwZi4uY2FjMmU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTkzLDcgKzkzLDcgQEAKIC8qIFdyYXBwZXJzIGZvciAibmV3IHN0eWxlIiBHUElPIGNhbGxzLCB1c2luZyB0aGUgbmV3IGluZnJhc3RydWN0dXJlCiAgKiB3aGljaCBsZXRzIHVzIHBsdWcgaW4gRlBHQSwgSTJDLCBhbmQgb3RoZXIgaW1wbGVtZW50YXRpb25zLgogICogKgotICogVGhlIG9yaWdpbmFsIE9NQVAtc3BlY2ZpYyBjYWxscyBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgorICogVGhlIG9yaWdpbmFsIE9NQVAtc3BlY2lmaWMgY2FsbHMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKaW5kZXggMTJiMzE2MS4uMTUyNzkyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKQEAgLTkwLDcgKzkwLDcgQEAKIAkJLyogMS1iaXQgZWNjOiBzdG9yZWQgYXQgZW5kIG9mIHNwYXJlIGFyZWEgKi8KIAlPTUFQX0VDQ19IQU1NSU5HX0NPREVfREVGQVVMVCA9IDAsIC8qIERlZmF1bHQsIHMvdyBtZXRob2QgKi8KIAlPTUFQX0VDQ19IQU1NSU5HX0NPREVfSFcsIC8qIGdwbWMgdG8gZGV0ZWN0IHRoZSBlcnJvciAqLwotCQkvKiAxLWJpdCBlY2M6IHN0b3JlZCBhdCBiZWdpbmluZyBvZiBzcGFyZSBhcmVhIGFzIHJvbWNvZGUgKi8KKwkJLyogMS1iaXQgZWNjOiBzdG9yZWQgYXQgYmVnaW5uaW5nIG9mIHNwYXJlIGFyZWEgYXMgcm9tY29kZSAqLwogCU9NQVBfRUNDX0hBTU1JTkdfQ09ERV9IV19ST01DT0RFLCAvKiBncG1jIG1ldGhvZCAmIHJvbWNvZGUgbGF5b3V0ICovCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IDhhNTFmZDUuLjM0ZmMzMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC03OTMsNiArNzkzLDggQEAKIAljbGtfZW5hYmxlKG9iai0+Y2xrKTsKIAllcnJzID0gaW9tbXVfcmVwb3J0X2ZhdWx0KG9iaiwgJmRhKTsKIAljbGtfZGlzYWJsZShvYmotPmNsayk7CisJaWYgKGVycnMgPT0gMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJLyogRmF1bHQgY2FsbGJhY2sgb3IgVExCL1BURSBEeW5hbWljIGxvYWRpbmcgKi8KIAlpZiAob2JqLT5pc3IgJiYgIW9iai0+aXNyKG9iaiwgZGEsIGVycnMsIG9iai0+aXNyX3ByaXYpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBkNTk4ZDlmLi41NTg3YWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkJLyogcmVzZW5kICovCiAJCXJldHVybiAtMTsKIAl9IGVsc2UgewotCQkvKiB3YWl0IGZvciByZWNpZXZlIGNvbmZpcm1hdGlvbiAqLworCQkvKiB3YWl0IGZvciByZWNlaXZlIGNvbmZpcm1hdGlvbiAqLwogCQlpbnQgYXR0ZW1wcyA9IDA7CiAJCXdoaWxlICghKE1DQlNQX1JFQUQobWNic3AsIFNQQ1IxKSAmIFJSRFkpKSB7CiAJCQlpZiAoYXR0ZW1wcysrID4gMTAwMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCmluZGV4IDc1ZjY1NjQuLjg5ZTY4ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKQEAgLTQzNCw3ICs0MzQsNyBAQAogICoKICAqIG1mcF9pbml0X2FkZHIoKSAtIGFjY2VwdHMgYSB0YWJsZSBvZiAibWZwX2FkZHJfbWFwIiBzdHJ1Y3R1cmUsIHdoaWNoCiAgKiByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgTUZQIHBpbnMgZnJvbSAic3RhcnQiIHRvICJlbmQiLCB3aXRoIHRoZSBvZmZzZXQKLSAqIGJlZ2luaW5nIGF0ICJvZmZzZXQiLCB0byBkZWZpbmUgYSBzaW5nbGUgcGluLCBsZXQgImVuZCIgPSAtMS4KKyAqIGJlZ2lubmluZyBhdCAib2Zmc2V0IiwgdG8gZGVmaW5lIGEgc2luZ2xlIHBpbiwgbGV0ICJlbmQiID0gLTEuCiAgKgogICogdXNlCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IGMyMDY0YzMuLjAyOTFiZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKIG9iai0kKENPTkZJR19DUFVfRlJFUV9TM0MyNFhYKQkrPSBjcHUtZnJlcS5vCiBvYmotJChDT05GSUdfQ1BVX0ZSRVFfUzNDMjRYWF9ERUJVR0ZTKSArPSBjcHUtZnJlcS1kZWJ1Z2ZzLm8KIAotIyBBcmNoaXRlY3R1cmUgZGVwZW5kYW50IGJ1aWxkcworIyBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGJ1aWxkcwogCiBvYmotJChDT05GSUdfUE1fU0lNVEVDKQkJKz0gcG0tc2ltdGVjLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUtZnJlcS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKaW5kZXggZWVhNzVmZi4uYjNkM2QwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCiAJLyogd2hpbHN0IHdlIHdpbGwgYmUgY2FsbGVkIGxhdGVyIG9uLCB3ZSB0cnkgYW5kIHJlLXNldCB0aGUKIAkgKiBjcHUgZnJlcXVlbmNpZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB0aGF0IHdlIGRvIG5vdCBlbmQKLQkgKiB1cCByZXN1bWluZyBkZXZpY2VzIGFuZCB0aGVuIGltbWVkaWF0bGV5IGhhdmluZyB0byByZS1zZXQKKwkgKiB1cCByZXN1bWluZyBkZXZpY2VzIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGhhdmluZyB0byByZS1zZXQKIAkgKiBhIG51bWJlciBvZiBzZXR0aW5ncyBvbmNlIHRoZXNlIGRldmljZXMgaGF2ZSByZXN0YXJ0ZWQuCiAJICoKIAkgKiBhcyBhIG5vdGUsIGl0IGlzIGV4cGVjdGVkIGRldmljZXMgYXJlIG5vdCB1c2VkIHVudGlsIHRoZXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCA2YWQyNzRlLi4yN2VhODUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC01NTcsNyArNTU3LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEXzFSVU5OSU5HOgotCQkvKiBJIGJlbGl2ZSBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IGhhdmUgYW55dGhpbmcgdG8gZG8KKwkJLyogSSBiZWxpZXZlIGluIHRoaXMgY2FzZSB3ZSBkbyBub3QgaGF2ZSBhbnl0aGluZyB0byBkbwogCQkgKiB1bnRpbCB0aGUgbmV4dCBidWZmZXIgY29tZXMgYWxvbmcsIGFuZCB3ZSB0dXJuIG9mZiB0aGUKIAkJICogcmVsb2FkICovCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS1ncGlvaW50LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9pcnEtZ3Bpb2ludC5jCmluZGV4IDQ2ZGQwNzguLmNkNmQ2N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS1ncGlvaW50LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLWdwaW9pbnQuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJfQogCiAJLyoKLQkgKiBjaGFpbmVkIEdQSU8gaXJxIGhhcyBiZWVuIHN1Y2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGFsbG9jYXRlIG5ldyBncGlvCisJICogY2hhaW5lZCBHUElPIGlycSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgYWxsb2NhdGUgbmV3IGdwaW8KIAkgKiBpbnQgZ3JvdXAgYW5kIGFzc2lnbiBpcnEgbnVibWVycwogCSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvcG0uYwppbmRleCBkNTkyYjYzLi5kMTVkYzQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL3BtLmMKQEAgLTE5LDE3ICsxOSw2IEBACiAKICNkZWZpbmUgUEZYICJzNXAgcG06ICIKIAotLyogczNjX3BtX2NoZWNrX3Jlc3VtZV9waW4KLSAqCi0gKiBjaGVjayB0byBzZWUgaWYgdGhlIHBpbiBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3Igc2xlZXAgbW9kZSwgYW5kCi0gKiBtYWtlIGFueSBuZWNlc3NhcnkgYWRqdXN0bWVudHMgaWYgaXQgaXMgbm90Ci0qLwotCi1zdGF0aWMgdm9pZCBzM2NfcG1fY2hlY2tfcmVzdW1lX3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgaXJxb2ZmcykKLXsKLQkvKiBub3RoaW5nIGhlcmUgeWV0ICovCi19Ci0KIC8qIHMzY19wbV9jb25maWd1cmVfZXh0aW50CiAgKgogICogY29uZmlndXJlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jbG9jay5oCmluZGV4IDlhODJiODguLjk4M2M1NzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKQEAgLTIxLDcgKzIxLDcgQEAKICAqIEBzZXRfcGFyZW50OiBzZXQgdGhlIGNsb2NrJ3MgcGFyZW50LCBzZWUgY2xrX3NldF9wYXJlbnQoKS4KICAqCiAgKiBHcm91cCB0aGUgY29tbW9uIGNsb2NrIGltcGxlbWVudGF0aW9ucyB0b2dldGhlciBzbyB0aGF0IHdlCi0gKiBkb24ndCBoYXZlIHRvIGtlZXAgc2V0dGluZyB0aGUgc2FtZSBmaWVscyBhZ2Fpbi4gV2UgbGVhdmUKKyAqIGRvbid0IGhhdmUgdG8ga2VlcCBzZXR0aW5nIHRoZSBzYW1lIGZpZWxkcyBhZ2Fpbi4gV2UgbGVhdmUKICAqIGVuYWJsZSBpbiBzdHJ1Y3QgY2xrLgogICoKICAqIEFkZGluZyBhbiBleHRyYSBsYXllciBvZiBpbmRpcmVjdGlvbiBpbnRvIHRoZSBwcm9jZXNzIHNob3VsZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy1oZWxwZXJzLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaAppbmRleCA1NjAzZGIwLi4zYWQ4Mzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaApAQCAtMTE0LDcgKzExNCw3IEBACiAgKiBvZiBjb250cm9sIHBlciBHUElPLCBnZW5lcmFsbHkgaW4gdGhlIGZvcm0gb2Y6CiAgKgkwMDAwID0gSW5wdXQKICAqCTAwMDEgPSBPdXRwdXQKLSAqCW90aGVycyA9IFNwZWNpYWwgZnVuY3Rpb25zIChkZXBlbmRhbnQgb24gYmFuaykKKyAqCW90aGVycyA9IFNwZWNpYWwgZnVuY3Rpb25zIChkZXBlbmRlbnQgb24gYmFuaykKICAqCiAgKiBOb3RlLCBzaW5jZSB0aGUgY29kZSB0byBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIHR3byBjb250cm9sCiAgKiByZWdpc3RlcnMgaW5zdGVhZCBvZiBvbmUsIHdlIGRvIG5vdCBoYXZlIGEgc2VwYXJhdGUgc2V0IG9mIGZ1bmN0aW9ucyBmb3IKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaAppbmRleCA1ZTA0ZmE2Li4xNzYyZGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy5oCkBAIC0xMjUsNyArMTI1LDcgQEAKICAqCiAgKiBUaGVzZSB2YWx1ZXMgY29udHJvbCB0aGUgc3RhdGUgb2YgdGhlIHdlYWsgcHVsbC17dXAsZG93bn0gcmVzaXN0b3JzCiAgKiBhdmFpbGFibGUgb24gbW9zdCBwaW5zIG9uIHRoZSBTM0Mgc2VyaWVzLiBOb3QgYWxsIGNoaXBzIHN1cHBvcnQgYm90aAotICogdXAgb3IgZG93biBzZXR0aW5ncywgYW5kIGl0IG1heSBiZSBkZXBlbmRhbnQgb24gdGhlIGNoaXAgdGhhdCBpcyBiZWluZworICogdXAgb3IgZG93biBzZXR0aW5ncywgYW5kIGl0IG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIGNoaXAgdGhhdCBpcyBiZWluZwogICogdXNlZCB0byB3aGV0aGVyIHRoZSBwYXJ0aWN1bGFyIG1vZGUgaXMgYXZhaWxhYmxlLgogICovCiAjZGVmaW5lIFMzQ19HUElPX1BVTExfTk9ORQkoKF9fZm9yY2UgczNjX2dwaW9fcHVsbF90KTB4MDApCkBAIC0xMzgsNyArMTM4LDcgQEAKICAqIEBwdWxsOiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHB1bGwgcmVzaXN0b3IuCiAgKgogICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcHVsbC17dXAsZG93bn0gcmVzaXN0b3IgZm9yIHRoZQotICogc3BlY2lmaWVkIHBpbi4gSXQgd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsbCwgb3IgYSBuZWdhdGl2ZSBlcnJvcgorICogc3BlY2lmaWVkIHBpbi4gSXQgd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yCiAgKiBjb2RlIGlmIHRoZSBwaW4gY2Fubm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBwdWxsIHNldHRpbmcuCiAgKgogICogQHB1bGwgaXMgb25lIG9mIFMzQ19HUElPX1BVTExfTk9ORSwgUzNDX0dQSU9fUFVMTF9ET1dOIG9yIFMzQ19HUElPX1BVTExfVVAuCkBAIC0yMDIsNyArMjAyLDcgQEAKICAqIEBkcnZzdHI6IFRoZSBuZXcgdmFsdWUgb2YgdGhlIGRyaXZlciBzdHJlbmd0aAogICoKICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZHJpdmVyIHN0cmVuZ3RoIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHBpbi4KLSAqIEl0IHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bGwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGUgcGluCisgKiBJdCB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGUgcGluCiAgKiBjYW5ub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIHNldHRpbmcuCiAqLwogZXh0ZXJuIGludCBzNXBfZ3Bpb19zZXRfZHJ2c3RyKHVuc2lnbmVkIGludCBwaW4sIHM1cF9ncGlvX2RydnN0cl90IGRydnN0cik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNvcmUuaAppbmRleCBkYWMzNWQwLi44Y2FkNGNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY29yZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jb3JlLmgKQEAgLTEwOCw3ICsxMDgsNyBAQAogICogb2YgY29udHJvbCBwZXIgR1BJTywgZ2VuZXJhbGx5IGluIHRoZSBmb3JtIG9mOgogICogMDAwMCA9IElucHV0CiAgKiAwMDAxID0gT3V0cHV0Ci0gKiBvdGhlcnMgPSBTcGVjaWFsIGZ1bmN0aW9ucyAoZGVwZW5kYW50IG9uIGJhbmspCisgKiBvdGhlcnMgPSBTcGVjaWFsIGZ1bmN0aW9ucyAoZGVwZW5kZW50IG9uIGJhbmspCiAgKgogICogTm90ZSwgc2luY2UgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSB0d28gY29udHJvbAogICogcmVnaXN0ZXJzIGluc3RlYWQgb2Ygb25lLCB3ZSBkbyBub3QgaGF2ZSBhIHNlcGFyYXRlIHNldCBvZiBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9zZGhjaS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9zZGhjaS5oCmluZGV4IGIwYmRmMTYuLjA1OGUwOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmgKQEAgLTU3LDcgKzU3LDcgQEAKICAqIEBjZmdfZ3BpbzogQ29uZmlndXJlIHRoZSBHUElPIGZvciBhIHNwZWNpZmljIGNhcmQgYml0LXdpZHRoCiAgKiBAY2ZnX2NhcmQ6IENvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlIGZvciBhIHNwZWNpZmljIGNhcmQgYW5kIHNwZWVkLiBUaGlzCiAgKiAgICAgICAgICAgIGlzIG5lY2Vzc2FyeSB0aGUgY29udHJvbGxlcnMgYW5kL29yIEdQSU8gYmxvY2tzIHJlcXVpcmUgdGhlCi0gKgkgICAgICBjaGFuZ2luZyBvZiBkcml2ZXItc3RyZW5ndGggYW5kIG90aGVyIGNvbnRyb2xzIGRlcGVuZGFudCBvbgorICoJICAgICAgY2hhbmdpbmcgb2YgZHJpdmVyLXN0cmVuZ3RoIGFuZCBvdGhlciBjb250cm9scyBkZXBlbmRlbnQgb24KICAqCSAgICAgIHRoZSBjYXJkIGFuZCBzcGVlZCBvZiBvcGVyYXRpb24uCiAgKgogICogSW5pdGlhbGlzYXRpb24gZGF0YSBzcGVjaWZpYyB0byBlaXRoZXIgdGhlIG1hY2hpbmUgb3IgdGhlIHBsYXRmb3JtCkBAIC0xMDgsNyArMTA4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHMzY19oc21tYzJfZGVmX3BsYXRkYXRhOwogZXh0ZXJuIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgczNjX2hzbW1jM19kZWZfcGxhdGRhdGE7CiAKLS8qIEhlbHBlciBmdW5jdGlvbiBhdmFpbGFibGl0eSAqLworLyogSGVscGVyIGZ1bmN0aW9uIGF2YWlsYWJpbGl0eSAqLwogCiBleHRlcm4gdm9pZCBzM2MyNDE2X3NldHVwX3NkaGNpMF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKIGV4dGVybiB2b2lkIHMzYzI0MTZfc2V0dXBfc2RoY2kxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLWNoZWNrLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2suYwppbmRleCBlNGJhZjc2Li42YjczM2ZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2suYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2suYwpAQCAtMTY0LDcgKzE2NCw2IEBACiAgKi8KIHN0YXRpYyB1MzIgKnMzY19wbV9ydW5jaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCiB7Ci0Jdm9pZCAqc2F2ZV9hdCA9IHBoeXNfdG9fdmlydChzM2Nfc2xlZXBfc2F2ZV9waHlzKTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJdW5zaWduZWQgbG9uZyBsZWZ0OwogCXZvaWQgKnN0a3BhZ2U7CkBAIC0xOTIsMTEgKzE5MSw2IEBACiAJCQlnb3RvIHNraXBfY2hlY2s7CiAJCX0KIAotCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc2F2ZV9hdCwgMzIqNCApKSB7Ci0JCQlTM0NfUE1EQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc2F2ZSBibG9jayBpblxuIiwgYWRkcik7Ci0JCQlnb3RvIHNraXBfY2hlY2s7Ci0JCX0KLQogCQkvKiBjYWxjdWxhdGUgYW5kIGNoZWNrIHRoZSBjaGVja3N1bSAqLwogCiAJCWNhbGMgPSBjcmMzMl9sZSh+MCwgcHRyLCBsZWZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMKaW5kZXggZDViNThkMy4uNWMwYTQ0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMKQEAgLTIxNCw4ICsyMTQsOSBAQAogICoKICAqIHByaW50IGFueSBJUlFzIGFzc2VydGVkIGF0IHJlc3VtZSB0aW1lIChpZSwgd2Ugd29rZSBmcm9tKQogKi8KLXN0YXRpYyB2b2lkIHMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKGludCBzdGFydCwgdW5zaWduZWQgbG9uZyB3aGljaCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBtYXNrKQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoaW50IHN0YXJ0LAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyB3aGljaCwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3MzYy1wbDMzMC5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3MzYy1wbDMzMC5jCmluZGV4IGI0ZmY4ZDcuLmY4NTYzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9zM2MtcGwzMzAuYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvczNjLXBsMzMwLmMKQEAgLTY4LDcgKzY4LDcgQEAKICAqIEByZXE6IFR3byByZXF1ZXN0cyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBQTDMzMCBlbmdpbmUuCiAgKiBAY2FsbGJhY2tfZm46IENhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBjbGllbnQuCiAgKiBAcnFjZmc6IENoYW5uZWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHhmZXJzLgotICogQHhmZXJfaGVhZDogUG9pbnRlciB0byB0aGUgeGZlciB0byBiZSBuZXh0IGV4Y2VjdXRlZC4KKyAqIEB4ZmVyX2hlYWQ6IFBvaW50ZXIgdG8gdGhlIHhmZXIgdG8gYmUgbmV4dCBleGVjdXRlZC4KICAqIEBkbWFjOiBQb2ludGVyIHRvIHRoZSBETUFDIHRoYXQgbWFuYWdlcyB0aGlzIGNoYW5uZWwsIE5VTEwgaWYgdGhlCiAgKiAJY2hhbm5lbCBpcyBhdmFpbGFibGUgdG8gYmUgYWNxdWlyZWQuCiAgKiBAY2xpZW50OiBDbGllbnQgb2YgdGhpcyBjaGFubmVsLiBOVUxMIGlmIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKaW5kZXggMmFlNjYwNi4uZmNjMGQwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9jbG9jay5oCkBAIC04OSw3ICs4OSw3IEBACiAgKiBAc2libGluZzogbm9kZSBmb3IgbGlzdCBvZiBjbG9ja3MgaGF2aW5nIHNhbWUgcGFyZW50cwogICogQHByaXZhdGVfZGF0YTogY2xvY2sgc3BlY2lmaWMgcHJpdmF0ZSBkYXRhCiAgKiBAbm9kZTogbGlzdCB0byBtYWludGFpbiBjbG9ja3MgbGluZWFybHkKLSAqIEBjbDogY2xvY2tsb29rIHVwIGFzc29pY2F0ZWQgd2l0aCB0aGlzIGNsb2NrCisgKiBAY2w6IGNsb2NrbG9vayB1cCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjbG9jawogICogQGRlbnQ6IG9iamVjdCBmb3IgZGVidWdmcwogICovCiBzdHJ1Y3QgY2xrIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCBiYmYzZGEwLi5mNzQ2OTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC03OCw2ICs3OCwxNCBAQAogCXB1dF9jcHUoKTsKIH0KIAorc3RhdGljIHZvaWQgdmZwX3RocmVhZF9jb3B5KHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqcGFyZW50ID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCisJdmZwX3N5bmNfaHdzdGF0ZShwYXJlbnQpOworCXRocmVhZC0+dmZwc3RhdGUgPSBwYXJlbnQtPnZmcHN0YXRlOworfQorCiAvKgogICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgJ2NtZCdzLCB0aGUgZm9sbG93aW5nCiAgKiBpcyB0cnVlIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgcnVuOgpAQCAtMTA0LDEyICsxMTIsMTcgQEAKIHN0YXRpYyBpbnQgdmZwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB2OworCXUzMiBmcGV4YzsKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgaW50IGNwdTsKKyNlbmRpZgogCi0JaWYgKGxpa2VseShjbWQgPT0gVEhSRUFEX05PVElGWV9TV0lUQ0gpKSB7Ci0JCXUzMiBmcGV4YyA9IGZtcngoRlBFWEMpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSFJFQURfTk9USUZZX1NXSVRDSDoKKwkJZnBleGMgPSBmbXJ4KEZQRVhDKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLQkJdW5zaWduZWQgaW50IGNwdSA9IHRocmVhZC0+Y3B1OworCQljcHUgPSB0aHJlYWQtPmNwdTsKIAogCQkvKgogCQkgKiBPbiBTTVAsIGlmIFZGUCBpcyBlbmFibGVkLCBzYXZlIHRoZSBvbGQgc3RhdGUgaW4KQEAgLTEzNCwxMyArMTQ3LDIwIEBACiAJCSAqIG9sZCBzdGF0ZS4KIAkJICovCiAJCWZteHIoRlBFWEMsIGZwZXhjICYgfkZQRVhDX0VOKTsKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCX0KKwkJYnJlYWs7CiAKLQlpZiAoY21kID09IFRIUkVBRF9OT1RJRllfRkxVU0gpCisJY2FzZSBUSFJFQURfTk9USUZZX0ZMVVNIOgogCQl2ZnBfdGhyZWFkX2ZsdXNoKHRocmVhZCk7Ci0JZWxzZQorCQlicmVhazsKKworCWNhc2UgVEhSRUFEX05PVElGWV9FWElUOgogCQl2ZnBfdGhyZWFkX2V4aXQodGhyZWFkKTsKKwkJYnJlYWs7CisKKwljYXNlIFRIUkVBRF9OT1RJRllfQ09QWToKKwkJdmZwX3RocmVhZF9jb3B5KHRocmVhZCk7CisJCWJyZWFrOworCX0KIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBmZjViN2NmLi4xNjA1NDNkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC05NCw2ICs5NCwxMyBAQAogCiAjZGVmaW5lIEVUSF9JTlZBTElEX1BIWQkweGZmCiAKKy8qIGJvYXJkIGluZm9ybWF0aW9uICovCisjZGVmaW5lIEFUQUdfQk9BUkRJTkZPCTB4NTQ0MTAwMDgKKworc3RydWN0IHRhZ19ib2FyZGluZm8geworCXUzMglib2FyZF9udW1iZXI7Cit9OworCiBzdHJ1Y3QgdGFnIHsKIAlzdHJ1Y3QgdGFnX2hlYWRlciBoZHI7CiAJdW5pb24gewpAQCAtMTAyLDYgKzEwOSw3IEBACiAJCXN0cnVjdCB0YWdfY21kbGluZSBjbWRsaW5lOwogCQlzdHJ1Y3QgdGFnX2Nsb2NrIGNsb2NrOwogCQlzdHJ1Y3QgdGFnX2V0aGVybmV0IGV0aGVybmV0OworCQlzdHJ1Y3QgdGFnX2JvYXJkaW5mbyBib2FyZGluZm87CiAJfSB1OwogfTsKIApAQCAtMTI4LDYgKzEzNiw3IEBACiAKIGV4dGVybiByZXNvdXJjZV9zaXplX3QgZmJtZW1fc3RhcnQ7CiBleHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGZibWVtX3NpemU7CitleHRlcm4gdTMyIGJvYXJkX251bWJlcjsKIAogdm9pZCBzZXR1cF9wcm9jZXNzb3Iodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3NldHVwLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9zZXR1cC5jCmluZGV4IDVjNzA4MzkuLmJiMDk3NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvc2V0dXAuYwpAQCAtMzkxLDYgKzM5MSwyMSBAQAogX190YWd0YWJsZShBVEFHX0NMT0NLLCBwYXJzZV90YWdfY2xvY2spOwogCiAvKgorICogVGhlIGJvYXJkX251bWJlciBjb3JyZXNwb25kIHRvIHRoZSBiZC0+YmlfYm9hcmRfbnVtYmVyIGluIFUtQm9vdC4gVGhpcworICogcGFyYW1ldGVyIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyBpbml0aWFsaXNhdGlvbiBhbmQgY2FuIGJlIHVzZWQgaW4gc29tZQorICoga2luZCBvZiBib2FyZCBpZGVudGlmaWNhdGlvbi4KKyAqLwordTMyIF9faW5pdGRhdGEgYm9hcmRfbnVtYmVyOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfYm9hcmRpbmZvKHN0cnVjdCB0YWcgKnRhZykKK3sKKwlib2FyZF9udW1iZXIgPSB0YWctPnUuYm9hcmRpbmZvLmJvYXJkX251bWJlcjsKKworCXJldHVybiAwOworfQorX190YWd0YWJsZShBVEFHX0JPQVJESU5GTywgcGFyc2VfdGFnX2JvYXJkaW5mbyk7CisKKy8qCiAgKiBTY2FuIHRoZSB0YWcgdGFibGUgZm9yIHRoaXMgdGFnLCBhbmQgY2FsbCBpdHMgcGFyc2UgZnVuY3Rpb24uIFRoZQogICogdGFnIHRhYmxlIGlzIGJ1aWx0IGJ5IHRoZSBsaW5rZXIgZnJvbSBhbGwgdGhlIF9fdGFndGFibGUKICAqIGRlY2xhcmF0aW9ucy4KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3RyYXBzLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jCmluZGV4IGI5MWIyMDQuLjdhYTI1NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvdHJhcHMuYwpAQCAtOTUsMjggKzk1LDYgQEAKIAlpbmZvLnNpX2NvZGUgPSBjb2RlOwogCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHI7CiAJZm9yY2Vfc2lnX2luZm8oc2lnbnIsICZpbmZvLCBjdXJyZW50KTsKLQotCS8qCi0JICogSW5pdCBnZXRzIG5vIHNpZ25hbHMgdGhhdCBpdCBkb2Vzbid0IGhhdmUgYSBoYW5kbGVyIGZvci4KLQkgKiBUaGF0J3MgYWxsIHZlcnkgd2VsbCwgYnV0IGlmIGl0IGhhcyBjYXVzZWQgYSBzeW5jaHJvbm91cwotCSAqIGV4Y2VwdGlvbiBhbmQgd2UgaWdub3JlIHRoZSByZXN1bHRpbmcgc2lnbmFsLCBpdCB3aWxsIGp1c3QKLQkgKiBnZW5lcmF0ZSB0aGUgc2FtZSBleGNlcHRpb24gb3ZlciBhbmQgb3ZlciBhZ2FpbiBhbmQgd2UgZ2V0Ci0JICogbm93aGVyZS4gIEJldHRlciB0byBraWxsIGl0IGFuZCBsZXQgdGhlIGtlcm5lbCBwYW5pYy4KLQkgKi8KLQlpZiAoaXNfZ2xvYmFsX2luaXQoY3VycmVudCkpIHsKLQkJX19zaWdoYW5kbGVyX3QgaGFuZGxlcjsKLQotCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJaGFuZGxlciA9IGN1cnJlbnQtPnNpZ2hhbmQtPmFjdGlvbltzaWduci0xXS5zYS5zYV9oYW5kbGVyOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlpZiAoaGFuZGxlciA9PSBTSUdfREZMKSB7Ci0JCQkvKiBpbml0IGhhcyBnZW5lcmF0ZWQgYSBzeW5jaHJvbm91cyBleGNlcHRpb24KLQkJCSAgIGFuZCBpdCBkb2Vzbid0IGhhdmUgYSBoYW5kbGVyIGZvciB0aGUgc2lnbmFsICovCi0JCQlwcmludGsoS0VSTl9DUklUICJpbml0IGhhcyBnZW5lcmF0ZWQgc2lnbmFsICVsZCAiCi0JCQkgICAgICAgImJ1dCBoYXMgbm8gaGFuZGxlciBmb3IgaXRcbiIsIHNpZ25yKTsKLQkJCWRvX2V4aXQoc2lnbnIpOwotCQl9Ci0JfQogfQogCiBhc21saW5rYWdlIHZvaWQgZG9fbm1pKHVuc2lnbmVkIGxvbmcgZWNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY2xvY2suYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY2xvY2suYwppbmRleCA0NDJmMDhjLi44NjkyNWZkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jbG9jay5jCkBAIC0zNSwyMiArMzUsMzAgQEAKIAlzcGluX3VubG9jaygmY2xrX2xpc3RfbG9jayk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrICpfX2Nsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaywgJmF0MzJfY2xvY2tfbGlzdCwgbGlzdCkgeworCQlpZiAoY2xrLT5kZXYgPT0gZGV2ICYmIHN0cmNtcChpZCwgY2xrLT5uYW1lKSA9PSAwKSB7CisJCQlyZXR1cm4gY2xrOworCQl9CisJfQorCisJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cit9CisKIHN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKIAlzcGluX2xvY2soJmNsa19saXN0X2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZhdDMyX2Nsb2NrX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGNsay0+ZGV2ID09IGRldiAmJiBzdHJjbXAoaWQsIGNsay0+bmFtZSkgPT0gMCkgewotCQkJc3Bpbl91bmxvY2soJmNsa19saXN0X2xvY2spOwotCQkJcmV0dXJuIGNsazsKLQkJfQotCX0KLQorCWNsayA9IF9fY2xrX2dldChkZXYsIGlkKTsKIAlzcGluX3VubG9jaygmY2xrX2xpc3RfbG9jayk7Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlyZXR1cm4gY2xrOwogfQorCiBFWFBPUlRfU1lNQk9MKGNsa19nZXQpOwogCiB2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQpAQCAtMjU3LDE1ICsyNjUsMTUgQEAKIAlzcGluX2xvY2soJmNsa19saXN0X2xvY2spOwogCiAJLyogc2hvdyBjbG9jayB0cmVlIGFzIGRlcml2ZWQgZnJvbSB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgKi8KLQljbGsgPSBjbGtfZ2V0KE5VTEwsICJvc2MzMmsiKTsKKwljbGsgPSBfX2Nsa19nZXQoTlVMTCwgIm9zYzMyayIpOwogCWR1bXBfY2xvY2soY2xrLCAmcik7CiAJY2xrX3B1dChjbGspOwogCi0JY2xrID0gY2xrX2dldChOVUxMLCAib3NjMCIpOworCWNsayA9IF9fY2xrX2dldChOVUxMLCAib3NjMCIpOwogCWR1bXBfY2xvY2soY2xrLCAmcik7CiAJY2xrX3B1dChjbGspOwogCi0JY2xrID0gY2xrX2dldChOVUxMLCAib3NjMSIpOworCWNsayA9IF9fY2xrX2dldChOVUxMLCAib3NjMSIpOwogCWR1bXBfY2xvY2soY2xrLCAmcik7CiAJY2xrX3B1dChjbGspOwogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYwppbmRleCA0N2JhNGI5Li5mYmMyYWVhIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMKQEAgLTYxLDM0ICs2MSwzNCBAQAogc3RhdGljIHN0cnVjdCBlaWMgKm5taV9laWM7CiBzdGF0aWMgYm9vbCBubWlfZW5hYmxlZDsKIAotc3RhdGljIHZvaWQgZWljX2Fja19pcnEoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgZWljX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCWVpY193cml0ZWwoZWljLCBJQ1IsIDEgPDwgKGQtPmlycSAtIGVpYy0+Zmlyc3RfaXJxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVpY19tYXNrX2lycShzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgdm9pZCBlaWNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCWVpY193cml0ZWwoZWljLCBJRFIsIDEgPDwgKGQtPmlycSAtIGVpYy0+Zmlyc3RfaXJxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVpY19tYXNrX2Fja19pcnEoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgZWljX21hc2tfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGVpYyAqZWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisJc3RydWN0IGVpYyAqZWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJZWljX3dyaXRlbChlaWMsIElDUiwgMSA8PCAoZC0+aXJxIC0gZWljLT5maXJzdF9pcnEpKTsKIAllaWNfd3JpdGVsKGVpYywgSURSLCAxIDw8IChkLT5pcnEgLSBlaWMtPmZpcnN0X2lycSkpOwogfQogCi1zdGF0aWMgdm9pZCBlaWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgdm9pZCBlaWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGVpYyAqZWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisJc3RydWN0IGVpYyAqZWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJZWljX3dyaXRlbChlaWMsIElFUiwgMSA8PCAoZC0+aXJxIC0gZWljLT5maXJzdF9pcnEpKTsKIH0KIAotc3RhdGljIGludCBlaWNfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfY2hpcCAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3N0YXRpYyBpbnQgZWljX3NldF9pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7Ci0Jc3RydWN0IGVpYyAqZWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisJc3RydWN0IGVpYyAqZWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBpbnQgaSA9IGlycSAtIGVpYy0+Zmlyc3RfaXJxOwogCXUzMiBtb2RlLCBlZGdlLCBsZXZlbDsKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaW50X2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFyZWdzIHx8ICFpbnRfaXJxKSB7CisJaWYgKCFyZWdzIHx8IChpbnQpaW50X2lycSA8PSAwKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgIm1pc3NpbmcgcmVncyBhbmQvb3IgaXJxIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3Bpby5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9waW8uYwppbmRleCBmMzA4ZTFkLi4yZTBhYTg1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3Bpby5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcGlvLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCXBpb193cml0ZWwocGlvLCBJRFIsIDEgPDwgKGdwaW8gJiAweDFmKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdwaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpKQorc3RhdGljIHZvaWQgZ3Bpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZAkJZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJc3RydWN0IHBpb19kZXZpY2UJKnBpbyA9ICZwaW9fZGV2W2dwaW8gPj4gNV07CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3BtLWF0MzJhcDcwMHguUyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcG0tYXQzMmFwNzAweC5TCmluZGV4IDE3NTAzYjAuLmY4NjhmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcG0tYXQzMmFwNzAweC5TCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcG0tYXQzMmFwNzAweC5TCkBAIC01Myw3ICs1Myw3IEBACiAJc3QudwlyOFtUSV9mbGFnc10sIHI5CiAJdW5tYXNrX2ludGVycnVwdHMKIAlzbGVlcAlDUFVfU0xFRVBfSURMRQotCS5zaXplCWNwdV9pZGxlX3NsZWVwLCAuIC0gY3B1X2lkbGVfc2xlZXAKKwkuc2l6ZQljcHVfZW50ZXJfaWRsZSwgLiAtIGNwdV9lbnRlcl9pZGxlCiAKIAkvKgogCSAqIENvbW1vbiByZXR1cm4gcGF0aCBmb3IgUE0gZnVuY3Rpb25zIHRoYXQgZG9uJ3QgcnVuIGZyb20KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZy5kZWJ1ZwppbmRleCBhY2I4Mzc5Li4yNjQxNzMxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnCkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgICAgYmUgcmVwb3J0ZWQgbXVsdGlwbGUgY3ljbGVzIGFmdGVyIHRoZSBlcnJvciBoYXBwZW5zLiBUaGlzIGRlbGF5CiAJICBjYW4gY2F1c2UgdGhlIHdyb25nIGFwcGxpY2F0aW9uLCBvciBldmVuIHRoZSBrZXJuZWwgdG8gcmVjZWl2ZSBhCiAJICBzaWduYWwgdG8gYmUga2lsbGVkLiBJZiB5b3UgYXJlIGdldHRpbmcgSFcgZXJyb3JzIGluIHlvdXIgc3lzdGVtLAotCSAgdHJ5IHR1cm5pbmcgdGhpcyBvbiB0byBlbnN1cmUgdGhleSBhcmUgYXQgbGVhc3QgY29tbWluZyBmcm9tIHRoZQorCSAgdHJ5IHR1cm5pbmcgdGhpcyBvbiB0byBlbnN1cmUgdGhleSBhcmUgYXQgbGVhc3QgY29taW5nIGZyb20gdGhlCiAJICBwcm9wZXIgdGhyZWFkLgogCiAJICBPbiBwcm9kdWN0aW9uIHN5c3RlbXMsIGl0IGlzIHNhZmUgKGFuZCBhIHNtYWxsIG9wdGltaXphdGlvbikgdG8gc2F5IE4uCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAxOWUyYzdjLi40NGJkMGNjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTE5LDExICsxOSwxMSBAQAogICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KICAqLwogI2RlZmluZSBub3AoKSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3A7XG5cdCIgOiA6ICkKLSNkZWZpbmUgbWIoKSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiAgIDogOiA6ICJtZW1vcnkiKQotI2RlZmluZSBybWIoKSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiICAgOiA6IDogIm1lbW9yeSIpCi0jZGVmaW5lIHdtYigpICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgICA6IDogOiAibWVtb3J5IikKLSNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgKHZvaWQpIHhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQotI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpIAkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHNtcF9tYigpICBtYigpCisjZGVmaW5lIHNtcF9ybWIoKSBybWIoKQorI2RlZmluZSBzbXBfd21iKCkgd21iKCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCXJlYWRfYmFycmllcl9kZXBlbmRzKCkKIAogI2lmZGVmIENPTkZJR19TTVAKIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBfX3Jhd194Y2hnXzFfYXNtKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CkBAIC0zNywxNiArMzcsMTYgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBuZXcsIHVuc2lnbmVkIGxvbmcgb2xkKTsKIAogI2lmZGVmIF9fQVJDSF9TWU5DX0NPUkVfRENBQ0hFCi0jIGRlZmluZSBzbXBfbWIoKQlkbyB7IGJhcnJpZXIoKTsgc21wX2NoZWNrX2JhcnJpZXIoKTsgc21wX21hcmtfYmFycmllcigpOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgc21wX3JtYigpCWRvIHsgYmFycmllcigpOyBzbXBfY2hlY2tfYmFycmllcigpOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgc21wX3dtYigpCWRvIHsgYmFycmllcigpOyBzbXBfbWFya19iYXJyaWVyKCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgYmFycmllcigpOyBzbXBfY2hlY2tfYmFycmllcigpOyB9IHdoaWxlICgwKQotCisvKiBGb3JjZSBDb3JlIGRhdGEgY2FjaGUgY29oZXJlbmNlICovCisjIGRlZmluZSBtYigpCWRvIHsgYmFycmllcigpOyBzbXBfY2hlY2tfYmFycmllcigpOyBzbXBfbWFya19iYXJyaWVyKCk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBybWIoKQlkbyB7IGJhcnJpZXIoKTsgc21wX2NoZWNrX2JhcnJpZXIoKTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHdtYigpCWRvIHsgYmFycmllcigpOyBzbXBfbWFya19iYXJyaWVyKCk7IH0gd2hpbGUgKDApCisjIGRlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgYmFycmllcigpOyBzbXBfY2hlY2tfYmFycmllcigpOyB9IHdoaWxlICgwKQogI2Vsc2UKLSMgZGVmaW5lIHNtcF9tYigpCWJhcnJpZXIoKQotIyBkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQotIyBkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQliYXJyaWVyKCkKKyMgZGVmaW5lIG1iKCkJYmFycmllcigpCisjIGRlZmluZSBybWIoKQliYXJyaWVyKCkKKyMgZGVmaW5lIHdtYigpCWJhcnJpZXIoKQorIyBkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKQEAgLTk5LDEwICs5OSwxMCBAQAogCiAjZWxzZSAvKiAhQ09ORklHX1NNUCAqLwogCi0jZGVmaW5lIHNtcF9tYigpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfcm1iKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF93bWIoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIG1iKCkJYmFycmllcigpCisjZGVmaW5lIHJtYigpCWJhcnJpZXIoKQorI2RlZmluZSB3bWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCiAKIHN0cnVjdCBfX3hjaGdfZHVtbXkgewogCXVuc2lnbmVkIGxvbmcgYVsxMDBdOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IDlmZTBkYTYuLjcwYzRlNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTU3LDcgKzU3LDcgQEAKICNkZWZpbmUgSFdDX3gzKGxldmVsKSBcCiAJIkV4dGVybmFsIE1lbW9yeSBBZGRyZXNzaW5nIEVycm9yXG4iCiAjZGVmaW5lIEVYQ18weDA0KGxldmVsKSBcCi0JIlVuaW1wbG1lbnRlZCBleGNlcHRpb24gb2NjdXJlZFxuIiBcCisJIlVuaW1wbG1lbnRlZCBleGNlcHRpb24gb2NjdXJyZWRcbiIgXAogCWxldmVsICIgLSBNYXliZSB5b3UgZm9yZ290IHRvIGluc3RhbGwgYSBjdXN0b20gZXhjZXB0aW9uIGhhbmRsZXI/XG4iCiAjZGVmaW5lIEhXQ194MTIobGV2ZWwpIFwKIAkiUGVyZm9ybWFuY2UgTW9uaXRvciBPdmVyZmxvd1xuIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZ3B0aW1lcnMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2dwdGltZXJzLmMKaW5kZXggY2RiZTA3NS4uOGI4MWRjMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZ3B0aW1lcnMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9ncHRpbWVycy5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlfZGlzYWJsZV9ncHRpbWVycyhtYXNrKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0JMQUNLRklOX0dQVElNRVJTOyArK2kpCiAJCWlmIChtYXNrICYgKDEgPDwgaSkpCi0JCQlncm91cF9yZWdzW0JGSU5fVElNRVJfT0NURVQoaSldLT5zdGF0dXMgfD0gdHJ1bl9tYXNrW2ldOworCQkJZ3JvdXBfcmVnc1tCRklOX1RJTUVSX09DVEVUKGkpXS0+c3RhdHVzID0gdHJ1bl9tYXNrW2ldOwogCVNTWU5DKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfZ3B0aW1lcnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCmluZGV4IGI4Y2ZlMzQuLjliODBiMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQkvKiBCZWNhc3VlIGhhcmR3YXJlIGRhdGEgd2F0Y2hwb2ludCBpbXBlbGVtZW50ZWQgaW4gY3VycmVudAorCS8qIEJlY2F1c2UgaGFyZHdhcmUgZGF0YSB3YXRjaHBvaW50IGltcGVsZW1lbnRlZCBpbiBjdXJyZW50CiAJICogQmxhY2tmaW4gY2FuIG5vdCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbiBldmVudCBhcyB0aGUgaGFyZHdhcmUKIAkgKiBpbnN0cmN0aW9uIHdhdGNocG9pbnQgZG9lcywgd2UgaWduYW9yZSBhbGwgZGF0YSB3YXRjaCBwb2ludCBoZXJlLgogCSAqIFRoZXkgY2FuIGJlIHR1cm5lZCBvbiBlYXNpbHkgYWZ0ZXIgZnV0dXJlIGJsYWNrZmluIGRlc2lnbgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCmluZGV4IDhjOWE0M2QuLmNkYjRiZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKQEAgLTIwNiw4ICsyMDYsMTQgQEAKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CiAJc21wX21iKCk7Ci0JZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisJLyoKKwkgKiBXZSB3YW50IHRvIEFDSyBiZWZvcmUgd2UgaGFuZGxlIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBzbWFsbGVyIHRpbWVyCisJICogaW50ZXJ2YWxzLiAgVGhpcyB3YXkgaWYgdGhlIHRpbWVyIGV4cGlyZXMgYWdhaW4gd2hpbGUgd2UncmUgaGFuZGxpbmcKKwkgKiB0aGluZ3MsIHdlJ3JlIG1vcmUgbGlrZWx5IHRvIHNlZSB0aGF0IDJuZCBpbnQgcmF0aGVyIHRoYW4gc3dhbGxvd2luZworCSAqIGl0IGJ5IEFDS2luZyB0aGUgaW50IGF0IHRoZSBlbmQgb2YgdGhpcyBoYW5kbGVyLgorCSAqLwogCWJmaW5fZ3B0bXIwX2FjaygpOworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKaW5kZXggNTljMWRmNy4uNjU1ZjI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCkBAIC05OCw3ICs5OCw3IEBACiAJLyogc2VuZCB0aGUgYXBwcm9wcmlhdGUgc2lnbmFsIHRvIHRoZSB1c2VyIHByb2dyYW0gKi8KIAlzd2l0Y2ggKHRyYXBucikgewogCi0JLyogVGhpcyB0YWJsZSB3b3JrcyBpbiBjb25qdWN0aW9uIHdpdGggdGhlIG9uZSBpbiAuL21hY2gtY29tbW9uL2VudHJ5LlMKKwkvKiBUaGlzIHRhYmxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG9uZSBpbiAuL21hY2gtY29tbW9uL2VudHJ5LlMKIAkgKiBTb21lIGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgdGhlcmUgKGluIGFzc2VtYmx5LCBpbiBleGNlcHRpb24gc3BhY2UpCiAJICogU29tZSBhcmUgaGFuZGxlZCBoZXJlLCAoaW4gQywgaW4gaW50ZXJydXB0IHNwYWNlKQogCSAqIFNvbWUsIGxpa2UgQ1BMQiwgYXJlIGhhbmRsZWQgaW4gYm90aCwgd2hlcmUgdGhlIG5vcm1hbCBwYXRoIGlzCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9pbnMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL2lucy5TCmluZGV4IDNlZGJkOGQuLjc5Y2FjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2lucy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2lucy5TCkBAIC02Nyw3ICs2Nyw3IEBACiAgKiAgLSBETUEgdmVyc2lvbiwgd2hpY2ggZG8gbm90IHN1ZmZlciBmcm9tIHRoaXMgaXNzdWUuIERNQSB2ZXJzaW9ucyBoYXZlCiAgKiAgICAgIGRpZmZlcmVudCBuYW1lIChwcmVmaXhlZCBieSBkbWFfICksIGFuZCBhcmUgbG9jYXRlZCBpbgogICogICAgICAuLi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKLSAqIFVzaW5nIHRoZSBkbWEgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIHJlY29tbWVuZGVkIGZvciB0cmFuc2ZlcmluZyBsYXJnZQorICogVXNpbmcgdGhlIGRtYSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgcmVjb21tZW5kZWQgZm9yIHRyYW5zZmVycmluZyBsYXJnZQogICogYnVmZmVycyBpbi9vdXQgb2YgRklGT3MuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCmluZGV4IDgwYzI0MGEuLjRlY2E1NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21lbW1vdmUuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKQEAgLTYwLDcgKzYwLDcgQEAKIAlbUDArK10gPSBSMTsKIAogCUNDID0gUDIgPT0gMDsgICAgICAgICAgICAgLyogYW55IHJlbWFpbmluZyBieXRlcz8gKi8KLQlQMyA9IEkwOyAgICAgICAgICAgICAgICAgIC8qIEFtbWVuZCBQMyB0byB1cGRhdGVkIHB0ci4gKi8KKwlQMyA9IEkwOyAgICAgICAgICAgICAgICAgIC8qIEFtZW5kIFAzIHRvIHVwZGF0ZWQgcHRyLiAqLwogCUlGICFDQyBKVU1QIC5MYnl0ZXM7CiAJUDMgPSBJMTsKIAlSVFM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKaW5kZXggMmM2OTc4NS4uM2ZhMzM1NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwpAQCAtMjUzMCw3ICsyNTMwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGF0YV9wbGF0Zm9ybV9pbmZvIGJmaW5fcGF0YV9wbGF0Zm9ybV9kYXRhID0gewogCS5pb3BvcnRfc2hpZnQgPSAwLAogfTsKLS8qIENvbXBhY3RGbGFzaCBTdG9yYWdlIENhcmQgTWVtb3J5IE1hcHBlZCBBZHJlc3NpbmcKKy8qIENvbXBhY3RGbGFzaCBTdG9yYWdlIENhcmQgTWVtb3J5IE1hcHBlZCBBZGRyZXNzaW5nCiAgKiAvUkVHID0gQTExID0gMQogICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fcGF0YV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCA0NmFiNDU3Li5mOTY5MzNmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0yNjgsNyArMjY4LDcgQEAKIAkvKiBUbyBnZXQgaGVyZSwgd2UganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIGNoYW5nZSBhIENQTEIKIAkgKiBzbywgaGFuZGxlIHRoaW5ncyBpbiB0cmFwX2MgKEMgY29kZSksIGJ5IGxvd2VyaW5nIHRvCiAJICogSVJRNSwganVzdCBsaWtlIHdlIG5vcm1hbGx5IGRvLiBTaW5jZSB0aGlzIGlzIG5vdCBhCi0JICogIm5vcm1hbCIgcmV0dXJuIHBhdGgsIHdlIGhhdmUgYSBkbyBhbG90IG9mIHN0dWZmIHRvCisJICogIm5vcm1hbCIgcmV0dXJuIHBhdGgsIHdlIGhhdmUgYSBkbyBhIGxvdCBvZiBzdHVmZiB0bwogCSAqIHRoZSBzdGFjayB0byBnZXQgcmVhZHkgc28sIHdlIGNhbiBmYWxsIHRocm91Z2ggLSB3ZQogCSAqIG5lZWQgdG8gbWFrZSBhIENQTEIgZXhjZXB0aW9uIGxvb2sgbGlrZSBhIG5vcm1hbCBleGNlcHRpb24KIAkgKi8KQEAgLTgxNyw3ICs4MTcsNyBAQAogCXJldHMgPSBbc3ArK107CiAKIAkvKgotCSAqIFdoZW4gd2UgY29tZSBvdXQgb2YgcmVzdW1lLCByMCBjYXJyaWVzICJvbGQiIHRhc2ssIGJlY3Vhc2Ugd2UgYXJlCisJICogV2hlbiB3ZSBjb21lIG91dCBvZiByZXN1bWUsIHIwIGNhcnJpZXMgIm9sZCIgdGFzaywgYmVjYXVzZSB3ZSBhcmUKIAkgKiBpbiAibmV3IiB0YXNrLgogCSAqLwogCXJ0czsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKaW5kZXggNTgxZTJiMC4uNzZkZTU3MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCXNwLmwgPSBsbyhLRVJORUxfQ0xPQ0tfU1RBQ0spOwogCXNwLmggPSBoaShLRVJORUxfQ0xPQ0tfU1RBQ0spOwogCWNhbGwgX2luaXRfY2xvY2tzOwotCXNwID0gdXNwOwkvKiB1c3AgaGFzbnQgYmVlbiB0b3VjaGVkLCBzbyByZXN0b3JlIGZyb20gdGhlcmUgKi8KKwlzcCA9IHVzcDsJLyogdXNwIGhhc24ndCBiZWVuIHRvdWNoZWQsIHNvIHJlc3RvcmUgZnJvbSB0aGVyZSAqLwogI2VuZGlmCiAKIAkvKiBUaGlzIHNlY3Rpb24ga2VlcHMgdGhlIHByb2Nlc3NvciBpbiBzdXBlcnZpc29yIG1vZGUKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCmluZGV4IDZlMTdhMjYuLjhiY2U1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYwpAQCAtMTA5LDEwICsxMDksMjMgQEAKIAlzdHJ1Y3QgYmxhY2tmaW5fZmx1c2hfZGF0YSAqZmRhdGEgPSBpbmZvOwogCiAJLyogSW52YWxpZGF0ZSB0aGUgbWVtb3J5IGhvbGRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgZmx1c2hlZCByZWdpb24uICovCi0JaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZmRhdGEsCi0JCSh1bnNpZ25lZCBsb25nKWZkYXRhICsgc2l6ZW9mKCpmZGF0YSkpOworCWJsYWNrZmluX2RjYWNoZV9pbnZhbGlkYXRlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWZkYXRhLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcpZmRhdGEgKyBzaXplb2YoKmZkYXRhKSk7CiAKLQlmbHVzaF9pY2FjaGVfcmFuZ2UoZmRhdGEtPnN0YXJ0LCBmZGF0YS0+ZW5kKTsKKwkvKiBNYWtlIHN1cmUgYWxsIHdyaXRlIGJ1ZmZlcnMgaW4gdGhlIGRhdGEgc2lkZSBvZiB0aGUgY29yZQorCSAqIGFyZSBmbHVzaGVkIGJlZm9yZSB0cnlpbmcgdG8gaW52YWxpZGF0ZSB0aGUgaWNhY2hlLiAgVGhpcworCSAqIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBkYXRhIGZsdXNoIGFuZCBiZWZvcmUgdGhlIGljYWNoZQorCSAqIGZsdXNoIHNvIHRoYXQgdGhlIFNTWU5DIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGluIHByZXZlbnRpbmcKKwkgKiB0aGUgaW5zdHJ1Y3Rpb24gcHJlZmV0Y2hlciBmcm9tIGhpdHRpbmcgdGhpbmdzIGluIGNhY2hlZAorCSAqIG1lbW9yeSBhdCB0aGUgd3JvbmcgdGltZSAtLSBpdCBydW5zIG11Y2ggZnVydGhlciBhaGVhZCB0aGFuCisJICogdGhlIHBpcGVsaW5lLgorCSAqLworCVNTWU5DKCk7CisKKwkvKiBpcGlfZmxhdXNoX2ljYWNoZSBpcyBpbnZva2VkIGJ5IGdlbmVyaWMgZmx1c2hfaWNhY2hlX3JhbmdlLAorCSAqIHNvIGNhbGwgYmxhY2tmaW4gYXJjaCBpY2FjaGUgZmx1c2ggZGlyZWN0bHkgaGVyZS4KKwkgKi8KKwlibGFja2Zpbl9pY2FjaGVfZmx1c2hfcmFuZ2UoZmRhdGEtPnN0YXJ0LCBmZGF0YS0+ZW5kKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpX2NhbGxfZnVuY3Rpb24odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGlwaV9tZXNzYWdlICptc2cpCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvUkVBRE1FLm1tIGIvYXJjaC9jcmlzL2FyY2gtdjEwL1JFQURNRS5tbQppbmRleCA1MTdkMWYwMi4uNjc3MzFkNyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL1JFQURNRS5tbQorKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvUkVBRE1FLm1tCkBAIC0zOCw3ICszOCw3IEBACiBtYXAgZHVyaW5nIGtlcm5lbC1tb2RlLCBzbyB0aGF0IHRoZSBrZXJuZWwgZWFzaWx5IGNhbiBhY2Nlc3MgdGhlIGNvcnJlc3BvbmRpbmcKIHVzZXItbW9kZSBwcm9jZXNzJyBkYXRhLgogCi1BcyBhIGNvbXBhcmlzaW9uLCB0aGUgTGludXgvaTM4NiAyLjAgcHV0cyB0aGUga2VybmVsIGFuZCBwaHlzaWNhbCBSQU0gYXQKK0FzIGEgY29tcGFyaXNvbiwgdGhlIExpbnV4L2kzODYgMi4wIHB1dHMgdGhlIGtlcm5lbCBhbmQgcGh5c2ljYWwgUkFNIGF0CiBhZGRyZXNzIDAsIG92ZXJsYXBwaW5nIHdpdGggdGhlIHVzZXItbW9kZSB2aXJ0dWFsIHNwYWNlLCBzbyB0aGF0IGRlc2NyaXB0b3IKIHJlZ2lzdGVycyBhcmUgbmVlZGVkIGZvciBlYWNoIG1lbW9yeSBhY2Nlc3MgdG8gc3BlY2lmeSB3aGljaCBNTVUgc3BhY2UgdG8KIG1hcCB0aHJvdWdoLiBUaGF0IGNoYW5nZWQgaW4gMi4yLCBwdXR0aW5nIHRoZSBrZXJuZWwvcGh5c2ljYWwgUkFNIGF0IApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKaW5kZXggMzk5ZGMxZS4uODUwMjY1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9zeW5jX3NlcmlhbC5oPgogI2luY2x1ZGUgPGFyY2gvaW9faW50ZXJmYWNlX211eC5oPgogCi0vKiBUaGUgcmVjZWl2ZXIgaXMgYSBiaXQgdHJpY2t5IGJlYWN1c2Ugb2YgdGhlIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGRhdGEuKi8KKy8qIFRoZSByZWNlaXZlciBpcyBhIGJpdCB0cmlja3kgYmVjYXVzZSBvZiB0aGUgY29udGludW91cyBzdHJlYW0gb2YgZGF0YS4qLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBUaHJlZSBETUEgZGVzY3JpcHRvcnMgYXJlIGxpbmtlZCB0b2dldGhlci4gRWFjaCBETUEgZGVzY3JpcHRvciBpcyAgICAgKi8KIC8qIHJlc3BvbnNpYmxlIGZvciBwb3J0LT5idWZjaHVuayBvZiBhIGNvbW1vbiBidWZmZXIuICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYwppbmRleCAzZDc1MTI1Li43YjE1NWY4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiB9OwogI2VuZGlmCiAKLS8qIEF1eGlsbGlhcnkgcGFydGl0aW9uIGlmIHdlIGZpbmQgYW5vdGhlciBmbGFzaCAqLworLyogQXV4aWxpYXJ5IHBhcnRpdGlvbiBpZiB3ZSBmaW5kIGFub3RoZXIgZmxhc2ggKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhdXhfcGFydGl0aW9uID0gewogCS5uYW1lID0gImF1eCIsCiAJLnNpemUgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1hMy9uYW5kZmxhc2guYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtYTMvbmFuZGZsYXNoLmMKaW5kZXggMjVkNmYyYi4uZjU4ZjJjMSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1hMy9uYW5kZmxhc2guYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWEzL25hbmRmbGFzaC5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkvKiBFbmFibGUgdGhlIGZvbGxvd2luZyBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgKi8KIAkvKiB0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOyAqLwogCi0JLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2NhbihjcmlzdjMyX210ZCwgMSkpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dF9tdGQ7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWZzL25hbmRmbGFzaC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9uYW5kZmxhc2guYwppbmRleCBjNWEwZjU0Li5kNWIwY2M5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWZzL25hbmRmbGFzaC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtZnMvbmFuZGZsYXNoLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCS8qIEVuYWJsZSB0aGUgZm9sbG93aW5nIGZvciBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZSAqLwogCS8qIHRoaXMtPm9wdGlvbnMgPSBOQU5EX1VTRV9GTEFTSF9CQlQ7ICovCiAKLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KIAlpZiAobmFuZF9zY2FuKGNyaXN2MzJfbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X2lvcjsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jCmluZGV4IGM4NjM3YTkuLmE2YTE4MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS9zeW5jX3NlcmlhbC5oPgogCiAKLS8qIFRoZSByZWNlaXZlciBpcyBhIGJpdCB0cmlja3kgYmVhY3VzZSBvZiB0aGUgY29udGludW91cyBzdHJlYW0gb2YgZGF0YS4qLworLyogVGhlIHJlY2VpdmVyIGlzIGEgYml0IHRyaWNreSBiZWNhdXNlIG9mIHRoZSBjb250aW51b3VzIHN0cmVhbSBvZiBkYXRhLiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFRocmVlIERNQSBkZXNjcmlwdG9ycyBhcmUgbGlua2VkIHRvZ2V0aGVyLiBFYWNoIERNQSBkZXNjcmlwdG9yIGlzICAgICAqLwogLyogcmVzcG9uc2libGUgZm9yIHBvcnQtPmJ1ZmNodW5rIG9mIGEgY29tbW9uIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2VudHJ5LlMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2VudHJ5LlMKaW5kZXggMGVjYjUwYi4uM2FiZjEyYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJbW92ZS5kCSRyMCwgWyRzcF0KIAogCTs7IFRoZSByZWdpc3RlcnMgY2FycnlpbmcgcGFyYW1ldGVycyAoUjEwLVIxMykgYXJlIGludGFjdC4gVGhlIG9wdGlvbmFsCi0JOzsgZmlmdGggYW5kIHNpeHRoIHBhcmFtZXRlcnMgaXMgaW4gTU9GIGFuZCBTUlAgcmVzcGVjdGl2bHkuIFB1dCB0aGVtCisJOzsgZmlmdGggYW5kIHNpeHRoIHBhcmFtZXRlcnMgaXMgaW4gTU9GIGFuZCBTUlAgcmVzcGVjdGl2ZWx5LiBQdXQgdGhlbQogCTs7IGJhY2sgb24gdGhlIHN0YWNrLgogCXN1YnEJNCwgJHNwCiAJbW92ZQkkc3JwLCBbJHNwXQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKaW5kZXggODAyMzE3Ni4uNjhhMWE1OSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCkBAIC0zNzQsNyArMzc0LDcgQEAKIAlpcnFfZW50ZXIoKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQlJfUkVHUzsgaSsrKSB7Ci0JCS8qIEdldCB3aGljaCBJUlFzIHRoYXQgaGFwcGVuZC4gKi8KKwkJLyogR2V0IHdoaWNoIElSUXMgdGhhdCBoYXBwZW5lZC4gKi8KIAkJbWFza2VkW2ldID0gUkVHX1JEX0lOVF9WRUNUKGludHJfdmVjdCwgaXJxX3JlZ3NbY3B1XSwKIAkJCXJfbWFza2VkX3ZlY3QsIGkpOwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwva2dkYi5jCmluZGV4IDZiNjUzMzIuLmMwMzQzYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwva2dkYi5jCkBAIC05MjUsNyArOTI1LDcgQEAKIAogCQkJCQlpZiAocmVnLmVkYSA+PSBicF9kX3JlZ3NbYnAgKiAyXSAmJgogCQkJCQkgICAgcmVnLmVkYSA8PSBicF9kX3JlZ3NbYnAgKiAyICsgMV0pIHsKLQkJCQkJCS8qIEVEQSB3aXRoaW5nIHJhbmdlIGZvciB0aGlzIEJQOyBpdCBtdXN0IGJlIHRoZSBvbmUKKwkJCQkJCS8qIEVEQSB3aXRoaW4gcmFuZ2UgZm9yIHRoaXMgQlA7IGl0IG11c3QgYmUgdGhlIG9uZQogCQkJCQkJICAgd2UncmUgbG9va2luZyBmb3IuICovCiAJCQkJCQlzdG9wcGVkX2RhdGFfYWRkcmVzcyA9IHJlZy5lZGE7CiAJCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNTYyZjg0Ny4uMDU3MGU4YyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICBjaGlsZHJlZ3MtPnIxMCA9IDA7CS8qIENoaWxkIHJldHVybnMgMCBhZnRlciBhIGZvcmsvY2xvbmUuICovCiAKIAkvKiBTZXQgYSBuZXcgVExTID8KLQkgKiBUaGUgVExTIGlzIGluICRtb2YgYmVhY3VzZSBpdCBpcyB0aGUgNXRoIGFyZ3VtZW50IHRvIHN5c19jbG9uZS4KKwkgKiBUaGUgVExTIGlzIGluICRtb2YgYmVjYXVzZSBpdCBpcyB0aGUgNXRoIGFyZ3VtZW50IHRvIHN5c19jbG9uZS4KIAkgKi8KIAlpZiAocC0+bW0gJiYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKSkgewogCQl0YXNrX3RocmVhZF9pbmZvKHApLT50bHMgPSByZWdzLT5tb2Y7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYwppbmRleCBiM2EwNWFlLi5jZTRhYjFhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc2lnbmFsLmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogCQl1c2VyX3JlZ3ModGkpLT5zcGMgPSAwOwogCX0KIAkvKiBGSVhNRTogRmlsdGVyIG91dCBmYWxzZSBoL3cgYnJlYWtwb2ludCBoaXRzIChpLmUuIEVEQQotCSAgIG5vdCB3aXRoaW5nIGFueSBjb25maWd1cmVkIGgvdyBicmVha3BvaW50IHJhbmdlKS4gU3luY2hyb25pemUgd2l0aAorCSAgIG5vdCB3aXRoaW4gYW55IGNvbmZpZ3VyZWQgaC93IGJyZWFrcG9pbnQgcmFuZ2UpLiBTeW5jaHJvbml6ZSB3aXRoCiAJICAgd2hhdCBhbHJlYWR5IGV4aXN0cyBmb3Iga2VybmVsIGRlYnVnZ2luZy4gICovCiAJaWYgKCgodXNlcl9yZWdzKHRpKS0+ZXhzICYgMHhmZjAwKSA+PiA4KSA9PSBCUkVBS184X0lOVFJfVkVDVCkgewogCQkvKiBCcmVhayA4OiBzdWJ0cmFjdCAyIGZyb20gRVJQIHVubGVzcyBpbiBhIGRlbGF5IHNsb3QuICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9hcmJpdGVyLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9hcmJpdGVyLmMKaW5kZXggOGI5MjRkYi4uMTVmNWM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvYXJiaXRlci5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2FyYml0ZXIuYwpAQCAtNTY4LDcgKzU2OCw3IEBACiAJUkVHX1dSKG1hcmJfZm9vX2JwLCB3YXRjaC0+aW5zdGFuY2UsIHJ3X2FjaywgYWNrKTsKIAlSRUdfV1IobWFyYl9mb28sIHJlZ2lfbWFyYl9mb28sIHJ3X2Fja19pbnRyLCBhY2tfaW50cik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVJRIG9jY3VyZWQgYXQgJVhcbiIsICh1bnNpZ25lZClnZXRfaXJxX3JlZ3MoKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIklSUSBvY2N1cnJlZCBhdCAlWFxuIiwgKHVuc2lnbmVkKWdldF9pcnFfcmVncygpKTsKIAogCWlmICh3YXRjaC0+Y2IpCiAJCXdhdGNoLT5jYigpOwpAQCAtNjI0LDcgKzYyNCw3IEBACiAJUkVHX1dSKG1hcmJfYmFyX2JwLCB3YXRjaC0+aW5zdGFuY2UsIHJ3X2FjaywgYWNrKTsKIAlSRUdfV1IobWFyYl9iYXIsIHJlZ2lfbWFyYl9iYXIsIHJ3X2Fja19pbnRyLCBhY2tfaW50cik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVJRIG9jY3VyZWQgYXQgJVhcbiIsICh1bnNpZ25lZClnZXRfaXJxX3JlZ3MoKS0+ZXJwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSVJRIG9jY3VycmVkIGF0ICVYXG4iLCAodW5zaWduZWQpZ2V0X2lycV9yZWdzKCktPmVycCk7CiAKIAlpZiAod2F0Y2gtPmNiKQogCQl3YXRjaC0+Y2IoKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2FyYml0ZXIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2FyYml0ZXIuYwppbmRleCA4MmVmMjkzLi4zZjhlYmI1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9hcmJpdGVyLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvYXJiaXRlci5jCkBAIC0zOTUsNyArMzk1LDcgQEAKIAlSRUdfV1IobWFyYl9icCwgd2F0Y2gtPmluc3RhbmNlLCByd19hY2ssIGFjayk7CiAJUkVHX1dSKG1hcmIsIHJlZ2lfbWFyYiwgcndfYWNrX2ludHIsIGFja19pbnRyKTsKIAotCXByaW50ayhLRVJOX0lORk8gIklSUSBvY2N1cmVkIGF0ICVsWFxuIiwgZ2V0X2lycV9yZWdzKCktPmVycCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiSVJRIG9jY3VycmVkIGF0ICVsWFxuIiwgZ2V0X2lycV9yZWdzKCktPmVycCk7CiAKIAlpZiAod2F0Y2gtPmNiKQogCQl3YXRjaC0+Y2IoKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9ib290L3Jlc2N1ZS9oZWFkX3YxMC5TIGIvYXJjaC9jcmlzL2Jvb3QvcmVzY3VlL2hlYWRfdjEwLlMKaW5kZXggMmZhZmUyNC4uYWY1NWRmMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2Jvb3QvcmVzY3VlL2hlYWRfdjEwLlMKKysrIGIvYXJjaC9jcmlzL2Jvb3QvcmVzY3VlL2hlYWRfdjEwLlMKQEAgLTcsNyArNyw3IEBACiAgKiBmb3IgZWFjaCBwYXJ0aXRpb24gdGhhdCB0aGlzIGNvZGUgc2hvdWxkIGNoZWNrLgogICoKICAqIElmIGFueSBvZiB0aGUgY2hlY2tzdW1zIGZhaWwsIHdlIGFzc3VtZSB0aGUgZmxhc2ggaXMgc28KLSAqIGNvcnJ1cHQgdGhhdCB3ZSBjYW50IHVzZSBpdCB0byBib290IGludG8gdGhlIGZ0cCBmbGFzaAorICogY29ycnVwdCB0aGF0IHdlIGNhbid0IHVzZSBpdCB0byBib290IGludG8gdGhlIGZ0cCBmbGFzaAogICogbG9hZGVyLCBhbmQgaW5zdGVhZCB3ZSBpbml0aWFsaXplIHRoZSBzZXJpYWwgcG9ydCB0bwogICogcmVjZWl2ZSBhIGZsYXNoLWxvYWRlciBhbmQgbmV3IGZsYXNoIGltYWdlLiB3ZSBkb250IGluY2x1ZGUKICAqIGFueSBmbGFzaCBjb2RlIGhlcmUsIGJ1dCBqdXN0IGFjY2VwdCBhIGNlcnRhaW4gYW1vdW50IG9mCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2h3cmVncy9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaHdyZWdzL01ha2VmaWxlCmluZGV4IGY5YTA1ZDIuLmI4YjNmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaHdyZWdzL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaHdyZWdzL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIyBNYWtlZmlsZSB0byBnZW5lcmF0ZSBvciBjb3B5IHRoZSBsYXRlc3QgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKICMgYW5kIHJlbGF0ZWQgZGF0YXN0cnVjdHVyZXMgYW5kIGhlbHBlcm1hY3Jvcy4KLSMgVGhlIG9mZmljYWwgcGxhY2UgZm9yIHRoZXNlIGZpbGVzIGlzIGF0OgorIyBUaGUgb2ZmaWNpYWwgcGxhY2UgZm9yIHRoZXNlIGZpbGVzIGlzIGF0OgogUkVMRUFTRSA/PSByMV9hbGZhNQogT0ZGSUNJQUxfSU5DRElSID0gL24vYXNpYy9wcm9qZWN0cy9ndWlubmVzcy9yZWxlYXNlcy8kKFJFTEVBU0UpL2Rlc2lnbi90b3Avc3cvaW5jbHVkZS8KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9od3JlZ3MvaW9wL01ha2VmaWxlIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9od3JlZ3MvaW9wL01ha2VmaWxlCmluZGV4IGE5MDA1NmEuLjA3NDdhMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaHdyZWdzL2lvcC9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2h3cmVncy9pb3AvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjICRJZDogTWFrZWZpbGUsdiAxLjMgMjAwNC8wMS8wNyAyMDozNDo1NSBqb2hhbmEgRXhwICQKICMgTWFrZWZpbGUgdG8gZ2VuZXJhdGUgb3IgY29weSB0aGUgbGF0ZXN0IHJlZ2lzdGVyIGRlZmluaXRpb25zCiAjIGFuZCByZWxhdGVkIGRhdGFzdHJ1Y3R1cmVzIGFuZCBoZWxwZXJtYWNyb3MuCi0jIFRoZSBvZmZpY2FsIHBsYWNlIGZvciB0aGVzZSBmaWxlcyBpcyBwcm9iYWJseSBhdDoKKyMgVGhlIG9mZmljaWFsIHBsYWNlIGZvciB0aGVzZSBmaWxlcyBpcyBwcm9iYWJseSBhdDoKIFJFTEVBU0UgPz0gcjFfYWxmYTUKIElPUE9GRklDSUFMX0lOQ0RJUiA9IC9uL2FzaWMvcHJvamVjdHMvZ3Vpbm5lc3MvcmVsZWFzZXMvJChSRUxFQVNFKS9kZXNpZ24vdG9wL3N3L2luY2x1ZGUvCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDllYWFlMjEuLjdkZjQzMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtOTcsNyArOTcsNyBAQAogI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkJZG8geyBwdGVfdmFsKCooeHApKSA9IDA7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgcG1kX25vbmUoeCkgICAgICghcG1kX3ZhbCh4KSkKLS8qIGJ5IHJlbW92aW5nIHRoZSBfUEFHRV9LRVJORUwgYml0IGZyb20gdGhlIGNvbXBhcmlzaW9uLCB0aGUgc2FtZSBwbWRfYmFkCisvKiBieSByZW1vdmluZyB0aGUgX1BBR0VfS0VSTkVMIGJpdCBmcm9tIHRoZSBjb21wYXJpc29uLCB0aGUgc2FtZSBwbWRfYmFkCiAgKiB3b3JrcyBmb3IgYm90aCBfUEFHRV9UQUJMRSBhbmQgX0tFUk5QR19UQUJMRSBwbWQgZW50cmllcy4KICAqLwogI2RlZmluZQlwbWRfYmFkKHgpCSgocG1kX3ZhbCh4KSAmICh+UEFHRV9NQVNLICYgfl9QQUdFX0tFUk5FTCkpICE9IF9QQUdFX1RBQkxFKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9jcmlzL2tlcm5lbC90cmFwcy5jCmluZGV4IDU0MWVmYmYwLi44ZGE1M2YzIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC90cmFwcy5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAogLyoKICAqIFRoaXMgZ2V0cyBjYWxsZWQgZnJvbSBlbnRyeS5TIHdoZW4gdGhlIHdhdGNoZG9nIGhhcyBiaXR0ZW4uIFNob3cgc29tZXRoaW5nCi0gKiBzaW1pbGlhciB0byBhbiBPb3BzIGR1bXAsIGFuZCBpZiB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgdG8gYmUgYSBuaWNlCisgKiBzaW1pbGFyIHRvIGFuIE9vcHMgZHVtcCwgYW5kIGlmIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCB0byBiZSBhIG5pY2UKICAqIGRvZ2d5LCB0aGVuIGhhbHQgaW5zdGVhZCBvZiByZWJvb3QuCiAgKi8KIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggMGQ1OTk3OS4uZWYwM2JhZiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTU0LDcgKzU0LDcgQEAKICNlbmRpZgogCiAvKgotICoJVGhlc2UgYXJlIHByZXR0eSBtdWNoIGFyYml0YXJ5IHdpdGggdGhlIENvTUVNIGltcGxlbWVudGF0aW9uLgorICoJVGhlc2UgYXJlIHByZXR0eSBtdWNoIGFyYml0cmFyeSB3aXRoIHRoZSBDb01FTSBpbXBsZW1lbnRhdGlvbi4KICAqCVdlIGhhdmUgdGhlIHdob2xlIGFkZHJlc3Mgc3BhY2UgdG8gb3Vyc2VsdmVzLgogICovCiAjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vc3ByLXJlZ3MuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3Nwci1yZWdzLmgKaW5kZXggMDFlNmFmNS4uZDM4ODMwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3Nwci1yZWdzLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vc3ByLXJlZ3MuaApAQCAtMjc0LDcgKzI3NCw3IEBACiAjZGVmaW5lIE1TUjBfUkQJCQkweGMwMDAwMDAwCS8qIHJvdW5kaW5nIG1vZGUgKi8KICNkZWZpbmUgTVNSMF9SRF9ORUFSRVNUCQkweDAwMDAwMDAwCS8qIC0gbmVhcmVzdCAqLwogI2RlZmluZSBNU1IwX1JEX1pFUk8JCTB4NDAwMDAwMDAJLyogLSB6ZXJvICovCi0jZGVmaW5lIE1TUjBfUkRfUE9TX0lORgkJMHg4MDAwMDAwMAkvKiAtIHBvc3RpdmUgaW5maW5pdHkgKi8KKyNkZWZpbmUgTVNSMF9SRF9QT1NfSU5GCQkweDgwMDAwMDAwCS8qIC0gcG9zaXRpdmUgaW5maW5pdHkgKi8KICNkZWZpbmUgTVNSMF9SRF9ORUdfSU5GCQkweGMwMDAwMDAwCS8qIC0gbmVnYXRpdmUgaW5maW5pdHkgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCmluZGV4IDU5Nzg4ZmEuLmIyNmQ3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaApAQCAtMSw0ICsxLDQgQEAKLS8qIHZpcnRjb252ZXJ0Lmg6IHZpcnR1YWwvcGh5c2ljYWwvcGFnZSBhZGRyZXNzIGNvbnZlcnRpb24KKy8qIHZpcnRjb252ZXJ0Lmg6IHZpcnR1YWwvcGh5c2ljYWwvcGFnZSBhZGRyZXNzIGNvbnZlcnNpb24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LXRhYmxlLlMgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUwppbmRleCBiZjM1ZjMzLi4wNmM1YWUxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUwpAQCAtODYsNyArODYsNyBAQAogCS5nbG9ibAkJX19icmVha19rZXJuZWx0cmFwX2ZpeHVwX3RhYmxlCiBfX2JyZWFrX2tlcm5lbHRyYXBfZml4dXBfdGFibGU6CiAKLQkjIGhhbmRsZXIgZGVjbGFyYXRpb24gZm9yIGEgc29md2FyZSBvciBwcm9ncmFtIGludGVycnVwdAorCSMgaGFuZGxlciBkZWNsYXJhdGlvbiBmb3IgYSBzb2Z0d2FyZSBvciBwcm9ncmFtIGludGVycnVwdAogLm1hY3JvIFZFQ1RPUl9TT0ZUUFJPRyB0YnJfdHQsIHZlYwogCS5zZWN0aW9uIC50cmFwLnVzZXIKIAkub3JnCQlcdGJyX3R0CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkubG9uZwkJXHZlYwogLmVuZG0KIAotCSMgaGFuZGxlciBkZWNsYXJhdGlvbiBmb3IgYW4gTU1VIG9ubHkgc29md2FyZSBvciBwcm9ncmFtIGludGVycnVwdAorCSMgaGFuZGxlciBkZWNsYXJhdGlvbiBmb3IgYW4gTU1VIG9ubHkgc29mdHdhcmUgb3IgcHJvZ3JhbSBpbnRlcnJ1cHQKIC5tYWNybyBWRUNUT1JfU1BfTU1VIHRicl90dCwgdmVjCiAjaWZkZWYgQ09ORklHX01NVQogIAlWRUNUT1JfU09GVFBST0cJXHRicl90dCwgXHZlYwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCBjNGVhMDkyLi5lNWNjNTZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNDE0LDExICs0MTQsMTEgQEAKIAlzdXBwb3J0LiAKIAogY29uZmlnIEZPUkNFX0NQRUlfUkVUQVJHRVQKLQlib29sICJGb3JjZSBhc3N1bXB0aW9uIHRoYXQgQ1BFSSBjYW4gYmUgcmUtdGFyZ2V0dGVkIgorCWJvb2wgIkZvcmNlIGFzc3VtcHRpb24gdGhhdCBDUEVJIGNhbiBiZSByZS10YXJnZXRlZCIKIAlkZXBlbmRzIG9uIFBFUk1JVF9CU1BfUkVNT1ZFCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQotCVNheSBZIGlmIHlvdSBuZWVkIHRvIGZvcmNlIHRoZSBhc3N1bXB0aW9uIHRoYXQgQ1BFSSBjYW4gYmUgcmUtdGFyZ2V0dGVkIHRvCisJU2F5IFkgaWYgeW91IG5lZWQgdG8gZm9yY2UgdGhlIGFzc3VtcHRpb24gdGhhdCBDUEVJIGNhbiBiZSByZS10YXJnZXRlZCB0bwogCWFueSBjcHUgaW4gdGhlIHN5c3RlbS4gVGhpcyBoaW50IGlzIGF2YWlsYWJsZSB2aWEgQUNQSSAzLjAgc3BlY2lmaWNhdGlvbnMuCiAJVGlnZXI0IHN5c3RlbXMgYXJlIGNhcGFibGUgb2YgcmUtZGlyZWN0aW5nIENQRUkgdG8gYW55IENQVSBvdGhlciB0aGFuIEJTUC4KIAlUaGlzIG9wdGlvbiBpdCB1c2VmdWwgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBvbiBvbGRlciBCSU9TJ3MgYXMgd2VsbC4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYWwuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYWwuaAppbmRleCA2YTI5MjUwLi4yZTY5Mjg0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFsLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhbC5oCkBAIC0xNjY5LDcgKzE2NjksNyBAQAogfSBwYWxfdnBfaW5mb191X3Q7CiAKIC8qCi0gKiBSZXR1cm5zIGluZm9tYXRpb24gYWJvdXQgdmlydHVhbCBwcm9jZXNzb3IgZmVhdHVyZXMKKyAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdmlydHVhbCBwcm9jZXNzb3IgZmVhdHVyZXMKICAqLwogc3RhdGljIGlubGluZSBzNjQKIGlhNjRfcGFsX3ZwX2luZm8gKHU2NCBmZWF0dXJlX3NldCwgdTY0IHZwX2J1ZmZlciwgdTY0ICp2cF9pbmZvLCB1NjQgKnZtbV9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJmbW9uX2RlZmF1bHRfc21wbC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmZtb25fZGVmYXVsdF9zbXBsLmgKaW5kZXggNzQ3MjRiMi4uYTJkNTYwYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmZtb25fZGVmYXVsdF9zbXBsLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmZtb25fZGVmYXVsdF9zbXBsLmgKQEAgLTY3LDggKzY3LDggQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyAgIGlwOyAgICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIGRpZCB0aGUgb3ZlcmZsb3cgaW50ZXJydXB0IGhhcHBlbmVkICAqLwogICAgICAgICB1bnNpZ25lZCBsb25nICAgdHN0YW1wOyAgICAgICAgICAgICAgICAgLyogYXIuaXRjIHdoZW4gZW50ZXJpbmcgcGVyZm1vbiBpbnRyLiBoYW5kbGVyICovCiAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIGNwdTsgICAgICAgICAgICAgICAgICAgIC8qIGNwdSBvbiB3aGljaCB0aGUgb3ZlcmZsb3cgb2NjdXJlZCAqLwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgc2V0OyAgICAgICAgICAgICAgICAgICAgLyogZXZlbnQgc2V0IGFjdGl2ZSB3aGVuIG92ZXJmbG93IG9jdXJyZWQgICAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgY3B1OyAgICAgICAgICAgICAgICAgICAgLyogY3B1IG9uIHdoaWNoIHRoZSBvdmVyZmxvdyBvY2N1cnJlZCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgc2V0OyAgICAgICAgICAgICAgICAgICAgLyogZXZlbnQgc2V0IGFjdGl2ZSB3aGVuIG92ZXJmbG93IG9jY3VycmVkICAgKi8KICAgICAgICAgaW50ICAgIAkJdGdpZDsgICAgICAgICAgICAgIAkvKiB0aHJlYWQgZ3JvdXAgaWQgKGZvciBOUFRMLCB0aGlzIGlzIGdldHBpZCgpKSAqLwogfSBwZm1fZGVmYXVsdF9zbXBsX2VudHJ5X3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9idGUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9idGUuaAppbmRleCA5Njc5OGQyLi5jYzZjNGRiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc24vYnRlLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL2J0ZS5oCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlidGVfY29weSgwLCBkZXN0LCBsZW4sICgobW9kZSkgfCBCVEVfWkVST19GSUxMKSwgbm90aWZpY2F0aW9uKQogCiAvKgotICogVGhlIGZvbGxvd2luZyBpcyB0aGUgcHJlZmVyZWQgd2F5IG9mIGNhbGxpbmcgYnRlX3VuYWxpZ25lZF9jb3B5CisgKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBwcmVmZXJyZWQgd2F5IG9mIGNhbGxpbmcgYnRlX3VuYWxpZ25lZF9jb3B5CiAgKiBJZiB0aGUgY29weSBpcyBmdWxseSBjYWNoZSBsaW5lIGFsaWduZWQsIHRoZW4gYnRlX2NvcHkgaXMKICAqIHVzZWQgaW5zdGVhZC4gIFNpbmNlIGJ0ZV9jb3B5IGlzIGlubGluZWQsIHRoaXMgc2F2ZXMgYSBjYWxsCiAgKiBzdGFjay4gIE5PVEU6IGJ0ZV9jb3B5IGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IGFuZCBkb2VzIGJsb2NrCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc24vc2h1Yl9tbXIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViX21tci5oCmluZGV4IDdkZTFkMWQuLmE4NGQ4NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViX21tci5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViX21tci5oCkBAIC00NTksNyArNDU5LDcgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBTb21lIE1NUnMgYXJlIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgKG9yIGNsb3NlIGVub3VnaCkgb24gYm90aCBTSFVCMSAqLwogLyogYW5kIFNIVUIyIHRoYXQgaXQgbWFrZXMgc2Vuc2UgdG8gZGVmaW5lIGEgZ2ViZXJpYyBuYW1lIGZvciB0aGUgTU1SLiAgKi8KLS8qIEl0IGlzIGFjY2VwdGlibGUgdG8gdXNlIChmb3IgZXhhbXBsZSkgU0hfSVBJX0lOVCB0byByZWZlcmVuY2UgdGhlICAgICovCisvKiBJdCBpcyBhY2NlcHRhYmxlIHRvIHVzZSAoZm9yIGV4YW1wbGUpIFNIX0lQSV9JTlQgdG8gcmVmZXJlbmNlIHRoZSAgICAqLwogLyogdGhlIElQSSBNTVIuIFRoZSB2YWx1ZSBvZiBTSF9JUElfSU5UIGlzIGRldGVybWluZWQgYXQgcnVudGltZSBiYXNlZCAgKi8KIC8qIG9uIHRoZSB0eXBlIG9mIHRoZSBTSFVCLiBEbyBub3QgdXNlIHRoZXNlICNkZWZpbmVzIGluIHBlcmZvcm1hbmNlICAgICovCiAvKiBjcml0aWNhbCBjb2RlICBvciBsb29wcyAtIHRoZXJlIGlzIGEgc21hbGwgcGVyZm9ybWFuY2UgcGVuYWx0eS4gICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL3NodWJpby5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL3NodWJpby5oCmluZGV4IDYwNTI0MjIuLmVjYjhhNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViaW8uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc24vc2h1YmlvLmgKQEAgLTEzODMsNyArMTM4Myw3IEBACiAgKiByZXNwb25zZSBpcyBjYXB0dXJlIGluIElYU00gYW5kIElYU1MsIGFuZCBJWFNTW1ZBTElEXSBpcyBzZXQuIFRoZSAgICAqCiAgKiBlcnJhbnQgaGVhZGVyIGlzIHRoZXJlYnkgY2FwdHVyZWQsIGFuZCBubyBmdXJ0aGVyIHNwdXJpb3VzIHJlYWQgICAgICAqCiAgKiByZXNwb25lcyBhcmUgY2FwdHVyZWQgdW50aWwgSVhTU1tWQUxJRF0gaXMgY2xlYXJlZCBieSBzZXR0aW5nIHRoZSAgICAqCi0gKiBhcHByb3ByaWF0ZSBiaXQgaW4gSUVDTFIuRXZlcnl0aW1lIGEgc3B1cmlvdXMgcmVhZCByZXNwb25zZSBpcyAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBiaXQgaW4gSUVDTFIuIEV2ZXJ5IHRpbWUgYSBzcHVyaW91cyByZWFkIHJlc3BvbnNlIGlzICAgICAqCiAgKiBkZXRlY3RlZCwgdGhlIFNQVVJfUkQgYml0IG9mIHRoZSBQUkIgY29ycmVzcG9uZGluZyB0byB0aGUgaW5jb21pbmcgICAqCiAgKiBtZXNzYWdlJ3MgU0lETiBmaWVsZCBpcyBzZXQuIFRoaXMgYWx3YXlzIGhhcHBlbnMsIHJlZ2FybGVzcyBvZiAgICAgICAqCiAgKiB3aGV0aGVyIGEgaGVhZGVyIGlzIGNhcHR1cmVkLiBUaGUgcHJvZ3JhbW1lciBzaG91bGQgY2hlY2sgICAgICAgICAgICAqCkBAIC0yNzM4LDcgKzI3MzgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCQkJCQkqCiAgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgd2hpY2ggd2VyZSBub3QgZm9ybWVkIGludG8gc3RydWN0dXJlcyBhcmUJKgotICogcHJvYmFibHkgaW5kZW50aWNhbCB0byBhbm90aGVyIHJlZ2lzdGVyLCBhbmQgdGhlIG5hbWUgb2YgdGhlCQkqCisgKiBwcm9iYWJseSBpZGVudGljYWwgdG8gYW5vdGhlciByZWdpc3RlciwgYW5kIHRoZSBuYW1lIG9mIHRoZQkJKgogICogcmVnaXN0ZXIgaXMgcHJvdmlkZWQgYWdhaW5zdCBlYWNoIG9mIHRoZXNlIHJlZ2lzdGVycy4gVGhpcwkJKgogICogaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBjYXJlZnVsbHkJCQkJKgogICoJCQkJCQkJCQkqCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2N5Y2xvbmUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jCmluZGV4IGQ1MmYxZjcuLjFiODExYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIC5yYXRpbmcgICAgICAgICA9IDMwMCwKICAgICAgICAgLnJlYWQgICAgICAgICAgID0gcmVhZF9jeWNsb25lLAogICAgICAgICAubWFzayAgICAgICAgICAgPSAoMUxMIDw8IDQwKSAtIDEsCi0gICAgICAgIC5tdWx0ICAgICAgICAgICA9IDAsIC8qdG8gYmUgY2FsdWNsYXRlZCovCisgICAgICAgIC5tdWx0ICAgICAgICAgICA9IDAsIC8qdG8gYmUgY2FsY3VsYXRlZCovCiAgICAgICAgIC5zaGlmdCAgICAgICAgICA9IDE2LAogICAgICAgICAuZmxhZ3MgICAgICAgICAgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMKaW5kZXggNWY2MzdiYi4uMzBjNjQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9kZWZhdWx0X3NtcGwuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJICogY3VycmVudCA9IHRhc2sgcnVubmluZyBhdCB0aGUgdGltZSBvZiB0aGUgb3ZlcmZsb3cuCiAJICoKIAkgKiBwZXItdGFzayBtb2RlOgotCSAqIAktIHRoaXMgaXMgdXN1c2FsbHkgdGhlIHRhc2sgYmVpbmcgbW9uaXRvcmVkLgorCSAqIAktIHRoaXMgaXMgdXN1YWxseSB0aGUgdGFzayBiZWluZyBtb25pdG9yZWQuCiAJICogCSAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBpdCBtaWdodCBiZSBhIGRpZmZlcmVudCB0YXNrCiAJICoKIAkgKiBzeXN0ZW0td2lkZToKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKaW5kZXggNDRmMTFlZS4uMTRlYzY0MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogCQkJCWRhdGEtPmNoaXAtPmlycV9kaXNhYmxlKGRhdGEpOwogCQkJCWRhdGEtPmNoaXAtPmlycV9zZXRfYWZmaW5pdHkoZGF0YSwgbWFzaywgZmFsc2UpOwogCQkJCWRhdGEtPmNoaXAtPmlycV9lbmFibGUoZGF0YSk7Ci0JCQkJcHJpbnRrICgiUmUtdGFyZ2V0dGluZyBDUEVJIHRvIGNwdSAlZFxuIiwgbmV3X2NwZWlfY3B1KTsKKwkJCQlwcmludGsgKCJSZS10YXJnZXRpbmcgQ1BFSSB0byBjcHUgJWRcbiIsIG5ld19jcGVpX2NwdSk7CiAJCQl9CiAJCX0KIAkJaWYgKCFkYXRhKSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggMGJhYTFiYi4uMGUwZTBjYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtNDMsNyArNDMsNyBAQAogewogI2lmZGVmIENPTkZJR19BQ1BJCiAJLyoKLQkgKiBJZiBDUEVJIGNhbiBiZSByZS10YXJnZXR0ZWQgb3IgaWYgdGhpcyBpcyBub3QKKwkgKiBJZiBDUEVJIGNhbiBiZSByZS10YXJnZXRlZCBvciBpZiB0aGlzIGlzIG5vdAogCSAqIENQRUkgdGFyZ2V0LCB0aGVuIGl0IGlzIGhvdHBsdWdnYWJsZQogCSAqLwogCWlmIChjYW5fY3BlaV9yZXRhcmdldCgpIHx8ICFpc19jcHVfY3BlaV90YXJnZXQobnVtKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKaW5kZXggYmI4NjJmYi4uYjAzOTg3NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKQEAgLTk4Nyw3ICs5ODcsNyBAQAogCiBzdGF0aWMgdm9pZCBrdm1fZG9fcmVzdW1lX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2bW1fc2FuaXR5X2NoZWNrKHZjcHUpOyAvKkd1YXJhbnRlZSB2Y3B1IHJ1bmluZyBvbiBoZWFsdGh5IHZtbSEqLworCXZtbV9zYW5pdHlfY2hlY2sodmNwdSk7IC8qR3VhcmFudGVlIHZjcHUgcnVubmluZyBvbiBoZWFsdGh5IHZtbSEqLwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX1JFU1VNRSwgJnZjcHUtPnJlcXVlc3RzKSkgewogCQl2Y3B1X2RvX3Jlc3VtZSh2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9saWIvZG9fY3N1bS5TIGIvYXJjaC9pYTY0L2xpYi9kb19jc3VtLlMKaW5kZXggNmJlYzJmYy4uMWE0MzFhNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2xpYi9kb19jc3VtLlMKKysrIGIvYXJjaC9pYTY0L2xpYi9kb19jc3VtLlMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCTs7CiAocDYpCWFkZHMgcmVzdWx0MVswXT0xLHJlc3VsdDFbMF0KIChwOSkJYnIuY29uZC5zcHRrIC5kb19jc3VtX2V4aXQJLy8gaWYgKGNvdW50ID09IDEpIGV4aXQKLQkvLyBGYWxsIHRocm91Z2ggdG8gY2FsdWN1bGF0ZSB0aGUgY2hlY2tzdW0sIGZlZWRpbmcgcmVzdWx0MVswXSBhcworCS8vIEZhbGwgdGhyb3VnaCB0byBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtLCBmZWVkaW5nIHJlc3VsdDFbMF0gYXMKIAkvLyB0aGUgaW5pdGlhbCB2YWx1ZSBpbiByZXN1bHQxWzBdLgogCS8vCiAJLy8gQ2FsY3VsYXRlIHRoZSBjaGVja3N1bSBsb2FkaW5nIHR3byA4LWJ5dGUgd29yZHMgcGVyIGxvb3AuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYwppbmRleCAxMzljMDE4Li44MWExZjRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogewogICAgICAgICAvKgogICAgICAgICAgKiBPbiBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgQ1BVIGRpc2FibGluZyAoU0h1YjIpLCBhbGwgZXJyb3IgaW50ZXJydXB0cwotICAgICAgICAgKiBhcmUgdGFyZ2V0dGVkIGF0IHRoZSBib290IENQVS4KKyAgICAgICAgICogYXJlIHRhcmdldGVkIGF0IHRoZSBib290IENQVS4KICAgICAgICAgICovCiAgICAgICAgIGlmIChpc19zaHViMigpICYmIHNuX3Byb21fZmVhdHVyZV9hdmFpbGFibGUoUFJGX0NQVV9ESVNBQkxFX1NVUFBPUlQpKQogICAgICAgICAgICAgICAgIHNldF9pcnFfYWZmaW5pdHlfaW5mbyhpcnEsIGNwdV9waHlzaWNhbF9pZCgwKSwgMCk7CkBAIC00MzUsNyArNDM1LDcgQEAKIAkvKgogCSAqIEJyaWRnZSB0eXBlcyBhdHRhY2hlZCB0byBUSU8gKGFueXRoaW5nIGJ1dCBQSUMpIGRvIG5vdCBuZWVkIHRoaXMgV0FSCiAJICogc2luY2UgdGhleSBkbyBub3QgdGFyZ2V0IFNodWIgSUkgaW50ZXJydXB0IHJlZ2lzdGVycy4gIElmIHRoYXQKLQkgKiBldmVyIGNoYW5nZXMsIHRoaXMgY2hlY2sgbmVlZHMgdG8gYWNjb21vZGF0ZS4KKwkgKiBldmVyIGNoYW5nZXMsIHRoaXMgY2hlY2sgbmVlZHMgdG8gYWNjb21tb2RhdGUuCiAJICovCiAJaWYgKHNuX2lycV9pbmZvLT5pcnFfYnJpZGdlX3R5cGUgIT0gUENJSU9fQVNJQ19UWVBFX1BJQykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKaW5kZXggYzY1OWFkNS4uMzNkZWY2NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCkBAIC0yMjcsNyArMjI3LDcgQEAKICAqIGFmdGVyIGRvaW5nIHRoZSByZWFkLiAgRm9yIFBJQyB0aGlzIHJvdXRpbmUgdGhlbiBmb3JjZXMgYSBmYWtlIGludGVycnVwdAogICogb24gYW5vdGhlciBsaW5lLCB3aGljaCBpcyBsb2dpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzbG90IHRoYXQgdGhlIFBJTwogICogaXMgYWRkcmVzc2VkIHRvLiAgSXQgdGhlbiBzcGlucyB3aGlsZSB3YXRjaGluZyB0aGUgbWVtb3J5IGxvY2F0aW9uIHRoYXQKLSAqIHRoZSBpbnRlcnJ1cHQgaXMgdGFyZ2V0dGVkIHRvLiAgV2hlbiB0aGUgaW50ZXJydXB0IHJlc3BvbnNlIGFycml2ZXMsIHdlIAorICogdGhlIGludGVycnVwdCBpcyB0YXJnZXRlZCB0by4gIFdoZW4gdGhlIGludGVycnVwdCByZXNwb25zZSBhcnJpdmVzLCB3ZSAKICAqIGFyZSBzdXJlIHRoYXQgdGhlIERNQSBoYXMgbGFuZGVkIGluIG1lbW9yeSBhbmQgaXQgaXMgc2FmZSBmb3IgdGhlIGRyaXZlcgogICogdG8gcHJvY2VlZC4JRm9yIFRJT0NQIHVzZSB0aGUgRGV2aWNlKHgpIFdyaXRlIFJlcXVlc3QgQnVmZmVyIEZsdXNoIAogICogQnJpZGdlIHJlZ2lzdGVyIHNpbmNlIGl0IGVuc3VyZXMgdGhlIGRhdGEgaGFzIGVudGVyZWQgdGhlIGNvaGVyZW5jZSBkb21haW4sCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmgKaW5kZXggMmRjODlkNi4uMWZlYWU5NyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9tMzIxMDR1dC9tMzIxMDR1dF9wbGQuaApAQCAtNCw3ICs0LDcgQEAKIC8qCiAgKiBpbmNsdWRlL2FzbS1tMzJyL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oCiAgKgotICogRGVmaW5pdGlvbnMgZm9yIFByb2dyYW1hYmxlIExvZ2ljIERldmljZShQTEQpIG9uIE0zMjEwNFVUIGJvYXJkLgorICogRGVmaW5pdGlvbnMgZm9yIFByb2dyYW1tYWJsZSBMb2dpYyBEZXZpY2UoUExEKSBvbiBNMzIxMDRVVCBib2FyZC4KICAqIEJhc2VkIG9uIG0zMjcwMHV0X3BsZC5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyCVRha2VvIFRha2FoYXNoaQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oCmluZGV4IDU3NjIzYmUuLjM1Mjk0NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmgKQEAgLTQsNyArNCw3IEBACiAvKgogICogaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaAogICoKLSAqIERlZmluaXRpb25zIGZvciBQcm9ncmFtYWJsZSBMb2dpYyBEZXZpY2UoUExEKSBvbiBNMzI3MDBVVCBib2FyZC4KKyAqIERlZmluaXRpb25zIGZvciBQcm9ncmFtbWFibGUgTG9naWMgRGV2aWNlKFBMRCkgb24gTTMyNzAwVVQgYm9hcmQuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyCVRha2VvIFRha2FoYXNoaQogICoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9vcHNwdXQvb3BzcHV0X3BsZC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL29wc3B1dC9vcHNwdXRfcGxkLmgKaW5kZXggM2YxMWVhMS4uNjkwMTQwMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL29wc3B1dC9vcHNwdXRfcGxkLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL29wc3B1dC9vcHNwdXRfcGxkLmgKQEAgLTQsNyArNCw3IEBACiAvKgogICogaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X3BsZC5oCiAgKgotICogRGVmaW5pdGlvbnMgZm9yIFByb2dyYW1hYmxlIExvZ2ljIERldmljZShQTEQpIG9uIE9QU1BVVCBib2FyZC4KKyAqIERlZmluaXRpb25zIGZvciBQcm9ncmFtbWFibGUgTG9naWMgRGV2aWNlKFBMRCkgb24gT1BTUFVUIGJvYXJkLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMglUYWtlbyBUYWthaGFzaGkKICAqCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IGJjYTM0NzUuLjljZGFmNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKIAogLyoKLSAqIChwbWRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc250IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKICAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCiAgKi8KICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IHBtZHZhbCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9mYXVsdC5jIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKaW5kZXggYjhlYzAwMi4uMmM5YWViNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCiAJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4gdGhlCi0JICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRseSwgaW4gdGhlIGNhc2Ugb2YgYW4KKwkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGVseSwgaW4gdGhlIGNhc2Ugb2YgYW4KIAkgKiBlcnJvbmVvdXMgZmF1bHQgb2NjdXJyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkgaG9sZHMgbW1hcF9zZW0KIAkgKiB3ZSB3aWxsIGRlYWRsb2NrIGF0dGVtcHRpbmcgdG8gdmFsaWRhdGUgdGhlIGZhdWx0IGFnYWluc3QgdGhlCiAJICogYWRkcmVzcyBzcGFjZS4gIEx1Y2tpbHkgdGhlIGtlcm5lbCBvbmx5IHZhbGlkbHkgcmVmZXJlbmNlcyB1c2VyCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgKiBleGNlcHRpb25zIHRhYmxlLgogCSAqCiAJICogQXMgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZmF1bHRzIHdpbGwgYmUgdmFsaWQgd2Ugd2lsbCBvbmx5IHBlcmZvcm0KLQkgKiB0aGUgc291cmNlIHJlZmVyZW5jZSBjaGVjayB3aGVuIHRoZXJlIGlzIGEgcG9zc2liaWx0eSBvZiBhIGRlYWRsb2NrLgorCSAqIHRoZSBzb3VyY2UgcmVmZXJlbmNlIGNoZWNrIHdoZW4gdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSBvZiBhIGRlYWRsb2NrLgogCSAqIEF0dGVtcHQgdG8gbG9jayB0aGUgYWRkcmVzcyBzcGFjZSwgaWYgd2UgY2Fubm90IHdlIHRoZW4gdmFsaWRhdGUgdGhlCiAJICogc291cmNlLiAgSWYgdGhpcyBpcyBpbnZhbGlkIHdlIGNhbiBza2lwIHRoZSBhZGRyZXNzIHNwYWNlIGNoZWNrLAogCSAqIHRodXMgYXZvaWRpbmcgdGhlIGRlYWRsb2NrLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKaW5kZXggNTg5MDg5Ny4uYjk5NTUxMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYworKysgYi9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKICAqIGl0J3MgcmVhbGx5IGhhcmQgdG8gZGVjaWRlIHdoZXRoZXIgdGhleSdyZSBtb3VzZSBvciBrZXlib2FyZCBieXRlcy4gU2luY2UKICAqIG92ZXJydW5zIHVzdWFsbHkgb2NjdXIgd2hlbiBtb3ZpbmcgdGhlIEF0YXJpIG1vdXNlIHJhcGlkbHksIHRoZXkncmUgc2VlbiBhcwogICogbW91c2UgYnl0ZXMgaGVyZS4gSWYgdGhpcyBpcyB3cm9uZywgb25seSBhIG1ha2UgY29kZSBvZiB0aGUga2V5Ym9hcmQgZ2V0cwotICogbG9zdCwgd2hpY2ggaXNuJ3QgdG9vIGJhZC4gTG9vc2luZyBhIGJyZWFrIGNvZGUgd291bGQgYmUgZGlzYXN0cm91cywKKyAqIGxvc3QsIHdoaWNoIGlzbid0IHRvbyBiYWQuIExvc2luZyBhIGJyZWFrIGNvZGUgd291bGQgYmUgZGlzYXN0cm91cywKICAqIGJlY2F1c2UgdGhlbiB0aGUga2V5Ym9hcmQgcmVwZWF0IHN0cmlrZXMuLi4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9iaW5kZWMuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TCmluZGV4IDcyZjExNTkuLmYyZTc5NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TCkBAIC02MDksNyArNjA5LDcgQEAKIHwgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQogfCAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQogfCAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90Ci18ICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKK3wgICAgICBiZSBpbmV4YWN0LCBzaW5jZSBhbGwgcG93ZXJzIG9mIHRlbiB1cCB0byAxMF4yNyBhcmUgZXhhY3QKIHwgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KIHwgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KIHwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBzcC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKaW5kZXggMjZlODVlMi4uNzhjYjYwZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKQEAgLTExODEzLDcgKzExODEzLDcgQEAKIAlibmUuYgkJZm11bF91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCiAKICMgaWYgdGhlIHJuZCBtb2RlIGlzIGFueXRoaW5nIGJ1dCBSWiwgdGhlbiB3ZSBoYXZlIHRvIHJlLWRvIHRoZSBhYm92ZQotIyBtdWx0aXBsaWNhdGlvbiBiZWN1YXNlIHdlIHVzZWQgUlogZm9yIGFsbC4KKyMgbXVsdGlwbGljYXRpb24gYmVjYXVzZSB3ZSB1c2VkIFJaIGZvciBhbGwuCiAJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCiAKIGZtdWxfdW5mbF9lbmFfY29udDoKQEAgLTE4MDk1LDcgKzE4MDk1LDcgQEAKIAogCXJ0cwogCi0jIGFkZHJlc2luZyBtb2RlIGlzIHBvc3QtaW5jcmVtZW50LiB3cml0ZSB0aGUgcmVzdWx0IGJ5dGUuIGlmIHRoZSB3cml0ZQorIyBhZGRyZXNzaW5nIG1vZGUgaXMgcG9zdC1pbmNyZW1lbnQuIHdyaXRlIHRoZSByZXN1bHQgYnl0ZS4gaWYgdGhlIHdyaXRlCiAjIGZhaWxzIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLiBpZiB3cml0ZSBwYXNzZXMgdGhlbgogIyBjYWxsIGluY19hcmVnKCkgdG8gdXBkYXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLgogZnNjY19tZW1faW5jOgpAQCAtMjA4NzYsNyArMjA4NzYsNyBAQAogCXN3YXAJCSVkMAkJCSMgZDAgbm93IGluIHVwcGVyIHdvcmQKIAlsc2wubAkJJjB4NCwlZDAJCSMgZDAgaW4gcHJvcGVyIHBsYWNlIGZvciBkYmwgcHJlYyBleHAKIAl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KLQlicGwuYgkJZHN0X2dldF9kbWFuCQkjIGlmIHBvc3RpdmUsIGdvIHByb2Nlc3MgbWFudGlzc2EKKwlicGwuYgkJZHN0X2dldF9kbWFuCQkjIGlmIHBvc2l0aXZlLCBnbyBwcm9jZXNzIG1hbnRpc3NhCiAJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBzZXQgc2lnbgogZHN0X2dldF9kbWFuOgogCW1vdi5sCQlGVEVNUF9ISSglYTApLCVkMQkjIGdldCBtcyBtYW50aXNzYQpAQCAtMjI5NDMsNyArMjI5NDMsNyBAQAogIwlGUF9TUkMoYTYpID0gcGFja2VkIG9wZXJhbmQgbm93IGFzIGEgYmluYXJ5IEZQIG51bWJlcgkJIwogIwkJCQkJCQkJCSMKICMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKLSMJR2V0IHRoZSBjb3JyZWN0IDxlYT4gd2hpaGMgaXMgdGhlIHZhbHVlIG9uIHRoZSBleGNlcHRpb24gc3RhY2sJIworIwlHZXQgdGhlIGNvcnJlY3QgPGVhPiB3aGljaCBpcyB0aGUgdmFsdWUgb24gdGhlIGV4Y2VwdGlvbiBzdGFjawkjCiAjIGZyYW1lIHcvIG1heWJlIGEgY29ycmVjdGlvbiBmYWN0b3IgaWYgdGhlIDxlYT4gaXMgLShhbikgb3IgKGFuKSsuCSMKICMgVGhlbiwgZmV0Y2ggdGhlIG9wZXJhbmQgZnJvbSBtZW1vcnkuIElmIHRoZSBmZXRjaCBmYWlscywgZXhpdAkJIwogIyB0aHJvdWdoIGZhY2NfaW5feCgpLgkJCQkJCQkjCkBAIC0yNDA5Niw3ICsyNDA5Niw3IEBACiAjICAgICAgQTYuICBUaGlzIHRlc3Qgb2NjdXJzIG9ubHkgb24gdGhlIGZpcnN0IHBhc3MuICBJZiB0aGUKICMgICAgICByZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKICMgICAgICB0aGUgbWFudGlzc2EgYnkgMTAuICBUaGUgY2FsY3VsYXRpb24gb2YgMTBeTEVOIGNhbm5vdAotIyAgICAgIGJlIGluZXhhY3QsIHNpbmNlIGFsbCBwb3dlcnMgb2YgdGVuIHVwdG8gMTBeMjcgYXJlIGV4YWN0CisjICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXAgdG8gMTBeMjcgYXJlIGV4YWN0CiAjICAgICAgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBzbyB0aGUgdXNlIG9mIGEgcHJldmlvdXMgcG93ZXItb2YtdGVuCiAjICAgICAgdGFibGUgd2lsbCBpbnRyb2R1Y2Ugbm8gZXJyb3IuCiAjCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL3BmcHNwLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL3BmcHNwLlMKaW5kZXggZTcxYmEwYS4uNGFlZGVmOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9wZnBzcC5TCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvcGZwc3AuUwpAQCAtNzc3Nyw3ICs3Nzc3LDcgQEAKIAlzd2FwCQklZDAJCQkjIGQwIG5vdyBpbiB1cHBlciB3b3JkCiAJbHNsLmwJCSYweDQsJWQwCQkjIGQwIGluIHByb3BlciBwbGFjZSBmb3IgZGJsIHByZWMgZXhwCiAJdHN0LmIJCUZURU1QX0VYKCVhMCkJCSMgdGVzdCBzaWduCi0JYnBsLmIJCWRzdF9nZXRfZG1hbgkJIyBpZiBwb3N0aXZlLCBnbyBwcm9jZXNzIG1hbnRpc3NhCisJYnBsLmIJCWRzdF9nZXRfZG1hbgkJIyBpZiBwb3NpdGl2ZSwgZ28gcHJvY2VzcyBtYW50aXNzYQogCWJzZXQJCSYweDFmLCVkMAkJIyBpZiBuZWdhdGl2ZSwgc2V0IHNpZ24KIGRzdF9nZXRfZG1hbjoKIAltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKQEAgLTgyNDQsNyArODI0NCw3IEBACiAJYm5lLmIJCWZtdWxfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAogCiAjIGlmIHRoZSBybmQgbW9kZSBpcyBhbnl0aGluZyBidXQgUlosIHRoZW4gd2UgaGF2ZSB0byByZS1kbyB0aGUgYWJvdmUKLSMgbXVsdGlwbGljYXRpb24gYmVjdWFzZSB3ZSB1c2VkIFJaIGZvciBhbGwuCisjIG11bHRpcGxpY2F0aW9uIGJlY2F1c2Ugd2UgdXNlZCBSWiBmb3IgYWxsLgogCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgogCiBmbXVsX3VuZmxfZW5hX2NvbnQ6CkBAIC0xMjkwMyw3ICsxMjkwMyw3IEBACiAjCUZQX1NSQyhhNikgPSBwYWNrZWQgb3BlcmFuZCBub3cgYXMgYSBiaW5hcnkgRlAgbnVtYmVyCQkjCiAjCQkJCQkJCQkJIwogIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwotIwlHZXQgdGhlIGNvcnJlY3QgPGVhPiB3aGloYyBpcyB0aGUgdmFsdWUgb24gdGhlIGV4Y2VwdGlvbiBzdGFjawkjCisjCUdldCB0aGUgY29ycmVjdCA8ZWE+IHdoaWNoIGlzIHRoZSB2YWx1ZSBvbiB0aGUgZXhjZXB0aW9uIHN0YWNrCSMKICMgZnJhbWUgdy8gbWF5YmUgYSBjb3JyZWN0aW9uIGZhY3RvciBpZiB0aGUgPGVhPiBpcyAtKGFuKSBvciAoYW4pKy4JIwogIyBUaGVuLCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIG1lbW9yeS4gSWYgdGhlIGZldGNoIGZhaWxzLCBleGl0CQkjCiAjIHRocm91Z2ggZmFjY19pbl94KCkuCQkJCQkJCSMKQEAgLTE0MDU2LDcgKzE0MDU2LDcgQEAKICMgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQogIyAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQogIyAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90Ci0jICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKKyMgICAgICBiZSBpbmV4YWN0LCBzaW5jZSBhbGwgcG93ZXJzIG9mIHRlbiB1cCB0byAxMF4yNyBhcmUgZXhhY3QKICMgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KICMgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KICMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWludHMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWludHMuaAppbmRleCBmNTk3ODkyLi42NTZiYmJmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlpbnRzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaW50cy5oCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogLyoKICAqIHtlbixkaXN9YWJsZV9pcnEgaGF2ZSB0aGUgdXN1YWwgc2VtYW50aWNzIG9mIHRlbXBvcmFyeSBibG9ja2luZyB0aGUKLSAqIGludGVycnVwdCwgYnV0IG5vdCBsb29zaW5nIHJlcXVlc3RzIHRoYXQgaGFwcGVuIGJldHdlZW4gZGlzYWJsaW5nIGFuZAorICogaW50ZXJydXB0LCBidXQgbm90IGxvc2luZyByZXF1ZXN0cyB0aGF0IGhhcHBlbiBiZXR3ZWVuIGRpc2FibGluZyBhbmQKICAqIGVuYWJsaW5nLiBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgTUZQIG1hc2sgcmVnaXN0ZXJzLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290c3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdHN0ZC5oCmluZGV4IGJkYzFhNGEuLmU1MThmNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290c3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RzdGQuaApAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBfX0JOX2ZsYXNoX3dyaXRlX3JhbmdlCQkyMAogCiAvKiBDYWxsaW5nIGNvbnZlbnRpb25zIGNvbXBhdGlibGUgdG8gKHVDKWxpbnV4LzY4awotICogV2UgdXNlIHNpbW1pbGFyIG1hY3JvcyB0byBjYWxsIGludG8gdGhlIGJvb3Rsb2FkZXIgYXMgZm9yIHVDbGludXgKKyAqIFdlIHVzZSBzaW1pbGFyIG1hY3JvcyB0byBjYWxsIGludG8gdGhlIGJvb3Rsb2FkZXIgYXMgZm9yIHVDbGludXgKICAqLwogCiAjZGVmaW5lIF9fYnNjX3JldHVybih0eXBlLCByZXMpIFwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jb21tcHJvYy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NvbW1wcm9jLmgKaW5kZXggZWRmNWViNi4uYTczOTk4NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NvbW1wcm9jLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NvbW1wcm9jLmgKQEAgLTg4LDcgKzg4LDcgQEAKIAogCiAvKiByeCBiZCBzdGF0dXMvY29udHJvbCBiaXRzICovCi0jZGVmaW5lIEJEX1NDX0VNUFRZCSgodXNob3J0KTB4ODAwMCkJLyogUmVjaWV2ZSBpcyBlbXB0eSAqLworI2RlZmluZSBCRF9TQ19FTVBUWQkoKHVzaG9ydCkweDgwMDApCS8qIFJlY2VpdmUgaXMgZW1wdHkgKi8KICNkZWZpbmUgQkRfU0NfV1JBUAkoKHVzaG9ydCkweDIwMDApCS8qIExhc3QgYnVmZmVyIGRlc2NyaXB0b3IgaW4gdGFibGUgKi8KICNkZWZpbmUgQkRfU0NfSU5UUlBUCSgodXNob3J0KTB4MTAwMCkJLyogSW50ZXJydXB0IG9uIGNoYW5nZSAqLwogI2RlZmluZSBCRF9TQ19MQVNUCSgodXNob3J0KTB4MDgwMCkJLyogTGFzdCBidWZmZXIgaW4gZnJhbWUgT1IgY29udHJvbCBjaGFyICovCkBAIC05Niw3ICs5Niw3IEBACiAjZGVmaW5lIEJEX1NDX0ZJUlNUCSgodXNob3J0KTB4MDQwMCkJLyogMXN0IGJ1ZmZlciBpbiBhbiBIRExDIGZyYW1lICovCiAjZGVmaW5lIEJEX1NDX0FERFIJKCh1c2hvcnQpMHgwNDAwKQkvKiAxc3QgYnl0ZSBpcyBhIG11bHRpZHJvcCBhZGRyZXNzICovCiAKLSNkZWZpbmUgQkRfU0NfQ00JKCh1c2hvcnQpMHgwMjAwKQkvKiBDb250aW5vdXMgbW9kZSAqLworI2RlZmluZSBCRF9TQ19DTQkoKHVzaG9ydCkweDAyMDApCS8qIENvbnRpbnVvdXMgbW9kZSAqLwogI2RlZmluZSBCRF9TQ19JRAkoKHVzaG9ydCkweDAxMDApCS8qIFJlY2VpdmVkIHRvbyBtYW55IGlkbGVzICovCiAKICNkZWZpbmUgQkRfU0NfQU0JKCh1c2hvcnQpMHgwMDgwKQkvKiBNdWx0aWRyb3AgYWRkcmVzcyBtYXRjaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RlbGF5X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGVsYXlfbm8uaAppbmRleCA1NWNiZDYyLi5jM2EwZWRjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGVsYXlfbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGVsYXlfbm8uaApAQCAtMTYsNyArMTYsNyBAQAogCSAqIGxvbmcgd29yZCBhbGlnbm1lbnQgd2hpY2ggaXMgdGhlIGZhc3RlciB2ZXJzaW9uLgogCSAqIFRoZSAweDRhOGUgaXMgb2YgY291cnNlIGEgJ3RzdGwgJWZwJyBpbnN0cnVjdGlvbi4gIFRoaXMgaXMgYmV0dGVyCiAJICogdGhhbiB1c2luZyBhIE5PUCAoMHg0ZTcxKSBpbnN0cnVjdGlvbiBiZWNhdXNlIGl0IGV4ZWN1dGVzIGluIG9uZQotCSAqIGN5Y2xlIG5vdCB0aHJlZSBhbmQgZG9lc24ndCBhbGxvdyBmb3IgYW4gYXJiaXRhcnkgZGVsYXkgd2FpdGluZworCSAqIGN5Y2xlIG5vdCB0aHJlZSBhbmQgZG9lc24ndCBhbGxvdyBmb3IgYW4gYXJiaXRyYXJ5IGRlbGF5IHdhaXRpbmcKIAkgKiBmb3IgYnVzIGN5Y2xlcyB0byBmaW5pc2guICBBbHNvIGZwL2E2IGlzbid0IGxpa2VseSB0byBjYXVzZSBhCiAJICogc3RhbGwgd2FpdGluZyBmb3IgdGhlIHJlZ2lzdGVyIHRvIGJlY29tZSB2YWxpZCBpZiBzdWNoIGlzIGFkZGVkCiAJICogdG8gdGhlIGNvbGRmaXJlIGF0IHNvbWUgc3RhZ2UuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBjNjRjN2I3Li5iMjA0NjgzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ncGlvLmgKQEAgLTMxLDcgKzMxLDcgQEAKICAqIEdQSU9zIGluIGEgc2luZ2xlIGNvbnRyb2wgYXJlYSwgb3RoZXJzIGhhdmUgc29tZSBHUElPcyBpbXBsZW1lbnRlZCBpbgogICogZGlmZmVyZW50IG1vZHVsZXMuCiAgKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdHRlbXB0cyBhY2NvbW9kYXRlIHRoZSBkaWZmZXJlbmNlcyB3aGlsZSBwcmVzZW50aW5nCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF0dGVtcHRzIGFjY29tbW9kYXRlIHRoZSBkaWZmZXJlbmNlcyB3aGlsZSBwcmVzZW50aW5nCiAgKiBhIGdlbmVyaWMgaW50ZXJmYWNlIHRoYXQgd2lsbCBvcHRpbWl6ZSB0byBhcyBmZXcgaW5zdHJ1Y3Rpb25zIGFzIHBvc3NpYmxlLgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyMDYpIHx8IGRlZmluZWQoQ09ORklHX001MjA2ZSkgfHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjB4c2ltLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbTUyMHhzaW0uaAppbmRleCA1NWQ1YTRjNS4uYjZiZjJjNSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjB4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjB4c2ltLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQAogI2RlZmluZQlNQ0ZGRUNfU0laRQkJMHg4MDAJCS8qIFJlZ2lzdGVyIHNldCBzaXplICovCiAKIC8qCi0gKiAgUmVzZXQgQ29udHJvbGwgVW5pdC4KKyAqICBSZXNldCBDb250cm9sIFVuaXQuCiAgKi8KICNkZWZpbmUJTUNGX1JDUgkJCTB4RkMwQTAwMDAKICNkZWZpbmUJTUNGX1JTUgkJCTB4RkMwQTAwMDEKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTIzeHNpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjN4c2ltLmgKaW5kZXggODk5NmRmNi4uNjIzNTkyMSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjN4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjN4c2ltLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUJTUNGU0lNX0RNUjEJCShNQ0ZfSVBTQkFSICsgMHg1NCkJLyogQWRkcmVzcyBtYXNrIDEgKi8KIAogLyoKLSAqICBSZXNldCBDb250cm9sbCBVbml0IChyZWxhdGl2ZSB0byBJUFNCQVIpLgorICogIFJlc2V0IENvbnRyb2wgVW5pdCAocmVsYXRpdmUgdG8gSVBTQkFSKS4KICAqLwogI2RlZmluZQlNQ0ZfUkNSCQkJMHgxMTAwMDAKICNkZWZpbmUJTUNGX1JTUgkJCTB4MTEwMDAxCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbTUyN3hzaW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTI3eHNpbS5oCmluZGV4IDc0ODU1YTYuLjc1ODgxMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTI3eHNpbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTI3eHNpbS5oCkBAIC0yODMsNyArMjgzLDcgQEAKICNlbmRpZgogCiAvKgotICogIFJlc2V0IENvbnRyb2xsIFVuaXQgKHJlbGF0aXZlIHRvIElQU0JBUikuCisgKiAgUmVzZXQgQ29udHJvbCBVbml0IChyZWxhdGl2ZSB0byBJUFNCQVIpLgogICovCiAjZGVmaW5lCU1DRl9SQ1IJCQkweDExMDAwMAogI2RlZmluZQlNQ0ZfUlNSCQkJMHgxMTAwMDEKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTMwN3NpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzA3c2ltLmgKaW5kZXggNGM5NGMwMS4uOGY4NjA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzA3c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzA3c2ltLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUJTUNGU0lNX1NXU1IJCTB4MDMJCS8qIFNXIFdhdGNoZG9nIHNlcnZpY2UgKHIvdykgKi8KICNkZWZpbmUJTUNGU0lNX1BBUgkJMHgwNAkJLyogUGluIEFzc2lnbm1lbnQgcmVnIChyL3cpICovCiAjZGVmaW5lCU1DRlNJTV9JUlFQQVIJCTB4MDYJCS8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZyAoci93KSAqLwotI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sbCBSZWcqLworI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9NUEFSSwkJMHgwQwkJLyogQlVTIE1hc3RlciBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9JUFIJCTB4NDAJCS8qIEludGVycnVwdCBQZW5kIHJlZyAoci93KSAqLwogI2RlZmluZQlNQ0ZTSU1fSU1SCQkweDQ0CQkvKiBJbnRlcnJ1cHQgTWFzayByZWcgKHIvdykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTQwN3NpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NDA3c2ltLmgKaW5kZXggNzYyYzU4Yy4uNTFlMDBiMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NDA3c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NDA3c2ltLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUJTUNGU0lNX1NXU1IJCTB4MDMJCS8qIFNXIFdhdGNoZG9nIHNlcnZpY2UgKHIvdykgKi8KICNkZWZpbmUJTUNGU0lNX1BBUgkJMHgwNAkJLyogUGluIEFzc2lnbm1lbnQgcmVnIChyL3cpICovCiAjZGVmaW5lCU1DRlNJTV9JUlFQQVIJCTB4MDYJCS8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZyAoci93KSAqLwotI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sbCBSZWcqLworI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9NUEFSSwkJMHgwQwkJLyogQlVTIE1hc3RlciBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9JUFIJCTB4NDAJCS8qIEludGVycnVwdCBQZW5kIHJlZyAoci93KSAqLwogI2RlZmluZQlNQ0ZTSU1fSU1SCQkweDQ0CQkvKiBJbnRlcnJ1cHQgTWFzayByZWcgKHIvdykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNjgzNjBfcXVpY2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNjgzNjBfcXVpY2MuaAppbmRleCA2ZDQwZjRkLi41OTQxNGNjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbTY4MzYwX3F1aWNjLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL202ODM2MF9xdWljYy5oCkBAIC0zMiw3ICszMiw3IEBACiAgICAgLyogQkFTRSArIDB4MDAwOiB1c2VyIGRhdGEgbWVtb3J5ICovCiAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkX3Vjb2RlWzB4NDAwXTsgLyp1c2VyIGRhdGEgYmQncyBVY29kZSovCiAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkWzB4MjAwXTsgICAgICAgLyp1c2VyIGRhdGEgVWNvZGUgICAgICovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVjb2RlX2V4dFsweDEwMF07ICAgICAgLypVY29kZSBFeHRlbnRpb24gcmFtICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVjb2RlX2V4dFsweDEwMF07ICAgICAgLypVY29kZSBFeHRlbnNpb24gcmFtICovCiAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMVsweDUwMF07ICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICovCiB9OwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNfb3NzLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjX29zcy5oCmluZGV4IDcyMjFmNzIuLjNjZjJiNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNfb3NzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY19vc3MuaApAQCAtNjEsNyArNjEsNyBAQAogLyoKICAqIE9TUyBJbnRlcnJ1cHQgbGV2ZWxzIGZvciB2YXJpb3VzIHN1Yi1zeXN0ZW1zCiAgKgotICogVGhpcyBtYXBwaW5nIGlzIGxheWVkIG91dCB3aXRoIHR3byB0aGluZ3MgaW4gbWluZDogZmlyc3QsIHdlIHRyeSB0byBrZWVwCisgKiBUaGlzIG1hcHBpbmcgaXMgbGFpZCBvdXQgd2l0aCB0d28gdGhpbmdzIGluIG1pbmQ6IGZpcnN0LCB3ZSB0cnkgdG8ga2VlcAogICogdGhpbmdzIG9uIHRoZWlyIG93biBsZXZlbHMgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIGRvdWJsZS1kaXNwYXRjaGVzLiBTZWNvbmQsCiAgKiB0aGUgbGV2ZWxzIG1hdGNoIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdGhlIGFsdGVybmF0ZSBJUlEgbWFwcGluZyBtb2RlIChha2EKICAqICJBL1VYIG1vZGUiKSBhdmFpbGFibGUgb24gc29tZSBWSUEgbWFjaGluZXMuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjX3ZpYS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY192aWEuaAppbmRleCAzOWFmYjQzLi5hNTk2NjVlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjX3ZpYS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNfdmlhLmgKQEAgLTIwNCw3ICsyMDQsNyBAQAogI2RlZmluZSB2VDJDTAkweDEwMDAgIC8qIFtWSUEgb25seV0gVGltZXIgdHdvIGNvdW50ZXIgbG93LiAqLwogI2RlZmluZSB2VDJDSAkweDEyMDAgIC8qIFtWSUEgb25seV0gVGltZXIgdHdvIGNvdW50ZXIgaGlnaC4gKi8KICNkZWZpbmUgdlNSCTB4MTQwMCAgLyogW1ZJQSBvbmx5XSBTaGlmdCByZWdpc3Rlci4gKi8KLSNkZWZpbmUgdkFDUgkweDE2MDAgIC8qIFtWSUEgb25seV0gQXV4aWxhcnkgY29udHJvbCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgdkFDUgkweDE2MDAgIC8qIFtWSUEgb25seV0gQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIuICovCiAjZGVmaW5lIHZQQ1IJMHgxODAwICAvKiBbVklBIG9ubHldIFBlcmlwaGVyYWwgY29udHJvbCByZWdpc3Rlci4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgQ0hSUCBzZXogbmV2ZXIgZXZlciB0byAqd3JpdGUqIHRoaXMuCiAJCQkgKiAgICAgICAgICAgIE1hYyBmYW1pbHkgc2F5cyBuZXZlciB0byAqY2hhbmdlKiB0aGlzLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCmluZGV4IDUwZGIzNTkuLmMyYTFjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKQEAgLTE0LDcgKzE0LDcgQEAKIGV4dGVybiBpbnQgbWFjX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCk7CiAKIC8qCi0gKglGbG9wcHkgZHJpdmVyIG1hZ2ljIGhvb2sgLSBwcm9iYWJseSBzaG91bGRudCBiZSBoZXJlCisgKglGbG9wcHkgZHJpdmVyIG1hZ2ljIGhvb2sgLSBwcm9iYWJseSBzaG91bGRuJ3QgYmUgaGVyZQogICovCiAKIGV4dGVybiB2b2lkIHZpYTFfc2V0X2hlYWQoaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2Z0aW1lci5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnRpbWVyLmgKaW5kZXggOTJiMjc2Zi4uMzUxYzI3MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnRpbWVyLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnRpbWVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoKICAqCUJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIFRpbWVyIE1vZGUgUmVnaXN0ZXIgKFRNUikuCi0gKglSZWdpc3RlciBiaXQgZmxhZ3MgYXJlIGNvbW1vbiBhY2Nyb3NzIENvbGRGaXJlcy4KKyAqCVJlZ2lzdGVyIGJpdCBmbGFncyBhcmUgY29tbW9uIGFjcm9zcyBDb2xkRmlyZXMuCiAgKi8KICNkZWZpbmUJTUNGVElNRVJfVE1SX1BSRU1BU0sJMHhmZjAwCQkvKiBQcmVzY2FsYXIgbWFzayAqLwogI2RlZmluZQlNQ0ZUSU1FUl9UTVJfRElTQ0UJMHgwMDAwCQkvKiBEaXNhYmxlIGNhcHR1cmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAyNmQ4NTFkLi4yOWUxNzkwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNDMsMTAgKzM0MywxNCBAQAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQJMzM3CiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfbWFyawkzMzgKICNkZWZpbmUgX19OUl9wcmxpbWl0NjQJCTMzOQorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0CTM0MAorI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0CTM0MQorI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUJMzQyCisjZGVmaW5lIF9fTlJfc3luY2ZzCQkzNDMKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzQwCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzNDQKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeV9tbS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeV9tbS5TCmluZGV4IDE1NTlkZWEuLjEzNTllZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnlfbW0uUworKysgYi9hcmNoL202OGsva2VybmVsL2VudHJ5X21tLlMKQEAgLTc1MCw0ICs3NTAsOCBAQAogCS5sb25nIHN5c19mYW5vdGlmeV9pbml0CiAJLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmsKIAkubG9uZyBzeXNfcHJsaW1pdDY0CisJLmxvbmcgc3lzX25hbWVfdG9faGFuZGxlX2F0CS8qIDM0MCAqLworCS5sb25nIHN5c19vcGVuX2J5X2hhbmRsZV9hdAorCS5sb25nIHN5c19jbG9ja19hZGp0aW1lCisJLmxvbmcgc3lzX3N5bmNmcwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2hlYWQuUyBiL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCmluZGV4IGVmNTQxMjguLjI3NjIyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCkBAIC0xMzQsNyArMTM0LDcgQEAKICAqCVRoYW5rcyB0byBhIHNtYWxsIGhlbHBpbmcgcm91dGluZSBlbmFibGluZyB0aGUgbW11IGdvdCBxdWl0ZSBzaW1wbGUKICAqIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgbGVmdC4gbW11X2VuZ2FnZSBtYWtlcyBhIGNvbXBsZXRlIGEgbmV3IG1hcHBpbmcKICAqIHRoYXQgb25seSBpbmNsdWRlcyB0aGUgYWJzb2x1dGUgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8ganVtcCB0byB0aGUgZmluYWwKLSAqIHBvc3Rpb24gYW5kIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIG1hcHBpbmcuCisgKiBwb3NpdGlvbiBhbmQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgbWFwcGluZy4KICAqIEFzIHRoaXMgY29kZSBkb2Vzbid0IG5lZWQgYSB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbiByZWdpc3RlciBhbnltb3JlIHRoaXMKICAqIG1lYW5zIGFsbCByZWdpc3RlcnMgYXJlIGZyZWUgdG8gYmUgdXNlZCBieSBtYWNoaW5lcyB0aGF0IG5lZWRzIHRoZW0gZm9yCiAgKiBvdGhlciBwdXJwb3Nlcy4KQEAgLTk2OSw3ICs5NjksNyBAQAogCWlzX25vdF8wNDBfb3JfMDYwKDFmKQogCiAJLyoKLQkgKiAwNDA6IE1hcCB0aGUgMTZNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweDgwMDAuMDAwMAorCSAqIDA0MDogTWFwIHRoZSAxNk1lZyByYW5nZSBwaHlzaWNhbCAweDAgdXAgdG8gbG9naWNhbCAweDgwMDAuMDAwMAogCSAqLwogCW1tdV9tYXAJCSMweDgwMDAwMDAwLCMwLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKIAkvKgpAQCAtOTgyLDcgKzk4Miw3IEBACiAKIDE6CiAJLyoKLQkgKiAwMzA6CU1hcCB0aGUgMzJNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweDgwMDAuMDAwMAorCSAqIDAzMDoJTWFwIHRoZSAzMk1lZyByYW5nZSBwaHlzaWNhbCAweDAgdXAgdG8gbG9naWNhbCAweDgwMDAuMDAwMAogCSAqLwogCW1tdV9tYXAJCSMweDgwMDAwMDAwLCMwLCMweDAyMDAwMDAwLCNfUEFHRV9OT0NBQ0hFMDMwCiAJbW11X21hcF90dAkjMSwjMHg0MDAwMDAwMCwjMHgyMDAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMApAQCAtMTA3NCw3ICsxMDc0LDcgQEAKIAlpc18wNDAoMWYpCiAKIAkvKgotCSAqIDAzMDogTWFwIHRoZSAzMk1lZyByYW5nZSBwaHlzaWNhbCAweDAgdXB0byBsb2dpY2FsIDB4ZjAwMC4wMDAwCisJICogMDMwOiBNYXAgdGhlIDMyTWVnIHJhbmdlIHBoeXNpY2FsIDB4MCB1cCB0byBsb2dpY2FsIDB4ZjAwMC4wMDAwCiAJICovCiAJbW11X21hcAkjMHhmMDAwMDAwMCwjMCwjMHgwMjAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMAogCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCiAxOgogCS8qCi0JICogMDQwOiBNYXAgdGhlIDE2TWVnIHJhbmdlIHBoeXNpY2FsIDB4MCB1cHRvIGxvZ2ljYWwgMHhmMDAwLjAwMDAKKwkgKiAwNDA6IE1hcCB0aGUgMTZNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwIHRvIGxvZ2ljYWwgMHhmMDAwLjAwMDAKIAkgKi8KIAltbXVfbWFwICMweGYwMDAwMDAwLCMwLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKIApAQCAtMzA3OCw3ICszMDc4LDcgQEAKIAkvKgogCSAqIElmIHRoZSBsb2FkZXIgZ2F2ZSB1cyBhIGJvYXJkIHR5cGUgdGhlbiB3ZSBjYW4gdXNlIHRoYXQgdG8KIAkgKiBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgb3V0cHV0IHJvdXRpbmU7IG90aGVyd2lzZSB3ZSBqdXN0IHVzZQotCSAqIHRoZSBCdWcgY29kZS4gIElmIHdlIGhhZXYgdG8gdXNlIHRoZSBCdWcgdGhhdCBtZWFucyB0aGUgQnVnCisJICogdGhlIEJ1ZyBjb2RlLiAgSWYgd2UgaGF2ZSB0byB1c2UgdGhlIEJ1ZyB0aGF0IG1lYW5zIHRoZSBCdWcKIAkgKiB3b3Jrc3BhY2UgaGFzIHRvIGJlIHZhbGlkLCB3aGljaCBtZWFucyB0aGUgQnVnIGhhcyB0byB1c2UKIAkgKiB0aGUgU1JBTSwgd2hpY2ggaXMgbm9uLXN0YW5kYXJkLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKaW5kZXggNzliMWVkMS4uOWI4MzkzZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCkBAIC0zNTgsNiArMzU4LDEwIEBACiAJLmxvbmcgc3lzX2Zhbm90aWZ5X2luaXQKIAkubG9uZyBzeXNfZmFub3RpZnlfbWFyawogCS5sb25nIHN5c19wcmxpbWl0NjQKKwkubG9uZyBzeXNfbmFtZV90b19oYW5kbGVfYXQJLyogMzQwICovCisJLmxvbmcgc3lzX29wZW5fYnlfaGFuZGxlX2F0CisJLmxvbmcgc3lzX2Nsb2NrX2FkanRpbWUKKwkubG9uZyBzeXNfc3luY2ZzCiAKIAkucmVwdCBOUl9zeXNjYWxscy0oLi1zeXNfY2FsbF90YWJsZSkvNAogCQkubG9uZyBzeXNfbmlfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkc19uby5TIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkc19uby5TCmluZGV4IDQ3ZTE1ZWIuLmY0ZDcxNWNkIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzX25vLlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkc19uby5TCkBAIC0zLDcgKzMsNyBAQAogICoKICAqCShDKSBDb3B5cmlnaHQgMjAwMi0yMDA2LCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgogICoKLSAqCVRoaXMgbGlua2VyIHNjcmlwdCBpcyBlcXVpcGVkIHRvIGJ1aWxkIGVpdGhlciBST00gbG9hZGVkIG9yIFJBTQorICoJVGhpcyBsaW5rZXIgc2NyaXB0IGlzIGVxdWlwcGVkIHRvIGJ1aWxkIGVpdGhlciBST00gbG9hZGVkIG9yIFJBTQogICoJcnVuIGtlcm5lbHMuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuYwppbmRleCAwMmI3YTAzLi44YjNkYjFjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vbW90b3JvbGEuYworKysgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuYwpAQCAtMzAwLDYgKzMwMCw4IEBACiAJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbTY4a19tZW1vcnlbaV0uc2l6ZSA+PiBQQUdFX1NISUZUOwogCQlmcmVlX2FyZWFfaW5pdF9ub2RlKGksIHpvbmVzX3NpemUsCiAJCQkJICAgIG02OGtfbWVtb3J5W2ldLmFkZHIgPj4gUEFHRV9TSElGVCwgTlVMTCk7CisJCWlmIChub2RlX3ByZXNlbnRfcGFnZXMoaSkpCisJCQlub2RlX3NldF9zdGF0ZShpLCBOX05PUk1BTF9NRU1PUlkpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtLzUyM3gvY29uZmlnLmMgYi9hcmNoL202OGsvcGxhdGZvcm0vNTIzeC9jb25maWcuYwppbmRleCA0MThhNzZmLi43MWY0NDM2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vNTIzeC9jb25maWcuYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vNTIzeC9jb25maWcuYwpAQCAtMyw3ICszLDcgQEAKIC8qCiAgKglsaW51eC9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCiAgKgotICoJU3ViLWFyY2hpdGN0dXJlIGRlcGVuZGFudCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgRnJlZXNjYWxlCisgKglTdWItYXJjaGl0Y3R1cmUgZGVwZW5kZW50IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHRoZSBGcmVlc2NhbGUKICAqCTUyM3ggQ1BVcy4KICAqCiAgKglDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9wbGF0Zm9ybS81MjcyL2ludGMuYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS81MjcyL2ludGMuYwppbmRleCA0M2U2ZTk2Li43ZTcxNWRmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vNTI3Mi9pbnRjLmMKKysrIGIvYXJjaC9tNjhrL3BsYXRmb3JtLzUyNzIvaW50Yy5jCkBAIC0zMyw3ICszMyw3IEBACiAgKgogICogTm90ZSB0aGF0IHRoZSBleHRlcm5hbCBpbnRlcnJ1cHRzIGFyZSBlZGdlIHRyaWdnZXJlZCAodW5saWtlIHRoZQogICogaW50ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgd2hpY2ggYXJlIGxldmVsIHRyaWdnZXJlZCkuIFdoaWNoIG1lYW5zCi0gKiB0aGV5IGFsc28gbmVlZCBhY2tub3dsZWRnZWluZyB2aWEgYWNrbm93bGVkZ2UgYml0cy4KKyAqIHRoZXkgYWxzbyBuZWVkIGFja25vd2xlZGdpbmcgdmlhIGFja25vd2xlZGdlIGJpdHMuCiAgKi8KIHN0cnVjdCBpcnFtYXAgewogCXVuc2lnbmVkIGNoYXIJaWNyOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtLzUyN3gvY29uZmlnLmMgYi9hcmNoL202OGsvcGxhdGZvcm0vNTI3eC9jb25maWcuYwppbmRleCBmYTM1OTU5Li4zZWJjNzY5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vNTI3eC9jb25maWcuYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vNTI3eC9jb25maWcuYwpAQCAtMyw3ICszLDcgQEAKIC8qCiAgKglsaW51eC9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCiAgKgotICoJU3ViLWFyY2hpdGN0dXJlIGRlcGVuZGFudCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgRnJlZXNjYWxlCisgKglTdWItYXJjaGl0Y3R1cmUgZGVwZW5kZW50IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHRoZSBGcmVlc2NhbGUKICAqCTUyNzAvNTI3MSBDUFVzLgogICoKICAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDA0LCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtLzUyOHgvY29uZmlnLmMgYi9hcmNoL202OGsvcGxhdGZvcm0vNTI4eC9jb25maWcuYwppbmRleCBhYzM5ZmM2Li43YWJlNzdhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vNTI4eC9jb25maWcuYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vNTI4eC9jb25maWcuYwpAQCAtMyw3ICszLDcgQEAKIC8qCiAgKglsaW51eC9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCiAgKgotICoJU3ViLWFyY2hpdGN0dXJlIGRlcGVuZGFudCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgRnJlZXNjYWxlCisgKglTdWItYXJjaGl0Y3R1cmUgZGVwZW5kZW50IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHRoZSBGcmVlc2NhbGUKICAqCTUyODAsIDUyODEgYW5kIDUyODIgQ1BVcy4KICAqCiAgKglDb3B5cmlnaHQgKEMpIDE5OTktMjAwMywgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9jYWNoZS5jIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2NhY2hlLmMKaW5kZXggMjM1ZDNjNC4uNzFiZWVhZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2NhY2hlLmMKKysrIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2NhY2hlLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICoJY2FjaGUuYyAtLSBnZW5lcmFsIENvbGRGaXJlIENhY2hlIG1haW50YWluZW5jZSBjb2RlCisgKgljYWNoZS5jIC0tIGdlbmVyYWwgQ29sZEZpcmUgQ2FjaGUgbWFpbnRlbmFuY2UgY29kZQogICoKICAqCUNvcHlyaWdodCAoQykgMjAxMCwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwppbmRleCA1ODM3Y2YwLi5lYWI2M2YwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBnZW5lcmljIGludGVycnVwdCBoYW5kbGVyIChmb3IgYWxsIGhhcmR3YXJlIGludGVycnVwdAotICogc291cmNlcykuIENhbGxzIHVwdG8gaGlnaCBsZXZlbCBjb2RlIHRvIGRvIGFsbCB0aGUgd29yay4KKyAqIHNvdXJjZXMpLiBDYWxscyB1cCB0byBoaWdoIGxldmVsIGNvZGUgdG8gZG8gYWxsIHRoZSB3b3JrLgogICovCiBFTlRSWShpbnRoYW5kbGVyKQogCVNBVkVfQUxMCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvaGVhZC5TIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2hlYWQuUwppbmRleCAxMjliZmY0OS4uNmFlOTFhNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2hlYWQuUworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvaGVhZC5TCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qCiAgKglJZiB3ZSBkb24ndCBoYXZlIGEgZml4ZWQgbWVtb3J5IHNpemUsIHRoZW4gbGV0cyBidWlsZCBpbiBjb2RlCi0gKgl0byBhdXRvIGRldGVjdCB0aGUgRFJBTSBzaXplLiBPYnZpb3VzbHkgdGhpcyBpcyB0aGUgcHJlZmVyZWQKKyAqCXRvIGF1dG8gZGV0ZWN0IHRoZSBEUkFNIHNpemUuIE9idmlvdXNseSB0aGlzIGlzIHRoZSBwcmVmZXJyZWQKICAqCW1ldGhvZCwgYW5kIHNob3VsZCB3b3JrIGZvciBtb3N0IGJvYXJkcy4gSXQgd29uJ3Qgd29yayBmb3IgdGhvc2UKICAqCXRoYXQgZG8gbm90IGhhdmUgdGhlaXIgUkFNIHN0YXJ0aW5nIGF0IGFkZHJlc3MgMCwgYW5kIGl0IG9ubHkKICAqCXdvcmtzIG9uIFNEUkFNIChub3QgYm9hcmRzIGZpdHRlZCB3aXRoIFNSQU0pLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2ludGMuYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9pbnRjLmMKaW5kZXggYzI4YTZlZC4uMGJiYjQxNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2ludGMuYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvaW50Yy5jCkBAIC0zNyw3ICszNyw3IEBACiAvKgogICogSW4gdGhlIGVhcmx5IHZlcnNpb24gMiBjb3JlIENvbGRGaXJlIHBhcnRzIHRoZSBJTVIgcmVnaXN0ZXIgd2FzIDE2IGJpdHMKICAqIGluIHNpemUuIFZlcnNpb24gMyAoYW5kIGxhdGVyIHZlcnNpb24gMikgY29yZSBwYXJ0cyBoYXZlIGEgMzIgYml0Ci0gKiBzaXplZCBJTVIgcmVnaXN0ZXIuIFByb3ZpZGUgc29tZSBzaXplIGluZGVwZW5kYW50IG1ldGhvZHMgdG8gYWNjZXNzIHRoZQorICogc2l6ZWQgSU1SIHJlZ2lzdGVyLiBQcm92aWRlIHNvbWUgc2l6ZSBpbmRlcGVuZGVudCBtZXRob2RzIHRvIGFjY2VzcyB0aGUKICAqIElNUiByZWdpc3Rlci4KICAqLwogI2lmZGVmIE1DRlNJTV9JTVJfSVNfMTZCSVRTCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvc2x0aW1lcnMuYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9zbHRpbWVycy5jCmluZGV4IDBhMWI5MzcuLjZhODVkYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9zbHRpbWVycy5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9zbHRpbWVycy5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAljeWNsZXMgPSBtY2ZzbHRfY250OwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCS8qIHN1YnN0cmFjdCBiZWNhdXNlIHNsaWNlIHRpbWVycyBjb3VudCBkb3duICovCisJLyogc3VidHJhY3QgYmVjYXVzZSBzbGljZSB0aW1lcnMgY291bnQgZG93biAqLwogCXJldHVybiBjeWNsZXMgLSBzY250OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcTQwL1JFQURNRSBiL2FyY2gvbTY4ay9xNDAvUkVBRE1FCmluZGV4IGY4NzdiNzIuLmIyNmQ1ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9xNDAvUkVBRE1FCisrKyBiL2FyY2gvbTY4ay9xNDAvUkVBRE1FCkBAIC04OSw3ICs4OSw3IEBACiBvciBmcm9tIHNvbWUgSVNBIGRldmljZXMsIEVJUlFfUkVHIGNhbiBkaXN0aW5ndWlzaCB1cCB0byA4IElTQSBJUlFzLgogCiBUaGUgUTQwIGN1c3RvbSBjaGlwIGlzIHByb2dyYW1tYWJsZSB0byBwcm92aWRlIDIgcGVyaW9kaWMgdGltZXJzOgotCS0gNTAgb3IgMjAwIEh6IC0gbGV2ZWwgMiwgISFUSElTIENBTlQgQkUgRElTQUJMRUQhIQorCS0gNTAgb3IgMjAwIEh6IC0gbGV2ZWwgMiwgISFUSElTIENBTidUIEJFIERJU0FCTEVEISEKIAktIDEwIG9yIDIwIEtIeiAtIGxldmVsIDQsIHVzZWQgZm9yIGRtYS1zb3VuZAogCiBMaW51eCB1c2VzIHRoZSAyMDAgSHogaW50ZXJydXB0IGZvciB0aW1lciBhbmQgYmVlcCBieSBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwppbmRleCA4NTFiM2JmLi5lY2NkZWZlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZworKysgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwpAQCAtNiw3ICs2LDYgQEAKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECi0Jc2VsZWN0IFVTQl9BUkNIX0hBU19FSENJCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9NYWtlZmlsZSBiL2FyY2gvbWljcm9ibGF6ZS9NYWtlZmlsZQppbmRleCA2ZjQzMmU2Li5iMjNjNDBlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvTWFrZWZpbGUKKysrIGIvYXJjaC9taWNyb2JsYXplL01ha2VmaWxlCkBAIC0xOCw3ICsxOCw3IEBACiAjIHJhdGhlciB0aGFuIGJvb2xzIHkvbgogCiAjIFdvcmsgb3V0IEhXIG11bHRpcGxlciBzdXBwb3J0LiBUaGlzIGlzIHRyaWNreS4KLSMgMS4gU3BhcnRhbjIgaGFzIG5vIEhXIG11bHRpcGxlcnMuCisjIDEuIFNwYXJ0YW4yIGhhcyBubyBIVyBtdWx0aXBsaWVycy4KICMgMi4gTWljcm9CbGF6ZSB2My54IGFsd2F5cyB1c2VzIHRoZW0sIGV4Y2VwdCBpbiBTcGFydGFuIDIKICMgMy4gQWxsIG90aGVyIEZQR2EvQ1BVIHZlciBjb21ib3MsIHdlIGNhbiB0cnVzdCB0aGUgQ09ORklHXyBzZXR0aW5ncwogaWZlcSAoLCQoZmluZHN0cmluZyBzcGFydGFuMiwkKENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfRkFNSUxZKSkpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGVhZTMyMjIuLjhjZGFjMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCkBAIC03MCw3ICs3MCw3IEBACiAKIC8qCiAgKiByZWFkIChyZWFkYiwgcmVhZHcsIHJlYWRsLCByZWFkcSkgYW5kIHdyaXRlICh3cml0ZWIsIHdyaXRldywKLSAqIHdyaXRlbCwgd3JpdGVxKSBhY2Nlc3NvcnMgYXJlIGZvciBQQ0kgYW5kIHRodXMgbGl0dGVsIGVuZGlhbi4KKyAqIHdyaXRlbCwgd3JpdGVxKSBhY2Nlc3NvcnMgYXJlIGZvciBQQ0kgYW5kIHRodXMgbGl0dGxlIGVuZGlhbi4KICAqIExpbnV4IDIuNCBmb3IgTWljcm9ibGF6ZSBoYWQgdGhpcyB3cm9uZy4KICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHJlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCmluZGV4IDEwNzE3NjYuLjc0NmRmOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaApAQCAtNzYsNyArNzYsNyBAQAogCSAqIFVzZWQgZm9yIHZhcmlhbnRzIG9mIFBDSSBpbmRpcmVjdCBoYW5kbGluZyBhbmQgcG9zc2libGUgcXVpcmtzOgogCSAqICBTRVRfQ0ZHX1RZUEUgLSB1c2VkIG9uIDR4eCBvciBhbnkgUEhCIHRoYXQgZG9lcyBleHBsaWNpdCB0eXBlMC8xCiAJICogIEVYVF9SRUcgLSBwcm92aWRlcyBhY2Nlc3MgdG8gUENJLWUgZXh0ZW5kZWQgcmVnaXN0ZXJzCi0JICogIFNVUlBSRVNTX1BSSU1BUllfQlVTIC0gd2Ugc3VycHJlc3MgdGhlIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTCisJICogIFNVUlBSRVNTX1BSSU1BUllfQlVTIC0gd2Ugc3VwcHJlc3MgdGhlIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTCiAJICogICBvbiBGcmVlc2NhbGUgUENJLWUgY29udHJvbGxlcnMgc2luY2UgdGhleSB1c2VkIHRoZSBQQ0lfUFJJTUFSWV9CVVMKIAkgKiAgIHRvIGRldGVybWluZSB3aGljaCBidXMgbnVtYmVyIHRvIG1hdGNoIG9uIHdoZW4gZ2VuZXJhdGluZyB0eXBlMAogCSAqICAgY29uZmlnIGN5Y2xlcwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDIyMzJmZjk0Li5iYTY1Y2Y0IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0xNTgsNyArMTU4LDcgQEAKIGV4dGVybiB2b2lkIHBjaWJpb3Nfc2V0dXBfYnVzX2RldmljZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBleHRlcm4gdm9pZCBwY2liaW9zX3NldHVwX2J1c19zZWxmKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCi0vKiBUaGlzIHBhcnQgb2YgY29kZSB3YXMgb3JpZ2luYWx5IGluIHhpbGlueC1wY2kuaCAqLworLyogVGhpcyBwYXJ0IG9mIGNvZGUgd2FzIG9yaWdpbmFsbHkgaW4geGlsaW54LXBjaS5oICovCiAjaWZkZWYgQ09ORklHX1BDSV9YSUxJTlgKIGV4dGVybiB2b2lkIF9faW5pdCB4aWxpbnhfcGNpX2luaXQodm9pZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGQ3NzBiMDAuLjMwZWRkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM4Niw4ICszODYsMTIgQEAKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0CTM2OAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsJMzY5CiAjZGVmaW5lIF9fTlJfcHJsaW1pdDY0CQkzNzAKKyNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdAkzNzEKKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdAkzNzIKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCTM3MworI2RlZmluZSBfX05SX3N5bmNmcwkJMzc0CiAKLSNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzcxCisjZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTM3NQogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL01ha2VmaWxlCmluZGV4IGYwY2I1YzIuLjQ5NGI2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQAogQ0ZMQUdTX1JFTU9WRV9zZWxmbW9kLm8gPSAtcGcKIENGTEFHU19SRU1PVkVfaGVhcnRiZWF0Lm8gPSAtcGcKIENGTEFHU19SRU1PVkVfZnRyYWNlLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfcHJvY2Vzcy5vID0gLXBnCiBlbmRpZgogCiBleHRyYS15IDo9IGhlYWQubyB2bWxpbnV4LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NhY2hlLmMKaW5kZXggY2YwYWZkOS4uNGI3ZDhhMyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jCkBAIC0xMjksNyArMTI5LDcgQEAKICAqIHRvIHVzZSBmb3Igc2ltcGxlIHdkYyBvciB3aWMuCiAgKgogICogc3RhcnQgYWRkcmVzcyBpcyBjYWNoZSBhbGlnbmVkCi0gKiBlbmQgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCwgaWYgZW5kIGlzIGFsaWduZWQgdGhlbiBJIGhhdmUgdG8gc3Vic3RyYWN0CisgKiBlbmQgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCwgaWYgZW5kIGlzIGFsaWduZWQgdGhlbiBJIGhhdmUgdG8gc3VidHJhY3QKICAqIGNhY2hlbGluZSBsZW5ndGggYmVjYXVzZSBJIGNhbid0IGZsdXNoL2ludmFsaWRhdGUgdGhlIG5leHQgY2FjaGVsaW5lLgogICogSWYgaXMgbm90LCBJIGFsaWduIGl0IGJlY2F1c2UgSSB3aWxsIGZsdXNoL2ludmFsaWRhdGUgd2hvbGUgbGluZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNTE1ZmViNC4uMzU3ZDU2YSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2Z0cmFjZS5jCkBAIC01MSw2ICs1MSw5IEBACiAJCQk6ICJyIiAocGFyZW50KSwgInIiIChyZXR1cm5faG9va2VyKQogCSk7CiAKKwlmbHVzaF9kY2FjaGVfcmFuZ2UoKHUzMilwYXJlbnQsICh1MzIpcGFyZW50ICsgNCk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1MzIpcGFyZW50LCAodTMyKXBhcmVudCArIDQpOworCiAJaWYgKHVubGlrZWx5KGZhdWx0ZWQpKSB7CiAJCWZ0cmFjZV9ncmFwaF9zdG9wKCk7CiAJCVdBUk5fT04oMSk7CkBAIC05NSw2ICs5OCw5IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ZWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCWZsdXNoX2RjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgNCk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyA0KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xOTUsOCArMjAxLDYgQEAKIAlyZXQgKz0gZnRyYWNlX21vZGlmeV9jb2RlKCh1bnNpZ25lZCBsb25nKSZmdHJhY2VfY2FsbGVyLAogCQkJCSAgTUlDUk9CTEFaRV9OT1ApOwogCi0JLyogQWxsIGNoYW5nZXMgYXJlIGRvbmUgLSBsZXRzIGRvIGNhY2hlcyBjb25zaXN0ZW50ICovCi0JZmx1c2hfaWNhY2hlKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjEwLDcgKzIxNCw2IEBACiAKIAlvbGRfanVtcCA9ICoodW5zaWduZWQgaW50ICopaXA7IC8qIHNhdmUganVtcCBvdmVyIGluc3RydWN0aW9uICovCiAJcmV0ID0gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBNSUNST0JMQVpFX05PUCk7Ci0JZmx1c2hfaWNhY2hlKCk7CiAKIAlwcl9kZWJ1ZygiJXM6IFJlcGxhY2UgaW5zdHJ1Y3Rpb246IDB4JXhcbiIsIF9fZnVuY19fLCBvbGRfanVtcCk7CiAJcmV0dXJuIHJldDsKQEAgLTIyMiw3ICsyMjUsNiBAQAogCXVuc2lnbmVkIGxvbmcgaXAgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9jYWxsX2dyYXBoKTsKIAogCXJldCA9IGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgb2xkX2p1bXApOwotCWZsdXNoX2ljYWNoZSgpOwogCiAJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaW50Yy5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9pbnRjLmMKaW5kZXggNWJhN2UxNi4uYzg4ZjA2NiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9pbnRjLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9pbnRjLmMKQEAgLTE1OCwxMSArMTU4LDExIEBACiAJZm9yIChpID0gMDsgaSA8IG5yX2lycTsgKytpKSB7CiAJCWlmIChpbnRyX3R5cGUgJiAoMHgwMDAwMDAwMSA8PCBpKSkgewogCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmludGNfZGV2LAotCQkJCWhhbmRsZV9lZGdlX2lycSwgaW50Y19kZXYubmFtZSk7CisJCQkJaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQkJaXJxX2NsZWFyX3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCQl9IGVsc2UgewogCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmludGNfZGV2LAotCQkJCWhhbmRsZV9sZXZlbF9pcnEsIGludGNfZGV2Lm5hbWUpOworCQkJCWhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCQkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggZTg4YTkzMC4uODVjZWE4MSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTM3NSwzICszNzUsNyBAQAogCS5sb25nIHN5c19mYW5vdGlmeV9pbml0CiAJLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmsKIAkubG9uZyBzeXNfcHJsaW1pdDY0CS8qIDM3MCAqLworCS5sb25nIHN5c19uYW1lX3RvX2hhbmRsZV9hdAorCS5sb25nIHN5c19vcGVuX2J5X2hhbmRsZV9hdAorCS5sb25nIHN5c19jbG9ja19hZGp0aW1lCisJLmxvbmcgc3lzX3N5bmNmcwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9NYWtlZmlsZSBiL2FyY2gvbWljcm9ibGF6ZS9saWIvTWFrZWZpbGUKaW5kZXggZjFmY2JmZi4uMTBjMzIwYSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUvbGliL01ha2VmaWxlCkBAIC0yLDYgKzIsMTIgQEAKICMgTWFrZWZpbGUKICMKIAoraWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorQ0ZMQUdTX1JFTU9WRV9hc2hsZGkzLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfYXNocmRpMy5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2xzaHJkaTMubyA9IC1wZworZW5kaWYKKwogbGliLXkgOj0gIG1lbXNldC5vCiAKIGlmZXEgKCQoQ09ORklHX09QVF9MSUJfQVNNKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1jcHkuYyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtY3B5LmMKaW5kZXggY2M0OTVkN2QuLjUyNzQ2ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtY3B5LmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1jcHkuYwpAQCAtNjMsOCArNjMsOCBAQAogCWlmIChsaWtlbHkoYyA+PSA0KSkgewogCQl1bnNpZ25lZCAgdmFsdWUsIGJ1Zl9ob2xkOwogCi0JCS8qIEFsaWduIHRoZSBkc3RpbmF0aW9uIHRvIGEgd29yZCBib3VuZHJ5LiAqLwotCQkvKiBUaGlzIGlzIGRvbmUgaW4gYW4gZW5kaWFuIGluZGVwZW5kYW50IG1hbm5lci4gKi8KKwkJLyogQWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgd29yZCBib3VuZGFyeS4gKi8KKwkJLyogVGhpcyBpcyBkb25lIGluIGFuIGVuZGlhbiBpbmRlcGVuZGVudCBtYW5uZXIuICovCiAJCXN3aXRjaCAoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMykgewogCQljYXNlIDE6CiAJCQkqZHN0KysgPSAqc3JjKys7CkBAIC04MCw3ICs4MCw3IEBACiAJCWlfZHN0ID0gKHZvaWQgKilkc3Q7CiAKIAkJLyogQ2hvb3NlIGEgY29weSBzY2hlbWUgYmFzZWQgb24gdGhlIHNvdXJjZSAqLwotCQkvKiBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gZHN0aW5hdGlvbi4gKi8KKwkJLyogYWxpZ25tZW50IHJlbGF0aXZlIHRvIGRlc3RpbmF0aW9uLiAqLwogCQlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKXNyYyAmIDMpIHsKIAkJY2FzZSAweDA6CS8qIEJvdGggYnl0ZSBvZmZzZXRzIGFyZSBhbGlnbmVkICovCiAJCQlpX3NyYyAgPSAoY29uc3Qgdm9pZCAqKXNyYzsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCX0KIAogCS8qIEZpbmlzaCBvZmYgYW55IHJlbWFpbmluZyBieXRlcyAqLwotCS8qIHNpbXBsZSBmYXN0IGNvcHksIC4uLiB1bmxlc3MgYSBjYWNoZSBib3VuZHJ5IGlzIGNyb3NzZWQgKi8KKwkvKiBzaW1wbGUgZmFzdCBjb3B5LCAuLi4gdW5sZXNzIGEgY2FjaGUgYm91bmRhcnkgaXMgY3Jvc3NlZCAqLwogCXN3aXRjaCAoYykgewogCWNhc2UgMzoKIAkJKmRzdCsrID0gKnNyYysrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1tb3ZlLmMgYi9hcmNoL21pY3JvYmxhemUvbGliL21lbW1vdmUuYwppbmRleCA4MTBmZDY4Li4yMTQ2YzM3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvbGliL21lbW1vdmUuYworKysgYi9hcmNoL21pY3JvYmxhemUvbGliL21lbW1vdmUuYwpAQCAtODMsOCArODMsOCBAQAogCWlmIChjID49IDQpIHsKIAkJdW5zaWduZWQgIHZhbHVlLCBidWZfaG9sZDsKIAotCQkvKiBBbGlnbiB0aGUgZGVzdGluYXRpb24gdG8gYSB3b3JkIGJvdW5kcnkuICovCi0JCS8qIFRoaXMgaXMgZG9uZSBpbiBhbiBlbmRpYW4gaW5kZXBlbmRhbnQgbWFubmVyLiAqLworCQkvKiBBbGlnbiB0aGUgZGVzdGluYXRpb24gdG8gYSB3b3JkIGJvdW5kYXJ5LiAqLworCQkvKiBUaGlzIGlzIGRvbmUgaW4gYW4gZW5kaWFuIGluZGVwZW5kZW50IG1hbm5lci4gKi8KIAogCQlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKWRzdCAmIDMpIHsKIAkJY2FzZSAzOgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCWRzdCA9ICh2b2lkICopaV9kc3Q7CiAJfQogCi0JLyogc2ltcGxlIGZhc3QgY29weSwgLi4uIHVubGVzcyBhIGNhY2hlIGJvdW5kcnkgaXMgY3Jvc3NlZCAqLworCS8qIHNpbXBsZSBmYXN0IGNvcHksIC4uLiB1bmxlc3MgYSBjYWNoZSBib3VuZGFyeSBpcyBjcm9zc2VkICovCiAJLyogRmluaXNoIG9mZiBhbnkgcmVtYWluaW5nIGJ5dGVzICovCiAJc3dpdGNoIChjKSB7CiAJY2FzZSA0OgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1zZXQuYyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtc2V0LmMKaW5kZXggODM0NTY1ZC4uZGRmNjc5MyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1zZXQuYworKysgYi9hcmNoL21pY3JvYmxhemUvbGliL21lbXNldC5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAlpZiAobGlrZWx5KG4gPj0gNCkpIHsKIAkJLyogQWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgd29yZCBib3VuZGFyeSAqLwotCQkvKiBUaGlzIGlzIGRvbmUgaW4gYW4gZW5kaWFuIGluZGVwZW5kYW50IG1hbm5lciAqLworCQkvKiBUaGlzIGlzIGRvbmUgaW4gYW4gZW5kaWFuIGluZGVwZW5kZW50IG1hbm5lciAqLwogCQlzd2l0Y2ggKCh1bnNpZ25lZCkgc3JjICYgMykgewogCQljYXNlIDE6CiAJCQkqc3JjKysgPSBjOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL3BjaS9pbmRpcmVjdF9wY2kuYyBiL2FyY2gvbWljcm9ibGF6ZS9wY2kvaW5kaXJlY3RfcGNpLmMKaW5kZXggMjVmMThmMC4uNDE5NmViNiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL3BjaS9pbmRpcmVjdF9wY2kuYworKysgYi9hcmNoL21pY3JvYmxhemUvcGNpL2luZGlyZWN0X3BjaS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJb3V0X2xlMzIoaG9zZS0+Y2ZnX2FkZHIsICgweDgwMDAwMDAwIHwgKGJ1c19ubyA8PCAxNikgfAogCQkJIChkZXZmbiA8PCA4KSB8IHJlZyB8IGNmZ190eXBlKSk7CiAKLQkvKiBzdXJwcmVzcyBzZXR0aW5nIG9mIFBDSV9QUklNQVJZX0JVUyAqLworCS8qIHN1cHByZXNzIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTICovCiAJaWYgKGhvc2UtPmluZGlyZWN0X3R5cGUgJiBJTkRJUkVDVF9UWVBFX1NVUlBSRVNTX1BSSU1BUllfQlVTKQogCQlpZiAoKG9mZnNldCA9PSBQQ0lfUFJJTUFSWV9CVVMpICYmCiAJCQkoYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL2dlbmVyaWMvS2NvbmZpZy5hdXRvIGIvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL2dlbmVyaWMvS2NvbmZpZy5hdXRvCmluZGV4IDVkODZmYzEuLjI1YTZmMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9wbGF0Zm9ybS9nZW5lcmljL0tjb25maWcuYXV0bworKysgYi9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vZ2VuZXJpYy9LY29uZmlnLmF1dG8KQEAgLTI5LDcgKzI5LDcgQEAKIAkgIEJBU0UgQWRkcmVzcyBmb3Iga2VybmVsCiAKIGNvbmZpZyBYSUxJTlhfTUlDUk9CTEFaRTBfRkFNSUxZCi0Jc3RyaW5nICJUYXJnZXR0ZWQgRlBHQSBmYW1pbHkiCisJc3RyaW5nICJUYXJnZXRlZCBGUEdBIGZhbWlseSIKIAlkZWZhdWx0ICJ2aXJ0ZXg1IgogCiBjb25maWcgWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggODNhYTVmYi4uMzUxYzgwZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTk5Nyw5ICs5OTcsNiBAQAogY29uZmlnIElSUV9HSUMKIAlib29sCiAKLWNvbmZpZyBJUlFfQ1BVX09DVEVPTgotCWJvb2wKLQogY29uZmlnIE1JUFNfQk9BUkRTX0dFTgogCWJvb2wKIApAQCAtMTEzNSw3ICsxMTMyLDcgQEAKIAkgIFRoZSBMb29uZ3NvbiAyRSBwcm9jZXNzb3IgaW1wbGVtZW50cyB0aGUgTUlQUyBJSUkgaW5zdHJ1Y3Rpb24gc2V0CiAJICB3aXRoIG1hbnkgZXh0ZW5zaW9ucy4KIAotCSAgSXQgaGFzIGFuIGludGVybmFsIEZQR0Egbm9ydGhicmlkZ2UsIHdoaWNoIGlzIGNvbXBhdGlhYmxlIHRvCisJICBJdCBoYXMgYW4gaW50ZXJuYWwgRlBHQSBub3J0aGJyaWRnZSwgd2hpY2ggaXMgY29tcGF0aWJsZSB0bwogCSAgYm9uaXRvNjQuCiAKIGNvbmZpZyBDUFVfTE9PTkdTT04yRgpAQCAtMTM1OSw4ICsxMzU2LDYgQEAKIGNvbmZpZyBDUFVfQ0FWSVVNX09DVEVPTgogCWJvb2wgIkNhdml1bSBPY3Rlb24gcHJvY2Vzc29yIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfQ0FWSVVNX09DVEVPTgotCXNlbGVjdCBJUlFfQ1BVCi0Jc2VsZWN0IElSUV9DUFVfT0NURU9OCiAJc2VsZWN0IENQVV9IQVNfUFJFRkVUQ0gKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfU01QCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggYWMxZDViNi4uNTNlMzUxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMTAxLDcgKzEwMSw3IEBACiAjIGNhcmVmdWxseSBhdm9pZCB0byBhZGQgaXQgcmVkdW5kYW50bHkgYmVjYXVzZSBnY2MgMy4zLzMuNCBjb21wbGFpbnMKICMgd2hlbiBmZWQgdGhlIHRvb2xjaGFpbiBkZWZhdWx0IQogIwotIyBDZXJ0YWluIGdjYyB2ZXJzaW9ucyB1cHRvIGdjYyA0LjEuMSAocHJvYmFibHkgNC4yLXN1YnZlcnNpb24gYXMgb2YKKyMgQ2VydGFpbiBnY2MgdmVyc2lvbnMgdXAgdG8gZ2NjIDQuMS4xIChwcm9iYWJseSA0LjItc3VidmVyc2lvbiBhcyBvZgogIyAyMDA2LTEwLTEwIGRvbid0IHByb3Blcmx5IGNoYW5nZSB0aGUgcHJlZGVmaW5lZCBzeW1ib2xzIGlmIC1FQiAvIC1FTAogIyBhcmUgdXNlZCwgc28gd2Uga2x1ZGdlIHRoYXQgaGVyZS4gIEEgYnVnIGhhcyBiZWVuIGZpbGVkIGF0CiAjIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9Mjk0MTMuCkBAIC0zMTQsNSArMzE0LDUgQEAKIAllY2hvICcgIHZtbGludXouYmluICAgICAgICAgIC0gUmF3IGJpbmFyeSB6Ym9vdCBpbWFnZScKIAllY2hvICcgIHZtbGludXouc3JlYyAgICAgICAgIC0gU1JFQyB6Ym9vdCBpbWFnZScKIAllY2hvCi0JZWNobyAnICBUaGVzZSB3aWxsIGJlIGRlZmF1bHQgYXMgYXByb3ByaWF0ZSBmb3IgYSBjb25maWd1cmVkIHBsYXRmb3JtLicKKwllY2hvICcgIFRoZXNlIHdpbGwgYmUgZGVmYXVsdCBhcyBhcHByb3ByaWF0ZSBmb3IgYSBjb25maWd1cmVkIHBsYXRmb3JtLicKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKaW5kZXggYWYwZmU0MS4uZjM4Mjk4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYwpAQCAtNzUsNyArNzUsNyBAQAogICogY291bnRlciwgaWYgaXQgZXhpc3RzLiAgSWYgd2UgZG9uJ3QgaGF2ZSBhbiBhY2N1cmF0ZSBwcm9jZXNzb3IKICAqIHNwZWVkLCBhbGwgb2YgdGhlIHBlcmlwaGVyYWxzIHRoYXQgZGVyaXZlIHRoZWlyIGNsb2NrcyBiYXNlZCBvbgogICogdGhpcyBhZHZlcnRpc2VkIHNwZWVkIHdpbGwgaW50cm9kdWNlIGVycm9yIGFuZCBzb21ldGltZXMgbm90IHdvcmsKLSAqIHByb3Blcmx5LiAgVGhpcyBmdW5jdGlvbiBpcyBmdXRoZXIgY29udm9sdXRlZCB0byBzdGlsbCBhbGxvdyBjb25maWd1cmF0aW9ucworICogcHJvcGVybHkuICBUaGlzIGZ1bmN0aW9uIGlzIGZ1cnRoZXIgY29udm9sdXRlZCB0byBzdGlsbCBhbGxvdyBjb25maWd1cmF0aW9ucwogICogdG8gZG8gdGhhdCBpbiBjYXNlIHRoZXkgaGF2ZSByZWFsbHksIHJlYWxseSBvbGQgc2lsaWNvbiB3aXRoIGEKICAqIHdyaXRlLW9ubHkgUExMIHJlZ2lzdGVyLgkJCS0tIERhbgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKaW5kZXggMDVmMTIwZi4uNWM5NTZmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYwpAQCAtMTI3LDEzICsxMjcsMTAgQEAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBiY3NyMSwgYmNzcjI7Ci0JdTMyIHBpbl9mdW5jOwogCiAJYmNzcjEgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFI7CiAJYmNzcjIgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTOwogCi0JcGluX2Z1bmMgPSAwOwotCiAjaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCiAJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMDAwL0RiMTAwMCBCb2FyZFxuIik7CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYxLDE2IEBACiAJLyogTm90IHZhbGlkIGZvciBBdTE1NTAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19JUkRBKSAmJiBcCiAgICAoZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkpCi0JLyogU2V0IElSRklSU0VMIGluc3RlYWQgb2YgR1BJTzE1ICovCi0JcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOwotCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwotCS8qIFBvd2VyIG9mZiB1bnRpbCB0aGUgZHJpdmVyIGlzIGluIHVzZSAqLwotCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKLQkJCQlCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGKTsKKwl7CisJCXUzMiBwaW5fZnVuYzsKKworCQkvKiBTZXQgSVJGSVJTRUwgaW5zdGVhZCBvZiBHUElPMTUgKi8KKwkJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOworCQlhdV93cml0ZWwocGluX2Z1bmMsIFNZU19QSU5GVU5DKTsKKwkJLyogUG93ZXIgb2ZmIHVudGlsIHRoZSBkcml2ZXIgaXMgaW4gdXNlICovCisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKKwkJCSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGKTsKKwl9CiAjZW5kaWYKIAliY3NyX3dyaXRlKEJDU1JfUENNQ0lBLCAwKTsJLyogdHVybiBvZmYgUENNQ0lBIHBvd2VyICovCiAKQEAgLTE3NywzMSArMTc4LDM1IEBACiAJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKIAogI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotCS8qIEdQSU9bMjBdIGlzIG91dHB1dCAqLwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIwLCAwKTsKKwl7CisJCXUzMiBwaW5fZnVuYzsKIAotCS8qIFNldCBHUElPWzIxMDoyMDhdIGluc3RlYWQgb2YgU1NJXzAgKi8KLQlwaW5fZnVuYyA9IGF1X3JlYWRsKFNZU19QSU5GVU5DKSB8IFNZU19QRl9TMDsKKwkJLyogR1BJT1syMF0gaXMgb3V0cHV0ICovCisJCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIwLCAwKTsKIAotCS8qIFNldCBHUElPWzIxNToyMTFdIGZvciBMRURzICovCi0JcGluX2Z1bmMgfD0gNSA8PCAyOworCQkvKiBTZXQgR1BJT1syMTA6MjA4XSBpbnN0ZWFkIG9mIFNTSV8wICovCisJCXBpbl9mdW5jID0gYXVfcmVhZGwoU1lTX1BJTkZVTkMpIHwgU1lTX1BGX1MwOwogCi0JLyogU2V0IEdQSU9bMjE0OjIxM10gZm9yIG1vcmUgTEVEcyAqLwotCXBpbl9mdW5jIHw9IDUgPDwgMTI7CisJCS8qIFNldCBHUElPWzIxNToyMTFdIGZvciBMRURzICovCisJCXBpbl9mdW5jIHw9IDUgPDwgMjsKIAotCS8qIFNldCBHUElPWzIwNzoyMDBdIGluc3RlYWQgb2YgUENNQ0lBL0xDRCAqLwotCXBpbl9mdW5jIHw9IFNZU19QRl9MQ0QgfCBTWVNfUEZfUEM7Ci0JYXVfd3JpdGVsKHBpbl9mdW5jLCBTWVNfUElORlVOQyk7CisJCS8qIFNldCBHUElPWzIxNDoyMTNdIGZvciBtb3JlIExFRHMgKi8KKwkJcGluX2Z1bmMgfD0gNSA8PCAxMjsKIAotCS8qCi0JICogRW5hYmxlIHNwZWFrZXIgYW1wbGlmaWVyLiAgVGhpcyBzaG91bGQKLQkgKiBiZSBwYXJ0IG9mIHRoZSBhdWRpbyBkcml2ZXIuCi0JICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA5LCAxKTsKKwkJLyogU2V0IEdQSU9bMjA3OjIwMF0gaW5zdGVhZCBvZiBQQ01DSUEvTENEICovCisJCXBpbl9mdW5jIHw9IFNZU19QRl9MQ0QgfCBTWVNfUEZfUEM7CisJCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCi0JcG1fcG93ZXJfb2ZmID0gbWlyYWdlX3Bvd2VyX29mZjsKLQlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKLQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQoKikoY2hhciAqKSltaXBzX3NvZnRyZXNldDsKKwkJLyoKKwkJICogRW5hYmxlIHNwZWFrZXIgYW1wbGlmaWVyLiAgVGhpcyBzaG91bGQKKwkJICogYmUgcGFydCBvZiB0aGUgYXVkaW8gZHJpdmVyLgorCQkgKi8KKwkJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA5LCAxKTsKKworCQlwbV9wb3dlcl9vZmYgPSBtaXJhZ2VfcG93ZXJfb2ZmOworCQlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKKwkJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkKCopKGNoYXIgKikpbWlwc19zb2Z0cmVzZXQ7CisJfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwppbmRleCAxNTEyNWMyLi4zNGE5MGE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwpAQCAtNTEsMTAgKzUxLDkgQEAKIAlwcm9tX2luaXRfY21kbGluZSgpOwogCiAJbWVtc2l6ZV9zdHIgPSBwcm9tX2dldGVudigibWVtc2l6ZSIpOwotCWlmICghbWVtc2l6ZV9zdHIpCisJaWYgKCFtZW1zaXplX3N0ciB8fCBzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpKQogCQltZW1zaXplID0gMHgwNDAwMDAwMDsKLQllbHNlCi0JCXN0cmljdF9zdHJ0b3VsKG1lbXNpemVfc3RyLCAwLCAmbWVtc2l6ZSk7CisKIAlhZGRfbWVtb3J5X3JlZ2lvbigwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2NhbGNfdm1saW51el9sb2FkX2FkZHIuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jCmluZGV4IDg4YzlkOTYzLi45YTYyNDM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2NhbGNfdm1saW51el9sb2FkX2FkZHIuYworKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2NhbGNfdm1saW51el9sb2FkX2FkZHIuYwpAQCAtMTYsOCArMTYsOCBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogeworCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWxpbnV4X3NpemUsIHZtbGludXhfbG9hZF9hZGRyLCB2bWxpbnV6X2xvYWRfYWRkcjsKIAlzdHJ1Y3Qgc3RhdCBzYjsKLQl1aW50NjRfdCB2bWxpbnV4X3NpemUsIHZtbGludXhfbG9hZF9hZGRyLCB2bWxpbnV6X2xvYWRfYWRkcjsKIAogCWlmIChhcmdjICE9IDMpIHsKIAkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgPHBhdGhuYW1lPiA8dm1saW51eF9sb2FkX2FkZHI+XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL0tjb25maWcKaW5kZXggY2FhZTIyOC4uY2FkNTU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9LY29uZmlnCkBAIC0xLDExICsxLDcgQEAKLWNvbmZpZyBDQVZJVU1fT0NURU9OX1NQRUNJRklDX09QVElPTlMKLQlib29sICJFbmFibGUgT2N0ZW9uIHNwZWNpZmljIG9wdGlvbnMiCi0JZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgotCWRlZmF1bHQgInkiCitpZiBDUFVfQ0FWSVVNX09DVEVPTgogCiBjb25maWcgQ0FWSVVNX0NONjNYWFAxCiAJYm9vbCAiRW5hYmxlIENONjNYWFAxIGVycmF0YSB3b3Jhcm91bmRzIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAibiIKIAloZWxwCiAJICBUaGUgQ042M1hYUDEgY2hpcCByZXF1aXJlcyBidWlsZCB0aW1lIHdvcmthcm91bmRzIHRvCkBAIC0xNiw3ICsxMiw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OXzJORF9LRVJORUwKIAlib29sICJCdWlsZCB0aGUga2VybmVsIHRvIGJlIHVzZWQgYXMgYSAybmQga2VybmVsIG9uIHRoZSBzYW1lIGNoaXAiCi0JZGVwZW5kcyBvbiBDQVZJVU1fT0NURU9OX1NQRUNJRklDX09QVElPTlMKIAlkZWZhdWx0ICJuIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGNvbmZpZ3VyZXMgdGhpcyBrZXJuZWwgdG8gYmUgbGlua2VkIGF0IGEgZGlmZmVyZW50CkBAIC0yNiw3ICsyMSw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0hXX0ZJWF9VTkFMSUdORUQKIAlib29sICJFbmFibGUgaGFyZHdhcmUgZml4dXBzIG9mIHVuYWxpZ25lZCBsb2FkcyBhbmQgc3RvcmVzIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAieSIKIAloZWxwCiAJICBDb25maWd1cmUgdGhlIE9jdGVvbiBoYXJkd2FyZSB0byBhdXRvbWF0aWNhbGx5IGZpeCB1bmFsaWduZWQgbG9hZHMKQEAgLTM4LDcgKzMyLDYgQEAKIAogY29uZmlnIENBVklVTV9PQ1RFT05fQ1ZNU0VHX1NJWkUKIAlpbnQgIk51bWJlciBvZiBMMSBjYWNoZSBsaW5lcyByZXNlcnZlZCBmb3IgQ1ZNU0VHIG1lbW9yeSIKLQlkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU1BFQ0lGSUNfT1BUSU9OUwogCXJhbmdlIDAgNTQKIAlkZWZhdWx0IDEKIAloZWxwCkBAIC01MCw3ICs0Myw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0xPQ0tfTDIKIAlib29sICJMb2NrIG9mdGVuIHVzZWQga2VybmVsIGNvZGUgaW4gdGhlIEwyIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAieSIKIAloZWxwCiAJICBFbmFibGUgbG9ja2luZyBwYXJ0cyBvZiB0aGUga2VybmVsIGludG8gdGhlIEwyIGNhY2hlLgpAQCAtOTMsNyArODUsNiBAQAogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKIAlzZWxlY3QgU1BBUlNFTUVNX1NUQVRJQwotCWRlcGVuZHMgb24gQ1BVX0NBVklVTV9PQ1RFT04KIAogY29uZmlnIENBVklVTV9PQ1RFT05fSEVMUEVSCiAJZGVmX2Jvb2wgeQpAQCAtMTA3LDYgKzk4LDggQEAKIAogY29uZmlnIFNXSU9UTEIKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgogCXNlbGVjdCBJT01NVV9IRUxQRVIKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICisKKworZW5kaWYgIyBDUFVfQ0FWSVVNX09DVEVPTgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL29jdGVvbi1tb2RlbC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL29jdGVvbi1tb2RlbC5jCmluZGV4IDlhZmMzNzkuLmM4ZDM1NjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9vY3Rlb24tbW9kZWwuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvb2N0ZW9uLW1vZGVsLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAogCW51bV9jb3JlcyA9IGN2bXhfb2N0ZW9uX251bV9jb3JlcygpOwogCi0JLyogTWFrZSBzdXJlIHRoZSBub24gZXhpc3RhbnQgZGV2aWNlcyBsb29rIGRpc2FibGVkICovCisJLyogTWFrZSBzdXJlIHRoZSBub24gZXhpc3RlbnQgZGV2aWNlcyBsb29rIGRpc2FibGVkICovCiAJc3dpdGNoICgoY2hpcF9pZCA+PiA4KSAmIDB4ZmYpIHsKIAljYXNlIDY6CQkvKiBDTjUwWFggKi8KIAljYXNlIDI6CQkvKiBDTjMwWFggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMKaW5kZXggY2VjYWY2MmEuLmNkNjFkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCkBAIC03NSw3ICs3NSw3IEBACiAJCSAqIHplcm8uCiAJCSAqLwogCi0JCS8qIEFzdW1lIHRoYXQgQ1MxIGltbWVkaWF0ZWx5IGZvbGxvd3MuICovCisJCS8qIEFzc3VtZSB0aGF0IENTMSBpbW1lZGlhdGVseSBmb2xsb3dzLiAqLwogCQltaW9fYm9vdF9yZWdfY2ZnLnU2NCA9CiAJCQljdm14X3JlYWRfY3NyKENWTVhfTUlPX0JPT1RfUkVHX0NGR1goaSArIDEpKTsKIAkJcmVnaW9uX2Jhc2UgPSBtaW9fYm9vdF9yZWdfY2ZnLnMuYmFzZSA8PCAxNjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jCmluZGV4IDhiMTM5YmYuLjA3MDdmYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYwpAQCAtNjYyLDcgKzY2Miw3IEBACiAJICogc29tZSBtZW1vcnkgdmVjdG9ycy4gV2hlbiBTUEFSU0VNRU0gaXMgaW4gdXNlLCBpdCBkb2Vzbid0CiAJICogdmVyaWZ5IHRoYXQgdGhlIHNpemUgaXMgYmlnIGVub3VnaCBmb3IgdGhlIGZpbmFsCiAJICogdmVjdG9ycy4gTWFraW5nIHRoZSBzbWFsbGVzdCBjaHVjayA0TUIgc2VlbXMgdG8gYmUgZW5vdWdoCi0JICogdG8gY29uc2lzdGFudGx5IHdvcmsuCisJICogdG8gY29uc2lzdGVudGx5IHdvcmsuCiAJICovCiAJbWVtX2FsbG9jX3NpemUgPSA0IDw8IDIwOwogCWlmIChtZW1fYWxsb2Nfc2l6ZSA+IE1BWF9NRU1PUlkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZncvYXJjL3Byb21saWIuYyBiL2FyY2gvbWlwcy9mdy9hcmMvcHJvbWxpYi5jCmluZGV4IGM1MDhjMDAuLmI3ZjlkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9mdy9hcmMvcHJvbWxpYi5jCisrKyBiL2FyY2gvbWlwcy9mdy9hcmMvcHJvbWxpYi5jCkBAIC00LDcgKzQsNyBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBzZ2kuY29tKQotICogQ29tcGFiaWxpdHkgd2l0aCBib2FyZCBjYWNoZXMsIFVsZiBDYXJsc3NvbgorICogQ29tcGF0aWJpbGl0eSB3aXRoIGJvYXJkIGNhY2hlcywgVWxmIENhcmxzc29uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vc2dpYWxpYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA2NTBhYzliLi5iNGRiNjlmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMTcsNiArMTcsNiBAQAogI2RlZmluZSBTTVBfQ0FDSEVfU0hJRlQJCUwxX0NBQ0hFX1NISUZUCiAjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwkJTDFfQ0FDSEVfQllURVMKIAotI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKyNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuLnJlYWRfbW9zdGx5IikpKQogCiAjZW5kaWYgLyogX0FTTV9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2V2dC1yNGsuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jZXZ0LXI0ay5oCmluZGV4IGZhNDMyOGYuLjY1ZjliZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jZXZ0LXI0ay5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jZXZ0LXI0ay5oCkBAIC0xNCw2ICsxNCw5IEBACiAjaWZuZGVmIF9fQVNNX0NFVlRfUjRLX0gKICNkZWZpbmUgX19BU01fQ0VWVF9SNEtfSAogCisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlKTsKIAogdm9pZCBtaXBzX2V2ZW50X2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWMvcHJvbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9wcm9tLmgKaW5kZXggYjljODIwMy4uYzBlYWQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9wcm9tLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9wcm9tLmgKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAvKgogICogT24gTUlQUzY0IHdlIGhhdmUgdG8gY2FsbCBQUk9NIGZ1bmN0aW9ucyB2aWEgYSBoZWxwZXIKLSAqIGRpc3BhdGNoZXIgdG8gYWNjb21vZGF0ZSBBQkkgaW5jb21wYXRpYmlsaXRpZXMuCisgKiBkaXNwYXRjaGVyIHRvIGFjY29tbW9kYXRlIEFCSSBpbmNvbXBhdGliaWxpdGllcy4KICAqLwogI2RlZmluZSBfX0RFQ19QUk9NX08zMihmdW4sIGFyZykgZnVuIGFyZyBfX2FzbV9fKCNmdW4pOyBcCiAJCQkJIF9fYXNtX18oI2Z1biAiID0gY2FsbF9vMzIiKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Zsb3BweS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Zsb3BweS5oCmluZGV4IDk5MmQyMzIuLmM1YzdjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mbG9wcHkuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZmxvcHB5LmgKQEAgLTI0LDcgKzI0LDcgQEAKICAqIEFuZCBvbiBNaXBzJ3MgdGhlIENNT1MgaW5mbyBmYWlscyBhbHNvIC4uLgogICoKICAqIEZJWE1FOiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gdGhlIEFSQyBjb25maWd1cmF0aW9uIHRyZWUKLSAqICAgICAgICBvciB3aGVyZWV2ZXIgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgaGFzIHN0b3JlZCB0aGlzIC4uLgorICogICAgICAgIG9yIHdoZXJldmVyIGEgcGFydGljdWxhciBtYWNoaW5lIGhhcyBzdG9yZWQgdGhpcyAuLi4KICAqLwogI2RlZmluZSBGTE9QUFkwX1RZUEUgCQlmZF9kcml2ZV90eXBlKDApCiAjZGVmaW5lIEZMT1BQWTFfVFlQRQkJZmRfZHJpdmVfdHlwZSgxKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgKaW5kZXggZjVlODU2MDEuLmM1NjViN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaApAQCAtNzAsNiArNzAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CisJZmx1c2hfdGxiX21tKHZtYS0+dm1fbW0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBodWdlX3B0ZV9ub25lKHB0ZV90IHB0ZSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCBhY2EwNWE0Li43N2FkZGEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0xMyw3ICsxMyw3IEBACiBleHRlcm4gYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKIAogLyoKLSAqIGludGVycnVwdC1yZXRyaWdnZXI6IE5PUCBmb3Igbm93LiBUaGlzIG1heSBub3QgYmUgYXByb3ByaWF0ZSBmb3IgYWxsCisgKiBpbnRlcnJ1cHQtcmV0cmlnZ2VyOiBOT1AgZm9yIG5vdy4gVGhpcyBtYXkgbm90IGJlIGFwcHJvcHJpYXRlIGZvciBhbGwKICAqIG1hY2hpbmVzLCB3ZSdsbCBzZWUgLi4uCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaAppbmRleCA1YjAxN2YyLi5iMDRlNGRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaApAQCAtMjQyLDcgKzI0Miw3IEBACiAgKiBUaGlzIHZlcnNpb24gb2YgaW9yZW1hcCBlbnN1cmVzIHRoYXQgdGhlIG1lbW9yeSBpcyBtYXJrZWQgdW5jYWNoYWJsZQogICogb24gdGhlIENQVSBhcyB3ZWxsIGFzIGhvbm91cmluZyBleGlzdGluZyBjYWNoaW5nIHJ1bGVzIGZyb20gdGhpbmdzIGxpa2UKICAqIHRoZSBQQ0kgYnVzLiBOb3RlIHRoYXQgdGhlcmUgYXJlIG90aGVyIGNhY2hlcyBhbmQgYnVmZmVycyBvbiBtYW55Ci0gKiBidXNzZXMuIEluIHBhdGljdWxhciBkcml2ZXIgYXV0aG9ycyBzaG91bGQgcmVhZCB1cCBvbiBQQ0kgd3JpdGVzCisgKiBidXNzZXMuIEluIHBhcnRpY3VsYXIgZHJpdmVyIGF1dGhvcnMgc2hvdWxkIHJlYWQgdXAgb24gUENJIHdyaXRlcwogICoKICAqIEl0J3MgdXNlZnVsIGlmIHNvbWUgY29udHJvbCByZWdpc3RlcnMgYXJlIGluIHN1Y2ggYW4gYXJlYSBhbmQKICAqIHdyaXRlIGNvbWJpbmluZyBvciByZWFkIGNhY2hpbmcgaXMgbm90IGRlc2lyYWJsZToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggOWVmM2IwZC4uMzA5Y2JjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTE3NCw3ICsxNzQsNyBAQAogCSJtdGMwCVxcZmxhZ3MsICQyLCAxCQkJCQkJXG4iCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKSAmJiBkZWZpbmVkKENPTkZJR19JUlFfQ1BVKQogCS8qCi0JICogU2xvdywgYnV0IGRvZXNuJ3Qgc3VmZmVyIGZyb20gYSByZWxhdGl2bHkgdW5saWtlbHkgcmFjZQorCSAqIFNsb3csIGJ1dCBkb2Vzbid0IHN1ZmZlciBmcm9tIGEgcmVsYXRpdmVseSB1bmxpa2VseSByYWNlCiAJICogY29uZGl0aW9uIHdlJ3JlIGhhdmluZyBzaW5jZSBkYXlzIDEuCiAJICovCiAJIgliZXF6CVxcZmxhZ3MsIDFmCQkJCQlcbiIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtOTYzeHhfdGFnLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTk2M3h4X3RhZy5oCmluZGV4IDUzMjUwODQuLmVkNzJlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtOTYzeHhfdGFnLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY205NjN4eF90YWcuaApAQCAtNCw3ICs0LDcgQEAKICNkZWZpbmUgVEFHVkVSX0xFTgkJNAkvKiBMZW5ndGggb2YgVGFnIFZlcnNpb24gKi8KICNkZWZpbmUgVEFHTEFZT1VUX0xFTgkJNAkvKiBMZW5ndGggb2YgRmxhc2hMYXlvdXRWZXIgKi8KICNkZWZpbmUgU0lHMV9MRU4JCTIwCS8qIENvbXBhbnkgU2lnbmF0dXJlIDEgTGVuZ3RoICovCi0jZGVmaW5lIFNJRzJfTEVOCQkxNAkvKiBDb21wYW55IFNpZ25hdHVyZSAyIExlbmdodCAqLworI2RlZmluZSBTSUcyX0xFTgkJMTQJLyogQ29tcGFueSBTaWduYXR1cmUgMiBMZW5ndGggKi8KICNkZWZpbmUgQk9BUkRJRF9MRU4JCTE2CS8qIExlbmd0aCBvZiBCb2FyZElkICovCiAjZGVmaW5lIEVORElBTkZMQUdfTEVOCQkyCS8qIEVuZGlhbiBGbGFnIExlbmd0aCAqLwogI2RlZmluZSBDSElQSURfTEVOCQk2CS8qIENoaXAgSWQgTGVuZ3RoICovCkBAIC04OCw3ICs4OCw3IEBACiAJY2hhciBrZXJuZWxfY3JjW0NSQ19MRU5dOwogCS8qIDIyOC0yMzU6IFVudXNlZCBhdCBwcmVzZW50ICovCiAJY2hhciByZXNlcnZlZDFbOF07Ci0JLyogMjM2LTIzOTogQ1JDMzIgb2YgaGVhZGVyIGV4Y2x1ZGluZyB0YWdWZXJzaW9uICovCisJLyogMjM2LTIzOTogQ1JDMzIgb2YgaGVhZGVyIGV4Y2x1ZGluZyBsYXN0IDIwIGJ5dGVzICovCiAJY2hhciBoZWFkZXJfY3JjW0NSQ19MRU5dOwogCS8qIDI0MC0yNTU6IFVudXNlZCBhdCBwcmVzZW50ICovCiAJY2hhciByZXNlcnZlZDJbMTZdOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAzMi9tYzE0NjgxOHJ0Yy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAzMi9tYzE0NjgxOHJ0Yy5oCmluZGV4IGMyOGJhOGQuLjZiNmJhYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMzIvbWMxNDY4MThydGMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDMyL21jMTQ2ODE4cnRjLmgKQEAgLTI2LDcgKzI2LDcgQEAKIH0KIAogLyoKLSAqIEZJWE1FOiBEbyBpdCByaWdodC4gRm9yIG5vdyBqdXN0IGFzc3VtZSB0aGF0IG5vb25lIGxpdmVzIGluIDIwdGggY2VudHVyeQorICogRklYTUU6IERvIGl0IHJpZ2h0LiBGb3Igbm93IGp1c3QgYXNzdW1lIHRoYXQgbm8gb25lIGxpdmVzIGluIDIwdGggY2VudHVyeQogICogYW5kIG5vIE8yIHVzZXIgaW4gMjJ0aCBjZW50dXJ5IDstKQogICovCiAjZGVmaW5lIG1jMTQ2ODE4X2RlY29kZV95ZWFyKHllYXIpICgoeWVhcikgKyAyMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNi5oCmluZGV4IDAyMWY3N2MuLjJhOGUyYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzYuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogVGhlIGhlYWRlciBmaWxlIG9mIGNzNTUzNiBzb3VydGggYnJpZGdlLgorICogVGhlIGhlYWRlciBmaWxlIG9mIGNzNTUzNiBzb3V0aCBicmlkZ2UuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgogICogQXV0aG9yIDogamxsaXUgPGxpdWpsQGxlbW90ZS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMDAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMDAwLmgKaW5kZXggNmQxZmY5MC4uNjUwNTkyNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTAwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEwMDAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBBbGNoZW15IFNlbWkgUGIxMDAwIFJlZmVycmVuY2UgQm9hcmQKKyAqIEFsY2hlbXkgU2VtaSBQYjEwMDAgUmVmZXJlbmNlIEJvYXJkCiAgKgogICogQ29weXJpZ2h0IDIwMDEsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCiAgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oCmluZGV4IDk2MmViNTUuLmZjZTQzMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQU1EIEFsY2hlbXkgUGIxMjAwIFJlZmVycmVuY2UgQm9hcmQKKyAqIEFNRCBBbGNoZW15IFBiMTIwMCBSZWZlcmVuY2UgQm9hcmQKICAqIEJvYXJkIFJlZ2lzdGVycyBkZWZpbmVzLgogICoKICAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCmluZGV4IGZjNGQ3NjYuLmY4MzVjODggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQU1EIEFsY2hlbXkgU2VtaSBQQjE1NTAgUmVmZXJyZW5jZSBCb2FyZAorICogQU1EIEFsY2hlbXkgU2VtaSBQQjE1NTAgUmVmZXJlbmNlIEJvYXJkCiAgKiBCb2FyZCBSZWdpc3RlcnMgZGVmaW5lcy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwNCBFbWJlZGRlZCBFZGdlIExMQy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvZG1hLWNvaGVyZW5jZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9kbWEtY29oZXJlbmNlLmgKaW5kZXggZjc2MDI5Yy4uYThlNzJjZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9kbWEtY29oZXJlbmNlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9kbWEtY29oZXJlbmNlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJCQkvKiBjaGVjayBmb3IgYSB2YWxpZCBwYWdlICovCiAJCQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHsKIAkJCQkJLyogZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoZSBwYWdlIGlzCi0JCQkJCSAqIHJlZmVyaW5nIHRvICovCisJCQkJCSAqIHJlZmVycmluZyB0byAqLwogCQkJCQlwaHlzX2FkZHIgPSAodW5zaWduZWQgbG9uZykKIAkJCQkJCXBhZ2VfdG9fcGh5cyhwdGVfcGFnZShwdGUpKTsKIAkJCQkJLyogYWRkIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBwYWdlICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCmluZGV4IDRkOTg3MDkuLjZhNmY4YTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCkBAIC05MjIsNyArOTIyLDcgQEAKICNkZWZpbmUgd3JpdGVfYzBfY29uZmlnNyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCA3LCB2YWwpCiAKIC8qCi0gKiBUaGUgV2F0Y2hMbyByZWdpc3Rlci4gIFRoZXJlIG1heSBiZSB1cHRvIDggb2YgdGhlbS4KKyAqIFRoZSBXYXRjaExvIHJlZ2lzdGVyLiAgVGhlcmUgbWF5IGJlIHVwIHRvIDggb2YgdGhlbS4KICAqLwogI2RlZmluZSByZWFkX2MwX3dhdGNobG8wKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgMCkKICNkZWZpbmUgcmVhZF9jMF93YXRjaGxvMSgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDEpCkBAIC05NDIsNyArOTQyLDcgQEAKICNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hsbzcodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgNywgdmFsKQogCiAvKgotICogVGhlIFdhdGNoSGkgcmVnaXN0ZXIuICBUaGVyZSBtYXkgYmUgdXB0byA4IG9mIHRoZW0uCisgKiBUaGUgV2F0Y2hIaSByZWdpc3Rlci4gIFRoZXJlIG1heSBiZSB1cCB0byA4IG9mIHRoZW0uCiAgKi8KICNkZWZpbmUgcmVhZF9jMF93YXRjaGhpMCgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDApCiAjZGVmaW5lIHJlYWRfYzBfd2F0Y2hoaTEoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWJvb3RpbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYm9vdGluZm8uaAppbmRleCBmM2MyM2E0Li40ZTRjM2E4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYm9vdGluZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYm9vdGluZm8uaApAQCAtMjAwLDcgKzIwMCw3IEBACiAJQ1ZNWF9DSElQX1RZUEVfTUFYLAogfTsKIAotLyogQ29tcGF0YWJpbGl0eSBhbGlhcyBmb3IgTkFDMzggbmFtZSBjaGFuZ2UsIHBsYW5uZWQgdG8gYmUgcmVtb3ZlZAorLyogQ29tcGF0aWJpbGl0eSBhbGlhcyBmb3IgTkFDMzggbmFtZSBjaGFuZ2UsIHBsYW5uZWQgdG8gYmUgcmVtb3ZlZAogICogZnJvbSBTREsgMS43ICovCiAjZGVmaW5lIENWTVhfQk9BUkRfVFlQRV9OQU8zOAlDVk1YX0JPQVJEX1RZUEVfTkFDMzgKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWJvb3RtZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ib290bWVtLmgKaW5kZXggOGU3MDhiZC4uODc3ODQ1YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWJvb3RtZW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYm9vdG1lbS5oCkBAIC02Nyw3ICs2Nyw3IEBACiAKIC8qCiAgKiBTdHJ1Y3R1cmUgZm9yIG5hbWVkIG1lbW9yeSBibG9ja3MuICBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgYXZhaWxhYmxlCi0gKiBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IGFmZmVjdGluZyBjb21wYXRpYmxpdHksIGJ1dCBuYW1lIGxlbmd0aAorICogY2FuIGJlIGNoYW5nZWQgd2l0aG91dCBhZmZlY3RpbmcgY29tcGF0aWJpbGl0eSwgYnV0IG5hbWUgbGVuZ3RoCiAgKiBjaGFuZ2VzIHJlcXVpcmUgYSBidW1wIGluIHRoZSBib290bWVtIGRlc2NyaXB0b3IgdmVyc2lvbiBOb3RlOiBUaGlzCiAgKiBzdHJ1Y3R1cmUgbXVzdCBiZSBuYXR1cmFsbHkgNjQgYml0IGFsaWduZWQsIGFzIGEgc2luZ2xlIG1lbW9yeQogICogaW1hZ2Ugd2lsbCBiZSB1c2VkIGJ5IGJvdGggMzIgYW5kIDY0IGJpdCBwcm9ncmFtcy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1sMmMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1sMmMuaAppbmRleCAwYjMyYzViLi4yYzhmZjllIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbDJjLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWwyYy5oCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogLyoqCiAgKiBDb25maWd1cmUgb25lIG9mIHRoZSBmb3VyIEwyIENhY2hlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHRvIGNhcHR1cmUgZXZlbnQKLSAqIG9jY3VyZW5jZXMuCisgKiBvY2N1cnJlbmNlcy4KICAqCiAgKiBAY291bnRlcjogICAgICAgIFRoZSBjb3VudGVyIHRvIGNvbmZpZ3VyZS4gUmFuZ2UgMC4uMy4KICAqIEBldmVudDogICAgICAgICAgVGhlIHR5cGUgb2YgTDIgQ2FjaGUgZXZlbnQgb2NjdXJyZW5jZSB0byBjb3VudC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LmgKaW5kZXggOWQ5MzgxZS4uN2UxMjg2NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LmgKQEAgLTE1MSw3ICsxNTEsNyBAQAogI2VuZGlmCiAKIC8qKgotICogQ29udmVydCBhIG1lbW9yeSBwb2ludGVyICh2b2lkKikgaW50byBhIGhhcmR3YXJlIGNvbXBhdGFibGUKKyAqIENvbnZlcnQgYSBtZW1vcnkgcG9pbnRlciAodm9pZCopIGludG8gYSBoYXJkd2FyZSBjb21wYXRpYmxlCiAgKiBtZW1vcnkgYWRkcmVzcyAodWludDY0X3QpLiBPY3Rlb24gaGFyZHdhcmUgd2lkZ2V0cyBkb24ndAogICogdW5kZXJzdGFuZCBsb2dpY2FsIGFkZHJlc3Nlcy4KICAqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFjY2Vzcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhY2Nlc3MuaAppbmRleCBjMjM5NGY4Li45Y2U1YTFlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFjY2Vzcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWNjZXNzLmgKQEAgLTcsNyArNyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICoKICAqIFByb3RlY3RlZCBtZW1vcnkgYWNjZXNzLiAgVXNlZCBmb3IgZXZlcnl0aGluZyB0aGF0IG1pZ2h0IHRha2UgcmV2ZW5nZQotICogYnkgc2VuZGluZyBhIERCRSBlcnJvciBsaWtlIGFjY2Vzc2luZyBwb3NzaWJseSBub24tZXhpc3RhbnQgbWVtb3J5IG9yCisgKiBieSBzZW5kaW5nIGEgREJFIGVycm9yIGxpa2UgYWNjZXNzaW5nIHBvc3NpYmx5IG5vbi1leGlzdGVudCBtZW1vcnkgb3IKICAqIGRldmljZXMuCiAgKi8KICNpZm5kZWYgX0FTTV9QQUNDRVNTX0gKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wY2kvYnJpZGdlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGNpL2JyaWRnZS5oCmluZGV4IGYxZjUwOGUuLmJlNDRmYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wY2kvYnJpZGdlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BjaS9icmlkZ2UuaApAQCAtMjYyLDcgKzI2Miw3IEBACiB9IGJyaWRnZV90OwogCiAvKgotICogRmllbGQgZm9ybWF0cyBmb3IgRXJyb3IgQ29tbWFuZCBXb3JkIGFuZCBBdXhpbGxhcnkgRXJyb3IgQ29tbWFuZCBXb3JkCisgKiBGaWVsZCBmb3JtYXRzIGZvciBFcnJvciBDb21tYW5kIFdvcmQgYW5kIEF1eGlsaWFyeSBFcnJvciBDb21tYW5kIFdvcmQKICAqIG9mIGJyaWRnZS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgYnJpZGdlX2Vycl9jbWR3b3JkX3MgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcmVnb3BzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9yZWdvcHMuaAppbmRleCA2MGE1YTM4Li43ZDQxNDc0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9yZWdvcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9yZWdvcHMuaApAQCAtMjA1LDcgKzIwNSw3IEBACiAgKiAgIGN1c3RvbV9yZWFkX3JlZzMyKGFkZHJlc3MsIHRtcCk7CTwtLSBSZWFkcyB0aGUgYWRkcmVzcyBhbmQgcHV0IHRoZSB2YWx1ZQogICoJCQkJCQlpbiB0aGUgJ3RtcCcgdmFyaWFibGUgZ2l2ZW4KICAqCi0gKglGcm9tIGhlcmUgb24gb3V0LCB5b3UgYXJlIChiYXNpY2x5KSBhdG9taWMsIHNvIGRvbid0IGRvIGFueXRoaW5nIHRvbworICoJRnJvbSBoZXJlIG9uIG91dCwgeW91IGFyZSAoYmFzaWNhbGx5KSBhdG9taWMsIHNvIGRvbid0IGRvIGFueXRoaW5nIHRvbwogICoJZmFuY3khCiAgKglBbHNvLCB0aGlzIGNvZGUgbWF5IGxvb3AgaWYgdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGZhaWxzIHRvIHdyaXRlCiAgKglldmVyeXRoaW5nIGJhY2sgc2FmZWx5IGR1ZSBkbyB0aGUgb3RoZXIgQ1BVLCBzbyBkbyBOT1QgZG8gYW55dGhpbmcKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBlYWQ2OTI4Li5jMTA0ZjEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMzcsNyArMzM3LDcgQEAKIC8qCiAgKiBSZXR1cm5fYWRkcmVzcyBpcyBhIHJlcGxhY2VtZW50IGZvciBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoY291bnQpCiAgKiB3aGljaCBvbiBjZXJ0YWluIGFyY2hpdGVjdHVyZXMgY2Fubm90IHJlYXNvbmFibHkgYmUgaW1wbGVtZW50ZWQgaW4gR0NDCi0gKiAoTUlQUywgQWxwaGEpIG9yIGlzIHVudXNlYWJsZSB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyIChpMzg2KS4KKyAqIChNSVBTLCBBbHBoYSkgb3IgaXMgdW51c2FibGUgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlciAoaTM4NikuCiAgKiBOb3RlIHRoYXQgX19idWlsdGluX3JldHVybl9hZGRyZXNzKHg+PTEpIGlzIGZvcmJpZGRlbiBiZWNhdXNlIEdDQwogICogYWJvcnRzIGNvbXBpbGF0aW9uIG9uIHNvbWUgQ1BVcy4gIEl0J3Mgc2ltcGx5IG5vdCBwb3NzaWJsZSB0byB1bndpbmQKICAqIHNvbWUgQ1BVJ3Mgc3RhY2tmcmFtZXMuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpL2lvYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaS9pb2MuaAppbmRleCA1N2E5NzE5Li4zODAzNDdiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpL2lvYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2kvaW9jLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vc2dpL3BpMS5oPgogCiAvKgotICogQWxsIHJlZ2lzdGVycyBhcmUgOC1iaXQgd2lkZSBhbGxpZ25lZCBvbiAzMi1iaXQgYm91bmRhcnkuIEJhZCB0aGluZ3MKKyAqIEFsbCByZWdpc3RlcnMgYXJlIDgtYml0IHdpZGUgYWxpZ25lZCBvbiAzMi1iaXQgYm91bmRhcnkuIEJhZCB0aGluZ3MKICAqIGhhcHBlbiBpZiB5b3UgdHJ5IHdvcmQgYWNjZXNzIHRoZW0uIFlvdSBoYXZlIGJlZW4gd2FybmVkLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX21hYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbWFjLmgKaW5kZXggNTkxYjkwNi4uNzdmNzg3MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbWFjLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbWFjLmgKQEAgLTUyMCw3ICs1MjAsNyBAQAogI2RlZmluZSBHX01BQ19SWF9FT1BfQ09VTlRFUih4KSAgICAgX1NCX0dFVFZBTFVFKHgsIFNfTUFDX1JYX0VPUF9DT1VOVEVSLCBNX01BQ19SWF9FT1BfQ09VTlRFUikKIAogLyoKLSAqIE1BQyBSZWNpZXZlIEFkZHJlc3MgRmlsdGVyIEV4YWN0IE1hdGNoIFJlZ2lzdGVycyAoVGFibGUgOS0yMSkKKyAqIE1BQyBSZWNlaXZlIEFkZHJlc3MgRmlsdGVyIEV4YWN0IE1hdGNoIFJlZ2lzdGVycyAoVGFibGUgOS0yMSkKICAqIFJlZ2lzdGVyczogTUFDX0FERFIwXzAgdGhyb3VnaCBNQUNfQUREUjdfMAogICogUmVnaXN0ZXJzOiBNQUNfQUREUjBfMSB0aHJvdWdoIE1BQ19BRERSN18xCiAgKiBSZWdpc3RlcnM6IE1BQ19BRERSMF8yIHRocm91Z2ggTUFDX0FERFI3XzIKQEAgLTUzOCw3ICs1MzgsNyBAQAogLyogTm8gYml0ZmllbGRzICovCiAKIC8qCi0gKiBNQUMgUmVjaWV2ZSBBZGRyZXNzIEZpbHRlciBIYXNoIE1hdGNoIFJlZ2lzdGVycyAoVGFibGUgOS0yMikKKyAqIE1BQyBSZWNlaXZlIEFkZHJlc3MgRmlsdGVyIEhhc2ggTWF0Y2ggUmVnaXN0ZXJzIChUYWJsZSA5LTIyKQogICogUmVnaXN0ZXJzOiBNQUNfSEFTSDBfMCB0aHJvdWdoIE1BQ19IQVNIN18wCiAgKiBSZWdpc3RlcnM6IE1BQ19IQVNIMF8xIHRocm91Z2ggTUFDX0hBU0g3XzEKICAqIFJlZ2lzdGVyczogTUFDX0hBU0gwXzIgdGhyb3VnaCBNQUNfSEFTSDdfMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKaW5kZXggMWNhNjRiNC4uMjBlYmViOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnaW5mby5oCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogLyoKICAqIHNpX2NvZGUgdmFsdWVzCi0gKiBBZ2FpbiB0aGVzZSBoYXZlIGJlZW4gY2hvb3NlbiB0byBiZSBJUklYIGNvbXBhdGlibGUuCisgKiBBZ2FpbiB0aGVzZSBoYXZlIGJlZW4gY2hvc2VuIHRvIGJlIElSSVggY29tcGF0aWJsZS4KICAqLwogI3VuZGVmIFNJX0FTWU5DSU8KICN1bmRlZiBTSV9USU1FUgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsY29uZmlnLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xjb25maWcuaAppbmRleCAwOWU1OTBkLi5mZTAyOTAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xjb25maWcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xjb25maWcuaApAQCAtNzgsNyArNzgsNyBAQAogICovCiAjZGVmaW5lIE1BWF9TTE9UU19QRVJfTk9ERQkoMSArIDIgKyA2ICsgMikKIAotLyogWFhYIGlmIGVhY2ggbm9kZSBpcyBndXJhbnRlZWQgdG8gaGF2ZSBzb21lIG1lbW9yeSAqLworLyogWFhYIGlmIGVhY2ggbm9kZSBpcyBndWFyYW50ZWVkIHRvIGhhdmUgc29tZSBtZW1vcnkgKi8KIAogI2RlZmluZSBNQVhfUENJX0RFVlMJCTgKIApAQCAtNTM5LDcgKzUzOSw3IEBACiAjZGVmaW5lIEtMU1RSVUNUX0lPQzNfVFRZIAkyNAogCiAvKiBFYXJseSBBY2Nlc3MgSU8gcHJvbXMgYXJlIGNvbXBhdGlibGUKLSAgIG9ubHkgd2l0aCBLTFNUUlVDVCB2YWx1ZXMgdXB0byAyNC4gKi8KKyAgIG9ubHkgd2l0aCBLTFNUUlVDVCB2YWx1ZXMgdXAgdG8gMjQuICovCiAKICNkZWZpbmUgS0xTVFJVQ1RfRklCRVJDSEFOTkVMIAkyNQogI2RlZmluZSBLTFNUUlVDVF9NT0RfU0VSSUFMX05VTSAyNgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL3NuMC9odWJpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL3NuMC9odWJpby5oCmluZGV4IDMxYzc2YzAuLjQ2Mjg2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9zbjAvaHViaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24vc24wL2h1YmlvLmgKQEAgLTYyMiw3ICs2MjIsNyBAQAogICovCiAjZGVmaW5lCUlJT19JQ1JCX1BST0MwCQkwCS8qIFNvdXJjZSBvZiByZXF1ZXN0IGlzIFByb2MgMCAqLwogI2RlZmluZQlJSU9fSUNSQl9QUk9DMQkJMQkvKiBTb3VyY2Ugb2YgcmVxdWVzdCBpcyBQcm9jIDEgKi8KLSNkZWZpbmUJSUlPX0lDUkJfR0JfUkVRCQkyCS8qIFNvdXJjZSBpcyBHdXJhbnRlZWQgQlcgcmVxdWVzdCAqLworI2RlZmluZQlJSU9fSUNSQl9HQl9SRVEJCTIJLyogU291cmNlIGlzIEd1YXJhbnRlZWQgQlcgcmVxdWVzdCAqLwogI2RlZmluZQlJSU9fSUNSQl9JT19SRVEJCTMJLyogU291cmNlIGlzIE5vcm1hbCBJTyByZXF1ZXN0CSovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhY2tmcmFtZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N0YWNrZnJhbWUuaAppbmRleCA1ODczMGM1Li5iNGJhMjQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhY2tmcmFtZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zdGFja2ZyYW1lLmgKQEAgLTM0Niw3ICszNDYsNyBAQAogCQkgKiB3ZSBjYW4ndCBkaXNwYXRjaCBpdCBkaXJlY3RseSB3aXRob3V0IHRyYXNoaW5nCiAJCSAqIHNvbWUgcmVnaXN0ZXJzLCBzbyB3ZSdsbCB0cnkgdG8gZGV0ZWN0IHRoaXMgdW5saWtlbHkKIAkJICogY2FzZSBhbmQgcHJvZ3JhbSBhIHNvZnR3YXJlIGludGVycnVwdCBpbiB0aGUgVlBFLAotCQkgKiBhcyB3b3VsZCBiZSBkb25lIGZvciBhIGNyb3NzLVZQRSBJUEkuICBUbyBhY2NvbW9kYXRlCisJCSAqIGFzIHdvdWxkIGJlIGRvbmUgZm9yIGEgY3Jvc3MtVlBFIElQSS4gIFRvIGFjY29tbW9kYXRlCiAJCSAqIHRoZSBoYW5kbGluZyBvZiB0aGF0IGNhc2UsIHdlJ3JlIGRvaW5nIGEgRFZQRSBpbnN0ZWFkCiAJCSAqIG9mIGp1c3QgYSBETVQgaGVyZSB0byBwcm90ZWN0IGFnYWluc3Qgb3RoZXIgdGhyZWFkcy4KIAkJICogVGhpcyBpcyBhIGxvdCBvZiBjcnVmdCB0byBjb3ZlciBhIHRpbnkgd2luZG93LgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3dhci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3dhci5oCmluZGV4IDIyMzYxZDUuLmZhMTMzYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS93YXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vd2FyLmgKQEAgLTIyNyw3ICsyMjcsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBPbiB0aGUgUjEwMDAwIHVwdG8gdmVyc2lvbiAyLjYgKG5vdCBzdXJlIGFib3V0IDIuNykgdGhlcmUgaXMgYSBidWcgdGhhdAorICogT24gdGhlIFIxMDAwMCB1cCB0byB2ZXJzaW9uIDIuNiAobm90IHN1cmUgYWJvdXQgMi43KSB0aGVyZSBpcyBhIGJ1ZyB0aGF0CiAgKiBtYXkgY2F1c2UgbGwgLyBzYyBhbmQgbGxkIC8gc2NkIHNlcXVlbmNlcyB0byBleGVjdXRlIG5vbi1hdG9taWNhbGx5LgogICovCiAjaWZuZGVmIFIxMDAwMF9MTFNDX1dBUgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovamF6emRtYS5jIGIvYXJjaC9taXBzL2phenovamF6emRtYS5jCmluZGV4IDljZTlmNjQuLjJkOGU0NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYworKysgYi9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogICovCiBpbnQgdmRtYV9yZW1hcCh1bnNpZ25lZCBsb25nIGxhZGRyLCB1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JaW50IGZpcnN0LCBwYWdlcywgbnBhZ2VzOworCWludCBmaXJzdCwgcGFnZXM7CiAKIAlpZiAobGFkZHIgPiAweGZmZmZmZikgewogCQlpZiAodmRtYV9kZWJ1ZykKQEAgLTIyOCw4ICsyMjgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsJLyogaW52YWxpZCBwaHlzaWNhbCBhZGRyZXNzICovCiAJfQogCi0JbnBhZ2VzID0gcGFnZXMgPQotCSAgICAoKChwYWRkciAmIChWRE1BX1BBR0VTSVpFIC0gMSkpICsgc2l6ZSkgPj4gMTIpICsgMTsKKwlwYWdlcyA9ICgoKHBhZGRyICYgKFZETUFfUEFHRVNJWkUgLSAxKSkgKyBzaXplKSA+PiAxMikgKyAxOwogCWZpcnN0ID0gbGFkZHIgPj4gMTI7CiAJaWYgKHZkbWFfZGVidWcpCiAJCXByaW50aygidmRtYV9yZW1hcDogZmlyc3Q9JXgsIHBhZ2VzPSV4XG4iLCBmaXJzdCwgcGFnZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9ib2FyZC1xaV9sYjYwLmMgYi9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYwppbmRleCBiYzE4ZGFhLi5jM2IwNGJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYworKysgYi9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYwpAQCAtNjUsNyArNjUsNyBAQAogfTsKIAogLyogRWFybHkgcHJvdG90eXBlcyBvZiB0aGUgUUkgTEI2MCBoYWQgb25seSAxR0Igb2YgTkFORC4KLSAqIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlc2UgZGV2aWNlcyBhc3dlbGwgdGhlIHBhcnRpdGlvbiBhbmQgZWNjIGxheW91dCBpcworICogSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGVzZSBkZXZpY2VzIGFzIHdlbGwgdGhlIHBhcnRpdGlvbiBhbmQgZWNjIGxheW91dCBpcwogICogaW5pdGlhbGl6ZWQgZGVwZW5kaW5nIG9uIHRoZSBOQU5EIHNpemUgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBxaV9sYjYwX3BhcnRpdGlvbnNfMWdiW10gPSB7CiAJewpAQCAtNDM5LDcgKzQzOSw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYm9hcmRfZ3Bpb19zZXR1cCh2b2lkKQogewogCS8qIFdlIG9ubHkgbmVlZCB0byBlbmFibGUvZGlzYWJsZSBwdWxsdXAgaGVyZSBmb3IgcGlucyB1c2VkIGluIGdlbmVyaWMKLQkgKiBkcml2ZXJzLiBFdmVyeXRoaW5nIGVsc2UgaXMgZG9uZSBieSB0aGUgZHJpdmVycyB0aGVtc2VsZnMuICovCisJICogZHJpdmVycy4gRXZlcnl0aGluZyBlbHNlIGlzIGRvbmUgYnkgdGhlIGRyaXZlcnMgdGhlbXNlbHZlcy4gKi8KIAlqel9ncGlvX2Rpc2FibGVfcHVsbHVwKFFJX0xCNjBfR1BJT19TRF9WQ0NfRU5fTik7CiAJanpfZ3Bpb19kaXNhYmxlX3B1bGx1cChRSV9MQjYwX0dQSU9fU0RfQ0QpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9kbWEuYyBiL2FyY2gvbWlwcy9qejQ3NDAvZG1hLmMKaW5kZXggNWViZTc1YS4uZDdmZWI4OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2p6NDc0MC9kbWEuYworKysgYi9hcmNoL21pcHMvano0NzQwL2RtYS5jCkBAIC0yNDIsOSArMjQyLDcgQEAKIAogc3RhdGljIHZvaWQgano0NzQwX2RtYV9jaGFuX2lycShzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuICpkbWEpCiB7Ci0JdWludDMyX3Qgc3RhdHVzOwotCi0Jc3RhdHVzID0gano0NzQwX2RtYV9yZWFkKEpaX1JFR19ETUFfU1RBVFVTX0NUUkwoZG1hLT5pZCkpOworCSh2b2lkKSBqejQ3NDBfZG1hX3JlYWQoSlpfUkVHX0RNQV9TVEFUVVNfQ1RSTChkbWEtPmlkKSk7CiAKIAlqejQ3NDBfZG1hX3dyaXRlX21hc2soSlpfUkVHX0RNQV9TVEFUVVNfQ1RSTChkbWEtPmlkKSwgMCwKIAkJSlpfRE1BX1NUQVRVU19DVFJMX0VOQUJMRSB8IEpaX0RNQV9TVEFUVVNfQ1RSTF9UUkFOU0ZFUl9ET05FKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvdGltZS5jIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lLmMKaW5kZXggZmUwMTY3OC4uZWFhODUzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2p6NDc0MC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2Ugano0NzQwX2Nsb2NrZXZlbnQgPSB7CiAJLm5hbWUgPSAiano0NzQwLXRpbWVyIiwKLQkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKKwkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnNldF9uZXh0X2V2ZW50ID0gano0NzQwX2Nsb2NrZXZlbnRfc2V0X25leHQsCiAJLnNldF9tb2RlID0gano0NzQwX2Nsb2NrZXZlbnRfc2V0X21vZGUsCiAJLnJhdGluZyA9IDIwMCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvdGltZXIuYyBiL2FyY2gvbWlwcy9qejQ3NDAvdGltZXIuYwppbmRleCBiMmMwMTUxLi42NTRkNWMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvano0NzQwL3RpbWVyLmMKKysrIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jCkBAIC0yNywxMSArMjcsMTMgQEAKIHsKIAl3cml0ZWwoQklUKDE2KSwgano0NzQwX3RpbWVyX2Jhc2UgKyBKWl9SRUdfVElNRVJfU1RPUF9DTEVBUik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfdGltZXJfZW5hYmxlX3dhdGNoZG9nKTsKIAogdm9pZCBqejQ3NDBfdGltZXJfZGlzYWJsZV93YXRjaGRvZyh2b2lkKQogewogCXdyaXRlbChCSVQoMTYpLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9TVE9QX1NFVCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfdGltZXJfZGlzYWJsZV93YXRjaGRvZyk7CiAKIHZvaWQgX19pbml0IGp6NDc0MF90aW1lcl9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1idWdzNjQuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jCmluZGV4IGI4YmI4YmEuLmYzMDVjYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jCkBAIC03Myw3ICs3Myw3IEBACiAJCTogIjAiICg1KSwgIjEiICg4KSwgIjIiICg1KSk7CiAJYWxpZ25fbW9kKGFsaWduLCBtb2QpOwogCS8qCi0JICogVGhlIHRyYWlsaW5nIG5vcCBpcyBuZWVkZWQgdG8gZnVsbGZpbGwgdGhlIHR3by1pbnN0cnVjdGlvbgorCSAqIFRoZSB0cmFpbGluZyBub3AgaXMgbmVlZGVkIHRvIGZ1bGZpbGwgdGhlIHR3by1pbnN0cnVjdGlvbgogCSAqIHJlcXVpcmVtZW50IGJldHdlZW4gcmVhZGluZyBoaS9sbyBhbmQgc3RhcmluZyBhIG11bHQvZGl2LgogCSAqIExlYXZpbmcgaXQgb3V0IG1heSBjYXVzZSBnYXMgaW5zZXJ0IGEgbm9wIGl0c2VsZiBicmVha2luZwogCSAqIHRoZSBkZXNpcmVkIGFsaWdubWVudCBvZiB0aGUgbmV4dCBjaHVuay4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDk0Y2EyYjAuLmZlYjgwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYwpAQCAtMjMsNiArMjMsNyBAQAogCiAjZGVmaW5lIEpBTCAweDBjMDAwMDAwCQkvKiBqdW1wICYgbGluazogaXAgLS0+IHJhLCBqdW1wIHRvIHRhcmdldCAqLwogI2RlZmluZSBBRERSX01BU0sgMHgwM2ZmZmZmZgkvKiAgb3BfY29kZXxhZGRyIDogMzEuLi4yNnwyNSAuLi4uMCAqLworI2RlZmluZSBKVU1QX1JBTkdFX01BU0sgKCgxVUwgPDwgMjgpIC0gMSkKIAogI2RlZmluZSBJTlNOX05PUCAweDAwMDAwMDAwCS8qIG5vcCAqLwogI2RlZmluZSBJTlNOX0pBTChhZGRyKQlcCkBAIC00NCwxMiArNDUsMTIgQEAKIAogCS8qIGphbCAoZnRyYWNlX2NhbGxlciArIDgpLCBqdW1wIG92ZXIgdGhlIGZpcnN0IHR3byBpbnN0cnVjdGlvbiAqLwogCWJ1ZiA9ICh1MzIgKikmaW5zbl9qYWxfZnRyYWNlX2NhbGxlcjsKLQl1YXNtX2lfamFsKCZidWYsIChGVFJBQ0VfQUREUiArIDgpKTsKKwl1YXNtX2lfamFsKCZidWYsIChGVFJBQ0VfQUREUiArIDgpICYgSlVNUF9SQU5HRV9NQVNLKTsKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAkvKiBqIGZ0cmFjZV9ncmFwaF9jYWxsZXIgKi8KIAlidWYgPSAodTMyICopJmluc25fal9mdHJhY2VfZ3JhcGhfY2FsbGVyOwotCXVhc21faV9qKCZidWYsICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9ncmFwaF9jYWxsZXIpOworCXVhc21faV9qKCZidWYsICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9ncmFwaF9jYWxsZXIgJiBKVU1QX1JBTkdFX01BU0spOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcGVyZl9ldmVudF9taXBzeHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvcGVyZl9ldmVudF9taXBzeHguYwppbmRleCBkOWE3ZGI3Li43NTI2NmZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3BlcmZfZXZlbnRfbWlwc3h4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wZXJmX2V2ZW50X21pcHN4eC5jCkBAIC03MjEsNyArNzIxLDcgQEAKIAogLyoKICAqIE1JUFMgcGVyZm9ybWFuY2UgY291bnRlcnMgY2FuIGJlIHBlci1UQy4gVGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGNhbgotICogbm90IGJlIGRpcmVjdGx5IGFjY2Vzc2VkIGFjY3Jvc3MgQ1BVcy4gSGVuY2UgaWYgd2Ugd2FudCB0byBkbyBnbG9iYWwKKyAqIG5vdCBiZSBkaXJlY3RseSBhY2Nlc3NlZCBhY3Jvc3MgQ1BVcy4gSGVuY2UgaWYgd2Ugd2FudCB0byBkbyBnbG9iYWwKICAqIGNvbnRyb2wsIHdlIG5lZWQgY3Jvc3MgQ1BVIGNhbGxzLiBvbl9lYWNoX2NwdSgpIGNhbiBoZWxwIHVzLCBidXQgd2UKICAqIGNhbiBub3QgbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiBTbwogICogaGVyZSB3ZSBwYXVzZSBsb2NhbCBjb3VudGVycyBhbmQgdGhlbiBncmFiIGEgcndsb2NrIGFuZCBsZWF2ZSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYWUxNjdkZi4uZDIxMTJkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmICgha2FsbHN5bXNfbG9va3VwX3NpemVfb2Zmc2V0KHBjLCAmc2l6ZSwgJm9mcykpCiAJCXJldHVybiAwOwogCS8qCi0JICogUmV0dXJuIHJhIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cmVkIGF0IHRoZSBmaXJzdCBpbnN0cnVjdGlvbgorCSAqIFJldHVybiByYSBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQgYXQgdGhlIGZpcnN0IGluc3RydWN0aW9uCiAJICovCiAJaWYgKHVubGlrZWx5KG9mcyA9PSAwKSkgewogCQlwYyA9ICpyYTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCmluZGV4IGQyMWMzODguLjU4NGU2YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTQwLDggKzU0MCw4IEBACiAJCXNlY3VyZV9jb21wdXRpbmcocmVncy0+cmVnc1syXSk7CiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkgJiYgZW50cnlleGl0KQotCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+cmVnc1syXSksCi0JCSAgICAgICAgICAgICAgICAgICByZWdzLT5yZWdzWzJdKTsKKwkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPnJlZ3NbN10pLAorCQkgICAgICAgICAgICAgICAgICAgLXJlZ3MtPnJlZ3NbMl0pOwogCiAJaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCmluZGV4IDdmNTQ2OGIuLjdmMTM3N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKQEAgLTU2NSw3ICs1NjUsNyBAQAogCXN5cwlzeXNfaW9wcmlvX2dldAkJMgkvKiA0MzE1ICovCiAJc3lzCXN5c191dGltZW5zYXQJCTQKIAlzeXMJc3lzX3NpZ25hbGZkCQkzCi0Jc3lzCXN5c19uaV9zeXNjYWxsCQkwCisJc3lzCXN5c19uaV9zeXNjYWxsCQkwCS8qIHdhcyB0aW1lcmZkICovCiAJc3lzCXN5c19ldmVudGZkCQkxCiAJc3lzCXN5c19mYWxsb2NhdGUJCTYJLyogNDMyMCAqLwogCXN5cwlzeXNfdGltZXJmZF9jcmVhdGUJMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwppbmRleCBhMmUxZmNiLi43YzBlZjdmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJUFRSCXN5c19pb3ByaW9fZ2V0CiAJUFRSCXN5c191dGltZW5zYXQJCQkvKiA1Mjc1ICovCiAJUFRSCXN5c19zaWduYWxmZAotCVBUUglzeXNfbmlfc3lzY2FsbAorCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyB0aW1lcmZkICovCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5c19mYWxsb2NhdGUKIAlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCQkvKiA1MjgwICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggYjJjNzYyNC4uZGU2YzU1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtNDAzLDcgKzQwMyw3IEBACiAJUFRSCXN5c19pb3ByaW9fZ2V0CiAJUFRSCWNvbXBhdF9zeXNfdXRpbWVuc2F0CiAJUFRSCWNvbXBhdF9zeXNfc2lnbmFsZmQJCS8qIDYyODAgKi8KLQlQVFIJc3lzX25pX3N5c2NhbGwKKwlQVFIJc3lzX25pX3N5c2NhbGwJCQkvKiB3YXMgdGltZXJmZCAqLwogCVBUUglzeXNfZXZlbnRmZAogCVBUUglzeXNfZmFsbG9jYXRlCiAJUFRSCXN5c190aW1lcmZkX2NyZWF0ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDA0OWE5YzguLmIwNTQxZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTUyMiw3ICs1MjIsNyBAQAogCVBUUglzeXNfaW9wcmlvX2dldAkJCS8qIDQzMTUgKi8KIAlQVFIJY29tcGF0X3N5c191dGltZW5zYXQKIAlQVFIJY29tcGF0X3N5c19zaWduYWxmZAotCVBUUglzeXNfbmlfc3lzY2FsbAorCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyB0aW1lcmZkICovCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5czMyX2ZhbGxvY2F0ZQkJCS8qIDQzMjAgKi8KIAlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYwppbmRleCBjMGU4MTQxLi4xZWM1NmU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0JdnBmbGFncyA9IGR2cGUoKTsJLyogY2FudCBhY2Nlc3MgdGhlIG90aGVyIENQVSdzIHJlZ2lzdGVycyB3aGlsc3QgTVZQRSBlbmFibGVkICovCisJdnBmbGFncyA9IGR2cGUoKTsJLyogY2FuJ3QgYWNjZXNzIHRoZSBvdGhlciBDUFUncyByZWdpc3RlcnMgd2hpbHN0IE1WUEUgZW5hYmxlZCAqLwogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIFNNUF9DQUxMX0ZVTkNUSU9OOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwppbmRleCBmYjc0OTc0Li4xMDgzYWQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJY2FzZSBDUFVfUjQ0MDBTQzoKIAljYXNlIENQVV9SNDQwME1DOgogCQkvKgotCQkgKiBUaGUgcHVibGlzaGVkIGVycmF0YSBmb3IgdGhlIFI0NDAwIHVwdG8gMy4wIHNheSB0aGUgQ1BVCisJCSAqIFRoZSBwdWJsaXNoZWQgZXJyYXRhIGZvciB0aGUgUjQ0MDAgdXAgdG8gMy4wIHNheSB0aGUgQ1BVCiAJCSAqIGhhcyB0aGUgbWZjMCBmcm9tIGNvdW50IGJ1Zy4KIAkJICovCiAJCWlmICgoY3VycmVudF9jcHVfZGF0YS5wcm9jZXNzb3JfaWQgJiAweGZmKSA8PSAweDMwKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDgzMmFmYmIuLmU0YjBiMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTc0LDYgKzc0LDcgQEAKIAkJSU5JVF9UQVNLX0RBVEEoUEFHRV9TSVpFKQogCQlOT1NBVkVfREFUQQogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKDEgPDwgQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQpCisJCVJFQURfTU9TVExZX0RBVEEoMSA8PCBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVCkKIAkJREFUQV9EQVRBCiAJCUNPTlNUUlVDVE9SUwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCmluZGV4IGFiNTJiN2MuLmRiYjZiNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwpAQCAtMTksNyArMTksNyBAQAogICogVlBFIHN1cHBvcnQgbW9kdWxlCiAgKgogICogUHJvdmlkZXMgc3VwcG9ydCBmb3IgbG9hZGluZyBhIE1JUFMgU1AgcHJvZ3JhbSBvbiBWUEUxLgotICogVGhlIFNQIGVudmlyb21lbnQgaXMgcmF0aGVyIHNpbXBsZSwgbm8gdGxiJ3MuICBJdCBuZWVkcyB0byBiZSByZWxvY2F0YWJsZQorICogVGhlIFNQIGVudmlyb25tZW50IGlzIHJhdGhlciBzaW1wbGUsIG5vIHRsYidzLiAgSXQgbmVlZHMgdG8gYmUgcmVsb2NhdGFibGUKICAqIChvciBwYXJ0aWFsbHkgbGlua2VkKS4gWW91IHNob3VsZCBpbml0aWFsaXNlIHlvdXIgc3RhY2sgaW4gdGhlIHN0YXJ0dXAKICAqIGNvZGUuIFRoaXMgbG9hZGVyIGxvb2tzIGZvciB0aGUgc3ltYm9sIF9fc3RhcnQgYW5kIHNldHMgdXAKICAqIGV4ZWN1dGlvbiB0byByZXN1bWUgZnJvbSB0aGVyZS4gVGhlIE1JUFMgU0RFIGtpdCBjb250YWlucyBzdWl0YWJsZSBleGFtcGxlcy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvc3Rybmxlbl91c2VyLlMgYi9hcmNoL21pcHMvbGliL3N0cm5sZW5fdXNlci5TCmluZGV4IGM3NjhlMzAwLi42NDQ1NzE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGliL3N0cm5sZW5fdXNlci5TCisrKyBiL2FyY2gvbWlwcy9saWIvc3Rybmxlbl91c2VyLlMKQEAgLTE3LDcgKzE3LDcgQEAKIAkucHJldmlvdXMKIAogLyoKLSAqIFJldHVybiB0aGUgc2l6ZSBvZiBhIHN0cmluZyBpbmNsdWRpbmcgdGhlIGVuZGluZyBOVUwgY2hhcmFjdGVyIHVwdG8gYQorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIGluY2x1ZGluZyB0aGUgZW5kaW5nIE5VTCBjaGFyYWN0ZXIgdXAgdG8gYQogICogbWF4aW11bSBvZiBhMSBvciAwIGluIGNhc2Ugb2YgZXJyb3IuCiAgKgogICogTm90ZTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgd2UgZGVsaWJlcmF0ZWx5IGFjY2VwdCB0aGF0IGEgdXNlciBtYXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCmluZGV4IDExYjE5M2YuLmQ5MzgzMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYwpAQCAtMjksOSArMjksMTAgQEAKIAogI2RlZmluZSBwYXJzZV9ldmVuX2VhcmxpZXIocmVzLCBvcHRpb24sIHApCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaW50IHJldDsJCQkJCQkJXAorCXVuc2lnbmVkIGludCB0bXAgX19tYXliZV91bnVzZWQ7CQkJCVwKKwkJCQkJCQkJCVwKIAlpZiAoc3RybmNtcChvcHRpb24sIChjaGFyICopcCwgc3RybGVuKG9wdGlvbikpID09IDApCQlcCi0JCXJldCA9IHN0cmljdF9zdHJ0b2woKGNoYXIgKilwICsgc3RybGVuKG9wdGlvbiI9IiksIDEwLCAmcmVzKTsgXAorCQl0bXAgPSBzdHJpY3Rfc3RydG9sKChjaGFyICopcCArIHN0cmxlbihvcHRpb24iPSIpLCAxMCwgJnJlcyk7IFwKIH0gd2hpbGUgKDApCiAKIHZvaWQgX19pbml0IHByb21faW5pdF9lbnYodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mc3AuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mc3AuYwppbmRleCAxZGZiZDkyLi5kYWVkNjgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZnNwLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX2ZzcC5jCkBAIC02Miw3ICs2Miw3IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIENBTlQgcG9zc2libHkgb3ZlcmZsb3csdW5kZXJmbG93LCBvciBuZWVkIHJvdW5kaW5nCisJLyogQ0FOJ1QgcG9zc2libHkgb3ZlcmZsb3csdW5kZXJmbG93LCBvciBuZWVkIHJvdW5kaW5nCiAJICovCiAKIAkvKiBkcm9wIHRoZSBoaWRkZW4gYml0ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfbXVsLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfbXVsLmMKaW5kZXggYWE1NjZlNy4uMDkxNzVmNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2RwX211bC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9tdWwuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJY2FzZSBDTFBBSVIoSUVFRTc1NF9DTEFTU19OT1JNLCBJRUVFNzU0X0NMQVNTX05PUk0pOgogCQlicmVhazsKIAl9Ci0JLyogcm0gPSB4bSAqIHltLCByZSA9IHhlK3llIGJhc2ljbHkgKi8KKwkvKiBybSA9IHhtICogeW0sIHJlID0geGUreWUgYmFzaWNhbGx5ICovCiAJYXNzZXJ0KHhtICYgRFBfSElEREVOX0JJVCk7CiAJYXNzZXJ0KHltICYgRFBfSElEREVOX0JJVCk7CiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jCmluZGV4IDM2ZDk3NWEuLjNjNGE4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kc2VtdWwuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHNlbXVsLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqIG5vdCBjaGFuZ2UgY3AwX2VwYyBkdWUgdG8gdGhlIGluc3RydWN0aW9uCiAgKgogICogQWNjb3JkaW5nIHRvIHRoZSBzcGVjOgotICogMSkgaXQgc2hvdWxkbnQgYmUgYSBicmFuY2ggOi0pCisgKiAxKSBpdCBzaG91bGRuJ3QgYmUgYSBicmFuY2ggOi0pCiAgKiAyKSBpdCBjYW4gYmUgYSBDT1AgaW5zdHJ1Y3Rpb24gOi0oCiAgKiAzKSBpZiB3ZSBhcmUgdHJpbmcgdG8gcnVuIGEgcHJvdGVjdGVkIG1lbW9yeSBzcGFjZSB3ZSBtdXN0IHRha2UKICAqICAgIHNwZWNpYWwgY2FyZSBvbiBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucyA6LSgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9tdWwuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9tdWwuYwppbmRleCBjMDZiYjQwMi4uMjcyMmEyNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L3NwX211bC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9tdWwuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJY2FzZSBDTFBBSVIoSUVFRTc1NF9DTEFTU19OT1JNLCBJRUVFNzU0X0NMQVNTX05PUk0pOgogCQlicmVhazsKIAl9Ci0JLyogcm0gPSB4bSAqIHltLCByZSA9IHhlK3llIGJhc2ljbHkgKi8KKwkvKiBybSA9IHhtICogeW0sIHJlID0geGUreWUgYmFzaWNhbGx5ICovCiAJYXNzZXJ0KHhtICYgU1BfSElEREVOX0JJVCk7CiAJYXNzZXJ0KHltICYgU1BfSElEREVOX0JJVCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggYjQ5MjNhNy4uNzFiZGRmOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTEwNzUsNyArMTA3NSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgYWRkciwgYmVnaW4sIGVuZCwgcG93MjsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7Ci0JaW50IHRtcDsKIAogCWlmIChjb25maWcgJiBDT05GX1NDKQogCQlyZXR1cm4gMDsKQEAgLTExMDgsNyArMTEwNyw2IEBACiAKIAkvKiBOb3cgc2VhcmNoIGZvciB0aGUgd3JhcCBhcm91bmQgcG9pbnQuICovCiAJcG93MiA9ICgxMjggKiAxMDI0KTsKLQl0bXAgPSAwOwogCWZvciAoYWRkciA9IGJlZ2luICsgKDEyOCAqIDEwMjQpOyBhZGRyIDwgZW5kOyBhZGRyID0gYmVnaW4gKyBwb3cyKSB7CiAJCWNhY2hlX29wKEluZGV4X0xvYWRfVGFnX1NELCBhZGRyKTsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm5vcDsgbm9wOyBub3A7IG5vcDsiKTsgLyogaGF6YXJkLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2V4LXNiMS5TIGIvYXJjaC9taXBzL21tL2NleC1zYjEuUwppbmRleCAyZDA4MjY4Li44OWM0MTJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2V4LXNiMS5TCisrKyBiL2FyY2gvbWlwcy9tbS9jZXgtc2IxLlMKQEAgLTc5LDcgKzc5LDcgQEAKIHJlY292ZXJlZF9kY2FjaGU6CiAJLyoKIAkgKiBVbmxvY2sgQ2FjaGVFcnItRCAod2hpY2ggaW4gdHVybiB1bmxvY2tzIENhY2hlRXJyLURQQSkuCi0JICogT3VnaHQgdG8gbG9nIHRoZSBvY2N1cmVuY2Ugb2YgdGhpcyByZWNvdmVyZWQgZGNhY2hlIGVycm9yLgorCSAqIE91Z2h0IHRvIGxvZyB0aGUgb2NjdXJyZW5jZSBvZiB0aGlzIHJlY292ZXJlZCBkY2FjaGUgZXJyb3IuCiAJICovCiAJYglyZWNvdmVyZWQKIAkgbXRjMAkkMCxDMF9DRVJSX0QKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggMDRmOWUxNy4uZjU3MzRjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCiAvKgogICogV3JpdGUgcmFuZG9tIG9yIGluZGV4ZWQgVExCIGVudHJ5LCBhbmQgY2FyZSBhYm91dCB0aGUgaGF6YXJkcyBmcm9tCi0gKiB0aGUgcHJlY2VlZGluZyBtdGMwIGFuZCBmb3IgdGhlIGZvbGxvd2luZyBlcmV0LgorICogdGhlIHByZWNlZGluZyBtdGMwIGFuZCBmb3IgdGhlIGZvbGxvd2luZyBlcmV0LgogICovCiBlbnVtIHRsYl93cml0ZV9lbnRyeSB7IHRsYl9yYW5kb20sIHRsYl9pbmRleGVkIH07CiAKQEAgLTExNTEsOCArMTE1MSw4IEBACiAJc3RydWN0IHVhc21fcmVsb2MgKnIgPSByZWxvY3M7CiAJdTMyICpmOwogCXVuc2lnbmVkIGludCBmaW5hbF9sZW47Ci0Jc3RydWN0IG1pcHNfaHVnZV90bGJfaW5mbyBodGxiX2luZm87Ci0JZW51bSB2bWFsbG9jNjRfbW9kZSB2bWFsbG9jX21vZGU7CisJc3RydWN0IG1pcHNfaHVnZV90bGJfaW5mbyBodGxiX2luZm8gX19tYXliZV91bnVzZWQ7CisJZW51bSB2bWFsbG9jNjRfbW9kZSB2bWFsbG9jX21vZGUgX19tYXliZV91bnVzZWQ7CiAKIAltZW1zZXQodGxiX2hhbmRsZXIsIDAsIHNpemVvZih0bGJfaGFuZGxlcikpOwogCW1lbXNldChsYWJlbHMsIDAsIHNpemVvZihsYWJlbHMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKaW5kZXggNDE0ZjBjOS4uMzExODBjMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKQEAgLTE5Myw4ICsxOTMsNiBAQAogCiB2b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKIHsKLQlpbnQgcmVzdWx0OwotCiAJcHJvbV9hcmdjID0gZndfYXJnMDsKIAlfcHJvbV9hcmd2ID0gKGludCAqKSBmd19hcmcxOwogCV9wcm9tX2VudnAgPSAoaW50ICopIGZ3X2FyZzI7CkBAIC0zNjAsMjAgKzM1OCwxNCBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCiAJY29uc29sZV9jb25maWcoKTsKICNlbmRpZgotCS8qIEVhcmx5IGRldGVjdGlvbiBvZiBDTVAgc3VwcG9ydCAqLwotCXJlc3VsdCA9IGdjbXBfcHJvYmUoR0NNUF9CQVNFX0FERFIsIEdDTVBfQUREUlNQQUNFX1NaKTsKLQogI2lmZGVmIENPTkZJR19NSVBTX0NNUAotCWlmIChyZXN1bHQpCisJLyogRWFybHkgZGV0ZWN0aW9uIG9mIENNUCBzdXBwb3J0ICovCisJaWYgKGdjbXBfcHJvYmUoR0NNUF9CQVNFX0FERFIsIEdDTVBfQUREUlNQQUNFX1NaKSkKIAkJcmVnaXN0ZXJfc21wX29wcygmY21wX3NtcF9vcHMpOworCWVsc2UKICNlbmRpZgogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNUAotI2lmZGVmIENPTkZJR19NSVBTX0NNUAotCWlmICghcmVzdWx0KQogCQlyZWdpc3Rlcl9zbXBfb3BzKCZ2c21wX3NtcF9vcHMpOwotI2Vsc2UKLQlyZWdpc3Rlcl9zbXBfb3BzKCZ2c21wX3NtcF9vcHMpOwotI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAJcmVnaXN0ZXJfc21wX29wcygmbXNtdGNfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwppbmRleCA5MDI3MDYxLi5lODVjOTc3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKQEAgLTU2LDcgKzU2LDYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IG1pcHNfcGNpYmlvc19pYWNrKHZvaWQpCiB7CiAJaW50IGlycTsKLQl1MzIgZHVtbXk7CiAKIAkvKgogCSAqIERldGVybWluZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgaW50ZXJydXB0IGJ5IHBlcmZvcm1pbmcKQEAgLTgzLDcgKzgyLDcgQEAKIAkJQk9OSVRPX1BDSU1BUF9DRkcgPSAweDIwMDAwOwogCiAJCS8qIEZsdXNoIEJvbml0byByZWdpc3RlciBibG9jayAqLwotCQlkdW1teSA9IEJPTklUT19QQ0lNQVBfQ0ZHOworCQkodm9pZCkgQk9OSVRPX1BDSU1BUF9DRkc7CiAJCWlvYigpOyAgICAvKiBzeW5jICovCiAKIAkJaXJxID0gX19yYXdfcmVhZGwoKHUzMiAqKV9wY2ljdHJsX2Jvbml0b19wY2ljZmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1zbXRjLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXNtdGMuYwppbmRleCBlNjc4OTE1Li40OWEzOGIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXNtdGMuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXNtdGMuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJICogY2xlYXJlZCBpbiB0aGUgYWZmaW5pdHkgbWFzaywgdGhlcmUgd2lsbCBuZXZlciBiZSBhbnkKIAkgKiBpbnRlcnJ1cHQgZm9yd2FyZGluZy4gIEJ1dCBhcyBzb29uIGFzIGEgcHJvZ3JhbSBvciBvcGVyYXRvcgogCSAqIHNldHMgYWZmaW5pdHkgZm9yIG9uZSBvZiB0aGUgcmVsYXRlZCBJUlFzLCB3ZSBuZWVkIHRvIG1ha2UKLQkgKiBzdXJlIHRoYXQgd2UgZG9uJ3QgZXZlciB0cnkgdG8gZm9yd2FyZCBhY3Jvc3MgdGhlIFZQRSBib3VuZHJ5LAorCSAqIHN1cmUgdGhhdCB3ZSBkb24ndCBldmVyIHRyeSB0byBmb3J3YXJkIGFjcm9zcyB0aGUgVlBFIGJvdW5kYXJ5LAogCSAqIGF0IGxlYXN0IG5vdCB1bnRpbCB3ZSBlbmdpbmVlciBhIHN5c3RlbSB3aGVyZSB0aGUgaW50ZXJydXB0CiAJICogX2FjaygpIG9yIF9lbmQoKSBmdW5jdGlvbiBjYW4gc29tZWhvdyBrbm93IHRoYXQgaXQgY29ycmVzcG9uZHMKIAkgKiB0byBhbiBpbnRlcnJ1cHQgdGFrZW4gb24gYW5vdGhlciBWUEUsIGFuZCBwZXJmb3JtIHRoZSBhcHByb3ByaWF0ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwppbmRleCA2ODc5OGY4Li44ZmJmYmYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9BQ0NFU1NfV1JJVEUgYW5kIFBDSV9BQ0NFU1NfUkVBRC4KICAqCiAgKiAgICAgICAgICAgICAgIGJ1cyAgICAgICAgICAtIHBvaW50ZXIgdG8gdGhlIGJ1cyBudW1iZXIgb2YgdGhlIGRldmljZSB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0YXJnZXR0ZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIGN5Y2xlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0YXJnZXRlZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gY3ljbGUuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvbmx5IGVsZW1lbnQgb2YgdGhlIHBjaV9idXMgc3RydWN0dXJlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaXMgYnVzLT5udW1iZXIuIFRoaXMgYXJndW1lbnQgZGV0ZXJtaW5lcwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgY29uZmlndXJhdGlvbiBhY2Nlc3Mgd2lsbCBiZSBUeXBlIDAgb3IKQEAgLTM1NCw3ICszNTQsNyBAQAogICoKICAqICAgICAgICAgICAgICAgZGV2Zm4gICAgICAgIC0gdGhpcyBpcyBhbiA4LWJpdCBmaWVsZC4gVGhlIGxvd2VyIHRocmVlIGJpdHMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgZnVuY3Rpb24gbnVtYmVyIG9mIHRoZSBkZXZpY2UgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGFyZ2V0dGVkIGZvciB0aGUgY29uZmlndXJhdGlvbiBjeWNsZSwgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0YXJnZXRlZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gY3ljbGUsIHdpdGgKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIHRocmVlLWJpdCBjb21iaW5hdGlvbnMgYmVpbmcgbGVnYWwuIFRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlciBmaXZlIGJpdHMgc3BlY2lmeSB0aGUgZGV2aWNlIG51bWJlciwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBsZWdhbCB2YWx1ZXMgYmVpbmcgMTAgdG8gMzEuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMKaW5kZXggNmY1ZTI0Yy4uYWY4YzMxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJUENJQklPU19NSU5fSU8gPSAweDAwMDA4MDAwVUw7CiAJUENJQklPU19NSU5fTUVNID0gMHgwMTAwMDAwMFVMOwogCi0JLyogU2V0IEkvTyByZXNvdXJjZSBsaW1pdHMuIC0gdW5saW1pdGVkIGZvciBub3cgdG8gYWNjb21vZGF0ZSBIVCAqLworCS8qIFNldCBJL08gcmVzb3VyY2UgbGltaXRzLiAtIHVubGltaXRlZCBmb3Igbm93IHRvIGFjY29tbW9kYXRlIEhUICovCiAJaW9wb3J0X3Jlc291cmNlLmVuZCA9IDB4ZmZmZmZmZmZVTDsKIAlpb21lbV9yZXNvdXJjZS5lbmQgPSAweGZmZmZmZmZmVUw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKaW5kZXggMmQ3NGZjOS4uZWQxYzU0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKQEAgLTQ0MSw3ICs0NDEsNyBAQAogCiAJLyoKIAkgKiBURE9NQyBtdXN0IGJlIHNldCB0byBvbmUgaW4gUENJIG1vZGUuIFRET01DIHNob3VsZCBiZSBzZXQgdG8gNAotCSAqIGluIFBDSS1YIG1vZGUgdG8gYWxsb3cgZm91ciBvdXN0YW5kaW5nIHNwbGl0cy4gT3RoZXJ3aXNlLAorCSAqIGluIFBDSS1YIG1vZGUgdG8gYWxsb3cgZm91ciBvdXRzdGFuZGluZyBzcGxpdHMuIE90aGVyd2lzZSwKIAkgKiBzaG91bGQgbm90IGNoYW5nZSBmcm9tIGl0cyByZXNldCB2YWx1ZS4gRG9uJ3Qgd3JpdGUgUENJX0NGRzE5CiAJICogaW4gUENJIG1vZGUgKDB4ODIwMDAwMDEgcmVzZXQgdmFsdWUpLCB3cml0ZSBpdCB0byAweDgyMDAwMDA0CiAJICogYWZ0ZXIgUENJLVggbW9kZSBpcyBrbm93bi4gTVJCQ0ksTURXRSxNRFJFIC0+IG11c3QgYmUgemVyby4KQEAgLTUxNSw3ICs1MTUsNyBAQAogI2VuZGlmCS8qIFVTRV9PQ1RFT05fSU5URVJOQUxfQVJCSVRFUiAqLwogCiAJLyoKLQkgKiBQcmVmZXJyYWJseSB3cml0dGVuIHRvIDEgdG8gc2V0IE1MVEQuIFtSRFNBVEksVFJUQUUsCisJICogUHJlZmVyYWJseSB3cml0dGVuIHRvIDEgdG8gc2V0IE1MVEQuIFtSRFNBVEksVFJUQUUsCiAJICogVFdUQUUsVE1BRSxEUFBNUiAtPiBtdXN0IGJlIHplcm8uIFRJTFQgLT4gbXVzdCBub3QgYmUgc2V0IHRvCiAJICogMS4uNy4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLmMgYi9hcmNoL21pcHMvcGNpL3BjaS5jCmluZGV4IDM4YmMyODAuLjMzYmJhN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2kuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJaG9zZV90YWlsID0gJmhvc2UtPm5leHQ7CiAKIAkvKgotCSAqIERvIG5vdCBwYW5pYyBoZXJlIGJ1dCBsYXRlciAtIHRoaXMgbWlnaHQgaGFwZW4gYmVmb3JlIGNvbnNvbGUgaW5pdC4KKwkgKiBEbyBub3QgcGFuaWMgaGVyZSBidXQgbGF0ZXIgLSB0aGlzIG1pZ2h0IGhhcHBlbiBiZWZvcmUgY29uc29sZSBpbml0LgogCSAqLwogCWlmICghaG9zZS0+aW9fbWFwX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX3Blci5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX3Blci5jCmluZGV4IGY5YjlkY2QuLjk4ZmQwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9wZXIuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfcGVyLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc3BfcGVyX2lycV9jb250cm9sbGVyID0gewogCS5uYW1lID0gIk1TUF9QRVIiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX3Blcl9pcnEuCisJLmlycV9lbmFibGUgPSB1bm1hc2tfcGVyX2lycSwKIAkuaXJxX2Rpc2FibGUgPSBtYXNrX3Blcl9pcnEsCiAJLmlycV9hY2sgPSBtc3BfcGVyX2lycV9hY2ssCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3Bfc2V0dXAuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3NldHVwLmMKaW5kZXggZmIzN2ExMC4uMjQxM2VhNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3Bfc2V0dXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9zZXR1cC5jCkBAIC0yMzksNyArMjM5LDcgQEAKICNpZmRlZiBDT05GSUdfUE1DVFdJTEVECiAJLyoKIAkgKiBTZXR1cCBMRUQgc3RhdGVzIGJlZm9yZSB0aGUgc3Vic3lzX2luaXRjYWxsIGxvYWRzIG90aGVyCi0JICogZGVwZW5kYW50IGRyaXZlcnMvbW9kdWxlcy4KKwkgKiBkZXBlbmRlbnQgZHJpdmVycy9tb2R1bGVzLgogCSAqLwogCXBtY3R3aWxlZF9zZXR1cCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG54ODMzeC9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9wbGF0Zm9ybS5jCmluZGV4IGNlNDVkZjEuLjg3MTY3ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAl7CiAJCS5iYXNlID0gUE5YODMzWF9JMkMwX1BPUlRTX1NUQVJULAogCQkuaXJxID0gLTEsIC8qIHNob3VsZCBiZSBQTlg4MzNYX1BJQ19JMkMwX0lOVCBidXQgcG9sbGluZyBpcyBmYXN0ZXIgKi8KLQkJLmNsb2NrID0gNiwJLyogMCA9PSA0MDAga0h6LCA0ID09IDEwMCBrSHooTWF4aW11bSBIRE1JKSwgNiA9IDUwa0h6KFByZWZlcmVkIEhEQ1ApICovCisJCS5jbG9jayA9IDYsCS8qIDAgPT0gNDAwIGtIeiwgNCA9PSAxMDAga0h6KE1heGltdW0gSERNSSksIDYgPSA1MGtIeihQcmVmZXJyZWQgSERDUCkgKi8KIAkJLmJ1c19hZGRyID0gMCwJLyogbm8gc2xhdmUgc3VwcG9ydCAqLwogCX0sCiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCmluZGV4IGRiYjVjN2IuLmY4YTc1MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUworKysgYi9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKQEAgLTM1LDcgKzM1LDcgQEAKIDA6CiAJUFRSX0wgdDEsIFBCRV9BRERSRVNTKHQwKSAgIC8qIHNvdXJjZSAqLwogCVBUUl9MIHQyLCBQQkVfT1JJR19BRERSRVNTKHQwKSAvKiBkZXN0aW5hdGlvbiAqLwotCVBUUl9BRERJVSB0MywgdDEsIFBBR0VfU0laRQorCVBUUl9BRERVIHQzLCB0MSwgUEFHRV9TSVpFCiAxOgogCVJFR19MIHQ4LCAodDEpCiAJUkVHX1MgdDgsICh0MikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCmluZGV4IGRlZGRiZjAuLjY5ODkwNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHNnaXNlZXFfZGV2aW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCB0bXA7CisJdW5zaWduZWQgaW50IHBiZG1hIF9fbWF5YmVfdW51c2VkOwogCWludCByZXMsIGk7CiAKIAlldGgwX3BkLmhwYyA9IGhwYzNjMDsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJLyogU2Vjb25kIEhQQyBpcyBtaXNzaW5nPyAqLwogCWlmIChpcDIyX2lzX2Z1bGxob3VzZSgpIHx8Ci0JICAgIGdldF9kYmUodG1wLCAodW5zaWduZWQgaW50ICopJmhwYzNjMS0+cGJkbWFbMV0pKQorCSAgICBnZXRfZGJlKHBiZG1hLCAodW5zaWduZWQgaW50ICopJmhwYzNjMS0+cGJkbWFbMV0pKQogCQlyZXR1cm4gMDsKIAogCXNnaW1jLT5naW9wYXIgfD0gU0dJTUNfR0lPUEFSX01BU1RFUkVYUDEgfCBTR0lNQ19HSU9QQVJfRVhQMTY0IHwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwppbmRleCA2MDNmYzkxLi4xYTk0Yzk4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCkBAIC0zMiw3ICszMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb3NhbXBsZSh2b2lkKQogewogCXUzMiBjdDAsIGN0MTsKLQl1OCBtc2IsIGxzYjsKKwl1OCBtc2I7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlci4gKi8KIAlzZ2ludC0+dGN3b3JkID0gKFNHSU5UX1RDV09SRF9DTlQyIHwgU0dJTlRfVENXT1JEX0NBTEwgfApAQCAtNDYsNyArNDYsNyBAQAogCS8qIExhdGNoIGFuZCBzcGluIHVudGlsIHRvcCBieXRlIG9mIGNvdW50ZXIyIGlzIHplcm8gKi8KIAlkbyB7CiAJCXdyaXRlYihTR0lOVF9UQ1dPUkRfQ05UMiB8IFNHSU5UX1RDV09SRF9DTEFULCAmc2dpbnQtPnRjd29yZCk7Ci0JCWxzYiA9IHJlYWRiKCZzZ2ludC0+dGNudDIpOworCQkodm9pZCkgcmVhZGIoJnNnaW50LT50Y250Mik7CiAJCW1zYiA9IHJlYWRiKCZzZ2ludC0+dGNudDIpOwogCQljdDEgPSByZWFkX2MwX2NvdW50KCk7CiAJfSB3aGlsZSAobXNiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnIGIvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKaW5kZXggNWU5NjBhZS4uYmM1ZTk3NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKQEAgLTEsNyArMSw3IEBACiAjY29uZmlnIFNHSV9TTjBfWFhMCiAjCWJvb2wgIklQMjcgWFhMIgogIwlkZXBlbmRzIG9uIFNHSV9JUDI3Ci0jCSAgVGhpcyBvcHRpb25zIGFkZHMgc3VwcG9ydCBmb3IgdXNlcnNwYWNlIHByb2Nlc3NlcyB1cHRvIDE2VEIgc2l6ZS4KKyMJICBUaGlzIG9wdGlvbnMgYWRkcyBzdXBwb3J0IGZvciB1c2Vyc3BhY2UgcHJvY2Vzc2VzIHVwIHRvIDE2VEIgc2l6ZS4KICMJICBOb3JtYWxseSB0aGUgbGltaXQgaXMganVzdCAuNVRCLgogCiBjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9UT0RPIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KaW5kZXggMTlmMTUxMi4uMTYwODU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KQEAgLTEzLDcgKzEzLDcgQEAKIDkuIHN0YXJ0X3RocmVhZCBtdXN0IHR1cm4gb2ZmIFVYNjQgLi4uIGFuZCBkZWZpbmUgdGxiX3JlZmlsbF9kZWJ1Zy4KIDEwLiBOZWVkIGEgYmFkIHBtZCB0YWJsZSwgYmFkIHB0ZSB0YWJsZS4gX19iYWRfcG1kX3RhYmxlL19fYmFkX3BhZ2V0YWJsZQogZG9lcyBub3QgYWdyZWUgd2l0aCBwZ2RfYmFkL3BtZF9iYWQuCi0xMS4gQWxsIGludHJzIChpcDI3X2RvX2lycSBoYW5kbGVycykgYXJlIHRhcmdldHRlZCBhdCBjcHUgQSBvbiB0aGUgbm9kZS4KKzExLiBBbGwgaW50cnMgKGlwMjdfZG9faXJxIGhhbmRsZXJzKSBhcmUgdGFyZ2V0ZWQgYXQgY3B1IEEgb24gdGhlIG5vZGUuCiBUaGlzIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIGxhdGVyLiBPbmx5IHRoZSB0aW1lciBpbnRyIGlzIHNldCB1cCB0byBiZQogcmVjZWl2ZWQgb24gYm90aCBDcHUgQSBhbmQgQi4gKGlwMjdfZG9faXJxKCkvYnJpZGdlX3N0YXJ0dXAoKSkKIDEzLiBDYWNoZSBmbHVzaGluZyAoc3BlY2lhbGx5IHRoZSBTTVAgdmVyc2lvbikgaGFzIHRvIGJlIGludmVzdGlnYXRlZC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWh1YmlvLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1odWJpby5jCmluZGV4IGExZmE0YWIuLmNkMGQ1YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWh1YmlvLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaHViaW8uYwpAQCAtMjksNyArMjksNiBAQAogCQkJICB1bnNpZ25lZCBsb25nIHh0YWxrX2FkZHIsIHNpemVfdCBzaXplKQogewogCW5hc2lkX3QgbmFzaWQgPSBDT01QQUNUX1RPX05BU0lEX05PREVJRChjbm9kZSk7Ci0Jdm9sYXRpbGUgaHVicmVnX3QganVuazsKIAl1bnNpZ25lZCBpOwogCiAJLyogdXNlIHNtYWxsLXdpbmRvdyBtYXBwaW5nIGlmIHBvc3NpYmxlICovCkBAIC02NCw3ICs2Myw3IEBACiAJCSAqIGFmdGVyIHdlIHdyaXRlIGl0LgogCQkgKi8KIAkJSUlPX0lUVEVfUFVUKG5hc2lkLCBpLCBIVUJfUElPX01BUF9UT19NRU0sIHdpZGdldCwgeHRhbGtfYWRkcik7Ci0JCWp1bmsgPSBIVUJfTChJSU9fSVRURV9HRVQobmFzaWQsIGkpKTsKKwkJKHZvaWQpIEhVQl9MKElJT19JVFRFX0dFVChuYXNpZCwgaSkpOwogCiAJCXJldHVybiBOT0RFX0JXSU5fQkFTRShuYXNpZCwgd2lkZ2V0KSArICh4dGFsa19hZGRyICUgQldJTl9TSVpFKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMKaW5kZXggNTFkM2E0Zi4uOTIzYzA4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWluaXQuYwpAQCAtOTMsNyArOTMsNyBAQAogCiAJLyoKIAkgKiBTb21lIGludGVycnVwdHMgYXJlIHJlc2VydmVkIGJ5IGhhcmR3YXJlIG9yIGJ5IHNvZnR3YXJlIGNvbnZlbnRpb24uCi0JICogTWFyayB0aGVzZSBhcyByZXNlcnZlZCByaWdodCBhd2F5IHNvIHRoZXkgd29uJ3QgYmUgdXNlZCBhY2NpZGVudGx5CisJICogTWFyayB0aGVzZSBhcyByZXNlcnZlZCByaWdodCBhd2F5IHNvIHRoZXkgd29uJ3QgYmUgdXNlZCBhY2NpZGVudGFsbHkKIAkgKiBsYXRlci4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IEJBU0VfUENJX0lSUTsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCmluZGV4IDExNDg4NzEuLjBhMDQ2MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBMaW51eCBoYXMgYSBjb250cm9sbGVyLWluZGVwZW5kZW50IHg4NiBpbnRlcnJ1cHQgYXJjaGl0ZWN0dXJlLgogICogZXZlcnkgY29udHJvbGxlciBoYXMgYSAnY29udHJvbGxlci10ZW1wbGF0ZScsIHRoYXQgaXMgdXNlZAogICogYnkgdGhlIG1haW4gY29kZSB0byBkbyB0aGUgcmlnaHQgdGhpbmcuIEVhY2ggZHJpdmVyLXZpc2libGUKLSAqIGludGVycnVwdCBzb3VyY2UgaXMgdHJhbnNwYXJlbnRseSB3aXJlZCB0byB0aGUgYXByb3ByaWF0ZQorICogaW50ZXJydXB0IHNvdXJjZSBpcyB0cmFuc3BhcmVudGx5IHdpcmVkIHRvIHRoZSBhcHByb3ByaWF0ZQogICogY29udHJvbGxlci4gVGh1cyBkcml2ZXJzIG5lZWQgbm90IGJlIGF3YXJlIG9mIHRoZQogICogaW50ZXJydXB0LWNvbnRyb2xsZXIuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwppbmRleCBjM2QzMGE4Li4xZDE5MTlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwpAQCAtNTQsMTEgKzU0LDggQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHNldF9rdGV4dF9zb3VyY2UobmFzaWRfdCBjbGllbnRfbmFzaWQsIG5hc2lkX3Qgc2VydmVyX25hc2lkKQogewotCWNub2RlaWRfdCBjbGllbnRfY25vZGU7CiAJa2Vybl92YXJzX3QgKmt2cDsKIAotCWNsaWVudF9jbm9kZSA9IE5BU0lEX1RPX0NPTVBBQ1RfTk9ERUlEKGNsaWVudF9uYXNpZCk7Ci0KIAlrdnAgPSAmaHViX2RhdGEoY2xpZW50X25hc2lkKS0+a2Vybl92YXJzOwogCiAJS0VSTl9WQVJTX0FERFIoY2xpZW50X25hc2lkKSA9ICh1bnNpZ25lZCBsb25nKWt2cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvdGltZS5jIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKaW5kZXggYzc2MTUxYi4uMDkwNGQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKQEAgLTk1LDcgKzk1LDcgQEAKIHN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyBkb3NhbXBsZSh2b2lkKQogewogCXUzMiBjdDAsIGN0MTsKLQl2b2xhdGlsZSB1OCBtc2IsIGxzYjsKKwl2b2xhdGlsZSB1OCBtc2I7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlci4gKi8KIAlvdXRiX3AoMHgzNCwgMHg0Myk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAkvKiBMYXRjaCBhbmQgc3BpbiB1bnRpbCB0b3AgYnl0ZSBvZiBjb3VudGVyMCBpcyB6ZXJvICovCiAJZG8gewogCQlvdXRiKDB4MDAsIDB4NDMpOwotCQlsc2IgPSBpbmIoMHg0MCk7CisJCSh2b2lkKSBpbmIoMHg0MCk7CiAJCW1zYiA9IGluYigweDQwKTsKIAkJY3QxID0gcmVhZF9jMF9jb3VudCgpOwogCX0gd2hpbGUgKG1zYik7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY3B1LXJlZ3MuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jcHUtcmVncy5oCmluZGV4IDkwZWQ0YTMuLmM1NGVmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jcHUtcmVncy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jcHUtcmVncy5oCkBAIC00OSw3ICs0OSw3IEBACiAjZGVmaW5lIEVQU1dfSU1fNgkJMHgwMDAwMDYwMAkvKiBpbnRlcnJ1cHQgbW9kZSA2ICovCiAjZGVmaW5lIEVQU1dfSU1fNwkJMHgwMDAwMDcwMAkvKiBpbnRlcnJ1cHQgbW9kZSA3ICovCiAjZGVmaW5lIEVQU1dfSUUJCQkweDAwMDAwODAwCS8qIGludGVycnVwdCBlbmFibGUgKi8KLSNkZWZpbmUgRVBTV19TCQkJMHgwMDAwMzAwMAkvKiBzb2Z0d2FyZSBhdXhpbGxpYXJ5IGJpdHMgKi8KKyNkZWZpbmUgRVBTV19TCQkJMHgwMDAwMzAwMAkvKiBzb2Z0d2FyZSBhdXhpbGlhcnkgYml0cyAqLwogI2RlZmluZSBFUFNXX1QJCQkweDAwMDA4MDAwCS8qIHRyYWNlIGVuYWJsZSAqLwogI2RlZmluZSBFUFNXX25TTAkJMHgwMDAxMDAwMAkvKiBub3Qgc3VwZXJ2aXNvciBsZXZlbCAqLwogI2RlZmluZSBFUFNXX05NSUQJCTB4MDAwMjAwMDAJLyogbm9ubWFza2FibGUgaW50ZXJydXB0IGRpc2FibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Vpc2FfZWVwcm9tLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9laXNhX2VlcHJvbS5oCmluZGV4IDljOWRhOTguLjhjZThiODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Vpc2FfZWVwcm9tLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWlzYV9lZXByb20uaApAQCAtMjcsNyArMjcsNyBAQAogCXVfaW50OF90ICB2ZXJfbWFqOwogCXVfaW50OF90ICB2ZXJfbWluOwogCXVfaW50OF90ICBudW1fc2xvdHM7ICAgICAgICAvKiBudW1iZXIgb2YgRUlTQSBzbG90cyBpbiBzeXN0ZW0gKi8KLQl1X2ludDE2X3QgY3N1bTsgICAgICAgICAgICAgLyogY2hlY2tzdW0sIEkgZG9uJ3Qga25vdyBob3cgdG8gY2FsdWxhdGUgdGhpcyAqLworCXVfaW50MTZfdCBjc3VtOyAgICAgICAgICAgICAvKiBjaGVja3N1bSwgSSBkb24ndCBrbm93IGhvdyB0byBjYWxjdWxhdGUgdGhpcyAqLwogCXVfaW50OF90ICBwYWRbMTBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggZTU0NzcwOS4uZWFkOGQyYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTE4Nyw4ICsxODcsOCBAQAogCiAJLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRsYiBtaXNzIGhhbmRsZXIgbWFjcm9zICovCiAKLQl2YSAgPSByOAkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VyZWQgKi8KLQlzcGMgPSByMjQJLyogc3BhY2UgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VyZWQgKi8KKwl2YSAgPSByOAkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VycmVkICovCisJc3BjID0gcjI0CS8qIHNwYWNlIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cnJlZCAqLwogCiAjaWZuZGVmIENPTkZJR182NEJJVAogCkBAIC04ODIsNyArODgyLDcgQEAKIAkgKiAod2UgZG9uJ3Qgc3RvcmUgdGhlbSBpbiB0aGUgc2lnY29udGV4dCksIHNvIHNldCB0aGVtCiAJICogdG8gInByb3BlciIgdmFsdWVzIG5vdyAob3RoZXJ3aXNlIHdlJ2xsIHdpbmQgdXAgcmVzdG9yaW5nCiAJICogd2hhdGV2ZXIgd2FzIGxhc3Qgc3RvcmVkIGluIHRoZSB0YXNrIHN0cnVjdHVyZSwgd2hpY2ggbWlnaHQKLQkgKiBiZSBpbmNvbnNpc3RlbnQgaWYgYW4gaW50ZXJydXB0IG9jY3VyZWQgd2hpbGUgb24gdGhlIGdhdGV3YXkKKwkgKiBiZSBpbmNvbnNpc3RlbnQgaWYgYW4gaW50ZXJydXB0IG9jY3VycmVkIHdoaWxlIG9uIHRoZSBnYXRld2F5CiAJICogcGFnZSkuIE5vdGUgdGhhdCB3ZSBtYXkgYmUgInRyYXNoaW5nIiB2YWx1ZXMgdGhlIHVzZXIgcHV0IGluCiAJICogdGhlbSwgYnV0IHdlIGRvbid0IHN1cHBvcnQgdGhlIHVzZXIgY2hhbmdpbmcgdGhlbS4KIAkgKi8KQEAgLTExNTYsMTEgKzExNTYsMTEgQEAKIAkgKi8KIAogCXQwID0gcjEJCS8qIHRlbXBvcmFyeSByZWdpc3RlciAwICovCi0JdmEgPSByOAkJLyogdmlydHVhbCBhZGRyZXNzIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cmVkICovCisJdmEgPSByOAkJLyogdmlydHVhbCBhZGRyZXNzIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cnJlZCAqLwogCXQxID0gcjkJCS8qIHRlbXBvcmFyeSByZWdpc3RlciAxICovCiAJcHRlICA9IHIxNgkvKiBwdGUvcGh5cyBwYWdlICMgKi8KIAlwcm90ID0gcjE3CS8qIHByb3QgYml0cyAqLwotCXNwYyAgPSByMjQJLyogc3BhY2UgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VyZWQgKi8KKwlzcGMgID0gcjI0CS8qIHNwYWNlIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cnJlZCAqLwogCXB0cCA9IHIyNQkvKiBwYWdlIGRpcmVjdG9yeS9wYWdlIHRhYmxlIHBvaW50ZXIgKi8KIAogI2lmZGVmIENPTkZJR182NEJJVApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKaW5kZXggNGRiZGYwZS4uMTQ1YzVlNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCkBAIC0xMzEsNyArMTMxLDcgQEAKIAlsZG8gICAgICAgICAgICAgVEhSRUFEX1NaX0FMR04oJXI2KSwlc3AKIAogI2lmZGVmIENPTkZJR19TTVAKLQkvKiBTZXQgdGhlIHNtcCByZW5kZXZvdXMgYWRkcmVzcyBpbnRvIHBhZ2UgemVyby4KKwkvKiBTZXQgdGhlIHNtcCByZW5kZXp2b3VzIGFkZHJlc3MgaW50byBwYWdlIHplcm8uCiAJKiogSXQgd291bGQgYmUgc2FmZXIgdG8gZG8gdGhpcyBpbiBpbml0X3NtcF9jb25maWcoKSBidXQKIAkqKiBpdCdzIGp1c3Qgd2F5IGVhc2llciB0byBkZWFsIHdpdGggaGVyZSBiZWNhdXNlCiAJKiogb2YgNjQtYml0IGZ1bmN0aW9uIHB0cnMgYW5kIHRoZSBhZGRyZXNzIGlzIGxvY2FsIHRvIHRoaXMgZmlsZS4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYwppbmRleCBkMjI4ZDgyLi4wODMyNGFhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jCkBAIC05Myw3ICs5Myw3IEBACiAJY2FzZSAweDY6CQkvKiA3MDUsIDcxMCAqLwogCWNhc2UgMHg3OgkJLyogNzE1LCA3MjUgKi8KIAljYXNlIDB4ODoJCS8qIDc0NSwgNzQ3LCA3NDIgKi8KLQljYXNlIDB4QToJCS8qIDcxMiBhbmQgc2ltaWxpYXIgKi8KKwljYXNlIDB4QToJCS8qIDcxMiBhbmQgc2ltaWxhciAqLwogCWNhc2UgMHhDOgkJLyogNzE1LzY0LCBhdCBsZWFzdCAqLwogCiAJCXBkY190eXBlID0gUERDX1RZUEVfU05BS0U7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNjA5YTMzMS4uMTJjMWVkMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCURCRygxLCJzZXR1cF9ydF9mcmFtZTogZnJhbWUtPnVjID0gMHglcFxuIiwgJmZyYW1lLT51Yyk7CiAJCURCRygxLCJzZXR1cF9ydF9mcmFtZTogZnJhbWUtPnVjLnVjX21jb250ZXh0ID0gMHglcFxuIiwgJmZyYW1lLT51Yy51Y19tY29udGV4dCk7CiAJCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIHJlZ3MsIGluX3N5c2NhbGwpOwotCQkvKiBGSVhNRTogU2hvdWxkIHByb2JhYmx5IGJlIGNvbnZlcnRlZCBhc3dlbGwgZm9yIHRoZSBjb21wYXQgY2FzZSAqLworCQkvKiBGSVhNRTogU2hvdWxkIHByb2JhYmx5IGJlIGNvbnZlcnRlZCBhcyB3ZWxsIGZvciB0aGUgY29tcGF0IGNhc2UgKi8KIAkJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOwogCX0KIAkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCmluZGV4IDY4ZTc1Y2UuLjgyYTUyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJY29weQklcjAsICVyMjEKIAogMzoJCQotCS8qIEVycm9yIG9jY3VyZWQgb24gbG9hZCBvciBzdG9yZSAqLworCS8qIEVycm9yIG9jY3VycmVkIG9uIGxvYWQgb3Igc3RvcmUgKi8KIAkvKiBGcmVlIGxvY2sgKi8KIAlzdHcJJXIyMCwgMCglc3IyLCVyMjApCiAjaWYgRU5BQkxFX0xXU19ERUJVRwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggNzQ4NjdkZi4uNGJlODVlZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0zNCw3ICszNCw3IEBACiAvKiBVc2UgRU5UUllfU0FNRSBmb3IgMzItYml0IHN5c2NhbGxzIHdoaWNoIGFyZSB0aGUgc2FtZSBvbiB3aWRlIGFuZAogICogbmFycm93IHBhbGludXguICBVc2UgRU5UUllfRElGRiBmb3IgdGhvc2Ugd2hlcmUgYSAzMi1iaXQgc3BlY2lmaWMKICAqIGltcGxlbWVudGF0aW9uIGlzIHJlcXVpcmVkIG9uIHdpZGUgcGFsaW51eC4gIFVzZSBFTlRSWV9DT01QIHdoZXJlCi0gKiB0aGUgY29tcGF0YWJpbGl0eSBsYXllciBoYXMgYSB1c2VmdWwgMzItYml0IGltcGxlbWVudGF0aW9uLgorICogdGhlIGNvbXBhdGliaWxpdHkgbGF5ZXIgaGFzIGEgdXNlZnVsIDMyLWJpdCBpbXBsZW1lbnRhdGlvbi4KICAqLwogI2RlZmluZSBFTlRSWV9TQU1FKF9uYW1lXykgLmR3b3JkIHN5c18jI19uYW1lXwogI2RlZmluZSBFTlRSWV9ESUZGKF9uYW1lXykgLmR3b3JkIHN5czMyXyMjX25hbWVfCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tYXRoLWVtdS9kZmFkZC5jIGIvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZGZhZGQuYwppbmRleCBlMTQ3ZDdkLi5kMzdlMmQyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tYXRoLWVtdS9kZmFkZC5jCisrKyBiL2FyY2gvcGFyaXNjL21hdGgtZW11L2RmYWRkLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCWlmKERibF9pc3plcm9faGlkZGVuKHJlc3VsdHAxKSkKIAkgICAgewogCSAgICAvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCSAgICAvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZSByZXN1bHQKKwkgICAgLyogQSBzdHJhaWdodCBmb3J3YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlIHJlc3VsdAogCSAgICAgKiBhbmQgZXh0ZW5zaW9uIGxlZnQgdW50aWwgdGhlIGhpZGRlbiBiaXQgYmVjb21lcyBvbmUuICBOb3QKIAkgICAgICogYWxsIG9mIHRoZSBleHRlbnNpb24gYml0cyBuZWVkIHBhcnRpY2lwYXRlIGluIHRoZSBzaGlmdC4KIAkgICAgICogT25seSB0aGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyAocm91bmQgYW5kIGd1YXJkKSBhcmUKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21hdGgtZW11L2Rmc3ViLmMgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9kZnN1Yi5jCmluZGV4IDg3ZWJjNjAuLjJlOGI1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21hdGgtZW11L2Rmc3ViLmMKKysrIGIvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZGZzdWIuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJaWYoRGJsX2lzemVyb19oaWRkZW4ocmVzdWx0cDEpKQogCSAgICB7CiAJICAgIC8qIEhhbmRsZSBub3JtYWxpemF0aW9uICovCi0JICAgIC8qIEEgc3RyYWlnaHQgZm93YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlIHJlc3VsdAorCSAgICAvKiBBIHN0cmFpZ2h0IGZvcndhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUgcmVzdWx0CiAJICAgICAqIGFuZCBleHRlbnNpb24gbGVmdCB1bnRpbCB0aGUgaGlkZGVuIGJpdCBiZWNvbWVzIG9uZS4gIE5vdAogCSAgICAgKiBhbGwgb2YgdGhlIGV4dGVuc2lvbiBiaXRzIG5lZWQgcGFydGljaXBhdGUgaW4gdGhlIHNoaWZ0LgogCSAgICAgKiBPbmx5IHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzIChyb3VuZCBhbmQgZ3VhcmQpIGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZm1weWZhZGQuYyBiL2FyY2gvcGFyaXNjL21hdGgtZW11L2ZtcHlmYWRkLmMKaW5kZXggNWRkN2Y5My4uYjA2N2M0NSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZm1weWZhZGQuYworKysgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9mbXB5ZmFkZC5jCkBAIC01MzEsNyArNTMxLDcgQEAKIAkJc2lnbl9zYXZlID0gRGJsX3NpZ25leHRlbmRlZHNpZ24ocmVzdWx0cDEpOwogCQlpZiAoRGJsX2lzemVyb19oaWRkZW4ocmVzdWx0cDEpKSB7CiAJCQkvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCQkvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQorCQkvKiBBIHN0cmFpZ2h0Zm9yd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQogCQkgKiByZXN1bHQgYW5kIGV4dGVuc2lvbiBsZWZ0IHVudGlsIHRoZSBoaWRkZW4gYml0CiAJCSAqIGJlY29tZXMgb25lLiAgTm90IGFsbCBvZiB0aGUgZXh0ZW5zaW9uIGJpdHMgbmVlZAogCQkgKiBwYXJ0aWNpcGF0ZSBpbiB0aGUgc2hpZnQuICBPbmx5IHRoZSB0d28gbW9zdCAKQEAgLTExOTEsNyArMTE5MSw3IEBACiAJCXNpZ25fc2F2ZSA9IERibF9zaWduZXh0ZW5kZWRzaWduKHJlc3VsdHAxKTsKIAkJaWYgKERibF9pc3plcm9faGlkZGVuKHJlc3VsdHAxKSkgewogCQkJLyogSGFuZGxlIG5vcm1hbGl6YXRpb24gKi8KLQkJLyogQSBzdHJhaWdodCBmb3dhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUKKwkJLyogQSBzdHJhaWdodGZvcndhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUKIAkJICogcmVzdWx0IGFuZCBleHRlbnNpb24gbGVmdCB1bnRpbCB0aGUgaGlkZGVuIGJpdAogCQkgKiBiZWNvbWVzIG9uZS4gIE5vdCBhbGwgb2YgdGhlIGV4dGVuc2lvbiBiaXRzIG5lZWQKIAkJICogcGFydGljaXBhdGUgaW4gdGhlIHNoaWZ0LiAgT25seSB0aGUgdHdvIG1vc3QgCkBAIC0xODQxLDcgKzE4NDEsNyBAQAogCQlzaWduX3NhdmUgPSBTZ2xfc2lnbmV4dGVuZGVkc2lnbihyZXN1bHRwMSk7CiAJCWlmIChTZ2xfaXN6ZXJvX2hpZGRlbihyZXN1bHRwMSkpIHsKIAkJCS8qIEhhbmRsZSBub3JtYWxpemF0aW9uICovCi0JCS8qIEEgc3RyYWlnaHQgZm93YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlCisJCS8qIEEgc3RyYWlnaHRmb3J3YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlCiAJCSAqIHJlc3VsdCBhbmQgZXh0ZW5zaW9uIGxlZnQgdW50aWwgdGhlIGhpZGRlbiBiaXQKIAkJICogYmVjb21lcyBvbmUuICBOb3QgYWxsIG9mIHRoZSBleHRlbnNpb24gYml0cyBuZWVkCiAJCSAqIHBhcnRpY2lwYXRlIGluIHRoZSBzaGlmdC4gIE9ubHkgdGhlIHR3byBtb3N0IApAQCAtMjQ4Myw3ICsyNDgzLDcgQEAKIAkJc2lnbl9zYXZlID0gU2dsX3NpZ25leHRlbmRlZHNpZ24ocmVzdWx0cDEpOwogCQlpZiAoU2dsX2lzemVyb19oaWRkZW4ocmVzdWx0cDEpKSB7CiAJCQkvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCQkvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQorCQkvKiBBIHN0cmFpZ2h0Zm9yd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQogCQkgKiByZXN1bHQgYW5kIGV4dGVuc2lvbiBsZWZ0IHVudGlsIHRoZSBoaWRkZW4gYml0CiAJCSAqIGJlY29tZXMgb25lLiAgTm90IGFsbCBvZiB0aGUgZXh0ZW5zaW9uIGJpdHMgbmVlZAogCQkgKiBwYXJ0aWNpcGF0ZSBpbiB0aGUgc2hpZnQuICBPbmx5IHRoZSB0d28gbW9zdCAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21hdGgtZW11L3NmYWRkLmMgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9zZmFkZC5jCmluZGV4IDAwOGQ3MjEuLmY4MDJjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21hdGgtZW11L3NmYWRkLmMKKysrIGIvYXJjaC9wYXJpc2MvbWF0aC1lbXUvc2ZhZGQuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJaWYoU2dsX2lzemVyb19oaWRkZW4ocmVzdWx0KSkKIAkgICAgewogCSAgICAvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCSAgICAvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZSByZXN1bHQKKwkgICAgLyogQSBzdHJhaWdodGZvcndhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUgcmVzdWx0CiAJICAgICAqIGFuZCBleHRlbnNpb24gbGVmdCB1bnRpbCB0aGUgaGlkZGVuIGJpdCBiZWNvbWVzIG9uZS4gIE5vdAogCSAgICAgKiBhbGwgb2YgdGhlIGV4dGVuc2lvbiBiaXRzIG5lZWQgcGFydGljaXBhdGUgaW4gdGhlIHNoaWZ0LgogCSAgICAgKiBPbmx5IHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzIChyb3VuZCBhbmQgZ3VhcmQpIGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvc2ZzdWIuYyBiL2FyY2gvcGFyaXNjL21hdGgtZW11L3Nmc3ViLmMKaW5kZXggMjRlZWY2MS4uNWY5MGQwZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvc2ZzdWIuYworKysgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9zZnN1Yi5jCkBAIC0zMDEsNyArMzAxLDcgQEAKIAlpZihTZ2xfaXN6ZXJvX2hpZGRlbihyZXN1bHQpKQogCSAgICB7CiAJICAgIC8qIEhhbmRsZSBub3JtYWxpemF0aW9uICovCi0JICAgIC8qIEEgc3RyYWlnaHQgZm93YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlIHJlc3VsdAorCSAgICAvKiBBIHN0cmFpZ2h0Zm9yd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZSByZXN1bHQKIAkgICAgICogYW5kIGV4dGVuc2lvbiBsZWZ0IHVudGlsIHRoZSBoaWRkZW4gYml0IGJlY29tZXMgb25lLiAgTm90CiAJICAgICAqIGFsbCBvZiB0aGUgZXh0ZW5zaW9uIGJpdHMgbmVlZCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc2hpZnQuCiAJICAgICAqIE9ubHkgdGhlIHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMgKHJvdW5kIGFuZCBndWFyZCkgYXJlCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggYjdlZDhkNy4uYjFkMTI2MiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtMjY2LDggKzI2NiwxMCBAQAogCX0KIAltZW1zZXQocGZubmlkX21hcCwgMHhmZiwgc2l6ZW9mKHBmbm5pZF9tYXApKTsKIAotCWZvciAoaSA9IDA7IGkgPCBucG1lbV9yYW5nZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnBtZW1fcmFuZ2VzOyBpKyspIHsKKwkJbm9kZV9zZXRfc3RhdGUoaSwgTl9OT1JNQUxfTUVNT1JZKTsKIAkJbm9kZV9zZXRfb25saW5lKGkpOworCX0KICNlbmRpZgogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggYjZmZjg4Mi4uOGY0ZDUwYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTIwOSw3ICsyMDksNyBAQAogY29uZmlnIEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEFEQl9QTVUgfHwgUFBDX0VGSUtBIHx8IFBQQ19MSVRFNTIwMCB8fCBQUENfODN4eCB8fCBcCi0JCSAgIFBQQ184NXh4IHx8IFBQQ184Nnh4IHx8IFBQQ19QU0VSSUVTIHx8IDQ0eCB8fCA0MHgKKwkJICAgKFBQQ184NXh4ICYmICFTTVApIHx8IFBQQ184Nnh4IHx8IFBQQ19QU0VSSUVTIHx8IDQ0eCB8fCA0MHgKIAogY29uZmlnIFBQQ19EQ1JfTkFUSVZFCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYi5kdHMKaW5kZXggMjJmNjRiNi4uZTA2NjhmOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjByZGIuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFAxMDIwIFJEQiBEZXZpY2UgVHJlZSBTb3VyY2UKICAqCi0gKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtNTUzLDcgKzU1Myw3IEBACiAJCXJlZyA9IDwwIDB4ZmZlMDkwMDAgMCAweDEwMDA+OwogCQlidXMtcmFuZ2UgPSA8MCAyNTU+OwogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAotCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzMwMDAwIDB4MCAweDEwMDAwPjsKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMxMDAwMCAweDAgMHgxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwpAQCAtNTgwLDggKzU4MCw4IEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwogCQlyZWcgPSA8MCAweGZmZTBhMDAwIDAgMHgxMDAwPjsKIAkJYnVzLXJhbmdlID0gPDAgMjU1PjsKLQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAwIDB4YzAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKLQkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMyMDAwMCAweDAgMHgxMDAwMD47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMDAwMDAgMHgwIDB4MTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwxNiAyPjsKQEAgLTU5MCw4ICs1OTAsOCBAQAogCQkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCi0JCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMAogCQkJCSAgMHgwIDB4MjAwMDAwMDAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGIuZHRzCmluZGV4IGRhNGNiMGQuLmUyZDQ4ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBQMjAyMCBSREIgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTUzNyw3ICs1MzcsNyBAQAogCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKIAkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKLQkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMzMDAwMCAweDAgMHgxMDAwMD47CisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMHgwIDB4MTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwyNSAyPjsKQEAgLTU2NCw4ICs1NjQsOCBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJcmVnID0gPDAgMHhmZmUwYTAwMCAwIDB4MTAwMD47CiAJCWJ1cy1yYW5nZSA9IDwwIDI1NT47Ci0JCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMCAweGMwMDAwMDAwIDB4MCAweDIwMDAwMDAwCi0JCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMjAwMDAgMHgwIDB4MTAwMDA+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzAwMDAwIDB4MCAweDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjYgMj47CkBAIC01NzQsOCArNTc0LDggQEAKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAotCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKIAkJCQkgIDB4MCAweDIwMDAwMDAwCiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMC5kdHMKaW5kZXggMGZlOTNkMC4uYjY5YzNhNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYl9jYW1wX2NvcmUwLmR0cwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoaXMgZHRzIGZpbGUgYWxsb3dzIGNvcmUwIHRvIGhhdmUgbWVtb3J5LCBsMiwgaTJjLCBzcGksIGdwaW8sIGRtYTEsIHVzYiwKICAqIGV0aDEsIGV0aDIsIHNkaGMsIGNyeXB0bywgZ2xvYmFsLXV0aWwsIHBjaTAuCiAgKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTM0Miw3ICszNDIsNyBAQAogCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKIAkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKLQkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMzMDAwMCAweDAgMHgxMDAwMD47CisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMHgwIDB4MTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwyNSAyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYl9jYW1wX2NvcmUxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYl9jYW1wX2NvcmUxLmR0cwppbmRleCBlOTVhNTEyLi43YTMxZDQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYl9jYW1wX2NvcmUxLmR0cwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBQbGVhc2Ugbm90ZSB0byBhZGQgIi1iIDEiIGZvciBjb3JlMSdzIGR0cyBjb21waWxpbmcuCiAgKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE2Miw4ICsxNjIsOCBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJcmVnID0gPDAgMHhmZmUwYTAwMCAwIDB4MTAwMD47CiAJCWJ1cy1yYW5nZSA9IDwwIDI1NT47Ci0JCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMCAweGMwMDAwMDAwIDB4MCAweDIwMDAwMDAwCi0JCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMjAwMDAgMHgwIDB4MTAwMDA+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzAwMDAwIDB4MCAweDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjYgMj47CkBAIC0xNzIsOCArMTcyLDggQEAKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAotCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKIAkJCQkgIDB4MCAweDIwMDAwMDAwCiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vOHh4X2ltbWFwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vOHh4X2ltbWFwLmgKaW5kZXggNmI2ZGMyMC4uYmRmMDU2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLzh4eF9pbW1hcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS84eHhfaW1tYXAuaApAQCAtMzkzLDggKzM5Myw4IEBACiAJdWludAlmZWNfYWRkcl9sb3c7CQkvKiBsb3dlciAzMiBiaXRzIG9mIHN0YXRpb24gYWRkcmVzcwkqLwogCXVzaG9ydAlmZWNfYWRkcl9oaWdoOwkJLyogdXBwZXIgMTYgYml0cyBvZiBzdGF0aW9uIGFkZHJlc3MJKi8KIAl1c2hvcnQJcmVzMTsJCQkvKiByZXNlcnZlZAkJCQkqLwotCXVpbnQJZmVjX2hhc2hfdGFibGVfaGlnaDsJLyogdXBwZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLwotCXVpbnQJZmVjX2hhc2hfdGFibGVfbG93OwkvKiBsb3dlciAzMi1iaXRzIG9mIGhhc2ggdGFibGUJCSovCisJdWludAlmZWNfZ3JwX2hhc2hfdGFibGVfaGlnaDsJLyogdXBwZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLworCXVpbnQJZmVjX2dycF9oYXNoX3RhYmxlX2xvdzsJLyogbG93ZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLwogCXVpbnQJZmVjX3JfZGVzX3N0YXJ0OwkvKiBiZWdpbm5pbmcgb2YgUnggZGVzY3JpcHRvciByaW5nCSovCiAJdWludAlmZWNfeF9kZXNfc3RhcnQ7CS8qIGJlZ2lubmluZyBvZiBUeCBkZXNjcmlwdG9yIHJpbmcJKi8KIAl1aW50CWZlY19yX2J1ZmZfc2l6ZTsJLyogUnggYnVmZmVyIHNpemUJCQkqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDJlNTYxODcuLmYxOGM2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTIwOSw4ICsyMDksOCBAQAogCQlyZXR1cm4gQklUU19QRVJfTE9ORzsKIAogCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGxlYXN0IHNpZ25maWNhbnQgJzEnIGJpdCBpbiB4Ci0JICogKHNpbmNlIHggaGFzIGJlZW4gY2hhbmdlZCB0aGlzIHdpbGwgYWN0dWFsbHkgYmUgdGhlIGxlYXN0IHNpZ25maWNhbnQKKwkgKiBDYWxjdWxhdGUgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgJzEnIGJpdCBpbiB4CisJICogKHNpbmNlIHggaGFzIGJlZW4gY2hhbmdlZCB0aGlzIHdpbGwgYWN0dWFsbHkgYmUgdGhlIGxlYXN0IHNpZ25pZmljYW50CiAJICogJzAnIGJpdCBpbiAqIHRoZSBvcmlnaW5hbCB4KS4gIE5vdGU6ICh4ICYgLXgpIGdpdmVzIHVzIGEgbWFzayB0aGF0CiAJICogaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50ICogKFJJR0hULW1vc3QpIDEtYml0IG9mIHRoZSB2YWx1ZSBpbiB4LgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCmluZGV4IDIyOTYxMTIuLjkxMDEwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb21wYXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTE0MCw3ICsxNDAsNyBAQAogCXVuc2lnbmVkIGxvbmcgdXNwID0gcmVncy0+Z3ByWzFdOwogCiAJLyoKLQkgKiBXZSBjYW50IGFjY2VzcyBiZWxvdyB0aGUgc3RhY2sgcG9pbnRlciBpbiB0aGUgMzJiaXQgQUJJIGFuZAorCSAqIFdlIGNhbid0IGFjY2VzcyBiZWxvdyB0aGUgc3RhY2sgcG9pbnRlciBpbiB0aGUgMzJiaXQgQUJJIGFuZAogCSAqIGNhbiBhY2Nlc3MgMjg4IGJ5dGVzIGluIHRoZSA2NGJpdCBBQkkKIAkgKi8KIAlpZiAoIWlzXzMyYml0X3Rhc2soKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaAppbmRleCBlNTAzMjNmLi40Mzk4YTZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbS5oCkBAIC05OCw3ICs5OCw3IEBACiAjZGVmaW5lIEJEX1NDX0lOVFJQVAkoMHgxMDAwKQkvKiBJbnRlcnJ1cHQgb24gY2hhbmdlICovCiAjZGVmaW5lIEJEX1NDX0xBU1QJKDB4MDgwMCkJLyogTGFzdCBidWZmZXIgaW4gZnJhbWUgKi8KICNkZWZpbmUgQkRfU0NfVEMJKDB4MDQwMCkJLyogVHJhbnNtaXQgQ1JDICovCi0jZGVmaW5lIEJEX1NDX0NNCSgweDAyMDApCS8qIENvbnRpbm91cyBtb2RlICovCisjZGVmaW5lIEJEX1NDX0NNCSgweDAyMDApCS8qIENvbnRpbnVvdXMgbW9kZSAqLwogI2RlZmluZSBCRF9TQ19JRAkoMHgwMTAwKQkvKiBSZWMnZCB0b28gbWFueSBpZGxlcyAqLwogI2RlZmluZSBCRF9TQ19QCQkoMHgwMTAwKQkvKiB4bXQgcHJlYW1ibGUgKi8KICNkZWZpbmUgQkRfU0NfQlIJKDB4MDAyMCkJLyogQnJlYWsgcmVjZWl2ZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0xLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtMS5oCmluZGV4IGJkMDc2NTBkLi44ZWU0MjExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtMS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0xLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGluZm9ybWF0aW9uIGZvciB0aGUgY29tbXVuaWNhdGlvbgogICogcHJvY2Vzc29yIGNoYW5uZWxzLiAgU29tZSBDUE0gY29udHJvbCBhbmQgc3RhdHVzIGlzIGF2YWlsYWJsZQotICogdGhyb3VnaHQgdGhlIE1QQzh4eCBpbnRlcm5hbCBtZW1vcnkgbWFwLiAgU2VlIGltbWFwLmggZm9yIGRldGFpbHMuCisgKiB0aHJvdWdoIHRoZSBNUEM4eHggaW50ZXJuYWwgbWVtb3J5IG1hcC4gIFNlZSBpbW1hcC5oIGZvciBkZXRhaWxzLgogICogVGhpcyBmaWxlIG9ubHkgY29udGFpbnMgd2hhdCBJIG5lZWQgZm9yIHRoZSBtb21lbnQsIG5vdCB0aGUgdG90YWwKICAqIENQTSBjYXBhYmlsaXRpZXMuICBJIChvciBzb21lb25lIGVsc2UpIHdpbGwgYWRkIGRlZmluaXRpb25zIGFzIHRoZXkKICAqIGFyZSBuZWVkZWQuICAtLSBEYW4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggYmUzY2RmOS4uMTgzM2QxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTM4MiwxMCArMzgyLDEyIEBACiAjZGVmaW5lIENQVV9GVFJTX0U1MDBfMgkoQ1BVX0ZUUl9NQVlCRV9DQU5fRE9aRSB8IENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX1NQRV9DT01QIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgXAogCSAgICBDUFVfRlRSX05PRFNJU1JBTElHTiB8IENQVV9GVFJfTk9FWEVDVVRFKQotI2RlZmluZSBDUFVfRlRSU19FNTAwTUMJKENQVV9GVFJfTUFZQkVfQ0FOX0RPWkUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKLQkgICAgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBcCisjZGVmaW5lIENQVV9GVFJTX0U1MDBNQwkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX05PRFNJU1JBTElHTiB8IFwKIAkgICAgQ1BVX0ZUUl9MMkNTUiB8IENQVV9GVFJfTFdTWU5DIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCiAJICAgIENQVV9GVFJfREJFTEwpCisjZGVmaW5lIENQVV9GVFJTX0U1NTAwCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgXAorCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BVX0ZUUl9MV1NZTkMgfCBDUFVfRlRSX05PRVhFQ1VURSB8IFwKKwkgICAgQ1BVX0ZUUl9EQkVMTCB8IENQVV9GVFJfUE9QQ05UQiB8IENQVV9GVFJfUE9QQ05URCkKICNkZWZpbmUgQ1BVX0ZUUlNfR0VORVJJQ18zMgkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX05PRFNJU1JBTElHTikKIAogLyogNjQtYml0IENQVXMgKi8KQEAgLTQzNSwxMSArNDM3LDE1IEBACiAjZGVmaW5lIENQVV9GVFJTX0NPTVBBVElCTEUJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyKQogCiAjaWZkZWYgX19wb3dlcnBjNjRfXworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisjZGVmaW5lIENQVV9GVFJTX1BPU1NJQkxFCShDUFVfRlRSU19FNTUwMCkKKyNlbHNlCiAjZGVmaW5lIENQVV9GVFJTX1BPU1NJQkxFCVwKIAkgICAgKENQVV9GVFJTX1BPV0VSMyB8IENQVV9GVFJTX1JTNjQgfCBDUFVfRlRSU19QT1dFUjQgfAlcCiAJICAgIENQVV9GVFJTX1BQQzk3MCB8IENQVV9GVFJTX1BPV0VSNSB8IENQVV9GVFJTX1BPV0VSNiB8CVwKIAkgICAgQ1BVX0ZUUlNfUE9XRVI3IHwgQ1BVX0ZUUlNfQ0VMTCB8IENQVV9GVFJTX1BBNlQgfAkJXAogCSAgICBDUFVfRlRSXzFUX1NFR01FTlQgfCBDUFVfRlRSX1ZTWCkKKyNlbmRpZgogI2Vsc2UKIGVudW0gewogCUNQVV9GVFJTX1BPU1NJQkxFID0KQEAgLTQ3MywxNiArNDc5LDIxIEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRTUwMAogCSAgICBDUFVfRlRSU19FNTAwIHwgQ1BVX0ZUUlNfRTUwMF8yIHwgQ1BVX0ZUUlNfRTUwME1DIHwKKwkgICAgQ1BVX0ZUUlNfRTU1MDAgfAogI2VuZGlmCiAJICAgIDAsCiB9OwogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorI2RlZmluZSBDUFVfRlRSU19BTFdBWVMJCShDUFVfRlRSU19FNTUwMCkKKyNlbHNlCiAjZGVmaW5lIENQVV9GVFJTX0FMV0FZUwkJXAogCSAgICAoQ1BVX0ZUUlNfUE9XRVIzICYgQ1BVX0ZUUlNfUlM2NCAmIENQVV9GVFJTX1BPV0VSNCAmCVwKIAkgICAgQ1BVX0ZUUlNfUFBDOTcwICYgQ1BVX0ZUUlNfUE9XRVI1ICYgQ1BVX0ZUUlNfUE9XRVI2ICYJXAogCSAgICBDUFVfRlRSU19QT1dFUjcgJiBDUFVfRlRSU19DRUxMICYgQ1BVX0ZUUlNfUEE2VCAmIENQVV9GVFJTX1BPU1NJQkxFKQorI2VuZGlmCiAjZWxzZQogZW51bSB7CiAJQ1BVX0ZUUlNfQUxXQVlTID0KQEAgLTUxMyw2ICs1MjQsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0U1MDAKIAkgICAgQ1BVX0ZUUlNfRTUwMCAmIENQVV9GVFJTX0U1MDBfMiAmIENQVV9GVFJTX0U1MDBNQyAmCisJICAgIENQVV9GVFJTX0U1NTAwICYKICNlbmRpZgogCSAgICBDUFVfRlRSU19QT1NTSUJMRSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKaW5kZXggZWMwODlhYy4uOGVkZWM3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaApAQCAtMTIyLDcgKzEyMiw3IEBACiAjZGVmaW5lIEhfREFCUlhfS0VSTkVMCQkoMVVMPDwoNjMtNjIpKQogI2RlZmluZSBIX0RBQlJYX1VTRVIJCSgxVUw8PCg2My02MykpCiAKLS8qIEVhY2ggY29udHJvbCBibG9jayBoYXMgdG8gYmUgb24gYSA0SyBib25kYXJ5ICovCisvKiBFYWNoIGNvbnRyb2wgYmxvY2sgaGFzIHRvIGJlIG9uIGEgNEsgYm91bmRhcnkgKi8KICNkZWZpbmUgSF9DQl9BTElHTk1FTlQgICAgICAgICAgNDA5NgogCiAvKiBwU2VyaWVzIGh5cGVydmlzb3Igb3Bjb2RlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKaW5kZXggZDBlNzcwMS4uYmUwMTcxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2twcm9iZXMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC01MCw3ICs1MCw3IEBACiAgKiBIYW5kbGUgY2FzZXMgd2hlcmU6CiAgKiAJCS0gVXNlciBwYXNzZXMgYSA8LnN5bWJvbD4gb3IgPG1vZHVsZTouc3ltYm9sPgogICogCQktIFVzZXIgcGFzc2VzIGEgPHN5bWJvbD4gb3IgPG1vZHVsZTpzeW1ib2w+Ci0gKiAJCS0gVXNlciBwYXNzZXMgYSBub24tZXhpc3RhbnQgc3ltYm9sLCBrYWxsc3ltc19sb29rdXBfbmFtZQorICogCQktIFVzZXIgcGFzc2VzIGEgbm9uLWV4aXN0ZW50IHN5bWJvbCwga2FsbHN5bXNfbG9va3VwX25hbWUKICAqIAkJICByZXR1cm5zIDAuIERvbid0IGRlcmVmIHRoZSBOVUxMIHBvaW50ZXIgaW4gdGhhdCBjYXNlCiAgKi8KICNkZWZpbmUga3Byb2JlX2xvb2t1cF9uYW1lKG5hbWUsIGFkZHIpCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKaW5kZXggMjZiOGM4MC4uYTA3N2FkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaApAQCAtMTA1LDcgKzEwNSw3IEBACiAJLy8gcHJvY2Vzc2luZyBvZiBleHRlcm5hbCBpbnRlcnJ1cHRzLiAgTm90ZSB0aGF0IFBMSUMgd2lsbCBzdG9yZSB0aGUKIAkvLyBYSVJSIGRpcmVjdGx5IGludG8gdGhlIHhYaXJyVmFsdWUgZmllbGQgc28gdGhhdCBhbm90aGVyIFhJUlIgd2lsbAogCS8vIG5vdCBiZSBwcmVzZW50ZWQgdW50aWwgdGhpcyBvbmUgY2xlYXJzLiAgVGhlIGxheW91dCBvZiB0aGUgbG93Ci0JLy8gNC1ieXRlcyBvZiB0aGlzIER3b3JkIGlzIHVwdG8gU0xJQyAtIFBMSUMganVzdCBjaGVja3Mgd2hldGhlciB0aGUKKwkvLyA0LWJ5dGVzIG9mIHRoaXMgRHdvcmQgaXMgdXAgdG8gU0xJQyAtIFBMSUMganVzdCBjaGVja3Mgd2hldGhlciB0aGUKIAkvLyBlbnRpcmUgRHdvcmQgaXMgemVybyBvciBub3QuICBBIG5vbi16ZXJvIHZhbHVlIGluIHRoZSBsb3cgb3JkZXIKIAkvLyAyLWJ5dGVzIHdpbGwgcmVzdWx0IGluIFNMSUMgYmVpbmcgZ3JhbnRlZCB0aGUgaGlnaGVzdCB0aHJlYWQKIAkvLyBwcmlvcml0eSB1cG9uIHJldHVybi4gIEEgMCB3aWxsIHJldHVybiB0byBTTElDIGFzIG1lZGl1bSBwcmlvcml0eS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oCmluZGV4IDkzMmY4OGQuLjgxMmIyY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaApAQCAtMTY5LDcgKzE2OSw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBhIHByb2dyYW0gZG9lc24ndCBoYXZlIGEgUFRfR05VX1NUQUNLCiAgKiBwcm9ncmFtIGhlYWRlciBlbnRyeS4gVGhlIFBQQzY0IEVMRiBBQkkgaGFzIGEgbm9uIGV4ZWN1dGFibGUgc3RhY2sKLSAqIHN0YWNrIGJ5IGRlZmF1bHQsIHNvIGluIHRoZSBhYnNlbnNlIG9mIGEgUFRfR05VX1NUQUNLIHByb2dyYW0gaGVhZGVyCisgKiBzdGFjayBieSBkZWZhdWx0LCBzbyBpbiB0aGUgYWJzZW5jZSBvZiBhIFBUX0dOVV9TVEFDSyBwcm9ncmFtIGhlYWRlcgogICogd2UgdHVybiBleGVjdXRlIHBlcm1pc3Npb24gb2ZmLgogICovCiAjZGVmaW5lIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MzMgkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXNlbWlfZG1hLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFzZW1pX2RtYS5oCmluZGV4IDE5ZmQ3OTMuLmVhZmE1YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXNlbWlfZG1hLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Bhc2VtaV9kbWEuaApAQCAtNTIyLDcgKzUyMiw3IEBACiBleHRlcm4gdm9pZCBwYXNlbWlfZG1hX2ZyZWVfYnVmKHN0cnVjdCBwYXNlbWlfZG1hY2hhbiAqY2hhbiwgaW50IHNpemUsCiAJCQkJZG1hX2FkZHJfdCAqaGFuZGxlKTsKIAotLyogUm91dGluZXMgdG8gYWxsb2NhdGUgZmxhZ3MgKGV2ZW50cykgZm9yIGNoYW5uZWwgc3luY3Jvbml6YXRpb24gKi8KKy8qIFJvdXRpbmVzIHRvIGFsbG9jYXRlIGZsYWdzIChldmVudHMpIGZvciBjaGFubmVsIHN5bmNocm9uaXphdGlvbiAqLwogZXh0ZXJuIGludCAgcGFzZW1pX2RtYV9hbGxvY19mbGFnKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFzZW1pX2RtYV9mcmVlX2ZsYWcoaW50IGZsYWcpOwogZXh0ZXJuIHZvaWQgcGFzZW1pX2RtYV9zZXRfZmxhZyhpbnQgZmxhZyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAppbmRleCA1ZTE1NmUwLi5iOTBkYmY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQAogCSAqIFVzZWQgZm9yIHZhcmlhbnRzIG9mIFBDSSBpbmRpcmVjdCBoYW5kbGluZyBhbmQgcG9zc2libGUgcXVpcmtzOgogCSAqICBTRVRfQ0ZHX1RZUEUgLSB1c2VkIG9uIDR4eCBvciBhbnkgUEhCIHRoYXQgZG9lcyBleHBsaWNpdCB0eXBlMC8xCiAJICogIEVYVF9SRUcgLSBwcm92aWRlcyBhY2Nlc3MgdG8gUENJLWUgZXh0ZW5kZWQgcmVnaXN0ZXJzCi0JICogIFNVUlBSRVNTX1BSSU1BUllfQlVTIC0gd2Ugc3VycHJlc3MgdGhlIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTCisJICogIFNVUlBSRVNTX1BSSU1BUllfQlVTIC0gd2Ugc3VwcHJlc3MgdGhlIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTCiAJICogICBvbiBGcmVlc2NhbGUgUENJLWUgY29udHJvbGxlcnMgc2luY2UgdGhleSB1c2VkIHRoZSBQQ0lfUFJJTUFSWV9CVVMKIAkgKiAgIHRvIGRldGVybWluZSB3aGljaCBidXMgbnVtYmVyIHRvIG1hdGNoIG9uIHdoZW4gZ2VuZXJhdGluZyB0eXBlMAogCSAqICAgY29uZmlnIGN5Y2xlcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCmluZGV4IDAwZWVkYzUuLjEwOTAyYzkzNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaApAQCAtNTMsOCArNTMsOCBAQAogCiAvKiBIZXJlIGlzIHRoZSBpbmZhbW91cyBzZXJpZSBvZiBPSGFyZSBiYXNlZCBtYWNoaW5lcwogICovCi0jZGVmaW5lIFBNQUNfVFlQRV9DT01FVAkJCTB4MjAJLyogQmVsZWl2ZWQgdG8gYmUgUG93ZXJCb29rIDI0MDAgKi8KLSNkZWZpbmUgUE1BQ19UWVBFX0hPT1BFUgkJMHgyMQkvKiBCZWxlaXZlZCB0byBiZSBQb3dlckJvb2sgMzQwMCAqLworI2RlZmluZSBQTUFDX1RZUEVfQ09NRVQJCQkweDIwCS8qIEJlbGlldmVkIHRvIGJlIFBvd2VyQm9vayAyNDAwICovCisjZGVmaW5lIFBNQUNfVFlQRV9IT09QRVIJCTB4MjEJLyogQmVsaWV2ZWQgdG8gYmUgUG93ZXJCb29rIDM0MDAgKi8KICNkZWZpbmUgUE1BQ19UWVBFX0tBTkdBCQkJMHgyMgkvKiBQb3dlckJvb2sgMzUwMCAoZmlyc3QgRzMpICovCiAjZGVmaW5lIFBNQUNfVFlQRV9BTENIRU1ZCQkweDIzCS8qIEFsY2hlbXkgbW90aGVyYm9hcmQgYmFzZSAqLwogI2RlZmluZSBQTUFDX1RZUEVfR0FaRUxMRQkJMHgyNAkvKiBTcGFydGFjdXMsIHNvbWUgNXh4eC82eHh4ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaAppbmRleCA3NmJiMTk1Li44ZDE1NjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKQEAgLTg2LDcgKzg2LDcgQEAKICNkZWZpbmUgUFRFX1JQTl9NQVNLCSh+KCgxVUw8PFBURV9SUE5fU0hJRlQpLTEpKQogI2VuZGlmCiAKLS8qIF9QQUdFX0NIR19NQVNLIG1hc2tzIG9mIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkIGFjY3Jvc3MKKy8qIF9QQUdFX0NIR19NQVNLIG1hc2tzIG9mIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkIGFjcm9zcwogICogcGdwcm90IGNoYW5nZXMKICAqLwogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX1JQTl9NQVNLIHwgX1BBR0VfSFBURUZMQUdTIHwgX1BBR0VfRElSVFkgfCBcCkBAIC0xNjIsNyArMTYyLDcgQEAKICAqIG9uIHBsYXRmb3JtcyB3aGVyZSBzdWNoIGNvbnRyb2wgaXMgcG9zc2libGUuCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19LR0RCKSB8fCBkZWZpbmVkKENPTkZJR19YTU9OKSB8fCBkZWZpbmVkKENPTkZJR19CRElfU1dJVENIKSB8fFwKLQlkZWZpbmVkKENPTkZJR19LUFJPQkVTKQorCWRlZmluZWQoQ09ORklHX0tQUk9CRVMpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQogI2RlZmluZSBQQUdFX0tFUk5FTF9URVhUCVBBR0VfS0VSTkVMX1gKICNlbHNlCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1RFWFQJUEFHRV9LRVJORUxfUk9YCkBAIC0xNzQsNyArMTc0LDcgQEAKIC8qCiAgKiBEb24ndCBqdXN0IGNoZWNrIGZvciBhbnkgbm9uIHplcm8gYml0cyBpbiBfX1BBR0VfVVNFUiwgc2luY2UgZm9yIGJvb2szZQogICogYW5kIFBURV82NEJJVCwgUEFHRV9LRVJORUxfWCBjb250YWlucyBfUEFHRV9CQVBfU1Igd2hpY2ggaXMgYWxzbyBpbgotICogX1BBR0VfVVNFUi4gIE5lZWQgdG8gZXhwbGljdGx5IG1hdGNoIF9QQUdFX0JBUF9VUiBiaXQgaW4gdGhhdCBjYXNlIHRvby4KKyAqIF9QQUdFX1VTRVIuICBOZWVkIHRvIGV4cGxpY2l0bHkgbWF0Y2ggX1BBR0VfQkFQX1VSIGJpdCBpbiB0aGF0IGNhc2UgdG9vLgogICovCiAjZGVmaW5lIHB0ZV91c2VyKHZhbCkJCSgodmFsICYgX1BBR0VfVVNFUikgPT0gX1BBR0VfVVNFUikKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCmluZGV4IDNiMWE5YjcuLmIzMTY3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKQEAgLTIsNyArMiw3IEBACiAgKiBDb250YWlucyByZWdpc3RlciBkZWZpbml0aW9ucyBjb21tb24gdG8gdGhlIEJvb2sgRSBQb3dlclBDCiAgKiBzcGVjaWZpY2F0aW9uLiAgTm90aWNlIHRoYXQgd2hpbGUgdGhlIElCTS00MHggc2VyaWVzIG9mIENQVXMKICAqIGFyZSBub3QgdHJ1ZSBCb29rIEUgUG93ZXJQQ3MsIHRoZXkgYm9ycm93ZWQgYSBudW1iZXIgb2YgZmVhdHVyZXMKLSAqIGJlZm9yZSBCb29rIEUgd2FzIGZpbmFsaXplZCwgYW5kIGFyZSBpbmNsdWRlZCBoZXJlIGFzIHdlbGwuICBVbmZvcnR1bmF0bHksCisgKiBiZWZvcmUgQm9vayBFIHdhcyBmaW5hbGl6ZWQsIGFuZCBhcmUgaW5jbHVkZWQgaGVyZSBhcyB3ZWxsLiAgVW5mb3J0dW5hdGVseSwKICAqIHRoZXkgc29tZXRpbWVzIHVzZWQgZGlmZmVyZW50IGxvY2F0aW9ucyB0aGFuIHRydWUgQm9vayBFIENQVXMgZGlkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfcHJpdjEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfcHJpdjEuaAppbmRleCAyNTAyMGEzLi5kOGY1YzYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X3ByaXYxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9wcml2MS5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIH0KIAogLyoKLSAqIFRoZSBkZWNsYXJhdGlvbnMgZm9sb3dpbmcgYXJlIHB1dCBoZXJlIGZvciBjb252ZW5pZW5jZQorICogVGhlIGRlY2xhcmF0aW9ucyBmb2xsb3dpbmcgYXJlIHB1dCBoZXJlIGZvciBjb252ZW5pZW5jZQogICogYW5kIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgcGxhdGZvcm0gc2V0dXAgY29kZS4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pbm9ydGguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlub3J0aC5oCmluZGV4IGY3Mzc3MzIuLmQxMmIxMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlub3J0aC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlub3J0aC5oCkBAIC02MCw3ICs2MCw3IEBACiAgKgogICogT2J2aW91c2x5LCB0aGUgR0FSVCBpcyBub3QgY2FjaGUgY29oZXJlbnQgYW5kIHNvIGFueSBjaGFuZ2UgdG8gaXQKICAqIG11c3QgYmUgZmx1c2hlZCB0byBtZW1vcnkgKG9yIG1heWJlIGp1c3QgbWFrZSB0aGUgR0FSVCBzcGFjZSBub24KLSAqIGNhY2hhYmxlKS4gQUdQIG1lbW9yeSBpdHNlbGYgZG9lbnMndCBzZWVtIHRvIGJlIGNhY2hlIGNvaGVyZW50IG5laXRoZXIuCisgKiBjYWNoYWJsZSkuIEFHUCBtZW1vcnkgaXRzZWxmIGRvZXNuJ3Qgc2VlbSB0byBiZSBjYWNoZSBjb2hlcmVudCBuZWl0aGVyLgogICoKICAqIEluIG9yZGVyIHRvIGludmFsaWRhdGUgdGhlIEdBUlQgKHdoaWNoIGlzIHByb2JhYmx5IG5lY2Vzc2FyeSB0byBpbnZhbAogICogdGhlIGJyaWRnZSBpbnRlcm5hbCBUTEJzKSwgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBoYXMgdG8gYmUgd3JpdHRlbiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS92ZHNvX2RhdGFwYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdmRzb19kYXRhcGFnZS5oCmluZGV4IDI1ZTM5MjIuLmI3M2E4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS92ZHNvX2RhdGFwYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Zkc29fZGF0YXBhZ2UuaApAQCAtNTcsNyArNTcsNyBAQAogCX0gdmVyc2lvbjsKIAogCS8qIE5vdGUgYWJvdXQgdGhlIHBsYXRmb3JtIGZsYWdzOiBpdCBub3cgb25seSBjb250YWlucyB0aGUgbHBhcgotCSAqIGJpdC4gVGhlIGFjdHVhbCBwbGF0Zm9ybSBudW1iZXIgaXMgZGVhZCBhbmQgYnVycmllZAorCSAqIGJpdC4gVGhlIGFjdHVhbCBwbGF0Zm9ybSBudW1iZXIgaXMgZGVhZCBhbmQgYnVyaWVkCiAJICovCiAJX191MzIgcGxhdGZvcm07CQkJLyogUGxhdGZvcm0gZmxhZ3MJCTB4MTggKi8KIAlfX3UzMiBwcm9jZXNzb3I7CQkvKiBQcm9jZXNzb3IgdHlwZQkJMHgxQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCmluZGV4IDYyNTk0MmEuLjYwYjNlMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKQEAgLTk5LDcgKzk5LDcgQEAKIAogLyogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBlbmFibGUgdGhlIGVhcmx5IGJvb3QgdGV4dCB3aGVuIGRvaW5nCiAgKiBPRiBib290aW5nIG9yIHdpdGhpbiBib290eCBpbml0LiBJdCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgYnRleHRfdW5tYXAoKQotICogY2FsbCBiZWZvcmUgdGhlIGxvZ2ljYWwgYWRkcmVzcyBiZWNvbWVzIHVudXNlYWJsZQorICogY2FsbCBiZWZvcmUgdGhlIGxvZ2ljYWwgYWRkcmVzcyBiZWNvbWVzIHVudXNhYmxlCiAgKi8KIHZvaWQgX19pbml0IGJ0ZXh0X3NldHVwX2Rpc3BsYXkoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsIGludCBwaXRjaCwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggYzliNjhkMC4uYjk2MDJlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMTk3Myw3ICsxOTczLDcgQEAKIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCiAJCS5wdnJfdmFsdWUJCT0gMHg4MDI0MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJlNTUwMCIsCi0JCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTUwME1DLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0U1NTAwLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSwKIAkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UgfCBNTVVfRlRSX0JJR19QSFlTIHwKIAkJCU1NVV9GVFJfVVNFX1RMQklMWCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwppbmRleCAzZDU2OWUyLi41YjVlMWYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAl9CiAJbWIoKTsKIH0KLSNlbmRpZgorI2VuZGlmCS8qIENPTkZJR19QUENfU1REX01NVV82NCAqLwogCiAvKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBzZWNvbmRhcnkgY3B1cyBvciBieSBrZXhlYyBjcHUKQEAgLTIzMyw3ICsyMzMsOSBAQAogCWNyYXNoX2lwaV9jYWxsYmFjayhyZWdzKTsKIH0KIAotI2Vsc2UKKyNlbHNlCS8qICEgQ09ORklHX1NNUCAqLworc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX2tleGVjX3dhaXRfcmVhbG1vZGUoaW50IGNwdSkge30KKwogc3RhdGljIHZvaWQgY3Jhc2hfa2V4ZWNfcHJlcGFyZV9jcHVzKGludCBjcHUpCiB7CiAJLyoKQEAgLTI1Myw3ICsyNTUsNyBAQAogewogCWNwdXNfaW5fc3IgPSBDUFVfTUFTS19OT05FOwogfQotI2VuZGlmCisjZW5kaWYJLyogQ09ORklHX1NNUCAqLwogCiAvKgogICogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gc2h1dGRvd24uICBPbmx5IHVzZSB0aGlzIGlmIHlvdQpAQCAtMzQ0LDkgKzM0Niw3IEBACiAJY3Jhc2hfc2F2ZV9jcHUocmVncywgY3Jhc2hpbmdfY3B1KTsKIAljcmFzaF9rZXhlY19wcmVwYXJlX2NwdXMoY3Jhc2hpbmdfY3B1KTsKIAljcHVfc2V0KGNyYXNoaW5nX2NwdSwgY3B1c19pbl9jcmFzaCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVVfNjQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKIAljcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGNyYXNoaW5nX2NwdSk7Ci0jZW5kaWYKIAogCW1hY2hpbmVfa2V4ZWNfbWFza19pbnRlcnJ1cHRzKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwppbmRleCA1YzQzMDYzLi45NjUxYWNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCkBAIC0zNzksNyArMzc5LDcgQEAKIAltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0EJLyogZ2V0IG91ciBQQUNBICovCiAJYglzeXN0ZW1fY2FsbF9jb21tb24KIAotLyogQXV4aWxsYXJ5IFByb2Nlc3NvciBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKy8qIEF1eGlsaWFyeSBQcm9jZXNzb3IgVW5hdmFpbGFibGUgSW50ZXJydXB0ICovCiAJU1RBUlRfRVhDRVBUSU9OKGFwX3VuYXZhaWxhYmxlKTsKIAlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRygweGYyMCwgUFJPTE9HX0FERElUSU9OX05PTkUpCiAJRVhDRVBUSU9OX0NPTU1PTigweGYyMCwgUEFDQV9FWEdFTiwgSU5UU19LRUVQKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCmluZGV4IGM1MzJjYjIuLmFlYjczOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKQEAgLTUsNyArNSw3IEBACiAgKiBoYW5kbGluZyBhbmQgb3RoZXIgZml4ZWQgb2Zmc2V0IHNwZWNpZmljIHRoaW5ncy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgI2luY2x1ZGVkIGZyb20gaGVhZF82NC5TIGR1ZSB0bwotICogcG9zaXRpb24gZGVwZW5kYW50IGFzc2VtYmx5LgorICogcG9zaXRpb24gZGVwZW5kZW50IGFzc2VtYmx5LgogICoKICAqIE1vc3Qgb2YgdGhpcyBvcmlnaW5hdGVzIGZyb20gaGVhZF82NC5TIGFuZCB0aHVzIGhhcyB0aGUgc2FtZQogICogY29weXJpZ2h0IGhpc3RvcnkuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDB4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDB4LlMKaW5kZXggOWRkMjFhOC4uYTkxNjI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQweC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80MHguUwpAQCAtNzY2LDcgKzc2Niw3IEBACiAJICogbWlzcyBnZXQgdG8gdGhpcyBwb2ludCB0byBsb2FkIHRoZSBUTEIuCiAJICogCXIxMCAtIFRMQl9UQUcgdmFsdWUKIAkgKiAJcjExIC0gTGludXggUFRFCi0JICoJcjEyLCByOSAtIGF2aWxhYmxlIHRvIHVzZQorCSAqCXIxMiwgcjkgLSBhdmFpbGFibGUgdG8gdXNlCiAJICoJUElEIC0gbG9hZGVkIHdpdGggcHJvcGVyIHZhbHVlIHdoZW4gd2UgZ2V0IGhlcmUKIAkgKglVcG9uIGV4aXQsIHdlIHJlbG9hZCBldmVyeXRoaW5nIGFuZCBSRkkuCiAJICogQWN0dWFsbHksIGl0IHdpbGwgZml0IG5vdywgYnV0IG9oIHdlbGwuLi4uLmEgY29tbW9uIHBsYWNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKaW5kZXggY2JiMzQzNi4uNWUxMmI3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cKIAlFWENfWEZFUl9FRV9MSVRFKDB4MGMwMCwgRG9TeXNjYWxsKQogCi0JLyogQXV4aWxsYXJ5IFByb2Nlc3NvciBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKwkvKiBBdXhpbGlhcnkgUHJvY2Vzc29yIFVuYXZhaWxhYmxlIEludGVycnVwdCAqLwogCUVYQ0VQVElPTigweDIwMjAsIEF1eGlsbGFyeVByb2Nlc3NvclVuYXZhaWxhYmxlLCB1bmtub3duX2V4Y2VwdGlvbiwgRVhDX1hGRVJfRUUpCiAKIAkvKiBEZWNyZW1lbnRlciBJbnRlcnJ1cHQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggMjcxMTQwYi4uM2EzMTlmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20va3ZtX2Jvb2szc19hc20uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKLS8qIFRoZSBwaHlzaWNhbCBtZW1vcnkgaXMgbGF5ZWQgb3V0IHN1Y2ggdGhhdCB0aGUgc2Vjb25kYXJ5IHByb2Nlc3NvcgorLyogVGhlIHBoeXNpY2FsIG1lbW9yeSBpcyBsYWlkIG91dCBzdWNoIHRoYXQgdGhlIHNlY29uZGFyeSBwcm9jZXNzb3IKICAqIHNwaW4gY29kZSBzaXRzIGF0IDB4MDAwMC4uLjB4MDBmZi4gT24gc2VydmVyLCB0aGUgdmVjdG9ycyBmb2xsb3cKICAqIHVzaW5nIHRoZSBsYXlvdXQgZGVzY3JpYmVkIGluIGV4Y2VwdGlvbnMtNjRzLlMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDNlMDI3MTAuLjVlY2Y1NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTMyNiw3ICszMjYsNyBAQAogCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HCiAJRVhDX1hGRVJfRUVfTElURSgweDBjMDAsIERvU3lzY2FsbCkKIAotCS8qIEF1eGlsbGFyeSBQcm9jZXNzb3IgVW5hdmFpbGFibGUgSW50ZXJydXB0ICovCisJLyogQXV4aWxpYXJ5IFByb2Nlc3NvciBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KIAlFWENFUFRJT04oMHgyOTAwLCBBdXhpbGxhcnlQcm9jZXNzb3JVbmF2YWlsYWJsZSwgdW5rbm93bl9leGNlcHRpb24sIEVYQ19YRkVSX0VFKQogCiAJLyogRGVjcmVtZW50ZXIgSW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2libWVidXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCmluZGV4IGMwMGQ0Y2EuLjI4NTgxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCkBAIC01MjcsNyArNTI3LDcgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfU1VTUEVORCAqLwogCi0jaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCisjaWZkZWYgQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MKIAogc3RhdGljIGludCBpYm1lYnVzX2J1c19wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNjY1LDcgKzY2NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCiAKICNkZWZpbmUgaWJtZWJ1c19idXNfcG1fZnJlZXplCQlOVUxMCiAjZGVmaW5lIGlibWVidXNfYnVzX3BtX3RoYXcJCU5VTEwKQEAgLTY3Niw3ICs2NzYsNyBAQAogI2RlZmluZSBpYm1lYnVzX2J1c19wbV9wb3dlcm9mZl9ub2lycQlOVUxMCiAjZGVmaW5lIGlibWVidXNfYnVzX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgaWJtZWJ1c19idXNfZGV2X3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IGlibWVidXNfYnVzX3BtX3ByZXBhcmUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2wyY3JfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2wyY3JfNnh4LlMKaW5kZXggMmEyZjNjMy4uOTdlYzg1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sMmNyXzZ4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbDJjcl82eHguUwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJIC8qKioqIE1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIHNldCBMMkRPIGhlcmUgLSB0byBwcmV2ZW50IGluc3RydWN0aW9ucwogCSAgICAgICBmcm9tIGdldHRpbmcgaW50byB0aGUgY2FjaGUuICBCdXQgc2luY2Ugd2UgaW52YWxpZGF0ZQogCSAgICAgICB0aGUgbmV4dCB0aW1lIHdlIGVuYWJsZSB0aGUgY2FjaGUgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyLgotCSAgICAgICBEb24ndCBkbyB0aGlzIHVubGVzcyB5b3UgYWNjb21vZGF0ZSBhbGwgcHJvY2Vzc29yIHZhcmlhdGlvbnMuCisJICAgICAgIERvbid0IGRvIHRoaXMgdW5sZXNzIHlvdSBhY2NvbW1vZGF0ZSBhbGwgcHJvY2Vzc29yIHZhcmlhdGlvbnMuCiAJICAgICAgIFRoZSBiaXQgbW92ZWQgb24gdGhlIDc0NTAuLi4uLgogCSAgKioqKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYwppbmRleCBjODM0NzU3Li4yYjk3YjgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYwpAQCAtMzMwLDkgKzMzMCwxMSBAQAogCQlpZiAoIXBhcmVudCkKIAkJCWNvbnRpbnVlOwogCQlpZiAob2ZfbWF0Y2hfbm9kZShsZWdhY3lfc2VyaWFsX3BhcmVudHMsIHBhcmVudCkgIT0gTlVMTCkgewotCQkJaW5kZXggPSBhZGRfbGVnYWN5X3NvY19wb3J0KG5wLCBucCk7Ci0JCQlpZiAoaW5kZXggPj0gMCAmJiBucCA9PSBzdGRvdXQpCi0JCQkJbGVnYWN5X3NlcmlhbF9jb25zb2xlID0gaW5kZXg7CisJCQlpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpIHsKKwkJCQlpbmRleCA9IGFkZF9sZWdhY3lfc29jX3BvcnQobnAsIG5wKTsKKwkJCQlpZiAoaW5kZXggPj0gMCAmJiBucCA9PSBzdGRvdXQpCisJCQkJCWxlZ2FjeV9zZXJpYWxfY29uc29sZSA9IGluZGV4OworCQkJfQogCQl9CiAJCW9mX25vZGVfcHV0KHBhcmVudCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCAxNjQ2ODM2Li4zMDFkYjY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJc2VxX3ByaW50ZihtLCAic3lzdGVtX2FjdGl2ZV9wcm9jZXNzb3JzPSVkXG4iLAogCSAgICAgICAgICAgcHBwX2RhdGEuYWN0aXZlX3N5c3RlbV9wcm9jcyk7CiAKLQkvKiBwb29sIHJlbGF0ZWQgZW50cmllcyBhcmUgYXByb3ByaWF0ZSBmb3Igc2hhcmVkIGNvbmZpZ3MgKi8KKwkvKiBwb29sIHJlbGF0ZWQgZW50cmllcyBhcmUgYXBwcm9wcmlhdGUgZm9yIHNoYXJlZCBjb25maWdzICovCiAJaWYgKGxwcGFjYV9vZigwKS5zaGFyZWRfcHJvYykgewogCQl1bnNpZ25lZCBsb25nIHBvb2xfaWRsZV90aW1lLCBwb29sX3Byb2NzOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCmluZGV4IGY0YWRmODkuLjEwZjBhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIHsKIAlpbnQgbmV3X3NpemU7CiAKLQluZXdfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBwYWNhX3N0cnVjdCkgKiBudW1fcG9zc2libGVfY3B1cygpKTsKKwluZXdfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBwYWNhX3N0cnVjdCkgKiBucl9jcHVfaWRzKTsKIAogCWlmIChuZXdfc2l6ZSA+PSBwYWNhX3NpemUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggOTdlMGFlNC4uODIyZjYzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTM5OCw2ICszOTgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBjaGVja19hbmRfY29tcHV0ZV9kZWx0YSh1NjQgcHJldiwgdTY0IHZhbCkKK3sKKwl1NjQgZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7CisKKwkvKgorCSAqIFBPV0VSNyBjYW4gcm9sbCBiYWNrIGNvdW50ZXIgdmFsdWVzLCBpZiB0aGUgbmV3IHZhbHVlIGlzIHNtYWxsZXIKKwkgKiB0aGFuIHRoZSBwcmV2aW91cyB2YWx1ZSBpdCB3aWxsIGNhdXNlIHRoZSBkZWx0YSBhbmQgdGhlIGNvdW50ZXIgdG8KKwkgKiBoYXZlIGJvZ3VzIHZhbHVlcyB1bmxlc3Mgd2Ugcm9sbGVkIGEgY291bnRlciBvdmVyLiAgSWYgYSBjb3V0bmVyIGlzCisJICogcm9sbGVkIGJhY2ssIGl0IHdpbGwgYmUgc21hbGxlciwgYnV0IHdpdGhpbiAyNTYsIHdoaWNoIGlzIHRoZSBtYXhpbXVtCisJICogbnVtYmVyIG9mIGV2ZW50cyB0byByb2xsYmFjayBhdCBvbmNlLiAgSWYgd2UgZGVjdGVjdCBhIHJvbGxiYWNrCisJICogcmV0dXJuIDAuICBUaGlzIGNhbiBsZWFkIHRvIGEgc21hbGwgbGFjayBvZiBwcmVjaXNpb24gaW4gdGhlCisJICogY291bnRlcnMuCisJICovCisJaWYgKHByZXYgPiB2YWwgJiYgKHByZXYgLSB2YWwpIDwgMjU2KQorCQlkZWx0YSA9IDA7CisKKwlyZXR1cm4gZGVsdGE7Cit9CisKIHN0YXRpYyB2b2lkIHBvd2VyX3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzNjQgdmFsLCBkZWx0YSwgcHJldjsKQEAgLTQxNiwxMCArNDM1LDExIEBACiAJCXByZXYgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKIAkJYmFycmllcigpOwogCQl2YWwgPSByZWFkX3BtYyhldmVudC0+aHcuaWR4KTsKKwkJZGVsdGEgPSBjaGVja19hbmRfY29tcHV0ZV9kZWx0YShwcmV2LCB2YWwpOworCQlpZiAoIWRlbHRhKQorCQkJcmV0dXJuOwogCX0gd2hpbGUgKGxvY2FsNjRfY21weGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIHByZXYsIHZhbCkgIT0gcHJldik7CiAKLQkvKiBUaGUgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cyB3aWRlICovCi0JZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7CiAJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCWxvY2FsNjRfc3ViKGRlbHRhLCAmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKIH0KQEAgLTQ0OSw4ICs0NjksOSBAQAogCQl2YWwgPSAoZXZlbnQtPmh3LmlkeCA9PSA1KSA/IHBtYzUgOiBwbWM2OwogCQlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAJCWV2ZW50LT5ody5pZHggPSAwOwotCQlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKLQkJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCQlkZWx0YSA9IGNoZWNrX2FuZF9jb21wdXRlX2RlbHRhKHByZXYsIHZhbCk7CisJCWlmIChkZWx0YSkKKwkJCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKIAl9CiB9CiAKQEAgLTQ1OCwxNCArNDc5LDE2IEBACiAJCQkJICB1bnNpZ25lZCBsb25nIHBtYzUsIHVuc2lnbmVkIGxvbmcgcG1jNikKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0JdTY0IHZhbDsKKwl1NjQgdmFsLCBwcmV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2xpbWl0ZWQ7ICsraSkgewogCQlldmVudCA9IGNwdWh3LT5saW1pdGVkX2NvdW50ZXJbaV07CiAJCWV2ZW50LT5ody5pZHggPSBjcHVody0+bGltaXRlZF9od2lkeFtpXTsKIAkJdmFsID0gKGV2ZW50LT5ody5pZHggPT0gNSkgPyBwbWM1IDogcG1jNjsKLQkJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCQlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJCWlmIChjaGVja19hbmRfY29tcHV0ZV9kZWx0YShwcmV2LCB2YWwpKQorCQkJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOwogCQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAJfQogfQpAQCAtNzU5LDcgKzc4Miw3IEBACiAKIAkvKgogCSAqIElmIGdyb3VwIGV2ZW50cyBzY2hlZHVsaW5nIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLAotCSAqIHNraXAgdGhlIHNjaGVkdWxhYmlsaXR5IHRlc3QgaGVyZSwgaXQgd2lsbCBiZSBwZWZvcm1lZAorCSAqIHNraXAgdGhlIHNjaGVkdWxhYmlsaXR5IHRlc3QgaGVyZSwgaXQgd2lsbCBiZSBwZXJmb3JtZWQKIAkgKiBhdCBjb21taXQgdGltZSgtPmNvbW1pdF90eG4pIGFzIGEgd2hvbGUKIAkgKi8KIAlpZiAoY3B1aHctPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTikKQEAgLTExOTcsNyArMTIyMCw3IEBACiAKIAkvKiB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGludGVycnVwdHMgaGVyZSAqLwogCXByZXYgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKLQlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKKwlkZWx0YSA9IGNoZWNrX2FuZF9jb21wdXRlX2RlbHRhKHByZXYsIHZhbCk7CiAJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX3NhdmVfcmVncy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfc2F2ZV9yZWdzLlMKaW5kZXggZTgzYmEzZi4uMWIxNzg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfc2F2ZV9yZWdzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfc2F2ZV9yZWdzLlMKQEAgLTE1LDcgKzE1LDcgQEAKIAogLyoKICAqIEdyYWIgdGhlIHJlZ2lzdGVyIHZhbHVlcyBhcyB0aGV5IGFyZSBub3cuCi0gKiBUaGlzIHdvbid0IGRvIGEgcGFydGljdWxhcmlseSBnb29kIGpvYiBiZWNhdXNlIHdlIHJlYWxseQorICogVGhpcyB3b24ndCBkbyBhIHBhcnRpY3VsYXJseSBnb29kIGpvYiBiZWNhdXNlIHdlIHJlYWxseQogICogd2FudCBvdXIgY2FsbGVyJ3MgY2FsbGVyJ3MgcmVnaXN0ZXJzLCBhbmQgb3VyIGNhbGxlciBoYXMKICAqIGFscmVhZHkgZXhlY3V0ZWQgaXRzIHByb2xvZ3VlLgogICogVG9EbzogV2UgY291bGQgcmVhY2ggYmFjayBpbnRvIHRoZSBjYWxsZXIncyBzYXZlIGFyZWEgdG8gZG8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggMDViNzEzOS4uZTc0ZmExMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTY4Myw3ICs2ODMsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUEhZUF9EVU1QCi0JLyogc2NhbiB0cmVlIHRvIHNlZSBpZiBkdW1wIG9jY3VyZWQgZHVyaW5nIGxhc3QgYm9vdCAqLworCS8qIHNjYW4gdHJlZSB0byBzZWUgaWYgZHVtcCBvY2N1cnJlZCBkdXJpbmcgbGFzdCBib290ICovCiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9waHlwX2R1bXAsIE5VTEwpOwogI2VuZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQAogCiAJREJHKCJTY2FubmluZyBDUFVzIC4uLlxuIik7CiAKLQkvKiBSZXRyZWl2ZSBDUFUgcmVsYXRlZCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgZmxhdCB0cmVlCisJLyogUmV0cmlldmUgQ1BVIHJlbGF0ZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIGZsYXQgdHJlZQogCSAqIChhbHRpdmVjIHN1cHBvcnQsIGJvb3QgQ1BVIElELCAuLi4pCiAJICovCiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9jcHVzLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IDg5NWIwODIuLmE2YWUxY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAjaWZkZWYgQ09ORklHX1ZTWAogLyoKICAqIEN1cnJlbnRseSB0byBzZXQgYW5kIGFuZCBnZXQgYWxsIHRoZSB2c3ggc3RhdGUsIHlvdSBuZWVkIHRvIGNhbGwKLSAqIHRoZSBmcCBhbmQgVk1YIGNhbGxzIGFzd2VsbC4gIFRoaXMgb25seSBnZXQvc2V0cyB0aGUgbG93ZXIgMzIKKyAqIHRoZSBmcCBhbmQgVk1YIGNhbGxzIGFzIHdlbGwuICBUaGlzIG9ubHkgZ2V0L3NldHMgdGhlIGxvd2VyIDMyCiAgKiAxMjhiaXQgVlNYIHJlZ2lzdGVycy4KICAqLwogCkBAIC05MzMsMTIgKzkzMywxNiBAQAogCWlmIChkYXRhICYmICEoZGF0YSAmIERBQlJfVFJBTlNMQVRJT04pKQogCQlyZXR1cm4gLUVJTzsKICNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisJaWYgKHB0cmFjZV9nZXRfYnJlYWtwb2ludHModGFzaykgPCAwKQorCQlyZXR1cm4gLUVTUkNIOworCiAJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbMF07CiAJaWYgKCghZGF0YSkgfHwgIShkYXRhICYgKERBQlJfREFUQV9XUklURSB8IERBQlJfREFUQV9SRUFEKSkpIHsKIAkJaWYgKGJwKSB7CiAJCQl1bnJlZ2lzdGVyX2h3X2JyZWFrcG9pbnQoYnApOwogCQkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gTlVMTDsKIAkJfQorCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRhc2spOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGJwKSB7CkBAIC05NDgsOSArOTUyLDEyIEBACiAJCQkJCShEQUJSX0RBVEFfV1JJVEUgfCBEQUJSX0RBVEFfUkVBRCksCiAJCQkJCQkJJmF0dHIuYnBfdHlwZSk7CiAJCXJldCA9ICBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKKwkJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModGFzayk7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAJCXRocmVhZC0+cHRyYWNlX2Jwc1swXSA9IGJwOworCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRhc2spOwogCQl0aHJlYWQtPmRhYnIgPSBkYXRhOwogCQlyZXR1cm4gMDsKIAl9CkBAIC05NjUsOSArOTcyLDEyIEBACiAJCQkJCQkJcHRyYWNlX3RyaWdnZXJlZCwgdGFzayk7CiAJaWYgKElTX0VSUihicCkpIHsKIAkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gTlVMTDsKKwkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0YXNrKTsKIAkJcmV0dXJuIFBUUl9FUlIoYnApOwogCX0KIAorCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModGFzayk7CisKICNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCiAKIAkvKiBNb3ZlIGNvbnRlbnRzIHRvIHRoZSBEQUJSIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMKaW5kZXggNzk4MGVjMC4uNjdmNmMzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc2QuYwpAQCAtNDY1LDcgKzQ2NSw3IEBACiAJcHJfZGVidWcoInJ0YXNkOiB3aWxsIHNsZWVwIGZvciAlZCBtaWxsaXNlY29uZHNcbiIsCiAJCSAoMzAwMDAgLyBydGFzX2V2ZW50X3NjYW5fcmF0ZSkpOwogCi0JLyogUmV0cmVpdmUgZXJyb3JzIGZyb20gbnZyYW0gaWYgYW55ICovCisJLyogUmV0cmlldmUgZXJyb3JzIGZyb20gbnZyYW0gaWYgYW55ICovCiAJcmV0cmVpdmVfbnZyYW1fZXJyb3JfbG9nKCk7CiAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggOWQ0ODgyYS4uMjFmMzBjYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC01MDksNiArNTA5LDkgQEAKIAkgKi8KIAljcHVfaW5pdF90aHJlYWRfY29yZV9tYXBzKG50aHJlYWRzKTsKIAorCS8qIE5vdyB0aGF0IHBvc3NpYmxlIGNwdXMgYXJlIHNldCwgc2V0IG5yX2NwdV9pZHMgZm9yIGxhdGVyIHVzZSAqLworCW5yX2NwdV9pZHMgPSBmaW5kX2xhc3RfYml0KGNwdW1hc2tfYml0cyhjcHVfcG9zc2libGVfbWFzayksTlJfQ1BVUykgKyAxOworCiAJZnJlZV91bnVzZWRfcGFjYXMoKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zd3N1c3BfMzIuUwppbmRleCBiMDc1NGUyLi5iYTRkZWUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwXzMyLlMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAJLyogRGlzYWJsZSBNU1I6RFIgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHRha2UgYSBUTEIgb3IKIAkgKiBoYXNoIG1pc3MgZHVyaW5nIHRoZSBjb3B5LCBhcyBvdXIgaGFzaCB0YWJsZSB3aWxsCi0JICogZm9yIGEgd2hpbGUgYmUgdW51c2VhYmxlLiBGb3IgLnRleHQsIHdlIGFzc3VtZSB3ZSBhcmUKKwkgKiBmb3IgYSB3aGlsZSBiZSB1bnVzYWJsZS4gRm9yIC50ZXh0LCB3ZSBhc3N1bWUgd2UgYXJlCiAJICogY292ZXJlZCBieSBhIEJBVC4gVGhpcyB3b3JrcyBvbmx5IGZvciBub24tRzUgYXQgdGhpcwogCSAqIHBvaW50LiBHNSB3aWxsIG5lZWQgYSBiZXR0ZXIgYXBwcm9hY2gsIHBvc3NpYmx5IHVzaW5nCiAJICogYSBzbWFsbCB0ZW1wb3JhcnkgaGFzaCB0YWJsZSBmaWxsZWQgd2l0aCBsYXJnZSBtYXBwaW5ncywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggMzc1NDgwYy4uZjMzYWNmZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTIyOSw2ICsyMjksOSBAQAogCXU2NCBzdG9sZW4gPSAwOwogCXU2NCBkdGI7CiAKKwlpZiAoIWR0bCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoaSA9PSB2cGEtPmR0bF9pZHgpCiAJCXJldHVybiAwOwogCXdoaWxlIChpIDwgdnBhLT5kdGxfaWR4KSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggYmQ3NGZhYy4uNWRkYjgwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJICogRVNSX0RTVCAoIT8pIG9yIDAuICBJbiB0aGUgcHJvY2VzcyBvZiBjaGFzaW5nIHRoaXMgd2l0aCB0aGUKIAkgKiBoYXJkd2FyZSBwZW9wbGUgLSBub3Qgc3VyZSBpZiBpdCBjYW4gaGFwcGVuIG9uIGFueSBpbGxlZ2FsCiAJICogaW5zdHJ1Y3Rpb24gb3Igb25seSBvbiBGUCBpbnN0cnVjdGlvbnMsIHdoZXRoZXIgdGhlcmUgaXMgYQotCSAqIHBhdHRlcm4gdG8gb2NjdXJlbmNlcyBldGMuIC1kZ2lic29uIDMxL01hci8yMDAzICovCisJICogcGF0dGVybiB0byBvY2N1cnJlbmNlcyBldGMuIC1kZ2lic29uIDMxL01hci8yMDAzICovCiAJc3dpdGNoIChkb19tYXRoZW11KHJlZ3MpKSB7CiAJY2FzZSAwOgogCQllbXVsYXRlX3NpbmdsZV9zdGVwKHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwppbmRleCBiNGIxNjdiLi5iYWEzM2E3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiB1ZGJnIGZvciBOUzE2NTUwIGNvbXBhdGFibGUgc2VyaWFsIHBvcnRzCisgKiB1ZGJnIGZvciBOUzE2NTUwIGNvbXBhdGlibGUgc2VyaWFsIHBvcnRzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgUFBDIDY0IFRlYW0sIElCTSBDb3JwCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKaW5kZXggNjhkNDlkZC4uY2YwYzljOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qIFRoZSBub3AgaGVyZSBpcyBhIGhhY2suICBUaGUgZHdhcmYyIHVud2luZCByb3V0aW5lcyBzdWJ0cmFjdCAxIGZyb20KICAgIHRoZSByZXR1cm4gYWRkcmVzcyB0byBnZXQgYW4gYWRkcmVzcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcmVzdW1lZAotICAgY2FsbCBpbnN0cnVjdGlvbi4gIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBjYWxsIGhlcmUsIHdlIGFydGlmaWNhbGx5CisgICBjYWxsIGluc3RydWN0aW9uLiAgU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGNhbGwgaGVyZSwgd2UgYXJ0aWZpY2lhbGx5CiAgICBleHRlbmQgdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlIHVud2luZCBpbmZvIGJ5IGFkZGluZyBhIG5vcCBiZWZvcmUKICAgIHRoZSByZWFsIHN0YXJ0LiAgKi8KIAlub3AKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCmluZGV4IDU5ZWI1OWIuLjQ1ZWEyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUwpAQCAtMjAsNyArMjAsNyBAQAogCiAvKiBUaGUgbm9wIGhlcmUgaXMgYSBoYWNrLiAgVGhlIGR3YXJmMiB1bndpbmQgcm91dGluZXMgc3VidHJhY3QgMSBmcm9tCiAgICB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gZ2V0IGFuIGFkZHJlc3MgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcHJlc3VtZWQKLSAgIGNhbGwgaW5zdHJ1Y3Rpb24uICBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgY2FsbCBoZXJlLCB3ZSBhcnRpZmljYWxseQorICAgY2FsbCBpbnN0cnVjdGlvbi4gIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBjYWxsIGhlcmUsIHdlIGFydGlmaWNpYWxseQogICAgZXh0ZW5kIHRoZSByYW5nZSBjb3ZlcmVkIGJ5IHRoZSB1bndpbmQgaW5mbyBieSBwYWRkaW5nIGJlZm9yZSB0aGUKICAgIHJlYWwgc3RhcnQuICAqLwogCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUwppbmRleCAzMDc5ZjZiLi41YjdkZDRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUwpAQCAtMTkyLDggKzE5Miw4IEBACiAJcmxkaWNyCXIzLHIwLDMsNjMtMwkJLyogcjMgPSAoaGFzaCAmIG1hc2spIDw8IDMgKi8KIAogCS8qIENhbGwgcHBjX21kLmhwdGVfaW5zZXJ0ICovCi0JbGQJcjYsU1RLX1BBUk0ocjQpKHIxKQkvKiBSZXRyZWl2ZSBuZXcgcHAgYml0cyAqLwotCW1yCXI0LHIyOQkJCS8qIFJldHJlaXZlIHZhICovCisJbGQJcjYsU1RLX1BBUk0ocjQpKHIxKQkvKiBSZXRyaWV2ZSBuZXcgcHAgYml0cyAqLworCW1yCXI0LHIyOQkJCS8qIFJldHJpZXZlIHZhICovCiAJbGkJcjcsMAkJCS8qICFib2x0ZWQsICFzZWNvbmRhcnkgKi8KIAlsaQlyOCxNTVVfUEFHRV80SwkJLyogcGFnZSBzaXplICovCiAJbGQJcjksU1RLX1BBUk0ocjkpKHIxKQkvKiBzZWdtZW50IHNpemUgKi8KQEAgLTIxNSw4ICsyMTUsOCBAQAogCXJsZGljcglyMyxyMCwzLDYzLTMJLyogcjAgPSAofmhhc2ggJiBtYXNrKSA8PCAzICovCiAJCiAJLyogQ2FsbCBwcGNfbWQuaHB0ZV9pbnNlcnQgKi8KLQlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJlaXZlIG5ldyBwcCBiaXRzICovCi0JbXIJcjQscjI5CQkJLyogUmV0cmVpdmUgdmEgKi8KKwlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJpZXZlIG5ldyBwcCBiaXRzICovCisJbXIJcjQscjI5CQkJLyogUmV0cmlldmUgdmEgKi8KIAlsaQlyNyxIUFRFX1ZfU0VDT05EQVJZCS8qICFib2x0ZWQsIHNlY29uZGFyeSAqLwogCWxpCXI4LE1NVV9QQUdFXzRLCQkvKiBwYWdlIHNpemUgKi8KIAlsZAlyOSxTVEtfUEFSTShyOSkocjEpCS8qIHNlZ21lbnQgc2l6ZSAqLwpAQCAtNDk1LDggKzQ5NSw4IEBACiAJcmxkaWNyCXIzLHIwLDMsNjMtMwkJLyogcjAgPSAoaGFzaCAmIG1hc2spIDw8IDMgKi8KIAogCS8qIENhbGwgcHBjX21kLmhwdGVfaW5zZXJ0ICovCi0JbGQJcjYsU1RLX1BBUk0ocjQpKHIxKQkvKiBSZXRyZWl2ZSBuZXcgcHAgYml0cyAqLwotCW1yCXI0LHIyOQkJCS8qIFJldHJlaXZlIHZhICovCisJbGQJcjYsU1RLX1BBUk0ocjQpKHIxKQkvKiBSZXRyaWV2ZSBuZXcgcHAgYml0cyAqLworCW1yCXI0LHIyOQkJCS8qIFJldHJpZXZlIHZhICovCiAJbGkJcjcsMAkJCS8qICFib2x0ZWQsICFzZWNvbmRhcnkgKi8KIAlsaQlyOCxNTVVfUEFHRV80SwkJLyogcGFnZSBzaXplICovCiAJbGQJcjksU1RLX1BBUk0ocjkpKHIxKQkvKiBzZWdtZW50IHNpemUgKi8KQEAgLTUyMiw4ICs1MjIsOCBAQAogCXJsZGljcglyMyxyMCwzLDYzLTMJCS8qIHIwID0gKH5oYXNoICYgbWFzaykgPDwgMyAqLwogCiAJLyogQ2FsbCBwcGNfbWQuaHB0ZV9pbnNlcnQgKi8KLQlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJlaXZlIG5ldyBwcCBiaXRzICovCi0JbXIJcjQscjI5CQkJLyogUmV0cmVpdmUgdmEgKi8KKwlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJpZXZlIG5ldyBwcCBiaXRzICovCisJbXIJcjQscjI5CQkJLyogUmV0cmlldmUgdmEgKi8KIAlsaQlyNyxIUFRFX1ZfU0VDT05EQVJZCS8qICFib2x0ZWQsIHNlY29uZGFyeSAqLwogCWxpCXI4LE1NVV9QQUdFXzRLCQkvKiBwYWdlIHNpemUgKi8KIAlsZAlyOSxTVEtfUEFSTShyOSkocjEpCS8qIHNlZ21lbnQgc2l6ZSAqLwpAQCAtODEzLDggKzgxMyw4IEBACiAJcmxkaWNyCXIzLHIwLDMsNjMtMwkvKiByMCA9IChoYXNoICYgbWFzaykgPDwgMyAqLwogCiAJLyogQ2FsbCBwcGNfbWQuaHB0ZV9pbnNlcnQgKi8KLQlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJlaXZlIG5ldyBwcCBiaXRzICovCi0JbXIJcjQscjI5CQkJLyogUmV0cmVpdmUgdmEgKi8KKwlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJpZXZlIG5ldyBwcCBiaXRzICovCisJbXIJcjQscjI5CQkJLyogUmV0cmlldmUgdmEgKi8KIAlsaQlyNywwCQkJLyogIWJvbHRlZCwgIXNlY29uZGFyeSAqLwogCWxpCXI4LE1NVV9QQUdFXzY0SwogCWxkCXI5LFNUS19QQVJNKHI5KShyMSkJLyogc2VnbWVudCBzaXplICovCkBAIC04MzYsOCArODM2LDggQEAKIAlybGRpY3IJcjMscjAsMyw2My0zCS8qIHIwID0gKH5oYXNoICYgbWFzaykgPDwgMyAqLwogCiAJLyogQ2FsbCBwcGNfbWQuaHB0ZV9pbnNlcnQgKi8KLQlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJlaXZlIG5ldyBwcCBiaXRzICovCi0JbXIJcjQscjI5CQkJLyogUmV0cmVpdmUgdmEgKi8KKwlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJpZXZlIG5ldyBwcCBiaXRzICovCisJbXIJcjQscjI5CQkJLyogUmV0cmlldmUgdmEgKi8KIAlsaQlyNyxIUFRFX1ZfU0VDT05EQVJZCS8qICFib2x0ZWQsIHNlY29uZGFyeSAqLwogCWxpCXI4LE1NVV9QQUdFXzY0SwogCWxkCXI5LFNUS19QQVJNKHI5KShyMSkJLyogc2VnbWVudCBzaXplICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCBhNTk5MWZhLi41OGEwMjJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTc1Myw3ICs3NTMsNyBAQAogCQltdHNwcihTUFJOX1NEUjEsIF9TRFIxKTsKIAogCS8qIEluaXRpYWxpemUgU1RBQi9TTEIuIFdlIHVzZSBhIHZpcnR1YWwgYWRkcmVzcyBhcyBpdCB3b3JrcwotCSAqIGluIHJlYWwgbW9kZSBvbiBwU2VyaWVzIGFuZCB3ZSB3YW50IGEgdmlydXRhbCBhZGRyZXNzIG9uCisJICogaW4gcmVhbCBtb2RlIG9uIHBTZXJpZXMgYW5kIHdlIHdhbnQgYSB2aXJ0dWFsIGFkZHJlc3Mgb24KIAkgKiBpU2VyaWVzIGFueXdheQogCSAqLwogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IGE2NjQ5OTYuLjU3ZTU0NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCWNsZWFyX3BhZ2UocGFnZSk7CiAKIAkvKgotCSAqIFdlIHNob3VsZG50IGhhdmUgdG8gZG8gdGhpcywgYnV0IHNvbWUgdmVyc2lvbnMgb2YgZ2xpYmMKKwkgKiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLCBidXQgc29tZSB2ZXJzaW9ucyBvZiBnbGliYwogCSAqIHJlcXVpcmUgaXQgKGxkLnNvIGFzc3VtZXMgemVybyBmaWxsZWQgcGFnZXMgYXJlIGljYWNoZSBjbGVhbikKIAkgKiAtIEFudG9uCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCAwZGM5NWMwLi41ZWMxZGFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTQ0MCwxMSArNDQwLDExIEBACiB9CiAKIC8qCi0gKiBSZXRyZWl2ZSBhbmQgdmFsaWRhdGUgdGhlIGlibSxkeW5hbWljLW1lbW9yeSBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlIHRyZWUuCisgKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIGlibSxkeW5hbWljLW1lbW9yeSBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlIHRyZWUuCiAgKgogICogVGhlIGxheW91dCBvZiB0aGUgaWJtLGR5bmFtaWMtbWVtb3J5IHByb3BlcnR5IGlzIGEgbnVtYmVyIE4gb2YgbWVtYmxvY2sKICAqIGxpc3QgZW50cmllcyBmb2xsb3dlZCBieSBOIG1lbWJsb2NrIGxpc3QgZW50cmllcy4gIEVhY2ggbWVtYmxvY2sgbGlzdCBlbnRyeQotICogY29udGFpbnMgaW5mb3JtYXRpb24gYXMgbGF5ZWQgb3V0IGluIHRoZSBvZl9kcmNvbmZfY2VsbCBzdHJ1Y3QgYWJvdmUuCisgKiBjb250YWlucyBpbmZvcm1hdGlvbiBhcyBsYWlkIG91dCBpbiB0aGUgb2ZfZHJjb25mX2NlbGwgc3RydWN0IGFib3ZlLgogICovCiBzdGF0aWMgaW50IG9mX2dldF9kcmNvbmZfbWVtb3J5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5LCBjb25zdCB1MzIgKipkbSkKIHsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogfQogCiAvKgotICogUmV0cmVpdmUgYW5kIHZhbGlkYXRlIHRoZSBpYm0sbG1iLXNpemUgcHJvcGVydHkgZm9yIGRyY29uZiBtZW1vcnkKKyAqIFJldHJpZXZlIGFuZCB2YWxpZGF0ZSB0aGUgaWJtLGxtYi1zaXplIHByb3BlcnR5IGZvciBkcmNvbmYgbWVtb3J5CiAgKiBmcm9tIHRoZSBkZXZpY2UgdHJlZS4KICAqLwogc3RhdGljIHU2NCBvZl9nZXRfbG1iX3NpemUoc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkpCkBAIC00OTAsNyArNDkwLDcgQEAKIH07CiAKIC8qCi0gKiBSZXRyZWl2ZSBhbmQgdmFsaWRhdGUgdGhlIGxpc3Qgb2YgYXNzb2NpYXRpdml0eSBhcnJheXMgZm9yIGRyY29uZgorICogUmV0cmlldmUgYW5kIHZhbGlkYXRlIHRoZSBsaXN0IG9mIGFzc29jaWF0aXZpdHkgYXJyYXlzIGZvciBkcmNvbmYKICAqIG1lbW9yeSBmcm9tIHRoZSBpYm0sYXNzb2NpYXRpdml0eS1sb29rdXAtYXJyYXlzIHByb3BlcnR5IG9mIHRoZQogICogZGV2aWNlIHRyZWUuLgogICoKQEAgLTYwNCw3ICs2MDQsNyBAQAogICogUmV0dXJucyB0aGUgc2l6ZSB0aGUgcmVnaW9uIHNob3VsZCBoYXZlIHRvIGVuZm9yY2UgdGhlIG1lbW9yeSBsaW1pdC4KICAqIFRoaXMgd2lsbCBlaXRoZXIgYmUgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHNpemUsIGEgdHJ1bmNhdGVkIHZhbHVlLAogICogb3IgemVyby4gSWYgdGhlIHJldHVybmVkIHZhbHVlIG9mIHNpemUgaXMgMCB0aGUgcmVnaW9uIHNob3VsZCBiZQotICogZGlzY2FyZGVkIGFzIGl0IGxpZXMgd2hvbHkgYWJvdmUgdGhlIG1lbW9yeSBsaW1pdC4KKyAqIGRpc2NhcmRlZCBhcyBpdCBsaWVzIHdob2xseSBhYm92ZSB0aGUgbWVtb3J5IGxpbWl0LgogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwppbmRleCA4NTI2YmQ5Li5hZjA4OTIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJb3IJcjEwLHIxNSxyMTQKIAogQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCi0JLyogU2V0IHRoZSBUTEIgcmVzZXJ2YXRpb24gYW5kIHNlYWNoIGZvciBleGlzdGluZyBlbnRyeS4gVGhlbiBsb2FkCisJLyogU2V0IHRoZSBUTEIgcmVzZXJ2YXRpb24gYW5kIHNlYXJjaCBmb3IgZXhpc3RpbmcgZW50cnkuIFRoZW4gbG9hZAogCSAqIHRoZSBlbnRyeS4KIAkgKi8KIAlQUENfVExCU1JYX0RPVCgwLHIxNikKQEAgLTQyNSwxMyArNDI1LDEzIEBACiAKIHZpcnRfcGFnZV90YWJsZV90bGJfbWlzc19mYXVsdDoKIAkvKiBJZiB3ZSBmYXVsdCBoZXJlLCB0aGluZ3MgYXJlIGEgbGl0dGxlIGJpdCB0cmlja3kuIFdlIG5lZWQgdG8gY2FsbAotCSAqIGVpdGhlciBkYXRhIG9yIGluc3RydWN0aW9uIHN0b3JlIGZhdWx0LCBhbmQgd2UgbmVlZCB0byByZXRyZWl2ZQorCSAqIGVpdGhlciBkYXRhIG9yIGluc3RydWN0aW9uIHN0b3JlIGZhdWx0LCBhbmQgd2UgbmVlZCB0byByZXRyaWV2ZQogCSAqIHRoZSBvcmlnaW5hbCBmYXVsdCBhZGRyZXNzIGFuZCBFU1IgKGZvciBkYXRhKS4KIAkgKgogCSAqIFRoZSB0aGluZyBpcywgd2Uga25vdyB0aGF0IGluIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCB0aGlzIGlzCiAJICogYWx3YXlzIGNhbGxlZCBhcyBhIHNlY29uZCBsZXZlbCB0bGIgbWlzcyBmb3IgU1cgbG9hZCBvciBhcyBhIGZpcnN0CiAJICogbGV2ZWwgVExCIG1pc3MgZm9yIEhXIGxvYWQsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHBlZWsgYXQgdGhlCi0JICogcmVsZXZhbnQgaW5mb3JtYXRpb25zIGluIHRoZSBmaXJzdCBleGNlcHRpb24gZnJhbWUgaW4gdGhlIFBBQ0EuCisJICogcmVsZXZhbnQgaW5mb3JtYXRpb24gaW4gdGhlIGZpcnN0IGV4Y2VwdGlvbiBmcmFtZSBpbiB0aGUgUEFDQS4KIAkgKgogCSAqIEhvd2V2ZXIsIHdlIGRvIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQsIGJlY2F1c2Ugd2UgbWF5IGp1c3QgaGl0CiAJICogYSBzdHJheSBrZXJuZWwgcG9pbnRlciBvciBhIHVzZXJsYW5kIGF0dGFjayB0cnlpbmcgdG8gaGl0IHRob3NlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYwppbmRleCBjNGQyYjcxLi5jYjUxNWNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogI2RlZmluZSBNQVhfU1BVX0NPVU5UIDB4RkZGRkZGCS8qIG1heGltdW0gMjQgYml0IExGU1IgdmFsdWUgKi8KIAotLyogTWludW11bSBIVyBpbnRlcnZhbCB0aW1lciBzZXR0aW5nIHRvIHNlbmQgdmFsdWUgdG8gdHJhY2UgYnVmZmVyIGlzIDEwIGN5Y2xlLgorLyogTWluaW11bSBIVyBpbnRlcnZhbCB0aW1lciBzZXR0aW5nIHRvIHNlbmQgdmFsdWUgdG8gdHJhY2UgYnVmZmVyIGlzIDEwIGN5Y2xlLgogICogVG8gY29uZmlndXJlIGNvdW50ZXIgdG8gc2VuZCB2YWx1ZSBldmVyeSBOIGN5Y2xlcyBzZXQgY291bnRlciB0bwogICogMl4zMiAtIDEgLSBOLgogICovCkBAIC0xNDcwLDcgKzE0NzAsNyBAQAogICogdHJhY2UgYnVmZmVyIGF0IHRoZSBtYXhpbXVtIHJhdGUgcG9zc2libGUuICBUaGUgdHJhY2UgYnVmZmVyIGlzIGNvbmZpZ3VyZWQKICAqIHRvIHN0b3JlIHRoZSBQQ3MsIHdyYXBwaW5nIHdoZW4gaXQgaXMgZnVsbC4gIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGlzCiAgKiBpbml0aWFsaXplZCB0byB0aGUgbWF4IGhhcmR3YXJlIGNvdW50IG1pbnVzIHRoZSBudW1iZXIgb2YgZXZlbnRzLCBOLCBiZXR3ZWVuCi0gKiBzYW1wbGVzLiAgT25jZSB0aGUgTiBldmVudHMgaGF2ZSBvY2N1cmVkLCBhIEhXIGNvdW50ZXIgb3ZlcmZsb3cgb2NjdXJzCisgKiBzYW1wbGVzLiAgT25jZSB0aGUgTiBldmVudHMgaGF2ZSBvY2N1cnJlZCwgYSBIVyBjb3VudGVyIG92ZXJmbG93IG9jY3VycwogICogY2F1c2luZyB0aGUgZ2VuZXJhdGlvbiBvZiBhIEhXIGNvdW50ZXIgaW50ZXJydXB0IHdoaWNoIGFsc28gc3RvcHMgdGhlCiAgKiB3cml0aW5nIG9mIHRoZSBTUFUgUEMgdmFsdWVzIHRvIHRoZSB0cmFjZSBidWZmZXIuICBIZW5jZSB0aGUgbGFzdCBQQwogICogd3JpdHRlbiB0byB0aGUgdHJhY2UgYnVmZmVyIGlzIHRoZSBTUFUgUEMgdGhhdCB3ZSB3YW50LiAgVW5mb3J0dW5hdGVseSwKQEAgLTE2NTYsNyArMTY1Niw3IEBACiAJCSAqIFRoZSBjb3VudGVycyB3ZXJlIGZyb3plbiBieSB0aGUgaW50ZXJydXB0LgogCQkgKiBSZWVuYWJsZSB0aGUgaW50ZXJydXB0IGFuZCByZXN0YXJ0IHRoZSBjb3VudGVycy4KIAkJICogSWYgdGhlcmUgd2FzIGEgcmFjZSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQKLQkJICogdGhlIHZpcnR1YWwgY291bnRlciByb3V0aW5lLgkgVGhlIHZpcnV0YWwgY291bnRlcgorCQkgKiB0aGUgdmlydHVhbCBjb3VudGVyIHJvdXRpbmUuCSBUaGUgdmlydHVhbCBjb3VudGVyCiAJCSAqIHJvdXRpbmUgbWF5IGhhdmUgY2xlYXJlZCB0aGUgaW50ZXJydXB0cy4gIEhlbmNlIG11c3QKIAkJICogdXNlIHRoZSB2aXJ0X2NudHJfaW50ZXJfbWFzayB0byByZS1lbmFibGUgdGhlIGludGVycnVwdHMuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCmluZGV4IDgwNzc0MDkuLjhlZTUxYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXVuc2lnbmVkIGxvbmcgbW1jcmE7CiAJdW5zaWduZWQgbG9uZyBzbG90OwogCi0JLyogQ2FudCBkbyBtdWNoIGFib3V0IGl0ICovCisJLyogQ2FuJ3QgZG8gbXVjaCBhYm91dCBpdCAqLwogCWlmICghY3VyX2NwdV9zcGVjLT5vcHJvZmlsZV9tbWNyYV9zaWh2KQogCQlyZXR1cm4gcGM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2xwYmZpZm8uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2xwYmZpZm8uYwppbmRleCA2Mzg1ZDg4Li45OTQwY2U4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9scGJmaWZvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfbHBiZmlmby5jCkBAIC01Nyw3ICs1Nyw3IEBACiBzdGF0aWMgc3RydWN0IG1wYzUyeHhfbHBiZmlmbyBscGJmaWZvOwogCiAvKioKLSAqIG1wYzUyeHhfbHBiZmlmb19raWNrIC0gVHJpZ2dlciB0aGUgbmV4dCBibG9jayBvZiBkYXRhIHRvIGJlIHRyYW5zZmVyZWQKKyAqIG1wYzUyeHhfbHBiZmlmb19raWNrIC0gVHJpZ2dlciB0aGUgbmV4dCBibG9jayBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkCiAgKi8KIHN0YXRpYyB2b2lkIG1wYzUyeHhfbHBiZmlmb19raWNrKHN0cnVjdCBtcGM1Mnh4X2xwYmZpZm9fcmVxdWVzdCAqcmVxKQogewpAQCAtMTc5LDcgKzE3OSw3IEBACiAgKgogICogT24gdHJhbnNtaXQsIHRoZSBkbWEgY29tcGxldGlvbiBpcnEgdHJpZ2dlcnMgYmVmb3JlIHRoZSBmaWZvIGNvbXBsZXRpb24KICAqIHRyaWdnZXJzLiAgSGFuZGxlIHRoZSBkbWEgY29tcGxldGlvbiBoZXJlIGluc3RlYWQgb2YgdGhlIExQQiBGSUZPIEJlc3Rjb21tCi0gKiB0YXNrIGNvbXBsZXRpb24gaXJxIGJlY3Vhc2UgZXZlcnl0aW5nIGlzIG5vdCByZWFsbHkgZG9uZSB1bnRpbCB0aGUgTFBCIEZJRk8KKyAqIHRhc2sgY29tcGxldGlvbiBpcnEgYmVjYXVzZSBldmVyeXRoaW5nIGlzIG5vdCByZWFsbHkgZG9uZSB1bnRpbCB0aGUgTFBCIEZJRk8KICAqIGNvbXBsZXRpb24gaXJxIHRyaWdnZXJzLgogICoKICAqIEluIG90aGVyIHdvcmRzOgpAQCAtMTk1LDcgKzE5NSw3IEBACiAgKiBFeGl0IGNvbmRpdGlvbnM6CiAgKiAxKSBUcmFuc2ZlciBhYm9ydGVkCiAgKiAyKSBGSUZPIGNvbXBsZXRlIHdpdGhvdXQgRE1BOyBtb3JlIGRhdGEgdG8gZG8KLSAqIDMpIEZJRk8gY29tcGxldGUgd2l0aG91dCBETUE7IGFsbCBkYXRhIHRyYW5zZmVyZWQKKyAqIDMpIEZJRk8gY29tcGxldGUgd2l0aG91dCBETUE7IGFsbCBkYXRhIHRyYW5zZmVycmVkCiAgKiA0KSBGSUZPIGNvbXBsZXRlIHVzaW5nIERNQQogICoKICAqIENvbmRpdGlvbiAxIGNhbiBvY2N1ciByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IERNQSBpcyB1c2VkLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwppbmRleCAzZGRlYTk2Li4xZGQxNTQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAvKioKICAqIG1wYzUyeHhfZ2V0X2lycSAtIEdldCBwZW5kaW5nIGludGVycnVwdCBudW1iZXIgaG9vayBmdW5jdGlvbgogICoKLSAqIENhbGxlZCBieSB0aGUgaW50ZXJ1cHQgaGFuZGxlciB0byBkZXRlcm1pbmUgd2hhdCBJUlEgaGFuZGxlciBuZWVkcyB0byBiZQorICogQ2FsbGVkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBkZXRlcm1pbmUgd2hhdCBJUlEgaGFuZGxlciBuZWVkcyB0byBiZQogICogZXhlY3V0ZWQuCiAgKgogICogU3RhdHVzIG9mIHBlbmRpbmcgaW50ZXJydXB0cyBpcyBkZXRlcm1pbmVkIGJ5IHJlYWRpbmcgdGhlIGVuY29kZWQgc3RhdHVzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKaW5kZXggMjA1NzY4Mi4uZjdiMDc3MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwpAQCAtNDYsNyArNDYsNyBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZnJvbSBib290aW5nIGZyb20gT3BlbiBGaXJtd2FyZSBvciB5YWJvb3QgdXNpbmcgYW4KIAkgIE9wZW4gRmlybXdhcmUgY2xpZW50IGludGVyZmFjZS4gVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8KLQkgIGNvbW11bmljYXRlIHdpdGggb3BlbiBmaXJtd2FyZSB0byByZXRyaWV2ZSBzeXN0ZW0gaW5mb3JtYXRpb25zCisJICBjb21tdW5pY2F0ZSB3aXRoIG9wZW4gZmlybXdhcmUgdG8gcmV0cmlldmUgc3lzdGVtIGluZm9ybWF0aW9uCiAJICBzdWNoIGFzIHRoZSBkZXZpY2UgdHJlZS4KIAogCSAgSW4gY2FzZSBvZiBkb3VidCwgc2F5IFkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9sc2NzYV9hbGxvYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2xzY3NhX2FsbG9jLmMKaW5kZXggM2I4OTRmNS4uMTQ3MDY5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2xzY3NhX2FsbG9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2xzY3NhX2FsbG9jLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU1BVX0xTQ1NBX05VTV9CSUdfUEFHRVM7IGkrKykgewogCQkvKiBYWFggVGhpcyBpcyBsaWtlbHkgdG8gZmFpbCwgd2Ugc2hvdWxkIHVzZSBhIHNwZWNpYWwgcG9vbAotCQkgKiAgICAgc2ltaWxpYXIgdG8gd2hhdCBodWdldGxiZnMgZG9lcy4KKwkJICogICAgIHNpbWlsYXIgdG8gd2hhdCBodWdldGxiZnMgZG9lcy4KIAkJICovCiAJCWNzYS0+bHNjc2FfcGFnZXNbaV0gPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLAogCQkJCQkJICBTUFVfNjRLX1BBR0VfT1JERVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCAwYjA0NjYyLi42NTIwMzg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtODQ2LDcgKzg0Niw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJxID0gJnNwdV9wcmlvLT5ydW5xW2Jlc3RdOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCBycSwgcnEpIHsKLQkJCS8qIFhYWChoY2gpOiBjaGVjayBmb3IgYWZmaW5pdHkgaGVyZSBhc3dlbGwgKi8KKwkJCS8qIFhYWChoY2gpOiBjaGVjayBmb3IgYWZmaW5pdHkgaGVyZSBhcyB3ZWxsICovCiAJCQlpZiAoX19ub2RlX2FsbG93ZWQoY3R4LCBub2RlKSkgewogCQkJCV9fc3B1X2RlbF9mcm9tX3JxKGN0eCk7CiAJCQkJZ290byBmb3VuZDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfcmVzdG9yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV9yZXN0b3JlLmMKaW5kZXggMjFhOWM5NS4uNzJjOTA1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV9yZXN0b3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV9yZXN0b3JlLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCQlleGl0X2luc3Ryc1szXSA9IEJSX0lOU1RSOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkvKiBTUFVfU3RhdHVzW1JdPTEuIE5vIGFkZGl0b25hbCBpbnN0cnVjdGlvbnMuICovCisJCS8qIFNQVV9TdGF0dXNbUl09MS4gTm8gYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMuICovCiAJCWJyZWFrOwogCX0KIAlzcHVfc3luYygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwppbmRleCBiNWUwMjZiLi42MmRhYmUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwpAQCAtNTEsNyArNTEsNyBAQAogc3RhdGljIGludCBtZl9pbml0aWFsaXplZDsKIAogLyoKLSAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBsYXlvdXQgZm9yIHRoZSBNYWNoaW5lIEZhY2lsaXRlcyBMUEFSIGV2ZW50CisgKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IGZvciB0aGUgTWFjaGluZSBGYWNpbGl0aWVzIExQQVIgZXZlbnQKICAqIGZsb3dzLgogICovCiBzdHJ1Y3QgdnNwX2NtZF9kYXRhIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCmluZGV4IGI1ZjA1ZDkuLjIzNzYwNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJCQl2aW9wYXRoU3RhdHVzW3JlbW90ZUxwXS5tVGFyZ2V0SW5zdCkpIHsKIAkJCXByaW50ayhWSU9QQVRIX0tFUk5fV0FSTgogCQkJICAgICAgICJtZXNzYWdlIGZyb20gaW52YWxpZCBwYXJ0aXRpb24uICIKLQkJCSAgICAgICAiaW50IG1zZyByY3ZkLCBzb3VyY2UgaW5zdCAoJWQpIGRvZXNudCBtYXRjaCAoJWQpXG4iLAorCQkJICAgICAgICJpbnQgbXNnIHJjdmQsIHNvdXJjZSBpbnN0ICglZCkgZG9lc24ndCBtYXRjaCAoJWQpXG4iLAogCQkJICAgICAgIHZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1UYXJnZXRJbnN0LAogCQkJICAgICAgIGV2ZW50LT54U291cmNlSW5zdGFuY2VJZCk7CiAJCQlyZXR1cm47CkBAIC00MDcsNyArNDA3LDcgQEAKIAkJCXZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1Tb3VyY2VJbnN0KSkgewogCQkJcHJpbnRrKFZJT1BBVEhfS0VSTl9XQVJOCiAJCQkgICAgICAgIm1lc3NhZ2UgZnJvbSBpbnZhbGlkIHBhcnRpdGlvbi4gIgotCQkJICAgICAgICJpbnQgbXNnIHJjdmQsIHRhcmdldCBpbnN0ICglZCkgZG9lc250IG1hdGNoICglZClcbiIsCisJCQkgICAgICAgImludCBtc2cgcmN2ZCwgdGFyZ2V0IGluc3QgKCVkKSBkb2Vzbid0IG1hdGNoICglZClcbiIsCiAJCQkgICAgICAgdmlvcGF0aFN0YXR1c1tyZW1vdGVMcF0ubVNvdXJjZUluc3QsCiAJCQkgICAgICAgZXZlbnQtPnhUYXJnZXRJbnN0YW5jZUlkKTsKIAkJCXJldHVybjsKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQkgICAgdmlvcGF0aFN0YXR1c1tyZW1vdGVMcF0ubVNvdXJjZUluc3QpIHsKIAkJCXByaW50ayhWSU9QQVRIX0tFUk5fV0FSTgogCQkJICAgICAgICJtZXNzYWdlIGZyb20gaW52YWxpZCBwYXJ0aXRpb24uICIKLQkJCSAgICAgICAiYWNrIG1zZyByY3ZkLCBzb3VyY2UgaW5zdCAoJWQpIGRvZXNudCBtYXRjaCAoJWQpXG4iLAorCQkJICAgICAgICJhY2sgbXNnIHJjdmQsIHNvdXJjZSBpbnN0ICglZCkgZG9lc24ndCBtYXRjaCAoJWQpXG4iLAogCQkJICAgICAgIHZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1Tb3VyY2VJbnN0LAogCQkJICAgICAgIGV2ZW50LT54U291cmNlSW5zdGFuY2VJZCk7CiAJCQlyZXR1cm47CkBAIC00MjgsNyArNDI4LDcgQEAKIAkJICAgIHZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1UYXJnZXRJbnN0KSB7CiAJCQlwcmludGsoVklPUEFUSF9LRVJOX1dBUk4KIAkJCSAgICAgICAibWVzc2FnZSBmcm9tIGludmFsaWQgcGFydGl0aW9uLiAiCi0JCQkgICAgICAgInZpb3BhdGg6IGFjayBtc2cgcmN2ZCwgdGFyZ2V0IGluc3QgKCVkKSBkb2VzbnQgbWF0Y2ggKCVkKVxuIiwKKwkJCSAgICAgICAidmlvcGF0aDogYWNrIG1zZyByY3ZkLCB0YXJnZXQgaW5zdCAoJWQpIGRvZXNuJ3QgbWF0Y2ggKCVkKVxuIiwKIAkJCSAgICAgICB2aW9wYXRoU3RhdHVzW3JlbW90ZUxwXS5tVGFyZ2V0SW5zdCwKIAkJCSAgICAgICBldmVudC0+eFRhcmdldEluc3RhbmNlSWQpOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZG1hX2xpYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZG1hX2xpYi5jCmluZGV4IDA5Njk1YWUuLjMyMWE5YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2RtYV9saWIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9kbWFfbGliLmMKQEAgLTM3OSw5ICszNzksOSBAQAogfQogRVhQT1JUX1NZTUJPTChwYXNlbWlfZG1hX2ZyZWVfYnVmKTsKIAotLyogcGFzZW1pX2RtYV9hbGxvY19mbGFnIC0gQWxsb2NhdGUgYSBmbGFnIChldmVudCkgZm9yIGNoYW5uZWwgc3luY3Jvbml6YXRpb24KKy8qIHBhc2VtaV9kbWFfYWxsb2NfZmxhZyAtIEFsbG9jYXRlIGEgZmxhZyAoZXZlbnQpIGZvciBjaGFubmVsIHN5bmNocm9uaXphdGlvbgogICoKLSAqIEFsbG9jYXRlcyBhIGZsYWcgZm9yIHVzZSB3aXRoIGNoYW5uZWwgc3luY3Jvbml6YXRpb24gKGV2ZW50IGRlc2NyaXB0b3JzKS4KKyAqIEFsbG9jYXRlcyBhIGZsYWcgZm9yIHVzZSB3aXRoIGNoYW5uZWwgc3luY2hyb25pemF0aW9uIChldmVudCBkZXNjcmlwdG9ycykuCiAgKiBSZXR1cm5zIGFsbG9jYXRlZCBmbGFnICgwLTYzKSwgPCAwIG9uIGVycm9yLgogICovCiBpbnQgcGFzZW1pX2RtYV9hbGxvY19mbGFnKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9NYWtlZmlsZQppbmRleCA1MGYxNjkzLi5lYTQ3ZGY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvTWFrZWZpbGUKQEAgLTExLDcgKzExLDcgQEAKIG9iai0kKENPTkZJR19QTUFDX0JBQ0tMSUdIVCkJKz0gYmFja2xpZ2h0Lm8KIG9iai0kKENPTkZJR19DUFVfRlJFUV9QTUFDKQkrPSBjcHVmcmVxXzMyLm8KIG9iai0kKENPTkZJR19DUFVfRlJFUV9QTUFDNjQpCSs9IGNwdWZyZXFfNjQubwotIyBDT05GSUdfTlZSQU0gaXMgYW4gYXJjaC4gaW5kZXBlbmRhbnQgdHJpc3RhdGUgc3ltYm9sLCBmb3IgcG1hYzMyIHdlIHJlYWxseQorIyBDT05GSUdfTlZSQU0gaXMgYW4gYXJjaC4gaW5kZXBlbmRlbnQgdHJpc3RhdGUgc3ltYm9sLCBmb3IgcG1hYzMyIHdlIHJlYWxseQogIyBuZWVkIHRoaXMgdG8gYmUgYSBib29sLiAgQ2hlYXQgaGVyZSBhbmQgcHJldGVuZCBDT05GSUdfTlZSQU09bSBpcyByZWFsbHkKICMgQ09ORklHX05WUkFNPXkKIG9iai0kKENPTkZJR19OVlJBTTptPXkpCQkrPSBudnJhbS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDQ4MDU2N2UuLmU5YzhhNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCkBAIC05MDQsNyArOTA0LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJTTVUgaTJjICVzXG4iLCBjb250cm9sbGVyLT5mdWxsX25hbWUpOwogCiAJLyogTG9vayBmb3IgY2hpbGRzLCBub3RlIHRoYXQgdGhleSBtaWdodCBub3QgYmUgb2YgdGhlIHJpZ2h0Ci0JICogdHlwZSBhcyBvbGRlciBkZXZpY2UgdHJlZXMgbWl4IGkyYyBidXNzZXMgYW5kIG90aGVyIHRoaWducworCSAqIHR5cGUgYXMgb2xkZXIgZGV2aWNlIHRyZWVzIG1peCBpMmMgYnVzc2VzIGFuZCBvdGhlciB0aGluZ3MKIAkgKiBhdCB0aGUgc2FtZSBsZXZlbAogCSAqLwogCWZvciAoYnVzbm9kZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwppbmRleCBhYjY4OTg5Li5mMzNlMDhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKQEAgLTI5OSw3ICsyOTksNyBAQAogICogVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHNvbWUgInNwZWNpYWwgY2FzZXMiIGRldmljZXMuCiAgKgogICogIDAgLT4gTm8gc3BlY2lhbCBjYXNlCi0gKiAgMSAtPiBTa2lwIHRoZSBkZXZpY2UgYnV0IGFjdCBhcyBpZiB0aGUgYWNjZXNzIHdhcyBzdWNjZXNzZnVsbAorICogIDEgLT4gU2tpcCB0aGUgZGV2aWNlIGJ1dCBhY3QgYXMgaWYgdGhlIGFjY2VzcyB3YXMgc3VjY2Vzc2Z1bAogICogICAgICAgKHJldHVybiAweGZmJ3Mgb24gcmVhZHMsIGV2ZW50dWFsbHksIGNhY2hlIGNvbmZpZyBzcGFjZQogICogICAgICAgYWNjZXNzZXMgaW4gYSBsYXRlciB2ZXJzaW9uKQogICogLTEgLT4gSGlkZSB0aGUgZGV2aWNlICh1bnN1Y2Nlc3NmdWwgYWNjZXNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKaW5kZXggYTgzMGM1ZS4uYmM1ZjBkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCkBAIC04NDIsNiArODQyLDcgQEAKIAltcGljX3NldHVwX3RoaXNfY3B1KCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyBpbnQgc21wX2NvcmU5OV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCkBAIC04NzksNyArODgwLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNtcF9jb3JlOTlfYnJpbmd1cF9kb25lKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BQQzY0CiAJZXh0ZXJuIHZvaWQgZzVfcGh5X2Rpc2FibGVfY3B1MSh2b2lkKTsKIAogCS8qIENsb3NlIGkyYyBidXMgaWYgaXQgd2FzIHVzZWQgZm9yIHRiIHN5bmMgKi8KQEAgLTg5NCwxNCArODk0LDE0IEBACiAJCXNldF9jcHVfcHJlc2VudCgxLCBmYWxzZSk7CiAJCWc1X3BoeV9kaXNhYmxlX2NwdTEoKTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnNtcF9jb3JlOTlfY3B1X25iKTsKICNlbmRpZgorCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCJzbXBfY29yZTk5X2JyaW5ndXBfZG9uZSIsIDB4MzQ5KTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCkBAIC05NzUsNyArOTc1LDkgQEAKIHN0cnVjdCBzbXBfb3BzX3QgY29yZTk5X3NtcF9vcHMgPSB7CiAJLm1lc3NhZ2VfcGFzcwk9IHNtcF9tcGljX21lc3NhZ2VfcGFzcywKIAkucHJvYmUJCT0gc21wX2NvcmU5OV9wcm9iZSwKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAkuYnJpbmd1cF9kb25lCT0gc21wX2NvcmU5OV9icmluZ3VwX2RvbmUsCisjZW5kaWYKIAkua2lja19jcHUJPSBzbXBfY29yZTk5X2tpY2tfY3B1LAogCS5zZXR1cF9jcHUJPSBzbXBfY29yZTk5X3NldHVwX2NwdSwKIAkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfZ2l2ZV90aW1lYmFzZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKaW5kZXggYjc0YTkyMy4uNTdjZWI5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBUaGUgY29uZmlndXJlIGNvbm5lY3RvciByZXBvcnRlZCBuYW1lIGRvZXMgbm90IGNvbnRhaW4gYQotCSAqIHByZWNlZWRpbmcgJy8nLCBzbyB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8KKwkgKiBwcmVjZWRpbmcgJy8nLCBzbyB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8KIAkgKiBwcmVwZW5kIHRoaXMgdG8gdGhlIGZ1bGxfbmFtZS4KIAkgKi8KIAluYW1lID0gKGNoYXIgKiljY3dhICsgY2N3YS0+bmFtZV9vZmZzZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKaW5kZXggM2NjNGQxMC4uODk2NDkxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwpAQCAtNjUsNyArNjUsNyBAQAogICogIHdpdGggRUVILgogICoKICAqICBJZGVhbGx5LCBhIFBDSSBkZXZpY2UgZHJpdmVyLCB3aGVuIHN1c3BlY3RpbmcgdGhhdCBhbiBpc29sYXRpb24KLSAqICBldmVudCBoYXMgb2NjdXJlZCAoZS5nLiBieSByZWFkaW5nIDB4ZmYncyksIHdpbGwgdGhlbiBhc2sgRUVICisgKiAgZXZlbnQgaGFzIG9jY3VycmVkIChlLmcuIGJ5IHJlYWRpbmcgMHhmZidzKSwgd2lsbCB0aGVuIGFzayBFRUgKICAqICB3aGV0aGVyIHRoaXMgaXMgdGhlIGNhc2UsIGFuZCB0aGVuIHRha2UgYXBwcm9wcmlhdGUgc3RlcHMgdG8KICAqICByZXNldCB0aGUgUENJIHNsb3QsIHRoZSBQQ0kgZGV2aWNlLCBhbmQgdGhlbiByZXN1bWUgb3BlcmF0aW9ucy4KICAqICBIb3dldmVyLCB1bnRpbCB0aGF0IGRheSwgIHRoZSBjaGVja2luZyBpcyBkb25lIGhlcmUsIHdpdGggdGhlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1jcHUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCmluZGV4IGZkNTBjY2QuLmVmOGM0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJICAgICAgIGNwdSwgcGNwdSwgY3B1X3N0YXR1cyk7CiAJfQogCi0JLyogSXNvbGF0aW9uIGFuZCBkZWFsbG9jYXRpb24gYXJlIGRlZmluYXRseSBkb25lIGJ5CisJLyogSXNvbGF0aW9uIGFuZCBkZWFsbG9jYXRpb24gYXJlIGRlZmluaXRlbHkgZG9uZSBieQogCSAqIGRyc2xvdF9jaHJwX2NwdS4gIElmIHRoZXkgd2VyZSBub3QgdGhleSB3b3VsZCBiZQogCSAqIGRvbmUgaGVyZS4gIENoYW5nZSBpc29sYXRlIHN0YXRlIHRvIElzb2xhdGUgYW5kCiAJICogY2hhbmdlIGFsbG9jYXRpb24tc3RhdGUgdG8gVW51c2FibGUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IDE1NGM0NjQuLjZkNTQxMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAlyZXR1cm4gdGNlX3JldDsKIH0KIAotLyogdGhpcyBpcyBjb21wYXRhYmxlIHdpdGggY2VsbHMgZm9yIHRoZSBkZXZpY2UgdHJlZSBwcm9wZXJ0eSAqLworLyogdGhpcyBpcyBjb21wYXRpYmxlIHdpdGggY2VsbHMgZm9yIHRoZSBkZXZpY2UgdHJlZSBwcm9wZXJ0eSAqLwogc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wIHsKIAlfX2JlMzIJbGlvYm47CQkvKiB0Y2UgdGFibGUgbnVtYmVyICovCiAJX19iZTY0CWRtYV9iYXNlOwkvKiBhZGRyZXNzIGhpLGxvICovCkBAIC05NzYsNyArOTc2LDcgQEAKIAlwcl9kZWJ1ZygicGNpX2RtYV9kZXZfc2V0dXBfcFNlcmllc0xQOiAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAKIAkvKiBkZXYgc2V0dXAgZm9yIExQQVIgaXMgYSBsaXR0bGUgdHJpY2t5LCBzaW5jZSB0aGUgZGV2aWNlIHRyZWUgbWlnaHQKLQkgKiBjb250YWluIHRoZSBkbWEtd2luZG93IHByb3BlcnRpZXMgcGVyLWRldmljZSBhbmQgbm90IG5lY2Nlc2FyaWx5CisJICogY29udGFpbiB0aGUgZG1hLXdpbmRvdyBwcm9wZXJ0aWVzIHBlci1kZXZpY2UgYW5kIG5vdCBuZWNlc3NhcmlseQogCSAqIGZvciB0aGUgYnVzLiBTbyB3ZSBuZWVkIHRvIHNlYXJjaCB1cHdhcmRzIGluIHRoZSB0cmVlIHVudGlsIHdlCiAJICogZWl0aGVyIGhpdCBhIGRtYS13aW5kb3cgcHJvcGVydHksIE9SIGZpbmQgYSBwYXJlbnQgd2l0aCBhIHRhYmxlCiAJICogYWxyZWFkeSBhbGxvY2F0ZWQuCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCiAJCS8qCiAJCSAqIHRoZSBkZXZpY2UgdHJlZSBtaWdodCBjb250YWluIHRoZSBkbWEtd2luZG93IHByb3BlcnRpZXMKLQkJICogcGVyLWRldmljZSBhbmQgbm90IG5lY2Nlc2FyaWx5IGZvciB0aGUgYnVzLiBTbyB3ZSBuZWVkIHRvCisJCSAqIHBlci1kZXZpY2UgYW5kIG5vdCBuZWNlc3NhcmlseSBmb3IgdGhlIGJ1cy4gU28gd2UgbmVlZCB0bwogCQkgKiBzZWFyY2ggdXB3YXJkcyBpbiB0aGUgdHJlZSB1bnRpbCB3ZSBlaXRoZXIgaGl0IGEgZG1hLXdpbmRvdwogCQkgKiBwcm9wZXJ0eSwgT1IgZmluZCBhIHBhcmVudCB3aXRoIGEgdGFibGUgYWxyZWFkeSBhbGxvY2F0ZWQuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwppbmRleCBjMzE5ZDA0Li42YzQyY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwpAQCAtMjg3LDE0ICsyODcsMjIgQEAKIAlpbnQgY3B1LCByZXQ7CiAJc3RydWN0IHBhY2Ffc3RydWN0ICpwcDsKIAlzdHJ1Y3QgZHRsX2VudHJ5ICpkdGw7CisJc3RydWN0IGttZW1fY2FjaGUgKmR0bF9jYWNoZTsKIAogCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TUExQQVIpKQogCQlyZXR1cm4gMDsKIAorCWR0bF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJkdGwiLCBESVNQQVRDSF9MT0dfQllURVMsCisJCQkJCQlESVNQQVRDSF9MT0dfQllURVMsIDAsIE5VTEwpOworCWlmICghZHRsX2NhY2hlKSB7CisJCXByX3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgZGlzcGF0Y2ggdHJhY2UgbG9nIGJ1ZmZlciBjYWNoZVxuIik7CisJCXByX3dhcm4oIlN0b2xlbiB0aW1lIHN0YXRpc3RpY3Mgd2lsbCBiZSB1bnJlbGlhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlwcCA9ICZwYWNhW2NwdV07Ci0JCWR0bCA9IGttYWxsb2Nfbm9kZShESVNQQVRDSF9MT0dfQllURVMsIEdGUF9LRVJORUwsCi0JCQkJICAgY3B1X3RvX25vZGUoY3B1KSk7CisJCWR0bCA9IGttZW1fY2FjaGVfYWxsb2MoZHRsX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkdGwpIHsKIAkJCXByX3dhcm4oIkZhaWxlZCB0byBhbGxvY2F0ZSBkaXNwYXRjaCB0cmFjZSBsb2cgZm9yIGNwdSAlZFxuIiwKIAkJCQljcHUpOwpAQCAtMzc4LDcgKzM4Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLWFyY2hfaW5pdGNhbGwocFNlcmllc19pbml0X3BhbmVsKTsKK21hY2hpbmVfYXJjaF9pbml0Y2FsbChwc2VyaWVzLCBwU2VyaWVzX2luaXRfcGFuZWwpOwogCiBzdGF0aWMgaW50IHBzZXJpZXNfc2V0X2RhYnIodW5zaWduZWQgbG9uZyBkYWJyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IGQ2NDc5ZjkuLmE1MDljNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTExMiwxMCArMTEyLDEwIEBACiAKIAkvKiBGaXh1cCBhdG9taWMgY291bnQ6IGl0IGV4aXRlZCBpbnNpZGUgSVJRIGhhbmRsZXIuICovCiAJdGFza190aHJlYWRfaW5mbyhwYWNhW2xjcHVdLl9fY3VycmVudCktPnByZWVtcHRfY291bnQJPSAwOwotCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJaWYgKGdldF9jcHVfY3VycmVudF9zdGF0ZShsY3B1KSA9PSBDUFVfU1RBVEVfSU5BQ1RJVkUpCiAJCWdvdG8gb3V0OwotCisjZW5kaWYKIAkvKiAKIAkgKiBJZiB0aGUgUlRBUyBzdGFydC1jcHUgdG9rZW4gZG9lcyBub3QgZXhpc3QgdGhlbiBwcmVzdW1lIHRoZQogCSAqIGNwdSBpcyBhbHJlYWR5IHNwaW5uaW5nLgpAQCAtMTMwLDcgKzEzMCw5IEBACiAJCXJldHVybiAwOwogCX0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogb3V0OgorI2VuZGlmCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0NCwxNiArMTQ2LDE1IEBACiAJCXZwYV9pbml0KGNwdSk7CiAKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG9mX3NwaW5fbWFzayk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJc2V0X2NwdV9jdXJyZW50X3N0YXRlKGNwdSwgQ1BVX1NUQVRFX09OTElORSk7CiAJc2V0X2RlZmF1bHRfb2ZmbGluZV9zdGF0ZShjcHUpOwotCisjZW5kaWYKIH0KICNlbmRpZiAvKiBDT05GSUdfWElDUyAqLwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX3BTZXJpZXNfa2lja19jcHUoaW50IG5yKQogewotCWxvbmcgcmM7Ci0JdW5zaWduZWQgbG9uZyBoY3B1aWQ7CiAJQlVHX09OKG5yIDwgMCB8fCBuciA+PSBOUl9DUFVTKTsKIAogCWlmICghc21wX3N0YXJ0dXBfY3B1KG5yKSkKQEAgLTE2NSwxNiArMTY2LDIwIEBACiAJICogdGhlIHByb2Nlc3NvciB3aWxsIGNvbnRpbnVlIG9uIHRvIHNlY29uZGFyeV9zdGFydAogCSAqLwogCXBhY2FbbnJdLmNwdV9zdGFydCA9IDE7Ci0KKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAlzZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUobnIsIENQVV9TVEFURV9PTkxJTkUpOwogCiAJaWYgKGdldF9jcHVfY3VycmVudF9zdGF0ZShucikgPT0gQ1BVX1NUQVRFX0lOQUNUSVZFKSB7CisJCWxvbmcgcmM7CisJCXVuc2lnbmVkIGxvbmcgaGNwdWlkOworCiAJCWhjcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQobnIpOwogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX1BST0QsIGhjcHVpZCk7CiAJCWlmIChyYyAhPSBIX1NVQ0NFU1MpCiAJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBQcm9kIHRvIHdha2UgdXAgcHJvY2Vzc29yICVkICIKIAkJCQkJCSJSZXQ9ICVsZFxuIiwgbnIsIHJjKTsKIAl9CisjZW5kaWYKIH0KIAogc3RhdGljIGludCBzbXBfcFNlcmllc19jcHVfYm9vdGFibGUodW5zaWduZWQgaW50IG5yKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggZWM4ZmUyMi4uZDY5MDEzMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC04OTcsNyArODk3LDcgQEAKIAkJaW50IHN0YXR1czsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQkvKiBXZSBjYW50IHNldCBhZmZpbml0eSBvbiBJU0EgaW50ZXJydXB0cyAqLworCQkvKiBXZSBjYW4ndCBzZXQgYWZmaW5pdHkgb24gSVNBIGludGVycnVwdHMgKi8KIAkJaWYgKHZpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpCiAJCQljb250aW51ZTsKIAkJaWYgKGlycV9tYXBbdmlycV0uaG9zdCAhPSB4aWNzX2hvc3QpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCmluZGV4IDI3NDAyYzdkLi4xNjM2ZGQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwpAQCAtOTUsNyArOTUsNyBAQAogCiAJQlVHX09OKCFiYW5rKTsKIAotCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiQ29ycmVjdGFibGUgbWVtb3J5IGVycm9yIG9jY3VyZWRcbiIpOworCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiQ29ycmVjdGFibGUgbWVtb3J5IGVycm9yIG9jY3VycmVkXG4iKTsKIAliYW5rLT5lY2NfY291bnRlcisrOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaAppbmRleCAyM2E5NWY4Li5hMGUyZTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tLmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBzdHJ1Y3QgYmNvbV9iZCAtIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgZ2VuZXJpYyBCZXN0Q29tbSBidWZmZXIgZGVzY3JpcHRvcgogICogQHN0YXR1czogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgYnVmZmVyLiBFeGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlCiAgKiAgICAgICAgICB0YXNrIHR5cGUKLSAqIEBkYXRhOiBBbiBhcnJheSBvZiB1MzIgZXh0cmEgZGF0YS4gIFNpemUgb2YgYXJyYXkgaXMgdGFzayBkZXBlbmRhbnQuCisgKiBAZGF0YTogQW4gYXJyYXkgb2YgdTMyIGV4dHJhIGRhdGEuICBTaXplIG9mIGFycmF5IGlzIHRhc2sgZGVwZW5kZW50LgogICoKICAqIE5vdGU6IERvbid0IGRlcmVmZXJlbmNlIGEgYmNvbV9iZCBwb2ludGVyIGFzIGFuIGFycmF5LiAgVGhlIHNpemUgb2YgdGhlCiAgKiAgICAgICBiY29tX2JkIGlzIHZhcmlhYmxlLiAgVXNlIGJjb21fZ2V0X2JkKCkgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW1fcHJpdi5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgKaW5kZXggZWIwZDFjOC4uM2I1MmYzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgKQEAgLTk3LDcgKzk3LDcgQEAKIAl1OAlyZXNlcnZlZFs4XTsKIH07CiAKLS8qIERlc2NyaXB0b3JzIHN0dWN0dXJlICYgY28gKi8KKy8qIERlc2NyaXB0b3JzIHN0cnVjdHVyZSAmIGNvICovCiAjZGVmaW5lIEJDT01fREVTQ19OT1AJCTB4MDAwMDAxZjgKICNkZWZpbmUgQkNPTV9MQ0RfTUFTSwkJMHg4MDAwMDAwMAogI2RlZmluZSBCQ09NX0RSRF9FWFRFTkRFRAkweDQwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IDhiNWFiYTIuLmUwYmM5NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogCS8qIFNldCBTRE1BIEJ1cyBSZXF1ZXN0IHByaW9yaXR5IDUuCiAJICogT24gODYwVCwgdGhpcyBhbHNvIGVuYWJsZXMgRkVDIHByaW9yaXR5IDYuICBJIGFtIG5vdCBzdXJlCi0JICogdGhpcyBpcyB3aGF0IHdlIHJlYWx5IHdhbnQgZm9yIHNvbWUgYXBwbGljYXRpb25zLCBidXQgdGhlCisJICogdGhpcyBpcyB3aGF0IHdlIHJlYWxseSB3YW50IGZvciBzb21lIGFwcGxpY2F0aW9ucywgYnV0IHRoZQogCSAqIG1hbnVhbCByZWNvbW1lbmRzIGl0LgogCSAqIEJpdCAyNSwgRkFNIGNhbiBhbHNvIGJlIHNldCB0byB1c2UgRkVDIGFnZ3Jlc3NpdmUgbW9kZSAoODYwVCkuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCmluZGV4IGY4ZjdmMjguLjY4Y2E5MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCkBAIC0zMjQsNiArMzI0LDExIEBACiAJc3RydWN0IHJlc291cmNlIHJzcmM7CiAJY29uc3QgaW50ICpidXNfcmFuZ2U7CiAKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoZGV2KSkgeworCQlwcl93YXJuaW5nKCIlczogZGlzYWJsZWRcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJcHJfZGVidWcoIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKIAogCS8qIEZldGNoIGhvc3QgYnJpZGdlIHJlZ2lzdGVycyBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9yaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCmluZGV4IDE0MjMyZDUuLjQ5Nzk4NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCkBAIC0xNDU3LDcgKzE0NTcsNiBAQAogCXBvcnQtPm9wcyA9IG9wczsKIAlwb3J0LT5wcml2ID0gcHJpdjsKIAlwb3J0LT5waHlzX2VmcHRyID0gMHgxMDA7Ci0JcmlvX3JlZ2lzdGVyX21wb3J0KHBvcnQpOwogCiAJcHJpdi0+cmVnc193aW4gPSBpb3JlbWFwKHJlZ3Muc3RhcnQsIHJlZ3MuZW5kIC0gcmVncy5zdGFydCArIDEpOwogCXJpb19yZWdzX3dpbiA9IHByaXYtPnJlZ3Nfd2luOwpAQCAtMTUwNCw2ICsxNTAzLDkgQEAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJSYXBpZElPIENvbW1vbiBUcmFuc3BvcnQgU3lzdGVtIHNpemU6ICVkXG4iLAogCQkJcG9ydC0+c3lzX3NpemUgPyA2NTUzNiA6IDI1Nik7CiAKKwlpZiAocmlvX3JlZ2lzdGVyX21wb3J0KHBvcnQpKQorCQlnb3RvIGVycjsKKwogCWlmIChwb3J0LT5ob3N0X2RldmljZWlkID49IDApCiAJCW91dF9iZTMyKHByaXYtPnJlZ3Nfd2luICsgUklPX0dDQ1NSLCBSSU9fUE9SVF9HRU5fSE9TVCB8CiAJCQlSSU9fUE9SVF9HRU5fTUFTVEVSIHwgUklPX1BPUlRfR0VOX0RJU0NPVkVSRUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pbmRpcmVjdF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaW5kaXJlY3RfcGNpLmMKaW5kZXggN2VkODA5Ni4uODJmZGFkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pbmRpcmVjdF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2luZGlyZWN0X3BjaS5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJb3V0X2xlMzIoaG9zZS0+Y2ZnX2FkZHIsICgweDgwMDAwMDAwIHwgKGJ1c19ubyA8PCAxNikgfAogCQkJIChkZXZmbiA8PCA4KSB8IHJlZyB8IGNmZ190eXBlKSk7CiAKLQkvKiBzdXJwcmVzcyBzZXR0aW5nIG9mIFBDSV9QUklNQVJZX0JVUyAqLworCS8qIHN1cHByZXNzIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTICovCiAJaWYgKGhvc2UtPmluZGlyZWN0X3R5cGUgJiBQUENfSU5ESVJFQ1RfVFlQRV9TVVJQUkVTU19QUklNQVJZX0JVUykKIAkJaWYgKChvZmZzZXQgPT0gUENJX1BSSU1BUllfQlVTKSAmJgogCQkJKGJ1cy0+bnVtYmVyID09IGhvc2UtPmZpcnN0X2J1c25vKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmgKaW5kZXggNTZkOWU1ZC4uYzM5YTEzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmgKQEAgLTMyNCw3ICszMjQsNyBAQAogI2RlZmluZSBQRVNEUjBfNDYwRVhfSUhTMgkJMHgwMzZECiAKIC8qCi0gKiA0NjBTWCBhZGR0aW9uYWwgRENScworICogNDYwU1ggYWRkaXRpb25hbCBEQ1JzCiAgKi8KICNkZWZpbmUgUEVTRFJuXzQ2MFNYX1JDRUkJCTB4MDIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYwppbmRleCA5NzVlM2FiLi44YjE2YzQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAJLyogQWRkIHRoZSBlbnRyb3B5ICovCiAJd2hpbGUgKG5ieXRlcyA+PSA4KSB7Ci0JCSooKF9fdTY0ICopcGFybV9ibG9jaykgXj0gKigoX191NjQgKilidWYraSo4KTsKKwkJKigoX191NjQgKilwYXJtX2Jsb2NrKSBePSAqKChfX3U2NCAqKShidWYraSkpOwogCQlwcm5nX2FkZF9lbnRyb3B5KCk7CiAJCWkgKz0gODsKIAkJbmJ5dGVzIC09IDg7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggNWM1YmExMC4uZDlkYjEzOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLgogICogVXNlZnVsIGZvciByZXNvdXJjZSBjb3VudGluZyBldGMuCi0gKiBzMzkwIHVzZXMgJ0NvbXBhcmUgQW5kIFN3YXAnIGZvciBhdG9taWNpdHkgaW4gU01QIGVudmlyb21lbnQuCisgKiBzMzkwIHVzZXMgJ0NvbXBhcmUgQW5kIFN3YXAnIGZvciBhdG9taWNpdHkgaW4gU01QIGVudmlyb25tZW50LgogICoKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmgKaW5kZXggZTM0MzQ3ZC4uZmM1MGEzMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmgKQEAgLTE4Myw3ICsxODMsNyBAQAogICogVGhlIGlyYiB0aGF0IGlzIGhhbmRlZCB0byB0aGUgZGV2aWNlIGRyaXZlciB3aGVuIGFuIGludGVycnVwdCBvY2N1cnMuIEZvcgogICogc29saWNpdGVkIGludGVycnVwdHMsIHRoZSBjb21tb24gSS9PIGxheWVyIGFscmVhZHkgcGVyZm9ybXMgY2hlY2tzIHdoZXRoZXIKICAqIGEgZmllbGQgaXMgdmFsaWQ7IGEgZmllbGQgbm90IGJlaW5nIHZhbGlkIGlzIGFsd2F5cyBwYXNzZWQgYXMgJTAuCi0gKiBJZiBhIHVuaXQgY2hlY2sgb2NjdXJlZCwgQGVjdyBtYXkgY29udGFpbiBzZW5zZSBkYXRhOyB0aGlzIGlzIHJldHJpZXZlZAorICogSWYgYSB1bml0IGNoZWNrIG9jY3VycmVkLCBAZWN3IG1heSBjb250YWluIHNlbnNlIGRhdGE7IHRoaXMgaXMgcmV0cmlldmVkCiAgKiBieSB0aGUgY29tbW9uIEkvTyBsYXllciBpdHNlbGYgaWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgY29uY3VycmVudAogICogc2Vuc2UgKHNvIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgbmV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBiYXNpYyBzZW5lIGl0c2VsZikuCiAgKiBGb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cywgdGhlIGlyYiBpcyBwYXNzZWQgYXMtaXMgKGV4cGVjdCBmb3Igc2Vuc2UgZGF0YSwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kaWFnLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGlhZy5oCmluZGV4IDcyYjJlMmYuLjdlOTFjNTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kaWFnLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RpYWcuaApAQCAtOSw5ICs5LDIyIEBACiAjZGVmaW5lIF9BU01fUzM5MF9ESUFHX0gKIAogLyoKLSAqIERpYWdub3NlIDEwOiBSZWxlYXNlIHBhZ2VzCisgKiBEaWFnbm9zZSAxMDogUmVsZWFzZSBwYWdlIHJhbmdlCiAgKi8KLWV4dGVybiB2b2lkIGRpYWcxMCh1bnNpZ25lZCBsb25nIGFkZHIpOworc3RhdGljIGlubGluZSB2b2lkIGRpYWcxMF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBudW1fcGZuKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgZW5kX2FkZHI7CisKKwlzdGFydF9hZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJZW5kX2FkZHIgPSAoc3RhcnRfcGZuICsgbnVtX3BmbiAtIDEpIDw8IFBBR0VfU0hJRlQ7CisKKwlhc20gdm9sYXRpbGUoCisJCSIwOglkaWFnCSUwLCUxLDB4MTBcbiIKKwkJIjE6XG4iCisJCUVYX1RBQkxFKDBiLCAxYikKKwkJRVhfVEFCTEUoMWIsIDFiKQorCQk6IDogImEiIChzdGFydF9hZGRyKSwgImEiIChlbmRfYWRkcikpOworfQogCiAvKgogICogRGlhZ25vc2UgMTQ6IElucHV0IHNwb29sIGZpbGUgbWFuaXB1bGF0aW9uCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IGE2ZjBlN2MuLjhjMjc3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0yMyw3ICsyMyw3IEBACiAjaWZkZWYgQ09ORklHXzY0QklUCiAJbW0tPmNvbnRleHQuYXNjZV9iaXRzIHw9IF9BU0NFX1RZUEVfUkVHSU9OMzsKICNlbmRpZgotCWlmIChjdXJyZW50LT5tbS0+Y29udGV4dC5hbGxvY19wZ3N0ZSkgeworCWlmIChjdXJyZW50LT5tbSAmJiBjdXJyZW50LT5tbS0+Y29udGV4dC5hbGxvY19wZ3N0ZSkgewogCQkvKgogCQkgKiBhbGxvY19wZ3N0ZSBpbmRpY2F0ZXMsIHRoYXQgYW55IE5FVyBjb250ZXh0IHdpbGwgYmUgY3JlYXRlZAogCQkgKiB3aXRoIGV4dGVuZGVkIHBhZ2UgdGFibGVzLiBUaGUgb2xkIGNvbnRleHQgaXMgdW5jaGFuZ2VkLiBUaGUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGlhZy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKaW5kZXggYzAzMmQxMS4uODIzN2ZjMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKQEAgLTksMjcgKzksNiBAQAogI2luY2x1ZGUgPGFzbS9kaWFnLmg+CiAKIC8qCi0gKiBEaWFnbm9zZSAxMDogUmVsZWFzZSBwYWdlcwotICovCi12b2lkIGRpYWcxMCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKGFkZHIgPj0gMHg3ZmYwMDAwMCkKLQkJcmV0dXJuOwotCWFzbSB2b2xhdGlsZSgKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJIglzYW0zMVxuIgotCQkiCWRpYWcJJTAsJTAsMHgxMFxuIgotCQkiMDoJc2FtNjRcbiIKLSNlbHNlCi0JCSIJZGlhZwklMCwlMCwweDEwXG4iCi0JCSIwOlxuIgotI2VuZGlmCi0JCUVYX1RBQkxFKDBiLCAwYikKLQkJOiA6ICJhIiAoYWRkcikpOwotfQotRVhQT1JUX1NZTUJPTChkaWFnMTApOwotCi0vKgogICogRGlhZ25vc2UgMTQ6IElucHV0IHNwb29sIGZpbGUgbWFuaXB1bGF0aW9uCiAgKi8KIGludCBkaWFnMTQodW5zaWduZWQgbG9uZyByeCwgdW5zaWduZWQgbG9uZyByeTEsIHVuc2lnbmVkIGxvbmcgc3ViY29kZSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMgYi9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCmluZGV4IGM4MzcyNmMuLjNkNGE3OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYwpAQCAtNjcyLDYgKzY3Miw3IEBACiAJeyAicnAiLCAweDc3LCBJTlNUUl9TX1JEIH0sCiAJeyAic3Rja2UiLCAweDc4LCBJTlNUUl9TX1JEIH0sCiAJeyAic2FjZiIsIDB4NzksIElOU1RSX1NfUkQgfSwKKwl7ICJzcHAiLCAweDgwLCBJTlNUUl9TX1JEIH0sCiAJeyAic3RzaSIsIDB4N2QsIElOU1RSX1NfUkQgfSwKIAl7ICJzcm5tIiwgMHg5OSwgSU5TVFJfU19SRCB9LAogCXsgInN0ZnBjIiwgMHg5YywgSU5TVFJfU19SRCB9LApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCmluZGV4IDY0OGY2NDIuLjFiNjdmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKQEAgLTgzNiw3ICs4MzYsNyBAQAogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAkjIG5vdyB3ZSBjYW4gdHVybiBkYXQgb24KIAliYXNyCSVyMTQsMAogCWwJJXIxNCxyZXN0YXJ0X2FkZHItLiglcjE0KQotCWJyCSVyMTQJCQkjIGJyYW5jaCB0byBzdGFydF9zZWNvbmRhcnkKKwliYXNyCSVyMTQsJXIxNAkJIyBicmFuY2ggdG8gc3RhcnRfc2Vjb25kYXJ5CiByZXN0YXJ0X2FkZHI6CiAJLmxvbmcJc3RhcnRfc2Vjb25kYXJ5CiAJLmFsaWduCTgKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggOWQzNjAzZC4uOWZkODY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCW12YwlfX0xDX1NZU1RFTV9USU1FUig4KSxfX1RJX3N5c3RlbV90aW1lciglcjEpCiAJeGMJX19MQ19TVEVBTF9USU1FUig4KSxfX0xDX1NURUFMX1RJTUVSCiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CSMgbm93IHdlIGNhbiB0dXJuIGRhdCBvbgotCWpnCXN0YXJ0X3NlY29uZGFyeQorCWJyYXNsCSVyMTQsc3RhcnRfc2Vjb25kYXJ5CiAJLmFsaWduCTgKIHJlc3RhcnRfdnRpbWU6CiAJLmxvbmcJMHg3ZmZmZmZmZiwweGZmZmZmZmZmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TCmluZGV4IDcwNjEzOTguLmZiMzE3YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TCkBAIC00NjAsNyArNDYwLDcgQEAKICNpZm5kZWYgQ09ORklHX01BUkNIX0c1CiAJIyBjaGVjayBjYXBhYmlsaXRpZXMgYWdhaW5zdCBNQVJDSF97RzUsWjkwMCxaOTkwLFo5XzEwOSxaMTB9CiAJeGMJX19MQ19TVEZMX0ZBQ19MSVNUKDgpLF9fTENfU1RGTF9GQUNfTElTVAotCXN0ZmwJX19MQ19TVEZMX0ZBQ19MSVNUCSMgc3RvcmUgZmFjaWxpdHkgbGlzdAorCS5pbnNuCXMsMHhiMmIxMDAwMCxfX0xDX1NURkxfRkFDX0xJU1QJIyBzdG9yZSBmYWNpbGl0eSBsaXN0CiAJdG0JX19MQ19TVEZMX0ZBQ19MSVNULDB4MDEJIyBzdGZsZSBhdmFpbGFibGUgPwogCWp6CTBmCiAJbGEJJXIwLDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKaW5kZXggNWU3M2RlZS4uOWVhYmJjOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKQEAgLTc4LDcgKzc4LDcgQEAKICAqIGluIHRoZSBFU0EgcHN3LgogICogQml0IDMxIG9mIHRoZSBhZGRyZXNzZXMgaGFzIHRvIGJlIDAgZm9yIHRoZQogICogMzFiaXQgbHBzd2UgaW5zdHJ1Y3Rpb24gYSBmYWN0IHRoZXkgYXBwZWFyIHRvIGhhdmUKLSAqIG9tbWl0ZWQgZnJvbSB0aGUgcG9wLgorICogb21pdHRlZCBmcm9tIHRoZSBwb3AuCiAgKi8KIC5MbmV3cHN3OgkucXVhZAkweDAwMDAwMDAwODAwMDAwMDAKIAkJLnF1YWQJLkxwZzEKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCBlZDE4M2MyLi5mNTQzNGQxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03MDgsNyArNzA4LDcgQEAKIAkgKiBhbmQgMVVMTDw8MCBhcyBiaXQgNjMuIEJpdHMgMC0zMSBjb250YWluIHRoZSBzYW1lIGluZm9ybWF0aW9uCiAJICogYXMgc3RvcmVkIGJ5IHN0ZmwsIGJpdHMgMzIteHh4IGNvbnRhaW4gYWRkaXRpb25hbCBmYWNpbGl0aWVzLgogCSAqIEhvdyBtYW55IGZhY2lsaXR5IHdvcmRzIGFyZSBzdG9yZWQgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mCi0JICogZG91Ymxld29yZHMgcGFzc2VkIHRvIHRoZSBpbnN0cnVjdGlvbi4gVGhlIGFkZGl0aW9uYWwgZmFjaWxpdGVzCisJICogZG91Ymxld29yZHMgcGFzc2VkIHRvIHRoZSBpbnN0cnVjdGlvbi4gVGhlIGFkZGl0aW9uYWwgZmFjaWxpdGllcwogCSAqIGFyZToKIAkgKiAgIEJpdCA0MjogZGVjaW1hbCBmbG9hdGluZyBwb2ludCBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKIAkgKiAgIEJpdCA0NDogcGVyZm9ybSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24gZmFjaWxpdHkgaXMgaW5zdGFsbGVkCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHUuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdS5TCmluZGV4IDQ2OWYxMWIuLjIwNTMwZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdS5TCkBAIC00Niw3ICs0Niw5IEBACiAJbHRyCSVyNCwlcjQJCQkvKiBOZXcgc3RhY2sgPyAqLwogCWp6CTFmCiAJbHIJJXIxNSwlcjQKLTE6CWJhc3IJJXIxNCwlcjIKKzE6CWxyCSVyMTQsJXIyCQkvKiByMTQ6IEZ1bmN0aW9uIHRvIGNhbGwgKi8KKwlscgklcjIsJXIzCQkJLyogcjIgOiBQYXJhbWV0ZXIgZm9yIGZ1bmN0aW9uKi8KKwliYXNyCSVyMTQsJXIxNAkJLyogQ2FsbCBmdW5jdGlvbiAqLwogCiAuZ3BycmVnc19hZGRyOgogCS5sb25nCS5ncHJyZWdzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHU2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1NjQuUwppbmRleCBkOTRhYWNjLi41YmUzZjQzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHU2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKQEAgLTQyLDcgKzQyLDkgQEAKIAlsdGdyCSVyNCwlcjQJCQkvKiBOZXcgc3RhY2sgPyAqLwogCWp6CTFmCiAJbGdyCSVyMTUsJXI0Ci0xOgliYXNyCSVyMTQsJXIyCisxOglsZ3IJJXIxNCwlcjIJCS8qIHIxNDogRnVuY3Rpb24gdG8gY2FsbCAqLworCWxncgklcjIsJXIzCQkJLyogcjIgOiBQYXJhbWV0ZXIgZm9yIGZ1bmN0aW9uKi8KKwliYXNyCSVyMTQsJXIxNAkJLyogQ2FsbCBmdW5jdGlvbiAqLwogCiAJLnNlY3Rpb24gLmRhdGEsImF3IixAcHJvZ2JpdHMKIC5ncHJyZWdzOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCA5ZTdiMDM5Li44N2JlNjU1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtNzI0LDcgKzcyNCw3IEBACiB9CiAKIC8qCi0gKiBTeW5jIHRoZSBUT0QgY2xvY2sgdXNpbmcgdGhlIHBvcnQgcmVmZXJlZCB0byBieSBhaWJwLiBUaGlzIHBvcnQKKyAqIFN5bmMgdGhlIFRPRCBjbG9jayB1c2luZyB0aGUgcG9ydCByZWZlcnJlZCB0byBieSBhaWJwLiBUaGlzIHBvcnQKICAqIGhhcyB0byBiZSBlbmFibGVkIGFuZCB0aGUgb3RoZXIgcG9ydCBoYXMgdG8gYmUgZGlzYWJsZWQuIFRoZQogICogbGFzdCBlYWNyIHVwZGF0ZSBoYXMgdG8gYmUgbW9yZSB0aGFuIDEuNiBzZWNvbmRzIGluIHRoZSBwYXN0LgogICovCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCQllYWNyID0gZXRyX2hhbmRsZV91cGRhdGUoJmFpYiwgZWFjcik7CiAKIAkvKgotCSAqIFNlbGVjdCBwb3J0cyB0byBlbmFibGUuIFRoZSBwcmVmZXJlZCBzeW5jaHJvbml6YXRpb24gbW9kZSBpcyBQUFMuCisJICogU2VsZWN0IHBvcnRzIHRvIGVuYWJsZS4gVGhlIHByZWZlcnJlZCBzeW5jaHJvbml6YXRpb24gbW9kZSBpcyBQUFMuCiAJICogSWYgYSBwb3J0IGNhbiBiZSBlbmFibGVkIGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdGhpbmdzOgogCSAqIDEpIFRoZSBwb3J0IG5lZWRzIHRvIGJlIG9ubGluZSBhbmQgdXB0b2RhdGUuIEEgcG9ydCBpcyBub3QKIAkgKiAgICBkaXNhYmxlZCBqdXN0IGJlY2F1c2UgaXQgaXMgbm90IHVwdG9kYXRlLCBidXQgaXQgaXMgb25seQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAKIAkvKgogCSAqIFVwZGF0ZSBlYWNyIGFuZCB0cnkgdG8gc3luY2hyb25pemUgdGhlIGNsb2NrLiBJZiB0aGUgdXBkYXRlCiAJICogb2YgZWFjciBjYXVzZWQgYSBzdGVwcGluZyBwb3J0IHN3aXRjaCAob3IgaWYgd2UgaGF2ZSB0bwotCSAqIGFzc3VtZSB0aGF0IGEgc3RlcHBpbmcgcG9ydCBzd2l0Y2ggaGFzIG9jY3VyZWQpIG9yIHRoZQorCSAqIGFzc3VtZSB0aGF0IGEgc3RlcHBpbmcgcG9ydCBzd2l0Y2ggaGFzIG9jY3VycmVkKSBvciB0aGUKIAkgKiBjbG9jayBzeW5jaW5nIGZhaWxlZCwgcmVzZXQgdGhlIHN5bmMgY2hlY2sgY29udHJvbCBiaXQKIAkgKiBhbmQgc2V0IHVwIGEgdGltZXIgdG8gdHJ5IGFnYWluIGFmdGVyIDAuNSBzZWNvbmRzCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKaW5kZXggMWNjZGY0ZC4uNWU4ZWFkNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwpAQCAtNDQsNyArNDQsNyBAQAogCV9fdTY0IHRpbWVyOwogCiAJYXNtIHZvbGF0aWxlICgiICBTVFBUICUwXG4iICAvKiBTdG9yZSBjdXJyZW50IGNwdSB0aW1lciB2YWx1ZSAqLwotCQkgICAgICAiICBTUFQgJTEiICAgICAvKiBTZXQgbmV3IHZhbHVlIGltbWVkaWF0bHkgYWZ0ZXJ3YXJkcyAqLworCQkgICAgICAiICBTUFQgJTEiICAgICAvKiBTZXQgbmV3IHZhbHVlIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgKi8KIAkJICAgICAgOiAiPW0iICh0aW1lcikgOiAibSIgKGV4cGlyZXMpICk7CiAJUzM5MF9sb3djb3JlLnN5c3RlbV90aW1lciArPSBTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXIgLSB0aW1lcjsKIAlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXIgPSBleHBpcmVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IGJhZGU1MzMuLjMwY2E4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYworKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTcyMSw3ICs3MjEsNyBAQAogCiAJLyoKIAkgKiBndWVzdHMgY2FuIGFzayBmb3IgdXAgdG8gMjU1KzEgZG91YmxlIHdvcmRzLCB3ZSBuZWVkIGEgZnVsbCBwYWdlCi0JICogdG8gaG9sZCB0aGUgbWF4aW11bSBhbW91bnQgb2YgZmFjaWxpdGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2UKKwkgKiB0byBob2xkIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBmYWNpbGl0aWVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2UKIAkgKiBvbmx5IHNldCBmYWNpbGl0aWVzIHRoYXQgYXJlIGtub3duIHRvIHdvcmsgaW4gS1ZNLgogCSAqLwogCWZhY2lsaXRpZXMgPSAodW5zaWduZWQgbG9uZyBsb25nICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMfEdGUF9ETUEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCA5MTk0YTRiLi43M2M0N2JkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAKIAkvKgogCSAqIGEgbG90IG9mIEIyIGluc3RydWN0aW9ucyBhcmUgcHJpdmlsZWRnZWQuIFdlIGZpcnN0IGNoZWNrIGZvcgotCSAqIHRoZSBwcml2aWxlZGdlcyBvbmVzLCB0aGF0IHdlIGNhbiBoYW5kbGUgaW4gdGhlIGtlcm5lbC4gSWYgdGhlCisJICogdGhlIHByaXZpbGVnZWQgb25lcywgdGhhdCB3ZSBjYW4gaGFuZGxlIGluIHRoZSBrZXJuZWwuIElmIHRoZQogCSAqIGtlcm5lbCBjYW4gaGFuZGxlIHRoaXMgaW5zdHJ1Y3Rpb24sIHdlIGNoZWNrIGZvciB0aGUgcHJvYmxlbQogCSAqIHN0YXRlIGJpdCBhbmQgKGEpIGhhbmRsZSB0aGUgaW5zdHJ1Y3Rpb24gb3IgKGIpIHNlbmQgYSBjb2RlIDIKIAkgKiBwcm9ncmFtIGNoZWNrLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKaW5kZXggN2U5ZDMwZC4uYWIwZTA0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUworKysgYi9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCkBAIC00OCwxMCArNDgsMTAgQEAKIAl0bQlfX1RJX2ZsYWdzKzcoJXIyKSxfVElGX0VYSVRfU0lFCiAJanoJMGYKIAlsYXJsCSVyMixzaWVfZXhpdAkJCSMgd29yayBwZW5kaW5nLCBsZWF2ZSBzaWUKLQlzdGcJJXIyLF9fTENfUkVUVVJOX1BTVys4CisJc3RnCSVyMixTUElfUFNXKzgoMCwlcjE1KQogCWJyCSVyMTQKIDA6CWxhcmwJJXIyLHNpZV9yZWVudGVyCQkJIyByZS1lbnRlciB3aXRoIGd1ZXN0IGlkCi0Jc3RnCSVyMixfX0xDX1JFVFVSTl9QU1crOAorCXN0ZwklcjIsU1BJX1BTVys4KDAsJXIxNSkKIDE6CWJyCSVyMTQKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9jbW0uYyBiL2FyY2gvczM5MC9tbS9jbW0uYwppbmRleCBjNjZmZmQ4Li4xZjFkYmE5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vY21tLmMKKysrIGIvYXJjaC9zMzkwL21tL2NtbS5jCkBAIC05MSw3ICs5MSw3IEBACiAJCQl9IGVsc2UKIAkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIG5wYSk7CiAJCX0KLQkJZGlhZzEwKGFkZHIpOworCQlkaWFnMTBfcmFuZ2UoYWRkciA+PiBQQUdFX1NISUZULCAxKTsKIAkJcGEtPnBhZ2VzW3BhLT5pbmRleCsrXSA9IGFkZHI7CiAJCSgqY291bnRlcikrKzsKIAkJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggMmM1NzgwNi4uYWI5ODgxMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTM5Miw3ICszOTIsNyBAQAogewogCWludCBmYXVsdDsKIAotCS8qIFByb3RlY3Rpb24gZXhjZXB0aW9uIGlzIHN1cHJlc3NpbmcsIGRlY3JlbWVudCBwc3cgYWRkcmVzcy4gKi8KKwkvKiBQcm90ZWN0aW9uIGV4Y2VwdGlvbiBpcyBzdXBwcmVzc2luZywgZGVjcmVtZW50IHBzdyBhZGRyZXNzLiAqLwogCXJlZ3MtPnBzdy5hZGRyIC09IChwZ21faW50X2NvZGUgPj4gMTYpOwogCS8qCiAJICogQ2hlY2sgZm9yIGxvdy1hZGRyZXNzIHByb3RlY3Rpb24uICBUaGlzIG5lZWRzIHRvIGJlIHRyZWF0ZWQKQEAgLTU0Myw3ICs1NDMsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCV9fdTE2IHN1YmNvZGU7CiAKLQlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9QRkxdKys7CiAJLyoKIAkgKiBHZXQgdGhlIGV4dGVybmFsIGludGVycnVwdGlvbiBzdWJjb2RlICYgcGZhdWx0CiAJICogaW5pdGlhbC9jb21wbGV0aW9uIHNpZ25hbCBiaXQuIFZNIHN0b3JlcyB0aGlzIApAQCAtNTUzLDE0ICs1NTIsMTUgQEAKIAlzdWJjb2RlID0gZXh0X2ludF9jb2RlID4+IDE2OwogCWlmICgoc3ViY29kZSAmIDB4ZmYwMCkgIT0gX19TVUJDT0RFX01BU0spCiAJCXJldHVybjsKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9QRkxdKys7CiAKIAkvKgogCSAqIEdldCB0aGUgdG9rZW4gKD0gYWRkcmVzcyBvZiB0aGUgdGFzayBzdHJ1Y3R1cmUgb2YgdGhlIGFmZmVjdGVkIHRhc2spLgogCSAqLwogI2lmZGVmIENPTkZJR182NEJJVAotCXRzayA9ICooc3RydWN0IHRhc2tfc3RydWN0ICoqKSBwYXJhbTY0OworCXRzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikgcGFyYW02NDsKICNlbHNlCi0JdHNrID0gKihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiopIHBhcmFtMzI7CisJdHNrID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKSBwYXJhbTMyOwogI2VuZGlmCiAKIAlpZiAoc3ViY29kZSAmIDB4MDA4MCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMgYi9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYwppbmRleCAxMjJmZmJkLi4wNjA3ZTRiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYwpAQCAtMjQsMTIgKzI0LDEzIEBACiAJCQlXQVJOX09OX09OQ0UoMSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkciArIGkgKiBQQUdFX1NJWkUpOworCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7CiAKIAkJcHRlID0gKnB0ZXA7CiAJCXB0ZSA9IHNldChwdGUpOwotCQlwdGVwX2ludmFsaWRhdGUoJmluaXRfbW0sIGFkZHIgKyBpICogUEFHRV9TSVpFLCBwdGVwKTsKKwkJcHRlcF9pbnZhbGlkYXRlKCZpbml0X21tLCBhZGRyLCBwdGVwKTsKIAkJKnB0ZXAgPSBwdGU7CisJCWFkZHIgKz0gUEFHRV9TSVpFOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jIGIvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jCmluZGV4IDNkNDhmNGQuLjMzY2JkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuYworKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMKQEAgLTUxNywxMiArNTE3LDggQEAKIAogc3RhdGljIGludCBjaGVja19oYXJkd2FyZV9wcmVyZXF1aXNpdGVzKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGZhY2lsaXR5X2JpdHNbMl07Ci0KLQltZW1jcHkoZmFjaWxpdHlfYml0cywgUzM5MF9sb3djb3JlLnN0ZmxlX2ZhY19saXN0LCAzMik7Ci0JaWYgKCEoZmFjaWxpdHlfYml0c1sxXSAmICgxVUxMIDw8IDU5KSkpCisJaWYgKCF0ZXN0X2ZhY2lsaXR5KDY4KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJcmV0dXJuIDA7CiB9CiAvKgpAQCAtMTAyNSwyMCArMTAyMSwxNCBAQAogCXJldHVybiByYzsKIH0KIAotbG9uZyBod3NhbXBsZXJfcXVlcnlfbWluX2ludGVydmFsKHZvaWQpCit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwodm9pZCkKIHsKLQlpZiAobWluX3NhbXBsZXJfcmF0ZSkKLQkJcmV0dXJuIG1pbl9zYW1wbGVyX3JhdGU7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gbWluX3NhbXBsZXJfcmF0ZTsKIH0KIAotbG9uZyBod3NhbXBsZXJfcXVlcnlfbWF4X2ludGVydmFsKHZvaWQpCit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwodm9pZCkKIHsKLQlpZiAobWF4X3NhbXBsZXJfcmF0ZSkKLQkJcmV0dXJuIG1heF9zYW1wbGVyX3JhdGU7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gbWF4X3NhbXBsZXJfcmF0ZTsKIH0KIAogdW5zaWduZWQgbG9uZyBod3NhbXBsZXJfZ2V0X3NhbXBsZV9vdmVyZmxvd19jb3VudCh1bnNpZ25lZCBpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5oIGIvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5oCmluZGV4IDhjNzJiNTkuLjE5MTJmM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuaAorKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmgKQEAgLTEwMiw4ICsxMDIsOCBAQAogaW50IGh3c2FtcGxlcl9zaHV0ZG93bih2b2lkKTsKIGludCBod3NhbXBsZXJfYWxsb2NhdGUodW5zaWduZWQgbG9uZyBzZGJ0LCB1bnNpZ25lZCBsb25nIHNkYik7CiBpbnQgaHdzYW1wbGVyX2RlYWxsb2NhdGUodm9pZCk7Ci1sb25nIGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwodm9pZCk7Ci1sb25nIGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwodm9pZCk7Cit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwodm9pZCk7Cit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwodm9pZCk7CiBpbnQgaHdzYW1wbGVyX3N0YXJ0X2FsbCh1bnNpZ25lZCBsb25nIGludGVydmFsKTsKIGludCBod3NhbXBsZXJfc3RvcF9hbGwodm9pZCk7CiBpbnQgaHdzYW1wbGVyX2RlYWN0aXZhdGUodW5zaWduZWQgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zMzkwL29wcm9maWxlL2luaXQuYwppbmRleCBjNjNkN2U1Li41OTk1ZTliIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaW5pdC5jCisrKyBiL2FyY2gvczM5MC9vcHJvZmlsZS9pbml0LmMKQEAgLTE0NSwxNSArMTQ1LDExIEBACiAJICogY3JlYXRlIGh3c2FtcGxlciBmaWxlcyBvbmx5IGlmIGh3c2FtcGxlcl9zZXR1cCgpIHN1Y2NlZWRzLgogCSAqLwogCW9wcm9maWxlX21pbl9pbnRlcnZhbCA9IGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwoKTsKLQlpZiAob3Byb2ZpbGVfbWluX2ludGVydmFsIDwgMCkgewotCQlvcHJvZmlsZV9taW5faW50ZXJ2YWwgPSAwOworCWlmIChvcHJvZmlsZV9taW5faW50ZXJ2YWwgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCW9wcm9maWxlX21heF9pbnRlcnZhbCA9IGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwoKTsKLQlpZiAob3Byb2ZpbGVfbWF4X2ludGVydmFsIDwgMCkgewotCQlvcHJvZmlsZV9tYXhfaW50ZXJ2YWwgPSAwOworCWlmIChvcHJvZmlsZV9tYXhfaW50ZXJ2YWwgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJaWYgKG9wcm9maWxlX3RpbWVyX2luaXQob3BzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL01ha2VmaWxlIGIvYXJjaC9zY29yZS9NYWtlZmlsZQppbmRleCBkNzdkYzYzLi45NzRhZWZlIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL01ha2VmaWxlCisrKyBiL2FyY2gvc2NvcmUvTWFrZWZpbGUKQEAgLTQwLDUgKzQwLDUgQEAKIGRlZmluZSBhcmNoaGVscAogCWVjaG8gJyAgdm1saW51eC5iaW4gICAgICAgICAgLSBSYXcgYmluYXJ5IGJvb3QgaW1hZ2UnCiAJZWNobwotCWVjaG8gJyAgVGhlc2Ugd2lsbCBiZSBkZWZhdWx0IGFzIGFwcm9wcmlhdGUgZm9yIGEgY29uZmlndXJlZCBwbGF0Zm9ybS4nCisJZWNobyAnICBUaGVzZSB3aWxsIGJlIGRlZmF1bHQgYXMgYXBwcm9wcmlhdGUgZm9yIGEgY29uZmlndXJlZCBwbGF0Zm9ybS4nCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGJjNDM5ZGUuLjRiODlkYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTI0LDYgKzI0LDcgQEAKIAlzZWxlY3QgUlRDX0xJQgogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0CiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKKwlzZWxlY3QgQVJDSF9OT19TWVNERVZfT1BTCiAJaGVscAogCSAgVGhlIFN1cGVySCBpcyBhIFJJU0MgcHJvY2Vzc29yIHRhcmdldGVkIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcwogCSAgYW5kIGNvbnN1bWVyIGVsZWN0cm9uaWNzOyBpdCB3YXMgYWxzbyB1c2VkIGluIHRoZSBTZWdhIERyZWFtY2FzdApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnIGIvYXJjaC9zaC9LY29uZmlnLmRlYnVnCmluZGV4IDEyZmVjNzIuLjE1NTNkNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKQEAgLTgyLDcgKzgyLDcgQEAKIAloZWxwCiAJICBJZiBydW5uaW5nIGluIHBhaW5mdWxseSBzbG93IGVudmlyb25tZW50cywgc3VjaCBhcyBhbiBSVEwKIAkgIHNpbXVsYXRpb24gb3IgZnJvbSByZW1vdGUgbWVtb3J5IHZpYSBTSGRlYnVnLCB3aGVyZSB0aGUgbWVtb3J5Ci0JICBjYW4gYWxyZWFkeSBiZSBnYXVyYW50ZWVkIHRvIGJlciB6ZXJvZWQgb24gYm9vdCwgc2F5IFkuCisJICBjYW4gYWxyZWFkeSBiZSBndWFyYW50ZWVkIHRvIGJlciB6ZXJvZWQgb24gYm9vdCwgc2F5IFkuCiAKIAkgIEZvciBhbGwgb3RoZXIgY2FzZXMsIHNheSBOLiBJZiB0aGlzIG9wdGlvbiBzZWVtcyBwZXJwbGV4aW5nLCBvcgogCSAgeW91IGFyZW4ndCBzdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc1N2xjci5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3NzU3bGNyLmMKaW5kZXggYTllMzM1Ni4uZmEyYTIwOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3NzU3bGNyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3NzU3bGNyLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NoX21tY2lmLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3NoX21vYmlsZV9zZGhpLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NoX21vYmlsZV9zZGhpLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzc1Ny5oPgogI2luY2x1ZGUgPGFzbS9zaF9ldGguaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKaW5kZXggNjM2ZDgzMS4uNjE4YmQ1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwpAQCAtMTU2LDI0ICsxNTYsMzQgQEAKICNkZWZpbmUgUE9SVF9EUlZDUkEJMHhBNDA1MDE4QQogI2RlZmluZSBQT1JUX0RSVkNSQgkweEE0MDUwMThDCiAKK3N0YXRpYyBpbnQgYXAzMjBfd3ZnYV9zZXRfYnJpZ2h0bmVzcyh2b2lkICpib2FyZF9kYXRhLCBpbnQgYnJpZ2h0bmVzcykKK3sKKwlpZiAoYnJpZ2h0bmVzcykgeworCQlncGlvX3NldF92YWx1ZShHUElPX1BUUzMsIDApOworCQlfX3Jhd193cml0ZXcoMHgxMDAsIEZQR0FfQktMUkVHKTsKKwl9IGVsc2UgeworCQlfX3Jhd193cml0ZXcoMCwgRlBHQV9CS0xSRUcpOworCQlncGlvX3NldF92YWx1ZShHUElPX1BUUzMsIDEpOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcDMyMF93dmdhX2dldF9icmlnaHRuZXNzKHZvaWQgKmJvYXJkX2RhdGEpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRTMyk7Cit9CisKIHN0YXRpYyB2b2lkIGFwMzIwX3d2Z2FfcG93ZXJfb24odm9pZCAqYm9hcmRfZGF0YSwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJbXNsZWVwKDEwMCk7CiAKIAkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT04gKi8KIAlfX3Jhd193cml0ZXcoRlBHQV9MQ0RSRUdfVkFMLCBGUEdBX0xDRFJFRyk7Ci0KLQkvKiBiYWNrbGlnaHQgKi8KLQlncGlvX3NldF92YWx1ZShHUElPX1BUUzMsIDApOwotCV9fcmF3X3dyaXRldygweDEwMCwgRlBHQV9CS0xSRUcpOwogfQogCiBzdGF0aWMgdm9pZCBhcDMyMF93dmdhX3Bvd2VyX29mZih2b2lkICpib2FyZF9kYXRhKQogewotCS8qIGJhY2tsaWdodCAqLwotCV9fcmF3X3dyaXRldygwLCBGUEdBX0JLTFJFRyk7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAxKTsKLQogCS8qIEFTRCBBUC0zMjAvMzI1IExDRCBPRkYgKi8KIAlfX3Jhd193cml0ZXcoMCwgRlBHQV9MQ0RSRUcpOwogfQpAQCAtMjA5LDYgKzIxOSwxMiBAQAogCQkuYm9hcmRfY2ZnID0gewogCQkJLmRpc3BsYXlfb24gPSBhcDMyMF93dmdhX3Bvd2VyX29uLAogCQkJLmRpc3BsYXlfb2ZmID0gYXAzMjBfd3ZnYV9wb3dlcl9vZmYsCisJCQkuc2V0X2JyaWdodG5lc3MgPSBhcDMyMF93dmdhX3NldF9icmlnaHRuZXNzLAorCQkJLmdldF9icmlnaHRuZXNzID0gYXAzMjBfd3ZnYV9nZXRfYnJpZ2h0bmVzcywKKwkJfSwKKwkJLmJsX2luZm8gPSB7CisJCQkubmFtZSA9ICJzaF9tb2JpbGVfbGNkY19ibCIsCisJCQkubWF4X2JyaWdodG5lc3MgPSAxLAogCQl9LAogCX0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCmluZGV4IDc4Y2YyYWIuLmY2M2QzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCkBAIC01MSw3ICs1MSw3IEBACiAgKi8KICNkZWZpbmUgTEVWRUwoZXZlbnQpICgoKGV2ZW50KSAtIEhXX0VWRU5UX0lSUV9CQVNFKSAvIDMyKQogCi0vKiBSZXR1cm4gdGhlIGhhcmR3YXJlIGV2ZW50J3MgYml0IHBvc2l0b24gd2l0aGluIHRoZSBFTVIvRVNSICovCisvKiBSZXR1cm4gdGhlIGhhcmR3YXJlIGV2ZW50J3MgYml0IHBvc2l0aW9uIHdpdGhpbiB0aGUgRU1SL0VTUiAqLwogI2RlZmluZSBFVkVOVF9CSVQoZXZlbnQpICgoKGV2ZW50KSAtIEhXX0VWRU5UX0lSUV9CQVNFKSAmIDMxKQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCmluZGV4IGZkNGZmMjUuLjg2YTBkNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKQEAgLTI2Myw2ICsyNjMsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIGludCBlY292ZWMyNF9zZXRfYnJpZ2h0bmVzcyh2b2lkICpib2FyZF9kYXRhLCBpbnQgYnJpZ2h0bmVzcykKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX1BUUjEsIGJyaWdodG5lc3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWNvdmVjMjRfZ2V0X2JyaWdodG5lc3Modm9pZCAqYm9hcmRfZGF0YSkKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19QVFIxKTsKK30KKwogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGNfaW5mbyA9IHsKIAkuY2hbMF0gPSB7CiAJCS5pbnRlcmZhY2VfdHlwZSA9IFJHQjE4LApAQCAtMjczLDYgKzI4NSwxMiBAQAogCQkJLmhlaWdodCA9IDkxLAogCQl9LAogCQkuYm9hcmRfY2ZnID0geworCQkJLnNldF9icmlnaHRuZXNzID0gZWNvdmVjMjRfc2V0X2JyaWdodG5lc3MsCisJCQkuZ2V0X2JyaWdodG5lc3MgPSBlY292ZWMyNF9nZXRfYnJpZ2h0bmVzcywKKwkJfSwKKwkJLmJsX2luZm8gPSB7CisJCQkubmFtZSA9ICJzaF9tb2JpbGVfbGNkY19ibCIsCisJCQkubWF4X2JyaWdodG5lc3MgPSAxLAogCQl9LAogCX0KIH07CkBAIC05MzYsNyArOTU0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIHJlYWQgTUFDIGFkZHJlc3MgZnJvbWUgRUVQUk9NICovCisJLyogcmVhZCBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTSAqLwogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocGQtPm1hY19hZGRyKTsgaSsrKSB7CiAJCXBkLT5tYWNfYWRkcltpXSA9IG1hY19yZWFkKGEsIDB4MTAgKyBpKTsKIAkJbXNsZWVwKDEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKaW5kZXggOTQxODZjZi4uZjExNDdjYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIHZvaWQgbGFuZGlza19wb3dlcl9vZmYodm9pZCkKIHsKLSAgICAgICAgX19yYXdfd3JpdGViKDB4MDEsIFBBX1NIVVRET1dOKTsKKwlfX3Jhd193cml0ZWIoMHgwMSwgUEFfU0hVVERPV04pOwogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNmX2lkZV9yZXNvdXJjZXNbM107CkBAIC04NSw3ICs4NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBsYW5kaXNrX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0gICAgICAgIC8qIExFRCBPTiAqLworCS8qIExFRCBPTiAqLwogCV9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihQQV9MRUQpIHwgMHgwMywgUEFfTEVEKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkktTyBEQVRBIERFVklDRSwgSU5DLiBcIkxBTkRJU0sgU2VyaWVzXCIgc3VwcG9ydC5cbiIpOwpAQCAtOTcsNyArOTcsNiBAQAogICovCiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2xhbmRpc2sgX19pbml0bXYgPSB7CiAJLm12X25hbWUgPSAiTEFORElTSyIsCi0JLm12X25yX2lycXMgPSA3MiwKIAkubXZfc2V0dXAgPSBsYW5kaXNrX3NldHVwLAogCS5tdl9pbml0X2lycSA9IGluaXRfbGFuZGlza19JUlEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmggYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuaAppbmRleCA0OTgzYTRkLi41ZWRlMzhjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuaApAQCAtNjEsNyArNjEsNyBAQAogICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GM19CSVNUNyAgICAgIDB4ODAwMDAwMDAgIC8qIEJpc3QgU3VwcG9ydGVkICovCiAgICNkZWZpbmUgU0g3NzUxX1BDSUNPTkYzX0JJU1Q2ICAgICAgMHg0MDAwMDAwMCAgLyogQmlzdCBFeGVjdXRpbmcgKi8KICAgI2RlZmluZSBTSDc3NTFfUENJQ09ORjNfQklTVDNfMCAgICAweDBGMDAwMDAwICAvKiBCaXN0IFBhc3NlZCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GM19IRDcgICAgICAgIDB4MDA4MDAwMDAgIC8qIFNpbmdsZSBGdW50aW9uIGRldmljZSAqLworICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GM19IRDcgICAgICAgIDB4MDA4MDAwMDAgIC8qIFNpbmdsZSBGdW5jdGlvbiBkZXZpY2UgKi8KICAgI2RlZmluZSBTSDc3NTFfUENJQ09ORjNfSEQ2XzAgICAgICAweDAwN0YwMDAwICAvKiBDb25maWd1cmF0aW9uIExheW91dCAqLwogICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GM19MQVQgICAgICAgIDB4MDAwMEZGMDAgIC8qIExhdGVuY3kgVGltZXIgKi8KICAgI2RlZmluZSBTSDc3NTFfUENJQ09ORjNfQ0xTICAgICAgICAweDAwMDAwMEZGICAvKiBDYWNoZSBMaW5lIFNpemUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGEwOWM3N2QuLjE5NDIzMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtODQsNyArODQsNyBAQAogCWhvc2VfdGFpbCA9ICZob3NlLT5uZXh0OwogCiAJLyoKLQkgKiBEbyBub3QgcGFuaWMgaGVyZSBidXQgbGF0ZXIgLSB0aGlzIG1pZ2h0IGhhcGVuIGJlZm9yZSBjb25zb2xlIGluaXQuCisJICogRG8gbm90IHBhbmljIGhlcmUgYnV0IGxhdGVyIC0gdGhpcyBtaWdodCBoYXBwZW4gYmVmb3JlIGNvbnNvbGUgaW5pdC4KIAkgKi8KIAlpZiAoIWhvc2UtPmlvX21hcF9iYXNlKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggYzRlMGIzZC4uODIyZDYwOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTE4Niw3ICsxODYsNyBAQAogLyoKICAqIFdoaWxlIEJZVEVTX1BFUl9XT1JEID09IDQgb24gdGhlIGN1cnJlbnQgc2g2NCBBQkksIEdDQyB3aWxsIHN0aWxsCiAgKiBoYXBwaWx5IGdlbmVyYXRlIHtsZC9zdH0ucSBwYWlycywgcmVxdWlyaW5nIHVzIHRvIGhhdmUgOC1ieXRlCi0gKiBhbGlnbm1lbnQgdG8gYXZvaWQgdHJhcHMuIFRoZSBrbWFsbG9jIGFsaWdubWVudCBpcyBnYXVyYW50ZWVkIGJ5CisgKiBhbGlnbm1lbnQgdG8gYXZvaWQgdHJhcHMuIFRoZSBrbWFsbG9jIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5CiAgKiB2aXJ0dWUgb2YgTDFfQ0FDSEVfQllURVMsIHJlcXVpcmluZyB0aGlzIHRvIG9ubHkgYmUgc3BlY2lhbCBjYXNlZAogICogZm9yIHNsYWIgY2FjaGVzLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IGI3OTlmZTcuLjBiY2UzZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0xNjcsNyArMTY3LDcgQEAKICNlbmRpZgogCiAvKgotICogTWFzayBvZiBiaXRzIHRoYXQgYXJlIHRvIGJlIHByZXNlcnZlZCBhY2Nyb3NzIHBncHJvdCBjaGFuZ2VzLgorICogTWFzayBvZiBiaXRzIHRoYXQgYXJlIHRvIGJlIHByZXNlcnZlZCBhY3Jvc3MgcGdwcm90IGNoYW5nZXMuCiAgKi8KICNkZWZpbmUgX1BBR0VfQ0hHX01BU0sgXAogCShQVEVfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ0FDSEFCTEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC1zaDRhLmgKaW5kZXggYzQ4YTljMy4uOTVhZGM1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmFsaWduZWQtc2g0YS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5hbGlnbmVkLXNoNGEuaApAQCAtOSw3ICs5LDcgQEAKICAqIHN0cnVjdC4KICAqCiAgKiBUaGUgc2FtZSBub3RlIGFzIHdpdGggdGhlIG1vdmxpLmwvbW92Y28ubCBwYWlyIGFwcGxpZXMgaGVyZSwgYXMgbG9uZwotICogYXMgdGhlIGxvYWQgaXMgZ2F1cmFudGVlZCB0byBiZSBpbmxpbmVkLCBub3RoaW5nIGVsc2Ugd2lsbCBob29rIGluIHRvCisgKiBhcyB0aGUgbG9hZCBpcyBndWFyYW50ZWVkIHRvIGJlIGlubGluZWQsIG5vdGhpbmcgZWxzZSB3aWxsIGhvb2sgaW4gdG8KICAqIHIwIGFuZCB3ZSBnZXQgdGhlIHJldHVybiB2YWx1ZSBmb3IgZnJlZS4KICAqCiAgKiBOT1RFOiBEdWUgdG8gdGhlIGZhY3Qgd2UgcmVxdWlyZSByMCBlbmNvZGluZywgY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hpZ2hsYW5kZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hpZ2hsYW5kZXIuaAppbmRleCA1ZDlkNGQ1Li42Y2U5NDRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaGlnaGxhbmRlci5oCkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIFBBX09CTEVEICAgICAgICAoUEFfQkNSKzB4MDAxYykgLyogT24gQm9hcmQgTEVEIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfT0JTVyAgICAgICAgIChQQV9CQ1IrMHgwMDFlKSAvKiBPbiBCb2FyZCBTd2l0Y2ggY29udHJvbCAqLwogI2RlZmluZSBQQV9BVURJT1NFTCAgICAgKFBBX0JDUisweDAwMjApIC8qIFNvdW5kIEludGVyZmFjZSBTZWxlY3QgY29udHJvbCAqLwotI2RlZmluZSBQQV9FWFRQTFIgICAgICAgKFBBX0JDUisweDAwMWUpIC8qIEV4dGVudGlvbiBQaW4gUG9sYXJpdHkgY29udHJvbCAqLworI2RlZmluZSBQQV9FWFRQTFIgICAgICAgKFBBX0JDUisweDAwMWUpIC8qIEV4dGVuc2lvbiBQaW4gUG9sYXJpdHkgY29udHJvbCAqLwogI2RlZmluZSBQQV9UUENUTCAgICAgICAgKFBBX0JDUisweDAxMDApIC8qIFRvdWNoIFBhbmVsIEFjY2VzcyBjb250cm9sICovCiAjZGVmaW5lIFBBX1RQRENLQ1RMICAgICAoUEFfQkNSKzB4MDEwMikgLyogVG91Y2ggUGFuZWwgQWNjZXNzIGRhdGEgY29udHJvbCAqLwogI2RlZmluZSBQQV9UUENUTENMUiAgICAgKFBBX0JDUisweDAxMDQpIC8qIFRvdWNoIFBhbmVsIEFjY2VzcyBjb250cm9sICovCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIFBBX09CTEVECShQQV9CQ1IrMHgwMDE4KQkvKiBPbiBCb2FyZCBMRUQgY29udHJvbCAqLwogI2RlZmluZSBQQV9PQlNXCQkoUEFfQkNSKzB4MDAxYSkJLyogT24gQm9hcmQgU3dpdGNoIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfQVVESU9TRUwJKFBBX0JDUisweDAwMWMpCS8qIFNvdW5kIEludGVyZmFjZSBTZWxlY3QgY29udHJvbCAqLwotI2RlZmluZSBQQV9FWFRQTFIJKFBBX0JDUisweDAwMWUpCS8qIEV4dGVudGlvbiBQaW4gUG9sYXJpdHkgY29udHJvbCAqLworI2RlZmluZSBQQV9FWFRQTFIJKFBBX0JDUisweDAwMWUpCS8qIEV4dGVuc2lvbiBQaW4gUG9sYXJpdHkgY29udHJvbCAqLwogI2RlZmluZSBQQV9UUENUTAkoUEFfQkNSKzB4MDEwMCkJLyogVG91Y2ggUGFuZWwgQWNjZXNzIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfVFBEQ0tDVEwJKFBBX0JDUisweDAxMDIpCS8qIFRvdWNoIFBhbmVsIEFjY2VzcyBkYXRhIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfVFBDVExDTFIJKFBBX0JDUisweDAxMDQpCS8qIFRvdWNoIFBhbmVsIEFjY2VzcyBjb250cm9sICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9yMmQuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3IyZC5oCmluZGV4IDBhODAwMTUuLmUwNGY3NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3IyZC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3IyZC5oCkBAIC0xOCwxOCArMTgsMTggQEAKICNkZWZpbmUgUEFfRElTUENUTAkweGE0MDAwMDA4CS8qIERpc3BsYXkgVGltaW5nIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfU0RNUE9XCTB4YTQwMDAwMGEJLyogU0QgUG93ZXIgY29udHJvbCAqLwogI2RlZmluZSBQQV9SVENDRQkweGE0MDAwMDBjCS8qIFJUQyg5NzAxKSBFbmFibGUgY29udHJvbCAqLwotI2RlZmluZSBQQV9QQ0lDRAkweGE0MDAwMDBlCS8qIFBDSSBFeHRlbnRpb24gZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfUENJQ0QJMHhhNDAwMDAwZQkvKiBQQ0kgRXh0ZW5zaW9uIGRldGVjdCBjb250cm9sICovCiAjZGVmaW5lIFBBX1ZPWUFHRVJSVFMJMHhhNDAwMDAyMAkvKiBWT1lBR0VSIFJlc2V0IGNvbnRyb2wgKi8KIAogI2RlZmluZSBQQV9SMkQxX0FYUlNUCQkweGE0MDAwMDIyCS8qIEFYX0xBTiBSZXNldCBjb250cm9sICovCiAjZGVmaW5lIFBBX1IyRDFfQ0ZSU1QJCTB4YTQwMDAwMjQJLyogQ0YgUmVzZXQgY29udHJvbCAqLwogI2RlZmluZSBQQV9SMkQxX0FETVJUUwkJMHhhNDAwMDAyNgkvKiBTRCBSZXNldCBjb250cm9sICovCi0jZGVmaW5lIFBBX1IyRDFfRVhUUlNUCQkweGE0MDAwMDI4CS8qIEV4dGVudGlvbiBSZXNldCBjb250cm9sICovCisjZGVmaW5lIFBBX1IyRDFfRVhUUlNUCQkweGE0MDAwMDI4CS8qIEV4dGVuc2lvbiBSZXNldCBjb250cm9sICovCiAjZGVmaW5lIFBBX1IyRDFfQ0ZDRElOVENMUgkweGE0MDAwMDJhCS8qIENGIEluc2VydCBJbnRlcnJ1cHQgY2xlYXIgKi8KIAogI2RlZmluZSBQQV9SMkRQTFVTX0NGUlNUCTB4YTQwMDAwMjIJLyogQ0YgUmVzZXQgY29udHJvbCAqLwogI2RlZmluZSBQQV9SMkRQTFVTX0FETVJUUwkweGE0MDAwMDI0CS8qIFNEIFJlc2V0IGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfUjJEUExVU19FWFRSU1QJMHhhNDAwMDAyNgkvKiBFeHRlbnRpb24gUmVzZXQgY29udHJvbCAqLworI2RlZmluZSBQQV9SMkRQTFVTX0VYVFJTVAkweGE0MDAwMDI2CS8qIEV4dGVuc2lvbiBSZXNldCBjb250cm9sICovCiAjZGVmaW5lIFBBX1IyRFBMVVNfQ0ZDRElOVENMUgkweGE0MDAwMDI4CS8qIENGIEluc2VydCBJbnRlcnJ1cHQgY2xlYXIgKi8KICNkZWZpbmUgUEFfUjJEUExVU19LRVlDVExDTFIJMHhhNDAwMDAyYQkvKiBLZXkgSW50ZXJydXB0IGNsZWFyICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYwppbmRleCBkZDBlMGYyLi44ZjYzYTI2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCkBAIC02Nyw3ICs2Nyw3IEBACiB9CiAKIC8qCi0gKiBQbGFjZWhvbGRlciBmb3IgY29tcGF0YWJpbGl0eSwgdW50aWwgdGhlIGxhenkgQ1BVcyBkbyB0aGlzCisgKiBQbGFjZWhvbGRlciBmb3IgY29tcGF0aWJpbGl0eSwgdW50aWwgdGhlIGxhenkgQ1BVcyBkbyB0aGlzCiAgKiBvbiB0aGVpciBvd24uCiAgKi8KIGludCBfX2luaXQgX193ZWFrIGFyY2hfY2xrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKaW5kZXggMTY1NmI4Yy4uYmViYTMyYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKQEAgLTY0OCw3ICs2NDgsNyBAQAogCSAqIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIG5lY2Vzc2FyeQogCSAqIGZvciB1c2luZyB0aGUgVVNCIG1vZHVsZXMuCiAJICoKLQkgKiBzZWUgIlVTQiBJbml0YWwgU2V0dGluZ3MiIGZvciBkZXRhaWwKKwkgKiBzZWUgIlVTQiBJbml0aWFsIFNldHRpbmdzIiBmb3IgZGV0YWlsCiAJICovCiAJX19yYXdfd3JpdGVsKFVTQklOSVRWQUwxLCBVU0JJTklUUkVHMSk7CiAJX19yYXdfd3JpdGVsKFVTQklOSVRWQUwyLCBVU0JJTklUUkVHMik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDY0ZWEwYjEuLjkxOTcxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJKTsKIAogCQkvKgotCQkgKiBTaG91bGRudCBoYXBwZW4sIHdlIHJldHVybmVkIGFib3ZlIGlmIGluX2ludGVycnVwdCgpOgorCQkgKiBTaG91bGRuJ3QgaGFwcGVuLCB3ZSByZXR1cm5lZCBhYm92ZSBpZiBpbl9pbnRlcnJ1cHQoKToKIAkJICovCiAJCVdBUk5fT05fT05DRShzb2Z0aXJxX2NvdW50KCkpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKaW5kZXggMjEzMGNhNi4uM2Q3YjIwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKQEAgLTExNyw3ICsxMTcsMTEgQEAKIAogCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKIAorCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKGNoaWxkKSA8IDApCisJCXJldHVybjsKKwogCXNldF9zaW5nbGVfc3RlcChjaGlsZCwgcGMpOworCXB0cmFjZV9wdXRfYnJlYWtwb2ludHMoY2hpbGQpOwogfQogCiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggNGYyNjcxNi4uNThiZmY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAl9CiAKIAkvKgotCSAqIElmIHdlIGdvdCB0aGlzIGZhciBpbnNwaXRlIG9mIHRoZSBib290IGxvYWRlcidzIGJlc3QgZWZmb3J0cworCSAqIElmIHdlIGdvdCB0aGlzIGZhciBpbiBzcGl0ZSBvZiB0aGUgYm9vdCBsb2FkZXIncyBiZXN0IGVmZm9ydHMKIAkgKiB0byB0aGUgY29udHJhcnksIGFzc3VtZSB3ZSBhY3R1YWxseSBoYXZlIGEgdmFsaWQgaW5pdHJkIGFuZAogCSAqIGZpeCB1cCB0aGUgcm9vdCBkZXYuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYjY0L2NvcHlfdXNlcl9tZW1jcHkuUyBiL2FyY2gvc2gvbGliNjQvY29weV91c2VyX21lbWNweS5TCmluZGV4IDJhNjI4MTYuLjQ5YWVhYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliNjQvY29weV91c2VyX21lbWNweS5TCisrKyBiL2FyY2gvc2gvbGliNjQvY29weV91c2VyX21lbWNweS5TCkBAIC0yNyw3ICsyNyw3IEBACiAhIDIuOiBXaGVuIHRoZXJlIGFyZSB0d28gb3IgdGhyZWUgYnl0ZXMgaW4gdGhlIGxhc3Qgd29yZCBvZiBhbiAxMS1vci1tb3JlCiAhICAgICBieXRlcyBtZW1vcnkgY2h1bmsgdG8gYiBjb3BpZWQsIHRoZSByZXN0IG9mIHRoZSB3b3JkIGNhbiBiZSByZWFkCiAhICAgICB3aXRob3V0IHNpZGUgZWZmZWN0cy4KLSEgICAgIFRoaXMgY291bGQgYmUgZWFzaWx5IGNoYW5nZWQgYnkgaW5jcmVhc2luZyB0aGUgbWludW11bSBzaXplIG9mCishICAgICBUaGlzIGNvdWxkIGJlIGVhc2lseSBjaGFuZ2VkIGJ5IGluY3JlYXNpbmcgdGhlIG1pbmltdW0gc2l6ZSBvZgogISAgICAgYSBmYXN0IG1lbWNweSBhbmQgdGhlIGFtb3VudCBzdWJ0cmFjdGVkIGZyb20gcjcgYmVmb3JlIExfMmxfbG9vcCBiZSAyLAogISAgICAgaG93ZXZlciwgdGhpcyB3b3VsZCBjb3N0IGEgZmV3IGV4dHJhIGN5bGVzIG9uIGF2ZXJhZ2UuCiAhICAgICBGb3IgU0htZWRpYSwgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBhbnkgcXVhZHdvcmQgY2FuIGJlIHJlYWQgaW4gaXRzCmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYjY0L21lbWNweS5TIGIvYXJjaC9zaC9saWI2NC9tZW1jcHkuUwppbmRleCBkZDMwMGMzLi41ZDY4MmUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYjY0L21lbWNweS5TCisrKyBiL2FyY2gvc2gvbGliNjQvbWVtY3B5LlMKQEAgLTI5LDcgKzI5LDcgQEAKICEgMi46IFdoZW4gdGhlcmUgYXJlIHR3byBvciB0aHJlZSBieXRlcyBpbiB0aGUgbGFzdCB3b3JkIG9mIGFuIDExLW9yLW1vcmUKICEgICAgIGJ5dGVzIG1lbW9yeSBjaHVuayB0byBiIGNvcGllZCwgdGhlIHJlc3Qgb2YgdGhlIHdvcmQgY2FuIGJlIHJlYWQKICEgICAgIHdpdGhvdXQgc2lkZSBlZmZlY3RzLgotISAgICAgVGhpcyBjb3VsZCBiZSBlYXNpbHkgY2hhbmdlZCBieSBpbmNyZWFzaW5nIHRoZSBtaW51bXVtIHNpemUgb2YKKyEgICAgIFRoaXMgY291bGQgYmUgZWFzaWx5IGNoYW5nZWQgYnkgaW5jcmVhc2luZyB0aGUgbWluaW11bSBzaXplIG9mCiAhICAgICBhIGZhc3QgbWVtY3B5IGFuZCB0aGUgYW1vdW50IHN1YnRyYWN0ZWQgZnJvbSByNyBiZWZvcmUgTF8ybF9sb29wIGJlIDIsCiAhICAgICBob3dldmVyLCB0aGlzIHdvdWxkIGNvc3QgYSBmZXcgZXh0cmEgY3lsZXMgb24gYXZlcmFnZS4KICEgICAgIEZvciBTSG1lZGlhLCB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IGFueSBxdWFkd29yZCBjYW4gYmUgcmVhZCBpbiBpdHMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgKaW5kZXggYmFmZTVhNi4uNzU2ODY0MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgKQEAgLTY1NCw3ICs2NTQsNyBAQAogICogQVJHMzoJbW11IGNvbnRleHQKICAqIEFSRzQ6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCiAgKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3MsIGNvbnRleHQsIG9yCisgKiBFUlJPUlM6CUVJTlZBTAkJCUludmFsaWQgdmlydHVhbCBhZGRyZXNzLCBjb250ZXh0LCBvcgogICoJCQkJCWZsYWdzIHZhbHVlCiAgKgkJRU5PVFNVUFBPUlRFRAkJQVJHMCBvciBBUkcxIGlzIG5vbi16ZXJvCiAgKgpAQCAtNzIxLDcgKzcyMSw3IEBACiAgKiBBUkcyOglUVEUKICAqIEFSRzM6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCiAgKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3Mgb3IgZmxhZ3MgdmFsdWUKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ0dWFsIGFkZHJlc3Mgb3IgZmxhZ3MgdmFsdWUKICAqCQlFQkFEUEdTWgkJSW52YWxpZCBwYWdlIHNpemUgdmFsdWUKICAqCQlFTk9SQUREUgkJSW52YWxpZCByZWFsIGFkZHJlc3MgaW4gVFRFCiAgKgkJRVRPT01BTlkJCVRvbyBtYW55IG1hcHBpbmdzIChtYXggb2YgOCByZWFjaGVkKQpAQCAtODAwLDcgKzgwMCw3IEBACiAgKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCiAgKiBBUkcyOglmbGFncyAoSFZfTU1VX3tJTU1VLERNTVV9KQogICogUkVUMDoJc3RhdHVzCi0gKiBFUlJPUlM6CUVJTlZBTAkJCUludmFsaWQgdmlydXRhbCBhZGRyZXNzIG9yIGZsYWdzIHZhbHVlCisgKiBFUlJPUlM6CUVJTlZBTAkJCUludmFsaWQgdmlydHVhbCBhZGRyZXNzIG9yIGZsYWdzIHZhbHVlCiAgKgkJRU5PTUFQCQkJU3BlY2lmaWVkIG1hcHBpbmcgd2FzIG5vdCBmb3VuZAogICoKICAqIERlbWFwcyBhbnkgcGVybWFuZW50IHBhZ2UgbWFwcGluZyAoZXN0YWJsaXNoZWQgdmlhCkBAIC0xMjA1LDcgKzEyMDUsNyBAQAogICogc3RydWN0dXJlIGNvbnRlbnRzLiAgQXR0ZW1wdHMgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gdW5kZWZpbmVkCiAgKiBiZWhhdmlvciBmb3IgdGhlIGd1ZXN0LgogICoKLSAqIEVhY2ggdHJhcCB0cmFjZSBidWZmZXIgZW50cnkgaXMgbGF5ZWQgb3V0IGFzIGZvbGxvd3M6CisgKiBFYWNoIHRyYXAgdHJhY2UgYnVmZmVyIGVudHJ5IGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6CiAgKi8KICNpZm5kZWYgX19BU1NFTUJMWV9fCiBzdHJ1Y3QgaHZfdHJhcF90cmFjZV9lbnRyeSB7CkBAIC0xMzAwLDcgKzEzMDAsNyBAQAogICogc3RhdGUgaW4gUkVUMS4gIEZ1dHVyZSBzeXN0ZW1zIG1heSBkZWZpbmUgdmFyaW91cyBmbGFncyBmb3IgdGhlCiAgKiBlbmFibGUgYXJndW1lbnQgKEFSRzApLCBmb3IgdGhlIG1vbWVudCBhIGd1ZXN0IHNob3VsZCBwYXNzCiAgKiAiKHVpbnQ2NF90KSAtMSIgdG8gZW5hYmxlLCBhbmQgIih1aW50NjRfdCkgMCIgdG8gZGlzYWJsZSBhbGwKLSAqIHRyYWNpbmcgLSB3aGljaCB3aWxsIGVuc3VyZSBmdXR1cmUgY29tcGF0YWJpbGl0eS4KKyAqIHRyYWNpbmcgLSB3aGljaCB3aWxsIGVuc3VyZSBmdXR1cmUgY29tcGF0aWJpbGl0eS4KICAqLwogI2RlZmluZSBIVl9GQVNUX1RUUkFDRV9FTkFCTEUJCTB4OTIKIApAQCAtMTg4MCw3ICsxODgwLDcgQEAKICAqIHBjaV9kZXZpY2UsIGF0IHBjaV9jb25maWdfb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlJ3MKICAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuICBJZiB0aGVyZSB3YXMgbm8gZXJyb3IsIFJFVDEgaXMgc2V0IHRvIHplcm8gYW5kCiAgKiBSRVQyIGlzIHNldCB0byB0aGUgZGF0YSByZWFkLiAgSW5zaWduaWZpY2FudCBiaXRzIGluIFJFVDIgYXJlIG5vdAotICogZ3VhcmVudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZSBhbmQgdGhlcmVmb3JlIG11c3QgYmUgaWdub3JlZC4KKyAqIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbnkgc3BlY2lmaWMgdmFsdWUgYW5kIHRoZXJlZm9yZSBtdXN0IGJlIGlnbm9yZWQuCiAgKgogICogVGhlIGRhdGEgcmV0dXJuZWQgaW4gUkVUMiBpcyBzaXplIGJhc2VkIGJ5dGUgc3dhcHBlZC4KICAqCkBAIC0xOTQxLDkgKzE5NDEsOSBAQAogICogYW5kIHJldHVybiB0aGUgYWN0dWFsIGRhdGEgcmVhZCBpbiBSRVQyLiAgVGhlIGRhdGEgcmV0dXJuZWQgaXMgc2l6ZSBiYXNlZAogICogYnl0ZSBzd2FwcGVkLgogICoKLSAqIE5vbi1zaWduaWZpY2FudCBiaXRzIGluIFJFVDIgYXJlIG5vdCBndWFyZW50ZWVkIHRvIGhhdmUgYW55IHNwZWNpZmljIHZhbHVlCisgKiBOb24tc2lnbmlmaWNhbnQgYml0cyBpbiBSRVQyIGFyZSBub3QgZ3VhcmFudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZQogICogYW5kIHRoZXJlZm9yZSBtdXN0IGJlIGlnbm9yZWQuICBJZiBSRVQxIGlzIHJldHVybmVkIGFzIG5vbi16ZXJvLCB0aGUgZGF0YQotICogdmFsdWUgaXMgbm90IGd1YXJlbnRlZWQgdG8gaGF2ZSBhbnkgc3BlY2lmaWMgdmFsdWUgYW5kIHNob3VsZCBiZSBpZ25vcmVkLgorICogdmFsdWUgaXMgbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSBhbnkgc3BlY2lmaWMgdmFsdWUgYW5kIHNob3VsZCBiZSBpZ25vcmVkLgogICoKICAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBlcm1pc3Npb24gdG8gcmVhZCBmcm9tIHRoZSBnaXZlbiBkZXZoYW5kbGUsIHJlYWwKICAqIGFkZHJlc3MsIHdoaWNoIG11c3QgYmUgYW4gSU8gYWRkcmVzcy4gIFRoZSBhcmd1bWVudCByZWFsIGFkZHJlc3MgbXVzdCBiZSBhCkBAIC0yNDU2LDkgKzI0NTYsOSBAQAogICoKICAqIEFzIHJlY2VpdmUgcXVldWUgY29uZmlndXJhdGlvbiBjYXVzZXMgYSByZXNldCBvZiB0aGUgcXVldWUncyBoZWFkIGFuZAogICogdGFpbCBwb2ludGVycyB0aGVyZSBpcyBubyB3YXkgZm9yIGEgZ3VlcyB0byBkZXRlcm1pbmUgaG93IG1hbnkgZW50cmllcwotICogaGF2ZSBiZWVuIHJlY2VpdmVkIGJldHdlZW4gYSBwcmVjZWVkaW5nIGxkY19nZXRfcnhfc3RhdGUoKSBBUEkgY2FsbAorICogaGF2ZSBiZWVuIHJlY2VpdmVkIGJldHdlZW4gYSBwcmVjZWRpbmcgbGRjX2dldF9yeF9zdGF0ZSgpIEFQSSBjYWxsCiAgKiBhbmQgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9uLiAgSXQgc2hvdWxkIGJlIG5vdGVkCi0gKiB0aGF0IGRhdGFncmFtIGRlbGl2ZXJ5IGlzIG5vdCBndWFyZW50ZWVkIHZpYSBkb21haW4gY2hhbm5lbHMgYW55d2F5LAorICogdGhhdCBkYXRhZ3JhbSBkZWxpdmVyeSBpcyBub3QgZ3VhcmFudGVlZCB2aWEgZG9tYWluIGNoYW5uZWxzIGFueXdheSwKICAqIGFuZCB0aGVyZWZvcmUgYW55IGhpZ2hlciBwcm90b2NvbCBzaG91bGQgYmUgcmVzaWxpZW50IHRvIGRhdGFncmFtCiAgKiBsb3NzIGlmIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIHRvIG92ZXJjb21lIHRoaXMgc3BlY2lmaWMgcmFjZSBwb3RlbnRpYWwKICAqIGl0IGlzIHJlY29tbWVuZGVkLCBmb3IgZXhhbXBsZSwgdGhhdCBhIGhpZ2hlciBsZXZlbCBwcm90b2NvbCBiZSBlbXBsb3llZApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9uczg3MzAzLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25zODczMDMuaAppbmRleCA2ODZkZWZlLi5hZjc1NTQ4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25zODczMDMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25zODczMDMuaApAQCAtMzcsNyArMzcsNyBAQAogLyogUG93ZXIgYW5kIFRlc3QgUmVnaXN0ZXIgKFBUUikgYml0cyAqLwogI2RlZmluZSBQVFJfTFBUQl9JUlE3CTB4MDgKICNkZWZpbmUgUFRSX0xFVkVMX0lSUQkweDgwCS8qIFdoZW4gbm90IEVDUC9FUFA6IFVzZSBsZXZlbCBJUlEgICAgICAgICAgICovCi0jZGVmaW5lIFBUUl9MUFRfUkVHX0RJUgkweDgwCS8qIFdoZW4gRUNQL0VQUDogTFBUIENUUiBjb250cm9sbHMgZGlyZWN0aW9uICovCisjZGVmaW5lIFBUUl9MUFRfUkVHX0RJUgkweDgwCS8qIFdoZW4gRUNQL0VQUDogTFBUIENUUiBjb250cm9scyBkaXJlY3Rpb24gKi8KIAkJCQkvKiAgICAgICAgICAgICAgIG9mIHRoZSBwYXJhbGxlbCBwb3J0CSAgICAgKi8KIAogLyogRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAoRkNSKSBiaXRzICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY3IuaAppbmRleCA4NDNlNGZhLi4yODhkN2JlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogLyogSW4gb3JkZXIgdG8gY29tbW9uaXplIGFzIG11Y2ggb2YgdGhlIGltcGxlbWVudGF0aW9uIGFzCiAgKiBwb3NzaWJsZSwgd2UgdXNlIFBJQ0ggYXMgb3VyIGNvdW50ZXIuICBNb3N0bHkgdGhpcyBpcwotICogdG8gYWNjb21vZGF0ZSBOaWFnYXJhLTEgd2hpY2ggY2FuIG9ubHkgY291bnQgaW5zbiBjeWNsZXMKKyAqIHRvIGFjY29tbW9kYXRlIE5pYWdhcmEtMSB3aGljaCBjYW4gb25seSBjb3VudCBpbnNuIGN5Y2xlcwogICogaW4gUElDSC4KICAqLwogc3RhdGljIGlubGluZSB1NjQgcGljbF92YWx1ZSh1bnNpZ25lZCBpbnQgbm1pX2h6KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMzBiMGI3OS4uYzdhZDNmZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0zMyw3ICszMyw3IEBACiAJICogdGhpbmdzIGxpa2UgImluIGEgc3lzdGVtIGNhbGwiIGV0Yy4gZm9yIGFuIGFyYml0cmF5CiAJICogcHJvY2Vzcy4KIAkgKgotCSAqIFRoZSBQVF9SRUdTX01BR0lDIGlzIGNob29zZW4gc3VjaCB0aGF0IGl0IGNhbiBiZQorCSAqIFRoZSBQVF9SRUdTX01BR0lDIGlzIGNob3NlbiBzdWNoIHRoYXQgaXQgY2FuIGJlCiAJICogbG9hZGVkIGNvbXBsZXRlbHkgdXNpbmcganVzdCBhIHNldGhpIGluc3RydWN0aW9uLgogCSAqLwogCXVuc2lnbmVkIGludCBtYWdpYzsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKaW5kZXggZjY3OWM1Ny4uMWUzNGYyOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIGFwY19tYXRjaFtdID0geworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYXBjX21hdGNoW10gPSB7CiAJewogCQkubmFtZSA9IEFQQ19PQlBOQU1FLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwppbmRleCA5MDZlZTNlLi42ZGE3ODRhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKQEAgLTgwMSw3ICs4MDEsNyBAQAogCS5nbG9ibAl2YWNfaHdmbHVzaF9wYXRjaDFfb24sIHZhY19od2ZsdXNoX3BhdGNoMl9vbgogCiAvKgotICogVWdseSwgYnV0IHdlIGNhbnQgdXNlIGhhcmR3YXJlIGZsdXNoaW5nIG9uIHRoZSBzdW40IGFuZCB3ZSdkIHJlcXVpcmUKKyAqIFVnbHksIGJ1dCB3ZSBjYW4ndCB1c2UgaGFyZHdhcmUgZmx1c2hpbmcgb24gdGhlIHN1bjQgYW5kIHdlJ2QgcmVxdWlyZQogICogdHdvIGluc3RydWN0aW9ucyAoQW50b24pCiAgKi8KIHZhY19od2ZsdXNoX3BhdGNoMV9vbjoJCWFkZGNjCSVsNywgLVBBR0VfU0laRSwgJWw3CkBAIC04NTEsNyArODUxLDcgQEAKIAkgc2V0aGkJJWhpKH4oKDEgPDwgU1VONENfUkVBTF9QR0RJUl9TSElGVCkgLSAxKSksICVsNAogCiAJLyogSWYgdGhlIGtlcm5lbCByZWZlcmVuY2VzIGEgYnVtIGtlcm5lbCBwb2ludGVyLCBvciBhIHB0ZSB3aGljaAotCSAqIHBvaW50cyB0byBhIG5vbiBleGlzdGFudCBwYWdlIGluIHJhbSwgd2Ugd2lsbCBydW4gdGhpcyBjb2RlCisJICogcG9pbnRzIHRvIGEgbm9uIGV4aXN0ZW50IHBhZ2UgaW4gcmFtLCB3ZSB3aWxsIHJ1biB0aGlzIGNvZGUKIAkgKiBfZm9yZXZlcl8gYW5kIGxvY2sgdXAgdGhlIG1hY2hpbmUhISEhISBTbyB3ZSBtdXN0IGNoZWNrIGZvcgogCSAqIHRoaXMgY29uZGl0aW9uLCB0aGUgQUNfU1lOQ19FUlIgYml0cyBhcmUgd2hhdCB3ZSBtdXN0IGV4YW1pbmUuCiAJICogQWxzbyBhIHBhcml0eSBlcnJvciB3b3VsZCBtYWtlIHRoaXMgaGFwcGVuIGFzIHdlbGwuICBTbyB3ZSBqdXN0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZjhmMjEwNS4uYWE1OTRjNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUwpAQCAtODUsNyArODUsNyBAQAogc3BhcmM2NF9ib290OgogCW1vdgklbzQsICVsNwogCi0JLyogV2UgbmVlZCB0byByZW1hcCB0aGUga2VybmVsLiAgVXNlIHBvc2l0aW9uIGluZGVwZW5kYW50CisJLyogV2UgbmVlZCB0byByZW1hcCB0aGUga2VybmVsLiAgVXNlIHBvc2l0aW9uIGluZGVwZW5kZW50CiAJICogY29kZSB0byByZW1hcCB1cyB0byBLRVJOQkFTRS4KIAkgKgogCSAqIFNJTE8gY2FuIGludm9rZSB1cyB3aXRoIDMyLWJpdCBhZGRyZXNzIG1hc2tpbmcgZW5hYmxlZCwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2luaXRfdGFzay5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW5pdF90YXNrLmMKaW5kZXggNWZlM2Q2NS4uMzVmMTQxYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW5pdF90YXNrLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogLyogLnRleHQgc2VjdGlvbiBpbiBoZWFkLlMgaXMgYWxpZ25lZCBhdCA4ayBib3VuZGFyeSBhbmQgdGhpcyBnZXRzIGxpbmtlZAogICogcmlnaHQgYWZ0ZXIgdGhhdCBzbyB0aGF0IHRoZSBpbml0X3RocmVhZF91bmlvbiBpcyBhbGlnbmVkIHByb3Blcmx5IGFzIHdlbGwuCi0gKiBJZiB0aGlzIGlzIG5vdCBhbGlnbmVkIG9uIGEgOGsgYm91bmRyeSwgdGhlbiB5b3Ugc2hvdWxkIGNoYW5nZSBjb2RlCisgKiBJZiB0aGlzIGlzIG5vdCBhbGlnbmVkIG9uIGEgOGsgYm91bmRhcnksIHRoZW4geW91IHNob3VsZCBjaGFuZ2UgY29kZQogICogaW4gZXRyYXAuUyB3aGljaCBhc3N1bWVzIGl0LgogICovCiB1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gX19pbml0X3Rhc2tfZGF0YSA9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCmluZGV4IDYzY2Q0ZTUuLjVjMTQ5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCkBAIC00NTksNyArNDU5LDcgQEAKIAkJICoKIAkJICogSGFuZGxlIHRoaXMgYnkgZGVjaWRpbmcgdGhhdCwgaWYgd2UgZGlkbid0IGdldCBhCiAJCSAqIG1hdGNoIGluIHRoZSBwYXJlbnQncyAnaW50ZXJydXB0LW1hcCcsIGFuZCB0aGUKLQkJICogcGFyZW50IGlzIGFuIElSUSB0cmFuc2xhdGVyLCB0aGVuIHVzZSB0aGUgcGFyZW50IGFzCisJCSAqIHBhcmVudCBpcyBhbiBJUlEgdHJhbnNsYXRvciwgdGhlbiB1c2UgdGhlIHBhcmVudCBhcwogCQkgKiBvdXIgSVJRIGNvbnRyb2xsZXIuCiAJCSAqLwogCQlpZiAocHAtPmlycV90cmFucykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA3NjA1Nzg2Li5lZTg0MjZlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCiAJLyoKIAkgKiBJZiBncm91cCBldmVudHMgc2NoZWR1bGluZyB0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZCwKLQkgKiBza2lwIHRoZSBzY2hlZHVsYWJpbGl0eSB0ZXN0IGhlcmUsIGl0IHdpbGwgYmUgcGVmb3JtZWQKKwkgKiBza2lwIHRoZSBzY2hlZHVsYWJpbGl0eSB0ZXN0IGhlcmUsIGl0IHdpbGwgYmUgcGVyZm9ybWVkCiAJICogYXQgY29tbWl0IHRpbWUoLT5jb21taXRfdHhuKSBhcyBhIHdob2xlCiAJICovCiAJaWYgKGNwdWMtPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BtYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMKaW5kZXggOTNkN2I0NC4uNmE1ODVkMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBwbWNfbWF0Y2hbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBtY19tYXRjaFtdID0gewogCXsKIAkJLm5hbWUgPSBQTUNfT0JQTkFNRSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwppbmRleCA5MWMxMGZiLi44NTBhMTM2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwpAQCAtNTMsNiArNTMsNyBAQAogdm9pZCBfX2NwdWluaXQgc21wX3N0b3JlX2NwdV9pbmZvKGludCBpZCkKIHsKIAlpbnQgY3B1X25vZGU7CisJaW50IG1pZDsKIAogCWNwdV9kYXRhKGlkKS51ZGVsYXlfdmFsID0gbG9vcHNfcGVyX2ppZmZ5OwogCkBAIC02MCwxMCArNjEsMTMgQEAKIAljcHVfZGF0YShpZCkuY2xvY2tfdGljayA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwKIAkJCQkJCSAgICAgImNsb2NrLWZyZXF1ZW5jeSIsIDApOwogCWNwdV9kYXRhKGlkKS5wcm9tX25vZGUgPSBjcHVfbm9kZTsKLQljcHVfZGF0YShpZCkubWlkID0gY3B1X2dldF9od21pZChjcHVfbm9kZSk7CisJbWlkID0gY3B1X2dldF9od21pZChjcHVfbm9kZSk7CiAKLQlpZiAoY3B1X2RhdGEoaWQpLm1pZCA8IDApCi0JCXBhbmljKCJObyBNSUQgZm91bmQgZm9yIENQVSVkIGF0IG5vZGUgMHglMDhkIiwgaWQsIGNwdV9ub2RlKTsKKwlpZiAobWlkIDwgMCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vIE1JRCBmb3VuZCBmb3IgQ1BVJWQgYXQgbm9kZSAweCUwOGQiLCBpZCwgY3B1X25vZGUpOworCQltaWQgPSAwOworCX0KKwljcHVfZGF0YShpZCkubWlkID0gbWlkOwogfQogCiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfMzIuYwppbmRleCA0ZTIzNjM5Li45NjA0NmE0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBjbG9ja19tYXRjaFtdID0geworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgY2xvY2tfbWF0Y2hbXSA9IHsKIAl7CiAJCS5uYW1lID0gImVlcHJvbSIsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2NoZWNrc3VtXzMyLlMgYi9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TCmluZGV4IDM2MzJjYjMuLjAwODRjMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL2NoZWNrc3VtXzMyLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvY2hlY2tzdW1fMzIuUwpAQCAtMjg5LDEwICsyODksMTYgQEAKIAogCS8qIEFsc28sIGhhbmRsZSB0aGUgYWxpZ25tZW50IGNvZGUgb3V0IG9mIGJhbmQuICovCiBjY19kd29yZF9hbGlnbjoKLQljbXAJJWcxLCA2Ci0JYmwsYQljY3RlCisJY21wCSVnMSwgMTYKKwliZ2UJMWYKKwkgc3JsCSVnMSwgMSwgJW8zCisyOgljbXAJJW8zLCAwCisJYmUsYQljY3RlCiAJIGFuZGNjCSVnMSwgMHhmLCAlbzMKLQlhbmRjYwklbzAsIDB4MSwgJWcwCisJYW5kY2MJJW8zLCAlbzAsICVnMAkhIENoZWNrICVvMCBvbmx5ICglbzEgaGFzIHRoZSBzYW1lIGxhc3QgMiBiaXRzKQorCWJlLGEJMmIKKwkgc3JsCSVvMywgMSwgJW8zCisxOglhbmRjYwklbzAsIDB4MSwgJWcwCiAJYm5lCWNjc2xvdwogCSBhbmRjYwklbzAsIDB4MiwgJWcwCiAJYmUJMWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlCmluZGV4IGI5MDg1ZWMuLjgyNWRiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBGUFUgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgogIwogCi0jIHN1cHJlc3MgYWxsIHdhcm5pbmdzIC0gYXMgbWF0aC5jIHByb2R1Y2VzIGEgbG90IQorIyBzdXBwcmVzcyBhbGwgd2FybmluZ3MgLSBhcyBtYXRoLmMgcHJvZHVjZXMgYSBsb3QhCiBjY2ZsYWdzLXkgOj0gLXcKIAogb2JqLXkgICAgOj0gbWF0aF8kKEJJVFMpLm8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9LY29uZmlnIGIvYXJjaC90aWxlL0tjb25maWcKaW5kZXggNmUyY2RkNS4uZTMyYjBjMiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL0tjb25maWcKKysrIGIvYXJjaC90aWxlL0tjb25maWcKQEAgLTUxLDcgKzUxLDcgQEAKIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJZGVmX2Jvb2wgeQogCi0jIEZJWE1FOiB0aWxlZ3ggY2FuIGltcGxlbWVudCBhIG1vcmUgZWZmaWNlbnQgcndzZW0uCisjIEZJWE1FOiB0aWxlZ3ggY2FuIGltcGxlbWVudCBhIG1vcmUgZWZmaWNpZW50IHJ3c2VtLgogY29uZmlnIFJXU0VNX0dFTkVSSUNfU1BJTkxPQ0sKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2Rydl94Z2JlX2ludGYuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2Rydl94Z2JlX2ludGYuaAppbmRleCAxNDZlNDdkLi5mMTMxODhhIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfeGdiZV9pbnRmLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvaHYvZHJ2X3hnYmVfaW50Zi5oCkBAIC0zMTksNyArMzE5LDcgQEAKICAqICAgICAgICAgaXMgYW4gZXJyb3IgY29kZSwgb3IgemVybyBpZiBubyBlcnJvci4gIFRoZSB2YWwwIG1lbWJlciBpcyB0aGUKICAqICAgICAgICAgdXBkYXRlZCB2YWx1ZSBvZiBzZXFubzsgaXQgaGFzIGJlZW4gaW5jcmVtZW50ZWQgYnkgMSBmb3IgZWFjaAogICogICAgICAgICBwYWNrZXQgc2VudC4gIFRoYXQgaW5jcmVtZW50IG1heSBiZSBsZXNzIHRoYW4gbmVudHJpZXMgaWYgYW4KLSAqICAgICAgICAgZXJyb3Igb2NjdXJlZCwgb3IgaWYgc29tZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdmVjdG9yIGNvbnRhaW4KKyAqICAgICAgICAgZXJyb3Igb2NjdXJyZWQsIG9yIGlmIHNvbWUgb2YgdGhlIGVudHJpZXMgaW4gdGhlIHZlY3RvciBjb250YWluCiAgKiAgICAgICAgIGhhbmRsZXMgZXF1YWwgdG8gTkVUSU9fUEtUX0hBTkRMRV9OT05FLiAgVGhlIHZhbDEgbWVtYmVyIGlzIHRoZQogICogICAgICAgICB1cGRhdGVkIHZhbHVlIG9mIG5lbnRyaWVzOyBpdCBoYXMgYmVlbiBkZWNyZW1lbnRlZCBieSAxIGZvciBlYWNoCiAgKiAgICAgICAgIHZlY3RvciBlbnRyeSBwcm9jZXNzZWQuICBBZ2FpbiwgdGhhdCBkZWNyZW1lbnQgbWF5IGJlIGxlc3MgdGhhbgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvaHYvaHlwZXJ2aXNvci5oIGIvYXJjaC90aWxlL2luY2x1ZGUvaHYvaHlwZXJ2aXNvci5oCmluZGV4IDFiOGJmMDMuLmVlNDFiY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2h5cGVydmlzb3IuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9oeXBlcnZpc29yLmgKQEAgLTEzNDAsNyArMTM0MCw3IEBACiAgKiAgdGhpcyBvcGVyYXRpb24uICBJZiBhbnkgcGVybWFuZW50IGRlbGl2ZXJ5IGVycm9ycyB3ZXJlIGVuY291bnRlcmVkLAogICogIHRoZSByb3V0aW5lIHJldHVybnMgSFZfRVJFQ0lQLiAgSW4gdGhlIGV2ZW50IG9mIHBlcm1hbmVudCBkZWxpdmVyeQogICogIGVycm9ycywgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgZGVsaXZlcnkgd2FzIG5vdCBhdHRlbXB0ZWQgdG8gYWxsCi0gKiAgcmVjaXBpZW50czsgaWYgYW55IG1lc3NhZ2VzIHdlcmUgc3VjY2VzZnVsbHkgZGVsaXZlcmVkLCBob3dldmVyLAorICogIHJlY2lwaWVudHM7IGlmIGFueSBtZXNzYWdlcyB3ZXJlIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQsIGhvd2V2ZXIsCiAgKiAgcmVjaXBpZW50cycgc3RhdGUgdmFsdWVzIHdpbGwgYmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5LgogICoKICAqICBJdCBpcyBleHBsaWNpdGx5IGxlZ2FsIHRvIHNwZWNpZnkgYSByZWNpcGllbnQgc3RydWN0dXJlIHdob3NlIHN0YXRlCkBAIC0xMzU5LDcgKzEzNTksNyBAQAogICogIG5ldmVyIGNhbGwgaHZfcmVjZWl2ZV9tZXNzYWdlLCBvciBjb3VsZCByZWdpc3RlciBhIGRpZmZlcmVudCBzdGF0ZQogICogIGJ1ZmZlciwgbG9zaW5nIHRoZSBtZXNzYWdlLgogICoKLSAqICBTcGVjaWZpeWluZyB0aGUgc2FtZSByZWNpcGllbnQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHJlY2lwaWVudCBsaXN0CisgKiAgU3BlY2lmeWluZyB0aGUgc2FtZSByZWNpcGllbnQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHJlY2lwaWVudCBsaXN0CiAgKiAgaXMgYW4gZXJyb3IsIHdoaWNoIHdpbGwgbm90IHJlc3VsdCBpbiBhbiBlcnJvciByZXR1cm4gYnV0IHdoaWNoIG1heQogICogIG9yIG1heSBub3QgcmVzdWx0IGluIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSBiZWluZyBkZWxpdmVyZWQgdG8gdGhlCiAgKiAgcmVjaXBpZW50IHRpbGUuCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3BjaS5jIGIvYXJjaC90aWxlL2tlcm5lbC9wY2kuYwppbmRleCBhMWVlMjViLi5lYTM4ZjBjIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvcGNpLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAqIEluaXRpYWxpemF0aW9uIGZsb3cgYW5kIHByb2Nlc3MKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKiBUaGlzIGZpbGVzIGNvbnRhaW5lcyB0aGUgcm91dGluZXMgdG8gc2VhcmNoIGZvciBQQ0kgYnVzZXMsCisgKiBUaGlzIGZpbGVzIGNvbnRhaW5zIHRoZSByb3V0aW5lcyB0byBzZWFyY2ggZm9yIFBDSSBidXNlcywKICAqIGVudW1lcmF0ZSB0aGUgYnVzZXMsIGFuZCBjb25maWd1cmUgYW55IGF0dGFjaGVkIGRldmljZXMuCiAgKgogICogVGhlcmUgYXJlIHR3byBlbnRyeSBwb2ludHMgaGVyZToKQEAgLTUxOSw3ICs1MTksNyBAQAogCiAKIC8qCi0gKiBTZWUgdGlsZV9jZmdfcmVhZCgpIGZvciByZWxldmVudCBjb21tZW50cy4KKyAqIFNlZSB0aWxlX2NmZ19yZWFkKCkgZm9yIHJlbGV2YW50IGNvbW1lbnRzLgogICogTm90ZSB0aGF0ICJ2YWwiIGlzIHRoZSB2YWx1ZSB0byB3cml0ZSwgbm90IGEgcG9pbnRlciB0byB0aGF0IHZhbHVlLgogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0aWxlX2NmZ193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL2ZhdWx0LmMgYi9hcmNoL3RpbGUvbW0vZmF1bHQuYwppbmRleCA3NThmNTk3Li41MWY4NjYzIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vZmF1bHQuYworKysgYi9hcmNoL3RpbGUvbW0vZmF1bHQuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJLyoKIAkgKiBFYXJseSBvbiwgd2UgbmVlZCB0byBjaGVjayBmb3IgbWlncmF0aW5nIFBURSBlbnRyaWVzOwogCSAqIHNlZSBob21lY2FjaGUuYy4gIElmIHdlIGZpbmQgYSBtaWdyYXRpbmcgUFRFLCB3ZSB3YWl0IHVudGlsCi0JICogdGhlIGJhY2tpbmcgcGFnZSBjbGFpbXMgdG8gYmUgZG9uZSBtaWdyYXRpbmcsIHRoZW4gd2UgcHJvY2VkZS4KKwkgKiB0aGUgYmFja2luZyBwYWdlIGNsYWltcyB0byBiZSBkb25lIG1pZ3JhdGluZywgdGhlbiB3ZSBwcm9jZWVkLgogCSAqIEZvciBrZXJuZWwgUFRFcywgd2UgcmV3cml0ZSB0aGUgUFRFIGFuZCByZXR1cm4gYW5kIHJldHJ5LgogCSAqIE90aGVyd2lzZSwgd2UgdHJlYXQgdGhlIGZhdWx0IGxpa2UgYSBub3JtYWwgIm5vIFBURSIgZmF1bHQsCiAJICogcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHBhdGNoIHVwIHRoZSBleGlzdGluZyBQVEUuCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvdGlsZS9tbS9odWdldGxicGFnZS5jCmluZGV4IDIwMWE1ODIuLjQyY2ZjYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvdGlsZS9tbS9odWdldGxicGFnZS5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAlpZiAobW0tPmZyZWVfYXJlYV9jYWNoZSA8IGxlbikKIAkJZ290byBmYWlsOwogCi0JLyogZWl0aGVyIG5vIGFkZHJlc3MgcmVxdWVzdGVkIG9yIGNhbnQgZml0IGluIHJlcXVlc3RlZCBhZGRyZXNzIGhvbGUgKi8KKwkvKiBlaXRoZXIgbm8gYWRkcmVzcyByZXF1ZXN0ZWQgb3IgY2FuJ3QgZml0IGluIHJlcXVlc3RlZCBhZGRyZXNzIGhvbGUgKi8KIAlhZGRyID0gKG1tLT5mcmVlX2FyZWFfY2FjaGUgLSBsZW4pICYgaHVnZV9wYWdlX21hc2soaCk7CiAJZG8gewogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLm5ldCBiL2FyY2gvdW0vS2NvbmZpZy5uZXQKaW5kZXggOWU5YTRhYS4uMzE2MGIxYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLm5ldAorKysgYi9hcmNoL3VtL0tjb25maWcubmV0CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgb3RoZXIgdHJhbnNwb3J0cywgU0xpUlAgd29ya3Mgd2l0aG91dCB0aGUgbmVlZCBvZiByb290IGxldmVsCiAgICAgICAgIHByaXZsZWdlcywgc2V0dWlkIGJpbmFyaWVzLCBvciBTTElQIGRldmljZXMgb24gdGhlIGhvc3QuICBUaGlzCiAgICAgICAgIGFsc28gbWVhbnMgbm90IGV2ZXJ5IHR5cGUgb2YgY29ubmVjdGlvbiBpcyBwb3NzaWJsZSwgYnV0IG1vc3QKLSAgICAgICAgc2l0dWF0aW9ucyBjYW4gYmUgYWNjb21vZGF0ZWQgd2l0aCBjYXJlZnVsbHkgY3JhZnRlZCBzbGlycAorICAgICAgICBzaXR1YXRpb25zIGNhbiBiZSBhY2NvbW1vZGF0ZWQgd2l0aCBjYXJlZnVsbHkgY3JhZnRlZCBzbGlycAogICAgICAgICBjb21tYW5kcyB0aGF0IGNhbiBiZSBwYXNzZWQgYWxvbmcgYXMgcGFydCBvZiB0aGUgbmV0d29yayBkZXZpY2UncwogICAgICAgICBzZXR1cCBzdHJpbmcuICBUaGUgZWZmZWN0IG9mIHRoaXMgdHJhbnNwb3J0IG9uIHRoZSBVTUwgaXMgc2ltaWxhcgogICAgICAgICB0aGF0IG9mIGEgaG9zdCBiZWhpbmQgYSBmaXJld2FsbCB0aGF0IG1hc3F1ZXJhZGVzIGFsbCBuZXR3b3JrCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcudW0gYi9hcmNoL3VtL0tjb25maWcudW0KaW5kZXggOTBhNDM4YS4uYjVlNjc1ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLnVtCisrKyBiL2FyY2gvdW0vS2NvbmZpZy51bQpAQCAtNDcsNyArNDcsNyBAQAogCiBjb25maWcgSFBQRlMKIAl0cmlzdGF0ZSAiSG9uZXlQb3QgUHJvY0ZTIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUFJPQ19GUwogCWhlbHAKIAkgIGhwcGZzIChIb25leVBvdCBQcm9jRlMpIGlzIGEgZmlsZXN5c3RlbSB3aGljaCBhbGxvd3MgVU1MIC9wcm9jCiAJICBlbnRyaWVzIHRvIGJlIG92ZXJyaWRkZW4sIHJlbW92ZWQsIG9yIGZhYnJpY2F0ZWQgZnJvbSB0aGUgaG9zdC4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy54ODYgYi9hcmNoL3VtL0tjb25maWcueDg2CmluZGV4IDAyZmIwMTcuLmE5ZGE1MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZy54ODYKKysrIGIvYXJjaC91bS9LY29uZmlnLng4NgpAQCAtNCw2ICs0LDEwIEBACiAKIG1lbnUgIkhvc3QgcHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCitjb25maWcgQ01QWENIR19MT0NBTAorCWJvb2wKKwlkZWZhdWx0IG4KKwogc291cmNlICJhcmNoL3g4Ni9LY29uZmlnLmNwdSIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzM2I4NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vYnVnLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fQlVHX0gKKyNkZWZpbmUgX19VTV9CVUdfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGUyY2Y3ODZiZC4uNWJkMWJhZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNDksNyArNDksMTAgQEAKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IFRIUkVBRF9TSVpFIC0gMTsKLQl0aSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgKCgodW5zaWduZWQgbG9uZykgJnRpKSAmIH5tYXNrKTsKKwl2b2lkICpwOworCisJYXNtIHZvbGF0aWxlICgiIiA6ICI9ciIgKHApIDogIjAiICgmdGkpKTsKKwl0aSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgKCgodW5zaWduZWQgbG9uZylwKSAmIH5tYXNrKTsKIAlyZXR1cm4gdGk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jIGIvYXJjaC91bS9vcy1MaW51eC91dGlsLmMKaW5kZXggNmVhNzc5Ny4uNDI4MjdjYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91dGlsLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91dGlsLmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC03NSw2ICs3NiwyNiBAQAogCQkgaG9zdC5yZWxlYXNlLCBob3N0LnZlcnNpb24sIGhvc3QubWFjaGluZSk7CiB9CiAKKy8qCisgKiBXZSBjYW5ub3QgdXNlIGdsaWJjJ3MgYWJvcnQoKS4gSXQgbWFrZXMgdXNlIG9mIHRna2lsbCgpIHdoaWNoCisgKiBoYXMgbm8gZWZmZWN0IHdpdGhpbiBVTUwncyBrZXJuZWwgdGhyZWFkcy4KKyAqIEFmdGVyIHRoYXQgZ2xpYmMgd291bGQgZXhlY3V0ZSBhbiBpbnZhbGlkIGluc3RydWN0aW9uIHRvIGtpbGwKKyAqIHRoZSBjYWxsaW5nIHByb2Nlc3MgYW5kIFVNTCBjcmFzaGVzIHdpdGggU0lHU0VHVi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChub3JldHVybikpIHVtbF9hYm9ydCh2b2lkKQoreworCXNpZ3NldF90IHNpZzsKKworCWZmbHVzaChOVUxMKTsKKworCWlmICghc2lnZW1wdHlzZXQoJnNpZykgJiYgIXNpZ2FkZHNldCgmc2lnLCBTSUdBQlJUKSkKKwkJc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZzaWcsIDApOworCisJZm9yICg7OykKKwkJaWYgKGtpbGwoZ2V0cGlkKCksIFNJR0FCUlQpIDwgMCkKKwkJCWV4aXQoMTI3KTsKK30KKwogdm9pZCBvc19kdW1wX2NvcmUodm9pZCkKIHsKIAlpbnQgcGlkOwpAQCAtMTE2LDUgKzEzNyw1IEBACiAJd2hpbGUgKChwaWQgPSB3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HIHwgX19XQUxMKSkgPiAwKQogCQlvc19raWxsX3B0cmFjZWRfcHJvY2VzcyhwaWQsIDApOwogCi0JYWJvcnQoKTsKKwl1bWxfYWJvcnQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCmluZGV4IDgwNGIyOGQuLmIxZGE5MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogb2JqLXkgPSBidWcubyBidWdzLm8gY2hlY2tzdW0ubyBkZWxheS5vIGZhdWx0Lm8ga3N5bXMubyBsZHQubyBwdHJhY2UubyBcCiAJcHRyYWNlX3VzZXIubyBzZXRqbXAubyBzaWduYWwubyBzdHViLm8gc3R1Yl9zZWd2Lm8gc3lzY2FsbHMubyBzeXNycS5vIFwKLQlzeXNfY2FsbF90YWJsZS5vIHRscy5vCisJc3lzX2NhbGxfdGFibGUubyB0bHMubyBhdG9taWM2NF9jeDhfMzIubwogCiBvYmotJChDT05GSUdfQklORk1UX0VMRikgKz0gZWxmY29yZS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYXRvbWljNjRfY3g4XzMyLlMgYi9hcmNoL3VtL3N5cy1pMzg2L2F0b21pYzY0X2N4OF8zMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTAxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L2F0b21pYzY0X2N4OF8zMi5TCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogYXRvbWljNjRfdCBmb3IgNTg2KworICoKKyAqIENvcGllZCBmcm9tIGFyY2gveDg2L2xpYi9hdG9taWM2NF9jeDhfMzIuUworICoKKyAqIENvcHlyaWdodCDCqSAyMDEwICBMdWNhIEJhcmJpZXJpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUtYXNtLmg+CisjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorCisubWFjcm8gU0FWRSByZWcKKwlwdXNobF9jZmkgJVxyZWcKKwlDRklfUkVMX09GRlNFVCBccmVnLCAwCisuZW5kbQorCisubWFjcm8gUkVTVE9SRSByZWcKKwlwb3BsX2NmaSAlXHJlZworCUNGSV9SRVNUT1JFIFxyZWcKKy5lbmRtCisKKy5tYWNybyByZWFkNjQgcmVnCisJbW92bCAlZWJ4LCAlZWF4CisJbW92bCAlZWN4LCAlZWR4CisvKiB3ZSBuZWVkIExPQ0tfUFJFRklYIHNpbmNlIG90aGVyd2lzZSBjbXB4Y2hnOGIgYWx3YXlzIGRvZXMgdGhlIHdyaXRlICovCisJTE9DS19QUkVGSVgKKwljbXB4Y2hnOGIgKFxyZWcpCisuZW5kbQorCitFTlRSWShhdG9taWM2NF9yZWFkX2N4OCkKKwlDRklfU1RBUlRQUk9DCisKKwlyZWFkNjQgJWVjeAorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X3JlYWRfY3g4KQorCitFTlRSWShhdG9taWM2NF9zZXRfY3g4KQorCUNGSV9TVEFSVFBST0MKKworMToKKy8qIHdlIGRvbid0IG5lZWQgTE9DS19QUkVGSVggc2luY2UgYWxpZ25lZCA2NC1iaXQgd3JpdGVzCisgKiBhcmUgYXRvbWljIG9uIDU4NiBhbmQgbmV3ZXIgKi8KKwljbXB4Y2hnOGIgKCVlc2kpCisJam5lIDFiCisKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9zZXRfY3g4KQorCitFTlRSWShhdG9taWM2NF94Y2hnX2N4OCkKKwlDRklfU1RBUlRQUk9DCisKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKzE6CisJTE9DS19QUkVGSVgKKwljbXB4Y2hnOGIgKCVlc2kpCisJam5lIDFiCisKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF94Y2hnX2N4OCkKKworLm1hY3JvIGFkZHN1Yl9yZXR1cm4gZnVuYyBpbnMgaW5zYworRU5UUlkoYXRvbWljNjRfXGZ1bmNcKClfcmV0dXJuX2N4OCkKKwlDRklfU1RBUlRQUk9DCisJU0FWRSBlYnAKKwlTQVZFIGVieAorCVNBVkUgZXNpCisJU0FWRSBlZGkKKworCW1vdmwgJWVheCwgJWVzaQorCW1vdmwgJWVkeCwgJWVkaQorCW1vdmwgJWVjeCwgJWVicAorCisJcmVhZDY0ICVlYnAKKzE6CisJbW92bCAlZWF4LCAlZWJ4CisJbW92bCAlZWR4LCAlZWN4CisJXGluc1woKWwgJWVzaSwgJWVieAorCVxpbnNjXCgpbCAlZWRpLCAlZWN4CisJTE9DS19QUkVGSVgKKwljbXB4Y2hnOGIgKCVlYnApCisJam5lIDFiCisKKzEwOgorCW1vdmwgJWVieCwgJWVheAorCW1vdmwgJWVjeCwgJWVkeAorCVJFU1RPUkUgZWRpCisJUkVTVE9SRSBlc2kKKwlSRVNUT1JFIGVieAorCVJFU1RPUkUgZWJwCisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfXGZ1bmNcKClfcmV0dXJuX2N4OCkKKy5lbmRtCisKK2FkZHN1Yl9yZXR1cm4gYWRkIGFkZCBhZGMKK2FkZHN1Yl9yZXR1cm4gc3ViIHN1YiBzYmIKKworLm1hY3JvIGluY2RlY19yZXR1cm4gZnVuYyBpbnMgaW5zYworRU5UUlkoYXRvbWljNjRfXGZ1bmNcKClfcmV0dXJuX2N4OCkKKwlDRklfU1RBUlRQUk9DCisJU0FWRSBlYngKKworCXJlYWQ2NCAlZXNpCisxOgorCW1vdmwgJWVheCwgJWVieAorCW1vdmwgJWVkeCwgJWVjeAorCVxpbnNcKClsICQxLCAlZWJ4CisJXGluc2NcKClsICQwLCAlZWN4CisJTE9DS19QUkVGSVgKKwljbXB4Y2hnOGIgKCVlc2kpCisJam5lIDFiCisKKzEwOgorCW1vdmwgJWVieCwgJWVheAorCW1vdmwgJWVjeCwgJWVkeAorCVJFU1RPUkUgZWJ4CisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfXGZ1bmNcKClfcmV0dXJuX2N4OCkKKy5lbmRtCisKK2luY2RlY19yZXR1cm4gaW5jIGFkZCBhZGMKK2luY2RlY19yZXR1cm4gZGVjIHN1YiBzYmIKKworRU5UUlkoYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlX2N4OCkKKwlDRklfU1RBUlRQUk9DCisJU0FWRSBlYngKKworCXJlYWQ2NCAlZXNpCisxOgorCW1vdmwgJWVheCwgJWVieAorCW1vdmwgJWVkeCwgJWVjeAorCXN1YmwgJDEsICVlYngKKwlzYmIgJDAsICVlY3gKKwlqcyAyZgorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisyOgorCW1vdmwgJWVieCwgJWVheAorCW1vdmwgJWVjeCwgJWVkeAorCVJFU1RPUkUgZWJ4CisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlX2N4OCkKKworRU5UUlkoYXRvbWljNjRfYWRkX3VubGVzc19jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJwCisJU0FWRSBlYngKKy8qIHRoZXNlIGp1c3QgcHVzaCB0aGVzZSB0d28gcGFyYW1ldGVycyBvbiB0aGUgc3RhY2sgKi8KKwlTQVZFIGVkaQorCVNBVkUgZXNpCisKKwltb3ZsICVlY3gsICVlYnAKKwltb3ZsICVlYXgsICVlc2kKKwltb3ZsICVlZHgsICVlZGkKKworCXJlYWQ2NCAlZWJwCisxOgorCWNtcGwgJWVheCwgMCglZXNwKQorCWplIDRmCisyOgorCW1vdmwgJWVheCwgJWVieAorCW1vdmwgJWVkeCwgJWVjeAorCWFkZGwgJWVzaSwgJWVieAorCWFkY2wgJWVkaSwgJWVjeAorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZWJwKQorCWpuZSAxYgorCisJbW92bCAkMSwgJWVheAorMzoKKwlhZGRsICQ4LCAlZXNwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CisJUkVTVE9SRSBlYngKKwlSRVNUT1JFIGVicAorCXJldAorNDoKKwljbXBsICVlZHgsIDQoJWVzcCkKKwlqbmUgMmIKKwl4b3JsICVlYXgsICVlYXgKKwlqbXAgM2IKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9hZGRfdW5sZXNzX2N4OCkKKworRU5UUlkoYXRvbWljNjRfaW5jX25vdF96ZXJvX2N4OCkKKwlDRklfU1RBUlRQUk9DCisJU0FWRSBlYngKKworCXJlYWQ2NCAlZXNpCisxOgorCXRlc3RsICVlYXgsICVlYXgKKwlqZSA0ZgorMjoKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlhZGRsICQxLCAlZWJ4CisJYWRjbCAkMCwgJWVjeAorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisJbW92bCAkMSwgJWVheAorMzoKKwlSRVNUT1JFIGVieAorCXJldAorNDoKKwl0ZXN0bCAlZWR4LCAlZWR4CisJam5lIDJiCisJam1wIDNiCisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfaW5jX25vdF96ZXJvX2N4OCkKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvbWFjaC9yZWdzLXVtYWwuaCBiL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvbWFjaC9yZWdzLXVtYWwuaAppbmRleCA4ODViYjYyLi5hYTIyZGY3IDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL21hY2gvcmVncy11bWFsLmgKKysrIGIvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9tYWNoL3JlZ3MtdW1hbC5oCkBAIC01Miw3ICs1Miw3IEBACiAgKi8KICNkZWZpbmUgVU1BTF9NSUlTVEFUVVMJCShQS1VOSVRZX1VNQUxfQkFTRSArIDB4MDAzMCkKIC8qCi0gKiBNSUkgTWFuYWdtZW50IEluZGljYXRvciBVTUFMX01JSUlEQ1QKKyAqIE1JSSBNYW5hZ2VtZW50IEluZGljYXRvciBVTUFMX01JSUlEQ1QKICAqLwogI2RlZmluZSBVTUFMX01JSUlEQ1QJCShQS1VOSVRZX1VNQUxfQkFTRSArIDB4MDAzNCkKIC8qCkBAIC05MSw3ICs5MSw3IEBACiAjZGVmaW5lIFVNQUxfRklGT1JBTTYJCShQS1VOSVRZX1VNQUxfQkFTRSArIDB4MDA3OCkKICNkZWZpbmUgVU1BTF9GSUZPUkFNNwkJKFBLVU5JVFlfVU1BTF9CQVNFICsgMHgwMDdjKQogCi0vKiBNQUhCRSBNT0RVRUwgT0YgVU1BTCAqLworLyogTUFIQkUgTU9EVUxFIE9GIFVNQUwgKi8KIC8qIFVNQUwncyBNQUhCRSBtb2R1bGUgaW50ZXJmYWNlcyB0byB0aGUgaG9zdCBzeXN0ZW0gdGhyb3VnaCAzMi1iaXQgQUhCIE1hc3RlcgogICogYW5kIFNsYXZlIHBvcnRzLlJlZ2lzdGVycyB3aXRoaW4gdGhlIE0tQUhCRSBwcm92aWRlIENvbnRyb2wgYW5kIFN0YXR1cwogICogaW5mb3JtYXRpb24gY29uY2VybmluZyB0aGVzZSB0cmFuc2ZlcnMuCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvaGVhZC5TIGIvYXJjaC91bmljb3JlMzIva2VybmVsL2hlYWQuUwppbmRleCA5MjI1NWYzLi44Y2FmMzIyIDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9oZWFkLlMKQEAgLTE2NCw3ICsxNjQsNyBAQAogRU5EUFJPQyhzdGV4dCkKIAogLyoKLSAqIEVuYWJsZSB0aGUgTU1VLiAgVGhpcyBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlIHN0dWN0dXJlIG9mIHRoZSB2aXNpYmxlCisgKiBFbmFibGUgdGhlIE1NVS4gIFRoaXMgY29tcGxldGVseSBjaGFuZ2VzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHZpc2libGUKICAqIG1lbW9yeSBzcGFjZS4gIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHRyYWNlIGV4ZWN1dGlvbiB0aHJvdWdoIHRoaXMuCiAgKgogICogIHIwICA9IGNwIzAgY29udHJvbCByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9tZW1vcnkuYyBiL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMKaW5kZXggY2FlM2ZlYi4uZGI3NWQwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9tZW1vcnkuYworKysgYi9hcmNoL3g4Ni9ib290L21lbW9yeS5jCkBAIC05MSw3ICs5MSw3IEBACiAJaWYgKG9yZWcuYXggPiAxNSoxMDI0KSB7CiAJCXJldHVybiAtMTsJLyogQm9ndXMhICovCiAJfSBlbHNlIGlmIChvcmVnLmF4ID09IDE1KjEwMjQpIHsKLQkJYm9vdF9wYXJhbXMuYWx0X21lbV9rID0gKG9yZWcuZHggPDwgNikgKyBvcmVnLmF4OworCQlib290X3BhcmFtcy5hbHRfbWVtX2sgPSAob3JlZy5ieCA8PCA2KSArIG9yZWcuYXg7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhpcyBpZ25vcmVzIG1lbW9yeSBhYm92ZSAxNk1CIGlmIHdlIGhhdmUgYSBtZW1vcnkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAppbmRleCBhMjc5ZDk4Li4yYjdkNTczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNX1g4Nl9BUElDX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAppbmRleCBkODc5ODhiLi4zNDU5NWQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCkBAIC03OCw2ICs3OCw3IEBACiAjZGVmaW5lCQlBUElDX0RFU1RfTE9HSUNBTAkweDAwODAwCiAjZGVmaW5lCQlBUElDX0RFU1RfUEhZU0lDQUwJMHgwMDAwMAogI2RlZmluZQkJQVBJQ19ETV9GSVhFRAkJMHgwMDAwMAorI2RlZmluZQkJQVBJQ19ETV9GSVhFRF9NQVNLCTB4MDA3MDAKICNkZWZpbmUJCUFQSUNfRE1fTE9XRVNUCQkweDAwMTAwCiAjZGVmaW5lCQlBUElDX0RNX1NNSQkJMHgwMDIwMAogI2RlZmluZQkJQVBJQ19ETV9SRU1SRAkJMHgwMDMwMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCA5N2I2ZDgxLi4wNTcwOTllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMTAsNyArMTAsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JLyogQW5kIHNwaW5sb2NrcyAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2lmZGVmIEhBVkVfUkVBTExZX1NMT1dfRE1BX0NPTlRST0xMRVIKICNkZWZpbmUgZG1hX291dGIJb3V0Yl9wCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nYXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nYXJ0LmgKaW5kZXggNDMwODViZi4uMTU2Y2Q1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2FydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dhcnQuaApAQCAtNjYsNyArNjYsNyBAQAogCSAqIERvbid0IGVuYWJsZSB0cmFuc2xhdGlvbiBidXQgZW5hYmxlIEdBUlQgSU8gYW5kIENQVSBhY2Nlc3Nlcy4KIAkgKiBBbHNvLCBzZXQgRElTVExCV0FMS1BSQiBzaW5jZSBHQVJUIHRhYmxlcyBtZW1vcnkgaXMgVUMuCiAJICovCi0JY3RsID0gRElTVExCV0FMS1BSQiB8IG9yZGVyIDw8IDE7CisJY3RsID0gb3JkZXIgPDwgMTsKIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsIGN0bCk7CiB9CkBAIC03NSwxNyArNzUsMTcgQEAKIHsKIAl1MzIgdG1wLCBjdGw7CiAKLSAgICAgICAgLyogYWRkcmVzcyBvZiB0aGUgbWFwcGluZ3MgdGFibGUgKi8KLSAgICAgICAgYWRkciA+Pj0gMTI7Ci0gICAgICAgIHRtcCA9ICh1MzIpIGFkZHI8PDQ7Ci0gICAgICAgIHRtcCAmPSB+MHhmOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVFRBQkxFQkFTRSwgdG1wKTsKKwkvKiBhZGRyZXNzIG9mIHRoZSBtYXBwaW5ncyB0YWJsZSAqLworCWFkZHIgPj49IDEyOworCXRtcCA9ICh1MzIpIGFkZHI8PDQ7CisJdG1wICY9IH4weGY7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRUQUJMRUJBU0UsIHRtcCk7CiAKLSAgICAgICAgLyogRW5hYmxlIEdBUlQgdHJhbnNsYXRpb24gZm9yIHRoaXMgaGFtbWVyLiAqLwotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsICZjdGwpOwotICAgICAgICBjdGwgfD0gR0FSVEVOOwotICAgICAgICBjdGwgJj0gfihESVNHQVJUQ1BVIHwgRElTR0FSVElPKTsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRBUEVSVFVSRUNUTCwgY3RsKTsKKwkvKiBFbmFibGUgR0FSVCB0cmFuc2xhdGlvbiBmb3IgdGhpcyBoYW1tZXIuICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVEFQRVJUVVJFQ1RMLCAmY3RsKTsKKwljdGwgfD0gR0FSVEVOIHwgRElTVExCV0FMS1BSQjsKKwljdGwgJj0gfihESVNHQVJUQ1BVIHwgRElTR0FSVElPKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVEFQRVJUVVJFQ1RMLCBjdGwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhcGVydHVyZV92YWxpZCh1NjQgYXBlcl9iYXNlLCB1MzIgYXBlcl9zaXplLCB1MzIgbWluX3NpemUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggZWYzMjg5MC4uYzllMDllYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMjM3LDcgKzIzNyw3IEBACiAJfSBlbHNlIGlmICh1c2VfZnhzcigpKSB7CiAJCWZwdV9meHNhdmUoZnB1KTsKIAl9IGVsc2UgewotCQlhc20gdm9sYXRpbGUoImZzYXZlICVbZnhdOyBmd2FpdCIKKwkJYXNtIHZvbGF0aWxlKCJmbnNhdmUgJVtmeF07IGZ3YWl0IgogCQkJICAgICA6IFtmeF0gIj1tIiAoZnB1LT5zdGF0ZS0+ZnNhdmUpKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCBjNGJkMjY3Li5hOTdhMjQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNTAsNyArMTUwLDcgQEAKIGV4dGVybiB2b2lkIGlvYXBpY19hbmRfZ3NpX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcyh2b2lkKTsKIAotaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbih1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpOworaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLCBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqYXR0cik7CiAKIGV4dGVybiBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmFsbG9jX2lvYXBpY19lbnRyaWVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnJlZV9pb2FwaWNfZW50cmllcyhzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmlvYXBpY19lbnRyaWVzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggZmQ1YTFmMy4uM2NjZTcxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTk2LDExICs5NiwxNSBAQAogI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHgwMDAwMDQwMgogI2RlZmluZSBNU1JfSUEzMl9NQzBfTUlTQwkJMHgwMDAwMDQwMwogCisjZGVmaW5lIE1TUl9BTUQ2NF9NQzBfTUFTSwkJMHhjMDAxMDA0NAorCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9DVEwoeCkJCShNU1JfSUEzMl9NQzBfQ1RMICsgNCooeCkpCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9TVEFUVVMoeCkJCShNU1JfSUEzMl9NQzBfU1RBVFVTICsgNCooeCkpCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9BRERSKHgpCQkoTVNSX0lBMzJfTUMwX0FERFIgKyA0Kih4KSkKICNkZWZpbmUgTVNSX0lBMzJfTUN4X01JU0MoeCkJCShNU1JfSUEzMl9NQzBfTUlTQyArIDQqKHgpKQogCisjZGVmaW5lIE1TUl9BTUQ2NF9NQ3hfTUFTSyh4KQkJKE1TUl9BTUQ2NF9NQzBfTUFTSyArICh4KSkKKwogLyogVGhlc2UgYXJlIGNvbnNlY3V0aXZlIGFuZCBub3QgaW4gdGhlIG5vcm1hbCA0ZXIgTUNFIGJhbmsgYmxvY2sgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTDIJCTB4MDAwMDAyODAKICNkZWZpbmUgTVNSX0lBMzJfTUN4X0NUTDIoeCkJCShNU1JfSUEzMl9NQzBfQ1RMMiArICh4KSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWEuaAppbmRleCAzZDRkYWI0Li5hNTBmYzlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYS5oCkBAIC01MSw3ICs1MSw3IEBACiAjZW5kaWYJLyogQ09ORklHX05VTUEgKi8KIAogI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKLXN0cnVjdCBjcHVtYXNrIF9fY3B1aW5pdCAqZGVidWdfY3B1bWFza19zZXRfY3B1KGludCBjcHUsIGludCBlbmFibGUpOwordm9pZCBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoaW50IGNwdSwgaW50IG5vZGUsIGJvb2wgZW5hYmxlKTsKICNlbmRpZgogCiAjZW5kaWYJLyogX0FTTV9YODZfTlVNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKaW5kZXggN2RiNzcyMy4uZDU2MTg3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaApAQCAtMjk5LDYgKzI5OSw3IEBACiAvKiBJbnN0YWxsIGEgcHRlIGZvciBhIHBhcnRpY3VsYXIgdmFkZHIgaW4ga2VybmVsIHNwYWNlLiAqLwogdm9pZCBzZXRfcHRlX3ZhZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IHB0ZSk7CiAKK2V4dGVybiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZSh1NjQgc3RhcnQsIHU2NCBlbmQpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpOwogZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKaW5kZXggM2UwOTRhZi4uMTMwZjFlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKQEAgLTk0LDYgKzk0LDggQEAKIC8qIGFmdGVyIHRoaXMgIyBjb25zZWN1dGl2ZSBzdWNjZXNzZXMsIGJ1bXAgdXAgdGhlIHRocm90dGxlIGlmIGl0IHdhcyBsb3dlcmVkICovCiAjZGVmaW5lIENPTVBMRVRFX1RIUkVTSE9MRCA1CiAKKyNkZWZpbmUgVVZfTEJfU1VCTk9ERUlEIDB4MTAKKwogLyoKICAqIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkZXN0aW5hdGlvbiBzaWRlIHBheWxvYWQgcXVldWUKICAqLwpAQCAtMTI0LDcgKzEyNiw3IEBACiAgKiBUaGUgZGlzdHJpYnV0aW9uIHNwZWNpZmljYXRpb24gKDMyIGJ5dGVzKSBpcyBpbnRlcnByZXRlZCBhcyBhIDI1Ni1iaXQKICAqIGRpc3RyaWJ1dGlvbiB2ZWN0b3IuIEFkamFjZW50IGJpdHMgY29ycmVzcG9uZCB0byBjb25zZWN1dGl2ZSBldmVuIG51bWJlcmVkCiAgKiBub2RlSURzLiBUaGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgaW5kZXggb2YgYSBnaXZlbiBiaXQgdG8gdGhlIDE1LWJpdAotICogJ2Jhc2VfZGVzdF9ub2RlaWQnIGZpZWxkIG9mIHRoZSBoZWFkZXIgY29ycmVzcG9uZHMgdG8gdGhlCisgKiAnYmFzZV9kZXN0X25hc2lkJyBmaWVsZCBvZiB0aGUgaGVhZGVyIGNvcnJlc3BvbmRzIHRvIHRoZQogICogZGVzdGluYXRpb24gbm9kZUlEIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNwZWNpZmllZCBiaXQuCiAgKi8KIHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayB7CkBAIC0xNzYsNyArMTc4LDcgQEAKIHN0cnVjdCBiYXVfbXNnX2hlYWRlciB7CiAJdW5zaWduZWQgaW50IGRlc3Rfc3Vibm9kZWlkOjY7CS8qIG11c3QgYmUgMHgxMCwgZm9yIHRoZSBMQiAqLwogCS8qIGJpdHMgNTowICovCi0JdW5zaWduZWQgaW50IGJhc2VfZGVzdF9ub2RlaWQ6MTU7IC8qIG5hc2lkIG9mIHRoZSAqLworCXVuc2lnbmVkIGludCBiYXNlX2Rlc3RfbmFzaWQ6MTU7IC8qIG5hc2lkIG9mIHRoZSAqLwogCS8qIGJpdHMgMjA6NiAqLwkJCSAgLyogZmlyc3QgYml0IGluIHV2aHViIG1hcCAqLwogCXVuc2lnbmVkIGludCBjb21tYW5kOjg7CS8qIG1lc3NhZ2UgdHlwZSAqLwogCS8qIGJpdHMgMjg6MjEgKi8KQEAgLTM3OCw2ICszODAsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGRfcmNhbmNlbGVkOyAvKiBudW1iZXIgb2YgbWVzc2FnZXMgY2FuY2VsZWQgYnkgcmVzZXRzICovCiB9OwogCitzdHJ1Y3QgaHViX2FuZF9wbm9kZSB7CisJc2hvcnQgdXZodWI7CisJc2hvcnQgcG5vZGU7Cit9OwogLyoKICAqIG9uZSBwZXItY3B1OyB0byBsb2NhdGUgdGhlIHNvZnR3YXJlIHRhYmxlcwogICovCkBAIC0zOTksMTAgKzQwNSwxMiBAQAogCWludCBiYXVkaXNhYmxlZDsKIAlpbnQgc2V0X2JhdV9vZmY7CiAJc2hvcnQgY3B1OworCXNob3J0IG9zbm9kZTsKIAlzaG9ydCB1dmh1Yl9jcHU7CiAJc2hvcnQgdXZodWI7CiAJc2hvcnQgY3B1c19pbl9zb2NrZXQ7CiAJc2hvcnQgY3B1c19pbl91dmh1YjsKKwlzaG9ydCBwYXJ0aXRpb25fYmFzZV9wbm9kZTsKIAl1bnNpZ25lZCBzaG9ydCBtZXNzYWdlX251bWJlcjsKIAl1bnNpZ25lZCBzaG9ydCB1dmh1Yl9xdWllc2NlOwogCXNob3J0IHNvY2tldF9hY2tub3dsZWRnZV9jb3VudFtERVNUX1FfU0laRV07CkBAIC00MjIsMTUgKzQzMCwxNiBAQAogCWludCBjb25nZXN0ZWRfcGVyaW9kOwogCWN5Y2xlc190IHBlcmlvZF90aW1lOwogCWxvbmcgcGVyaW9kX3JlcXVlc3RzOworCXN0cnVjdCBodWJfYW5kX3Bub2RlICp0YXJnZXRfaHViX2FuZF9wbm9kZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJhdV91dmh1Yl9pc3NldChpbnQgdXZodWIsIHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayAqZHN0cCkKIHsKIAlyZXR1cm4gY29uc3RhbnRfdGVzdF9iaXQodXZodWIsICZkc3RwLT5iaXRzWzBdKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiYXVfdXZodWJfc2V0KGludCB1dmh1Yiwgc3RydWN0IGJhdV90YXJnZXRfdXZodWJtYXNrICpkc3RwKQorc3RhdGljIGlubGluZSB2b2lkIGJhdV91dmh1Yl9zZXQoaW50IHBub2RlLCBzdHJ1Y3QgYmF1X3RhcmdldF91dmh1Ym1hc2sgKmRzdHApCiB7Ci0JX19zZXRfYml0KHV2aHViLCAmZHN0cC0+Yml0c1swXSk7CisJX19zZXRfYml0KHBub2RlLCAmZHN0cC0+Yml0c1swXSk7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYmF1X3V2aHVic19jbGVhcihzdHJ1Y3QgYmF1X3RhcmdldF91dmh1Ym1hc2sgKmRzdHAsCiAJCQkJICAgIGludCBuYml0cykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggYTUwMTc0MS4uNDI5ODAwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTM5OCw2ICszOTgsOCBAQAogCXVuc2lnbmVkIHNob3J0CW5yX29ubGluZV9jcHVzOwogCXVuc2lnbmVkIHNob3J0CXBub2RlOwogCXNob3J0CQltZW1vcnlfbmlkOworCXNwaW5sb2NrX3QJbm1pX2xvY2s7CisJdW5zaWduZWQgbG9uZwlubWlfY291bnQ7CiB9OwogZXh0ZXJuIHN0cnVjdCB1dl9ibGFkZV9pbmZvICp1dl9ibGFkZV9pbmZvOwogZXh0ZXJuIHNob3J0ICp1dl9ub2RlX3RvX2JsYWRlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCmluZGV4IDIwY2FmZWEuLmY1YmI2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogU0dJIFVWIE1NUiBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDExIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCiAjaWZuZGVmIF9BU01fWDg2X1VWX1VWX01NUlNfSApAQCAtMTA5OSw1ICsxMDk5LDE5IEBACiAgICAgfSBzOwogfTsKIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1NDUkFUQ0g1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfU0NSQVRDSDUgMHgyZDAyMDBVTAorI2RlZmluZSBVVkhfU0NSQVRDSDVfMzIgMHgwMDc3OAorCisjZGVmaW5lIFVWSF9TQ1JBVENINV9TQ1JBVENINV9TSEZUIDAKKyNkZWZpbmUgVVZIX1NDUkFUQ0g1X1NDUkFUQ0g1X01BU0sgMHhmZmZmZmZmZmZmZmZmZmZmVUwKK3VuaW9uIHV2aF9zY3JhdGNoNV91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9zY3JhdGNoNV9zIHsKKwl1bnNpZ25lZCBsb25nCXNjcmF0Y2g1IDogNjQ7ICAvKiBSVywgVzFDUyAqLworICAgIH0gczsKK307CiAKICNlbmRpZiAvKiBfX0FTTV9VVl9NTVJTX1g4Nl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IDY0M2ViZjIuLmQzZDg1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtNjgsNiArNjgsMTcgQEAKIH07CiAKIC8qKgorICogc3RydWN0IHg4Nl9pbml0X21hcHBpbmcgLSBwbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsIGtlcm5lbCBwYWdldGFibGUgc2V0dXAKKyAqIEBwYWdldGFibGVfcmVzZXJ2ZToJcmVzZXJ2ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBmb3Iga2VybmVsIHBhZ2V0YWJsZSB1c2FnZQorICoKKyAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBob29rLCBsb29rIGluCisgKiBpbml0X21lbW9yeV9tYXBwaW5nIGFuZCB0aGUgY29tbWl0IHRoYXQgYWRkZWQgaXQuCisgKi8KK3N0cnVjdCB4ODZfaW5pdF9tYXBwaW5nIHsKKwl2b2lkICgqcGFnZXRhYmxlX3Jlc2VydmUpKHU2NCBzdGFydCwgdTY0IGVuZCk7Cit9OworCisvKioKICAqIHN0cnVjdCB4ODZfaW5pdF9wYWdpbmcgLSBwbGF0Zm9ybSBzcGVjaWZpYyBwYWdpbmcgZnVuY3Rpb25zCiAgKiBAcGFnZXRhYmxlX3NldHVwX3N0YXJ0OglwbGF0Zm9ybSBzcGVjaWZpYyBwcmUgcGFnaW5nX2luaXQoKSBjYWxsCiAgKiBAcGFnZXRhYmxlX3NldHVwX2RvbmU6CXBsYXRmb3JtIHNwZWNpZmljIHBvc3QgcGFnaW5nX2luaXQoKSBjYWxsCkBAIC0xMjMsNiArMTM0LDcgQEAKIAlzdHJ1Y3QgeDg2X2luaXRfbXBwYXJzZQkJbXBwYXJzZTsKIAlzdHJ1Y3QgeDg2X2luaXRfaXJxcwkJaXJxczsKIAlzdHJ1Y3QgeDg2X2luaXRfb2VtCQlvZW07CisJc3RydWN0IHg4Nl9pbml0X21hcHBpbmcJCW1hcHBpbmc7CiAJc3RydWN0IHg4Nl9pbml0X3BhZ2luZwkJcGFnaW5nOwogCXN0cnVjdCB4ODZfaW5pdF90aW1lcnMJCXRpbWVyczsKIAlzdHJ1Y3QgeDg2X2luaXRfaW9tbXUJCWlvbW11OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jCmluZGV4IDY4MDE5NTkuLjRjMzliYWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfbmIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMKQEAgLTIxLDcgKzIxLDcgQEAKIEVYUE9SVF9TWU1CT0woYW1kX25iX21pc2NfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZF9uYl9saW5rX2lkc1tdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0xJTkspIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjQpIH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKaW5kZXggODZkMWFkNC4uNzNmYjQ2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKQEAgLTQ5OSw3ICs0OTksNyBAQAogCQkgKiBEb24ndCBlbmFibGUgdHJhbnNsYXRpb24geWV0IGJ1dCBlbmFibGUgR0FSVCBJTyBhbmQgQ1BVCiAJCSAqIGFjY2Vzc2VzIGFuZCBzZXQgRElTVExCV0FMS1BSQiBzaW5jZSBHQVJUIHRhYmxlIG1lbW9yeSBpcyBVQy4KIAkJICovCi0JCXUzMiBjdGwgPSBESVNUTEJXQUxLUFJCIHwgYXBlcl9vcmRlciA8PCAxOworCQl1MzIgY3RsID0gYXBlcl9vcmRlciA8PCAxOwogCiAJCWJ1cyA9IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5idXM7CiAJCWRldl9iYXNlID0gYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmRldl9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwppbmRleCBjNGU1NTdhLi41MjYwZmU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaWZkZWYgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IKIHU2NCBod19ubWlfZ2V0X3NhbXBsZV9wZXJpb2Qodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCA2OGRmMDliLi40NWZkMzNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC0xMjgsOCArMTI4LDggQEAKIH0KIGVhcmx5X3BhcmFtKCJub2FwaWMiLCBwYXJzZV9ub2FwaWMpOwogCi1zdGF0aWMgaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAotCQkJCSAgICAgIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKTsKK3N0YXRpYyBpbnQgaW9fYXBpY19zZXR1cF9pcnFfcGluKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAorCQkJCSBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqYXR0cik7CiAKIC8qIFdpbGwgYmUgY2FsbGVkIGluIG1wcGFyc2UvYWNwaS9zZmkgY29kZXMgZm9yIHNhdmluZyBJUlEgaW5mbyAqLwogdm9pZCBtcF9zYXZlX2lycShzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKQEAgLTM1NzAsNyArMzU3MCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLwogCi1pbnQKK3N0YXRpYyBpbnQKIGlvX2FwaWNfc2V0dXBfaXJxX3Bpbih1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpCiB7CiAJc3RydWN0IGlycV9jZmcgKmNmZyA9IGFsbG9jX2lycV9hbmRfY2ZnX2F0KGlycSwgbm9kZSk7CkBAIC0zNTg1LDggKzM1ODUsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW9fYXBpY19zZXR1cF9pcnFfcGluX29uY2UodW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUsCi0JCQkJICAgICAgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpCitpbnQgaW9fYXBpY19zZXR1cF9pcnFfcGluX29uY2UodW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUsCisJCQkgICAgICAgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpCiB7CiAJdW5zaWduZWQgaW50IGlkID0gYXR0ci0+aW9hcGljLCBwaW4gPSBhdHRyLT5pb2FwaWNfcGluOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCAzYzI4OTI4Li43YWNkMmQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogCiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CkBAIC0zNCw2ICszNiwxNCBAQAogI2luY2x1ZGUgPGFzbS9pcGkuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2VtZXJnZW5jeS1yZXN0YXJ0Lmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorCisvKiBCTUMgc2V0cyBhIGJpdCB0aGlzIE1NUiBub24temVybyBiZWZvcmUgc2VuZGluZyBhbiBOTUkgKi8KKyNkZWZpbmUgVVZIX05NSV9NTVIJCQkJVVZIX1NDUkFUQ0g1CisjZGVmaW5lIFVWSF9OTUlfTU1SX0NMRUFSCQkJKFVWSF9OTUlfTU1SICsgOCkKKyNkZWZpbmUgVVZfTk1JX1BFTkRJTkdfTUFTSwkJCSgxVUwgPDwgNjMpCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHVfbGFzdF9ubWlfY291bnQpOwogCiBERUZJTkVfUEVSX0NQVShpbnQsIHgyYXBpY19leHRyYV9iaXRzKTsKIApAQCAtNjM5LDE4ICs2NDksNDYgQEAKICAqLwogaW50IHV2X2hhbmRsZV9ubWkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIHJlYWxfdXZfbm1pOworCWludCBiaWQ7CisKIAlpZiAocmVhc29uICE9IERJRV9OTUlVTktOT1dOKQogCQlyZXR1cm4gTk9USUZZX09LOwogCiAJaWYgKGluX2NyYXNoX2tleGVjKQogCQkvKiBkbyBub3RoaW5nIGlmIGVudGVyaW5nIHRoZSBjcmFzaCBrZXJuZWwgKi8KIAkJcmV0dXJuIE5PVElGWV9PSzsKKwogCS8qCi0JICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZQotCSAqIHRvIHByZXZlbnQgaW50ZXJtaXhlZCBvdXRwdXQuCisJICogRWFjaCBibGFkZSBoYXMgYW4gTU1SIHRoYXQgaW5kaWNhdGVzIHdoZW4gYW4gTk1JIGhhcyBiZWVuIHNlbnQKKwkgKiB0byBjcHVzIG9uIHRoZSBibGFkZS4gSWYgYW4gTk1JIGlzIGRldGVjdGVkLCBhdG9taWNhbGx5CisJICogY2xlYXIgdGhlIE1NUiBhbmQgdXBkYXRlIGEgcGVyLWJsYWRlIE5NSSBjb3VudCB1c2VkIHRvCisJICogY2F1c2UgZWFjaCBjcHUgb24gdGhlIGJsYWRlIHRvIG5vdGljZSBhIG5ldyBOTUkuCisJICovCisJYmlkID0gdXZfbnVtYV9ibGFkZV9pZCgpOworCXJlYWxfdXZfbm1pID0gKHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9OTUlfTU1SKSAmIFVWX05NSV9QRU5ESU5HX01BU0spOworCisJaWYgKHVubGlrZWx5KHJlYWxfdXZfbm1pKSkgeworCQlzcGluX2xvY2soJnV2X2JsYWRlX2luZm9bYmlkXS5ubWlfbG9jayk7CisJCXJlYWxfdXZfbm1pID0gKHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9OTUlfTU1SKSAmIFVWX05NSV9QRU5ESU5HX01BU0spOworCQlpZiAocmVhbF91dl9ubWkpIHsKKwkJCXV2X2JsYWRlX2luZm9bYmlkXS5ubWlfY291bnQrKzsKKwkJCXV2X3dyaXRlX2xvY2FsX21tcihVVkhfTk1JX01NUl9DTEVBUiwgVVZfTk1JX1BFTkRJTkdfTUFTSyk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnV2X2JsYWRlX2luZm9bYmlkXS5ubWlfbG9jayk7CisJfQorCisJaWYgKGxpa2VseShfX2dldF9jcHVfdmFyKGNwdV9sYXN0X25taV9jb3VudCkgPT0gdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9jb3VudCkpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCV9fZ2V0X2NwdV92YXIoY3B1X2xhc3Rfbm1pX2NvdW50KSA9IHV2X2JsYWRlX2luZm9bYmlkXS5ubWlfY291bnQ7CisKKwkvKgorCSAqIFVzZSBhIGxvY2sgc28gb25seSBvbmUgY3B1IHByaW50cyBhdCBhIHRpbWUuCisJICogVGhpcyBwcmV2ZW50cyBpbnRlcm1peGVkIG91dHB1dC4KIAkgKi8KIAlzcGluX2xvY2soJnV2X25taV9sb2NrKTsKLQlwcl9pbmZvKCJOTUkgc3RhY2sgZHVtcCBjcHUgJXU6XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXByX2luZm8oIlVWIE5NSSBzdGFjayBkdW1wIGNwdSAldTpcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJZHVtcF9zdGFjaygpOwogCXNwaW5fdW5sb2NrKCZ1dl9ubWlfbG9jayk7CiAKQEAgLTY1OCw3ICs2OTYsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHV2X2R1bXBfc3RhY2tfbm1pX25iID0gewotCS5ub3RpZmllcl9jYWxsCT0gdXZfaGFuZGxlX25taQorCS5ub3RpZmllcl9jYWxsCT0gdXZfaGFuZGxlX25taSwKKwkucHJpb3JpdHkgPSBOTUlfTE9DQUxfTE9XX1BSSU9SIC0gMSwKIH07CiAKIHZvaWQgdXZfcmVnaXN0ZXJfbm1pX25vdGlmaWVyKHZvaWQpCkBAIC03MTcsOCArNzU2LDkgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiVVY6IEZvdW5kICVkIGJsYWRlc1xuIiwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpKTsKIAogCWJ5dGVzID0gc2l6ZW9mKHN0cnVjdCB1dl9ibGFkZV9pbmZvKSAqIHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKLQl1dl9ibGFkZV9pbmZvID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJdXZfYmxhZGVfaW5mbyA9IGt6YWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOwogCUJVR19PTighdXZfYmxhZGVfaW5mbyk7CisKIAlmb3IgKGJsYWRlID0gMDsgYmxhZGUgPCB1dl9udW1fcG9zc2libGVfYmxhZGVzKCk7IGJsYWRlKyspCiAJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm1lbW9yeV9uaWQgPSAtMTsKIApAQCAtNzQ0LDYgKzc4NCw3IEBACiAJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5wbm9kZSA9IHBub2RlOwogCQkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubnJfcG9zc2libGVfY3B1cyA9IDA7CiAJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9vbmxpbmVfY3B1cyA9IDA7CisJCQlzcGluX2xvY2tfaW5pdCgmdXZfYmxhZGVfaW5mb1tibGFkZV0ubm1pX2xvY2spOwogCQkJbWF4X3Bub2RlID0gbWF4KHBub2RlLCBtYXhfcG5vZGUpOwogCQkJYmxhZGUrKzsKIAkJfQpAQCAtODEwLDQgKzg1MSwxMSBAQAogCiAJLyogcmVnaXN0ZXIgTGVnYWN5IFZHQSBJL08gcmVkaXJlY3Rpb24gaGFuZGxlciAqLwogCXBjaV9yZWdpc3Rlcl9zZXRfdmdhX3N0YXRlKHV2X3NldF92Z2Ffc3RhdGUpOworCisJLyoKKwkgKiBGb3IgYSBrZHVtcCBrZXJuZWwgdGhlIHJlc2V0IG11c3QgYmUgQk9PVF9BQ1BJLCBub3QgQk9PVF9FRkksIGFzCisJICogRUZJIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZHVtcCBrZXJuZWwuCisJICovCisJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKQorCQlyZWJvb3RfdHlwZSA9IEJPT1RfQUNQSTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCAwYjRiZTQzLi5hZGVlMTJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC0yMjgsNiArMjI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMjM4LDYgKzEyMzksNyBAQAogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOworCXN5c2NvcmVfc3VzcGVuZCgpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCkBAIC0xMjU1LDYgKzEyNTcsNyBAQAogCQlhcG1fZXJyb3IoInN1c3BlbmQiLCBlcnIpOwogCWVyciA9IChlcnIgPT0gQVBNX1NVQ0NFU1MpID8gMCA6IC1FSU87CiAKKwlzeXNjb3JlX3Jlc3VtZSgpOwogCXN5c2Rldl9yZXN1bWUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKQEAgLTEyODAsNiArMTI4Myw3IEBACiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CisJc3lzY29yZV9zdXNwZW5kKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJZXJyID0gc2V0X3N5c3RlbV9wb3dlcl9zdGF0ZShBUE1fU1RBVEVfU1RBTkRCWSk7CkBAIC0xMjg3LDYgKzEyOTEsNyBAQAogCQlhcG1fZXJyb3IoInN0YW5kYnkiLCBlcnIpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlzeXNjb3JlX3Jlc3VtZSgpOwogCXN5c2Rldl9yZXN1bWUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDNlY2VjZTAuLjZmOWQxZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtNjEzLDggKzYxMywyNyBAQAogI2VuZGlmCiAKIAkvKiBBcyBhIHJ1bGUgcHJvY2Vzc29ycyBoYXZlIEFQSUMgdGltZXIgcnVubmluZyBpbiBkZWVwIEMgc3RhdGVzICovCi0JaWYgKGMtPng4NiA+PSAweGYgJiYgIWNwdV9oYXNfYW1kX2VycmF0dW0oYW1kX2VycmF0dW1fNDAwKSkKKwlpZiAoYy0+eDg2ID4gMHhmICYmICFjcHVfaGFzX2FtZF9lcnJhdHVtKGFtZF9lcnJhdHVtXzQwMCkpCiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FSQVQpOworCisJLyoKKwkgKiBEaXNhYmxlIEdBUlQgVExCIFdhbGsgRXJyb3JzIG9uIEZhbTEwaC4gV2UgZG8gdGhpcyBoZXJlCisJICogYmVjYXVzZSB0aGlzIGlzIGFsd2F5cyBuZWVkZWQgd2hlbiBHQVJUIGlzIGVuYWJsZWQsIGV2ZW4gaW4gYQorCSAqIGtlcm5lbCB3aGljaCBoYXMgbm8gTUNFIHN1cHBvcnQgYnVpbHQgaW4uCisJICovCisJaWYgKGMtPng4NiA9PSAweDEwKSB7CisJCS8qCisJCSAqIEJJT1Mgc2hvdWxkIGRpc2FibGUgR2FydFRsYldsayBFcnJvcnMgdGhlbXNlbGYuIElmCisJCSAqIGl0IGRvZXNuJ3QgZG8gaXQgaGVyZSBhcyBzdWdnZXN0ZWQgYnkgdGhlIEJLREcuCisJCSAqCisJCSAqIEZpeGVzOiBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMDEyCisJCSAqLworCQl1NjQgbWFzazsKKworCQlyZG1zcmwoTVNSX0FNRDY0X01DeF9NQVNLKDQpLCBtYXNrKTsKKwkJbWFzayB8PSAoMSA8PCAxMCk7CisJCXdybXNybChNU1JfQU1ENjRfTUN4X01BU0soNCksIG1hc2spOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKaW5kZXggNWEwNWVmNi4uMzM4NWVhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTE2MjYsNyArMTYyNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG1jZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewogCXBvbGxfd2FpdChmaWxlLCAmbWNlX3dhaXQsIHdhaXQpOwotCWlmIChyY3VfZGVyZWZlcmVuY2VfY2hlY2tfbWNlKG1jZWxvZy5uZXh0KSkKKwlpZiAocmN1X2FjY2Vzc19pbmRleChtY2Vsb2cubmV4dCkpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCWlmICghbWNlX2FwZWlfcmVhZF9kb25lICYmIGFwZWlfY2hlY2tfbWNlKCkpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCmluZGV4IDE2N2Y5N2IuLmJiMGFkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKQEAgLTUwOSw2ICs1MDksNyBAQAogb3V0X2ZyZWU6CiAJaWYgKGIpIHsKIAkJa29iamVjdF9wdXQoJmItPmtvYmopOworCQlsaXN0X2RlbCgmYi0+bWlzY2opOwogCQlrZnJlZShiKTsKIAl9CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDZmOGM1ZTkuLjBmMDM0NDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtNDQ2LDE4ICs0NDYsMjAgQEAKIAkgKi8KIAlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7CiAKKwloID0gbHZ0dGhtcl9pbml0OwogCS8qCiAJICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlcm1hbCBMVlQgZW50cmllcyBvbiBhbGwgQVBzIGFsd2F5cyByZWFkcwogCSAqIDB4MTAwMDAgYmVjYXVzZSBBUHMgYXJlIHdva2VuIHVwIGJ5IEJTUCBpc3N1aW5nIElOSVQtU0lQSS1TSVBJCiAJICogc2VxdWVuY2UgdG8gdGhlbSBhbmQgTFZUIHJlZ2lzdGVycyBhcmUgcmVzZXQgdG8gMHMgZXhjZXB0IGZvcgogCSAqIHRoZSBtYXNrIGJpdHMgd2hpY2ggYXJlIHNldCB0byAxcyB3aGVuIEFQcyByZWNlaXZlIElOSVQgSVBJLgotCSAqIEFsd2F5cyByZXN0b3JlIHRoZSB2YWx1ZSB0aGF0IEJJT1MgaGFzIHByb2dyYW1tZWQgb24gQVAgYmFzZWQgb24KLQkgKiBCU1AncyBpbmZvIHdlIHNhdmVkIHNpbmNlIEJJT1MgaXMgYWx3YXlzIHNldHRpbmcgdGhlIHNhbWUgdmFsdWUKLQkgKiBmb3IgYWxsIHRocmVhZHMvY29yZXMKKwkgKiBJZiBCSU9TIHRha2VzIG92ZXIgdGhlIHRoZXJtYWwgaW50ZXJydXB0IGFuZCBzZXRzIGl0cyBpbnRlcnJ1cHQKKwkgKiBkZWxpdmVyeSBtb2RlIHRvIFNNSSAobm90IGZpeGVkKSwgaXQgcmVzdG9yZXMgdGhlIHZhbHVlIHRoYXQgdGhlCisJICogQklPUyBoYXMgcHJvZ3JhbW1lZCBvbiBBUCBiYXNlZCBvbiBCU1AncyBpbmZvIHdlIHNhdmVkIHNpbmNlIEJJT1MKKwkgKiBpcyBhbHdheXMgc2V0dGluZyB0aGUgc2FtZSB2YWx1ZSBmb3IgYWxsIHRocmVhZHMvY29yZXMuCiAJICovCi0JYXBpY193cml0ZShBUElDX0xWVFRITVIsIGx2dHRobXJfaW5pdCk7CisJaWYgKChoICYgQVBJQ19ETV9GSVhFRF9NQVNLKSAhPSBBUElDX0RNX0ZJWEVEKQorCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbHZ0dGhtcl9pbml0KTsKIAotCWggPSBsdnR0aG1yX2luaXQ7CiAKIAlpZiAoKGwgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UTTEpICYmIChoICYgQVBJQ19ETV9TTUkpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCAzMDdkZmJiLi45Mjk3MzlhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTI5MywxNCArMjkzLDI0IEBACiAKIAkvKgogCSAqIEhBQ0shCi0JICogV2UgdXNlIHRoaXMgc2FtZSBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBtdHJycyBvbiBib290LgotCSAqIFRoZSBzdGF0ZSBvZiB0aGUgYm9vdCBjcHUncyBtdHJycyBoYXMgYmVlbiBzYXZlZCwgYW5kIHdlIHdhbnQKLQkgKiB0byByZXBsaWNhdGUgYWNyb3NzIGFsbCB0aGUgQVBzLgotCSAqIElmIHdlJ3JlIGRvaW5nIHRoYXQgQHJlZyBpcyBzZXQgdG8gc29tZXRoaW5nIHNwZWNpYWwuLi4KKwkgKgorCSAqIFdlIHVzZSB0aGlzIHNhbWUgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgbXRycnMgZHVyaW5nIGJvb3QsCisJICogcmVzdW1lLCBydW50aW1lIGNwdSBvbmxpbmUgYW5kIG9uIGFuIGV4cGxpY2l0IHJlcXVlc3QgdG8gc2V0IGEKKwkgKiBzcGVjaWZpYyBNVFJSLgorCSAqCisJICogRHVyaW5nIGJvb3Qgb3Igc3VzcGVuZCwgdGhlIHN0YXRlIG9mIHRoZSBib290IGNwdSdzIG10cnJzIGhhcyBiZWVuCisJICogc2F2ZWQsIGFuZCB3ZSB3YW50IHRvIHJlcGxpY2F0ZSB0aGF0IGFjcm9zcyBhbGwgdGhlIGNwdXMgdGhhdCBjb21lCisJICogb25saW5lIChlaXRoZXIgYXQgdGhlIGVuZCBvZiBib290IG9yIHJlc3VtZSBvciBkdXJpbmcgYSBydW50aW1lIGNwdQorCSAqIG9ubGluZSkuIElmIHdlJ3JlIGRvaW5nIHRoYXQsIEByZWcgaXMgc2V0IHRvIHNvbWV0aGluZyBzcGVjaWFsIGFuZCBvbgorCSAqIHRoaXMgY3B1IHdlIHN0aWxsIGRvIG10cnJfaWYtPnNldF9hbGwoKS4gRHVyaW5nIGJvb3QvcmVzdW1lLCB0aGlzCisJICogaXMgdW5uZWNlc3NhcnkgaWYgYXQgdGhpcyBwb2ludCB3ZSBhcmUgc3RpbGwgb24gdGhlIGNwdSB0aGF0IHN0YXJ0ZWQKKwkgKiB0aGUgYm9vdC9yZXN1bWUgc2VxdWVuY2UuIEJ1dCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB3ZSBhcmUgc3RpbGwKKwkgKiBvbiB0aGUgc2FtZSBjcHUuIFNvIHdlIGRvIG10cnJfaWYtPnNldF9hbGwoKSBvbiB0aGlzIGNwdSBhc3dlbGwgdG8gYmUKKwkgKiBzdXJlIHRoYXQgd2UgYXJlIGluIHN5bmMgd2l0aCBldmVyeW9uZSBlbHNlLgogCSAqLwogCWlmIChyZWcgIT0gfjBVKQogCQltdHJyX2lmLT5zZXQocmVnLCBiYXNlLCBzaXplLCB0eXBlKTsKLQllbHNlIGlmICghbXRycl9hcHNfZGVsYXllZF9pbml0KQorCWVsc2UKIAkJbXRycl9pZi0+c2V0X2FsbCgpOwogCiAJLyogV2FpdCBmb3IgdGhlIG90aGVycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCBlZWQzNjczYS4uZTYzODY4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTU4Niw4ICs1ODYsMTIgQEAKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKKwkvKgorCSAqIERvIG5vdCBhbGxvdyBjb25maWcxIChleHRlbmRlZCByZWdpc3RlcnMpIHRvIHByb3BhZ2F0ZSwKKwkgKiB0aGVyZSdzIG5vIHNhbmUgdXNlci1zcGFjZSBnZW5lcmFsaXphdGlvbiB5ZXQ6CisJICovCiAJaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX1JBVykKLQkJcmV0dXJuIHg4Nl9wbXVfZXh0cmFfcmVncyhldmVudC0+YXR0ci5jb25maWcsIGV2ZW50KTsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUpCiAJCXJldHVybiBzZXRfZXh0X2h3X2F0dHIoaHdjLCBldmVudCk7CkBAIC02MDksOCArNjEzLDggQEAKIAkvKgogCSAqIEJyYW5jaCB0cmFjaW5nOgogCSAqLwotCWlmICgoYXR0ci0+Y29uZmlnID09IFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykgJiYKLQkgICAgKGh3Yy0+c2FtcGxlX3BlcmlvZCA9PSAxKSkgeworCWlmIChhdHRyLT5jb25maWcgPT0gUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TICYmCisJICAgICFhdHRyLT5mcmVxICYmIGh3Yy0+c2FtcGxlX3BlcmlvZCA9PSAxKSB7CiAJCS8qIEJUUyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXJjaGl0ZWN0dXJlLiAqLwogCQlpZiAoIXg4Nl9wbXUuYnRzX2FjdGl2ZSkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTEyODQsNiArMTI4OCwxNiBAQAogCiAJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCisJLyoKKwkgKiBTb21lIGNoaXBzZXRzIG5lZWQgdG8gdW5tYXNrIHRoZSBMVlRQQyBpbiBhIHBhcnRpY3VsYXIgc3BvdAorCSAqIGluc2lkZSB0aGUgbm1pIGhhbmRsZXIuICBBcyBhIHJlc3VsdCwgdGhlIHVubWFza2luZyB3YXMgcHVzaGVkCisJICogaW50byBhbGwgdGhlIG5taSBoYW5kbGVycy4KKwkgKgorCSAqIFRoaXMgZ2VuZXJpYyBoYW5kbGVyIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBpc3N1ZXMgd2hlcmUgdGhlCisJICogdW5tYXNraW5nIG9jY3VycyBzbyBpdCB3YXMgbGVmdCBhdCB0aGUgdG9wLgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOworCiAJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaWR4KyspIHsKIAkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkgewogCQkJLyoKQEAgLTEzNzAsOCArMTM4NCw2IEBACiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAl9CiAKLQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKLQogCWhhbmRsZWQgPSB4ODZfcG11LmhhbmRsZV9pcnEoYXJncy0+cmVncyk7CiAJaWYgKCFoYW5kbGVkKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKaW5kZXggNDYxZjYyYi4uY2Y0ZTM2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYwpAQCAtOCw3ICs4LDcgQEAKICBbIEMoTDFEKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDEsIC8qIERhdGEgQ2FjaGUgTWlzc2VzICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBEYXRhIENhY2hlIE1pc3NlcyAgICAgICAgICAqLwogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0MiwgLyogRGF0YSBDYWNoZSBSZWZpbGxzIDpzeXN0ZW0gKi8KQEAgLTQyNyw3ICs0MjcsOSBAQAogICoKICAqIEV4Y2VwdGlvbnM6CiAgKgorICogMHgwMDAJRlAJUEVSRl9DVExbM10sIFBFUkZfQ1RMWzU6M10gKCopCiAgKiAweDAwMwlGUAlQRVJGX0NUTFszXQorICogMHgwMDQJRlAJUEVSRl9DVExbM10sIFBFUkZfQ1RMWzU6M10gKCopCiAgKiAweDAwQglGUAlQRVJGX0NUTFszXQogICogMHgwMEQJRlAJUEVSRl9DVExbM10KICAqIDB4MDIzCURFCVBFUkZfQ1RMWzI6MF0KQEAgLTQ0OCw2ICs0NTAsOCBAQAogICogMHgwREYJTFMJUEVSRl9DVExbNTowXQogICogMHgxRDYJRVgJUEVSRl9DVExbNTowXQogICogMHgxRDgJRVgJUEVSRl9DVExbNTowXQorICoKKyAqICgqKSBkZXBlbmRpbmcgb24gdGhlIHVtYXNrIGFsbCBGUFUgY291bnRlcnMgbWF5IGJlIHVzZWQKICAqLwogCiBzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgYW1kX2YxNV9QTUMwICA9IEVWRU5UX0NPTlNUUkFJTlQoMCwgMHgwMSwgMCk7CkBAIC00NjAsMTggKzQ2NCwyOCBAQAogc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICoKIGFtZF9nZXRfZXZlbnRfY29uc3RyYWludHNfZjE1aChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCXVuc2lnbmVkIGludCBldmVudF9jb2RlID0gYW1kX2dldF9ldmVudF9jb2RlKCZldmVudC0+aHcpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXVuc2lnbmVkIGludCBldmVudF9jb2RlID0gYW1kX2dldF9ldmVudF9jb2RlKGh3Yyk7CiAKIAlzd2l0Y2ggKGV2ZW50X2NvZGUgJiBBTURfRVZFTlRfVFlQRV9NQVNLKSB7CiAJY2FzZSBBTURfRVZFTlRfRlA6CiAJCXN3aXRjaCAoZXZlbnRfY29kZSkgeworCQljYXNlIDB4MDAwOgorCQkJaWYgKCEoaHdjLT5jb25maWcgJiAweDAwMDBGMDAwVUxMKSkKKwkJCQlicmVhazsKKwkJCWlmICghKGh3Yy0+Y29uZmlnICYgMHgwMDAwMEYwMFVMTCkpCisJCQkJYnJlYWs7CisJCQlyZXR1cm4gJmFtZF9mMTVfUE1DMzsKKwkJY2FzZSAweDAwNDoKKwkJCWlmIChod2VpZ2h0X2xvbmcoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVU1BU0spIDw9IDEpCisJCQkJYnJlYWs7CisJCQlyZXR1cm4gJmFtZF9mMTVfUE1DMzsKIAkJY2FzZSAweDAwMzoKIAkJY2FzZSAweDAwQjoKIAkJY2FzZSAweDAwRDoKIAkJCXJldHVybiAmYW1kX2YxNV9QTUMzOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuICZhbWRfZjE1X1BNQzUzOwogCQl9CisJCXJldHVybiAmYW1kX2YxNV9QTUM1MzsKIAljYXNlIEFNRF9FVkVOVF9MUzoKIAljYXNlIEFNRF9FVkVOVF9EQzoKIAljYXNlIEFNRF9FVkVOVF9FWF9MUzoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKaW5kZXggOGZjMmIyYy4uNDQ3YTI4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKQEAgLTI1LDcgKzI1LDcgQEAKIC8qCiAgKiBJbnRlbCBQZXJmTW9uLCB1c2VkIG9uIENvcmUgYW5kIGxhdGVyLgogICovCi1zdGF0aWMgY29uc3QgdTY0IGludGVsX3BlcmZtb25fZXZlbnRfbWFwW10gPQorc3RhdGljIHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtQRVJGX0NPVU5UX0hXX01BWF0gX19yZWFkX21vc3RseSA9CiB7CiAgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDAzYywKICAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCkBAIC0xODQsMjYgKzE4NCwyMyBAQAogCX0sCiAgfSwKICBbIEMoTEwgICkgXSA9IHsKLQkvKgotCSAqIFRCRDogTmVlZCBPZmYtY29yZSBSZXNwb25zZSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIHN1cHBvcnQKLQkgKi8KIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5BTllfREFUQS5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzAuQU5ZX1JGTy5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5BTllfUkZPLkFOWV9MTENfTUlTUyAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiYiwKKwkJLyogT0ZGQ09SRV9SRVNQT05TRS5BTllfUkZPLkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5QUkVGRVRDSC5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAgfSwKICBbIEMoRFRMQikgXSA9IHsKQEAgLTI4NSwyNiArMjgyLDI2IEBACiAgfSwKICBbIEMoTEwgICkgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5BTllfREFUQS5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAJLyoKIAkgKiBVc2UgUkZPLCBub3QgV1JJVEVCQUNLLCBiZWNhdXNlIGEgd3JpdGUgbWlzcyB3b3VsZCB0eXBpY2FsbHkgb2NjdXIKIAkgKiBvbiBSRk8uCiAJICovCiAJWyBDKE9QX1dSSVRFKSBdID0gewotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX1JGTy5MT0NBTF9DQUNIRSAqLwotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFiYiwKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9SRk8uQU5ZX0xMQ19NSVNTICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX1JGTy5MT0NBTF9DQUNIRSAqLworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFiNywKKwkJLyogT0ZGQ09SRV9SRVNQT05TRS5BTllfUkZPLkFOWV9MTENfTUlTUyAqLwogCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5QUkVGRVRDSC5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAgfSwKICBbIEMoRFRMQikgXSA9IHsKQEAgLTM1MiwxNiArMzQ5LDM2IEBACiB9OwogCiAvKgotICogT0ZGQ09SRV9SRVNQT05TRSBNU1IgYml0cyAoc3Vic2V0KSwgU2VlIElBMzIgU0RNIFZvbCAzIDMwLjYuMS4zCisgKiBOZWhhbGVtL1dlc3RtZXJlIE1TUl9PRkZDT1JFX1JFU1BPTlNFIGJpdHM7CisgKiBTZWUgSUEzMiBTRE0gVm9sIDNCIDMwLjYuMS4zCiAgKi8KIAotI2RlZmluZSBETU5EX0RBVEFfUkQgICAgICgxIDw8IDApCi0jZGVmaW5lIERNTkRfUkZPICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgRE1ORF9XQiAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBQRl9EQVRBX1JEICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFBGX0RBVEFfUkZPICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgUkVTUF9VTkNPUkVfSElUICAoMSA8PCA4KQotI2RlZmluZSBSRVNQX01JU1MgICAgICAgICgweGY2MDApIC8qIG5vbiB1bmNvcmUgaGl0ICovCisjZGVmaW5lIE5ITV9ETU5EX0RBVEFfUkQJKDEgPDwgMCkKKyNkZWZpbmUgTkhNX0RNTkRfUkZPCQkoMSA8PCAxKQorI2RlZmluZSBOSE1fRE1ORF9JRkVUQ0gJCSgxIDw8IDIpCisjZGVmaW5lIE5ITV9ETU5EX1dCCQkoMSA8PCAzKQorI2RlZmluZSBOSE1fUEZfREFUQV9SRAkJKDEgPDwgNCkKKyNkZWZpbmUgTkhNX1BGX0RBVEFfUkZPCQkoMSA8PCA1KQorI2RlZmluZSBOSE1fUEZfSUZFVENICQkoMSA8PCA2KQorI2RlZmluZSBOSE1fT0ZGQ09SRV9PVEhFUgkoMSA8PCA3KQorI2RlZmluZSBOSE1fVU5DT1JFX0hJVAkJKDEgPDwgOCkKKyNkZWZpbmUgTkhNX09USEVSX0NPUkVfSElUX1NOUAkoMSA8PCA5KQorI2RlZmluZSBOSE1fT1RIRVJfQ09SRV9ISVRNCSgxIDw8IDEwKQorICAgICAgICAJCQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBOSE1fUkVNT1RFX0NBQ0hFX0ZXRAkoMSA8PCAxMikKKyNkZWZpbmUgTkhNX1JFTU9URV9EUkFNCQkoMSA8PCAxMykKKyNkZWZpbmUgTkhNX0xPQ0FMX0RSQU0JCSgxIDw8IDE0KQorI2RlZmluZSBOSE1fTk9OX0RSQU0JCSgxIDw8IDE1KQorCisjZGVmaW5lIE5ITV9BTExfRFJBTQkJKE5ITV9SRU1PVEVfRFJBTXxOSE1fTE9DQUxfRFJBTSkKKworI2RlZmluZSBOSE1fRE1ORF9SRUFECQkoTkhNX0RNTkRfREFUQV9SRCkKKyNkZWZpbmUgTkhNX0RNTkRfV1JJVEUJCShOSE1fRE1ORF9SRk98TkhNX0RNTkRfV0IpCisjZGVmaW5lIE5ITV9ETU5EX1BSRUZFVENICShOSE1fUEZfREFUQV9SRHxOSE1fUEZfREFUQV9SRk8pCisKKyNkZWZpbmUgTkhNX0wzX0hJVAkoTkhNX1VOQ09SRV9ISVR8TkhNX09USEVSX0NPUkVfSElUX1NOUHxOSE1fT1RIRVJfQ09SRV9ISVRNKQorI2RlZmluZSBOSE1fTDNfTUlTUwkoTkhNX05PTl9EUkFNfE5ITV9BTExfRFJBTXxOSE1fUkVNT1RFX0NBQ0hFX0ZXRCkKKyNkZWZpbmUgTkhNX0wzX0FDQ0VTUwkoTkhNX0wzX0hJVHxOSE1fTDNfTUlTUykKIAogc3RhdGljIF9faW5pdGNvbnN0IGNvbnN0IHU2NCBuZWhhbGVtX2h3X2NhY2hlX2V4dHJhX3JlZ3MKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCkBAIC0zNzAsMTYgKzM4NywxNiBAQAogewogIFsgQyhMTCAgKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IERNTkRfREFUQV9SRHxSRVNQX1VOQ09SRV9ISVQsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gRE1ORF9EQVRBX1JEfFJFU1BfTUlTUywKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBOSE1fRE1ORF9SRUFEfE5ITV9MM19BQ0NFU1MsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gTkhNX0RNTkRfUkVBRHxOSE1fTDNfTUlTUywKIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBETU5EX1JGT3xETU5EX1dCfFJFU1BfVU5DT1JFX0hJVCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBETU5EX1JGT3xETU5EX1dCfFJFU1BfTUlTUywKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBOSE1fRE1ORF9XUklURXxOSE1fTDNfQUNDRVNTLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IE5ITV9ETU5EX1dSSVRFfE5ITV9MM19NSVNTLAogCX0sCiAJWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IFBGX0RBVEFfUkR8UEZfREFUQV9SRk98UkVTUF9VTkNPUkVfSElULAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IFBGX0RBVEFfUkR8UEZfREFUQV9SRk98UkVTUF9NSVNTLAorCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IE5ITV9ETU5EX1BSRUZFVENIfE5ITV9MM19BQ0NFU1MsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gTkhNX0RNTkRfUFJFRkVUQ0h8TkhNX0wzX01JU1MsCiAJfSwKICB9CiB9OwpAQCAtMzkxLDEyICs0MDgsMTIgQEAKIHsKICBbIEMoTDFEKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgICAqLworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDEwYiwgLyogTUVNX0lOU1RfUkVUSVJFRC5MT0FEUyAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE1MSwgLyogTDFELlJFUEwgICAgICAgICAgICAgICAgICAgICAqLwogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgICAqLworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDIwYiwgLyogTUVNX0lOU1RfUkVUVVJFRC5TVE9SRVMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI1MSwgLyogTDFELk1fUkVQTCAgICAgICAgICAgICAgICAgICAqLwogCX0sCiAJWyBDKE9QX1BSRUZFVENIKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLwpAQCAtOTMzLDYgKzk1MCwxNiBAQAogCiAJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCisJLyoKKwkgKiBTb21lIGNoaXBzZXRzIG5lZWQgdG8gdW5tYXNrIHRoZSBMVlRQQyBpbiBhIHBhcnRpY3VsYXIgc3BvdAorCSAqIGluc2lkZSB0aGUgbm1pIGhhbmRsZXIuICBBcyBhIHJlc3VsdCwgdGhlIHVubWFza2luZyB3YXMgcHVzaGVkCisJICogaW50byBhbGwgdGhlIG5taSBoYW5kbGVycy4KKwkgKgorCSAqIFRoaXMgaGFuZGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgaXNzdWVzIHdpdGggdGhlIHVubWFza2luZworCSAqIHNvIGl0IHdhcyBsZWZ0IGF0IHRoZSB0b3AuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CisKIAlpbnRlbF9wbXVfZGlzYWJsZV9hbGwoKTsKIAloYW5kbGVkID0gaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKIAlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwpAQCAtOTk4LDYgKzEwMjUsOSBAQAogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCXVuc2lnbmVkIGludCBod19ldmVudCwgYnRzX2V2ZW50OwogCisJaWYgKGV2ZW50LT5hdHRyLmZyZXEpCisJCXJldHVybiBOVUxMOworCiAJaHdfZXZlbnQgPSBod2MtPmNvbmZpZyAmIElOVEVMX0FSQ0hfRVZFTlRfTUFTSzsKIAlidHNfZXZlbnQgPSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpOwogCkBAIC0xMzA1LDcgKzEzMzUsNyBAQAogCSAqIEFKMTA2IGNvdWxkIHBvc3NpYmx5IGJlIHdvcmtlZCBhcm91bmQgYnkgbm90IGFsbG93aW5nIExCUgogCSAqICAgICAgIHVzYWdlIGZyb20gUEVCUywgaW5jbHVkaW5nIHRoZSBmaXh1cC4KIAkgKiBBSjY4ICBjb3VsZCBwb3NzaWJseSBiZSB3b3JrZWQgYXJvdW5kIGJ5IGFsd2F5cyBwcm9ncmFtbWluZwotCSAqIAkgYSBwZWJzX2V2ZW50X3Jlc2V0WzBdIHZhbHVlIGFuZCBjb3Bpbmcgd2l0aCB0aGUgbG9zdCBldmVudHMuCisJICoJIGEgcGVic19ldmVudF9yZXNldFswXSB2YWx1ZSBhbmQgY29waW5nIHdpdGggdGhlIGxvc3QgZXZlbnRzLgogCSAqCiAJICogQnV0IHRha2VuIHRvZ2V0aGVyIGl0IG1pZ2h0IGp1c3QgbWFrZSBzZW5zZSB0byBub3QgZW5hYmxlIFBFQlMgb24KIAkgKiB0aGVzZSBjaGlwcy4KQEAgLTE0MDksNiArMTQzOSwxOCBAQAogCQl4ODZfcG11LnBlcmNvcmVfY29uc3RyYWludHMgPSBpbnRlbF9uZWhhbGVtX3BlcmNvcmVfY29uc3RyYWludHM7CiAJCXg4Nl9wbXUuZW5hYmxlX2FsbCA9IGludGVsX3BtdV9uaG1fZW5hYmxlX2FsbDsKIAkJeDg2X3BtdS5leHRyYV9yZWdzID0gaW50ZWxfbmVoYWxlbV9leHRyYV9yZWdzOworCisJCWlmIChlYnggJiAweDQwKSB7CisJCQkvKgorCQkJICogRXJyYXR1bSBBQUo4MCBkZXRlY3RlZCwgd2Ugd29yayBpdCBhcm91bmQgYnkgdXNpbmcKKwkJCSAqIHRoZSBCUl9NSVNQX0VYRUMuQU5ZIGV2ZW50LiBUaGlzIHdpbGwgb3Zlci1jb3VudAorCQkJICogYnJhbmNoLW1pc3NlcywgYnV0IGl0J3Mgc3RpbGwgbXVjaCBiZXR0ZXIgdGhhbiB0aGUKKwkJCSAqIGFyY2hpdGVjdHVyYWwgZXZlbnQgd2hpY2ggaXMgb2Z0ZW4gY29tcGxldGVseSBib2d1czoKKwkJCSAqLworCQkJaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXSA9IDB4N2Y4OTsKKworCQkJcHJfY29udCgiZXJyYXR1bSBBQUo4MCB3b3JrZWQgYXJvdW5kLCAiKTsKKwkJfQogCQlwcl9jb250KCJOZWhhbGVtIGV2ZW50cywgIik7CiAJCWJyZWFrOwogCkBAIC0xNDI1LDYgKzE0NjcsNyBAQAogCiAJY2FzZSAzNzogLyogMzIgbm0gbmVoYWxlbSwgIkNsYXJrZGFsZSIgKi8KIAljYXNlIDQ0OiAvKiAzMiBubSBuZWhhbGVtLCAiR3VsZnRvd24iICovCisJY2FzZSA0NzogLyogMzIgbm0gWGVvbiBFNyAqLwogCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCB3ZXN0bWVyZV9od19jYWNoZV9ldmVudF9pZHMsCiAJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CiAJCW1lbWNweShod19jYWNoZV9leHRyYV9yZWdzLCBuZWhhbGVtX2h3X2NhY2hlX2V4dHJhX3JlZ3MsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCmluZGV4IGMyNTIwZTEuLmU5M2ZjZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCkBAIC05NDcsMTQgKzk0NywyMyBAQAogCQlpZiAoIXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQpKQogCQkJY29udGludWU7CiAJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlwNF9wbXVfZGlzYWJsZV9ldmVudChldmVudCk7CisJCQl4ODZfcG11X3N0b3AoZXZlbnQsIDApOwogCX0KIAotCWlmIChoYW5kbGVkKSB7Ci0JCS8qIHA0IHF1aXJrOiB1bm1hc2sgaXQgYWdhaW4gKi8KLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3JlYWQoQVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKwlpZiAoaGFuZGxlZCkKIAkJaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKLQl9CisKKwkvKgorCSAqIFdoZW4gZGVhbGluZyB3aXRoIHRoZSB1bm1hc2tpbmcgb2YgdGhlIExWVFBDIG9uIFA0IHBlcmYgaHcsIGl0IGhhcworCSAqIGJlZW4gb2JzZXJ2ZWQgdGhhdCB0aGUgT1ZGIGJpdCBmbGFnIGhhcyB0byBiZSBjbGVhcmVkIGZpcnN0IF9iZWZvcmVfCisJICogdGhlIExWVFBDIGNhbiBiZSB1bm1hc2tlZC4KKwkgKgorCSAqIFRoZSByZWFzb24gaXMgdGhlIE5NSSBsaW5lIHdpbGwgY29udGludWUgdG8gYmUgYXNzZXJ0ZWQgd2hpbGUgdGhlIE9WRgorCSAqIGJpdCBpcyBzZXQuICBUaGlzIGNhdXNlcyBhIHNlY29uZCBOTUkgdG8gZ2VuZXJhdGUgaWYgdGhlIExWVFBDIGlzCisJICogdW5tYXNrZWQgYmVmb3JlIHRoZSBPVkYgYml0IGlzIGNsZWFyZWQsIGxlYWRpbmcgdG8gdW5rbm93biBOTUkKKwkgKiBtZXNzYWdlcy4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKIAogCXJldHVybiBoYW5kbGVkOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYyBiL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMKaW5kZXggNzA2YTlmYi4uZTkwZjA4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAogCXNldF9pb19hcGljX2lycV9hdHRyKCZhdHRyLCBpZHgsIGxpbmUsIGl0LT50cmlnZ2VyLCBpdC0+cG9sYXJpdHkpOwogCi0JcmV0dXJuIGlvX2FwaWNfc2V0dXBfaXJxX3Bpbigqb3V0X2h3aXJxLCBjcHVfdG9fbm9kZSgwKSwgJmF0dHIpOworCXJldHVybiBpb19hcGljX3NldHVwX2lycV9waW5fb25jZSgqb3V0X2h3aXJxLCBjcHVfdG9fbm9kZSgwKSwgJmF0dHIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW9hcGljX2FkZF9vZm5vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCA5NDhhMzFlLi4xY2IwYjlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGM5NjlmZDkuLmYxYTYyNDRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTExODMsMTIgKzExODMsMTMgQEAKIAkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBUaGlzIGlzIHBvc3NpYmxlIGlmIG9wIGlzIHVuZGVyIGRlbGF5ZWQgdW5vcHRpbWl6aW5nICovCiAJaWYgKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSkKIAkJcmV0dXJuOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChrcHJvYmVfcnVubmluZygpKSB7CiAJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQoJm9wLT5rcCk7CiAJfSBlbHNlIHsKQEAgLTEyMDcsNyArMTIwOCw3IEBACiAJCW9wdF9wcmVfaGFuZGxlcigmb3AtPmtwLCByZWdzKTsKIAkJX190aGlzX2NwdV93cml0ZShjdXJyZW50X2twcm9iZSwgTlVMTCk7CiAJfQotCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGNvcHlfb3B0aW1pemVkX2luc3RydWN0aW9ucyh1OCAqZGVzdCwgdTggKnNyYykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKaW5kZXggNWVkMGFiNS4uZjkyNDI4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKQEAgLTU1MCw2ICs1NTAsNyBAQAogCW1pY3JvY29kZV9kZXZfZXhpdCgpOwogCiAJdW5yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJm1jX2NwdV9ub3RpZmllcik7CisJdW5yZWdpc3Rlcl9zeXNjb3JlX29wcygmbWNfc3lzY29yZV9vcHMpOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfbG9jaygmbWljcm9jb2RlX211dGV4KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggODJhZGEwMS4uYjExN2VmZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTgxLDYgKzgxLDkgQEAKICNkZWZpbmUgQUdQRVhURVJOCiAjZW5kaWYKIAorLyogR0FSVCBjYW4gb25seSByZW1hcCB0byBwaHlzaWNhbCBhZGRyZXNzZXMgPCAxVEIgKi8KKyNkZWZpbmUgR0FSVF9NQVhfUEhZU19BRERSCSgxVUxMIDw8IDQwKQorCiAvKiBiYWNrZG9vciBpbnRlcmZhY2UgdG8gQUdQIGRyaXZlciAqLwogQUdQRVhURVJOIGludCBhZ3BfbWVtb3J5X3Jlc2VydmVkOwogQUdQRVhURVJOIF9fdTMyICphZ3BfZ2F0dF90YWJsZTsKQEAgLTIxMiw5ICsyMTUsMTMgQEAKIAkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpciwgdW5zaWduZWQgbG9uZyBhbGlnbl9tYXNrKQogewogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBoeXNfbWVtLCBzaXplLCBQQUdFX1NJWkUpOwotCXVuc2lnbmVkIGxvbmcgaW9tbXVfcGFnZSA9IGFsbG9jX2lvbW11KGRldiwgbnBhZ2VzLCBhbGlnbl9tYXNrKTsKKwl1bnNpZ25lZCBsb25nIGlvbW11X3BhZ2U7CiAJaW50IGk7CiAKKwlpZiAodW5saWtlbHkocGh5c19tZW0gKyBzaXplID4gR0FSVF9NQVhfUEhZU19BRERSKSkKKwkJcmV0dXJuIGJhZF9kbWFfYWRkcjsKKworCWlvbW11X3BhZ2UgPSBhbGxvY19pb21tdShkZXYsIG5wYWdlcywgYWxpZ25fbWFzayk7CiAJaWYgKGlvbW11X3BhZ2UgPT0gLTEpIHsKIAkJaWYgKCFub25mb3JjZWRfaW9tbXUoZGV2LCBwaHlzX21lbSwgc2l6ZSkpCiAJCQlyZXR1cm4gcGh5c19tZW07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNDU4OTJkYy4uZjY1ZTViNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtNjA4LDYgKzYwOCw5IEBACiAJdW5zaWduZWQgbGVuLCB0eXBlOwogCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKIAorCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHRzaykgPCAwKQorCQlyZXR1cm4gLUVTUkNIOworCiAJZGF0YSAmPSB+RFJfQ09OVFJPTF9SRVNFUlZFRDsKIAlvbGRfZHI3ID0gcHRyYWNlX2dldF9kcjcodGhyZWFkLT5wdHJhY2VfYnBzKTsKIHJlc3RvcmU6CkBAIC02NTUsNiArNjU4LDkgQEAKIAkJfQogCQlnb3RvIHJlc3RvcmU7CiAJfQorCisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOworCiAJcmV0dXJuICgob3JpZ19yZXQgPCAwKSA/IG9yaWdfcmV0IDogcmMpOwogfQogCkBAIC02NjgsMTAgKzY3NCwxNyBAQAogCiAJaWYgKG4gPCBIQlBfTlVNKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKKworCQlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0c2spIDwgMCkKKwkJCXJldHVybiAtRVNSQ0g7CisKIAkJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbbl07CiAJCWlmICghYnApCi0JCQlyZXR1cm4gMDsKLQkJdmFsID0gYnAtPmh3LmluZm8uYWRkcmVzczsKKwkJCXZhbCA9IDA7CisJCWVsc2UKKwkJCXZhbCA9IGJwLT5ody5pbmZvLmFkZHJlc3M7CisKKwkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOwogCX0gZWxzZSBpZiAobiA9PSA2KSB7CiAJCXZhbCA9IHRocmVhZC0+ZGVidWdyZWc2OwogCSB9IGVsc2UgaWYgKG4gPT0gNykgewpAQCAtNjg2LDYgKzY5OSwxMCBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJaW50IGVyciA9IDA7CisKKwlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0c2spIDwgMCkKKwkJcmV0dXJuIC1FU1JDSDsKIAogCWlmICghdC0+cHRyYWNlX2Jwc1tucl0pIHsKIAkJcHRyYWNlX2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7CkBAIC03MDksMjQgKzcyNiwyMyBAQAogCQkgKiB3cml0aW5nIGZvciB0aGUgdXNlci4gQW5kIGFueXdheSB0aGlzIGlzIHRoZSBwcmV2aW91cwogCQkgKiBiZWhhdmlvdXIuCiAJCSAqLwotCQlpZiAoSVNfRVJSKGJwKSkKLQkJCXJldHVybiBQVFJfRVJSKGJwKTsKKwkJaWYgKElTX0VSUihicCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoYnApOworCQkJZ290byBwdXQ7CisJCX0KIAogCQl0LT5wdHJhY2VfYnBzW25yXSA9IGJwOwogCX0gZWxzZSB7Ci0JCWludCBlcnI7Ci0KIAkJYnAgPSB0LT5wdHJhY2VfYnBzW25yXTsKIAogCQlhdHRyID0gYnAtPmF0dHI7CiAJCWF0dHIuYnBfYWRkciA9IGFkZHI7CiAJCWVyciA9IG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoYnAsICZhdHRyKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiAJfQogCi0KLQlyZXR1cm4gMDsKK3B1dDoKKwlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRzayk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCBkM2NlMzdlLi4wOGM0NGIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFjcGkvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfMzIuUwppbmRleCAyOTA5MmIzLi4xZDVjNDZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF8zMi5TCkBAIC0yMSwyNiArMjEsMjYgQEAKIAkvKiBHZXQgb3VyIG93biByZWxvY2F0ZWQgYWRkcmVzcyAqLwogCWNhbGwJMWYKIDE6CXBvcGwJJWVieAotCXN1YmwJJDFiLCAlZWJ4CisJc3VibAkkKDFiIC0gcl9iYXNlKSwgJWVieAogCiAJLyogQ29tcHV0ZSB0aGUgZXF1aXZhbGVudCByZWFsLW1vZGUgc2VnbWVudCAqLwogCW1vdmwJJWVieCwgJWVjeAogCXNocmwJJDQsICVlY3gKIAkKIAkvKiBQYXRjaCBwb3N0LXJlYWwtbW9kZSBzZWdtZW50IGp1bXAgKi8KLQltb3Z3CWRpc3BhdGNoX3RhYmxlKCVlYngsJWVheCwyKSwlYXgKLQltb3Z3CSVheCwgMTAxZiglZWJ4KQotCW1vdncJJWN4LCAxMDJmKCVlYngpCisJbW92dwkoZGlzcGF0Y2hfdGFibGUgLSByX2Jhc2UpKCVlYngsJWVheCwyKSwlYXgKKwltb3Z3CSVheCwgKDEwMWYgLSByX2Jhc2UpKCVlYngpCisJbW92dwklY3gsICgxMDJmIC0gcl9iYXNlKSglZWJ4KQogCiAJLyogU2V0IHVwIHRoZSBJRFQgZm9yIHJlYWwgbW9kZS4gKi8KLQlsaWR0bAltYWNoaW5lX3JlYWxfcmVzdGFydF9pZHQoJWVieCkKKwlsaWR0bAkobWFjaGluZV9yZWFsX3Jlc3RhcnRfaWR0IC0gcl9iYXNlKSglZWJ4KQogCiAJLyoKIAkgKiBTZXQgdXAgYSBHRFQgZnJvbSB3aGljaCB3ZSBjYW4gbG9hZCBzZWdtZW50IGRlc2NyaXB0b3JzIGZvciByZWFsCiAJICogbW9kZS4gIFRoZSBHRFQgaXMgbm90IHVzZWQgaW4gcmVhbCBtb2RlOyBpdCBpcyBqdXN0IG5lZWRlZCBoZXJlIHRvCiAJICogcHJlcGFyZSB0aGUgZGVzY3JpcHRvcnMuCiAJICovCi0JbGdkdGwJbWFjaGluZV9yZWFsX3Jlc3RhcnRfZ2R0KCVlYngpCisJbGdkdGwJKG1hY2hpbmVfcmVhbF9yZXN0YXJ0X2dkdCAtIHJfYmFzZSkoJWVieCkKIAogCS8qCiAJICogTG9hZCB0aGUgZGF0YSBzZWdtZW50IHJlZ2lzdGVycyB3aXRoIDE2LWJpdCBjb21wYXRpYmxlIHZhbHVlcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA1YTA0ODRhLi40YmU5YjM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtOTc2LDYgKzk3NiwxMSBAQAogCXBhZ2luZ19pbml0KCk7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9kb25lKHN3YXBwZXJfcGdfZGlyKTsKIAorCWlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsID49IDApIHsKKwkJLyogQSBDUFUgaGFzICVjcjQgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIENQVUlEICovCisJCW1tdV9jcjRfZmVhdHVyZXMgPSByZWFkX2NyNCgpOworCX0KKwogI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBzeW5jIGJhY2sga2VybmVsIGFkZHJlc3MgcmFuZ2UgKi8KIAljbG9uZV9wZ2RfcmFuZ2UoaW5pdGlhbF9wYWdlX3RhYmxlICsgS0VSTkVMX1BHRF9CT1VOREFSWSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKaW5kZXggYzExNTE0ZTkuLjc1ZWY0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCkBAIC02MSw2ICs2MSwxMCBAQAogCQkuYmFubmVyCQkJPSBkZWZhdWx0X2Jhbm5lciwKIAl9LAogCisJLm1hcHBpbmcgPSB7CisJCS5wYWdldGFibGVfcmVzZXJ2ZQkJPSBuYXRpdmVfcGFnZXRhYmxlX3Jlc2VydmUsCisJfSwKKwogCS5wYWdpbmcgPSB7CiAJCS5wYWdldGFibGVfc2V0dXBfc3RhcnQJPSBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0LAogCQkucGFnZXRhYmxlX3NldHVwX2RvbmUJPSBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNThmNTE3Yi4uOTM0YjRjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMjM5NSw5ICsyMzk1LDkgQEAKIAkJaW50IGk7CiAKIAkJZW50cnktPmZsYWdzIHw9IEtWTV9DUFVJRF9GTEFHX1NJR05JRkNBTlRfSU5ERVg7Ci0JCWZvciAoaSA9IDE7ICpuZW50IDwgbWF4bmVudDsgKytpKSB7Ci0JCQlpZiAoZW50cnlbaSAtIDFdLmVheCA9PSAwICYmIGkgIT0gMikKLQkJCQlicmVhazsKKwkJZm9yIChpID0gMTsgKm5lbnQgPCBtYXhuZW50ICYmIGkgPCA2NDsgKytpKSB7CisJCQlpZiAoZW50cnlbaV0uZWF4ID09IDApCisJCQkJY29udGludWU7CiAJCQlkb19jcHVpZF8xX2VudCgmZW50cnlbaV0sIGZ1bmN0aW9uLCBpKTsKIAkJCWVudHJ5W2ldLmZsYWdzIHw9CiAJCQkgICAgICAgS1ZNX0NQVUlEX0ZMQUdfU0lHTklGQ0FOVF9JTkRFWDsKQEAgLTQ5NTgsMTIgKzQ5NTgsNiBAQAogCQkJYmVzdCA9IGU7CiAJCQlicmVhazsKIAkJfQotCQkvKgotCQkgKiBCb3RoIGJhc2ljIG9yIGJvdGggZXh0ZW5kZWQ/Ci0JCSAqLwotCQlpZiAoKChlLT5mdW5jdGlvbiBeIGZ1bmN0aW9uKSAmIDB4ODAwMDAwMDApID09IDApCi0JCQlpZiAoIWJlc3QgfHwgZS0+ZnVuY3Rpb24gPiBiZXN0LT5mdW5jdGlvbikKLQkJCQliZXN0ID0gZTsKIAl9CiAJcmV0dXJuIGJlc3Q7CiB9CkBAIC00OTgzLDYgKzQ5NzcsMjcgQEAKIAlyZXR1cm4gMzY7CiB9CiAKKy8qCisgKiBJZiBubyBtYXRjaCBpcyBmb3VuZCwgY2hlY2sgd2hldGhlciB3ZSBleGNlZWQgdGhlIHZDUFUncyBsaW1pdAorICogYW5kIHJldHVybiB0aGUgY29udGVudCBvZiB0aGUgaGlnaGVzdCB2YWxpZCBfc3RhbmRhcmRfIGxlYWYgaW5zdGVhZC4KKyAqIFRoaXMgaXMgdG8gc2F0aXNmeSB0aGUgQ1BVSUQgc3BlY2lmaWNhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKiBjaGVja19jcHVpZF9saW1pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBmdW5jdGlvbiwgdTMyIGluZGV4KQoreworCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICptYXhsZXZlbDsKKworCW1heGxldmVsID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgZnVuY3Rpb24gJiAweDgwMDAwMDAwLCAwKTsKKwlpZiAoIW1heGxldmVsIHx8IG1heGxldmVsLT5lYXggPj0gZnVuY3Rpb24pCisJCXJldHVybiBOVUxMOworCWlmIChmdW5jdGlvbiAmIDB4ODAwMDAwMDApIHsKKwkJbWF4bGV2ZWwgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAwLCAwKTsKKwkJaWYgKCFtYXhsZXZlbCkKKwkJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgbWF4bGV2ZWwtPmVheCwgaW5kZXgpOworfQorCiB2b2lkIGt2bV9lbXVsYXRlX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1MzIgZnVuY3Rpb24sIGluZGV4OwpAQCAtNDk5NSw2ICs1MDEwLDEwIEBACiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIDApOwogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCAwKTsKIAliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgZnVuY3Rpb24sIGluZGV4KTsKKworCWlmICghYmVzdCkKKwkJYmVzdCA9IGNoZWNrX2NwdWlkX2xpbWl0KHZjcHUsIGZ1bmN0aW9uLCBpbmRleCk7CisKIAlpZiAoYmVzdCkgewogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgYmVzdC0+ZWF4KTsKIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIGJlc3QtPmVieCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggMjg2ZDI4OS4uMzdiOGIwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtODEsNiArODEsMTEgQEAKIAkJZW5kLCBwZ3RfYnVmX3N0YXJ0IDw8IFBBR0VfU0hJRlQsIHBndF9idWZfdG9wIDw8IFBBR0VfU0hJRlQpOwogfQogCit2b2lkIF9faW5pdCBuYXRpdmVfcGFnZXRhYmxlX3Jlc2VydmUodTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCW1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKHN0YXJ0LCBlbmQsICJQR1RBQkxFIik7Cit9CisKIHN0cnVjdCBtYXBfcmFuZ2UgewogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CkBAIC0yNzIsOSArMjc3LDI0IEBACiAKIAlfX2ZsdXNoX3RsYl9hbGwoKTsKIAorCS8qCisJICogUmVzZXJ2ZSB0aGUga2VybmVsIHBhZ2V0YWJsZSBwYWdlcyB3ZSB1c2VkIChwZ3RfYnVmX3N0YXJ0IC0KKwkgKiBwZ3RfYnVmX2VuZCkgYW5kIGZyZWUgdGhlIG90aGVyIG9uZXMgKHBndF9idWZfZW5kIC0gcGd0X2J1Zl90b3ApCisJICogc28gdGhhdCB0aGV5IGNhbiBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgorCSAqCisJICogT24gbmF0aXZlIGl0IGp1c3QgbWVhbnMgY2FsbGluZyBtZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZSwgb24gWGVuIGl0CisJICogYWxzbyBtZWFucyBtYXJraW5nIFJXIHRoZSBwYWdldGFibGUgcGFnZXMgdGhhdCB3ZSBhbGxvY2F0ZWQgYmVmb3JlCisJICogYnV0IHRoYXQgaGF2ZW4ndCBiZWVuIHVzZWQuCisJICoKKwkgKiBJbiBmYWN0IG9uIHhlbiB3ZSBtYXJrIFJPIHRoZSB3aG9sZSByYW5nZSBwZ3RfYnVmX3N0YXJ0IC0KKwkgKiBwZ3RfYnVmX3RvcCwgYmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4KKwkgKiBpbml0X21lbW9yeV9tYXBwaW5nIHJlYWNoZXMgdGhlIHBhZ2V0YWJsZSBwYWdlcyBhcmVhLCBpdCBtYXBzCisJICogUk8gYWxsIHRoZSBwYWdldGFibGUgcGFnZXMsIGluY2x1ZGluZyB0aGUgb25lcyB0aGF0IGFyZSBiZXlvbmQKKwkgKiBwZ3RfYnVmX2VuZCBhdCB0aGF0IHRpbWUuCisJICovCiAJaWYgKCFhZnRlcl9ib290bWVtICYmIHBndF9idWZfZW5kID4gcGd0X2J1Zl9zdGFydCkKLQkJbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2UocGd0X2J1Zl9zdGFydCA8PCBQQUdFX1NISUZULAotCQkJCSBwZ3RfYnVmX2VuZCA8PCBQQUdFX1NISUZULCAiUEdUQUJMRSIpOworCQl4ODZfaW5pdC5tYXBwaW5nLnBhZ2V0YWJsZV9yZXNlcnZlKFBGTl9QSFlTKHBndF9idWZfc3RhcnQpLAorCQkJCVBGTl9QSFlTKHBndF9idWZfZW5kKSk7CiAKIAlpZiAoIWFmdGVyX2Jvb3RtZW0pCiAJCWVhcmx5X21lbXRlc3Qoc3RhcnQsIGVuZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hLmMgYi9hcmNoL3g4Ni9tbS9udW1hLmMKaW5kZXggOTU1OWQzNi4uNzQ1MjU4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYS5jCisrKyBiL2FyY2gveDg2L21tL251bWEuYwpAQCAtMjEzLDUzICsyMTMsNDggQEAKIAlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpOwogfQogCi1zdHJ1Y3QgY3B1bWFzayBfX2NwdWluaXQgKmRlYnVnX2NwdW1hc2tfc2V0X2NwdShpbnQgY3B1LCBpbnQgZW5hYmxlKQordm9pZCBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoaW50IGNwdSwgaW50IG5vZGUsIGJvb2wgZW5hYmxlKQogewotCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKIAlzdHJ1Y3QgY3B1bWFzayAqbWFzazsKIAljaGFyIGJ1Zls2NF07CiAKIAlpZiAobm9kZSA9PSBOVU1BX05PX05PREUpIHsKIAkJLyogZWFybHlfY3B1X3RvX25vZGUoKSBhbHJlYWR5IGVtaXRzIGEgd2FybmluZyBhbmQgdHJhY2UgKi8KLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybjsKIAl9CiAJbWFzayA9IG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07CiAJaWYgKCFtYXNrKSB7CiAJCXByX2Vycigibm9kZV90b19jcHVtYXNrX21hcFslaV0gTlVMTFxuIiwgbm9kZSk7CiAJCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JY3B1bGlzdF9zY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgbWFzayk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNwdSAlZCBub2RlICVkOiBtYXNrIG5vdyAlc1xuIiwKLQkJZW5hYmxlID8gIm51bWFfYWRkX2NwdSIgOiAibnVtYV9yZW1vdmVfY3B1IiwKLQkJY3B1LCBub2RlLCBidWYpOwotCXJldHVybiBtYXNrOwotfQotCi0jIGlmbmRlZiBDT05GSUdfTlVNQV9FTVUKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9jcHVtYXNrKGludCBjcHUsIGludCBlbmFibGUpCi17Ci0Jc3RydWN0IGNwdW1hc2sgKm1hc2s7Ci0KLQltYXNrID0gZGVidWdfY3B1bWFza19zZXRfY3B1KGNwdSwgZW5hYmxlKTsKLQlpZiAoIW1hc2spCiAJCXJldHVybjsKKwl9CiAKIAlpZiAoZW5hYmxlKQogCQljcHVtYXNrX3NldF9jcHUoY3B1LCBtYXNrKTsKIAllbHNlCiAJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbWFzayk7CisKKwljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXNrKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMgY3B1ICVkIG5vZGUgJWQ6IG1hc2sgbm93ICVzXG4iLAorCQllbmFibGUgPyAibnVtYV9hZGRfY3B1IiA6ICJudW1hX3JlbW92ZV9jcHUiLAorCQljcHUsIG5vZGUsIGJ1Zik7CisJcmV0dXJuOworfQorCisjIGlmbmRlZiBDT05GSUdfTlVNQV9FTVUKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9jcHVtYXNrKGludCBjcHUsIGJvb2wgZW5hYmxlKQoreworCWRlYnVnX2NwdW1hc2tfc2V0X2NwdShjcHUsIGVhcmx5X2NwdV90b19ub2RlKGNwdSksIGVuYWJsZSk7CiB9CiAKIHZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KQogewotCW51bWFfc2V0X2NwdW1hc2soY3B1LCAxKTsKKwludW1hX3NldF9jcHVtYXNrKGNwdSwgdHJ1ZSk7CiB9CiAKIHZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQogewotCW51bWFfc2V0X2NwdW1hc2soY3B1LCAwKTsKKwludW1hX3NldF9jcHVtYXNrKGNwdSwgZmFsc2UpOwogfQogIyBlbmRpZgkvKiAhQ09ORklHX05VTUFfRU1VICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfNjQuYyBiL2FyY2gveDg2L21tL251bWFfNjQuYwppbmRleCBlOGMwMGNjLi44NWI1MmZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCkBAIC0zMDYsNyArMzA2LDcgQEAKIAkJYmktPmVuZCA9IG1pbihiaS0+ZW5kLCBoaWdoKTsKIAogCQkvKiBhbmQgdGhlcmUncyBubyBlbXB0eSBibG9jayAqLwotCQlpZiAoYmktPnN0YXJ0ID09IGJpLT5lbmQpIHsKKwkJaWYgKGJpLT5zdGFydCA+PSBiaS0+ZW5kKSB7CiAJCQludW1hX3JlbW92ZV9tZW1ibGtfZnJvbShpLS0sIG1pKTsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hX2VtdWxhdGlvbi5jIGIvYXJjaC94ODYvbW0vbnVtYV9lbXVsYXRpb24uYwppbmRleCBhZDA5MWU0Li5kZTg0Y2MxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hX2VtdWxhdGlvbi5jCisrKyBiL2FyY2gveDg2L21tL251bWFfZW11bGF0aW9uLmMKQEAgLTQ1NCwxMCArNDU0LDkgQEAKIAkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW2ldKTsKIH0KICNlbHNlCS8qICFDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQorc3RhdGljIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X2NwdW1hc2soaW50IGNwdSwgYm9vbCBlbmFibGUpCiB7Ci0Jc3RydWN0IGNwdW1hc2sgKm1hc2s7Ci0JaW50IG5pZCwgcGh5c25pZCwgaTsKKwlpbnQgbmlkLCBwaHlzbmlkOwogCiAJbmlkID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKIAlpZiAobmlkID09IE5VTUFfTk9fTk9ERSkgewpAQCAtNDY3LDI4ICs0NjYsMjEgQEAKIAogCXBoeXNuaWQgPSBlbXVfbmlkX3RvX3BoeXNbbmlkXTsKIAotCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpIHsKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKIAkJaWYgKGVtdV9uaWRfdG9fcGh5c1tuaWRdICE9IHBoeXNuaWQpCiAJCQljb250aW51ZTsKIAotCQltYXNrID0gZGVidWdfY3B1bWFza19zZXRfY3B1KGNwdSwgZW5hYmxlKTsKLQkJaWYgKCFtYXNrKQotCQkJcmV0dXJuOwotCi0JCWlmIChlbmFibGUpCi0JCQljcHVtYXNrX3NldF9jcHUoY3B1LCBtYXNrKTsKLQkJZWxzZQotCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtYXNrKTsKKwkJZGVidWdfY3B1bWFza19zZXRfY3B1KGNwdSwgbmlkLCBlbmFibGUpOwogCX0KIH0KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpCiB7Ci0JbnVtYV9zZXRfY3B1bWFzayhjcHUsIDEpOworCW51bWFfc2V0X2NwdW1hc2soY3B1LCB0cnVlKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpCiB7Ci0JbnVtYV9zZXRfY3B1bWFzayhjcHUsIDApOworCW51bWFfc2V0X2NwdW1hc2soY3B1LCBmYWxzZSk7CiB9CiAjZW5kaWYJLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfMzIuYyBiL2FyY2gveDg2L21tL3NyYXRfMzIuYwppbmRleCA0ODY1MWM2Li4zNjRmMzZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF8zMi5jCkBAIC0yMTEsMTAgKzIxMSwxMiBAQAogewogCWludCBpLCBqLCBuaWQ7CiAKLQogCWlmIChzcmF0X2Rpc2FibGVkKCkpCiAJCWdvdG8gb3V0X2ZhaWw7CiAKKwlpZiAoYWNwaV9udW1hX2luaXQoKSA8IDApCisJCWdvdG8gb3V0X2ZhaWw7CisKIAlpZiAobnVtX21lbW9yeV9jaHVua3MgPT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRwogCQkJICJjb3VsZCBub3QgZmluZCBhbnkgQUNQSSBTUkFUIG1lbW9yeSBhcmVhcy5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IDhkYWNlMTguLmNmOTc1MDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKQEAgLTQ5LDYgKzQ5LDEwIEBACiAJdmFsIHw9IGNvdW50ZXJfY29uZmlnLT51c2VyID8gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUiA6IDA7CiAJdmFsIHw9IGNvdW50ZXJfY29uZmlnLT5rZXJuZWwgPyBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgOiAwOwogCXZhbCB8PSAoY291bnRlcl9jb25maWctPnVuaXRfbWFzayAmIDB4RkYpIDw8IDg7CisJY291bnRlcl9jb25maWctPmV4dHJhICY9IChBUkNIX1BFUkZNT05fRVZFTlRTRUxfSU5WIHwKKwkJCQkgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FREdFIHwKKwkJCQkgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9DTUFTSyk7CisJdmFsIHw9IGNvdW50ZXJfY29uZmlnLT5leHRyYTsKIAlldmVudCAmPSBtb2RlbC0+ZXZlbnRfbWFzayA/IG1vZGVsLT5ldmVudF9tYXNrIDogMHhGRjsKIAl2YWwgfD0gZXZlbnQgJiAweEZGOwogCXZhbCB8PSAoZXZlbnQgJiAweDBGMDApIDw8IDI0OwpAQCAtNDQwLDYgKzQ0NCw3IEBACiAJCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJ1bml0X21hc2siLCAmY291bnRlcl9jb25maWdbaV0udW5pdF9tYXNrKTsKIAkJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImtlcm5lbCIsICZjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOwogCQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAidXNlciIsICZjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsKKwkJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImV4dHJhIiwgJmNvdW50ZXJfY29uZmlnW2ldLmV4dHJhKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX2NvdW50ZXIuaCBiL2FyY2gveDg2L29wcm9maWxlL29wX2NvdW50ZXIuaAppbmRleCBlMjgzOThkLi4wYjdiN2IxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmgKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCkBAIC0yMiw2ICsyMiw3IEBACiAJdW5zaWduZWQgbG9uZyBrZXJuZWw7CiAJdW5zaWduZWQgbG9uZyB1c2VyOwogCXVuc2lnbmVkIGxvbmcgdW5pdF9tYXNrOworCXVuc2lnbmVkIGxvbmcgZXh0cmE7CiB9OwogCiBleHRlcm4gc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnIGNvdW50ZXJfY29uZmlnW107CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvZmFsY29uZmFsbHMuZHRzIGIvYXJjaC94ODYvcGxhdGZvcm0vY2U0MTAwL2ZhbGNvbmZhbGxzLmR0cwppbmRleCBkYzcwMWVhLi5lNzBiZTM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvZmFsY29uZmFsbHMuZHRzCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9mYWxjb25mYWxscy5kdHMKQEAgLTc0LDYgKzc0LDcgQEAKIAkJCQljb21wYXRpYmxlID0gImludGVsLGNlNDEwMC1wY2kiLCAicGNpIjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQkJCWJ1cy1yYW5nZSA9IDwxIDE+OworCQkJCXJlZyA9IDwweDA4MDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDAgMHhkZmZlMDAwMCAweDIwMDAwMDAgMCAweGRmZmUwMDAwIDAgMHgxMDAwPjsKIAogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlvYXBpYzI+OwpAQCAtMzQ2LDcgKzM0Nyw3IEBACiAJCQkJCQkgICAicGNpY2xhc3MwYzAzIjsKIAogCQkJCQlyZWcgPSA8MHgxNjgwMCAweDAgMHgwIDB4MCAweDA+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDIyIDM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIyIDE+OwogCQkJCX07CiAKIAkJCQl1c2JAZCwxIHsKQEAgLTM1Niw3ICszNTcsNyBAQAogCQkJCQkJICAgInBjaWNsYXNzMGMwMyI7CiAKIAkJCQkJcmVnID0gPDB4MTY5MDAgMHgwIDB4MCAweDAgMHgwPjsKLQkJCQkJaW50ZXJydXB0cyA9IDwyMiAzPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMiAxPjsKIAkJCQl9OwogCiAJCQkJc2F0YUBlLDAgewpAQCAtMzY2LDcgKzM2Nyw3IEBACiAJCQkJCQkgICAicGNpY2xhc3MwMTA2IjsKIAogCQkJCQlyZWcgPSA8MHgxNzAwMCAweDAgMHgwIDB4MCAweDA+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDIzIDM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIzIDE+OwogCQkJCX07CiAKIAkJCQlmbGFzaEBmLDAgewpAQCAtNDEyLDYgKzQxMyw3IEBACiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJY29tcGF0aWJsZSA9ICJpc2EiOworCQkJCXJlZyA9IDwweGY4MDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCQlyYW5nZXMgPSA8MSAwIDAgMCAwIDB4MTAwPjsKIAogCQkJCXJ0Y0A3MCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCmluZGV4IDVjMDIwN2IuLjI3NWRiYzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCkBAIC05NywxMSArOTcsMTEgQEAKIAkJCXBlbnRyeS0+ZnJlcV9oeiwgcGVudHJ5LT5pcnEpOwogCQkJaWYgKCFwZW50cnktPmlycSkKIAkJCQljb250aW51ZTsKLQkJCW1wX2lycS50eXBlID0gTVBfSU9BUElDOworCQkJbXBfaXJxLnR5cGUgPSBNUF9JTlRTUkM7CiAJCQltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKIC8qIHRyaWdnZXJpbmcgbW9kZSBlZGdlIGJpdCAyLTMsIGFjdGl2ZSBoaWdoIHBvbGFyaXR5IGJpdCAwLTEgKi8KIAkJCW1wX2lycS5pcnFmbGFnID0gNTsKLQkJCW1wX2lycS5zcmNidXMgPSAwOworCQkJbXBfaXJxLnNyY2J1cyA9IE1QX0JVU19JU0E7CiAJCQltcF9pcnEuc3JjYnVzaXJxID0gcGVudHJ5LT5pcnE7CS8qIElSUSAqLwogCQkJbXBfaXJxLmRzdGFwaWMgPSBNUF9BUElDX0FMTDsKIAkJCW1wX2lycS5kc3RpcnEgPSBwZW50cnktPmlycTsKQEAgLTE2OCwxMCArMTY4LDEwIEBACiAJZm9yICh0b3RhbGxlbiA9IDA7IHRvdGFsbGVuIDwgc2ZpX21ydGNfbnVtOyB0b3RhbGxlbisrLCBwZW50cnkrKykgewogCQlwcl9kZWJ1ZygiUlRDWyVkXTogcGFkZHIgPSAweCUwOHgsIGlycSA9ICVkXG4iLAogCQkJdG90YWxsZW4sICh1MzIpcGVudHJ5LT5waHlzX2FkZHIsIHBlbnRyeS0+aXJxKTsKLQkJbXBfaXJxLnR5cGUgPSBNUF9JT0FQSUM7CisJCW1wX2lycS50eXBlID0gTVBfSU5UU1JDOwogCQltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKIAkJbXBfaXJxLmlycWZsYWcgPSAweGY7CS8qIGxldmVsIHRyaWdnZXIgYW5kIGFjdGl2ZSBsb3cgKi8KLQkJbXBfaXJxLnNyY2J1cyA9IDA7CisJCW1wX2lycS5zcmNidXMgPSBNUF9CVVNfSVNBOwogCQltcF9pcnEuc3JjYnVzaXJxID0gcGVudHJ5LT5pcnE7CS8qIElSUSAqLwogCQltcF9pcnEuZHN0YXBpYyA9IE1QX0FQSUNfQUxMOwogCQltcF9pcnEuZHN0aXJxID0gcGVudHJ5LT5pcnE7CkBAIC0yODIsNyArMjgyLDcgQEAKIAkvKiBBdm9pZCBzZWFyY2hpbmcgZm9yIEJJT1MgTVAgdGFibGVzICovCiAJeDg2X2luaXQubXBwYXJzZS5maW5kX3NtcF9jb25maWcgPSB4ODZfaW5pdF9ub29wOwogCXg4Nl9pbml0Lm1wcGFyc2UuZ2V0X3NtcF9jb25maWcgPSB4ODZfaW5pdF91aW50X25vb3A7Ci0KKwlzZXRfYml0KE1QX0JVU19JU0EsIG1wX2J1c19ub3RfcGNpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvdnJ0Yy5jIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC92cnRjLmMKaW5kZXggMDRjZjY0NS4uNzNkNzBkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC92cnRjLmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC92cnRjLmMKQEAgLTEwMCw5ICsxMDAsMTEgQEAKIAogdm9pZCBfX2luaXQgbXJzdF9ydGNfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgdnJ0Y19wYWRkciA9IHNmaV9tcnRjX2FycmF5WzBdLnBoeXNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZydGNfcGFkZHI7CiAKIAlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19NUlRDLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfbXJ0Yyk7CisKKwl2cnRjX3BhZGRyID0gc2ZpX21ydGNfYXJyYXlbMF0ucGh5c19hZGRyOwogCWlmICghc2ZpX21ydGNfbnVtIHx8ICF2cnRjX3BhZGRyKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKaW5kZXggYTdiMzhkMy4uYzU4ZTBlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdXYvdXYuaD4KQEAgLTY5OCwxNiArNjk5LDE3IEBACiAJCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyB2YSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlpbnQgdGNwdTsKLQlpbnQgdXZodWI7CiAJaW50IGxvY2FscyA9IDA7CiAJaW50IHJlbW90ZXMgPSAwOwogCWludCBodWJzID0gMDsKKwlpbnQgdGNwdTsKKwlpbnQgdHBub2RlOwogCXN0cnVjdCBiYXVfZGVzYyAqYmF1X2Rlc2M7CiAJc3RydWN0IGNwdW1hc2sgKmZsdXNoX21hc2s7CiAJc3RydWN0IHB0Y19zdGF0cyAqc3RhdDsKIAlzdHJ1Y3QgYmF1X2NvbnRyb2wgKmJjcDsKIAlzdHJ1Y3QgYmF1X2NvbnRyb2wgKnRiY3A7CisJc3RydWN0IGh1Yl9hbmRfcG5vZGUgKmhwcDsKIAogCS8qIGtlcm5lbCB3YXMgYm9vdGVkICdub2JhdScgKi8KIAlpZiAobm9iYXUpCkBAIC03NDksMTEgKzc1MSwxOCBAQAogCWJhdV9kZXNjICs9IFVWX0lURU1TX1BFUl9ERVNDUklQVE9SICogYmNwLT51dmh1Yl9jcHU7CiAJYmF1X3V2aHVic19jbGVhcigmYmF1X2Rlc2MtPmRpc3RyaWJ1dGlvbiwgVVZfRElTVFJJQlVUSU9OX1NJWkUpOwogCi0JLyogY3B1IHN0YXRpc3RpY3MgKi8KIAlmb3JfZWFjaF9jcHUodGNwdSwgZmx1c2hfbWFzaykgewotCQl1dmh1YiA9IHV2X2NwdV90b19ibGFkZV9pZCh0Y3B1KTsKLQkJYmF1X3V2aHViX3NldCh1dmh1YiwgJmJhdV9kZXNjLT5kaXN0cmlidXRpb24pOwotCQlpZiAodXZodWIgPT0gYmNwLT51dmh1YikKKwkJLyoKKwkJICogVGhlIGRpc3RyaWJ1dGlvbiB2ZWN0b3IgaXMgYSBiaXQgbWFwIG9mIHBub2RlcywgcmVsYXRpdmUKKwkJICogdG8gdGhlIHBhcnRpdGlvbiBiYXNlIHBub2RlIChhbmQgdGhlIHBhcnRpdGlvbiBiYXNlIG5hc2lkCisJCSAqIGluIHRoZSBoZWFkZXIpLgorCQkgKiBUcmFuc2xhdGUgY3B1IHRvIHBub2RlIGFuZCBodWIgdXNpbmcgYW4gYXJyYXkgc3RvcmVkCisJCSAqIGluIGxvY2FsIG1lbW9yeS4KKwkJICovCisJCWhwcCA9ICZiY3AtPnNvY2tldF9tYXN0ZXItPnRhcmdldF9odWJfYW5kX3Bub2RlW3RjcHVdOworCQl0cG5vZGUgPSBocHAtPnBub2RlIC0gYmNwLT5wYXJ0aXRpb25fYmFzZV9wbm9kZTsKKwkJYmF1X3V2aHViX3NldCh0cG5vZGUsICZiYXVfZGVzYy0+ZGlzdHJpYnV0aW9uKTsKKwkJaWYgKGhwcC0+dXZodWIgPT0gYmNwLT51dmh1YikKIAkJCWxvY2FscysrOwogCQllbHNlCiAJCQlyZW1vdGVzKys7CkBAIC04NTQsNyArODYzLDcgQEAKICAqIGFuIGludGVycnVwdCwgYnV0IGNhdXNlcyBhbiBlcnJvciBtZXNzYWdlIHRvIGJlIHJldHVybmVkIHRvCiAgKiB0aGUgc2VuZGVyLgogICovCi1zdGF0aWMgdm9pZCB1dl9lbmFibGVfdGltZW91dHModm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB1dl9lbmFibGVfdGltZW91dHModm9pZCkKIHsKIAlpbnQgdXZodWI7CiAJaW50IG51dmh1YnM7CkBAIC0xMzI1LDEwICsxMzM0LDEwIEBACiB9CiAKIC8qCi0gKiBpbml0aWFsaXplIHRoZSBzZW5kaW5nIHNpZGUncyBzZW5kaW5nIGJ1ZmZlcnMKKyAqIEluaXRpYWxpemUgdGhlIHNlbmRpbmcgc2lkZSdzIHNlbmRpbmcgYnVmZmVycy4KICAqLwogc3RhdGljIHZvaWQKLXV2X2FjdGl2YXRpb25fZGVzY3JpcHRvcl9pbml0KGludCBub2RlLCBpbnQgcG5vZGUpCit1dl9hY3RpdmF0aW9uX2Rlc2NyaXB0b3JfaW5pdChpbnQgbm9kZSwgaW50IHBub2RlLCBpbnQgYmFzZV9wbm9kZSkKIHsKIAlpbnQgaTsKIAlpbnQgY3B1OwpAQCAtMTM1MSwxMSArMTM2MCwxMSBAQAogCW4gPSBwYSA+PiB1dl9uc2hpZnQ7CiAJbSA9IHBhICYgdXZfbW1hc2s7CiAKKwkvKiB0aGUgMTQtYml0IHBub2RlICovCiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSwKIAkJCSAgICAgIChuIDw8IFVWX0RFU0NfQkFTRV9QTk9ERV9TSElGVCB8IG0pKTsKLQogCS8qCi0JICogaW5pdGlhbGl6aW5nIGFsbCA4IChVVl9JVEVNU19QRVJfREVTQ1JJUFRPUikgZGVzY3JpcHRvcnMgZm9yIGVhY2gKKwkgKiBJbml0aWFsaXppbmcgYWxsIDggKFVWX0lURU1TX1BFUl9ERVNDUklQVE9SKSBkZXNjcmlwdG9ycyBmb3IgZWFjaAogCSAqIGNwdSBldmVuIHRob3VnaCB3ZSBvbmx5IHVzZSB0aGUgZmlyc3Qgb25lOyBvbmUgZGVzY3JpcHRvciBjYW4KIAkgKiBkZXNjcmliZSBhIGJyb2FkY2FzdCB0byAyNTYgdXYgaHVicy4KIAkgKi8KQEAgLTEzNjQsMTIgKzEzNzMsMTMgQEAKIAkJbWVtc2V0KGJkMiwgMCwgc2l6ZW9mKHN0cnVjdCBiYXVfZGVzYykpOwogCQliZDItPmhlYWRlci5zd19hY2tfZmxhZyA9IDE7CiAJCS8qCi0JCSAqIGJhc2VfZGVzdF9ub2RlaWQgaXMgdGhlIG5hc2lkIG9mIHRoZSBmaXJzdCB1dmh1YgotCQkgKiBpbiB0aGUgcGFydGl0aW9uLiBUaGUgYml0IG1hcCB3aWxsIGluZGljYXRlIHV2aHViIG51bWJlcnMsCi0JCSAqIHdoaWNoIGFyZSAwLU4gaW4gYSBwYXJ0aXRpb24uIFBub2RlcyBhcmUgdW5pcXVlIHN5c3RlbS13aWRlLgorCQkgKiBUaGUgYmFzZV9kZXN0X25hc2lkIHNldCBpbiB0aGUgbWVzc2FnZSBoZWFkZXIgaXMgdGhlIG5hc2lkCisJCSAqIG9mIHRoZSBmaXJzdCB1dmh1YiBpbiB0aGUgcGFydGl0aW9uLiBUaGUgYml0IG1hcCB3aWxsCisJCSAqIGluZGljYXRlIGRlc3RpbmF0aW9uIHBub2RlIG51bWJlcnMgcmVsYXRpdmUgdG8gdGhhdCBiYXNlLgorCQkgKiBUaGV5IG1heSBub3QgYmUgY29uc2VjdXRpdmUgaWYgbmFzaWQgc3RyaWRpbmcgaXMgYmVpbmcgdXNlZC4KIAkJICovCi0JCWJkMi0+aGVhZGVyLmJhc2VfZGVzdF9ub2RlaWQgPSBVVl9QTk9ERV9UT19OQVNJRCh1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSk7Ci0JCWJkMi0+aGVhZGVyLmRlc3Rfc3Vibm9kZWlkID0gMHgxMDsgLyogdGhlIExCICovCisJCWJkMi0+aGVhZGVyLmJhc2VfZGVzdF9uYXNpZCA9IFVWX1BOT0RFX1RPX05BU0lEKGJhc2VfcG5vZGUpOworCQliZDItPmhlYWRlci5kZXN0X3N1Ym5vZGVpZCA9IFVWX0xCX1NVQk5PREVJRDsKIAkJYmQyLT5oZWFkZXIuY29tbWFuZCA9IFVWX05FVF9FTkRQT0lOVF9JTlREOwogCQliZDItPmhlYWRlci5pbnRfYm90aCA9IDE7CiAJCS8qCkBAIC0xNDQxLDcgKzE0NTEsNyBAQAogLyoKICAqIEluaXRpYWxpemF0aW9uIG9mIGVhY2ggVVYgaHViJ3Mgc3RydWN0dXJlcwogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdXZfaW5pdF91dmh1YihpbnQgdXZodWIsIGludCB2ZWN0b3IpCitzdGF0aWMgdm9pZCBfX2luaXQgdXZfaW5pdF91dmh1YihpbnQgdXZodWIsIGludCB2ZWN0b3IsIGludCBiYXNlX3Bub2RlKQogewogCWludCBub2RlOwogCWludCBwbm9kZTsKQEAgLTE0NDksMTEgKzE0NTksMTEgQEAKIAogCW5vZGUgPSB1dmh1Yl90b19maXJzdF9ub2RlKHV2aHViKTsKIAlwbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKTsKLQl1dl9hY3RpdmF0aW9uX2Rlc2NyaXB0b3JfaW5pdChub2RlLCBwbm9kZSk7CisJdXZfYWN0aXZhdGlvbl9kZXNjcmlwdG9yX2luaXQobm9kZSwgcG5vZGUsIGJhc2VfcG5vZGUpOwogCXV2X3BheWxvYWRfcXVldWVfaW5pdChub2RlLCBwbm9kZSk7CiAJLyoKLQkgKiB0aGUgYmVsb3cgaW5pdGlhbGl6YXRpb24gY2FuJ3QgYmUgaW4gZmlybXdhcmUgYmVjYXVzZSB0aGUKLQkgKiBtZXNzYWdpbmcgSVJRIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgT1MKKwkgKiBUaGUgYmVsb3cgaW5pdGlhbGl6YXRpb24gY2FuJ3QgYmUgaW4gZmlybXdhcmUgYmVjYXVzZSB0aGUKKwkgKiBtZXNzYWdpbmcgSVJRIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgT1MuCiAJICovCiAJYXBpY2lkID0gdXZodWJfdG9fZmlyc3RfYXBpY2lkKHV2aHViKSB8IHV2X2FwaWNpZF9oaWJpdHM7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfQkFVX0RBVEFfQ09ORklHLApAQCAtMTQ5MCwxMCArMTUwMCwxMSBAQAogLyoKICAqIGluaXRpYWxpemUgdGhlIGJhdV9jb250cm9sIHN0cnVjdHVyZSBmb3IgZWFjaCBjcHUKICAqLwotc3RhdGljIGludCBfX2luaXQgdXZfaW5pdF9wZXJfY3B1KGludCBudXZodWJzKQorc3RhdGljIGludCBfX2luaXQgdXZfaW5pdF9wZXJfY3B1KGludCBudXZodWJzLCBpbnQgYmFzZV9wYXJ0X3Bub2RlKQogewogCWludCBpOwogCWludCBjcHU7CisJaW50IHRjcHU7CiAJaW50IHBub2RlOwogCWludCB1dmh1YjsKIAlpbnQgaGF2ZV9obWFzdGVyOwpAQCAtMTUyNyw2ICsxNTM4LDE1IEBACiAJCWJjcCA9ICZwZXJfY3B1KGJhdV9jb250cm9sLCBjcHUpOwogCQltZW1zZXQoYmNwLCAwLCBzaXplb2Yoc3RydWN0IGJhdV9jb250cm9sKSk7CiAJCXBub2RlID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlOworCQlpZiAoKHBub2RlIC0gYmFzZV9wYXJ0X3Bub2RlKSA+PSBVVl9ESVNUUklCVVRJT05fU0laRSkgeworCQkJcHJpbnRrKEtFUk5fRU1FUkcKKwkJCQkiY3B1ICVkIHBub2RlICVkLSVkIGJleW9uZCAlZDsgQkFVIGRpc2FibGVkXG4iLAorCQkJCWNwdSwgcG5vZGUsIGJhc2VfcGFydF9wbm9kZSwKKwkJCQlVVl9ESVNUUklCVVRJT05fU0laRSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQliY3AtPm9zbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJCWJjcC0+cGFydGl0aW9uX2Jhc2VfcG5vZGUgPSB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZTsKIAkJdXZodWIgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+bnVtYV9ibGFkZV9pZDsKIAkJKih1dmh1Yl9tYXNrICsgKHV2aHViLzgpKSB8PSAoMSA8PCAodXZodWIlOCkpOwogCQliZHAgPSAmdXZodWJfZGVzY3NbdXZodWJdOwpAQCAtMTUzNSw3ICsxNTU1LDcgQEAKIAkJYmRwLT5wbm9kZSA9IHBub2RlOwogCQkvKiBrbHVkZ2U6ICdhc3N1bWluZycgb25lIG5vZGUgcGVyIHNvY2tldCwgYW5kIGFzc3VtaW5nIHRoYXQKIAkJICAgZGlzYWJsaW5nIGEgc29ja2V0IGp1c3QgbGVhdmVzIGEgZ2FwIGluIG5vZGUgbnVtYmVycyAqLwotCQlzb2NrZXQgPSAoY3B1X3RvX25vZGUoY3B1KSAmIDEpOworCQlzb2NrZXQgPSBiY3AtPm9zbm9kZSAmIDE7CiAJCWJkcC0+c29ja2V0X21hc2sgfD0gKDEgPDwgc29ja2V0KTsKIAkJc2RwID0gJmJkcC0+c29ja2V0W3NvY2tldF07CiAJCXNkcC0+Y3B1X251bWJlcltzZHAtPm51bV9jcHVzXSA9IGNwdTsKQEAgLTE1ODQsNiArMTYwNCwyMCBAQAogbmV4dHNvY2tldDoKIAkJCXNvY2tldCsrOwogCQkJc29ja2V0X21hc2sgPSAoc29ja2V0X21hc2sgPj4gMSk7CisJCQkvKiBlYWNoIHNvY2tldCBnZXRzIGEgbG9jYWwgYXJyYXkgb2YgcG5vZGVzL2h1YnMgKi8KKwkJCWJjcCA9IHNtYXN0ZXI7CisJCQliY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlID0ga21hbGxvY19ub2RlKAorCQkJCXNpemVvZihzdHJ1Y3QgaHViX2FuZF9wbm9kZSkgKgorCQkJCW51bV9wb3NzaWJsZV9jcHVzKCksIEdGUF9LRVJORUwsIGJjcC0+b3Nub2RlKTsKKwkJCW1lbXNldChiY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlLCAwLAorCQkJCXNpemVvZihzdHJ1Y3QgaHViX2FuZF9wbm9kZSkgKgorCQkJCW51bV9wb3NzaWJsZV9jcHVzKCkpOworCQkJZm9yX2VhY2hfcHJlc2VudF9jcHUodGNwdSkgeworCQkJCWJjcC0+dGFyZ2V0X2h1Yl9hbmRfcG5vZGVbdGNwdV0ucG5vZGUgPQorCQkJCQl1dl9jcHVfaHViX2luZm8odGNwdSktPnBub2RlOworCQkJCWJjcC0+dGFyZ2V0X2h1Yl9hbmRfcG5vZGVbdGNwdV0udXZodWIgPQorCQkJCQl1dl9jcHVfaHViX2luZm8odGNwdSktPm51bWFfYmxhZGVfaWQ7CisJCQl9CiAJCX0KIAl9CiAJa2ZyZWUodXZodWJfZGVzY3MpOwpAQCAtMTYzNiwyMSArMTY3MCwyMiBAQAogCXNwaW5fbG9ja19pbml0KCZkaXNhYmxlX2xvY2spOwogCWNvbmdlc3RlZF9jeWNsZXMgPSBtaWNyb3NlY18yX2N5Y2xlcyhjb25nZXN0ZWRfcmVzcG9uc2VfdXMpOwogCi0JaWYgKHV2X2luaXRfcGVyX2NwdShudXZodWJzKSkgeworCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gMHg3ZmZmZmZmZjsKKwlmb3IgKHV2aHViID0gMDsgdXZodWIgPCBudXZodWJzOyB1dmh1YisrKSB7CisJCWlmICh1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKHV2aHViKSAmJgorCQkJKHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKSA8IHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKSkKKwkJCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUodXZodWIpOworCX0KKworCWlmICh1dl9pbml0X3Blcl9jcHUobnV2aHVicywgdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUpKSB7CiAJCW5vYmF1ID0gMTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUgPSAweDdmZmZmZmZmOwotCWZvciAodXZodWIgPSAwOyB1dmh1YiA8IG51dmh1YnM7IHV2aHViKyspCi0JCWlmICh1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKHV2aHViKSAmJgotCQkJKHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKSA8IHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKSkKLQkJCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUodXZodWIpOwotCiAJdmVjdG9yID0gVVZfQkFVX01FU1NBR0U7CiAJZm9yX2VhY2hfcG9zc2libGVfYmxhZGUodXZodWIpCiAJCWlmICh1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKHV2aHViKSkKLQkJCXV2X2luaXRfdXZodWIodXZodWIsIHZlY3Rvcik7CisJCQl1dl9pbml0X3V2aHViKHV2aHViLCB2ZWN0b3IsIHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKTsKIAogCXV2X2VuYWJsZV90aW1lb3V0cygpOwogCWFsbG9jX2ludHJfZ2F0ZSh2ZWN0b3IsIHV2X2JhdV9tZXNzYWdlX2ludHIxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3Zpc3dzL3Zpc3dzX3F1aXJrcy5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKaW5kZXggZmU0Y2Y4Mi4uYzdhYmYxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKQEAgLTQ3MSwxNSArNDcxLDcgQEAKIHsKIAlsZWdhY3lfcGljLT5pbml0KDApOwogCWVuYWJsZV9jb2JhbHRfaXJxKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBlbmRfcGlpeDRfbWFzdGVyX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjb2JhbHRfbG9jaywgZmxhZ3MpOwotCWVuYWJsZV9jb2JhbHRfaXJxKGRhdGEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvYmFsdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfbWFzdGVyX2lycV90eXBlID0gewpAQCAtNDkyLDcgKzQ4NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfdmlydHVhbF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUElJWDQtdmlydHVhbCIsCi0JLm1hc2sJCT0gcGlpNF9tYXNrLAorCS5pcnFfbWFzawk9IHBpaTRfbWFzaywKIH07CiAKIC8qCkBAIC01ODAsOSArNTcyLDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9waWl4NF92aXJ0dWFsX2lycV90eXBlKHZvaWQpCiB7Ci0JcGlpeDRfdmlydHVhbF9pcnFfdHlwZS5lbmFibGUgPQlpODI1OUFfY2hpcC51bm1hc2s7Ci0JcGlpeDRfdmlydHVhbF9pcnFfdHlwZS5kaXNhYmxlID0gaTgyNTlBX2NoaXAubWFzazsKLQlwaWl4NF92aXJ0dWFsX2lycV90eXBlLnVubWFzayA9CWk4MjU5QV9jaGlwLnVubWFzazsKKwlwaWl4NF92aXJ0dWFsX2lycV90eXBlLmlycV9lbmFibGUgPSBpODI1OUFfY2hpcC5pcnFfdW5tYXNrOworCXBpaXg0X3ZpcnR1YWxfaXJxX3R5cGUuaXJxX2Rpc2FibGUgPSBpODI1OUFfY2hpcC5pcnFfbWFzazsKKwlwaWl4NF92aXJ0dWFsX2lycV90eXBlLmlycV91bm1hc2sgPSBpODI1OUFfY2hpcC5pcnFfdW5tYXNrOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdmlzd3NfcHJlX2ludHJfaW5pdCh2b2lkKQpAQCAtNTk5LDcgKzU5MSw3IEBACiAJCWVsc2UgaWYgKGkgPT0gQ09fSVJRX0lERTApCiAJCQljaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKIAkJZWxzZSBpZiAoaSA9PSBDT19JUlFfSURFMSkKLQkJCT5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQllbHNlIGlmIChpID09IENPX0lSUV84MjU5KQogCQkJY2hpcCA9ICZwaWl4NF9tYXN0ZXJfaXJxX3R5cGU7CiAJCWVsc2UgaWYgKGkgPCBDT19JUlFfQVBJQzApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vS2NvbmZpZyBiL2FyY2gveDg2L3hlbi9LY29uZmlnCmluZGV4IDFjNzEyMWJhLi41Y2M4MjFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vS2NvbmZpZworKysgYi9hcmNoL3g4Ni94ZW4vS2NvbmZpZwpAQCAtMzksNiArMzksNyBAQAogY29uZmlnIFhFTl9TQVZFX1JFU1RPUkUKICAgICAgICBib29sCiAgICAgICAgZGVwZW5kcyBvbiBYRU4KKyAgICAgICBzZWxlY3QgSElCRVJOQVRFX0NBTExCQUNLUwogICAgICAgIGRlZmF1bHQgeQogCiBjb25maWcgWEVOX0RFQlVHX0ZTCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggNDlkYmQ3OC4uZTNjNmEwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMjM4LDYgKzIzOCw3IEBACiBzdGF0aWMgX19pbml0IHZvaWQgeGVuX2luaXRfY3B1aWRfbWFzayh2b2lkKQogewogCXVuc2lnbmVkIGludCBheCwgYngsIGN4LCBkeDsKKwl1bnNpZ25lZCBpbnQgeHNhdmVfbWFzazsKIAogCWNwdWlkX2xlYWYxX2VkeF9tYXNrID0KIAkJfigoMSA8PCBYODZfRkVBVFVSRV9NQ0UpICB8ICAvKiBkaXNhYmxlIE1DRSAqLwpAQCAtMjQ5LDI0ICsyNTAsMTYgQEAKIAkJY3B1aWRfbGVhZjFfZWR4X21hc2sgJj0KIAkJCX4oKDEgPDwgWDg2X0ZFQVRVUkVfQVBJQykgfCAgLyogZGlzYWJsZSBsb2NhbCBBUElDICovCiAJCQkgICgxIDw8IFg4Nl9GRUFUVVJFX0FDUEkpKTsgIC8qIGRpc2FibGUgQUNQSSAqLwotCiAJYXggPSAxOwotCWN4ID0gMDsKIAl4ZW5fY3B1aWQoJmF4LCAmYngsICZjeCwgJmR4KTsKIAotCS8qIGNwdWlkIGNsYWltcyB3ZSBzdXBwb3J0IHhzYXZlOyB0cnkgZW5hYmxpbmcgaXQgdG8gc2VlIHdoYXQgaGFwcGVucyAqLwotCWlmIChjeCAmICgxIDw8IChYODZfRkVBVFVSRV9YU0FWRSAlIDMyKSkpIHsKLQkJdW5zaWduZWQgbG9uZyBjcjQ7CisJeHNhdmVfbWFzayA9CisJCSgxIDw8IChYODZfRkVBVFVSRV9YU0FWRSAlIDMyKSkgfAorCQkoMSA8PCAoWDg2X0ZFQVRVUkVfT1NYU0FWRSAlIDMyKSk7CiAKLQkJc2V0X2luX2NyNChYODZfQ1I0X09TWFNBVkUpOwotCQkKLQkJY3I0ID0gcmVhZF9jcjQoKTsKLQotCQlpZiAoKGNyNCAmIFg4Nl9DUjRfT1NYU0FWRSkgPT0gMCkKLQkJCWNwdWlkX2xlYWYxX2VjeF9tYXNrICY9IH4oMSA8PCAoWDg2X0ZFQVRVUkVfWFNBVkUgJSAzMikpOwotCi0JCWNsZWFyX2luX2NyNChYODZfQ1I0X09TWFNBVkUpOwotCX0KKwkvKiBYZW4gd2lsbCBzZXQgQ1I0Lk9TWFNBVkUgaWYgc3VwcG9ydGVkIGFuZCBub3QgZGlzYWJsZWQgYnkgZm9yY2UgKi8KKwlpZiAoKGN4ICYgeHNhdmVfbWFzaykgIT0geHNhdmVfbWFzaykKKwkJY3B1aWRfbGVhZjFfZWN4X21hc2sgJj0gfnhzYXZlX21hc2s7IC8qIGRpc2FibGUgWFNBVkUgJiBPU1hTQVZFICovCiB9CiAKIHN0YXRpYyB2b2lkIHhlbl9zZXRfZGVidWdyZWcoaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYzgyZGY2Yy4uMDY4NGYzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwpAQCAtNTY1LDEzICs1NjUsMTMgQEAKIAlpZiAoaW9fcGFnZSAmJgogCSAgICAoeGVuX2luaXRpYWxfZG9tYWluKCkgfHwgYWRkciA+PSBJU0FfRU5EX0FERFJFU1MpKSB7CiAJCW90aGVyX2FkZHIgPSBwZm5fdG9fbWZuKGFkZHIgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVDsKLQkJV0FSTihhZGRyICE9IG90aGVyX2FkZHIsCisJCVdBUk5fT05DRShhZGRyICE9IG90aGVyX2FkZHIsCiAJCQkiMHglbHggaXMgdXNpbmcgVk1fSU8sIGJ1dCBpdCBpcyAweCVseCFcbiIsCiAJCQkodW5zaWduZWQgbG9uZylhZGRyLCAodW5zaWduZWQgbG9uZylvdGhlcl9hZGRyKTsKIAl9IGVsc2UgewogCQlwdGV2YWxfdCBpb21hcF9zZXQgPSAoX3B0ZS5wdGUgJiBQVEVfRkxBR1NfTUFTSykgJiBfUEFHRV9JT01BUDsKIAkJb3RoZXJfYWRkciA9IChfcHRlLnB0ZSAmIFBURV9QRk5fTUFTSyk7Ci0JCVdBUk4oKGFkZHIgPT0gb3RoZXJfYWRkcikgJiYgKCFpb19wYWdlKSAmJiAoIWlvbWFwX3NldCksCisJCVdBUk5fT05DRSgoYWRkciA9PSBvdGhlcl9hZGRyKSAmJiAoIWlvX3BhZ2UpICYmICghaW9tYXBfc2V0KSwKIAkJCSIweCVseCBpcyBtaXNzaW5nIFZNX0lPIChhbmQgd2Fzbid0IGZpeGVkKSFcbiIsCiAJCQkodW5zaWduZWQgbG9uZylhZGRyKTsKIAl9CkBAIC0xMjc1LDYgKzEyNzUsMjAgQEAKIHsKIH0KIAorc3RhdGljIF9faW5pdCB2b2lkIHhlbl9tYXBwaW5nX3BhZ2V0YWJsZV9yZXNlcnZlKHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwkvKiByZXNlcnZlIHRoZSByYW5nZSB1c2VkICovCisJbmF0aXZlX3BhZ2V0YWJsZV9yZXNlcnZlKHN0YXJ0LCBlbmQpOworCisJLyogc2V0IGFzIFJXIHRoZSByZXN0ICovCisJcHJpbnRrKEtFUk5fREVCVUcgInhlbjogc2V0dGluZyBSVyB0aGUgcmFuZ2UgJWxseCAtICVsbHhcbiIsIGVuZCwKKwkJCVBGTl9QSFlTKHBndF9idWZfdG9wKSk7CisJd2hpbGUgKGVuZCA8IFBGTl9QSFlTKHBndF9idWZfdG9wKSkgeworCQltYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZShfX3ZhKGVuZCkpOworCQllbmQgKz0gUEFHRV9TSVpFOworCX0KK30KKwogc3RhdGljIHZvaWQgeGVuX3Bvc3RfYWxsb2NhdG9yX2luaXQodm9pZCk7CiAKIHN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpCkBAIC0xNDczLDE2ICsxNDg3LDIwIEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19YODZfMzIKIHN0YXRpYyBfX2luaXQgcHRlX3QgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHB0ZSwgdGhlbiBkb24ndCBhbGxvdyBfUEFHRV9SVyB0byBiZSBzZXQgKi8KIAlpZiAocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9QUkVTRU5UKQogCQlwdGUgPSBfX3B0ZV9tYSgoKHB0ZV92YWxfbWEoKnB0ZXApICYgX1BBR0VfUlcpIHwgfl9QQUdFX1JXKSAmCiAJCQkgICAgICAgcHRlX3ZhbF9tYShwdGUpKTsKLSNlbmRpZgorCisJcmV0dXJuIHB0ZTsKK30KKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KK3N0YXRpYyBfX2luaXQgcHRlX3QgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKIAogCS8qCiAJICogSWYgdGhlIG5ldyBwZm4gaXMgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkCkBAIC0xNDkxLDEyICsxNTA5LDEzIEBACiAJICogaXQgaXMgUk8uCiAJICovCiAJaWYgKCgoIWlzX2Vhcmx5X2lvcmVtYXBfcHRlcChwdGVwKSAmJgotCQkJcGZuID49IHBndF9idWZfc3RhcnQgJiYgcGZuIDwgcGd0X2J1Zl9lbmQpKSB8fAorCQkJcGZuID49IHBndF9idWZfc3RhcnQgJiYgcGZuIDwgcGd0X2J1Zl90b3ApKSB8fAogCQkJKGlzX2Vhcmx5X2lvcmVtYXBfcHRlcChwdGVwKSAmJiBwZm4gIT0gKHBndF9idWZfZW5kIC0gMSkpKQogCQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiAKIAlyZXR1cm4gcHRlOwogfQorI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogLyogSW5pdC10aW1lIHNldF9wdGUgd2hpbGUgY29uc3RydWN0aW5nIGluaXRpYWwgcGFnZXRhYmxlcywgd2hpY2gKICAgIGRvZXNuJ3QgYWxsb3cgUk8gcGFnZXRhYmxlIHBhZ2VzIHRvIGJlIHJlbWFwcGVkIFJXICovCkBAIC0yMTAwLDYgKzIxMTksNyBAQAogCiB2b2lkIF9faW5pdCB4ZW5faW5pdF9tbXVfb3BzKHZvaWQpCiB7CisJeDg2X2luaXQubWFwcGluZy5wYWdldGFibGVfcmVzZXJ2ZSA9IHhlbl9tYXBwaW5nX3BhZ2V0YWJsZV9yZXNlcnZlOwogCXg4Nl9pbml0LnBhZ2luZy5wYWdldGFibGVfc2V0dXBfc3RhcnQgPSB4ZW5fcGFnZXRhYmxlX3NldHVwX3N0YXJ0OwogCXg4Nl9pbml0LnBhZ2luZy5wYWdldGFibGVfc2V0dXBfZG9uZSA9IHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZTsKIAlwdl9tbXVfb3BzID0geGVuX21tdV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCmluZGV4IGZhMDI2OWEuLjkwYmFjMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zZXR1cC5jCisrKyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogCW1lbWNweShtYXBfcmF3LCBtYXAsIHNpemVvZihtYXApKTsKIAllODIwLm5yX21hcCA9IDA7Ci0JeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7CisJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1heCgoMVVMTCA8PCAzMiksIG1lbV9lbmQpOwogCWZvciAoaSA9IDA7IGkgPCBtZW1tYXAubnJfZW50cmllczsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmgKaW5kZXggMTM3Y2EzOS4uYmIwOTlhMyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAqCXRoZSBzaXplIG9mIHRoZSBzdGF0aWNhbGx5IG1hcHBlZCBrZXJuZWwgc2VnbWVudAogICoJKFhDSEFMX0tTRUdfe0NBQ0hFRCxCWVBBU1N9X1NJWkUpLCBpZS4gMTI4IE1CLgogICoKLSAqIE5PVEU6IFdoZW4gdGhlIGVudGlyZSBLU0VHIGFyZWEgaXMgRE1BIGNhcGFibGUsIHdlIHN1YnN0cmFjdAorICogTk9URTogV2hlbiB0aGUgZW50aXJlIEtTRUcgYXJlYSBpcyBETUEgY2FwYWJsZSwgd2Ugc3VidHJhY3QKICAqCW9uZSBmcm9tIHRoZSBtYXggYWRkcmVzcyBzbyB0aGF0IHRoZSB2aXJ0X3RvX3BoeXMoKSBtYWNybwogICoJd29ya3MgY29ycmVjdGx5IG9uIHRoZSBhZGRyZXNzIChvdGhlcndpc2UgdGhlIGFkZHJlc3MKICAqCWVudGVycyBhbm90aGVyIGFyZWEsIGFuZCB2aXJ0X3RvX3BoeXMoKSBtYXkgbm90IHJldHVybgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUwppbmRleCA1ZmQwMWY2Li42MjIzZjMzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUwpAQCAtMTAyNiw3ICsxMDI2LDcgQEAKICAqIFRSWQkgYWRkcyBhbiBlbnRyeSB0byB0aGUgX19leF90YWJsZSBmaXh1cCB0YWJsZSBmb3IgdGhlIGltbWVkaWF0ZWx5CiAgKgkgZm9sbG93aW5nIGluc3RydWN0aW9uLgogICoKLSAqIENBVENIIGNhdGNoZXMgYW55IGV4Y2VwdGlvbiB0aGF0IG9jY3VycmVkIGF0IG9uZSBvZiB0aGUgcHJlY2VlZGluZyBUUlkKKyAqIENBVENIIGNhdGNoZXMgYW55IGV4Y2VwdGlvbiB0aGF0IG9jY3VycmVkIGF0IG9uZSBvZiB0aGUgcHJlY2VkaW5nIFRSWQogICogICAgICAgc3RhdGVtZW50cyBhbmQgY29udGludWVzIGZyb20gdGhlcmUKICAqCiAgKiBVc2FnZSBUUlkJbDMyaQlhMCwgYTEsIDAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYwppbmRleCBkNzcwODlkLi40MzQwZWUwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCkBAIC02NCw0NyArNjQsNDEgQEAKIAogaW50IGFyY2hfc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgaW50IHByZWMpCiB7Ci0JaW50IGo7Ci0KLQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJOTUkiKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwgbm1pX2NvdW50KGopKTsKLQlzZXFfcHV0YyhwLCAnXG4nKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJFUlIiKTsKIAlzZXFfcHJpbnRmKHAsICIlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB4dGVuc2FfaXJxX21hc2soc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAljYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGQtPmlycSk7CiAJc2V0X3NyIChjYWNoZWRfaXJxX21hc2ssIElOVEVOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAljYWNoZWRfaXJxX21hc2sgfD0gMSA8PCBkLT5pcnE7CiAJc2V0X3NyIChjYWNoZWRfaXJxX21hc2ssIElOVEVOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2YXJpYW50X2lycV9lbmFibGUoZC0+aXJxKTsKIAl4dGVuc2FfaXJxX3VubWFzayhkLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2Rpc2FibGUoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl4dGVuc2FfaXJxX21hc2soZC0+aXJxKTsKIAl2YXJpYW50X2lycV9kaXNhYmxlKGQtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfYWNrKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzZXRfc3IoMSA8PCBkLT5pcnEsIElOVENMRUFSKTsKIH0KIAotc3RhdGljIGludCB4dGVuc2FfaXJxX3JldHJpZ2dlcihzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgaW50IHh0ZW5zYV9pcnFfcmV0cmlnZ2VyKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzZXRfc3IgKDEgPDwgZC0+aXJxLCBJTlRTRVQpOwogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IDJiZWY1NzAuLmYwNjA1YWIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYworKysgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTg2OCw3ICs4NjgsNyBAQAogfQogCiAvKgotICogU29tZSBydWxlcy92YWx1ZXMgaW4gYmxrZyBoYXZlIGNoYW5nZWQuIFByb3BvZ2F0ZSB0aG9zZSB0byByZXNwZWN0aXZlCisgKiBTb21lIHJ1bGVzL3ZhbHVlcyBpbiBibGtnIGhhdmUgY2hhbmdlZC4gUHJvcGFnYXRlIHRob3NlIHRvIHJlc3BlY3RpdmUKICAqIHBvbGljaWVzLgogICovCiBzdGF0aWMgdm9pZCBibGtpb191cGRhdGVfYmxrZ19wb2xpY3koc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2csCkBAIC05MDMsNyArOTAzLDcgQEAKIH0KIAogLyoKLSAqIEEgcG9saWN5IG5vZGUgcnVsZSBoYXMgYmVlbiB1cGRhdGVkLiBQcm9wb2dhdGUgdGhpcyB1cGRhdGUgdG8gYWxsIHRoZQorICogQSBwb2xpY3kgbm9kZSBydWxlIGhhcyBiZWVuIHVwZGF0ZWQuIFByb3BhZ2F0ZSB0aGlzIHVwZGF0ZSB0byBhbGwgdGhlCiAgKiBibG9jayBncm91cHMgd2hpY2ggbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhpcyB1cGRhdGUuCiAgKi8KIHN0YXRpYyB2b2lkIGJsa2lvX3VwZGF0ZV9wb2xpY3lfbm9kZV9ibGtnKHN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnLApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggZTBhMDYyMy4uYTJlNThlZSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0xOTgsMjYgKzE5OCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChibGtfZHVtcF9ycV9mbGFncyk7CiAKLS8qCi0gKiBNYWtlIHN1cmUgdGhhdCBwbHVncyB0aGF0IHdlcmUgcGVuZGluZyB3aGVuIHRoaXMgZnVuY3Rpb24gd2FzIGVudGVyZWQsCi0gKiBhcmUgbm93IGNvbXBsZXRlIGFuZCByZXF1ZXN0cyBwdXNoZWQgdG8gdGhlIHF1ZXVlLgotKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9zeW5jX3BsdWdzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCS8qCi0JICogSWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBwbHVnZ2VkIGFuZCBoYXMgYmFycmllcnMgc3VibWl0dGVkLAotCSAqIHdlIHdpbGwgbGl2ZWxvY2sgaWYgd2UgZG9uJ3QgdW5wbHVnIGZpcnN0LgotCSAqLwotCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotfQotCiBzdGF0aWMgdm9pZCBibGtfZGVsYXlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CiAKIAlxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLCBkZWxheV93b3JrLndvcmspOwogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwlfX2Jsa19ydW5fcXVldWUocSk7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogfQogCkBAIC0yMzMsNyArMjIwLDggQEAKICAqLwogdm9pZCBibGtfZGVsYXlfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGxvbmcgbXNlY3MpCiB7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZxLT5kZWxheV93b3JrLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7CisJcXVldWVfZGVsYXllZF93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCAmcS0+ZGVsYXlfd29yaywKKwkJCQltc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19kZWxheV9xdWV1ZSk7CiAKQEAgLTI1MSw3ICsyMzksNyBAQAogCVdBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKIAlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfU1RPUFBFRCwgcSk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwlfX2Jsa19ydW5fcXVldWUocSk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19zdGFydF9xdWV1ZSk7CiAKQEAgLTI5OCwzOCArMjg2LDQyIEBACiB7CiAJZGVsX3RpbWVyX3N5bmMoJnEtPnRpbWVvdXQpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcS0+ZGVsYXlfd29yayk7Ci0JcXVldWVfc3luY19wbHVncyhxKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3N5bmNfcXVldWUpOwogCiAvKioKICAqIF9fYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKICAqIEBxOglUaGUgcXVldWUgdG8gcnVuCi0gKiBAZm9yY2Vfa2Jsb2NrZDogRG9uJ3QgcnVuIEBxLT5yZXF1ZXN0X2ZuIGRpcmVjdGx5LiAgVXNlIGtibG9ja2QuCiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgICBTZWUgQGJsa19ydW5fcXVldWUuIFRoaXMgdmFyaWFudCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBxdWV1ZSBsb2NrCiAgKiAgICBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICoKICAqLwotdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgZm9yY2Vfa2Jsb2NrZCkKK3ZvaWQgX19ibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWlmICh1bmxpa2VseShibGtfcXVldWVfc3RvcHBlZChxKSkpCiAJCXJldHVybjsKIAotCS8qCi0JICogT25seSByZWN1cnNlIG9uY2UgdG8gYXZvaWQgb3ZlcnJ1bm5pbmcgdGhlIHN0YWNrLCBsZXQgdGhlIHVucGx1ZwotCSAqIGhhbmRsaW5nIHJlaW52b2tlIHRoZSBoYW5kbGVyIHNob3J0bHkgaWYgd2UgYWxyZWFkeSBnb3QgdGhlcmUuCi0JICovCi0JaWYgKCFmb3JjZV9rYmxvY2tkICYmICFxdWV1ZV9mbGFnX3Rlc3RfYW5kX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHEpKSB7Ci0JCXEtPnJlcXVlc3RfZm4ocSk7Ci0JCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19SRUVOVEVSLCBxKTsKLQl9IGVsc2UKLQkJcXVldWVfZGVsYXllZF93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCAmcS0+ZGVsYXlfd29yaywgMCk7CisJcS0+cmVxdWVzdF9mbihxKTsKIH0KIEVYUE9SVF9TWU1CT0woX19ibGtfcnVuX3F1ZXVlKTsKIAogLyoqCisgKiBibGtfcnVuX3F1ZXVlX2FzeW5jIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZSBpbiB3b3JrcXVldWUgY29udGV4dAorICogQHE6CVRoZSBxdWV1ZSB0byBydW4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgIFRlbGxzIGtibG9ja2QgdG8gcGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBAYmxrX3J1bl9xdWV1ZSBvbiBiZWhhbGYKKyAqICAgIG9mIHVzLgorICovCit2b2lkIGJsa19ydW5fcXVldWVfYXN5bmMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJaWYgKGxpa2VseSghYmxrX3F1ZXVlX3N0b3BwZWQocSkpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoa2Jsb2NrZF93b3JrcXVldWUsICZxLT5kZWxheV93b3JrLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3J1bl9xdWV1ZV9hc3luYyk7CisKKy8qKgogICogYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKICAqIEBxOiBUaGUgcXVldWUgdG8gcnVuCiAgKgpAQCAtMzQyLDcgKzMzNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOworCV9fYmxrX3J1bl9xdWV1ZShxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3J1bl9xdWV1ZSk7CkBAIC05OTEsNyArOTgzLDcgQEAKIAkJYmxrX3F1ZXVlX2VuZF90YWcocSwgcnEpOwogCiAJYWRkX2FjY3RfcmVxdWVzdChxLCBycSwgd2hlcmUpOwotCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJX19ibGtfcnVuX3F1ZXVlKHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChibGtfaW5zZXJ0X3JlcXVlc3QpOwpAQCAtMTE4NCw3ICsxMTc2LDcgQEAKIAogLyoKICAqIEF0dGVtcHRzIHRvIG1lcmdlIHdpdGggdGhlIHBsdWdnZWQgbGlzdCBpbiB0aGUgY3VycmVudCBwcm9jZXNzLiBSZXR1cm5zCi0gKiB0cnVlIGlmIG1lcmdlIHdhcyBzdWNjZXNmdWwsIG90aGVyd2lzZSBmYWxzZS4KKyAqIHRydWUgaWYgbWVyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wgYXR0ZW1wdF9wbHVnX21lcmdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJCSAgICAgICBzdHJ1Y3QgYmlvICpiaW8pCkBAIC0xMzExLDcgKzEzMDMsMTUgQEAKIAogCXBsdWcgPSBjdXJyZW50LT5wbHVnOwogCWlmIChwbHVnKSB7Ci0JCWlmICghcGx1Zy0+c2hvdWxkX3NvcnQgJiYgIWxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKSB7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJlcXVlc3QgYWRkZWQgYWZ0ZXIgYSBwbHVnLCBmaXJlCisJCSAqIG9mIGEgcGx1ZyB0cmFjZS4gSWYgb3RoZXJzIGhhdmUgYmVlbiBhZGRlZCBiZWZvcmUsIGNoZWNrCisJCSAqIGlmIHdlIGhhdmUgbXVsdGlwbGUgZGV2aWNlcyBpbiB0aGlzIHBsdWcuIElmIHNvLCBtYWtlIGEKKwkJICogbm90ZSB0byBzb3J0IHRoZSBsaXN0IGJlZm9yZSBkaXNwYXRjaC4KKwkJICovCisJCWlmIChsaXN0X2VtcHR5KCZwbHVnLT5saXN0KSkKKwkJCXRyYWNlX2Jsb2NrX3BsdWcocSk7CisJCWVsc2UgaWYgKCFwbHVnLT5zaG91bGRfc29ydCkgewogCQkJc3RydWN0IHJlcXVlc3QgKl9fcnE7CiAKIAkJCV9fcnEgPSBsaXN0X2VudHJ5X3JxKHBsdWctPmxpc3QucHJldik7CkBAIC0xMzI3LDcgKzEzMjcsNyBAQAogCX0gZWxzZSB7CiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCWFkZF9hY2N0X3JlcXVlc3QocSwgcmVxLCB3aGVyZSk7Ci0JCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShxKTsKIG91dF91bmxvY2s6CiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAl9CkBAIC0yMTYzLDcgKzIxNjMsNyBAQAogCSAqIHNpemUsIHNvbWV0aGluZyBoYXMgZ29uZSB0ZXJyaWJseSB3cm9uZy4KIAkgKi8KIAlpZiAoYmxrX3JxX2J5dGVzKHJlcSkgPCBibGtfcnFfY3VyX2J5dGVzKHJlcSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJibGs6IHJlcXVlc3QgYm90Y2hlZFxuIik7CisJCWJsa19kdW1wX3JxX2ZsYWdzKHJlcSwgInJlcXVlc3QgYm90Y2hlZCIpOwogCQlyZXEtPl9fZGF0YV9sZW4gPSBibGtfcnFfY3VyX2J5dGVzKHJlcSk7CiAJfQogCkBAIC0yNjQ0LDYgKzI2NDQsNyBAQAogCiAJcGx1Zy0+bWFnaWMgPSBQTFVHX01BR0lDOwogCUlOSVRfTElTVF9IRUFEKCZwbHVnLT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGx1Zy0+Y2JfbGlzdCk7CiAJcGx1Zy0+c2hvdWxkX3NvcnQgPSAwOwogCiAJLyoKQEAgLTI2NjUsMzYgKzI2NjYsOTYgQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcnFhID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpOwogCXN0cnVjdCByZXF1ZXN0ICpycWIgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CiAKLQlyZXR1cm4gIShycWEtPnEgPT0gcnFiLT5xKTsKKwlyZXR1cm4gIShycWEtPnEgPD0gcnFiLT5xKTsKIH0KIAotc3RhdGljIHZvaWQgZmx1c2hfcGx1Z19saXN0KHN0cnVjdCBibGtfcGx1ZyAqcGx1ZykKKy8qCisgKiBJZiAnZnJvbV9zY2hlZHVsZScgaXMgdHJ1ZSwgdGhlbiBwb3N0cG9uZSB0aGUgZGlzcGF0Y2ggb2YgcmVxdWVzdHMKKyAqIHVudGlsIGEgc2FmZSBrYmxvY2tkIGNvbnRleHQuIFdlIGR1ZSB0aGlzIHRvIGF2b2lkIGFjY2lkZW50YWwgYmlnCisgKiBhZGRpdGlvbmFsIHN0YWNrIHVzYWdlIGluIGRyaXZlciBkaXNwYXRjaCwgaW4gcGxhY2VzIHdoZXJlIHRoZSBvcmlnaW5hbGx5CisgKiBwbHVnZ2VyIGRpZCBub3QgaW50ZW5kIGl0LgorICovCitzdGF0aWMgdm9pZCBxdWV1ZV91bnBsdWdnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBkZXB0aCwKKwkJCSAgICBib29sIGZyb21fc2NoZWR1bGUpCisJX19yZWxlYXNlcyhxLT5xdWV1ZV9sb2NrKQoreworCXRyYWNlX2Jsb2NrX3VucGx1ZyhxLCBkZXB0aCwgIWZyb21fc2NoZWR1bGUpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgcHVudGluZyB0aGlzIHRvIGtibG9ja2QsIHRoZW4gd2UgY2FuIHNhZmVseSBkcm9wCisJICogdGhlIHF1ZXVlX2xvY2sgYmVmb3JlIHdha2luZyBrYmxvY2tkICh3aGljaCBuZWVkcyB0byB0YWtlCisJICogdGhpcyBsb2NrKS4KKwkgKi8KKwlpZiAoZnJvbV9zY2hlZHVsZSkgeworCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKKwkJYmxrX3J1bl9xdWV1ZV9hc3luYyhxKTsKKwl9IGVsc2UgeworCQlfX2Jsa19ydW5fcXVldWUocSk7CisJCXNwaW5fdW5sb2NrKHEtPnF1ZXVlX2xvY2spOworCX0KKworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9wbHVnX2NhbGxiYWNrcyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCit7CisJTElTVF9IRUFEKGNhbGxiYWNrcyk7CisKKwlpZiAobGlzdF9lbXB0eSgmcGx1Zy0+Y2JfbGlzdCkpCisJCXJldHVybjsKKworCWxpc3Rfc3BsaWNlX2luaXQoJnBsdWctPmNiX2xpc3QsICZjYWxsYmFja3MpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjYWxsYmFja3MpKSB7CisJCXN0cnVjdCBibGtfcGx1Z19jYiAqY2IgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjYWxsYmFja3MsCisJCQkJCQkJICBzdHJ1Y3QgYmxrX3BsdWdfY2IsCisJCQkJCQkJICBsaXN0KTsKKwkJbGlzdF9kZWwoJmNiLT5saXN0KTsKKwkJY2ItPmNhbGxiYWNrKGNiKTsKKwl9Cit9CisKK3ZvaWQgYmxrX2ZsdXNoX3BsdWdfbGlzdChzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcsIGJvb2wgZnJvbV9zY2hlZHVsZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlMSVNUX0hFQUQobGlzdCk7CisJdW5zaWduZWQgaW50IGRlcHRoOwogCiAJQlVHX09OKHBsdWctPm1hZ2ljICE9IFBMVUdfTUFHSUMpOwogCisJZmx1c2hfcGx1Z19jYWxsYmFja3MocGx1Zyk7CiAJaWYgKGxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKQogCQlyZXR1cm47CiAKLQlpZiAocGx1Zy0+c2hvdWxkX3NvcnQpCi0JCWxpc3Rfc29ydChOVUxMLCAmcGx1Zy0+bGlzdCwgcGx1Z19ycV9jbXApOworCWxpc3Rfc3BsaWNlX2luaXQoJnBsdWctPmxpc3QsICZsaXN0KTsKKworCWlmIChwbHVnLT5zaG91bGRfc29ydCkgeworCQlsaXN0X3NvcnQoTlVMTCwgJmxpc3QsIHBsdWdfcnFfY21wKTsKKwkJcGx1Zy0+c2hvdWxkX3NvcnQgPSAwOworCX0KIAogCXEgPSBOVUxMOworCWRlcHRoID0gMDsKKworCS8qCisJICogU2F2ZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUsIHRvIGF2b2lkIGRvaW5nIGl0IGZvciBldmVyeQorCSAqIHF1ZXVlIGxvY2sgd2UgaGF2ZSB0byB0YWtlLgorCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKSB7Ci0JCXJxID0gbGlzdF9lbnRyeV9ycShwbHVnLT5saXN0Lm5leHQpOworCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKKwkJcnEgPSBsaXN0X2VudHJ5X3JxKGxpc3QubmV4dCk7CiAJCWxpc3RfZGVsX2luaXQoJnJxLT5xdWV1ZWxpc3QpOwogCQlCVUdfT04oIShycS0+Y21kX2ZsYWdzICYgUkVRX09OX1BMVUcpKTsKIAkJQlVHX09OKCFycS0+cSk7CiAJCWlmIChycS0+cSAhPSBxKSB7Ci0JCQlpZiAocSkgewotCQkJCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7Ci0JCQkJc3Bpbl91bmxvY2socS0+cXVldWVfbG9jayk7Ci0JCQl9CisJCQkvKgorCQkJICogVGhpcyBkcm9wcyB0aGUgcXVldWUgbG9jaworCQkJICovCisJCQlpZiAocSkKKwkJCQlxdWV1ZV91bnBsdWdnZWQocSwgZGVwdGgsIGZyb21fc2NoZWR1bGUpOwogCQkJcSA9IHJxLT5xOworCQkJZGVwdGggPSAwOwogCQkJc3Bpbl9sb2NrKHEtPnF1ZXVlX2xvY2spOwogCQl9CiAJCXJxLT5jbWRfZmxhZ3MgJj0gflJFUV9PTl9QTFVHOwpAQCAtMjcwNiwzOSArMjc2NywyOCBAQAogCQkJX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GTFVTSCk7CiAJCWVsc2UKIAkJCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfU09SVF9NRVJHRSk7CisKKwkJZGVwdGgrKzsKIAl9CiAKLQlpZiAocSkgewotCQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwotCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKLQl9CisJLyoKKwkgKiBUaGlzIGRyb3BzIHRoZSBxdWV1ZSBsb2NrCisJICovCisJaWYgKHEpCisJCXF1ZXVlX3VucGx1Z2dlZChxLCBkZXB0aCwgZnJvbV9zY2hlZHVsZSk7CiAKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fYmxrX2ZpbmlzaF9wbHVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCi17Ci0JZmx1c2hfcGx1Z19saXN0KHBsdWcpOwotCi0JaWYgKHBsdWcgPT0gdHNrLT5wbHVnKQotCQl0c2stPnBsdWcgPSBOVUxMOwotfQotCiB2b2lkIGJsa19maW5pc2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCiB7Ci0JaWYgKHBsdWcpCi0JCV9fYmxrX2ZpbmlzaF9wbHVnKGN1cnJlbnQsIHBsdWcpOworCWJsa19mbHVzaF9wbHVnX2xpc3QocGx1ZywgZmFsc2UpOworCisJaWYgKHBsdWcgPT0gY3VycmVudC0+cGx1ZykKKwkJY3VycmVudC0+cGx1ZyA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19maW5pc2hfcGx1Zyk7CiAKLXZvaWQgX19ibGtfZmx1c2hfcGx1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGJsa19wbHVnICpwbHVnKQotewotCV9fYmxrX2ZpbmlzaF9wbHVnKHRzaywgcGx1Zyk7Ci0JdHNrLT5wbHVnID0gcGx1ZzsKLX0KLUVYUE9SVF9TWU1CT0woX19ibGtfZmx1c2hfcGx1Zyk7Ci0KIGludCBfX2luaXQgYmxrX2Rldl9pbml0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKF9fUkVRX05SX0JJVFMgPiA4ICoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1leGVjLmMgYi9ibG9jay9ibGstZXhlYy5jCmluZGV4IDc0ODJiN2YuLjgxZTMxODEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1leGVjLmMKKysrIGIvYmxvY2svYmxrLWV4ZWMuYwpAQCAtNTUsNyArNTUsNyBAQAogCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCB3aGVyZSk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwlfX2Jsa19ydW5fcXVldWUocSk7CiAJLyogdGhlIHF1ZXVlIGlzIHN0b3BwZWQgc28gaXQgd29uJ3QgYmUgcGx1Z2dlZCt1bnBsdWdnZWQgKi8KIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1BNX1JFU1VNRSkKIAkJcS0+cmVxdWVzdF9mbihxKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1mbHVzaC5jIGIvYmxvY2svYmxrLWZsdXNoLmMKaW5kZXggOTNkNWZkOC4uNmM5YjVlMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWZsdXNoLmMKKysrIGIvYmxvY2svYmxrLWZsdXNoLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCSAqIHJlcXVlc3RfZm4gbWF5IGNvbmZ1c2UgdGhlIGRyaXZlci4gIEFsd2F5cyB1c2Uga2Jsb2NrZC4KIAkgKi8KIAlpZiAocXVldWVkKQotCQlfX2Jsa19ydW5fcXVldWUocSwgdHJ1ZSk7CisJCWJsa19ydW5fcXVldWVfYXN5bmMocSk7CiB9CiAKIC8qKgpAQCAtMjYxLDcgKzI2MSw3IEBACiAJcS0+Zmx1c2hfcnEuZW5kX2lvID0gZmx1c2hfZW5kX2lvOwogCiAJcS0+Zmx1c2hfcGVuZGluZ19pZHggXj0gMTsKLQllbHZfaW5zZXJ0KHEsICZxLT5mbHVzaF9ycSwgRUxFVkFUT1JfSU5TRVJUX1JFUVVFVUUpOworCWxpc3RfYWRkX3RhaWwoJnEtPmZsdXNoX3JxLnF1ZXVlbGlzdCwgJnEtPnF1ZXVlX2hlYWQpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0yNzQsMTQgKzI3NCwxNCBAQAogCSAqIHRoZSBjb21tZW50IGluIGZsdXNoX2VuZF9pbygpLgogCSAqLwogCWlmIChibGtfZmx1c2hfY29tcGxldGVfc2VxKHJxLCBSRVFfRlNFUV9EQVRBLCBlcnJvcikpCi0JCV9fYmxrX3J1bl9xdWV1ZShxLCB0cnVlKTsKKwkJYmxrX3J1bl9xdWV1ZV9hc3luYyhxKTsKIH0KIAogLyoqCiAgKiBibGtfaW5zZXJ0X2ZsdXNoIC0gaW5zZXJ0IGEgbmV3IEZMVVNIL0ZVQSByZXF1ZXN0CiAgKiBAcnE6IHJlcXVlc3QgdG8gaW5zZXJ0CiAgKgotICogVG8gYmUgY2FsbGVkIGZyb20gZWx2X2luc2VydCgpIGZvciAlRUxFVkFUT1JfSU5TRVJUX0ZMVVNIIGluc2VydGlvbnMuCisgKiBUbyBiZSBjYWxsZWQgZnJvbSBfX2Vsdl9hZGRfcmVxdWVzdCgpIGZvciAlRUxFVkFUT1JfSU5TRVJUX0ZMVVNIIGluc2VydGlvbnMuCiAgKiBAcnEgaXMgYmVpbmcgc3VibWl0dGVkLiAgQW5hbHl6ZSB3aGF0IG5lZWRzIHRvIGJlIGRvbmUgYW5kIHB1dCBpdCBvbiB0aGUKICAqIHJpZ2h0IHF1ZXVlLgogICoKQEAgLTMxMiw3ICszMTIsNyBAQAogCSAqLwogCWlmICgocG9saWN5ICYgUkVRX0ZTRVFfREFUQSkgJiYKIAkgICAgIShwb2xpY3kgJiAoUkVRX0ZTRVFfUFJFRkxVU0ggfCBSRVFfRlNFUV9QT1NURkxVU0gpKSkgewotCQlsaXN0X2FkZCgmcnEtPnF1ZXVlbGlzdCwgJnEtPnF1ZXVlX2hlYWQpOworCQlsaXN0X2FkZF90YWlsKCZycS0+cXVldWVsaXN0LCAmcS0+cXVldWVfaGVhZCk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pbnRlZ3JpdHkuYyBiL2Jsb2NrL2Jsay1pbnRlZ3JpdHkuYwppbmRleCA1NGJjYmE2Li4xMjliOWUyIDEwMDY0NAotLS0gYS9ibG9jay9ibGstaW50ZWdyaXR5LmMKKysrIGIvYmxvY2svYmxrLWludGVncml0eS5jCkBAIC0zMCw2ICszMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaW50ZWdyaXR5X2NhY2hlcDsKIAorc3RhdGljIGNvbnN0IGNoYXIgKmJpX3Vuc3VwcG9ydGVkX25hbWUgPSAidW5zdXBwb3J0ZWQiOworCiAvKioKICAqIGJsa19ycV9jb3VudF9pbnRlZ3JpdHlfc2cgLSBDb3VudCBudW1iZXIgb2YgaW50ZWdyaXR5IHNjYXR0ZXJsaXN0IGVsZW1lbnRzCiAgKiBAcToJCXJlcXVlc3QgcXVldWUKQEAgLTM1OCw2ICszNjAsMTQgQEAKIAkucmVsZWFzZQk9IGJsa19pbnRlZ3JpdHlfcmVsZWFzZSwKIH07CiAKK2Jvb2wgYmxrX2ludGVncml0eV9pc19pbml0aWFsaXplZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgYmxrX2ludGVncml0eSAqYmkgPSBibGtfZ2V0X2ludGVncml0eShkaXNrKTsKKworCXJldHVybiAoYmkgJiYgYmktPm5hbWUgJiYgc3RyY21wKGJpLT5uYW1lLCBiaV91bnN1cHBvcnRlZF9uYW1lKSAhPSAwKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX2ludGVncml0eV9pc19pbml0aWFsaXplZCk7CisKIC8qKgogICogYmxrX2ludGVncml0eV9yZWdpc3RlciAtIFJlZ2lzdGVyIGEgZ2VuZGlzayBhcyBiZWluZyBpbnRlZ3JpdHktY2FwYWJsZQogICogQGRpc2s6CXN0cnVjdCBnZW5kaXNrIHBvaW50ZXIgdG8gbWFrZSBpbnRlZ3JpdHktYXdhcmUKQEAgLTQwNyw3ICs0MTcsNyBAQAogCQliaS0+Z2V0X3RhZ19mbiA9IHRlbXBsYXRlLT5nZXRfdGFnX2ZuOwogCQliaS0+dGFnX3NpemUgPSB0ZW1wbGF0ZS0+dGFnX3NpemU7CiAJfSBlbHNlCi0JCWJpLT5uYW1lID0gInVuc3VwcG9ydGVkIjsKKwkJYmktPm5hbWUgPSBiaV91bnN1cHBvcnRlZF9uYW1lOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3lzZnMuYyBiL2Jsb2NrL2Jsay1zeXNmcy5jCmluZGV4IDI2MWM3NWMuLmJkMjM2MzEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zeXNmcy5jCisrKyBiL2Jsb2NrL2Jsay1zeXNmcy5jCkBAIC02NiwxNCArNjYsMTQgQEAKIAogCWlmIChybC0+Y291bnRbQkxLX1JXX1NZTkNdID49IHEtPm5yX3JlcXVlc3RzKSB7CiAJCWJsa19zZXRfcXVldWVfZnVsbChxLCBCTEtfUldfU1lOQyk7Ci0JfSBlbHNlIGlmIChybC0+Y291bnRbQkxLX1JXX1NZTkNdKzEgPD0gcS0+bnJfcmVxdWVzdHMpIHsKKwl9IGVsc2UgewogCQlibGtfY2xlYXJfcXVldWVfZnVsbChxLCBCTEtfUldfU1lOQyk7CiAJCXdha2VfdXAoJnJsLT53YWl0W0JMS19SV19TWU5DXSk7CiAJfQogCiAJaWYgKHJsLT5jb3VudFtCTEtfUldfQVNZTkNdID49IHEtPm5yX3JlcXVlc3RzKSB7CiAJCWJsa19zZXRfcXVldWVfZnVsbChxLCBCTEtfUldfQVNZTkMpOwotCX0gZWxzZSBpZiAocmwtPmNvdW50W0JMS19SV19BU1lOQ10rMSA8PSBxLT5ucl9yZXF1ZXN0cykgeworCX0gZWxzZSB7CiAJCWJsa19jbGVhcl9xdWV1ZV9mdWxsKHEsIEJMS19SV19BU1lOQyk7CiAJCXdha2VfdXAoJnJsLT53YWl0W0JMS19SV19BU1lOQ10pOwogCX0KQEAgLTQ5OCw3ICs0OTgsNiBAQAogewogCWludCByZXQ7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGlza190b19kZXYoZGlzayk7Ci0KIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwogCiAJaWYgKFdBUk5fT04oIXEpKQpAQCAtNTA5LDggKzUwOCwxMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga29iamVjdF9hZGQoJnEtPmtvYmosIGtvYmplY3RfZ2V0KCZkZXYtPmtvYmopLCAiJXMiLCAicXVldWUiKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgeworCQlibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKGRldik7CiAJCXJldHVybiByZXQ7CisJfQogCiAJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfQUREKTsKIApAQCAtNTIxLDcgKzUyMiw3IEBACiAJaWYgKHJldCkgewogCQlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9SRU1PVkUpOwogCQlrb2JqZWN0X2RlbCgmcS0+a29iaik7Ci0JCWJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGlza190b19kZXYoZGlzaykpOworCQlibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKGRldik7CiAJCWtvYmplY3RfcHV0KCZkZXYtPmtvYmopOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggNTM1MmJkYS4uMDQ3NWEyMiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNsaWNlX2VuZFsyXTsKIAogCS8qIFNvbWUgdGhyb3R0bGUgbGltaXRzIGdvdCB1cGRhdGVkIGZvciB0aGUgZ3JvdXAgKi8KLQlib29sIGxpbWl0c19jaGFuZ2VkOworCWludCBsaW1pdHNfY2hhbmdlZDsKIH07CiAKIHN0cnVjdCB0aHJvdGxfZGF0YQpAQCAtMTAyLDcgKzEwMiw3IEBACiAJLyogV29yayBmb3IgZGlzcGF0Y2hpbmcgdGhyb3R0bGVkIGJpb3MgKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHRocm90bF93b3JrOwogCi0JYm9vbCBsaW1pdHNfY2hhbmdlZDsKKwlpbnQgbGltaXRzX2NoYW5nZWQ7CiB9OwogCiBlbnVtIHRnX3N0YXRlX2ZsYWdzIHsKQEAgLTkxNiw3ICs5MTYsNyBAQAogLyoKICAqIEZvciBhbGwgdXBkYXRlIGZ1bmN0aW9ucywga2V5IHNob3VsZCBiZSBhIHZhbGlkIHBvaW50ZXIgYmVjYXVzZSB0aGVzZQogICogdXBkYXRlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHVuZGVyIGJsa2NnX2xvY2ssIHRoYXQgbWVhbnMsIGJsa2cgaXMKLSAqIHZhbGlkIGFuZCBpbiB0dXJuIGtleSBpcyB2YWxpZC4gcXVldWUgZXhpdCBwYXRoIGNhbiBub3QgcmFjZSBiZWN1YXNlCisgKiB2YWxpZCBhbmQgaW4gdHVybiBrZXkgaXMgdmFsaWQuIHF1ZXVlIGV4aXQgcGF0aCBjYW4gbm90IHJhY2UgYmVjYXVzZQogICogb2YgYmxrY2dfbG9jawogICoKICAqIENhbiBub3QgdGFrZSBxdWV1ZSBsb2NrIGluIHVwZGF0ZSBmdW5jdGlvbnMgYXMgcXVldWUgbG9jayB1bmRlciBibGtjZ19sb2NrCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IGM4ZGIzNzEuLjYxMjYzNDYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCisrKyBiL2Jsb2NrL2Jsay5oCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qCiAgKiBFSCB0aW1lciBhbmQgSU8gY29tcGxldGlvbiB3aWxsIGJvdGggYXR0ZW1wdCB0byAnZ3JhYicgdGhlIHJlcXVlc3QsIG1ha2UKLSAqIHN1cmUgdGhhdCBvbmx5IG9uZSBvZiB0aGVtIHN1Y2VlZHMKKyAqIHN1cmUgdGhhdCBvbmx5IG9uZSBvZiB0aGVtIHN1Y2NlZWRzCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGJsa19tYXJrX3JxX2NvbXBsZXRlKHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDc3ODUxNjkuLjViNTIwMTEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtODg4LDcgKzg4OCw3IEBACiAJLyoKIAkgKiBDdXJyZW50bHkgcHV0IHRoZSBncm91cCBhdCB0aGUgZW5kLiBMYXRlciBpbXBsZW1lbnQgc29tZXRoaW5nCiAJICogc28gdGhhdCBncm91cHMgZ2V0IGxlc3NlciB2dGltZSBiYXNlZCBvbiB0aGVpciB3ZWlnaHRzLCBzbyB0aGF0Ci0JICogaWYgZ3JvdXAgZG9lcyBub3QgbG9vc2UgYWxsIGlmIGl0IHdhcyBub3QgY29udGlub3VzbHkgYmFja2xvZ2dlZC4KKwkgKiBpZiBncm91cCBkb2VzIG5vdCBsb29zZSBhbGwgaWYgaXQgd2FzIG5vdCBjb250aW51b3VzbHkgYmFja2xvZ2dlZC4KIAkgKi8KIAluID0gcmJfbGFzdCgmc3QtPnJiKTsKIAlpZiAobikgewpAQCAtMjU4MiwyOCArMjU4MiwyMCBAQAogfQogCiAvKgotICogTXVzdCBhbHdheXMgYmUgY2FsbGVkIHdpdGggdGhlIHJjdV9yZWFkX2xvY2soKSBoZWxkCi0gKi8KLXN0YXRpYyB2b2lkCi1fX2NhbGxfZm9yX2VhY2hfY2ljKHN0cnVjdCBpb19jb250ZXh0ICppb2MsCi0JCSAgICB2b2lkICgqZnVuYykoc3RydWN0IGlvX2NvbnRleHQgKiwgc3RydWN0IGNmcV9pb19jb250ZXh0ICopKQotewotCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNpYywgbiwgJmlvYy0+Y2ljX2xpc3QsIGNpY19saXN0KQotCQlmdW5jKGlvYywgY2ljKTsKLX0KLQotLyoKICAqIENhbGwgZnVuYyBmb3IgZWFjaCBjaWMgYXR0YWNoZWQgdG8gdGhpcyBpb2MuCiAgKi8KIHN0YXRpYyB2b2lkCiBjYWxsX2Zvcl9lYWNoX2NpYyhzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAogCQkgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgaW9fY29udGV4dCAqLCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKikpCiB7CisJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JX19jYWxsX2Zvcl9lYWNoX2NpYyhpb2MsIGZ1bmMpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNpYywgbiwgJmlvYy0+Y2ljX2xpc3QsIGNpY19saXN0KQorCQlmdW5jKGlvYywgY2ljKTsKKwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0yNjY0LDcgKzI2NTYsNyBAQAogCSAqIHNob3VsZCBiZSBvayB0byBpdGVyYXRlIG92ZXIgdGhlIGtub3duIGxpc3QsIHdlIHdpbGwgc2VlIGFsbCBjaWMncwogCSAqIHNpbmNlIG5vIG5ldyBvbmVzIGFyZSBhZGRlZC4KIAkgKi8KLQlfX2NhbGxfZm9yX2VhY2hfY2ljKGlvYywgY2ljX2ZyZWVfZnVuYyk7CisJY2FsbF9mb3JfZWFjaF9jaWMoaW9jLCBjaWNfZnJlZV9mdW5jKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX3B1dF9jb29wZXJhdG9yKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCkBAIC0zMzY4LDcgKzMzNjAsNyBAQAogCQkJICAgIGNmcWQtPmJ1c3lfcXVldWVzID4gMSkgewogCQkJCWNmcV9kZWxfdGltZXIoY2ZxZCwgY2ZxcSk7CiAJCQkJY2ZxX2NsZWFyX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpOwotCQkJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSwgZmFsc2UpOworCQkJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSk7CiAJCQl9IGVsc2UgewogCQkJCWNmcV9ibGtpb2NnX3VwZGF0ZV9pZGxlX3RpbWVfc3RhdHMoCiAJCQkJCQkmY2ZxcS0+Y2ZxZy0+YmxrZyk7CkBAIC0zMzgzLDcgKzMzNzUsNyBAQAogCQkgKiB0aGlzIG5ldyBxdWV1ZSBpcyBSVCBhbmQgdGhlIGN1cnJlbnQgb25lIGlzIEJFCiAJCSAqLwogCQljZnFfcHJlZW1wdF9xdWV1ZShjZnFkLCBjZnFxKTsKLQkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlLCBmYWxzZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSk7CiAJfQogfQogCkBAIC0zNzQzLDcgKzM3MzUsNyBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gY2ZxZC0+cXVldWU7CiAKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSwgZmFsc2UpOworCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSk7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCBjMzg3ZDMxLi40NWNhMWUzIDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogCiAJcnEtPmNtZF9mbGFncyAmPSB+UkVRX1NUQVJURUQ7CiAKLQllbHZfaW5zZXJ0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfUkVRVUVVRSk7CisJX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9SRVFVRVVFKTsKIH0KIAogdm9pZCBlbHZfZHJhaW5fZWxldmF0b3Ioc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCkBAIC02NDIsNyArNjQyLDcgQEAKIAkgKi8KIAllbHZfZHJhaW5fZWxldmF0b3IocSk7CiAJd2hpbGUgKHEtPnJxLmVsdnByaXYpIHsKLQkJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHEpOwogCQlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CkBAIC02NTUsMTIgKzY1NSwyNiBAQAogCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19FTFZTV0lUQ0gsIHEpOwogfQogCi12b2lkIGVsdl9pbnNlcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IHdoZXJlKQordm9pZCBfX2Vsdl9hZGRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgd2hlcmUpCiB7CiAJdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KHEsIHJxKTsKIAogCXJxLT5xID0gcTsKIAorCUJVR19PTihycS0+Y21kX2ZsYWdzICYgUkVRX09OX1BMVUcpOworCisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfU09GVEJBUlJJRVIpIHsKKwkJLyogYmFycmllcnMgYXJlIHNjaGVkdWxpbmcgYm91bmRhcnksIHVwZGF0ZSBlbmRfc2VjdG9yICovCisJCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMgfHwKKwkJICAgIChycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpKSB7CisJCQlxLT5lbmRfc2VjdG9yID0gcnFfZW5kX3NlY3RvcihycSk7CisJCQlxLT5ib3VuZGFyeV9ycSA9IHJxOworCQl9CisJfSBlbHNlIGlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRUxWUFJJVikgJiYKKwkJICAgICh3aGVyZSA9PSBFTEVWQVRPUl9JTlNFUlRfU09SVCB8fAorCQkgICAgIHdoZXJlID09IEVMRVZBVE9SX0lOU0VSVF9TT1JUX01FUkdFKSkKKwkJd2hlcmUgPSBFTEVWQVRPUl9JTlNFUlRfQkFDSzsKKwogCXN3aXRjaCAod2hlcmUpIHsKIAljYXNlIEVMRVZBVE9SX0lOU0VSVF9SRVFVRVVFOgogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX0ZST05UOgpAQCAtNjgyLDcgKzY5Niw3IEBACiAJCSAqICAgd2l0aCBhbnl0aGluZy4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gZGVsYXlpbmcgcXVldWUKIAkJICogICBwcm9jZXNzaW5nLgogCQkgKi8KLQkJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHEpOwogCQlicmVhazsKIAogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX1NPUlRfTUVSR0U6CkBAIC03MjIsMjQgKzczNiw2IEBACiAJCUJVRygpOwogCX0KIH0KLQotdm9pZCBfX2Vsdl9hZGRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgd2hlcmUpCi17Ci0JQlVHX09OKHJxLT5jbWRfZmxhZ3MgJiBSRVFfT05fUExVRyk7Ci0KLQlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9TT0ZUQkFSUklFUikgewotCQkvKiBiYXJyaWVycyBhcmUgc2NoZWR1bGluZyBib3VuZGFyeSwgdXBkYXRlIGVuZF9zZWN0b3IgKi8KLQkJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUyB8fAotCQkgICAgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRElTQ0FSRCkpIHsKLQkJCXEtPmVuZF9zZWN0b3IgPSBycV9lbmRfc2VjdG9yKHJxKTsKLQkJCXEtPmJvdW5kYXJ5X3JxID0gcnE7Ci0JCX0KLQl9IGVsc2UgaWYgKCEocnEtPmNtZF9mbGFncyAmIFJFUV9FTFZQUklWKSAmJgotCQkgICAgd2hlcmUgPT0gRUxFVkFUT1JfSU5TRVJUX1NPUlQpCi0JCXdoZXJlID0gRUxFVkFUT1JfSU5TRVJUX0JBQ0s7Ci0KLQllbHZfaW5zZXJ0KHEsIHJxLCB3aGVyZSk7Ci19CiBFWFBPUlRfU1lNQk9MKF9fZWx2X2FkZF9yZXF1ZXN0KTsKIAogdm9pZCBlbHZfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IHdoZXJlKQpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggYzkxYTJkYS4uMmRkOTg4NyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC03MzksNyArNzM5LDcgQEAKIAogCQkvKgogCQkgKiBEb24ndCBzaG93IGVtcHR5IGRldmljZXMgb3IgdGhpbmdzIHRoYXQgaGF2ZSBiZWVuCi0JCSAqIHN1cnByZXNzZWQKKwkJICogc3VwcHJlc3NlZAogCQkgKi8KIAkJaWYgKGdldF9jYXBhY2l0eShkaXNrKSA9PSAwIHx8CiAJCSAgICAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9TVVBQUkVTU19QQVJUSVRJT05fSU5GTykpCkBAIC0xNTg4LDkgKzE1ODgsMTMgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmZXYtPmxvY2spOwogCi0JLyogdGVsbCB1c2VybGFuZCBhYm91dCBuZXcgZXZlbnRzICovCisJLyoKKwkgKiBUZWxsIHVzZXJsYW5kIGFib3V0IG5ldyBldmVudHMuICBPbmx5IHRoZSBldmVudHMgbGlzdGVkIGluCisJICogQGRpc2stPmV2ZW50cyBhcmUgcmVwb3J0ZWQuICBVbmxpc3RlZCBldmVudHMgYXJlIHByb2Nlc3NlZCB0aGUKKwkgKiBzYW1lIGludGVybmFsbHkgYnV0IG5ldmVyIGdldCByZXBvcnRlZCB0byB1c2VybGFuZC4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaXNrX3VldmVudHMpOyBpKyspCi0JCWlmIChldmVudHMgJiAoMSA8PCBpKSkKKwkJaWYgKGV2ZW50cyAmIGRpc2stPmV2ZW50cyAmICgxIDw8IGkpKQogCQkJZW52cFtucl9ldmVudHMrK10gPSBkaXNrX3VldmVudHNbaV07CiAKIAlpZiAobnJfZXZlbnRzKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Fuc2lfY3BybmcuYyBiL2NyeXB0by9hbnNpX2Nwcm5nLmMKaW5kZXggMmJjMzMyMS4uZmZhMDI0NSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Fuc2lfY3BybmcuYworKysgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCkBAIC04Myw3ICs4Myw3IEBACiB9CiAvKgogICogUmV0dXJucyBERUZBVUxUX0JMS19TWiBieXRlcyBvZiByYW5kb20gZGF0YSBwZXIgY2FsbAotICogcmV0dXJucyAwIGlmIGdlbmVyYXRpb24gc3VjY2VkZWQsIDwwIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nCisgKiByZXR1cm5zIDAgaWYgZ2VuZXJhdGlvbiBzdWNjZWVkZWQsIDwwIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nCiAgKi8KIHN0YXRpYyBpbnQgX2dldF9tb3JlX3BybmdfYnl0ZXMoc3RydWN0IHBybmdfY29udGV4dCAqY3R4LCBpbnQgY29udF90ZXN0KQogewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCmluZGV4IDA3OWFlOGMuLmJjMjgzMzcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkJaWYgKHVubGlrZWx5KCF0eCkpCiAJCQlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAKLQkJLyogc3BpbiB3YWl0IGZvciB0aGUgcHJlY2VlZGluZyB0cmFuc2FjdGlvbnMgdG8gY29tcGxldGUgKi8KKwkJLyogc3BpbiB3YWl0IGZvciB0aGUgcHJlY2VkaW5nIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZSAqLwogCQl3aGlsZSAodW5saWtlbHkoIXR4KSkgewogCQkJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoY2hhbik7CiAJCQl0eCA9IGRtYS0+ZGV2aWNlX3ByZXBfZG1hX3hvcihjaGFuLCBkbWFfZGVzdCwKZGlmZiAtLWdpdCBhL2NyeXB0by9nZjEyOG11bC5jIGIvY3J5cHRvL2dmMTI4bXVsLmMKaW5kZXggYTkwZDI2MC4uZGYzNWU0YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2dmMTI4bXVsLmMKKysrIGIvY3J5cHRvL2dmMTI4bXVsLmMKQEAgLTg5LDcgKzg5LDcgQEAKIH0KIAogLyoJR2l2ZW4gdGhlIHZhbHVlIGkgaW4gMC4uMjU1IGFzIHRoZSBieXRlIG92ZXJmbG93IHdoZW4gYSBmaWVsZCBlbGVtZW50Ci0gICAgaW4gR0hBU0ggaXMgbXVsdGlwbGVkIGJ5IHheOCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgdmFsdWVzIHRoYXQKKyAgICBpbiBHSEFTSCBpcyBtdWx0aXBsaWVkIGJ5IHheOCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgdmFsdWVzIHRoYXQKICAgICBhcmUgZ2VuZXJhdGVkIGluIHRoZSBsbyAxNi1iaXQgd29yZCBvZiB0aGUgZmllbGQgdmFsdWUgYnkgYXBwbHlpbmcgdGhlCiAgICAgbW9kdWxhciBwb2x5bm9taWFsLiBUaGUgdmFsdWVzIGxvX2J5dGUgYW5kIGhpX2J5dGUgYXJlIHJldHVybmVkIHZpYSB0aGUKICAgICBtYWNybyB4cF9mdW4obG9fYnl0ZSwgaGlfYnl0ZSkgc28gdGhhdCB0aGUgdmFsdWVzIGNhbiBiZSBhc3NlbWJsZWQgaW50bwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3ZtYWMuYyBiL2NyeXB0by92bWFjLmMKaW5kZXggMDk5OTI3NC4uZjM1ZmY4YSAxMDA2NDQKLS0tIGEvY3J5cHRvL3ZtYWMuYworKysgYi9jcnlwdG8vdm1hYy5jCkBAIC05NSw3ICs5NSw3IEBACiAKIC8qCiAgKiBGb3IgaGlnaGVzdCBwZXJmb3JtYW5jZSB0aGUgTDEgTkggYW5kIEwyIHBvbHlub21pYWwgaGFzaGVzIHNob3VsZCBiZQotICogY2FyZWZ1bGx5IGltcGxlbWVudGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIG9uZSdzIHRhcmdldCBhcmNoaXRlY2h0dXJlLgorICogY2FyZWZ1bGx5IGltcGxlbWVudGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIG9uZSdzIHRhcmdldCBhcmNoaXRlY3R1cmUuCiAgKiBIZXJlIHRoZXNlIHR3byBoYXNoIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBtdWx0aXBsZSB0aW1lOyBvbmNlIGZvcgogICogNjQtYml0IGFyY2hpdGVjdHVyZXMsIG9uY2UgZm9yIDMyLWJpdCBTU0UyIGFyY2hpdGVjdHVyZXMsIGFuZCBvbmNlCiAgKiBmb3IgdGhlIHJlc3QgKDMyLWJpdCkgYXJjaGl0ZWN0dXJlcy4KZGlmZiAtLWdpdCBhL2NyeXB0by94dHMuYyBiL2NyeXB0by94dHMuYwppbmRleCA1NTVlY2FhLi44NTE3MDU0IDEwMDY0NAotLS0gYS9jcnlwdG8veHRzLmMKKysrIGIvY3J5cHRvL3h0cy5jCkBAIC00NSw3ICs0NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHdlIG5lZWQgdHdvIGNpcGhlciBpbnN0YW5jZXM6IG9uZSB0byBjb21wdXRlIHRoZSBpbml0YWwgJ3R3ZWFrJworCS8qIHdlIG5lZWQgdHdvIGNpcGhlciBpbnN0YW5jZXM6IG9uZSB0byBjb21wdXRlIHRoZSBpbml0aWFsICd0d2VhaycKIAkgKiBieSBlbmNyeXB0aW5nIHRoZSBJViAodXN1YWxseSB0aGUgJ3BsYWluJyBpdikgYW5kIHRoZSBvdGhlcgogCSAqIG9uZSB0byBlbmNyeXB0IGFuZCBkZWNyeXB0IHRoZSBkYXRhICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYyBiL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYwppbmRleCBkMWQ0ODRkLi5mNzAzYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvZ2hlcy5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAljYXNlIENQRVJfU0VWX0ZBVEFMOgogCQlyZXR1cm4gR0hFU19TRVZfUEFOSUM7CiAJZGVmYXVsdDoKLQkJLyogVW5rb3duLCBnbyBwYW5pYyAqLworCQkvKiBVbmtub3duLCBnbyBwYW5pYyAqLwogCQlyZXR1cm4gR0hFU19TRVZfUEFOSUM7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwppbmRleCBmYTg0ZTk3Li5hZDM1MDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwpAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIAkJCSAqLwogCQkJaWYgKCFtYXRjaF9wci0+ZmxhZ3MudGhyb3R0bGluZykgewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkJIlRocm90dGxpbmcgQ29udHJvbGwgaXMgdW5zdXBwb3J0ZWQgIgorCQkJCQkiVGhyb3R0bGluZyBDb250cm9sIGlzIHVuc3VwcG9ydGVkICIKIAkJCQkJIm9uIENQVSAlZFxuIiwgaSkpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggYjEzNmM5Yy4uNDQ5YzU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC05NDMsNiArOTQzLDEwIEBACiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQlkZXZpY2UtPmZsYWdzLmxvY2thYmxlID0gMTsKIAorCS8qIFBvd2VyIHJlc291cmNlcyBjYW5ub3QgYmUgcG93ZXIgbWFuYWdlYWJsZS4gKi8KKwlpZiAoZGV2aWNlLT5kZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1BPV0VSKQorCQlyZXR1cm4gMDsKKwogCS8qIFByZXNlbmNlIG9mIF9QUzB8X1BSMCBpbmRpY2F0ZXMgJ3Bvd2VyIG1hbmFnZWFibGUnICovCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX1BTMCIsICZ0ZW1wKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW8uYyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCmluZGV4IDMxZTllMTAuLmVjNTc0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlby5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCkBAIC0xMzU0LDcgKzEzNTQsNyBAQAogCQlzdGF0dXMgPSBhY3BpX3ZpZGVvX2J1c19nZXRfb25lX2RldmljZShkZXYsIHZpZGVvKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAotCQkJCQkiQ2FudCBhdHRhY2ggZGV2aWNlXG4iKTsKKwkJCQkJIkNhbid0IGF0dGFjaCBkZXZpY2VcbiIpOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC0xMzczLDcgKzEzNzMsNyBAQAogCQkJCQkgICAgYWNwaV92aWRlb19kZXZpY2Vfbm90aWZ5KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJICAgICAgICJDYW50IHJlbW92ZSB2aWRlbyBub3RpZnkgaGFuZGxlclxuIik7CisJCSAgICAgICAiQ2FuJ3QgcmVtb3ZlIHZpZGVvIG5vdGlmeSBoYW5kbGVyXG4iKTsKIAl9CiAJaWYgKGRldmljZS0+YmFja2xpZ2h0KSB7CiAJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UtPmJhY2tsaWdodCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVzLmMKaW5kZXggNmQyYmIyNS4uNzAyNTU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbWJhL2J1cy5jCisrKyBiL2RyaXZlcnMvYW1iYS9idXMuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1NVU1BFTkQgKi8KIAotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiAKIHN0YXRpYyBpbnQgYW1iYV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMzUyLDcgKzM1Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCiAKICNkZWZpbmUgYW1iYV9wbV9mcmVlemUJCU5VTEwKICNkZWZpbmUgYW1iYV9wbV90aGF3CQlOVUxMCkBAIC0zNjMsNyArMzYzLDcgQEAKICNkZWZpbmUgYW1iYV9wbV9wb3dlcm9mZl9ub2lycQlOVUxMCiAjZGVmaW5lIGFtYmFfcG1fcmVzdG9yZV9ub2lycQlOVUxMCiAKLSNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCisjZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCiAKICNpZmRlZiBDT05GSUdfUE0KIApAQCAtNzYwLDcgKzc2MCw3IEBACiB9CiAKIC8qKgotICoJYW1iYV9yZWxlYXNlX3JlZ2lvbnMgLSByZWxlYXNlIG1lbSByZWdpb25zIGFzc29pY2F0ZWQgd2l0aCBkZXZpY2UKKyAqCWFtYmFfcmVsZWFzZV9yZWdpb25zIC0gcmVsZWFzZSBtZW0gcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggZGV2aWNlCiAgKglAZGV2OiBhbWJhX2RldmljZSBzdHJ1Y3R1cmUgZm9yIGRldmljZQogICoKICAqCVJlbGVhc2UgcmVnaW9ucyBjbGFpbWVkIGJ5IGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGFtYmFfcmVxdWVzdF9yZWdpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGU2MmY2OTMuLjcxYWZlMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfTk9fRlBETUFfQUEgfCBBSENJX0hGTEFHX05PX1BNUCB8CiAJCQkJIEFIQ0lfSEZMQUdfWUVTX05DUSksCi0JCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAorCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiB8IEFUQV9GTEFHX05PX0RJUE0sCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCkBAIC0yNjEsNiArMjYxLDEyIEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDA2KSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjgyNiksIGJvYXJkX2FoY2kgfSwgLyogUEJHIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDIzMjMpLCBib2FyZF9haGNpIH0sIC8qIERIODl4eENDIEFIQ0kgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDIpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgQUhDSSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwMyksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTA0KSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDUpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwNiksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTA3KSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IFJBSUQgKi8KIAogCS8qIEpNaWNyb24gMzYwLzEvMy81LzYsIG1hdGNoIGNsYXNzIHRvIGF2b2lkIElERSBmdW5jdGlvbiAqLwogCXsgUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApAQCAtOTI2LDcgKzkzMiw3IEBACiAJCS8qCiAJCSAqIEFjZXIgZU1hY2hpbmVzIEc3MjUgaGFzIHRoZSBzYW1lIHByb2JsZW0uICBCSU9TCiAJCSAqIFYxLjAzIGlzIGtub3duIHRvIGJlIGJyb2tlbi4gIFYzLjA0IGlzIGtub3duIHRvCi0JCSAqIHdvcmsuICBJbmJldHdlZW4sIHRoZXJlIGFyZSBWMS4wNiwgVjIuMDYgYW5kIFYzLjAzCisJCSAqIHdvcmsuICBCZXR3ZWVuLCB0aGVyZSBhcmUgVjEuMDYsIFYyLjA2IGFuZCBWMy4wMwogCQkgKiB0aGF0IHdlIGRvbid0IGhhdmUgbXVjaCBpZGVhIGFib3V0LiAgRm9yIG5vdywKIAkJICogYmxhY2tsaXN0IGFueXRoaW5nIG9sZGVyIHRoYW4gVjMuMDQuCiAJCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmggYi9kcml2ZXJzL2F0YS9haGNpLmgKaW5kZXggY2NhZjA4MS4uMTJjNTI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5oCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuaApAQCAtMjI1LDEwICsyMjUsMTQgQEAKIAkvKiBlbV9jdGwgYml0cyAqLwogCUVNX0NUTF9SU1QJCT0gKDEgPDwgOSksIC8qIFJlc2V0ICovCiAJRU1fQ1RMX1RNCQk9ICgxIDw8IDgpLCAvKiBUcmFuc21pdCBNZXNzYWdlICovCi0JRU1fQ1RMX01SCQk9ICgxIDw8IDApLCAvKiBNZXNzYWdlIFJlY2lldmVkICovCisJRU1fQ1RMX01SCQk9ICgxIDw8IDApLCAvKiBNZXNzYWdlIFJlY2VpdmVkICovCiAJRU1fQ1RMX0FMSEQJCT0gKDEgPDwgMjYpLCAvKiBBY3Rpdml0eSBMRUQgKi8KIAlFTV9DVExfWE1UCQk9ICgxIDw8IDI1KSwgLyogVHJhbnNtaXQgT25seSAqLwogCUVNX0NUTF9TTUIJCT0gKDEgPDwgMjQpLCAvKiBTaW5nbGUgTWVzc2FnZSBCdWZmZXIgKi8KKwlFTV9DVExfU0dQSU8JCT0gKDEgPDwgMTkpLCAvKiBTR1BJTyBtZXNzYWdlcyBzdXBwb3J0ZWQgKi8KKwlFTV9DVExfU0VTCQk9ICgxIDw8IDE4KSwgLyogU0VTLTIgbWVzc2FnZXMgc3VwcG9ydGVkICovCisJRU1fQ1RMX1NBRlRFCQk9ICgxIDw8IDE3KSwgLyogU0FGLVRFIG1lc3NhZ2VzIHN1cHBvcnRlZCAqLworCUVNX0NUTF9MRUQJCT0gKDEgPDwgMTYpLCAvKiBMRUQgbWVzc2FnZXMgc3VwcG9ydGVkICovCiAKIAkvKiBlbSBtZXNzYWdlIHR5cGUgKi8KIAlFTV9NU0dfVFlQRV9MRUQJCT0gKDEgPDwgMCksIC8qIExFRCAqLwpAQCAtMjgxLDcgKzI4NSw3IEBACiB9OwogCiBzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgewotCXZvaWQgX19pb21lbSAqCQltbWlvOwkJLyogYnVzLWluZGVwZW5kYW50IG1lbSBtYXAgKi8KKwl2b2lkIF9faW9tZW0gKgkJbW1pbzsJCS8qIGJ1cy1pbmRlcGVuZGVudCBtZW0gbWFwICovCiAJdW5zaWduZWQgaW50CQlmbGFnczsJCS8qIEFIQ0lfSEZMQUdfKiAqLwogCXUzMgkJCWNhcDsJCS8qIGNhcCB0byB1c2UgKi8KIAl1MzIJCQljYXAyOwkJLyogY2FwMiB0byB1c2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCmluZGV4IGNkZWM0YWIuLjZmNmU3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwpAQCAtMzgsMTYgKzM4LDE2IEBACiAgKiAgSGFyZHdhcmUgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgYXQgaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vCiAgKgogICogRG9jdW1lbnRhdGlvbgotICoJUHVibGljYWxseSBhdmFpbGFibGUgZnJvbSBJbnRlbCB3ZWIgc2l0ZS4gRXJyYXRhIGRvY3VtZW50YXRpb24KLSAqIGlzIGFsc28gcHVibGljYWxseSBhdmFpbGFibGUuIEFzIGFuIGFpZGUgdG8gYW55b25lIGhhY2tpbmcgb24gdGhpcworICoJUHVibGljbHkgYXZhaWxhYmxlIGZyb20gSW50ZWwgd2ViIHNpdGUuIEVycmF0YSBkb2N1bWVudGF0aW9uCisgKiBpcyBhbHNvIHB1YmxpY2x5IGF2YWlsYWJsZS4gQXMgYW4gYWlkZSB0byBhbnlvbmUgaGFja2luZyBvbiB0aGlzCiAgKiBkcml2ZXIgdGhlIGxpc3Qgb2YgZXJyYXRhIHRoYXQgYXJlIHJlbGV2YW50IGlzIGJlbG93LCBnb2luZyBiYWNrIHRvCiAgKiBQSUlYNC4gT2xkZXIgZGV2aWNlIGRvY3VtZW50YXRpb24gaXMgbm93IGEgYml0IHRyaWNreSB0byBmaW5kLgogICoKICAqIFRoZSBjaGlwc2V0cyBhbGwgZm9sbG93IHZlcnkgbXVjaCB0aGUgc2FtZSBkZXNpZ24uIFRoZSBvcmlnaW5hbCBUcml0b24KLSAqIHNlcmllcyBjaGlwc2V0cyBkbyBfbm90XyBzdXBwb3J0IGluZGVwZW5kYW50IGRldmljZSB0aW1pbmdzLCBidXQgdGhpcworICogc2VyaWVzIGNoaXBzZXRzIGRvIF9ub3RfIHN1cHBvcnQgaW5kZXBlbmRlbnQgZGV2aWNlIHRpbWluZ3MsIGJ1dCB0aGlzCiAgKiBpcyBmaXhlZCBpbiBUcml0b24gSUkuIFdpdGggdGhlIG9kZCBtb2JpbGUgZXhjZXB0aW9uIHRoZSBjaGlwcyB0aGVuCiAgKiBjaGFuZ2UgbGl0dGxlIGV4Y2VwdCBpbiBnYWluaW5nIG1vcmUgbW9kZXMgdW50aWwgU0FUQSBhcnJpdmVzLiBUaGlzCi0gKiBkcml2ZXIgc3VwcG9ydHMgb25seSB0aGUgY2hpcHMgd2l0aCBpbmRlcGVuZGFudCB0aW1pbmcgKHRoYXQgaXMgdGhvc2UKKyAqIGRyaXZlciBzdXBwb3J0cyBvbmx5IHRoZSBjaGlwcyB3aXRoIGluZGVwZW5kZW50IHRpbWluZyAodGhhdCBpcyB0aG9zZQogICogd2l0aCBTSVRSRSBhbmQgdGhlIDB4NDQgdGltaW5nIHJlZ2lzdGVyKS4gU2VlIHBhdGFfb2xkcGlpeCBhbmQgcGF0YV9tcGlpeAogICogZm9yIHRoZSBlYXJseSBjaGlwIGRyaXZlcnMuCiAgKgpAQCAtMTIyLDcgKzEyMiw3IEBACiAJUDIJCQk9IDIsICAvKiBwb3J0IDIgKi8KIAlQMwkJCT0gMywgIC8qIHBvcnQgMyAqLwogCUlERQkJCT0gLTEsIC8qIElERSAqLwotCU5BCQkJPSAtMiwgLyogbm90IGF2YWxpYWJsZSAqLworCU5BCQkJPSAtMiwgLyogbm90IGF2YWlsYWJsZSAqLwogCVJWCQkJPSAtMywgLyogcmVzZXJ2ZWQgKi8KIAogCVBJSVhfQUhDSV9ERVZJQ0UJPSA2LApAQCAtMzA5LDYgKzMwOSwxNCBAQAogCXsgMHg4MDg2LCAweDFkMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAogCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKFBCRykgKi8KIAl7IDB4ODA4NiwgMHgxZDA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQYW50aGVyIFBvaW50KSAqLworCXsgMHg4MDg2LCAweDFlMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKFBhbnRoZXIgUG9pbnQpICovCisJeyAweDgwODYsIDB4MWUwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoUGFudGhlciBQb2ludCkgKi8KKwl7IDB4ODA4NiwgMHgxZTA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQYW50aGVyIFBvaW50KSAqLworCXsgMHg4MDg2LCAweDFlMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfMnBvcnRfc2F0YSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYWhjaS5jIGIvZHJpdmVycy9hdGEvbGliYWhjaS5jCmluZGV4IDI2ZDQ1MjMuLmQzOGM0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmFoY2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhaGNpLmMKQEAgLTEwOSw2ICsxMDksOCBAQAogc3RhdGljIHNzaXplX3QgYWhjaV9zdG9yZV9lbV9idWZmZXIoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfZW1fc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIAogc3RhdGljIERFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXBzLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXBzLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7CkBAIC0xMTYsNiArMTE4LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihhaGNpX3BvcnRfY21kLCBTX0lSVUdPLCBhaGNpX3Nob3dfcG9ydF9jbWQsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGVtX2J1ZmZlciwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIGFoY2lfcmVhZF9lbV9idWZmZXIsIGFoY2lfc3RvcmVfZW1fYnVmZmVyKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlbV9tZXNzYWdlX3N1cHBvcnRlZCwgU19JUlVHTywgYWhjaV9zaG93X2VtX3N1cHBvcnRlZCwgTlVMTCk7CiAKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphaGNpX3Nob3N0X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2xpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xpY3ksCkBAIC0xMjYsNiArMTI5LDcgQEAKIAkmZGV2X2F0dHJfYWhjaV9ob3N0X3ZlcnNpb24sCiAJJmRldl9hdHRyX2FoY2lfcG9ydF9jbWQsCiAJJmRldl9hdHRyX2VtX2J1ZmZlciwKKwkmZGV2X2F0dHJfZW1fbWVzc2FnZV9zdXBwb3J0ZWQsCiAJTlVMTAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFoY2lfc2hvc3RfYXR0cnMpOwpAQCAtMzQzLDYgKzM0NywyNCBAQAogCXJldHVybiBzaXplOwogfQogCitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfZW1fc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2hvc3QpOworCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5tbWlvOworCXUzMiBlbV9jdGw7CisKKwllbV9jdGwgPSByZWFkbChtbWlvICsgSE9TVF9FTV9DVEwpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMlcyVzJXNcbiIsCisJCSAgICAgICBlbV9jdGwgJiBFTV9DVExfTEVEID8gImxlZCAiIDogIiIsCisJCSAgICAgICBlbV9jdGwgJiBFTV9DVExfU0FGVEUgPyAic2FmLXRlICIgOiAiIiwKKwkJICAgICAgIGVtX2N0bCAmIEVNX0NUTF9TRVMgPyAic2VzLTIgIiA6ICIiLAorCQkgICAgICAgZW1fY3RsICYgRU1fQ1RMX1NHUElPID8gInNncGlvICIgOiAiIik7Cit9CisKIC8qKgogICoJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnIC0gU2F2ZSBhbmQgZml4dXAgaW5pdGlhbCBjb25maWcgdmFsdWVzCiAgKglAZGV2OiB0YXJnZXQgQUhDSSBkZXZpY2UKQEAgLTE4OTcsNyArMTkxOSwxNyBAQAogCWFoY2lfZW5hYmxlX2ZicyhhcCk7CiAKIAlwcC0+aW50cl9tYXNrIHw9IFBPUlRfSVJRX0JBRF9QTVA7Ci0Jd3JpdGVsKHBwLT5pbnRyX21hc2ssIHBvcnRfbW1pbyArIFBPUlRfSVJRX01BU0spOworCisJLyoKKwkgKiBXZSBtdXN0IG5vdCBjaGFuZ2UgdGhlIHBvcnQgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgaWYgdGhlCisJICogcG9ydCBpcyBtYXJrZWQgZnJvemVuLCB0aGUgdmFsdWUgaW4gcHAtPmludHJfbWFzayB3aWxsIGJlCisJICogcmVzdG9yZWQgbGF0ZXIgd2hlbiB0aGUgcG9ydCBpcyB0aGF3ZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB0aGUgcG9ydCBpcyBtYXJrZWQgYXMKKwkgKiBmcm96ZW4gc2luY2UgdGhlIGlycSBoYW5kbGVyIGlzIG5vdCB5ZXQgcmVnaXN0ZXJlZC4KKwkgKi8KKwlpZiAoIShhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTikpCisJCXdyaXRlbChwcC0+aW50cl9tYXNrLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgYWhjaV9wbXBfZGV0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0xOTEzLDcgKzE5NDUsMTAgQEAKIAl3cml0ZWwoY21kLCBwb3J0X21taW8gKyBQT1JUX0NNRCk7CiAKIAlwcC0+aW50cl9tYXNrICY9IH5QT1JUX0lSUV9CQURfUE1QOwotCXdyaXRlbChwcC0+aW50cl9tYXNrLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKKworCS8qIHNlZSBjb21tZW50IGFib3ZlIGluIGFoY2lfcG1wX2F0dGFjaCgpICovCisJaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pKQorCQl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CiB9CiAKIGludCBhaGNpX3BvcnRfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBiOTFlMTljLi43NmMzYzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQxMzksNiArNDEzOSw3IEBACiAJICovCiAJeyAiUElPTkVFUiBEVkQtUlcgIERWUlREMDgiLAkiMS4wMCIsCUFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAogCXsgIlBJT05FRVIgRFZELVJXICBEVlItMjEyRCIsCSIxLjI4IiwgQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCisJeyAiUElPTkVFUiBEVkQtUlcgIERWUi0yMTZEIiwJIjEuMDgiLCBBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAogCS8qIEVuZCBNYXJrZXIgKi8KIAl7IH0KQEAgLTUzNDAsNyArNTM0MSw3IEBACiAgKgogICoJUmVzdW1lIEBob3N0LiAgQWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgYnkgRUguICBUaGlzCiAgKglmdW5jdGlvbiByZXF1ZXN0cyBFSCB0byBwZXJmb3JtIFBNIG9wZXJhdGlvbnMgYW5kIHJldHVybnMuCi0gKglOb3RlIHRoYXQgYWxsIHJlc3VtZSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgcGFyYWxsZWx5LgorICoJTm90ZSB0aGF0IGFsbCByZXN1bWUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHBhcmFsbGVsbHkuCiAgKgogICoJTE9DS0lORzoKICAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKS4KQEAgLTU0ODAsNyArNTQ4MSw3IEBACiAJaWYgKCFhcCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlhcC0+cGZsYWdzIHw9IEFUQV9QRkxBR19JTklUSUFMSVpJTkc7CisJYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfSU5JVElBTElaSU5HIHwgQVRBX1BGTEFHX0ZST1pFTjsKIAlhcC0+bG9jayA9ICZob3N0LT5sb2NrOwogCWFwLT5wcmludF9pZCA9IC0xOwogCWFwLT5ob3N0ID0gaG9zdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggZGYzZjMxNC4uZGFkOWZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTc3MSw3ICs3NzEsNyBAQAogCQkvKiBwcm9jZXNzIHBvcnQgc3VzcGVuZCByZXF1ZXN0ICovCiAJCWF0YV9laF9oYW5kbGVfcG9ydF9zdXNwZW5kKGFwKTsKIAotCQkvKiBFeGNlcHRpb24gbWlnaHQgaGF2ZSBoYXBwZW5kIGFmdGVyIC0+ZXJyb3JfaGFuZGxlcgorCQkvKiBFeGNlcHRpb24gbWlnaHQgaGF2ZSBoYXBwZW5lZCBhZnRlciAtPmVycm9yX2hhbmRsZXIKIAkJICogcmVjb3ZlcmVkIHRoZSBwb3J0IGJ1dCBiZWZvcmUgdGhpcyBwb2ludC4gIFJlcGVhdAogCQkgKiBFSCBpbiBzdWNoIGNhc2UuCiAJCSAqLwpAQCAtMTc0Miw3ICsxNzQyLDcgQEAKICAqCiAgKglBbmFseXplIHRhc2tmaWxlIG9mIEBxYyBhbmQgZnVydGhlciBkZXRlcm1pbmUgY2F1c2Ugb2YKICAqCWZhaWx1cmUuICBUaGlzIGZ1bmN0aW9uIGFsc28gcmVxdWVzdHMgQVRBUEkgc2Vuc2UgZGF0YSBpZgotICoJYXZhbGlhYmxlLgorICoJYXZhaWxhYmxlLgogICoKICAqCUxPQ0tJTkc6CiAgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCkBAIC0xODkzLDcgKzE4OTMsNyBAQAogICoJICAgb2NjdXJyZWQgZHVyaW5nIGxhc3QgNSBtaW5zLCBOQ1FfT0ZGLgogICoKICAqCTMuIElmIG1vcmUgdGhhbiA4IEFUQV9CVVMsIFRPVVRfSFNNIG9yIFVOS19ERVYgZXJyb3JzCi0gKgkgICBvY3VycmVkIGR1cmluZyBsYXN0IDUgbWlucywgRkFMTEJBQ0tfVE9fUElPCisgKgkgICBvY2N1cnJlZCBkdXJpbmcgbGFzdCA1IG1pbnMsIEZBTExCQUNLX1RPX1BJTwogICoKICAqCTQuIElmIG1vcmUgdGhhbiAzIFRPVVRfSFNNIG9yIFVOS19ERVYgZXJyb3JzIG9jY3VycmVkCiAgKgkgICBkdXJpbmcgbGFzdCAxMCBtaW5zLCBOQ1FfT0ZGLgpAQCAtMjU3Nyw3ICsyNTc3LDcgQEAKIAlpZiAobGluay0+ZmxhZ3MgJiBBVEFfTEZMQUdfTk9fU1JTVCkKIAkJc29mdHJlc2V0ID0gTlVMTDsKIAotCS8qIG1ha2Ugc3VyZSBlYWNoIHJlc2V0IGF0dGVtcCBpcyBhdCBsZWFzdCBDT09MX0RPV04gYXBhcnQgKi8KKwkvKiBtYWtlIHN1cmUgZWFjaCByZXNldCBhdHRlbXB0IGlzIGF0IGxlYXN0IENPT0xfRE9XTiBhcGFydCAqLwogCWlmIChlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX0RJRF9SRVNFVCkgewogCQlub3cgPSBqaWZmaWVzOwogCQlXQVJOX09OKHRpbWVfYWZ0ZXIoZWhjLT5sYXN0X3Jlc2V0LCBub3cpKTsKQEAgLTI3MzYsNyArMjczNiw3IEBACiAJCQlpZiAoIXJlc2V0KSB7CiAJCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fRVJSLAogCQkJCQkJImZvbGxvdy11cCBzb2Z0cmVzZXQgcmVxdWlyZWQgIgotCQkJCQkJImJ1dCBubyBzb2Z0cmVzZXQgYXZhbGlhYmxlXG4iKTsKKwkJCQkJCSJidXQgbm8gc29mdHJlc2V0IGF2YWlsYWJsZVxuIik7CiAJCQkJZmFpbGVkX2xpbmsgPSBsaW5rOwogCQkJCXJjID0gLUVJTlZBTDsKIAkJCQlnb3RvIGZhaWw7CkBAIC0zMzE2LDYgKzMzMTYsNyBAQAogCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmxpbmstPmVoX2NvbnRleHQ7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgKmxpbmtfZGV2ID0gTlVMTCwgKmxwbV9kZXYgPSBOVUxMOwogCWVudW0gYXRhX2xwbV9wb2xpY3kgb2xkX3BvbGljeSA9IGxpbmstPmxwbV9wb2xpY3k7CisJYm9vbCBub19kaXBtID0gbGluay0+YXAtPmZsYWdzICYgQVRBX0ZMQUdfTk9fRElQTTsKIAl1bnNpZ25lZCBpbnQgaGludHMgPSBBVEFfTFBNX0VNUFRZIHwgQVRBX0xQTV9ISVBNOwogCXVuc2lnbmVkIGludCBlcnJfbWFzazsKIAlpbnQgcmM7CkBAIC0zMzMyLDcgKzMzMzMsNyBAQAogCSAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CiAJCWJvb2wgaGlwbSA9IGF0YV9pZF9oYXNfaGlwbShkZXYtPmlkKTsKLQkJYm9vbCBkaXBtID0gYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpOworCQlib29sIGRpcG0gPSBhdGFfaWRfaGFzX2RpcG0oZGV2LT5pZCkgJiYgIW5vX2RpcG07CiAKIAkJLyogZmluZCB0aGUgZmlyc3QgZW5hYmxlZCBhbmQgTFBNIGVuYWJsZWQgZGV2aWNlcyAqLwogCQlpZiAoIWxpbmtfZGV2KQpAQCAtMzM4OSw3ICszMzkwLDggQEAKIAogCS8qIGhvc3QgY29uZmlnIHVwZGF0ZWQsIGVuYWJsZSBESVBNIGlmIHRyYW5zaXRpb25pbmcgdG8gTUlOX1BPV0VSICovCiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKLQkJaWYgKHBvbGljeSA9PSBBVEFfTFBNX01JTl9QT1dFUiAmJiBhdGFfaWRfaGFzX2RpcG0oZGV2LT5pZCkpIHsKKwkJaWYgKHBvbGljeSA9PSBBVEFfTFBNX01JTl9QT1dFUiAmJiAhbm9fZGlwbSAmJgorCQkgICAgYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpKSB7CiAJCQllcnJfbWFzayA9IGF0YV9kZXZfc2V0X2ZlYXR1cmUoZGV2LAogCQkJCQlTRVRGRUFUVVJFU19TQVRBX0VOQUJMRSwgU0FUQV9ESVBNKTsKIAkJCWlmIChlcnJfbWFzayAmJiBlcnJfbWFzayAhPSBBQ19FUlJfREVWKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCBhODM0MTk5Li5lMmY1N2U5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC05OTksNyArOTk5LDcgQEAKICAqCUBxYzogQ29tbWFuZCB0aGF0IHdlIGFyZSBlcnJvcmluZyBvdXQKICAqCiAgKglHZW5lcmF0ZSBzZW5zZSBibG9jayBmb3IgYSBmYWlsZWQgQVRBIGNvbW1hbmQgQHFjLiAgRGVzY3JpcHRvcgotICoJZm9ybWF0IGlzIHVzZWQgdG8gYWNjb21vZGF0ZSBMQkE0OCBibG9jayBhZGRyZXNzLgorICoJZm9ybWF0IGlzIHVzZWQgdG8gYWNjb21tb2RhdGUgTEJBNDggYmxvY2sgYWRkcmVzcy4KICAqCiAgKglMT0NLSU5HOgogICoJTm9uZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCBjZjdhY2JjLi5mODM4MGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC0yODM5LDcgKzI4MzksNyBAQAogCQlibWRtYV9zdG9wcGVkID0gdHJ1ZTsKIAogCQlpZiAodW5saWtlbHkoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7Ci0JCQkvKiBlcnJvciB3aGVuIHRyYW5zZmVyaW5nIGRhdGEgdG8vZnJvbSBtZW1vcnkgKi8KKwkJCS8qIGVycm9yIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgdG8vZnJvbSBtZW1vcnkgKi8KIAkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSE9TVF9CVVM7CiAJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOwogCQl9CkBAIC0zMDMyLDcgKzMwMzIsNyBAQAogCSAqIE9yIG1heWJlIEknbSBqdXN0IGJlaW5nIHBhcmFub2lkLgogCSAqCiAJICogRklYTUU6IFRoZSBwb3N0aW5nIG9mIHRoaXMgd3JpdGUgbWVhbnMgSS9PIHN0YXJ0cyBhcmUKLQkgKiB1bm5lY2Nlc3NhcmlseSBkZWxheWVkIGZvciBNTUlPCisJICogdW5uZWNlc3NhcmlseSBkZWxheWVkIGZvciBNTUlPCiAJICovCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfYm1kbWFfc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKaW5kZXggNjIwYTA3Yy4uYjA5NzVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKglQb3dlciBtYW5hZ2VtZW50IG9uIHBvcnRzCiAgKgogICoKLSAqICBEb2N1bWVudGF0aW9uIHB1YmxpY2FsbHkgYXZhaWxhYmxlLgorICogIERvY3VtZW50YXRpb24gcHVibGljbHkgYXZhaWxhYmxlLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXJhc2FuX2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FyYXNhbl9jZi5jCmluZGV4IDY1Y2VlNzQuLjcxOWJiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXJhc2FuX2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hcmFzYW5fY2YuYwpAQCAtMzg1LDcgKzM4NSw3IEBACiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAotCS8qIENoZWNrIGlmIFBJTyBFcnJvciBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQgKi8KKwkvKiBDaGVjayBpZiBQSU8gRXJyb3IgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLwogCWlmIChhY2Rldi0+ZG1hX3N0YXR1cyAmIEFUQV9ETUFfRVJSKQogCQlyZXR1cm4gLUVBR0FJTjsKIApAQCAtNDUwLDcgKzQ1MCw3IEBACiAJLyoKIAkgKiBGb3IgZWFjaCBzZzoKIAkgKiBNQVhfWEZFUl9DT1VOVCBkYXRhIHdpbGwgYmUgdHJhbnNmZXJyZWQgYmVmb3JlIHdlIGdldCB0cmFuc2ZlcgotCSAqIGNvbXBsZXRlIGludGVycnVwdC4gSW5iZXR3ZWVuIGFmdGVyIEZJRk9fU0laRSBkYXRhCisJICogY29tcGxldGUgaW50ZXJydXB0LiBCZXR3ZWVuIGFmdGVyIEZJRk9fU0laRSBkYXRhCiAJICogYnVmZmVyIGF2YWlsYWJsZSBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuIEF0IHRoaXMgdGltZSB3ZSB3aWxsCiAJICogZmlsbCBGSUZPIGFnYWluOiBtYXggRklGT19TSVpFIGRhdGEuCiAJICovCkBAIC00NjMsNyArNDYzLDcgQEAKIAkJCQlhY2Rldi0+dmJhc2UgKyBYRkVSX0NUUik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjZGV2LT5ob3N0LT5sb2NrLCBmbGFncyk7CiAKLQkJLyogY29udGludWUgZG1hIHhmZXJzIHVudGlsbCBjdXJyZW50IHNnIGlzIGNvbXBsZXRlZCAqLworCQkvKiBjb250aW51ZSBkbWEgeGZlcnMgdW50aWwgY3VycmVudCBzZyBpcyBjb21wbGV0ZWQgKi8KIAkJd2hpbGUgKHhmZXJfY250KSB7CiAJCQkvKiB3YWl0IGZvciByZWFkIHRvIGNvbXBsZXRlICovCiAJCQlpZiAoIXdyaXRlKSB7CkBAIC01NjMsNyArNTYzLDcgQEAKIAogY2hhbl9yZXF1ZXN0X2ZhaWw6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFjZGV2LT5ob3N0LT5sb2NrLCBmbGFncyk7Ci0JLyogZXJyb3Igd2hlbiB0cmFuc2ZlcmluZyBkYXRhIHRvL2Zyb20gbWVtb3J5ICovCisJLyogZXJyb3Igd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSB0by9mcm9tIG1lbW9yeSAqLwogCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSE9TVF9CVVM7CiAJcWMtPmFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdDkxLmMKaW5kZXggMGRhMGRjYy4uYTVmZGJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdDkxLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdDkxLmMKQEAgLTMzLDExICszMywxMiBAQAogCiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfYXQ5MSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMiIKIAogI2RlZmluZSBDRl9JREVfT0ZGU0VUCSAgICAweDAwYzAwMDAwCiAjZGVmaW5lIENGX0FMVF9JREVfT0ZGU0VUICAgMHgwMGUwMDAwMAogI2RlZmluZSBDRl9JREVfUkVTX1NJWkUgICAgIDB4MDgKKyNkZWZpbmUgTkNTX1JEX1BVTFNFX0xJTUlUICAweDNmIC8qIG1heGltYWwgdmFsdWUgZm9yIHB1bHNlIGJpdGZpZWxkcyAqLwogCiBzdHJ1Y3QgYXQ5MV9pZGVfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtb2RlOwpAQCAtNDksOCArNTAsMTggQEAKIAl2b2lkIF9faW9tZW0gKmFsdF9hZGRyOwogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfdGltaW5nIGluaXRpYWxfdGltaW5nID0KLQl7WEZFUl9QSU9fMCwgNzAsIDI5MCwgMjQwLCA2MDAsIDE2NSwgMTUwLCA2MDAsIDB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfdGltaW5nIGluaXRpYWxfdGltaW5nID0geworCS5tb2RlCQk9IFhGRVJfUElPXzAsCisJLnNldHVwCQk9IDcwLAorCS5hY3Q4YgkJPSAyOTAsCisJLnJlYzhiCQk9IDI0MCwKKwkuY3ljOGIJCT0gNjAwLAorCS5hY3RpdmUJCT0gMTY1LAorCS5yZWNvdmVyCT0gMTUwLAorCS5kbWFja19ob2xkCT0gMCwKKwkuY3ljbGUJCT0gNjAwLAorCS51ZG1hCQk9IDAKK307CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfbWNrX2N5Y2xlcyh1bnNpZ25lZCBsb25nIG5zLCB1bnNpZ25lZCBsb25nIG1ja19oeikKIHsKQEAgLTEwOSw2ICsxMjAsMTEgQEAKIAkvKiAoQ1MwLCBDUzEsIERJUiwgT0UpIDw9IChDRkNFMSwgQ0ZDRTIsIENGUk5XLCBOQ1NYKSB0aW1pbmdzICovCiAJbmNzX3JlYWRfc2V0dXAgPSAxOwogCW5jc19yZWFkX3B1bHNlID0gcmVhZF9jeWNsZSAtIDI7CisJaWYgKG5jc19yZWFkX3B1bHNlID4gTkNTX1JEX1BVTFNFX0xJTUlUKSB7CisJCW5jc19yZWFkX3B1bHNlID0gTkNTX1JEX1BVTFNFX0xJTUlUOworCQlkZXZfd2FybihkZXYsICJuY3NfcmVhZF9wdWxzZSBsaW1pdGVkIHRvIG1heGltYWwgdmFsdWUgJWx1XG4iLAorCQkJbmNzX3JlYWRfcHVsc2UpOworCX0KIAogCS8qIFdyaXRlIHRpbWluZ3Mgc2FtZSBhcyByZWFkIHRpbWluZ3MgKi8KIAl3cml0ZV9jeWNsZSA9IHJlYWRfY3ljbGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggZTBiNThiOC4uZWE2NDk2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwpAQCAtMTM0Miw3ICsxMzQyLDcgQEAKIAkJCWFwLT5vcHMtPmJtZG1hX3N0b3AocWMpOwogCiAJCQlpZiAodW5saWtlbHkoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7Ci0JCQkJLyogZXJyb3Igd2hlbiB0cmFuc2ZlcmluZyBkYXRhIHRvL2Zyb20gbWVtb3J5ICovCisJCQkJLyogZXJyb3Igd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSB0by9mcm9tIG1lbW9yeSAqLwogCQkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSE9TVF9CVVM7CiAJCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0VSUjsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCmluZGV4IDAzMDk1MmYuLmUzMjU0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwpAQCAtMjksNyArMjksNyBAQAogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIERvY3VtZW50YXRpb246Ci0gKglOb3QgcHVibGljYWxseSBhdmFpbGFibGUuCisgKglOb3QgcHVibGljbHkgYXZhaWxhYmxlLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKaW5kZXggYjIxZjAwMi4uZDhkOWM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYwpAQCAtMTUsNyArMTUsNyBAQAogICogd2l0aCBQQ0kgSURFIGFuZCBhbHNvIHRoYXQgd2UgZG8gbm90IGRpc2FibGUgdGhlIGRldmljZSB3aGVuIG91ciBkcml2ZXIgaXMKICAqIHVubG9hZGVkIChhcyBpdCBoYXMgbWFueSBvdGhlciBmdW5jdGlvbnMpLgogICoKLSAqIFRoZSBkcml2ZXIgY29uY2lvdXNseSBrZWVwcyB0aGlzIGxvZ2ljIGludGVybmFsbHkgdG8gYXZvaWQgcHVzaGluZyBxdWlya3kKKyAqIFRoZSBkcml2ZXIgY29uc2Npb3VzbHkga2VlcHMgdGhpcyBsb2dpYyBpbnRlcm5hbGx5IHRvIGF2b2lkIHB1c2hpbmcgcXVpcmt5CiAgKiBQQVRBIGhpc3RvcnkgaW50byB0aGUgY2xlYW4gbGliYXRhIGxheWVyLgogICoKICAqIFRoaW5rcGFkIHNwZWNpZmljIG5vdGU6IElmIHlvdSBib290IGFuIE1QSUlYIHVzaW5nIGEgdGhpbmtwYWQgd2l0aCBhIFBDTUNJQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKaW5kZXggNGE0NTRhOC4uNGQwNDQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCS8qIElmIHRoaXMgZmFpbHMgb24gcmVzdW1lICh3aGljaCBpcyBhICJjYW50IGhhcHBlbiIgY2FzZSksIHdlCisJLyogSWYgdGhpcyBmYWlscyBvbiByZXN1bWUgKHdoaWNoIGlzIGEgImNhbid0IGhhcHBlbiIgY2FzZSksIHdlCiAJICAgbXVzdCBzdG9wIGFzIGFueSBwcm9ncmVzcyByaXNrcyBkYXRhIGxvc3MgKi8KIAlpZiAocnoxMDAwX2ZpZm9fZGlzYWJsZShwZGV2KSkKIAkJcGFuaWMoInJ6MTAwMCBmaWZvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwppbmRleCAwMGVlZmJkLi4xMTg3ODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAgKiAgTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKgotICogIERvY3VtZW50YXRpb24gcHVibGljYWxseSBhdmFpbGFibGUuCisgKiAgRG9jdW1lbnRhdGlvbiBwdWJsaWNseSBhdmFpbGFibGUuCiAgKgogICoJSWYgeW91IGhhdmUgc3RyYW5nZSBwcm9ibGVtcyB3aXRoIG5WaWRpYSBjaGlwc2V0IHN5c3RlbXMgcGxlYXNlCiAgKglzZWUgdGhlIFNJIHN1cHBvcnQgZG9jdW1lbnRhdGlvbiBhbmQgdXBkYXRlIHlvdXIgc3lzdGVtIEJJT1MKQEAgLTQzLDcgKzQzLDcgQEAKICAqCiAgKglUdXJuIGEgY29uZmlnIHJlZ2lzdGVyIG9mZnNldCBpbnRvIHRoZSByaWdodCBhZGRyZXNzIGluIGVpdGhlcgogICoJUENJIHNwYWNlIG9yIE1NSU8gc3BhY2UgdG8gYWNjZXNzIHRoZSBjb250cm9sIHJlZ2lzdGVyIGluIHF1ZXN0aW9uCi0gKglUaGFua2Z1bGx5IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbiBzbyBpc250IHBlcmZvcm1hbmNlCisgKglUaGFua2Z1bGx5IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbiBzbyBpc24ndCBwZXJmb3JtYW5jZQogICoJY3JpdGljaWFsLgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCmluZGV4IGMwNGFiYzMuLmJlMDhmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiAKIAlpZiAoYWRldi0+ZG1hX21vZGUgPCBYRkVSX1VETUFfMCkgewogCQkvKiBiaXRzIDMtMCBob2xkIHJlY292ZXJ5IHRpbWluZyBiaXRzIDgtMTAgYWN0aXZlIHRpbWluZyBhbmQKLQkJICAgdGhlIGhpZ2hlciBiaXRzIGFyZSBkZXBlbmRhbnQgb24gdGhlIGRldmljZSAqLworCQkgICB0aGUgaGlnaGVyIGJpdHMgYXJlIGRlcGVuZGVudCBvbiB0aGUgZGV2aWNlICovCiAJCXRpbWluZyAmPSB+MHg4NzBGOwogCQl0aW1pbmcgfD0gbXdkbWFfYml0c1tzcGVlZF07CiAJfSBlbHNlIHsKQEAgLTM3MSw3ICszNzEsNyBAQAogCiAJaWYgKGFkZXYtPmRtYV9tb2RlIDwgWEZFUl9VRE1BXzApIHsKIAkJLyogYml0cyAzLTAgaG9sZCByZWNvdmVyeSB0aW1pbmcgYml0cyA4LTEwIGFjdGl2ZSB0aW1pbmcgYW5kCi0JCSAgIHRoZSBoaWdoZXIgYml0cyBhcmUgZGVwZW5kYW50IG9uIHRoZSBkZXZpY2UsIGJpdCAxNSB1ZG1hICovCisJCSAgIHRoZSBoaWdoZXIgYml0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBkZXZpY2UsIGJpdCAxNSB1ZG1hICovCiAJCXRpbWluZyAmPSB+MHg4NzBGOwogCQl0aW1pbmcgfD0gbXdkbWFfYml0c1tzcGVlZF07CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKaW5kZXggMGQxZjg5ZS4uMDNiNmQ2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKQEAgLTMwLDcgKzMwLDcgQEAKICAqIExvb3NlbHkgYmFzZWQgb24gdGhlIHBpaXggJiBzdndrcyBkcml2ZXJzLgogICoKICAqIERvY3VtZW50YXRpb246Ci0gKglOb3QgcHVibGljYWxseSBhdmFpbGFibGUuCisgKglOb3QgcHVibGljbHkgYXZhaWxhYmxlLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCmluZGV4IDBmOTFlNTguLjM1YTcxZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAJLyoKIAkgKiBTQVRBLUZTTCBob3N0IGNvbnRyb2xsZXIgc3VwcG9ydHMgYSBtYXguIG9mICgxNSsxKSBkaXJlY3QgUFJERXMsIGFuZAotCSAqIGNoYWluZWQgaW5kaXJlY3QgUFJERXMgdXB0byBhIG1heCBjb3VudCBvZiA2My4KKwkgKiBjaGFpbmVkIGluZGlyZWN0IFBSREVzIHVwIHRvIGEgbWF4IGNvdW50IG9mIDYzLgogCSAqIFdlIGFyZSBhbGxvY2F0aW5nIGFuIGFycmF5IG9mIDYzIFBSREVzIGNvbnRpZ3VvdXNseSwgYnV0IFBSREUjMTUgd2lsbAogCSAqIGJlIHNldHVwIGFzIGFuIGluZGlyZWN0IGRlc2NyaXB0b3IsIHBvaW50aW5nIHRvIGl0J3MgbmV4dAogCSAqIChjb250aWd1b3VzKSBQUkRFLiBUaG91Z2ggY2hhaW5lZCBpbmRpcmVjdCBQUkRFIGFycmF5cyBhcmUKQEAgLTkwNyw3ICs5MDcsNyBAQAogCWF0YV9tc2xlZXAoYXAsIDEpOwogCiAJLyoKLQkgKiBTQVRBIGRldmljZSBlbnRlcnMgcmVzZXQgc3RhdGUgYWZ0ZXIgcmVjZXZpbmcgYSBDb250cm9sIHJlZ2lzdGVyCisJICogU0FUQSBkZXZpY2UgZW50ZXJzIHJlc2V0IHN0YXRlIGFmdGVyIHJlY2VpdmluZyBhIENvbnRyb2wgcmVnaXN0ZXIKIAkgKiBGSVMgd2l0aCBTUlNUIGJpdCBhc3NlcnRlZCBhbmQgaXQgYXdhaXRzIGFub3RoZXIgSDJEIENvbnRyb2wgcmVnLgogCSAqIEZJUyB3aXRoIFNSU1QgYml0IGNsZWFyZWQsIHRoZW4gdGhlIGRldmljZSBkb2VzIGludGVybmFsIGRpYWdzICYKIAkgKiBpbml0aWFsaXphdGlvbiwgZm9sbG93ZWQgYnkgaW5kaWNhdGluZyBpdCdzIGluaXRpYWxpemF0aW9uIHN0YXR1cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IGNkNDA2NTEuLmI1MmMwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEzNTIsNyArMTM1Miw3IEBACiAJCQkvKgogCQkJICogV29ya2Fyb3VuZCBmb3IgODhTWDYweDEgRkVyIFNBVEEjMjY6CiAJCQkgKgotCQkJICogQ09NUkVTRVRzIGhhdmUgdG8gdGFrZSBjYXJlIG5vdCB0byBhY2NpZGVudGx5CisJCQkgKiBDT01SRVNFVHMgaGF2ZSB0byB0YWtlIGNhcmUgbm90IHRvIGFjY2lkZW50YWxseQogCQkJICogcHV0IHRoZSBkcml2ZSB0byBzbGVlcCB3aGVuIHdyaXRpbmcgU0NSX0NPTlRST0wuCiAJCQkgKiBTZXR0aW5nIGJpdHMgMTIuLjE1IHByZXZlbnRzIHRoaXMgcHJvYmxlbS4KIAkJCSAqCkBAIC0yMDQ0LDcgKzIwNDQsNyBAQAogCiAJY3cgPSAmcHAtPmNycWJbaW5faW5kZXhdLmF0YV9jbWRbMF07CiAKLQkvKiBTYWRseSwgdGhlIENSUUIgY2Fubm90IGFjY29tb2RhdGUgYWxsIHJlZ2lzdGVycy0tdGhlcmUgYXJlCisJLyogU2FkbHksIHRoZSBDUlFCIGNhbm5vdCBhY2NvbW1vZGF0ZSBhbGwgcmVnaXN0ZXJzLS10aGVyZSBhcmUKIAkgKiBvbmx5IDExIGJ5dGVzLi4uc28gd2UgbXVzdCBwaWNrIGFuZCBjaG9vc2UgcmVxdWlyZWQKIAkgKiByZWdpc3RlcnMgYmFzZWQgb24gdGhlIGNvbW1hbmQuICBTbywgd2UgZHJvcCBmZWF0dXJlIGFuZAogCSAqIGhvYl9mZWF0dXJlIGZvciBbUlddIERNQSBjb21tYW5kcywgYnV0IHRoZXkgYXJlIG5lZWRlZCBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCA0MjM0NGUzLi5mMTczZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0yMTIxLDcgKzIxMjEsNyBAQAogCiAJaG9zdF9zdGF0ID0gYXAtPm9wcy0+Ym1kbWFfc3RhdHVzKGFwKTsKIAlpZiAodW5saWtlbHkoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7Ci0JCS8qIGVycm9yIHdoZW4gdHJhbnNmZXJpbmcgZGF0YSB0by9mcm9tIG1lbW9yeSAqLworCQkvKiBlcnJvciB3aGVuIHRyYW5zZmVycmluZyBkYXRhIHRvL2Zyb20gbWVtb3J5ICovCiAJCWF0YV9laGlfY2xlYXJfZGVzYyhlaGkpOwogCQlhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJCTURNQSBzdGF0IDB4JXgiLCBob3N0X3N0YXQpOwogCQllaGktPmVycl9tYXNrIHw9IEFDX0VSUl9IT1NUX0JVUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCmluZGV4IDIxMjQyYzUuLjU0NDM0ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwpAQCAtNTgyLDcgKzU4Miw3IEBACiAJICogV2hlbiBob3N0IGlzc3VlcyBIT0xELCBkZXZpY2UgbWF5IHNlbmQgdXAgdG8gMjBEVyBvZiBkYXRhCiAJICogYmVmb3JlIGFja25vd2xlZGdpbmcgaXQgd2l0aCBIT0xEQSBhbmQgdGhlIGhvc3Qgc2hvdWxkIGJlCiAJICogYWJsZSB0byBidWZmZXIgdGhlbSBpbiBGSUZPLiAgVW5mb3J0dW5hdGVseSwgc29tZSBXRCBkcml2ZXMKLQkgKiBzZW5kIHVwdG8gNDBEVyBiZWZvcmUgYWNrbm93bGVkZ2luZyBIT0xEIGFuZCwgaW4gdGhlCisJICogc2VuZCB1cCB0byA0MERXIGJlZm9yZSBhY2tub3dsZWRnaW5nIEhPTEQgYW5kLCBpbiB0aGUKIAkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHRoaXMgZW5kcyB1cCBvdmVyZmxvd2luZyB2dDY0MjEncwogCSAqIEZJRk8sIG1ha2luZyB0aGUgY29udHJvbGxlciBhYm9ydCB0aGUgdHJhbnNhY3Rpb24gd2l0aAogCSAqIFJfRVJSLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jIGIvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCmluZGV4IDlmNDdlODYuLmE1ZmNiMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYworKysgYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCSAgLy8gVkMgbGF5ZXIgc3RhdHMKIAkgIGF0b21pY19pbmMoJmF0bV92Y2MtPnN0YXRzLT5yeCk7CiAJICBfX25ldF90aW1lc3RhbXAoc2tiKTsKLQkgIC8vIGVuZCBvZiBvdXIgcmVzcG9uc2FiaWxpdHkKKwkgIC8vIGVuZCBvZiBvdXIgcmVzcG9uc2liaWxpdHkKIAkgIGF0bV92Y2MtPnB1c2ggKGF0bV92Y2MsIHNrYik7CiAJICByZXR1cm47CiAJICAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwppbmRleCAwNDk2NTBkLi5lZjdhNjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKKysrIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCkBAIC0xNzgyLDcgKzE3ODIsNyBAQAogCQl3cml0ZV9mcyAoZGV2LCBSQVMwLCBSQVMwX0RDRF9YSExUIAogCQkJICB8ICgoKDEgPDwgRlMxNTVfVlBJX0JJVFMpIC0gMSkgKiBSQVMwX1ZQU0VMKQogCQkJICB8ICgoKDEgPDwgRlMxNTVfVkNJX0JJVFMpIC0gMSkgKiBSQVMwX1ZDU0VMKSk7Ci0JCS8qIFdlIGNhbiBjaG9zZSB0aGUgc3BsaXQgYXJiaXRhcmlseS4gV2UgbWlnaHQgYmUgYWJsZSB0byAKKwkJLyogV2UgY2FuIGNob3NlIHRoZSBzcGxpdCBhcmJpdHJhcmlseS4gV2UgbWlnaHQgYmUgYWJsZSB0byAKIAkJICAgc3VwcG9ydCBtb3JlLiBXaGF0ZXZlci4gVGhpcyBzaG91bGQgZG8gZm9yIG5vdy4gKi8KIAkJZGV2LT5hdG1fZGV2LT5jaV9yYW5nZS52cGlfYml0cyA9IEZTMTU1X1ZQSV9CSVRTOwogCQlkZXYtPmF0bV9kZXYtPmNpX3JhbmdlLnZjaV9iaXRzID0gRlMxNTVfVkNJX0JJVFM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuaAppbmRleCA3Zjk3YzA5Li5iYTM0YTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oCisrKyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmgKQEAgLTI2Myw3ICsyNjMsNyBAQAogfSBvcGNvZGVfdDsKIAogCi0vKiB2aXJ0dWFsIHBhdGggLyB2aXJ0dWFsIGNoYW5uZWwgaWRlbnRpZmVycyAqLworLyogdmlydHVhbCBwYXRoIC8gdmlydHVhbCBjaGFubmVsIGlkZW50aWZpZXJzICovCiAKIHR5cGVkZWYgc3RydWN0IHZwdmMgewogICAgIEJJVEZJRUxEMygKQEAgLTkyNiw3ICs5MjYsNyBAQAogCiAjZGVmaW5lIFBDQTIwMEVfUENJX0xBVEVOQ1kgICAgICAweDQwICAgIC8qIG1heGltdW0gc2xhdmUgbGF0ZW50eSAgICAgICAgICAgICovCiAjZGVmaW5lIFBDQTIwMEVfUENJX01BU1RFUl9DVFJMICAweDQxICAgIC8qIG1hc3RlciBjb250cm9sICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBDQTIwMEVfUENJX1RIUkVTSE9MRCAgICAweDQyICAgIC8qIGJ1cnN0IC8gY29udGlub3VzIHJlcSB0aHJlc2hvbGQgICovCisjZGVmaW5lIFBDQTIwMEVfUENJX1RIUkVTSE9MRCAgICAweDQyICAgIC8qIGJ1cnN0IC8gY29udGludW91cyByZXEgdGhyZXNob2xkICAqLwogCiAvKiBQQkkgbWFzdGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDI0NzYxZTEuLmQ1OGUzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTE2OSwxMyArMTY5LDEzIEBACiAgIFJlYWwgVGltZSAoY2R2IGFuZCBtYXggQ0RUIGdpdmVuKQogICAKICAgQ0JSKHBjcikgICAgICAgICAgICAgcGNyIGJhbmR3aWR0aCBhbHdheXMgYXZhaWxhYmxlCi0gIHJ0VkJSKHBjcixzY3IsbWJzKSAgIHNjciBiYW5kd2lkdGggYWx3YXlzIGF2YWlsYWJsZSwgdXB0byBwY3IgYXQgbWJzIHRvbworICBydFZCUihwY3Isc2NyLG1icykgICBzY3IgYmFuZHdpZHRoIGFsd2F5cyBhdmFpbGFibGUsIHVwIHRvIHBjciBhdCBtYnMgdG9vCiAgIAogICBOb24gUmVhbCBUaW1lCiAgIAotICBucnRWQlIocGNyLHNjcixtYnMpICBzY3IgYmFuZHdpZHRoIGFsd2F5cyBhdmFpbGFibGUsIHVwdG8gcGNyIGF0IG1icyB0b28KKyAgbnJ0VkJSKHBjcixzY3IsbWJzKSAgc2NyIGJhbmR3aWR0aCBhbHdheXMgYXZhaWxhYmxlLCB1cCB0byBwY3IgYXQgbWJzIHRvbwogICBVQlIoKQotICBBQlIobWNyLHBjcikgICAgICAgICBtY3IgYmFuZHdpZHRoIGFsd2F5cyBhdmFpbGFibGUsIHVwdG8gcGNyIChkZXBlbmRpbmcpIHRvbworICBBQlIobWNyLHBjcikgICAgICAgICBtY3IgYmFuZHdpZHRoIGFsd2F5cyBhdmFpbGFibGUsIHVwIHRvIHBjciAoZGVwZW5kaW5nKSB0b28KICAgCiAgIG1icyBpcyBtYXggYnVyc3Qgc2l6ZSAoYnVja2V0KQogICBwY3IgYW5kIHNjciBoYXZlIGFzc29jaWF0ZWQgY2R2dCB2YWx1ZXMKQEAgLTk0NCw3ICs5NDQsNyBAQAogLy8gdG8gYmUgZml4ZWQgc29vbiwgc28gZG8gbm90IGRlZmluZSBUQUlMUkVDVVNSSU9OV09SS1MgdW5sZXNzIHlvdQogLy8gYXJlIHN1cmUgaXQgZG9lcyBhcyB5b3UgbWF5IG90aGVyd2lzZSBvdmVyZmxvdyB0aGUga2VybmVsIHN0YWNrLgogCi0vLyBnaXZpbmcgdGhpcyBmbiBhIHJldHVybiB2YWx1ZSB3b3VsZCBoZWxwIEdDQywgYWxsZWRnZWRseQorLy8gZ2l2aW5nIHRoaXMgZm4gYSByZXR1cm4gdmFsdWUgd291bGQgaGVscCBHQ0MsIGFsbGVnZWRseQogCiBzdGF0aWMgdm9pZCByeF9zY2hlZHVsZSAoaHJ6X2RldiAqIGRldiwgaW50IGlycSkgewogICB1bnNpZ25lZCBpbnQgcnhfYnl0ZXM7CkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCSAgLy8gVkMgbGF5ZXIgc3RhdHMKIAkgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKIAkgIF9fbmV0X3RpbWVzdGFtcChza2IpOwotCSAgLy8gZW5kIG9mIG91ciByZXNwb25zYWJpbGl0eQorCSAgLy8gZW5kIG9mIG91ciByZXNwb25zaWJpbGl0eQogCSAgdmNjLT5wdXNoICh2Y2MsIHNrYik7CiAJfQogICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKaW5kZXggYmZiN2ZlZS4uMDQ4Zjk5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYworKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCkBAIC0zNDk1LDcgKzM0OTUsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChkZXYtPnBoeS0+aW9jdGwgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBMVCBoYWQgbm8gSU9DVEwgZnVudGlvbiBkZWZpbmVkLlxuIiwgY2FyZC0+bmFtZSk7CisJCXByaW50aygiJXM6IExUIGhhZCBubyBJT0NUTCBmdW5jdGlvbiBkZWZpbmVkLlxuIiwgY2FyZC0+bmFtZSk7CiAJCWRlaW5pdF9jYXJkKGNhcmQpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuaCBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmgKaW5kZXggZjUzYTQzYS4uM2E4MmNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuaAorKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5oCkBAIC03NjYsNyArNzY2LDcgQEAKICNkZWZpbmUgU0FSX1JDVEVfQlVGRlNUQVRfTUFTSyAweDAwMDAzMDAwICAvKiBidWZmZXIgc3RhdHVzICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0FSX1JDVEVfRUZDSSAgICAgICAgICAweDAwMDAwODAwICAvKiBFRkNJIENvbmdlc3Rpb24gZmxhZyAgICAgICAgICAgKi8KICNkZWZpbmUgU0FSX1JDVEVfQ0xQICAgICAgICAgICAweDAwMDAwNDAwICAvKiBDZWxsIExvc3MgUHJpb3JpdHkgZmxhZyAgICAgICAgKi8KLSNkZWZpbmUgU0FSX1JDVEVfQ1JDICAgICAgICAgICAweDAwMDAwMjAwICAvKiBSZWNpZXZlZCBDUkMgRXJyb3IgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0FSX1JDVEVfQ1JDICAgICAgICAgICAweDAwMDAwMjAwICAvKiBSZWNlaXZlZCBDUkMgRXJyb3IgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0FSX1JDVEVfQ0VMTENOVF9NQVNLICAweDAwMDAwMUZGICAvKiBjZWxsIENvdW50ICAgICAgICAgICAgICAgICAgICAgKi8KIAogI2RlZmluZSBTQVJfUkNURV9BQUwwICAgICAgICAgIDB4MDAwMDAwMDAgIC8qIEFBTCB0eXBlcyBmb3IgQUxMIGZpZWxkICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaXBoYXNlLmMgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwppbmRleCBkODBkNTFiLi4xYzY3NGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pcGhhc2UuYworKysgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIH0gCiAgIAogICAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVjaWV2aW5nIHNpZGUgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyAgCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlY2VpdmluZyBzaWRlIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIAogIAogc3RhdGljIHZvaWQgcnhfZXhjcF9yY3ZkKHN0cnVjdCBhdG1fZGV2ICpkZXYpICAKIHsgIApAQCAtMTE5NSw3ICsxMTk1LDcgQEAKICAgaWYgKHN0YXR1cyAmIFJYX1BLVF9SQ1ZEKSAgCiAgIHsgIAogCS8qIGRvIHNvbWV0aGluZyAqLyAgCi0JLyogQmFzaWNhbGx5IHJlY3ZkIGFuIGludGVycnVwdCBmb3IgcmVjZXZpbmcgYSBwYWNrZXQuICAKKwkvKiBCYXNpY2FsbHkgcmVjdmQgYW4gaW50ZXJydXB0IGZvciByZWNlaXZpbmcgYSBwYWNrZXQuICAKIAlBIGRlc2NyaXB0b3Igd291bGQgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIHBhY2tldCBjb21wbGV0ZSAgIAogCXF1ZXVlLiBHZXQgYWxsIHRoZSBkZXNjcmlwdG9ycyBhbmQgc2V0IHVwIGRtYSB0byBtb3ZlIHRoZSAgIAogCXBhY2tldHMgdGlsbCB0aGUgcGFja2V0IGNvbXBsZXRlIHF1ZXVlIGlzIGVtcHR5Li4gIApAQCAtMTg1NSw3ICsxODU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7IAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmNjLT5xb3MudHh0cC5tYXhfcGNyID4gaWFkZXYtPkxpbmVSYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgSUZfQ0JSKHByaW50aygiUENSIGlzIG5vdCBhdmFpbGJsZVxuIik7KQorICAgICAgICAgICAgICAgICAgIElGX0NCUihwcmludGsoIlBDUiBpcyBub3QgYXZhaWxhYmxlXG4iKTspCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2Yy0+dHlwZSA9IENCUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2xhbmFpLmMgYi9kcml2ZXJzL2F0bS9sYW5haS5jCmluZGV4IDUyODgwYzguLjRlOGJhNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2xhbmFpLmMKKysrIGIvZHJpdmVycy9hdG0vbGFuYWkuYwpAQCAtMTI1NSw3ICsxMjU1LDcgQEAKIAkvKgogCSAqIFNpbmNlIHRoZSAiYnV0dCByZWdpc3RlciIgaXMgYSBzaGFyZWQgcmVzb3VuY2Ugb24gdGhlIGNhcmQgd2UKIAkgKiBzZXJpYWxpemUgYWxsIGFjY2Vzc2VzIHRvIGl0IHRocm91Z2ggdGhpcyBzcGlubG9jay4gIFRoaXMgaXMKLQkgKiBtb3N0bHkganVzdCBwYXJhbm9pYSBzaWNuZSB0aGUgcmVnaXN0ZXIgaXMgcmFyZWx5ICJidXN5IiBhbnl3YXkKKwkgKiBtb3N0bHkganVzdCBwYXJhbm9pYSBzaW5jZSB0aGUgcmVnaXN0ZXIgaXMgcmFyZWx5ICJidXN5IiBhbnl3YXkKIAkgKiBidXQgaXMgbmVlZGVkIGZvciBjb3JyZWN0bmVzcy4KIAkgKi8KIAlzcGluX2xvY2soJmxhbmFpLT5lbmR0eGxvY2spOwpAQCAtMTk5MCw3ICsxOTkwLDcgQEAKIAogLyoKICAqIFdlIF9jYW5fIHVzZSBWQ0k9PTAgZm9yIG5vcm1hbCB0cmFmZmljLCBidXQgb25seSBmb3IgVUJSIChvciB3ZSdsbAotICogZ2V0IGEgQ0JSWkVSTyBpbnRlcnJ1cHQpLCBhbmQgd2UgY2FuIHVzZSBpdCBvbmx5IGlmIG5vb25lIGlzIHJlY2VpdmluZworICogZ2V0IGEgQ0JSWkVSTyBpbnRlcnJ1cHQpLCBhbmQgd2UgY2FuIHVzZSBpdCBvbmx5IGlmIG5vIG9uZSBpcyByZWNlaXZpbmcKICAqIEFBTDAgdHJhZmZpYyAoc2luY2UgdGhleSB3aWxsIHVzZSB0aGUgc2FtZSBxdWV1ZSkgLSBhY2NvcmRpbmcgdG8gdGhlCiAgKiBkb2NzIHdlIHNob3VsZG4ndCBldmVuIHVzZSBpdCBmb3IgQUFMMCB0cmFmZmljCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiLmMgYi9kcml2ZXJzL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi5jCmluZGV4IDQ5NzU4NTkuLjQxY2U0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiLmMKKysrIGIvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGIuYwpAQCAtNDksNyArNDksNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBjZmFnMTI4NjRiX3JhdGUgPSBDT05GSUdfQ0ZBRzEyODY0Ql9SQVRFOwogbW9kdWxlX3BhcmFtKGNmYWcxMjg2NGJfcmF0ZSwgdWludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGNmYWcxMjg2NGJfcmF0ZSwKLQkiUmVmcmVzaCByYXRlIChoZXJ0enMpIik7CisJIlJlZnJlc2ggcmF0ZSAoaGVydHopIik7CiAKIHVuc2lnbmVkIGludCBjZmFnMTI4NjRiX2dldHJhdGUodm9pZCkKIHsKQEAgLTYwLDcgKzYwLDcgQEAKICAqIGNmYWcxMjg2NGIgQ29tbWFuZHMKICAqCiAgKglFID0gRW5hYmxlIHNpZ25hbAotICoJCUV2ZXJ5dGltZSBFIHN3aXRjaCBmcm9tIGxvdyB0byBoaWdoLAorICoJCUV2ZXJ5IHRpbWUgRSBzd2l0Y2ggZnJvbSBsb3cgdG8gaGlnaCwKICAqCQljZmFnMTI4NjRiL2tzMDEwOCByZWFkcyB0aGUgY29tbWFuZC9kYXRhLgogICoKICAqCUNTMSA9IEZpcnN0IGtzMDEwOGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IGYwNTFjZmYuLjllMGU0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC0xNDksNiArMTQ5LDcgQEAKIAogCW9mX2RldmljZV9ub2RlX3B1dCgmcGEtPnBkZXYuZGV2KTsKIAlrZnJlZShwYS0+cGRldi5kZXYucGxhdGZvcm1fZGF0YSk7CisJa2ZyZWUocGEtPnBkZXYubWZkX2NlbGwpOwogCWtmcmVlKHBhLT5wZGV2LnJlc291cmNlKTsKIAlrZnJlZShwYSk7CiB9CkBAIC03NzEsNyArNzcyLDcgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfU1VTUEVORCAqLwogCi0jaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCisjaWZkZWYgQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MKIAogc3RhdGljIGludCBwbGF0Zm9ybV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtOTA5LDcgKzkxMCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCiAKICNkZWZpbmUgcGxhdGZvcm1fcG1fZnJlZXplCQlOVUxMCiAjZGVmaW5lIHBsYXRmb3JtX3BtX3RoYXcJCU5VTEwKQEAgLTkyMCw3ICs5MjEsNyBAQAogI2RlZmluZSBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycQlOVUxMCiAjZGVmaW5lIHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggMDUyZGM1My4uYWJlM2FiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC02Myw2ICs2Myw3IEBACiAJZGV2LT5wb3dlci53YWtldXAgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnBvd2VyLmxvY2spOwogCXBtX3J1bnRpbWVfaW5pdChkZXYpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnBvd2VyLmVudHJ5KTsKIH0KIAogLyoqCkBAIC0yMzMsNyArMjM0LDcgQEAKIAkJfQogCQlicmVhazsKICNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLwotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiAJY2FzZSBQTV9FVkVOVF9GUkVFWkU6CiAJY2FzZSBQTV9FVkVOVF9RVUlFU0NFOgogCQlpZiAob3BzLT5mcmVlemUpIHsKQEAgLTI2MCw3ICsyNjEsNyBAQAogCQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KG9wcy0+cmVzdG9yZSwgZXJyb3IpOwogCQl9CiAJCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCiAJZGVmYXVsdDoKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KQEAgLTMwOCw3ICszMDksNyBAQAogCQl9CiAJCWJyZWFrOwogI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICovCi0jaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCisjaWZkZWYgQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MKIAljYXNlIFBNX0VWRU5UX0ZSRUVaRToKIAljYXNlIFBNX0VWRU5UX1FVSUVTQ0U6CiAJCWlmIChvcHMtPmZyZWV6ZV9ub2lycSkgewpAQCAtMzM1LDcgKzMzNiw3IEBACiAJCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQob3BzLT5yZXN0b3JlX25vaXJxLCBlcnJvcik7CiAJCX0KIAkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX0hJQkVSTkFUSU9OICovCisjZW5kaWYgLyogQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MgKi8KIAlkZWZhdWx0OgogCQllcnJvciA9IC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggNTQ1OTdjOC4uMzE3MmM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC00NDMsNyArNDQzLDcgQEAKICAqCiAgKiBDaGVjayBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIGFsbG93cyBpdCB0byBiZSByZXN1bWVkLiAgQ2FuY2VsCiAgKiBhbnkgc2NoZWR1bGVkIG9yIHBlbmRpbmcgcmVxdWVzdHMuICBJZiBhbm90aGVyIHJlc3VtZSBoYXMgYmVlbiBzdGFydGVkCi0gKiBlYXJsaWVyLCBlaXRoZXIgcmV0dXJuIGltZWRpYXRlbHkgb3Igd2FpdCBmb3IgaXQgdG8gZmluaXNoLCBkZXBlbmRpbmcgb24gdGhlCisgKiBlYXJsaWVyLCBlaXRoZXIgcmV0dXJuIGltbWVkaWF0ZWx5IG9yIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgZGVwZW5kaW5nIG9uIHRoZQogICogUlBNX05PV0FJVCBhbmQgUlBNX0FTWU5DIGZsYWdzLiAgU2ltaWxhcmx5LCBpZiB0aGVyZSdzIGEgc3VzcGVuZCBydW5uaW5nIGluCiAgKiBwYXJhbGxlbCB3aXRoIHRoaXMgZnVuY3Rpb24sIGVpdGhlciB0ZWxsIHRoZSBvdGhlciBwcm9jZXNzIHRvIHJlc3VtZSBhZnRlcgogICogc3VzcGVuZGluZyAoZGVmZXJyZWRfcmVzdW1lKSBvciB3YWl0IGZvciBpdCB0byBmaW5pc2guICBJZiB0aGUgUlBNX0FTWU5DCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMKaW5kZXggNDU3M2M4My4uYWJiYmQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJaWYgKCEhZGV2LT5wb3dlci5jYW5fd2FrZXVwID09ICEhY2FwYWJsZSkKIAkJcmV0dXJuOwogCi0JaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKGRldikpIHsKKwlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSAmJiAhbGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpIHsKIAkJaWYgKGNhcGFibGUpIHsKIAkJCWlmICh3YWtldXBfc3lzZnNfYWRkKGRldikpCiAJCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3N5cy5jIGIvZHJpdmVycy9iYXNlL3N5cy5jCmluZGV4IGZiZTcyZGEuLmFjZGU5YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9zeXMuYworKysgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogfQogCiAvKioKLSAqCXN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIgLSBSZWdpc3RlciBhdXhpbGxhcnkgZHJpdmVyCisgKglzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgYXV4aWxpYXJ5IGRyaXZlcgogICoJQGNsczoJRGV2aWNlIGNsYXNzIGRyaXZlciBiZWxvbmdzIHRvLgogICoJQGRydjoJRHJpdmVyLgogICoKQEAgLTI1MCw3ICsyNTAsNyBAQAogfQogCiAvKioKLSAqCXN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlciAtIFJlbW92ZSBhbiBhdXhpbGxhcnkgZHJpdmVyLgorICoJc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyIC0gUmVtb3ZlIGFuIGF1eGlsaWFyeSBkcml2ZXIuCiAgKglAY2xzOglDbGFzcyBkcml2ZXIgYmVsb25ncyB0by4KICAqCUBkcnY6CURyaXZlci4KICAqLwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJCSAqIGNvZGUgdGhhdCBzaG91bGQgaGF2ZSBjYWxsZWQgdXMuCiAJCSAqLwogCi0JCS8qIE5vdGlmeSBjbGFzcyBhdXhpbGxhcnkgZHJpdmVycyAqLworCQkvKiBOb3RpZnkgY2xhc3MgYXV4aWxpYXJ5IGRyaXZlcnMgKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjbHMtPmRyaXZlcnMsIGVudHJ5KSB7CiAJCQlpZiAoZHJ2LT5hZGQpCiAJCQkJZHJ2LT5hZGQoc3lzZGV2KTsKQEAgLTMzNSw3ICszMzUsNyBAQAogICoKICAqCUxvb3Agb3ZlciBlYWNoIGNsYXNzIG9mIHN5c3RlbSBkZXZpY2VzLCBhbmQgdGhlIGRldmljZXMgaW4gZWFjaAogICoJb2YgdGhvc2UgY2xhc3Nlcy4gRm9yIGVhY2ggZGV2aWNlLCB3ZSBjYWxsIHRoZSBzaHV0ZG93biBtZXRob2QgZm9yCi0gKgllYWNoIGRyaXZlciByZWdpc3RlcmVkIGZvciB0aGUgZGV2aWNlIC0gdGhlIGF1eGlsbGFyaWVzLAorICoJZWFjaCBkcml2ZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGRldmljZSAtIHRoZSBhdXhpbGlhcmllcywKICAqCWFuZCB0aGUgY2xhc3MgZHJpdmVyLgogICoKICAqCU5vdGU6IFRoZSBsaXN0IGlzIGl0ZXJhdGVkIGluIHJldmVyc2Ugb3JkZXIsIHNvIHRoYXQgd2Ugc2h1dCBkb3duCkBAIC0zNjAsNyArMzYwLDcgQEAKIAkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAJCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwogCi0JCQkvKiBDYWxsIGF1eGlsbGFyeSBkcml2ZXJzIGZpcnN0ICovCisJCQkvKiBDYWxsIGF1eGlsaWFyeSBkcml2ZXJzIGZpcnN0ICovCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNscy0+ZHJpdmVycywgZW50cnkpIHsKIAkJCQlpZiAoZHJ2LT5zaHV0ZG93bikKIAkJCQkJZHJ2LT5zaHV0ZG93bihzeXNkZXYpOwpAQCAtMzg1LDcgKzM4NSw3IEBACiAJV0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksCiAJCSJJbnRlcnJ1cHRzIGVuYWJsZWQgYWZ0ZXIgJXBGXG4iLCBjbHMtPnJlc3VtZSk7CiAKLQkvKiBDYWxsIGF1eGlsbGFyeSBkcml2ZXJzIG5leHQuICovCisJLyogQ2FsbCBhdXhpbGlhcnkgZHJpdmVycyBuZXh0LiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2xzLT5kcml2ZXJzLCBlbnRyeSkgewogCQlpZiAoZHJ2LT5yZXN1bWUpCiAJCQlkcnYtPnJlc3VtZShkZXYpOwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKIAkJCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7CiAKLQkJCS8qIENhbGwgYXV4aWxsYXJ5IGRyaXZlcnMgZmlyc3QgKi8KKwkJCS8qIENhbGwgYXV4aWxpYXJ5IGRyaXZlcnMgZmlyc3QgKi8KIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2xzLT5kcml2ZXJzLCBlbnRyeSkgewogCQkJCWlmIChkcnYtPnN1c3BlbmQpIHsKIAkJCQkJcmV0ID0gZHJ2LT5zdXNwZW5kKHN5c2Rldiwgc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3N5c2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9zeXNjb3JlLmMKaW5kZXggOTBhZjI5NC4uYzEyNmRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5c2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2Uvc3lzY29yZS5jCkBAIC03Myw2ICs3Myw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzY29yZV9zdXNwZW5kKTsKIAogLyoqCiAgKiBzeXNjb3JlX3Jlc3VtZSAtIEV4ZWN1dGUgYWxsIHRoZSByZWdpc3RlcmVkIHN5c3RlbSBjb3JlIHJlc3VtZSBjYWxsYmFja3MuCkBAIC05NSw2ICs5Niw3IEBACiAJCQkJIkludGVycnVwdHMgZW5hYmxlZCBhZnRlciAlcEZcbiIsIG9wcy0+cmVzdW1lKTsKIAkJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzY29yZV9yZXN1bWUpOwogI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCmluZGV4IDc5ODgyMTAuLjgwNjZkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKICAgdW5zaWduZWQgc2hvcnQgTG9naWNhbERldmljZU51bWJlciA9IDA7CiAgIGludCBNb2RlbE5hbWVMZW5ndGg7CiAKLSAgLyogR2V0IGRhdGEgaW50byBkbWEtYWJsZSBhcmVhLCB0aGVuIGNvcHkgaW50byBwZXJtYW5hbnQgbG9jYXRpb24gKi8KKyAgLyogR2V0IGRhdGEgaW50byBkbWEtYWJsZSBhcmVhLCB0aGVuIGNvcHkgaW50byBwZXJtYW5lbnQgbG9jYXRpb24gKi8KICAgaWYgKCFEQUM5NjBfVjJfTmV3Q29udHJvbGxlckluZm8oQ29udHJvbGxlcikpCiAgICAgcmV0dXJuIERBQzk2MF9GYWlsdXJlKENvbnRyb2xsZXIsICJHRVQgQ09OVFJPTExFUiBJTkZPIik7CiAgIG1lbWNweShDb250cm9sbGVySW5mbywgQ29udHJvbGxlci0+VjIuTmV3Q29udHJvbGxlckluZm9ybWF0aW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9hY3Rsb2cuYwppbmRleCAyYTE2NDJiLi5jNjgyOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9hY3Rsb2cuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9hY3Rsb2cuYwpAQCAtMzAsNyArMzAsNyBAQAogCiAvKiBXZSBtYWludGFpbiBhIHRyaXZpYWwgY2hlY2sgc3VtIGluIG91ciBvbiBkaXNrIGFjdGl2aXR5IGxvZy4KICAqIFdpdGggdGhhdCB3ZSBjYW4gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uIGV2ZW4gd2hlbiB0aGUgc3RvcmFnZQotICogZGV2aWNlIG1pZ2h0IGRvIGEgcGFydGlhbCAobGFzdCkgc2VjdG9yIHdyaXRlIHdoaWxlIGxvb3NpbmcgcG93ZXIuCisgKiBkZXZpY2UgbWlnaHQgZG8gYSBwYXJ0aWFsIChsYXN0KSBzZWN0b3Igd3JpdGUgd2hpbGUgbG9zaW5nIHBvd2VyLgogICovCiBzdHJ1Y3QgX19wYWNrZWQgYWxfdHJhbnNhY3Rpb24gewogCXUzMiAgICAgICBtYWdpYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmgKaW5kZXggODEwMzBkOC4uYjI2OTliYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmgKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmgKQEAgLTYyMiw3ICs2MjIsNyBAQAogLyogb25lIGJpdG1hcCBwYWNrZXQsIGluY2x1ZGluZyB0aGUgcF9oZWFkZXIsCiAgKiBzaG91bGQgZml0IHdpdGhpbiBvbmUgX2FyY2hpdGVjdHVyZSBpbmRlcGVuZGVuZF8gcGFnZS4KICAqIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSBmaXhlZCBzaXplIDRLaUIgcGFnZSBzaXplCi0gKiBtb3N0IGFyY2hpdGVjaHR1cmVzIGhhdmUgdXNlZCBmb3IgYSBsb25nIHRpbWUuCisgKiBtb3N0IGFyY2hpdGVjdHVyZXMgaGF2ZSB1c2VkIGZvciBhIGxvbmcgdGltZS4KICAqLwogI2RlZmluZSBCTV9QQUNLRVRfUEFZTE9BRF9CWVRFUyAoNDA5NiAtIHNpemVvZihzdHJ1Y3QgcF9oZWFkZXI4MCkpCiAjZGVmaW5lIEJNX1BBQ0tFVF9XT1JEUyAoQk1fUEFDS0VUX1BBWUxPQURfQllURVMvc2l6ZW9mKGxvbmcpKQpAQCAtODEwLDcgKzgxMCw3IEBACiAKIC8qIGdsb2JhbCBmbGFnIGJpdHMgKi8KIGVudW0gewotCUNSRUFURV9CQVJSSUVSLAkJLyogbmV4dCBQX0RBVEEgaXMgcHJlY2VlZGVkIGJ5IGEgUF9CQVJSSUVSICovCisJQ1JFQVRFX0JBUlJJRVIsCQkvKiBuZXh0IFBfREFUQSBpcyBwcmVjZWRlZCBieSBhIFBfQkFSUklFUiAqLwogCVNJR05BTF9BU0VOREVSLAkJLyogd2hldGhlciBhc2VuZGVyIHdhbnRzIHRvIGJlIGludGVycnVwdGVkICovCiAJU0VORF9QSU5HLAkJLyogd2hldGhlciBhc2VuZGVyIHNob3VsZCBzZW5kIGEgcGluZyBhc2FwICovCiAKQEAgLTExMjYsNyArMTEyNiw3IEBACiAJaW50IGNfc3luY19yYXRlOyAvKiBjdXJyZW50IHJlc3luYyByYXRlIGFmdGVyIHN5bmNlciB0aHJvdHRsZSBtYWdpYyAqLwogCXN0cnVjdCBmaWZvX2J1ZmZlciByc19wbGFuX3M7IC8qIGNvcnJlY3Rpb24gdmFsdWVzIG9mIHJlc3luYyBwbGFuZXIgKi8KIAlpbnQgcnNfaW5fZmxpZ2h0OyAvKiByZXN5bmMgc2VjdG9ycyBpbiBmbGlnaHQgKHRvIHByb3h5LCBpbiBwcm94eSBhbmQgZnJvbSBwcm94eSkgKi8KLQlpbnQgcnNfcGxhbmVkOyAgICAvKiByZXN5bmMgc2VjdG9ycyBhbHJlYWR5IHBsYW5lZCAqLworCWludCByc19wbGFuZWQ7ICAgIC8qIHJlc3luYyBzZWN0b3JzIGFscmVhZHkgcGxhbm5lZCAqLwogCWF0b21pY190IGFwX2luX2ZsaWdodDsgLyogQXBwIHNlY3RvcnMgaW4gZmxpZ2h0ICh3YWl0aW5nIGZvciBhY2spICovCiB9OwogCkBAIC0xMTQ0LDcgKzExNDQsNyBAQAogCXJldHVybiBtZGV2LT5taW5vcjsKIH0KIAotLyogcmV0dXJucyAxIGlmIGl0IHdhcyBzdWNjZXNzZnVsbCwKKy8qIHJldHVybnMgMSBpZiBpdCB3YXMgc3VjY2Vzc2Z1bCwKICAqIHJldHVybnMgMCBpZiB0aGVyZSB3YXMgbm8gZGF0YSBzb2NrZXQuCiAgKiBzbyB3aGVyZXZlciB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgZGF0YS5zb2NrZXQsIGUuZy4gZG8KICAqIGlmICghZHJiZF9nZXRfZGF0YV9zb2NrKG1kZXYpKQpAQCAtMjA3OSw3ICsyMDc5LDcgQEAKIC8qIGNvdW50cyBob3cgbWFueSByZXN5bmMtcmVsYXRlZCBhbnN3ZXJzIHdlIHN0aWxsIGV4cGVjdCBmcm9tIHRoZSBwZWVyCiAgKgkJICAgICBpbmNyZWFzZQkJCWRlY3JlYXNlCiAgKiBDX1NZTkNfVEFSR0VUIHNlbmRzIFBfUlNfREFUQV9SRVFVRVNUIChhbmQgZXhwZWN0cyBQX1JTX0RBVEFfUkVQTFkpCi0gKiBDX1NZTkNfU09VUkNFIHNlbmRzIFBfUlNfREFUQV9SRVBMWSAgIChhbmQgZXhwZWN0cyBQX1dSSVRFX0FDSyB3aGl0aCBJRF9TWU5DRVIpCisgKiBDX1NZTkNfU09VUkNFIHNlbmRzIFBfUlNfREFUQV9SRVBMWSAgIChhbmQgZXhwZWN0cyBQX1dSSVRFX0FDSyB3aXRoIElEX1NZTkNFUikKICAqCQkJCQkgICAob3IgUF9ORUdfQUNLIHdpdGggSURfU1lOQ0VSKQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5jX3JzX3BlbmRpbmcoc3RydWN0IGRyYmRfY29uZiAqbWRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYwppbmRleCBkZmM4NWYzLi41YjUyNWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCkBAIC0xNTYxLDcgKzE1NjEsNyBAQAogCQlpZiAoZHJiZF9zZW5kX3N0YXRlKG1kZXYpKQogCQkJZGV2X3dhcm4oREVWLCAiTm90aWZpZWQgcGVlciB0aGF0IEknbSBub3cgZGlza2xlc3MuXG4iKTsKIAkJLyogY29ycmVzcG9uZGluZyBnZXRfbGRldiBpbiBfX2RyYmRfc2V0X3N0YXRlCi0JCSAqIHRoaXMgbWF5IGZpbmFseSB0cmlnZ2VyIGRyYmRfbGRldl9kZXN0cm95LiAqLworCQkgKiB0aGlzIG1heSBmaW5hbGx5IHRyaWdnZXIgZHJiZF9sZGV2X2Rlc3Ryb3kuICovCiAJCXB1dF9sZGV2KG1kZXYpOwogCX0KIApAQCAtMzcwNiw3ICszNzA2LDcgQEAKIAlidWZmZXIgPSAoc3RydWN0IG1ldGFfZGF0YV9vbl9kaXNrICopcGFnZV9hZGRyZXNzKG1kZXYtPm1kX2lvX3BhZ2UpOwogCiAJaWYgKCFkcmJkX21kX3N5bmNfcGFnZV9pbyhtZGV2LCBiZGV2LCBiZGV2LT5tZC5tZF9vZmZzZXQsIFJFQUQpKSB7Ci0JCS8qIE5PVEU6IGNhbnQgZG8gbm9ybWFsIGVycm9yIHByb2Nlc3NpbmcgaGVyZSBhcyB0aGlzIGlzCisJCS8qIE5PVEU6IGNhbid0IGRvIG5vcm1hbCBlcnJvciBwcm9jZXNzaW5nIGhlcmUgYXMgdGhpcyBpcwogCQkgICBjYWxsZWQgQkVGT1JFIGRpc2sgaXMgYXR0YWNoZWQgKi8KIAkJZGV2X2VycihERVYsICJFcnJvciB3aGlsZSByZWFkaW5nIG1ldGFkYXRhLlxuIik7CiAJCXJ2ID0gRVJSX0lPX01EX0RJU0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYwppbmRleCBmZTE1NjRjLi5mZDI2NjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKQEAgLTg2Miw3ICs4NjIsNyBAQAogCW1zb2NrLT5zay0+c2tfcmN2dGltZW8gPSBtZGV2LT5uZXRfY29uZi0+cGluZ19pbnQqSFo7CiAKIAkvKiB3ZSBkb24ndCB3YW50IGRlbGF5cy4KLQkgKiB3ZSB1c2UgVENQX0NPUksgd2hlcmUgYXByb3ByaWF0ZSwgdGhvdWdoICovCisJICogd2UgdXNlIFRDUF9DT1JLIHdoZXJlIGFwcHJvcHJpYXRlLCB0aG91Z2ggKi8KIAlkcmJkX3RjcF9ub2RlbGF5KHNvY2spOwogCWRyYmRfdGNwX25vZGVsYXkobXNvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF92bGkuaCBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3ZsaS5oCmluZGV4IGZjODI0MDAuLjhjYjE1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3ZsaS5oCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3ZsaS5oCkBAIC0zMiw3ICszMiw3IEBACiAgKiB0aGUgYml0bWFwIHRyYW5zZmVyIHRpbWUgY2FuIHRha2UgbXVjaCB0b28gbG9uZywKICAqIGlmIHRyYW5zbWl0dGVkIGluIHBsYWluIHRleHQuCiAgKgotICogV2UgdHJ5IHRvIHJlZHVjZSB0aGUgdHJhbnNmZXJlZCBiaXRtYXAgaW5mb3JtYXRpb24KKyAqIFdlIHRyeSB0byByZWR1Y2UgdGhlIHRyYW5zZmVycmVkIGJpdG1hcCBpbmZvcm1hdGlvbgogICogYnkgZW5jb2RpbmcgcnVubGVuZ3RocyBvZiBiaXQgcG9sYXJpdHkuCiAgKgogICogV2UgbmV2ZXIgYWN0dWFsbHkgbmVlZCB0byBlbmNvZGUgYSAiemVybyIgKHJ1bmxlbmd0aHMgYXJlIHBvc2l0aXZlKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svaGQuYyBiL2RyaXZlcnMvYmxvY2svaGQuYwppbmRleCAzMGVjNmIzLi4wMDdjNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2hkLmMKKysrIGIvZHJpdmVycy9ibG9jay9oZC5jCkBAIC03MzMsNyArNzMzLDcgQEAKIAkJICogdGhlIEJJT1Mgb3IgQ01PUy4gIFRoaXMgZG9lc24ndCB3b3JrIGFsbCB0aGF0IHdlbGwsCiAJCSAqIHNpbmNlIHRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgaXMgYSBwcmltYXJ5IG9yIHNlY29uZGFyeQogCQkgKiBkcml2ZSwgYW5kIGlmIHdlJ3JlIHVzaW5nIHRoaXMgbGVnYWN5IGRyaXZlciwgaXQncwotCQkgKiBwcm9iYWJseSBhbiBhdXhpbGxpYXJ5IGNvbnRyb2xsZXIgYWRkZWQgdG8gcmVjb3ZlcgorCQkgKiBwcm9iYWJseSBhbiBhdXhpbGlhcnkgY29udHJvbGxlciBhZGRlZCB0byByZWNvdmVyCiAJCSAqIGxlZ2FjeSBkYXRhIG9mZiBhbiBTVC01MDYgZHJpdmUuICBFaXRoZXIgd2F5LCBpdCdzCiAJCSAqIGRlZmluaXRlbHkgc2FmZXN0IHRvIGhhdmUgdGhlIHVzZXIgZXhwbGljaXRseSBzcGVjaWZ5CiAJCSAqIHRoZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcmJkLmMgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCmluZGV4IDE2ZGMzNjQuLjk3MTJmYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9yYmQuYwpAQCAtOTIsNiArOTIsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIH07CiAKK3N0cnVjdCByYmRfcmVxX2NvbGw7CisKIC8qCiAgKiBhIHNpbmdsZSBpbyByZXF1ZXN0CiAgKi8KQEAgLTEwMCw2ICsxMDIsMjQgQEAKIAlzdHJ1Y3QgYmlvCQkqYmlvOwkJLyogY2xvbmVkIGJpbyAqLwogCXN0cnVjdCBwYWdlCQkqKnBhZ2VzOwkvKiBsaXN0IG9mIHVzZWQgcGFnZXMgKi8KIAl1NjQJCQlsZW47CisJaW50CQkJY29sbF9pbmRleDsKKwlzdHJ1Y3QgcmJkX3JlcV9jb2xsCSpjb2xsOworfTsKKworc3RydWN0IHJiZF9yZXFfc3RhdHVzIHsKKwlpbnQgZG9uZTsKKwlpbnQgcmM7CisJdTY0IGJ5dGVzOworfTsKKworLyoKKyAqIGEgY29sbGVjdGlvbiBvZiByZXF1ZXN0cworICovCitzdHJ1Y3QgcmJkX3JlcV9jb2xsIHsKKwlpbnQJCQl0b3RhbDsKKwlpbnQJCQludW1fZG9uZTsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKwlzdHJ1Y3QgcmJkX3JlcV9zdGF0dXMJc3RhdHVzWzBdOwogfTsKIAogc3RydWN0IHJiZF9zbmFwIHsKQEAgLTQxNiw2ICs0MzYsMTcgQEAKIAlyYmRfZGV2LT5jbGllbnQgPSBOVUxMOwogfQogCisvKgorICogRGVzdHJveSByZXF1ZXN0cyBjb2xsZWN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHJiZF9jb2xsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCA9CisJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmJkX3JlcV9jb2xsLCBrcmVmKTsKKworCWRvdXQoInJiZF9jb2xsX3JlbGVhc2UgJXBcbiIsIGNvbGwpOworCWtmcmVlKGNvbGwpOworfQogCiAvKgogICogQ3JlYXRlIGEgbmV3IGhlYWRlciBzdHJ1Y3R1cmUsIHRyYW5zbGF0ZSBoZWFkZXIgZm9ybWF0IGZyb20gdGhlIG9uLWRpc2sKQEAgLTU5MCw2ICs2MjEsMTQgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgaW50IHJiZF9nZXRfbnVtX3NlZ21lbnRzKHN0cnVjdCByYmRfaW1hZ2VfaGVhZGVyICpoZWFkZXIsCisJCQkJdTY0IG9mcywgdTY0IGxlbikKK3sKKwl1NjQgc3RhcnRfc2VnID0gb2ZzID4+IGhlYWRlci0+b2JqX29yZGVyOworCXU2NCBlbmRfc2VnID0gKG9mcyArIGxlbiAtIDEpID4+IGhlYWRlci0+b2JqX29yZGVyOworCXJldHVybiBlbmRfc2VnIC0gc3RhcnRfc2VnICsgMTsKK30KKwogLyoKICAqIGJpbyBoZWxwZXJzCiAgKi8KQEAgLTczNSw2ICs3NzQsNTAgQEAKIAlrZnJlZShvcHMpOwogfQogCitzdGF0aWMgdm9pZCByYmRfY29sbF9lbmRfcmVxX2luZGV4KHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsLAorCQkJCSAgIGludCBpbmRleCwKKwkJCQkgICBpbnQgcmV0LCB1NjQgbGVuKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCWludCBtaW4sIG1heCwgaTsKKworCWRvdXQoInJiZF9jb2xsX2VuZF9yZXFfaW5kZXggJXAgaW5kZXggJWQgcmV0ICVkIGxlbiAlbGxkXG4iLAorCSAgICAgY29sbCwgaW5kZXgsIHJldCwgbGVuKTsKKworCWlmICghcnEpCisJCXJldHVybjsKKworCWlmICghY29sbCkgeworCQlibGtfZW5kX3JlcXVlc3QocnEsIHJldCwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCXEgPSBycS0+cTsKKworCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CisJY29sbC0+c3RhdHVzW2luZGV4XS5kb25lID0gMTsKKwljb2xsLT5zdGF0dXNbaW5kZXhdLnJjID0gcmV0OworCWNvbGwtPnN0YXR1c1tpbmRleF0uYnl0ZXMgPSBsZW47CisJbWF4ID0gbWluID0gY29sbC0+bnVtX2RvbmU7CisJd2hpbGUgKG1heCA8IGNvbGwtPnRvdGFsICYmIGNvbGwtPnN0YXR1c1ttYXhdLmRvbmUpCisJCW1heCsrOworCisJZm9yIChpID0gbWluOyBpPG1heDsgaSsrKSB7CisJCV9fYmxrX2VuZF9yZXF1ZXN0KHJxLCBjb2xsLT5zdGF0dXNbaV0ucmMsCisJCQkJICBjb2xsLT5zdGF0dXNbaV0uYnl0ZXMpOworCQljb2xsLT5udW1fZG9uZSsrOworCQlrcmVmX3B1dCgmY29sbC0+a3JlZiwgcmJkX2NvbGxfcmVsZWFzZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcmJkX2NvbGxfZW5kX3JlcShzdHJ1Y3QgcmJkX3JlcXVlc3QgKnJlcSwKKwkJCSAgICAgaW50IHJldCwgdTY0IGxlbikKK3sKKwlyYmRfY29sbF9lbmRfcmVxX2luZGV4KHJlcS0+cnEsIHJlcS0+Y29sbCwgcmVxLT5jb2xsX2luZGV4LCByZXQsIGxlbik7Cit9CisKIC8qCiAgKiBTZW5kIGNlcGggb3NkIHJlcXVlc3QKICAqLwpAQCAtNzQ5LDYgKzgzMiw4IEBACiAJCQkgIGludCBmbGFncywKIAkJCSAgc3RydWN0IGNlcGhfb3NkX3JlcV9vcCAqb3BzLAogCQkJICBpbnQgbnVtX3JlcGx5LAorCQkJICBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsLAorCQkJICBpbnQgY29sbF9pbmRleCwKIAkJCSAgdm9pZCAoKnJiZF9jYikoc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcSwKIAkJCQkJIHN0cnVjdCBjZXBoX21zZyAqbXNnKSwKIAkJCSAgc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKipsaW5nZXJfcmVxLApAQCAtNzYzLDEyICs4NDgsMjAgQEAKIAlzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdF9oZWFkICpyZXFoZWFkOwogCXN0cnVjdCByYmRfaW1hZ2VfaGVhZGVyICpoZWFkZXIgPSAmZGV2LT5oZWFkZXI7CiAKLQlyZXQgPSAtRU5PTUVNOwogCXJlcV9kYXRhID0ga3phbGxvYyhzaXplb2YoKnJlcV9kYXRhKSwgR0ZQX05PSU8pOwotCWlmICghcmVxX2RhdGEpCi0JCWdvdG8gZG9uZTsKKwlpZiAoIXJlcV9kYXRhKSB7CisJCWlmIChjb2xsKQorCQkJcmJkX2NvbGxfZW5kX3JlcV9pbmRleChycSwgY29sbCwgY29sbF9pbmRleCwKKwkJCQkJICAgICAgIC1FTk9NRU0sIGxlbik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotCWRvdXQoInJiZF9kb19yZXF1ZXN0IGxlbj0lbGxkIG9mcz0lbGxkXG4iLCBsZW4sIG9mcyk7CisJaWYgKGNvbGwpIHsKKwkJcmVxX2RhdGEtPmNvbGwgPSBjb2xsOworCQlyZXFfZGF0YS0+Y29sbF9pbmRleCA9IGNvbGxfaW5kZXg7CisJfQorCisJZG91dCgicmJkX2RvX3JlcXVlc3Qgb2JqPSVzIG9mcz0lbGxkIGxlbj0lbGxkXG4iLCBvYmosIGxlbiwgb2ZzKTsKIAogCWRvd25fcmVhZCgmaGVhZGVyLT5zbmFwX3J3c2VtKTsKIApAQCAtNzc3LDkgKzg3MCw5IEBACiAJCQkJICAgICAgb3BzLAogCQkJCSAgICAgIGZhbHNlLAogCQkJCSAgICAgIEdGUF9OT0lPLCBwYWdlcywgYmlvKTsKLQlpZiAoSVNfRVJSKHJlcSkpIHsKKwlpZiAoIXJlcSkgewogCQl1cF9yZWFkKCZoZWFkZXItPnNuYXBfcndzZW0pOwotCQlyZXQgPSBQVFJfRVJSKHJlcSk7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZV9wYWdlczsKIAl9CiAKQEAgLTgyOCw3ICs5MjEsOCBAQAogCQlyZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZkZXYtPmNsaWVudC0+b3NkYywgcmVxKTsKIAkJaWYgKHZlcikKIAkJCSp2ZXIgPSBsZTY0X3RvX2NwdShyZXEtPnJfcmVhc3NlcnRfdmVyc2lvbi52ZXJzaW9uKTsKLQkJZG91dCgicmVhc3NlcnRfdmVyPSVsbGRcbiIsIGxlNjRfdG9fY3B1KHJlcS0+cl9yZWFzc2VydF92ZXJzaW9uLnZlcnNpb24pKTsKKwkJZG91dCgicmVhc3NlcnRfdmVyPSVsbGRcbiIsCisJCSAgICAgbGU2NF90b19jcHUocmVxLT5yX3JlYXNzZXJ0X3ZlcnNpb24udmVyc2lvbikpOwogCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTgzNywxMCArOTMxLDggQEAKIAliaW9fY2hhaW5fcHV0KHJlcV9kYXRhLT5iaW8pOwogCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOwogZG9uZV9wYWdlczoKKwlyYmRfY29sbF9lbmRfcmVxKHJlcV9kYXRhLCByZXQsIGxlbik7CiAJa2ZyZWUocmVxX2RhdGEpOwotZG9uZToKLQlpZiAocnEpCi0JCWJsa19lbmRfcmVxdWVzdChycSwgcmV0LCBsZW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTg3NCw3ICs5NjYsNyBAQAogCQlieXRlcyA9IHJlcV9kYXRhLT5sZW47CiAJfQogCi0JYmxrX2VuZF9yZXF1ZXN0KHJlcV9kYXRhLT5ycSwgcmMsIGJ5dGVzKTsKKwlyYmRfY29sbF9lbmRfcmVxKHJlcV9kYXRhLCByYywgYnl0ZXMpOwogCiAJaWYgKHJlcV9kYXRhLT5iaW8pCiAJCWJpb19jaGFpbl9wdXQocmVxX2RhdGEtPmJpbyk7CkBAIC05MzQsNiArMTAyNiw3IEBACiAJCQkgIGZsYWdzLAogCQkJICBvcHMsCiAJCQkgIDIsCisJCQkgIE5VTEwsIDAsCiAJCQkgIE5VTEwsCiAJCQkgIGxpbmdlcl9yZXEsIHZlcik7CiAJaWYgKHJldCA8IDApCkBAIC05NTksNyArMTA1Miw5IEBACiAJCSAgICAgdTY0IHNuYXBpZCwKIAkJICAgICBpbnQgb3Bjb2RlLCBpbnQgZmxhZ3MsIGludCBudW1fcmVwbHksCiAJCSAgICAgdTY0IG9mcywgdTY0IGxlbiwKLQkJICAgICBzdHJ1Y3QgYmlvICpiaW8pCisJCSAgICAgc3RydWN0IGJpbyAqYmlvLAorCQkgICAgIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCSAgICAgaW50IGNvbGxfaW5kZXgpCiB7CiAJY2hhciAqc2VnX25hbWU7CiAJdTY0IHNlZ19vZnM7CkBAIC05OTUsNyArMTA5MCwxMCBAQAogCQkJICAgICBmbGFncywKIAkJCSAgICAgb3BzLAogCQkJICAgICBudW1fcmVwbHksCisJCQkgICAgIGNvbGwsIGNvbGxfaW5kZXgsCiAJCQkgICAgIHJiZF9yZXFfY2IsIDAsIE5VTEwpOworCisJcmJkX2Rlc3Ryb3lfb3BzKG9wcyk7CiBkb25lOgogCWtmcmVlKHNlZ19uYW1lKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTAwOCwxMyArMTEwNiwxNSBAQAogCQkJIHN0cnVjdCByYmRfZGV2aWNlICpyYmRfZGV2LAogCQkJIHN0cnVjdCBjZXBoX3NuYXBfY29udGV4dCAqc25hcGMsCiAJCQkgdTY0IG9mcywgdTY0IGxlbiwKLQkJCSBzdHJ1Y3QgYmlvICpiaW8pCisJCQkgc3RydWN0IGJpbyAqYmlvLAorCQkJIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCQkgaW50IGNvbGxfaW5kZXgpCiB7CiAJcmV0dXJuIHJiZF9kb19vcChycSwgcmJkX2Rldiwgc25hcGMsIENFUEhfTk9TTkFQLAogCQkJIENFUEhfT1NEX09QX1dSSVRFLAogCQkJIENFUEhfT1NEX0ZMQUdfV1JJVEUgfCBDRVBIX09TRF9GTEFHX09ORElTSywKIAkJCSAyLAotCQkJIG9mcywgbGVuLCBiaW8pOworCQkJIG9mcywgbGVuLCBiaW8sIGNvbGwsIGNvbGxfaW5kZXgpOwogfQogCiAvKgpAQCAtMTAyNCwxNCArMTEyNCwxNiBAQAogCQkJIHN0cnVjdCByYmRfZGV2aWNlICpyYmRfZGV2LAogCQkJIHU2NCBzbmFwaWQsCiAJCQkgdTY0IG9mcywgdTY0IGxlbiwKLQkJCSBzdHJ1Y3QgYmlvICpiaW8pCisJCQkgc3RydWN0IGJpbyAqYmlvLAorCQkJIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCQkgaW50IGNvbGxfaW5kZXgpCiB7CiAJcmV0dXJuIHJiZF9kb19vcChycSwgcmJkX2RldiwgTlVMTCwKIAkJCSAoc25hcGlkID8gc25hcGlkIDogQ0VQSF9OT1NOQVApLAogCQkJIENFUEhfT1NEX09QX1JFQUQsCiAJCQkgQ0VQSF9PU0RfRkxBR19SRUFELAogCQkJIDIsCi0JCQkgb2ZzLCBsZW4sIGJpbyk7CisJCQkgb2ZzLCBsZW4sIGJpbywgY29sbCwgY29sbF9pbmRleCk7CiB9CiAKIC8qCkBAIC0xMDYzLDcgKzExNjUsOSBAQAogewogCXN0cnVjdCBjZXBoX29zZF9yZXFfb3AgKm9wczsKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKLQlpbnQgcmV0ID0gcmJkX2NyZWF0ZV9yd19vcHMoJm9wcywgMSwgQ0VQSF9PU0RfT1BfTk9USUZZX0FDSywgMCk7CisJaW50IHJldDsKKworCXJldCA9IHJiZF9jcmVhdGVfcndfb3BzKCZvcHMsIDEsIENFUEhfT1NEX09QX05PVElGWV9BQ0ssIDApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDc3LDYgKzExODEsNyBAQAogCQkJICBDRVBIX09TRF9GTEFHX1JFQUQsCiAJCQkgIG9wcywKIAkJCSAgMSwKKwkJCSAgTlVMTCwgMCwKIAkJCSAgcmJkX3NpbXBsZV9yZXFfY2IsIDAsIE5VTEwpOwogCiAJcmJkX2Rlc3Ryb3lfb3BzKG9wcyk7CkBAIC0xMjc0LDYgKzEzNzksMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IHJiZF9yZXFfY29sbCAqcmJkX2FsbG9jX2NvbGwoaW50IG51bV9yZXFzKQoreworCXN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwgPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHJiZF9yZXFfY29sbCkgKworCQkJICAgICAgICBzaXplb2Yoc3RydWN0IHJiZF9yZXFfc3RhdHVzKSAqIG51bV9yZXFzLAorCQkJCUdGUF9BVE9NSUMpOworCisJaWYgKCFjb2xsKQorCQlyZXR1cm4gTlVMTDsKKwljb2xsLT50b3RhbCA9IG51bV9yZXFzOworCWtyZWZfaW5pdCgmY29sbC0+a3JlZik7CisJcmV0dXJuIGNvbGw7Cit9CisKIC8qCiAgKiBibG9jayBkZXZpY2UgcXVldWUgY2FsbGJhY2sKICAqLwpAQCAtMTI5MSw2ICsxNDEwLDggQEAKIAkJYm9vbCBkb193cml0ZTsKIAkJaW50IHNpemUsIG9wX3NpemUgPSAwOwogCQl1NjQgb2ZzOworCQlpbnQgbnVtX3NlZ3MsIGN1cl9zZWcgPSAwOworCQlzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsOwogCiAJCS8qIHBlZWsgYXQgcmVxdWVzdCBmcm9tIGJsb2NrIGxheWVyICovCiAJCWlmICghcnEpCkBAIC0xMzIxLDYgKzE0NDIsMTQgQEAKIAkJICAgICBkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsCiAJCSAgICAgc2l6ZSwgYmxrX3JxX3BvcyhycSkgKiA1MTJVTEwpOwogCisJCW51bV9zZWdzID0gcmJkX2dldF9udW1fc2VnbWVudHMoJnJiZF9kZXYtPmhlYWRlciwgb2ZzLCBzaXplKTsKKwkJY29sbCA9IHJiZF9hbGxvY19jb2xsKG51bV9zZWdzKTsKKwkJaWYgKCFjb2xsKSB7CisJCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCAtRU5PTUVNKTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCiAJCWRvIHsKIAkJCS8qIGEgYmlvIGNsb25lIHRvIGJlIHBhc3NlZCBkb3duIHRvIE9TRCByZXEgKi8KIAkJCWRvdXQoInJxLT5iaW8tPmJpX3ZjbnQ9JWRcbiIsIHJxLT5iaW8tPmJpX3ZjbnQpOwpAQCAtMTMyOCwzNSArMTQ1Nyw0MSBAQAogCQkJCQkJICByYmRfZGV2LT5oZWFkZXIuYmxvY2tfbmFtZSwKIAkJCQkJCSAgb2ZzLCBzaXplLAogCQkJCQkJICBOVUxMLCBOVUxMKTsKKwkJCWtyZWZfZ2V0KCZjb2xsLT5rcmVmKTsKIAkJCWJpbyA9IGJpb19jaGFpbl9jbG9uZSgmcnFfYmlvLCAmbmV4dF9iaW8sICZicCwKIAkJCQkJICAgICAgb3Bfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIWJpbykgewotCQkJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCAtRU5PTUVNKTsKLQkJCQlnb3RvIG5leHQ7CisJCQkJcmJkX2NvbGxfZW5kX3JlcV9pbmRleChycSwgY29sbCwgY3VyX3NlZywKKwkJCQkJCSAgICAgICAtRU5PTUVNLCBvcF9zaXplKTsKKwkJCQlnb3RvIG5leHRfc2VnOwogCQkJfQogCisKIAkJCS8qIGluaXQgT1NEIGNvbW1hbmQ6IHdyaXRlIG9yIHJlYWQgKi8KIAkJCWlmIChkb193cml0ZSkKIAkJCQlyYmRfcmVxX3dyaXRlKHJxLCByYmRfZGV2LAogCQkJCQkgICAgICByYmRfZGV2LT5oZWFkZXIuc25hcGMsCiAJCQkJCSAgICAgIG9mcywKLQkJCQkJICAgICAgb3Bfc2l6ZSwgYmlvKTsKKwkJCQkJICAgICAgb3Bfc2l6ZSwgYmlvLAorCQkJCQkgICAgICBjb2xsLCBjdXJfc2VnKTsKIAkJCWVsc2UKIAkJCQlyYmRfcmVxX3JlYWQocnEsIHJiZF9kZXYsCiAJCQkJCSAgICAgY3VyX3NuYXBfaWQocmJkX2RldiksCiAJCQkJCSAgICAgb2ZzLAotCQkJCQkgICAgIG9wX3NpemUsIGJpbyk7CisJCQkJCSAgICAgb3Bfc2l6ZSwgYmlvLAorCQkJCQkgICAgIGNvbGwsIGN1cl9zZWcpOwogCituZXh0X3NlZzoKIAkJCXNpemUgLT0gb3Bfc2l6ZTsKIAkJCW9mcyArPSBvcF9zaXplOwogCisJCQljdXJfc2VnKys7CiAJCQlycV9iaW8gPSBuZXh0X2JpbzsKIAkJfSB3aGlsZSAoc2l6ZSA+IDApOworCQlrcmVmX3B1dCgmY29sbC0+a3JlZiwgcmJkX2NvbGxfcmVsZWFzZSk7CiAKIAkJaWYgKGJwKQogCQkJYmlvX3BhaXJfcmVsZWFzZShicCk7Ci0KIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIG5leHQ6CiAJCXJxID0gYmxrX2ZldGNoX3JlcXVlc3QocSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCmluZGV4IGUyZmY2OTcuLjlhNWIyYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCkBAIC05NCw3ICs5NCw3IEBACiAJeyAweDAyMDQsIEVJTywgIlVzZSBFcnJvciIgfSwKIAl7IDB4MDIwNSwgRUlPLCAiUmVsZWFzZSBFcnJvciIgfSwKIAl7IDB4MDIwNiwgRUlOVkFMLCAiSW52YWxpZCBEaXNrIiB9LAotCXsgMHgwMjA3LCBFQlVTWSwgIkNhbnQgTG9jayIgfSwKKwl7IDB4MDIwNywgRUJVU1ksICJDYW4ndCBMb2NrIiB9LAogCXsgMHgwMjA4LCBFSU8sICJBbHJlYWR5IExvY2tlZCIgfSwKIAl7IDB4MDIwOSwgRUlPLCAiQWxyZWFkeSBVbmxvY2tlZCIgfSwKIAl7IDB4MDIwQSwgRUlPLCAiSW52YWxpZCBBcmciIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCmluZGV4IDczMzU0YjAuLjY0NWZmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCisrKyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCkBAIC02MjEsNyArNjIxLDcgQEAKIAkJYWNlX2R1bXBfbWVtKGFjZS0+Y2ZfaWQsIDUxMik7CS8qIERlYnVnOiBEdW1wIG91dCBkaXNrIElEICovCiAKIAkJaWYgKGFjZS0+ZGF0YV9yZXN1bHQpIHsKLQkJCS8qIEVycm9yIG9jY3VyZWQsIGRpc2FibGUgdGhlIGRpc2sgKi8KKwkJCS8qIEVycm9yIG9jY3VycmVkLCBkaXNhYmxlIHRoZSBkaXNrICovCiAJCQlhY2UtPm1lZGlhX2NoYW5nZSA9IDE7CiAJCQlzZXRfY2FwYWNpdHkoYWNlLT5nZCwgMCk7CiAJCQlkZXZfZXJyKGFjZS0+ZGV2LCAiZXJyb3IgZmV0Y2hpbmcgQ0YgaWQgKCVpKVxuIiwKQEAgLTgwMSw3ICs4MDEsNyBAQAogCXUzMiBzcmVnID0gYWNlX2luMzIoYWNlLCBBQ0VfU1RBVFVTKTsKIAl1MTYgY3JlZyA9IGFjZV9pbihhY2UsIEFDRV9DVFJMKTsKIAotCS8qIENoZWNrIGZvciBlcnJvciBvY2N1cmFuY2UgKi8KKwkvKiBDaGVjayBmb3IgZXJyb3Igb2NjdXJyZW5jZSAqLwogCWlmICgoc3JlZyAmIChBQ0VfU1RBVFVTX0NGR0VSUk9SIHwgQUNFX1NUQVRVU19DRkNFUlJPUikpICYmCiAJICAgIChjcmVnICYgQUNFX0NUUkxfRVJST1JJUlEpKSB7CiAJCWRldl9lcnIoYWNlLT5kZXYsICJ0cmFuc2ZlciBmYWlsdXJlXG4iKTsKQEAgLTExNjksNyArMTE2OSw3IEBACiAJCQlpcnEgPSBkZXYtPnJlc291cmNlW2ldLnN0YXJ0OwogCX0KIAotCS8qIENhbGwgdGhlIGJ1cy1pbmRlcGVuZGFudCBzZXR1cCBjb2RlICovCisJLyogQ2FsbCB0aGUgYnVzLWluZGVwZW5kZW50IHNldHVwIGNvZGUgKi8KIAlyZXR1cm4gYWNlX2FsbG9jKCZkZXYtPmRldiwgaWQsIHBoeXNhZGRyLCBpcnEsIGJ1c193aWR0aCk7CiB9CiAKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkob3AtPmRldi5vZl9ub2RlLCAiOC1iaXQiLCBOVUxMKSkKIAkJYnVzX3dpZHRoID0gQUNFX0JVU19XSURUSF84OwogCi0JLyogQ2FsbCB0aGUgYnVzLWluZGVwZW5kYW50IHNldHVwIGNvZGUgKi8KKwkvKiBDYWxsIHRoZSBidXMtaW5kZXBlbmRlbnQgc2V0dXAgY29kZSAqLwogCXJldHVybiBhY2VfYWxsb2MoJm9wLT5kZXYsIGlkID8gYmUzMl90b19jcHVwKGlkKSA6IDAsCiAJCQkJCQlwaHlzYWRkciwgaXJxLCBidXNfd2lkdGgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggODY2ODExNC4uNzYyYTUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC03MSw2ICs3MSw5IEBACiAJLyogQXBwbGUgTWFjQm9va0FpcjMsMSwgTWFjQm9va0FpcjMsMiAqLwogCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4ODIxYikgfSwKIAorCS8qIEFwcGxlIE1hY0Jvb2tQcm84LDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWFjLCAweDgyMWEpIH0sCisKIAkvKiBBVk0gQmx1ZUZSSVRaISBVU0IgdjIuMCAqLwogCXsgVVNCX0RFVklDRSgweDA1N2MsIDB4MzgwMCkgfSwKIApAQCAtNjkwLDcgKzY5Myw4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6Ci0JCWlmICghZGF0YS0+YnVsa190eF9lcCB8fCBoZGV2LT5jb25uX2hhc2guYWNsX251bSA8IDEpCisJCWlmICghZGF0YS0+YnVsa190eF9lcCB8fCAoaGRldi0+Y29ubl9oYXNoLmFjbF9udW0gPCAxICYmCisJCQkJCQloZGV2LT5jb25uX2hhc2gubGVfbnVtIDwgMSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwppbmRleCAzODU5NWU3Li43ZTRiNDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCS8qCiAJCSAqIFRoaXMgc3RhdGUgbWVhbnMgdGhhdCBib3RoIHRoZSBob3N0IGFuZCB0aGUgQlJGIGNoaXAKIAkJICogaGF2ZSBzaW11bHRhbmVvdXNseSBzZW50IGEgd2FrZS11cC1pbmRpY2F0aW9uIHBhY2tldC4KLQkJICogVHJhZGl0aW9uYWx5LCBpbiB0aGlzIGNhc2UsIHJlY2VpdmluZyBhIHdha2UtdXAtaW5kaWNhdGlvbgorCQkgKiBUcmFkaXRpb25hbGx5LCBpbiB0aGlzIGNhc2UsIHJlY2VpdmluZyBhIHdha2UtdXAtaW5kaWNhdGlvbgogCQkgKiB3YXMgZW5vdWdoIGFuZCBhbiBhZGRpdGlvbmFsIHdha2UtdXAtYWNrIHdhc24ndCBuZWVkZWQuCiAJCSAqIFRoaXMgaGFzIGNoYW5nZWQgd2l0aCB0aGUgQlJGNjM1MCwgd2hpY2ggZG9lcyByZXF1aXJlIGFuCiAJCSAqIGV4cGxpY2l0IHdha2UtdXAtYWNrLiBPdGhlciBCUkYgdmVyc2lvbnMsIHdoaWNoIGRvIG5vdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IGUyYzQ4YTcuLjUxNGRkOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTMwLDcgKzMwLDcgQEAKICAgY2hhbmdlbG9nIGZvciB0aGUgMS54IHNlcmllcywgRGF2aWQ/CiAKIDIuMDAgIERlYyAgMiwgMTk5NyAtLSBFcmlrIEFuZGVyc2VuIDxhbmRlcnNlZUBkZWJpYW4ub3JnPgotICAtLSBOZXcgbWFpbnRhaW5lciEgQXMgRGF2aWQgQS4gdmFuIExlZXV3ZW4gaGFzIGJlZW4gdG9vIGJ1c3kgdG8gYWN0aXZseQorICAtLSBOZXcgbWFpbnRhaW5lciEgQXMgRGF2aWQgQS4gdmFuIExlZXV3ZW4gaGFzIGJlZW4gdG9vIGJ1c3kgdG8gYWN0aXZlbHkKICAgbWFpbnRhaW4gYW5kIGltcHJvdmUgdGhpcyBkcml2ZXIsIEkgYW0gbm93IGNhcnJ5aW5nIG9uIHRoZSB0b3JjaC4gSWYKICAgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCBtZS4KIApAQCAtMjUyMCw3ICsyNTIwLDcgQEAKIC8qCiAgKiBPaywgdGhpcyBpcyB3aGVyZSBwcm9ibGVtcyBzdGFydC4gIFRoZSBjdXJyZW50IGludGVyZmFjZSBmb3IgdGhlCiAgKiBDRFJPTV9ESVNDX1NUQVRVUyBpb2N0bCBpcyBmbGF3ZWQuICBJdCBtYWtlcyB0aGUgZmFsc2UgYXNzdW1wdGlvbiB0aGF0Ci0gKiBDRHMgYXJlIGFsbCBDRFNfREFUQV8xIG9yIGFsbCBDRFNfQVVESU8sIGV0Yy4gIFVuZm9ydHVuYXRseSwgd2hpbGUgdGhpcworICogQ0RzIGFyZSBhbGwgQ0RTX0RBVEFfMSBvciBhbGwgQ0RTX0FVRElPLCBldGMuICBVbmZvcnR1bmF0ZWx5LCB3aGlsZSB0aGlzCiAgKiBpcyBvZnRlbiB0aGUgY2FzZSwgaXQgaXMgYWxzbyB2ZXJ5IGNvbW1vbiBmb3IgQ0RzIHRvIGhhdmUgc29tZSB0cmFja3MKICAqIHdpdGggZGF0YSwgYW5kIHNvbWUgdHJhY2tzIHdpdGggYXVkaW8uICBKdXN0IGJlY2F1c2UgSSBmZWVsIGxpa2UgaXQsCiAgKiBJIGRlY2xhcmUgdGhlIGZvbGxvd2luZyB0byBiZSB0aGUgYmVzdCB3YXkgdG8gY29wZS4gIElmIHRoZSBDRCBoYXMgQU5ZCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaAppbmRleCAzZTY3ZGRkLi45MjNmOTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKQEAgLTIzNyw3ICsyMzcsNyBAQAogCiBsb25nIGNvbXBhdF9hZ3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotLyogQ2hpcHNldCBpbmRlcGVuZGFudCByZWdpc3RlcnMgKGZyb20gQUdQIFNwZWMpICovCisvKiBDaGlwc2V0IGluZGVwZW5kZW50IHJlZ2lzdGVycyAoZnJvbSBBR1AgU3BlYykgKi8KICNkZWZpbmUgQUdQX0FQQkFTRQkweDEwCiAKICNkZWZpbmUgQUdQU1RBVAkJMHg0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IDQ1NjgxYzAuLmY3ZTg4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC0yNzIsNyArMjcyLDcgQEAKICAqIFRoaXMgcm91dGluZSBjb3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0YWtpbmcgdGhlIGFkZHJlc3NlcwogICogd3JpdHRlbiB0byB0aGUgR0FUVCwgYW5kIGZsdXNoaW5nIHRoZW0gaW5kaXZpZHVhbGx5LiAgSG93ZXZlcgogICogY3VycmVudGx5IGl0IGp1c3QgZmx1c2hlcyB0aGUgd2hvbGUgdGFibGUuICBXaGljaCBpcyBwcm9iYWJseQotICogbW9yZSBlZmZpY2VudCwgc2luY2UgYWdwX21lbW9yeSBibG9ja3MgY2FuIGJlIGEgbGFyZ2UgbnVtYmVyIG9mCisgKiBtb3JlIGVmZmljaWVudCwgc2luY2UgYWdwX21lbW9yeSBibG9ja3MgY2FuIGJlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgKiBlbnRyaWVzLgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKaW5kZXggMDEyY2JhMC4uYjA3MjY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKQEAgLTExNSw2ICsxMTUsOSBAQAogCXN0cnVjdCBhZ3BfbWVtb3J5ICpuZXc7CiAJdW5zaWduZWQgbG9uZyBhbGxvY19zaXplID0gbnVtX2FncF9wYWdlcypzaXplb2Yoc3RydWN0IHBhZ2UgKik7CiAKKwlpZiAoSU5UX01BWC9zaXplb2Yoc3RydWN0IHBhZ2UgKikgPCBudW1fYWdwX3BhZ2VzKQorCQlyZXR1cm4gTlVMTDsKKwogCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ3BfbWVtb3J5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5ldyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTIzNCwxMSArMjM3LDE0IEBACiAJaW50IHNjcmF0Y2hfcGFnZXM7CiAJc3RydWN0IGFncF9tZW1vcnkgKm5ldzsKIAlzaXplX3QgaTsKKwlpbnQgY3VyX21lbW9yeTsKIAogCWlmICghYnJpZGdlKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICgoYXRvbWljX3JlYWQoJmJyaWRnZS0+Y3VycmVudF9tZW1vcnlfYWdwKSArIHBhZ2VfY291bnQpID4gYnJpZGdlLT5tYXhfbWVtb3J5X2FncCkKKwljdXJfbWVtb3J5ID0gYXRvbWljX3JlYWQoJmJyaWRnZS0+Y3VycmVudF9tZW1vcnlfYWdwKTsKKwlpZiAoKGN1cl9tZW1vcnkgKyBwYWdlX2NvdW50ID4gYnJpZGdlLT5tYXhfbWVtb3J5X2FncCkgfHwKKwkgICAgKGN1cl9tZW1vcnkgKyBwYWdlX2NvdW50IDwgcGFnZV9jb3VudCkpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKHR5cGUgPj0gQUdQX1VTRVJfVFlQRVMpIHsKQEAgLTEwODksOCArMTA5NSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEFLOiBjb3VsZCB3cmFwICovCi0JaWYgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykKKwlpZiAoKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykgfHwKKwkgICAgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPCBwZ19zdGFydCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaiA9IHBnX3N0YXJ0OwpAQCAtMTEyNCw3ICsxMTMwLDcgQEAKIHsKIAlzaXplX3QgaTsKIAlzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7Ci0JaW50IG1hc2tfdHlwZTsKKwlpbnQgbWFza190eXBlLCBudW1fZW50cmllczsKIAogCWJyaWRnZSA9IG1lbS0+YnJpZGdlOwogCWlmICghYnJpZGdlKQpAQCAtMTEzNiw2ICsxMTQyLDExIEBACiAJaWYgKHR5cGUgIT0gbWVtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW51bV9lbnRyaWVzID0gYWdwX251bV9lbnRyaWVzKCk7CisJaWYgKCgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpID4gbnVtX2VudHJpZXMpIHx8CisJICAgICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpIDwgcGdfc3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1hc2tfdHlwZSA9IGJyaWRnZS0+ZHJpdmVyLT5hZ3BfdHlwZV90b19tYXNrX3R5cGUoYnJpZGdlLCB0eXBlKTsKIAlpZiAobWFza190eXBlICE9IDApIHsKIAkJLyogVGhlIGdlbmVyaWMgcm91dGluZXMga25vdyBub3RoaW5nIG9mIG1lbW9yeSB0eXBlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwppbmRleCAxM2FjYWFmLi5mMDJmOWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAgKiBUaGlzIHJvdXRpbmUgY291bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGFraW5nIHRoZSBhZGRyZXNzZXMKICAqIHdyaXR0ZW4gdG8gdGhlIEdBVFQsIGFuZCBmbHVzaGluZyB0aGVtIGluZGl2aWR1YWxseS4gIEhvd2V2ZXIKICAqIGN1cnJlbnRseSBpdCBqdXN0IGZsdXNoZXMgdGhlIHdob2xlIHRhYmxlLiAgV2hpY2ggaXMgcHJvYmFibHkKLSAqIG1vcmUgZWZmaWNlbnQsIHNpbmNlIGFncF9tZW1vcnkgYmxvY2tzIGNhbiBiZSBhIGxhcmdlIG51bWJlciBvZgorICogbW9yZSBlZmZpY2llbnQsIHNpbmNlIGFncF9tZW1vcnkgYmxvY2tzIGNhbiBiZSBhIGxhcmdlIG51bWJlciBvZgogICogZW50cmllcy4KICAqLwogc3RhdGljIHZvaWQgc2VydmVyd29ya3NfdGxiZmx1c2goc3RydWN0IGFncF9tZW1vcnkgKnRlbXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCmluZGV4IGRmNjdlODAuLjhiYzM4NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAkgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZAogCSAqIGJ5IDNEIGRyaXZlciB3aGljaCB3YXNuJ3QgYXZhaWxhYmxlIGZvciB0aGUgVlQzMzM2IGFuZCBWVDMzNjQKIAkgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3JrcwotCSAqIGJ1dCBWVDMzMzYgZG9lc24ndC4gLSBleHBsYWluYXRpb24gZnJvbSB2aWEsIGp1c3QgbGVhdmUgdGhpcyBhcworCSAqIGJ1dCBWVDMzMzYgZG9lc24ndC4gLSBleHBsYW5hdGlvbiBmcm9tIHZpYSwganVzdCBsZWF2ZSB0aGlzIGFzCiAJICogYXMgYSBwbGFjZWhvbGRlciB0byBhdm9pZCBmdXR1cmUgcGF0Y2hlcyBhZGRpbmcgaXQgYmFjayBpbi4KIAkgKi8KICNpZiAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKaW5kZXggMGRlYzVkYS4uMmVmYTE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIAogLyoKLSAqIENvZGUgdG8gc2VuZCBhIG1lc3NhZ2UgYW5kIHdhaXQgZm9yIHRoZSByZXBvbnNlLgorICogQ29kZSB0byBzZW5kIGEgbWVzc2FnZSBhbmQgd2FpdCBmb3IgdGhlIHJlc3BvbnNlLgogICovCiAKIHN0YXRpYyB2b2lkIHJlY2VpdmVfaGFuZGxlcihzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqcmVjdl9tc2csIHZvaWQgKmhhbmRsZXJfZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggZDI4YjQ4NC4uY2M2YzliMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCQljQ29kZSA9IElQTUlfRVJSX1VOU1BFQ0lGSUVEOwogCS8qIGVsc2UgdXNlIGl0IGFzIGlzICovCiAKLQkvKiBNYWtlIGl0IGEgcmVwb25zZSAqLworCS8qIE1ha2UgaXQgYSByZXNwb25zZSAqLwogCW1zZy0+cnNwWzBdID0gbXNnLT5kYXRhWzBdIHwgNDsKIAltc2ctPnJzcFsxXSA9IG1zZy0+ZGF0YVsxXTsKIAltc2ctPnJzcFsyXSA9IGNDb2RlOwpAQCAtMjkyNyw3ICsyOTI3LDcgQEAKIHsKIAlzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2cgPSBzbWlfaW5mby0+Y3Vycl9tc2c7CiAKLQkvKiBNYWtlIGl0IGEgcmVwb25zZSAqLworCS8qIE1ha2UgaXQgYSByZXNwb25zZSAqLwogCW1zZy0+cnNwWzBdID0gbXNnLT5kYXRhWzBdIHwgNDsKIAltc2ctPnJzcFsxXSA9IG1zZy0+ZGF0YVsxXTsKIAltc2ctPnJzcFsyXSA9IENBTk5PVF9SRVRVUk5fUkVRVUVTVEVEX0xFTkdUSDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tYmNzLmggYi9kcml2ZXJzL2NoYXIvbWJjcy5oCmluZGV4IGJhNjcxNTguLjFhMzY4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tYmNzLmgKKysrIGIvZHJpdmVycy9jaGFyL21iY3MuaApAQCAtMzYsMTMgKzM2LDEzIEBACiAjZGVmaW5lIE1CQ1NfUkRfRE1BX0NUUkwJMHgwMTEwCS8qIFJlYWQgRE1BIENvbnRyb2wgKi8KICNkZWZpbmUgTUJDU19SRF9ETUFfQU1PX0RFU1QJMHgwMTE4CS8qIFJlYWQgRE1BIEFNTyBEZXN0aW5hdGlvbiAqLwogI2RlZmluZSBNQkNTX1JEX0RNQV9JTlRfREVTVAkweDAxMjAJLyogUmVhZCBETUEgSW50ZXJydXB0IERlc3RpbmF0aW9uICovCi0jZGVmaW5lIE1CQ1NfUkRfRE1BX0FVWF9TVEFUCTB4MDEzMAkvKiBSZWFkIERNQSBBdXhpbGxhcnkgU3RhdHVzICovCisjZGVmaW5lIE1CQ1NfUkRfRE1BX0FVWF9TVEFUCTB4MDEzMAkvKiBSZWFkIERNQSBBdXhpbGlhcnkgU3RhdHVzICovCiAjZGVmaW5lIE1CQ1NfV1JfRE1BX1NZU19BRERSCTB4MDIwMAkvKiBXcml0ZSBETUEgU3lzdGVtIEFkZHJlc3MgKi8KICNkZWZpbmUgTUJDU19XUl9ETUFfTE9DX0FERFIJMHgwMjA4CS8qIFdyaXRlIERNQSBMb2NhbCBBZGRyZXNzICovCiAjZGVmaW5lIE1CQ1NfV1JfRE1BX0NUUkwJMHgwMjEwCS8qIFdyaXRlIERNQSBDb250cm9sICovCiAjZGVmaW5lIE1CQ1NfV1JfRE1BX0FNT19ERVNUCTB4MDIxOAkvKiBXcml0ZSBETUEgQU1PIERlc3RpbmF0aW9uICovCiAjZGVmaW5lIE1CQ1NfV1JfRE1BX0lOVF9ERVNUCTB4MDIyMAkvKiBXcml0ZSBETUEgSW50ZXJydXB0IERlc3RpbmF0aW9uICovCi0jZGVmaW5lIE1CQ1NfV1JfRE1BX0FVWF9TVEFUCTB4MDIzMAkvKiBXcml0ZSBETUEgQXV4aWxsYXJ5IFN0YXR1cyAqLworI2RlZmluZSBNQkNTX1dSX0RNQV9BVVhfU1RBVAkweDAyMzAJLyogV3JpdGUgRE1BIEF1eGlsaWFyeSBTdGF0dXMgKi8KICNkZWZpbmUgTUJDU19BTEdfQU1PX0RFU1QJMHgwMzAwCS8qIEFsZ29yaXRobSBBTU8gRGVzdGluYXRpb24gKi8KICNkZWZpbmUgTUJDU19BTEdfSU5UX0RFU1QJMHgwMzA4CS8qIEFsZ29yaXRobSBJbnRlcnJ1cHQgRGVzdGluYXRpb24gKi8KICNkZWZpbmUgTUJDU19BTEdfT0ZGU0VUUwkweDAzMTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9td2F2ZS8zNzgwaS5oIGIvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmgKaW5kZXggMjcwNDMxYy4uZmJhNmFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmgKKysrIGIvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmgKQEAgLTEyMiw3ICsxMjIsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGNoYXIgRG1hOjM7CS8qIFJXOiBETUEgY2hhbm5lbCBzZWxlY3Rpb24gKi8KIAl1bnNpZ25lZCBjaGFyIE51bVRyYW5zZmVyczoyOwkvKiBSVzogTWF4aW11bSAjIG9mIHRyYW5zZmVycyBvbmNlIGJlaW5nIGdyYW50ZWQgdGhlIElTQSBidXMgKi8KLQl1bnNpZ25lZCBjaGFyIFJlUmVxdWVzdDoyOwkvKiBSVzogTWludW11bSBkZWxheSBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgSVNBIGJ1cyBhbmQgcmVxdWVzdGluZyBpdCBhZ2FpbiAqLworCXVuc2lnbmVkIGNoYXIgUmVSZXF1ZXN0OjI7CS8qIFJXOiBNaW5pbXVtIGRlbGF5IGJldHdlZW4gcmVsZWFzaW5nIHRoZSBJU0EgYnVzIGFuZCByZXF1ZXN0aW5nIGl0IGFnYWluICovCiAJdW5zaWduZWQgY2hhciBNRU1DUzE2OjE7CS8qIFJXOiBJU0Egc2lnbmFsIE1FTUNTMTY6IDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCAqLwogfSBEU1BfQlVTTUFTVEVSX0NGR18xOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbndidXR0b24uYyBiL2RyaXZlcnMvY2hhci9ud2J1dHRvbi5jCmluZGV4IDg5OTRjZTMuLjA0YTQ4MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ud2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9ud2J1dHRvbi5jCkBAIC03NSw3ICs3NSw3IEBACiAgKiB3aXRoIC1FSU5WQUwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZW50cnkgd2l0aCB0aGUgc2FtZSBhZGRyZXNzLAogICogYmVjYXVzZSBpdCBzZWFyY2hlcyB0aGUgbGlzdCBmcm9tIGVuZCB0byBiZWdpbm5pbmcsIGl0IHdpbGwgdW5yZWdpc3RlciB0aGUKICAqIGxhc3Qgb25lIHRvIGJlIHJlZ2lzdGVyZWQgZmlyc3QgKEZJTE8tIEZpcnN0IEluIExhc3QgT3V0KS4KLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBuZWNjZXNzYXJpbHkgdHJ1ZSBpZiB0aGUgZW50cmllcyBhcmUgbm90IHN1Ym1pdHRlZAorICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgaWYgdGhlIGVudHJpZXMgYXJlIG5vdCBzdWJtaXR0ZWQKICAqIGF0IHRoZSBzYW1lIHRpbWUsIGJlY2F1c2UgYW5vdGhlciBkcml2ZXIgY291bGQgaGF2ZSB1bnJlZ2lzdGVyZWQgYSBjYWxsYmFjawogICogYmV0d2VlbiB0aGUgc3VibWlzc2lvbnMgY3JlYXRpbmcgYSBnYXAgZWFybGllciBpbiB0aGUgbGlzdCwgd2hpY2ggd291bGQKICAqIGJlIGZpbGxlZCBmaXJzdCBhdCBzdWJtaXNzaW9uIHRpbWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCBiY2JiYzcxLi45MGJkMDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTgwNiw3ICs4MDYsNyBAQAogCQlkZXYtPmZsYWdzMSA9IDB4MDE7CiAJCXhvdXRiKGRldi0+ZmxhZ3MxLCBSRUdfRkxBR1MxKGlvYmFzZSkpOwogCi0JCS8qIGF0ciBpcyBwcmVzZW50ICh3aGljaCBkb2VzbnQgbWVhbiBpdCdzIHZhbGlkKSAqLworCQkvKiBhdHIgaXMgcHJlc2VudCAod2hpY2ggZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQpICovCiAJCXNldF9iaXQoSVNfQVRSX1BSRVNFTlQsICZkZXYtPmZsYWdzKTsKIAkJaWYgKGRldi0+YXRyWzBdID09IDB4MDMpCiAJCQlzdHJfaW52ZXJ0X3JldmVydChkZXYtPmF0ciwgZGV2LT5hdHJfbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCBiZWNhODBiLi5iNTc1NDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCkBAIC0xMjkwLDcgKzEyOTAsNyBAQAogCS8qIEFsbG9jYXRlIGFuZCBjbGFpbSBhZGFwdGVyIHJlc291cmNlcyAqLwogCXJldHZhbCA9IGNsYWltX3Jlc291cmNlcyhpbmZvKTsKIAotCS8qIHBlcmZvcm0gZXhpc3RhbmNlIGNoZWNrIGFuZCBkaWFnbm9zdGljcyAqLworCS8qIHBlcmZvcm0gZXhpc3RlbmNlIGNoZWNrIGFuZCBkaWFnbm9zdGljcyAqLwogCWlmICggIXJldHZhbCApCiAJCXJldHZhbCA9IGFkYXB0ZXJfdGVzdChpbmZvKTsKIApAQCAtMjY4MCw3ICsyNjgwLDcgQEAKIHN0YXRpYyBpbnQgY2xhaW1fcmVzb3VyY2VzKE1HU0xQQ19JTkZPICppbmZvKQogewogCWlmIChyeF9hbGxvY19idWZmZXJzKGluZm8pIDwgMCApIHsKLQkJcHJpbnRrKCAiQ2FudCBhbGxvY2F0ZSByeCBidWZmZXIgJXNcbiIsIGluZm8tPmRldmljZV9uYW1lKTsKKwkJcHJpbnRrKCAiQ2FuJ3QgYWxsb2NhdGUgcnggYnVmZmVyICVzXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSk7CiAJCXJlbGVhc2VfcmVzb3VyY2VzKGluZm8pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggNWUyOWU4MC4uZDRkZGViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtNzMyLDcgKzczMiw3IEBACiAJCQkgICAgICAgc2l6ZV90IG5ieXRlcywgaW50IG1pbiwgaW50IHJzdmQpOwogCiAvKgotICogVGhpcyB1dGlsaXR5IGlubGluZSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdHJhbnNmZXJpbmcgZW50cm9weQorICogVGhpcyB1dGlsaXR5IGlubGluZSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdHJhbnNmZXJyaW5nIGVudHJvcHkKICAqIGZyb20gdGhlIHByaW1hcnkgcG9vbCB0byB0aGUgc2Vjb25kYXJ5IGV4dHJhY3Rpb24gcG9vbC4gV2UgbWFrZQogICogc3VyZSB3ZSBwdWxsIGVub3VnaCBmb3IgYSAnY2F0YXN0cm9waGljIHJlc2VlZCcuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCA3OWUzNmM4Li4xZWU4Y2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC0xMjQxLDcgKzEyNDEsNyBAQAogCXdoaWxlIChjaGVja19pb3BvcnQgJiYgY2hlY2stPnBvcnQxKSB7CiAJCWlmICghcmVxdWVzdF9yZWdpb24oY2hlY2stPnBvcnQxLAogCQkJCSAgIHNvbnlwaV9kZXZpY2UucmVnaW9uX3NpemUsCi0JCQkJICAgIlNvbnkgUHJvZ3JhbWFibGUgSS9PIERldmljZSBDaGVjayIpKSB7CisJCQkJICAgIlNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBEZXZpY2UgQ2hlY2siKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzb255cGk6IGlvcG9ydCAweCUuNHggYnVzeSwgdXNpbmcgc29ueS1sYXB0b3A/ICIKIAkJCQkJImlmIG5vdCB1c2UgY2hlY2tfaW9wb3J0PTBcbiIsCiAJCQkJCWNoZWNrLT5wb3J0MSk7CkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogCiAJCWlmIChyZXF1ZXN0X3JlZ2lvbihpb3BvcnRfbGlzdC0+cG9ydDEsCiAJCQkJICAgc29ueXBpX2RldmljZS5yZWdpb25fc2l6ZSwKLQkJCQkgICAiU29ueSBQcm9ncmFtYWJsZSBJL08gRGV2aWNlIikpIHsKKwkJCQkgICAiU29ueSBQcm9ncmFtbWFibGUgSS9PIERldmljZSIpKSB7CiAJCQlkZXYtPmlvcG9ydDEgPSBpb3BvcnRfbGlzdC0+cG9ydDE7CiAJCQlkZXYtPmlvcG9ydDIgPSBpb3BvcnRfbGlzdC0+cG9ydDI7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggODRiMTY0ZC4uODM4NTY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTEyODAsMTggKzEyODAsNyBAQAogCQlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKIAkJbGlzdF9kZWwoJnBvcnQtPmNvbnMubGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7Ci0jaWYgMAotCQkvKgotCQkgKiBodmNfcmVtb3ZlKCkgbm90IGNhbGxlZCBhcyByZW1vdmluZyBvbmUgaHZjIHBvcnQKLQkJICogcmVzdWx0cyBpbiBvdGhlciBodmMgcG9ydHMgZ2V0dGluZyBmcm96ZW4uCi0JCSAqCi0JCSAqIE9uY2UgdGhpcyBpcyByZXNvbHZlZCBpbiBodmMsIHRoaXMgZnVuY3Rpb25hbGl0eQotCQkgKiB3aWxsIGJlIGVuYWJsZWQuICBUaWxsIHRoYXQgaXMgZG9uZSwgdGhlIC1FUElQRQotCQkgKiByZXR1cm4gZnJvbSBnZXRfY2hhcnMoKSBhYm92ZSB3aWxsIGhlbHAKLQkJICogaHZjX2NvbnNvbGUuYyB0byBjbGVhbiB1cCBvbiBwb3J0cyB3ZSByZW1vdmUgaGVyZS4KLQkJICovCiAJCWh2Y19yZW1vdmUocG9ydC0+Y29ucy5odmMpOwotI2VuZGlmCiAJfQogCiAJLyogUmVtb3ZlIHVudXNlZCBkYXRhIHRoaXMgcG9ydCBtaWdodCBoYXZlIHJlY2VpdmVkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCmluZGV4IGQzYzlkNzUuLmQ2NDEyYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYworKysgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKQEAgLTY3LDcgKzY3LDcgQEAKICAqIGNwIGZvby5iaXQgL2Rldi9pY2FwMAogICoKICAqIE5vdGUgdGhhdCB1bmxlc3MgZm9vLmJpdCBpcyBhbiBhcHByb3ByaWF0ZWx5IGNvbnN0cnVjdGVkIHBhcnRpYWwKLSAqIGJpdHN0cmVhbSwgdGhpcyBoYXMgYSBoaWdoIGxpa2VseWhvb2Qgb2Ygb3ZlcndyaXRpbmcgdGhlIGRlc2lnbgorICogYml0c3RyZWFtLCB0aGlzIGhhcyBhIGhpZ2ggbGlrZWxpaG9vZCBvZiBvdmVyd3JpdGluZyB0aGUgZGVzaWduCiAgKiBjdXJyZW50bHkgcHJvZ3JhbW1lZCBpbiB0aGUgRlBHQS4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGtkZXYuYyBiL2RyaXZlcnMvY2xrL2Nsa2Rldi5jCmluZGV4IDBmYzBhNzkuLjZkYjE2MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsa2Rldi5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsa2Rldi5jCkBAIC0zMiwxMCArMzIsOSBAQAogICogVGhlbiB3ZSB0YWtlIHRoZSBtb3N0IHNwZWNpZmljIGVudHJ5IC0gd2l0aCB0aGUgZm9sbG93aW5nCiAgKiBvcmRlciBvZiBwcmVjZWRlbmNlOiBkZXYrY29uID4gZGV2IG9ubHkgPiBjb24gb25seS4KICAqLwotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19maW5kKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQorc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwICpjbGtfZmluZChjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKIHsKLQlzdHJ1Y3QgY2xrX2xvb2t1cCAqcDsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtfbG9va3VwICpwLCAqY2wgPSBOVUxMOwogCWludCBtYXRjaCwgYmVzdCA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKQEAgLTUyLDI3ICs1MSwyNyBAQAogCQl9CiAKIAkJaWYgKG1hdGNoID4gYmVzdCkgewotCQkJY2xrID0gcC0+Y2xrOworCQkJY2wgPSBwOwogCQkJaWYgKG1hdGNoICE9IDMpCiAJCQkJYmVzdCA9IG1hdGNoOwogCQkJZWxzZQogCQkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiBjbGs7CisJcmV0dXJuIGNsOwogfQogCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0X3N5cyhjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19sb29rdXAgKmNsOwogCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQljbGsgPSBjbGtfZmluZChkZXZfaWQsIGNvbl9pZCk7Ci0JaWYgKGNsayAmJiAhX19jbGtfZ2V0KGNsaykpCi0JCWNsayA9IE5VTEw7CisJY2wgPSBjbGtfZmluZChkZXZfaWQsIGNvbl9pZCk7CisJaWYgKGNsICYmICFfX2Nsa19nZXQoY2wtPmNsaykpCisJCWNsID0gTlVMTDsKIAltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CiAKLQlyZXR1cm4gY2xrID8gY2xrIDogRVJSX1BUUigtRU5PRU5UKTsKKwlyZXR1cm4gY2wgPyBjbC0+Y2xrIDogRVJSX1BUUigtRU5PRU5UKTsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9zeXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCmluZGV4IGQ3NzAwNTguLjIxOWQ4OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCkBAIC0xNDIsNiArMTQyLDcgQEAKIAkJY2JxLT5jYWxsYmFjayhtc2csIG5zcCk7CiAJCWtmcmVlX3NrYihza2IpOwogCQljbl9xdWV1ZV9yZWxlYXNlX2NhbGxiYWNrKGNicSk7CisJCWVyciA9IDA7CiAJfQogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IGIwMzc3MWQuLjJkYWZjNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTc4Miw3ICsxNzgyLDcgQEAKICAqCWNwdWZyZXFfdXBkYXRlX3BvbGljeSAtIHJlLWV2YWx1YXRlIGFuIGV4aXN0aW5nIGNwdWZyZXEgcG9saWN5CiAgKglAY3B1OiBDUFUgd2hpY2ggc2hhbGwgYmUgcmUtZXZhbHVhdGVkCiAgKgotICoJVXNlZnVsbCBmb3IgcG9saWN5IG5vdGlmaWVycyB3aGljaCBoYXZlIGRpZmZlcmVudCBuZWNlc3NpdGllcworICoJVXNlZnVsIGZvciBwb2xpY3kgbm90aWZpZXJzIHdoaWNoIGhhdmUgZGlmZmVyZW50IG5lY2Vzc2l0aWVzCiAgKglhdCBkaWZmZXJlbnQgdGltZXMuCiAgKi8KIGludCBjcHVmcmVxX3VwZGF0ZV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jCmluZGV4IDQ2NmZkOTQuLmRlOGE3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYwpAQCAtMTcsNyArMTcsNyBAQAogICogQGZpbGUgY3J5cHRvNHh4X3NhLmMKICAqCiAgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgc2VjdXJpdHkgY29udGV4dAotICogYXNzb2ljYXRlIGZvcm1hdC4KKyAqIGFzc29jaWF0ZSBmb3JtYXQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmggYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oCmluZGV4IDRiODNlZDcuLjEzNTJkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmgKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaApAQCAtMTUsNyArMTUsNyBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgc2VjdXJpdHkgY29udGV4dAotICogYXNzb2ljYXRlIGZvcm1hdC4KKyAqIGFzc29jaWF0ZSBmb3JtYXQuCiAgKi8KIAogI2lmbmRlZiBfX0NSWVBUTzRYWF9TQV9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYyBiL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYwppbmRleCAwZDY2MjIxLi40YzIwYzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogCW1lbWNweShjcnlwdC0+aXYsIHJlcS0+aXYsIGl2c2l6ZSk7CiAKIAlpZiAocmVxLT5zcmMgIT0gcmVxLT5kc3QpIHsKLQkJQlVHKCk7IC8qIC1FTk9UU1VQIGJlY2F1c2Ugb2YgbXkgbGF6eW5lc3MgKi8KKwkJQlVHKCk7IC8qIC1FTk9UU1VQIGJlY2F1c2Ugb2YgbXkgbGF6aW5lc3MgKi8KIAl9CiAKIAkvKiBBU1NPQyBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwppbmRleCAzZDdkNzA1Li4yMzVmNTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogLyoqCiAgKiBhdGNfYXNzaWduX2Nvb2tpZSAtIGNvbXB1dGUgYW5kIGFzc2lnbiBuZXcgY29va2llCiAgKiBAYXRjaGFuOiBjaGFubmVsIHdlIHdvcmsgb24KLSAqIEBkZXNjOiBkZXNjcmlwdG9yIHRvIGFzaWduIGNvb2tpZSBmb3IKKyAqIEBkZXNjOiBkZXNjcmlwdG9yIHRvIGFzc2lnbiBjb29raWUgZm9yCiAgKgogICogQ2FsbGVkIHdpdGggYXRjaGFuLT5sb2NrIGhlbGQgYW5kIGJoIGRpc2FibGVkCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKaW5kZXggMDBkZWFiZC4uZjQ4ZTU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKKysrIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKQEAgLTUyOSw3ICs1MjksNyBAQAogCXZhbCA9IHJlYWRsKHZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX0NGRyArCiAJCSAgICBDT0g5MDEzMThfQ1hfQ0ZHX1NQQUNJTkcgKiBjaGFubmVsKTsKIAotCS8qIFN0b3BwaW5nIGluZmluaXQgdHJhbnNmZXIgKi8KKwkvKiBTdG9wcGluZyBpbmZpbml0ZSB0cmFuc2ZlciAqLwogCWlmICgodmFsICYgQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFKSA9PSAwICYmCiAJICAgICh2YWwgJiBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0VOQUJMRSkpCiAJCWNvaGMtPnN0b3BwZWQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsZG1hLmMgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwppbmRleCA2YjM5Njc1Li44YTc4MTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2xkbWEuYworKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNsZG1hX29mX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbGRtYV9vZl9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiZnNsLWVsby1kbWEiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWEuYyBiL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWEuYwppbmRleCA3OThmNDZhLi4zZDRlYzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jCkBAIC05MTEsOCArOTExLDggQEAKIAogLyoqCiAgKiBtaWRjX2hhbmRsZV9lcnJvciAtCUhhbmRsZSBETUEgdHhuIGVycm9yCi0gKiBAbWlkOiBjb250cm9sbGVyIHdoZXJlIGVycm9yIG9jY3VyZWQKLSAqIEBtaWRjOiBjaGFuIHdoZXJlIGVycm9yIG9jY3VyZWQKKyAqIEBtaWQ6IGNvbnRyb2xsZXIgd2hlcmUgZXJyb3Igb2NjdXJyZWQKKyAqIEBtaWRjOiBjaGFuIHdoZXJlIGVycm9yIG9jY3VycmVkCiAgKgogICogU2NhbiB0aGUgZGVzY3JpcHRvciBmb3IgZXJyb3IKICAqLwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAkJZG1hLT5tYXNrX3JlZyA9IGlvcmVtYXAoTE5XX1BFUklQSFJBTF9NQVNLX0JBU0UsCiAJCQkJCUxOV19QRVJJUEhSQUxfTUFTS19TSVpFKTsKIAkJaWYgKGRtYS0+bWFza19yZWcgPT0gTlVMTCkgewotCQkJcHJfZXJyKCJFUlJfTURNQTpDYW50IG1hcCBwZXJpcGhyYWwgaW50ciBzcGFjZSAhIVxuIik7CisJCQlwcl9lcnIoIkVSUl9NRE1BOkNhbid0IG1hcCBwZXJpcGhyYWwgaW50ciBzcGFjZSAhIVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZQpAQCAtMTM3Myw3ICsxMzczLDcgQEAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CiAJaWYgKHJldCkgewotCQlwcl9lcnIoIk1ETUE6IGRldmljZSBjYW50IGJlIGVuYWJsZWQgZm9yICV4XG4iLCBwY2ktPmRldmljZSk7CisJCXByX2VycigiTURNQTogZGV2aWNlIGNhbid0IGJlIGVuYWJsZWQgZm9yICV4XG4iLCBwY2ktPmRldmljZSk7CiAJCXJldHVybiByZXQ7CiAJfQogCWRldmljZS0+c3RhdGUgPSBSVU5OSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYV9yZWdzLmggYi9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hX3JlZ3MuaAppbmRleCA3MDlmZWNiLi5hZWE1ZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hX3JlZ3MuaAorKysgYi9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hX3JlZ3MuaApAQCAtMTc0LDggKzE3NCw4IEBACiAgKiBAZG1hOiBkbWEgZGV2aWNlIHN0cnV0dXJlIHBvaW50ZXIKICAqIEBidXN5OiBib29sIHJlcHJlc2VudGluZyBpZiBjaCBpcyBidXN5IChhY3RpdmUgdHhuKSBvciBub3QKICAqIEBpbl91c2U6IGJvb2wgcmVwcmVzZW50aW5nIGlmIGNoIGlzIGluIHVzZSBvciBub3QKLSAqIEByYXdfdGZyOiByYXcgdHJmIGludGVycnVwdCByZWNpZXZlZAotICogQHJhd19ibG9jazogcmF3IGJsb2NrIGludGVycnVwdCByZWNpZXZlZAorICogQHJhd190ZnI6IHJhdyB0cmYgaW50ZXJydXB0IHJlY2VpdmVkCisgKiBAcmF3X2Jsb2NrOiByYXcgYmxvY2sgaW50ZXJydXB0IHJlY2VpdmVkCiAgKi8KIHN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4gewogCXN0cnVjdCBkbWFfY2hhbgkJY2hhbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21wYzUxMnhfZG1hLmMgYi9kcml2ZXJzL2RtYS9tcGM1MTJ4X2RtYS5jCmluZGV4IDRmOTVkMzEuLmI5YmFlOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL21wYzUxMnhfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvbXBjNTEyeF9kbWEuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKiBwcm9jY2VzcyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgKi8KKy8qIHByb2Nlc3MgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCiBzdGF0aWMgdm9pZCBtcGNfZG1hX3Byb2Nlc3NfY29tcGxldGVkKHN0cnVjdCBtcGNfZG1hICptZG1hKQogewogCWRtYV9jb29raWVfdCBsYXN0X2Nvb2tpZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCA2NDUxYjU4Li5kNTBkYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTg2NSw3ICs4NjUsMTIgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNoX2RtYWVfZXJyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIElSUV9SRVRWQUwoc2hfZG1hZV9yZXNldChkYXRhKSk7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IGRhdGE7CisKKwlpZiAoZG1hb3JfcmVhZChzaGRldikgJiBETUFPUl9BRSkKKwkJcmV0dXJuIElSUV9SRVRWQUwoc2hfZG1hZV9yZXNldChkYXRhKSk7CisJZWxzZQorCQlyZXR1cm4gSVJRX05PTkU7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfZG9fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYyBiL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MC5jCmluZGV4IGFmOTU1ZGUuLjk0ZWUxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MC5jCisrKyBiL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MC5jCkBAIC05MCw3ICs5MCw3IEBACiAgKiBAbGxpX2xvZzogU2FtZSBhcyBhYm92ZSBidXQgZm9yIGxvZ2ljYWwgY2hhbm5lbHMuCiAgKiBAbGxpX3Bvb2w6IFRoZSBwb29sIHdpdGggdHdvIGVudHJpZXMgcHJlLWFsbG9jYXRlZC4KICAqIEBsbGlfbGVuOiBOdW1iZXIgb2YgbGxpcyBvZiBjdXJyZW50IGRlc2NyaXB0b3IuCi0gKiBAbGxpX2N1cnJlbnQ6IE51bWJlciBvZiB0cmFuc2ZlcmVkIGxsaXMuCisgKiBAbGxpX2N1cnJlbnQ6IE51bWJlciBvZiB0cmFuc2ZlcnJlZCBsbGlzLgogICogQGxjbGFfYWxsb2M6IE51bWJlciBvZiBMQ0xBIGVudHJpZXMgYWxsb2NhdGVkLgogICogQHR4ZDogRE1BIGVuZ2luZSBzdHJ1Y3QuIFVzZWQgZm9yIGFtb25nIG90aGVyIHRoaW5ncyBmb3IgY29tbXVuaWNhdGlvbgogICogZHVyaW5nIGEgdHJhbnNmZXIuCkBAIC0xMjE0LDcgKzEyMTQsNyBAQAogCXJldHVybjsKIAogIGVycjoKLQkvKiBSZXNjdWUgbWFub3V2ZXIgaWYgcmVjZWl2aW5nIGRvdWJsZSBpbnRlcnJ1cHRzICovCisJLyogUmVzY3VlIG1hbm9ldXZyZSBpZiByZWNlaXZpbmcgZG91YmxlIGludGVycnVwdHMgKi8KIAlpZiAoZDQwYy0+cGVuZGluZ190eCA+IDApCiAJCWQ0MGMtPnBlbmRpbmdfdHgtLTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCmluZGV4IGZhYzFhMjAuLmFmMWExN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCkBAIC00NSw3ICs0NSw3IEBACiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGRlY29kZSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbnMKLQkgIG9jY3VyaW5nIG9uIHlvdXIgbWFjaGluZSBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLgorCSAgb2NjdXJyaW5nIG9uIHlvdXIgbWFjaGluZSBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLgogCiAJICBZb3Ugc2hvdWxkIGRlZmluaXRlbHkgc2F5IFkgaGVyZSBpbiBjYXNlIHlvdSB3YW50IHRvIGRlY29kZSBNQ0VzCiAJICB3aGljaCBvY2N1ciByZWFsbHkgZWFybHkgdXBvbiBib290LCBiZWZvcmUgdGhlIG1vZHVsZSBpbmZyYXN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggMzFlNzFjNGYuLjlhOGJlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMjExLDggKzIxMSw2IEBACiAKIAlzY3J1YnZhbCA9IHNjcnVidmFsICYgMHgwMDFGOwogCi0JYW1kNjRfZGVidWcoInBjaS1yZWFkLCBzZHJhbSBzY3J1YiBjb250cm9sIHZhbHVlOiAlZFxuIiwgc2NydWJ2YWwpOwotCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2NydWJyYXRlcyk7IGkrKykgewogCQlpZiAoc2NydWJyYXRlc1tpXS5zY3J1YnZhbCA9PSBzY3J1YnZhbCkgewogCQkJcmV0dmFsID0gc2NydWJyYXRlc1tpXS5iYW5kd2lkdGg7CkBAIC05MzMsMjUgKzkzMSw3NCBAQAogLyogT24gRjEwaCBhbmQgbGF0ZXIgRXJyQWRkciBpcyBNQzRfQUREUls0NzoxXSAqLwogc3RhdGljIHU2NCBnZXRfZXJyb3JfYWRkcmVzcyhzdHJ1Y3QgbWNlICptKQogeworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOworCXU2NCBhZGRyOwogCXU4IHN0YXJ0X2JpdCA9IDE7CiAJdTggZW5kX2JpdCAgID0gNDc7CiAKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKSB7CisJaWYgKGMtPng4NiA9PSAweGYpIHsKIAkJc3RhcnRfYml0ID0gMzsKIAkJZW5kX2JpdCAgID0gMzk7CiAJfQogCi0JcmV0dXJuIG0tPmFkZHIgJiBHRU5NQVNLKHN0YXJ0X2JpdCwgZW5kX2JpdCk7CisJYWRkciA9IG0tPmFkZHIgJiBHRU5NQVNLKHN0YXJ0X2JpdCwgZW5kX2JpdCk7CisKKwkvKgorCSAqIEVycmF0dW0gNjM3IHdvcmthcm91bmQKKwkgKi8KKwlpZiAoYy0+eDg2ID09IDB4MTUpIHsKKwkJc3RydWN0IGFtZDY0X3B2dCAqcHZ0OworCQl1NjQgY2M2X2Jhc2UsIHRtcF9hZGRyOworCQl1MzIgdG1wOworCQl1OCBtY2VfbmlkLCBpbnRsdl9lbjsKKworCQlpZiAoKGFkZHIgJiBHRU5NQVNLKDI0LCA0NykpID4+IDI0ICE9IDB4MDBmZGY3KQorCQkJcmV0dXJuIGFkZHI7CisKKwkJbWNlX25pZAk9IGFtZF9nZXRfbmJfaWQobS0+ZXh0Y3B1KTsKKwkJcHZ0CT0gbWNpc1ttY2VfbmlkXS0+cHZ0X2luZm87CisKKwkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fTE9DQUxfTk9ERV9MSU0sICZ0bXApOworCQlpbnRsdl9lbiA9IHRtcCA+PiAyMSAmIDB4NzsKKworCQkvKiBhZGQgWzQ3OjI3XSArIDMgdHJhaWxpbmcgYml0cyAqLworCQljYzZfYmFzZSAgPSAodG1wICYgR0VOTUFTSygwLCAyMCkpIDw8IDM7CisKKwkJLyogcmV2ZXJzZSBhbmQgYWRkIERyYW1JbnRsdkVuICovCisJCWNjNl9iYXNlIHw9IGludGx2X2VuIF4gMHg3OworCisJCS8qIHBpbiBhdCBbNDc6MjRdICovCisJCWNjNl9iYXNlIDw8PSAyNDsKKworCQlpZiAoIWludGx2X2VuKQorCQkJcmV0dXJuIGNjNl9iYXNlIHwgKGFkZHIgJiBHRU5NQVNLKDAsIDIzKSk7CisKKwkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fTE9DQUxfTk9ERV9CQVNFLCAmdG1wKTsKKworCQkJCQkJCS8qIGZhc3RlciBsb2cyICovCisJCXRtcF9hZGRyICA9IChhZGRyICYgR0VOTUFTSygxMiwgMjMpKSA8PCBfX2ZscyhpbnRsdl9lbiArIDEpOworCisJCS8qIE9SIERyYW1JbnRsdlNlbCBpbnRvIGJpdHMgWzE0OjEyXSAqLworCQl0bXBfYWRkciB8PSAodG1wICYgR0VOTUFTSygyMSwgMjMpKSA+PiA5OworCisJCS8qIGFkZCByZW1haW5pbmcgWzExOjBdIGJpdHMgZnJvbSBvcmlnaW5hbCBNQzRfQUREUiAqLworCQl0bXBfYWRkciB8PSBhZGRyICYgR0VOTUFTSygwLCAxMSk7CisKKwkJcmV0dXJuIGNjNl9iYXNlIHwgdG1wX2FkZHI7CisJfQorCisJcmV0dXJuIGFkZHI7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfZHJhbV9iYXNlX2xpbWl0X3JlZ3Moc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1bnNpZ25lZCByYW5nZSkKIHsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKIAlpbnQgb2ZmID0gcmFuZ2UgPDwgMzsKIAogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0JBU0VfTE8gKyBvZmYsICAmcHZ0LT5yYW5nZXNbcmFuZ2VdLmJhc2UubG8pOwogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0xJTUlUX0xPICsgb2ZmLCAmcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5sbyk7CiAKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKQorCWlmIChjLT54ODYgPT0gMHhmKQogCQlyZXR1cm47CiAKIAlpZiAoIWRyYW1fcncocHZ0LCByYW5nZSkpCkBAIC05NTksNiArMTAwNiwzMSBAQAogCiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fQkFTRV9ISSArIG9mZiwgICZwdnQtPnJhbmdlc1tyYW5nZV0uYmFzZS5oaSk7CiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fTElNSVRfSEkgKyBvZmYsICZwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmhpKTsKKworCS8qIEZhY3RvciBpbiBDQzYgc2F2ZSBhcmVhIGJ5IHJlYWRpbmcgZHN0IG5vZGUncyBsaW1pdCByZWcgKi8KKwlpZiAoYy0+eDg2ID09IDB4MTUpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmYxID0gTlVMTDsKKwkJdTggbmlkID0gZHJhbV9kc3Rfbm9kZShwdnQsIHJhbmdlKTsKKwkJdTMyIGxsaW07CisKKwkJZjEgPSBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QoMCwgMCwgUENJX0RFVkZOKDB4MTggKyBuaWQsIDEpKTsKKwkJaWYgKFdBUk5fT04oIWYxKSkKKwkJCXJldHVybjsKKworCQlhbWQ2NF9yZWFkX3BjaV9jZmcoZjEsIERSQU1fTE9DQUxfTk9ERV9MSU0sICZsbGltKTsKKworCQlwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmxvICY9IEdFTk1BU0soMCwgMTUpOworCisJCQkJCSAgICAvKiB7WzM5OjI3XSwxMTFifSAqLworCQlwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmxvIHw9ICgobGxpbSAmIDB4MWZmZikgPDwgMyB8IDB4NykgPDwgMTY7CisKKwkJcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5oaSAmPSBHRU5NQVNLKDAsIDcpOworCisJCQkJCSAgICAvKiBbNDc6NDBdICovCisJCXB2dC0+cmFuZ2VzW3JhbmdlXS5saW0uaGkgfD0gbGxpbSA+PiAxMzsKKworCQlwY2lfZGV2X3B1dChmMSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBrOF9tYXBfc3lzYWRkcl90b19jc3JvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHU2NCBzeXNfYWRkciwKQEAgLTE0MDMsMTIgKzE0NzUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaW50bHZfZW4gJiYKLQkgICAgKGludGx2X3NlbCAhPSAoKHN5c19hZGRyID4+IDEyKSAmIGludGx2X2VuKSkpIHsKLQkJYW1kNjRfd2FybigiQm90Y2hlZCBpbnRsdiBiaXRzLCBlbjogMHgleCwgc2VsOiAweCV4XG4iLAotCQkJICAgaW50bHZfZW4sIGludGx2X3NlbCk7CisJaWYgKGludGx2X2VuICYmIChpbnRsdl9zZWwgIT0gKChzeXNfYWRkciA+PiAxMikgJiBpbnRsdl9lbikpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlzeXNfYWRkciA9IGYxeF9zd2FwX2ludGVybGVhdmVkX3JlZ2lvbihwdnQsIHN5c19hZGRyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKaW5kZXggMTFiZTM2YS4uOWE2NjZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAorKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCkBAIC0xOTYsNiArMTk2LDkgQEAKIAogI2RlZmluZSBEQ1RfQ0ZHX1NFTAkJCTB4MTBDCiAKKyNkZWZpbmUgRFJBTV9MT0NBTF9OT0RFX0JBU0UJCTB4MTIwCisjZGVmaW5lIERSQU1fTE9DQUxfTk9ERV9MSU0JCTB4MTI0CisKICNkZWZpbmUgRFJBTV9CQVNFX0hJCQkJMHgxNDAKICNkZWZpbmUgRFJBTV9MSU1JVF9ISQkJCTB4MTQ0CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9jcGM5MjVfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2NwYzkyNV9lZGFjLmMKaW5kZXggYjlhNzgxYy4uODM3YWQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2NwYzkyNV9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2NwYzkyNV9lZGFjLmMKQEAgLTgxNyw3ICs4MTcsNyBAQAogCX0KIH0KIAotLyogQ29udmVydCBjdXJyZW50IGJhY2stZ3JvdW5kIHNjcnViIHJhdGUgaW50byBieXRlL3NlYyBiYW5kd2l0aCAqLworLyogQ29udmVydCBjdXJyZW50IGJhY2stZ3JvdW5kIHNjcnViIHJhdGUgaW50byBieXRlL3NlYyBiYW5kd2lkdGggKi8KIHN0YXRpYyBpbnQgY3BjOTI1X2dldF9zZHJhbV9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKIHsKIAlzdHJ1Y3QgY3BjOTI1X21jX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggM2Q5NjUzNC4uZWVmYTM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtMTY0LDcgKzE2NCw3IEBACiAvKiBjaGlwc2V0IEVycm9yIERldGVjdGlvbiBhbmQgQ29ycmVjdGlvbiBjYXBhYmlsaXRpZXMgYW5kIG1vZGUgKi8KIGVudW0gZWRhY190eXBlIHsKIAlFREFDX1VOS05PV04gPSAwLAkvKiBVbmtub3duIGlmIEVDQyBpcyBhdmFpbGFibGUgKi8KLQlFREFDX05PTkUsCQkvKiBEb2VzbnQgc3VwcG9ydCBFQ0MgKi8KKwlFREFDX05PTkUsCQkvKiBEb2Vzbid0IHN1cHBvcnQgRUNDICovCiAJRURBQ19SRVNFUlZFRCwJCS8qIFJlc2VydmVkIEVDQyB0eXBlICovCiAJRURBQ19QQVJJVFksCQkvKiBEZXRlY3RzIHBhcml0eSBlcnJvcnMgKi8KIAlFREFDX0VDLAkJLyogRXJyb3IgQ2hlY2tpbmcgLSBubyBjb3JyZWN0aW9uICovCkBAIC0yMzMsNyArMjMzLDcgQEAKICAqCQkJb2YgdGhlc2UgaW4gcGFyYWxsZWwgcHJvdmlkZXMgNjQgYml0cyB3aGljaCBpcyBjb21tb24KICAqCQkJZm9yIGEgbWVtb3J5IHN0aWNrLgogICoKLSAqIE1lbW9yeSBTdGljazoJQSBwcmludGVkIGNpcmN1aXQgYm9hcmQgdGhhdCBhZ3JlZ2F0ZXMgbXVsdGlwbGUKKyAqIE1lbW9yeSBTdGljazoJQSBwcmludGVkIGNpcmN1aXQgYm9hcmQgdGhhdCBhZ2dyZWdhdGVzIG11bHRpcGxlCiAgKgkJCW1lbW9yeSBkZXZpY2VzIGluIHBhcmFsbGVsLiAgVGhpcyBpcyB0aGUgYXRvbWljCiAgKgkJCW1lbW9yeSBjb21wb25lbnQgdGhhdCBpcyBwdXJjaGFzZWFibGUgYnkgSm9lIGNvbnN1bWVyCiAgKgkJCWFuZCBsb2FkZWQgaW50byBhIG1lbW9yeSBzb2NrZXQuCkBAIC0zODUsNyArMzg1LDcgQEAKIAogCS8qIEdldCB0aGUgY3VycmVudCBzZHJhbSBtZW1vcnkgc2NydWIgcmF0ZSBmcm9tIHRoZSBpbnRlcm5hbAogCSAgIHJlcHJlc2VudGF0aW9uIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgY2xvc2VzdCBtYXRjaGluZwotCSAgIGJhbmR3aXRoIGluIGJ5dGVzL3NlYy4KKwkgICBiYW5kd2lkdGggaW4gYnl0ZXMvc2VjLgogCSAqLwogCWludCAoKmdldF9zZHJhbV9zY3J1Yl9yYXRlKSAoc3RydWN0IG1lbV9jdGxfaW5mbyAqIG1jaSk7CiAKQEAgLTgyMyw3ICs4MjMsNyBAQAogICogVGhlcmUgYXJlIGEgbGltaXRlZCBudW1iZXIgb2YgZXJyb3IgbG9nZ2luZyByZWdpc3RlcnMgdGhhdCBjYW4KICAqIGJlIGV4YXVzdGVkLiAgV2hlbiBhbGwgcmVnaXN0ZXJzIGFyZSBleGhhdXN0ZWQgYW5kIGFuIGFkZGl0aW9uYWwKICAqIGVycm9yIG9jY3VycyB0aGVuIGFuIGVycm9yIG92ZXJmbG93IHJlZ2lzdGVyIHJlY29yZHMgdGhhdCBhbgotICogZXJyb3Igb2NjdXJlZCBhbmQgdGhlIHR5cGUgb2YgZXJyb3IsIGJ1dCBkb2Vzbid0IGhhdmUgYW55CisgKiBlcnJvciBvY2N1cnJlZCBhbmQgdGhlIHR5cGUgb2YgZXJyb3IsIGJ1dCBkb2Vzbid0IGhhdmUgYW55CiAgKiBmdXJ0aGVyIGluZm9ybWF0aW9uLiAgVGhlIGNlL3VlIHZlcnNpb25zIG1ha2UgZm9yIGNsZWFuZXIKICAqIHJlcG9ydGluZyBsb2dpYyBhbmQgZnVuY3Rpb24gaW50ZXJmYWNlIC0gcmVkdWNlcyBjb25kaXRpb25hbAogICogc3RhdGVtZW50IGNsdXR0ZXIgYW5kIGV4dHJhIGZ1bmN0aW9uIGFyZ3VtZW50cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX2RldmljZS5jIGIvZHJpdmVycy9lZGFjL2VkYWNfZGV2aWNlLmMKaW5kZXggZDVlMTNjOS4uYTc0MDhjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfZGV2aWNlLmMKQEAgLTY3Miw3ICs2NzIsNyBAQAogCQlibG9jay0+Y291bnRlcnMuY2VfY291bnQrKzsKIAl9CiAKLQkvKiBQcm9wb2dhdGUgdGhlIGNvdW50IHVwIHRoZSAndG90YWxzJyB0cmVlICovCisJLyogUHJvcGFnYXRlIHRoZSBjb3VudCB1cCB0aGUgJ3RvdGFscycgdHJlZSAqLwogCWluc3RhbmNlLT5jb3VudGVycy5jZV9jb3VudCsrOwogCWVkYWNfZGV2LT5jb3VudGVycy5jZV9jb3VudCsrOwogCkBAIC03MTgsNyArNzE4LDcgQEAKIAkJYmxvY2stPmNvdW50ZXJzLnVlX2NvdW50Kys7CiAJfQogCi0JLyogUHJvcG9nYXRlIHRoZSBjb3VudCB1cCB0aGUgJ3RvdGFscycgdHJlZSAqLworCS8qIFByb3BhZ2F0ZSB0aGUgY291bnQgdXAgdGhlICd0b3RhbHMnIHRyZWUgKi8KIAlpbnN0YW5jZS0+Y291bnRlcnMudWVfY291bnQrKzsKIAllZGFjX2Rldi0+Y291bnRlcnMudWVfY291bnQrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfZGV2aWNlX3N5c2ZzLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2Vfc3lzZnMuYwppbmRleCA0MDBkZTA3Li44NjY0OWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2Vfc3lzZnMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2Vfc3lzZnMuYwpAQCAtNTMzLDcgKzUzMyw3IEBACiAJbWVtc2V0KCZibG9jay0+a29iaiwgMCwgc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSk7CiAKIAkvKiBidW1wIHRoZSBtYWluIGtvYmplY3QncyByZWZlcmVuY2UgY291bnQgZm9yIHRoaXMgY29udHJvbGxlcgotCSAqIGFuZCB0aGlzIGluc3RhbmNlIGlzIGRlcGVuZGFudCBvbiB0aGUgbWFpbgorCSAqIGFuZCB0aGlzIGluc3RhbmNlIGlzIGRlcGVuZGVudCBvbiB0aGUgbWFpbgogCSAqLwogCW1haW5fa29iaiA9IGtvYmplY3RfZ2V0KCZlZGFjX2Rldi0+a29iaik7CiAJaWYgKCFtYWluX2tvYmopIHsKQEAgLTYzNSw3ICs2MzUsNyBAQAogCWluc3RhbmNlLT5jdGwgPSBlZGFjX2RldjsKIAogCS8qIGJ1bXAgdGhlIG1haW4ga29iamVjdCdzIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhpcyBjb250cm9sbGVyCi0JICogYW5kIHRoaXMgaW5zdGFuY2UgaXMgZGVwZW5kYW50IG9uIHRoZSBtYWluCisJICogYW5kIHRoaXMgaW5zdGFuY2UgaXMgZGVwZW5kZW50IG9uIHRoZSBtYWluCiAJICovCiAJbWFpbl9rb2JqID0ga29iamVjdF9nZXQoJmVkYWNfZGV2LT5rb2JqKTsKIAlpZiAoIW1haW5fa29iaikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKaW5kZXggYTRlOWRiMi4uMWQ4MDU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCkBAIC03MjQsNyArNzI0LDcgQEAKIAkJICogU29tZSBNQydzIGNhbiByZW1hcCBtZW1vcnkgc28gdGhhdCBpdCBpcyBzdGlsbCBhdmFpbGFibGUKIAkJICogYXQgYSBkaWZmZXJlbnQgYWRkcmVzcyB3aGVuIFBDSSBkZXZpY2VzIG1hcCBpbnRvIG1lbW9yeS4KIAkJICogTUMncyB0aGF0IGNhbid0IGRvIHRoaXMgbG9zZSB0aGUgbWVtb3J5IHdoZXJlIFBDSSBkZXZpY2VzCi0JCSAqIGFyZSBtYXBwZWQuICBUaGlzIG1hcHBpbmcgaXMgTUMgZGVwZW5kYW50IGFuZCBzbyB3ZSBjYWxsCisJCSAqIGFyZSBtYXBwZWQuICBUaGlzIG1hcHBpbmcgaXMgTUMgZGVwZW5kZW50IGFuZCBzbyB3ZSBjYWxsCiAJCSAqIGJhY2sgaW50byB0aGUgTUMgZHJpdmVyIGZvciBpdCB0byBtYXAgdGhlIE1DIHBhZ2UgdG8KIAkJICogYSBwaHlzaWNhbCAoQ1BVKSBwYWdlIHdoaWNoIGNhbiB0aGVuIGJlIG1hcHBlZCB0byBhIHZpcnR1YWwKIAkJICogcGFnZSAtIHdoaWNoIGNhbiB0aGVuIGJlIHNjcnViYmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKaW5kZXggNzMxOTZmNy4uMjlmZmEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCkBAIC00NTgsMTMgKzQ1OCwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5ld19idyA9IG1jaS0+c2V0X3NkcmFtX3NjcnViX3JhdGUobWNpLCBiYW5kd2lkdGgpOwotCWlmIChuZXdfYncgPj0gMCkgewotCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiU2NydWIgcmF0ZSBzZXQgdG8gJWRcbiIsIG5ld19idyk7Ci0JCXJldHVybiBjb3VudDsKKwlpZiAobmV3X2J3IDwgMCkgeworCQllZGFjX3ByaW50ayhLRVJOX1dBUk5JTkcsIEVEQUNfTUMsCisJCQkgICAgIkVycm9yIHNldHRpbmcgc2NydWIgcmF0ZSB0bzogJWx1XG4iLCBiYW5kd2lkdGgpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiRXJyb3Igc2V0dGluZyBzY3J1YiByYXRlIHRvOiAlbHVcbiIsIGJhbmR3aWR0aCk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGNvdW50OwogfQogCiAvKgpAQCAtNDgzLDcgKzQ4Myw2IEBACiAJCXJldHVybiBiYW5kd2lkdGg7CiAJfQogCi0JZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIlJlYWQgc2NydWIgcmF0ZTogJWRcbiIsIGJhbmR3aWR0aCk7CiAJcmV0dXJuIHNwcmludGYoZGF0YSwgIiVkXG4iLCBiYW5kd2lkdGgpOwogfQogCkBAIC04NTAsNyArODQ5LDcgQEAKIAogCS8qCiAJICogbG9vcCBpZiB0aGVyZSBhcmUgYXR0cmlidXRlcyBhbmQgdW50aWwgd2UgaGl0IGEgTlVMTCBlbnRyeQotCSAqIFJlbW92ZSBmaXJzdCBhbGwgdGhlIGF0cmlidXRlcworCSAqIFJlbW92ZSBmaXJzdCBhbGwgdGhlIGF0dHJpYnV0ZXMKIAkgKi8KIAl3aGlsZSAoc3lzZnNfYXR0cmliKSB7CiAJCWRlYnVnZjQoIiVzKCkgc3lzZnNfYXR0cmliID0gJXBcbiIsX19mdW5jX18sIHN5c2ZzX2F0dHJpYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCmluZGV4IDAyM2IwMWMuLjQ5NTE5OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCkBAIC0zNTIsNyArMzUyLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBGaXJzdCB0aW1lLCBzbyBjcmVhdGUgdGhlIG1haW4ga29iamVjdCBhbmQgaXRzCi0JICogY29udHJvbHMgYW5kIGF0cmlidXRlcworCSAqIGNvbnRyb2xzIGFuZCBhdHRyaWJ1dGVzCiAJICovCiAJZWRhY19jbGFzcyA9IGVkYWNfZ2V0X3N5c2ZzX2NsYXNzKCk7CiAJaWYgKGVkYWNfY2xhc3MgPT0gTlVMTCkgewpAQCAtNTUxLDcgKzU1MSw3IEBACiAvKgogICogIFBDSSBQYXJpdHkgcG9sbGluZwogICoKLSAqCUZ1Y250aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHBhcml0eSBzdGF0dXMKKyAqCUZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHBhcml0eSBzdGF0dXMKICAqCWFuZCBkZWNvZGUgaXQKICAqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCmluZGV4IGE1Y2VmYWIuLjg3ZjQyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwpAQCAtMTM3Miw3ICsxMzcyLDcgQEAKIAkgKiBhY3R1YWwgbnVtYmVyIG9mIHNsb3RzL2RpbW1zIHBlciBjaGFubmVsLCB3ZSB0aHVzIHV0aWxpemUgdGhlCiAJICogcmVzb3VyY2UgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjaGlwc2V0LiBUaHVzLCB3ZSBtaWdodCBoYXZlCiAJICogaGF2ZSBtb3JlIERJTU1zIHBlciBjaGFubmVsIHRoYW4gYWN0dWFsbHkgb24gdGhlIG1vYm8sIGJ1dCB0aGlzCi0JICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAorCSAqIGFsbG93cyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgdXAgdG8gdGhlIGNoaXBzZXQgbWF4LCB3aXRob3V0CiAJICogc29tZSBmYW5jeSBtb2JvIGRldGVybWluYXRpb24uCiAJICovCiAJaTUwMDBfZ2V0X2RpbW1fYW5kX2NoYW5uZWxfY291bnRzKHBkZXYsICZudW1fZGltbXNfcGVyX2NoYW5uZWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1MTAwX2VkYWMuYwppbmRleCAwNDQ4ZGEwLi5iY2JkZWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAgKiBUaGUgaW50ZWwgNTEwMCBoYXMgdHdvIGluZGVwZW5kZW50IGNoYW5uZWxzLiBFREFDIGNvcmUgY3VycmVudGx5CiAgKiBjYW4gbm90IHJlZmxlY3QgdGhpcyBjb25maWd1cmF0aW9uIHNvIGluc3RlYWQgdGhlIGNoaXAtc2VsZWN0Ci0gKiByb3dzIGZvciBlYWNoIHJlc3BlY3RpdmUgY2hhbm5lbCBhcmUgbGF5ZWQgb3V0IG9uZSBhZnRlciBhbm90aGVyLAorICogcm93cyBmb3IgZWFjaCByZXNwZWN0aXZlIGNoYW5uZWwgYXJlIGxhaWQgb3V0IG9uZSBhZnRlciBhbm90aGVyLAogICogdGhlIGZpcnN0IGhhbGYgYmVsb25naW5nIHRvIGNoYW5uZWwgMCwgdGhlIHNlY29uZCBoYWxmIGJlbG9uZ2luZwogICogdG8gY2hhbm5lbCAxLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwppbmRleCAzOGE5YmU5Li44MGE0NjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKQEAgLTY0OCw3ICs2NDgsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogTWlzY2VsYW5lb3VzIGVycm9ycyAqLworCS8qIE1pc2NlbGxhbmVvdXMgZXJyb3JzICovCiAJZXJybnVtID0gZmluZF9maXJzdF9iaXQoJmFsbEVycm9ycywgQVJSQVlfU0laRShlcnJvcl9uYW1lKSk7CiAKIAlicmFuY2ggPSBleHRyYWN0X2ZiZGNoYW5faW5keChpbmZvLT5mZXJyX25mX2ZiZCk7CkBAIC0xMjQwLDcgKzEyNDAsNyBAQAogCSAqIGFjdHVhbCBudW1iZXIgb2Ygc2xvdHMvZGltbXMgcGVyIGNoYW5uZWwsIHdlIHRodXMgdXRpbGl6ZSB0aGUKIAkgKiByZXNvdXJjZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGNoaXBzZXQuIFRodXMsIHdlIG1pZ2h0IGhhdmUKIAkgKiBoYXZlIG1vcmUgRElNTXMgcGVyIGNoYW5uZWwgdGhhbiBhY3R1YWxseSBvbiB0aGUgbW9ibywgYnV0IHRoaXMKLQkgKiBhbGxvd3MgdGhlIGRyaXZlciB0byBzdXBwb3J0IHVwdG8gdGhlIGNoaXBzZXQgbWF4LCB3aXRob3V0CisJICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cCB0byB0aGUgY2hpcHNldCBtYXgsIHdpdGhvdXQKIAkgKiBzb21lIGZhbmN5IG1vYm8gZGV0ZXJtaW5hdGlvbi4KIAkgKi8KIAludW1fZGltbXNfcGVyX2NoYW5uZWwgPSBNQVhfRElNTVNfUEVSX0NIQU5ORUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTczMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k3MzAwX2VkYWMuYwppbmRleCA3NmQxZjU3Li4zNjNjYzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTczMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNzMwMF9lZGFjLmMKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAJICogYWN0dWFsIG51bWJlciBvZiBzbG90cy9kaW1tcyBwZXIgY2hhbm5lbCwgd2UgdGh1cyB1dGlsaXplIHRoZQogCSAqIHJlc291cmNlIGFzIHNwZWNpZmllZCBieSB0aGUgY2hpcHNldC4gVGh1cywgd2UgbWlnaHQgaGF2ZQogCSAqIGhhdmUgbW9yZSBESU1NcyBwZXIgY2hhbm5lbCB0aGFuIGFjdHVhbGx5IG9uIHRoZSBtb2JvLCBidXQgdGhpcwotCSAqIGFsbG93cyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgdXB0byB0aGUgY2hpcHNldCBtYXgsIHdpdGhvdXQKKwkgKiBhbGxvd3MgdGhlIGRyaXZlciB0byBzdXBwb3J0IHVwIHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAogCSAqIHNvbWUgZmFuY3kgbW9ibyBkZXRlcm1pbmF0aW9uLgogCSAqLwogCW51bV9kaW1tc19wZXJfY2hhbm5lbCA9IE1BWF9TTE9UUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pN2NvcmVfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKaW5kZXggODExNTRhYi4uNDY1Y2JjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKQEAgLTE3NzIsNyArMTc3Miw3IEBACiAJLyoKIAkgKiBNQ0UgZmlyc3Qgc3RlcDogQ29weSBhbGwgbWNlIGVycm9ycyBpbnRvIGEgdGVtcG9yYXJ5IGJ1ZmZlcgogCSAqIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgaGVyZSwgdG8gcmVkdWNlIHRoZSByaXNrIG9mCi0JICogbG9vc2luZyBhbiBlcnJvci4KKwkgKiBsb3NpbmcgYW4gZXJyb3IuCiAJICovCiAJc21wX3JtYigpOwogCWNvdW50ID0gKHB2dC0+bWNlX291dCArIE1DRV9MT0dfTEVOIC0gcHZ0LT5tY2VfaW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKaW5kZXggNjc4NDA1YS4uNDMyOWQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCXJvd19oaWdoX2xpbWl0ID0gKCh1MzIpIGRyYmFyIDw8IDIzKTsKIAkJLyogZmluZCB0aGUgRFJBTSBDaGlwIFNlbGVjdCBCYXNlIGFkZHJlc3MgYW5kIG1hc2sgKi8KIAkJZGVidWdmMSgiTUMlZDogJXM6ICVzKCkgUm93PSVkLCAiCi0JCQkiQm91bmRyeSBBZGRyZXNzPSUjMHgsIExhc3QgPSAlIzB4XG4iLAorCQkJIkJvdW5kYXJ5IEFkZHJlc3M9JSMweCwgTGFzdCA9ICUjMHhcbiIsCiAJCQltY2ktPm1jX2lkeCwgX19GSUxFX18sIF9fZnVuY19fLCBpbmRleCwgcm93X2hpZ2hfbGltaXQsCiAJCQlyb3dfaGlnaF9saW1pdF9sYXN0KTsKIApAQCAtMzA1LDcgKzMwNSw3IEBACiAJaTgyNDQzYnhneF9pbml0X2Nzcm93cyhtY2ksIHBkZXYsIGVkYWNfbW9kZSwgbXR5cGUpOwogCiAJLyogTWFueSBCSU9TZXMgZG9uJ3QgY2xlYXIgZXJyb3IgZmxhZ3Mgb24gYm9vdCwgc28gZG8gdGhpcwotCSAqIGhlcmUsIG9yIHdlIGdldCAicGhhbnRvbSIgZXJyb3JzIG9jY3VyaW5nIGF0IG1vZHVsZS1sb2FkCisJICogaGVyZSwgb3Igd2UgZ2V0ICJwaGFudG9tIiBlcnJvcnMgb2NjdXJyaW5nIGF0IG1vZHVsZS1sb2FkCiAJICogdGltZS4gKi8KIAlwY2lfd3JpdGVfYml0czMyKHBkZXYsIEk4MjQ0M0JYR1hfRUFQLAogCQkJKEk4MjQ0M0JYR1hfRUFQX09GRlNFVF9TQkUgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYwppbmRleCA3MzNhN2U3YS4uYTQ5ODdlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMKKysrIGIvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogCWlmICh2YWx1ZSA+IDUpCiAJCWlmIChib290X2NwdV9kYXRhLng4NiAhPSAweDE1IHx8IHZhbHVlID4gNikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJOb24tZXhpc3RhbnQgTUNFIGJhbms6ICVsdVxuIiwgdmFsdWUpOworCQkJcHJpbnRrKEtFUk5fRVJSICJOb24tZXhpc3RlbnQgTUNFIGJhbms6ICVsdVxuIiwgdmFsdWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IGZmYjVhZDAuLjM4YWI4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTExNDcsMTMgKzExNDcsMTQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBtcGM4NXh4X21jX2NsZWFyX3JmeGUodm9pZCAqZGF0YSkKIHsKIAlvcmlnX2hpZDFbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IG1mc3ByKFNQUk5fSElEMSk7Ci0JbXRzcHIoU1BSTl9ISUQxLCAob3JpZ19oaWQxW3NtcF9wcm9jZXNzb3JfaWQoKV0gJiB+MHgyMDAwMCkpOworCW10c3ByKFNQUk5fSElEMSwgKG9yaWdfaGlkMVtzbXBfcHJvY2Vzc29yX2lkKCldICYgfkhJRDFfUkZYRSkpOwogfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhfbWNfaW5pdCh2b2lkKQogewogCWludCByZXMgPSAwOworCXUzMiBwdnIgPSAwOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZXNjYWxlKFIpIE1QQzg1eHggRURBQyBkcml2ZXIsICIKIAkgICAgICAgIihDKSAyMDA2IE1vbnRhdmlzdGEgU29mdHdhcmVcbiIpOwpAQCAtMTE4MywxMiArMTE4NCwxNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRlNMX1NPQ19CT09LRQotCS8qCi0JICogbmVlZCB0byBjbGVhciBISUQxW1JGWEVdIHRvIGRpc2FibGUgbWFjaGluZSBjaGVjayBpbnQKLQkgKiBzbyB3ZSBjYW4gY2F0Y2ggaXQKLQkgKi8KLQlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKQotCQlvbl9lYWNoX2NwdShtcGM4NXh4X21jX2NsZWFyX3JmeGUsIE5VTEwsIDApOworCXB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKKworCWlmICgoUFZSX1ZFUihwdnIpID09IFBWUl9WRVJfRTUwMFYxKSB8fAorCSAgICAoUFZSX1ZFUihwdnIpID09IFBWUl9WRVJfRTUwMFYyKSkgeworCQkvKgorCQkgKiBuZWVkIHRvIGNsZWFyIEhJRDFbUkZYRV0gdG8gZGlzYWJsZSBtYWNoaW5lIGNoZWNrIGludAorCQkgKiBzbyB3ZSBjYW4gY2F0Y2ggaXQKKwkJICovCisJCWlmIChlZGFjX29wX3N0YXRlID09IEVEQUNfT1BTVEFURV9JTlQpCisJCQlvbl9lYWNoX2NwdShtcGM4NXh4X21jX2NsZWFyX3JmeGUsIE5VTEwsIDApOworCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CkBAIC0xMjA2LDcgKzEyMTIsMTIgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtcGM4NXh4X21jX2V4aXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfRlNMX1NPQ19CT09LRQotCW9uX2VhY2hfY3B1KG1wYzg1eHhfbWNfcmVzdG9yZV9oaWQxLCBOVUxMLCAwKTsKKwl1MzIgcHZyID0gbWZzcHIoU1BSTl9QVlIpOworCisJaWYgKChQVlJfVkVSKHB2cikgPT0gUFZSX1ZFUl9FNTAwVjEpIHx8CisJICAgIChQVlJfVkVSKHB2cikgPT0gUFZSX1ZFUl9FNTAwVjIpKSB7CisJCW9uX2VhY2hfY3B1KG1wYzg1eHhfbWNfcmVzdG9yZV9oaWQxLCBOVUxMLCAwKTsKKwl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUENJCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wYzg1eHhfcGNpX2Vycl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3I4MjYwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvcjgyNjAwX2VkYWMuYwppbmRleCA2YTgyMmM2Li42Nzg1MTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvcjgyNjAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvcjgyNjAwX2VkYWMuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJCQkJICogICAgICAgIHdyaXRlIDA9Tk9QCiAJCQkJICovCiAKLSNkZWZpbmUgUjgyNjAwX0RSQkEJMHg2MAkvKiArIDB4NjAuLjB4NjMgU0RSQU0gUm93IEJvdW5kcnkgQWRkcmVzcworI2RlZmluZSBSODI2MDBfRFJCQQkweDYwCS8qICsgMHg2MC4uMHg2MyBTRFJBTSBSb3cgQm91bmRhcnkgQWRkcmVzcwogCQkJCSAqICBSZWdpc3RlcnMKIAkJCQkgKgogCQkJCSAqIDc6MCAgQWRkcmVzcyBsaW5lcyAzMDoyNCAtIHVwcGVyIGxpbWl0IG9mCkBAIC0yMTcsNyArMjE3LDcgQEAKIHsKIAlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3c7CiAJaW50IGluZGV4OwotCXU4IGRyYmFyOwkJLyogU0RSQU0gUm93IEJvdW5kcnkgQWRkcmVzcyBSZWdpc3RlciAqLworCXU4IGRyYmFyOwkJLyogU0RSQU0gUm93IEJvdW5kYXJ5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KIAl1MzIgcm93X2hpZ2hfbGltaXQsIHJvd19oaWdoX2xpbWl0X2xhc3Q7CiAJdTMyIHJlZ19zZHJhbSwgZWNjX29uLCByb3dfYmFzZTsKIApAQCAtMjM2LDcgKzIzNiw3IEBACiAJCXJvd19oaWdoX2xpbWl0ID0gKCh1MzIpIGRyYmFyIDw8IDI0KTsKIC8qCQlyb3dfaGlnaF9saW1pdCA9ICgodTMyKWRyYmFyIDw8IDI0KSB8IDB4ZmZmZmZmVUw7ICovCiAKLQkJZGVidWdmMSgiJXMoKSBSb3c9JWQsIEJvdW5kcnkgQWRkcmVzcz0lIzB4LCBMYXN0ID0gJSMweFxuIiwKKwkJZGVidWdmMSgiJXMoKSBSb3c9JWQsIEJvdW5kYXJ5IEFkZHJlc3M9JSMweCwgTGFzdCA9ICUjMHhcbiIsCiAJCQlfX2Z1bmNfXywgaW5kZXgsIHJvd19oaWdoX2xpbWl0LCByb3dfaGlnaF9saW1pdF9sYXN0KTsKIAogCQkvKiBFbXB0eSByb3cgW3AuNTddICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwppbmRleCA3ZWQwOGZkMS4uM2YwNGRkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9uZXQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAltZW1jcHkocGQtPnBidWYgKyBmcmFnX29mZiwgZnJhZ19idWYsIGZyYWdfbGVuKTsKIAogCS8qCi0JICogTW92ZSBsaXN0IGVudHJ5IHRvIGJlZ2lubmlnIG9mIGxpc3Qgc28gdGhhdCBvbGRlc3QgcGFydGlhbAorCSAqIE1vdmUgbGlzdCBlbnRyeSB0byBiZWdpbm5pbmcgb2YgbGlzdCBzbyB0aGF0IG9sZGVzdCBwYXJ0aWFsCiAJICogZGF0YWdyYW1zIHBlcmNvbGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAJICovCiAJbGlzdF9tb3ZlX3RhaWwoJnBkLT5wZF9saW5rLCAmcGVlci0+cGRfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IGY5MDNkN2I2Li4yM2QxNDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMjE5OSw3ICsyMTk5LDYgQEAKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUJVU1k7CiAJX19iZTMyICpuZXh0X2NvbmZpZ19yb207CiAJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihuZXh0X2NvbmZpZ19yb21fYnVzKTsKIApAQCAtMjI0MCwyMiArMjIzOSwzNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAorCS8qCisJICogSWYgdGhlcmUgaXMgbm90IGFuIGFscmVhZHkgcGVuZGluZyBjb25maWdfcm9tIHVwZGF0ZSwKKwkgKiBwdXNoIG91ciBuZXcgYWxsb2NhdGlvbiBpbnRvIHRoZSBvaGNpLT5uZXh0X2NvbmZpZ19yb20KKwkgKiBhbmQgdGhlbiBtYXJrIHRoZSBsb2NhbCB2YXJpYWJsZSBhcyBudWxsIHNvIHRoYXQgd2UKKwkgKiB3b24ndCBkZWFsbG9jYXRlIHRoZSBuZXcgYnVmZmVyLgorCSAqCisJICogT1RPSCwgaWYgdGhlcmUgaXMgYSBwZW5kaW5nIGNvbmZpZ19yb20gdXBkYXRlLCBqdXN0CisJICogdXNlIHRoYXQgYnVmZmVyIHdpdGggdGhlIG5ldyBjb25maWdfcm9tIGRhdGEsIGFuZAorCSAqIGxldCB0aGlzIHJvdXRpbmUgZnJlZSB0aGUgdW51c2VkIERNQSBhbGxvY2F0aW9uLgorCSAqLworCiAJaWYgKG9oY2ktPm5leHRfY29uZmlnX3JvbSA9PSBOVUxMKSB7CiAJCW9oY2ktPm5leHRfY29uZmlnX3JvbSA9IG5leHRfY29uZmlnX3JvbTsKIAkJb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyA9IG5leHRfY29uZmlnX3JvbV9idXM7Ci0KLQkJY29weV9jb25maWdfcm9tKG9oY2ktPm5leHRfY29uZmlnX3JvbSwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKLQotCQlvaGNpLT5uZXh0X2hlYWRlciA9IGNvbmZpZ19yb21bMF07Ci0JCW9oY2ktPm5leHRfY29uZmlnX3JvbVswXSA9IDA7Ci0KLQkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwKLQkJCSAgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7Ci0JCXJldCA9IDA7CisJCW5leHRfY29uZmlnX3JvbSA9IE5VTEw7CiAJfQogCisJY29weV9jb25maWdfcm9tKG9oY2ktPm5leHRfY29uZmlnX3JvbSwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKKworCW9oY2ktPm5leHRfaGVhZGVyID0gY29uZmlnX3JvbVswXTsKKwlvaGNpLT5uZXh0X2NvbmZpZ19yb21bMF0gPSAwOworCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKKwkvKiBJZiB3ZSBkaWRuJ3QgdXNlIHRoZSBETUEgYWxsb2NhdGlvbiwgZGVsZXRlIGl0LiAqLworCWlmIChuZXh0X2NvbmZpZ19yb20gIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKKwkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CisKIAkvKgogCSAqIE5vdyBpbml0aWF0ZSBhIGJ1cyByZXNldCB0byBoYXZlIHRoZSBjaGFuZ2VzIHRha2UKIAkgKiBlZmZlY3QuIFdlIGNsZWFuIHVwIHRoZSBvbGQgY29uZmlnIHJvbSBtZW1vcnkgYW5kIERNQQpAQCAtMjI2MywxMyArMjI3NywxMCBAQAogCSAqIGNvbnRyb2xsZXIgY291bGQgbmVlZCB0byBhY2Nlc3MgaXQgYmVmb3JlIHRoZSBidXMgcmVzZXQKIAkgKiB0YWtlcyBlZmZlY3QuCiAJICovCi0JaWYgKHJldCA9PSAwKQotCQlmd19zY2hlZHVsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIHRydWUsIHRydWUpOwotCWVsc2UKLQkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKLQkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CiAKLQlyZXR1cm4gcmV0OworCWZ3X3NjaGVkdWxlX2J1c19yZXNldCgmb2hjaS0+Y2FyZCwgdHJ1ZSwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgb2hjaV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYzMzODgwLmMgYi9kcml2ZXJzL2dwaW8vbWMzMzg4MC5jCmluZGV4IDAwZjZkMjQuLjRlYzc5NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYzMzODgwLmMKKysrIGIvZHJpdmVycy9ncGlvL21jMzM4ODAuYwpAQCAtNDUsNyArNDUsNyBAQAogICogVG8gc2F2ZSB0aW1lIHdlIGNhY2hlIHRoZW0gaGVyZSBpbiBtZW1vcnkKICAqLwogc3RydWN0IG1jMzM4ODAgewotCXN0cnVjdCBtdXRleAlsb2NrOwkvKiBwcm90ZWN0IGZyb20gc2ltdWx0YW5vdXMgYWNjZXNzZXMgKi8KKwlzdHJ1Y3QgbXV0ZXgJbG9jazsJLyogcHJvdGVjdCBmcm9tIHNpbXVsdGFuZW91cyBhY2Nlc3NlcyAqLwogCXU4CQlwb3J0X2NvbmZpZzsKIAlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tbF9pb2hfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL21sX2lvaF9ncGlvLmMKaW5kZXggN2Y2ZjAxYS4uMGE3NzVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21sX2lvaF9ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL21sX2lvaF9ncGlvLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCQlyZWdfdmFsIHw9ICgxIDw8IG5yKTsKIAllbHNlCiAJCXJlZ192YWwgJj0gfigxIDw8IG5yKTsKKwlpb3dyaXRlMzIocmVnX3ZhbCwgJmNoaXAtPnJlZy0+cmVnc1tjaGlwLT5jaF0ucG8pOwogCiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggNTgzZTkyNS4uNzYzMGFiN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtNTU4LDcgKzU1OCw3IEBACiAKIAlyZXQgPSBncGlvY2hpcF9hZGQoJmNoaXAtPmdwaW9fY2hpcCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfZmFpbGVkOworCQlnb3RvIG91dF9mYWlsZWRfaXJxOwogCiAJaWYgKHBkYXRhLT5zZXR1cCkgewogCQlyZXQgPSBwZGF0YS0+c2V0dXAoY2xpZW50LCBjaGlwLT5ncGlvX2NoaXAuYmFzZSwKQEAgLTU3MCw4ICs1NzAsOSBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwogCXJldHVybiAwOwogCi1vdXRfZmFpbGVkOgorb3V0X2ZhaWxlZF9pcnE6CiAJcGNhOTUzeF9pcnFfdGVhcmRvd24oY2hpcCk7CitvdXRfZmFpbGVkOgogCWtmcmVlKGNoaXAtPmR5bl9wZGF0YSk7CiAJa2ZyZWUoY2hpcCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2hfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL3BjaF9ncGlvLmMKaW5kZXggMmM2YWY4Ny4uZjk3MGE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BjaF9ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL3BjaF9ncGlvLmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogCQlyZWdfdmFsIHw9ICgxIDw8IG5yKTsKIAllbHNlCiAJCXJlZ192YWwgJj0gfigxIDw8IG5yKTsKKwlpb3dyaXRlMzIocmVnX3ZhbCwgJmNoaXAtPnJlZy0+cG8pOwogCiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCBhNmZlYjc4Yy4uYjQ5MzY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI0LDYgKzI0LDcgQEAKIAlkZXBlbmRzIG9uIERSTQogCXNlbGVjdCBGQgogCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFIGlmICFFWFBFUlQKKwlzZWxlY3QgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpZiBGUkFNRUJVRkZFUl9DT05TT0xFCiAJaGVscAogCSAgRkIgYW5kIENSVEMgaGVscGVycyBmb3IgS01TIGRyaXZlcnMuCiAKQEAgLTk2LDYgKzk3LDcgQEAKIAkjIGk5MTUgZGVwZW5kcyBvbiBBQ1BJX1ZJREVPIHdoZW4gQUNQSSBpcyBlbmFibGVkCiAJIyBidXQgZm9yIHNlbGVjdCB0byB3b3JrLCBuZWVkIHRvIHNlbGVjdCBBQ1BJX1ZJREVPJ3MgZGVwZW5kZW5jaWVzLCBpY2sKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRSBpZiBBQ1BJCisJc2VsZWN0IFZJREVPX09VVFBVVF9DT05UUk9MIGlmIEFDUEkKIAlzZWxlY3QgSU5QVVQgaWYgQUNQSQogCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkKIAlzZWxlY3QgQUNQSV9CVVRUT04gaWYgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCA3OTllMTQ5Li44NzI3NDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtMTY5OSw3ICsxNjk5LDcgQEAKIAogCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCi0JLyogVE9ETyBjaGVjayBidWZmZXIgaXMgc3VmZmljZW50bHkgbGFyZ2UgKi8KKwkvKiBUT0RPIGNoZWNrIGJ1ZmZlciBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKi8KIAkvKiBUT0RPIHNldHVwIGRlc3RydWN0b3IgY2FsbGJhY2sgKi8KIAogCWZiID0gZGV2LT5tb2RlX2NvbmZpZy5mdW5jcy0+ZmJfY3JlYXRlKGRldiwgZmlsZV9wcml2LCByKTsKQEAgLTE3NTAsNyArMTc1MCw3IEBACiAKIAltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsICppZCwgRFJNX01PREVfT0JKRUNUX0ZCKTsKLQkvKiBUT0RPIGNoZWNrIHRoYXQgd2UgcmVhbHkgZ2V0IGEgZnJhbWVidWZmZXIgYmFjay4gKi8KKwkvKiBUT0RPIGNoZWNrIHRoYXQgd2UgcmVhbGx5IGdldCBhIGZyYW1lYnVmZmVyIGJhY2suICovCiAJaWYgKCFvYmopIHsKIAkJRFJNX0VSUk9SKCJtb2RlIGludmFsaWQgZnJhbWVidWZmZXIgaWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCA5YzU5NWUzLi5hZGM5MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIC8qKgogICogU2VhcmNoIEVESUQgZm9yIENFQSBleHRlbnNpb24gYmxvY2suCiAgKi8KLXN0YXRpYyB1OCAqZHJtX2ZpbmRfY2VhX2V4dGVuc2lvbihzdHJ1Y3QgZWRpZCAqZWRpZCkKK3U4ICpkcm1fZmluZF9jZWFfZXh0ZW5zaW9uKHN0cnVjdCBlZGlkICplZGlkKQogewogCXU4ICplZGlkX2V4dCA9IE5VTEw7CiAJaW50IGk7CkBAIC0xMzE4LDYgKzEzMTgsNyBAQAogCiAJcmV0dXJuIGVkaWRfZXh0OwogfQorRVhQT1JUX1NZTUJPTChkcm1fZmluZF9jZWFfZXh0ZW5zaW9uKTsKIAogLyoqCiAgKiBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvciAtIGRldGVjdCB3aGV0aGVyIG1vbml0b3IgaXMgaGRtaS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDk1MDcyMDQuLjE0MGI5NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMzQyLDkgKzM0MiwyMiBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlKTsKIAorYm9vbCBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQoreworCWJvb2wgZXJyb3IgPSBmYWxzZTsKKwlpbnQgaSwgcmV0OworCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKwkJcmV0ID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcobW9kZV9zZXQpOworCQlpZiAocmV0KQorCQkJZXJyb3IgPSB0cnVlOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlKTsKKwogYm9vbCBkcm1fZmJfaGVscGVyX2ZvcmNlX2tlcm5lbF9tb2RlKHZvaWQpCiB7Ci0JaW50IGkgPSAwOwogCWJvb2wgcmV0LCBlcnJvciA9IGZhbHNlOwogCXN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXI7CiAKQEAgLTM1MiwxMiArMzY1LDEyIEBACiAJCXJldHVybiBmYWxzZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGVscGVyLCAma2VybmVsX2ZiX2hlbHBlcl9saXN0LCBrZXJuZWxfZmJfbGlzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwgaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKLQkJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0ID0gJmhlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0OwotCQkJcmV0ID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcobW9kZV9zZXQpOwotCQkJaWYgKHJldCkKLQkJCQllcnJvciA9IHRydWU7Ci0JCX0KKwkJaWYgKGhlbHBlci0+ZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPT0gRFJNX1NXSVRDSF9QT1dFUl9PRkYpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZShoZWxwZXIpOworCQlpZiAocmV0KQorCQkJZXJyb3IgPSB0cnVlOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xNTAzLDE3ICsxNTE2LDMzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcpOwogCi1ib29sIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQorLyoqCisgKiBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQgLSByZXNwb25kIHRvIGEgaG90cGx1ZyBub3RpZmljYXRpb24gYnkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JpbmcgYWxsIHRoZSBvdXRwdXRzIGF0dGFjaGVkIHRvIHRoZSBmYi4KKyAqIEBmYl9oZWxwZXI6IHRoZSBkcm1fZmJfaGVscGVyCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlZCBhdCBydW50aW1lLCBtdXN0IHRha2UgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBTY2FuIHRoZSBjb25uZWN0b3JzIGF0dGFjaGVkIHRvIHRoZSBmYl9oZWxwZXIgYW5kIHRyeSB0byBwdXQgdG9nZXRoZXIgYQorICogc2V0dXAgYWZ0ZXIgKm5vdGlmaWNhdGlvbiBvZiBhIGNoYW5nZSBpbiBvdXRwdXQgY29uZmlndXJhdGlvbi4KKyAqCisgKiBSRVRVUk5TOgorICogMCBvbiBzdWNjZXNzIGFuZCBhIG5vbi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OwogCWludCBjb3VudCA9IDA7CiAJdTMyIG1heF93aWR0aCwgbWF4X2hlaWdodCwgYnBwX3NlbDsKIAlib29sIGJvdW5kID0gZmFsc2UsIGNydGNzX2JvdW5kID0gZmFsc2U7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCiAJaWYgKCFmYl9oZWxwZXItPmZiKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAJCWlmIChjcnRjLT5mYikKIAkJCWNydGNzX2JvdW5kID0gdHJ1ZTsKIAkJaWYgKGNydGMtPmZiID09IGZiX2hlbHBlci0+ZmIpCkBAIC0xNTIyLDcgKzE1NTEsOCBAQAogCiAJaWYgKCFib3VuZCAmJiBjcnRjc19ib3VuZCkgewogCQlmYl9oZWxwZXItPmRlbGF5ZWRfaG90cGx1ZyA9IHRydWU7Ci0JCXJldHVybiBmYWxzZTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJcmV0dXJuIDA7CiAJfQogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKQEAgLTE1MzMsNiArMTU2Myw3IEBACiAJY291bnQgPSBkcm1fZmJfaGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhmYl9oZWxwZXIsIG1heF93aWR0aCwKIAkJCQkJCSAgICBtYXhfaGVpZ2h0KTsKIAlkcm1fc2V0dXBfY3J0Y3MoZmJfaGVscGVyKTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCiAJcmV0dXJuIGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGZiX2hlbHBlciwgYnBwX3NlbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCA3NDE0NTdiLi5hMWYxMmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTkzMiwxMSArOTMyLDM0IEBACiAKIHZvaWQgZHJtX3ZibGFua19vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSwgKnQ7CisJc3RydWN0IHRpbWV2YWwgbm93OwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdW5zaWduZWQgaW50IHNlcTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CiAJdmJsYW5rX2Rpc2FibGVfYW5kX3NhdmUoZGV2LCBjcnRjKTsKIAlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZVtjcnRjXSk7CisKKwkvKiBTZW5kIGFueSBxdWV1ZWQgdmJsYW5rIGV2ZW50cywgbGVzdCB0aGUgbmF0aXZlcyBncm93IGRpc3F1aWV0ICovCisJc2VxID0gZHJtX3ZibGFua19jb3VudF9hbmRfdGltZShkZXYsIGNydGMsICZub3cpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCB0LCAmZGV2LT52YmxhbmtfZXZlbnRfbGlzdCwgYmFzZS5saW5rKSB7CisJCWlmIChlLT5waXBlICE9IGNydGMpCisJCQljb250aW51ZTsKKwkJRFJNX0RFQlVHKCJTZW5kaW5nIHByZW1hdHVyZSB2YmxhbmsgZXZlbnQgb24gZGlzYWJsZTogXAorCQkJICB3YW50ZWQgJWQsIGN1cnJlbnQgJWRcbiIsCisJCQkgIGUtPmV2ZW50LnNlcXVlbmNlLCBzZXEpOworCisJCWUtPmV2ZW50LnNlcXVlbmNlID0gc2VxOworCQllLT5ldmVudC50dl9zZWMgPSBub3cudHZfc2VjOworCQllLT5ldmVudC50dl91c2VjID0gbm93LnR2X3VzZWM7CisJCWRybV92YmxhbmtfcHV0KGRldiwgZS0+cGlwZSk7CisJCWxpc3RfbW92ZV90YWlsKCZlLT5iYXNlLmxpbmssICZlLT5iYXNlLmZpbGVfcHJpdi0+ZXZlbnRfbGlzdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZS0+YmFzZS5maWxlX3ByaXYtPmV2ZW50X3dhaXQpOworCQl0cmFjZV9kcm1fdmJsYW5rX2V2ZW50X2RlbGl2ZXJlZChlLT5iYXNlLnBpZCwgZS0+cGlwZSwKKwkJCQkJCSBlLT5ldmVudC5zZXF1ZW5jZSk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX29mZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggYWRkMTczNy4uOTU5MTg2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwpAQCAtNDMxLDcgKzQzMSw3IEBACiB2b2lkIGRybV9tbV9yZXBsYWNlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpvbGQsIHN0cnVjdCBkcm1fbW1fbm9kZSAqbmV3KQogewogCWxpc3RfcmVwbGFjZSgmb2xkLT5ub2RlX2xpc3QsICZuZXctPm5vZGVfbGlzdCk7Ci0JbGlzdF9yZXBsYWNlKCZvbGQtPm5vZGVfbGlzdCwgJm5ldy0+aG9sZV9zdGFjayk7CisJbGlzdF9yZXBsYWNlKCZvbGQtPmhvbGVfc3RhY2ssICZuZXctPmhvbGVfc3RhY2spOwogCW5ldy0+aG9sZV9mb2xsb3dzID0gb2xkLT5ob2xlX2ZvbGxvd3M7CiAJbmV3LT5tbSA9IG9sZC0+bW07CiAJbmV3LT5zdGFydCA9IG9sZC0+c3RhcnQ7CkBAIC01NTEsNyArNTUxLDcgQEAKICAqIGNvcnJ1cHRlZC4KICAqCiAgKiBXaGVuIHRoZSBzY2FuIGxpc3QgaXMgZW1wdHksIHRoZSBzZWxlY3RlZCBtZW1vcnkgbm9kZXMgY2FuIGJlIGZyZWVkLiBBbgotICogaW1tZWRpYXRseSBmb2xsb3dpbmcgZHJtX21tX3NlYXJjaF9mcmVlIHdpdGggYmVzdF9tYXRjaCA9IDAgd2lsbCB0aGVuIHJldHVybgorICogaW1tZWRpYXRlbHkgZm9sbG93aW5nIGRybV9tbV9zZWFyY2hfZnJlZSB3aXRoIGJlc3RfbWF0Y2ggPSAwIHdpbGwgdGhlbiByZXR1cm4KICAqIHRoZSBqdXN0IGZyZWVkIGJsb2NrIChiZWNhdXNlIGl0cyBhdCB0aGUgdG9wIG9mIHRoZSBmcmVlX3N0YWNrIGxpc3QpLgogICoKICAqIFJldHVybnMgb25lIGlmIHRoaXMgYmxvY2sgc2hvdWxkIGJlIGV2aWN0ZWQsIHplcm8gb3RoZXJ3aXNlLiBXaWxsIGFsd2F5cwpAQCAtNjk5LDggKzY5OSw4IEBACiAJCQkJZW50cnktPnNpemUpOwogCQl0b3RhbF91c2VkICs9IGVudHJ5LT5zaXplOwogCQlpZiAoZW50cnktPmhvbGVfZm9sbG93cykgewotCQkJaG9sZV9zdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoJm1tLT5oZWFkX25vZGUpOwotCQkJaG9sZV9lbmQgPSBkcm1fbW1faG9sZV9ub2RlX2VuZCgmbW0tPmhlYWRfbm9kZSk7CisJCQlob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFydChlbnRyeSk7CisJCQlob2xlX2VuZCA9IGRybV9tbV9ob2xlX25vZGVfZW5kKGVudHJ5KTsKIAkJCWhvbGVfc2l6ZSA9IGhvbGVfZW5kIC0gaG9sZV9zdGFydDsKIAkJCXNlcV9wcmludGYobSwgIjB4JTA4bHgtMHglMDhseDogMHglMDhseDogZnJlZVxuIiwKIAkJCQkJaG9sZV9zdGFydCwgaG9sZV9lbmQsIGhvbGVfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA3MjczMDM3Li4xMjg3NmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTIyMDcsNyArMjIwNyw3IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlpZiAoIWRldl9wcml2IHx8IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJZHJtX2ZiX2hlbHBlcl9yZXN0b3JlKCk7CisJCWludGVsX2ZiX3Jlc3RvcmVfbW9kZShkZXYpOwogCQl2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBjMzRhOGRkLi4zMmQxYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHVuc2lnbmVkIGludCBpOTE1X3Bvd2Vyc2F2ZSA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQocG93ZXJzYXZlLCBpOTE1X3Bvd2Vyc2F2ZSwgaW50LCAwNjAwKTsKIAotdW5zaWduZWQgaW50IGk5MTVfc2VtYXBob3JlcyA9IDE7Cit1bnNpZ25lZCBpbnQgaTkxNV9zZW1hcGhvcmVzID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChzZW1hcGhvcmVzLCBpOTE1X3NlbWFwaG9yZXMsIGludCwgMDYwMCk7CiAKIHVuc2lnbmVkIGludCBpOTE1X2VuYWJsZV9yYzYgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNTAwNDcyNC4uMWMxYjI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC02MzAsNyArNjMwLDcgQEAKIAkJICogRmxhZyBpZiB0aGUgaGFyZHdhcmUgYXBwZWFycyB0byBiZSB3ZWRnZWQuCiAJCSAqCiAJCSAqIFRoaXMgaXMgc2V0IHdoZW4gYXR0ZW1wdHMgdG8gaWRsZSB0aGUgZGV2aWNlIHRpbWVvdXQuCi0JCSAqIEl0IHByZXZlbnRzIGNvbW1hbmQgc3VibWlzc2lvbiBmcm9tIG9jY3VyaW5nIGFuZCBtYWtlcworCQkgKiBJdCBwcmV2ZW50cyBjb21tYW5kIHN1Ym1pc3Npb24gZnJvbSBvY2N1cnJpbmcgYW5kIG1ha2VzCiAJCSAqIGV2ZXJ5IHBlbmRpbmcgcmVxdWVzdCBmYWlsCiAJCSAqLwogCQlhdG9taWNfdCB3ZWRnZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDgzNDIyNTkuLmQwM2ZjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0yNjksMjEgKzI2OSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgaW50ZWxfY3J0X2RkY19wcm9iZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBkZGNfYnVzKQotewotCXU4IGJ1ZjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXsKLQkJCS5hZGRyID0gMHhBMCwKLQkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gMSwKLQkJCS5idWYgPSAmYnVmLAotCQl9LAotCX07Ci0JLyogRERDIG1vbml0b3IgZGV0ZWN0OiBEb2VzIGl0IEFDSyBhIHdyaXRlIHRvIDB4QTA/ICovCi0JcmV0dXJuIGkyY190cmFuc2ZlcigmZGV2X3ByaXYtPmdtYnVzW2RkY19idXNdLmFkYXB0ZXIsIG1zZ3MsIDEpID09IDE7Ci19Ci0KIHN0YXRpYyBib29sIGludGVsX2NydF9kZXRlY3RfZGRjKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGludGVsX2NydCAqY3J0ID0gaW50ZWxfYXR0YWNoZWRfY3J0KGNvbm5lY3Rvcik7CkBAIC0yOTMsMTEgKzI3OCw2IEBACiAJaWYgKGNydC0+YmFzZS50eXBlICE9IElOVEVMX09VVFBVVF9BTkFMT0cpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChpbnRlbF9jcnRfZGRjX3Byb2JlKGRldl9wcml2LCBkZXZfcHJpdi0+Y3J0X2RkY19waW4pKSB7Ci0JCURSTV9ERUJVR19LTVMoIkNSVCBkZXRlY3RlZCB2aWEgRERDOjB4YTBcbiIpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KIAlpZiAoaW50ZWxfZGRjX3Byb2JlKCZjcnQtPmJhc2UsIGRldl9wcml2LT5jcnRfZGRjX3BpbikpIHsKIAkJc3RydWN0IGVkaWQgKmVkaWQ7CiAJCWJvb2wgaXNfZGlnaXRhbCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDQzMmZjMDQuLjIxNjZlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM3NzEsOCArMzc3MSwxMSBAQAogCWludCBlbnRyaWVzLCB0bGJfbWlzczsKIAogCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGxhbmUoZGV2LCBwbGFuZSk7Ci0JaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpCisJaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpIHsKKwkJKmN1cnNvcl93bSA9IGN1cnNvci0+Z3VhcmRfc2l6ZTsKKwkJKnBsYW5lX3dtID0gZGlzcGxheS0+Z3VhcmRfc2l6ZTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCWh0b3RhbCA9IGNydGMtPm1vZGUuaHRvdGFsOwogCWhkaXNwbGF5ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKQEAgLTU2MDIsOSArNTYwNSw5IEBACiAJaW50ZWxfY2xvY2tfdCBjbG9jazsKIAogCWlmICgoZHBsbCAmIERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMSkgPT0gMCkKLQkJZnAgPSBGUDAocGlwZSk7CisJCWZwID0gSTkxNV9SRUFEKEZQMChwaXBlKSk7CiAJZWxzZQotCQlmcCA9IEZQMShwaXBlKTsKKwkJZnAgPSBJOTE1X1JFQUQoRlAxKHBpcGUpKTsKIAogCWNsb2NrLm0xID0gKGZwICYgRlBfTTFfRElWX01BU0spID4+IEZQX00xX0RJVl9TSElGVDsKIAlpZiAoSVNfUElORVZJRVcoZGV2KSkgewpAQCAtNjIxNSwzNiArNjIxOCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0JLyogUmVzZXQgZmxhZ3MgYmFjayB0byB0aGUgJ3Vua25vd24nIHN0YXR1cyBzbyB0aGF0IHRoZXkKLQkgKiB3aWxsIGJlIGNvcnJlY3RseSBzZXQgb24gdGhlIGluaXRpYWwgbW9kZXNldC4KLQkgKi8KLQlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNzID0gewotCS5kcG1zID0gaW50ZWxfY3J0Y19kcG1zLAotCS5tb2RlX2ZpeHVwID0gaW50ZWxfY3J0Y19tb2RlX2ZpeHVwLAotCS5tb2RlX3NldCA9IGludGVsX2NydGNfbW9kZV9zZXQsCi0JLm1vZGVfc2V0X2Jhc2UgPSBpbnRlbF9waXBlX3NldF9iYXNlLAotCS5tb2RlX3NldF9iYXNlX2F0b21pYyA9IGludGVsX3BpcGVfc2V0X2Jhc2VfYXRvbWljLAotCS5sb2FkX2x1dCA9IGludGVsX2NydGNfbG9hZF9sdXQsCi0JLmRpc2FibGUgPSBpbnRlbF9jcnRjX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGludGVsX2NydGNfZnVuY3MgPSB7Ci0JLnJlc2V0ID0gaW50ZWxfY3J0Y19yZXNldCwKLQkuY3Vyc29yX3NldCA9IGludGVsX2NydGNfY3Vyc29yX3NldCwKLQkuY3Vyc29yX21vdmUgPSBpbnRlbF9jcnRjX2N1cnNvcl9tb3ZlLAotCS5nYW1tYV9zZXQgPSBpbnRlbF9jcnRjX2dhbW1hX3NldCwKLQkuc2V0X2NvbmZpZyA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnLAotCS5kZXN0cm95ID0gaW50ZWxfY3J0Y19kZXN0cm95LAotCS5wYWdlX2ZsaXAgPSBpbnRlbF9jcnRjX3BhZ2VfZmxpcCwKLX07Ci0KIHN0YXRpYyB2b2lkIGludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIGludCBwaXBlLCBpbnQgcGxhbmUpCiB7CkBAIC02MjgxLDYgKzYyNTQsNDIgQEAKIAlpbnRlbF9kaXNhYmxlX3BpcGUoZGV2X3ByaXYsIHBpcGUpOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKworCS8qIFJlc2V0IGZsYWdzIGJhY2sgdG8gdGhlICd1bmtub3duJyBzdGF0dXMgc28gdGhhdCB0aGV5CisJICogd2lsbCBiZSBjb3JyZWN0bHkgc2V0IG9uIHRoZSBpbml0aWFsIG1vZGVzZXQuCisJICovCisJaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gLTE7CisKKwkvKiBXZSBuZWVkIHRvIGZpeCB1cCBhbnkgQklPUyBjb25maWd1cmF0aW9uIHRoYXQgY29uZmxpY3RzIHdpdGgKKwkgKiBvdXIgZXhwZWN0YXRpb25zLgorCSAqLworCWludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgaW50ZWxfY3J0Yy0+cGxhbmUpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBpbnRlbF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gaW50ZWxfY3J0Y19tb2RlX3NldCwKKwkubW9kZV9zZXRfYmFzZSA9IGludGVsX3BpcGVfc2V0X2Jhc2UsCisJLm1vZGVfc2V0X2Jhc2VfYXRvbWljID0gaW50ZWxfcGlwZV9zZXRfYmFzZV9hdG9taWMsCisJLmxvYWRfbHV0ID0gaW50ZWxfY3J0Y19sb2FkX2x1dCwKKwkuZGlzYWJsZSA9IGludGVsX2NydGNfZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRjX3Jlc2V0LAorCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAorCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCisJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LAorCS5zZXRfY29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcsCisJLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ksCisJLnBhZ2VfZmxpcCA9IGludGVsX2NydGNfcGFnZV9mbGlwLAorfTsKKwogc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNjMzMCw4ICs2MzM5LDYgQEAKIAogCXNldHVwX3RpbWVyKCZpbnRlbF9jcnRjLT5pZGxlX3RpbWVyLCBpbnRlbF9jcnRjX2lkbGVfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZylpbnRlbF9jcnRjKTsKLQotCWludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgaW50ZWxfY3J0Yy0+cGxhbmUpOwogfQogCiBpbnQgaW50ZWxfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC02NTcyLDggKzY1NzksMTAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKIAlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCppbnRlbF9mYiksIEdGUF9LRVJORUwpOwotCWlmICghaW50ZWxfZmIpCisJaWYgKCFpbnRlbF9mYikgeworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCiAJcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfaW5pdChkZXYsIGludGVsX2ZiLCBtb2RlX2NtZCwgb2JqKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCAwZGFlZmNhLi5hNGQ4MDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQkJcmV0dXJuIE1PREVfUEFORUw7CiAJfQogCi0JLyogb25seSByZWZ1c2UgdGhlIG1vZGUgb24gbm9uIGVEUCBzaW5jZSB3ZSBoYXZlIHNlZW4gc29tZSB3aWVyZCBlRFAgcGFuZWxzCisJLyogb25seSByZWZ1c2UgdGhlIG1vZGUgb24gbm9uIGVEUCBzaW5jZSB3ZSBoYXZlIHNlZW4gc29tZSB3ZWlyZCBlRFAgcGFuZWxzCiAJICAgd2hpY2ggYXJlIG91dHNpZGUgc3BlYyB0b2xlcmFuY2VzIGJ1dCBzb21laG93IHdvcmsgYnkgbWFnaWMgKi8KIAlpZiAoIWlzX2VkcChpbnRlbF9kcCkgJiYKIAkgICAgKGludGVsX2RwX2xpbmtfcmVxdWlyZWQoY29ubmVjdG9yLT5kZXYsIGludGVsX2RwLCBtb2RlLT5jbG9jaykKQEAgLTE0NzAsNyArMTQ3MCw4IEBACiAKIAlpZiAoIUhBU19QQ0hfQ1BUKGRldikgJiYKIAkgICAgSTkxNV9SRUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX1BJUEVCX1NFTEVDVCkgewotCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoaW50ZWxfZHAtPmJhc2UuYmFzZS5jcnRjKTsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gaW50ZWxfZHAtPmJhc2UuYmFzZS5jcnRjOworCiAJCS8qIEhhcmR3YXJlIHdvcmthcm91bmQ6IGxlYXZpbmcgb3VyIHRyYW5zY29kZXIgc2VsZWN0CiAJCSAqIHNldCB0byB0cmFuc2NvZGVyIEIgd2hpbGUgaXQncyBvZmYgd2lsbCBwcmV2ZW50IHRoZQogCQkgKiBjb3JyZXNwb25kaW5nIEhETUkgb3V0cHV0IG9uIHRyYW5zY29kZXIgQS4KQEAgLTE0ODUsNyArMTQ4NiwxOSBAQAogCQkvKiBDaGFuZ2VzIHRvIGVuYWJsZSBvciBzZWxlY3QgdGFrZSBwbGFjZSB0aGUgdmJsYW5rCiAJCSAqIGFmdGVyIGJlaW5nIHdyaXR0ZW4uCiAJCSAqLwotCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBpbnRlbF9jcnRjLT5waXBlKTsKKwkJaWYgKGNydGMgPT0gTlVMTCkgeworCQkJLyogV2UgY2FuIGFycml2ZSBoZXJlIG5ldmVyIGhhdmluZyBiZWVuIGF0dGFjaGVkCisJCQkgKiB0byBhIENSVEMsIGZvciBpbnN0YW5jZSwgZHVlIHRvIGluaGVyaXRpbmcKKwkJCSAqIHJhbmRvbSBzdGF0ZSBmcm9tIHRoZSBCSU9TLgorCQkJICoKKwkJCSAqIElmIHRoZSBwaXBlIGlzIG5vdCBydW5uaW5nLCBwbGF5IHNhZmUgYW5kCisJCQkgKiB3YWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGlzZSBiZWZvcmUKKwkJCSAqIGNvbnRpbnVpbmcuCisJCQkgKi8KKwkJCVBPU1RJTkdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisJCQltc2xlZXAoNTApOworCQl9IGVsc2UKKwkJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGUpOwogCX0KIAogCUk5MTVfV1JJVEUoaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQICYgfkRQX1BPUlRfRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCA1ZGFhOTkxLi4xZDIwNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMzksNyArMzksNyBAQAogCQkJcmV0X18gPSAtRVRJTUVET1VUOwkJCQlcCiAJCQlicmVhazsJCQkJCQlcCiAJCX0JCQkJCQkJXAotCQlpZiAoVyAmJiAhaW5fZGJnX21hc3RlcigpKSBtc2xlZXAoVyk7CQkJXAorCQlpZiAoVyAmJiAhKGluX2F0b21pYygpIHx8IGluX2RiZ19tYXN0ZXIoKSkpIG1zbGVlcChXKTsJXAogCX0JCQkJCQkJCVwKIAlyZXRfXzsJCQkJCQkJCVwKIH0pCkBAIC0zMzgsNCArMzM4LDUgQEAKIAkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKIGV4dGVybiB2b2lkIGludGVsX2ZiX291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9mYl9yZXN0b3JlX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAjZW5kaWYgLyogX19JTlRFTF9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCA1MTI3ODI3Li5lYzQ5YmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTI2NCwzICsyNjQsMTMgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoJmRldl9wcml2LT5mYmRldi0+aGVscGVyKTsKIH0KKwordm9pZCBpbnRlbF9mYl9yZXN0b3JlX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21vZGUoJmRldl9wcml2LT5mYmRldi0+aGVscGVyKTsKKwlpZiAocmV0KQorCQlEUk1fREVCVUcoImZhaWxlZCB0byByZXN0b3JlIGNydGMgbW9kZVxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCmluZGV4IDgyZDA0YzUuLmQzYjkwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAkJCQlpZiAod2FpdF9mb3IoSTkxNV9SRUFEKEdNQlVTMiArIHJlZ19vZmZzZXQpICYgKEdNQlVTX1NBVE9FUiB8IEdNQlVTX0hXX1JEWSksIDUwKSkKIAkJCQkJZ290byB0aW1lb3V0OwogCQkJCWlmIChJOTE1X1JFQUQoR01CVVMyICsgcmVnX29mZnNldCkgJiBHTUJVU19TQVRPRVIpCi0JCQkJCXJldHVybiAwOworCQkJCQlnb3RvIGNsZWFyX2VycjsKIAogCQkJCXZhbCA9IEk5MTVfUkVBRChHTUJVUzMgKyByZWdfb2Zmc2V0KTsKIAkJCQlkbyB7CkBAIC0yODcsNyArMjg3LDcgQEAKIAkJCQlpZiAod2FpdF9mb3IoSTkxNV9SRUFEKEdNQlVTMiArIHJlZ19vZmZzZXQpICYgKEdNQlVTX1NBVE9FUiB8IEdNQlVTX0hXX1JEWSksIDUwKSkKIAkJCQkJZ290byB0aW1lb3V0OwogCQkJCWlmIChJOTE1X1JFQUQoR01CVVMyICsgcmVnX29mZnNldCkgJiBHTUJVU19TQVRPRVIpCi0JCQkJCXJldHVybiAwOworCQkJCQlnb3RvIGNsZWFyX2VycjsKIAogCQkJCXZhbCA9IGxvb3AgPSAwOwogCQkJCWRvIHsKQEAgLTMwMiwxNCArMzAyLDMxIEBACiAJCWlmIChpICsgMSA8IG51bSAmJiB3YWl0X2ZvcihJOTE1X1JFQUQoR01CVVMyICsgcmVnX29mZnNldCkgJiAoR01CVVNfU0FUT0VSIHwgR01CVVNfSFdfV0FJVF9QSEFTRSksIDUwKSkKIAkJCWdvdG8gdGltZW91dDsKIAkJaWYgKEk5MTVfUkVBRChHTUJVUzIgKyByZWdfb2Zmc2V0KSAmIEdNQlVTX1NBVE9FUikKLQkJCXJldHVybiAwOworCQkJZ290byBjbGVhcl9lcnI7CiAJfQogCi0JcmV0dXJuIG51bTsKKwlnb3RvIGRvbmU7CisKK2NsZWFyX2VycjoKKwkvKiBUb2dnbGUgdGhlIFNvZnR3YXJlIENsZWFyIEludGVycnVwdCBiaXQuIFRoaXMgaGFzIHRoZSBlZmZlY3QKKwkgKiBvZiByZXNldHRpbmcgdGhlIEdNQlVTIGNvbnRyb2xsZXIgYW5kIHNvIGNsZWFyaW5nIHRoZQorCSAqIEJVU19FUlJPUiByYWlzZWQgYnkgdGhlIHNsYXZlJ3MgTkFLLgorCSAqLworCUk5MTVfV1JJVEUoR01CVVMxICsgcmVnX29mZnNldCwgR01CVVNfU1dfQ0xSX0lOVCk7CisJSTkxNV9XUklURShHTUJVUzEgKyByZWdfb2Zmc2V0LCAwKTsKKworZG9uZToKKwkvKiBNYXJrIHRoZSBHTUJVUyBpbnRlcmZhY2UgYXMgZGlzYWJsZWQuIFdlIHdpbGwgcmUtZW5hYmxlIGl0IGF0IHRoZQorCSAqIHN0YXJ0IG9mIHRoZSBuZXh0IHhmZXIsIHRpbGwgdGhlbiBsZXQgaXQgc2xlZXAuCisJICovCisJSTkxNV9XUklURShHTUJVUzAgKyByZWdfb2Zmc2V0LCAwKTsKKwlyZXR1cm4gaTsKIAogdGltZW91dDoKIAlEUk1fSU5GTygiR01CVVMgdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gYml0IGJhbmdpbmcgb24gcGluICVkIFslc11cbiIsCiAJCSBidXMtPnJlZzAgJiAweGZmLCBidXMtPmFkYXB0ZXIubmFtZSk7CisJSTkxNV9XUklURShHTUJVUzAgKyByZWdfb2Zmc2V0LCAwKTsKKwogCS8qIEhhcmR3YXJlIG1heSBub3Qgc3VwcG9ydCBHTUJVUyBvdmVyIHRoZXNlIHBpbnM/IFRyeSBHUElPIGJpdGJhbmdpbmcgaW5zdGVhZC4gKi8KIAlidXMtPmZvcmNlX2JpdCA9IGludGVsX2dwaW9fY3JlYXRlKGRldl9wcml2LCBidXMtPnJlZzAgJiAweGZmKTsKIAlpZiAoIWJ1cy0+Zm9yY2VfYml0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDFhMzExYWQuLjY3Y2IwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTQ3MywxOSArNDczLDEzIEBACiBpbnRlbF9sdmRzX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwogCiAJc3RhdHVzID0gaW50ZWxfcGFuZWxfZGV0ZWN0KGRldik7CiAJaWYgKHN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd24pCiAJCXJldHVybiBzdGF0dXM7CiAKLQkvKiBBQ1BJIGxpZCBtZXRob2RzIHdlcmUgZ2VuZXJhbGx5IHVucmVsaWFibGUgaW4gdGhpcyBnZW5lcmF0aW9uLCBzbwotCSAqIGRvbid0IGV2ZW4gYm90aGVyLgotCSAqLwotCWlmIChJU19HRU4yKGRldikgfHwgSVNfR0VOMyhkZXYpKQotCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0KLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIH0KIAogLyoqCkBAIC01NDUsNiArNTM5LDkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gZGV2X3ByaXYtPmludF9sdmRzX2Nvbm5lY3RvcjsKIAorCWlmIChkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSAhPSBEUk1fU1dJVENIX1BPV0VSX09OKQorCQlyZXR1cm4gTk9USUZZX09LOworCiAJLyoKIAkgKiBjaGVjayBhbmQgdXBkYXRlIHRoZSBzdGF0dXMgb2YgTFZEUyBjb25uZWN0b3IgYWZ0ZXIgcmVjZWl2aW5nCiAJICogdGhlIExJRCBub2ZpY2F0aW9uIGV2ZW50LgpAQCAtODM1LDI1ICs4MzIsNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaW50ZWxfbHZkc19kZGNfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTggcGluKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTggYnVmID0gMDsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXsKLQkJCS5hZGRyID0gMHhBMCwKLQkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gMSwKLQkJCS5idWYgPSAmYnVmLAotCQl9LAotCX07Ci0Jc3RydWN0IGkyY19hZGFwdGVyICppMmMgPSAmZGV2X3ByaXYtPmdtYnVzW3Bpbl0uYWRhcHRlcjsKLQkvKiBYWFggdGhpcyBvbmx5IGFwcGVhcnMgdG8gd29yayB3aGVuIHVzaW5nIEdNQlVTICovCi0JaWYgKGludGVsX2dtYnVzX2lzX2ZvcmNlZF9iaXQoaTJjKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGkyY190cmFuc2ZlcihpMmMsIG1zZ3MsIDEpID09IDE7Ci19Ci0KIC8qKgogICogaW50ZWxfbHZkc19pbml0IC0gc2V0dXAgTFZEUyBjb25uZWN0b3JzIG9uIHRoaXMgZGV2aWNlCiAgKiBAZGV2OiBkcm0gZGV2aWNlCkBAIC04OTQsMTEgKzg3Miw2IEBACiAJCX0KIAl9CiAKLQlpZiAoIWludGVsX2x2ZHNfZGRjX3Byb2JlKGRldiwgcGluKSkgewotCQlEUk1fREVCVUdfS01TKCJMVkRTIGRpZCBub3QgcmVzcG9uZCB0byBEREMgcHJvYmVcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJaW50ZWxfbHZkcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9sdmRzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbnRlbF9sdmRzKSB7CiAJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2b19yZWdzLmgKaW5kZXggYTM4NmIwMi4uNGY0ZTIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2b19yZWdzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2b19yZWdzLmgKQEAgLTIzMCw3ICsyMzAsNyBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoqCi0gKiBUYWtlcyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiB3aGljaCBvdXRwdXRzIGFyZSB0YXJnZXR0ZWQgYnkKKyAqIFRha2VzIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIHdoaWNoIG91dHB1dHMgYXJlIHRhcmdldGVkIGJ5CiAgKiBmdXR1cmUgb3V0cHV0IGNvbW1hbmRzLgogICoKICAqIEFmZmVjdGVkIGNvbW1hbmRzIGluY2x1ZSBTRVRfT1VUUFVUX1RJTUlOR1NfUEFSVFsxMl0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwppbmRleCA0MjU2YjhlZi4uNmIyMmMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCkBAIC0xMTUxLDEwICsxMTUxLDEwIEBACiAJCQkgICAgKHZpZGVvX2xldmVscy0+YmxhbmsgPDwgVFZfQkxBTktfTEVWRUxfU0hJRlQpKSk7CiAJewogCQlpbnQgcGlwZWNvbmZfcmVnID0gUElQRUNPTkYocGlwZSk7Ci0JCWludCBkc3BjbnRyX3JlZyA9IERTUENOVFIocGlwZSk7CisJCWludCBkc3BjbnRyX3JlZyA9IERTUENOVFIoaW50ZWxfY3J0Yy0+cGxhbmUpOwogCQlpbnQgcGlwZWNvbmYgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKIAkJaW50IGRzcGNudHIgPSBJOTE1X1JFQUQoZHNwY250cl9yZWcpOwotCQlpbnQgZHNwYmFzZV9yZWcgPSBEU1BBRERSKHBpcGUpOworCQlpbnQgZHNwYmFzZV9yZWcgPSBEU1BBRERSKGludGVsX2NydGMtPnBsYW5lKTsKIAkJaW50IHhwb3MgPSAweDAsIHlwb3MgPSAweDA7CiAJCXVuc2lnbmVkIGludCB4c2l6ZSwgeXNpemU7CiAJCS8qIFBpcGUgbXVzdCBiZSBvZmYgaGVyZSAqLwpAQCAtMTM3OCw3ICsxMzc4LDkgQEAKIAlpZiAodHlwZSA8IDApCiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAorCWludGVsX3R2LT50eXBlID0gdHlwZTsKIAlpbnRlbF90dl9maW5kX2JldHRlcl9mb3JtYXQoY29ubmVjdG9yKTsKKwogCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIH0KIApAQCAtMTY3MCw4ICsxNjcyLDcgQEAKIAkgKgogCSAqIE1vcmUgcmVjZW50IGNoaXBzZXRzIGZhdm91ciBIRE1JIHJhdGhlciB0aGFuIGludGVncmF0ZWQgUy1WaWRlby4KIAkgKi8KLQljb25uZWN0b3ItPnBvbGxlZCA9Ci0JCURSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUIHwgRFJNX0NPTk5FQ1RPUl9QT0xMX0RJU0NPTk5FQ1Q7CisJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVDsKIAogCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJmludGVsX3R2X2Nvbm5lY3Rvcl9mdW5jcywKIAkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYwppbmRleCAxZTFlYjFkLi41Y2NiNjVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogICogQm9vdHN0cmFwIHRoZSBkcml2ZXIgZm9yIEFHUCBETUEuCiAgKgogICogXHRvZG8KLSAqIEludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUgaXMgYW55IGJlbmlmaXQgdG8gc3RvcmluZyB0aGUgV0FSUCBtaWNyb2NvZGUgaW4KKyAqIEludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUgaXMgYW55IGJlbmVmaXQgdG8gc3RvcmluZyB0aGUgV0FSUCBtaWNyb2NvZGUgaW4KICAqIEFHUCBtZW1vcnkuICBJZiBub3QsIHRoZSBtaWNyb2NvZGUgbWF5IGFzIHdlbGwgYWx3YXlzIGJlIHB1dCBpbiBQQ0kKICAqIG1lbW9yeS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCmluZGV4IDgzMTRhNDkuLjkwYWVmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC0yNjksNyArMjY5LDcgQEAKIAlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgbnZiaW9zICosIHVpbnQxNl90LCBzdHJ1Y3QgaW5pdF9leGVjICopOwogfTsKIAotc3RhdGljIGludCBwYXJzZV9pbml0X3RhYmxlKHN0cnVjdCBudmJpb3MgKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgaW5pdF9leGVjICopOworc3RhdGljIGludCBwYXJzZV9pbml0X3RhYmxlKHN0cnVjdCBudmJpb3MgKiwgdWludDE2X3QsIHN0cnVjdCBpbml0X2V4ZWMgKik7CiAKICNkZWZpbmUgTUFDUk9fSU5ERVhfU0laRQkyCiAjZGVmaW5lIE1BQ1JPX1NJWkUJCTgKQEAgLTIwMTEsNiArMjAxMSwyNyBAQAogfQogCiBzdGF0aWMgaW50Citpbml0X2p1bXAoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKK3sKKwkvKgorCSAqIElOSVRfSlVNUCAgIG9wY29kZTogMHg1QyAoJ1wnKQorCSAqCisJICogb2Zmc2V0ICAgICAgKDggIGJpdCk6IG9wY29kZQorCSAqIG9mZnNldCArIDEgICgxNiBiaXQpOiBvZmZzZXQgKGluIGJpb3MpCisJICoKKwkgKiBDb250aW51ZSBleGVjdXRpb24gb2YgaW5pdCB0YWJsZSBmcm9tICdvZmZzZXQnCisJICovCisKKwl1aW50MTZfdCBqbXBfb2Zmc2V0ID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7CisKKwlpZiAoIWlleGVjLT5leGVjdXRlKQorCQlyZXR1cm4gMzsKKworCUJJT1NMT0coYmlvcywgIjB4JTA0WDogSnVtcCB0byAweCUwNFhcbiIsIG9mZnNldCwgam1wX29mZnNldCk7CisJcmV0dXJuIGptcF9vZmZzZXQgLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQKIGluaXRfaTJjX2lmKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTM2NTksNiArMzY4MCw3IEBACiAJeyAiSU5JVF9aTV9SRUdfU0VRVUVOQ0UiICAgICAgICAgICAgICAsIDB4NTgsIGluaXRfem1fcmVnX3NlcXVlbmNlICAgICAgICAgICAgfSwKIAkvKiBJTklUX0lORElSRUNUX1JFRyAoMHg1QSwgNywgMCwgMCkgcmVtb3ZlZCBkdWUgdG8gbm8gZXhhbXBsZSBvZiB1c2UgKi8KIAl7ICJJTklUX1NVQl9ESVJFQ1QiICAgICAgICAgICAgICAgICAgICwgMHg1QiwgaW5pdF9zdWJfZGlyZWN0ICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSlVNUCIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDVDLCBpbml0X2p1bXAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAJeyAiSU5JVF9JMkNfSUYiICAgICAgICAgICAgICAgICAgICAgICAsIDB4NUUsIGluaXRfaTJjX2lmICAgICAgICAgICAgICAgICAgICAgfSwKIAl7ICJJTklUX0NPUFlfTlZfUkVHIiAgICAgICAgICAgICAgICAgICwgMHg1RiwgaW5pdF9jb3B5X252X3JlZyAgICAgICAgICAgICAgICB9LAogCXsgIklOSVRfWk1fSU5ERVhfSU8iICAgICAgICAgICAgICAgICAgLCAweDYyLCBpbml0X3ptX2luZGV4X2lvICAgICAgICAgICAgICAgIH0sCkBAIC0zNzAwLDggKzM3MjIsNyBAQAogI2RlZmluZSBNQVhfVEFCTEVfT1BTIDEwMDAKIAogc3RhdGljIGludAotcGFyc2VfaW5pdF90YWJsZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAotCQkgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCitwYXJzZV9pbml0X3RhYmxlKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKIAkgKiBQYXJzZXMgYWxsIGNvbW1hbmRzIGluIGFuIGluaXQgdGFibGUuCkBAIC02MzMzLDYgKzYzNTQsMzIgQEAKIAkJfQogCX0KIAorCS8qIFhGWCBHVC0yNDBYLVlBCisJICoKKwkgKiBTbyBtYW55IHRoaW5ncyB3cm9uZyBoZXJlLCByZXBsYWNlIHRoZSBlbnRpcmUgZW5jb2RlciB0YWJsZS4uCisJICovCisJaWYgKG52X21hdGNoX2RldmljZShkZXYsIDB4MGNhMywgMHgxNjgyLCAweDMwMDMpKSB7CisJCWlmIChpZHggPT0gMCkgeworCQkJKmNvbm4gPSAweDAyMDAxMzAwOyAvKiBWR0EsIGNvbm5lY3RvciAxICovCisJCQkqY29uZiA9IDB4MDAwMDAwMjg7CisJCX0gZWxzZQorCQlpZiAoaWR4ID09IDEpIHsKKwkJCSpjb25uID0gMHgwMTAxMDMxMjsgLyogRFZJLCBjb25uZWN0b3IgMCAqLworCQkJKmNvbmYgPSAweDAwMDIwMDMwOworCQl9IGVsc2UKKwkJaWYgKGlkeCA9PSAyKSB7CisJCQkqY29ubiA9IDB4MDEwMTAzMTA7IC8qIFZHQSwgY29ubmVjdG9yIDAgKi8KKwkJCSpjb25mID0gMHgwMDAwMDAyODsKKwkJfSBlbHNlCisJCWlmIChpZHggPT0gMykgeworCQkJKmNvbm4gPSAweDAyMDIyMzYyOyAvKiBIRE1JLCBjb25uZWN0b3IgMiAqLworCQkJKmNvbmYgPSAweDAwMDIwMDEwOworCQl9IGVsc2UgeworCQkJKmNvbm4gPSAweDAwMDAwMDBlOyAvKiBFT0wgKi8KKwkJCSpjb25mID0gMHgwMDAwMDAwMDsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jCmluZGV4IDM4MzcwOTAuLjRjZWEzNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkvKiBkaXNhYmxlIHRoZSBmaWZvIGNhY2hlcyAqLwogCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAotCS8qIENvbnN0cnVjdCBpbml0YWwgUkFNRkMgZm9yIG5ldyBjaGFubmVsICovCisJLyogQ29uc3RydWN0IGluaXRpYWwgUkFNRkMgZm9yIG5ldyBjaGFubmVsICovCiAJcmV0ID0gcGZpZm8tPmNyZWF0ZV9jb250ZXh0KGNoYW4pOwogCWlmIChyZXQpIHsKIAkJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIG5vb25lIHdhbnRzIHRoZSBjaGFubmVsIGFueW1vcmUgKi8KKwkvKiBubyBvbmUgd2FudHMgdGhlIGNoYW5uZWwgYW55bW9yZSAqLwogCU5WX0RFQlVHKGRldiwgImZyZWVpbmcgY2hhbm5lbCAlZFxuIiwgY2hhbi0+aWQpOwogCW5vdXZlYXVfZGVidWdmc19jaGFubmVsX2ZpbmkoY2hhbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCmluZGV4IGNlMzhlOTcuLjU2OGNhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwpAQCAtODMsNyArODMsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVQgcmVxdWlyZXMgYSBub3RpZmllciBvYmplY3QgKi8KLQlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIE52Tm90aWZ5MCwgMzIsIDB4ZmQwLCAweDEwMDAsCisJcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBOdk5vdGlmeTAsIDMyLCAweGZlMCwgMHgxMDAwLAogCQkJCSAgICAgJmNoYW4tPm0ybWZfbnRmeSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCmluZGV4IGZmZjE4MGEuLmE3NjUxNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaApAQCAtMjE2LDcgKzIxNiw3IEBACiAJLyogbWFwcGluZyBvZiB0aGUgZmlmbyBpdHNlbGYgKi8KIAlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwogCi0JLyogbWFwcGluZyBvZiB0aGUgcmVncyBjb250cm9saW5nIHRoZSBmaWZvICovCisJLyogbWFwcGluZyBvZiB0aGUgcmVncyBjb250cm9sbGluZyB0aGUgZmlmbyAqLwogCXZvaWQgX19pb21lbSAqdXNlcjsKIAl1aW50MzJfdCB1c2VyX2dldDsKIAl1aW50MzJfdCB1c2VyX3B1dDsKQEAgLTY4Miw2ICs2ODIsOSBAQAogCS8qIEZvciBQRklGTyBhbmQgUEdSQVBILiAqLwogCXNwaW5sb2NrX3QgY29udGV4dF9zd2l0Y2hfbG9jazsKIAorCS8qIFZNL1BSQU1JTiBmbHVzaCwgbGVnYWN5IFBSQU1JTiBhcGVydHVyZSAqLworCXNwaW5sb2NrX3Qgdm1fbG9jazsKKwogCS8qIFJBTUlOIGNvbmZpZ3VyYXRpb24sIFJBTUZDLCBSQU1IVCBhbmQgUkFNUk8gb2Zmc2V0cyAqLwogCXN0cnVjdCBub3V2ZWF1X3JhbWh0ICAqcmFtaHQ7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1mYzsKQEAgLTExOTAsNyArMTE5Myw3IEBACiBleHRlcm4gaW50ICBudjUwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbnY1MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICopOwogZXh0ZXJuIHZvaWQgbnY1MF9ncmFwaF90bGJfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBudjg2X2dyYXBoX3RsYl9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG52ODRfZ3JhcGhfdGxiX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X2VudW0gbnY1MF9kYXRhX2Vycm9yX25hbWVzW107CiAKIC8qIG52YzBfZ3JhcGguYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCmluZGV4IDg4OWM0NDUuLjM5YWVlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKQEAgLTE4MSwxMyArMTgxLDEzIEBACiAJCU9VVF9SSU5HICAoY2hhbiwgMCk7CiAJfQogCi0Jbm91dmVhdV9ib193cjMyKGNoYW4tPm5vdGlmaWVyX2JvLCBjaGFuLT5tMm1mX250ZnkgKyAzLCAweGZmZmZmZmZmKTsKKwlub3V2ZWF1X2JvX3dyMzIoY2hhbi0+bm90aWZpZXJfYm8sIGNoYW4tPm0ybWZfbnRmeS80ICsgMywgMHhmZmZmZmZmZik7CiAJRklSRV9SSU5HKGNoYW4pOwogCW11dGV4X3VubG9jaygmY2hhbi0+bXV0ZXgpOwogCiAJcmV0ID0gLUVCVVNZOwogCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewotCQlpZiAoIW5vdXZlYXVfYm9fcmQzMihjaGFuLT5ub3RpZmllcl9ibywgY2hhbi0+bTJtZl9udGZ5ICsgMykpIHsKKwkJaWYgKCFub3V2ZWF1X2JvX3JkMzIoY2hhbi0+bm90aWZpZXJfYm8sIGNoYW4tPm0ybWZfbnRmeS80ICsgMykpIHsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKaW5kZXggZThiMDRmNC4uYjUyZTQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW52Ym8tPmJvLnBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlID0gbnZiby0+Z2VtLT5maWxwOworCW52Ym8tPmJvLnBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlID0gbnZiby0+Z2VtLT5maWxwOwogCW52Ym8tPmdlbS0+ZHJpdmVyX3ByaXZhdGUgPSBudmJvOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggMjY4MzM3Ny4uYzNlOTUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC0xNTIsOCArMTUyLDYgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0Jbm91dmVhdV9ib19yZWYoTlVMTCwgJmRldl9wcml2LT52Z2FfcmFtKTsKLQogCXR0bV9ib19kZXZpY2VfcmVsZWFzZSgmZGV2X3ByaXYtPnR0bS5iZGV2KTsKIAogCW5vdXZlYXVfdHRtX2dsb2JhbF9yZWxlYXNlKGRldl9wcml2KTsKQEAgLTM5OCw3ICszOTYsNyBAQAogCQkJZG1hX2JpdHMgPSA0MDsKIAl9IGVsc2UKIAlpZiAoZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpICYmCi0JICAgIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDAgJiYKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgID4gMHg0MCAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ1KSB7CiAJCWlmIChwY2lfZG1hX3N1cHBvcnRlZChkZXYtPnBkZXYsIERNQV9CSVRfTUFTSygzOSkpKQogCQkJZG1hX2JpdHMgPSAzOTsKQEAgLTU1Miw2ICs1NTAsNyBAQAogCXU4IHRSQzsJCS8qIEJ5dGUgOSAqLwogCXU4IHRVTktfMTAsIHRVTktfMTEsIHRVTktfMTIsIHRVTktfMTMsIHRVTktfMTQ7CiAJdTggdFVOS18xOCwgdFVOS18xOSwgdFVOS18yMCwgdFVOS18yMTsKKwl1OCBtYWdpY19udW1iZXIgPSAwOyAvKiBZZWFoLi4uIHNvcnJ5Ki8KIAl1OCAqbWVtID0gTlVMTCwgKmVudHJ5OwogCWludCBpLCByZWNvcmRsZW4sIGVudHJpZXM7CiAKQEAgLTU5Niw2ICs1OTUsMTIgQEAKIAlpZiAoIW1lbXRpbWluZ3MtPnRpbWluZykKIAkJcmV0dXJuOwogCisJLyogR2V0ICJzb21lIG51bWJlciIgZnJvbSB0aGUgdGltaW5nIHJlZyBmb3IgTlZfNDAKKwkgKiBVc2VkIGluIGNhbGN1bGF0aW9ucyBsYXRlciAqLworCWlmKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApIHsKKwkJbWFnaWNfbnVtYmVyID0gKG52X3JkMzIoZGV2LDB4MTAwMjI4KSAmIDB4MGYwMDAwMDApID4+IDI0OworCX0KKwogCWVudHJ5ID0gbWVtICsgbWVtWzFdOwogCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyssIGVudHJ5ICs9IHJlY29yZGxlbikgewogCQlzdHJ1Y3Qgbm91dmVhdV9wbV9tZW10aW1pbmcgKnRpbWluZyA9ICZwbS0+bWVtdGltaW5ncy50aW1pbmdbaV07CkBAIC02MzUsMzYgKzY0MCw1MSBAQAogCiAJCS8qIFhYWDogSSBkb24ndCB0cnVzdCB0aGUgLTEncyBhbmQgKzEncy4uLiB0aGV5IG11c3QgY29tZQogCQkgKiAgICAgIGZyb20gc29tZXdoZXJlISAqLwotCQl0aW1pbmctPnJlZ18xMDAyMjQgPSAoKHRVTktfMCArIHRVTktfMTkgKyAxKSA8PCAyNCB8CisJCXRpbWluZy0+cmVnXzEwMDIyNCA9ICh0VU5LXzAgKyB0VU5LXzE5ICsgMSArIG1hZ2ljX251bWJlcikgPDwgMjQgfAogCQkJCSAgICAgIHRVTktfMTggPDwgMTYgfAotCQkJCSAgICAgICh0VU5LXzEgKyB0VU5LXzE5ICsgMSkgPDwgOCB8Ci0JCQkJICAgICAgKHRVTktfMiAtIDEpKTsKKwkJCQkgICAgICAodFVOS18xICsgdFVOS18xOSArIDEgKyBtYWdpY19udW1iZXIpIDw8IDg7CisJCWlmKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTgpIHsKKwkJCXRpbWluZy0+cmVnXzEwMDIyNCB8PSAodFVOS18yIC0gMSk7CisJCX0gZWxzZSB7CisJCQl0aW1pbmctPnJlZ18xMDAyMjQgfD0gKHRVTktfMiArIDIgLSBtYWdpY19udW1iZXIpOworCQl9CiAKIAkJdGltaW5nLT5yZWdfMTAwMjI4ID0gKHRVTktfMTIgPDwgMTYgfCB0VU5LXzExIDw8IDggfCB0VU5LXzEwKTsKLQkJaWYocmVjb3JkbGVuID4gMTkpIHsKLQkJCXRpbWluZy0+cmVnXzEwMDIyOCArPSAodFVOS18xOSAtIDEpIDw8IDI0OwotCQl9LyogSSBjYW5ub3QgYmFjay11cCB0aGlzIGVsc2Utc3RhdGVtZW50IHJpZ2h0IG5vdwotCQkJIGVsc2UgewotCQkJdGltaW5nLT5yZWdfMTAwMjI4ICs9IHRVTktfMTIgPDwgMjQ7Ci0JCX0qLworCQlpZihkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEzICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQkJdGltaW5nLT5yZWdfMTAwMjI4IHw9ICh0VU5LXzE5IC0gMSkgPDwgMjQ7CisJCX0KIAotCQkvKiBYWFg6IHJlZ18xMDAyMmMgKi8KLQkJdGltaW5nLT5yZWdfMTAwMjJjID0gdFVOS18yIC0gMTsKKwkJaWYoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl80MCkgeworCQkJLyogTlY0MDogZG9uJ3Qga25vdyB3aGF0IHRoZSByZXN0IG9mIHRoZSByZWdzIGFyZS4uCisJCQkgKiBBbmQgZG9uJ3QgbmVlZCB0byBrbm93IGVpdGhlciAqLworCQkJdGltaW5nLT5yZWdfMTAwMjI4IHw9IDB4MjAyMDAwMDAgfCBtYWdpY19udW1iZXIgPDwgMjQ7CisJCX0gZWxzZSBpZihkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7CisJCQkvKiBYWFg6IHJlZ18xMDAyMmMgKi8KKwkJCXRpbWluZy0+cmVnXzEwMDIyYyA9IHRVTktfMiAtIDE7CiAKLQkJdGltaW5nLT5yZWdfMTAwMjMwID0gKHRVTktfMjAgPDwgMjQgfCB0VU5LXzIxIDw8IDE2IHwKLQkJCQkgICAgICB0VU5LXzEzIDw8IDggIHwgdFVOS18xMyk7CisJCQl0aW1pbmctPnJlZ18xMDAyMzAgPSAodFVOS18yMCA8PCAyNCB8IHRVTktfMjEgPDwgMTYgfAorCQkJCQkJICB0VU5LXzEzIDw8IDggIHwgdFVOS18xMyk7CiAKLQkJLyogWFhYOiArNj8gKi8KLQkJdGltaW5nLT5yZWdfMTAwMjM0ID0gKHRSQVMgPDwgMjQgfCAodFVOS18xOSArIDYpIDw8IDggfCB0UkMpOwotCQl0aW1pbmctPnJlZ18xMDAyMzQgKz0gbWF4KHRVTktfMTAsdFVOS18xMSkgPDwgMTY7CisJCQl0aW1pbmctPnJlZ18xMDAyMzQgPSAodFJBUyA8PCAyNCB8IHRSQyk7CisJCQl0aW1pbmctPnJlZ18xMDAyMzQgKz0gbWF4KHRVTktfMTAsdFVOS18xMSkgPDwgMTY7CiAKLQkJLyogWFhYOyByZWdfMTAwMjM4LCByZWdfMTAwMjNjCi0JCSAqIHJlZzogMHgwMD8/Pz8/PwotCQkgKiByZWdfMTAwMjNjOgotCQkgKiAgICAgIDAgZm9yIHByZS1OVjUwIGNhcmRzCi0JCSAqICAgICAgMHg/Pz8/MDIwMiBmb3IgTlY1MCsgY2FyZHMgKGVtcGlyaWNhbCBldmlkZW5jZSkgKi8KLQkJaWYoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQkJaWYoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEzKSB7CisJCQkJdGltaW5nLT5yZWdfMTAwMjM0IHw9ICh0VU5LXzIgKyAyKSA8PCA4OworCQkJfSBlbHNlIHsKKwkJCQkvKiBYWFg6ICs2PyAqLworCQkJCXRpbWluZy0+cmVnXzEwMDIzNCB8PSAodFVOS18xOSArIDYpIDw8IDg7CisJCQl9CisKKwkJCS8qIFhYWDsgcmVnXzEwMDIzOCwgcmVnXzEwMDIzYworCQkJICogcmVnXzEwMDIzODogMHgwMD8/Pz8/PworCQkJICogcmVnXzEwMDIzYzogMHghIT8/MDIwMiBmb3IgTlY1MCsgY2FyZHMgKGVtcGlyaWNhbCBldmlkZW5jZSkgKi8KIAkJCXRpbWluZy0+cmVnXzEwMDIzYyA9IDB4MjAyOworCQkJaWYoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEzKSB7CisJCQkJdGltaW5nLT5yZWdfMTAwMjNjIHw9IDB4NDAwMDAwMCB8ICh0VU5LXzIgLSAxKSA8PCAxNjsKKwkJCX0gZWxzZSB7CisJCQkJLyogY3VycmVudGx5IHVua25vd24KKwkJCQkgKiAxMDAyM2Mgc2VlbiBhcyAwNnh4eHh4eCwgMGJ4eHh4eHggb3IgMGZ4eHh4eHggKi8KKwkJCX0KIAkJfQogCiAJCU5WX0RFQlVHKGRldiwgIkVudHJ5ICVkOiAyMjA6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCkBAIC02NzUsNyArNjk1LDcgQEAKIAkJCSB0aW1pbmctPnJlZ18xMDAyMzgsIHRpbWluZy0+cmVnXzEwMDIzYyk7CiAJfQogCi0JbWVtdGltaW5ncy0+bnJfdGltaW5nICA9IGVudHJpZXM7CisJbWVtdGltaW5ncy0+bnJfdGltaW5nID0gZW50cmllczsKIAltZW10aW1pbmdzLT5zdXBwb3J0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKaW5kZXggN2JhM2ZjMC4uNWIzOTcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwpAQCAtMzUsMTkgKzM1LDIyIEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnRmeSA9IE5VTEw7Ci0JdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgZmxhZ3MsIHR0bXBsOwogCWludCByZXQ7CiAKLQlpZiAobm91dmVhdV92cmFtX25vdGlmeSkKKwlpZiAobm91dmVhdV92cmFtX25vdGlmeSkgewogCQlmbGFncyA9IE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNOwotCWVsc2UKKwkJdHRtcGwgPSBUVE1fUExfRkxBR19WUkFNOworCX0gZWxzZSB7CiAJCWZsYWdzID0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7CisJCXR0bXBsID0gVFRNX1BMX0ZMQUdfVFQ7CisJfQogCiAJcmV0ID0gbm91dmVhdV9nZW1fbmV3KGRldiwgTlVMTCwgUEFHRV9TSVpFLCAwLCBmbGFncywgMCwgMCwgJm50ZnkpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2JvX3BpbihudGZ5LCBmbGFncyk7CisJcmV0ID0gbm91dmVhdV9ib19waW4obnRmeSwgdHRtcGwpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKaW5kZXggNGYwMGM4Ny4uNjdhMTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X29iamVjdC5jCkBAIC0xMDM5LDE5ICsxMDM5LDIwIEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3B1b2JqLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHVvYmotPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGdwdW9iai0+cGluc3QgPT0gfjAgfHwgIWRldl9wcml2LT5yYW1pbl9hdmFpbGFibGUpIHsKIAkJdTY0ICBwdHIgPSBncHVvYmotPnZpbnN0ICsgb2Zmc2V0OwogCQl1MzIgYmFzZSA9IHB0ciA+PiAxNjsKIAkJdTMyICB2YWw7CiAKLQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2X3ByaXYtPnJhbWluX2Jhc2UgIT0gYmFzZSkgewogCQkJZGV2X3ByaXYtPnJhbWluX2Jhc2UgPSBiYXNlOwogCQkJbnZfd3IzMihkZXYsIDB4MDAxNzAwLCBkZXZfcHJpdi0+cmFtaW5fYmFzZSk7CiAJCX0KIAkJdmFsID0gbnZfcmQzMihkZXYsIDB4NzAwMDAwICsgKHB0ciAmIDB4ZmZmZikpOwotCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gdmFsOwogCX0KIApAQCAtMTA2MywxOCArMTA2NCwxOSBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGdwdW9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ3B1b2JqLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChncHVvYmotPnBpbnN0ID09IH4wIHx8ICFkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlKSB7CiAJCXU2NCAgcHRyID0gZ3B1b2JqLT52aW5zdCArIG9mZnNldDsKIAkJdTMyIGJhc2UgPSBwdHIgPj4gMTY7CiAKLQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2X3ByaXYtPnJhbWluX2Jhc2UgIT0gYmFzZSkgewogCQkJZGV2X3ByaXYtPnJhbWluX2Jhc2UgPSBiYXNlOwogCQkJbnZfd3IzMihkZXYsIDB4MDAxNzAwLCBkZXZfcHJpdi0+cmFtaW5fYmFzZSk7CiAJCX0KIAkJbnZfd3IzMihkZXYsIDB4NzAwMDAwICsgKHB0ciAmIDB4ZmZmZiksIHZhbCk7Ci0JCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKaW5kZXggYWM2MmExYi4uNjcwZTNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQljYXNlIDB4MTM6CiAJCWNhc2UgMHgxNToKIAkJCXBlcmZsdmwtPmZhbnNwZWVkID0gZW50cnlbNTVdOwotCQkJcGVyZmx2bC0+dm9sdGFnZSA9IGVudHJ5WzU2XTsKKwkJCXBlcmZsdmwtPnZvbHRhZ2UgPSAocmVjb3JkbGVuID4gNTYpID8gZW50cnlbNTZdIDogMDsKIAkJCXBlcmZsdmwtPmNvcmUgPSBST00zMihlbnRyeVsxXSkgKiAxMDsKIAkJCXBlcmZsdmwtPm1lbW9yeSA9IFJPTTMyKGVudHJ5WzVdKSAqIDIwOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKaW5kZXggYTMzZmU0MC4uYzc3MTExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwpAQCAtNDIsNyArNDIsOCBAQAogCiAJbnZiZS0+bnJfcGFnZXMgPSAwOwogCXdoaWxlIChudW1fcGFnZXMtLSkgewotCQlpZiAoZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXSAhPSBETUFfRVJST1JfQ09ERSkgeworCQkvKiB0aGlzIGNvZGUgcGF0aCBpc24ndCBjYWxsZWQgYW5kIGlzIGluY29ycmVjdCBhbnl3YXlzICovCisJCWlmICgwKSB7IC8qZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXSAhPSBETUFfRVJST1JfQ09ERSkqLwogCQkJbnZiZS0+cGFnZXNbbnZiZS0+bnJfcGFnZXNdID0KIAkJCQkJZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXTsKIAkJIAludmJlLT50dG1fYWxsb2NlZFtudmJlLT5ucl9wYWdlc10gPSB0cnVlOwpAQCAtNTUsNiArNTYsNyBAQAogCQkJCWJlLT5mdW5jLT5jbGVhcihiZSk7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CisJCQludmJlLT50dG1fYWxsb2NlZFtudmJlLT5ucl9wYWdlc10gPSBmYWxzZTsKIAkJfQogCiAJCW52YmUtPm5yX3BhZ2VzKys7CkBAIC00MjcsNyArNDI5LDcgQEAKIAl1MzIgYXBlcl9zaXplLCBhbGlnbjsKIAlpbnQgcmV0OwogCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTAgfHwgZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpKQorCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzQwICYmIGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSkKIAkJYXBlcl9zaXplID0gNTEyICogMTAyNCAqIDEwMjQ7CiAJZWxzZQogCQlhcGVyX3NpemUgPSA2NCAqIDEwMjQgKiAxMDI0OwpAQCAtNDU3LDcgKzQ1OSw3IEBACiAJCWRldl9wcml2LT5nYXJ0X2luZm8uZnVuYyA9ICZudjUwX3NnZG1hX2JhY2tlbmQ7CiAJfSBlbHNlCiAJaWYgKGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgotCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDUpIHsKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPiAweDQwICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDUpIHsKIAkJaWYgKG52NDRfZ3JhcGhfY2xhc3MoZGV2KSkgewogCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5mdW5jID0gJm52NDRfc2dkbWFfYmFja2VuZDsKIAkJCWFsaWduID0gNTEyICogMTAyNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwppbmRleCA0ZmNiZDA5Li45MTVmYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCkBAIC0zNzYsMTUgKzM3NiwxMSBAQAogCQllbmdpbmUtPmdyYXBoLmRlc3Ryb3lfY29udGV4dAk9IG52NTBfZ3JhcGhfZGVzdHJveV9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLmxvYWRfY29udGV4dAk9IG52NTBfZ3JhcGhfbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLnVubG9hZF9jb250ZXh0CT0gbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dDsKLQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4ODYpCisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwIHx8CisJCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGFjKQogCQkJZW5naW5lLT5ncmFwaC50bGJfZmx1c2gJPSBudjUwX2dyYXBoX3RsYl9mbHVzaDsKLQkJZWxzZSB7Ci0JCQkvKiBmcm9tIHdoYXQgaSBjYW4gc2VlIG52aWRpYSBkbyB0aGlzIG9uIGV2ZXJ5Ci0JCQkgKiBwcmUtTlZBMyBib2FyZCBleGNlcHQgTlZBQywgYnV0LCB3ZSd2ZSBvbmx5Ci0JCQkgKiBldmVyIHNlZW4gcHJvYmxlbXMgb24gTlY4NgotCQkJICovCi0JCQllbmdpbmUtPmdyYXBoLnRsYl9mbHVzaAk9IG52ODZfZ3JhcGhfdGxiX2ZsdXNoOwotCQl9CisJCWVsc2UKKwkJCWVuZ2luZS0+Z3JhcGgudGxiX2ZsdXNoCT0gbnY4NF9ncmFwaF90bGJfZmx1c2g7CiAJCWVuZ2luZS0+Zmlmby5jaGFubmVscwkJPSAxMjg7CiAJCWVuZ2luZS0+Zmlmby5pbml0CQk9IG52NTBfZmlmb19pbml0OwogCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbnY1MF9maWZvX3Rha2Vkb3duOwpAQCAtNjEyLDYgKzYwOCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5jaGFubmVscy5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnRpbGUubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnZtX2xvY2spOwogCiAJLyogTWFrZSB0aGUgQ1JUQ3MgYW5kIEkyQyBidXNlcyBhY2Nlc3NpYmxlICovCiAJcmV0ID0gZW5naW5lLT5kaXNwbGF5LmVhcmx5X2luaXQoZGV2KTsKQEAgLTc3MSw2ICs3NjgsMTEgQEAKIAllbmdpbmUtPm1jLnRha2Vkb3duKGRldik7CiAJZW5naW5lLT5kaXNwbGF5LmxhdGVfdGFrZWRvd24oZGV2KTsKIAorCWlmIChkZXZfcHJpdi0+dmdhX3JhbSkgeworCQlub3V2ZWF1X2JvX3VucGluKGRldl9wcml2LT52Z2FfcmFtKTsKKwkJbm91dmVhdV9ib19yZWYoTlVMTCwgJmRldl9wcml2LT52Z2FfcmFtKTsKKwl9CisKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJdHRtX2JvX2NsZWFuX21tKCZkZXZfcHJpdi0+dHRtLmJkZXYsIFRUTV9QTF9WUkFNKTsKIAl0dG1fYm9fY2xlYW5fbW0oJmRldl9wcml2LT50dG0uYmRldiwgVFRNX1BMX1RUKTsKQEAgLTk2Myw3ICs5NjUsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX21taW87CiAKLQkvKiBNYXAgUFJBTUlOIEJBUiwgb3Igb24gb2xkZXIgY2FyZHMsIHRoZSBhcGVydHVyZSB3aXRoaW5nIEJBUjAgKi8KKwkvKiBNYXAgUFJBTUlOIEJBUiwgb3Igb24gb2xkZXIgY2FyZHMsIHRoZSBhcGVydHVyZSB3aXRoaW4gQkFSMCAqLwogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzQwKSB7CiAJCWludCByYW1pbl9iYXIgPSAyOwogCQlpZiAocGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIHJhbWluX2JhcikgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKaW5kZXggYTI2MGZiYi4uNzQ4YjlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCU5WX0RFQlVHX0tNUyhkZXYsICJTZXR0aW5nIGRwbXMgbW9kZSAlZCBvbiBDUlRDICVkXG4iLCBtb2RlLAogCQkJCQkJCW52X2NydGMtPmluZGV4KTsKIAotCWlmIChudl9jcnRjLT5sYXN0X2RwbXMgPT0gbW9kZSkgLyogRG9uJ3QgZG8gdW5uZWNlc2FyeSBtb2RlIGNoYW5nZXMuICovCisJaWYgKG52X2NydGMtPmxhc3RfZHBtcyA9PSBtb2RlKSAvKiBEb24ndCBkbyB1bm5lY2Vzc2FyeSBtb2RlIGNoYW5nZXMuICovCiAJCXJldHVybjsKIAogCW52X2NydGMtPmxhc3RfZHBtcyA9IG1vZGU7CkBAIC02NzcsNyArNjc3LDcgQEAKIAogCU5WQmxhbmtTY3JlZW4oZGV2LCBudl9jcnRjLT5pbmRleCwgdHJ1ZSk7CiAKLQkvKiBTb21lIG1vcmUgcHJlcGVyYXRpb24uICovCisJLyogU29tZSBtb3JlIHByZXBhcmF0aW9uLiAqLwogCU5WV3JpdGVDUlRDKGRldiwgbnZfY3J0Yy0+aW5kZXgsIE5WX1BDUlRDX0NPTkZJRywgTlZfUENSVENfQ09ORklHX1NUQVJUX0FERFJFU1NfTk9OX1ZHQSk7CiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApIHsKIAkJdWludDMyX3QgcmVnOTAwID0gTlZSZWFkUkFNREFDKGRldiwgbnZfY3J0Yy0+aW5kZXgsIE5WX1BSQU1EQUNfOTAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCmluZGV4IGM4MmRiMzcuLjEyMDk4YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwpAQCAtNTgxLDEyICs1ODEsMTMgQEAKIAlpbnQgaGVhZCA9IG52X2VuY29kZXItPnJlc3RvcmUuaGVhZDsKIAogCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpIHsKLQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gbm91dmVhdV9lbmNvZGVyX2Nvbm5lY3Rvcl9nZXQobnZfZW5jb2RlciktPm5hdGl2ZV9tb2RlOwotCQlpZiAobmF0aXZlX21vZGUpCi0JCQljYWxsX2x2ZHNfc2NyaXB0KGRldiwgbnZfZW5jb2Rlci0+ZGNiLCBoZWFkLCBMVkRTX1BBTkVMX09OLAotCQkJCQkgbmF0aXZlX21vZGUtPmNsb2NrKTsKLQkJZWxzZQotCQkJTlZfRVJST1IoZGV2LCAiTm90IHJlc3RvcmluZyBMVkRTIHdpdGhvdXQgbmF0aXZlIG1vZGVcbiIpOworCQlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKmNvbm5lY3RvciA9CisJCQlub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKKworCQlpZiAoY29ubmVjdG9yICYmIGNvbm5lY3Rvci0+bmF0aXZlX21vZGUpCisJCQljYWxsX2x2ZHNfc2NyaXB0KGRldiwgbnZfZW5jb2Rlci0+ZGNiLCBoZWFkLAorCQkJCQkgTFZEU19QQU5FTF9PTiwKKwkJCQkJIGNvbm5lY3Rvci0+bmF0aXZlX21vZGUtPmNsb2NrKTsKIAogCX0gZWxzZSBpZiAobnZfZW5jb2Rlci0+ZGNiLT50eXBlID09IE9VVFBVVF9UTURTKSB7CiAJCWludCBjbG9jayA9IG5vdXZlYXVfaHdfcGxsdmFsc190b19jbGsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwppbmRleCAxOGQzMGMyLi5mY2ViNDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAkJICBOVjQwX1BHUkFQSF9DVFhDVExfQ1VSX0xPQURFRCk7CiAJLyogMHgzMkUwIHJlY29yZHMgdGhlIGluc3RhbmNlIGFkZHJlc3Mgb2YgdGhlIGFjdGl2ZSBGSUZPJ3MgUEdSQVBICiAJICogY29udGV4dC4gIElmIGF0IGFueSB0aW1lIHRoaXMgZG9lc24ndCBtYXRjaCAweDQwMDMyQywgeW91IHdpbGwKLQkgKiByZWNpZXZlIFBHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENICisJICogcmVjZWl2ZSBQR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSAogCSAqLwogCW52X3dyMzIoZGV2LCBOVjQwX1BGSUZPX0dSQ1RYX0lOU1RBTkNFLCBpbnN0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKaW5kZXggMmI5OTg0MC4uYTE5Y2NhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKQEAgLTQ2OSw5ICs0NjksNiBAQAogCiAJc3RhcnQgPSBwdGltZXItPnJlYWQoZGV2KTsKIAlkbyB7Ci0JCW52X3dyMzIoZGV2LCAweDYxMDAyYywgMHgzNzApOwotCQludl93cjMyKGRldiwgMHgwMDAxNDAsIDEpOwotCiAJCWlmIChudl9ybzMyKGRpc3AtPm50ZnksIDB4MDAwKSkKIAkJCXJldHVybiAwOwogCX0gd2hpbGUgKHB0aW1lci0+cmVhZChkZXYpIC0gc3RhcnQgPCAyMDAwMDAwMDAwVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCmluZGV4IGEyY2ZhYTYuLmM4ZTgzYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJbnZfbWFzayhkZXYsIDB4NjEwMDI4LCAweDAwMDAwMDAwLCAweDAwMDEwMDAxIDw8IGlkKTsKIAogCWV2by0+ZG1hLm1heCA9ICg0MDk2LzQpIC0gMjsKKwlldm8tPmRtYS5tYXggJj0gfjc7CiAJZXZvLT5kbWEucHV0ID0gMDsKIAlldm8tPmRtYS5jdXIgPSBldm8tPmRtYS5wdXQ7CiAJZXZvLT5kbWEuZnJlZSA9IGV2by0+ZG1hLm1heCAtIGV2by0+ZG1hLmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCA4Njc1YjAwLi5iMDJhNWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC01MDMsNyArNTAzLDcgQEAKIH0KIAogdm9pZAotbnY4Nl9ncmFwaF90bGJfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKK252ODRfZ3JhcGhfdGxiX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV90aW1lcl9lbmdpbmUgKnB0aW1lciA9ICZkZXZfcHJpdi0+ZW5naW5lLnRpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYwppbmRleCBhNmY4YWE2Li40Zjk1YTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYwpAQCAtNDA0LDIzICs0MDQsMjUgQEAKIG52NTBfaW5zdG1lbV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCW52X3dyMzIoZGV2LCAweDAwMzMwYywgMHgwMDAwMDAwMSk7CiAJaWYgKCFudl93YWl0KGRldiwgMHgwMDMzMGMsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDApKQogCQlOVl9FUlJPUihkZXYsICJQUkFNSU4gZmx1c2ggdGltZW91dFxuIik7Ci0Jc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkCiBudjg0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnZtX2xvY2ssIGZsYWdzKTsKIAludl93cjMyKGRldiwgMHgwNzAwMDAsIDB4MDAwMDAwMDEpOwogCWlmICghbnZfd2FpdChkZXYsIDB4MDcwMDAwLCAweDAwMDAwMDAyLCAweDAwMDAwMDAwKSkKIAkJTlZfRVJST1IoZGV2LCAiUFJBTUlOIGZsdXNoIHRpbWVvdXRcbiIpOwotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnZtX2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCmluZGV4IDRmZDM0MzIuLjZjMjY5NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKQEAgLTE3NCwxMCArMTc0LDExIEBACiBudjUwX3ZtX2ZsdXNoX2VuZ2luZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgKGVuZ2luZSA8PCAxNikgfCAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgInZtIGZsdXNoIHRpbWVvdXQ6IGVuZ2luZSAlZFxuIiwgZW5naW5lKTsKLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX3ZtLmMKaW5kZXggNjlhZjBiYS4uYTE3OWU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfdm0uYwpAQCAtMTA0LDIwICsxMDQsMjcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqcGluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB2bS0+ZGV2OwogCXN0cnVjdCBub3V2ZWF1X3ZtX3BnZCAqdnBnZDsKLQl1MzIgcjEwMGM4MCwgZW5naW5lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGVuZ2luZSA9IChkZXZfcHJpdi0+Y2hhbl92bSA9PSB2bSkgPyAxIDogNTsKIAogCXBpbnN0bWVtLT5mbHVzaCh2bS0+ZGV2KTsKIAotCWlmICh2bSA9PSBkZXZfcHJpdi0+Y2hhbl92bSkKLQkJZW5naW5lID0gMTsKLQllbHNlCi0JCWVuZ2luZSA9IDU7Ci0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnZtX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwZ2QsICZ2bS0+cGdkX2xpc3QsIGhlYWQpIHsKLQkJcjEwMGM4MCA9IG52X3JkMzIoZGV2LCAweDEwMGM4MCk7CisJCS8qIGxvb2tzIGxpa2UgbWF5YmUgYSAiZnJlZSBmbHVzaCBzbG90cyIgY291bnRlciwgdGhlCisJCSAqIGZhc3RlciB5b3Ugd3JpdGUgdG8gMHgxMDBjYmMgdG8gbW9yZSBpdCBkZWNyZWFzZXMKKwkJICovCisJCWlmICghbnZfd2FpdF9uZShkZXYsIDB4MTAwYzgwLCAweDAwZmYwMDAwLCAweDAwMDAwMDAwKSkgeworCQkJTlZfRVJST1IoZGV2LCAidm0gdGltZW91dCAwOiAweCUwOHggJWRcbiIsCisJCQkJIG52X3JkMzIoZGV2LCAweDEwMGM4MCksIGVuZ2luZSk7CisJCX0KIAkJbnZfd3IzMihkZXYsIDB4MTAwY2I4LCB2cGdkLT5vYmotPnZpbnN0ID4+IDgpOwogCQludl93cjMyKGRldiwgMHgxMDBjYmMsIDB4ODAwMDAwMDAgfCBlbmdpbmUpOwotCQlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHhmZmZmZmZmZiwgcjEwMGM4MCkpCi0JCQlOVl9FUlJPUihkZXYsICJ2bSBmbHVzaCB0aW1lb3V0IGVuZyAlZFxuIiwgZW5naW5lKTsKKwkJLyogd2FpdCBmb3IgZmx1c2ggdG8gYmUgcXVldWVkPyAqLworCQlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCkpIHsKKwkJCU5WX0VSUk9SKGRldiwgInZtIHRpbWVvdXQgMTogMHglMDh4ICVkXG4iLAorCQkJCSBudl9yZDMyKGRldiwgMHgxMDBjODApLCBlbmdpbmUpOworCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IDI1OGZhNWUuLjdiZDc0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiYXRvbS5oIgogI2luY2x1ZGUgImF0b20tbmFtZXMuaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKIAogI2RlZmluZSBBVE9NX0NPTkRfQUJPVkUJCTAKICNkZWZpbmUgQVRPTV9DT05EX0FCT1ZFT1JFUVVBTAkxCkBAIC0xMDEsNyArMTAyLDkgQEAKIHN0YXRpYyB1aW50MzJfdCBhdG9tX2lpb19leGVjdXRlKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGJhc2UsCiAJCQkJIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCBkYXRhKQogeworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY3R4LT5jYXJkLT5kZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IHRlbXAgPSAweENEQ0RDRENEOworCiAJd2hpbGUgKDEpCiAJCXN3aXRjaCAoQ1U4KGJhc2UpKSB7CiAJCWNhc2UgQVRPTV9JSU9fTk9QOgpAQCAtMTEyLDcgKzExNSw4IEBACiAJCQliYXNlICs9IDM7CiAJCQlicmVhazsKIAkJY2FzZSBBVE9NX0lJT19XUklURToKLQkJCSh2b2lkKWN0eC0+Y2FyZC0+aW9yZWdfcmVhZChjdHgtPmNhcmQsIENVMTYoYmFzZSArIDEpKTsKKwkJCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjUxNSkKKwkJCQkodm9pZCljdHgtPmNhcmQtPmlvcmVnX3JlYWQoY3R4LT5jYXJkLCBDVTE2KGJhc2UgKyAxKSk7CiAJCQljdHgtPmNhcmQtPmlvcmVnX3dyaXRlKGN0eC0+Y2FyZCwgQ1UxNihiYXNlICsgMSksIHRlbXApOwogCQkJYmFzZSArPSAzOwogCQkJYnJlYWs7CkBAIC0xMzEsNyArMTM1LDcgQEAKIAkJY2FzZSBBVE9NX0lJT19NT1ZFX0lOREVYOgogCQkJdGVtcCAmPQogCQkJICAgIH4oKDB4RkZGRkZGRkYgPj4gKDMyIC0gQ1U4KGJhc2UgKyAxKSkpIDw8Ci0JCQkgICAgICBDVTgoYmFzZSArIDIpKTsKKwkJCSAgICAgIENVOChiYXNlICsgMykpOwogCQkJdGVtcCB8PQogCQkJICAgICgoaW5kZXggPj4gQ1U4KGJhc2UgKyAyKSkgJgogCQkJICAgICAoMHhGRkZGRkZGRiA+PiAoMzIgLSBDVTgoYmFzZSArIDEpKSkpIDw8IENVOChiYXNlICsKQEAgLTE0MSw3ICsxNDUsNyBAQAogCQljYXNlIEFUT01fSUlPX01PVkVfREFUQToKIAkJCXRlbXAgJj0KIAkJCSAgICB+KCgweEZGRkZGRkZGID4+ICgzMiAtIENVOChiYXNlICsgMSkpKSA8PAotCQkJICAgICAgQ1U4KGJhc2UgKyAyKSk7CisJCQkgICAgICBDVTgoYmFzZSArIDMpKTsKIAkJCXRlbXAgfD0KIAkJCSAgICAoKGRhdGEgPj4gQ1U4KGJhc2UgKyAyKSkgJgogCQkJICAgICAoMHhGRkZGRkZGRiA+PiAoMzIgLSBDVTgoYmFzZSArIDEpKSkpIDw8IENVOChiYXNlICsKQEAgLTE1MSw3ICsxNTUsNyBAQAogCQljYXNlIEFUT01fSUlPX01PVkVfQVRUUjoKIAkJCXRlbXAgJj0KIAkJCSAgICB+KCgweEZGRkZGRkZGID4+ICgzMiAtIENVOChiYXNlICsgMSkpKSA8PAotCQkJICAgICAgQ1U4KGJhc2UgKyAyKSk7CisJCQkgICAgICBDVTgoYmFzZSArIDMpKTsKIAkJCXRlbXAgfD0KIAkJCSAgICAoKGN0eC0+CiAJCQkgICAgICBpb19hdHRyID4+IENVOChiYXNlICsgMikpICYgKDB4RkZGRkZGRkYgPj4gKDMyIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAppbmRleCAwNGIyNjlkLi43ZmQ4ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCkBAIC03MzgsMTMgKzczOCwxMyBAQAogewogI2lmIEFUT01fQklHX0VORElBTgogICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7Ci0gICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVyZWQgYXMgRElHQS9CL0MvRC9FL0YpCisgICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVycmVkIGFzIERJR0EvQi9DL0QvRS9GKQogICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MzsKICAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MTsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doegogI2Vsc2UKICAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MTsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doegogICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MzsKLSAgICBVQ0hBUiB1Y0RpZ1NlbDozOyAgICAgICAgICAgICAvLyA9MC8xLzIvMy80LzU6IERJRzAvMS8yLzMvNC81IChJbiByZWdpc3RlciBzcGVjIGFsc28gcmVmZXJlZCBhcyBESUdBL0IvQy9EL0UvRikKKyAgICBVQ0hBUiB1Y0RpZ1NlbDozOyAgICAgICAgICAgICAvLyA9MC8xLzIvMy80LzU6IERJRzAvMS8yLzMvNC81IChJbiByZWdpc3RlciBzcGVjIGFsc28gcmVmZXJyZWQgYXMgRElHQS9CL0MvRC9FL0YpCiAgICAgVUNIQVIgdWNSZXNlcnZlZDE6MTsKICNlbmRpZgogfUFUT01fRElHX0VOQ09ERVJfQ09ORklHX1YzOwpAQCAtNzg1LDEzICs3ODUsMTMgQEAKIHsKICNpZiBBVE9NX0JJR19FTkRJQU4KICAgICBVQ0hBUiB1Y1Jlc2VydmVkMToxOwotICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wLzEvMi8zLzQvNTogRElHMC8xLzIvMy80LzUgKEluIHJlZ2lzdGVyIHNwZWMgYWxzbyByZWZlcmVkIGFzIERJR0EvQi9DL0QvRS9GKQorICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wLzEvMi8zLzQvNTogRElHMC8xLzIvMy80LzUgKEluIHJlZ2lzdGVyIHNwZWMgYWxzbyByZWZlcnJlZCBhcyBESUdBL0IvQy9EL0UvRikKICAgICBVQ0hBUiB1Y1Jlc2VydmVkOjI7CiAgICAgVUNIQVIgdWNEUExpbmtSYXRlOjI7ICAgICAgICAgLy8gPTA6IDEuNjJHaHosID0xOiAyLjdHaHosIDI9NS40R2h6ICAgIDw9IENoYW5nZWQgY29tcGFyaW5nIHRvIHByZXZpb3VzIHZlcnNpb24KICNlbHNlCiAgICAgVUNIQVIgdWNEUExpbmtSYXRlOjI7ICAgICAgICAgLy8gPTA6IDEuNjJHaHosID0xOiAyLjdHaHosIDI9NS40R2h6ICAgIDw9IENoYW5nZWQgY29tcGFyaW5nIHRvIHByZXZpb3VzIHZlcnNpb24KICAgICBVQ0hBUiB1Y1Jlc2VydmVkOjI7Ci0gICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVyZWQgYXMgRElHQS9CL0MvRC9FL0YpCisgICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVycmVkIGFzIERJR0EvQi9DL0QvRS9GKQogICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7CiAjZW5kaWYKIH1BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WNDsKQEAgLTIxMjYsNyArMjEyNiw3IEBACiAvLyBTdHJ1Y3R1cmVzIHVzZWQgaW4gRmlybXdhcmVJbmZvVGFibGUKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKIAotLy8gdXNCSU9TQ2FwYWJpbGl0eSBEZWZpbnRpb246CisvLyB1c0JJT1NDYXBhYmlsaXR5IERlZmluaXRpb246CiAvLyBCaXQgMCA9IDA6IEJpb3MgaW1hZ2UgaXMgbm90IFBvc3RlZCwgPTE6QmlvcyBpbWFnZSBpcyBQb3N0ZWQ7IAogLy8gQml0IDEgPSAwOiBEdWFsIENSVEMgaXMgbm90IHN1cHBvcnRlZCwgPTE6IER1YWwgQ1JUQyBpcyBzdXBwb3J0ZWQ7IAogLy8gQml0IDIgPSAwOiBFeHRlbmRlZCBEZXNrdG9wIGlzIG5vdCBzdXBwb3J0ZWQsID0xOiBFeHRlbmRlZCBEZXNrdG9wIGlzIHN1cHBvcnRlZDsgCkBAIC0zMzQxLDcgKzMzNDEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogLy8gU3RydWN0dXJlIHVzZWQgaW4gQW5hbG9nVFZfSW5mb1RhYmxlIChUb3AgbGV2ZWwpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCi0vL3VjVFZCb290VXBEZWZhdWx0U3RkIGRlZmluaXRvbjoKKy8vdWNUVkJvb3RVcERlZmF1bHRTdGQgZGVmaW5pdGlvbjoKIAogLy9BVE9NX1RWX05UU0MgICAgICAgICAgICAgICAgMQogLy9BVE9NX1RWX05UU0NKICAgICAgICAgICAgICAgMgpAQCAtMzgxNiw3ICszODE2LDcgQEAKICAgVUNIQVIgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkIFs2XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBwb3RlbnRpYWwgZXhwYW5zaW9uCiB9QVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTzsKIAotLy9SZWxhdGVkIGRlZmluaXRpb25zLCBhbGwgcmVjb3JkcyBhcmUgZGlmZmVybnQgYnV0IHRoZXkgaGF2ZSBhIGNvbW1vbmQgaGVhZGVyCisvL1JlbGF0ZWQgZGVmaW5pdGlvbnMsIGFsbCByZWNvcmRzIGFyZSBkaWZmZXJlbnQgYnV0IHRoZXkgaGF2ZSBhIGNvbW1vbmQgaGVhZGVyCiB0eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUgogewogICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVjb3JkVHlwZTsgICAgICAgICAgICAgICAgICAgICAgLy9BbiBlbXVuIHRvIGluZGljYXRlIHRoZSByZWNvcmQgdHlwZQpAQCAtNDM2NSwxNCArNDM2NSwxNCBAQAogdWxDU1JfTTNfQVJCX0NOVExfREVGQVVMVFsxMF06ICAgIEFycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIGRlZmF1bHQKIHVsQ1NSX00zX0FSQl9DTlRMX1VWRFsxMF06ICAgICAgICBBcnJheXMgd2l0aCB2YWx1ZXMgZm9yIENTUiBNMyBhcmJpdGVyIGZvciBVVkQgcGxheWJhY2suCiB1bENTUl9NM19BUkJfQ05UTF9GUzNEWzEwXTogICAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgRnVsbCBTY3JlZW4gM0QgYXBwbGljYXRpb25zLgotc0F2YWlsX1NDTEtbNV06ICAgICAgICAgICAgICAgICAgIEFycmF5cyB0byBwcm92aWRlIGF2YWlsYWJlIGxpc3Qgb2YgU0xDSyBhbmQgY29ycmVzcG9uZGluZyB2b2x0YWdlLCBvcmRlciBmcm9tIGxvdyB0byBoaWdoICAKK3NBdmFpbF9TQ0xLWzVdOiAgICAgICAgICAgICAgICAgICBBcnJheXMgdG8gcHJvdmlkZSBhdmFpbGFibGUgbGlzdCBvZiBTTENLIGFuZCBjb3JyZXNwb25kaW5nIHZvbHRhZ2UsIG9yZGVyIGZyb20gbG93IHRvIGhpZ2ggIAogdWxHTUNSZXN0b3JlUmVzZXRUaW1lOiAgICAgICAgICAgIEdNQyBwb3dlciByZXN0b3JlIGFuZCBHTUMgcmVzZXQgdGltZSB0byBjYWxjdWxhdGUgZGF0YSByZWNvbm5lY3Rpb24gbGF0ZW5jeS4gVW5pdCBpbiBucy4gCiB1bE1pbmltdW1OQ2xrOiAgICAgICAgICAgICAgICAgICAgTWluaW11bSBOQ0xLIHNwZWVkIGFtb25nIGFsbCBOQi1Qc3RhdGVzIHRvIGNhbGN1YWx0ZSBkYXRhIHJlY29ubmVjdGlvbiBsYXRlbmN5LiBVbml0IGluIDEwa0h6LiAKIHVsSWRsZU5DbGs6ICAgICAgICAgICAgICAgICAgICAgICBOQ0xLIHNwZWVkIHdoaWxlIG1lbW9yeSBydW5zIGluIHNlbGYtcmVmcmVzaCBzdGF0ZS4gVW5pdCBpbiAxMGtIei4KIHVsRERSX0RMTF9Qb3dlclVwVGltZTogICAgICAgICAgICBERFIgUEhZIERMTCBwb3dlciB1cCB0aW1lLiBVbml0IGluIG5zLgogdWxERFJfUExMX1Bvd2VyVXBUaW1lOiAgICAgICAgICAgIEREUiBQSFkgUExMIHBvd2VyIHVwIHRpbWUuIFVuaXQgaW4gbnMuCi11c1BDSUVDbGtTU1BlcmNlbnRhZ2U6ICAgICAgICAgICAgUENJRSBDbG9jayBTcHJlZCBTcGVjdHJ1bSBQZXJjZW50YWdlIGluIHVuaXQgMC4wMSU7IDEwMCBtZWFuIDElLgotdXNQQ0lFQ2xrU1NUeXBlOiAgICAgICAgICAgICAgICAgIFBDSUUgQ2xvY2sgU3ByZWQgU3BlY3RydW0gVHlwZS4gMCBmb3IgRG93biBzcHJlYWQoZGVmYXVsdCk7IDEgZm9yIENlbnRlciBzcHJlYWQuCit1c1BDSUVDbGtTU1BlcmNlbnRhZ2U6ICAgICAgICAgICAgUENJRSBDbG9jayBTcHJlYWQgU3BlY3RydW0gUGVyY2VudGFnZSBpbiB1bml0IDAuMDElOyAxMDAgbWVhbiAxJS4KK3VzUENJRUNsa1NTVHlwZTogICAgICAgICAgICAgICAgICBQQ0lFIENsb2NrIFNwcmVhZCBTcGVjdHJ1bSBUeXBlLiAwIGZvciBEb3duIHNwcmVhZChkZWZhdWx0KTsgMSBmb3IgQ2VudGVyIHNwcmVhZC4KIHVzTHZkc1NTUGVyY2VudGFnZTogICAgICAgICAgICAgICBMVkRTIHBhbmVsICggbm90IGluY2x1ZGUgZURQICkgU3ByZWFkIFNwZWN0cnVtIFBlcmNlbnRhZ2UgaW4gdW5pdCBvZiAwLjAxJSwgPTAsIHVzZSBWQklPUyBkZWZhdWx0IHNldHRpbmcuIAogdXNMdmRzU1NwcmVhZFJhdGVJbjEwSHo6ICAgICAgICAgIExWRFMgcGFuZWwgKCBub3QgaW5jbHVkZSBlRFAgKSBTcHJlYWQgU3BlY3RydW0gZnJlcXVlbmN5IGluIHVuaXQgb2YgMTBIeiwgPTAsIHVzZSBWQklPUyBkZWZhdWx0IHNldHRpbmcuIAogdXNIRE1JU1NQZXJjZW50YWdlOiAgICAgICAgICAgICAgIEhETUkgU3ByZWFkIFNwZWN0cnVtIFBlcmNlbnRhZ2UgaW4gdW5pdCAwLjAxJTsgMTAwIG1lYW4gMSUsICA9MCwgdXNlIFZCSU9TIGRlZmF1bHQgc2V0dGluZy4gCkBAIC00NTU1LDcgKzQ1NTUsNyBAQAogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVRFQUMgMwogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVQyQUMgNAogCi0vL0J5dGUgYWxpZ25lZCBkZWZpbnRpb24gZm9yIEJJT1MgdXNhZ2UKKy8vQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UKICNkZWZpbmUgQVRPTV9TMF9DUlQxX01PTk9iMCAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzBfQ1JUMV9DT0xPUmIwICAgICAgICAgICAgMHgwMgogI2RlZmluZSBBVE9NX1MwX0NSVDFfTUFTS2IwICAgICAgICAgICAgIChBVE9NX1MwX0NSVDFfTU9OT2IwK0FUT01fUzBfQ1JUMV9DT0xPUmIwKQpAQCAtNDYyMSw3ICs0NjIxLDcgQEAKICNkZWZpbmUgQVRPTV9TMl9ESVNQTEFZX1JPVEFUSU9OX0FOR0xFX01BU0sgICAweEMwMDAwMDAwTAogCiAKLS8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQorLy9CeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1MyX1RWMV9TVEFOREFSRF9NQVNLYjAgICAgIDB4MEYKICNkZWZpbmUgQVRPTV9TMl9DVVJSRU5UX0JMX0xFVkVMX01BU0tiMSAweEZGCiAjZGVmaW5lIEFUT01fUzJfREVWSUNFX0RQTVNfU1RBVEViMiAgICAgMHgwMQpAQCAtNDY3MSw3ICs0NjcxLDcgQEAKICNkZWZpbmUgQVRPTV9TM19BTExPV19GQVNUX1BXUl9TV0lUQ0ggICAweDQwMDAwMDAwTAogI2RlZmluZSBBVE9NX1MzX1JRU1RfR1BVX1VTRV9NSU5fUFdSICAgIDB4ODAwMDAwMDBMCiAKLS8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQorLy9CeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1MzX0NSVDFfQUNUSVZFYjAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TM19MQ0QxX0FDVElWRWIwICAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzNfVFYxX0FDVElWRWIwICAgICAgICAgICAgMHgwNApAQCAtNDcwNyw3ICs0NzA3LDcgQEAKICNkZWZpbmUgQVRPTV9TNF9MQ0QxX1JFRlJFU0hfTUFTSyAgICAgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX1M0X0xDRDFfUkVGUkVTSF9TSElGVCAgICAgIDgKIAotLy9CeXRlIGFsaWduZWQgZGVmaW50aW9uIGZvciBCSU9TIHVzYWdlCisvL0J5dGUgYWxpZ25lZCBkZWZpbml0aW9uIGZvciBCSU9TIHVzYWdlCiAjZGVmaW5lIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLYjAJICAweDBGRgogI2RlZmluZSBBVE9NX1M0X0xDRDFfUkVGUkVTSF9NQVNLYjEJCSAgQVRPTV9TNF9MQ0QxX1BBTkVMX0lEX01BU0tiMAogI2RlZmluZSBBVE9NX1M0X1ZSQU1fSU5GT19NQVNLYjIgICAgICAgIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLYjAKQEAgLTQ3ODYsNyArNDc4Niw3IEBACiAjZGVmaW5lIEFUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFICAgICAgIDB4NDAwMDAwMDBMCiAjZGVmaW5lIEFUT01fUzZfQ09ORklHX0RJU1BMQVlfQ0hBTkdFX01BU0sgIDB4ODAwMDAwMDBMCiAKLS8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQorLy9CeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1M2X0RFVklDRV9DSEFOR0ViMCAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFYjAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzZfTElEX0NIQU5HRWIwICAgICAgICAgICAgMHgwNApAQCAtNTAyNyw3ICs1MDI3LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX01FTU9SWV9DTEVBTl9VUF9QQVJBTUVURVJTCiB7Ci0gIFVTSE9SVCAgdXNNZW1vcnlTdGFydDsgICAgICAgICAgICAgICAgLy9pbiA4S2IgYm91bmRyeSwgb2Zmc2V0IGZyb20gbWVtb3J5IGJhc2UgYWRkcmVzcworICBVU0hPUlQgIHVzTWVtb3J5U3RhcnQ7ICAgICAgICAgICAgICAgIC8vaW4gOEtiIGJvdW5kYXJ5LCBvZmZzZXQgZnJvbSBtZW1vcnkgYmFzZSBhZGRyZXNzCiAgIFVTSE9SVCAgdXNNZW1vcnlTaXplOyAgICAgICAgICAgICAgICAgLy84S2IgYmxvY2tzIGFsaWduZWQKIH1NRU1PUllfQ0xFQU5fVVBfUEFSQU1FVEVSUzsKICNkZWZpbmUgTUVNT1JZX0NMRUFOX1VQX1BTX0FMTE9DQVRJT04gTUVNT1JZX0NMRUFOX1VQX1BBUkFNRVRFUlMKQEAgLTY4NTUsNyArNjg1NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotLy8gRm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmb3IgY29tcGF0aWJsaXR5IGlzc3VlIGluIGRpZmZlcmVudCBTVyBjb21wb25lbnRzLiAKKy8vIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgaXNzdWUgaW4gZGlmZmVyZW50IFNXIGNvbXBvbmVudHMuIAogI2RlZmluZSBBVE9NX01BU1RFUl9EQVRBX1RBQkxFX1JFVklTSU9OICAgMHgwMQogI2RlZmluZSBPYmplY3RfSW5mbwkJCQkJCQkJCQkJCU9iamVjdF9IZWFkZXIJCQkKICNkZWZpbmUJQWRqdXN0QVJCX1NFUQkJCQkJCQkJCQkJTUNfSW5pdFBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCAxMGU0MWFmLi41MjlhM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtNTMxLDYgKzUzMSw5IEBACiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0hJR0hfRkJfRElWOwogCQllbHNlCiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOworCisJCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKQorCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAl9IGVsc2UgewogCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfTEVHQUNZOwogCkBAIC01NTksNyArNTYyLDYgQEAKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQlpZiAoc3NfZW5hYmxlZCkgewogCQkJCQlpZiAoc3MtPnJlZmRpdikgewotCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAkJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJCXBsbC0+cmVmZXJlbmNlX2RpdiA9IHNzLT5yZWZkaXY7CiAJCQkJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKQEAgLTEwMDksNiArMTAxMSw3IEBACiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKIAl1MzIgZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl9OT05FKTsKKwl1MzIgdG1wOwogCWludCByOwogCiAJLyogbm8gZmIgYm91bmQgKi8KQEAgLTExMzcsNiArMTE0MCwxNSBAQAogCVdSRUczMihFVkVSR1JFRU5fVklFV1BPUlRfU0laRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKIAkgICAgICAgKGNydGMtPm1vZGUuaGRpc3BsYXkgPDwgMTYpIHwgY3J0Yy0+bW9kZS52ZGlzcGxheSk7CiAKKwkvKiBwYWdlZmxpcCBzZXR1cCAqLworCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCisJdG1wID0gUlJFRzMyKEVWRVJHUkVFTl9HUlBIX0ZMSVBfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisJdG1wICY9IH5FVkVSR1JFRU5fR1JQSF9TVVJGQUNFX1VQREFURV9IX1JFVFJBQ0VfRU47CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX0ZMSVBfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgdG1wKTsKKworCS8qIHNldCBwYWdlZmxpcCB0byBoYXBwZW4gYW55d2hlcmUgaW4gdmJsYW5rIGludGVydmFsICovCisJV1JFRzMyKEVWRVJHUkVFTl9NQVNURVJfVVBEQVRFX01PREUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCiAJaWYgKCFhdG9taWMgJiYgZmIgJiYgZmIgIT0gY3J0Yy0+ZmIpIHsKIAkJcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkJcmJvID0gZ2VtX3RvX3JhZGVvbl9ibyhyYWRlb25fZmItPm9iaik7CkBAIC0xMTY3LDYgKzExNzksNyBAQAogCXVpbnQ2NF90IGZiX2xvY2F0aW9uOwogCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CiAJdTMyIGZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl9OT05FOworCXUzMiB0bXA7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTI5NCw2ICsxMzA3LDE1IEBACiAJV1JFRzMyKEFWSVZPX0QxTU9ERV9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAogCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKIAorCS8qIHBhZ2VmbGlwIHNldHVwICovCisJLyogbWFrZSBzdXJlIGZsaXAgaXMgYXQgdmIgcmF0aGVyIHRoYW4gaGIgKi8KKwl0bXAgPSBSUkVHMzIoQVZJVk9fRDFHUlBIX0ZMSVBfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisJdG1wICY9IH5BVklWT19EMUdSUEhfU1VSRkFDRV9VUERBVEVfSF9SRVRSQUNFX0VOOworCVdSRUczMihBVklWT19EMUdSUEhfRkxJUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOworCisJLyogc2V0IHBhZ2VmbGlwIHRvIGhhcHBlbiBhbnl3aGVyZSBpbiB2YmxhbmsgaW50ZXJ2YWwgKi8KKwlXUkVHMzIoQVZJVk9fRDFNT0RFX01BU1RFUl9VUERBVEVfTU9ERSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisKIAlpZiAoIWF0b21pYyAmJiBmYiAmJiBmYiAhPSBjcnRjLT5mYikgewogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoZmIpOwogCQlyYm8gPSBnZW1fdG9fcmFkZW9uX2JvKHJhZGVvbl9mYi0+b2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCmluZGV4IDk0MTA4MGEuLjkwNzNlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwpAQCAtNDMsMTcgKzQzLDYgQEAKIAogdm9pZCBldmVyZ3JlZW5fcHJlX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXTsKLQl1MzIgdG1wOwotCi0JLyogbWFrZSBzdXJlIGZsaXAgaXMgYXQgdmIgcmF0aGVyIHRoYW4gaGIgKi8KLQl0bXAgPSBSUkVHMzIoRVZFUkdSRUVOX0dSUEhfRkxJUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KTsKLQl0bXAgJj0gfkVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfVVBEQVRFX0hfUkVUUkFDRV9FTjsKLQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfRkxJUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOwotCi0JLyogc2V0IHBhZ2VmbGlwIHRvIGhhcHBlbiBhbnl3aGVyZSBpbiB2YmxhbmsgaW50ZXJ2YWwgKi8KLQlXUkVHMzIoRVZFUkdSRUVOX01BU1RFUl9VUERBVEVfTU9ERSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7Ci0KIAkvKiBlbmFibGUgdGhlIHBmbGlwIGludCAqLwogCXJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9nZXQocmRldiwgY3J0Yyk7CiB9CkBAIC0xMzEsMTEgKzEyMCwxNiBAQAogCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKnBzID0gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3JlcV9wc19pZHhdOwogCXN0cnVjdCByYWRlb25fdm9sdGFnZSAqdm9sdGFnZSA9ICZwcy0+Y2xvY2tfaW5mb1tyZXFfY21faWR4XS52b2x0YWdlOwogCi0JaWYgKCh2b2x0YWdlLT50eXBlID09IFZPTFRBR0VfU1cpICYmIHZvbHRhZ2UtPnZvbHRhZ2UpIHsKLQkJaWYgKHZvbHRhZ2UtPnZvbHRhZ2UgIT0gcmRldi0+cG0uY3VycmVudF92ZGRjKSB7Ci0JCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52b2x0YWdlKTsKKwlpZiAodm9sdGFnZS0+dHlwZSA9PSBWT0xUQUdFX1NXKSB7CisJCWlmICh2b2x0YWdlLT52b2x0YWdlICYmICh2b2x0YWdlLT52b2x0YWdlICE9IHJkZXYtPnBtLmN1cnJlbnRfdmRkYykpIHsKKwkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZvbHRhZ2UsIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDKTsKIAkJCXJkZXYtPnBtLmN1cnJlbnRfdmRkYyA9IHZvbHRhZ2UtPnZvbHRhZ2U7Ci0JCQlEUk1fREVCVUcoIlNldHRpbmc6IHY6ICVkXG4iLCB2b2x0YWdlLT52b2x0YWdlKTsKKwkJCURSTV9ERUJVRygiU2V0dGluZzogdmRkYzogJWRcbiIsIHZvbHRhZ2UtPnZvbHRhZ2UpOworCQl9CisJCWlmICh2b2x0YWdlLT52ZGRjaSAmJiAodm9sdGFnZS0+dmRkY2kgIT0gcmRldi0+cG0uY3VycmVudF92ZGRjaSkpIHsKKwkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZkZGNpLCBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQ0kpOworCQkJcmRldi0+cG0uY3VycmVudF92ZGRjaSA9IHZvbHRhZ2UtPnZkZGNpOworCQkJRFJNX0RFQlVHKCJTZXR0aW5nOiB2ZGRjaTogJWRcbiIsIHZvbHRhZ2UtPnZkZGNpKTsKIAkJfQogCX0KIH0KQEAgLTM1OSw3ICszNTMsNyBAQAogCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm90aGVyX21vZGUpCiB7Ci0JdTMyIHRtcCA9IDA7CisJdTMyIHRtcDsKIAkvKgogCSAqIExpbmUgQnVmZmVyIFNldHVwCiAJICogVGhlcmUgYXJlIDMgbGluZSBidWZmZXJzLCBlYWNoIG9uZSBzaGFyZWQgYnkgMiBkaXNwbGF5IGNvbnRyb2xsZXJzLgpAQCAtMzY5LDY0ICszNjMsNjMgQEAKIAkgKiBmaXJzdCBkaXNwbGF5IGNvbnRyb2xsZXIKIAkgKiAgMCAtIGZpcnN0IGhhbGYgb2YgbGIgKDM4NDAgKiAyKQogCSAqICAxIC0gZmlyc3QgMy80IG9mIGxiICg1NzYwICogMikKLQkgKiAgMiAtIHdob2xlIGxiICg3NjgwICogMikKKwkgKiAgMiAtIHdob2xlIGxiICg3NjgwICogMiksIG90aGVyIGNydGMgbXVzdCBiZSBkaXNhYmxlZAogCSAqICAzIC0gZmlyc3QgMS80IG9mIGxiICgxOTIwICogMikKIAkgKiBzZWNvbmQgZGlzcGxheSBjb250cm9sbGVyCiAJICogIDQgLSBzZWNvbmQgaGFsZiBvZiBsYiAoMzg0MCAqIDIpCiAJICogIDUgLSBzZWNvbmQgMy80IG9mIGxiICg1NzYwICogMikKLQkgKiAgNiAtIHdob2xlIGxiICg3NjgwICogMikKKwkgKiAgNiAtIHdob2xlIGxiICg3NjgwICogMiksIG90aGVyIGNydGMgbXVzdCBiZSBkaXNhYmxlZAogCSAqICA3IC0gbGFzdCAxLzQgb2YgbGIgKDE5MjAgKiAyKQogCSAqLwotCWlmIChtb2RlICYmIG90aGVyX21vZGUpIHsKLQkJaWYgKG1vZGUtPmhkaXNwbGF5ID4gb3RoZXJfbW9kZS0+aGRpc3BsYXkpIHsKLQkJCWlmIChtb2RlLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wID0gMTsgLyogMy80ICovCi0JCQllbHNlCi0JCQkJdG1wID0gMDsgLyogMS8yICovCi0JCX0gZWxzZSBpZiAob3RoZXJfbW9kZS0+aGRpc3BsYXkgPiBtb2RlLT5oZGlzcGxheSkgewotCQkJaWYgKG90aGVyX21vZGUtPmhkaXNwbGF5ID4gMjU2MCkKLQkJCQl0bXAgPSAzOyAvKiAxLzQgKi8KLQkJCWVsc2UKLQkJCQl0bXAgPSAwOyAvKiAxLzIgKi8KLQkJfSBlbHNlCisJLyogdGhpcyBjYW4gZ2V0IHRyaWNreSBpZiB3ZSBoYXZlIHR3byBsYXJnZSBkaXNwbGF5cyBvbiBhIHBhaXJlZCBncm91cAorCSAqIG9mIGNydGNzLiAgSWRlYWxseSBmb3IgbXVsdGlwbGUgbGFyZ2UgZGlzcGxheXMgd2UnZCBhc3NpZ24gdGhlbSB0bworCSAqIG5vbi1saW5rZWQgY3J0Y3MgZm9yIG1heGltdW0gbGluZSBidWZmZXIgYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAocmFkZW9uX2NydGMtPmJhc2UuZW5hYmxlZCAmJiBtb2RlKSB7CisJCWlmIChvdGhlcl9tb2RlKQogCQkJdG1wID0gMDsgLyogMS8yICovCi0JfSBlbHNlIGlmIChtb2RlKQotCQl0bXAgPSAyOyAvKiB3aG9sZSAqLwotCWVsc2UgaWYgKG90aGVyX21vZGUpCi0JCXRtcCA9IDM7IC8qIDEvNCAqLworCQllbHNlCisJCQl0bXAgPSAyOyAvKiB3aG9sZSAqLworCX0gZWxzZQorCQl0bXAgPSAwOwogCiAJLyogc2Vjb25kIGNvbnRyb2xsZXIgb2YgdGhlIHBhaXIgdXNlcyBzZWNvbmQgaGFsZiBvZiB0aGUgbGIgKi8KIAlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgJSAyKQogCQl0bXAgKz0gNDsKIAlXUkVHMzIoRENfTEJfTUVNT1JZX1NQTElUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOwogCi0Jc3dpdGNoICh0bXApIHsKLQljYXNlIDA6Ci0JY2FzZSA0OgotCWRlZmF1bHQ6Ci0JCWlmIChBU0lDX0lTX0RDRTUocmRldikpCi0JCQlyZXR1cm4gNDA5NiAqIDI7Ci0JCWVsc2UKLQkJCXJldHVybiAzODQwICogMjsKLQljYXNlIDE6Ci0JY2FzZSA1OgotCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQotCQkJcmV0dXJuIDYxNDQgKiAyOwotCQllbHNlCi0JCQlyZXR1cm4gNTc2MCAqIDI7Ci0JY2FzZSAyOgotCWNhc2UgNjoKLQkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKLQkJCXJldHVybiA4MTkyICogMjsKLQkJZWxzZQotCQkJcmV0dXJuIDc2ODAgKiAyOwotCWNhc2UgMzoKLQljYXNlIDc6Ci0JCWlmIChBU0lDX0lTX0RDRTUocmRldikpCi0JCQlyZXR1cm4gMjA0OCAqIDI7Ci0JCWVsc2UKLQkJCXJldHVybiAxOTIwICogMjsKKwlpZiAocmFkZW9uX2NydGMtPmJhc2UuZW5hYmxlZCAmJiBtb2RlKSB7CisJCXN3aXRjaCAodG1wKSB7CisJCWNhc2UgMDoKKwkJY2FzZSA0OgorCQlkZWZhdWx0OgorCQkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCQlyZXR1cm4gNDA5NiAqIDI7CisJCQllbHNlCisJCQkJcmV0dXJuIDM4NDAgKiAyOworCQljYXNlIDE6CisJCWNhc2UgNToKKwkJCWlmIChBU0lDX0lTX0RDRTUocmRldikpCisJCQkJcmV0dXJuIDYxNDQgKiAyOworCQkJZWxzZQorCQkJCXJldHVybiA1NzYwICogMjsKKwkJY2FzZSAyOgorCQljYXNlIDY6CisJCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQorCQkJCXJldHVybiA4MTkyICogMjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gNzY4MCAqIDI7CisJCWNhc2UgMzoKKwkJY2FzZSA3OgorCQkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCQlyZXR1cm4gMjA0OCAqIDI7CisJCQllbHNlCisJCQkJcmV0dXJuIDE5MjAgKiAyOworCQl9CiAJfQorCisJLyogY29udHJvbGxlciBub3QgZW5hYmxlZCwgc28gbm8gbGIgdXNlZCAqLworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTMyIGV2ZXJncmVlbl9nZXRfbnVtYmVyX29mX2RyYW1fY2hhbm5lbHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC04NjksOSArODYyLDE1IEBACiAJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTIHwKIAkJU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgfAogCQlFRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfCBFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKLQlXUkVHMzIoTUNfVk1fTURfTDFfVExCMF9DTlRMLCB0bXApOwotCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7Ci0JV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCVdSRUczMihGVVNfTUNfVk1fTURfTDFfVExCMF9DTlRMLCB0bXApOworCQlXUkVHMzIoRlVTX01DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwkJV1JFRzMyKEZVU19NQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJfSBlbHNlIHsKKwkJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwkJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwkJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwl9CiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjBfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMV9DTlRMLCB0bXApOwogCVdSRUczMihNQ19WTV9NQl9MMV9UTEIyX0NOVEwsIHRtcCk7CkBAIC0xNzgxLDcgKzE3ODAsMTAgQEAKIAogCiAJbWNfc2hhcmVkX2NobWFwID0gUlJFRzMyKE1DX1NIQVJFRF9DSE1BUCk7Ci0JbWNfYXJiX3JhbWNmZyA9IFJSRUczMihNQ19BUkJfUkFNQ0ZHKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQltY19hcmJfcmFtY2ZnID0gUlJFRzMyKEZVU19NQ19BUkJfUkFNQ0ZHKTsKKwllbHNlCisJCW1jX2FyYl9yYW1jZmcgPSBSUkVHMzIoTUNfQVJCX1JBTUNGRyk7CiAKIAlzd2l0Y2ggKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXMpIHsKIAljYXNlIDE6CkBAIC0yNTg3LDcgKzI1ODksNyBAQAogCXUzMiB3cHRyLCB0bXA7CiAKIAlpZiAocmRldi0+d2IuZW5hYmxlZCkKLQkJd3B0ciA9IHJkZXYtPndiLndiW1I2MDBfV0JfSUhfV1BUUl9PRkZTRVQvNF07CisJCXdwdHIgPSBsZTMyX3RvX2NwdShyZGV2LT53Yi53YltSNjAwX1dCX0lIX1dQVFJfT0ZGU0VULzRdKTsKIAllbHNlCiAJCXdwdHIgPSBSUkVHMzIoSUhfUkJfV1BUUik7CiAKQEAgLTI5MzAsMTEgKzI5MzIsNiBAQAogCQlyZGV2LT5hc2ljLT5jb3B5ID0gTlVMTDsKIAkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiZmFpbGVkIGJsaXR0ZXIgKCVkKSBmYWxsaW5nIGJhY2sgdG8gbWVtY3B5XG4iLCByKTsKIAl9Ci0JLyogWFhYOiBvbnRhcmlvIGhhcyBwcm9ibGVtcyBibGl0dGluZyB0byBnYXJ0IGF0IHRoZSBtb21lbnQgKi8KLQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUEFMTSkgewotCQlyZGV2LT5hc2ljLT5jb3B5ID0gTlVMTDsKLQkJcmFkZW9uX3R0bV9zZXRfYWN0aXZlX3ZyYW1fc2l6ZShyZGV2LCByZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSk7Ci0JfQogCiAJLyogYWxsb2NhdGUgd2IgYnVmZmVyICovCiAJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwpAQCAtMzA0Nyw5ICszMDQ0LDYgQEAKIHsKIAlpbnQgcjsKIAotCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKIAkvKiBUaGlzIGRvbid0IGRvIG11Y2ggKi8KIAlyID0gcmFkZW9uX2dlbV9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMzE2MSw3ICszMTU1LDYgQEAKIAlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKIAlyZGV2LT5iaW9zID0gTlVMTDsKLQlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBldmVyZ3JlZW5fcGNpZV9nZW4yX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9jcy5jCmluZGV4IGVkZGU5MGIuLjIzZDM2NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fY3MuYwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAJfQogCWliID0gcC0+aWItPnB0cjsKIAlzd2l0Y2ggKHJlZykgewotCS8qIGZvcmNlIGZvbGxvd2luZyByZWcgdG8gMCBpbiBhbiBhdHRlbXAgdG8gZGlzYWJsZSBvdXQgYnVmZmVyCisJLyogZm9yY2UgZm9sbG93aW5nIHJlZyB0byAwIGluIGFuIGF0dGVtcHQgdG8gZGlzYWJsZSBvdXQgYnVmZmVyCiAJICogd2hpY2ggd2lsbCBuZWVkIHVzIHRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyBpdCB3b3JrcyB0byBwZXJmb3JtCiAJICogc2VjdXJpdHkgY2hlY2sgb24gaXQgKEplcm9tZSkKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKaW5kZXggOWFhYTNmMC4uZmM0MGUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKQEAgLTIwMCw2ICsyMDAsNyBAQAogI2RlZmluZQkJQlVSU1RMRU5HVEhfU0hJRlQJCQkJOQogI2RlZmluZQkJQlVSU1RMRU5HVEhfTUFTSwkJCQkweDAwMDAwMjAwCiAjZGVmaW5lCQlDSEFOU0laRV9PVkVSUklERQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUJRlVTX01DX0FSQl9SQU1DRkcJCQkJMHgyNzY4CiAjZGVmaW5lCU1DX1ZNX0FHUF9UT1AJCQkJCTB4MjAyOAogI2RlZmluZQlNQ19WTV9BR1BfQk9UCQkJCQkweDIwMkMKICNkZWZpbmUJTUNfVk1fQUdQX0JBU0UJCQkJCTB4MjAzMApAQCAtMjIxLDYgKzIyMiwxMSBAQAogI2RlZmluZQlNQ19WTV9NRF9MMV9UTEIwX0NOVEwJCQkJMHgyNjU0CiAjZGVmaW5lCU1DX1ZNX01EX0wxX1RMQjFfQ05UTAkJCQkweDI2NTgKICNkZWZpbmUJTUNfVk1fTURfTDFfVExCMl9DTlRMCQkJCTB4MjY1QworCisjZGVmaW5lCUZVU19NQ19WTV9NRF9MMV9UTEIwX0NOVEwJCQkweDI2NUMKKyNkZWZpbmUJRlVTX01DX1ZNX01EX0wxX1RMQjFfQ05UTAkJCTB4MjY2MAorI2RlZmluZQlGVVNfTUNfVk1fTURfTDFfVExCMl9DTlRMCQkJMHgyNjY0CisKICNkZWZpbmUJTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUgkJMHgyMDNDCiAjZGVmaW5lCU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIJCQkweDIwMzgKICNkZWZpbmUJTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSCQkJMHgyMDM0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKaW5kZXggN2FhZGUyMC4uM2Q4YTc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAKIAljY19yYl9iYWNrZW5kX2Rpc2FibGUgPSBSUkVHMzIoQ0NfUkJfQkFDS0VORF9ESVNBQkxFKTsKIAljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSBSUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHKTsKLQljZ3RzX3RjY19kaXNhYmxlID0gUlJFRzMyKENHVFNfVENDX0RJU0FCTEUpOworCWNndHNfdGNjX2Rpc2FibGUgPSAweGZmMDAwMDAwOwogCWdjX3VzZXJfcmJfYmFja2VuZF9kaXNhYmxlID0gUlJFRzMyKEdDX1VTRVJfUkJfQkFDS0VORF9ESVNBQkxFKTsKIAlnY191c2VyX3NoYWRlcl9waXBlX2NvbmZpZyA9IFJSRUczMihHQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRyk7CiAJY2d0c191c2VyX3RjY19kaXNhYmxlID0gUlJFRzMyKENHVFNfVVNFUl9UQ0NfRElTQUJMRSk7CkBAIC04NzEsNyArODcxLDcgQEAKIAogCXNteF9kY19jdGwwID0gUlJFRzMyKFNNWF9EQ19DVEwwKTsKIAlzbXhfZGNfY3RsMCAmPSB+TlVNQkVSX09GX1NFVFMoMHgxZmYpOwotCXNteF9kY19jdGwwIHw9IE5VTUJFUl9PRl9TRVRTKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMpOworCXNteF9kY19jdGwwIHw9IE5VTUJFUl9PRl9TRVRTKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbnVtX29mX3NldHMpOwogCVdSRUczMihTTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOwogCiAJV1JFRzMyKFNQSV9DT05GSUdfQ05UTF8xLCBWVFhfRE9ORV9ERUxBWSg0KSB8IENSQ19TSU1EX0lEX1dBRERSX0RJU0FCTEUpOwpAQCAtODg3LDIwICs4ODcsMjAgQEAKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgRElTQUJMRV9DVUJFX0FOSVNPKTsKIAotCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zaXplIC8gNCkgLSAxKSB8Ci0JCQkJCVBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfcG9zX3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CisJV1JFRzMyKFNYX0VYUE9SVF9CVUZGRVJfU0laRVMsIChDT0xPUl9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLmNheW1hbi5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQlTTVhfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKIAotCVdSRUczMihQQV9TQ19GSUZPX1NJWkUsIChTQ19QUklNX0ZJRk9fU0laRShyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJIFNDX0hJWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSkgfAotCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUpKSk7CisJV1JFRzMyKFBBX1NDX0ZJRk9fU0laRSwgKFNDX1BSSU1fRklGT19TSVpFKHJkZXYtPmNvbmZpZy5jYXltYW4uc2NfcHJpbV9maWZvX3NpemUpIHwKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5jYXltYW4uc2NfaGl6X3RpbGVfZmlmb19zaXplKSB8CisJCQkJIFNDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcuY2F5bWFuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSkpKTsKIAogCiAJV1JFRzMyKFZHVF9OVU1fSU5TVEFOQ0VTLCAxKTsKIAogCVdSRUczMihDUF9QRVJGTU9OX0NOVEwsIDApOwogCi0JV1JFRzMyKFNRX01TX0ZJRk9fU0laRVMsIChDQUNIRV9GSUZPX1NJWkUoMTYgKiByZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cykgfAorCVdSRUczMihTUV9NU19GSUZPX1NJWkVTLCAoQ0FDSEVfRklGT19TSVpFKDE2ICogcmRldi0+Y29uZmlnLmNheW1hbi5zcV9udW1fY2ZfaW5zdHMpIHwKIAkJCQkgIEZFVENIX0ZJRk9fSElXQVRFUigweDQpIHwKIAkJCQkgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKIAkJCQkgIEFMVV9VUERBVEVfRklGT19ISVdBVEVSKDB4OCkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggODcxMzczMS4uNTVhN2YxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogCXN0YXR1cyA9IFJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyk7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiKCVzOiVkKSBSQkJNX1NUQVRVUz0weCUwOFhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgc3RhdHVzKTsKIAkvKiByZXNldHRpbmcgdGhlIENQIHNlZW1zIHRvIGJlIHByb2JsZW1hdGljIHNvbWV0aW1lcyBpdCBlbmQgdXAKLQkgKiBoYXJkIGxvY2tpbmcgdGhlIGNvbXB1dGVyLCBidXQgaXQncyBuZWNlc3NhcnkgZm9yIHN1Y2Nlc3NmdWxsCisJICogaGFyZCBsb2NraW5nIHRoZSBjb21wdXRlciwgYnV0IGl0J3MgbmVjZXNzYXJ5IGZvciBzdWNjZXNzZnVsCiAJICogcmVzZXQgbW9yZSB0ZXN0ICYgcGxheWluZyBpcyBuZWVkZWQgb24gUjNYWC9SNFhYIHRvIGZpbmQgYQogCSAqIHJlbGlhYmxlIChpZiBhbnkgc29sdXRpb24pCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKaW5kZXggZjBiY2UzOS4uMDBjMGQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaApAQCAtNjA4LDcgKzYwOCw3IEBACiAgKiBNeSBndWVzcyBpcyB0aGF0IHRoZXJlIGFyZSB0d28gYml0cyBmb3IgZWFjaCB6YmlhcyBwcmltaXRpdmUKICAqIChGSUxMLCBMSU5FLCBQT0lOVCkuCiAgKiAgT25lIHRvIGVuYWJsZSBkZXB0aCB0ZXN0IGFuZCBvbmUgZm9yIGRlcHRoIHdyaXRlLgotICogWWV0IHRoaXMgZG9lc250IGV4cGxhaW4gd2h5IGRlcHRoIHdyaXRlcyB3b3JrIC4uLgorICogWWV0IHRoaXMgZG9lc24ndCBleHBsYWluIHdoeSBkZXB0aCB3cml0ZXMgd29yayAuLi4KICAqLwogI2RlZmluZSBSMzAwX1JFX09DQ0xVU0lPTl9DTlRMCQkgICAgMHg0MkI0CiAjCWRlZmluZSBSMzAwX09DQ0xVU0lPTl9PTgkJKDE8PDEpCkBAIC04MTcsNyArODE3LDcgQEAKICMJZGVmaW5lIFIzMDBfVFhfTUlOX0ZJTFRFUl9MSU5FQVJfTUlQX05FQVJFU1QgICAgICAgICg2ICA8PCAgMTEpCiAjCWRlZmluZSBSMzAwX1RYX01JTl9GSUxURVJfTElORUFSX01JUF9MSU5FQVIgICAgICAgICAoMTAgPDwgIDExKQogCi0vKiBOT1RFOiBORUFSRVNUIGRvZXNudCBzZWVtIHRvIGV4aXN0LgorLyogTk9URTogTkVBUkVTVCBkb2Vzbid0IHNlZW0gdG8gZXhpc3QuCiAgKiBJbSBub3Qgc2V0aW5nIE1BR19GSUxURVJfTUFTSyBhbmQgKDMgPDwgMTEpIG9uIGZvciBhbGwKICAqIGFuaXNvdHJvcHkgbW9kZXMgYmVjYXVzZSB0aGF0IHdvdWxkIHZvaWQgc2VsZWN0ZWQgbWFnIGZpbHRlcgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IGJlMjcxYzQuLjZmMjc1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC01ODcsNyArNTg3LDcgQEAKIAogCWlmICgodm9sdGFnZS0+dHlwZSA9PSBWT0xUQUdFX1NXKSAmJiB2b2x0YWdlLT52b2x0YWdlKSB7CiAJCWlmICh2b2x0YWdlLT52b2x0YWdlICE9IHJkZXYtPnBtLmN1cnJlbnRfdmRkYykgewotCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgdm9sdGFnZS0+dm9sdGFnZSk7CisJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52b2x0YWdlLCBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQyk7CiAJCQlyZGV2LT5wbS5jdXJyZW50X3ZkZGMgPSB2b2x0YWdlLT52b2x0YWdlOwogCQkJRFJNX0RFQlVHX0RSSVZFUigiU2V0dGluZzogdjogJWRcbiIsIHZvbHRhZ2UtPnZvbHRhZ2UpOwogCQl9CkBAIC0yNTA5LDkgKzI1MDksNiBAQAogewogCWludCByOwogCi0JciA9IHJhZGVvbl9kdW1teV9wYWdlX2luaXQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOwogCWlmIChyNjAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHJkZXYpKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgbWMgIVxuIik7CiAJfQpAQCAtMjYyNSw3ICsyNjIyLDYgQEAKIAlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKIAlyZGV2LT5iaW9zID0gTlVMTDsKLQlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQogCiAKQEAgLTMyMzUsNyArMzIzMSw3IEBACiAJdTMyIHdwdHIsIHRtcDsKIAogCWlmIChyZGV2LT53Yi5lbmFibGVkKQotCQl3cHRyID0gcmRldi0+d2Iud2JbUjYwMF9XQl9JSF9XUFRSX09GRlNFVC80XTsKKwkJd3B0ciA9IGxlMzJfdG9fY3B1KHJkZXYtPndiLndiW1I2MDBfV0JfSUhfV1BUUl9PRkZTRVQvNF0pOwogCWVsc2UKIAkJd3B0ciA9IFJSRUczMihJSF9SQl9XUFRSKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCAzMzI0NjIwLi5mZDE4YmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtOTIxLDcgKzkyMSw3IEBACiAJCXJldHVybiAwOwogCWliID0gcC0+aWItPnB0cjsKIAlzd2l0Y2ggKHJlZykgewotCS8qIGZvcmNlIGZvbGxvd2luZyByZWcgdG8gMCBpbiBhbiBhdHRlbXAgdG8gZGlzYWJsZSBvdXQgYnVmZmVyCisJLyogZm9yY2UgZm9sbG93aW5nIHJlZyB0byAwIGluIGFuIGF0dGVtcHQgdG8gZGlzYWJsZSBvdXQgYnVmZmVyCiAJICogd2hpY2ggd2lsbCBuZWVkIHVzIHRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyBpdCB3b3JrcyB0byBwZXJmb3JtCiAJICogc2VjdXJpdHkgY2hlY2sgb24gaXQgKEplcm9tZSkKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfaGRtaS5jCmluZGV4IDUwZGI2ZDYuLmY1YWM3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2hkbWkuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJcjYwMF9oZG1pX3ZpZGVvaW5mb2ZyYW1lKGVuY29kZXIsIFJHQiwgMCwgMCwgMCwgMCwKIAkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CiAKLQkvKiBpdCdzIHVua25vd24gd2hhdCB0aGVzZSBiaXRzIGRvIGV4Y2F0bHksIGJ1dCBpdCdzIGluZGVlZCBxdWl0ZSB1c2VmdWxsIGZvciBkZWJ1Z2dpbmcgKi8KKwkvKiBpdCdzIHVua25vd24gd2hhdCB0aGVzZSBiaXRzIGRvIGV4Y2F0bHksIGJ1dCBpdCdzIGluZGVlZCBxdWl0ZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyAqLwogCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JX0FVRElPX0RFQlVHXzAsIDB4MDBGRkZGRkYpOwogCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JX0FVRElPX0RFQlVHXzEsIDB4MDA3RkZGRkYpOwogCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JX0FVRElPX0RFQlVHXzIsIDB4MDAwMDAwMDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggY2ZlM2FmMS4uYmE2NDNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNzcsNyArMTc3LDcgQEAKIHZvaWQgcmFkZW9uX3BtX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9jb21iaW9zX2dldF9wb3dlcl9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tYmlvc19nZXRfcG93ZXJfbW9kZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByYWRlb25fYXRvbV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTE2IGxldmVsKTsKK3ZvaWQgcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUxNiB2b2x0YWdlX2xldmVsLCB1OCB2b2x0YWdlX3R5cGUpOwogdm9pZCByczY5MF9wbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC02NzksMTEgKzY3OSwxMSBAQAogICogQHNpZGVwb3J0X2JhbmR3aWR0aDogc2lkZXBvcnQgYmFuZHdpZHRoIHRoZSBncHUgaGFzIChNQnl0ZS9zKSAoSUdQKQogICogQGh0X2JhbmR3aWR0aDogICAgICAgaHQgYmFuZHdpZHRoIHRoZSBncHUgaGFzIChNQnl0ZS9zKSAoSUdQKQogICogQGNvcmVfYmFuZHdpZHRoOiAgICAgY29yZSBHUFUgYmFuZHdpZHRoIHRoZSBncHUgaGFzIChNQnl0ZS9zKSAoSUdQKQotICogQHNjbGs6ICAgICAgICAgIAlHUFUgY2xvY2sgTWh6IChjb3JlIGJhbmR3aXRoIGRlcGVuZHMgb2YgdGhpcyBjbG9jaykKKyAqIEBzY2xrOiAgICAgICAgICAJR1BVIGNsb2NrIE1oeiAoY29yZSBiYW5kd2lkdGggZGVwZW5kcyBvZiB0aGlzIGNsb2NrKQogICogQG5lZWRlZF9iYW5kd2lkdGg6ICAgY3VycmVudCBiYW5kd2lkdGggbmVlZHMKICAqCiAgKiBJdCBrZWVwcyB0cmFjayBvZiB2YXJpb3VzIGRhdGEgbmVlZGVkIHRvIHRha2UgcG93ZXJtYW5hZ2VtZW50IGRlY2lzaW9uLgotICogQmFuZHdpdGggbmVlZCBpcyB1c2VkIHRvIGRldGVybWluZSBtaW5pbXVuIGNsb2NrIG9mIHRoZSBHUFUgYW5kIG1lbW9yeS4KKyAqIEJhbmR3aWR0aCBuZWVkIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIG1pbmltdW4gY2xvY2sgb2YgdGhlIEdQVSBhbmQgbWVtb3J5LgogICogRXF1YXRpb24gYmV0d2VlbiBncHUvbWVtb3J5IGNsb2NrIGFuZCBhdmFpbGFibGUgYmFuZHdpZHRoIGlzIGh3IGRlcGVuZGVudAogICogKHR5cGUgb2YgbWVtb3J5LCBidXMgc2l6ZSwgZWZmaWNpZW5jeSwgLi4uKQogICovCkBAIC03NjcsNyArNzY3LDkgQEAKIAl1OCB2ZGRjaV9pZDsgLyogaW5kZXggaW50byB2ZGRjaSB2b2x0YWdlIHRhYmxlICovCiAJYm9vbCB2ZGRjaV9lbmFibGVkOwogCS8qIHI2eHgrIHN3ICovCi0JdTMyIHZvbHRhZ2U7CisJdTE2IHZvbHRhZ2U7CisJLyogZXZlcmdyZWVuKyB2ZGRjaSAqLworCXUxNiB2ZGRjaTsKIH07CiAKIC8qIGNsb2NrIG1vZGUgZmxhZ3MgKi8KQEAgLTgzNSwxMCArODM3LDEyIEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleDsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NjbGs7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9tY2xrOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmRkYzsKKwl1MTYgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZkZGM7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92ZGRjaTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3NjbGs7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9tY2xrOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmRkYzsKKwl1MTYgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZkZGM7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92ZGRjaTsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmNfYnVzOwogCS8qIHNlbGVjdGVkIHBtIG1ldGhvZCAqLwogCWVudW0gcmFkZW9uX3BtX21ldGhvZCAgICAgcG1fbWV0aG9kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCmluZGV4IGViODg4ZWUuLmNhNTc2MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkJcmRldi0+bWNfcnJlZyA9ICZyczYwMF9tY19ycmVnOwogCQlyZGV2LT5tY193cmVnID0gJnJzNjAwX21jX3dyZWc7CiAJfQotCWlmICgocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkgJiYgKHJkZXYtPmZhbWlseSA8PSBDSElQX0hFTUxPQ0spKSB7CisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKIAkJcmRldi0+cGNpZXBfcnJlZyA9ICZyNjAwX3BjaWVwX3JyZWc7CiAJCXJkZXYtPnBjaWVwX3dyZWcgPSAmcjYwMF9wY2llcF93cmVnOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDAyZDVjNDEuLjkwZGZiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAJCX0KIAl9CiAKLQkvKiBBY2VyIGxhcHRvcCAoQWNlciBUcmF2ZWxNYXRlIDU3MzBHKSBoYXMgYW4gSERNSSBwb3J0CisJLyogQWNlciBsYXB0b3AgKEFjZXIgVHJhdmVsTWF0ZSA1NzMwLzU3MzBHKSBoYXMgYW4gSERNSSBwb3J0CiAJICogb24gdGhlIGxhcHRvcCBhbmQgYSBEVkkgcG9ydCBvbiB0aGUgZG9ja2luZyBzdGF0aW9uIGFuZAogCSAqIGJvdGggc2hhcmUgdGhlIHNhbWUgZW5jb2RlciwgaHBkIHBpbiwgYW5kIGRkYyBsaW5lLgogCSAqIFNvIHdoaWxlIHRoZSBiaW9zIHRhYmxlIGlzIHRlY2huaWNhbGx5IGNvcnJlY3QsCkBAIC00NDAsNyArNDQwLDcgQEAKIAkgKiB3aXRoIGRpZmZlcmVudCBjcnRjcyB3aGljaCBpc24ndCBwb3NzaWJsZSBvbiB0aGUgaGFyZHdhcmUKIAkgKiBzaWRlIGFuZCBsZWF2ZXMgbm8gY3J0Y3MgZm9yIExWRFMgb3IgVkdBLgogCSAqLwotCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NWM0KSAmJgorCWlmICgoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTVjNCkgfHwgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTU5MSkpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI1KSAmJgogCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDEzYykpIHsKIAkJaWYgKCgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpICYmCkBAIC02NzUsNyArNjc1LDggQEAKIAkJCQkJCQlBVE9NX0VOQ09ERVJfQ0FQX1JFQ09SRCAqY2FwX3JlY29yZDsKIAkJCQkJCQl1MTYgY2FwcyA9IDA7CiAKLQkJCQkJCQl3aGlsZSAocmVjb3JkLT51Y1JlY29yZFR5cGUgPiAwICYmCisJCQkJCQkJd2hpbGUgKHJlY29yZC0+dWNSZWNvcmRTaXplID4gMCAmJgorCQkJCQkJCSAgICAgICByZWNvcmQtPnVjUmVjb3JkVHlwZSA+IDAgJiYKIAkJCQkJCQkgICAgICAgcmVjb3JkLT51Y1JlY29yZFR5cGUgPD0gQVRPTV9NQVhfT0JKRUNUX1JFQ09SRF9OVU1CRVIpIHsKIAkJCQkJCQkJc3dpdGNoIChyZWNvcmQtPnVjUmVjb3JkVHlwZSkgewogCQkJCQkJCQljYXNlIEFUT01fRU5DT0RFUl9DQVBfUkVDT1JEX1RZUEU6CkBAIC03MjAsNyArNzIxLDggQEAKIAkJCQkJCQkJCWJyZWFrOwogCQkJCQkJCX0KIAotCQkJCQkJCXdoaWxlIChyZWNvcmQtPnVjUmVjb3JkVHlwZSA+IDAgJiYKKwkJCQkJCQl3aGlsZSAocmVjb3JkLT51Y1JlY29yZFNpemUgPiAwICYmCisJCQkJCQkJICAgICAgIHJlY29yZC0+dWNSZWNvcmRUeXBlID4gMCAmJgogCQkJCQkJCSAgICAgICByZWNvcmQtPnVjUmVjb3JkVHlwZSA8PSBBVE9NX01BWF9PQkpFQ1RfUkVDT1JEX05VTUJFUikgewogCQkJCQkJCQlzd2l0Y2ggKHJlY29yZC0+dWNSZWNvcmRUeXBlKSB7CiAJCQkJCQkJCWNhc2UgQVRPTV9JMkNfUkVDT1JEX1RZUEU6CkBAIC03ODIsMTAgKzc4NCw5IEBACiAJCQkJCQlBVE9NX0hQRF9JTlRfUkVDT1JEICpocGRfcmVjb3JkOwogCQkJCQkJQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUyAqaTJjX2NvbmZpZzsKIAotCQkJCQkJd2hpbGUgKHJlY29yZC0+dWNSZWNvcmRUeXBlID4gMAotCQkJCQkJICAgICAgICYmIHJlY29yZC0+Ci0JCQkJCQkgICAgICAgdWNSZWNvcmRUeXBlIDw9Ci0JCQkJCQkgICAgICAgQVRPTV9NQVhfT0JKRUNUX1JFQ09SRF9OVU1CRVIpIHsKKwkJCQkJCXdoaWxlIChyZWNvcmQtPnVjUmVjb3JkU2l6ZSA+IDAgJiYKKwkJCQkJCSAgICAgICByZWNvcmQtPnVjUmVjb3JkVHlwZSA+IDAgJiYKKwkJCQkJCSAgICAgICByZWNvcmQtPnVjUmVjb3JkVHlwZSA8PSBBVE9NX01BWF9PQkpFQ1RfUkVDT1JEX05VTUJFUikgewogCQkJCQkJCXN3aXRjaCAocmVjb3JkLT51Y1JlY29yZFR5cGUpIHsKIAkJCQkJCQljYXNlIEFUT01fSTJDX1JFQ09SRF9UWVBFOgogCQkJCQkJCQlpMmNfcmVjb3JkID0KQEAgLTE1NzMsOSArMTU3NCwxNyBAQAogCQkJQVRPTV9GQUtFX0VESURfUEFUQ0hfUkVDT1JEICpmYWtlX2VkaWRfcmVjb3JkOwogCQkJQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRCAqcGFuZWxfcmVzX3JlY29yZDsKIAkJCWJvb2wgYmFkX3JlY29yZCA9IGZhbHNlOwotCQkJdTggKnJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCi0JCQkJCSAgICBkYXRhX29mZnNldCArCi0JCQkJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOworCQkJdTggKnJlY29yZDsKKworCQkJaWYgKChmcmV2ID09IDEpICYmIChjcmV2IDwgMikpCisJCQkJLyogYWJzb2x1dGUgKi8KKwkJCQlyZWNvcmQgPSAodTggKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpKTsKKwkJCWVsc2UKKwkJCQkvKiByZWxhdGl2ZSAqLworCQkJCXJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCisJCQkJCQlkYXRhX29mZnNldCArCisJCQkJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOwogCQkJd2hpbGUgKCpyZWNvcmQgIT0gQVRPTV9SRUNPUkRfRU5EX1RZUEUpIHsKIAkJCQlzd2l0Y2ggKCpyZWNvcmQpIHsKIAkJCQljYXNlIExDRF9NT0RFX1BBVENIX1JFQ09SRF9NT0RFX1RZUEU6CkBAIC0xNTk4LDkgKzE2MDcsMTAgQEAKIAkJCQkJCQltZW1jcHkoKHU4ICopZWRpZCwgKHU4ICopJmZha2VfZWRpZF9yZWNvcmQtPnVjRmFrZUVESURTdHJpbmdbMF0sCiAJCQkJCQkJICAgICAgIGZha2VfZWRpZF9yZWNvcmQtPnVjRmFrZUVESURMZW5ndGgpOwogCi0JCQkJCQkJaWYgKGRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKQorCQkJCQkJCWlmIChkcm1fZWRpZF9pc192YWxpZChlZGlkKSkgewogCQkJCQkJCQlyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZCA9IGVkaWQ7Ci0JCQkJCQkJZWxzZQorCQkJCQkJCQlyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZF9zaXplID0gZWRpZF9zaXplOworCQkJCQkJCX0gZWxzZQogCQkJCQkJCQlrZnJlZShlZGlkKTsKIAkJCQkJCX0KIAkJCQkJfQpAQCAtMjE3NSwyNCArMjE4NSwyNyBAQAogCX0KIH0KIAotc3RhdGljIHUxNiByYWRlb25fYXRvbWJpb3NfZ2V0X2RlZmF1bHRfdmRkYyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyB2b2lkIHJhZGVvbl9hdG9tYmlvc19nZXRfZGVmYXVsdF92b2x0YWdlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQkJCSB1MTYgKnZkZGMsIHUxNiAqdmRkY2kpCiB7CiAJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgRmlybXdhcmVJbmZvKTsKIAl1OCBmcmV2LCBjcmV2OwogCXUxNiBkYXRhX29mZnNldDsKIAl1bmlvbiBmaXJtd2FyZV9pbmZvICpmaXJtd2FyZV9pbmZvOwotCXUxNiB2ZGRjID0gMDsKKworCSp2ZGRjID0gMDsKKwkqdmRkY2kgPSAwOwogCiAJaWYgKGF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGluZGV4LCBOVUxMLAogCQkJCSAgICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KSkgewogCQlmaXJtd2FyZV9pbmZvID0KIAkJCSh1bmlvbiBmaXJtd2FyZV9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKIAkJCQkJCWRhdGFfb2Zmc2V0KTsKLQkJdmRkYyA9IGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm9fMTQudXNCb290VXBWRERDVm9sdGFnZSk7CisJCSp2ZGRjID0gbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mb18xNC51c0Jvb3RVcFZERENWb2x0YWdlKTsKKwkJaWYgKChmcmV2ID09IDIpICYmIChjcmV2ID49IDIpKQorCQkJKnZkZGNpID0gbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mb18yMi51c0Jvb3RVcFZERENJVm9sdGFnZSk7CiAJfQotCi0JcmV0dXJuIHZkZGM7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9hdG9tYmlvc19wYXJzZV9wcGxpYl9ub25fY2xvY2tfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTIyMDIsNyArMjIxNSw5IEBACiAJaW50IGo7CiAJdTMyIG1pc2MgPSBsZTMyX3RvX2NwdShub25fY2xvY2tfaW5mby0+dWxDYXBzQW5kU2V0dGluZ3MpOwogCXUzMiBtaXNjMiA9IGxlMTZfdG9fY3B1KG5vbl9jbG9ja19pbmZvLT51c0NsYXNzaWZpY2F0aW9uKTsKLQl1MTYgdmRkYyA9IHJhZGVvbl9hdG9tYmlvc19nZXRfZGVmYXVsdF92ZGRjKHJkZXYpOworCXUxNiB2ZGRjLCB2ZGRjaTsKKworCXJhZGVvbl9hdG9tYmlvc19nZXRfZGVmYXVsdF92b2x0YWdlcyhyZGV2LCAmdmRkYywgJnZkZGNpKTsKIAogCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5taXNjID0gbWlzYzsKIAlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubWlzYzIgPSBtaXNjMjsKQEAgLTIyNDMsNiArMjI1OCw3IEBACiAJCQlyZGV2LT5wbS5kZWZhdWx0X3NjbGsgPSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrOwogCQkJcmRldi0+cG0uZGVmYXVsdF9tY2xrID0gcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsazsKIAkJCXJkZXYtPnBtLmRlZmF1bHRfdmRkYyA9IHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2Uudm9sdGFnZTsKKwkJCXJkZXYtPnBtLmRlZmF1bHRfdmRkY2kgPSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNpOwogCQl9IGVsc2UgewogCQkJLyogcGF0Y2ggdGhlIHRhYmxlIHZhbHVlcyB3aXRoIHRoZSBkZWZhdWx0IHNsY2svbWNsayBmcm9tIGZpcm13YXJlIGluZm8gKi8KIAkJCWZvciAoaiA9IDA7IGogPCBtb2RlX2luZGV4OyBqKyspIHsKQEAgLTIyODUsNiArMjMwMSw4IEBACiAJCQlWT0xUQUdFX1NXOwogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnZvbHRhZ2UgPQogCQkJbGUxNl90b19jcHUoY2xvY2tfaW5mby0+ZXZlcmdyZWVuLnVzVkREQyk7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2UudmRkY2kgPQorCQkJbGUxNl90b19jcHUoY2xvY2tfaW5mby0+ZXZlcmdyZWVuLnVzVkREQ0kpOwogCX0gZWxzZSB7CiAJCXNjbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5yNjAwLnVzRW5naW5lQ2xvY2tMb3cpOwogCQlzY2xrIHw9IGNsb2NrX2luZm8tPnI2MDAudWNFbmdpbmVDbG9ja0hpZ2ggPDwgMTY7CkBAIC0yNTc2LDI1ICsyNTk0LDI1IEBACiAJc3RydWN0IF9TRVRfVk9MVEFHRV9QQVJBTUVURVJTX1YyIHYyOwogfTsKIAotdm9pZCByYWRlb25fYXRvbV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTE2IGxldmVsKQordm9pZCByYWRlb25fYXRvbV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTE2IHZvbHRhZ2VfbGV2ZWwsIHU4IHZvbHRhZ2VfdHlwZSkKIHsKIAl1bmlvbiBzZXRfdm9sdGFnZSBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldFZvbHRhZ2UpOwotCXU4IGZyZXYsIGNyZXYsIHZvbHRfaW5kZXggPSBsZXZlbDsKKwl1OCBmcmV2LCBjcmV2LCB2b2x0X2luZGV4ID0gdm9sdGFnZV9sZXZlbDsKIAogCWlmICghYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwgJmNyZXYpKQogCQlyZXR1cm47CiAKIAlzd2l0Y2ggKGNyZXYpIHsKIAljYXNlIDE6Ci0JCWFyZ3MudjEudWNWb2x0YWdlVHlwZSA9IFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDOworCQlhcmdzLnYxLnVjVm9sdGFnZVR5cGUgPSB2b2x0YWdlX3R5cGU7CiAJCWFyZ3MudjEudWNWb2x0YWdlTW9kZSA9IFNFVF9BU0lDX1ZPTFRBR0VfTU9ERV9BTExfU09VUkNFOwogCQlhcmdzLnYxLnVjVm9sdGFnZUluZGV4ID0gdm9sdF9pbmRleDsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlhcmdzLnYyLnVjVm9sdGFnZVR5cGUgPSBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQzsKKwkJYXJncy52Mi51Y1ZvbHRhZ2VUeXBlID0gdm9sdGFnZV90eXBlOwogCQlhcmdzLnYyLnVjVm9sdGFnZU1vZGUgPSBTRVRfQVNJQ19WT0xUQUdFX01PREVfU0VUX1ZPTFRBR0U7Ci0JCWFyZ3MudjIudXNWb2x0YWdlTGV2ZWwgPSBjcHVfdG9fbGUxNihsZXZlbCk7CisJCWFyZ3MudjIudXNWb2x0YWdlTGV2ZWwgPSBjcHVfdG9fbGUxNih2b2x0YWdlX2xldmVsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbmtub3duIHRhYmxlIHZlcnNpb24gJWQsICVkXG4iLCBmcmV2LCBjcmV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0cHhfaGFuZGxlci5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRweF9oYW5kbGVyLmMKaW5kZXggZWQ1ZGZlNS4uOWQ5NTc5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRweF9oYW5kbGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRweF9oYW5kbGVyLmMKQEAgLTE1LDYgKzE1LDkgQEAKICNkZWZpbmUgQVRQWF9WRVJTSU9OIDAKICNkZWZpbmUgQVRQWF9HUFVfUFdSIDIKICNkZWZpbmUgQVRQWF9NVVhfU0VMRUNUIDMKKyNkZWZpbmUgQVRQWF9JMkNfTVVYX1NFTEVDVCA0CisjZGVmaW5lIEFUUFhfU1dJVENIX1NUQVJUIDUKKyNkZWZpbmUgQVRQWF9TV0lUQ0hfRU5EIDYKIAogI2RlZmluZSBBVFBYX0lOVEVHUkFURUQgMAogI2RlZmluZSBBVFBYX0RJU0NSRVRFIDEKQEAgLTE0OSwxMyArMTUyLDM1IEBACiAJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX01VWF9TRUxFQ1QsIG11eF9pZCk7CiB9CiAKK3N0YXRpYyBpbnQgcmFkZW9uX2F0cHhfc3dpdGNoX2kyY19tdXgoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgbXV4X2lkKQoreworCXJldHVybiByYWRlb25fYXRweF9leGVjdXRlKGhhbmRsZSwgQVRQWF9JMkNfTVVYX1NFTEVDVCwgbXV4X2lkKTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfc3RhcnQoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgZ3B1X2lkKQoreworCXJldHVybiByYWRlb25fYXRweF9leGVjdXRlKGhhbmRsZSwgQVRQWF9TV0lUQ0hfU1RBUlQsIGdwdV9pZCk7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX2F0cHhfc3dpdGNoX2VuZChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBncHVfaWQpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX1NXSVRDSF9FTkQsIGdwdV9pZCk7Cit9CiAKIHN0YXRpYyBpbnQgcmFkZW9uX2F0cHhfc3dpdGNodG8oZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQpCiB7CisJaW50IGdwdV9pZDsKKwogCWlmIChpZCA9PSBWR0FfU1dJVENIRVJPT19JR0QpCi0JCXJhZGVvbl9hdHB4X3N3aXRjaF9tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgMCk7CisJCWdwdV9pZCA9IEFUUFhfSU5URUdSQVRFRDsKIAllbHNlCi0JCXJhZGVvbl9hdHB4X3N3aXRjaF9tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgMSk7CisJCWdwdV9pZCA9IEFUUFhfRElTQ1JFVEU7CisKKwlyYWRlb25fYXRweF9zd2l0Y2hfc3RhcnQocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwlyYWRlb25fYXRweF9zd2l0Y2hfbXV4KHJhZGVvbl9hdHB4X3ByaXYuYXRweF9oYW5kbGUsIGdwdV9pZCk7CisJcmFkZW9uX2F0cHhfc3dpdGNoX2kyY19tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwlyYWRlb25fYXRweF9zd2l0Y2hfZW5kKHJhZGVvbl9hdHB4X3ByaXYuYXRweF9oYW5kbGUsIGdwdV9pZCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IGNmNjAyZTIuLjhjYWY1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTIwNzksNiArMjA3OSwxOSBAQAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAogCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSwKIAkJCQkJICAgICZocGQpOworCQkvKiBUViAtIFRWIERBQyAqLworCQlkZGNfaTJjLnZhbGlkID0gZmFsc2U7CisJCWhwZC5ocGQgPSBSQURFT05fSFBEX05PTkU7CisJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKKwkJCQkJCQkJQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCisJCQkJCQkJCTIpLAorCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKKwkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAorCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTywKKwkJCQkJICAgICZocGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIHRhYmxlOiAlZCAoaW52YWxpZClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggMmVmNmQ1MS4uNWY0NWZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMTE5OSw3ICsxMTk5LDcgQEAKIAlpZiAocm91dGVyLT5kZGNfdmFsaWQgfHwgcm91dGVyLT5jZF92YWxpZCkgewogCQlyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXJfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgJnJvdXRlci0+aTJjX2luZm8pOwogCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPnJvdXRlcl9idXMpCi0JCQlnb3RvIGZhaWxlZDsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFzc2lnbiByb3V0ZXIgaTJjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAl9CiAJc3dpdGNoIChjb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKQEAgLTEyMDgsNyArMTIwOCw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiVkdBOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xMjI2LDcgKzEyMjYsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkRWSUE6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKQEAgLTEyNDksNyArMTI0OSw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiRFZJOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLApAQCAtMTI5MCw3ICsxMjkwLDcgQEAKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgaTJjX2J1cyk7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJIRE1JOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LApAQCAtMTMyOSwxMCArMTMyOSwxMCBAQAogCQkJZWxzZQogCQkJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9pMmNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGVfZHAoZGV2LCBpMmNfYnVzLCAiRFAtYXV4Y2giKTsKIAkJCWlmICghcmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX2kyY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJEUDogRmFpbGVkIHRvIGFzc2lnbiBkcCBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiRFA6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkxWRFM6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCkBAIC0xNDU3LDcgKzE0NTcsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIlZHQTogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLApAQCAtMTQ3NSw3ICsxNDc1LDcgQEAKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgaTJjX2J1cyk7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJEVklBOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkRWSTogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKQEAgLTE1MzgsNyArMTUzOCw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiTFZEUzogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICBkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKQEAgLTE1NjcsOSArMTU2Nyw0IEBACiAJCQkJcmFkZW9uX2xlZ2FjeV9iYWNrbGlnaHRfaW5pdChyYWRlb25fZW5jb2RlciwgY29ubmVjdG9yKTsKIAkJfQogCX0KLQlyZXR1cm47Ci0KLWZhaWxlZDoKLQlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKLQlrZnJlZShjb25uZWN0b3IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggM2Q1OTllMy4uNzU4Njc3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAl1MzIgYWdwX2Jhc2VfbG8gPSBhZ3BfYmFzZSAmIDB4ZmZmZmZmZmY7CiAJdTMyIHI2eHhfYWdwX2Jhc2UgPSAoYWdwX2Jhc2UgPj4gMjIpICYgMHgzZmZmZjsKIAotCS8qIFI2eHgvUjd4eCBtdXN0IGJlIGFsaWduZWQgdG8gYSA0TUIgYm91bmRyeSAqLworCS8qIFI2eHgvUjd4eCBtdXN0IGJlIGFsaWduZWQgdG8gYSA0TUIgYm91bmRhcnkgKi8KIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkKIAkJUkFERU9OX1dSSVRFKFI3MDBfTUNfVk1fQUdQX0JBU0UsIHI2eHhfYWdwX2Jhc2UpOwogCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMKaW5kZXggMDE3YWM1NC4uMzE4OWE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMKQEAgLTE2Nyw5ICsxNjcsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyYWRlb25fY3J0Yy0+Y3Vyc29yX3dpZHRoID0gd2lkdGg7Ci0JcmFkZW9uX2NydGMtPmN1cnNvcl9oZWlnaHQgPSBoZWlnaHQ7Ci0KIAlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoY3J0Yy0+ZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CiAJaWYgKCFvYmopIHsKIAkJRFJNX0VSUk9SKCJDYW5ub3QgZmluZCBjdXJzb3Igb2JqZWN0ICV4IGZvciBjcnRjICVkXG4iLCBoYW5kbGUsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKQEAgLTE4MCw2ICsxNzcsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIAorCXJhZGVvbl9jcnRjLT5jdXJzb3Jfd2lkdGggPSB3aWR0aDsKKwlyYWRlb25fY3J0Yy0+Y3Vyc29yX2hlaWdodCA9IGhlaWdodDsKKwogCXJhZGVvbl9sb2NrX2N1cnNvcihjcnRjLCB0cnVlKTsKIAkvKiBYWFggb25seSAyNyBiaXQgb2Zmc2V0IGZvciBsZWdhY3kgY3Vyc29yICovCiAJcmFkZW9uX3NldF9jdXJzb3IoY3J0Yywgb2JqLCBncHVfYWRkcik7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJeSArPSBjcnRjLT55OwogCQlEUk1fREVCVUcoInggJWQgeSAlZCBjLT54ICVkIGMtPnkgJWRcbiIsIHgsIHksIGNydGMtPngsIGNydGMtPnkpOwogCi0JCS8qIGF2aXZvIGN1cnNvciBpbWFnZSBjYW4ndCBlbmQgb24gMTI4IHBpeGVsIGJvdW5kcnkgb3IKKwkJLyogYXZpdm8gY3Vyc29yIGltYWdlIGNhbid0IGVuZCBvbiAxMjggcGl4ZWwgYm91bmRhcnkgb3IKIAkJICogZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSBpZiBib3RoIGNydGNzIGFyZSBlbmFibGVkCiAJCSAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGNfcCwgJmNydGMtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IGYwMjA5YmUuLjg5MDIxN2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAgKiBOb3RlOiBHVFQgc3RhcnQsIGVuZCwgc2l6ZSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgdGhpcwogICogZnVuY3Rpb24gb24gQUdQIHBsYXRmb3JtLgogICoKLSAqIE5vdGU6IFdlIGRvbid0IGV4cGxpY3RseSBlbmZvcmNlIFZSQU0gc3RhcnQgdG8gYmUgYWxpZ25lZCBvbiBWUkFNIHNpemUsCisgKiBOb3RlOiBXZSBkb24ndCBleHBsaWNpdGx5IGVuZm9yY2UgVlJBTSBzdGFydCB0byBiZSBhbGlnbmVkIG9uIFZSQU0gc2l6ZSwKICAqIHRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSBhcyB3ZSBhcmUgdXNpbmcgdGhlIFBDSSBhcGVydHVyZSBhcyBhIHJlZmVyZW5jZS4KICAqIE90aGVyd2lzZSB0aGlzIHdvdWxkIGJlIG5lZWRlZCBmb3IgcnYyODAsIGFsbCByM3h4LCBhbmQgYWxsIHI0eHgsIGJ1dAogICogbm90IElHUC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCA0YmU1ODc5Li5iZGJhYjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0xNDkyLDcgKzE0OTIsNyBAQAogICoKICAqIFxyZXR1cm4gRmxhZ3MsIG9yJ2VkIHRvZ2V0aGVyIGFzIGZvbGxvd3M6CiAgKgotICogRFJNX1NDQU5PVVRQT1NfVkFMSUQgPSBRdWVyeSBzdWNjZXNzZnVsbC4KKyAqIERSTV9TQ0FOT1VUUE9TX1ZBTElEID0gUXVlcnkgc3VjY2Vzc2Z1bC4KICAqIERSTV9TQ0FOT1VUUE9TX0lOVkJMID0gSW5zaWRlIHZibGFuay4KICAqIERSTV9TQ0FOT1VUUE9TX0FDQ1VSQVRFID0gUmV0dXJuZWQgcG9zaXRpb24gaXMgYWNjdXJhdGUuIEEgbGFjayBvZgogICogdGhpcyBmbGFnIG1lYW5zIHRoYXQgcmV0dXJuZWQgcG9zaXRpb24gbWF5IGJlIG9mZnNldCBieSBhIGNvbnN0YW50IGJ1dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCA1Y2JhNDZiLi5hMWI1OWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMjcxLDcgKzI3MSw3IEBACiAKIAlpbnQgaGF2ZV96X29mZnNldDsKIAotCS8qIHN0YXJ0aW5nIGZyb20gaGVyZSBvbiwgZGF0YSBpcyBwcmVzZXJ2ZWQgYWNjcm9zcyBhbiBvcGVuICovCisJLyogc3RhcnRpbmcgZnJvbSBoZXJlIG9uLCBkYXRhIGlzIHByZXNlcnZlZCBhY3Jvc3MgYW4gb3BlbiAqLwogCXVpbnQzMl90IGZsYWdzOwkJLyogc2VlIHJhZGVvbl9jaGlwX2ZsYWdzICovCiAJcmVzb3VyY2Vfc2l6ZV90IGZiX2FwZXJfb2Zmc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYwppbmRleCA5ZTU5ODY4Li5iYmNkMWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkJCXNjcmF0Y2hfaW5kZXggPSBSNjAwX1dCX0VWRU5UX09GRlNFVCArIHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyAtIHJkZXYtPnNjcmF0Y2gucmVnX2Jhc2U7CiAJCWVsc2UKIAkJCXNjcmF0Y2hfaW5kZXggPSBSQURFT05fV0JfU0NSQVRDSF9PRkZTRVQgKyByZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcgLSByZGV2LT5zY3JhdGNoLnJlZ19iYXNlOwotCQlzZXEgPSByZGV2LT53Yi53YltzY3JhdGNoX2luZGV4LzRdOworCQlzZXEgPSBsZTMyX3RvX2NwdShyZGV2LT53Yi53YltzY3JhdGNoX2luZGV4LzRdKTsKIAl9IGVsc2UKIAkJc2VxID0gUlJFRzMyKHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyk7CiAJaWYgKHNlcSAhPSByZGV2LT5mZW5jZV9kcnYubGFzdF9zZXEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwppbmRleCBmMDUzNGVmLi5hNTMzZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCkBAIC0xODEsOSArMTgxLDkgQEAKIAlwID0gdCAvIChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgcCsrKSB7Ci0JCS8qIE9uIFRUTSBwYXRoLCB3ZSBvbmx5IHVzZSB0aGUgRE1BIEFQSSBpZiBUVE1fUEFHRV9GTEFHX0RNQTMyCi0JCSAqIGlzIHJlcXVlc3RlZC4gKi8KLQkJaWYgKGRtYV9hZGRyW2ldICE9IERNQV9FUlJPUl9DT0RFKSB7CisJCS8qIHdlIHJldmVydGVkIHRoZSBwYXRjaCB1c2luZyBkbWFfYWRkciBpbiBUVE0gZm9yIG5vdyBidXQgdGhpcworCQkgKiBjb2RlIHN0b3BzIGJ1aWxkaW5nIG9uIGFscGhhIHNvIGp1c3QgY29tbWVudCBpdCBvdXQgZm9yIG5vdyAqLworCQlpZiAoMCkgeyAvKmRtYV9hZGRyW2ldICE9IERNQV9FUlJPUl9DT0RFKSAqLwogCQkJcmRldi0+Z2FydC50dG1fYWxsb2NlZFtwXSA9IHRydWU7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSBkbWFfYWRkcltpXTsKIAkJfSBlbHNlIHsKQEAgLTI4NSw0ICsyODUsNiBAQAogCXJkZXYtPmdhcnQucGFnZXMgPSBOVUxMOwogCXJkZXYtPmdhcnQucGFnZXNfYWRkciA9IE5VTEw7CiAJcmRldi0+Z2FydC50dG1fYWxsb2NlZCA9IE5VTEw7CisKKwlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pMmMuYwppbmRleCBkZWQyYTQ1Li45ODNjYmFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKQEAgLTEwNjIsNyArMTA2Miw3IEBACiAJCSp2YWwgPSBpbl9idWZbMF07CiAJCURSTV9ERUJVRygidmFsID0gMHglMDJ4XG4iLCAqdmFsKTsKIAl9IGVsc2UgewotCQlEUk1fRVJST1IoImkyYyAweCUwMnggMHglMDJ4IHJlYWQgZmFpbGVkXG4iLAorCQlEUk1fREVCVUcoImkyYyAweCUwMnggMHglMDJ4IHJlYWQgZmFpbGVkXG4iLAogCQkJICBhZGRyLCAqdmFsKTsKIAl9CiB9CkBAIC0xMDg0LDcgKzEwODQsNyBAQAogCW91dF9idWZbMV0gPSB2YWw7CiAKIAlpZiAoaTJjX3RyYW5zZmVyKCZpMmNfYnVzLT5hZGFwdGVyLCAmbXNnLCAxKSAhPSAxKQotCQlEUk1fRVJST1IoImkyYyAweCUwMnggMHglMDJ4IHdyaXRlIGZhaWxlZFxuIiwKKwkJRFJNX0RFQlVHKCJpMmMgMHglMDJ4IDB4JTAyeCB3cml0ZSBmYWlsZWRcbiIsCiAJCQkgIGFkZHIsIHZhbCk7CiB9CiAKQEAgLTEwOTYsNiArMTA5Niw5IEBACiAJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXIuZGRjX3ZhbGlkKQogCQlyZXR1cm47CiAKKwlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPnJvdXRlcl9idXMpCisJCXJldHVybjsKKwogCXJhZGVvbl9pMmNfZ2V0X2J5dGUocmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyX2J1cywKIAkJCSAgICByYWRlb25fY29ubmVjdG9yLT5yb3V0ZXIuaTJjX2FkZHIsCiAJCQkgICAgMHgzLCAmdmFsKTsKQEAgLTExMjEsNiArMTEyNCw5IEBACiAJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXIuY2RfdmFsaWQpCiAJCXJldHVybjsKIAorCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyX2J1cykKKwkJcmV0dXJuOworCiAJcmFkZW9uX2kyY19nZXRfYnl0ZShyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXJfYnVzLAogCQkJICAgIHJhZGVvbl9jb25uZWN0b3ItPnJvdXRlci5pMmNfYWRkciwKIAkJCSAgICAweDMsICZ2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCBiZjdkNGMwLi5iZDU4YWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtMjIxLDYgKzIyMSwyMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBSQURFT05fSU5GT19OVU1fVElMRV9QSVBFUzoKKwkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX0NBWU1BTikKKwkJCXZhbHVlID0gcmRldi0+Y29uZmlnLmNheW1hbi5tYXhfdGlsZV9waXBlczsKKwkJZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfQ0VEQVIpCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXM7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCQkJdmFsdWUgPSByZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXM7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzOworCQllbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUkFERU9OX0lORk9fRlVTSU9OX0dBUlRfV09SS0lORzoKKwkJdmFsdWUgPSAxOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fREVCVUdfS01TKCJJbnZhbGlkIHJlcXVlc3QgJWRcbiIsIGluZm8tPnJlcXVlc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggNWI1NDI2OC4uMmY0NmUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCS5kaXNhYmxlID0gcmFkZW9uX2xlZ2FjeV9lbmNvZGVyX2Rpc2FibGUsCiB9OwogCi0jaWZkZWYgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKyNpZiBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFKSB8fCBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFX01PRFVMRSkKIAogI2RlZmluZSBNQVhfUkFERU9OX0xFVkVMIDB4RkYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaAppbmRleCA3ZjhlNzc4Li5lZGU2YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaApAQCAtODcsNyArODcsNyBAQAogICogUmV0dXJucyBjdXJyZW50IEdQVSBvZmZzZXQgb2YgdGhlIG9iamVjdC4KICAqCiAgKiBOb3RlOiBvYmplY3Qgc2hvdWxkIGVpdGhlciBiZSBwaW5uZWQgb3IgcmVzZXJ2ZWQgd2hlbiBjYWxsaW5nIHRoaXMKLSAqIGZ1bmN0aW9uLCBpdCBtaWdodCBiZSB1c2VmdWxsIHRvIGFkZCBjaGVjayBmb3IgdGhpcyBmb3IgZGVidWdnaW5nLgorICogZnVuY3Rpb24sIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBhZGQgY2hlY2sgZm9yIHRoaXMgZm9yIGRlYnVnZ2luZy4KICAqLwogc3RhdGljIGlubGluZSB1NjQgcmFkZW9uX2JvX2dwdV9vZmZzZXQoc3RydWN0IHJhZGVvbl9ibyAqYm8pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwppbmRleCAwOGRlNjY5Li44NmVkYTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAiYXZpdm9kLmgiCisjaW5jbHVkZSAiYXRvbS5oIgogI2lmZGVmIENPTkZJR19BQ1BJCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2VuZGlmCkBAIC01MzUsNyArNTM2LDExIEBACiAJLyogc2V0IHVwIHRoZSBkZWZhdWx0IGNsb2NrcyBpZiB0aGUgTUMgdWNvZGUgaXMgbG9hZGVkICovCiAJaWYgKEFTSUNfSVNfRENFNShyZGV2KSAmJiByZGV2LT5tY19mdykgewogCQlpZiAocmRldi0+cG0uZGVmYXVsdF92ZGRjKQotCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgcmRldi0+cG0uZGVmYXVsdF92ZGRjKTsKKwkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfdmRkYywKKwkJCQkJCVNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDKTsKKwkJaWYgKHJkZXYtPnBtLmRlZmF1bHRfdmRkY2kpCisJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCByZGV2LT5wbS5kZWZhdWx0X3ZkZGNpLAorCQkJCQkJU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZERENJKTsKIAkJaWYgKHJkZXYtPnBtLmRlZmF1bHRfc2NsaykKIAkJCXJhZGVvbl9zZXRfZW5naW5lX2Nsb2NrKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfc2Nsayk7CiAJCWlmIChyZGV2LT5wbS5kZWZhdWx0X21jbGspCkBAIC01NDgsNiArNTUzLDcgQEAKIAlyZGV2LT5wbS5jdXJyZW50X3NjbGsgPSByZGV2LT5wbS5kZWZhdWx0X3NjbGs7CiAJcmRldi0+cG0uY3VycmVudF9tY2xrID0gcmRldi0+cG0uZGVmYXVsdF9tY2xrOwogCXJkZXYtPnBtLmN1cnJlbnRfdmRkYyA9IHJkZXYtPnBtLnBvd2VyX3N0YXRlW3JkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS52b2x0YWdlOworCXJkZXYtPnBtLmN1cnJlbnRfdmRkY2kgPSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY2k7CiAJaWYgKHJkZXYtPnBtLnBtX21ldGhvZCA9PSBQTV9NRVRIT0RfRFlOUE0KIAkgICAgJiYgcmRldi0+cG0uZHlucG1fc3RhdGUgPT0gRFlOUE1fU1RBVEVfU1VTUEVOREVEKSB7CiAJCXJkZXYtPnBtLmR5bnBtX3N0YXRlID0gRFlOUE1fU1RBVEVfQUNUSVZFOwpAQCAtNTg1LDcgKzU5MSw4IEBACiAJCS8qIHNldCB1cCB0aGUgZGVmYXVsdCBjbG9ja3MgaWYgdGhlIE1DIHVjb2RlIGlzIGxvYWRlZCAqLwogCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpICYmIHJkZXYtPm1jX2Z3KSB7CiAJCQlpZiAocmRldi0+cG0uZGVmYXVsdF92ZGRjKQotCQkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfdmRkYyk7CisJCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgcmRldi0+cG0uZGVmYXVsdF92ZGRjLAorCQkJCQkJCVNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDKTsKIAkJCWlmIChyZGV2LT5wbS5kZWZhdWx0X3NjbGspCiAJCQkJcmFkZW9uX3NldF9lbmdpbmVfY2xvY2socmRldiwgcmRldi0+cG0uZGVmYXVsdF9zY2xrKTsKIAkJCWlmIChyZGV2LT5wbS5kZWZhdWx0X21jbGspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKaW5kZXggYmJjOWNkOC4uYzY3NzZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiB2b2lkIHJhZGVvbl9yaW5nX2ZyZWVfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpZiAocmRldi0+d2IuZW5hYmxlZCkKLQkJcmRldi0+Y3AucnB0ciA9IHJkZXYtPndiLndiW1JBREVPTl9XQl9DUF9SUFRSX09GRlNFVC80XTsKKwkJcmRldi0+Y3AucnB0ciA9IGxlMzJfdG9fY3B1KHJkZXYtPndiLndiW1JBREVPTl9XQl9DUF9SUFRSX09GRlNFVC80XSk7CiAJZWxzZSB7CiAJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQogCQkJcmRldi0+Y3AucnB0ciA9IFJSRUczMihSNjAwX0NQX1JCX1JQVFIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKaW5kZXggNGFlNWEzZC4uOTJlN2VhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCkBAIC05ODAsNyArOTgwLDcgQEAKIAl9CiAKIAkvKiBoeXBlciB6IGNsZWFyICovCi0JLyogbm8gZG9jcyBhdmFpbGFibGUsIGJhc2VkIG9uIHJldmVyc2UgZW5nZW5lZXJpbmcgYnkgU3RlcGhhbmUgTWFyY2hlc2luICovCisJLyogbm8gZG9jcyBhdmFpbGFibGUsIGJhc2VkIG9uIHJldmVyc2UgZW5naW5lZXJpbmcgYnkgU3RlcGhhbmUgTWFyY2hlc2luICovCiAJaWYgKChmbGFncyAmIChSQURFT05fREVQVEggfCBSQURFT05fU1RFTkNJTCkpCiAJICAgICYmIChmbGFncyAmIFJBREVPTl9DTEVBUl9GQVNUWikpIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4gYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL2NheW1hbgppbmRleCA2MzM0ZjhhLi4wYWE4ZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL2NheW1hbgorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL2NheW1hbgpAQCAtMzMsNiArMzMsNyBAQAogMHgwMDAwOEU0OCBTUV9FWF9BTExPQ19UQUJMRV9TTE9UUwogMHgwMDAwOTEwMCBTUElfQ09ORklHX0NOVEwKIDB4MDAwMDkxM0MgU1BJX0NPTkZJR19DTlRMXzEKKzB4MDAwMDk1MDggVEFfQ05UTF9BVVgKIDB4MDAwMDk4MzAgREJfREVCVUcKIDB4MDAwMDk4MzQgREJfREVCVUcyCiAweDAwMDA5ODM4IERCX0RFQlVHMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4gYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL2V2ZXJncmVlbgppbmRleCA3ZTE2MzcxLi4wZTI4Y2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL2V2ZXJncmVlbgorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL2V2ZXJncmVlbgpAQCAtNDYsNiArNDYsNyBAQAogMHgwMDAwOEU0OCBTUV9FWF9BTExPQ19UQUJMRV9TTE9UUwogMHgwMDAwOTEwMCBTUElfQ09ORklHX0NOVEwKIDB4MDAwMDkxM0MgU1BJX0NPTkZJR19DTlRMXzEKKzB4MDAwMDk1MDggVEFfQ05UTF9BVVgKIDB4MDAwMDk3MDAgVkNfQ05UTAogMHgwMDAwOTcxNCBWQ19FTkhBTkNFCiAweDAwMDA5ODMwIERCX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKaW5kZXggYWYwZGE0YS4uOTJmMTkwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMApAQCAtNzA4LDYgKzcwOCw3IEBACiAweDAwMDI4RDBDIERCX1JFTkRFUl9DT05UUk9MCiAweDAwMDI4RDEwIERCX1JFTkRFUl9PVkVSUklERQogMHgwMDAyODgwQyBEQl9TSEFERVJfQ09OVFJPTAorMHgwMDAyOEQyOCBEQl9TUkVTVUxUU19DT01QQVJFX1NUQVRFMAogMHgwMDAyOEQyQyBEQl9TUkVTVUxUU19DT01QQVJFX1NUQVRFMQogMHgwMDAyODQzMCBEQl9TVEVOQ0lMUkVGTUFTSwogMHgwMDAyODQzNCBEQl9TVEVOQ0lMUkVGTUFTS19CRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IDE5NzYzZjUuLjZlM2IxMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKQEAgLTQ4LDE3ICs0OCw2IEBACiAKIHZvaWQgcnM2MDBfcHJlX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXTsKLQl1MzIgdG1wOwotCi0JLyogbWFrZSBzdXJlIGZsaXAgaXMgYXQgdmIgcmF0aGVyIHRoYW4gaGIgKi8KLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDFHUlBIX0ZMSVBfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7Ci0JdG1wICY9IH5BVklWT19EMUdSUEhfU1VSRkFDRV9VUERBVEVfSF9SRVRSQUNFX0VOOwotCVdSRUczMihBVklWT19EMUdSUEhfRkxJUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOwotCi0JLyogc2V0IHBhZ2VmbGlwIHRvIGhhcHBlbiBhbnl3aGVyZSBpbiB2YmxhbmsgaW50ZXJ2YWwgKi8KLQlXUkVHMzIoQVZJVk9fRDFNT0RFX01BU1RFUl9VUERBVEVfTU9ERSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7Ci0KIAkvKiBlbmFibGUgdGhlIHBmbGlwIGludCAqLwogCXJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9nZXQocmRldiwgY3J0Yyk7CiB9CkBAIC0xMjUsNyArMTE0LDcgQEAKIAkJCQl1ZGVsYXkodm9sdGFnZS0+ZGVsYXkpOwogCQl9CiAJfSBlbHNlIGlmICh2b2x0YWdlLT50eXBlID09IFZPTFRBR0VfVkREQykKLQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgdm9sdGFnZS0+dmRkY19pZCk7CisJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZkZGNfaWQsIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDKTsKIAogCWR5bl9wd3JtZ3Rfc2Nsa19sZW5ndGggPSBSUkVHMzJfUExMKERZTl9QV1JNR1RfU0NMS19MRU5HVEgpOwogCWR5bl9wd3JtZ3Rfc2Nsa19sZW5ndGggJj0gflJFRFVDRURfUE9XRVJfU0NMS19ISUxFTigweGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IGI5NzRhYzcuLmVmOGE1YmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogCWlmICgodm9sdGFnZS0+dHlwZSA9PSBWT0xUQUdFX1NXKSAmJiB2b2x0YWdlLT52b2x0YWdlKSB7CiAJCWlmICh2b2x0YWdlLT52b2x0YWdlICE9IHJkZXYtPnBtLmN1cnJlbnRfdmRkYykgewotCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgdm9sdGFnZS0+dm9sdGFnZSk7CisJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52b2x0YWdlLCBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQyk7CiAJCQlyZGV2LT5wbS5jdXJyZW50X3ZkZGMgPSB2b2x0YWdlLT52b2x0YWdlOwogCQkJRFJNX0RFQlVHKCJTZXR0aW5nOiB2OiAlZFxuIiwgdm9sdGFnZS0+dm9sdGFnZSk7CiAJCX0KQEAgLTEyNTUsOSArMTI1NSw2IEBACiB7CiAJaW50IHI7CiAKLQlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CiAJLyogVGhpcyBkb24ndCBkbyBtdWNoICovCiAJciA9IHJhZGVvbl9nZW1faW5pdChyZGV2KTsKIAlpZiAocikKQEAgLTEzNzIsNyArMTM2OSw2IEBACiAJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7Ci0JcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcnY3NzBfcGNpZV9nZW4yX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCmluZGV4IDBiNmE1NWEuLjJlNjE4YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwpAQCAtMTE2OCw3ICsxMTY4LDcgQEAKIAkJdWludDMyX3QgcGFnZV9hbGlnbm1lbnQsCiAJCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3N0YXJ0LAogCQlib29sIGludGVycnVwdGlibGUsCi0JCXN0cnVjdCBmaWxlICpwZXJzaXN0YW50X3N3YXBfc3RvcmFnZSwKKwkJc3RydWN0IGZpbGUgKnBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlLAogCQlzaXplX3QgYWNjX3NpemUsCiAJCXZvaWQgKCpkZXN0cm95KSAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICopKQogewpAQCAtMTIxMSw3ICsxMjExLDcgQEAKIAliby0+cHJpdl9mbGFncyA9IDA7CiAJYm8tPm1lbS5wbGFjZW1lbnQgPSAoVFRNX1BMX0ZMQUdfU1lTVEVNIHwgVFRNX1BMX0ZMQUdfQ0FDSEVEKTsKIAliby0+c2VxX3ZhbGlkID0gZmFsc2U7Ci0JYm8tPnBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlID0gcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2U7CisJYm8tPnBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlID0gcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2U7CiAJYm8tPmFjY19zaXplID0gYWNjX3NpemU7CiAJYXRvbWljX2luYygmYm8tPmdsb2ItPmJvX2NvdW50KTsKIApAQCAtMTI2MCw3ICsxMjYwLDcgQEAKIAkJCXVpbnQzMl90IHBhZ2VfYWxpZ25tZW50LAogCQkJdW5zaWduZWQgbG9uZyBidWZmZXJfc3RhcnQsCiAJCQlib29sIGludGVycnVwdGlibGUsCi0JCQlzdHJ1Y3QgZmlsZSAqcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2UsCisJCQlzdHJ1Y3QgZmlsZSAqcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2UsCiAJCQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKipwX2JvKQogewogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87CkBAIC0xMjgyLDcgKzEyODIsNyBAQAogCiAJcmV0ID0gdHRtX2JvX2luaXQoYmRldiwgYm8sIHNpemUsIHR5cGUsIHBsYWNlbWVudCwgcGFnZV9hbGlnbm1lbnQsCiAJCQkJYnVmZmVyX3N0YXJ0LCBpbnRlcnJ1cHRpYmxlLAotCQkJCXBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlLCBhY2Nfc2l6ZSwgTlVMTCk7CisJCQkJcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2UsIGFjY19zaXplLCBOVUxMKTsKIAlpZiAobGlrZWx5KHJldCA9PSAwKSkKIAkJKnBfYm8gPSBibzsKIApAQCAtMTg2Myw3ICsxODYzLDcgQEAKIAlpZiAoYm8tPmJkZXYtPmRyaXZlci0+c3dhcF9ub3RpZnkpCiAJCWJvLT5iZGV2LT5kcml2ZXItPnN3YXBfbm90aWZ5KGJvKTsKIAotCXJldCA9IHR0bV90dF9zd2Fwb3V0KGJvLT50dG0sIGJvLT5wZXJzaXN0YW50X3N3YXBfc3RvcmFnZSk7CisJcmV0ID0gdHRtX3R0X3N3YXBvdXQoYm8tPnR0bSwgYm8tPnBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlKTsKIG91dDoKIAogCS8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5jCmluZGV4IDczN2EyYTJlLi45ZDlkOTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wYWdlX2FsbG9jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5jCkBAIC02ODMsMjIgKzY4MywxNCBAQAogCQkJZ2ZwX2ZsYWdzIHw9IEdGUF9ISUdIVVNFUjsKIAogCQlmb3IgKHIgPSAwOyByIDwgY291bnQ7ICsrcikgewotCQkJaWYgKChmbGFncyAmIFRUTV9QQUdFX0ZMQUdfRE1BMzIpICYmIGRtYV9hZGRyZXNzKSB7Ci0JCQkJdm9pZCAqYWRkcjsKLQkJCQlhZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwKLQkJCQkJCQkgICZkbWFfYWRkcmVzc1tyXSwKLQkJCQkJCQkgIGdmcF9mbGFncyk7Ci0JCQkJaWYgKGFkZHIgPT0gTlVMTCkKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJcCA9IHZpcnRfdG9fcGFnZShhZGRyKTsKLQkJCX0gZWxzZQotCQkJCXAgPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CisJCQlwID0gYWxsb2NfcGFnZShnZnBfZmxhZ3MpOwogCQkJaWYgKCFwKSB7CiAKIAkJCQlwcmludGsoS0VSTl9FUlIgVFRNX1BGWAogCQkJCSAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIHBhZ2UuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CisKIAkJCWxpc3RfYWRkKCZwLT5scnUsIHBhZ2VzKTsKIAkJfQogCQlyZXR1cm4gMDsKQEAgLTc0NiwyNCArNzM4LDEyIEBACiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJc3RydWN0IHR0bV9wYWdlX3Bvb2wgKnBvb2wgPSB0dG1fZ2V0X3Bvb2woZmxhZ3MsIGNzdGF0ZSk7CiAJc3RydWN0IHBhZ2UgKnAsICp0bXA7Ci0JdW5zaWduZWQgcjsKIAogCWlmIChwb29sID09IE5VTEwpIHsKIAkJLyogTm8gcG9vbCBmb3IgdGhpcyBtZW1vcnkgdHlwZSBzbyBmcmVlIHRoZSBwYWdlcyAqLwogCi0JCXIgPSBwYWdlX2NvdW50LTE7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsIHBhZ2VzLCBscnUpIHsKLQkJCWlmICgoZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX0RNQTMyKSAmJiBkbWFfYWRkcmVzcykgewotCQkJCXZvaWQgKmFkZHIgPSBwYWdlX2FkZHJlc3MocCk7Ci0JCQkJV0FSTl9PTighYWRkciB8fCAhZG1hX2FkZHJlc3Nbcl0pOwotCQkJCWlmIChhZGRyKQotCQkJCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBQQUdFX1NJWkUsCi0JCQkJCQkJICBhZGRyLAotCQkJCQkJCSAgZG1hX2FkZHJlc3Nbcl0pOwotCQkJCWRtYV9hZGRyZXNzW3JdID0gMDsKLQkJCX0gZWxzZQotCQkJCV9fZnJlZV9wYWdlKHApOwotCQkJci0tOworCQkJX19mcmVlX3BhZ2UocCk7CiAJCX0KIAkJLyogTWFrZSB0aGUgcGFnZXMgbGlzdCBlbXB0eSAqLwogCQlJTklUX0xJU1RfSEVBRChwYWdlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCA4NmQ1YjE3Li45MGUyM2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCQl0dG1fdHRfZnJlZV9wYWdlX2RpcmVjdG9yeSh0dG0pOwogCX0KIAotCWlmICghKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfUEVSU0lTVEFOVF9TV0FQKSAmJgorCWlmICghKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfUEVSU0lTVEVOVF9TV0FQKSAmJgogCSAgICB0dG0tPnN3YXBfc3RvcmFnZSkKIAkJZnB1dCh0dG0tPnN3YXBfc3RvcmFnZSk7CiAKQEAgLTUwMyw3ICs1MDMsNyBAQAogCQlwYWdlX2NhY2hlX3JlbGVhc2UoZnJvbV9wYWdlKTsKIAl9CiAKLQlpZiAoISh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1BFUlNJU1RBTlRfU1dBUCkpCisJaWYgKCEodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxBR19QRVJTSVNURU5UX1NXQVApKQogCQlmcHV0KHN3YXBfc3RvcmFnZSk7CiAJdHRtLT5zd2FwX3N0b3JhZ2UgPSBOVUxMOwogCXR0bS0+cGFnZV9mbGFncyAmPSB+VFRNX1BBR0VfRkxBR19TV0FQUEVEOwpAQCAtNTE0LDcgKzUxNCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHR0bV90dF9zd2Fwb3V0KHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IGZpbGUgKnBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlKQoraW50IHR0bV90dF9zd2Fwb3V0KHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IGZpbGUgKnBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpzd2FwX3NwYWNlOwogCXN0cnVjdCBmaWxlICpzd2FwX3N0b3JhZ2U7CkBAIC01NDAsNyArNTQwLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFwZXJzaXN0YW50X3N3YXBfc3RvcmFnZSkgeworCWlmICghcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2UpIHsKIAkJc3dhcF9zdG9yYWdlID0gc2htZW1fZmlsZV9zZXR1cCgidHRtIHN3YXAiLAogCQkJCQkJdHRtLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVCwKIAkJCQkJCTApOwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAJCQlyZXR1cm4gUFRSX0VSUihzd2FwX3N0b3JhZ2UpOwogCQl9CiAJfSBlbHNlCi0JCXN3YXBfc3RvcmFnZSA9IHBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlOworCQlzd2FwX3N0b3JhZ2UgPSBwZXJzaXN0ZW50X3N3YXBfc3RvcmFnZTsKIAogCXN3YXBfc3BhY2UgPSBzd2FwX3N0b3JhZ2UtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKIApAQCAtNTc3LDEyICs1NzcsMTIgQEAKIAl0dG1fdHRfZnJlZV9hbGxvY2VkX3BhZ2VzKHR0bSk7CiAJdHRtLT5zd2FwX3N0b3JhZ2UgPSBzd2FwX3N0b3JhZ2U7CiAJdHRtLT5wYWdlX2ZsYWdzIHw9IFRUTV9QQUdFX0ZMQUdfU1dBUFBFRDsKLQlpZiAocGVyc2lzdGFudF9zd2FwX3N0b3JhZ2UpCi0JCXR0bS0+cGFnZV9mbGFncyB8PSBUVE1fUEFHRV9GTEFHX1BFUlNJU1RBTlRfU1dBUDsKKwlpZiAocGVyc2lzdGVudF9zd2FwX3N0b3JhZ2UpCisJCXR0bS0+cGFnZV9mbGFncyB8PSBUVE1fUEFHRV9GTEFHX1BFUlNJU1RFTlRfU1dBUDsKIAogCXJldHVybiAwOwogb3V0X2VycjoKLQlpZiAoIXBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlKQorCWlmICghcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2UpCiAJCWZwdXQoc3dhcF9zdG9yYWdlKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCmluZGV4IGNjZWViNDIuLmRmZTMyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkJLyogVE9ETyBoYW5kbGUgbm9uZSBwYWdlIGFsaWduZWQgb2Zmc2V0cyAqLwogCQkvKiBUT0RPIGhhbmRsZSBwYXJ0aWFsIHVwbG9hZHMgYW5kIHBpdGNoICE9IDI1NiAqLwogCQkvKiBUT0RPIGhhbmRsZSBtb3JlIHRoZW4gb25lIGNvcHkgKHNpemUgIT0gNjQpICovCi0JCURSTV9FUlJPUigibGF6eSBwcm9ncmFtZXIsIGNhbnQgaGFuZGxlIHdpZXJkIHN0dWZmXG4iKTsKKwkJRFJNX0VSUk9SKCJsYXp5IHByb2dyYW1tZXIsIGNhbid0IGhhbmRsZSB3ZWlyZCBzdHVmZlxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZwppbmRleCA3MGU2MGE0Li40MTk5MTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogCSMgUG91bHNibyBzdHViIGRlcGVuZHMgb24gQUNQSV9WSURFTyB3aGVuIEFDUEkgaXMgZW5hYmxlZAogCSMgYnV0IGZvciBzZWxlY3QgdG8gd29yaywgbmVlZCB0byBzZWxlY3QgQUNQSV9WSURFTydzIGRlcGVuZGVuY2llcywgaWNrCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaWYgQUNQSQorCXNlbGVjdCBWSURFT19PVVRQVVRfQ09OVFJPTCBpZiBBQ1BJCiAJc2VsZWN0IElOUFVUIGlmIEFDUEkKIAlzZWxlY3QgQUNQSV9WSURFTyBpZiBBQ1BJCiAJc2VsZWN0IFRIRVJNQUwgaWYgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYwppbmRleCBlMDFjYWNiLi40OThiMjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYworKysgYi9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYwpAQCAtMjE5LDkgKzIxOSw2IEBACiAJaW50IGk7CiAJc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqYWN0aXZlID0gTlVMTDsKIAotCWlmIChuZXdfY2xpZW50LT5hY3RpdmUgPT0gdHJ1ZSkKLQkJcmV0dXJuIDA7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFM7IGkrKykgewogCQlpZiAodmdhc3JfcHJpdi5jbGllbnRzW2ldLmFjdGl2ZSA9PSB0cnVlKSB7CiAJCQlhY3RpdmUgPSAmdmdhc3JfcHJpdi5jbGllbnRzW2ldOwpAQCAtMzcyLDYgKzM2OSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChjbGllbnQtPmFjdGl2ZSA9PSB0cnVlKQorCQlnb3RvIG91dDsKKwogCS8qIG9rYXkgd2Ugd2FudCBhIHN3aXRjaCAtIHRlc3QgaWYgZGV2aWNlcyBhcmUgd2lsbGluZyB0byBzd2l0Y2ggKi8KIAljYW5fc3dpdGNoID0gdHJ1ZTsKIAlmb3IgKGkgPSAwOyBpIDwgVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFM7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCmluZGV4IGFjZTJiMTYuLmJlOGQ0Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYworKysgYi9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogc3RhdGljIHZvaWQgdmdhX2NoZWNrX2ZpcnN0X3VzZSh2b2lkKQogewogCS8qIHdlIHNob3VsZCBpbmZvcm0gYWxsIEdQVXMgaW4gdGhlIHN5c3RlbSB0aGF0Ci0JICogVkdBIGFyYiBoYXMgb2NjdXJlZCBhbmQgdG8gdHJ5IGFuZCBkaXNhYmxlIHJlc291cmNlcworCSAqIFZHQSBhcmIgaGFzIG9jY3VycmVkIGFuZCB0byB0cnkgYW5kIGRpc2FibGUgcmVzb3VyY2VzCiAJICogaWYgdGhleSBjYW4gKi8KIAlpZiAoIXZnYV9hcmJpdGVyX3VzZWQpIHsKIAkJdmdhX2FyYml0ZXJfdXNlZCA9IHRydWU7CkBAIC03NzQsNyArNzc0LDcgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdmdhX2xvY2ssIGZsYWdzKTsKIAotCS8qIElmIHdlIGFyZSB0YXJnZXR0aW5nIHRoZSBkZWZhdWx0LCB1c2UgaXQgKi8KKwkvKiBJZiB3ZSBhcmUgdGFyZ2V0aW5nIHRoZSBkZWZhdWx0LCB1c2UgaXQgKi8KIAlwZGV2ID0gcHJpdi0+dGFyZ2V0OwogCWlmIChwZGV2ID09IE5VTEwgfHwgcGRldiA9PSBQQ0lfSU5WQUxJRF9DQVJEKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZnYV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCBiN2VjNDA1Li45ZGU5ZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTE4NSw3ICsxODUsNyBAQAogCVN1cHBvcnQgZm9yIEV6a2V5IEJUQyA4MTkzIGtleWJvYXJkLgogCiBjb25maWcgSElEX0tFWVRPVUNICi0JdHJpc3RhdGUgIktleW91dGNoIEhJRCBkZXZpY2VzIgorCXRyaXN0YXRlICJLZXl0b3VjaCBISUQgZGV2aWNlcyIKIAlkZXBlbmRzIG9uIFVTQl9ISUQKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgS2V5dG91Y2ggSElEIGRldmljZXMgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoCkBAIC0zNDAsMTAgKzM0MCwxNyBAQAogCVN1cHBvcnQgZm9yIE4tVHJpZyB0b3VjaCBzY3JlZW4uCiAKIGNvbmZpZyBISURfT1JURUsKLQl0cmlzdGF0ZSAiT3J0ZWsgUEtCLTE3MDAvV0tCLTIwMDAgd2lyZWxlc3Mga2V5Ym9hcmQgYW5kIG1vdXNlIHRyYWNrcGFkIgorCXRyaXN0YXRlICJPcnRlayBQS0ItMTcwMC9XS0ItMjAwMC9Ta3ljYWJsZSB3aXJlbGVzcyBrZXlib2FyZCBhbmQgbW91c2UgdHJhY2twYWQiCiAJZGVwZW5kcyBvbiBVU0JfSElECiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIE9ydGVrIFBLQi0xNzAwL1dLQi0yMDAwIHdpcmVsZXNzIGtleWJvYXJkICsgbW91c2UgdHJhY2twYWQuCisJVGhlcmUgYXJlIGNlcnRhaW4gZGV2aWNlcyB3aGljaCBoYXZlIExvZ2ljYWxNYXhpbXVtIHdyb25nIGluIHRoZSBrZXlib2FyZAorCXVzYWdlIHBhZ2Ugb2YgdGhlaXIgcmVwb3J0IGRlc2NyaXB0b3IuIFRoZSBtb3N0IHByZXZhaWxpbmcgb25lcyBzbyBmYXIKKwlhcmUgbWFudWZhY3R1cmVkIGJ5IE9ydGVrLCB0aHVzIHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIuIEN1cnJlbnRseQorCXN1cHBvcnRlZCBkZXZpY2VzIGJ5IHRoaXMgZHJpdmVyIGFyZQorCisJICAgLSBPcnRlayBQS0ItMTcwMAorCSAgIC0gT3J0ZWsgV0tCLTIwMDAKKwkgICAtIFNreWNhYmxlIHdpcmVsZXNzIHByZXNlbnRlcgogCiBjb25maWcgSElEX1BBTlRIRVJMT1JECiAJdHJpc3RhdGUgIlBhbnRoZXJsb3JkL0dyZWVuQXNpYSBnYW1lIGNvbnRyb2xsZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBlOTY4Nzc2Li40MDhjNGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QVVNIOgogCiAJCWlmIChwYXJzZXItPmdsb2JhbF9zdGFja19wdHIgPT0gSElEX0dMT0JBTF9TVEFDS19TSVpFKSB7Ci0JCQlkYmdfaGlkKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayBvdmVyZmxvd1xuIik7CisJCQlkYmdfaGlkKCJnbG9iYWwgZW52aXJvbm1lbnQgc3RhY2sgb3ZlcmZsb3dcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKQEAgLTMxNyw3ICszMTcsNyBAQAogCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QT1A6CiAKIAkJaWYgKCFwYXJzZXItPmdsb2JhbF9zdGFja19wdHIpIHsKLQkJCWRiZ19oaWQoImdsb2JhbCBlbnZpcm9tZW50IHN0YWNrIHVuZGVyZmxvd1xuIik7CisJCQlkYmdfaGlkKCJnbG9iYWwgZW52aXJvbm1lbnQgc3RhY2sgdW5kZXJmbG93XG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCkBAIC0xNDQ5LDggKzE0NDksMTAgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9LT05FUExVUykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9LT1ZBUExVUykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9QWVJBX1dJUkVEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUxFU1MpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19XSVJFTEVTU19LQkRfTU9VU0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NLWUNBQkxFLCBVU0JfREVWSUNFX0lEX1NLWUNBQkxFX1dJUkVMRVNTX1BSRVNFTlRFUikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9WQUlPX1ZHWF9NT1VTRSkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jIGIvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKaW5kZXggNTU1MzgyZi4uYmFlNDg3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogICAgIHsgMHg4NSwgMHg4MywgIkRlc2lnbkNhcGFjaXR5IiB9LAogICAgIHsgMHg4NSwgMHg4NSwgIk1hbnVmYWN0dXJlckRhdGUiIH0sCiAgICAgeyAweDg1LCAweDg5LCAiaURldmljZUNoZW1pc3RyeSIgfSwKLSAgICB7IDB4ODUsIDB4OGIsICJSZWNoYXJnYWJsZSIgfSwKKyAgICB7IDB4ODUsIDB4OGIsICJSZWNoYXJnZWFibGUiIH0sCiAgICAgeyAweDg1LCAweDhmLCAiaU9FTUluZm9ybWF0aW9uIiB9LAogICAgIHsgMHg4NSwgMHg4ZCwgIkNhcGFjaXR5R3JhbnVsYXJpdHkxIiB9LAogICAgIHsgMHg4NSwgMHhkMCwgIkFDUHJlc2VudCIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCA2NWFjNTNkLi4wMGE5NGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0xNTAsNiArMTUwLDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSF8xNV82IDB4MGYwMQogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0gJCTB4MDY4ZQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX1BST19USFJPVFRMRQkweDAwZjEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSF9QUk9fUEVEQUxTCTB4MDBmMgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX0NPTUJBVFNUSUNLCTB4MDBmNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX0ZMSUdIVF9TSU1fRUNMSVBTRV9ZT0tFICAgICAgIDB4MDA1MQpAQCAtNTI0LDYgKzUyNSw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUJMHgwMDAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19XSVJFTEVTU19LQkRfTU9VU0UJMHgwNjAwCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TS1lDQUJMRQkJCTB4MTIyMworI2RlZmluZQlVU0JfREVWSUNFX0lEX1NLWUNBQkxFX1dJUkVMRVNTX1BSRVNFTlRFUgkweDNGMDcKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NPTlkJCQkweDA1NGMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT05ZX1ZBSU9fVkdYX01PVVNFCTB4MDI0YgogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIJMHgwMjY4CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWxnZmYuYwppbmRleCA5MGQwZWYyLi5mMDk5MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKQEAgLTczLDYgKzczLDggQEAKIAl7IDB4MDQ2ZCwgMHhjMjkzLCBmZl9qb3lzdGljayB9LAogCXsgMHgwNDZkLCAweGMyOTQsIGZmX3doZWVsIH0sCiAJeyAweDA0NmQsIDB4YzI5NSwgZmZfam95c3RpY2sgfSwKKwl7IDB4MDQ2ZCwgMHhjMjk4LCBmZl93aGVlbCB9LAorCXsgMHgwNDZkLCAweGMyOTksIGZmX3doZWVsIH0sCiAJeyAweDA0NmQsIDB4Y2EwMywgZmZfd2hlZWwgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCmluZGV4IDMxOGNjNDAuLjBlYzkxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpAQCAtNzYsNyArNzYsNyBAQAogICogVGhpcyBpcyB0cnVlIHdoZW4gc2luZ2xlX3RvdWNoX2lkIGlzIGVxdWFsIHRvIE5PX1RPVUNIRVMuIElmIG11bHRpcGxlIHRvdWNoZXMKICAqIGFyZSBkb3duIGFuZCB0aGUgdG91Y2ggcHJvdmlkaW5nIGZvciBzaW5nbGUgdG91Y2ggZW11bGF0aW9uIGlzIGxpZnRlZCwKICAqIHNpbmdsZV90b3VjaF9pZCBpcyBlcXVhbCB0byBTSU5HTEVfVE9VQ0hfVVAuIFdoaWxlIHNpbmdsZSB0b3VjaCBlbXVsYXRpb24gaXMKLSAqIG9jY3VyaW5nLCBzaW5nbGVfdG91Y2hfaWQgY29ycmVzcG9uZHMgd2l0aCB0aGUgdHJhY2tpbmcgaWQgb2YgdGhlIHRvdWNoIHVzZWQuCisgKiBvY2N1cnJpbmcsIHNpbmdsZV90b3VjaF9pZCBjb3JyZXNwb25kcyB3aXRoIHRoZSB0cmFja2luZyBpZCBvZiB0aGUgdG91Y2ggdXNlZC4KICAqLwogI2RlZmluZSBOT19UT1VDSEVTIC0xCiAjZGVmaW5lIFNJTkdMRV9UT1VDSF9VUCAtMgpAQCAtNDE4LDYgKzQxOCw4IEBACiAJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksIC0yNDU2LAogCQkJCTI1NjUsIDQsIDApOwogCQl9CisKKwkJaW5wdXRfc2V0X2V2ZW50c19wZXJfcGFja2V0KGlucHV0LCA2MCk7CiAJfQogCiAJaWYgKHJlcG9ydF91bmRlY2lwaGVyZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1vcnRlay5jIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKaW5kZXggZjliN2RkNC4uMGZmYTFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKQEAgLTEsOCArMSwxNCBAQAogLyoKLSAqICBISUQgZHJpdmVyIGZvciBPcnRlayBQS0ItMTcwMC9XS0ItMjAwMCAod2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZCkuCi0gKiAgRml4ZXMgTG9naWNhbE1heGltdW0gZXJyb3IgaW4gSElEIHJlcG9ydCBkZXNjcmlwdGlvbi4KKyAqICBISUQgZHJpdmVyIGZvciB2YXJpb3VzIGRldmljZXMgd2hpY2ggYXJlIGFwcGFyZW50bHkgYmFzZWQgb24gdGhlIHNhbWUgY2hpcHNldAorICogIGZyb20gY2VydGFpbiB2ZW5kb3Igd2hpY2ggcHJvZHVjZXMgY2hpcHMgdGhhdCBjb250YWluIHdyb25nIExvZ2ljYWxNYXhpbXVtCisgKiAgdmFsdWUgaW4gdGhlaXIgSElEIHJlcG9ydCBkZXNjcmlwdG9yLiBDdXJyZW50bHkgc3VwcG9ydGVkIGRldmljZXMgYXJlOgorICoKKyAqICAgIE9ydGVrIFBLQi0xNzAwCisgKiAgICBPcnRlayBXS0ItMjAwMAorICogICAgU2t5Y2FibGUgd2lyZWxlc3MgcHJlc2VudGVyCiAgKgogICogIENvcHlyaWdodCAoYykgMjAxMCBKb2huYXRob24gSGFycmlzIDxqbWhhcnJpc0BnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDExIEppcmkgS29zaW5hCiAgKi8KIAogLyoKQEAgLTIyLDggKzI4LDExIEBACiAJCXVuc2lnbmVkIGludCAqcnNpemUpCiB7CiAJaWYgKCpyc2l6ZSA+PSA1NiAmJiByZGVzY1s1NF0gPT0gMHgyNSAmJiByZGVzY1s1NV0gPT0gMHgwMSkgewotCQloaWRfaW5mbyhoZGV2LCAiRml4aW5nIHVwIE9ydGVrIFdLQi0yMDAwIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKKwkJaGlkX2luZm8oaGRldiwgIkZpeGluZyB1cCBsb2dpY2FsIG1pbmltdW0gaW4gcmVwb3J0IGRlc2NyaXB0b3IgKE9ydGVrKVxuIik7CiAJCXJkZXNjWzU1XSA9IDB4OTI7CisJfSBlbHNlIGlmICgqcnNpemUgPj0gNTQgJiYgcmRlc2NbNTJdID09IDB4MjUgJiYgcmRlc2NbNTNdID09IDB4MDEpIHsKKwkJaGlkX2luZm8oaGRldiwgIkZpeGluZyB1cCBsb2dpY2FsIG1pbmltdW0gaW4gcmVwb3J0IGRlc2NyaXB0b3IgKFNreWNhYmxlKVxuIik7CisJCXJkZXNjWzUzXSA9IDB4NjU7CiAJfQogCXJldHVybiByZGVzYzsKIH0KQEAgLTMxLDYgKzQwLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBvcnRla19kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09SVEVLLCBVU0JfREVWSUNFX0lEX09SVEVLX1BLQjE3MDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09SVEVLLCBVU0JfREVWSUNFX0lEX09SVEVLX1dLQjIwMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NLWUNBQkxFLCBVU0JfREVWSUNFX0lEX1NLWUNBQkxFX1dJUkVMRVNTX1BSRVNFTlRFUikgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgb3J0ZWtfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jIGIvZHJpdmVycy9oaWQvaGlkLXBpY29sY2QuYwppbmRleCA2NTdkYTVhLi5iMmY1NmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMKQEAgLTE4MDYsMTMgKzE4MDYsMTMgQEAKIC8qCiAgKiBOb3RlczoKICAqIC0gY29uY3VycmVudCB3cml0aW5nIGlzIHByZXZlbnRlZCBieSBtdXRleCBhbmQgYWxsIHdyaXRlcyBtdXN0IGJlCi0gKiAgIG4qNjQgYnl0ZXMgYW5kIDY0LWJ5dGUgYWxpZ25lZCwgZWFjaCB3cml0ZSBiZWluZyBwcmVjZWVkZWQgYnkgYW4KKyAqICAgbio2NCBieXRlcyBhbmQgNjQtYnl0ZSBhbGlnbmVkLCBlYWNoIHdyaXRlIGJlaW5nIHByZWNlZGVkIGJ5IGFuCiAgKiAgIEVSQVNFIHdoaWNoIGVyYXNlcyBhIDY0Ynl0ZSBibG9jay4KICAqICAgSWYgbGVzcyB0aGFuIHJlcXVlc3RlZCB3YXMgd3JpdHRlbiBvciBhbiBlcnJvciBpcyByZXR1cm5lZCBmb3IgYW4KICAqICAgb3RoZXJ3aXNlIGNvcnJlY3Qgd3JpdGUgcmVxdWVzdCB0aGUgbmV4dCA2NC1ieXRlIGJsb2NrIHdoaWNoIHNob3VsZAogICogICBoYXZlIGJlZW4gd3JpdHRlbiBpcyBpbiB1bmRlZmluZWQgc3RhdGUgKG1vc3RseTogb3JpZ2luYWwsIGVyYXNlZCwKICAqICAgKGhhbGYtKXdyaXR0ZW4gd2l0aCB3cml0ZSBlcnJvcikKLSAqIC0gcmVhZGluZyBjYW4gaGFwcGVuZCB3aXRob3V0IHNwZWNpYWwgcmVzdHJpY3Rpb24KKyAqIC0gcmVhZGluZyBjYW4gaGFwcGVuIHdpdGhvdXQgc3BlY2lhbCByZXN0cmljdGlvbgogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaWNvbGNkX2RlYnVnX2ZsYXNoX2ZvcHMgPSB7CiAJLm93bmVyICAgID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaCBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oCmluZGV4IDY0YWJiNWIuLjQxMDlhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkvKiBvc2QgZXZlbnRzIGFyZSB0aG91Z2h0IHRvIGJlIGRpc3BsYXkgb24gc2NyZWVuICovCiAJa29uZV9tb3VzZV9ldmVudF9vc2RfZHBpID0gMHhhMCwKIAlrb25lX21vdXNlX2V2ZW50X29zZF9wcm9maWxlID0gMHhiMCwKLQkvKiBUT0RPIGNsYXJpZnkgbWVhbmluZyBhbmQgb2NjdXJlbmNlIG9mIGtvbmVfbW91c2VfZXZlbnRfY2FsaWJyYXRpb24gKi8KKwkvKiBUT0RPIGNsYXJpZnkgbWVhbmluZyBhbmQgb2NjdXJyZW5jZSBvZiBrb25lX21vdXNlX2V2ZW50X2NhbGlicmF0aW9uICovCiAJa29uZV9tb3VzZV9ldmVudF9jYWxpYnJhdGlvbiA9IDB4YzAsCiAJa29uZV9tb3VzZV9ldmVudF9jYWxsX292ZXJsb25nX21hY3JvID0gMHhlMCwKIAkvKiBzd2l0Y2ggZXZlbnRzIG5vdGlmeSBpZiB1c2VyIGNoYW5nZWQgdmFsdWVzIHdpdGggbW91c2VidXR0b24gY2xpY2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMKaW5kZXggMTYwZjQ4MS4uMzgyODBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMKQEAgLTY1Miw3ICs2NTIsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHB5cmFfZGV2aWNlc1tdID0gewogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsCiAJCQlVU0JfREVWSUNFX0lEX1JPQ0NBVF9QWVJBX1dJUkVEKSB9LAotCS8qIFRPRE8gYWRkIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUxFU1MgYWZ0ZXIgdGVzdGluZyAqLworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsCisJCQlVU0JfREVWSUNFX0lEX1JPQ0NBVF9QWVJBX1dJUkVMRVNTKSB9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggOWE5NGI2NC4uYTg0MjZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC01OSw2ICs1OSw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIX0NPTUJBVFNUSUNLLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfRkxJR0hUX1NJTV9FQ0xJUFNFX1lPS0UsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF9GTElHSFRfU0lNX1lPS0UsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF9QUk9fVEhST1RUTEUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF9QUk9fUEVEQUxTLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfM0FYSVNfNUJVVFRPTl9TVElDSywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIX0FYSVNfMjk1LCBISURfUVVJUktfTk9HRVQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCAwNjBlZjYzLi41MGU0MGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0xMTAsOCArMTEwLDcgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQURNMTAyMQogCSAgYW5kIEFETTEwMjMgc2Vuc29yIGNoaXBzIGFuZCBjbG9uZXM6IE1heGltIE1BWDE2MTcgYW5kIE1BWDE2MTdBLAotCSAgR2VuZXN5cyBMb2dpYyBHTDUyM1NNLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODQsIFRJIFRITUMxMCwKLQkgIGFuZCB0aGUgWEVPTiBwcm9jZXNzb3IgYnVpbHQtaW4gc2Vuc29yLgorCSAgR2VuZXN5cyBMb2dpYyBHTDUyM1NNLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODQgYW5kIFRJIFRITUMxMC4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWRtMTAyMS4KQEAgLTYxOCwxMCArNjE3LDEwIEBACiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTkwLAotCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiBhbmQgQURUNzQ2MSwgTWF4aW0KLQkgIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDgsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksCi0JICBNQVg2NjgwLCBNQVg2NjgxLCBNQVg2NjkyLCBNQVg2Njk1LCBNQVg2Njk2LCBhbmQgV2luYm9uZC9OdXZvdG9uCi0JICBXODNMNzcxVy9HL0FXRy9BU0cgc2Vuc29yIGNoaXBzLgorCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiwgQURUNzQ2MSwgYW5kIEFEVDc0NjFBLAorCSAgTWF4aW0gTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OCwgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwKKwkgIE1BWDY2ODAsIE1BWDY2ODEsIE1BWDY2OTIsIE1BWDY2OTUsIE1BWDY2OTYsIE9OIFNlbWljb25kdWN0b3IgTkNUMTAwOCwKKwkgIGFuZCBXaW5ib25kL051dm90b24gVzgzTDc3MVcvRy9BV0cvQVNHIHNlbnNvciBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG05MC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMgYi9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCmluZGV4IDBlMDVhYTEuLmU3ZDRjNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMKKysrIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYwpAQCAtMTQyMiw3ICsxNDIyLDcgQEAKIAkgICBhdCBEQVRBIGFuZCAweEFDLCB3aGVuIHRoaXMgZHJpdmVyIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkIG9uY2UKIAkgICBEQVRBIHdpbGwgaG9sZCAweDA4LiBGb3IgbW9zdCB1R3VydSdzIENNRCB3aWxsIGhvbGQgMHhBQyBpbiBlaXRoZXIKIAkgICBzY2VuYXJpbyBidXQgc29tZSB3aWxsIGhvbGQgMHgwMC4KLQkgICBTb21lIHVHdXJ1J3MgaW5pdGFsbHkgaG9sZCAweDA5IGF0IERBVEEgYW5kIHdpbGwgb25seSBob2xkIDB4MDgKKwkgICBTb21lIHVHdXJ1J3MgaW5pdGlhbGx5IGhvbGQgMHgwOSBhdCBEQVRBIGFuZCB3aWxsIG9ubHkgaG9sZCAweDA4CiAJICAgYWZ0ZXIgcmVhZGluZyBDTUQgZmlyc3QsIHNvIENNRCBtdXN0IGJlIHJlYWQgZmlyc3QhICovCiAJdTggY21kX3ZhbCA9IGluYl9wKEFCSVRfVUdVUlVfQkFTRSArIEFCSVRfVUdVUlVfQ01EKTsKIAl1OCBkYXRhX3ZhbCA9IGluYl9wKEFCSVRfVUdVUlVfQkFTRSArIEFCSVRfVUdVUlVfREFUQSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydTMuYyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1My5jCmluZGV4IDAzNGNlYmYuLmU4OWQ1NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1My5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1My5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkvKiBQb2ludGVyIHRvIHRoZSBzZW5zb3JzIGluZm8gZm9yIHRoZSBkZXRlY3RlZCBtb3RoZXJib2FyZCAqLwogCWNvbnN0IHN0cnVjdCBhYml0dWd1cnUzX3NlbnNvcl9pbmZvICpzZW5zb3JzOwogCi0JLyogVGhlIGFiaXR1Z3VydTMgc3VwcG9ydHMgdXB0byA0OCBzZW5zb3JzLCBhbmQgdGh1cyBoYXMgcmVnaXN0ZXJzCisJLyogVGhlIGFiaXR1Z3VydTMgc3VwcG9ydHMgdXAgdG8gNDggc2Vuc29ycywgYW5kIHRodXMgaGFzIHJlZ2lzdGVycwogCSAgIHNldHMgZm9yIDQ4IHNlbnNvcnMsIGZvciBjb252aWVuZW5jZSByZWFzb25zIC8gc2ltcGxpY2l0eSBvZiB0aGUKIAkgICBjb2RlIHdlIGFsd2F5cyByZWFkIGFuZCBzdG9yZSBhbGwgcmVnaXN0ZXJzIGZvciBhbGwgNDggc2Vuc29ycyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCmluZGV4IGJlMGZkZDUuLjA1MzE4NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCkBAIC0xNzUsNyArMTc1LDcgQEAKICAqIHRoZXNlIG1hY3JvcyBhcmUgY2FsbGVkOiBhcmd1bWVudHMgbWF5IGJlIGV2YWx1YXRlZCBtb3JlIHRoYW4gb25jZS4KICAqLwogCi0vKiBJTiBhcmUgc2NhbGVkIGFjb3JkaW5nIHRvIGJ1aWx0LWluIHJlc2lzdG9ycy4gIFRoZXNlIGFyZSB0aGUKKy8qIElOIGFyZSBzY2FsZWQgYWNjb3JkaW5nIHRvIGJ1aWx0LWluIHJlc2lzdG9ycy4gIFRoZXNlIGFyZSB0aGUKICAqICAgdm9sdGFnZXMgY29ycmVzcG9uZGluZyB0byAzLzQgb2YgZnVsbCBzY2FsZSAoMTkyIG9yIDB4YzApCiAgKiAgIE5PVEU6IFRoZSAtMTJWIGlucHV0IG5lZWRzIGFuIGFkZGl0aW9uYWwgZmFjdG9yIHRvIGFjY291bnQKICAqICAgICAgZm9yIHRoZSBWcmVmIHB1bGx1cCByZXNpc3Rvci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggY2Y0N2U2ZS4uZGE3MmRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgdGhlc2UgbWFjcm9zIGFyZSBjYWxsZWQ6IGFyZ3VtZW50cyBtYXkgYmUgZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlLgogICovCiAKLS8qIElOIGFyZSBzY2FsZWQgYWNvcmRpbmcgdG8gYnVpbHQtaW4gcmVzaXN0b3JzICovCisvKiBJTiBhcmUgc2NhbGVkIGFjY29yZGluZyB0byBidWlsdC1pbiByZXNpc3RvcnMgKi8KIHN0YXRpYyBjb25zdCBpbnQgbG04NV9zY2FsaW5nW10gPSB7ICAvKiAuMDAxIFZvbHRzICovCiAJMjUwMCwgMjI1MCwgMzMwMCwgNTAwMCwgMTIwMDAsCiAJMzMwMCwgMTUwMCwgMTgwMCAvKkVNQzZEMTAwKi8KQEAgLTEwOTQsNiArMTA5NCw3IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCisJTlVMTAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04NV9ncm91cF9taW5jdGwgPSB7CkBAIC0xMTA0LDYgKzExMDUsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAorCU5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtODVfZ3JvdXBfdGVtcF9vZmYgPSB7CkBAIC0xMzI5LDExICsxMzMxLDExIEBACiAJaWYgKGRhdGEtPnR5cGUgIT0gZW1jNmQxMDNzKSB7CiAJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfbWluY3RsKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2tmcmVlOworCQkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCiAJCQkJCSAmbG04NV9ncm91cF90ZW1wX29mZik7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycl9rZnJlZTsKKwkJCWdvdG8gZXJyX3JlbW92ZV9maWxlczsKIAl9CiAKIAkvKiBUaGUgQURUNzQ2My82OCBoYXZlIGFuIG9wdGlvbmFsIFZSTSAxMCBtb2RlIHdoZXJlIHBpbiAyMSBpcyB1c2VkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IDgxMjc4MWMuLjJmOTRmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC00OSwxMCArNDksMTAgQEAKICAqIGNoaXBzLCBidXQgc3VwcG9ydCB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzIGluc3RlYWQgb2YgdHdvLiBNQVg2Njk1CiAgKiBhbmQgTUFYNjY5NiBvbmx5IGRpZmZlciBpbiB0aGUgcGlub3V0IHNvIHRoZXkgY2FuIGJlIHRyZWF0ZWQgaWRlbnRpY2FsbHkuCiAgKgotICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURUNzQ2MSBjaGlwIGZyb20gQW5hbG9nIERldmljZXMuCi0gKiBJdCdzIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVuZGVkIG1vZGUuIEl0IGlzIG1vc3RseQotICogY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEgZm9ybWF0IGRpZmZlcmVuY2UgZm9yIHRoZQotICogdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgorICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBBRFQ3NDYxIGFuZCBBRFQ3NDYxQSBmcm9tIEFuYWxvZyBEZXZpY2VzIGFzIHdlbGwgYXMKKyAqIE5DVDEwMDggZnJvbSBPTiBTZW1pY29uZHVjdG9yLiBUaGUgY2hpcHMgYXJlIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkKKyAqIGFuZCBleHRlbmRlZCBtb2RlLiBUaGV5IGFyZSBtb3N0bHkgY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEKKyAqIGZvcm1hdCBkaWZmZXJlbmNlIGZvciB0aGUgdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgogICoKICAqIFNpbmNlIHRoZSBMTTkwIHdhcyB0aGUgZmlyc3QgY2hpcHNldCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG1vc3QKICAqIGNvbW1lbnRzIHdpbGwgcmVmZXIgdG8gdGhpcyBjaGlwc2V0LCBidXQgYXJlIGFjdHVhbGx5IGdlbmVyYWwgYW5kCkBAIC04OCw5ICs4OCwxMCBAQAogICogQWRkcmVzc2VzIHRvIHNjYW4KICAqIEFkZHJlc3MgaXMgZnVsbHkgZGVmaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYmUgY2hhbmdlZCBleGNlcHQgZm9yCiAgKiBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxLgotICogTE04NiwgTE04OSwgTE05MCwgTE05OSwgQURNMTAzMiwgQURNMTAzMi0xLCBBRFQ3NDYxLCBNQVg2NjQ5LCBNQVg2NjU3LAotICogTUFYNjY1OCBhbmQgVzgzTDc3MSBoYXZlIGFkZHJlc3MgMHg0Yy4KLSAqIEFETTEwMzItMiwgQURUNzQ2MS0yLCBMTTg5LTEsIExNOTktMSBhbmQgTUFYNjY0NiBoYXZlIGFkZHJlc3MgMHg0ZC4KKyAqIExNODYsIExNODksIExNOTAsIExNOTksIEFETTEwMzIsIEFETTEwMzItMSwgQURUNzQ2MSwgQURUNzQ2MUEsIE1BWDY2NDksCisgKiBNQVg2NjU3LCBNQVg2NjU4LCBOQ1QxMDA4IGFuZCBXODNMNzcxIGhhdmUgYWRkcmVzcyAweDRjLgorICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIEFEVDc0NjFBLTIsIExNODktMSwgTE05OS0xLCBNQVg2NjQ2LCBhbmQgTkNUMTAwOEQKKyAqIGhhdmUgYWRkcmVzcyAweDRkLgogICogTUFYNjY0NyBoYXMgYWRkcmVzcyAweDRlLgogICogTUFYNjY1OSBjYW4gaGF2ZSBhZGRyZXNzIDB4NGMsIDB4NGQgb3IgMHg0ZS4KICAqIE1BWDY2ODAgYW5kIE1BWDY2ODEgY2FuIGhhdmUgYWRkcmVzcyAweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLApAQCAtMTc0LDYgKzE3NSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG05MF9pZFtdID0gewogCXsgImFkbTEwMzIiLCBhZG0xMDMyIH0sCiAJeyAiYWR0NzQ2MSIsIGFkdDc0NjEgfSwKKwl7ICJhZHQ3NDYxYSIsIGFkdDc0NjEgfSwKIAl7ICJsbTkwIiwgbG05MCB9LAogCXsgImxtODYiLCBsbTg2IH0sCiAJeyAibG04OSIsIGxtODYgfSwKQEAgLTE4OCw2ICsxOTAsNyBAQAogCXsgIm1heDY2ODEiLCBtYXg2NjgwIH0sCiAJeyAibWF4NjY5NSIsIG1heDY2OTYgfSwKIAl7ICJtYXg2Njk2IiwgbWF4NjY5NiB9LAorCXsgIm5jdDEwMDgiLCBhZHQ3NDYxIH0sCiAJeyAidzgzbDc3MSIsIHc4M2w3NzEgfSwKIAl7IH0KIH07CkBAIC0zNTYsNyArMzU5LDcgQEAKIAkvKgogCSAqIFRoZXJlIGlzIGEgdHJpY2sgaGVyZS4gV2UgaGF2ZSB0byByZWFkIHR3byByZWdpc3RlcnMgdG8gaGF2ZSB0aGUKIAkgKiBzZW5zb3IgdGVtcGVyYXR1cmUsIGJ1dCB3ZSBoYXZlIHRvIGJld2FyZSBhIGNvbnZlcnNpb24gY291bGQgb2NjdXIKLQkgKiBpbmJldHdlZW4gdGhlIHJlYWRpbmdzLiBUaGUgZGF0YXNoZWV0IHNheXMgd2Ugc2hvdWxkIGVpdGhlciB1c2UKKwkgKiBiZXR3ZWVuIHRoZSByZWFkaW5ncy4gVGhlIGRhdGFzaGVldCBzYXlzIHdlIHNob3VsZCBlaXRoZXIgdXNlCiAJICogdGhlIG9uZS1zaG90IGNvbnZlcnNpb24gcmVnaXN0ZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gZG8KIAkgKiAoZGlzYWJsZXMgaGFyZHdhcmUgbW9uaXRvcmluZykgb3IgbW9uaXRvciB0aGUgYnVzeSBiaXQsIHdoaWNoIGlzCiAJICogaW1wb3NzaWJsZSAod2UgY2FuJ3QgcmVhZCB0aGUgdmFsdWVzIGFuZCBtb25pdG9yIHRoYXQgYml0IGF0IHRoZQpAQCAtMTE1Myw2ICsxMTU2LDExIEBACiAJCSAmJiAocmVnX2NvbmZpZzEgJiAweDFCKSA9PSAweDAwCiAJCSAmJiByZWdfY29udnJhdGUgPD0gMHgwQSkgewogCQkJbmFtZSA9ICJhZHQ3NDYxIjsKKwkJfSBlbHNlCisJCWlmIChjaGlwX2lkID09IDB4NTcgLyogQURUNzQ2MUEsIE5DVDEwMDggKi8KKwkJICYmIChyZWdfY29uZmlnMSAmIDB4MUIpID09IDB4MDAKKwkJICYmIHJlZ19jb252cmF0ZSA8PSAweDBBKSB7CisJCQluYW1lID0gImFkdDc0NjFhIjsKIAkJfQogCX0gZWxzZQogCWlmIChtYW5faWQgPT0gMHg0RCkgeyAvKiBNYXhpbSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wbWJ1c19jb3JlLmMgYi9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYwppbmRleCBlZGZiOTJlLi4xOTZmZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYwpAQCAtMTM5LDcgKzEzOSw2IEBACiAJICogQSBzaW5nbGUgc3RhdHVzIHJlZ2lzdGVyIGNvdmVycyBtdWx0aXBsZSBhdHRyaWJ1dGVzLAogCSAqIHNvIHdlIGtlZXAgdGhlbSBhbGwgdG9nZXRoZXIuCiAJICovCi0JdTggc3RhdHVzX2JpdHM7CiAJdTggc3RhdHVzW1BCX05VTV9TVEFUVVNfUkVHXTsKIAogCXU4IGN1cnJwYWdlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zaHQxNS5jIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCmluZGV4IDFhOWMzMmQuLmY0ZTYxN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYworKysgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgU0hUMTVfVFNVCQkxNTAJLyogZGF0YSBzZXR1cCB0aW1lICovCiAKIC8qKgotICogc3RydWN0IHNodDE1X3RlbXBwYWlyIC0gZWxlbWVudHMgb2Ygdm9sdGFnZSBkZXBlbmRhbnQgdGVtcCBjYWxjCisgKiBzdHJ1Y3Qgc2h0MTVfdGVtcHBhaXIgLSBlbGVtZW50cyBvZiB2b2x0YWdlIGRlcGVuZGVudCB0ZW1wIGNhbGMKICAqIEB2ZGQ6CXN1cHBseSB2b2x0YWdlIGluIG1pY3Jvdm9sdHMKICAqIEBkMToJCXNlZSBkYXRhIHNoZWV0CiAgKi8KQEAgLTI1MSw3ICsyNTEsNyBAQAogCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSkpOwogCWlmIChncGlvX2dldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKSA9PSAwKSB7CiAJCWRpc2FibGVfaXJxX25vc3luYyhncGlvX3RvX2lycShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKSk7Ci0JCS8qIE9ubHkgcmVsZXZhbnQgaWYgdGhlIGludGVycnVwdCBoYXNuJ3Qgb2NjdXJlZC4gKi8KKwkJLyogT25seSByZWxldmFudCBpZiB0aGUgaW50ZXJydXB0IGhhc24ndCBvY2N1cnJlZC4gKi8KIAkJaWYgKCFhdG9taWNfcmVhZCgmZGF0YS0+aW50ZXJydXB0X2hhbmRsZWQpKQogCQkJc2NoZWR1bGVfd29yaygmZGF0YS0+cmVhZF93b3JrKTsKIAl9CkBAIC00NTIsNyArNDUyLDcgQEAKIAkJKi8KIAkJYXRvbWljX3NldCgmZGF0YS0+aW50ZXJydXB0X2hhbmRsZWQsIDApOwogCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpKTsKLQkJLyogSWYgc3RpbGwgbm90IG9jY3VyZWQgb3IgYW5vdGhlciBoYW5kbGVyIGhhcyBiZWVuIHNjaGVkdWxlZCAqLworCQkvKiBJZiBzdGlsbCBub3Qgb2NjdXJyZWQgb3IgYW5vdGhlciBoYW5kbGVyIGhhcyBiZWVuIHNjaGVkdWxlZCAqLwogCQlpZiAoZ3Bpb19nZXRfdmFsdWUoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSkKIAkJICAgIHx8IGF0b21pY19yZWFkKCZkYXRhLT5pbnRlcnJ1cHRfaGFuZGxlZCkpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3RtcDEwMi5jIGIvZHJpdmVycy9od21vbi90bXAxMDIuYwppbmRleCA5MzE4N2MzYy4uNWJkMTk0OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdG1wMTAyLmMKKysrIGIvZHJpdmVycy9od21vbi90bXAxMDIuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKIAkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJhZGFwdGVyIGRvZXNudCBzdXBwb3J0IFNNQnVzIHdvcmQgIgorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IFNNQnVzIHdvcmQgIgogCQkJInRyYW5zYWN0aW9uc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdHdsNDAzMC1tYWRjLWh3bW9uLmMgYi9kcml2ZXJzL2h3bW9uL3R3bDQwMzAtbWFkYy1od21vbi5jCmluZGV4IGRlNTgxOTEuLjU3MjQwNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdHdsNDAzMC1tYWRjLWh3bW9uLmMKKysrIGIvZHJpdmVycy9od21vbi90d2w0MDMwLW1hZGMtaHdtb24uYwpAQCAtOTgsNyArOTgsNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgdHdsNDAzMF9tYWRjX2h3bW9uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldDsKLQlpbnQgc3RhdHVzOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uOwogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnR3bDQwMzBfbWFkY19ncm91cCk7CkBAIC0xMDcsNyArMTA2LDcgQEAKIAlod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKIAlpZiAoSVNfRVJSKGh3bW9uKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJod21vbl9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkLlxuIik7Ci0JCXN0YXR1cyA9IFBUUl9FUlIoaHdtb24pOworCQlyZXQgPSBQVFJfRVJSKGh3bW9uKTsKIAkJZ290byBlcnJfcmVnOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwppbmRleCA0MDBhODhiLi4xN2NmMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwpAQCAtNTU2LDcgKzU1Niw3IEBACiAKIC8qIE5vdGU6IHdlIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGZhbiBtaW5pbXVtIGhlcmUsIGJlY2F1c2UgaXRzIHZhbHVlIGlzCiAgICBkZXRlcm1pbmVkIGluIHBhcnQgYnkgdGhlIGZhbiBkaXZpc29yLiAgVGhpcyBmb2xsb3dzIHRoZSBwcmluY2lwbGUgb2YKLSAgIGxlYXN0IHN1cHJpc2U7IHRoZSB1c2VyIGRvZXNuJ3QgZXhwZWN0IHRoZSBmYW4gbWluaW11bSB0byBjaGFuZ2UganVzdAorICAgbGVhc3Qgc3VycHJpc2U7IHRoZSB1c2VyIGRvZXNuJ3QgZXhwZWN0IHRoZSBmYW4gbWluaW11bSB0byBjaGFuZ2UganVzdAogICAgYmVjYXVzZSB0aGUgZGl2aXNvciBjaGFuZ2VkLiAqLwogc3RhdGljIHNzaXplX3Qgc3RvcmVfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwppbmRleCA2Mzg0MWY4Li5mM2U3MTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAjZGVmaW5lIFRFTVAxX1RPX1JFRyh2YWwpCShTRU5TT1JTX0xJTUlUKCgodmFsKSA8IDAgPyAodmFsKSsweDEwMCoxMDAwIFwKIAkJCQkJOiAodmFsKSkgLyAxMDAwLCAwLCAweGZmKSkKICNkZWZpbmUgVEVNUDFfRlJPTV9SRUcodmFsKQkoKCh2YWwpICYgMHg4MCA/ICh2YWwpLTB4MTAwIDogKHZhbCkpICogMTAwMCkKLS8qIGZvciB0ZW1wMiBhbmQgdGVtcDMsIGJlY2F1c2UgdGhleSBuZWVkIGFkZHRpb25hbCByZXNvbHV0aW9uICovCisvKiBmb3IgdGVtcDIgYW5kIHRlbXAzLCBiZWNhdXNlIHRoZXkgbmVlZCBhZGRpdGlvbmFsIHJlc29sdXRpb24gKi8KICNkZWZpbmUgVEVNUF9BRERfRlJPTV9SRUcodmFsMSwgdmFsMikgXAogCSgoKCh2YWwxKSAmIDB4ODAgPyAodmFsMSktMHgxMDAgXAogCQk6ICh2YWwxKSkgKiAxMDAwKSArICgodmFsMiAmIDB4ODApID8gNTAwIDogMCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jIGIvZHJpdmVycy9od21vbi93ODM3OTMuYwppbmRleCBlM2JkZWRmLi44NTRmOTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMKQEAgLTE5MjEsNyArMTkyMSw3IEBACiAJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGksIGo7CiAJLyoKLQkgICBUaGV5IGFyZSBzb21ld2hhdCAic3RhYmxlIiByZWdpc3RlcnMsIGFuZCB0byB1cGRhdGUgdGhlbSBldmVyeXRpbWUKKwkgICBUaGV5IGFyZSBzb21ld2hhdCAic3RhYmxlIiByZWdpc3RlcnMsIGFuZCB0byB1cGRhdGUgdGhlbSBldmVyeSB0aW1lCiAJICAgdGFrZXMgc28gbXVjaCB0aW1lLCBpdCdzIGp1c3Qgbm90IHdvcnRoeS4gVXBkYXRlIHRoZW0gaW4gYSBsb25nCiAJICAgaW50ZXJ2YWwgdG8gYXZvaWQgZXhjZXB0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwppbmRleCAzODMxOWE2Li5kNmQ1ODY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwpAQCAtMjMyLDkgKzIzMiwxNyBAQAogICogU2FuaXR5IGNoZWNrIGZvciB0aGUgYWRhcHRlciBoYXJkd2FyZSAtIGNoZWNrIHRoZSByZWFjdGlvbiBvZgogICogdGhlIGJ1cyBsaW5lcyBvbmx5IGlmIGl0IHNlZW1zIHRvIGJlIGlkbGUuCiAgKi8KLXN0YXRpYyBpbnQgdGVzdF9idXMoc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhICphZGFwLCBjaGFyICpuYW1lKQorc3RhdGljIGludCB0ZXN0X2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQogewotCWludCBzY2wsIHNkYTsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCWNvbnN0IGNoYXIgKm5hbWUgPSBpMmNfYWRhcC0+bmFtZTsKKwlpbnQgc2NsLCBzZGEsIHJldDsKKworCWlmIChhZGFwLT5wcmVfeGZlcikgeworCQlyZXQgPSBhZGFwLT5wcmVfeGZlcihpMmNfYWRhcCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJaWYgKGFkYXAtPmdldHNjbCA9PSBOVUxMKQogCQlwcl9pbmZvKCIlczogVGVzdGluZyBTREEgb25seSwgU0NMIGlzIG5vdCByZWFkYWJsZVxuIiwgbmFtZSk7CkBAIC0yOTcsMTEgKzMwNSwxOSBAQAogCQkgICAgICAgIndoaWxlIHB1bGxpbmcgU0NMIGhpZ2ghXG4iLCBuYW1lKTsKIAkJZ290byBiYWlsb3V0OwogCX0KKworCWlmIChhZGFwLT5wb3N0X3hmZXIpCisJCWFkYXAtPnBvc3RfeGZlcihpMmNfYWRhcCk7CisKIAlwcl9pbmZvKCIlczogVGVzdCBPS1xuIiwgbmFtZSk7CiAJcmV0dXJuIDA7CiBiYWlsb3V0OgogCXNkYWhpKGFkYXApOwogCXNjbGhpKGFkYXApOworCisJaWYgKGFkYXAtPnBvc3RfeGZlcikKKwkJYWRhcC0+cG9zdF94ZmVyKGkyY19hZGFwKTsKKwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC02MDcsNyArNjIzLDcgQEAKIAlpbnQgcmV0OwogCiAJaWYgKGJpdF90ZXN0KSB7Ci0JCXJldCA9IHRlc3RfYnVzKGJpdF9hZGFwLCBhZGFwLT5uYW1lKTsKKwkJcmV0ID0gdGVzdF9idXMoYWRhcCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwppbmRleCAyYjlhOGY1Li40Y2E5Y2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAKIAlyZXQgPSBjdXJtc2c7CiAgb3V0OgotCURFQjEoIn19fSB0cmFuc2ZlcmVkICVkLyVkIG1lc3NhZ2VzLiAiCisJREVCMSgifX19IHRyYW5zZmVycmVkICVkLyVkIG1lc3NhZ2VzLiAiCiAJICAgICAic3RhdHVzIGlzICUjMDR4LiBjb250cm9sIGlzICUjMDR4XG4iLAogCSAgICAgY3VybXNnLCBudW0sIHBjYV9zdGF0dXMoYWRhcCksCiAJICAgICBwY2FfZ2V0X2NvbihhZGFwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCmluZGV4IDkwNmEzY2E1Li5kZDM2NDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJfQogCiAJLyogVW5mb3J0dW5hdGVseSB0aGUgQUxJIFNNQiBjb250cm9sbGVyIG1hcHMgIm5vIHJlc3BvbnNlIiBhbmQgImJ1cwotCSAqIGNvbGxpc2lvbiIgaW50byBhIHNpbmdsZSBiaXQuIE5vIHJlcG9uc2UgaXMgdGhlIHVzdWFsIGNhc2Ugc28gZG9uJ3QKKwkgKiBjb2xsaXNpb24iIGludG8gYSBzaW5nbGUgYml0LiBObyByZXNwb25zZSBpcyB0aGUgdXN1YWwgY2FzZSBzbyBkb24ndAogCSAqIGRvIGEgcHJpbnRrLiAgVGhpcyBtZWFucyB0aGF0IGJ1cyBjb2xsaXNpb25zIGdvIHVucmVwb3J0ZWQuCiAJICovCiAJaWYgKHRlbXAgJiBBTEkxNTM1X1NUU19CVVNFUlIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKaW5kZXggYjE0ZjZkNi4uODNlOGE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCiAJLyoKIAkgIFVuZm9ydHVuYXRlbHkgdGhlIEFMSSBTTUIgY29udHJvbGxlciBtYXBzICJubyByZXNwb25zZSIgYW5kICJidXMKLQkgIGNvbGxpc2lvbiIgaW50byBhIHNpbmdsZSBiaXQuIE5vIHJlcG9uc2UgaXMgdGhlIHVzdWFsIGNhc2Ugc28gZG9uJ3QKKwkgIGNvbGxpc2lvbiIgaW50byBhIHNpbmdsZSBiaXQuIE5vIHJlc3BvbnNlIGlzIHRoZSB1c3VhbCBjYXNlIHNvIGRvbid0CiAJICBkbyBhIHByaW50ay4KIAkgIFRoaXMgbWVhbnMgdGhhdCBidXMgY29sbGlzaW9ucyBnbyB1bnJlcG9ydGVkLgogCSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCmluZGV4IDU3OTVjODMuLmE3NmQ4NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkvKgogCSAqIFdyaXRlIG1vZGUgcmVnaXN0ZXIgZmlyc3QgYXMgbmVlZGVkIGZvciBjb3JyZWN0IGJlaGF2aW91cgogCSAqIG9uIE9NQVAtTDEzOCwgYnV0IGRvbid0IHNldCBTVFQgeWV0IHRvIGF2b2lkIGEgcmFjZSB3aXRoIFhSRFkKLQkgKiBvY2N1cmluZyBiZWZvcmUgd2UgaGF2ZSBsb2FkZWQgRFhSCisJICogb2NjdXJyaW5nIGJlZm9yZSB3ZSBoYXZlIGxvYWRlZCBEWFIKIAkgKi8KIAlkYXZpbmNpX2kyY193cml0ZV9yZWcoZGV2LCBEQVZJTkNJX0kyQ19NRFJfUkVHLCBmbGFnKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYwppbmRleCBiNjY0ZWQ4Li5iN2E1MWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgKiBAbG9jazogcHJvdGVjdCB0aGlzIHN0cnVjdCBhbmQgSU8gcmVnaXN0ZXJzCiAgKiBAY2xrOiBpbnB1dCByZWZlcmVuY2UgY2xvY2sKICAqIEBjbWRfZXJyOiBydW4gdGltZSBoYWR3YXJlIGVycm9yIGNvZGUKLSAqIEBtc2dzOiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgbWVzc2FnZXMgY3VycmVudGx5IGJlaW5nIHRyYW5zZmVyZWQKKyAqIEBtc2dzOiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgbWVzc2FnZXMgY3VycmVudGx5IGJlaW5nIHRyYW5zZmVycmVkCiAgKiBAbXNnc19udW06IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gbXNncwogICogQG1zZ193cml0ZV9pZHg6IHRoZSBlbGVtZW50IGluZGV4IG9mIHRoZSBjdXJyZW50IHR4IG1lc3NhZ2UgaW4gdGhlIG1zZ3MKICAqCWFycmF5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVsZWt0b3IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCmluZGV4IGU1YjFhM2IuLjM3ZTJlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCkBAIC0yMiw3ICsyMiw3IEBACiAvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCiAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICovCiAKLS8qIFBhcnRpYWx5IHJld3JpdGVuIGJ5IE9sZWcgSS4gVmRvdmlraW4gZm9yIG1tYXBwZWQgc3VwcG9ydCBvZgorLyogUGFydGlhbGx5IHJld3JpdGVuIGJ5IE9sZWcgSS4gVmRvdmlraW4gZm9yIG1tYXBwZWQgc3VwcG9ydCBvZgogICAgZm9yIEFscGhhIFByb2Nlc3NvciBJbmMuIFVQLTIwMDAoKykgYm9hcmRzICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggZWQyZTBjNS4uNDU1ZTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTk2LDcgKzk2LDcgQEAKICNkZWZpbmUgU01CSFNUQ0ZHX1NNQl9TTUlfRU4JMgogI2RlZmluZSBTTUJIU1RDRkdfSTJDX0VOCTQKIAotLyogQXV4aWxsYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgYml0cywgSUNINCsgb25seSAqLworLyogQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgYml0cywgSUNINCsgb25seSAqLwogI2RlZmluZSBTTUJBVVhDVExfQ1JDCQkxCiAjZGVmaW5lIFNNQkFVWENUTF9FMzJCCQkyCiAKQEAgLTEzNCwxMCArMTM0LDE1IEBACiAJCQkJIFNNQkhTVFNUU19CVVNfRVJSIHwgU01CSFNUU1RTX0RFVl9FUlIgfCBcCiAJCQkJIFNNQkhTVFNUU19JTlRSKQogCisvKiBPbGRlciBkZXZpY2VzIGhhdmUgdGhlaXIgSUQgZGVmaW5lZCBpbiA8bGludXgvcGNpX2lkcy5oPiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX1NNQlVTCTB4MWMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTCTB4MWQyMgogLyogUGF0c2J1cmcgYWxzbyBoYXMgdGhyZWUgJ0ludGVncmF0ZWQgRGV2aWNlIEZ1bmN0aW9uJyBTTUJ1cyBjb250cm9sbGVycyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTX0lERjAJMHgxZDcwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfU01CVVNfSURGMQkweDFkNzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVU19JREYyCTB4MWQ3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX1NNQlVTCTB4MjMzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfU01CVVMJMHgzYjMwCiAKIHN0cnVjdCBpODAxX3ByaXYgewogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYwppbmRleCBlNGY4OGRjLi4zYzExMGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJCWJyZWFrOwogCQllbHNlIGlmICh1bmxpa2VseShyZXQgIT0gY291bnQpKXsKLQkJCURCRygiJWQ6IHhmZXJfYnl0ZXMsIHJlcXVlc3RlZCAlZCwgdHJhbnNmZXJlZCAlZFxuIiwKKwkJCURCRygiJWQ6IHhmZXJfYnl0ZXMsIHJlcXVlc3RlZCAlZCwgdHJhbnNmZXJyZWQgJWRcbiIsCiAJCQkJZGV2LT5pZHgsIGNvdW50LCByZXQpOwogCiAJCQkvKiBJZiBpdCdzIG5vdCBhIGxhc3QgcGFydCBvZiB4ZmVyLCBhYm9ydCBpdCAqLwpAQCAtNTkzLDcgKzU5Myw3IEBACiAJaWYgKHVubGlrZWx5KChpbl84KCZpaWMtPmV4dHN0cykgJiBFWFRTVFNfQkNTX01BU0spICE9IEVYVFNUU19CQ1NfRlJFRSkpewogCQlEQkcoIiVkOiBpaWNfeGZlciwgYnVzIGlzIG5vdCBmcmVlXG4iLCBkZXYtPmlkeCk7CiAKLQkJLyogVXN1YWxseSBpdCBtZWFucyBzb21ldGhpbmcgc2VyaW91cyBoYXMgaGFwcGVuZC4KKwkJLyogVXN1YWxseSBpdCBtZWFucyBzb21ldGhpbmcgc2VyaW91cyBoYXMgaGFwcGVuZWQuCiAJCSAqIFdlICpjYW5ub3QqIGhhdmUgdW5maW5pc2hlZCBwcmV2aW91cyB0cmFuc2ZlcgogCQkgKiBzbyBpdCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIHRvIHRyeSB0byBzdG9wIGl0LgogCQkgKiBQcm9iYWJseSB3ZSB3ZXJlIG5vdCBhYmxlIHRvIHJlY292ZXIgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW50ZWwtbWlkLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWludGVsLW1pZC5jCmluZGV4IGM3MTQ5MjcuLmU4MjhhYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW50ZWwtbWlkLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbnRlbC1taWQuYwpAQCAtMTcwLDggKzE3MCw4IEBACiAvKiBSYXcgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBJQ19SQVdfSU5UUl9TVEFUCTB4MzQJCS8qIFJlYWQgT25seSAqLwogI2RlZmluZSBHRU5fQ0FMTAkJKDEgPDwgMTEpCS8qIEdlbmVyYWwgY2FsbCAqLwotI2RlZmluZSBTVEFSVF9ERVQJCSgxIDw8IDEwKQkvKiAoUkUpU1RBUlQgb2NjdXJlZCAqLwotI2RlZmluZSBTVE9QX0RFVAkJKDEgPDwgOSkJLyogU1RPUCBvY2N1cmVkICovCisjZGVmaW5lIFNUQVJUX0RFVAkJKDEgPDwgMTApCS8qIChSRSlTVEFSVCBvY2N1cnJlZCAqLworI2RlZmluZSBTVE9QX0RFVAkJKDEgPDwgOSkJLyogU1RPUCBvY2N1cnJlZCAqLwogI2RlZmluZSBBQ1RJVklUWQkJKDEgPDwgOCkJLyogQnVzIGJ1c3kgKi8KICNkZWZpbmUgUlhfRE9ORQkJCSgxIDw8IDcpCS8qIE5vdCB1c2VkIGluIE1hc3RlciBtb2RlICovCiAjZGVmaW5lCVRYX0FCUlQJCQkoMSA8PCA2KQkvKiBUcmFuc21pdCBBYm9ydCAqLwpAQCAtMzc1LDcgKzM3NSw3IEBACiAgKiBJMkMgc2hvdWxkIGJlIGRpc2FibGVkIHByaW9yIHRvIG90aGVyIHJlZ2lzdGVyIG9wZXJhdGlvbi4gSWYgZmFpbGVkLCBhbgogICogZXJybm8gaXMgcmV0dXJuZWQuIE1hc2sgYW5kIENsZWFyIGFsbCBpbnRlcnJwdHMsIHRoaXMgc2hvdWxkIGJlIGRvbmUgYXQKICAqIGZpcnN0LiAgU2V0IGNvbW1vbiByZWdpc3RlcnMgd2hpY2ggd2lsbCBub3QgYmUgbW9kaWZpZWQgZHVyaW5nIG5vcm1hbAotICogdHJhbnNmZXJzLCBpbmNsdWRpbmc6IGNvbnRyb2xsIHJlZ2lzdGVyLCBGSUZPIHRocmVzaG9sZCBhbmQgY2xvY2sgZnJlcS4KKyAqIHRyYW5zZmVycywgaW5jbHVkaW5nOiBjb250cm9sIHJlZ2lzdGVyLCBGSUZPIHRocmVzaG9sZCBhbmQgY2xvY2sgZnJlcS4KICAqIENoZWNrIEFQQiBkYXRhIHdpZHRoIGF0IGxhc3QuCiAgKi8KIHN0YXRpYyBpbnQgaW50ZWxfbWlkX2kyY19od2luaXQoc3RydWN0IGludGVsX21pZF9pMmNfcHJpdmF0ZSAqaTJjKQpAQCAtNDU1LDcgKzQ1NSw3IEBACiAgKgogICogQnkgcmVhZGluZyByZWdpc3RlciBJQ19UWF9BQlJUX1NPVVJDRSwgdmFyaW91cyB0cmFuc2ZlciBlcnJvcnMgY2FuIGJlCiAgKiBkaXN0aW5ndXNoZWQuIEF0IHByZXNlbnQsIG5vIGNpcmN1bXN0YW5jZXMgaGF2ZSBiZWVuIGZvdW5kIG91dCB0aGF0Ci0gKiBtdWx0aXBsZSBlcnJvcnMgd291bGQgYmUgb2NjdXJlZCBzaW11dGFuZW91c2x5LCBzbyB3ZSBzaW1wbHkgdXNlIHRoZQorICogbXVsdGlwbGUgZXJyb3JzIHdvdWxkIGJlIG9jY3VycmVkIHNpbXV0YW5lb3VzbHksIHNvIHdlIHNpbXBseSB1c2UgdGhlCiAgKiByZWdpc3RlciB2YWx1ZSBkaXJlY3RseS4KICAqCiAgKiBBdCBsYXN0IHRoZSBlcnJvciBiaXRzIGFyZSBjbGVhcmVkLiAoTm90ZSBjbGVhciBBQlJUX1NCWVRFX05PUlNUUlQgYml0IG5lZWQKQEAgLTQ2OSw3ICs0NjksNyBAQAogCiAJLyogU2luZ2xlIHRyYW5zZmVyIGVycm9yIGNoZWNrOgogCSAqIEFjY29yZGluZyB0byBkYXRhYm9vaywgVFgvUlggRklGT3Mgd291bGQgYmUgZmx1c2hlZCB3aGVuCi0JICogdGhlIGFib3J0IGludGVycnVwdCBvY2N1cmVkLgorCSAqIHRoZSBhYm9ydCBpbnRlcnJ1cHQgb2NjdXJyZWQuCiAJICovCiAJaWYgKGFib3J0ICYgQUJSVF9NQVNURVJfRElTKQogCQlkZXZfZXJyKCZhZGFwLT5kZXYsCkBAIC01NjksNyArNTY5LDcgQEAKICAqIFJldHVybiBWYWx1ZXM6CiAgKiAwCWlmIHRoZSByZWFkIHRyYW5zZmVyIHN1Y2NlZWRzCiAgKiAtRVRJTUVET1VUCWlmIHdlIGNhbm5vdCByZWFkIHRoZSAicmF3IiBpbnRlcnJ1cHQgcmVnaXN0ZXIKLSAqIC1FSU5WQUwJaWYgYSB0cmFuc2ZlciBhYm9ydCBvY2N1cmVkCisgKiAtRUlOVkFMCWlmIGEgdHJhbnNmZXIgYWJvcnQgb2NjdXJyZWQKICAqCiAgKiBGb3IgZXZlcnkgYnl0ZSwgYSAiV1JJVEUiIGNvbW1hbmQgd2lsbCBiZSBsb2FkZWQgaW50byBJQ19EQVRBX0NNRCBwcmlvciB0bwogICogZGF0YSB0cmFuc2Zlci4gVGhlIGFjdHVhbCAid3JpdGUiIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZQpAQCAtNjk3LDcgKzY5Nyw3IEBACiAgKiBAbnVtOiBudW1iZXIgb2YgaTJjX21zZwogICoKICAqIFJldHVybiBWYWx1ZXM6Ci0gKiArCQludW1iZXIgb2YgbWVzc2FnZXMgdHJhbnNmZXJlZAorICogKwkJbnVtYmVyIG9mIG1lc3NhZ2VzIHRyYW5zZmVycmVkCiAgKiAtRVRJTUVET1VUCUlmIGNhbm5vdCBkaXNhYmxlIEkyQyBjb250cm9sbGVyIG9yIHJlYWQgSUNfU1RBVFVTCiAgKiAtRUlOVkFMCUlmIHRoZSBhZGRyZXNzIGluIGkyY19tc2cgaXMgaW52YWxpZAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNjaC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKaW5kZXggZGRjMjU4ZS4uMDY4MmY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogICogVGhpcyBpcyB0aGUgbWFpbiBhY2Nlc3MgZW50cnkgZm9yIGkyYy1zY2ggYWNjZXNzCiAgKiBhZGFwIGlzIGkyY19hZGFwdGVyIHBvaW50ZXIsIGFkZHIgaXMgdGhlIGkyYyBkZXZpY2UgYnVzIGFkZHJlc3MsIHJlYWRfd3JpdGUKICAqICgwIGZvciByZWFkIGFuZCAxIGZvciB3cml0ZSksIHNpemUgaXMgaTJjIHRyYW5zYWN0aW9uIHR5cGUgYW5kIGRhdGEgaXMgdGhlCi0gKiB1bmlvbiBvZiB0cmFuc2FjdGlvbiBmb3IgZGF0YSB0byBiZSB0cmFuc2ZlcmVkIG9yIGRhdGEgcmVhZCBmcm9tIGJ1cy4KKyAqIHVuaW9uIG9mIHRyYW5zYWN0aW9uIGZvciBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIG9yIGRhdGEgcmVhZCBmcm9tIGJ1cy4KICAqIHJldHVybiAwIGZvciBzdWNjZXNzIGFuZCBvdGhlcnMgZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBzMzIgc2NoX2FjY2VzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHUxNiBhZGRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1teHMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXhzLmMKaW5kZXggY2FmOTZkYy4uN2U3OGY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1teHMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW14cy5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkgKiBXZSBoYXZlIHRvIGNvcHkgdGhlIHNsYXZlIGFkZHJlc3MgKHU4KSBhbmQgYnVmZmVyIChhcmJpdHJhcnkgbnVtYmVyCiAJICogb2YgdTgpIGludG8gdGhlIGRhdGEgcmVnaXN0ZXIgKHUzMikuIFRvIGFjaGlldmUgdGhhdCwgdGhlIHU4IGFyZSBwdXQKIAkgKiBpbnRvIHRoZSBNU0JzIG9mICdkYXRhJyB3aGljaCBpcyB0aGVuIHNoaWZ0ZWQgZm9yIHRoZSBuZXh0IHU4LiBXaGVuCi0JICogYXByb3ByaWF0ZSwgJ2RhdGEnIGlzIHdyaXR0ZW4gdG8gTVhTX0kyQ19EQVRBLiBTbywgdGhlIGZpcnN0IHUzMgorCSAqIGFwcHJvcHJpYXRlLCAnZGF0YScgaXMgd3JpdHRlbiB0byBNWFNfSTJDX0RBVEEuIFNvLCB0aGUgZmlyc3QgdTMyCiAJICogbG9va3MgbGlrZSB0aGlzOgogCSAqCiAJICogIDMgICAgICAgICAgMiAgICAgICAgICAxICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbm9tYWRpay5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMKaW5kZXggNTk0ZWQ1MC4uZTEwZTVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMKQEAgLTEyNiw5ICsxMjYsOSBAQAogLyoqCiAgKiBzdHJ1Y3QgaTJjX25ta19jbGllbnQgLSBjbGllbnQgc3BlY2lmaWMgZGF0YQogICogQHNsYXZlX2FkcjogNy1iaXQgc2xhdmUgYWRkcmVzcwotICogQGNvdW50OiBuby4gYnl0ZXMgdG8gYmUgdHJhbnNmZXJlZAorICogQGNvdW50OiBuby4gYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQKICAqIEBidWZmZXI6IGNsaWVudCBkYXRhIGJ1ZmZlcgotICogQHhmZXJfYnl0ZXM6IGJ5dGVzIHRyYW5zZmVyZWQgdGlsbCBub3cKKyAqIEB4ZmVyX2J5dGVzOiBieXRlcyB0cmFuc2ZlcnJlZCB0aWxsIG5vdwogICogQG9wZXJhdGlvbjogY3VycmVudCBJMkMgb3BlcmF0aW9uCiAgKi8KIHN0cnVjdCBpMmNfbm1rX2NsaWVudCB7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAkgKiBzbHN1IGRlZmluZXMgdGhlIGRhdGEgc2V0dXAgdGltZSBhZnRlciBTQ0wgY2xvY2sKIAkgKiBzdHJldGNoaW5nIGluIHRlcm1zIG9mIGkyYyBjbGsgY3ljbGVzLiBUaGUKIAkgKiBuZWVkZWQgc2V0dXAgdGltZSBmb3IgdGhlIHRocmVlIG1vZGVzIGFyZSAyNTBucywKLQkgKiAxMDBucywgMTBucyByZXBlY3RpdmVseSB0aHVzIGxlYWRpbmcgdG8gdGhlIHZhbHVlcworCSAqIDEwMG5zLCAxMG5zIHJlc3BlY3RpdmVseSB0aHVzIGxlYWRpbmcgdG8gdGhlIHZhbHVlcwogCSAqIG9mIDE0LCA2LCAyIGZvciBhIDQ4IE1IeiBpMmMgY2xrLgogCSAqLwogCXdyaXRlbChkZXYtPmNmZy5zbHN1IDw8IDE2LCBkZXYtPnZpcnRiYXNlICsgSTJDX1NDUik7CkBAIC0zNjQsNyArMzY0LDcgQEAKIAkvKgogCSAqIHNldCB0aGUgc3BlZWQgbW9kZS4gQ3VycmVudGx5IHdlIHN1cHBvcnQKIAkgKiBvbmx5IHN0YW5kYXJkIGFuZCBmYXN0IG1vZGUgb2Ygb3BlcmF0aW9uCi0JICogVE9ETyAtIHN1cHBvcnQgZm9yIGZhc3QgbW9kZSBwbHVzICh1cHRvIDFNYi9zKQorCSAqIFRPRE8gLSBzdXBwb3J0IGZvciBmYXN0IG1vZGUgcGx1cyAodXAgdG8gMU1iL3MpCiAJICogYW5kIGhpZ2ggc3BlZWQgKHVwIHRvIDMuNCBNYi9zKQogCSAqLwogCWlmIChkZXYtPmNmZy5zbSA+IEkyQ19GUkVRX01PREVfRkFTVCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwppbmRleCAwZWIxNTE1Li4yZGJiYTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCiAgKiBpMmMtcGFycG9ydC5jIEkyQyBidXMgb3ZlciBwYXJhbGxlbCBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKLSAgIENvcHlyaWdodCAoQykgMjAwMy0yMDEwIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTEgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgICAKICAgIEJhc2VkIG9uIG9sZGVyIGkyYy1waGlsaXBzLXBhci5jIGRyaXZlcgogICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgU2ltb24gRy4gVm9nbApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1zbWJ1cy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJpMmMtcGFycG9ydC5oIgogCiAvKiAtLS0tLSBEZXZpY2UgbGlzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQzLDEwICs0NSwxMSBAQAogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBhbGdvX2RhdGE7CiAJc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCBhbGVydF9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICphcmE7Ci0Jc3RydWN0IGkyY19wYXIgKm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfcGFyICphZGFwdGVyX2xpc3Q7CitzdGF0aWMgTElTVF9IRUFEKGFkYXB0ZXJfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGFkYXB0ZXJfbGlzdF9sb2NrKTsKIAogLyogLS0tLS0gTG93LWxldmVsIHBhcmFsbGVsIHBvcnQgYWNjZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTIyOCw4ICsyMzEsOSBAQAogCX0KIAogCS8qIEFkZCB0aGUgbmV3IGFkYXB0ZXIgdG8gdGhlIGxpc3QgKi8KLQlhZGFwdGVyLT5uZXh0ID0gYWRhcHRlcl9saXN0OwotCWFkYXB0ZXJfbGlzdCA9IGFkYXB0ZXI7CisJbXV0ZXhfbG9jaygmYWRhcHRlcl9saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmFkYXB0ZXItPm5vZGUsICZhZGFwdGVyX2xpc3QpOworCW11dGV4X3VubG9jaygmYWRhcHRlcl9saXN0X2xvY2spOwogICAgICAgICByZXR1cm47CiAKIEVSUk9SMToKQEAgLTI0MSwxMSArMjQ1LDExIEBACiAKIHN0YXRpYyB2b2lkIGkyY19wYXJwb3J0X2RldGFjaCAoc3RydWN0IHBhcnBvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGkyY19wYXIgKmFkYXB0ZXIsICpwcmV2OworCXN0cnVjdCBpMmNfcGFyICphZGFwdGVyLCAqX247CiAKIAkvKiBXYWxrIHRoZSBsaXN0ICovCi0JZm9yIChwcmV2ID0gTlVMTCwgYWRhcHRlciA9IGFkYXB0ZXJfbGlzdDsgYWRhcHRlcjsKLQkgICAgIHByZXYgPSBhZGFwdGVyLCBhZGFwdGVyID0gYWRhcHRlci0+bmV4dCkgeworCW11dGV4X2xvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWRhcHRlciwgX24sICZhZGFwdGVyX2xpc3QsIG5vZGUpIHsKIAkJaWYgKGFkYXB0ZXItPnBkZXYtPnBvcnQgPT0gcG9ydCkgewogCQkJaWYgKGFkYXB0ZXItPmFyYSkgewogCQkJCXBhcnBvcnRfZGlzYWJsZV9pcnEocG9ydCk7CkBAIC0yNTksMTQgKzI2MywxMSBAQAogCQkJCQogCQkJcGFycG9ydF9yZWxlYXNlKGFkYXB0ZXItPnBkZXYpOwogCQkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShhZGFwdGVyLT5wZGV2KTsKLQkJCWlmIChwcmV2KQotCQkJCXByZXYtPm5leHQgPSBhZGFwdGVyLT5uZXh0OwotCQkJZWxzZQotCQkJCWFkYXB0ZXJfbGlzdCA9IGFkYXB0ZXItPm5leHQ7CisJCQlsaXN0X2RlbCgmYWRhcHRlci0+bm9kZSk7CiAJCQlrZnJlZShhZGFwdGVyKTsKLQkJCXJldHVybjsKIAkJfQogCX0KKwltdXRleF91bmxvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwYXJwb3J0X2RyaXZlciBpMmNfcGFycG9ydF9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwppbmRleCBhOTdlM2ZlLi4wNGJlOWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJamlmZmllcywgZXhwaXJlcyk7CiAKIAl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBleHBpcmVzOwotCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpJmFsZ19kYXRhOworCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWxnX2RhdGE7CiAKIAlhZGRfdGltZXIodGltZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zNjAwMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zNjAwMC5jCmluZGV4IGNhZGMwMjEuLmNiNWQwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczYwMDAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXM2MDAwLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCXJjID0gcmVxdWVzdF9pcnEoaWZhY2UtPmlycSwgczZpMmNfaW50ZXJydXB0X2VudHJ5LAogCQkJIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGlmYWNlKTsKIAlpZiAocmMpIHsKLQkJZGV2X2VycigmcF9hZGFwLT5kZXYsICJzNmkyYzogY2FudCBnZXQgSVJRICVkXG4iLCBpZmFjZS0+aXJxKTsKKwkJZGV2X2VycigmcF9hZGFwLT5kZXYsICJzNmkyYzogY2FuJ3QgZ2V0IElSUSAlZFxuIiwgaWZhY2UtPmlycSk7CiAJCWdvdG8gZXJyX2Nsa19kaXM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYwppbmRleCAyNjYxMzVkLi45OTg3OTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXUzMiB2YWw7CiAJaW50IGkgPSAwOwogCi0JLyogTG9jYXRlIHRoZSBhcHJvcHJpYXRlIGNsb2NrIHNldHRpbmcgKi8KKwkvKiBMb2NhdGUgdGhlIGFwcHJvcHJpYXRlIGNsb2NrIHNldHRpbmcgKi8KIAl3aGlsZSAoaSA8IEFSUkFZX1NJWkUoc3R1MzAwX2Nsa3RhYmxlKSAtIDEgJiYKIAkgICAgICAgc3R1MzAwX2Nsa3RhYmxlW2ldLnJhdGUgPCBjbGtyYXRlKQogCQlpKys7CkBAIC02NDQsNyArNjQ0LDcgQEAKIAlyZXQgPSBzdHUzMDBfYXdhaXRfZXZlbnQoZGV2LCBTVFUzMDBfRVZFTlRfNik7CiAKIAkvKgotCSAqIENsZWFyIGFueSBwZW5kaW5nIEVWRU5UIDYgbm8gbWF0dGVyIHdoYXQgaGFwcGVuZCBkdXJpbmcKKwkgKiBDbGVhciBhbnkgcGVuZGluZyBFVkVOVCA2IG5vIG1hdHRlciB3aGF0IGhhcHBlbmVkIGR1cmluZwogCSAqIGF3YWl0X2V2ZW50LgogCSAqLwogCXZhbCA9IHN0dTMwMF9yOChkZXYtPnZpcnRiYXNlICsgSTJDX0NSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGVncmEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGVncmEuYwppbmRleCAzOTIxZjY2Li5iNGFiMzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRlZ3JhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10ZWdyYS5jCkBAIC0zODYsNyArMzg2LDcgQEAKIAkJZHZjX3dyaXRlbChpMmNfZGV2LCBEVkNfU1RBVFVTX0kyQ19ET05FX0lOVFIsIERWQ19TVEFUVVMpOwogCXJldHVybiBJUlFfSEFORExFRDsKIGVycjoKLQkvKiBBbiBlcnJvciBvY2N1cmVkLCBtYXNrIGFsbCBpbnRlcnJ1cHRzICovCisJLyogQW4gZXJyb3Igb2NjdXJyZWQsIG1hc2sgYWxsIGludGVycnVwdHMgKi8KIAl0ZWdyYV9pMmNfbWFza19pcnEoaTJjX2RldiwgSTJDX0lOVF9OT19BQ0sgfCBJMkNfSU5UX0FSQklUUkFUSU9OX0xPU1QgfAogCQlJMkNfSU5UX1BBQ0tFVF9YRkVSX0NPTVBMRVRFIHwgSTJDX0lOVF9UWF9GSUZPX0RBVEFfUkVRIHwKIAkJSTJDX0lOVF9SWF9GSUZPX0RBVEFfUkVRKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14aWljLmMKaW5kZXggOWZiZDdlNi4uZTlkNWZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14aWljLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14aWljLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqIHRvIHRoZSBhdXRvbW90aXZlIGRldmVsb3BtZW50IGJvYXJkIFJ1c3NlbGx2aWxsZS4gVGhlIGNvcHlyaWdodCBob2xkZXIKICAqIGFzIHNlZW4gaW4gdGhlIGhlYWRlciBpcyBJbnRlbCBjb3Jwb3JhdGlvbi4KICAqIE1vY2VhbiBMYWJvcmF0b3JpZXMgZm9ya2VkIG9mZiB0aGUgR05VL0xpbnV4IHBsYXRmb3JtIHdvcmsgaW50byBhCi0gKiBzZXBhcmF0ZSBjb21wYW55IGNhbGxlZCBQZWxhZ2ljb3JlIEFCLCB3aGljaCBjb21taXRlZCB0aGUgY29kZSB0byB0aGUKKyAqIHNlcGFyYXRlIGNvbXBhbnkgY2FsbGVkIFBlbGFnaWNvcmUgQUIsIHdoaWNoIGNvbW1pdHRlZCB0aGUgY29kZSB0byB0aGUKICAqIGtlcm5lbC4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCBlNWY3NmEwLi45YTU4OTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogCiAKIC8qIFRoaXMgaXMgYSBwZXJtaXNzaXZlIGFkZHJlc3MgdmFsaWRpdHkgY2hlY2ssIEkyQyBhZGRyZXNzIG1hcCBjb25zdHJhaW50cwotICogYXJlIHB1cnBvc2VkbHkgbm90IGVuZm9yY2VkLCBleGNlcHQgZm9yIHRoZSBnZW5lcmFsIGNhbGwgYWRkcmVzcy4gKi8KKyAqIGFyZSBwdXJwb3NlbHkgbm90IGVuZm9yY2VkLCBleGNlcHQgZm9yIHRoZSBnZW5lcmFsIGNhbGwgYWRkcmVzcy4gKi8KIHN0YXRpYyBpbnQgaTJjX2NoZWNrX2NsaWVudF9hZGRyX3ZhbGlkaXR5KGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaWYgKGNsaWVudC0+ZmxhZ3MgJiBJMkNfQ0xJRU5UX1RFTikgewpAQCAtNzk3LDcgKzc5Nyw4IEBACiAKIAkvKiBMZXQgbGVnYWN5IGRyaXZlcnMgc2NhbiB0aGlzIGJ1cyBmb3IgbWF0Y2hpbmcgZGV2aWNlcyAqLwogCWlmIChkcml2ZXItPmF0dGFjaF9hZGFwdGVyKSB7Ci0JCWRldl93YXJuKCZhZGFwLT5kZXYsICJhdHRhY2hfYWRhcHRlciBtZXRob2QgaXMgZGVwcmVjYXRlZFxuIik7CisJCWRldl93YXJuKCZhZGFwLT5kZXYsICIlczogYXR0YWNoX2FkYXB0ZXIgbWV0aG9kIGlzIGRlcHJlY2F0ZWRcbiIsCisJCQkgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJCWRldl93YXJuKCZhZGFwLT5kZXYsICJQbGVhc2UgdXNlIGFub3RoZXIgd2F5IHRvIGluc3RhbnRpYXRlICIKIAkJCSAieW91ciBpMmNfY2xpZW50XG4iKTsKIAkJLyogV2UgaWdub3JlIHRoZSByZXR1cm4gY29kZTsgaWYgaXQgZmFpbHMsIHRvbyBiYWQgKi8KQEAgLTk4NCw3ICs5ODUsOCBAQAogCiAJaWYgKCFkcml2ZXItPmRldGFjaF9hZGFwdGVyKQogCQlyZXR1cm4gMDsKLQlkZXZfd2FybigmYWRhcHRlci0+ZGV2LCAiZGV0YWNoX2FkYXB0ZXIgbWV0aG9kIGlzIGRlcHJlY2F0ZWRcbiIpOworCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICIlczogZGV0YWNoX2FkYXB0ZXIgbWV0aG9kIGlzIGRlcHJlY2F0ZWRcbiIsCisJCSBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXMgPSBkcml2ZXItPmRldGFjaF9hZGFwdGVyKGFkYXB0ZXIpOwogCWlmIChyZXMpCiAJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgImRldGFjaF9hZGFwdGVyIGZhaWxlZCAoJWQpICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9jeTgyYzY5My5jCmluZGV4IDkzODNmNjcuLjNiZTYwZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMKKysrIGIvZHJpdmVycy9pZGUvY3k4MmM2OTMuYwpAQCAtNjcsNyArNjcsNyBAQAogCiAJLyoKIAkgKiBub3RlOiBiZWxvdyB3ZSBzZXQgdGhlIHZhbHVlIGZvciBCdXMgTWFzdGVyIElERSBUaW1lT3V0IFJlZ2lzdGVyCi0JICogSSdtIG5vdCBhYnNvbHV0bHkgc3VyZSB3aGF0IHRoaXMgZG9lcywgYnV0IGl0IHNvbHZlZCBteSBwcm9ibGVtCisJICogSSdtIG5vdCBhYnNvbHV0ZWx5IHN1cmUgd2hhdCB0aGlzIGRvZXMsIGJ1dCBpdCBzb2x2ZWQgbXkgcHJvYmxlbQogCSAqIHdpdGggSURFIERNQSBhbmQgc291bmQsIHNvIEkgbm93IGNhbiBwbGF5IHNvdW5kIGFuZCB3b3JrIHdpdGgKIAkgKiBteSBJREUgZHJpdmVyIGF0IHRoZSBzYW1lIHRpbWUgOi0pCiAJICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggZmQxZTExNy4uYTVlYzVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTE3ODIsNyArMTc4Miw2IEBACiAJaWRlX2NkX3JlYWRfdG9jKGRyaXZlLCAmc2Vuc2UpOwogCWctPmZvcHMgPSAmaWRlY2Rfb3BzOwogCWctPmZsYWdzIHw9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKLQlnLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlhZGRfZGlzayhnKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwppbmRleCAyYTZiYzUwLi4wMmNhYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwpAQCAtNzksNiArNzksMTIgQEAKIAlyZXR1cm4gQ0RTX0RSSVZFX05PVF9SRUFEWTsKIH0KIAorLyoKKyAqIGlkZS1jZCBhbHdheXMgZ2VuZXJhdGVzIG1lZGlhIGNoYW5nZWQgZXZlbnQgaWYgbWVkaWEgaXMgbWlzc2luZywgd2hpY2gKKyAqIG1ha2VzIGl0IGltcG9zc2libGUgdG8gdXNlIGZvciBwcm9wZXIgZXZlbnQgcmVwb3J0aW5nLCBzbyBkaXNrLT5ldmVudHMKKyAqIGlzIGNsZWFyZWQgdG8gMCBhbmQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gdHJpZ2dlcgorICogcmV2YWxpZGF0aW9uIGFuZCBuZXZlciBwcm9wYWdhdGVkIHRvIHVzZXJsYW5kLgorICovCiB1bnNpZ25lZCBpbnQgaWRlX2Nkcm9tX2NoZWNrX2V2ZW50c19yZWFsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQkJCQkgdW5zaWduZWQgaW50IGNsZWFyaW5nLCBpbnQgc2xvdF9ucikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCA1NDA2YjZlLi41YTcwMmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKHN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSwKIAkJCQkgICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7Ci0JLyogc3VwcmVzcyBlcnJvciBtZXNzYWdlcyByZXN1bHRpbmcgZnJvbSBNZWRpdW0gbm90IHByZXNlbnQgKi8KKwkvKiBzdXBwcmVzcyBlcnJvciBtZXNzYWdlcyByZXN1bHRpbmcgZnJvbSBNZWRpdW0gbm90IHByZXNlbnQgKi8KIAlpZiAoZmxvcHB5LT5zZW5zZV9rZXkgPT0gMHgwMiAmJgogCSAgICBmbG9wcHktPmFzYyAgICAgICA9PSAweDNhICYmCiAJICAgIGZsb3BweS0+YXNjcSAgICAgID09IDB4MDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCmluZGV4IGM0ZmZkNDguLjcwZWE4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCkBAIC0yOTgsNiArMjk4LDEyIEBACiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHRvIGZvcmNlIHJldmFsaWRhdGlvbiBvbiB0aGUgZmlyc3Qgb3BlbiBvbgorCSAqIHJlbW92ZWFibGUgZGV2aWNlcywgYW5kIG5ldmVyIGdldHMgcmVwb3J0ZWQgdG8gdXNlcmxhbmQgYXMKKwkgKiBnZW5oZC0+ZXZlbnRzIGlzIDAuICBUaGlzIGlzIGludGVuZGVkIGFzIHJlbW92ZWFibGUgaWRlIGRpc2sKKwkgKiBjYW4ndCByZWFsbHkgZGV0ZWN0IE1FRElBX0NIQU5HRSBldmVudHMuCisJICovCiAJcmV0ID0gZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19NRURJQV9DSEFOR0VEOwogCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19NRURJQV9DSEFOR0VEOwogCkBAIC00MTMsNyArNDE5LDYgQEAKIAlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpCiAJCWctPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOwogCWctPmZvcHMgPSAmaWRlX2dkX29wczsKLQlnLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlhZGRfZGlzayhnKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCAwZTQwNmQ3My4uMTc3ZGI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTQzMCw2ICs0MzAsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faWRlX3JlcXVldWVfYW5kX3BsdWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpZiAocnEpCisJCWJsa19yZXF1ZXVlX3JlcXVlc3QocSwgcnEpOworCWlmIChycSB8fCBibGtfcGVla19yZXF1ZXN0KHEpKSB7CisJCS8qIFVzZSAzbXMgYXMgdGhhdCB3YXMgdGhlIG9sZCBwbHVnIGRlbGF5ICovCisJCWJsa19kZWxheV9xdWV1ZShxLCAzKTsKKwl9Cit9CisKK3ZvaWQgaWRlX3JlcXVldWVfYW5kX3BsdWcoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlfX2lkZV9yZXF1ZXVlX2FuZF9wbHVnKHEsIHJxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKK30KKwogLyoKICAqIElzc3VlIGEgbmV3IHJlcXVlc3QgdG8gYSBkZXZpY2UuCiAgKi8KQEAgLTU1MCwyOCArNTcwLDcgQEAKIAlpZGVfdW5sb2NrX2hvc3QoaG9zdCk7CiBwbHVnX2RldmljZV8yOgogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0KLQlpZiAocnEpIHsKLQkJYmxrX3JlcXVldWVfcmVxdWVzdChxLCBycSk7Ci0JCWJsa19kZWxheV9xdWV1ZShxLCBxdWV1ZV9ydW5fbXMpOwotCX0KLX0KLQotdm9pZCBpZGVfcmVxdWV1ZV9hbmRfcGx1ZyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHJxKQotCQlibGtfcmVxdWV1ZV9yZXF1ZXN0KHEsIHJxKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JLyogVXNlIDNtcyBhcyB0aGF0IHdhcyB0aGUgb2xkIHBsdWcgZGVsYXkgKi8KLQlpZiAocnEpCi0JCWJsa19kZWxheV9xdWV1ZShxLCAzKTsKKwlfX2lkZV9yZXF1ZXVlX2FuZF9wbHVnKHEsIHJxKTsKIH0KIAogc3RhdGljIGludCBkcml2ZV9pc19yZWFkeShpZGVfZHJpdmVfdCAqZHJpdmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDM0Yjk4NzIuLjYwMGM4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAl1OCBzdGF0OwogCiAJLyoKLQkgKiBMYXN0IHNlY3RvciB3YXMgdHJhbnNmZXJlZCwgd2FpdCB1bnRpbCBkZXZpY2UgaXMgcmVhZHkuICBUaGlzIGNhbgorCSAqIExhc3Qgc2VjdG9yIHdhcyB0cmFuc2ZlcnJlZCwgd2FpdCB1bnRpbCBkZXZpY2UgaXMgcmVhZHkuICBUaGlzIGNhbgogCSAqIHRha2UgdXAgdG8gNiBtcyBvbiBzb21lIEFUQVBJIGRldmljZXMsIHNvIHdlIHdpbGwgd2FpdCBtYXggMTAgbXMuCiAJICovCiAJZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8IDEwMDA7IHJldHJpZXMrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGlpeC5jIGIvZHJpdmVycy9pZGUvcGlpeC5jCmluZGV4IDFiZGNhNDkuLmI1OWQwNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9waWl4LmMKQEAgLTgsOCArOCw4IEBACiAgKgogICogRG9jdW1lbnRhdGlvbjoKICAqCi0gKglQdWJsaWNhbGx5IGF2YWlsYWJsZSBmcm9tIEludGVsIHdlYiBzaXRlLiBFcnJhdGEgZG9jdW1lbnRhdGlvbgotICogaXMgYWxzbyBwdWJsaWNhbGx5IGF2YWlsYWJsZS4gQXMgYW4gYWlkZSB0byBhbnlvbmUgaGFja2luZyBvbiB0aGlzCisgKglQdWJsaWNseSBhdmFpbGFibGUgZnJvbSBJbnRlbCB3ZWIgc2l0ZS4gRXJyYXRhIGRvY3VtZW50YXRpb24KKyAqIGlzIGFsc28gcHVibGljbHkgYXZhaWxhYmxlLiBBcyBhbiBhaWRlIHRvIGFueW9uZSBoYWNraW5nIG9uIHRoaXMKICAqIGRyaXZlciB0aGUgbGlzdCBvZiBlcnJhdGEgdGhhdCBhcmUgcmVsZXZhbnQgaXMgYmVsb3cuZ29pbmcgYmFjayB0bwogICogUElJWDQuIE9sZGVyIGRldmljZSBkb2N1bWVudGF0aW9uIGlzIG5vdyBhIGJpdCB0cmlja3kgdG8gZmluZC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKaW5kZXggZGI3ZjRlNy4uNGEwMDIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwpAQCAtNTMsNyArNTMsNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJzaXM1NTEzIgogCi0vKiByZWdpc3RlcnMgbGF5b3V0IGFuZCBpbml0IHZhbHVlcyBhcmUgY2hpcHNldCBmYW1pbHkgZGVwZW5kYW50ICovCisvKiByZWdpc3RlcnMgbGF5b3V0IGFuZCBpbml0IHZhbHVlcyBhcmUgY2hpcHNldCBmYW1pbHkgZGVwZW5kZW50ICovCiAKICNkZWZpbmUgQVRBXzE2CQkweDAxCiAjZGVmaW5lIEFUQV8zMwkJMHgwMgpAQCAtNDA2LDcgKzQwNiw3IEBACiAJCQkJCXBjaV9uYW1lKGRldikpOwogCQkJCWNoaXBzZXRfZmFtaWx5ID0gQVRBXzEzMzsKIAotCQkJCS8qIENoZWNrIGZvciA1NTEzIGNvbXBhYmlsaXR5IG1hcHBpbmcKKwkJCQkvKiBDaGVjayBmb3IgNTUxMyBjb21wYXRpYmlsaXR5IG1hcHBpbmcKIAkJCQkgKiBXZSBtdXN0IHVzZSB0aGlzLCBlbHNlIHRoZSBwb3J0IGVuYWJsZWQgY29kZSB3aWxsIGZhaWwsCiAJCQkJICogYXMgaXQgZXhwZWN0cyB0aGUgZW5hYmxlYml0cyBhdCAweDRhLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdHJpZmxleC5jIGIvZHJpdmVycy9pZGUvdHJpZmxleC5jCmluZGV4IDc5NTM0NDcuLmU1M2ExYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3RyaWZsZXguYworKysgYi9kcml2ZXJzL2lkZS90cmlmbGV4LmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqIExvb3NlbHkgYmFzZWQgb24gdGhlIHBpaXggJiBzdndrcyBkcml2ZXJzLgogICoKICAqIERvY3VtZW50YXRpb246Ci0gKglOb3QgcHVibGljYWxseSBhdmFpbGFibGUuCisgKglOb3QgcHVibGljbHkgYXZhaWxhYmxlLgogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMgYi9kcml2ZXJzL2lkZS92aWE4MmN4eHguYwppbmRleCBkMmEwOTk3Li5mNDZmNDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS92aWE4MmN4eHguYworKysgYi9kcml2ZXJzL2lkZS92aWE4MmN4eHguYwpAQCAtMTQsNyArMTQsNyBAQAogICoJQW5kcmUgSGVkcmljawogICoKICAqIERvY3VtZW50YXRpb246Ci0gKglPYnNvbGV0ZSBkZXZpY2UgZG9jdW1lbnRhdGlvbiBwdWJsaWNhbGx5IGF2YWlsYWJsZSBmcm9tIHZpYS5jb20udHcKKyAqCU9ic29sZXRlIGRldmljZSBkb2N1bWVudGF0aW9uIHB1YmxpY2x5IGF2YWlsYWJsZSBmcm9tIHZpYS5jb20udHcKICAqCUN1cnJlbnQgZGV2aWNlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIHVuZGVyIE5EQSBvbmx5CiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYwppbmRleCA2MmFmNzQyLi4yNGY5ZTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJaW50IHN0YXR1czsKIAogCS8qCi0JICogcmV0cmVpdmUgdGhlIG1lc3NhZ2UKKwkgKiByZXRyaWV2ZSB0aGUgbWVzc2FnZQogCSAqLwogCXdyID0gYzJfbXFfY29uc3VtZShtcSk7CiAJaWYgKCF3cikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMKaW5kZXggZDhmNGJiOC4uMGQ3YjZmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCkBAIC02MTIsNyArNjEyLDcgQEAKIAljMl91bmxvY2tfY3FzKHNlbmRfY3EsIHJlY3ZfY3EpOwogCiAJLyoKLQkgKiBEZXN0b3J5IHFwIGluIHRoZSBybmljLi4uCisJICogRGVzdHJveSBxcCBpbiB0aGUgcm5pYy4uLgogCSAqLwogCWRlc3Ryb3lfcXAoYzJkZXYsIHFwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3dyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfd3IuaAppbmRleCBjNjVmYmRkLi44ZDRiNGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfd3IuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfd3IuaApAQCAtMTMxLDcgKzEzMSw3IEBACiAJICogICAgICAgICAgQWxsIHRoZSBwcmVjZWRpbmcgSURzIGFyZSBmaXhlZCwgYW5kIG11c3Qgbm90IGNoYW5nZS4KIAkgKiAgICAgICAgICBZb3UgY2FuIGFkZCBuZXcgSURzLCBidXQgbXVzdCBub3QgcmVtb3ZlIG9yIHJlb3JkZXIKIAkgKiAgICAgICAgICBhbnkgSURzLiBJZiB5b3UgZG8sIFlPVSB3aWxsIHJ1aW4gYW55IGhvcGUgb2YKLQkgKiAgICAgICAgICBjb21wYXRhYmlsaXR5IGJldHdlZW4gdmVyc2lvbnMuCisJICogICAgICAgICAgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZlcnNpb25zLgogCSAqLwogCUNDV1JfTEFTVCwKIApAQCAtMjQyLDcgKzI0Miw3IEBACiAvKgogICogIHRvIGZpeCBidWcgMTgxNSB3ZSBkZWZpbmUgdGhlIG1heCBzaXplIGFsbG93YWJsZSBvZiB0aGUKICAqICB0ZXJtaW5hdGUgbWVzc2FnZSAocGVyIHRoZSBJRVRGIHNwZWMpLlJlZmVyIHRvIHRoZSBJRVRGCi0gKiAgcHJvdG9jYWwgc3BlY2lmaWNhdGlvbiwgc2VjdGlvbiAxMi4xLjYsIHBhZ2UgNjQpCisgKiAgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiwgc2VjdGlvbiAxMi4xLjYsIHBhZ2UgNjQpCiAgKiAgVGhlIG1lc3NhZ2UgaXMgcHJlZml4ZWQgYnkgMjAgdHlwZXMgb2YgRERQIGluZm8uCiAgKgogICogIFRoZW4gdGhlIG1lc3NhZ2UgaGFzIDYgYnl0ZXMgZm9yIHRoZSB0ZXJtaW5hdGUgY29udHJvbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCmluZGV4IDQ3ZGI0YmYuLjU4YzBlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTIzOTIsNyArMjM5Miw3IEBACiAJLyoKIAkgKiBjbGVhciBTZXJkZXNFbmFibGUgYW5kIHR1cm4gdGhlIGxlZHMgb2ZmOyBkbyB0aGlzIGhlcmUgYmVjYXVzZQogCSAqIHdlIGFyZSB1bmxvYWRpbmcsIHNvIGRvbid0IGNvdW50IG9uIGludGVycnVwdHMgdG8gbW92ZSBhbG9uZwotCSAqIFR1cm4gdGhlIExFRHMgb2ZmIGV4cGxpY3RseSBmb3IgdGhlIHNhbWUgcmVhc29uLgorCSAqIFR1cm4gdGhlIExFRHMgb2ZmIGV4cGxpY2l0bHkgZm9yIHRoZSBzYW1lIHJlYXNvbi4KIAkgKi8KIAlkZC0+aXBhdGhfZl9xdWlldF9zZXJkZXMoZGQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCmluZGV4IDZkNGIyOWMuLmVlNzlhMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC0xOTcyLDcgKzE5NzIsNyBAQAogCSAqIDAgdG8gMS4gIFNvIGZvciB0aG9zZSBjaGlwcywgd2UgdHVybiBpdCBvZmYgYW5kIHRoZW4gYmFjayBvbi4KIAkgKiBUaGlzIHdpbGwgKHZlcnkgYnJpZWZseSkgYWZmZWN0IGFueSBvdGhlciBvcGVuIHBvcnRzLCBidXQgdGhlCiAJICogZHVyYXRpb24gaXMgdmVyeSBzaG9ydCwgYW5kIHRoZXJlZm9yZSBpc24ndCBhbiBpc3N1ZS4gIFdlCi0JICogZXhwbGljdGx5IHNldCB0aGUgaW4tbWVtb3J5IHRhaWwgY29weSB0byAwIGJlZm9yZWhhbmQsIHNvIHdlCisJICogZXhwbGljaXRseSBzZXQgdGhlIGluLW1lbW9yeSB0YWlsIGNvcHkgdG8gMCBiZWZvcmVoYW5kLCBzbyB3ZQogCSAqIGRvbid0IGhhdmUgdG8gd2FpdCB0byBiZSBzdXJlIHRoZSBETUEgdXBkYXRlIGhhcyBoYXBwZW5lZAogCSAqIChjaGlwIHJlc2V0cyBoZWFkL3RhaWwgdG8gMCBvbiB0cmFuc2l0aW9uIHRvIGVuYWJsZSkuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKaW5kZXggZmVmMGY0Mi4uN2MxZWViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwpAQCAtMzM1LDcgKzMzNSw3IEBACiAgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQogICoKICAqIHNhbml0eSBjaGVjayBhdCBsZWFzdCBzb21lIG9mIHRoZSB2YWx1ZXMgYWZ0ZXIgcmVzZXQsIGFuZAotICogZW5zdXJlIG5vIHJlY2VpdmUgb3IgdHJhbnNtaXQgKGV4cGxpY3RseSwgaW4gY2FzZSByZXNldAorICogZW5zdXJlIG5vIHJlY2VpdmUgb3IgdHJhbnNtaXQgKGV4cGxpY2l0bHksIGluIGNhc2UgcmVzZXQKICAqIGZhaWxlZAogICovCiBzdGF0aWMgaW50IGluaXRfY2hpcF9yZXNldChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCmluZGV4IDc0MjA3MTUuLmU4YTJhOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCkBAIC04Niw3ICs4Niw3IEBACiAJfQogCiAJLyoKLQkgKiBBIEdSSCBpcyBleHBlY3RlZCB0byBwcmVjZWVkIHRoZSBkYXRhIGV2ZW4gaWYgbm90CisJICogQSBHUkggaXMgZXhwZWN0ZWQgdG8gcHJlY2VkZSB0aGUgZGF0YSBldmVuIGlmIG5vdAogCSAqIHByZXNlbnQgb24gdGhlIHdpcmUuCiAJICovCiAJbGVuZ3RoID0gc3dxZS0+bGVuZ3RoOwpAQCAtNTE1LDcgKzUxNSw3IEBACiAJfQogCiAJLyoKLQkgKiBBIEdSSCBpcyBleHBlY3RlZCB0byBwcmVjZWVkIHRoZSBkYXRhIGV2ZW4gaWYgbm90CisJICogQSBHUkggaXMgZXhwZWN0ZWQgdG8gcHJlY2VkZSB0aGUgZGF0YSBldmVuIGlmIG5vdAogCSAqIHByZXNlbnQgb24gdGhlIHdpcmUuCiAJICovCiAJd2MuYnl0ZV9sZW4gPSB0bGVuICsgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCmluZGV4IGJlNzhmNjYuLmY1Y2IxM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCXJldHVybiAxICsgKChlcGFnZSAtIHNwYWdlKSA+PiBQQUdFX1NISUZUKTsKIH0KIAotLyogdHJ1bmNhdGUgbGVuZ3RoIHRvIHBhZ2UgYm91bmRyeSAqLworLyogdHJ1bmNhdGUgbGVuZ3RoIHRvIHBhZ2UgYm91bmRhcnkgKi8KIHN0YXRpYyBpbnQgaXBhdGhfdXNlcl9zZG1hX3BhZ2VfbGVuZ3RoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhZGRyICYgflBBR0VfTUFTSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IGNmYTNhMmIuLjMzYzdlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMTM5Nyw3ICsxMzk3LDcgQEAKIAkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TSU5HOwogCQlzZW5kX2FjayhjbV9ub2RlLCBOVUxMKTsKLQkJLyogV2FpdCBmb3IgQUNLIGFzIHRoaXMgaXMgc2ltdWx0YW5vdXMgY2xvc2UuLgorCQkvKiBXYWl0IGZvciBBQ0sgYXMgdGhpcyBpcyBzaW11bHRhbmVvdXMgY2xvc2UuLgogCQkqIEFmdGVyIHdlIHJlY2VpdmUgQUNLLCBkbyBub3Qgc2VuZCBhbnl0aGluZy4uCiAJCSogSnVzdCBybSB0aGUgbm9kZS4uIERvbmUuLiAqLwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCmluZGV4IDA4YzE5NDguLjEwZDBhNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwpAQCAtODAsNyArODAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfTkVTX0RFQlVHCiBzdGF0aWMgdW5zaWduZWQgY2hhciAqbmVzX2l3YXJwX3N0YXRlX3N0cltdID0gewotCSJOb24tRXhpc3RhbnQiLAorCSJOb24tRXhpc3RlbnQiLAogCSJJZGxlIiwKIAkiUlRTIiwKIAkiQ2xvc2luZyIsCkBAIC05MSw3ICs5MSw3IEBACiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciAqbmVzX3RjcF9zdGF0ZV9zdHJbXSA9IHsKLQkiTm9uLUV4aXN0YW50IiwKKwkiTm9uLUV4aXN0ZW50IiwKIAkiQ2xvc2VkIiwKIAkiTGlzdGVuIiwKIAkiU1lOIFNlbnQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCAyYzljMTkzLi5lOTZiOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtOTAyLDcgKzkwMiw3IEBACiAJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9OSUNfVU5JQ0FTVF9BTEwsIG5pY19hY3RpdmUpOwogCX0KIAotCW5lc19kZWJ1ZyhORVNfREJHX05JQ19SWCwgIk51bWJlciBvZiBNQyBlbnRyaWVzID0gJWQsIFByb21pc2NvdXMgPSAlZCwgQWxsIE11bHRpY2FzdCA9ICVkLlxuIiwKKwluZXNfZGVidWcoTkVTX0RCR19OSUNfUlgsICJOdW1iZXIgb2YgTUMgZW50cmllcyA9ICVkLCBQcm9taXNjdW91cyA9ICVkLCBBbGwgTXVsdGljYXN0ID0gJWQuXG4iLAogCQkgIG1jX2NvdW50LCAhIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpLAogCQkgICEhKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKTsKIAlpZiAoIW1jX2FsbF9vbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliLmgKaW5kZXggNzMyMjVlZS4uNzY5YTFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYi5oCkBAIC02NTMsNyArNjUzLDcgQEAKIAogLyogZGV2aWNlIGRhdGEgc3RydWN0IG5vdyBjb250YWlucyBvbmx5ICJnZW5lcmFsIHBlci1kZXZpY2UiIGluZm8uCiAgKiBmaWVsZHMgcmVsYXRlZCB0byBhIHBoeXNpY2FsIElCIHBvcnQgYXJlIGluIGEgcWliX3Bwb3J0ZGF0YSBzdHJ1Y3QsCi0gKiBkZXNjcmliZWQgYWJvdmUpIHdoaWxlIGZpZWxkcyBvbmx5IHVzZWQgYnkgYSBwYXJ0aWN1YWxyIGNoaXAtdHlwZSBhcmUgaW4KKyAqIGRlc2NyaWJlZCBhYm92ZSkgd2hpbGUgZmllbGRzIG9ubHkgdXNlZCBieSBhIHBhcnRpY3VsYXIgY2hpcC10eXBlIGFyZSBpbgogICogYSBxaWJfY2hpcGRhdGEgc3RydWN0LCB3aG9zZSBjb250ZW50cyBhcmUgb3BhcXVlIHRvIHRoaXMgZmlsZS4KICAqLwogc3RydWN0IHFpYl9kZXZkYXRhIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9maWxlX29wcy5jCmluZGV4IDc1YmZhZDEuLjQwNmZjYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZpbGVfb3BzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZmlsZV9vcHMuYwpAQCAtMTUzOSw3ICsxNTM5LDcgQEAKIAogCQkvKgogCQkgKiBJZiBwcm9jZXNzIGhhcyBOT1QgYWxyZWFkeSBzZXQgaXQncyBhZmZpbml0eSwgc2VsZWN0IGFuZAotCQkgKiByZXNlcnZlIGEgcHJvY2Vzc29yIGZvciBpdCwgYXMgYSByZW5kZXZvdXMgZm9yIGFsbAorCQkgKiByZXNlcnZlIGEgcHJvY2Vzc29yIGZvciBpdCwgYXMgYSByZW5kZXp2b3VzIGZvciBhbGwKIAkJICogdXNlcnMgb2YgdGhlIGRyaXZlci4gIElmIHRoZXkgZG9uJ3QgYWN0dWFsbHkgbGF0ZXIKIAkJICogc2V0IGFmZmluaXR5IHRvIHRoaXMgY3B1LCBvciBzZXQgaXQgdG8gc29tZSBvdGhlciBjcHUsCiAJCSAqIGl0IGp1c3QgbWVhbnMgdGhhdCBzb29uZXIgb3IgbGF0ZXIgd2UgZG9uJ3QgcmVjb21tZW5kCkBAIC0xNjU3LDcgKzE2NTcsNyBAQAogCSAqIDAgdG8gMS4gIFNvIGZvciB0aG9zZSBjaGlwcywgd2UgdHVybiBpdCBvZmYgYW5kIHRoZW4gYmFjayBvbi4KIAkgKiBUaGlzIHdpbGwgKHZlcnkgYnJpZWZseSkgYWZmZWN0IGFueSBvdGhlciBvcGVuIGN0eHRzLCBidXQgdGhlCiAJICogZHVyYXRpb24gaXMgdmVyeSBzaG9ydCwgYW5kIHRoZXJlZm9yZSBpc24ndCBhbiBpc3N1ZS4gIFdlCi0JICogZXhwbGljdGx5IHNldCB0aGUgaW4tbWVtb3J5IHRhaWwgY29weSB0byAwIGJlZm9yZWhhbmQsIHNvIHdlCisJICogZXhwbGljaXRseSBzZXQgdGhlIGluLW1lbW9yeSB0YWlsIGNvcHkgdG8gMCBiZWZvcmVoYW5kLCBzbyB3ZQogCSAqIGRvbid0IGhhdmUgdG8gd2FpdCB0byBiZSBzdXJlIHRoZSBETUEgdXBkYXRlIGhhcyBoYXBwZW5lZAogCSAqIChjaGlwIHJlc2V0cyBoZWFkL3RhaWwgdG8gMCBvbiB0cmFuc2l0aW9uIHRvIGVuYWJsZSkuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE2MTIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE2MTIwLmMKaW5kZXggNzc0ZGVhOC4uZDhjYTBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNjEyMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYwpAQCAtMTc5OSw3ICsxNzk5LDcgQEAKIAkvKgogCSAqIEtlZXAgY2hpcCBmcm9tIGJlaW5nIGFjY2Vzc2VkIHVudGlsIHdlIGFyZSByZWFkeS4gIFVzZQogCSAqIHdyaXRlcSgpIGRpcmVjdGx5LCB0byBhbGxvdyB0aGUgd3JpdGUgZXZlbiB0aG91Z2ggUUlCX1BSRVNFTlQKLQkgKiBpc250JyBzZXQuCisJICogaXNuJ3Qgc2V0LgogCSAqLwogCWRkLT5mbGFncyAmPSB+KFFJQl9JTklUVEVEIHwgUUlCX1BSRVNFTlQpOwogCWRkLT5pbnRfY291bnRlciA9IDA7IC8qIHNvIHdlIGNoZWNrIGludGVycnVwdHMgd29yayBhZ2FpbiAqLwpAQCAtMjE3MSw3ICsyMTcxLDcgQEAKIAkJICogSW5pdCB0aGUgY29udGV4dCByZWdpc3RlcnMgYWxzbzsgaWYgd2Ugd2VyZQogCQkgKiBkaXNhYmxlZCwgdGFpbCBhbmQgaGVhZCBzaG91bGQgYm90aCBiZSB6ZXJvCiAJCSAqIGFscmVhZHkgZnJvbSB0aGUgZW5hYmxlLCBidXQgc2luY2Ugd2UgZG9uJ3QKLQkJICoga25vdywgd2UgaGF2ZSB0byBkbyBpdCBleHBsaWN0bHkuCisJCSAqIGtub3csIHdlIGhhdmUgdG8gZG8gaXQgZXhwbGljaXRseS4KIAkJICovCiAJCXZhbCA9IHFpYl9yZWFkX3VyZWczMihkZCwgdXJfcmN2ZWdyaW5kZXh0YWlsLCBjdHh0KTsKIAkJcWliX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwgdmFsLCBjdHh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTcyMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTcyMjAuYwppbmRleCBkZTc5OWYxLi5jNzY1YTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MjIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jCkBAIC0yMTExLDcgKzIxMTEsNyBAQAogCS8qCiAJICogS2VlcCBjaGlwIGZyb20gYmVpbmcgYWNjZXNzZWQgdW50aWwgd2UgYXJlIHJlYWR5LiAgVXNlCiAJICogd3JpdGVxKCkgZGlyZWN0bHksIHRvIGFsbG93IHRoZSB3cml0ZSBldmVuIHRob3VnaCBRSUJfUFJFU0VOVAotCSAqIGlzbnQnIHNldC4KKwkgKiBpc24ndCBzZXQuCiAJICovCiAJZGQtPmZsYWdzICY9IH4oUUlCX0lOSVRURUQgfCBRSUJfUFJFU0VOVCk7CiAJZGQtPmludF9jb3VudGVyID0gMDsgLyogc28gd2UgY2hlY2sgaW50ZXJydXB0cyB3b3JrIGFnYWluICovCkBAIC0yNDc5LDcgKzI0NzksNyBAQAogCQkgKiB3ZSBjb21tYW5kIHRoZSBsaW5rIGRvd24uICBBcyB3aXRoIHdpZHRoLCBvbmx5IHdyaXRlIHRoZQogCQkgKiBhY3R1YWwgcmVnaXN0ZXIgaWYgdGhlIGxpbmsgaXMgY3VycmVudGx5IGRvd24sIG90aGVyd2lzZQogCQkgKiB0YWtlcyBlZmZlY3Qgb24gbmV4dCBsaW5rIGNoYW5nZS4gIFNpbmNlIHNldHRpbmcgaXMgYmVpbmcKLQkJICogZXhwbGljdGx5IHJlcXVlc3RlZCAodmlhIE1BRCBvciBzeXNmcyksIGNsZWFyIGF1dG9uZWcKKwkJICogZXhwbGljaXRseSByZXF1ZXN0ZWQgKHZpYSBNQUQgb3Igc3lzZnMpLCBjbGVhciBhdXRvbmVnCiAJCSAqIGZhaWx1cmUgc3RhdHVzIGlmIHNwZWVkIGF1dG9uZWcgaXMgZW5hYmxlZC4KIAkJICovCiAJCXBwZC0+bGlua19zcGVlZF9lbmFibGVkID0gdmFsOwpAQCAtMjc3OCw3ICsyNzc4LDcgQEAKIAkJICogSW5pdCB0aGUgY29udGV4dCByZWdpc3RlcnMgYWxzbzsgaWYgd2Ugd2VyZQogCQkgKiBkaXNhYmxlZCwgdGFpbCBhbmQgaGVhZCBzaG91bGQgYm90aCBiZSB6ZXJvCiAJCSAqIGFscmVhZHkgZnJvbSB0aGUgZW5hYmxlLCBidXQgc2luY2Ugd2UgZG9uJ3QKLQkJICoga25vdywgd2UgaGF2ZSB0byBkbyBpdCBleHBsaWN0bHkuCisJCSAqIGtub3csIHdlIGhhdmUgdG8gZG8gaXQgZXhwbGljaXRseS4KIAkJICovCiAJCXZhbCA9IHFpYl9yZWFkX3VyZWczMihkZCwgdXJfcmN2ZWdyaW5kZXh0YWlsLCBjdHh0KTsKIAkJcWliX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwgdmFsLCBjdHh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwppbmRleCA0YTJkMjFlLi42YmFiM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCkBAIC0zMjk5LDcgKzMyOTksNyBAQAogCS8qCiAJICogS2VlcCBjaGlwIGZyb20gYmVpbmcgYWNjZXNzZWQgdW50aWwgd2UgYXJlIHJlYWR5LiAgVXNlCiAJICogd3JpdGVxKCkgZGlyZWN0bHksIHRvIGFsbG93IHRoZSB3cml0ZSBldmVuIHRob3VnaCBRSUJfUFJFU0VOVAotCSAqIGlzbnQnIHNldC4KKwkgKiBpc24ndCBzZXQuCiAJICovCiAJZGQtPmZsYWdzICY9IH4oUUlCX0lOSVRURUQgfCBRSUJfUFJFU0VOVCB8IFFJQl9CQURJTlRSKTsKIAlkZC0+ZmxhZ3MgfD0gUUlCX0RPSU5HX1JFU0VUOwpAQCAtMzcyNyw3ICszNzI3LDcgQEAKIAkJLyoKIAkJICogQXMgd2l0aCB3aWR0aCwgb25seSB3cml0ZSB0aGUgYWN0dWFsIHJlZ2lzdGVyIGlmIHRoZQogCQkgKiBsaW5rIGlzIGN1cnJlbnRseSBkb3duLCBvdGhlcndpc2UgdGFrZXMgZWZmZWN0IG9uIG5leHQKLQkJICogbGluayBjaGFuZ2UuICBTaW5jZSBzZXR0aW5nIGlzIGJlaW5nIGV4cGxpY3RseSByZXF1ZXN0ZWQKKwkJICogbGluayBjaGFuZ2UuICBTaW5jZSBzZXR0aW5nIGlzIGJlaW5nIGV4cGxpY2l0bHkgcmVxdWVzdGVkCiAJCSAqICh2aWEgTUFEIG9yIHN5c2ZzKSwgY2xlYXIgYXV0b25lZyBmYWlsdXJlIHN0YXR1cyBpZiBzcGVlZAogCQkgKiBhdXRvbmVnIGlzIGVuYWJsZWQuCiAJCSAqLwpAQCAtNDE2Myw3ICs0MTYzLDcgQEAKIAkJICogSW5pdCB0aGUgY29udGV4dCByZWdpc3RlcnMgYWxzbzsgaWYgd2Ugd2VyZQogCQkgKiBkaXNhYmxlZCwgdGFpbCBhbmQgaGVhZCBzaG91bGQgYm90aCBiZSB6ZXJvCiAJCSAqIGFscmVhZHkgZnJvbSB0aGUgZW5hYmxlLCBidXQgc2luY2Ugd2UgZG9uJ3QKLQkJICoga25vdywgd2UgaGF2ZSB0byBkbyBpdCBleHBsaWN0bHkuCisJCSAqIGtub3csIHdlIGhhdmUgdG8gZG8gaXQgZXhwbGljaXRseS4KIAkJICovCiAJCXZhbCA9IHFpYl9yZWFkX3VyZWczMihkZCwgdXJfcmN2ZWdyaW5kZXh0YWlsLCBjdHh0KTsKIAkJcWliX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwgdmFsLCBjdHh0KTsKQEAgLTc0ODMsNyArNzQ4Myw3IEBACiAJLyogICAgICAgQmFzZWxpbmUgV2FuZGVyIENvcnJlY3Rpb24gR2FpbiBbMTM6NC0wXSAobGVhdmUgYXMgZGVmYXVsdCkgKi8KIAkvKiAgICAgICBCYXNlbGluZSBXYW5kZXIgQ29ycmVjdGlvbiBHYWluIFszOjctNV0gKGxlYXZlIGFzIGRlZmF1bHQpICovCiAJLyogICAgICAgRGF0YSBSYXRlIFNlbGVjdCBbNTo3LTZdIChsZWF2ZSBhcyBkZWZhdWx0KSAqLwotCS8qICAgICAgIFJYIFBhcnJhbGVsIFdvcmQgV2lkdGggWzM6MTAtOF0gKGxlYXZlIGFzIGRlZmF1bHQpICovCisJLyogICAgICAgUlggUGFyYWxsZWwgV29yZCBXaWR0aCBbMzoxMC04XSAobGVhdmUgYXMgZGVmYXVsdCkgKi8KIAogCS8qIFJYIFJFU1QgKi8KIAkvKiAgICAgICBTaW5nbGUtIG9yIE11bHRpLWNoYW5uZWwgcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2luaXQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2luaXQuYwppbmRleCBmZmVmYjc4Li5hMDFmM2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbml0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW5pdC5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKICAqIEBkZDogdGhlIHFsb2dpY19pYiBkZXZpY2UKICAqCiAgKiBzYW5pdHkgY2hlY2sgYXQgbGVhc3Qgc29tZSBvZiB0aGUgdmFsdWVzIGFmdGVyIHJlc2V0LCBhbmQKLSAqIGVuc3VyZSBubyByZWNlaXZlIG9yIHRyYW5zbWl0IChleHBsaWN0bHksIGluIGNhc2UgcmVzZXQKKyAqIGVuc3VyZSBubyByZWNlaXZlIG9yIHRyYW5zbWl0IChleHBsaWNpdGx5LCBpbiBjYXNlIHJlc2V0CiAgKiBmYWlsZWQKICAqLwogc3RhdGljIGludCBpbml0X2FmdGVyX3Jlc2V0KHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9tYWQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX21hZC5oCmluZGV4IDE0N2FmZjkuLjc4NDBhYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX21hZC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX21hZC5oCkBAIC03Myw3ICs3Myw3IEBACiAKIAkJc3RydWN0IHsKIAkJCV9fYmUxNglyZXNlcnZlZDsKLQkJCV9fYmUxNglsaWQ7CQkvKiBMSUQgd2hlcmUgY2hhbmdlIG9jY3VyZWQgKi8KKwkJCV9fYmUxNglsaWQ7CQkvKiBMSUQgd2hlcmUgY2hhbmdlIG9jY3VycmVkICovCiAJCQl1OAlyZXNlcnZlZDI7CiAJCQl1OAlsb2NhbF9jaGFuZ2VzOwkvKiBsb3cgYml0IC0gbG9jYWwgY2hhbmdlcyAqLwogCQkJX19iZTMyCW5ld19jYXBfbWFzazsJLyogbmV3IGNhcGFiaWxpdHkgbWFzayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdHdzaS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdHdzaS5jCmluZGV4IDZmMzFjYTUuLmRkZGU3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3R3c2kuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl90d3NpLmMKQEAgLTQxLDcgKzQxLDcgQEAKICAqIFFMb2dpY19JQiAiVHdvIFdpcmUgU2VyaWFsIEludGVyZmFjZSIgZHJpdmVyLgogICogT3JpZ2luYWxseSB3cml0dGVuIGZvciBhIG5vdC1xdWl0ZS1pMmMgc2VyaWFsIGVlcHJvbSwgd2hpY2ggaXMKICAqIHN0aWxsIHVzZWQgb24gc29tZSBzdXBwb3J0ZWQgYm9hcmRzLiBMYXRlciBib2FyZHMgaGF2ZSBhZGRlZCBhCi0gKiB2YXJpZXR5IG9mIG90aGVyIHVzZXMsIG1vc3QgYm9hcmQtc3BlY2lmaWMsIHNvIHRlaCBiaXQtYm9mZmluZworICogdmFyaWV0eSBvZiBvdGhlciB1c2VzLCBtb3N0IGJvYXJkLXNwZWNpZmljLCBzbyB0aGUgYml0LWJvZmZpbmcKICAqIHBhcnQgaGFzIGJlZW4gc3BsaXQgb2ZmIHRvIHRoaXMgZmlsZSwgd2hpbGUgdGhlIG90aGVyIHBhcnRzCiAgKiBoYXZlIGJlZW4gbW92ZWQgdG8gY2hpcC1zcGVjaWZpYyBmaWxlcy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdWQuYwppbmRleCA0YTUxZmQxLi44Mjg2MDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91ZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VkLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCX0KIAogCS8qCi0JICogQSBHUkggaXMgZXhwZWN0ZWQgdG8gcHJlY2VlZCB0aGUgZGF0YSBldmVuIGlmIG5vdAorCSAqIEEgR1JIIGlzIGV4cGVjdGVkIHRvIHByZWNlZGUgdGhlIGRhdGEgZXZlbiBpZiBub3QKIAkgKiBwcmVzZW50IG9uIHRoZSB3aXJlLgogCSAqLwogCWxlbmd0aCA9IHN3cWUtPmxlbmd0aDsKQEAgLTUyMCw3ICs1MjAsNyBAQAogCQlnb3RvIGRyb3A7CiAKIAkvKgotCSAqIEEgR1JIIGlzIGV4cGVjdGVkIHRvIHByZWNlZWQgdGhlIGRhdGEgZXZlbiBpZiBub3QKKwkgKiBBIEdSSCBpcyBleHBlY3RlZCB0byBwcmVjZWRlIHRoZSBkYXRhIGV2ZW4gaWYgbm90CiAJICogcHJlc2VudCBvbiB0aGUgd2lyZS4KIAkgKi8KIAl3Yy5ieXRlX2xlbiA9IHRsZW4gKyBzaXplb2Yoc3RydWN0IGliX2dyaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91c2VyX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfc2RtYS5jCmluZGV4IDY2MjA4YmMuLjgyNDQyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfc2RtYS5jCkBAIC0yMzksNyArMjM5LDcgQEAKIH0KIAogLyoKLSAqIFRydW5jYXRlIGxlbmd0aCB0byBwYWdlIGJvdW5kcnkuCisgKiBUcnVuY2F0ZSBsZW5ndGggdG8gcGFnZSBib3VuZGFyeS4KICAqLwogc3RhdGljIGludCBxaWJfdXNlcl9zZG1hX3BhZ2VfbGVuZ3RoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaAppbmRleCBmMWRmMDE1Li4yZjAyYWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgU0laRV80SwkoMVVMIDw8IFNISUZUXzRLKQogI2RlZmluZSBNQVNLXzRLCSh+KFNJWkVfNEstMSkpCiAKLQkJCQkJLyogc3VwcG9ydCB1cHRvIDUxMktCIGluIG9uZSBSRE1BICovCisJCQkJCS8qIHN1cHBvcnQgdXAgdG8gNTEyS0IgaW4gb25lIFJETUEgKi8KICNkZWZpbmUgSVNDU0lfSVNFUl9TR19UQUJMRVNJWkUgICAgICAgICAoMHg4MDAwMCA+PiBTSElGVF80SykKICNkZWZpbmUgSVNFUl9ERUZfQ01EX1BFUl9MVU4JCTEyOAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggN2Y0MmQzYS4uODhkOGU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMzksMTMgKzM5LDEzIEBACiB9OwogCiBzdHJ1Y3QgZXZkZXZfY2xpZW50IHsKLQlpbnQgaGVhZDsKLQlpbnQgdGFpbDsKKwl1bnNpZ25lZCBpbnQgaGVhZDsKKwl1bnNpZ25lZCBpbnQgdGFpbDsKIAlzcGlubG9ja190IGJ1ZmZlcl9sb2NrOyAvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gYnVmZmVyLCBoZWFkIGFuZCB0YWlsICovCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKIAlzdHJ1Y3QgZXZkZXYgKmV2ZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlpbnQgYnVmc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYnVmc2l6ZTsKIAlzdHJ1Y3QgaW5wdXRfZXZlbnQgYnVmZmVyW107CiB9OwogCkBAIC01NSwxNiArNTUsMjUgQEAKIHN0YXRpYyB2b2lkIGV2ZGV2X3Bhc3NfZXZlbnQoc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50LAogCQkJICAgICBzdHJ1Y3QgaW5wdXRfZXZlbnQgKmV2ZW50KQogewotCS8qCi0JICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGp1c3QgYWNxdWlyZSB0aGUgbG9jay4KLQkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgbGVhdmUgd2l0aCB0aGUgY2xpZW50IGJ1ZmZlcgotCSAqICJlbXB0eSIgYnkgaGF2aW5nIGNsaWVudC0+aGVhZCA9PSBjbGllbnQtPnRhaWwuCi0JICovCisJLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGp1c3QgYWNxdWlyZSB0aGUgbG9jay4gKi8KIAlzcGluX2xvY2soJmNsaWVudC0+YnVmZmVyX2xvY2spOwotCWRvIHsKLQkJY2xpZW50LT5idWZmZXJbY2xpZW50LT5oZWFkKytdID0gKmV2ZW50OwotCQljbGllbnQtPmhlYWQgJj0gY2xpZW50LT5idWZzaXplIC0gMTsKLQl9IHdoaWxlIChjbGllbnQtPmhlYWQgPT0gY2xpZW50LT50YWlsKTsKKworCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+aGVhZCsrXSA9ICpldmVudDsKKwljbGllbnQtPmhlYWQgJj0gY2xpZW50LT5idWZzaXplIC0gMTsKKworCWlmICh1bmxpa2VseShjbGllbnQtPmhlYWQgPT0gY2xpZW50LT50YWlsKSkgeworCQkvKgorCQkgKiBUaGlzIGVmZmVjdGl2ZWx5ICJkcm9wcyIgYWxsIHVuY29uc3VtZWQgZXZlbnRzLCBsZWF2aW5nCisJCSAqIEVWX1NZTi9TWU5fRFJPUFBFRCBwbHVzIHRoZSBuZXdlc3QgZXZlbnQgaW4gdGhlIHF1ZXVlLgorCQkgKi8KKwkJY2xpZW50LT50YWlsID0gKGNsaWVudC0+aGVhZCAtIDIpICYgKGNsaWVudC0+YnVmc2l6ZSAtIDEpOworCisJCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+dGFpbF0udGltZSA9IGV2ZW50LT50aW1lOworCQljbGllbnQtPmJ1ZmZlcltjbGllbnQtPnRhaWxdLnR5cGUgPSBFVl9TWU47CisJCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+dGFpbF0uY29kZSA9IFNZTl9EUk9QUEVEOworCQljbGllbnQtPmJ1ZmZlcltjbGllbnQtPnRhaWxdLnZhbHVlID0gMDsKKwl9CisKIAlzcGluX3VubG9jaygmY2xpZW50LT5idWZmZXJfbG9jayk7CiAKIAlpZiAoZXZlbnQtPnR5cGUgPT0gRVZfU1lOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IGQ2ZThiZDguLmViYmNlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTE3NDYsNiArMTc0Niw0MiBAQAogfQogRVhQT1JUX1NZTUJPTChpbnB1dF9zZXRfY2FwYWJpbGl0eSk7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRfZXN0aW1hdGVfZXZlbnRzX3Blcl9wYWNrZXQoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWludCBtdF9zbG90czsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzOworCisJaWYgKGRldi0+bXRzaXplKSB7CisJCW10X3Nsb3RzID0gZGV2LT5tdHNpemU7CisJfSBlbHNlIGlmICh0ZXN0X2JpdChBQlNfTVRfVFJBQ0tJTkdfSUQsIGRldi0+YWJzYml0KSkgeworCQltdF9zbG90cyA9IGRldi0+YWJzaW5mb1tBQlNfTVRfVFJBQ0tJTkdfSURdLm1heGltdW0gLQorCQkJICAgZGV2LT5hYnNpbmZvW0FCU19NVF9UUkFDS0lOR19JRF0ubWluaW11bSArIDEsCisJCWNsYW1wKG10X3Nsb3RzLCAyLCAzMik7CisJfSBlbHNlIGlmICh0ZXN0X2JpdChBQlNfTVRfUE9TSVRJT05fWCwgZGV2LT5hYnNiaXQpKSB7CisJCW10X3Nsb3RzID0gMjsKKwl9IGVsc2UgeworCQltdF9zbG90cyA9IDA7CisJfQorCisJZXZlbnRzID0gbXRfc2xvdHMgKyAxOyAvKiBjb3VudCBTWU5fTVRfUkVQT1JUIGFuZCBTWU5fUkVQT1JUICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQUJTX0NOVDsgaSsrKSB7CisJCWlmICh0ZXN0X2JpdChpLCBkZXYtPmFic2JpdCkpIHsKKwkJCWlmIChpbnB1dF9pc19tdF9heGlzKGkpKQorCQkJCWV2ZW50cyArPSBtdF9zbG90czsKKwkJCWVsc2UKKwkJCQlldmVudHMrKzsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBSRUxfQ05UOyBpKyspCisJCWlmICh0ZXN0X2JpdChpLCBkZXYtPnJlbGJpdCkpCisJCQlldmVudHMrKzsKKworCXJldHVybiBldmVudHM7Cit9CisKICNkZWZpbmUgSU5QVVRfQ0xFQU5TRV9CSVRNQVNLKGRldiwgdHlwZSwgYml0cykJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJCVwKQEAgLTE3OTMsNiArMTgyOSwxMCBAQAogCS8qIE1ha2Ugc3VyZSB0aGF0IGJpdG1hc2tzIG5vdCBtZW50aW9uZWQgaW4gZGV2LT5ldmJpdCBhcmUgY2xlYW4uICovCiAJaW5wdXRfY2xlYW5zZV9iaXRtYXNrcyhkZXYpOwogCisJaWYgKCFkZXYtPmhpbnRfZXZlbnRzX3Blcl9wYWNrZXQpCisJCWRldi0+aGludF9ldmVudHNfcGVyX3BhY2tldCA9CisJCQkJaW5wdXRfZXN0aW1hdGVfZXZlbnRzX3Blcl9wYWNrZXQoZGV2KTsKKwogCS8qCiAJICogSWYgZGVsYXkgYW5kIHBlcmlvZCBhcmUgcHJlLXNldCBieSB0aGUgZHJpdmVyLCB0aGVuIGF1dG9yZXBlYXRpbmcKIAkgKiBpcyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIgaXRzZWxmIGFuZCB3ZSBkb24ndCBkbyBpdCBpbiBpbnB1dC5jLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKaW5kZXggMzE4MmM5Yy4uNTY4OGI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC03NTgsNyArNzU4LDcgQEAKIH0KIAogLyoKLSAqIE1hcmsgZGV2aWNlIG5vbi1leGlzdGFudC4gVGhpcyBkaXNhYmxlcyB3cml0ZXMsIGlvY3RscyBhbmQKKyAqIE1hcmsgZGV2aWNlIG5vbi1leGlzdGVudC4gVGhpcyBkaXNhYmxlcyB3cml0ZXMsIGlvY3RscyBhbmQKICAqIHByZXZlbnRzIG5ldyB1c2VycyBmcm9tIG9wZW5pbmcgdGhlIGRldmljZS4gQWxyZWFkeSBwb3N0ZWQKICAqIGJsb2NraW5nIHJlYWRzIHdpbGwgc3RheSwgaG93ZXZlciBuZXcgb25lcyB3aWxsIGZhaWwuCiAgKi8KQEAgLTc3Nyw3ICs3NzcsNyBAQAogCWpveWRldl9oYW5ndXAoam95ZGV2KTsKIAlqb3lkZXZfcmVtb3ZlX2NocmRldihqb3lkZXYpOwogCi0JLyogam95ZGV2IGlzIG1hcmtlZCBkZWFkIHNvIG5vb25lIGVsc2UgYWNjZXNzZXMgam95ZGV2LT5vcGVuICovCisJLyogam95ZGV2IGlzIG1hcmtlZCBkZWFkIHNvIG5vIG9uZSBlbHNlIGFjY2Vzc2VzIGpveWRldi0+b3BlbiAqLwogCWlmIChqb3lkZXYtPm9wZW4pCiAJCWlucHV0X2Nsb3NlX2RldmljZShoYW5kbGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKaW5kZXggZDI1OWI0MS4uMTYzOWFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCkBAIC0zLDcgKzMsNyBAQAogICovCiAKIC8qCi0gKiBGUC1HYW1pbmcgQXNzYXNpbiAzRCBqb3lzdGljayBkcml2ZXIgZm9yIExpbnV4CisgKiBGUC1HYW1pbmcgQXNzYXNzaW4gM0Qgam95c3RpY2sgZHJpdmVyIGZvciBMaW51eAogICovCiAKIC8qCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKLSNkZWZpbmUgRFJJVkVSX0RFU0MJIkZQLUdhbWluZyBBc3Nhc2luIDNEIGpveXN0aWNrIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIkZQLUdhbWluZyBBc3Nhc3NpbiAzRCBqb3lzdGljayBkcml2ZXIiCiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2RhdmluY2lfa2V5c2Nhbi5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9kYXZpbmNpX2tleXNjYW4uYwppbmRleCBhOTFlZTk0Li5jZDg5ZDE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9kYXZpbmNpX2tleXNjYW4uYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2RhdmluY2lfa2V5c2Nhbi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEF1dGhvcjogTWlndWVsIEFndWlsYXIgPG1pZ3VlbC5hZ3VpbGFyQHJpZGdlcnVuLmNvbT4KICAqCi0gKiBJbnRpYWwgQ29kZTogU2FuZGVlcCBQYXVscmFqIDxzLXBhdWxyYWpAdGkuY29tPgorICogSW5pdGlhbCBDb2RlOiBTYW5kZWVwIFBhdWxyYWogPHMtcGF1bHJhakB0aS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwZWFyLWtleWJvYXJkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwZWFyLWtleWJvYXJkLmMKaW5kZXggYmVlMDNkNi4uZDcxMmRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGVhci1rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BlYXIta2V5Ym9hcmQuYwpAQCAtNjksNyArNjksNyBAQAogCXU4IHN0cywgdmFsOwogCiAJc3RzID0gcmVhZGIoa2JkLT5pb19iYXNlICsgU1RBVFVTX1JFRyk7Ci0JaWYgKHN0cyAmIERBVEFfQVZBSUwpCisJaWYgKCEoc3RzICYgREFUQV9BVkFJTCkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWlmIChrYmQtPmxhc3Rfa2V5ICE9IEtFWV9SRVNFUlZFRCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCmluZGV4IDA5YmVmNzkuLmEyNjkyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKQEAgLTMzMiwxOCArMzMyLDIwIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2w0MDMwX2twX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGE7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CiAJc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAl1OCByZWc7CiAJaW50IGVycm9yOwogCi0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8CisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8ICFwZGF0YS0+a2V5bWFwX2RhdGEgfHwKIAkgICAgcGRhdGEtPnJvd3MgPiBUV0w0MDMwX01BWF9ST1dTIHx8IHBkYXRhLT5jb2xzID4gVFdMNDAzMF9NQVhfQ09MUykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIHBsYXRmb3JtX2RhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlrZXltYXBfZGF0YSA9IHBkYXRhLT5rZXltYXBfZGF0YTsKKwogCWtwID0ga3phbGxvYyhzaXplb2YoKmtwKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWtwIHx8ICFpbnB1dCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHguYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LmMKaW5kZXggZGU1OTAwZC4uMTQ0ZGRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHguYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC5jCkBAIC03MTYsNyArNzE2LDcgQEAKIAlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoZGV2LAotCQkJIk5vIHBsYXRmcm9tIGRhdGE6IFVzaW5nIGRlZmF1bHQgaW5pdGlhbGl6YXRpb25cbiIpOworCQkJIk5vIHBsYXRmb3JtIGRhdGE6IFVzaW5nIGRlZmF1bHQgaW5pdGlhbGl6YXRpb25cbiIpOwogCQlwZGF0YSA9ICZhZHhsMzR4X2RlZmF1bHRfaW5pdDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9rZXlzcGFuX3JlbW90ZS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKaW5kZXggYTkzYzUyNS4uZmM2MjI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCQkJcmVtb3RlLT5kYXRhLnRlc3RlciA9IHJlbW90ZS0+ZGF0YS50ZXN0ZXIgPj4gNTsKIAkJCXJlbW90ZS0+ZGF0YS5iaXRzX2xlZnQgLT0gNTsKIAkJfSBlbHNlIHsKLQkJCWVycigiQmFkIG1lc3NhZ2UgcmVjaWV2ZWQsIG5vIHN0b3AgYml0IGZvdW5kLlxuIik7CisJCQllcnIoIkJhZCBtZXNzYWdlIHJlY2VpdmVkLCBubyBzdG9wIGJpdCBmb3VuZC5cbiIpOwogCQl9CiAKIAkJZGV2X2RiZygmcmVtb3RlLT51ZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKaW5kZXggMzY0YmRmNC4uNzM2MDU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwpAQCAtMzAyLDEwICszMDIsMTQgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCWZvciAoY250ID0gMDsgY250IDwgQUJTX0NOVDsgY250KyspIHsKKwkJaW50IG1pbiwgbWF4OwogCQlpZiAoIXRlc3RfYml0KGNudCwgZGV2LT5hYnNiaXQpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGlucHV0X2Fic19nZXRfbWF4KGRldiwgY250KSA8PSBpbnB1dF9hYnNfZ2V0X21pbihkZXYsIGNudCkpIHsKKwkJbWluID0gaW5wdXRfYWJzX2dldF9taW4oZGV2LCBjbnQpOworCQltYXggPSBpbnB1dF9hYnNfZ2V0X21heChkZXYsIGNudCk7CisKKwkJaWYgKChtaW4gIT0gMCB8fCBtYXggIT0gMCkgJiYgbWF4IDw9IG1pbikgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkiJXM6IGludmFsaWQgYWJzWyUwMnhdIG1pbjolZCBtYXg6JWRcbiIsCiAJCQkJVUlOUFVUX05BTUUsIGNudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAxMjUwMWRlLi41MmI0MTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAl7IEtFX0JMVUVUT09USCwgMHgzMCB9LCAgICAgICAgICAgICAgICAgICAgICAvKiBGbitGMTAgKi8KIAl7IEtFX0tFWSwgICAgICAgMHgzMSwge0tFWV9NQUlMfSB9LCAgICAgICAgICAvKiBtYWlsIGJ1dHRvbiAqLwogCXsgS0VfS0VZLCAgICAgICAweDM2LCB7S0VZX1dXV30gfSwgICAgICAgICAgIC8qIHd3dyBidXR0b24gKi8KLQl7IEtFX1dJRkksICAgICAgMHg3OCB9LCAgICAgICAgICAgICAgICAgICAgICAvKiBzYXRlbGl0ZSBkaXNoIGJ1dHRvbiAqLworCXsgS0VfV0lGSSwgICAgICAweDc4IH0sICAgICAgICAgICAgICAgICAgICAgIC8qIHNhdGVsbGl0ZSBkaXNoIGJ1dHRvbiAqLwogCXsgS0VfRU5ELCAgICAgICAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy94ZW4ta2JkZnJvbnQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy94ZW4ta2JkZnJvbnQuYwppbmRleCA3MDc3ZjliLi42MmJhZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MveGVuLWtiZGZyb250LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3hlbi1rYmRmcm9udC5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAkJCQkgICBlbnVtIHhlbmJ1c19zdGF0ZSBiYWNrZW5kX3N0YXRlKQogewogCXN0cnVjdCB4ZW5rYmRfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwotCWludCB2YWw7CisJaW50IHJldCwgdmFsOwogCiAJc3dpdGNoIChiYWNrZW5kX3N0YXRlKSB7CiAJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZzoKQEAgLTMxNiw2ICszMTYsMTcgQEAKIAogCWNhc2UgWGVuYnVzU3RhdGVJbml0V2FpdDoKIEluaXRXYWl0OgorCQlyZXQgPSB4ZW5idXNfc2NhbmYoWEJUX05JTCwgaW5mby0+eGJkZXYtPm90aGVyZW5kLAorCQkJCSAgICJmZWF0dXJlLWFicy1wb2ludGVyIiwgIiVkIiwgJnZhbCk7CisJCWlmIChyZXQgPCAwKQorCQkJdmFsID0gMDsKKwkJaWYgKHZhbCkgeworCQkJcmV0ID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBpbmZvLT54YmRldi0+bm9kZW5hbWUsCisJCQkJCSAgICAicmVxdWVzdC1hYnMtcG9pbnRlciIsICIxIik7CisJCQlpZiAocmV0KQorCQkJCXByX3dhcm5pbmcoInhlbmtiZDogY2FuJ3QgcmVxdWVzdCBhYnMtcG9pbnRlciIpOworCQl9CisKIAkJeGVuYnVzX3N3aXRjaF9zdGF0ZShkZXYsIFhlbmJ1c1N0YXRlQ29ubmVjdGVkKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKaW5kZXggM2FlYWQ5MS4uMzEyNjk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKQEAgLTYzOSw3ICs2MzksNyBAQAogICogZGV2aWNlLCByZXN1bHRpbmcgaW4gdHJhY2twYWQgbWFsZnVuY3Rpb24gdW5kZXIgY2VydGFpbgogICogY2lyY3Vtc3RhbmNlcy4gVG8gZ2V0IGFyb3VuZCB0aGlzIHByb2JsZW0sIHRoZXJlIGlzIGF0IGxlYXN0IG9uZQogICogZXhhbXBsZSB0aGF0IHV0aWxpemVzIHRoZSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIHF1aXJrIGluIG9yZGVyIHRvCi0gKiByZWNpZXZlIGEgcmVzZXRfcmVzdW1lIHJlcXVlc3QgcmF0aGVyIHRoYW4gdGhlIG5vcm1hbCByZXN1bWUuCisgKiByZWNlaXZlIGEgcmVzZXRfcmVzdW1lIHJlcXVlc3QgcmF0aGVyIHRoYW4gdGhlIG5vcm1hbCByZXN1bWUuCiAgKiBTaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgcmVzZXRfcmVzdW1lIGlzIGVxdWFsIHRvIG1vZGUgc3dpdGNoCiAgKiBwbHVzIHN0YXJ0X3RyYWZmaWMsIGl0IHNlZW1zIGVhc2llciB0byBhbHdheXMgZG8gdGhlIHN3aXRjaCB3aGVuCiAgKiBzdGFydGluZyB0cmFmZmljIG9uIHRoZSBkZXZpY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBhYTE4NmNmLi5lMDZlMDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTgzNiw4ICs4MzYsOCBAQAogCQl9LAogCiAJfSwKLQl7IH0KICNlbmRpZgorCXsgfQogfTsKIAogc3RhdGljIGJvb2wgYnJva2VuX29scGNfZWM7CkBAIC04NTEsOCArODUxLDggQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiWE8iKSwKIAkJfSwKIAl9LAotCXsgfQogI2VuZGlmCisJeyB9CiB9OwogCiB2b2lkIF9faW5pdCBzeW5hcHRpY3NfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzX2kyYy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3NfaTJjLmMKaW5kZXggZjZhYTI2ZC4uY2JhM2M4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3NfaTJjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3NfaTJjLmMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCSAqIFdoaWxlIGludGVycnVwdCBkcml2ZW4sIHRoZXJlIGlzIG5vIHJlYWwgbmVlZCB0byBwb2xsIHRoZSBkZXZpY2UuCiAJICogQnV0IHRvdWNocGFkcyBhcmUgdmVyeSBzZW5zaXRpdmUsIHNvIHRoZXJlIGNvdWxkIGJlIGVycm9ycwogCSAqIHJlbGF0ZWQgdG8gcGh5c2ljYWwgZW52aXJvbm1lbnQgYW5kIHRoZSBhdHRlbnRpb24gbGluZSBpc24ndAotCSAqIG5lY2Nlc2FyaWx5IGFzc2VydGVkLiBJbiBzdWNoIGNhc2Ugd2UgY2FuIGxvc2UgdGhlIHRvdWNocGFkLgorCSAqIG5lY2Vzc2FyaWx5IGFzc2VydGVkLiBJbiBzdWNoIGNhc2Ugd2UgY2FuIGxvc2UgdGhlIHRvdWNocGFkLgogCSAqIFdlIHBvbGwgdGhlIGRldmljZSBvbmNlIGluIFRIUkVBRF9JUlFfU0xFRVBfU0VDUyBhbmQKIAkgKiBpZiBlcnJvciBpcyBkZXRlY3RlZCwgd2UgdHJ5IHRvIHJlc2V0IGFuZCByZWNvbmZpZ3VyZSB0aGUgdG91Y2hwYWQuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCmluZGV4IGJmMmMwYzguLmViOWEzY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAkgKiBNOiBtYW51ZmFjdHVyZXIgbG9jYXRpb24gY29kZQogCSAqIFI6IHJldmlzaW9uIGNvZGUKIAkgKiBFOiBFcnJvciBjb2RlLiBJZiBpdCdzIGluIHRoZSByYW5nZSBvZiAweDAwLi4weDFmLCBvbmx5IHNvbWUKLQkgKiAgICBtaW5vciBwcm9ibGVtIG9jY3VyZWQuIEVycm9ycyA+PSAweDIwIGFyZSBjb25zaWRlcmVkIGJhZAorCSAqICAgIG1pbm9yIHByb2JsZW0gb2NjdXJyZWQuIEVycm9ycyA+PSAweDIwIGFyZSBjb25zaWRlcmVkIGJhZAogCSAqICAgIGFuZCB0aGUgZGV2aWNlIG1heSBub3Qgd29yayBwcm9wZXJseS4uLgogCSAqIEQ6IDwwMDEwPiA9PSBtb3VzZSwgPDAxMDA+ID09IHRhYmxldAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjLmMKaW5kZXggOGMwYjUxYy4uNDIyMDYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkYy5jCkBAIC05NTUsNyArOTU1LDcgQEAKIAlJTklUX0RFTEFZRURfV09SSygmbW9kdWxlbG9hZGVyX3dvcmssIHJlcXVlc3RfbW9kdWxlX2RlbGF5ZWQpOwogCiAJcmV0ID0gaHBfc2RjX2luaXQoKTsKLQkvKiBhZnRlciBzdWNjZXNzZnVsbCBpbml0aWFsaXphdGlvbiBnaXZlIFNEQyBzb21lIHRpbWUgdG8gc2V0dGxlCisJLyogYWZ0ZXIgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbiBnaXZlIFNEQyBzb21lIHRpbWUgdG8gc2V0dGxlCiAJICogYW5kIHRoZW4gbG9hZCB0aGUgaHBfc2RjX21sYyB1cHBlciBsYXllciBkcml2ZXIgKi8KIAlpZiAoIXJldCkKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtb2R1bGVsb2FkZXJfd29yaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCBhYzRjOTM2Li5kMzdhNDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC04NjksMTUgKzg2OSwxNSBAQAogCWRvIHsKIAogCQlpZiAoaTgwNDJfY29tbWFuZCgmcGFyYW0sIEk4MDQyX0NNRF9DVExfVEVTVCkpIHsKLQkJCXByX2VycigiaTgwNDIgY29udHJvbGxlciBzZWxmIHRlc3QgdGltZW91dFxuIik7CisJCQlwcl9lcnIoImk4MDQyIGNvbnRyb2xsZXIgc2VsZnRlc3QgdGltZW91dFxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCWlmIChwYXJhbSA9PSBJODA0Ml9SRVRfQ1RMX1RFU1QpCiAJCQlyZXR1cm4gMDsKIAotCQlwcl9lcnIoImk4MDQyIGNvbnRyb2xsZXIgc2VsZnRlc3QgZmFpbGVkLiAoJSN4ICE9ICUjeClcbiIsCi0JCSAgICAgICBwYXJhbSwgSTgwNDJfUkVUX0NUTF9URVNUKTsKKwkJZGJnKCJpODA0MiBjb250cm9sbGVyIHNlbGZ0ZXN0OiAlI3ggIT0gJSN4XG4iLAorCQkgICAgcGFyYW0sIEk4MDQyX1JFVF9DVExfVEVTVCk7CiAJCW1zbGVlcCg1MCk7CiAJfSB3aGlsZSAoaSsrIDwgNSk7CiAKQEAgLTg5MSw2ICs4OTEsNyBAQAogCXByX2luZm8oImdpdmluZyB1cCBvbiBjb250cm9sbGVyIHNlbGZ0ZXN0LCBjb250aW51aW5nIGFueXdheS4uLlxuIik7CiAJcmV0dXJuIDA7CiAjZWxzZQorCXByX2VycigiaTgwNDIgY29udHJvbGxlciBzZWxmdGVzdCBmYWlsZWRcbiIpOwogCXJldHVybiAtRUlPOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwppbmRleCA5ZGE2ZmJjLi43ZWMzYzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogCWlmIChyZXF1ZXN0X2lycShJUlFfS0VZQk9BUkRUWCwgcnBja2JkX3R4LCAwLCAicnBja2JkIiwgcG9ydCkgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgInJwY2tiZC5jOiBDb3VsZCBub3QgYWxsb2NhdGUga2V5Ym9hcmQgdHJhbnNtaXQgSVJRXG4iKTsKLQkJZnJlZV9pcnEoSVJRX0tFWUJPQVJEUlgsIE5VTEwpOworCQlmcmVlX2lycShJUlFfS0VZQk9BUkRSWCwgcG9ydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jCmluZGV4IDc1NDBiYWYuLjgwYmFhNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIC8qKgogICogeHBzMl9vZl9wcm9iZSAtIHByb2JlIG1ldGhvZCBmb3IgdGhlIFBTLzIgZGV2aWNlLgogICogQG9mX2RldjoJcG9pbnRlciB0byBPRiBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAbWF0Y2g6CXBvaW50ZXIgdG8gdGhlIHN0dWN0dXJlIHVzZWQgZm9yIG1hdGNoaW5nIGEgZGV2aWNlCisgKiBAbWF0Y2g6CXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBtYXRjaGluZyBhIGRldmljZQogICoKICAqIFRoaXMgZnVuY3Rpb24gcHJvYmVzIHRoZSBQUy8yIGRldmljZSBpbiB0aGUgZGV2aWNlIHRyZWUuCiAgKiBJdCBpbml0aWFsaXplcyB0aGUgZHJpdmVyIGRhdGEgc3RydWN0dXJlIGFuZCB0aGUgaGFyZHdhcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NwYXJzZS1rZXltYXAuYyBiL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jCmluZGV4IDMzN2JmNTEuLmZkYjZhMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jCkBAIC0yMDgsNiArMjA4LDEyIEBACiAJCX0KIAl9CiAKKwlpZiAodGVzdF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KSkgeworCQlfX3NldF9iaXQoS0VZX1VOS05PV04sIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEVWX01TQywgZGV2LT5ldmJpdCk7CisJCV9fc2V0X2JpdChNU0NfU0NBTiwgZGV2LT5tc2NiaXQpOworCX0KKwogCWRldi0+a2V5Y29kZSA9IG1hcDsKIAlkZXYtPmtleWNvZGVtYXggPSBtYXBfc2l6ZTsKIAlkZXYtPmdldGtleWNvZGUgPSBzcGFyc2Vfa2V5bWFwX2dldGtleWNvZGU7CkBAIC0yNjgsNiArMjc0LDcgQEAKIHsKIAlzd2l0Y2ggKGtlLT50eXBlKSB7CiAJY2FzZSBLRV9LRVk6CisJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwga2UtPmNvZGUpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2UtPmtleWNvZGUsIHZhbHVlKTsKIAkJaW5wdXRfc3luYyhkZXYpOwogCQlpZiAodmFsdWUgJiYgYXV0b3JlbGVhc2UpIHsKQEAgLTMwNSwxMiArMzEyLDE5IEBACiB7CiAJY29uc3Qgc3RydWN0IGtleV9lbnRyeSAqa2UgPQogCQlzcGFyc2Vfa2V5bWFwX2VudHJ5X2Zyb21fc2NhbmNvZGUoZGV2LCBjb2RlKTsKKwlzdHJ1Y3Qga2V5X2VudHJ5IHVua25vd25fa2U7CiAKIAlpZiAoa2UpIHsKIAkJc3BhcnNlX2tleW1hcF9yZXBvcnRfZW50cnkoZGV2LCBrZSwgdmFsdWUsIGF1dG9yZWxlYXNlKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCisJLyogUmVwb3J0IGFuIHVua25vd24ga2V5IGV2ZW50IGFzIGEgZGVidWdnaW5nIGFpZCAqLworCXVua25vd25fa2UudHlwZSA9IEtFX0tFWTsKKwl1bmtub3duX2tlLmNvZGUgPSBjb2RlOworCXVua25vd25fa2Uua2V5Y29kZSA9IEtFWV9VTktOT1dOOworCXNwYXJzZV9rZXltYXBfcmVwb3J0X2VudHJ5KGRldiwgJnVua25vd25fa2UsIHZhbHVlLCB0cnVlKTsKKwogCXJldHVybiBmYWxzZTsKIH0KIEVYUE9SVF9TWU1CT0woc3BhcnNlX2tleW1hcF9yZXBvcnRfZXZlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwppbmRleCA1NTk3NjM3Li4wOGJhNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwpAQCAtMTYsNiArMTYsMTQgQEAKICNpbmNsdWRlICJ3YWNvbS5oIgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CiAKKy8qIHJlc29sdXRpb24gZm9yIHBlbmFibGVkIGRldmljZXMgKi8KKyNkZWZpbmUgV0FDT01fUExfUkVTCQkyMAorI2RlZmluZSBXQUNPTV9QRU5QUlROX1JFUwk0MAorI2RlZmluZSBXQUNPTV9WT0xJVE9fUkVTCTUwCisjZGVmaW5lIFdBQ09NX0dSQVBISVJFX1JFUwk4MAorI2RlZmluZSBXQUNPTV9JTlRVT1NfUkVTCTEwMAorI2RlZmluZSBXQUNPTV9JTlRVT1MzX1JFUwkyMDAKKwogc3RhdGljIGludCB3YWNvbV9wZW5wYXJ0bmVyX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSkKIHsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CkBAIC0xMDU1LDYgKzEwNjMsMTkgQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCwgZmVhdHVyZXMtPnByZXNzdXJlX21heCwKIAkJCSAgICAgZmVhdHVyZXMtPnByZXNzdXJlX2Z1enosIDApOwogCisJaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9QRU4pIHsKKwkJLyogcGVuYWJsZWQgZGV2aWNlcyBoYXZlIGZpeGVkIHJlc29sdXRpb24gZm9yIGVhY2ggbW9kZWwgKi8KKwkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWCwgZmVhdHVyZXMtPnhfcmVzb2x1dGlvbik7CisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1ksIGZlYXR1cmVzLT55X3Jlc29sdXRpb24pOworCX0gZWxzZSB7CisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1gsCisJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT54X21heCwKKwkJCQkJCWZlYXR1cmVzLT54X3BoeSkpOworCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19ZLAorCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eV9tYXgsCisJCQkJCQlmZWF0dXJlcy0+eV9waHkpKTsKKwl9CisKIAlfX3NldF9iaXQoQUJTX01JU0MsIGlucHV0X2Rldi0+YWJzYml0KTsKIAogCXN3aXRjaCAod2Fjb21fd2FjLT5mZWF0dXJlcy50eXBlKSB7CkBAIC0xMTcxLDE1ICsxMTkyLDkgQEAKIAljYXNlIFRBQkxFVFBDOgogCQlfX2NsZWFyX2JpdChBQlNfTUlTQywgaW5wdXRfZGV2LT5hYnNiaXQpOwogCi0JCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgIT0gQlROX1RPT0xfUEVOKSB7Ci0JCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19YLAotCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnhfbWF4LAotCQkJCQkJCWZlYXR1cmVzLT54X3BoeSkpOwotCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWSwKLQkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT55X21heCwKLQkJCQkJCQlmZWF0dXJlcy0+eV9waHkpKTsKKwkJaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSAhPSBCVE5fVE9PTF9QRU4pCiAJCQlicmVhazsgIC8qIG5vIG5lZWQgdG8gcHJvY2VzcyBzdHlsdXMgc3R1ZmYgKi8KLQkJfQorCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCiAJY2FzZSBQTDoKQEAgLTEyMTYsMTIgKzEyMzEsNiBAQAogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfUFJFU1NVUkUsCiAJCQkJCSAgICAgMCwgZmVhdHVyZXMtPnByZXNzdXJlX21heCwKIAkJCQkJICAgICBmZWF0dXJlcy0+cHJlc3N1cmVfZnV6eiwgMCk7Ci0JCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19YLAotCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnhfbWF4LAotCQkJCQkJCWZlYXR1cmVzLT54X3BoeSkpOwotCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWSwKLQkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT55X21heCwKLQkJCQkJCQlmZWF0dXJlcy0+eV9waHkpKTsKIAkJfSBlbHNlIGlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfUEVOKSB7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUlVCQkVSLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUEVOLCBpbnB1dF9kZXYtPmtleWJpdCk7CkBAIC0xMjMzLDE2MSArMTI0MiwyNDIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDAwID0KLQl7ICJXYWNvbSBQZW5wYXJ0bmVyIiwgICAgIFdBQ09NX1BLR0xFTl9QRU5QUlROLCAgICA1MDQwLCAgMzc4MCwgIDI1NSwgIDAsIFBFTlBBUlRORVIgfTsKKwl7ICJXYWNvbSBQZW5wYXJ0bmVyIiwgICAgIFdBQ09NX1BLR0xFTl9QRU5QUlROLCAgICA1MDQwLCAgMzc4MCwgIDI1NSwKKwkgIDAsIFBFTlBBUlRORVIsIFdBQ09NX1BFTlBSVE5fUkVTLCBXQUNPTV9QRU5QUlROX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDEwID0KLQl7ICJXYWNvbSBHcmFwaGlyZSIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CisJeyAiV2Fjb20gR3JhcGhpcmUiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwNiwgIDc0MjIsICA1MTEsCisJICA2MywgR1JBUEhJUkUsIFdBQ09NX0dSQVBISVJFX1JFUywgV0FDT01fR1JBUEhJUkVfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTEgPQotCXsgIldhY29tIEdyYXBoaXJlMiA0eDUiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDYsICA3NDIyLCAgNTExLCA2MywgR1JBUEhJUkUgfTsKKwl7ICJXYWNvbSBHcmFwaGlyZTIgNHg1IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA2LCAgNzQyMiwgIDUxMSwKKwkgIDYzLCBHUkFQSElSRSwgV0FDT01fR1JBUEhJUkVfUkVTLCBXQUNPTV9HUkFQSElSRV9SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxMiA9Ci0JeyAiV2Fjb20gR3JhcGhpcmUyIDV4NyIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMzkxOCwgMTAyMDYsICA1MTEsIDYzLCBHUkFQSElSRSB9OworCXsgIldhY29tIEdyYXBoaXJlMiA1eDciLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTM5MTgsIDEwMjA2LCAgNTExLAorCSAgNjMsIEdSQVBISVJFLCBXQUNPTV9HUkFQSElSRV9SRVMsIFdBQ09NX0dSQVBISVJFX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDEzID0KLQl7ICJXYWNvbSBHcmFwaGlyZTMiLCAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgNjMsIEdSQVBISVJFIH07CisJeyAiV2Fjb20gR3JhcGhpcmUzIiwgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwOCwgIDc0MjQsICA1MTEsCisJICA2MywgR1JBUEhJUkUsIFdBQ09NX0dSQVBISVJFX1JFUywgV0FDT01fR1JBUEhJUkVfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTQgPQotCXsgIldhY29tIEdyYXBoaXJlMyA2eDgiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgR1JBUEhJUkUgfTsKKwl7ICJXYWNvbSBHcmFwaGlyZTMgNng4IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwKKwkgIDYzLCBHUkFQSElSRSwgV0FDT01fR1JBUEhJUkVfUkVTLCBXQUNPTV9HUkFQSElSRV9SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxNSA9Ci0JeyAiV2Fjb20gR3JhcGhpcmU0IDR4NSIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9OworCXsgIldhY29tIEdyYXBoaXJlNCA0eDUiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDgsICA3NDI0LCAgNTExLAorCSAgNjMsIFdBQ09NX0c0LCBXQUNPTV9HUkFQSElSRV9SRVMsIFdBQ09NX0dSQVBISVJFX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDE2ID0KLQl7ICJXYWNvbSBHcmFwaGlyZTQgNng4IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIFdBQ09NX0c0IH07CisJeyAiV2Fjb20gR3JhcGhpcmU0IDZ4OCIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxNjcwNCwgMTIwNjQsICA1MTEsCisJICA2MywgV0FDT01fRzQsIFdBQ09NX0dSQVBISVJFX1JFUywgV0FDT01fR1JBUEhJUkVfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTcgPQotCXsgIldhY29tIEJhbWJvb0Z1biA0eDUiLCAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfTsKKwl7ICJXYWNvbSBCYW1ib29GdW4gNHg1IiwgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzYwLCAgOTIyNSwgIDUxMSwKKwkgIDYzLCBXQUNPTV9NTywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDE4ID0KLQl7ICJXYWNvbSBCYW1ib29GdW4gNng4IiwgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDIxNjQ4LCAxMzUzMCwgIDUxMSwgNjMsIFdBQ09NX01PIH07CisJeyAiV2Fjb20gQmFtYm9vRnVuIDZ4OCIsICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAyMTY0OCwgMTM1MzAsICA1MTEsCisJICA2MywgV0FDT01fTU8sIFdBQ09NX0lOVFVPU19SRVMsIFdBQ09NX0lOVFVPU19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxOSA9Ci0JeyAiV2Fjb20gQmFtYm9vMSBNZWRpdW0iLCBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBHUkFQSElSRSB9OworCXsgIldhY29tIEJhbWJvbzEgTWVkaXVtIiwgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTY3MDQsIDEyMDY0LCAgNTExLAorCSAgNjMsIEdSQVBISVJFLCBXQUNPTV9HUkFQSElSRV9SRVMsIFdBQ09NX0dSQVBISVJFX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDYwID0KLQl7ICJXYWNvbSBWb2xpdG8iLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CisJeyAiV2Fjb20gVm9saXRvIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTEwNCwgIDM3MTIsICA1MTEsCisJICA2MywgR1JBUEhJUkUsIFdBQ09NX1ZPTElUT19SRVMsIFdBQ09NX1ZPTElUT19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2MSA9Ci0JeyAiV2Fjb20gUGVuU3RhdGlvbjIiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI1MCwgIDIzMjAsICAyNTUsIDYzLCBHUkFQSElSRSB9OworCXsgIldhY29tIFBlblN0YXRpb24yIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNTAsICAyMzIwLCAgMjU1LAorCSAgNjMsIEdSQVBISVJFLCBXQUNPTV9WT0xJVE9fUkVTLCBXQUNPTV9WT0xJVE9fUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NjIgPQotCXsgIldhY29tIFZvbGl0bzIgNHg1IiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfTsKKwl7ICJXYWNvbSBWb2xpdG8yIDR4NSIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwKKwkgIDYzLCBHUkFQSElSRSwgV0FDT01fVk9MSVRPX1JFUywgV0FDT01fVk9MSVRPX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDYzID0KLQl7ICJXYWNvbSBWb2xpdG8yIDJ4MyIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICAzMjQ4LCAgMjMyMCwgIDUxMSwgNjMsIEdSQVBISVJFIH07CisJeyAiV2Fjb20gVm9saXRvMiAyeDMiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI0OCwgIDIzMjAsICA1MTEsCisJICA2MywgR1JBUEhJUkUsIFdBQ09NX1ZPTElUT19SRVMsIFdBQ09NX1ZPTElUT19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2NCA9Ci0JeyAiV2Fjb20gUGVuUGFydG5lcjIiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI1MCwgIDIzMjAsICA1MTEsIDYzLCBHUkFQSElSRSB9OworCXsgIldhY29tIFBlblBhcnRuZXIyIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNTAsICAyMzIwLCAgNTExLAorCSAgNjMsIEdSQVBISVJFLCBXQUNPTV9WT0xJVE9fUkVTLCBXQUNPTV9WT0xJVE9fUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NjUgPQotCXsgIldhY29tIEJhbWJvbyIsICAgICAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfTsKKwl7ICJXYWNvbSBCYW1ib28iLCAgICAgICAgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzYwLCAgOTIyNSwgIDUxMSwKKwkgIDYzLCBXQUNPTV9NTywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDY5ID0KLQl7ICJXYWNvbSBCYW1ib28xIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CisJeyAiV2Fjb20gQmFtYm9vMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTEwNCwgIDM3MTIsICA1MTEsCisJICA2MywgR1JBUEhJUkUsIFdBQ09NX1BFTlBSVE5fUkVTLCBXQUNPTV9QRU5QUlROX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDIwID0KLQl7ICJXYWNvbSBJbnR1b3MgNHg1IiwgICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDEyNzAwLCAxMDYwMCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvcyA0eDUiLCAgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMTI3MDAsIDEwNjAwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDIxID0KLQl7ICJXYWNvbSBJbnR1b3MgNng4IiwgICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvcyA2eDgiLCAgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDIyID0KLQl7ICJXYWNvbSBJbnR1b3MgOXgxMiIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAyNDA2MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvcyA5eDEyIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDI0MDYwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDIzID0KLQl7ICJXYWNvbSBJbnR1b3MgMTJ4MTIiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvcyAxMngxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDMxNjgwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDI0ID0KLQl7ICJXYWNvbSBJbnR1b3MgMTJ4MTgiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ1NzIwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvcyAxMngxOCIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDU3MjAsIDMxNjgwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDMwID0KLQl7ICJXYWNvbSBQTDQwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1NDA4LCAgNDA1NiwgIDI1NSwgIDAsIFBMIH07CisJeyAiV2Fjb20gUEw0MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTQwOCwgIDQwNTYsICAyNTUsCisJICAwLCBQTCwgV0FDT01fUExfUkVTLCBXQUNPTV9QTF9SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzMSA9Ci0JeyAiV2Fjb20gUEw1MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjE0NCwgIDQ2MDgsICAyNTUsICAwLCBQTCB9OworCXsgIldhY29tIFBMNTAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYxNDQsICA0NjA4LCAgMjU1LAorCSAgMCwgUEwsIFdBQ09NX1BMX1JFUywgV0FDT01fUExfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzIgPQotCXsgIldhY29tIFBMNjAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYxMjYsICA0NjA0LCAgMjU1LCAgMCwgUEwgfTsKKwl7ICJXYWNvbSBQTDYwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MTI2LCAgNDYwNCwgIDI1NSwKKwkgIDAsIFBMLCBXQUNPTV9QTF9SRVMsIFdBQ09NX1BMX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDMzID0KLQl7ICJXYWNvbSBQTDYwMFNYIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MjYwLCAgNTAxNiwgIDI1NSwgIDAsIFBMIH07CisJeyAiV2Fjb20gUEw2MDBTWCIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI2MCwgIDUwMTYsICAyNTUsCisJICAwLCBQTCwgV0FDT01fUExfUkVTLCBXQUNPTV9QTF9SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzNCA9Ci0JeyAiV2Fjb20gUEw1NTAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjE0NCwgIDQ2MDgsICA1MTEsICAwLCBQTCB9OworCXsgIldhY29tIFBMNTUwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYxNDQsICA0NjA4LCAgNTExLAorCSAgMCwgUEwsIFdBQ09NX1BMX1JFUywgV0FDT01fUExfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzUgPQotCXsgIldhY29tIFBMODAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDcyMjAsICA1NzgwLCAgNTExLCAgMCwgUEwgfTsKKwl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA3MjIwLCAgNTc4MCwgIDUxMSwKKwkgIDAsIFBMLCBXQUNPTV9QTF9SRVMsIFdBQ09NX1BMX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDM3ID0KLQl7ICJXYWNvbSBQTDcwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2NzU4LCAgNTQwNiwgIDUxMSwgIDAsIFBMIH07CisJeyAiV2Fjb20gUEw3MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjc1OCwgIDU0MDYsICA1MTEsCisJICAwLCBQTCwgV0FDT01fUExfUkVTLCBXQUNPTV9QTF9SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzOCA9Ci0JeyAiV2Fjb20gUEw1MTAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI4MiwgIDQ3NjIsICA1MTEsICAwLCBQTCB9OworCXsgIldhY29tIFBMNTEwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYyODIsICA0NzYyLCAgNTExLAorCSAgMCwgUEwsIFdBQ09NX1BMX1JFUywgV0FDT01fUExfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzkgPQotCXsgIldhY29tIERUVTcxMCIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMzQwODAsIDI3NjYwLCAgNTExLCAgMCwgUEwgfTsKKwl7ICJXYWNvbSBEVFU3MTAiLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDM0MDgwLCAyNzY2MCwgIDUxMSwKKwkgIDAsIFBMLCBXQUNPTV9QTF9SRVMsIFdBQ09NX1BMX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEM0ID0KLQl7ICJXYWNvbSBEVEY1MjEiLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MjgyLCAgNDc2MiwgIDUxMSwgIDAsIFBMIH07CisJeyAiV2Fjb20gRFRGNTIxIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI4MiwgIDQ3NjIsICA1MTEsCisJICAwLCBQTCwgV0FDT01fUExfUkVTLCBXQUNPTV9QTF9SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDMCA9Ci0JeyAiV2Fjb20gRFRGNzIwIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjg1OCwgIDU1MDYsICA1MTEsICAwLCBQTCB9OworCXsgIldhY29tIERURjcyMCIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDY4NTgsICA1NTA2LCAgNTExLAorCSAgMCwgUEwsIFdBQ09NX1BMX1JFUywgV0FDT01fUExfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzIgPQotCXsgIldhY29tIERURjcyMGEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDY4NTgsICA1NTA2LCAgNTExLCAgMCwgUEwgfTsKKwl7ICJXYWNvbSBEVEY3MjBhIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2ODU4LCAgNTUwNiwgIDUxMSwKKwkgIDAsIFBMLCBXQUNPTV9QTF9SRVMsIFdBQ09NX1BMX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDAzID0KLQl7ICJXYWNvbSBDaW50aXEgUGFydG5lciIsIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDIwNDgwLCAxNTM2MCwgIDUxMSwgIDAsIFBUVSB9OworCXsgIldhY29tIENpbnRpcSBQYXJ0bmVyIiwgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjA0ODAsIDE1MzYwLCAgNTExLAorCSAgMCwgUFRVLCBXQUNPTV9QTF9SRVMsIFdBQ09NX1BMX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDQxID0KLQl7ICJXYWNvbSBJbnR1b3MyIDR4NSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDEyNzAwLCAxMDYwMCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvczIgNHg1IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMTI3MDAsIDEwNjAwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDQyID0KLQl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvczIgNng4IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDQzID0KLQl7ICJXYWNvbSBJbnR1b3MyIDl4MTIiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAyNDA2MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvczIgOXgxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDI0MDYwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDQ0ID0KLQl7ICJXYWNvbSBJbnR1b3MyIDEyeDEyIiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvczIgMTJ4MTIiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDMxNjgwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDQ1ID0KLQl7ICJXYWNvbSBJbnR1b3MyIDEyeDE4IiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ1NzIwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9OworCXsgIldhY29tIEludHVvczIgMTJ4MTgiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDU3MjAsIDMxNjgwLCAxMDIzLAorCSAgMzEsIElOVFVPUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEIwID0KLQl7ICJXYWNvbSBJbnR1b3MzIDR4NSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDI1NDAwLCAyMDMyMCwgMTAyMywgNjMsIElOVFVPUzNTIH07CisJeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyNTQwMCwgMjAzMjAsIDEwMjMsCisJICA2MywgSU5UVU9TM1MsIFdBQ09NX0lOVFVPUzNfUkVTLCBXQUNPTV9JTlRVT1MzX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEIxID0KLQl7ICJXYWNvbSBJbnR1b3MzIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQwNjQwLCAzMDQ4MCwgMTAyMywgNjMsIElOVFVPUzMgfTsKKwl7ICJXYWNvbSBJbnR1b3MzIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQwNjQwLCAzMDQ4MCwgMTAyMywKKwkgIDYzLCBJTlRVT1MzLCBXQUNPTV9JTlRVT1MzX1JFUywgV0FDT01fSU5UVU9TM19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCMiA9Ci0JeyAiV2Fjb20gSW50dW9zMyA5eDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2MDk2MCwgNDU3MjAsIDEwMjMsIDYzLCBJTlRVT1MzIH07CisJeyAiV2Fjb20gSW50dW9zMyA5eDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2MDk2MCwgNDU3MjAsIDEwMjMsCisJICA2MywgSU5UVU9TMywgV0FDT01fSU5UVU9TM19SRVMsIFdBQ09NX0lOVFVPUzNfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjMgPQotCXsgIldhY29tIEludHVvczMgMTJ4MTIiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNjA5NjAsIDYwOTYwLCAxMDIzLCA2MywgSU5UVU9TM0wgfTsKKwl7ICJXYWNvbSBJbnR1b3MzIDEyeDEyIiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDYwOTYwLCA2MDk2MCwgMTAyMywKKwkgIDYzLCBJTlRVT1MzTCwgV0FDT01fSU5UVU9TM19SRVMsIFdBQ09NX0lOVFVPUzNfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjQgPQotCXsgIldhY29tIEludHVvczMgMTJ4MTkiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgOTc1MzYsIDYwOTYwLCAxMDIzLCA2MywgSU5UVU9TM0wgfTsKKwl7ICJXYWNvbSBJbnR1b3MzIDEyeDE5IiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDk3NTM2LCA2MDk2MCwgMTAyMywKKwkgIDYzLCBJTlRVT1MzTCwgV0FDT01fSU5UVU9TM19SRVMsIFdBQ09NX0lOVFVPUzNfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjUgPQotCXsgIldhY29tIEludHVvczMgNngxMSIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNTQyMDQsIDMxNzUwLCAxMDIzLCA2MywgSU5UVU9TMyB9OworCXsgIldhY29tIEludHVvczMgNngxMSIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNTQyMDQsIDMxNzUwLCAxMDIzLAorCSAgNjMsIElOVFVPUzMsIFdBQ09NX0lOVFVPUzNfUkVTLCBXQUNPTV9JTlRVT1MzX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEI3ID0KLQl7ICJXYWNvbSBJbnR1b3MzIDR4NiIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMxNDk2LCAxOTY4NSwgMTAyMywgNjMsIElOVFVPUzNTIH07CisJeyAiV2Fjb20gSW50dW9zMyA0eDYiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMTQ5NiwgMTk2ODUsIDEwMjMsCisJICA2MywgSU5UVU9TM1MsIFdBQ09NX0lOVFVPUzNfUkVTLCBXQUNPTV9JTlRVT1MzX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEI4ID0KLQl7ICJXYWNvbSBJbnR1b3M0IDR4NiIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMxNDk2LCAxOTY4NSwgMjA0NywgNjMsIElOVFVPUzRTIH07CisJeyAiV2Fjb20gSW50dW9zNCA0eDYiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMTQ5NiwgMTk2ODUsIDIwNDcsCisJICA2MywgSU5UVU9TNFMsIFdBQ09NX0lOVFVPUzNfUkVTLCBXQUNPTV9JTlRVT1MzX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEI5ID0KLQl7ICJXYWNvbSBJbnR1b3M0IDZ4OSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ0NzA0LCAyNzk0MCwgMjA0NywgNjMsIElOVFVPUzQgfTsKKwl7ICJXYWNvbSBJbnR1b3M0IDZ4OSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ0NzA0LCAyNzk0MCwgMjA0NywKKwkgIDYzLCBJTlRVT1M0LCBXQUNPTV9JTlRVT1MzX1JFUywgV0FDT01fSU5UVU9TM19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCQSA9Ci0JeyAiV2Fjb20gSW50dW9zNCA4eDEzIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2NTAyNCwgNDA2NDAsIDIwNDcsIDYzLCBJTlRVT1M0TCB9OworCXsgIldhY29tIEludHVvczQgOHgxMyIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNjUwMjQsIDQwNjQwLCAyMDQ3LAorCSAgNjMsIElOVFVPUzRMLCBXQUNPTV9JTlRVT1MzX1JFUywgV0FDT01fSU5UVU9TM19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCQiA9Ci0JeyAiV2Fjb20gSW50dW9zNCAxMngxOSIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA5NzUzNiwgNjA5NjAsIDIwNDcsIDYzLCBJTlRVT1M0TCB9OworCXsgIldhY29tIEludHVvczQgMTJ4MTkiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgOTc1MzYsIDYwOTYwLCAyMDQ3LAorCSAgNjMsIElOVFVPUzRMLCBXQUNPTV9JTlRVT1MzX1JFUywgV0FDT01fSU5UVU9TM19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCQyA9Ci0JeyAiV2Fjb20gSW50dW9zNCBXTCIsICAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0MDg0MCwgMjU0MDAsIDIwNDcsIDYzLCBJTlRVT1M0IH07CisJeyAiV2Fjb20gSW50dW9zNCBXTCIsICAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0MDg0MCwgMjU0MDAsIDIwNDcsCisJICA2MywgSU5UVU9TNCwgV0FDT01fSU5UVU9TM19SRVMsIFdBQ09NX0lOVFVPUzNfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4M0YgPQotCXsgIldhY29tIENpbnRpcSAyMVVYIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgODcyMDAsIDY1NjAwLCAxMDIzLCA2MywgQ0lOVElRIH07CisJeyAiV2Fjb20gQ2ludGlxIDIxVVgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NzIwMCwgNjU2MDAsIDEwMjMsCisJICA2MywgQ0lOVElRLCBXQUNPTV9JTlRVT1MzX1JFUywgV0FDT01fSU5UVU9TM19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDNSA9Ci0JeyAiV2Fjb20gQ2ludGlxIDIwV1NYIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NjY4MCwgNTQxODAsIDEwMjMsIDYzLCBXQUNPTV9CRUUgfTsKKwl7ICJXYWNvbSBDaW50aXEgMjBXU1giLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDg2NjgwLCA1NDE4MCwgMTAyMywKKwkgIDYzLCBXQUNPTV9CRUUsIFdBQ09NX0lOVFVPUzNfUkVTLCBXQUNPTV9JTlRVT1MzX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEM2ID0KLQl7ICJXYWNvbSBDaW50aXEgMTJXWCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDUzMDIwLCAzMzQ0MCwgMTAyMywgNjMsIFdBQ09NX0JFRSB9OworCXsgIldhY29tIENpbnRpcSAxMldYIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNTMwMjAsIDMzNDQwLCAxMDIzLAorCSAgNjMsIFdBQ09NX0JFRSwgV0FDT01fSU5UVU9TM19SRVMsIFdBQ09NX0lOVFVPUzNfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzcgPQotCXsgIldhY29tIERUVTE5MzEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMzc4MzIsIDMwMzA1LCAgNTExLCAgMCwgUEwgfTsKKwl7ICJXYWNvbSBEVFUxOTMxIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDM3ODMyLCAzMDMwNSwgIDUxMSwKKwkgIDAsIFBMLCBXQUNPTV9JTlRVT1NfUkVTLCBXQUNPTV9JTlRVT1NfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4Q0UgPQotCXsgIldhY29tIERUVTIyMzEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgNDc4NjQsIDI3MDExLCAgNTExLCAgMCwgRFRVIH07CisJeyAiV2Fjb20gRFRVMjIzMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICA0Nzg2NCwgMjcwMTEsICA1MTEsCisJICAwLCBEVFUsIFdBQ09NX0lOVFVPU19SRVMsIFdBQ09NX0lOVFVPU19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhGMCA9Ci0JeyAiV2Fjb20gRFRVMTYzMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAzNDYyMywgMTk1NTMsICA1MTEsICAwLCBEVFUgfTsKKwl7ICJXYWNvbSBEVFUxNjMxIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDM0NjIzLCAxOTU1MywgIDUxMSwKKwkgIDAsIERUVSwgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weENDID0KLQl7ICJXYWNvbSBDaW50aXEgMjFVWDIiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDg3MjAwLCA2NTYwMCwgMjA0NywgNjMsIFdBQ09NXzIxVVgyIH07CisJeyAiV2Fjb20gQ2ludGlxIDIxVVgyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NzIwMCwgNjU2MDAsIDIwNDcsCisJICA2MywgV0FDT01fMjFVWDIsIFdBQ09NX0lOVFVPUzNfUkVTLCBXQUNPTV9JTlRVT1MzX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDkwID0KLQl7ICJXYWNvbSBJU0R2NCA5MCIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH07CisJeyAiV2Fjb20gSVNEdjQgOTAiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsCisJICAwLCBUQUJMRVRQQywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDkzID0KLQl7ICJXYWNvbSBJU0R2NCA5MyIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH07CisJeyAiV2Fjb20gSVNEdjQgOTMiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsCisJICAwLCBUQUJMRVRQQywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDlBID0KLQl7ICJXYWNvbSBJU0R2NCA5QSIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH07CisJeyAiV2Fjb20gSVNEdjQgOUEiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsCisJICAwLCBUQUJMRVRQQywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDlGID0KLQl7ICJXYWNvbSBJU0R2NCA5RiIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH07CisJeyAiV2Fjb20gSVNEdjQgOUYiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsCisJICAwLCBUQUJMRVRQQywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEUyID0KLQl7ICJXYWNvbSBJU0R2NCBFMiIsICAgICAgIFdBQ09NX1BLR0xFTl9UUEMyRkcsICAgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDMkZHIH07CisJeyAiV2Fjb20gSVNEdjQgRTIiLCAgICAgICBXQUNPTV9QS0dMRU5fVFBDMkZHLCAgICAyNjIwMiwgMTYzMjUsICAyNTUsCisJICAwLCBUQUJMRVRQQzJGRywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEUzID0KLQl7ICJXYWNvbSBJU0R2NCBFMyIsICAgICAgIFdBQ09NX1BLR0xFTl9UUEMyRkcsICAgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDMkZHIH07CisJeyAiV2Fjb20gSVNEdjQgRTMiLCAgICAgICBXQUNPTV9QS0dMRU5fVFBDMkZHLCAgICAyNjIwMiwgMTYzMjUsICAyNTUsCisJICAwLCBUQUJMRVRQQzJGRywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEU2ID0KKwl7ICJXYWNvbSBJU0R2NCBFNiIsICAgICAgIFdBQ09NX1BLR0xFTl9UUEMyRkcsICAgIDI3NzYwLCAxNTY5NCwgIDI1NSwKKwkgIDAsIFRBQkxFVFBDMkZHLCBXQUNPTV9JTlRVT1NfUkVTLCBXQUNPTV9JTlRVT1NfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NDcgPQotCXsgIldhY29tIEludHVvczIgNng4IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH07Ci1zdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDAgPQotCXsgIldhY29tIEJhbWJvbyAyRkciLCAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3MjAsICA5MjAwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07Ci1zdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDEgPQotCXsgIldhY29tIEJhbWJvbyAyRkcgNHg1IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3MjAsICA5MjAwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07Ci1zdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDIgPQotCXsgIldhY29tIEJhbWJvbyBDcmFmdCIsICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3MjAsICA5MjAwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07Ci1zdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDMgPQotCXsgIldhY29tIEJhbWJvbyAyRkcgNng4IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMjE2NDgsIDEzNTMwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CisJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyMDMyMCwgMTYyNDAsIDEwMjMsCisJICAzMSwgSU5UVU9TLCBXQUNPTV9JTlRVT1NfUkVTLCBXQUNPTV9JTlRVT1NfUkVTIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDAgPQorCXsgIldhY29tIEJhbWJvbyAyRkciLCAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3MjAsICA5MjAwLCAxMDIzLAorCSAgNjMsIEJBTUJPT19QVCwgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQxID0KKwl7ICJXYWNvbSBCYW1ib28gMkZHIDR4NSIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzIwLCAgOTIwMCwgMTAyMywKKwkgIDYzLCBCQU1CT09fUFQsIFdBQ09NX0lOVFVPU19SRVMsIFdBQ09NX0lOVFVPU19SRVMgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhEMiA9CisJeyAiV2Fjb20gQmFtYm9vIENyYWZ0IiwgICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAxNDcyMCwgIDkyMDAsIDEwMjMsCisJICA2MywgQkFNQk9PX1BULCBXQUNPTV9JTlRVT1NfUkVTLCBXQUNPTV9JTlRVT1NfUkVTIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDMgPQorCXsgIldhY29tIEJhbWJvbyAyRkcgNng4IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMjE2NDgsIDEzNTMwLCAxMDIzLAorCSAgNjMsIEJBTUJPT19QVCwgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ0ID0KLQl7ICJXYWNvbSBCYW1ib28gUGVuIiwgICAgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzIwLCAgOTIwMCwgIDI1NSwgNjMsIEJBTUJPT19QVCB9Owotc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ2ID0KLQl7ICJXYWNvbSBCYW1ib29QVCAyRkcgNHg1IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgIDE0NzIwLCAgOTIwMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owotc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ3ID0KLQl7ICJXYWNvbSBCYW1ib29QVCAyRkcgU21hbGwiLCBXQUNPTV9QS0dMRU5fQkJGVU4sIDE0NzIwLCAgOTIwMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owotc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ4ID0KLQl7ICJXYWNvbSBCYW1ib28gQ29taWMgMkZHIiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgIDIxNjQ4LCAxMzUzMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9Owotc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weERBID0KLQl7ICJXYWNvbSBCYW1ib28gMkZHIDR4NSBTRSIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgIDE0NzIwLCAgOTIwMCwgMTAyMywgNjMsIEJBTUJPT19QVCB9OworCXsgIldhY29tIEJhbWJvbyBQZW4iLCAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3MjAsICA5MjAwLCAgMjU1LAorCSAgNjMsIEJBTUJPT19QVCwgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ2ID0KKwl7ICJXYWNvbSBCYW1ib29QVCAyRkcgNHg1IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgIDE0NzIwLCAgOTIwMCwgMTAyMywKKwkgIDYzLCBCQU1CT09fUFQsIFdBQ09NX0lOVFVPU19SRVMsIFdBQ09NX0lOVFVPU19SRVMgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhENyA9CisJeyAiV2Fjb20gQmFtYm9vUFQgMkZHIFNtYWxsIiwgV0FDT01fUEtHTEVOX0JCRlVOLCAxNDcyMCwgIDkyMDAsIDEwMjMsCisJICA2MywgQkFNQk9PX1BULCBXQUNPTV9JTlRVT1NfUkVTLCBXQUNPTV9JTlRVT1NfUkVTIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDggPQorCXsgIldhY29tIEJhbWJvbyBDb21pYyAyRkciLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAgMjE2NDgsIDEzNTMwLCAxMDIzLAorCSAgNjMsIEJBTUJPT19QVCwgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weERBID0KKwl7ICJXYWNvbSBCYW1ib28gMkZHIDR4NSBTRSIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgIDE0NzIwLCAgOTIwMCwgMTAyMywKKwkgIDYzLCBCQU1CT09fUFQsIFdBQ09NX0lOVFVPU19SRVMsIFdBQ09NX0lOVFVPU19SRVMgfTsKIHN0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhEQiA9Ci0JeyAiV2Fjb20gQmFtYm9vIDJGRyA2eDggU0UiLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAyMTY0OCwgMTM1MzAsIDEwMjMsIDYzLCBCQU1CT09fUFQgfTsKKwl7ICJXYWNvbSBCYW1ib28gMkZHIDZ4OCBTRSIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgIDIxNjQ4LCAxMzUzMCwgMTAyMywKKwkgIDYzLCBCQU1CT09fUFQsIFdBQ09NX0lOVFVPU19SRVMsIFdBQ09NX0lOVFVPU19SRVMgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2MDA0ID0KLQl7ICJJU0QtVjQiLCAgICAgICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEyODAwLCA4MDAwLCAyNTUsIDAsIFRBQkxFVFBDIH07CisJeyAiSVNELVY0IiwgICAgICAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMjgwMCwgIDgwMDAsICAyNTUsCisJICAwLCBUQUJMRVRQQywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9OwogCiAjZGVmaW5lIFVTQl9ERVZJQ0VfV0FDT00ocHJvZCkJCQkJCVwKIAlVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIHByb2QpLAkJCVwKQEAgLTE0NzQsNiArMTU2NCw3IEBACiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4OUYpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RTIpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4RTMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RTYpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4NDcpIH0sCiAJeyBVU0JfREVWSUNFX0xFTk9WTygweDYwMDQpIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCmluZGV4IDgzNWY3NTYuLjUzZWI3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCkBAIC03NCw2ICs3NCw4IEBACiAJaW50IHByZXNzdXJlX21heDsKIAlpbnQgZGlzdGFuY2VfbWF4OwogCWludCB0eXBlOworCWludCB4X3Jlc29sdXRpb247CisJaW50IHlfcmVzb2x1dGlvbjsKIAlpbnQgZGV2aWNlX3R5cGU7CiAJaW50IHhfcGh5OwogCWludCB5X3BoeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggYzI0OTQ2Zi4uMWRlMWMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTI4MSwxNyArMjgxLDI0IEBACiAJdTgJCQljb21tYW5kOwogCXU4CQkJcmVmX29mZjsKIAl1MTYJCQlzY3JhdGNoOwotCV9fYmUxNgkJCXNhbXBsZTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlcls2XTsKKwkvKgorCSAqIERNQSAodGh1cyBjYWNoZSBjb2hlcmVuY3kgbWFpbnRlbmFuY2UpIHJlcXVpcmVzIHRoZQorCSAqIHRyYW5zZmVyIGJ1ZmZlcnMgdG8gbGl2ZSBpbiB0aGVpciBvd24gY2FjaGUgbGluZXMuCisJICovCisJX19iZTE2IHNhbXBsZSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiB9OwogCiBzdHJ1Y3QgYWRzNzg0NV9zZXJfcmVxIHsKIAl1OAkJCWNvbW1hbmRbM107Ci0JdTgJCQlwd3Jkb3duWzNdOwotCXU4CQkJc2FtcGxlWzNdOwogCXN0cnVjdCBzcGlfbWVzc2FnZQltc2c7CiAJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzJdOworCS8qCisJICogRE1BICh0aHVzIGNhY2hlIGNvaGVyZW5jeSBtYWludGVuYW5jZSkgcmVxdWlyZXMgdGhlCisJICogdHJhbnNmZXIgYnVmZmVycyB0byBsaXZlIGluIHRoZWlyIG93biBjYWNoZSBsaW5lcy4KKwkgKi8KKwl1OCBzYW1wbGVbM10gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogfTsKIAogc3RhdGljIGludCBhZHM3ODQ2X3JlYWQxMl9zZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjb21tYW5kKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCmluZGV4IGI0ZDdmNjMuLjQ1ZjkzZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgUHJvZ3JhbW1lciBoYXMgbm8gY29udHJvbCBvdmVyIHRoZXNlIG51bWJlcnMuCiAgICAgICAgIFRPRE8gdGhlcmUgYXJlIGhvbGVzIC0gc3BlY2lmaWNhbGx5ICAxLDcsMHgwYQogKi8KLSNkZWZpbmUgVkVSU0lPTl9JRCAgICAgICAgICAgICAgMCAgICAgICAvKiBHZXQgVmVyc2lvbiAocmVxdWVzdC9yZXNwb3NlKSAqLworI2RlZmluZSBWRVJTSU9OX0lEICAgICAgICAgICAgICAwICAgICAgIC8qIEdldCBWZXJzaW9uIChyZXF1ZXN0L3Jlc3BvbnNlKSAqLwogI2RlZmluZSBLRVlCRF9JRCAgICAgICAgICAgICAgICAyICAgICAgIC8qIEtleWJvYXJkIChldmVudCkgKi8KICNkZWZpbmUgVE9VQ0hTX0lEICAgICAgICAgICAgICAgMyAgICAgICAvKiBUb3VjaCBTY3JlZW4gKGV2ZW50KSovCiAjZGVmaW5lIEVFUFJPTV9SRUFEX0lEICAgICAgICAgIDQgICAgICAgLyogKHJlcXVlc3QvcmVzcG9uc2UpICovCkBAIC0zOTksMzEgKzM5OSwzNCBAQAogCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAiaDM2MDBfYWN0aW9uIiwgJnRzLT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaDM2MDB0cy5jOiBDb3VsZCBub3QgYWxsb2NhdGUgQWN0aW9uIEJ1dHRvbiBJUlEhXG4iKTsKIAkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWwxOwogCX0KIAogCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJT19CSVRTWV9OUE9XRVJfQlVUVE9OLCBucG93ZXJfYnV0dG9uX2hhbmRsZXIsCiAJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJoMzYwMF9zdXNwZW5kIiwgJnRzLT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaDM2MDB0cy5jOiBDb3VsZCBub3QgYWxsb2NhdGUgUG93ZXIgQnV0dG9uIElSUSFcbiIpOwogCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZmFpbDM7CisJCWdvdG8gZmFpbDI7CiAJfQogCiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIHRzKTsKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBmYWlsMzsKIAogCS8vaDM2MDBfZmxpdGVfY29udHJvbCgxLCAyNSk7ICAgICAvKiBkZWZhdWx0IGJyaWdodG5lc3MgKi8KLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodHMtPmRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRzLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDQ7CiAKIAlyZXR1cm4gMDsKIAotZmFpbDM6CWZyZWVfaXJxKElSUV9HUElPX0JJVFNZX05QT1dFUl9CVVRUT04sIHRzLT5kZXYpOworZmFpbDQ6CXNlcmlvX2Nsb3NlKHNlcmlvKTsKK2ZhaWwzOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisJZnJlZV9pcnEoSVJRX0dQSU9fQklUU1lfTlBPV0VSX0JVVFRPTiwgdHMtPmRldik7CiBmYWlsMjoJZnJlZV9pcnEoSVJRX0dQSU9fQklUU1lfQUNUSU9OX0JVVFRPTiwgdHMtPmRldik7Ci1mYWlsMToJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CitmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZSh0cyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaW50ZWwtbWlkLXRvdWNoLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2ludGVsLW1pZC10b3VjaC5jCmluZGV4IGMwMzA3YjIuLjY2Yzk2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaW50ZWwtbWlkLXRvdWNoLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9pbnRlbC1taWQtdG91Y2guYwpAQCAtNTQyLDcgKzU0Miw3IEBACiAJICogQURDIHBvd2VyIG9uLCBzdGFydCwgZW5hYmxlIFBFTkRFVCBhbmQgc2V0IGxvb3AgZGVsYXkKIAkgKiBBREMgbG9vcCBkZWxheSBpcyBzZXQgdG8gNC41IG1zIGFwcHJveGltYXRlbHkKIAkgKiBMb29wIGRlbGF5IG1vcmUgdGhhbiB0aGlzIHJlc3VsdHMgaW4gaml0dGVyIGluIGFkYyByZWFkaW5ncwotCSAqIFNldHRpbmcgbG9vcCBkZWxheSB0byAwIChjb250aW5vdXMgbG9vcCkgaW4gTUFYSU0gc3RvcHMgUEVOREVUCisJICogU2V0dGluZyBsb29wIGRlbGF5IHRvIDAgKGNvbnRpbnVvdXMgbG9vcCkgaW4gTUFYSU0gc3RvcHMgUEVOREVUCiAJICogaW50ZXJydXB0IGdlbmVyYXRpb24gc29tZXRpbWVzLgogCSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jCmluZGV4IDAyOGE1MzYuLjNiNWI1ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jCkBAIC02LDcgKzYsNyBAQAogICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFNwbGl0aW5nIGRvbmUgYnk6IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+Ci0gKiBJZiBzb21ldGhpbmcgZG9lc250IHdvcmsgYW5kIGl0IHdvcmtlZCBiZWZvcmUgc3BsaXRpbmcsIGUtbWFpbCBtZSwKKyAqIElmIHNvbWV0aGluZyBkb2Vzbid0IHdvcmsgYW5kIGl0IHdvcmtlZCBiZWZvcmUgc3BsaXRpbmcsIGUtbWFpbCBtZSwKICAqIGRvbnQgYm90aGVyIE5pY29sYXMgcGxlYXNlIDstKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtODMxeC10cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYwppbmRleCA2YWUwNTRmLi45MTc1ZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtODMxeC10cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd204MzF4LXRzLmMKQEAgLTY4LDggKzY4LDIzIEBACiAJdW5zaWduZWQgaW50IHBkX2lycTsKIAlib29sIHByZXNzdXJlOwogCWJvb2wgcGVuX2Rvd247CisJc3RydWN0IHdvcmtfc3RydWN0IHBkX2RhdGFfd29yazsKIH07CiAKK3N0YXRpYyB2b2lkIHdtODMxeF9wZF9kYXRhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3bTgzMXhfdHMgKndtODMxeF90cyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd204MzF4X3RzLCBwZF9kYXRhX3dvcmspOworCisJaWYgKHdtODMxeF90cy0+cGVuX2Rvd24pIHsKKwkJZW5hYmxlX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKKwkJZGV2X2RiZyh3bTgzMXhfdHMtPndtODMxeC0+ZGV2LCAiSVJRIFBELT5EQVRBIGRvbmVcbiIpOworCX0gZWxzZSB7CisJCWVuYWJsZV9pcnEod204MzF4X3RzLT5wZF9pcnEpOworCQlkZXZfZGJnKHdtODMxeF90cy0+d204MzF4LT5kZXYsICJJUlEgREFUQS0+UEQgZG9uZVxuIik7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgd204MzF4X3RzX2RhdGFfaXJxKGludCBpcnEsIHZvaWQgKmlycV9kYXRhKQogewogCXN0cnVjdCB3bTgzMXhfdHMgKndtODMxeF90cyA9IGlycV9kYXRhOwpAQCAtMTEwLDYgKzEyNSw5IEBACiAJfQogCiAJaWYgKCF3bTgzMXhfdHMtPnBlbl9kb3duKSB7CisJCS8qIFN3aXRjaCBmcm9tIGRhdGEgdG8gcGVuIGRvd24gKi8KKwkJZGV2X2RiZyh3bTgzMXgtPmRldiwgIklSUSBEQVRBLT5QRFxuIik7CisKIAkJZGlzYWJsZV9pcnFfbm9zeW5jKHdtODMxeF90cy0+ZGF0YV9pcnEpOwogCiAJCS8qIERvbid0IG5lZWQgZGF0YSBhbnkgbW9yZSAqLwpAQCAtMTI4LDYgKzE0NiwxMCBAQAogCQkJCQkgQUJTX1BSRVNTVVJFLCAwKTsKIAogCQlpbnB1dF9yZXBvcnRfa2V5KHdtODMxeF90cy0+aW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDApOworCisJCXNjaGVkdWxlX3dvcmsoJndtODMxeF90cy0+cGRfZGF0YV93b3JrKTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfa2V5KHdtODMxeF90cy0+aW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDEpOwogCX0KIAogCWlucHV0X3N5bmMod204MzF4X3RzLT5pbnB1dF9kZXYpOwpAQCAtMTQxLDYgKzE2MywxMSBAQAogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF90cy0+d204MzF4OwogCWludCBlbmEgPSAwOwogCisJaWYgKHdtODMxeF90cy0+cGVuX2Rvd24pCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCWRpc2FibGVfaXJxX25vc3luYyh3bTgzMXhfdHMtPnBkX2lycSk7CisKIAkvKiBTdGFydCBjb2xsZWN0aW5nIGRhdGEgKi8KIAlpZiAod204MzF4X3RzLT5wcmVzc3VyZSkKIAkJZW5hIHw9IFdNODMxWF9UQ0hfWl9FTkE7CkBAIC0xNDksMTQgKzE3NiwxNCBAQAogCQkJV004MzFYX1RDSF9YX0VOQSB8IFdNODMxWF9UQ0hfWV9FTkEgfCBXTTgzMVhfVENIX1pfRU5BLAogCQkJV004MzFYX1RDSF9YX0VOQSB8IFdNODMxWF9UQ0hfWV9FTkEgfCBlbmEpOwogCi0JaW5wdXRfcmVwb3J0X2tleSh3bTgzMXhfdHMtPmlucHV0X2RldiwgQlROX1RPVUNILCAxKTsKLQlpbnB1dF9zeW5jKHdtODMxeF90cy0+aW5wdXRfZGV2KTsKLQogCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9JTlRFUlJVUFRfU1RBVFVTXzEsCiAJCQlXTTgzMVhfVENIUERfRUlOVCwgV004MzFYX1RDSFBEX0VJTlQpOwogCiAJd204MzF4X3RzLT5wZW5fZG93biA9IHRydWU7Ci0JZW5hYmxlX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKKworCS8qIFN3aXRjaCBmcm9tIHBlbiBkb3duIHRvIGRhdGEgKi8KKwlkZXZfZGJnKHdtODMxeC0+ZGV2LCAiSVJRIFBELT5EQVRBXG4iKTsKKwlzY2hlZHVsZV93b3JrKCZ3bTgzMXhfdHMtPnBkX2RhdGFfd29yayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xODIsMTMgKzIwOSwyOCBAQAogCXN0cnVjdCB3bTgzMXhfdHMgKndtODMxeF90cyA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF90cy0+d204MzF4OwogCisJLyogU2h1dCB0aGUgY29udHJvbGxlciBkb3duLCBkaXNhYmxpbmcgYWxsIG90aGVyIGZ1bmN0aW9uYWxpdHkgdG9vICovCiAJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX1RPVUNIX0NPTlRST0xfMSwKLQkJCVdNODMxWF9UQ0hfRU5BIHwgV004MzFYX1RDSF9DVlRfRU5BIHwKLQkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwKLQkJCVdNODMxWF9UQ0hfWl9FTkEsIDApOworCQkJV004MzFYX1RDSF9FTkEgfCBXTTgzMVhfVENIX1hfRU5BIHwKKwkJCVdNODMxWF9UQ0hfWV9FTkEgfCBXTTgzMVhfVENIX1pfRU5BLCAwKTsKIAotCWlmICh3bTgzMXhfdHMtPnBlbl9kb3duKQorCS8qIE1ha2Ugc3VyZSBhbnkgcGVuZGluZyBJUlFzIGFyZSBkb25lLCB0aGUgYWJvdmUgd2lsbCBwcmV2ZW50CisJICogbmV3IG9uZXMgZmlyaW5nLgorCSAqLworCXN5bmNocm9uaXplX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKKwlzeW5jaHJvbml6ZV9pcnEod204MzF4X3RzLT5wZF9pcnEpOworCisJLyogTWFrZSBzdXJlIHRoZSBJUlEgY29tcGxldGlvbiB3b3JrIGlzIHF1aWVzY2VkICovCisJZmx1c2hfd29ya19zeW5jKCZ3bTgzMXhfdHMtPnBkX2RhdGFfd29yayk7CisKKwkvKiBJZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBwZW4gZG93biB0aGVuIG1ha2Ugc3VyZSB3ZSByZXZlcnQgYmFjaworCSAqIHRvIHBlbiBkZXRlY3Rpb24gc3RhdGUgZm9yIHRoZSBuZXh0IHRpbWUgd2Ugc3RhcnQgdXAuCisJICovCisJaWYgKHdtODMxeF90cy0+cGVuX2Rvd24pIHsKIAkJZGlzYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisJCWVuYWJsZV9pcnEod204MzF4X3RzLT5wZF9pcnEpOworCQl3bTgzMXhfdHMtPnBlbl9kb3duID0gZmFsc2U7CisJfQogfQogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTgzMXhfdHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTE5OCw3ICsyNDAsNyBAQAogCXN0cnVjdCB3bTgzMXhfcGRhdGEgKmNvcmVfcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCB3bTgzMXhfdG91Y2hfcGRhdGEgKnBkYXRhID0gTlVMTDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGVycm9yOworCWludCBlcnJvciwgaXJxZjsKIAogCWlmIChjb3JlX3BkYXRhKQogCQlwZGF0YSA9IGNvcmVfcGRhdGEtPnRvdWNoOwpAQCAtMjEyLDYgKzI1NCw3IEBACiAKIAl3bTgzMXhfdHMtPndtODMxeCA9IHdtODMxeDsKIAl3bTgzMXhfdHMtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlJTklUX1dPUksoJndtODMxeF90cy0+cGRfZGF0YV93b3JrLCB3bTgzMXhfcGRfZGF0YV93b3JrKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBhIGRpcmVjdCBJUlEgdXNlIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBpbnRlcnJ1cHQKQEAgLTI3MCw5ICszMTMsMTQgQEAKIAl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfVE9VQ0hfQ09OVFJPTF8xLAogCQkJV004MzFYX1RDSF9SQVRFX01BU0ssIDYpOwogCisJaWYgKHBkYXRhICYmIHBkYXRhLT5kYXRhX2lycWYpCisJCWlycWYgPSBwZGF0YS0+ZGF0YV9pcnFmOworCWVsc2UKKwkJaXJxZiA9IElSUUZfVFJJR0dFUl9ISUdIOworCiAJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxLAogCQkJCSAgICAgTlVMTCwgd204MzF4X3RzX2RhdGFfaXJxLAotCQkJCSAgICAgSVJRRl9PTkVTSE9ULAorCQkJCSAgICAgaXJxZiB8IElSUUZfT05FU0hPVCwKIAkJCQkgICAgICJUb3VjaHNjcmVlbiBkYXRhIiwgd204MzF4X3RzKTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgZGF0YSBJUlEgJWQ6ICVkXG4iLApAQCAtMjgxLDkgKzMyOSwxNCBAQAogCX0KIAlkaXNhYmxlX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKIAorCWlmIChwZGF0YSAmJiBwZGF0YS0+cGRfaXJxZikKKwkJaXJxZiA9IHBkYXRhLT5wZF9pcnFmOworCWVsc2UKKwkJaXJxZiA9IElSUUZfVFJJR0dFUl9ISUdIOworCiAJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh3bTgzMXhfdHMtPnBkX2lycSwKIAkJCQkgICAgIE5VTEwsIHdtODMxeF90c19wZW5fZG93bl9pcnEsCi0JCQkJICAgICBJUlFGX09ORVNIT1QsCisJCQkJICAgICBpcnFmIHwgSVJRRl9PTkVTSE9ULAogCQkJCSAgICAgIlRvdWNoc2NyZWVuIHBlbiBkb3duIiwgd204MzF4X3RzKTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcGVuIGRvd24gSVJRICVkOiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzA1LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcwNS5jCmluZGV4IDZiNWJlNzQuLjk4ZTYxMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzA1LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MDUuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJZGlnMiA9IHdtLT5kaWdbMl07CiAKIAlpZiAoZW5hYmxlKSB7Ci0JCS8qIGNvbnRpbm91cyBtb2RlICovCisJCS8qIGNvbnRpbnVvdXMgbW9kZSAqLwogCQlpZiAod20tPm1hY2hfb3BzLT5hY2Nfc3RhcnR1cCAmJgogCQkgICAgKHJldCA9IHdtLT5tYWNoX29wcy0+YWNjX3N0YXJ0dXAod20pKSA8IDApCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMKaW5kZXggNzQ5MGIwNS4uMmJjMmZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMi5jCkBAIC00MTksNyArNDE5LDcgQEAKIAlkaWcyID0gd20tPmRpZ1syXTsKIAogCWlmIChlbmFibGUpIHsKLQkJLyogY29udGlub3VzIG1vZGUgKi8KKwkJLyogY29udGludW91cyBtb2RlICovCiAJCWlmICh3bS0+bWFjaF9vcHMtPmFjY19zdGFydHVwKSB7CiAJCQlyZXQgPSB3bS0+bWFjaF9vcHMtPmFjY19zdGFydHVwKHdtKTsKIAkJCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEzLmMKaW5kZXggMjM4YjUxMy4uNzNlYzk5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMy5jCkBAIC00MzEsNyArNDMxLDcgQEAKIAlkaWczID0gd20tPmRpZ1syXTsKIAogCWlmIChlbmFibGUpIHsKLQkJLyogY29udGlub3VzIG1vZGUgKi8KKwkJLyogY29udGludW91cyBtb2RlICovCiAJCWlmICh3bS0+bWFjaF9vcHMtPmFjY19zdGFydHVwICYmCiAJCQkocmV0ID0gd20tPm1hY2hfb3BzLT5hY2Nfc3RhcnR1cCh3bSkpIDwgMCkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKaW5kZXggNmI3NWM5Zi4uNWRiZTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYwpAQCAtMzM1LDcgKzMzNSw3IEBACiAJICovCiAJaWYgKCF3bS0+bWFjaF9vcHMtPmFjY19lbmFibGVkIHx8IHdtLT5tYWNoX29wcy0+YWNjX3Blbl9kb3duKSB7CiAJCWlmICh3bS0+cGVuX2lzX2Rvd24gJiYgIXBlbl93YXNfZG93bikgewotCQkJLyogRGF0YSBpcyBub3QgYXZhaWxpYWJsZSBpbW1lZGlhdGVseSBvbiBwZW4gZG93biAqLworCQkJLyogRGF0YSBpcyBub3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5IG9uIHBlbiBkb3duICovCiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsod20tPnRzX3dvcmtxLCAmd20tPnRzX3JlYWRlciwgMSk7CiAJCX0KIApAQCAtMzU0LDcgKzM1NCw3IEBACiAgKiBDb2RlYyBQRU5ET1dOIGlycSBoYW5kbGVyCiAgKgogICogV2UgaGF2ZSB0byBkaXNhYmxlIHRoZSBjb2RlYyBpbnRlcnJ1cHQgaW4gdGhlIGhhbmRsZXIgYmVjYXVzZSBpdAotICogY2FuIHRha2UgdXB0byAxbXMgdG8gY2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuIFdlIHNjaGVkdWxlIGEgdGFzaworICogY2FuIHRha2UgdXAgdG8gMW1zIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlLiBXZSBzY2hlZHVsZSBhIHRhc2sKICAqIGluIGEgd29yayBxdWV1ZSB0byBkbyB0aGUgYWN0dWFsIGludGVyYWN0aW9uIHdpdGggdGhlIGNoaXAuICBUaGUKICAqIGludGVycnVwdCBpcyB0aGVuIGVuYWJsZWQgYWdhaW4gaW4gdGhlIHNsb3cgaGFuZGxlciB3aGVuIHRoZSBzb3VyY2UKICAqIGhhcyBiZWVuIGNsZWFyZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YWNhcGkuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhY2FwaS5oCmluZGV4IDlmNWI2ODAuLmUzMzBkYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhY2FwaS5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhY2FwaS5oCkBAIC02NzMsNyArNjczLDcgQEAKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBhdXhpbGxpYXJ5IHN0YXRlcyBmb3Igc3VwcGxlbWVudGFyeSBzZXJ2aWNlcyAgICAgICAgICAgICAgICAgICAgICovCisvKiBhdXhpbGlhcnkgc3RhdGVzIGZvciBzdXBwbGVtZW50YXJ5IHNlcnZpY2VzICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBJRExFICAgICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pby5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lvLmgKaW5kZXggMGM2YzY1MC4uYTZmMTc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lvLmgKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lvLmgKQEAgLTYwLDcgKzYwLDcgQEAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0cnVjdCBfSVNETl9BREFQVEVSIHsKICB2b2lkICAgICAgICAgICAgICgqIERJUmVxdWVzdCkoUElTRE5fQURBUFRFUiwgRU5USVRZICopIDsKLSBpbnQgICAgICAgICAgICAgICAgIFN0YXRlIDsgLyogZnJvbSBOVDQgMS5zcnYsIGEgZ29vZCBpZGVhLCBidXQgIGEgcG9vciBhY2hpZXZtZW50ICovCisgaW50ICAgICAgICAgICAgICAgICBTdGF0ZSA7IC8qIGZyb20gTlQ0IDEuc3J2LCBhIGdvb2QgaWRlYSwgYnV0ICBhIHBvb3IgYWNoaWV2ZW1lbnQgKi8KICBpbnQgICAgICAgICAgICAgICAgIEluaXRpYWxpemVkIDsKICBpbnQgICAgICAgICBSZWdpc3RlcmVkV2l0aERpZGQgOwogIGludCAgICAgICAgICAgICAgICAgVW5hdmFpbGFibGUgOyAgLyogY2FsbGJhY2sgZnVuY3Rpb24gcG9zc2libGU/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCAzNDFlZjE3Li44YzVjNTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTI2MzksNyArMjYzOSw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAvKiBsb2NhbCByZXBseSBpZiBhc3NpZ24gdW5zdWNjZXNzZnVsbAorICAgICAgLyogbG9jYWwgcmVwbHkgaWYgYXNzaWduIHVuc3VjY2Vzc2Z1bAogICAgICAgICAgb3IgQjMgcHJvdG9jb2wgYWxsb3dzIG9ubHkgb25lIGxheWVyIDMgY29ubmVjdGlvbgogICAgICAgICAgICBhbmQgYWxyZWFkeSBjb25uZWN0ZWQKICAgICAgICAgICAgICBvciBCMiBwcm90b2NvbCBub3QgYW55IExBUEQKQEAgLTgxODksNyArODE4OSw3IEBACiAgICAgICBkbGNbIDBdID0gMTU7CiAgICAgICBpZihiMl9jb25maWctPmxlbmd0aCA+PSA4KSB7IC8qIFBJQUZTIGNvbnRyb2wgYWJpbGl0aWVzICovCiAgICAgICAgIGRsY1sgN10gPSAxMDsgCi0gICAgICAgIGRsY1sxNl0gPSAyOyAvKiBMZW5ndGggb2YgUElBRlMgZXh0ZW50aW9uICovCisgICAgICAgIGRsY1sxNl0gPSAyOyAvKiBMZW5ndGggb2YgUElBRlMgZXh0ZW5zaW9uICovCiAgICAgICAgIGRsY1sxN10gPSBQSUFGU19VREFUQV9BQklMSVRJRVM7IC8qIGNvbnRyb2wgKFVEQVRBKSBhYmlsaXR5ICovCiAgICAgICAgIGRsY1sxOF0gPSBiMl9jb25maWdfcGFybXNbNF0uaW5mb1swXTsgLyogdmFsdWUgKi8KICAgICAgICAgZGxjWyAwXSA9IDE4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BjLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vcGMuaAppbmRleCAxYzY5NDU3Li5iZjZiMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vcGMuaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vcGMuaApAQCAtNzAxLDcgKzcwMSw3IEBACiAjZGVmaW5lIFBST1RDQVBfRlJFRTEyICAgIDB4MTAwMCAgLyogbm90IHVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFJPVENBUF9GUkVFMTMgICAgMHgyMDAwICAvKiBub3QgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQUk9UQ0FQX0ZSRUUxNCAgICAweDQwMDAgIC8qIG5vdCB1c2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBST1RDQVBfRVhURU5TSU9OIDB4ODAwMCAgLyogdXNlZCBmb3IgZnV0dXJlIGV4dGVudGlvbnMgICAgICAgICAgKi8KKyNkZWZpbmUgUFJPVENBUF9FWFRFTlNJT04gMHg4MDAwICAvKiB1c2VkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICovCiAvKiBPbmhvb2sgZGF0YSB0cmFuc21pc3Npb24gRVRTMzAwNjU5MDEgKi8KIC8qIE1lc3NhZ2UgVHlwZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3VtX2lkaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3VtX2lkaS5jCmluZGV4IDY1NjNkYjkuLmFjMGJkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi91bV9pZGkuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vdW1faWRpLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCiAJCWlmICgocmV0ID0gKCpjcF9mbikgKG9zX2hhbmRsZSwgZHN0LCBkYXRhLCBsZW5ndGgpKSA+PSAwKSB7CiAJCQkvKgotCQkJICAgQWNrbm93bGVkZ2Ugb25seSBpZiByZWFkIHdhcyBzdWNjZXNzZnVsbAorCQkJICAgQWNrbm93bGVkZ2Ugb25seSBpZiByZWFkIHdhcyBzdWNjZXNzZnVsCiAJCQkgKi8KIAkJCWRpdmFfZGF0YV9xX2Fja19zZWdtZW50NHJlYWQocSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKaW5kZXggNGUzNzgwZC4uZjZmM2M4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogICoJLT4gU2VlIGhmY19tdWx0aS5oIGZvciBIRkNfSU9fTU9ERV8qIHZhbHVlcwogICoJQnkgZGVmYXVsdCwgdGhlIElPIG1vZGUgaXMgcGNpIG1lbW9yeSBJTyAoTUVNSU8pLgogICoJU29tZSBjYXJkcyByZXF1aXJlIHNwZWNpZmljIElPIG1vZGUsIHNvIGl0IGNhbm5vdCBiZSBjaGFuZ2VkLgotICoJSXQgbWF5IGJlIHVzZWZ1bGwgdG8gc2V0IElPIG1vZGUgdG8gcmVnaXN0ZXIgaW8gKFJFR0lPKSB0byBzb2x2ZQorICoJSXQgbWF5IGJlIHVzZWZ1bCB0byBzZXQgSU8gbW9kZSB0byByZWdpc3RlciBpbyAoUkVHSU8pIHRvIHNvbHZlCiAgKglQQ0kgYnJpZGdlIHByb2JsZW1zLgogICoJSWYgdW5zdXJlLCBkb24ndCBnaXZlIHRoaXMgcGFyYW1ldGVyLgogICoKQEAgLTkwMyw3ICs5MDMsNyBAQAogLyoKICAqIFNwZWVjaCBEZXNpZ24gcmVzeW5jIGZlYXR1cmUKICAqIE5PVEU6IFRoaXMgaXMgY2FsbGVkIHNvbWV0aW1lcyBvdXRzaWRlIGludGVycnVwdCBoYW5kbGVyLgotICogV2UgbXVzdCBsb2NrIGlycXNhdmUsIHNvIG5vIG90aGVyIGludGVycnVwdCAob3RoZXIgY2FyZCkgd2lsbCBvY2N1cnIhCisgKiBXZSBtdXN0IGxvY2sgaXJxc2F2ZSwgc28gbm8gb3RoZXIgaW50ZXJydXB0IChvdGhlciBjYXJkKSB3aWxsIG9jY3VyIQogICogQWxzbyBtdWx0aXBsZSBpbnRlcnJ1cHRzIG1heSBuZXN0LCBzbyBtdXN0IGxvY2sgZWFjaCBhY2Nlc3MgKGxpc3RzLCBjYXJkKSEKICAqLwogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKaW5kZXggMTVkMzIzYi4uNDM0M2FiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJICogRC0gYW5kIG1vbml0b3IvQ0kgY2hhbm5lbCBhcmUgbm90IGVuYWJsZWQKIAkgKiBTVElPMSBpcyB1c2VkIGFzIG91dHB1dCBmb3IgZGF0YSwgQjErQjIgZnJvbSBTVC0+SU9NK0hGQwogCSAqIFNUSU8yIGlzIHVzZWQgYXMgZGF0YSBpbnB1dCwgQjErQjIgZnJvbSBJT00tPlNUCi0JICogU1QgQi1jaGFubmVsIHNlbmQgZGlzYWJsZWQgLT4gY29udGlub3VzIDFzCisJICogU1QgQi1jaGFubmVsIHNlbmQgZGlzYWJsZWQgLT4gY29udGludW91cyAxcwogCSAqIFRoZSBJT00gc2xvdHMgYXJlIGFsd2F5cyBlbmFibGVkCiAJICovCiAJaWYgKHRlc3RfYml0KEhGQ19DRkdfUENNLCAmaGMtPmNmZykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDMxNDcwMjAuLjBjYjA1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJLyogRC0gYW5kIG1vbml0b3IvQ0kgY2hhbm5lbCBhcmUgbm90IGVuYWJsZWQgKi8KIAkvKiBTVElPMSBpcyB1c2VkIGFzIG91dHB1dCBmb3IgZGF0YSwgQjErQjIgZnJvbSBTVC0+SU9NK0hGQyAqLwogCS8qIFNUSU8yIGlzIHVzZWQgYXMgZGF0YSBpbnB1dCwgQjErQjIgZnJvbSBJT00tPlNUICovCi0JLyogU1QgQi1jaGFubmVsIHNlbmQgZGlzYWJsZWQgLT4gY29udGlub3VzIDFzICovCisJLyogU1QgQi1jaGFubmVsIHNlbmQgZGlzYWJsZWQgLT4gY29udGludW91cyAxcyAqLwogCS8qIFRoZSBJT00gc2xvdHMgYXJlIGFsd2F5cyBlbmFibGVkICovCiAJY3MtPmh3LmhmY3BjaS5jb25uID0gMHgzNjsJLyogc2V0IGRhdGEgZmxvdyBkaXJlY3Rpb25zICovCiAJV3JpdGVfaGZjKGNzLCBIRkNQQ0lfQ09OTkVDVCwgY3MtPmh3LmhmY3BjaS5jb25uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYwppbmRleCAxMjM1YjcxLi4xNTZkN2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCkBAIC0zOTksNyArMzk5LDcgQEAKIAkvKiBELSBhbmQgbW9uaXRvci9DSSBjaGFubmVsIGFyZSBub3QgZW5hYmxlZCAqLwogCS8qIFNUSU8xIGlzIHVzZWQgYXMgb3V0cHV0IGZvciBkYXRhLCBCMStCMiBmcm9tIFNULT5JT00rSEZDICovCiAJLyogU1RJTzIgaXMgdXNlZCBhcyBkYXRhIGlucHV0LCBCMStCMiBmcm9tIElPTS0+U1QgKi8KLQkvKiBTVCBCLWNoYW5uZWwgc2VuZCBkaXNhYmxlZCAtPiBjb250aW5vdXMgMXMgKi8KKwkvKiBTVCBCLWNoYW5uZWwgc2VuZCBkaXNhYmxlZCAtPiBjb250aW51b3VzIDFzICovCiAJLyogVGhlIElPTSBzbG90cyBhcmUgYWx3YXlzIGVuYWJsZWQgKi8KIAljcy0+aHcuaGZjc3guY29ubiA9IDB4MzY7CS8qIHNldCBkYXRhIGZsb3cgZGlyZWN0aW9ucyAqLwogCVdyaXRlX2hmYyhjcywgSEZDU1hfQ09OTkVDVCwgY3MtPmh3LmhmY3N4LmNvbm4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmgKaW5kZXggZTc5ZjU2NS4uMmY1ODFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5oCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogCiAvKgotICogZGV2aWNlIGRlcGVuZGFudCBpbmZvcm1hdGlvbiB0byBzdXBwb3J0IGRpZmZlcmVudAorICogZGV2aWNlIGRlcGVuZGVudCBpbmZvcm1hdGlvbiB0byBzdXBwb3J0IGRpZmZlcmVudAogICogSVNETiBUYSdzIHVzaW5nIHRoZSBIRkMtUyBVU0IgY2hpcAogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYwppbmRleCBjYzZlZTJkLi44ZTJmZDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCkBAIC0xNTk1LDcgKzE1OTUsNyBAQAogCSAqIEJlYXJlciBDYXBhYmlsaXRpZXMKIAkgKi8KIAlwID0gc2tiLT5kYXRhOwotCS8qIG9ubHkgdGhlIGZpcnN0IG9jY3VyZW5jZSAnbGwgYmUgZGV0ZWN0ZWQgISAqLworCS8qIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2UgJ2xsIGJlIGRldGVjdGVkICEgKi8KIAlpZiAoKHAgPSBmaW5kaWUocCwgc2tiLT5sZW4sIDB4MDQsIDApKSkgewogCQlpZiAoKHBbMV0gPCAyKSB8fCAocFsxXSA+IDExKSkKIAkJCWVyciA9IDE7CkBAIC0yMTYxLDcgKzIxNjEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBoYW5kbGUgc3BlY2lhbCBjb21tYW5kcyBmb3IgdGhpcyBwcm90b2NvbC4gICovCi0vKiBFeGFtcGxlcyBhcmUgY2FsbCBpbmRlcGVuZGFudCBzZXJ2aWNlcyBsaWtlICovCisvKiBFeGFtcGxlcyBhcmUgY2FsbCBpbmRlcGVuZGVudCBzZXJ2aWNlcyBsaWtlICovCiAvKiByZW1vdGUgb3BlcmF0aW9ucyB3aXRoIGR1bW15ICBjYWxscmVmLiAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGwzZHNzMV9jbWRfZ2xvYmFsKHN0cnVjdCBQU3RhY2sgKnN0LCBpc2RuX2N0cmwgKmljKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwppbmRleCBmOTU4NDQ5Li43YjIyOWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwpAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAKIAkgKiBCZWFyZXIgQ2FwYWJpbGl0aWVzCiAJICovCiAJcCA9IHNrYi0+ZGF0YTsKLQkvKiBvbmx5IHRoZSBmaXJzdCBvY2N1cmVuY2UgJ2xsIGJlIGRldGVjdGVkICEgKi8KKwkvKiBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlICdsbCBiZSBkZXRlY3RlZCAhICovCiAJaWYgKChwID0gZmluZGllKHAsIHNrYi0+bGVuLCAweDA0LCAwKSkpIHsKIAkJaWYgKChwWzFdIDwgMikgfHwgKHBbMV0gPiAxMSkpCiAJCQllcnIgPSAxOwpAQCAtMjAxNyw3ICsyMDE3LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogaGFuZGxlIHNwZWNpYWwgY29tbWFuZHMgZm9yIHRoaXMgcHJvdG9jb2wuICAqLwotLyogRXhhbXBsZXMgYXJlIGNhbGwgaW5kZXBlbmRhbnQgc2VydmljZXMgbGlrZSAqLworLyogRXhhbXBsZXMgYXJlIGNhbGwgaW5kZXBlbmRlbnQgc2VydmljZXMgbGlrZSAqLwogLyogcmVtb3RlIG9wZXJhdGlvbnMgd2l0aCBkdW1teSAgY2FsbHJlZi4gICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBsM25pMV9jbWRfZ2xvYmFsKHN0cnVjdCBQU3RhY2sgKnN0LCBpc2RuX2N0cmwgKmljKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKaW5kZXggMjM0NGU3Yi4uYTFiODk1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJcmV0dXJuKDApOwogCX0KIAkvKiB0aGUgVEozMDAgYW5kIFRKMzIwIG11c3QgYmUgZGV0ZWN0ZWQsIHRoZSBJUlEgaGFuZGxpbmcgaXMgZGlmZmVyZW50Ci0JICogdW5mb3J0dW5hdGx5IHRoZSBjaGlwcyB1c2UgdGhlIHNhbWUgZGV2aWNlIElELCBidXQgdGhlIFRKMzIwIGhhcworCSAqIHVuZm9ydHVuYXRlbHkgdGhlIGNoaXBzIHVzZSB0aGUgc2FtZSBkZXZpY2UgSUQsIGJ1dCB0aGUgVEozMjAgaGFzCiAJICogdGhlIGJpdDIwIGluIHN0YXR1cyBQQ0kgY2ZnIHJlZ2lzdGVyIHNldAogCSAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfbmV0amV0LCAweDA0LCAmY2ZnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMKaW5kZXggZTU2ZTVhZi4uZWQ0YmM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogfQogCiAvKgotICogU3RhcnQgdHJhbnNmZXJpbmcgKGZsYWdzIG9yIGRhdGEpIG9uIHRoZSBCIGNoYW5uZWwsIHNpbmNlCisgKiBTdGFydCB0cmFuc2ZlcnJpbmcgKGZsYWdzIG9yIGRhdGEpIG9uIHRoZSBCIGNoYW5uZWwsIHNpbmNlCiAgKiBGSUZPIGNvdW50ZXJzIGhhcyBiZWVuIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgogICovCiBzdGF0aWMgdm9pZCBzdDU0ODFCX3N0YXJ0X3hmZXIodm9pZCAqY29udGV4dCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCmluZGV4IDEwZDQxYzUuLjE1OWU4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAKIC8qCiAgKiBEZWNvZGUgZnJhbWVzIHJlY2VpdmVkIG9uIHRoZSBCL0QgY2hhbm5lbC4KLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGNvbnRpbm91c2x5CisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBjb250aW51b3VzbHkKICAqIHdpdGggNjRLYml0L3MgLyAxNktiaXQvcyBvZiBkYXRhIGFuZCBoZW5jZSBpdCB3aWxsIGJlIAogICogY2FsbGVkIDUwIHRpbWVzIHBlciBzZWNvbmQgd2l0aCAyMCBJU09DIGRlc2NyaXB0b3JzLiAKICAqIENhbGxlZCBhdCBpbnRlcnJ1cHQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCmluZGV4IDI4MmE0NDYuLmFhMjVlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCkBAIC05LDcgKzksNyBAQAogICAgIEFsc28gaW5zcGlyZWQgYnkgRUxTQSBQQ01DSUEgZHJpdmVyIAogICAgIGJ5IEtsYXVzIExpY2h0ZW53YWxkZXIgPExpY2h0ZW53YWxkZXJAQUNNLm9yZz4KICAgICAKLSAgICBFeHRlbnRpb25zIHRvIG5ldyBoaXNheF9wY21jaWEgYnkgS2Fyc3RlbiBLZWlsCisgICAgRXh0ZW5zaW9ucyB0byBuZXcgaGlzYXhfcGNtY2lhIGJ5IEthcnN0ZW4gS2VpbAogCiAgICAgbWlub3IgY2hhbmdlcyB0byBiZSBjb21wYXRpYmxlIHdpdGgga2VybmVsIDIuNC54CiAgICAgYnkgSmFuLlNjaHViZXJ0QEdNWC5saQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3NjaGVkLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fc2NoZWQuYwppbmRleCA4MWRiNGExLi4zNjc0ZDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fc2NoZWQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fc2NoZWQuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAvKiBzZW5kIG9uZSBjb25maWcgbGluZSB0byB0aGUgY2FyZCBhbmQgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIGEgKi8KIC8qIG5lZ2F0aXZlIGVycm9yIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFRoZSBmdW5jdGlvbiB3b3JrcyB3aXRoIHRpbWVvdXRzIHBlcmhhcHMgbm90IGdpdmluZyB0aGUgZ3JlYXRlc3Qgc3BlZWQgICAgKi8KLS8qIHNlbmRpbmcgdGhlIGxpbmUsIGJ1dCB0aGlzIHNob3VsZCBiZSBtZWFuaW5nbGVzcyBiZWFjdXNlIG9ubHkgc29tZSBsaW5lcyAgKi8KKy8qIHNlbmRpbmcgdGhlIGxpbmUsIGJ1dCB0aGlzIHNob3VsZCBiZSBtZWFuaW5nbGVzcyBiZWNhdXNlIG9ubHkgc29tZSBsaW5lcyAgKi8KIC8qIGFyZSB0byBiZSBzZW50IGFuZCB0aGlzIGhhcHBlbnMgdmVyeSBzZWxkb20uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCmluZGV4IGFmZWVkZTcuLjJhN2QxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKQEAgLTE1MzAsNyArMTUzMCw3IEBACiAJCXByaW50ayAoS0VSTl9XQVJOSU5HCiAJCQkJIlVQRE9XTjogTGluZSBwcm90b2NvbCBvbiBJbnRlcmZhY2UgJXMsIgogCQkJCSIgY2hhbmdlZCBzdGF0ZSB0byBkb3duXG4iLCBscC0+bmV0ZGV2LT5kZXYtPm5hbWUpOwotCQkvKiBzaG91bGQgc3RvcCByb3V0aW5nIGhpZ2hlci1sZXZlbCBkYXRhIGFjY3Jvc3MgKi8KKwkJLyogc2hvdWxkIHN0b3Agcm91dGluZyBoaWdoZXItbGV2ZWwgZGF0YSBhY3Jvc3MgKi8KIAl9IGVsc2UgaWYgKCghbHAtPmNpc2NvX2xpbmVfc3RhdGUpICYmCiAJCShteXNlcV9kaWZmID49IDApICYmIChteXNlcV9kaWZmIDw9IDIpKSB7CiAJCS8qIGxpbmUgZG93biAtPiB1cCAqLwpAQCAtMTUzOCw3ICsxNTM4LDcgQEAKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcKIAkJCQkiVVBET1dOOiBMaW5lIHByb3RvY29sIG9uIEludGVyZmFjZSAlcywiCiAJCQkJIiBjaGFuZ2VkIHN0YXRlIHRvIHVwXG4iLCBscC0+bmV0ZGV2LT5kZXYtPm5hbWUpOwotCQkvKiByZXN0YXJ0IHJvdXRpbmcgaGlnaGVyLWxldmVsIGRhdGEgYWNjcm9zcyAqLworCQkvKiByZXN0YXJ0IHJvdXRpbmcgaGlnaGVyLWxldmVsIGRhdGEgYWNyb3NzICovCiAJfQogCiAJaWYgKGxwLT5jaXNjb19kZWJzZXJpbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggOWU4MTYyYy4uMWIwMDJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtMTUxNCw3ICsxNTE0LDcgQEAKICNkZWZpbmUgTVBfTE9OR1NFUV9NQVhCSVQJKChNUF9MT05HU0VRX01BU0srMSk+PjEpCiAjZGVmaW5lIE1QX1NIT1JUU0VRX01BWEJJVAkoKE1QX1NIT1JUU0VRX01BU0srMSk+PjEpCiAKLS8qIHNlcXVlbmNlLXdyYXAgc2FmZSBjb21wYXJpc2lvbnMgKGZvciBsb25nIHNlcXVlbmNlKSovIAorLyogc2VxdWVuY2Utd3JhcCBzYWZlIGNvbXBhcmlzb25zIChmb3IgbG9uZyBzZXF1ZW5jZSkqLwogI2RlZmluZSBNUF9MVChhLGIpCSgoYS1iKSZNUF9MT05HU0VRX01BWEJJVCkKICNkZWZpbmUgTVBfTEUoYSxiKSAJISgoYi1hKSZNUF9MT05HU0VRX01BWEJJVCkKICNkZWZpbmUgTVBfR1QoYSxiKSAJKChiLWEpJk1QX0xPTkdTRVFfTUFYQklUKQpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAKIAkJICogdGhlbiBuZXh0IGZyYWdtZW50IHNob3VsZCBiZSB0aGUgc3RhcnQgb2YgbmV3IHJlYXNzZW1ibHkKIAkJICogaWYgc2VxdWVuY2UgaXMgY29udGlndW91cywgYnV0IHdlIGhhdmVuJ3QgcmVhc3NlbWJsZWQgeWV0LAogCQkgKiBrZWVwIGdvaW5nLgotCQkgKiBpZiBzZXF1ZW5jZSBpcyBub3QgY29udGlndW91cywgZWl0aGVyIGNsZWFyIGV2ZXJ5dGluZworCQkgKiBpZiBzZXF1ZW5jZSBpcyBub3QgY29udGlndW91cywgZWl0aGVyIGNsZWFyIGV2ZXJ5dGhpbmcKIAkJICogYmVsb3cgbG93IHdhdGVybWFyayBhbmQgc2V0IHN0YXJ0IHRvIHRoZSBuZXh0IGZyYWcgb3IKIAkJICogY2xlYXIgc3RhcnQgcHRyLgogCQkgKi8gCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKaW5kZXggM2Q4OGYxNS4uNjA3ZDg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwpAQCAtNzkyLDcgKzc5Miw3IEBACiB9CiAKIC8qIGlzZG5fdHR5X3Jlc3VtZSgpIHRyaWVzIHRvIHJlc3VtZSBhIHN1c3BlbmRlZCBjYWxsCi0gKiBzZXR1cCBvZiB0aGUgbG93ZXIgbGV2ZWxzIGJlZm9yZSB0aGF0LiB1bmZvcnR1bmF0bHkgaGVyZSBpcyBubworICogc2V0dXAgb2YgdGhlIGxvd2VyIGxldmVscyBiZWZvcmUgdGhhdC4gdW5mb3J0dW5hdGVseSBoZXJlIGlzIG5vCiAgKiBjaGVja2luZyBmb3IgY29tcGF0aWJpbGl0eSBvZiB1c2VkIHByb3RvY29scyBpbXBsZW1lbnRlZCBieSBROTMxCiAgKiBJdCBkb2VzIHRoZSBzYW1lIHRoaW5ncyBsaWtlIGlzZG5fdHR5X2RpYWwsIHRoZSBsYXN0IGNvbW1hbmQKICAqIGlzIGRpZmZlcmVudCwgbWF5IGJlIHdlIGNhbiBtZXJnZSBpdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5jIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKaW5kZXggYjhhMTA5OC4uZDQ5N2RiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKKysrIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKQEAgLTk1NCw3ICs5NTQsNyBAQAogLyoKICAqIFB1dCBjb21tYW5kLXN0cmluZ3MgaW50byB0aGUgb2YgdGhlICdjYXJkJy4gSW4gcmVhbGl0eSwgZXhlY3V0ZSB0aGVtCiAgKiByaWdodCBpbiBwbGFjZSBieSBjYWxsaW5nIGlzZG5sb29wX3BhcnNlX2NtZCgpLiBBbHNvIGNvcHkgZXZlcnkKLSAqIGNvbW1hbmQgdG8gdGhlIHJlYWQgbWVzc2FnZSByaW5nYnVmZmVyLCBwcmVjZWVkaW5nIGl0IHdpdGggYSAnPicuCisgKiBjb21tYW5kIHRvIHRoZSByZWFkIG1lc3NhZ2UgcmluZ2J1ZmZlciwgcHJlY2VkaW5nIGl0IHdpdGggYSAnPicuCiAgKiBUaGVzZSBtZXNhZ2dlcyBjYW4gYmUgcmVhZCBhdCAvZGV2L2lzZG5jdHJsLgogICoKICAqIFBhcmFtZXRlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3AuaCBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3AuaAppbmRleCAxOGFmODY4Li44NTQ5NDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwLmgKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2RzcC5oCkBAIC0yMSw3ICsyMSw3IEBACiAvKiBvcHRpb25zIG1heSBiZToKICAqCiAgKiBiaXQgMCA9IHVzZSB1bGF3IGluc3RlYWQgb2YgYWxhdwotICogYml0IDEgPSBlbmFibGUgaGZjIGhhcmR3YXJlIGFjY2VsbGVyYXRpb24gZm9yIGFsbCBjaGFubmVscworICogYml0IDEgPSBlbmFibGUgaGZjIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgYWxsIGNoYW5uZWxzCiAgKgogICovCiAjZGVmaW5lIERTUF9PUFRfVUxBVwkJKDE8PDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NteC5jIGIvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jbXguYwppbmRleCAzMDliYWNmLi40ZDM5NWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NteC5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY214LmMKQEAgLTE1MTMsNyArMTUxMyw3IEBACiAJLyogLT4gaWYgZWNobyBpcyBOT1QgZW5hYmxlZCAqLwogCWlmICghZHNwLT5lY2hvLnNvZnR3YXJlKSB7CiAJCS8qCi0JCSAqIC0+IHN1YnN0cmFjdCByeC1kYXRhIGZyb20gY29uZi1kYXRhLAorCQkgKiAtPiBzdWJ0cmFjdCByeC1kYXRhIGZyb20gY29uZi1kYXRhLAogCQkgKiBpZiB0eC1kYXRhIGlzIGF2YWlsYWJsZSwgbWl4CiAJCSAqLwogCQl3aGlsZSAociAhPSByciAmJiB0ICE9IHR0KSB7CkBAIC0xNTcyLDcgKzE1NzIsNyBAQAogc2VuZF9wYWNrZXQ6CiAJLyoKIAkgKiBzZW5kIHR4LWRhdGEgaWYgZW5hYmxlZCAtIGRvbid0IGZpbHRlciwKLQkgKiBiZWN1YXNlIHdlIHdhbnQgd2hhdCB3ZSBzZW5kLCBub3Qgd2hhdCB3ZSBmaWx0ZXJlZAorCSAqIGJlY2F1c2Ugd2Ugd2FudCB3aGF0IHdlIHNlbmQsIG5vdCB3aGF0IHdlIGZpbHRlcmVkCiAJICovCiAJaWYgKGRzcC0+dHhfZGF0YSkgewogCQlpZiAodHhfZGF0YV9vbmx5KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NvcmUuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY29yZS5jCmluZGV4IDZmNWI1NDguLjI4NzcyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY29yZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY29yZS5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAqCiAgKiBUaGUgQ01YIGhhcyBzcGVjaWFsIGZ1bmN0aW9ucyBmb3IgY29uZmVyZW5jZXMgd2l0aCBvbmUsIHR3byBhbmQgbW9yZQogICogbWVtYmVycy4gSXQgd2lsbCBhbGxvdyBkaWZmZXJlbnQgdHlwZXMgb2YgZGF0YSBmbG93LiBSZWNlaXZlIGFuZCB0cmFuc21pdAotICogZGF0YSB0by9mb3JtIHVwcGVyIGxheWVyIG1heSBiZSBzd2l0aGVkIG9uL29mZiBpbmRpdmlkdWFsbHkgd2l0aG91dCBsb29zaW5nCisgKiBkYXRhIHRvL2Zvcm0gdXBwZXIgbGF5ZXIgbWF5IGJlIHN3aXRoZWQgb24vb2ZmIGluZGl2aWR1YWxseSB3aXRob3V0IGxvc2luZwogICogZmVhdHVyZXMgb2YgQ01YLCBUb25lcyBhbmQgRFRNRi4KICAqCiAgKiBFY2hvIENhbmNlbGxhdGlvbjogU29tZXRpbWVzIHdlIGxpa2UgdG8gY2FuY2VsIGVjaG8gZnJvbSB0aGUgaW50ZXJmYWNlLgpAQCAtMTI3LDkgKzEyNyw5IEBACiAgKgogICogSWYgYWxsIHVzZWQgZmVhdHVyZXMgY2FuIGJlIHJlYWxpemVkIGluIGhhcmR3YXJlLCBhbmQgaWYgdHJhbnNtaXQgYW5kL29yCiAgKiByZWNlaXZlIGRhdGEgaXN0IGRpc2FibGVkLCB0aGUgY2FyZCBtYXkgbm90IHNlbmQvcmVjZWl2ZSBhbnkgZGF0YSBhdCBhbGwuCi0gKiBOb3QgcmVjZWl2aW5nIGlzIHVzZWZ1bGwgaWYgb25seSBhbm5vdW5jZW1lbnRzIGFyZSBwbGF5ZWQuIE5vdCBzZW5kaW5nIGlzCi0gKiB1c2VmdWxsIGlmIGFuIGFuc3dlcmluZyBtYWNoaW5lIHJlY29yZHMgYXVkaW8uIE5vdCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgaXMKLSAqIHVzZWZ1bGwgZHVyaW5nIG1vc3Qgc3RhdGVzIG9mIHRoZSBjYWxsLiBJZiBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUsIHRvbmVzCisgKiBOb3QgcmVjZWl2aW5nIGlzIHVzZWZ1bCBpZiBvbmx5IGFubm91bmNlbWVudHMgYXJlIHBsYXllZC4gTm90IHNlbmRpbmcgaXMKKyAqIHVzZWZ1bCBpZiBhbiBhbnN3ZXJpbmcgbWFjaGluZSByZWNvcmRzIGF1ZGlvLiBOb3Qgc2VuZGluZyBhbmQgcmVjZWl2aW5nIGlzCisgKiB1c2VmdWwgZHVyaW5nIG1vc3Qgc3RhdGVzIG9mIHRoZSBjYWxsLiBJZiBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUsIHRvbmVzCiAgKiB3aWxsIGJlIHBsYXllZCB3aXRob3V0IGNwdSBsb2FkLiBTbWFsbCBQQlhzIGFuZCBOVC1Nb2RlIGFwcGxpY2F0aW9ucyB3aWxsCiAgKiBub3QgbmVlZCBleHBlbnNpdmUgaGFyZHdhcmUgd2hlbiBwcm9jZXNzaW5nIGNhbGxzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfZHRtZi5jIGIvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9kdG1mLmMKaW5kZXggOWFlMmQzMy4uNWI0ODRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9kdG1mLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9kdG1mLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICogdGVzdGVkIGl0IGFsbG90LiBpdCBldmVuIHdvcmtzIHdpdGggdmVyeSBzaG9ydCB0b25lcyAoNDBtcykuIHRoZSBvbmx5CiAgKiBkaXNhZHZhbnRhZ2UgaXMsIHRoYXQgaXQgZG9lc24ndCB3b3JrIGdvb2Qgd2l0aCBkaWZmZXJlbnQgdm9sdW1lcyBvZiBib3RoCiAgKiB0b25lcy4gdGhpcyB3aWxsIGhhcHBlbiwgaWYgYWNjb3VzdGljYWxseSBjb3VwbGVkIGRpYWxlcnMgYXJlIHVzZWQuCi0gKiBpdCBzb21ldGltZXMgZGV0ZWN0cyB0b25lcyBkdXJpbmcgc3BlYWNoLCB3aGljaCBpcyBub3JtYWwgZm9yIGRlY29kZXJzLgorICogaXQgc29tZXRpbWVzIGRldGVjdHMgdG9uZXMgZHVyaW5nIHNwZWVjaCwgd2hpY2ggaXMgbm9ybWFsIGZvciBkZWNvZGVycy4KICAqIHVzZSBzZXF1ZW5jZXMgdG8gZ2l2ZW4gY29tbWFuZHMgZHVyaW5nIGNhbGxzLgogICoKICAqIGR0bWYgLSBwb2ludHMgdG8gYSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgZHRtZiBzdGF0ZQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJCWlmIChyZXN1bHRbaV0gPCB0cmVzaCkgewogCQkJbG93Z3JvdXAgPSAtMTsKIAkJCWhpZ2hncm91cCA9IC0xOwotCQkJYnJlYWs7ICAvKiBub2lzZSBpbmJldHdlZW4gKi8KKwkJCWJyZWFrOyAgLyogbm9pc2UgaW4gYmV0d2VlbiAqLwogCQl9CiAJCS8qIGdvb2QgbGV2ZWwgZm91bmQuIFRoaXMgaXMgYWxsb3dlZCBvbmx5IG9uZSB0aW1lIHBlciBncm91cCAqLwogCQlpZiAoaSA8IE5DT0VGRi8yKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX3RvbmVzLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX3RvbmVzLmMKaW5kZXggN2RiZTU0ZS4uNGU0NDQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF90b25lcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfdG9uZXMuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJd2hpbGUgKGxlbikgewogCQkvKiBmaW5kIHNhbXBsZSB0byBzdGFydCB3aXRoICovCiAJCXdoaWxlICg0MikgewotCQkJLyogd2FycCBhcnJvdW5kICovCisJCQkvKiB3cmFwIGFyb3VuZCAqLwogCQkJaWYgKCFwYXQtPnNlcVtpbmRleF0pIHsKIAkJCQljb3VudCA9IDA7CiAJCQkJaW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMKaW5kZXggYmQ1MjZmNi4uMjJmOGVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29yZS5jCkBAIC0xNzksNyArMTc5LDcgQEAKIC0gVGltZSBCYXNlID0gVGltZXN0YW1wIG9mIGZpcnN0IHNhbXBsZSBpbiBmcmFtZQogVGhlICJUaW1lIEJhc2UiIGlzIHVzZWQgdG8gcmVhcmFuZ2UgcGFja2V0cyBhbmQgdG8gZGV0ZWN0IHBhY2tldCBsb3NzLgogVGhlIDE2IGJpdHMgYXJlIHNlbnQgaW4gbmV0d29yayBvcmRlciAoTVNCIGZpcnN0KSBhbmQgY291bnQgMS84MDAwIHRoIG9mIGEKLXNlY29uZC4gVGhpcyBjYXVzZXMgYSB3cmFwIGFycm91bmQgZWFjaCA4LDE5MiBzZWNvbmRzLiBUaGVyZSBpcyBubyByZXF1aXJlbWVudAorc2Vjb25kLiBUaGlzIGNhdXNlcyBhIHdyYXAgYXJvdW5kIGVhY2ggOCwxOTIgc2Vjb25kcy4gVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQKIGZvciB0aGUgaW5pdGlhbCAiVGltZSBCYXNlIiwgYnV0IDAgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBmaXJzdCBwYWNrZXQuCiBJbiBjYXNlIG9mIEhETEMgZGF0YSwgdGhpcyB0aW1lc3RhbXAgY291bnRzIHRoZSBwYWNrZXQgb3IgYnl0ZSBudW1iZXIuCiAKQEAgLTIwNSw3ICsyMDUsNyBAQAogCiBJZiB0aGUgb25kZW1hbmQgcGFyYW1ldGVyIGlzIGdpdmVuLCB0aGUgcmVtb3RlIElQIGlzIHNldCB0byAwIG9uIHRpbWVvdXQuCiBUaGlzIHdpbGwgc3RvcCBrZWVwYWxpdmUgdHJhZmZpYyB0byByZW1vdGUuIElmIHRoZSByZW1vdGUgaXMgb25saW5lIGFnYWluLAotdHJhZmZpYyB3aWxsIGNvbnRpbnVlIHRvIHRoZSByZW1vdGUgYWRkcmVzcy4gVGhpcyBpcyB1c2VmdWxsIGZvciByb2FkIHdhcnJpb3JzLgordHJhZmZpYyB3aWxsIGNvbnRpbnVlIHRvIHRoZSByZW1vdGUgYWRkcmVzcy4gVGhpcyBpcyB1c2VmdWwgZm9yIHJvYWQgd2FycmlvcnMuCiBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyB3aXRoIElEIHNldCwgb3RoZXJ3aGlzZSBpdCBpcyBoaWdobHkgdW5zZWN1cmUuCiAKIApAQCAtNTkwLDcgKzU5MCw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UKLQkJbWxlbiA9IGxlbi0yOyAvKiBzaW5nbGUgZnJhbWUsIHN1YnN0cmFjdCB0aW1lYmFzZSAqLworCQltbGVuID0gbGVuLTI7IC8qIHNpbmdsZSBmcmFtZSwgc3VidHJhY3QgdGltZWJhc2UgKi8KIAogCWlmIChsZW4gPCAyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBwYWNrZXQgZXJyb3IgLSBwYWNrZXQgdG9vIHNob3J0LCB0aW1lICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYwppbmRleCA0YWU3NTA1Li5kMGFlYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jCkBAIC0xODY0LDcgKzE4NjQsNyBAQAogCQlwc2FwaSA+Pj0gMjsKIAkJcHRlaSA+Pj0gMTsKIAkJaWYgKHBzYXBpICE9IGwyLT5zYXBpKSB7Ci0JCQkvKiBub3Qgb3VyIGJ1c3NpbmVzcyAqLworCQkJLyogbm90IG91ciBidXNpbmVzcyAqLwogCQkJaWYgKCpkZWJ1ZyAmIERFQlVHX0wyKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2FwaSAlZC8lZCBtaXNtYXRjaFxuIiwKIAkJCQkJX19mdW5jX18sIHBzYXBpLCBsMi0+c2FwaSk7CkBAIC0xODcyLDcgKzE4NzIsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKChwdGVpICE9IGwyLT50ZWkpICYmIChwdGVpICE9IEdST1VQX1RFSSkpIHsKLQkJCS8qIG5vdCBvdXIgYnVzc2luZXNzICovCisJCQkvKiBub3Qgb3VyIGJ1c2luZXNzICovCiAJCQlpZiAoKmRlYnVnICYgREVCVUdfTDIpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0ZWkgJWQvJWQgbWlzbWF0Y2hcbiIsCiAJCQkJCV9fZnVuY19fLCBwdGVpLCBsMi0+dGVpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbG0zNTMwLmMKaW5kZXggZTcwODlhMS4uYjM3ZTYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtbG0zNTMwLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtbG0zNTMwLmMKQEAgLTM0OSw2ICszNDksNyBAQAogCXtMTTM1MzBfTkFNRSwgMH0sCiAJe30KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG0zNTMwX2lkKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtMzUzMF9pMmNfZHJpdmVyID0gewogCS5wcm9iZSA9IGxtMzUzMF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwppbmRleCBhZmFjMzM4Li41YmY2M2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCkBAIC01OCw3ICs1OCw3IEBACiAJLmlkX3RhYmxlID0gcGNhOTUzMl9pZCwKIH07CiAKLS8qIFdlIGhhdmUgdHdvIHB3bS9ibGlua2VycywgYnV0IDE2IHBvc3NpYmxlIGxlZHMgdG8gZHJpdmUuIEFkZGl0aW9uYWx5LAorLyogV2UgaGF2ZSB0d28gcHdtL2JsaW5rZXJzLCBidXQgMTYgcG9zc2libGUgbGVkcyB0byBkcml2ZS4gQWRkaXRpb25hbGx5LAogICogdGhlIGNsZXZlciBUaGVjdXMgcGVvcGxlIGFyZSB1c2luZyBvbmUgcHdtIHRvIGRyaXZlIHRoZSBiZWVwZXIuIFNvLAogICogYXMgYSBjb21wcm9taXNlIHdlIGF2ZXJhZ2Ugb25lIHB3bSB0byB0aGUgdmFsdWVzIHJlcXVlc3RlZCBieSBhbGwKICAqIGxlZHMgdGhhdCBhcmUgbm90IE9OL09GRi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcmVndWxhdG9yLmMKaW5kZXggMzc5MDgxNi4uODQ5N2Y1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcmVndWxhdG9yLmMKQEAgLTE3OCw2ICsxNzgsMTAgQEAKIAlsZWQtPmNkZXYuZmxhZ3MgfD0gTEVEX0NPUkVfU1VTUEVORFJFU1VNRTsKIAlsZWQtPnZjYyA9IHZjYzsKIAorCS8qIHRvIGhhbmRsZSBjb3JyZWN0bHkgYW4gYWxyZWFkeSBlbmFibGVkIHJlZ3VsYXRvciAqLworCWlmIChyZWd1bGF0b3JfaXNfZW5hYmxlZChsZWQtPnZjYykpCisJCWxlZC0+ZW5hYmxlZCA9IDE7CisKIAltdXRleF9pbml0KCZsZWQtPm11dGV4KTsKIAlJTklUX1dPUksoJmxlZC0+d29yaywgbGVkX3dvcmspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy13bTgzNTAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXdtODM1MC5jCmluZGV4IGEwNDUyMzIuLmYxNGVkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXdtODM1MC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXdtODM1MC5jCkBAIC0yMTUsMTMgKzIxNSwxMyBAQAogCiAJaXNpbmsgPSByZWd1bGF0b3JfZ2V0KCZwZGV2LT5kZXYsICJsZWRfaXNpbmsiKTsKIAlpZiAoSVNfRVJSKGlzaW5rKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW50IGdldCBJU0lOS1xuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgSVNJTktcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIFBUUl9FUlIoaXNpbmspOwogCX0KIAogCWRjZGMgPSByZWd1bGF0b3JfZ2V0KCZwZGV2LT5kZXYsICJsZWRfdmNjIik7CiAJaWYgKElTX0VSUihkY2RjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW50IGdldCBEQ0RDXG4iLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBEQ0RDXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IFBUUl9FUlIoZGNkYyk7CiAJCWdvdG8gZXJyX2lzaW5rOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCmluZGV4IDNjNzgxY2QuLjk0OGM1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJcmN1X2Fzc2lnbl9wb2ludGVyKGxnLT5ldmVudGZkcywgbmV3KTsKIAogCS8qCi0JICogV2UncmUgbm90IGluIGEgYmlnIGh1cnJ5LiAgV2FpdCB1bnRpbCBub29uZSdzIGxvb2tpbmcgYXQgb2xkCisJICogV2UncmUgbm90IGluIGEgYmlnIGh1cnJ5LiAgV2FpdCB1bnRpbCBubyBvbmUncyBsb29raW5nIGF0IG9sZAogCSAqIHZlcnNpb24sIHRoZW4gZnJlZSBpdC4KIAkgKi8KIAlzeW5jaHJvbml6ZV9yY3UoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKaW5kZXggNTM5NmM2Ny4uMDlkNzJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKQEAgLTMyOCw3ICszMjgsNyBAQAogCXN3aXRjaCAoa2V5Y29kZSkgewogCWNhc2UgQURCX0tFWV9DQVBTTE9DSzoKIAkJaWYgKCFyZXN0b3JlX2NhcHNsb2NrX2V2ZW50cykgewotCQkJLyogR2VuZXJhdGUgZG93bi91cCBldmVudHMgZm9yIENhcHNMb2NrIGV2ZXJ5dGltZS4gKi8KKwkJCS8qIEdlbmVyYXRlIGRvd24vdXAgZXZlbnRzIGZvciBDYXBzTG9jayBldmVyeSB0aW1lLiAqLwogCQkJaW5wdXRfcmVwb3J0X2tleShhaGlkLT5pbnB1dCwgS0VZX0NBUFNMT0NLLCAxKTsKIAkJCWlucHV0X3N5bmMoYWhpZC0+aW5wdXQpOwogCQkJaW5wdXRfcmVwb3J0X2tleShhaGlkLT5pbnB1dCwgS0VZX0NBUFNMT0NLLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvLWFkYi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW8tYWRiLmMKaW5kZXggYmQ2ZGE3YS4uYjZlZjhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW8tYWRiLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW8tYWRiLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiAJLyogSHJtLi4uIHdlIG1heSB3YW50IHRvIG5vdCBsb2NrIGludGVycnVwdHMgZm9yIHNvCiAJICogbG9uZyAuLi4gb2ggd2VsbCwgd2hvIHVzZXMgdGhhdCBjaGlwIGFueXdheSA/IDopCi0JICogVGhhdCBmdW5jdGlvbiB3aWxsIGJlIHNlbGRvbWx5IHVzZWQgZHVyaW5nIGJvb3QKKwkgKiBUaGF0IGZ1bmN0aW9uIHdpbGwgYmUgc2VsZG9tIHVzZWQgZHVyaW5nIGJvb3QKIAkgKiBvbiByYXJlIG1hY2hpbmVzLCBzby4uLgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWNpb19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKaW5kZXggOWUzZTJjNS4uMDIzNjczMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwpAQCAtNjYyLDcgKzY2Miw3IEBACiAJCWVyciB8PSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMl9mYW5fc3BlZWQpOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJGYWlsZWQgdG8gY3JlYXRlIHRlbXBlcnRhdXJlIGF0dHJpYnV0ZSBmaWxlKHMpLlxuIik7CisJCQkiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wZXJhdHVyZSBhdHRyaWJ1dGUgZmlsZShzKS5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCB0aGVybW9zdGF0X3JlbW92ZV9maWxlcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCmluZGV4IGM5ODcwMzMuLmJiOGI3MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKQEAgLTkxLDcgKzkxLDcgQEAKICAqCiAgKiAgTWFyLiAxMCwgMjAwNSA6IDEuMgogICoJLSBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgWHNlcnZlIEc1Ci0gKgktIFJldHJlaXZlIHB1bXBzIG1pbi9tYXggZnJvbSBFRVBST00gaW1hZ2UgaW4gZGV2aWNlLXRyZWUgKGJyb2tlbikKKyAqCS0gUmV0cmlldmUgcHVtcHMgbWluL21heCBmcm9tIEVFUFJPTSBpbWFnZSBpbiBkZXZpY2UtdHJlZSAoYnJva2VuKQogICoJLSBVc2UgbWluL21heCBtYWNyb3MgaGVyZSBvciB0aGVyZQogICoJLSBMYXRlc3QgZGFyd2luIHVwZGF0ZWQgVTNIIG1pbiBmYW4gc3BlZWQgdG8gMjAlIFBXTQogICoKQEAgLTM3NSw3ICszNzUsNyBAQAogCQlyYyA9IGkyY19tYXN0ZXJfc2VuZChzdGF0ZS0+bW9uaXRvciwgYnVmLCAyKTsKIAkJaWYgKHJjIDw9IDApCiAJCQlnb3RvIGVycm9yOwotCQkvKiBXYWl0IGZvciBjb252ZXJ0aW9uICovCisJCS8qIFdhaXQgZm9yIGNvbnZlcnNpb24gKi8KIAkJbXNsZWVwKDEpOwogCQkvKiBTd2l0Y2ggdG8gZGF0YSByZWdpc3RlciAqLwogCQlidWZbMF0gPSA0OwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAKIAkJZXJyIHw9IGRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9jcHUxX2ludGFrZV9mYW5fcnBtKTsKIAl9CiAJaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGNyZWF0ZSBzb21lIG9mIHRoZSBhdHJpYnV0ZSIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGNyZWF0ZSBzb21lIG9mIHRoZSBhdHRyaWJ1dGUiCiAJCQkiZmlsZXMgZm9yIENQVSAlZFxuIiwgaW5kZXgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKaW5kZXggZDM3ODE5Zi4uNDZjNGU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9tYWNpby5oPgogCi0jZGVmaW5lIExPR19URU1QCQkwCQkJLyogY29udGlub3VzbHkgbG9nIHRlbXBlcmF0dXJlICovCisjZGVmaW5lIExPR19URU1QCQkwCQkJLyogY29udGludW91c2x5IGxvZyB0ZW1wZXJhdHVyZSAqLwogCiBzdGF0aWMgc3RydWN0IHsKIAl2b2xhdGlsZSBpbnQJCXJ1bm5pbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5oIGIvZHJpdmVycy9tZC9iaXRtYXAuaAppbmRleCA5MzFhN2E3Li5kMGFlYWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5oCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqCiAgKiBUaGUgY291bnRlciBjb3VudHMgcGVuZGluZyB3cml0ZSByZXF1ZXN0cywgcGx1cyB0aGUgb24tZGlzayBiaXQuCiAgKiBXaGVuIHRoZSBjb3VudGVyIGlzICcxJyBhbmQgdGhlIHJlc3luYyBiaXRzIGFyZSBjbGVhciwgdGhlIG9uLWRpc2sKLSAqIGJpdCBjYW4gYmUgY2xlYXJlZCBhc3dlbGwsIHRodXMgc2V0dGluZyB0aGUgY291bnRlciB0byAwLgorICogYml0IGNhbiBiZSBjbGVhcmVkIGFzIHdlbGwsIHRodXMgc2V0dGluZyB0aGUgY291bnRlciB0byAwLgogICogV2hlbiB3ZSBzZXQgYSBiaXQsIG9yIGluIHRoZSBjb3VudGVyICh0byBzdGFydCBhIHdyaXRlKSwgaWYgdGhlIGZpZWxkcyBpcwogICogMCwgd2UgZmlyc3Qgc2V0IHRoZSBkaXNrIGJpdCBhbmQgc2V0IHRoZSBjb3VudGVyIHRvIDEuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwppbmRleCA1ZWYxMzZjLi5lNWQ4OTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwpAQCAtMzkwLDEzICszOTAsNiBAQAogCXJldHVybiBtZF9yYWlkNV9jb25nZXN0ZWQoJnJzLT5tZCwgYml0cyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWRfdW5wbHVnKHN0cnVjdCBkbV90YXJnZXRfY2FsbGJhY2tzICpjYikKLXsKLQlzdHJ1Y3QgcmFpZF9zZXQgKnJzID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgcmFpZF9zZXQsIGNhbGxiYWNrcyk7Ci0KLQltZF9yYWlkNV9raWNrX2RldmljZShycy0+bWQucHJpdmF0ZSk7Ci19Ci0KIC8qCiAgKiBDb25zdHJ1Y3QgYSBSQUlENC81LzYgbWFwcGluZzoKICAqIEFyZ3M6CkBAIC00ODcsNyArNDgwLDYgQEAKIAl9CiAKIAlycy0+Y2FsbGJhY2tzLmNvbmdlc3RlZF9mbiA9IHJhaWRfaXNfY29uZ2VzdGVkOwotCXJzLT5jYWxsYmFja3MudW5wbHVnX2ZuID0gcmFpZF91bnBsdWc7CiAJZG1fdGFibGVfYWRkX3RhcmdldF9jYWxsYmFja3ModGktPnRhYmxlLCAmcnMtPmNhbGxiYWNrcyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYyBiL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYwppbmRleCBkYWQwMTFhLi43NzcxZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJlZ2lvbi1oYXNoLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jCkBAIC00MTksNyArNDE5LDcgQEAKIAkvKgogCSAqIFBvc3NpYmxlIGNhc2VzOgogCSAqICAgMSkgRE1fUkhfRElSVFkKLQkgKiAgIDIpIERNX1JIX05PU1lOQzogd2FzIGRpcnR5LCBvdGhlciBwcmVjZWVkaW5nIHdyaXRlcyBmYWlsZWQKKwkgKiAgIDIpIERNX1JIX05PU1lOQzogd2FzIGRpcnR5LCBvdGhlciBwcmVjZWRpbmcgd3JpdGVzIGZhaWxlZAogCSAqICAgMykgRE1fUkhfUkVDT1ZFUklORzogZmx1c2hpbmcgcGVuZGluZyB3cml0ZXMKIAkgKiBFaXRoZXIgY2FzZSwgdGhlIHJlZ2lvbiBzaG91bGQgaGF2ZSBub3QgYmVlbiBjb25uZWN0ZWQgdG8gbGlzdC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwppbmRleCA0MTZkNGUyLi5jYjgzODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMKKysrIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCkBAIC05MjcsMjAgKzkyNyw4MCBAQAogfQogCiAvKgorICogR2V0IGEgZGlzayB3aG9zZSBpbnRlZ3JpdHkgcHJvZmlsZSByZWZsZWN0cyB0aGUgdGFibGUncyBwcm9maWxlLgorICogSWYgJW1hdGNoX2FsbCBpcyB0cnVlLCBhbGwgZGV2aWNlcycgcHJvZmlsZXMgbXVzdCBtYXRjaC4KKyAqIElmICVtYXRjaF9hbGwgaXMgZmFsc2UsIGFsbCBkZXZpY2VzIG11c3QgYXQgbGVhc3QgaGF2ZSBhbgorICogYWxsb2NhdGVkIGludGVncml0eSBwcm9maWxlOyBidXQgdW5pbml0aWFsaXplZCBpcyBvay4KKyAqIFJldHVybnMgTlVMTCBpZiBpbnRlZ3JpdHkgc3VwcG9ydCB3YXMgaW5jb25zaXN0ZW50IG9yIHVuYXZhaWxhYmxlLgorICovCitzdGF0aWMgc3RydWN0IGdlbmRpc2sgKiBkbV90YWJsZV9nZXRfaW50ZWdyaXR5X2Rpc2soc3RydWN0IGRtX3RhYmxlICp0LAorCQkJCQkJICAgIGJvb2wgbWF0Y2hfYWxsKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmRldmljZXMgPSBkbV90YWJsZV9nZXRfZGV2aWNlcyh0KTsKKwlzdHJ1Y3QgZG1fZGV2X2ludGVybmFsICpkZCA9IE5VTEw7CisJc3RydWN0IGdlbmRpc2sgKnByZXZfZGlzayA9IE5VTEwsICp0ZW1wbGF0ZV9kaXNrID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsIGRldmljZXMsIGxpc3QpIHsKKwkJdGVtcGxhdGVfZGlzayA9IGRkLT5kbV9kZXYuYmRldi0+YmRfZGlzazsKKwkJaWYgKCFibGtfZ2V0X2ludGVncml0eSh0ZW1wbGF0ZV9kaXNrKSkKKwkJCWdvdG8gbm9faW50ZWdyaXR5OworCQlpZiAoIW1hdGNoX2FsbCAmJiAhYmxrX2ludGVncml0eV9pc19pbml0aWFsaXplZCh0ZW1wbGF0ZV9kaXNrKSkKKwkJCWNvbnRpbnVlOyAvKiBza2lwIHVuaW5pdGlhbGl6ZWQgcHJvZmlsZXMgKi8KKwkJZWxzZSBpZiAocHJldl9kaXNrICYmCisJCQkgYmxrX2ludGVncml0eV9jb21wYXJlKHByZXZfZGlzaywgdGVtcGxhdGVfZGlzaykgPCAwKQorCQkJZ290byBub19pbnRlZ3JpdHk7CisJCXByZXZfZGlzayA9IHRlbXBsYXRlX2Rpc2s7CisJfQorCisJcmV0dXJuIHRlbXBsYXRlX2Rpc2s7CisKK25vX2ludGVncml0eToKKwlpZiAocHJldl9kaXNrKQorCQlETVdBUk4oIiVzOiBpbnRlZ3JpdHkgbm90IHNldDogJXMgYW5kICVzIHByb2ZpbGUgbWlzbWF0Y2giLAorCQkgICAgICAgZG1fZGV2aWNlX25hbWUodC0+bWQpLAorCQkgICAgICAgcHJldl9kaXNrLT5kaXNrX25hbWUsCisJCSAgICAgICB0ZW1wbGF0ZV9kaXNrLT5kaXNrX25hbWUpOworCXJldHVybiBOVUxMOworfQorCisvKgogICogUmVnaXN0ZXIgdGhlIG1hcHBlZCBkZXZpY2UgZm9yIGJsa19pbnRlZ3JpdHkgc3VwcG9ydCBpZgotICogdGhlIHVuZGVybHlpbmcgZGV2aWNlcyBzdXBwb3J0IGl0LgorICogdGhlIHVuZGVybHlpbmcgZGV2aWNlcyBoYXZlIGFuIGludGVncml0eSBwcm9maWxlLiAgQnV0IGFsbCBkZXZpY2VzCisgKiBtYXkgbm90IGhhdmUgbWF0Y2hpbmcgcHJvZmlsZXMgKGNoZWNraW5nIGFsbCBkZXZpY2VzIGlzbid0IHJlbGlhYmxlCisgKiBkdXJpbmcgdGFibGUgbG9hZCBiZWNhdXNlIHRoaXMgdGFibGUgbWF5IHVzZSBvdGhlciBETSBkZXZpY2Uocykgd2hpY2gKKyAqIG11c3QgYmUgcmVzdW1lZCBiZWZvcmUgdGhleSB3aWxsIGhhdmUgYW4gaW5pdGlhbGl6ZWQgaW50ZWdpdHkgcHJvZmlsZSkuCisgKiBTdGFja2VkIERNIGRldmljZXMgZm9yY2UgYSAyIHN0YWdlIGludGVncml0eSBwcm9maWxlIHZhbGlkYXRpb246CisgKiAxIC0gZHVyaW5nIGxvYWQsIHZhbGlkYXRlIGFsbCBpbml0aWFsaXplZCBpbnRlZ3JpdHkgcHJvZmlsZXMgbWF0Y2gKKyAqIDIgLSBkdXJpbmcgcmVzdW1lLCB2YWxpZGF0ZSBhbGwgaW50ZWdyaXR5IHByb2ZpbGVzIG1hdGNoCiAgKi8KIHN0YXRpYyBpbnQgZG1fdGFibGVfcHJlYWxsb2NfaW50ZWdyaXR5KHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmRldmljZXMgPSBkbV90YWJsZV9nZXRfZGV2aWNlcyh0KTsKLQlzdHJ1Y3QgZG1fZGV2X2ludGVybmFsICpkZDsKKwlzdHJ1Y3QgZ2VuZGlzayAqdGVtcGxhdGVfZGlzayA9IE5VTEw7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRkLCBkZXZpY2VzLCBsaXN0KQotCQlpZiAoYmRldl9nZXRfaW50ZWdyaXR5KGRkLT5kbV9kZXYuYmRldikpIHsKLQkJCXQtPmludGVncml0eV9zdXBwb3J0ZWQgPSAxOwotCQkJcmV0dXJuIGJsa19pbnRlZ3JpdHlfcmVnaXN0ZXIoZG1fZGlzayhtZCksIE5VTEwpOwotCQl9CisJdGVtcGxhdGVfZGlzayA9IGRtX3RhYmxlX2dldF9pbnRlZ3JpdHlfZGlzayh0LCBmYWxzZSk7CisJaWYgKCF0ZW1wbGF0ZV9kaXNrKQorCQlyZXR1cm4gMDsKIAorCWlmICghYmxrX2ludGVncml0eV9pc19pbml0aWFsaXplZChkbV9kaXNrKG1kKSkpIHsKKwkJdC0+aW50ZWdyaXR5X3N1cHBvcnRlZCA9IDE7CisJCXJldHVybiBibGtfaW50ZWdyaXR5X3JlZ2lzdGVyKGRtX2Rpc2sobWQpLCBOVUxMKTsKKwl9CisKKwkvKgorCSAqIElmIERNIGRldmljZSBhbHJlYWR5IGhhcyBhbiBpbml0YWxpemVkIGludGVncml0eQorCSAqIHByb2ZpbGUgdGhlIG5ldyBwcm9maWxlIHNob3VsZCBub3QgY29uZmxpY3QuCisJICovCisJaWYgKGJsa19pbnRlZ3JpdHlfaXNfaW5pdGlhbGl6ZWQodGVtcGxhdGVfZGlzaykgJiYKKwkgICAgYmxrX2ludGVncml0eV9jb21wYXJlKGRtX2Rpc2sobWQpLCB0ZW1wbGF0ZV9kaXNrKSA8IDApIHsKKwkJRE1XQVJOKCIlczogY29uZmxpY3Qgd2l0aCBleGlzdGluZyBpbnRlZ3JpdHkgcHJvZmlsZTogIgorCQkgICAgICAgIiVzIHByb2ZpbGUgbWlzbWF0Y2giLAorCQkgICAgICAgZG1fZGV2aWNlX25hbWUodC0+bWQpLAorCQkgICAgICAgdGVtcGxhdGVfZGlzay0+ZGlza19uYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogUHJlc2VydmUgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgaW50ZWdyaXR5IHByb2ZpbGUgKi8KKwl0LT5pbnRlZ3JpdHlfc3VwcG9ydGVkID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5NCw0MSArMTE1NCwyNyBAQAogCiAvKgogICogU2V0IHRoZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgdGhpcyBkZXZpY2UgaWYgYWxsIGRldmljZXMgdXNlZCBoYXZlCi0gKiBtYXRjaGluZyBwcm9maWxlcy4KKyAqIG1hdGNoaW5nIHByb2ZpbGVzLiAgV2UncmUgcXVpdGUgZGVlcCBpbiB0aGUgcmVzdW1lIHBhdGggYnV0IHN0aWxsCisgKiBkb24ndCBrbm93IGlmIGFsbCBkZXZpY2VzIChwYXJ0aWN1bGFybHkgRE0gZGV2aWNlcyB0aGlzIGRldmljZQorICogbWF5IGJlIHN0YWNrZWQgb24pIGhhdmUgbWF0Y2hpbmcgcHJvZmlsZXMuICBFdmVuIGlmIHRoZSBwcm9maWxlcworICogZG9uJ3QgbWF0Y2ggd2UgaGF2ZSBubyB3YXkgdG8gZmFpbCAodG8gcmVzdW1lKSBhdCB0aGlzIHBvaW50LgogICovCiBzdGF0aWMgdm9pZCBkbV90YWJsZV9zZXRfaW50ZWdyaXR5KHN0cnVjdCBkbV90YWJsZSAqdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpkZXZpY2VzID0gZG1fdGFibGVfZ2V0X2RldmljZXModCk7Ci0Jc3RydWN0IGRtX2Rldl9pbnRlcm5hbCAqcHJldiA9IE5VTEwsICpkZCA9IE5VTEw7CisJc3RydWN0IGdlbmRpc2sgKnRlbXBsYXRlX2Rpc2sgPSBOVUxMOwogCiAJaWYgKCFibGtfZ2V0X2ludGVncml0eShkbV9kaXNrKHQtPm1kKSkpCiAJCXJldHVybjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsIGRldmljZXMsIGxpc3QpIHsKLQkJaWYgKHByZXYgJiYKLQkJICAgIGJsa19pbnRlZ3JpdHlfY29tcGFyZShwcmV2LT5kbV9kZXYuYmRldi0+YmRfZGlzaywKLQkJCQkJICBkZC0+ZG1fZGV2LmJkZXYtPmJkX2Rpc2spIDwgMCkgewotCQkJRE1XQVJOKCIlczogaW50ZWdyaXR5IG5vdCBzZXQ6ICVzIGFuZCAlcyBtaXNtYXRjaCIsCi0JCQkgICAgICAgZG1fZGV2aWNlX25hbWUodC0+bWQpLAotCQkJICAgICAgIHByZXYtPmRtX2Rldi5iZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUsCi0JCQkgICAgICAgZGQtPmRtX2Rldi5iZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUpOwotCQkJZ290byBub19pbnRlZ3JpdHk7Ci0JCX0KLQkJcHJldiA9IGRkOworCXRlbXBsYXRlX2Rpc2sgPSBkbV90YWJsZV9nZXRfaW50ZWdyaXR5X2Rpc2sodCwgdHJ1ZSk7CisJaWYgKCF0ZW1wbGF0ZV9kaXNrICYmCisJICAgIGJsa19pbnRlZ3JpdHlfaXNfaW5pdGlhbGl6ZWQoZG1fZGlzayh0LT5tZCkpKSB7CisJCURNV0FSTigiJXM6IGRldmljZSBubyBsb25nZXIgaGFzIGEgdmFsaWQgaW50ZWdyaXR5IHByb2ZpbGUiLAorCQkgICAgICAgZG1fZGV2aWNlX25hbWUodC0+bWQpKTsKKwkJcmV0dXJuOwogCX0KLQotCWlmICghcHJldiB8fCAhYmRldl9nZXRfaW50ZWdyaXR5KHByZXYtPmRtX2Rldi5iZGV2KSkKLQkJZ290byBub19pbnRlZ3JpdHk7Ci0KIAlibGtfaW50ZWdyaXR5X3JlZ2lzdGVyKGRtX2Rpc2sodC0+bWQpLAotCQkJICAgICAgIGJkZXZfZ2V0X2ludGVncml0eShwcmV2LT5kbV9kZXYuYmRldikpOwotCi0JcmV0dXJuOwotCi1ub19pbnRlZ3JpdHk6Ci0JYmxrX2ludGVncml0eV9yZWdpc3RlcihkbV9kaXNrKHQtPm1kKSwgTlVMTCk7Ci0KLQlyZXR1cm47CisJCQkgICAgICAgYmxrX2dldF9pbnRlZ3JpdHkodGVtcGxhdGVfZGlzaykpOwogfQogCiB2b2lkIGRtX3RhYmxlX3NldF9yZXN0cmljdGlvbnMoc3RydWN0IGRtX3RhYmxlICp0LCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZmF1bHR5LmMgYi9kcml2ZXJzL21kL2ZhdWx0eS5jCmluZGV4IDMzOWZkYzYuLjIzMDc4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZmF1bHR5LmMKKysrIGIvZHJpdmVycy9tZC9mYXVsdHkuYwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIERpZmZlcmVudCBtb2RlcyBjYW4gYmUgYWN0aXZlIGF0IGEgdGltZSwgYnV0IG9ubHkKICAqIG9uZSBjYW4gYmUgc2V0IGF0IGFycmF5IGNyZWF0aW9uLiAgT3RoZXJzIGNhbiBiZSBhZGRlZCBsYXRlci4KLSAqIEEgbW9kZSBjYW4gYmUgb25lLXNob3Qgb3IgcmVjdXJyZW50IHdpdGggdGhlIHJlY3VycmFuY2UgYmVpbmcKKyAqIEEgbW9kZSBjYW4gYmUgb25lLXNob3Qgb3IgcmVjdXJyZW50IHdpdGggdGhlIHJlY3VycmVuY2UgYmVpbmcKICAqIG9uY2UgaW4gZXZlcnkgTiByZXF1ZXN0cy4KICAqIFRoZSBib3R0b20gNSBiaXRzIG9mIHRoZSAibGF5b3V0IiBpbmRpY2F0ZSB0aGUgbW9kZS4gIFRoZQogICogcmVtYWluZGVyIGluZGljYXRlIGEgcGVyaW9kLCBvciAwIGZvciBvbmUtc2hvdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCA4YjY2ZTA0Li43ZDZmN2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC00NDcsNDggKzQ0Nyw1OSBAQAogCiAvKiBTdXBwb3J0IGZvciBwbHVnZ2luZy4KICAqIFRoaXMgbWlycm9ycyB0aGUgcGx1Z2dpbmcgc3VwcG9ydCBpbiByZXF1ZXN0X3F1ZXVlLCBidXQgZG9lcyBub3QKLSAqIHJlcXVpcmUgaGF2aW5nIGEgd2hvbGUgcXVldWUKKyAqIHJlcXVpcmUgaGF2aW5nIGEgd2hvbGUgcXVldWUgb3IgcmVxdWVzdCBzdHJ1Y3R1cmVzLgorICogV2UgYWxsb2NhdGUgYW4gbWRfcGx1Z19jYiBmb3IgZWFjaCBtZCBkZXZpY2UgYW5kIGVhY2ggdGhyZWFkIGl0IGdldHMKKyAqIHBsdWdnZWQgb24uICBUaGlzIGxpbmtzIHRvdCB0aGUgcHJpdmF0ZSBwbHVnX2hhbmRsZSBzdHJ1Y3R1cmUgaW4gdGhlCisgKiBwZXJzb25hbGl0eSBkYXRhIHdoZXJlIHdlIGtlZXAgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nCisgKiBwbHVncyBzbyBvdGhlciBjb2RlIGNhbiBzZWUgaWYgYSBwbHVnIGlzIGFjdGl2ZS4KICAqLwotc3RhdGljIHZvaWQgcGx1Z2dlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBsdWdfaGFuZGxlLCB1bnBsdWdfd29yayk7Ci0JcGx1Zy0+dW5wbHVnX2ZuKHBsdWcpOwotfQotc3RhdGljIHZvaWQgcGx1Z2dlcl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcgPSAodm9pZCAqKWRhdGE7Ci0Ja2Jsb2NrZF9zY2hlZHVsZV93b3JrKE5VTEwsICZwbHVnLT51bnBsdWdfd29yayk7Ci19Ci12b2lkIHBsdWdnZXJfaW5pdChzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcsCi0JCSAgdm9pZCAoKnVucGx1Z19mbikoc3RydWN0IHBsdWdfaGFuZGxlICopKQotewotCXBsdWctPnVucGx1Z19mbGFnID0gMDsKLQlwbHVnLT51bnBsdWdfZm4gPSB1bnBsdWdfZm47Ci0JaW5pdF90aW1lcigmcGx1Zy0+dW5wbHVnX3RpbWVyKTsKLQlwbHVnLT51bnBsdWdfdGltZXIuZnVuY3Rpb24gPSBwbHVnZ2VyX3RpbWVvdXQ7Ci0JcGx1Zy0+dW5wbHVnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwbHVnOwotCUlOSVRfV09SSygmcGx1Zy0+dW5wbHVnX3dvcmssIHBsdWdnZXJfd29yayk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwbHVnZ2VyX2luaXQpOworc3RydWN0IG1kX3BsdWdfY2IgeworCXN0cnVjdCBibGtfcGx1Z19jYiBjYjsKKwltZGRldl90ICptZGRldjsKK307CiAKLXZvaWQgcGx1Z2dlcl9zZXRfcGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpCitzdGF0aWMgdm9pZCBwbHVnZ2VyX3VucGx1ZyhzdHJ1Y3QgYmxrX3BsdWdfY2IgKmNiKQogewotCWlmICghdGVzdF9hbmRfc2V0X2JpdChQTFVHR0VEX0ZMQUcsICZwbHVnLT51bnBsdWdfZmxhZykpCi0JCW1vZF90aW1lcigmcGx1Zy0+dW5wbHVnX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygzKSsxKTsKKwlzdHJ1Y3QgbWRfcGx1Z19jYiAqbWRjYiA9IGNvbnRhaW5lcl9vZihjYiwgc3RydWN0IG1kX3BsdWdfY2IsIGNiKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWRjYi0+bWRkZXYtPnBsdWdfY250KSkKKwkJbWRfd2FrZXVwX3RocmVhZChtZGNiLT5tZGRldi0+dGhyZWFkKTsKKwlrZnJlZShtZGNiKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHBsdWdnZXJfc2V0X3BsdWcpOwogCi1pbnQgcGx1Z2dlcl9yZW1vdmVfcGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpCisvKiBDaGVjayB0aGF0IGFuIHVucGx1ZyB3YWtldXAgd2lsbCBjb21lIHNob3J0bHkuCisgKiBJZiBub3QsIHdha2V1cCB0aGUgbWQgdGhyZWFkIGltbWVkaWF0ZWx5CisgKi8KK2ludCBtZGRldl9jaGVja19wbHVnZ2VkKG1kZGV2X3QgKm1kZGV2KQogewotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUExVR0dFRF9GTEFHLCAmcGx1Zy0+dW5wbHVnX2ZsYWcpKSB7Ci0JCWRlbF90aW1lcigmcGx1Zy0+dW5wbHVnX3RpbWVyKTsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlCisJc3RydWN0IGJsa19wbHVnICpwbHVnID0gY3VycmVudC0+cGx1ZzsKKwlzdHJ1Y3QgbWRfcGx1Z19jYiAqbWRjYjsKKworCWlmICghcGx1ZykKIAkJcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwbHVnZ2VyX3JlbW92ZV9wbHVnKTsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkobWRjYiwgJnBsdWctPmNiX2xpc3QsIGNiLmxpc3QpIHsKKwkJaWYgKG1kY2ItPmNiLmNhbGxiYWNrID09IHBsdWdnZXJfdW5wbHVnICYmCisJCSAgICBtZGNiLT5tZGRldiA9PSBtZGRldikgeworCQkJLyogQWxyZWFkeSBvbiB0aGUgbGlzdCwgbW92ZSB0byB0b3AgKi8KKwkJCWlmIChtZGNiICE9IGxpc3RfZmlyc3RfZW50cnkoJnBsdWctPmNiX2xpc3QsCisJCQkJCQkgICAgc3RydWN0IG1kX3BsdWdfY2IsCisJCQkJCQkgICAgY2IubGlzdCkpCisJCQkJbGlzdF9tb3ZlKCZtZGNiLT5jYi5saXN0LCAmcGx1Zy0+Y2JfbGlzdCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwkvKiBOb3QgY3VycmVudGx5IG9uIHRoZSBjYWxsYmFjayBsaXN0ICovCisJbWRjYiA9IGttYWxsb2Moc2l6ZW9mKCptZGNiKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFtZGNiKQorCQlyZXR1cm4gMDsKKworCW1kY2ItPm1kZGV2ID0gbWRkZXY7CisJbWRjYi0+Y2IuY2FsbGJhY2sgPSBwbHVnZ2VyX3VucGx1ZzsKKwlhdG9taWNfaW5jKCZtZGRldi0+cGx1Z19jbnQpOworCWxpc3RfYWRkKCZtZGNiLT5jYi5saXN0LCAmcGx1Zy0+Y2JfbGlzdCk7CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9jaGVja19wbHVnZ2VkKTsKIAogc3RhdGljIGlubGluZSBtZGRldl90ICptZGRldl9nZXQobWRkZXZfdCAqbWRkZXYpCiB7CkBAIC01MzgsNiArNTQ5LDcgQEAKIAlhdG9taWNfc2V0KCZtZGRldi0+YWN0aXZlLCAxKTsKIAlhdG9taWNfc2V0KCZtZGRldi0+b3BlbmVycywgMCk7CiAJYXRvbWljX3NldCgmbWRkZXYtPmFjdGl2ZV9pbywgMCk7CisJYXRvbWljX3NldCgmbWRkZXYtPnBsdWdfY250LCAwKTsKIAlzcGluX2xvY2tfaW5pdCgmbWRkZXYtPndyaXRlX2xvY2spOwogCWF0b21pY19zZXQoJm1kZGV2LT5mbHVzaF9wZW5kaW5nLCAwKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZGRldi0+c2Jfd2FpdCk7CkBAIC0zMTU4LDYgKzMxNzAsNyBAQAogCW1kZGV2LT5sYXlvdXQgPSBtZGRldi0+bmV3X2xheW91dDsKIAltZGRldi0+Y2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5uZXdfY2h1bmtfc2VjdG9yczsKIAltZGRldi0+ZGVsdGFfZGlza3MgPSAwOworCW1kZGV2LT5kZWdyYWRlZCA9IDA7CiAJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QgPT0gTlVMTCkgewogCQkvKiB0aGlzIGlzIG5vdyBhbiBhcnJheSB3aXRob3V0IHJlZHVuZGFuY3ksIHNvCiAJCSAqIGl0IG11c3QgYWx3YXlzIGJlIGluX3N5bmMKQEAgLTQ3MjMsNyArNDczNiw2IEBACiAJbWRkZXYtPmJpdG1hcF9pbmZvLmNodW5rc2l6ZSA9IDA7CiAJbWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcCA9IDA7CiAJbWRkZXYtPmJpdG1hcF9pbmZvLm1heF93cml0ZV9iZWhpbmQgPSAwOwotCW1kZGV2LT5wbHVnID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgX19tZF9zdG9wX3dyaXRlcyhtZGRldl90ICptZGRldikKQEAgLTYyNjYsNyArNjI3OCw3IEBACiAJICogcnQgaXMgYSBzZWN0b3JfdCwgc28gY291bGQgYmUgMzJiaXQgb3IgNjRiaXQuCiAJICogU28gd2UgZGl2aWRlIGJlZm9yZSBtdWx0aXBseSBpbiBjYXNlIGl0IGlzIDMyYml0IGFuZCBjbG9zZQogCSAqIHRvIHRoZSBsaW1pdC4KLQkgKiBXZSBzY2FsZSB0aGUgZGl2aXNvciAoZGIpIGJ5IDMyIHRvIGF2b2lkIGxvb3NpbmcgcHJlY2lzaW9uCisJICogV2Ugc2NhbGUgdGhlIGRpdmlzb3IgKGRiKSBieSAzMiB0byBhdm9pZCBsb3NpbmcgcHJlY2lzaW9uCiAJICogbmVhciB0aGUgZW5kIG9mIHJlc3luYyB3aGVuIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHNlY3RvcnMKIAkgKiBpcyBjbG9zZSB0byAnZGInLgogCSAqIFdlIHRoZW4gZGl2aWRlIHJ0IGJ5IDMyIGFmdGVyIG11bHRpcGx5aW5nIGJ5IGRiIHRvIGNvbXBlbnNhdGUuCkBAIC02Njg4LDEyICs2NzAwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1kX2FsbG93X3dyaXRlKTsKIAotdm9pZCBtZF91bnBsdWcobWRkZXZfdCAqbWRkZXYpCi17Ci0JaWYgKG1kZGV2LT5wbHVnKQotCQltZGRldi0+cGx1Zy0+dW5wbHVnX2ZuKG1kZGV2LT5wbHVnKTsKLX0KLQogI2RlZmluZSBTWU5DX01BUktTCTEwCiAjZGVmaW5lCVNZTkNfTUFSS19TVEVQCSgzKkhaKQogdm9pZCBtZF9kb19zeW5jKG1kZGV2X3QgKm1kZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IDEyMjE1ZDQuLjBiMWZkM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAorKysgYi9kcml2ZXJzL21kL21kLmgKQEAgLTI5LDI2ICsyOSw2IEBACiB0eXBlZGVmIHN0cnVjdCBtZGRldl9zIG1kZGV2X3Q7CiB0eXBlZGVmIHN0cnVjdCBtZGtfcmRldl9zIG1ka19yZGV2X3Q7CiAKLS8qIGdlbmVyaWMgcGx1Z2dpbmcgc3VwcG9ydCAtIGxpa2UgdGhhdCBwcm92aWRlZCB3aXRoIHJlcXVlc3RfcXVldWUsCi0gKiBidXQgZG9lcyBub3QgcmVxdWlyZSBhIHJlcXVlc3RfcXVldWUKLSAqLwotc3RydWN0IHBsdWdfaGFuZGxlIHsKLQl2b2lkCQkJKCp1bnBsdWdfZm4pKHN0cnVjdCBwbHVnX2hhbmRsZSAqKTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAl1bnBsdWdfdGltZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXVucGx1Z193b3JrOwotCXVuc2lnbmVkIGxvbmcJCXVucGx1Z19mbGFnOwotfTsKLSNkZWZpbmUJUExVR0dFRF9GTEFHIDEKLXZvaWQgcGx1Z2dlcl9pbml0KHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZywKLQkJICB2b2lkICgqdW5wbHVnX2ZuKShzdHJ1Y3QgcGx1Z19oYW5kbGUgKikpOwotdm9pZCBwbHVnZ2VyX3NldF9wbHVnKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1Zyk7Ci1pbnQgcGx1Z2dlcl9yZW1vdmVfcGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpOwotc3RhdGljIGlubGluZSB2b2lkIHBsdWdnZXJfZmx1c2goc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnKQotewotCWRlbF90aW1lcl9zeW5jKCZwbHVnLT51bnBsdWdfdGltZXIpOwotCWNhbmNlbF93b3JrX3N5bmMoJnBsdWctPnVucGx1Z193b3JrKTsKLX0KLQogLyoKICAqIE1EJ3MgJ2V4dGVuZGVkJyBkZXZpY2UKICAqLwpAQCAtOTQsNyArNzQsNyBAQAogI2RlZmluZQlJbl9zeW5jCQkyCQkvKiBkZXZpY2UgaXMgaW5fc3luYyB3aXRoIHJlc3Qgb2YgYXJyYXkgKi8KICNkZWZpbmUJV3JpdGVNb3N0bHkJNAkJLyogQXZvaWQgcmVhZGluZyBpZiBhdCBhbGwgcG9zc2libGUgKi8KICNkZWZpbmUJQXV0b0RldGVjdGVkCTcJCS8qIGFkZGVkIGJ5IGF1dG8tZGV0ZWN0ICovCi0jZGVmaW5lIEJsb2NrZWQJCTgJCS8qIEFuIGVycm9yIG9jY3VyZWQgb24gYW4gZXh0ZXJuYWxseQorI2RlZmluZSBCbG9ja2VkCQk4CQkvKiBBbiBlcnJvciBvY2N1cnJlZCBvbiBhbiBleHRlcm5hbGx5CiAJCQkJCSAqIG1hbmFnZWQgYXJyYXksIGRvbid0IGFsbG93IHdyaXRlcwogCQkJCQkgKiB1bnRpbCBpdCBpcyBjbGVhcmVkICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgYmxvY2tlZF93YWl0OwpAQCAtMTk5LDYgKzE3OSw5IEBACiAJaW50CQkJCWRlbHRhX2Rpc2tzLCBuZXdfbGV2ZWwsIG5ld19sYXlvdXQ7CiAJaW50CQkJCW5ld19jaHVua19zZWN0b3JzOwogCisJYXRvbWljX3QJCQlwbHVnX2NudDsJLyogSWYgZGV2aWNlIGlzIGV4cGVjdGluZworCQkJCQkJCSAqIG1vcmUgYmlvcyBzb29uLgorCQkJCQkJCSAqLwogCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSp0aHJlYWQ7CS8qIG1hbmFnZW1lbnQgdGhyZWFkICovCiAJc3RydWN0IG1ka190aHJlYWRfcwkJKnN5bmNfdGhyZWFkOwkvKiBkb2luZyByZXN5bmMgb3IgcmVjb25zdHJ1Y3QgKi8KIAlzZWN0b3JfdAkJCWN1cnJfcmVzeW5jOwkvKiBsYXN0IGJsb2NrIHNjaGVkdWxlZCAqLwpAQCAtMzM2LDcgKzMxOSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAkJYWxsX21kZGV2czsKIAogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSp0b19yZW1vdmU7Ci0Jc3RydWN0IHBsdWdfaGFuZGxlCQkqcGx1ZzsgLyogaWYgdXNlZCBieSBwZXJzb25hbGl0eSAqLwogCiAJc3RydWN0IGJpb19zZXQJCQkqYmlvX3NldDsKIApAQCAtNTE2LDcgKzQ5OCw2IEBACiBleHRlcm4gdm9pZCBtZF9pbnRlZ3JpdHlfYWRkX3JkZXYobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIGludCBzdHJpY3Rfc3RydG91bF9zY2FsZWQoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGxvbmcgKnJlcywgaW50IHNjYWxlKTsKIGV4dGVybiB2b2lkIHJlc3RvcmVfYml0bWFwX3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1leHRlcm4gdm9pZCBtZF91bnBsdWcobWRkZXZfdCAqbWRkZXYpOwogCiBleHRlcm4gdm9pZCBtZGRldl9pbml0KG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiBpbnQgbWRfcnVuKG1kZGV2X3QgKm1kZGV2KTsKQEAgLTUzMCw0ICs1MTEsNSBAQAogCQkJCSAgIG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfbWRkZXYoZ2ZwX3QgZ2ZwX21hc2ssIGludCBucl9pb3ZlY3MsCiAJCQkJICAgbWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIGludCBtZGRldl9jaGVja19wbHVnZ2VkKG1kZGV2X3QgKm1kZGV2KTsKICNlbmRpZiAvKiBfTURfTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGMyYTIxYWU1Li4yYjdhN2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC01NjUsMTIgKzU2NSw2IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBtZF9raWNrX2RldmljZShtZGRldl90ICptZGRldikKLXsKLQlibGtfZmx1c2hfcGx1ZyhjdXJyZW50KTsKLQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotfQotCiAvKiBCYXJyaWVycy4uLi4KICAqIFNvbWV0aW1lcyB3ZSBuZWVkIHRvIHN1c3BlbmQgSU8gd2hpbGUgd2UgZG8gc29tZXRoaW5nIGVsc2UsCiAgKiBlaXRoZXIgc29tZSByZXN5bmMvcmVjb3ZlcnksIG9yIHJlY29uZmlndXJlIHRoZSBhcnJheS4KQEAgLTYwMCw3ICs1OTQsNyBAQAogCiAJLyogV2FpdCB1bnRpbCBubyBibG9jayBJTyBpcyB3YWl0aW5nICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsICFjb25mLT5ucl93YWl0aW5nLAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJLyogYmxvY2sgYW55IG5ldyBJTyBmcm9tIHN0YXJ0aW5nICovCiAJY29uZi0+YmFycmllcisrOwpAQCAtNjA4LDcgKzYwMiw3IEBACiAJLyogTm93IHdhaXQgZm9yIGFsbCBwZW5kaW5nIElPIHRvIGNvbXBsZXRlICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsCiAJCQkgICAgIWNvbmYtPm5yX3BlbmRpbmcgJiYgY29uZi0+YmFycmllciA8IFJFU1lOQ19ERVBUSCwKLQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpKTsKKwkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOwogfQpAQCAtNjMwLDcgKzYyNCw3IEBACiAJCWNvbmYtPm5yX3dhaXRpbmcrKzsKIAkJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsICFjb25mLT5iYXJyaWVyLAogCQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywKLQkJCQkgICAgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpKTsKKwkJCQkgICAgKTsKIAkJY29uZi0+bnJfd2FpdGluZy0tOwogCX0KIAljb25mLT5ucl9wZW5kaW5nKys7CkBAIC02NjYsOCArNjYwLDcgQEAKIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwKIAkJCSAgICBjb25mLT5ucl9wZW5kaW5nID09IGNvbmYtPm5yX3F1ZXVlZCsxLAogCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJICAgICh7IGZsdXNoX3BlbmRpbmdfd3JpdGVzKGNvbmYpOwotCQkJICAgICAgIG1kX2tpY2tfZGV2aWNlKGNvbmYtPm1kZGV2KTsgfSkpOworCQkJICAgIGZsdXNoX3BlbmRpbmdfd3JpdGVzKGNvbmYpKTsKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsKIH0KIHN0YXRpYyB2b2lkIHVuZnJlZXplX2FycmF5KGNvbmZfdCAqY29uZikKQEAgLTcyOSw2ICs3MjIsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fc3luYyA9IChiaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fZmx1c2hfZnVhID0gKGJpby0+YmlfcncgJiAoUkVRX0ZMVVNIIHwgUkVRX0ZVQSkpOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKKwlpbnQgcGx1Z2dlZDsKIAogCS8qCiAJICogUmVnaXN0ZXIgdGhlIG5ldyByZXF1ZXN0IGFuZCB3YWl0IGlmIHRoZSByZWNvbnN0cnVjdGlvbgpAQCAtODIwLDYgKzgxNCw4IEBACiAJICogaW5jIHJlZmNvdW50IG9uIHRoZWlyIHJkZXYuICBSZWNvcmQgdGhlbSBieSBzZXR0aW5nCiAJICogYmlvc1t4XSB0byBiaW8KIAkgKi8KKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CisKIAlkaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAgcmV0cnlfd3JpdGU6CiAJYmxvY2tlZF9yZGV2ID0gTlVMTDsKQEAgLTkyNSw3ICs5MjEsNyBAQAogCS8qIEluIGNhc2UgcmFpZDFkIHNudWNrIGluIHRvIGZyZWV6ZV9hcnJheSAqLwogCXdha2VfdXAoJmNvbmYtPndhaXRfYmFycmllcik7CiAKLQlpZiAoZG9fc3luYyB8fCAhYml0bWFwKQorCWlmIChkb19zeW5jIHx8ICFiaXRtYXAgfHwgIXBsdWdnZWQpCiAJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTYsMTMgKzE1MTIsMTYgQEAKIAljb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmNvbmYtPnJldHJ5X2xpc3Q7CiAJbWRrX3JkZXZfdCAqcmRldjsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCW1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2KTsKLQkKKworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAlmb3IgKDs7KSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlmbHVzaF9wZW5kaW5nX3dyaXRlcyhjb25mKTsKKwkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+cGx1Z19jbnQpID09IDApCisJCQlmbHVzaF9wZW5kaW5nX3dyaXRlcyhjb25mKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTE1OTMsNiArMTU5Miw3IEBACiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CiAJfQorCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiB9CiAKIApAQCAtMjAzOSw3ICsyMDM5LDYgQEAKIAogCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCW1kZGV2LT50aHJlYWQgPSBOVUxMOwotCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLwogCWlmIChjb25mLT5yMWJpb19wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koY29uZi0+cjFiaW9fcG9vbCk7CiAJa2ZyZWUoY29uZi0+bWlycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCBmN2I2MjM3Li44ZTk0NjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogUkFJRC0xMCBzdXBwb3J0IGZvciBtZC4KICAqCi0gKiBCYXNlIG9uIGNvZGUgaW4gcmFpZDEuYy4gIFNlZSByYWlkMS5jIGZvciBmdXRoZXIgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogQmFzZSBvbiBjb2RlIGluIHJhaWQxLmMuICBTZWUgcmFpZDEuYyBmb3IgZnVydGhlciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zNDAsMTQgKzM0MCwxNCBAQAogCiAvKgogICogUkFJRDEwIGxheW91dCBtYW5hZ2VyCi0gKiBBc3dlbGwgYXMgdGhlIGNodW5rc2l6ZSBhbmQgcmFpZF9kaXNrcyBjb3VudCwgdGhlcmUgYXJlIHR3bworICogQXMgd2VsbCBhcyB0aGUgY2h1bmtzaXplIGFuZCByYWlkX2Rpc2tzIGNvdW50LCB0aGVyZSBhcmUgdHdvCiAgKiBwYXJhbWV0ZXJzOiBuZWFyX2NvcGllcyBhbmQgZmFyX2NvcGllcy4KICAqIG5lYXJfY29waWVzICogZmFyX2NvcGllcyBtdXN0IGJlIDw9IHJhaWRfZGlza3MuCiAgKiBOb3JtYWxseSBvbmUgb2YgdGhlc2Ugd2lsbCBiZSAxLgogICogSWYgYm90aCBhcmUgMSwgd2UgZ2V0IHJhaWQwLgogICogSWYgbmVhcl9jb3BpZXMgPT0gcmFpZF9kaXNrcywgd2UgZ2V0IHJhaWQxLgogICoKLSAqIENodW5rcyBhcmUgbGF5ZWQgb3V0IGluIHJhaWQwIHN0eWxlIHdpdGggbmVhcl9jb3BpZXMgY29waWVzIG9mIHRoZQorICogQ2h1bmtzIGFyZSBsYWlkIG91dCBpbiByYWlkMCBzdHlsZSB3aXRoIG5lYXJfY29waWVzIGNvcGllcyBvZiB0aGUKICAqIGZpcnN0IGNodW5rLCBmb2xsb3dlZCBieSBuZWFyX2NvcGllcyBjb3BpZXMgb2YgdGhlIG5leHQgY2h1bmsgYW5kCiAgKiBzbyBvbi4KICAqIElmIGZhcl9jb3BpZXMgPiAxLCB0aGVuIGFmdGVyIDEvZmFyX2NvcGllcyBvZiB0aGUgYXJyYXkgaGFzIGJlZW4gYXNzaWduZWQKQEAgLTYzNCwxMiArNjM0LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1kX2tpY2tfZGV2aWNlKG1kZGV2X3QgKm1kZGV2KQotewotCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7Ci19Ci0KIC8qIEJhcnJpZXJzLi4uLgogICogU29tZXRpbWVzIHdlIG5lZWQgdG8gc3VzcGVuZCBJTyB3aGlsZSB3ZSBkbyBzb21ldGhpbmcgZWxzZSwKICAqIGVpdGhlciBzb21lIHJlc3luYy9yZWNvdmVyeSwgb3IgcmVjb25maWd1cmUgdGhlIGFycmF5LgpAQCAtNjY5LDE1ICs2NjMsMTUgQEAKIAogCS8qIFdhaXQgdW50aWwgbm8gYmxvY2sgSU8gaXMgd2FpdGluZyAodW5sZXNzICdmb3JjZScpICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsIGZvcmNlIHx8ICFjb25mLT5ucl93YWl0aW5nLAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJLyogYmxvY2sgYW55IG5ldyBJTyBmcm9tIHN0YXJ0aW5nICovCiAJY29uZi0+YmFycmllcisrOwogCi0JLyogTm8gd2FpdCBmb3IgYWxsIHBlbmRpbmcgSU8gdG8gY29tcGxldGUgKi8KKwkvKiBOb3cgd2FpdCBmb3IgYWxsIHBlbmRpbmcgSU8gdG8gY29tcGxldGUgKi8KIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwKIAkJCSAgICAhY29uZi0+bnJfcGVuZGluZyAmJiBjb25mLT5iYXJyaWVyIDwgUkVTWU5DX0RFUFRILAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CkBAIC02OTgsNyArNjkyLDcgQEAKIAkJY29uZi0+bnJfd2FpdGluZysrOwogCQl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwgIWNvbmYtPmJhcnJpZXIsCiAJCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJCSAgICBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJCSAgICApOwogCQljb25mLT5ucl93YWl0aW5nLS07CiAJfQogCWNvbmYtPm5yX3BlbmRpbmcrKzsKQEAgLTczNCw4ICs3MjgsOCBAQAogCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9iYXJyaWVyLAogCQkJICAgIGNvbmYtPm5yX3BlbmRpbmcgPT0gY29uZi0+bnJfcXVldWVkKzEsCiAJCQkgICAgY29uZi0+cmVzeW5jX2xvY2ssCi0JCQkgICAgKHsgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZik7Ci0JCQkgICAgICAgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpOyB9KSk7CisJCQkgICAgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZikpOworCiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CiAKQEAgLTc2Miw2ICs3NTYsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fZnVhID0gKGJpby0+YmlfcncgJiBSRVFfRlVBKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKKwlpbnQgcGx1Z2dlZDsKIAogCWlmICh1bmxpa2VseShiaW8tPmJpX3J3ICYgUkVRX0ZMVVNIKSkgewogCQltZF9mbHVzaF9yZXF1ZXN0KG1kZGV2LCBiaW8pOwpAQCAtODcwLDYgKzg2NSw4IEBACiAJICogaW5jIHJlZmNvdW50IG9uIHRoZWlyIHJkZXYuICBSZWNvcmQgdGhlbSBieSBzZXR0aW5nCiAJICogYmlvc1t4XSB0byBiaW8KIAkgKi8KKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CisKIAlyYWlkMTBfZmluZF9waHlzKGNvbmYsIHIxMF9iaW8pOwogIHJldHJ5X3dyaXRlOgogCWJsb2NrZWRfcmRldiA9IE5VTEw7CkBAIC05NDYsOSArOTQzLDggQEAKIAkvKiBJbiBjYXNlIHJhaWQxMGQgc251Y2sgaW4gdG8gZnJlZXplX2FycmF5ICovCiAJd2FrZV91cCgmY29uZi0+d2FpdF9iYXJyaWVyKTsKIAotCWlmIChkb19zeW5jIHx8ICFtZGRldi0+Yml0bWFwKQorCWlmIChkb19zeW5jIHx8ICFtZGRldi0+Yml0bWFwIHx8ICFwbHVnZ2VkKQogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NDAsOSArMTYzNiwxMSBAQAogCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmY29uZi0+cmV0cnlfbGlzdDsKIAltZGtfcmRldl90ICpyZGV2OworCXN0cnVjdCBibGtfcGx1ZyBwbHVnOwogCiAJbWRfY2hlY2tfcmVjb3ZlcnkobWRkZXYpOwogCisJYmxrX3N0YXJ0X3BsdWcoJnBsdWcpOwogCWZvciAoOzspIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCkBAIC0xNzE2LDYgKzE3MTQsNyBAQAogCQl9CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmggYi9kcml2ZXJzL21kL3JhaWQxMC5oCmluZGV4IDIzMTZhYzIuLjk0NGIxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmgKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuaApAQCAtMTcsOCArMTcsOCBAQAogCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOwogCiAJLyogZ2VvbWV0cnkgKi8KLQlpbnQJCQluZWFyX2NvcGllczsgIC8qIG51bWJlciBvZiBjb3BpZXMgbGF5ZWQgb3V0IHJhaWQwIHN0eWxlICovCi0JaW50IAkJCWZhcl9jb3BpZXM7ICAgLyogbnVtYmVyIG9mIGNvcGllcyBsYXllZCBvdXQKKwlpbnQJCQluZWFyX2NvcGllczsgIC8qIG51bWJlciBvZiBjb3BpZXMgbGFpZCBvdXQgcmFpZDAgc3R5bGUgKi8KKwlpbnQgCQkJZmFyX2NvcGllczsgICAvKiBudW1iZXIgb2YgY29waWVzIGxhaWQgb3V0CiAJCQkJCSAgICAgICAqIGF0IGxhcmdlIHN0cmlkZXMgYWNyb3NzIGRyaXZlcwogCQkJCQkgICAgICAgKi8KIAlpbnQJCQlmYXJfb2Zmc2V0OyAgIC8qIGZhcl9jb3BpZXMgYXJlIG9mZnNldCBieSAxIHN0cmlwZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGU4NjdlZTQuLjQ5YmY1ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTI3LDEyICsyNywxMiBAQAogICoKICAqIFdlIGdyb3VwIGJpdG1hcCB1cGRhdGVzIGludG8gYmF0Y2hlcy4gIEVhY2ggYmF0Y2ggaGFzIGEgbnVtYmVyLgogICogV2UgbWF5IHdyaXRlIG91dCBzZXZlcmFsIGJhdGNoZXMgYXQgb25jZSwgYnV0IHRoYXQgaXNuJ3QgdmVyeSBpbXBvcnRhbnQuCi0gKiBjb25mLT5ibV93cml0ZSBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGJhdGNoIHN1Y2Nlc3NmdWxseSB3cml0dGVuLgotICogY29uZi0+Ym1fZmx1c2ggaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBiYXRjaCB0aGF0IHdhcyBjbG9zZWQgdG8KKyAqIGNvbmYtPnNlcV93cml0ZSBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGJhdGNoIHN1Y2Nlc3NmdWxseSB3cml0dGVuLgorICogY29uZi0+c2VxX2ZsdXNoIGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgYmF0Y2ggdGhhdCB3YXMgY2xvc2VkIHRvCiAgKiAgICBuZXcgYWRkaXRpb25zLgogICogV2hlbiB3ZSBkaXNjb3ZlciB0aGF0IHdlIHdpbGwgbmVlZCB0byB3cml0ZSB0byBhbnkgYmxvY2sgaW4gYSBzdHJpcGUKICAqIChpbiBhZGRfc3RyaXBlX2Jpbykgd2UgdXBkYXRlIHRoZSBpbi1tZW1vcnkgYml0bWFwIGFuZCByZWNvcmQgaW4gc2gtPmJtX3NlcQotICogdGhlIG51bWJlciBvZiB0aGUgYmF0Y2ggaXQgd2lsbCBiZSBpbi4gVGhpcyBpcyBibV9mbHVzaCsxLgorICogdGhlIG51bWJlciBvZiB0aGUgYmF0Y2ggaXQgd2lsbCBiZSBpbi4gVGhpcyBpcyBzZXFfZmx1c2grMS4KICAqIFdoZW4gd2UgYXJlIHJlYWR5IHRvIGRvIGEgd3JpdGUsIGlmIHRoYXQgYmF0Y2ggaGFzbid0IGJlZW4gd3JpdHRlbiB5ZXQsCiAgKiAgIHdlIHBsdWcgdGhlIGFycmF5IGFuZCBxdWV1ZSB0aGUgc3RyaXBlIGZvciBsYXRlci4KICAqIFdoZW4gYW4gdW5wbHVnIGhhcHBlbnMsIHdlIGluY3JlbWVudCBibV9mbHVzaCwgdGh1cyBjbG9zaW5nIHRoZSBjdXJyZW50CkBAIC0xOTksMTQgKzE5OSwxMiBAQAogCQlCVUdfT04oIWxpc3RfZW1wdHkoJnNoLT5scnUpKTsKIAkJQlVHX09OKGF0b21pY19yZWFkKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk9PTApOwogCQlpZiAodGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpIHsKLQkJCWlmICh0ZXN0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSkpIHsKKwkJCWlmICh0ZXN0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSkpCiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmRlbGF5ZWRfbGlzdCk7Ci0JCQkJcGx1Z2dlcl9zZXRfcGx1ZygmY29uZi0+cGx1Zyk7Ci0JCQl9IGVsc2UgaWYgKHRlc3RfYml0KFNUUklQRV9CSVRfREVMQVksICZzaC0+c3RhdGUpICYmCi0JCQkJICAgc2gtPmJtX3NlcSAtIGNvbmYtPnNlcV93cml0ZSA+IDApIHsKKwkJCWVsc2UgaWYgKHRlc3RfYml0KFNUUklQRV9CSVRfREVMQVksICZzaC0+c3RhdGUpICYmCisJCQkJICAgc2gtPmJtX3NlcSAtIGNvbmYtPnNlcV93cml0ZSA+IDApCiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmJpdG1hcF9saXN0KTsKLQkJCQlwbHVnZ2VyX3NldF9wbHVnKCZjb25mLT5wbHVnKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlIHsKIAkJCQljbGVhcl9iaXQoU1RSSVBFX0JJVF9ERUxBWSwgJnNoLT5zdGF0ZSk7CiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmhhbmRsZV9saXN0KTsKIAkJCX0KQEAgLTQ2MSw3ICs0NTksNyBAQAogCQkJCQkJICAgICA8IChjb25mLT5tYXhfbnJfc3RyaXBlcyAqMy80KQogCQkJCQkJICAgICB8fCAhY29uZi0+aW5hY3RpdmVfYmxvY2tlZCksCiAJCQkJCQkgICAgY29uZi0+ZGV2aWNlX2xvY2ssCi0JCQkJCQkgICAgbWRfcmFpZDVfa2lja19kZXZpY2UoY29uZikpOworCQkJCQkJICAgICk7CiAJCQkJY29uZi0+aW5hY3RpdmVfYmxvY2tlZCA9IDA7CiAJCQl9IGVsc2UKIAkJCQlpbml0X3N0cmlwZShzaCwgc2VjdG9yLCBwcmV2aW91cyk7CkBAIC0xNDcwLDcgKzE0NjgsNyBAQAogCQl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfZm9yX3N0cmlwZSwKIAkJCQkgICAgIWxpc3RfZW1wdHkoJmNvbmYtPmluYWN0aXZlX2xpc3QpLAogCQkJCSAgICBjb25mLT5kZXZpY2VfbG9jaywKLQkJCQkgICAgYmxrX2ZsdXNoX3BsdWcoY3VycmVudCkpOworCQkJCSAgICApOwogCQlvc2ggPSBnZXRfZnJlZV9zdHJpcGUoY29uZik7CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQlhdG9taWNfc2V0KCZuc2gtPmNvdW50LCAxKTsKQEAgLTM2MjMsOCArMzYyMSw3IEBACiAJCQkJYXRvbWljX2luYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7CiAJCQlsaXN0X2FkZF90YWlsKCZzaC0+bHJ1LCAmY29uZi0+aG9sZF9saXN0KTsKIAkJfQotCX0gZWxzZQotCQlwbHVnZ2VyX3NldF9wbHVnKCZjb25mLT5wbHVnKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGFjdGl2YXRlX2JpdF9kZWxheShyYWlkNV9jb25mX3QgKmNvbmYpCkBAIC0zNjQxLDIxICszNjM4LDYgQEAKIAl9CiB9CiAKLXZvaWQgbWRfcmFpZDVfa2lja19kZXZpY2UocmFpZDVfY29uZl90ICpjb25mKQotewotCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotCXJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQoY29uZik7Ci0JbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG1kX3JhaWQ1X2tpY2tfZGV2aWNlKTsKLQotc3RhdGljIHZvaWQgcmFpZDVfdW5wbHVnKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKLXsKLQlyYWlkNV9jb25mX3QgKmNvbmYgPSBjb250YWluZXJfb2YocGx1ZywgcmFpZDVfY29uZl90LCBwbHVnKTsKLQotCW1kX3JhaWQ1X2tpY2tfZGV2aWNlKGNvbmYpOwotfQotCiBpbnQgbWRfcmFpZDVfY29uZ2VzdGVkKG1kZGV2X3QgKm1kZGV2LCBpbnQgYml0cykKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKQEAgLTM5NDUsNiArMzkyNyw3IEBACiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmkpOwogCWludCByZW1haW5pbmc7CisJaW50IHBsdWdnZWQ7CiAKIAlpZiAodW5saWtlbHkoYmktPmJpX3J3ICYgUkVRX0ZMVVNIKSkgewogCQltZF9mbHVzaF9yZXF1ZXN0KG1kZGV2LCBiaSk7CkBAIC0zOTYzLDYgKzM5NDYsNyBAQAogCWJpLT5iaV9uZXh0ID0gTlVMTDsKIAliaS0+YmlfcGh5c19zZWdtZW50cyA9IDE7CS8qIG92ZXItbG9hZGVkIHRvIGNvdW50IGFjdGl2ZSBzdHJpcGVzICovCiAKKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CiAJZm9yICg7bG9naWNhbF9zZWN0b3IgPCBsYXN0X3NlY3RvcjsgbG9naWNhbF9zZWN0b3IgKz0gU1RSSVBFX1NFQ1RPUlMpIHsKIAkJREVGSU5FX1dBSVQodyk7CiAJCWludCBkaXNrcywgZGF0YV9kaXNrczsKQEAgLTQwNTcsNyArNDA0MSw3IEBACiAJCQkJICogYWRkIGZhaWxlZCBkdWUgdG8gb3ZlcmxhcC4gIEZsdXNoIGV2ZXJ5dGhpbmcKIAkJCQkgKiBhbmQgd2FpdCBhIHdoaWxlCiAJCQkJICovCi0JCQkJbWRfcmFpZDVfa2lja19kZXZpY2UoY29uZik7CisJCQkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJCQlyZWxlYXNlX3N0cmlwZShzaCk7CiAJCQkJc2NoZWR1bGUoKTsKIAkJCQlnb3RvIHJldHJ5OwpAQCAtNDA3Nyw2ICs0MDYxLDkgQEAKIAkJfQogCQkJCiAJfQorCWlmICghcGx1Z2dlZCkKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwogCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlyZW1haW5pbmcgPSByYWlkNV9kZWNfYmlfcGh5c19zZWdtZW50cyhiaSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CkBAIC00NDc4LDI0ICs0NDY1LDMwIEBACiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlpbnQgaGFuZGxlZDsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCXByX2RlYnVnKCIrKysgcmFpZDVkIGFjdGl2ZVxuIik7CiAKIAltZF9jaGVja19yZWNvdmVyeShtZGRldik7CiAKKwlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAJaGFuZGxlZCA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAotCQlpZiAoY29uZi0+c2VxX2ZsdXNoICE9IGNvbmYtPnNlcV93cml0ZSkgewotCQkJaW50IHNlcSA9IGNvbmYtPnNlcV9mbHVzaDsKKwkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+cGx1Z19jbnQpID09IDAgJiYKKwkJICAgICFsaXN0X2VtcHR5KCZjb25mLT5iaXRtYXBfbGlzdCkpIHsKKwkJCS8qIE5vdyBpcyBhIGdvb2QgdGltZSB0byBmbHVzaCBzb21lIGJpdG1hcCB1cGRhdGVzICovCisJCQljb25mLT5zZXFfZmx1c2grKzsKIAkJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkJYml0bWFwX3VucGx1ZyhtZGRldi0+Yml0bWFwKTsKIAkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJCWNvbmYtPnNlcV93cml0ZSA9IHNlcTsKKwkJCWNvbmYtPnNlcV93cml0ZSA9IGNvbmYtPnNlcV9mbHVzaDsKIAkJCWFjdGl2YXRlX2JpdF9kZWxheShjb25mKTsKIAkJfQorCQlpZiAoYXRvbWljX3JlYWQoJm1kZGV2LT5wbHVnX2NudCkgPT0gMCkKKwkJCXJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQoY29uZik7CiAKIAkJd2hpbGUgKChiaW8gPSByZW1vdmVfYmlvX2Zyb21fcmV0cnkoY29uZikpKSB7CiAJCQlpbnQgb2s7CkBAIC00NTI1LDYgKzQ1MTgsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCiAJYXN5bmNfdHhfaXNzdWVfcGVuZGluZ19hbGwoKTsKKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogCiAJcHJfZGVidWcoIi0tLSByYWlkNWQgaW5hY3RpdmVcbiIpOwogfQpAQCAtNTE0MSw4ICs1MTM1LDYgQEAKIAkJICAgICAgIG1kbmFtZShtZGRldikpOwogCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCByYWlkNV9zaXplKG1kZGV2LCAwLCAwKSk7CiAKLQlwbHVnZ2VyX2luaXQoJmNvbmYtPnBsdWcsIHJhaWQ1X3VucGx1Zyk7Ci0JbWRkZXYtPnBsdWcgPSAmY29uZi0+cGx1ZzsKIAlpZiAobWRkZXYtPnF1ZXVlKSB7CiAJCWludCBjaHVua19zaXplOwogCQkvKiByZWFkLWFoZWFkIHNpemUgbXVzdCBjb3ZlciB0d28gd2hvbGUgc3RyaXBlcywgd2hpY2gKQEAgLTUxNTksNyArNTE1MSw2IEBACiAKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9kYXRhID0gbWRkZXY7CiAJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkNV9jb25nZXN0ZWQ7Ci0JCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIAogCQljaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NlY3RvcnMgPDwgOTsKIAkJYmxrX3F1ZXVlX2lvX21pbihtZGRldi0+cXVldWUsIGNodW5rX3NpemUpOwpAQCAtNTE5Miw3ICs1MTgzLDYgQEAKIAltZGRldi0+dGhyZWFkID0gTlVMTDsKIAlpZiAobWRkZXYtPnF1ZXVlKQogCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gTlVMTDsKLQlwbHVnZ2VyX2ZsdXNoKCZjb25mLT5wbHVnKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCiAJZnJlZV9jb25mKGNvbmYpOwogCW1kZGV2LT5wcml2YXRlID0gTlVMTDsKIAltZGRldi0+dG9fcmVtb3ZlID0gJnJhaWQ1X2F0dHJzX2dyb3VwOwpAQCAtNTY4OCw2ICs1Njc4LDcgQEAKIHN0YXRpYyB2b2lkICpyYWlkNDVfdGFrZW92ZXJfcmFpZDAobWRkZXZfdCAqbWRkZXYsIGludCBsZXZlbCkKIHsKIAlzdHJ1Y3QgcmFpZDBfcHJpdmF0ZV9kYXRhICpyYWlkMF9wcml2ID0gbWRkZXYtPnByaXZhdGU7CisJc2VjdG9yX3Qgc2VjdG9yczsKIAogCS8qIGZvciByYWlkMCB0YWtlb3ZlciBvbmx5IG9uZSB6b25lIGlzIHN1cHBvcnRlZCAqLwogCWlmIChyYWlkMF9wcml2LT5ucl9zdHJpcF96b25lcyA+IDEpIHsKQEAgLTU2OTYsNiArNTY4Nyw5IEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAorCXNlY3RvcnMgPSByYWlkMF9wcml2LT5zdHJpcF96b25lWzBdLnpvbmVfZW5kOworCXNlY3Rvcl9kaXYoc2VjdG9ycywgcmFpZDBfcHJpdi0+c3RyaXBfem9uZVswXS5uYl9kZXYpOworCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHNlY3RvcnM7CiAJbWRkZXYtPm5ld19sZXZlbCA9IGxldmVsOwogCW1kZGV2LT5uZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1BBUklUWV9OOwogCW1kZGV2LT5uZXdfY2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5jaHVua19zZWN0b3JzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oCmluZGV4IDhkNTYzYTQuLjNjYTc3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTQwMCw4ICs0MDAsNiBAQAogCQkJCQkgICAgKiBDbGVhcmVkIHdoZW4gYSBzeW5jIGNvbXBsZXRlcy4KIAkJCQkJICAgICovCiAKLQlzdHJ1Y3QgcGx1Z19oYW5kbGUJcGx1ZzsKLQogCS8qIHBlciBjcHUgdmFyaWFibGVzICovCiAJc3RydWN0IHJhaWQ1X3BlcmNwdSB7CiAJCXN0cnVjdCBwYWdlCSpzcGFyZV9wYWdlOyAvKiBVc2VkIHdoZW4gY2hlY2tpbmcgUC9RIGluIHJhaWQ2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYwppbmRleCA3NGVlMTcyLi5iMmJhOWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQltc2xlZXAoU0FBNzE0Nl9JMkNfREVMQVkpOwogCX0KIAotCS8qIGlmIGFueSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LCBhIGZhdGFsIGVycm9yIGhhcyBvY2N1cmVkIC4uLiAqLworCS8qIGlmIGFueSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LCBhIGZhdGFsIGVycm9yIGhhcyBvY2N1cnJlZCAuLi4gKi8KIAlzdGF0dXMgPSBzYWE3MTQ2X2kyY19zdGF0dXMoZGV2KTsKIAlpZiAoIGRldi0+aTJjX2JpdHJhdGUgIT0gc3RhdHVzICkgewogCQlERUJfSTJDKCgiZmF0YWwgZXJyb3IuIHN0YXR1czoweCUwOHhcbiIsc3RhdHVzKSk7CkBAIC0zMjYsOSArMzI2LDkgQEAKIAkJCWlmICggMCAhPSBlcnIpIHsKIAkJCQkvKiB0aGlzIG9uZSBpcyB1bnNhdGlzZnlpbmc6IHNvbWUgaTJjIHNsYXZlcyBvbiBzb21lCiAJCQkJICAgZHZiIGNhcmRzIGRvbid0IGFja25vd2xlZGdlIGNvcnJlY3RseSwgc28gdGhlIHNhYTcxNDYKLQkJCQkgICB0aGlua3MgdGhhdCBhbiBhZGRyZXNzIGVycm9yIG9jY3VyZWQuIGluIHRoYXQgY2FzZSwgdGhlCisJCQkJICAgdGhpbmtzIHRoYXQgYW4gYWRkcmVzcyBlcnJvciBvY2N1cnJlZC4gaW4gdGhhdCBjYXNlLCB0aGUKIAkJCQkgICB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcmV0cnlpbmcsIGV2ZW4gaWYgYW4gYWRkcmVzcyBlcnJvcgotCQkJCSAgIG9jY3VyZWQuIGFuYWxvZyBzYWE3MTQ2IGJhc2VkIGNhcmRzIGV4dGVuc2l2ZWx5IHJlbHkgb24KKwkJCQkgICBvY2N1cnJlZC4gYW5hbG9nIHNhYTcxNDYgYmFzZWQgY2FyZHMgZXh0ZW5zaXZlbHkgcmVseSBvbgogCQkJCSAgIGkyYyBhZGRyZXNzIHByb2JpbmcsIGhvd2V2ZXIsIGFuZCBhZGRyZXNzIGVycm9ycyBpbmRpY2F0ZSB0aGF0IGEKIAkJCQkgICBkZXZpY2UgaXMgcmVhbGx5ICpub3QqIHRoZXJlLiByZXRyeWluZyBpbiB0aGF0IGNhc2UKIAkJCQkgICBpbmNyZWFzZXMgdGhlIHRpbWUgdGhlIGRldmljZSBuZWVkcyB0byBwcm9iZSBncmVhdGx5LCBzbwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJREVCX0kyQygoInRyYW5zbWlzc2lvbiBzdWNjZXNzZnVsLiAobXNnOiVkKS5cbiIsZXJyKSk7CiBvdXQ6CiAJLyogYW5vdGhlciBidWcgaW4gcmV2aXNpb24gMDogdGhlIGkyYy1yZWdpc3RlcnMgZ2V0IHVwbG9hZGVkIHJhbmRvbWx5IGJ5IG90aGVyCi0JICAgdXBsb2Fkcywgc28gd2UgYmV0dGVyIGNsZWFyIHRoZW0gb3V0IGJlZm9yZSBjb250aW51ZWluZyAqLworCSAgIHVwbG9hZHMsIHNvIHdlIGJldHRlciBjbGVhciB0aGVtIG91dCBiZWZvcmUgY29udGludWluZyAqLwogCWlmKCAwID09IGRldi0+cmV2aXNpb24gKSB7CiAJCV9fbGUzMiB6ZXJvID0gMDsKIAkJc2FhNzE0Nl9pMmNfcmVzZXQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKaW5kZXggNjA1ZTI4Yi4uMGQ2ZTA5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogLyogTVhMNTAwNSBUdW5lciBSZWdpc3RlciBTdHJ1Y3QgKi8KIHN0cnVjdCBUdW5lclJlZyB7CiAJdTE2IFJlZ19OdW07CS8qIFR1bmVyIFJlZ2lzdGVyIEFkZHJlc3MgKi8KLQl1MTYgUmVnX1ZhbDsJLyogQ3VycmVudCBzdyBwcm9ncmFtbWVkIHZhbHVlIHdhaXRpbmcgdG8gYmUgd3JpdGVuICovCisJdTE2IFJlZ19WYWw7CS8qIEN1cnJlbnQgc3cgcHJvZ3JhbW1lZCB2YWx1ZSB3YWl0aW5nIHRvIGJlIHdyaXR0ZW4gKi8KIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaAppbmRleCAzYWJiMjIxLi41MGNmYThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaApAQCAtOTgsNyArOTgsNyBAQAogCS8qIG91dHB1dCBvcHRpb25zIHRoYXQgY2FuIGJlIGRpc2FibGVkICovCiAJZW51bSB0ZGExODI3MV9vdXRwdXRfb3B0aW9ucyBvdXRwdXRfb3B0OwogCi0JLyogc29tZSBpMmMgcHJvdmlkZXJzIGNhbnQgd3JpdGUgYWxsIDM5IHJlZ2lzdGVycyBhdCBvbmNlICovCisJLyogc29tZSBpMmMgcHJvdmlkZXJzIGNhbid0IHdyaXRlIGFsbCAzOSByZWdpc3RlcnMgYXQgb25jZSAqLwogCWVudW0gdGRhMTgyNzFfc21hbGxfaTJjIHNtYWxsX2kyYzsKIAogCS8qIGZvcmNlIHJmIHRyYWNraW5nIGZpbHRlciBjYWxpYnJhdGlvbiBvbiBzdGFydHVwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKaW5kZXggNGYzZTNjZS4uMDNmOTZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJaW50IGFjdGl2ZV9kbWExX2FkZHI7IC8qIDAgPSBhZGRyMCBvZiBkbWExOyAxID0gYWRkcjEgb2YgZG1hMSAqLwogCXUzMiBsYXN0X2RtYTFfY3VyX3BvczsKLQkvKiBwb3NpdGlvbiBvZiB0aGUgcG9pbnRlciBsYXN0IHRpbWUgdGhlIHRpbWVyL3BhY2tldCBpcnEgb2NjdXJlZCAqLworCS8qIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIGxhc3QgdGltZSB0aGUgdGltZXIvcGFja2V0IGlycSBvY2N1cnJlZCAqLwogCWludCBjb3VudDsKIAlpbnQgY291bnRfcHJldjsKIAlpbnQgc3RyZWFtX3Byb2JsZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCmluZGV4IDc4ZmM0NjkuLjFlMTEwNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCkBAIC00MjcsMTAgKzQyNywxMCBAQAogCXN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqYnQgPSBmZS0+ZHZiLT5wcml2OwogCiAJLyogUkVTRVQgREVWSUNFCi0JICogcmVzZXQgaXMgY29udHJvbGVkIGJ5IEdQSU8tMAorCSAqIHJlc2V0IGlzIGNvbnRyb2xsZWQgYnkgR1BJTy0wCiAJICogd2hlbiBzZXQgdG8gMCBjYXVzZXMgcmVzZXQgYW5kIHdoZW4gdG8gMSBmb3Igbm9ybWFsIG9wCiAJICogbXVzdCByZW1haW4gcmVzZXQgZm9yIDEyOCBjbG9jayBjeWNsZXMgb24gYSA1ME1oeiBjbG9jawotCSAqIGFsc28gUFJNMSBQUk0yICYgUFJNNCBhcmUgY29udHJvbGVkIGJ5IEdQSU8tMSxHUElPLTIgJiBHUElPLTQKKwkgKiBhbHNvIFBSTTEgUFJNMiAmIFBSTTQgYXJlIGNvbnRyb2xsZWQgYnkgR1BJTy0xLEdQSU8tMiAmIEdQSU8tNAogCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSByZXNldCBoYXMgYmUgaGVsZCBsb3cgbG9uZyBlbm91Z2ggb3Igd2UKIAkgKiBoYXZlIGJlZW4gcmVzZXQgYnkgYSBwb3dlciBvbi4gIFdoZW4gdGhlIGRyaXZlciBpcyB1bmxvYWRlZAogCSAqIHJlc2V0IHNldCB0byAwIHNvIGlmIHJlbG9hZGVkIHdlIGhhdmUgYmVlbiByZXNldC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggY2FkNjYzNC4uMzFlMmMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTE2MzgsNyArMTYzOCw3IEBACiAJY2FzZSBGRV9SRUFEX1NUQVRVUzogewogCQlmZV9zdGF0dXNfdCogc3RhdHVzID0gcGFyZzsKIAotCQkvKiBpZiByZXR1bmUgd2FzIHJlcXVlc3RlZCBidXQgaGFzbid0IG9jY3VyZWQgeWV0LCBwcmV2ZW50CisJCS8qIGlmIHJldHVuZSB3YXMgcmVxdWVzdGVkIGJ1dCBoYXNuJ3Qgb2NjdXJyZWQgeWV0LCBwcmV2ZW50CiAJCSAqIHRoYXQgdXNlciBnZXQgc2lnbmFsIHN0YXRlIGZyb20gcHJldmlvdXMgdHVuaW5nICovCiAJCWlmIChmZXByaXYtPnN0YXRlID09IEZFU1RBVEVfUkVUVU5FIHx8CiAJCSAgICBmZXByaXYtPnN0YXRlID09IEZFU1RBVEVfRVJST1IpIHsKQEAgLTE3MjksNyArMTcyOSw3IEBACiAJCQkgKiBEaXNoIG5ldHdvcmsgbGVnYWN5IHN3aXRjaGVzIChhcyB1c2VkIGJ5IERpc2g1MDApCiAJCQkgKiBhcmUgY29udHJvbGxlZCBieSBzZW5kaW5nIDktYml0IGNvbW1hbmQgd29yZHMKIAkJCSAqIHNwYWNlZCA4bXNlYyBhcGFydC4KLQkJCSAqIHRoZSBhY3R1YWwgY29tbWFuZCB3b3JkIGlzIHN3aXRjaC9wb3J0IGRlcGVuZGFudAorCQkJICogdGhlIGFjdHVhbCBjb21tYW5kIHdvcmQgaXMgc3dpdGNoL3BvcnQgZGVwZW5kZW50CiAJCQkgKiBzbyBpdCBpcyB1cCB0byB0aGUgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHRvIHNlbmQKIAkJCSAqIHRoZSByaWdodCBjb21tYW5kLgogCQkJICogVGhlIGNvbW1hbmQgbXVzdCBhbHdheXMgc3RhcnQgd2l0aCBhICcwJyBhZnRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LWZlLmMKaW5kZXggMTk5ZWNlMC4uNmFkOTQ3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtZmUuYwpAQCAtNTgwLDcgKzU4MCw3IEBACiAJCU5TX2NvZWZmMl84ayA9IDB4NzI0OTI1OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIkludmFsaWQgYmFuZHdpdGggJWQuIiwgYncpOworCQllcnIoIkludmFsaWQgYmFuZHdpZHRoICVkLiIsIGJ3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03ODksNyArNzg5LDcgQEAKIAkJdGVtcCA9IDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiSW52YWxpZCBiYW5kd2l0aCAlZC4iLCBidyk7CisJCWVycigiSW52YWxpZCBiYW5kd2lkdGggJWQuIiwgYncpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIGFmOTAwNV93cml0ZV9yZWdpc3Rlcl9iaXRzKGQsIHhkX2dfcmVnX2J3LCByZWdfYndfcG9zLApAQCAtOTMwLDcgKzkzMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIGluaXQgb3RoZXIgcGFyYW1ldGVyczogcHJvZ3JhbSBjZm9lIGFuZCBzZWxlY3QgYmFuZHdpdGggKi8KKwkvKiBpbml0IG90aGVyIHBhcmFtZXRlcnM6IHByb2dyYW0gY2ZvZSBhbmQgc2VsZWN0IGJhbmR3aWR0aCAqLwogCWRlYl9pbmZvKCJwcm9ncmFtIGNmb2VcbiIpOwogCWlmICgocmV0ID0gYWY5MDA1X2ZlX3Byb2dyYW1fY2ZvZShzdGF0ZS0+ZCwgQkFORFdJRFRIXzZfTUhaKSkpCiAJCXJldHVybiByZXQ7CkBAIC0xMTY3LDcgKzExNjcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBzZWxlY3QgYmFuZHdpdGggKi8KKwkvKiBzZWxlY3QgYmFuZHdpZHRoICovCiAJZGViX2luZm8oInNlbGVjdCBiYW5kd2lkdGgiKTsKIAlyZXQgPSBhZjkwMDVfZmVfc2VsZWN0X2J3KHN0YXRlLT5kLCBmZXAtPnUub2ZkbS5iYW5kd2lkdGgpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLmgKaW5kZXggYWY4ZDU1ZS4uMGY0NjFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8uaApAQCAtMjAsNyArMjAsNyBAQAogICogICAgICAgICBGcm9udGVuZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXRlY2ggSkRWQlQtOTA1MDIKICAqICAgICAgICAgICAgICh0dW5lciBQTEw6ICAgICAgICAgICAgICAgICAgICAgICB0dWE2MDM0LCBJMkMgYWRkcjooMHhDMCA+PiAxKSkKICAqICAgICAgICAgICAgIChPRkRNIGRlbW9kdWxhdG9yOiAgICAgICAgICAgICAgICBUQzkwNTAyLCBJMkMgYWRkcjooMHgzMCA+PiAxKSkKLSAqICAgICAgICAgTEVEIHgzICgrTE5CKSBjb250cm9sbDogICAgICAgICAgICAgICBQSUMgMTZGNjc2CisgKiAgICAgICAgIExFRCB4MyAoK0xOQikgY29udHJvbDogICAgICAgICAgICAgICAgUElDIDE2RjY3NgogICogICAgICAgICBFRVBST006ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0QzA4CiAgKgogICogICAgICAgIChVU0Igc21hcnQgY2FyZCByZWFkZXI6ICAgICAgICAgICAgICAgIEFVOTUyMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbG1lZG0wNC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9sbWVkbTA0LmMKaW5kZXggY2QyNmU3Yy4uZjJkYjAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9sbWVkbTA0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9sbWVkbTA0LmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCWxtZV9pbnQtPmxtZV91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCiAJdXNiX3N1Ym1pdF91cmIobG1lX2ludC0+bG1lX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaW5mbygiSU5UIEludGVydXB0IFNlcnZpY2UgU3RhcnRlZCIpOworCWluZm8oIklOVCBJbnRlcnJ1cHQgU2VydmljZSBTdGFydGVkIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4Miw3ICs0ODIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlkZWJfaW5mbyg0LCAiSTJDIEZyb20gSW50ZXJ1cHQgTWVzc2FnZSBvdXQoJTAyeCkgaW4oJTAyeCkiLAorCQlkZWJfaW5mbyg0LCAiSTJDIEZyb20gSW50ZXJydXB0IE1lc3NhZ2Ugb3V0KCUwMngpIGluKCUwMngpIiwKIAkJCQl3YnVmWzNdLCByYnVmWzFdKTsKIAogCX0KQEAgLTYzMiwxMSArNjMyLDExIEBACiAJfQogCWQtPnJjX2RldiA9IHJjOwogCi0JLyogU3RhcnQgdGhlIEludGVydXB0ICovCisJLyogU3RhcnQgdGhlIEludGVycnVwdCAqLwogCXJldCA9IGxtZTI1MTBfaW50X3JlYWQoYWRhcCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcmNfdW5yZWdpc3Rlcl9kZXZpY2UocmMpOwotCQlpbmZvKCJJTlQgVW5hYmxlIHRvIHN0YXJ0IEludGVydXB0IFNlcnZpY2UiKTsKKwkJaW5mbygiSU5UIFVuYWJsZSB0byBzdGFydCBJbnRlcnJ1cHQgU2VydmljZSIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEwMDMsNyArMTAwMyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIFN0YXJ0IHRoZSBJbnRlcnVwdCAmIFJlbW90ZSovCisJLyogU3RhcnQgdGhlIEludGVycnVwdCAmIFJlbW90ZSovCiAJcmV0ID0gbG1lMjUxMF9pbnRfc2VydmljZShhZGFwKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMTcxLDcgKzExNzEsNyBAQAogCQl1c2Jfa2lsbF91cmIoc3QtPmxtZV91cmIpOwogCQl1c2JfZnJlZV9jb2hlcmVudChkLT51ZGV2LCA1MDAwLCBzdC0+YnVmZmVyLAogCQkJCSAgc3QtPmxtZV91cmItPnRyYW5zZmVyX2RtYSk7Ci0JCWluZm8oIkludGVydXB0IFNlcnZpY2UgU3RvcHBlZCIpOworCQlpbmZvKCJJbnRlcnJ1cHQgU2VydmljZSBTdG9wcGVkIik7CiAJCXJjX3VucmVnaXN0ZXJfZGV2aWNlKGQtPnJjX2Rldik7CiAJCWluZm8oIlJlbW90ZSBTdG9wcGVkIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F0Ym04ODMwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuaAppbmRleCBlODE0OWYzLi4wMjQyNzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuaApAQCAtMzksNyArMzksNyBAQAogCS8qIHBhcmFsbGVsIG9yIHNlcmlhbCB0cmFuc3BvcnQgc3RyZWFtICovCiAJdTggc2VyaWFsX3RzOwogCi0JLyogdHJhbnNwb3J0IHN0cmVhbSBjbG9jayBvdXRwdXQgb25seSB3aGVuIHJlY2V2aW5nIHZhbGlkIHN0cmVhbSAqLworCS8qIHRyYW5zcG9ydCBzdHJlYW0gY2xvY2sgb3V0cHV0IG9ubHkgd2hlbiByZWNlaXZpbmcgdmFsaWQgc3RyZWFtICovCiAJdTggdHNfY2xrX2dhdGVkOwogCiAJLyogRGVjb2RlciBzYW1wbGUgVFMgZGF0YSBhdCByaXNpbmcgZWRnZSBvZiBjbG9jayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGlnLmMKaW5kZXggNjVmNmEzNi4uMWQ1NzI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RpZy5jCkBAIC02MzUsNyArNjM1LDcgQEAKIAlzdHJ1Y3QgYXU4NTIyX2xlZF9jb25maWcgKmxlZF9jb25maWcgPSBzdGF0ZS0+Y29uZmlnLT5sZWRfY2ZnOwogCXU4IHZhbDsKIAotCS8qIGJhaWwgb3V0IGlmIHdlIGNhbnQgY29udHJvbCBhbiBMRUQgKi8KKwkvKiBiYWlsIG91dCBpZiB3ZSBjYW4ndCBjb250cm9sIGFuIExFRCAqLwogCWlmICghbGVkX2NvbmZpZyB8fCAhbGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXQgfHwKIAkgICAgIWxlZF9jb25maWctPmdwaW9fb3V0cHV0X2VuYWJsZSB8fCAhbGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXRfZGlzYWJsZSkKIAkJcmV0dXJuIDA7CkBAIC02NjUsNyArNjY1LDcgQEAKIAlzdHJ1Y3QgYXU4NTIyX2xlZF9jb25maWcgKmxlZF9jb25maWcgPSBzdGF0ZS0+Y29uZmlnLT5sZWRfY2ZnOwogCWludCBpLCByZXQgPSAwOwogCi0JLyogYmFpbCBvdXQgaWYgd2UgY2FudCBjb250cm9sIGFuIExFRCAqLworCS8qIGJhaWwgb3V0IGlmIHdlIGNhbid0IGNvbnRyb2wgYW4gTEVEICovCiAJaWYgKCFsZWRfY29uZmlnIHx8ICFsZWRfY29uZmlnLT5ncGlvX2xlZHMgfHwKIAkgICAgIWxlZF9jb25maWctPm51bV9sZWRfc3RhdGVzIHx8ICFsZWRfY29uZmlnLT5sZWRfc3RhdGVzKQogCQlyZXR1cm4gMDsKQEAgLTgwMyw3ICs4MDMsNyBAQAogCWludCBsZWQ7CiAJdTE2IHN0cm9uZzsKIAotCS8qIGJhaWwgb3V0IGlmIHdlIGNhbnQgY29udHJvbCBhbiBMRUQgKi8KKwkvKiBiYWlsIG91dCBpZiB3ZSBjYW4ndCBjb250cm9sIGFuIExFRCAqLwogCWlmICghbGVkX2NvbmZpZykKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYmNtMzUxMC5jCmluZGV4IGNmNWU1NzYuLjhhZmY1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJdW5zaWduZWQgbG9uZyB0OwogCiAvKiBDaGVjayBpZiBhbnkgcHJldmlvdXMgSEFCIHJlcXVlc3Qgc3RpbGwgbmVlZHMgdG8gYmUgc2VydmljZWQgYnkgdGhlCi0gKiBBcXVpc2l0aW9uIFByb2Nlc3NvciBiZWZvcmUgc2VuZGluZyBuZXcgcmVxdWVzdCAqLworICogQWNxdWlzaXRpb24gUHJvY2Vzc29yIGJlZm9yZSBzZW5kaW5nIG5ldyByZXF1ZXN0ICovCiAJaWYgKChyZXQgPSBiY20zNTEwX3JlYWRCKHN0LDB4YTgsJnYpKSA8IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKHYuSEFCU1RBVF9hOC5IQUJSKSB7CkBAIC0zNjEsNyArMzYxLDcgQEAKIC8qIFNldCBkdXJhdGlvbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBUVU5DVEwgPSAzLjM0IG1pY3JvIFNlYyAqLwogCWMuVFVOQ1RMX3N0YXRlID0gMHg0MDsKIAotLyogUFJFU0NBTEVSIERFVklERSBSQVRJTyB8IEJDMV8yXzNfNDsgKGJhbmQgc3dpdGNoKSwgMXN0b3NjIFJFRkVSRU5DRSBDT1VOVEVSIFJFRl9TMTIgYW5kIFJFRl9TMTEgKi8KKy8qIFBSRVNDQUxFUiBESVZJREUgUkFUSU8gfCBCQzFfMl8zXzQ7IChiYW5kIHN3aXRjaCksIDFzdG9zYyBSRUZFUkVOQ0UgQ09VTlRFUiBSRUZfUzEyIGFuZCBSRUZfUzExICovCiAJYy5jdGxfZGF0WzBdLmN0cmwuc2l6ZSA9IEJJVFNfODsKIAljLmN0bF9kYXRbMF0uZGF0YSAgICAgID0gMHg4MCB8IGJjOwogCkBAIC0zOTcsNyArMzk3LDcgQEAKIAljLmN0bF9kYXRbN10uY3RybC5jczAgID0gMTsKIAljLmN0bF9kYXRbN10uZGF0YSAgICAgID0gMHg0MDsKIAotLyogUFJFU0NBTEVSIERFVklERSBSQVRJTywgMm5kb3NjIFJFRkVSRU5DRSBDT1VOVEVSIFJFRl9TMTIgYW5kIFJFRl9TMTEgKi8KKy8qIFBSRVNDQUxFUiBESVZJREUgUkFUSU8sIDJuZG9zYyBSRUZFUkVOQ0UgQ09VTlRFUiBSRUZfUzEyIGFuZCBSRUZfUzExICovCiAJYy5jdGxfZGF0WzhdLmN0cmwuc2l6ZSA9IEJJVFNfODsKIAljLmN0bF9kYXRbOF0uZGF0YSAgICAgID0gMHg4MDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmMKaW5kZXggNWZiYzBmYy4uMDE0MjIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAljeDIyNzAwX3dyaXRlcmVnIChzdGF0ZSwgMHgwNiwgdmFsKTsKIAogCWN4MjI3MDBfd3JpdGVyZWcgKHN0YXRlLCAweDA4LCAweDA0IHwgMHgwMik7ICAvKiB1c2UgdXNlciB0cHMgcGFyYW1ldGVycyAqLwotCWN4MjI3MDBfd3JpdGVyZWcgKHN0YXRlLCAweDA4LCAweDA0KTsgICAgICAgICAvKiByZXN0YXJ0IGFxdWlzaXRpb24gKi8KKwljeDIyNzAwX3dyaXRlcmVnIChzdGF0ZSwgMHgwOCwgMHgwNCk7ICAgICAgICAgLyogcmVzdGFydCBhY3F1aXNpdGlvbiAqLwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwppbmRleCBmZjZjNDk4Li4zMTM5NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGluaXRpYWxpc2UgdGhlIGRlbW9kICovCiBzdGF0aWMgY29uc3QgdTggaW5pdF90YWJbXSA9IHsKLQkweDAwLCAweDAwLCAvKiBTdG9wIGFxdWlzaXRpb24gKi8KKwkweDAwLCAweDAwLCAvKiBTdG9wIGFjcXVpc2l0aW9uICovCiAJMHgwQiwgMHgwNiwKIAkweDA5LCAweDAxLAogCTB4MEQsIDB4NDEsCkBAIC0zMTAsNyArMzEwLDcgQEAKIAkJCSYgMHhmYyk7CiAJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCiAJCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCk7Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDAsIDB4MDEpOyAvKiBCZWdpbiBhcXVpc2l0aW9uICovCisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDAsIDB4MDEpOyAvKiBCZWdpbiBhY3F1aXNpdGlvbiAqLwogCQlkcHJpbnRrKCIlczogQXV0b2RldGVjdGluZ1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CkBAIC00MjQsNyArNDI0LDcgQEAKIAljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAogCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCk7CiAKLQkvKiBCZWdpbiBjaGFubmVsIGFxdWlzaXRpb24gKi8KKwkvKiBCZWdpbiBjaGFubmVsIGFjcXVpc2l0aW9uICovCiAJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5jCmluZGV4IDdhMWE1YmMuLmJmOWM5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJY3gyNDExMF9zZXRfaW52ZXJzaW9uIChzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKIAljeDI0MTEwX3NldF9mZWMgKHN0YXRlLCBwLT51LnFwc2suZmVjX2lubmVyKTsKIAljeDI0MTEwX3NldF9zeW1ib2xyYXRlIChzdGF0ZSwgcC0+dS5xcHNrLnN5bWJvbF9yYXRlKTsKLQljeDI0MTEwX3dyaXRlcmVnKHN0YXRlLDB4MDQsMHgwNSk7IC8qIHN0YXJ0IGFxdWlzaXRpb24gKi8KKwljeDI0MTEwX3dyaXRlcmVnKHN0YXRlLDB4MDQsMHgwNSk7IC8qIHN0YXJ0IGFjcXVpc2l0aW9uICovCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5oCmluZGV4IDVkZTBmN2YuLjAxZWI3YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgRHJpdmVyIGZvciBDb25leGFudCBDWDI0MTEzL0NYMjQxMjggVHVuZXIgKFNhdGVsaXRlKQorICogIERyaXZlciBmb3IgQ29uZXhhbnQgQ1gyNDExMy9DWDI0MTI4IFR1bmVyIChTYXRlbGxpdGUpCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNy04IFBhdHJpY2sgQm9ldHRjaGVyIDxwYkBsaW51eHR2Lm9yZz4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwppbmRleCBmYWQ2YTk5Li5iMWRkOGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKQEAgLTk0OSw3ICs5NDksNyBAQAogCWVsc2UKIAkJZXJyKCJpdCBzZWVtcyBJIGRvbid0IGhhdmUgYSB0dW5lci4uLiIpOwogCi0JLyogRW5hYmxlIGF1dG9tYXRpYyBhcXVpc2l0aW9uIGFuZCByZXNldCBjeWNsZSAqLworCS8qIEVuYWJsZSBhdXRvbWF0aWMgYWNxdWlzaXRpb24gYW5kIHJlc2V0IGN5Y2xlICovCiAJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwMywgKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgwMykgfCAweDA3KSk7CiAJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgxMCk7CiAJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eEQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCmluZGV4IGEwNTAwN2MuLjUzNmYwMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogCXMtPmNvbmZpZy5pZmFnYy53MEEgPSAweDNmZjsKIAlzLT5jb25maWcuaWZhZ2MudzBDID0gMHgzODg7CiAKLQkvKiBmb3Igc2lnbmFsIHN0cmVuZ2h0IGNhbGN1bGF0aW9ucyAqLworCS8qIGZvciBzaWduYWwgc3RyZW5ndGggY2FsY3VsYXRpb25zICovCiAJcy0+Y29uZmlnLnNzNzYgPSA4MjA7CiAJcy0+Y29uZmlnLnNzNzggPSAyMjAwOwogCXMtPmNvbmZpZy5zczdBID0gMTUwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTE2LmMKaW5kZXggMzNiNjMyMy4uYzI4MzExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMTYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmExNi5jCkBAIC0xNjMwLDcgKzE2MzAsNyBAQAogCXN0YXRlLT5zcmF0ZSA9IHAtPnUucXBzay5zeW1ib2xfcmF0ZSAvIDEwMDA7CiAKIAlpZiAoIW1iODZhMTZfc2V0X2ZlKHN0YXRlKSkgewotCQlkcHJpbnRrKHZlcmJvc2UsIE1CODZBMTZfRVJST1IsIDEsICJTdWNjZXNmdWxseSBhY3F1aXJlZCBMT0NLIik7CisJCWRwcmludGsodmVyYm9zZSwgTUI4NkExNl9FUlJPUiwgMSwgIlN1Y2Nlc3NmdWxseSBhY3F1aXJlZCBMT0NLIik7CiAJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9TVUNDRVNTOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMjBzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmEyMHMuYwppbmRleCBjYzRhY2QyLi4wZjg2N2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmEyMHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmEyMHMuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIm1iODZhMjBzOiBJbml0IGZhaWxlZC4gV2lsbCB0cnkgYWdhaW4gbGF0ZXJcbiIpOwogCX0gZWxzZSB7CiAJCXN0YXRlLT5uZWVkX2luaXQgPSBmYWxzZTsKLQkJZHByaW50aygiSW5pdGlhbGl6YXRpb24gc3VjY2VkZWQuXG4iKTsKKwkJZHByaW50aygiSW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLlxuIik7CiAJfQogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmMKaW5kZXggNDcyOTA3ZC4uODNlNmYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmMKQEAgLTY3MCw3ICs2NzAsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyb3I7CiAKLQkJLyogcHJlc2VydmUgdGhpcyBiaXQgdG8gbm90IGFjY2lkZW50bHkgc2h1dGRvd24gQURDICovCisJCS8qIHByZXNlcnZlIHRoaXMgYml0IHRvIG5vdCBhY2NpZGVudGFsbHkgc2h1dGRvd24gQURDICovCiAJCXZhbCAmPSAweDgwOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MjAuYwppbmRleCBlODdiNzQ3Li4xN2Y4Y2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCS8qIHNldHVwIGZvciBESVNFUUMgcmVjaWV2ZSAqLworCS8qIHNldHVwIGZvciBESVNFUUMgcmVjZWl2ZSAqLwogCXZhbCA9IHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzYik7CiAJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYiwgMHg4Mik7IC8qIEZJWE1FOiBndWVzcyAtIGRvIHdlIG5lZWQgdG8gc2V0IERJU19SRFkoMHgwOCkgaW4gcmVjZWl2ZSBtb2RlPyAqLwogCW1zbGVlcCgxNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYwppbmRleCA2NDY3M2I4Li5iYzFhOGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCWVsc2UKIAkJb2RpdiA9IDA7CiAKLQkvKiBWQ08gZW5hYmxlZCwgc2VhY2ggY2xvY2sgb2ZmIGFzIHBlciBMTDMuNywgMy40LjEgKi8KKwkvKiBWQ08gZW5hYmxlZCwgc2VhcmNoIGNsb2NrIG9mZiBhcyBwZXIgTEwzLjcsIDMuNC4xICovCiAJcmVnc1tTVEI2MTAwX1ZDT10gPSAweGUwIHwgKG9kaXYgPDwgU1RCNjEwMF9WQ09fT0RJVl9TSElGVCk7CiAKIAkvKiBPU00JKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5jCmluZGV4IDRmZDc0NzkuLjg0ZDg4ZjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvLyBkZXRlcm1pbmUgaW52ZXJzaW9uIGRlcGVuZGFudCBwYXJhbWV0ZXJzCisJLy8gZGV0ZXJtaW5lIGludmVyc2lvbiBkZXBlbmRlbnQgcGFyYW1ldGVycwogCWludmVyc2lvbiA9IHAtPmludmVyc2lvbjsKIAlpZiAoc3RhdGUtPmNvbmZpZy0+aW52ZXJ0KQogCQlpbnZlcnNpb24gPSAoaW52ZXJzaW9uID09IElOVkVSU0lPTl9PTikgPyBJTlZFUlNJT05fT0ZGIDogSU5WRVJTSU9OX09OOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAzNjcuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMzY3LmMKaW5kZXggNGUwZTZhOC4uZTU3YWI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAzNjcuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDM2Ny5jCkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCiAJLypndWFyZD1zdHYwMzY3X3JlYWRiaXRzKHN0YXRlLEYzNjdURVJfU1lSX0dVQVJEKTsgKi8KIAotCS8qc3VwcmVzcyBFUFEgYXV0byBmb3IgU1lSX0dBUkQgMS8xNiBvciAxLzMyCisJLypzdXBwcmVzcyBFUFEgYXV0byBmb3IgU1lSX0dBUkQgMS8xNiBvciAxLzMyCiAJYW5kIHNldCBjaGFubmVsIHByZWRpY3RvciBpbiBhdXRvbWF0aWMgKi8KICNpZiAwCiAJc3dpdGNoIChndWFyZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCmluZGV4IGI2MmIwZjAuLmUwZWE3NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKQEAgLTIzOCw3ICsyMzgsNyBAQAogfTsKIAogc3RydWN0IHN0djA5MDBfaW5pdF9wYXJhbXN7Ci0JdTMyCWRtZF9yZWZfY2xrOy8qIFJlZnJlbmNlLElucHV0IGNsb2NrIGZvciB0aGUgZGVtb2QgaW4gSHogKi8KKwl1MzIJZG1kX3JlZl9jbGs7LyogUmVmZXJlbmNlLElucHV0IGNsb2NrIGZvciB0aGUgZGVtb2QgaW4gSHogKi8KIAogCS8qIERlbW9kdWxhdG9yIFR5cGUgKHNpbmdsZSBkZW1vZCBvciBkdWFsIGRlbW9kKSAqLwogCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9tb2RlCWRlbW9kX21vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYwppbmRleCA0MWQwZjBhLi41MmQ4NzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKQEAgLTE0MjQsNyArMTQyNCw3IEBACiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0ZSTE9XMCwgMHgwMCkgPCAwKQogCQkJCWdvdG8gZXJyOwogCi0JCQkvKmVubGFyZ2UgdGhlIHRpbWluZyBiYW5kd2l0aCBmb3IgTG93IFNSKi8KKwkJCS8qZW5sYXJnZSB0aGUgdGltaW5nIGJhbmR3aWR0aCBmb3IgTG93IFNSKi8KIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBSVENTMiwgMHg2OCkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9IGVsc2UgewpAQCAtMTQzMiwxNyArMTQzMiwxNyBAQAogCQkJU2V0IFRoZSBjYXJyaWVyIHNlYXJjaCB1cCBhbmQgbG93IHRvIGF1dG8gbW9kZSAqLwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkNGRywgMHhjNCkgPCAwKQogCQkJCWdvdG8gZXJyOwotCQkJLypyZWR1Y2UgdGhlIHRpbWluZyBiYW5kd2l0aCBmb3IgaGlnaCBTUiovCisJCQkvKnJlZHVjZSB0aGUgdGltaW5nIGJhbmR3aWR0aCBmb3IgaGlnaCBTUiovCiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgUlRDUzIsIDB4NDQpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJfQogCX0gZWxzZSB7CiAJCS8qID49IEN1dCAzICovCiAJCWlmIChzdGF0ZS0+c3JhdGUgPD0gNTAwMDAwMCkgewotCQkJLyogZW5sYXJnZSB0aGUgdGltaW5nIGJhbmR3aXRoIGZvciBMb3cgU1IgKi8KKwkJCS8qIGVubGFyZ2UgdGhlIHRpbWluZyBiYW5kd2lkdGggZm9yIExvdyBTUiAqLwogCQkJU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgUlRDUzIsIDB4NjgpOwogCQl9IGVsc2UgewotCQkJLyogcmVkdWNlIHRpbWluZyBiYW5kd2l0aCBmb3IgaGlnaCBTUiAqLworCQkJLyogcmVkdWNlIHRpbWluZyBiYW5kd2lkdGggZm9yIGhpZ2ggU1IgKi8KIAkJCVNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFJUQ1MyLCAweDQ0KTsKIAkJfQogCkBAIC0yNDgyLDcgKzI0ODIsNyBAQAogCQkJCQlkdmJzMl9mbHlfd2hlZWwgPSBTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgRkxZV0hFRUxfQ1BUX0ZJRUxEKTsKIAkJCQl9CiAJCQkJaWYgKGR2YnMyX2ZseV93aGVlbCA8IDB4ZCkgewotCQkJCQkvKkZBTFNFIGxvY2ssIFRoZSBkZW1vZCBpcyBsb29zaW5nIGxvY2sgKi8KKwkJCQkJLypGQUxTRSBsb2NrLCBUaGUgZGVtb2QgaXMgbG9zaW5nIGxvY2sgKi8KIAkJCQkJbG9jayA9IDA7CiAJCQkJCWlmICh0cmlhbHMgPCAyKSB7CiAJCQkJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKQEAgLTMyMDIsNyArMzIwMiw3IEBACiAJCQlnb3RvIGVycjsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTE1BTlQsIDB4NzApIDwgMCkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc3R2MDkweF9zZXRfc3JhdGUoc3RhdGUsIDEwMDAwMDApIDwgMCkgLyogaW5pdGFsIHNyYXRlID0gMU1zcHMgKi8KKwkJaWYgKHN0djA5MHhfc2V0X3NyYXRlKHN0YXRlLCAxMDAwMDAwKSA8IDApIC8qIGluaXRpYWwgc3JhdGUgPSAxTXNwcyAqLwogCQkJZ290byBlcnI7CiAJfSBlbHNlIHsKIAkJLyoga25vd24gc3JhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdWFydC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc191YXJ0LmMKaW5kZXggOTdiODg5ZS4uZjgwN2M4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc191YXJ0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc191YXJ0LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCW1td3JpdGUobW1yZWFkKE1BTlRJU19VQVJUX0NUTCkgfCBNQU5USVNfVUFSVF9SWElOVCwgTUFOVElTX1VBUlRfQ1RMKTsKIAogCXNjaGVkdWxlX3dvcmsoJm1hbnRpcy0+dWFydF93b3JrKTsKLQlkcHJpbnRrKE1BTlRJU19ERUJVRywgMSwgIlVBUlQgc3VjY2VzZnVsbHkgaW5pdGlhbGl6ZWQiKTsKKwlkcHJpbnRrKE1BTlRJU19ERUJVRywgMSwgIlVBUlQgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwppbmRleCA5NjMwNzA1Li42OTI3YzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJCQkJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJj0KIAkJCQkJCQl+MHg0MDsKIAkJCQkJCWJyZWFrOwotCQkJCQkJLyogU3RvcCBwcm9jY2Vzc2luZyBzdHJlYW0gKi8KKwkJCQkJCS8qIFN0b3AgcHJvY2Vzc2luZyBzdHJlYW0gKi8KIAkJCQkJfQogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIFdlIGdvdCBhIHZhbGlkIGJ1ZmZlciwKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBPT1BTXG4iKTsKIAkJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgewogCQkJCQlDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICY9IH4weDQwOwotCQkJCQlicmVhazsJLyogU3RvcCBwcm9jY2Vzc2luZyBzdHJlYW0gKi8KKwkJCQkJYnJlYWs7CS8qIFN0b3AgcHJvY2Vzc2luZyBzdHJlYW0gKi8KIAkJCQl9CiAJCQl9CiAJCQlpZiAoY2hhbi0+QXVkaW9EVE9VcGRhdGVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKaW5kZXggNmNhNjcxM2QuLjdjYjc5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKQEAgLTI5NCwxMyArMjk0LDEzIEBACiAKIAkvKiBXb3JrYXJvdW5kIGZvciBicm9rZW4gaGFyZHdhcmU6CiAJICogWzFdIE9uIHN0YXJ0dXAgTkJQQUNLRVRTIHNlZW1zIHRvIGNvbnRhaW4gYW4gdW5pbml0aWFsaXplZCB2YWx1ZSwKLQkgKiAgICAgYnV0IG5vIHBhY2tldHMgaGF2ZSBiZWVuIHRyYW5zZmVyZWQuCisJICogICAgIGJ1dCBubyBwYWNrZXRzIGhhdmUgYmVlbiB0cmFuc2ZlcnJlZC4KIAkgKiBbMl0gU29tZXRpbWVzIChhY3R1YWxseSB2ZXJ5IG9mdGVuKSBOQlBBQ0tFVFMgc3RheXMgYXQgemVybwotCSAqICAgICBhbHRob3VnaCBvbmUgcGFja2V0IGhhcyBiZWVuIHRyYW5zZmVyZWQuCisJICogICAgIGFsdGhvdWdoIG9uZSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNmZXJyZWQuCiAJICogWzNdIFNvbWV0aW1lcyAoYWN0dWFsbHkgcmFyZWx5KSwgdGhlIGNhcmQgZ2V0cyBpbnRvIGFuIGVycm9uZW91cwogCSAqICAgICBtb2RlIHdoZXJlIGl0IGNvbnRpbnVvdXNseSBnZW5lcmF0ZXMgaW50ZXJydXB0cywgY2xhaW1pbmcgaXQKLQkgKiAgICAgaGFzIHJlY2lldmVkIG5icGFja2V0cz5UU19ETUFfUEFDS0VUUyBwYWNrZXRzLCBidXQgbm8gcGFja2V0Ci0JICogICAgIGhhcyBiZWVuIHRyYW5zZmVyZWQuIE9ubHkgYSByZXNldCBzZWVtcyB0byBzb2x2ZSB0aGlzCisJICogICAgIGhhcyByZWNlaXZlZCBuYnBhY2tldHM+VFNfRE1BX1BBQ0tFVFMgcGFja2V0cywgYnV0IG5vIHBhY2tldAorCSAqICAgICBoYXMgYmVlbiB0cmFuc2ZlcnJlZC4gT25seSBhIHJlc2V0IHNlZW1zIHRvIHNvbHZlIHRoaXMKIAkgKi8KIAlpZiAoKG5icGFja2V0cyA9PSAwKSB8fCAobmJwYWNrZXRzID4gVFNfRE1BX1BBQ0tFVFMpKSB7CiAJCXVuc2lnbmVkIGludCBpID0gMDsKQEAgLTMzMiw3ICszMzIsNyBAQAogCXN0cnVjdCBwbHV0byAqcGx1dG8gPSBkZXZfaWQ7CiAJdTMyIHRzY3I7CiAKLQkvKiBjaGVjayB3aGV0aGVyIGFuIGludGVycnVwdCBvY2N1cmVkIG9uIHRoaXMgZGV2aWNlICovCisJLyogY2hlY2sgd2hldGhlciBhbiBpbnRlcnJ1cHQgb2NjdXJyZWQgb24gdGhpcyBkZXZpY2UgKi8KIAl0c2NyID0gcGx1dG9fcmVhZHJlZyhwbHV0bywgUkVHX1RTQ1IpOwogCWlmICghKHRzY3IgJiAoVFNDUl9ERSB8IFRTQ1JfT1ZSKSkpCiAJCXJldHVybiBJUlFfTk9ORTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKaW5kZXggYjgwZDA5Yi4uMzdjNTk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKQEAgLTY1MCw3ICs2NTAsNyBAQAogCQlpZiAoc3RhdHVzICYgRkVfSEFTX0xPQ0spCiAJCQlyZXR1cm4gcmV0OwogCi0JCS8qIHByZXZpb3VzIHR1bmUgZGlkbnQgbG9jayAtIGVuYWJsZSBMTkEgYW5kIHR1bmUgYWdhaW4gKi8KKwkJLyogcHJldmlvdXMgdHVuZSBkaWRuJ3QgbG9jayAtIGVuYWJsZSBMTkEgYW5kIHR1bmUgYWdhaW4gKi8KIAkJc21zX2JvYXJkX2xuYV9jb250cm9sKGNsaWVudC0+Y29yZWRldiwgMSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IGZjMGE2MGYuLjNkMjA3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC0yMzMyLDcgKzIzMzIsNyBAQAogICogaW5jcmVtZW50LiBUaGF0J3MgaG93IHRoZSA3MTQ2IGlzIHByb2dyYW1tZWQgdG8gZG8gZXZlbnQKICAqIGNvdW50aW5nIGluIHRoaXMgYnVkZ2V0LXBhdGNoLmMKICAqIEkgKnRoaW5rKiBIUFMgc2V0dGluZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIHBoYXNlCi0gKiBvZiBIUyBidXQgSSBjYW50IGJlIDEwMCUgc3VyZSBpbiB0aGF0LgorICogb2YgSFMgYnV0IEkgY2FuJ3QgYmUgMTAwJSBzdXJlIGluIHRoYXQuCiAgKgogICogaGFyZHdhcmUgZGVidWcgbm90ZTogYSB3b3JraW5nIGJ1ZGdldCBjYXJkIChpbmNsdWRpbmcgYnVkZ2V0IHBhdGNoKQogICogd2l0aCB2cGVpcnEoKSBpbnRlcnJ1cHQgc2V0dXAgaW4gbW9kZSAiMHg5MCIgKGV2ZXJ5IDY0Sykgd2lsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwppbmRleCA1Nzk4MzU1Li4zMzk1ZDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwpAQCAtNTM5LDcgKzUzOSw3IEBACiAqKiAgICAgIGluY3JlbWVudC4gVGhhdCdzIGhvdyB0aGUgNzE0NiBpcyBwcm9ncmFtbWVkIHRvIGRvIGV2ZW50CiAqKiAgICAgIGNvdW50aW5nIGluIHRoaXMgYnVkZ2V0LXBhdGNoLmMKICoqICAgICAgSSAqdGhpbmsqIEhQUyBzZXR0aW5nIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGhhc2UKLSoqICAgICAgb2YgSFMgYnV0IEkgY2FudCBiZSAxMDAlIHN1cmUgaW4gdGhhdC4KKyoqICAgICAgb2YgSFMgYnV0IEkgY2FuJ3QgYmUgMTAwJSBzdXJlIGluIHRoYXQuCiAKICoqICAgICAgaGFyZHdhcmUgZGVidWcgbm90ZTogYSB3b3JraW5nIGJ1ZGdldCBjYXJkIChpbmNsdWRpbmcgYnVkZ2V0IHBhdGNoKQogKiogICAgICB3aXRoIHZwZWlycSgpIGludGVycnVwdCBzZXR1cCBpbiBtb2RlICIweDkwIiAoZXZlcnkgNjRLKSB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKaW5kZXggZmUxYjgwMy4uZjg5M2JmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJCSAqICh3aXRoIGJ1ZmZlclszXSA9PSAweDQwKSBpbiBhbiBpbnRlcnZhbGwgb2YgfjEwMG1zLgogCQkgKiBCdXQgdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5IHdlIGhhZCB0byBpbWxlbWVuZW50IHNvbWUKIAkJICoga2luZCBvZiB0aW1lciB3aGljaCBzaWduYWxzIGEgJ2tleSB1cCcgZXZlbnQgaWYgbm8KLQkJICoga2V5cmVwZWF0IHNpZ25hbCBpcyByZWNpZXZlZCBmb3IgbGV0cyBzYXkgMjAwbXMuCisJCSAqIGtleXJlcGVhdCBzaWduYWwgaXMgcmVjZWl2ZWQgZm9yIGxldHMgc2F5IDIwMG1zLgogCQkgKiB0aGlzIHNob3VsZC9jb3VsZCBiZSBhZGRlZCBsYXRlciAuLi4KIAkJICogZm9yIG5vdyBsZXRzIHJlcG9ydCBlYWNoIHNpZ25hbCBhcyBhIGtleSBkb3duIGFuZCB1cCovCiAJCWRwcmludGsoIiVzOnJjIHNpZ25hbDolZFxuIiwgX19mdW5jX18sIGJ1ZmZlcls0XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKaW5kZXggZTZiMmQwOC4uYjNhNjM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwpAQCAtOTksNyArOTksNyBAQAogCiAvKgogICogQ29tbWFuZHMgdGhhdCBkZXZpY2Ugc2hvdWxkIHVuZGVyc3RhbmQKLSAqIExpc3QgaXNudCBmdWxsIGFuZCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgZnVuY3Rpb25zCisgKiBMaXN0IGlzbid0IGZ1bGwgYW5kIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGltcGxlbWVudGF0aW9uIG9mIG5ldyBmdW5jdGlvbnMKICAqLwogI2RlZmluZSBBTVJBRElPX1NFVF9GUkVRCTB4YTQKICNkZWZpbmUgQU1SQURJT19TRVRfTVVURQkweGFiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKaW5kZXggZGMzZjA0Yy4uODdiYWQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qICEhISBub3QgdGVzdGVkLCBpbiBteSBjYXJkIHRoaXMgZG9lcyd0IHdvcmsgISEhICovCisvKiAhISEgbm90IHRlc3RlZCwgaW4gbXkgY2FyZCB0aGlzIGRvZXNuJ3Qgd29yayAhISEgKi8KIHN0YXRpYyBpbnQgZm1yMl9zZXR2b2x1bWUoc3RydWN0IGZtcjIgKmRldikKIHsKIAlpbnQgdm9sWzE2XSA9IHsgMHgwMjEsIDB4MDg0LCAweDA5MCwgMHgxMDQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jCmluZGV4IDBmYWI2ZjguLmRlY2EyZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jCkBAIC00ODEsNyArNDgxLDcgQEAKIH0KIAogLyoKLSAqIHNpNDcxM193YWl0X3N0YyAtIFdhaXRzIFNUQyBpbnRlcnJ1cHQgYW5kIGNsZWFycyBzdGF0dXMgYml0cy4gVXNlZnVsbAorICogc2k0NzEzX3dhaXRfc3RjIC0gV2FpdHMgU1RDIGludGVycnVwdCBhbmQgY2xlYXJzIHN0YXR1cyBiaXRzLiBVc2VmdWwKICAqCQkgICAgIGZvciBUWF9UVU5FX1BPV0VSLCBUWF9UVU5FX0ZSRVEgYW5kIFRYX1RVTkVfTUVBUwogICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCiAgKiBAdXNlY3M6IHRpbWVvdXQgdG8gd2FpdCBmb3IgU1RDIGludGVycnVwdCBzaWduYWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2X2NvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmMKaW5kZXggZWNmZDlmYi4uNTk5MWFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCWlmICghYXRvbWljX3JlYWQoJmZtZGV2LT50eF9jbnQpKQogCQlyZXR1cm47CiAKLQkvKiBDaGVjaywgaXMgdGhlcmUgYW55IHRpbWVvdXQgaGFwcGVubmVkIHRvIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0ICovCisJLyogQ2hlY2ssIGlzIHRoZXJlIGFueSB0aW1lb3V0IGhhcHBlbmVkIHRvIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0ICovCiAJaWYgKChqaWZmaWVzIC0gZm1kZXYtPmxhc3RfdHhfamlmZmllcykgPiBGTV9EUlZfVFhfVElNRU9VVCkgewogCQlmbWVycigiVFggdGltZW91dCBvY2N1cnJlZFxuIik7CiAJCWF0b21pY19zZXQoJmZtZGV2LT50eF9jbnQsIDEpOwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAlpZiAoIWZtZGV2LT5yZXNwX3NrYikgewotCQlmbWVycigiUmVwb25zZSBTS0IgaXMgbWlzc2luZ1xuIik7CisJCWZtZXJyKCJSZXNwb25zZSBTS0IgaXMgbWlzc2luZ1xuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZm1kZXYtPnJlc3Bfc2tiX2xvY2ssIGZsYWdzKTsKQEAgLTE1OTgsNyArMTU5OCw3IEBACiAJCWZtZGJnKCJGTSBDb3JlIGlzIGFscmVhZHkgZG93blxuIik7CiAJCXJldHVybiAwOwogCX0KLQkvKiBTZXZpY2UgcGVuZGluZyByZWFkICovCisJLyogU2VydmljZSBwZW5kaW5nIHJlYWQgKi8KIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZtZGV2LT5yeC5yZHMucmVhZF9xdWV1ZSk7CiAKIAl0YXNrbGV0X2tpbGwoJmZtZGV2LT50eF90YXNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2X2NvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmgKaW5kZXggNDI3YzQxNi4uYWVlMjQzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmgKQEAgLTM2Miw3ICszNjIsNyBAQAogI2RlZmluZSBGTV9UWF9QUkVFTVBIXzUwVVMJCTAKICNkZWZpbmUgRk1fVFhfUFJFRU1QSF83NVVTCQkyCiAKLS8qIEZNIFRYIGFudGVubmEgaW1wZWRlbmNlIHZhbHVlcyAqLworLyogRk0gVFggYW50ZW5uYSBpbXBlZGFuY2UgdmFsdWVzICovCiAjZGVmaW5lIEZNX1RYX0FOVF9JTVBfNTAJCTAKICNkZWZpbmUgRk1fVFhfQU5UX0lNUF8yMDAJCTEKICNkZWZpbmUgRk1fVFhfQU5UX0lNUF81MDAJCTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmMgYi9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5jCmluZGV4IDFhYzQ5MTMuLmE0M2VkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJZGV2LT5yeF9lbmFibGVkID0gZmFsc2U7CiB9CiAKLS8qIFRoaXMgcmVzZXRzIHRoZSByZWNlaXZlci4gVXNlZnVsbCB0byBzdG9wIHN0cmVhbSBvZiBzcGFjZXMgYXQgZW5kIG9mCisvKiBUaGlzIHJlc2V0cyB0aGUgcmVjZWl2ZXIuIFVzZWZ1bCB0byBzdG9wIHN0cmVhbSBvZiBzcGFjZXMgYXQgZW5kIG9mCiAgKiB0cmFuc21pc3Npb24KICAqLwogc3RhdGljIHZvaWQgZW5lX3J4X3Jlc2V0KHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCkBAIC0xMDg5LDcgKzEwODksNyBAQAogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQllbmVfbm90aWNlKCJkcml2ZXIgaGFzIGJlZW4gc3VjY2VzZnVsbHkgbG9hZGVkIik7CisJZW5lX25vdGljZSgiZHJpdmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQiKTsKIAlyZXR1cm4gMDsKIGVycm9yOgogCWlmIChkZXYgJiYgZGV2LT5pcnEgPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaW1vbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKaW5kZXggM2NhODY1OS4uOGZjMGYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKQEAgLTEzMTEsNyArMTMxMSw3IEBACiAJICogY29udGFpbiBhIHBvc2l0aW9uIGNvb3JkaW5hdGUgKHgseSksIHdpdGggZWFjaCBjb21wb25lbnQgcmFuZ2luZwogCSAqIGZyb20gLTE0IHRvIDE0LiBXZSB3YW50IHRvIGRvd24tc2FtcGxlIHRoaXMgdG8gb25seSA0IGRpc2NyZXRlIHZhbHVlcwogCSAqIGZvciB1cC9kb3duL2xlZnQvcmlnaHQgYXJyb3cga2V5cy4gQWxzbywgd2hlbiB5b3UgZ2V0IHRvbyBjbG9zZSB0bwotCSAqIGRpYWdvbmFscywgaXQgaGFzIGEgdGVuZGFuY3kgdG8ganVtcCBiYWNrIGFuZCBmb3J0aCwgc28gbGV0cyB0cnkgdG8KKwkgKiBkaWFnb25hbHMsIGl0IGhhcyBhIHRlbmRlbmN5IHRvIGp1bXAgYmFjayBhbmQgZm9ydGgsIHNvIGxldHMgdHJ5IHRvCiAJICogaWdub3JlIHdoZW4gdGhleSBnZXQgdG9vIGNsb3NlLgogCSAqLwogCWlmIChpY3R4LT5wcm9kdWN0ICE9IDB4ZmZkYykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmF3LmMKaW5kZXggMDFmMjU4YS4uMTFjMTlkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLXJhdy5jCkBAIC0xNTMsNyArMTUzLDcgQEAKICAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgZXZlbnQgdGhhdCBoYXMgb2NjdXJyZWQKICAqCiAgKiBUaGlzIHJvdXRpbmUgKHdoaWNoIG1heSBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dCkgd29ya3MKLSAqIGluIHNpbWlsaWFyIG1hbm5lciB0byBpcl9yYXdfZXZlbnRfc3RvcmVfZWRnZS4KKyAqIGluIHNpbWlsYXIgbWFubmVyIHRvIGlyX3Jhd19ldmVudF9zdG9yZV9lZGdlLgogICogVGhpcyByb3V0aW5lIGlzIGludGVuZGVkIGZvciBkZXZpY2VzIHdpdGggbGltaXRlZCBpbnRlcm5hbCBidWZmZXIKICAqIEl0IGF1dG9tZXJnZXMgc2FtcGxlcyBvZiBzYW1lIHR5cGUsIGFuZCBoYW5kbGVzIHRpbWVvdXRzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXRlLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKaW5kZXggOTQ4NWRhYy4uNDM5MDhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJpdGUtY2lyLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1sbWUyNTEwLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbG1lMjUxMC5jCmluZGV4IDNjMTkxMzkuLmFmYWUxNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1sbWUyNTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWxtZTI1MTAuYwpAQCAtNTUsNyArNTUsNyBAQAogCXsgMHhmZjQwZmIwNCwgS0VZX01FRElBX1JFUEVBVH0sIC8qIFJlY2FsbCAqLwogCXsgMHhmZjQwZTUxYSwgS0VZX1BBVVNFIH0sIC8qIFRpbWVzaGlmdCAqLwogCXsgMHhmZjQwZmQwMiwgS0VZX1ZPTFVNRVVQIH0sIC8qIDIgeCAtLysgS2V5cyBub3QgbWFya2VkICovCi0JeyAweGZmNDBmOTA2LCBLRVlfVk9MVU1FRE9XTiB9LCAvKiBWb2x1bW5lIGRlZmluZWQgYXMgcmlnaHQgaGFuZCovCisJeyAweGZmNDBmOTA2LCBLRVlfVk9MVU1FRE9XTiB9LCAvKiBWb2x1bWUgZGVmaW5lZCBhcyByaWdodCBoYW5kKi8KIAl7IDB4ZmY0MGZlMDEsIEtFWV9DSEFOTkVMVVAgfSwKIAl7IDB4ZmY0MGZhMDUsIEtFWV9DSEFOTkVMRE9XTiB9LAogCXsgMHhmZjQwZWIxNCwgS0VZX1pPT00gfSwKQEAgLTc2LDcgKzc2LDcgQEAKIAl7IDB4ZmYwMGJiNDQsIEtFWV9NRURJQV9SRVBFQVR9LCAvKiBSZWNhbGwgKi8KIAl7IDB4ZmYwMGI1NGEsIEtFWV9QQVVTRSB9LCAvKiBUaW1lc2hpZnQgKi8KIAl7IDB4ZmYwMGI4NDcsIEtFWV9WT0xVTUVVUCB9LCAvKiAyIHggLS8rIEtleXMgbm90IG1hcmtlZCAqLwotCXsgMHhmZjAwYmM0MywgS0VZX1ZPTFVNRURPV04gfSwgLyogVm9sdW1uZSBkZWZpbmVkIGFzIHJpZ2h0IGhhbmQqLworCXsgMHhmZjAwYmM0MywgS0VZX1ZPTFVNRURPV04gfSwgLyogVm9sdW1lIGRlZmluZWQgYXMgcmlnaHQgaGFuZCovCiAJeyAweGZmMDBiOTQ2LCBLRVlfQ0hBTk5FTFVQIH0sCiAJeyAweGZmMDBiZjQwLCBLRVlfQ0hBTk5FTERPV04gfSwKIAl7IDB4ZmYwMGY3MDgsIEtFWV9aT09NIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbXNpLXR2YW55d2hlcmUuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS5jCmluZGV4IDE4YjM3ZmEuLmZkZDIxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS5jCkBAIC0yOSw3ICsyOSw3IEBACiAKIAl7IDB4MGMsIEtFWV9NVVRFIH0sCiAJeyAweDBmLCBLRVlfU0NSRUVOIH0sCQkvKiBGdWxsIFNjcmVlbiAqLwotCXsgMHgxMCwgS0VZX0ZOIH0sCQkvKiBGdW50aW9uICovCisJeyAweDEwLCBLRVlfRk4gfSwJCS8qIEZ1bmN0aW9uICovCiAJeyAweDExLCBLRVlfVElNRSB9LAkJLyogVGltZSBzaGlmdCAqLwogCXsgMHgxMiwgS0VZX1BPV0VSIH0sCiAJeyAweDEzLCBLRVlfTUVESUEgfSwJCS8qIE1UUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5vcndvb2QuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1ub3J3b29kLmMKaW5kZXggZjFjMTI4MS4uZjlmMmZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5vcndvb2QuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbm9yd29vZC5jCkBAIC00OSw3ICs0OSw3IEBACiAJeyAweDM3LCBLRVlfUExBWSB9LAkJLyogUGxheSAgICAgICAgICAgICAgICAqLwogCXsgMHgzNiwgS0VZX1BBVVNFIH0sCQkvKiBQYXVzZSAgICAgICAgICAgICAgICovCiAJeyAweDJiLCBLRVlfU1RPUCB9LAkJLyogU3RvcCAgICAgICAgICAgICAgICAqLwotCXsgMHg2NywgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIEZvd2FyZCAgICAgICAgICAgICAgKi8KKwl7IDB4NjcsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBGb3J3YXJkICAgICAgICAgICAgICAqLwogCXsgMHg2NiwgS0VZX1JFV0lORCB9LAkJLyogUmV3aW5kICAgICAgICAgICAgICAqLwogCXsgMHgzZSwgS0VZX1NFQVJDSCB9LAkJLyogQXV0byBTY2FuICAgICAgICAgICAqLwogCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSBWaWRlbyAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwppbmRleCAzM2FmZDk4Li5hMjcwNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAgKiBAcmNfbWFwOglzY2FuY29kZSB0YWJsZSB0byBiZSBzZWFyY2hlZAogICogQHNjYW5jb2RlOgl0aGUgZGVzaXJlZCBzY2FuY29kZQogICogQHJlc2l6ZToJY29udHJvbHMgd2hldGhlciB3ZSBhbGxvd2VkIHRvIHJlc2l6ZSB0aGUgdGFibGUgdG8KLSAqCQlhY2NvbW9kYXRlIG5vdCB5ZXQgcHJlc2VudCBzY2FuY29kZXMKKyAqCQlhY2NvbW1vZGF0ZSBub3QgeWV0IHByZXNlbnQgc2NhbmNvZGVzCiAgKiBAcmV0dXJuOglpbmRleCBvZiB0aGUgbWFwcGluZyBjb250YWluaW5nIHNjYW5jb2RlIGluIHF1ZXN0aW9uCiAgKgkJb3IgLTFVIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAqCkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCQlnb3RvIG91dF90YWJsZTsKIAogCS8qCi0JICogRGVmYXVsdCBkZWxheSBvZiAyNTBtcyBpcyB0b28gc2hvcnQgZm9yIHNvbWUgcHJvdG9jb2xzLCBleHBlY2lhbGx5CisJICogRGVmYXVsdCBkZWxheSBvZiAyNTBtcyBpcyB0b28gc2hvcnQgZm9yIHNvbWUgcHJvdG9jb2xzLCBlc3BlY2lhbGx5CiAJICogc2luY2UgdGhlIHRpbWVvdXQgaXMgY3VycmVudGx5IHNldCB0byAyNTBtcy4gSW5jcmVhc2UgaXQgdG8gNTAwbXMsCiAJICogdG8gYXZvaWQgd3JvbmcgcmVwZXRpdGlvbiBvZiB0aGUga2V5Y29kZXMuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUKIAkgKiBzZXQgYWZ0ZXIgdGhlIGNhbGwgdG8gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCmluZGV4IDZhZDgzYTEuLmMwM2ViMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCkBAIC01MDIsNyArNTAyLDcgQEAKIAogCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KIAkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bGwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCisJLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KIAlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmKCpidWYpLT52Yik7CiAJbWVtc2V0KG91dHAsIDB4MDAsICgqYnVmKS0+dmIuc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKaW5kZXggMjQyZjBkNS4uM2M5ZTZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKQEAgLTIyNDQsOCArMjI0NCw4IEBACiAJfSwKIAlbQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUF0gPSB7CiAJCS8qRXJpYyBERUJJRUYgPGRlYmllZkB0ZWxlbXNhLmNvbT4qLwotCQkvKkVVUkVTWVMgUGljb2xvIFRldHJhIDogNCBDb25leGFudCBGdXNpb24gODc4QSwgbm8gYXVkaW8sIHZpZGVvIGlucHV0IHNldCB3aXRoIGFuYWxvZyBtdWx0aXBsZXhlcnMgR1BJTyBjb250cm9sZWQqLwotCQkvKiBhZGRzIHBpY29sb190ZXRyYV9tdXhzZWwoKSwgcGljb2xvX3RldHJhX2luaXQoKSwgdGhlIGZvbG93aW5nIGRlY2xhcmF0aW9uIHN0cnVjdXJlLCBhbmQgI2RlZmluZSBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQKi8KKwkJLypFVVJFU1lTIFBpY29sbyBUZXRyYSA6IDQgQ29uZXhhbnQgRnVzaW9uIDg3OEEsIG5vIGF1ZGlvLCB2aWRlbyBpbnB1dCBzZXQgd2l0aCBhbmFsb2cgbXVsdGlwbGV4ZXJzIEdQSU8gY29udHJvbGxlZCovCisJCS8qIGFkZHMgcGljb2xvX3RldHJhX211eHNlbCgpLCBwaWNvbG9fdGV0cmFfaW5pdCgpLCB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9uIHN0cnVjdXJlLCBhbmQgI2RlZmluZSBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQKi8KIAkJLyoweDc5IGluIGJ0dHYuaCovCiAJCS5uYW1lICAgICAgICAgICA9ICJFdXJlc3lzIFBpY29sbyBUZXRyYSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCkBAIC00NTY3LDcgKzQ1NjcsNyBAQAogICogYXQgb25lIGlucHV0IHdoaWxlIHRoZSBtb25pdG9yIGlzIGxvb2tpbmcgYXQgYW5vdGhlci4KICAqCiAgKiBTaW5jZSBJJ3ZlIGNvdWxkbid0IGJlIGJvdGhlcmVkIGZpZ3VyaW5nIG91dCBob3cgdG8gYWRkIGFuCi0gKiBpbmRlcGVuZGFudCBtdXhzZWwgZm9yIHRoZSBtb25pdG9yIGJ1cywgSSd2ZSBqdXN0IHNldCBpdCB0bworICogaW5kZXBlbmRlbnQgbXV4c2VsIGZvciB0aGUgbW9uaXRvciBidXMsIEkndmUganVzdCBzZXQgaXQgdG8KICAqIHdoYXRldmVyIHRoZSBjYXJkIGlzIGxvb2tpbmcgYXQuCiAgKgogICogIE9VVDAgb2YgdGhlIFREQTg1NDAncyBpcyBjb25uZWN0ZWQgdG8gTVVYMCAgICAgICAgICgweDAzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1ncGlvLmMKaW5kZXggZmQ2MDRkMy4uMTNjZTcyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZ3Bpby5jCkBAIC0zLDcgKzMsNyBAQAogICAgIGJ0dHYtZ3Bpby5jICAtLSAgZ3BpbyBzdWIgZHJpdmVycwogCiAgICAgc3lzZnMtYmFzZWQgc3ViIGRyaXZlciBpbnRlcmZhY2UgZm9yIGJ0dHYKLSAgICBtYWlubHkgaW50ZW50ZWQgZm9yIGdwaW8gYWNjZXNzCisgICAgbWFpbmx5IGludGVuZGVkIGZvciBncGlvIGFjY2VzcwogCiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTggUmFscGggIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDU1ZmZkNjAuLjY2NDcwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJICogY2F1c2VzIHRoZSBkZXZpY2UgdG8gZGllLgogCSAqIFVzZSBhIGJ1c3ktd2FpdCBiZWNhdXNlIHdlIG9mdGVuIHNlbmQgYSBsYXJnZSBxdWFudGl0eSBvZiBzbWFsbAogCSAqIGNvbW1hbmRzIGF0LW9uY2U7IHVzaW5nIG1zbGVlcCgpIHdvdWxkIGNhdXNlIGEgbG90IG9mIGNvbnRleHQKLQkgKiBzd2l0Y2hlcyB3aGljaCB0YWtlIGxvbmdlciB0aGFuIDJtcywgcmVzdWx0aW5nIGluIGEgbm90aWNhYmxlCisJICogc3dpdGNoZXMgd2hpY2ggdGFrZSBsb25nZXIgdGhhbiAybXMsIHJlc3VsdGluZyBpbiBhIG5vdGljZWFibGUKIAkgKiBib290LXRpbWUgYW5kIGNhcHR1cmUtc3RhcnQgZGVsYXlzLgogCSAqLwogCW1kZWxheSgyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAppbmRleCAxODhjOWMzLi5lOWM2OWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCkBAIC0xMDksNyArMTA5LDcgQEAKIAlpbnQgaXNfaW5pdGlhbGl6ZWQ7CiAKIAkvKgotCSAqIFRoZSBWQkkgc2xpY2VyIHN0YXJ0cyBvcGVyYXRpbmcgYW5kIGNvdW50aW5nIGxpbmVzLCBiZWdpbmluZyBhdAorCSAqIFRoZSBWQkkgc2xpY2VyIHN0YXJ0cyBvcGVyYXRpbmcgYW5kIGNvdW50aW5nIGxpbmVzLCBiZWdpbm5pbmcgYXQKIAkgKiBzbGljZXIgbGluZSBjb3VudCBvZiAxLCBhdCBEIGxpbmVzIGFmdGVyIHRoZSBkZWFzc2VydGlvbiBvZiBWUkVTRVQuCiAJICogVGhpcyBzdGFyaW5nIGZpZWxkIGxpbmUsIFMsIGlzIDYgKCYgMzE5KSBvciAxMCAoJiAyNzMpIGZvciA2MjUgb3IgNTI1CiAJICogbGluZSBzeXN0ZW1zIHJlc3BlY3RpdmVseS4gIFNsaWNlZCBhbmNpbGxhcnkgZGF0YSBjYXB0dXJlZCBvbiBWQkkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCmluZGV4IDg2YzMwYjkuLjRmMDQxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAKIAkvKgogCSAqIFNldCB0aGUgZGlnaXRpemVyIHJlZ2lzdGVycyBmb3IgcmF3IGFjdGl2ZSBWQkkuCi0JICogTm90ZSBjeDE4X2F2X3ZiaV93aXBlcyBvdXQgYWxvdCBvZiB0aGUgcGFzc2VkIGluIGZtdCB1bmRlciB2YWxpZAorCSAqIE5vdGUgY3gxOF9hdl92Ymlfd2lwZXMgb3V0IGEgbG90IG9mIHRoZSBwYXNzZWQgaW4gZm10IHVuZGVyIHZhbGlkCiAJICogY2FsbGluZyBjb25kaXRpb25zCiAJICovCiAJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZiaSwgc19yYXdfZm10LCAmZm10LT5mbXQudmJpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKaW5kZXggNTgyMjI3NS4uNmQzMTIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKQEAgLTI5LDcgKzI5LDcgQEAKIC8qCiAgKiBSYXN0ZXIgUmVmZXJlbmNlL1Byb3RlY3Rpb24gKFJQKSBieXRlcywgdXNlZCBpbiBTdGFydC9FbmQgQWN0aXZlCiAgKiBWaWRlbyBjb2RlcyBlbWl0dGVkIGZyb20gdGhlIGRpZ2l0emVyIGluIFZJUCAxLnggbW9kZSwgdGhhdCBmbGFnIHRoZSBzdGFydAotICogb2YgVkJJIHNhbXBsZSBvciBWQkkgYW5jaWxsaWFyeSBkYXRhIHJlZ2lvbnMgaW4gdGhlIGRpZ2l0aWFsIHJhdHNlciBsaW5lLgorICogb2YgVkJJIHNhbXBsZSBvciBWQkkgYW5jaWxsYXJ5IGRhdGEgcmVnaW9ucyBpbiB0aGUgZGlnaXRpYWwgcmF0c2VyIGxpbmUuCiAgKgogICogVGFzayBGaWVsZEV2ZW4gVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1hdmNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jCmluZGV4IDYyODQzZDMuLjI4MGRmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jCkBAIC0yNTc3LDcgKzI1NzcsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSA2OgkvKiB0czEgcGFyYWxsZWwgbW9kZSAqLwotCQkJY3gyMzF4eF9pbmZvKCIlczogc2V0IHRzMSBwYXJyYWxsZWwgbW9kZSByZWdpc3RlcnNcbiIsCisJCQljeDIzMXh4X2luZm8oIiVzOiBzZXQgdHMxIHBhcmFsbGVsIG1vZGUgcmVnaXN0ZXJzXG4iLAogCQkJCSAgICAgX19mdW5jX18pOwogCQkJc3RhdHVzID0gY3gyMzF4eF9tb2RlX3JlZ2lzdGVyKGRldiwgVFNfTU9ERV9SRUcsIDB4MTAwKTsKIAkJCXN0YXR1cyA9IGN4MjMxeHhfbW9kZV9yZWdpc3RlcihkZXYsIFRTMV9DRkdfUkVHLCAweDQwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZiaS5jCmluZGV4IDFkOTE0NDguLjFjN2E0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZiaS5jCkBAIC02MzEsNyArNjMxLDcgQEAKIAkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCiAJKmJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgY3gyMzF4eF9idWZmZXIsIHZiLnF1ZXVlKTsKIAotCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWxsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLworCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCiAJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOwogCW1lbXNldChvdXRwLCAwLCAoKmJ1ZiktPnZiLnNpemUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtdmlkZW8uYwppbmRleCBmZmQ1YWY5Li5hNjljMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKQEAgLTMwOSw3ICszMDksNyBAQAogCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KIAkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBjeDIzMXh4X2J1ZmZlciwgdmIucXVldWUpOwogCi0JLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bGwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCisJLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KIAlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmKCpidWYpLT52Yik7CiAJbWVtc2V0KG91dHAsIDAsICgqYnVmKS0+dmIuc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYwppbmRleCAyMDliOTcxLi5jOWYxNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCkBAIC00NDksNyArNDQ5LDcgQEAKIAkJMHgwNCwgLyogYWNrIGFjdGl2ZSBsb3cgKi8KIAkJMHgwMCwgLyogTE9DSyA9IDAgKi8KIAkJMHgzMywgLyogc2VyaWFsIG1vZGUsIHJpc2luZyBpbiwgcmlzaW5nIG91dCwgTVNCIGZpcnN0Ki8KLQkJMHgzMSwgLyogc3luY3Jvbml6YXRpb24gKi8KKwkJMHgzMSwgLyogc3luY2hyb25pemF0aW9uICovCiAJfTsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAppbmRleCA4ZGIyNzk3Li5jMTg2NDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiAJLyogVmVuZG9ycyBjYW4gYW5kIGRvIHJ1biB0aGUgUENJZSBicmlkZ2UgYXQgZGlmZmVyZW50CiAJICogY2xvY2sgcmF0ZXMsIGRyaXZlbiBwaHlzaWNhbGx5IGJ5IGNyeXN0YWxzIG9uIHRoZSBQQ0JzLgotCSAqIFRoZSBjb3JlIGhhcyB0byBhY2NvbW9kYXRlIHRoaXMuIFRoaXMgYWxsb3dzIHRoZSB1c2VyCisJICogVGhlIGNvcmUgaGFzIHRvIGFjY29tbW9kYXRlIHRoaXMuIFRoaXMgYWxsb3dzIHRoZSB1c2VyCiAJICogdG8gYWRkIG5ldyBib2FyZHMgd2l0aCBuZXcgZnJlcXVlbmN5cy4gVGhlIHZhbHVlIGlzCiAJICogZXhwcmVzc2VkIGluIEh6LgogCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMzU3OTZlMC4uYjdlZTJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVWxmIEVrbHVuZAogICoKLSAqIEJhc2VkIG9uIHRoZSBzYWE3MTE1IGRyaXZlciBhbmQgb24gdGhlIGZpcnN0IHZlcmlzb24gb2YgQ2hyaXMgS2VubmVkeSdzCisgKiBCYXNlZCBvbiB0aGUgc2FhNzExNSBkcml2ZXIgYW5kIG9uIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIENocmlzIEtlbm5lZHkncwogICogY3gyNTg0MCBkcml2ZXIuCiAgKgogICogQ2hhbmdlcyBieSBUeWxlciBUcmFmZm9yZCA8dGF0cmFmZm9yZEBjb21jYXN0Lm5ldD4KQEAgLTQ0NSw3ICs0NDUsNyBAQAogCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDkxOCwgMHhhMCk7CiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4OTE5LCAweDAxKTsKIAotCS8qIHN0ZXJlbyBwcmVmZXJlZCAqLworCS8qIHN0ZXJlbyBwcmVmZXJyZWQgKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4MDksIDB4MDQpOwogCS8qIEFDOTcgc2hpZnQgKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4Y2YsIDB4MGYpOwpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJICogQXV4IFBMTAogCSAqIEluaXRpYWwgc2V0dXAgZm9yIGF1ZGlvIHNhbXBsZSBjbG9jazoKIAkgKiA0OCBrc3BzLCAxNiBiaXRzL3NhbXBsZSwgeDE2MCBtdWx0aXBsaWVyID0gMTIyLjg4IE1IegotCSAqIEludGlhbCBJMlMgb3V0cHV0L21hc3RlciBjbG9jayg/KToKKwkgKiBJbml0aWFsIEkyUyBvdXRwdXQvbWFzdGVyIGNsb2NrKD8pOgogCSAqIDQ4IGtzcHMsIDE2IGJpdHMvc2FtcGxlLCB4MTYgbXVsdGlwbGllciA9IDEyLjI4OCBNSHoKIAkgKi8KIAlzd2l0Y2ggKHN0YXRlLT5pZCkgewpAQCAtOTAzLDcgKzkwMyw3IEBACiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKIAkJLyogQXV0b2RldGVjdCBhdWRpbyBzdGFuZGFyZCBhbmQgYXVkaW8gc3lzdGVtICovCiAJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDgwOCwgMHhmZik7Ci0JCS8qIFNpbmNlIHN5c3RlbSBQQUwtTCBpcyBwcmV0dHkgbXVjaCBub24tZXhpc3RhbnQgYW5kCisJCS8qIFNpbmNlIHN5c3RlbSBQQUwtTCBpcyBwcmV0dHkgbXVjaCBub24tZXhpc3RlbnQgYW5kCiAJCSAgIG5vdCB1c2VkIGJ5IGFueSBwdWJsaWMgYnJvYWRjYXN0IG5ldHdvcmssIGZvcmNlCiAJCSAgIDYuNSBNSHogY2FycmllciB0byBiZSBpbnRlcnByZXRlZCBhcyBTeXN0ZW0gREssCiAJCSAgIHRoaXMgYXZvaWRzIERLIGF1ZGlvIGRldGVjdGlvbiBpbnN0YWJpbGl0eSAqLwpAQCAtMTg1MSw3ICsxODUxLDcgQEAKIAkJCXJldCA9IFY0TDJfSURFTlRfQ1gyMzg4NV9BVjsKIAkJfSBlbHNlIHsKIAkJCS8qIENYMjM4ODcgaGFzIGEgYnJva2VuIERJRiwgYnV0IHRoZSByZWdpc3RlcnMKLQkJCSAqIGFwcGVhciB2YWxpZCAoYnV0IHVuc2VkKSwgZ29vZCBlbm91Z2ggdG8gZGV0ZWN0LiAqLworCQkJICogYXBwZWFyIHZhbGlkIChidXQgdW51c2VkKSwgZ29vZCBlbm91Z2ggdG8gZGV0ZWN0LiAqLwogCQkJcmV0ID0gVjRMMl9JREVOVF9DWDIzODg3X0FWOwogCQl9CiAJfSBlbHNlIGlmIChjeDI1ODQwX3JlYWQ0KGNsaWVudCwgMHgzMDApICYgMHgwZmZmZmZmZikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwppbmRleCA0OTBhYWZiLi5jOGIzMmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEZQQyB0YWJsZSBpZiBjdXJyZW50CiAJICogRlBDIHRhYmxlIGJ1ZmZlciBpcyBub3QgYmlnIGVub3VnaCB0bwotCSAqIGFjY29tb2RhdGUgRlBDIE51bWJlciByZXF1ZXN0ZWQKKwkgKiBhY2NvbW1vZGF0ZSBGUEMgTnVtYmVyIHJlcXVlc3RlZAogCSAqLwogCWlmIChyYXdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtICE9IGNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0pIHsKIAkJaWYgKGZwY19waHlzYWRkciAhPSBOVUxMKSB7CkBAIC00MzYsNyArNDM2LDcgQEAKIAogCS8qCiAJICogY29uZmlndXJlIHRoZSBob3Jpem9udGFsIGxpbmUgb2Zmc2V0LiBUaGlzIHNob3VsZCBiZSBhCi0JICogb24gMzIgYnl0ZSBib25kYXJ5LiBTbyBjbGVhciBMU0IgNSBiaXRzCisJICogb24gMzIgYnl0ZSBib3VuZGFyeS4gU28gY2xlYXIgTFNCIDUgYml0cwogCSAqLwogCXJlZ3coKChwYXJhbXMtPndpbi53aWR0aCAqIDIgICsgMzEpICYgfjB4MWYpLCBDQ0RDX0hTSVpFX09GRik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYwppbmRleCA3MWU5NjFlNS4uNWIzOGZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYwpAQCAtMTY5MSw3ICsxNjkxLDcgQEAKIAkJZ290byB1bmxvY2tfb3V0OwogCX0KIAotCS8qIGFkanVzdCB0aGUgd2lkdGggdG8gMTYgcGl4ZWwgYm91bmRyeSAqLworCS8qIGFkanVzdCB0aGUgd2lkdGggdG8gMTYgcGl4ZWwgYm91bmRhcnkgKi8KIAljcm9wLT5jLndpZHRoID0gKChjcm9wLT5jLndpZHRoICsgMTUpICYgfjB4Zik7CiAKIAkvKiBtYWtlIHN1cmUgcGFyYW1ldGVycyBhcmUgdmFsaWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggYTgzMTMxYi4uN2I2NDYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTM3Nyw3ICszNzcsNyBAQAogCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KIAkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBlbTI4eHhfYnVmZmVyLCB2Yi5xdWV1ZSk7CiAKLQkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsbCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KKwkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLwogCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCYoKmJ1ZiktPnZiKTsKIAltZW1zZXQob3V0cCwgMCwgKCpidWYpLT52Yi5zaXplKTsKIApAQCAtNDA0LDcgKzQwNCw3IEBACiAKIAkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCiAJKmJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIucXVldWUpOwotCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWxsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLworCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCiAJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOwogCW1lbXNldChvdXRwLCAweDAwLCAoKmJ1ZiktPnZiLnNpemUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMTMyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTEzMjAuYwppbmRleCBjMjc2YTdkLi5iNTcxNjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMTMyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkxMzIwLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXNkLT52bWF4LmJhY2tsaWdodCAgPSAgMjsKIAlzZC0+dm1heC5icmlnaHRuZXNzID0gIDg7CiAJc2QtPnZtYXguc2hhcnBuZXNzICA9ICA3OwotCXNkLT52bWF4LmNvbnRyYXN0ICAgPSAgMDsgLyogMTAgYnV0IG5vdCB3b3JraW5nIHdpdGggdGlocyBkcml2ZXIgKi8KKwlzZC0+dm1heC5jb250cmFzdCAgID0gIDA7IC8qIDEwIGJ1dCBub3Qgd29ya2luZyB3aXRoIHRoaXMgZHJpdmVyICovCiAJc2QtPnZtYXguZ2FtbWEgICAgICA9IDQwOwogCXNkLT52bWF4Lmh1ZSAgICAgICAgPSAgNSArIDE7CiAJc2QtPnZtYXguc2F0dXJhdGlvbiA9ICA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IDljNmE2NDMuLmU1MjZhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCQl9CiAKIAkJLyogdGhlIGJhbmR3aWR0aCBpcyBub3Qgd2lkZSBlbm91Z2gKLQkJICogbmVnb2NpYXRlIG9yIHRyeSBhIGxvd2VyIGFsdGVybmF0ZSBzZXR0aW5nICovCisJCSAqIG5lZ290aWF0ZSBvciB0cnkgYSBsb3dlciBhbHRlcm5hdGUgc2V0dGluZyAqLwogCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sCiAJCQkiYmFuZHdpZHRoIG5vdCB3aWRlIGVub3VnaCAtIHRyeWluZyBhZ2FpbiIpOwogCQltc2xlZXAoMjApOwkvKiB3YWl0IGZvciBraWxsIGNvbXBsZXRlICovCkBAIC0yMzQ2LDcgKzIzNDYsNyBAQAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKIAkvKiByZWxlYXNlIHRoZSBkZXZpY2UgKi8KLQkvKiAodGhpcyB3aWxsIGNhbGwgZ3NwY2FfcmVsZWFzZSgpIGltbWVkaWF0bHkgb3Igb24gbGFzdCBjbG9zZSkgKi8KKwkvKiAodGhpcyB3aWxsIGNhbGwgZ3NwY2FfcmVsZWFzZSgpIGltbWVkaWF0ZWx5IG9yIG9uIGxhc3QgY2xvc2UpICovCiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmdzcGNhX2Rldi0+dmRldik7CiAKIC8qCVBERUJVRyhEX1BST0JFLCAiZGlzY29ubmVjdCBjb21wbGV0ZSIpOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYwppbmRleCBjYjRkMGJmLi4wMTk2MjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYwpAQCAtMzYxLDcgKzM2MSw3IEBACiAJCW1pX3coZ3NwY2FfZGV2LCBpICsgMSwgbWlfZGF0YVtpXSk7CiAKIAlkYXRhWzBdID0gMHgwMDsKLQlkYXRhWzFdID0gMHg0ZDsJCS8qIElTT0MgdHJhbnNmZXJpbmcgZW5hYmxlLi4uICovCisJZGF0YVsxXSA9IDB4NGQ7CQkvKiBJU09DIHRyYW5zZmVycmluZyBlbmFibGUuLi4gKi8KIAlyZWdfdyhnc3BjYV9kZXYsIDIpOwogCiAJZ3NwY2FfZGV2LT5jdHJsX2luYWMgPSAwOyAvKiBhY3RpdmF0ZSB0aGUgaWxsdW1pbmF0b3IgY29udHJvbHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwppbmRleCAzODg0YzlkLi45N2U1MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCkBAIC00NjksNyArNDY5LDcgQEAKIHN0YXRpYyBpbnQgaXNvY19lbmFibGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MDA7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMHg0ZDsgIC8qIElTT0MgdHJhbnNmZXJpbmcgZW5hYmxlLi4uICovCisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMHg0ZDsgIC8qIElTT0MgdHJhbnNmZXJyaW5nIGVuYWJsZS4uLiAqLwogCXJldHVybiBtcl93cml0ZShnc3BjYV9kZXYsIDIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggZmQxYjYwOC4uMzZhNDZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICBsYXJnZXIgdGhlbiBuZWNlc3NhcnksIGhvd2V2ZXIgdGhleSBuZWVkIHRvIGJlIHRoaXMgYmlnIGFzIHRoZSBvdjUxMSAvCiAgICBvdjUxOCBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpc29jIGZyYW1lLCB1c2luZyAwIHBhZGRpbmcgYnl0ZXMgd2hlbgogICAgaXQgZG9lc24ndCBoYXZlIGFueSBkYXRhLiBTbyB3aXRoIGxvdyBmcmFtZXJhdGVzIHRoZSBhbW91bnQgb2YgZGF0YQotICAgdHJhbnNmZXJlZCBjYW4gYmVjb21lIHF1aXRlIGxhcmdlIChsaWJ2NGwgd2lsbCByZW1vdmUgYWxsIHRoZSAwIHBhZGRpbmcKKyAgIHRyYW5zZmVycmVkIGNhbiBiZWNvbWUgcXVpdGUgbGFyZ2UgKGxpYnY0bCB3aWxsIHJlbW92ZSBhbGwgdGhlIDAgcGFkZGluZwogICAgaW4gdXNlcnNwYWNlKS4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG92NTE4X3ZnYV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfT1Y1MTgsIFY0TDJfRklFTERfTk9ORSwKQEAgLTQzNjgsNyArNDM2OCw3IEBACiAJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQkJcmV0dXJuOwogCQkJfQotCQkJLyogQWRkIDExIGJ5dGUgZm9vdGVyIHRvIGZyYW1lLCBtaWdodCBiZSB1c2VmdWxsICovCisJCQkvKiBBZGQgMTEgYnl0ZSBmb290ZXIgdG8gZnJhbWUsIG1pZ2h0IGJlIHVzZWZ1bCAqLwogCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGluLCAxMSk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwppbmRleCA1YTA4NzM4Li4xNDZiNDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTgyNyw3ICs4MjcsNyBAQAogCQkgICBwb3NzaWJsZSB0byB1c2UgbGVzcyBleHBvc3VyZSB0aGVuIHdoYXQgdGhlIGZwcyBtYXhpbXVtCiAJCSAgIGFsbG93cyBieSBzZXR0aW5nIHJlZ2lzdGVyIDEwLiByZWdpc3RlciAxMCBjb25maWd1cmVzIHRoZQogCQkgICBhY3R1YWwgZXhwb3N1cmUgYXMgcXVvdGllbnQgb2YgdGhlIGZ1bGwgZXhwb3N1cmUsIHdpdGggMAotCQkgICBiZWluZyBubyBleHBvc3VyZSBhdCBhbGwgKG5vdCB2ZXJ5IHVzZWZ1bGwpIGFuZCByZWcxMF9tYXgKKwkJICAgYmVpbmcgbm8gZXhwb3N1cmUgYXQgYWxsIChub3QgdmVyeSB1c2VmdWwpIGFuZCByZWcxMF9tYXgKIAkJICAgYmVpbmcgbWF4IGV4cG9zdXJlIHBvc3NpYmxlIGF0IHRoYXQgZnJhbWVyYXRlLgogCiAJCSAgIFRoZSBjb2RlIG1hcHMgb3VyIDAgLSA1MTAgbXMgZXhwb3N1cmUgY3RybCB0byB0aGVzZSAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCmluZGV4IDQ1NTUyYzMuLjNlNzY5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCkBAIC02MDcsNyArNjA3LDcgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODg4MCwgMik7CiAJLyogZmFtaWx5IGNhbSBRdWlja3NtYXJ0IHN0dWZmICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgwMGEsIDB4MDApOwotCS8qIFNldCBhZ2MgdHJhbnNmZXI6IHN5bmNlZCBpbmJldHdlZW4gZnJhbWVzICovCisJLyogU2V0IGFnYyB0cmFuc2Zlcjogc3luY2VkIGJldHdlZW4gZnJhbWVzICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgyMGYsIDB4MDEpOwogCS8qIEluaXQgU0RSQU0gLSBuZWVkZWQgZm9yIFNEUkFNIGFjY2VzcyAqLwogCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NzBhLCAweDA0KTsKQEAgLTgzMSw3ICs4MzEsNyBAQAogCiAJCS8qIGZhbWlseWNhbSBRdWlja3NtYXJ0IHBvY2tldERWIHN0dWZmICovCiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MDBhLCAweDAwKTsKLQkJLyogU2V0IGFnYyB0cmFuc2Zlcjogc3luY2VkIGluYmV0d2VlbiBmcmFtZXMgKi8KKwkJLyogU2V0IGFnYyB0cmFuc2Zlcjogc3luY2VkIGJldHdlZW4gZnJhbWVzICovCiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MjBmLCAweDAxKTsKIAkJLyogSW5pdCBTRFJBTSAtIG5lZWRlZCBmb3IgU0RSQU0gYWNjZXNzICovCiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NzBhLCAweDA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMKaW5kZXggMzQ4MzE5My4uNDFkY2U0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMKQEAgLTU5Miw3ICs1OTIsNyBAQAogLyogVGhpcyBsaW5lIHNlZW1zIHRvIHNldHVwIHRoZSBmcmFtZS9jYW52YXMgKi8KIAl7MHgwMDBmLCAweDg0MDJ9LAogCi0vKiBUaGVlc2UgNiBsaW5lcyBhcmUgbmVlZGVkIHRvIHN0YXJ0dXAgdGhlIHdlYmNhbSAqLworLyogVGhlc2UgNiBsaW5lcyBhcmUgbmVlZGVkIHRvIHN0YXJ0dXAgdGhlIHdlYmNhbSAqLwogCXsweDAwOTAsIDB4ODExMH0sCiAJezB4MDAwMSwgMHg4MTE0fSwKIAl7MHgwMDAxLCAweDgxMTR9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNS5jCmluZGV4IDJlOWMwNjEuLjViYTk2YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqIEhpc3RvcnkgYW5kIEFja25vd2xlZGdtZW50cwogICoKICAqIFRoZSBvcmlnaW5hbCBMaW51eCBkcml2ZXIgZm9yIFNROTA1IGJhc2VkIGNhbWVyYXMgd2FzIHdyaXR0ZW4gYnkKLSAqIE1hcmNlbGwgTGVuZ3llbCBhbmQgZnVydGVyIGRldmVsb3BlZCBieSBtYW55IG90aGVyIGNvbnRyaWJ1dGVycworICogTWFyY2VsbCBMZW5neWVsIGFuZCBmdXJ0ZXIgZGV2ZWxvcGVkIGJ5IG1hbnkgb3RoZXIgY29udHJpYnV0b3JzCiAgKiBhbmQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zcWNhbS8KICAqCiAgKiBUaGlzIGRyaXZlciB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgd29yayBkb25lIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCmluZGV4IDE3NTMxYjQuLmI4MTU2ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKQEAgLTU2OSw3ICs1NjksNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRW5hYmxlIGNvbnRpbm91cyBmcmFtZSBjYXB0dXJlLCBiaXQgMjogc3RvcCB3aGVuIGZyYW1lIGNvbXBsZXRlICovCisJLyogRW5hYmxlIGNvbnRpbnVvdXMgZnJhbWUgY2FwdHVyZSwgYml0IDI6IHN0b3Agd2hlbiBmcmFtZSBjb21wbGV0ZSAqLwogCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBIRENTX1JFR19DT05GSUcoc2QpLCBCSVQoMykpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwppbmRleCBjZGY4YjE5Li5jYmM1MDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAKIC8qIHRoZSBzYWE3MTQ2IHByb3ZpZGVzIHNvbWUgY29udHJvbHMgKGJyaWdodG5lc3MsIGNvbnRyYXN0LCBzYXR1cmF0aW9uKQogICAgd2hpY2ggZ2V0cyByZWdpc3RlcmVkICphZnRlciogdGhpcyBmdW5jdGlvbi4gYmVjYXVzZSBvZiB0aGlzIHdlIGhhdmUKLSAgIHRvIHJldHVybiB3aXRoIGEgdmFsdWUgIT0gMCBldmVuIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWRlZC4uICovCisgICB0byByZXR1cm4gd2l0aCBhIHZhbHVlICE9IDAgZXZlbiBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLi4gKi8KIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwppbmRleCA0ZGYwMTk0Li4xNGExY2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKQEAgLTE3OSw3ICsxNzksNyBAQAogewogCWludCBpOwogCi0JLyogbWFpbGJveCBpcyBwcmVjZWVkZWQgYnkgYSAxNiBieXRlICdtYWdpYyBjb29raWUnIHN0YXJ0aW5nIGF0IGEgMjU2LWJ5dGUKKwkvKiBtYWlsYm94IGlzIHByZWNlZGVkIGJ5IGEgMTYgYnl0ZSAnbWFnaWMgY29va2llJyBzdGFydGluZyBhdCBhIDI1Ni1ieXRlCiAJICAgYWRkcmVzcyBib3VuZGFyeSAqLwogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDB4MTAwKSB7CiAJCWlmIChyZWFkbChtZW0gKyBpKSAgICAgID09IDB4MTIzNDU2NzggJiYKQEAgLTM3Nyw3ICszNzcsNyBAQAogCQkJICAiUmVsb2FkaW5nXG4iLCB3aGVyZSk7CiAJCXJlcyA9IGl2dHZfZmlybXdhcmVfcmVzdGFydChpdHYpOwogCQkvKgotCQkgKiBFdmVuIGlmIHJlc3RhcnRlZCBvaywgc3RpbGwgc2lnbmFsIGEgcHJvYmxlbSBoYWQgb2NjdXJlZC4KKwkJICogRXZlbiBpZiByZXN0YXJ0ZWQgb2ssIHN0aWxsIHNpZ25hbCBhIHByb2JsZW0gaGFkIG9jY3VycmVkLgogCQkgKiBUaGUgY2FsbGVyIGNhbiBjb21lIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBhZ2FpbiB0byBjaGVjawogCQkgKiBpZiB0aGluZ3MgYXJlIHJlYWxseSBvayBhZnRlciB0aGUgcmVzdGFydC4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKaW5kZXggZjAzMTZkMC4uMTcyNDc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAKIAkJa21hbGxvYyhzaXplb2YodTMyKSAqIDE2LCBHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTik7CiAKIAlpZiAoIW9pLT5pdnR2ZmJfaW5mby5wc2V1ZG9fcGFsZXR0ZSkgewotCQlJVlRWRkJfRVJSKCJhYm9ydCwgdW5hYmxlIHRvIGFsbG9jIHBzZXVkbyBwYWxsZXRlXG4iKTsKKwkJSVZUVkZCX0VSUigiYWJvcnQsIHVuYWJsZSB0byBhbGxvYyBwc2V1ZG8gcGFsZXR0ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCmluZGV4IGIxNzYzYWMuLjgxMjY2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKQEAgLTY5LDcgKzY5LDcgQEAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IG9wbW9kZSAgID0gT1BNT0RFX0FVVE87CiBpbnQgbXNwX2RlYnVnOwkJIC8qIG1zcF9kZWJ1ZyBvdXRwdXQgKi8KLWludCBtc3Bfb25jZTsJCSAvKiBubyBjb250aW5vdXMgc3RlcmVvIG1vbml0b3JpbmcgKi8KK2ludCBtc3Bfb25jZTsJCSAvKiBubyBjb250aW51b3VzIHN0ZXJlbyBtb25pdG9yaW5nICovCiBpbnQgbXNwX2Ftc291bmQ7CSAvKiBoYXJkLXdpcmUgQU0gc291bmQgYXQgNi41IEh6IChmcmFuY2UpLAogCQkJICAgIHRoZSBhdXRvc2NhbiBzZWVtcyB3b3JrIHdlbGwgb25seSB3aXRoIEZNLi4uICovCiBpbnQgbXNwX3N0YW5kYXJkID0gMTsgICAgLyogT3ZlcnJpZGUgYXV0byBkZXRlY3Qgb2YgYXVkaW8gbXNwX3N0YW5kYXJkLApAQCAtNTUxLDcgKzU1MSw3IEBACiAJc3dpdGNoIChzdGF0ZS0+bW9kZSkgewogCQljYXNlIE1TUF9NT0RFX0FNX0RFVEVDVDogcCA9ICJBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0KSI7IGJyZWFrOwogCQljYXNlIE1TUF9NT0RFX0ZNX1JBRElPOiBwID0gIkZNIFJhZGlvIjsgYnJlYWs7Ci0JCWNhc2UgTVNQX01PREVfRk1fVEVSUkE6IHAgPSAiVGVycmVzdGlhbCBGTS1tb25vL3N0ZXJlbyI7IGJyZWFrOworCQljYXNlIE1TUF9NT0RFX0ZNX1RFUlJBOiBwID0gIlRlcnJlc3RyaWFsIEZNLW1vbm8vc3RlcmVvIjsgYnJlYWs7CiAJCWNhc2UgTVNQX01PREVfRk1fU0FUOiBwID0gIlNhdGVsbGl0ZSBGTS1tb25vIjsgYnJlYWs7CiAJCWNhc2UgTVNQX01PREVfRk1fTklDQU0xOiBwID0gIk5JQ0FNL0ZNIChCL0csIEQvSykiOyBicmVhazsKIAkJY2FzZSBNU1BfTU9ERV9GTV9OSUNBTTI6IHAgPSAiTklDQU0vRk0gKEkpIjsgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCmluZGV4IGIzNzZmY2QuLjgwMzg3ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJCXstOCwgLTgsIDQsIDYsIDc4LCAxMDd9LAogCQlNU1BfQ0FSUklFUigxMC43KSwgTVNQX0NBUlJJRVIoMTAuNyksCiAJCTB4MDBkMCwgMHgwNDgwLCAweDAwMjAsIDB4MzAwMAotCX0sIHsJLyogVGVycmVzdGlhbCBGTS1tb25vICsgRk0tc3RlcmVvICovCisJfSwgewkvKiBUZXJyZXN0cmlhbCBGTS1tb25vICsgRk0tc3RlcmVvICovCiAJCXszLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAogCQl7MywgMTgsIDI3LCA0OCwgNjYsIDcyfSwKIAkJTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS41KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYwppbmRleCAwMjlhNGJhLi5kNGZlN2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jCkBAIC00NzMsNyArNDczLDcgQEAKIC8qCiAgKiBDb252ZXJ0IFY0TDIgcm90YXRpb24gdG8gRFNTIHJvdGF0aW9uCiAgKglWNEwyIHVuZGVyc3RhbmQgMCwgOTAsIDE4MCwgMjcwLgotICoJQ29udmVydCB0byAwLCAxLCAyIGFuZCAzIHJlcHNlY3RpdmVseSBmb3IgRFNTCisgKglDb252ZXJ0IHRvIDAsIDEsIDIgYW5kIDMgcmVzcGVjdGl2ZWx5IGZvciBEU1MKICAqLwogc3RhdGljIGludCB2NGwyX3JvdF90b19kc3Nfcm90KGludCB2NGwyX3JvdGF0aW9uLAogCQkJZW51bSBkc3Nfcm90YXRpb24gKnJvdGF0aW9uLCBib29sIG1pcnJvcikKQEAgLTExNDIsNyArMTE0Miw3IEBACiB9CiAKIC8qCi0gKiBCdWZmZXIgcXVldWUgZnVudGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIHRoZSB2aWRlb2J1ZiBsYXllciB3aGVuIF9RQlVGCisgKiBCdWZmZXIgcXVldWUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgdmlkZW9idWYgbGF5ZXIgd2hlbiBfUUJVRgogICogaW9jdGwgaXMgY2FsbGVkLiBJdCBpcyB1c2VkIHRvIGVucXVldWUgYnVmZmVyLCB3aGljaCBpcyByZWFkeSB0byBiZQogICogZGlzcGxheWVkLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0bGliLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0bGliLmMKaW5kZXggYjk0MWM3Ni4uMmFhNmE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dGxpYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRsaWIuYwpAQCAtNTMsNyArNTMsNyBAQAogLyogR2l2ZW4gYSBuZXcgcmVuZGVyIHdpbmRvdyBpbiBuZXdfd2luLCBhZGp1c3QgdGhlIHdpbmRvdyB0byB0aGUKICAqIG5lYXJlc3Qgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24uICBUaGUgYWRqdXN0ZWQgd2luZG93IHBhcmFtZXRlcnMgYXJlCiAgKiByZXR1cm5lZCBpbiBuZXdfd2luLgotICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc2Z1bCwgb3IgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIHdpbmRvdyBpcworICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIC1FSU5WQUwgaWYgdGhlIHJlcXVlc3RlZCB3aW5kb3cgaXMKICAqIGltcG9zc2libGUgYW5kIGNhbm5vdCByZWFzb25hYmx5IGJlIGFkanVzdGVkLgogICovCiBpbnQgb21hcF92b3V0X3RyeV93aW5kb3coc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZidWYsCkBAIC0xMDEsNyArMTAxLDcgQEAKICAqIHdpbGwgYWxzbyBiZSBhZGp1c3RlZCBpZiBuZWNlc3NhcnkuICBQcmVmZXJlbmNlIGlzIGdpdmVuIHRvIGtlZXBpbmcgdGhlCiAgKiB0aGUgd2luZG93IGFzIGNsb3NlIHRvIHRoZSByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiBhcyBwb3NzaWJsZS4gIElmCiAgKiBzdWNjZXNzZnVsLCBuZXdfd2luLCB2b3V0LT53aW4sIGFuZCBjcm9wIGFyZSB1cGRhdGVkLgotICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc2Z1bCwgb3IgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIHByZXZpZXcgd2luZG93IGlzCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIHByZXZpZXcgd2luZG93IGlzCiAgKiBpbXBvc3NpYmxlIGFuZCBjYW5ub3QgcmVhc29uYWJseSBiZSBhZGp1c3RlZC4KICAqLwogaW50IG9tYXBfdm91dF9uZXdfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKmNyb3AsCkBAIC0xNTUsNyArMTU1LDcgQEAKICAqIHdpbmRvdyB3b3VsZCBmYWxsIG91dHNpZGUgdGhlIGRpc3BsYXkgYm91bmRhcmllcywgdGhlIGNyb3BwaW5nIHJlY3RhbmdsZQogICogd2lsbCBhbHNvIGJlIGFkanVzdGVkIHRvIG1haW50YWluIHRoZSByZXNjYWxpbmcgcmF0aW9zLiAgSWYgc3VjY2Vzc2Z1bCwgY3JvcAogICogYW5kIHdpbiBhcmUgdXBkYXRlZC4KLSAqIFJldHVybnMgemVybyBpZiBzdWNjZXNmdWwsIG9yIC1FSU5WQUwgaWYgdGhlIHJlcXVlc3RlZCBjcm9wcGluZyByZWN0YW5nbGUgaXMKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciAtRUlOVkFMIGlmIHRoZSByZXF1ZXN0ZWQgY3JvcHBpbmcgcmVjdGFuZ2xlIGlzCiAgKiBpbXBvc3NpYmxlIGFuZCBjYW5ub3QgcmVhc29uYWJseSBiZSBhZGp1c3RlZC4KICAqLwogaW50IG9tYXBfdm91dF9uZXdfY3JvcChzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAxX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMV9jYW1lcmEuYwppbmRleCBlYWIzMWNiLi41OTU0YjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAxX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDFfY2FtZXJhLmMKQEAgLTY4Nyw3ICs2ODcsNyBAQAogCQkgKiBJbiBDT05USUcgbW9kZSwgdGhlIGN1cnJlbnQgYnVmZmVyIHBhcmFtZXRlcnMgaGFkIGFscmVhZHkKIAkJICogYmVlbiBlbnRlcmVkIGludG8gdGhlIERNQSBwcm9ncmFtbWluZyByZWdpc3RlciBzZXQgd2hpbGUgdGhlCiAJCSAqIGJ1ZmZlciB3YXMgZmV0Y2hlZCB3aXRoIHByZXBhcmVfbmV4dF92YigpLCB0aGV5IG1heSBoYXZlIGFsc28KLQkJICogYmVlbiB0cmFuc2ZlcmVkIGludG8gdGhlIHJ1bnRpbWUgc2V0IGFuZCBhbHJlYWR5IGFjdGl2ZSBpZgorCQkgKiBiZWVuIHRyYW5zZmVycmVkIGludG8gdGhlIHJ1bnRpbWUgc2V0IGFuZCBhbHJlYWR5IGFjdGl2ZSBpZgogCQkgKiB0aGUgRE1BIHN0aWxsIHJ1bm5pbmcuCiAJCSAqLwogCX0gZWxzZSB7CkBAIC04MzUsNyArODM1LDcgQEAKIAkJCQkvKgogCQkJCSAqIElmIGV4YWN0bHkgMiBzZ2J1ZnMgZnJvbSB0aGUgbmV4dCBzZ2xpc3QgaGF2ZQogCQkJCSAqIGJlZW4gcHJvZ3JhbW1lZCBpbnRvIHRoZSBETUEgZW5naW5lICh0aGUKLQkJCQkgKiBmcmlzdCBvbmUgYWxyZWFkeSB0cmFuc2ZlcmVkIGludG8gdGhlIERNQQorCQkJCSAqIGZpcnN0IG9uZSBhbHJlYWR5IHRyYW5zZmVycmVkIGludG8gdGhlIERNQQogCQkJCSAqIHJ1bnRpbWUgcmVnaXN0ZXIgc2V0LCB0aGUgc2Vjb25kIG9uZSBzdGlsbAogCQkJCSAqIGluIHRoZSBwcm9ncmFtbWluZyBzZXQpLCB0aGVuIHdlIGFyZSBpbiBzeW5jLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKaW5kZXggZGUyZGVjNS4uNDcyYTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCkBAIC0xMjk1LDcgKzEyOTUsNyBAQAogCQljbGsgfD0gSVNQQ1RSTF9SU1pfQ0xLX0VOOwogCiAJLyogTk9URTogRm9yIENDREMgJiBQcmV2aWV3IHN1Ym1vZHVsZXMsIHdlIG5lZWQgdG8gYWZmZWN0IGludGVybmFsCi0JICogICAgICAgUkFNIGFzd2VsbC4KKwkgKiAgICAgICBSQU0gYXMgd2VsbC4KIAkgKi8KIAlpZiAoaXNwLT5zdWJjbGtfcmVzb3VyY2VzICYgT01BUDNfSVNQX1NVQkNMS19DQ0RDKQogCQljbGsgfD0gSVNQQ1RSTF9DQ0RDX0NMS19FTiB8IElTUENUUkxfQ0NEQ19SQU1fRU47CkBAIC0xNDQzLDcgKzE0NDMsNyBAQAogICogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIElTUC4gSWYgdGhlIGZpcnN0IHJlZmVyZW5jZSBpcyB0YWtlbiwKICAqIGVuYWJsZSBjbG9ja3MgYW5kIHBvd2VyLXVwIGFsbCBzdWJtb2R1bGVzLgogICoKLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIElTUCBkZXZpY2Ugc3RydWN0dXJlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VyZWQuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBJU1AgZGV2aWNlIHN0cnVjdHVyZSwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RydWN0IGlzcF9kZXZpY2UgKm9tYXAzaXNwX2dldChzdHJ1Y3QgaXNwX2RldmljZSAqaXNwKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjZGMuaAppbmRleCBkNDAzYWY1Li40ODNhMTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjZGMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjZGMuaApAQCAtMTUwLDcgKzE1MCw3IEBACiAgKiBAaW5wdXQ6IEFjdGl2ZSBpbnB1dAogICogQG91dHB1dDogQWN0aXZlIG91dHB1dHMKICAqIEB2aWRlb19vdXQ6IE91dHB1dCB2aWRlbyBub2RlCi0gKiBAZXJyb3I6IEEgaGFyZHdhcmUgZXJyb3Igb2NjdXJlZCBkdXJpbmcgY2FwdHVyZQorICogQGVycm9yOiBBIGhhcmR3YXJlIGVycm9yIG9jY3VycmVkIGR1cmluZyBjYXB0dXJlCiAgKiBAYWxhdzogQS1sYXcgY29tcHJlc3Npb24gZW5hYmxlZCAoMSkgb3IgZGlzYWJsZWQgKDApCiAgKiBAbHBmOiBMb3cgcGFzcyBmaWx0ZXIgZW5hYmxlZCAoMSkgb3IgZGlzYWJsZWQgKDApCiAgKiBAb2JjbGFtcDogT3B0aWNhbC1ibGFjayBjbGFtcCBlbmFibGVkICgxKSBvciBkaXNhYmxlZCAoMCkKQEAgLTE2Myw3ICsxNjMsNyBAQAogICogQHNoYWRvd191cGRhdGU6IENvbnRyb2xzIHVwZGF0ZSBpbiBwcm9ncmVzcyBieSB1c2Vyc3BhY2UKICAqIEBzeW5jaWY6IEludGVyZmFjZSBzeW5jaHJvbml6YXRpb24gY29uZmlndXJhdGlvbgogICogQHZwY2ZnOiBWaWRlbyBwb3J0IGNvbmZpZ3VyYXRpb24KLSAqIEB1bmRlcnJ1bjogQSBidWZmZXIgdW5kZXJydW4gb2NjdXJlZCBhbmQgYSBuZXcgYnVmZmVyIGhhcyBiZWVuIHF1ZXVlZAorICogQHVuZGVycnVuOiBBIGJ1ZmZlciB1bmRlcnJ1biBvY2N1cnJlZCBhbmQgYSBuZXcgYnVmZmVyIGhhcyBiZWVuIHF1ZXVlZAogICogQHN0YXRlOiBTdHJlYW1pbmcgc3RhdGUKICAqIEBsb2NrOiBTZXJpYWxpemVzIHNoYWRvd191cGRhdGUgd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcgogICogQHdhaXQ6IFdhaXQgcXVldWUgdXNlZCB0byBzdG9wIHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY3AyLmMKaW5kZXggMGVmZWYyZS4uMGUxNmNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY3AyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY3AyLmMKQEAgLTc3Miw3ICs3NzIsNyBAQAogICogQHNkICAgIDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUKICAqIEBmaCAgICA6IFY0TDIgc3ViZGV2IGZpbGUgaGFuZGxlCiAgKiBAZm10ICAgOiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2IGZvcm1hdCBzdHJ1Y3R1cmUKLSAqIHJldHVybiAtRUlOVkFMIG9yIHplcm8gb24gc3VjZXNzCisgKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBjY3AyX2dldF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY3NpMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3Bjc2kyLmMKaW5kZXggZmI1MDNmMy4uNjkxNjFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3Bjc2kyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3Bjc2kyLmMKQEAgLTk2OSw3ICs5NjksNyBAQAogICogQHNkIDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUKICAqIEBmaCA6IFY0TDIgc3ViZGV2IGZpbGUgaGFuZGxlCiAgKiBAZm10OiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2IGZvcm1hdCBzdHJ1Y3R1cmUKLSAqIHJldHVybiAtRUlOVkFMIG9yIHplcm8gb24gc3VjZXNzCisgKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBjc2kyX2dldF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKIAkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BwcmV2aWV3LmMKaW5kZXggNmFmMGYyMy4uYWJhNTM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BwcmV2aWV3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BwcmV2aWV3LmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJpc3ByZWcuaCIKICNpbmNsdWRlICJpc3BwcmV2aWV3LmgiCiAKLS8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbG91cmVzY2VudCBMaWdodCBmb3IgUkdCdG9SR0IgQmxlbmRpbmcgKi8KKy8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbHVvcmVzY2VudCBMaWdodCBmb3IgUkdCdG9SR0IgQmxlbmRpbmcgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcDNpc3BfcHJldl9yZ2J0b3JnYiBmbHJfcmdiMnJnYiA9IHsKIAl7CS8qIFJHQi1SR0IgTWF0cml4ICovCiAJCXsweDAxRTIsIDB4MEYzMCwgMHgwRkVFfSwKQEAgLTQ0LDcgKzQ0LDcgQEAKIAl7MHgwMDAwLCAweDAwMDAsIDB4MDAwMH0KIH07CiAKLS8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbG91cmVzY2VudCBMaWdodCBmb3IgUkdCIHRvIFlVViBDb252ZXJzaW9uKi8KKy8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbHVvcmVzY2VudCBMaWdodCBmb3IgUkdCIHRvIFlVViBDb252ZXJzaW9uKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcDNpc3BfcHJldl9jc2MgZmxyX3ByZXZfY3NjID0gewogCXsJLyogQ1NDIENvZWYgTWF0cml4ICovCiAJCXs2NiwgMTI5LCAyNX0sCkBAIC01NCwyMiArNTQsMjIgQEAKIAl7MHgwLCAweDAsIDB4MH0KIH07CiAKLS8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbG91cmVzY2VudCBMaWdodCBmb3IgQ0ZBIEdyYWRpZW50Ki8KKy8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbHVvcmVzY2VudCBMaWdodCBmb3IgQ0ZBIEdyYWRpZW50Ki8KICNkZWZpbmUgRkxSX0NGQV9HUkFEVEhSU19IT1JaCTB4MjgKICNkZWZpbmUgRkxSX0NGQV9HUkFEVEhSU19WRVJUCTB4MjgKIAotLyogRGVmYXVsdCB2YWx1ZXMgaW4gT2ZmaWNlIEZsb3VyZXNjZW50IExpZ2h0IGZvciBDaHJvbWEgU3VwcHJlc3Npb24qLworLyogRGVmYXVsdCB2YWx1ZXMgaW4gT2ZmaWNlIEZsdW9yZXNjZW50IExpZ2h0IGZvciBDaHJvbWEgU3VwcHJlc3Npb24qLwogI2RlZmluZSBGTFJfQ1NVUF9HQUlOCQkweDBECiAjZGVmaW5lIEZMUl9DU1VQX1RIUkVTCQkweEVCCiAKLS8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbG91cmVzY2VudCBMaWdodCBmb3IgTm9pc2UgRmlsdGVyKi8KKy8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbHVvcmVzY2VudCBMaWdodCBmb3IgTm9pc2UgRmlsdGVyKi8KICNkZWZpbmUgRkxSX05GX1NUUkdUSAkJMHgwMwogCiAvKiBEZWZhdWx0IHZhbHVlcyBmb3IgV2hpdGUgQmFsYW5jZSAqLwogI2RlZmluZSBGTFJfV0JBTF9ER0FJTgkJMHgxMDAKICNkZWZpbmUgRkxSX1dCQUxfQ09FRgkJMHgyMAogCi0vKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmxvdXJlc2NlbnQgTGlnaHQgZm9yIEJsYWNrIEFkanVzdG1lbnQqLworLyogRGVmYXVsdCB2YWx1ZXMgaW4gT2ZmaWNlIEZsdW9yZXNjZW50IExpZ2h0IGZvciBCbGFjayBBZGp1c3RtZW50Ki8KICNkZWZpbmUgRkxSX0JMS0FESl9CTFVFCQkweDAKICNkZWZpbmUgRkxSX0JMS0FESl9HUkVFTgkweDAKICNkZWZpbmUgRkxSX0JMS0FESl9SRUQJCTB4MApAQCAtMTM3LDcgKzEzNyw3IEBACiAgKiBAZW5hYmxlOiAxIC0gRW5hYmxlLCAwIC0gRGlzYWJsZQogICoKICAqIE5PVEU6IFBSVl9XU0RSX0FERFIgYW5kIFBSVl9XQUREX09GRlNFVCBtdXN0IGJlIHNldCBhbHNvCi0gKiBUaGUgcHJvY2Nlc3MgaXMgYXBwbGllZCBmb3IgZWFjaCBjYXB0dXJlZCBmcmFtZS4KKyAqIFRoZSBwcm9jZXNzIGlzIGFwcGxpZWQgZm9yIGVhY2ggY2FwdHVyZWQgZnJhbWUuCiAgKi8KIHN0YXRpYyB2b2lkCiBwcmV2aWV3X2VuYWJsZV9kcmtmcmFtZV9jYXB0dXJlKHN0cnVjdCBpc3BfcHJldl9kZXZpY2UgKnByZXYsIHU4IGVuYWJsZSkKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICogQGVuYWJsZTogMSAtIEFjcXVpcmVzIG1lbW9yeSBiYW5kd2lkdGggc2luY2UgdGhlIHBpeGVscyBpbiBlYWNoIGZyYW1lIGlzCiAgKiAgICAgICAgICBzdWJ0cmFjdGVkIHdpdGggdGhlIHBpeGVscyBpbiB0aGUgY3VycmVudCBmcmFtZS4KICAqCi0gKiBUaGUgcHJvY2Nlc3MgaXMgYXBwbGllZCBmb3IgZWFjaCBjYXB0dXJlZCBmcmFtZS4KKyAqIFRoZSBwcm9jZXNzIGlzIGFwcGxpZWQgZm9yIGVhY2ggY2FwdHVyZWQgZnJhbWUuCiAgKi8KIHN0YXRpYyB2b2lkCiBwcmV2aWV3X2VuYWJsZV9kcmtmcmFtZShzdHJ1Y3QgaXNwX3ByZXZfZGV2aWNlICpwcmV2LCB1OCBlbmFibGUpCkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogICogcHJldmlld19zZXRfc3RyZWFtIC0gRW5hYmxlL0Rpc2FibGUgc3RyZWFtaW5nIG9uIHByZXZpZXcgc3ViZGV2CiAgKiBAc2QgICAgOiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2IHN0cnVjdHVyZQogICogQGVuYWJsZTogMSA9PSBFbmFibGUsIDAgPT0gRGlzYWJsZQotICogcmV0dXJuIC1FSU5WQUwgb3IgemVybyBvbiBzdWNlc3MKKyAqIHJldHVybiAtRUlOVkFMIG9yIHplcm8gb24gc3VjY2VzcwogICovCiBzdGF0aWMgaW50IHByZXZpZXdfc2V0X3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewpAQCAtMTc4MCw3ICsxNzgwLDcgQEAKICAqIEBzZCA6IHBvaW50ZXIgdG8gdjRsMiBzdWJkZXYgc3RydWN0dXJlCiAgKiBAZmggOiBWNEwyIHN1YmRldiBmaWxlIGhhbmRsZQogICogQGZtdDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBmb3JtYXQgc3RydWN0dXJlCi0gKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2VzcworICogcmV0dXJuIC1FSU5WQUwgb3IgemVybyBvbiBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgcHJldmlld19nZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5oCmluZGV4IGYyZDYzY2EuLmZhOTQzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5oCkBAIC0xNjMsNyArMTYzLDcgQEAKICAqIEBvdXRwdXQ6IEJpdG1hc2sgb2YgdGhlIGFjdGl2ZSBvdXRwdXQKICAqIEB2aWRlb19pbjogSW5wdXQgdmlkZW8gZW50aXR5CiAgKiBAdmlkZW9fb3V0OiBPdXRwdXQgdmlkZW8gZW50aXR5Ci0gKiBAZXJyb3I6IEEgaGFyZHdhcmUgZXJyb3Igb2NjdXJlZCBkdXJpbmcgY2FwdHVyZQorICogQGVycm9yOiBBIGhhcmR3YXJlIGVycm9yIG9jY3VycmVkIGR1cmluZyBjYXB0dXJlCiAgKiBAcGFyYW1zOiBNb2R1bGUgY29uZmlndXJhdGlvbiBkYXRhCiAgKiBAc2hhZG93X3VwZGF0ZTogSWYgc2V0LCB1cGRhdGUgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyZWQgaW4gdGhlIG5leHQgaW50ZXJydXB0CiAgKiBAdW5kZXJydW46IFdoZXRoZXIgdGhlIHByZXZpZXcgZW50aXR5IGhhcyBxdWV1ZWQgYnVmZmVycyBvbiB0aGUgb3V0cHV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHF1ZXVlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHF1ZXVlLmgKaW5kZXggMjUxZGUzZS4uOTJjNWExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BxdWV1ZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcXVldWUuaApAQCAtNDYsOSArNDYsOSBAQAogICoJZGV2aWNlIHlldC4KICAqIEBJU1BfQlVGX1NUQVRFX0FDVElWRTogVGhlIGJ1ZmZlciBpcyBpbiB1c2UgZm9yIGFuIGFjdGl2ZSB2aWRlbyB0cmFuc2Zlci4KICAqIEBJU1BfQlVGX1NUQVRFX0VSUk9SOiBUaGUgZGV2aWNlIGlzIGRvbmUgd2l0aCB0aGUgYnVmZmVyIGFuZCBhbiBlcnJvcgotICoJb2NjdXJlZC4gRm9yIGNhcHR1cmUgZGV2aWNlIHRoZSBidWZmZXIgbGlrZWx5IGNvbnRhaW5zIGNvcnJ1cHRlZCBkYXRhIG9yCisgKglvY2N1cnJlZC4gRm9yIGNhcHR1cmUgZGV2aWNlIHRoZSBidWZmZXIgbGlrZWx5IGNvbnRhaW5zIGNvcnJ1cHRlZCBkYXRhIG9yCiAgKglubyBkYXRhIGF0IGFsbC4KLSAqIEBJU1BfQlVGX1NUQVRFX0RPTkU6IFRoZSBkZXZpY2UgaXMgZG9uZSB3aXRoIHRoZSBidWZmZXIgYW5kIG5vIGVycm9yIG9jY3VyZWQuCisgKiBASVNQX0JVRl9TVEFURV9ET05FOiBUaGUgZGV2aWNlIGlzIGRvbmUgd2l0aCB0aGUgYnVmZmVyIGFuZCBubyBlcnJvciBvY2N1cnJlZC4KICAqCUZvciBjYXB0dXJlIGRldmljZXMgdGhlIGJ1ZmZlciBjb250YWlucyB2YWxpZCBkYXRhLgogICovCiBlbnVtIGlzcF92aWRlb19idWZmZXJfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3ByZXNpemVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHJlc2l6ZXIuYwppbmRleCA3MDg5N2NlLi4wYmIwZjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHJlc2l6ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHJlc2l6ZXIuYwpAQCAtNzgyLDcgKzc4Miw3IEBACiAgKiByYXRpbyB3aWxsIHRodXMgcmVzdWx0IGluIGEgcmVzaXppbmcgZmFjdG9yIHNsaWdodGx5IGxhcmdlciB0aGFuIHRoZQogICogcmVxdWVzdGVkIHZhbHVlLgogICoKLSAqIFRvIGFjY29tb2RhdGUgdGhhdCwgYW5kIG1ha2Ugc3VyZSB0aGUgVFJNIGVxdWF0aW9ucyBhcmUgc2F0aXNmaWVkIGV4YWN0bHksIHdlCisgKiBUbyBhY2NvbW1vZGF0ZSB0aGF0LCBhbmQgbWFrZSBzdXJlIHRoZSBUUk0gZXF1YXRpb25zIGFyZSBzYXRpc2ZpZWQgZXhhY3RseSwgd2UKICAqIGNvbXB1dGUgdGhlIGlucHV0IGNyb3AgcmVjdGFuZ2xlIGFzIHRoZSBsYXN0IHN0ZXAuCiAgKgogICogQXMgaWYgdGhlIHNpdHVhdGlvbiB3YXNuJ3QgY29tcGxleCBlbm91Z2gsIHRoZSBtYXhpbXVtIG91dHB1dCB3aWR0aCBkZXBlbmRzCkBAIC0xNDMxLDcgKzE0MzEsNyBAQAogICogQHNkICAgIDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUKICAqIEBmaCAgICA6IFY0TDIgc3ViZGV2IGZpbGUgaGFuZGxlCiAgKiBAZm10ICAgOiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2IGZvcm1hdCBzdHJ1Y3R1cmUKLSAqIHJldHVybiAtRUlOVkFMIG9yIHplcm8gb24gc3VjZXNzCisgKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCByZXNpemVyX2dldF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uYwppbmRleCA2ZTE4Y2VlLi45Y2Q4ZjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5jCkBAIC01NzQsMTIgKzU3NCwxMiBAQAogLyoKICAqIG9tYXAzaXNwX3ZpZGVvX2J1ZmZlcl9uZXh0IC0gQ29tcGxldGUgdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCByZXR1cm4gdGhlIG5leHQKICAqIEB2aWRlbzogSVNQIHZpZGVvIG9iamVjdAotICogQGVycm9yOiBXaGV0aGVyIGFuIGVycm9yIG9jY3VyZWQgZHVyaW5nIGNhcHR1cmUKKyAqIEBlcnJvcjogV2hldGhlciBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2FwdHVyZQogICoKICAqIFJlbW92ZSB0aGUgY3VycmVudCB2aWRlbyBidWZmZXIgZnJvbSB0aGUgRE1BIHF1ZXVlIGFuZCBmaWxsIGl0cyB0aW1lc3RhbXAsCiAgKiBmaWVsZCBjb3VudCBhbmQgc3RhdGUgZmllbGRzIGJlZm9yZSB3YWtpbmcgdXAgaXRzIGNvbXBsZXRpb24gaGFuZGxlci4KICAqCi0gKiBUaGUgYnVmZmVyIHN0YXRlIGlzIHNldCB0byBWSURFT0JVRl9ET05FIGlmIG5vIGVycm9yIG9jY3VyZWQgKEBlcnJvciBpcyAwKQorICogVGhlIGJ1ZmZlciBzdGF0ZSBpcyBzZXQgdG8gVklERU9CVUZfRE9ORSBpZiBubyBlcnJvciBvY2N1cnJlZCAoQGVycm9yIGlzIDApCiAgKiBvciBWSURFT0JVRl9FUlJPUiBvdGhlcndpc2UgKEBlcnJvciBpcyBub24temVybykuCiAgKgogICogVGhlIERNQSBxdWV1ZSBpcyBleHBlY3RlZCB0byBjb250YWluIGF0IGxlYXN0IG9uZSBidWZmZXIuCkBAIC02NTgsNyArNjU4LDcgQEAKIC8qCiAgKiBvbWFwM2lzcF92aWRlb19yZXN1bWUgLSBQZXJmb3JtIHJlc3VtZSBvcGVyYXRpb24gb24gdGhlIGJ1ZmZlcnMKICAqIEB2aWRlbzogSVNQIHZpZGVvIG9iamVjdAotICogQGNvbnRpbnVvdXM6IFBpcGVsaW5lIGlzIGluIHNpbmdsZSBzaG90IG1vZGUgaWYgMCBvciBjb250aW5vdXMgbW9kZSBvdGhlcndpc2UKKyAqIEBjb250aW51b3VzOiBQaXBlbGluZSBpcyBpbiBzaW5nbGUgc2hvdCBtb2RlIGlmIDAgb3IgY29udGludW91cyBtb2RlIG90aGVyd2lzZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBzdXNwZW5kL3Jlc3VtZSBzY2VuYXJpby4gSXQKICAqIHJlcXVlc3RzIHZpZGVvIHF1ZXVlIGxheWVyIHRvIGRpc2NhcmQgYnVmZmVycyBtYXJrZWQgYXMgRE9ORSBpZiBpdCdzIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NjY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjY2NTAuYwppbmRleCBmZThlM2ViLi40NTZkOWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NjY1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y2NjUwLmMKQEAgLTEwMzgsNyArMTAzOCw3IEBACiAJcmV0ID0gb3Y2NjUwX3JlZ19ybXcoY2xpZW50LCBSRUdfQ09NQSwgQ09NQV9SRVNFVCwgMCk7CiAJaWYgKHJldCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBlbnRlcmluZyBzb2Z0IHJlc2V0IVxuIik7CisJCQkiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZW50ZXJpbmcgc29mdCByZXNldCFcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292OTY0MC5jCmluZGV4IDUzZDg4YTIuLjUxNzNhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJcmV0ID0gb3Y5NjQwX3JlZ193cml0ZShjbGllbnQsIE9WOTY0MF9DT003LCBPVjk2NDBfQ09NN19TQ0NCX1JFU0VUKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGVudGVyaW5nIHNvZnQgcmVzZXQhXG4iKTsKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBlbnRlcmluZyBzb2Z0IHJlc2V0IVxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYwppbmRleCBhZWVkMWMyLi45NTE1ZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYwpAQCAtMzIsNyArMzIsNyBAQAogCiAgICBSZWFkIGFuZCBhbmFseXplIGRhdGEgaW4gdGhlIGVlcHJvbS4gIFVzZSB0dmVlcHJvbSB0byBmaWd1cmUgb3V0CiAgICB0aGUgcGFja2V0IHN0cnVjdHVyZSwgc2luY2UgdGhpcyBpcyBhbm90aGVyIEhhdXBwYXVnZSBkZXZpY2UgYW5kCi0gICBpbnRlcm5hbGx5IGl0IGhhcyBhIGZhbWlseSByZXNlbWJsZW5jZSB0byBpdnR2LXR5cGUgZGV2aWNlcworICAgaW50ZXJuYWxseSBpdCBoYXMgYSBmYW1pbHkgcmVzZW1ibGFuY2UgdG8gaXZ0di10eXBlIGRldmljZXMKIAogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAppbmRleCA1MWQzMDA5Li5kNzc1M2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaApAQCAtNzUsNyArNzUsNyBAQAogICogIChidXQgaXQgbWlnaHQgc3RpbGwgb24gdGhlIGJ1cykuICBJbiB0aGlzIHN0YXRlIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4KICAqICBkbzsgaXQgbXVzdCBiZSByZXBsdWdnZWQgaW4gb3JkZXIgdG8gcmVjb3Zlci4KICAqCi0gKiAgQ09MRCAtIERldmljZSBpcyBpbiBhbiB1bnVzdWFibGUgc3RhdGUsIG5lZWRzIG1pY3JvY29udHJvbGxlciBmaXJtd2FyZS4KKyAqICBDT0xEIC0gRGV2aWNlIGlzIGluIGFuIHVudXNhYmxlIHN0YXRlLCBuZWVkcyBtaWNyb2NvbnRyb2xsZXIgZmlybXdhcmUuCiAgKgogICogIFdBUk0gLSBXZSBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGV2aWNlIGFuZCB0aGUgcHJvcGVyCiAgKiAgbWljcm9jb250cm9sbGVyIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGJ1dCBvdGhlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggMDI2ODY3Ny4uYzFlZTA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTcxNCw3ICs3MTQsNyBAQAogICoKICAqIFRoZSBETUEgY2hhaW5pbmcgaXMgZG9uZSB3aXRoIERNQSBydW5uaW5nLiBUaGlzIG1lYW5zIGEgdGlueSB0ZW1wb3JhbCB3aW5kb3cKICAqIHJlbWFpbnMsIHdoZXJlIGEgYnVmZmVyIGlzIHF1ZXVlZCBvbiB0aGUgY2hhaW4sIHdoaWxlIHRoZSBjaGFpbiBpcyBhbHJlYWR5Ci0gKiBzdG9wcGVkLiBUaGlzIG1lYW5zIHRoZSB0YWlsZWQgYnVmZmVyIHdvdWxkIG5ldmVyIGJlIHRyYW5zZmVyZWQgYnkgRE1BLgorICogc3RvcHBlZC4gVGhpcyBtZWFucyB0aGUgdGFpbGVkIGJ1ZmZlciB3b3VsZCBuZXZlciBiZSB0cmFuc2ZlcnJlZCBieSBETUEuCiAgKiBUaGlzIGZ1bmN0aW9uIHJlc3RhcnRzIHRoZSBjYXB0dXJlIGZvciB0aGlzIGNvcm5lciBjYXNlLCB3aGVyZSA6CiAgKiAgLSBEQURSKCkgPT0gREFERFJfU1RPUAogICogIC0gYSB2aWRlb2J1ZmZlciBpcyBxdWV1ZWQgb24gdGhlIHBjZGV2LT5jYXB0dXJlIGxpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1yZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1yZWcuYwppbmRleCA0ZDkyOWEzLi40ODkzYjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtcmVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLXJlZy5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIAkJLyogb25lIHNob3QgbW9kZSAqLwogCQljZmcgfD0gUzVQX0NJSU1HQ1BUX0NQVF9GUkVOX0VOQUJMRSB8IFM1UF9DSUlNR0NQVF9JTUdDUFRFTjsKIAl9IGVsc2UgewotCQkvKiBDb250aW5vdXMgZnJhbWUgY2FwdHVyZSBtb2RlIChmcmVlcnVuKS4gKi8KKwkJLyogQ29udGludW91cyBmcmFtZSBjYXB0dXJlIG1vZGUgKGZyZWVydW4pLiAqLwogCQljZmcgJj0gfihTNVBfQ0lJTUdDUFRfQ1BUX0ZSRU5fRU5BQkxFIHwKIAkJCSBTNVBfQ0lJTUdDUFRfQ1BUX0ZSTU9EX0NOVCk7CiAJCWNmZyB8PSBTNVBfQ0lJTUdDUFRfSU1HQ1BURU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA2MWM2MDA3Li41MGYxYmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTc0NjAsNyArNzQ2MCw3IEBACiAJCQkJZGV2LT50dW5lcl90eXBlID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzM7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgQ2FudCBkZXRlcm1pbmUgdHVuZXIgdHlwZSAleCBmcm9tIEVFUFJPTVxuIiwgZGV2LT5uYW1lLCB0dW5lcl90KTsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzIENhbid0IGRldGVybWluZSB0dW5lciB0eXBlICV4IGZyb20gRUVQUk9NXG4iLCBkZXYtPm5hbWUsIHR1bmVyX3QpOwogCQkJfQogCQl9IGVsc2UgaWYgKChkYXRhWzFdICE9IDApICYmIChkYXRhWzFdICE9IDB4ZmYpKSB7CiAJCQkvKiBuZXcgY29uZmlnIHN0cnVjdHVyZSAqLwpAQCAtNzQ4MCw3ICs3NDgwLDcgQEAKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgQm9hcmQgaGFzIERWQi1UXG4iLCBkZXYtPm5hbWUpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIENhbnQgZGV0ZXJtaW5lIHR1bmVyIHR5cGUgJXggZnJvbSBFRVBST01cbiIsIGRldi0+bmFtZSwgdHVuZXJfdCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBDYW4ndCBkZXRlcm1pbmUgdHVuZXIgdHlwZSAleCBmcm9tIEVFUFJPTVxuIiwgZGV2LT5uYW1lLCB0dW5lcl90KTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXMgdW5leHBlY3RlZCBjb25maWcgc3RydWN0dXJlXG4iLCBkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwppbmRleCA2YTRjMjE3Li42MmZhYzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwpAQCAtMjU3LDcgKzI1Nyw3IEBACiB9CiAKIC8qIFdhaXQgZm9yIGEgc2lnbmFsIGV2ZW50LCB3aXRob3V0IGhvbGRpbmcgYSBtdXRleC4gRWl0aGVyIHJldHVybiBUSU1FT1VUIGlmCi0gKiB0aGUgZXZlbnQgbmV2ZXIgb2NjdXJlZCwgb3IgU0FBX09LIGlmIGl0IHdhcyBzaWduYWxlZCBkdXJpbmcgdGhlIHdhaXQuCisgKiB0aGUgZXZlbnQgbmV2ZXIgb2NjdXJyZWQsIG9yIFNBQV9PSyBpZiBpdCB3YXMgc2lnbmFsZWQgZHVyaW5nIHRoZSB3YWl0LgogICovCiBpbnQgc2FhNzE2NF9jbWRfd2FpdChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggc2Vxbm8pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1mdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZncuYwppbmRleCBiMzY5MzAwLi5hMjY2YmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1mdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWZ3LmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICIgLlJlc2VydmVkID0gMHgleFxuIiwgaGRyLT5yZXNlcnZlZCk7CiAJCXByaW50ayhLRVJOX0lORk8gIiAuVmVyc2lvbiA9IDB4JXhcbiIsIGhkci0+dmVyc2lvbik7CiAKLQkJLyogUmV0cmVpdmUgYm9vdGxvYWRlciBpZiByZXFkICovCisJCS8qIFJldHJpZXZlIGJvb3Rsb2FkZXIgaWYgcmVxZCAqLwogCQlpZiAoKGhkci0+ZmlybXdhcmVzaXplID09IDApICYmIChoZHItPmJzbHNpemUgPT0gMCkpCiAJCQkvKiBTZWNvbmQgYm9vdGxvYWRlciBpbiB0aGUgZmlybXdhcmUgZmlsZSAqLwogCQkJZmlsZXNpemUgPSBoZHItPnJlc2VydmVkICogMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC10eXBlcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdHlwZXMuaAppbmRleCBkZjFkMjk5Li4xZDIxNDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC10eXBlcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXR5cGVzLmgKQEAgLTQxMiw3ICs0MTIsNyBAQAogCXU4CVN0YXJ0TGluZTsgLyogTlRTQyBTdGFydCA9IDEwICovCiAJdTgJRW5kTGluZTsgLyogTlRTQyA9IDIxICovCiAJdTgJRmllbGRSYXRlOyAvKiA2MCBmb3IgTlRTQyAqLwotCXU4CWJOdW1MaW5lczsgLyogVW5zZWQgLSBzY2hlZHVsZWQgZm9yIHJlbW92YWwgKi8KKwl1OAliTnVtTGluZXM7IC8qIFVudXNlZCAtIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHRtQ29tUmVzUHJvYmVDb21taXQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCmluZGV4IGNlNTZhMWMuLjBlMDdjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKQEAgLTE4MTAsNyArMTgxMCw3IEBACiAJCS8qCiAJCSAgIFdlIHdpbGwgbm90IHJlbGVhc2UgdGhlICJvcGVuX211dGV4IiBsb2NrLCBzbyB0aGF0IG9ubHkgb25lCiAJCSAgIHByb2Nlc3MgY2FuIGJlIGluIHRoZSB3YWl0IHF1ZXVlIGJlbG93LiBUaGlzIHdheSB0aGUgcHJvY2VzcwotCQkgICB3aWxsIGJlIHNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2ssIHdpdGhvdXQgbG9vc2luZyBpdHMKKwkJICAgd2lsbCBiZSBzbGVlcGluZyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLCB3aXRob3V0IGxvc2luZyBpdHMKIAkJICAgcHJpb3JpdHkgYWZ0ZXIgYW55IHdha2VfdXAoKS4KIAkJKi8KIAkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZShjYW0tPndhaXRfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKaW5kZXggN2YzODU0OS4uMzY3OTk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKQEAgLTE4MCw3ICsxODAsNyBAQAogCSAgIEl0IHNob3VsZCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHNlbnNvciBvbmx5LCBidXQgbWF5IGFsc28KIAkgICBjb25maWd1cmUgcGFydCBvZiB0aGUgU045QzFYWCBjaGlwIGlmIG5lY2Vzc2FyeS4gWW91IGRvbid0IG5lZWQgdG8KIAkgICBzZXR1cCBwaWN0dXJlIHNldHRpbmdzIGxpa2UgYnJpZ2h0bmVzcywgY29udHJhc3QsIGV0Yy4uIGhlcmUsIGlmCi0JICAgdGhlIGNvcnJpc3BvbmRpbmcgY29udHJvbHMgYXJlIGltcGxlbWVudGVkIChzZWUgYmVsb3cpLCBzaW5jZQorCSAgIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRyb2xzIGFyZSBpbXBsZW1lbnRlZCAoc2VlIGJlbG93KSwgc2luY2UKIAkgICB0aGV5IGFyZSBhZGp1c3RlZCBpbiB0aGUgY29yZSBkcml2ZXIgYnkgY2FsbGluZyB0aGUgc2V0X2N0cmwoKQogCSAgIG1ldGhvZCBhZnRlciBpbml0KCksIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcwogCSAgIHNwZWNpZmllZCBpbiB0aGUgdjRsMl9xdWVyeWN0cmwgbGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RjbTgyNXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCmluZGV4IDU0NjgxYTUuLmI2ZWUxYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCkBAIC00OTMsNyArNDkzLDcgQEAKIAlpbnQgdmFsLCByOwogCXN0cnVjdCB2Y29udHJvbCAqbHZjOwogCi0JLyogZXhwb3N1cmUgdGltZSBpcyBzcGVjaWFsLCBzcHJlYWQgYWNjcm9zcyAyIHJlZ2lzdGVycyAqLworCS8qIGV4cG9zdXJlIHRpbWUgaXMgc3BlY2lhbCwgc3ByZWFkIGFjcm9zcyAyIHJlZ2lzdGVycyAqLwogCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfRVhQT1NVUkUpIHsKIAkJaW50IHZhbF9sb3dlciwgdmFsX3VwcGVyOwogCkBAIC01MzgsNyArNTM4LDcgQEAKIAlzdHJ1Y3QgdmNvbnRyb2wgKmx2YzsKIAlpbnQgdmFsID0gdmMtPnZhbHVlOwogCi0JLyogZXhwb3N1cmUgdGltZSBpcyBzcGVjaWFsLCBzcHJlYWQgYWNjcm9zcyAyIHJlZ2lzdGVycyAqLworCS8qIGV4cG9zdXJlIHRpbWUgaXMgc3BlY2lhbCwgc3ByZWFkIGFjcm9zcyAyIHJlZ2lzdGVycyAqLwogCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfRVhQT1NVUkUpIHsKIAkJaW50IHZhbF9sb3dlciwgdmFsX3VwcGVyOwogCQl2YWxfbG93ZXIgPSB2YWwgJiBUQ004MjVYX01BU0soVENNODI1WF9FU1JTUERfTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCmluZGV4IGEyNWUyYjUuLmM0NmEzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCkBAIC0xMDU4LDExICsxMDU4LDExIEBACiAjZGVmaW5lIFREQTk4NzVfTVZSICAgICAgICAgMHgxYiAgLyogTWFpbiB2b2x1bWUgZHJvaXRlICovCiAjZGVmaW5lIFREQTk4NzVfTUJBICAgICAgICAgMHgxZCAgLyogTWFpbiBCYXNzZSAqLwogI2RlZmluZSBUREE5ODc1X01UUiAgICAgICAgIDB4MWUgIC8qIE1haW4gdHJlYmxlICovCi0jZGVmaW5lIFREQTk4NzVfQUNTICAgICAgICAgMHgxZiAgLyogQXV4aWxhcnkgY2hhbm5lbCBzZWxlY3QgKEZNKSAwYjAwMDAwMDAqLwotI2RlZmluZSBUREE5ODc1X0FWTCAgICAgICAgIDB4MjAgIC8qIEF1eGlsYXJ5IHZvbHVtZSBnYXVjaGUgKi8KLSNkZWZpbmUgVERBOTg3NV9BVlIgICAgICAgICAweDIxICAvKiBBdXhpbGFyeSB2b2x1bWUgZHJvaXRlICovCi0jZGVmaW5lIFREQTk4NzVfQUJBICAgICAgICAgMHgyMiAgLyogQXV4aWxhcnkgQmFzc2UgKi8KLSNkZWZpbmUgVERBOTg3NV9BVFIgICAgICAgICAweDIzICAvKiBBdXhpbGFyeSB0cmVibGUgKi8KKyNkZWZpbmUgVERBOTg3NV9BQ1MgICAgICAgICAweDFmICAvKiBBdXhpbGlhcnkgY2hhbm5lbCBzZWxlY3QgKEZNKSAwYjAwMDAwMDAqLworI2RlZmluZSBUREE5ODc1X0FWTCAgICAgICAgIDB4MjAgIC8qIEF1eGlsaWFyeSB2b2x1bWUgZ2F1Y2hlICovCisjZGVmaW5lIFREQTk4NzVfQVZSICAgICAgICAgMHgyMSAgLyogQXV4aWxpYXJ5IHZvbHVtZSBkcm9pdGUgKi8KKyNkZWZpbmUgVERBOTg3NV9BQkEgICAgICAgICAweDIyICAvKiBBdXhpbGlhcnkgQmFzc2UgKi8KKyNkZWZpbmUgVERBOTg3NV9BVFIgICAgICAgICAweDIzICAvKiBBdXhpbGlhcnkgdHJlYmxlICovCiAKICNkZWZpbmUgVERBOTg3NV9NU1IgICAgICAgICAweDAyICAvKiBNb25pdG9yIHNlbGVjdCByZWdpc3RlciAqLwogI2RlZmluZSBUREE5ODc1X0MxTVNCICAgICAgIDB4MDMgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciBNU0IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggNTQ1YzAyOS4uZmM3NjZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTM5NCwxMSArMzk0LDExIEBACiAgKgogICogdXZjX3ZpZGVvX2RlY29kZV9lbmQgaXMgY2FsbGVkIHdpdGggaGVhZGVyIGRhdGEgYXQgdGhlIGVuZCBvZiBhIGJ1bGsgb3IKICAqIGlzb2Nocm9ub3VzIHBheWxvYWQuIEl0IHBlcmZvcm1zIGFueSBhZGRpdGlvbmFsIGhlYWRlciBkYXRhIHByb2Nlc3NpbmcgYW5kCi0gKiByZXR1cm5zIDAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGFuIGVycm9yIG9jY3VyZWQuIEFzIGhlYWRlciBkYXRhIGhhdmUKKyAqIHJldHVybnMgMCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIEFzIGhlYWRlciBkYXRhIGhhdmUKICAqIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYnkgdXZjX3ZpZGVvX2RlY29kZV9zdGFydCwgdGhpcyBmdW5jdGlvbnMgaXNuJ3QKICAqIHJlcXVpcmVkIHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBhIHNlY29uZCB0aW1lLgogICoKLSAqIEZvciBpc29jaHJvbm91cyB0cmFuc2ZlcnMgd2hlcmUgYSBwYXlsb2FkIGlzIGFsd2F5cyB0cmFuc2ZlcmVkIGluIGEgc2luZ2xlCisgKiBGb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzIHdoZXJlIGEgcGF5bG9hZCBpcyBhbHdheXMgdHJhbnNmZXJyZWQgaW4gYSBzaW5nbGUKICAqIFVSQiwgdGhlIHRocmVlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBpbiBhIHJvdy4KICAqCiAgKiBUbyBsZXQgdGhlIGRlY29kZXIgcHJvY2VzcyBoZWFkZXIgZGF0YSBhbmQgdXBkYXRlIGl0cyBpbnRlcm5hbCBzdGF0ZSBldmVuCkBAIC02NTgsNyArNjU4LDcgQEAKIAkJCQkJCQkgICAgYnVmKTsKIAkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCi0JCS8qIElmIGFuIGVycm9yIG9jY3VyZWQgc2tpcCB0aGUgcmVzdCBvZiB0aGUgcGF5bG9hZC4gKi8KKwkJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQgc2tpcCB0aGUgcmVzdCBvZiB0aGUgcGF5bG9hZC4gKi8KIAkJaWYgKHJldCA8IDAgfHwgYnVmID09IE5VTEwpIHsKIAkJCXN0cmVhbS0+YnVsay5za2lwX3BheWxvYWQgPSAxOwogCQl9IGVsc2UgewpAQCAtODIxLDcgKzgyMSw3IEBACiAJCXJldHVybiBzdHJlYW0tPnVyYl9zaXplIC8gcHNpemU7CiAKIAkvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFja2V0cy4gQnVsayBlbmRwb2ludHMgbWlnaHQgdHJhbnNmZXIgVVZDCi0JICogcGF5bG9hZHMgYWNjcm9zcyBtdWx0aXBsZSBVUkJzLgorCSAqIHBheWxvYWRzIGFjcm9zcyBtdWx0aXBsZSBVUkJzLgogCSAqLwogCW5wYWNrZXRzID0gRElWX1JPVU5EX1VQKHNpemUsIHBzaXplKTsKIAlpZiAobnBhY2tldHMgPiBVVkNfTUFYX1BBQ0tFVFMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCmluZGV4IGEwMWVkMzkuLjUwNmVkY2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwpAQCAtNDgsNyArNDgsNyBAQAogCQkJcHJpbnRrKEtFUk5fQ09OVCAiJXM6ICIgZm10LCB2ZmQtPm5hbWUsICMjIGFyZyk7XAogCQl9IHdoaWxlICgwKQogCi0vKiBaZXJvIG91dCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3QgcG9pbnRlZCB0byBieSBwLiAgRXZlcnRoaW5nIGFmdGVyLCBidXQKKy8qIFplcm8gb3V0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdCBwb2ludGVkIHRvIGJ5IHAuICBFdmVyeXRoaW5nIGFmdGVyLCBidXQKICAqIG5vdCBpbmNsdWRpbmcsIHRoZSBzcGVjaWZpZWQgZmllbGQgaXMgY2xlYXJlZC4gKi8KICNkZWZpbmUgQ0xFQVJfQUZURVJfRklFTEQocCwgZmllbGQpIFwKIAltZW1zZXQoKHU4ICopKHApICsgb2Zmc2V0b2YodHlwZW9mKCoocCkpLCBmaWVsZCkgKyBzaXplb2YoKHApLT5maWVsZCksIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKaW5kZXggYzQ3NDJmYy4uYzk2OTExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKIAlyZXR2YWwgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAotCQkJCSBQRk5fRE9XTih2aXJ0X3RvX3BoeXMobWVtLT52YWRkcikpLAorCQkJCSBtZW0tPmRtYV9oYW5kbGUgPj4gUEFHRV9TSElGVCwKIAkJCQkgc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycihxLT5kZXYsICJtbWFwOiByZW1hcCBmYWlsZWQgd2l0aCBlcnJvciAlZC4gIiwgcmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKaW5kZXggNzUzMDFkMS4uY2EzNzJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKQEAgLTM1NCw3ICszNTQsNyBAQAogCiAJLyogSGVyZSB3ZSBiYWNrIHVwIHRoZSBpbnB1dCBzZWxlY3Rpb24gYmVjYXVzZSBpdCBnZXRzCiAJICAgb3ZlcndyaXR0ZW4gd2hlbiB3ZSBmaWxsIHRoZSByZWdpc3RlcnMgd2l0aCB0aGUKLQkgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KKwkgICBjaG9zZW4gdmlkZW8gbm9ybSAqLwogCXRlbXBfaW5wdXQgPSB2cHgzMjIwX2ZwX3JlYWQoc2QsIDB4ZjIpOwogCiAJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19zdGQgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAppbmRleCBiNjU0YmZmLi5kZWY1NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaApAQCAtNTcsNyArNTcsNyBAQAogICAgdGhlcmZvciB0aGV5IG1heSBub3QgYmUgaW5pdGlhbGl6ZWQuCiAKICAgIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGp1c3QgZm9yIGNvbnZlbmllbmNlLCBhcyB0aGV5IGFyZSBmb3Igc3VyZSB1c2VkIGJ5Ci0gICBtb3N0L2FsbCBvZiB0aGUgY29kZWNzLiBUaGUgbGFzdCBvbmVzIG1heSBiZSBvbW1pdGVkLCB0b28uCisgICBtb3N0L2FsbCBvZiB0aGUgY29kZWNzLiBUaGUgbGFzdCBvbmVzIG1heSBiZSBvbWl0dGVkLCB0b28uCiAKICAgIFNlZSB0aGUgc3RydWN0dXJlIGRlY2xhcmF0aW9uIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB3aGljaCBkYXRhIGhhcwogICAgdG8gYmUgc2V0IHVwIGZvciB0aGUgbWFzdGVyIGFuZCB0aGUgc2xhdmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKaW5kZXggNGJiMzY4ZS4uZjNmNjQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaApAQCAtMjU5LDcgKzI1OSw3IEBACiAJc3RydWN0IHZmZV9wb2xhcml0eSB2ZmVfcG9sOwogCXU4IGdwaW9fcG9sW1pSX0dQSU9fTUFYXTsKIAotCS8qIGlzIHRoZSAvR1dTIGxpbmUgY29uZWN0ZWQ/ICovCisJLyogaXMgdGhlIC9HV1MgbGluZSBjb25uZWN0ZWQ/ICovCiAJdTggZ3dzX25vdF9jb25uZWN0ZWQ7CiAKIAkvKiBhdnM2ZXllcyBtdXggc2V0dGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggN2MzOTIxZC4uMjc3MWQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0xMjU0LDcgKzEyNTQsNyBAQAogewogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKLQkvKiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCByZXR1cm4gaW1tZWRpYXRseSAqLworCS8qIElmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHJldHVybiBpbW1lZGlhdGVseSAqLwogCWlmICgob24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHx8CiAJICAgICghb24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKaW5kZXggNTdiNDJiZi4uNGExOTA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKQEAgLTk3Myw3ICs5NzMsNyBAQAogfQogCiAvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciBhdHRyaWJ1dGVzIGJ5IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGZyZWVkIGJ5Ci0gKiBtc3Byb19ibG9ja19kYXRhX2NsZWFyLCBubyBtYXR0ZXIgaWYgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3VjY2VkZWQKKyAqIG1zcHJvX2Jsb2NrX2RhdGFfY2xlYXIsIG5vIG1hdHRlciBpZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzdWNjZWVkZWQKICAqIG9yIGZhaWxlZC4KICAqLwogc3RhdGljIGludCBtc3Byb19ibG9ja19yZWFkX2F0dHJpYnV0ZXMoc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9yNTkyLmMgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvcjU5Mi5jCmluZGV4IDcwMGQ0MjAuLjY2OGY1YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9yNTkyLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9ob3N0L3I1OTIuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJaWYgKG1lbXN0aWNrX2FkZF9ob3N0KGhvc3QpKQogCQlnb3RvIGVycm9yNzsKIAotCW1lc3NhZ2UoImRyaXZlciBzdWNjZXNmdWxseSBsb2FkZWQiKTsKKwltZXNzYWdlKCJkcml2ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRlZCIpOwogCXJldHVybiAwOwogZXJyb3I3OgogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3I1OTIuaCBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9yNTkyLmgKaW5kZXggZWVlMjY0ZS4uYzU3MjZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3I1OTIuaAorKysgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvcjU5Mi5oCkBAIC00MywxMiArNDMsMTIgQEAKIAogCQkJCQkJCS8qIEVycm9yIGRldGVjdGlvbiB2aWEgQ1JDICovCiAjZGVmaW5lIFI1OTJfU1RBVFVTX1NFTkRfRVJSCQkoMSA8PCAyNCkJLyogU2VuZCBmYWlsZWQgKi8KLSNkZWZpbmUgUjU5Ml9TVEFUVVNfUkVDVl9FUlIJCSgxIDw8IDI1KQkvKiBSZWNpZXZlIGZhaWxlZCAqLworI2RlZmluZSBSNTkyX1NUQVRVU19SRUNWX0VSUgkJKDEgPDwgMjUpCS8qIFJlY2VpdmUgZmFpbGVkICovCiAKIAkJCQkJCQkvKiBDYXJkIHN0YXRlICovCi0jZGVmaW5lIFI1OTJfU1RBVFVTX1JEWQkJCSgxIDw8IDI4KQkvKiBSRFkgc2lnbmFsIHJlY2lldmVkICovCisjZGVmaW5lIFI1OTJfU1RBVFVTX1JEWQkJCSgxIDw8IDI4KQkvKiBSRFkgc2lnbmFsIHJlY2VpdmVkICovCiAjZGVmaW5lIFI1OTJfU1RBVFVTX0NFRAkJCSgxIDw8IDI5KQkvKiBJTlQ6IENvbW1hbmQgZG9uZSAoc2VyaWFsIG1vZGUpKi8KLSNkZWZpbmUgUjU5Ml9TVEFUVVNfU0ZJRk9fSU5QVVQJCSgxIDw8IDMwKQkvKiBTbWFsbCBmaWZvIHJlY2lldmVkIGRhdGEqLworI2RlZmluZSBSNTkyX1NUQVRVU19TRklGT19JTlBVVAkJKDEgPDwgMzApCS8qIFNtYWxsIGZpZm8gcmVjZWl2ZWQgZGF0YSovCiAKICNkZWZpbmUgUjU5Ml9TRklGT19TSVpFCQkJMzIJCS8qIHRvdGFsIHNpemUgb2Ygc21hbGwgZmlmbyBpcyAzMiBieXRlcyAqLwogI2RlZmluZSBSNTkyX1NGSUZPX1BBQ0tFVAkJOAkJLyogcGFja2V0IHNpemUgb2Ygc21hbGwgZmlmbyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19mYy5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19mYy5oCmluZGV4IGZhY2U2ZTcuLjAzYmU4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9sb2dfZmMuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX2ZjLmgKQEAgLTM4LDggKzM4LDggQEAKIHsKICAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0JBU0UgICAgICAgICAgICAgICAgICAgICA9IDB4MjAwMDAwMDAsCiAgICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9PVVRfT0ZfT1JERVJfRlJBTUUgPSAweDIwMDAwMDAxLCAvKiByZWNlaXZlZCBhbiBvdXQgb2Ygb3JkZXIgZnJhbWUgLSB1bnN1cHBvcnRlZCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOSVRfRVJST1JfQkFEX1NUQVJUX09GX0ZSQU1FID0gMHgyMDAwMDAwMiwgLyogQmFkIFJ4IEZyYW1lLCBiYWQgc3RhcnQgb2YgZnJhbWUgcHJpbWF0aXZlICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9CQURfRU5EX09GX0ZSQU1FICAgPSAweDIwMDAwMDAzLCAvKiBCYWQgUnggRnJhbWUsIGJhZCBlbmQgb2YgZnJhbWUgcHJpbWF0aXZlICovCisgICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9CQURfU1RBUlRfT0ZfRlJBTUUgPSAweDIwMDAwMDAyLCAvKiBCYWQgUnggRnJhbWUsIGJhZCBzdGFydCBvZiBmcmFtZSBwcmltaXRpdmUgKi8KKyAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX0JBRF9FTkRfT0ZfRlJBTUUgICA9IDB4MjAwMDAwMDMsIC8qIEJhZCBSeCBGcmFtZSwgYmFkIGVuZCBvZiBmcmFtZSBwcmltaXRpdmUgKi8KICAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX09WRVJfUlVOICAgICAgICAgICA9IDB4MjAwMDAwMDQsIC8qIEJhZCBSeCBGcmFtZSwgb3ZlcnJ1biAqLwogICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOSVRfRVJST1JfUlhfT1RIRVIgICAgICAgICAgID0gMHgyMDAwMDAwNSwgLyogT3RoZXIgZXJyb3JzIGNhdWdodCBieSBJT0Mgd2hpY2ggcmVxdWlyZSByZXRyaWVzICovCiAgICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9TVUJQUk9DX0RFQUQgICAgICAgPSAweDIwMDAwMDA2LCAvKiBNYWluIHByb2Nlc3NvciBjb3VsZCBub3QgaW5pdGlhbGl6ZSBzdWItcHJvY2Vzc29yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX3Nhcy5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaAppbmRleCA4YjA0ODEwLi5mNjI5NjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX3Nhcy5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9sb2dfc2FzLmgKQEAgLTU2LDkgKzU2LDkgQEAKICNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9OT19GTEFTSF9BVkFJTEFCTEUgICAgICAgICAoMHgwMDAzRTAwMCkgLyogVHJpZWQgdG8gdXBsb2FkIGZyb20gZmxhc2gsIGJ1dCB0aGVyZSBpcyBub25lICovCiAjZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfRldVUExPQURfVU5LTk9XTl9JTUFHRV9UWVBFICAgICAgICAgKDB4MDAwM0UwMDEpIC8qIEltYWdlVHlwZSBmaWVsZCBjb250ZW50cyB3ZXJlIGludmFsaWQgKi8KICNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9XUk9OR19JTUFHRV9TSVpFICAgICAgICAgICAoMHgwMDAzRTAwMikgLyogSW1hZ2VTaXplIGZpZWxkIGluIFRDU0dFIHdhcyBiYWQvb2Zmc2V0IGluIE1mZ1BnIDQgd2FzIHdyb25nICovCi0jZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfRldVUExPQURfRU5USVJFX0ZMQVNIX1VQTE9BRF9GQUlMRUQgKDB4MDAwM0UwMDMpIC8qIEVycm9yIG9jY3VyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byB1cGxvYWQgdGhlIGVudGlyZSBmbGFzaCAqLwotI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0ZXVVBMT0FEX1JFR0lPTl9VUExPQURfRkFJTEVEICAgICAgICgweDAwMDNFMDA0KSAvKiBFcnJvciBvY2N1cmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gdXBsb2FkIHNpbmdsZSBmbGFzaCByZWdpb24gKi8KLSNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9ETUFfRkFJTFVSRSAgICAgICAgICAgICAgICAoMHgwMDAzRTAwNSkgLyogUHJvYmxlbSBvY2N1cmVkIHdoaWxlIERNQWluZyBGVyB0byBob3N0IG1lbW9yeSAqLworI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0ZXVVBMT0FEX0VOVElSRV9GTEFTSF9VUExPQURfRkFJTEVEICgweDAwMDNFMDAzKSAvKiBFcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHVwbG9hZCB0aGUgZW50aXJlIGZsYXNoICovCisjZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfRldVUExPQURfUkVHSU9OX1VQTE9BRF9GQUlMRUQgICAgICAgKDB4MDAwM0UwMDQpIC8qIEVycm9yIG9jY3VycmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gdXBsb2FkIHNpbmdsZSBmbGFzaCByZWdpb24gKi8KKyNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9ETUFfRkFJTFVSRSAgICAgICAgICAgICAgICAoMHgwMDAzRTAwNSkgLyogUHJvYmxlbSBvY2N1cnJlZCB3aGlsZSBETUFpbmcgRlcgdG8gaG9zdCBtZW1vcnkgKi8KIAogI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0RJQUdfTVNHX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICgweDAwMDQwMDAwKSAvKiBFcnJvciBoYW5kbGluZyBkaWFnIG1zZyAtIG9yJ2Qgd2l0aCBkaWFnIHN0YXR1cyAqLwogCkBAIC0xODcsOCArMTg3LDggQEAKICNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9CUkVBS19PTl9JTkNPTVBMRVRFX0JSRUFLX1JDVkQgICAoMHgwMDAwNTAwMCkKIAogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX1NNUF9GUkFNRV9GQUlMVVJFICAgICAgICAgICgweDAwMjAwMDAwKSAvKiBDYW4ndCBnZXQgU01QIEZyYW1lICovCi0jZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfU01QX1JFQURfRVJST1IgICAgICAgICAgICAgKDB4MDAyMDAwMTApIC8qIEVycm9yIG9jY3VyZWQgb24gU01QIFJlYWQgKi8KLSNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfV1JJVEVfRVJST1IgICAgICAgICAgICAoMHgwMDIwMDAyMCkgLyogRXJyb3Igb2NjdXJlZCBvbiBTTVAgV3JpdGUgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfUkVBRF9FUlJPUiAgICAgICAgICAgICAoMHgwMDIwMDAxMCkgLyogRXJyb3Igb2NjdXJyZWQgb24gU01QIFJlYWQgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfV1JJVEVfRVJST1IgICAgICAgICAgICAoMHgwMDIwMDAyMCkgLyogRXJyb3Igb2NjdXJyZWQgb24gU01QIFdyaXRlICovCiAjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfTk9UX1NVUFBPUlRFRF9PTl9FTkNMICAgICAgKDB4MDAyMDAwNDApIC8qIEVuY2wgTWdtdCBzZXJ2aWNlcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIFdXSUQgKi8KICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9BRERSX01PREVfTk9UX1NVUFBPUlRFRCAgICAoMHgwMDIwMDA1MCkgLyogQWRkcmVzcyBNb2RlIG5vdCBzdXBwb3JlZCAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX0JBRF9TTE9UX05VTSAgICAgICAgICAgICAgICgweDAwMjAwMDYwKSAvKiBJbnZhbGlkIFNsb3QgTnVtYmVyIGluIFNFUCBNc2cgKi8KQEAgLTIwNyw4ICsyMDcsOCBAQAogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9SRUNFSVZFRF9OQUNLX0ZST01fU0xBVkUgICAgICAgICAgICgweDAwMjAwMTAzKSAvKiBTRVAgTkFDSydkLCBpdCBpcyBidXN5ICovCiAjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX0RJRF9OT1RfUkVDRUlWRV9BQ0sgICAgICAgICAgICAgICAgKDB4MDAyMDAxMDQpIC8qIFNFUCBkaWRuJ3QgcmN2LiBBQ0sgKExhc3QgUmN2ZCBCaXQgPSAxKSAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9CQURfU1RBVFVTX0hEUl9DSEtTVU0gICAgICAgICAgICAgICgweDAwMjAwMTA1KSAvKiBTRVAgc3RvcHBlZCBvciBzZW50IGJhZCBjaGtzdW0gaW4gSGRyICovCi0jZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX1NUT1BfT05fREFUQSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAyMDAxMDYpIC8qIFNFUCBzdG9wcGVkIHdoaWxlIHRyYW5zZmVyaW5nIGRhdGEgKi8KLSNkZWZpbmUgUExfTE9HSU5GT19EQV9TRVBfU1RPUF9PTl9TRU5TRV9EQVRBICAgICAgICAgICAgICAgICAoMHgwMDIwMDEwNykgLyogU0VQIHN0b3BwZWQgd2hpbGUgdHJhbnNmZXJpbmcgc2Vuc2UgZGF0YSAqLworI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9TVE9QX09OX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICgweDAwMjAwMTA2KSAvKiBTRVAgc3RvcHBlZCB3aGlsZSB0cmFuc2ZlcnJpbmcgZGF0YSAqLworI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9TVE9QX09OX1NFTlNFX0RBVEEgICAgICAgICAgICAgICAgICgweDAwMjAwMTA3KSAvKiBTRVAgc3RvcHBlZCB3aGlsZSB0cmFuc2ZlcnJpbmcgc2Vuc2UgZGF0YSAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9VTlNVUFBPUlRFRF9TQ1NJX1NUQVRVU18xICAgICAgICAgICgweDAwMjAwMTA4KSAvKiBTRVAgcmV0dXJuZWQgdW5rbm93biBzY3NpIHN0YXR1cyAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9VTlNVUFBPUlRFRF9TQ1NJX1NUQVRVU18yICAgICAgICAgICgweDAwMjAwMTA5KSAvKiBTRVAgcmV0dXJuZWQgdW5rbm93biBzY3NpIHN0YXR1cyAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9DSEtTVU1fRVJST1JfQUZURVJfU1RPUCAgICAgICAgICAgICgweDAwMjAwMTBBKSAvKiBTRVAgcmV0dXJuZWQgYmFkIGNoa3N1bSBhZnRlciBTVE9QICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IGVjODA4MGMuLmZhMTVlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0zNDM1LDcgKzM0MzUsNyBAQAogICoJSWYgbWVtb3J5IGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkLCB0aGUgc2FtZSAoY2FjaGVkKSB2YWx1ZQogICoJaXMgcmV0dXJuZWQuCiAgKgotICoJUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bGwsIG9yIG5vbi16ZXJvIGZvciBmYWlsdXJlCisgKglSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyBmb3IgZmFpbHVyZQogICoqLwogaW50CiBtcHRfYWxsb2NfZndfbWVtb3J5KE1QVF9BREFQVEVSICppb2MsIGludCBzaXplKQpAQCAtNjkzMiw3ICs2OTMyLDcgQEAKICAqCU1lc3NhZ2UgVW5pdCBSZXNldCAtIGluc3RydWN0cyB0aGUgSU9DIHRvIHJlc2V0IHRoZSBSZXBseSBQb3N0IGFuZAogICoJRnJlZSBGSUZPJ3MuIEFsbCB0aGUgTWVzc2FnZSBGcmFtZXMgb24gUmVwbHkgRnJlZSBGSUZPIGFyZSBkaXNjYXJkZWQuCiAgKglBbGwgcG9zdGVkIGJ1ZmZlcnMgYXJlIGZyZWVkLCBhbmQgZXZlbnQgbm90aWZpY2F0aW9uIGlzIHR1cm5lZCBvZmYuCi0gKglJT0MgZG9lc250IHJlcGx5IHRvIGFueSBvdXRzdGFuZGluZyByZXF1ZXN0LiBUaGlzIHdpbGwgdHJhbnNmZXIgSU9DCisgKglJT0MgZG9lc24ndCByZXBseSB0byBhbnkgb3V0c3RhbmRpbmcgcmVxdWVzdC4gVGhpcyB3aWxsIHRyYW5zZmVyIElPQwogICoJdG8gUkVBRFkgc3RhdGUuCiAgKiovCiBpbnQKQEAgLTc5MDUsNyArNzkwNSw3IEBACiAJCSAgICAiT3duZXIiLCAJCQkJCS8qIDE1aCAqLwogCQkiT3BlbiBUcmFuc21pdCBETUEgQWJvcnQiLAkJCS8qIDE2aCAqLwogCQkiSU8gRGV2aWNlIE1pc3NpbmcgRGVsYXkgUmV0cnkiLAkJLyogMTdoICovCi0JCSJJTyBDYW5jZWxsZWQgRHVlIHRvIFJlY2lldmUgRXJyb3IiLAkJLyogMThoICovCisJCSJJTyBDYW5jZWxsZWQgRHVlIHRvIFJlY2VpdmUgRXJyb3IiLAkJLyogMThoICovCiAJCU5VTEwsCQkJCQkJLyogMTloICovCiAJCU5VTEwsCQkJCQkJLyogMUFoICovCiAJCU5VTEwsCQkJCQkJLyogMUJoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwppbmRleCA4NzhiZGEwLi42ZTZlMTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKQEAgLTk4NSw3ICs5ODUsNyBAQAogCVJlcGx5TXNnID0gKHBGV0Rvd25sb2FkUmVwbHlfdClpb2NwLT5pb2N0bF9jbWRzLnJlcGx5OwogCWlvY3N0YXQgPSBsZTE2X3RvX2NwdShSZXBseU1zZy0+SU9DU3RhdHVzKSAmIE1QSV9JT0NTVEFUVVNfTUFTSzsKIAlpZiAoaW9jc3RhdCA9PSBNUElfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIkYvVyB1cGRhdGUgc3VjY2Vzc2Z1bGwhXG4iLCBpb2NwLT5uYW1lKTsKKwkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIkYvVyB1cGRhdGUgc3VjY2Vzc2Z1bCFcbiIsIGlvY3AtPm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGlvY3N0YXQgPT0gTVBJX0lPQ1NUQVRVU19JTlZBTElEX0ZVTkNUSU9OKSB7CiAJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJIbW1tLi4uICBGL1cgZG93bmxvYWQgbm90IHN1cHBvcnRlZCE/IVxuIiwKQEAgLTI0MDcsNyArMjQwNyw3IEBACiAJfQogCiAJLyogbWYgaXMgbnVsbCBpZiBjb21tYW5kIGlzc3VlZCBzdWNjZXNzZnVsbHkKLQkgKiBvdGhlcndpc2UsIGZhaWx1cmUgb2NjdXJlZCBhZnRlciBtZiBhY3F1aXJlZC4KKwkgKiBvdGhlcndpc2UsIGZhaWx1cmUgb2NjdXJyZWQgYWZ0ZXIgbWYgYWNxdWlyZWQuCiAJICovCiAJaWYgKG1mKQogCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCBmNWExNGFmLi42NmY5NDEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC0zMDcsNyArMzA3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKIH0KIAotLyogZnJlZSBtZW1vcnkgYXNzb2ljYXRlZCB0byBhIHNhcyBmaXJtd2FyZSBldmVudCAqLworLyogZnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB0byBhIHNhcyBmaXJtd2FyZSBldmVudCAqLwogc3RhdGljIHZvaWQKIG1wdHNhc19mcmVlX2Z3X2V2ZW50KE1QVF9BREFQVEVSICppb2MsIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAvKioKICAqIG1wdHNhc190YXJnZXRfcmVzZXRfcXVldWUKICAqCi0gKiBSZWNlaXZlIHJlcXVlc3QgZm9yIFRBUkdFVF9SRVNFVCBhZnRlciByZWNpZXZpbmcgYW4gZmlybXdhcmUKKyAqIFJlY2VpdmUgcmVxdWVzdCBmb3IgVEFSR0VUX1JFU0VUIGFmdGVyIHJlY2VpdmluZyBhbiBmaXJtd2FyZQogICogZXZlbnQgTk9UX1JFU1BPTkRJTkdfRVZFTlQsIHRoZW4gcHV0IGNvbW1hbmQgaW4gbGluayBsaXN0CiAgKiBhbmQgcXVldWUgaWYgdGFza19xdWV1ZSBhbHJlYWR5IGluIHVzZS4KICAqCkBAIC0xNDAzLDcgKzE0MDMsNyBAQAogLyoqCiAgKgltcHRzYXNfYWRkX2VuZF9kZXZpY2UgLSByZXBvcnQgYSBuZXcgZW5kIGRldmljZSB0byBzYXMgdHJhbnNwb3J0IGxheWVyCiAgKglAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQotICoJQHBoeV9pbmZvOiBkZWNyaWJlcyBhdHRhY2hlZCBkZXZpY2UKKyAqCUBwaHlfaW5mbzogZGVzY3JpYmVzIGF0dGFjaGVkIGRldmljZQogICoKICAqCXJldHVybiAoMCkgc3VjY2VzcyAoMSkgZmFpbHVyZQogICoKQEAgLTE0ODEsNyArMTQ4MSw3IEBACiAvKioKICAqCW1wdHNhc19kZWxfZW5kX2RldmljZSAtIHJlcG9ydCBhIGRlbGV0ZWQgZW5kIGRldmljZSB0byBzYXMgdHJhbnNwb3J0IGxheWVyCiAgKglAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQotICoJQHBoeV9pbmZvOiBkZWNyaWJlcyBhdHRhY2hlZCBkZXZpY2UKKyAqCUBwaHlfaW5mbzogZGVzY3JpYmVzIGF0dGFjaGVkIGRldmljZQogICoKICAqKi8KIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL1JFQURNRSBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vUkVBRE1FCmluZGV4IDkxMWZjMzAuLmYwNzJhOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vUkVBRE1FCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vUkVBRE1FCkBAIC01Myw3ICs1Myw3IEBACiBCb3hIaWxsIENvcnBvcmF0aW9uCiAJTG9hbiBvZiBpbml0aWFsIEZpYnJlQ2hhbm5lbCBkaXNrIGFycmF5IHVzZWQgZm9yIGRldmVsb3BtZW50IHdvcmsuCiAKLUV1cm9wZWFuIENvbWlzc2lvbgorRXVyb3BlYW4gQ29tbWlzc2lvbgogCUZ1bmRpbmcgdGhlIHdvcmsgZG9uZSBieSB0aGUgVW5pdmVyc2l0eSBvZiBIZWxzaW5raQogCiBTeXNLb25uZWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9kZXZpY2UuYwppbmRleCAwZWU0MjY0Li40NTQ3ZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAogCXJjID0gaTJvX2RldmljZV9pc3N1ZV9jbGFpbShkZXYsIEkyT19DTURfVVRJTF9DTEFJTSwgSTJPX0NMQUlNX1BSSU1BUlkpOwogCWlmICghcmMpCi0JCXByX2RlYnVnKCJpMm86IGNsYWltIG9mIGRldmljZSAlZCBzdWNjZWRlZFxuIiwKKwkJcHJfZGVidWcoImkybzogY2xhaW0gb2YgZGV2aWNlICVkIHN1Y2NlZWRlZFxuIiwKIAkJCSBkZXYtPmxjdF9kYXRhLnRpZCk7CiAJZWxzZQogCQlwcl9kZWJ1ZygiaTJvOiBjbGFpbSBvZiBkZXZpY2UgJWQgZmFpbGVkICVkXG4iLApAQCAtMTEwLDcgKzExMCw3IEBACiAJfQogCiAJaWYgKCFyYykKLQkJcHJfZGVidWcoImkybzogY2xhaW0gcmVsZWFzZSBvZiBkZXZpY2UgJWQgc3VjY2VkZWRcbiIsCisJCXByX2RlYnVnKCJpMm86IGNsYWltIHJlbGVhc2Ugb2YgZGV2aWNlICVkIHN1Y2NlZWRlZFxuIiwKIAkJCSBkZXYtPmxjdF9kYXRhLnRpZCk7CiAJZWxzZQogCQlwcl9kZWJ1ZygiaTJvOiBjbGFpbSByZWxlYXNlIG9mIGRldmljZSAlZCBmYWlsZWQgJWRcbiIsCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJCWdvdG8gdW5yZWdfZGV2OwogCX0KIAotCS8qIGNyZWF0ZSB1c2VyIGVudHJpZXMgcmVmZXJpbmcgdG8gdGhpcyBkZXZpY2UgKi8KKwkvKiBjcmVhdGUgdXNlciBlbnRyaWVzIHJlZmVycmluZyB0byB0aGlzIGRldmljZSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmYy0+ZGV2aWNlcywgbGlzdCkKIAkgICAgaWYgKCh0bXAtPmxjdF9kYXRhLnVzZXJfdGlkID09IGkyb19kZXYtPmxjdF9kYXRhLnRpZCkKIAkJJiYgKHRtcCAhPSBpMm9fZGV2KSkgewpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJCQlnb3RvIHJtbGluazE7CiAJfQogCi0JLyogY3JlYXRlIHBhcmVudCBlbnRyaWVzIHJlZmVyaW5nIHRvIHRoaXMgZGV2aWNlICovCisJLyogY3JlYXRlIHBhcmVudCBlbnRyaWVzIHJlZmVycmluZyB0byB0aGlzIGRldmljZSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmYy0+ZGV2aWNlcywgbGlzdCkKIAkgICAgaWYgKCh0bXAtPmxjdF9kYXRhLnBhcmVudF90aWQgPT0gaTJvX2Rldi0+bGN0X2RhdGEudGlkKQogCQkmJiAodG1wICE9IGkyb19kZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYwppbmRleCA0N2VjNWJjLi42NDNhZDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogCiAJLyoKIAkgKiBUaGlzIGlzIHRvIGRlYWlsIHdpdGggdGhlIGNhc2Ugb2YgYW4gYXBwbGljYXRpb24KLQkgKiBvcGVuaW5nIGEgZGV2aWNlIGFuZCB0aGVuIHRoZSBkZXZpY2UgZGlzc2FwZWFycyB3aGlsZQorCSAqIG9wZW5pbmcgYSBkZXZpY2UgYW5kIHRoZW4gdGhlIGRldmljZSBkaXNhcHBlYXJzIHdoaWxlCiAJICogaXQncyBpbiB1c2UsIGFuZCB0aGVuIHRoZSBhcHBsaWNhdGlvbiB0cmllcyB0byByZWxlYXNlCiAJICogaXQuICBleDogVW5tb3VudGluZyBhIGRlbGV0ZWQgUkFJRCB2b2x1bWUgYXQgcmVib290LgogCSAqIElmIHdlIHNlbmQgbWVzc2FnZXMsIGl0IHdpbGwganVzdCBjYXVzZSBGQUlMcyBzaW5jZQpAQCAtNzE3LDcgKzcxNyw3IEBACiAKIC8qKgogICoJaTJvX2Jsb2NrX3RyYW5zZmVyIC0gVHJhbnNmZXIgYSByZXF1ZXN0IHRvL2Zyb20gdGhlIEkyTyBjb250cm9sbGVyCi0gKglAcmVxOiB0aGUgcmVxdWVzdCB3aGljaCBzaG91bGQgYmUgdHJhbnNmZXJlZAorICoJQHJlcTogdGhlIHJlcXVlc3Qgd2hpY2ggc2hvdWxkIGJlIHRyYW5zZmVycmVkCiAgKgogICoJVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgcmVxdWVzdCBpbnRvIGEgSTJPIG1lc3NhZ2UuIFRoZSBuZWNlc3NhcnkKICAqCURNQSBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYW5kIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgcG9zdCB0aGUgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suaCBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmgKaW5kZXggNjdmOTIxYi4uY2Y4ODczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5oCkBAIC03Myw3ICs3Myw3IEBACiAJc3RydWN0IGkyb19kZXZpY2UgKmkyb19kZXY7CS8qIHBvaW50ZXIgdG8gSTJPIGRldmljZSAqLwogCXN0cnVjdCBnZW5kaXNrICpnZDsKIAlzcGlubG9ja190IGxvY2s7CS8qIHF1ZXVlIGxvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fcXVldWU7CS8qIGxpc3Qgb2YgdHJhbnNmZXJlZCwgYnV0IHVuZmluaXNoZWQKKwlzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fcXVldWU7CS8qIGxpc3Qgb2YgdHJhbnNmZXJyZWQsIGJ1dCB1bmZpbmlzaGVkCiAJCQkJCSAgIHJlcXVlc3RzICovCiAJdW5zaWduZWQgaW50IG9wZW5fcXVldWVfZGVwdGg7CS8qIG51bWJlciBvZiByZXF1ZXN0cyBpbiB0aGUgcXVldWUgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jCmluZGV4IDk3YmRmODIuLmYwMDM5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19zY3NpLmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogICoJaTJvX3Njc2lfcHJvYmUgLSB2ZXJpZnkgaWYgZGV2IGlzIGEgSTJPIFNDU0kgZGV2aWNlIGFuZCBpbnN0YWxsIGl0CiAgKglAZGV2OiBkZXZpY2UgdG8gdmVyaWZ5IGlmIGl0IGlzIGEgSTJPIFNDU0kgZGV2aWNlCiAgKgotICoJUmV0cmlldmUgY2hhbm5lbCwgaWQgYW5kIGx1biBmb3IgSTJPIGRldmljZS4gSWYgZXZlcnRoaW5nIGdvZXMgd2VsbAorICoJUmV0cmlldmUgY2hhbm5lbCwgaWQgYW5kIGx1biBmb3IgSTJPIGRldmljZS4gSWYgZXZlcnl0aGluZyBnb2VzIHdlbGwKICAqCXJlZ2lzdGVyIHRoZSBJMk8gZGV2aWNlIGFzIFNDU0kgZGV2aWNlIG9uIHRoZSBJMk8gU0NTSSBjb250cm9sbGVyLgogICoKICAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IGUyZmVhNTguLjNlZDNmZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJICBhcyBjbG9jayByZXF1ZXN0IGhhbmRzaGFraW5nLgogCiAJICBUaGlzIGRyaXZlciB1c2VzIGJvYXJkLXNwZWNpZmljIGRhdGEgdG8gaW5pdGlhbGl6ZSB0aGUgcmVzb3VyY2VzCi0JICBhbmQgbG9hZCBzY3JpcHRzIGNvbnRyb2xpbmcgd2hpY2ggcmVzb3VyY2VzIGFyZSBzd2l0Y2hlZCBvZmYvb24KKwkgIGFuZCBsb2FkIHNjcmlwdHMgY29udHJvbGxpbmcgd2hpY2ggcmVzb3VyY2VzIGFyZSBzd2l0Y2hlZCBvZmYvb24KIAkgIG9yIHJlc2V0IHdoZW4gYSBzbGVlcCwgd2FrZXVwIG9yIHdhcm0gcmVzZXQgZXZlbnQgb2NjdXJzLgogCiBjb25maWcgVFdMNDAzMF9DT0RFQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWI4NTAwLWdwYWRjLmMgYi9kcml2ZXJzL21mZC9hYjg1MDAtZ3BhZGMuYwppbmRleCBiYzkzYjJlLi42NDIxYWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjg1MDAtZ3BhZGMuYworKysgYi9kcml2ZXJzL21mZC9hYjg1MDAtZ3BhZGMuYwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJLyogd2FpdCBmb3IgY29tcGxldGlvbiBvZiBjb252ZXJzaW9uICovCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmdwYWRjLT5hYjg1MDBfZ3BhZGNfY29tcGxldGUsIDIqSFopKSB7CiAJCWRldl9lcnIoZ3BhZGMtPmRldiwKLQkJCSJ0aW1lb3V0OiBkaWRudCByZWNpZXZlIEdQQURDIGNvbnZlcnNpb24gaW50ZXJydXB0XG4iKTsKKwkJCSJ0aW1lb3V0OiBkaWRuJ3QgcmVjZWl2ZSBHUEFEQyBjb252ZXJzaW9uIGludGVycnVwdFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FzaWMzLmMgYi9kcml2ZXJzL21mZC9hc2ljMy5jCmluZGV4IGQ0YTg1MWMuLjBiNGQ1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvYXNpYzMuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJaW50IGl0ZXIsIGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRhdGEtPmNoaXAtPmlycV9hY2soaXJxX2RhdGEpOworCWRhdGEtPmNoaXAtPmlycV9hY2soZGF0YSk7CiAKIAlmb3IgKGl0ZXIgPSAwIDsgaXRlciA8IE1BWF9BU0lDX0lTUl9MT09QUzsgaXRlcisrKSB7CiAJCXUzMiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9lengtcGNhcC5jIGIvZHJpdmVycy9tZmQvZXp4LXBjYXAuYwppbmRleCBmMmY0MDI5Li40M2E3NmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9lengtcGNhcC5jCisrKyBiL2RyaXZlcnMvbWZkL2V6eC1wY2FwLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCQllenhfcGNhcF9yZWFkKHBjYXAsIFBDQVBfUkVHX01TUiwgJm1zcik7CiAJCWV6eF9wY2FwX3JlYWQocGNhcCwgUENBUF9SRUdfSVNSLCAmaXNyKTsKIAotCQkvKiBXZSBjYW50IHNlcnZpY2UvYWNrIGlycXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gcG9ydCAyICovCisJCS8qIFdlIGNhbid0IHNlcnZpY2UvYWNrIGlycXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gcG9ydCAyICovCiAJCWlmICghKHBkYXRhLT5jb25maWcgJiBQQ0FQX1NFQ09ORF9QT1JUKSkgewogCQkJZXp4X3BjYXBfcmVhZChwY2FwLCBQQ0FQX1JFR19JTlRfU0VMLCAmaW50X3NlbCk7CiAJCQlpc3IgJj0gfmludF9zZWw7CkBAIC00NTcsNyArNDU3LDcgQEAKIAlwY2FwLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicGNhcGQiKTsKIAlpZiAoIXBjYXAtPndvcmtxdWV1ZSkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlkZXZfZXJyKCZzcGktPmRldiwgImNhbnQgY3JlYXRlIHBjYXAgdGhyZWFkXG4iKTsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJjYW4ndCBjcmVhdGUgcGNhcCB0aHJlYWRcbiIpOwogCQlnb3RvIGZyZWVfcGNhcDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tZmQtY29yZS5jCmluZGV4IGQwMTU3NGQuLmY0YzhjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwpAQCAtNTUsNiArNTUsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0wobWZkX2NlbGxfZGlzYWJsZSk7CiAKK3N0YXRpYyBpbnQgbWZkX3BsYXRmb3JtX2FkZF9jZWxsKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCAqY2VsbCkKK3sKKwlpZiAoIWNlbGwpCisJCXJldHVybiAwOworCisJcGRldi0+bWZkX2NlbGwgPSBrbWVtZHVwKGNlbGwsIHNpemVvZigqY2VsbCksIEdGUF9LRVJORUwpOworCWlmICghcGRldi0+bWZkX2NlbGwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbWZkX2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgaWQsCiAJCQkgIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCAqY2VsbCwKIAkJCSAgc3RydWN0IHJlc291cmNlICptZW1fYmFzZSwKQEAgLTc1LDcgKzg4LDcgQEAKIAogCXBkZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgY2VsbCwgc2l6ZW9mKCpjZWxsKSk7CisJcmV0ID0gbWZkX3BsYXRmb3JtX2FkZF9jZWxsKHBkZXYsIGNlbGwpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF9yZXM7CiAKQEAgLTEyMyw3ICsxMzYsNiBAQAogCiAJcmV0dXJuIDA7CiAKLS8qCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7ICovCiBmYWlsX3JlczoKIAlrZnJlZShyZXMpOwogZmFpbF9kZXZpY2U6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9vbWFwLXVzYi1ob3N0LmMgYi9kcml2ZXJzL21mZC9vbWFwLXVzYi1ob3N0LmMKaW5kZXggY2IwMTIwOS4uM2FiOWZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvb21hcC11c2ItaG9zdC5jCisrKyBiL2RyaXZlcnMvbWZkL29tYXAtdXNiLWhvc3QuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAogI2RlZmluZSBVU0JIU19EUklWRVJfTkFNRQkidXNiaHMtb21hcCIKQEAgLTMzMiw3ICszMzEsNyBAQAogCWludAkJCQlpOwogCiAJaWYgKCFwZGF0YSkgewotCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgcGxhdGZyb20gZGF0YVxuIik7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlbmRfcHJvYmU7CiAJfQpAQCAtNzAwLDggKzY5OSw3IEBACiAJZGV2X2RiZyhkZXYsICJzdGFydGluZyBUSSBIU1VTQiBDb250cm9sbGVyXG4iKTsKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoZGV2LCAibWlzc2luZyBwbGF0Zm9ybV9kYXRhXG4iKTsKLQkJcmV0ID0gIC1FTk9ERVY7Ci0JCWdvdG8gZW5kX2VuYWJsZTsKKwkJcmV0dXJuICAtRU5PREVWOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvbWFwLT5sb2NrLCBmbGFncyk7CkBAIC03MTksMTQgKzcxNywxNCBAQAogCQkJZ3Bpb19yZXF1ZXN0KHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwKIAkJCQkJCSJVU0IxIFBIWSByZXNldCIpOwogCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0Ci0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMSk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMCk7CiAJCX0KIAogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMV0pKSB7CiAJCQlncGlvX3JlcXVlc3QocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLAogCQkJCQkJIlVTQjIgUEhZIHJlc2V0Iik7CiAJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQKLQkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAxKTsKKwkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAwKTsKIAkJfQogCiAJCS8qIEhvbGQgdGhlIFBIWSBpbiBSRVNFVCBmb3IgZW5vdWdoIHRpbWUgdGlsbCBESVIgaXMgaGlnaCAqLwpAQCAtOTA2LDE2ICs5MDQsMTcgQEAKIAogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0pKQogCQkJZ3Bpb19zZXRfdmFsdWUKLQkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzBdLCAwKTsKKwkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzBdLCAxKTsKIAogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMV0pKQogCQkJZ3Bpb19zZXRfdmFsdWUKLQkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAwKTsKKwkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAxKTsKIAl9CiAKIGVuZF9jb3VudDoKIAlvbWFwLT5jb3VudCsrOwotCWdvdG8gZW5kX2VuYWJsZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvbWFwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CiAKIGVycl90bGw6CiAJaWYgKHBkYXRhLT5laGNpX2RhdGEtPnBoeV9yZXNldCkgewpAQCAtOTMxLDggKzkzMCw2IEBACiAJY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdF9mc19mY2spOwogCWNsa19kaXNhYmxlKG9tYXAtPnVzYmhvc3RfaHNfZmNrKTsKIAljbGtfZGlzYWJsZShvbWFwLT51c2Job3N0X2ljayk7Ci0KLWVuZF9lbmFibGU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb21hcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9wY2Y1MDYzMy1jb3JlLmMgYi9kcml2ZXJzL21mZC9wY2Y1MDYzMy1jb3JlLmMKaW5kZXggYzc2ODdmNi4uNTc4Njg0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9wY2Y1MDYzMy1jb3JlLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAogfQogCi0vKiBSZWFkIGEgYmxvY2sgb2YgdXB0byAzMiByZWdzICAqLworLyogUmVhZCBhIGJsb2NrIG9mIHVwIHRvIDMyIHJlZ3MgICovCiBpbnQgcGNmNTA2MzNfcmVhZF9ibG9jayhzdHJ1Y3QgcGNmNTA2MzMgKnBjZiwgdTggcmVnLAogCQkJCQlpbnQgbnJfcmVncywgdTggKmRhdGEpCiB7CkBAIC02NSw3ICs2NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2Y1MDYzM19yZWFkX2Jsb2NrKTsKIAotLyogV3JpdGUgYSBibG9jayBvZiB1cHRvIDMyIHJlZ3MgICovCisvKiBXcml0ZSBhIGJsb2NrIG9mIHVwIHRvIDMyIHJlZ3MgICovCiBpbnQgcGNmNTA2MzNfd3JpdGVfYmxvY2soc3RydWN0IHBjZjUwNjMzICpwY2YgLCB1OCByZWcsCiAJCQkJCWludCBucl9yZWdzLCB1OCAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYwppbmRleCAxNjQyMmRlMC4uMmMwZDRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYwpAQCAtNDQ3LDEyICs0NDcsMTMgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KLQlpZiAodHNjcmlwdC0+ZmxhZ3MgJiBUV0w0MDMwX1NMRUVQX1NDUklQVCkKKwlpZiAodHNjcmlwdC0+ZmxhZ3MgJiBUV0w0MDMwX1NMRUVQX1NDUklQVCkgewogCQlpZiAob3JkZXIpCiAJCQlwcl93YXJuaW5nKCJUV0w0MDMwOiBCYWQgb3JkZXIgb2Ygc2NyaXB0cyAoc2xlZXAgIlwKIAkJCQkJInNjcmlwdCBiZWZvcmUgd2FrZXVwKSBMZWFkcyB0byBib290IlwKIAkJCQkJImZhaWx1cmUgb24gc29tZSBib2FyZHNcbiIpOwogCQllcnIgPSB0d2w0MDMwX2NvbmZpZ19zbGVlcF9zZXF1ZW5jZShhZGRyZXNzKTsKKwl9CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDYwMzAtaXJxLmMgYi9kcml2ZXJzL21mZC90d2w2MDMwLWlycS5jCmluZGV4IGZhOTM3MDUuLmRmYmFlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDYwMzAtaXJxLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNjAzMC1pcnEuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJdHdsNjAzMF9pbnRlcnJ1cHRfdW5tYXNrKFRXTDYwMzBfTU1DREVURUNUX0lOVF9NQVNLLAogCQkJCQkJUkVHX0lOVF9NU0tfU1RTX0IpOwogCS8qCi0JICogSW50aWFsbHkgQ29uZmlndXJpbmcgTU1DX0NUUkwgZm9yIHJlY2V2aW5nIGludGVycnVwdHMgJgorCSAqIEluaXRpYWxseSBDb25maWd1cmluZyBNTUNfQ1RSTCBmb3IgcmVjZWl2aW5nIGludGVycnVwdHMgJgogCSAqIENhcmQgc3RhdHVzIG9uIFRXTDYwMzAgZm9yIE1NQzEKIAkgKi8KIAlyZXQgPSB0d2xfaTJjX3JlYWRfdTgoVFdMNjAzMF9NT0RVTEVfSUQwLCAmcmVnX3ZhbCwgVFdMNjAzMF9NTUNDVFJMKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCQkvKiBUV0w2MDMwIHByb3ZpZGUncyBDYXJkIGRldGVjdCBzdXBwb3J0IGZvcgogCQkgKiBvbmx5IE1NQzEgY29udHJvbGxlci4KIAkJICovCi0JCXByX2VycigiVW5rb3duIE1NQyBjb250cm9sbGVyICVkIGluICVzXG4iLCBwZGV2LT5pZCwgX19mdW5jX18pOworCQlwcl9lcnIoIlVua25vd24gTU1DIGNvbnRyb2xsZXIgJWQgaW4gJXNcbiIsIHBkZXYtPmlkLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJfQogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCmluZGV4IGQ3M2Y4NGIuLmRhZjY5NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCkBAIC04LDcgKzgsNyBAQAogICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFNwbGl0aW5nIGRvbmUgYnk6IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+Ci0gKiBJZiBzb21ldGhpbmcgZG9lc250IHdvcmsgYW5kIGl0IHdvcmtlZCBiZWZvcmUgc3BsaXRpbmcsIGUtbWFpbCBtZSwKKyAqIElmIHNvbWV0aGluZyBkb2Vzbid0IHdvcmsgYW5kIGl0IHdvcmtlZCBiZWZvcmUgc3BsaXRpbmcsIGUtbWFpbCBtZSwKICAqIGRvbnQgYm90aGVyIE5pY29sYXMgcGxlYXNlIDstKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYm1wMDg1LmMgYi9kcml2ZXJzL21pc2MvYm1wMDg1LmMKaW5kZXggZWNkMjc2YS4uNWY4OThjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2JtcDA4NS5jCisrKyBiL2RyaXZlcnMvbWlzYy9ibXAwODUuYwpAQCAtMiw3ICsyLDcgQEAKIAogICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBibXAwODUgZGlnaXRhbCBiYXJvbWV0cmljIHByZXNzdXJlCiAgICAgYW5kIHRlbXBlcmF0dXJlIHNlbnNvciBmcm9tIEJvc2NoIFNlbnNvcnRlYy4gVGhlIGRhdGFzaGVldAotICAgIGlzIGF2YWxpYWJsZSBmcm9tIHRoZWlyIHdlYnNpdGU6CisgICAgaXMgYXZhaWxhYmxlIGZyb20gdGhlaXIgd2Vic2l0ZToKICAgICBodHRwOi8vd3d3LmJvc2NoLXNlbnNvcnRlYy5jb20vY29udGVudC9sYW5ndWFnZTEvZG93bmxvYWRzL0JTVC1CTVAwODUtRFMwMDAtMDUucGRmCiAKICAgICBBIHByZXNzdXJlIG1lYXN1cmVtZW50IGlzIGlzc3VlZCBieSByZWFkaW5nIGZyb20gcHJlc3N1cmUwX2lucHV0LgpAQCAtNDI5LDcgKzQyOSw3IEBACiAJaWYgKGVycikKIAkJZ290byBleGl0X2ZyZWU7CiAKLQlkZXZfaW5mbygmZGF0YS0+Y2xpZW50LT5kZXYsICJTdWNjZXNmdWxseSBpbml0aWFsaXplZCBibXAwODUhXG4iKTsKKwlkZXZfaW5mbygmZGF0YS0+Y2xpZW50LT5kZXYsICJTdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgYm1wMDg1IVxuIik7CiAJZ290byBleGl0OwogCiBleGl0X2ZyZWU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYzJwb3J0L2MycG9ydC1kdXJhbWFyMjE1MC5jIGIvZHJpdmVycy9taXNjL2MycG9ydC9jMnBvcnQtZHVyYW1hcjIxNTAuYwppbmRleCAzMzhkY2MxLi43NzhmYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvYzJwb3J0L2MycG9ydC1kdXJhbWFyMjE1MC5jCisrKyBiL2RyaXZlcnMvbWlzYy9jMnBvcnQvYzJwb3J0LWR1cmFtYXIyMTUwLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAkJb3V0Yih2IHwgKEMyRCB8IEMyQ0spLCBESVJfUE9SVCk7CiAJZWxzZQogCQkvKiBXaGVuIGFjY2VzcyBpcyAib2ZmIiBpcyBpbXBvcnRhbnQgdGhhdCBib3RoIGxpbmVzIGFyZSBzZXQKLQkJICogYXMgaW5wdXRzIG9yIGhpLWltcGVkZW5jZSAqLworCQkgKiBhcyBpbnB1dHMgb3IgaGktaW1wZWRhbmNlICovCiAJCW91dGIodiAmIH4oQzJEIHwgQzJDSyksIERJUl9QT1JUKTsKIAogCW11dGV4X3VubG9jaygmdXBkYXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuaCBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmgKaW5kZXggNzJhY2Y1YS4uMDBkYmYxZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmgKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuaApAQCAtMjAsNyArMjAsNyBAQAogICoKICAqIEF1dGhvcjogTWF4IEFzYvZjayA8YW1heEB1cy5pYm0uY29tPgogICoKLSAqIE9yaWduYWxseSB3cml0dGVuIGJ5IFBldGUgUmV5bm9sZHMKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXRlIFJleW5vbGRzCiAgKi8KIAogI2lmbmRlZiBfSUJNQVNNX1JFTU9URV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMKaW5kZXggNzI3YWYwNy4uYjFmNDU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYworKysgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbWFpbi5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJTE9HX0lORk8ocHJpdiwgSVJRLCAiQUNLIGJhcmtlciBhcnJpdmVkICIKIAkJCQkiLSBzdGFydGluZyBGVyBkb3dubG9hZFxuIik7CiAJfSBlbHNlIHsgLyogUkVCT09UIGJhcmtlciAqLwotCQlMT0dfSU5GTyhwcml2LCBJUlEsICJSZWNpZXZlZCByZWJvb3QgYmFya2VyOiAleFxuIiwgYmFya2VyKTsKKwkJTE9HX0lORk8ocHJpdiwgSVJRLCAiUmVjZWl2ZWQgcmVib290IGJhcmtlcjogJXhcbiIsIGJhcmtlcik7CiAJCXByaXYtPmJhcmtlciA9IGJhcmtlcjsKIAogCQlpZiAoYmFya2VyICYgQkFSS0VSX0ROTE9BRF9TWU5DX01TSykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2tnZGJ0cy5jIGIvZHJpdmVycy9taXNjL2tnZGJ0cy5jCmluZGV4IDI3ZGM0NjMuLjc0ZjE2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9rZ2RidHMuYworKysgYi9kcml2ZXJzL21pc2Mva2dkYnRzLmMKQEAgLTY0NSw3ICs2NDUsNyBAQAogCiAJd2hpbGUgKCpjaGtfc3RyICE9ICdcMCcgJiYgKnB1dF9zdHIgIT0gJ1wwJykgewogCQkvKiBJZiBzb21lb25lIGRvZXMgYSAqIHRvIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcsIGFsbG93Ci0JCSAqIGl0LCBvciBzdG9wIGlmIHRoZSByZWNpZXZlZCBzdHJpbmcgaXMgY29tcGxldGUuCisJCSAqIGl0LCBvciBzdG9wIGlmIHRoZSByZWNlaXZlZCBzdHJpbmcgaXMgY29tcGxldGUuCiAJCSAqLwogCQlpZiAoKnB1dF9zdHIgPT0gJyMnIHx8ICpjaGtfc3RyID09ICcqJykKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IDIwZTRlOTMuLmVjYWZhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTM0OCwxNSArMzQ4LDE1IEBACiAKIHN0YXRpYyBpbnQgZ3J1X2lycV9jb3VudFtHUlVfQ0hJUExFVFNfUEVSX0JMQURFXTsKIAotc3RhdGljIHZvaWQgZ3J1X25vb3AodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGdydV9ub29wKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncnVfY2hpcFtHUlVfQ0hJUExFVFNfUEVSX0JMQURFXSA9IHsKIAlbMCAuLi4gR1JVX0NISVBMRVRTX1BFUl9CTEFERSAtIDFdIHsKLQkJLm1hc2sJCT0gZ3J1X25vb3AsCi0JCS51bm1hc2sJCT0gZ3J1X25vb3AsCi0JCS5hY2sJCT0gZ3J1X25vb3AKKwkJLmlycV9tYXNrCT0gZ3J1X25vb3AsCisJCS5pcnFfdW5tYXNrCT0gZ3J1X25vb3AsCisJCS5pcnFfYWNrCT0gZ3J1X25vb3AKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCmluZGV4IDM0NzQ5ZWUuLjllOWJkZGFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCWJpZCA9IGJsYWRlX2lkIDwgMCA/IHV2X251bWFfYmxhZGVfaWQoKSA6IGJsYWRlX2lkOwogCWJzID0gZ3J1X2Jhc2VbYmlkXTsKIAotCS8qIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtaWdyYXRpb24gb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgc2VtYSAqLworCS8qIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtaWdyYXRpb24gb2NjdXJyZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHNlbWEgKi8KIAlkb3duX3JlYWQoJmJzLT5ic19rZ3RzX3NlbWEpOwogCWlmIChibGFkZV9pZCA8IDAgJiYgYmlkICE9IHV2X251bWFfYmxhZGVfaWQoKSkgewogCQl1cF9yZWFkKCZicy0+YnNfa2d0c19zZW1hKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKaW5kZXggN2E4YjkwNi4uNWMzY2UyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKQEAgLTM3OSw3ICszNzksNyBAQAogCQkJCQkJICAgcmVxdWlyZWQgZm9yIGNvbnRlc3QgKi8KIAljaGFyCQkJdHNfY2NoX3JlcV9zbGljZTsvKiBDQ0ggcGFja2V0IHNsaWNlICovCiAJY2hhcgkJCXRzX2JsYWRlOwkvKiBJZiA+PSAwLCBtaWdyYXRlIGNvbnRleHQgaWYKLQkJCQkJCSAgIHJlZiBmcm9tIGRpZmVyZW50IGJsYWRlICovCisJCQkJCQkgICByZWYgZnJvbSBkaWZmZXJlbnQgYmxhZGUgKi8KIAljaGFyCQkJdHNfZm9yY2VfY2NoX3JlbG9hZDsKIAljaGFyCQkJdHNfY2JyX2lkeFtHUlVfQ0JSX0FVXTsvKiBDQlIgbnVtYmVycyBvZiBlYWNoCiAJCQkJCQkJICBhbGxvY2F0ZWQgQ0IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9raW0uYyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9raW0uYwppbmRleCA5ZWU0Yzc4Li5iNDQ4OGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGktc3Qvc3Rfa2ltLmMKKysrIGIvZHJpdmVycy9taXNjL3RpLXN0L3N0X2tpbS5jCkBAIC02NDksNyArNjQ5LDcgQEAKIAkJLyogbXVsdGlwbGUgZGV2aWNlcyBjb3VsZCBleGlzdCAqLwogCQlzdF9raW1fZGV2aWNlc1twZGV2LT5pZF0gPSBwZGV2OwogCX0gZWxzZSB7Ci0JCS8qIHBsYXRmb3JtJ3Mgc3VyZSBhYm91dCBleGlzdGFuY2Ugb2YgMSBkZXZpY2UgKi8KKwkJLyogcGxhdGZvcm0ncyBzdXJlIGFib3V0IGV4aXN0ZW5jZSBvZiAxIGRldmljZSAqLwogCQlzdF9raW1fZGV2aWNlc1swXSA9IHBkZXY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKaW5kZXggZjVjZWRlYy4uYWJjMWE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiB9CiAKIC8qCi0gKiBBbGxvY2F0ZSBhIGxvdCBvZiBtZW1vcnksIHByZWZlcnJhYmx5IG1heF9zeiBidXQgYXQgbGVhc3QgbWluX3N6LiAgSW4gY2FzZQorICogQWxsb2NhdGUgYSBsb3Qgb2YgbWVtb3J5LCBwcmVmZXJhYmx5IG1heF9zeiBidXQgYXQgbGVhc3QgbWluX3N6LiAgSW4gY2FzZQogICogdGhlcmUgaXNuJ3QgbXVjaCBtZW1vcnkgZG8gbm90IGV4Y2VlZCAxLzE2dGggdG90YWwgbG93bWVtIHBhZ2VzLiAgQWxzbyBkbwogICogbm90IGV4Y2VlZCBhIG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnRzIGFuZCB0cnkgbm90IHRvIG1ha2Ugc2VnbWVudHMgbXVjaAogICogYmlnZ2VyIHRoYW4gbWF4aW11bSBzZWdtZW50IHNpemUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwppbmRleCA2MzY2N2E4Li5kNmQ2MmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKQEAgLTI4NCw2ICsyODQsNyBAQAogCQl0eXBlID0gIlNELWNvbWJvIjsKIAkJaWYgKG1tY19jYXJkX2Jsb2NrYWRkcihjYXJkKSkKIAkJCXR5cGUgPSAiU0RIQy1jb21ibyI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXR5cGUgPSAiPyI7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKaW5kZXggMTRlOTVmMy4uNzcyZDBkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCkBAIC01MzgsNyArNTM4LDcgQEAKIAogCS8qCiAJICogSWYgZW5oYW5jZWRfYXJlYV9lbiBpcyBUUlVFLCBob3N0IG5lZWRzIHRvIGVuYWJsZSBFUkFTRV9HUlBfREVGCi0JICogYml0LiAgVGhpcyBiaXQgd2lsbCBiZSBsb3N0IGV2ZXJ5dGltZSBhZnRlciBhIHJlc2V0IG9yIHBvd2VyIG9mZi4KKwkgKiBiaXQuICBUaGlzIGJpdCB3aWxsIGJlIGxvc3QgZXZlcnkgdGltZSBhZnRlciBhIHJlc2V0IG9yIHBvd2VyIG9mZi4KIAkgKi8KIAlpZiAoY2FyZC0+ZXh0X2NzZC5lbmhhbmNlZF9hcmVhX2VuKSB7CiAJCWVyciA9IG1tY19zd2l0Y2goY2FyZCwgRVhUX0NTRF9DTURfU0VUX05PUk1BTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKaW5kZXggNjA4NDJmOC4uZjNiMjJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCSAqIHRoYXQgaW4gY2FzZSBvZiBoYXJkd2FyZSB0aGF0IHdvbid0IHB1bGwgdXAgREFUMy9uQ1Mgb3RoZXJ3aXNlLgogCSAqCiAJICogU1BJIGhvc3RzIGlnbm9yZSBpb3MuY2hpcF9zZWxlY3Q7IGl0J3MgbWFuYWdlZCBhY2NvcmRpbmcgdG8KLQkgKiBydWxlcyB0aGF0IG11c3QgYWNjb21vZGF0ZSBub24tTU1DIHNsYXZlcyB3aGljaCB0aGlzIGxheWVyCisJICogcnVsZXMgdGhhdCBtdXN0IGFjY29tbW9kYXRlIG5vbi1NTUMgc2xhdmVzIHdoaWNoIHRoaXMgbGF5ZXIKIAkgKiB3b24ndCBldmVuIGtub3cgYWJvdXQuCiAJICovCiAJaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pcnEuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pcnEuYwppbmRleCBiYjE5MmY5Li5iMzAwMTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9faXJxLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lycS5jCkBAIC00NSw3ICs0NSw3IEBACiAJCQlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gY2FyZC0+c2Rpb19mdW5jW2kgLSAxXTsKIAkJCWlmICghZnVuYykgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBwZW5kaW5nIElSUSBmb3IgIgotCQkJCQkibm9uLWV4aXN0YW50IGZ1bmN0aW9uXG4iLAorCQkJCQkibm9uLWV4aXN0ZW50IGZ1bmN0aW9uXG4iLAogCQkJCQltbWNfY2FyZF9pZChjYXJkKSk7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCX0gZWxzZSBpZiAoZnVuYy0+aXJxX2hhbmRsZXIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IDgwYmM5YTUuLmVhMzg4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAgKiBFVkVOVF9EQVRBX0NPTVBMRVRFIGlzIHNldCBpbiBAcGVuZGluZ19ldmVudHMsIGFsbCBkYXRhLXJlbGF0ZWQKICAqIGludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCBhbmQgQGRhdGFfc3RhdHVzIHVwZGF0ZWQgd2l0aCBhCiAgKiBzbmFwc2hvdCBvZiBTUi4gU2ltaWxhcmx5LCBiZWZvcmUgRVZFTlRfQ01EX0NPTVBMRVRFIGlzIHNldCwgdGhlCi0gKiBDTURSRFkgaW50ZXJ1cHQgbXVzdCBiZSBkaXNhYmxlZCBhbmQgQGNtZF9zdGF0dXMgdXBkYXRlZCB3aXRoIGEKKyAqIENNRFJEWSBpbnRlcnJ1cHQgbXVzdCBiZSBkaXNhYmxlZCBhbmQgQGNtZF9zdGF0dXMgdXBkYXRlZCB3aXRoIGEKICAqIHNuYXBzaG90IG9mIFNSLCBhbmQgYmVmb3JlIEVWRU5UX1hGRVJfQ09NUExFVEUgY2FuIGJlIHNldCwgdGhlCiAgKiBieXRlc194ZmVyZWQgZmllbGQgb2YgQGRhdGEgbXVzdCBiZSB3cml0dGVuLiBUaGlzIGlzIGVuc3VyZWQgYnkKICAqIHVzaW5nIGJhcnJpZXJzLgpAQCAtMTA4Miw3ICsxMDgyLDcgQEAKIAkvKgogCSAqIFVwZGF0ZSB0aGUgTU1DIGNsb2NrIHJhdGUgaWYgbmVjZXNzYXJ5LiBUaGlzIG1heSBiZQogCSAqIG5lY2Vzc2FyeSBpZiBzZXRfaW9zKCkgaXMgY2FsbGVkIHdoZW4gYSBkaWZmZXJlbnQgc2xvdCBpcwotCSAqIGJ1c3kgdHJhbnNmZXJpbmcgZGF0YS4KKwkgKiBidXN5IHRyYW5zZmVycmluZyBkYXRhLgogCSAqLwogCWlmIChob3N0LT5uZWVkX2Nsb2NrX3VwZGF0ZSkgewogCQltY2lfd3JpdGVsKGhvc3QsIE1SLCBob3N0LT5tb2RlX3JlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCmluZGV4IDJmN2ZjMGMuLjdjMWUxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCkBAIC05OSw3ICs5OSw3IEBACiAjZGVmaW5lIHIxYl90aW1lb3V0CQkoSFogKiAzKQogCiAvKiBPbmUgb2YgdGhlIGNyaXRpY2FsIHNwZWVkIHBhcmFtZXRlcnMgaXMgdGhlIGFtb3VudCBvZiBkYXRhIHdoaWNoIG1heQotICogYmUgdHJhbnNmZXJlZCBpbiBvbmUgY29tbWFuZC4gSWYgdGhpcyB2YWx1ZSBpcyB0b28gbG93LCB0aGUgU0QgY2FyZAorICogYmUgdHJhbnNmZXJyZWQgaW4gb25lIGNvbW1hbmQuIElmIHRoaXMgdmFsdWUgaXMgdG9vIGxvdywgdGhlIFNEIGNhcmQKICAqIGNvbnRyb2xsZXIgaGFzIHRvIGRvIG11bHRpcGxlIHBhcnRpYWwgYmxvY2sgd3JpdGVzIChhcmdnZ2ghKS4gV2l0aAogICogdG9kYXkgKDIwMDgpIFNEIGNhcmRzIHRoZXJlIGlzIGxpdHRsZSBzcGVlZCBnYWluIGlmIHdlIHRyYW5zZmVyIG1vcmUKICAqIHRoYW4gNjQgS0J5dGVzIGF0IGEgdGltZS4gU28gdXNlIHRoaXMgdmFsdWUgdW50aWwgdGhlcmUgaXMgYW55IGluZGljYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKaW5kZXggMmUwMzJmMC4uYTZjMzI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKQEAgLTgzMiw3ICs4MzIsNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JaWYgKGVuZF9jb21tYW5kKQorCWlmIChlbmRfY29tbWFuZCAmJiBob3N0LT5jbWQpCiAJCW1tY19vbWFwX2NtZF9kb25lKGhvc3QsIGhvc3QtPmNtZCk7CiAJaWYgKGhvc3QtPmRhdGEgIT0gTlVMTCkgewogCQlpZiAodHJhbnNmZXJfZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwppbmRleCAxY2NkNGIyLi5hMDRmODdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKQEAgLTg3NCw3ICs4NzQsNyBAQAogCWlmICghbXJxLT5kYXRhKQogCQlnb3RvIHJlcXVlc3RfZG9uZTsKIAotCS8qIENhbHVsYXRlIHRoZSBhbW91dCBvZiBieXRlcyB0cmFuc2ZlciBpZiB0aGVyZSB3YXMgbm8gZXJyb3IgKi8KKwkvKiBDYWxjdWxhdGUgdGhlIGFtb3V0IG9mIGJ5dGVzIHRyYW5zZmVyIGlmIHRoZXJlIHdhcyBubyBlcnJvciAqLwogCWlmIChtcnEtPmRhdGEtPmVycm9yID09IDApIHsKIAkJbXJxLT5kYXRhLT5ieXRlc194ZmVyZWQgPQogCQkJKG1ycS0+ZGF0YS0+YmxvY2tzICogbXJxLT5kYXRhLT5ibGtzeik7CkBAIC04ODIsNyArODgyLDcgQEAKIAkJbXJxLT5kYXRhLT5ieXRlc194ZmVyZWQgPSAwOwogCX0KIAotCS8qIElmIHdlIGhhZCBhbiBlcnJvciB3aGlsZSB0cmFuc2ZlcmluZyBkYXRhIHdlIGZsdXNoIHRoZQorCS8qIElmIHdlIGhhZCBhbiBlcnJvciB3aGlsZSB0cmFuc2ZlcnJpbmcgZGF0YSB3ZSBmbHVzaCB0aGUKIAkgKiBETUEgY2hhbm5lbCBhbmQgdGhlIGZpZm8gdG8gY2xlYXIgb3V0IGFueSBnYXJiYWdlLiAqLwogCWlmIChtcnEtPmRhdGEtPmVycm9yICE9IDApIHsKIAkJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKQEAgLTk4MCw3ICs5ODAsNyBAQAogCiAJaWYgKChkYXRhLT5ibGtzeiAmIDMpICE9IDApIHsKIAkJLyogV2UgY2Fubm90IGRlYWwgd2l0aCB1bmFsaWduZWQgYmxvY2tzIHdpdGggbW9yZSB0aGFuCi0JCSAqIG9uZSBibG9jayBiZWluZyB0cmFuc2ZlcmVkLiAqLworCQkgKiBvbmUgYmxvY2sgYmVpbmcgdHJhbnNmZXJyZWQuICovCiAKIAkJaWYgKGRhdGEtPmJsb2NrcyA+IDEpIHsKIAkJCXByX3dhcm5pbmcoIiVzOiBjYW4ndCBkbyBub24td29yZCBzaXplZCBibG9jayB0cmFuc2ZlcnMgKGJsa3N6ICVkKVxuIiwgX19mdW5jX18sIGRhdGEtPmJsa3N6KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IGExMzZiZTcuLmY4YjVmMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtOTU3LDYgKzk1Nyw3IEBACiAJaG9zdC0+aW9hZGRyID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIGJhcik7CiAJaWYgKCFob3N0LT5pb2FkZHIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gcmVsZWFzZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwppbmRleCA5ZTE1ZjQxLi41ZDIwNjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCkBAIC0xMzM0LDYgKzEzMzQsMTMgQEAKIAogCWhvc3QgPSAoc3RydWN0IHNkaGNpX2hvc3QqKXBhcmFtOwogCisgICAgICAgIC8qCisgICAgICAgICAqIElmIHRoaXMgdGFza2xldCBnZXRzIHJlc2NoZWR1bGVkIHdoaWxlIHJ1bm5pbmcsIGl0IHdpbGwKKyAgICAgICAgICogYmUgcnVuIGFnYWluIGFmdGVyd2FyZHMgYnV0IHdpdGhvdXQgYW55IGFjdGl2ZSByZXF1ZXN0LgorICAgICAgICAgKi8KKwlpZiAoIWhvc3QtPm1ycSkKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAogCWRlbF90aW1lcigmaG9zdC0+dGltZXIpOwpAQCAtMTM0NSw3ICsxMzUyLDcgQEAKIAkgKiB1cG9uIGVycm9yIGNvbmRpdGlvbnMuCiAJICovCiAJaWYgKCEoaG9zdC0+ZmxhZ3MgJiBTREhDSV9ERVZJQ0VfREVBRCkgJiYKLQkJKG1ycS0+Y21kLT5lcnJvciB8fAorCSAgICAoKG1ycS0+Y21kICYmIG1ycS0+Y21kLT5lcnJvcikgfHwKIAkJIChtcnEtPmRhdGEgJiYgKG1ycS0+ZGF0YS0+ZXJyb3IgfHwKIAkJICAobXJxLT5kYXRhLT5zdG9wICYmIG1ycS0+ZGF0YS0+c3RvcC0+ZXJyb3IpKSkgfHwKIAkJICAgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX1JFU0VUX0FGVEVSX1JFUVVFU1QpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tY19waW8uYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfcGlvLmMKaW5kZXggNmFlOGQyZi4uNzEwMzM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tY19waW8uYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jCkBAIC0zNTUsNyArMzU1LDcgQEAKIC8qCiAgKiBUaGlzIGNoaXAgYWx3YXlzIHJldHVybnMgKGF0IGxlYXN0PykgYXMgbXVjaCBkYXRhIGFzIHlvdSBhc2sgZm9yLgogICogSSdtIHVuc3VyZSB3aGF0IGhhcHBlbnMgaWYgeW91IGFzayBmb3IgbGVzcyB0aGFuIGEgYmxvY2suIFRoaXMgc2hvdWxkIGJlCi0gKiBsb29rZWQgaW50byB0byBlbnN1cmUgdGhhdCBhIGZ1bm55IGxlbmd0aCByZWFkIGRvZXNudCBob3NlIHRoZSBjb250cm9sbGVyLgorICogbG9va2VkIGludG8gdG8gZW5zdXJlIHRoYXQgYSBmdW5ueSBsZW5ndGggcmVhZCBkb2Vzbid0IGhvc2UgdGhlIGNvbnRyb2xsZXIuCiAgKi8KIHN0YXRpYyB2b2lkIHRtaW9fbW1jX3Bpb19pcnEoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCiB7CkBAIC03MjgsMTUgKzcyOCwxNSBAQAogCQl0bWlvX21tY19zZXRfY2xvY2soaG9zdCwgaW9zLT5jbG9jayk7CiAKIAkvKiBQb3dlciBzZXF1ZW5jZSAtIE9GRiAtPiBVUCAtPiBPTiAqLwotCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRiB8fCAhaW9zLT5jbG9jaykgeworCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKSB7CisJCS8qIHBvd2VyIHVwIFNEIGJ1cyAqLworCQlpZiAoaG9zdC0+c2V0X3B3cikKKwkJCWhvc3QtPnNldF9wd3IoaG9zdC0+cGRldiwgMSk7CisJfSBlbHNlIGlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRiB8fCAhaW9zLT5jbG9jaykgewogCQkvKiBwb3dlciBkb3duIFNEIGJ1cyAqLwogCQlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYgJiYgaG9zdC0+c2V0X3B3cikKIAkJCWhvc3QtPnNldF9wd3IoaG9zdC0+cGRldiwgMCk7CiAJCXRtaW9fbW1jX2Nsa19zdG9wKGhvc3QpOwotCX0gZWxzZSBpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9VUCkgewotCQkvKiBwb3dlciB1cCBTRCBidXMgKi8KLQkJaWYgKGhvc3QtPnNldF9wd3IpCi0JCQlob3N0LT5zZXRfcHdyKGhvc3QtPnBkZXYsIDEpOwogCX0gZWxzZSB7CiAJCS8qIHN0YXJ0IGJ1cyBjbG9jayAqLwogCQl0bWlvX21tY19jbGtfc3RhcnQoaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3dic2QuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvd2JzZC5jCmluZGV4IDdmY2EwYTMuLjYyZTVhNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvd2JzZC5jCkBAIC00ODQsNyArNDg0LDcgQEAKIAogCS8qCiAJICogQ2hlY2sgdGhhdCB3ZSBhcmVuJ3QgYmVpbmcgY2FsbGVkIGFmdGVyIHRoZQotCSAqIGVudGlyZSBidWZmZXIgaGFzIGJlZW4gdHJhbnNmZXJlZC4KKwkgKiBlbnRpcmUgYnVmZmVyIGhhcyBiZWVuIHRyYW5zZmVycmVkLgogCSAqLwogCWlmIChob3N0LT5udW1fc2cgPT0gMCkKIAkJcmV0dXJuOwpAQCAtODI4LDcgKzgyOCw3IEBACiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgZGF0YSB0cmFuc2ZlciB0aGUgcmVxdWVzdAogCSAqIHdpbGwgYmUgZmluaXNoZWQgYWZ0ZXIgdGhlIGRhdGEgaGFzCi0JICogdHJhbnNmZXJlZC4KKwkgKiB0cmFuc2ZlcnJlZC4KIAkgKi8KIAlpZiAoY21kLT5kYXRhICYmICFjbWQtPmVycm9yKSB7CiAJCS8qCkBAIC05MDQsNyArOTA0LDcgQEAKIAkJCXNldHVwICY9IH5XQlNEX0RBVDNfSDsKIAogCQkJLyoKLQkJCSAqIFdlIGNhbm5vdCByZXN1bWUgY2FyZCBkZXRlY3Rpb24gaW1tZWRpYXRseQorCQkJICogV2UgY2Fubm90IHJlc3VtZSBjYXJkIGRldGVjdGlvbiBpbW1lZGlhdGVseQogCQkJICogYmVjYXVzZSBvZiBjYXBhY2l0YW5jZSBhbmQgZGVsYXlzIGluIHRoZSBjaGlwLgogCQkJICovCiAJCQltb2RfdGltZXIoJmhvc3QtPmlnbm9yZV90aW1lciwgamlmZmllcyArIEhaIC8gMTAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCmluZGV4IDM1YzZhMjMuLmIxZTNjMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwpAQCAtMTksNyArMTksNyBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgSkVERUMtc3R5bGUgcHJvYmluZyBvZiBmbGFzaCBjaGlwcyB3aGljaCBhcmUgbm90CiAJICBjb21wYXRpYmxlIHdpdGggdGhlIENvbW1vbiBGbGFzaCBJbnRlcmZhY2UsIGJ1dCB3aWxsIHVzZSB0aGUgY29tbW9uCi0JICBDRkktdGFyZ2V0dGVkIGZsYXNoIGRyaXZlcnMgZm9yIGFueSBjaGlwcyB3aGljaCBhcmUgaWRlbnRpZmllZCB3aGljaAorCSAgQ0ZJLXRhcmdldGVkIGZsYXNoIGRyaXZlcnMgZm9yIGFueSBjaGlwcyB3aGljaCBhcmUgaWRlbnRpZmllZCB3aGljaAogCSAgYXJlIGluIGZhY3QgY29tcGF0aWJsZSBpbiBhbGwgYnV0IHRoZSBwcm9iZSBtZXRob2QuIFRoaXMgYWN0dWFsbHkKIAkgIGNvdmVycyBtb3N0IEFNRC9GdWppdHN1LWNvbXBhdGlibGUgY2hpcHMgYW5kIGFsc28gbm9uLUNGSQogCSAgSW50ZWwgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCmluZGV4IDA5MmFlZjEuLjA5Y2I3YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCkBAIC0xMjQ3LDEyICsxMjQ3LDEyIEBACiAJCQlicmVhazsKIAogCQlpZiAoY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkICYmIGNoaXBfc3RhdGUgPT0gRkxfRVJBU0lORykgIHsKLQkJCS8qIEVyYXNlIHN1c3BlbmQgb2NjdXJlZCB3aGlsZSBzbGVlcDogcmVzZXQgdGltZW91dCAqLworCQkJLyogRXJhc2Ugc3VzcGVuZCBvY2N1cnJlZCB3aGlsZSBzbGVlcDogcmVzZXQgdGltZW91dCAqLwogCQkJdGltZW8gPSByZXNldF90aW1lbzsKIAkJCWNoaXAtPmVyYXNlX3N1c3BlbmRlZCA9IDA7CiAJCX0KIAkJaWYgKGNoaXAtPndyaXRlX3N1c3BlbmRlZCAmJiBjaGlwX3N0YXRlID09IEZMX1dSSVRJTkcpICB7Ci0JCQkvKiBXcml0ZSBzdXNwZW5kIG9jY3VyZWQgd2hpbGUgc2xlZXA6IHJlc2V0IHRpbWVvdXQgKi8KKwkJCS8qIFdyaXRlIHN1c3BlbmQgb2NjdXJyZWQgd2hpbGUgc2xlZXA6IHJlc2V0IHRpbWVvdXQgKi8KIAkJCXRpbWVvID0gcmVzZXRfdGltZW87CiAJCQljaGlwLT53cml0ZV9zdXNwZW5kZWQgPSAwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCmluZGV4IGY5YTUzMzEuLjBiNDkyNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKIAogCS8qCi0JICogVGhlc2UgZmxhc2hlcyByZXBvcnQgdHdvIHNlcGVyYXRlIGVyYXNlYmxvY2sgcmVnaW9ucyBiYXNlZCBvbiB0aGUKKwkgKiBUaGVzZSBmbGFzaGVzIHJlcG9ydCB0d28gc2VwYXJhdGUgZXJhc2VibG9jayByZWdpb25zIGJhc2VkIG9uIHRoZQogCSAqIHNlY3Rvcl9lcmFzZS1zaXplIGFuZCBibG9ja19lcmFzZS1zaXplLCBhbHRob3VnaCB0aGV5IGJvdGggb3BlcmF0ZSBvbiB0aGUKIAkgKiBzYW1lIG1lbW9yeS4gVGhpcyBpcyBub3QgYWxsb3dlZCBhY2NvcmRpbmcgdG8gQ0ZJLCBzbyB3ZSBqdXN0IHBpY2sgdGhlCiAJICogc2VjdG9yX2VyYXNlLXNpemUuCkBAIC02MTEsOCArNjExLDggQEAKICAqCiAgKiBOb3RlIHRoYXQgYW55dGhpbmcgbW9yZSBjb21wbGljYXRlZCB0aGFuIGNoZWNraW5nIGlmIG5vIGJpdHMgYXJlIHRvZ2dsaW5nCiAgKiAoaW5jbHVkaW5nIGNoZWNraW5nIERRNSBmb3IgYW4gZXJyb3Igc3RhdHVzKSBpcyB0cmlja3kgdG8gZ2V0IHdvcmtpbmcKLSAqIGNvcnJlY3RseSBhbmQgaXMgdGhlcmVmb3JlIG5vdCBkb25lCShwYXJ0aWN1bGFyeSB3aXRoIGludGVybGVhdmVkIGNoaXBzCi0gKiBhcyBlYWNoIGNoaXAgbXVzdCBiZSBjaGVja2VkIGluZGVwZW5kYW50bHkgb2YgdGhlIG90aGVycykuCisgKiBjb3JyZWN0bHkgYW5kIGlzIHRoZXJlZm9yZSBub3QgZG9uZQkocGFydGljdWxhcmx5IHdpdGggaW50ZXJsZWF2ZWQgY2hpcHMKKyAqIGFzIGVhY2ggY2hpcCBtdXN0IGJlIGNoZWNrZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgb3RoZXJzKS4KICAqLwogc3RhdGljIGludCBfX3hpcHJhbSBjaGlwX3JlYWR5KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC02MzUsOCArNjM1LDggQEAKICAqCiAgKiBOb3RlIHRoYXQgYW55dGhpbmcgbW9yZSBjb21wbGljYXRlZCB0aGFuIGNoZWNraW5nIGlmIG5vIGJpdHMgYXJlIHRvZ2dsaW5nCiAgKiAoaW5jbHVkaW5nIGNoZWNraW5nIERRNSBmb3IgYW4gZXJyb3Igc3RhdHVzKSBpcyB0cmlja3kgdG8gZ2V0IHdvcmtpbmcKLSAqIGNvcnJlY3RseSBhbmQgaXMgdGhlcmVmb3JlIG5vdCBkb25lCShwYXJ0aWN1bGFyeSB3aXRoIGludGVybGVhdmVkIGNoaXBzCi0gKiBhcyBlYWNoIGNoaXAgbXVzdCBiZSBjaGVja2VkIGluZGVwZW5kYW50bHkgb2YgdGhlIG90aGVycykuCisgKiBjb3JyZWN0bHkgYW5kIGlzIHRoZXJlZm9yZSBub3QgZG9uZQkocGFydGljdWxhcmx5IHdpdGggaW50ZXJsZWF2ZWQgY2hpcHMKKyAqIGFzIGVhY2ggY2hpcCBtdXN0IGJlIGNoZWNrZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgb3RoZXJzKS4KICAqCiAgKi8KIHN0YXRpYyBpbnQgX194aXByYW0gY2hpcF9nb29kKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIGFkZHIsIG1hcF93b3JkIGV4cGVjdGVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKaW5kZXggNmFlM2QxMS4uOGU0NjQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvbW1vbiBGbGFzaCBJbnRlcmZhY2Ugc3VwcG9ydDoKLSAqICAgR2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucyBub3QgZGVwZW5kYW50IG9uIGNvbW1hbmQgc2V0CisgKiAgIEdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMgbm90IGRlcGVuZGVudCBvbiBjb21tYW5kIHNldAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiBSZWQgSGF0CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgU1RNaWNyb2VsZWN0cm9uaWNzIExpbWl0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCmluZGV4IDRlMWJlNTEuLmVhODMyZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYwpAQCAtMjA3NSw3ICsyMDc1LDcgQEAKIAl9CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgSUQncyBkaXNzYXBwZWFyIHdoZW4gdGhlIGRldmljZSBpcyB0YWtlbiBvdXQgb2YKKwkgKiBNYWtlIHN1cmUgdGhlIElEJ3MgZGlzYXBwZWFyIHdoZW4gdGhlIGRldmljZSBpcyB0YWtlbiBvdXQgb2YKIAkgKiBJRCBtb2RlLiAgVGhlIG9ubHkgdGltZSB0aGlzIHNob3VsZCBmYWlsIHdoZW4gaXQgc2hvdWxkIHN1Y2NlZWQKIAkgKiBpcyB3aGVuIHRoZSBJRCdzIGFyZSB3cml0dGVuIGFzIGRhdGEgdG8gdGhlIHNhbWUKIAkgKiBhZGRyZXNzZXMuICBGb3IgdGhpcyByYXJlIGFuZCB1bmZvcnR1bmF0ZSBjYXNlIHRoZSBjaGlwCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwppbmRleCBmMjlhNmY5Li45NzE4M2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCWRldi0+bXRkLm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlpZiAoYWRkX210ZF9kZXZpY2UoJmRldi0+bXRkKSkgewotCQkvKiBEZXZpY2UgZGlkbnQgZ2V0IGFkZGVkLCBzbyBmcmVlIHRoZSBlbnRyeSAqLworCQkvKiBEZXZpY2UgZGlkbid0IGdldCBhZGRlZCwgc28gZnJlZSB0aGUgZW50cnkgKi8KIAkJZ290byBkZXZpbml0X2VycjsKIAl9CiAJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmJsa210ZF9kZXZpY2VfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMKaW5kZXggNzE5YjI5MS4uOGIzNmZhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxcGx1cy5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYwpAQCAtOTAsNyArOTAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIEZvciBzb21lIHJlYXNvbiB0aGUgTWlsbGVubml1bSBQbHVzIHNlZW1zIHRvIG9jY2Fzc2lvbmFsbHkgcHV0IGl0c2VsZgorLyogRm9yIHNvbWUgcmVhc29uIHRoZSBNaWxsZW5uaXVtIFBsdXMgc2VlbXMgdG8gb2NjYXNpb25hbGx5IHB1dCBpdHNlbGYKICAqIGludG8gcmVzZXQgbW9kZS4gRm9yIG1lIHRoaXMgaGFwcGVucyByYW5kb21seSwgd2l0aCBubyBwYXR0ZXJuIHRoYXQgSQogICogY2FuIGRldGVjdC4gTS1zeXN0ZW1zIHN1Z2dlc3QgYWx3YXlzIGNoZWNrIHRoaXMgb24gYW55IGJsb2NrIGxldmVsCiAgKiBvcGVyYXRpb24gYW5kIHNldHRpbmcgdG8gbm9ybWFsIG1vZGUgaWYgaW4gcmVzZXQgbW9kZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jZWNjLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY2VjYy5jCmluZGV4IGE5OTgzOGIuLjM3ZWYyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jZWNjLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NlY2MuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICBvZiB0aGUgaW50ZWdlciAiYWxwaGFfdG9baV0iIHdpdGggYSgwKSBiZWluZyB0aGUgTFNCIGFuZCBhKG0tMSkgdGhlIE1TQi4gVGh1cyBmb3IKICAgIGV4YW1wbGUgdGhlIHBvbHlub21pYWwgcmVwcmVzZW50YXRpb24gb2YgQF41IHdvdWxkIGJlIGdpdmVuIGJ5IHRoZSBiaW5hcnkKICAgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnRlZ2VyICJhbHBoYV90b1s1XSIuCi0gICAgICAgICAgICAgICAgICAgU2ltaWxhcmlseSwgaW5kZXhfb2ZbXSBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgIFNpbWlsYXJseSwgaW5kZXhfb2ZbXSBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOgogICAgICAgICBBcyBhYm92ZSwgbGV0IEAgcmVwcmVzZW50IHRoZSBwcmltaXRpdmUgZWxlbWVudCBvZiBHRigyXm0pIHRoYXQgaXMKICAgIHRoZSByb290IG9mIHRoZSBwcmltaXRpdmUgcG9seW5vbWlhbCBwKHgpLiBJbiBvcmRlciB0byBmaW5kIHRoZSBwb3dlcgogICAgb2YgQCAoYWxwaGEpIHRoYXQgaGFzIHRoZSBwb2x5bm9taWFsIHJlcHJlc2VudGF0aW9uCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgIE5PVEU6CiAgICAgICAgIFRoZSBlbGVtZW50IGFscGhhX3RvWzJebS0xXSA9IDAgYWx3YXlzIHNpZ25pZnlpbmcgdGhhdCB0aGUKICAgIHJlcHJlc2VudGF0aW9uIG9mICJAXmluZmluaXR5IiA9IDAgaXMgKDAsMCwwLC4uLiwwKS4KLSAgICAgICAgU2ltaWxhcmlseSwgdGhlIGVsZW1lbnQgaW5kZXhfb2ZbMF0gPSBBMCBhbHdheXMgc2lnbmlmeWluZworICAgICAgICBTaW1pbGFybHksIHRoZSBlbGVtZW50IGluZGV4X29mWzBdID0gQTAgYWx3YXlzIHNpZ25pZnlpbmcKICAgIHRoYXQgdGhlIHBvd2VyIG9mIGFscGhhIHdoaWNoIGhhcyB0aGUgcG9seW5vbWlhbCByZXByZXNlbnRhdGlvbgogICAgKDAsMCwuLi4sMCkgaXMgImluZmluaXR5Ii4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2xhcnQuYwppbmRleCBjYWY2MDQxLi40YjgyOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2xhcnQuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2xhcnQuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAgICAvKiBwdXQgdGhlIGZsYXNoIGJhY2sgaW50byBjb21tYW5kIG1vZGUgKi8KICAgIHdyaXRlMzIgKERBVEFfVE9fRkxBU0ggKFJFQURfQVJSQVkpLG9mZnNldCk7CiAKLSAgIC8qIHdhcyB0aGUgZXJhc2Ugc3VjY2Vzc2Z1bGw/ICovCisgICAvKiB3YXMgdGhlIGVyYXNlIHN1Y2Nlc3NmdWw/ICovCiAgICBpZiAoKHN0YXR1cyAmIFNUQVRVU19FUkFTRV9FUlIpKQogCSB7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogZXJhc2UgZXJyb3IgYXQgYWRkcmVzcyAweCUuOHguXG4iLG1vZHVsZV9uYW1lLG9mZnNldCk7CkBAIC01MDgsNyArNTA4LDcgQEAKICAgIC8qIHB1dCB0aGUgZmxhc2ggYmFjayBpbnRvIGNvbW1hbmQgbW9kZSAqLwogICAgd3JpdGUzMiAoREFUQV9UT19GTEFTSCAoUkVBRF9BUlJBWSksb2Zmc2V0KTsKIAotICAgLyogd2FzIHRoZSB3cml0ZSBzdWNjZXNzZnVsbD8gKi8KKyAgIC8qIHdhcyB0aGUgd3JpdGUgc3VjY2Vzc2Z1bD8gKi8KICAgIGlmICgoc3RhdHVzICYgU1RBVFVTX1BHTV9FUlIpIHx8IHJlYWQzMiAob2Zmc2V0KSAhPSB4KQogCSB7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogd3JpdGUgZXJyb3IgYXQgYWRkcmVzcyAweCUuOHguXG4iLG1vZHVsZV9uYW1lLG9mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwppbmRleCBlZjBhYmEwLi40MWI4Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKQEAgLTM1MSw3ICszNTEsNyBAQAogICogRml4dXAgcm91dGluZXMgZm9yIHRoZSBWMzcwUERDCiAgKiBQQ0kgZGV2aWNlIElEIDB4MDIwMDExYjAKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGJhc2ljbHkga2ljayBzdGFydHMgdGhlIERSQU0gb2JvYXJkIHRoZSBjYXJkIGFuZCBnZXRzIGl0CisgKiBUaGlzIGZ1bmN0aW9uIGJhc2ljYWxseSBraWNrIHN0YXJ0cyB0aGUgRFJBTSBvYm9hcmQgdGhlIGNhcmQgYW5kIGdldHMgaXQKICAqIHJlYWR5IHRvIGJlIHVzZWQuICBCZWZvcmUgdGhpcyBpcyBkb25lIHRoZSBkZXZpY2UgcmVhZHMgVkVSWSBlcnJhdGljLCBzbwogICogbXVjaCB0aGF0IGl0IGNhbiBjcmFzaCB0aGUgTGludXggMi4yLnggc2VyaWVzIGtlcm5lbHMgd2hlbiBhIHVzZXIgY2F0J3MKICAqIC9wcm9jL3BjaSAuLiB0aG91Z2ggdGhhdCBpcyBtYWlubHkgYSBrZXJuZWwgYnVnIGluIGhhbmRsaW5nIHRoZSBQQ0kgREVWU0VMCkBAIC01NDAsNyArNTQwLDcgQEAKIAogCS8qCiAJICogQ2hlY2sgdG8gbWFrZSBjZXJ0YWluIHRoZSBERVZTRUwgaXMgc2V0IGNvcnJlY3RseSwgdGhpcyBkZXZpY2UKLQkgKiBoYXMgYSB0ZW5kYW5jeSB0byBhc3NlcnQgREVWU0VMIGFuZCBUUkRZIHdoZW4gYSB3cml0ZSBpcyBwZXJmb3JtZWQKKwkgKiBoYXMgYSB0ZW5kZW5jeSB0byBhc3NlcnQgREVWU0VMIGFuZCBUUkRZIHdoZW4gYSB3cml0ZSBpcyBwZXJmb3JtZWQKIAkgKiB0byB0aGUgbWVtb3J5IHdoZW4gbWVtb3J5IGlzIHJlYWQtb25seQogCSAqLwogCWlmICgoY21kICYgUENJX1NUQVRVU19ERVZTRUxfTUFTSykgIT0gMHgwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9scGRkci9scGRkcl9jbWRzLmMgYi9kcml2ZXJzL210ZC9scGRkci9scGRkcl9jbWRzLmMKaW5kZXggMDRmZGZjYy4uMTI2Nzk5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbHBkZHIvbHBkZHJfY21kcy5jCisrKyBiL2RyaXZlcnMvbXRkL2xwZGRyL2xwZGRyX2NtZHMuYwpAQCAtMyw3ICszLDcgQEAKICAqIGVyYXNlLCBsb2NrL3VubG9jayBzdXBwb3J0IGZvciBMUEREUiBmbGFzaCBtZW1vcmllcwogICogKEMpIDIwMDggS29yb2xldiBBbGV4ZXkgPGFrb3JvbGV2QGluZnJhZGVhZC5vcmc+CiAgKiAoQykgMjAwOCBWYXNpbGl5IExlb25lbmtvIDx2YXNpbGl5Lmxlb25lbmtvQGdtYWlsLmNvbT4KLSAqIE1hbnkgdGhhbmtzIHRvIFJvbWFuIEJvcmlzb3YgZm9yIGludGlhbCBlbmFibGluZworICogTWFueSB0aGFua3MgdG8gUm9tYW4gQm9yaXNvdiBmb3IgaW5pdGlhbCBlbmFibGluZwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKIAkJfQogCQlpZiAoY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkIHx8IGNoaXAtPndyaXRlX3N1c3BlbmRlZCkgIHsKLQkJCS8qIFN1c3BlbmQgaGFzIG9jY3VyZWQgd2hpbGUgc2xlZXA6IHJlc2V0IHRpbWVvdXQgKi8KKwkJCS8qIFN1c3BlbmQgaGFzIG9jY3VycmVkIHdoaWxlIHNsZWVwOiByZXNldCB0aW1lb3V0ICovCiAJCQl0aW1lbyA9IHJlc2V0X3RpbWVvOwogCQkJY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkID0gY2hpcC0+d3JpdGVfc3VzcGVuZGVkID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9jZWl2YS5jIGIvZHJpdmVycy9tdGQvbWFwcy9jZWl2YS5jCmluZGV4IGU1ZjY0NWIuLjIzZjU1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvY2VpdmEuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2NlaXZhLmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqCiAgKiBQbGVhc2Ugbm90ZToKICAqICAxLiBUaGUgZmxhc2ggc2l6ZSBnaXZlbiBzaG91bGQgYmUgdGhlIGxhcmdlc3QgZmxhc2ggc2l6ZSB0aGF0IGNhbgotICogICAgIGJlIGFjY29tb2RhdGVkLgorICogICAgIGJlIGFjY29tbW9kYXRlZC4KICAqCiAgKiAgMi4gVGhlIGJ1cyB3aWR0aCBtdXN0IGRlZmluZWQgaW4gY2xwc19zZXR1cF9mbGFzaC4KICAqCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIEJPT1RfUEFSVElUSU9OX1NJWkVfS2lCICAgICAgICgxNikKICNkZWZpbmUgUEFSQU1TX1BBUlRJVElPTl9TSVpFX0tpQiAgICAgKDgpCiAjZGVmaW5lIEtFUk5FTF9QQVJUSVRJT05fU0laRV9LaUIgICAgICg0KjEyOCkKLS8qIFVzZSBib3RoIHJlbWFpbmcgcG9ydGlvbiBvZiBmaXJzdCBmbGFzaCwgYW5kIGFsbCBvZiBzZWNvbmQgZmxhc2ggKi8KKy8qIFVzZSBib3RoIHJlbWFpbmluZyBwb3J0aW9uIG9mIGZpcnN0IGZsYXNoLCBhbmQgYWxsIG9mIHNlY29uZCBmbGFzaCAqLwogI2RlZmluZSBST09UX1BBUlRJVElPTl9TSVpFX0tpQiAgICAgICAoMyoxMjgpICsgKDgqMTI4KQogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY2VpdmFfcGFydGl0aW9uc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jCmluZGV4IGI0ZWQ4MTYuLmY3MTM0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogCiAvKiBXZSBzcGxpdCB0aGUgZmxhc2ggY2hpcCB1cCBpbnRvIGZvdXIgcGFydHMuCi0gKiAxOiBib290bG9hZGVyIGZpcnRzIDEyOGsJCQkoMHgwMDAwMDAwMCAtIDB4MDAwMUZGRkYpIHNpemUgMHgwMjAwMDAKKyAqIDE6IGJvb3Rsb2FkZXIgZmlyc3QgMTI4awkJCSgweDAwMDAwMDAwIC0gMHgwMDAxRkZGRikgc2l6ZSAweDAyMDAwMAogICogMjoga2VybmVsIDY0MGsJCQkJCSgweDAwMDIwMDAwIC0gMHgwMDBCRkZGRikgc2l6ZSAweDBBMDAwMAogICogMzogY29tcHJlc3NlZCAxNTM2ayByb290IHJhbWRpc2sJKDB4MDAwQzAwMDAgLSAweDAwMjNGRkZGKSBzaXplIDB4MTgwMDAwCiAgKiA0OiB3cml0ZWFibGUgZGlza3BhcnRpdGlvbiAoamZmcykoMHgwMDI0MDAwMCAtIDB4MDAzRkZGRkYpIHNpemUgMHgxQzAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCmluZGV4IDkxNzAyMjkuLjY3OTllNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJCWRldi0+cGNtY2lhX21hcC5zZXRfdnBwID0gcGNtY2lhbXRkX3NldF92cHA7CiAKIAkvKiBSZXF1ZXN0IGEgbWVtb3J5IHdpbmRvdyBmb3IgUENNQ0lBLiBTb21lIGFyY2hpdGV1cmVzIGNhbiBtYXAgd2luZG93cwotCSAqIHVwdG8gdGhlIG1heGltdW0gdGhhdCBQQ01DSUEgY2FuIHN1cHBvcnQgKDY0TWlCKSAtIHRoaXMgaXMgaWRlYWwgYW5kCisJICogdXAgdG8gdGhlIG1heGltdW0gdGhhdCBQQ01DSUEgY2FuIHN1cHBvcnQgKDY0TWlCKSAtIHRoaXMgaXMgaWRlYWwgYW5kCiAJICogd2UgYWltIGZvciBhIHdpbmRvdyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgY2FyZCAtIG90aGVyd2lzZSB3ZSB0cnkKIAkgKiBzbWFsbGVyIHdpbmRvd3MgdW50aWwgd2Ugc3VjY2VlZAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wbWNtc3AtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvcG1jbXNwLWZsYXNoLmMKaW5kZXggYWNiMTNmYS4uNjRhZWE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wbWNtc3AtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BtY21zcC1mbGFzaC5jCkBAIC0zLDcgKzMsNyBAQAogICogQ29uZmlnIHdpdGggYm90aCBDRkkgYW5kIEpFREVDIGRldmljZSBzdXBwb3J0LgogICoKICAqIEJhc2ljYWxseSBwaHlzbWFwLmMgd2l0aCB0aGUgYWRkaXRpb24gb2YgcGFydGl0aW9ucyBhbmQKLSAqIGFuIGFycmF5IG9mIG1hcHBpbmcgaW5mbyB0byBhY2NvbW9kYXRlIG1vcmUgdGhhbiBvbmUgZmxhc2ggdHlwZSBwZXIgYm9hcmQuCisgKiBhbiBhcnJheSBvZiBtYXBwaW5nIGluZm8gdG8gYWNjb21tb2RhdGUgbW9yZSB0aGFuIG9uZSBmbGFzaCB0eXBlIHBlciBib2FyZC4KICAqCiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA3IFBNQy1TaWVycmEsIEluYy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMKaW5kZXggODVjMWU1Ni4uNGQ4YWFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2M1MjBjZHAuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJfQogCiAJLyoKLQkqKiBGaW5kIHRoZSBQQVJ4eCByZWdpc3RlcnMgdGhhdCBhcmUgcmVwb25zaWJsZSBmb3IgYWN0aXZhdGluZworCSoqIEZpbmQgdGhlIFBBUnh4IHJlZ2lzdGVycyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgYWN0aXZhdGluZwogCSoqIFJPTUNTMCwgUk9NQ1MxIGFuZCBCT09UQ1MuIFJlcHJvZ3JhbSBlYWNoIG9mIHRoZXNlIHdpdGggYQogCSoqIG5ldyB2YWx1ZSBmcm9tIHRoZSB0YWJsZS4KIAkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMgYi9kcml2ZXJzL210ZC9tYXBzL3RxbTh4eGwuYwppbmRleCBjMDhlMTQwLi4wNzE4ZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3RxbTh4eGwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3RxbTh4eGwuYwpAQCAtNjMsNyArNjMsNyBAQAogICovCiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKLS8qIEN1cnJlbnRseSwgVFFNOHh4TCBoYXMgdXB0byA4TWlCIGZsYXNoICovCisvKiBDdXJyZW50bHksIFRRTTh4eEwgaGFzIHVwIHRvIDhNaUIgZmxhc2ggKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRxbTh4eGxfbWF4X2ZsYXNoX3NpemUgPSAweDAwODAwMDAwOwogCiAvKiBwYXJ0aXRpb24gZGVmaW5pdGlvbiBmb3IgZmlyc3QgZmxhc2ggYmFuawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkYmxvY2suYyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKaW5kZXggMWU3NGFkOS4uMzMyNjYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkYmxvY2suYworKysgYi9kcml2ZXJzL210ZC9tdGRibG9jay5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qCi0JICogSGVyZSB3ZSBjb3VsZCBhcmd1Ymx5IHNldCB0aGUgY2FjaGUgc3RhdGUgdG8gU1RBVEVfQ0xFQU4uCisJICogSGVyZSB3ZSBjb3VsZCBhcmd1YWJseSBzZXQgdGhlIGNhY2hlIHN0YXRlIHRvIFNUQVRFX0NMRUFOLgogCSAqIEhvd2V2ZXIgdGhpcyBjb3VsZCBsZWFkIHRvIGluY29uc2lzdGVuY3kgc2luY2Ugd2Ugd2lsbCBub3QKIAkgKiBiZSBub3RpZmllZCBpZiB0aGlzIGNvbnRlbnQgaXMgYWx0ZXJlZCBvbiB0aGUgZmxhc2ggYnkgb3RoZXIKIAkgKiBtZWFucy4gIExldCdzIGRlY2xhcmUgaXQgZW1wdHkgYW5kIGxlYXZlIGJ1ZmZlcmluZyB0YXNrcyB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IDE0NWIzZDBkLi40YzM2ZWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAkJICogdGhlIGRhdGEuIEZvciBvdXIgdXNlcnNwYWNlIHRvb2xzIGl0IGlzIGltcG9ydGFudAogCQkgKiB0byBkdW1wIGFyZWFzIHdpdGggZWNjIGVycm9ycyAhCiAJCSAqIEZvciBrZXJuZWwgaW50ZXJuYWwgdXNhZ2UgaXQgYWxzbyBtaWdodCByZXR1cm4gLUVVQ0xFQU4KLQkJICogdG8gc2lnbmFsIHRoZSBjYWxsZXIgdGhhdCBhIGJpdGZsaXAgaGFzIG9jY3VyZWQgYW5kIGhhcworCQkgKiB0byBzaWduYWwgdGhlIGNhbGxlciB0aGF0IGEgYml0ZmxpcCBoYXMgb2NjdXJyZWQgYW5kIGhhcwogCQkgKiBiZWVuIGNvcnJlY3RlZCBieSB0aGUgRUNDIGFsZ29yaXRobS4KIAkJICogVXNlcnNwYWNlIHNvZnR3YXJlIHdoaWNoIGFjY2Vzc2VzIE5BTkQgdGhpcyB3YXkKIAkJICogbXVzdCBiZSBhd2FyZSBvZiB0aGUgZmFjdCB0aGF0IGl0IGRlYWxzIHdpdGggTkFORApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkc3dhcC5jIGIvZHJpdmVycy9tdGQvbXRkc3dhcC5jCmluZGV4IDIzNzkxM2MuLmZlZDIxNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZHN3YXAuYworKysgYi9kcml2ZXJzL210ZC9tdGRzd2FwLmMKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAJb2luZm8gPSBtdGQtPmVjY2xheW91dDsKIAlpZiAoIW10ZC0+b29ic2l6ZSB8fCAhb2luZm8gfHwgb2luZm8tPm9vYmF2YWlsIDwgTVREU1dBUF9PT0JTSVpFKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vdCBlbm91Z2ggZnJlZSBieXRlcyBpbiBPT0IsICIKLQkJCSIlZCBhdmFpbGFibGUsICVsdSBuZWVkZWQuXG4iLAorCQkJIiVkIGF2YWlsYWJsZSwgJXp1IG5lZWRlZC5cbiIsCiAJCQlNVERTV0FQX1BSRUZJWCwgb2luZm8tPm9vYmF2YWlsLCBNVERTV0FQX09PQlNJWkUpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IGE5MjA1NGUuLmVkZWM0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTIzOSw3ICsyMzksNyBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIHRoZSBCQ00gVU1JIGJsb2NrLgogCi0JICBObyBib2FyZCBzcGVjZmljIHN1cHBvcnQgaXMgZG9uZSBieSB0aGlzIGRyaXZlciwgZWFjaCBib2FyZAorCSAgTm8gYm9hcmQgc3BlY2lmaWMgc3VwcG9ydCBpcyBkb25lIGJ5IHRoaXMgZHJpdmVyLCBlYWNoIGJvYXJkCiAJICBtdXN0IGFkdmVydGlzZSBhIHBsYXRmb3JtX2RldmljZSBmb3IgdGhlIGRyaXZlciB0byBhdHRhY2guCiAKIGNvbmZpZyBNVERfTkFORF9CQ01fVU1JX0hXQ1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMgYi9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jCmluZGV4IGEwNjdkMDkuLmJjNjViZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJCQkJCSAgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05DRSB8CiAJCQkJCSAgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05XUCk7CiAKLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KIAlpZiAobmFuZF9zY2FuKGFtc19kZWx0YV9tdGQsIDEpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXRfbXRkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwppbmRleCA2ZmFlMDRiLi45NTA2NDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwpAQCAtMjA5LDIyICsyMDksOCBAQAogCWludCBlcnIgPSAtRUlPOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IGlzX3JlYWQgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFOwogCi0JaWYgKGJ1ZiA+PSBoaWdoX21lbW9yeSkgewotCQlzdHJ1Y3QgcGFnZSAqcGc7Ci0KLQkJaWYgKCgoc2l6ZV90KWJ1ZiAmIFBBR0VfTUFTSykgIT0KLQkJICAgICgoc2l6ZV90KShidWYgKyBsZW4gLSAxKSAmIFBBR0VfTUFTSykpIHsKLQkJCWRldl93YXJuKGhvc3QtPmRldiwgIkJ1ZmZlciBub3QgZml0IGluIG9uZSBwYWdlXG4iKTsKLQkJCWdvdG8gZXJyX2J1ZjsKLQkJfQotCi0JCXBnID0gdm1hbGxvY190b19wYWdlKGJ1Zik7Ci0JCWlmIChwZyA9PSAwKSB7Ci0JCQlkZXZfZXJyKGhvc3QtPmRldiwgIkZhaWxlZCB0byB2bWFsbG9jX3RvX3BhZ2VcbiIpOwotCQkJZ290byBlcnJfYnVmOwotCQl9Ci0JCXAgPSBwYWdlX2FkZHJlc3MocGcpICsgKChzaXplX3QpYnVmICYgflBBR0VfTUFTSyk7Ci0JfQorCWlmIChidWYgPj0gaGlnaF9tZW1vcnkpCisJCWdvdG8gZXJyX2J1ZjsKIAogCWRtYV9kZXYgPSBob3N0LT5kbWFfY2hhbi0+ZGV2aWNlOwogCkBAIC0yODAsNyArMjY2LDggQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBhdG1lbF9uYW5kX2hvc3QgKmhvc3QgPSBjaGlwLT5wcml2OwogCi0JaWYgKHVzZV9kbWEgJiYgbGVuID49IG10ZC0+b29ic2l6ZSkKKwlpZiAodXNlX2RtYSAmJiBsZW4gPiBtdGQtPm9vYnNpemUpCisJCS8qIG9ubHkgdXNlIERNQSBmb3IgYmlnZ2VyIHRoYW4gb29iIHNpemU6IGJldHRlciBwZXJmb3JtYW5jZXMgKi8KIAkJaWYgKGF0bWVsX25hbmRfZG1hX29wKG10ZCwgYnVmLCBsZW4sIDEpID09IDApCiAJCQlyZXR1cm47CiAKQEAgLTI5NSw3ICsyODIsOCBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJc3RydWN0IGF0bWVsX25hbmRfaG9zdCAqaG9zdCA9IGNoaXAtPnByaXY7CiAKLQlpZiAodXNlX2RtYSAmJiBsZW4gPj0gbXRkLT5vb2JzaXplKQorCWlmICh1c2VfZG1hICYmIGxlbiA+IG10ZC0+b29ic2l6ZSkKKwkJLyogb25seSB1c2UgRE1BIGZvciBiaWdnZXIgdGhhbiBvb2Igc2l6ZTogYmV0dGVyIHBlcmZvcm1hbmNlcyAqLwogCQlpZiAoYXRtZWxfbmFuZF9kbWFfb3AobXRkLCAodm9pZCAqKWJ1ZiwgbGVuLCAwKSA9PSAwKQogCQkJcmV0dXJuOwogCkBAIC01OTksNyArNTg3LDEwIEBACiAJCW5hbmRfY2hpcC0+b3B0aW9ucyB8PSBOQU5EX1VTRV9GTEFTSF9CQlQ7CiAJfQogCi0JaWYgKGNwdV9oYXNfZG1hKCkgJiYgdXNlX2RtYSkgeworCWlmICghY3B1X2hhc19kbWEoKSkKKwkJdXNlX2RtYSA9IDA7CisKKwlpZiAodXNlX2RtYSkgewogCQlkbWFfY2FwX21hc2tfdCBtYXNrOwogCiAJCWRtYV9jYXBfemVybyhtYXNrKTsKQEAgLTYxMSw3ICs2MDIsOCBAQAogCQl9CiAJfQogCWlmICh1c2VfZG1hKQotCQlkZXZfaW5mbyhob3N0LT5kZXYsICJVc2luZyBETUEgZm9yIE5BTkQgYWNjZXNzLlxuIik7CisJCWRldl9pbmZvKGhvc3QtPmRldiwgIlVzaW5nICVzIGZvciBETUEgdHJhbnNmZXJzLlxuIiwKKwkJCQkJZG1hX2NoYW5fbmFtZShob3N0LT5kbWFfY2hhbikpOwogCWVsc2UKIAkJZGV2X2luZm8oaG9zdC0+ZGV2LCAiTm8gRE1BIHN1cHBvcnQgZm9yIE5BTkQgYWNjZXNzLlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYyBiL2RyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYwppbmRleCA3Yzk1ZGExLi4wOTExY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAkgKi8KIAl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOwogCi0JLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2NhbihhdXRjcHUxMl9tdGQsIDEpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXRfaW9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCmluZGV4IDlmMWI0NTEuLjcxYzM1YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCS8qIEVuYWJsZSB0aGUgZm9sbG93aW5nIGZvciBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZSAqLwogCXRoaXMtPm9wdGlvbnMgPSBOQU5EX1VTRV9GTEFTSF9CQlQgfCBOQU5EX05PX0FVVE9JTkNSOwogCi0JLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2NhbihuZXdfbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X2lvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGVuYWxpLmMgYi9kcml2ZXJzL210ZC9uYW5kL2RlbmFsaS5jCmluZGV4IDhjOGQzYzguLjQ2MzNmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZGVuYWxpLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kZW5hbGkuYwpAQCAtNzI0LDcgKzcyNCw3IEBACiB9CiAKIC8qIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHNldHVwcyB0aGUgcmVnaXN0ZXJzIGZvciBFQ0MgYW5kIHdoZXRoZXIgb3Igbm90Ci0gKiB0aGUgc3BhcmUgYXJlYSB3aWxsIGJlIHRyYW5zZmVyZWQuICovCisgKiB0aGUgc3BhcmUgYXJlYSB3aWxsIGJlIHRyYW5zZmVycmVkLiAqLwogc3RhdGljIHZvaWQgc2V0dXBfZWNjX2Zvcl94ZmVyKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksIGJvb2wgZWNjX2VuLAogCQkJCWJvb2wgdHJhbnNmZXJfc3BhcmUpCiB7CkBAIC05NjUsNyArOTY1LDcgQEAKIAogCQkJaWYgKEVDQ19FUlJPUl9DT1JSRUNUQUJMRShlcnJfY29ycmVjdGlvbl9pbmZvKSkgewogCQkJCS8qIElmIGVycl9ieXRlIGlzIGxhcmdlciB0aGFuIEVDQ19TRUNUT1JfU0laRSwKLQkJCQkgKiBtZWFucyBlcnJvciBoYXBwZW5kIGluIE9PQiwgc28gd2UgaWdub3JlCisJCQkJICogbWVhbnMgZXJyb3IgaGFwcGVuZWQgaW4gT09CLCBzbyB3ZSBpZ25vcmUKIAkJCQkgKiBpdC4gSXQncyBubyBuZWVkIGZvciB1cyB0byBjb3JyZWN0IGl0CiAJCQkJICogZXJyX2RldmljZSBpcyByZXByZXNlbnRlZCB0aGUgTkFORCBlcnJvcgogCQkJCSAqIGJpdHMgYXJlIGhhcHBlbmVkIGluIGlmIHRoZXJlIGFyZSBtb3JlCkBAIC0xMTA5LDcgKzExMDksNyBAQAogfQogCiAvKiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IHRoZSBOQU5EIGNvcmUgY2FsbHMgdG8gd3JpdGUgYSBwYWdlIHdpdGhvdXQgRUNDLgotICogcmF3IGFjY2VzcyBpcyBzaW1pbGlhciB0byBFQ0MgcGFnZSB3cml0ZXMsIHNvIGFsbCB0aGUgd29yayBpcyBkb25lIGluIHRoZQorICogcmF3IGFjY2VzcyBpcyBzaW1pbGFyIHRvIEVDQyBwYWdlIHdyaXRlcywgc28gYWxsIHRoZSB3b3JrIGlzIGRvbmUgaW4gdGhlCiAgKiB3cml0ZV9wYWdlKCkgZnVuY3Rpb24gYWJvdmUuCiAgKi8KIHN0YXRpYyB2b2lkIGRlbmFsaV93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKaW5kZXggYjdmOGRlNy4uNjU3YjlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogICoKICAqIEZhYnJpY2UgQmVsbGFyZCBmaWd1cmVkIHRoaXMgb3V0IGluIHRoZSBvbGQgZG9jZWNjIGNvZGUuIEkgYWRkZWQKICAqIHNvbWUgY29tbWVudHMsIGltcHJvdmVkIGEgbWlub3IgYml0IGFuZCBjb252ZXJ0ZWQgaXQgdG8gbWFrZSB1c2UKLSAqIG9mIHRoZSBnZW5lcmljIFJlZWQtU29sb21vbiBsaWJhcnkuIHRnbHgKKyAqIG9mIHRoZSBnZW5lcmljIFJlZWQtU29sb21vbiBsaWJyYXJ5LiB0Z2x4CiAgKi8KIHN0YXRpYyBpbnQgZG9jX2VjY19kZWNvZGUoc3RydWN0IHJzX2NvbnRyb2wgKnJzLCB1aW50OF90ICpkYXRhLCB1aW50OF90ICplY2MpCiB7CkBAIC00MDAsNyArNDAwLDcgQEAKIAlkb2MyMDB4X2h3Y29udHJvbChtdGQsIDAsIE5BTkRfQ1RSTF9BTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKLQkvKiBXZSBjYW50JyB1c2UgZGV2X3JlYWR5IGhlcmUsIGJ1dCBhdCBsZWFzdCB3ZSB3YWl0IGZvciB0aGUKKwkvKiBXZSBjYW4ndCB1c2UgZGV2X3JlYWR5IGhlcmUsIGJ1dCBhdCBsZWFzdCB3ZSB3YWl0IGZvciB0aGUKIAkgKiBjb21tYW5kIHRvIGNvbXBsZXRlCiAJICovCiAJdWRlbGF5KDUwKTsKQEAgLTk4Niw3ICs5ODYsNyBAQAogCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCBFQ0NDb25mKTsKIAl9CiAKLQkvKiBFcnJvciBvY2N1cmVkID8gKi8KKwkvKiBFcnJvciBvY2N1cnJlZCA/ICovCiAJaWYgKGR1bW15ICYgMHg4MCkgewogCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCQlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpCkBAIC0xMTYwLDcgKzExNjAsNyBAQAogCS8qIE5PVEU6IFRoZSBsaW5lcyBiZWxvdyBtb2RpZnkgaW50ZXJuYWwgdmFyaWFibGVzIG9mIHRoZSBOQU5EIGFuZCBNVEQKIAkgICBsYXllcnM7IHZhcmlhYmxlcyB3aXRoIGhhdmUgYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQgYnkgbmFuZF9zY2FuLgogCSAgIFVuZm9ydHVuYXRlbHksIHdlIGRpZG4ndCBrbm93IGJlZm9yZSB0aGlzIHBvaW50IHdoYXQgdGhlc2UgdmFsdWVzCi0JICAgc2hvdWxkIGJlLiAgVGh1cywgdGhpcyBjb2RlIGlzIHNvbWV3aGF0IGRlcGVuZGFudCBvbiB0aGUgZXhhY3QKKwkgICBzaG91bGQgYmUuICBUaHVzLCB0aGlzIGNvZGUgaXMgc29tZXdoYXQgZGVwZW5kZW50IG9uIHRoZSBleGFjdAogCSAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBOQU5EIGxheWVyLiAgKi8KIAlpZiAobWgtPlVuaXRTaXplRmFjdG9yICE9IDB4ZmYpIHsKIAkJdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0ICs9ICgweGZmIC0gbWgtPlVuaXRTaXplRmFjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMKaW5kZXggN2ExM2Q0Mi4uNTM3ZTM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAl1bnNpZ25lZCBpbnQgZm1yOyAgICAgICAvKiBGQ00gRmxhc2ggTW9kZSBSZWdpc3RlciB2YWx1ZSAgICAgKi8KIH07CiAKLS8qIEZyZWVzY2FsZSBlTEJDIEZDTSBjb250cm9sbGVyIGluZm9tYXRpb24gKi8KKy8qIEZyZWVzY2FsZSBlTEJDIEZDTSBjb250cm9sbGVyIGluZm9ybWF0aW9uICovCiAKIHN0cnVjdCBmc2xfZWxiY19mY21fY3RybCB7CiAJc3RydWN0IG5hbmRfaHdfY29udHJvbCBjb250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc21jX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvZnNtY19uYW5kLmMKaW5kZXggMjA1YjEwYi4uMGQ0NWVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9mc21jX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbWNfbmFuZC5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAogLyoKICAqIGZzbWNfcmVhZF9od2VjY19lY2M0IC0gSGFyZHdhcmUgRUNDIGNhbGN1bGF0b3IgZm9yIGVjYzQgb3B0aW9uIHN1cHBvcnRlZCBieQotICogRlNNQy4gRUNDIGlzIDEzIGJ5dGVzIGZvciA1MTIgYnl0ZXMgb2YgZGF0YSAoc3VwcG9ydHMgZXJyb3IgY29ycmVjdGlvbiB1cHRvCisgKiBGU01DLiBFQ0MgaXMgMTMgYnl0ZXMgZm9yIDUxMiBieXRlcyBvZiBkYXRhIChzdXBwb3J0cyBlcnJvciBjb3JyZWN0aW9uIHVwIHRvCiAgKiBtYXggb2YgOC1iaXRzKQogICovCiBzdGF0aWMgaW50IGZzbWNfcmVhZF9od2VjY19lY2M0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpkYXRhLApAQCAtMzgxLDcgKzM4MSw3IEBACiAKIC8qCiAgKiBmc21jX3JlYWRfaHdlY2NfZWNjMSAtIEhhcmR3YXJlIEVDQyBjYWxjdWxhdG9yIGZvciBlY2MxIG9wdGlvbiBzdXBwb3J0ZWQgYnkKLSAqIEZTTUMuIEVDQyBpcyAzIGJ5dGVzIGZvciA1MTIgYnl0ZXMgb2YgZGF0YSAoc3VwcG9ydHMgZXJyb3IgY29ycmVjdGlvbiB1cHRvCisgKiBGU01DLiBFQ0MgaXMgMyBieXRlcyBmb3IgNTEyIGJ5dGVzIG9mIGRhdGEgKHN1cHBvcnRzIGVycm9yIGNvcnJlY3Rpb24gdXAgdG8KICAqIG1heCBvZiAxLWJpdCkKICAqLwogc3RhdGljIGludCBmc21jX3JlYWRfaHdlY2NfZWNjMShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqZGF0YSwKQEAgLTQwOCwxMCArNDA4LDEwIEBACiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCiAgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKLSAqIFRoaXMgcm91dGluZSBpcyBuZWVkZWQgZm9yIGZzbWMgdmVyaXNvbiA4IGFzIHJlYWRpbmcgZnJvbSBOQU5EIGNoaXAgaGFzIHRvIGJlCisgKiBUaGlzIHJvdXRpbmUgaXMgbmVlZGVkIGZvciBmc21jIHZlcnNpb24gOCBhcyByZWFkaW5nIGZyb20gTkFORCBjaGlwIGhhcyB0byBiZQogICogcGVyZm9ybWVkIGluIGEgc3RyaWN0IHNlcXVlbmNlIGFzIGZvbGxvd3M6CiAgKiBkYXRhKDUxMiBieXRlKSAtPiBlY2MoMTMgYnl0ZSkKLSAqIEFmdGVyIHRoaXMgcmVhZCwgZnNtYyBoYXJkd2FyZSBnZW5lcmF0ZXMgYW5kIHJlcG9ydHMgZXJyb3IgZGF0YSBiaXRzKHVwdG8gYQorICogQWZ0ZXIgdGhpcyByZWFkLCBmc21jIGhhcmR3YXJlIGdlbmVyYXRlcyBhbmQgcmVwb3J0cyBlcnJvciBkYXRhIGJpdHModXAgdG8gYQogICogbWF4IG9mIDggYml0cykKICAqLwogc3RhdGljIGludCBmc21jX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKQEAgLTY4Niw3ICs2ODYsNyBAQAogCX0KIAogCS8qCi0JICogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlCisJICogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlCiAJICovCiAJaWYgKG5hbmRfc2Nhbl9pZGVudCgmaG9zdC0+bXRkLCAxLCBOVUxMKSkgewogCQlyZXQgPSAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCA4NWNmYzA2Li5jNTRhNGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTE1ODIsNyArMTU4Miw3IEBACiB9CiAKIC8qKgotICogbmFuZF9yZWFkIC0gW01URCBJbnRlcmZhY2VdIE1URCBjb21wYWJpbGl0eSBmdW5jdGlvbiBmb3IgbmFuZF9kb19yZWFkX2VjYworICogbmFuZF9yZWFkIC0gW01URCBJbnRlcmZhY2VdIE1URCBjb21wYXRpYmlsaXR5IGZ1bmN0aW9uIGZvciBuYW5kX2RvX3JlYWRfZWNjCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KICAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKaW5kZXggYTFlOGIzMDAuLmFmNDY0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKQEAgLTk0NSw3ICs5NDUsNyBAQAogCQlyZDIgPSBOVUxMOwogCQkvKiBQZXIgY2hpcCBvciBwZXIgZGV2aWNlID8gKi8KIAkJY2hpcHNlbCA9ICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1BFUkNISVApID8gaSA6IC0xOwotCQkvKiBNaXJyb3JlZCB0YWJsZSBhdmlsYWJsZSA/ICovCisJCS8qIE1pcnJvcmVkIHRhYmxlIGF2YWlsYWJsZSA/ICovCiAJCWlmIChtZCkgewogCQkJaWYgKHRkLT5wYWdlc1tpXSA9PSAtMSAmJiBtZC0+cGFnZXNbaV0gPT0gLTEpIHsKIAkJCQl3cml0ZW9wcyA9IDB4MDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCmluZGV4IDIxMzE4MWIuLjg5M2Q5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZ3JhdmVwYWdlcywgICAgICJQYWdlcyB0aGF0IGxvc2UgZGF0YSBbOiBtYXhpbXVtIHJlYWRzIChkZWZhdWx0cyB0byAzKV0iCiAJCQkJICIgc2VwYXJhdGVkIGJ5IGNvbW1hcyBlLmcuIDE0MDE6MiBtZWFucyBwYWdlIDE0MDEiCiAJCQkJICIgY2FuIGJlIHJlYWQgb25seSB0d2ljZSBiZWZvcmUgZmFpbGluZyIpOwotTU9EVUxFX1BBUk1fREVTQyhycHR3ZWFyLCAgICAgICAgIk51bWJlciBvZiBlcmFzZXMgaW5iZXR3ZWVuIHJlcG9ydGluZyB3ZWFyLCBpZiBub3QgemVybyIpOworTU9EVUxFX1BBUk1fREVTQyhycHR3ZWFyLCAgICAgICAgIk51bWJlciBvZiBlcmFzZXMgYmV0d2VlbiByZXBvcnRpbmcgd2VhciwgaWYgbm90IHplcm8iKTsKIE1PRFVMRV9QQVJNX0RFU0Mob3ZlcnJpZGVzaXplLCAgICJTcGVjaWZpZXMgdGhlIE5BTkQgRmxhc2ggc2l6ZSBvdmVycmlkaW5nIHRoZSBJRCBieXRlcy4gIgogCQkJCSAiVGhlIHNpemUgaXMgc3BlY2lmaWVkIGluIGVyYXNlIGJsb2NrcyBhbmQgYXMgdGhlIGV4cG9uZW50IG9mIGEgcG93ZXIgb2YgdHdvIgogCQkJCSAiIGUuZy4gNSBtZWFucyBhIHNpemUgb2YgMzIgZXJhc2UgYmxvY2tzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25vbWFkaWtfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9ub21hZGlrX25hbmQuYwppbmRleCA4YzBiNjkzLi5hMDQ1YTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25vbWFkaWtfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbm9tYWRpa19uYW5kLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCW5hbmQtPm9wdGlvbnMgPSBwZGF0YS0+b3B0aW9uczsKIAogCS8qCi0JICogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlCisJICogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlCiAJICovCiAJaWYgKG5hbmRfc2NhbigmaG9zdC0+bXRkLCAxKSkgewogCQlyZXQgPSAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Bhc2VtaV9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Bhc2VtaV9uYW5kLmMKaW5kZXggNTllZmE4Mi4uMjBiZmU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9wYXNlbWlfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcGFzZW1pX25hbmQuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJLyogRW5hYmxlIHRoZSBmb2xsb3dpbmcgZm9yIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlICovCiAJY2hpcC0+b3B0aW9ucyA9IE5BTkRfVVNFX0ZMQVNIX0JCVCB8IE5BTkRfTk9fQVVUT0lOQ1I7CiAKLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KIAlpZiAobmFuZF9zY2FuKHBhc2VtaV9uYW5kX210ZCwgMSkpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dF9scGM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9wbGF0X25hbmQuYwppbmRleCAzMTdhZmY0Li5jYWY1YTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcGxhdF9uYW5kLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwogCWlmIChuYW5kX3NjYW4oJmRhdGEtPm10ZCwgcGRhdGEtPmNoaXAubnJfY2hpcHMpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKaW5kZXggYWI3ZjRjMy4uZmYwNzAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgdXNlX2RtYSA9IDE7CiBtb2R1bGVfcGFyYW0odXNlX2RtYSwgYm9vbCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9kbWEsICJlbmFibGUgRE1BIGZvciBkYXRhIHRyYW5zZmVyaW5nIHRvL2Zyb20gTkFORCBIVyIpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hLCAiZW5hYmxlIERNQSBmb3IgZGF0YSB0cmFuc2ZlcnJpbmcgdG8vZnJvbSBOQU5EIEhXIik7CiAKIC8qCiAgKiBEZWZhdWx0IE5BTkQgZmxhc2ggY29udHJvbGxlciBjb25maWd1cmF0aW9uIHNldHVwIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwppbmRleCA2MzIyZDFmLi5jYWUyZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIAlkYmdfdmVyYm9zZSgiZG9pbmcgZG1hICVzICIsIGRvX3JlYWQgPyAicmVhZCIgOiAid3JpdGUiKTsKIAotCS8qIFNldCBpbnRpYWwgZG1hIHN0YXRlOiBmb3IgcmVhZGluZyBmaXJzdCBmaWxsIG9uIGJvYXJkIGJ1ZmZlciwKKwkvKiBTZXQgaW5pdGlhbCBkbWEgc3RhdGU6IGZvciByZWFkaW5nIGZpcnN0IGZpbGwgb24gYm9hcmQgYnVmZmVyLAogCSAgZnJvbSBkZXZpY2UsIGZvciB3cml0ZXMgZmlyc3QgZmlsbCB0aGUgYnVmZmVyICBmcm9tIG1lbW9yeSovCiAJZGV2LT5kbWFfc3RhdGUgPSBkb19yZWFkID8gRE1BX0lOVEVSTkFMIDogRE1BX01FTU9SWTsKIApAQCAtNzY2LDcgKzc2Niw3IEBACiAJCXJldCA9IElSUV9IQU5ETEVEOwogCQlkZXYtPmNhcmRfZGV0ZWN0ZWQgPSAhIShjYXJkX3N0YXR1cyAmIFI4NTJfQ0FSRF9JUlFfSU5TRVJUKTsKIAotCQkvKiB3ZSBzaG91bGRuJ3QgcmVjaWV2ZSBhbnkgaW50ZXJydXB0cyBpZiB3ZSB3YWl0IGZvciBjYXJkCisJCS8qIHdlIHNob3VsZG4ndCByZWNlaXZlIGFueSBpbnRlcnJ1cHRzIGlmIHdlIHdhaXQgZm9yIGNhcmQKIAkJCXRvIHNldHRsZSAqLwogCQlXQVJOX09OKGRldi0+Y2FyZF91bnN0YWJsZSk7CiAKQEAgLTc5NCwxMyArNzk0LDEzIEBACiAJCXJldCA9IElSUV9IQU5ETEVEOwogCiAJCWlmIChkbWFfc3RhdHVzICYgUjg1Ml9ETUFfSVJRX0VSUk9SKSB7Ci0JCQlkYmcoInJlY2lldmVkIGRtYSBlcnJvciBJUlEiKTsKKwkJCWRiZygicmVjZWl2ZWQgZG1hIGVycm9yIElSUSIpOwogCQkJcjg1Ml9kbWFfZG9uZShkZXYsIC1FSU8pOwogCQkJY29tcGxldGUoJmRldi0+ZG1hX2RvbmUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQkvKiByZWNpZXZlZCBETUEgaW50ZXJydXB0IG91dCBvZiBub3doZXJlPyAqLworCQkvKiByZWNlaXZlZCBETUEgaW50ZXJydXB0IG91dCBvZiBub3doZXJlPyAqLwogCQlXQVJOX09OX09OQ0UoZGV2LT5kbWFfc3RhZ2UgPT0gMCk7CiAKIAkJaWYgKGRldi0+ZG1hX3N0YWdlID09IDApCkBAIC05NjAsNyArOTYwLDcgQEAKIAkJJmRldi0+Y2FyZF9kZXRlY3Rfd29yaywgMCk7CiAKIAotCXByaW50ayhLRVJOX05PVElDRSBEUlZfTkFNRSAiOiBkcml2ZXIgbG9hZGVkIHN1Y2Nlc2Z1bGx5XG4iKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgRFJWX05BTUUgIjogZHJpdmVyIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIpOwogCXJldHVybiAwOwogCiBlcnJvcjEwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCmluZGV4IDU0NmMyZjAuLjgxYmJiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAogc3RhdGljIHZvaWQgdGltZW91dF9lcnJvcihzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBjb25zdCBjaGFyICpzdHIpCiB7Ci0JZGV2X2VycigmZmxjdGwtPnBkZXYtPmRldiwgIlRpbWVvdXQgb2NjdXJlZCBpbiAlc1xuIiwgc3RyKTsKKwlkZXZfZXJyKCZmbGN0bC0+cGRldi0+ZGV2LCAiVGltZW91dCBvY2N1cnJlZCBpbiAlc1xuIiwgc3RyKTsKIH0KIAogc3RhdGljIHZvaWQgd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NtX2NvbW1vbi5jIGIvZHJpdmVycy9tdGQvbmFuZC9zbV9jb21tb24uYwppbmRleCA0YThmMzY3Li41N2NjODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NtX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc21fY29tbW9uLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBCYWQgYmxvY2sgbWFya2VyIHBvc3Rpb24gKi8KKwkvKiBCYWQgYmxvY2sgbWFya2VyIHBvc2l0aW9uICovCiAJY2hpcC0+YmFkYmxvY2twb3MgPSAweDA1OwogCWNoaXAtPmJhZGJsb2NrYml0cyA9IDc7CiAJY2hpcC0+YmxvY2tfbWFya2JhZCA9IHNtX2Jsb2NrX21hcmtiYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3RtaW9fbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC90bWlvX25hbmQuYwppbmRleCAzOGZiMTY3Li4xNGM1Nzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3RtaW9fbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvdG1pb19uYW5kLmMKQEAgLTQsNyArNCw3IEBACiAgKiBTbGlnaHRseSBtdXJreSBwcmUtZ2l0IGhpc3Rvcnkgb2YgdGhlIGRyaXZlcjoKICAqCiAgKiBDb3B5cmlnaHQgKGMpIElhbiBNb2x0b24gMjAwNCwgMjAwNSwgMjAwOAotICogICAgT3JpZ2luYWwgd29yaywgaW5kZXBlbmRhbnQgb2Ygc2hhcnBzIGNvZGUuIEluY2x1ZGVkIGhhcmR3YXJlIEVDQyBzdXBwb3J0LgorICogICAgT3JpZ2luYWwgd29yaywgaW5kZXBlbmRlbnQgb2Ygc2hhcnBzIGNvZGUuIEluY2x1ZGVkIGhhcmR3YXJlIEVDQyBzdXBwb3J0LgogICogICAgSGFyZCBFQ0MgZGlkIG5vdCB3b3JrIGZvciB3cml0ZXMgaW4gdGhlIGVhcmx5IHJldmlzaW9ucy4KICAqIENvcHlyaWdodCAoYykgRGlyayBPcGZlciAyMDA1LgogICogICAgTW9kaWZpY2F0aW9ucyBkZXZlbG9wZWQgZnJvbSBzaGFycHMgY29kZSBidXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYwppbmRleCBmNTkxZjYxLi4xZmNiNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC02MDgsNyArNjA4LDcgQEAKIAogCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoYy0+cmVndWxhdG9yKTsKIAlpZiAocmV0ICE9IDApCi0JCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgImNhbnQgZW5hYmxlIHJlZ3VsYXRvclxuIik7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSByZWd1bGF0b3JcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTYyMCw3ICs2MjAsNyBAQAogCiAJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUoYy0+cmVndWxhdG9yKTsKIAlpZiAocmV0ICE9IDApCi0JCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgImNhbnQgZGlzYWJsZSByZWd1bGF0b3JcbiIpOworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsICJjYW4ndCBkaXNhYmxlIHJlZ3VsYXRvclxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX3NpbS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX3NpbS5jCmluZGV4IDhiMjQ2MDYuLjVlZjNiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9zaW0uYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfc2ltLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG1lbWNtcChkZXN0ICsgb2ZmLCBmZmNoYXJzLCB0aGlzLT5zdWJwYWdlc2l6ZSkgJiYKIAkJCSAgICBvbmVuYW5kX2NoZWNrX292ZXJ3cml0ZShkZXN0ICsgb2ZmLCBzcmMgKyBvZmYsIHRoaXMtPnN1YnBhZ2VzaXplKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIm92ZXItd3JpdGUgaGFwcGVuZCBhdCAweCUwOHhcbiIsIG9mZnNldCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJvdmVyLXdyaXRlIGhhcHBlbmVkIGF0IDB4JTA4eFxuIiwgb2Zmc2V0KTsKIAkJCW1lbWNweShkZXN0ICsgb2ZmLCBzcmMgKyBvZmYsIHRoaXMtPnN1YnBhZ2VzaXplKTsKIAkJfQogCQkvKiBGYWxsIHRocm91Z2ggKi8KQEAgLTMzNSw3ICszMzUsNyBAQAogCQlkZXN0ID0gT05FTkFORF9DT1JFX1NQQVJFKGZsYXNoLCB0aGlzLCBvZmZzZXQpOwogCQlpZiAobWVtY21wKGRlc3QsIGZmY2hhcnMsIG10ZC0+b29ic2l6ZSkgJiYKIAkJICAgIG9uZW5hbmRfY2hlY2tfb3ZlcndyaXRlKGRlc3QsIHNyYywgbXRkLT5vb2JzaXplKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiT09COiBvdmVyLXdyaXRlIGhhcHBlbmQgYXQgMHglMDh4XG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJPT0I6IG92ZXItd3JpdGUgaGFwcGVuZWQgYXQgMHglMDh4XG4iLAogCQkJICAgICAgIG9mZnNldCk7CiAJCW1lbWNweShkZXN0LCBzcmMsIG10ZC0+b29ic2l6ZSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc21fZnRsLmMgYi9kcml2ZXJzL210ZC9zbV9mdGwuYwppbmRleCAyYjBkYWFlLi5lZDNkNmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9zbV9mdGwuYworKysgYi9kcml2ZXJzL210ZC9zbV9mdGwuYwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQkvKiBJZiB0aGUgYmxvY2sgaXMgc2xpY2VkIChwYXJ0aWFseSBlcmFzZWQgdXN1YWxseSkgZXJhc2UgaXQgKi8KKwkvKiBJZiB0aGUgYmxvY2sgaXMgc2xpY2VkIChwYXJ0aWFsbHkgZXJhc2VkIHVzdWFsbHkpIGVyYXNlIGl0ICovCiAJaWYgKGkgPT0gMikgewogCQlzbV9lcmFzZV9ibG9jayhmdGwsIHpvbmUsIGJsb2NrLCAxKTsKIAkJcmV0dXJuIDE7CkBAIC04NzgsNyArODc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogR2V0IGFuZCBhdXRvbWF0aWNseSBpbml0aWFsaXplIGFuIEZUTCBtYXBwaW5nIGZvciBvbmUgem9uZSAqLworLyogR2V0IGFuZCBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemUgYW4gRlRMIG1hcHBpbmcgZm9yIG9uZSB6b25lICovCiBzdHJ1Y3QgZnRsX3pvbmUgKnNtX2dldF96b25lKHN0cnVjdCBzbV9mdGwgKmZ0bCwgaW50IHpvbmVfbnVtKQogewogCXN0cnVjdCBmdGxfem9uZSAqem9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9LY29uZmlnIGIvZHJpdmVycy9tdGQvdWJpL0tjb25maWcKaW5kZXggNmFiZWI0Zi4uNGRjYzc1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvdWJpL0tjb25maWcKQEAgLTU2LDcgKzU2LDcgQEAKIAlib29sICJVQkkgZGVidWdnaW5nIgogCWRlcGVuZHMgb24gU1lTRlMKIAlzZWxlY3QgREVCVUdfRlMKLQlzZWxlY3QgS0FMTFNZTVNfQUxMIGlmIEtBTExTWU1TICYmIERFQlVHX0tFUk5FTAorCXNlbGVjdCBLQUxMU1lNUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgVUJJIGRlYnVnZ2luZy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2lvLmMgYi9kcml2ZXJzL210ZC91YmkvaW8uYwppbmRleCBlZWRlZGY5Li5lMzQ3Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvaW8uYworKysgYi9kcml2ZXJzL210ZC91YmkvaW8uYwpAQCAtMzQ0LDYgKzM0NCwxMiBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdxOwogCiAJZGJnX2lvKCJlcmFzZSBQRUIgJWQiLCBwbnVtKTsKKwl1YmlfYXNzZXJ0KHBudW0gPj0gMCAmJiBwbnVtIDwgdWJpLT5wZWJfY291bnQpOworCisJaWYgKHViaS0+cm9fbW9kZSkgeworCQl1YmlfZXJyKCJyZWFkLW9ubHkgbW9kZSIpOworCQlyZXR1cm4gLUVST0ZTOworCX0KIAogcmV0cnk6CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmd3EpOwpAQCAtMzkwLDcgKzM5Niw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmICh1YmlfZGJnX2lzX2VyYXNlX2ZhaWx1cmUoKSAmJiAhZXJyKSB7CisJaWYgKHViaV9kYmdfaXNfZXJhc2VfZmFpbHVyZSgpKSB7CiAJCWRiZ19lcnIoImNhbm5vdCBlcmFzZSBQRUIgJWQgKGVtdWxhdGVkKSIsIHBudW0pOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCAxMWViOGVmLi5kMmQxMmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTk2OCw3ICs5NjgsNyBAQAogCQkJICogY29udGFpbnMgZ2FyYmFnZSBiZWNhdXNlIG9mIGEgcG93ZXIgY3V0IGR1cmluZyBlcmFzZQogCQkJICogb3BlcmF0aW9uLiBTbyB3ZSBqdXN0IHNjaGVkdWxlIHRoaXMgUEVCIGZvciBlcmFzdXJlLgogCQkJICoKLQkJCSAqIEJlc2lkZXMsIGluIGNhc2Ugb2YgTk9SIGZsYXNoLCB3ZSBkZWxpYmVyYXRseQorCQkJICogQmVzaWRlcywgaW4gY2FzZSBvZiBOT1IgZmxhc2gsIHdlIGRlbGliZXJhdGVseQogCQkJICogY29ycnVwdCBib3RoIGhlYWRlcnMgYmVjYXVzZSBOT1IgZmxhc2ggZXJhc3VyZSBpcwogCQkJICogc2xvdyBhbmQgY2FuIHN0YXJ0IGZyb20gdGhlIGVuZC4KIAkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3ZtdC5jIGIvZHJpdmVycy9tdGQvdWJpL3ZtdC5jCmluZGV4IGI3OWUwZGUuLjM2NmViNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS92bXQuYworKysgYi9kcml2ZXJzL210ZC91Ymkvdm10LmMKQEAgLTc5MCwxMSArNzkwLDYgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWlmICghdm9sLT5uYW1lKSB7Ci0JCXViaV9lcnIoIk5VTEwgdm9sdW1lIG5hbWUiKTsKLQkJZ290byBmYWlsOwotCX0KLQogCW4gPSBzdHJubGVuKHZvbC0+bmFtZSwgdm9sLT5uYW1lX2xlbiArIDEpOwogCWlmIChuICE9IHZvbC0+bmFtZV9sZW4pIHsKIAkJdWJpX2VycigiYmFkIG5hbWVfbGVuICVsbGQiLCBuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDllMWMwM2UuLjU0MjBmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtMzk5LDcgKzM5OSw3IEBACiAgKiBhcyB3ZSBtYXkgc3RpbGwgYmUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSB0aGUgbGFzdCBSWCBwYWNrZXQgYnVmZmVyLgogICoKICAqIFdoZW4gYSB0cmFuc21pdCB0aW1lcyBvdXQgd2UgZHVtcCB0aGUgY2FyZCBpbnRvIGNvbnRyb2wgbW9kZSBhbmQganVzdAotICogc3RhcnQgYWdhaW4uIEl0IGhhcHBlbnMgZW5vdWdoIHRoYXQgaXQgaXNudCB3b3J0aCBsb2dnaW5nLgorICogc3RhcnQgYWdhaW4uIEl0IGhhcHBlbnMgZW5vdWdoIHRoYXQgaXQgaXNuJ3Qgd29ydGggbG9nZ2luZy4KICAqCiAgKiBXZSBhdm9pZCBob2xkaW5nIHRoZSBzcGluIGxvY2tzIHdoZW4gZG9pbmcgdGhlIHBhY2tldCBsb2FkIHRvIHRoZSBib2FyZC4KICAqIFRoZSBkZXZpY2UgaXMgdmVyeSBzbG93LCBhbmQgaXRzIERNQSBtb2RlIGlzIGV2ZW4gc2xvd2VyLiBJZiB3ZSBoZWxkIHRoZQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgKgogICogSGFuZGxlIHRoZSBldGhlciBpbnRlcmZhY2UgaW50ZXJydXB0cy4gVGhlIDNjNTAxIG5lZWRzIGEgbG90IG1vcmUKICAqIGhhbmQgaG9sZGluZyB0aGFuIG1vc3QgY2FyZHMuIEluIHBhcnRpY3VsYXIgd2UgZ2V0IGEgdHJhbnNtaXQgaW50ZXJydXB0Ci0gKiB3aXRoIGEgY29sbGlzaW9uIGVycm9yIGJlY2F1c2UgdGhlIGJvYXJkIGZpcm13YXJlIGlzbnQgY2FwYWJsZSBvZiByZXdpbmRpbmcKKyAqIHdpdGggYSBjb2xsaXNpb24gZXJyb3IgYmVjYXVzZSB0aGUgYm9hcmQgZmlybXdhcmUgaXNuJ3QgY2FwYWJsZSBvZiByZXdpbmRpbmcKICAqIGl0cyBvd24gdHJhbnNtaXQgYnVmZmVyIHBvaW50ZXJzLiBJdCBjYW4gaG93ZXZlciBjb3VudCB0byAxNiBmb3IgdXMuCiAgKgogICogT24gdGhlIHJlY2VpdmUgc2lkZSB0aGUgY2FyZCBpcyBhbHNvIHZlcnkgZHVtYi4gSXQgaGFzIG5vIGJ1ZmZlcmluZyB0bwpAQCAtNzMyLDcgKzczMiw3IEBACiAgKiBlbF9yZXNldDogUmVzZXQgYSAzYzUwMSBjYXJkCiAgKiBAZGV2OiBUaGUgM2M1MDEgY2FyZCBhYm91dCB0byBnZXQgemFwcGVkCiAgKgotICogRXZlbiByZXNldHRpbmcgYSAzYzUwMSBpc250IHNpbXBsZS4gV2hlbiB5b3UgYWN0aXZhdGUgcmVzZXQgaXQgbG9zZXMgYWxsCisgKiBFdmVuIHJlc2V0dGluZyBhIDNjNTAxIGlzbid0IHNpbXBsZS4gV2hlbiB5b3UgYWN0aXZhdGUgcmVzZXQgaXQgbG9zZXMgYWxsCiAgKiBpdHMgY29uZmlndXJhdGlvbi4gWW91IG11c3QgaG9sZCB0aGUgbG9jayB3aGVuIGRvaW5nIHRoaXMuIFRoZSBmdW5jdGlvbgogICogY2Fubm90IHRha2UgdGhlIGxvY2sgaXRzZWxmIGFzIGl0IGlzIGNhbGxhYmxlIGZyb20gdGhlIGlycSBoYW5kbGVyLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyMy5jIGIvZHJpdmVycy9uZXQvM2M1MjMuYwppbmRleCBkZTU3OWQwLi5iYzBkMWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyMy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgIHRoaXMgZm9yIHRoZSA2NEsgdmVyc2lvbiB3b3VsZCByZXF1aXJlIGEgbG90IG9mIGhlaW5vdXMgYmFuawogICAgc3dpdGNoaW5nLCB3aGljaCBJJ20gc3VyZSBub3QgaW50ZXJlc3RlZCBpbiBkb2luZy4gIElmIHlvdSB0cnkgdG8KICAgIGltcGxlbWVudCBhIGJhbmsgc3dpdGNoaW5nIHZlcnNpb24sIHlvdSdsbCBiYXNpY2FsbHkgaGF2ZSB0byByZW1lbWJlcgotICAgd2hhdCBiYW5rIGlzIGVuYWJsZWQgYW5kIGRvIGEgc3dpdGNoIGV2ZXJ5dGltZSB5b3UgYWNjZXNzIGEgbWVtb3J5CisgICB3aGF0IGJhbmsgaXMgZW5hYmxlZCBhbmQgZG8gYSBzd2l0Y2ggZXZlcnkgdGltZSB5b3UgYWNjZXNzIGEgbWVtb3J5CiAgICBsb2NhdGlvbiB0aGF0J3Mgbm90IGN1cnJlbnQuICBZb3UnbGwgYWxzbyBoYXZlIHRvIHJlbWFwIHBvaW50ZXJzIG9uCiAgICB0aGUgZHJpdmVyIHNpZGUsIGJlY2F1c2UgaXQgb25seSBrbm93cyBhYm91dCAxNksgb2YgdGhlIG1lbW9yeS4KICAgIEFueW9uZSBkZXNwZXJhdGUgb3IgbWFzb2NoaXN0aWMgZW5vdWdoIHRvIHRyeT8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTI3LmMgYi9kcml2ZXJzL25ldC8zYzUyNy5jCmluZGV4IDhjMDk0YmEuLmQ5ZDA1NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTI3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjcuYwpAQCAtNTEsNyArNTEsNyBAQAogICoJY2lyY3VsYXIgYnVmZmVyIHF1ZXVlcy4KICAqCiAgKglUaGUgbWFpbGJveGVzIGNhbiBiZSB1c2VkIGZvciBjb250cm9sbGluZyBob3cgdGhlIGNhcmQgdHJhdmVyc2VzCi0gKglpdHMgYnVmZmVyIHJpbmdzLCBidXQgYXJlIHVzZWQgb25seSBmb3IgaW5pdGFsIHNldHVwIGluIHRoaXMKKyAqCWl0cyBidWZmZXIgcmluZ3MsIGJ1dCBhcmUgdXNlZCBvbmx5IGZvciBpbml0aWFsIHNldHVwIGluIHRoaXMKICAqCWltcGxlbWVudGF0aW9uLiAgVGhlIGV4ZWMgbWFpbGJveCBhbGxvd3MgYSB2YXJpZXR5IG9mIGNvbW1hbmRzIHRvCiAgKgliZSBleGVjdXRlZC4gRWFjaCBjb21tYW5kIG11c3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IGlzCiAgKglleGVjdXRlZC4gUHJpbWFyaWx5IHdlIHVzZSB0aGUgZXhlYyBtYWlsYm94IGZvciBjb250cm9sbGluZyB0aGUKQEAgLTgxMyw3ICs4MTMsNyBAQAogICoKICAqCVRoaXMgc2V0cyB1cCB0aGUgaG9zdCB0cmFuc21pdCBkYXRhLXN0cnVjdHVyZXMuCiAgKgotICoJRmlyc3QsIHdlIG9idGFpbiBmcm9tIHRoZSBjYXJkIGl0J3MgY3VycmVudCBwb3N0aW9uIGluIHRoZSB0eAorICoJRmlyc3QsIHdlIG9idGFpbiBmcm9tIHRoZSBjYXJkIGl0J3MgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdHgKICAqCXJpbmcsIHNvIHRoYXQgd2Ugd2lsbCBrbm93IHdoZXJlIHRvIGJlZ2luIHRyYW5zbWl0dGluZwogICoJcGFja2V0cy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCAwYTkyNDM2Zi4uOGNjMjI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC05ODQsNyArOTg0LDcgQEAKIAkJICogYW55IGRldmljZSBoYXZlIGJlZW4gZm91bmQgd2hlbiB3ZSBleGl0IGZyb20KIAkJICogZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKHRoZSBidXMgcm9vdCBkcml2ZXIgbWF5IG5vdCBiZQogCQkgKiBpbml0aWFsaXplZCB5ZXQpLiBTbyB3ZSBibGluZGx5IGFzc3VtZSBzb21ldGhpbmcgd2FzCi0JCSAqIGZvdW5kLCBhbmQgbGV0IHRoZSBzeXNmcyBtYWdpYyBoYXBwZW5kLi4uCisJCSAqIGZvdW5kLCBhbmQgbGV0IHRoZSBzeXNmcyBtYWdpYyBoYXBwZW5lZC4uLgogCQkgKi8KIAkJZWlzYV9mb3VuZCA9IDE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggZGMyODBiYy4uNmM4ODRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0yNTM2LDcgKzI1MzYsNyBAQAogc291cmNlICJkcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZyIKIAogY29uZmlnIFBDSF9HQkUKLQl0cmlzdGF0ZSAiUENIIEdpZ2FiaXQgRXRoZXJuZXQiCisJdHJpc3RhdGUgIkludGVsIEVHMjBUIFBDSCAvIE9LSSBTRU1JQ09ORFVDVE9SIE1MNzIyMyBJT0ggR2JFIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IE1JSQogCS0tLWhlbHAtLS0KQEAgLTI1NDgsNiArMjU0OCwxMiBAQAogCSAgdG8gR2lnYWJpdCBFdGhlcm5ldC4KIAkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgR2lnYWJpdCBFdGhlcm5ldCBmdW5jdGlvbi4KIAorCSAgVGhpcyBkcml2ZXIgYWxzbyBjYW4gYmUgdXNlZCBmb3IgT0tJIFNFTUlDT05EVUNUT1IgSU9IKElucHV0LworCSAgT3V0cHV0IEh1YiksIE1MNzIyMy4KKwkgIE1MNzIyMyBJT0ggaXMgZm9yIE1QKE1lZGlhIFBob25lKSB1c2UuCisJICBNTDcyMjMgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuCisJICBNTDcyMjMgaXMgY29tcGxldGVseSBjb21wYXRpYmxlIGZvciBJbnRlbCBFRzIwVCBQQ0guCisKIGVuZGlmICMgTkVUREVWXzEwMDAKIAogIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCAwMWI2MDRhLi5lNWE3Mzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMTQ0LDcgKzE0NCw3IEBACiBvYmotJChDT05GSUdfU0IxMjUwX01BQykgKz0gc2IxMjUwLW1hYy5vCiBvYmotJChDT05GSUdfQjQ0KSArPSBiNDQubwogb2JqLSQoQ09ORklHX0ZPUkNFREVUSCkgKz0gZm9yY2VkZXRoLm8KLW9iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubyA4MzkwLm8KK29iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubwogb2JqLSQoQ09ORklHX0FYODg3OTYpICs9IGF4ODg3OTYubwogb2JqLSQoQ09ORklHX0JDTTYzWFhfRU5FVCkgKz0gYmNtNjN4eF9lbmV0Lm8KIG9iai0kKENPTkZJR19GVE1BQzEwMCkgKz0gZnRtYWMxMDAubwpAQCAtMjE5LDcgKzIxOSw3IEBACiBvYmotJChDT05GSUdfTFA0ODZFKSArPSBscDQ4NmUubwogCiBvYmotJChDT05GSUdfRVRIMTZJKSArPSBldGgxNmkubwotb2JqLSQoQ09ORklHX1pPUlJPODM5MCkgKz0gem9ycm84MzkwLm8gODM5MC5vCitvYmotJChDT05GSUdfWk9SUk84MzkwKSArPSB6b3JybzgzOTAubwogb2JqLSQoQ09ORklHX0hQTEFOQ0UpICs9IGhwbGFuY2UubyA3OTkwLm8KIG9iai0kKENPTkZJR19NVk1FMTQ3X05FVCkgKz0gbXZtZTE0Ny5vIDc5OTAubwogb2JqLSQoQ09ORklHX0VRVUFMSVpFUikgKz0gZXFsLm8KQEAgLTIzMSw3ICsyMzEsNyBAQAogb2JqLSQoQ09ORklHX0RFQ0xBTkNFKSArPSBkZWNsYW5jZS5vCiBvYmotJChDT05GSUdfQVRBUklMQU5DRSkgKz0gYXRhcmlsYW5jZS5vCiBvYmotJChDT05GSUdfQTIwNjUpICs9IGEyMDY1Lm8KLW9iai0kKENPTkZJR19IWURSQSkgKz0gaHlkcmEubyA4MzkwLm8KK29iai0kKENPTkZJR19IWURSQSkgKz0gaHlkcmEubwogb2JqLSQoQ09ORklHX0FSSUFETkUpICs9IGFyaWFkbmUubwogb2JqLSQoQ09ORklHX0NTODl4MCkgKz0gY3M4OXgwLm8KIG9iai0kKENPTkZJR19NQUNTT05JQykgKz0gbWFjc29uaWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWNlbmljLmMgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwppbmRleCA0MWQ5OTExLi5lZTY0OGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtMTU4NCw3ICsxNTg0LDcgQEAKIAkvKgogCSAqIFdlIGhhdmVuJ3QgcmVjZWl2ZWQgYSBzdGF0cyB1cGRhdGUgZXZlbnQgZm9yIG1vcmUgdGhhbiAyLjUKIAkgKiBzZWNvbmRzIGFuZCB0aGVyZSBpcyBkYXRhIGluIHRoZSB0cmFuc21pdCBxdWV1ZSwgdGh1cyB3ZQotCSAqIGFzdW1lIHRoZSBjYXJkIGlzIHN0dWNrLgorCSAqIGFzc3VtZSB0aGUgY2FyZCBpcyBzdHVjay4KIAkgKi8KIAlpZiAoKmFwLT50eF9jc20gIT0gYXAtPnR4X3JldF9jc20pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0dGVyIGlzIHN0dWNrLCAlMDh4XG4iLApAQCAtMjU2NCw3ICsyNTY0LDcgQEAKIAogCQkvKgogCQkgKiBBIFRYLWRlc2NyaXB0b3IgcHJvZHVjZXIgKGFuIElSUSkgbWlnaHQgaGF2ZSBnb3R0ZW4KLQkJICogaW5iZXR3ZWVuLCBtYWtpbmcgdGhlIHJpbmcgZnJlZSBhZ2Fpbi4gU2luY2UgeG1pdCBpcworCQkgKiBiZXR3ZWVuLCBtYWtpbmcgdGhlIHJpbmcgZnJlZSBhZ2Fpbi4gU2luY2UgeG1pdCBpcwogCQkgKiBzZXJpYWxpemVkLCB0aGlzIGlzIHRoZSBvbmx5IHNpdHVhdGlvbiB3ZSBoYXZlIHRvCiAJCSAqIHJlLXRlc3QuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggMmNhODgwYi4uMjQxYjE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ4MTExZV9wY2lfdGJsKTsKIG1vZHVsZV9wYXJhbV9hcnJheShzcGVlZF9kdXBsZXgsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNwZWVkX2R1cGxleCwgIlNldCBkZXZpY2Ugc3BlZWQgYW5kIGR1cGxleCBtb2RlcywgMDogQXV0byBOZWdvdGl0YXRlLCAxOiAxME1icHMgSGFsZiBEdXBsZXgsIDI6IDEwTWJwcyBGdWxsIER1cGxleCwgMzogMTAwTWJwcyBIYWxmIER1cGxleCwgNDogMTAwTWJwcyBGdWxsIER1cGxleCIpOworTU9EVUxFX1BBUk1fREVTQyhzcGVlZF9kdXBsZXgsICJTZXQgZGV2aWNlIHNwZWVkIGFuZCBkdXBsZXggbW9kZXMsIDA6IEF1dG8gTmVnb3RpYXRlLCAxOiAxME1icHMgSGFsZiBEdXBsZXgsIDI6IDEwTWJwcyBGdWxsIER1cGxleCwgMzogMTAwTWJwcyBIYWxmIER1cGxleCwgNDogMTAwTWJwcyBGdWxsIER1cGxleCIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGNvYWxlc2NlLCBib29sLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoY29hbGVzY2UsICJFbmFibGUgb3IgRGlzYWJsZSBpbnRlcnJ1cHQgY29hbGVzY2luZywgMTogRW5hYmxlLCAwOiBEaXNhYmxlIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZHluYW1pY19pcGcsIGJvb2wsIE5VTEwsIDApOwpAQCAtMTM5OCw3ICsxMzk4LDcgQEAKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKIAkJbHAtPm9wdGlvbnMgJj0gfk9QVElPTl9NVUxUSUNBU1RfRU5BQkxFOwogCQlhbWQ4MTExZV93cml0ZXEoKih1NjQqKW1jX2ZpbHRlcixscC0+bW1pbyArIExBRFJGKTsKLQkJLyogZGlzYWJsZSBwcm9taXNjb3VzIG1vZGUgKi8KKwkJLyogZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCXdyaXRlbChQUk9NLCBscC0+bW1pbyArIENNRDIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCmluZGV4IDRhZjIzNWQuLmZiZmI1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogICogUmVhZCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBzdHJpbmcgZnJvbSB0aGUgb24gYm9hcmQgcm9tLgogICogVGhpcyBpcyBhbiBhc2NpaSBzdHJpbmcuLi4KICAqLwotc3RhdGljIGludCBfX2luaXQgZXRoZXJoX2FkZHIoY2hhciAqYWRkciwgc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGV0aGVyaF9hZGRyKGNoYXIgKmFkZHIsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7CiAJc3RydWN0IGluX2NodW5rX2RpciBjZDsKIAljaGFyICpzOwpAQCAtNjU1LDcgKzY1NSw3IEBACiBzdGF0aWMgdTMyIGV0aGVyaF9yZWdvZmZzZXRzWzE2XTsKIHN0YXRpYyB1MzIgZXRoZXJtX3JlZ29mZnNldHNbMTZdOwogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGV0aGVyaF9wcm9iZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBjb25zdCBzdHJ1Y3QgZWNhcmRfaWQgKmlkKQogewogCWNvbnN0IHN0cnVjdCBldGhlcmhfZGF0YSAqZGF0YSA9IGlkLT5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXQxNzAwLmMgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwppbmRleCBmNDc0NGZjLi42NWE3OGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdDE3MDAuYworKysgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAvKiBSdW4tdGltZSByZWdpc3RlciBiYW5rIDIgZGVmaW5pdGlvbnMuICovCiAjZGVmaW5lIERBVEFQT1JUCQk4CQkvKiBXb3JkLXdpZGUgRE1BIG9yIHByb2dyYW1tZWQtSS9PIGRhdGFwb3J0LiAqLwogI2RlZmluZSBUWF9TVEFSVAkJMTAKLSNkZWZpbmUgQ09MMTZDTlRMCQkxMQkJLyogQ29udHJvbGwgUmVnIGZvciAxNiBjb2xsaXNpb25zICovCisjZGVmaW5lIENPTDE2Q05UTAkJMTEJCS8qIENvbnRyb2wgUmVnIGZvciAxNiBjb2xsaXNpb25zICovCiAjZGVmaW5lIE1PREUxMwkJCTEzCiAjZGVmaW5lIFJYX0NUUkwJCQkxNAogLyogQ29uZmlndXJhdGlvbiByZWdpc3RlcnMgb25seSBvbiB0aGUgJzg2NUEvQiBjaGlwcy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmggYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCmluZGV4IDdjYjM3NWUuLjkyNTkyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaApAQCAtNTY2LDkgKzU2Niw5IEBACiAjZGVmaW5lIF9fQVRfVEVTVElORyAgICAgICAgMHgwMDAxCiAjZGVmaW5lIF9fQVRfUkVTRVRUSU5HICAgICAgMHgwMDAyCiAjZGVmaW5lIF9fQVRfRE9XTiAgICAgICAgICAgMHgwMDAzCi0JdTggd29ya19ldmVudDsKLSNkZWZpbmUgQVRMMUNfV09SS19FVkVOVF9SRVNFVCAJCTB4MDEKLSNkZWZpbmUgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRQkweDAyCisJdW5zaWduZWQgbG9uZyB3b3JrX2V2ZW50OworI2RlZmluZQlBVEwxQ19XT1JLX0VWRU5UX1JFU0VUCQkwCisjZGVmaW5lCUFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UJMQogCXUzMiBtc2dfZW5hYmxlOwogCiAJYm9vbCBoYXZlX21zaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCA3ZDlkNTA2Li5hNmUxYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJfQogCX0KIAotCWFkYXB0ZXItPndvcmtfZXZlbnQgfD0gQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRTsKKwlzZXRfYml0KEFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UsICZhZGFwdGVyLT53b3JrX2V2ZW50KTsKIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jb21tb25fdGFzayk7CiB9CiAKQEAgLTMzNywyMCArMzM3LDE2IEBACiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMWNfYWRhcHRlciwgY29tbW9uX3Rhc2spOwogCW5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9SRVNFVCkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpKSB7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAkJYXRsMWNfZG93bihhZGFwdGVyKTsKIAkJYXRsMWNfdXAoYWRhcHRlcik7CiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKLQkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX0xJTktfQ0hBTkdFOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSwKKwkJJmFkYXB0ZXItPndvcmtfZXZlbnQpKQogCQlhdGwxY19jaGVja19saW5rX3N0YXR1cyhhZGFwdGVyKTsKLQl9Ci0JcmV0dXJuOwogfQogCiAKQEAgLTM2OSw3ICszNjUsNyBAQAogCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCi0JYWRhcHRlci0+d29ya19ldmVudCB8PSBBVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCXNldF9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmNvbW1vbl90YXNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IDFmZjAwMWEuLmIwYTcxZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTI1MDksNyArMjUwOSw3IEBACiAJLmlkX3RhYmxlID0gYXRsMWVfcGNpX3RibCwKIAkucHJvYmUgICAgPSBhdGwxZV9wcm9iZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChhdGwxZV9yZW1vdmUpLAotCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLworCS8qIFBvd2VyIE1hbmFnZW1lbnQgSG9va3MgKi8KICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCAgPSBhdGwxZV9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGF0bDFlX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggOTM3ZWYxYS4uZTNjYmY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTE3MDEsNyArMTcwMSw3IEBACiAJLmlkX3RhYmxlID0gYXRsMl9wY2lfdGJsLAogCS5wcm9iZSAgICA9IGF0bDJfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYXRsMl9yZW1vdmUpLAotCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLworCS8qIFBvd2VyIE1hbmFnZW1lbnQgSG9va3MgKi8KIAkuc3VzcGVuZCAgPSBhdGwyX3N1c3BlbmQsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnJlc3VtZSAgID0gYXRsMl9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYyBiL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCmluZGV4IGU5NGE5NjZhLi5jNDgxMDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYworKysgYi9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYwpAQCAtNTk3LDcgKzU5Nyw3IEBACiB9CiAKIC8qCi0gKiBDaGFuZ2UgcnggbW9kZSAocHJvbWlzY291cy9hbGxtdWx0aSkgYW5kIHVwZGF0ZSBtdWx0aWNhc3QgbGlzdAorICogQ2hhbmdlIHJ4IG1vZGUgKHByb21pc2N1b3VzL2FsbG11bHRpKSBhbmQgdXBkYXRlIG11bHRpY2FzdCBsaXN0CiAgKi8KIHN0YXRpYyB2b2lkIGJjbV9lbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggZjgwM2M1OC4uMjM1M2VjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl1MTYgbWluX2VxZDsJCS8qIGluIHVzZWNzICovCiAJdTE2IG1heF9lcWQ7CQkvKiBpbiB1c2VjcyAqLwogCXUxNiBjdXJfZXFkOwkJLyogaW4gdXNlY3MgKi8KLQl1OCAgbXNpeF92ZWNfaWR4OworCXU4ICBlcV9pZHg7CiAKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIH07CkBAIC0yMTMsNyArMjEzLDcgQEAKIAogc3RydWN0IGJlX3J4X2NvbXBsX2luZm8gewogCXUzMiByc3NfaGFzaDsKLQl1MTYgdmlkOworCXUxNiB2bGFuX3RhZzsKIAl1MTYgcGt0X3NpemU7CiAJdTE2IHJ4cV9pZHg7CiAJdTE2IG1hY19pZDsKQEAgLTI5MSw3ICsyOTEsNyBAQAogCXUzMiBudW1fcnhfcXM7CiAJdTMyIGJpZ19wYWdlX3NpemU7CS8qIENvbXBvdW5kZWQgcGFnZSBzaXplIHNoYXJlZCBieSByeCB3cmJzICovCiAKLQl1OCBtc2l4X3ZlY19uZXh0X2lkeDsKKwl1OCBlcV9uZXh0X2lkeDsKIAlzdHJ1Y3QgYmVfZHJ2X3N0YXRzIGRydl9zdGF0czsKIAogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuX2dycDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCA1YTRhODdlNy4uOWRjOTM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJCXN0cnVjdCBiZV9hc3luY19ldmVudF9ncnA1X3B2aWRfc3RhdGUgKmV2dCkKIHsKIAlpZiAoZXZ0LT5lbmFibGVkKQotCQlhZGFwdGVyLT5wdmlkID0gZXZ0LT50YWc7CisJCWFkYXB0ZXItPnB2aWQgPSBsZTE2X3RvX2NwdShldnQtPnRhZyk7CiAJZWxzZQogCQlhZGFwdGVyLT5wdmlkID0gMDsKIH0KQEAgLTEzMzEsNyArMTMzMSw3IEBACiAKIC8qCiAgKiBVc2VzIE1DQyBmb3IgdGhpcyBjb21tYW5kIGFzIGl0IG1heSBiZSBjYWxsZWQgaW4gQkggY29udGV4dAotICogKG1jID09IE5VTEwpID0+IG11bHRpY2FzdCBwcm9taXNjb3VzCisgKiAobWMgPT0gTlVMTCkgPT4gbXVsdGljYXN0IHByb21pc2N1b3VzCiAgKi8KIGludCBiZV9jbWRfbXVsdGljYXN0X3NldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGE3MTE2M2YuLjkxODdmYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogQkUgd2FzIHByZXZpb3VzbHkgaW4gcHJvbWlzY291cyBtb2RlOyBkaXNhYmxlIGl0ICovCisJLyogQkUgd2FzIHByZXZpb3VzbHkgaW4gcHJvbWlzY3VvdXMgbW9kZTsgZGlzYWJsZSBpdCAqLwogCWlmIChhZGFwdGVyLT5wcm9taXNjdW91cykgewogCQlhZGFwdGVyLT5wcm9taXNjdW91cyA9IGZhbHNlOwogCQliZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLCAwKTsKQEAgLTEwMTgsNyArMTAxOCw4IEBACiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybjsKIAkJfQotCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGFuX2dycCwgcnhjcC0+dmlkKTsKKwkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCisJCQkJCXJ4Y3AtPnZsYW5fdGFnKTsKIAl9IGVsc2UgewogCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KQEAgLTEwNzYsNyArMTA3Nyw4IEBACiAJaWYgKGxpa2VseSghcnhjcC0+dmxhbmYpKQogCQluYXBpX2dyb19mcmFncygmZXFfb2JqLT5uYXBpKTsKIAllbHNlCi0JCXZsYW5fZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGksIGFkYXB0ZXItPnZsYW5fZ3JwLCByeGNwLT52aWQpOworCQl2bGFuX2dyb19mcmFncygmZXFfb2JqLT5uYXBpLCBhZGFwdGVyLT52bGFuX2dycCwKKwkJCQlyeGNwLT52bGFuX3RhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3BhcnNlX3J4X2NvbXBsX3YxKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMTEwMiw3ICsxMTA0LDggQEAKIAlyeGNwLT5wa3RfdHlwZSA9CiAJCUFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCBjYXN0X2VuYywgY29tcGwpOwogCXJ4Y3AtPnZ0bSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2dG0sIGNvbXBsKTsKLQlyeGNwLT52aWQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MSwgdmxhbl90YWcsIGNvbXBsKTsKKwlyeGNwLT52bGFuX3RhZyA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2bGFuX3RhZywKKwkJCQkJY29tcGwpOwogfQogCiBzdGF0aWMgdm9pZCBiZV9wYXJzZV9yeF9jb21wbF92MChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTExMjgsNyArMTEzMSw4IEBACiAJcnhjcC0+cGt0X3R5cGUgPQogCQlBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgY2FzdF9lbmMsIGNvbXBsKTsKIAlyeGNwLT52dG0gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdnRtLCBjb21wbCk7Ci0JcnhjcC0+dmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIHZsYW5fdGFnLCBjb21wbCk7CisJcnhjcC0+dmxhbl90YWcgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdmxhbl90YWcsCisJCQkJCWNvbXBsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9yeF9jb21wbF9pbmZvICpiZV9yeF9jb21wbF9nZXQoc3RydWN0IGJlX3J4X29iaiAqcnhvKQpAQCAtMTE1NSw5ICsxMTU5LDExIEBACiAJCXJ4Y3AtPnZsYW5mID0gMDsKIAogCWlmICghbGFuY2VyX2NoaXAoYWRhcHRlcikpCi0JCXJ4Y3AtPnZpZCA9IHN3YWIxNihyeGNwLT52aWQpOworCQlyeGNwLT52bGFuX3RhZyA9IHN3YWIxNihyeGNwLT52bGFuX3RhZyk7CiAKLQlpZiAoKGFkYXB0ZXItPnB2aWQgPT0gcnhjcC0+dmlkKSAmJiAhYWRhcHRlci0+dmxhbl90YWdbcnhjcC0+dmlkXSkKKwlpZiAoKChhZGFwdGVyLT5wdmlkICYgVkxBTl9WSURfTUFTSykgPT0KKwkJKHJ4Y3AtPnZsYW5fdGFnICYgVkxBTl9WSURfTUFTSykpICYmCisJCSFhZGFwdGVyLT52bGFuX3RhZ1tyeGNwLT52bGFuX3RhZ10pCiAJCXJ4Y3AtPnZsYW5mID0gMDsKIAogCS8qIEFzIHRoZSBjb21wbCBoYXMgYmVlbiBwYXJzZWQsIHJlc2V0IGl0OyB3ZSB3b250IHRvdWNoIGl0IGFnYWluICovCkBAIC0xNDk3LDcgKzE1MDMsNyBAQAogCWlmIChiZV9jbWRfZXFfY3JlYXRlKGFkYXB0ZXIsIGVxLCBhZGFwdGVyLT50eF9lcS5jdXJfZXFkKSkKIAkJZ290byB0eF9lcV9mcmVlOwogCi0JYWRhcHRlci0+dHhfZXEubXNpeF92ZWNfaWR4ID0gYWRhcHRlci0+bXNpeF92ZWNfbmV4dF9pZHgrKzsKKwlhZGFwdGVyLT50eF9lcS5lcV9pZHggPSBhZGFwdGVyLT5lcV9uZXh0X2lkeCsrOwogCiAKIAkvKiBBbGxvYyBUWCBldGggY29tcGwgcXVldWUgKi8KQEAgLTE1OTAsNyArMTU5Niw3IEBACiAJCWlmIChyYykKIAkJCWdvdG8gZXJyOwogCi0JCXJ4by0+cnhfZXEubXNpeF92ZWNfaWR4ID0gYWRhcHRlci0+bXNpeF92ZWNfbmV4dF9pZHgrKzsKKwkJcnhvLT5yeF9lcS5lcV9pZHggPSBhZGFwdGVyLT5lcV9uZXh0X2lkeCsrOwogCiAJCS8qIENRICovCiAJCWNxID0gJnJ4by0+Y3E7CkBAIC0xNjY2LDExICsxNjcyLDExIEBACiAJCWlmICghaXNyKQogCQkJcmV0dXJuIElSUV9OT05FOwogCi0JCWlmICgoMSA8PCBhZGFwdGVyLT50eF9lcS5tc2l4X3ZlY19pZHggJiBpc3IpKQorCQlpZiAoKDEgPDwgYWRhcHRlci0+dHhfZXEuZXFfaWR4ICYgaXNyKSkKIAkJCWV2ZW50X2hhbmRsZShhZGFwdGVyLCAmYWRhcHRlci0+dHhfZXEpOwogCiAJCWZvcl9hbGxfcnhfcXVldWVzKGFkYXB0ZXIsIHJ4bywgaSkgewotCQkJaWYgKCgxIDw8IHJ4by0+cnhfZXEubXNpeF92ZWNfaWR4ICYgaXNyKSkKKwkJCWlmICgoMSA8PCByeG8tPnJ4X2VxLmVxX2lkeCAmIGlzcikpCiAJCQkJZXZlbnRfaGFuZGxlKGFkYXB0ZXIsICZyeG8tPnJ4X2VxKTsKIAkJfQogCX0KQEAgLTE4NzMsNiArMTg3OSw3IEBACiAJCWJlX2RldGVjdF9kdW1wX3VlKGFkYXB0ZXIpOwogCiByZXNjaGVkdWxlOgorCWFkYXB0ZXItPndvcmtfY291bnRlcisrOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+d29yaywgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CiB9CiAKQEAgLTE5NTEsNyArMTk1OCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBiZV9tc2l4X3ZlY19nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCXN0cnVjdCBiZV9lcV9vYmogKmVxX29iaikKIHsKLQlyZXR1cm4gYWRhcHRlci0+bXNpeF9lbnRyaWVzW2VxX29iai0+bXNpeF92ZWNfaWR4XS52ZWN0b3I7CisJcmV0dXJuIGFkYXB0ZXItPm1zaXhfZW50cmllc1tlcV9vYmotPmVxX2lkeF0udmVjdG9yOwogfQogCiBzdGF0aWMgaW50IGJlX3JlcXVlc3RfaXJxKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMjM0NSw2ICsyMzUyLDcgQEAKIAliZV9tY2NfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAJYmVfcnhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAJYmVfdHhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CisJYWRhcHRlci0+ZXFfbmV4dF9pZHggPSAwOwogCiAJaWYgKGJlX3BoeXNmbihhZGFwdGVyKSAmJiBhZGFwdGVyLT5zcmlvdl9lbmFibGVkKQogCQlmb3IgKHZmID0gMDsgdmYgPCBudW1fdmZzOyB2ZisrKQpAQCAtMzE0MSwxMiArMzE0OSwxNCBAQAogc3RhdGljIHZvaWQgYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9ICBhZGFwdGVyLT5uZXRkZXY7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCWlmICghYWRhcHRlcikKKwkJcmV0dXJuOworCisJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKIAkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT53b3JrKTsKIAotCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGFkYXB0ZXItPm5ldGRldik7CiAKIAliZV9jbWRfcmVzZXRfZnVuY3Rpb24oYWRhcHRlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCmluZGV4IDM0OTMzY2IuLjc1ODE1MThlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuYworKysgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCkBAIC0zOCw2ICszOCw4IEBACiAjZGVmaW5lIGJmYV9pb2NfbWFwX3BvcnQoX19pb2MpICgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX21hcF9wb3J0KF9faW9jKSkKICNkZWZpbmUgYmZhX2lvY19ub3RpZnlfZmFpbChfX2lvYykJCQlcCiAJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19ub3RpZnlfZmFpbChfX2lvYykpCisjZGVmaW5lIGJmYV9pb2Nfc3luY19zdGFydChfX2lvYykgICAgICAgICAgICAgICBcCisJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19zeW5jX3N0YXJ0KF9faW9jKSkKICNkZWZpbmUgYmZhX2lvY19zeW5jX2pvaW4oX19pb2MpCQkJXAogCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2Nfc3luY19qb2luKF9faW9jKSkKICNkZWZpbmUgYmZhX2lvY19zeW5jX2xlYXZlKF9faW9jKQkJCVwKQEAgLTYwMiw3ICs2MDQsNyBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElPQ1BGX0VfU0VNTE9DS0VEOgogCQlpZiAoYmZhX2lvY19maXJtd2FyZV9sb2NrKGlvYykpIHsKLQkJCWlmIChiZmFfaW9jX3N5bmNfY29tcGxldGUoaW9jKSkgeworCQkJaWYgKGJmYV9pb2Nfc3luY19zdGFydChpb2MpKSB7CiAJCQkJaW9jcGYtPnJldHJ5X2NvdW50ID0gMDsKIAkJCQliZmFfaW9jX3N5bmNfam9pbihpb2MpOwogCQkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21faHdpbml0KTsKQEAgLTEzMTQsNyArMTMxNiw3IEBACiAgKiBleGVjdXRpb24gY29udGV4dCAoZHJpdmVyL2Jpb3MpIG11c3QgbWF0Y2guCiAgKi8KIHN0YXRpYyBib29sCi1iZmFfaW9jX2Z3dmVyX3ZhbGlkKHN0cnVjdCBiZmFfaW9jICppb2MpCitiZmFfaW9jX2Z3dmVyX3ZhbGlkKHN0cnVjdCBiZmFfaW9jICppb2MsIHUzMiBib290X2VudikKIHsKIAlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHIgZndoZHIsICpkcnZfZndoZHI7CiAKQEAgLTEzMjUsNyArMTMyNyw3IEBACiAJaWYgKGZ3aGRyLnNpZ25hdHVyZSAhPSBkcnZfZndoZHItPnNpZ25hdHVyZSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGZ3aGRyLmV4ZWMgIT0gZHJ2X2Z3aGRyLT5leGVjKQorCWlmIChzd2FiMzIoZndoZHIucGFyYW0pICE9IGJvb3RfZW52KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gYmZhX253X2lvY19md3Zlcl9jbXAoaW9jLCAmZndoZHIpOwpAQCAtMTM1Miw5ICsxMzU0LDEyIEBACiB7CiAJZW51bSBiZmlfaW9jX3N0YXRlIGlvY19md3N0YXRlOwogCWJvb2wgZnd2YWxpZDsKKwl1MzIgYm9vdF9lbnY7CiAKIAlpb2NfZndzdGF0ZSA9IHJlYWRsKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOwogCisJYm9vdF9lbnYgPSBCRklfQk9PVF9MT0FERVJfT1M7CisKIAlpZiAoZm9yY2UpCiAJCWlvY19md3N0YXRlID0gQkZJX0lPQ19VTklOSVQ7CiAKQEAgLTEzNjIsMTAgKzEzNjcsMTAgQEAKIAkgKiBjaGVjayBpZiBmaXJtd2FyZSBpcyB2YWxpZAogCSAqLwogCWZ3dmFsaWQgPSAoaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19VTklOSVQpID8KLQkJZmFsc2UgOiBiZmFfaW9jX2Z3dmVyX3ZhbGlkKGlvYyk7CisJCWZhbHNlIDogYmZhX2lvY19md3Zlcl92YWxpZChpb2MsIGJvb3RfZW52KTsKIAogCWlmICghZnd2YWxpZCkgewotCQliZmFfaW9jX2Jvb3QoaW9jLCBCRklfQk9PVF9UWVBFX05PUk1BTCwgaW9jLT5wY2lkZXYuZGV2aWNlX2lkKTsKKwkJYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGJvb3RfZW52KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTM5Niw3ICsxNDAxLDcgQEAKIAkvKioKIAkgKiBJbml0aWFsaXplIHRoZSBoL3cgZm9yIGFueSBvdGhlciBzdGF0ZXMuCiAJICovCi0JYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGlvYy0+cGNpZGV2LmRldmljZV9pZCk7CisJYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGJvb3RfZW52KTsKIH0KIAogdm9pZApAQCAtMTUwNiw3ICsxNTExLDcgQEAKICAqLwogc3RhdGljIHZvaWQKIGJmYV9pb2NfZG93bmxvYWRfZncoc3RydWN0IGJmYV9pb2MgKmlvYywgdTMyIGJvb3RfdHlwZSwKLQkJICAgIHUzMiBib290X3BhcmFtKQorCQkgICAgdTMyIGJvb3RfZW52KQogewogCXUzMiAqZndpbWc7CiAJdTMyIHBnbnVtLCBwZ29mZjsKQEAgLTE1NTgsMTAgKzE1NjMsMTAgQEAKIAkvKgogCSAqIFNldCBib290IHR5cGUgYW5kIGJvb3QgcGFyYW0gYXQgdGhlIGVuZC4KIAkqLwotCXdyaXRlbCgoc3dhYjMyKHN3YWIzMihib290X3R5cGUpKSksICgoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQpCisJd3JpdGVsKGJvb3RfdHlwZSwgKChpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCkKIAkJCSsgKEJGSV9CT09UX1RZUEVfT0ZGKSkpOwotCXdyaXRlbCgoc3dhYjMyKHN3YWIzMihib290X3BhcmFtKSkpLCAoKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0KQotCQkJKyAoQkZJX0JPT1RfUEFSQU1fT0ZGKSkpOworCXdyaXRlbChib290X2VudiwgKChpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCkKKwkJCSsgKEJGSV9CT09UX0xPQURFUl9PRkYpKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNzIxLDcgKzE3MjYsNyBAQAogICogYXMgdGhlIGVudHJ5IHZlY3Rvci4KICAqLwogc3RhdGljIHZvaWQKLWJmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgYm9vdF90eXBlLCB1MzIgYm9vdF9wYXJhbSkKK2JmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgYm9vdF90eXBlLCB1MzIgYm9vdF9lbnYpCiB7CiAJdm9pZCBfX2lvbWVtICpyYjsKIApAQCAtMTczNCw3ICsxNzM5LDcgQEAKIAkgKiBJbml0aWFsaXplIElPQyBzdGF0ZSBvZiBhbGwgZnVuY3Rpb25zIG9uIGEgY2hpcCByZXNldC4KIAkgKi8KIAlyYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOwotCWlmIChib290X3BhcmFtID09IEJGSV9CT09UX1RZUEVfTUVNVEVTVCkgeworCWlmIChib290X3R5cGUgPT0gQkZJX0JPT1RfVFlQRV9NRU1URVNUKSB7CiAJCXdyaXRlbChCRklfSU9DX01FTVRFU1QsIChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRykpOwogCQl3cml0ZWwoQkZJX0lPQ19NRU1URVNULCAocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpKTsKIAl9IGVsc2UgewpAQCAtMTc0Myw3ICsxNzQ4LDcgQEAKIAl9CiAKIAliZmFfaW9jX21zZ2ZsdXNoKGlvYyk7Ci0JYmZhX2lvY19kb3dubG9hZF9mdyhpb2MsIGJvb3RfdHlwZSwgYm9vdF9wYXJhbSk7CisJYmZhX2lvY19kb3dubG9hZF9mdyhpb2MsIGJvb3RfdHlwZSwgYm9vdF9lbnYpOwogCiAJLyoqCiAJICogRW5hYmxlIGludGVycnVwdHMganVzdCBiZWZvcmUgc3RhcnRpbmcgTFBVCkBAIC0yMjE5LDEzICsyMjI0LDkgQEAKIHN0YXRpYyB2b2lkCiBiZmFfaW9jX3JlY292ZXIoc3RydWN0IGJmYV9pb2MgKmlvYykKIHsKLQl1MTYgYmRmOwotCi0JYmRmID0gKGlvYy0+cGNpZGV2LnBjaV9zbG90IDw8IDggfCBpb2MtPnBjaWRldi5wY2lfZnVuYyA8PCAzIHwKLQkJCQkJaW9jLT5wY2lkZXYuZGV2aWNlX2lkKTsKLQotCXByX2NyaXQoIkZpcm13YXJlIGhlYXJ0YmVhdCBmYWlsdXJlIGF0ICVkIiwgYmRmKTsKLQlCVUdfT04oMSk7CisJcHJfY3JpdCgiSGVhcnQgQmVhdCBvZiBJT0MgaGFzIGZhaWxlZFxuIik7CisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19oYmZhaWxzKTsKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9IQkZBSUwpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuaCBiL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmgKaW5kZXggZTQ5NzRiYy4uYmQ0OGFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuaAorKysgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5oCkBAIC0xOTQsNiArMTk0LDcgQEAKIAkJCQkJYm9vbCBtc2l4KTsKIAl2b2lkCQkoKmlvY19ub3RpZnlfZmFpbCkJKHN0cnVjdCBiZmFfaW9jICppb2MpOwogCXZvaWQJCSgqaW9jX293bmVyc2hpcF9yZXNldCkJKHN0cnVjdCBiZmFfaW9jICppb2MpOworCWJvb2wJCSgqaW9jX3N5bmNfc3RhcnQpICAgICAgIChzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIAl2b2lkCQkoKmlvY19zeW5jX2pvaW4pCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIAl2b2lkCQkoKmlvY19zeW5jX2xlYXZlKQkoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiAJdm9pZAkJKCppb2Nfc3luY19hY2spCQkoc3RydWN0IGJmYV9pb2MgKmlvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvY19jdC5jIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2NfY3QuYwppbmRleCA0Njk5OTdjLi44N2FlY2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvY19jdC5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jX2N0LmMKQEAgLTQxLDYgKzQxLDcgQEAKIHN0YXRpYyB2b2lkIGJmYV9pb2NfY3RfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfaW9jICppb2MsIGJvb2wgbXNpeCk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X25vdGlmeV9mYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9vd25lcnNoaXBfcmVzZXQoc3RydWN0IGJmYV9pb2MgKmlvYyk7CitzdGF0aWMgYm9vbCBiZmFfaW9jX2N0X3N5bmNfc3RhcnQoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X3N5bmNfam9pbihzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfc3luY19sZWF2ZShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfc3luY19hY2soc3RydWN0IGJmYV9pb2MgKmlvYyk7CkBAIC02Myw2ICs2NCw3IEBACiAJbndfaHdpZl9jdC5pb2NfaXNyX21vZGVfc2V0ID0gYmZhX2lvY19jdF9pc3JfbW9kZV9zZXQ7CiAJbndfaHdpZl9jdC5pb2Nfbm90aWZ5X2ZhaWwgPSBiZmFfaW9jX2N0X25vdGlmeV9mYWlsOwogCW53X2h3aWZfY3QuaW9jX293bmVyc2hpcF9yZXNldCA9IGJmYV9pb2NfY3Rfb3duZXJzaGlwX3Jlc2V0OworCW53X2h3aWZfY3QuaW9jX3N5bmNfc3RhcnQgPSBiZmFfaW9jX2N0X3N5bmNfc3RhcnQ7CiAJbndfaHdpZl9jdC5pb2Nfc3luY19qb2luID0gYmZhX2lvY19jdF9zeW5jX2pvaW47CiAJbndfaHdpZl9jdC5pb2Nfc3luY19sZWF2ZSA9IGJmYV9pb2NfY3Rfc3luY19sZWF2ZTsKIAlud19od2lmX2N0LmlvY19zeW5jX2FjayA9IGJmYV9pb2NfY3Rfc3luY19hY2s7CkBAIC0zNDUsNiArMzQ3LDMyIEBACiAvKioKICAqIFN5bmNocm9uaXplZCBJT0MgZmFpbHVyZSBwcm9jZXNzaW5nIHJvdXRpbmVzCiAgKi8KK3N0YXRpYyBib29sCitiZmFfaW9jX2N0X3N5bmNfc3RhcnQoc3RydWN0IGJmYV9pb2MgKmlvYykKK3sKKwl1MzIgcjMyID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwl1MzIgc3luY19yZXFkID0gYmZhX2lvY19jdF9nZXRfc3luY19yZXFkKHIzMik7CisKKwkvKgorCSAqIERyaXZlciBsb2FkIHRpbWUuICBJZiB0aGUgc3luYyByZXF1aXJlZCBiaXQgZm9yIHRoaXMgUENJIGZuCisJICogaXMgc2V0LCBpdCBpcyBkdWUgdG8gYW4gdW5jbGVhbiBleGl0IGJ5IHRoZSBkcml2ZXIgZm9yIHRoaXMKKwkgKiBQQ0kgZm4gaW4gdGhlIHByZXZpb3VzIGluY2FybmF0aW9uLiBXaG9ldmVyIGNvbWVzIGhlcmUgZmlyc3QKKwkgKiBzaG91bGQgY2xlYW4gaXQgdXAsIG5vIG1hdHRlciB3aGljaCBQQ0kgZm4uCisJICovCisKKwlpZiAoc3luY19yZXFkICYgYmZhX2lvY19jdF9zeW5jX3Bvcyhpb2MpKSB7CisJCXdyaXRlbCgwLCBpb2MtPmlvY19yZWdzLmlvY19mYWlsX3N5bmMpOworCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnKTsKKwkJd3JpdGVsKEJGSV9JT0NfVU5JTklULCBpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKKwkJd3JpdGVsKEJGSV9JT0NfVU5JTklULCBpb2MtPmlvY19yZWdzLmFsdF9pb2NfZndzdGF0ZSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBiZmFfaW9jX2N0X3N5bmNfY29tcGxldGUoaW9jKTsKK30KKy8qKgorICogU3luY2hyb25pemVkIElPQyBmYWlsdXJlIHByb2Nlc3Npbmcgcm91dGluZXMKKyAqLwogc3RhdGljIHZvaWQKIGJmYV9pb2NfY3Rfc3luY19qb2luKHN0cnVjdCBiZmFfaW9jICppb2MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYmZpLmggYi9kcml2ZXJzL25ldC9ibmEvYmZpLmgKaW5kZXggYTk3Mzk2OC4uNjA1MDM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmaS5oCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9iZmkuaApAQCAtMTg0LDEyICsxODQsMTQgQEAKICNkZWZpbmUgQkZJX0lPQ19NU0dMRU5fTUFYCTMyCS8qIDMyIGJ5dGVzICovCiAKICNkZWZpbmUgQkZJX0JPT1RfVFlQRV9PRkYJCTgKLSNkZWZpbmUgQkZJX0JPT1RfUEFSQU1fT0ZGCQkxMgorI2RlZmluZSBCRklfQk9PVF9MT0FERVJfT0ZGCQkxMgogCi0jZGVmaW5lIEJGSV9CT09UX1RZUEVfTk9STUFMIAkJMAkvKiBwYXJhbSBpcyBkZXZpY2UgaWQgKi8KKyNkZWZpbmUgQkZJX0JPT1RfVFlQRV9OT1JNQUwgCQkwCiAjZGVmaW5lCUJGSV9CT09UX1RZUEVfRkxBU0gJCTEKICNkZWZpbmUJQkZJX0JPT1RfVFlQRV9NRU1URVNUCQkyCiAKKyNkZWZpbmUgQkZJX0JPT1RfTE9BREVSX09TCQkwCisKICNkZWZpbmUgQkZJX0JPT1RfTUVNVEVTVF9SRVNfQUREUiAgIDB4OTAwCiAjZGVmaW5lIEJGSV9CT09UX01FTVRFU1RfUkVTX1NJRyAgICAweEEwQTFBMkEzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9ibmFfaHcuaCBiL2RyaXZlcnMvbmV0L2JuYS9ibmFfaHcuaAppbmRleCA4MDZiMjI0Li42Y2I4OTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JuYV9ody5oCkBAIC04OTcsNyArODk3LDcgQEAKICAqIENhdGFwdWx0IFJTUyBUYWJsZSBCYXNlIE9mZnNldCBBZGRyZXNzCiAgKgogICogRXhpc3RzIGluIFJBRCBtZW1vcnkgc3BhY2UuCi0gKiBFYWNoIGVudHJ5IGlzIDM1MiBiaXRzLCBidXQgYWxsaWduZWQgb24KKyAqIEVhY2ggZW50cnkgaXMgMzUyIGJpdHMsIGJ1dCBhbGlnbmVkIG9uCiAgKiA2NCBieXRlICg1MTIgYml0KSBib3VuZGFyeS4gQWNjZXNzZWQKICAqIDQgYnl0ZSB3b3JkcywgdGhlIHdob2xlIGVudHJ5IGNhbiBiZQogICogYnJva2VuIGludG8gMTEgd29yZCBhY2Nlc3Nlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMgYi9kcml2ZXJzL25ldC9ibmEvYm5hZC5jCmluZGV4IDlmMzU2ZDUuLjhlNmNlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JuYWQuYwpAQCAtMTgzNyw3ICsxODM3LDYgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBSeCBldmVudCBoYW5kbGVycyAqLwogCXJ4X2NiZm4ucmNiX3NldHVwX2NiZm4gPSBibmFkX2NiX3JjYl9zZXR1cDsKIAlyeF9jYmZuLnJjYl9kZXN0cm95X2NiZm4gPSBibmFkX2NiX3JjYl9kZXN0cm95OwotCXJ4X2NiZm4ucmNiX2Rlc3Ryb3lfY2JmbiA9IE5VTEw7CiAJcnhfY2Jmbi5jY2Jfc2V0dXBfY2JmbiA9IGJuYWRfY2JfY2NiX3NldHVwOwogCXJ4X2NiZm4uY2NiX2Rlc3Ryb3lfY2JmbiA9IGJuYWRfY2JfY2NiX2Rlc3Ryb3k7CiAJcnhfY2Jmbi5yeF9jbGVhbnVwX2NiZm4gPSBibmFkX2NiX3J4X2NsZWFudXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggOGU2ZDYxOC4uZDgzODNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtODQxMyw2ICs4NDEzLDggQEAKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKKwlkZWxfdGltZXJfc3luYygmYnAtPnRpbWVyKTsKKwogCWlmIChicC0+bWlwc19maXJtd2FyZSkKIAkJcmVsZWFzZV9maXJtd2FyZShicC0+bWlwc19maXJtd2FyZSk7CiAJaWYgKGJwLT5ydjJwX2Zpcm13YXJlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnguaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKaW5kZXggYjdmZjg3Yi4uZTBmY2E3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnguaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCkBAIC0xMjIwLDcgKzEyMjAsNyBAQAogCXN0cnVjdCBibngyeF9kY2J4X3BvcnRfcGFyYW1zCQlkY2J4X3BvcnRfcGFyYW1zOwogCWludAkJCQkJZGNiX3ZlcnNpb247CiAKLQkvKiBEQ0JYIE5lZ290YXRpb24gcmVzdWx0cyAqLworCS8qIERDQlggTmVnb3RpYXRpb24gcmVzdWx0cyAqLwogCXN0cnVjdCBkY2J4X2ZlYXR1cmVzCQkJZGNieF9sb2NhbF9mZWF0OwogCXUzMgkJCQkJZGNieF9lcnJvcjsKIAl1MzIJCQkJCXBlbmRpbmdfbWF4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYwppbmRleCBlODNhYzZkLi4xNjU4MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYwpAQCAtMjAxOSwxNSArMjAxOSwyMyBAQAogc3RhdGljIGlubGluZSAgdTggYm54Mnhfc2V0X3BiZF9jc3VtX2UyKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBza19idWZmICpza2IsCiAJdTMyICpwYXJzaW5nX2RhdGEsIHUzMiB4bWl0X3R5cGUpCiB7Ci0JKnBhcnNpbmdfZGF0YSB8PSAoKHRjcF9oZHJsZW4oc2tiKS80KSA8PAotCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9MRU5HVEhfRFdfU0hJRlQpICYKLQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfTEVOR1RIX0RXOworCSpwYXJzaW5nX2RhdGEgfD0KKwkJCSgoKCh1OCAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEpID4+IDEpIDw8CisJCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9TVEFSVF9PRkZTRVRfV19TSElGVCkgJgorCQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfU1RBUlRfT0ZGU0VUX1c7CiAKLQkqcGFyc2luZ19kYXRhIHw9ICgoKCh1OCAqKXRjcF9oZHIoc2tiKSAtIHNrYi0+ZGF0YSkgLyAyKSA8PAotCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9TVEFSVF9PRkZTRVRfV19TSElGVCkgJgotCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9TVEFSVF9PRkZTRVRfVzsKKwlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNX1RDUCkgeworCQkqcGFyc2luZ19kYXRhIHw9ICgodGNwX2hkcmxlbihza2IpIC8gNCkgPDwKKwkJCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX0xFTkdUSF9EV19TSElGVCkgJgorCQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfTEVOR1RIX0RXOwogCi0JcmV0dXJuIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgKyB0Y3BfaGRybGVuKHNrYikgLSBza2ItPmRhdGE7CisJCXJldHVybiBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgdGNwX2hkcmxlbihza2IpIC0gc2tiLT5kYXRhOworCX0gZWxzZQorCQkvKiBXZSBzdXBwb3J0IGNoZWNrc3VtIG9mZmxvYWQgZm9yIFRDUCBhbmQgVURQIG9ubHkuCisJCSAqIE5vIG5lZWQgdG8gcGFzcyB0aGUgVURQIGhlYWRlciBsZW5ndGggLSBpdCdzIGEgY29uc3RhbnQuCisJCSAqLworCQlyZXR1cm4gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArCisJCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIC0gc2tiLT5kYXRhOwogfQogCiAvKioKQEAgLTIwNDMsNyArMjA1MSw3IEBACiAJc3RydWN0IGV0aF90eF9wYXJzZV9iZF9lMXggKnBiZCwKIAl1MzIgeG1pdF90eXBlKQogewotCXU4IGhsZW4gPSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEpIC8gMjsKKwl1OCBobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhKSA+PiAxOwogCiAJLyogZm9yIG5vdyBOUyBmbGFnIGlzIG5vdCB1c2VkIGluIExpbnV4ICovCiAJcGJkLT5nbG9iYWxfZGF0YSA9CkBAIC0yMDUxLDkgKzIwNTksMTUgQEAKIAkJCSBFVEhfVFhfUEFSU0VfQkRfRTFYX0xMQ19TTkFQX0VOX1NISUZUKSk7CiAKIAlwYmQtPmlwX2hsZW5fdyA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0KLQkJCXNrYl9uZXR3b3JrX2hlYWRlcihza2IpKSAvIDI7CisJCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgPj4gMTsKIAotCWhsZW4gKz0gcGJkLT5pcF9obGVuX3cgKyB0Y3BfaGRybGVuKHNrYikgLyAyOworCWhsZW4gKz0gcGJkLT5pcF9obGVuX3c7CisKKwkvKiBXZSBzdXBwb3J0IGNoZWNrc3VtIG9mZmxvYWQgZm9yIFRDUCBhbmQgVURQIG9ubHkgKi8KKwlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNX1RDUCkKKwkJaGxlbiArPSB0Y3BfaGRybGVuKHNrYikgLyAyOworCWVsc2UKKwkJaGxlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcikgLyAyOwogCiAJcGJkLT50b3RhbF9obGVuX3cgPSBjcHVfdG9fbGUxNihobGVuKTsKIAlobGVuID0gaGxlbioyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCmluZGV4IGY1MDUwMTUuLjg5Y2I5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKQEAgLTIxMTQsMTkgKzIxMTQsMTggQEAKIAlmb3IgKGkgPSAwOyBpIDwgKGRhdGEgKiAyKTsgaSsrKSB7CiAJCWlmICgoaSAlIDIpID09IDApCiAJCQlibngyeF9zZXRfbGVkKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzLAotCQkJCSAgICAgIExFRF9NT0RFX09QRVIsIFNQRUVEXzEwMDApOworCQkJCSAgICAgIExFRF9NT0RFX09OLCBTUEVFRF8xMDAwKTsKIAkJZWxzZQogCQkJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKLQkJCQkgICAgICBMRURfTU9ERV9PRkYsIDApOworCQkJCSAgICAgIExFRF9NT0RFX0ZST05UX1BBTkVMX09GRiwgMCk7CiAKIAkJbXNsZWVwX2ludGVycnVwdGlibGUoNTAwKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJYnJlYWs7CiAJfQogCi0JaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkKLQkJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywgTEVEX01PREVfT1BFUiwKLQkJCSAgICAgIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCk7CisJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKKwkJICAgICAgTEVEX01PREVfT1BFUiwgYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaAppbmRleCBiZTUwM2NjLi5kYWMxYmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaApAQCAtMzAxOSw3ICszMDE5LDcgQEAKIAogCiAvKgotICogY29tbW9uIGZsYWcgdG8gaW5kaWNhdGUgZXhpc3RhbmNlIG9mIFRQQS4KKyAqIGNvbW1vbiBmbGFnIHRvIGluZGljYXRlIGV4aXN0ZW5jZSBvZiBUUEEuCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX3RwYV9leGlzdCB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKaW5kZXggZjJmMzY3ZC4uOTc0ZWYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwpAQCAtMjgyMyw3ICsyODIzLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXUxNiBjbnQsIGN0cmw7Ci0JLyogV2FpdCBmb3Igc29mdCByZXNldCB0byBnZXQgY2xlYXJlZCB1cHRvIDEgc2VjICovCisJLyogV2FpdCBmb3Igc29mdCByZXNldCB0byBnZXQgY2xlYXJlZCB1cCB0byAxIHNlYyAqLwogCWZvciAoY250ID0gMDsgY250IDwgMTAwMDsgY250KyspIHsKIAkJYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCiAJCQkJTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19DVFJMLCAmY3RybCk7CkBAIC00MTQxLDcgKzQxNDEsNyBAQAogCQkJdmFsID0gKDE8PDUpOwogCQkJLyoKIAkJCSAqIE5vdGUgdGhhdCAyLjVHIHdvcmtzIG9ubHkgd2hlbiB1c2VkIHdpdGggMUcKLQkJCSAqIGFkdmVydGlzbWVudAorCQkJICogYWR2ZXJ0aXNlbWVudAogCQkJICovCiAJCX0gZWxzZQogCQkJdmFsID0gKDE8PDUpOwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAKIAkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKQogCQkJdmFsIHw9ICgxPDw3KTsKIAotCQkvKiBOb3RlIHRoYXQgMi41RyB3b3JrcyBvbmx5IHdoZW4gdXNlZCB3aXRoIDFHIGFkdmVydGlzbWVudCAqLworCQkvKiBOb3RlIHRoYXQgMi41RyB3b3JrcyBvbmx5IHdoZW4gdXNlZCB3aXRoIDFHIGFkdmVydGlzZW1lbnQgKi8KIAkJaWYgKHBoeS0+c3BlZWRfY2FwX21hc2sgJgogCQkJKFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcgfAogCQkJIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMl81RykpCkBAIC01MjMyLDE0ICs1MjMyLDE0IEBACiAJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKIAkJCQkgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDEpOwogCX0gZWxzZSB7Ci0JCS8qIEZvcmNlIDFHYnBzIHVzaW5nIGF1dG9uZWcgd2l0aCAxRyBhZHZlcnRpc21lbnQgKi8KKwkJLyogRm9yY2UgMUdicHMgdXNpbmcgYXV0b25lZyB3aXRoIDFHIGFkdmVydGlzZW1lbnQgKi8KIAogCQkvKiBBbGxvdyBDTDM3IHRocm91Z2ggQ0w3MyAqLwogCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNiBBdXRvTmVnXG4iKTsKIAkJYm54MnhfY2w0NV93cml0ZShicCwgcGh5LAogCQkJCSBNRElPX0FOX0RFVkFELCBNRElPX0FOX1JFR19DTDM3X0NMNzMsIDB4MDQwYyk7CiAKLQkJLyogRW5hYmxlIEZ1bGwtRHVwbGV4IGFkdmVydGlzbWVudCBvbiBDTDM3ICovCisJCS8qIEVuYWJsZSBGdWxsLUR1cGxleCBhZHZlcnRpc2VtZW50IG9uIENMMzcgKi8KIAkJYm54MnhfY2w0NV93cml0ZShicCwgcGh5LAogCQkJCSBNRElPX0FOX0RFVkFELCBNRElPX0FOX1JFR19DTDM3X0ZDX0xQLCAweDAwMjApOwogCQkvKiBFbmFibGUgQ0wzNyBBTiAqLwpAQCAtNjI2OSw3ICs2MjY5LDcgQEAKIAogCXN3aXRjaCAoYWN0dWFsX3BoeV9zZWxlY3Rpb24pIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1BIWV9TRUxFQ1RJT05fSEFSRFdBUkVfREVGQVVMVDoKLQkJLyogRG8gbm90aGluZy4gRXNzZW50aWFseSB0aGlzIGlzIGxpa2UgdGhlIHByaW9yaXR5IGNvcHBlciAqLworCQkvKiBEbyBub3RoaW5nLiBFc3NlbnRpYWxseSB0aGlzIGlzIGxpa2UgdGhlIHByaW9yaXR5IGNvcHBlciAqLwogCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1BIWV9TRUxFQ1RJT05fRklSU1RfUEhZX1BSSU9SSVRZOgogCQl2YWwgfD0gTURJT19DVExfUkVHXzg0ODIzX01FRElBX1BSSU9SSVRZX0NPUFBFUjsKQEAgLTc3NjUsNyArNzc2NSw3IEBACiAJUkVHX1dSKGJwLCBOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMCk7CiAKIAltc2xlZXAoMTApOwotCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGVkIGJ5IEdQSU8gMQorCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGxlZCBieSBHUElPIDEKIAkgKiBIb2xkIGl0IGFzIHZhcnMgbG93CiAJICovCiAJIC8qIGNsZWFyIGxpbmsgbGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKaW5kZXggMzJlNjRjYzguLmE5N2E0YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKQEAgLTM3MDIsNyArMzcwMiw3IEBACiAJaWYgKChod19jb25zICYgRVFfREVTQ19NQVhfUEFHRSkgPT0gRVFfREVTQ19NQVhfUEFHRSkKIAkJaHdfY29ucysrOwogCi0JLyogVGhpcyBmdW5jdGlvbiBtYXkgbmV2ZXIgcnVuIGluIHBhcnJhbGVsIHdpdGggaXRzZWxmIGZvciBhCisJLyogVGhpcyBmdW5jdGlvbiBtYXkgbmV2ZXIgcnVuIGluIHBhcmFsbGVsIHdpdGggaXRzZWxmIGZvciBhCiAJICogc3BlY2lmaWMgYnAsIHRodXMgdGhlcmUgaXMgbm8gbmVlZCBpbiAicGFpcmVkIiByZWFkIG1lbW9yeQogCSAqIGJhcnJpZXIgaGVyZS4KIAkgKi8KQEAgLTUwODksNyArNTA4OSw3IEBACiAJCS8qIFN0ZXAgMTogc2V0IHplcm9lcyB0byBhbGwgaWx0IHBhZ2UgZW50cmllcyB3aXRoIHZhbGlkIGJpdCBvbgogCQkgKiBTdGVwIDI6IHNldCB0aGUgdGltZXJzIGZpcnN0L2xhc3QgaWx0IGVudHJ5IHRvIHBvaW50CiAJCSAqIHRvIHRoZSBlbnRpcmUgcmFuZ2UgdG8gcHJldmVudCBJTFQgcmFuZ2UgZXJyb3IgZm9yIDNyZC80dGgKLQkJICogdm5pYwkodGhpcyBjb2RlIGFzc3VtZXMgZXhpc3RhbmNlIG9mIHRoZSB2bmljKQorCQkgKiB2bmljCSh0aGlzIGNvZGUgYXNzdW1lcyBleGlzdGVuY2Ugb2YgdGhlIHZuaWMpCiAJCSAqCiAJCSAqIGJvdGggc3RlcHMgcGVyZm9ybWVkIGJ5IGNhbGwgdG8gYm54MnhfaWx0X2NsaWVudF9pbml0X29wKCkKIAkJICogd2l0aCBkdW1teSBUTSBjbGllbnQKQEAgLTg2ODUsNyArODY4NSw3IEBACiAJCQkJRTFIX0ZVTkNfTUFYICogc2l6ZW9mKHN0cnVjdCBkcnZfZnVuY19tYik7CiAJCS8qCiAJCSAqIGdldCBtZiBjb25maWd1cmF0aW9uOgotCQkgKiAxLiBleGlzdGFuY2Ugb2YgTUYgY29uZmlndXJhdGlvbgorCQkgKiAxLiBleGlzdGVuY2Ugb2YgTUYgY29uZmlndXJhdGlvbgogCQkgKiAyLiBNQUMgYWRkcmVzcyBtdXN0IGJlIGxlZ2FsIChjaGVjayBvbmx5IHVwcGVyIGJ5dGVzKQogCQkgKiAgICBmb3IgIFN3aXRjaC1JbmRlcGVuZGVudCBtb2RlOwogCQkgKiAgICBPVkxBTiBtdXN0IGJlIGxlZ2FsIGZvciBTd2l0Y2gtRGVwZW5kZW50IG1vZGUKQEAgLTg3MjcsNyArODcyNyw3IEBACiAJCQlkZWZhdWx0OgogCQkJCS8qIFVua25vd24gY29uZmlndXJhdGlvbjogcmVzZXQgbWZfY29uZmlnICovCiAJCQkJYnAtPm1mX2NvbmZpZ1t2bl0gPSAwOwotCQkJCURQKE5FVElGX01TR19QUk9CRSwgIlVua293biBNRiBtb2RlIDB4JXhcbiIsCisJCQkJRFAoTkVUSUZfTVNHX1BST0JFLCAiVW5rbm93biBNRiBtb2RlIDB4JXhcbiIsCiAJCQkJICAgdmFsKTsKIAkJCX0KIAkJfQpAQCAtOTc3Nyw3ICs5Nzc3LDcgQEAKIAogI2VuZGlmCiAKLQkvKiBDb25maWd1cmUgaW50ZXJ1cHQgbW9kZTogdHJ5IHRvIGVuYWJsZSBNU0ktWC9NU0kgaWYKKwkvKiBDb25maWd1cmUgaW50ZXJydXB0IG1vZGU6IHRyeSB0byBlbmFibGUgTVNJLVgvTVNJIGlmCiAJICogbmVlZGVkLCBzZXQgYnAtPm51bV9xdWV1ZXMgYXBwcm9wcmlhdGVseS4KIAkgKi8KIAlibngyeF9zZXRfaW50X21vZGUoYnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9yZWcuaAppbmRleCAxYzg5ZjE5Li4xNTA5YTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9yZWcuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9yZWcuaApAQCAtMTc1LDkgKzE3NSw5IEBACiAgICB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY3JlZGl0CiAgICBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDEgYXQgc3RhcnQtdXAuICovCiAjZGVmaW5lIENDTV9SRUdfQ0ZDX0lOSVRfQ1JECQkJCQkgMHhkMDIwNAotLyogW1JXIDJdIEF1eGlsbGFyeSBjb3VudGVyIGZsYWcgUSBudW1iZXIgMS4gKi8KKy8qIFtSVyAyXSBBdXhpbGlhcnkgY291bnRlciBmbGFnIFEgbnVtYmVyIDEuICovCiAjZGVmaW5lIENDTV9SRUdfQ05UX0FVWDFfUQkJCQkJIDB4ZDAwYzgKLS8qIFtSVyAyXSBBdXhpbGxhcnkgY291bnRlciBmbGFnIFEgbnVtYmVyIDIuICovCisvKiBbUlcgMl0gQXV4aWxpYXJ5IGNvdW50ZXIgZmxhZyBRIG51bWJlciAyLiAqLwogI2RlZmluZSBDQ01fUkVHX0NOVF9BVVgyX1EJCQkJCSAweGQwMGNjCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgdmFsdWUgZm9yIFFNIHJlcXVlc3QgKHByaW1hcnkpLiAqLwogI2RlZmluZSBDQ01fUkVHX0NRTV9DQ01fSERSX1AJCQkJCSAweGQwMDhjCkBAIC00NTcsMTMgKzQ1NywxMyBAQAogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfOSAJCQkJIDB4YzIxZGMKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBDU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4YzIwMDgKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzAgKi8KICNkZWZpbmUgQ1NETV9SRUdfQ01QX0NPVU5URVJfTUFYMAkJCQkgMHhjMjAxYwotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzEgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMSAqLwogI2RlZmluZSBDU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgxCQkJCSAweGMyMDIwCi0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMiAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMyICovCiAjZGVmaW5lIENTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDIJCQkJIDB4YzIwMjQKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMzICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzMgKi8KICNkZWZpbmUgQ1NETV9SRUdfQ01QX0NPVU5URVJfTUFYMwkJCQkgMHhjMjAyOAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY29tcGxldGlvbgogICAgY291bnRlcnMuICovCkBAIC04NTEsNyArODUxLDcgQEAKICNkZWZpbmUgSUdVX1JFR19BVFROX01TR19BRERSX0wJCQkJIDB4MTMwMTIwCiAvKiBbUiA0XSBEZWJ1ZzogWzNdIC0gYXR0ZW50aW9uIHdyaXRlIGRvbmUgbWVzc2FnZSBpcyBwZW5kaW5nICgwLW5vIHBlbmRpbmc7CiAgKiAxLXBlbmRpbmcpLiBbMjowXSA9IFBGSUQuIFBlbmRpbmcgbWVhbnMgYXR0ZW50aW9uIG1lc3NhZ2Ugd2FzIHNlbnQ7IGJ1dAotICogd3JpdGUgZG9uZSBkaWRudCByZWNlaXZlLiAqLworICogd3JpdGUgZG9uZSBkaWRuJ3QgcmVjZWl2ZS4gKi8KICNkZWZpbmUgSUdVX1JFR19BVFROX1dSSVRFX0RPTkVfUEVORElORwkJCSAweDEzMDAzMAogI2RlZmluZSBJR1VfUkVHX0JMT0NLX0NPTkZJR1VSQVRJT04JCQkJIDB4MTMwMDAwCiAjZGVmaW5lIElHVV9SRUdfQ09NTUFORF9SRUdfMzJMU0JfREFUQQkJCQkgMHgxMzAxMjQKQEAgLTg2Miw3ICs4NjIsNyBAQAogI2RlZmluZSBJR1VfUkVHX0NTVE9STV9UWVBFXzBfU0JfQ0xFQU5VUAkJCSAweDEzMDIwMAogLyogW1IgNV0gRGVidWc6IGN0cmxfZnNtICovCiAjZGVmaW5lIElHVV9SRUdfQ1RSTF9GU00JCQkJCSAweDEzMDA2NAotLyogW1IgMV0gZGF0YSBhdmFpbGJsZSBmb3IgZXJyb3IgbWVtb3J5LiBJZiB0aGlzIGJpdCBpcyBjbGVhciBkbyBub3QgcmVkCisvKiBbUiAxXSBkYXRhIGF2YWlsYWJsZSBmb3IgZXJyb3IgbWVtb3J5LiBJZiB0aGlzIGJpdCBpcyBjbGVhciBkbyBub3QgcmVkCiAgKiBmcm9tIGVycm9yX2hhbmRsaW5nX21lbW9yeS4gKi8KICNkZWZpbmUgSUdVX1JFR19FUlJPUl9IQU5ETElOR19EQVRBX1ZBTElECQkJIDB4MTMwMTMwCiAvKiBbUlcgMTFdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KQEAgLTMwMTUsNyArMzAxNSw3IEBACiAgICBibG9jay4gU2hvdWxkIGJlIHVzZWQgZm9yIGNsb3NlIHRoZSBnYXRlcy4gKi8KICNkZWZpbmUgUFhQX1JFR19IU1RfRElTQ0FSRF9ET09SQkVMTFMJCQkJIDB4MTAzMGE0CiAvKiBbUiAxXSBkZWJ1ZyBvbmx5OiAnMScgbWVhbnMgdGhpcyBQU1dIU1QgaXMgZGlzY2FyZGluZyBkb29yYmVsbHMuIFRoaXMgYml0Ci0gICBzaG91bGQgdXBkYXRlIGFjY29yaW5nIHRvICdoc3RfZGlzY2FyZF9kb29yYmVsbHMnIHJlZ2lzdGVyIHdoZW4gdGhlIHN0YXRlCisgICBzaG91bGQgdXBkYXRlIGFjY29yZGluZyB0byAnaHN0X2Rpc2NhcmRfZG9vcmJlbGxzJyByZWdpc3RlciB3aGVuIHRoZSBzdGF0ZQogICAgbWFjaGluZSBpcyBpZGxlICovCiAjZGVmaW5lIFBYUF9SRUdfSFNUX0RJU0NBUkRfRE9PUkJFTExTX1NUQVRVUwkJCSAweDEwMzBhMAogLyogW1JXIDFdIFdoZW4gMTsgbmV3IGludGVybmFsIHdyaXRlcyBhcnJpdmluZyB0byB0aGUgYmxvY2sgYXJlIGRpc2NhcmRlZC4KQEAgLTMwMjMsNyArMzAyMyw3IEBACiAjZGVmaW5lIFBYUF9SRUdfSFNUX0RJU0NBUkRfSU5URVJOQUxfV1JJVEVTCQkJIDB4MTAzMGE4CiAvKiBbUiA2XSBkZWJ1ZyBvbmx5OiBBIGJpdCBtYXNrIGZvciBhbGwgUFNXSFNUIGludGVybmFsIHdyaXRlIGNsaWVudHMuICcxJwogICAgbWVhbnMgdGhpcyBQU1dIU1QgaXMgZGlzY2FyZGluZyBpbnB1dHMgZnJvbSB0aGlzIGNsaWVudC4gRWFjaCBiaXQgc2hvdWxkCi0gICB1cGRhdGUgYWNjb3JpbmcgdG8gJ2hzdF9kaXNjYXJkX2ludGVybmFsX3dyaXRlcycgcmVnaXN0ZXIgd2hlbiB0aGUgc3RhdGUKKyAgIHVwZGF0ZSBhY2NvcmRpbmcgdG8gJ2hzdF9kaXNjYXJkX2ludGVybmFsX3dyaXRlcycgcmVnaXN0ZXIgd2hlbiB0aGUgc3RhdGUKICAgIG1hY2hpbmUgaXMgaWRsZS4gKi8KICNkZWZpbmUgUFhQX1JFR19IU1RfRElTQ0FSRF9JTlRFUk5BTF9XUklURVNfU1RBVFVTCQkgMHgxMDMwOWMKIC8qIFtXQiAxNjBdIFVzZWQgZm9yIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmJvdW5kIGludGVycnVwdHMgbWVtb3J5ICovCkBAIC0zODIyLDEzICszODIyLDEzIEBACiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xCQkJCQkgMHg0MjBiYwogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFRTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHg0MjAwOAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMCAqLwogI2RlZmluZSBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgwCQkJCSAweDQyMDFjCi0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMSAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMxICovCiAjZGVmaW5lIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDEJCQkJIDB4NDIwMjAKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMyICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzIgKi8KICNkZWZpbmUgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMgkJCQkgMHg0MjAyNAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzMgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMyAqLwogI2RlZmluZSBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgzCQkJCSAweDQyMDI4CiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjb21wbGV0aW9uCiAgICBjb3VudGVycy4gKi8KQEAgLTQyODQsMTMgKzQyODQsMTMgQEAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9UXzYJCQkJCSAweGM0MGQwCiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjZmNfcnNwIGxjaWQgKi8KICNkZWZpbmUgVVNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSCQkJCSAweGM0MDA4Ci0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMCAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMwICovCiAjZGVmaW5lIFVTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDAJCQkJIDB4YzQwMWMKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMxICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzEgKi8KICNkZWZpbmUgVVNETV9SRUdfQ01QX0NPVU5URVJfTUFYMQkJCQkgMHhjNDAyMAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzIgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMiAqLwogI2RlZmluZSBVU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgyCQkJCSAweGM0MDI0Ci0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMyAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMzICovCiAjZGVmaW5lIFVTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDMJCQkJIDB4YzQwMjgKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNvbXBsZXRpb24KICAgIGNvdW50ZXJzLiAqLwpAQCAtNDc5OCwxMyArNDc5OCwxMyBAQAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMSAJCQkJIDB4MTY2MWJjCiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjZmNfcnNwIGxjaWQgKi8KICNkZWZpbmUgWFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSCQkJCSAweDE2NjAwOAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMCAqLwogI2RlZmluZSBYU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgwCQkJCSAweDE2NjAxYwotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzEgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMSAqLwogI2RlZmluZSBYU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgxCQkJCSAweDE2NjAyMAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzIgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMiAqLwogI2RlZmluZSBYU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgyCQkJCSAweDE2NjAyNAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzMgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMyAqLwogI2RlZmluZSBYU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgzCQkJCSAweDE2NjAyOAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY29tcGxldGlvbgogICAgY291bnRlcnMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggNDk0YmY5Ni4uMzE5MTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMTQ4Miw4ICsxNDgyLDExIEBACiAKIHN0YXRpYyBpbnQgYWdnX2RldmljZV91cChjb25zdCBzdHJ1Y3QgYWdncmVnYXRvciAqYWdnKQogewotCXJldHVybiAobmV0aWZfcnVubmluZyhhZ2ctPnNsYXZlLT5kZXYpICYmCi0JCW5ldGlmX2NhcnJpZXJfb2soYWdnLT5zbGF2ZS0+ZGV2KSk7CisJc3RydWN0IHBvcnQgKnBvcnQgPSBhZ2ctPmxhZ19wb3J0czsKKwlpZiAoIXBvcnQpCisJCXJldHVybiAwOworCXJldHVybiAobmV0aWZfcnVubmluZyhwb3J0LT5zbGF2ZS0+ZGV2KSAmJgorCQluZXRpZl9jYXJyaWVyX29rKHBvcnQtPnNsYXZlLT5kZXYpKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKaW5kZXggYjI4YmFmZi4uMDFiOGE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaApAQCAtMzksNyArMzksNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBtYWNfYWRkciB7CiAJdTggbWFjX2FkZHJfdmFsdWVbRVRIX0FMRU5dOwotfSBtYWNfYWRkcl90OworfSBfX3BhY2tlZCBtYWNfYWRkcl90OwogCiBlbnVtIHsKIAlCT05EX0FEX1NUQUJMRSA9IDAsCkBAIC0xMzQsMTIgKzEzNCwxMiBAQAogCXU4IHRsdl90eXBlX3Rlcm1pbmF0b3I7CSAgICAgLy8gPSB0ZXJtaW5hdG9yCiAJdTggdGVybWluYXRvcl9sZW5ndGg7CSAgICAgLy8gPSAwCiAJdTggcmVzZXJ2ZWRfNTBbNTBdOwkgICAgIC8vID0gMAotfSBsYWNwZHVfdDsKK30gX19wYWNrZWQgbGFjcGR1X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGxhY3BkdV9oZWFkZXIgewogCXN0cnVjdCBldGhoZHIgaGRyOwogCXN0cnVjdCBsYWNwZHUgbGFjcGR1OwotfSBsYWNwZHVfaGVhZGVyX3Q7Cit9IF9fcGFja2VkIGxhY3BkdV9oZWFkZXJfdDsKIAogLy8gTWFya2VyIFByb3RvY29sIERhdGEgVW5pdChQRFUpIHN0cnVjdHVyZSg0My41LjMuMiBpbiB0aGUgODAyLjNhZCBzdGFuZGFyZCkKIHR5cGVkZWYgc3RydWN0IGJvbmRfbWFya2VyIHsKQEAgLTE1NSwxMiArMTU1LDEyIEBACiAJdTggdGx2X3R5cGVfdGVybWluYXRvcjsJICAgICAvLyAgPSAweDAwCiAJdTggdGVybWluYXRvcl9sZW5ndGg7CSAgICAgLy8gID0gMHgwMAogCXU4IHJlc2VydmVkXzkwWzkwXTsJICAgICAvLyAgPSAwCi19IGJvbmRfbWFya2VyX3Q7Cit9IF9fcGFja2VkIGJvbmRfbWFya2VyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGJvbmRfbWFya2VyX2hlYWRlciB7CiAJc3RydWN0IGV0aGhkciBoZHI7CiAJc3RydWN0IGJvbmRfbWFya2VyIG1hcmtlcjsKLX0gYm9uZF9tYXJrZXJfaGVhZGVyX3Q7Cit9IF9fcGFja2VkIGJvbmRfbWFya2VyX2hlYWRlcl90OwogCiAjcHJhZ21hIHBhY2soKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggOWJjNWRlMy4uYmE3MTU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJYm9uZF9pbmZvLT50eF9oYXNodGJsID0gbmV3X2hhc2h0Ymw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVExCX0hBU0hfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCXRsYl9pbml0X3RhYmxlX2VudHJ5KCZib25kX2luZm8tPnR4X2hhc2h0YmxbaV0sIDEpOworCQl0bGJfaW5pdF90YWJsZV9lbnRyeSgmYm9uZF9pbmZvLT50eF9oYXNodGJsW2ldLCAwKTsKIAl9CiAKIAlfdW5sb2NrX3R4X2hhc2h0YmwoYm9uZCk7CkBAIC03MDEsNyArNzAxLDcgQEAKIAkJICovCiAJCXJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQpOwogCi0JCS8qIFRoZSBBUlAgcmVscHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdAorCQkvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXQKIAkJICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC4KIAkJICovCiAJCWJvbmQtPmFsYl9pbmZvLnJsYl91cGRhdGVfZGVsYXlfY291bnRlciA9IFJMQl9VUERBVEVfREVMQVk7CkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogICoKICAqIElmIHRoZSBwZXJtYW5lbnQgaHcgYWRkcmVzcyBvZiBAc2xhdmUgaXMgQGJvbmQncyBodyBhZGRyZXNzLCB3ZSBuZWVkIHRvCiAgKiBmaW5kIGEgZGlmZmVyZW50IGh3IGFkZHJlc3MgdG8gZ2l2ZSBAc2xhdmUsIHRoYXQgaXNuJ3QgaW4gdXNlIGJ5IGFueSBvdGhlcgotICogc2xhdmUgaW4gdGhlIGJvbmQuIFRoaXMgYWRkcmVzcyBtdXN0IGJlLCBvZiBjb3Vyc2UsIG9uZSBvZiB0aGUgcHJlbWFuZW50CisgKiBzbGF2ZSBpbiB0aGUgYm9uZC4gVGhpcyBhZGRyZXNzIG11c3QgYmUsIG9mIGNvdXJzZSwgb25lIG9mIHRoZSBwZXJtYW5lbnQKICAqIGFkZHJlc3NlcyBvZiB0aGUgb3RoZXIgc2xhdmVzLgogICoKICAqIFdlIGdvIG92ZXIgdGhlIHNsYXZlIGxpc3QsIGFuZCBmb3IgZWFjaCBzbGF2ZSB0aGVyZSB3ZSBjb21wYXJlIGl0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oCmluZGV4IDRiM2UzNTguLjhjYTcxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmgKQEAgLTc1LDggKzc1LDggQEAKIAkJCQkgKiBnYXZlIHRoaXMgZW50cnkgaW5kZXguCiAJCQkJICovCiAJdTMyIHR4X2J5dGVzOwkJLyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdAotCQkJCSAqIHdlcmUgdHJhbm1pdHRlZCB0byBpdCwgYW5kIGFmdGVyIGVhY2gKLQkJCQkgKiBDYWxsQmFjayB0aGUgTG9hZEhpc3RvcnkgaXMgZGV2aWRlZAorCQkJCSAqIHdlcmUgdHJhbnNtaXR0ZWQgdG8gaXQsIGFuZCBhZnRlciBlYWNoCisJCQkJICogQ2FsbEJhY2sgdGhlIExvYWRIaXN0b3J5IGlzIGRpdmlkZWQKIAkJCQkgKiBieSB0aGUgYmFsYW5jZSBpbnRlcnZhbAogCQkJCSAqLwogCXUzMiBsb2FkX2hpc3Rvcnk7CS8qIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFtb3VudCBvZiBCeXRlcwpAQCAtMTIyLDcgKzEyMiw2IEBACiB9OwogCiBzdHJ1Y3QgYWxiX2JvbmRfaW5mbyB7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJYWxiX3RpbWVyOwogCXN0cnVjdCB0bGJfY2xpZW50X2luZm8JKnR4X2hhc2h0Ymw7IC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCAqLwogCXNwaW5sb2NrX3QJCXR4X2hhc2h0YmxfbG9jazsKIAl1MzIJCQl1bmJhbGFuY2VkX2xvYWQ7CkBAIC0xNDAsNyArMTM5LDYgQEAKIAlzdHJ1Y3Qgc2xhdmUJCSpuZXh0X3J4X3NsYXZlOy8qIG5leHQgc2xhdmUgdG8gYmUgYXNzaWduZWQKIAkJCQkJCSogdG8gYSBuZXcgcnggY2xpZW50IGZvcgogCQkJCQkJKi8KLQl1MzIJCQlybGJfaW50ZXJ2YWxfY291bnRlcjsKIAl1OAkJCXByaW1hcnlfaXNfcHJvbWlzYzsJICAgLyogYm9vbGVhbiAqLwogCXUzMgkJCXJsYl9wcm9taXNjX3RpbWVvdXRfY291bnRlcjsvKiBjb3VudHMgcHJpbWFyeQogCQkJCQkJCSAgICAgKiBwcm9taXNjdWl0eSB0aW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2htY29yZS5jIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NobWNvcmUuYwppbmRleCA4MDUxMTE2Li43MzFhYTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2htY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zaG1jb3JlLmMKQEAgLTU5MSw3ICs1OTEsNyBAQAogCQkJKE5SX1RYX0JVRiAqIFRYX0JVRl9TWiArIE5SX1JYX0JVRiAqIFJYX0JVRl9TWikpIHsKIAogCQlwcl93YXJuKCJFUlJPUiwgQW1vdW50IG9mIGF2YWlsYWJsZSIKLQkJCQkiIFBoeXMuIFNITSBjYW5ub3QgYWNjb21vZGF0ZSBjdXJyZW50IFNITSAiCisJCQkJIiBQaHlzLiBTSE0gY2Fubm90IGFjY29tbW9kYXRlIGN1cnJlbnQgU0hNICIKIAkJCQkiZHJpdmVyIGNvbmZpZ3VyYXRpb24sIEJhaWxpbmcgb3V0IC4uLlxuIik7CiAJCWZyZWVfbmV0ZGV2KHBzaG1fZGV2LT5wc2htX25ldGRldik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NwaS5jIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NwaS5jCmluZGV4IDIwZGExOTkuLjU3ZTYzOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGkuYworKysgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc3BpLmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCWludCBwa3RzID0gMDsKIAogCS8qCi0JICogRGVjb21taXQgcHJldmlvdXNseSBjb21taXRlZCBmcmFtZXMuCisJICogRGVjb21taXQgcHJldmlvdXNseSBjb21taXR0ZWQgZnJhbWVzLgogCSAqIHNrYl9xdWV1ZV9zcGxpY2VfdGFpbCgmY2ZzcGktPmNoZWFkLCZjZnNwaS0+cWhlYWQpCiAJICovCiAJd2hpbGUgKHNrYl9wZWVrKCZjZnNwaS0+Y2hlYWQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc3BpX3NsYXZlLmMgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc3BpX3NsYXZlLmMKaW5kZXggMWI5OTQzYS4uYjAwOWUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NwaV9zbGF2ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGlfc2xhdmUuYwpAQCAtOTgsNyArOTgsNyBAQAogCiAJCQljZnNwaV9kYmdfc3RhdGUoY2ZzcGksIENGU1BJX1NUQVRFX0ZFVENIX1BLVCk7CiAKLQkJCS8qIENvcHkgY29tbWl0ZWQgU1BJIGZyYW1lcyBhZnRlciB0aGUgU1BJIGluZGljYXRpb24uICovCisJCQkvKiBDb3B5IGNvbW1pdHRlZCBTUEkgZnJhbWVzIGFmdGVyIHRoZSBTUEkgaW5kaWNhdGlvbi4gKi8KIAkJCXB0ciA9ICh1OCAqKSBjZnNwaS0+eGZlci52YV90eDsKIAkJCXB0ciArPSBTUElfSU5EX1NaOwogCQkJbGVuID0gY2ZzcGlfeG1pdGZybShjZnNwaSwgcHRyLCBjZnNwaS0+dHhfY3Bja19sZW4pOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAKIAkJY2ZzcGlfZGJnX3N0YXRlKGNmc3BpLCBDRlNQSV9TVEFURV9TSUdfQUNUSVZFKTsKIAotCQkvKiBTaWduYWwgdGhhdCB3ZSBhcmUgcmVhZHkgdG8gcmVjaWV2ZSBkYXRhLiAqLworCQkvKiBTaWduYWwgdGhhdCB3ZSBhcmUgcmVhZHkgdG8gcmVjZWl2ZSBkYXRhLiAqLwogCQljZnNwaS0+ZGV2LT5zaWdfeGZlcih0cnVlLCBjZnNwaS0+ZGV2KTsKIAogCQljZnNwaV9kYmdfc3RhdGUoY2ZzcGksIENGU1BJX1NUQVRFX1dBSVRfWEZFUl9ET05FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKaW5kZXggNTdkMmZmYi4uNzRlZmI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCiAJc3RhdHMtPnR4X2J5dGVzICs9IGNmLT5jYW5fZGxjOwogCi0JLyogX05PVEVfOiBzdWJzdHJhY3QgQVQ5MV9NQl9UWF9GSVJTVCBvZmZzZXQgZnJvbSBtYiEgKi8KKwkvKiBfTk9URV86IHN1YnRyYWN0IEFUOTFfTUJfVFhfRklSU1Qgb2Zmc2V0IGZyb20gbWIhICovCiAJY2FuX3B1dF9lY2hvX3NrYihza2IsIGRldiwgbWIgLSBBVDkxX01CX1RYX0ZJUlNUKTsKIAogCS8qCkBAIC03ODIsNyArNzgyLDcgQEAKIAkJcmVnX21zciA9IGF0OTFfcmVhZChwcml2LCBBVDkxX01TUihtYikpOwogCQlpZiAobGlrZWx5KHJlZ19tc3IgJiBBVDkxX01TUl9NUkRZICYmCiAJCQkgICB+cmVnX21zciAmIEFUOTFfTVNSX01BQlQpKSB7Ci0JCQkvKiBfTk9URV86IHN1YnN0cmFjdCBBVDkxX01CX1RYX0ZJUlNUIG9mZnNldCBmcm9tIG1iISAqLworCQkJLyogX05PVEVfOiBzdWJ0cmFjdCBBVDkxX01CX1RYX0ZJUlNUIG9mZnNldCBmcm9tIG1iISAqLwogCQkJY2FuX2dldF9lY2hvX3NrYihkZXYsIG1iIC0gQVQ5MV9NQl9UWF9GSVJTVCk7CiAJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW4uYwppbmRleCAzMTU1Mjk1Li43ZTVjYzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW4uYwpAQCAtODEzLDcgKzgxMyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciBiZWM7CiAKLQkvKiBwcm9wb2dhdGUgdGhlIGVycm9yIGNvbmRpdGlvbiB0byB0aGUgQ0FOIHN0YWNrICovCisJLyogcHJvcGFnYXRlIHRoZSBlcnJvciBjb25kaXRpb24gdG8gdGhlIENBTiBzdGFjayAqLwogCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKGRldiwgJmNmKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCXJldHVybiAwOwpAQCAtODg3LDcgKzg4Nyw3IEBACiAJaWYgKGxlY190eXBlID09IExFQ19VTlVTRUQgfHwgbGVjX3R5cGUgPT0gTEVDX05PX0VSUk9SKQogCQlyZXR1cm4gMDsKIAotCS8qIHByb3BvZ2F0ZSB0aGUgZXJyb3IgY29uZGl0aW9uIHRvIHRoZSBDQU4gc3RhY2sgKi8KKwkvKiBwcm9wYWdhdGUgdGhlIGVycm9yIGNvbmRpdGlvbiB0byB0aGUgQ0FOIHN0YWNrICovCiAJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IoZGV2LCAmY2YpOwogCWlmICh1bmxpa2VseSghc2tiKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jIGIvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYwppbmRleCAxMDJiMTZjLi41ODdmYmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogICovCiAKIC8qCi0gKiBSZWNpZXZlIGEgbWVzc2FnZSBmcm9tIHRoZSBJQ0FOMyAib2xkLXN0eWxlIiBmaXJtd2FyZSBpbnRlcmZhY2UKKyAqIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIElDQU4zICJvbGQtc3R5bGUiIGZpcm13YXJlIGludGVyZmFjZQogICoKICAqIExPQ0tJTkc6IG11c3QgaG9sZCBtb2QtPmxvY2sKICAqCkBAIC0xMDUwLDcgKzEwNTAsNyBAQAogCQljb21wbGV0ZSgmbW9kLT50ZXJtaW5hdGlvbl9jb21wKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2Vycihtb2QtPmRldiwgInJlY2lldmVkIGFuIHVua25vd24gaW5xdWlyeSByZXNwb25zZVxuIik7CisJCWRldl9lcnIobW9kLT5kZXYsICJyZWNlaXZlZCBhbiB1bmtub3duIGlucXVpcnkgcmVzcG9uc2VcbiIpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogc3RhdGljIHZvaWQgaWNhbjNfaGFuZGxlX3Vua25vd25fbWVzc2FnZShzdHJ1Y3QgaWNhbjNfZGV2ICptb2QsCiAJCQkJCXN0cnVjdCBpY2FuM19tc2cgKm1zZykKIHsKLQlkZXZfd2Fybihtb2QtPmRldiwgInJlY2lldmVkIHVua25vd24gbWVzc2FnZTogc3BlYyAweCUuMnggbGVuZ3RoICVkXG4iLAorCWRldl93YXJuKG1vZC0+ZGV2LCAicmVjZWl2ZWQgdW5rbm93biBtZXNzYWdlOiBzcGVjIDB4JS4yeCBsZW5ndGggJWRcbiIsCiAJCQkgICBtc2ctPnNwZWMsIGxlMTZfdG9fY3B1KG1zZy0+bGVuKSk7CiB9CiAKQEAgLTExMTMsNyArMTExMyw3IEBACiB9CiAKIC8qCi0gKiBSZWNpZXZlIG9uZSBDQU4gZnJhbWUgZnJvbSB0aGUgaGFyZHdhcmUKKyAqIFJlY2VpdmUgb25lIENBTiBmcmFtZSBmcm9tIHRoZSBoYXJkd2FyZQogICoKICAqIENPTlRFWFQ6IG11c3QgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCmluZGV4IDc1MTNjNDUuLjMzMDE0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYwpAQCAtOTMxLDcgKzkzMSw4IEBACiAJcHJpdi0+dHhfbGVuID0gMDsKIAogCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHNwaS0+aXJxLCBOVUxMLCBtY3AyNTF4X2Nhbl9pc3QsCi0JCQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HLCBERVZJQ0VfTkFNRSwgcHJpdik7CisJCSAgcGRhdGEtPmlycV9mbGFncyA/IHBkYXRhLT5pcnFfZmxhZ3MgOiBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJICBERVZJQ0VfTkFNRSwgcHJpdik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBhY3F1aXJlIGlycSAlZFxuIiwgc3BpLT5pcnEpOwogCQlpZiAocGRhdGEtPnRyYW5zY2VpdmVyX2VuYWJsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMKaW5kZXggYzBhMWJjNS4uYmQxZDgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCiAJaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlkYXRhID0gKHN0cnVjdCBtcGM1eHh4X2Nhbl9kYXRhICopb2ZfZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJZGF0YSA9IChzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSAqKW9mZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CiAKIAliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uYwppbmRleCA3NGNkODgwLi45MmZlYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCW91dF9iZTE2KCZyZWdzLT50eC5pZHIzXzIsIGNhbl9pZCk7CiAKIAkJY2FuX2lkID4+PSAxNjsKLQkJLyogRUZGX0ZMQUdTIGFyZSBpbmJldHdlZW4gdGhlIElEcyA6KCAqLworCQkvKiBFRkZfRkxBR1MgYXJlIGJldHdlZW4gdGhlIElEcyA6KCAqLwogCQljYW5faWQgPSAoY2FuX2lkICYgMHg3KSB8ICgoY2FuX2lkIDw8IDIpICYgMHhmZmUwKQogCQkJIHwgTVNDQU5fRUZGX0ZMQUdTOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKaW5kZXggMGE4ZGUwMS4uZjUwMWJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYwpAQCAtMzQ2LDEwICszNDYsMTAgQEAKIAkJICAgIHwgKHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19JRDIpID4+IDUpOwogCX0KIAorCWNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoZmkgJiAweDBGKTsKIAlpZiAoZmkgJiBGSV9SVFIpIHsKIAkJaWQgfD0gQ0FOX1JUUl9GTEFHOwogCX0gZWxzZSB7Ci0JCWNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoZmkgJiAweDBGKTsKIAkJZm9yIChpID0gMDsgaSA8IGNmLT5jYW5fZGxjOyBpKyspCiAJCQljZi0+ZGF0YVtpXSA9IHByaXYtPnJlYWRfcmVnKHByaXYsIGRyZWcrKyk7CiAJfQpAQCAtNDI1LDcgKzQyNSw3IEBACiAJCQljZi0+ZGF0YVszXSA9IGVjYyAmIEVDQ19TRUc7CiAJCQlicmVhazsKIAkJfQotCQkvKiBFcnJvciBvY2N1cmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCisJCS8qIEVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCiAJCWlmICgoZWNjICYgRUNDX0RJUikgPT0gMCkKIAkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9UWDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2xjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCmluZGV4IGI0MjM5NjUuLjFiNDlkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCkBAIC01ODMsNyArNTgzLDkgQEAKIAkvKiBEb25lLiAgV2UgaGF2ZSBsaW5rZWQgdGhlIFRUWSBsaW5lIHRvIGEgY2hhbm5lbC4gKi8KIAlydG5sX3VubG9jaygpOwogCXR0eS0+cmVjZWl2ZV9yb29tID0gNjU1MzY7CS8qIFdlIGRvbid0IGZsb3cgY29udHJvbCAqLwotCXJldHVybiBzbC0+ZGV2LT5iYXNlX2FkZHI7CisKKwkvKiBUVFkgbGF5ZXIgZXhwZWN0cyAwIG9uIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfY2hhbjoKIAlzbC0+dHR5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmcuaCBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmcuaAppbmRleCA3ZWM5ZjRkLi5hZmQ3ZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmgKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IHNvZnRpbmcgKmNhcmQ7CiAJc3RydWN0IHsKIAkJaW50IHBlbmRpbmc7Ci0JCS8qIHZhcmlhYmxlcyB3aWNoIGhvbGQgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQkvKiB2YXJpYWJsZXMgd2hpY2ggaG9sZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCiAJCWludCBlY2hvX3B1dDsKIAkJaW50IGVjaG9fZ2V0OwogCX0gdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCmluZGV4IGFlZWE5ZjkuLjdhNzA3MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlwdHIgPSBidWY7CiAJY21kID0gKnB0cisrOwogCWlmIChjbWQgPT0gMHhmZikKLQkJLyogbm90IHF1aXRlIHVzZWZ1bGwsIHByb2JhYmx5IHRoZSBjYXJkIGhhcyBnb3Qgb3V0ICovCisJCS8qIG5vdCBxdWl0ZSB1c2VmdWwsIHByb2JhYmx5IHRoZSBjYXJkIGhhcyBnb3Qgb3V0ICovCiAJCXJldHVybiAwOwogCW5ldGRldiA9IGNhcmQtPm5ldFswXTsKIAlpZiAoY21kICYgQ01EX0JVUzIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jIGIvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYwppbmRleCA0ZDA3ZjFlLi5mN2JiZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMKQEAgLTY2Myw3ICs2NjMsNyBAQAogCXN0cnVjdCBjYW5fZnJhbWUgKmNmOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkvKiBwcm9wb2dhdGUgdGhlIGVycm9yIGNvbmRpdGlvbiB0byB0aGUgY2FuIHN0YWNrICovCisJLyogcHJvcGFnYXRlIHRoZSBlcnJvciBjb25kaXRpb24gdG8gdGhlIGNhbiBzdGFjayAqLwogCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKG5kZXYsICZjZik7CiAJaWYgKCFza2IpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKaW5kZXggZTc1ZjFhOC4uYTcyYzdiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKQEAgLTM4Niw3ICszODYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBFcnJvciBvY2N1cmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCisJCS8qIEVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCiAJCWlmICgoZWNjICYgU0pBMTAwMF9FQ0NfRElSKSA9PSAwKQogCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1RYOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMKaW5kZXggZGM1M2M4My4uZWI4YjBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lc2RfdXNiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZXNkX3VzYjIuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCS8qIEVycm9yIG9jY3VyZWQgZHVyaW5nIHRyYW5zbWlzc2lvbj8gKi8KKwkJCS8qIEVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCiAJCQlpZiAoIShlY2MgJiBTSkExMDAwX0VDQ19ESVIpKQogCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9UWDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IDM0Mzc2MTMuLjE0M2EyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTUxLDcgKzUxLDcgQEAKICAqIFRYIGhhcyA0IHF1ZXVlcy4gY3VycmVudGx5IHRoZXNlIHF1ZXVlcyBhcmUgdXNlZCBpbiBhIHJvdW5kLXJvYmluCiAgKiBmYXNoaW9uIGZvciBsb2FkIGJhbGFuY2luZy4gVGhleSBjYW4gYWxzbyBiZSB1c2VkIGZvciBRb1MuIGZvciB0aGF0CiAgKiB0byB3b3JrLCBob3dldmVyLCBRb1MgaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgZXhwb3NlZCBkb3duIHRvIHRoZSBkcml2ZXIKLSAqIGxldmVsIHNvIHRoYXQgc3VicXVldWVzIGdldCB0YXJnZXR0ZWQgdG8gcGFydGljdWxhciB0cmFuc21pdCByaW5ncy4KKyAqIGxldmVsIHNvIHRoYXQgc3VicXVldWVzIGdldCB0YXJnZXRlZCB0byBwYXJ0aWN1bGFyIHRyYW5zbWl0IHJpbmdzLgogICogYWx0ZXJuYXRpdmVseSwgdGhlIHF1ZXVlcyBjYW4gYmUgY29uZmlndXJlZCB2aWEgdXNlIG9mIHRoZSBhbGwtcHVycG9zZQogICogaW9jdGwuCiAgKgpAQCAtNTE2NSw3ICs1MTY1LDcgQEAKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCiBlcnJfd3JpdGVfY2FjaGVsaW5lOgotCS8qIFRyeSB0byByZXN0b3JlIGl0IGluIGNhc2UgdGhlIGVycm9yIG9jY3VyZWQgYWZ0ZXIgd2UKKwkvKiBUcnkgdG8gcmVzdG9yZSBpdCBpbiBjYXNlIHRoZSBlcnJvciBvY2N1cnJlZCBhZnRlciB3ZQogCSAqIHNldCBpdC4KIAkgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgb3JpZ19jYWNoZWxpbmVfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmggYi9kcml2ZXJzL25ldC9jYXNzaW5pLmgKaW5kZXggZmFmNDc0Ni4uYjM2MTQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5oCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaApAQCAtNzcyLDcgKzc3Miw3IEBACiAjZGVmaW5lICAgIFJYX0RFQlVHX0lOVFJfV1JJVEVfUFRSX01BU0sgICAgMHhDMDAwMDAwMCAvKiBpbnRlcnJ1cHQgd3JpdGUgcG9pbnRlcgogCQkJCQkJCSBvZiB0aGUgaW50ZXJydXB0IHF1ZXVlICovCiAKLS8qIGZsb3cgY29udHJvbCBmcmFtZXMgYXJlIGVtbWl0dGVkIHVzaW5nIHR3byBQQVVTRSB0aHJlc2hvbGRzOgorLyogZmxvdyBjb250cm9sIGZyYW1lcyBhcmUgZW1pdHRlZCB1c2luZyB0d28gUEFVU0UgdGhyZXNob2xkczoKICAqIFhPRkYgUEFVU0UgdXNlcyBwYXVzZSB0aW1lIHZhbHVlIHByZS1wcm9ncmFtbWVkIGluIHRoZSBTZW5kIFBBVVNFIE1BQyByZWcKICAqIFhPTiBQQVVTRSB1c2VzIGEgcGF1c2UgdGltZSBvZiAwLiBncmFudWxhcml0eSBvZiB0aHJlc2hvbGQgaXMgNjRieXRlcy4KICAqIFBBVVNFIHRocmVzaG9sZHMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBGSUZPIG9jY3VwYW5jeSBhbmQgbWF5IGJlIHRyYW5zbGF0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL212ODhlMXh4eC5jCmluZGV4IDgwOTA0N2EuLjcxMDE4YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9tdjg4ZTF4eHguYwpAQCAtNDEsNyArNDEsNyBAQAogICoKICAqIFBBUkFNUzogY3BoeSAgICAgLSBQb2ludGVyIHRvIFBIWSBpbnN0YW5jZSBkYXRhLgogICoKLSAqIFJFVFVSTjogIDAgLSBTdWNjZXNzZnVsbCByZXNldC4KKyAqIFJFVFVSTjogIDAgLSBTdWNjZXNzZnVsIHJlc2V0LgogICogICAgICAgICAtMSAtIFRpbWVvdXQuCiAgKi8KIHN0YXRpYyBpbnQgbXY4OGUxeHh4X3Jlc2V0KHN0cnVjdCBjcGh5ICpjcGh5LCBpbnQgd2FpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3BtMzM5My5jCmluZGV4IDdkYmIxNmQuLjQwYzdiOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9wbTMzOTMuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJcG0zMzkzX2VuYWJsZShjbWFjLCB3aGljaCk7CiAKIAkvKgotCSAqIFhYWCBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IHRoZSBQSFkgYW5kIHByZWZlcnJhYmx5IG5vdCBhdCBhbGwuCisJICogWFhYIFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIFBIWSBhbmQgcHJlZmVyYWJseSBub3QgYXQgYWxsLgogCSAqIFRoZSBQSFkgZG9lc24ndCBnaXZlIHVzIGxpbmsgc3RhdHVzIGluZGljYXRpb24gb24gaXRzIG93biBzbyBoYXZlCiAJICogdGhlIGxpbmsgbWFuYWdlbWVudCBjb2RlIHF1ZXJ5IGl0IGluc3RlYWQuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCBmNzc4YjE1Li44NzU0ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTE2NjIsNyArMTY2Miw3IEBACiAgKiBUaGUgY29kZSBmaWd1cmVzIG91dCBob3cgbWFueSBlbnRyaWVzIHRoZSBza19idWZmIHdpbGwgcmVxdWlyZSBpbiB0aGUKICAqIGNtZFEgYW5kIHVwZGF0ZXMgdGhlIGNtZFEgZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0aGUgc3RhdGUgb25jZSB0aGUgZW5xdWV1ZQogICogaGFzIGNvbXBsZXRlLiBUaGVuLCBpdCBkb2Vzbid0IGFjY2VzcyB0aGUgZ2xvYmFsIHN0cnVjdHVyZSBhbnltb3JlLCBidXQKLSAqIHVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9uIHRoZSBzdGFjay4gSW4gY29uanVjdGlvbiB3aXRoIGEgc3BpbmxvY2sKKyAqIHVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9uIHRoZSBzdGFjay4gSW4gY29uanVuY3Rpb24gd2l0aCBhIHNwaW5sb2NrCiAgKiBhcm91bmQgdGhhdCBjb2RlLCB3ZSBjYW4gbWFrZSB0aGUgZnVuY3Rpb24gcmVlbnRyYW50IHdpdGhvdXQgaG9sZGluZyB0aGUKICAqIGxvY2sgd2hlbiB3ZSBhY3R1YWxseSBlbnF1ZXVlICh3aGljaCBtaWdodCBiZSBleHBlbnNpdmUsIGVzcGVjaWFsbHkgb24KICAqIGFyY2hpdGVjdHVyZXMgd2l0aCBJTyBNTVVzKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjNzMyNi5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMKaW5kZXggMTA2YTU5MC4uYjBjYjM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMKQEAgLTU2Niw3ICs1NjYsNyBAQAogCWZvciAoaSA9IDA7IGkgPD0gMHgzYTsgKytpKQogCQl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBDUkEoNCwgcG9ydCwgaSksIDApOwogCi0JLyogQ2xlYXIgc29md2FyZSBjb3VudGVycyAqLworCS8qIENsZWFyIHNvZnR3YXJlIGNvdW50ZXJzICovCiAJbWVtc2V0KCZtYWMtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGNtYWNfc3RhdGlzdGljcykpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDgwYzJmZWUuLjlkMjY3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC0xMzgzLDcgKzEzODMsNyBAQAogCXNwaW5fbG9jaygmbnAtPmxvY2spOyAvKiBQcmVlbXB0IHByb3RlY3Rpb24gKi8KIAlzd2l0Y2ggKGNtZCkgewogCQkvKiBUaGUgaW9jdGxzIGJlbG93IHNob3VsZCBiZSBjb25zaWRlcmVkIG9ic29sZXRlIGJ1dCBhcmUgKi8KLQkJLyogc3RpbGwgcHJlc2VudCBmb3IgY29tcGF0YWJpbGl0eSB3aXRoIG9sZCBzY3JpcHRzL2FwcHMgICovCisJCS8qIHN0aWxsIHByZXNlbnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgc2NyaXB0cy9hcHBzICAqLwogCQljYXNlIFNFVF9FVEhfU1BFRURfMTA6ICAgICAgICAgICAgICAgICAgLyogMTAgTWJwcyAqLwogCQkJZTEwMF9zZXRfc3BlZWQoZGV2LCAxMCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKaW5kZXggZjlmNjY0NS4uYmZhMmQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogICoJbmVlZF9za2JfdW5tYXAgLSBkb2VzIHRoZSBwbGF0Zm9ybSBuZWVkIHVubWFwcGluZyBvZiBza19idWZmcz8KICAqCiAgKglSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIG5lZWRzIHNrX2J1ZmYgdW5tYXBwaW5nLiAgVGhlIGNvbXBpbGVyCi0gKglvcHRpbWl6ZXMgYXdheSB1bmVjZXNzYXJ5IGNvZGUgaWYgdGhpcyByZXR1cm5zIHRydWUuCisgKglvcHRpbWl6ZXMgYXdheSB1bm5lY2Vzc2FyeSBjb2RlIGlmIHRoaXMgcmV0dXJucyB0cnVlLgogICovCiBzdGF0aWMgaW5saW5lIGludCBuZWVkX3NrYl91bm1hcCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKaW5kZXggZDU1ZGI2Yi4uYzY4ODQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCkBAIC0xMzg2LDExICsxMzg2LDExIEBACiAgKglAcmVnOiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBwcm9jZXNzCiAgKglAbWFzazogYSBtYXNrIHRvIGFwcGx5IHRvIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCiAgKglAYWN0czogdGFibGUgb2YgaW50ZXJydXB0IGFjdGlvbnMKLSAqCUBzdGF0czogc3RhdGlzdGljcyBjb3VudGVycyB0cmFja2luZyBpbnRlcnJ1cHQgb2NjdXJlbmNlcworICoJQHN0YXRzOiBzdGF0aXN0aWNzIGNvdW50ZXJzIHRyYWNraW5nIGludGVycnVwdCBvY2N1cnJlbmNlcwogICoKICAqCUEgdGFibGUgZHJpdmVuIGludGVycnVwdCBoYW5kbGVyIHRoYXQgYXBwbGllcyBhIHNldCBvZiBtYXNrcyB0byBhbgogICoJaW50ZXJydXB0IHN0YXR1cyB3b3JkIGFuZCBwZXJmb3JtcyB0aGUgY29ycmVzcG9uZGluZyBhY3Rpb25zIGlmIHRoZQotICoJaW50ZXJydXB0cyBkZXNjcmliZWQgYnkgdGhlIG1hc2sgaGF2ZSBvY2N1cmVkLiAgVGhlIGFjdGlvbnMgaW5jbHVkZQorICoJaW50ZXJydXB0cyBkZXNjcmliZWQgYnkgdGhlIG1hc2sgaGF2ZSBvY2N1cnJlZC4gIFRoZSBhY3Rpb25zIGluY2x1ZGUKICAqCW9wdGlvbmFsbHkgcHJpbnRpbmcgYSB3YXJuaW5nIG9yIGFsZXJ0IG1lc3NhZ2UsIGFuZCBvcHRpb25hbGx5CiAgKglpbmNyZW1lbnRpbmcgYSBzdGF0IGNvdW50ZXIuICBUaGUgdGFibGUgaXMgdGVybWluYXRlZCBieSBhbiBlbnRyeQogICoJc3BlY2lmeWluZyBtYXNrIDAuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmF0YWwgaW50ZXJydXB0IGNvbmRpdGlvbnMuCkBAIC0yNzgzLDcgKzI3ODMsNyBAQAogewogCS8qCiAJICogU2VlIGRyYWZ0LW1hdGhpcy1wbHBtdHVkLTAwLnR4dCBmb3IgdGhlIHZhbHVlcy4gIFRoZSBtaW4gaXMgODggc28KLQkgKiBpdCBjYW4gYWNjb21vZGF0ZSBtYXggc2l6ZSBUQ1AvSVAgaGVhZGVycyB3aGVuIFNBQ0sgYW5kIHRpbWVzdGFtcHMKKwkgKiBpdCBjYW4gYWNjb21tb2RhdGUgbWF4IHNpemUgVENQL0lQIGhlYWRlcnMgd2hlbiBTQUNLIGFuZCB0aW1lc3RhbXBzCiAJICogYXJlIGVuYWJsZWQgYW5kIHN0aWxsIGhhdmUgYXQgbGVhc3QgOCBieXRlcyBvZiBwYXlsb2FkLgogCSAqLwogCW10dXNbMF0gPSA4ODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiNC90NF9ody5jCmluZGV4IGI5ZmQ4YTYuLmQxZWMxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfaHcuYwpAQCAtODgzLDcgKzg4Myw3IEBACiAgKgogICoJQSB0YWJsZSBkcml2ZW4gaW50ZXJydXB0IGhhbmRsZXIgdGhhdCBhcHBsaWVzIGEgc2V0IG9mIG1hc2tzIHRvIGFuCiAgKglpbnRlcnJ1cHQgc3RhdHVzIHdvcmQgYW5kIHBlcmZvcm1zIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbnMgaWYgdGhlCi0gKglpbnRlcnJ1cHRzIGRlc2NyaWJlZCBieSB0aGUgbWFzayBoYXZlIG9jY3VyZWQuICBUaGUgYWN0aW9ucyBpbmNsdWRlCisgKglpbnRlcnJ1cHRzIGRlc2NyaWJlZCBieSB0aGUgbWFzayBoYXZlIG9jY3VycmVkLiAgVGhlIGFjdGlvbnMgaW5jbHVkZQogICoJb3B0aW9uYWxseSBlbWl0dGluZyBhIHdhcm5pbmcgb3IgYWxlcnQgbWVzc2FnZS4gIFRoZSB0YWJsZSBpcyB0ZXJtaW5hdGVkCiAgKglieSBhbiBlbnRyeSBzcGVjaWZ5aW5nIG1hc2sgMC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBmYXRhbCBpbnRlcnJ1cHQKICAqCWNvbmRpdGlvbnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCA2YWFkNjRkLi40NjYxY2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTI3MzgsNyArMjczOCw3IEBACiAJY2ZnX3F1ZXVlcyhhZGFwdGVyKTsKIAogCS8qCi0JICogUHJpbnQgYSBzaG9ydCBub3RpY2Ugb24gdGhlIGV4aXN0YW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgbmV3CisJICogUHJpbnQgYSBzaG9ydCBub3RpY2Ugb24gdGhlIGV4aXN0ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgbmV3CiAJICogVkYgbmV0d29yayBkZXZpY2UgLi4uCiAJICovCiAJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9zZ2UuYwppbmRleCBlMGIzZDFiLi5iYjY1MTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvc2dlLmMKQEAgLTIyNCw4ICsyMjQsOCBAQAogLyoqCiAgKgluZWVkX3NrYl91bm1hcCAtIGRvZXMgdGhlIHBsYXRmb3JtIG5lZWQgdW5tYXBwaW5nIG9mIHNrX2J1ZmZzPwogICoKLSAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZyb20gbmVlZHMgc2tfYnVmZiB1bm1hcHBpbmcuICBUaGUgY29tcGlsZXIKLSAqCW9wdGltaXplcyBhd2F5IHVuZWNlc3NhcnkgY29kZSBpZiB0aGlzIHJldHVybnMgdHJ1ZS4KKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gbmVlZHMgc2tfYnVmZiB1bm1hcHBpbmcuICBUaGUgY29tcGlsZXIKKyAqCW9wdGltaXplcyBhd2F5IHVubmVjZXNzYXJ5IGNvZGUgaWYgdGhpcyByZXR1cm5zIHRydWUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG5lZWRfc2tiX3VubWFwKHZvaWQpCiB7CkBAIC0yNjcsNyArMjY3LDcgQEAKICAqCiAgKglUZXN0cyBzcGVjaWZpZWQgRnJlZSBMaXN0IHRvIHNlZSB3aGV0aGVyIHRoZSBudW1iZXIgb2YgYnVmZmVycwogICoJYXZhaWxhYmxlIHRvIHRoZSBoYXJkd2FyZSBoYXMgZmFsbGVkIGJlbG93IG91ciAic3RhcnZhdGlvbiIKLSAqCXRocmVzaGhvbGQuCisgKgl0aHJlc2hvbGQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBmbF9zdGFydmluZyhjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKIHsKQEAgLTExNDksNyArMTE0OSw3IEBACiAJaWYgKHVubGlrZWx5KGNyZWRpdHMgPCBFVEhUWFFfU1RPUF9USFJFUykpIHsKIAkJLyoKIAkJICogQWZ0ZXIgd2UncmUgZG9uZSBpbmplY3RpbmcgdGhlIFdvcmsgUmVxdWVzdCBmb3IgdGhpcwotCQkgKiBwYWNrZXQsIHdlJ2xsIGJlIGJlbG93IG91ciAic3RvcCB0aHJlc2hob2xkIiBzbyBzdG9wIHRoZSBUWAorCQkgKiBwYWNrZXQsIHdlJ2xsIGJlIGJlbG93IG91ciAic3RvcCB0aHJlc2hvbGQiIHNvIHN0b3AgdGhlIFRYCiAJCSAqIFF1ZXVlIG5vdyBhbmQgc2NoZWR1bGUgYSByZXF1ZXN0IGZvciBhbiBTR0UgRWdyZXNzIFF1ZXVlCiAJCSAqIFVwZGF0ZSBtZXNzYWdlLiAgVGhlIHF1ZXVlIHdpbGwgZ2V0IHN0YXJ0ZWQgbGF0ZXIgb24gd2hlbgogCQkgKiB0aGUgZmlybXdhcmUgcHJvY2Vzc2VzIHRoaXMgV29yayBSZXF1ZXN0IGFuZCBzZW5kcyB1cyBhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCBiYWNhNmJmLi44MDdiNmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtOTQsMTQgKzk0LDE0IEBACiBzdGF0aWMgY29uc3QgY2hhciBlbWFjX3ZlcnNpb25fc3RyaW5nW10gPSAiVEkgRGFWaW5jaSBFTUFDIExpbnV4IHY2LjEiOwogCiAvKiBDb25maWd1cmF0aW9uIGl0ZW1zICovCi0jZGVmaW5lIEVNQUNfREVGX1BBU1NfQ1JDCQkoMCkgLyogRG8gbm90IHBhc3MgQ1JDIHVwdG8gZnJhbWVzICovCisjZGVmaW5lIEVNQUNfREVGX1BBU1NfQ1JDCQkoMCkgLyogRG8gbm90IHBhc3MgQ1JDIHVwIHRvIGZyYW1lcyAqLwogI2RlZmluZSBFTUFDX0RFRl9RT1NfRU4JCQkoMCkgLyogRU1BQyBwcm9wcmlldGFyeSBRb1MgZGlzYWJsZWQgKi8KICNkZWZpbmUgRU1BQ19ERUZfTk9fQlVGRl9DSEFJTgkJKDApIC8qIE5vIGJ1ZmZlciBjaGFpbiAqLwogI2RlZmluZSBFTUFDX0RFRl9NQUNDVFJMX0ZSQU1FX0VOCSgwKSAvKiBEaXNjYXJkIE1hY2NvbnRyb2wgZnJhbWVzICovCiAjZGVmaW5lIEVNQUNfREVGX1NIT1JUX0ZSQU1FX0VOCQkoMCkgLyogRGlzY2FyZCBzaG9ydCBmcmFtZXMgKi8KICNkZWZpbmUgRU1BQ19ERUZfRVJST1JfRlJBTUVfRU4JCSgwKSAvKiBEaXNjYXJkIGVycm9yIGZyYW1lcyAqLwotI2RlZmluZSBFTUFDX0RFRl9QUk9NX0VOCQkoMCkgLyogUHJvbWlzY291cyBkaXNhYmxlZCAqLwotI2RlZmluZSBFTUFDX0RFRl9QUk9NX0NICQkoMCkgLyogUHJvbWlzY291cyBjaGFubmVsIGlzIDAgKi8KKyNkZWZpbmUgRU1BQ19ERUZfUFJPTV9FTgkJKDApIC8qIFByb21pc2N1b3VzIGRpc2FibGVkICovCisjZGVmaW5lIEVNQUNfREVGX1BST01fQ0gJCSgwKSAvKiBQcm9taXNjdW91cyBjaGFubmVsIGlzIDAgKi8KICNkZWZpbmUgRU1BQ19ERUZfQkNBU1RfRU4JCSgxKSAvKiBCcm9hZGNhc3QgZW5hYmxlZCAqLwogI2RlZmluZSBFTUFDX0RFRl9CQ0FTVF9DSAkJKDApIC8qIEJyb2FkY2FzdCBjaGFubmVsIGlzIDAgKi8KICNkZWZpbmUgRU1BQ19ERUZfTUNBU1RfRU4JCSgxKSAvKiBNdWx0aWNhc3QgZW5hYmxlZCAqLwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIHJlY3ljbGUgb24gcmVjaWV2ZSBlcnJvciAqLworCS8qIHJlY3ljbGUgb24gcmVjZWl2ZSBlcnJvciAqLwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlnb3RvIHJlY3ljbGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggZjRkMDkyMi4uZGQ3MDczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfZHVwbGV4KTsKIAkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOwogCi0JCS8qIHVuZm9ydHVuYXRseSBGVUxMX0RVUExFWCAhPSBEVVBMRVhfRlVMTAorCQkvKiB1bmZvcnR1bmF0ZWx5IEZVTExfRFVQTEVYICE9IERVUExFWF9GVUxMCiAJCSAqICAgICAgICAgIGFuZCBIQUxGX0RVUExFWCAhPSBEVVBMRVhfSEFMRiAqLwogCiAJCWlmIChhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBGVUxMX0RVUExFWCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IGM3MGIyM2QuLjVjOWE4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaApAQCAtMTAyNiw3ICsxMDI2LDcgQEAKIAogI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBIDB4MDAwMzQJLyogTUFDLVBIWSBpbnRlcmZhY2UgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9NRFBIWUEgICAgIDB4MDAwM0MJLyogUEhZIGFkZHJlc3MgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NQU5DMkggICAgIDB4MDU4NjAJLyogTWFuYWdtZW50IENvbnRyb2wgVG8gSG9zdCAtIFJXICovCisjZGVmaW5lIEUxMDAwX01BTkMySCAgICAgMHgwNTg2MAkvKiBNYW5hZ2VtZW50IENvbnRyb2wgVG8gSG9zdCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1NXX0ZXX1NZTkMgMHgwNUI1QwkvKiBTb2Z0d2FyZS1GaXJtd2FyZSBTeW5jaHJvbml6YXRpb24gLSBSVyAqLwogCiAjZGVmaW5lIEUxMDAwX0dDUiAgICAgICAweDA1QjAwCS8qIFBDSS1FeCBDb250cm9sICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggYmZhYjE0MC4uNDc3ZTA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJLnByb2JlICAgID0gZTEwMDBfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoZTEwMDBfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KLQkvKiBQb3dlciBNYW5hZ21lbnQgSG9va3MgKi8KKwkvKiBQb3dlciBNYW5hZ2VtZW50IEhvb2tzICovCiAJLnN1c3BlbmQgID0gZTEwMDBfc3VzcGVuZCwKIAkucmVzdW1lICAgPSBlMTAwMF9yZXN1bWUsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwppbmRleCBhMzlkNGE0Li41MDZhMGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCkBAIC00ODg2LDcgKzQ4ODYsNyBAQAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAotCS8qIGlmIGNvdW50IGlzIDAgdGhlbiBtYXBwaW5nIGVycm9yIGhhcyBvY2N1cmVkICovCisJLyogaWYgY291bnQgaXMgMCB0aGVuIG1hcHBpbmcgZXJyb3IgaGFzIG9jY3VycmVkICovCiAJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsIG5yX2ZyYWdzLCBtc3MpOwogCWlmIChjb3VudCkgewogCQllMTAwMF90eF9xdWV1ZShhZGFwdGVyLCB0eF9mbGFncywgY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMKaW5kZXggM2UyZTczNC4uZjNiYmRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCkBAIC01NSwxNSArNTUsMjAgQEAKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKLQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfRklCUkUpOworCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCX0gZWxzZSB7CisJCWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCisJCQkgICAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKKwkJCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfQXV0b25lZworCQkJICAgICAgIHwgU1VQUE9SVEVEX1RQKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF9BdXRvbmVnCisJCQkJIHwgQURWRVJUSVNFRF9UUCk7CisJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJfQogCi0JY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfQXV0b25lZwotCQkJIHwgQURWRVJUSVNFRF9GSUJSRSk7Ci0KLQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCWNtZC0+YXV0b25lZyA9IHBvcnQtPmF1dG9uZWcgPT0gMSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBmNzVkMzE0Li5jZjc5Y2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTI2ODgsOSArMjY4OCw2IEBACiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+c3dxZV9hdmFpbF93cSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+cmVzdGFydF93cSk7Ci0KIAltdXRleF91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzA0MCwxMSArMzAzNywxNCBAQAogCiAJCQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCQkJCQltdXRleF9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwotCQkJCQkJcG9ydF9uYXBpX2VuYWJsZShwb3J0KTsKIAkJCQkJCXJldCA9IGVoZWFfcmVzdGFydF9xcHMoZGV2KTsKLQkJCQkJCWNoZWNrX3Nxcyhwb3J0KTsKLQkJCQkJCWlmICghcmV0KQorCQkJCQkJaWYgKCFyZXQpIHsKKwkJCQkJCQljaGVja19zcXMocG9ydCk7CisJCQkJCQkJcG9ydF9uYXBpX2VuYWJsZShwb3J0KTsKIAkJCQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCW5ldGRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlc3RhcnQgUVBTXG4iKTsKKwkJCQkJCX0KIAkJCQkJCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAkJCQkJfQogCQkJCX0KQEAgLTMyNzMsNiArMzI3Myw5IEBACiAKIAlJTklUX1dPUksoJnBvcnQtPnJlc2V0X3Rhc2ssIGVoZWFfcmVzZXRfcG9ydCk7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5zd3FlX2F2YWlsX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5yZXN0YXJ0X3dxKTsKKwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MF9ody5oIGIvZHJpdmVycy9uZXQvZW5jMjhqNjBfaHcuaAppbmRleCAxYTBiMjA5Li4yNWI0MWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwX2h3LmgKQEAgLTMwMyw3ICszMDMsNyBAQAogLyogbWF4aW11bSBldGhlcm5ldCBmcmFtZSBsZW5ndGggKi8KICNkZWZpbmUgTUFYX0ZSQU1FTEVOCQkxNTE4CiAKLS8qIFByZWZlcmVkIGhhbGYgZHVwbGV4OiBMRURBOiBMaW5rIHN0YXR1cyBMRURCOiBSeC9UeCBhY3Rpdml0eSAqLworLyogUHJlZmVycmVkIGhhbGYgZHVwbGV4OiBMRURBOiBMaW5rIHN0YXR1cyBMRURCOiBSeC9UeCBhY3Rpdml0eSAqLwogI2RlZmluZSBFTkMyOEo2MF9MQU1QU19NT0RFCTB4MzQ3NgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKaW5kZXggZmI3MTdiZS4uMTJkMjhlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoMTZpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGZvbGxvd2luZyBjYXJkcyA6CiAJLSBJQ0wgRXRoZXJUZWFtIDE2aQogCS0gSUNMIEV0aGVyVGVhbSAzMiBFSVNBCi0JICAoVXNlcyB0cnVlIDMyIGJpdCB0cmFuc2ZlcnMgcmF0aGVyIHRoYW4gMTZpIGNvbXBhYmlsaXR5IG1vZGUpCisJICAoVXNlcyB0cnVlIDMyIGJpdCB0cmFuc2ZlcnMgcmF0aGVyIHRoYW4gMTZpIGNvbXBhdGliaWxpdHkgbW9kZSkKIAogICAgRXhhbXBsZSBNb2R1bGUgdXNhZ2U6CiAgICAgICAgIGluc21vZCBldGgxNmkubyBpbz0weDJhMCBtZWRpYXR5cGU9Ym5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwppbmRleCBkYjAyOTBmLi5hODNkZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogCiAJLyogRmlndXJlIG91dCB3aGF0IHRyaWdnZXJlZCB0aGUgaW50ZXJydXB0Li4uCiAJICogVGhlIHRyaWNreSBiaXQgaGVyZSBpcyB0aGF0IHRoZSBpbnRlcnJ1cHQgc291cmNlIGJpdHMgZ2V0Ci0JICogc2V0IGluIElOVF9TT1VSQ0UgZm9yIGFuIGV2ZW50IGlycmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoYXQKKwkgKiBzZXQgaW4gSU5UX1NPVVJDRSBmb3IgYW4gZXZlbnQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoYXQKIAkgKiBldmVudCBpcyBtYXNrZWQgb3Igbm90LiAgVGh1cywgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGF0CiAJICogdHJpZ2dlcmVkIHRoZSBpbnRlcnJ1cHQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBzb3VyY2VzCiAJICogZm9yIGFsbCBldmVudHMgdGhhdCBhcmUgY3VycmVudGx5IG1hc2tlZC4gIFRoaXMgYmVoYXZpb3VyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuaCBiL2RyaXZlcnMvbmV0L2ZlYy5oCmluZGV4IGFjZTMxOGQuLjhiMmM2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5oCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5oCkBAIC05NywxMSArOTcsMTEgQEAKICAqCVRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY291cnRlc3kgb2YgY29tbXByb2MuaCwgd2hpY2ggd2hlcmUKICAqCUNvcHlyaWdodCAoYykgMTk5NyBEYW4gTWFsZWsgKGRtYWxla0BqbGMubmV0KS4KICAqLwotI2RlZmluZSBCRF9TQ19FTVBUWSAgICAgKCh1c2hvcnQpMHg4MDAwKSAgICAgICAgLyogUmVjaWV2ZSBpcyBlbXB0eSAqLworI2RlZmluZSBCRF9TQ19FTVBUWSAgICAgKCh1c2hvcnQpMHg4MDAwKSAgICAgICAgLyogUmVjZWl2ZSBpcyBlbXB0eSAqLwogI2RlZmluZSBCRF9TQ19SRUFEWSAgICAgKCh1c2hvcnQpMHg4MDAwKSAgICAgICAgLyogVHJhbnNtaXQgaXMgcmVhZHkgKi8KICNkZWZpbmUgQkRfU0NfV1JBUCAgICAgICgodXNob3J0KTB4MjAwMCkgICAgICAgIC8qIExhc3QgYnVmZmVyIGRlc2NyaXB0b3IgKi8KICNkZWZpbmUgQkRfU0NfSU5UUlBUICAgICgodXNob3J0KTB4MTAwMCkgICAgICAgIC8qIEludGVycnVwdCBvbiBjaGFuZ2UgKi8KLSNkZWZpbmUgQkRfU0NfQ00gICAgICAgICgodXNob3J0KTB4MDIwMCkgICAgICAgIC8qIENvbnRpbm91cyBtb2RlICovCisjZGVmaW5lIEJEX1NDX0NNICAgICAgICAoKHVzaG9ydCkweDAyMDApICAgICAgICAvKiBDb250aW51b3VzIG1vZGUgKi8KICNkZWZpbmUgQkRfU0NfSUQgICAgICAgICgodXNob3J0KTB4MDEwMCkgICAgICAgIC8qIFJlYydkIHRvbyBtYW55IGlkbGVzICovCiAjZGVmaW5lIEJEX1NDX1AgICAgICAgICAoKHVzaG9ydCkweDAxMDApICAgICAgICAvKiB4bXQgcHJlYW1ibGUgKi8KICNkZWZpbmUgQkRfU0NfQlIgICAgICAgICgodXNob3J0KTB4MDAyMCkgICAgICAgIC8qIEJyZWFrIHJlY2VpdmVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDdiOTI4OTcuLmQ1YWI0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC00NDAsNyArNDQwLDcgQEAKICNkZWZpbmUgTlZfUlgzX1ZMQU5fVEFHX1BSRVNFTlQgKDE8PDE2KQogI2RlZmluZSBOVl9SWDNfVkxBTl9UQUdfTUFTSwkoMHgwMDAwRkZGRikKIAotLyogTWlzY2VsYW5lb3VzIGhhcmR3YXJlIHJlbGF0ZWQgZGVmaW5lczogKi8KKy8qIE1pc2NlbGxhbmVvdXMgaGFyZHdhcmUgcmVsYXRlZCBkZWZpbmVzOiAqLwogI2RlZmluZSBOVl9QQ0lfUkVHU1pfVkVSMQkweDI3MAogI2RlZmluZSBOVl9QQ0lfUkVHU1pfVkVSMgkweDJkNAogI2RlZmluZSBOVl9QQ0lfUkVHU1pfVkVSMwkweDYwNApAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAkJfQogCX0KIAotCS8qIHNvbWUgcGh5cyBjbGVhciBvdXQgcGF1c2UgYWR2ZXJ0aXNtZW50IG9uIHJlc2V0LCBzZXQgaXQgYmFjayAqLworCS8qIHNvbWUgcGh5cyBjbGVhciBvdXQgcGF1c2UgYWR2ZXJ0aXNlbWVudCBvbiByZXNldCwgc2V0IGl0IGJhY2sgKi8KIAltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgcmVnKTsKIAogCS8qIHJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiwgcG93ZXIgZG93biBwaHkgKi8KQEAgLTI1MzUsNyArMjUzNSw3IEBACiAJZWxzZQogCQludl90eF9kb25lX29wdGltaXplZChkZXYsIG5wLT50eF9yaW5nX3NpemUpOwogCi0JLyogc2F2ZSBjdXJyZW50IEhXIHBvc3Rpb24gKi8KKwkvKiBzYXZlIGN1cnJlbnQgSFcgcG9zaXRpb24gKi8KIAlpZiAobnAtPnR4X2NoYW5nZV9vd25lcikKIAkJcHV0X3R4LmV4ID0gbnAtPnR4X2NoYW5nZV9vd25lci0+Zmlyc3RfdHhfZGVzYzsKIAllbHNlCkBAIC00MDUzLDcgKzQwNTMsNyBAQAogCiAJfSBlbHNlIGlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewogCQkvKiBOb3RlOiBhdXRvbmVnb3RpYXRpb24gZGlzYWJsZSwgc3BlZWQgMTAwMCBpbnRlbnRpb25hbGx5Ci0JCSAqIGZvcmJpZGRlbiAtIG5vb25lIHNob3VsZCBuZWVkIHRoYXQuICovCisJCSAqIGZvcmJpZGRlbiAtIG5vIG9uZSBzaG91bGQgbmVlZCB0aGF0LiAqLwogCiAJCWlmIChlY21kLT5zcGVlZCAhPSBTUEVFRF8xMCAmJiBlY21kLT5zcGVlZCAhPSBTUEVFRF8xMDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQxMDMsNyArNDEwMyw3IEBACiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CiAJCWlmIChlY21kLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKLQkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSAgLyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVydGlzbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSAgLyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVydGlzZW1lbnRzIGJ1dCBkaXNhYmxlIHR4IHBhdXNlICovCiAJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKIAkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKQogCQkJYWR2IHw9ICBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKQEAgLTQxNDgsNyArNDE0OCw3IEBACiAJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOwogCQlucC0+cGF1c2VfZmxhZ3MgJj0gfihOVl9QQVVTRUZSQU1FX0FVVE9ORUd8TlZfUEFVU0VGUkFNRV9SWF9FTkFCTEV8TlZfUEFVU0VGUkFNRV9UWF9FTkFCTEUpOwotCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpIHsvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNtZW50cyBidXQgZGlzYWJsZSB0eCBwYXVzZSAqLworCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpIHsvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNlbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KIAkJCWFkdiB8PSAgQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOwogCQkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOwogCQl9CkBAIC00NDQ5LDcgKzQ0NDksNyBAQAogCiAJCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBNSUlfUkVBRCk7CiAJCWFkdiAmPSB+KEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTSk7Ci0JCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX1JFUSkgLyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVydGlzbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSAvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNlbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KIAkJCWFkdiB8PSAgQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOwogCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9SRVEpCiAJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9BU1lNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwppbmRleCA2MTAzNWZjLi5iOWZiYzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwpAQCAtMjI2LDggKzIyNiw4IEBACiAJfQogCiAJRkMoZmVjcCwgcl9jbnRybCwgRkVDX1JDTlRSTF9QUk9NKTsKLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2hpZ2gsIGZlcC0+ZmVjLmh0aGkpOwotCUZXKGZlY3AsIGhhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9sb3csIGZlcC0+ZmVjLmh0bG8pOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI3Myw4ICsyNzMsOCBAQAogCS8qCiAJICogUmVzZXQgYWxsIG11bHRpY2FzdC4KIAkgKi8KLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2hpZ2gsIGZlcC0+ZmVjLmh0aGkpOwotCUZXKGZlY3AsIGhhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9sb3csIGZlcC0+ZmVjLmh0bG8pOwogCiAJLyoKIAkgKiBTZXQgbWF4aW11bSByZWNlaXZlIGJ1ZmZlciBzaXplLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnRtYWMxMDAuYyBiL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMKaW5kZXggYTMxNjYxOS4uOWJkNzc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnRtYWMxMDAuYworKysgYi9kcml2ZXJzL25ldC9mdG1hYzEwMC5jCkBAIC0xMzksMTEgKzEzOSwxMSBAQAogCQkJICogdGhhdCBoYXJkd2FyZSByZXNldCBjb21wbGV0ZWQgKHdoYXQgdGhlIGYqY2spLgogCQkJICogV2Ugc3RpbGwgbmVlZCB0byB3YWl0IGZvciBhIHdoaWxlLgogCQkJICovCi0JCQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsKKwkJCXVkZWxheSg1MDApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAwMDApOworCQl1ZGVsYXkoMTAwMCk7CiAJfQogCiAJbmV0ZGV2X2VycihuZXRkZXYsICJzb2Z0d2FyZSByZXNldCBmYWlsZWRcbiIpOwpAQCAtNzcyLDcgKzc3Miw3IEBACiAJCWlmICgocGh5Y3IgJiBGVE1BQzEwMF9QSFlDUl9NSUlSRCkgPT0gMCkKIAkJCXJldHVybiBwaHljciAmIEZUTUFDMTAwX1BIWUNSX01JSVJEQVRBOwogCi0JCXVzbGVlcF9yYW5nZSgxMDAsIDEwMDApOworCQl1ZGVsYXkoMTAwKTsKIAl9CiAKIAluZXRkZXZfZXJyKG5ldGRldiwgIm1kaW8gcmVhZCB0aW1lZCBvdXRcbiIpOwpAQCAtODAxLDcgKzgwMSw3IEBACiAJCWlmICgocGh5Y3IgJiBGVE1BQzEwMF9QSFlDUl9NSUlXUikgPT0gMCkKIAkJCXJldHVybjsKIAotCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKwkJdWRlbGF5KDEwMCk7CiAJfQogCiAJbmV0ZGV2X2VycihuZXRkZXYsICJtZGlvIHdyaXRlIHRpbWVkIG91dFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggZWM1ZDU5NS4uYjJmZTdlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIH07CiAKIC8qIFN0cnVjdCBzdG9sZW4gYWxtb3N0IGNvbXBsZXRlbHkgKGFuZCBzaGFtZWxlc3NseSkgZnJvbSB0aGUgRkNDIGVuZXQgc291cmNlCi0gKiAoT2ssIHRoYXQncyBub3Qgc28gdHJ1ZSBhbnltb3JlLCBidXQgdGhlcmUgaXMgYSBmYW1pbHkgcmVzZW1ibGVuY2UpCisgKiAoT2ssIHRoYXQncyBub3Qgc28gdHJ1ZSBhbnltb3JlLCBidXQgdGhlcmUgaXMgYSBmYW1pbHkgcmVzZW1ibGFuY2UpCiAgKiBUaGUgR0ZBUiBidWZmZXIgZGVzY3JpcHRvcnMgdHJhY2sgdGhlIHJpbmcgYnVmZmVycy4gIFRoZSByeF9iZF9iYXNlCiAgKiBhbmQgdHhfYmRfYmFzZSBhbHdheXMgcG9pbnQgdG8gdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgYnVmZmVyLgogICogVGhlIGRpcnR5X3R4IHRyYWNrcyB0aGUgY3VycmVudCBidWZmZXIgdGhhdCBpcyBiZWluZyBzZW50IGJ5IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9NYWtlZmlsZQppbmRleCA5ZGVmODY3Li4xMDQwOTYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAjCiAjIDE5OTcxMTMwIAlNb3ZlZCB0aGUgYW1hdGV1ciByYWRpbyByZWxhdGVkIG5ldHdvcmsgZHJpdmVycyBmcm9tIAotIwkJZHJpdmVycy9uZXQvIHRvIGRyaXZlcnMvaGFtcmFkaW8gZm9yIGVhc2llciBtYWludGFpbmFuY2UuCisjCQlkcml2ZXJzL25ldC8gdG8gZHJpdmVycy9oYW1yYWRpbyBmb3IgZWFzaWVyIG1haW50ZW5hbmNlLgogIyAgICAgICAgICAgICAgIEpvZXJnIFJldXRlciBETDFCS0UgPGpyZXV0ZXJAeWFpbmEuZGU+CiAjCiAjIDIwMDAwODA2CVJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCA3ZDljZWQwLi45NmE5OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtMzAsNyArMzAsNyBAQAogICogICAwLjEgRjFPQVQgMDcuMDYuOTggIEFkZCB0aW1lciBwb2xsaW5nIHJvdXRpbmUgZm9yIGNoYW5uZWwgYXJiaXRyYXRpb24KICAqICAgMC4yIEY2RkJCIDA4LjA2Ljk4ICBBZGRlZCBkZWxheSBhZnRlciBGUEdBIHByb2dyYW1taW5nCiAgKiAgIDAuMyBGNkZCQiAyOS4wNy45OCAgRGVsYXllZCBQVFQgaW1wbGVtZW50YXRpb24gZm9yIGR1cG1vZGU9MgotICogICAwLjQgRjZGQkIgMzAuMDcuOTggIEFkZGVkIFR4VGFpbCwgU2xvdHRpbWUgYW5kIFBlcnNpc3RhbmNlCisgKiAgIDAuNCBGNkZCQiAzMC4wNy45OCAgQWRkZWQgVHhUYWlsLCBTbG90dGltZSBhbmQgUGVyc2lzdGVuY2UKICAqICAgMC41IEY2RkJCIDAxLjA4Ljk4ICBTaGFyZWQgSVJRcywgL3Byb2MvbmV0IGFuZCBuZXR3b3JrIHN0YXRpc3RpY3MKICAqICAgMC42IEY2RkJCIDI1LjA4Ljk4ICBBZGRlZCAxMjAwQmRzIGZvcm1hdAogICogICAwLjcgRjZGQkIgMTIuMDkuOTggIEFkZGVkIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggOGUyYzQ2MC4uOGUxMGQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0xODAsOCArMTgwLDggQEAKIAogCXVfaW50ICpwYWdlX3ZhZGRyX2FsZ247CS8qIEFsaWduZWQgdmlydHVhbCBhZGRyZXNzIG9mIGFsbG9jYXRlZCBwYWdlICovCiAJdV9sb25nIHdoYXRldmVyX29mZnNldDsJLyogT2Zmc2V0IHRvIGJ1cy9waHlzL2RtYSBhZGRyZXNzICovCi0JaW50IHJ4cmNvbW1pdDsJCS8qICMgUnggUERMcyBjb21taXRlZCB0byBhZGFwdGVyICovCi0JaW50IHR4cmNvbW1pdDsJCS8qICMgVHggUERMcyBjb21taXRlZCB0byBhZGFwdGVyICovCisJaW50IHJ4cmNvbW1pdDsJCS8qICMgUnggUERMcyBjb21taXR0ZWQgdG8gYWRhcHRlciAqLworCWludCB0eHJjb21taXQ7CQkvKiAjIFR4IFBETHMgY29tbWl0dGVkIHRvIGFkYXB0ZXIgKi8KIH07CiAKIC8qCkBAIC03MTYsNyArNzE2LDcgQEAKIAkgKiBpbXBsZW1lbnRlZC90ZXN0ZWQgb25seSB3aXRoIHRoZSBsYXNzZW4gY2hpcCBhbnl3YXkuLi4gKi8KIAlpZiAobHAtPm1vZGUgPT0gMSkgewkvKiBidXNtYXN0ZXIgKi8KIAkJZG1hX2FkZHJfdCBwYWdlX2JhZGRyOwotCQkvKiBHZXQgcGh5c2ljYWxseSBjb250aW5vdXMgbWVtb3J5IGZvciBUWCAmIFJYIFBETHMgICAgKi8KKwkJLyogR2V0IHBoeXNpY2FsbHkgY29udGludW91cyBtZW1vcnkgZm9yIFRYICYgUlggUERMcyAgICAqLwogCQkvKiBDb252ZXJzaW9uIHRvIG5ldyBQQ0kgQVBJIDoKIAkJICogUGFnZXMgYXJlIGFsd2F5cyBhbGlnbmVkIGFuZCB6ZXJvZWQsIG5vIG5lZWQgdG8gaXQgb3Vyc2VsZi4KIAkJICogRG9jIHNheXMgc2hvdWxkIGJlIE9LIGZvciBFSVNBIGJ1cyBhcyB3ZWxsIC0gSmVhbiBJSSAqLwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIAogLyogY2xlYW5fdHhyaW5nIGNoZWNrcyBpZiBwYWNrZXRzIGhhdmUgYmVlbiBzZW50IGJ5IHRoZSBjYXJkIGJ5IHJlYWRpbmcKICAqIHRoZSBUWF9QREwgcmVnaXN0ZXIgZnJvbSB0aGUgcGVyZm9ybWFuY2UgcGFnZSBhbmQgY29tcGFyaW5nIGl0IHRvIHRoZQotICogbnVtYmVyIG9mIGNvbW1pdGVkIHBhY2tldHMuIEl0IHRoZW4gZnJlZXMgdGhlIHNrYidzIG9mIHRoZSBwYWNrZXRzIHRoYXQKKyAqIG51bWJlciBvZiBjb21taXR0ZWQgcGFja2V0cy4gSXQgdGhlbiBmcmVlcyB0aGUgc2tiJ3Mgb2YgdGhlIHBhY2tldHMgdGhhdAogICogb2J2aW91c2x5IGhhdmUgYmVlbiBzZW50IHRvIHRoZSBuZXR3b3JrLgogICoKICAqIE5lZWRzIHRoZSBQRVJGT1JNQU5DRSBwYWdlIHNlbGVjdGVkLgpAQCAtMTYxNyw3ICsxNjE3LDcgQEAKIAogI2lmZGVmIEhQMTAwX0RFQlVHCiAJaWYgKGRvbmVjb3VudCA+IE1BWF9UWF9QREwpCi0JCXByaW50aygiaHAxMDA6ICVzOiBXYXJuaW5nOiBNb3JlIFBETHMgdHJhbnNtaXR0ZWQgdGhhbiBjb21taXRlZCB0byBjYXJkPz8/XG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoImhwMTAwOiAlczogV2FybmluZzogTW9yZSBQRExzIHRyYW5zbWl0dGVkIHRoYW4gY29tbWl0dGVkIHRvIGNhcmQ/Pz9cbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAogCWZvciAoOyAwICE9IGRvbmVjb3VudDsgZG9uZWNvdW50LS0pIHsKQEAgLTE3NjUsNyArMTc2NSw3IEBACiAgKiBSZWNlaXZlIEZ1bmN0aW9uIChOb24tQnVzbWFzdGVyIG1vZGUpCiAgKiBDYWxsZWQgd2hlbiBhbiAiUmVjZWl2ZSBQYWNrZXQiIGludGVycnVwdCBvY2N1cnMsIGkuZS4gdGhlIHJlY2VpdmUKICAqIHBhY2tldCBjb3VudGVyIGlzIG5vbi16ZXJvLgotICogRm9yIG5vbi1idXNtYXN0ZXIsIHRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgd2hvbGUgd29yayBvZiB0cmFuc2ZlcmluZworICogRm9yIG5vbi1idXNtYXN0ZXIsIHRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgd2hvbGUgd29yayBvZiB0cmFuc2ZlcnJpbmcKICAqIHRoZSBwYWNrZXQgdG8gdGhlIGhvc3QgbWVtb3J5IGFuZCB0aGVuIHVwIHRvIGhpZ2hlciBsYXllcnMgdmlhIHNrYgogICogYW5kIG5ldGlmX3J4LgogICovCkBAIC0xODkyLDcgKzE4OTIsNyBAQAogCQkvKiBSWF9QS1RfQ05UIHN0YXRlcyBob3cgbWFueSBQRExzIGFyZSBjdXJyZW50bHkgZm9ybWF0dGVkIGFuZCBhdmFpbGFibGUgdG8KIAkJICogdGhlIGNhcmRzIEJNIGVuZ2luZSAqLwogCWlmICgoaHAxMDBfaW53KFJYX1BLVF9DTlQpICYgMHgwMGZmKSA+PSBscC0+cnhyY29tbWl0KSB7Ci0JCXByaW50aygiaHAxMDA6ICVzOiBNb3JlIHBhY2tldHMgcmVjZWl2ZWQgdGhhbiBjb21taXRlZD8gUlhfUEtUX0NOVD0weCV4LCBjb21taXQ9MHgleFxuIiwKKwkJcHJpbnRrKCJocDEwMDogJXM6IE1vcmUgcGFja2V0cyByZWNlaXZlZCB0aGFuIGNvbW1pdHRlZD8gUlhfUEtUX0NOVD0weCV4LCBjb21taXQ9MHgleFxuIiwKIAkJCQkgICAgIGRldi0+bmFtZSwgaHAxMDBfaW53KFJYX1BLVF9DTlQpICYgMHgwMGZmLAogCQkJCSAgICAgbHAtPnJ4cmNvbW1pdCk7CiAJCXJldHVybjsKQEAgLTIyNTYsNyArMjI1Niw3IEBACiAJCWlmIChscC0+bW9kZSAhPSAxKQkvKiBub24gYnVzbWFzdGVyICovCiAJCQlocDEwMF9yeChkZXYpOwogCQllbHNlIGlmICghKHZhbCAmIEhQMTAwX1JYX1BETF9GSUxMX0NPTVBMKSkgewotCQkJLyogU2hvdWxkbnQgaGFwcGVuIC0gbWF5YmUgd2UgbWlzc2VkIGEgUlhfUERMX0ZJTEwgSW50ZXJydXB0PyAgKi8KKwkJCS8qIFNob3VsZG4ndCBoYXBwZW4gLSBtYXliZSB3ZSBtaXNzZWQgYSBSWF9QRExfRklMTCBJbnRlcnJ1cHQ/ICAqLwogCQkJaHAxMDBfcnhfYm0oZGV2KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmggYi9kcml2ZXJzL25ldC9ocDEwMC5oCmluZGV4IGU2Y2ExMjguLmI2MGU5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmgKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuaApAQCAtMTA5LDcgKzEwOSw3IEBACiAjZGVmaW5lIEhQMTAwX1JFR19NQUNfQ0ZHXzIJMHgwZAkvKiBSVzogKDgpIE1pc2MgTUFDIGZ1bmN0aW9ucyAgICAgICAgKi8KICNkZWZpbmUgSFAxMDBfUkVHX01BQ19DRkdfMyAgICAgMHgwZQkvKiBSVzogKDgpIE1pc2MgTUFDIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBIUDEwMF9SRUdfTUFDX0NGR180ICAgICAweDBmCS8qIFI6ICAoOCkgTWlzYyBNQUMgc3RhdGVzICovCi0jZGVmaW5lIEhQMTAwX1JFR19EUk9QUEVECTB4MTAJLyogUjogICgxNiksMTE6MCBQa3RzIGNhbnQgZml0IGluIG1lbSAqLworI2RlZmluZSBIUDEwMF9SRUdfRFJPUFBFRAkweDEwCS8qIFI6ICAoMTYpLDExOjAgUGt0cyBjYW4ndCBmaXQgaW4gbWVtICovCiAjZGVmaW5lIEhQMTAwX1JFR19DUkMJCTB4MTIJLyogUjogICg4KSBQa3RzIHdpdGggQ1JDICAgICAgICAgICAgICovCiAjZGVmaW5lIEhQMTAwX1JFR19BQk9SVAkJMHgxMwkvKiBSOiAgKDgpIEFib3J0ZWQgVHggcGt0cyAgICAgICAgICAgKi8KICNkZWZpbmUgSFAxMDBfUkVHX1RSQUlOX1JFUVVFU1QgMHgxNAkvKiBSVzogKDE2KSBFbmRub2RlIE1BQyByZWdpc3Rlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5ZHJhLmMgYi9kcml2ZXJzL25ldC9oeWRyYS5jCmluZGV4IGM1ZWY2MmMuLjFjZDQ4MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2h5ZHJhLmMKKysrIGIvZHJpdmVycy9uZXQvaHlkcmEuYwpAQCAtOTgsMTUgKzk4LDE1IEBACiAJLm5kb19vcGVuCQk9IGh5ZHJhX29wZW4sCiAJLm5kb19zdG9wCQk9IGh5ZHJhX2Nsb3NlLAogCi0JLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCi0JLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBfX2VpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IF9fZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBfX2VpX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IF9fZWlfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBfX2VpX3BvbGwsCiAjZW5kaWYKIH07CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCTB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MWEsIDB4MWMsIDB4MWUsCiAgICAgfTsKIAotICAgIGRldiA9IGFsbG9jX2VpX25ldGRldigpOworICAgIGRldiA9IF9fX19hbGxvY19laV9uZXRkZXYoMCk7CiAgICAgaWYgKCFkZXYpCiAJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL3RhaC5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKaW5kZXggOGVhZDZhOS4uNWY1MWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQgdGltZW91dFxuIiwKIAkJCW9mZGV2LT5kZXYub2Zfbm9kZS0+ZnVsbF9uYW1lKTsKIAotCS8qIDEwS0IgVEFIIFRYIEZJRk8gYWNjb21vZGF0ZXMgdGhlIG1heCBNVFUgb2YgOTAwMCAqLworCS8qIDEwS0IgVEFIIFRYIEZJRk8gYWNjb21tb2RhdGVzIHRoZSBtYXggTVRVIG9mIDkwMDAgKi8KIAlvdXRfYmUzMigmcC0+bXIsCiAJCSBUQUhfTVJfQ1ZSIHwgVEFIX01SX1NUXzc2OCB8IFRBSF9NUl9URlNfMTBLQiB8IFRBSF9NUl9EVEZQIHwKIAkJIFRBSF9NUl9ESUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDk0ZDk5NjkuLjhmZjY4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlzdGlsbCB3b3JrIHdpdGggMi4wLnguLi4uCiAgIEphbiAyOHRoLCAyMDAwCiAJaW4gTGludXggMi4yLjEzLCB0aGUgdmVyc2lvbi5oIGZpbGUgbXlzdGVyaW91c2x5IGRpZG4ndCBnZXQKLQlpbmNsdWRlZC4gIEFkZGVkIGEgd29ya2Fyb3VuZCBmb3IgdGhpcy4gIEZ1dGhlcm1vcmUsIGl0IG5vdworCWluY2x1ZGVkLiAgQWRkZWQgYSB3b3JrYXJvdW5kIGZvciB0aGlzLiAgRnVydGhlcm1vcmUsIGl0IG5vdwogCW5vdCBvbmx5IGNvbXBpbGVzIGFzIGEgbW9kdWxlcyA7LSkKICAgSmFuIDMwdGgsIDIwMDAKIAluZXdlciBrZXJuZWxzIGF1dG9tYXRpY2FsbHkgcHJvYmUgbW9yZSB0aGFuIG9uZSBib2FyZCwgc28gdGhlCkBAIC00ODEsNyArNDgxLDcgQEAKIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IG5ldGRldl9tY19jb3VudChkZXYpID4gY2FtY250KQogCQlyY3J2YWwgfD0gUkNSRUdfQU1DOwogCi0JLyogcHJvbWlzY291cyBtb2RlID8gKi8KKwkvKiBwcm9taXNjdW91cyBtb2RlID8gKi8KIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCXJjcnZhbCB8PSBSQ1JFR19QUk87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1sYW5hLmggYi9kcml2ZXJzL25ldC9pYm1sYW5hLmgKaW5kZXggYWEzZGRiZC4uYWNjZDVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtbGFuYS5oCisrKyBiL2RyaXZlcnMvbmV0L2libWxhbmEuaApAQCAtOTAsNyArOTAsNyBAQAogI2RlZmluZSBSQ1JFR19FUlIgICAgICAgIDB4ODAwMAkvKiBhY2NlcHQgZGFtYWdlZCBhbmQgY29sbGlkZWQgcGt0cyAqLwogI2RlZmluZSBSQ1JFR19STlQgICAgICAgIDB4NDAwMAkvKiBhY2NlcHQgcGFja2V0cyB0aGF0IGFyZSA8IDY0ICAgICAqLwogI2RlZmluZSBSQ1JFR19CUkQgICAgICAgIDB4MjAwMAkvKiBhY2NlcHQgYnJvYWRjYXN0cyAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBSQ1JFR19QUk8gICAgICAgIDB4MTAwMAkvKiBwcm9taXNjb3VzIG1vZGUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSQ1JFR19QUk8gICAgICAgIDB4MTAwMAkvKiBwcm9taXNjdW91cyBtb2RlICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUkNSRUdfQU1DICAgICAgICAweDA4MDAJLyogYWNjZXB0IGFsbCBtdWx0aWNhc3RzICAgICAgICAgICAgKi8KICNkZWZpbmUgUkNSRUdfTEJfTk9ORSAgICAweDAwMDAJLyogbm8gbG9vcGJhY2sgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUkNSRUdfTEJfTUFDICAgICAweDAyMDAJLyogTUFDIGxvb3BiYWNrICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwppbmRleCA5MGM1ZTAxLi5jZTgyNTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCkBAIC0xODEsNyArMTgxLDcgQEAKICAqICBhZGRyZXNzIGFuZCBtdXN0IG92ZXJyaWRlIHRoZSBhY3R1YWwgcGVybWFuZW50IE1BQyBhZGRyZXNzLiAgSWYgYW4KICAqICBhbHRlcm5hdGUgTUFDIGFkZHJlc3MgaXMgZm9wdW5kIGl0IGlzIHNhdmVkIGluIHRoZSBodyBzdHJ1Y3QgYW5kCiAgKiAgcHJncmFtbWVkIGludG8gUkFSMCBhbmQgdGhlIGN1bnRpb24gcmV0dXJucyBzdWNjZXNzLCBvdGhlcndpc2UgdGhlCi0gKiAgZnVjbnRpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqICBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yLgogICoqLwogczMyIGlnYl9jaGVja19hbHRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKQEAgLTk4Miw3ICs5ODIsNyBAQAogfQogCiAvKioKLSAqICBpZ2JfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmVpdmUgY3VycmVudCBzcGVlZC9kdXBsZXgKKyAqICBpZ2JfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmlldmUgY3VycmVudCBzcGVlZC9kdXBsZXgKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBzcGVlZDogc3RvcmVzIHRoZSBjdXJyZW50IHNwZWVkCiAgKiAgQGR1cGxleDogc3RvcmVzIHRoZSBjdXJyZW50IGR1cGxleApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IDY2OTRiZjMuLmQ2Mzk3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTE0MjEsNyArMTQyMSw3IEBACiB9CiAKIC8qKgotICogIGlnYl9jaGVja19kb3duc2hpZnQgLSBDaGVja3Mgd2hldGhlciBhIGRvd25zaGlmdCBpbiBzcGVlZCBvY2N1cmVkCisgKiAgaWdiX2NoZWNrX2Rvd25zaGlmdCAtIENoZWNrcyB3aGV0aGVyIGEgZG93bnNoaWZ0IGluIHNwZWVkIG9jY3VycmVkCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgU3VjY2VzcyByZXR1cm5zIDAsIEZhaWx1cmUgcmV0dXJucyAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IDNkODUwYWYuLjBkZmQxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkucHJvYmUgICAgPSBpZ2JfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoaWdiX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLyogUG93ZXIgTWFuYWdtZW50IEhvb2tzICovCisJLyogUG93ZXIgTWFuYWdlbWVudCBIb29rcyAqLwogCS5zdXNwZW5kICA9IGlnYl9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGlnYl9yZXN1bWUsCiAjZW5kaWYKQEAgLTIyOTIsNyArMjI5Miw3IEBACiAJCS8qKgogCQkgKiBTY2FsZSB0aGUgTklDIGNsb2NrIGN5Y2xlIGJ5IGEgbGFyZ2UgZmFjdG9yIHNvIHRoYXQKIAkJICogcmVsYXRpdmVseSBzbWFsbCBjbG9jayBjb3JyZWN0aW9ucyBjYW4gYmUgYWRkZWQgb3IKLQkJICogc3Vic3RyYWN0ZWQgYXQgZWFjaCBjbG9jayB0aWNrLiBUaGUgZHJhd2JhY2tzIG9mIGEgbGFyZ2UKKwkJICogc3VidHJhY3RlZCBhdCBlYWNoIGNsb2NrIHRpY2suIFRoZSBkcmF3YmFja3Mgb2YgYSBsYXJnZQogCQkgKiBmYWN0b3IgYXJlIGEpIHRoYXQgdGhlIGNsb2NrIHJlZ2lzdGVyIG92ZXJmbG93cyBtb3JlIHF1aWNrbHkKIAkJICogKG5vdCBzdWNoIGEgYmlnIGRlYWwpIGFuZCBiKSB0aGF0IHRoZSBpbmNyZW1lbnQgcGVyIHRpY2sgaGFzCiAJCSAqIHRvIGZpdCBpbnRvIDI0IGJpdHMuICBBcyBhIHJlc3VsdCB3ZSBuZWVkIHRvIHVzZSBhIHNoaWZ0IG9mCkBAIC0zNDA5LDcgKzM0MDksNyBAQAogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIFdyaXRlIGFkZHJlc3NlcyB0byB0aGUgTVRBLCBpZiB0aGUgYXR0ZW1wdCBmYWlscwotCQkJICogdGhlbiB3ZSBzaG91bGQganVzdCB0dXJuIG9uIHByb21pc2NvdXMgbW9kZSBzbworCQkJICogdGhlbiB3ZSBzaG91bGQganVzdCB0dXJuIG9uIHByb21pc2N1b3VzIG1vZGUgc28KIAkJCSAqIHRoYXQgd2UgY2FuIGF0IGxlYXN0IHJlY2VpdmUgbXVsdGljYXN0IHRyYWZmaWMKIAkJCSAqLwogCQkJY291bnQgPSBpZ2Jfd3JpdGVfbWNfYWRkcl9saXN0KG5ldGRldik7CkBAIC0zNDIzLDcgKzM0MjMsNyBAQAogCQkvKgogCQkgKiBXcml0ZSBhZGRyZXNzZXMgdG8gYXZhaWxhYmxlIFJBUiByZWdpc3RlcnMsIGlmIHRoZXJlIGlzIG5vdAogCQkgKiBzdWZmaWNpZW50IHNwYWNlIHRvIHN0b3JlIGFsbCB0aGUgYWRkcmVzc2VzIHRoZW4gZW5hYmxlCi0JCSAqIHVuaWNhc3QgcHJvbWlzY291cyBtb2RlCisJCSAqIHVuaWNhc3QgcHJvbWlzY3VvdXMgbW9kZQogCQkgKi8KIAkJY291bnQgPSBpZ2Jfd3JpdGVfdWNfYWRkcl9saXN0KG5ldGRldik7CiAJCWlmIChjb3VudCA8IDApIHsKQEAgLTQzMTcsNyArNDMxNyw3IEBACiAKIAkvKgogCSAqIGNvdW50IHJlZmxlY3RzIGRlc2NyaXB0b3JzIG1hcHBlZCwgaWYgMCBvciBsZXNzIHRoZW4gbWFwcGluZyBlcnJvcgotCSAqIGhhcyBvY2N1cmVkIGFuZCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgZGVzY3JpcHRvciBxdWV1ZQorCSAqIGhhcyBvY2N1cnJlZCBhbmQgd2UgbmVlZCB0byByZXdpbmQgdGhlIGRlc2NyaXB0b3IgcXVldWUKIAkgKi8KIAljb3VudCA9IGlnYl90eF9tYXBfYWR2KHR4X3JpbmcsIHNrYiwgZmlyc3QpOwogCWlmICghY291bnQpIHsKQEAgLTUzNTIsOCArNTM1Miw4IEBACiAgKiAgVGhlIHVuaWNhc3QgdGFibGUgYWRkcmVzcyBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuCiAgKiAgVGhlIHRhYmxlIGlzIG1lYW50IHRvIGJlIHVzZWQgaW4gYSB3YXkgc2ltaWxhciB0byBob3cgdGhlIE1UQSBpcyB1c2VkCiAgKiAgaG93ZXZlciBkdWUgdG8gY2VydGFpbiBsaW1pdGF0aW9ucyBpbiB0aGUgaGFyZHdhcmUgaXQgaXMgbmVjZXNzYXJ5IHRvCi0gKiAgc2V0IGFsbCB0aGUgaGFzaCBiaXRzIHRvIDEgYW5kIHVzZSB0aGUgVk1PTFIgUk9QRSBiaXQgYXMgYSBwcm9taXNjb3VzCi0gKiAgZW5hYmxlIGJpdCB0byBhbGxvdyB2bGFuIHRhZyBzdHJpcHBpbmcgd2hlbiBwcm9taXNjb3VzIG1vZGUgaXMgZW5hYmxlZAorICogIHNldCBhbGwgdGhlIGhhc2ggYml0cyB0byAxIGFuZCB1c2UgdGhlIFZNT0xSIFJPUEUgYml0IGFzIGEgcHJvbWlzY3VvdXMKKyAqICBlbmFibGUgYml0IHRvIGFsbG93IHZsYW4gdGFnIHN0cmlwcGluZyB3aGVuIHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZAogICoqLwogc3RhdGljIHZvaWQgaWdiX3NldF91dGEoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwppbmRleCA2Y2NjMzJmLi4xZDA0Y2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwpAQCAtMjIyNyw3ICsyMjI3LDcgQEAKIAogCS8qCiAJICogY291bnQgcmVmbGVjdHMgZGVzY3JpcHRvcnMgbWFwcGVkLCBpZiAwIHRoZW4gbWFwcGluZyBlcnJvcgotCSAqIGhhcyBvY2N1cmVkIGFuZCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgZGVzY3JpcHRvciBxdWV1ZQorCSAqIGhhcyBvY2N1cnJlZCBhbmQgd2UgbmVlZCB0byByZXdpbmQgdGhlIGRlc2NyaXB0b3IgcXVldWUKIAkgKi8KIAljb3VudCA9IGlnYnZmX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwZy5jIGIvZHJpdmVycy9uZXQvaXBnLmMKaW5kZXggYTViMGYwZS4uNThjZDMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXBnLmMKKysrIGIvZHJpdmVycy9uZXQvaXBnLmMKQEAgLTQ4NiwxNCArNDg2LDE0IEBACiAJcGh5Y3RybCA9IGlwZ19yOChQSFlfQ1RSTCk7CiAJbWFjX2N0cmxfdmFsID0gaXBnX3IzMihNQUNfQ1RSTCk7CiAKLQkvKiBTZXQgZmxhZ3MgZm9yIHVzZSBpbiByZXNvbHZpbmcgYXV0by1uZWdvdGF0aW9uLCBhc3N1bWluZworCS8qIFNldCBmbGFncyBmb3IgdXNlIGluIHJlc29sdmluZyBhdXRvLW5lZ290aWF0aW9uLCBhc3N1bWluZwogCSAqIG5vbi0xMDAwTWJwcywgaGFsZiBkdXBsZXgsIG5vIGZsb3cgY29udHJvbC4KIAkgKi8KIAlmdWxsZHVwbGV4ID0gMDsKIAl0eGZsb3djb250cm9sID0gMDsKIAlyeGZsb3djb250cm9sID0gMDsKIAotCS8qIFRvIGFjY29tb2RhdGUgYSBwcm9ibGVtIGluIDEwTWJwcyBvcGVyYXRpb24sCisJLyogVG8gYWNjb21tb2RhdGUgYSBwcm9ibGVtIGluIDEwTWJwcyBvcGVyYXRpb24sCiAJICogc2V0IGEgZ2xvYmFsIGZsYWcgaWYgUEhZIHJ1bm5pbmcgaW4gMTBNYnBzIG1vZGUuCiAJICovCiAJc3AtPnRlbm1icHNtb2RlID0gMDsKQEAgLTg0Niw3ICs4NDYsNyBAQAogfQogCiAvKgotICogRnJlZSBhbGwgdHJhbnNtaXQgYnVmZmVycyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2ZlcmVkCisgKiBGcmVlIGFsbCB0cmFuc21pdCBidWZmZXJzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZmVycmVkCiAgKiB2aWEgRE1BIHRvIHRoZSBJUEcuCiAgKi8KIHN0YXRpYyB2b2lkIGlwZ19uaWNfdHhmcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC05MjAsNyArOTIwLDcgQEAKIAogLyoKICAqIEZvciBUeENvbXBsZXRlIGludGVycnVwdHMsIGZyZWUgYWxsIHRyYW5zbWl0Ci0gKiBidWZmZXJzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZmVyZWQgdmlhIERNQQorICogYnVmZmVycyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2ZlcnJlZCB2aWEgRE1BCiAgKiB0byB0aGUgSVBHLgogICovCiBzdGF0aWMgdm9pZCBpcGdfbmljX3R4Y2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTE0MSwxMyArMTE0MSwxMyBAQAogCiAJCS8qIEluY3JlbWVudCBkZXRhaWxlZCByZWNlaXZlIGVycm9yIHN0YXRpc3RpY3MuICovCiAJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEZJRk9PVkVSUlVOKSB7Ci0JCQlJUEdfREVCVUdfTVNHKCJSWCBGSUZPIG92ZXJydW4gb2NjdXJlZC5cbiIpOworCQkJSVBHX0RFQlVHX01TRygiUlggRklGTyBvdmVycnVuIG9jY3VycmVkLlxuIik7CiAKIAkJCXNwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQl9CiAKIAkJaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYUlVOVEZSQU1FKSB7Ci0JCQlJUEdfREVCVUdfTVNHKCJSWCBydW50IG9jY3VyZWQuXG4iKTsKKwkJCUlQR19ERUJVR19NU0coIlJYIHJ1bnQgb2NjdXJyZWQuXG4iKTsKIAkJCXNwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCX0KIApAQCAtMTE1Niw3ICsxMTU2LDcgQEAKIAkJICovCiAKIAkJaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYQUxJR05NRU5URVJST1IpIHsKLQkJCUlQR19ERUJVR19NU0coIlJYIGFsaWdubWVudCBlcnJvciBvY2N1cmVkLlxuIik7CisJCQlJUEdfREVCVUdfTVNHKCJSWCBhbGlnbm1lbnQgZXJyb3Igb2NjdXJyZWQuXG4iKTsKIAkJCXNwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJfQogCkBAIC0xNDIxLDEyICsxNDIxLDEyIEBACiAKIAkJCS8qIEluY3JlbWVudCBkZXRhaWxlZCByZWNlaXZlIGVycm9yIHN0YXRpc3RpY3MuICovCiAJCQlpZiAobGU2NF90b19jcHUocnhmZC0+cmZzKSAmIElQR19SRlNfUlhGSUZPT1ZFUlJVTikgewotCQkJCUlQR19ERUJVR19NU0coIlJYIEZJRk8gb3ZlcnJ1biBvY2N1cmVkLlxuIik7CisJCQkJSVBHX0RFQlVHX01TRygiUlggRklGTyBvdmVycnVuIG9jY3VycmVkLlxuIik7CiAJCQkJc3AtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQl9CiAKIAkJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWFJVTlRGUkFNRSkgewotCQkJCUlQR19ERUJVR19NU0coIlJYIHJ1bnQgb2NjdXJlZC5cbiIpOworCQkJCUlQR19ERUJVR19NU0coIlJYIHJ1bnQgb2NjdXJyZWQuXG4iKTsKIAkJCQlzcC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJfQogCkBAIC0xNDM2LDcgKzE0MzYsNyBAQAogCQkJICovCiAKIAkJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEFMSUdOTUVOVEVSUk9SKSB7Ci0JCQkJSVBHX0RFQlVHX01TRygiUlggYWxpZ25tZW50IGVycm9yIG9jY3VyZWQuXG4iKTsKKwkJCQlJUEdfREVCVUdfTVNHKCJSWCBhbGlnbm1lbnQgZXJyb3Igb2NjdXJyZWQuXG4iKTsKIAkJCQlzcC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQl9CiAKQEAgLTE0NjAsNyArMTQ2MCw3IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAKLQkJCS8qIEFkanVzdCB0aGUgbmV3IGJ1ZmZlciBsZW5ndGggdG8gYWNjb21vZGF0ZSB0aGUgc2l6ZQorCQkJLyogQWRqdXN0IHRoZSBuZXcgYnVmZmVyIGxlbmd0aCB0byBhY2NvbW1vZGF0ZSB0aGUgc2l6ZQogCQkJICogb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgogCQkJICovCiAJCQlza2JfcHV0KHNrYiwgZnJhbWVsZW4pOwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAl9CiAKIAkvKgotCSAqIElmIHRoZXJlIGFyZSBtb3JlIFJGRHMgdG8gcHJvY2VzIGFuZCB0aGUgYWxsb2NhdGVkIGFtb3VudCBvZiBSRkQKKwkgKiBJZiB0aGVyZSBhcmUgbW9yZSBSRkRzIHRvIHByb2Nlc3MgYW5kIHRoZSBhbGxvY2F0ZWQgYW1vdW50IG9mIFJGRAogCSAqIHByb2Nlc3NpbmcgdGltZSBoYXMgZXhwaXJlZCwgYXNzZXJ0IEludGVycnVwdCBSZXF1ZXN0ZWQgdG8gbWFrZQogCSAqIHN1cmUgd2UgY29tZSBiYWNrIHRvIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBSRkRzLgogCSAqLwpAQCAtMTg4Niw3ICsxODg2LDcgQEAKIAkvKiBSZXF1ZXN0IFR4Q29tcGxldGUgaW50ZXJydXB0cyBhdCBhbiBpbnRlcnZhbCBkZWZpbmVkCiAJICogYnkgdGhlIGNvbnN0YW50IElQR19GUkFNRVNCRVRXRUVOVFhDT01QTEVURVMuCiAJICogUmVxdWVzdCBUeENvbXBsZXRlIGludGVycnVwdCBmb3IgZXZlcnkgZnJhbWUKLQkgKiBpZiBpbiAxME1icHMgbW9kZSB0byBhY2NvbW9kYXRlIHByb2JsZW0gd2l0aCAxME1icHMKKwkgKiBpZiBpbiAxME1icHMgbW9kZSB0byBhY2NvbW1vZGF0ZSBwcm9ibGVtIHdpdGggMTBNYnBzCiAJICogcHJvY2Vzc2luZy4KIAkgKi8KIAlpZiAoc3AtPnRlbm1icHNtb2RlKQpAQCAtMjA5OCw3ICsyMDk4LDcgQEAKIAlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKIAotCS8qIEZ1bmN0aW9uIHRvIGFjY29tb2RhdGUgY2hhbmdlcyB0byBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKwkvKiBGdW5jdGlvbiB0byBhY2NvbW1vZGF0ZSBjaGFuZ2VzIHRvIE1heGltdW0gVHJhbnNmZXIgVW5pdAogCSAqIChvciBNVFUpIG9mIElQRyBOSUMuIENhbm5vdCB1c2UgZGVmYXVsdCBmdW5jdGlvbiBzaW5jZQogCSAqIHRoZSBkZWZhdWx0IHdpbGwgbm90IGFsbG93IGZvciBNVFUgPiAxNTAwIGJ5dGVzLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCmluZGV4IDkyNjMxZWIuLjg3MjE4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKQEAgLTc2LDcgKzc2LDcgQEAKIHN0YXRpYyBpbnQgIGFsaV9pcmNjX2luaXRfNDMoYWxpX2NoaXBfdCAqY2hpcCwgY2hpcGlvX3QgKmluZm8pOwogc3RhdGljIGludCAgYWxpX2lyY2NfaW5pdF81MyhhbGlfY2hpcF90ICpjaGlwLCBjaGlwaW9fdCAqaW5mbyk7CiAKLS8qIFRoZXNlIGFyZSB0aGUgY3VycmVudGx5IGtub3duIEFMaSBzb3VydGgtYnJpZGdlIGNoaXBzZXRzLCB0aGUgb25seSBvbmUgZGlmZmVyZW5jZQorLyogVGhlc2UgYXJlIHRoZSBjdXJyZW50bHkga25vd24gQUxpIHNvdXRoLWJyaWRnZSBjaGlwc2V0cywgdGhlIG9ubHkgb25lIGRpZmZlcmVuY2UKICAqIGlzIHRoYXQgTTE1NDNDIGRvZXNuJ3Qgc3VwcG9ydCBIUCBIRFNMLTM2MDAKICAqLwogc3RhdGljIGFsaV9jaGlwX3QgY2hpcHNbXSA9CkBAIC0xMTA4LDcgKzExMDgsNyBAQAogCW91dGIobGNyLAkJICBpb2Jhc2UrVUFSVF9MQ1IpOyAvKiBTZXQgOE4xCSovCiAJb3V0YihmY3IsCQkgIGlvYmFzZStVQVJUX0ZDUik7IC8qIEVuYWJsZSBGSUZPJ3MgKi8KIAotCS8qIHdpdGhvdXQgdGhpcywgdGhlIGNvbmVjdGlvbiB3aWxsIGJlIGJyb2tlbiBhZnRlciBjb21lIGJhY2sgZnJvbSBGSVIgc3BlZWQsCisJLyogd2l0aG91dCB0aGlzLCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIGJyb2tlbiBhZnRlciBjb21lIGJhY2sgZnJvbSBGSVIgc3BlZWQsCiAJICAgYnV0IHdpdGggdGhpcywgdGhlIFNJUiBjb25uZWN0aW9uIGlzIGhhcmRlciB0byBlc3RhYmxpc2hlZCAqLwogCW91dGIoKFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIpLCBpb2Jhc2UrVUFSVF9NQ1IpOwogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IGY4MWQ5NDQuLjE3NGNhZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTU2LDcgKzU2LDcgQEAKIC8qIGRvX3Byb2JlIG1vZHVsZSBwYXJhbWV0ZXIgRW5hYmxlIHRoaXMgY29kZSAqLwogLyogUHJvYmUgY29kZSBpcyB2ZXJ5IHVzZWZ1bCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGhhcmR3YXJlIHdvcmtzICovCiAvKiBVc2UgaXQgd2l0aCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBUVF9MRU4sIFJYX0xFTiAqLwotLyogU3Ryb25nbHkgcmVjb21lbmRlZCwgZGlzYWJsZSBpZiB0aGUgcHJvYmUgZmFpbHMgb24geW91ciBtYWNoaW5lICovCisvKiBTdHJvbmdseSByZWNvbW1lbmRlZCwgZGlzYWJsZSBpZiB0aGUgcHJvYmUgZmFpbHMgb24geW91ciBtYWNoaW5lICovCiAvKiBhbmQgc2VuZCBtZSA8amFtZXNAZmlzaHNvdXAuZGhzLm9yZz4gdGhlIG91dHB1dCBvZiBkbWVzZyAqLwogI2RlZmluZSBVU0VfUFJPQkUgMQogI3VuZGVmICBVU0VfUFJPQkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaCBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaAppbmRleCA3N2ZjZjQ0Li5kOTJkNTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5oCkBAIC01MSw3ICs1MSw3IEBACiAKIC8qIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGNoaXAgaXMgYWxsZWdlZGx5IHJlbGVhc2VkICAgICAgICAgKi8KIC8qIEhvd2V2ZXIgSSBoYXZlIG5vdCBzZWVuIGl0LCBub3QgaGF2ZSBJIG1hbmFnZWQgdG8gY29udGFjdCAgICAgKi8KLS8qIGFueW9uZSB3aG8gaGFzLiBIT1dFVkVSIHRoZSBjaGlwIGJlYXJzIGEgc3RyaWtpbmcgcmVzZW1ibGVuY2UgKi8KKy8qIGFueW9uZSB3aG8gaGFzLiBIT1dFVkVSIHRoZSBjaGlwIGJlYXJzIGEgc3RyaWtpbmcgcmVzZW1ibGFuY2UgKi8KIC8qIHRvIHRoZSBJckRBIGNvbnRyb2xsZXIgaW4gdGhlIFRvc2hpYmEgUklTQyBUTVBSMzkyMiBjaGlwICAgICAgKi8KIC8qIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGlzIGZyZWVseSBhdmFpbGFibGUgYXQgICAgICAgICAgICAgKi8KIC8qIGh0dHA6Ly93d3cubWFkaW5nbGV5Lm9yZy9qYW1lcy9yZXNvdXJjZXMvdG9zaG9ib2UvVE1QUjM5MjIucGRmICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2dpcmJpbC1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLXNpci5jCmluZGV4IGEzMWI4ZmEuLjk2Y2RlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLXNpci5jCkBAIC0zOCw3ICszOCw3IEBACiAvKiBDb250cm9sIHJlZ2lzdGVyIDEgKi8KICNkZWZpbmUgR0lSQklMX1RYRU4gICAgMHgwMSAvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi8KICNkZWZpbmUgR0lSQklMX1JYRU4gICAgMHgwMiAvKiBFbmFibGUgcmVjZWl2ZXIgKi8KLSNkZWZpbmUgR0lSQklMX0VDQU4gICAgMHgwNCAvKiBDYW5jZWwgc2VsZiBlbW1pdGVkIGRhdGEgKi8KKyNkZWZpbmUgR0lSQklMX0VDQU4gICAgMHgwNCAvKiBDYW5jZWwgc2VsZiBlbWl0dGVkIGRhdGEgKi8KICNkZWZpbmUgR0lSQklMX0VDSE8gICAgMHgwOCAvKiBFY2hvIGNvbnRyb2wgY2hhcmFjdGVycyAqLwogCiAvKiBMRUQgQ3VycmVudCBSZWdpc3RlciAoMHgyKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IGU0ZWE2MTkuLmQ5MjY3Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCS8qIHVyYiBpcyBub3cgYXZhaWxhYmxlICovCiAJLy91cmItPnN0YXR1cyA9IDA7IC0+IHRlc3RlZCBhYm92ZQogCi0JLyogTmV3IHNwZWVkIGFuZCB4Ym9mIGlzIG5vdyBjb21taXRlZCBpbiBoYXJkd2FyZSAqLworCS8qIE5ldyBzcGVlZCBhbmQgeGJvZiBpcyBub3cgY29tbWl0dGVkIGluIGhhcmR3YXJlICovCiAJc2VsZi0+bmV3X3NwZWVkID0gLTE7CiAJc2VsZi0+bmV3X3hib2ZzID0gLTE7CiAKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgQ2hhbmdpbmcgc3BlZWQgbm93Li4uXG4iLCBfX2Z1bmNfXyk7CiAJCQlpcmRhX3VzYl9jaGFuZ2Vfc3BlZWRfeGJvZnMoc2VsZik7CiAJCX0gZWxzZSB7Ci0JCQkvKiBOZXcgc3BlZWQgYW5kIHhib2YgaXMgbm93IGNvbW1pdGVkIGluIGhhcmR3YXJlICovCisJCQkvKiBOZXcgc3BlZWQgYW5kIHhib2YgaXMgbm93IGNvbW1pdHRlZCBpbiBoYXJkd2FyZSAqLwogCQkJc2VsZi0+bmV3X3NwZWVkID0gLTE7CiAJCQlzZWxmLT5uZXdfeGJvZnMgPSAtMTsKIAkJCS8qIERvbmUsIHdhaXRpbmcgZm9yIG5leHQgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCmluZGV4IGNjODIxZGUuLmJlNTJiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC01ODgsNyArNTg4LDcgQEAKIAogCW1jc19nZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCAmcnZhbCk7CiAKLQkvKiBNSU5SWFBXIHZhbHVlcyByZWNvbWVuZGVkIGJ5IE1vc0NoaXAgKi8KKwkvKiBNSU5SWFBXIHZhbHVlcyByZWNvbW1lbmRlZCBieSBNb3NDaGlwICovCiAJaWYgKG1jcy0+bmV3X3NwZWVkIDw9IDExNTIwMCkgewogCQlydmFsICY9IH5NQ1NfRklSOwogCkBAIC03OTksNyArNzk5LDcgQEAKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogfQogCi0vKiBUcmFuc21pdCBjYWxsYmFjayBmdW50aW9uLiAgKi8KKy8qIFRyYW5zbWl0IGNhbGxiYWNrIGZ1bmN0aW9uLiAgKi8KIHN0YXRpYyB2b2lkIG1jc19zZW5kX2lycShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IG1jc19jYiAqbWNzID0gdXJiLT5jb250ZXh0OwpAQCAtODExLDcgKzgxMSw3IEBACiAJCW5ldGlmX3dha2VfcXVldWUobmRldik7CiB9CiAKLS8qIFRyYW5zbWl0IGNhbGxiYWNrIGZ1bnRpb24uICAqLworLyogVHJhbnNtaXQgY2FsbGJhY2sgZnVuY3Rpb24uICAqLwogc3RhdGljIG5ldGRldl90eF90IG1jc19oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKaW5kZXggNTU5ZmU4NS4uN2E5NjNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwpAQCAtNzE2LDcgKzcxNiw3IEBACiAJaW50IHJlZywgY29tID0gMDsKIAlpbnQgcG5wOwogCi0JLyogUmVhZCBmdW50aW9uIGVuYWJsZSByZWdpc3RlciAoRkVSKSAqLworCS8qIFJlYWQgZnVuY3Rpb24gZW5hYmxlIHJlZ2lzdGVyIChGRVIpICovCiAJb3V0YihDRkdfMzM4X0ZFUiwgY2ZnX2Jhc2UpOwogCXJlZyA9IGluYihjZmdfYmFzZSsxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oCmluZGV4IDdiYTc3MzguLjMyZmE1ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmgKQEAgLTEzNSw3ICsxMzUsNyBAQAogI2RlZmluZSBMU1JfVFhSRFkgICAgICAgMHgyMCAvKiBUcmFuc21pdHRlciByZWFkeSAqLwogI2RlZmluZSBMU1JfVFhFTVAgICAgICAgMHg0MCAvKiBUcmFuc21pdHRlciBlbXB0eSAqLwogCi0jZGVmaW5lIEFTQ1IgICAgICAgICAgICAweDA3IC8qIEF1eGlsbGFyeSBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVNDUiAgICAgICAgICAgIDB4MDcgLyogQXV4aWxpYXJ5IFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBBU0NSX1JYRl9UT1VUICAgMHgwMSAvKiBSeCBGSUZPIHRpbWVvdXQgKi8KICNkZWZpbmUgQVNDUl9GRU5EX0lORiAgIDB4MDIgLyogRnJhbWUgZW5kIGJ5dGVzIGluIHJ4IEZJRk8gKi8KICNkZWZpbmUgQVNDUl9TX0VPVCAgICAgIDB4MDQgLyogU2V0IGVuZCBvZiB0cmFuc21pc3Npb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKaW5kZXggYzE5MmMzMS4uMDAxZWQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAogI2RlZmluZSBJQ0NSMF9BTUUJKDEgPDwgNykJLyogQWRkcmVzcyBtYXRjaCBlbmFibGUgKi8KICNkZWZpbmUgSUNDUjBfVElFCSgxIDw8IDYpCS8qIFRyYW5zbWl0IEZJRk8gaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBJQ0NSMF9SSUUJKDEgPDwgNSkJLyogUmVjaWV2ZSBGSUZPIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSUNDUjBfUklFCSgxIDw8IDUpCS8qIFJlY2VpdmUgRklGTyBpbnRlcnJ1cHQgZW5hYmxlICovCiAjZGVmaW5lIElDQ1IwX1JYRQkoMSA8PCA0KQkvKiBSZWNlaXZlIGVuYWJsZSAqLwogI2RlZmluZSBJQ0NSMF9UWEUJKDEgPDwgMykJLyogVHJhbnNtaXQgZW5hYmxlICovCiAjZGVmaW5lIElDQ1IwX1RVUwkoMSA8PCAyKQkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuIHNlbGVjdCAqLwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJfQogCiAJaWYgKGljc3IwICYgSUNTUjBfRUlGKSB7Ci0JCS8qIEFuIGVycm9yIGluIEZJRk8gb2NjdXJlZCwgb3IgdGhlcmUgaXMgYSBlbmQgb2YgZnJhbWUgKi8KKwkJLyogQW4gZXJyb3IgaW4gRklGTyBvY2N1cnJlZCwgb3IgdGhlcmUgaXMgYSBlbmQgb2YgZnJhbWUgKi8KIAkJcHhhX2lyZGFfZmlyX2lycV9laWYoc2ksIGRldiwgaWNzcjApOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCAxYzE2NzdjLi44ODAwZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMTU4Miw3ICsxNTgyLDcgQEAKIAlpbnQgaW9iYXNlOwogCWludCBpaXIsIGxzcjsKIAotCS8qIEFscmVhZHkgbG9ja2VkIGNvbW1pbmcgaGVyZSBpbiBzbXNjX2lyY2NfaW50ZXJydXB0KCkgKi8KKwkvKiBBbHJlYWR5IGxvY2tlZCBjb21pbmcgaGVyZSBpbiBzbXNjX2lyY2NfaW50ZXJydXB0KCkgKi8KIAkvKnNwaW5fbG9jaygmc2VsZi0+bG9jayk7Ki8KIAogCWlvYmFzZSA9IHNlbGYtPmlvLnNpcl9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCmluZGV4IDE4NmNkMjguLmY1MDRiMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogMjAwNC0wMi0xNjogPHNkYUBiZGl0LmRlPgogLSBSZW1vdmVkIHVubmVlZGVkICdsZWdhY3knIHBjaSBzdHVmZi4KLS0gTWFrZSBzdXJlIFNJUiBtb2RlIGlzIHNldCAoaHdfaW5pdCgpKSBiZWZvcmUgY2FsbGluZyBtb2RlLWRlcGVuZGFudCBzdHVmZi4KKy0gTWFrZSBzdXJlIFNJUiBtb2RlIGlzIHNldCAoaHdfaW5pdCgpKSBiZWZvcmUgY2FsbGluZyBtb2RlLWRlcGVuZGVudCBzdHVmZi4KIC0gT24gc3BlZWQgY2hhbmdlIGZyb20gY29yZSwgZG9uJ3Qgc2VuZCBTSVIgZnJhbWUgd2l0aCBuZXcgc3BlZWQuIAogICBVc2UgY3VycmVudCBzcGVlZCBhbmQgY2hhbmdlIHNwZWVkcyBsYXRlci4KIC0gTWFrZSBtb2R1bGUtcGFyYW0gZG9uZ2xlX2lkIGFjdHVhbGx5IHdvcmsuCkBAIC0zMzQsNyArMzM0LDcgQEAKIAlzZWxmLT5pby5kb25nbGVfaWQgPSBkb25nbGVfaWQ7CiAKIAkvKiBUaGUgb25seSB2YWx1ZSB3ZSBtdXN0IG92ZXJyaWRlIGl0IHRoZSBiYXVkcmF0ZSAqLwotCS8qIE1heGltdW0gc3BlZWRzIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGRvbmdsZS1kZXBlbmRhbnQuICovCisJLyogTWF4aW11bSBzcGVlZHMgYW5kIGNhcGFiaWxpdGllcyBhcmUgZG9uZ2xlLWRlcGVuZGVudC4gKi8KIAlzd2l0Y2goIHNlbGYtPmlvLmRvbmdsZV9pZCApewogCWNhc2UgMHgwZDoKIAkJc2VsZi0+cW9zLmJhdWRfcmF0ZS5iaXRzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmgKaW5kZXggZDY2ZmFiOC4uYTA3NmViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmgKQEAgLTIwOSw3ICsyMDksNyBAQAogCUlSSU5UUl9BQ1RFTgk9IDB4ODAsCS8qIGFjdGl2aXR5IGludGVycnVwdCBlbmFibGUgKi8KIAlJUklOVFJfQUNUSVZJVFkJPSAweDQwLAkvKiBhY3Rpdml0eSBtb25pdG9yICh0cmFmZmljIGRldGVjdGVkKSAqLwogCUlSSU5UUl9SUEtURU4JPSAweDIwLAkvKiByZWNlaXZlIHBhY2tldCBpbnRlcnJ1cHQgZW5hYmxlKi8KLQlJUklOVFJfUlBLVElOVAk9IDB4MTAsCS8qIHJ4LXBhY2tldCB0cmFuc2ZlcmVkIGZyb20gZmlmbyB0byBtZW1vcnkgZmluaXNoZWQgKi8KKwlJUklOVFJfUlBLVElOVAk9IDB4MTAsCS8qIHJ4LXBhY2tldCB0cmFuc2ZlcnJlZCBmcm9tIGZpZm8gdG8gbWVtb3J5IGZpbmlzaGVkICovCiAJSVJJTlRSX1RQS1RFTgk9IDB4MDgsCS8qIHRyYW5zbWl0IHBhY2tldCBpbnRlcnJ1cHQgZW5hYmxlICovCiAJSVJJTlRSX1RQS1RJTlQJPSAweDA0LAkvKiBsYXN0IGJpdCBvZiB0eC1wYWNrZXQrY3JjIHNoaWZ0ZWQgdG8gaXItcHVsc2VyICovCiAJSVJJTlRSX09FX0VOCT0gMHgwMiwJLyogVUFSVCByeCBmaWZvIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGVuYWJsZSAqLwpAQCAtNzM5LDcgKzczOSw3IEBACiAvKiB0aGUgcmVtYXBwZWQgZXJyb3IgZmxhZ3Mgd2UgdXNlIGZvciByZXR1cm5pbmcgZnJvbSBmcmFtZQogICogcG9zdC1wcm9jZXNzaW5nIGluIHZsc2lfcHJvY2Vzc190eC9yeCgpIGFmdGVyIGl0IHdhcyBjb21wbGV0ZWQKICAqIGJ5IHRoZSBoYXJkd2FyZS4gVGhlc2UgZnVuY3Rpb25zIGVpdGhlciByZXR1cm4gdGhlID49MCBudW1iZXIKLSAqIG9mIHRyYW5zZmVyZWQgYnl0ZXMgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIHRoZSBuZWdhdGl2ZSAoLSkKKyAqIG9mIHRyYW5zZmVycmVkIGJ5dGVzIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciB0aGUgbmVnYXRpdmUgKC0pCiAgKiBvZiB0aGUgb3InZWQgZXJyb3IgZmxhZ3MuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwppbmRleCA0MWM1MjlmLi42ODZhMTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwpAQCAtMzYsNyArMzYsNyBAQAogLyoqCiAgKiBpeGdiZV9pZWVlX2NyZWRpdHMgLSBUaGlzIGNhbGN1bGF0ZXMgdGhlIGllZWUgdHJhZmZpYyBjbGFzcwogICogY3JlZGl0cyBmcm9tIHRoZSBjb25maWd1cmVkIGJhbmR3aWR0aCBwZXJjZW50YWdlcy4gQ3JlZGl0cwotICogYXJlIHRoZSBzbWFsbGVzdCB1bml0IHByb2dyYW1hYmxlIGludG8gdGhlIHVuZGVybHlpbmcKKyAqIGFyZSB0aGUgc21hbGxlc3QgdW5pdCBwcm9ncmFtbWFibGUgaW50byB0aGUgdW5kZXJseWluZwogICogaGFyZHdhcmUuIFRoZSBJRUVFIDgwMi4xUWF6IHNwZWNpZmljYXRpb24gZG8gbm90IHVzZSBiYW5kd2lkdGgKICAqIGdyb3VwcyBzbyB0aGlzIGlzIG11Y2ggc2ltcGxpZmllZCBmcm9tIHRoZSBDRUUgY2FzZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCBmZWM0YzcyLi4zMjdjODYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCXJldHVybiBEQ0JfTk9fSFdfQ0hHOwogCiAJLyoKLQkgKiBPbmx5IHRha2UgZG93biB0aGUgYWRhcHRlciBpZiBhbiBhcHAgY2hhbmdlIG9jY3VyZWQuIEZDb0UKKwkgKiBPbmx5IHRha2UgZG93biB0aGUgYWRhcHRlciBpZiBhbiBhcHAgY2hhbmdlIG9jY3VycmVkLiBGQ29FCiAJICogbWF5IHNodWZmbGUgdHggcmluZ3MgaW4gdGhpcyBjYXNlIGFuZCB0aGlzIGNhbiBub3QgYmUgZG9uZQogCSAqIHdpdGhvdXQgYSByZXNldCBjdXJyZW50bHkuCiAJICovCkBAIC01OTksNyArNTk5LDcgQEAKIAkJCQlicmVhazsKIAogCQkJLyogVGhlIEZDb0UgYXBwbGljYXRpb24gcHJpb3JpdHkgbWF5IGJlIGNoYW5nZWQgbXVsdGlwbGUKLQkJCSAqIHRpbWVzIGluIHF1aWNrIHN1Y2Vzc2lvbiB3aXRoIHN3aXRjaGVzIHRoYXQgYnVpbGQgdXAKKwkJCSAqIHRpbWVzIGluIHF1aWNrIHN1Y2Nlc3Npb24gd2l0aCBzd2l0Y2hlcyB0aGF0IGJ1aWxkIHVwCiAJCQkgKiBUTFZzLiBUbyBhdm9pZCBjcmVhdGluZyB1bmVlZGVkIGRldmljZSByZXNldHMgdGhpcwogCQkJICogY2hlY2tzIHRoZSBhY3R1YWwgSFcgY29uZmlndXJhdGlvbiBhbmQgY2xlYXJzCiAJCQkgKiBCSVRfQVBQX1VQQ0hHIGlmIGEgSFcgY29uZmlndXJhdGlvbiBjaGFuZ2UgaXMgbm90CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggZjE3ZTRhNy4uNmY4YWRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAgKiBAYWRhcHRlcjogZHJpdmVyIHByaXZhdGUgc3RydWN0CiAgKiBAaW5kZXg6IHJlZyBpZHggb2YgcXVldWUgdG8gcXVlcnkgKDAtMTI3KQogICoKLSAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHRyYWZmaWMgaW5kZXggZm9yIGEgcGF0aWN1bGFyCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSB0cmFmZmljIGluZGV4IGZvciBhIHBhcnRpY3VsYXIKICAqIHJlZ2lzdGVyIGluZGV4LgogICoKICAqIFJldHVybnMgOiBhIHRjIGluZGV4IGZvciB1c2UgaW4gcmFuZ2UgMC03LCBvciAwLTMKQEAgLTM1NTYsNyArMzU1Niw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogV3JpdGUgYWRkcmVzc2VzIHRvIHRoZSBNVEEsIGlmIHRoZSBhdHRlbXB0IGZhaWxzCi0JCQkgKiB0aGVuIHdlIHNob3VsZCBqdXN0IHR1cm4gb24gcHJvbWlzY291cyBtb2RlIHNvCisJCQkgKiB0aGVuIHdlIHNob3VsZCBqdXN0IHR1cm4gb24gcHJvbWlzY3VvdXMgbW9kZSBzbwogCQkJICogdGhhdCB3ZSBjYW4gYXQgbGVhc3QgcmVjZWl2ZSBtdWx0aWNhc3QgdHJhZmZpYwogCQkJICovCiAJCQlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBuZXRkZXYpOwpAQCAtMzU2Nyw3ICszNTY3LDcgQEAKIAkJLyoKIAkJICogV3JpdGUgYWRkcmVzc2VzIHRvIGF2YWlsYWJsZSBSQVIgcmVnaXN0ZXJzLCBpZiB0aGVyZSBpcyBub3QKIAkJICogc3VmZmljaWVudCBzcGFjZSB0byBzdG9yZSBhbGwgdGhlIGFkZHJlc3NlcyB0aGVuIGVuYWJsZQotCQkgKiB1bmljYXN0IHByb21pc2NvdXMgbW9kZQorCQkgKiB1bmljYXN0IHByb21pc2N1b3VzIG1vZGUKIAkJICovCiAJCWNvdW50ID0gaXhnYmVfd3JpdGVfdWNfYWRkcl9saXN0KG5ldGRldik7CiAJCWlmIChjb3VudCA8IDApIHsKQEAgLTQ0NDMsNyArNDQ0Myw3IEBACiB9CiAKIC8qCi0gKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CisgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kZW50CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKICAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBxdWV1ZSBhbGxvY2F0aW9uIHJvdXRpbmUuICBUaGUgb3JkZXIgaGVyZSBpcyB2ZXJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCmluZGV4IGY3MmY3MDUuLmRmNWI4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogfQogCiAvKioKLSAqICBpeGdiZV90bl9jaGVja19vdmVydGVtcCAtIENoZWNrcyBpZiBhbiBvdmVydGVtcCBvY2N1cmVkLgorICogIGl4Z2JlX3RuX2NoZWNrX292ZXJ0ZW1wIC0gQ2hlY2tzIGlmIGFuIG92ZXJ0ZW1wIG9jY3VycmVkLgogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCiAgKiAgQ2hlY2tzIGlmIHRoZSBMQVNJIHRlbXAgYWxhcm0gc3RhdHVzIHdhcyB0cmlnZ2VyZWQgZHVlIHRvIG92ZXJ0ZW1wCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKaW5kZXggZjQ3ZTkzZi4uZDkzMjNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYwpAQCAtNTczLDcgKzU3Myw3IEBACiAgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiBAbWFzazogTWFzayB0byBzcGVjaWZ5IHdoaWNoIHNlbWFwaG9yZSB0byByZWxlYXNlCiAgKgotICogUmVsZWFzZXMgdGhlIFNXRlcgc2VtYXBob3JlIHRocm91Z2h0IHRoZSBTV19GV19TWU5DIHJlZ2lzdGVyCisgKiBSZWxlYXNlcyB0aGUgU1dGVyBzZW1hcGhvcmUgdGhyb3VnaCB0aGUgU1dfRldfU1lOQyByZWdpc3RlcgogICogZm9yIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gKENTUiwgUEhZMCwgUEhZMSwgRVZNLCBGbGFzaCkKICAqKi8KIHN0YXRpYyB2b2lkIGl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1hc2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYwppbmRleCAwNTRhYjA1Li4wNWZhN2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTE5MjUsNyArMTkyNSw3IEBACiB9CiAKIC8qCi0gKiBpeGdiZXZmX3NldF9udW1fcXVldWVzOiBBbGxvY2F0ZSBxdWV1ZXMgZm9yIGRldmljZSwgZmVhdHVyZSBkZXBlbmRhbnQKKyAqIGl4Z2JldmZfc2V0X251bV9xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgZGV2aWNlLCBmZWF0dXJlIGRlcGVuZGVudAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCiAgKiBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgcXVldWUgYWxsb2NhdGlvbiByb3V0aW5lLiAgVGhlIG9yZGVyIGhlcmUgaXMgdmVyeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODQyLmMgYi9kcml2ZXJzL25ldC9rczg4NDIuYwppbmRleCBlZmQ0NGFmLi5mMGQ4MzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NDIuYworKysgYi9kcml2ZXJzL25ldC9rczg4NDIuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJLyogUlggMiBrYiBoaWdoIHdhdGVybWFyayAqLwogCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDAsIDB4MTAwMCwgUkVHX1FSRkNSKTsKIAotCS8qIGFnZ3Jlc2l2ZSBiYWNrIG9mZiBpbiBoYWxmIGR1cGxleCAqLworCS8qIGFnZ3Jlc3NpdmUgYmFjayBvZmYgaW4gaGFsZiBkdXBsZXggKi8KIAlrczg4NDJfZW5hYmxlX2JpdHMoYWRhcHRlciwgMzIsIDEgPDwgOCwgUkVHX1NHQ1IxKTsKIAogCS8qIGVuYWJsZSBubyBleGNlc3NpdmUgY29sbGlzb24gZHJvcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxLmMgYi9kcml2ZXJzL25ldC9rczg4NTEuYwppbmRleCAwZmE0YTk4Li5iY2Q5YmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTEuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTEuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgKgogICogQWxsIHRoZXNlIGNhbGxzIGlzc3VlIFNQSSB0cmFuc2FjdGlvbnMgdG8gYWNjZXNzIHRoZSBjaGlwJ3MgcmVnaXN0ZXJzLiBUaGV5CiAgKiBhbGwgcmVxdWlyZSB0aGF0IHRoZSBuZWNlc3NhcnkgbG9jayBpcyBoZWxkIHRvIHByZXZlbnQgYWNjZXNzZXMgd2hlbiB0aGUKLSAqIGNoaXAgaXMgYnVzeSB0cmFuc2ZlcmluZyBwYWNrZXQgZGF0YSAoUlgvVFggRklGTyBhY2Nlc3NlcykuCisgKiBjaGlwIGlzIGJ1c3kgdHJhbnNmZXJyaW5nIHBhY2tldCBkYXRhIChSWC9UWCBGSUZPIGFjY2Vzc2VzKS4KICAqLwogCiAvKioKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCSAqCiAJICogVGhpcyBmb3JtIG9mIG9wZXJhdGlvbiB3b3VsZCByZXF1aXJlIHVzIHRvIGhvbGQgdGhlIFNQSSBidXMnCiAJICogY2hpcHNlbGVjdCBsb3cgZHVyaW5nIHRoZSBlbnRpZSB0cmFuc2FjdGlvbiB0byBhdm9pZCBhbnkKLQkgKiByZXNldCB0byB0aGUgZGF0YSBzdHJlYW0gY29tbWluZyBmcm9tIHRoZSBjaGlwLgorCSAqIHJlc2V0IHRvIHRoZSBkYXRhIHN0cmVhbSBjb21pbmcgZnJvbSB0aGUgY2hpcC4KIAkgKi8KIAogCWZvciAoOyByeGZjICE9IDA7IHJ4ZmMtLSkgewpAQCAtNjM0LDcgKzYzNCw3IEBACiAKIC8qKgogICogY2FsY190eGxlbiAtIGNhbGN1bGF0ZSBzaXplIG9mIG1lc3NhZ2UgdG8gc2VuZCBwYWNrZXQKLSAqIEBsZW46IExlbmdodCBvZiBkYXRhCisgKiBAbGVuOiBMZW5ndGggb2YgZGF0YQogICoKICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIFRYRklGTyBtZXNzYWdlIG5lZWRlZCB0byBzZW5kCiAgKiB0aGlzIHBhY2tldC4KQEAgLTE0NzIsNyArMTQ3Miw3IEBACiAgKiBAcmVnOiBUaGUgcmVnaXN0ZXIgdG8gcmVhZC4KICAqCiAgKiBUaGlzIGNhbGwgcmVhZHMgZGF0YSBmcm9tIHRoZSBQSFkgcmVnaXN0ZXIgc3BlY2lmaWVkIGluIEByZWcuIFNpbmNlIHRoZQotICogZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgYWxsIHRoZSBNSUkgcmVnaXN0ZXJzLCB0aGUgbm9uLWV4aXN0YW50IHZhbHVlcworICogZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgYWxsIHRoZSBNSUkgcmVnaXN0ZXJzLCB0aGUgbm9uLWV4aXN0ZW50IHZhbHVlcwogICogYXJlIGFsd2F5cyByZXR1cm5lZCBhcyB6ZXJvLgogICoKICAqIFdlIHJldHVybiB6ZXJvIGZvciB1bnN1cHBvcnRlZCByZWdpc3RlcnMgYXMgdGhlIE1JSSBjb2RlIGRvZXMgbm90IGNoZWNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKaW5kZXggMmUyYzY5Yi4uNjE2MzFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAgKgogICogQWxsIHRoZXNlIGNhbGxzIGlzc3VlIHRyYW5zYWN0aW9ucyB0byBhY2Nlc3MgdGhlIGNoaXAncyByZWdpc3RlcnMuIFRoZXkKICAqIGFsbCByZXF1aXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBsb2NrIGlzIGhlbGQgdG8gcHJldmVudCBhY2Nlc3NlcyB3aGVuIHRoZQotICogY2hpcCBpcyBidXN5IHRyYW5zZmVyaW5nIHBhY2tldCBkYXRhIChSWC9UWCBGSUZPIGFjY2Vzc2VzKS4KKyAqIGNoaXAgaXMgYnVzeSB0cmFuc2ZlcnJpbmcgcGFja2V0IGRhdGEgKFJYL1RYIEZJRk8gYWNjZXNzZXMpLgogICovCiAKIC8qKgpAQCAtMTM2NCw3ICsxMzY0LDcgQEAKICAqIEByZWc6IFRoZSByZWdpc3RlciB0byByZWFkLgogICoKICAqIFRoaXMgY2FsbCByZWFkcyBkYXRhIGZyb20gdGhlIFBIWSByZWdpc3RlciBzcGVjaWZpZWQgaW4gQHJlZy4gU2luY2UgdGhlCi0gKiBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBhbGwgdGhlIE1JSSByZWdpc3RlcnMsIHRoZSBub24tZXhpc3RhbnQgdmFsdWVzCisgKiBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBhbGwgdGhlIE1JSSByZWdpc3RlcnMsIHRoZSBub24tZXhpc3RlbnQgdmFsdWVzCiAgKiBhcmUgYWx3YXlzIHJldHVybmVkIGFzIHplcm8uCiAgKgogICogV2UgcmV0dXJuIHplcm8gZm9yIHVuc3VwcG9ydGVkIHJlZ2lzdGVycyBhcyB0aGUgTUlJIGNvZGUgZG9lcyBub3QgY2hlY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xpYjgzOTAuYyBiL2RyaXZlcnMvbmV0L2xpYjgzOTAuYwppbmRleCBkYTc0ZGI0Li4xN2I3NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9saWI4MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvbGliODM5MC5jCkBAIC0zNSw3ICszNSw3IEBACiAgIEFsZXhleSBLdXpuZXRzb3YJOiB1c2UgdGhlIDgzOTAncyBzaXggYml0IGhhc2ggbXVsdGljYXN0IGZpbHRlci4KICAgUGF1bCBHb3J0bWFrZXIJOiB0d2VhayBBTksncyBhYm92ZSBtdWx0aWNhc3QgY2hhbmdlcyBhIGJpdC4KICAgUGF1bCBHb3J0bWFrZXIJOiB1cGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgZm9yIHYyLjEueAotICBBbGFuIENveAkJOiBzdXBwb3J0IGFyYml0YXJ5IHN0dXBpZCBwb3J0IG1hcHBpbmdzIG9uIHRoZQorICBBbGFuIENveAkJOiBzdXBwb3J0IGFyYml0cmFyeSBzdHVwaWQgcG9ydCBtYXBwaW5ncyBvbiB0aGUKICAgCQkJICA2OEsgTWFjaW50b3NoLiBTdXBwb3J0ID4xNmJpdCBJL08gc3BhY2VzCiAgIFBhdWwgR29ydG1ha2VyCTogYWRkIGttb2Qgc3VwcG9ydCBmb3IgYXV0by1sb2FkaW5nIG9mIHRoZSA4MzkwCiAJCQkgIG1vZHVsZSBieSBhbGwgZHJpdmVycyB0aGF0IHJlcXVpcmUgaXQuCkBAIC0xMjEsNyArMTIxLDcgQEAKIC8qCiAgKglTTVAgYW5kIHRoZSA4MzkwIHNldHVwLgogICoKLSAqCVRoZSA4MzkwIGlzbnQgZXhhY3RseSBkZXNpZ25lZCB0byBiZSBtdWx0aXRocmVhZGVkIG9uIFJYL1RYLiBUaGVyZSBpcworICoJVGhlIDgzOTAgaXNuJ3QgZXhhY3RseSBkZXNpZ25lZCB0byBiZSBtdWx0aXRocmVhZGVkIG9uIFJYL1RYLiBUaGVyZSBpcwogICoJYSBwYWdlIHJlZ2lzdGVyIHRoYXQgY29udHJvbHMgYmFuayBhbmQgcGFja2V0IGJ1ZmZlciBhY2Nlc3MuIFdlIGd1YXJkCiAgKgl0aGlzIHdpdGggZWlfbG9jYWwtPnBhZ2VfbG9jay4gTm9ib2R5IHNob3VsZCBhc3N1bWUgb3Igc2V0IHRoZSBwYWdlIG90aGVyCiAgKgl0aGFuIHplcm8gd2hlbiB0aGUgbG9jayBpcyBub3QgaGVsZC4gTG9jayBob2xkZXJzIG11c3QgcmVzdG9yZSBwYWdlIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IGVhMGRjNDUuLmQ3MGZiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtMTczLDcgKzE3Myw4IEBACiAJCXwgTkVUSUZfRl9SWENTVU0KIAkJfCBORVRJRl9GX0hJR0hETUEKIAkJfCBORVRJRl9GX0xMVFgKLQkJfCBORVRJRl9GX05FVE5TX0xPQ0FMOworCQl8IE5FVElGX0ZfTkVUTlNfTE9DQUwKKwkJfCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAlkZXYtPmV0aHRvb2xfb3BzCT0gJmxvb3BiYWNrX2V0aHRvb2xfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJPSAmZXRoX2hlYWRlcl9vcHM7CiAJZGV2LT5uZXRkZXZfb3BzCQk9ICZsb29wYmFja19vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9scDQ4NmUuYyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCmluZGV4IDM2OTg4MjQuLjM4NWE5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIAlDcmVkaXRzOgogCVRoYW5rcyB0byBNdXJwaHkgU29mdHdhcmUgQlYgZm9yIGxldHRpbmcgbWUgd3JpdGUgdGhpcyBpbiB0aGVpciB0aW1lLgotCVdlbGwsIGFjdHVhbGx5LCBJIGdldCBwYXllZCBkb2luZyB0aGlzLi4uCisJV2VsbCwgYWN0dWFsbHksIEkgZ2V0IHBhaWQgZG9pbmcgdGhpcy4uLgogCShBbHNvOiBzZWUgaHR0cDovL3d3dy5tdXJwaHkubmwgZm9yIG11cnBoeSwgYW5kIG15IGhvbWVwYWdlIH5hcmQgZm9yCiAJbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUHJvZmVzc2lvbmFsIFdvcmtzdGF0aW9uKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZXRoLmggYi9kcml2ZXJzL25ldC9tZXRoLmgKaW5kZXggYTc4ZGMxYy4uNWIxNDVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWV0aC5oCisrKyBiL2RyaXZlcnMvbmV0L21ldGguaApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCQkJICAgICAgIC8qIEJpdHMgMjIgdGhyb3VnaCAyOCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgSVBHUjIgKi8KIAogI2RlZmluZSBNRVRIX1JFVl9TSElGVCAyOSAgICAgICAvKiBCaXRzIDI5IHRocm91Z2ggMzEgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZXZpc2lvbiAqLwotCQkJCSAgICAgICAvKiAwMDA6IEluaXRhbCByZXZpc2lvbiAqLworCQkJCSAgICAgICAvKiAwMDA6IEluaXRpYWwgcmV2aXNpb24gKi8KIAkJCQkgICAgICAgLyogMDAxOiBGaXJzdCByZXZpc2lvbiwgSW1wcm92ZWQgVFggY29uY2F0ZW5hdGlvbiAqLwogCiAKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkJCQkgICAgICAJLyogMTogQSBUWCBtZXNzYWdlIGhhZCB0aGUgSU5UIHJlcXVlc3QgYml0IHNldCwgdGhlIHBhY2tldCBoYXMgYmVlbiBzZW50LiAqLwogI2RlZmluZSBNRVRIX0lOVF9UWF9MSU5LX0ZBSUwJQklUKDIpCS8qIDA6IE5vIGludGVycnVwdCBwZW5kaW5nLCAxOiBQSFkgaGFzIHJlcG9ydGVkIGEgbGluayBmYWlsdXJlICovCiAjZGVmaW5lIE1FVEhfSU5UX01FTV9FUlJPUglCSVQoMykJLyogMDogTm8gaW50ZXJydXB0IHBlbmRpbmcgKi8KLQkJCQkJCS8qIDE6IEEgbWVtb3J5IGVycm9yIG9jY3VycmVkIGR1cnJpbmcgRE1BLCBETUEgc3RvcHBlZCwgRmF0YWwgKi8KKwkJCQkJCS8qIDE6IEEgbWVtb3J5IGVycm9yIG9jY3VycmVkIGR1cmluZyBETUEsIERNQSBzdG9wcGVkLCBGYXRhbCAqLwogI2RlZmluZSBNRVRIX0lOVF9UWF9BQk9SVAkJQklUKDQpCS8qIDA6IE5vIGludGVycnVwdCBwZW5kaW5nLCAxOiBUaGUgVFggYWJvcnRlZCBvcGVyYXRpb24sIERNQSBzdG9wcGVkLCBGQVRBTCAqLwogI2RlZmluZSBNRVRIX0lOVF9SWF9USFJFU0hPTEQJQklUKDUpCS8qIDA6IE5vIGludGVycnVwdCBwZW5kaW5nLCAxOiBTZWxlY3RlZCByZWNlaXZlIHRocmVzaG9sZCBjb25kaXRpb24gVmFsaWQgKi8KICNkZWZpbmUgTUVUSF9JTlRfUlhfVU5ERVJGTE9XCUJJVCg2KQkvKiAwOiBObyBpbnRlcnJ1cHQgcGVuZGluZywgMTogRklGTyB3YXMgZW1wdHksIHBhY2tldCBjb3VsZCBub3QgYmUgcXVldWVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9taWkuYyBiL2RyaXZlcnMvbmV0L21paS5jCmluZGV4IDBhNmM2YTIuLmQ0ZmMwMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21paS5jCisrKyBiL2RyaXZlcnMvbmV0L21paS5jCkBAIC00OSw2ICs0OSwxMCBAQAogCQlyZXN1bHQgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOwogCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwRlVMTCkKIAkJcmVzdWx0IHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFX1BBVVNFX0NBUCkKKwkJcmVzdWx0IHw9IEFEVkVSVElTRURfUGF1c2U7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKQorCQlyZXN1bHQgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKaW5kZXggOTMxN2I2MS4uOTI3NmIxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJZ290byBlcnJfbXI7CiAJfQogCi0JLyogQ29uZmlndXJlIHdpY2ggcG9ydHMgdG8gc3RhcnQgYWNjb3JkaW5nIHRvIG1vZHVsZSBwYXJhbWV0ZXJzICovCisJLyogQ29uZmlndXJlIHdoaWNoIHBvcnRzIHRvIHN0YXJ0IGFjY29yZGluZyB0byBtb2R1bGUgcGFyYW1ldGVycyAqLwogCW1kZXYtPnBvcnRfY250ID0gMDsKIAltbHg0X2ZvcmVhY2hfcG9ydChpLCBkZXYsIE1MWDRfUE9SVF9UWVBFX0VUSCkKIAkJbWRldi0+cG9ydF9jbnQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCmluZGV4IDRmMTU4YmEuLjc3MDYzZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCQkJCQkJICAgICAgIHByaXYtPnBvcnQpOwogCQkJaWYgKGVycikKIAkJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBlbmFibGluZyAiCi0JCQkJCSAgICAgInByb21pc2NvdXMgbW9kZVxuIik7CisJCQkJCSAgICAgInByb21pc2N1b3VzIG1vZGVcbiIpOwogCiAJCQkvKiBEaXNhYmxlIHBvcnQgbXVsdGljYXN0IGZpbHRlciAodW5jb25kaXRpb25hbGx5KSAqLwogCQkJZXJyID0gbWx4NF9TRVRfTUNBU1RfRkxUUihtZGV2LT5kZXYsIHByaXYtPnBvcnQsIDAsCkBAIC0yNzYsNyArMjc2LDcgQEAKIAl9CiAKIAkvKgotCSAqIE5vdCBpbiBwcm9taXNjb3VzIG1vZGUKKwkgKiBOb3QgaW4gcHJvbWlzY3VvdXMgbW9kZQogCSAqLwogCiAJaWYgKHByaXYtPmZsYWdzICYgTUxYNF9FTl9GTEFHX1BST01JU0MpIHsKQEAgLTI5MiwxNCArMjkyLDE0IEBACiAJCQllcnIgPSBtbHg0X3VuaWNhc3RfcHJvbWlzY19yZW1vdmUobWRldi0+ZGV2LCBwcml2LT5iYXNlX3FwbiwKIAkJCQkJCQkgIHByaXYtPnBvcnQpOwogCQlpZiAoZXJyKQotCQkJZW5fZXJyKHByaXYsICJGYWlsZWQgZGlzYWJsaW5nIHByb21pc2NvdXMgbW9kZVxuIik7CisJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBkaXNhYmxpbmcgcHJvbWlzY3VvdXMgbW9kZVxuIik7CiAKIAkJLyogRGlzYWJsZSBNdWx0aWNhc3QgcHJvbWlzYyAqLwogCQlpZiAocHJpdi0+ZmxhZ3MgJiBNTFg0X0VOX0ZMQUdfTUNfUFJPTUlTQykgewogCQkJZXJyID0gbWx4NF9tdWx0aWNhc3RfcHJvbWlzY19yZW1vdmUobWRldi0+ZGV2LCBwcml2LT5iYXNlX3FwbiwKIAkJCQkJCQkgICAgcHJpdi0+cG9ydCk7CiAJCQlpZiAoZXJyKQotCQkJCWVuX2Vycihwcml2LCAiRmFpbGVkIGRpc2FibGluZyBtdWx0aWNhc3QgcHJvbWlzY291cyBtb2RlXG4iKTsKKwkJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBkaXNhYmxpbmcgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGVcbiIpOwogCQkJcHJpdi0+ZmxhZ3MgJj0gfk1MWDRfRU5fRkxBR19NQ19QUk9NSVNDOwogCQl9CiAKQEAgLTMzMSw3ICszMzEsNyBAQAogCQkJZXJyID0gbWx4NF9tdWx0aWNhc3RfcHJvbWlzY19yZW1vdmUobWRldi0+ZGV2LCBwcml2LT5iYXNlX3FwbiwKIAkJCQkJCQkgICAgcHJpdi0+cG9ydCk7CiAJCQlpZiAoZXJyKQotCQkJCWVuX2Vycihwcml2LCAiRmFpbGVkIGRpc2FibGluZyBtdWx0aWNhc3QgcHJvbWlzY291cyBtb2RlXG4iKTsKKwkJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBkaXNhYmxpbmcgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGVcbiIpOwogCQkJcHJpdi0+ZmxhZ3MgJj0gfk1MWDRfRU5fRkxBR19NQ19QUk9NSVNDOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwppbmRleCAwNTk5OGVlLi42MmRkMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCkBAIC0zNDUsNiArMzQ1LDggQEAKIAkJZXJyID0gbWx4NF9lbl9pbml0X2FsbG9jYXRvcihwcml2LCByaW5nKTsKIAkJaWYgKGVycikgewogCQkJZW5fZXJyKHByaXYsICJGYWlsZWQgaW5pdGlhbGl6aW5nIHJpbmcgYWxsb2NhdG9yXG4iKTsKKwkJCWlmIChyaW5nLT5zdHJpZGUgPD0gVFhCQl9TSVpFKQorCQkJCXJpbmctPmJ1ZiAtPSBUWEJCX1NJWkU7CiAJCQlyaW5nX2luZC0tOwogCQkJZ290byBlcnJfYWxsb2NhdG9yOwogCQl9CkBAIC0zNjksNiArMzcxLDggQEAKIAlyaW5nX2luZCA9IHByaXYtPnJ4X3JpbmdfbnVtIC0gMTsKIGVycl9hbGxvY2F0b3I6CiAJd2hpbGUgKHJpbmdfaW5kID49IDApIHsKKwkJaWYgKHByaXYtPnJ4X3JpbmdbcmluZ19pbmRdLnN0cmlkZSA8PSBUWEJCX1NJWkUpCisJCQlwcml2LT5yeF9yaW5nW3JpbmdfaW5kXS5idWYgLT0gVFhCQl9TSVpFOwogCQltbHg0X2VuX2Rlc3Ryb3lfYWxsb2NhdG9yKHByaXYsICZwcml2LT5yeF9yaW5nW3JpbmdfaW5kXSk7CiAJCXJpbmdfaW5kLS07CiAJfQpAQCAtNzA2LDcgKzcxMCw3IEBACiB9CiAKIAotLyogQ2FsY3VsYXRlIHRoZSBsYXN0IG9mZnNldCBwb3NpdGlvbiB0aGF0IGFjY29tb2RhdGVzIGEgZnVsbCBmcmFnbWVudAorLyogQ2FsY3VsYXRlIHRoZSBsYXN0IG9mZnNldCBwb3NpdGlvbiB0aGF0IGFjY29tbW9kYXRlcyBhIGZ1bGwgZnJhZ21lbnQKICAqIChhc3N1bWluZyBmYWdtZW50IHNpemUgPSBzdHJpZGUtYWxpZ24pICovCiBzdGF0aWMgaW50IG1seDRfZW5fbGFzdF9hbGxvY19vZmZzZXQoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgdTE2IHN0cmlkZSwgdTE2IGFsaWduKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9zZWxmdGVzdC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9zZWxmdGVzdC5jCmluZGV4IDljOTFhOTIuLjE5MWE4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3NlbGZ0ZXN0LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiByZXRyeV90eDoKLQkJLyogV2FpdCB1bnRpbGwgYWxsIHR4IHF1ZXVlcyBhcmUgZW1wdHkuCisJCS8qIFdhaXQgdW50aWwgYWxsIHR4IHF1ZXVlcyBhcmUgZW1wdHkuCiAJCSAqIHRoZXJlIHNob3VsZCBub3QgYmUgYW55IGFkZGl0aW9uYWwgaW5jb21pbmcgdHJhZmZpYwogCQkgKiBzaW5jZSB3ZSB0dXJuZWQgdGhlIGNhcnJpZXIgb2ZmICovCiAJCW1zbGVlcCgyMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl90eC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl90eC5jCmluZGV4IDAxZmViOGYuLmIyMjlhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fdHguYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3R4LmMKQEAgLTYzNiw3ICs2MzYsNyBAQAogCWlmICh1bmxpa2VseSghcmVhbF9zaXplKSkKIAkJZ290byB0eF9kcm9wOwogCi0JLyogQWxsaWduIGRlc2NyaXB0b3IgdG8gVFhCQiBzaXplICovCisJLyogQWxpZ24gZGVzY3JpcHRvciB0byBUWEJCIHNpemUgKi8KIAlkZXNjX3NpemUgPSBBTElHTihyZWFsX3NpemUsIFRYQkJfU0laRSk7CiAJbnJfdHhiYiA9IGRlc2Nfc2l6ZSAvIFRYQkJfU0laRTsKIAlpZiAodW5saWtlbHkobnJfdHhiYiA+IE1BWF9ERVNDX1RYQkJTKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCA2MmZhN2VlLi4zODE0ZmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtOTQ0LDYgKzk0NCwxMCBAQAogCX0KIAogCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKSB7CisJCWVudW0gbWx4NF9wb3J0X3R5cGUgcG9ydF90eXBlID0gMDsKKwkJbWx4NF9TRU5TRV9QT1JUKGRldiwgcG9ydCwgJnBvcnRfdHlwZSk7CisJCWlmIChwb3J0X3R5cGUpCisJCQlkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID0gcG9ydF90eXBlOwogCQlpYl9wb3J0X2RlZmF1bHRfY2FwcyA9IDA7CiAJCWVyciA9IG1seDRfZ2V0X3BvcnRfaWJfY2FwcyhkZXYsIHBvcnQsICZpYl9wb3J0X2RlZmF1bHRfY2Fwcyk7CiAJCWlmIChlcnIpCkBAIC05NTgsNiArOTYyLDcgQEAKIAkJCWdvdG8gZXJyX21jZ190YWJsZV9mcmVlOwogCQl9CiAJfQorCW1seDRfc2V0X3BvcnRfbWFzayhkZXYpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWNnLmMgYi9kcml2ZXJzL25ldC9tbHg0L21jZy5jCmluZGV4IDM3MTUwYjIuLmU2M2MzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWNnLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tY2cuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJdTMyIG1lbWJlcnNfY291bnQ7CiAJc3RydWN0IG1seDRfc3RlZXJfaW5kZXggKm5ld19lbnRyeTsKIAlzdHJ1Y3QgbWx4NF9wcm9taXNjX3FwICpwcXA7Ci0Jc3RydWN0IG1seDRfcHJvbWlzY19xcCAqZHFwOworCXN0cnVjdCBtbHg0X3Byb21pc2NfcXAgKmRxcCA9IE5VTEw7CiAJdTMyIHByb3Q7CiAJaW50IGVycjsKIAl1OCBwZl9udW07CkBAIC0xODQsNyArMTg0LDcgQEAKIG91dF9hbGxvYzoKIAlpZiAoZHFwKSB7CiAJCWxpc3RfZGVsKCZkcXAtPmxpc3QpOwotCQlrZnJlZSgmZHFwKTsKKwkJa2ZyZWUoZHFwKTsKIAl9CiAJbGlzdF9kZWwoJm5ld19lbnRyeS0+bGlzdCk7CiAJa2ZyZWUobmV3X2VudHJ5KTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAJLyogdGhlIGdpdmVuIHFwbiBpcyBsaXN0ZWQgYXMgYSBwcm9taXNjIHFwbgogCSAqIHdlIG5lZWQgdG8gYWRkIGl0IGFzIGEgZHVwbGljYXRlIHRvIHRoaXMgZW50cnkKLQkgKiBmb3IgZnV0dXJlIHJlZmVybmNlICovCisJICogZm9yIGZ1dHVyZSByZWZlcmVuY2VzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcXAsICZlbnRyeS0+ZHVwbGljYXRlcywgbGlzdCkgewogCQlpZiAocXBuID09IGRxcC0+cXBuKQogCQkJcmV0dXJuIDA7IC8qIHFwIGlzIGFscmVhZHkgZHVwbGljYXRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmggYi9kcml2ZXJzL25ldC9tbHg0L21seDQuaAppbmRleCBjMWUwZTVmLi5kZDdkNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21seDQuaAorKysgYi9kcml2ZXJzL25ldC9tbHg0L21seDQuaApAQCAtNDMxLDYgKzQzMSw4IEBACiAKIHZvaWQgbWx4NF9oYW5kbGVfY2F0YXNfZXJyKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIAoraW50IG1seDRfU0VOU0VfUE9SVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHBvcnQsCisJCSAgICBlbnVtIG1seDRfcG9ydF90eXBlICp0eXBlKTsKIHZvaWQgbWx4NF9kb19zZW5zZV9wb3J0cyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKIAkJCSBlbnVtIG1seDRfcG9ydF90eXBlICpzdHlwZSwKIAkJCSBlbnVtIG1seDRfcG9ydF90eXBlICpkZWZhdWx0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3BvcnQuYyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCmluZGV4IGVjYTdkODUuLjg4NTY2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJfQogCiAJCWlmIChtYWMgPT0gKE1MWDRfTUFDX01BU0sgJiBiZTY0X3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXSkpKSB7Ci0JCQkvKiBNQUMgYWxyZWFkeSByZWdpc3RlcmVkLCBpbmNyZWFzZSByZWZlcm5jZSBjb3VudCAqLworCQkJLyogTUFDIGFscmVhZHkgcmVnaXN0ZXJlZCwgaW5jcmVhc2UgcmVmZXJlbmNlcyBjb3VudCAqLwogCQkJKyt0YWJsZS0+cmVmc1tpXTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zNjAsNyArMzYwLDcgQEAKIAkJaWYgKHRhYmxlLT5yZWZzW2ldICYmCiAJCSAgICAodmxhbiA9PSAoTUxYNF9WTEFOX01BU0sgJgogCQkJICAgICAgYmUzMl90b19jcHUodGFibGUtPmVudHJpZXNbaV0pKSkpIHsKLQkJCS8qIFZsYW4gYWxyZWFkeSByZWdpc3RlcmVkLCBpbmNyZWFzZSByZWZlcm5jZSBjb3VudCAqLworCQkJLyogVmxhbiBhbHJlYWR5IHJlZ2lzdGVyZWQsIGluY3JlYXNlIHJlZmVyZW5jZXMgY291bnQgKi8KIAkJCSppbmRleCA9IGk7CiAJCQkrK3RhYmxlLT5yZWZzW2ldOwogCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKaW5kZXggMDE1ZmJlNzguLmUyMzM3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKQEAgLTM4LDggKzM4LDggQEAKIAogI2luY2x1ZGUgIm1seDQuaCIKIAotc3RhdGljIGludCBtbHg0X1NFTlNFX1BPUlQoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBwb3J0LAotCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqdHlwZSkKK2ludCBtbHg0X1NFTlNFX1BPUlQoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBwb3J0LAorCQkgICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqdHlwZSkKIHsKIAl1NjQgb3V0X3BhcmFtOwogCWludCBlcnIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggNjczZGM2MC4uMTQ0NmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0zNzAyLDcgKzM3MDIsNyBAQAogCiAvKgogICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc2xpY2VzIHN1cHBvcnRlZC4KLSAqIFRoZSBudW1iZXIgc2xpY2VzIGlzIHRoZSBtaW51bXVtIG9mIHRoZSBudW1iZXIgb2YgQ1BVUywKKyAqIFRoZSBudW1iZXIgc2xpY2VzIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBudW1iZXIgb2YgQ1BVUywKICAqIHRoZSBudW1iZXIgb2YgTVNJLVggaXJxcyBzdXBwb3J0ZWQsIHRoZSBudW1iZXIgb2Ygc2xpY2VzCiAgKiBzdXBwb3J0ZWQgYnkgdGhlIGZpcm13YXJlCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jIGIvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKaW5kZXggYTc2MTA3Ni4uNTNhZWVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKQEAgLTEwMDksNyArMTAwOSw3IEBACiAKIAkvKiBNYXAgaW4gdGhlIE15cmlDT00gcmVnaXN0ZXIvbG9jYWxyYW0gc2V0LiAqLwogCWlmIChtcC0+ZWVwcm9tLmNwdXZlcnMgPCBDUFVWRVJTXzRfMCkgewotCQkvKiBYWFggTWFrZXMgbm8gc2Vuc2UsIGlmIGNvbnRyb2wgcmVnIGlzIG5vbi1leGlzdGFudCB0aGlzCisJCS8qIFhYWCBNYWtlcyBubyBzZW5zZSwgaWYgY29udHJvbCByZWcgaXMgbm9uLWV4aXN0ZW50IHRoaXMKIAkJICogWFhYIGRyaXZlciBjYW5ub3QgZnVuY3Rpb24gYXQgYWxsLi4uIG1heWJlIHByZS00LjAgaXMKIAkJICogWFhYIG9ubHkgYSB2YWxpZCB2ZXJzaW9uIGZvciBQQ0kgY2FyZHM/ICBBc2sgZmVsZHkuLi4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKaW5kZXggMmZkMzk2My4uMTA3NDIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiBJSUlkLiBTeW5jaHJvbml6YXRpb24KIAogTW9zdCBvcGVyYXRpb25zIGFyZSBzeW5jaHJvbml6ZWQgb24gdGhlIG5wLT5sb2NrIGlycSBzcGlubG9jaywgZXhjZXB0IHRoZQotcmVjaWV2ZSBhbmQgdHJhbnNtaXQgcGF0aHMgd2hpY2ggYXJlIHN5bmNocm9uaXNlZCB1c2luZyBhIGNvbWJpbmF0aW9uIG9mCityZWNlaXZlIGFuZCB0cmFuc21pdCBwYXRocyB3aGljaCBhcmUgc3luY2hyb25pc2VkIHVzaW5nIGEgY29tYmluYXRpb24gb2YKIGhhcmR3YXJlIGRlc2NyaXB0b3Igb3duZXJzaGlwLCBkaXNhYmxpbmcgaW50ZXJydXB0cyBhbmQgTkFQSSBwb2xsIHNjaGVkdWxpbmcuCiAKIElWYi4gUmVmZXJlbmNlcwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJICogVGhlcmUgYXJlIHR3byBhZGRyZXNzZXMgd2UgbXVzdCBhdm9pZDoKIAkgKiAtIHRoZSBhZGRyZXNzIG9uIHRoZSBleHRlcm5hbCBwaHkgdGhhdCBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24uCiAJICogLSB0aGUgYWRkcmVzcyB0aGF0IHdlIHdhbnQgdG8gYWNjZXNzLiBVc2VyIHNwYWNlIGNhbiBhY2Nlc3MgcGh5cwotCSAqICAgb24gdGhlIG1paSBidXMgd2l0aCBTSU9DR01JSVJFRy9TSU9DU01JSVJFRywgaW5kZXBlbmRhbnQgZnJvbSB0aGUKKwkgKiAgIG9uIHRoZSBtaWkgYnVzIHdpdGggU0lPQ0dNSUlSRUcvU0lPQ1NNSUlSRUcsIGluZGVwZW5kZW50IGZyb20gdGhlCiAJICogICBwaHkgdGhhdCBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24uCiAJICovCiAKQEAgLTg2MCw2ICs4NjAsOSBAQAogCQlwcmV2X2VlZGF0YSA9IGVlZGF0YTsKIAl9CiAKKwkvKiBTdG9yZSBNQUMgQWRkcmVzcyBpbiBwZXJtX2FkZHIgKi8KKwltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwogCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSkgaW9hZGRyOwogCWRldi0+aXJxID0gaXJxOwogCkBAIC0xOTgyLDcgKzE5ODUsNyBAQAogCiAJbnAtPnJ4X2hlYWRfZGVzYyA9ICZucC0+cnhfcmluZ1swXTsKIAotCS8qIFBsZWFzZSBiZSBjYXJlZnVsbCBiZWZvcmUgY2hhbmdpbmcgdGhpcyBsb29wIC0gYXQgbGVhc3QgZ2NjLTIuOTUuMQorCS8qIFBsZWFzZSBiZSBjYXJlZnVsIGJlZm9yZSBjaGFuZ2luZyB0aGlzIGxvb3AgLSBhdCBsZWFzdCBnY2MtMi45NS4xCiAJICogbWlzY29tcGlsZXMgaXQgb3RoZXJ3aXNlLgogCSAqLwogCS8qIEluaXRpYWxpemUgYWxsIFJ4IGRlc2NyaXB0b3JzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYyBiL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKaW5kZXggMzBiZThjNi4uNzI5OGEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYworKysgYi9kcml2ZXJzL25ldC9uZS1oODMwMC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKICNpZm5kZWYgTU9EVUxFCiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBuZV9wcm9iZShpbnQgdW5pdCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IF9fX19hbGxvY19laV9uZXRkZXYoMCk7CiAJaW50IGVycjsKIAogCWlmICghZGV2KQpAQCAtMTk3LDE1ICsxOTcsMTUgQEAKIAkubmRvX29wZW4JCT0gbmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gbmVfY2xvc2UsCiAKLQkubmRvX3N0YXJ0X3htaXQJCT0gZWlfc3RhcnRfeG1pdCwKLQkubmRvX3R4X3RpbWVvdXQJCT0gZWlfdHhfdGltZW91dCwKLQkubmRvX2dldF9zdGF0cwkJPSBlaV9nZXRfc3RhdHMsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlaV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zdGFydF94bWl0CQk9IF9fZWlfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gX19laV90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IF9fZWlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gX19laV9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWlfcG9sbCwKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IF9fZWlfcG9sbCwKICNlbmRpZgogfTsKIApAQCAtNjM3LDcgKzYzNyw3IEBACiAJaW50IGVycjsKIAogCWZvciAodGhpc19kZXYgPSAwOyB0aGlzX2RldiA8IE1BWF9ORV9DQVJEUzsgdGhpc19kZXYrKykgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBfX19fYWxsb2NfZWlfbmV0ZGV2KDApOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwogCQlpZiAoaW9bdGhpc19kZXZdKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggZGZiNjdlYi4uZWI0MWU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtNjcxLDYgKzY3MSw3IEBACiAJCWdvdG8gZG9uZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7CityZXN0YXJ0OgogCWxpc3RfZm9yX2VhY2hfZW50cnkobnQsICZ0YXJnZXRfbGlzdCwgbGlzdCkgewogCQluZXRjb25zb2xlX3RhcmdldF9nZXQobnQpOwogCQlpZiAobnQtPm5wLmRldiA9PSBkZXYpIHsKQEAgLTY4Myw5ICs2ODQsMTYgQEAKIAkJCQkgKiBydG5sX2xvY2sgYWxyZWFkeSBoZWxkCiAJCQkJICovCiAJCQkJaWYgKG50LT5ucC5kZXYpIHsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJCQkgICAgICAmdGFyZ2V0X2xpc3RfbG9jaywKKwkJCQkJCQkgICAgICBmbGFncyk7CiAJCQkJCV9fbmV0cG9sbF9jbGVhbnVwKCZudC0+bnApOworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0X2xpc3RfbG9jaywKKwkJCQkJCQkgIGZsYWdzKTsKIAkJCQkJZGV2X3B1dChudC0+bnAuZGV2KTsKIAkJCQkJbnQtPm5wLmRldiA9IE5VTEw7CisJCQkJCW5ldGNvbnNvbGVfdGFyZ2V0X3B1dChudCk7CisJCQkJCWdvdG8gcmVzdGFydDsKIAkJCQl9CiAJCQkJLyogRmFsbCB0aHJvdWdoICovCiAJCQljYXNlIE5FVERFVl9HT0lOR19ET1dOOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggZDcyOTlmMS4uNjc5ZGM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogI2RlZmluZQlNQVhfTlVNX0NBUkRTCQk0CiAKLSNkZWZpbmUgTUFYX0JVRkZFUlNfUEVSX0NNRAkzMgorI2RlZmluZSBORVRYRU5fTUFYX0ZSQUdTX1BFUl9UWAkxNAogI2RlZmluZSBNQVhfVFNPX0hFQURFUl9ERVNDCTIKICNkZWZpbmUgTUdNVF9DTURfREVTQ19SRVNWCTQKICNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIE1BWF9UU09fSEVBREVSX0RFU0MgXApAQCAtNTU4LDcgKzU1OCw3IEBACiAgKi8KIHN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0eGVuX3NrYl9mcmFnIGZyYWdfYXJyYXlbTUFYX0JVRkZFUlNfUEVSX0NNRCArIDFdOworCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgZnJhZ19hcnJheVtNQVhfU0tCX0ZSQUdTICsgMV07CiAJdTMyIGZyYWdfY291bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IGQ4YmQ3M2QuLmRjMTk2N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC03ODAsNyArNzgwLDcgQEAKIAogLyoKICAqIGNhcGFiaWxpdGllcyByZWdpc3RlciwgY2FuIGJlIHVzZWQgdG8gc2VsZWN0aXZlbHkgZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMKLSAqIGZvciBiYWNrd2FyZCBjb21wYWJpbGl0eQorICogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAqLwogI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19IT1NUCU5FVFhFTl9OSUNfUkVHKDB4MWE4KQogI2RlZmluZSBDUkJfTklDX01TSV9NT0RFX0hPU1QJCU5FVFhFTl9OSUNfUkVHKDB4MjcwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDgzMzQ4ZGMuLmU4YTRiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTE4NDQsNiArMTg0NCw4IEBACiAJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpod2Rlc2MsICpmaXJzdF9kZXNjOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCWludCBpLCBrOworCWludCBkZWx0YSA9IDA7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKIAogCXUzMiBwcm9kdWNlcjsKIAlpbnQgZnJhZ19jb3VudCwgbm9fb2ZfZGVzYzsKQEAgLTE4NTEsNiArMTg1MywyMSBAQAogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOwogCisJLyogMTQgZnJhZ3Mgc3VwcG9ydGVkIGZvciBub3JtYWwgcGFja2V0IGFuZAorCSAqIDMyIGZyYWdzIHN1cHBvcnRlZCBmb3IgVFNPIHBhY2tldAorCSAqLworCWlmICghc2tiX2lzX2dzbyhza2IpICYmIGZyYWdfY291bnQgPiBORVRYRU5fTUFYX0ZSQUdTX1BFUl9UWCkgeworCisJCWZvciAoaSA9IDA7IGkgPCAoZnJhZ19jb3VudCAtIE5FVFhFTl9NQVhfRlJBR1NfUEVSX1RYKTsgaSsrKSB7CisJCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQlkZWx0YSArPSBmcmFnLT5zaXplOworCQl9CisKKwkJaWYgKCFfX3Bza2JfcHVsbF90YWlsKHNrYiwgZGVsdGEpKQorCQkJZ290byBkcm9wX3BhY2tldDsKKworCQlmcmFnX2NvdW50ID0gMSArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJfQogCS8qIDQgZnJhZ21lbnRzIHBlciBjbWQgZGVzICovCiAJbm9fb2ZfZGVzYyA9IChmcmFnX2NvdW50ICsgMykgPj4gMjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IGE0MWIyY2YuLjY2NjdlMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogLyogUGFja2V0IFJlY2VpdmVyCiAgKgogICogVGhlIGhhcmR3YXJlIHN1cHBvcnRzIGxpbmtlZCBsaXN0cyBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIGZvcgotICogd2hpY2ggb3duZXJzaGlwIGlzIHRyYW5zZmVyZWQgYmFjayBhbmQgZm9ydGggYnkgbWVhbnMgb2YgYW4KKyAqIHdoaWNoIG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCBiYWNrIGFuZCBmb3J0aCBieSBtZWFucyBvZiBhbgogICogb3duZXJzaGlwIGJpdC4gIFdoaWxlIHRoZSBoYXJkd2FyZSBkb2VzIHN1cHBvcnQgdGhlIHVzZSBvZiBhCiAgKiByaW5nIGZvciByZWNlaXZlIGRlc2NyaXB0b3JzLCB3ZSBvbmx5IG1ha2UgdXNlIG9mIGEgY2hhaW4gaW4KICAqIGFuIGF0dGVtcHQgdG8gcmVkdWNlIGJ1cyB0cmFmZmljIHVuZGVyIGhlYXZ5IGxvYWQgc2NlbmFyaW9zLgpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKICNpZmRlZiBOUzgzODIwX1ZMQU5fQUNDRUxfU1VQUE9SVAogCWlmKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQkvKiBmZXRjaCB0aGUgdmxhbiB0YWcgaW5mbyBvdXQgb2YgdGhlCi0JCSAqIGFuY2lsbGlhcnkgZGF0YSBpZiB0aGUgdmxhbiBjb2RlCisJCSAqIGFuY2lsbGFyeSBkYXRhIGlmIHRoZSB2bGFuIGNvZGUKIAkJICogaXMgdXNpbmcgaHcgdmxhbiBhY2NlbGVyYXRpb24KIAkJICovCiAJCXNob3J0IHRhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmggYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAppbmRleCBlMWUzM2M4Li5iZjEyNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAorKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaApAQCAtMzUxLDcgKzM1MSw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBwY2hfZ2JlX21hY19pbmZvIC0gTUFDIGluZm9tYXRpb24KKyAqIHN0cnVjdCBwY2hfZ2JlX21hY19pbmZvIC0gTUFDIGluZm9ybWF0aW9uCiAgKiBAYWRkcls2XToJCVN0b3JlIHRoZSBNQUMgYWRkcmVzcwogICogQGZjOgkJCU1vZGUgb2YgZmxvdyBjb250cm9sCiAgKiBAZmNfYXV0b25lZzoJCUF1dG8gbmVnb3RpYXRpb24gZW5hYmxlIGZvciBmbG93IGNvbnRyb2wgc2V0dGluZwpAQCAtMzc1LDcgKzM3NSw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBwY2hfZ2JlX3BoeV9pbmZvIC0gUEhZIGluZm9tYXRpb24KKyAqIHN0cnVjdCBwY2hfZ2JlX3BoeV9pbmZvIC0gUEhZIGluZm9ybWF0aW9uCiAgKiBAYWRkcjoJCVBIWSBhZGRyZXNzCiAgKiBAaWQ6CQkJUEhZJ3MgaWRlbnRpZmllcgogICogQHJldmlzaW9uOgkJUEhZJ3MgcmV2aXNpb24KQEAgLTM5Myw3ICszOTMsNyBAQAogLyohCiAgKiBAaW5ncm91cCBHaWdhYml0IEV0aGVyIGRyaXZlciBMYXllcgogICogQHN0cnVjdCAgcGNoX2diZV9idXNfaW5mbwotICogQGJyaWVmICAgQnVzIGluZm9tYXRpb24KKyAqIEBicmllZiAgIEJ1cyBpbmZvcm1hdGlvbgogICovCiBzdHJ1Y3QgcGNoX2diZV9idXNfaW5mbyB7CiAJdTggdHlwZTsKQEAgLTQwNCw3ICs0MDQsNyBAQAogLyohCiAgKiBAaW5ncm91cCBHaWdhYml0IEV0aGVyIGRyaXZlciBMYXllcgogICogQHN0cnVjdCAgcGNoX2diZV9odwotICogQGJyaWVmICAgSGFyZHdhcmUgaW5mb21hdGlvbgorICogQGJyaWVmICAgSGFyZHdhcmUgaW5mb3JtYXRpb24KICAqLwogc3RydWN0IHBjaF9nYmVfaHcgewogCXZvaWQgKmJhY2s7CkBAIC00NjIsNyArNDYyLDcgQEAKIAogCiAvKioKLSAqIHN0cnVjdCBwY2hfZ2JlX2J1ZmZlciAtIEJ1ZmZlciBpbmZvbWF0aW9uCisgKiBzdHJ1Y3QgcGNoX2diZV9idWZmZXIgLSBCdWZmZXIgaW5mb3JtYXRpb24KICAqIEBza2I6CXBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyCiAgKiBAZG1hOglETUEgYWRkcmVzcwogICogQHRpbWVfc3RhbXA6CXRpbWUgc3RhbXAKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgcGNoX2diZV90eF9yaW5nIC0gdHggcmluZyBpbmZvbWF0aW9uCisgKiBzdHJ1Y3QgcGNoX2diZV90eF9yaW5nIC0gdHggcmluZyBpbmZvcm1hdGlvbgogICogQHR4X2xvY2s6CXNwaW5sb2NrIHN0cnVjdHMKICAqIEBkZXNjOglwb2ludGVyIHRvIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5CiAgKiBAZG1hOglwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yIHJpbmcKQEAgLTQ5OSw3ICs0OTksNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgcGNoX2diZV9yeF9yaW5nIC0gcnggcmluZyBpbmZvbWF0aW9uCisgKiBzdHJ1Y3QgcGNoX2diZV9yeF9yaW5nIC0gcnggcmluZyBpbmZvcm1hdGlvbgogICogQGRlc2M6CXBvaW50ZXIgdG8gdGhlIGRlc2NyaXB0b3IgcmluZyBtZW1vcnkKICAqIEBkbWE6CXBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IgcmluZwogICogQHNpemU6CWxlbmd0aCBvZiBkZXNjcmlwdG9yIHJpbmcgaW4gYnl0ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfZXRodG9vbC5jCmluZGV4IGM4Yzg3M2IuLmQyMTc0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX2V0aHRvb2wuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgInBjaF9nYmVfYXBpLmgiCiAKIC8qKgotICogcGNoX2diZV9zdGF0cyAtIFN0YXRzIGl0ZW0gaW5mb21hdGlvbgorICogcGNoX2diZV9zdGF0cyAtIFN0YXRzIGl0ZW0gaW5mb3JtYXRpb24KICAqLwogc3RydWN0IHBjaF9nYmVfc3RhdHMgewogCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYwppbmRleCA1MDk4Njg0Li41NmQwNDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKQEAgLTM0LDYgKzM0LDEwIEBACiAjZGVmaW5lIFBDSF9HQkVfQ09QWUJSRUFLX0RFRkFVTFQJMjU2CiAjZGVmaW5lIFBDSF9HQkVfUENJX0JBUgkJCTEKIAorLyogTWFjcm9zIGZvciBNTDcyMjMgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ST0hNCQkJMHgxMGRiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk9ITV9NTDcyMjNfR0JFCQkweDgwMTMKKwogI2RlZmluZSBQQ0hfR0JFX1RYX1dFSUdIVCAgICAgICAgIDY0CiAjZGVmaW5lIFBDSF9HQkVfUlhfV0VJR0hUICAgICAgICAgNjQKICNkZWZpbmUgUENIX0dCRV9SWF9CVUZGRVJfV1JJVEUgICAxNgpAQCAtNDMsOCArNDcsNyBAQAogCiAjZGVmaW5lIFBDSF9HQkVfTUFDX1JHTUlJX0NUUkxfU0VUVElORyAoIFwKIAlQQ0hfR0JFX0NISVBfVFlQRV9JTlRFUk5BTCB8IFwKLQlQQ0hfR0JFX1JHTUlJX01PREVfUkdNSUkgICB8IFwKLQlQQ0hfR0JFX0NSU19TRUwgICAgICAgICAgICAgIFwKKwlQQ0hfR0JFX1JHTUlJX01PREVfUkdNSUkgICAgIFwKIAkpCiAKIC8qIEV0aGVydHlwZSBmaWVsZCB2YWx1ZXMgKi8KQEAgLTEwMTEsNyArMTAxNCw3IEBACiAJdG1wX3NrYi0+bGVuID0gc2tiLT5sZW47CiAJbWVtY3B5KCZ0bXBfc2tiLT5kYXRhW0VUSF9ITEVOICsgMl0sICZza2ItPmRhdGFbRVRIX0hMRU5dLAogCSAgICAgICAoc2tiLT5sZW4gLSBFVEhfSExFTikpOwotCS8qLS0gU2V0IEJ1ZmZlciBpbmZvbWF0aW9uIC0tKi8KKwkvKi0tIFNldCBCdWZmZXIgaW5mb3JtYXRpb24gLS0qLwogCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSB0bXBfc2tiLT5sZW47CiAJYnVmZmVyX2luZm8tPmRtYSA9IGRtYV9tYXBfc2luZ2xlKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHRtcF9za2ItPmRhdGEsCiAJCQkJCSAgYnVmZmVyX2luZm8tPmxlbmd0aCwKQEAgLTE0OTQsMTIgKzE0OTcsMTEgQEAKIAkJCS8qIFdyaXRlIG1ldGEgZGF0ZSBvZiBza2IgKi8KIAkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKLQkJCWlmICgodGNwX2lwX3N0YXR1cyAmIFBDSF9HQkVfUlhEX0FDQ19TVEFUX1RDUElQT0spID09Ci0JCQkgICAgUENIX0dCRV9SWERfQUNDX1NUQVRfVENQSVBPSykgewotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCQl9IGVsc2UgeworCQkJaWYgKHRjcF9pcF9zdGF0dXMgJiBQQ0hfR0JFX1JYRF9BQ0NfU1RBVF9UQ1BJUE9LKQogCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJCX0KKwkJCWVsc2UKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCiAJCQluYXBpX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBza2IpOwogCQkJKCp3b3JrX2RvbmUpKys7CiAJCQlwcl9kZWJ1ZygiUmVjZWl2ZSBza2ItPmlwX3N1bW1lZDogJWQgbGVuZ3RoOiAlZFxuIiwKQEAgLTE1NDAsNyArMTU0Miw3IEBACiAJc2l6ZSA9IChpbnQpc2l6ZW9mKHN0cnVjdCBwY2hfZ2JlX2J1ZmZlcikgKiB0eF9yaW5nLT5jb3VudDsKIAl0eF9yaW5nLT5idWZmZXJfaW5mbyA9IHZ6YWxsb2Moc2l6ZSk7CiAJaWYgKCF0eF9yaW5nLT5idWZmZXJfaW5mbykgewotCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIgaW5mb21hdGlvblxuIik7CisJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBpbmZvcm1hdGlvblxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjQyMCw2ICsyNDIyLDEzIEBACiAJIC5jbGFzcyA9IChQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCA8PCA4KSwKIAkgLmNsYXNzX21hc2sgPSAoMHhGRkZGMDApCiAJIH0sCisJey52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1JPSE0sCisJIC5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1JPSE1fTUw3MjIzX0dCRSwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSAuY2xhc3MgPSAoUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCksCisJIC5jbGFzc19tYXNrID0gKDB4RkZGRjAwKQorCSB9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCmluZGV4IDE3NjZkYzQuLmMwZjIzMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAl7ICJTTUMxMjExVFggRVpDYXJkIDEwLzEwMCAoUmVhbFRlayBSVEw4MTM5KSIgfSwKIC8qCXsgTVBYNTAzMCwgIkFjY3RvbiBNUFg1MDMwIChSZWFsVGVrIFJUTDgxMzkpIiB9LCovCiAJeyAiRGVsdGEgRWxlY3Ryb25pY3MgODEzOSAxMC8xMDBCYXNlVFgiIH0sCi0JeyAiQWRkdHJvbiBUZWNobm9sZ3kgODEzOSAxMC8xMDBCYXNlVFgiIH0sCisJeyAiQWRkdHJvbiBUZWNobm9sb2d5IDgxMzkgMTAvMTAwQmFzZVRYIiB9LAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDMyMWIxMmYuLjgxYWMzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC05NTAsNyArOTUwLDcgQEAKIH0KIAogLyogIFVwZGF0ZSBzdGF0aXN0aWNzLgotCVN1cHJpc2luZ2x5IHRoaXMgbmVlZCBub3QgYmUgcnVuIHNpbmdsZS10aHJlYWRlZCwgYnV0IGl0IGVmZmVjdGl2ZWx5IGlzLgorCVN1cnByaXNpbmdseSB0aGlzIG5lZWQgbm90IGJlIHJ1biBzaW5nbGUtdGhyZWFkZWQsIGJ1dCBpdCBlZmZlY3RpdmVseSBpcy4KIAlUaGUgY291bnRlcnMgY2xlYXIgd2hlbiByZWFkLCBzbyB0aGUgYWRkcyBtdXN0IG1lcmVseSBiZSBhdG9taWMuCiAgKi8KIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCBkM2NiNzcyLi4zMDc3ZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtNzgwLDcgKzc4MCw3IEBACiAgIEFsZXhleSBLdXpuZXRzb3YJOiB1c2UgdGhlIDgzOTAncyBzaXggYml0IGhhc2ggbXVsdGljYXN0IGZpbHRlci4KICAgUGF1bCBHb3J0bWFrZXIJOiB0d2VhayBBTksncyBhYm92ZSBtdWx0aWNhc3QgY2hhbmdlcyBhIGJpdC4KICAgUGF1bCBHb3J0bWFrZXIJOiB1cGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgZm9yIHYyLjEueAotICBBbGFuIENveAkJOiBzdXBwb3J0IGFyYml0YXJ5IHN0dXBpZCBwb3J0IG1hcHBpbmdzIG9uIHRoZQorICBBbGFuIENveAkJOiBzdXBwb3J0IGFyYml0cmFyeSBzdHVwaWQgcG9ydCBtYXBwaW5ncyBvbiB0aGUKICAgCQkJICA2OEsgTWFjaW50b3NoLiBTdXBwb3J0ID4xNmJpdCBJL08gc3BhY2VzCiAgIFBhdWwgR29ydG1ha2VyCTogYWRkIGttb2Qgc3VwcG9ydCBmb3IgYXV0by1sb2FkaW5nIG9mIHRoZSA4MzkwCiAJCQkgIG1vZHVsZSBieSBhbGwgZHJpdmVycyB0aGF0IHJlcXVpcmUgaXQuCkBAIC04NDIsNyArODQyLDcgQEAKIC8qCiAgKglTTVAgYW5kIHRoZSA4MzkwIHNldHVwLgogICoKLSAqCVRoZSA4MzkwIGlzbnQgZXhhY3RseSBkZXNpZ25lZCB0byBiZSBtdWx0aXRocmVhZGVkIG9uIFJYL1RYLiBUaGVyZSBpcworICoJVGhlIDgzOTAgaXNuJ3QgZXhhY3RseSBkZXNpZ25lZCB0byBiZSBtdWx0aXRocmVhZGVkIG9uIFJYL1RYLiBUaGVyZSBpcwogICoJYSBwYWdlIHJlZ2lzdGVyIHRoYXQgY29udHJvbHMgYmFuayBhbmQgcGFja2V0IGJ1ZmZlciBhY2Nlc3MuIFdlIGd1YXJkCiAgKgl0aGlzIHdpdGggZWlfbG9jYWwtPnBhZ2VfbG9jay4gTm9ib2R5IHNob3VsZCBhc3N1bWUgb3Igc2V0IHRoZSBwYWdlIG90aGVyCiAgKgl0aGFuIHplcm8gd2hlbiB0aGUgbG9jayBpcyBub3QgaGVsZC4gTG9jayBob2xkZXJzIG11c3QgcmVzdG9yZSBwYWdlIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKaW5kZXggOGE5ZmY1My4uMTA4NTkxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKQEAgLTEyNjQsNyArMTI2NCw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgSGFuZGxlIGEgVHggYW5vbW9sb3VzIGV2ZW50LiAgRW50ZXJlZCB3aGlsZSBpbiBXaW5kb3cgMi4KKyAgICBIYW5kbGUgYSBUeCBhbm9tYWxvdXMgZXZlbnQuICBFbnRlcmVkIHdoaWxlIGluIFdpbmRvdyAyLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IGFlZTNiYjAuLjc2ODAzNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTE2NTEsNyArMTY1MSw3IEBACiAJLyoKIAkgKiAgT24gc2VsZWN0ZWQgY2hpcHMgdHVybiBvbiB0aGUgQkNSMTg6Tk9VRkxPIGJpdC4gVGhpcyBzdG9wcyB0cmFuc21pdAogCSAqICBzdGFydGluZyB1bnRpbCB0aGUgcGFja2V0IGlzIGxvYWRlZC4gU3RyaWtlIG9uZSBmb3IgcmVsaWFiaWxpdHksIGxvc2UKLQkgKiAgb25lIGZvciBsYXRlbmN5IC0gYWx0aG91Z2ggb24gUENJIHRoaXMgaXNudCBhIGJpZyBsb3NzLiBPbGRlciBjaGlwcworCSAqICBvbmUgZm9yIGxhdGVuY3kgLSBhbHRob3VnaCBvbiBQQ0kgdGhpcyBpc24ndCBhIGJpZyBsb3NzLiBPbGRlciBjaGlwcwogCSAqICBoYXZlIEZJRk8ncyBzbWFsbGVyIHRoYW4gYSBwYWNrZXQsIHNvIHlvdSBjYW4ndCBkbyB0aGlzLgogCSAqICBUdXJuIG9uIEJDUjE4OkJ1cnN0UmRFbiBhbmQgQkNSMTg6QnVyc3RXckVuLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggZTg3MGMwNi4uZmYxMDlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC01MzgsNyArNTM4LDcgQEAKIC8qIEdlbmVyaWMgUEhZIHN1cHBvcnQgYW5kIGhlbHBlciBmdW5jdGlvbnMgKi8KIAogLyoqCi0gKiBnZW5waHlfY29uZmlnX2FkdmVydCAtIHNhbml0aXplIGFuZCBhZHZlcnRpc2UgYXV0by1uZWdvdGF0aW9uIHBhcmFtZXRlcnMKKyAqIGdlbnBoeV9jb25maWdfYWR2ZXJ0IC0gc2FuaXRpemUgYW5kIGFkdmVydGlzZSBhdXRvLW5lZ290aWF0aW9uIHBhcmFtZXRlcnMKICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAogICoKICAqIERlc2NyaXB0aW9uOiBXcml0ZXMgTUlJX0FEVkVSVElTRSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMsCkBAIC02ODcsNyArNjg3LDcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAogCWlmIChyZXN1bHQgPT0gMCkgewotCQkvKiBBZHZlcnRpc21lbnQgaGFzbid0IGNoYW5nZWQsIGJ1dCBtYXliZSBhbmVnIHdhcyBuZXZlciBvbiB0bworCQkvKiBBZHZlcnRpc2VtZW50IGhhc24ndCBjaGFuZ2VkLCBidXQgbWF5YmUgYW5lZyB3YXMgbmV2ZXIgb24gdG8KIAkJICogYmVnaW4gd2l0aD8gIE9yIG1heWJlIHBoeSB3YXMgaXNvbGF0ZWQ/ICovCiAJCWludCBjdGwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggOWY2ZDY3MC4uNDYwOWJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC0xNDQ4LDcgKzE0NDgsNyBAQAogCiAJCS8qCiAJCSAqY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBsYXN0IGNoYW5uZWwgb3IKLQkJICp3ZSBleGNlZGVkIHRoZSBsZW5naHQgb2YgdGhlIGRhdGEgdG8KKwkJICp3ZSBleGNlZGVkIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8KIAkJICpmcmFnbWVudAogCQkgKi8KIAkJaWYgKChuZnJlZSA8PSAwKSB8fCAoZmxlbiA+IGxlbikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwppbmRleCA0ZTZiNzJmLi4yNTczZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogICogd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHVzZSBhIHJ3bG9jayBpbiB0aGUgdHR5IHN0cnVjdCwgYnV0IGZvciBub3cKICAqIHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgcndsb2NrIGZvciBhbGwgdHR5cyBpbiBwcHAgbGluZSBkaXNjaXBsaW5lLgogICoKLSAqIEZJWE1FOiBGaXhlZCBpbiB0dHlfaW8gbm93ZGF5cy4KKyAqIEZJWE1FOiBGaXhlZCBpbiB0dHlfaW8gbm93YWRheXMuCiAgKi8KIHN0YXRpYyBERUZJTkVfUldMT0NLKGRpc2NfZGF0YV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggNzhjMGUzYy4uNzE4ODc5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAqIDIpIFNlc3Npb24gc3RhZ2UgKE1BQyBhbmQgU0lEIGFyZSBrbm93bikKICAqCiAgKiBFdGhlcm5ldCBmcmFtZXMgaGF2ZSBhIHNwZWNpYWwgdGFnIGZvciB0aGlzIGJ1dAotICogd2UgdXNlIHNpbXBsaWVyIGFwcHJvYWNoIGJhc2VkIG9uIHNlc3Npb24gaWQKKyAqIHdlIHVzZSBzaW1wbGVyIGFwcHJvYWNoIGJhc2VkIG9uIHNlc3Npb24gaWQKICAqLwogc3RhdGljIGlubGluZSBib29sIHN0YWdlX3Nlc3Npb24oX19iZTE2IHNpZCkKIHsKQEAgLTMxNyw3ICszMTcsNyBAQAogCQkJbG9ja19zb2NrKHNrKTsKIAogCQkJaWYgKHBvLT5wcHBvZV9kZXYgPT0gZGV2ICYmCi0JCQkgICAgc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgeworCQkJICAgIHNrLT5za19zdGF0ZSAmIChQUFBPWF9DT05ORUNURUQgfCBQUFBPWF9CT1VORCB8IFBQUE9YX1pPTUJJRSkpIHsKIAkJCQlwcHBveF91bmJpbmRfc29jayhzayk7CiAJCQkJc2stPnNrX3N0YXRlID0gUFBQT1hfWk9NQklFOwogCQkJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCmluZGV4IDVlY2ZhNGIuLmZmZGY3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogICogQGNhcmQ6IGNhcmQgc3RydWN0dXJlCiAgKgogICogZ2VsaWNfY2FyZF9kaXNhYmxlX3J4ZG1hYyB0ZXJtaW5hdGVzIHByb2Nlc3Npbmcgb24gdGhlIERNQSBjb250cm9sbGVyIGJ5Ci0gKiB0dXJpbmcgb2ZmIERNQSBhbmQgaXNzdWVpbmcgYSBmb3JjZSBlbmQKKyAqIHR1cmluZyBvZmYgRE1BIGFuZCBpc3N1aW5nIGEgZm9yY2UgZW5kCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnZWxpY19jYXJkX2Rpc2FibGVfcnhkbWFjKHN0cnVjdCBnZWxpY19jYXJkICpjYXJkKQogewpAQCAtNjUwLDcgKzY1MCw3IEBACiAgKiBAY2FyZDogY2FyZCBzdHJ1Y3R1cmUKICAqCiAgKiBnZWxpY19jYXJkX2Rpc2FibGVfdHhkbWFjIHRlcm1pbmF0ZXMgcHJvY2Vzc2luZyBvbiB0aGUgRE1BIGNvbnRyb2xsZXIgYnkKLSAqIHR1cmluZyBvZmYgRE1BIGFuZCBpc3N1ZWluZyBhIGZvcmNlIGVuZAorICogdHVyaW5nIG9mZiBETUEgYW5kIGlzc3VpbmcgYSBmb3JjZSBlbmQKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGdlbGljX2NhcmRfZGlzYWJsZV90eGRtYWMoc3RydWN0IGdlbGljX2NhcmQgKmNhcmQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmggYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmgKaW5kZXggMzI1MjFhZS4uZmFkYWRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuaApAQCAtMTE3LDcgKzExNyw3IEBACiAJR0VMSUNfREVTQ1JfUlhEQVRBRVJSCT0gMHgwMDAyMDAwMCwgLyogSVAgcGFja2V0IGZvcm1hdCBlcnJvciAqLwogCUdFTElDX0RFU0NSX1JYQ0FMRVJSCT0gMHgwMDAxMDAwMCwgLyogY2FyaWllciBleHRlbnNpb24gbGVuZ3RoCiAJCQkJCSAgICAgICogZXJyb3IgKi8KLQlHRUxJQ19ERVNDUl9SWENSRVhFUlIJPSAweDAwMDA4MDAwLCAvKiBjYXJyaWVyIGV4dGVudGlvbiBlcnJvciAqLworCUdFTElDX0RFU0NSX1JYQ1JFWEVSUgk9IDB4MDAwMDgwMDAsIC8qIGNhcnJpZXIgZXh0ZW5zaW9uIGVycm9yICovCiAJR0VMSUNfREVTQ1JfUlhNTFRDU1QJPSAweDAwMDA0MDAwLCAvKiBtdWx0aWNhc3QgYWRkcmVzcyBmcmFtZSAqLwogCS8qIGJpdCAxMy4uMCByZXNlcnZlZCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKaW5kZXggNGE2MjRhMi4uYjVhZTI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTgxNCw3ICs4MTQsNyBAQAogCQkJICogeW91IHdpbGwgbm90IGRlY2lkZSBzdWl0YWJsZSBjaXBoZXIgZnJvbQogCQkJICogaXRzIGJlYWNvbi4KIAkJCSAqIFlvdSBzaG91bGQgaGF2ZSBrbm93bGVkZ2UgYWJvdXQgdGhlIEFQJ3MKLQkJCSAqIGNpcGhlciBpbmZvbWF0aW9uIGluIG90aGVyIG1ldGhvZCBwcmlvciB0bworCQkJICogY2lwaGVyIGluZm9ybWF0aW9uIGluIG90aGVyIG1ldGhvZCBwcmlvciB0bwogCQkJICogdGhlIGFzc29jaWF0aW9uLgogCQkJICovCiAJCQlpZiAoIXByZWNpc2VfaWUoKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3B4YTE2OF9ldGguYyBiL2RyaXZlcnMvbmV0L3B4YTE2OF9ldGguYwppbmRleCAxYjYzYzhhLi44OWY3NTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9weGExNjhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvcHhhMTY4X2V0aC5jCkBAIC00NjIsNyArNDYyLDcgQEAKICAqIHBlcCAtIEVUSEVSTkVUIC4KICAqIG1hY19hZGRyIC0gTUFDIGFkZHJlc3MuCiAgKiBza2lwIC0gaWYgMSwgc2tpcCB0aGlzIGFkZHJlc3MuVXNlZCBpbiBjYXNlIG9mIGRlbGV0aW5nIGFuIGVudHJ5IHdoaWNoIGlzIGEKLSAqCSAgcGFydCBvZiBjaGFpbiBpbiB0aGUgaGFzaCB0YWJsZS5XZSBjYW50IGp1c3QgZGVsZXRlIHRoZSBlbnRyeSBzaW5jZQorICoJICBwYXJ0IG9mIGNoYWluIGluIHRoZSBoYXNoIHRhYmxlLldlIGNhbid0IGp1c3QgZGVsZXRlIHRoZSBlbnRyeSBzaW5jZQogICoJICB0aGF0IHdpbGwgYnJlYWsgdGhlIGNoYWluLldlIG5lZWQgdG8gZGVmcmFnbWVudCB0aGUgdGFibGVzIHRpbWUgdG8KICAqCSAgdGltZS4KICAqIHJkICAgLSAwIERpc2NhcmQgcGFja2V0IHVwb24gbWF0Y2guCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGEzeHh4LmggYi9kcml2ZXJzL25ldC9xbGEzeHh4LmgKaW5kZXggMzM2MmE2Ni4uNzNlMjM0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguaAorKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmgKQEAgLTc3MCw3ICs3NzAsNyBAQAogCUZNOTNDNTZBX1dEUyA9IDB4MCwKIAlGTTkzQzU2QV9FUkFTRSA9IDB4MywKIAlGTTkzQzU2QV9FUkFTRV9BTEwgPSAweDAsCi0vKiBDb21tYW5kIEV4dGVudGlvbnMgKi8KKy8qIENvbW1hbmQgRXh0ZW5zaW9ucyAqLwogCUZNOTNDNTZBX1dFTl9FWFQgPSAweDMsCiAJRk05M0M1NkFfV1JJVEVfQUxMX0VYVCA9IDB4MSwKIAlGTTkzQzU2QV9XRFNfRVhUID0gMHgwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCmluZGV4IGRjNDQ1NjQuLmIwZGVhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKQEAgLTk5LDYgKzk5LDcgQEAKICNkZWZpbmUgVFhfVURQVjZfUEtUCTB4MGMKIAogLyogVHggZGVmaW5lcyAqLworI2RlZmluZSBRTENOSUNfTUFYX0ZSQUdTX1BFUl9UWAkxNAogI2RlZmluZSBNQVhfVFNPX0hFQURFUl9ERVNDCTIKICNkZWZpbmUgTUdNVF9DTURfREVTQ19SRVNWCTQKICNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIE1BWF9UU09fSEVBREVSX0RFU0MgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwppbmRleCBjZDg4YzdlLi5jYjFhMWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwpAQCAtMjA5OSw2ICsyMDk5LDcgQEAKIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYywgKmZpcnN0X2Rlc2M7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IGV0aGhkciAqcGhkcjsKKwlpbnQgZGVsdGEgPSAwOwogCWludCBpLCBrOwogCiAJdTMyIHByb2R1Y2VyOwpAQCAtMjExOCw2ICsyMTE5LDE5IEBACiAJfQogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCS8qIDE0IGZyYWdzIHN1cHBvcnRlZCBmb3Igbm9ybWFsIHBhY2tldCBhbmQKKwkgKiAzMiBmcmFncyBzdXBwb3J0ZWQgZm9yIFRTTyBwYWNrZXQKKwkgKi8KKwlpZiAoIXNrYl9pc19nc28oc2tiKSAmJiBmcmFnX2NvdW50ID4gUUxDTklDX01BWF9GUkFHU19QRVJfVFgpIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgKGZyYWdfY291bnQgLSBRTENOSUNfTUFYX0ZSQUdTX1BFUl9UWCk7IGkrKykKKwkJCWRlbHRhICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKKworCQlpZiAoIV9fcHNrYl9wdWxsX3RhaWwoc2tiLCBkZWx0YSkpCisJCQlnb3RvIGRyb3BfcGFja2V0OworCisJCWZyYWdfY291bnQgPSAxICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl9CiAKIAkvKiA0IGZyYWdtZW50cyBwZXIgY21kIGRlcyAqLwogCW5vX29mX2Rlc2MgPSAoZnJhZ19jb3VudCArIDMpID4+IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwppbmRleCA0OWJmYTU4Li41YmIzMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKQEAgLTY2MCw3ICs2NjAsNyBAQAogLyogSWYgd2UncmUgcnVubmluZyB3aXRoIG11bHRpcGxlIE1TSS1YIHZlY3RvcnMgdGhlbiB3ZSBlbmFibGUgb24gdGhlIGZseS4KICAqIE90aGVyd2lzZSwgd2UgbWF5IGhhdmUgbXVsdGlwbGUgb3V0c3RhbmRpbmcgd29ya2VycyBhbmQgZG9uJ3Qgd2FudCB0bwogICogZW5hYmxlIHVudGlsIHRoZSBsYXN0IG9uZSBmaW5pc2hlcy4gSW4gdGhpcyBjYXNlLCB0aGUgaXJxX2NudCBnZXRzCi0gKiBpbmNyZW1lbnRlZCBldmVyeXRpbWUgd2UgcXVldWUgYSB3b3JrZXIgYW5kIGRlY3JlbWVudGVkIGV2ZXJ5dGltZQorICogaW5jcmVtZW50ZWQgZXZlcnkgdGltZSB3ZSBxdWV1ZSBhIHdvcmtlciBhbmQgZGVjcmVtZW50ZWQgZXZlcnkgdGltZQogICogYSB3b3JrZXIgZmluaXNoZXMuICBPbmNlIGl0IGhpdHMgemVybyB3ZSBlbmFibGUgdGhlIGludGVycnVwdC4KICAqLwogdTMyIHFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpCkBAIC0zMjk5LDcgKzMyOTksNyBAQAogICogd2lsbCBzZXJ2aWNlIGl0LiAgQW4gZXhhbXBsZSB3b3VsZCBiZSBpZiB0aGVyZSBhcmUKICAqIDIgdmVjdG9ycyAoc28gMiBSU1MgcmluZ3MpIGFuZCA4IFRYIGNvbXBsZXRpb24gcmluZ3MuCiAgKiBUaGlzIHdvdWxkIG1lYW4gdGhhdCB2ZWN0b3IgMCB3b3VsZCBzZXJ2aWNlIFJTUyByaW5nIDAKLSAqIGFuZCBUWCBjb21wZXRpb24gcmluZ3MgMCwxLDIgYW5kIDMuICBWZWN0b3IgMSB3b3VsZAorICogYW5kIFRYIGNvbXBsZXRpb24gcmluZ3MgMCwxLDIgYW5kIDMuICBWZWN0b3IgMSB3b3VsZAogICogc2VydmljZSBSU1MgcmluZyAxIGFuZCBUWCBjb21wbGV0aW9uIHJpbmdzIDQsNSw2IGFuZCA3LgogICovCiBzdGF0aWMgdm9pZCBxbF9zZXRfdHhfdmVjdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKQEAgLTQxNTIsNyArNDE1Miw3IEBACiAJaW50IGksIHN0YXR1czsKIAl1MzIgbGJxX2J1Zl9sZW47CiAKLQkvKiBXYWl0IGZvciBhbiBvdXN0YW5kaW5nIHJlc2V0IHRvIGNvbXBsZXRlLiAqLworCS8qIFdhaXQgZm9yIGFuIG91dHN0YW5kaW5nIHJlc2V0IHRvIGNvbXBsZXRlLiAqLwogCWlmICghdGVzdF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKSkgewogCQlpbnQgaSA9IDM7CiAJCXdoaWxlIChpLS0gJiYgIXRlc3RfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncykpIHsKQEAgLTQyODEsNyArNDI4MSw3IEBACiAJCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCQkgICAgKHFkZXYsIFJUX0lEWF9QUk9NSVNDVU9VU19TTE9ULCBSVF9JRFhfVkFMSUQsIDEpKSB7CiAJCQkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LAotCQkJCQkgICJGYWlsZWQgdG8gc2V0IHByb21pc2NvdXMgbW9kZS5cbiIpOworCQkJCQkgICJGYWlsZWQgdG8gc2V0IHByb21pc2N1b3VzIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKTsKIAkJCX0KQEAgLTQyOTEsNyArNDI5MSw3IEBACiAJCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCQkgICAgKHFkZXYsIFJUX0lEWF9QUk9NSVNDVU9VU19TTE9ULCBSVF9JRFhfVkFMSUQsIDApKSB7CiAJCQkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LAotCQkJCQkgICJGYWlsZWQgdG8gY2xlYXIgcHJvbWlzY291cyBtb2RlLlxuIik7CisJCQkJCSAgIkZhaWxlZCB0byBjbGVhciBwcm9taXNjdW91cyBtb2RlLlxuIik7CiAJCQl9IGVsc2UgewogCQkJCWNsZWFyX2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I2MDQwLmMgYi9kcml2ZXJzL25ldC9yNjA0MC5jCmluZGV4IGUzZWJkOTAuLjIwMGEzNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtNTM1LDcgKzUzNSw3IEBACiAJCQkvKiBSWCBkcmliYmxlICovCiAJCQlpZiAoZXJyICYgRFNDX1JYX0VSUl9EUkkpCiAJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQkJCS8qIEJ1ZmZlciBsZW5naHQgZXhjZWVkZWQgKi8KKwkJCS8qIEJ1ZmZlciBsZW5ndGggZXhjZWVkZWQgKi8KIAkJCWlmIChlcnIgJiBEU0NfUlhfRVJSX0JVRikKIAkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCS8qIFBhY2tldCB0b28gbG9uZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNDkzYjBkZS4uMzk3YzM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xNzAsNiArMTcwLDE2IEBACiB9OwogI3VuZGVmIF9SCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2Zpcm13YXJlX2luZm8geworCWludCBtYWNfdmVyc2lvbjsKKwljb25zdCBjaGFyICpmd19uYW1lOworfSBydGxfZmlybXdhcmVfaW5mb3NbXSA9IHsKKwl7IC5tYWNfdmVyc2lvbiA9IFJUTF9HSUdBX01BQ19WRVJfMjUsIC5md19uYW1lID0gRklSTVdBUkVfODE2OERfMSB9LAorCXsgLm1hY192ZXJzaW9uID0gUlRMX0dJR0FfTUFDX1ZFUl8yNiwgLmZ3X25hbWUgPSBGSVJNV0FSRV84MTY4RF8yIH0sCisJeyAubWFjX3ZlcnNpb24gPSBSVExfR0lHQV9NQUNfVkVSXzI5LCAuZndfbmFtZSA9IEZJUk1XQVJFXzgxMDVFXzEgfSwKKwl7IC5tYWNfdmVyc2lvbiA9IFJUTF9HSUdBX01BQ19WRVJfMzAsIC5md19uYW1lID0gRklSTVdBUkVfODEwNUVfMSB9Cit9OworCiBlbnVtIGNmZ192ZXJzaW9uIHsKIAlSVExfQ0ZHXzAgPSAweDAwLAogCVJUTF9DRkdfMSwKQEAgLTU2NSw2ICs1NzUsNyBAQAogCXUzMiBzYXZlZF93b2xvcHRzOwogCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKyNkZWZpbmUgUlRMX0ZJUk1XQVJFX1VOS05PV04JRVJSX1BUUigtRUFHQUlOKTsKIH07CiAKIE1PRFVMRV9BVVRIT1IoIlJlYWx0ZWsgYW5kIHRoZSBMaW51eCByODE2OSBjcmV3IDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPiIpOwpAQCAtMTc4OSwyNSArMTgwMCwyNiBAQAogCiBzdGF0aWMgdm9pZCBydGxfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQlyZWxlYXNlX2Zpcm13YXJlKHRwLT5mdyk7Ci0JdHAtPmZ3ID0gTlVMTDsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHRwLT5mdykpCisJCXJlbGVhc2VfZmlybXdhcmUodHAtPmZ3KTsKKwl0cC0+ZncgPSBSVExfRklSTVdBUkVfVU5LTk9XTjsKIH0KIAotc3RhdGljIGludCBydGxfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGNvbnN0IGNoYXIgKmZ3X25hbWUpCitzdGF0aWMgdm9pZCBydGxfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncgPSAmdHAtPmZ3OwotCWludCByYyA9ICEqZnc7Ci0KLQlpZiAocmMpIHsKLQkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3LCBmd19uYW1lLCAmdHAtPnBjaV9kZXYtPmRldik7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQl9CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IHRwLT5mdzsKIAogCS8qIFRPRE86IHJlbGVhc2UgZmlybXdhcmUgb25jZSBydGxfcGh5X3dyaXRlX2Z3IHNpZ25hbHMgZmFpbHVyZXMuICovCi0JcnRsX3BoeV93cml0ZV9mdyh0cCwgKmZ3KTsKLW91dDoKLQlyZXR1cm4gcmM7CisJaWYgKCFJU19FUlJfT1JfTlVMTChmdykpCisJCXJ0bF9waHlfd3JpdGVfZncodHAsIGZ3KTsKK30KKworc3RhdGljIHZvaWQgcnRsX2FwcGx5X2Zpcm13YXJlX2NvbmQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4IHJlZywgdTE2IHZhbCkKK3sKKwlpZiAocnRsX3JlYWRwaHkodHAsIHJlZykgIT0gdmFsKQorCQluZXRpZl93YXJuKHRwLCBodywgdHAtPmRldiwgImNoaXBzZXQgbm90IHJlYWR5IGZvciBmaXJtd2FyZVxuIik7CisJZWxzZQorCQlydGxfYXBwbHlfZmlybXdhcmUodHApOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5c19od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjI0NiwxMCArMjI1OCw4IEBACiAKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwNSk7CiAJcnRsX3dyaXRlcGh5KHRwLCAweDA1LCAweDAwMWIpOwotCWlmICgocnRsX3JlYWRwaHkodHAsIDB4MDYpICE9IDB4YmYwMCkgfHwKLQkgICAgKHJ0bF9hcHBseV9maXJtd2FyZSh0cCwgRklSTVdBUkVfODE2OERfMSkgPCAwKSkgewotCQluZXRpZl93YXJuKHRwLCBwcm9iZSwgdHAtPmRldiwgInVuYWJsZSB0byBhcHBseSBmaXJtd2FyZSBwYXRjaFxuIik7Ci0JfQorCisJcnRsX2FwcGx5X2Zpcm13YXJlX2NvbmQodHAsIE1JSV9FWFBBTlNJT04sIDB4YmYwMCk7CiAKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CiB9CkBAIC0yMzUxLDEwICsyMzYxLDggQEAKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA1KTsKIAlydGxfd3JpdGVwaHkodHAsIDB4MDUsIDB4MDAxYik7Ci0JaWYgKChydGxfcmVhZHBoeSh0cCwgMHgwNikgIT0gMHhiMzAwKSB8fAotCSAgICAocnRsX2FwcGx5X2Zpcm13YXJlKHRwLCBGSVJNV0FSRV84MTY4RF8yKSA8IDApKSB7Ci0JCW5ldGlmX3dhcm4odHAsIHByb2JlLCB0cC0+ZGV2LCAidW5hYmxlIHRvIGFwcGx5IGZpcm13YXJlIHBhdGNoXG4iKTsKLQl9CisKKwlydGxfYXBwbHlfZmlybXdhcmVfY29uZCh0cCwgTUlJX0VYUEFOU0lPTiwgMHhiMzAwKTsKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKIH0KQEAgLTI0NzQsOCArMjQ4Miw3IEBACiAJcnRsX3dyaXRlcGh5KHRwLCAweDE4LCAweDAzMTApOwogCW1zbGVlcCgxMDApOwogCi0JaWYgKHJ0bF9hcHBseV9maXJtd2FyZSh0cCwgRklSTVdBUkVfODEwNUVfMSkgPCAwKQotCQluZXRpZl93YXJuKHRwLCBwcm9iZSwgdHAtPmRldiwgInVuYWJsZSB0byBhcHBseSBmaXJtd2FyZSBwYXRjaFxuIik7CisJcnRsX2FwcGx5X2Zpcm13YXJlKHRwKTsKIAogCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQpAQCAtMzIzNyw2ICszMjQ0LDggQEAKIAl0cC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAJdHAtPnRpbWVyLmZ1bmN0aW9uID0gcnRsODE2OV9waHlfdGltZXI7CiAKKwl0cC0+ZncgPSBSVExfRklSTVdBUkVfVU5LTk9XTjsKKwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJfb3V0X21zaV80OwpAQCAtMzI4OCwxMCArMzI5NywxMCBAQAogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cC0+dGFzayk7CiAKLQlydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7Ci0KIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCisJcnRsX3JlbGVhc2VfZmlybXdhcmUodHApOworCiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpCiAJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZwZGV2LT5kZXYpOwogCkBAIC0zMzAzLDYgKzMzMTIsMzcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCWludCBpOworCisJLyogUmV0dXJuIGVhcmx5IGlmIHRoZSBmaXJtd2FyZSBpcyBhbHJlYWR5IGxvYWRlZCAvIGNhY2hlZC4gKi8KKwlpZiAoIUlTX0VSUih0cC0+ZncpKQorCQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bF9maXJtd2FyZV9pbmZvcyk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcnRsX2Zpcm13YXJlX2luZm8gKmluZm8gPSBydGxfZmlybXdhcmVfaW5mb3MgKyBpOworCisJCWlmIChpbmZvLT5tYWNfdmVyc2lvbiA9PSB0cC0+bWFjX3ZlcnNpb24pIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBpbmZvLT5md19uYW1lOworCQkJaW50IHJjOworCisJCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJnRwLT5mdywgbmFtZSwgJnRwLT5wY2lfZGV2LT5kZXYpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCW5ldGlmX3dhcm4odHAsIGlmdXAsIHRwLT5kZXYsICJ1bmFibGUgdG8gbG9hZCAiCisJCQkJCSJmaXJtd2FyZSBwYXRjaCAlcyAoJWQpXG4iLCBuYW1lLCByYyk7CisJCQkJZ290byBvdXRfZGlzYWJsZV9yZXF1ZXN0X2Zpcm13YXJlOworCQkJfQorCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dF9kaXNhYmxlX3JlcXVlc3RfZmlybXdhcmU6CisJdHAtPmZ3ID0gTlVMTDsKK291dDoKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQgcnRsODE2OV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzMzNCwxMSArMzM3NCwxMyBAQAogCiAJc21wX21iKCk7CiAKKwlydGxfcmVxdWVzdF9maXJtd2FyZSh0cCk7CisKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgcnRsODE2OV9pbnRlcnJ1cHQsCiAJCQkgICAgICh0cC0+ZmVhdHVyZXMgJiBSVExfRkVBVFVSRV9NU0kpID8gMCA6IElSUUZfU0hBUkVELAogCQkJICAgICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZXJyX3JlbGVhc2VfcmluZ18yOworCQlnb3RvIGVycl9yZWxlYXNlX2Z3XzI7CiAKIAluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOwogCkBAIC0zMzU5LDcgKzM0MDEsOCBAQAogb3V0OgogCXJldHVybiByZXR2YWw7CiAKLWVycl9yZWxlYXNlX3JpbmdfMjoKK2Vycl9yZWxlYXNlX2Z3XzI6CisJcnRsX3JlbGVhc2VfZmlybXdhcmUodHApOwogCXJ0bDgxNjlfcnhfY2xlYXIodHApOwogZXJyX2ZyZWVfcnhfMToKIAlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC0+UnhEZXNjQXJyYXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggMzU2ZTc0ZC4uMzM3YmRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtMjM1Myw3ICsyMzUzLDcgQEAKIAogCWlmIChzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWMpID09IE1BQ19STUFDX0VSUl9USU1FUikgewogCQkvKgotCQkgKiBEb250IHNlZSBsaW5rIHN0YXRlIGludGVycnVwdHMgaW5pdGFsbHkgb24gc29tZSBzd2l0Y2hlcywKKwkJICogRG9udCBzZWUgbGluayBzdGF0ZSBpbnRlcnJ1cHRzIGluaXRpYWxseSBvbiBzb21lIHN3aXRjaGVzLAogCQkgKiBzbyBkaXJlY3RseSBzY2hlZHVsaW5nIHRoZSBsaW5rIHN0YXRlIHRhc2sgaGVyZS4KIAkJICovCiAJCXNjaGVkdWxlX3dvcmsoJm5pYy0+c2V0X2xpbmtfdGFzayk7CkBAIC0zNTYzLDcgKzM1NjMsNyBAQAogCX0KIAogCS8qCi0JICogQ2xlYXIgc3B1cmlvdXMgRUNDIGludGVycnVwdHMgdGhhdCB3b3VsZCBoYXZlIG9jY3VyZWQgb24KKwkgKiBDbGVhciBzcHVyaW91cyBFQ0MgaW50ZXJydXB0cyB0aGF0IHdvdWxkIGhhdmUgb2NjdXJyZWQgb24KIAkgKiBYRlJBTUUgSUkgY2FyZHMgYWZ0ZXIgcmVzZXQuCiAJICovCiAJaWYgKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CkBAIC00MDY1LDcgKzQwNjUsNyBAQAogICogIERlc2NyaXB0aW9uIDoKICAqICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBUeCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLiBTMklPIE5JQyBzdXBwb3J0cwogICogIGNlcnRhaW4gcHJvdG9jb2wgYXNzaXN0IGZlYXR1cmVzIG9uIFR4IHNpZGUsIG5hbWVseSAgQ1NPLCBTL0csIExTTy4KLSAqICBOT1RFOiB3aGVuIGRldmljZSBjYW50IHF1ZXVlIHRoZSBwa3QsanVzdCB0aGUgdHJhbnNfc3RhcnQgdmFyaWFibGUgd2lsbAorICogIE5PVEU6IHdoZW4gZGV2aWNlIGNhbid0IHF1ZXVlIHRoZSBwa3QsanVzdCB0aGUgdHJhbnNfc3RhcnQgdmFyaWFibGUgd2lsbAogICogIG5vdCBiZSB1cGFkdGVkLgogICogIFJldHVybiB2YWx1ZToKICAqICAwIG9uIHN1Y2Nlc3MgJiAxIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmggYi9kcml2ZXJzL25ldC9zMmlvLmgKaW5kZXggN2QxNjAzMC4uMmQxNDQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5oCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uaApAQCAtMzc2LDcgKzM3Niw3IEBACiAvKiBNYWludGFpbnMgUGVyIEZJRk8gcmVsYXRlZCBpbmZvcm1hdGlvbi4gKi8KIHN0cnVjdCB0eF9maWZvX2NvbmZpZyB7CiAjZGVmaW5lCU1BWF9BVkFJTEFCTEVfVFhEUwk4MTkyCi0JdTMyIGZpZm9fbGVuOwkJLyogc3BlY2lmaWVzIGxlbiBvZiBGSUZPIHVwdG8gODE5MiwgaWUgbm8gb2YgVHhETHMgKi8KKwl1MzIgZmlmb19sZW47CQkvKiBzcGVjaWZpZXMgbGVuIG9mIEZJRk8gdXAgdG8gODE5MiwgaWUgbm8gb2YgVHhETHMgKi8KIC8qIFByaW9yaXR5IGRlZmluaXRpb24gKi8KICNkZWZpbmUgVFhfRklGT19QUklfMCAgICAgICAgICAgICAgIDAJLypIaWdoZXN0ICovCiAjZGVmaW5lIFRYX0ZJRk9fUFJJXzEgICAgICAgICAgICAgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggZDg5MDY3OS4uYTNjMmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtMzI4LDcgKzMyOCw4IEBACiAgKiBwcm9jZXNzaW5nIHRvIGZpbmlzaCwgdGhlbiBkaXJlY3RseSBwb2xsIChhbmQgYWNrICkgdGhlIGV2ZW50cS4KICAqIEZpbmFsbHkgcmVlbmFibGUgTkFQSSBhbmQgaW50ZXJydXB0cy4KICAqCi0gKiBTaW5jZSB3ZSBhcmUgdG91Y2hpbmcgaW50ZXJydXB0cyB0aGUgY2FsbGVyIHNob3VsZCBob2xkIHRoZSBzdXNwZW5kIGxvY2sKKyAqIFRoaXMgaXMgZm9yIHVzZSBvbmx5IGR1cmluZyBhIGxvb3BiYWNrIHNlbGYtdGVzdC4gIEl0IG11c3Qgbm90CisgKiBkZWxpdmVyIGFueSBwYWNrZXRzIHVwIHRoZSBzdGFjayBhcyB0aGlzIGNhbiByZXN1bHQgaW4gZGVhZGxvY2suCiAgKi8KIHZvaWQgZWZ4X3Byb2Nlc3NfY2hhbm5lbF9ub3coc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQogewpAQCAtMzM2LDYgKzMzNyw3IEBACiAKIAlCVUdfT04oY2hhbm5lbC0+Y2hhbm5lbCA+PSBlZngtPm5fY2hhbm5lbHMpOwogCUJVR19PTighY2hhbm5lbC0+ZW5hYmxlZCk7CisJQlVHX09OKCFlZngtPmxvb3BiYWNrX3NlbGZ0ZXN0KTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgd2FpdCBmb3IgSVNScyB0byBjb21wbGV0ZSAqLwogCWVmeF9uaWNfZGlzYWJsZV9pbnRlcnJ1cHRzKGVmeCk7CkBAIC0xNDM2LDcgKzE0MzgsNyBAQAogCSAqIHJlc3RhcnQgdGhlIHRyYW5zbWl0IGludGVyZmFjZSBlYXJseSBzbyB0aGUgd2F0Y2hkb2cgdGltZXIgc3RvcHMgKi8KIAllZnhfc3RhcnRfcG9ydChlZngpOwogCi0JaWYgKGVmeF9kZXZfcmVnaXN0ZXJlZChlZngpKQorCWlmIChlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSAmJiAhZWZ4LT5wb3J0X2luaGliaXRlZCkKIAkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGVmeC0+bmV0X2Rldik7CiAKIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKaW5kZXggNzM0ZmNmYi4uZDk2YjIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJZWZ4X293b3JkX3QgbWRfc3RhdDsKIAlpbnQgY291bnQ7CiAKLQkvKiB3YWl0IHVwdG8gNTBtcyAtIHRha2VuIG1heCBmcm9tIGRhdGFzaGVldCAqLworCS8qIHdhaXQgdXAgdG8gNTBtcyAtIHRha2VuIG1heCBmcm9tIGRhdGFzaGVldCAqLwogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDUwMDA7IGNvdW50KyspIHsKIAkJZWZ4X3JlYWRvKGVmeCwgJm1kX3N0YXQsIEZSX0FCX01EX1NUQVQpOwogCQlpZiAoRUZYX09XT1JEX0ZJRUxEKG1kX3N0YXQsIEZSRl9BQl9NRF9CU1kpID09IDApIHsKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAKIAkJCXJldHVybiAwOwogCQl9Ci0JfSB3aGlsZSAoKytjb3VudCA8IDIwKTsJLyogd2FpdCB1cHRvIDAuNCBzZWMgKi8KKwl9IHdoaWxlICgrK2NvdW50IDwgMjApOwkvKiB3YWl0IHVwIHRvIDAuNCBzZWMgKi8KIAogCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgU1JBTSByZXNldFxuIik7CiAJcmV0dXJuIC1FVElNRURPVVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvaW8uaCBiL2RyaXZlcnMvbmV0L3NmYy9pby5oCmluZGV4IGQ5ZDhjMmUuLmNjOTc4ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9pby5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9pby5oCkBAIC0xNTIsNiArMTUyLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAJdmFsdWUtPnUzMlswXSA9IF9lZnhfcmVhZGQoZWZ4LCByZWcgKyAwKTsKKwlybWIoKTsKIAl2YWx1ZS0+dTMyWzFdID0gX2VmeF9yZWFkZChlZngsIHJlZyArIDQpOwogCXZhbHVlLT51MzJbMl0gPSBfZWZ4X3JlYWRkKGVmeCwgcmVnICsgOCk7CiAJdmFsdWUtPnUzMlszXSA9IF9lZnhfcmVhZGQoZWZ4LCByZWcgKyAxMik7CkBAIC0xNzQsNiArMTc1LDcgQEAKIAl2YWx1ZS0+dTY0WzBdID0gKF9fZm9yY2UgX19sZTY0KV9fcmF3X3JlYWRxKG1lbWJhc2UgKyBhZGRyKTsKICNlbHNlCiAJdmFsdWUtPnUzMlswXSA9IChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChtZW1iYXNlICsgYWRkcik7CisJcm1iKCk7CiAJdmFsdWUtPnUzMlsxXSA9IChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChtZW1iYXNlICsgYWRkciArIDQpOwogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKaW5kZXggNWUxMThmMC4uM2RkNDVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCkBAIC01MCw2ICs1MCwyMCBAQAogCXJldHVybiAmbmljX2RhdGEtPm1jZGk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWZ4X21jZGlfcmVhZGQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZWZ4X2R3b3JkX3QgKnZhbHVlLCB1bnNpZ25lZCByZWcpCit7CisJc3RydWN0IHNpZW5hX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CisJdmFsdWUtPnUzMlswXSA9IChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChuaWNfZGF0YS0+bWNkaV9zbWVtICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZnhfbWNkaV93cml0ZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgY29uc3QgZWZ4X2R3b3JkX3QgKnZhbHVlLCB1bnNpZ25lZCByZWcpCit7CisJc3RydWN0IHNpZW5hX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CisJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMil2YWx1ZS0+dTMyWzBdLCBuaWNfZGF0YS0+bWNkaV9zbWVtICsgcmVnKTsKK30KKwogdm9pZCBlZnhfbWNkaV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IGVmeF9tY2RpX2lmYWNlICptY2RpOwpAQCAtNzAsOCArODQsOCBAQAogCQkJICAgIGNvbnN0IHU4ICppbmJ1Ziwgc2l6ZV90IGlubGVuKQogewogCXN0cnVjdCBlZnhfbWNkaV9pZmFjZSAqbWNkaSA9IGVmeF9tY2RpKGVmeCk7Ci0JdW5zaWduZWQgcGR1ID0gRlJfQ1pfTUNfVFJFR19TTUVNICsgTUNESV9QRFUoZWZ4KTsKLQl1bnNpZ25lZCBkb29yYmVsbCA9IEZSX0NaX01DX1RSRUdfU01FTSArIE1DRElfRE9PUkJFTEwoZWZ4KTsKKwl1bnNpZ25lZCBwZHUgPSBNQ0RJX1BEVShlZngpOworCXVuc2lnbmVkIGRvb3JiZWxsID0gTUNESV9ET09SQkVMTChlZngpOwogCXVuc2lnbmVkIGludCBpOwogCWVmeF9kd29yZF90IGhkcjsKIAl1MzIgeGZsYWdzLCBzZXFubzsKQEAgLTkyLDMwICsxMDYsMjggQEAKIAkJCSAgICAgTUNESV9IRUFERVJfU0VRLCBzZXFubywKIAkJCSAgICAgTUNESV9IRUFERVJfWEZMQUdTLCB4ZmxhZ3MpOwogCi0JZWZ4X3dyaXRlZChlZngsICZoZHIsIHBkdSk7CisJZWZ4X21jZGlfd3JpdGVkKGVmeCwgJmhkciwgcGR1KTsKIAotCWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSArPSA0KSB7Ci0JCV9lZnhfd3JpdGVkKGVmeCwgKigoX19sZTMyICopKGluYnVmICsgaSkpLCBwZHUgKyA0ICsgaSk7Ci0JCS8qIHVzZSB3bWIoKSB3aXRoaW4gbG9vcCB0byBpbmhpYml0IHdyaXRlIGNvbWJpbmluZyAqLwotCQl3bWIoKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGlubGVuOyBpICs9IDQpCisJCWVmeF9tY2RpX3dyaXRlZChlZngsIChjb25zdCBlZnhfZHdvcmRfdCAqKShpbmJ1ZiArIGkpLAorCQkJCXBkdSArIDQgKyBpKTsKIAogCS8qIHJpbmcgdGhlIGRvb3JiZWxsIHdpdGggYSBkaXN0aW5jdGl2ZSB2YWx1ZSAqLwotCV9lZnhfd3JpdGVkKGVmeCwgKF9fZm9yY2UgX19sZTMyKSAweDQ1Nzg5YWJjLCBkb29yYmVsbCk7Ci0Jd21iKCk7CisJRUZYX1BPUFVMQVRFX0RXT1JEXzEoaGRyLCBFRlhfRFdPUkRfMCwgMHg0NTc4OWFiYyk7CisJZWZ4X21jZGlfd3JpdGVkKGVmeCwgJmhkciwgZG9vcmJlbGwpOwogfQogCiBzdGF0aWMgdm9pZCBlZnhfbWNkaV9jb3B5b3V0KHN0cnVjdCBlZnhfbmljICplZngsIHU4ICpvdXRidWYsIHNpemVfdCBvdXRsZW4pCiB7CiAJc3RydWN0IGVmeF9tY2RpX2lmYWNlICptY2RpID0gZWZ4X21jZGkoZWZ4KTsKLQl1bnNpZ25lZCBpbnQgcGR1ID0gRlJfQ1pfTUNfVFJFR19TTUVNICsgTUNESV9QRFUoZWZ4KTsKKwl1bnNpZ25lZCBpbnQgcGR1ID0gTUNESV9QRFUoZWZ4KTsKIAlpbnQgaTsKIAogCUJVR19PTihhdG9taWNfcmVhZCgmbWNkaS0+c3RhdGUpID09IE1DRElfU1RBVEVfUVVJRVNDRU5UKTsKIAlCVUdfT04ob3V0bGVuICYgMyB8fCBvdXRsZW4gPj0gMHgxMDApOwogCiAJZm9yIChpID0gMDsgaSA8IG91dGxlbjsgaSArPSA0KQotCQkqKChfX2xlMzIgKikob3V0YnVmICsgaSkpID0gX2VmeF9yZWFkZChlZngsIHBkdSArIDQgKyBpKTsKKwkJZWZ4X21jZGlfcmVhZGQoZWZ4LCAoZWZ4X2R3b3JkX3QgKikob3V0YnVmICsgaSksIHBkdSArIDQgKyBpKTsKIH0KIAogc3RhdGljIGludCBlZnhfbWNkaV9wb2xsKHN0cnVjdCBlZnhfbmljICplZngpCkBAIC0xMjMsNyArMTM1LDcgQEAKIAlzdHJ1Y3QgZWZ4X21jZGlfaWZhY2UgKm1jZGkgPSBlZnhfbWNkaShlZngpOwogCXVuc2lnbmVkIGludCB0aW1lLCBmaW5pc2g7CiAJdW5zaWduZWQgaW50IHJlc3BzZXEsIHJlc3BjbWQsIGVycm9yOwotCXVuc2lnbmVkIGludCBwZHUgPSBGUl9DWl9NQ19UUkVHX1NNRU0gKyBNQ0RJX1BEVShlZngpOworCXVuc2lnbmVkIGludCBwZHUgPSBNQ0RJX1BEVShlZngpOwogCXVuc2lnbmVkIGludCByYywgc3BpbnM7CiAJZWZ4X2R3b3JkX3QgcmVnOwogCkBAIC0xNDksOCArMTYxLDcgQEAKIAogCQl0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAotCQlybWIoKTsKLQkJZWZ4X3JlYWRkKGVmeCwgJnJlZywgcGR1KTsKKwkJZWZ4X21jZGlfcmVhZGQoZWZ4LCAmcmVnLCBwZHUpOwogCiAJCS8qIEFsbCAxJ3MgaW5kaWNhdGVzIHRoYXQgc2hhcmVkIG1lbW9yeSBpcyBpbiByZXNldCAoYW5kIGlzCiAJCSAqIG5vdCBhIHZhbGlkIGhlYWRlcikuIFdhaXQgZm9yIGl0IHRvIGNvbWUgb3V0IHJlc2V0IGJlZm9yZQpAQCAtMTc3LDcgKzE4OCw3IEBACiAJCQkgIHJlc3BzZXEsIG1jZGktPnNlcW5vKTsKIAkJcmMgPSBFSU87CiAJfSBlbHNlIGlmIChlcnJvcikgewotCQllZnhfcmVhZGQoZWZ4LCAmcmVnLCBwZHUgKyA0KTsKKwkJZWZ4X21jZGlfcmVhZGQoZWZ4LCAmcmVnLCBwZHUgKyA0KTsKIAkJc3dpdGNoIChFRlhfRFdPUkRfRklFTEQocmVnLCBFRlhfRFdPUkRfMCkpIHsKICNkZWZpbmUgVFJBTlNMQVRFX0VSUk9SKG5hbWUpCQkJCQlcCiAJCWNhc2UgTUNfQ01EX0VSUl8gIyMgbmFtZToJCQlcCkBAIC0yMTEsMjEgKzIyMiwyMSBAQAogLyogVGVzdCBhbmQgY2xlYXIgTUMtcmVib290ZWQgZmxhZyBmb3IgdGhpcyBwb3J0L2Z1bmN0aW9uICovCiBpbnQgZWZ4X21jZGlfcG9sbF9yZWJvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQl1bnNpZ25lZCBpbnQgYWRkciA9IEZSX0NaX01DX1RSRUdfU01FTSArIE1DRElfUkVCT09UX0ZMQUcoZWZ4KTsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IE1DRElfUkVCT09UX0ZMQUcoZWZ4KTsKIAllZnhfZHdvcmRfdCByZWc7CiAJdWludDMyX3QgdmFsdWU7CiAKIAlpZiAoZWZ4X25pY19yZXYoZWZ4KSA8IEVGWF9SRVZfU0lFTkFfQTApCiAJCXJldHVybiBmYWxzZTsKIAotCWVmeF9yZWFkZChlZngsICZyZWcsIGFkZHIpOworCWVmeF9tY2RpX3JlYWRkKGVmeCwgJnJlZywgYWRkcik7CiAJdmFsdWUgPSBFRlhfRFdPUkRfRklFTEQocmVnLCBFRlhfRFdPUkRfMCk7CiAKIAlpZiAodmFsdWUgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlFRlhfWkVST19EV09SRChyZWcpOwotCWVmeF93cml0ZWQoZWZ4LCAmcmVnLCBhZGRyKTsKKwllZnhfbWNkaV93cml0ZWQoZWZ4LCAmcmVnLCBhZGRyKTsKIAogCWlmICh2YWx1ZSA9PSBNQ19TVEFUVVNfRFdPUkRfQVNTRVJUKQogCQlyZXR1cm4gLUVJTlRSOwpAQCAtNDUzLDcgKzQ2NCw3IEBACiAJICoKIAkgKiBUaGVyZSdzIGEgcmFjZSBoZXJlIHdpdGggZWZ4X21jZGlfcnBjKCksIGJlY2F1c2Ugd2UgbWlnaHQgcmVjZWl2ZQogCSAqIGEgUkVCT09UIGV2ZW50ICpiZWZvcmUqIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvcGllZCBvdXQuIEluIHBvbGxlZAotCSAqIG1vZGUgKGR1cmluZyBzdGFydHVwKSB0aGlzIGlzIGlycmVsZXZlbnQsIGJlY2F1c2UgZWZ4X21jZGlfY29tcGxldGUoKQorCSAqIG1vZGUgKGR1cmluZyBzdGFydHVwKSB0aGlzIGlzIGlycmVsZXZhbnQsIGJlY2F1c2UgZWZ4X21jZGlfY29tcGxldGUoKQogCSAqIGlzIGlnbm9yZWQuIEluIGV2ZW50IG1vZGUsIHRoaXMgY29uZGl0aW9uIGlzIGp1c3QgYW4gZWRnZS1jYXNlIG9mCiAJICogcmVjZWl2aW5nIGEgUkVCT09UIGV2ZW50IGFmdGVyIHBvc3RpbmcgdGhlIE1DREkgcmVxdWVzdC4gRGlkIHRoZSBtYwogCSAqIHJlYm9vdCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNvcHlvdXQ/IFRoZSBiZXN0IHdlIGNhbiBkbyBhbHdheXMgaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3Bjb2wuaCBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3Bjb2wuaAppbmRleCBiODZhMTVmLi40MWZlMDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9wY29sLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGNvbC5oCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqCiAgKiBJZiBDb2RlPT1DTURET05FLCB0aGVuIHRoZSBmaWVsZHMgYXJlIGZ1cnRoZXIgaW50ZXJwcmV0ZWQgYXM6CiAgKgotICogICAtIExFVkVMPT1JTkZPICAgIENvbW1hbmQgc3VjY2VkZWQKKyAqICAgLSBMRVZFTD09SU5GTyAgICBDb21tYW5kIHN1Y2NlZWRlZAogICogICAtIExFVkVMPT1FUlIgICAgIENvbW1hbmQgZmFpbGVkCiAgKgogICogICAgMCAgICAgOCAgICAgICAgIDE2ICAgICAgMjQgICAgIDMyCkBAIC01NzIsNyArNTcyLDcgQEAKICAgKDQqKF9udW13b3JkcykpCiAKIC8qIE1DX0NNRF9TRVRfUkFORF9TRUVEOgotICogU2V0IHRoZSAxNmJ5dGUgc2VlZCBmb3IgdGhlIE1DIHBzdWVkby1yYW5kb20gZ2VuZXJhdG9yCisgKiBTZXQgdGhlIDE2Ynl0ZSBzZWVkIGZvciB0aGUgTUMgcHNldWRvLXJhbmRvbSBnZW5lcmF0b3IKICAqLwogI2RlZmluZSBNQ19DTURfU0VUX1JBTkRfU0VFRCAweDFhCiAjZGVmaW5lIE1DX0NNRF9TRVRfUkFORF9TRUVEX0lOX0xFTiAxNgpAQCAtMTE2Miw3ICsxMTYyLDcgQEAKICNkZWZpbmUgTUNfQ01EX01BQ19TVEFUU19DTURfQ0xFQVJfV0lEVEggMQogI2RlZmluZSBNQ19DTURfTUFDX1NUQVRTX0NNRF9QRVJJT0RJQ19DSEFOR0VfTEJOIDIKICNkZWZpbmUgTUNfQ01EX01BQ19TVEFUU19DTURfUEVSSU9ESUNfQ0hBTkdFX1dJRFRIIDEKLS8qIFJlbWFpbmluZyBQRVJJT0QqIGZpZWxkcyBvbmx5IHJlbGV2ZW50IHdoZW4gUEVSSU9ESUNfQ0hBTkdFIGlzIHNldCAqLworLyogUmVtYWluaW5nIFBFUklPRCogZmllbGRzIG9ubHkgcmVsZXZhbnQgd2hlbiBQRVJJT0RJQ19DSEFOR0UgaXMgc2V0ICovCiAjZGVmaW5lIE1DX0NNRF9NQUNfU1RBVFNfQ01EX1BFUklPRElDX0VOQUJMRV9MQk4gMwogI2RlZmluZSBNQ19DTURfTUFDX1NUQVRTX0NNRF9QRVJJT0RJQ19FTkFCTEVfV0lEVEggMQogI2RlZmluZSBNQ19DTURfTUFDX1NUQVRTX0NNRF9QRVJJT0RJQ19DTEVBUl9MQk4gNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwppbmRleCBlYzNmNzQwLi43ZTNjNjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJc3RydWN0IGVmeF9tY2RpX3BoeV9kYXRhICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKIAl1MzIgcm10YWR2OwogCi0JLyogVGhlIGxpbmsgcGFydG5lciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVsZXZlbnQgaWYgdGhlCisJLyogVGhlIGxpbmsgcGFydG5lciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVsZXZhbnQgaWYgdGhlCiAJICogbGluayBzdXBwb3J0cyBmbG93IGNvbnRyb2wgYXV0b25lZ290aWF0aW9uICovCiAJaWYgKH5waHlfY2ZnLT5zdXBwb3J0ZWRfY2FwICYgKDEgPDwgTUNfQ01EX1BIWV9DQVBfQU5fTEJOKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKaW5kZXggMjE1ZDVjNS4uMTkxYTMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCkBAIC0zMzAsNyArMzMwLDYgQEAKICAqIEBldmVudHFfbWFzazogRXZlbnQgcXVldWUgcG9pbnRlciBtYXNrCiAgKiBAZXZlbnRxX3JlYWRfcHRyOiBFdmVudCBxdWV1ZSByZWFkIHBvaW50ZXIKICAqIEBsYXN0X2V2ZW50cV9yZWFkX3B0cjogTGFzdCBldmVudCBxdWV1ZSByZWFkIHBvaW50ZXIgdmFsdWUuCi0gKiBAbWFnaWNfY291bnQ6IEV2ZW50IHF1ZXVlIHRlc3QgZXZlbnQgY291bnQKICAqIEBpcnFfY291bnQ6IE51bWJlciBvZiBJUlFzIHNpbmNlIGxhc3QgYWRhcHRpdmUgbW9kZXJhdGlvbiBkZWNpc2lvbgogICogQGlycV9tb2Rfc2NvcmU6IElSUSBtb2RlcmF0aW9uIHNjb3JlCiAgKiBAcnhfYWxsb2NfbGV2ZWw6IFdhdGVybWFyayBiYXNlZCBoZXVyaXN0aWMgY291bnRlciBmb3IgcHVzaGluZyBkZXNjcmlwdG9ycwpAQCAtMzYwLDcgKzM1OSw2IEBACiAJdW5zaWduZWQgaW50IGV2ZW50cV9tYXNrOwogCXVuc2lnbmVkIGludCBldmVudHFfcmVhZF9wdHI7CiAJdW5zaWduZWQgaW50IGxhc3RfZXZlbnRxX3JlYWRfcHRyOwotCXVuc2lnbmVkIGludCBtYWdpY19jb3VudDsKIAogCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CiAJdW5zaWduZWQgaW50IGlycV9tb2Rfc2NvcmU7CkBAIC02NzAsNyArNjY4LDcgQEAKICAqIEBpcnFfemVyb19jb3VudDogTnVtYmVyIG9mIGxlZ2FjeSBJUlFzIHNlZW4gd2l0aCBxdWV1ZSBmbGFncyA9PSAwCiAgKiBAZmF0YWxfaXJxX2xldmVsOiBJUlEgbGV2ZWwgKGJpdCBudW1iZXIpIHVzZWQgZm9yIHNlcmlvdXMgZXJyb3JzCiAgKiBAbXRkX2xpc3Q6IExpc3Qgb2YgTVREcyBhdHRhY2hlZCB0byB0aGUgTklDCi0gKiBAbmljX2RhdGE6IEhhcmR3YXJlIGRlcGVuZGFudCBzdGF0ZQorICogQG5pY19kYXRhOiBIYXJkd2FyZSBkZXBlbmRlbnQgc3RhdGUKICAqIEBtYWNfbG9jazogTUFDIGFjY2VzcyBsb2NrLiBQcm90ZWN0cyBAcG9ydF9lbmFibGVkLCBAcGh5X21vZGUsCiAgKglAcG9ydF9pbmhpYml0ZWQsIGVmeF9tb25pdG9yKCkgYW5kIGVmeF9yZWNvbmZpZ3VyZV9wb3J0KCkKICAqIEBwb3J0X2VuYWJsZWQ6IFBvcnQgZW5hYmxlZCBpbmRpY2F0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmljLmMgYi9kcml2ZXJzL25ldC9zZmMvbmljLmMKaW5kZXggZTgzOTY2MS4uOWIyOWE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwpAQCAtODQsNyArODQsOCBAQAogc3RhdGljIGlubGluZSBlZnhfcXdvcmRfdCAqZWZ4X2V2ZW50KHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKLQlyZXR1cm4gKChlZnhfcXdvcmRfdCAqKSAoY2hhbm5lbC0+ZXZlbnRxLmFkZHIpKSArIGluZGV4OworCXJldHVybiAoKGVmeF9xd29yZF90ICopIChjaGFubmVsLT5ldmVudHEuYWRkcikpICsKKwkJKGluZGV4ICYgY2hhbm5lbC0+ZXZlbnRxX21hc2spOwogfQogCiAvKiBTZWUgaWYgYW4gZXZlbnQgaXMgcHJlc2VudApAQCAtNjczLDcgKzY3NCw4IEBACiAJZWZ4X2R3b3JkX3QgcmVnOwogCXN0cnVjdCBlZnhfbmljICplZnggPSBjaGFubmVsLT5lZng7CiAKLQlFRlhfUE9QVUxBVEVfRFdPUkRfMShyZWcsIEZSRl9BWl9FVlFfUlBUUiwgY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyKTsKKwlFRlhfUE9QVUxBVEVfRFdPUkRfMShyZWcsIEZSRl9BWl9FVlFfUlBUUiwKKwkJCSAgICAgY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyICYgY2hhbm5lbC0+ZXZlbnRxX21hc2spOwogCWVmeF93cml0ZWRfdGFibGUoZWZ4LCAmcmVnLCBlZngtPnR5cGUtPmV2cV9ycHRyX3RibF9iYXNlLAogCQkJIGNoYW5uZWwtPmNoYW5uZWwpOwogfQpAQCAtOTA4LDcgKzkxMCw3IEBACiAKIAljb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0FaX0RSVl9HRU5fRVZfTUFHSUMpOwogCWlmIChjb2RlID09IEVGWF9DSEFOTkVMX01BR0lDX1RFU1QoY2hhbm5lbCkpCi0JCSsrY2hhbm5lbC0+bWFnaWNfY291bnQ7CisJCTsgLyogaWdub3JlICovCiAJZWxzZSBpZiAoY29kZSA9PSBFRlhfQ0hBTk5FTF9NQUdJQ19GSUxMKGNoYW5uZWwpKQogCQkvKiBUaGUgcXVldWUgbXVzdCBiZSBlbXB0eSwgc28gd2Ugd29uJ3QgcmVjZWl2ZSBhbnkgcngKIAkJICogZXZlbnRzLCBzbyBlZnhfcHJvY2Vzc19jaGFubmVsKCkgd29uJ3QgcmVmaWxsIHRoZQpAQCAtMTAxNSw4ICsxMDE3LDcgQEAKIAkJLyogQ2xlYXIgdGhpcyBldmVudCBieSBtYXJraW5nIGl0IGFsbCBvbmVzICovCiAJCUVGWF9TRVRfUVdPUkQoKnBfZXZlbnQpOwogCi0JCS8qIEluY3JlbWVudCByZWFkIHBvaW50ZXIgKi8KLQkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIGNoYW5uZWwtPmV2ZW50cV9tYXNrOworCQkrK3JlYWRfcHRyOwogCiAJCWV2X2NvZGUgPSBFRlhfUVdPUkRfRklFTEQoZXZlbnQsIEZTRl9BWl9FVl9DT0RFKTsKIApAQCAtMTA2MCw2ICsxMDYxLDEzIEBACiAJcmV0dXJuIHNwZW50OwogfQogCisvKiBDaGVjayB3aGV0aGVyIGFuIGV2ZW50IGlzIHByZXNlbnQgaW4gdGhlIGV2ZW50cSBhdCB0aGUgY3VycmVudAorICogcmVhZCBwb2ludGVyLiAgT25seSB1c2VmdWwgZm9yIHNlbGYtdGVzdC4KKyAqLworYm9vbCBlZnhfbmljX2V2ZW50X3ByZXNlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQoreworCXJldHVybiBlZnhfZXZlbnRfcHJlc2VudChlZnhfZXZlbnQoY2hhbm5lbCwgY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyKSk7Cit9CiAKIC8qIEFsbG9jYXRlIGJ1ZmZlciB0YWJsZSBlbnRyaWVzIGZvciBldmVudCBxdWV1ZSAqLwogaW50IGVmeF9uaWNfcHJvYmVfZXZlbnRxKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCkKQEAgLTExNjUsNyArMTE3Myw3IEBACiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CiAJdW5zaWduZWQgaW50IHJlYWRfcHRyID0gY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyOwotCXVuc2lnbmVkIGludCBlbmRfcHRyID0gKHJlYWRfcHRyIC0gMSkgJiBjaGFubmVsLT5ldmVudHFfbWFzazsKKwl1bnNpZ25lZCBpbnQgZW5kX3B0ciA9IHJlYWRfcHRyICsgY2hhbm5lbC0+ZXZlbnRxX21hc2sgLSAxOwogCiAJZG8gewogCQllZnhfcXdvcmRfdCAqZXZlbnQgPSBlZnhfZXZlbnQoY2hhbm5lbCwgcmVhZF9wdHIpOwpAQCAtMTIwNSw3ICsxMjEzLDcgQEAKIAkJICogaXQncyBvayB0byB0aHJvdyBhd2F5IGV2ZXJ5IG5vbi1mbHVzaCBldmVudCAqLwogCQlFRlhfU0VUX1FXT1JEKCpldmVudCk7CiAKLQkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIGNoYW5uZWwtPmV2ZW50cV9tYXNrOworCQkrK3JlYWRfcHRyOwogCX0gd2hpbGUgKHJlYWRfcHRyICE9IGVuZF9wdHIpOwogCiAJY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyID0gcmVhZF9wdHI7CkBAIC0xOTI5LDYgKzE5MzcsMTMgQEAKIAogCQlzaXplID0gbWluX3Qoc2l6ZV90LCB0YWJsZS0+c3RlcCwgMTYpOwogCisJCWlmICh0YWJsZS0+b2Zmc2V0ID49IGVmeC0+dHlwZS0+bWVtX21hcF9zaXplKSB7CisJCQkvKiBObyBsb25nZXIgbWFwcGVkOyByZXR1cm4gZHVtbXkgZGF0YSAqLworCQkJbWVtY3B5KGJ1ZiwgIlx4ZGVceGMwXHhhZFx4ZGUiLCA0KTsKKwkJCWJ1ZiArPSB0YWJsZS0+cm93cyAqIHNpemU7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+cm93czsgaSsrKSB7CiAJCQlzd2l0Y2ggKHRhYmxlLT5zdGVwKSB7CiAJCQljYXNlIDQ6IC8qIDMyLWJpdCByZWdpc3RlciBvciBTUkFNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmljLmggYi9kcml2ZXJzL25ldC9zZmMvbmljLmgKaW5kZXggZDlkZTFiNi4uZDkxNzAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuaApAQCAtMTQzLDEwICsxNDMsMTIgQEAKIC8qKgogICogc3RydWN0IHNpZW5hX25pY19kYXRhIC0gU2llbmEgTklDIHN0YXRlCiAgKiBAbWNkaTogTWFuYWdlbWVudC1Db250cm9sbGVyLXRvLURyaXZlciBJbnRlcmZhY2UKKyAqIEBtY2RpX3NtZW06IE1DREkgc2hhcmVkIG1lbW9yeSBtYXBwaW5nLiBUaGUgbWFwcGluZyBpcyBhbHdheXMgdW5jYWNoZWFibGUuCiAgKiBAd29sX2ZpbHRlcl9pZDogV2FrZS1vbi1MQU4gcGFja2V0IGZpbHRlciBpZAogICovCiBzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgewogCXN0cnVjdCBlZnhfbWNkaV9pZmFjZSBtY2RpOworCXZvaWQgX19pb21lbSAqbWNkaV9zbWVtOwogCWludCB3b2xfZmlsdGVyX2lkOwogfTsKIApAQCAtMTg0LDYgKzE4Niw3IEBACiBleHRlcm4gdm9pZCBlZnhfbmljX3JlbW92ZV9ldmVudHEoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKTsKIGV4dGVybiBpbnQgZWZ4X25pY19wcm9jZXNzX2V2ZW50cShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsIGludCByeF9xdW90YSk7CiBleHRlcm4gdm9pZCBlZnhfbmljX2V2ZW50cV9yZWFkX2FjayhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOworZXh0ZXJuIGJvb2wgZWZ4X25pY19ldmVudF9wcmVzZW50KHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CiAKIC8qIE1BQy9QSFkgKi8KIGV4dGVybiB2b2lkIGZhbGNvbl9kcmFpbl90eF9maWZvKHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwppbmRleCBhMGY0OWIzLi41MGFkM2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwpAQCAtMTMxLDggKzEzMSw2IEBACiBzdGF0aWMgaW50IGVmeF90ZXN0X2ludGVycnVwdHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCSAgICAgICBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzKQogewotCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKLQogCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAidGVzdGluZyBpbnRlcnJ1cHRzXG4iKTsKIAl0ZXN0cy0+aW50ZXJydXB0ID0gLTE7CiAKQEAgLTE0MCwxNSArMTM4LDYgQEAKIAllZngtPmxhc3RfaXJxX2NwdSA9IC0xOwogCXNtcF93bWIoKTsKIAotCS8qIEFDSyBlYWNoIGludGVycnVwdGluZyBldmVudCBxdWV1ZS4gUmVjZWl2aW5nIGFuIGludGVycnVwdCBkdWUgdG8KLQkgKiB0cmFmZmljIGJlZm9yZSBhIHRlc3QgZXZlbnQgaXMgcmFpc2VkIGlzIGNvbnNpZGVyZWQgYSBwYXNzICovCi0JZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7Ci0JCWlmIChjaGFubmVsLT53b3JrX3BlbmRpbmcpCi0JCQllZnhfcHJvY2Vzc19jaGFubmVsX25vdyhjaGFubmVsKTsKLQkJaWYgKGVmeC0+bGFzdF9pcnFfY3B1ID49IDApCi0JCQlnb3RvIHN1Y2Nlc3M7Ci0JfQotCiAJZWZ4X25pY19nZW5lcmF0ZV9pbnRlcnJ1cHQoZWZ4KTsKIAogCS8qIFdhaXQgZm9yIGFycml2YWwgb2YgdGVzdCBpbnRlcnJ1cHQuICovCkBAIC0xNzMsMTMgKzE2MiwxMyBAQAogCQkJICAgICAgIHN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqdGVzdHMpCiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKLQl1bnNpZ25lZCBpbnQgbWFnaWNfY291bnQsIGNvdW50OworCXVuc2lnbmVkIGludCByZWFkX3B0ciwgY291bnQ7CiAKIAl0ZXN0cy0+ZXZlbnRxX2RtYVtjaGFubmVsLT5jaGFubmVsXSA9IC0xOwogCXRlc3RzLT5ldmVudHFfaW50W2NoYW5uZWwtPmNoYW5uZWxdID0gLTE7CiAJdGVzdHMtPmV2ZW50cV9wb2xsW2NoYW5uZWwtPmNoYW5uZWxdID0gLTE7CiAKLQltYWdpY19jb3VudCA9IGNoYW5uZWwtPm1hZ2ljX2NvdW50OworCXJlYWRfcHRyID0gY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyOwogCWNoYW5uZWwtPmVmeC0+bGFzdF9pcnFfY3B1ID0gLTE7CiAJc21wX3dtYigpOwogCkBAIC0xOTAsMTAgKzE3OSw3IEBACiAJZG8gewogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDEwMCk7CiAKLQkJaWYgKGNoYW5uZWwtPndvcmtfcGVuZGluZykKLQkJCWVmeF9wcm9jZXNzX2NoYW5uZWxfbm93KGNoYW5uZWwpOwotCi0JCWlmIChjaGFubmVsLT5tYWdpY19jb3VudCAhPSBtYWdpY19jb3VudCkKKwkJaWYgKEFDQ0VTU19PTkNFKGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cikgIT0gcmVhZF9wdHIpCiAJCQlnb3RvIGV2ZW50cV9vazsKIAl9IHdoaWxlICgrK2NvdW50IDwgMik7CiAKQEAgLTIxMSw4ICsxOTcsNyBAQAogCX0KIAogCS8qIENoZWNrIHRvIHNlZSBpZiBldmVudCB3YXMgcmVjZWl2ZWQgZXZlbiBpZiBpbnRlcnJ1cHQgd2Fzbid0ICovCi0JZWZ4X3Byb2Nlc3NfY2hhbm5lbF9ub3coY2hhbm5lbCk7Ci0JaWYgKGNoYW5uZWwtPm1hZ2ljX2NvdW50ICE9IG1hZ2ljX2NvdW50KSB7CisJaWYgKGVmeF9uaWNfZXZlbnRfcHJlc2VudChjaGFubmVsKSkgewogCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKIAkJCSAgImNoYW5uZWwgJWQgZXZlbnQgd2FzIGdlbmVyYXRlZCwgYnV0ICIKIAkJCSAgImZhaWxlZCB0byB0cmlnZ2VyIGFuIGludGVycnVwdFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CkBAIC03NzAsNiArNzU1LDggQEAKIAlfX2VmeF9yZWNvbmZpZ3VyZV9wb3J0KGVmeCk7CiAJbXV0ZXhfdW5sb2NrKCZlZngtPm1hY19sb2NrKTsKIAorCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhlZngtPm5ldF9kZXYpOworCiAJcmV0dXJuIHJjX3Rlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKaW5kZXggZTRkZDg5OC4uODM3ODY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKQEAgLTIyMCwxMiArMjIwLDI2IEBACiAJZWZ4X3JlYWRvKGVmeCwgJnJlZywgRlJfQVpfQ1NfREVCVUcpOwogCWVmeC0+bmV0X2Rldi0+ZGV2X2lkID0gRUZYX09XT1JEX0ZJRUxEKHJlZywgRlJGX0NaX0NTX1BPUlRfTlVNKSAtIDE7CiAKKwkvKiBJbml0aWFsaXNlIE1DREkgKi8KKwluaWNfZGF0YS0+bWNkaV9zbWVtID0gaW9yZW1hcF9ub2NhY2hlKGVmeC0+bWVtYmFzZV9waHlzICsKKwkJCQkJICAgICAgRlJfQ1pfTUNfVFJFR19TTUVNLAorCQkJCQkgICAgICBGUl9DWl9NQ19UUkVHX1NNRU1fU1RFUCAqCisJCQkJCSAgICAgIEZSX0NaX01DX1RSRUdfU01FTV9ST1dTKTsKKwlpZiAoIW5pY19kYXRhLT5tY2RpX3NtZW0pIHsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCSAgImNvdWxkIG5vdCBtYXAgTUNESSBhdCAlbGx4KyV4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWVmeC0+bWVtYmFzZV9waHlzICsKKwkJCSAgRlJfQ1pfTUNfVFJFR19TTUVNLAorCQkJICBGUl9DWl9NQ19UUkVHX1NNRU1fU1RFUCAqIEZSX0NaX01DX1RSRUdfU01FTV9ST1dTKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwxOworCX0KIAllZnhfbWNkaV9pbml0KGVmeCk7CiAKIAkvKiBSZWNvdmVyIGZyb20gYSBmYWlsZWQgYXNzZXJ0aW9uIGJlZm9yZSBwcm9iaW5nICovCiAJcmMgPSBlZnhfbWNkaV9oYW5kbGVfYXNzZXJ0aW9uKGVmeCk7CiAJaWYgKHJjKQotCQlnb3RvIGZhaWwxOworCQlnb3RvIGZhaWwyOwogCiAJLyogTGV0IHRoZSBCTUMga25vdyB0aGF0IHRoZSBkcml2ZXIgaXMgbm93IGluIGNoYXJnZSBvZiBsaW5rIGFuZAogCSAqIGZpbHRlciBzZXR0aW5ncy4gV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3ZSByZXNldCB0aGUgTklDICovCkBAIC0yODAsNiArMjk0LDcgQEAKIGZhaWwzOgogCWVmeF9tY2RpX2Rydl9hdHRhY2goZWZ4LCBmYWxzZSwgTlVMTCk7CiBmYWlsMjoKKwlpb3VubWFwKG5pY19kYXRhLT5tY2RpX3NtZW0pOwogZmFpbDE6CiAJa2ZyZWUoZWZ4LT5uaWNfZGF0YSk7CiAJcmV0dXJuIHJjOwpAQCAtMzU5LDYgKzM3NCw4IEBACiAKIHN0YXRpYyB2b2lkIHNpZW5hX3JlbW92ZV9uaWMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwlzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwogCWVmeF9uaWNfZnJlZV9idWZmZXIoZWZ4LCAmZWZ4LT5pcnFfc3RhdHVzKTsKIAogCXNpZW5hX3Jlc2V0X2h3KGVmeCwgUkVTRVRfVFlQRV9BTEwpOwpAQCAtMzY4LDcgKzM4NSw4IEBACiAJCWVmeF9tY2RpX2Rydl9hdHRhY2goZWZ4LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBUZWFyIGRvd24gdGhlIHByaXZhdGUgbmljIHN0YXRlICovCi0Ja2ZyZWUoZWZ4LT5uaWNfZGF0YSk7CisJaW91bm1hcChuaWNfZGF0YS0+bWNkaV9zbWVtKTsKKwlrZnJlZShuaWNfZGF0YSk7CiAJZWZ4LT5uaWNfZGF0YSA9IE5VTEw7CiB9CiAKQEAgLTYwNiw4ICs2MjQsNyBAQAogCS5kZWZhdWx0X21hY19vcHMgPSAmZWZ4X21jZGlfbWFjX29wZXJhdGlvbnMsCiAKIAkucmV2aXNpb24gPSBFRlhfUkVWX1NJRU5BX0EwLAotCS5tZW1fbWFwX3NpemUgPSAoRlJfQ1pfTUNfVFJFR19TTUVNICsKLQkJCSBGUl9DWl9NQ19UUkVHX1NNRU1fU1RFUCAqIEZSX0NaX01DX1RSRUdfU01FTV9ST1dTKSwKKwkubWVtX21hcF9zaXplID0gRlJfQ1pfTUNfVFJFR19TTUVNLCAvKiBNQ19UUkVHX1NNRU0gbWFwcGVkIHNlcGFyYXRlbHkgKi8KIAkudHhkX3B0cl90YmxfYmFzZSA9IEZSX0JaX1RYX0RFU0NfUFRSX1RCTCwKIAkucnhkX3B0cl90YmxfYmFzZSA9IEZSX0JaX1JYX0RFU0NfUFRSX1RCTCwKIAkuYnVmX3RibF9iYXNlID0gRlJfQlpfQlVGX0ZVTExfVEJMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCAxMzk4MDE5Li5kMmM4NWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtNDM1LDcgKzQzNSw4IEBACiAJICogcXVldWUgc3RhdGUuICovCiAJc21wX21iKCk7CiAJaWYgKHVubGlrZWx5KG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhfcXVldWUtPmNvcmVfdHhxKSkgJiYKLQkgICAgbGlrZWx5KGVmeC0+cG9ydF9lbmFibGVkKSkgeworCSAgICBsaWtlbHkoZWZ4LT5wb3J0X2VuYWJsZWQpICYmCisJICAgIGxpa2VseSghZWZ4LT5wb3J0X2luaGliaXRlZCkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfVFhRX1RIUkVTSE9MRChlZngpKSB7CiAJCQlFRlhfQlVHX09OX1BBUkFOT0lEKCFlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZ2lzZWVxLmMgYi9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKaW5kZXggM2EwY2M2My4uZGQwM2JmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2dpc2VlcS5jCisrKyBiL2RyaXZlcnMvbmV0L3NnaXNlZXEuYwpAQCAtMzMsNyArMzMsNyBAQAogICogd2l0aCB0aGF0IGluIG1pbmQsIEkndmUgZGVjaWRlZCB0byBtYWtlIHRoaXMgZHJpdmVyIGxvb2sgY29tcGxldGVseSBsaWtlIGEKICAqIHN0dXBpZCBMYW5jZSBmcm9tIGEgZHJpdmVyIGFyY2hpdGVjdHVyZSBwZXJzcGVjdGl2ZS4gIE9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0CiAgKiBoZXJlIG91ciAicmluZyBidWZmZXIiIGxvb2tzIGFuZCBhY3RzIGxpa2UgYSByZWFsIExhbmNlIG9uZSBkb2VzIGJ1dCBpcwotICogbGF5ZWQgb3V0IGxpa2UgaG93IHRoZSBIUEMgRE1BIGFuZCB0aGUgU2VlcSB3YW50IGl0IHRvLiAgWW91J2QgYmUgc3VycHJpc2VkCisgKiBsYWlkIG91dCBsaWtlIGhvdyB0aGUgSFBDIERNQSBhbmQgdGhlIFNlZXEgd2FudCBpdCB0by4gIFlvdSdkIGJlIHN1cnByaXNlZAogICogaG93IGEgc3R1cGlkIGlkZWEgbGlrZSB0aGlzIGNhbiBwYXkgb2ZmIGluIHBlcmZvcm1hbmNlLCBub3QgdG8gbWVudGlvbgogICogbWFraW5nIHRoaXMgZHJpdmVyIDIsMDAwIHRpbWVzIGVhc2llciB0byB3cml0ZS4gOy0pCiAgKi8KQEAgLTc3LDcgKzc3LDcgQEAKIH07CiAKIC8qCi0gKiBXYXJuaW5nOiBUaGlzIHN0cnVjdHVyZSBpcyBsYXllZCBvdXQgaW4gYSBjZXJ0YWluIHdheSBiZWNhdXNlIEhQQyBkbWEKKyAqIFdhcm5pbmc6IFRoaXMgc3RydWN0dXJlIGlzIGxhaWQgb3V0IGluIGEgY2VydGFpbiB3YXkgYmVjYXVzZSBIUEMgZG1hCiAgKiAgICAgICAgICBkZXNjcmlwdG9ycyBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLiAgU28gZG9uJ3QgdG91Y2ggdGhpcyB3aXRob3V0CiAgKiAgICAgICAgICBzb21lIGNhcmUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggZTllN2E1My4uOGE3MmE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAotCS8qIHByaW50IGRldmljZSBpbmZvbWF0aW9uICovCisJLyogcHJpbnQgZGV2aWNlIGluZm9ybWF0aW9uICovCiAJcHJfaW5mbygiQmFzZSBhZGRyZXNzIGF0IDB4JXgsICVwTSwgSVJRICVkLlxuIiwKIAkgICAgICAgKHUzMiluZGV2LT5iYXNlX2FkZHIsIG5kZXYtPmRldl9hZGRyLCBuZGV2LT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXMxOTAuYyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCmluZGV4IDM0MDZlZDguLmI0MzZlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczE5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCkBAIC05Myw3ICs5Myw3IEBACiAJSW50clN0YXR1cwkJPSAweDIwLAogCUludHJNYXNrCQk9IDB4MjQsCiAJSW50ckNvbnRyb2wJCT0gMHgyOCwKLQlJbnRyVGltZXIJCT0gMHgyYywJLy8gdW51c2VkIChJbnRlcnVwdCBUaW1lcikKKwlJbnRyVGltZXIJCT0gMHgyYywJLy8gdW51c2VkIChJbnRlcnJ1cHQgVGltZXIpCiAJUE1Db250cm9sCQk9IDB4MzAsCS8vIHVudXNlZCAoUG93ZXIgTWdtdCBDb250cm9sL1N0YXR1cykKIAlyc3YyCQkJPSAweDM0LAkvLyByZXNlcnZlZAogCVJPTUNvbnRyb2wJCT0gMHgzOCwKQEAgLTIzNCw3ICsyMzQsNyBAQAogCVJ4U2l6ZU1hc2sJPSAweDAwMDBmZmZmCiAJLyoKIAkgKiBUaGUgYXNpYyBjb3VsZCBhcHBhcmVudGx5IGRvIHZsYW4sIFRTTywganVtYm8gKHNpczE5MSBvbmx5KSBhbmQKLQkgKiBwcm92aWRlIHR3byAodW51c2VkIHdpdGggTGludXgpIFR4IHF1ZXVlcy4gTm8gcHVibGljYWxseQorCSAqIHByb3ZpZGUgdHdvICh1bnVzZWQgd2l0aCBMaW51eCkgVHggcXVldWVzLiBObyBwdWJsaWNseQogCSAqIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGFsYXMuCiAJICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCA4NGQ0MTY3Li40ODRmNzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMjQwLDcgKzI0MCw4IEBACiAgKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gZ2V0IGFkZHJlc3MgZm9yCiAgKgogICoJT2xkZXIgU2lTOTAwIGFuZCBmcmllbmRzLCB1c2UgRUVQUk9NIHRvIHN0b3JlIE1BQyBhZGRyZXNzLgotICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBmcm9tIHJlYWRfZWVwcm9tKCkgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIuCisgKglNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gcmVhZF9lZXByb20oKSBpbnRvIEBuZXRfZGV2LT5kZXZfYWRkciBhbmQKKyAqCUBuZXRfZGV2LT5wZXJtX2FkZHIuCiAgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgc2lzOTAwX2dldF9tYWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQpAQCAtMjYxLDYgKzI2Miw5IEBACiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkgICAgICAgICgodTE2ICopKG5ldF9kZXYtPmRldl9hZGRyKSlbaV0gPSByZWFkX2VlcHJvbShpb2FkZHIsIGkrRUVQUk9NTUFDQWRkcik7CiAKKwkvKiBTdG9yZSBNQUMgQWRkcmVzcyBpbiBwZXJtX2FkZHIgKi8KKwltZW1jcHkobmV0X2Rldi0+cGVybV9hZGRyLCBuZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI3MSw3ICsyNzUsOCBAQAogICoKICAqCVNpUzYzMEUgbW9kZWwsIHVzZSBBUEMgQ01PUyBSQU0gdG8gc3RvcmUgTUFDIGFkZHJlc3MuCiAgKglBUEMgQ01PUyBSQU0gaXMgYWNjZXNzZWQgdGhyb3VnaCBJU0EgYnJpZGdlLgotICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBpbnRvIEBuZXRfZGV2LT5kZXZfYWRkci4KKyAqCU1BQyBhZGRyZXNzIGlzIHJlYWQgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIgYW5kCisgKglAbmV0X2Rldi0+cGVybV9hZGRyLgogICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNpczYzMGVfZ2V0X21hY19hZGRyKHN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiwKQEAgLTI5Niw2ICszMDEsMTAgQEAKIAkJb3V0YigweDA5ICsgaSwgMHg3MCk7CiAJCSgodTggKikobmV0X2Rldi0+ZGV2X2FkZHIpKVtpXSA9IGluYigweDcxKTsKIAl9CisKKwkvKiBTdG9yZSBNQUMgQWRkcmVzcyBpbiBwZXJtX2FkZHIgKi8KKwltZW1jcHkobmV0X2Rldi0+cGVybV9hZGRyLCBuZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGlzYV9icmlkZ2UsIDB4NDgsIHJlZyAmIH4weDQwKTsKIAlwY2lfZGV2X3B1dChpc2FfYnJpZGdlKTsKIApAQCAtMzEwLDcgKzMxOSw3IEBACiAgKgogICoJU2lTNjM1IG1vZGVsLCBzZXQgTUFDIFJlbG9hZCBCaXQgdG8gbG9hZCBNYWMgYWRkcmVzcyBmcm9tIEFQQwogICoJdG8gcmZkci4gcmZkciBpcyBhY2Nlc3NlZCB0aHJvdWdoIHJmY3IuIE1BQyBhZGRyZXNzIGlzIHJlYWQgaW50bwotICoJQG5ldF9kZXYtPmRldl9hZGRyLgorICoJQG5ldF9kZXYtPmRldl9hZGRyIGFuZCBAbmV0X2Rldi0+cGVybV9hZGRyLgogICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNpczYzNV9nZXRfbWFjX2FkZHIoc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2LApAQCAtMzM0LDYgKzM0Myw5IEBACiAJCSooICgodTE2ICopbmV0X2Rldi0+ZGV2X2FkZHIpICsgaSkgPSBpbncoaW9hZGRyICsgcmZkcik7CiAJfQogCisJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJbWVtY3B5KG5ldF9kZXYtPnBlcm1fYWRkciwgbmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwogCS8qIGVuYWJsZSBwYWNrZXQgZmlsdGVyaW5nICovCiAJb3V0bChyZmNyU2F2ZSB8IFJGRU4sIHJmY3IgKyBpb2FkZHIpOwogCkBAIC0zNTMsNyArMzY1LDcgQEAKICAqCUVFRE9ORSBzaWduYWwgdG8gcmVmdXNlIEVFUFJPTSBhY2Nlc3MgYnkgTEFOLgogICoJVGhlIEVFUFJPTSBtYXAgb2YgU2lTOTYyIG9yIFNpUzk2MyBpcyBkaWZmZXJlbnQgdG8gU2lTOTAwLgogICoJVGhlIHNpZ25hdHVyZSBmaWVsZCBpbiBTaVM5NjIgb3IgU2lTOTYzIHNwZWMgaXMgbWVhbmluZ2xlc3MuCi0gKglNQUMgYWRkcmVzcyBpcyByZWFkIGludG8gQG5ldF9kZXYtPmRldl9hZGRyLgorICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBpbnRvIEBuZXRfZGV2LT5kZXZfYWRkciBhbmQgQG5ldF9kZXYtPnBlcm1fYWRkci4KICAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzaXM5NnhfZ2V0X21hY19hZGRyKHN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiwKQEAgLTM3Miw2ICszODQsOSBAQAogCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJCSAgICAgICAgKCh1MTYgKikobmV0X2Rldi0+ZGV2X2FkZHIpKVtpXSA9IHJlYWRfZWVwcm9tKGlvYWRkciwgaStFRVBST01NQUNBZGRyKTsKIAorCQkJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJCQltZW1jcHkobmV0X2Rldi0+cGVybV9hZGRyLCBuZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCiAJCQlvdXRsKEVFRE9ORSwgZWVfYWRkcik7CiAJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKQEAgLTExODAsNyArMTE5NSw3IEBACiAgKgogICoJNjMwRSBlcXVhbGl6ZXIgd29ya2Fyb3VuZCBydWxlKEN5cnVzIEh1YW5nIDA4LzE1KQogICoJUEhZIHJlZ2lzdGVyIDE0aChUZXN0KQotICoJQml0IDE0OiAwIC0tIEF1dG9tYXRpY2FsbHkgZGVjdGVjdCAoZGVmYXVsdCkKKyAqCUJpdCAxNDogMCAtLSBBdXRvbWF0aWNhbGx5IGRldGVjdCAoZGVmYXVsdCkKICAqCQkxIC0tIE1hbnVhbGx5IHNldCBFcXVhbGl6ZXIgZmlsdGVyCiAgKglCaXQgMTM6IDAgLS0gKERlZmF1bHQpCiAgKgkJMSAtLSBTcGVlZCB1cCBjb252ZXJnZW5jZSBvZiBlcXVhbGl6ZXIgc2V0dGluZwpAQCAtMTE5Miw3ICsxMjA3LDcgQEAKICAqCVRoZW4gc2V0IGVxdWFsaXplciB2YWx1ZSwgYW5kIHNldCBCaXQgMTQgdG8gMSwgQml0IDkgdG8gMAogICoJTGluayBPZmY6U2V0IEJpdCAxMyB0byAxLCBCaXQgMTQgdG8gMAogICoJQ2FsY3VsYXRlIEVxdWFsaXplciB2YWx1ZToKLSAqCVdoZW4gTGluayBpcyBPTiBhbmQgQml0IDE0IGlzIDAsIFNJUzkwMFBIWSB3aWxsIGF1dG8tZGVjdGVjdCBwcm9wZXIgZXF1YWxpemVyIHZhbHVlLgorICoJV2hlbiBMaW5rIGlzIE9OIGFuZCBCaXQgMTQgaXMgMCwgU0lTOTAwUEhZIHdpbGwgYXV0by1kZXRlY3QgcHJvcGVyIGVxdWFsaXplciB2YWx1ZS4KICAqCVdoZW4gdGhlIGVxdWFsaXplciBpcyBzdGFibGUsIHRoaXMgdmFsdWUgaXMgbm90IGEgZml4ZWQgdmFsdWUuIEl0IHdpbGwgYmUgd2l0aGluCiAgKglhIHNtYWxsIHJhbmdlKGVnLiA3fjkpLiBUaGVuIHdlIGdldCBhIG1pbmltdW0gYW5kIGEgbWF4aW11bSB2YWx1ZShlZy4gbWluPTcsIG1heD05KQogICoJMCA8PSBtYXggPD0gNCAgLS0+IHNldCBlcXVhbGl6ZXIgdG8gbWF4CkBAIC0xNzIzLDcgKzE3MzgsNyBAQAogCQlyeF9zaXplID0gZGF0YV9zaXplIC0gQ1JDX1NJWkU7CiAKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKLQkJLyogYGBUT09MT05HJycgZmxhZyBtZWFucyBqdW1ibyBwYWNrZXQgcmVjaXZlZC4gKi8KKwkJLyogYGBUT09MT05HJycgZmxhZyBtZWFucyBqdW1ibyBwYWNrZXQgcmVjZWl2ZWQuICovCiAJCWlmICgocnhfc3RhdHVzICYgVE9PTE9ORykgJiYgZGF0YV9zaXplIDw9IE1BWF9GUkFNRV9TSVpFKQogCQkJcnhfc3RhdHVzICY9ICh+ICgodW5zaWduZWQgaW50KVRPT0xPTkcpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9lc3MuYyBiL2RyaXZlcnMvbmV0L3NrZnAvZXNzLmMKaW5kZXggODYzOWEwOC4uMmZjNTk4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9lc3MuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL2Vzcy5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJCSE9IFNNVF9SREZfU1VDQ0VTUykgfHwKIAkJCShzbS0+c210X3RpZCAhPSBzbWMtPmVzcy5hbGxvY190cmFuc19pZCkpIHsKIAotCQkJREJfRVNTKCJFU1M6IEFsbG9jYXRpb24gUmVzcG9uY2Ugbm90IGFjY2VwdGVkXG4iLDAsMCkgOworCQkJREJfRVNTKCJFU1M6IEFsbG9jYXRpb24gUmVzcG9uc2Ugbm90IGFjY2VwdGVkXG4iLDAsMCkgOwogCQkJcmV0dXJuIGZzOwogCQl9CiAKQEAgLTM5Myw3ICszOTMsNyBAQAogCSAqCQkgICAgICB8CSBULU5FRwl8CiAJICoJCSAgICAgICAtICAgICAgIC0KICAJICoKLQkgKiBULU5FRyBpcyBkaXNjcmliZWQgYnkgdGhlIGVxdWF0aW9uOgorCSAqIFQtTkVHIGlzIGRlc2NyaWJlZCBieSB0aGUgZXF1YXRpb246CiAJICoKIAkgKgkJICAgICAoLSkgZmRkaU1BQ1QtTkVHCiAJICoJVC1ORUcgPQkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJdm9pZAkJCSpwIDsKIAogCS8qCi0JICogZ2V0IGFuZCBpbml0aWFsaXplIHRoZSByZXNwb25jZSBmcmFtZQorCSAqIGdldCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmVzcG9uc2UgZnJhbWUKIAkgKi8KIAlpZiAoc2JhX2NtZCA9PSBDSEFOR0VfQUxMT0NBVElPTikgewogCQlpZiAoIShtYj1zbXRfYnVpbGRfZnJhbWUoc21jLFNNVF9SQUYsU01UX1JFUExZLApAQCAtNTc4LDcgKzU3OCw3IEBACiAJfQogCQogCS8qCi0JICogZ2V0IGFuZCBpbml0aWFsaXplIHRoZSByZXNwb25jZSBmcmFtZQorCSAqIGdldCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmVzcG9uc2UgZnJhbWUKIAkgKi8KIAlpZiAoIShtYj1zbXRfYnVpbGRfZnJhbWUoc21jLFNNVF9SQUYsU01UX1JFUVVFU1QsCiAJCQlzaXplb2Yoc3RydWN0IHNtdF9zYmFfYWxjX3JlcSkpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvZnBsdXN0bS5jIGIvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKaW5kZXggY2E0ZTdiYi4uYTIwZWQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCW91dHB3KEZNX0EoRk1fTENOVFIpLDApIDsKIAlvdXRwdyhGTV9BKEZNX0VDTlRSKSwwKSA7CiAJLyoKLQkgKiBjbGVhciBpbnRlcm5hbCBlcnJvciBjb3VudGVyIHN0dWN0dXJlCisJICogY2xlYXIgaW50ZXJuYWwgZXJyb3IgY291bnRlciBzdHJ1Y3R1cmUKIAkgKi8KIAllYyA9ICh1X2xvbmcgKikmc21jLT5ody5mcC5lcnJfc3RhdHMgOwogCWZvciAoaSA9IChzaXplb2Yoc3RydWN0IGVycl9zdCkvc2l6ZW9mKGxvbmcpKSA7IGkgOyBpLS0pCkBAIC0xMjYyLDggKzEyNjIsOCBAQAogCiBQYXJhCW1vZGUgPQkxCVJYX0VOQUJMRV9BTExNVUxUSQllbmFibGUgYWxsIG11bHRpY2FzdHMKIAkJMglSWF9ESVNBQkxFX0FMTE1VTFRJCWRpc2FibGUgImVuYWJsZSBhbGwgbXVsdGljYXN0cyIKLQkJMwlSWF9FTkFCTEVfUFJPTUlTQwllbmFibGUgcHJvbWlzY291cwotCQk0CVJYX0RJU0FCTEVfUFJPTUlTQwlkaXNhYmxlIHByb21pc2NvdXMKKwkJMwlSWF9FTkFCTEVfUFJPTUlTQwllbmFibGUgcHJvbWlzY3VvdXMKKwkJNAlSWF9ESVNBQkxFX1BST01JU0MJZGlzYWJsZSBwcm9taXNjdW91cwogCQk1CVJYX0VOQUJMRV9OU0EJCWVuYWJsZSByZWNlcHRpb24gb2YgTlNBIGZyYW1lcwogCQk2CVJYX0RJU0FCTEVfTlNBCQlkaXNhYmxlIHJlY2VwdGlvbiBvZiBOU0EgZnJhbWVzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaC9jbXRkZWYuaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9jbXRkZWYuaAppbmRleCBmMmY3NzFkLi41YTZjNjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2gvY210ZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9oL2NtdGRlZi5oCkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qCiAgKiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBjb25zdGFudHMKLSAqIE1PRElJRlkgVEhFIEZPTExXT0lORyBUSFJFRSBERUZJTkVTCisgKiBNT0RJSUZZIFRIRSBGT0xMT1dJTkcgVEhSRUUgREVGSU5FUwogICovCiAjZGVmaW5lIEFNRFBMQwkJCS8qIGlmIEFtZCBQTEMgY2hpcCB1c2VkICovCiAjaWZkZWYJQ09OQwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJdV9sb25nIHNvZnRfZXJyIDsJCS8qIGVycm9yIGNvdW50ZXIgKi8KIAl1X2xvbmcgcGFyaXR5X2VyciA7CQkvKiBlcnJvciBjb3VudGVyICovCiAJdV9sb25nIGVidWZfZXJyIDsJCS8qIGVycm9yIGNvdW50ZXIgKi8KLQl1X2xvbmcgZWJ1Zl9jb250IDsJCS8qIGNvbnRpbm91cyBlcnJvciBjb3VudGVyICovCisJdV9sb25nIGVidWZfY29udCA7CQkvKiBjb250aW51b3VzIGVycm9yIGNvdW50ZXIgKi8KIAl1X2xvbmcgcGh5aW52IDsJCQkvKiBlcnJvciBjb3VudGVyICovCiAJdV9sb25nIHZzeW1fY3RyIDsJCS8qIGVycm9yIGNvdW50ZXIgKi8KIAl1X2xvbmcgbWluaV9jdHIgOwkJLyogZXJyb3IgY291bnRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9oL2ZwbHVzdG0uaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9mcGx1c3RtLmgKaW5kZXggNmQ3MzhlMS4uZDQzMTkxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL2ZwbHVzdG0uaAorKysgYi9kcml2ZXJzL25ldC9za2ZwL2gvZnBsdXN0bS5oCkBAIC0yMzcsOCArMjM3LDggQEAKICAqLwogI2RlZmluZSBSWF9FTkFCTEVfQUxMTVVMVEkJMQkvKiBlbmFibGUgYWxsIG11bHRpY2FzdHMgKi8KICNkZWZpbmUgUlhfRElTQUJMRV9BTExNVUxUSQkyCS8qIGRpc2FibGUgImVuYWJsZSBhbGwgbXVsdGljYXN0cyIgKi8KLSNkZWZpbmUgUlhfRU5BQkxFX1BST01JU0MJMwkvKiBlbmFibGUgcHJvbWlzY291cyAqLwotI2RlZmluZSBSWF9ESVNBQkxFX1BST01JU0MJNAkvKiBkaXNhYmxlIHByb21pc2NvdXMgKi8KKyNkZWZpbmUgUlhfRU5BQkxFX1BST01JU0MJMwkvKiBlbmFibGUgcHJvbWlzY3VvdXMgKi8KKyNkZWZpbmUgUlhfRElTQUJMRV9QUk9NSVNDCTQJLyogZGlzYWJsZSBwcm9taXNjdW91cyAqLwogI2RlZmluZSBSWF9FTkFCTEVfTlNBCQk1CS8qIGVuYWJsZSByZWNlcHRpb24gb2YgTlNBIGZyYW1lcyAqLwogI2RlZmluZSBSWF9ESVNBQkxFX05TQQkJNgkvKiBkaXNhYmxlIHJlY2VwdGlvbiBvZiBOU0EgZnJhbWVzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaAppbmRleCAwMjZhODNiLi5jNzc0YTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCkBAIC0zODgsNyArMzg4LDcgQEAKIAl1X2xvbmcJcm10X3RfcG9sbCA7CQkvKiBSTVQgOiBjbGFpbS9iZWFjb24gcG9sbGVyICovCiAJdV9sb25nICBybXRfZHVwX21hY19iZWhhdmlvciA7ICAvKiBGbGFnIGZvciB0aGUgYmVhdmlvciBvZiBTTVQgaWYKIAkJCQkJICogYSBEdXBsaWNhdGUgTUFDIEFkZHJlc3Mgd2FzIGRldGVjdGVkLgotCQkJCQkgKiBGQUxTRTogU01UIHdpbGwgbGVhdmUgZmluYWx5IHRoZSByaW5nCisJCQkJCSAqIEZBTFNFOiBTTVQgd2lsbCBsZWF2ZSBmaW5hbGx5IHRoZSByaW5nCiAJCQkJCSAqIFRSVUU6ICBTTVQgd2lsbCByZWluc3RlcnQgaW50byB0aGUgcmluZwogCQkJCQkgKi8KIAl1X2xvbmcJbWFjX2RfbWF4IDsJCS8qIE1BQyA6IERfTWF4IHRpbWVyIHZhbHVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc210LmggYi9kcml2ZXJzL25ldC9za2ZwL2gvc210LmgKaW5kZXggMjk3Njc1Ny4uMjAzMGY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL3NtdC5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbXQuaApAQCAtNzkzLDcgKzc5Myw3IEBACiB9IDsKIAogLyoKLSAqIFNCQSBSZXF1ZXN0IEFsbG9jYXRpb24gUmVzcG9uY2UgRnJhbWUKKyAqIFNCQSBSZXF1ZXN0IEFsbG9jYXRpb24gUmVzcG9uc2UgRnJhbWUKICAqLwogc3RydWN0IHNtdF9zYmFfYWxjX3JlcyB7CiAJc3RydWN0IHNtdF9oZWFkZXIJc210IDsJCS8qIGdlbmVyaWMgaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc3VwZXJuXzIuaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zdXBlcm5fMi5oCmluZGV4IDViYTBiODMuLjBiNzM2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvaC9zdXBlcm5fMi5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zdXBlcm5fMi5oCkBAIC0xNCw3ICsxNCw3IEBACiAKIC8qCiAJZGVmaW5lcyBmb3IgQU1EIFN1cGVybmV0IElJIGNoaXAgc2V0Ci0JdGhlIGNoaXBzIGFyZSByZWZlcmVkIHRvIGFzCisJdGhlIGNoaXBzIGFyZSByZWZlcnJlZCB0byBhcwogCQlGUExVUwlGb3JtYWMgUGx1cwogCQlQTEMJUGh5c2ljYWwgTGF5ZXIKIApAQCAtMzg2LDcgKzM4Niw3IEBACiAjZGVmaW5lCUZNX01ESVNSQ1YJKDQ8PDgpCQkvKiBkaXNhYmxlIHJlY2VpdmUgZnVuY3Rpb24gKi8KICNkZWZpbmUJRk1fTVJFUzAJKDU8PDgpCQkvKiByZXNlcnZlICovCiAjZGVmaW5lCUZNX01MSU1QUk9NCSg2PDw4KQkJLyogbGltaXRlZC1wcm9taXNjdW91cyBtb2RlICovCi0jZGVmaW5lIEZNX01QUk9NSVNDT1VTCSg3PDw4KQkJLyogYWRkcmVzcyBkZXRlY3Rpb24gOiBwcm9taXNjb3VzICovCisjZGVmaW5lIEZNX01QUk9NSVNDT1VTCSg3PDw4KQkJLyogYWRkcmVzcyBkZXRlY3Rpb24gOiBwcm9taXNjdW91cyAqLwogCiAjZGVmaW5lIEZNX1NFTFNBCTB4MDgwMAkJLyogc2VsZWN0LXNob3J0LWFkZHJlc3MgYml0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwppbmRleCBhZjVhNzU1Li5lMjYzOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCkBAIC02OTEsNyArNjkxLDcgQEAKICAqCQlpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLCBoYW5kbGVzIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdHMKICAqCQlnZW5lcmF0ZWQgYnkgdGhlIEZEREkgYWRhcHRlci4KICAqCi0gKiBOT1RFOglUaGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIG11c3QgZ2FyYW50ZWUgdGhhdCB0aGUKKyAqIE5PVEU6CVRoZSBvcGVyYXRpbmcgc3lzdGVtIGRlcGVuZGVudCBtb2R1bGUgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUKICAqCQlpbnRlcnJ1cHRzIG9mIHRoZSBhZGFwdGVyIGFyZSBkaXNhYmxlZCB3aGVuIGl0IGNhbGxzIGZkZGlfaXNyLgogICoKICAqCUFib3V0IHRoZSBVU0VfQlJFQUtfSVNSIG1lY2hhbmlzbW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwppbmRleCAxMTJkMzViLi44OGQwMmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKQEAgLTE2ODAsNyArMTY4MCw3IEBACiAJCQkgKiBQcmV2ZW50IGNvdW50ZXIgZnJvbSBiZWluZyB3cmFwcGVkIGFmdGVyCiAJCQkgKiBoYW5naW5nIHllYXJzIGluIHRoYXQgaW50ZXJydXB0LgogCQkJICovCi0JCQlwbGMtPmVidWZfY29udCsrIDsJLyogRWJ1ZiBjb250aW5vdXMgZXJyb3IgKi8KKwkJCXBsYy0+ZWJ1Zl9jb250KysgOwkvKiBFYnVmIGNvbnRpbnVvdXMgZXJyb3IgKi8KIAkJfQogCiAjaWZkZWYJU1VQRVJORVRfMwpAQCAtMTcxNyw4ICsxNzE3LDggQEAKIAkJfQogI2VuZGlmCS8qIFNVUEVSTkVUXzMgKi8KIAl9IGVsc2UgewotCQkvKiBSZXNldCB0aGUgY29udGlub3VzIGVycm9yIHZhcmlhYmxlICovCi0JCXBsYy0+ZWJ1Zl9jb250ID0gMCA7CS8qIHJlc2V0IEVidWYgY29udGlub3VzIGVycm9yICovCisJCS8qIFJlc2V0IHRoZSBjb250aW51b3VzIGVycm9yIHZhcmlhYmxlICovCisJCXBsYy0+ZWJ1Zl9jb250ID0gMCA7CS8qIHJlc2V0IEVidWYgY29udGludW91cyBlcnJvciAqLwogCX0KIAlpZiAoY21kICYgUExfUEhZSU5WKSB7CQkvKiBwaHlzaWNhbCBsYXllciBpbnZhbGlkIHNpZ25hbCAqLwogCQlwbGMtPnBoeWludisrIDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCmluZGV4IDFlMWJkMGMuLjA4ZDk0MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9zbXQuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAKIAkvKgogCSAqIE9ubHkgd2hlbiByaW5nIGlzIHVwIHdlIHdpbGwgaGF2ZSBhIHRva2VuIGNvdW50LiBUaGUKLQkgKiBmbGFnIGlzIHVuZm9ydHVuYXRseSBhIHNpbmdsZSBpbnN0YW5jZSB2YWx1ZS4gVGhpcworCSAqIGZsYWcgaXMgdW5mb3J0dW5hdGVseSBhIHNpbmdsZSBpbnN0YW5jZSB2YWx1ZS4gVGhpcwogCSAqIGRvZXNuJ3QgbWF0dGVyIG5vdywgYmVjYXVzZSB3ZSBjdXJyZW50bHkgaGF2ZSBvbmx5CiAJICogb25lIE1BQyBpbnN0YW5jZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuaCBiL2RyaXZlcnMvbmV0L3NrZ2UuaAppbmRleCA1MDdhZGRjLi41MWMwMjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmgKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5oCkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCiAJUEhZX1NUX1BSRV9TVVAJPSAxPDw2LCAvKiBCaXQgIDY6CVByZWFtYmxlIFN1cHByZXNzaW9uICovCiAJUEhZX1NUX0FOX09WRVIJPSAxPDw1LCAvKiBCaXQgIDU6CUF1dG8tTmVnb3RpYXRpb24gT3ZlciAqLwotCVBIWV9TVF9SRU1fRkxUCT0gMTw8NCwgLyogQml0ICA0OglSZW1vdGUgRmF1bHQgQ29uZGl0aW9uIE9jY3VyZWQgKi8KKwlQSFlfU1RfUkVNX0ZMVAk9IDE8PDQsIC8qIEJpdCAgNDoJUmVtb3RlIEZhdWx0IENvbmRpdGlvbiBPY2N1cnJlZCAqLwogCVBIWV9TVF9BTl9DQVAJPSAxPDwzLCAvKiBCaXQgIDM6CUF1dG8tTmVnb3RpYXRpb24gQ2FwYWJpbGl0eSAqLwogCVBIWV9TVF9MU1lOQwk9IDE8PDIsIC8qIEJpdCAgMjoJTGluayBTeW5jaHJvbml6ZWQgKi8KIAlQSFlfU1RfSkFCX0RFVAk9IDE8PDEsIC8qIEJpdCAgMToJSmFiYmVyIERldGVjdGVkICovCkBAIC0xNzIxLDggKzE3MjEsOCBAQAogCUdNX0dQU1JfTElOS19VUAkJPSAxPDwxMiwgLyogQml0IDEyOglMaW5rIFVwIFN0YXR1cyAqLwogCUdNX0dQU1JfUEFVU0UJCT0gMTw8MTEsIC8qIEJpdCAxMToJUGF1c2UgU3RhdGUgKi8KIAlHTV9HUFNSX1RYX0FDVElWRQk9IDE8PDEwLCAvKiBCaXQgMTA6CVR4IGluIFByb2dyZXNzICovCi0JR01fR1BTUl9FWENfQ09MCQk9IDE8PDksCS8qIEJpdCAgOToJRXhjZXNzaXZlIENvbGxpc2lvbnMgT2NjdXJlZCAqLwotCUdNX0dQU1JfTEFUX0NPTAkJPSAxPDw4LAkvKiBCaXQgIDg6CUxhdGUgQ29sbGlzaW9ucyBPY2N1cmVkICovCisJR01fR1BTUl9FWENfQ09MCQk9IDE8PDksCS8qIEJpdCAgOToJRXhjZXNzaXZlIENvbGxpc2lvbnMgT2NjdXJyZWQgKi8KKwlHTV9HUFNSX0xBVF9DT0wJCT0gMTw8OCwJLyogQml0ICA4OglMYXRlIENvbGxpc2lvbnMgT2NjdXJyZWQgKi8KIAogCUdNX0dQU1JfUEhZX1NUX0NICT0gMTw8NSwJLyogQml0ICA1OglQSFkgU3RhdHVzIENoYW5nZSAqLwogCUdNX0dQU1JfR0lHX1NQRUVECT0gMTw8NCwJLyogQml0ICA0OglHaWdhYml0IFNwZWVkICgxID0gMTAwMCBNYnBzKSAqLwpAQCAtMjIyNyw3ICsyMjI3LDcgQEAKIAlYTV9TVF9CQwk9IDE8PDcsCQkvKiBCaXQgIDc6CUJyb2FkY2FzdCBwYWNrZXQgKi8KIAlYTV9TVF9NQwk9IDE8PDYsCQkvKiBCaXQgIDY6CU11bHRpY2FzdCBwYWNrZXQgKi8KIAlYTV9TVF9VQwk9IDE8PDUsCQkvKiBCaXQgIDU6CVVuaWNhc3QgcGFja2V0ICovCi0JWE1fU1RfVFhfVVIJPSAxPDw0LAkJLyogQml0ICA0OglGSUZPIFVuZGVycnVuIG9jY3VyZWQgKi8KKwlYTV9TVF9UWF9VUgk9IDE8PDQsCQkvKiBCaXQgIDQ6CUZJRk8gVW5kZXJydW4gb2NjdXJyZWQgKi8KIAlYTV9TVF9DU19FUlIJPSAxPDwzLAkJLyogQml0ICAzOglDYXJyaWVyIFNlbnNlIEVycm9yICovCiAJWE1fU1RfTEFUX0NPTAk9IDE8PDIsCQkvKiBCaXQgIDI6CUxhdGUgQ29sbGlzaW9uIEVycm9yICovCiAJWE1fU1RfTVVMX0NPTAk9IDE8PDEsCQkvKiBCaXQgIDE6CU11bHRpcGxlIENvbGxpc2lvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAyYTkxODY4Li5mZjhkMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC05MzIsNyArOTMyLDcgQEAKIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX0NMUik7CiAJc2t5Ml93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIEdNRl9PUEVSX09OKTsKIAotCS8qIE9uIGNoaXBzIHdpdGhvdXQgcmFtIGJ1ZmZlciwgcGF1c2UgaXMgY29udHJvbGVkIGJ5IE1BQyBsZXZlbCAqLworCS8qIE9uIGNoaXBzIHdpdGhvdXQgcmFtIGJ1ZmZlciwgcGF1c2UgaXMgY29udHJvbGxlZCBieSBNQUMgbGV2ZWwgKi8KIAlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX1JBTV9CVUZGRVIpKSB7CiAJCS8qIFBhdXNlIHRocmVzaG9sZCBpcyBzY2FsZWQgYnkgOCBpbiBieXRlcyAqLwogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRV9QICYmCkBAIC0zMjU1LDcgKzMyNTUsNyBAQAogCiAvKiBUYWtlIGRldmljZSBkb3duIChvZmZsaW5lKS4KICAqIEVxdWl2YWxlbnQgdG8gZG9pbmcgZGV2X3N0b3AoKSBidXQgdGhpcyBkb2VzIG5vdAotICogaW5mb3JtIHVwcGVyIGxheWVycyBvZiB0aGUgdHJhbnNpc3Rpb24uCisgKiBpbmZvcm0gdXBwZXIgbGF5ZXJzIG9mIHRoZSB0cmFuc2l0aW9uLgogICovCiBzdGF0aWMgdm9pZCBza3kyX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IDY4NjFiMGUuLjBjNmQxMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTExOTQsNyArMTE5NCw3IEBACiAKIAlQSFlfU1RfUFJFX1NVUAk9IDE8PDYsIC8qIEJpdCAgNjoJUHJlYW1ibGUgU3VwcHJlc3Npb24gKi8KIAlQSFlfU1RfQU5fT1ZFUgk9IDE8PDUsIC8qIEJpdCAgNToJQXV0by1OZWdvdGlhdGlvbiBPdmVyICovCi0JUEhZX1NUX1JFTV9GTFQJPSAxPDw0LCAvKiBCaXQgIDQ6CVJlbW90ZSBGYXVsdCBDb25kaXRpb24gT2NjdXJlZCAqLworCVBIWV9TVF9SRU1fRkxUCT0gMTw8NCwgLyogQml0ICA0OglSZW1vdGUgRmF1bHQgQ29uZGl0aW9uIE9jY3VycmVkICovCiAJUEhZX1NUX0FOX0NBUAk9IDE8PDMsIC8qIEJpdCAgMzoJQXV0by1OZWdvdGlhdGlvbiBDYXBhYmlsaXR5ICovCiAJUEhZX1NUX0xTWU5DCT0gMTw8MiwgLyogQml0ICAyOglMaW5rIFN5bmNocm9uaXplZCAqLwogCVBIWV9TVF9KQUJfREVUCT0gMTw8MSwgLyogQml0ICAxOglKYWJiZXIgRGV0ZWN0ZWQgKi8KQEAgLTE3MjUsOCArMTcyNSw4IEBACiAJR01fR1BTUl9MSU5LX1VQCQk9IDE8PDEyLCAvKiBCaXQgMTI6CUxpbmsgVXAgU3RhdHVzICovCiAJR01fR1BTUl9QQVVTRQkJPSAxPDwxMSwgLyogQml0IDExOglQYXVzZSBTdGF0ZSAqLwogCUdNX0dQU1JfVFhfQUNUSVZFCT0gMTw8MTAsIC8qIEJpdCAxMDoJVHggaW4gUHJvZ3Jlc3MgKi8KLQlHTV9HUFNSX0VYQ19DT0wJCT0gMTw8OSwJLyogQml0ICA5OglFeGNlc3NpdmUgQ29sbGlzaW9ucyBPY2N1cmVkICovCi0JR01fR1BTUl9MQVRfQ09MCQk9IDE8PDgsCS8qIEJpdCAgODoJTGF0ZSBDb2xsaXNpb25zIE9jY3VyZWQgKi8KKwlHTV9HUFNSX0VYQ19DT0wJCT0gMTw8OSwJLyogQml0ICA5OglFeGNlc3NpdmUgQ29sbGlzaW9ucyBPY2N1cnJlZCAqLworCUdNX0dQU1JfTEFUX0NPTAkJPSAxPDw4LAkvKiBCaXQgIDg6CUxhdGUgQ29sbGlzaW9ucyBPY2N1cnJlZCAqLwogCiAJR01fR1BTUl9QSFlfU1RfQ0gJPSAxPDw1LAkvKiBCaXQgIDU6CVBIWSBTdGF0dXMgQ2hhbmdlICovCiAJR01fR1BTUl9HSUdfU1BFRUQJPSAxPDw0LAkvKiBCaXQgIDQ6CUdpZ2FiaXQgU3BlZWQgKDEgPSAxMDAwIE1icHMpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwLmMKaW5kZXggODZjYmI5ZS4uOGVjMWE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3NsaXAuYwpAQCAtODUzLDcgKzg1Myw5IEBACiAJLyogRG9uZS4gIFdlIGhhdmUgbGlua2VkIHRoZSBUVFkgbGluZSB0byBhIGNoYW5uZWwuICovCiAJcnRubF91bmxvY2soKTsKIAl0dHktPnJlY2VpdmVfcm9vbSA9IDY1NTM2OwkvKiBXZSBkb24ndCBmbG93IGNvbnRyb2wgKi8KLQlyZXR1cm4gc2wtPmRldi0+YmFzZV9hZGRyOworCisJLyogVFRZIGxheWVyIGV4cGVjdHMgMCBvbiBzdWNjZXNzICovCisJcmV0dXJuIDA7CiAKIGVycl9mcmVlX2J1ZnM6CiAJc2xfZnJlZV9idWZzKHNsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggNjhkNDhhYi4uNWY1M2ZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTkyMSw3ICs5MjEsNyBAQAogICogSGFjayBBbGVydDogU29tZSBzZXR1cHMganVzdCBjYW4ndCB3cml0ZSA4IG9yIDE2IGJpdHMgcmVsaWFibHkgd2hlbiBub3QKICAqIGFsaWduZWQgdG8gYSAzMiBiaXQgYm91bmRhcnkuICBJIHRlbGwgeW91IHRoYXQgZG9lcyBleGlzdCEKICAqIEZvcnR1bmF0ZWx5IHRoZSBhZmZlY3RlZCByZWdpc3RlciBhY2Nlc3NlcyBjYW4gYmUgZWFzaWx5IHdvcmtlZCBhcm91bmQKLSAqIHNpbmNlIHdlIGNhbiB3cml0ZSB6ZXJvZXMgdG8gdGhlIHByZWNlZWRpbmcgMTYgYml0cyB3aXRob3V0IGFkdmVyc2UKKyAqIHNpbmNlIHdlIGNhbiB3cml0ZSB6ZXJvZXMgdG8gdGhlIHByZWNlZGluZyAxNiBiaXRzIHdpdGhvdXQgYWR2ZXJzZQogICogZWZmZWN0cyBhbmQgdXNlIGEgMzItYml0IGFjY2Vzcy4KICAqCiAgKiBFbmZvcmNlIGl0IG9uIGFueSAzMi1iaXQgY2FwYWJsZSBzZXR1cCBmb3Igbm93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggMTU2NjI1OS4uNGI0MmVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC0xNjY5LDcgKzE2NjksNyBAQAogCX0KIAogCWlmIChlMmNtZCAmIEUyUF9DTURfRVBDX1RJTUVPVVRfKSB7Ci0JCVNNU0NfVFJBQ0UoRFJWLCAiRXJyb3Igb2NjdXJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOworCQlTTVNDX1RSQUNFKERSViwgIkVycm9yIG9jY3VycmVkIGR1cmluZyBlZXByb20gb3BlcmF0aW9uIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTgxOCw2ICsxODE4LDcgQEAKIAlTTVNDX1RSQUNFKFBST0JFLCAiUEhZIHdpbGwgYmUgYXV0b2RldGVjdGVkLiIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5kZXZfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5tYWNfbG9jayk7CiAKIAlpZiAocGRhdGEtPmlvYWRkciA9PSAwKSB7CiAJCVNNU0NfV0FSTklORyhQUk9CRSwgInBkYXRhLT5pb2FkZHI6IDB4MDAwMDAwMDAiKTsKQEAgLTE4OTUsOCArMTg5NiwxMSBAQAogCS8qIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFuIGVlcHJvbSwgd2hlcmUgdGhlIG1hYyBhZGRyZXNzCiAJICogaXMgc3RvcmVkIGVsc2V3aGVyZSBhbmQgc2V0IGJ5IHRoZSBib290bG9hZGVyLiAgVGhpcyBzYXZlcyB0aGUKIAkgKiBtYWMgYWRkcmVzcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBkZXZpY2UgKi8KLQlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MpCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTKSB7CisJCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAJCXNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3MoZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOworCX0KIAogCS8qIFJlc2V0IHRoZSBMQU45MTF4ICovCiAJaWYgKHNtc2M5MTF4X3NvZnRfcmVzZXQocGRhdGEpKQpAQCAtMjA1OSw4ICsyMDYzLDYgQEAKIAkJU01TQ19UUkFDRShQUk9CRSwgIk5ldHdvcmsgaW50ZXJmYWNlOiBcIiVzXCIiLCBkZXYtPm5hbWUpOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+bWFjX2xvY2spOwotCiAJcmV0dmFsID0gc21zYzkxMXhfbWlpX2luaXQocGRldiwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCVNNU0NfV0FSTklORyhQUk9CRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IGIwOWVlMWMuLjRjOTJhZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJfQogCiAJaWYgKGUyY21kICYgRTJQX0NNRF9FUENfVElNRU9VVF8pIHsKLQkJc21zY19pbmZvKEhXLCAiRXJyb3Igb2NjdXJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOworCQlzbXNjX2luZm8oSFcsICJFcnJvciBvY2N1cnJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IGE0ZjJiZDUuLjM2MDQ1ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMTQ0LDExICsxNDQsNyBAQAogLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nLiAqLwogI2RlZmluZSBUWF9USU1FT1VUCSgyICogSFopCiAKLS8qCi0gKiBUaGlzIFNVQ0tTLgotICogV2UgbmVlZCBhIG11Y2ggYmV0dGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgZG1hX2FkZHJfdCBpcyA2NC1iaXQuCi0gKi8KLSNpZiAoZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChDT05GSUdfSElHSE1FTTY0RykpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZCAoX19pYTY0X18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCAoZGVmaW5lZChDT05GSUdfTUlQUykgJiYgKChkZWZpbmVkKENPTkZJR19ISUdITUVNKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpKSB8fCBkZWZpbmVkKENPTkZJR182NEJJVCkpKSB8fCAoZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKENPTkZJR19QSFlTXzY0QklUKSkKKyNpZmRlZiBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUCiAvKiA2NC1iaXQgZG1hX2FkZHJfdCAqLwogI2RlZmluZSBBRERSXzY0QklUUwkvKiBUaGlzIGNoaXAgdXNlcyA2NCBiaXQgYWRkcmVzc2VzLiAqLwogI2RlZmluZSBuZXRkcnZfYWRkcl90IF9fbGU2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjX2xpYi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjX2xpYi5jCmluZGV4IGQ2NWZhYjEuLmUyNTA5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfbGliLmMKQEAgLTI2LDkgKzI2LDkgQEAKIAogI3VuZGVmIERXTUFDX0RNQV9ERUJVRwogI2lmZGVmIERXTUFDX0RNQV9ERUJVRwotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKKyNkZWZpbmUgRFdNQUNfTElCX0RCRyhmbXQsIGFyZ3MuLi4pICBwcmludGsoZm10LCAjIyBhcmdzKQogI2Vsc2UKLSNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFdNQUNfTElCX0RCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogLyogQ1NSMSBlbmFibGVzIHRoZSB0cmFuc21pdCBETUEgdG8gY2hlY2sgZm9yIG5ldyBkZXNjcmlwdG9yICovCkBAIC0xNTIsNyArMTUyLDcgQEAKIAkvKiByZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKENTUjUpICovCiAJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgRE1BX1NUQVRVUyk7CiAKLQlEQkcoSU5GTywgIiVzOiBbQ1NSNTogMHglMDh4XVxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKKwlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAiJXM6IFtDU1I1OiAweCUwOHhdXG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOwogI2lmZGVmIERXTUFDX0RNQV9ERUJVRwogCS8qIEl0IGRpc3BsYXlzIHRoZSBETUEgcHJvY2VzcyBzdGF0ZXMgKENTUjUgcmVnaXN0ZXIpICovCiAJc2hvd190eF9wcm9jZXNzX3N0YXRlKGludHJfc3RhdHVzKTsKQEAgLTE2MCw0MyArMTYwLDQzIEBACiAjZW5kaWYKIAkvKiBBQk5PUk1BTCBpbnRlcnJ1cHRzICovCiAJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19BSVMpKSB7Ci0JCURCRyhJTkZPLCAiQ1NSNVsxNV0gRE1BIEFCTk9STUFMIElSUTogIik7CisJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJDU1I1WzE1XSBETUEgQUJOT1JNQUwgSVJROiAiKTsKIAkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19VTkYpKSB7Ci0JCQlEQkcoSU5GTywgInRyYW5zbWl0IHVuZGVyZmxvd1xuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAidHJhbnNtaXQgdW5kZXJmbG93XG4iKTsKIAkJCXJldCA9IHR4X2hhcmRfZXJyb3JfYnVtcF90YzsKIAkJCXgtPnR4X3VuZGVmbG93X2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVEpUKSkgewotCQkJREJHKElORk8sICJ0cmFuc21pdCBqYWJiZXJcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInRyYW5zbWl0IGphYmJlclxuIik7CiAJCQl4LT50eF9qYWJiZXJfaXJxKys7CiAJCX0KIAkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19PVkYpKSB7Ci0JCQlEQkcoSU5GTywgInJlY3Ygb3ZlcmZsb3dcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInJlY3Ygb3ZlcmZsb3dcbiIpOwogCQkJeC0+cnhfb3ZlcmZsb3dfaXJxKys7CiAJCX0KIAkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SVSkpIHsKLQkJCURCRyhJTkZPLCAicmVjZWl2ZSBidWZmZXIgdW5hdmFpbGFibGVcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInJlY2VpdmUgYnVmZmVyIHVuYXZhaWxhYmxlXG4iKTsKIAkJCXgtPnJ4X2J1Zl91bmF2X2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlBTKSkgewotCQkJREJHKElORk8sICJyZWNlaXZlIHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAicmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWRcbiIpOwogCQkJeC0+cnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgewotCQkJREJHKElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKIAkJCXgtPnJ4X3dhdGNoZG9nX2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRVRJKSkgewotCQkJREJHKElORk8sICJ0cmFuc21pdCBlYXJseSBpbnRlcnJ1cHRcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInRyYW5zbWl0IGVhcmx5IGludGVycnVwdFxuIik7CiAJCQl4LT50eF9lYXJseV9pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RQUykpIHsKLQkJCURCRyhJTkZPLCAidHJhbnNtaXQgcHJvY2VzcyBzdG9wcGVkXG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJ0cmFuc21pdCBwcm9jZXNzIHN0b3BwZWRcbiIpOwogCQkJeC0+dHhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOwogCQkJcmV0ID0gdHhfaGFyZF9lcnJvcjsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0ZCSSkpIHsKLQkJCURCRyhJTkZPLCAiZmF0YWwgYnVzIGVycm9yXG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJmYXRhbCBidXMgZXJyb3JcbiIpOwogCQkJeC0+ZmF0YWxfYnVzX2Vycm9yX2lycSsrOwogCQkJcmV0ID0gdHhfaGFyZF9lcnJvcjsKIAkJfQpAQCAtMjE1LDcgKzIxNSw3IEBACiAJLyogQ2xlYXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIGEgbG9naWMgMSB0byB0aGUgQ1NSNVsxNS0wXSAqLwogCXdyaXRlbCgoaW50cl9zdGF0dXMgJiAweDFmZmZmKSwgaW9hZGRyICsgRE1BX1NUQVRVUyk7CiAKLQlEQkcoSU5GTywgIlxuXG4iKTsKKwlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAiXG5cbiIpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9ub3JtX2Rlc2MuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9ub3JtX2Rlc2MuYwppbmRleCBjZDBjYzc2Li4wMjljMmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvbm9ybV9kZXNjLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL25vcm1fZGVzYy5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIC8qIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgaWYgZWFjaCBpbmNvbWluZyBmcmFtZSBoYXMgc29tZSBlcnJvcnMKICAqIGFuZCwgaWYgcmVxdWlyZWQsIHVwZGF0ZXMgdGhlIG11bHRpY2FzdCBzdGF0aXN0aWNzLgotICogSW4gY2FzZSBvZiBzdWNjZXNzLCBpdCByZXR1cm5zIGNzdW1fbm9uZSBiZWNhc3VlIHRoZSBkZXZpY2UKKyAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgaXQgcmV0dXJucyBjc3VtX25vbmUgYmVjYXVzZSB0aGUgZGV2aWNlCiAgKiBpcyBub3QgYWJsZSB0byBjb21wdXRlIHRoZSBjc3VtIGluIEhXLiAqLwogc3RhdGljIGludCBuZGVzY19nZXRfcnhfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCiAJCQkgICAgICAgc3RydWN0IGRtYV9kZXNjICpwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwppbmRleCAwZTVmMDMxLi5jYzk3M2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtNzUwLDcgKzc1MCw2IEBACiAJCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5pb2FkZHIsIHRjLCBTRl9ETUFfTU9ERSk7CiAJCQlwcml2LT54c3RhdHMudGhyZXNob2xkID0gdGM7CiAJCX0KLQkJc3RtbWFjX3R4X2Vycihwcml2KTsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KHN0YXR1cyA9PSB0eF9oYXJkX2Vycm9yKSkKIAkJc3RtbWFjX3R4X2Vycihwcml2KTsKIH0KQEAgLTc4MSwyMSArNzgwLDYgQEAKIAogCXN0bW1hY192ZXJpZnlfYXJncygpOwogCi0JcmV0ID0gc3RtbWFjX2luaXRfcGh5KGRldik7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJcHJfZXJyKCIlczogQ2Fubm90IGF0dGFjaCB0byBQSFkgKGVycm9yOiAlZClcbiIsIF9fZnVuY19fLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFJlcXVlc3QgdGhlIElSUSBsaW5lcyAqLwotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzdG1tYWNfaW50ZXJydXB0LAotCQkJICBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwotCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewotCQlwcl9lcnIoIiVzOiBFUlJPUjogYWxsb2NhdGluZyB0aGUgSVJRICVkIChlcnJvcjogJWQpXG4iLAotCQkgICAgICAgX19mdW5jX18sIGRldi0+aXJxLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQogI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKIAlwcml2LT50bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdG1tYWNfdGltZXIgKiksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseShwcml2LT50bSA9PSBOVUxMKSkgewpAQCAtODE0LDYgKzc5OCwxMSBAQAogCX0gZWxzZQogCQlwcml2LT50bS0+ZW5hYmxlID0gMTsKICNlbmRpZgorCXJldCA9IHN0bW1hY19pbml0X3BoeShkZXYpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCXByX2VycigiJXM6IENhbm5vdCBhdHRhY2ggdG8gUEhZIChlcnJvcjogJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvcGVuX2Vycm9yOworCX0KIAogCS8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgVFgvUlggZGVzY3JpcHRvcnMgY2hhaW5zLiAqLwogCXByaXYtPmRtYV90eF9zaXplID0gU1RNTUFDX0FMSUdOKGRtYV90eHNpemUpOwpAQCAtODIyLDEyICs4MTEsMTEgQEAKIAlpbml0X2RtYV9kZXNjX3JpbmdzKGRldik7CiAKIAkvKiBETUEgaW5pdGlhbGl6YXRpb24gYW5kIFNXIHJlc2V0ICovCi0JaWYgKHVubGlrZWx5KHByaXYtPmh3LT5kbWEtPmluaXQocHJpdi0+aW9hZGRyLCBwcml2LT5wbGF0LT5wYmwsCi0JCQkJCSBwcml2LT5kbWFfdHhfcGh5LAotCQkJCQkgcHJpdi0+ZG1hX3J4X3BoeSkgPCAwKSkgewotCisJcmV0ID0gcHJpdi0+aHctPmRtYS0+aW5pdChwcml2LT5pb2FkZHIsIHByaXYtPnBsYXQtPnBibCwKKwkJCQkgIHByaXYtPmRtYV90eF9waHksIHByaXYtPmRtYV9yeF9waHkpOworCWlmIChyZXQgPCAwKSB7CiAJCXByX2VycigiJXM6IERNQSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIG9wZW5fZXJyb3I7CiAJfQogCiAJLyogQ29weSB0aGUgTUFDIGFkZHIgaW50byB0aGUgSFcgICovCkBAIC04NDgsNiArODM2LDE1IEBACiAJd3JpdGVsKDB4ZmZmZmZmZmYsIHByaXYtPmlvYWRkciArIE1NQ19ISUdIX0lOVFJfTUFTSyk7CiAJd3JpdGVsKDB4ZmZmZmZmZmYsIHByaXYtPmlvYWRkciArIE1NQ19MT1dfSU5UUl9NQVNLKTsKIAorCS8qIFJlcXVlc3QgdGhlIElSUSBsaW5lcyAqLworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzdG1tYWNfaW50ZXJydXB0LAorCQkJIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBhbGxvY2F0aW5nIHRoZSBJUlEgJWQgKGVycm9yOiAlZClcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5pcnEsIHJldCk7CisJCWdvdG8gb3Blbl9lcnJvcjsKKwl9CisKIAkvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqLwogCXN0bW1hY19lbmFibGVfbWFjKHByaXYtPmlvYWRkcik7CiAKQEAgLTg3OCw3ICs4NzUsMTcgQEAKIAluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcmVjeWNsZSk7CiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwogCXJldHVybiAwOworCitvcGVuX2Vycm9yOgorI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlrZnJlZShwcml2LT50bSk7CisjZW5kaWYKKwlpZiAocHJpdi0+cGh5ZGV2KQorCQlwaHlfZGlzY29ubmVjdChwcml2LT5waHlkZXYpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5ibWFjLmggYi9kcml2ZXJzL25ldC9zdW5ibWFjLmgKaW5kZXggOGRiODg5NC4uNDk0M2U5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuYm1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuaApAQCAtMTg1LDcgKzE4NSw3IEBACiAjZGVmaW5lIEJJR01BQ19SWENGR19FTkFCTEUgICAgMHgwMDAwMDAwMSAvKiBFbmFibGUgdGhlIHJlY2VpdmVyICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEJJR01BQ19SWENGR19GSUZPICAgICAgMHgwMDAwMDAwZSAvKiBEZWZhdWx0IHJ4IGZ0aHJlc2guLi4gICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEJJR01BQ19SWENGR19QU1RSSVAgICAgMHgwMDAwMDAyMCAvKiBQYWQgYnl0ZSBzdHJpcCBlbmFibGUgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEJJR01BQ19SWENGR19QTUlTQyAgICAgMHgwMDAwMDA0MCAvKiBFbmFibGUgcHJvbWlzY291cyBtb2RlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJJR01BQ19SWENGR19QTUlTQyAgICAgMHgwMDAwMDA0MCAvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfREVSUiAgICAgIDB4MDAwMDAwODAgLyogRGlzYWJsZSBlcnJvciBjaGVja2luZyAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfRENSQ1MgICAgIDB4MDAwMDAxMDAgLyogRGlzYWJsZSBDUkMgc3RyaXBwaW5nICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfTUUgICAgICAgIDB4MDAwMDAyMDAgLyogUmVjZWl2ZSBwYWNrZXRzIGFkZHJlc3NlZCB0byBtZSAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCBjMWEzNDQ4Li5kM2JlNzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMTE1MCw3ICsxMTUwLDcgQEAKIAl2YWwgJj0gfihQQ1NfQ0ZHX0VOQUJMRSB8IFBDU19DRkdfVE8pOwogCXdyaXRlbCh2YWwsIGdwLT5yZWdzICsgUENTX0NGRyk7CiAKLQkvKiBBZHZlcnRpc2UgYWxsIGNhcGFiaWxpdGllcyBleGNlcHQgYXNzeW1ldHJpYworCS8qIEFkdmVydGlzZSBhbGwgY2FwYWJpbGl0aWVzIGV4Y2VwdCBhc3ltbWV0cmljCiAJICogcGF1c2UuCiAJICovCiAJdmFsID0gcmVhZGwoZ3AtPnJlZ3MgKyBQQ1NfTUlJQURWKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5oIGIvZHJpdmVycy9uZXQvc3VuaG1lLmgKaW5kZXggNzU2YjViZi4uNjRmMjc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmgKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogLyogQmlnTWFjIHJlY2VpdmUgY29uZmlnIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfRU5BQkxFICAgMHgwMDAwMDAwMSAvKiBFbmFibGUgdGhlIHJlY2VpdmVyICAgICAgICAgICAgICovCiAjZGVmaW5lIEJJR01BQ19SWENGR19QU1RSSVAgICAweDAwMDAwMDIwIC8qIFBhZCBieXRlIHN0cmlwIGVuYWJsZSAgICAgICAgICAgKi8KLSNkZWZpbmUgQklHTUFDX1JYQ0ZHX1BNSVNDICAgIDB4MDAwMDAwNDAgLyogRW5hYmxlIHByb21pc2NvdXMgbW9kZSAgICAgICAgICAqLworI2RlZmluZSBCSUdNQUNfUlhDRkdfUE1JU0MgICAgMHgwMDAwMDA0MCAvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfREVSUiAgICAgMHgwMDAwMDA4MCAvKiBEaXNhYmxlIGVycm9yIGNoZWNraW5nICAgICAgICAgICovCiAjZGVmaW5lIEJJR01BQ19SWENGR19EQ1JDUyAgICAweDAwMDAwMTAwIC8qIERpc2FibGUgQ1JDIHN0cmlwcGluZyAgICAgICAgICAgKi8KICNkZWZpbmUgQklHTUFDX1JYQ0ZHX1JFSk1FICAgIDB4MDAwMDAyMDAgLyogUmVqZWN0IHBhY2tldHMgYWRkcmVzc2VkIHRvIG1lICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCmluZGV4IGI2ZWVjOGMuLjdjYTUxY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYworKysgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKQEAgLTExOSwxMyArMTE5LDEzIEBACiAvKgogICogQml0IGFzc2lnbm1lbnRzCiAgKi8KLS8qIERNQV9DdGwgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERNQV9DdGwgYml0IGFzc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIERNQV9SeEFsaWduCSAgICAgICAweDAwYzAwMDAwIC8qIDE6UmVjZXB0aW9uIEFsaWdubWVudAkgICAgICovCiAjZGVmaW5lIERNQV9SeEFsaWduXzEJICAgICAgIDB4MDA0MDAwMDAKICNkZWZpbmUgRE1BX1J4QWxpZ25fMgkgICAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBETUFfUnhBbGlnbl8zCSAgICAgICAweDAwYzAwMDAwCiAjZGVmaW5lIERNQV9NNjZFblN0YXQJICAgICAgIDB4MDAwODAwMDAgLyogMTo2Nk1IeiBFbmFibGUgU3RhdGUJICAgICAqLwotI2RlZmluZSBETUFfSW50TWFzawkgICAgICAgMHgwMDA0MDAwMCAvKiAxOkludGVydXB0IG1hc2sJCSAgICAgKi8KKyNkZWZpbmUgRE1BX0ludE1hc2sJICAgICAgIDB4MDAwNDAwMDAgLyogMTpJbnRlcnJ1cHQgbWFzawkJICAgICAqLwogI2RlZmluZSBETUFfU1dJbnRSZXEJICAgICAgIDB4MDAwMjAwMDAgLyogMTpTb2Z0d2FyZSBJbnRlcnJ1cHQgcmVxdWVzdCAgICAqLwogI2RlZmluZSBETUFfVHhXYWtlVXAJICAgICAgIDB4MDAwMTAwMDAgLyogMTpUcmFuc21pdCBXYWtlIFVwCQkgICAgICovCiAjZGVmaW5lIERNQV9SeEJpZ0UJICAgICAgIDB4MDAwMDgwMDAgLyogMTpSZWNlaXZlIEJpZyBFbmRpYW4JICAgICAqLwpAQCAtMTM0LDExICsxMzQsMTEgQEAKICNkZWZpbmUgRE1BX1Bvd3JNZ21udAkgICAgICAgMHgwMDAwMTAwMCAvKiAxOlBvd2VyIE1hbmFnZW1lbnQJCSAgICAgKi8KICNkZWZpbmUgRE1BX0RtQnVyc3RfTWFzayAgICAgICAweDAwMDAwMWZjIC8qIERNQSBCdXJzdCBzaXplCQkgICAgICovCiAKLS8qIFJ4RnJhZ1NpemUgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFJ4RnJhZ1NpemUgYml0IGFzc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIFJ4RnJhZ19FblBhY2sJICAgICAgIDB4MDAwMDgwMDAgLyogMTpFbmFibGUgUGFja2luZwkJICAgICAqLwogI2RlZmluZSBSeEZyYWdfTWluRnJhZ01hc2sgICAgIDB4MDAwMDBmZmMgLyogTWluaW11bSBGcmFnbWVudAkJICAgICAqLwogCi0vKiBNQUNfQ3RsIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNQUNfQ3RsIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBNQUNfTGluazEwCSAgICAgICAweDAwMDA4MDAwIC8qIDE6TGluayBTdGF0dXMgMTBNYml0cwkgICAgICovCiAjZGVmaW5lIE1BQ19Fbk1pc3NSb2xsCSAgICAgICAweDAwMDAyMDAwIC8qIDE6RW5hYmxlIE1pc3NlZCBSb2xsCSAgICAgKi8KICNkZWZpbmUgTUFDX01pc3NSb2xsCSAgICAgICAweDAwMDAwNDAwIC8qIDE6TWlzc2VkIFJvbGwJCSAgICAgKi8KQEAgLTE1Miw3ICsxNTIsNyBAQAogI2RlZmluZSBNQUNfSGFsdEltbQkgICAgICAgMHgwMDAwMDAwMiAvKiAxOkhhbHQgSW1tZWRpYXRlCQkgICAgICovCiAjZGVmaW5lIE1BQ19IYWx0UmVxCSAgICAgICAweDAwMDAwMDAxIC8qIDE6SGFsdCByZXF1ZXN0CQkgICAgICovCiAKLS8qIFBST01fQ3RsIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFBST01fQ3RsIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIFBST01fQnVzeQkgICAgICAgMHgwMDAwODAwMCAvKiAxOkJ1c3kgKFN0YXJ0IE9wZXJhdGlvbikJICAgICAqLwogI2RlZmluZSBQUk9NX1JlYWQJICAgICAgIDB4MDAwMDQwMDAgLyoxMDpSZWFkIG9wZXJhdGlvbgkJICAgICAqLwogI2RlZmluZSBQUk9NX1dyaXRlCSAgICAgICAweDAwMDAyMDAwIC8qMDE6V3JpdGUgb3BlcmF0aW9uCQkgICAgICovCkBAIC0xNjIsNyArMTYyLDcgQEAKICNkZWZpbmUgUFJPTV9BZGRyX0VuYQkgICAgICAgMHgwMDAwMDAzMCAvKjExeHh4eDpQUk9NIFdyaXRlIGVuYWJsZQkgICAgICovCiAJCQkJCSAgLyowMHh4eHg6CSAgICAgIGRpc2FibGUJICAgICAqLwogCi0vKiBDQU1fQ3RsIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBDQU1fQ3RsIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBDQU1fQ29tcEVuCSAgICAgICAweDAwMDAwMDEwIC8qIDE6Q0FNIENvbXBhcmUgRW5hYmxlCSAgICAgKi8KICNkZWZpbmUgQ0FNX05lZ0NBTQkgICAgICAgMHgwMDAwMDAwOCAvKiAxOlJlamVjdCBwYWNrZXRzIENBTSByZWNvZ25pemVzLCovCiAJCQkJCSAgLyoJCQlhY2NlcHQgb3RoZXIgKi8KQEAgLTE3MCw3ICsxNzAsNyBAQAogI2RlZmluZSBDQU1fR3JvdXBBY2MJICAgICAgIDB4MDAwMDAwMDIgLyogMTpNdWx0aWNhc3QgYXNzZXB0CQkgICAgICovCiAjZGVmaW5lIENBTV9TdGF0aW9uQWNjCSAgICAgICAweDAwMDAwMDAxIC8qIDE6dW5pY2FzdCBhY2NlcHQJCSAgICAgKi8KIAotLyogQ0FNX0VuYSBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ0FNX0VuYSBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgQ0FNX0VOVFJZX01BWAkJICAgICAgIDIxICAgLyogQ0FNIERhdGEgZW50cnkgbWF4IGNvdW50CSAgICAgKi8KICNkZWZpbmUgQ0FNX0VuYV9NYXNrICgoMTw8Q0FNX0VOVFJZX01BWCktMSkgLyogQ0FNIEVuYWJsZSBiaXRzIChNYXggMjFiaXRzKSAgKi8KICNkZWZpbmUgQ0FNX0VuYV9CaXQoaW5kZXgpCSgxIDw8IChpbmRleCkpCkBAIC0xNzgsNyArMTc4LDcgQEAKICNkZWZpbmUgQ0FNX0VOVFJZX1NPVVJDRQkxCiAjZGVmaW5lIENBTV9FTlRSWV9NQUNDVEwJMjAKIAotLyogVHhfQ3RsIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogVHhfQ3RsIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgVHhfRW4JCSAgICAgICAweDAwMDAwMDAxIC8qIDE6VHJhbnNtaXQgZW5hYmxlCQkgICAgICovCiAjZGVmaW5lIFR4X1R4SGFsdAkgICAgICAgMHgwMDAwMDAwMiAvKiAxOlRyYW5zbWl0IEhhbHQgUmVxdWVzdAkgICAgICovCiAjZGVmaW5lIFR4X05vUGFkCSAgICAgICAweDAwMDAwMDA0IC8qIDE6U3VwcHJlc3MgUGFkZGluZwkJICAgICAqLwpAQCAtMTkyLDcgKzE5Miw3IEBACiAjZGVmaW5lIFR4X0VuVHhQYXIJICAgICAgIDB4MDAwMDIwMDAgLyogMTpFbmFibGUgVHJhbnNtaXQgUGFyaXR5CSAgICAgKi8KICNkZWZpbmUgVHhfRW5Db21wCSAgICAgICAweDAwMDA0MDAwIC8qIDE6RW5hYmxlIENvbXBsZXRpb24JICAgICAqLwogCi0vKiBUeF9TdGF0IGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBUeF9TdGF0IGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBUeF9UeENvbGxfTUFTSwkgICAgICAgMHgwMDAwMDAwRiAvKiBUeCBDb2xsaXNpb24gQ291bnQJCSAgICAgKi8KICNkZWZpbmUgVHhfRXhDb2xsCSAgICAgICAweDAwMDAwMDEwIC8qIEV4Y2Vzc2l2ZSBDb2xsaXNpb24JICAgICAqLwogI2RlZmluZSBUeF9UWERlZmVyCSAgICAgICAweDAwMDAwMDIwIC8qIFRyYW5zbWl0IERlZmVyZWQJCSAgICAgKi8KQEAgLTIwOCw3ICsyMDgsNyBAQAogI2RlZmluZSBUeF9IYWx0ZWQJICAgICAgIDB4MDAwMDgwMDAgLyogVHggSGFsdGVkCQkJICAgICAqLwogI2RlZmluZSBUeF9TUUVycgkgICAgICAgMHgwMDAxMDAwMCAvKiBTaWduYWwgUXVhbGl0eSBFcnJvcihTUUUpCSAgICAgKi8KIAotLyogUnhfQ3RsIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogUnhfQ3RsIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgUnhfRW5Hb29kCSAgICAgICAweDAwMDA0MDAwIC8qIDE6RW5hYmxlIEdvb2QJCSAgICAgKi8KICNkZWZpbmUgUnhfRW5SeFBhcgkgICAgICAgMHgwMDAwMjAwMCAvKiAxOkVuYWJsZSBSZWNlaXZlIFBhcml0eQkgICAgICovCiAjZGVmaW5lIFJ4X0VuTG9uZ0VycgkgICAgICAgMHgwMDAwMDgwMCAvKiAxOkVuYWJsZSBMb25nIEVycm9yCSAgICAgKi8KQEAgLTIyMiw3ICsyMjIsNyBAQAogI2RlZmluZSBSeF9SeEhhbHQJICAgICAgIDB4MDAwMDAwMDIgLyogMTpSZWNlaXZlIEhhbHQgUmVxdWVzdAkgICAgICovCiAjZGVmaW5lIFJ4X1J4RW4JCSAgICAgICAweDAwMDAwMDAxIC8qIDE6UmVjZWl2ZSBJbnRycnVwdCBFbmFibGUJICAgICAqLwogCi0vKiBSeF9TdGF0IGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBSeF9TdGF0IGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBSeF9IYWx0ZWQJICAgICAgIDB4MDAwMDgwMDAgLyogUnggSGFsdGVkCQkJICAgICAqLwogI2RlZmluZSBSeF9Hb29kCQkgICAgICAgMHgwMDAwNDAwMCAvKiBSeCBHb29kCQkJICAgICAqLwogI2RlZmluZSBSeF9SeFBhcgkgICAgICAgMHgwMDAwMjAwMCAvKiBSeCBQYXJpdHkgRXJyb3IJCSAgICAgKi8KQEAgLTIzOCw3ICsyMzgsNyBAQAogCiAjZGVmaW5lIFJ4X1N0YXRfTWFzawkgICAgICAgMHgwMDAwRkZGMCAvKiBSeCBBbGwgU3RhdHVzIE1hc2sJCSAgICAgKi8KIAotLyogSW50X0VuIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogSW50X0VuIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgSW50X05SQWJ0RW4JICAgICAgIDB4MDAwMDA4MDAgLyogMTpOb24tcmVjb3ZlcmFibGUgQWJvcnQgRW5hYmxlICAqLwogI2RlZmluZSBJbnRfVHhDdGxDbXBFbgkgICAgICAgMHgwMDAwMDQwMCAvKiAxOlRyYW5zbWl0IEN0bCBDb21wbGV0ZSBFbmFibGUgICovCiAjZGVmaW5lIEludF9EbVBhckVyckVuCSAgICAgICAweDAwMDAwMjAwIC8qIDE6RE1BIFBhcml0eSBFcnJvciBFbmFibGUJICAgICAqLwpAQCAtMjUzLDcgKzI1Myw3IEBACiAjZGVmaW5lIEludF9GREFFeEVuCSAgICAgICAweDAwMDAwMDAxIC8qIDE6RnJlZSBEZXNjcmlwdG9yIEFyZWEJICAgICAqLwogCQkJCQkgIC8qCQkgICBFeGhhdXN0ZWQgRW5hYmxlICAqLwogCi0vKiBJbnRfU3JjIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBJbnRfU3JjIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBJbnRfTlJhYnQJICAgICAgIDB4MDAwMDQwMDAgLyogMTpOb24gUmVjb3ZlcmFibGUgZXJyb3IJICAgICAqLwogI2RlZmluZSBJbnRfRG1QYXJFcnJTdGF0ICAgICAgIDB4MDAwMDIwMDAgLyogMTpETUEgUGFyaXR5IEVycm9yICYgQ2xlYXIJICAgICAqLwogI2RlZmluZSBJbnRfQkxFeAkgICAgICAgMHgwMDAwMTAwMCAvKiAxOkJ1ZmZlciBMaXN0IEVtcHR5ICYgQ2xlYXIgICAgICovCkBAIC0yNzAsOCArMjcwLDggQEAKICNkZWZpbmUgSW50X0ludE1hY1J4CSAgICAgICAweDAwMDAwMDAyIC8qIDE6UnggY29udHJvbGxlciAmIENsZWFyCSAgICAgKi8KICNkZWZpbmUgSW50X0ludE1hY1R4CSAgICAgICAweDAwMDAwMDAxIC8qIDE6VHggY29udHJvbGxlciAmIENsZWFyCSAgICAgKi8KIAotLyogTURfQ0EgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBNRF9DQV9QcmVTdXAJICAgICAgIDB4MDAwMDEwMDAgLyogMTpQcmVhbWJsZSBTdXByZXNzCQkgICAgICovCisvKiBNRF9DQSBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBNRF9DQV9QcmVTdXAJICAgICAgIDB4MDAwMDEwMDAgLyogMTpQcmVhbWJsZSBTdXBwcmVzcwkJICAgICAqLwogI2RlZmluZSBNRF9DQV9CdXN5CSAgICAgICAweDAwMDAwODAwIC8qIDE6QnVzeSAoU3RhcnQgT3BlcmF0aW9uKQkgICAgICovCiAjZGVmaW5lIE1EX0NBX1dyCSAgICAgICAweDAwMDAwNDAwIC8qIDE6V3JpdGUgMDpSZWFkCQkgICAgICovCiAKQEAgLTI5Niw3ICsyOTYsNyBAQAogCiAjZGVmaW5lIEZEX0FMSUdOCTE2CiAKLS8qIEZyYW1lIERlc2NyaXB0ZXIgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEZyYW1lIERlc2NyaXB0ZXIgYml0IGFzc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIEZEX0ZETGVuZ3RoX01BU0sgICAgICAgMHgwMDAwRkZGRiAvKiBMZW5ndGggTUFTSwkJICAgICAqLwogI2RlZmluZSBGRF9CRENudF9NQVNLCSAgICAgICAweDAwMUYwMDAwIC8qIEJEIGNvdW50IE1BU0sgaW4gRkQJICAgICAqLwogI2RlZmluZSBGRF9Gcm1PcHRfTUFTSwkgICAgICAgMHg3QzAwMDAwMCAvKiBGcmFtZSBvcHRpb24gTUFTSwkJICAgICAqLwpAQCAtMzA5LDggKzMwOSw4IEBACiAjZGVmaW5lIEZEX05leHRfRU9MCSAgICAgICAweDAwMDAwMDAxIC8qIEZEIEVPTCBpbmRpY2F0b3IJCSAgICAgKi8KICNkZWZpbmUgRkRfQkRDbnRfU0hJRlQJICAgICAgIDE2CiAKLS8qIEJ1ZmZlciBEZXNjcmlwdGVyIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgQkRfQnVmZkxlbmd0aF9NQVNLICAgICAweDAwMDBGRkZGIC8qIFJlY2lldmUgRGF0YSBTaXplCQkgICAgICovCisvKiBCdWZmZXIgRGVzY3JpcHRlciBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCRF9CdWZmTGVuZ3RoX01BU0sgICAgIDB4MDAwMEZGRkYgLyogUmVjZWl2ZSBEYXRhIFNpemUJCSAgICAgKi8KICNkZWZpbmUgQkRfUnhCRElEX01BU0sJICAgICAgIDB4MDBGRjAwMDAgLyogQkQgSUQgTnVtYmVyIE1BU0sJCSAgICAgKi8KICNkZWZpbmUgQkRfUnhCRFNlcU5fTUFTSyAgICAgICAweDdGMDAwMDAwIC8qIFJ4IEJEIFNlcXVlbmNlIE51bWJlcgkgICAgICovCiAjZGVmaW5lIEJEX0Nvd25zQkQJICAgICAgIDB4ODAwMDAwMDAgLyogQkQgQ29udHJvbGxlciBvd25lciBiaXQJICAgICAqLwpAQCAtMzM5LDcgKzMzOSw3IEBACiAjZGVmaW5lIFRYX1RIUkVTSE9MRAkxMDI0CiAvKiB1c2VkIHRocmVzaG9sZCB3aXRoIHBhY2tldCBtYXggYnl0ZSBmb3IgbG93IHBjaSB0cmFuc2ZlciBhYmlsaXR5LiovCiAjZGVmaW5lIFRYX1RIUkVTSE9MRF9NQVggMTUzNgotLyogc2V0dGluZyB0aHJlc2hvbGQgbWF4IHZhbHVlIHdoZW4gb3ZlcnJ1biBlcnJvciBvY2N1cmVkIHRoaXMgY291bnQuICovCisvKiBzZXR0aW5nIHRocmVzaG9sZCBtYXggdmFsdWUgd2hlbiBvdmVycnVuIGVycm9yIG9jY3VycmVkIHRoaXMgY291bnQuICovCiAjZGVmaW5lIFRYX1RIUkVTSE9MRF9LRUVQX0xJTUlUIDEwCiAKIC8qIDE2ICsgUlhfQlVGX05VTSAqIDggKyBSWF9GRF9OVU0gKiAxNiArIFRYX0ZEX05VTSAqIDMyIDw9IFBBR0VfU0laRSpGRF9QQUdFX05VTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmMgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwppbmRleCAzMzk3NjE4Li44NTY0ZWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuYworKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAJaWYgKGNtZCAhPSBTSU9DREVWUFJJVkFURSkgewogCQllcnJvciA9IGNvcHlfZnJvbV91c2VyKGRhdGEsIGlmci0+aWZyX2RhdGEsIHNpemVvZihkYXRhKSk7CiAJCWlmIChlcnJvcikgewotCQkJcHJfZXJyKCJjYW50IGNvcHkgZnJvbSB1c2VyXG4iKTsKKwkJCXByX2VycigiY2FuJ3QgY29weSBmcm9tIHVzZXJcbiIpOwogCQkJUkVUKC1FRkFVTFQpOwogCQl9CiAJCURCRygiJWQgMHgleCAweCV4XG4iLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdKTsKQEAgLTk5OSw3ICs5OTksNyBAQAogICoKICAqIFJ4RCBmaWZvIGlzIHNtYWxsZXIgdGhhbiBSeEYgZmlmbyBieSBkZXNpZ24uIFVwb24gaGlnaCBsb2FkLCBSeEQgd2lsbCBiZQogICogZmlsbGVkIGFuZCBwYWNrZXRzIHdpbGwgYmUgZHJvcHBlZCBieSBuaWMgd2l0aG91dCBnZXR0aW5nIGludG8gaG9zdCBvcgotICogY291c2luZyBpbnRlcnJ1cHQuIEFueXdheSwgaW4gdGhhdCBjb25kaXRpb24sIGhvc3QgaGFzIG5vIGNoYW5jZSB0byBwcm9jY2VzcworICogY291c2luZyBpbnRlcnJ1cHQuIEFueXdheSwgaW4gdGhhdCBjb25kaXRpb24sIGhvc3QgaGFzIG5vIGNoYW5jZSB0byBwcm9jZXNzCiAgKiBhbGwgcGFja2V0cywgYnV0IGRyb3BwaW5nIGluIG5pYyBpcyBjaGVhcGVyLCBzaW5jZSBpdCB0YWtlcyAwIGNwdSBjeWNsZXMKICAqLwogCkBAIC0xMjAwLDggKzEyMDAsOCBAQAogCVJFVCgpOwogfQogCi0vKiBiZHhfcnhfcmVjZWl2ZSAtIHJlY2lldmVzIGZ1bGwgcGFja2V0cyBmcm9tIFJYRCBmaWZvIGFuZCBwYXNzIHRoZW0gdG8gT1MKLSAqIE5PVEU6IGEgc3BlY2lhbCB0cmVhdG1lbnQgaXMgZ2l2ZW4gdG8gbm9uLWNvbnRpbm91cyBkZXNjcmlwdG9ycworLyogYmR4X3J4X3JlY2VpdmUgLSByZWNlaXZlcyBmdWxsIHBhY2tldHMgZnJvbSBSWEQgZmlmbyBhbmQgcGFzcyB0aGVtIHRvIE9TCisgKiBOT1RFOiBhIHNwZWNpYWwgdHJlYXRtZW50IGlzIGdpdmVuIHRvIG5vbi1jb250aW51b3VzIGRlc2NyaXB0b3JzCiAgKiB0aGF0IHN0YXJ0IG5lYXIgdGhlIGVuZCwgd3JhcHMgYXJvdW5kIGFuZCBjb250aW51ZSBhdCB0aGUgYmVnaW5uaW5nLiBhIHNlY29uZAogICogcGFydCBpcyBjb3BpZWQgcmlnaHQgYWZ0ZXIgdGhlIGZpcnN0LCBhbmQgdGhlbiBkZXNjcmlwdG9yIGlzIGludGVycHJldGVkIGFzCiAgKiBub3JtYWwuIGZpZm8gaGFzIGFuIGV4dHJhIHNwYWNlIHRvIGFsbG93IHN1Y2ggb3BlcmF0aW9ucwpAQCAtMTU4NCw5ICsxNTg0LDkgQEAKIH0KIAogLyoKLSAqIGJkeF90eF9zcGFjZSAtIGNhbGN1bGF0ZXMgYXZhbGFibGUgc3BhY2UgaW4gVFggZmlmbworICogYmR4X3R4X3NwYWNlIC0gY2FsY3VsYXRlcyBhdmFpbGFibGUgc3BhY2UgaW4gVFggZmlmbwogICogQHByaXYgLSBOSUMgcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqIFJldHVybnMgYXZhbGlhYmxlIHNwYWNlIGluIFRYIGZpZm8gaW4gYnl0ZXMKKyAqIFJldHVybnMgYXZhaWxhYmxlIHNwYWNlIGluIFRYIGZpZm8gaW4gYnl0ZXMKICAqLwogc3RhdGljIGlubGluZSBpbnQgYmR4X3R4X3NwYWNlKHN0cnVjdCBiZHhfcHJpdiAqcHJpdikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKaW5kZXggYjZiYTg2MC4uYzU2NDJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmgKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKQEAgLTUwMiw3ICs1MDIsNyBAQAogI2RlZmluZSAgR01BQ19SWF9GSUxURVJfQUNSQyAgMHgwMDEwCS8qIGFjY2VwdCBjcmMgZXJyb3IgKi8KICNkZWZpbmUgIEdNQUNfUlhfRklMVEVSX0FNICAgIDB4MDAwOAkvKiBhY2NlcHQgbXVsdGljYXN0ICovCiAjZGVmaW5lICBHTUFDX1JYX0ZJTFRFUl9BQiAgICAweDAwMDQJLyogYWNjZXB0IGJyb2FkY2FzdCAqLwotI2RlZmluZSAgR01BQ19SWF9GSUxURVJfUFJNICAgMHgwMDAxCS8qIFswOjFdIHByb21pc2NvdXMgbW9kZSAqLworI2RlZmluZSAgR01BQ19SWF9GSUxURVJfUFJNICAgMHgwMDAxCS8qIFswOjFdIHByb21pc2N1b3VzIG1vZGUgKi8KIAogI2RlZmluZSAgTUFYX0ZSQU1FX0FCX1ZBTCAgICAgICAweDNmZmYJLyogMTM6MCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDczYzk0MmQuLjdhNWRhZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC05NzEyLDcgKzk3MTIsNyBAQAogCQllZXByb20tPmxlbiArPSBiX2NvdW50OwogCX0KIAotCS8qIHJlYWQgYnl0ZXMgdXB0byB0aGUgbGFzdCA0IGJ5dGUgYm91bmRhcnkgKi8KKwkvKiByZWFkIGJ5dGVzIHVwIHRvIHRoZSBsYXN0IDQgYnl0ZSBib3VuZGFyeSAqLwogCXBkID0gJmRhdGFbZWVwcm9tLT5sZW5dOwogCWZvciAoaSA9IDA7IGkgPCAobGVuIC0gKGxlbiAmIDMpKTsgaSArPSA0KSB7CiAJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCArIGksICZ2YWwpOwpAQCAtMTIzMjcsOCArMTIzMjcsMTAgQEAKIAkJaWYgKHZhbCAmIFZDUFVfQ0ZHU0hEV19BU1BNX0RCTkMpCiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0FTUE1fV09SS0FST1VORDsKIAkJaWYgKCh2YWwgJiBWQ1BVX0NGR1NIRFdfV09MX0VOQUJMRSkgJiYKLQkJICAgICh2YWwgJiBWQ1BVX0NGR1NIRFdfV09MX01BR1BLVCkpCisJCSAgICAodmFsICYgVkNQVV9DRkdTSERXX1dPTF9NQUdQS1QpKSB7CiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9FTkFCTEU7CisJCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJnRwLT5wZGV2LT5kZXYsIHRydWUpOworCQl9CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTEyNDYxLDggKzEyNDYzLDEwIEBACiAJCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19XT0xfQ0FQOwogCiAJCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9DQVApICYmCi0JCSAgICAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX1dPTF9FTkFCTEUpKQorCQkgICAgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19XT0xfRU5BQkxFKSkgewogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19XT0xfRU5BQkxFOworCQkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ0cC0+cGRldi0+ZGV2LCB0cnVlKTsKKwkJfQogCiAJCWlmIChjZmcyICYgKDEgPDwgMTcpKQogCQkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX0NBUEFDSVRJVkVfQ09VUExJTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDczODg0YjYuLjVlOTY3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0yMTMwLDcgKzIxMzAsNyBAQAogI2RlZmluZSBNSUlfVEczX0RTUF9FWFA5NgkJMHgwZjk2CiAjZGVmaW5lIE1JSV9URzNfRFNQX0VYUDk3CQkweDBmOTcKIAotI2RlZmluZSBNSUlfVEczX0FVWF9DVFJMCQkweDE4IC8qIGF1eGlsbGlhcnkgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBNSUlfVEczX0FVWF9DVFJMCQkweDE4IC8qIGF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgTUlJX1RHM19BVVhDVExfUENUTF8xMDBUWF9MUFdSCTB4MDAxMAogI2RlZmluZSBNSUlfVEczX0FVWENUTF9QQ1RMX1NQUl9JU09MQVRFCTB4MDAyMApAQCAtMjE0Niw3ICsyMTQ2LDcgQEAKICNkZWZpbmUgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REIJMHgwNDAwCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMCTB4MDAwMAogCi0jZGVmaW5lIE1JSV9URzNfQVVYX1NUQVQJCTB4MTkgLyogYXV4aWxsaWFyeSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX1RHM19BVVhfU1RBVAkJMHgxOSAvKiBhdXhpbGlhcnkgc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9URzNfQVVYX1NUQVRfTFBBU1MJCTB4MDAwNAogI2RlZmluZSBNSUlfVEczX0FVWF9TVEFUX1NQRE1BU0sJMHgwNzAwCiAjZGVmaW5lIE1JSV9URzNfQVVYX1NUQVRfMTBIQUxGCQkweDAxMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKaW5kZXggMTA4MDBmMS4uZmYzMmJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogICoJcGFzc2luZy9nZXR0aW5nIHRoZSBuZXh0IHZhbHVlIGZyb20gdGhlIG5pYy4gQXMgd2l0aCBhbGwgcmVxdWVzdHMKICAqCW9uIHRoaXMgbmljIGl0IGhhcyB0byBiZSBkb25lIGluIHR3byBzdGFnZXMsIGEpIHRlbGwgdGhlIG5pYyB3aGljaAogICoJbWVtb3J5IGFkZHJlc3MgeW91IHdhbnQgdG8gYWNjZXNzIGFuZCBiKSBwYXNzL2dldCB0aGUgdmFsdWUgZnJvbSB0aGUgbmljLgotICoJV2l0aCB0aGUgRUVQcm9tLCB5b3UgaGF2ZSB0byB3YWl0IGJlZm9yZSBhbmQgaW5iZXR3ZWVuIGFjY2VzcyBhKSBhbmQgYikuCisgKglXaXRoIHRoZSBFRVByb20sIHlvdSBoYXZlIHRvIHdhaXQgYmVmb3JlIGFuZCBiZXR3ZWVuIGFjY2VzcyBhKSBhbmQgYikuCiAgKglBcyB0aGlzIGlzIG9ubHkgcmVhZCBhdCBpbml0aWFsaXphdGlvbiB0aW1lIGFuZCB0aGUgd2FpdCBwZXJpb2QgaXMgdmVyeSAKICAqCXNtYWxsIHdlIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHNjaGVkdWxpbmcgaXNzdWVzLgogICovCkBAIC0xMjUxLDcgKzEyNTEsNyBAQAogLyogCiAgKiBUaGUgTklDIGhhcyB0b2xkIHVzIHRoYXQgYSBwYWNrZXQgaGFzIGJlZW4gZG93bmxvYWRlZCBvbnRvIHRoZSBjYXJkLCB3ZSBtdXN0CiAgKiBmaW5kIG91dCB3aGljaCBwYWNrZXQgaXQgaGFzIGRvbmUsIGNsZWFyIHRoZSBza2IgYW5kIGluZm9ybWF0aW9uIGZvciB0aGUgcGFja2V0Ci0gKiB0aGVuIGFkdmFuY2UgYXJvdW5kIHRoZSByaW5nIGZvciBhbGwgdHJhbm1pdHRlZCBwYWNrZXRzCisgKiB0aGVuIGFkdmFuY2UgYXJvdW5kIHRoZSByaW5nIGZvciBhbGwgdHJhbnNtaXR0ZWQgcGFja2V0cwogICovCiAKIHN0YXRpYyB2b2lkIHhsX2RuX2NvbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19TT0ZUX0VSUikKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEFkYXB0ZXIgdHJhbnNtaXR0ZWQgU29mdCBFcnJvciBSZXBvcnQgTWFjIEZyYW1lXG4iLGRldi0+bmFtZSk7CiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1RSQU5fQkNOKSAKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdlIGFyZSB0cmFubWl0dGluZyB0aGUgYmVhY29uLCBhYWFoXG4iLGRldi0+bmFtZSk7CisJCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXZSBhcmUgdHJhbnNtaXR0aW5nIHRoZSBiZWFjb24sIGFhYWhcbiIsZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfU1MpIAogCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogU2luZ2xlIFN0YXRpb24gb24gdGhlIHJpbmdcbiIsIGRldi0+bmFtZSk7CiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1JJTkdfUkVDKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwppbmRleCA1YmQxNDA3Li45MzU0Y2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwpAQCAtMTY3NSw3ICsxNjc1LDcgQEAKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfU09GVF9FUlIpCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEFkYXB0ZXIgdHJhbnNtaXR0ZWQgU29mdCBFcnJvciBSZXBvcnQgTWFjIEZyYW1lXG4iLCBkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19UUkFOX0JDTikKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogV2UgYXJlIHRyYW5taXR0aW5nIHRoZSBiZWFjb24sIGFhYWhcbiIsIGRldi0+bmFtZSk7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdlIGFyZSB0cmFuc21pdHRpbmcgdGhlIGJlYWNvbiwgYWFhaFxuIiwgZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfU1MpCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpbmdsZSBTdGF0aW9uIG9uIHRoZSByaW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19SSU5HX1JFQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCmluZGV4IDc4NWFkMWEuLjJiZWRjMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwpAQCAtNzMsNyArNzMsNyBAQAogc3RhdGljIGlycXJldHVybl90IG1hZGdlbWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKIC8qCi0gKiBUaGVzZSB3b3JrIGFyb3VuZCBwYWdpbmcsIGhvd2V2ZXIgdGhleSBkb24ndCBndWFyZW50ZWUgeW91J3JlIG9uIHRoZQorICogVGhlc2Ugd29yayBhcm91bmQgcGFnaW5nLCBob3dldmVyIHRoZXkgZG9uJ3QgZ3VhcmFudGVlIHlvdSdyZSBvbiB0aGUKICAqIHJpZ2h0IHBhZ2UuCiAgKi8KICNkZWZpbmUgU0lGUkVBREIocmVnKSAoaW5iKGRldi0+YmFzZV9hZGRyICsgKChyZWc8MHg4KT9yZWc6cmVnLTB4OCkpKQpAQCAtMzg3LDcgKzM4Nyw3IEBACiAgKiBib3RoIHdpdGggdGhlaXIgb3duIGRpc2FkdmFudGFnZXMuLi4KICAqCiAgKiAxKSAgCVJlYWQgaW4gdGhlIFNJRlNUUyByZWdpc3RlciBmcm9tIHRoZSBUTVMgY29udHJvbGxlci4gIFRoaXMKLSAqCWlzIGd1YXJlbnRlZWQgdG8gYmUgYWNjdXJhdGUsIGhvd2V2ZXIsIHRoZXJlJ3MgYSBmYWlybHkKKyAqCWlzIGd1YXJhbnRlZWQgdG8gYmUgYWNjdXJhdGUsIGhvd2V2ZXIsIHRoZXJlJ3MgYSBmYWlybHkKICAqCWxhcmdlIHBlcmZvcm1hbmNlIHBlbmFsdHkgZm9yIGRvaW5nIHNvOiB0aGUgTWFkZ2UgY2hpcHMKICAqCW11c3QgcmVxdWVzdCB0aGUgcmVnaXN0ZXIgZnJvbSB0aGUgRWFnbGUsIHRoZSBFYWdsZSBtdXN0CiAgKglyZWFkIHRoZW0gZnJvbSBpdHMgaW50ZXJuYWwgYnVzLCBhbmQgdGhlbiB0YWtlIHRoZSByb3V0ZQpAQCAtNDU0LDcgKzQ1NCw3IEBACiB9CiAKIC8qCi0gKiBTZXQgdGhlIGNhcmQgdG8gdGhlIHByZWZlcmVkIHJpbmcgc3BlZWQuCisgKiBTZXQgdGhlIGNhcmQgdG8gdGhlIHByZWZlcnJlZCByaW5nIHNwZWVkLgogICoKICAqIFVubGlrZSBuZXdlciBjYXJkcywgdGhlIE1DMTYvMzIgaGF2ZSB0aGVpciBzcGVlZCBzZWxlY3Rpb24KICAqIGNpcmN1aXQgY29ubmVjdGVkIHRvIHRoZSBNYWRnZSBBU0lDcyBhbmQgbm90IHRvIHRoZSBUTVMzODAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCmluZGV4IDNkMmZiZTYuLjI2ODQwMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwpAQCAtMTUwMCw3ICsxNTAwLDcgQEAKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfU09GVF9FUlIpCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBZGFwdGVyIHRyYW5zbWl0dGVkIFNvZnQgRXJyb3IgUmVwb3J0IE1hYyBGcmFtZVxuIixkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19UUkFOX0JDTikgCi0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXZSBhcmUgdHJhbm1pdHRpbmcgdGhlIGJlYWNvbiwgYWFhaFxuIixkZXYtPm5hbWUpOworCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogV2UgYXJlIHRyYW5zbWl0dGluZyB0aGUgYmVhY29uLCBhYWFoXG4iLGRldi0+bmFtZSk7CiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NTKSAKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpbmdsZSBTdGF0aW9uIG9uIHRoZSByaW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19SSU5HX1JFQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggNjNkYjVhNi4uZDkwNDRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogICAgICAgICB0cC0+cnhfYmRiX2VuZFtOT05fTUFDX1FVRVVFXSA9IChCREJsb2NrICopc21jdHJfbWFsbG9jKGRldiwgMCk7CiAKICAgICAgICAgLyogQWxsb2NhdGUgTUFDIHRyYW5zbWl0IGJ1ZmZlcnMuCi0gICAgICAgICAqIE1BQyBUeCBCdWZmZXJzIGRvZW4ndCBoYXZlIHRvIGJlIG9uIGFuIE9ERCBCb3VuZHJ5LgorICAgICAgICAgKiBNQUMgVHggQnVmZmVycyBkb2VuJ3QgaGF2ZSB0byBiZSBvbiBhbiBPREQgQm91bmRhcnkuCiAgICAgICAgICAqLwogICAgICAgICB0cC0+dHhfYnVmZl9oZWFkW01BQ19RVUVVRV0KICAgICAgICAgICAgICAgICA9IChfX3UxNiAqKXNtY3RyX21hbGxvYyhkZXYsIHRwLT50eF9idWZmX3NpemVbTUFDX1FVRVVFXSk7CkBAIC00MTUsNyArNDE1LDcgQEAKIAogICAgICAgICAvKiBBbGxvY2F0ZSBOb24tTUFDIHRyYW5zbWl0IGJ1ZmZlcnMuCiAgICAgICAgICAqID8/IEZvciBtYXhpbXVtIE5ldHdhcmUgcGVyZm9ybWFuY2UsIHB1dCBUeCBCdWZmZXJzIG9uCi0gICAgICAgICAqIE9ERCBCb3VuZHJ5IGFuZCB0aGVuIHJlc3RvcmUgbWFsbG9jIHRvIEV2ZW4gQm91bmRyeXMuCisgICAgICAgICAqIE9ERCBCb3VuZGFyeSBhbmQgdGhlbiByZXN0b3JlIG1hbGxvYyB0byBFdmVuIEJvdW5kcnlzLgogICAgICAgICAgKi8KICAgICAgICAgc21jdHJfbWFsbG9jKGRldiwgMUwpOwogICAgICAgICB0cC0+dHhfYnVmZl9oZWFkW05PTl9NQUNfUVVFVUVdCkBAIC0xMzExLDcgKzEzMTEsNyBAQAogICAgICAgICBtZW1fdXNlZCArPSBzaXplb2YoQkRCbG9jaykgKiB0cC0+bnVtX3J4X2JkYnNbTUFDX1FVRVVFXTsKIAogICAgICAgICAvKiBBbGxvY2F0ZSBNQUMgdHJhbnNtaXQgYnVmZmVycy4KLSAgICAgICAgICogTUFDIHRyYW5zbWl0IGJ1ZmZlcnMgZG9uJ3QgaGF2ZSB0byBiZSBvbiBhbiBPREQgQm91bmRyeS4KKyAgICAgICAgICogTUFDIHRyYW5zbWl0IGJ1ZmZlcnMgZG9uJ3QgaGF2ZSB0byBiZSBvbiBhbiBPREQgQm91bmRhcnkuCiAgICAgICAgICAqLwogICAgICAgICBtZW1fdXNlZCArPSB0cC0+dHhfYnVmZl9zaXplW01BQ19RVUVVRV07CiAKQEAgLTEzMjUsNyArMTMyNSw3IEBACiAKICAgICAgICAgLyogQWxsb2NhdGUgTm9uLU1BQyB0cmFuc21pdCBidWZmZXJzLgogICAgICAgICAgKiBGb3IgbWF4aW11bSBOZXR3YXJlIHBlcmZvcm1hbmNlLCBwdXQgVHggQnVmZmVycyBvbgotICAgICAgICAgKiBPREQgQm91bmRyeSxhbmQgdGhlbiByZXN0b3JlIG1hbGxvYyB0byBFdmVuIEJvdW5kcnlzLgorICAgICAgICAgKiBPREQgQm91bmRhcnksYW5kIHRoZW4gcmVzdG9yZSBtYWxsb2MgdG8gRXZlbiBCb3VuZHJ5cy4KICAgICAgICAgICovCiAgICAgICAgIG1lbV91c2VkICs9IDFMOwogICAgICAgICBtZW1fdXNlZCArPSB0cC0+dHhfYnVmZl9zaXplW05PTl9NQUNfUVVFVUVdOwpAQCAtMzA2OSw4ICszMDY5LDggQEAKICAqIGRpc2FibGVkLiE/CiAgKgogICogTk9URSAyOiBJZiB0aGUgbW9uaXRvcl9zdGF0ZSBpcyBNU19CRUFDT05fVEVTVF9TVEFURSBhbmQgdGhlIHJlY2VpdmVfbWFzawotICogaGFzIGFueSBtdWx0aS1jYXN0IG9yIHByb21pc2NvdXMgYml0cyBzZXQsIHRoZSByZWNlaXZlX21hc2sgbmVlZHMgdG8KLSAqIGJlIGNoYW5nZWQgdG8gY2xlYXIgdGhlIG11bHRpLWNhc3Qgb3IgcHJvbWlzY291cyBtb2RlIGJpdHMsIHRoZSBsb2JlX3Rlc3QKKyAqIGhhcyBhbnkgbXVsdGktY2FzdCBvciBwcm9taXNjdW91cyBiaXRzIHNldCwgdGhlIHJlY2VpdmVfbWFzayBuZWVkcyB0bworICogYmUgY2hhbmdlZCB0byBjbGVhciB0aGUgbXVsdGktY2FzdCBvciBwcm9taXNjdW91cyBtb2RlIGJpdHMsIHRoZSBsb2JlX3Rlc3QKICAqIHJ1biwgYW5kIHRoZW4gdGhlIHJlY2VpdmUgbWFzayBzZXQgYmFjayB0byBpdHMgb3JpZ2luYWwgdmFsdWUgaWYgdGhlIHRlc3QKICAqIGlzIHN1Y2Nlc3NmdWwuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKaW5kZXggNjBiMzBlZS4uZTVhNjE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKQEAgLTQ0Miw3ICs0NDIsNyBAQAogI2RlZmluZSBQQVNTX0ZJUlNUX0JVRl9PTkxZCTB4MDEwMAkvKiBQYXNzZXMgb25seSBmaXJzdCBpbnRlcm5hbCBidWZmZXIKIAkJCQkJICogb2YgZWFjaCByZWNlaXZlZCBmcmFtZTsgRnJhbWVTaXplCiAJCQkJCSAqIG9mIFJQTHMgbXVzdCBjb250YWluIGludGVybmFsCi0JCQkJCSAqIEJVRkZFUl9TSVpFIGJpdHMgZm9yIHByb21pc2NvdXMgbW9kZS4KKwkJCQkJICogQlVGRkVSX1NJWkUgYml0cyBmb3IgcHJvbWlzY3VvdXMgbW9kZS4KIAkJCQkJICovCiAjZGVmaW5lIEVOQUJMRV9GVUxMX0RVUExFWF9TRUxFQ1RJT04JMHgyMDAwIAogIAkJCQkJLyogRW5hYmxlIHRoZSB1c2Ugb2YgZnVsbC1kdXBsZXgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguaCBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguaAppbmRleCA1YTc3YWU2Li41ZmVlN2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5oCkBAIC0zMDUsOSArMzA1LDkgQEAKICNkZWZpbmUgVFNJMTA4X1RYX0NSQwkoMSA8PCA1KQkvKiBHZW5lcmF0ZSBDUkMgZm9yIHRoaXMgcGFja2V0ICovCiAjZGVmaW5lIFRTSTEwOF9UWF9JTlQJKDEgPDwgMTQpCS8qIEdlbmVyYXRlIGFuIElSUSBhZnRlciBmcmFnLiBwcm9jZXNzZWQgKi8KICNkZWZpbmUgVFNJMTA4X1RYX1JFVFJZCSgweGYgPDwgMTYpCS8qIDQgYml0IGZpZWxkIGluZGljYXRpbmcgbnVtLiBvZiByZXRyaWVzICovCi0jZGVmaW5lIFRTSTEwOF9UWF9DT0wJKDEgPDwgMjApCS8qIFNldCBpZiBhIGNvbGxpc2lvbiBvY2N1cmVkICovCi0jZGVmaW5lIFRTSTEwOF9UWF9MQ09MCSgxIDw8IDI0KQkvKiBTZXQgaWYgYSBsYXRlIGNvbGxpc2lvbiBvY2N1cmVkICovCi0jZGVmaW5lIFRTSTEwOF9UWF9VTkRFUgkoMSA8PCAyNSkJLyogU2V0IGlmIGEgRklGTyB1bmRlcnJ1biBvY2N1cmVkICovCisjZGVmaW5lIFRTSTEwOF9UWF9DT0wJKDEgPDwgMjApCS8qIFNldCBpZiBhIGNvbGxpc2lvbiBvY2N1cnJlZCAqLworI2RlZmluZSBUU0kxMDhfVFhfTENPTAkoMSA8PCAyNCkJLyogU2V0IGlmIGEgbGF0ZSBjb2xsaXNpb24gb2NjdXJyZWQgKi8KKyNkZWZpbmUgVFNJMTA4X1RYX1VOREVSCSgxIDw8IDI1KQkvKiBTZXQgaWYgYSBGSUZPIHVuZGVycnVuIG9jY3VycmVkICovCiAjZGVmaW5lIFRTSTEwOF9UWF9STElNCSgxIDw8IDI2KQkvKiBTZXQgaWYgdGhlIHJldHJ5IGxpbWl0IHdhcyByZWFjaGVkICovCiAjZGVmaW5lIFRTSTEwOF9UWF9PSwkoMSA8PCAzMCkJLyogU2V0IGlmIHRoZSBmcmFtZSBUWCB3YXMgc3VjY2Vzc2Z1bCAqLwogI2RlZmluZSBUU0kxMDhfVFhfT1dOCSgxIDw8IDMxKQkvKiBTZXQgaWYgdGhlIGRldmljZSBvd25zIHRoZSBkZXNjcmlwdG9yICovCkBAIC0zMzIsNyArMzMyLDcgQEAKICNkZWZpbmUgVFNJMTA4X1JYX1JVTlQJKDEgPDwgNCkvKiBQYWNrZXQgaXMgbGVzcyB0aGFuIG1pbmltdW0gc2l6ZSAqLwogI2RlZmluZSBUU0kxMDhfUlhfSEFTSAkoMSA8PCA3KS8qIEhhc2ggdGFibGUgbWF0Y2ggKi8KICNkZWZpbmUgVFNJMTA4X1JYX0JBRAkoMSA8PCA4KQkvKiBCYWQgZnJhbWUgKi8KLSNkZWZpbmUgVFNJMTA4X1JYX09WRVIJKDEgPDwgOSkJLyogRklGTyBvdmVycnVuIG9jY3VyZWQgKi8KKyNkZWZpbmUgVFNJMTA4X1JYX09WRVIJKDEgPDwgOSkJLyogRklGTyBvdmVycnVuIG9jY3VycmVkICovCiAjZGVmaW5lIFRTSTEwOF9SWF9UUlVOQwkoMSA8PCAxMSkJLyogUGFja2V0IHRydW5jYXRlZCBkdWUgdG8gZXhjZXNzIGxlbmd0aCAqLwogI2RlZmluZSBUU0kxMDhfUlhfQ1JDCSgxIDw8IDEyKQkvKiBQYWNrZXQgaGFkIGEgQ1JDIGVycm9yICovCiAjZGVmaW5lIFRTSTEwOF9SWF9JTlQJKDEgPDwgMTMpCS8qIEdlbmVyYXRlIGFuIElSUSBhZnRlciBmcmFnLiBwcm9jZXNzZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IDRkYmQ0OTMuLmVmYWExZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtNzksNyArNzksNyBAQAogICAgIGV2ZXJ5ICB1c2FibGUgREVDY2hpcCBib2FyZCwgIEkgIHBpbmNoZWQgRG9uYWxkJ3MgJ25leHRfbW9kdWxlJyBmaWVsZCB0bwogICAgIGxpbmsgbXkgbW9kdWxlcyB0b2dldGhlci4KIAotICAgIFVwdG8gMTUgRUlTQSBjYXJkcyBjYW4gYmUgc3VwcG9ydGVkIHVuZGVyIHRoaXMgZHJpdmVyLCBsaW1pdGVkIHByaW1hcmlseQorICAgIFVwIHRvIDE1IEVJU0EgY2FyZHMgY2FuIGJlIHN1cHBvcnRlZCB1bmRlciB0aGlzIGRyaXZlciwgbGltaXRlZCBwcmltYXJpbHkKICAgICBieSB0aGUgYXZhaWxhYmxlIElSUSBsaW5lcy4gIEkgaGF2ZSAgY2hlY2tlZCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgb2YKICAgICBtdWx0aXBsZSBkZXBjYSwgRXRoZXJXT1JLUyAzIGNhcmRzIGFuZCBkZTR4NSBjYXJkcyBhbmQgIGhhdmUgbm90IGZvdW5kIGEKICAgICBwcm9ibGVtIHlldCAocHJvdmlkZWQgeW91IGhhdmUgYXQgbGVhc3QgZGVwY2EuYyB2MC4zOCkgLi4uCkBAIC01MTcsNyArNTE3LDcgQEAKICAgICB1X2ludCBtY2k7ICAgICAgICAgICAgICAvKiAyMTE0MiBNSUkgQ29ubmVjdG9yIEludGVycnVwdCBpbmZvICAgICAgICAqLwogfTsKIAotI2RlZmluZSBERTRYNV9NQVhfUEhZIDggICAgIC8qIEFsbG93IHVwdG8gOCBhdHRhY2hlZCBQSFkgZGV2aWNlcyBwZXIgYm9hcmQgKi8KKyNkZWZpbmUgREU0WDVfTUFYX1BIWSA4ICAgICAvKiBBbGxvdyB1cCB0byA4IGF0dGFjaGVkIFBIWSBkZXZpY2VzIHBlciBib2FyZCAqLwogCiBzdHJ1Y3Qgc2lhX3BoeSB7CiAgICAgdV9jaGFyIG1jOyAgICAgICAgICAgICAgLyogTWVkaWEgQ29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE0MzYsNyArMTQzNiw3IEBACiAKICAgICAvKiBQb2xsIGZvciBzZXR1cCBmcmFtZSBjb21wbGV0aW9uIChhZGFwdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIG5vdykgKi8KIAotICAgIGZvciAoaj0wLCBpPTA7KGk8NTAwKSAmJiAoaj09MCk7aSsrKSB7ICAgICAgIC8qIFVwdG8gNTAwbXMgZGVsYXkgKi8KKyAgICBmb3IgKGo9MCwgaT0wOyhpPDUwMCkgJiYgKGo9PTApO2krKykgeyAgICAgICAvKiBVcCB0byA1MDBtcyBkZWxheSAqLwogCW1kZWxheSgxKTsKIAlpZiAoKHMzMilsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tscC0+dHhfbmV3XS5zdGF0dXMpID49IDApIGo9MTsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKaW5kZXggNzA2NGUwMy4uZmIwN2Y0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAogCiAJLyogSWYgY2hpcCByZXBvcnRzIHRoYXQgbGluayBpcyBmYWlsZWQgaXQgY291bGQgYmUgYmVjYXVzZSBleHRlcm5hbAotCQlQSFkgbGluayBzdGF0dXMgcGluIGlzIG5vdCBjb25lY3RlZCBjb3JyZWN0bHkgdG8gY2hpcAorCQlQSFkgbGluayBzdGF0dXMgcGluIGlzIG5vdCBjb25uZWN0ZWQgY29ycmVjdGx5IHRvIGNoaXAKIAkJVG8gYmUgc3VyZSBhc2sgUEhZIHRvby4KIAkqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCmluZGV4IDMwMzFlZDkuLjI5NjQ4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCSAgMHgwMiwgICAgICAgLyogcGh5IHJlc2V0IHNlcXVlbmNlIGxlbmd0aCAqLwogCQkJICAweDAxLCAweDAwLCAvKiBwaHkgcmVzZXQgc2VxdWVuY2UgKi8KIAkJCSAgMHgwMCwgMHg3OCwgLyogbWVkaWEgY2FwYWJpbGl0aWVzICovCi0JCQkgIDB4MDAsIDB4ZTAsIC8qIG53YXkgYWR2ZXJ0aXNtZW50ICovCisJCQkgIDB4MDAsIDB4ZTAsIC8qIG53YXkgYWR2ZXJ0aXNlbWVudCAqLwogCQkJICAweDAwLCAweDA1LCAvKiBmZHggYml0IG1hcCAqLwogCQkJICAweDAwLCAweDA2ICAvKiB0dG0gYml0IG1hcCAqLwogCQkJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCA3ZmE1ZWMyLi44MjY1M2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC04NDYsNyArODQ2LDcgQEAKIAlpZih0eXBob29uX251bV9mcmVlX3R4KHR4UmluZykgPCAobnVtRGVzYyArIDIpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCQkvKiBBIFR4IGNvbXBsZXRlIElSUSBjb3VsZCBoYXZlIGdvdHRlbiBpbmJldHdlZW4sIG1ha2luZworCQkvKiBBIFR4IGNvbXBsZXRlIElSUSBjb3VsZCBoYXZlIGdvdHRlbiBiZXR3ZWVuLCBtYWtpbmcKIAkJICogdGhlIHJpbmcgZnJlZSBhZ2Fpbi4gT25seSBuZWVkIHRvIHJlY2hlY2sgaGVyZSwgc2luY2UKIAkJICogVHggaXMgc2VyaWFsaXplZC4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCAwNTViODdhLi5kMTJmY2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTgwLDcgKzgwLDcgQEAKIAkJCQkgICBmcmFtZXMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuIDEyOAogCQkJCSAgIChJbmNsdWRpbmcgRkNTIGxlbmd0aD09NCkgYW5kIDI1NSBvY3RldHMgKi8KIAl1MzIgdHhvazsJCS8qIFRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVzaWRpbmcgaW4gZnJhbWVzCi0JCQkJICAgdGhhdCB3aGVyZSBpbnZvbHZlZCBpbiBzdWNjZXNzZnVsbAorCQkJCSAgIHRoYXQgd2hlcmUgaW52b2x2ZWQgaW4gc3VjY2Vzc2Z1bAogCQkJCSAgIHRyYW5zbWlzc2lvbiAqLwogCXUxNiB0eGNmOwkJLyogVG90YWwgbnVtYmVyIG9mIFBBVVNFIGNvbnRyb2wgZnJhbWVzCiAJCQkJICAgdHJhbnNtaXR0ZWQgYnkgdGhpcyBNQUMgKi8KQEAgLTc1OSw3ICs3NTksNyBAQAogCQkJCSAgIGZyYW1lcykgcmVjZWl2ZWQgdGhhdCB3ZXJlIGJldHdlZW4gMTI4CiAJCQkJICAgKEluY2x1ZGluZyBGQ1MgbGVuZ3RoPT00KSBhbmQgMjU1IG9jdGV0cyAqLwogCXUzMiB0eG9rOwkJLyogVG90YWwgbnVtYmVyIG9mIG9jdGV0cyByZXNpZGluZyBpbiBmcmFtZXMKLQkJCQkgICB0aGF0IHdoZXJlIGludm9sdmVkIGluIHN1Y2Nlc3NmdWxsCisJCQkJICAgdGhhdCB3aGVyZSBpbnZvbHZlZCBpbiBzdWNjZXNzZnVsCiAJCQkJICAgdHJhbnNtaXNzaW9uICovCiAJdTE2IHR4Y2Y7CQkvKiBUb3RhbCBudW1iZXIgb2YgUEFVU0UgY29udHJvbCBmcmFtZXMKIAkJCQkgICB0cmFuc21pdHRlZCBieSB0aGlzIE1BQyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMKaW5kZXggNWYzYjk3Ni4uODgyZjUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAogCQkvKgogCQkgKiBFRU0gcGFja2V0IGhlYWRlciBmb3JtYXQ6Ci0JCSAqIGIwLi4xNDoJRUVNIHR5cGUgZGVwZW5kYW50IChEYXRhIG9yIENvbW1hbmQpCisJCSAqIGIwLi4xNDoJRUVNIHR5cGUgZGVwZW5kZW50IChEYXRhIG9yIENvbW1hbmQpCiAJCSAqIGIxNToJCWJtVHlwZQogCQkgKi8KIAkJaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CkBAIC0zNDAsNyArMzQwLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBlZW1faW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiQ0RDIEVFTSBEZXZpY2UiLAotCS5mbGFncyA9CUZMQUdfRVRIRVIsCisJLmZsYWdzID0JRkxBR19FVEhFUiB8IEZMQUdfUE9JTlRUT1BPSU5ULAogCS5iaW5kID0JCWVlbV9iaW5kLAogCS5yeF9maXh1cCA9CWVlbV9yeF9maXh1cCwKIAkudHhfZml4dXAgPQllZW1fdHhfZml4dXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKaW5kZXggNTFjMjU5Yi4uYzkyNGVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYwpAQCAtNDUyLDcgKzQ1Miw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JY2RjX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIkNEQyBFdGhlcm5ldCBEZXZpY2UiLAotCS5mbGFncyA9CUZMQUdfRVRIRVIsCisJLmZsYWdzID0JRkxBR19FVEhFUiB8IEZMQUdfUE9JTlRUT1BPSU5ULAogCS8vIC5jaGVja19jb25uZWN0ID0gY2RjX2NoZWNrX2Nvbm5lY3QsCiAJLmJpbmQgPQkJdXNibmV0X2NkY19iaW5kLAogCS51bmJpbmQgPQl1c2JuZXRfY2RjX3VuYmluZCwKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCS5tYW5hZ2VfcG93ZXIgPQljZGNfbWFuYWdlX3Bvd2VyLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBtYm1faW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gd3dhbl9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJNb2JpbGUgQnJvYWRiYW5kIE5ldHdvcmsgRGV2aWNlIiwKIAkuZmxhZ3MgPQlGTEFHX1dXQU4sCiAJLmJpbmQgPQkJdXNibmV0X2NkY19iaW5kLApAQCAtNDcxLDYgKzQ3MSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkweDEyRDEKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkCXByb2R1Y3RzIFtdID0gewogLyoKQEAgLTU2Niw3ICs1NjcsNyBAQAogewogCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTAwNCwgMHg2MWFhLCBVU0JfQ0xBU1NfQ09NTSwKIAkJCVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsIFVTQl9DRENfUFJPVE9fTk9ORSksCi0JLmRyaXZlcl9pbmZvCQk9IDAsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnd3YW5faW5mbywKIH0sCiAKIC8qCkBAIC01ODcsOCArNTg4LDE3IEBACiB9LCB7CiAJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCiAJCQlVU0JfQ0RDX1BST1RPX05PTkUpLAotCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZtYm1faW5mbywKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmd3dhbl9pbmZvLAogCit9LCB7CisJLyogVmFyaW91cyBIdWF3ZWkgbW9kZW1zIHdpdGggYSBuZXR3b3JrIHBvcnQgbGlrZSB0aGUgVU1HMTgzMSAqLworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IKKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IEhVQVdFSV9WRU5ET1JfSUQsCisJLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSBVU0JfQ0RDX1NVQkNMQVNTX0VUSEVSTkVULAorCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAyNTUsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnd3YW5faW5mbywKIH0sCiAJeyB9LAkJLy8gRU5ECiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKaW5kZXggNzExMzE2OC4uMTAzM2VmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCkBAIC01NCwxMyArNTQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvdXNibmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgogCi0jZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSI3LUZlYi0yMDExIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiMjMtQXByLTIwMTEiCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgMy4yLjEgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMTZfTEVOR1RIX01JTgkJMHgxMAogCiAvKiBNYXhpbXVtIE5UQiBsZW5ndGggKi8KLSNkZWZpbmUJQ0RDX05DTV9OVEJfTUFYX1NJWkVfVFgJCQkxNjM4NAkvKiBieXRlcyAqLworI2RlZmluZQlDRENfTkNNX05UQl9NQVhfU0laRV9UWAkJCSgxNjM4NCArIDQpIC8qIGJ5dGVzLCBtdXN0IGJlIHNob3J0IHRlcm1pbmF0ZWQgKi8KICNkZWZpbmUJQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlgJCQkxNjM4NAkvKiBieXRlcyAqLwogCiAvKiBNaW5pbXVtIHZhbHVlIGZvciBNYXhEYXRhZ3JhbVNpemUsIGNoLiA2LjIuOSAqLwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjZGNfbmNtX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkNEQyBOQ00iLAotCS5mbGFncyA9IEZMQUdfTk9fU0VUSU5UIHwgRkxBR19NVUxUSV9QQUNLRVQsCisJLmZsYWdzID0gRkxBR19QT0lOVFRPUE9JTlQgfCBGTEFHX05PX1NFVElOVCB8IEZMQUdfTVVMVElfUEFDS0VULAogCS5iaW5kID0gY2RjX25jbV9iaW5kLAogCS51bmJpbmQgPSBjZGNfbmNtX3VuYmluZCwKIAkuY2hlY2tfY29ubmVjdCA9IGNkY19uY21fY2hlY2tfY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfc3Vic2V0LmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX3N1YnNldC5jCmluZGV4IGNhMzlhY2UuLmZjNWYxM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfc3Vic2V0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NkY19zdWJzZXQuYwpAQCAtODksNiArODksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWFsaV9tNTYzMl9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJBTGkgTTU2MzIiLAorCS5mbGFncyAgICAgICA9IEZMQUdfUE9JTlRUT1BPSU5ULAogfTsKIAogI2VuZGlmCkBAIC0xMTAsNiArMTExLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlhbjI3MjBfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiQW5jaG9yQ2hpcHMvQ3lwcmVzcyAyNzIwIiwKKwkuZmxhZ3MgICAgICAgPSBGTEFHX1BPSU5UVE9QT0lOVCwKIAkvLyBubyByZXNldCBhdmFpbGFibGUhCiAJLy8gbm8gY2hlY2tfY29ubmVjdCBhdmFpbGFibGUhCiAKQEAgLTEzMiw2ICsxMzQsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWJlbGtpbl9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJCZWxraW4sIGVURUssIG9yIGNvbXBhdGlibGUiLAorCS5mbGFncyAgICAgICA9IEZMQUdfUE9JTlRUT1BPSU5ULAogfTsKIAogI2VuZGlmCS8qIENPTkZJR19VU0JfQkVMS0lOICovCkBAIC0xNTcsNiArMTYwLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JZXBzb24yODg4X2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIkVwc29uIFVTQiBEZXZpY2UiLAogCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKKwkuZmxhZ3MgPSBGTEFHX1BPSU5UVE9QT0lOVCwKIAogCS5pbiA9IDQsIC5vdXQgPSAzLAogfTsKQEAgLTE3Myw2ICsxNzcsNyBAQAogI2RlZmluZSBIQVZFX0hBUkRXQVJFCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGtjMjE5MF9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9ICAiS0MgVGVjaG5vbG9neSBLQy0xOTAiLAorCS5mbGFncyA9IEZMQUdfUE9JTlRUT1BPSU5ULAogfTsKICNlbmRpZiAvKiBDT05GSUdfVVNCX0tDMjE5MCAqLwogCkBAIC0yMDAsMTYgKzIwNSwxOSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlsaW51eGRldl9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJMaW51eCBEZXZpY2UiLAogCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKKwkuZmxhZ3MgPSBGTEFHX1BPSU5UVE9QT0lOVCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JeW9weV9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJZb3B5IiwKIAkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCisJLmZsYWdzID0gRkxBR19QT0lOVFRPUE9JTlQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWJsb2JfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiQm9vdCBMb2FkZXIgT0JqZWN0IiwKIAkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCisJLmZsYWdzID0gRkxBR19QT0lOVFRPUE9JTlQsCiB9OwogCiAjZW5kaWYJLyogQ09ORklHX1VTQl9BUk1MSU5VWCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2dsNjIwYS5jIGIvZHJpdmVycy9uZXQvdXNiL2dsNjIwYS5jCmluZGV4IGRjZDU3YzMuLmM0Y2ZkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZ2w2MjBhLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWdlbmVsaW5rX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIkdlbmVzeXMgR2VuZUxpbmsiLAotCS5mbGFncyA9CUZMQUdfRlJBTUlOR19HTCB8IEZMQUdfTk9fU0VUSU5ULAorCS5mbGFncyA9CUZMQUdfUE9JTlRUT1BPSU5UIHwgRkxBR19GUkFNSU5HX0dMIHwgRkxBR19OT19TRVRJTlQsCiAJLmJpbmQgPQkJZ2VuZWxpbmtfYmluZCwKIAkucnhfZml4dXAgPQlnZW5lbGlua19yeF9maXh1cCwKIAkudHhfZml4dXAgPQlnZW5lbGlua190eF9maXh1cCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwppbmRleCA3ZDQyZjlhLi44MTEyNmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCkBAIC02NSw2ICs2NSw3IEBACiAjZGVmaW5lIElQSEVUSF9VU0JJTlRGX1BST1RPICAgIDEKIAogI2RlZmluZSBJUEhFVEhfQlVGX1NJWkUgICAgICAgICAxNTE2CisjZGVmaW5lIElQSEVUSF9JUF9BTElHTgkJMgkvKiBwYWRkaW5nIGF0IGZyb250IG9mIFVSQiAqLwogI2RlZmluZSBJUEhFVEhfVFhfVElNRU9VVCAgICAgICAoNSAqIEhaKQogCiAjZGVmaW5lIElQSEVUSF9JTlRGTlVNICAgICAgICAgIDIKQEAgLTIwMiwxOCArMjAzLDIxIEBACiAJCXJldHVybjsKIAl9CiAKLQlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7Ci0JYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8PSBJUEhFVEhfSVBfQUxJR04pIHsKKwkJZGV2LT5uZXQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJcmV0dXJuOworCX0KKwlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGggLSBJUEhFVEhfSVBfQUxJR047CisJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBJUEhFVEhfSVBfQUxJR047CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKE5FVF9JUF9BTElHTiArIGxlbik7CisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwogCWlmICghc2tiKSB7CiAJCWVycigiJXM6IGRldl9hbGxvY19za2I6IC1FTk9NRU0iLCBfX2Z1bmNfXyk7CiAJCWRldi0+bmV0LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAKLQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBidWYgKyBORVRfSVBfQUxJR04sIGxlbiAtIE5FVF9JUF9BTElHTik7CisJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBidWYsIGxlbik7CiAJc2tiLT5kZXYgPSBkZXYtPm5ldDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtPm5ldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCA3ZGM4NDk3Li5hZDAyOThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlpZiAoIWthd2V0aCkgewotCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAidW5yZWdpc3RlcmluZyBub24tZXhpc3RhbnQgZGV2aWNlXG4iKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0ZW50IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJbmV0ZGV2ID0ga2F3ZXRoLT5uZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwppbmRleCBiYTcyYTcyLi4wMWRiNDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCW5ldDEwODBfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiTmV0Q2hpcCBUdXJib0NPTk5FQ1QiLAotCS5mbGFncyA9CUZMQUdfRlJBTUlOR19OQywKKwkuZmxhZ3MgPQlGTEFHX1BPSU5UVE9QT0lOVCB8IEZMQUdfRlJBTUlOR19OQywKIAkuYmluZCA9CQluZXQxMDgwX2JpbmQsCiAJLnJlc2V0ID0JbmV0MTA4MF9yZXNldCwKIAkuY2hlY2tfY29ubmVjdCA9IG5ldDEwODBfY2hlY2tfY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wbHVzYi5jIGIvZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMKaW5kZXggMDhhZDI2OS4uODIzYzUzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlwcm9saWZpY19pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJQcm9saWZpYyBQTC0yMzAxL1BMLTIzMDIiLAotCS5mbGFncyA9CUZMQUdfTk9fU0VUSU5ULAorCS5mbGFncyA9CUZMQUdfUE9JTlRUT1BPSU5UIHwgRkxBR19OT19TRVRJTlQsCiAJCS8qIHNvbWUgUEwtMjMwMiB2ZXJzaW9ucyBzZWVtIHRvIGZhaWwgdXNiX3NldF9pbnRlcmZhY2UoKSAqLwogCS5yZXNldCA9CXBsX3Jlc2V0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IGRkOGE0YWQuLjU5OTRhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtNTczLDcgKzU3Myw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8Jcm5kaXNfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiUk5ESVMgZGV2aWNlIiwKLQkuZmxhZ3MgPQlGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQsCisJLmZsYWdzID0JRkxBR19FVEhFUiB8IEZMQUdfUE9JTlRUT1BPSU5UIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQsCiAJLmJpbmQgPQkJcm5kaXNfYmluZCwKIAkudW5iaW5kID0Jcm5kaXNfdW5iaW5kLAogCS5zdGF0dXMgPQlybmRpc19zdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCmluZGV4IDcyNzg3NGQuLjQ4ZDRlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCkBAIC03MzAsNyArNzMwLDcgQEAKIAkJbXNsZWVwKDEwKTsKIAkJYm1jciA9IHNtc2M5NXh4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUik7CiAJCXRpbWVvdXQrKzsKLQl9IHdoaWxlICgoYm1jciAmIE1JSV9CTUNSKSAmJiAodGltZW91dCA8IDEwMCkpOworCX0gd2hpbGUgKChibWNyICYgQk1DUl9SRVNFVCkgJiYgKHRpbWVvdXQgPCAxMDApKTsKIAogCWlmICh0aW1lb3V0ID49IDEwMCkgewogCQluZXRkZXZfd2FybihkZXYtPm5ldCwgInRpbWVvdXQgb24gUEhZIFJlc2V0Iik7CkBAIC0xMzEzLDYgKzEzMTMsMjEgQEAKIAkJVVNCX0RFVklDRSgweDA0MjQsIDB4OTkwOSksCiAJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmc21zYzk1eHhfaW5mbywKIAl9LAorCXsKKwkJLyogU01TQyBMQU45NTMwIFVTQiBFdGhlcm5ldCBEZXZpY2UgKi8KKwkJVVNCX0RFVklDRSgweDA0MjQsIDB4OTUzMCksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmc21zYzk1eHhfaW5mbywKKwl9LAorCXsKKwkJLyogU01TQyBMQU45NzMwIFVTQiBFdGhlcm5ldCBEZXZpY2UgKi8KKwkJVVNCX0RFVklDRSgweDA0MjQsIDB4OTczMCksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmc21zYzk1eHhfaW5mbywKKwl9LAorCXsKKwkJLyogU01TQyBMQU44OTUzMCBVU0IgRXRoZXJuZXQgRGV2aWNlICovCisJCVVTQl9ERVZJQ0UoMHgwNDI0LCAweDlFMDgpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnNtc2M5NXh4X2luZm8sCisJfSwKIAl7IH0sCQkvKiBFTkQgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHJvZHVjdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGNmNThiNzYuLjlhYjQzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTY0NSw2ICs2NDUsNyBAQAogCXN0cnVjdCBkcml2ZXJfaW5mbwkqaW5mbyA9IGRldi0+ZHJpdmVyX2luZm87CiAJaW50CQkJcmV0dmFsOwogCisJY2xlYXJfYml0KEVWRU5UX0RFVl9PUEVOLCAmZGV2LT5mbGFncyk7CiAJbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKIAogCW5ldGlmX2luZm8oZGV2LCBpZmRvd24sIGRldi0+bmV0LApAQCAtNzM2LDYgKzczNyw3IEBACiAJCX0KIAl9CiAKKwlzZXRfYml0KEVWRU5UX0RFVl9PUEVOLCAmZGV2LT5mbGFncyk7CiAJbmV0aWZfc3RhcnRfcXVldWUgKG5ldCk7CiAJbmV0aWZfaW5mbyhkZXYsIGlmdXAsIGRldi0+bmV0LAogCQkgICAib3BlbjogZW5hYmxlIHF1ZXVlaW5nIChyeCAlZCwgdHggJWQpIG10dSAlZCAlcyBmcmFtaW5nXG4iLApAQCAtMTI1OSw2ICsxMjYxLDkgQEAKIAlpZiAoZGV2LT5kcml2ZXJfaW5mby0+dW5iaW5kKQogCQlkZXYtPmRyaXZlcl9pbmZvLT51bmJpbmQgKGRldiwgaW50Zik7CiAKKwl1c2Jfa2lsbF91cmIoZGV2LT5pbnRlcnJ1cHQpOworCXVzYl9mcmVlX3VyYihkZXYtPmludGVycnVwdCk7CisKIAlmcmVlX25ldGRldihuZXQpOwogCXVzYl9wdXRfZGV2ICh4ZGV2KTsKIH0KQEAgLTEzODAsNyArMTM4NSw4IEBACiAJCS8vIGVsc2UgImV0aCVkIiB3aGVuIHRoZXJlJ3MgcmVhc29uYWJsZSBkb3VidC4gIHVzZXJzcGFjZQogCQkvLyBjYW4gcmVuYW1lIHRoZSBsaW5rIGlmIGl0IGtub3dzIGJldHRlci4KIAkJaWYgKChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRVRIRVIpICE9IDAgJiYKLQkJICAgIChuZXQtPmRldl9hZGRyIFswXSAmIDB4MDIpID09IDApCisJCSAgICAoKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19QT0lOVFRPUE9JTlQpID09IDAgfHwKKwkJICAgICAobmV0LT5kZXZfYWRkciBbMF0gJiAweDAyKSA9PSAwKSkKIAkJCXN0cmNweSAobmV0LT5uYW1lLCAiZXRoJWQiKTsKIAkJLyogV0xBTiBkZXZpY2VzIHNob3VsZCBhbHdheXMgYmUgbmFtZWQgIndsYW4lZCIgKi8KIAkJaWYgKChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfV0xBTikgIT0gMCkKQEAgLTE0OTcsNiArMTUwMywxMCBAQAogCWludCAgICAgICAgICAgICAgICAgICAgIHJldHZhbDsKIAogCWlmICghLS1kZXYtPnN1c3BlbmRfY291bnQpIHsKKwkJLyogcmVzdW1lIGludGVycnVwdCBVUkJzICovCisJCWlmIChkZXYtPmludGVycnVwdCAmJiB0ZXN0X2JpdChFVkVOVF9ERVZfT1BFTiwgJmRldi0+ZmxhZ3MpKQorCQkJdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHQsIEdGUF9OT0lPKTsKKwogCQlzcGluX2xvY2tfaXJxKCZkZXYtPnR4cS5sb2NrKTsKIAkJd2hpbGUgKChyZXMgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZkZXYtPmRlZmVycmVkKSkpIHsKIApAQCAtMTUxNSw5ICsxNTI1LDEyIEBACiAJCXNtcF9tYigpOwogCQljbGVhcl9iaXQoRVZFTlRfREVWX0FTTEVFUCwgJmRldi0+ZmxhZ3MpOwogCQlzcGluX3VubG9ja19pcnEoJmRldi0+dHhxLmxvY2spOwotCQlpZiAoIShkZXYtPnR4cS5xbGVuID49IFRYX1FMRU4oZGV2KSkpCi0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYtPm5ldCk7Ci0JCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKworCQlpZiAodGVzdF9iaXQoRVZFTlRfREVWX09QRU4sICZkZXYtPmZsYWdzKSkgeworCQkJaWYgKCEoZGV2LT50eHEucWxlbiA+PSBUWF9RTEVOKGRldikpKQorCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldi0+bmV0KTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi96YXVydXMuYyBiL2RyaXZlcnMvbmV0L3VzYi96YXVydXMuYwppbmRleCAzZWIwYjE2Li4yNDE3NTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvemF1cnVzLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3phdXJ1cy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwl6YXVydXNfc2w1eDAwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIlNoYXJwIFphdXJ1cyBTTC01eDAwIiwKLQkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfWiwKKwkuZmxhZ3MgPQlGTEFHX1BPSU5UVE9QT0lOVCB8IEZMQUdfRlJBTUlOR19aLAogCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKIAkuYmluZCA9CQl6YXVydXNfYmluZCwKIAkudW5iaW5kID0JdXNibmV0X2NkY191bmJpbmQsCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwl6YXVydXNfcHhhX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIlNoYXJwIFphdXJ1cywgUFhBLTJ4eCBiYXNlZCIsCi0JLmZsYWdzID0JRkxBR19GUkFNSU5HX1osCisJLmZsYWdzID0JRkxBR19QT0lOVFRPUE9JTlQgfCBGTEFHX0ZSQU1JTkdfWiwKIAkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCiAJLmJpbmQgPQkJemF1cnVzX2JpbmQsCiAJLnVuYmluZCA9CXVzYm5ldF9jZGNfdW5iaW5kLApAQCAtMTIyLDcgKzEyMiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8Jb2x5bXB1c19teGxfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiT2x5bXB1cyBSMTAwMCIsCi0JLmZsYWdzID0JRkxBR19GUkFNSU5HX1osCisJLmZsYWdzID0JRkxBR19QT0lOVFRPUE9JTlQgfCBGTEFHX0ZSQU1JTkdfWiwKIAkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCiAJLmJpbmQgPQkJemF1cnVzX2JpbmQsCiAJLnVuYmluZCA9CXVzYm5ldF9jZGNfdW5iaW5kLApAQCAtMjU4LDcgKzI1OCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JYm9ndXNfbWRsbV9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJwc2V1ZG8tTURMTSAoQkxBTikgZGV2aWNlIiwKLQkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfWiwKKwkuZmxhZ3MgPQlGTEFHX1BPSU5UVE9QT0lOVCB8IEZMQUdfRlJBTUlOR19aLAogCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKIAkudHhfZml4dXAgPQl6YXVydXNfdHhfZml4dXAsCiAJLmJpbmQgPQkJYmxhbl9tZGxtX2JpbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMmRlOWI5MC4uM2I5OWY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtNDAzLDYgKzQwMywxNyBAQAogCWlmICh0YltJRkxBX0FERFJFU1NdID09IE5VTEwpCiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCisJaWYgKHRiW0lGTEFfSUZOQU1FXSkKKwkJbmxhX3N0cmxjcHkoZGV2LT5uYW1lLCB0YltJRkxBX0lGTkFNRV0sIElGTkFNU0laKTsKKwllbHNlCisJCXNucHJpbnRmKGRldi0+bmFtZSwgSUZOQU1TSVosIERSVl9OQU1FICIlJWQiKTsKKworCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7CisJCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9hbGxvY19uYW1lOworCX0KKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9yZWdpc3Rlcl9kZXY7CkBAIC00MjIsNiArNDMzLDcgQEAKIAogZXJyX3JlZ2lzdGVyX2RldjoKIAkvKiBub3RoaW5nIHRvIGRvICovCitlcnJfYWxsb2NfbmFtZToKIGVycl9jb25maWd1cmVfcGVlcjoKIAl1bnJlZ2lzdGVyX25ldGRldmljZShwZWVyKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwppbmRleCA1ZTdmMDY5Li5lYjVkNzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYworKysgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwpAQCAtMTg2MSw3ICsxODYxLDcgQEAKIAl1MzIgaW50cl9zdGF0dXM7CiAKIAkvKgotCSAqIElmIG5ldyBlcnJvcnMgb2NjdXJlZCwgd2UgbmVlZCB0byBzb3J0IHRoZW0gb3V0IGJlZm9yZSBkb2luZyBUeC4KKwkgKiBJZiBuZXcgZXJyb3JzIG9jY3VycmVkLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBvdXQgYmVmb3JlIGRvaW5nIFR4LgogCSAqIEluIHRoYXQgY2FzZSB0aGUgSVNSIHdpbGwgYmUgYmFjayBoZXJlIFJTTiBhbnl3YXkuCiAJICovCiAJaW50cl9zdGF0dXMgPSBnZXRfaW50cl9zdGF0dXMoZGV2KTsKQEAgLTE4ODcsNyArMTg4Nyw3IEBACiAJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQlpZiAoZGVidWcgPiAxKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJoaW5lX3Jlc3RhcnRfdHgoKSAiCi0JCQkgICAgICAgIkFub3RoZXIgZXJyb3Igb2NjdXJlZCAlOC44eC5cbiIsCisJCQkgICAgICAgIkFub3RoZXIgZXJyb3Igb2NjdXJyZWQgJTguOHguXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCAwZDZmZWM2Li40ZmUwNTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiAvKiBJUF9ieXRlX2FsaWduW10gaXMgdXNlZCBmb3IgSVAgaGVhZGVyIERXT1JEIGJ5dGUgYWxpZ25lZAogICAgMDogaW5kaWNhdGUgdGhlIElQIGhlYWRlciB3b24ndCBiZSBEV09SRCBieXRlIGFsaWduZWQuKERlZmF1bHQpIC4KICAgIDE6IGluZGljYXRlIHRoZSBJUCBoZWFkZXIgd2lsbCBiZSBEV09SRCBieXRlIGFsaWduZWQuCi0gICAgICBJbiBzb21lIGVudmlyb21lbnQsIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIERXT1JEIGJ5dGUgYWxpZ25lZCwKKyAgICAgIEluIHNvbWUgZW52aXJvbm1lbnQsIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIERXT1JEIGJ5dGUgYWxpZ25lZCwKICAgICAgIG9yIHRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wZWQgd2hlbiB3ZSByZWNlaXZlIGl0LiAoZWc6IElQVlMpCiAqLwogVkVMT0NJVFlfUEFSQU0oSVBfYnl0ZV9hbGlnbiwgIkVuYWJsZSBJUCBoZWFkZXIgZHdvcmQgYWxpZ25lZCIpOwpAQCAtMTk5NCw3ICsxOTk0LDcgQEAKICAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCiAgKgogICoJUmVwbGFjZSB0aGUgY3VycmVudCBza2IgdGhhdCBpcyBzY2hlZHVsZWQgZm9yIFJ4IHByb2Nlc3NpbmcgYnkgYQotICoJc2hvcnRlciwgaW1tZWRpYXRseSBhbGxvY2F0ZWQgc2tiLCBpZiB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIHNtYWxsCisgKglzaG9ydGVyLCBpbW1lZGlhdGVseSBhbGxvY2F0ZWQgc2tiLCBpZiB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIHNtYWxsCiAgKgllbm91Z2guIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZSByZWNlaXZlZAogICoJcGFja2V0IGlzIHRvbyBiaWcgb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCmluZGV4IGNjMTRiNGEuLmMxNmVkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYworKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogdm14bmV0M19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGV2ZW50cyA9IGxlMzJfdG9fY3B1KGFkYXB0ZXItPnNoYXJlZC0+ZWNyKTsKIAlpZiAoIWV2ZW50cykKIAkJcmV0dXJuOwpAQCAtMTkwLDEwICsxOTEsMTAgQEAKIAogCS8qIENoZWNrIGlmIHRoZXJlIGlzIGFuIGVycm9yIG9uIHhtaXQvcmVjdiBxdWV1ZXMgKi8KIAlpZiAoZXZlbnRzICYgKFZNWE5FVDNfRUNSX1RRRVJSIHwgVk1YTkVUM19FQ1JfUlFFUlIpKSB7Ci0JCXNwaW5fbG9jaygmYWRhcHRlci0+Y21kX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkJICAgICAgIFZNWE5FVDNfQ01EX0dFVF9RVUVVRV9TVEFUVVMpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+Y21kX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCiAJCQlpZiAoYWRhcHRlci0+dHFkX3N0YXJ0W2ldLnN0YXR1cy5zdG9wcGVkKQpAQCAtODkyLDcgKzg5Myw3IEBACiAgKiBUcmFuc21pdHMgYSBwa3QgdGhydSBhIGdpdmVuIHRxCiAgKiBSZXR1cm5zOgogICogICAgTkVUREVWX1RYX09LOiAgICAgIGRlc2NyaXB0b3JzIGFyZSBzZXR1cCBzdWNjZXNzZnVsbHkKLSAqICAgIE5FVERFVl9UWF9PSzogICAgICBlcnJvciBvY2N1cmVkLCB0aGUgcGt0IGlzIGRyb3BwZWQKKyAqICAgIE5FVERFVl9UWF9PSzogICAgICBlcnJvciBvY2N1cnJlZCwgdGhlIHBrdCBpcyBkcm9wcGVkCiAgKiAgICBORVRERVZfVFhfQlVTWTogICAgdHggcmluZyBpcyBmdWxsLCBxdWV1ZSBpcyBzdG9wcGVkCiAgKgogICogU2lkZS1lZmZlY3RzOgpAQCAtMjY4NSw3ICsyNjg2LDcgQEAKICAqIEVuYWJsZSBNU0l4IHZlY3RvcnMuCiAgKiBSZXR1cm5zIDoKICAqCTAgb24gc3VjY2Vzc2Z1bCBlbmFibGluZyBvZiByZXF1aXJlZCB2ZWN0b3JzLAotICoJVk1YTkVUM19MSU5VWF9NSU5fTVNJWF9WRUNUIHdoZW4gb25seSBtaW51bXVtIG51bWJlciBvZiB2ZWN0b3JzIHJlcXVpcmVkCisgKglWTVhORVQzX0xJTlVYX01JTl9NU0lYX1ZFQ1Qgd2hlbiBvbmx5IG1pbmltdW0gbnVtYmVyIG9mIHZlY3RvcnMgcmVxdWlyZWQKICAqCSBjb3VsZCBiZSBlbmFibGVkLgogICoJbnVtYmVyIG9mIHZlY3RvcnMgd2hpY2ggY2FuIGJlIGVuYWJsZWQgb3RoZXJ3aXNlICh0aGlzIG51bWJlciBpcyBzbWFsbGVyCiAgKgkgdGhhbiBWTVhORVQzX0xJTlVYX01JTl9NU0lYX1ZFQ1QpCkBAIC0yNzMzLDEzICsyNzM0LDE0IEBACiB2bXhuZXQzX2FsbG9jX2ludHJfcmVzb3VyY2VzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIGNmZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogaW50ciBzZXR0aW5ncyAqLwotCXNwaW5fbG9jaygmYWRhcHRlci0+Y21kX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJICAgICAgIFZNWE5FVDNfQ01EX0dFVF9DT05GX0lOVFIpOwogCWNmZyA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQpOwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5jbWRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAlhZGFwdGVyLT5pbnRyLnR5cGUgPSBjZmcgJiAweDM7CiAJYWRhcHRlci0+aW50ci5tYXNrX21vZGUgPSAoY2ZnID4+IDIpICYgMHgzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwppbmRleCA1MWYyZWYxLi45NzY0NjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKQEAgLTMxMSw2ICszMTEsOSBAQAogCQkvKiB0b2dnbGUgdGhlIExSTyBmZWF0dXJlKi8KIAkJbmV0ZGV2LT5mZWF0dXJlcyBePSBORVRJRl9GX0xSTzsKIAorCQkvKiBVcGRhdGUgcHJpdmF0ZSBMUk8gZmxhZyAqLworCQlhZGFwdGVyLT5scm8gPSBscm9fcmVxdWVzdGVkOworCiAJCS8qIHVwZGF0ZSBoYXJ3YXJlIExSTyBjYXBhYmlsaXR5IGFjY29yZGluZ2x5ICovCiAJCWlmIChscm9fcmVxdWVzdGVkKQogCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgfD0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCBlNzRlNGI0Li40MDFiZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJCQkJICAgVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKIAogCS8qIFRoZSBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwgY2FuIHVkZWxheSBmb3IgYSBzaWduaWZpY2FudAotCSAqIGFtb3VudCBvZiB0aW1lLCBibG9ja2luZyBvdGhlciBwcm9jY2VzcyBmcm9tIHRoZSBDUFUuICBJZiBpdCBkZWxheXMKKwkgKiBhbW91bnQgb2YgdGltZSwgYmxvY2tpbmcgb3RoZXIgcHJvY2VzcyBmcm9tIHRoZSBDUFUuICBJZiBpdCBkZWxheXMKIAkgKiBmb3IgfjVzZWNzLCBhIE5NSSBlcnJvciBjYW4gb2NjdXIuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byBnaXZlIHVwCiAJICogdGhlIHByb2Nlc3NvciB2aWEgbXNsZWVwLCBidXQgdGhpcyBpcyBub3QgYWxsb3dlZCBpcyB1bmRlciBsb2NrLgogCSAqIFNvLCBvbmx5IGFsbG93IGl0IHRvIHNsZWVwIGZvciB+NHNlY3MgaWYgb3Blbi4gIE90aGVyd2lzZSwgZGVsYXkgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwppbmRleCAzOTU0MjNhLi5hZmY2OGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKQEAgLTIyODIsNyArMjI4Miw3IEBACiAJCVZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUpICsgVlhHRV9BTEFSTV9NU0lYX0lEOwogCiAJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKLQkJLyogUmVkdWNlIHRoZSBjaGFuY2Ugb2YgbG9vc2luZyBhbGFybSBpbnRlcnJ1cHRzIGJ5IG1hc2tpbmcKKwkJLyogUmVkdWNlIHRoZSBjaGFuY2Ugb2YgbG9zaW5nIGFsYXJtIGludGVycnVwdHMgYnkgbWFza2luZwogCQkgKiB0aGUgdmVjdG9yLiBBIHBlbmRpbmcgYml0IHdpbGwgYmUgc2V0IGlmIGFuIGFsYXJtIGlzCiAJCSAqIGdlbmVyYXRlZCBhbmQgb24gdW5tYXNrIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBmaXJlZC4KIAkJICovCkBAIC0yNzg4LDcgKzI3ODgsNyBAQAogCX0KIAogCS8qIEVuYWJsZSB2cGF0aCB0byBzbmlmZiBhbGwgdW5pY2FzdC9tdWx0aWNhc3QgdHJhZmZpYyB0aGF0IG5vdAotCSAqIGFkZHJlc3NlZCB0byB0aGVtLiBXZSBhbGxvdyBwcm9taXNjb3VzIG1vZGUgZm9yIFBGIG9ubHkKKwkgKiBhZGRyZXNzZWQgdG8gdGhlbS4gV2UgYWxsb3cgcHJvbWlzY3VvdXMgbW9kZSBmb3IgUEYgb25seQogCSAqLwogCiAJdmFsNjQgPSAwOwpAQCAtMjg5MCw3ICsyODkwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBMb29wIHRocm91Z2h0IHRoZSBtYWMgYWRkcmVzcyBsaXN0IGFuZCBkZWxldGUgYWxsIHRoZSBlbnRyaWVzICovCisvKiBMb29wIHRocm91Z2ggdGhlIG1hYyBhZGRyZXNzIGxpc3QgYW5kIGRlbGV0ZSBhbGwgdGhlIGVudHJpZXMgKi8KIHN0YXRpYyB2b2lkIHZ4Z2VfZnJlZV9tYWNfYWRkX2xpc3Qoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKQogewogCkBAIC0yOTU3LDcgKzI5NTcsNyBAQAogCQkJCQl2YWw2NCk7CiAJCX0KIAotCQkvKiBSZW1vdmUgdGhlIGZ1bmN0aW9uIDAgZnJvbSBwcm9taXNjb3VzIG1vZGUgKi8KKwkJLyogUmVtb3ZlIHRoZSBmdW5jdGlvbiAwIGZyb20gcHJvbWlzY3VvdXMgbW9kZSAqLwogCQl2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZkZXYtPmRldmgsCiAJCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAogCQkJMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCmluZGV4IDg2NzRmMzMuLjI2MzhiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYwpAQCAtMTExMSw3ICsxMTExLDcgQEAKICAqIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQKICAqIEBjaGFubmVsOiBDaGFubmVsIGhhbmRsZS4gT2J0YWluZWQgdmlhIHZ4Z2VfaHdfY2hhbm5lbF9vcGVuKCkuCiAgKgotICogUmV0cmVpdmUgbnVtYmVyIG9mIERUUnMgYXZhaWxhYmxlLiBUaGlzIGZ1bmN0aW9uIGNhbiBub3QgYmUgY2FsbGVkCisgKiBSZXRyaWV2ZSBudW1iZXIgb2YgRFRScyBhdmFpbGFibGUuIFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBiZSBjYWxsZWQKICAqIGZyb20gZGF0YSBwYXRoLiByaW5nX2luaXRpYWxfcmVwbGVuaXNoaSgpIGlzIHRoZSBvbmx5IHVzZXIuCiAgKi8KIGludCB2eGdlX2h3X2NoYW5uZWxfZHRyX2NvdW50KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCkKQEAgLTIwNjAsNyArMjA2MCw3IEBACiAKIAl2cGF0aCA9IHZwLT52cGF0aDsKIAotCS8qIEVuYWJsZSBwcm9taXNjb3VzIG1vZGUgZm9yIGZ1bmN0aW9uIDAgb25seSAqLworCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlIGZvciBmdW5jdGlvbiAwIG9ubHkgKi8KIAlpZiAoISh2cGF0aC0+aGxkZXYtPmFjY2Vzc19yaWdodHMgJgogCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNKSkKIAkJcmV0dXJuIFZYR0VfSFdfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaAppbmRleCA5ZDlkZmRhLi42YzJmYzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKQEAgLTY4MSw3ICs2ODEsNyBAQAogICogQHJ4X3JlZF9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2Ugb2YgUkVECiAgKiAgICAgICAgICAgIChSYW5kb20gRWFybHkgRGlzY2FyZCkuCiAgKiBAcnhfeGdtaWlfY3RybF9lcnJfY250OiBNYWludGFpbnMgYSBjb3VudCBvZiB1bmV4cGVjdGVkIG9yIG1pc3BsYWNlZCBjb250cm9sCi0gKiAgICAgICAgICAgIGNoYXJhY3RlcnMgb2NjdXJpbmcgYmV0d2VlbiB0aW1lcyBvZiBub3JtYWwgZGF0YSB0cmFuc21pc3Npb24KKyAqICAgICAgICAgICAgY2hhcmFjdGVycyBvY2N1cnJpbmcgYmV0d2VlbiB0aW1lcyBvZiBub3JtYWwgZGF0YSB0cmFuc21pc3Npb24KICAqICAgICAgICAgICAgKGkuZS4gbm90IGluY2x1ZGVkIGluIFJYX1hHTUlJX0RBVEFfRVJSX0NOVCkuIFRoaXMgY291bnRlciBpcwogICogICAgICAgICAgICBpbmNyZW1lbnRlZCB3aGVuIGVpdGhlciAtCiAgKiAgICAgICAgICAgIDEpIFRoZSBSZWNvbmNpbGlhdGlvbiBTdWJsYXllciAoUlMpIGlzIGV4cGVjdGluZyBvbmUgY29udHJvbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggMTBiYWZkNS4uNmZiNmY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC0zMjksNyArMzI5LDcgQEAKIHN0YXRpYyBpbnQgcmVhZG1lbShzdHJ1Y3QgY29zYV9kYXRhICpjb3NhLCBjaGFyIF9fdXNlciAqZGF0YSwgaW50IGFkZHIsIGludCBsZW4pOwogc3RhdGljIGludCBjb3NhX3Jlc2V0X2FuZF9yZWFkX2lkKHN0cnVjdCBjb3NhX2RhdGEgKmNvc2EsIGNoYXIgKmlkKTsKIAotLyogQXV4aWxsaWFyeSBmdW5jdGlvbnMgKi8KKy8qIEF1eGlsaWFyeSBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQgZ2V0X3dhaXRfZGF0YShzdHJ1Y3QgY29zYV9kYXRhICpjb3NhKTsKIHN0YXRpYyBpbnQgcHV0X3dhaXRfZGF0YShzdHJ1Y3QgY29zYV9kYXRhICpjb3NhLCBpbnQgZGF0YSk7CiBzdGF0aWMgaW50IHB1dGhleG51bWJlcihzdHJ1Y3QgY29zYV9kYXRhICpjb3NhLCBpbnQgbnVtYmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggNDU3OGU1Yi4uYWNiOWVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIElWLiBOb3RlcwogICogVGhlIGN1cnJlbnQgZXJyb3IgKFhEVSwgUkZPKSByZWNvdmVyeSBjb2RlIGlzIHVudGVzdGVkLgogICogU28gZmFyLCBSRE8gdGFrZXMgaGlzIFJYIGNoYW5uZWwgZG93biBhbmQgdGhlIHJpZ2h0IHNlcXVlbmNlIHRvIGVuYWJsZSBpdAotICogYWdhaW4gaXMgc3RpbGwgYSBtaXN0ZXJ5LiBJZiBSRE8gaGFwcGVucywgcGxhbiBhIHJlYm9vdC4gTW9yZSBkZXRhaWxzCisgKiBhZ2FpbiBpcyBzdGlsbCBhIG15c3RlcnkuIElmIFJETyBoYXBwZW5zLCBwbGFuIGEgcmVib290LiBNb3JlIGRldGFpbHMKICAqIGluIHRoZSBjb2RlIChOQjogYXMgdGhpcyBoYXBwZW5zLCBUWCBzdGlsbCB3b3JrcykuCiAgKiBEb24ndCBtZXNzIHRoZSBjYWJsZXMgZHVyaW5nIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBvbiBEVEUgcG9ydHMuIEkgZG9uJ3QKICAqIHN1Z2dlc3QgaXQgZm9yIERDRSBlaXRoZXIgYnV0IGF0IGxlYXN0IG9uZSBjYW4gZ2V0IHNvbWUgbWVzc2FnZXMgaW5zdGVhZApAQCAtMTA2NSw3ICsxMDY1LDcgQEAKIAogCS8qCiAJICogRHVlIHRvIHZhcmlvdXMgYnVncywgdGhlcmUgaXMgbm8gd2F5IHRvIHJlbGlhYmx5IHJlc2V0IGEKLQkgKiBzcGVjaWZpYyBwb3J0IChtYW51ZmFjdHVyZXIncyBkZXBlbmRhbnQgc3BlY2lhbCBQQ0kgI1JTVCB3aXJpbmcKKwkgKiBzcGVjaWZpYyBwb3J0IChtYW51ZmFjdHVyZXIncyBkZXBlbmRlbnQgc3BlY2lhbCBQQ0kgI1JTVCB3aXJpbmcKIAkgKiBhcGFydDogaXQgYWZmZWN0cyBhbGwgcG9ydHMpLiBUaHVzIHRoZSBkZXZpY2UgZ29lcyBpbiB0aGUgYmVzdAogCSAqIHNpbGVudCBtb2RlIHBvc3NpYmxlIGF0IGRzY2M0X2Nsb3NlKCkgdGltZSBhbmQgc2ltcGx5IGNsYWltcyB0bwogCSAqIGJlIHVwIGlmIGl0J3Mgb3BlbmVkIGFnYWluLiBJdCBzdGlsbCBpc24ndCBwb3NzaWJsZSB0byBjaGFuZ2UKQEAgLTEyMzAsOSArMTIzMCw5IEBACiAgKiAgIHNjYWxpbmcuIE9mIGNvdXJzZSBzb21lIHJvdW5kaW5nIG1heSB0YWtlIHBsYWNlLgogICogLSBubyBoaWdoIHNwZWVkIG1vZGUgKDQwTWIvcykuIE1heSBiZSB0cml2aWFsIHRvIGRvIGJ1dCBJIGRvbid0IGhhdmUgYW4KICAqICAgYXBwcm9wcmlhdGUgZXh0ZXJuYWwgY2xvY2tpbmcgZGV2aWNlIGZvciB0ZXN0aW5nLgotICogLSBubyB0aW1lLXNsb3QvY2xvY2sgbW9kZSA1OiBzaGFtZWxlc3MgbGF6eW5lc3MuCisgKiAtIG5vIHRpbWUtc2xvdC9jbG9jayBtb2RlIDU6IHNoYW1lbGVzcyBsYXppbmVzcy4KICAqCi0gKiBUaGUgY2xvY2sgc2lnbmFscyB3aXJpbmcgY2FuIGJlIChpcyA/KSBtYW51ZmFjdHVyZXIgZGVwZW5kYW50LiBHb29kIGx1Y2suCisgKiBUaGUgY2xvY2sgc2lnbmFscyB3aXJpbmcgY2FuIGJlIChpcyA/KSBtYW51ZmFjdHVyZXIgZGVwZW5kZW50LiBHb29kIGx1Y2suCiAgKgogICogQklHIEZBVCBXQVJOSU5HOiBpZiB0aGUgZGV2aWNlIGlzbid0IHByb3ZpZGVkIGVub3VnaCBjbG9ja2luZyBzaWduYWwsIGl0CiAgKiB3b24ndCBwYXNzIHRoZSBpbml0IHNlcXVlbmNlLiBGb3IgZXhhbXBsZSwgc3RyYWlnaHQgYmFjay10by1iYWNrIERURSB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKaW5kZXggNDhlZGM1Zi4uZTgxNzU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwpAQCAtMTUsNyArMTUsNyBAQAogICoJVGhlIGhhcmR3YXJlIGRvZXMgdGhlIGJ1cyBoYW5kbGluZyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgZGVsYXlzIGJldHdlZW4KICAqCXRvdWNoaW5nIGNvbnRyb2wgcmVnaXN0ZXJzLgogICoKLSAqCVBvcnQgQiBpc250IHdpcmVkICh3aHkgLSBiZWF0cyBtZSkKKyAqCVBvcnQgQiBpc24ndCB3aXJlZCAod2h5IC0gYmVhdHMgbWUpCiAgKgogICoJR2VuZXJpYyBIRExDIHBvcnQgQ29weXJpZ2h0IChDKSAyMDA4IEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMgYi9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCmluZGV4IDZjNTcxZTEuLmYxZTE2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgKgogICogVGhlIHJlc3VsdGluZyBhdmVyYWdlIGNsb2NrIGZyZXF1ZW5jeSAoYXNzdW1pbmcgMzMuMzMzIE1IeiBvc2NpbGxhdG9yKSBpczoKICAqIGZyZXEgPSA2Ni42NjYgTUh6IC8gKEEgKyAoQiArIDEpIC8gKEMgKyAxKSkKLSAqIG1pbnVtdW0gZnJlcSA9IDY2LjY2NiBNSHogLyAoQSArIDEpCisgKiBtaW5pbXVtIGZyZXEgPSA2Ni42NjYgTUh6IC8gKEEgKyAxKQogICogbWF4aW11bSBmcmVxID0gNjYuNjY2IE1IeiAvIEEKICAqCiAgKiBFeGFtcGxlOiBBID0gMiwgQiA9IDIsIEMgPSA3LCBDTE9DS19DUiByZWdpc3RlciA9IDIgPDwgMjIgfCAyIDw8IDEyIHwgNwpAQCAtMjMwLDcgKzIzMCw3IEBACiAjZGVmaW5lIFBLVF9QSVBFX01PREVfV1JJVEUJCTB4NTcKIAogLyogSERMQyBwYWNrZXQgc3RhdHVzIHZhbHVlcyAtIGRlc2MtPnN0YXR1cyAqLwotI2RlZmluZSBFUlJfU0hVVERPV04JCTEgLyogc3RvcCBvciBzaHV0ZG93biBvY2N1cnJhbmNlICovCisjZGVmaW5lIEVSUl9TSFVURE9XTgkJMSAvKiBzdG9wIG9yIHNodXRkb3duIG9jY3VycmVuY2UgKi8KICNkZWZpbmUgRVJSX0hETENfQUxJR04JCTIgLyogSERMQyBhbGlnbm1lbnQgZXJyb3IgKi8KICNkZWZpbmUgRVJSX0hETENfRkNTCQkzIC8qIEhETEMgRnJhbWUgQ2hlY2sgU3VtIGVycm9yICovCiAjZGVmaW5lIEVSUl9SWEZSRUVfUV9FTVBUWQk0IC8qIFJYLWZyZWUgcXVldWUgYmVjYW1lIGVtcHR5IHdoaWxlIHJlY2VpdmluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IDcwZmViODQuLmI3ZjIzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAgKgogICAqIExpbnV4IGRyaXZlciBub3RlczoKICAgKiBMaW51eCB1c2VzIHRoZSBkZXZpY2Ugc3RydWN0IGxtY19wcml2YXRlIHRvIHBhc3MgcHJpdmF0ZSBpbmZvcm1hdGlvbgotICAqIGFycm91bmQuCisgICogYXJvdW5kLgogICAqCiAgICogVGhlIGluaXRpYWxpemF0aW9uIHBvcnRpb24gb2YgdGhpcyBkcml2ZXIgKHRoZSBsbWNfcmVzZXQoKSBhbmQgdGhlCiAgICogbG1jX2RlY19yZXNldCgpIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyB0aGUgbGVkIGNvbnRyb2xzIGFuZCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Zhci5oIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfdmFyLmgKaW5kZXggNjVkMDE5Ny4uMDFhZDQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfdmFyLmgKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfdmFyLmgKQEAgLTE4MCw3ICsxODAsNyBAQAogCiAKIC8qCi0gKiBDYXJlZnVsbCwgbG9vayBhdCB0aGUgZGF0YSBzaGVldCwgdGhlcmUncyBtb3JlIHRvIHRoaXMKKyAqIENhcmVmdWwsIGxvb2sgYXQgdGhlIGRhdGEgc2hlZXQsIHRoZXJlJ3MgbW9yZSB0byB0aGlzCiAgKiBzdHJ1Y3R1cmUgdGhhbiBtZWV0cyB0aGUgZXllLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlOgogICoKICAqIHN0cnVjdCB0dWxpcF9kZXNjX3QgewpAQCAtMzgwLDcgKzM4MCw3IEBACiAvKiBDU1I2IHNldHRpbmdzICovCiAjZGVmaW5lIE9QRVJBVElPTl9NT0RFICAweDAwMDAwMjAwIC8qIEZ1bGwgRHVwbGV4ICAgICAgKi8KICNkZWZpbmUgUFJPTUlTQ19NT0RFICAgIDB4MDAwMDAwNDAgLyogUHJvbWlzY3VvdXMgTW9kZSAqLwotI2RlZmluZSBSRUNJRVZFX0FMTCAgICAgMHg0MDAwMDAwMCAvKiBSZWNpZXZlIEFsbCAgICAgICovCisjZGVmaW5lIFJFQ0lFVkVfQUxMICAgICAweDQwMDAwMDAwIC8qIFJlY2VpdmUgQWxsICAgICAgKi8KICNkZWZpbmUgUEFTU19CQURfRlJBTUVTIDB4MDAwMDAwMDggLyogUGFzcyBCYWQgRnJhbWVzICAqLwogCiAvKiBEZWMgY29udHJvbCByZWdpc3RlcnMgIENTUjYgYXMgd2VsbCAqLwpAQCAtMzk4LDcgKzM5OCw3IEBACiAjZGVmaW5lIFRVTElQX0NNRF9SRUNFSVZFQUxMICAgIDB4NDAwMDAwMDBMIC8qIChSVykgIFJlY2VpdmVsIGFsbCBmcmFtZXM/ICovCiAjZGVmaW5lIFRVTElQX0NNRF9NVVNUQkVPTkUgICAgIDB4MDIwMDAwMDBMIC8qIChSVykgIE11c3QgQmUgT25lICgyMTE0MCkgKi8KICNkZWZpbmUgVFVMSVBfQ01EX1RYVEhSU0hMRENUTCAgMHgwMDQwMDAwMEwgLyogKFJXKSAgVHJhbnNtaXQgVGhyZXNob2xkIE1vZGUgKDIxMTQwKSAqLwotI2RlZmluZSBUVUxJUF9DTURfU1RPUkVGV0QgICAgICAweDAwMjAwMDAwTCAvKiAoUlcpICBTdG9yZSBhbmQgRm93YXJkICgyMTE0MCkgKi8KKyNkZWZpbmUgVFVMSVBfQ01EX1NUT1JFRldEICAgICAgMHgwMDIwMDAwMEwgLyogKFJXKSAgU3RvcmUgYW5kIEZvcndhcmQgKDIxMTQwKSAqLwogI2RlZmluZSBUVUxJUF9DTURfTk9IRUFSVEJFQVQgICAweDAwMDgwMDAwTCAvKiAoUlcpICBObyBIZWFydGJlYXQgKDIxMTQwKSAqLwogI2RlZmluZSBUVUxJUF9DTURfUE9SVFNFTEVDVCAgICAweDAwMDQwMDAwTCAvKiAoUlcpICBQb3N0IFNlbGVjdCAoMTAwTWIpICgyMTE0MCkgKi8KICNkZWZpbmUgVFVMSVBfQ01EX0ZVTExEVVBMRVggICAgMHgwMDAwMDIwMEwgLyogKFJXKSAgRnVsbCBEdXBsZXggTW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCmluZGV4IDkzOTU2ODYuLjA4MDYyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworKysgYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogCQl6ODUzMF90eChjaGFuKTsKIAkJcmV0dXJuOwogCX0KLQkvKiBUaGlzIHNob3VsZG50IG9jY3VyIGluIERNQSBtb2RlICovCisJLyogVGhpcyBzaG91bGRuJ3Qgb2NjdXIgaW4gRE1BIG1vZGUgKi8KIAlwcmludGsoS0VSTl9FUlIgIkRNQSB0eCAtIGJvZ3VzIGV2ZW50IVxuIik7CiAJejg1MzBfdHgoY2hhbik7CiB9CkBAIC0xMjE5LDcgKzEyMTksNyBAQAogICoJQGlvOiB0aGUgcG9ydCB2YWx1ZSBpbiBxdWVzdGlvbgogICoKICAqCURlc2NyaWJlIGEgWjg1MzAgaW4gYSBzdGFuZGFyZCBmb3JtYXQuIFdlIG11c3QgcGFzcyB0aGUgSS9PIGFzCi0gKgl0aGUgcG9ydCBvZmZzZXQgaXNudCBwcmVkaWN0YWJsZS4gVGhlIG1haW4gcmVhc29uIGZvciB0aGlzIGZ1bmN0aW9uCisgKgl0aGUgcG9ydCBvZmZzZXQgaXNuJ3QgcHJlZGljdGFibGUuIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBmdW5jdGlvbgogICoJaXMgdG8gdHJ5IGFuZCBnZXQgYSBjb21tb24gZm9ybWF0IG9mIHJlcG9ydC4KICAqLwogCkBAIC0xNTg4LDcgKzE1ODgsNyBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQkKIAkJLyoKLQkJICoJQ29tcGxldGUgdGhpcyBETUEuIE5lY2Nlc3NhcnkgdG8gZmluZCB0aGUgbGVuZ3RoCisJCSAqCUNvbXBsZXRlIHRoaXMgRE1BLiBOZWNlc3NhcnkgdG8gZmluZCB0aGUgbGVuZ3RoCiAJCSAqLwkJCiAJCSAKIAkJZmxhZ3M9Y2xhaW1fZG1hX2xvY2soKTsKQEAgLTE2NTcsNyArMTY1Nyw3IEBACiAJCSAqCWZpZm8gbGVuZ3RoIGZvciB0aGlzLiBUaHVzIHdlIHdhbnQgdG8gZmxpcCB0byB0aGUgbmV3CiAJCSAqCWJ1ZmZlciBhbmQgdGhlbiBtZXNzIGFyb3VuZCBjb3B5aW5nIGFuZCBhbGxvY2F0aW5nCiAJCSAqCXRoaW5ncy4gRm9yIHRoZSBjdXJyZW50IGNhc2UgaXQgZG9lc24ndCBtYXR0ZXIgYnV0Ci0JCSAqCWlmIHlvdSBidWlsZCBhIHN5c3RlbSB3aGVyZSB0aGUgc3luYyBpcnEgaXNudCBibG9ja2VkCisJCSAqCWlmIHlvdSBidWlsZCBhIHN5c3RlbSB3aGVyZSB0aGUgc3luYyBpcnEgaXNuJ3QgYmxvY2tlZAogCQkgKglieSB0aGUga2VybmVsIElSUSBkaXNhYmxlIHRoZW4geW91IG5lZWQgb25seSBibG9jayB0aGUKIAkJICoJc3luYyBJUlEgZm9yIHRoZSBSVF9MT0NLIGFyZWEuCiAJCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwppbmRleCAxMmI4NGVkLi43MjdkNzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogICogdGhlIGRldmljZSdzIHN0YXRlIGFzIHNvbWV0aW1lcyB3ZSBuZWVkIHRvIGRvIGEgbGluay1yZW5ldyAodGhlIEJTCiAgKiB3YW50cyB1cyB0byByZW5ldyBhIERIQ1AgbGVhc2UsIGZvciBleGFtcGxlKS4KICAqCi0gKiBJbiBmYWN0LCBkb2Mgc2F5cyB0aGF0IGV2ZXJ5dGltZSB3ZSBnZXQgYSBsaW5rLXVwLCB3ZSBzaG91bGQgZG8gYQorICogSW4gZmFjdCwgZG9jIHNheXMgdGhhdCBldmVyeSB0aW1lIHdlIGdldCBhIGxpbmstdXAsIHdlIHNob3VsZCBkbyBhCiAgKiBESENQIG5lZ290aWF0aW9uLi4uCiAgKi8KIHN0YXRpYwpAQCAtNjc1LDcgKzY3NSw3IEBACiAgKiAgLSB0aGUgYWNrIG1lc3NhZ2Ugd2Fzbid0IGZvcm1hdHRlZCBjb3JyZWN0bHkKICAqCiAgKiBUaGUgcmV0dXJuZWQgc2tiIGhhcyBiZWVuIGFsbG9jYXRlZCB3aXRoIHdpbWF4X21zZ190b191c2VyX2FsbG9jKCksCi0gKiBpdCBjb250YWlucyB0aGUgcmVwb25zZSBpbiBhIG5ldGxpbmsgYXR0cmlidXRlIGFuZCBpcyByZWFkeSB0byBiZQorICogaXQgY29udGFpbnMgdGhlIHJlc3BvbnNlIGluIGEgbmV0bGluayBhdHRyaWJ1dGUgYW5kIGlzIHJlYWR5IHRvIGJlCiAgKiBwYXNzZWQgdXAgdG8gdXNlciBzcGFjZSB3aXRoIHdpbWF4X21zZ190b191c2VyX3NlbmQoKS4gVG8gYWNjZXNzCiAgKiB0aGUgcGF5bG9hZCBhbmQgaXRzIGxlbmd0aCwgdXNlIHdpbWF4X21zZ197ZGF0YSxsZW59KCkgb24gdGhlIHNrYi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggNjViYzMzNC4uNDdjYWU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJaWYgKHJlc3VsdCA9PSAtRVVDTEVBTikgewogCQkvKgogCQkgKiBXZSBjb21lIGhlcmUgYmVjYXVzZSB0aGUgcmVzZXQgZHVyaW5nIG9wZXJhdGlvbmFsIG1vZGUKLQkJICogd2Fzbid0IHN1Y2Nlc3N1bGx5IGRvbmUgYW5kIG5lZWQgdG8gcHJvY2VlZCB0byBhIGJ1cworCQkgKiB3YXNuJ3Qgc3VjY2Vzc2Z1bGx5IGRvbmUgYW5kIG5lZWQgdG8gcHJvY2VlZCB0byBhIGJ1cwogCQkgKiByZXNldC4gRm9yIHRoZSBkZXZfcmVzZXRfaGFuZGxlKCkgdG8gYmUgYWJsZSB0byBoYW5kbGUKIAkJICogdGhlIHJlc2V0IGV2ZW50IGxhdGVyIHByb3Blcmx5LCB3ZSByZXN0b3JlIGJvb3RfbW9kZSBiYWNrCiAJCSAqIHRvIHRoZSBzdGF0ZSBiZWZvcmUgcHJldmlvdXMgcmVzZXQuIGllOiBqdXN0IGxpa2Ugd2UgYXJlCkBAIC03NTUsNyArNzU1LDcgQEAKICAqIEFsbG9jIHRoZSBjb21tYW5kIGFuZCBhY2sgYnVmZmVycyBmb3IgYm9vdCBtb2RlCiAgKgogICogR2V0IHRoZSBidWZmZXJzIG5lZWRlZCB0byBkZWFsIHdpdGggYm9vdCBtb2RlIG1lc3NhZ2VzLiAgVGhlc2UKLSAqIGJ1ZmZlcnMgbmVlZCB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBzZGlvIHJlY2lldmUgaXJxIGlzIHNldHVwLgorICogYnVmZmVycyBuZWVkIHRvIGJlIGFsbG9jYXRlZCBiZWZvcmUgdGhlIHNkaW8gcmVjZWl2ZSBpcnEgaXMgc2V0dXAuCiAgKi8KIHN0YXRpYwogaW50IGkyNDAwbV9ibV9idWZfYWxsb2Moc3RydWN0IGkyNDAwbSAqaTI0MDBtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwppbmRleCA4YjU1YTViLi44NWRhZGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwpAQCAtNTQsNyArNTQsNyBAQAogICogZW5kcG9pbnQgYW5kIHJlYWQgZnJvbSBpdCBpbiB0aGUgbm90aWZpY2F0aW9uIGVuZHBvaW50LiBJbiBTRElPIHdlCiAgKiB0YWxrIHRvIGl0IHZpYSB0aGUgd3JpdGUgYWRkcmVzcyBhbmQgcmVhZCBmcm9tIHRoZSByZWFkIGFkZHJlc3MuCiAgKgotICogVXBvbiBlbnRyYW5jZSB0byBib290IG1vZGUsIHRoZSBkZXZpY2Ugc2VuZHMgKHByZWNlZWRlZCB3aXRoIGEgZmV3CisgKiBVcG9uIGVudHJhbmNlIHRvIGJvb3QgbW9kZSwgdGhlIGRldmljZSBzZW5kcyAocHJlY2VkZWQgd2l0aCBhIGZldwogICogemVybyBsZW5ndGggcGFja2V0cyAoWkxQcykgb24gdGhlIG5vdGlmaWNhdGlvbiBlbmRwb2ludCBpbiBVU0IpIGEKICAqIHJlYm9vdCBiYXJrZXIgKDQgbGUzMiB3b3JkcyB3aXRoIHRoZSBzYW1lIHZhbHVlKS4gV2UgYWNrIGl0IGJ5CiAgKiBzZW5kaW5nIHRoZSBzYW1lIGJhcmtlciB0byB0aGUgZGV2aWNlLiBUaGUgZGV2aWNlIGFja3Mgd2l0aCBhCkBAIC0xNTg5LDcgKzE1ODksNyBAQAogCQlpMjQwMG0tPmZ3X25hbWUgPSBmd19uYW1lOwogCQlyZXQgPSBpMjQwMG1fZndfYm9vdHN0cmFwKGkyNDAwbSwgZncsIGZsYWdzKTsKIAkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCWlmIChyZXQgPj0gMCkJLyogZmlybXdhcmUgbG9hZGVkIHN1Y2Nlc2Z1bGx5ICovCisJCWlmIChyZXQgPj0gMCkJLyogZmlybXdhcmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSAqLwogCQkJYnJlYWs7CiAJCWkyNDAwbS0+ZndfbmFtZSA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS11c2IuaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0tdXNiLmgKaW5kZXggZWI4MDI0My4uNjY1MGZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS11c2IuaAorKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLXVzYi5oCkBAIC0xMDUsMTQgKzEwNSwxNCBAQAogICoKICAqIEBlZGM6IHBvaW50ZXIgdG8gZXJyb3IgZGVuc2l0eSBjb3VudGVyLgogICogQG1heF9lcnI6IG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB3ZSBjYW4gYWNjZXB0IG92ZXIgdGhlIHRpbWVmcmFtZQotICogQHRpbWVmcmFtZTogbGVuZ2h0IG9mIHRoZSB0aW1lZnJhbWUgKGluIGppZmZpZXMpLgorICogQHRpbWVmcmFtZTogbGVuZ3RoIG9mIHRoZSB0aW1lZnJhbWUgKGluIGppZmZpZXMpLgogICoKICAqIFJldHVybnM6ICEwIDEgaWYgbWF4aW11bSBhY2NlcHRhYmxlIGVycm9ycyBwZXIgdGltZWZyYW1lIGhhcyBiZWVuCiAgKiAgICAgZXhjZWVkZWQuIDAgb3RoZXJ3aXNlLgogICoKICAqIFRoaXMgaXMgd2F5IHRvIGRldGVybWluZSBpZiB0aGUgbnVtYmVyIG9mIGFjY2VwdGFibGUgZXJyb3JzIHBlciB0aW1lCiAgKiBwZXJpb2QgaGFzIGJlZW4gZXhjZWVkZWQuIEl0IGlzIG5vdCBhY2N1cmF0ZSBhcyB0aGVyZSBhcmUgY2FzZXMgaW4gd2hpY2gKLSAqIHRoaXMgc2NoZW1lIHdpbGwgbm90IHdvcmssIGZvciBleGFtcGxlIGlmIHRoZXJlIGFyZSBwZXJpb2RpYyBvY2N1cmVuY2VzCisgKiB0aGlzIHNjaGVtZSB3aWxsIG5vdCB3b3JrLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUgcGVyaW9kaWMgb2NjdXJyZW5jZXMKICAqIG9mIGVycm9ycyB0aGF0IHN0cmFkZGxlIHVwZGF0ZXMgdG8gdGhlIHN0YXJ0IHRpbWUuIFRoaXMgc2NoZW1lIGlzCiAgKiBzdWZmaWNpZW50IGZvciBvdXIgdXNhZ2UuCiAgKgpAQCAtMjA0LDcgKzIwNCw3IEBACiAgKiAgICAgdXNiX2F1dG9wbV9nZXQvcHV0X2ludGVyZmFjZSgpIGJhcnJpZXJzIHdoZW4gZXhlY3V0aW5nCiAgKiAgICAgY29tbWFuZHMuIFNlZSBkb2MgaW4gaTI0MDBtdV9zdXNwZW5kKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKgotICogQHJ4X3NpemVfYXV0b19zaHJpbms6IGlmIHRydWUsIHRoZSByeF9zaXplIGlzIHNocmlua2VkCisgKiBAcnhfc2l6ZV9hdXRvX3NocmluazogaWYgdHJ1ZSwgdGhlIHJ4X3NpemUgaXMgc2hydW5rCiAgKiAgICAgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgYXZlcmFnZSBzaXplIG9mIHRoZSByZWNlaXZlZAogICogICAgIHRyYW5zYWN0aW9ucy4gVGhpcyBhbGxvd3MgdGhlIHJlY2VpdmUgY29kZSB0byBhbGxvY2F0ZSBzbWFsbGVyCiAgKiAgICAgY2h1bmtzIG9mIG1lbW9yeSBhbmQgdGh1cyByZWR1Y2UgcHJlc3N1cmUgb24gdGhlIG1lbW9yeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCmluZGV4IDAzMGNiZmQuLjVlYWNjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAorKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKQEAgLTUyNiw3ICs1MjYsNyBAQAogICoKICAqIEBiYXJrZXI6IGJhcmtlciB0eXBlIHRoYXQgdGhlIGRldmljZSB1c2VzOyB0aGlzIGlzIGluaXRpYWxpemVkIGJ5CiAgKiAgICAgaTI0MDBtX2lzX2Jvb3RfYmFya2VyKCkgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLiBUaGVuIGl0Ci0gKiAgICAgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgZGV2aWNlIGFuZCBldmVyeXRpbWUKKyAqICAgICB3b24ndCBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSBkZXZpY2UgYW5kIGV2ZXJ5IHRpbWUKICAqICAgICBhIGJvb3QgYmFya2VyIGlzIHJlY2VpdmVkLCBpdCBpcyBqdXN0IHZlcmlmaWVkIGZvciBpdCBiZWluZyB0aGUKICAqICAgICBzYW1lLgogICoKQEAgLTkyOCw3ICs5MjgsNyBAQAogCXN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgc3RydWN0IGkyNDAwbV90bHZfcmZfc3dpdGNoZXNfc3RhdHVzICopOwogCiAvKgotICogSGVscGVycyBmb3IgZmlybXdhcmUgYmFja3dhcmRzIGNvbXBhYmlsaXR5CisgKiBIZWxwZXJzIGZvciBmaXJtd2FyZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICoKICAqIEFzIHdlIGFpbSB0byBzdXBwb3J0IGF0IGxlYXN0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIHRoYXQgd2FzCiAgKiByZWxlYXNlZCB3aXRoIHRoZSBwcmV2aW91cyBrZXJuZWwvZHJpdmVyIHJlbGVhc2UsIHNvbWUgY29kZSB3aWxsIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKaW5kZXggOTQ3NDJlMS4uMmVkZDhmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJZF9mbnN0YXJ0KDMsIGRldiwgIih3cyAlcCBpMjQwMG0gJXAgc2tiICVwKVxuIiwgd3MsIGkyNDAwbSwgc2tiKTsKIAlyZXN1bHQgPSAtRUlOVkFMOwogCWlmIChza2IgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgIldBS0UmVFg6IHNrYiBkaXNzYXBlYXJlZCFcbiIpOworCQlkZXZfZXJyKGRldiwgIldBS0UmVFg6IHNrYiBkaXNhcHBlYXJlZCFcbiIpOwogCQlnb3RvIG91dF9wdXQ7CiAJfQogCS8qIElmIHdlIGhhdmUsIHNvbWVob3csIGxvc3QgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhpcyB3YXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9vcC1yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9vcC1yZmtpbGwuYwppbmRleCA5ZTAyYjkwLi5iMGRiYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vb3AtcmZraWxsLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL29wLXJma2lsbC5jCkBAIC0yNyw3ICsyNyw3IEBACiAgKiAtIHJlcG9ydCBjaGFuZ2VzIGluIHRoZSBIVyBSRiBLaWxsIHN3aXRjaCBbd2l0aAogICogICB3aW1heF9yZmtpbGxfe3N3LGh3fV9yZXBvcnQoKSwgd2hpY2ggaGFwcGVucyB3aGVuIHdlIGRldGVjdCB0aG9zZQogICogICBpbmRpY2F0aW9ucyBjb21pbmcgdGhyb3VnaCBoYXJkd2FyZSByZXBvcnRzXS4gV2UgYWxzbyBkbyBpdCBvbgotICogICBpbml0aWFsaXphdGlvbiB0byBsZXQgdGhlIHN0YWNrIGtub3cgdGhlIGludGlhbCBIVyBzdGF0ZS4KKyAqICAgaW5pdGlhbGl6YXRpb24gdG8gbGV0IHRoZSBzdGFjayBrbm93IHRoZSBpbml0aWFsIEhXIHN0YXRlLgogICoKICAqIC0gaW1wbGVtZW50IGluZGljYXRpb25zIGZyb20gdGhlIHN0YWNrIHRvIGNoYW5nZSB0aGUgU1cgUkYgS2lsbAogICogICBzd2l0Y2ggKGNvbWluZyBmcm9tIHN5c2ZzLCB0aGUgd2ltYXggc3RhY2sgb3IgdXNlciBzcGFjZSkuCkBAIC03Myw3ICs3Myw3IEBACiAgKiBHZW5lcmljIE5ldGxpbmsgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgc2VudCBmcm9tCiAgKiB1c2Vyc3BhY2UgdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZSBSRi1LaWxsIHN3aXRjaCBzdGF0dXMuCiAgKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZGV2aWNlJ3Mgc29md2FyZSBSRi1LaWxsIHN3aXRjaCBzdGF0ZSB0bworICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZGV2aWNlJ3Mgc29mdHdhcmUgUkYtS2lsbCBzd2l0Y2ggc3RhdGUgdG8KICAqIG1hdGNoIHdoYXQgaXMgcmVxdWVzdGVkLgogICoKICAqIE5PVEU6IHRoZSBpMjQwMG0gaGFzIGEgc3RyaWN0IHN0YXRlIG1hY2hpbmU7IHdlIGNhbiBvbmx5IHNldCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMKaW5kZXggODQ0MTMzYi4uMmY5NGE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMKQEAgLTM0OSw3ICszNDksNyBAQAogICoKICAqIEZvciByZXBvcnRzOiBXZSBjYW4ndCBjbG9uZSB0aGUgb3JpZ2luYWwgc2tiIHdoZXJlIHRoZSBkYXRhIGlzCiAgKiBiZWNhdXNlIHdlIG5lZWQgdG8gc2VuZCB0aGlzIHVwIHZpYSBuZXRsaW5rOyBuZXRsaW5rIGhhcyB0byBhZGQKLSAqIGhlYWRlcnMgYW5kIHdlIGNhbid0IG92ZXJ3cml0ZSB3aGF0J3MgcHJlY2VlZGluZyB0aGUgcGF5bG9hZC4uLmFzCisgKiBoZWFkZXJzIGFuZCB3ZSBjYW4ndCBvdmVyd3JpdGUgd2hhdCdzIHByZWNlZGluZyB0aGUgcGF5bG9hZC4uLmFzCiAgKiBpdCBpcyBhbm90aGVyIG1lc3NhZ2UuIFNvIHdlIGp1c3QgZHVwIHRoZW0uCiAgKi8KIHN0YXRpYwpAQCAtNDI1LDcgKzQyNSw3IEBACiAgKgogICogQXMgaW4gaTI0MDBtX3J4X2N0bCgpLCB3ZSBjYW4ndCBjbG9uZSB0aGUgb3JpZ2luYWwgc2tiIHdoZXJlIHRoZQogICogZGF0YSBpcyBiZWNhdXNlIHdlIG5lZWQgdG8gc2VuZCB0aGlzIHVwIHZpYSBuZXRsaW5rOyBuZXRsaW5rIGhhcyB0bwotICogYWRkIGhlYWRlcnMgYW5kIHdlIGNhbid0IG92ZXJ3cml0ZSB3aGF0J3MgcHJlY2VlZGluZyB0aGUKKyAqIGFkZCBoZWFkZXJzIGFuZCB3ZSBjYW4ndCBvdmVyd3JpdGUgd2hhdCdzIHByZWNlZGluZyB0aGUKICAqIHBheWxvYWQuLi5hcyBpdCBpcyBhbm90aGVyIG1lc3NhZ2UuIFNvIHdlIGp1c3QgZHVwIHRoZW0uCiAgKi8KIHN0YXRpYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3R4LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdHguYwppbmRleCAzZjgxOWVmLi40YjMwZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdHguYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdHguYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgKiAod2l0aCBhIG1vdmVkIG1lc3NhZ2UgaGVhZGVyIHRvIG1ha2Ugc3VyZSBpdCBpcyBzaXplLWFsaWduZWQgdG8KICAqIDE2KSwgVEFJTCByb29tIHRoYXQgd2FzIHVudXNhYmxlIChhbmQgdGh1cyBpcyBtYXJrZWQgd2l0aCBhIG1lc3NhZ2UKICAqIGhlYWRlciB0aGF0IHNheXMgJ3NraXAgdGhpcycpIGFuZCBhdCB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLCBhbgotICogaW1jb21wbGV0ZSBtZXNzYWdlIHdpdGggYSBjb3VwbGUgb2YgcGF5bG9hZHMuCisgKiBpbmNvbXBsZXRlIG1lc3NhZ2Ugd2l0aCBhIGNvdXBsZSBvZiBwYXlsb2Fkcy4KICAqCiAgKiBOICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAgKiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtODE5LDcgKzgxOSw3IEBACiAgKiB0aGUgRklGIHRoYXQgaXMgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbi4KICAqCiAgKiBJdCBzZXRzIHRoZSBzdGF0ZSBpbiBAaTI0MDBtIHRvIGluZGljYXRlIHRoZSBidXMtc3BlY2lmaWMgZHJpdmVyIGlzCi0gKiB0cmFuc2ZlcmluZyB0aGF0IG1lc3NhZ2UgKGkyNDAwbS0+dHhfbXNnX3NpemUpLgorICogdHJhbnNmZXJyaW5nIHRoYXQgbWVzc2FnZSAoaTI0MDBtLT50eF9tc2dfc2l6ZSkuCiAgKgogICogT25jZSB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGVkLCBjYWxsIGkyNDAwbV90eF9tc2dfc2VudCgpLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItZncuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItZncuYwppbmRleCBiNThlYzU2Li4xZmRhNDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLWZ3LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1mdy5jCkBAIC0xNjksNyArMTY5LDcgQEAKICAqCiAgKiBDb21tYW5kIGNhbiBiZSBhIHJhdyBjb21tYW5kLCB3aGljaCByZXF1aXJlcyBubyBwcmVwYXJhdGlvbiAoYW5kCiAgKiB3aGljaCBtaWdodCBub3QgZXZlbiBiZSBmb2xsb3dpbmcgdGhlIGNvbW1hbmQgZm9ybWF0KS4gQ2hlY2tzIHRoYXQKLSAqIHRoZSByaWdodCBhbW91bnQgb2YgZGF0YSB3YXMgdHJhbnNmZXJlZC4KKyAqIHRoZSByaWdodCBhbW91bnQgb2YgZGF0YSB3YXMgdHJhbnNmZXJyZWQuCiAgKgogICogVG8gc2F0aXNmeSBVU0IgcmVxdWlyZW1lbnRzIChubyBvbnN0YWNrLCB2bWFsbG9jIG9yIGluIGRhdGEgc2VnbWVudAogICogYnVmZmVycyksIHdlIGNvcHkgdGhlIGNvbW1hbmQgdG8gaTI0MDBtLT5ibV9jbWRfYnVmIGFuZCBzZW5kIGl0IGZyb20KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItcnguYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItcnguYwppbmRleCBhMjY0ODNhLi5lMzI1NzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLXJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1yeC5jCkBAIC01OCw3ICs1OCw3IEBACiAgKiAgICBhIHppbGxpb24gcmVhZHM7IGJ5IHNlcmlhbGl6aW5nLCB3ZSBhcmUgdGhyb3R0bGluZy4KICAqCiAgKiAgLSBSWCBkYXRhIHByb2Nlc3NpbmcgY2FuIGdldCBoZWF2eSBlbm91Z2ggc28gdGhhdCBpdCBpcyBub3QKLSAqICAgIGFwcHJvcGlhdGUgZm9yIGRvaW5nIGl0IGluIHRoZSBVU0IgY2FsbGJhY2s7IHRodXMgd2UgcnVuIGl0IGluIGEKKyAqICAgIGFwcHJvcHJpYXRlIGZvciBkb2luZyBpdCBpbiB0aGUgVVNCIGNhbGxiYWNrOyB0aHVzIHdlIHJ1biBpdCBpbiBhCiAgKiAgICBwcm9jZXNzIGNvbnRleHQuCiAgKgogICogV2UgcHJvdmlkZSBhIHJlYWQgYnVmZmVyIG9mIGFuIGFyYml0cmFyeSBzaXplIChzaG9ydCBvZiBhIHBhZ2UpOyBpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi10eC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi10eC5jCmluZGV4IGM2NWI5OTcuLmFjMzU3YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItdHguYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLXR4LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogLyoKICAqIEdldCB0aGUgbmV4dCBUWCBtZXNzYWdlIGluIHRoZSBUWCBGSUZPIGFuZCBzZW5kIGl0IHRvIHRoZSBkZXZpY2UKICAqCi0gKiBOb3RlIHdlIGV4aXQgdGhlIGxvb3AgaWYgaTI0MDBtdV90eCgpIGZhaWxzOyB0aGF0IGZ1bnRpb24gb25seQorICogTm90ZSB3ZSBleGl0IHRoZSBsb29wIGlmIGkyNDAwbXVfdHgoKSBmYWlsczsgdGhhdCBmdW5jdGlvbiBvbmx5CiAgKiBmYWlscyBvbiBoYXJkIGVycm9yIChmYWlsaW5nIHRvIHR4IGEgYnVmZmVyIG5vdCBiZWluZyBvbmUgb2YgdGhlbSwKICAqIHNlZSBpdHMgZG9jKS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggNTdhNzliMC4uNGU1YzdhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtMTg4NCw3ICsxODg0LDcgQEAKIAkvKiBNYWtlIHN1cmUgdGhlIGNhcmQgaXMgY29uZmlndXJlZC4KIAkgKiBXaXJlbGVzcyBFeHRlbnNpb25zIG1heSBwb3N0cG9uZSBjb25maWcgY2hhbmdlcyB1bnRpbCB0aGUgY2FyZAogCSAqIGlzIG9wZW4gKHRvIHBpcGVsaW5lIGNoYW5nZXMgYW5kIHNwZWVkLXVwIGNhcmQgc2V0dXApLiBJZgotCSAqIHRob3NlIGNoYW5nZXMgYXJlIG5vdCB5ZXQgY29tbWl0ZWQsIGRvIGl0IG5vdyAtIEplYW4gSUkgKi8KKwkgKiB0aG9zZSBjaGFuZ2VzIGFyZSBub3QgeWV0IGNvbW1pdHRlZCwgZG8gaXQgbm93IC0gSmVhbiBJSSAqLwogCWlmICh0ZXN0X2JpdChGTEFHX0NPTU1JVCwgJmFpLT5mbGFncykpIHsKIAkJZGlzYWJsZV9NQUMoYWksIDEpOwogCQl3cml0ZUNvbmZpZ1JpZChhaSwgMSk7CkBAIC0xOTkyLDcgKzE5OTIsNyBAQAogLyoKICAqIE1hZ2ljLCB0aGUgY2FyZHMgZmlybXdhcmUgbmVlZHMgYSBsZW5ndGggY291bnQgKDIgYnl0ZXMpIGluIHRoZSBob3N0IGJ1ZmZlcgogICogcmlnaHQgYWZ0ZXIgIFRYRklEX0hEUi5UaGUgVFhGSURfSERSIGNvbnRhaW5zIHRoZSBzdGF0dXMgc2hvcnQgc28gcGF5bG9hZGxlbgotICogaXMgaW1tZWRpYXRseSBhZnRlciBpdC4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpcyBpbW1lZGlhdGVseSBhZnRlciBpdC4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB8VFhGSURIRFIrU1RBVFVTfFBBWUxPQURMRU58ODAyLjNIRFJ8UEFDS0VUREFUQXwKICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCkBAIC0yMDA2LDcgKzIwMDYsNyBAQAogCQlzaXplb2Yod2lmaWN0bGhkcjgwMjMpICsgMiA7CiAKIAkvKgotCSAqIEZpcm13YXJlIGF1dG9tYXRpY2x5IHB1dHMgODAyIGhlYWRlciBvbiBzbworCSAqIEZpcm13YXJlIGF1dG9tYXRpY2FsbHkgcHV0cyA4MDIgaGVhZGVyIG9uIHNvCiAJICogd2UgZG9uJ3QgbmVlZCB0byBhY2NvdW50IGZvciBpdCBpbiB0aGUgbGVuZ3RoCiAJICovCiAJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhaS0+ZmxhZ3MpICYmIGFpLT5taWNzdGF0cy5lbmFibGVkICYmCkBAIC0yNTMxLDcgKzI1MzEsNyBAQAogLyoKICAqIFdlIGFyZSBzZXR0aW5nIHVwIHRocmVlIHRoaW5ncyBoZXJlOgogICogMSkgTWFwIEFVWCBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzOiBSaWQsIFR4RmlkLCBvciBSeEZpZC4KLSAqIDIpIE1hcCBQQ0kgbWVtb3J5IGZvciBpc3N1ZWluZyBjb21tYW5kcy4KKyAqIDIpIE1hcCBQQ0kgbWVtb3J5IGZvciBpc3N1aW5nIGNvbW1hbmRzLgogICogMykgQWxsb2NhdGUgbWVtb3J5IChzaGFyZWQpIHRvIHNlbmQgYW5kIHJlY2VpdmUgZXRoZXJuZXQgZnJhbWVzLgogICovCiBzdGF0aWMgaW50IG1waV9tYXBfY2FyZChzdHJ1Y3QgYWlyb19pbmZvICphaSwgc3RydWN0IHBjaV9kZXYgKnBjaSkKQEAgLTM5NDcsNyArMzk0Nyw3IEBACiAKIAlpZiAoIG1heF90cmllcyA9PSAtMSApIHsKIAkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwKLQkJCSJNYXggdHJpZXMgZXhjZWVkZWQgd2hlbiBpc3N1ZWluZyBjb21tYW5kIik7CisJCQkiTWF4IHRyaWVzIGV4Y2VlZGVkIHdoZW4gaXNzdWluZyBjb21tYW5kIik7CiAJCWlmIChJTjQ1MDAoYWksIENPTU1BTkQpICYgQ09NTUFORF9CVVNZKQogCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX0NMRUFSQ09NTUFOREJVU1kpOwogCQlyZXR1cm4gRVJST1I7CkBAIC00MTczLDcgKzQxNzMsNyBAQAogfQogCiAvKiAgTm90ZSwgdGhhdCB3ZSBhcmUgdXNpbmcgQkFQMSB3aGljaCBpcyBhbHNvIHVzZWQgYnkgdHJhbnNtaXQsIHNvCi0gKiAgbWFrZSBzdXJlIHRoaXMgaXNudCBjYWxsZWQgd2hlbiBhIHRyYW5zbWl0IGlzIGhhcHBlbmluZyAqLworICogIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGNhbGxlZCB3aGVuIGEgdHJhbnNtaXQgaXMgaGFwcGVuaW5nICovCiBzdGF0aWMgaW50IFBDNDUwMF93cml0ZXJpZChzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2IHJpZCwKIAkJCSAgIGNvbnN0IHZvaWQgKnBCdWYsIGludCBsZW4sIGludCBsb2NrKQogewpAQCAtNDc3Niw3ICs0Nzc2LDcgQEAKIAkJaWYgKCFzdGF0c0xhYmVsc1tpXSkgY29udGludWU7CiAJCWlmIChqK3N0cmxlbihzdGF0c0xhYmVsc1tpXSkrMTY+NDA5NikgewogCQkJYWlyb19wcmludF93YXJuKGFwcml2LT5kZXYtPm5hbWUsCi0JCQkgICAgICAgIlBvdGVudGlhbGx5IGRpc2FzdGVyb3VzIGJ1ZmZlciBvdmVyZmxvdyBhdmVydGVkISIpOworCQkJICAgICAgICJQb3RlbnRpYWxseSBkaXNhc3Ryb3VzIGJ1ZmZlciBvdmVyZmxvdyBhdmVydGVkISIpOwogCQkJYnJlYWs7CiAJCX0KIAkJais9c3ByaW50ZihkYXRhLT5yYnVmZmVyK2osICIlczogJXVcbiIsIHN0YXRzTGFiZWxzW2ldLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwppbmRleCBiNzYxZmVjLi5jY2MyZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwpAQCAtOTc0LDcgKzk3NCw3IEBACiAJCQlpZiAoYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcgPD0gMCkgewogCQkJCS8qCiAJCQkJICogbmVzdGVkIGFyOTE3MF9yeCBjYWxsIQotCQkJCSAqIHRlcm1pbmF0aW9uIGlzIGd1cmFudGVlZCwgZXZlbiB3aGVuIHRoZQorCQkJCSAqIHRlcm1pbmF0aW9uIGlzIGd1YXJhbnRlZWQsIGV2ZW4gd2hlbiB0aGUKIAkJCQkgKiBjb21iaW5lZCBmcmFtZSBhbHNvIGhhdmUgYSBlbGVtZW50IHdpdGgKIAkJCQkgKiBhIGJhZCB0YWcuCiAJCQkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYwppbmRleCAwZGJmY2Y3Li5hYThkMDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCiAvKgogICogaW5pdGlhbGl6ZSBzb21lIHBoeSByZWdzIGZyb20gZWVwcm9tIHZhbHVlcyBpbiBtb2RhbF9oZWFkZXJbXQotICogYWNjLiB0byBiYW5kIGFuZCBiYW5kd2l0aAorICogYWNjLiB0byBiYW5kIGFuZCBiYW5kd2lkdGgKICAqLwogc3RhdGljIGludCBhcjkxNzBfaW5pdF9waHlfZnJvbV9lZXByb20oc3RydWN0IGFyOTE3MCAqYXIsCiAJCQkJYm9vbCBpc18yZ2h6LCBib29sIGlzXzQwbWh6KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FuaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FuaS5oCmluZGV4IGQwYTY2NDAuLjAzNDAxNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hbmkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYW5pLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQVRINUtfQU5JX1JTU0lfVEhSX0hJR0gJCTQwCiAjZGVmaW5lIEFUSDVLX0FOSV9SU1NJX1RIUl9MT1cJCTcKIAotLyogbWF4aW11bSBhdmFpbGFiZSBsZXZlbHMgKi8KKy8qIG1heGltdW0gYXZhaWxhYmxlIGxldmVscyAqLwogI2RlZmluZSBBVEg1S19BTklfTUFYX0ZJUlNURVBfTFZMCTIKICNkZWZpbmUgQVRINUtfQU5JX01BWF9OT0lTRV9JTU1fTFZMCTEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKaW5kZXggNGQ3ZjIxZS4uMzQ5YTU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCkBAIC0xOTUzLDcgKzE5NTMsNyBAQAogCiAjZGVmaW5lIEZVREdFIEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCArIDMKIAkvKiBXZSB1c2UgRlVER0UgdG8gbWFrZSBzdXJlIHRoZSBuZXh0IFRCVFQgaXMgYWhlYWQgb2YgdGhlIGN1cnJlbnQgVFUuCi0JICogU2luY2Ugd2UgbGF0ZXIgc3Vic3RyYWN0IEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAoMTApIGluIHRoZSB0aW1lcgorCSAqIFNpbmNlIHdlIGxhdGVyIHN1YnRyYWN0IEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAoMTApIGluIHRoZSB0aW1lcgogCSAqIGNvbmZpZ3VyYXRpb24gd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgYmlnZ2VyIHRoYW4gdGhhdC4gKi8KIAogCWlmIChiY190c2YgPT0gLTEpIHsKQEAgLTE5NzEsNyArMTk3MSw3IEBACiAJCWludHZhbCB8PSBBUjVLX0JFQUNPTl9SRVNFVF9UU0Y7CiAJfSBlbHNlIGlmIChiY190c2YgPiBod190c2YpIHsKIAkJLyoKLQkJICogYmVhY29uIHJlY2VpdmVkLCBTVyBtZXJnZSBoYXBwZW5kIGJ1dCBIVyBUU0Ygbm90IHlldCB1cGRhdGVkLgorCQkgKiBiZWFjb24gcmVjZWl2ZWQsIFNXIG1lcmdlIGhhcHBlbmVkIGJ1dCBIVyBUU0Ygbm90IHlldCB1cGRhdGVkLgogCQkgKiBub3QgcG9zc2libGUgdG8gcmVjb25maWd1cmUgdGltZXJzIHlldCwgYnV0IG5leHQgdGltZSB3ZQogCQkgKiByZWNlaXZlIGEgYmVhY29uIHdpdGggdGhlIHNhbWUgQlNTSUQsIHRoZSBoYXJkd2FyZSB3aWxsCiAJCSAqIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBUU0YgYW5kIHRoZW4gd2UgbmVlZCB0byByZWNvbmZpZ3VyZQpAQCAtMjY1MSw3ICsyNjUxLDcgQEAKIAlzeW5jaHJvbml6ZV9pcnEoc2MtPmlycSk7CiAJc3RvcF90YXNrbGV0cyhzYyk7CiAKLQkvKiBTYXZlIGFuaSBtb2RlIGFuZCBkaXNhYmxlIEFOSSBkdXJyaW5nCisJLyogU2F2ZSBhbmkgbW9kZSBhbmQgZGlzYWJsZSBBTkkgZHVyaW5nCiAJICogcmVzZXQuIElmIHdlIGRvbid0IHdlIG1pZ2h0IGdldCBmYWxzZQogCSAqIFBIWSBlcnJvciBpbnRlcnJ1cHRzLiAqLwogCWFuaV9tb2RlID0gYWgtPmFoX3NjLT5hbmlfc3RhdGUuYW5pX21vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYwppbmRleCAxNmI0NGZmLi5hOGZjYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkvKgogCSAqIFZhbGlkYXRlIGlucHV0CiAJICogLSBaZXJvIHJldHJpZXMgZG9uJ3QgbWFrZSBzZW5zZS4KLQkgKiAtIEEgemVybyByYXRlIHdpbGwgcHV0IHRoZSBIVyBpbnRvIGEgbW9kZSB3aGVyZSBpdCBjb250aW5vdXNseSBzZW5kcworCSAqIC0gQSB6ZXJvIHJhdGUgd2lsbCBwdXQgdGhlIEhXIGludG8gYSBtb2RlIHdoZXJlIGl0IGNvbnRpbnVvdXNseSBzZW5kcwogCSAqICAgbm9pc2Ugb24gdGhlIGNoYW5uZWwsIHNvIGl0IGlzIGltcG9ydGFudCB0byBhdm9pZCB0aGlzLgogCSAqLwogCWlmICh1bmxpa2VseSh0eF90cmllczAgPT0gMCkpIHsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCS8qCiAJICogVmFsaWRhdGUgaW5wdXQKIAkgKiAtIFplcm8gcmV0cmllcyBkb24ndCBtYWtlIHNlbnNlLgotCSAqIC0gQSB6ZXJvIHJhdGUgd2lsbCBwdXQgdGhlIEhXIGludG8gYSBtb2RlIHdoZXJlIGl0IGNvbnRpbm91c2x5IHNlbmRzCisJICogLSBBIHplcm8gcmF0ZSB3aWxsIHB1dCB0aGUgSFcgaW50byBhIG1vZGUgd2hlcmUgaXQgY29udGludW91c2x5IHNlbmRzCiAJICogICBub2lzZSBvbiB0aGUgY2hhbm5lbCwgc28gaXQgaXMgaW1wb3J0YW50IHRvIGF2b2lkIHRoaXMuCiAJICovCiAJaWYgKHVubGlrZWx5KHR4X3RyaWVzMCA9PSAwKSkgewpAQCAtMzAwLDcgKzMwMCw3IEBACiAJLyoKIAkgKiBSYXRlcyBjYW4gYmUgMCBhcyBsb25nIGFzIHRoZSByZXRyeSBjb3VudCBpcyAwIHRvby4KIAkgKiBBIHplcm8gcmF0ZSBhbmQgbm9uemVybyByZXRyeSBjb3VudCB3aWxsIHB1dCB0aGUgSFcgaW50byBhIG1vZGUgd2hlcmUKLQkgKiBpdCBjb250aW5vdXNseSBzZW5kcyBub2lzZSBvbiB0aGUgY2hhbm5lbCwgc28gaXQgaXMgaW1wb3J0YW50IHRvCisJICogaXQgY29udGludW91c2x5IHNlbmRzIG5vaXNlIG9uIHRoZSBjaGFubmVsLCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8KIAkgKiBhdm9pZCB0aGlzLgogCSAqLwogCWlmICh1bmxpa2VseSgodHhfcmF0ZTEgPT0gMCAmJiB0eF90cmllczEgIT0gMCkgfHwKQEAgLTM0Miw3ICszNDIsNyBAQAogXCoqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogUHJvY2Nlc3MgdGhlIHR4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTAvNTIxMQorICogUHJvY2VzcyB0aGUgdHggc3RhdHVzIGRlc2NyaXB0b3Igb24gNTIxMC81MjExCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY18yd29yZF90eF9zdGF0dXMoc3RydWN0IGF0aDVrX2h3ICphaCwKIAkJc3RydWN0IGF0aDVrX2Rlc2MgKmRlc2MsIHN0cnVjdCBhdGg1a190eF9zdGF0dXMgKnRzKQpAQCAtMzk0LDcgKzM5NCw3IEBACiB9CiAKIC8qCi0gKiBQcm9jY2VzcyBhIHR4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTIKKyAqIFByb2Nlc3MgYSB0eCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEyCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY180d29yZF90eF9zdGF0dXMoc3RydWN0IGF0aDVrX2h3ICphaCwKIAkJc3RydWN0IGF0aDVrX2Rlc2MgKmRlc2MsIHN0cnVjdCBhdGg1a190eF9zdGF0dXMgKnRzKQpAQCAtNTE5LDcgKzUxOSw3IEBACiB9CiAKIC8qCi0gKiBQcm9jY2VzcyB0aGUgcnggc3RhdHVzIGRlc2NyaXB0b3Igb24gNTIxMC81MjExCisgKiBQcm9jZXNzIHRoZSByeCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEwLzUyMTEKICAqLwogc3RhdGljIGludCBhdGg1a19od19wcm9jXzUyMTBfcnhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCXN0cnVjdCBhdGg1a19kZXNjICpkZXNjLCBzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICpycykKQEAgLTYwMiw3ICs2MDIsNyBAQAogfQogCiAvKgotICogUHJvY2Nlc3MgdGhlIHJ4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTIKKyAqIFByb2Nlc3MgdGhlIHJ4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTIKICAqLwogc3RhdGljIGludCBhdGg1a19od19wcm9jXzUyMTJfcnhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCQkJCXN0cnVjdCBhdGg1a19kZXNjICpkZXNjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCmluZGV4IGI2NTYxZjcuLmVmYjY3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKQEAgLTEwODAsNyArMTA4MCw3IEBACiAgKgogICogVG8gcmVjcmVhdGUgdGhlIGN1cnZlcyB3ZSByZWFkIGhlcmUgdGhlIHBvaW50cyBhbmQgaW50ZXJwb2xhdGUKICAqIGxhdGVyLiBOb3RlIHRoYXQgaW4gbW9zdCBjYXNlcyBvbmx5IDIgKGhpZ2hlciBhbmQgbG93ZXIpIGN1cnZlcyBhcmUKLSAqIHVzZWQgKGxpa2UgUkY1MTEyKSBidXQgdmVuZG9ycyBoYXZlIHRoZSBvcG9ydHVuaXR5IHRvIGluY2x1ZGUgYWxsCisgKiB1c2VkIChsaWtlIFJGNTExMikgYnV0IHZlbmRvcnMgaGF2ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaW5jbHVkZSBhbGwKICAqIDQgY3VydmVzIG9uIGVlcHJvbS4gVGhlIGZpbmFsIGN1cnZlIChoaWdoZXIgcG93ZXIpIGhhcyBhbiBleHRyYQogICogcG9pbnQgZm9yIGJldHRlciBhY2N1cmFjeSBsaWtlIFJGNTExMi4KICAqLwpAQCAtMTMwMiw3ICsxMzAyLDcgQEAKIAkJCS8qCiAJCQkgKiBQZCBnYWluIDAgaXMgbm90IHRoZSBsYXN0IHBkIGdhaW4KIAkJCSAqIHNvIGl0IG9ubHkgaGFzIDIgcGQgcG9pbnRzLgotCQkJICogQ29udGludWUgd2loIHBkIGdhaW4gMS4KKwkJCSAqIENvbnRpbnVlIHdpdGggcGQgZ2FpbiAxLgogCQkJICovCiAJCQlwY2luZm8tPnB3cl9pWzFdID0gKHZhbCA+PiAxMCkgJiAweDFmOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGNpLmMKaW5kZXggNjY1OThhMC4uM2M0NDY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYwpAQCAtNTcsNyArNTcsNyBAQAogCSpjc3ogPSAoaW50KXU4dG1wOwogCiAJLyoKLQkgKiBUaGlzIGNoZWNrIHdhcyBwdXQgaW4gdG8gYXZvaWQgInVucGxlc2FudCIgY29uc2VxdWVuY2VzIGlmCisJICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZWFzYW50IiBjb25zZXF1ZW5jZXMgaWYKIAkgKiB0aGUgYm9vdHJvbSBoYXMgbm90IGZ1bGx5IGluaXRpYWxpemVkIGFsbCBQQ0kgZGV2aWNlcy4KIAkgKiBTb21ldGltZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZSByZWdpc3RlciBpcyBub3Qgc2V0CiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKaW5kZXggYTcwMjgxNy4uZDliM2Y4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwpAQCAtNDcyLDcgKzQ3Miw3IEBACiAJfQogCiAJLyoKLQkgKiBUaGUgQVI1MjEwIHVzZXMgcHJvbWlzY291cyBtb2RlIHRvIGRldGVjdCByYWRhciBhY3Rpdml0eQorCSAqIFRoZSBBUjUyMTAgdXNlcyBwcm9taXNjdW91cyBtb2RlIHRvIGRldGVjdCByYWRhciBhY3Rpdml0eQogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCAmJgogCQkJKGZpbHRlciAmIEFSNUtfUlhfRklMVEVSX1JBREFSRVJSKSkgewpAQCAtNzA2LDggKzcwNiw4IEBACiAgKiBUaGUgbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiBhcmlzZXMgZnJvbSB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgNCBzZXBhcmF0ZQogICogSFcgdGltZXIgcmVnaXN0ZXJzIChUSU1FUjAgLSBUSU1FUjMpLCB3aGljaCBhcmUgY2xvc2VseSByZWxhdGVkIHRvIHRoZQogICogbmV4dCBiZWFjb24gdGFyZ2V0IHRpbWUgKE5CVFQpLCBhbmQgdGhhdCB0aGUgSFcgdXBkYXRlcyB0aGVzZSB0aW1lcnMKLSAqIHNlcGVyYXRlbHkgYmFzZWQgb24gdGhlIGN1cnJlbnQgVFNGIHZhbHVlLiBUaGUgaGFyZHdhcmUgaW5jcmVtZW50cyBlYWNoCi0gKiB0aW1lciBieSB0aGUgYmVhY29uIGludGVydmFsLCB3aGVuIHRoZSBsb2NhbCBUU0YgY292ZXJ0ZWQgdG8gVFUgaXMgZXF1YWwKKyAqIHNlcGFyYXRlbHkgYmFzZWQgb24gdGhlIGN1cnJlbnQgVFNGIHZhbHVlLiBUaGUgaGFyZHdhcmUgaW5jcmVtZW50cyBlYWNoCisgKiB0aW1lciBieSB0aGUgYmVhY29uIGludGVydmFsLCB3aGVuIHRoZSBsb2NhbCBUU0YgY29udmVydGVkIHRvIFRVIGlzIGVxdWFsCiAgKiB0byB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSB0aW1lci4KICAqCiAgKiBUaGUgcmVjZXB0aW9uIG9mIGEgYmVhY29uIHdpdGggdGhlIHNhbWUgQlNTSUQgY2FuIHVwZGF0ZSB0aGUgbG9jYWwgSFcgVFNGCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKaW5kZXggNjJjZTJmNC4uNTU0NDE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYwpAQCAtMzM1LDExICszMzUsMTEgQEAKICAqIGh0dHA6Ly9tYWR3aWZpLXByb2plY3Qub3JnL3RpY2tldC8xNjU5CiAgKiB3aXRoIHZhcmlvdXMgbWVhc3VyZW1lbnRzIGFuZCBkaWFncmFtcwogICoKLSAqIFRPRE86IERlYWwgd2l0aCBwb3dlciBkcm9wcyBkdWUgdG8gcHJvYmVzIGJ5IHNldHRpbmcgYW4gYXByb3ByaWF0ZQorICogVE9ETzogRGVhbCB3aXRoIHBvd2VyIGRyb3BzIGR1ZSB0byBwcm9iZXMgYnkgc2V0dGluZyBhbiBhcHByb3ByaWF0ZQogICogdHggcG93ZXIgb24gdGhlIHByb2JlIHBhY2tldHMgISBNYWtlIHRoaXMgcGFydCBvZiB0aGUgY2FsaWJyYXRpb24gcHJvY2Vzcy4KICAqLwogCi0vKiBJbml0aWFsaXplIGFoX2dhaW4gZHVycmluZyBhdHRhY2ggKi8KKy8qIEluaXRpYWxpemUgYWhfZ2FpbiBkdXJpbmcgYXR0YWNoICovCiBpbnQgYXRoNWtfaHdfcmZnYWluX29wdF9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CiAJLyogSW5pdGlhbGl6ZSB0aGUgZ2FpbiBvcHRpbWl6YXRpb24gdmFsdWVzICovCkBAIC0xMDQ5LDcgKzEwNDksNyBAQAogXCoqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29udmVydGlvbiBuZWVkZWQgZm9yIFJGNTExMAorICogQ29udmVyc2lvbiBuZWVkZWQgZm9yIFJGNTExMAogICovCiBzdGF0aWMgdTMyIGF0aDVrX2h3X3JmNTExMF9jaGFuMmF0aGNoYW4oc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQogewpAQCAtMTA4OCw3ICsxMDg4LDcgQEAKIH0KIAogLyoKLSAqIENvbnZlcnRpb24gbmVlZGVkIGZvciA1MTExCisgKiBDb252ZXJzaW9uIG5lZWRlZCBmb3IgNTExMQogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExMV9jaGFuMmF0aGNoYW4odW5zaWduZWQgaW50IGllZWUsCiAJCXN0cnVjdCBhdGg1a19hdGhjaGFuXzJnaHogKmF0aGNoYW4pCkBAIC0yMjAxLDcgKzIyMDEsNyBAQAogLyoKICAqIEdldCB0aGUgc3Vycm91bmRpbmcgcGVyLWNoYW5uZWwgcG93ZXIgY2FsaWJyYXRpb24gcGllcnMKICAqIGZvciBhIGdpdmVuIGZyZXF1ZW5jeSBzbyB0aGF0IHdlIGNhbiBpbnRlcnBvbGF0ZSBiZXR3ZWVuCi0gKiB0aGVtIGFuZCBjb21lIHVwIHdpdGggYW4gYXByb3ByaWF0ZSBkYXRhc2V0IGZvciBvdXIgY3VycmVudAorICogdGhlbSBhbmQgY29tZSB1cCB3aXRoIGFuIGFwcHJvcHJpYXRlIGRhdGFzZXQgZm9yIG91ciBjdXJyZW50CiAgKiBjaGFubmVsLgogICovCiBzdGF0aWMgdm9pZApAQCAtMjYxOCw3ICsyNjE4LDcgQEAKIC8qCiAgKiBTZXQgdGhlIGdhaW4gYm91bmRhcmllcyBhbmQgY3JlYXRlIGZpbmFsIFBvd2VyIHRvIFBEQURDIHRhYmxlCiAgKgotICogV2UgY2FuIGhhdmUgdXAgdG8gNCBwZCBjdXJ2ZXMsIHdlIG5lZWQgdG8gZG8gYSBzaW1taWxhciBwcm9jZXNzCisgKiBXZSBjYW4gaGF2ZSB1cCB0byA0IHBkIGN1cnZlcywgd2UgbmVlZCB0byBkbyBhIHNpbWlsYXIgcHJvY2VzcwogICogYXMgd2UgZG8gZm9yIFJGNTExMi4gVGhpcyB0aW1lIHdlIGRvbid0IGhhdmUgYW4gZWRnZV9mbGFnIGJ1dCB3ZQogICogc2V0IHRoZSBnYWluIGJvdW5kYXJpZXMgb24gYSBzZXBhcmF0ZSByZWdpc3Rlci4KICAqLwpAQCAtMjgyNiwxMyArMjgyNiwxMyBAQAogCXUzMiB0YXJnZXQgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKIAlpbnQgcGRnLCBpOwogCi0JLyogR2V0IHN1cm91bmRpbmcgZnJlcSBwaWVycyBmb3IgdGhpcyBjaGFubmVsICovCisJLyogR2V0IHN1cnJvdW5kaW5nIGZyZXEgcGllcnMgZm9yIHRoaXMgY2hhbm5lbCAqLwogCWF0aDVrX2dldF9jaGFuX3BjYWxfc3Vycm91bmRpbmdfcGllcnMoYWgsIGNoYW5uZWwsCiAJCQkJCQkmcGNpbmZvX0wsCiAJCQkJCQkmcGNpbmZvX1IpOwogCiAJLyogTG9vcCBvdmVyIHBkIGdhaW4gY3VydmVzIG9uCi0JICogc3Vyb3VuZGluZyBmcmVxIHBpZXJzIGJ5IGluZGV4ICovCisJICogc3Vycm91bmRpbmcgZnJlcSBwaWVycyBieSBpbmRleCAqLwogCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdOyBwZGcrKykgewogCiAJCS8qIEZpbGwgY3VydmVzIGluIHJldmVyc2Ugb3JkZXIKQEAgLTI5MjMsNyArMjkyMyw3IEBACiAJCX0KIAogCQkvKiBJbnRlcnBvbGF0ZSBiZXR3ZWVuIGN1cnZlcwotCQkgKiBvZiBzdXJvdW5kaW5nIGZyZXEgcGllcnMgdG8KKwkJICogb2Ygc3Vycm91bmRpbmcgZnJlcSBwaWVycyB0bwogCQkgKiBnZXQgdGhlIGZpbmFsIGN1cnZlIGZvciB0aGlzCiAJCSAqIHBkIGdhaW4uIFJlLXVzZSB0bXBMIGZvciBpbnRlcnBvbGF0aW9uCiAJCSAqIG91dHB1dCAqLwpAQCAtMjk0Nyw3ICsyOTQ3LDcgQEAKIAogCS8qIEZpbGwgbWluIGFuZCBtYXggcG93ZXIgbGV2ZWxzIGZvciB0aGlzCiAJICogY2hhbm5lbCBieSBpbnRlcnBvbGF0aW5nIHRoZSB2YWx1ZXMgb24KLQkgKiBzdXJvdW5kaW5nIGNoYW5uZWxzIHRvIGNvbXBsZXRlIHRoZSBkYXRhc2V0ICovCisJICogc3Vycm91bmRpbmcgY2hhbm5lbHMgdG8gY29tcGxldGUgdGhlIGRhdGFzZXQgKi8KIAlhaC0+YWhfdHhwb3dlci50eHBfbWluX3B3ciA9IGF0aDVrX2dldF9pbnRlcnBvbGF0ZWRfdmFsdWUodGFyZ2V0LAogCQkJCQkoczE2KSBwY2luZm9fTC0+ZnJlcSwKIAkJCQkJKHMxNikgcGNpbmZvX1ItPmZyZXEsCkBAIC0zMTc5LDcgKzMxNzksNyBAQAogCiAJLyogRklYTUU6IFRQQyBzY2FsZSByZWR1Y3Rpb24gKi8KIAotCS8qIEdldCBzdXJvdW5kaW5nIGNoYW5uZWxzIGZvciBwZXItcmF0ZSBwb3dlciB0YWJsZQorCS8qIEdldCBzdXJyb3VuZGluZyBjaGFubmVscyBmb3IgcGVyLXJhdGUgcG93ZXIgdGFibGUKIAkgKiBjYWxpYnJhdGlvbiAqLwogCWF0aDVrX2dldF9yYXRlX3BjYWxfZGF0YShhaCwgY2hhbm5lbCwgJnJhdGVfaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaAppbmRleCBlMWM5YWJkLi5kMTJiODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCkBAIC0xMzIsOCArMTMyLDggQEAKICAqIEFzIGkgY2FuIHNlZSBpbiBhcjVrX2FyNTIxMF90eF9zdGFydCBSZXlrIHVzZXMgc29tZSBvZiB0aGUgdmFsdWVzIG9mIEJDUgogICogZm9yIHRoaXMgcmVnaXN0ZXIsIHNvIGkgZ3Vlc3MgVFExVixUUTFGViBhbmQgQkRNQUUgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nCiAgKiBoZXJlIGFuZCBTTlAvU05BUCBtZWFucyAic25hcHNob3QiIChzbyB0aGlzIHJlZ2lzdGVyIGdldHMgc3luY2VkIHdpdGggQkNSKS4KLSAqIFNvIFNOQVBQRURCQ1JWQUxJRCBzb3VsZCBhbHNvIHN0YW5kIGZvciAic25hcHBlZCBCQ1IgLXZhbHVlcy0gdmFsaWQiLCBzbyBpCi0gKiByZW5hbWVkIGl0IHRvIFNOQVBTSE9UU1ZBTElEIHRvIG1ha2UgbW9yZSBzZW5zZS4gSSByZWFseSBoYXZlIG5vIGlkZWEgd2hhdAorICogU28gU05BUFBFREJDUlZBTElEIHNob3VsZCBhbHNvIHN0YW5kIGZvciAic25hcHBlZCBCQ1IgLXZhbHVlcy0gdmFsaWQiLCBzbyBpCisgKiByZW5hbWVkIGl0IHRvIFNOQVBTSE9UU1ZBTElEIHRvIG1ha2UgbW9yZSBzZW5zZS4gSSByZWFsbHkgaGF2ZSBubyBpZGVhIHdoYXQKICAqIGVsc2UgY2FuIGl0IGJlLiBJIGFsc28gcmVuYW1lZCBTTlBCQ01EIHRvIFNOUEFESE9DIHRvIG1hdGNoIEJDUi4KICAqLwogI2RlZmluZSBBUjVLX0JTUgkJMHgwMDJjCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwpAQCAtMjgzLDcgKzI4Myw3IEBACiAgKi8KICNkZWZpbmUgQVI1S19JU1IJCTB4MDAxYwkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgWzUyMTBdICovCiAjZGVmaW5lIEFSNUtfUElTUgkJMHgwMDgwCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyBbNTIxMStdICovCi0jZGVmaW5lIEFSNUtfSVNSX1JYT0sJCTB4MDAwMDAwMDEJLyogRnJhbWUgc3VjY2Vzc2Z1bHkgcmVjaWV2ZWQgKi8KKyNkZWZpbmUgQVI1S19JU1JfUlhPSwkJMHgwMDAwMDAwMQkvKiBGcmFtZSBzdWNjZXNzZnVseSByZWNlaXZlZCAqLwogI2RlZmluZSBBUjVLX0lTUl9SWERFU0MJCTB4MDAwMDAwMDIJLyogUlggZGVzY3JpcHRvciByZXF1ZXN0ICovCiAjZGVmaW5lIEFSNUtfSVNSX1JYRVJSCQkweDAwMDAwMDA0CS8qIFJlY2VpdmUgZXJyb3IgKi8KICNkZWZpbmUgQVI1S19JU1JfUlhOT0ZSTQkweDAwMDAwMDA4CS8qIE5vIGZyYW1lIHJlY2VpdmVkIChyZWNlaXZlIHRpbWVvdXQpICovCkBAIC0zNzIsMTIgKzM3MiwxMiBAQAogLyoKICAqIEludGVycnVwdCBNYXNrIFJlZ2lzdGVycwogICoKLSAqIEFzIHdoaXRoIElTUnMgNTIxMCBoYXMgb25lIElNUiAoQVI1S19JTVIpIGFuZCA1MjExLzUyMTIgaGFzIG9uZSBwcmltYXJ5CisgKiBBcyB3aXRoIElTUnMgNTIxMCBoYXMgb25lIElNUiAoQVI1S19JTVIpIGFuZCA1MjExLzUyMTIgaGFzIG9uZSBwcmltYXJ5CiAgKiAoQVI1S19QSU1SKSBhbmQgNCBzZWNvbmRhcnkgSU1ScyAoQVI1S19TSU1SeCkuIE5vdGUgdGhhdCBJU1IvSU1SIGZsYWdzIG1hdGNoLgogICovCiAjZGVmaW5lCUFSNUtfSU1SCQkweDAwMjAJCQkvKiBSZWdpc3RlciBBZGRyZXNzIFs1MjEwXSAqLwogI2RlZmluZSBBUjVLX1BJTVIJCTB4MDBhMAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgWzUyMTErXSAqLwotI2RlZmluZSBBUjVLX0lNUl9SWE9LCQkweDAwMDAwMDAxCS8qIEZyYW1lIHN1Y2Nlc3NmdWx5IHJlY2lldmVkKi8KKyNkZWZpbmUgQVI1S19JTVJfUlhPSwkJMHgwMDAwMDAwMQkvKiBGcmFtZSBzdWNjZXNzZnVseSByZWNlaXZlZCovCiAjZGVmaW5lIEFSNUtfSU1SX1JYREVTQwkJMHgwMDAwMDAwMgkvKiBSWCBkZXNjcmlwdG9yIHJlcXVlc3QqLwogI2RlZmluZSBBUjVLX0lNUl9SWEVSUgkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIGVycm9yKi8KICNkZWZpbmUgQVI1S19JTVJfUlhOT0ZSTQkweDAwMDAwMDA4CS8qIE5vIGZyYW1lIHJlY2VpdmVkIChyZWNlaXZlIHRpbWVvdXQpKi8KQEAgLTg5NSw3ICs4OTUsNyBAQAogI2RlZmluZSBBUjVLX1BDSUNGR19TTF9JTlRFTgkJMHgwMDAwMDgwMAkvKiBFbmFibGUgaW50ZXJydXB0cyB3aGVuIGFzbGVlcCAqLwogI2RlZmluZSBBUjVLX1BDSUNGR19MRURfQkNUTAkJMHgwMDAwMTAwMAkvKiBMZWQgYmxpbmsgKD8pIFs1MjEwXSAqLwogI2RlZmluZSBBUjVLX1BDSUNGR19SRVRSWV9GSVgJCTB4MDAwMDEwMDAJLyogRW5hYmxlIHBjaSBjb3JlIHJldHJ5IGZpeCAqLwotI2RlZmluZSBBUjVLX1BDSUNGR19TTF9JTlBFTgkJMHgwMDAwMjAwMAkvKiBTbGVlcCBldmVuIHdoaXRoIHBlbmRpbmcgaW50ZXJydXB0cyovCisjZGVmaW5lIEFSNUtfUENJQ0ZHX1NMX0lOUEVOCQkweDAwMDAyMDAwCS8qIFNsZWVwIGV2ZW4gd2l0aCBwZW5kaW5nIGludGVycnVwdHMqLwogI2RlZmluZSBBUjVLX1BDSUNGR19TUFdSX0ROCQkweDAwMDEwMDAwCS8qIE1hc2sgZm9yIHBvd2VyIHN0YXR1cyAqLwogI2RlZmluZSBBUjVLX1BDSUNGR19MRURNT0RFCQkweDAwMGUwMDAwCS8qIExlZG1vZGUgWzUyMTErXSAqLwogI2RlZmluZSBBUjVLX1BDSUNGR19MRURNT0RFX1BST1AJMHgwMDAwMDAwMAkvKiBCbGluayBvbiBzdGFuZGFyZCB0cmFmZmljIFs1MjExK10gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jCmluZGV4IGZmY2Y0NGEuLjEwNmMwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAKIC8qKgogICogYXI1MDA4X2h3X3NldF9jaGFubmVsIC0gdHVuZSB0byBhIGNoYW5uZWwgb24gdGhlIGV4dGVybmFsIEFSMjEzMy9BUjUxMzMgcmFkaW9zCi0gKiBAYWg6IGF0aGVyb3MgaGFyZHdhcmUgc3R1Y3R1cmUKKyAqIEBhaDogYXRoZXJvcyBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqIEBjaGFuOgogICoKICAqIEZvciB0aGUgZXh0ZXJuYWwgQVIyMTMzL0FSNTEzMyByYWRpb3MsIHRha2VzIHRoZSBNSHogY2hhbm5lbCB2YWx1ZSBhbmQgc2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwppbmRleCA0YTkyNzE4Li42ZWFkZjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKQEAgLTMyNDAsNyArMzI0MCw3IEBACiAJCQllZXAgPSBhcjkwMDNfZWVwcm9tX3N0cnVjdF9maW5kX2J5X2lkKHJlZmVyZW5jZSk7CiAJCQlpZiAoZWVwID09IE5VTEwpIHsKIAkJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJCSJjYW50IGZpbmQgcmVmZXJlbmNlIGVlcHJvbSBzdHJ1Y3QgJWRcbiIsCisJCQkJCSJjYW4ndCBmaW5kIHJlZmVyZW5jZSBlZXByb20gc3RydWN0ICVkXG4iLAogCQkJCQlyZWZlcmVuY2UpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCmluZGV4IGYxYjhhZjYuLjJkMTAyMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAl9CiAKIAlyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LT5odGNfaGFuZGxlLAotCQkJCSZoaWZfZGV2LT51ZGV2LT5kZXYsIGhpZl9kZXYtPmRldmljZV9pZCwKKwkJCQkmaW50ZXJmYWNlLT5kZXYsIGhpZl9kZXYtPmRldmljZV9pZCwKIAkJCQloaWZfZGV2LT51ZGV2LT5wcm9kdWN0LCBpZC0+ZHJpdmVyX2luZm8pOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTExNTgsNyArMTE1OCw3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aDlrX2hpZl91c2JfZHJpdmVyID0gewotCS5uYW1lID0gImF0aDlrX2hpZl91c2IiLAorCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCiAJLnByb2JlID0gYXRoOWtfaGlmX3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGF0aDlrX2hpZl91c2JfZGlzY29ubmVjdCwKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jCmluZGV4IGM0MWFiOGMuLjYyZTEzOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAgKiBIVEMgTWVzc2FnZXMgYXJlIGhhbmRsZWQgZGlyZWN0bHkgaGVyZSBhbmQgdGhlIG9idGFpbmVkIFNLQgogICogaXMgZnJlZWQuCiAgKgotICogU2V2aWNlIG1lc3NhZ2VzIChEYXRhLCBXTUkpIHBhc3NlZCB0byB0aGUgY29ycmVzcG9uZGluZworICogU2VydmljZSBtZXNzYWdlcyAoRGF0YSwgV01JKSBwYXNzZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKICAqIGVuZHBvaW50IFJYIGhhbmRsZXJzLCB3aGljaCBoYXZlIHRvIGZyZWUgdGhlIFNLQi4KICAqLwogdm9pZCBhdGg5a19odGNfcnhfbXNnKHN0cnVjdCBodGNfdGFyZ2V0ICpodGNfaGFuZGxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAzMzhiMDc1Li5jOTViYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMTI1NCwxNSArMTI1NCw2IEBACiAJYWgtPnR4Y2hhaW5tYXNrID0gY29tbW9uLT50eF9jaGFpbm1hc2s7CiAJYWgtPnJ4Y2hhaW5tYXNrID0gY29tbW9uLT5yeF9jaGFpbm1hc2s7CiAKLQlpZiAoKGNvbW1vbi0+YnVzX29wcy0+YXRoX2J1c190eXBlICE9IEFUSF9VU0IpICYmICFhaC0+Y2hpcF9mdWxsc2xlZXApIHsKLQkJYXRoOWtfaHdfYWJvcnRwY3VyZWN2KGFoKTsKLQkJaWYgKCFhdGg5a19od19zdG9wZG1hcmVjdihhaCkpIHsKLQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkJIkZhaWxlZCB0byBzdG9wIHJlY2VpdmUgZG1hXG4iKTsKLQkJCWJDaGFubmVsQ2hhbmdlID0gZmFsc2U7Ci0JCX0KLQl9Ci0KIAlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpCiAJCXJldHVybiAtRUlPOwogCkBAIC0yNTQ2LDYgKzI1MzcsNyBAQAogCXsgQVJfU1JFVl9WRVJTSU9OXzkyODcsICAgICAgICAgIjkyODciIH0sCiAJeyBBUl9TUkVWX1ZFUlNJT05fOTI3MSwgICAgICAgICAiOTI3MSIgfSwKIAl7IEFSX1NSRVZfVkVSU0lPTl85MzAwLCAgICAgICAgICI5MzAwIiB9LAorCXsgQVJfU1JFVl9WRVJTSU9OXzk0ODUsICAgICAgICAgIjk0ODUiIH0sCiB9OwogCiAvKiBGb3IgZGV2aWNlcyB3aXRoIGV4dGVybmFsIHJhZGlvcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCmluZGV4IDU2MjI1N2EuLmVkYzFjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKQEAgLTc1MSwyOCArNzUxLDQ3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2Fib3J0cGN1cmVjdik7CiAKLWJvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCitib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sICpyZXNldCkKIHsKICNkZWZpbmUgQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAxMDAwMCAgIC8qIHVzZWMgKi8KICNkZWZpbmUgQUhfUlhfVElNRV9RVUFOVFVNICAgICAxMDAgICAgIC8qIHVzZWMgKi8KIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwl1MzIgbWFjX3N0YXR1cywgbGFzdF9tYWNfc3RhdHVzID0gMDsKIAlpbnQgaTsKIAorCS8qIEVuYWJsZSBhY2Nlc3MgdG8gdGhlIERNQSBvYnNlcnZhdGlvbiBidXMgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX01BQ01JU0MsCisJCSAgKChBUl9NQUNNSVNDX0RNQV9PQlNfTElORV84IDw8IEFSX01BQ01JU0NfRE1BX09CU19TKSB8CisJCSAgIChBUl9NQUNNSVNDX01JU0NfT0JTX0JVU18xIDw8CisJCSAgICBBUl9NQUNNSVNDX01JU0NfT0JTX0JVU19NU0JfUykpKTsKKwogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRCk7CiAKIAkvKiBXYWl0IGZvciByeCBlbmFibGUgYml0IHRvIGdvIGxvdyAqLwogCWZvciAoaSA9IEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgLyBBSF9USU1FX1FVQU5UVU07IGkgIT0gMDsgaS0tKSB7CiAJCWlmICgoUkVHX1JFQUQoYWgsIEFSX0NSKSAmIEFSX0NSX1JYRSkgPT0gMCkKIAkJCWJyZWFrOworCisJCWlmICghQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgeworCQkJbWFjX3N0YXR1cyA9IFJFR19SRUFEKGFoLCBBUl9ETUFEQkdfNykgJiAweDdmMDsKKwkJCWlmIChtYWNfc3RhdHVzID09IDB4MWMwICYmIG1hY19zdGF0dXMgPT0gbGFzdF9tYWNfc3RhdHVzKSB7CisJCQkJKnJlc2V0ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbGFzdF9tYWNfc3RhdHVzID0gbWFjX3N0YXR1czsKKwkJfQorCiAJCXVkZWxheShBSF9USU1FX1FVQU5UVU0pOwogCX0KIAogCWlmIChpID09IDApIHsKIAkJYXRoX2Vycihjb21tb24sCi0JCQkiRE1BIGZhaWxlZCB0byBzdG9wIGluICVkIG1zIEFSX0NSPTB4JTA4eCBBUl9ESUFHX1NXPTB4JTA4eFxuIiwKKwkJCSJETUEgZmFpbGVkIHRvIHN0b3AgaW4gJWQgbXMgQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4IERNQURCR183PTB4JTA4eFxuIiwKIAkJCUFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgLyAxMDAwLAogCQkJUkVHX1JFQUQoYWgsIEFSX0NSKSwKLQkJCVJFR19SRUFEKGFoLCBBUl9ESUFHX1NXKSk7CisJCQlSRUdfUkVBRChhaCwgQVJfRElBR19TVyksCisJCQlSRUdfUkVBRChhaCwgQVJfRE1BREJHXzcpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCmluZGV4IGIyYjJmZjguLmMyYTU5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKQEAgLTY5NSw3ICs2OTUsNyBAQAogdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApOwogdm9pZCBhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgaXNfc2Nhbm5pbmcpOwogdm9pZCBhdGg5a19od19hYm9ydHBjdXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOwotYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sICpyZXNldCk7CiBpbnQgYXRoOWtfaHdfYmVhY29ucV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCk7CiAKIC8qIEludGVycnVwdCBIYW5kbGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggNTI0ODI1Ny4uMTQ4MmZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC0xMDQ4LDYgKzEwNDgsOCBAQAogCQkiU3RhcnRpbmcgZHJpdmVyIHdpdGggaW5pdGlhbCBjaGFubmVsOiAlZCBNSHpcbiIsCiAJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CisKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJLyogc2V0dXAgaW5pdGlhbCBjaGFubmVsICovCkBAIC0xMTQzLDYgKzExNDUsOCBAQAogbXV0ZXhfdW5sb2NrOgogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAorCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTEzNzIsNyArMTM3Niw2IEBACiAKIAlhdGg5a19jYWxjdWxhdGVfaXRlcl9kYXRhKGh3LCB2aWYsICZpdGVyX2RhdGEpOwogCi0JYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAkvKiBTZXQgQlNTSUQgbWFzay4gKi8KIAltZW1jcHkoY29tbW9uLT5ic3NpZG1hc2ssIGl0ZXJfZGF0YS5tYXNrLCBFVEhfQUxFTik7CiAJYXRoX2h3X3NldGJzc2lkbWFzayhjb21tb24pOwpAQCAtMTQwNyw3ICsxNDEwLDYgQEAKIAl9CiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKLQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogCS8qIFNldCB1cCBBTkkgKi8KIAlpZiAoKGl0ZXJfZGF0YS5uYXBzICsgaXRlcl9kYXRhLm5hZGhvY3MpID4gMCkgewpAQCAtMTQ1Myw2ICsxNDU1LDcgQEAKIAlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCWludCByZXQgPSAwOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKQEAgLTE0OTksNiArMTUwMiw3IEBACiAJYXRoOWtfZG9fdmlmX2FkZF9zZXR1cChodywgdmlmKTsKIG91dDoKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTUxMyw2ICsxNTE3LDcgQEAKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkNoYW5nZSBJbnRlcmZhY2VcbiIpOwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAogCS8qIFNlZSBpZiBuZXcgaW50ZXJmYWNlIHR5cGUgaXMgdmFsaWQuICovCiAJaWYgKChuZXdfdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKQEAgLTE1NDIsNiArMTU0Nyw3IEBACiAKIAlhdGg5a19kb192aWZfYWRkX3NldHVwKGh3LCB2aWYpOwogb3V0OgorCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU1NCw2ICsxNTYwLDcgQEAKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBJbnRlcmZhY2VcbiIpOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJc2MtPm52aWZzLS07CkBAIC0xNTY1LDYgKzE1NzIsNyBAQAogCWF0aDlrX2NhbGN1bGF0ZV9zdW1tYXJ5X3N0YXRlKGh3LCBOVUxMKTsKIAogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfZW5hYmxlX3BzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQpAQCAtMTgwNSw2ICsxODEzLDcgQEAKIAogCXR4cSA9IHNjLT50eC50eHFfbWFwW3F1ZXVlXTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAogCW1lbXNldCgmcWksIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbykpOwpAQCAtMTgyOCw2ICsxODM3LDcgQEAKIAkJCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTg5MCw2ICsxOTAwLDcgQEAKIAlpbnQgc2xvdHRpbWU7CiAJaW50IGVycm9yOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgewpAQCAtMTk5MCw2ICsyMDAxLDcgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiB9CiAKIHN0YXRpYyB1NjQgYXRoOWtfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTIxMjksNiArMjE0MSw4IEBACiBzdGF0aWMgdm9pZCBhdGg5a19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJaW50IHRpbWVvdXQgPSAyMDA7IC8qIG1zICovCiAJaW50IGksIGo7CiAKQEAgLTIxMzcsNiArMjE1MSwxMiBAQAogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+dHhfY29tcGxldGVfd29yayk7CiAKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoZHJvcCkKIAkJdGltZW91dCA9IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYwppbmRleCBlODMxMjhjLi45YzY1NDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCkBAIC00NCw3ICs0NCw3IEBACiAJKmNzeiA9IChpbnQpdTh0bXA7CiAKIAkvKgotCSAqIFRoaXMgY2hlY2sgd2FzIHB1dCBpbiB0byBhdm9pZCAidW5wbGVzYW50IiBjb25zZXF1ZW5jZXMgaWYKKwkgKiBUaGlzIGNoZWNrIHdhcyBwdXQgaW4gdG8gYXZvaWQgInVucGxlYXNhbnQiIGNvbnNlcXVlbmNlcyBpZgogCSAqIHRoZSBib290cm9tIGhhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgYWxsIFBDSSBkZXZpY2VzLgogCSAqIFNvbWV0aW1lcyB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIG5vdCBzZXQKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKaW5kZXggYTMyNDFjZC4uNGMwZDM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKQEAgLTc5Miw3ICs3OTIsNyBAQAogCiAJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFOwogCX0gZWxzZSB7Ci0JCS8qIFNldCB0aGUgY2hvb3NlbiByYXRlLiBObyBSVFMgZm9yIGZpcnN0IHNlcmllcyBlbnRyeS4gKi8KKwkJLyogU2V0IHRoZSBjaG9zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2krK10sIHR4cmMsCiAJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgcml4LCAwKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCBhOWMzZjQ2Li5iMjljODBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKQEAgLTQ4NiwxMiArNDg2LDEyIEBACiBib29sIGF0aF9zdG9wcmVjdihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQlib29sIHN0b3BwZWQ7CisJYm9vbCBzdG9wcGVkLCByZXNldCA9IGZhbHNlOwogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+cngucnhidWZsb2NrKTsKIAlhdGg5a19od19hYm9ydHBjdXJlY3YoYWgpOwogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCAwKTsKLQlzdG9wcGVkID0gYXRoOWtfaHdfc3RvcGRtYXJlY3YoYWgpOworCXN0b3BwZWQgPSBhdGg5a19od19zdG9wZG1hcmVjdihhaCwgJnJlc2V0KTsKIAogCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FRE1BKQogCQlhdGhfZWRtYV9zdG9wX3JlY3Yoc2MpOwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJCQkiY29uZnVzaW5nIHRoZSBETUEgZW5naW5lIHdoZW4gd2Ugc3RhcnQgUlggdXBcbiIpOwogCQlBVEhfREJHX1dBUk5fT05fT05DRSghc3RvcHBlZCk7CiAJfQotCXJldHVybiBzdG9wcGVkOworCXJldHVybiBzdG9wcGVkICYmICFyZXNldDsKIH0KIAogdm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggMjY3MzRlNS4uODhmYTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC02MjgsOCArNjI4LDggQEAKIAkJCQkgKHUzMilBVEhfQU1QRFVfTElNSVRfTUFYKTsKIAogCS8qCi0JICogaC93IGNhbiBhY2NlcHQgYWdncmVnYXRlcyB1cHRvIDE2IGJpdCBsZW5ndGhzICg2NTUzNSkuCi0JICogVGhlIElFLCBob3dldmVyIGNhbiBob2xkIHVwdG8gNjU1MzYsIHdoaWNoIHNob3dzIHVwIGhlcmUKKwkgKiBoL3cgY2FuIGFjY2VwdCBhZ2dyZWdhdGVzIHVwIHRvIDE2IGJpdCBsZW5ndGhzICg2NTUzNSkuCisJICogVGhlIElFLCBob3dldmVyIGNhbiBob2xkIHVwIHRvIDY1NTM2LCB3aGljaCBzaG93cyB1cCBoZXJlCiAJICogYXMgemVyby4gSWdub3JlIDY1NTM2IHNpbmNlIHdlICBhcmUgY29uc3RyYWluZWQgYnkgaHcuCiAJICovCiAJaWYgKHRpZC0+YW4tPm1heGFtcGR1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL2Nhcmw5MTcwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaAppbmRleCBjNmE1ZmFlLi4zZDRlZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaApAQCAtMTYxLDcgKzE2MSw3IEBACiAgKiBOYXR1cmFsbHk6IFRoZSBoaWdoZXIgdGhlIGxpbWl0LCB0aGUgZmFzdGVyIHRoZSBkZXZpY2UgQ0FOIHNlbmQuCiAgKiBIb3dldmVyLCBldmVuIGEgc2xpZ2h0IG92ZXItY29tbWl0bWVudCBhdCB0aGUgd3JvbmcgdGltZSBhbmQgdGhlCiAgKiBoYXJkd2FyZSBpcyBkb29tZWQgdG8gc2VuZCBhbGwgYWxyZWFkeS1xdWV1ZWQgZnJhbWVzIGF0IHN1Ym9wdGltYWwKLSAqIHJhdGVzLiBUaGlzIGluIHR1cm4gbGVhZHMgdG8gYW4gZW5vdXJtb3VzIGFtb3VudCBvZiB1bnN1Y2Nlc3NmdWwKKyAqIHJhdGVzLiBUaGlzIGluIHR1cm4gbGVhZHMgdG8gYW4gZW5vcm1vdXMgYW1vdW50IG9mIHVuc3VjY2Vzc2Z1bAogICogcmV0cmllcyA9PiBMYXRlbmN5IGdvZXMgdXAsIHdoZXJlYXMgdGhlIHRocm91Z2hwdXQgZ29lcyBkb3duLiBDUkFTSCEKICAqLwogI2RlZmluZSBDQVJMOTE3MF9OVU1fVFhfTElNSVRfSEFSRAkoKEFSOTE3MF9UWFFfREVQVEggKiAzKSAvIDIpCkBAIC00NDMsNiArNDQzLDcgQEAKIAl1OCBhbXBkdV9sZW47CiAJdTggYW1wZHVfYWNrX2xlbjsKIAlib29sIGNsZWFyOworCWJvb2wgcmVxOwogfTsKIAogc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jCmluZGV4IGVkZTNkN2UuLjg5ZmU2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL21haW4uYwpAQCAtMTM1NSw2ICsxMzU1LDcgQEAKIAkJdGlkX2luZm8gPSByY3VfZGVyZWZlcmVuY2Uoc3RhX2luZm8tPmFnZ1t0aWRdKTsKIAogCQlzdGFfaW5mby0+c3RhdHNbdGlkXS5jbGVhciA9IHRydWU7CisJCXN0YV9pbmZvLT5zdGF0c1t0aWRdLnJlcSA9IGZhbHNlOwogCiAJCWlmICh0aWRfaW5mbykgewogCQkJYml0bWFwX3plcm8odGlkX2luZm8tPmJpdG1hcCwgQ0FSTDkxNzBfQkFXX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3BoeS5jCmluZGV4IGI2YjBkZTYuLmI2YWUwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcGh5LmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogCiAvKgogICogaW5pdGlhbGl6ZSBzb21lIHBoeSByZWdzIGZyb20gZWVwcm9tIHZhbHVlcyBpbiBtb2RhbF9oZWFkZXJbXQotICogYWNjLiB0byBiYW5kIGFuZCBiYW5kd2l0aAorICogYWNjLiB0byBiYW5kIGFuZCBiYW5kd2lkdGgKICAqLwogc3RhdGljIGludCBjYXJsOTE3MF9pbml0X3BoeV9mcm9tX2VlcHJvbShzdHJ1Y3QgYXI5MTcwICphciwKIAkJCQlib29sIGlzXzJnaHosIGJvb2wgaXNfNDBtaHopCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCmluZGV4IDg0ODY2YTQuLmVjMjFlYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCkBAIC04NDksNyArODQ5LDcgQEAKIAkJCQkvKgogCQkJCSAqIG5lc3RlZCBjYXJsOTE3MF9yeF9zdHJlYW0gY2FsbCEKIAkJCQkgKgotCQkJCSAqIHRlcm1pbmF0aW9uIGlzIGd1cmFudGVlZCwgZXZlbiB3aGVuIHRoZQorCQkJCSAqIHRlcm1pbmF0aW9uIGlzIGd1YXJhbnRlZWQsIGV2ZW4gd2hlbiB0aGUKIAkJCQkgKiBjb21iaW5lZCBmcmFtZSBhbHNvIGhhdmUgYW4gZWxlbWVudCB3aXRoCiAJCQkJICogYSBiYWQgdGFnLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYwppbmRleCAwZWY3MGI2Li5jYjcwZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYwpAQCAtMzgzLDYgKzM4Myw3IEBACiAKIAlpZiAoc3RhX2luZm8tPnN0YXRzW3RpZF0uY2xlYXIpIHsKIAkJc3RhX2luZm8tPnN0YXRzW3RpZF0uY2xlYXIgPSBmYWxzZTsKKwkJc3RhX2luZm8tPnN0YXRzW3RpZF0ucmVxID0gZmFsc2U7CiAJCXN0YV9pbmZvLT5zdGF0c1t0aWRdLmFtcGR1X2xlbiA9IDA7CiAJCXN0YV9pbmZvLT5zdGF0c1t0aWRdLmFtcGR1X2Fja19sZW4gPSAwOwogCX0KQEAgLTM5MSwxMCArMzkyLDE2IEBACiAJaWYgKHR4aW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID09IDEpCiAJCXN0YV9pbmZvLT5zdGF0c1t0aWRdLmFtcGR1X2Fja19sZW4rKzsKIAorCWlmICghKHR4aW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spKQorCQlzdGFfaW5mby0+c3RhdHNbdGlkXS5yZXEgPSB0cnVlOworCiAJaWYgKHN1cGVyLT5mLm1hY19jb250cm9sICYgY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19JTU1fQkEpKSB7CiAJCXN1cGVyLT5zLnJpeCA9IHN0YV9pbmZvLT5zdGF0c1t0aWRdLmFtcGR1X2xlbjsKIAkJc3VwZXItPnMuY250ID0gc3RhX2luZm8tPnN0YXRzW3RpZF0uYW1wZHVfYWNrX2xlbjsKIAkJdHhpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsKKwkJaWYgKHN0YV9pbmZvLT5zdGF0c1t0aWRdLnJlcSkKKwkJCXR4aW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFVfTk9fQkFDSzsKKwogCQlzdGFfaW5mby0+c3RhdHNbdGlkXS5jbGVhciA9IHRydWU7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZ0aWRfaW5mby0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMKaW5kZXggZjgyYzQwMC4uMmZiNTNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYwpAQCAtNDMwLDcgKzQzMCw3IEBACiAJCQkgKiBUaGUgc3lzdGVtIGlzIHRvbyBzbG93IHRvIGNvcGUgd2l0aAogCQkJICogdGhlIGVub3Jtb3VzIHdvcmtsb2FkLiBXZSBoYXZlIHNpbXBseQogCQkJICogcnVuIG91dCBvZiBhY3RpdmUgcnggdXJicyBhbmQgdGhpcwotCQkJICogdW5mb3J0dW5hdGx5IGxlYWRzIHRvIGFuIHVucHJlZGljdGFibGUKKwkJCSAqIHVuZm9ydHVuYXRlbHkgbGVhZHMgdG8gYW4gdW5wcmVkaWN0YWJsZQogCQkJICogZGV2aWNlLgogCQkJICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2h3LmMKaW5kZXggMTgzYzI4Mi4uY2MxMWQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2h3LmMKQEAgLTg2LDcgKzg2LDcgQEAKICAqIElGUkFNRS0wMTogIDAxMTAKICAqCiAgKiBBbiBlYXN5IGV5ZS1pbnNwZWNpdG9uIG9mIHRoaXMgYWxyZWFkeSBzaG91bGQgdGVsbCB5b3UgdGhhdCB0aGlzIGZyYW1lCi0gKiB3aWxsIG5vdCBwYXNzIG91ciBjaGVjay4gVGhpcyBpcyBiZWFjdXNlIHRoZSBic3NpZF9tYXNrIHRlbGxzIHRoZQorICogd2lsbCBub3QgcGFzcyBvdXIgY2hlY2suIFRoaXMgaXMgYmVjYXVzZSB0aGUgYnNzaWRfbWFzayB0ZWxscyB0aGUKICAqIGhhcmR3YXJlIHRvIG9ubHkgbG9vayBhdCB0aGUgc2Vjb25kIGxlYXN0IHNpZ25pZmljYW50IGJpdCBhbmQgdGhlCiAgKiBjb21tb24gYml0IGFtb25nc3QgdGhlIE1BQyBhbmQgQlNTSURzIGlzIDAsIHRoaXMgZnJhbWUgaGFzIHRoZSAybmQgTFNCCiAgKiBhcyAxLCB3aGljaCBkb2VzIG5vdCBtYXRjaCAwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKaW5kZXggZjgyOGYyOS4uMGUxYjg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAl9CiAKIAkvKgotCSAqIElmIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNpZXZlZCBjaGVjayBpdHMgcnVsZSBmb3IgdGhpcworCSAqIElmIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNlaXZlZCBjaGVjayBpdHMgcnVsZSBmb3IgdGhpcwogCSAqIGNoYW5uZWwgZmlyc3QgYmVmb3JlIGVuYWJsaW5nIGFjdGl2ZSBzY2FuLiBUaGUgcGFzc2l2ZSBzY2FuCiAJICogd291bGQgaGF2ZSBiZWVuIGVuZm9yY2VkIGJ5IHRoZSBpbml0aWFsIHByb2Nlc3Npbmcgb2Ygb3VyCiAJICogY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluLgpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCXdpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0NVU1RPTV9SRUdVTEFUT1JZOwogCX0gZWxzZSB7CiAJCS8qCi0JCSAqIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbnNlIG9mIENSREEsCisJCSAqIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbmNlIG9mIENSREEsCiAJCSAqIGl0J3Mgb3VyIG93biBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4sIHNpbWlsYXIgdG8KIAkJICogY2ZnODAyMTEncyBidXQgd2UgZW5hYmxlIHBhc3NpdmUgc2Nhbm5pbmcuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2RfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaAppbmRleCAyNDhjNjcwLi41YzJjZmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaApAQCAtMTk1LDYgKzE5NSw3IEBACiAJe0FQTDlfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCiAKIAl7QVBMM19GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7QVBMN19GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKIAl7QVBMMV9FVFNJQywgQ1RMX0ZDQywgQ1RMX0VUU0l9LAogCXtBUEwyX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCiAJe0FQTDJfQVBMRCwgQ1RMX0ZDQywgTk9fQ1RMfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDQ2ZTM4MmUuLjM5YTExZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiB9OwogCiBzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSB7Ci0Jdm9pZCAqY2FyZDsgLyogQnVzIGRlcGVuZGVudCBzdHVjdHVyZSB2YXJpZXMgZm9yIFBDY2FyZCAqLworCXZvaWQgKmNhcmQ7IC8qIEJ1cyBkZXBlbmRlbnQgc3RydWN0dXJlIHZhcmllcyBmb3IgUENjYXJkICovCiAJaW50ICgqcHJlc2VudF9jYWxsYmFjaykodm9pZCAqKTsgLyogQW5kIGNhbGxiYWNrIHdoaWNoIHVzZXMgaXQgKi8KIAljaGFyIGZpcm13YXJlX2lkWzMyXTsKIAlBdG1lbEZXVHlwZSBmaXJtd2FyZV90eXBlOwpAQCAtMzg5NSw3ICszODk1LDcgQEAKIAogCSAgIFRoaXMgcm91dGluZSBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXNpbmcgc29tZQogCSAgIGhhcmR3YXJlLXNwZWNpZmljIGZpZWxkcyBpbiB0aGUgYXRtZWxfcHJpdmF0ZSBzdHJ1Y3R1cmUsCi0JICAgaW5jbHVkaW5nIGEgY29weSBvZiB0aGUgZmlybXdhcmUncyBob3N0aW5mbyBzdHVjdHVyZQorCSAgIGluY2x1ZGluZyBhIGNvcHkgb2YgdGhlIGZpcm13YXJlJ3MgaG9zdGluZm8gc3RydWN0dXJlCiAJICAgd2hpY2ggaXMgdGhlIHJvdXRlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGZpcm13YXJlIGRhdGFzdHJ1Y3R1cmVzLiAqLwogCiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKaW5kZXggYzk2ZTE5ZC4uMDUyNjM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCkBAIC05OSw3ICs5OSw3IEBACiB9CiAKIC8qIENhbGwtYmFjayBmdW5jdGlvbiB0byBpbnRlcnJvZ2F0ZSBQQ01DSUEtc3BlY2lmaWMgaW5mb3JtYXRpb24KLSAgIGFib3V0IHRoZSBjdXJyZW50IGV4aXN0YW5jZSBvZiB0aGUgY2FyZCAqLworICAgYWJvdXQgdGhlIGN1cnJlbnQgZXhpc3RlbmNlIG9mIHRoZSBjYXJkICovCiBzdGF0aWMgaW50IGNhcmRfcHJlc2VudCh2b2lkICphcmcpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilhcmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggYmQ0Y2I3NS4uMjI5ZjQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtNjQ4LDcgKzY0OCw3IEBACiAJY2hhciBlcnJvcnNbQjQzX05SX0ZXVFlQRVNdWzEyOF07CiAJLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgZmlybXdhcmUgbmFtZS4gKi8KIAljaGFyIGZ3bmFtZVs2NF07Ci0JLyogQSBmYXRhbCBlcnJvciBvY2N1cmVkIHdoaWxlIHJlcXVlc3RpbmcuIEZpcm13YXJlIHJlcWVzdAorCS8qIEEgZmF0YWwgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVxdWVzdGluZy4gRmlybXdhcmUgcmVxZXN0CiAJICogY2FuIG5vdCBjb250aW51ZSwgYXMgYW55IG90aGVyIHJlcWVzdCB3aWxsIGFsc28gZmFpbC4gKi8KIAlpbnQgZmF0YWxfZmFpbHVyZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggM2Q1NTY2ZS4uZmYwZjViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtMTUzNiw3ICsxNTM2LDcgQEAKIAkJZG1hYWRkciA9IG1ldGEtPmRtYWFkZHI7CiAJCWdvdG8gZHJvcF9yZWN5Y2xlX2J1ZmZlcjsKIAl9Ci0JaWYgKHVubGlrZWx5KGxlbiA+IHJpbmctPnJ4X2J1ZmZlcnNpemUpKSB7CisJaWYgKHVubGlrZWx5KGxlbiArIHJpbmctPmZyYW1lb2Zmc2V0ID4gcmluZy0+cnhfYnVmZmVyc2l6ZSkpIHsKIAkJLyogVGhlIGRhdGEgZGlkIG5vdCBmaXQgaW50byBvbmUgZGVzY3JpcHRvciBidWZmZXIKIAkJICogYW5kIGlzIHNwbGl0IG92ZXIgbXVsdGlwbGUgYnVmZmVycy4KIAkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhcyB3ZSB0cnkgdG8gYWxsb2NhdGUgYnVmZmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGEwMWMyMTAuLmU4YTgwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTE2Myw3ICsxNjMsNyBAQAogLyogRE1BIGVuZ2luZSB0dW5pbmcga25vYnMgKi8KICNkZWZpbmUgQjQzX1RYUklOR19TTE9UUwkJMjU2CiAjZGVmaW5lIEI0M19SWFJJTkdfU0xPVFMJCTY0Ci0jZGVmaW5lIEI0M19ETUEwX1JYX0JVRkZFUlNJWkUJCUlFRUU4MDIxMV9NQVhfRlJBTUVfTEVOCisjZGVmaW5lIEI0M19ETUEwX1JYX0JVRkZFUlNJWkUJCShCNDNfRE1BMF9SWF9GUkFNRU9GRlNFVCArIElFRUU4MDIxMV9NQVhfRlJBTUVfTEVOKQogCiAvKiBQb2ludGVyIHBvaXNvbiAqLwogI2RlZmluZSBCNDNfRE1BX1BUUl9QT0lTT04JCSgodm9pZCAqKUVSUl9QVFIoLUVOT01FTSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA1N2ViNWI2Li41YWY0MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTcyLDYgKzcyLDcgQEAKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTMuZnciKTsKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTQuZnciKTsKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTUuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTZfbWltby5mdyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGU1LmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTkuZnciKTsKIApAQCAtNDAxMCw3ICs0MDExLDcgQEAKIAliNDNfbWFjX2VuYWJsZShkZXYpOwogCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fR0VOX0lSUV9NQVNLLCBkZXYtPmlycV9tYXNrKTsKIAotCS8qIFN0YXJ0IG1haW50YWluYW5jZSB3b3JrICovCisJLyogU3RhcnQgbWFpbnRlbmFuY2Ugd29yayAqLwogCWI0M19wZXJpb2RpY190YXNrc19zZXR1cChkZXYpOwogCiAJYjQzX2xlZHNfaW5pdChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuaAppbmRleCA4NTY5ZmRkLi41NDEzYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuaApAQCAtMTY0LDcgKzE2NCw3IEBACiAJLyogQ3VycmVudCBJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbiBtb2RlICovCiAJaW50IGludGVyZm1vZGU7CiAJLyogU3RhY2sgb2Ygc2F2ZWQgdmFsdWVzIGZyb20gdGhlIEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIGNvZGUuCi0JICogRWFjaCB2YWx1ZSBpbiB0aGUgc3RhY2sgaXMgbGF5ZWQgb3V0IGFzIGZvbGxvd3M6CisJICogRWFjaCB2YWx1ZSBpbiB0aGUgc3RhY2sgaXMgbGFpZCBvdXQgYXMgZm9sbG93czoKIAkgKiBiaXQgMC0xMTogIG9mZnNldAogCSAqIGJpdCAxMi0xNTogcmVnaXN0ZXIgSUQKIAkgKiBiaXQgMTYtMzI6IHZhbHVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oCmluZGV4IDAwMWU4NDEuLmU3ODlhODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oCkBAIC03MDMsNyArNzAzLDcgQEAKICNkZWZpbmUgQjQzX05QSFlfQ0hBTl9FU1RIQU5HCQkJQjQzX1BIWV9OKDB4MjFEKSAvKiBDaGFubmVsIGVzdGltYXRlIGhhbmcgKi8KICNkZWZpbmUgQjQzX05QSFlfRklORVJYMl9DR0MJCQlCNDNfUEhZX04oMHgyMjEpIC8qIEZpbmUgUlggMiBjbG9jayBnYXRlIGNvbnRyb2wgKi8KICNkZWZpbmUgIEI0M19OUEhZX0ZJTkVSWDJfQ0dDX0RFQ0dDCQkweDAwMDggLyogRGVjb2RlIGdhdGVkIGNsb2NrcyAqLwotI2RlZmluZSBCNDNfTlBIWV9UWFBDVExfSU5JVAkJCUI0M19QSFlfTigweDIyMikgLyogVFggcG93ZXIgY29udHJvbGwgaW5pdCAqLworI2RlZmluZSBCNDNfTlBIWV9UWFBDVExfSU5JVAkJCUI0M19QSFlfTigweDIyMikgLyogVFggcG93ZXIgY29udHJvbCBpbml0ICovCiAjZGVmaW5lICBCNDNfTlBIWV9UWFBDVExfSU5JVF9QSURYSTEJCTB4MDBGRiAvKiBQb3dlciBpbmRleCBpbml0IDEgKi8KICNkZWZpbmUgIEI0M19OUEhZX1RYUENUTF9JTklUX1BJRFhJMV9TSElGVAkwCiAjZGVmaW5lIEI0M19OUEhZX1BBUERfRU4wCQkJQjQzX1BIWV9OKDB4Mjk3KSAvKiBQQVBEIEVuYWJsZTAgVEJEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvYjQzbGVnYWN5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvYjQzbGVnYWN5LmgKaW5kZXggYzgxYjJmNS4uMjM1ODNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2I0M2xlZ2FjeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9iNDNsZWdhY3kuaApAQCAtNDg4LDcgKzQ4OCw3IEBACiAJLyogQ3VycmVudCBJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbiBtb2RlICovCiAJaW50IGludGVyZm1vZGU7CiAJLyogU3RhY2sgb2Ygc2F2ZWQgdmFsdWVzIGZyb20gdGhlIEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIGNvZGUuCi0JICogRWFjaCB2YWx1ZSBpbiB0aGUgc3RhY2sgaXMgbGF5ZWQgb3V0IGFzIGZvbGxvd3M6CisJICogRWFjaCB2YWx1ZSBpbiB0aGUgc3RhY2sgaXMgbGFpZCBvdXQgYXMgZm9sbG93czoKIAkgKiBiaXQgMC0xMTogIG9mZnNldAogCSAqIGJpdCAxMi0xNTogcmVnaXN0ZXIgSUQKIAkgKiBiaXQgMTYtMzI6IHZhbHVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKaW5kZXggMThkNjNmNS4uM2QwNWRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwpAQCAtMjM1OSw3ICsyMzU5LDcgQEAKIH0KIAogCi0vKiBUcmFuc2xhdGUgb3VyIGxpc3Qgb2YgQWNjZXNzIFBvaW50cyAmIFN0YXRpb25zIHRvIGEgY2FyZCBpbmRlcGVuZGFudAorLyogVHJhbnNsYXRlIG91ciBsaXN0IG9mIEFjY2VzcyBQb2ludHMgJiBTdGF0aW9ucyB0byBhIGNhcmQgaW5kZXBlbmRlbnQKICAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQgLSBKZWFuIElJICovCiBpbnQgcHJpc20yX2FwX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmJ1ZmZlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaAppbmRleCA2NTVjZWViLi4zMzRlMmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCkBAIC0xMTQsNyArMTE0LDcgQEAKICAqIGhhcyBwYXNzZWQgc2luY2UgbGFzdCByZWNlaXZlZCBmcmFtZSBmcm9tIHRoZSBzdGF0aW9uLCBhIG51bGxmdW5jIGRhdGEKICAqIGZyYW1lIGlzIHNlbnQgdG8gdGhlIHN0YXRpb24uIElmIHRoaXMgZnJhbWUgaXMgbm90IGFja25vd2xlZGdlZCBhbmQgbm8gb3RoZXIKICAqIGZyYW1lcyBoYXZlIGJlZW4gcmVjZWl2ZWQsIHRoZSBzdGF0aW9uIHdpbGwgYmUgZGlzYXNzb2NpYXRlZCBhZnRlcgotICogQVBfRElTQVNTT0NfREVMQVkuIFNpbWlsYXJpbHksIGEgdGhlIHN0YXRpb24gd2lsbCBiZSBkZWF1dGhlbnRpY2F0ZWQgYWZ0ZXIKKyAqIEFQX0RJU0FTU09DX0RFTEFZLiBTaW1pbGFybHksIGEgdGhlIHN0YXRpb24gd2lsbCBiZSBkZWF1dGhlbnRpY2F0ZWQgYWZ0ZXIKICAqIEFQX0RFQVVUSF9ERUxBWS4gQVBfVElNRU9VVF9SRVNPTFVUSU9OIGlzIHRoZSByZXNvbHV0aW9uIHRoYXQgaXMgdXNlZCB3aXRoCiAgKiBtYXggaW5hY3Rpdml0eSB0aW1lci4gKi8KICNkZWZpbmUgQVBfTUFYX0lOQUNUSVZJVFlfU0VDICg1ICogNjApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggNjAzODYzMy4uMTJkZTQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtMTk0NSw3ICsxOTQ1LDcgQEAKIH0KIAogCi0vKiBUcmFuc2xhdGUgc2NhbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIGNhcmQgdG8gYSBjYXJkIGluZGVwZW5kYW50CisvKiBUcmFuc2xhdGUgc2NhbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIGNhcmQgdG8gYSBjYXJkIGluZGVwZW5kZW50CiAgKiBmb3JtYXQgdGhhdCB0aGUgV2lyZWxlc3MgVG9vbHMgd2lsbCB1bmRlcnN0YW5kIC0gSmVhbiBJSSAqLwogc3RhdGljIGlubGluZSBpbnQgcHJpc20yX3RyYW5zbGF0ZV9zY2FuKGxvY2FsX2luZm9fdCAqbG9jYWwsCiAJCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC0yMDQzLDcgKzIwNDMsNyBAQAogCQkgKiB1bnRpbCByZXN1bHRzIGFyZSByZWFkeSBmb3IgdmFyaW91cyByZWFzb25zLgogCQkgKiBGaXJzdCwgbWFuYWdpbmcgd2FpdCBxdWV1ZXMgaXMgY29tcGxleCBhbmQgcmFjeQogCQkgKiAodGhlcmUgbWF5IGJlIG11bHRpcGxlIHNpbXVsdGFuZW91cyBjYWxsZXJzKS4KLQkJICogU2Vjb25kLCB3ZSBncmFiIHNvbWUgcnRuZXRsaW5rIGxvY2sgYmVmb3JlIGNvbW1pbmcKKwkJICogU2Vjb25kLCB3ZSBncmFiIHNvbWUgcnRuZXRsaW5rIGxvY2sgYmVmb3JlIGNvbWluZwogCQkgKiBoZXJlIChpbiBkZXZfaW9jdGwoKSkuCiAJCSAqIFRoaXJkLCB0aGUgY2FsbGVyIGNhbiB3YWl0IG9uIHRoZSBXaXJlbGVzcyBFdmVudAogCQkgKiAtIEplYW4gSUkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKaW5kZXggMWM2NmIzYy4uODhkYzZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKQEAgLTg1Myw3ICs4NTMsNyBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCBjb21tc19xdWFsX3VwZGF0ZTsKIAogCS8qIFJTU0kgdG8gZEJtIGFkanVzdG1lbnQgKGZvciBSWCBkZXNjcmlwdG9yIGZpZWxkcykgKi8KLQlpbnQgcnNzaV90b19kQm07IC8qIHN1YnN0cmFjdCBmcm9tIFJTU0kgdG8gZ2V0IGFwcHJveGltYXRlIGRCbSB2YWx1ZSAqLworCWludCByc3NpX3RvX2RCbTsgLyogc3VidHJhY3QgZnJvbSBSU1NJIHRvIGdldCBhcHByb3hpbWF0ZSBkQm0gdmFsdWUgKi8KIAogCS8qIEJTUyBsaXN0IC8gcHJvdGVjdGVkIGJ5IGxvY2FsLT5sb2NrICovCiAJc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKaW5kZXggNGI5N2Y5MS4uNDQzMDc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKQEAgLTYzLDcgKzYzLDcgQEAKIGZpcm13YXJlIGlmIGEgQ29tbWFuZCBvciBEYXRhIGlzIGJlaW5nIHNlbnQuICBJZiBpdCBpcyBDb21tYW5kLCBhbGwgb2YgdGhlCiBjb21tYW5kIGluZm9ybWF0aW9uIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmVmZXJyZWQgdG8gYnkgdGhlCiBUQkQuICBJZiBpdCBpcyBEYXRhLCB0aGUgZmlyc3QgVEJEIGluZGljYXRlcyB0aGUgdHlwZSBvZiBkYXRhIHBhY2tldCwgbnVtYmVyCi1vZiBmcmFnbWVudHMsIGV0Yy4gIFRoZSBuZXh0IFRCRCB0aGVuIHJlZmVycnMgdG8gdGhlIGFjdHVhbCBwYWNrZXQgbG9jYXRpb24uCitvZiBmcmFnbWVudHMsIGV0Yy4gIFRoZSBuZXh0IFRCRCB0aGVuIHJlZmVycyB0byB0aGUgYWN0dWFsIHBhY2tldCBsb2NhdGlvbi4KIAogVGhlIFR4IGZsb3cgY3ljbGUgaXMgYXMgZm9sbG93czoKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCAxNjA4ODFmLi40MmMzZmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGFkZHMgYSBuZXcgYXR0cmlidXRlIHRvIHRoZSBzeXNmcyByZXByZXNlbnRhdGlvbgogICogb2YgdGhpcyBkZXZpY2UgZHJpdmVyIChpLmUuIGEgbmV3IGZpbGUgaW4gL3N5cy9idXMvcGNpL2RyaXZlcnMvaXB3LykKLSAqIHVzZWQgZm9yIGNvbnRyb2xpbmcgdGhlIGRlYnVnIGxldmVsLgorICogdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGRlYnVnIGxldmVsLgogICoKICAqIFNlZSB0aGUgbGV2ZWwgZGVmaW5pdGlvbnMgaW4gaXB3IGZvciBkZXRhaWxzLgogICovCkBAIC0zNzYzLDcgKzM3NjMsNyBAQAogCiAJcS0+dHhiID0ga21hbGxvYyhzaXplb2YocS0+dHhiWzBdKSAqIGNvdW50LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXEtPnR4YikgewotCQlJUFdfRVJST1IoInZtYWxsb2MgZm9yIGF1eGlsYXJ5IEJEIHN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKKwkJSVBXX0VSUk9SKCJ2bWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgc3RydWN0dXJlcyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTU1ODEsNyArNTU4MSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIFZlcmlmeSBwcml2YWN5IGNvbXBhdGFiaWxpdHkgKi8KKwkvKiBWZXJpZnkgcHJpdmFjeSBjb21wYXRpYmlsaXR5ICovCiAJaWYgKCgocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKSA/IDEgOiAwKSAhPQogCSAgICAoKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgPyAxIDogMCkpIHsKIAkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoJXBNKScgZXhjbHVkZWQgIgpAQCAtNTgwOCw3ICs1ODA4LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogVmVyaWZ5IHByaXZhY3kgY29tcGF0YWJpbGl0eSAqLworCS8qIFZlcmlmeSBwcml2YWN5IGNvbXBhdGliaWxpdHkgKi8KIAlpZiAoKChwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04pID8gMSA6IDApICE9CiAJICAgICgobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSA/IDEgOiAwKSkgewogCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICglcE0pJyBleGNsdWRlZCAiCkBAIC04MTg0LDcgKzgxODQsNyBAQAogc3RhdGljIGludCBpc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZWFkZXIpCiB7Ci0JLyogRmlsdGVyIGluY29taW5nIHBhY2tldHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHRhcmdldHRlZCB0b3dhcmQKKwkvKiBGaWx0ZXIgaW5jb21pbmcgcGFja2V0cyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgdGFyZ2V0ZWQgdG93YXJkCiAJICogdGhpcyBuZXR3b3JrLCBkaXNjYXJkaW5nIHBhY2tldHMgY29taW5nIGZyb20gb3Vyc2VsdmVzICovCiAJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7CiAJY2FzZSBJV19NT0RFX0FESE9DOgkvKiBIZWFkZXI6IERlc3QuIHwgU291cmNlICAgIHwgQlNTSUQgKi8KQEAgLTgzNDAsOSArODM0MCw5IEBACiB9CiAKIC8qCi0gKiBNYWluIGVudHJ5IGZ1bmN0aW9uIGZvciByZWNpZXZpbmcgYSBwYWNrZXQgd2l0aCA4MDIxMSBoZWFkZXJzLiAgVGhpcworICogTWFpbiBlbnRyeSBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIGEgcGFja2V0IHdpdGggODAyMTEgaGVhZGVycy4gIFRoaXMKICAqIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBldmVyIHRoZSBGVyBoYXMgbm90aWZpZWQgdXMgdGhhdCB0aGVyZSBpcyBhIG5ldwotICogc2tiIGluIHRoZSByZWNpZXZlIHF1ZXVlLgorICogc2tiIGluIHRoZSByZWNlaXZlIHF1ZXVlLgogICovCiBzdGF0aWMgdm9pZCBpcHdfcngoc3RydWN0IGlwd19wcml2ICpwcml2KQogewpAQCAtODY4Myw3ICs4NjgzLDcgQEAKICAqIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGlwd19tYWluIHRvIHByb3ZpZGUgdGhlIEhXIGludGVyYWN0aW9uLgogICoKICAqIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcyB0aGUgdXNlIG9mIHRoZSBpcHdfZ2V0X29yZGluYWwoKQotICogZnVuY3Rpb24gdXNlZCB0byBwb2xsIHRoZSBoYXJkd2FyZSB2cy4gbWFraW5nIHVuZWNlc3NhcnkgY2FsbHMuCisgKiBmdW5jdGlvbiB1c2VkIHRvIHBvbGwgdGhlIGhhcmR3YXJlIHZzLiBtYWtpbmcgdW5uZWNlc3NhcnkgY2FsbHMuCiAgKgogICovCiAKQEAgLTEwNDE5LDcgKzEwNDE5LDcgQEAKIAogCW1lbXNldCgmZHVtbXlzdGF0cywgMCwgc2l6ZW9mKGR1bW15c3RhdHMpKTsKIAotCS8qIEZpbHRlcmluZyBvZiBmcmFnbWVudCBjaGFpbnMgaXMgZG9uZSBhZ2FpbnMgdGhlIGZpcnN0IGZyYWdtZW50ICovCisJLyogRmlsdGVyaW5nIG9mIGZyYWdtZW50IGNoYWlucyBpcyBkb25lIGFnYWluc3QgdGhlIGZpcnN0IGZyYWdtZW50ICovCiAJaGRyID0gKHZvaWQgKil0eGItPmZyYWdtZW50c1swXS0+ZGF0YTsKIAlpZiAobGliaXB3X2lzX21hbmFnZW1lbnQobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX01HTVQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYwppbmRleCAwZGUxYjE4Li5lNWFkNzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKQEAgLTkyNSw3ICs5MjUsNyBAQAogc3RhdGljIHU4IHFvc19vdWlbUU9TX09VSV9MRU5dID0geyAweDAwLCAweDUwLCAweEYyIH07CiAKIC8qCi0qIE1ha2UgdGhlciBzdHJ1Y3R1cmUgd2UgcmVhZCBmcm9tIHRoZSBiZWFjb24gcGFja2V0IGhhcworKiBNYWtlIHRoZSBzdHJ1Y3R1cmUgd2UgcmVhZCBmcm9tIHRoZSBiZWFjb24gcGFja2V0IHRvIGhhdmUKICogdGhlIHJpZ2h0IHZhbHVlcwogKi8KIHN0YXRpYyBpbnQgbGliaXB3X3ZlcmlmeV9xb3NfaW5mbyhzdHJ1Y3QgbGliaXB3X3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvS2NvbmZpZwppbmRleCAyYTQ1ZGQ0Li5hZWY2NWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L0tjb25maWcKQEAgLTEsNiArMSw1IEBACiBjb25maWcgSVdMV0lGSV9MRUdBQ1kKLQl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lmaSBsZWdhY3kgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMQorCXRyaXN0YXRlCiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCkBAIC02NSw3ICs2NCw4IEBACiAKIGNvbmZpZyBJV0w0OTY1CiAJdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpRmkgNDk2NUFHTiAoaXdsNDk2NSkiCi0JZGVwZW5kcyBvbiBJV0xXSUZJX0xFR0FDWQorCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExCisJc2VsZWN0IElXTFdJRklfTEVHQUNZCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvcgogCkBAIC05Miw3ICs5Miw4IEBACiAKIGNvbmZpZyBJV0wzOTQ1CiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbiAoaXdsMzk0NSkiCi0JZGVwZW5kcyBvbiBJV0xXSUZJX0xFR0FDWQorCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExCisJc2VsZWN0IElXTFdJRklfTEVHQUNZCiAJLS0taGVscC0tLQogCSAgU2VsZWN0IHRvIGJ1aWxkIHRoZSBkcml2ZXIgc3VwcG9ydGluZyB0aGU6CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC0zOTQ1LWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtMzk0NS1ody5oCmluZGV4IDc3OWQzY2IuLjVjM2E2OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC0zOTQ1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTM5NDUtaHcuaApAQCAtNzQsOCArNzQsNiBAQAogLyogUlNTSSB0byBkQm0gKi8KICNkZWZpbmUgSVdMMzlfUlNTSV9PRkZTRVQJOTUKIAotI2RlZmluZSBJV0xfREVGQVVMVF9UWF9QT1dFUgkweDBGCi0KIC8qCiAgKiBFRVBST00gcmVsYXRlZCBjb25zdGFudHMsIGVudW1zLCBhbmQgc3RydWN0dXJlcy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LWh3LmgKaW5kZXggMDhiMTg5Yy4uZmM2ZmEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ody5oCkBAIC04MDQsOSArODA0LDYgQEAKIAogI2RlZmluZSBJV0w0OTY1X0RFRkFVTFRfVFhfUkVUUlkgIDE1CiAKLS8qIExpbWl0IHJhbmdlIG9mIHR4cG93ZXIgb3V0cHV0IHRhcmdldCB0byBiZSBiZXR3ZWVuIHRoZXNlIHZhbHVlcyAqLwotI2RlZmluZSBJV0w0OTY1X1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU4JKDApCS8qIDAgZEJtOiAxIG1pbGxpd2F0dCAqLwotCiAvKiBFRVBST00gKi8KICNkZWZpbmUgSVdMNDk2NV9GSVJTVF9BTVBEVV9RVUVVRQkxMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtdHguYwppbmRleCA1YzQwNTAyZi4uNzlhYzA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS10eC5jCkBAIC0zMTYsMTIgKzMxNiwxOCBAQAogCiAJaGRyX2xlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmMpOwogCi0JLyogRmluZCBpbmRleCBpbnRvIHN0YXRpb24gdGFibGUgZm9yIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KLQlzdGFfaWQgPSBpd2xfbGVnYWN5X3N0YV9pZF9vcl9icm9hZGNhc3QocHJpdiwgY3R4LCBpbmZvLT5jb250cm9sLnN0YSk7Ci0JaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAotCQkJICAgICAgIGhkci0+YWRkcjEpOwotCQlnb3RvIGRyb3BfdW5sb2NrOworCS8qIEZvciBtYW5hZ2VtZW50IGZyYW1lcyB1c2UgYnJvYWRjYXN0IGlkIHRvIGRvIG5vdCBicmVhayBhZ2dyZWdhdGlvbiAqLworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoZmMpKQorCQlzdGFfaWQgPSBjdHgtPmJjYXN0X3N0YV9pZDsKKwllbHNlIHsKKwkJLyogRmluZCBpbmRleCBpbnRvIHN0YXRpb24gdGFibGUgZm9yIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KKwkJc3RhX2lkID0gaXdsX2xlZ2FjeV9zdGFfaWRfb3JfYnJvYWRjYXN0KHByaXYsIGN0eCwgaW5mby0+Y29udHJvbC5zdGEpOworCisJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgeworCQkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCisJCQkJICAgICAgIGhkci0+YWRkcjEpOworCQkJZ290byBkcm9wX3VubG9jazsKKwkJfQogCX0KIAogCUlXTF9ERUJVR19UWChwcml2LCAic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKQEAgLTExMjcsMTIgKzExMzMsMTYgQEAKIAkgICAgIHEtPnJlYWRfcHRyID0gaXdsX2xlZ2FjeV9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKIAogCQl0eF9pbmZvID0gJnR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl07Ci0JCWl3bDQ5NjVfdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCi0JCQkJIHR4cV9pZCA+PSBJV0w0OTY1X0ZJUlNUX0FNUERVX1FVRVVFKTsKKworCQlpZiAoV0FSTl9PTl9PTkNFKHR4X2luZm8tPnNrYiA9PSBOVUxMKSkKKwkJCWNvbnRpbnVlOwogCiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4X2luZm8tPnNrYi0+ZGF0YTsKLQkJaWYgKGhkciAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJbmZyZWVkKys7CisKKwkJaXdsNDk2NV90eF9zdGF0dXMocHJpdiwgdHhfaW5mbywKKwkJCQkgdHhxX2lkID49IElXTDQ5NjVfRklSU1RfQU1QRFVfUVVFVUUpOwogCQl0eF9pbmZvLT5za2IgPSBOVUxMOwogCiAJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKaW5kZXggZDQxOGI2NC4uNDJkYjBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCkBAIC0xNjAsNiArMTYwLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmdlb19jaDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzOwogCWludCBpID0gMDsKKwlzOCBtYXhfdHhfcG93ZXIgPSAwOwogCiAJaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fYml0cmF0ZXMgfHwKIAkgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9iaXRyYXRlcykgewpAQCAtMjM1LDggKzIzNiw4IEBACiAKIAkJCWdlb19jaC0+ZmxhZ3MgfD0gY2gtPmh0NDBfZXh0ZW5zaW9uX2NoYW5uZWw7CiAKLQkJCWlmIChjaC0+bWF4X3Bvd2VyX2F2ZyA+IHByaXYtPnR4X3Bvd2VyX2RldmljZV9sbXQpCi0JCQkJcHJpdi0+dHhfcG93ZXJfZGV2aWNlX2xtdCA9IGNoLT5tYXhfcG93ZXJfYXZnOworCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gbWF4X3R4X3Bvd2VyKQorCQkJCW1heF90eF9wb3dlciA9IGNoLT5tYXhfcG93ZXJfYXZnOwogCQl9IGVsc2UgewogCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKIAkJfQpAQCAtMjQ5LDYgKzI1MCwxMCBAQAogCQkJCSBnZW9fY2gtPmZsYWdzKTsKIAl9CiAKKwlwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10ID0gbWF4X3R4X3Bvd2VyOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gbWF4X3R4X3Bvd2VyOworCXByaXYtPnR4X3Bvd2VyX25leHQgPSBtYXhfdHhfcG93ZXI7CisKIAlpZiAoKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMgPT0gMCkgJiYKIAkgICAgIHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKSB7CiAJCUlXTF9JTkZPKHByaXYsICJJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIgpAQCAtMTAzMCw3ICsxMDM1LDcgQEAKIAkvKgogCSAqIEVuYWJsZSBIQVAgSU5UQSAoaW50ZXJydXB0IGZyb20gbWFuYWdlbWVudCBidXMpIHRvCiAJICogd2FrZSBkZXZpY2UncyBQQ0kgRXhwcmVzcyBsaW5rIEwxYSAtPiBMMHMKLQkgKiBOT1RFOiAgVGhpcyBpcyBuby1vcCBmb3IgMzk0NSAobm9uLWV4aXN0YW50IGJpdCkKKwkgKiBOT1RFOiAgVGhpcyBpcyBuby1vcCBmb3IgMzk0NSAobm9uLWV4aXN0ZW50IGJpdCkKIAkgKi8KIAlpd2xfbGVnYWN5X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCiAJCQkJICAgIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9IQVBfV0FLRV9MMUEpOwpAQCAtMTEyNCwxMSArMTEyOSwxMSBAQAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKHR4X3Bvd2VyIDwgSVdMNDk2NV9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7CisJLyogMCBkQm0gbWVhbiAxIG1pbGxpd2F0dCAqLworCWlmICh0eF9wb3dlciA8IDApIHsKIAkJSVdMX1dBUk4ocHJpdiwKLQkJCSAiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBiZWxvdyBsb3dlciBsaW1pdCAlZC5cbiIsCi0JCQkgdHhfcG93ZXIsCi0JCQkgSVdMNDk2NV9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKTsKKwkJCSAiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBiZWxvdyAxIG1XLlxuIiwKKwkJCSB0eF9wb3dlcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTgwNSw2ICsxODEwLDE1IEBACiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKKwlpZiAoIWN0eC0+dmlmIHx8ICFpd2xfbGVnYWN5X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCS8qCisJCSAqIEh1aD8gQnV0IHdhaXQgLi4uIHRoaXMgY2FuIG1heWJlIGhhcHBlbiB3aGVuCisJCSAqIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBmaXJtd2FyZSByZXN0YXJ0IQorCQkgKi8KKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKIAlpbnRlcmZhY2VfbW9kZXMgPSBjdHgtPmludGVyZmFjZV9tb2RlcyB8IGN0eC0+ZXhjbHVzaXZlX2ludGVyZmFjZV9tb2RlczsKIAogCWlmICghKGludGVyZmFjZV9tb2RlcyAmIEJJVChuZXd0eXBlKSkpIHsKQEAgLTE4MzIsNiArMTg0Niw3IEBACiAJLyogc3VjY2VzcyAqLwogCWl3bF9sZWdhY3lfdGVhcmRvd25faW50ZXJmYWNlKHByaXYsIHZpZiwgdHJ1ZSk7CiAJdmlmLT50eXBlID0gbmV3dHlwZTsKKwl2aWYtPnAycCA9IG5ld3AycDsKIAllcnIgPSBpd2xfbGVnYWN5X3NldHVwX2ludGVyZmFjZShwcml2LCBjdHgpOwogCVdBUk5fT04oZXJyKTsKIAkvKgpAQCAtMjE0MCw2ICsyMTU1LDEzIEBACiAJCQlnb3RvIHNldF9jaF9vdXQ7CiAJCX0KIAorCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCQkgICAgIWl3bF9sZWdhY3lfaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IElCU1MgY2hhbm5lbFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBzZXRfY2hfb3V0OworCQl9CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCmluZGV4IDllZTg0OWQuLmY0M2FjMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKQEAgLTE0MTEsNiArMTQxMSwxMiBAQAogCXJldHVybiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpKSA/IDEgOiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludAoraXdsX2xlZ2FjeV9pc19jaGFubmVsX2lic3MoY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoKQoreworCXJldHVybiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykgPyAxIDogMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBfX2l3bF9sZWdhY3lfZnJlZV9wYWdlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBwYWdlICpwYWdlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWVlcHJvbS5jCmluZGV4IDA0YzU2NDguLmNiMzQ2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZWVwcm9tLmMKQEAgLTQ3MSwxMyArNDcxLDYgQEAKIAkJCQkJICAgICBmbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSkKIAkJCQkgICAgICAgPyAiIiA6ICJub3QgIik7CiAKLQkJCS8qIFNldCB0aGUgdHhfcG93ZXJfdXNlcl9sbXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKLQkJCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbCAqLwotCQkJaWYgKGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnID4KLQkJCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KQotCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0KLQkJCQkgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7Ci0KIAkJCWNoX2luZm8rKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWZoLmgKaW5kZXggNGUyMGM3ZS4uNmU2MDkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWZoLmgKQEAgLTQzNiw3ICs0MzYsNyBAQAogICogQGZpbmlzaGVkX3JiX251bSBbMDoxMV0gLSBJbmRpY2F0ZXMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IFJCCiAgKiAJaW4gd2hpY2ggdGhlIGxhc3QgZnJhbWUgd2FzIHdyaXR0ZW4gdG8KICAqIEBmaW5pc2hlZF9mcl9udW0gWzA6MTFdIC0gSW5kaWNhdGVzIHRoZSBpbmRleCBvZiB0aGUgUlggRnJhbWUKLSAqIAl3aGljaCB3YXMgdHJhbnNmZXJlZAorICogCXdoaWNoIHdhcyB0cmFuc2ZlcnJlZAogICovCiBzdHJ1Y3QgaXdsX3JiX3N0YXR1cyB7CiAJX19sZTE2IGNsb3NlZF9yYl9udW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtbGVkLmMKaW5kZXggMTVlYjhiNy4uYmRhMGQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1sZWQuYwpAQCAtNDgsOCArNDgsMjEgQEAKIE1PRFVMRV9QQVJNX0RFU0MobGVkX21vZGUsICIwPXN5c3RlbSBkZWZhdWx0LCAiCiAJCSIxPU9uKFJGIE9uKS9PZmYoUkYgT2ZmKSwgMj1ibGlua2luZyIpOwogCisvKiBUaHJvdWdocHV0CQlPRkYgdGltZShtcykJT04gdGltZSAobXMpCisgKgk+MzAwCQkJMjUJCTI1CisgKgk+MjAwIHRvIDMwMAkJNDAJCTQwCisgKgk+MTAwIHRvIDIwMAkJNTUJCTU1CisgKgk+NzAgdG8gMTAwCQk2NQkJNjUKKyAqCT41MCB0byA3MAkJNzUJCTc1CisgKgk+MjAgdG8gNTAJCTg1CQk4NQorICoJPjEwIHRvIDIwCQk5NQkJOTUKKyAqCT41IHRvIDEwCQkxMTAJCTExMAorICoJPjEgdG8gNQkJCTEzMAkJMTMwCisgKgk+MCB0byAxCQkJMTY3CQkxNjcKKyAqCTw9MAkJCQkJU09MSUQgT04KKyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHB0X2JsaW5rIGl3bF9ibGlua1tdID0gewotCXsgLnRocm91Z2hwdXQgPSAwICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMzM0IH0sCisJeyAudGhyb3VnaHB1dCA9IDAsIC5ibGlua190aW1lID0gMzM0IH0sCiAJeyAudGhyb3VnaHB1dCA9IDEgKiAxMDI0IC0gMSwgLmJsaW5rX3RpbWUgPSAyNjAgfSwKIAl7IC50aHJvdWdocHV0ID0gNSAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDIyMCB9LAogCXsgLnRocm91Z2hwdXQgPSAxMCAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDE5MCB9LApAQCAtMTAxLDYgKzExNCwxMSBAQAogCWlmIChwcml2LT5ibGlua19vbiA9PSBvbiAmJiBwcml2LT5ibGlua19vZmYgPT0gb2ZmKQogCQlyZXR1cm4gMDsKIAorCWlmIChvZmYgPT0gMCkgeworCQkvKiBsZWQgaXMgU09MSURfT04gKi8KKwkJb24gPSBJV0xfTEVEX1NPTElEOworCX0KKwogCUlXTF9ERUJVR19MRUQocHJpdiwgIkxlZCBibGluayB0aW1lIGNvbXBlbnNhdGlvbj0ldVxuIiwKIAkJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmxlZF9jb21wZW5zYXRpb24pOwogCWxlZF9jbWQub24gPSBpd2xfbGVnYWN5X2JsaW5rX2NvbXBlbnNhdGlvbihwcml2LCBvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtc2Nhbi5jCmluZGV4IDYwZjU5N2YuLjM1MzIzNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXNjYW4uYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTZW5kIHNjYW4gYWJvcnQgZmFpbGVkICVkXG4iLCByZXQpOwogCQlpd2xfbGVnYWN5X2ZvcmNlX3NjYW5fZW5kKHByaXYpOwogCX0gZWxzZQotCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU3VjZXNzZnVsbHkgc2VuZCBzY2FuIGFib3J0XG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlN1Y2Nlc3NmdWxseSBzZW5kIHNjYW4gYWJvcnRcbiIpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1zdGEuYwppbmRleCA0N2M5ZGEzLi42NmYwZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXN0YS5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkvKgogCSAqIFhYWDogVGhlIE1BQyBhZGRyZXNzIGluIHRoZSBjb21tYW5kIGJ1ZmZlciBpcyBvZnRlbiBjaGFuZ2VkIGZyb20KIAkgKiB0aGUgb3JpZ2luYWwgc2VudCB0byB0aGUgZGV2aWNlLiBUaGF0IGlzLCB0aGUgTUFDIGFkZHJlc3MKLQkgKiB3cml0dGVuIHRvIHRoZSBjb21tYW5kIGJ1ZmZlciBvZnRlbiBpcyBub3QgdGhlIHNhbWUgTUFDIGFkcmVzcworCSAqIHdyaXR0ZW4gdG8gdGhlIGNvbW1hbmQgYnVmZmVyIG9mdGVuIGlzIG5vdCB0aGUgc2FtZSBNQUMgYWRkcmVzcwogCSAqIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBidWZmZXIgd2hlbiB0aGUgY29tbWFuZCByZXR1cm5zLiBUaGlzCiAJICogaXNzdWUgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZCBhbmQgdGhpcyBkZWJ1Z2dpbmcgaXMgbGVmdCB0bwogCSAqIG9ic2VydmUgdGhlIHByb2JsZW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jCmluZGV4IGFiODdlMWIuLmNjN2ViY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jCkBAIC05Myw2ICs5Myw3IEBACiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsMzk0NV9tb2RfcGFyYW1zID0gewogCS5zd19jcnlwdG8gPSAxLAogCS5yZXN0YXJ0X2Z3ID0gMSwKKwkuZGlzYWJsZV9od19zY2FuID0gMSwKIAkvKiB0aGUgcmVzdCBhcmUgMCBieSBkZWZhdWx0ICovCiB9OwogCkBAIC0zODI0LDEwICszODI1LDYgQEAKIAlwcml2LT5mb3JjZV9yZXNldFtJV0xfRldfUkVTRVRdLnJlc2V0X2R1cmF0aW9uID0KIAkJSVdMX0RFTEFZX05FWFRfRk9SQ0VfRldfUkVMT0FEOwogCi0KLQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IElXTF9ERUZBVUxUX1RYX1BPV0VSOwotCXByaXYtPnR4X3Bvd2VyX25leHQgPSBJV0xfREVGQVVMVF9UWF9QT1dFUjsKLQogCWlmIChlZXByb20tPnZlcnNpb24gPCBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTikgewogCQlJV0xfV0FSTihwcml2LCAiVW5zdXBwb3J0ZWQgRUVQUk9NIHZlcnNpb246IDB4JTA0WFxuIiwKIAkJCSBlZXByb20tPnZlcnNpb24pOwpAQCAtMzk2MCw4ICszOTU3LDcgQEAKIAkgKiAidGhlIGhhcmQgd2F5IiwgcmF0aGVyIHRoYW4gdXNpbmcgZGV2aWNlJ3Mgc2Nhbi4KIAkgKi8KIAlpZiAoaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbikgewotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICYocGRldi0+ZGV2KSwKLQkJCSJzdyBzY2FuIHN1cHBvcnQgaXMgZGVwcmVjYXRlZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJEaXNhYmxpbmcgaHdfc2NhblxuIik7CiAJCWl3bDM5NDVfaHdfb3BzLmh3X3NjYW4gPSBOVUxMOwogCX0KIApAQCAtNDI4MCw4ICs0Mjc2LDcgQEAKIAkJInVzaW5nIHNvZnR3YXJlIGNyeXB0byAoZGVmYXVsdCAxIFtzb2Z0d2FyZV0pIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZV9od19zY2FuLCBpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZV9od19zY2FuLAogCQlpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2h3X3NjYW4sCi0JCSJkaXNhYmxlIGhhcmR3YXJlIHNjYW5uaW5nIChkZWZhdWx0IDApIChkZXByZWNhdGVkKSIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2h3X3NjYW4sICJkaXNhYmxlIGhhcmR3YXJlIHNjYW5uaW5nIChkZWZhdWx0IDEpIik7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVHQUNZX0RFQlVHCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bGVnYWN5X2RlYnVnX2xldmVsLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKaW5kZXggOTFiM2Q4Yi4uYTYyZmUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKQEAgLTI5ODQsMTUgKzI5ODQsMTUgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LAogCQkJdHhwb3dlcl93b3JrKTsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCS8qIElmIGEgc2NhbiBoYXBwZW5lZCB0byBzdGFydCBiZWZvcmUgd2UgZ290IGhlcmUKIAkgKiB0aGVuIGp1c3QgcmV0dXJuOyB0aGUgc3RhdGlzdGljcyBub3RpZmljYXRpb24gd2lsbAogCSAqIGtpY2sgb2ZmIGFub3RoZXIgc2NoZWR1bGVkIHdvcmsgdG8gY29tcGVuc2F0ZSBmb3IKIAkgKiBhbnkgdGVtcGVyYXR1cmUgZGVsdGEgd2UgbWlzc2VkIGhlcmUuICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CiAJICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJZ290byBvdXQ7CiAKIAkvKiBSZWdhcmRsZXNzIG9mIGlmIHdlIGFyZSBhc3NvY2lhdGVkLCB3ZSBtdXN0IHJlY29uZmlndXJlIHRoZQogCSAqIFRYIHBvd2VyIHNpbmNlIGZyYW1lcyBjYW4gYmUgc2VudCBvbiBub24tcmFkYXIgY2hhbm5lbHMgd2hpbGUKQEAgLTMwMDIsNyArMzAwMiw3IEBACiAJLyogVXBkYXRlIGxhc3RfdGVtcGVyYXR1cmUgdG8ga2VlcCBpc19jYWxpYl9uZWVkZWQgZnJvbSBydW5uaW5nCiAJICogd2hlbiBpdCBpc24ndCBuZWVkZWQuLi4gKi8KIAlwcml2LT5sYXN0X3RlbXBlcmF0dXJlID0gcHJpdi0+dGVtcGVyYXR1cmU7Ci0KK291dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIApAQCAtMzE0MCwxMiArMzE0MCw2IEBACiAKIAlpd2xfbGVnYWN5X2luaXRfc2Nhbl9wYXJhbXMocHJpdik7CiAKLQkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBsb3dlc3QgcG93ZXIgbGV2ZWwKLQkgKiB0aGlzIHZhbHVlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIGJ5IGNoYW5uZWwgbWF4IHBvd2VyIGF2ZwotCSAqIGZyb20gZWVwcm9tICovCi0JcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0w0OTY1X1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47Ci0JcHJpdi0+dHhfcG93ZXJfbmV4dCA9IElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTjsKLQogCXJldCA9IGl3bF9sZWdhY3lfaW5pdF9jaGFubmVsX21hcChwcml2KTsKIAlpZiAocmV0KSB7CiAJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyByZWd1bGF0b3J5IGZhaWxlZDogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggM2VhMzFiNi4uMjJlMDQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtNTMwLDYgKzUzMCw5IEBACiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzAwX2Fnbl9jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgVWx0aW1hdGUgTiBXaUZpIExpbmsgNTMwMCBBR04iLAogCUlXTF9ERVZJQ0VfNTAwMCwKKwkvKiBhdCBsZWFzdCBFRVBST00gMHgxMUEgaGFzIHdyb25nIGluZm8gKi8KKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywJLyogLmNmZyBvdmVyd3JpdGUgKi8KKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywJLyogLmNmZyBvdmVyd3JpdGUgKi8KIAkuaHRfcGFyYW1zID0gJml3bDUwMDBfaHRfcGFyYW1zLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jCmluZGV4IGI1Y2IzYmUuLmVkMDE0OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1pY3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taWN0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlpZiAoIXByaXYtPl9hZ24uaWN0X3RibF92aXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogYWxpZ24gdGFibGUgdG8gUEFHRV9TSVpFIGJvdW5kcnkgKi8KKwkvKiBhbGlnbiB0YWJsZSB0byBQQUdFX1NJWkUgYm91bmRhcnkgKi8KIAlwcml2LT5fYWduLmFsaWduZWRfaWN0X3RibF9kbWEgPSBBTElHTihwcml2LT5fYWduLmljdF90YmxfZG1hLCBQQUdFX1NJWkUpOwogCiAJSVdMX0RFQlVHX0lTUihwcml2LCAiaWN0IGRtYSBhZGRyICVMeCBkbWEgYWxpZ25lZCAlTHggZGlmZiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCmluZGV4IGRmZGJlYTYuLmZiYmRlMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKQEAgLTMzNSw3ICszMzUsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJaW50IHJldCA9IDA7Ci0JYm9vbCBodF9jaGFuZ2VkW05VTV9JV0xfUlhPTl9DVFhdID0ge307CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZWQgJSN4IiwgY2hhbmdlZCk7CiAKQEAgLTM4MywxMCArMzgyLDggQEAKIAogCQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgewogCQkJLyogQ29uZmlndXJlIEhUNDAgY2hhbm5lbHMgKi8KLQkJCWlmIChjdHgtPmh0LmVuYWJsZWQgIT0gY29uZl9pc19odChjb25mKSkgeworCQkJaWYgKGN0eC0+aHQuZW5hYmxlZCAhPSBjb25mX2lzX2h0KGNvbmYpKQogCQkJCWN0eC0+aHQuZW5hYmxlZCA9IGNvbmZfaXNfaHQoY29uZik7Ci0JCQkJaHRfY2hhbmdlZFtjdHgtPmN0eGlkXSA9IHRydWU7Ci0JCQl9CiAKIAkJCWlmIChjdHgtPmh0LmVuYWJsZWQpIHsKIAkJCQlpZiAoY29uZl9pc19odDQwX21pbnVzKGNvbmYpKSB7CkBAIC00NTUsOCArNDUyLDYgQEAKIAkJaWYgKCFtZW1jbXAoJmN0eC0+c3RhZ2luZywgJmN0eC0+YWN0aXZlLCBzaXplb2YoY3R4LT5zdGFnaW5nKSkpCiAJCQljb250aW51ZTsKIAkJaXdsYWduX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7Ci0JCWlmIChodF9jaGFuZ2VkW2N0eC0+Y3R4aWRdKQotCQkJaXdsYWduX3VwZGF0ZV9xb3MocHJpdiwgY3R4KTsKIAl9CiAgb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYwppbmRleCBhNzA5ZDA1Li4wNzEyYjY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXR4LmMKQEAgLTU2OCwxMiArNTY4LDE3IEBACiAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKLQkvKiBGaW5kIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCXN0YV9pZCA9IGl3bF9zdGFfaWRfb3JfYnJvYWRjYXN0KHByaXYsIGN0eCwgaW5mby0+Y29udHJvbC5zdGEpOwotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKLQkJCSAgICAgICBoZHItPmFkZHIxKTsKLQkJZ290byBkcm9wX3VubG9jazsKKwkvKiBGb3IgbWFuYWdlbWVudCBmcmFtZXMgdXNlIGJyb2FkY2FzdCBpZCB0byBkbyBub3QgYnJlYWsgYWdncmVnYXRpb24gKi8KKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSkKKwkJc3RhX2lkID0gY3R4LT5iY2FzdF9zdGFfaWQ7CisJZWxzZSB7CisJCS8qIEZpbmQgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCisJCXN0YV9pZCA9IGl3bF9zdGFfaWRfb3JfYnJvYWRjYXN0KHByaXYsIGN0eCwgaW5mby0+Y29udHJvbC5zdGEpOworCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQkJCSAgICAgICBoZHItPmFkZHIxKTsKKwkJCWdvdG8gZHJvcF91bmxvY2s7CisJCX0KIAl9CiAKIAlJV0xfREVCVUdfVFgocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CkBAIC0xMjI0LDEyICsxMjI5LDE2IEBACiAJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKIAogCQl0eF9pbmZvID0gJnR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl07Ci0JCWl3bGFnbl90eF9zdGF0dXMocHJpdiwgdHhfaW5mbywKLQkJCQkgdHhxX2lkID49IElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSk7CisKKwkJaWYgKFdBUk5fT05fT05DRSh0eF9pbmZvLT5za2IgPT0gTlVMTCkpCisJCQljb250aW51ZTsKIAogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eF9pbmZvLT5za2ItPmRhdGE7Ci0JCWlmIChoZHIgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCW5mcmVlZCsrOworCisJCWl3bGFnbl90eF9zdGF0dXMocHJpdiwgdHhfaW5mbywKKwkJCQkgdHhxX2lkID49IElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSk7CiAJCXR4X2luZm8tPnNrYiA9IE5VTEw7CiAKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbnZhbF9ieXRlX2NudF90YmwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKaW5kZXggNmMzMGZhNi4uYmFmYmU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAkvKgogCSAqIEVuYWJsZSBIQVAgSU5UQSAoaW50ZXJydXB0IGZyb20gbWFuYWdlbWVudCBidXMpIHRvCiAJICogd2FrZSBkZXZpY2UncyBQQ0kgRXhwcmVzcyBsaW5rIEwxYSAtPiBMMHMKLQkgKiBOT1RFOiAgVGhpcyBpcyBuby1vcCBmb3IgMzk0NSAobm9uLWV4aXN0YW50IGJpdCkKKwkgKiBOT1RFOiAgVGhpcyBpcyBuby1vcCBmb3IgMzk0NSAobm9uLWV4aXN0ZW50IGJpdCkKIAkgKi8KIAlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKIAkJCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0hBUF9XQUtFX0wxQSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCmluZGV4IDk4YWE4YWYuLjIwYjY2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogLyogNngwMCBTcGVjaWZpYyAqLwogI2RlZmluZSBFRVBST01fNjAwMF9UWF9QT1dFUl9WRVJTSU9OICAgICg0KQotI2RlZmluZSBFRVBST01fNjAwMF9FRVBST01fVkVSU0lPTgkoMHg0MzQpCisjZGVmaW5lIEVFUFJPTV82MDAwX0VFUFJPTV9WRVJTSU9OCSgweDQyMykKIAogLyogNng1MCBTcGVjaWZpYyAqLwogI2RlZmluZSBFRVBST01fNjA1MF9UWF9QT1dFUl9WRVJTSU9OICAgICg0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKaW5kZXggNTViODM3MC4uNDc0MDA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCkBAIC00MzYsNyArNDM2LDcgQEAKICAqIEBmaW5pc2hlZF9yYl9udW0gWzA6MTFdIC0gSW5kaWNhdGVzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBSQgogICogCWluIHdoaWNoIHRoZSBsYXN0IGZyYW1lIHdhcyB3cml0dGVuIHRvCiAgKiBAZmluaXNoZWRfZnJfbnVtIFswOjExXSAtIEluZGljYXRlcyB0aGUgaW5kZXggb2YgdGhlIFJYIEZyYW1lCi0gKiAJd2hpY2ggd2FzIHRyYW5zZmVyZWQKKyAqIAl3aGljaCB3YXMgdHJhbnNmZXJyZWQKICAqLwogc3RydWN0IGl3bF9yYl9zdGF0dXMgewogCV9fbGUxNiBjbG9zZWRfcmJfbnVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IDNhNGQ5ZTYuLjkxNGM3N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2VuZCBzY2FuIGFib3J0IGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJaXdsX2ZvcmNlX3NjYW5fZW5kKHByaXYpOwogCX0gZWxzZQotCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU3VjZXNzZnVsbHkgc2VuZCBzY2FuIGFib3J0XG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlN1Y2Nlc3NmdWxseSBzZW5kIHNjYW4gYWJvcnRcbiIpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYwppbmRleCA5MDdhYzg5Li4xY2FiY2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaGFsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2hhbC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiAgIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoZSBob3N0IHRhbGtzIGV4Y2x1c2l2ZWx5CiAgKiAgIHRvIHRoZSBVTUFDIGFuZCBzbyB0aGVyZSBuZWVkcyB0byBiZSBhIHNwZWNpYWwgVU1BQwogICogICBjb21tYW5kIGZvciB0YWxraW5nIHRvIHRoZSBMTUFDLgotICogICBUaGlzIGlzIGhvdyBhIHdpZmkgY29tbWFuZCBpcyBsYXllZCBvdXQ6CisgKiAgIFRoaXMgaXMgaG93IGEgd2lmaSBjb21tYW5kIGlzIGxhaWQgb3V0OgogICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgIHwgaXdtX3VkbWFfb3V0X3dpZmlfaGRyICB8CiAgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDcgKzcyLDcgQEAKICAqICAgVGhvc2UgY29tbWFuZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGRldmljZSdzIGJvb3Ryb20sCiAgKiAgIGFuZCBhcmUgdHlwaWNhbGx5IHNlbnQgd2hlbiB0aGUgVU1BQyBhbmQgdGhlIExNQUMKICAqICAgYXJlIG5vdCB5ZXQgYXZhaWxhYmxlLgotICogICAgKiAgIFRoaXMgaXMgaG93IGEgbm9uLXdpZmkgY29tbWFuZCBpcyBsYXllZCBvdXQ6CisgKiAgICAqICAgVGhpcyBpcyBob3cgYSBub24td2lmaSBjb21tYW5kIGlzIGxhaWQgb3V0OgogICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgIHwgaXdtX3VkbWFfb3V0X25vbndpZmlfaGRyICB8CiAgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3R4LmMKaW5kZXggMzIxNjYyMS4uYmU5ODA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3R4LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXNwaW5fbG9jaygmaXdtLT50eF9jcmVkaXQubG9jayk7CiAKIAlpZiAoIWl3bV90eF9jcmVkaXRfb2soaXdtLCBpZCwgbmIpKSB7Ci0JCUlXTV9EQkdfVFgoaXdtLCBEQkcsICJObyBjcmVkaXQgYXZhbGlhYmxlIGZvciBwb29sWyVkXVxuIiwgaWQpOworCQlJV01fREJHX1RYKGl3bSwgREJHLCAiTm8gY3JlZGl0IGF2YWlsYWJsZSBmb3IgcG9vbFslZF1cbiIsIGlkKTsKIAkJcmV0ID0gLUVOT1NQQzsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FCmluZGV4IDYwZmQxYWYuLjE0NTNlZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9SRUFETUUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FCkBAIC03MCw3ICs3MCw3IEBACiAJVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gcmVhZCB0aGUgTUFDLCBCQlAgYW5kIFJGIHJlZ2lzdGVycyBmcm9tIHRoZQogCWNhcmQuICBUaGVzZSBjb21tYW5kcyB0YWtlIG9uZSBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIG9mZnNldAogCWxvY2F0aW9uIHRoYXQgaXMgdG8gYmUgcmVhZC4gIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkIGluCi0JaGV4YWRlY2ltYWwgKGl0cyBwb3NzaWJsZSB0byBwcmVjZWVkIHByZWNlZGluZyB0aGUgbnVtYmVyIHdpdGggYSAiMHgiKS4KKwloZXhhZGVjaW1hbCAoaXRzIHBvc3NpYmxlIHRvIHByZWNlZGUgcHJlY2VkaW5nIHRoZSBudW1iZXIgd2l0aCBhICIweCIpLgogCiAJUGF0aDogL3N5cy9rZXJuZWwvZGVidWcvbGliZXJ0YXNfd2lyZWxlc3MvZXRoWC9yZWdpc3RlcnMvCiAKQEAgLTg0LDcgKzg0LDcgQEAKIAlUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byB3cml0ZSB0aGUgTUFDLCBCQlAgYW5kIFJGIHJlZ2lzdGVycyBpbiB0aGUKIAljYXJkLiAgVGhlc2UgY29tbWFuZHMgdGFrZSB0d28gcGFyYW1ldGVycyB0aGF0IHNwZWNpZnkgdGhlIG9mZnNldAogCWxvY2F0aW9uIGFuZCB0aGUgdmFsdWUgdGhhdCBpcyB0byBiZSB3cml0dGVuLiBUaGlzIHBhcmFtZXRlcnMgbXVzdAotCWJlIHNwZWNpZmllZCBpbiBoZXhhZGVjaW1hbCAoaXRzIHBvc3NpYmxlIHRvIHByZWNlZWQgdGhlIG51bWJlcgorCWJlIHNwZWNpZmllZCBpbiBoZXhhZGVjaW1hbCAoaXRzIHBvc3NpYmxlIHRvIHByZWNlZGUgdGhlIG51bWJlcgogCXdpdGggYSAiMHgiKS4KIAogCVVzYWdlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYwppbmRleCAzMGVmMDM1Li41Y2FhMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAKIAkJICogd2UgcmVtb3ZlIGFsbCBrZXlzIGxpa2UgaW4gdGhlIFdQQS9XUEEyIHNldHVwLAogCQkgKiB3ZSBqdXN0IGRvbid0IHNldCBSU04uCiAJCSAqCi0JCSAqIFRoZXJlZm9yZTogZmFsbC10aHJvdWdodAorCQkgKiBUaGVyZWZvcmU6IGZhbGwtdGhyb3VnaAogCQkgKi8KIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA3ZThhNjU4Li5mM2FjNjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMTMzOSw4ICsxMzM5LDggQEAKIAkJCQkgICAgY3B1X3RvX2xlMTYoUFNfTU9ERV9BQ1RJT05fRVhJVF9QUykpIHsKIAkJCQkJbGJzX2RlYl9ob3N0KAogCQkJCQkgICAgICAgIkVYRUNfTkVYVF9DTUQ6IGlnbm9yZSBFTlRFUl9QUyBjbWRcbiIpOwotCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIDApOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzUyLDggKzEzNTIsOCBAQAogCQkJCSAgICAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9QUkVfU0xFRVApKSB7CiAJCQkJCWxic19kZWJfaG9zdCgKIAkJCQkJICAgICAgICJFWEVDX05FWFRfQ01EOiBpZ25vcmUgRVhJVF9QUyBjbWQgaW4gc2xlZXBcbiIpOwotCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIDApOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQkJCQlwcml2LT5uZWVkdG93YWtldXAgPSAxOwpAQCAtMTM2Niw3ICsxMzY2LDkgQEAKIAkJCQkgICAgICAgIkVYRUNfTkVYVF9DTUQ6IHNlbmRpbmcgRVhJVF9QU1xuIik7CiAJCQl9CiAJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCWxpc3RfZGVsKCZjbWRub2RlLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJbGJzX2RlYl9ob3N0KCJFWEVDX05FWFRfQ01EOiBzZW5kaW5nIGNvbW1hbmQgMHglMDR4XG4iLAogCQkJICAgIGxlMTZfdG9fY3B1KGNtZC0+Y29tbWFuZCkpOwogCQlsYnNfc3VibWl0X2NvbW1hbmQocHJpdiwgY21kbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCBmYzgxMjExLi44NzEyY2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTkxMyw3ICs5MTMsNyBAQAogCQlnb3RvIG91dDM7CiAJfQogCi0JLyogQ2xlYXIgYW55IGludGVycnVwdCBjYXVzZSB0aGF0IGhhcHBlbmQgd2hpbGUgc2VuZGluZworCS8qIENsZWFyIGFueSBpbnRlcnJ1cHQgY2F1c2UgdGhhdCBoYXBwZW5lZCB3aGlsZSBzZW5kaW5nCiAJICogZmlybXdhcmUvaW5pdGlhbGl6aW5nIGNhcmQgKi8KIAlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0NBUkRfSU5UX0NBVVNFLCBJRl9DU19CSVRfTUFTSyk7CiAJaWZfY3NfZW5hYmxlX2ludHMoY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCmluZGV4IDhiMTQxN2QuLmQyYWMxZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCkBAIC02Niw3ICs2Niw3IEBACiAjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAweDQwCS8qIEhvc3QgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnICovCiAKICNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAweDQ0CS8qIENhcmQgaW50ZXJydXB0IGNhdXNlIHJlZyAqLwotI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAweDQ4IC8qIENhcmQgaW50ZXJ1cHQgc3RhdHVzIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAweDQ4IC8qIENhcmQgaW50ZXJydXB0IHN0YXR1cyByZWcgKi8KICNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0VWRU5UX01BU0tfUkVHIDB4NEMgLyogQ2FyZCBpbnRlcnJ1cHQgZXZlbnQgbWFzayAqLwogI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX01BU0tfUkVHCTB4NTAgLyogQ2FyZCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggNTZmNDM5ZC4uZjRmNDI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC02Miw3ICs2Miw3IEBACiAgKiAJYW4gaW50ZXJzZWN0aW9uIHRvIG9jY3VyIGJ1dCBlYWNoIGRldmljZSB3aWxsIHN0aWxsIHVzZSB0aGVpcgogICogCXJlc3BlY3RpdmUgcmVndWxhdG9yeSByZXF1ZXN0ZWQgZG9tYWlucy4gU3Vic2VxdWVudCByYWRpb3Mgd2lsbAogICogCXVzZSB0aGUgcmVzdWx0aW5nIGludGVyc2VjdGlvbi4KLSAqIEBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06IFVzZWQgZm9yIHRlc3RpbmcgdGhlIHdvcmxkIHJvYW1pbmcuIFdlIGFjb21wbGlzaAorICogQEhXU0lNX1JFR1RFU1RfV09STERfUk9BTTogVXNlZCBmb3IgdGVzdGluZyB0aGUgd29ybGQgcm9hbWluZy4gV2UgYWNjb21wbGlzaAogICoJdGhpcyBieSB1c2luZyBhIGN1c3RvbSBiZWFjb24tY2FwYWJsZSByZWd1bGF0b3J5IGRvbWFpbiBmb3IgdGhlIGZpcnN0CiAgKglyYWRpby4gQWxsIG90aGVyIGRldmljZSB3b3JsZCByb2FtLgogICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBjdXN0b20gd29ybGQgcmVndWxhdG9yeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKaW5kZXggMzY5NTIyNy4uYzFjZWI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIHN0cnVjdCBtd2w4a19wcml2IHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlpbnQgaXJxOwogCiAJc3RydWN0IG13bDhrX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbzsKIApAQCAtMzc2MSw5ICszNzYyLDExIEBACiAJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIG13bDhrX2ludGVycnVwdCwKIAkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOwogCWlmIChyYykgeworCQlwcml2LT5pcnEgPSAtMTsKIAkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KKwlwcml2LT5pcnEgPSBwcml2LT5wZGV2LT5pcnE7CiAKIAkvKiBFbmFibGUgVFggcmVjbGFpbSBhbmQgUlggdGFza2xldHMuICAqLwogCXRhc2tsZXRfZW5hYmxlKCZwcml2LT5wb2xsX3R4X3Rhc2spOwpAQCAtMzgwMCw2ICszODAzLDcgQEAKIAlpZiAocmMpIHsKIAkJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKIAkJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisJCXByaXYtPmlycSA9IC0xOwogCQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfdHhfdGFzayk7CiAJCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cG9sbF9yeF90YXNrKTsKIAl9CkBAIC0zODE4LDcgKzM4MjIsMTAgQEAKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7Ci0JZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisJaWYgKHByaXYtPmlycSAhPSAtMSkgeworCQlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKwkJcHJpdi0+aXJxID0gLTE7CisJfQogCiAJLyogU3RvcCBmaW5hbGl6ZSBqb2luIHdvcmtlciAqLwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwppbmRleCBiNDc3MmMxLi4zYzc4NzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCkBAIC0xMDMxLDcgKzEwMzEsNyBAQAogCWVsc2UKIAkJYnVmLnRzY1s0XSA9IDB4MTA7CiAKLQkvKiBXYWl0IHVwdG8gMTAwbXMgZm9yIHR4IHF1ZXVlIHRvIGVtcHR5ICovCisJLyogV2FpdCB1cCB0byAxMDBtcyBmb3IgdHggcXVldWUgdG8gZW1wdHkgKi8KIAlmb3IgKGsgPSAxMDA7IGsgPiAwOyBrLS0pIHsKIAkJdWRlbGF5KDEwMDApOwogCQlyZXQgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9UWFFVRVVFRU1QVFksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYwppbmRleCAzNTZlNmJiLi5hOTQ2OTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKQEAgLTQ2NSw3ICs0NjUsNyBAQAogCiAJCWlmIChzbG90IDwgMCkgewogCQkJLyoKLQkJCSAqIFRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIGNob29zZW4gYWxnb3JpdGhtLCBidXQgdGhlCisJCQkgKiBUaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBjaG9zZW4gYWxnb3JpdGhtLCBidXQgdGhlCiAJCQkgKiBmaXJtd2FyZSBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBrZXkgc2xvdHMgdG8gc3RvcmUKIAkJCSAqIGFsbCBvZiB0aGVtLgogCQkJICogQnV0IGVuY3J5cHRpb24gb2ZmbG9hZCBmb3Igb3V0Z29pbmcgZnJhbWVzIGlzIGFsd2F5cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCmluZGV4IDdlY2MwYmQuLjZkOTIwNGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAllbmFibGVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSkpOwogCiAJLyoKLQkgKiBuZWVkIHRvIHdhaXQgYSB3aGlsZSBiZWZvcmUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCwgdGhlIGxlbmdodAorCSAqIG5lZWQgdG8gd2FpdCBhIHdoaWxlIGJlZm9yZSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkLCB0aGUgbGVuZ3RoCiAJICogaXMganVzdCBhIGd1ZXNzCiAJICovCiAJbXNsZWVwKDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCA5YjM0NGE5Li5lMTgzNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC01Niw2ICs1Niw3IEBACiAJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMTApfSwJLyogTmV0Z2VhciBXRzEyMSB0aGUgc2Vjb25kID8gKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIyMCl9LAkvKiBOZXRnZWFyIFdHMTExICovCiAJe1VTQl9ERVZJQ0UoMHgwOWFhLCAweDEwMDApfSwJLyogU3Bpbm5ha2VyIFByb3RvIGJvYXJkICovCisJe1VTQl9ERVZJQ0UoMHgwYmY4LCAweDEwMDcpfSwJLyogRnVqaXRzdSBFLTU0MDAgVVNCICovCiAJe1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwJLyogTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUgKi8KIAl7VVNCX0RFVklDRSgweDBkYjAsIDB4NjgyNil9LAkvKiBNU0kgVUI1NEcgKE1TLTY4MjYpICovCiAJe1VTQl9ERVZJQ0UoMHgxMDdiLCAweDU1ZjIpfSwJLyogR2F0ZXdheSBXR1UtMjEwIChHZW10ZWspICovCkBAIC02OCw2ICs2OSw3IEBACiAJe1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzUpfSwJLyogTGlua3N5cyBXVVNCNTRHIFBvcnRhYmxlIE9FTSAqLwogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAxKX0sCS8qIERMaW5rIERXTC1HMTIwIFNwaW5uYWtlciAqLwogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAzKX0sCS8qIERMaW5rIERXTC1HMTIyICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3NjIpfSwJLyogQ29uY2VwdHJvbmljIEM1NFUgKi8KIAl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNCl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgKi8KIAl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNSl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKaW5kZXggNzgzNGMyNi4uMDQyODQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCkBAIC03MDMsNyArNzAzLDcgQEAKIAlzdHJ1Y3QgcDU0X3R4X2luZm8gKnA1NGluZm87CiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3QgcDU0X3R4X2RhdGEgKnR4aGRyOwotCXVuc2lnbmVkIGludCBwYWRkaW5nLCBsZW4sIGV4dHJhX2xlbjsKKwl1bnNpZ25lZCBpbnQgcGFkZGluZywgbGVuLCBleHRyYV9sZW4gPSAwOwogCWludCBpLCBqLCByaWR4OwogCXUxNiBoZHJfZmxhZ3MgPSAwLCBhaWQgPSAwOwogCXU4IHJhdGUsIHF1ZXVlID0gMCwgY3J5cHRfb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggZDQ0ZjhlMi4uMjY2ZDQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCSAqIGJlIGFsaWduZWQgb24gYSA0LWJ5dGUgYm91bmRhcnkuIElmIFdEUyBpcyBlbmFibGVkIGFkZCBhbm90aGVyIDYgYnl0ZXMKIAkgKiBhbmQgYWRkIFdEUyBhZGRyZXNzIGluZm9ybWF0aW9uICovCiAJaWYgKGxpa2VseSgoKGxvbmcpIHNrYi0+ZGF0YSAmIDB4MDMpIHwgaW5pdF93ZHMpKSB7Ci0JCS8qIGdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFkZCBhbmQgcmUtYWxsaWduICovCisJCS8qIGdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFkZCBhbmQgcmUtYWxpZ24gKi8KIAkJb2Zmc2V0ID0gKDQgLSAobG9uZykgc2tiLT5kYXRhKSAmIDB4MDM7CiAJCW9mZnNldCArPSBpbml0X3dkcyA/IDYgOiAwOwogCkBAIC0zNDIsNyArMzQyLDcgQEAKIAkJCSBwcml2LT5wY2lfbWFwX3J4X2FkZHJlc3NbaW5kZXhdLAogCQkJIE1BWF9GUkFHTUVOVF9TSVpFX1JYICsgMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCS8qIHVwZGF0ZSB0aGUgc2tiIHN0cnVjdHVyZSBhbmQgYWxsaWduIHRoZSBidWZmZXIgKi8KKwkvKiB1cGRhdGUgdGhlIHNrYiBzdHJ1Y3R1cmUgYW5kIGFsaWduIHRoZSBidWZmZXIgKi8KIAlza2JfcHV0KHNrYiwgc2l6ZSk7CiAJaWYgKG9mZnNldCkgewogCQkvKiBzaGlmdCB0aGUgYnVmZmVyIGFsbG9jYXRpb24gb2Zmc2V0IGJ5dGVzIHRvIGdldCB0aGUgcmlnaHQgZnJhbWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheWN0bC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5Y3RsLmgKaW5kZXggNDlkOWIyNi4uZDc2NDZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5Y3RsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5Y3RsLmgKQEAgLTU3OCw3ICs1NzgsNyBAQAogICAgIFVDSEFSICB2YXJbMV07CiB9OwogCi0vKioqKioqIEVDRiBSZWNlaXZlIENvbnRyb2wgU3R1Y3R1cmUgKFJDUykgQXJlYSBhdCBTaGFyZWQgUkFNIG9mZnNldCAweDA4MDAgICovCisvKioqKioqIEVDRiBSZWNlaXZlIENvbnRyb2wgU3RydWN0dXJlIChSQ1MpIEFyZWEgYXQgU2hhcmVkIFJBTSBvZmZzZXQgMHgwODAwICAqLwogLyogU3RydWN0dXJlcyBmb3IgY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXJzIChyY3MudmFyKSAqLwogc3RydWN0IHJ4X3BhY2tldF9jbWQgewogICAgIFVDSEFSIHJ4X2RhdGFfcHRyWzJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCmluZGV4IDcwYjlhYmIuLjhmYmM1ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKQEAgLTYxNiw3ICs2MTYsNyBAQAogICogUkVBRF9DT05UUk9MOiAwIHdyaXRlIEJCUCwgMSByZWFkIEJCUAogICogQlVTWTogQVNJQyBpcyBidXN5IGV4ZWN1dGluZyBCQlAgY29tbWFuZHMKICAqIEJCUF9QQVJfRFVSOiAwIDQgTUFDIGNsb2NrcywgMSA4IE1BQyBjbG9ja3MKLSAqIEJCUF9SV19NT0RFOiAwIHNlcmlhbCwgMSBwYXJhbGVsbAorICogQkJQX1JXX01PREU6IDAgc2VyaWFsLCAxIHBhcmFsbGVsCiAgKi8KICNkZWZpbmUgQkJQX0NTUl9DRkcJCQkweDEwMWMKICNkZWZpbmUgQkJQX0NTUl9DRkdfVkFMVUUJCUZJRUxEMzIoMHgwMDAwMDBmZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwppbmRleCAyZWU2Y2ViLi5kYmY3NGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCkBAIC0xNTE4LDcgKzE1MTgsNyBAQAogCWlmIChyZi0+Y2hhbm5lbCA+IDE0KSB7CiAJCS8qCiAJCSAqIFdoZW4gVFggcG93ZXIgaXMgYmVsb3cgMCwgd2Ugc2hvdWxkIGluY3JlYXNlIGl0IGJ5IDcgdG8KLQkJICogbWFrZSBpdCBhIHBvc2l0aXZlIHZhbHVlIChNaW51bXVtIHZhbHVlIGlzIC03KS4KKwkJICogbWFrZSBpdCBhIHBvc2l0aXZlIHZhbHVlIChNaW5pbXVtIHZhbHVlIGlzIC03KS4KIAkJICogSG93ZXZlciB0aGlzIG1lYW5zIHRoYXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgNyBoYXZlCiAJCSAqIGRvdWJsZSBtZWFuaW5nLCBhbmQgd2Ugc2hvdWxkIHNldCBhIDdEQm0gYm9vc3QgZmxhZy4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggNGUzNjg2NS4uMzc1MDlkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtNzMwLDggKzczMCwxMiBAQAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODA1MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgwNWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MTVjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODI1YiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDkzNWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MzViKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEJ1ZmZhbG8gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTZmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIENvbmNlcHRyb25pYyAqLwogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCkBAIC04MTgsNiArODIyLDcgQEAKIAkvKiBQZWdhdHJvbiAqLwogCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFBoaWxpcHMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDIwMGYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogUGxhbmV4ICovCkBAIC04OTksNiArOTA0LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDM1NzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogU2l0ZWNvbSAqLwogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBUb3NoaWJhICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwYTA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFppbndlbGwgKi8KIAl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAjZW5kaWYKQEAgLTk2MSw3ICs5NjgsNiBAQAogCXsgVVNCX0RFVklDRSgweDA1YTYsIDB4MDEwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBQbGFuZXggKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUyMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LApAQCAtOTc1LDggKzk4MSw2IEBACiAJLyogU3dlZXggKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAxNTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFRvc2hpYmEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDBhMDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogWnl4ZWwgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCBhMzk0MGQ3Li43ZjEwMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC00ODQsMTMgKzQ4NCwxMyBAQAogCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZTsKIAogCS8qCi0JICogVFNGIHN5bmMgdmFsdWUsIHRoaXMgaXMgZGVwZW5kYW50IG9uIHRoZSBvcGVyYXRpb24gdHlwZS4KKwkgKiBUU0Ygc3luYyB2YWx1ZSwgdGhpcyBpcyBkZXBlbmRlbnQgb24gdGhlIG9wZXJhdGlvbiB0eXBlLgogCSAqLwogCWVudW0gdHNmX3N5bmMgc3luYzsKIAogCS8qCi0JICogVGhlIE1BQyBhbmQgQlNTSUQgYWRkcmVzc2VzcyBhcmUgc2ltcGxlIGFycmF5IG9mIGJ5dGVzLAotCSAqIHRoZXNlIGFycmF5cyBhcmUgbGl0dGxlIGVuZGlhbiwgc28gd2hlbiBzZW5kaW5nIHRoZSBhZGRyZXNzZXNzCisJICogVGhlIE1BQyBhbmQgQlNTSUQgYWRkcmVzc2VzIGFyZSBzaW1wbGUgYXJyYXkgb2YgYnl0ZXMsCisJICogdGhlc2UgYXJyYXlzIGFyZSBsaXR0bGUgZW5kaWFuLCBzbyB3aGVuIHNlbmRpbmcgdGhlIGFkZHJlc3NlcwogCSAqIHRvIHRoZSBkcml2ZXJzLCBjb3B5IHRoZSBpdCBpbnRvIGEgZW5kaWFuLXNpZ25lZCB2YXJpYWJsZS4KIAkgKgogCSAqIE5vdGUgdGhhdCBhbGwgZGV2aWNlcyAoZXhjZXB0IHJ0MjUwMHVzYikgaGF2ZSAzMiBiaXRzCkBAIC0xMTMxLDcgKzExMzEsNyBAQAogICogQGRyb3A6IFRydWUgdG8gZHJvcCBhbGwgcGVuZGluZyBmcmFtZXMuCiAgKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIGZsdXNoIHRoZSBxdWV1ZS4gQWZ0ZXIgdGhpcyBjYWxsCi0gKiB0aGUgcXVldWUgaXMgZ3VhcmVudGVlZCB0byBiZSBlbXB0eS4KKyAqIHRoZSBxdWV1ZSBpcyBndWFyYW50ZWVkIHRvIGJlIGVtcHR5LgogICovCiB2b2lkIHJ0MngwMHF1ZXVlX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgYm9vbCBkcm9wKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCmluZGV4IGU3ZjY3ZDUuLjk0MTZlMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkgKiBOb3RlIHRoYXQgd2hlbiBOVUxMIGlzIHBhc3NlZCBhcyBhZGRyZXNzIHdlIHdpbGwgc2VuZAogCSAqIDAwOjAwOjAwOjAwOjAwIHRvIHRoZSBkZXZpY2UgdG8gY2xlYXIgdGhlIGFkZHJlc3MuCiAJICogVGhpcyB3aWxsIHByZXZlbnQgdGhlIGRldmljZSBiZWluZyBjb25mdXNlZCB3aGVuIGl0IHdhbnRzCi0JICogdG8gQUNLIGZyYW1lcyBvciBjb25zaWRlcmVzIGl0c2VsZiBhc3NvY2lhdGVkLgorCSAqIHRvIEFDSyBmcmFtZXMgb3IgY29uc2lkZXJzIGl0c2VsZiBhc3NvY2lhdGVkLgogCSAqLwogCW1lbXNldChjb25mLm1hYywgMCwgc2l6ZW9mKGNvbmYubWFjKSk7CiAJaWYgKG1hYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwppbmRleCA1ZTkwNzRiLi4zZjU2ODhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAl9CiAKIAkvKgotCSAqIE5PVEU6IEFsd2F5cyBjb3VudCB0aGUgcGF5bG9hZCBhcyB0cmFuc2ZlcmVkLAorCSAqIE5PVEU6IEFsd2F5cyBjb3VudCB0aGUgcGF5bG9hZCBhcyB0cmFuc2ZlcnJlZCwKIAkgKiBldmVuIHdoZW4gYWxpZ25tZW50IHdhcyBzZXQgdG8gemVyby4gVGhpcyBpcyByZXF1aXJlZAogCSAqIGZvciBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBvZmZzZXQgZm9yIHRoZSBJQ1YgZGF0YS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCA5ZGU5ZGJlLi44NGViNmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC0xMDYyLDggKzEwNjIsMTAgQEAKIAkgKiBTdG9wIGFsbCB3b3JrLgogCSAqLwogCWNhbmNlbF93b3JrX3N5bmMoJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJ4ZG9uZV93b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7CisJCWNhbmNlbF93b3JrX3N5bmMoJnJ0MngwMGRldi0+cnhkb25lX3dvcmspOworCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKKwl9CiAJZGVzdHJveV93b3JrcXVldWUocnQyeDAwZGV2LT53b3JrcXVldWUpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCmluZGV4IDVkNmUwYjguLjA2M2ViY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaApAQCAtNTEsNyArNTEsNyBAQAogICogICBbcnQyeDAwZHVtcCBoZWFkZXJdW2hhcmR3YXJlIGRlc2NyaXB0b3JdW2llZWU4MDIuMTEgZnJhbWVdCiAgKgogICogcnQyeDAwZHVtcCBoZWFkZXI6IFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZHVtcGVkIGZyYW1lLCBhcyB3ZWxsIGFzCi0gKglhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHVzZWZ1bGwgZm9yIGRlYnVnZ2luZy4gU2VlICZydDJ4MDBkdW1wX2hkci4KKyAqCWFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIFNlZSAmcnQyeDAwZHVtcF9oZHIuCiAgKiBoYXJkd2FyZSBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yIHRoYXQgd2FzIHVzZWQgdG8gcmVjZWl2ZSBvciB0cmFuc21pdAogICoJdGhlIGZyYW1lLgogICogaWVlZTgwMi4xMSBmcmFtZTogVGhlIGFjdHVhbCBmcmFtZSB0aGF0IHdhcyByZWNlaXZlZCBvciB0cmFuc21pdHRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCmluZGV4IGM5NzViMGEuLjI5YWJmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJLyoqCiAJICogV2hpbGUgc2Nhbm5pbmcsIGxpbmsgdHVuaW5nIGlzIGRpc2FibGVkLiBCeSBkZWZhdWx0CiAJICogdGhlIG1vc3Qgc2Vuc2l0aXZlIHNldHRpbmdzIHdpbGwgYmUgdXNlZCB0byBtYWtlIHN1cmUKLQkgKiB0aGF0IGFsbCBiZWFjb25zIGFuZCBwcm9iZSByZXNwb25zZXMgd2lsbCBiZSByZWNpZXZlZAorCSAqIHRoYXQgYWxsIGJlYWNvbnMgYW5kIHByb2JlIHJlc3BvbnNlcyB3aWxsIGJlIHJlY2VpdmVkCiAJICogZHVyaW5nIHRoZSBzY2FuLgogCSAqLwogCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfU0NBTk5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggNGIzYzcwZS4uNDM1ODA1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogCX0KIAogCS8qCi0JICogV2hlbiBETUEgYWxsb2NhdGlvbiBpcyByZXF1aXJlZCB3ZSBzaG91bGQgZ3VhcmVudGVlIHRvIHRoZQorCSAqIFdoZW4gRE1BIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQgd2Ugc2hvdWxkIGd1YXJhbnRlZSB0byB0aGUKIAkgKiBkcml2ZXIgdGhhdCB0aGUgRE1BIGlzIGFsaWduZWQgdG8gYSA0LWJ5dGUgYm91bmRhcnkuCiAJICogSG93ZXZlciBzb21lIGRyaXZlcnMgcmVxdWlyZSBMMiBwYWRkaW5nIHRvIHBhZCB0aGUgcGF5bG9hZAogCSAqIHJhdGhlciB0aGVuIHRoZSBoZWFkZXIuIFRoaXMgY291bGQgYmUgYSByZXF1aXJlbWVudCBmb3IKQEAgLTY4OSw3ICs2ODksNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pbmRleF9sb2NrLCBpcnFmbGFncyk7CiAKIAkvKgotCSAqIFN0YXJ0IGZyb20gdGhlIFRYIGRvbmUgcG9pbnRlciwgdGhpcyBndWFyZW50ZWVzIHRoYXQgd2Ugd2lsbAorCSAqIFN0YXJ0IGZyb20gdGhlIFRYIGRvbmUgcG9pbnRlciwgdGhpcyBndWFyYW50ZWVzIHRoYXQgd2Ugd2lsbAogCSAqIHNlbmQgb3V0IGFsbCBmcmFtZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCiAJICovCiAJaWYgKGluZGV4X3N0YXJ0IDwgaW5kZXhfZW5kKSB7CkBAIC04ODMsNyArODgzLDcgQEAKIAl9CiAKIAkvKgotCSAqIENoZWNrIGlmIGRyaXZlciBzdXBwb3J0cyBmbHVzaGluZywgd2UgY2FuIG9ubHkgZ3VhcmVudGVlCisJICogQ2hlY2sgaWYgZHJpdmVyIHN1cHBvcnRzIGZsdXNoaW5nLCB3ZSBjYW4gb25seSBndWFyYW50ZWUKIAkgKiBmdWxsIHN1cHBvcnQgZm9yIGZsdXNoaW5nIGlmIHRoZSBkcml2ZXIgaXMgYWJsZQogCSAqIHRvIGNhbmNlbCBhbGwgcGVuZGluZyBmcmFtZXMgKGRyb3AgPSB0cnVlKS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKaW5kZXggMGM4YjBjNi4uMjE3ODYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTM0NCw4ICszNDQsOCBAQAogICoJb25seSBiZSB0b3VjaGVkIGFmdGVyIHRoZSBkZXZpY2UgaGFzIHNpZ25hbGVkIGl0IGlzIGRvbmUgd2l0aCBpdC4KICAqIEBFTlRSWV9EQVRBX1BFTkRJTkc6IFRoaXMgZW50cnkgY29udGFpbnMgYSB2YWxpZCBmcmFtZSBhbmQgaXMgd2FpdGluZwogICoJZm9yIHRoZSBzaWduYWwgdG8gc3RhcnQgc2VuZGluZy4KLSAqIEBFTlRSWV9EQVRBX0lPX0ZBSUxFRDogSGFyZHdhcmUgaW5kaWNhdGVkIHRoYXQgYW4gSU8gZXJyb3Igb2NjdXJlZAotICoJd2hpbGUgdHJhbnNmZXJpbmcgdGhlIGRhdGEgdG8gdGhlIGhhcmR3YXJlLiBObyBUWCBzdGF0dXMgcmVwb3J0IHdpbGwKKyAqIEBFTlRSWV9EQVRBX0lPX0ZBSUxFRDogSGFyZHdhcmUgaW5kaWNhdGVkIHRoYXQgYW4gSU8gZXJyb3Igb2NjdXJyZWQKKyAqCXdoaWxlIHRyYW5zZmVycmluZyB0aGUgZGF0YSB0byB0aGUgaGFyZHdhcmUuIE5vIFRYIHN0YXR1cyByZXBvcnQgd2lsbAogICoJYmUgZXhwZWN0ZWQgZnJvbSB0aGUgaGFyZHdhcmUuCiAgKiBARU5UUllfREFUQV9TVEFUVVNfUEVORElORzogVGhlIGVudHJ5IGhhcyBiZWVuIHNlbmQgdG8gdGhlIGRldmljZSBhbmQKICAqCXJldHVybmVkLiBJdCBpcyBub3cgd2FpdGluZyBmb3IgdGhlIHN0YXR1cyByZXBvcnRpbmcgYmVmb3JlIHRoZQpAQCAtMzY1LDcgKzM2NSw3IEBACiAgKiBAZmxhZ3M6IEVudHJ5IGZsYWdzLCBzZWUgJmVudW0gcXVldWVfZW50cnlfZmxhZ3MuCiAgKiBAcXVldWU6IFRoZSBkYXRhIHF1ZXVlICgmc3RydWN0IGRhdGFfcXVldWUpIHRvIHdoaWNoIHRoaXMgZW50cnkgYmVsb25ncy4KICAqIEBza2I6IFRoZSBidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkIChmb3IgVFggcXVldWUpLAotICoJb3IgdXNlZCB0byBkaXJlY3RseSByZWNpZXZlIGRhdGEgaW4gKGZvciBSWCBxdWV1ZSkuCisgKglvciB1c2VkIHRvIGRpcmVjdGx5IHJlY2VpdmUgZGF0YSBpbiAoZm9yIFJYIHF1ZXVlKS4KICAqIEBlbnRyeV9pZHg6IFRoZSBlbnRyeSBpbmRleCBudW1iZXIuCiAgKiBAcHJpdl9kYXRhOiBQcml2YXRlIGRhdGEgYmVsb25naW5nIHRvIHRoaXMgcXVldWUgZW50cnkuIFRoZSBwb2ludGVyCiAgKglwb2ludHMgdG8gZGF0YSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgZHJpdmVyIGFuZCBxdWV1ZSB0eXBlLgpAQCAtMzg4LDcgKzM4OCw3IEBACiAgKiBAUV9JTkRFWDogSW5kZXggcG9pbnRlciB0byB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgcXVldWUsIGlmIHRoaXMgZW50cnkgaXMKICAqCW93bmVkIGJ5IHRoZSBoYXJkd2FyZSB0aGVuIHRoZSBxdWV1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIGZ1bGwuCiAgKiBAUV9JTkRFWF9ETUFfRE9ORTogSW5kZXggcG9pbnRlciBmb3IgdGhlIG5leHQgZW50cnkgd2hpY2ggd2lsbCBoYXZlIGJlZW4KLSAqCXRyYW5zZmVyZWQgdG8gdGhlIGhhcmR3YXJlLgorICoJdHJhbnNmZXJyZWQgdG8gdGhlIGhhcmR3YXJlLgogICogQFFfSU5ERVhfRE9ORTogSW5kZXggcG9pbnRlciB0byB0aGUgbmV4dCBlbnRyeSB3aGljaCB3aWxsIGJlIGNvbXBsZXRlZCBieQogICoJdGhlIGhhcmR3YXJlIGFuZCBmb3Igd2hpY2ggd2UgbmVlZCB0byBydW4gdGhlIHR4ZG9uZSBoYW5kbGVyLiBJZiB0aGlzCiAgKgllbnRyeSBpcyBub3Qgb3duZWQgYnkgdGhlIGhhcmR3YXJlIHRoZSBxdWV1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIGVtcHR5LgpAQCAtNjI3LDcgKzYyNyw3IEBACiB9CiAKIC8qKgotICogcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQgLSBDaGVjayBpZiBhIHRpbWVvdXQgb2NjdXJlZCBmb3IgU1RBVFVTIHJlcG9ydHMKKyAqIHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0IC0gQ2hlY2sgaWYgYSB0aW1lb3V0IG9jY3VycmVkIGZvciBTVEFUVVMgcmVwb3J0cwogICogQHF1ZXVlOiBRdWV1ZSB0byBjaGVjay4KICAqLwogc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQpAQCAtNjM3LDcgKzYzNyw3IEBACiB9CiAKIC8qKgotICogcnQyeDAwcXVldWVfdGltZW91dCAtIENoZWNrIGlmIGEgdGltZW91dCBvY2N1cmVkIGZvciBETUEgdHJhbnNmZXJzCisgKiBydDJ4MDBxdWV1ZV90aW1lb3V0IC0gQ2hlY2sgaWYgYSB0aW1lb3V0IG9jY3VycmVkIGZvciBETUEgdHJhbnNmZXJzCiAgKiBAcXVldWU6IFF1ZXVlIHRvIGNoZWNrLgogICovCiBzdGF0aWMgaW5saW5lIGludCBydDJ4MDBxdWV1ZV9kbWFfdGltZW91dChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKaW5kZXggZmJlNzM1Zi4uMzZmMzg4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJLyoKIAkgKiBJZiB0aGUgdHJhbnNmZXIgdG8gaGFyZHdhcmUgc3VjY2VlZGVkLCBpdCBkb2VzIG5vdCBtZWFuIHRoZQogCSAqIGZyYW1lIHdhcyBzZW5kIG91dCBjb3JyZWN0bHkuIEl0IG9ubHkgbWVhbnMgdGhlIGZyYW1lCi0JICogd2FzIHN1Y2Nlc2Z1bGx5IHB1c2hlZCB0byB0aGUgaGFyZHdhcmUsIHdlIGhhdmUgbm8KKwkgKiB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZCB0byB0aGUgaGFyZHdhcmUsIHdlIGhhdmUgbm8KIAkgKiB3YXkgdG8gZGV0ZXJtaW5lIHRoZSB0cmFuc21pc3Npb24gc3RhdHVzIHJpZ2h0IG5vdy4KIAkgKiAoT25seSBpbmRpcmVjdGx5IGJ5IGxvb2tpbmcgYXQgdGhlIGZhaWxlZCBUWCBjb3VudGVycwogCSAqIGluIHRoZSByZWdpc3RlcikuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKaW5kZXggNmFhZjUxZi4uZTExYzc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaApAQCAtNDAwLDcgKzQwMCw3IEBACiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgogICoKICAqIENoZWNrIHRoZSBoZWFsdGggb2YgdGhlIFVTQiBjb21tdW5pY2F0aW9uIGFuZCBkZXRlcm1pbmUKLSAqIGlmIHRpbWVvdXRzIGhhdmUgb2NjdXJlZC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhpcyBmdW5jdGlvbgorICogaWYgdGltZW91dHMgaGF2ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhpcyBmdW5jdGlvbgogICogd2lsbCByZXNldCBhbGwgY29tbXVuaWNhdGlvbiB0byByZXN0b3JlIGZ1bmN0aW9uYWxpdHkgYWdhaW4uCiAgKi8KIHZvaWQgcnQyeDAwdXNiX3dhdGNoZG9nKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuYwppbmRleCBiYjBjNzgxLi4wZDdkOTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCQkgKmJlY2F1c2UgaHcgd2lsbCBuZXJ2ZXIgdXNlIGh3X3JhdGUKIAkJCSAqd2hlbiB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gZmFsc2UKIAkJCSAqc28gd2UgbmV2ZXIgc2V0IGhpZ2hlc3QgTiByYXRlIGhlcmUsCi0JCQkgKmFuZCBOIHJhdGUgd2lsbCBhbGwgYmUgY29udHJvbGVkIGJ5IEZXCisJCQkgKmFuZCBOIHJhdGUgd2lsbCBhbGwgYmUgY29udHJvbGxlZCBieSBGVwogCQkJICp3aGVuIHRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUgPSBmYWxzZQogCQkJICovCiAJCQlpZiAocnRsbWFjLT5odF9lbmFibGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYwppbmRleCBmNzRhODcwLi41OTBmMTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCkBAIC02ODUsNyArNjg1LDcgQEAKIAogCXU4IGVmdXNlX2RhdGEsIHdvcmRfY250cyA9IDA7CiAJdTE2IGVmdXNlX2FkZHIgPSAwOwotCXU4IGh3b3JkZW47CisJdTggaHdvcmRlbiA9IDA7CiAJdTggdG1wZGF0YVs4XTsKIAogCWlmIChkYXRhID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCA5Y2Q3NzAzLi41OTM4ZjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTM5NSw3ICszOTUsNyBAQAogCSAqIDAgLSBEaXNhYmxlIEFTUE0sCiAJICogMSAtIEVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxLAogCSAqIDIgLSBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKLQkgKiAzIC0gQWx3eWFzIEVuYWJsZSBBU1BNIHdpdGggQ2xvY2sgUmVxLAorCSAqIDMgLSBBbHdheXMgRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCiAJICogNCAtIEFsd2F5cyBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcS4KIAkgKiBzZXQgZGVmdWx0IHRvIFJUTDgxOTJDRTozIFJUTDgxOTJFOjIKIAkgKiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYwppbmRleCAzMzM2Y2E5Li5kMjZmOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJfQogCiAJLyoKLQkgKklmIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNpZXZlZCBjaGVjayBpdHMgcnVsZSBmb3IgdGhpcworCSAqSWYgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2VpdmVkIGNoZWNrIGl0cyBydWxlIGZvciB0aGlzCiAJICpjaGFubmVsIGZpcnN0IGJlZm9yZSBlbmFibGluZyBhY3RpdmUgc2Nhbi4gVGhlIHBhc3NpdmUgc2NhbgogCSAqd291bGQgaGF2ZSBiZWVuIGVuZm9yY2VkIGJ5IHRoZSBpbml0aWFsIHByb2Nlc3Npbmcgb2Ygb3VyCiAJICpjdXN0b20gcmVndWxhdG9yeSBkb21haW4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uYwppbmRleCA1ZWY5MTM3Li4yOGE2Y2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCXUxNiBib3hfcmVnLCBib3hfZXh0cmVnOwogCXU4IHUxYl90bXA7CiAJYm9vbCBpc2Z3X3JlYWQgPSBmYWxzZTsKLQl1OCBidWZfaW5kZXg7CisJdTggYnVmX2luZGV4ID0gMDsKIAlib29sIGJ3cml0ZV9zdWNlc3MgPSBmYWxzZTsKIAl1OCB3YWl0X2gyY19saW1taXQgPSAxMDA7CiAJdTggd2FpdF93cml0ZWgyY19saW1taXQgPSAxMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuYwppbmRleCBhNGIyNjEzLi5mNWQ4NTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvdXNiLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiBzdGF0aWMgdm9pZCBfcnRsX3VzYl9pb19oYW5kbGVyX3JlbGVhc2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHJpdiBfX21heWJlX3VudXNlZCAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAogCW11dGV4X2Rlc3Ryb3koJnJ0bHByaXYtPmlvLmJiX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS93aWZpLmgKaW5kZXggMDEyMjZmOC4uMDdkYjk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS93aWZpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS93aWZpLmgKQEAgLTE1NTUsNyArMTU1NSw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgIEJsdWV0b290aCBDby1leGlzdGFuY2UgUmVsYXRlZAorICAgIEJsdWV0b290aCBDby1leGlzdGVuY2UgUmVsYXRlZAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogZW51bSBidF9hbnRfbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9jbWQuYwppbmRleCAwYWRlNGJkLi44MWYxNjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2NtZC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKICAqIEB3bDogd2wgc3RydWN0CiAgKiBAaWQ6IGFjeCBpZAogICogQGJ1ZjogYnVmZmVyIGZvciB0aGUgcmVzcG9uc2UsIGluY2x1ZGluZyBhbGwgaGVhZGVycywgbXVzdCB3b3JrIHdpdGggZG1hCi0gKiBAbGVuOiBsZW5naHQgb2YgYnVmCisgKiBAbGVuOiBsZW5ndGggb2YgYnVmCiAgKi8KIGludCB3bDEyNTFfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3J4LmMKaW5kZXggYzFiM2IzZi4uNmFmMzUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3J4LmMKQEAgLTE3OSw3ICsxNzksNyBAQAogCXJ4X2J1ZmZlciA9IHNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCXdsMTI1MV9tZW1fcmVhZCh3bCwgcnhfcGFja2V0X3JpbmdfYWRkciwgcnhfYnVmZmVyLCBsZW5ndGgpOwogCi0JLyogVGhlIGFjdHVhbCBsZW5naHQgZG9lc24ndCBpbmNsdWRlIHRoZSB0YXJnZXQncyBhbGlnbm1lbnQgKi8KKwkvKiBUaGUgYWN0dWFsIGxlbmd0aCBkb2Vzbid0IGluY2x1ZGUgdGhlIHRhcmdldCdzIGFsaWdubWVudCAqLwogCXNrYi0+bGVuID0gZGVzYy0+bGVuZ3RoICAtIFBMQ1BfSEVBREVSX0xFTkdUSDsKIAogCWZjID0gKHUxNiAqKXNrYi0+ZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYwppbmRleCBmMGFhN2FiLi45NjMyNDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5jCkBAIC0zNTksNyArMzU5LDcgQEAKICAqIEB3bDogd2wgc3RydWN0CiAgKiBAaWQ6IGFjeCBpZAogICogQGJ1ZjogYnVmZmVyIGZvciB0aGUgcmVzcG9uc2UsIGluY2x1ZGluZyBhbGwgaGVhZGVycywgbXVzdCB3b3JrIHdpdGggZG1hCi0gKiBAbGVuOiBsZW5naHQgb2YgYnVmCisgKiBAbGVuOiBsZW5ndGggb2YgYnVmCiAgKi8KIGludCB3bDEyNzFfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCmluZGV4IDg1NmE4YTIuLjhhODMyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaApAQCAtNDk3LDcgKzQ5Nyw3IEBACiAjZGVmaW5lIENPTkZfVFhfUkFURV9SRVRSWV9MSU1JVCAgICAgICAxMAogCiAvKgotICogUmF0ZXMgc3VwcG9ydGVkIGZvciBkYXRhIHBhY2tldHMgd2hlbiBvcGVyYXRpbmcgYXMgQVAuIE5vdGUgdGhlIGFic2Vuc2UKKyAqIFJhdGVzIHN1cHBvcnRlZCBmb3IgZGF0YSBwYWNrZXRzIHdoZW4gb3BlcmF0aW5nIGFzIEFQLiBOb3RlIHRoZSBhYnNlbmNlCiAgKiBvZiB0aGUgMjJNYnBzIHJhdGUuIFRoZXJlIGlzIGEgRlcgbGltaXRhdGlvbiBvbiAxMiByYXRlcyBzbyB3ZSBtdXN0IGRyb3AKICAqIG9uZS4gVGhlIHJhdGUgZHJvcHBlZCBpcyBub3QgbWFuZGF0b3J5IHVuZGVyIGFueSBvcGVyYXRpbmcgbW9kZS4KICAqLwpAQCAtNTcyLDcgKzU3Miw3IEBACiAJQ09ORl9UWF9BQ19CSyA9IDEsICAgICAgICAgLyogYmFja2dyb3VuZCAqLwogCUNPTkZfVFhfQUNfVkkgPSAyLCAgICAgICAgIC8qIHZpZGVvICovCiAJQ09ORl9UWF9BQ19WTyA9IDMsICAgICAgICAgLyogdm9pY2UgKi8KLQlDT05GX1RYX0FDX0NUUzJTRUxGID0gNCwgICAvKiBmaWN0aW91cyBBQywgZm9sbG93cyBBQ19WTyAqLworCUNPTkZfVFhfQUNfQ1RTMlNFTEYgPSA0LCAgIC8qIGZpY3RpdGlvdXMgQUMsIGZvbGxvd3MgQUNfVk8gKi8KIAlDT05GX1RYX0FDX0FOWV9USUQgPSAweDFmCiB9OwogCkBAIC0xMTY5LDcgKzExNjksNyBAQAogCiAJLyoKIAkgKiBNaW5pbXVtIHJlcXVpcmVkIGZyZWUgdHggbWVtb3J5IGJsb2NrcyBpbiBvcmRlciB0byBhc3N1cmUgb3B0aW11bQotCSAqIHBlcmZvcm1lbmNlCisJICogcGVyZm9ybWFuY2UKIAkgKgogCSAqIFJhbmdlOiAwLTEyMAogCSAqLwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKIAogCS8qCiAJICogTWluaW11bSByZXF1aXJlZCBmcmVlIHJ4IG1lbW9yeSBibG9ja3MgaW4gb3JkZXIgdG8gYXNzdXJlIG9wdGltdW0KLQkgKiBwZXJmb3JtZW5jZQorCSAqIHBlcmZvcm1hbmNlCiAJICoKIAkgKiBSYW5nZTogMC0xMjAKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmgKaW5kZXggYzFhYWM4Mi4uMDBjNzcxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmgKQEAgLTk0LDcgKzk0LDcgQEAKIAkgKiB0cmFuc2xhdGVkIHJlZ2lvbi4KIAkgKgogCSAqIFRoZSB0cmFuc2xhdGVkIHJlZ2lvbnMgb2NjdXIgbmV4dCB0byBlYWNoIG90aGVyIGluIHBoeXNpY2FsIGRldmljZQotCSAqIG1lbW9yeSwgc28ganVzdCBhZGQgdGhlIHNpemVzIG9mIHRoZSBwcmVjZWVkaW5nIGFkZHJlc3MgcmVnaW9ucyB0bworCSAqIG1lbW9yeSwgc28ganVzdCBhZGQgdGhlIHNpemVzIG9mIHRoZSBwcmVjZWRpbmcgYWRkcmVzcyByZWdpb25zIHRvCiAJICogZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIG5ldyByZWdpb24uCiAJICoKIAkgKiBDdXJyZW50bHksIG9ubHkgdGhlIHR3byBmaXJzdCByZWdpb25zIGFyZSBhZGRyZXNzZWQsIGFuZCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpby5jCmluZGV4IDViOWRiZWEuLmIxYzdkMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYwpAQCAtMzQwLDcgKzM0MCw3IEBACiBtb2R1bGVfZXhpdCh3bDEyNzFfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMdWNpYW5vIENvZWxobyA8Y29lbGhvQHRpLmNvbT4iKTsKIE1PRFVMRV9BVVRIT1IoIkp1dXNvIE9pa2FyaW5lbiA8anV1c28ub2lrYXJpbmVuQG5va2lhLmNvbT4iKTsKIE1PRFVMRV9GSVJNV0FSRShXTDEyNzFfRldfTkFNRSk7CiBNT0RVTEVfRklSTVdBUkUoV0wxMjcxX0FQX0ZXX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCmluZGV4IDE4Y2YwMTcuLmZmYzc0NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogbW9kdWxlX2V4aXQod2wxMjcxX2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPiIpOworTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGNvZWxob0B0aS5jb20+Iik7CiBNT0RVTEVfQVVUSE9SKCJKdXVzbyBPaWthcmluZW4gPGp1dXNvLm9pa2FyaW5lbkBub2tpYS5jb20+Iik7CiBNT0RVTEVfRklSTVdBUkUoV0wxMjcxX0ZXX05BTUUpOwogTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9BUF9GV19OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMKaW5kZXggZTY0NDAzYi4uNmVjMDZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMKQEAgLTIwNCw3ICsyMDQsMTAgQEAKIAogCWtmcmVlKHdsLT5udnMpOwogCi0Jd2wtPm52cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bC0+bnZzID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghd2wtPm52cykgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOwogCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYwppbmRleCAzZTViZWZlNC4uZmMwOGYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogICogIFwgICAgICAgICAgICAgICBcLSBJRUVFIDgwMi4xMSAtLyBcLS0tLS0tLS0tLS0tLS0gbGVuIC0tLS0tLS0tLS0tLS0tLwogICogICBcLXN0cnVjdCB3bDM1MDFfODAyMTFfdHhfaGRyLS0vICAgXC0tLS0tLS0tIEV0aGVybmV0IEZyYW1lIC0tLS0tLS0vCiAgKgotICogUmV0dXJuID0gUG9zdGlvbiBpbiBDYXJkCisgKiBSZXR1cm4gPSBQb3NpdGlvbiBpbiBDYXJkCiAgKi8KIHN0YXRpYyB1MTYgd2wzNTAxX2dldF90eF9idWZmZXIoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1MTYgbGVuKQogewpAQCAtMTkzMiw3ICsxOTMyLDcgQEAKIAl0aGlzLT5iYXNlX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAogCWlmICghd2wzNTAxX2dldF9mbGFzaF9tYWNfYWRkcih0aGlzKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FudCByZWFkIE1BQyBhZGRyIGluIGZsYXNoIFJPTT9cbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCByZWFkIE1BQyBhZGRyIGluIGZsYXNoIFJPTT9cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3JmMjk1OS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKaW5kZXggMDU5N2Q4Ni4uZTM2MTE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCQl7IENSODUsICAweDAwIH0sIHsgQ1I4NiwgIDB4MTAgfSwgeyBDUjg3LCAgMHgyQSB9LAogCQl7IENSODgsICAweDEwIH0sIHsgQ1I4OSwgIDB4MjQgfSwgeyBDUjkwLCAgMHgxOCB9LAogCQkvKiB7IENSOTEsICAweDE4IH0sICovCi0JCS8qIHNob3VsZCBzb2x2ZSBjb250aW5vdXMgQ1RTIGZyYW1lIHByb2JsZW1zICovCisJCS8qIHNob3VsZCBzb2x2ZSBjb250aW51b3VzIENUUyBmcmFtZSBwcm9ibGVtcyAqLwogCQl7IENSOTEsICAweDAwIH0sCiAJCXsgQ1I5MiwgIDB4MGEgfSwgeyBDUjkzLCAgMHgwMCB9LCB7IENSOTQsICAweDAxIH0sCiAJCXsgQ1I5NSwgIDB4MDAgfSwgeyBDUjk2LCAgMHg0MCB9LCB7IENSOTcsICAweDM3IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl91dzI0NTMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCmluZGV4IDllNzRlYjEuLmJhMGEwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAl9OwogCiAJc3RhdGljIGNvbnN0IHUzMiBydltdID0gewotCQlVVzI0NTNfUkVHV1JJVEUoNCwgMHgyYiksICAgIC8qIGNvbmZpZ3VyZSByZWNpZXZlciBnYWluICovCisJCVVXMjQ1M19SRUdXUklURSg0LCAweDJiKSwgICAgLyogY29uZmlndXJlIHJlY2VpdmVyIGdhaW4gKi8KIAkJVVcyNDUzX1JFR1dSSVRFKDUsIDB4MTllNGYpLCAvKiBjb25maWd1cmUgdHJhbnNtaXR0ZXIgZ2FpbiAqLwogCQlVVzI0NTNfUkVHV1JJVEUoNiwgMHhmODFhZCksIC8qIGVuYWJsZSBSWC9UWCBmaWx0ZXIgdHVuaW5nICovCiAJCVVXMjQ1M19SRUdXUklURSg3LCAweDNmZmZlKSwgLyogZGlzYWJsZSBUWCBnYWluIGluIHRlc3QgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCA1ODIzNmU2Li5hYjYwN2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtNjQzLDcgKzY0Myw3IEBACiAJdXNiID0gdXJiLT5jb250ZXh0OwogCXJ4ID0gJnVzYi0+cng7CiAKLQl6ZF91c2JfcmVzZXRfcnhfaWRsZV90aW1lcih1c2IpOworCXRhc2tsZXRfc2NoZWR1bGUoJnJ4LT5yZXNldF90aW1lcl90YXNrbGV0KTsKIAogCWlmIChsZW5ndGglcngtPnVzYl9wYWNrZXRfc2l6ZSA+IHJ4LT51c2JfcGFja2V0X3NpemUtNCkgewogCQkvKiBJZiB0aGVyZSBpcyBhbiBvbGQgZmlyc3QgZnJhZ21lbnQsIHdlIGRvbid0IGNhcmUuICovCkBAIC04MTIsNiArODEyLDcgQEAKIAlfX3pkX3VzYl9kaXNhYmxlX3J4KHVzYik7CiAJbXV0ZXhfdW5sb2NrKCZyeC0+c2V0dXBfbXV0ZXgpOwogCisJdGFza2xldF9raWxsKCZyeC0+cmVzZXRfdGltZXJfdGFza2xldCk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyeC0+aWRsZV93b3JrKTsKIH0KIApAQCAtMTEwNiw2ICsxMTA3LDEzIEBACiAJemRfdXNiX3Jlc2V0X3J4KHVzYik7CiB9CiAKK3N0YXRpYyB2b2lkIHpkX3VzYl9yZXNldF9yeF9pZGxlX3RpbWVyX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgemRfdXNiICp1c2IgPSAoc3RydWN0IHpkX3VzYiAqKXBhcmFtOworCisJemRfdXNiX3Jlc2V0X3J4X2lkbGVfdGltZXIodXNiKTsKK30KKwogdm9pZCB6ZF91c2JfcmVzZXRfcnhfaWRsZV90aW1lcihzdHJ1Y3QgemRfdXNiICp1c2IpCiB7CiAJc3RydWN0IHpkX3VzYl9yeCAqcnggPSAmdXNiLT5yeDsKQEAgLTExMjcsNiArMTEzNSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF91c2Jfcngoc3RydWN0IHpkX3VzYiAqdXNiKQogewogCXN0cnVjdCB6ZF91c2JfcnggKnJ4ID0gJnVzYi0+cng7CisKIAlzcGluX2xvY2tfaW5pdCgmcngtPmxvY2spOwogCW11dGV4X2luaXQoJnJ4LT5zZXR1cF9tdXRleCk7CiAJaWYgKGludGVyZmFjZV90b191c2JkZXYodXNiLT5pbnRmKS0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKQEAgLTExMzYsMTEgKzExNDUsMTQgQEAKIAl9CiAJWkRfQVNTRVJUKHJ4LT5mcmFnbWVudF9sZW5ndGggPT0gMCk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnJ4LT5pZGxlX3dvcmssIHpkX3J4X2lkbGVfdGltZXJfaGFuZGxlcik7CisJcngtPnJlc2V0X3RpbWVyX3Rhc2tsZXQuZnVuYyA9IHpkX3VzYl9yZXNldF9yeF9pZGxlX3RpbWVyX3Rhc2tsZXQ7CisJcngtPnJlc2V0X3RpbWVyX3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVzYjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfdXNiX3R4KHN0cnVjdCB6ZF91c2IgKnVzYikKIHsKIAlzdHJ1Y3QgemRfdXNiX3R4ICp0eCA9ICZ1c2ItPnR4OworCiAJc3Bpbl9sb2NrX2luaXQoJnR4LT5sb2NrKTsKIAlhdG9taWNfc2V0KCZ0eC0+ZW5hYmxlZCwgMCk7CiAJdHgtPnN0b3BwZWQgPSAwOwpAQCAtMTY3MSw2ICsxNjgzLDEwIEBACiAKIAlpZiAodXJiLT5zdGF0dXMgJiYgIXVzYi0+Y21kX2Vycm9yKQogCQl1c2ItPmNtZF9lcnJvciA9IHVyYi0+c3RhdHVzOworCisJaWYgKCF1c2ItPmNtZF9lcnJvciAmJgorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJdXNiLT5jbWRfZXJyb3IgPSAtRUlPOwogfQogCiBzdGF0aWMgaW50IHpkX3N1Ym1pdF93YWl0aW5nX3VyYihzdHJ1Y3QgemRfdXNiICp1c2IsIGJvb2wgbGFzdCkKQEAgLTE4MDUsNyArMTgyMSw3IEBACiAJdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVkZXYsIHVzYl9zbmRpbnRwaXBlKHVkZXYsIEVQX1JFR1NfT1VUKSwKIAkJCSByZXEsIHJlcV9sZW4sIGlvd3JpdGUxNnZfdXJiX2NvbXBsZXRlLCB1c2IsCiAJCQkgZXAtPmRlc2MuYkludGVydmFsKTsKLQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9GUkVFX0JVRkZFUiB8IFVSQl9TSE9SVF9OT1RfT0s7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfRlJFRV9CVUZGRVI7CiAKIAkvKiBTdWJtaXQgcHJldmlvdXMgVVJCICovCiAJciA9IHpkX3N1Ym1pdF93YWl0aW5nX3VyYih1c2IsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKaW5kZXggYjNkZjJjOC4uMzI1ZDBmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKQEAgLTE4Myw2ICsxODMsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBpZGxlX3dvcms7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJlc2V0X3RpbWVyX3Rhc2tsZXQ7CiAJdTggZnJhZ21lbnRbMiAqIFVTQl9NQVhfUlhfU0laRV07CiAJdW5zaWduZWQgaW50IGZyYWdtZW50X2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgdXNiX3BhY2tldF9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwppbmRleCAyNjQyYWY0Li4zNzI1NzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYworKysgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwpAQCAtNzg2LDcgKzc4Niw3IEBACiAgKiBAcmVnOglyZWdpc3RlciBudW1iZXIgdG8gd3JpdGUgdG8KICAqIEB2YWw6CXZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlciBudW1iZXIgc3BlY2lmaWVkIGJ5IHJlZwogICoKLSAqIFRoaXMgZnVjbnRpb24gd2FpdHMgdGlsbCB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBNRElPCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHRpbGwgdGhlIGRldmljZSBpcyByZWFkeSB0byBhY2NlcHQgYSBuZXcgTURJTwogICogcmVxdWVzdCBhbmQgdGhlbiB3cml0ZXMgdGhlIHZhbCB0byB0aGUgTURJTyBXcml0ZSBEYXRhIHJlZ2lzdGVyLgogICovCiBzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96bmV0LmMgYi9kcml2ZXJzL25ldC96bmV0LmMKaW5kZXggYWUwN2IzZC4uZWMyODAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3puZXQuYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAkJCQkvKiBUcmFuc2NlaXZlciBtYXkgYmUgc3R1Y2sgaWYgY2FibGUKLQkJCQkgKiB3YXMgcmVtb3ZlZCB3aGlsZSBlbWl0aW5nIGEKKwkJCQkgKiB3YXMgcmVtb3ZlZCB3aGlsZSBlbWl0dGluZyBhCiAJCQkJICogcGFja2V0LiBGbGlwIGl0IG9mZiwgdGhlbiBvbiB0bwogCQkJCSAqIHJlc2V0IGl0LiBUaGlzIGlzIHZlcnkgZW1waXJpY2FsLAogCQkJCSAqIGJ1dCBpdCBzZWVtcyB0byB3b3JrLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvem9ycm84MzkwLmMgYi9kcml2ZXJzL25ldC96b3JybzgzOTAuYwppbmRleCBiNzhhMzhkLi44YzdjNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96b3JybzgzOTAuYworKysgYi9kcml2ZXJzL25ldC96b3JybzgzOTAuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKICAgICBib2FyZCA9IHotPnJlc291cmNlLnN0YXJ0OwogICAgIGlvYWRkciA9IGJvYXJkK2NhcmRzW2ldLm9mZnNldDsKLSAgICBkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKyAgICBkZXYgPSBfX19fYWxsb2NfZWlfbmV0ZGV2KDApOwogICAgIGlmICghZGV2KQogCXJldHVybiAtRU5PTUVNOwogICAgIGlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGlvYWRkciwgTkVfSU9fRVhURU5UKjIsIERSVl9OQU1FKSkgewpAQCAtMTQ2LDE1ICsxNDYsMTUgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgem9ycm84MzkwX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IHpvcnJvODM5MF9vcGVuLAogCS5uZG9fc3RvcAkJPSB6b3JybzgzOTBfY2xvc2UsCi0JLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCi0JLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBfX2VpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IF9fZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBfX2VpX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IF9fZWlfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBfX2VpX3BvbGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvZmR0LmMgYi9kcml2ZXJzL29mL2ZkdC5jCmluZGV4IGM5ZGI0OWMuLjhiNjNhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZmR0LmMKKysrIGIvZHJpdmVycy9vZi9mZHQuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAKIAllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7CiAKLQkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KKwkvKiBSZXRyaWV2ZSBjb21tYW5kIGxpbmUgKi8KIAlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7CiAJaWYgKHAgIT0gTlVMTCAmJiBsID4gMCkKIAkJc3RybGNweShjbWRfbGluZSwgcCwgbWluKChpbnQpbCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKaW5kZXggZGNkNzg1Ny4uZDM1ZTMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9tZGlvLmMKKysrIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogICogQGhuZGxyOiBMaW5rIHN0YXRlIGNhbGxiYWNrIGZvciB0aGUgbmV0d29yayBkZXZpY2UKICAqIEBpZmFjZTogUEhZIGRhdGEgaW50ZXJmYWNlIHR5cGUKICAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGh5X2RldmljZSBpZiBzdWNjZXNzZnVsbC4gIE5VTEwgb3RoZXJ3aXNlCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGh5X2RldmljZSBpZiBzdWNjZXNzZnVsLiAgTlVMTCBvdGhlcndpc2UKICAqLwogc3RydWN0IHBoeV9kZXZpY2UgKm9mX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ucCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYyBiL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYwppbmRleCAxMDYyYjhmLi4yNDZhOTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKICAqIEBlbnRyeTogQSBwb2ludGVyIHRvIGFuIGFsbG9jYXRlZCBwZGNzcGF0aF9lbnRyeS4KICAqIAogICogVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IHlvdSBkb24ndCByZWFkIGZyb20gdGhlIFN0YWJsZSBTdG9yYWdlIGV2ZXJ5IHRpbWUKLSAqIHlvdSBhY2Nlc3MgdGhlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBmYWNpbGl0ZXMuIFdlIHN0b3JlIGEgY29weSBvZiB0aGUKKyAqIHlvdSBhY2Nlc3MgdGhlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBmYWNpbGl0aWVzLiBXZSBzdG9yZSBhIGNvcHkgb2YgdGhlCiAgKiBjb250ZW50IG9mIHRoZSBzdGFibGUgc3RvcmFnZSBXUlQgdmFyaW91cyBwYXRocyBpbiB0aGVzZSBzdHJ1Y3RzLiBXZSByZWFkCiAgKiB0aGVzZSBzdHJ1Y3RzIHdoZW4gcmVhZGluZyB0aGUgZmlsZXMsIGFuZCB3ZSB3aWxsIHdyaXRlIHRvIHRoZXNlIHN0cnVjdHMgd2hlbgogICogd3JpdGluZyB0byB0aGUgZmlsZXMsIGFuZCBvbmx5IHRoZW4gd3JpdGUgdGhlbSBiYWNrIHRvIHRoZSBTdGFibGUgU3RvcmFnZS4KQEAgLTIxMyw3ICsyMTMsNyBAQAogCiAJLyogYWRkciwgZGV2cGF0aCBhbmQgY291bnQgbXVzdCBiZSB3b3JkIGFsaWduZWQgKi8KIAlpZiAocGRjX3N0YWJsZV93cml0ZShlbnRyeS0+YWRkciwgZGV2cGF0aCwgc2l6ZW9mKCpkZXZwYXRoKSkgIT0gUERDX09LKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGFuIGVycm9yIG9jY3VyZWQgd2hlbiB3cml0aW5nIHRvIFBEQy5cbiIKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYW4gZXJyb3Igb2NjdXJyZWQgd2hlbiB3cml0aW5nIHRvIFBEQy5cbiIKIAkJCQkiSXQgaXMgbGlrZWx5IHRoYXQgdGhlIFN0YWJsZSBTdG9yYWdlIGRhdGEgaGFzIGJlZW4gY29ycnVwdGVkLlxuIgogCQkJCSJQbGVhc2UgY2hlY2sgaXQgY2FyZWZ1bGx5IHVwb24gbmV4dCByZWJvb3QuXG4iLCBfX2Z1bmNfXyk7CiAJCVdBUk5fT04oMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCmluZGV4IDg1NWYzODkuLmQ5MjE4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkgIHRoZSBBWDg4Nzk2IG5ldHdvcmsgY29udHJvbGxlciBjaGlwLiBUaGlzIGNvZGUgaXMgYWxzbyBhdmFpbGFibGUKIAkgIGFzIGEgbW9kdWxlIChzYXkgTSksIGNhbGxlZCBwYXJwb3J0X2F4ODg3OTYuCiAKLQkgIFRoZSBkcml2ZXIgaXMgbm90IGRlcGVuZGFudCBvbiB0aGUgQVg4ODc5NiBuZXR3b3JrIGRyaXZlciwgYW5kCisJICBUaGUgZHJpdmVyIGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIEFYODg3OTYgbmV0d29yayBkcml2ZXIsIGFuZAogCSAgc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbmV0d29ya2luZyBmdW5jdGlvbnMgb2YgdGhlIGNoaXAuCiAKIGNvbmZpZyBQQVJQT1JUXzEyODQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jIGIvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKaW5kZXggODkwMWVjZi4uZjlmZDRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBHbyB0byBjb21wYWJpbGl0eSBmb3J3YXJkIGlkbGUgbW9kZSAqLworCS8qIEdvIHRvIGNvbXBhdGliaWxpdHkgZm9yd2FyZCBpZGxlIG1vZGUgKi8KIAlpZiAocG9ydC0+aWVlZTEyODQubW9kZSAhPSBJRUVFMTI4NF9NT0RFX0NPTVBBVCkKIAkJcGFycG9ydF9pZWVlMTI4NF90ZXJtaW5hdGUgKHBvcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwppbmRleCA4ZDYyZmI3Li5iYzhjZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAKIAlvdXRiKGtleSwgaW8pOwogCW91dGIoa2V5LCBpbyk7ICAgICAvKiBXcml0ZSBNYWdpYyBTZXF1ZW5jZSB0byBFRkVSLCBleHRlbmRlZAotCQkJICAgICAgZnVudGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KKwkJCSAgICAgIGZ1bmN0aW9uIGVuYWJsZSByZWdpc3RlciAqLwogCW91dGIoMHgyMCwgaW8pOyAgICAvKiBXcml0ZSBFRklSLCBleHRlbmRlZCBmdW5jdGlvbiBpbmRleCByZWdpc3RlciAqLwogCWRldmlkID0gaW5iKGlvICsgMSk7ICAvKiBSZWFkIEVGRFIsIGV4dGVuZGVkIGZ1bmN0aW9uIGRhdGEgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MjEsIGlvKTsKQEAgLTE1MjcsNyArMTUyNyw3IEBACiAJeF9vbGRpZCA9IGluYihpbyArIDIpOwogCiAJb3V0YihrZXksIGlvKTsgICAgIC8qIFdyaXRlIE1hZ2ljIEJ5dGUgdG8gRUZFUiwgZXh0ZW5kZWQKLQkJCSAgICAgIGZ1bnRpb24gZW5hYmxlIHJlZ2lzdGVyICovCisJCQkgICAgICBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MjAsIGlvICsgMik7ICAvKiBXcml0ZSBFRklSLCBleHRlbmRlZCBmdW5jdGlvbiBpbmRleCByZWdpc3RlciAqLwogCWRldmlkID0gaW5iKGlvICsgMik7ICAvKiBSZWFkIEVGRFIsIGV4dGVuZGVkIGZ1bmN0aW9uIGRhdGEgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MjEsIGlvICsgMSk7CkBAIC0xNTY5LDcgKzE1NjksNyBAQAogCiAJb3V0YihrZXksIGlvKTsKIAlvdXRiKGtleSwgaW8pOyAgICAgLyogV3JpdGUgTWFnaWMgU2VxdWVuY2UgdG8gRUZFUiwgZXh0ZW5kZWQKLQkJCSAgICAgIGZ1bnRpb24gZW5hYmxlIHJlZ2lzdGVyICovCisJCQkgICAgICBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MGQsIGlvKTsgICAgLyogV3JpdGUgRUZJUiwgZXh0ZW5kZWQgZnVuY3Rpb24gaW5kZXggcmVnaXN0ZXIgKi8KIAlvbGRpZCA9IGluYihpbyArIDEpOyAgLyogUmVhZCBFRkRSLCBleHRlbmRlZCBmdW5jdGlvbiBkYXRhIHJlZ2lzdGVyICovCiAJb3V0YigweDBlLCBpbyk7CkBAIC0yNTUwLDcgKzI1NTAsNiBAQAogCQkJCQkgY29uc3Qgc3RydWN0IHBhcnBvcnRfcGNfdmlhX2RhdGEgKnZpYSkKIHsKIAlzaG9ydCBpbnRhX2FkZHJbNl0gPSB7IDB4MkEwLCAweDJDMCwgMHgyMjAsIDB4MjQwLCAweDFFMCB9OwotCXN0cnVjdCByZXNvdXJjZSAqYmFzZV9yZXM7CiAJdTMyIGl0ZTg4NzJzZXQ7CiAJdTMyIGl0ZTg4NzJfbHB0LCBpdGU4ODcyX2xwdGhpOwogCXU4IGl0ZTg4NzJfaXJxLCB0eXBlOwpAQCAtMjU2MSw4ICsyNTYwLDcgQEAKIAogCS8qIG1ha2Ugc3VyZSB3aGljaCBvbmUgY2hpcCAqLwogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJYmFzZV9yZXMgPSByZXF1ZXN0X3JlZ2lvbihpbnRhX2FkZHJbaV0sIDMyLCAiaXQ4ODd4Iik7Ci0JCWlmIChiYXNlX3JlcykgeworCQlpZiAocmVxdWVzdF9yZWdpb24oaW50YV9hZGRyW2ldLCAzMiwgIml0ODg3eCIpKSB7CiAJCQlpbnQgdGVzdDsKIAkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg2MCwKIAkJCQkJCTB4ZTUwMDAwMDAgfCBpbnRhX2FkZHJbaV0pOwpAQCAtMjU3MSw3ICsyNTY5LDcgQEAKIAkJCXRlc3QgPSBpbmIoaW50YV9hZGRyW2ldKTsKIAkJCWlmICh0ZXN0ICE9IDB4ZmYpCiAJCQkJYnJlYWs7Ci0JCQlyZWxlYXNlX3JlZ2lvbihpbnRhX2FkZHJbaV0sIDB4OCk7CisJCQlyZWxlYXNlX3JlZ2lvbihpbnRhX2FkZHJbaV0sIDMyKTsKIAkJfQogCX0KIAlpZiAoaSA+PSA1KSB7CkBAIC0yNjM1LDcgKzI2MzMsNyBAQAogCS8qCiAJICogUmVsZWFzZSB0aGUgcmVzb3VyY2Ugc28gdGhhdCBwYXJwb3J0X3BjX3Byb2JlX3BvcnQgY2FuIGdldCBpdC4KIAkgKi8KLQlyZWxlYXNlX3Jlc291cmNlKGJhc2VfcmVzKTsKKwlyZWxlYXNlX3JlZ2lvbihpbnRhX2FkZHJbaV0sIDMyKTsKIAlpZiAocGFycG9ydF9wY19wcm9iZV9wb3J0KGl0ZTg4NzJfbHB0LCBpdGU4ODcyX2xwdGhpLAogCQkJCSAgIGlycSwgUEFSUE9SVF9ETUFfTk9ORSwgJnBkZXYtPmRldiwgMCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggYzhmZjY0Ni4uMGZhNDY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC04OCw0ICs4OCw2IEBACiAJZGVwZW5kcyBvbiBIT1RQTFVHCiAJZGVmYXVsdCB5CiAKLXNlbGVjdCBOTFMgaWYgKERNSSB8fCBBQ1BJKQorY29uZmlnIFBDSV9MQUJFTAorCWRlZl9ib29sIHkgaWYgKERNSSB8fCBBQ1BJKQorCXNlbGVjdCBOTFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggOThkNjFjOC4uYzg1Zjc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTU2LDEwICs1NiwxMCBAQAogIyBBQ1BJIFJlbGF0ZWQgUENJIEZXIEZ1bmN0aW9ucwogIyBBQ1BJIF9EU00gcHJvdmlkZWQgZmlybXdhcmUgaW5zdGFuY2UgYW5kIHN0cmluZyBuYW1lCiAjCi1vYmotJChDT05GSUdfQUNQSSkgICAgKz0gcGNpLWFjcGkubyBwY2ktbGFiZWwubworb2JqLSQoQ09ORklHX0FDUEkpICAgICs9IHBjaS1hY3BpLm8KIAogIyBTTUJJT1MgcHJvdmlkZWQgZmlybXdhcmUgaW5zdGFuY2UgYW5kIGxhYmVscwotb2JqLSQoQ09ORklHX0RNSSkgICAgKz0gcGNpLWxhYmVsLm8KK29iai0kKENPTkZJR19QQ0lfTEFCRUwpICs9IHBjaS1sYWJlbC5vCiAKICMgQ2FyZGJ1cyAmIENvbXBhY3RQQ0kgdXNlIHNldHVwLWJ1cwogb2JqLSQoQ09ORklHX0hPVFBMVUcpICs9IHNldHVwLWJ1cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlfcGNpaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCmluZGV4IDNiYzcyZDEuLjhmM2ZhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkgKiBUbyBoYW5kbGUgZGlmZmVyZW50IEJJT1MgYmVoYXZpb3IsIHdlIGxvb2sgZm9yIF9PU0Mgb24gYSByb290CiAJICogYnJpZGdlIHByZWZlcmVudGlhbGx5IChhY2NvcmRpbmcgdG8gUENJIGZ3IHNwZWMpLiBMYXRlciBmb3IKIAkgKiBPU0hQIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGhvdHBsdWcgY29udHJvbGxlciBhbmQgaXRzIHBhcmVudHMsCi0JICogdXB0byB0aGUgaG9zdCBicmlkZ2UgdW5kZXIgd2hpY2ggdGhpcyBjb250cm9sbGVyIGV4aXN0cy4KKwkgKiB1cCB0byB0aGUgaG9zdCBicmlkZ2UgdW5kZXIgd2hpY2ggdGhpcyBjb250cm9sbGVyIGV4aXN0cy4KIAkgKi8KIAloYW5kbGUgPSBhY3BpX2ZpbmRfcm9vdF9icmlkZ2VfaGFuZGxlKHBkZXYpOwogCWlmIChoYW5kbGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCmluZGV4IGU2MTBjZmUuLjJmNjdlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiAKIAkvKgogCSAqIE9uIHJvb3QgYnJpZGdlcyB3aXRoIGhvdHBsdWcgc2xvdHMgZGlyZWN0bHkgdW5kZXJuZWF0aCAoaWUsCi0JICogbm8gcDJwIGJyaWRnZSBpbmJldHdlZW4pLCB3ZSBjYWxsIGNsZWFudXBfYnJpZGdlKCkuIAorCSAqIG5vIHAycCBicmlkZ2UgYmV0d2VlbiksIHdlIGNhbGwgY2xlYW51cF9icmlkZ2UoKS4gCiAJICoKIAkgKiBUaGUgZWxzZSBjbGF1c2UgY2xlYW5zIHVwIHJvb3QgYnJpZGdlcyB0aGF0IGVpdGhlciBoYWQgbm8KIAkgKiBob3RwbHVnIHNsb3RzIGF0IGFsbCwgb3IgaGFkIGEgcDJwIGJyaWRnZSB1bmRlcm5lYXRoLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCmluZGV4IGVmNzQxMWMuLjc1OGFkYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogICogQGRuOiBkZXZpY2Ugbm9kZSBvZiBzbG90CiAgKgogICogVGhpcyBzdWJyb3V0aW5lIHdpbGwgcmVnaXN0ZXIgYSBob3RwbHVnYWJsZSBzbG90IHdpdGggdGhlCi0gKiBQQ0kgaG90cGx1ZyBpbmZyYXN0cnVjdHVyZS4gVGhpcyByb3V0aW5lIGlzIHR5cGljYWx5IGNhbGxlZAorICogUENJIGhvdHBsdWcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgcm91dGluZSBpcyB0eXBpY2FsbHkgY2FsbGVkCiAgKiBkdXJpbmcgYm9vdCB0aW1lLCBpZiB0aGUgaG90cGx1ZyBzbG90cyBhcmUgcHJlc2VudCBhdCBib290IHRpbWUsCiAgKiBvciBpcyBjYWxsZWQgbGF0ZXIsIGJ5IHRoZSBkbHBhciBhZGQgY29kZSwgaWYgdGhlIHNsb3QgaXMKICAqIGJlaW5nIGR5bmFtaWNhbGx5IGFkZGVkIGR1cmluZyBydW50aW1lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggN2RhM2JlZi4uZDU1MmQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogc3RhdGljIHN0cnVjdCBpb3ZhX2RvbWFpbiByZXNlcnZlZF9pb3ZhX2xpc3Q7CiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJlc2VydmVkX3JidHJlZV9rZXk7CiAKLXN0YXRpYyB2b2lkIGRtYXJfaW5pdF9yZXNlcnZlZF9yYW5nZXModm9pZCkKK3N0YXRpYyBpbnQgZG1hcl9pbml0X3Jlc2VydmVkX3Jhbmdlcyh2b2lkKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaW92YSAqaW92YTsKQEAgLTEzMTMsOCArMTMxMywxMCBAQAogCS8qIElPQVBJQyByYW5nZXMgc2hvdWxkbid0IGJlIGFjY2Vzc2VkIGJ5IERNQSAqLwogCWlvdmEgPSByZXNlcnZlX2lvdmEoJnJlc2VydmVkX2lvdmFfbGlzdCwgSU9WQV9QRk4oSU9BUElDX1JBTkdFX1NUQVJUKSwKIAkJSU9WQV9QRk4oSU9BUElDX1JBTkdFX0VORCkpOwotCWlmICghaW92YSkKKwlpZiAoIWlvdmEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJSZXNlcnZlIElPQVBJQyByYW5nZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBSZXNlcnZlIGFsbCBQQ0kgTU1JTyB0byBhdm9pZCBwZWVyLXRvLXBlZXIgYWNjZXNzICovCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CkBAIC0xMzI3LDExICsxMzI5LDEzIEBACiAJCQlpb3ZhID0gcmVzZXJ2ZV9pb3ZhKCZyZXNlcnZlZF9pb3ZhX2xpc3QsCiAJCQkJCSAgICBJT1ZBX1BGTihyLT5zdGFydCksCiAJCQkJCSAgICBJT1ZBX1BGTihyLT5lbmQpKTsKLQkJCWlmICghaW92YSkKKwkJCWlmICghaW92YSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUmVzZXJ2ZSBpb3ZhIGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CiAJCX0KIAl9Ci0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZG9tYWluX3Jlc2VydmVfc3BlY2lhbF9yYW5nZXMoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pCkBAIC0xODM1LDcgKzE4MzksNyBAQAogCiAJcmV0ID0gaW9tbXVfYXR0YWNoX2RvbWFpbihkb21haW4sIGlvbW11KTsKIAlpZiAocmV0KSB7Ci0JCWRvbWFpbl9leGl0KGRvbWFpbik7CisJCWZyZWVfZG9tYWluX21lbShkb21haW4pOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjIxMyw3ICsyMjE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBpbml0X2RtYXJzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2RtYXJzKGludCBmb3JjZV9vbikKIHsKIAlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CiAJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyOwpAQCAtMjI2NSw3ICsyMjY5LDcgQEAKIAkJLyoKIAkJICogVEJEOgogCQkgKiB3ZSBjb3VsZCBzaGFyZSB0aGUgc2FtZSByb290ICYgY29udGV4dCB0YWJsZXMKLQkJICogYW1vdW5nIGFsbCBJT01NVSdzLiBOZWVkIHRvIFNwbGl0IGl0IGxhdGVyLgorCQkgKiBhbW9uZyBhbGwgSU9NTVUncy4gTmVlZCB0byBTcGxpdCBpdCBsYXRlci4KIAkJICovCiAJCXJldCA9IGlvbW11X2FsbG9jX3Jvb3RfZW50cnkoaW9tbXUpOwogCQlpZiAocmV0KSB7CkBAIC0yMzkzLDggKzIzOTcsMTUgQEAKIAkgKiAgIGVuYWJsZSB0cmFuc2xhdGlvbgogCSAqLwogCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7Ci0JCWlmIChkcmhkLT5pZ25vcmVkKQorCQlpZiAoZHJoZC0+aWdub3JlZCkgeworCQkJLyoKKwkJCSAqIHdlIGFsd2F5cyBoYXZlIHRvIGRpc2FibGUgUE1ScyBvciBETUEgbWF5IGZhaWwgb24KKwkJCSAqIHRoaXMgZGV2aWNlCisJCQkgKi8KKwkJCWlmIChmb3JjZV9vbikKKwkJCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoZHJoZC0+aW9tbXUpOwogCQkJY29udGludWU7CisJCX0KIAkJaW9tbXUgPSBkcmhkLT5pb21tdTsKIAogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwpAQCAtMzI0MCw5ICszMjUxLDE1IEBACiAJaWYgKCFkb21haW4pCiAJCXJldHVybiAwOwogCi0JaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpCisJaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpIHsKIAkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWluLCBwZGV2KTsKIAorCQlpZiAoIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKSAmJgorCQkgICAgIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfU1RBVElDX0lERU5USVRZKSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZG9tYWluLT5kZXZpY2VzKSkKKwkJCWRvbWFpbl9leGl0KGRvbWFpbik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNzcsMTIgKzMyOTQsMjEgQEAKIAlpZiAobm9faW9tbXUgfHwgZG1hcl9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpb21tdV9pbml0X21lbXBvb2woKTsKLQlkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCk7CisJaWYgKGlvbW11X2luaXRfbWVtcG9vbCgpKSB7CisJCWlmIChmb3JjZV9vbikKKwkJCXBhbmljKCJ0Ym9vdDogRmFpbGVkIHRvIGluaXRpYWxpemUgaW9tbXUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIAktRU5PREVWOworCX0KKworCWlmIChkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCkpIHsKKwkJaWYgKGZvcmNlX29uKQorCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gcmVzZXJ2ZSBpb21tdSByYW5nZXNcbiIpOworCQlyZXR1cm4gCS1FTk9ERVY7CisJfQogCiAJaW5pdF9ub19yZW1hcHBpbmdfZGV2aWNlcygpOwogCi0JcmV0ID0gaW5pdF9kbWFycygpOworCXJldCA9IGluaXRfZG1hcnMoZm9yY2Vfb24pOwogCWlmIChyZXQpIHsKIAkJaWYgKGZvcmNlX29uKQogCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUFSc1xuIik7CkBAIC0zMzkxLDYgKzM0MTcsMTEgQEAKIAkJZG9tYWluLT5pb21tdV9jb3VudC0tOwogCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIHRtcF9mbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOworCQljbGVhcl9iaXQoZG9tYWluLT5pZCwgaW9tbXUtPmRvbWFpbl9pZHMpOworCQlpb21tdS0+ZG9tYWluc1tkb21haW4tPmlkXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9kb21haW5fbG9jaywgZmxhZ3MpOwpAQCAtMzYwNyw5ICszNjM4LDkgQEAKIAogCQlwdGUgPSBkbWFyX2RvbWFpbi0+cGdkOwogCQlpZiAoZG1hX3B0ZV9wcmVzZW50KHB0ZSkpIHsKLQkJCWZyZWVfcGd0YWJsZV9wYWdlKGRtYXJfZG9tYWluLT5wZ2QpOwogCQkJZG1hcl9kb21haW4tPnBnZCA9IChzdHJ1Y3QgZG1hX3B0ZSAqKQogCQkJCXBoeXNfdG9fdmlydChkbWFfcHRlX2FkZHIocHRlKSk7CisJCQlmcmVlX3BndGFibGVfcGFnZShwdGUpOwogCQl9CiAJCWRtYXJfZG9tYWluLT5hZ2F3LS07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKaW5kZXggYTIyNTU3Yi4uMzYwN2ZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYworKysgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCkBAIC0yODksNyArMjg5LDcgQEAKICAqIHNvdXJjZSB2YWxpZGF0aW9uIHR5cGUKICAqLwogI2RlZmluZSBTVlRfTk9fVkVSSUZZCQkweDAgIC8qIG5vIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZCAqLwotI2RlZmluZSBTVlRfVkVSSUZZX1NJRF9TUQkweDEgIC8qIHZlcmlmeSB1c2luZyBTSUQgYW5kIFNRIGZpZWxzICovCisjZGVmaW5lIFNWVF9WRVJJRllfU0lEX1NRCTB4MSAgLyogdmVyaWZ5IHVzaW5nIFNJRCBhbmQgU1EgZmllbGRzICovCiAjZGVmaW5lIFNWVF9WRVJJRllfQlVTCQkweDIgIC8qIHZlcmlmeSBidXMgb2YgcmVxdWVzdC1pZCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92YS5jIGIvZHJpdmVycy9wY2kvaW92YS5jCmluZGV4IDc5MTQ5NTEuLjk2MDZlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdmEuYworKysgYi9kcml2ZXJzL3BjaS9pb3ZhLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCQkJCWJyZWFrOwogCX0KIAotCS8qIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhc3VlIHRoaXMgaXMgdGhlIGZpcnN0IHJlc2VydmVyIG5vZGUKKwkvKiBXZSBhcmUgaGVyZSBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIHRoZSBmaXJzdCByZXNlcnZlciBub2RlCiAJICogb3IgbmVlZCB0byBpbnNlcnQgcmVtYWluaW5nIG5vbiBvdmVybGFwIGFkZHIgcmFuZ2UKIAkgKi8KIAlpb3ZhID0gX19pbnNlcnRfbmV3X3JhbmdlKGlvdmFkLCBwZm5fbG8sIHBmbl9oaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZDg2ZWE4Yi4uMTM1ZGYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtNzgxLDcgKzc4MSw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1NVU1BFTkQgKi8KIAotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiAKIHN0YXRpYyBpbnQgcGNpX3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC05NzAsNyArOTcwLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KKyNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjZGVmaW5lIHBjaV9wbV9mcmVlemUJCU5VTEwKICNkZWZpbmUgcGNpX3BtX2ZyZWV6ZV9ub2lycQlOVUxMCkBAIC05ODEsNyArOTgxLDcgQEAKICNkZWZpbmUgcGNpX3BtX3Jlc3RvcmUJCU5VTEwKICNkZWZpbmUgcGNpX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBhOGEyNzdhLi5mOGRlYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAgKiBhIHBlci1idXMgYmFzaXMuICBUaGlzIHJvdXRpbmUgY3JlYXRlcyB0aGUgZmlsZXMgYW5kIHRpZXMgdGhlbSBpbnRvCiAgKiB0aGVpciBhc3NvY2lhdGVkIHJlYWQsIHdyaXRlIGFuZCBtbWFwIGZpbGVzIGZyb20gcGNpLXN5c2ZzLmMKICAqCi0gKiBPbiBlcnJvciB1bndpbmQsIGJ1dCBkb24ndCBwcm9wb2dhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXIKKyAqIE9uIGVycm9yIHVud2luZCwgYnV0IGRvbid0IHByb3BhZ2F0ZSB0aGUgZXJyb3IgdG8gdGhlIGNhbGxlcgogICogYXMgaXQgaXMgb2sgdG8gc2V0IHVwIHRoZSBQQ0kgYnVzIHdpdGhvdXQgdGhlc2UgZmlsZXMuCiAgKi8KIHZvaWQgcGNpX2NyZWF0ZV9sZWdhY3lfZmlsZXMoc3RydWN0IHBjaV9idXMgKmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGJkODBmNjMuLjUxMjllZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAkgKglUaGlzIGhhcHBlbnMgdG8gaW5jbHVkZSB0aGUgSURFIGNvbnRyb2xsZXJzLi4uLgogCSAqCiAJICoJVklBIG9ubHkgYXBwbHkgdGhpcyBmaXggd2hlbiBhbiBTQiBMaXZlISBpcyBwcmVzZW50IGJ1dCB1bmRlcgotCSAqCWJvdGggTGludXggYW5kIFdpbmRvd3MgdGhpcyBpc250IGVub3VnaCwgYW5kIHdlIGhhdmUgc2VlbgorCSAqCWJvdGggTGludXggYW5kIFdpbmRvd3MgdGhpcyBpc24ndCBlbm91Z2gsIGFuZCB3ZSBoYXZlIHNlZW4KIAkgKgljb3JydXB0aW9uIHdpdGhvdXQgU0IgTGl2ZSEgYnV0IHdpdGggdGhpbmdzIGxpa2UgMyBVRE1BIElERQogCSAqCWNvbnRyb2xsZXJzLiBTbyB3ZSBpZ25vcmUgdGhhdCBiaXQgb2YgdGhlIFZJQSByZWNvbW1lbmRhdGlvbi4uCiAJICovCkBAIC0yNjgwLDcgKzI2ODAsNyBAQAogICogVGhpcyBpcyBhIHF1aXJrIGZvciB0aGUgUmljb2ggTU1DIGNvbnRyb2xsZXIgZm91bmQgYXMgYSBwYXJ0IG9mCiAgKiBzb21lIG11bGlmdW5jdGlvbiBjaGlwcy4KIAotICogVGhpcyBpcyB2ZXJ5IHNpbWlsaWFyIGFuZCBiYXNlZCBvbiB0aGUgcmljb2hfbW1jIGRyaXZlciB3cml0dGVuIGJ5CisgKiBUaGlzIGlzIHZlcnkgc2ltaWxhciBhbmQgYmFzZWQgb24gdGhlIHJpY29oX21tYyBkcml2ZXIgd3JpdHRlbiBieQogICogUGhpbGlwIExhbmdkYWxlLiBUaGFuayB5b3UgZm9yIHRoZXNlIG1hZ2ljIHNlcXVlbmNlcy4KICAqCiAgKiBUaGVzZSBjaGlwcyBpbXBsZW1lbnQgdGhlIGZvdXIgbWFpbiBtZW1vcnkgY2FyZCBjb250cm9sbGVycyAoU0QsIE1NQywgTVMsIHhEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCA4OWQwYTZhLi5hODA2Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJfQogCXNpemUwID0gY2FsY3VsYXRlX2lvc2l6ZShzaXplLCBtaW5fc2l6ZSwgc2l6ZTEsCiAJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgNDA5Nik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemU/IHNpemUwOgorCXNpemUxID0gKCFhZGRfaGVhZCB8fCAoYWRkX2hlYWQgJiYgIWFkZF9zaXplKSkgPyBzaXplMCA6CiAJCWNhbGN1bGF0ZV9pb3NpemUoc2l6ZSwgbWluX3NpemUrYWRkX3NpemUsIHNpemUxLAogCQkJcmVzb3VyY2Vfc2l6ZShiX3JlcyksIDQwOTYpOwogCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CkBAIC02NzYsMTAgKzY3NiwxMCBAQAogCQkJbWluX2FsaWduID0gYWxpZ24xID4+IDE7CiAJCWFsaWduICs9IGFsaWduc1tvcmRlcl07CiAJfQotCXNpemUwID0gY2FsY3VsYXRlX21lbXNpemUoc2l6ZSwgbWluX3NpemUsIDAsIHJlc291cmNlX3NpemUoYl9yZXMpLCBhbGlnbik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemUgPyBzaXplIDoKKwlzaXplMCA9IGNhbGN1bGF0ZV9tZW1zaXplKHNpemUsIG1pbl9zaXplLCAwLCByZXNvdXJjZV9zaXplKGJfcmVzKSwgbWluX2FsaWduKTsKKwlzaXplMSA9ICghYWRkX2hlYWQgfHwgKGFkZF9oZWFkICYmICFhZGRfc2l6ZSkpID8gc2l6ZTAgOgogCQljYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSthZGRfc2l6ZSwgMCwKLQkJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgYWxpZ24pOworCQkJCXJlc291cmNlX3NpemUoYl9yZXMpLCBtaW5fYWxpZ24pOwogCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CiAJCWlmIChiX3Jlcy0+c3RhcnQgfHwgYl9yZXMtPmVuZCkKIAkJCWRldl9pbmZvKCZidXMtPnNlbGYtPmRldiwgImRpc2FibGluZyBicmlkZ2Ugd2luZG93ICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKaW5kZXggZmM3OTA2ZS4uM2U0NDdkMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCkBAIC01NCw3ICs1NCw3IEBACiAJLnNldF9tZW1fbWFwCQk9IGk4MjA5MmFhX3NldF9tZW1fbWFwLAogfTsKIAotLyogVGhlIGNhcmQgY2FuIGRvIHVwdG8gNCBzb2NrZXRzLCBhbGxvY2F0ZSBhIHN0cnVjdHVyZSBmb3IgZWFjaCBvZiB0aGVtICovCisvKiBUaGUgY2FyZCBjYW4gZG8gdXAgdG8gNCBzb2NrZXRzLCBhbGxvY2F0ZSBhIHN0cnVjdHVyZSBmb3IgZWFjaCBvZiB0aGVtICovCiAKIHN0cnVjdCBzb2NrZXRfaW5mbyB7CiAJaW50CW51bWJlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKaW5kZXggNDJmYmYxYS4uZThjMTlkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkgewotCQlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpc250J3QgbG9ja2VkXG4iKTsKKwkJZGV2X2RiZygmcF9kZXYtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXNuJ3QgbG9ja2VkXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFsbG9vbjMuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jCmluZGV4IDQ1M2M1NGMuLjRjM2U5NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlIDxtYWNoL2JhbGxvb24zLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgogCiAvKgpAQCAtMTI3LDYgKzEyOSw5IEBACiB7CiAJaW50IHJldDsKIAorCWlmICghbWFjaGluZV9pc19iYWxsb29uMygpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWJhbGxvb24zX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CiAJaWYgKCFiYWxsb29uM19wY21jaWFfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCmluZGV4IDI1YWZlNjMuLmMyMTg4OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCQkgKiBXZSBuZWVkIHRvIGhhY2sgYXJvdW5kIHRoZSBjb25zdCBxdWFsaWZpZXIgYXMKIAkJCSAqIHdlbGwgdG8ga2VlcCB0aGlzIHVnbHkgd29ya2Fyb3VuZCBsb2NhbGl6ZWQgYW5kCiAJCQkgKiBub3QgZm9yY2UgaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIEJhcmYgYmFncwotCQkJICogYXZhbGlhYmxlIGluIHRoZSBzZWF0IHBvY2tldCBpbiBmcm9udCBvZiB5b3UhCisJCQkgKiBhdmFpbGFibGUgaW4gdGhlIHNlYXQgcG9ja2V0IGluIGZyb250IG9mIHlvdSEKIAkJCSAqLwogCQkJKChzb2NrZXRfc3RhdGVfdCAqKXN0YXRlKS0+VmNjID0gNTA7CiAJCQkoKHNvY2tldF9zdGF0ZV90ICopc3RhdGUpLT5WcHAgPSA1MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF90cml6ZXBzNC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKaW5kZXggYjdlNTk2Ni4uYjgyOWU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKQEAgLTY5LDE1ICs2OSwxNSBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycXMpOyBpKyspIHsKIAkJaWYgKGlycXNbaV0uc29jayAhPSBza3QtPm5yKQogCQkJY29udGludWU7Ci0JCWlmIChncGlvX3JlcXVlc3QoSVJRX1RPX0dQSU8oaXJxc1tpXS5pcnEpLCBpcnFzW2ldLnN0cikgPCAwKSB7CisJCWlmIChncGlvX3JlcXVlc3QoaXJxX3RvX2dwaW8oaXJxc1tpXS5pcnEpLCBpcnFzW2ldLnN0cikgPCAwKSB7CiAJCQlwcl9lcnIoIiVzOiBzb2NrICVkIHVuYWJsZSB0byByZXF1ZXN0IGdwaW8gJWRcbiIsCi0JCQkJX19mdW5jX18sIHNrdC0+bnIsIElSUV9UT19HUElPKGlycXNbaV0uaXJxKSk7CisJCQkJX19mdW5jX18sIHNrdC0+bnIsIGlycV90b19ncGlvKGlycXNbaV0uaXJxKSk7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCWlmIChncGlvX2RpcmVjdGlvbl9pbnB1dChJUlFfVE9fR1BJTyhpcnFzW2ldLmlycSkpIDwgMCkgeworCQlpZiAoZ3Bpb19kaXJlY3Rpb25faW5wdXQoaXJxX3RvX2dwaW8oaXJxc1tpXS5pcnEpKSA8IDApIHsKIAkJCXByX2VycigiJXM6IHNvY2sgJWQgdW5hYmxlIHRvIHNldCBpbnB1dCBncGlvICVkXG4iLAotCQkJCV9fZnVuY19fLCBza3QtPm5yLCBJUlFfVE9fR1BJTyhpcnFzW2ldLmlycSkpOworCQkJCV9fZnVuY19fLCBza3QtPm5yLCBpcnFfdG9fZ3BpbyhpcnFzW2ldLmlycSkpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTg2LDcgKzg2LDcgQEAKIAogZXJyb3I6CiAJZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0JCWdwaW9fZnJlZShJUlFfVE9fR1BJTyhpcnFzW2ldLmlycSkpOworCQlncGlvX2ZyZWUoaXJxX3RvX2dwaW8oaXJxc1tpXS5pcnEpKTsKIAl9CiAJcmV0dXJuIChyZXQpOwogfQpAQCAtOTcsNyArOTcsNyBAQAogCS8qIGZyZWUgYWxsb2NhdGVkIGdwaW8ncyAqLwogCWdwaW9fZnJlZShHUElPX1BSRFkpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycXMpOyBpKyspCi0JCWdwaW9fZnJlZShJUlFfVE9fR1BJTyhpcnFzW2ldLmlycSkpOworCQlncGlvX2ZyZWUoaXJxX3RvX2dwaW8oaXJxc1tpXS5pcnEpKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJpemVwc19wY21jaWFfc3RhdHVzWzJdOwpAQCAtMjI2LDYgKzIyNiw5IEBACiB7CiAJaW50IHJldDsKIAorCWlmICghbWFjaGluZV9pc190cml6ZXBzNCgpICYmICFtYWNoaW5lX2lzX3RyaXplcHM0d2woKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAl0cml6ZXBzX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CiAJaWYgKCF0cml6ZXBzX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGkxMTN4LmggYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaAppbmRleCA5ZmZhOTdkLi5hNzE3ODk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaAorKysgYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaApAQCAtNjkxLDcgKzY5MSw3IEBACiAJCS8qCiAJCSAqIHRob3NlIGFyZSBlaXRoZXIgc2luZ2xlIG9yIGR1YWwgc2xvdCBDQiB3aXRoIGFkZGl0aW9uYWwgZnVuY3Rpb25zCiAJCSAqIGxpa2UgMTM5NCwgc21hcnRjYXJkIHJlYWRlciwgZXRjLiBjaGVjayB0aGUgVElFQUxMIGZsYWcgZm9yIHRoZW0KLQkJICogdGhlIFRJRUFMTCBmbGFnIGJpbmRzIHRoZSBJUlEgb2YgYWxsIGZ1bmN0aW9ucyB0b2doZXRoZXIuCisJCSAqIHRoZSBUSUVBTEwgZmxhZyBiaW5kcyB0aGUgSVJRIG9mIGFsbCBmdW5jdGlvbnMgdG9nZXRoZXIuCiAJCSAqIHdlIGNhdGNoIHRoZSBzaW5nbGUgc2xvdCB2YXJpYW50cyBsYXRlci4KIAkJICovCiAJCXN5c2N0bCA9IGNvbmZpZ19yZWFkbChzb2NrZXQsIFRJMTEzWF9TWVNURU1fQ09OVFJPTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCAyZWU0NDJjLi4wNDg1ZTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTE4Nyw3ICsxODcsOCBAQAogCWRlcGVuZHMgb24gQUNQSQogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gUkZLSUxMCi0JZGVwZW5kcyBvbiBTRVJJT19JODA0MgorCWRlcGVuZHMgb24gSU5QVVQgJiYgU0VSSU9fSTgwNDIKKwlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGxhcHRvcHMgYnVpbHQgYnkgTVNJIChNSUNSTy1TVEFSCiAJICBJTlRFUk5BVElPTkFMKToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IDVlYTZjMzQuLmFjNGU3ZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgQUNFUldNSURfRVZFTlRfR1VJRCAiNjc2QUExNUUtNkE0Ny00RDlGLUEyQ0MtMUU2RDE4RDE0MDI2IgogCiBNT0RVTEVfQUxJQVMoIndtaTo2N0MzMzcxRC05NUEzLTRDMzctQkI2MS1ERDQ3QjQ5MURBQUIiKTsKLU1PRFVMRV9BTElBUygid21pOjZBRjRGMjU4LUI0MDEtNDJGZC1CRTkxLTNENEFDMkQ3QzBEMyIpOworTU9EVUxFX0FMSUFTKCJ3bWk6NkFGNEYyNTgtQjQwMS00MkZELUJFOTEtM0Q0QUMyRDdDMEQzIik7CiBNT0RVTEVfQUxJQVMoIndtaTo2NzZBQTE1RS02QTQ3LTREOUYtQTJDQy0xRTZEMThEMTQwMjYiKTsKIAogZW51bSBhY2VyX3dtaV9ldmVudF9pZHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMKaW5kZXggZWZjNzc2Yy4uODMyYTNmZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYwpAQCAtMjAxLDggKzIwMSw4IEBACiAJaWYgKCFhc3VzLT5pbnB1dGRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlhc3VzLT5pbnB1dGRldi0+bmFtZSA9IGFzdXMtPmRyaXZlci0+aW5wdXRfcGh5czsKLQlhc3VzLT5pbnB1dGRldi0+cGh5cyA9IGFzdXMtPmRyaXZlci0+aW5wdXRfbmFtZTsKKwlhc3VzLT5pbnB1dGRldi0+bmFtZSA9IGFzdXMtPmRyaXZlci0+aW5wdXRfbmFtZTsKKwlhc3VzLT5pbnB1dGRldi0+cGh5cyA9IGFzdXMtPmRyaXZlci0+aW5wdXRfcGh5czsKIAlhc3VzLT5pbnB1dGRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwogCWFzdXMtPmlucHV0ZGV2LT5kZXYucGFyZW50ID0gJmFzdXMtPnBsYXRmb3JtX2RldmljZS0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IDVmMmRkMzguLjJjMWFiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC01ODUsOCArNTg1LDkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCitzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfaG90cGx1ZyhzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywgYWNwaV9oYW5kbGUgaGFuZGxlKQogeworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHBjaV9idXMgKmJ1czsKIAlib29sIGJsb2NrZWQgPSBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKGVlZXBjKTsKQEAgLTU5OSw5ICs2MDAsMTYgQEAKIAltdXRleF9sb2NrKCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKIAogCWlmIChlZWVwYy0+aG90cGx1Z19zbG90KSB7Ci0JCWJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKKwkJcG9ydCA9IGFjcGlfZ2V0X3BjaV9kZXYoaGFuZGxlKTsKKwkJaWYgKCFwb3J0KSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBwb3J0XG4iKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWJ1cyA9IHBvcnQtPnN1Ym9yZGluYXRlOworCiAJCWlmICghYnVzKSB7Ci0JCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBQQ0kgYnVzIDE/XG4iKTsKKwkJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBmaW5kIFBDSSBidXM/XG4iKTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCkBAIC02MDksNiArNjE3LDcgQEAKIAkJCXByX2VycigiVW5hYmxlIHRvIHJlYWQgUENJIGNvbmZpZyBzcGFjZT9cbiIpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CisKIAkJYWJzZW50ID0gKGwgPT0gMHhmZmZmZmZmZik7CiAKIAkJaWYgKGJsb2NrZWQgIT0gYWJzZW50KSB7CkBAIC02NDcsNiArNjU2LDE3IEBACiAJbXV0ZXhfdW5sb2NrKCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWdfdXBkYXRlKHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLCBjaGFyICpub2RlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBub2RlLCAmaGFuZGxlKTsKKworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMsIGhhbmRsZSk7Cit9CisKIHN0YXRpYyB2b2lkIGVlZXBjX3Jma2lsbF9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkYXRhOwpAQCAtNjU0LDcgKzY3NCw3IEBACiAJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSykKIAkJcmV0dXJuOwogCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOwogfQogCiBzdGF0aWMgaW50IGVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywKQEAgLTY3Miw2ICs2OTIsMTEgQEAKIAkJCQkJCSAgICAgZWVlcGMpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZ5IG9uICVzXG4iLCBub2RlKTsKKwkJLyoKKwkJICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzCisJCSAqIGNoYW5nZWQgZHVyaW5nIHNldHVwLgorCQkgKi8KKwkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMsIGhhbmRsZSk7CiAJfSBlbHNlCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC02OTMsNiArNzE4LDEyIEBACiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCXByX2VycigiRXJyb3IgcmVtb3ZpbmcgcmZraWxsIG5vdGlmeSBoYW5kbGVyICVzXG4iLAogCQkJCW5vZGUpOworCQkJLyoKKwkJCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsCisJCQkgKiBzdGF0ZSB3YXMgY2hhbmdlZCBhZnRlcgorCQkJICogZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoKQorCQkJICovCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOwogCX0KIH0KIApAQCAtODE2LDExICs4NDcsNyBAQAogCQlyZmtpbGxfZGVzdHJveShlZWVwYy0+d2xhbl9yZmtpbGwpOwogCQllZWVwYy0+d2xhbl9yZmtpbGwgPSBOVUxMOwogCX0KLQkvKgotCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGFmdGVyCi0JICogZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoKQotCSAqLwotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjKTsKKwogCWlmIChlZWVwYy0+aG90cGx1Z19zbG90KQogCQlwY2lfaHBfZGVyZWdpc3RlcihlZWVwYy0+aG90cGx1Z19zbG90KTsKIApAQCAtODg5LDExICs5MTYsNiBAQAogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNSIpOwogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNiIpOwogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNyIpOwotCS8qCi0JICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzIGNoYW5nZWQgZHVyaW5nCi0JICogc2V0dXAuCi0JICovCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOwogCiBleGl0OgogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCkBAIC05MjgsOCArOTUwLDExIEBACiAJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAogCS8qIFJlZnJlc2ggYm90aCB3bGFuIHJma2lsbCBzdGF0ZSBhbmQgcGNpIGhvdHBsdWcgKi8KLQlpZiAoZWVlcGMtPndsYW5fcmZraWxsKQotCQllZWVwY19yZmtpbGxfaG90cGx1ZyhlZWVwYyk7CisJaWYgKGVlZXBjLT53bGFuX3Jma2lsbCkgeworCQllZWVwY19yZmtpbGxfaG90cGx1Z191cGRhdGUoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDUiKTsKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWdfdXBkYXRlKGVlZXBjLCAiXFxfU0IuUENJMC5QMFA2Iik7CisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnX3VwZGF0ZShlZWVwYywgIlxcX1NCLlBDSTAuUDBQNyIpOworCX0KIAogCWlmIChlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCkKIAkJcmZraWxsX3NldF9zd19zdGF0ZShlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtd21pLmMKaW5kZXggMGRkYzQzNC4uNjQ5ZGNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtd21pLmMKQEAgLTY3LDkgKzY3LDExIEBACiAJeyBLRV9LRVksIDB4ODIsIHsgS0VZX0NBTUVSQSB9IH0sCiAJeyBLRV9LRVksIDB4ODMsIHsgS0VZX0NBTUVSQV9aT09NSU4gfSB9LAogCXsgS0VfS0VZLCAweDg4LCB7IEtFWV9XTEFOIH0gfSwKKwl7IEtFX0tFWSwgMHhiZCwgeyBLRVlfQ0FNRVJBIH0gfSwKIAl7IEtFX0tFWSwgMHhjYywgeyBLRVlfU1dJVENIVklERU9NT0RFIH0gfSwKIAl7IEtFX0tFWSwgMHhlMCwgeyBLRVlfUFJPRzEgfSB9LCAvKiBUYXNrIE1hbmFnZXIgKi8KIAl7IEtFX0tFWSwgMHhlMSwgeyBLRVlfRjE0IH0gfSwgLyogQ2hhbmdlIFJlc29sdXRpb24gKi8KKwl7IEtFX0tFWSwgMHhlOCwgeyBLRVlfU0NSRUVOTE9DSyB9IH0sCiAJeyBLRV9LRVksIDB4ZTksIHsgS0VZX0JSSUdIVE5FU1NfWkVSTyB9IH0sCiAJeyBLRV9LRVksIDB4ZWIsIHsgS0VZX0NBTUVSQV9aT09NT1VUIH0gfSwKIAl7IEtFX0tFWSwgMHhlYywgeyBLRVlfQ0FNRVJBX1VQIH0gfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21pZF90aGVybWFsLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9taWRfdGhlcm1hbC5jCmluZGV4IDZjMTJkYjUuLmMyZjRiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21pZF90aGVybWFsLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWlkX3RoZXJtYWwuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAgICAgaWYgKHJldCkKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAKLSAgICAgICAvKiBTaGlmdCBiaXRzIHRvIGFjY29tb2RhdGUgdGhlIGxvd2VyIHR3byBkYXRhIGJpdHMgKi8KKyAgICAgICAvKiBTaGlmdCBiaXRzIHRvIGFjY29tbW9kYXRlIHRoZSBsb3dlciB0d28gZGF0YSBiaXRzICovCiAgICAgICAgYWRjX3ZhbCA9IChkYXRhIDw8IDIpOwogICAgICAgIGFkZHIrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9wbWljX2dwaW8uYwppbmRleCBkNjUzMTA0Li40NjRiYjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9wbWljX2dwaW8uYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9wbWljX2dwaW8uYwpAQCAtNzQsNiArNzQsMTkgQEAKIAl1MzIJCQl0cmlnZ2VyX3R5cGU7CiB9OwogCitzdGF0aWMgdm9pZCBwbWljX3Byb2dyYW1faXJxdHlwZShpbnQgZ3BpbywgaW50IHR5cGUpCit7CisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJaW50ZWxfc2N1X2lwY191cGRhdGVfcmVnaXN0ZXIoR1BJTzAgKyBncGlvLCAweDIwLCAweDIwKTsKKwllbHNlCisJCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgwMCwgMHgyMCk7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJaW50ZWxfc2N1X2lwY191cGRhdGVfcmVnaXN0ZXIoR1BJTzAgKyBncGlvLCAweDEwLCAweDEwKTsKKwllbHNlCisJCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgwMCwgMHgxMCk7Cit9OworCiBzdGF0aWMgaW50IHBtaWNfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCWlmIChvZmZzZXQgPiA4KSB7CkBAIC0xNjYsMTYgKzE3OSwzOCBAQAogCXJldHVybiBwZy0+aXJxX2Jhc2UgKyBvZmZzZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHBtaWNfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBwbWljX2dwaW8gKnBnID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisKKwltdXRleF9sb2NrKCZwZy0+YnVzbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHBtaWNfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCisJaWYgKHBnLT51cGRhdGVfdHlwZSkgeworCQl1bnNpZ25lZCBpbnQgZ3BpbyA9IHBnLT51cGRhdGVfdHlwZSAmIH5HUElPX1VQREFURV9UWVBFOworCisJCXBtaWNfcHJvZ3JhbV9pcnF0eXBlKGdwaW8sIHBnLT50cmlnZ2VyX3R5cGUpOworCQlwZy0+dXBkYXRlX3R5cGUgPSAwOworCX0KKwltdXRleF91bmxvY2soJnBnLT5idXNsb2NrKTsKK30KKwogLyogdGhlIGdwaW9pbnRyIHJlZ2lzdGVyIGlzIHJlYWQtY2xlYXIsIHNvIGp1c3QgZG8gbm90aGluZy4gKi8KIHN0YXRpYyB2b2lkIHBtaWNfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpIHsgfQogCiBzdGF0aWMgdm9pZCBwbWljX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG1pY19pcnFjaGlwID0gewotCS5uYW1lCQk9ICJQTUlDLUdQSU8iLAotCS5pcnFfbWFzawk9IHBtaWNfaXJxX21hc2ssCi0JLmlycV91bm1hc2sJPSBwbWljX2lycV91bm1hc2ssCi0JLmlycV9zZXRfdHlwZQk9IHBtaWNfaXJxX3R5cGUsCisJLm5hbWUJCQk9ICJQTUlDLUdQSU8iLAorCS5pcnFfbWFzawkJPSBwbWljX2lycV9tYXNrLAorCS5pcnFfdW5tYXNrCQk9IHBtaWNfaXJxX3VubWFzaywKKwkuaXJxX3NldF90eXBlCQk9IHBtaWNfaXJxX3R5cGUsCisJLmlycV9idXNfbG9jawkJPSBwbWljX2J1c19sb2NrLAorCS5pcnFfYnVzX3N5bmNfdW5sb2NrCT0gcG1pY19idXNfc3luY191bmxvY2ssCiB9OwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcG1pY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctbGFwdG9wLmMKaW5kZXggZGU0MzRjNi4uZDM0NzExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLWxhcHRvcC5jCkBAIC01NzEsNiArNTcxLDE2IEBACiAJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKIAl9LAogCXsKKwkJLmlkZW50ID0gIlI0MTAgUGx1cyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAorCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUjQxMFAiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlI0NjAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAorCX0sCisJewogCQkuaWRlbnQgPSAiUjUxOCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLApAQCAtNTkxLDEyICs2MDEsMTIgQEAKIAkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAogCX0sCiAJewotCQkuaWRlbnQgPSAiTjE1MC9OMjEwL04yMjAiLAorCQkuaWRlbnQgPSAiTjE1MC9OMjEwL04yMjAvTjIzMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAogCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjE1MC9OMjEwL04yMjAiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk4xNTAvTjIxMC9OMjIwIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4xNTAvTjIxMC9OMjIwL04yMzAiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk4xNTAvTjIxMC9OMjIwL04yMzAiKSwKIAkJfSwKIAkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAogCX0sCkBAIC03NzEsNiArNzgxLDcgQEAKIAogCS8qIGNyZWF0ZSBhIGJhY2tsaWdodCBkZXZpY2UgdG8gdGFsayB0byB0aGlzIG9uZSAqLwogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gc2FiaV9jb25maWctPm1heF9icmlnaHRuZXNzOwogCWJhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJzYW1zdW5nIiwgJnNkZXYtPmRldiwKIAkJCQkJCSAgICAgTlVMTCwgJmJhY2tsaWdodF9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCBlNjQyZjVmLi42ZmU4Y2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTEzOCw2ICsxMzgsOCBAQAogCQkgIjEgZm9yIDMwIHNlY29uZHMsIDIgZm9yIDYwIHNlY29uZHMgYW5kIDMgdG8gZGlzYWJsZSB0aW1lb3V0ICIKIAkJICIoZGVmYXVsdDogMCkiKTsKIAorc3RhdGljIHZvaWQgc29ueV9uY19rYmRfYmFja2xpZ2h0X3Jlc3VtZSh2b2lkKTsKKwogZW51bSBzb255X25jX3Jma2lsbCB7CiAJU09OWV9XSUZJLAogCVNPTllfQkxVRVRPT1RILApAQCAtNzcxLDExICs3NzMsNiBAQAogCWlmICghaGFuZGxlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzeXNmc19hdHRyX2luaXQoJmhhbmRsZXMtPmRldmF0dHIuYXR0cik7Ci0JaGFuZGxlcy0+ZGV2YXR0ci5hdHRyLm5hbWUgPSAiaGFuZGxlcyI7Ci0JaGFuZGxlcy0+ZGV2YXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOwotCWhhbmRsZXMtPmRldmF0dHIuc2hvdyA9IHNvbnlfbmNfaGFuZGxlc19zaG93OwotCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGFuZGxlcy0+Y2FwKTsgaSsrKSB7CiAJCWlmICghYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLAogCQkJCQkiU04wMCIsIGkgKyAweDIwLCAmcmVzdWx0KSkgewpAQCAtNzg1LDExICs3ODIsMTggQEAKIAkJfQogCX0KIAotCS8qIGFsbG93IHJlYWRpbmcgY2FwYWJpbGl0aWVzIHZpYSBzeXNmcyAqLwotCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkLT5kZXYsICZoYW5kbGVzLT5kZXZhdHRyKSkgewotCQlrZnJlZShoYW5kbGVzKTsKLQkJaGFuZGxlcyA9IE5VTEw7Ci0JCXJldHVybiAtMTsKKwlpZiAoZGVidWcpIHsKKwkJc3lzZnNfYXR0cl9pbml0KCZoYW5kbGVzLT5kZXZhdHRyLmF0dHIpOworCQloYW5kbGVzLT5kZXZhdHRyLmF0dHIubmFtZSA9ICJoYW5kbGVzIjsKKwkJaGFuZGxlcy0+ZGV2YXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOworCQloYW5kbGVzLT5kZXZhdHRyLnNob3cgPSBzb255X25jX2hhbmRsZXNfc2hvdzsKKworCQkvKiBhbGxvdyByZWFkaW5nIGNhcGFiaWxpdGllcyB2aWEgc3lzZnMgKi8KKwkJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmcGQtPmRldiwgJmhhbmRsZXMtPmRldmF0dHIpKSB7CisJCQlrZnJlZShoYW5kbGVzKTsKKwkJCWhhbmRsZXMgPSBOVUxMOworCQkJcmV0dXJuIC0xOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03OTgsNyArODAyLDggQEAKIHN0YXRpYyBpbnQgc29ueV9uY19oYW5kbGVzX2NsZWFudXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQpCiB7CiAJaWYgKGhhbmRsZXMpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZC0+ZGV2LCAmaGFuZGxlcy0+ZGV2YXR0cik7CisJCWlmIChkZWJ1ZykKKwkJCWRldmljZV9yZW1vdmVfZmlsZSgmcGQtPmRldiwgJmhhbmRsZXMtPmRldmF0dHIpOwogCQlrZnJlZShoYW5kbGVzKTsKIAkJaGFuZGxlcyA9IE5VTEw7CiAJfQpAQCAtODA4LDYgKzgxMywxMSBAQAogc3RhdGljIGludCBzb255X2ZpbmRfc25jX2hhbmRsZShpbnQgaGFuZGxlKQogewogCWludCBpOworCisJLyogbm90IGluaXRpYWxpemVkIHlldCwgcmV0dXJuIGVhcmx5ICovCisJaWYgKCFoYW5kbGVzKQorCQlyZXR1cm4gLTE7CisKIAlmb3IgKGkgPSAwOyBpIDwgMHgxMDsgaSsrKSB7CiAJCWlmIChoYW5kbGVzLT5jYXBbaV0gPT0gaGFuZGxlKSB7CiAJCQlkcHJpbnRrKCJmb3VuZCBoYW5kbGUgMHglLjR4IChvZmZzZXQ6IDB4JS4yeClcbiIsCkBAIC05MjQsNiArOTM0LDE0IEBACiAvKgogICogQmFja2xpZ2h0IGRldmljZQogICovCitzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgeworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXY7CisJaW50CQkJaGFuZGxlOworCXU4CQkJb2Zmc2V0OworCXU4CQkJbWF4bHZsOworfTsKK3N0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyBzb255X2JsX3Byb3BzOworCiBzdGF0aWMgaW50IHNvbnlfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewogCXJldHVybiBhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTQlJUIiwKQEAgLTk0NCwyMSArOTYyLDI2IEBACiB7CiAJaW50IHJlc3VsdDsKIAlpbnQgKmhhbmRsZSA9IChpbnQgKilibF9nZXRfZGF0YShiZCk7CisJc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzICpzZGV2ID0KKwkJKHN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqKWJsX2dldF9kYXRhKGJkKTsKIAotCXNvbnlfY2FsbF9zbmNfaGFuZGxlKCpoYW5kbGUsIDB4MDIwMCwgJnJlc3VsdCk7CisJc29ueV9jYWxsX3NuY19oYW5kbGUoc2Rldi0+aGFuZGxlLCAweDAyMDAsICZyZXN1bHQpOwogCi0JcmV0dXJuIHJlc3VsdCAmIDB4ZmY7CisJcmV0dXJuIChyZXN1bHQgJiAweGZmKSAtIHNkZXYtPm9mZnNldDsKIH0KIAogc3RhdGljIGludCBzb255X25jX3VwZGF0ZV9zdGF0dXNfbmcoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewogCWludCB2YWx1ZSwgcmVzdWx0OwogCWludCAqaGFuZGxlID0gKGludCAqKWJsX2dldF9kYXRhKGJkKTsKKwlzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgKnNkZXYgPQorCQkoc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzICopYmxfZ2V0X2RhdGEoYmQpOwogCi0JdmFsdWUgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKLQlzb255X2NhbGxfc25jX2hhbmRsZSgqaGFuZGxlLCAweDAxMDAgfCAodmFsdWUgPDwgMTYpLCAmcmVzdWx0KTsKKwl2YWx1ZSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzICsgc2Rldi0+b2Zmc2V0OworCWlmIChzb255X2NhbGxfc25jX2hhbmRsZShzZGV2LT5oYW5kbGUsIDB4MDEwMCB8ICh2YWx1ZSA8PCAxNiksICZyZXN1bHQpKQorCQlyZXR1cm4gLUVJTzsKIAotCXJldHVybiBzb255X25jX2dldF9icmlnaHRuZXNzX25nKGJkKTsKKwlyZXR1cm4gdmFsdWU7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBzb255X2JhY2tsaWdodF9vcHMgPSB7CkBAIC05NzEsOCArOTk0LDYgQEAKIAkudXBkYXRlX3N0YXR1cyA9IHNvbnlfbmNfdXBkYXRlX3N0YXR1c19uZywKIAkuZ2V0X2JyaWdodG5lc3MgPSBzb255X25jX2dldF9icmlnaHRuZXNzX25nLAogfTsKLXN0YXRpYyBpbnQgYmFja2xpZ2h0X25nX2hhbmRsZTsKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqc29ueV9iYWNrbGlnaHRfZGV2aWNlOwogCiAvKgogICogTmV3IFNOQy1vbmx5IFZhaW9zIGV2ZW50IG1hcHBpbmcgdG8gZHJpdmVyIGtub3duIGtleXMKQEAgLTExNjgsNiArMTE4OSw5IEBACiAJLyogcmUtcmVhZCByZmtpbGwgc3RhdGUgKi8KIAlzb255X25jX3Jma2lsbF91cGRhdGUoKTsKIAorCS8qIHJlc3RvcmUga2JkIGJhY2tsaWdodCBzdGF0ZXMgKi8KKwlzb255X25jX2tiZF9iYWNrbGlnaHRfcmVzdW1lKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM1NSw2ICsxMzc5LDcgQEAKICNkZWZpbmUgS0JEQkxfSEFORExFUgkweDEzNwogI2RlZmluZSBLQkRCTF9QUkVTRU5UCTB4QjAwCiAjZGVmaW5lCVNFVF9NT0RFCTB4QzAwCisjZGVmaW5lIFNFVF9TVEFURQkweEQwMAogI2RlZmluZSBTRVRfVElNRU9VVAkweEUwMAogCiBzdHJ1Y3Qga2JkX2JhY2tsaWdodCB7CkBAIC0xMzc3LDYgKzE0MDIsMTAgQEAKIAkJCQkodmFsdWUgPDwgMHgxMCkgfCBTRVRfTU9ERSwgJnJlc3VsdCkpCiAJCXJldHVybiAtRUlPOwogCisJLyogVHJ5IHRvIHR1cm4gdGhlIGxpZ2h0IG9uL29mZiBpbW1lZGlhdGVseSAqLworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKEtCREJMX0hBTkRMRVIsICh2YWx1ZSA8PCAweDEwKSB8IFNFVF9TVEFURSwKKwkJCSZyZXN1bHQpOworCiAJa2JkYmxfaGFuZGxlLT5tb2RlID0gdmFsdWU7CiAKIAlyZXR1cm4gMDsKQEAgLTE0NTgsNyArMTQ4Nyw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCWlmIChzb255X2NhbGxfc25jX2hhbmRsZSgweDEzNywgS0JEQkxfUFJFU0VOVCwgJnJlc3VsdCkpCisJaWYgKHNvbnlfY2FsbF9zbmNfaGFuZGxlKEtCREJMX0hBTkRMRVIsIEtCREJMX1BSRVNFTlQsICZyZXN1bHQpKQogCQlyZXR1cm4gMDsKIAlpZiAoIShyZXN1bHQgJiAweDAyKSkKIAkJcmV0dXJuIDA7CkBAIC0xNTAxLDEzICsxNTMwLDEwNSBAQAogc3RhdGljIGludCBzb255X25jX2tiZF9iYWNrbGlnaHRfY2xlYW51cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKIHsKIAlpZiAoa2JkYmxfaGFuZGxlKSB7CisJCWludCByZXN1bHQ7CisKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZC0+ZGV2LCAma2JkYmxfaGFuZGxlLT5tb2RlX2F0dHIpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkLT5kZXYsICZrYmRibF9oYW5kbGUtPnRpbWVvdXRfYXR0cik7CisKKwkJLyogcmVzdG9yZSB0aGUgZGVmYXVsdCBodyBiZWhhdmlvdXIgKi8KKwkJc29ueV9jYWxsX3NuY19oYW5kbGUoS0JEQkxfSEFORExFUiwgMHgxMDAwIHwgU0VUX01PREUsICZyZXN1bHQpOworCQlzb255X2NhbGxfc25jX2hhbmRsZShLQkRCTF9IQU5ETEVSLCBTRVRfVElNRU9VVCwgJnJlc3VsdCk7CisKIAkJa2ZyZWUoa2JkYmxfaGFuZGxlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNvbnlfbmNfa2JkX2JhY2tsaWdodF9yZXN1bWUodm9pZCkKK3sKKwlpbnQgaWdub3JlID0gMDsKKworCWlmICgha2JkYmxfaGFuZGxlKQorCQlyZXR1cm47CisKKwlpZiAoa2JkYmxfaGFuZGxlLT5tb2RlID09IDApCisJCXNvbnlfY2FsbF9zbmNfaGFuZGxlKEtCREJMX0hBTkRMRVIsIFNFVF9NT0RFLCAmaWdub3JlKTsKKworCWlmIChrYmRibF9oYW5kbGUtPnRpbWVvdXQgIT0gMCkKKwkJc29ueV9jYWxsX3NuY19oYW5kbGUoS0JEQkxfSEFORExFUiwKKwkJCQkoa2JkYmxfaGFuZGxlLT50aW1lb3V0IDw8IDB4MTApIHwgU0VUX1RJTUVPVVQsCisJCQkJJmlnbm9yZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbnlfbmNfYmFja2xpZ2h0X25nX3JlYWRfbGltaXRzKGludCBoYW5kbGUsCisJCXN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqcHJvcHMpCit7CisJaW50IG9mZnNldDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTggYnJsdmwsIGk7CisJdTggbWluID0gMHhmZiwgbWF4ID0gMHgwMDsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CisJdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOworCXVuaW9uIGFjcGlfb2JqZWN0ICpsdmxfZW51bTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCisJcHJvcHMtPmhhbmRsZSA9IGhhbmRsZTsKKwlwcm9wcy0+b2Zmc2V0ID0gMDsKKwlwcm9wcy0+bWF4bHZsID0gMHhmZjsKKworCW9mZnNldCA9IHNvbnlfZmluZF9zbmNfaGFuZGxlKGhhbmRsZSk7CisJaWYgKG9mZnNldCA8IDApCisJCXJldHVybjsKKworCS8qIHRyeSB0byByZWFkIHRoZSBib3VuZGFyaWVzIGZyb20gQUNQSSB0YWJsZXMsIGlmIHdlIGZhaWwgdGhlIGFib3ZlCisJICogZGVmYXVsdHMgc2hvdWxkIGJlIHJlYXNvbmFibGUKKwkgKi8KKwlwYXJhbXMuY291bnQgPSAxOworCXBhcmFtcy5wb2ludGVyID0gJmluX29iajsKKwlpbl9vYmoudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX29iai5pbnRlZ2VyLnZhbHVlID0gb2Zmc2V0OworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjA2IiwgJnBhcmFtcywKKwkJCSZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuOworCisJbHZsX2VudW0gPSAodW5pb24gYWNwaV9vYmplY3QgKikgYnVmZmVyLnBvaW50ZXI7CisJaWYgKCFsdmxfZW51bSkgeworCQlwcl9lcnIoIk5vIFNOMDYgcmV0dXJuIG9iamVjdC4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobHZsX2VudW0tPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlwcl9lcnIoIkludmFsaWQgU04wNiByZXR1cm4gb2JqZWN0IDB4JS4yeFxuIiwKKwkJICAgICAgIGx2bF9lbnVtLT50eXBlKTsKKwkJZ290byBvdXRfaW52YWxpZDsKKwl9CisKKwkvKiB0aGUgYnVmZmVyIGxpc3RzIGJyaWdodG5lc3MgbGV2ZWxzIGF2YWlsYWJsZSwgYnJpZ2h0bmVzcyBsZXZlbHMgYXJlCisJICogZnJvbSAwIHRvIDggaW4gdGhlIGFycmF5LCBvdGhlciB2YWx1ZXMgYXJlIHVzZWQgYnkgQUxTIGNvbnRyb2wuCisJICovCisJZm9yIChpID0gMDsgaSA8IDkgJiYgaSA8IGx2bF9lbnVtLT5idWZmZXIubGVuZ3RoOyBpKyspIHsKKworCQlicmx2bCA9ICoobHZsX2VudW0tPmJ1ZmZlci5wb2ludGVyICsgaSk7CisJCWRwcmludGsoIkJyaWdodG5lc3MgbGV2ZWw6ICVkXG4iLCBicmx2bCk7CisKKwkJaWYgKCFicmx2bCkKKwkJCWJyZWFrOworCisJCWlmIChicmx2bCA+IG1heCkKKwkJCW1heCA9IGJybHZsOworCQlpZiAoYnJsdmwgPCBtaW4pCisJCQltaW4gPSBicmx2bDsKKwl9CisJcHJvcHMtPm9mZnNldCA9IG1pbjsKKwlwcm9wcy0+bWF4bHZsID0gbWF4OworCWRwcmludGsoIkJyaWdodG5lc3MgbGV2ZWxzOiBtaW49JWQgbWF4PSVkXG4iLCBwcm9wcy0+b2Zmc2V0LAorCQkJcHJvcHMtPm1heGx2bCk7CisKK291dF9pbnZhbGlkOgorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm47Cit9CisKIHN0YXRpYyB2b2lkIHNvbnlfbmNfYmFja2xpZ2h0X3NldHVwKHZvaWQpCiB7CiAJYWNwaV9oYW5kbGUgdW51c2VkOwpAQCAtMTUxNiwxNCArMTYzNywxNCBAQAogCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKIAogCWlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEyZikgIT0gLTEpIHsKLQkJYmFja2xpZ2h0X25nX2hhbmRsZSA9IDB4MTJmOwogCQlvcHMgPSAmc29ueV9iYWNrbGlnaHRfbmdfb3BzOwotCQltYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJCXNvbnlfbmNfYmFja2xpZ2h0X25nX3JlYWRfbGltaXRzKDB4MTJmLCAmc29ueV9ibF9wcm9wcyk7CisJCW1heF9icmlnaHRuZXNzID0gc29ueV9ibF9wcm9wcy5tYXhsdmwgLSBzb255X2JsX3Byb3BzLm9mZnNldDsKIAogCX0gZWxzZSBpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMzcpICE9IC0xKSB7Ci0JCWJhY2tsaWdodF9uZ19oYW5kbGUgPSAweDEzNzsKIAkJb3BzID0gJnNvbnlfYmFja2xpZ2h0X25nX29wczsKLQkJbWF4X2JyaWdodG5lc3MgPSAweGZmOworCQlzb255X25jX2JhY2tsaWdodF9uZ19yZWFkX2xpbWl0cygweDEzNywgJnNvbnlfYmxfcHJvcHMpOworCQltYXhfYnJpZ2h0bmVzcyA9IHNvbnlfYmxfcHJvcHMubWF4bHZsIC0gc29ueV9ibF9wcm9wcy5vZmZzZXQ7CiAKIAl9IGVsc2UgaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgIkdCUlQiLAogCQkJCQkJJnVudXNlZCkpKSB7CkBAIC0xNTM2LDIyICsxNjU3LDIyIEBACiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOwogCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzczsKLQlzb255X2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJzb255IiwgTlVMTCwKLQkJCQkJCQkgICZiYWNrbGlnaHRfbmdfaGFuZGxlLAotCQkJCQkJCSAgb3BzLCAmcHJvcHMpOworCXNvbnlfYmxfcHJvcHMuZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigic29ueSIsIE5VTEwsCisJCQkJCQkgICAgICAmc29ueV9ibF9wcm9wcywKKwkJCQkJCSAgICAgIG9wcywgJnByb3BzKTsKIAotCWlmIChJU19FUlIoc29ueV9iYWNrbGlnaHRfZGV2aWNlKSkgewotCQlwcl93YXJuaW5nKERSVl9QRlggInVuYWJsZSB0byByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlXG4iKTsKLQkJc29ueV9iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKKwlpZiAoSVNfRVJSKHNvbnlfYmxfcHJvcHMuZGV2KSkgeworCQlwcl93YXJuKERSVl9QRlggInVuYWJsZSB0byByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlXG4iKTsKKwkJc29ueV9ibF9wcm9wcy5kZXYgPSBOVUxMOwogCX0gZWxzZQotCQlzb255X2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPQotCQkgICAgb3BzLT5nZXRfYnJpZ2h0bmVzcyhzb255X2JhY2tsaWdodF9kZXZpY2UpOworCQlzb255X2JsX3Byb3BzLmRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9CisJCQlvcHMtPmdldF9icmlnaHRuZXNzKHNvbnlfYmxfcHJvcHMuZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgc29ueV9uY19iYWNrbGlnaHRfY2xlYW51cCh2b2lkKQogewotCWlmIChzb255X2JhY2tsaWdodF9kZXZpY2UpCi0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihzb255X2JhY2tsaWdodF9kZXZpY2UpOworCWlmIChzb255X2JsX3Byb3BzLmRldikKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHNvbnlfYmxfcHJvcHMuZGV2KTsKIH0KIAogc3RhdGljIGludCBzb255X25jX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTI1NDksNyArMjY3MCw3IEBACiAJbXV0ZXhfbG9jaygmc3BpY19kZXYubG9jayk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNPTllQSV9JT0NHQlJUOgotCQlpZiAoc29ueV9iYWNrbGlnaHRfZGV2aWNlID09IE5VTEwpIHsKKwkJaWYgKHNvbnlfYmxfcHJvcHMuZGV2ID09IE5VTEwpIHsKIAkJCXJldCA9IC1FSU87CiAJCQlicmVhazsKIAkJfQpAQCAtMjU2Miw3ICsyNjgzLDcgQEAKIAkJCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAljYXNlIFNPTllQSV9JT0NTQlJUOgotCQlpZiAoc29ueV9iYWNrbGlnaHRfZGV2aWNlID09IE5VTEwpIHsKKwkJaWYgKHNvbnlfYmxfcHJvcHMuZGV2ID09IE5VTEwpIHsKIAkJCXJldCA9IC1FSU87CiAJCQlicmVhazsKIAkJfQpAQCAtMjU3Niw4ICsyNjk3LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIHN5bmMgdGhlIGJhY2tsaWdodCBkZXZpY2Ugc3RhdHVzICovCi0JCXNvbnlfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9Ci0JCSAgICBzb255X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcyhzb255X2JhY2tsaWdodF9kZXZpY2UpOworCQlzb255X2JsX3Byb3BzLmRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9CisJCSAgICBzb255X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcyhzb255X2JsX3Byb3BzLmRldik7CiAJCWJyZWFrOwogCWNhc2UgU09OWVBJX0lPQ0dCQVQxQ0FQOgogCQlpZiAoZWNfcmVhZDE2KFNPTllQSV9CQVQxX0ZVTEwsICZ2YWwxNikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwppbmRleCBhMDg1NjFmLi41NjJmY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCkBAIC0xMjgsNyArMTI4LDggQEAKIH07CiAKIC8qIEFDUEkgSElEcyAqLwotI2RlZmluZSBUUEFDUElfQUNQSV9IS0VZX0hJRAkJIklCTTAwNjgiCisjZGVmaW5lIFRQQUNQSV9BQ1BJX0lCTV9IS0VZX0hJRAkiSUJNMDA2OCIKKyNkZWZpbmUgVFBBQ1BJX0FDUElfTEVOT1ZPX0hLRVlfSElECSJMRU4wMDY4IgogI2RlZmluZSBUUEFDUElfQUNQSV9FQ19ISUQJCSJQTlAwQzA5IgogCiAvKiBJbnB1dCBJRHMgKi8KQEAgLTM4NzksNyArMzg4MCw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgaWJtX2h0a19kZXZpY2VfaWRzW10gPSB7Ci0Je1RQQUNQSV9BQ1BJX0hLRVlfSElELCAwfSwKKwl7VFBBQ1BJX0FDUElfSUJNX0hLRVlfSElELCAwfSwKKwl7VFBBQ1BJX0FDUElfTEVOT1ZPX0hLRVlfSElELCAwfSwKIAl7IiIsIDB9LAogfTsKIApAQCAtODYxOCw4ICs4NjIwLDcgQEAKIAkJdHBhY3BpX2lzX2Z3X2RpZ2l0KHNbMV0pICYmCiAJCXNbMl0gPT0gdCAmJiBzWzNdID09ICdUJyAmJgogCQl0cGFjcGlfaXNfZndfZGlnaXQoc1s0XSkgJiYKLQkJdHBhY3BpX2lzX2Z3X2RpZ2l0KHNbNV0pICYmCi0JCXNbNl0gPT0gJ1cnICYmIHNbN10gPT0gJ1cnOworCQl0cGFjcGlfaXNfZndfZGlnaXQoc1s1XSk7CiB9CiAKIC8qIHJldHVybnMgMCAtIHByb2JlIG9rLCBvciA8IDAgLSBwcm9iZSBlcnJvci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2NhcmQuYyBiL2RyaXZlcnMvcG5wL2NhcmQuYwppbmRleCA0YTY1MWY2Li5iYzAwNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9jYXJkLmMKKysrIGIvZHJpdmVycy9wbnAvY2FyZC5jCkBAIC0zMjAsNyArMzIwLDcgQEAKICAqIHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlIC0gU2VhcmNoZXMgZm9yIGEgUG5QIGRldmljZSB1bmRlciB0aGUgc3BlY2lmaWVkIGNhcmQKICAqIEBjbGluazogcG9pbnRlciB0byB0aGUgY2FyZCBsaW5rLCBjYW5ub3QgYmUgTlVMTAogICogQGlkOiBwb2ludGVyIHRvIGEgUG5QIElEIHN0cnVjdHVyZSB0aGF0IGV4cGxhaW5zIHRoZSBydWxlcyBmb3IgZmluZGluZyB0aGUgZGV2aWNlCi0gKiBAZnJvbTogU3RhcnRpbmcgcGxhY2UgdG8gc2VhcmNoIGZyb20uIElmIE5VTEwgaXQgd2lsbCBzdGFydCBmcm9tIHRoZSBiZWdpbmluZy4KKyAqIEBmcm9tOiBTdGFydGluZyBwbGFjZSB0byBzZWFyY2ggZnJvbS4gSWYgTlVMTCBpdCB3aWxsIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZy4KICAqLwogc3RydWN0IHBucF9kZXYgKnBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKHN0cnVjdCBwbnBfY2FyZF9saW5rICpjbGluaywKIAkJCQkJY29uc3QgY2hhciAqaWQsIHN0cnVjdCBwbnBfZGV2ICpmcm9tKQpAQCAtMzY5LDcgKzM2OSw3IEBACiAKIC8qKgogICogcG5wX3JlbGVhc2VfY2FyZF9kZXZpY2UgLSBjYWxsIHRoaXMgd2hlbiB0aGUgZHJpdmVyIG5vIGxvbmdlciBuZWVkcyB0aGUgZGV2aWNlCi0gKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBQblAgZGV2aWNlIHN0dWN0dXJlCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBQblAgZGV2aWNlIHN0cnVjdHVyZQogICovCiB2b2lkIHBucF9yZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBiaW9zL2Jpb3NjYWxscy5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9iaW9zY2FsbHMuYwppbmRleCA4NTkxZjZhLi5iODU5ZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBiaW9zL2Jpb3NjYWxscy5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvYmlvc2NhbGxzLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCQkgICAgICAgbW9kdWxlKTsKIAkJYnJlYWs7CiAJY2FzZSBQTlBfSEFSRFdBUkVfRVJST1I6Ci0JCXByaW50ayhLRVJOX0VSUiAiUG5QQklPUzogJXM6IGEgaGFyZHdhcmUgZmFpbHVyZSBoYXMgb2NjdXJlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJQblBCSU9TOiAlczogYSBoYXJkd2FyZSBmYWlsdXJlIGhhcyBvY2N1cnJlZFxuIiwKIAkJICAgICAgIG1vZHVsZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9LY29uZmlnIGIvZHJpdmVycy9wcHMvS2NvbmZpZwppbmRleCBmMGQzMzc2Li4yNThjYTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcHBzL0tjb25maWcKQEAgLTM1LDcgKzM1LDcgQEAKIAlkZXBlbmRzIG9uIFBQUyAmJiAhTk9fSFoKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGRpcmVjdCBpbi1rZXJuZWwgdGltZQotCSAgc3luY3Jvbml6YXRpb24gdXNpbmcgYW4gZXh0ZXJuYWwgUFBTIHNpZ25hbC4KKwkgIHN5bmNocm9uaXphdGlvbiB1c2luZyBhbiBleHRlcm5hbCBQUFMgc2lnbmFsLgogCiAJICBJdCBkb2Vzbid0IHdvcmsgb24gdGlja2xlc3Mgc3lzdGVtcyBhdCB0aGUgbW9tZW50LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczMtbHBtLmMgYi9kcml2ZXJzL3BzMy9wczMtbHBtLmMKaW5kZXggODAwMDk4NS4uNjQzNjk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzLWxwbS5jCisrKyBiL2RyaXZlcnMvcHMzL3BzMy1scG0uYwpAQCAtOTE5LDcgKzkxOSw3IEBACiAgKiBAb2Zmc2V0OiBPZmZzZXQgaW4gYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHRyYWNlIGJ1ZmZlci4KICAqIEBidWY6IENvcHkgZGVzdGluYXRpb24uCiAgKiBAY291bnQ6IE1heGltdW0gY291bnQgb2YgYnl0ZXMgdG8gY29weS4KLSAqIEBieXRlc19jb3BpZWQ6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjaWV2ZSB0aGUgbnVtYmVyIG9mCisgKiBAYnl0ZXNfY29waWVkOiBQb2ludGVyIHRvIGEgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIG51bWJlciBvZgogICogIGJ5dGVzIGNvcGllZCB0byBAYnVmLgogICoKICAqIE9uIGVycm9yIEBidWYgd2lsbCBjb250YWluIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIHRyYWNlIGJ1ZmZlciBkYXRhCkBAIC05NzQsNyArOTc0LDcgQEAKICAqIEBvZmZzZXQ6IE9mZnNldCBpbiBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdHJhY2UgYnVmZmVyLgogICogQGJ1ZjogQSBfX3VzZXIgY29weSBkZXN0aW5hdGlvbi4KICAqIEBjb3VudDogTWF4aW11bSBjb3VudCBvZiBieXRlcyB0byBjb3B5LgotICogQGJ5dGVzX2NvcGllZDogUG9pbnRlciB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNpZXZlIHRoZSBudW1iZXIgb2YKKyAqIEBieXRlc19jb3BpZWQ6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgbnVtYmVyIG9mCiAgKiAgYnl0ZXMgY29waWVkIHRvIEBidWYuCiAgKgogICogT24gZXJyb3IgQGJ1ZiB3aWxsIGNvbnRhaW4gYW55IHN1Y2Nlc3NmdWxseSBjb3BpZWQgdHJhY2UgYnVmZmVyIGRhdGEKQEAgLTEwNzQsNyArMTA3NCw3IEBACiAKIC8qKgogICogcHMzX2xwbV9vcGVuIC0gT3BlbiB0aGUgbG9naWNhbCBwZXJmb3JtYW5jZSBtb25pdG9yIGRldmljZS4KLSAqIEB0Yl90eXBlOiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgdHJhY2UgYnVmZmVyIGx2MSBzb3VsZCB1c2UgZm9yIHRoaXMgbHBtCisgKiBAdGJfdHlwZTogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRyYWNlIGJ1ZmZlciBsdjEgc2hvdWxkIHVzZSBmb3IgdGhpcyBscG0KICAqICBpbnN0YW5jZSwgc3BlY2lmaWVkIGJ5IG9uZSBvZiBlbnVtIHBzM19scG1fdGJfdHlwZS4KICAqIEB0Yl9jYWNoZTogT3B0aW9uYWwgdXNlciBzdXBwbGllZCBidWZmZXIgdG8gdXNlIGFzIHRoZSB0cmFjZSBidWZmZXIgY2FjaGUuCiAgKiAgSWYgTlVMTCwgdGhlIGRyaXZlciB3aWxsIGFsbG9jYXRlIGFuZCBtYW5hZ2UgYW4gaW50ZXJuYWwgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzLXN5cy1tYW5hZ2VyLmMgYi9kcml2ZXJzL3BzMy9wczMtc3lzLW1hbmFnZXIuYwppbmRleCBkMzdjNDQ1Li4xYjk4MzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczMtc3lzLW1hbmFnZXIuYworKysgYi9kcml2ZXJzL3BzMy9wczMtc3lzLW1hbmFnZXIuYwpAQCAtODAsNyArODAsNyBAQAogICoKICAqIEN1cnJlbnRseSBhbGwgbWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSB0aGUgc3lzdGVtIG1hbmFnZXIgYXJlIGVpdGhlcgogICogKDE2IGJ5dGVzIGhlYWRlciArIDggYnl0ZXMgcGF5bG9hZCA9IDI0IGJ5dGVzKSBvciAoMTYgYnl0ZXMgaGVhZGVyCi0gKiArIDE2IGJ5dGVzIHBheWxvYWQgPSAzMiBieXRlcykuICBUaGlzIGtub3dsZWdlIGlzIHVzZWQgdG8gc2ltcGxpZnkKKyAqICsgMTYgYnl0ZXMgcGF5bG9hZCA9IDMyIGJ5dGVzKS4gIFRoaXMga25vd2xlZGdlIGlzIHVzZWQgdG8gc2ltcGxpZnkKICAqIHRoZSBsb2dpYy4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCmluZGV4IDNhNTlkNWYuLmVlODkzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIH0KIAogLyoqCi0gKiByaW9fZW5hYmxlX3J4X3R4X3BvcnQgLSBlbmFibGUgaW5wdXQgcmVjaWV2ZXIgYW5kIG91dHB1dCB0cmFuc21pdHRlciBvZgorICogcmlvX2VuYWJsZV9yeF90eF9wb3J0IC0gZW5hYmxlIGlucHV0IHJlY2VpdmVyIGFuZCBvdXRwdXQgdHJhbnNtaXR0ZXIgb2YKICAqIGdpdmVuIHBvcnQKICAqIEBwb3J0OiBNYXN0ZXIgcG9ydCBhc3NvY2lhdGVkIHdpdGggdGhlIFJJTyBuZXR3b3JrCiAgKiBAbG9jYWw6IGxvY2FsPTEgc2VsZWN0IGxvY2FsIHBvcnQgb3RoZXJ3aXNlIGEgZmFyIGRldmljZSBpcyByZWFjaGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLmMKaW5kZXggYzI5NzE5Yy4uODZjOWEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8uYwpAQCAtMTE3MSwxNiArMTE3MSwxNyBAQAogCiBfX3NldHVwKCJyaW9oZGlkPSIsIHJpb19oZGlkX3NldHVwKTsKIAotdm9pZCByaW9fcmVnaXN0ZXJfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqcG9ydCkKK2ludCByaW9fcmVnaXN0ZXJfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqcG9ydCkKIHsKIAlpZiAobmV4dF9wb3J0aWQgPj0gUklPX01BWF9NUE9SVFMpIHsKIAkJcHJfZXJyKCJSSU86IHJlYWNoZWQgc3BlY2lmaWVkIG1heCBudW1iZXIgb2YgbXBvcnRzXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAKIAlwb3J0LT5pZCA9IG5leHRfcG9ydGlkKys7CiAJcG9ydC0+aG9zdF9kZXZpY2VpZCA9IHJpb19nZXRfaGRpZChwb3J0LT5pZCk7CiAJbGlzdF9hZGRfdGFpbCgmcG9ydC0+bm9kZSwgJnJpb19tcG9ydHMpOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChyaW9fbG9jYWxfZ2V0X2RldmljZV9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0X2dlbjIuYyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCmluZGV4IDA5NTAxNmEuLjA0M2VlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCkBAIC05NSw2ICs5NSw5IEBACiAJZWxzZQogCQl0YWJsZSsrOwogCisJaWYgKHJvdXRlX3BvcnQgPT0gUklPX0lOVkFMSURfUk9VVEUpCisJCXJvdXRlX3BvcnQgPSBJRFRfREVGQVVMVF9ST1VURTsKKwogCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCiAJCQkJICBMT0NBTF9SVEVfQ09ORl9ERVNUSURfU0VMLCB0YWJsZSk7CiAKQEAgLTQxMSw2ICs0MTQsMTIgQEAKIAlyZGV2LT5yc3dpdGNoLT5lbV9oYW5kbGUgPSBpZHRnMl9lbV9oYW5kbGVyOwogCXJkZXYtPnJzd2l0Y2gtPnN3X3N5c2ZzID0gaWR0ZzJfc3lzZnM7CiAKKwlpZiAoZG9fZW51bSkgeworCQkvKiBFbnN1cmUgdGhhdCBkZWZhdWx0IHJvdXRpbmcgaXMgZGlzYWJsZWQgb24gc3RhcnR1cCAqLworCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCisJCQkJICAgIFJJT19TVERfUlRFX0RFRkFVTFRfUE9SVCwgSURUX05PX1JPVVRFKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE4LDMgKzQyNyw0IEBACiBERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRDUFMxNjE2LCBpZHRnMl9zd2l0Y2hfaW5pdCk7CiBERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRWUFMxNjE2LCBpZHRnMl9zd2l0Y2hfaW5pdCk7CiBERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRTUFMxNjE2LCBpZHRnMl9zd2l0Y2hfaW5pdCk7CitERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRDUFMxNDMyLCBpZHRnMl9zd2l0Y2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0Y3BzLmMgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0Y3BzLmMKaW5kZXggM2E5NzEwNy4uZDA2ZWUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRjcHMuYwpAQCAtMjYsNiArMjYsOSBAQAogewogCXUzMiByZXN1bHQ7CiAKKwlpZiAocm91dGVfcG9ydCA9PSBSSU9fSU5WQUxJRF9ST1VURSkKKwkJcm91dGVfcG9ydCA9IENQU19ERUZBVUxUX1JPVVRFOworCiAJaWYgKHRhYmxlID09IFJJT19HTE9CQUxfVEFCTEUpIHsKIAkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKIAkJCQlSSU9fU1REX1JURV9DT05GX0RFU1RJRF9TRUxfQ1NSLCByb3V0ZV9kZXN0aWQpOwpAQCAtMTMwLDYgKzEzMyw5IEBACiAJCS8qIHNldCBUVkFMID0gfjUwdXMgKi8KIAkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX0xJTktUT19DVExfQ1NSLCAweDhlIDw8IDgpOworCQkvKiBFbnN1cmUgdGhhdCBkZWZhdWx0IHJvdXRpbmcgaXMgZGlzYWJsZWQgb24gc3RhcnR1cCAqLworCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCisJCQkJICAgIFJJT19TVERfUlRFX0RFRkFVTFRfUE9SVCwgQ1BTX05PX1JPVVRFKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy90c2k1N3guYyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy90c2k1N3guYwppbmRleCAxYTYyOTM0Li5kYjhiODAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL3RzaTU3eC5jCkBAIC0zMDMsNiArMzAzLDEyIEBACiAJcmRldi0+cnN3aXRjaC0+ZW1faW5pdCA9IHRzaTU3eF9lbV9pbml0OwogCXJkZXYtPnJzd2l0Y2gtPmVtX2hhbmRsZSA9IHRzaTU3eF9lbV9oYW5kbGVyOwogCisJaWYgKGRvX2VudW0pIHsKKwkJLyogRW5zdXJlIHRoYXQgZGVmYXVsdCByb3V0aW5nIGlzIGRpc2FibGVkIG9uIHN0YXJ0dXAgKi8KKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LCBSSU9fU1REX1JURV9ERUZBVUxUX1BPUlQsCisJCQkJICAgIFJJT19JTlZBTElEX1JPVVRFKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IDNmZmM2OTcuLjBmYWU1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTEzMTMsNyArMTMxMyw3IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJCS8qIFF1ZXJ5IGJlZm9yZSBlbmFibGluZyBpbiBjYXNlIGNvbmZpZ3VyYXRpb24KLQkJCSAqIGRlcGVuZGFudC4gICovCisJCQkgKiBkZXBlbmRlbnQuICAqLwogCQkJcmV0ID0gX3JlZ3VsYXRvcl9nZXRfZW5hYmxlX3RpbWUocmRldik7CiAJCQlpZiAocmV0ID49IDApIHsKIAkJCQlkZWxheSA9IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYwppbmRleCBhOGY0ZWNmLi5kYWZmN2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAogCWlmIChlcnIpIHsKIAkJZGV2X3dhcm4obWF4ODk1Mi0+ZGV2LCAiVklEMC8xIGdwaW8gaW52YWxpZDogIgotCQkJCSJEVlMgbm90IGF2aWxhYmxlLlxuIik7CisJCQkJIkRWUyBub3QgYXZhaWxhYmxlLlxuIik7CiAJCW1heDg5NTItPnZpZDAgPSAwOwogCQltYXg4OTUyLT52aWQxID0gMDsKIAkJLyogTWFyayBpbnZhbGlkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCAwOWI0NDM3Yi4uMzkwMTM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvY2xhc3MuYworKysgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAllcnIgPSBfX3J0Y19yZWFkX2FsYXJtKHJ0YywgJmFscm0pOwogCiAJaWYgKCFlcnIgJiYgIXJ0Y192YWxpZF90bSgmYWxybS50aW1lKSkKLQkJcnRjX3NldF9hbGFybShydGMsICZhbHJtKTsKKwkJcnRjX2luaXRpYWxpemVfYWxhcm0ocnRjLCAmYWxybSk7CiAKIAlzdHJsY3B5KHJ0Yy0+bmFtZSwgbmFtZSwgUlRDX0RFVklDRV9OQU1FX1NJWkUpOwogCWRldl9zZXRfbmFtZSgmcnRjLT5kZXYsICJydGMlZCIsIGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKaW5kZXggOGVjNmIwNi4uZWY2MzE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKQEAgLTM3NSw2ICszNzUsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19zZXRfYWxhcm0pOwogCisvKiBDYWxsZWQgb25jZSBwZXIgZGV2aWNlIGZyb20gcnRjX2RldmljZV9yZWdpc3RlciAqLworaW50IHJ0Y19pbml0aWFsaXplX2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcnRjX3ZhbGlkX3RtKCZhbGFybS0+dGltZSk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZydGMtPm9wc19sb2NrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcnRjLT5haWVfdGltZXIubm9kZS5leHBpcmVzID0gcnRjX3RtX3RvX2t0aW1lKGFsYXJtLT50aW1lKTsKKwlydGMtPmFpZV90aW1lci5wZXJpb2QgPSBrdGltZV9zZXQoMCwgMCk7CisJaWYgKGFsYXJtLT5lbmFibGVkKSB7CisJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAxOworCQl0aW1lcnF1ZXVlX2FkZCgmcnRjLT50aW1lcnF1ZXVlLCAmcnRjLT5haWVfdGltZXIubm9kZSk7CisJfQorCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0Y19pbml0aWFsaXplX2FsYXJtKTsKKworCisKIGludCBydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlpbnQgZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZydGMtPm9wc19sb2NrKTsKQEAgLTQ1NCw3ICs0ODAsNyBAQAogICogQHJ0YzogcG9pbnRlciB0byB0aGUgcnRjIGRldmljZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gQUlFLCBVSUUgb3IgUElFIG1vZGUgaW50ZXJydXB0Ci0gKiBoYXMgb2NjdXJlZCAob3IgYmVlbiBlbXVsYXRlZCkuCisgKiBoYXMgb2NjdXJyZWQgKG9yIGJlZW4gZW11bGF0ZWQpLgogICoKICAqIFRyaWdnZXJzIHRoZSByZWdpc3RlcmVkIGlycV90YXNrIGZ1bmN0aW9uIGNhbGxiYWNrLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwppbmRleCA1MThhNzZlLi5lMzliNzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkvKgogCSAqIFRoZSBDYWxlbmRhciBBbGFybSByZWdpc3RlciBkb2VzIG5vdCBoYXZlIGEgZmllbGQgZm9yCiAJICogdGhlIHllYXIgLSBzbyB0aGVzZSB3aWxsIHJldHVybiBhbiBpbnZhbGlkIHZhbHVlLiAgV2hlbiBhbgotCSAqIGFsYXJtIGlzIHNldCwgYXQ5MV9hbGFybV95ZWFyIHdpbGxlIHN0b3JlIHRoZSBjdXJyZW50IHllYXIuCisJICogYWxhcm0gaXMgc2V0LCBhdDkxX2FsYXJtX3llYXIgd2lsbCBzdG9yZSB0aGUgY3VycmVudCB5ZWFyLgogCSAqLwogCXRtLT50bV95ZWFyICA9IGJjZDJiaW4oZGF0ZSAmIEFUOTFfUlRDX0NFTlQpICogMTAwOwkvKiBjZW50dXJ5ICovCiAJdG0tPnRtX3llYXIgKz0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX1lFQVIpID4+IDgpOwkvKiB5ZWFyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jIGIvZHJpdmVycy9ydGMvcnRjLWJmaW4uYwppbmRleCBjYTljZmY4Li45MGQ4NjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKQEAgLTIwLDkgKzIwLDkgQEAKICAqIHdyaXRlIHdvdWxkIGJlIGRpc2NhcmRlZCBhbmQgdGhpbmdzIHF1aWNrbHkgZmFsbCBhcGFydC4KICAqCiAgKiBUbyBrZWVwIHRoaXMgZGVsYXkgZnJvbSBzaWduaWZpY2FudGx5IGRlZ3JhZGluZyBwZXJmb3JtYW5jZSAod2UsIGluIHRoZW9yeSwKLSAqIHdvdWxkIGhhdmUgdG8gc2xlZXAgZm9yIHVwIHRvIDEgc2Vjb25kIGV2ZXJ5dGltZSB3ZSB3YW50ZWQgdG8gd3JpdGUgYQorICogd291bGQgaGF2ZSB0byBzbGVlcCBmb3IgdXAgdG8gMSBzZWNvbmQgZXZlcnkgdGltZSB3ZSB3YW50ZWQgdG8gd3JpdGUgYQogICogcmVnaXN0ZXIpLCB3ZSBvbmx5IGNoZWNrIHRoZSB3cml0ZSBwZW5kaW5nIHN0YXR1cyBiZWZvcmUgd2Ugc3RhcnQgdG8gaXNzdWUKLSAqIGEgbmV3IHdyaXRlLiAgV2UgYmFuayBvbiB0aGUgaWRlYSB0aGF0IGl0IGRvZXNudCBtYXR0ZXIgd2hlbiB0aGUgc3luYworICogYSBuZXcgd3JpdGUuICBXZSBiYW5rIG9uIHRoZSBpZGVhIHRoYXQgaXQgZG9lc24ndCBtYXR0ZXIgd2hlbiB0aGUgc3luYwogICogaGFwcGVucyBzbyBsb25nIGFzIHdlIGRvbid0IGF0dGVtcHQgYW5vdGhlciB3cml0ZSBiZWZvcmUgaXQgZG9lcy4gIFRoZSBvbmx5CiAgKiB0aW1lIHVzZXJzcGFjZSB3b3VsZCB0YWtlIHRoaXMgcGVuYWx0eSBpcyB3aGVuIHRoZXkgdHJ5IGFuZCBkbyBtdWx0aXBsZQogICogb3BlcmF0aW9ucyByaWdodCBhZnRlciBhbm90aGVyIC4uLiBidXQgaW4gdGhpcyBjYXNlLCB0aGV5IG5lZWQgdG8gdGFrZSB0aGUKQEAgLTI1MCw2ICsyNTAsOCBAQAogCQliZmluX3J0Y19pbnRfc2V0X2FsYXJtKHJ0Yyk7CiAJZWxzZQogCQliZmluX3J0Y19pbnRfY2xlYXIofihSVENfSVNUQVRfQUxBUk0gfCBSVENfSVNUQVRfQUxBUk1fREFZKSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBiZmluX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCmluZGV4IDMxNmY0ODQuLjgwZjljODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKQEAgLTIyMCw2ICsyMjAsNyBAQAogCX0KIAljbGtfZGlzYWJsZShydGFwLT5jbGspOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRhcCk7CiAJcnRhcC0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiY29oOTAxMzMxIiwgJnBkZXYtPmRldiwgJmNvaDkwMTMzMV9vcHMsCiAJCQkJCSBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGFwLT5ydGMpKSB7CkBAIC0yMjcsMTEgKzIyOCwxMCBAQAogCQlnb3RvIG91dF9ub19ydGM7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRhcCk7Ci0KIAlyZXR1cm4gMDsKIAogIG91dF9ub19ydGM6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAgb3V0X25vX2Nsa19lbmFibGU6CiAJY2xrX3B1dChydGFwLT5jbGspOwogIG91dF9ub19jbGs6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGF2aW5jaS5jIGIvZHJpdmVycy9ydGMvcnRjLWRhdmluY2kuYwppbmRleCA4ZDQ2ODM4Li43NTVlMWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kYXZpbmNpLmMKQEAgLTUyNCw2ICs1MjQsOCBAQAogCQlnb3RvIGZhaWwyOwogCX0KIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdmluY2lfcnRjKTsKKwogCWRhdmluY2lfcnRjLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCiAJCQkJICAgICZkYXZpbmNpX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKGRhdmluY2lfcnRjLT5ydGMpKSB7CkBAIC01NTMsOCArNTU1LDYgQEAKIAogCXJ0Y3NzX3dyaXRlKGRhdmluY2lfcnRjLCBQUlRDU1NfUlRDX0NDVFJMX0NBRU4sIFBSVENTU19SVENfQ0NUUkwpOwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF2aW5jaV9ydGMpOwotCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCiAJcmV0dXJuIDA7CkBAIC01NjIsNiArNTYyLDcgQEAKIGZhaWw0OgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihkYXZpbmNpX3J0Yy0+cnRjKTsKIGZhaWwzOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWlvdW5tYXAoZGF2aW5jaV9ydGMtPmJhc2UpOwogZmFpbDI6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdmluY2lfcnRjLT5wYmFzZSwgZGF2aW5jaV9ydGMtPmJhc2Vfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKaW5kZXggNjBjZTY5Ni4uNDdlNjgxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYwpAQCAtMzU1LDYgKzM1NSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiZHMxMjg2IiwgJnBkZXYtPmRldiwKIAkJCQkgICZkczEyODZfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CkBAIC0zNjIsNyArMzYzLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCXByaXYtPnJ0YyA9IHJ0YzsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAlyZXR1cm4gMDsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCmluZGV4IDExYWU2NGQuLjMzNTU1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKQEAgLTE1MSw2ICsxNTEsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBlcDkzeHhfcnRjOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsCiAJCQkJJnBkZXYtPmRldiwgJmVwOTN4eF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CkBAIC0xNTksOCArMTYwLDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7Ci0KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZXA5M3h4X3J0Y19zeXNmc19maWxlcyk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwpAQCAtMTY4LDkgKzE2Nyw5IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiBleGl0OgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWxwYzMyeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1scGMzMnh4LmMKaW5kZXggZWM4NzAxYy4uYWUxNjI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWxwYzMyeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbHBjMzJ4eC5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcnRjLT5sb2NrKTsKIAogCS8qCi0JICogVGhlIFJUQyBpcyBvbiBhIHNlcGVyYXRlIHBvd2VyIGRvbWFpbiBhbmQgY2FuIGtlZXAgaXQncyBzdGF0ZQorCSAqIFRoZSBSVEMgaXMgb24gYSBzZXBhcmF0ZSBwb3dlciBkb21haW4gYW5kIGNhbiBrZWVwIGl0J3Mgc3RhdGUKIAkgKiBhY3Jvc3MgYSBjaGlwIHBvd2VyIGN5Y2xlLiBJZiB0aGUgUlRDIGhhcyBuZXZlciBiZWVuIHByZXZpb3VzbHkKIAkgKiBzZXR1cCwgdGhlbiBzZXQgaXQgdXAgbm93IGZvciB0aGUgZmlyc3QgdGltZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA2OWZlNjY0Li5lZGExMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC03ODMsNiArNzgzLDkgQEAKIAkJZ290byBleGl0OwogCX0KIAorCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOworCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihjbGllbnQtPm5hbWUsICZjbGllbnQtPmRldiwKIAkJCQkgICZtNDF0ODBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewpAQCAtNzkyLDggKzc5NSw2IEBACiAJfQogCiAJY2xpZW50ZGF0YS0+cnRjID0gcnRjOwotCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOwogCiAJLyogTWFrZSBzdXJlIEhUIChIYWx0IFVwZGF0ZSkgYml0IGlzIGNsZWFyZWQgKi8KIAlyYyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fSE9VUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDg5MjUuYwppbmRleCAxNzQwMzZkLi4zYmMwNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTI1LmMKQEAgLTI1Nyw2ICsyNTcsMTAgQEAKIAkJZ290byBvdXRfaXJxOwogCX0KIAorCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwkvKiBYWFggLSBpc24ndCB0aGlzIHJlZHVuZGFudD8gKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTI1LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkJCSZtYXg4OTI1X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlyZXQgPSBQVFJfRVJSKGluZm8tPnJ0Y19kZXYpOwpAQCAtMjY1LDExICsyNjksOSBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwotCiAJcmV0dXJuIDA7CiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfaXJxKGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfUlRDX0FMQVJNMCwgaW5mbyk7CiBvdXRfaXJxOgogCWtmcmVlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTk4LmMKaW5kZXggM2Y3YmM2Yi4uMmU0OGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4ODk5OC5jCkBAIC0yNjUsNiArMjY1LDggQEAKIAlpbmZvLT5ydGMgPSBtYXg4OTk4LT5ydGM7CiAJaW5mby0+aXJxID0gbWF4ODk5OC0+aXJxX2Jhc2UgKyBNQVg4OTk4X0lSUV9BTEFSTTA7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTk4LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkmbWF4ODk5OF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKQEAgLTI3NCw4ICsyNzYsNiBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7Ci0KIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpbmZvLT5pcnEsIE5VTEwsIG1heDg5OThfcnRjX2FsYXJtX2lycSwgMCwKIAkJCSJydGMtYWxhcm0wIiwgaW5mbyk7CiAKQEAgLTI5Myw2ICsyOTMsNyBAQAogCXJldHVybiAwOwogCiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGluZm8pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jIGIvZHJpdmVycy9ydGMvcnRjLW1jMTN4eHguYwppbmRleCBjNDIwMDY0Li5hMWEyNzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzeHh4LmMKQEAgLTM0OSwxMSArMzQ5LDE1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWxhcm1faXJxX3JlcXVlc3Q7CiAKKwltYzEzeHh4X3VubG9jayhtYzEzeHh4KTsKKwogCXByaXYtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKIAkJCSZwZGV2LT5kZXYsICZtYzEzeHh4X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHByaXYtPnJ0YykpIHsKIAkJcmV0ID0gUFRSX0VSUihwcml2LT5ydGMpOwogCisJCW1jMTN4eHhfbG9jayhtYzEzeHh4KTsKKwogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1RPREEsIHByaXYpOwogZXJyX2FsYXJtX2lycV9yZXF1ZXN0OgogCkBAIC0zNjUsMTIgKzM2OSwxMiBAQAogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1JUQ1JTVCwgcHJpdik7CiBlcnJfcmVzZXRfaXJxX3JlcXVlc3Q6CiAKKwkJbWMxM3h4eF91bmxvY2sobWMxM3h4eCk7CisKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJCWtmcmVlKHByaXYpOwogCX0KIAotCW1jMTN4eHhfdW5sb2NrKG1jMTN4eHgpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDAxLDYgKzQwNSw3IEBACiAJfSwgewogCQkubmFtZSA9ICJtYzEzODkyLXJ0YyIsCiAJfSwKKwl7IH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jMTN4eHhfcnRjX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jCmluZGV4IDMzMmEyYzQuLmIyZjA5NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwpAQCAtMzQyLDYgKzM0Miw4IEBACiAKIAltcnN0X3J0Yy5pcnEgPSBydGNfaXJxOwogCW1yc3RfcnRjLmlvbWVtID0gaW9tZW07CisJbXJzdF9ydGMuZGV2ID0gZGV2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYsICZtcnN0X3J0Yyk7CiAKIAltcnN0X3J0Yy5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKGRyaXZlcl9uYW1lLCBkZXYsCiAJCQkJJm1yc3RfcnRjX29wcywgVEhJU19NT0RVTEUpOwpAQCAtMzUwLDggKzM1Miw2IEBACiAJCWdvdG8gY2xlYW51cDA7CiAJfQogCi0JbXJzdF9ydGMuZGV2ID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsICZtcnN0X3J0Yyk7CiAJcmVuYW1lX3JlZ2lvbihpb21lbSwgZGV2X25hbWUoJm1yc3RfcnRjLnJ0Yy0+ZGV2KSk7CiAKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CkBAIC0zNzYsOSArMzc2LDEwIEBACiAJcmV0dXJuIDA7CiAKIGNsZWFudXAxOgotCW1yc3RfcnRjLmRldiA9IE5VTEw7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKG1yc3RfcnRjLnJ0Yyk7CiBjbGVhbnVwMDoKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwltcnN0X3J0Yy5kZXYgPSBOVUxMOwogCXJlbGVhc2VfcmVnaW9uKGlvbWVtLT5zdGFydCwgaW9tZW0tPmVuZCArIDEgLSBpb21lbS0+c3RhcnQpOwogCWRldl9lcnIoZGV2LCAicnRjLW1yc3Q6IHVuYWJsZSB0byBpbml0aWFsaXNlXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKaW5kZXggNjc4MjA2Mi4uZmNiMTEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCkBAIC0yMTQsNiArMjE0LDcgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3ByaXY7CiAJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtbXNtNjI0MiIsICZkZXYtPmRldiwgJm1zbTYyNDJfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKQEAgLTIyMywxMCArMjI0LDEwIEBACiAJfQogCiAJcHJpdi0+cnRjID0gcnRjOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAJcmV0dXJuIDA7CiAKIG91dF91bm1hcDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWlvdW5tYXAocHJpdi0+cmVncyk7CiBvdXRfZnJlZV9wcml2OgogCWtmcmVlKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jIGIvZHJpdmVycy9ydGMvcnRjLW14Yy5jCmluZGV4IDgyNmFiNjQuLmQ4MTQ0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1teGMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKQEAgLTQxOCwxNCArNDE4LDYgQEAKIAkJZ290byBleGl0X3B1dF9jbGs7CiAJfQogCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LCAmbXhjX3J0Y19vcHMsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXJldCA9IFBUUl9FUlIocnRjKTsKLQkJZ290byBleGl0X3B1dF9jbGs7Ci0JfQotCi0JcGRhdGEtPnJ0YyA9IHJ0YzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CiAKIAkvKiBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgUlRDICovCkBAIC00MzgsOCArNDMwLDE5IEBACiAJCXBkYXRhLT5pcnEgPSAtMTsKIAl9CiAKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZteGNfcnRjX29wcywKKwkJCQkgIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMpOworCQlnb3RvIGV4aXRfY2xyX2RydmRhdGE7CisJfQorCisJcGRhdGEtPnJ0YyA9IHJ0YzsKKwogCXJldHVybiAwOwogCitleGl0X2Nscl9kcnZkYXRhOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogZXhpdF9wdXRfY2xrOgogCWNsa19kaXNhYmxlKHBkYXRhLT5jbGspOwogCWNsa19wdXQocGRhdGEtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCBkZTBkZDdiLi5iY2FlOGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTM5NCw3ICszOTQsNyBAQAogCXJldHVybiAwOwogCiBmYWlsMjoKLQlmcmVlX2lycShvbWFwX3J0Y190aW1lciwgTlVMTCk7CisJZnJlZV9pcnEob21hcF9ydGNfdGltZXIsIHJ0Yyk7CiBmYWlsMToKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIGZhaWwwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2FwLmMKaW5kZXggYTYzM2FiYy4uY2Q0ZjE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNhcC5jCkBAIC0xNTEsNiArMTUxLDggQEAKIAogCXBjYXBfcnRjLT5wY2FwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNhcF9ydGMpOworCiAJcGNhcF9ydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBjYXAiLCAmcGRldi0+ZGV2LAogCQkJCSAgJnBjYXBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocGNhcF9ydGMtPnJ0YykpIHsKQEAgLTE1OCw3ICsxNjAsNiBAQAogCQlnb3RvIGZhaWxfcnRjOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBjYXBfcnRjKTsKIAogCXRpbWVyX2lycSA9IHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV8xSFopOwogCWFsYXJtX2lycSA9IHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV9UT0RBKTsKQEAgLTE3Nyw2ICsxNzgsNyBAQAogZmFpbF90aW1lcjoKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocGNhcF9ydGMtPnJ0Yyk7CiBmYWlsX3J0YzoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShwY2FwX3J0Yyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwppbmRleCA2OTRkYTM5Li4zNTlkYTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCkBAIC0yNDksMTUgKzI0OSwxNSBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKwogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1ycDVjMDEiLCAmZGV2LT5kZXYsICZycDVjMDFfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHJ0Yyk7CiAJCWdvdG8gb3V0X3VubWFwOwogCX0KLQogCXByaXYtPnJ0YyA9IHJ0YzsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpOwogCiAJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+ZGV2LmtvYmosICZwcml2LT5udnJhbV9hdHRyKTsKIAlpZiAoZXJyb3IpCkBAIC0yNjgsNiArMjY4LDcgQEAKIG91dF91bnJlZ2lzdGVyOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogb3V0X3VubWFwOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJaW91bm1hcChwcml2LT5yZWdzKTsKIG91dF9mcmVlX3ByaXY6CiAJa2ZyZWUocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggNzE0OTY0OS4uMTY1MTJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtNDYsNiArNDYsNyBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqczNjX3J0Y19iYXNlOwogc3RhdGljIGludCBzM2NfcnRjX2FsYXJtbm8gPSBOT19JUlE7CiBzdGF0aWMgaW50IHMzY19ydGNfdGlja25vICA9IE5PX0lSUTsKK3N0YXRpYyBib29sIHdha2VfZW47CiBzdGF0aWMgZW51bSBzM2NfY3B1X3R5cGUgczNjX3J0Y19jcHVfdHlwZTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzM2NfcnRjX3BpZV9sb2NrKTsKQEAgLTMzNiw3ICszMzcsNiBAQAogCiAJLyogZG8gbm90IGNsZWFyIEFJRSBoZXJlLCBpdCBtYXkgYmUgbmVlZGVkIGZvciB3YWtlICovCiAKLQlzM2NfcnRjX3NldHBpZShkZXYsIDApOwogCWZyZWVfaXJxKHMzY19ydGNfYWxhcm1ubywgcnRjX2Rldik7CiAJZnJlZV9pcnEoczNjX3J0Y190aWNrbm8sIHJ0Y19kZXYpOwogfQpAQCAtNDA4LDcgKzQwOCw2IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIAotCXMzY19ydGNfc2V0cGllKCZkZXYtPmRldiwgMCk7CiAJczNjX3J0Y19zZXRhaWUoJmRldi0+ZGV2LCAwKTsKIAogCWNsa19kaXNhYmxlKHJ0Y19jbGspOwpAQCAtNTY0LDggKzU2MywxMiBAQAogCX0KIAlzM2NfcnRjX2VuYWJsZShwZGV2LCAwKTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKLQkJZW5hYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubyk7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpICYmICF3YWtlX2VuKSB7CisJCWlmIChlbmFibGVfaXJxX3dha2UoczNjX3J0Y19hbGFybW5vKSA9PSAwKQorCQkJd2FrZV9lbiA9IHRydWU7CisJCWVsc2UKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVuYWJsZV9pcnFfd2FrZSBmYWlsZWRcbiIpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNTgxLDggKzU4NCwxMCBAQAogCQl3cml0ZXcodG1wIHwgdGljbnRfZW5fc2F2ZSwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9SVENDT04pOwogCX0KIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikgJiYgd2FrZV9lbikgewogCQlkaXNhYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubyk7CisJCXdha2VfZW4gPSBmYWxzZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKaW5kZXggOWFhZTQ5MS4uYjAwYWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKQEAgLTU3Myw3ICs1NzMsNyBAQAogCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcnRjKTsKIAotCS8qIENoZWNrIGZvciBwb3dlciBmYWlsdXJlcyBhbmQgZXZlbnR1YWx5IGVuYWJsZSB0aGUgb3NjICovCisJLyogQ2hlY2sgZm9yIHBvd2VyIGZhaWx1cmVzIGFuZCBldmVudHVhbGx5IGVuYWJsZSB0aGUgb3NjICovCiAJaWYgKChlcnIgPSB4MTIwNV9nZXRfc3RhdHVzKGNsaWVudCwgJnNyKSkgPT0gMCkgewogCQlpZiAoc3IgJiBYMTIwNV9TUl9SVENGKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDRkMmRmMmYuLjg2YjZmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMTc0MiwxMSArMTc0MiwyMCBAQAogc3RhdGljIGlubGluZSBpbnQgX2Rhc2RfdGVybV9ydW5uaW5nX2NxcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJaW50IHJjOwogCiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+Y2N3X3F1ZXVlKSkKIAkJcmV0dXJuIDA7CiAJY3FyID0gbGlzdF9lbnRyeShkZXZpY2UtPmNjd19xdWV1ZS5uZXh0LCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKLQlyZXR1cm4gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CisJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKKwlpZiAoIXJjKQorCQkvKgorCQkgKiBDUVIgdGVybWluYXRlZCBiZWNhdXNlIGEgbW9yZSBpbXBvcnRhbnQgcmVxdWVzdCBpcyBwZW5kaW5nLgorCQkgKiBVbmRvIGRlY3JlYXNpbmcgb2YgcmV0cnkgY291bnRlciBiZWNhdXNlIHRoaXMgaXMKKwkJICogbm90IGFuIGVycm9yIGNhc2UuCisJCSAqLworCQljcXItPnJldHJpZXMrKzsKKwlyZXR1cm4gcmM7CiB9CiAKIGludCBkYXNkX3NsZWVwX29uX2ltbWVkaWF0bHkoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyKQpAQCAtMjMxNCwxNSArMjMyMywxNCBAQAogCiBzdGF0aWMgaW50IGRhc2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAlpbnQgcmM7CiAKLQlpZiAoIWJsb2NrKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWJhc2UgPSBibG9jay0+YmFzZTsKLQlhdG9taWNfaW5jKCZibG9jay0+b3Blbl9jb3VudCk7CisJYXRvbWljX2luYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOwogCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfT0ZGTElORSwgJmJhc2UtPmZsYWdzKSkgewogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMjM1NSwyMSArMjM2MywyOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIDA7CiAKIG91dDoKIAltb2R1bGVfcHV0KGJhc2UtPmRpc2NpcGxpbmUtPm93bmVyKTsKIHVubG9jazoKLQlhdG9taWNfZGVjKCZibG9jay0+b3Blbl9jb3VudCk7CisJYXRvbWljX2RlYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZGFzZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAotCWF0b21pY19kZWMoJmJsb2NrLT5vcGVuX2NvdW50KTsKLQltb2R1bGVfcHV0KGJsb2NrLT5iYXNlLT5kaXNjaXBsaW5lLT5vd25lcik7CisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhkaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJYXRvbWljX2RlYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOworCW1vZHVsZV9wdXQoYmFzZS0+ZGlzY2lwbGluZS0+b3duZXIpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3OCwyMCArMjM5MywyMCBAQAogICovCiBzdGF0aWMgaW50IGRhc2RfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAKLQlibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoIWJsb2NrKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT0RFVjsKLQliYXNlID0gYmxvY2stPmJhc2U7CiAKIAlpZiAoIWJhc2UtPmRpc2NpcGxpbmUgfHwKLQkgICAgIWJhc2UtPmRpc2NpcGxpbmUtPmZpbGxfZ2VvbWV0cnkpCisJICAgICFiYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KSB7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQliYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KGJsb2NrLCBnZW8pOwotCWdlby0+c3RhcnQgPSBnZXRfc3RhcnRfc2VjdChiZGV2KSA+PiBibG9jay0+czJiX3NoaWZ0OworCX0KKwliYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KGJhc2UtPmJsb2NrLCBnZW8pOworCWdlby0+c3RhcnQgPSBnZXRfc3RhcnRfc2VjdChiZGV2KSA+PiBiYXNlLT5ibG9jay0+czJiX3NoaWZ0OworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUyOCw3ICsyNTQzLDYgQEAKIAlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX05FVyk7CiAJLyogZGFzZF9kZWxldGVfZGV2aWNlIGRlc3Ryb3lzIHRoZSBkZXZpY2UgcmVmZXJlbmNlLiAqLwogCWJsb2NrID0gZGV2aWNlLT5ibG9jazsKLQlkZXZpY2UtPmJsb2NrID0gTlVMTDsKIAlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKIAkvKgogCSAqIGxpZmUgY3ljbGUgb2YgYmxvY2sgaXMgYm91bmQgdG8gZGV2aWNlLCBzbyBkZWxldGUgaXQgYWZ0ZXIKQEAgLTI2NTAsNyArMjY2NCw2IEBACiAJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9ORVcpOwogCS8qIGRhc2RfZGVsZXRlX2RldmljZSBkZXN0cm95cyB0aGUgZGV2aWNlIHJlZmVyZW5jZS4gKi8KIAlibG9jayA9IGRldmljZS0+YmxvY2s7Ci0JZGV2aWNlLT5ibG9jayA9IE5VTEw7CiAJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CiAJLyoKIAkgKiBsaWZlIGN5Y2xlIG9mIGJsb2NrIGlzIGJvdW5kIHRvIGRldmljZSwgc28gZGVsZXRlIGl0IGFmdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCAxNjU0YTI0Li44N2EwY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTIyMDcsNyArMjIwNyw3IEBACiAgKiBEQVNEXzM5OTBfRVJQX0NPTlRST0xfQ0hFQ0sKICAqCiAgKiBERVNDUklQVElPTgotICogICBEb2VzIGEgZ2VuZXJpYyBpbnNwZWN0aW9uIGlmIGEgY29udHJvbCBjaGVjayBvY2N1cmVkIGFuZCBzZXRzIHVwCisgKiAgIERvZXMgYSBnZW5lcmljIGluc3BlY3Rpb24gaWYgYSBjb250cm9sIGNoZWNrIG9jY3VycmVkIGFuZCBzZXRzIHVwCiAgKiAgIHRoZSByZWxhdGVkIGVycm9yIHJlY292ZXJ5IHByb2NlZHVyZQogICoKICAqIFBBUkFNRVRFUgpAQCAtMjI1MCw3ICsyMjUwLDcgQEAKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnBfbmV3ID0gTlVMTDsKIAljaGFyICpzZW5zZTsKIAotCS8qIGlmIHRoaXMgcHJvYmxlbSBvY2N1cmVkIG9uIGFuIGFsaWFzIHJldHJ5IG9uIGJhc2UgKi8KKwkvKiBpZiB0aGlzIHByb2JsZW0gb2NjdXJyZWQgb24gYW4gYWxpYXMgcmV0cnkgb24gYmFzZSAqLwogCWVycF9uZXcgPSBkYXNkXzM5OTBfZXJwX2luc3BlY3RfYWxpYXMoZXJwKTsKIAlpZiAoZXJwX25ldykKIAkJcmV0dXJuIGVycF9uZXc7CkBAIC0yMjgyLDcgKzIyODIsNyBAQAogICogREFTRF8zOTkwX0VSUF9BRERfRVJQCiAgKgogICogREVTQ1JJUFRJT04KLSAqICAgVGhpcyBmdW50aW9uIGFkZHMgYW4gYWRkaXRpb25hbCByZXF1ZXN0IGJsb2NrIChFUlApIHRvIHRoZSBoZWFkIG9mCisgKiAgIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBhZGRpdGlvbmFsIHJlcXVlc3QgYmxvY2sgKEVSUCkgdG8gdGhlIGhlYWQgb2YKICAqICAgdGhlIGdpdmVuIGNxciAob3IgZXJwKS4KICAqICAgRm9yIGEgY29tbWFuZCBtb2RlIGNxciB0aGUgZXJwIGlzIGluaXRpYWxpemVkIGFzIGFuIGRlZmF1bHQgZXJwCiAgKiAgIChyZXRyeSBUSUMpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCBjYjZhNjdiLi5kNzE1MTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAvKgogICogVHJ5IHRvIGludGVycHJldGUgdGhlIGZpcnN0IGVsZW1lbnQgb24gdGhlIGNvbW1hIHNlcGFyYXRlZCBwYXJzZSBzdHJpbmcKICAqIGFzIGEgZGV2aWNlIG51bWJlciBvciBhIHJhbmdlIG9mIGRldmljZXMuIElmIHRoZSBpbnRlcnByZXRhdGlvbiBpcwotICogc3VjY2Vzc2Z1bGwsIGNyZWF0ZSB0aGUgbWF0Y2hpbmcgZGFzZF9kZXZtYXAgZW50cmllcyBhbmQgcmV0dXJuIGEgcG9pbnRlcgorICogc3VjY2Vzc2Z1bCwgY3JlYXRlIHRoZSBtYXRjaGluZyBkYXNkX2Rldm1hcCBlbnRyaWVzIGFuZCByZXR1cm4gYSBwb2ludGVyCiAgKiB0byB0aGUgcmVzaWR1YWwgc3RyaW5nLgogICogSWYgaW50ZXJwcmV0YXRpb24gZmFpbHMgb3IgaW4gY2FzZSBvZiBhbiBlcnJvciwgcmV0dXJuIGFuIGVycm9yIGNvZGUuCiAgKi8KQEAgLTY3NCw2ICs2NzQsMzYgQEAKIAlyZXR1cm4gZGV2aWNlOwogfQogCit2b2lkIGRhc2RfYWRkX2xpbmtfdG9fZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ2RwLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybjsKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWdkcC0+cHJpdmF0ZV9kYXRhID0gZGV2bWFwOworCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKK30KKworc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmdkcCkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWlmICghZ2RwLT5wcml2YXRlX2RhdGEpCisJCXJldHVybiBOVUxMOworCWRldmljZSA9IE5VTEw7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlkZXZtYXAgPSBnZHAtPnByaXZhdGVfZGF0YTsKKwlpZiAoZGV2bWFwICYmIGRldm1hcC0+ZGV2aWNlKSB7CisJCWRldmljZSA9IGRldm1hcC0+ZGV2aWNlOworCQlkYXNkX2dldF9kZXZpY2UoZGV2aWNlKTsKKwl9CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCXJldHVybiBkZXZpY2U7Cit9CisKIC8qCiAgKiBTRUNUSU9OOiBmaWxlcyBpbiBzeXNmcwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggMjkxNDNlZC4uODVkZGRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtMjM5LDcgKzIzOSw2IEBACiAJYWRkcl90IGlwOwogCWludCByYzsKIAotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX0RTRF0rKzsKIAlzd2l0Y2ggKGV4dF9pbnRfY29kZSA+PiAyNCkgewogCWNhc2UgREFTRF9ESUFHX0NPREVfMzFCSVQ6CiAJCWlwID0gKGFkZHJfdCkgcGFyYW0zMjsKQEAgLTI1MCw2ICsyNDksNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9CisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfRFNEXSsrOwogCWlmICghaXApIHsJCS8qIG5vIGludHBhcm06IHVuc29saWNpdGVkIGludGVycnVwdCAqLwogCQlEQkZfRVZFTlQoREJGX05PVElDRSwgIiVzIiwgImNhdWdodCB1bnNvbGljaXRlZCAiCiAJCQkgICAgICAiaW50ZXJydXB0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggNDU5ZjJjYi4uM2ViZGY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMjAzNyw3ICsyMDM3LDcgQEAKIAkJcmV0dXJuOwogCiAJLyogc3VtbWFyeSB1bml0IGNoZWNrICovCi0JaWYgKChzZW5zZVs3XSA9PSAweDBEKSAmJgorCWlmICgoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgJiYgKHNlbnNlWzddID09IDB4MEQpICYmCiAJICAgIChzY3N3X2RzdGF0KCZpcmItPnNjc3cpICYgREVWX1NUQVRfVU5JVF9DSEVDSykpIHsKIAkJZGFzZF9hbGlhc19oYW5kbGVfc3VtbWFyeV91bml0X2NoZWNrKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwpAQCAtMjA1Myw3ICsyMDUzLDggQEAKIAkvKiBsb3NzIG9mIGRldmljZSByZXNlcnZhdGlvbiBpcyBoYW5kbGVkIHZpYSBiYXNlIGRldmljZXMgb25seQogCSAqIGFzIGFsaWFzIGRldmljZXMgbWF5IGJlIHVzZWQgd2l0aCBzZXZlcmFsIGJhc2VzCiAJICovCi0JaWYgKGRldmljZS0+YmxvY2sgJiYgKHNlbnNlWzddID09IDB4M0YpICYmCisJaWYgKGRldmljZS0+YmxvY2sgJiYgKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApICYmCisJICAgIChzZW5zZVs3XSA9PSAweDNGKSAmJgogCSAgICAoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spICYmCiAJICAgIHRlc3RfYml0KERBU0RfRkxBR19JU19SRVNFUlZFRCwgJmRldmljZS0+ZmxhZ3MpKSB7CiAJCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxPTlNMQ0spCkBAIC0yODU4LDcgKzI4NTksNyBAQAogCS8qCiAJICogc3RydWN0IFBGWF9lY2tkX2RhdGEgaGFzIHVwIHRvIDIgYnl0ZSBhcyBleHRlbmRlZCBwYXJhbWV0ZXIKIAkgKiB0aGlzIGlzIG5lZWRlZCBmb3Igd3JpdGUgZnVsbCB0cmFjayBhbmQgaGFzIHRvIGJlIG1lbnRpb25lZAotCSAqIHNlcGVyYXRlbHkKKwkgKiBzZXBhcmF0ZWx5CiAJICogYWRkIDggaW5zdGVhZCBvZiAyIHRvIGtlZXAgOCBieXRlIGJvdW5kYXJ5CiAJICovCiAJcGZ4X2RhdGFzaXplID0gc2l6ZW9mKHN0cnVjdCBQRlhfZWNrZF9kYXRhKSArIDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwppbmRleCA1NTA1YmMwLi4xOWExZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKQEAgLTczLDcgKzczLDcgQEAKIAlpZiAoYmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgfHwKIAkgICAgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJhc2UtPmZsYWdzKSkKIAkJc2V0X2Rpc2tfcm8oZ2RwLCAxKTsKLQlnZHAtPnByaXZhdGVfZGF0YSA9IGJsb2NrOworCWRhc2RfYWRkX2xpbmtfdG9fZ2VuZGlzayhnZHAsIGJhc2UpOwogCWdkcC0+cXVldWUgPSBibG9jay0+cmVxdWVzdF9xdWV1ZTsKIAlibG9jay0+Z2RwID0gZ2RwOwogCXNldF9jYXBhY2l0eShibG9jay0+Z2RwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggZGY5ZjY5OS4uZDFlNGYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTY4Niw2ICs2ODYsOSBAQAogc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKHN0cnVjdCBjY3dfZGV2aWNlICopOwogc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2RldmluZGV4KGludCk7CiAKK3ZvaWQgZGFzZF9hZGRfbGlua190b19nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICosIHN0cnVjdCBkYXNkX2RldmljZSAqKTsKK3N0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICopOworCiBpbnQgZGFzZF9wYXJzZSh2b2lkKTsKIGludCBkYXNkX2J1c2lkX2tub3duKGNvbnN0IGNoYXIgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IDI2MDc1ZTkuLjcyMjYxZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtNDIsMTYgKzQyLDIyIEBACiBzdGF0aWMgaW50CiBkYXNkX2lvY3RsX2VuYWJsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JZGFzZF9lbmFibGVfZGV2aWNlKGJsb2NrLT5iYXNlKTsKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYXNkX2VuYWJsZV9kZXZpY2UoYmFzZSk7CiAJLyogRm9ybWF0dGluZyB0aGUgZGFzZCBkZXZpY2UgY2FuIGNoYW5nZSB0aGUgY2FwYWNpdHkuICovCiAJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwotCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgKGxvZmZfdClnZXRfY2FwYWNpdHkoYmxvY2stPmdkcCkgPDwgOSk7CisJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLAorCQkgICAgIChsb2ZmX3QpZ2V0X2NhcGFjaXR5KGJhc2UtPmJsb2NrLT5nZHApIDw8IDkpOwogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjIsMTEgKzY4LDE0IEBACiBzdGF0aWMgaW50CiBkYXNkX2lvY3RsX2Rpc2FibGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKIAkvKgogCSAqIE1hbiB0aGlzIGlzIHNpY2suIFdlIGRvbid0IGRvIGEgcmVhbCBkaXNhYmxlIGJ1dCBvbmx5IGRvd25ncmFkZQogCSAqIHRoZSBkZXZpY2UgdG8gREFTRF9TVEFURV9CQVNJQy4gVGhlIHJlYXNvbiBpcyB0aGF0IGRhc2RmbXQgdXNlcwpAQCAtNzUsNyArODQsNyBAQAogCSAqIHVzaW5nIHRoZSBCSU9EQVNERk1UIGlvY3RsLiBUaGVyZWZvcmUgdGhlIGNvcnJlY3Qgc3RhdGUgZm9yIHRoZQogCSAqIGRldmljZSBpcyBEQVNEX1NUQVRFX0JBU0lDIHRoYXQgYWxsb3dzIHRvIGRvIGJhc2ljIGkvby4KIAkgKi8KLQlkYXNkX3NldF90YXJnZXRfc3RhdGUoYmxvY2stPmJhc2UsIERBU0RfU1RBVEVfQkFTSUMpOworCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShiYXNlLCBEQVNEX1NUQVRFX0JBU0lDKTsKIAkvKgogCSAqIFNldCBpX3NpemUgdG8gemVybywgc2luY2UgcmVhZCwgd3JpdGUsIGV0Yy4gY2hlY2sgYWdhaW5zdCB0aGlzCiAJICogdmFsdWUuCkBAIC04Myw2ICs5Miw3IEBACiAJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTEsMjYgKzIwMSwzNiBAQAogc3RhdGljIGludAogZGFzZF9pb2N0bF9mb3JtYXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAlzdHJ1Y3QgZm9ybWF0X2RhdGFfdCBmZGF0YTsKKwlpbnQgcmM7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCWlmICghYXJncCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZIHx8Ci0JICAgIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZibG9jay0+YmFzZS0+ZmxhZ3MpKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoYmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgfHwKKwkgICAgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJhc2UtPmZsYWdzKSkgeworCQlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJCXJldHVybiAtRVJPRlM7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpCisJfQorCWlmIChjb3B5X2Zyb21fdXNlcigmZmRhdGEsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgZm9ybWF0X2RhdGFfdCkpKSB7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSB7CiAJCXByX3dhcm5pbmcoIiVzOiBUaGUgc3BlY2lmaWVkIERBU0QgaXMgYSBwYXJ0aXRpb24gYW5kIGNhbm5vdCAiCiAJCQkgICAiYmUgZm9ybWF0dGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmJsb2NrLT5iYXNlLT5jZGV2LT5kZXYpKTsKKwkJCSAgIGRldl9uYW1lKCZiYXNlLT5jZGV2LT5kZXYpKTsKKwkJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIGRhc2RfZm9ybWF0KGJsb2NrLCAmZmRhdGEpOworCXJjID0gZGFzZF9mb3JtYXQoYmFzZS0+YmxvY2ssICZmZGF0YSk7CisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOworCXJldHVybiByYzsKIH0KIAogI2lmZGVmIENPTkZJR19EQVNEX1BST0ZJTEUKQEAgLTM0MCw4ICszNjAsOCBAQAogc3RhdGljIGludAogZGFzZF9pb2N0bF9zZXRfcm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gIGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpbnQgaW50dmFsOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKKwlpbnQgaW50dmFsLCByYzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0zNTAsMTAgKzM3MCwxNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZ2V0X3VzZXIoaW50dmFsLCAoaW50IF9fdXNlciAqKWFyZ3ApKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIWludHZhbCAmJiB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmxvY2stPmJhc2UtPmZsYWdzKSkKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFpbnR2YWwgJiYgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJhc2UtPmZsYWdzKSkgeworCQlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJCXJldHVybiAtRVJPRlM7CisJfQogCXNldF9kaXNrX3JvKGJkZXYtPmJkX2Rpc2ssIGludHZhbCk7Ci0JcmV0dXJuIGRhc2Rfc2V0X2ZlYXR1cmUoYmxvY2stPmJhc2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSwgaW50dmFsKTsKKwlyYyA9IGRhc2Rfc2V0X2ZlYXR1cmUoYmFzZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZLCBpbnR2YWwpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZGFzZF9pb2N0bF9yZWFkYWxsX2NtYihzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssIHVuc2lnbmVkIGludCBjbWQsCkBAIC0zNzIsNTkgKzM5OSw3OCBAQAogaW50IGRhc2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAl2b2lkIF9fdXNlciAqYXJncDsKKwlpbnQgcmM7CiAKIAlpZiAoaXNfY29tcGF0X3Rhc2soKSkKIAkJYXJncCA9IGNvbXBhdF9wdHIoYXJnKTsKIAllbHNlCiAJCWFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKLQlpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotCiAJaWYgKChfSU9DX0RJUihjbWQpICE9IF9JT0NfTk9ORSkgJiYgIWFyZykgewogCQlQUklOVF9ERUJVRygiZW1wdHkgZGF0YSBwdHIiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhiZGV2LT5iZF9kaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCWJsb2NrID0gYmFzZS0+YmxvY2s7CisJcmMgPSAwOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBCSU9EQVNERElTQUJMRToKLQkJcmV0dXJuIGRhc2RfaW9jdGxfZGlzYWJsZShiZGV2KTsKKwkJcmMgPSBkYXNkX2lvY3RsX2Rpc2FibGUoYmRldik7CisJCWJyZWFrOwogCWNhc2UgQklPREFTREVOQUJMRToKLQkJcmV0dXJuIGRhc2RfaW9jdGxfZW5hYmxlKGJkZXYpOworCQlyYyA9IGRhc2RfaW9jdGxfZW5hYmxlKGJkZXYpOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RRVUlFU0NFOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9xdWllc2NlKGJsb2NrKTsKKwkJcmMgPSBkYXNkX2lvY3RsX3F1aWVzY2UoYmxvY2spOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RSRVNVTUU6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3Jlc3VtZShibG9jayk7CisJCXJjID0gZGFzZF9pb2N0bF9yZXN1bWUoYmxvY2spOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RGTVQ6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2Zvcm1hdChiZGV2LCBhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX2Zvcm1hdChiZGV2LCBhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNESU5GTzoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfaW5mb3JtYXRpb24oYmxvY2ssIGNtZCwgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9pbmZvcm1hdGlvbihibG9jaywgY21kLCBhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNESU5GTzI6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2luZm9ybWF0aW9uKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfaW5mb3JtYXRpb24oYmxvY2ssIGNtZCwgYXJncCk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRFBSUkQ6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3JlYWRfcHJvZmlsZShibG9jaywgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9yZWFkX3Byb2ZpbGUoYmxvY2ssIGFyZ3ApOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RQUlJTVDoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfcmVzZXRfcHJvZmlsZShibG9jayk7CisJCXJjID0gZGFzZF9pb2N0bF9yZXNldF9wcm9maWxlKGJsb2NrKTsKKwkJYnJlYWs7CiAJY2FzZSBCTEtST1NFVDoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfc2V0X3JvKGJkZXYsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfc2V0X3JvKGJkZXYsIGFyZ3ApOworCQlicmVhazsKIAljYXNlIERBU0RBUElWRVI6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2FwaV92ZXJzaW9uKGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfYXBpX3ZlcnNpb24oYXJncCk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRENNRkVOQUJMRToKLQkJcmV0dXJuIGVuYWJsZV9jbWYoYmxvY2stPmJhc2UtPmNkZXYpOworCQlyYyA9IGVuYWJsZV9jbWYoYmFzZS0+Y2Rldik7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRENNRkRJU0FCTEU6Ci0JCXJldHVybiBkaXNhYmxlX2NtZihibG9jay0+YmFzZS0+Y2Rldik7CisJCXJjID0gZGlzYWJsZV9jbWYoYmFzZS0+Y2Rldik7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRFJFQURBTExDTUI6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3JlYWRhbGxfY21iKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfcmVhZGFsbF9jbWIoYmxvY2ssIGNtZCwgYXJncCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIGlmIHRoZSBkaXNjaXBsaW5lIGhhcyBhbiBpb2N0bCBtZXRob2QgdHJ5IGl0LiAqLwotCQlpZiAoYmxvY2stPmJhc2UtPmRpc2NpcGxpbmUtPmlvY3RsKSB7Ci0JCQlpbnQgcnZhbCA9IGJsb2NrLT5iYXNlLT5kaXNjaXBsaW5lLT5pb2N0bChibG9jaywgY21kLCBhcmdwKTsKLQkJCWlmIChydmFsICE9IC1FTk9JT0NUTENNRCkKLQkJCQlyZXR1cm4gcnZhbDsKLQkJfQotCi0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoYmFzZS0+ZGlzY2lwbGluZS0+aW9jdGwpIHsKKwkJCXJjID0gYmFzZS0+ZGlzY2lwbGluZS0+aW9jdGwoYmxvY2ssIGNtZCwgYXJncCk7CisJCQlpZiAocmMgPT0gLUVOT0lPQ1RMQ01EKQorCQkJCXJjID0gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlyYyA9IC1FSU5WQUw7CiAJfQorCWRhc2RfcHV0X2RldmljZShiYXNlKTsKKwlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggNGMwMjM3Ni4uZTIxYTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJLyoKIAkgKiBUbyBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIDMyNzAgZGV2aWNlIHdlIG5lZWQgdG8gZG86CiAJICogMSkgc2VuZCBhICdyZWFkIHBhcnRpdGlvbicgZGF0YSBzdHJlYW0gdG8gdGhlIGRldmljZQotCSAqIDIpIHdhaXQgZm9yIHRoZSBhdHRuIGludGVycnVwdCB0aGF0IHByZWNlZWRzIHRoZSBxdWVyeSByZXBseQorCSAqIDIpIHdhaXQgZm9yIHRoZSBhdHRuIGludGVycnVwdCB0aGF0IHByZWNlZGVzIHRoZSBxdWVyeSByZXBseQogCSAqIDMpIGRvIGEgcmVhZCBtb2RpZmllZCB0byBnZXQgdGhlIHF1ZXJ5IHJlcGx5CiAJICogVG8gbWFrZSB0aGluZ3Mgd29yc2Ugd2UgaGF2ZSB0byBjb3BlIHdpdGggaW50ZXJ2ZW50aW9uCiAJICogcmVxdWlyZWQgKDMyNzAgZGV2aWNlIHN3aXRjaGVkIHRvICdzdGFuZC1ieScpIGFuZCBjb21tYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYwppbmRleCA0YjYwZWRlLi5iZTU1ZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMKQEAgLTUxOCw2ICs1MTgsOCBAQAogCQlyZXR1cm47CiAJbmV3X2luY3ItPnJuID0gcm47CiAJbmV3X2luY3ItPnN0YW5kYnkgPSBzdGFuZGJ5OworCWlmICghc3RhbmRieSkKKwkJbmV3X2luY3ItPnVzZWNvdW50ID0gMTsKIAlsYXN0X3JuID0gMDsKIAlwcmV2ID0gJnNjbHBfbWVtX2xpc3Q7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmNyLCAmc2NscF9tZW1fbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYwppbmRleCBlMDkwYTMwLi44N2NkMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJLyoKIAkgKiBJZiB0aGUgdGFwZSBpc24ndCB0ZXJtaW5hdGVkIHlldCwgZG8gaXQgbm93LiBBbmQgc2luY2Ugd2UgdGhlbgogCSAqIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSB0YXBlIHRoZXJlIHdvdWxkbid0IGJlIGFueXRoaW5nIHRvIHJlYWQKLQkgKiBhbnl3YXlzLiBTbyB3ZSByZXR1cm4gaW1tZWRpYXRseS4KKwkgKiBhbnl3YXlzLiBTbyB3ZSByZXR1cm4gaW1tZWRpYXRlbHkuCiAJICovCiAJaWYoZGV2aWNlLT5yZXF1aXJlZF90YXBlbWFya3MpIHsKIAkJcmV0dXJuIHRhcGVfc3RkX3Rlcm1pbmF0ZV93cml0ZShkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jCmluZGV4IGQzMzU1NGRmLi4yZGIxNDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90dHkzMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAogCXRwID0gKHN0cnVjdCB0dHkzMjcwICopIHJxLT52aWV3OwogCWlmIChycS0+cmMgIT0gMCkgewotCQkvKiBXcml0ZSB3YXNuJ3Qgc3VjY2Vzc2Z1bGwuIFJlZnJlc2ggYWxsLiAqLworCQkvKiBXcml0ZSB3YXNuJ3Qgc3VjY2Vzc2Z1bC4gUmVmcmVzaCBhbGwuICovCiAJCXRwLT51cGRhdGVfZmxhZ3MgPSBUVFlfVVBEQVRFX0FMTDsKIAkJdHR5MzI3MF9zZXRfdGltZXIodHAsIDEpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGRmMTRjNTEuLjhlMDRjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtNTQxLDE1ICs1NDEsMjQgQEAKIAlpbnQgZm9yY2UsIHJldDsKIAl1bnNpZ25lZCBsb25nIGk7CiAKLQlpZiAoIWRldl9mc21fZmluYWxfc3RhdGUoY2RldikgJiYKLQkgICAgY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRCkKLQkJcmV0dXJuIC1FQUdBSU47CisJLyogUHJldmVudCBjb25mbGljdCBiZXR3ZWVuIG11bHRpcGxlIG9uLS9vZmZsaW5lIHByb2Nlc3NpbmcgcmVxdWVzdHMuICovCiAJaWYgKGF0b21pY19jbXB4Y2hnKCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCwgMSkgIT0gMCkKIAkJcmV0dXJuIC1FQUdBSU47CisJLyogUHJldmVudCBjb25mbGljdCBiZXR3ZWVuIGludGVybmFsIEkvT3MgYW5kIG9uLS9vZmZsaW5lIHByb2Nlc3NpbmcuICovCisJaWYgKCFkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpICYmCisJICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9ESVNDT05ORUNURUQpIHsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXRfb25vZmY7CisJfQorCS8qIFByZXZlbnQgY29uZmxpY3QgYmV0d2VlbiBwZW5kaW5nIHdvcmsgYW5kIG9uLS9vZmZsaW5lIHByb2Nlc3NpbmcuKi8KKwlpZiAod29ya19wZW5kaW5nKCZjZGV2LT5wcml2YXRlLT50b2RvX3dvcmspKSB7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0X29ub2ZmOworCX0KIAogCWlmIChjZGV2LT5kcnYgJiYgIXRyeV9tb2R1bGVfZ2V0KGNkZXYtPmRydi0+ZHJpdmVyLm93bmVyKSkgewotCQlhdG9taWNfc2V0KCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9vbm9mZjsKIAl9CiAJaWYgKCFzdHJuY21wKGJ1ZiwgImZvcmNlXG4iLCBjb3VudCkpIHsKIAkJZm9yY2UgPSAxOwpAQCAtNTc0LDYgKzU4Myw3IEBACiBvdXQ6CiAJaWYgKGNkZXYtPmRydikKIAkJbW9kdWxlX3B1dChjZGV2LT5kcnYtPmRyaXZlci5vd25lcik7CitvdXRfb25vZmY6CiAJYXRvbWljX3NldCgmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDApOwogCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBjb3VudDsKIH0KQEAgLTEzMTEsMTAgKzEzMjEsMTIgQEAKIAogCXNwaW5fbG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CiAJaWYgKGlzX2JsYWNrbGlzdGVkKGlkLT5zc2lkLCBpZC0+ZGV2bm8pICYmCi0JICAgIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfT0ZGTElORSkpIHsKKwkgICAgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9PRkZMSU5FKSAmJgorCSAgICAoYXRvbWljX2NtcHhjaGcoJmNkZXYtPnByaXZhdGUtPm9ub2ZmLCAwLCAxKSA9PSAwKSkgewogCQlDSU9fTVNHX0VWRU5UKDMsICJjY3c6IHB1cmdpbmcgMC4leC4lMDR4XG4iLCBpZC0+c3NpZCwKIAkJCSAgICAgIGlkLT5kZXZubyk7CiAJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOworCQlhdG9taWNfc2V0KCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKIAkvKiBBYm9ydCBsb29wIGluIGNhc2Ugb2YgcGVuZGluZyBzaWduYWwuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IGE4NDU2OTUuLjYwODQxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAogLyoqCiAgICogY2N3X2RldmljZV9ub3RpZnkoKSAtIGluZm9ybSB0aGUgZGV2aWNlJ3MgZHJpdmVyIGFib3V0IGFuIGV2ZW50Ci0gICogQGNkZXY6IGRldmljZSBmb3Igd2hpY2ggYW4gZXZlbnQgb2NjdXJlZAorICAqIEBjZGV2OiBkZXZpY2UgZm9yIHdoaWNoIGFuIGV2ZW50IG9jY3VycmVkCiAgICogQGV2ZW50OiBldmVudCB0aGF0IG9jY3VycmVkCiAgICoKICAgKiBSZXR1cm5zOgpAQCAtNjg4LDcgKzY4OCw3IEBACiAJICAgIChzY3N3X3N0Y3RsKCZjZGV2LT5wcml2YXRlLT5pcmIuc2NzdykgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkgewogCQkvKgogCQkgKiBObyBmaW5hbCBzdGF0dXMgeWV0IG9yIGZpbmFsIHN0YXR1cyBub3QgeWV0IGRlbGl2ZXJlZAotCQkgKiB0byB0aGUgZGV2aWNlIGRyaXZlci4gQ2FuJ3QgZG8gcGF0aCB2ZXJmaWNhdGlvbiBub3csCisJCSAqIHRvIHRoZSBkZXZpY2UgZHJpdmVyLiBDYW4ndCBkbyBwYXRoIHZlcmlmaWNhdGlvbiBub3csCiAJCSAqIGRlbGF5IHVudGlsIGZpbmFsIHN0YXR1cyB3YXMgZGVsaXZlcmVkLgogCQkgKi8KIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG92ZXJpZnkgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggNDc5YzY2NS4uZThmMjY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC00MDcsOCArNDA3LDExIEBACiAJcS0+cV9zdGF0cy5ucl9zYmFsc1twb3NdKys7CiB9CiAKLXN0YXRpYyB2b2lkIGFubm91bmNlX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBwcm9jZXNzX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCiB7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IChxLT5pc19pbnB1dF9xKSA/IFNMU0JfUF9JTlBVVF9OT1RfSU5JVCA6CisJCQkJCVNMU0JfUF9PVVRQVVRfTk9UX0lOSVQ7CisKIAlxLT5xZGlvX2Vycm9yIHw9IFFESU9fRVJST1JfU0xTQl9TVEFURTsKIAogCS8qIHNwZWNpYWwgaGFuZGxpbmcgZm9yIG5vIHRhcmdldCBidWZmZXIgZW1wdHkgKi8KQEAgLTQyNiw2ICs0MjksMTIgQEAKIAlEQkZfRVJST1IoIkYxNDolMnggRjE1OiUyeCIsCiAJCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTRdLmZsYWdzICYgMHhmZiwKIAkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKTsKKworCS8qCisJICogSW50ZXJydXB0cyBtYXkgYmUgYXZvaWRlZCBhcyBsb25nIGFzIHRoZSBlcnJvciBpcyBwcmVzZW50CisJICogc28gY2hhbmdlIHRoZSBidWZmZXIgc3RhdGUgaW1tZWRpYXRlbHkgdG8gYXZvaWQgc3RhcnZhdGlvbi4KKwkgKi8KKwlzZXRfYnVmX3N0YXRlcyhxLCBxLT5maXJzdF90b19jaGVjaywgc3RhdGUsIGNvdW50KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluYm91bmRfcHJpbWVkKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKQEAgLTUwNiw4ICs1MTUsNyBAQAogCQkJYWNjb3VudF9zYmFscyhxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX0lOUFVUX0VSUk9SOgotCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwotCQkvKiBwcm9jZXNzIHRoZSBidWZmZXIsIHRoZSB1cHBlciBsYXllciB3aWxsIHRha2UgY2FyZSBvZiBpdCAqLworCQlwcm9jZXNzX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOwogCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCkBAIC02NzcsOCArNjg1LDcgQEAKIAkJCWFjY291bnRfc2JhbHMocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9PVVRQVVRfRVJST1I6Ci0JCWFubm91bmNlX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7Ci0JCS8qIHByb2Nlc3MgdGhlIGJ1ZmZlciwgdGhlIHVwcGVyIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIGl0ICovCisJCXByb2Nlc3NfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKQEAgLTE2NDksMjYgKzE2NTYsMjYgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHFkaW9fc2V0dXBfaW5pdCgpOworCXJjID0gcWRpb19kZWJ1Z19pbml0KCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CisJcmMgPSBxZGlvX3NldHVwX2luaXQoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2RlYnVnOwogCXJjID0gdGlxZGlvX2FsbG9jYXRlX21lbW9yeSgpOwogCWlmIChyYykKIAkJZ290byBvdXRfY2FjaGU7Ci0JcmMgPSBxZGlvX2RlYnVnX2luaXQoKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X3RpOwogCXJjID0gdGlxZGlvX3JlZ2lzdGVyX3RoaW5pbnRzKCk7CiAJaWYgKHJjKQotCQlnb3RvIG91dF9kZWJ1ZzsKKwkJZ290byBvdXRfdGk7CiAJcmV0dXJuIDA7CiAKLW91dF9kZWJ1ZzoKLQlxZGlvX2RlYnVnX2V4aXQoKTsKIG91dF90aToKIAl0aXFkaW9fZnJlZV9tZW1vcnkoKTsKIG91dF9jYWNoZToKIAlxZGlvX3NldHVwX2V4aXQoKTsKK291dF9kZWJ1ZzoKKwlxZGlvX2RlYnVnX2V4aXQoKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE2NzYsOCArMTY4Myw4IEBACiB7CiAJdGlxZGlvX3VucmVnaXN0ZXJfdGhpbmludHMoKTsKIAl0aXFkaW9fZnJlZV9tZW1vcnkoKTsKLQlxZGlvX2RlYnVnX2V4aXQoKTsKIAlxZGlvX3NldHVwX2V4aXQoKTsKKwlxZGlvX2RlYnVnX2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9RRElPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKaW5kZXggODhlYmQxMS4uOTY4OGYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKQEAgLTc2LDcgKzc2LDcgQEAKIAogLyoqCiAgKiBMYXJnZSByYW5kb20gbnVtYmVycyBhcmUgcHVsbGVkIGluIDQwOTYgYnl0ZSBjaHVua3MgZnJvbSB0aGUgY3J5cHRvIGNhcmRzCi0gKiBhbmQgc3RvcmVkIGluIGEgcGFnZS4gQmUgY2FyZWZ1bGwgd2hlbiBpbmNyZWFzaW5nIHRoaXMgYnVmZmVyIGR1ZSB0byBzaXplCisgKiBhbmQgc3RvcmVkIGluIGEgcGFnZS4gQmUgY2FyZWZ1bCB3aGVuIGluY3JlYXNpbmcgdGhpcyBidWZmZXIgZHVlIHRvIHNpemUKICAqIGxpbWl0YXRpb25zIGZvciBBUCByZXF1ZXN0cy4KICAqLwogI2RlZmluZSBaQ1JZUFRfUk5HX0JVRkZFUl9TSVpFCTQwOTYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKaW5kZXggNDE0NDI3ZC4uNjA3OTk4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKQEAgLTM4MSwxMCArMzgxLDEwIEBACiAJdTE2IHN1YmNvZGU7CiAJdTMyIHBhcmFtOwogCi0Ja3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfVlJUXSsrOwogCXN1YmNvZGUgPSBleHRfaW50X2NvZGUgPj4gMTY7CiAJaWYgKChzdWJjb2RlICYgMHhmZjAwKSAhPSBWSVJUSU9fU1VCQ09ERV82NCkKIAkJcmV0dXJuOworCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX1ZSVF0rKzsKIAogCS8qIFRoZSBMU0IgbWlnaHQgYmUgb3ZlcmxvYWRlZCwgd2UgaGF2ZSB0byBtYXNrIGl0ICovCiAJdnEgPSAoc3RydWN0IHZpcnRxdWV1ZSAqKShwYXJhbTY0ICYgfjFVTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IDlmZWI2MmYuLmRhOGFhNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC03NzksNyArNzc5LDcgQEAKIAljYXNlIENMQVdfU1RBUlRfV1JJVEU6CiAJCWlmIChwX2NoLT5pcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgewogCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKLQkJCQkiJXM6IFVuaXQgQ2hlY2sgT2NjdXJlZCBpbiAiCisJCQkJIiVzOiBVbml0IENoZWNrIE9jY3VycmVkIGluICIKIAkJCQkid3JpdGUgY2hhbm5lbFxuIiwgZGV2LT5uYW1lKTsKIAkJCWNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOwogCQkJaWYgKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg4MCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKaW5kZXggOGM5MjFmYy4uMmQ2MDIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCkBAIC0xODQsNyArMTg0LDcgQEAKIHN0YXRpYyB2b2lkIGN0Y21wY19jaHhfc2VuZF9zd2VlcChmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpOwogCiAvKioKLSAqIENoZWNrIHJldHVybiBjb2RlIG9mIGEgcHJlY2VlZGluZyBjY3dfZGV2aWNlIGNhbGwsIGhhbHRfSU8gZXRjLi4uCisgKiBDaGVjayByZXR1cm4gY29kZSBvZiBhIHByZWNlZGluZyBjY3dfZGV2aWNlIGNhbGwsIGhhbHRfSU8gZXRjLi4uCiAgKgogICogY2gJOglUaGUgY2hhbm5lbCwgdGhlIGVycm9yIGJlbG9uZ3MgdG8uCiAgKiBSZXR1cm5zIHRoZSBlcnJvciBjb2RlICghPSAwKSB0byBpbnNwZWN0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggN2ZiYzRhZC4uNDlkMWNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcG0sIHRtcCwgJmNhcmQtPmlwbV9saXN0LCBsaXN0KXsKIAkJc3dpdGNoIChpcG0tPmlwbV9zdGF0ZSkgewogCQljYXNlIExDU19JUE1fU1RBVEVfU0VUX1JFUVVJUkVEOgotCQkJLyogZGVsIGZyb20gaXBtX2xpc3Qgc28gbm9vbmUgZWxzZSBjYW4gdGFtcGVyIHdpdGgKKwkJCS8qIGRlbCBmcm9tIGlwbV9saXN0IHNvIG5vIG9uZSBlbHNlIGNhbiB0YW1wZXIgd2l0aAogCQkJICogdGhpcyBlbnRyeSAqLwogCQkJbGlzdF9kZWxfaW5pdCgmaXBtLT5saXN0KTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwbV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggMTBhM2EzYi4uODVjYzUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlJTklUX0xJU1RfSEVBRChjYXJkLT5pcF90YmRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+d2FpdF9xKTsKLQkvKiBpbnRpYWwgb3B0aW9ucyAqLworCS8qIGluaXRpYWwgb3B0aW9ucyAqLwogCXFldGhfc2V0X2ludGlhbF9vcHRpb25zKGNhcmQpOwogCS8qIElQIGFkZHJlc3MgdGFrZW92ZXIgKi8KIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+aXBhdG8uZW50cmllcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCBhMGUwNWVmLi44NTEyYjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTEwODMsNyArMTA4Myw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU0JBTF9NSVNNQVRDSDoKLQkJLyogc2hvdWxkIG5ldmVyIG9jY3VyZSwgYXZvaWRlZCBpbiB6ZmNwX2ZzZl9zZW5kX2VscyAqLworCQkvKiBzaG91bGQgbmV2ZXIgb2NjdXIsIGF2b2lkZWQgaW4gemZjcF9mc2Zfc2VuZF9lbHMgKi8KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCA4ZGE1ZWQ2Li45OGU5N2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJaWYgKGRvX1FESU8oY2RldiwgUURJT19GTEFHX1NZTkNfSU5QVVQsIDAsIDAsIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EpKQogCQlnb3RvIGZhaWxlZF9xZGlvOwogCi0JLyogc2V0IGluZGV4IG9mIGZpcnN0IGF2YWxhYmxlIFNCQUxTIC8gbnVtYmVyIG9mIGF2YWlsYWJsZSBTQkFMUyAqLworCS8qIHNldCBpbmRleCBvZiBmaXJzdCBhdmFpbGFibGUgU0JBTFMgLyBudW1iZXIgb2YgYXZhaWxhYmxlIFNCQUxTICovCiAJcWRpby0+cmVxX3FfaWR4ID0gMDsKIAlhdG9taWNfc2V0KCZxZGlvLT5yZXFfcV9mcmVlLCBRRElPX01BWF9CVUZGRVJTX1BFUl9RKTsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVAsICZxZGlvLT5hZGFwdGVyLT5zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jCmluZGV4IGU4NTY2MjIuLjZiNDY3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqIFRPRE86IEVyYXNlL3Byb2dyYW0gYm90aCBiYW5rcyBvZiBhIDhNQiBTSU1NLgogICoKICAqIEl0IGlzIGFudGljaXBhdGVkIHRoYXQgcHJvZ3JhbW1pbmcgYW4gT1MgRmxhc2ggd2lsbCBiZSBhIHJvdXRpbmUKLSAqIHByb2NlZHVyZS4gSW4gdGhlIHNhbWUgdGltZSBpdCBpcyBleGVlZGluZ2x5IGRhbmdlcm91cyBiZWNhdXNlCisgKiBwcm9jZWR1cmUuIEluIHRoZSBzYW1lIHRpbWUgaXQgaXMgZXhjZWVkaW5nbHkgZGFuZ2Vyb3VzIGJlY2F1c2UKICAqIGEgdXNlciBjYW4gcHJvZ3JhbSBpdHMgT0JQIGZsYXNoIHdpdGggT1MgaW1hZ2UgYW5kIGVmZmVjdGl2ZWx5CiAgKiBraWxsIHRoZSBtYWNoaW5lLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL21heDE2MTcuaCBiL2RyaXZlcnMvc2J1cy9jaGFyL21heDE2MTcuaAppbmRleCAwYmIwOWMyLi5jZDMwODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9tYXgxNjE3LmgKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvbWF4MTYxNy5oCkBAIC02LDcgKzYsNyBAQAogI2RlZmluZSBNQVgxNjE3X0NQVV9URU1QCTB4MDEgLyogUHJvY2Vzc29yIGRpZSB0ZW1wIGluIEMJKi8KICNkZWZpbmUgTUFYMTYxN19TVEFUVVMJCTB4MDIgLyogQ2hpcCBzdGF0dXMgYml0cwkqLwogCi0vKiBSZWFkLW9ubHkgdmVyc2lvbnMgb2YgY2hhbmdhYmxlIHJlZ2lzdGVycy4gKi8KKy8qIFJlYWQtb25seSB2ZXJzaW9ucyBvZiBjaGFuZ2VhYmxlIHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTUFYMTYxN19SRF9DRkdfQllURQkweDAzIC8qIENvbmZpZyByZWdpc3RlcgkJKi8KICNkZWZpbmUgTUFYMTYxN19SRF9DVlJBVEVfQllURQkweDA0IC8qIFRlbXAgY29udmVyc2lvbiByYXRlCSovCiAjZGVmaW5lIE1BWDE2MTdfUkRfQU1CX0hJR0hMSU0JMHgwNSAvKiBBbWJpZW50IGhpZ2ggbGltaXQJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmggYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCmluZGV4IDMzNDM4MjQuLjA0MGY3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmgKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguaApAQCAtNjEsNyArNjEsNyBAQAogCXsweDAwMDAsICJBRU4gcXVldWUgZW1wdHkifSwKIAl7MHgwMDAxLCAiQ29udHJvbGxlciByZXNldCBvY2N1cnJlZCJ9LAogCXsweDAwMDIsICJEZWdyYWRlZCB1bml0IGRldGVjdGVkIn0sCi0JezB4MDAwMywgIkNvbnRyb2xsZXIgZXJyb3Igb2NjdXJlZCJ9LAorCXsweDAwMDMsICJDb250cm9sbGVyIGVycm9yIG9jY3VycmVkIn0sCiAJezB4MDAwNCwgIkJhY2tncm91bmQgcmVidWlsZCBmYWlsZWQifSwKIAl7MHgwMDA1LCAiQmFja2dyb3VuZCByZWJ1aWxkIGRvbmUifSwKIAl7MHgwMDA2LCAiSW5jb21wbGV0ZSB1bml0IGRldGVjdGVkIn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5oIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguaAppbmRleCA4YjlmOWQxLi40OWRjZjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmgKQEAgLTgsNyArOCw3IEBACiAKICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEwIDN3YXJlIEluYy4KIAotICAgS2VybmVsIGNvbXBhdGlibGl0eSBCeToJQW5kcmUgSGVkcmljayA8YW5kcmVAc3VzZS5jb20+CisgICBLZXJuZWwgY29tcGF0aWJpbGl0eSBCeToJQW5kcmUgSGVkcmljayA8YW5kcmVAc3VzZS5jb20+CiAgICBOb24tQ29weXJpZ2h0IChDKSAyMDAwCUFuZHJlIEhlZHJpY2sgPGFuZHJlQHN1c2UuY29tPgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzcwMC5zY3IgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLnNjcgppbmRleCBhMDY0YTA5Li5lYzgyMmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvNTNjNzAwLnNjcgorKysgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLnNjcgpAQCAtMzEsNyArMzEsNyBAQAogQUJTT0xVVEUJUmVjZWl2ZU1zZ0FkZHJlc3MgPSAwCTsgQWRkciB0byByZWNlaXZlIG1zZwogOwogOyBUaGlzIGlzIHRoZSBtYWdpYyBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHNjYXR0ZXItZ2F0aGVyLiAgRWFjaCBvZiB0aGUKLTsgU0cgY29tcG9uZW50cyBpcyBwcmVjZWVkZWQgYnkgYSBzY3JpcHQgZnJhZ21lbnQgd2hpY2ggbW92ZXMgdGhlCis7IFNHIGNvbXBvbmVudHMgaXMgcHJlY2VkZWQgYnkgYSBzY3JpcHQgZnJhZ21lbnQgd2hpY2ggbW92ZXMgdGhlCiA7IG5lY2Vzc2FyeSBhbW91bnQgb2YgZGF0YSBhbmQganVtcHMgdG8gdGhlIG5leHQgU0cgc2VnbWVudC4gIFRoZSBmaW5hbAogOyBTRyBzZWdtZW50IGp1bXBzIGJhY2sgdG8gLiAgSG93ZXZlciwgdGhpcyBhZGRyZXNzIGlzIHRoZSBmaXJzdCBTRyBzY3JpcHQKIDsgc2VnbWVudC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS81M2M3MDBfZC5oX3NoaXBwZWQgYi9kcml2ZXJzL3Njc2kvNTNjNzAwX2QuaF9zaGlwcGVkCmluZGV4IDBiNDJhNTEuLmFhNjIzZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3MDBfZC5oX3NoaXBwZWQKKysrIGIvZHJpdmVycy9zY3NpLzUzYzcwMF9kLmhfc2hpcHBlZApAQCAtMzQsNyArMzQsNyBAQAogQUJTT0xVVEUJUmVjZWl2ZU1zZ0FkZHJlc3MgPSAwCTsgQWRkciB0byByZWNlaXZlIG1zZwogOwogOyBUaGlzIGlzIHRoZSBtYWdpYyBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHNjYXR0ZXItZ2F0aGVyLiAgRWFjaCBvZiB0aGUKLTsgU0cgY29tcG9uZW50cyBpcyBwcmVjZWVkZWQgYnkgYSBzY3JpcHQgZnJhZ21lbnQgd2hpY2ggbW92ZXMgdGhlCis7IFNHIGNvbXBvbmVudHMgaXMgcHJlY2VkZWQgYnkgYSBzY3JpcHQgZnJhZ21lbnQgd2hpY2ggbW92ZXMgdGhlCiA7IG5lY2Vzc2FyeSBhbW91bnQgb2YgZGF0YSBhbmQganVtcHMgdG8gdGhlIG5leHQgU0cgc2VnbWVudC4gIFRoZSBmaW5hbAogOyBTRyBzZWdtZW50IGp1bXBzIGJhY2sgdG8gLiAgSG93ZXZlciwgdGhpcyBhZGRyZXNzIGlzIHRoZSBmaXJzdCBTRyBzY3JpcHQKIDsgc2VnbWVudC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCmluZGV4IGU0MGNkZmIuLmRjZDcxNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKKysrIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwpAQCAtMjUwOSw3ICsyNTA5LDcgQEAKIAkJCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMywKIAkJCQkJICAgKFNFTEVDVCArIFNFTENIS19TVFJUKSk7CiAKLQkJCQkvKiBTZXR1cCBvdXIgU1RBVEUgc28gd2Uga25vdyB3aGF0IGhhcHBlbmQgd2hlbgorCQkJCS8qIFNldHVwIG91ciBTVEFURSBzbyB3ZSBrbm93IHdoYXQgaGFwcGVuZWQgd2hlbgogCQkJCSAgIHRoZSB3aGVlbHMgZmFsbCBvZmYuICovCiAJCQkJY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPSBTRUxFQ1RfU1Q7CiAKQEAgLTI5MDAsNyArMjkwMCw3IEBACiAgKgogICogRnVuY3Rpb246IEZQVF9zZGVjbQogICoKLSAqIERlc2NyaXB0aW9uOiBEZXRlcm1pbmUgdGhlIHByb3BlciByZXNwb25jZSB0byB0aGUgbWVzc2FnZSBmcm9tIHRoZQorICogRGVzY3JpcHRpb246IERldGVybWluZSB0aGUgcHJvcGVyIHJlc3BvbnNlIHRvIHRoZSBtZXNzYWdlIGZyb20gdGhlCiAgKiAgICAgICAgICAgICAgdGFyZ2V0IGRldmljZS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwppbmRleCBlN2NkMmZjLi4xNjVlNGRkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwpAQCAtMTE5OCwxMiArMTE5OCwxMiBAQAogCQkJCSAqLwogCiAJCQkJaWYgKChOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpICYgTVJfRE1BKSAmJiAoKGJhc3IgJiBCQVNSX0VORF9ETUFfVFJBTlNGRVIpIHx8ICEoYmFzciAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkgewotCQkJCQlpbnQgdHJhbnNmZXJlZDsKKwkJCQkJaW50IHRyYW5zZmVycmVkOwogCiAJCQkJCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAkJCQkJCXBhbmljKCJzY3NpJWQgOiByZWNlaXZlZCBlbmQgb2YgRE1BIGludGVycnVwdCB3aXRoIG5vIGNvbm5lY3RlZCBjbWRcbiIsIGluc3RhbmNlLT5ob3N0bm8pOwogCi0JCQkJCXRyYW5zZmVyZWQgPSAoaG9zdGRhdGEtPmRtYWxlbiAtIE5DUjUzODBfZG1hX3Jlc2lkdWFsKGluc3RhbmNlKSk7CisJCQkJCXRyYW5zZmVycmVkID0gKGhvc3RkYXRhLT5kbWFsZW4gLSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkpOwogCQkJCQlob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AudGhpc19yZXNpZHVhbCAtPSB0cmFuc2ZlcnJlZDsKIAkJCQkJaG9zdGRhdGEtPmNvbm5lY3RlZC0+U0NwLnB0ciArPSB0cmFuc2ZlcnJlZDsKIAkJCQkJaG9zdGRhdGEtPmRtYWxlbiA9IDA7CkBAIC0xNTYzLDcgKzE1NjMsNyBAQAogICogICAgICBieXRlcyB0byB0cmFuc2ZlciwgKipkYXRhIC0gcG9pbnRlciB0byBkYXRhIHBvaW50ZXIuCiAgKiAKICAqIFJldHVybnMgOiAtMSB3aGVuIGRpZmZlcmVudCBwaGFzZSBpcyBlbnRlcmVkIHdpdGhvdXQgdHJhbnNmZXJyaW5nCi0gKiAgICAgIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBvciB0cmFuc2ZlcmVkIG9yIGV4aXQKKyAqICAgICAgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVycmVkIG9yIGV4aXQKICAqICAgICAgaXMgaW4gc2FtZSBwaGFzZS4KICAqCiAgKiAgICAgIEFsc28sICpwaGFzZSwgKmNvdW50LCAqZGF0YSBhcmUgbW9kaWZpZWQgaW4gcGxhY2UuCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogICogICAgICBieXRlcyB0byB0cmFuc2ZlciwgKipkYXRhIC0gcG9pbnRlciB0byBkYXRhIHBvaW50ZXIuCiAgKiAKICAqIFJldHVybnMgOiAtMSB3aGVuIGRpZmZlcmVudCBwaGFzZSBpcyBlbnRlcmVkIHdpdGhvdXQgdHJhbnNmZXJyaW5nCi0gKiAgICAgIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBvciB0cmFuc2ZlcmVkIG9yIGV4aXQKKyAqICAgICAgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVycmVkIG9yIGV4aXQKICAqICAgICAgaXMgaW4gc2FtZSBwaGFzZS4KICAqCiAgKiAgICAgIEFsc28sICpwaGFzZSwgKmNvdW50LCAqZGF0YSBhcmUgbW9kaWZpZWQgaW4gcGxhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCmluZGV4IDExOGNlODMuLjA2MTk5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCkBAIC03NDcsOCArNzQ3LDggQEAKICAqIEFyZ3VtZW50czogWzFdIHBvaW50ZXIgdG8gdm9pZCBbMV0gaW50CiAgKgogICogUHVycG9zZTogU2V0cyBTQ1NJIGlucXVpcnkgZGF0YSBzdHJpbmdzIGZvciB2ZW5kb3IsIHByb2R1Y3QKLSAqIGFuZCByZXZpc2lvbiBsZXZlbC4gQWxsb3dzIHN0cmluZ3MgdG8gYmUgc2V0IGluIHBsYXRmb3JtIGRlcGVuZGFudAotICogZmlsZXMgaW5zdGVhZCBvZiBpbiBPUyBkZXBlbmRhbnQgZHJpdmVyIHNvdXJjZS4KKyAqIGFuZCByZXZpc2lvbiBsZXZlbC4gQWxsb3dzIHN0cmluZ3MgdG8gYmUgc2V0IGluIHBsYXRmb3JtIGRlcGVuZGVudAorICogZmlsZXMgaW5zdGVhZCBvZiBpbiBPUyBkZXBlbmRlbnQgZHJpdmVyIHNvdXJjZS4KICAqLwogCiBzdGF0aWMgdm9pZCBzZXRpbnFzdHIoc3RydWN0IGFhY19kZXYgKmRldiwgdm9pZCAqZGF0YSwgaW50IHRpbmRleCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaAppbmRleCAyOWFiMDAwMS4uZmZiNTg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaApAQCAtMTI1OSw3ICsxMjU5LDcgQEAKICNkZWZpbmUgQ0FDSEVfVU5TVEFCTEUJCTIKIAogLyoKLSAqCUxldHMgdGhlIGNsaWVudCBrbm93IGF0IHdoaWNoIGxldmVsIHRoZSBkYXRhIHdhcyBjb21taXRlZCBvbgorICoJTGV0cyB0aGUgY2xpZW50IGtub3cgYXQgd2hpY2ggbGV2ZWwgdGhlIGRhdGEgd2FzIGNvbW1pdHRlZCBvbgogICoJYSB3cml0ZSByZXF1ZXN0CiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCmluZGV4IGRkN2FkM2IuLmU3ZDBkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCWlmICghKGh3X2ZpYi0+aGVhZGVyLlhmZXJTdGF0ZSAmIGNwdV90b19sZTMyKEhvc3RPd25lZCkpKQogCQlyZXR1cm4gLUVCVVNZOwogCS8qCi0JICoJVGhlcmUgYXJlIDUgY2FzZXMgd2l0aCB0aGUgd2FpdCBhbmQgcmVwb25zZSByZXF1ZXN0ZWQgZmxhZ3MuCisJICoJVGhlcmUgYXJlIDUgY2FzZXMgd2l0aCB0aGUgd2FpdCBhbmQgcmVzcG9uc2UgcmVxdWVzdGVkIGZsYWdzLgogCSAqCVRoZSBvbmx5IGludmFsaWQgY2FzZXMgYXJlIGlmIHRoZSBjYWxsZXIgcmVxdWVzdHMgdG8gd2FpdCBhbmQKIAkgKglkb2VzIG5vdCByZXF1ZXN0IGEgcmVzcG9uc2UgYW5kIGlmIHRoZSBjYWxsZXIgZG9lcyBub3Qgd2FudCBhCiAJICoJcmVzcG9uc2UgYW5kIHRoZSBGaWIgaXMgbm90IGFsbG9jYXRlZCBmcm9tIHBvb2wuIElmIGEgcmVzcG9uc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKaW5kZXggMDgxYzZkZS4uYmZkNjE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKQEAgLTQ1NDQsNyArNDU0NCw3IEBACiAgKiBDb3B5IDQgYnl0ZXMgdG8gTFJBTS4KICAqCiAgKiBUaGUgc291cmNlIGRhdGEgaXMgYXNzdW1lZCB0byBiZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGluIG1lbW9yeQotICogYW5kIGlzIG1haW50YWluZWQgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciB3aGVuIHdyaXRlbiB0byBMUkFNLgorICogYW5kIGlzIG1haW50YWluZWQgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciB3aGVuIHdyaXR0ZW4gdG8gTFJBTS4KICAqLwogc3RhdGljIHZvaWQKIEFzY01lbURXb3JkQ29weVB0clRvTHJhbShQb3J0QWRkciBpb3BfYmFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMgYi9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCmluZGV4IGQwNThmMWEuLjFjMTBiNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE3NDAuYwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJLyogVGhlIEFkYXB0ZWMgU3BlYyBzYXlzIHRoZSBjYXJkIGlzIHNvIGZhc3QgdGhhdCB0aGUgbG9vcHMKICAgICAgICAgICAgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uY2UgaW4gdGhlIGNvZGUgYmVsb3cuIEV2ZW4gaWYgdGhpcwogICAgICAgICAgICB3YXMgdHJ1ZSB3aXRoIHRoZSBmYXN0ZXN0IHByb2Nlc3NvcnMgd2hlbiB0aGUgc3BlYyB3YXMKLSAgICAgICAgICAgd3JpdHRlbiwgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHRydWUgd2l0aCB0b2RheXMgZmFzdAorICAgICAgICAgICB3cml0dGVuLCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgdHJ1ZSB3aXRoIHRvZGF5J3MgZmFzdAogICAgICAgICAgICBwcm9jZXNzb3JzLiBXZSBwcmludCBhIHdhcm5pbmcgaWYgdGhlIGNvZGUgaXMgZXhlY3V0ZWQgbW9yZQogICAgICAgICAgICBvZnRlbiB0aGFuIExPT1BDTlRfV0FSTi4gSWYgdGhpcyBoYXBwZW5zLCBpdCBzaG91bGQgYmUKICAgICAgICAgICAgaW52ZXN0aWdhdGVkLiBJZiB0aGUgY291bnQgcmVhY2hlcyBMT09QQ05UX01BWCwgd2UgYXNzdW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKaW5kZXggOTVlZTUwMy4uOWIwNTk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaApAQCAtNDczLDcgKzQ3Myw3IEBACiAgKglvIEEgcmVzaWR1YWwgaGFzIG9jY3VycmVkIGlmIFNHX0ZVTExfUkVTSUQgaXMgc2V0IGluIHNncHRyLAogICoJICBvciByZXNpZHVhbF9zZ3B0ciBkb2VzIG5vdCBoYXZlIFNHX0xJU1RfTlVMTCBzZXQuCiAgKgotICoJbyBXZSBhcmUgdHJhbnNmZXJpbmcgdGhlIGxhc3Qgc2VnbWVudCBpZiByZXNpZHVhbF9kYXRhY250IGhhcworICoJbyBXZSBhcmUgdHJhbnNmZXJyaW5nIHRoZSBsYXN0IHNlZ21lbnQgaWYgcmVzaWR1YWxfZGF0YWNudCBoYXMKICAqCSAgdGhlIFNHX0xBU1RfU0VHIGZsYWcgc2V0LgogICoKICAqIEhvc3Q6CkBAIC01MTYsNyArNTE2LDcgQEAKICAqLwogCiAvKgotICogRGVmaW5pdGlvbiBvZiBhIHNjYXR0ZXIvZ2F0aGVyIGVsZW1lbnQgYXMgdHJhbnNmZXJlZCB0byB0aGUgY29udHJvbGxlci4KKyAqIERlZmluaXRpb24gb2YgYSBzY2F0dGVyL2dhdGhlciBlbGVtZW50IGFzIHRyYW5zZmVycmVkIHRvIHRoZSBjb250cm9sbGVyLgogICogVGhlIGFpYzd4eHggY2hpcHMgb25seSBzdXBwb3J0IGEgMjRiaXQgbGVuZ3RoLiAgV2UgdXNlIHRoZSB0b3AgYnl0ZSBvZgogICogdGhlIGxlbmd0aCB0byBzdG9yZSBhZGRpdGlvbmFsIGFkZHJlc3MgYml0cyBhbmQgYSBmbGFnIHRvIGluZGljYXRlCiAgKiB0aGF0IGEgZ2l2ZW4gc2VnbWVudCB0ZXJtaW5hdGVzIHRoZSB0cmFuc2Zlci4gIFRoaXMgZ2l2ZXMgdXMgYW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHgucmVnIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKaW5kZXggMDY2NmMyMi4uN2UxMmMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKQEAgLTMwNSw3ICszMDUsNyBAQAogfQogCiAvKgotICogU2VxdWVuY2VyIEludGVydXB0IFN0YXR1cworICogU2VxdWVuY2VyIEludGVycnVwdCBTdGF0dXMKICAqLwogcmVnaXN0ZXIgU0VRSU5UU1RBVCB7CiAJYWRkcmVzcwkJCTB4MDBDCkBAIC02ODUsNyArNjg1LDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMAorICogQ01DIFJlY2VpdmUgTWVzc2FnZSAwCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMCB7CiAJYWRkcmVzcwkJCTB4MDkwCkBAIC02OTYsNyArNjk2LDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDAKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDAKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMCB7CiAJYWRkcmVzcwkJCTB4MDkwCkBAIC03MzIsNyArNzMyLDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMQorICogQ01DIFJlY2VpdmUgTWVzc2FnZSAxCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMSB7CiAJYWRkcmVzcwkJCTB4MDkxCkBAIC03NDIsNyArNzQyLDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDEKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDEKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMSB7CiAJYWRkcmVzcwkJCTB4MDkxCkBAIC03NzcsNyArNzc3LDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMgorICogQ01DIFJlY2VpdmUgTWVzc2FnZSAyCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMiB7CiAJYWRkcmVzcwkJCTB4MDkyCkBAIC03ODcsNyArNzg3LDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDIKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDIKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMiB7CiAJYWRkcmVzcwkJCTB4MDkyCkBAIC04MTYsNyArODE2LDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMworICogQ01DIFJlY2VpdmUgTWVzc2FnZSAzCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMyB7CiAJYWRkcmVzcwkJCTB4MDkzCkBAIC04MjYsNyArODI2LDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDMKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDMKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMyB7CiAJYWRkcmVzcwkJCTB4MDkzCkBAIC0xMjQ5LDcgKzEyNDksNyBAQAogCiAvKgogICogTFEgUGFja2V0IEluCi0gKiBUaGUgbGFzdCBMUSBQYWNrZXQgcmVjaWV2ZWQKKyAqIFRoZSBsYXN0IExRIFBhY2tldCByZWNlaXZlZAogICovCiByZWdpc3RlciBMUUlOIHsKIAlhZGRyZXNzCQkJMHgwMjAKQEAgLTI1NzMsNyArMjU3Myw3IEBACiB9CiAKIC8qCi0gKiBTaGFkZG93IEhvc3QgQWRkcmVzcy4KKyAqIFNoYWRvdyBIb3N0IEFkZHJlc3MuCiAgKi8KIHJlZ2lzdGVyIFNIQUREUiB7CiAJYWRkcmVzcwkJCTB4MDYwCkBAIC0zOTgzLDcgKzM5ODMsNyBAQAogCiAJLyoKIAkgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0LCB3aGVuIGludGVycnVwdCBjb2FsZXNjaW5nCi0JICogaXMgZW5hYmxlZCwgYmVmb3JlIGlzc3VlaW5nIGEgQ01EQ01QTFQgaW50ZXJydXB0IGZvciBhIGNvbXBsZXRlZAorCSAqIGlzIGVuYWJsZWQsIGJlZm9yZSBpc3N1aW5nIGEgQ01EQ01QTFQgaW50ZXJydXB0IGZvciBhIGNvbXBsZXRlZAogCSAqIGNvbW1hbmQuCiAJICovCiAJSU5UX0NPQUxFU0NJTkdfVElNRVIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5zZXEgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnNlcQppbmRleCAyZmI3OGUzLi4zYTM2ZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnNlcQorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnNlcQpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJc2hyCVNFTE9JRCwgNCwgU0NCX1NDU0lJRDsKIAkvKgogCSAqIElmIHdlIHdhbnQgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIGRldmljZSwgZW5zdXJlCi0JICogd2UgYXJlIHNlbGVjdGluZyB3aXRoIGF0biBpcnJlZ2FyZGxlc3Mgb2Ygb3VyIHBhY2tldGl6ZWQKKwkgKiB3ZSBhcmUgc2VsZWN0aW5nIHdpdGggYXRuIHJlZ2FyZGxlc3Mgb2Ygb3VyIHBhY2tldGl6ZWQKIAkgKiBhZ3JlZW1lbnQuICBTaW5jZSBTUEk0IG9ubHkgYWxsb3dzIHRhcmdldCByZXNldCBvciBQUFIKIAkgKiBtZXNzYWdlcyBpZiB0aGlzIGlzIGEgcGFja2V0aXplZCBjb25uZWN0aW9uLCB0aGUgY2hhbmdlCiAJICogdG8gb3VyIG5lZ290aWF0aW9uIHRhYmxlIGVudHJ5IGZvciB0aGlzIHNlbGVjdGlvbiB3aWxsCkBAIC05NjAsNyArOTYwLDcgQEAKICAqIFRoaXMgaXMgZG9uZSB0byBhbGxvdyB0aGUgaG9zdCB0byBzZW5kIG1lc3NhZ2VzIG91dHNpZGUgb2YgYW4gaWRlbnRpZnkKICAqIHNlcXVlbmNlIHdoaWxlIHByb3RlY3RpbmcgdGhlIHNlcWVuY2VyIGZyb20gdGVzdGluZyB0aGUgTUtfTUVTU0FHRSBiaXQKICAqIG9uIGFuIFNDQiB0aGF0IG1pZ2h0IG5vdCBiZSBmb3IgdGhlIGN1cnJlbnQgbmV4dXMuIChGb3IgZXhhbXBsZSwgYQotICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uY2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bworICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bwogICogYW4gU0NCIHRoYXQgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0KS4KICAqCiAgKiBPdGhlcndpc2UsIHRyZWF0IE1TR19PVVQgYXMgYSAxIGJ5dGUgbWVzc2FnZSB0byBzZW5kIChhYm9ydCwgYWJvcnQgdGFnLApAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAkJICogSWYgdGhlIG90aGVyIEZJRk8gbmVlZHMgbG9hZGluZywgdGhlbiBpdAogCQkgKiBtdXN0IG5vdCBoYXZlIGNsYWltZWQgdGhlIFMvRyBjYWNoZSB5ZXQKIAkJICogKFNHX0NBQ0hFX0FWQUlMIHdvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGluCi0JCSAqIHRoZSBvcmdpbmFsIEZJRk8gbW9kZSBhbmQgd2UgdGVzdCB0aGlzIGFib3ZlKS4KKwkJICogdGhlIG9yaWdpbmFsIEZJRk8gbW9kZSBhbmQgd2UgdGVzdCB0aGlzIGFib3ZlKS4KIAkJICogUmV0dXJuIHRvIHRoZSBpZGxlIGxvb3Agc28gd2UgY2FuIHByb2Nlc3MgdGhlCiAJCSAqIEZJRk8gbm90IGN1cnJlbnRseSBvbiB0aGUgYnVzIGZpcnN0LgogCQkgKi8KQEAgLTE1MjEsNyArMTUyMSw3IEBACiBpZGxlX3NnZmV0Y2hfc3RhcnQ6CiAJLyoKIAkgKiBXZSBmZXRjaCBhICJjYWNoZWxpbmUgYWxpZ25lZCIgYW5kIHNpemVkIGFtb3VudCBvZiBkYXRhCi0JICogc28gd2UgZG9uJ3QgZW5kIHVwIHJlZmVyZW5jaW5nIGEgbm9uLWV4aXN0YW50IHBhZ2UuCisJICogc28gd2UgZG9uJ3QgZW5kIHVwIHJlZmVyZW5jaW5nIGEgbm9uLWV4aXN0ZW50IHBhZ2UuCiAJICogQ2FjaGVsaW5lIGFsaWduZWQgaXMgaW4gcXVvdGVzIGJlY2F1c2UgdGhlIGtlcm5lbCB3aWxsCiAJICogc2V0IHRoZSBwcmVmZXRjaCBhbW91bnQgdG8gYSByZWFzb25hYmxlIGxldmVsIGlmIHRoZQogCSAqIGNhY2hlbGluZSBzaXplIGlzIHVua25vd24uCkBAIC0xNTUxLDcgKzE1NTEsNyBAQAogCXRlc3QJREZTVEFUVVMsIFBSRUxPQURfQVZBSUwganogcmV0dXJuOwogCS8qCiAJICogT24gdGhlIEEsIHByZWxvYWRpbmcgYSBzZWdtZW50IGJlZm9yZSBIRE1BRU5BQ0sKLQkgKiBjb21lcyB0cnVlIGNhbiBjbG9iYmVyIHRoZSBzaGFkZG93IGFkZHJlc3Mgb2YgdGhlCisJICogY29tZXMgdHJ1ZSBjYW4gY2xvYmJlciB0aGUgc2hhZG93IGFkZHJlc3Mgb2YgdGhlCiAJICogZmlyc3Qgc2VnbWVudCBpbiB0aGUgUy9HIEZJRk8uICBXYWl0IHVudGlsIGl0IGlzCiAJICogc2FmZSB0byBwcm9jZWVkLgogCSAqLwpAQCAtMjAwNCwxMCArMjAwNCwxMCBAQAogCSAqIERlZmVyIGhhbmRsaW5nIG9mIHRoaXMgTk9OUEFDS1JFUSB1bnRpbCB3ZQogCSAqIGNhbiBiZSBzdXJlIGl0IHBlcnRhaW5zIHRvIHRoaXMgRklGTy4gIFNBVkVQVFJTCiAJICogd2lsbCBub3QgYmUgYXNzZXJ0ZWQgaWYgdGhlIE5PTlBBQ0tSRVEgaXMgZm9yIHVzLAotCSAqIHNvIHdlIG11c3Qgc2ltdWxhdGUgaXQgaWYgc2hhZGRvdyBpcyB2YWxpZC4gIElmCi0JICogc2hhZGRvdyBpcyBub3QgdmFsaWQsIGtlZXAgcnVubmluZyB0aGlzIEZJRk8gdW50aWwgd2UKKwkgKiBzbyB3ZSBtdXN0IHNpbXVsYXRlIGl0IGlmIHNoYWRvdyBpcyB2YWxpZC4gIElmCisJICogc2hhZG93IGlzIG5vdCB2YWxpZCwga2VlcCBydW5uaW5nIHRoaXMgRklGTyB1bnRpbCB3ZQogCSAqIGhhdmUgc2F0aXNmaWVkIHRoZSB0cmFuc2ZlciBieSBsb2FkaW5nIHNlZ21lbnRzIGFuZAotCSAqIHdhaXRpbmcgZm9yIGVpdGhlciBzaGFkZG93IHZhbGlkIG9yIGxhc3Rfc2VnX2RvbmUuCisJICogd2FpdGluZyBmb3IgZWl0aGVyIHNoYWRvdyB2YWxpZCBvciBsYXN0X3NlZ19kb25lLgogCSAqLwogCXRlc3QJTURGRlNUQVQsIFNIVkFMSUQgam56IHBrdF9zYXZlcHRyczsKIHBrdF9zZXJ2aWNlX2ZpZm86CkBAIC0yMTcxLDcgKzIxNzEsNyBAQAogCS8qCiAJICogVGhlIHVuZXhwZWN0ZWQgbm9ucGt0IHBoYXNlIGhhbmRsZXIgYXNzdW1lcyB0aGF0IGFueQogCSAqIGRhdGEgY2hhbm5lbCB1c2Ugd2lsbCBoYXZlIGEgRklGTyByZWZlcmVuY2UgY291bnQuICBJdAotCSAqIHR1cm5zIG91dCB0aGF0IHRoZSBzdGF0dXMgaGFuZGxlciBkb2Vzbid0IG5lZWQgYSByZWZlcm5jZQorCSAqIHR1cm5zIG91dCB0aGF0IHRoZSBzdGF0dXMgaGFuZGxlciBkb2Vzbid0IG5lZWQgYSByZWZlcmVuY2VzCiAJICogY291bnQgc2luY2UgdGhlIHN0YXR1cyByZWNlaXZlZCBmbGFnLCBhbmQgdGh1cyBjb21wbGV0aW9uCiAJICogcHJvY2Vzc2luZywgY2Fubm90IGJlIHNldCB1bnRpbCB0aGUgaGFuZGxlciBpcyBmaW5pc2hlZC4KIAkgKiBXZSBpbmNyZW1lbnQgdGhlIGNvdW50IGhlcmUgdG8gbWFrZSB0aGUgbm9ucGt0IGhhbmRsZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKaW5kZXggMzIzM2JmNS4uNWY4NjE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxhbmVvdXMgU3VwcG9ydCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKiogTWlzY2VsbGFuZW91cyBTdXBwb3J0IEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBSZXR1cm4gcG9pbnRlcnMgdG8gdGhlIHRyYW5zZmVyIG5lZ290aWF0aW9uIGluZm9ybWF0aW9uCiAgKiBmb3IgdGhlIHNwZWNpZmllZCBvdXJfaWQvcmVtb3RlX2lkIHBhaXIuCkBAIC01OTksNyArNTk5LDcgQEAKIGFoZF9vdXR3KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCwgdV9pbnQgdmFsdWUpCiB7CiAJLyoKLQkgKiBXcml0ZSBsb3cgYnl0ZSBmaXJzdCB0byBhY2NvbW9kYXRlIHJlZ2lzdGVycworCSAqIFdyaXRlIGxvdyBieXRlIGZpcnN0IHRvIGFjY29tbW9kYXRlIHJlZ2lzdGVycwogCSAqIHN1Y2ggYXMgUFJHTUNOVCB3aGVyZSB0aGUgb3JkZXIgbWF0ZXJzLgogCSAqLwogCWFoZF9vdXRiKGFoZCwgcG9ydCwgdmFsdWUgJiAweEZGKTsKQEAgLTIwNjcsNyArMjA2Nyw3IEBACiAJCSAqIHRoYXQgcmVxdWlyZXMgaG9zdCBhc3Npc3RhbmNlIGZvciBjb21wbGV0aW9uLgogCQkgKiBXaGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZSBwaGFzZShzKSwgd2Ugd2lsbCBiZQogCQkgKiBub3RpZmllZCBieSB0aGUgc2VxdWVuY2VyIGFmdGVyIGVhY2ggYnl0ZSBpcwotCQkgKiB0cmFuc2ZlcmVkIHNvIHdlIGNhbiB0cmFjayBidXMgcGhhc2UgY2hhbmdlcy4KKwkJICogdHJhbnNmZXJyZWQgc28gd2UgY2FuIHRyYWNrIGJ1cyBwaGFzZSBjaGFuZ2VzLgogCQkgKgogCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gYSBIT1NUX01TR19MT09QCiAJCSAqIGludGVycnVwdCwgaW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIGhvc3QgbWVzc2FnZQpAQCAtMjQ4Nyw3ICsyNDg3LDcgQEAKIAkJLyoKIAkJICogQWx0aG91Z2ggdGhlIGRyaXZlciBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZQogCQkgKiAnU2VsZWN0aW9uIGluIFByb2dyZXNzJyBzdGF0dXMgYml0LCB0aGUgYnVzeQotCQkgKiBMRUQgZG9lcy4gIFNFTElOR08gaXMgb25seSBjbGVhcmVkIGJ5IGEgc3VjY2Vzc2Z1bGwKKwkJICogTEVEIGRvZXMuICBTRUxJTkdPIGlzIG9ubHkgY2xlYXJlZCBieSBhIHN1Y2Nlc3NmdWwKIAkJICogc2VsZWN0aW9uLCBzbyB3ZSBtdXN0IG1hbnVhbGx5IGNsZWFyIGl0IHRvIGluc3VyZQogCQkgKiB0aGUgTEVEIHR1cm5zIG9mZiBqdXN0IGluY2FzZSBubyBmdXR1cmUgc3VjY2Vzc2Z1bAogCQkgKiBzZWxlY3Rpb25zIG9jY3VyIChlLmcuIG5vIGRldmljZXMgb24gdGhlIGJ1cykuCkBAIC0zNTQ4LDcgKzM1NDgsNyBAQAogCQlhaGRfb3V0YihhaGQsIFNFUUNUTDAsIGFoZF9pbmIoYWhkLCBTRVFDVEwwKSAmIH5TVEVQKTsKICAgCQlhaGRfb3V0YihhaGQsIFNJTU9ERTEsIHNpbW9kZTEpOwogCQkvKgotCQkgKiBTQ1NJSU5UIHNlZW1zIHRvIGdsaXRjaCBvY2Nhc3Npb25hbGx5IHdoZW4KKwkJICogU0NTSUlOVCBzZWVtcyB0byBnbGl0Y2ggb2NjYXNpb25hbGx5IHdoZW4KIAkJICogdGhlIGludGVycnVwdCBtYXNrcyBhcmUgcmVzdG9yZWQuICBDbGVhciBTQ1NJSU5UCiAJCSAqIG9uZSBtb3JlIHRpbWUgc28gdGhhdCBvbmx5IHBlcnNpc3RlbnQgZXJyb3JzCiAJCSAqIGFyZSBzZWVuIGFzIGEgcmVhbCBpbnRlcnJ1cHQuCkBAIC0zODM4LDcgKzM4MzgsNyBAQAogCiAvKgogICogVXBkYXRlIHRoZSBiaXRtYXNrIG9mIHRhcmdldHMgZm9yIHdoaWNoIHRoZSBjb250cm9sbGVyIHNob3VsZAotICogbmVnb3RpYXRlIHdpdGggYXQgdGhlIG5leHQgY29udmVuaWVudCBvcG9ydHVuaXR5LiAgVGhpcyBjdXJyZW50bHkKKyAqIG5lZ290aWF0ZSB3aXRoIGF0IHRoZSBuZXh0IGNvbnZlbmllbnQgb3Bwb3J0dW5pdHkuICBUaGlzIGN1cnJlbnRseQogICogbWVhbnMgdGhlIG5leHQgdGltZSB3ZSBzZW5kIHRoZSBpbml0aWFsIGlkZW50aWZ5IG1lc3NhZ2VzIGZvcgogICogYSBuZXcgdHJhbnNhY3Rpb24uCiAgKi8KQEAgLTQyMDAsNyArNDIwMCw3IEBACiAKIAkvKgogCSAqIER1cmluZyBwYWNrZXRpemVkIHRyYW5zZmVycywgdGhlIHRhcmdldCB3aWxsCi0JICogZ2l2ZSB1cyB0aGUgb3BvcnR1bml0eSB0byBzZW5kIGNvbW1hbmQgcGFja2V0cworCSAqIGdpdmUgdXMgdGhlIG9wcG9ydHVuaXR5IHRvIHNlbmQgY29tbWFuZCBwYWNrZXRzCiAJICogd2l0aG91dCB1cyBhc3NlcnRpbmcgYXR0ZW50aW9uLgogCSAqLwogCWlmICgodGluZm8tPnBwcl9vcHRpb25zICYgTVNHX0VYVF9QUFJfSVVfUkVRKSA9PSAwKQpAQCAtNTY1MSw3ICs1NjUxLDcgQEAKIAogCQkvKgogCQkgKiBSZXF1ZXVlIGFsbCB0YWdnZWQgY29tbWFuZHMgZm9yIHRoaXMgdGFyZ2V0Ci0JCSAqIGN1cnJlbnRseSBpbiBvdXIgcG9zZXNzaW9uIHNvIHRoZXkgY2FuIGJlCisJCSAqIGN1cnJlbnRseSBpbiBvdXIgcG9zc2Vzc2lvbiBzbyB0aGV5IGNhbiBiZQogCQkgKiBjb252ZXJ0ZWQgdG8gdW50YWdnZWQgY29tbWFuZHMuCiAJCSAqLwogCQlhaGRfc2VhcmNoX3FpbmZpZm8oYWhkLCBTQ0JfR0VUX1RBUkdFVChhaGQsIHNjYiksCkBAIC02MjQ1LDcgKzYyNDUsNyBAQAogLyoKICAqIFJlc2V0IHRoZSBjb250cm9sbGVyIGFuZCByZWNvcmQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBpdAogICogdGhhdCBpcyBvbmx5IGF2YWlsYWJsZSBqdXN0IGFmdGVyIGEgcmVzZXQuICBJZiAicmVpbml0IiBpcwotICogbm9uLXplcm8sIHRoaXMgcmVzZXQgb2NjdXJlZCBhZnRlciBpbml0aWFsIGNvbmZpZ3VyYXRpb24KKyAqIG5vbi16ZXJvLCB0aGlzIHJlc2V0IG9jY3VycmVkIGFmdGVyIGluaXRpYWwgY29uZmlndXJhdGlvbgogICogYW5kIHRoZSBjYWxsZXIgcmVxdWVzdHMgdGhhdCB0aGUgY2hpcCBiZSBmdWxseSByZWluaXRpYWxpemVkCiAgKiB0byBhIHJ1bmFibGUgc3RhdGUuICBDaGlwIGludGVycnVwdHMgYXJlICpub3QqIGVuYWJsZWQgYWZ0ZXIKICAqIGEgcmVpbml0aWFsaXphdGlvbi4gIFRoZSBjYWxsZXIgbXVzdCBlbmFibGUgaW50ZXJydXB0cyB2aWEKQEAgLTY0OTUsNyArNjQ5NSw3IEBACiAJfQogCiAJLyoKLQkgKiBOb3RlIHRoYXQgd2Ugd2VyZSBzdWNjZXNzZnVsbAorCSAqIE5vdGUgdGhhdCB3ZSB3ZXJlIHN1Y2Nlc3NmdWwKIAkgKi8KIAlyZXR1cm4gKDApOyAKIApAQCAtNzA3OSw3ICs3MDc5LDcgQEAKIAkJcmV0dXJuIChFTk9NRU0pOwogCiAJLyoKLQkgKiBWZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgaGFzbid0IG92ZXItYWdyZXNzaXZlbHkKKwkgKiBWZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgaGFzbid0IG92ZXItYWdncmVzc2l2ZWx5CiAJICogcGFkZGVkIGltcG9ydGFudCBzdHJ1Y3R1cmVzLgogCSAqLwogCWlmIChzaXplb2Yoc3RydWN0IGhhcmR3YXJlX3NjYikgIT0gNjQpCkBAIC0xMDA4Nyw3ICsxMDA4Nyw3IEBACiAJCXJldHVybiAoZXJyb3IpOwogCiAJLyoKLQkgKiBXcml0ZSB0aGUgZGF0YS4gIElmIHdlIGRvbid0IGdldCB0aHJvdWdodCB0aGUgbG9vcCBhdAorCSAqIFdyaXRlIHRoZSBkYXRhLiAgSWYgd2UgZG9uJ3QgZ2V0IHRocm91Z2ggdGhlIGxvb3AgYXQKIAkgKiBsZWFzdCBvbmNlLCB0aGUgYXJndW1lbnRzIHdlcmUgaW52YWxpZC4KIAkgKi8KIAlyZXR2YWwgPSBFSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCAyNWQwNjY2Li43ZDQ4NzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKQEAgLTE0NDEsNyArMTQ0MSw3IEBACiAJCXVzZXJ0YWdzID0gYWhkX2xpbnV4X3VzZXJfdGFnZGVwdGgoYWhkLCBkZXZpbmZvKTsKIAkJaWYgKCF3YXNfcXVldWluZykgewogCQkJLyoKLQkJCSAqIFN0YXJ0IG91dCBhZ3Jlc3NpdmVseSBhbmQgYWxsb3cgb3VyCisJCQkgKiBTdGFydCBvdXQgYWdncmVzc2l2ZWx5IGFuZCBhbGxvdyBvdXIKIAkJCSAqIGR5bmFtaWMgcXVldWUgZGVwdGggYWxnb3JpdGhtIHRvIHRha2UKIAkJCSAqIGNhcmUgb2YgdGhlIHJlc3QuCiAJCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHguaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHguaAppbmRleCAxNzQ0NGJjLi5mNjk1Nzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5oCkBAIC00NDAsNyArNDQwLDcgQEAKICAqCW8gQSByZXNpZHVhbCBoYXMgb2NjdXJyZWQgaWYgU0dfRlVMTF9SRVNJRCBpcyBzZXQgaW4gc2dwdHIsCiAgKgkgIG9yIHJlc2lkdWFsX3NncHRyIGRvZXMgbm90IGhhdmUgU0dfTElTVF9OVUxMIHNldC4KICAqCi0gKglvIFdlIGFyZSB0cmFuc2ZlcmluZyB0aGUgbGFzdCBzZWdtZW50IGlmIHJlc2lkdWFsX2RhdGFjbnQgaGFzCisgKglvIFdlIGFyZSB0cmFuc2ZlcnJpbmcgdGhlIGxhc3Qgc2VnbWVudCBpZiByZXNpZHVhbF9kYXRhY250IGhhcwogICoJICB0aGUgU0dfTEFTVF9TRUcgZmxhZyBzZXQuCiAgKgogICogSG9zdDoKQEAgLTQ5NCw3ICs0OTQsNyBAQAogICovCiAKIC8qCi0gKiBEZWZpbml0aW9uIG9mIGEgc2NhdHRlci9nYXRoZXIgZWxlbWVudCBhcyB0cmFuc2ZlcmVkIHRvIHRoZSBjb250cm9sbGVyLgorICogRGVmaW5pdGlvbiBvZiBhIHNjYXR0ZXIvZ2F0aGVyIGVsZW1lbnQgYXMgdHJhbnNmZXJyZWQgdG8gdGhlIGNvbnRyb2xsZXIuCiAgKiBUaGUgYWljN3h4eCBjaGlwcyBvbmx5IHN1cHBvcnQgYSAyNGJpdCBsZW5ndGguICBXZSB1c2UgdGhlIHRvcCBieXRlIG9mCiAgKiB0aGUgbGVuZ3RoIHRvIHN0b3JlIGFkZGl0aW9uYWwgYWRkcmVzcyBiaXRzIGFuZCBhIGZsYWcgdG8gaW5kaWNhdGUKICAqIHRoYXQgYSBnaXZlbiBzZWdtZW50IHRlcm1pbmF0ZXMgdGhlIHRyYW5zZmVyLiAgVGhpcyBnaXZlcyB1cyBhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5yZWcgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZwppbmRleCA5YTk2ZTU1Li5iYTBiNDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJYWRkcmVzcwkJCTB4MDBkCiAJYWNjZXNzX21vZGUgUk8KIAlmaWVsZAlPVkVSUlVOCQkweDgwCi0JZmllbGQJU0hWQUxJRAkJMHg0MAkvKiBTaGFkZG93IExheWVyIG5vbi16ZXJvICovCisJZmllbGQJU0hWQUxJRAkJMHg0MAkvKiBTaGFkb3cgTGF5ZXIgbm9uLXplcm8gKi8KIAlmaWVsZAlFWFBfQUNUSVZFCTB4MTAJLyogU0NTSSBFeHBhbmRlciBBY3RpdmUgKi8KIAlmaWVsZAlDUkNWQUxFUlIJMHgwOAkvKiBDUkMgZG9lc24ndCBtYXRjaCAoVTMgb25seSkgKi8KIAlmaWVsZAlDUkNFTkRFUlIJMHgwNAkvKiBObyB0ZXJtaW5hbCBDUkMgcGFja2V0IChVMyBvbmx5KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5zZXEgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnNlcQppbmRleCA1YTRjZmM5NS4uZTYwMDQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5zZXEKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5zZXEKQEAgLTU3LDEwICs1NywxMCBAQAogICogYSBsYXRlciB0aW1lLiAgVGhpcyBwcm9ibGVtIGNhbm5vdCBiZSByZXNvbHZlZCBieSBob2xkaW5nIGEgc2luZ2xlIGVudHJ5CiAgKiBpbiBzY3JhdGNoIHJhbSBzaW5jZSBhIHJlY29ubmVjdGluZyB0YXJnZXQgY2FuIHJlcXVlc3Qgc2Vuc2UgYW5kIHRoaXMgd2lsbAogICogY3JlYXRlIHlldCBhbm90aGVyIFNDQiB3YWl0aW5nIGZvciBzZWxlY3Rpb24uICBUaGUgc29sdXRpb24gdXNlZCBoZXJlIGlzIHRvIAotICogdXNlIGJ5dGUgMjcgb2YgdGhlIFNDQiBhcyBhIHBzdWVkby1uZXh0IHBvaW50ZXIgYW5kIHRvIHRocmVhZCBhIGxpc3QKKyAqIHVzZSBieXRlIDI3IG9mIHRoZSBTQ0IgYXMgYSBwc2V1ZG8tbmV4dCBwb2ludGVyIGFuZCB0byB0aHJlYWQgYSBsaXN0CiAgKiBvZiBTQ0JzIHRoYXQgYXJlIGF3YWl0aW5nIHNlbGVjdGlvbi4gIFNpbmNlIDAtMHhmZSBhcmUgdmFsaWQgU0NCIGluZGV4ZXMsIAogICogU0NCX0xJU1RfTlVMTCBpcyAweGZmIHdoaWNoIGlzIG91dCBvZiByYW5nZS4gIEFuIGVudHJ5IGlzIGFsc28gYWRkZWQgdG8KLSAqIHRoaXMgbGlzdCBldmVyeXRpbWUgYSByZXF1ZXN0IHNlbnNlIG9jY3VycyBvciBhZnRlciBjb21wbGV0aW5nIGEgbm9uLXRhZ2dlZAorICogdGhpcyBsaXN0IGV2ZXJ5IHRpbWUgYSByZXF1ZXN0IHNlbnNlIG9jY3VycyBvciBhZnRlciBjb21wbGV0aW5nIGEgbm9uLXRhZ2dlZAogICogY29tbWFuZCBmb3Igd2hpY2ggYSBzZWNvbmQgU0NCIGhhcyBiZWVuIHF1ZXVlZC4gIFRoZSBzZXF1ZW5jZXIgd2lsbAogICogYXV0b21hdGljYWxseSBjb25zdW1lIHRoZSBlbnRyaWVzLgogICovCkBAIC03NTIsNyArNzUyLDcgQEAKIAogCS8qCiAJICogV2UgZmV0Y2ggYSAiY2FjaGVsaW5lIGFsaWduZWQiIGFuZCBzaXplZCBhbW91bnQgb2YgZGF0YQotCSAqIHNvIHdlIGRvbid0IGVuZCB1cCByZWZlcmVuY2luZyBhIG5vbi1leGlzdGFudCBwYWdlLgorCSAqIHNvIHdlIGRvbid0IGVuZCB1cCByZWZlcmVuY2luZyBhIG5vbi1leGlzdGVudCBwYWdlLgogCSAqIENhY2hlbGluZSBhbGlnbmVkIGlzIGluIHF1b3RlcyBiZWNhdXNlIHRoZSBrZXJuZWwgd2lsbAogCSAqIHNldCB0aGUgcHJlZmV0Y2ggYW1vdW50IHRvIGEgcmVhc29uYWJsZSBsZXZlbCBpZiB0aGUKIAkgKiBjYWNoZWxpbmUgc2l6ZSBpcyB1bmtub3duLgpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAKICAqIFRoaXMgaXMgZG9uZSB0byBhbGxvdyB0aGUgaG9zdCB0byBzZW5kIG1lc3NhZ2VzIG91dHNpZGUgb2YgYW4gaWRlbnRpZnkKICAqIHNlcXVlbmNlIHdoaWxlIHByb3RlY3RpbmcgdGhlIHNlcWVuY2VyIGZyb20gdGVzdGluZyB0aGUgTUtfTUVTU0FHRSBiaXQKICAqIG9uIGFuIFNDQiB0aGF0IG1pZ2h0IG5vdCBiZSBmb3IgdGhlIGN1cnJlbnQgbmV4dXMuIChGb3IgZXhhbXBsZSwgYQotICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uY2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bworICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bwogICogYW4gU0NCIHRoYXQgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0KS4KICAqCiAgKiBPdGhlcndpc2UsIHRyZWF0IE1TR19PVVQgYXMgYSAxIGJ5dGUgbWVzc2FnZSB0byBzZW5kIChhYm9ydCwgYWJvcnQgdGFnLApAQCAtMTk5OSw3ICsxOTk5LDcgQEAKICAqIGZyb20gb3V0IHRvIGluLCB3YWl0IGFuIGFkZGl0aW9uYWwgZGF0YSByZWxlYXNlIGRlbGF5IGJlZm9yZSBjb250aW51aW5nLgogICovCiBjaGFuZ2VfcGhhc2U6Ci0JLyogV2FpdCBmb3IgcHJlY2VlZGluZyBJL08gc2Vzc2lvbiB0byBjb21wbGV0ZS4gKi8KKwkvKiBXYWl0IGZvciBwcmVjZWRpbmcgSS9PIHNlc3Npb24gdG8gY29tcGxldGUuICovCiAJdGVzdAlTQ1NJU0lHSSwgQUNLSSBqbnogLjsKIAogCS8qIENoYW5nZSB0aGUgcGhhc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKaW5kZXggZTAyMWI0OC4uZGMyOGIwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxhbmVvdXMgU3VwcG9ydCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKiogTWlzY2VsbGFuZW91cyBTdXBwb3J0IEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc2VxdWVuY2VyIHJlcG9ydGVkIGEgcmVzaWR1YWwKICAqIGZvciB0aGlzIFNDQi90cmFuc2FjdGlvbi4KQEAgLTEyNDMsNyArMTI0Myw3IEBACiAJCSAqIHRoYXQgcmVxdWlyZXMgaG9zdCBhc3Npc3RhbmNlIGZvciBjb21wbGV0aW9uLgogCQkgKiBXaGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZSBwaGFzZShzKSwgd2Ugd2lsbCBiZQogCQkgKiBub3RpZmllZCBieSB0aGUgc2VxdWVuY2VyIGFmdGVyIGVhY2ggYnl0ZSBpcwotCQkgKiB0cmFuc2ZlcmVkIHNvIHdlIGNhbiB0cmFjayBidXMgcGhhc2UgY2hhbmdlcy4KKwkJICogdHJhbnNmZXJyZWQgc28gd2UgY2FuIHRyYWNrIGJ1cyBwaGFzZSBjaGFuZ2VzLgogCQkgKgogCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gYSBIT1NUX01TR19MT09QCiAJCSAqIGludGVycnVwdCwgaW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIGhvc3QgbWVzc2FnZQpAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAKIAkJICAgICAgIHNjYnB0ciwgYWhjX2luYihhaGMsIEFSR18xKSwKIAkJICAgICAgIGFoYy0+c2NiX2RhdGEtPmhzY2JzW3NjYnB0cl0udGFnKTsKIAkJYWhjX2R1bXBfY2FyZF9zdGF0ZShhaGMpOwotCQlwYW5pYygiZm9yIHNhZnRleSIpOworCQlwYW5pYygiZm9yIHNhZmV0eSIpOwogCQlicmVhazsKIAl9CiAJY2FzZSBPVVRfT0ZfUkFOR0U6CkBAIC0xNzMzLDcgKzE3MzMsNyBAQAogCQkvKgogCQkgKiBBbHRob3VnaCB0aGUgZHJpdmVyIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlCiAJCSAqICdTZWxlY3Rpb24gaW4gUHJvZ3Jlc3MnIHN0YXR1cyBiaXQsIHRoZSBidXN5Ci0JCSAqIExFRCBkb2VzLiAgU0VMSU5HTyBpcyBvbmx5IGNsZWFyZWQgYnkgYSBzdWNjZXNzZnVsbAorCQkgKiBMRUQgZG9lcy4gIFNFTElOR08gaXMgb25seSBjbGVhcmVkIGJ5IGEgc3VjY2Vzc2Z1bAogCQkgKiBzZWxlY3Rpb24sIHNvIHdlIG11c3QgbWFudWFsbHkgY2xlYXIgaXQgdG8gaW5zdXJlCiAJCSAqIHRoZSBMRUQgdHVybnMgb2ZmIGp1c3QgaW5jYXNlIG5vIGZ1dHVyZSBzdWNjZXNzZnVsCiAJCSAqIHNlbGVjdGlvbnMgb2NjdXIgKGUuZy4gbm8gZGV2aWNlcyBvbiB0aGUgYnVzKS4KQEAgLTE5NDMsNyArMTk0Myw3IEBACiAJCQlpZiAobGFzdHBoYXNlICE9IFBfQlVTRlJFRSkgewogCQkJCS8qCiAJCQkJICogUmVuZWdvdGlhdGUgd2l0aCB0aGlzIGRldmljZSBhdCB0aGUKLQkJCQkgKiBuZXh0IG9wb3J0dW5pdHkganVzdCBpbiBjYXNlIHRoaXMgYnVzZnJlZQorCQkJCSAqIG5leHQgb3Bwb3J0dW5pdHkganVzdCBpbiBjYXNlIHRoaXMgYnVzZnJlZQogCQkJCSAqIGlzIGR1ZSB0byBhIG5lZ290aWF0aW9uIG1pc21hdGNoIHdpdGggdGhlCiAJCQkJICogZGV2aWNlLgogCQkJCSAqLwpAQCAtMjQ0Miw3ICsyNDQyLDcgQEAKIAogLyoKICAqIFVwZGF0ZSB0aGUgYml0bWFzayBvZiB0YXJnZXRzIGZvciB3aGljaCB0aGUgY29udHJvbGxlciBzaG91bGQKLSAqIG5lZ290aWF0ZSB3aXRoIGF0IHRoZSBuZXh0IGNvbnZlbmllbnQgb3BvcnR1bml0eS4gIFRoaXMgY3VycmVudGx5CisgKiBuZWdvdGlhdGUgd2l0aCBhdCB0aGUgbmV4dCBjb252ZW5pZW50IG9wcG9ydHVuaXR5LiAgVGhpcyBjdXJyZW50bHkKICAqIG1lYW5zIHRoZSBuZXh0IHRpbWUgd2Ugc2VuZCB0aGUgaW5pdGlhbCBpZGVudGlmeSBtZXNzYWdlcyBmb3IKICAqIGEgbmV3IHRyYW5zYWN0aW9uLgogICovCkBAIC00MTMxLDcgKzQxMzEsNyBAQAogCiAJCS8qCiAJCSAqIFJlcXVldWUgYWxsIHRhZ2dlZCBjb21tYW5kcyBmb3IgdGhpcyB0YXJnZXQKLQkJICogY3VycmVudGx5IGluIG91ciBwb3Nlc3Npb24gc28gdGhleSBjYW4gYmUKKwkJICogY3VycmVudGx5IGluIG91ciBwb3NzZXNzaW9uIHNvIHRoZXkgY2FuIGJlCiAJCSAqIGNvbnZlcnRlZCB0byB1bnRhZ2dlZCBjb21tYW5kcy4KIAkJICovCiAJCWFoY19zZWFyY2hfcWluZmlmbyhhaGMsIFNDQl9HRVRfVEFSR0VUKGFoYywgc2NiKSwKQEAgLTQ1ODEsNyArNDU4MSw3IEBACiAvKgogICogUmVzZXQgdGhlIGNvbnRyb2xsZXIgYW5kIHJlY29yZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGl0CiAgKiB0aGF0IGlzIG9ubHkgYXZhaWxhYmxlIGp1c3QgYWZ0ZXIgYSByZXNldC4gIElmICJyZWluaXQiIGlzCi0gKiBub24temVybywgdGhpcyByZXNldCBvY2N1cmVkIGFmdGVyIGluaXRpYWwgY29uZmlndXJhdGlvbgorICogbm9uLXplcm8sIHRoaXMgcmVzZXQgb2NjdXJyZWQgYWZ0ZXIgaW5pdGlhbCBjb25maWd1cmF0aW9uCiAgKiBhbmQgdGhlIGNhbGxlciByZXF1ZXN0cyB0aGF0IHRoZSBjaGlwIGJlIGZ1bGx5IHJlaW5pdGlhbGl6ZWQKICAqIHRvIGEgcnVuYWJsZSBzdGF0ZS4gIENoaXAgaW50ZXJydXB0cyBhcmUgKm5vdCogZW5hYmxlZCBhZnRlcgogICogYSByZWluaXRpYWxpemF0aW9uLiAgVGhlIGNhbGxlciBtdXN0IGVuYWJsZSBpbnRlcnJ1cHRzIHZpYQpAQCAtNDg5OSw3ICs0ODk5LDcgQEAKIAlhaGMtPm5leHRfcXVldWVkX3NjYiA9IGFoY19nZXRfc2NiKGFoYyk7CiAKIAkvKgotCSAqIE5vdGUgdGhhdCB3ZSB3ZXJlIHN1Y2Nlc3NmdWxsCisJICogTm90ZSB0aGF0IHdlIHdlcmUgc3VjY2Vzc2Z1bAogCSAqLwogCXJldHVybiAoMCk7IAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCA0YTM1OWJiLi5jNjI1MWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogICogZHViaW91cyBhdCBiZXN0LiAgVG8gbXkga25vd2xlZGdlLCB0aGlzIG9wdGlvbiBoYXMgbmV2ZXIgYWN0dWFsbHkKICAqIHNvbHZlZCBhIFBDSSBwYXJpdHkgcHJvYmxlbSwgYnV0IG9uIGNlcnRhaW4gbWFjaGluZXMgd2l0aCBicm9rZW4gUENJCiAgKiBjaGlwc2V0IGNvbmZpZ3VyYXRpb25zIHdoZXJlIHN0cmF5IFBDSSB0cmFuc2FjdGlvbnMgd2l0aCBiYWQgcGFyaXR5IGFyZQotICogdGhlIG5vcm0gcmF0aGVyIHRoYW4gdGhlIGV4Y2VwdGlvbiwgdGhlIGVycm9yIG1lc3NhZ2VzIGNhbiBiZSBvdmVyd2VsbWluZy4KKyAqIHRoZSBub3JtIHJhdGhlciB0aGFuIHRoZSBleGNlcHRpb24sIHRoZSBlcnJvciBtZXNzYWdlcyBjYW4gYmUgb3ZlcndoZWxtaW5nLgogICogSXQncyBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyIGZvciBjb21wbGV0ZW5lc3MuCiAgKiAgIDAJICAgPSBTaHV0IG9mZiBQQ0kgcGFyaXR5IGNoZWNrCiAgKiAgIG5vbi0wID0gcmV2ZXJzZSBwb2xhcml0eSBwY2kgcGFyaXR5IGNoZWNraW5nCkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogCQl1c2VydGFncyA9IGFoY19saW51eF91c2VyX3RhZ2RlcHRoKGFoYywgZGV2aW5mbyk7CiAJCWlmICghd2FzX3F1ZXVpbmcpIHsKIAkJCS8qCi0JCQkgKiBTdGFydCBvdXQgYWdyZXNzaXZlbHkgYW5kIGFsbG93IG91cgorCQkJICogU3RhcnQgb3V0IGFnZ3Jlc3NpdmVseSBhbmQgYWxsb3cgb3VyCiAJCQkgKiBkeW5hbWljIHF1ZXVlIGRlcHRoIGFsZ29yaXRobSB0byB0YWtlCiAJCQkgKiBjYXJlIG9mIHRoZSByZXN0LgogCQkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYwppbmRleCAyYjExYTQyLi42OTE3YjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMKQEAgLTc4OSw3ICs3ODksNyBAQAogCWFoYy0+YnVzX2ludHIgPSBhaGNfcGNpX2ludHI7CiAJYWhjLT5idXNfY2hpcF9pbml0ID0gYWhjX3BjaV9jaGlwX2luaXQ7CiAKLQkvKiBSZW1lYmVyIGhvdyB0aGUgY2FyZCB3YXMgc2V0dXAgaW4gY2FzZSB0aGVyZSBpcyBubyBTRUVQUk9NICovCisJLyogUmVtZW1iZXIgaG93IHRoZSBjYXJkIHdhcyBzZXR1cCBpbiBjYXNlIHRoZXJlIGlzIG5vIFNFRVBST00gKi8KIAlpZiAoKGFoY19pbmIoYWhjLCBIQ05UUkwpICYgUE9XUkROKSA9PSAwKSB7CiAJCWFoY19wYXVzZShhaGMpOwogCQlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfVUxUUkEyKSAhPSAwKQpAQCAtODYwLDcgKzg2MCw3IEBACiAJfQogCiAJLyoKLQkgKiBXZSBjYW5ub3QgcGVyZm9ybSBVTFRSQSBzcGVlZHMgd2l0aG91dCB0aGUgcHJlc2Vuc2UKKwkgKiBXZSBjYW5ub3QgcGVyZm9ybSBVTFRSQSBzcGVlZHMgd2l0aG91dCB0aGUgcHJlc2VuY2UKIAkgKiBvZiB0aGUgZXh0ZXJuYWwgcHJlY2lzaW9uIHJlc2lzdG9yLgogCSAqLwogCWlmICgoYWhjLT5mZWF0dXJlcyAmIEFIQ19VTFRSQSkgIT0gMCkgewpAQCAtOTY5LDcgKzk2OSw3IEBACiB9CiAKIC8qCi0gKiBUZXN0IGZvciB0aGUgcHJlc2Vuc2Ugb2YgZXh0ZXJuYWwgc3JhbSBpbiBhbgorICogVGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIGV4dGVybmFsIHNyYW0gaW4gYW4KICAqICJ1bnNoYXJlZCIgY29uZmlndXJhdGlvbi4KICAqLwogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9ncmFtLnkgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQppbmRleCBlNDA2NDQzLi5mMTU4NmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQpAQCAtODAzLDcgKzgwMyw3IEBACiB8CW1hY3JvX2FyZ2xpc3QgJywnIFRfQVJHCiAJewogCQlpZiAoJDEgPT0gMCkgewotCQkJc3RvcCgiQ29tbWEgd2l0aG91dCBwcmVjZWVkaW5nIGFyZ3VtZW50IGluIGFyZyBsaXN0IiwKKwkJCXN0b3AoIkNvbW1hIHdpdGhvdXQgcHJlY2VkaW5nIGFyZ3VtZW50IGluIGFyZyBsaXN0IiwKIAkJCSAgICAgRVhfREFUQUVSUik7CiAJCQkvKiBOT1RSRUFDSEVEICovCiAJCX0KQEAgLTEzMTksOCArMTMxOSw4IEBACiA7CiAKIAkvKgotCSAqIFRoaXMgZ3JhbW1lciBkaWZmZXJzIGZyb20gdGhlIG9uZSBpbiB0aGUgYWljN3h4eAotCSAqIHJlZmVyZW5jZSBtYW51YWwgc2luY2UgdGhlIGdyYW1tZXIgbGlzdGVkIHRoZXJlIGlzCisJICogVGhpcyBncmFtbWFyIGRpZmZlcnMgZnJvbSB0aGUgb25lIGluIHRoZSBhaWM3eHh4CisJICogcmVmZXJlbmNlIG1hbnVhbCBzaW5jZSB0aGUgZ3JhbW1hciBsaXN0ZWQgdGhlcmUgaXMKIAkgKiBhbWJpZ3VvdXMgYW5kIGNhdXNlcyBhIHNoaWZ0L3JlZHVjZSBjb25mbGljdC4KIAkgKiBJdCBhbHNvIHNlZW1zIG1vcmUgbG9naWNhbCBhcyB0aGUgImltbWVkaWF0ZSIKIAkgKiBhcmd1bWVudCBpcyBsaXN0ZWQgYXMgdGhlIHNlY29uZCBhcmcgbGlrZSB0aGUKQEAgLTE3OTksNyArMTc5OSw3IEBACiAJaW5zdHIgPSBzZXFfYWxsb2MoKTsKIAlmM19pbnN0ciA9ICZpbnN0ci0+Zm9ybWF0LmZvcm1hdDM7CiAJaWYgKGFkZHJlc3MtPnN5bWJvbCA9PSBOVUxMKSB7Ci0JCS8qICdkb3QnIHJlZmVycmVuY2UuICBVc2UgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gcG9pbnRlciAqLworCQkvKiAnZG90JyByZWZlcmVuY2UuICBVc2UgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gcG9pbnRlciAqLwogCQlhZGRyID0gaW5zdHJ1Y3Rpb25fcHRyICsgYWRkcmVzcy0+b2Zmc2V0OwogCX0gZWxzZSBpZiAoYWRkcmVzcy0+c3ltYm9sLT50eXBlID09IFVOSU5JVElBTElaRUQpIHsKIAkJLyogZm9yd2FyZCByZWZlcmVuY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fbWFjcm9fZ3JhbS55IGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9tYWNyb19ncmFtLnkKaW5kZXggZmY0NmFhNi4uNzA4MzI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9tYWNyb19ncmFtLnkKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9tYWNyb19ncmFtLnkKQEAgLTExNSw3ICsxMTUsNyBAQAogfAltYWNyb19hcmdsaXN0ICcsJyBUX0FSRwogCXsKIAkJaWYgKCQxID09IDApIHsKLQkJCXN0b3AoIkNvbW1hIHdpdGhvdXQgcHJlY2VlZGluZyBhcmd1bWVudCBpbiBhcmcgbGlzdCIsCisJCQlzdG9wKCJDb21tYSB3aXRob3V0IHByZWNlZGluZyBhcmd1bWVudCBpbiBhcmcgbGlzdCIsCiAJCQkgICAgIEVYX0RBVEFFUlIpOwogCQkJLyogTk9UUkVBQ0hFRCAqLwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jCmluZGV4IDRmZjYwYTAuLjViMjEyZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jCkBAIC05MDUsNyArOTA1LDcgQEAKICAqIHByb2JsZW1zIHdpdGggYXJjaGl0ZWN0dXJlcyBJIGNhbid0IHRlc3Qgb24gKGJlY2F1c2UgSSBkb24ndCBoYXZlIG9uZSwKICAqIHN1Y2ggYXMgdGhlIEFscGhhIGJhc2VkIHN5c3RlbXMpIHdoaWNoIGhhcHBlbiB0byBnaXZlIGZhdWx0cyBmb3IKICAqIG5vbi1hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgY2FyZSB3YXMgdGFrZW4gdG8gYWxpZ24gdGhpcyBzdHJ1Y3R1cmUKLSAqIGluIGEgd2F5IHRoYXQgZ2F1cmFudGVlZCBhbGwgYWNjZXNzZXMgbGFyZ2VyIHRoYW4gOCBiaXRzIHdlcmUgYWxpZ25lZAorICogaW4gYSB3YXkgdGhhdCBndWFyYW50ZWVkIGFsbCBhY2Nlc3NlcyBsYXJnZXIgdGhhbiA4IGJpdHMgd2VyZSBhbGlnbmVkCiAgKiBvbiB0aGUgYXBwcm9wcmlhdGUgYm91bmRhcnkuICBJdCdzIGFsc28gb3JnYW5pemVkIHRvIHRyeSBhbmQgYmUgbW9yZQogICogY2FjaGUgbGluZSBlZmZpY2llbnQuICBCZSBjYXJlZnVsIHdoZW4gY2hhbmdpbmcgdGhpcyBsZXN0IHlvdSBtaWdodCBodXJ0CiAgKiBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBicmluZyBkb3duIHRoZSB3cmF0aCBvZiB0aGUgbWFzc2VzLgpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKICAqIHRoZSBjYXJkJ3MgcmVnaXN0ZXJzIGluIGEgaGV4IGR1bXAgZm9ybWF0IHRhaWxvcmVkIHRvIGVhY2ggbW9kZWwgb2YKICAqIGNvbnRyb2xsZXIuCiAgKiAKLSAqIE5PVEU6IFRIRSBDT05UUk9MTEVSIElTIExFRlQgSU4gQU4gVU5VU0VBQkxFIFNUQVRFIEJZIFRISVMgT1BUSU9OLgorICogTk9URTogVEhFIENPTlRST0xMRVIgSVMgTEVGVCBJTiBBTiBVTlVTQUJMRSBTVEFURSBCWSBUSElTIE9QVElPTi4KICAqICAgICAgIFlPVSBDQU5OT1QgQk9PVCBVUCBXSVRIIFRISVMgT1BUSU9OLCBJVCBJUyBGT1IgREVCVUdHSU5HIFBVUlBPU0VTCiAgKiAgICAgICBPTkxZCiAgKi8KQEAgLTM0NjcsNyArMzQ2Nyw3IEBACiAgIC8qIFR1cm4gb2ZmIHRoZSBidXMnIGN1cnJlbnQgb3BlcmF0aW9ucywgYWZ0ZXIgYWxsLCB3ZSBzaG91bGRuJ3QgaGF2ZSBhbnkKICAgICogdmFsaWQgY29tbWFuZHMgbGVmdCB0byBjYXVzZSBhIFJTRUxJIGFuZCBTRUxPIG9uY2Ugd2UndmUgdG9zc2VkIHRoZQogICAgKiBidXMgYXdheSB3aXRoIHRoaXMgcmVzZXQsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgc2h1dCBkb3duIHRoZSBzZXF1ZW5jZXIKLSAgICogdW50aWwgdGhlIGJ1cyBpcyByZXN0YXJ0ZWQgYXMgb3Bwb3NzZWQgdG8gc2F2aW5nIHRoZSBjdXJyZW50IHNldHRpbmdzCisgICAqIHVudGlsIHRoZSBidXMgaXMgcmVzdGFydGVkIGFzIG9wcG9zZWQgdG8gc2F2aW5nIHRoZSBjdXJyZW50IHNldHRpbmdzCiAgICAqIGFuZCByZXN0b3JpbmcgdGhlbSAod2hpY2ggbWFrZXMgbm8gc2Vuc2UgdG8gbWUpLiAqLwogCiAgIC8qIFR1cm4gb24gdGhlIGJ1cyByZXNldC4gKi8KQEAgLTQwNzAsNyArNDA3MCw3IEBACiAgICAgICAgICAgICBhaWNfZGV2LT5tYXhfcV9kZXB0aCA9IGFpY19kZXYtPnRlbXBfcV9kZXB0aCA9IDE7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogV2Ugc2V0IHRoaXMgY29tbWFuZCB1cCBhcyBhIGJ1cyBkZXZpY2UgcmVzZXQuICBIb3dldmVyLCB3ZSBoYXZlCi0gICAgICAgICAgICAgKiB0byBjbGVhciB0aGUgdGFnIHR5cGUgYXMgaXQncyBjYXVzaW5nIHVzIHByb2JsZW1zLiAgV2Ugc2hvdWxkbnQKKyAgICAgICAgICAgICAqIHRvIGNsZWFyIHRoZSB0YWcgdHlwZSBhcyBpdCdzIGNhdXNpbmcgdXMgcHJvYmxlbXMuICBXZSBzaG91bGRuJ3QKICAgICAgICAgICAgICAqIGhhdmUgdG8gd29ycnkgYWJvdXQgYW55IG90aGVyIGNvbW1hbmRzIGJlaW5nIGFjdGl2ZSwgc2luY2UgaWYKICAgICAgICAgICAgICAqIHRoZSBkZXZpY2UgaXMgcmVmdXNpbmcgdGFnZ2VkIGNvbW1hbmRzLCB0aGlzIHNob3VsZCBiZSB0aGUKICAgICAgICAgICAgICAqIGZpcnN0IHRhZ2dlZCBjb21tYW5kIHNlbnQgdG8gdGhlIGRldmljZSwgaG93ZXZlciwgd2UgZG8gaGF2ZQpAQCAtOTc0OCw3ICs5NzQ4LDcgQEAKICAgICB9CiAKICAgICAvKgotICAgICAqIFdlIGFyZSBjb21taXRlZCBub3csIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gY2hlY2tlZCBhbmQgdGhpcyBjYXJkCisgICAgICogV2UgYXJlIGNvbW1pdHRlZCBub3csIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gY2hlY2tlZCBhbmQgdGhpcyBjYXJkCiAgICAgICogaGFzIGJlZW4gZm91bmQsIG5vdyB3ZSBqdXN0IHNldCBpdCB1cAogICAgICAqLwogCkBAIC05OTA2LDcgKzk5MDYsNyBAQAogICAgKiAgMjogQWxsIFBDSSBjb250cm9sbGVycyB3aXRoIEJJT1NfRU5BQkxFRCBuZXh0LCBhY2NvcmRpbmcgdG8gQklPUwogICAgKiAgICAgYWRkcmVzcywgZ29pbmcgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdC4KICAgICogIDM6IFJlbWFpbmluZyBWTEIvRUlTQSBjb250cm9sbGVycyBnb2luZyBpbiBzbG90IG9yZGVyLgotICAgKiAgNDogUmVtYWluaW5nIFBDSSBjb250cm9sbGVycywgZ29pbmcgaW4gUENJIGRldmljZSBvcmRlciAocmV2ZXJzYWJsZSkKKyAgICogIDQ6IFJlbWFpbmluZyBQQ0kgY29udHJvbGxlcnMsIGdvaW5nIGluIFBDSSBkZXZpY2Ugb3JkZXIgKHJldmVyc2libGUpCiAgICAqLwogCiAgIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4LnNlcSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4LnNlcQppbmRleCAxNTY1YmU5Li44MjNmZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQvYWljN3h4eC5zZXEKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkL2FpYzd4eHguc2VxCkBAIC01MSw3ICs1MSw3IEBACiAgKiB1c2UgYnl0ZSAyNyBvZiB0aGUgU0NCIGFzIGEgcHNldWRvLW5leHQgcG9pbnRlciBhbmQgdG8gdGhyZWFkIGEgbGlzdAogICogb2YgU0NCcyB0aGF0IGFyZSBhd2FpdGluZyBzZWxlY3Rpb24uICBTaW5jZSAwLTB4ZmUgYXJlIHZhbGlkIFNDQiBpbmRleGVzLCAKICAqIFNDQl9MSVNUX05VTEwgaXMgMHhmZiB3aGljaCBpcyBvdXQgb2YgcmFuZ2UuICBBbiBlbnRyeSBpcyBhbHNvIGFkZGVkIHRvCi0gKiB0aGlzIGxpc3QgZXZlcnl0aW1lIGEgcmVxdWVzdCBzZW5zZSBvY2N1cnMgb3IgYWZ0ZXIgY29tcGxldGluZyBhIG5vbi10YWdnZWQKKyAqIHRoaXMgbGlzdCBldmVyeSB0aW1lIGEgcmVxdWVzdCBzZW5zZSBvY2N1cnMgb3IgYWZ0ZXIgY29tcGxldGluZyBhIG5vbi10YWdnZWQKICAqIGNvbW1hbmQgZm9yIHdoaWNoIGEgc2Vjb25kIFNDQiBoYXMgYmVlbiBxdWV1ZWQuICBUaGUgc2VxdWVuY2VyIHdpbGwKICAqIGF1dG9tYXRpY2FsbHkgY29uc3VtZSB0aGUgZW50cmllcy4KICAqLwpAQCAtNjk2LDcgKzY5Niw3IEBACiAgKiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdGhlIGhzb3QgdG8gc2VuZCBtZXNzYWdlcyBvdXRzaWRlIG9mIGFuIGlkZW50aWZ5CiAgKiBzZXF1ZW5jZSB3aGlsZSBwcm90ZWN0aW5nIHRoZSBzZXFlbmNlciBmcm9tIHRlc3RpbmcgdGhlIE1LX01FU1NBR0UgYml0CiAgKiBvbiBhbiBTQ0IgdGhhdCBtaWdodCBub3QgYmUgZm9yIHRoZSBjdXJyZW50IG5leHVzLiAoRm9yIGV4YW1wbGUsIGEKLSAqIEJEUiBtZXNzYWdlIGluIHJlc3BvbmNlIHRvIGEgYmFkIHJlc2VsZWN0aW9uIHdvdWxkIGxlYXZlIHVzIHBvaW50ZWQgdG8KKyAqIEJEUiBtZXNzYWdlIGluIHJlc3BvbnNlIHRvIGEgYmFkIHJlc2VsZWN0aW9uIHdvdWxkIGxlYXZlIHVzIHBvaW50ZWQgdG8KICAqIGFuIFNDQiB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCkuCiAgKiBPdGhlcndpc2UsIHRyZWF0IE1TR19PVVQgYXMgYSAxIGJ5dGUgbWVzc2FnZSB0byBzZW5kIChhYm9ydCwgYWJvcnQgdGFnLAogICogYnVzIGRldmljZSByZXNldCkuCkBAIC03MTYsOCArNzE2LDggQEAKIAl9IGVsc2UgewogCQlhbmQJU0lOREVYLDB4NyxTQ0JfVENMOwkvKiBsdW4gKi8KIAl9Ci0JYW5kCUEsRElTQ0VOQixTQ0JfQ09OVFJPTDsJLyogbWFzayBvZmYgZGlzY29ubmVjdCBwcml2bGVkZ2UgKi8KLQlvcglTSU5ERVgsQTsJCS8qIG9yIGluIGRpc2Nvbm5lY3QgcHJpdmxlZGdlICovCisJYW5kCUEsRElTQ0VOQixTQ0JfQ09OVFJPTDsJLyogbWFzayBvZmYgZGlzY29ubmVjdCBwcml2aWxlZ2UgKi8KKwlvcglTSU5ERVgsQTsJCS8qIG9yIGluIGRpc2Nvbm5lY3QgcHJpdmlsZWdlICovCiAJb3IJU0lOREVYLE1TR19JREVOVElGWUZMQUc7CiBwX21lc2dvdXRfbWtfbWVzc2FnZToKIAl0ZXN0CVNDQl9DT05UUk9MLE1LX01FU1NBR0UgIGp6IHBfbWVzZ291dF90YWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3JlZ19kZWYuaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfcmVnX2RlZi5oCmluZGV4IDQwMjczYTcuLmRkNmNjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfcmVnX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfcmVnX2RlZi5oCkBAIC0yMTM0LDcgKzIxMzQsNyBAQAogKiBUaGUgaG9zdCBhY2Nlc3NlcyB0aGlzIHNjcmF0Y2ggaW4gYSBkaWZmZXJlbnQgbWFubmVyIGZyb20gdGhlCiAqIGxpbmsgc2VxdWVuY2VyLiBUaGUgc2VxdWVuY2VyIGhhcyB0byB1c2UgTFNFUSByZWdpc3RlcnMKICogTG1TQ1JQQUdFIGFuZCBMbU1uU0NSUEFHRSB0byBhY2Nlc3MgdGhlIHNjcmF0Y2ggbWVtb3J5LiBBIGZsYXQKLSogbWFwcGluZyBvZiB0aGUgc2NyYXRjaCBtZW1vcnkgaXMgYXZhbGlhYmxlIGZvciBzb2Z0d2FyZQorKiBtYXBwaW5nIG9mIHRoZSBzY3JhdGNoIG1lbW9yeSBpcyBhdmFpbGFibGUgZm9yIHNvZnR3YXJlCiAqIGNvbnZlbmllbmNlIGFuZCB0byBwcmV2ZW50IGNvcnJ1cHRpb24gd2hpbGUgdGhlIHNlcXVlbmNlciBpcwogKiBydW5uaW5nLiBUaGlzIG1lbW9yeSBpcyBtYXBwZWQgb250byBhZGRyZXNzZXMgODAwaCAtIDlGRmguCiAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwppbmRleCBlYzE2NjcyLi5jNDU0ZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogICovCiAjZGVmaW5lIFRJTUVPVVRfVElNRSAxMAogLyoKLSAqIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIGhhdmUgdmVyYm9zZSBleHBsYWluYXRpb24gb2YgU0NTSQorICogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8gaGF2ZSB2ZXJib3NlIGV4cGxhbmF0aW9uIG9mIFNDU0kKICAqIHN0YXR1cy9tZXNzYWdlcy4KICAqLwogI3VuZGVmIENPTkZJR19BQ09STlNDU0lfQ09OU1RBTlRTCkBAIC0xNTYxLDcgKzE1NjEsNyBAQAogCS8qCiAJICogSWYgd2Ugd2VyZSBuZWdvY2lhdGluZyBzeW5jIHRyYW5zZmVyLCB3ZSBkb24ndCB5ZXQga25vdyBpZgogCSAqIHRoaXMgUkVKRUNUIGlzIGZvciB0aGUgc3luYyB0cmFuc2ZlciBvciBmb3IgdGhlIHRhZ2dlZCBxdWV1ZS93aWRlCi0JICogdHJhbnNmZXIuICBSZS1pbml0aWF0ZSBzeW5jIHRyYW5zZmVyIG5lZ29jaWF0aW9uIG5vdywgYW5kIGlmCisJICogdHJhbnNmZXIuICBSZS1pbml0aWF0ZSBzeW5jIHRyYW5zZmVyIG5lZ290aWF0aW9uIG5vdywgYW5kIGlmCiAJICogd2UgZ290IGEgUkVKRUNUIGluIHJlc3BvbnNlIHRvIFNEVFIsIHRoZW4gaXQnbGwgYmUgc2V0IHRvIERPTkUuCiAJICovCiAJaWYgKGhvc3QtPmRldmljZVtob3N0LT5TQ3BudC0+ZGV2aWNlLT5pZF0uc3luY19zdGF0ZSA9PSBTWU5DX1NFTlRfUkVRVUVTVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmggYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5oCmluZGV4IDhkMjE3MmEuLjAxYmM3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuaApAQCAtMjIzLDggKzIyMyw4IEBACiAgKiBTeW5jaHJvbm91cyB0cmFuc2ZlciBzdGF0ZQogICovCiB0eXBlZGVmIGVudW0gewkJCQkJLyogU3luY2hyb25vdXMgdHJhbnNmZXIgc3RhdGUJCSovCi0gICAgU1lOQ19BU1lOQ0hST05PVVMsCQkJCS8qIGRvbid0IG5lZ29jaWF0ZSBzeW5jaHJvbm91cyB0cmFuc2ZlcnMqLwotICAgIFNZTkNfTkVHT0NJQVRFLAkJCQkvKiBzdGFydCBuZWdvY2lhdGlvbgkJCSovCisgICAgU1lOQ19BU1lOQ0hST05PVVMsCQkJCS8qIGRvbid0IG5lZ290aWF0ZSBzeW5jaHJvbm91cyB0cmFuc2ZlcnMqLworICAgIFNZTkNfTkVHT0NJQVRFLAkJCQkvKiBzdGFydCBuZWdvdGlhdGlvbgkJCSovCiAgICAgU1lOQ19TRU5UX1JFUVVFU1QsCQkJCS8qIHNlbnQgU0RUUiBtZXNzYWdlCQkJKi8KICAgICBTWU5DX0NPTVBMRVRFRCwJCQkJLyogcmVjZWl2ZWQgU0RUUiByZXBseQkJCSovCiB9IHN5bmN4ZmVyX3Q7CkBAIC0zMjIsNyArMzIyLDcgQEAKICAgICAvKiBwZXItZGV2aWNlIGluZm8gKi8KICAgICBzdHJ1Y3QgewogCXVuc2lnbmVkIGNoYXIJc3luY194ZmVyOwkJLyogc3luY2hyb25vdXMgdHJhbnNmZXIgKFNCSUMgdmFsdWUpCSovCi0Jc3luY3hmZXJfdAlzeW5jX3N0YXRlOwkJLyogc3luYyB4ZmVyIG5lZ29jaWF0aW9uIHN0YXRlCQkqLworCXN5bmN4ZmVyX3QJc3luY19zdGF0ZTsJCS8qIHN5bmMgeGZlciBuZWdvdGlhdGlvbiBzdGF0ZQkJKi8KIAl1bnNpZ25lZCBjaGFyCWRpc2Nvbm5lY3Rfb2s6MTsJLyogZGV2aWNlIGNhbiBkaXNjb25uZWN0CQkqLwogICAgIH0gZGV2aWNlWzhdOwogICAgIHVuc2lnbmVkIGxvbmcJYnVzeWx1bnNbNjQgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOy8qIGFycmF5IG9mIGJpdHMgaW5kaWNhdGluZyBMVU5zIGJ1c3kJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYwppbmRleCAyODM2ZmUyLi5hNzUwYWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2FyeGVzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hcnhlc2NzaS5jCkBAIC0yMjgsNyArMjI4LDcgQEAKICAqIFBhcmFtcyAgOiBidWZmZXIgLSBhIGJ1ZmZlciB0byB3cml0ZSBpbmZvcm1hdGlvbiB0bwogICoJICAgICBzdGFydCAgLSBhIHBvaW50ZXIgaW50byB0aGlzIGJ1ZmZlciBzZXQgYnkgdGhpcyByb3V0aW5lIHRvIHRoZSBzdGFydAogICoJCSAgICAgIG9mIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KLSAqCSAgICAgb2Zmc2V0IC0gb2Zmc2V0IGludG8gaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIHJlYWQgdXB0by4KKyAqCSAgICAgb2Zmc2V0IC0gb2Zmc2V0IGludG8gaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIHJlYWQgdXAgdG8uCiAgKgkgICAgIGxlbmd0aCAtIGxlbmd0aCBvZiBidWZmZXIKICAqCSAgICAgaG9zdF9ubyAtIGhvc3QgbnVtYmVyIHRvIHJldHVybiBpbmZvcm1hdGlvbiBmb3IKICAqCSAgICAgaW5vdXQgIC0gMCBmb3IgcmVhZGluZywgMSBmb3Igd3JpdGluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwppbmRleCBjOTkwMmI1Li41NDc5ODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCkBAIC0zNDQsNyArMzQ0LDcgQEAKICAqIFBhcmFtcyAgIDogYnVmZmVyIC0gYSBidWZmZXIgdG8gd3JpdGUgaW5mb3JtYXRpb24gdG8KICAqCSAgICAgIHN0YXJ0ICAtIGEgcG9pbnRlciBpbnRvIHRoaXMgYnVmZmVyIHNldCBieSB0aGlzIHJvdXRpbmUgdG8gdGhlIHN0YXJ0CiAgKgkJICAgICAgIG9mIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KLSAqCSAgICAgIG9mZnNldCAtIG9mZnNldCBpbnRvIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSByZWFkIHVwdG8uCisgKgkgICAgICBvZmZzZXQgLSBvZmZzZXQgaW50byBpbmZvcm1hdGlvbiB0aGF0IHdlIGhhdmUgcmVhZCB1cCB0by4KICAqCSAgICAgIGxlbmd0aCAtIGxlbmd0aCBvZiBidWZmZXIKICAqCSAgICAgIGhvc3Rfbm8gLSBob3N0IG51bWJlciB0byByZXR1cm4gaW5mb3JtYXRpb24gZm9yCiAgKgkgICAgICBpbm91dCAgLSAwIGZvciByZWFkaW5nLCAxIGZvciB3cml0aW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCmluZGV4IGQ4NDM1MTMuLmVkZmQxMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKQEAgLTQyOSw3ICs0MjksNyBAQAogICogUGFyYW1zICAgOiBidWZmZXIgLSBhIGJ1ZmZlciB0byB3cml0ZSBpbmZvcm1hdGlvbiB0bwogICoJICAgICAgc3RhcnQgIC0gYSBwb2ludGVyIGludG8gdGhpcyBidWZmZXIgc2V0IGJ5IHRoaXMgcm91dGluZSB0byB0aGUgc3RhcnQKICAqCQkgICAgICAgb2YgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLgotICoJICAgICAgb2Zmc2V0IC0gb2Zmc2V0IGludG8gaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIHJlYWQgdXB0by4KKyAqCSAgICAgIG9mZnNldCAtIG9mZnNldCBpbnRvIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSByZWFkIHVwIHRvLgogICoJICAgICAgbGVuZ3RoIC0gbGVuZ3RoIG9mIGJ1ZmZlcgogICoJICAgICAgaG9zdF9ubyAtIGhvc3QgbnVtYmVyIHRvIHJldHVybiBpbmZvcm1hdGlvbiBmb3IKICAqCSAgICAgIGlub3V0ICAtIDAgZm9yIHJlYWRpbmcsIDEgZm9yIHdyaXRpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYwppbmRleCAyYjJjZTIxLi5lODVjNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKQEAgLTIxMTksNyArMjExOSw3IEBACiAJICogZXhlY3V0ZWQsIHVubGVzcyBhIHRhcmdldCBjb25uZWN0cyB0byB1cy4KIAkgKi8KIAlpZiAoaW5mby0+cmVxU0NwbnQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZC4lYzogbG9vc2luZyByZXF1ZXN0IGNvbW1hbmRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZC4lYzogbG9zaW5nIHJlcXVlc3QgY29tbWFuZFxuIiwKIAkJCWluZm8tPmhvc3QtPmhvc3Rfbm8sICcwJyArIFNDcG50LT5kZXZpY2UtPmlkKTsKIAlpbmZvLT5yZXFTQ3BudCA9IFNDcG50OwogfQpAQCAtMjI5NCw3ICsyMjk0LDcgQEAKIAkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhbiBJUlEsIHRoZW4gd2UgbXVzdCBwb2xsIHRoZSBjYXJkIGZvcgogCQkgKiBpdCdzIGludGVycnVwdCwgYW5kIHVzZSB0aGF0IHRvIGNhbGwgdGhpcyBkcml2ZXIncwogCQkgKiBpbnRlcnJ1cHQgcm91dGluZS4gIFRoYXQgd2F5LCB3ZSBrZWVwIHRoZSBjb21tYW5kCi0JCSAqIHByb2dyZXNzaW5nLiAgTWF5YmUgd2UgY2FuIGFkZCBzb21lIGludGVsaWdlbmNlIGhlcmUKKwkJICogcHJvZ3Jlc3NpbmcuICBNYXliZSB3ZSBjYW4gYWRkIHNvbWUgaW50ZWxsaWdlbmNlIGhlcmUKIAkJICogYW5kIGdvIHRvIHNsZWVwIGlmIHdlIGtub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGdvaW5nCiAJCSAqIHRvIGJlIHNvbWUgdGltZSAoZWcsIGRpc2Nvbm5lY3RlZCkuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuaCBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmgKaW5kZXggZjMwZjhkNi4uODRiNzEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuaAorKysgYi9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5oCkBAIC0yMDMsMTEgKzIwMywxMSBAQAogfSBmYXNkbWF0eXBlX3Q7CiAKIHR5cGVkZWYgZW51bSB7Ci0JbmVnX3dhaXQsCQkJCQkvKiBOZWdvY2lhdGUgd2l0aCBkZXZpY2UJCSovCi0JbmVnX2lucHJvZ3Jlc3MsCQkJCQkvKiBOZWdvY2lhdGlvbiBzZW50CQkJKi8KLQluZWdfY29tcGxldGUsCQkJCQkvKiBOZWdvY2lhdGlvbiBjb21wbGV0ZQkJCSovCi0JbmVnX3Rhcmdjb21wbGV0ZSwJCQkJLyogVGFyZ2V0IGNvbXBsZXRlZCBuZWdvY2lhdGlvbgkJKi8KLQluZWdfaW52YWxpZAkJCQkJLyogTmVnb2NpYXRpb24gbm90IHN1cHBvcnRlZAkJKi8KKwluZWdfd2FpdCwJCQkJCS8qIE5lZ290aWF0ZSB3aXRoIGRldmljZQkJKi8KKwluZWdfaW5wcm9ncmVzcywJCQkJCS8qIE5lZ290aWF0aW9uIHNlbnQJCQkqLworCW5lZ19jb21wbGV0ZSwJCQkJCS8qIE5lZ290aWF0aW9uIGNvbXBsZXRlCQkJKi8KKwluZWdfdGFyZ2NvbXBsZXRlLAkJCQkvKiBUYXJnZXQgY29tcGxldGVkIG5lZ290aWF0aW9uCQkqLworCW5lZ19pbnZhbGlkCQkJCQkvKiBOZWdvdGlhdGlvbiBub3Qgc3VwcG9ydGVkCQkqLwogfSBuZWdfdDsKIAogI2RlZmluZSBNQUdJQwkweDQ0MTI5NmJkVUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYyBiL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYwppbmRleCBlMjI5N2I0Li45Mjc0YzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKICAqIFBhcmFtcyAgIDogYnVmZmVyICAtIGEgYnVmZmVyIHRvIHdyaXRlIGluZm9ybWF0aW9uIHRvCiAgKgkgICAgICBzdGFydCAgIC0gYSBwb2ludGVyIGludG8gdGhpcyBidWZmZXIgc2V0IGJ5IHRoaXMgcm91dGluZSB0byB0aGUgc3RhcnQKICAqCQkgICAgICAgIG9mIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KLSAqCSAgICAgIG9mZnNldCAgLSBvZmZzZXQgaW50byBpbmZvcm1hdGlvbiB0aGF0IHdlIGhhdmUgcmVhZCB1cHRvLgorICoJICAgICAgb2Zmc2V0ICAtIG9mZnNldCBpbnRvIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSByZWFkIHVwIHRvLgogICoJICAgICAgbGVuZ3RoICAtIGxlbmd0aCBvZiBidWZmZXIKICAqCSAgICAgIGlub3V0ICAgLSAwIGZvciByZWFkaW5nLCAxIGZvciB3cml0aW5nLgogICogUmV0dXJucyAgOiBsZW5ndGggb2YgZGF0YSB3cml0dGVuIHRvIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDg4YjI5MjguLmVhNDM5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAgKgogICogUGFyYW1ldGVyczogU2NzaV9DbW5kICpjbWQKICAqICAgIFRoZSBjb21tYW5kIHRvIHdvcmsgb24uIFRoZSBmaXJzdCBzY2F0dGVyIGJ1ZmZlcidzIGRhdGEgYXJlCi0gKiAgICBhc3N1bWVkIHRvIGJlIGFscmVhZHkgdHJhbnNmZXJlZCBpbnRvIHB0ci90aGlzX3Jlc2lkdWFsLgorICogICAgYXNzdW1lZCB0byBiZSBhbHJlYWR5IHRyYW5zZmVycmVkIGludG8gcHRyL3RoaXNfcmVzaWR1YWwuCiAgKi8KIAogc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKFNjc2lfQ21uZCAqY21kKQpAQCAtMTcyMCw3ICsxNzIwLDcgQEAKICAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KICAqCiAgKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIGFyZSB0cmFuc2ZlcmVkIG9yIGV4aXQKKyAqCW1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBhcmUgdHJhbnNmZXJyZWQgb3IgZXhpdAogICoJaXMgaW4gc2FtZSBwaGFzZS4KICAqCiAgKglBbHNvLCAqcGhhc2UsICpjb3VudCwgKmRhdGEgYXJlIG1vZGlmaWVkIGluIHBsYWNlLgpAQCAtMTkxMSw3ICsxOTExLDcgQEAKICAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KICAqCiAgKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVyZWQgb3IgZXhpdAorICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVycmVkIG9yIGV4aXQKICAqCWlzIGluIHNhbWUgcGhhc2UuCiAgKgogICoJQWxzbywgKnBoYXNlLCAqY291bnQsICpkYXRhIGFyZSBtb2RpZmllZCBpbiBwbGFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMgYi9kcml2ZXJzL3Njc2kvYXRwODcwdS5jCmluZGV4IDc2MDI5ZDUuLjdlNmVjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAKIAlwcmludGsoIiBcbiV4ICV4ICV4ICVzXG4gIixhc3NpZ25pZF9tYXAsbWJ1ZlswXSxtYnVmWzFdLCZtYnVmWzJdKTsgKi8KIAlpID0gMTU7CiAJaiA9IG1idWZbMF07Ci0JaWYgKChqICYgMHgyMCkgIT0gMCkgewkvKiBiaXQ1PTE6SUQgdXB0byA3ICAgICAgKi8KKwlpZiAoKGogJiAweDIwKSAhPSAwKSB7CS8qIGJpdDU9MTpJRCB1cCB0byA3ICAgICAgKi8KIAkJaSA9IDc7CiAJfQogCWlmICgoaiAmIDB4MDYpID09IDApIHsJLyogSUR2YWxpZD8gICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCmluZGV4IDUyMThkZTQuLmZiZDFkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaApAQCAtODc3LDcgKzg3Nyw3IEBACiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9QRFVfU0laRV9FWENFRURTX0RTTCAzCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCiAJCQkJCQkgKiBpbnRlcm5hbGx5Ci0JCQkJCQkgKiBkdWUgdG8gYSByZWNpZXZlZCBQRFUKKwkJCQkJCSAqIGR1ZSB0byBhIHJlY2VpdmVkIFBEVQogCQkJCQkJICogc2l6ZSA+IERTTAogCQkJCQkJICovCiAjZGVmaW5lIENYTl9LSUxMRURfQlVSU1RfTEVOX01JU01BVENIICAgNAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZApAQCAtODg2LDcgKzg4Niw3IEBACiAJCQkJCQkgKiBGQkwvTUJMLgogCQkJCQkJICovCiAjZGVmaW5lIENYTl9LSUxMRURfQUhTX1JDVkQJCTUJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKLQkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjZWl2ZWQKIAkJCQkJCSAqIFBEVSBIZHIgdGhhdCBoYXMKIAkJCQkJCSAqIEFIUyAqLwogI2RlZmluZSBDWE5fS0lMTEVEX0hEUl9ESUdFU1RfRVJSCTYJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKQEAgLTg5OSwxMiArODk5LDEyIEBACiAJCQkJCQkgKiBwZHUgaGRyCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9TVEFMRV9JVFRfVFRUX1JDVkQJOAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAotCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNlaXZlZAogCQkJCQkJICogSVRUL1RUVCB0aGF0IGRvZXMgbm90IGJlbG9uZwogCQkJCQkJICogdG8gdGhpcyBDb25uZWN0aW9uCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9JTlZBTElEX0lUVF9UVFRfUkNWRCA5CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCi0JCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpZXZlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gcmVjZWl2ZWQKIAkJCQkJCSAqIElUVC9UVFQgdmFsdWUgPiBNYXgKIAkJCQkJCSAqIFN1cHBvcnRlZCBJVFRzL1RUVHMKIAkJCQkJCSAqLwpAQCAtOTM2LDIxICs5MzYsMjEgQEAKIAkJCQkJCSAqIGluZGV4LgogCQkJCQkJICovCiAjZGVmaW5lIENYTl9LSUxMRURfT1ZFUl9SVU5fUkVTSURVQUwJMTYJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKLQkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2VpdmVkCiAJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbAogCQkJCQkJICogb3ZlciBydW4gYnl0ZXMuCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9VTkRFUl9SVU5fUkVTSURVQUwJMTcJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKLQkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2VpdmVkCiAJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbCB1bmRlcgogCQkJCQkJICogcnVuIGJ5dGVzLgogCQkJCQkJICovCiAjZGVmaW5lIENNRF9LSUxMRURfSU5WQUxJRF9TVEFUU05fUkNWRAkxOAkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAotCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNlaXZlZAogCQkJCQkJICogUERVIGhhcyBhbiBpbnZhbGlkIFN0YXR1c1NOCiAJCQkJCQkgKi8KICNkZWZpbmUgQ01EX0tJTExFRF9JTlZBTElEX1IyVF9SQ1ZECTE5CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCi0JCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2VpdmVkCiAJCQkJCQkgKiBhbiBSMlQgd2l0aCBzb21lIGludmFsaWQKIAkJCQkJCSAqIGZpZWxkcyBpbiBpdAogCQkJCQkJICovCkBAIC05NzMsNyArOTczLDcgQEAKIAkJCQkJCSAqLwogI2RlZmluZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEIDI0CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCiAJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhCi0JCQkJCQkgKiByZWNpZXZlZCBQRFUgaGFzIGFuIGludmFsaWQKKwkJCQkJCSAqIHJlY2VpdmVkIFBEVSBoYXMgYW4gaW52YWxpZAogCQkJCQkJICogRGF0YVNOCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0lOVkFMSURBVEVfTk9USUZZCQkyNQkvKiBDb25uZWN0aW9uIGludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCmluZGV4IDFjZDVjOGIuLjkxODM4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJLyoKIAkJCSAqIEVSUl9QU1MgYml0IG5lZWRzIHRvIGJlIGNsZWFyZWQgYXMgd2VsbCBpbiBjYXNlCiAJCQkgKiBpbnRlcnJ1cHMgYXJlIHNoYXJlZCBzbyBkcml2ZXIncyBpbnRlcnJ1cHQgaGFuZGxlciBpcwotCQkJICogc3RpbGwgY2FsbGVkIGV2ZW50aG91Z2ggaXQgaXMgYWxyZWFkeSBtYXNrZWQgb3V0LgorCQkJICogc3RpbGwgY2FsbGVkIGV2ZW4gdGhvdWdoIGl0IGlzIGFscmVhZHkgbWFza2VkIG91dC4KIAkJCSAqLwogCQkJY3Vycl92YWx1ZSA9IHJlYWRsKAogCQkJCQliZmEtPmlvYy5pb2NfcmVncy5wc3NfZXJyX3N0YXR1c19yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmc19zdmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnNfc3ZjLmgKaW5kZXggNjQ4Yzg0MS4uMjA3ZjU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmc19zdmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kZWZzX3N2Yy5oCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAl1MzIJaW9oX2RhdGFfb29yX2V2ZW50OwkvKiAgRGF0YSBvdXQgb2YgcmFuZ2UgKi8KIAl1MzIJaW9oX3JvX29vb19ldmVudDsJLyogIFJlbGF0aXZlIG9mZnNldCBvdXQgb2YgcmFuZ2UgKi8KIAl1MzIJaW9oX2NwdV9vd25lZF9ldmVudDsJLyogIElPSCBoaXQgLWlvc3Qgb3duZWQgYnkgZi93ICovCi0JdTMyCWlvaF91bmV4cF9mcmFtZV9ldmVudDsJLyogIHVuZXhwZWN0ZWQgZnJhbWUgcmVjaWV2ZWQKKwl1MzIJaW9oX3VuZXhwX2ZyYW1lX2V2ZW50OwkvKiAgdW5leHBlY3RlZCBmcmFtZSByZWNlaXZlZAogCQkJCQkJICogICBjb3VudCAqLwogCXUzMglpb2hfZXJyX2ludDsJCS8qICBJT0ggZXJyb3IgaW50IGR1cmluZyBkYXRhLXBoYXNlCiAJCQkJCQkgKiAgIGZvciBzY3NpIHdyaXRlCkBAIC01NjYsOCArNTY2LDggQEAKIAl1MzIJaW5wdXRfcmVxczsJCS8qICBEYXRhIGluLWJvdW5kIHJlcXVlc3RzCSovCiAJdTMyCW91dHB1dF9yZXFzOwkJLyogIERhdGEgb3V0LWJvdW5kIHJlcXVlc3RzCSovCiAJdTMyCWlvX2NvbXBzOwkJLyogIFRvdGFsIElPIENvbXBsZXRpb25zCSovCi0JdTMyCXdyX3Rocm91Z2hwdXQ7CQkvKiAgV3JpdGUgZGF0YSB0cmFuc2ZlcmVkIGluIGJ5dGVzICovCi0JdTMyCXJkX3Rocm91Z2hwdXQ7CQkvKiAgUmVhZCBkYXRhIHRyYW5zZmVyZWQgaW4gYnl0ZXMgICovCisJdTMyCXdyX3Rocm91Z2hwdXQ7CQkvKiAgV3JpdGUgZGF0YSB0cmFuc2ZlcnJlZCBpbiBieXRlcyAqLworCXUzMglyZF90aHJvdWdocHV0OwkJLyogIFJlYWQgZGF0YSB0cmFuc2ZlcnJlZCBpbiBieXRlcyAgKi8KIAogCXUzMglpb2NvbXBfb2s7CQkvKiAgU2xvd3BhdGggSU8gY29tcGxldGlvbnMJKi8KIAl1MzIJaW9jb21wX3VuZGVycnVuOwkvKiAgSU8gdW5kZXJydW4JCSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmMuaAppbmRleCA4ZTc2NGZhLi5iZjAwNjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjLmgKQEAgLTMxNSw3ICszMTUsNyBAQAogCQkJcXVlcnlfZGJjOjEsCiAJCQloZ19zdXBwOjE7CiAjZW5kaWYKLQlfX2JlMTYJCXJ4c3o7CQkvKiByZWNpZXZlIGRhdGFfZmllbGQgc2l6ZSAqLworCV9fYmUxNgkJcnhzejsJCS8qIHJlY2VpdmUgZGF0YV9maWVsZCBzaXplICovCiAJX19iZTE2CQljb25zZXE7CiAJX19iZTE2CQlyb19iaXRtYXA7CiAJX19iZTMyCQllX2RfdG92OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYwppbmRleCBmNjc0ZjkzLi45YjQzY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYwpAQCAtMTAzMyw3ICsxMDMzLDcgQEAKIAogCiAvKgotICogTG9va3VwIGZvciBhIHZwb3J0IHdpdGhpbmcgYSBmYWJyaWMgZ2l2ZW4gaXRzIHB3d24KKyAqIExvb2t1cCBmb3IgYSB2cG9ydCB3aXRoaW4gYSBmYWJyaWMgZ2l2ZW4gaXRzIHB3d24KICAqLwogc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqCiBiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgd3duX3QgcHd3bikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKaW5kZXggMGZkNjMxNi4uNjFjZGNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKQEAgLTcwNSw3ICs3MDUsNyBAQAogCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UgPSAxNSwgLyogIFJwb3J0J3MgUElEIGhhcyBjaGFuZ2VkICAgICAqLwogCVJQU01fRVZFTlRfQUREUkVTU19ESVNDID0gMTYsICAgLyogIE5lZWQgdG8gRGlzY292ZXIgcnBvcnQncyBQSUQgKi8KIAlSUFNNX0VWRU5UX1BSTE9fUkNWRCAgID0gMTcsICAgIC8qICBQUkxPIGZyb20gcmVtb3RlIGRldmljZSAgICAgKi8KLQlSUFNNX0VWRU5UX1BMT0dJX1JFVFJZID0gMTgsICAgIC8qICBSZXRyeSBQTE9HSSBjb250aW5vdXNseSAqLworCVJQU01fRVZFTlRfUExPR0lfUkVUUlkgPSAxOCwgICAgLyogIFJldHJ5IFBMT0dJIGNvbnRpbnVvdXNseSAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMKaW5kZXggNDNmYTk4NmIuLjFkNmJlOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIEZvciBhIGJhc2UgcG9ydCwgd2Ugc2hvdWxkIGZpcnN0IHJlZ2lzdGVyIHRoZSBIQkEKLQkJCSAqIGF0cmlidXRlLiBUaGUgSEJBIGF0dHJpYnV0ZSBhbHNvIGNvbnRhaW5zIHRoZSBiYXNlCisJCQkgKiBhdHRyaWJ1dGUuIFRoZSBIQkEgYXR0cmlidXRlIGFsc28gY29udGFpbnMgdGhlIGJhc2UKIAkJCSAqICBwb3J0IHJlZ2lzdHJhdGlvbi4KIAkJCSAqLwogCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYwppbmRleCAxZDM0OTIxLi4xNmQ5YTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYwpAQCAtMTAzNSw3ICsxMDM1LDcgQEAKICAqIEBwYXJhbVtpbl0JcnBvcnQJQkZBIHJwb3J0IHBvaW50ZXIuIENvdWxkIGJlIGxlZnQgTlVMTCBmb3IgV0tBIHJwb3J0cwogICogQHBhcmFtW2luXQl2Zl9pZAl2aXJ0dWFsIEZhYnJpYyBJRAogICogQHBhcmFtW2luXQlscF90YWcJbHBvcnQgdGFnCi0gKiBAcGFyYW1baW5dCWN0cwl1c2UgQ29udGlub3VzIHNlcXVlbmNlCisgKiBAcGFyYW1baW5dCWN0cwl1c2UgQ29udGludW91cyBzZXF1ZW5jZQogICogQHBhcmFtW2luXQljb3MJZmMgQ2xhc3Mgb2YgU2VydmljZQogICogQHBhcmFtW2luXQlyZXFsZW4JcmVxdWVzdCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgRkNIUyBsZW5ndGgKICAqIEBwYXJhbVtpbl0JZmNocwlmYyBIZWFkZXIgUG9pbnRlci4gVGhlIGhlYWRlciBjb250ZW50IHdpbGwgYmUgY29waWVkCkBAIC01MDIyLDcgKzUwMjIsNyBAQAogfQogCiAvKgotICogUmVnaXN0ZXIgaGFuZGxlciBmb3IgYWxsIHVuc29saWN0ZWQgcmVjaWV2ZSBmcmFtZXMuCisgKiBSZWdpc3RlciBoYW5kbGVyIGZvciBhbGwgdW5zb2xpY3RlZCByZWNlaXZlIGZyYW1lcy4KICAqCiAgKiBAcGFyYW1baW5dCWJmYQkJQkZBIGluc3RhbmNlCiAgKiBAcGFyYW1baW5dCXVmcmVjdglyZWNlaXZlIGhhbmRsZXIgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmgKaW5kZXggMzMxYWQ5OS4uNTkwMmE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmgKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQkJCQkgKiBycG9ydCBuZXh1cyBpcyBlc3RhYmxpc2hlZAogCQkJCQkgKi8KIAlzdHJ1Y3QgZmNoc19zCWZjaHM7CS8qICByZXF1ZXN0IEZDIGhlYWRlciBzdHJ1Y3R1cmUgKi8KLQl1OAkJY3RzOwkvKiAgY29udGlub3VzIHNlcXVlbmNlICovCisJdTgJCWN0czsJLyogIGNvbnRpbnVvdXMgc2VxdWVuY2UgKi8KIAl1OAkJY2xhc3M7CS8qICBGQyBjbGFzcyBmb3IgdGhlIHJlcXVlc3QvcmVzcG9uc2UgKi8KIAl1MTYJbWF4X2ZybXN6OwkvKiAgbWF4IHNlbmQgZnJhbWUgc2l6ZSAqLwogCXUxNgl2Zl9pZDsJLyogIHZzYW4gdGFnIGlmIGFwcGxpY2FibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKaW5kZXggNDQ1MjRjZi4uMGZkNTEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKQEAgLTEyNzgsNyArMTI3OCw3IEBACiAJCQkgKiBpbnRlcnJ1cHRzIGludG8gb25lIHZlY3Rvciwgc28gZXZlbiBpZiB3ZQogCQkJICogY2FuIHRyeSB0byByZXF1ZXN0IGxlc3MgdmVjdG9ycywgd2UgZG9uJ3QKIAkJCSAqIGtub3cgaG93IHRvIGFzc29jaWF0ZSBpbnRlcnJ1cHQgZXZlbnRzIHRvCi0JCQkgKiAgdmVjdG9ycy4gTGludXggZG9lc24ndCBkdXBpY2F0ZSB2ZWN0b3JzCisJCQkgKiAgdmVjdG9ycy4gTGludXggZG9lc24ndCBkdXBsaWNhdGUgdmVjdG9ycwogCQkJICogaW4gdGhlIE1TSVggdGFibGUgZm9yIHRoaXMgY2FzZS4KIAkJCSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjLzU3eHhfaHNpX2JueDJmYy5oIGIvZHJpdmVycy9zY3NpL2JueDJmYy81N3h4X2hzaV9ibngyZmMuaAppbmRleCA2OWQwMzFkLi45N2E2MWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjLzU3eHhfaHNpX2JueDJmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvNTd4eF9oc2lfYm54MmZjLmgKQEAgLTg5OCw3ICs4OTgsNyBAQAogCiAKIC8qCi0gKiBGQ29FIGNvbmVjdGlvbiBkYXRhIGJhc2UKKyAqIEZDb0UgY29ubmVjdGlvbiBkYXRhIGJhc2UKICAqLwogc3RydWN0IGZjb2VfY29ubl9kYiB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCmluZGV4IDdhMTFhMjUuLjUyYzM1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJCSAgICAgJmVsc19yZXEtPnJlcV9mbGFncykpIHsKIAkJQk5YMkZDX0VMU19EQkcoIlRpbWVyIGNvbnRleHQgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGlzICIKIAkJCSAgICJlbHMgLSAweCV4XG4iLCBlbHNfcmVxLT54aWQpOwotCQkvKiBUaGlzIElPIGRvZXNudCByZWNlaXZlIGNsZWFudXAgY29tcGxldGlvbiAqLworCQkvKiBUaGlzIElPIGRvZXNuJ3QgcmVjZWl2ZSBjbGVhbnVwIGNvbXBsZXRpb24gKi8KIAkJa3JlZl9wdXQoJmVsc19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKaW5kZXggZDNmYzMwMi4uMWRlY2VmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCkBAIC0xMjczLDcgKzEyNzMsNyBAQAogCQkJCQkJIGJueDJmY19jbWRfcmVsZWFzZSk7CiAJCQkJCQkJLyogdGltZXIgaG9sZCAqLwogCQkJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMoY21kKTsKLQkJCQkvKiBhYnRzIHNob3VsZG50IGZhaWwgaW4gdGhpcyBjb250ZXh0ICovCisJCQkJLyogYWJ0cyBzaG91bGRuJ3QgZmFpbCBpbiB0aGlzIGNvbnRleHQgKi8KIAkJCQlXQVJOX09OKHJjICE9IFNVQ0NFU1MpOwogCQkJfSBlbHNlCiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibHVuX3JzdDogYWJ0cyBhbHJlYWR5IGluIgpAQCAtMTMwOCw3ICsxMzA4LDcgQEAKIAkJCQlrcmVmX3B1dCgmaW9fcmVxLT5yZWZjb3VudCwKIAkJCQkJIGJueDJmY19jbWRfcmVsZWFzZSk7IC8qIHRpbWVyIGhvbGQgKi8KIAkJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMoY21kKTsKLQkJCS8qIGFidHMgc2hvdWxkbnQgZmFpbCBpbiB0aGlzIGNvbnRleHQgKi8KKwkJCS8qIGFidHMgc2hvdWxkbid0IGZhaWwgaW4gdGhpcyBjb250ZXh0ICovCiAJCQlXQVJOX09OKHJjICE9IFNVQ0NFU1MpOwogCiAJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfdGd0LmMgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY190Z3QuYwppbmRleCA3Y2MwNWU0Li5hMmUzODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY190Z3QuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY190Z3QuYwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJCXJwID0gcnBvcnQtPmRkX2RhdGE7CiAJCWlmIChycG9ydC0+cG9ydF9pZCA9PSBGQ19GSURfRElSX1NFUlYpIHsKIAkJCS8qCi0JCQkgKiBibngyZmNfcnBvcnQgc3RydWN0dXJlIGRvZXNudCBleGlzdCBmb3IKKwkJCSAqIGJueDJmY19ycG9ydCBzdHJ1Y3R1cmUgZG9lc24ndCBleGlzdCBmb3IKIAkJCSAqIGRpcmVjdG9yeSBzZXJ2ZXIuCiAJCQkgKiBXZSBzaG91bGQgbm90IGNvbWUgaGVyZSwgYXMgbHBvcnQgd2lsbAogCQkJICogdGFrZSBjYXJlIG9mIGZhYnJpYyBsb2dpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCmluZGV4IDFkYTM0YzAuLmYwYjg5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiAvKioKICAqIGJueDJpX2dldF9ycV9idWYgLSBjb3B5IFJRIGJ1ZmZlciBjb250ZW50cyB0byBkcml2ZXIgYnVmZmVyCi0gKiBAY29ubjoJCWlzY3NpIGNvbm5lY3Rpb24gb24gd2hpY2ggUlEgZXZlbnQgb2NjdXJlZAorICogQGNvbm46CQlpc2NzaSBjb25uZWN0aW9uIG9uIHdoaWNoIFJRIGV2ZW50IG9jY3VycmVkCiAgKiBAcHRyOgkJZHJpdmVyIGJ1ZmZlciB0byB3aGljaCBSUSBidWZmZXIgY29udGVudHMgaXMgdG8KICAqCQkJYmUgY29waWVkCiAgKiBAbGVuOgkJbGVuZ3RoIG9mIHZhbGlkIGRhdGEgaW5zaWRlIFJRIGJ1ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmggYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaAppbmRleCAwYTIwZmQ1Li45MjY3ODQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaAorKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaApAQCAtMjYyLDkgKzI2Miw5IEBACiBlbnVtIGN4Z2JpX3NrY2JfZmxhZ3MgewogCVNLQ0JGX1RYX05FRURfSERSLAkvKiBwYWNrZXQgbmVlZHMgYSBoZWFkZXIgKi8KIAlTS0NCRl9SWF9DT0FMRVNDRUQsCS8qIHJlY2VpdmVkIHdob2xlIHBkdSAqLwotCVNLQ0JGX1JYX0hEUiwJCS8qIHJlY2lldmVkIHBkdSBoZWFkZXIgKi8KLQlTS0NCRl9SWF9EQVRBLAkJLyogcmVjaWV2ZWQgcGR1IHBheWxvYWQgKi8KLQlTS0NCRl9SWF9TVEFUVVMsCS8qIHJlY2lldmVkIGRkcCBzdGF0dXMgKi8KKwlTS0NCRl9SWF9IRFIsCQkvKiByZWNlaXZlZCBwZHUgaGVhZGVyICovCisJU0tDQkZfUlhfREFUQSwJCS8qIHJlY2VpdmVkIHBkdSBwYXlsb2FkICovCisJU0tDQkZfUlhfU1RBVFVTLAkvKiByZWNlaXZlZCBkZHAgc3RhdHVzICovCiAJU0tDQkZfUlhfREFUQV9ERFBELAkvKiBwZHUgcGF5bG9hZCBkZHAnZCAqLwogCVNLQ0JGX1JYX0hDUkNfRVJSLAkvKiBoZWFkZXIgZGlnZXN0IGVycm9yICovCiAJU0tDQkZfUlhfRENSQ19FUlIsCS8qIGRhdGEgZGlnZXN0IGVycm9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMgYi9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKaW5kZXggYjBmODUyMy4uYjEwYjM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RjMzk1eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIAl1OCBzZ19jb3VudDsJCQkvKiBObyBvZiBIVyBzZyBlbnRyaWVzIGZvciB0aGlzIHJlcXVlc3QgKi8KIAl1OCBzZ19pbmRleDsJCQkvKiBJbmRleCBvZiBIVyBzZyBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCi0Jc2l6ZV90IHRvdGFsX3hmZXJfbGVuZ3RoOwkvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHRyYW5zZmVyZWQgKi8KKwlzaXplX3QgdG90YWxfeGZlcl9sZW5ndGg7CS8qIFRvdGFsIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgdG8gYmUgdHJhbnNmZXJyZWQgKi8KIAlzaXplX3QgcmVxdWVzdF9sZW5ndGg7CQkvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyByZXF1ZXN0ICovCiAJLyoKIAkgKiBUaGUgc2Vuc2UgYnVmZmVyIGhhbmRsaW5nIGZ1bmN0aW9uLCByZXF1ZXN0X3NlbnNlLCB1c2VzCkBAIC0xNzc0LDcgKzE3NzQsNyBAQAogCQlkYzM5NXhfc3RhdGV2KGFjYiwgc3JiLCAmc2NzaV9zdGF0dXMpOwogCiAJCS8qIAotCQkgKiBpZiB0aGVyZSB3ZXJlIGFueSBleGNlcHRpb24gb2NjdXJlZCBzY3NpX3N0YXR1cworCQkgKiBpZiB0aGVyZSB3ZXJlIGFueSBleGNlcHRpb24gb2NjdXJyZWQgc2NzaV9zdGF0dXMKIAkJICogd2lsbCBiZSBtb2RpZnkgdG8gYnVzIGZyZWUgcGhhc2UgbmV3IHNjc2lfc3RhdHVzCiAJCSAqIHRyYW5zZmVyIG91dCBmcm9tIC4uLiBwcmV2aW91cyBkYzM5NXhfc3RhdGV2CiAJCSAqLwpAQCAtMTk1NCwxMSArMTk1NCwxMSBAQAogc3RhdGljIHZvaWQgc2dfdXBkYXRlX2xpc3Qoc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwgdTMyIGxlZnQpCiB7CiAJdTggaWR4OwotCXUzMiB4ZmVycmVkID0gc3JiLT50b3RhbF94ZmVyX2xlbmd0aCAtIGxlZnQ7IC8qIGJ5dGVzIHRyYW5zZmVyZWQgKi8KKwl1MzIgeGZlcnJlZCA9IHNyYi0+dG90YWxfeGZlcl9sZW5ndGggLSBsZWZ0OyAvKiBieXRlcyB0cmFuc2ZlcnJlZCAqLwogCXN0cnVjdCBTR2VudHJ5ICpwc2dlID0gc3JiLT5zZWdtZW50X3ggKyBzcmItPnNnX2luZGV4OwogCiAJZHByaW50a2RiZyhEQkdfMCwKLQkJInNnX3VwZGF0ZV9saXN0OiBUcmFuc2ZlcmVkICVpIG9mICVpIGJ5dGVzLCAlaSByZW1haW5cbiIsCisJCSJzZ191cGRhdGVfbGlzdDogVHJhbnNmZXJyZWQgJWkgb2YgJWkgYnl0ZXMsICVpIHJlbWFpblxuIiwKIAkJeGZlcnJlZCwgc3JiLT50b3RhbF94ZmVyX2xlbmd0aCwgbGVmdCk7CiAJaWYgKHhmZXJyZWQgPT0gMCkgewogCQkvKiBub3RoaW5nIHRvIHVwZGF0ZSBzaW5jZSB3ZSBkaWQgbm90IHRyYW5zZmVyIGFueSBkYXRhICovCkBAIC0xOTkwLDcgKzE5OTAsNyBAQAogCiAKIC8qCi0gKiBXZSBoYXZlIHRyYW5zZmVyZWQgYSBzaW5nbGUgYnl0ZSAoUElPIG1vZGU/KSBhbmQgbmVlZCB0byB1cGRhdGUKKyAqIFdlIGhhdmUgdHJhbnNmZXJyZWQgYSBzaW5nbGUgYnl0ZSAoUElPIG1vZGU/KSBhbmQgbmVlZCB0byB1cGRhdGUKICAqIHRoZSBjb3VudCBvZiBieXRlcyByZW1haW5pbmcgKHRvdGFsX3hmZXJfbGVuZ3RoKSBhbmQgdXBkYXRlIHRoZSBzZwogICogZW50cnkgdG8gZWl0aGVyIHBvaW50IHRvIG5leHQgYnl0ZSBpbiB0aGUgY3VycmVudCBzZyBlbnRyeSwgb3Igb2YKICAqIGFscmVhZHkgYXQgdGhlIGVuZCB0byBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2cgZW50cnkKQEAgLTIwMjksNyArMjAyOSw3IEBACiAKIAogLyoKLSAqIFRob3NlIG5vIG9mIGJ5dGVzIHdpbGwgYmUgdHJhbnNmZXJlZCB3LyBQSU8gdGhyb3VnaCB0aGUgU0NTSSBGSUZPCisgKiBUaG9zZSBubyBvZiBieXRlcyB3aWxsIGJlIHRyYW5zZmVycmVkIHcvIFBJTyB0aHJvdWdoIHRoZSBTQ1NJIEZJRk8KICAqIFNlZW1zIHRvIGJlIG5lZWRlZCBmb3IgdW5rbm93biByZWFzb25zOyBjb3VsZCBiZSBhIGhhcmR3YXJlIGJ1ZyA6LSgKICAqLwogI2RlZmluZSBEQzM5NXhfTEFTVFBJTyA0CkBAIC0yMjU2LDcgKzIyNTYsNyBAQAogCQkJREMzOTV4X3JlYWQzMihhY2IsIFRSTV9TMTA0MF9ETUFfQ1hDTlQpLAogCQkJc3JiLT50b3RhbF94ZmVyX2xlbmd0aCwgZF9sZWZ0X2NvdW50ZXIpOwogI2lmIERDMzk1eF9MQVNUUElPCi0JCS8qIEtHOiBMZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBieXRlcyBjYW4gbm90IGJlIHRyYW5zZmVyZWQgdmlhIERNQSwgaXQgc2VlbXMuICovCisJCS8qIEtHOiBMZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBieXRlcyBjYW4gbm90IGJlIHRyYW5zZmVycmVkIHZpYSBETUEsIGl0IHNlZW1zLiAqLwogCQlpZiAoZF9sZWZ0X2NvdW50ZXIKIAkJICAgICYmIHNyYi0+dG90YWxfeGZlcl9sZW5ndGggPD0gREMzOTV4X0xBU1RQSU8pIHsKIAkJCXNpemVfdCBsZWZ0X2lvID0gc3JiLT50b3RhbF94ZmVyX2xlbmd0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kYzM5NXguaCBiL2RyaXZlcnMvc2NzaS9kYzM5NXguaAppbmRleCBiMzgzNjBlLi5mYmYzNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmgKKysrIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5oCkBAIC02MTcsNyArNjE3LDcgQEAKICNkZWZpbmUgTlRDX0RPX1NFTkRfU1RBUlQJCTB4MDgJLyogU2VuZCBzdGFydCBjb21tYW5kIFNQSU5VUAkJKi8KICNkZWZpbmUgTlRDX0RPX0RJU0NPTk5FQ1QJCTB4MDQJLyogRW5hYmxlIFNDU0kgZGlzY29ubmVjdAkJKi8KICNkZWZpbmUgTlRDX0RPX1NZTkNfTkVHTwkJMHgwMgkvKiBTeW5jIG5lZ290aWF0aW9uCQkJKi8KLSNkZWZpbmUgTlRDX0RPX1BBUklUWV9DSEsJCTB4MDEJLyogKGl0IHNvdWxkIGRlZmluZSBhdCBOQUMpCQkqLworI2RlZmluZSBOVENfRE9fUEFSSVRZX0NISwkJMHgwMQkvKiAoaXQgc2hvdWxkIGRlZmluZSBhdCBOQUMpCQkqLwogCQkJCQkJLyogUGFyaXR5IGNoZWNrIGVuYWJsZQkJCSovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwppbmRleCA1NjRlNmVjLi4wMTE5YjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKQEAgLTM5NCwxMiArMzk0LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKnNjc2lfZGggPSBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJc2RldiA9IHEtPnF1ZXVlZGF0YTsKIAlpZiAoc2RldiAmJiBzZGV2LT5zY3NpX2RoX2RhdGEpCiAJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7Ci0JaWYgKCFzY3NpX2RoIHx8ICFnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldikgfHwKKwlkZXYgPSBnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJaWYgKCFzY3NpX2RoIHx8ICFkZXYgfHwKIAkgICAgc2Rldi0+c2Rldl9zdGF0ZSA9PSBTREVWX0NBTkNFTCB8fAogCSAgICBzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfREVMKQogCQllcnIgPSBTQ1NJX0RIX05PU1lTOwpAQCAtNDEwLDEyICs0MTIsMTMgQEAKIAlpZiAoZXJyKSB7CiAJCWlmIChmbikKIAkJCWZuKGRhdGEsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChzY3NpX2RoLT5hY3RpdmF0ZSkKIAkJZXJyID0gc2NzaV9kaC0+YWN0aXZhdGUoc2RldiwgZm4sIGRhdGEpOwotCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKK291dDoKKwlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZGhfYWN0aXZhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IDdjYWUwYmMuLjQyZmU1MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTU0MSw3ICs1NDEsNyBAQAogICoKICAqIEV2YWx1YXRlIHRoZSBUYXJnZXQgUG9ydCBHcm91cCBTdGF0ZS4KICAqIFJldHVybnMgU0NTSV9ESF9ERVZfT0ZGTElORUQgaWYgdGhlIHBhdGggaXMKLSAqIGZvdW5kIHRvIGJlIHVudXNlYWJsZS4KKyAqIGZvdW5kIHRvIGJlIHVudXNhYmxlLgogICovCiBzdGF0aWMgaW50IGFsdWFfcnRwZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBhbHVhX2RoX2RhdGEgKmgpCiB7CkBAIC02MjAsNyArNjIwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBUUEdTX1NUQVRFX09GRkxJTkU6CiAJY2FzZSBUUEdTX1NUQVRFX1VOQVZBSUxBQkxFOgotCQkvKiBQYXRoIHVudXNlYWJsZSBmb3IgdW5hdmFpbGFibGUvb2ZmbGluZSAqLworCQkvKiBQYXRoIHVudXNhYmxlIGZvciB1bmF2YWlsYWJsZS9vZmZsaW5lICovCiAJCWVyciA9IFNDU0lfREhfREVWX09GRkxJTkVEOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdC9zeXNfaW5mby5oIGIvZHJpdmVycy9zY3NpL2RwdC9zeXNfaW5mby5oCmluZGV4IGE5MGM0Y2IuLmE0YWExYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHQvc3lzX2luZm8uaAorKysgYi9kcml2ZXJzL3Njc2kvZHB0L3N5c19pbmZvLmgKQEAgLTc5LDkgKzc5LDkgQEAKICAgIHR5cGVkZWYgc3RydWN0ICB7CiAjZW5kaWYKIAotICAgdVNIT1JUICAgICAgIGN5bGluZGVyczsgICAgICAvKiBVcHRvIDEwMjQgKi8KLSAgIHVDSEFSICAgICAgICBoZWFkczsgICAgICAgICAgLyogVXB0byAyNTUgKi8KLSAgIHVDSEFSICAgICAgICBzZWN0b3JzOyAgICAgICAgLyogVXB0byA2MyAqLworICAgdVNIT1JUICAgICAgIGN5bGluZGVyczsgICAgICAvKiBVcCB0byAxMDI0ICovCisgICB1Q0hBUiAgICAgICAgaGVhZHM7ICAgICAgICAgIC8qIFVwIHRvIDI1NSAqLworICAgdUNIQVIgICAgICAgIHNlY3RvcnM7ICAgICAgICAvKiBVcCB0byA2MyAqLwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9lYXRhLmMgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCmluZGV4IDUzOTI1YWMuLjBlYjRmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lYXRhLmMKKysrIGIvZHJpdmVycy9zY3NpL2VhdGEuYwpAQCAtNjMsNyArNjMsNyBAQAogICogICAgICAgICAgZXA6W3l8bl0gICAgICBlaXNhX3Byb2JlPVsxfDBdICBDT05GSUdfRUlTQSBkZWZpbmVkCiAgKiAgICAgICAgICBwcDpbeXxuXSAgICAgIHBjaV9wcm9iZT1bMXwwXSAgIENPTkZJR19QQ0kgIGRlZmluZWQKICAqCi0gKiAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcGVyZm9ybSBwcm9iaW5nIGlmIHRoZSBjb3JyaXNwb25kaW5nCisgKiAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcGVyZm9ybSBwcm9iaW5nIGlmIHRoZSBjb3JyZXNwb25kaW5nCiAgKiAgICAgICAgICBidXMgaXMgY29uZmlndXJlZCBhbmQgdG8gc2tpcCBwcm9iaW5nIG90aGVyd2lzZS4KICAqCiAgKiAgICAgICAgKyBJZiBwY2lfcHJvYmUgaXMgaW4gZWZmZWN0IGFuZCBhIGxpc3Qgb2YgSS9PICBwb3J0cyBpcyBzcGVjaWZpZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2VfY3Rsci5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKaW5kZXggYzkzZjAwNy4uOWQzOGJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQkgKiBJZiBub24tRklQLCB3ZSBtYXkgaGF2ZSBnb3R0ZW4gYW4gU0lEIGJ5IGFjY2VwdGluZyBhbiBGTE9HSQogCQkgKiBmcm9tIGEgcG9pbnQtdG8tcG9pbnQgY29ubmVjdGlvbi4gIFN3aXRjaCB0byB1c2luZwogCQkgKiB0aGUgc291cmNlIG1hYyBiYXNlZCBvbiB0aGUgU0lELiAgVGhlIGRlc3RpbmF0aW9uCi0JCSAqIE1BQyBpbiB0aGlzIGNhc2Ugd291bGQgaGF2ZSBiZWVuIHNldCBieSByZWNldmluZyB0aGUKKwkJICogTUFDIGluIHRoaXMgY2FzZSB3b3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlY2VpdmluZyB0aGUKIAkJICogRkxPR0kuCiAJCSAqLwogCQlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfTk9OX0ZJUCkgewpAQCAtMTg3Niw3ICsxODc2LDcgQEAKICAqIGZjb2VfY3Rscl92bl9ycG9ydF9jYWxsYmFjayAtIEV2ZW50IGhhbmRsZXIgZm9yIHJwb3J0IGV2ZW50cy4KICAqIEBscG9ydDogVGhlIGxwb3J0IHdoaWNoIGlzIHJlY2VpdmluZyB0aGUgZXZlbnQKICAqIEByZGF0YTogcmVtb3RlIHBvcnQgcHJpdmF0ZSBkYXRhCi0gKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VyZWQKKyAqIEBldmVudDogVGhlIGV2ZW50IHRoYXQgb2NjdXJyZWQKICAqCiAgKiBMb2NraW5nIE5vdGU6ICBUaGUgcnBvcnQgbG9jayBtdXN0IG5vdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmRvbWFpbi5jIGIvZHJpdmVycy9zY3NpL2Zkb21haW4uYwppbmRleCA2OWI3YWE1Li42NDNmNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmRvbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9mZG9tYWluLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogIEZ1dHVyZSBEb21haW4gc29sZCBET1MgQklPUyBzb3VyY2UgZm9yICQyNTAgYW5kIHRoZSBVTipYIGRyaXZlciBzb3VyY2Ugd2FzCiAgJDc1MCwgYnV0IHRoZXNlIHJlcXVpcmVkIGEgbm9uLWRpc2Nsb3N1cmUgYWdyZWVtZW50LCBzbyBldmVuIGlmIEkgY291bGQKICBoYXZlIGFmZm9yZGVkIHRoZW0sIHRoZXkgd291bGQgKm5vdCogaGF2ZSBiZWVuIHVzZWZ1bCBmb3Igd3JpdGluZyB0aGlzCi0gcHVibGljYWxseSBkaXN0cmlidXRhYmxlIGRyaXZlci4gIEZ1dHVyZSBEb21haW4gdGVjaG5pY2FsIHN1cHBvcnQgaGFzCisgcHVibGljbHkgZGlzdHJpYnV0YWJsZSBkcml2ZXIuICBGdXR1cmUgRG9tYWluIHRlY2huaWNhbCBzdXBwb3J0IGhhcwogIHByb3ZpZGVkIHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIHBob25lIGFuZCBoYXZlIHNlbnQgYSBmZXcgdXNlZnVsIEZBWHMuCiAgVGhleSBoYXZlIGJlZW4gbXVjaCBtb3JlIGhlbHBmdWwgc2luY2UgdGhleSBzdGFydGVkIHRvIHJlY29nbml6ZSB0aGF0IHRoZQogIHdvcmQgIkxpbnV4IiByZWZlcnMgdG8gYW4gb3BlcmF0aW5nIHN5c3RlbSA6LSkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19mY3MuYwppbmRleCAyYjQ4ZDc5Li4zYzUzYzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCQkJZXJyID0gdm5pY19ycV9maWxsKCZmbmljLT5ycVtpXSwgZm5pY19hbGxvY19ycV9mcmFtZSk7CiAJCQlpZiAoZXJyKQogCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZm5pYy0+bHBvcnQtPmhvc3QsCi0JCQkJCSAgICAgImZuaWNfYWxsb2NfcnFfZnJhbWUgY2FudCBhbGxvYyIKKwkJCQkJICAgICAiZm5pY19hbGxvY19ycV9mcmFtZSBjYW4ndCBhbGxvYyIKIAkJCQkJICAgICAiIGZyYW1lXG4iKTsKIAkJfQogCQl0b3RfcnFfd29ya19kb25lICs9IGN1cl93b3JrX2RvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCmluZGV4IDIyZDAyNDAuLjUzOGIzMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCQkJCQkgICAgZmNfbHVuLnNjc2lfbHVuLCBpb19yZXEpKSB7CiAJCQkvKgogCQkJICogUmV2ZXJ0IHRoZSBjbWQgc3RhdGUgYmFjayB0byBvbGQgc3RhdGUsIGlmCi0JCQkgKiBpdCBoYXNudCBjaGFuZ2VkIGluIGJldHdlZW4uIFRoaXMgY21kIHdpbGwgZ2V0CisJCQkgKiBpdCBoYXNuJ3QgY2hhbmdlZCBpbiBiZXR3ZWVuLiBUaGlzIGNtZCB3aWxsIGdldAogCQkJICogYWJvcnRlZCBsYXRlciBieSBzY3NpX2VoLCBvciBjbGVhbmVkIHVwIGR1cmluZwogCQkJICogbHVuIHJlc2V0CiAJCQkgKi8KQEAgLTEyMDgsNyArMTIwOCw3IEBACiAJCQkJCSAgICBmY19sdW4uc2NzaV9sdW4sIGlvX3JlcSkpIHsKIAkJCS8qCiAJCQkgKiBSZXZlcnQgdGhlIGNtZCBzdGF0ZSBiYWNrIHRvIG9sZCBzdGF0ZSwgaWYKLQkJCSAqIGl0IGhhc250IGNoYW5nZWQgaW4gYmV0d2Vlbi4gVGhpcyBjbWQgd2lsbCBnZXQKKwkJCSAqIGl0IGhhc24ndCBjaGFuZ2VkIGluIGJldHdlZW4uIFRoaXMgY21kIHdpbGwgZ2V0CiAJCQkgKiBhYm9ydGVkIGxhdGVyIGJ5IHNjc2lfZWgsIG9yIGNsZWFuZWQgdXAgZHVyaW5nCiAJCQkgKiBsdW4gcmVzZXQKIAkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCmluZGV4IDQyN2E1NmQuLjgxMTgyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKQEAgLTU2Niw3ICs1NjYsNyBAQAogICoJQGRzdDogYnVmZmVyIHRvIHJlYWQgaW50bwogICoJQGxlbjogYnVmZmVyIGxlbmd0aAogICoKLSAqCVBlcmZvcm0gYSBwc3VlZG8gRE1BIG1vZGUgcmVhZCBmcm9tIGFuIE5DUjUzQzQwMCBvciBlcXVpdmFsZW50CisgKglQZXJmb3JtIGEgcHNldWRvIERNQSBtb2RlIHJlYWQgZnJvbSBhbiBOQ1I1M0M0MDAgb3IgZXF1aXZhbGVudAogICoJY29udHJvbGxlcgogICovCiAgCkBAIC02NTAsNyArNjUwLDcgQEAKICAqCUBkc3Q6IGJ1ZmZlciB0byByZWFkIGludG8KICAqCUBsZW46IGJ1ZmZlciBsZW5ndGgKICAqCi0gKglQZXJmb3JtIGEgcHN1ZWRvIERNQSBtb2RlIHJlYWQgZnJvbSBhbiBOQ1I1M0M0MDAgb3IgZXF1aXZhbGVudAorICoJUGVyZm9ybSBhIHBzZXVkbyBETUEgbW9kZSByZWFkIGZyb20gYW4gTkNSNTNDNDAwIG9yIGVxdWl2YWxlbnQKICAqCWNvbnRyb2xsZXIKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5oIGIvZHJpdmVycy9zY3NpL2dkdGguaAppbmRleCAxMjBhMDYyLi5kOTY5ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmgKQEAgLTg5NSw3ICs4OTUsNyBAQAogICAgICAgICB1OCAgICAgICAgICBsZHJfbm87ICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIG5vLiAqLwogICAgICAgICB1OCAgICAgICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAvKiByL3cgYXR0cmlidXRlcyAqLwogICAgICAgICB1OCAgICAgICAgICBjbHVzdGVyX3R5cGU7ICAgICAgICAgICAvKiBjbHVzdGVyIHByb3BlcnRpZXMgKi8KLSAgICAgICAgdTggICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VyZWQgKi8KKyAgICAgICAgdTggICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VycmVkICovCiAgICAgICAgIHUzMiAgICAgICAgIHN0YXJ0X3NlYzsgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLwogICAgIH0gaGRyW01BWF9MRFJJVkVTXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZXMgKi8KICAgICBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2d2cDExLmMgYi9kcml2ZXJzL3Njc2kvZ3ZwMTEuYwppbmRleCAyY2UyNmViLi41MGJiNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ3ZwMTEuYworKysgYi9kcml2ZXJzL3Njc2kvZ3ZwMTEuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJLyoKIAkgKiBSdW1vcnMgc3RhdGUgdGhhdCBzb21lIEdWUCByYW0gYm9hcmRzIHVzZSB0aGUgc2FtZSBwcm9kdWN0CiAJICogY29kZSBhcyB0aGUgU0NTSSBjb250cm9sbGVycy4gVGhlcmVmb3JlIGlmIHRoZSBib2FyZC1zaXplCi0JICogaXMgbm90IDY0S0Igd2UgYXN1bWUgaXQgaXMgYSByYW0gYm9hcmQgYW5kIGJhaWwgb3V0LgorCSAqIGlzIG5vdCA2NEtCIHdlIGFzc3VtZSBpdCBpcyBhIHJhbSBib2FyZCBhbmQgYmFpbCBvdXQuCiAJICovCiAJaWYgKHpvcnJvX3Jlc291cmNlX2xlbih6KSAhPSAweDEwMDAwKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbW0uYyBiL2RyaXZlcnMvc2NzaS9pbW0uYwppbmRleCA5OWFhMGU1Li4yNmNkOWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW1tLmMKKysrIGIvZHJpdmVycy9zY3NpL2ltbS5jCkBAIC0zLDcgKzMsNyBAQAogICogCiAgKiAoVGhlIElNTSBpcyB0aGUgZW1iZWRkZWQgY29udHJvbGxlciBpbiB0aGUgWklQIFBsdXMgZHJpdmUuKQogICogCi0gKiBNeSB1bm9mZmljYWwgY29tcGFueSBhY3JvbnltIGxpc3QgaXMgMjEgcGFnZXMgbG9uZzoKKyAqIE15IHVub2ZmaWNpYWwgY29tcGFueSBhY3JvbnltIGxpc3QgaXMgMjEgcGFnZXMgbG9uZzoKICAqICAgICAgRkxBOiAgICBGb3VyIGxldHRlciBhY3JvbnltIHdpdGggYnVpbHQgaW4gZmFjaWxpdHkgZm9yCiAgKiAgICAgICAgICAgICAgZnV0dXJlIGV4cGFuc2lvbiB0byBmaXZlIGxldHRlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbml0aW8uYyBiL2RyaXZlcnMvc2NzaS9pbml0aW8uYwppbmRleCA5NjI3ZDA2Li5kZDc0MWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmMKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogc3RhdGljIHU4IGluaXRpb19yYXRlX3RibFs4XSA9CS8qIGZhc3QgMjAgICAgICAqLwogewotCQkJCS8qIG5hbm9zZWNvbmQgZGV2aWRlIGJ5IDQgKi8KKwkJCQkvKiBuYW5vc2Vjb25kIGRpdmlkZSBieSA0ICovCiAJMTIsCQkJLyogNTBucywgIDIwTSAgICovCiAJMTgsCQkJLyogNzVucywgIDEzLjNNICovCiAJMjUsCQkJLyogMTAwbnMsIDEwTSAgICovCkBAIC0xOTE3LDcgKzE5MTcsNyBAQAogfQogCiAvKioKLSAqCWludF9pbml0aW9fc2NzaV9yZXNlbAktCVJlc2VsZWN0aW9uIG9jY3VyZWQKKyAqCWludF9pbml0aW9fc2NzaV9yZXNlbAktCVJlc2VsZWN0aW9uIG9jY3VycmVkCiAgKglAaG9zdDogSW5pdElPIGhvc3QgYWRhcHRlcgogICoKICAqCUEgU0NTSSByZXNlbGVjdGlvbiBldmVudCBoYXMgYmVlbiBzaWduYWxsZWQgYW5kIHRoZSBpbnRlcnJ1cHQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbml0aW8uaCBiL2RyaXZlcnMvc2NzaS9pbml0aW8uaAppbmRleCBlNThhZjllLi4yMTliOTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmgKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5oCkBAIC0xMTYsNyArMTE2LDcgQEAKICNkZWZpbmUgVFVMX1NCdXNJZCAgICAgIDB4ODkJLyogMDkgUiAgIFNDU0kgQlVTIElEICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRVTF9TVGltZU91dCAgICAweDhBCS8qIDBBIFcgICBTZWwvUmVzZWwgVGltZSBPdXQgUmVnaXN0ZXIgICAqLwogI2RlZmluZSBUVUxfU0lkZW50ICAgICAgMHg4QQkvKiAwQSBSICAgSWRlbnRpZnkgTWVzc2FnZSBSZWdpc3RlciAgICAgKi8KLSNkZWZpbmUgVFVMX1NBdmFpbCAgICAgIDB4OEEJLyogMEEgUiAgIEF2YWlsaWFibGUgQ291bnRlciBSZWdpc3RlciAgICovCisjZGVmaW5lIFRVTF9TQXZhaWwgICAgICAweDhBCS8qIDBBIFIgICBBdmFpbGFibGUgQ291bnRlciBSZWdpc3RlciAgICovCiAjZGVmaW5lIFRVTF9TRGF0YSAgICAgICAweDhCCS8qIDBCIFIvVyBTQ1NJIGRhdGEgaW4vb3V0ICAgICAgICAgICAgICAqLwogI2RlZmluZSBUVUxfU0ZpZm8gICAgICAgMHg4QwkvKiAwQyBSL1cgRklGTyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVFVMX1NTaWduYWwgICAgIDB4OTAJLyogMTAgUi9XIFNDU0kgc2lnbmFsIGluL291dCAgICAgICAgICAgICovCkBAIC0zODksNyArMzg5LDcgQEAKIC8qIEJpdCBEZWZpbml0aW9uIGZvciBzdGF0dXMgKi8KICNkZWZpbmUgU0NCX1JFTlQgICAgICAgIDB4MDEKICNkZWZpbmUgU0NCX1BFTkQgICAgICAgIDB4MDIKLSNkZWZpbmUgU0NCX0NPTlRJRyAgICAgIDB4MDQJLyogQ29udGlnZW50IEFsbGVnaWFuY2UgKi8KKyNkZWZpbmUgU0NCX0NPTlRJRyAgICAgIDB4MDQJLyogQ29udGluZ2VudCBBbGxlZ2lhbmNlICovCiAjZGVmaW5lIFNDQl9TRUxFQ1QgICAgICAweDA4CiAjZGVmaW5lIFNDQl9CVVNZICAgICAgICAweDEwCiAjZGVmaW5lIFNDQl9ET05FICAgICAgICAweDIwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXBzLmMgYi9kcml2ZXJzL3Njc2kvaXBzLmMKaW5kZXggYjI1MTFhYy4uMjE4ZjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAvKiAgICAgICAgICAtIEZpeCBwYXRoL25hbWUgZm9yIHNjc2lfaG9zdHMuaCBpbmNsdWRlIGZvciAyLjYga2VybmVscyAgICAgICAgICovCiAvKiAgICAgICAgICAtIEZpeCBzb3J0IG9yZGVyIG9mIDdrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAtIFJlbW92ZSAzIHVudXNlZCAiaW5saW5lIiBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA3LjEyLnh4ICAtIFVzZSBTVEFUSUMgZnVuY3Rpb25zIHdoZXJlZXZlciBwb3NzaWJsZSAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA3LjEyLnh4ICAtIFVzZSBTVEFUSUMgZnVuY3Rpb25zIHdoZXJldmVyIHBvc3NpYmxlICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgIC0gQ2xlYW4gdXAgZGVwcmVjYXRlZCBNT0RVTEVfUEFSTSBjYWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIDcuMTIuMDUgIC0gUmVtb3ZlIFZlcnNpb24gTWF0Y2hpbmcgcGVyIElCTSByZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE2NjUsNyArMTY2NSw3IEBACiAJaW50IGRhdGFzaXplOwogCiAJLyogVHJvbWJvbmUgaXMgdGhlIG9ubHkgY29wcGVyaGVhZCB0aGF0IGNhbiBkbyBwYWNrZXQgZmxhc2gsIGJ1dCBvbmx5Ci0JICogZm9yIGZpcm13YXJlLiBObyBvbmUgc2FpZCBpdCBoYWQgdG8gbWFrZSBzZW5jZS4gKi8KKwkgKiBmb3IgZmlybXdhcmUuIE5vIG9uZSBzYWlkIGl0IGhhZCB0byBtYWtlIHNlbnNlLiAqLwogCWlmIChJUFNfSVNfVFJPTUJPTkUoaGEpICYmIHB0LT5Db3BwQ1AuY21kLmZsYXNoZncudHlwZSA9PSBJUFNfRldfSU1BR0UpIHsKIAkJaWYgKGlwc191c3JjbWQoaGEsIHB0LCBzY2IpKQogCQkJcmV0dXJuIElQU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwcy5oIGIvZHJpdmVycy9zY3NpL2lwcy5oCmluZGV4IDRlNDlmYmMuLmYyZGYwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHMuaAorKysgYi9kcml2ZXJzL3Njc2kvaXBzLmgKQEAgLTExOTMsNyArMTE5Myw3IEBACiAjZGVmaW5lIElQU19WRVJfU0VCUklORyAiNy4xMi4wMiIKICNkZWZpbmUgSVBTX1ZFUl9LRVlXRVNUICI3LjEyLjAyIgogCi0vKiBDb21wYXRhYmlsaXR5IElEcyBmb3IgdmFyaW91cyBhZGFwdGVycyAqLworLyogQ29tcGF0aWJpbGl0eSBJRHMgZm9yIHZhcmlvdXMgYWRhcHRlcnMgKi8KICNkZWZpbmUgSVBTX0NPTVBBVF9VTktOT1dOICIiCiAjZGVmaW5lIElQU19DT01QQVRfQ1VSUkVOVCAiS1c3MTAiCiAjZGVmaW5lIElQU19DT01QQVRfU0VSVkVSQUlEMSAiMi4yNS4wMSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCBhODYwNDUyLi4zZGY5ODUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJcmMgPSBpc2NzaV9zd190Y3BfeG1pdF9zZWdtZW50KHRjcF9jb25uLCBzZWdtZW50KTsKIAkJLyoKIAkJICogV2UgbWF5IG5vdCBoYXZlIGJlZW4gYWJsZSB0byBzZW5kIGRhdGEgYmVjYXVzZSB0aGUgY29ubgotCQkgKiBpcyBnZXR0aW5nIHN0b3BwZWQuIGxpYmlzY3NpIHdpbGwga25vdyBzbyBwcm9wb2dhdGUgZXJyCisJCSAqIGlzIGdldHRpbmcgc3RvcHBlZC4gbGliaXNjc2kgd2lsbCBrbm93IHNvIHByb3BhZ2F0ZSBlcnIKIAkJICogZm9yIGl0IHRvIGRvIHRoZSByaWdodCB0aGluZy4KIAkJICovCiAJCWlmIChyYyA9PSAtRUFHQUlOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKaW5kZXggMjgyMzFiYS4uNzcwMzVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogfQogCiAvKioKLSAqIGZjX3NlcV9lbHNfcnNwX3NlbmQoKSAtIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbQorICogZmNfc2VxX2Vsc19yc3Bfc2VuZCgpIC0gU2VuZCBhbiBFTFMgcmVzcG9uc2UgdXNpbmcgaW5mb3JtYXRpb24gZnJvbQogICoJCQkgICB0aGUgZXhpc3Rpbmcgc2VxdWVuY2UvZXhjaGFuZ2UuCiAgKiBAZnA6CSAgICAgIFRoZSByZWNlaXZlZCBmcmFtZQogICogQGVsc19jbWQ6ICBUaGUgRUxTIGNvbW1hbmQgdG8gYmUgc2VudApAQCAtMTE1Myw3ICsxMTUzLDcgQEAKICAqIGZjX2V4Y2hfc2VuZF9iYV9yanQoKSAtIFNlbmQgQkxTIFJlamVjdAogICogQHJ4X2ZwOiAgVGhlIGZyYW1lIGJlaW5nIHJlamVjdGVkCiAgKiBAcmVhc29uOiBUaGUgcmVhc29uIHRoZSBmcmFtZSBpcyBiZWluZyByZWplY3RlZAotICogQGV4cGxhbjogVGhlIGV4cGxhaW5hdGlvbiBmb3IgdGhlIHJlamVjdGlvbgorICogQGV4cGxhbjogVGhlIGV4cGxhbmF0aW9uIGZvciB0aGUgcmVqZWN0aW9uCiAgKgogICogVGhpcyBpcyBmb3IgcmVqZWN0aW5nIEJBX0FCVFMgb25seS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCmluZGV4IGIxYjAzYWYuLjViNzk5YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKQEAgLTg3MCw3ICs4NzAsNyBAQAogCQkJCWZzcC0+c2NzaV9yZXNpZCA9IG50b2hsKHJwX2V4LT5mcl9yZXNpZCk7CiAJCQkJLyoKIAkJCQkgKiBUaGUgY21uZC0+dW5kZXJmbG93IGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZgotCQkJCSAqIGJ5dGVzIHRoYXQgbXVzdCBiZSB0cmFuc2ZlcmVkIGZvciB0aGlzCisJCQkJICogYnl0ZXMgdGhhdCBtdXN0IGJlIHRyYW5zZmVycmVkIGZvciB0aGlzCiAJCQkJICogY29tbWFuZC4gIFByb3ZpZGVkIGEgc2Vuc2UgY29uZGl0aW9uIGlzIG5vdAogCQkJCSAqIHByZXNlbnQsIG1ha2Ugc3VyZSB0aGUgYWN0dWFsIGFtb3VudAogCQkJCSAqIHRyYW5zZmVycmVkIGlzIGF0IGxlYXN0IHRoZSB1bmRlcmZsb3cgdmFsdWUKQEAgLTEzMDYsNyArMTMwNiw3IEBACiB9CiAKIC8qKgotICogZmNfdG1fZG9uZSgpIC0gVGFzayBNYW5hZ21lbnQgcmVzcG9uc2UgaGFuZGxlcgorICogZmNfdG1fZG9uZSgpIC0gVGFzayBNYW5hZ2VtZW50IHJlc3BvbnNlIGhhbmRsZXIKICAqIEBzZXE6IFRoZSBzZXF1ZW5jZSB0aGF0IHRoZSByZXNwb25zZSBpcyBvbgogICogQGZwOgkgVGhlIHJlc3BvbnNlIGZyYW1lCiAgKiBAYXJnOiBUaGUgRkNQIHBhY2tldCB0aGUgcmVzcG9uc2UgaXMgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCmluZGV4IDhjMDhiMjEuLjkwNmJiY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCkBAIC01Miw3ICs1Miw3IEBACiAgKiB3aGlsZSBtYWtpbmcgdGhlIGNhbGxiYWNrLiBUbyBlbnN1cmUgdGhhdCB0aGUgcnBvcnQgaXMgbm90IGZyZWUnZCB3aGlsZQogICogcHJvY2Vzc2luZyB0aGUgY2FsbGJhY2sgdGhlIHJwb3J0IGNhbGxiYWNrcyBhcmUgc2VyaWFsaXplZCB0aHJvdWdoIGEKICAqIHNpbmdsZS10aHJlYWRlZCB3b3JrcXVldWUuIEFuIHJwb3J0IHdvdWxkIG5ldmVyIGJlIGZyZWUnZCB3aGlsZSBpbiBhCi0gKiBjYWxsYmFjayBoYW5kbGVyIGJlY3Vhc2Ugbm8gb3RoZXIgcnBvcnQgd29yayBpbiB0aGlzIHF1ZXVlIGNhbiBiZSBleGVjdXRlZAorICogY2FsbGJhY2sgaGFuZGxlciBiZWNhdXNlIG5vIG90aGVyIHJwb3J0IHdvcmsgaW4gdGhpcyBxdWV1ZSBjYW4gYmUgZXhlY3V0ZWQKICAqIGF0IHRoZSBzYW1lIHRpbWUuCiAgKgogICogV2hlbiBkaXNjb3Zlcnkgc3VjY2VlZHMgb3IgZmFpbHMgYSBjYWxsYmFjayBpcyBtYWRlIHRvIHRoZSBscG9ydCBhcwpAQCAtMTYzLDcgKzE2Myw3IEBACiAgKiBmY19scG9ydF9ycG9ydF9jYWxsYmFjaygpIC0gRXZlbnQgaGFuZGxlciBmb3IgcnBvcnQgZXZlbnRzCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB3aGljaCBpcyByZWNlaXZpbmcgdGhlIGV2ZW50CiAgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQgZGF0YQotICogQGV2ZW50OiBUaGUgZXZlbnQgdGhhdCBvY2N1cmVkCisgKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VycmVkCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBzaG91bGQgbm90IGJlIGhlbGQgd2hlbiBjYWxsaW5nCiAgKgkJIHRoaXMgZnVuY3Rpb24uCkBAIC0zNzksNyArMzc5LDcgQEAKIAogLyoqCiAgKiBmY19scG9ydF9yZWN2X3JsaXJfcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgUmVnaXN0ZXJlZCBMaW5rIEluY2lkZW50IFJlcG9ydC4KLSAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgUkxJUgorICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjZWl2aW5nIHRoZSBSTElSCiAgKiBAZnA6CSAgIFRoZSBSTElSIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTM5Niw3ICszOTYsNyBAQAogCiAvKioKICAqIGZjX2xwb3J0X3JlY3ZfZWNob19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBFQ0hPIHJlcXVlc3QKLSAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBFQ0hPCisgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHJlY2VpdmluZyB0aGUgRUNITwogICogQGZwOgkgICBFQ0hPIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTQzMiw3ICs0MzIsNyBAQAogCiAvKioKICAqIGZjX2xwb3J0X3JlY3Zfcm5pZF9yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBSZXF1ZXN0IE5vZGUgSUQgZGF0YSByZXF1ZXN0Ci0gKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgUk5JRAorICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCByZWNlaXZpbmcgdGhlIFJOSUQKICAqIEBmcDoJICAgVGhlIFJOSUQgcmVxdWVzdCBmcmFtZQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAKIC8qKgogICogZmNfbHBvcnRfcmVjdl9sb2dvX3JlcSgpIC0gSGFuZGxlIHJlY2VpdmVkIGZhYnJpYyBMT0dPIHJlcXVlc3QKLSAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBMT0dPCisgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHJlY2VpdmluZyB0aGUgTE9HTwogICogQGZwOgkgICBUaGUgTE9HTyByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTc3MSw3ICs3NzEsNyBAQAogCiAvKioKICAqIGZjX2xwb3J0X3JlY3ZfZmxvZ2lfcmVxKCkgLSBSZWNlaXZlIGEgRkxPR0kgcmVxdWVzdAotICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0aGF0IHJlY2lldmVkIHRoZSByZXF1ZXN0CisgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHRoYXQgcmVjZWl2ZWQgdGhlIHJlcXVlc3QKICAqIEByeF9mcDogVGhlIEZMT0dJIGZyYW1lCiAgKgogICogQSByZWNlaXZlZCBGTE9HSSByZXF1ZXN0IGluZGljYXRlcyBhIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24uCkBAIC04NTgsNyArODU4LDcgQEAKICAqIGlmIGFuIHJwb3J0IHNob3VsZCBoYW5kbGUgdGhlIHJlcXVlc3QuCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggdGhlIGxwb3J0Ci0gKgkJIGxvY2sgaGVsZCBiZWN1YXNlIGl0IHdpbGwgZ3JhYiB0aGUgbG9jay4KKyAqCQkgbG9jayBoZWxkIGJlY2F1c2UgaXQgd2lsbCBncmFiIHRoZSBsb2NrLgogICovCiBzdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2Vsc19yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKIAkJCQkgIHN0cnVjdCBmY19mcmFtZSAqZnApCkBAIC05MjUsNyArOTI1LDcgQEAKICAqIEBmcDogVGhlIGZyYW1lIHRoZSByZXF1ZXN0IGlzIGluCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggdGhlIGxwb3J0Ci0gKgkJIGxvY2sgaGVsZCBiZWN1YXNlIGl0IG1heSBncmFiIHRoZSBsb2NrLgorICoJCSBsb2NrIGhlbGQgYmVjYXVzZSBpdCBtYXkgZ3JhYiB0aGUgbG9jay4KICAqLwogc3RhdGljIHZvaWQgZmNfbHBvcnRfcmVjdl9yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKIAkJCSAgICAgIHN0cnVjdCBmY19mcmFtZSAqZnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwppbmRleCBmM2Y2OTNiLi44NzRlMjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCQkJCSAgICAgICBkaXNjX3Jlc3AsIERJU0NPVkVSX1JFU1BfU0laRSk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwotCQkvKiBUaGlzIGlzIGRldGVjdGluZyBhIGZhaWx1cmUgdG8gdHJhbnNtaXQgaW5pdGFsCisJCS8qIFRoaXMgaXMgZGV0ZWN0aW5nIGEgZmFpbHVyZSB0byB0cmFuc21pdCBpbml0aWFsCiAJCSAqIGRldiB0byBob3N0IEZJUyBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbiBHLjUgb2YKIAkJICogc2FzLTIgciAwNGIgKi8KIAkJZHIgPSAmKChzdHJ1Y3Qgc21wX3Jlc3AgKilkaXNjX3Jlc3ApLT5kaXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCA0ZTBmYWEwLi4xN2Q3ODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtNDUxNSw3ICs0NTE1LDcgQEAKICAqIERlc2NyaXB0aW9uOgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRyYW5zcG9ydCBhZnRlciB0aGUgQGZjX3Zwb3J0J3Mgc3ltYm9saWMgbmFtZQogICogaGFzIGJlZW4gY2hhbmdlZC4gVGhpcyBmdW5jdGlvbiByZS1yZWdpc3RlcnMgdGhlIHN5bWJvbGljIG5hbWUgd2l0aCB0aGUKLSAqIHN3aXRjaCB0byBwcm9wb2dhdGUgdGhlIGNoYW5nZSBpbnRvIHRoZSBmYWJyaWMgaWYgdGhlIHZwb3J0IGlzIGFjdGl2ZS4KKyAqIHN3aXRjaCB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZSBpbnRvIHRoZSBmYWJyaWMgaWYgdGhlIHZwb3J0IGlzIGFjdGl2ZS4KICAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NldF92cG9ydF9zeW1ib2xpY19uYW1lKHN0cnVjdCBmY192cG9ydCAqZmNfdnBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwppbmRleCA3OTNiOWYxLi43N2IyODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKQEAgLTE5MzksNyArMTkzOSw3IEBACiAgKiBAcnh4cmk6IFJlY2VpdmUgZXhjaGFuZ2UgaWQKICAqIEBsZW46IE51bWJlciBvZiBkYXRhIGJ5dGVzCiAgKgotICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW5kIHBvc3RzIGEgZGF0YSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIHRvIHJlY2lldmUKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBwb3N0cyBhIGRhdGEgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSB0byByZWNlaXZlCiAgKiBhbiB1bnNvbGljdGVkIENUIGNvbW1hbmQuCiAgKiovCiBzdGF0aWMgaW50IGxwZmNkaWFnX2xvb3BfcG9zdF9yeGJ1ZnMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCByeHhyaSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKaW5kZXggYTc1MzU4MS4uM2Q5Njc3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKQEAgLTkwOCw3ICs5MDgsNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCXByaW50ayhLRVJOX0VSUiAiOTA1OSBCTEtHUkQ6ICAlczogX2R1bXBfYnVmX2RhdGE9MHglcFxuIiwKIAkJCV9fZnVuY19fLCBfZHVtcF9idWZfZGF0YSk7CiAJZGVidWctPmJ1ZmZlciA9IF9kdW1wX2J1Zl9kYXRhOwpAQCAtOTM4LDcgKzkzOCw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJcHJpbnRrKEtFUk5fRVJSCSI5MDYwIEJMS0dSRDogJXM6IF9kdW1wX2J1Zl9kaWY9MHglcCBmaWxlPSVzXG4iLAogCQlfX2Z1bmNfXywgX2R1bXBfYnVmX2RpZiwgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlkZWJ1Zy0+YnVmZmVyID0gX2R1bXBfYnVmX2RpZjsKQEAgLTIxNTgsNyArMjE1OCw3IEBACiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcGhiYS0+aGJhX2RlYnVnZnNfcm9vdCk7CiAJCWlmICghdnBvcnQtPnZwb3J0X2RlYnVnZnNfcm9vdCkgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkgIjA0MTcgQ2FudCBjcmVhdGUgZGVidWdmc1xuIik7CisJCQkJCSAiMDQxNyBDYW4ndCBjcmVhdGUgZGVidWdmc1xuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCQlhdG9taWNfaW5jKCZwaGJhLT5kZWJ1Z2ZzX3Zwb3J0X2NvdW50KTsKQEAgLTIyMTEsNyArMjIxMSw3IEBACiAJCQkJIHZwb3J0LCAmbHBmY19kZWJ1Z2ZzX29wX25vZGVsaXN0KTsKIAlpZiAoIXZwb3J0LT5kZWJ1Z19ub2RlbGlzdCkgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJICIwNDA5IENhbnQgY3JlYXRlIGRlYnVnZnMgbm9kZWxpc3RcbiIpOworCQkJCSAiMDQwOSBDYW4ndCBjcmVhdGUgZGVidWdmcyBub2RlbGlzdFxuIik7CiAJCWdvdG8gZGVidWdfZmFpbGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggNzM1MDI4Zi4uZDM0YjY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCSBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CiAKIAkvKiBDTEVBUl9MQSBzaG91bGQgcmUtZW5hYmxlIGxpbmsgYXR0ZW50aW9uIGV2ZW50cyBhbmQKLQkgKiB3ZSBzaG91bGQgdGhlbiBpbWVkaWF0ZWx5IHRha2UgYSBMQVRUIGV2ZW50LiBUaGUKKwkgKiB3ZSBzaG91bGQgdGhlbiBpbW1lZGlhdGVseSB0YWtlIGEgTEFUVCBldmVudC4gVGhlCiAJICogTEFUVCBwcm9jZXNzaW5nIHNob3VsZCBjYWxsIGxwZmNfbGlua2Rvd24oKSB3aGljaAogCSAqIHdpbGwgY2xlYW51cCBhbnkgbGVmdCBvdmVyIGluLXByb2dyZXNzIGRpc2NvdmVyeQogCSAqIGV2ZW50cy4KQEAgLTE1OTksNyArMTU5OSw3IEBACiAgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGlzc3VpbmcgdGhlIFBvcnQKICAqIExvZ2luIChQTE9HSSkgY29tbWFuZC4gRm9yIFBMT0dJIGNvbXBsZXRpb24sIHRoZXJlIG11c3QgYmUgYW4gYWN0aXZlCiAgKiBuZGxwIG9uIHRoZSB2cG9ydCBub2RlIGxpc3QgdGhhdCBtYXRjaGVzIHRoZSByZW1vdGUgbm9kZSBJRCBmcm9tIHRoZQotICogUExPR0kgcmVwb25zZSBJT0NCLiBJZiBzdWNoIG5kbHAgZG9lcyBub3QgZXhpc3QsIHRoZSBQTE9HSSBpcyBzaW1wbHkKKyAqIFBMT0dJIHJlc3BvbnNlIElPQ0IuIElmIHN1Y2ggbmRscCBkb2VzIG5vdCBleGlzdCwgdGhlIFBMT0dJIGlzIHNpbXBseQogICogaWdub3JlZCBhbmQgY29tbWFuZCBJT0NCIHJlbGVhc2VkLiBUaGUgUExPR0kgcmVzcG9uc2UgSU9DQiBzdGF0dXMgaXMKICAqIGNoZWNrZWQgZm9yIGVycm9yIGNvbmRpdG9ucy4gSWYgdGhlcmUgaXMgZXJyb3Igc3RhdHVzIHJlcG9ydGVkLCBQTE9HSQogICogcmV0cnkgc2hhbGwgYmUgYXR0ZW1wdGVkIGJ5IGludm9raW5nIHRoZSBscGZjX2Vsc19yZXRyeSgpIHJvdXRpbmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDE1NGM3MTUuLjMwMTQ5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC03MzksNyArNzM5LDcgQEAKIAogLyoKICAqIFRoaXMgaXMgb25seSBjYWxsZWQgdG8gaGFuZGxlIEZDIHdvcmtlciBldmVudHMuIFNpbmNlIHRoaXMgYSByYXJlCi0gKiBvY2N1cmFuY2UsIHdlIGFsbG9jYXRlIGEgc3RydWN0IGxwZmNfd29ya19ldnQgc3RydWN0dXJlIGhlcmUgaW5zdGVhZCBvZgorICogb2NjdXJyZW5jZSwgd2UgYWxsb2NhdGUgYSBzdHJ1Y3QgbHBmY193b3JrX2V2dCBzdHJ1Y3R1cmUgaGVyZSBpbnN0ZWFkIG9mCiAgKiBlbWJlZGRpbmcgaXQgaW4gdGhlIElPQ0IuCiAgKi8KIGludApAQCAtMTM0OCw3ICsxMzQ4LDcgQEAKIAlpbnQgcmM7CiAKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkvKiBJZiB0aGUgRkNGIGlzIG5vdCBhdmFpbGFiZSBkbyBub3RoaW5nLiAqLworCS8qIElmIHRoZSBGQ0YgaXMgbm90IGF2YWlsYWJsZSBkbyBub3RoaW5nLiAqLwogCWlmICghKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9BVkFJTEFCTEUpKSB7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH4oRkNGX1RTX0lOUFJPRyB8IEZDRl9SUl9JTlBST0cpOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtMTUzOCw3ICsxNTM4LDcgQEAKIAogCQkvKgogCQkgKiBJZiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhbnkgYWRkcmVzc2luZyBtb2RlLCBvciBpZiB0aGUKLQkJICogcHJlZmVyZWQgYWRkcmVzc2luZyBtb2RlIHNwZWNpZmllZCBieSB1c2VyIGlzIG5vdCBzdXBwb3J0ZWQKKwkJICogcHJlZmVycmVkIGFkZHJlc3NpbmcgbW9kZSBzcGVjaWZpZWQgYnkgdXNlciBpcyBub3Qgc3VwcG9ydGVkCiAJCSAqIGJ5IEZDRiwgYWxsb3cgZmFicmljIHRvIHBpY2sgdGhlIGFkZHJlc3NpbmcgbW9kZS4KIAkJICovCiAJCSphZGRyX21vZGUgPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY19hZGRyX3Byb3YsCkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogCQkJCUZDRkNOQ1RfQU1fU1BNQSkgPwogCQkJCUxQRkNfRkNGX1NQTUEgOiBMUEZDX0ZDRl9GUE1BOwogCQkvKgotCQkgKiBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBwcmVmZXJlZCBhZGRyZXNzIG1vZGUsIHVzZSB0aGUKKwkJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgcHJlZmVycmVkIGFkZHJlc3MgbW9kZSwgdXNlIHRoZQogCQkgKiBhZGRyIG1vZGUgb25seSBpZiBGQ0Ygc3VwcG9ydCB0aGUgYWRkcl9tb2RlLgogCQkgKi8KIAkJZWxzZSBpZiAoKGNvbm5fZW50cnktPmNvbm5fcmVjLmZsYWdzICYgRkNGQ05DVF9BTV9WQUxJRCkgJiYKQEAgLTMxMTcsNyArMzExNyw3IEBACiAJCSAqIGJhY2sgYXQgcmVnIGxvZ2luIHN0YXRlIHNvIHRoaXMKIAkJICogbWJveCBuZWVkcyB0byBiZSBpZ25vcmVkIGJlY2FzZQogCQkgKiB0aGVyZSBpcyBhbm90aGVyIHJlZyBsb2dpbiBpbgotCQkgKiBwcm9jY2Vzcy4KKwkJICogcHJvY2Vzcy4KIAkJICovCiAJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfSUdOUl9SRUdfQ01QTDsKQEAgLTQ0NzcsNyArNDQ3Nyw3IEBACiAJaWYgKCh2cG9ydC0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkgJiYKIAkgICAgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX05ESVNDX0FDVElWRSkpIHsKIAkJaWYgKGxwZmNfcnNjbl9wYXlsb2FkX2NoZWNrKHZwb3J0LCBkaWQpKSB7Ci0JCQkvKiBJZiB3ZSd2ZSBhbHJlYWR5IHJlY2lldmVkIGEgUExPR0kgZnJvbSB0aGlzIE5Qb3J0CisJCQkvKiBJZiB3ZSd2ZSBhbHJlYWR5IHJlY2VpdmVkIGEgUExPR0kgZnJvbSB0aGlzIE5Qb3J0CiAJCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyeSB0byBkaXNjb3ZlciBpdCBhZ2Fpbi4KIAkJCSAqLwogCQkJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX1JDVl9QTE9HSSkKQEAgLTQ0OTMsNyArNDQ5Myw3IEBACiAJCX0gZWxzZQogCQkJbmRscCA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJLyogSWYgd2UndmUgYWxyZWFkeSByZWNpZXZlZCBhIFBMT0dJIGZyb20gdGhpcyBOUG9ydCwKKwkJLyogSWYgd2UndmUgYWxyZWFkeSByZWNlaXZlZCBhIFBMT0dJIGZyb20gdGhpcyBOUG9ydCwKIAkJICogb3Igd2UgYXJlIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgZGlzY292ZXJ5IG9uIGl0LAogCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyeSB0byBkaXNjb3ZlciBpdCBhZ2Fpbi4KIAkJICovCkBAIC01NzU2LDcgKzU3NTYsNyBAQAogICogQHNpemU6IFNpemUgb2YgdGhlIGRhdGEgYnVmZmVyLgogICogQHJlY190eXBlOiBSZWNvcmQgdHlwZSB0byBiZSBzZWFyY2hlZC4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGNvbmZpZyByZWdpb24gZGF0YSB0byBmaW5kIHRoZSBiZWdpbmluZworICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBjb25maWcgcmVnaW9uIGRhdGEgdG8gZmluZCB0aGUgYmVnaW5uaW5nCiAgKiBvZiB0aGUgcmVjb3JkIHNwZWNpZmllZCBieSByZWNvcmRfdHlwZS4gSWYgcmVjb3JkIGZvdW5kLCB0aGlzCiAgKiBmdW5jdGlvbiByZXR1cm4gcG9pbnRlciB0byB0aGUgcmVjb3JkIGVsc2UgcmV0dXJuIE5VTEwuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggZTZlYmU1MS4uNTA1Zjg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTQ0NjYsNyArNDQ2Niw3IEBACiB9CiAKIC8qKgotICogbHBmY19pbml0X2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBpbml0IGFwaSBmdWNudGlvbiBqdW1wIHRhYmxlCisgKiBscGZjX2luaXRfYXBpX3RhYmxlX3NldHVwIC0gU2V0IHVwIGluaXQgYXBpIGZ1bmN0aW9uIGp1bXAgdGFibGUKICAqIEBwaGJhOiBUaGUgaGJhIHN0cnVjdCBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgogICogQGRldl9ncnA6IFRoZSBIQkEgUENJLURldmljZSBncm91cCBudW1iZXIuCiAgKgpAQCAtNDg1MCw3ICs0ODUwLDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqIAkwIC0gc3VjY2Vzc2Z1bAotICogCS1FTk9NRU0gLSBObyBhdmFpbGJsZSBtZW1vcnkKKyAqIAktRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICogICAgICAtRUlPIC0gVGhlIG1haWxib3ggZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KICAqKi8KIGludApAQCAtNTczMCw3ICs1NzMwLDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqIAkwIC0gc3VjY2Vzc2Z1bAotICogCS1FTk9NRU0gLSBObyBhdmFpbGJsZSBtZW1vcnkKKyAqIAktRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICogICAgICAtRUlPIC0gVGhlIG1haWxib3ggZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KICAqKi8KIHN0YXRpYyBpbnQKQEAgLTU4MzUsNyArNTgzNSw3IEBACiAgKgogICogUmV0dXJuIGNvZGVzCiAgKiAJMCAtIHN1Y2Nlc3NmdWwKLSAqIAktRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAJLUVOT01FTSAtIE5vIGF2YWlsYWJsZSBtZW1vcnkKICAqICAgICAgLUVJTyAtIFRoZSBtYWlsYm94IGZhaWxlZCB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuCiAgKiovCiBzdGF0aWMgaW50CkBAIC01ODk0LDcgKzU4OTQsNyBAQAogICoKICAqIFJldHVybiBjb2RlcwogICogICAgICAwIC0gc3VjY2Vzc2Z1bAotICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGFibGUgbWVtb3J5CiAgKiAgICAgIC1FSU8gLSBUaGUgbWFpbGJveCBmYWlsZWQgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgogICoqLwogc3RhdGljIGludApAQCAtNjE4OSw3ICs2MTg5LDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqICAgICAgMCAtIHN1Y2Nlc3NmdWwKLSAqICAgICAgLUVOT01FTSAtIE5vIGF2YWlsYmxlIG1lbW9yeQorICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICogICAgICAtRUlPIC0gVGhlIG1haWxib3ggZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KICAqKi8KIHN0YXRpYyB2b2lkCkBAIC02MjUzLDcgKzYyNTMsNyBAQAogICoKICAqIFJldHVybiBjb2RlcwogICogICAgICAwIC0gc3VjY2Vzc2Z1bAotICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGFibGUgbWVtb3J5CiAgKiAgICAgIC1FSU8gLSBUaGUgbWFpbGJveCBmYWlsZWQgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgogICoqLwogaW50CkBAIC02NDk4LDcgKzY0OTgsNyBAQAogICoKICAqIFJldHVybiBjb2RlcwogICogICAgICAwIC0gc3VjY2Vzc2Z1bAotICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGFibGUgbWVtb3J5CiAgKiAgICAgIC1FSU8gLSBUaGUgbWFpbGJveCBmYWlsZWQgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgogICoqLwogdm9pZApAQCAtNjU0Myw3ICs2NTQzLDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqICAgICAgMCAtIHN1Y2Nlc3NmdWwKLSAqICAgICAgLUVOT01FTSAtIE5vIGF2YWlsYmxlIG1lbW9yeQorICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICoqLwogc3RhdGljIGludAogbHBmY19zbGk0X2NxX2V2ZW50X3Bvb2xfY3JlYXRlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKQEAgLTY3MDQsNyArNjcwNCw3IEBACiAgKgogICogUmV0dXJuIGNvZGVzCiAgKiAgICAgIDAgLSBzdWNjZXNzZnVsCi0gKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGJsZSBtZW1vcnkKKyAqICAgICAgLUVOT01FTSAtIE5vIGF2YWlsYWJsZSBtZW1vcnkKICAqICAgICAgLUVJTyAtIFRoZSBtYWlsYm94IGZhaWxlZCB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuCiAgKiovCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggZGJhMzJkZi4uZmJhYjk3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTE4MzQsNyArMTgzNCw3IEBACiAgKiBAZmNmX2luZGV4OiBpbmRleCB0byBmY2YgdGFibGUuCiAgKgogICogVGhpcyByb3V0aW5lIHJvdXRpbmUgYWxsb2NhdGVzIGFuZCBjb25zdHJ1Y3RzIG5vbi1lbWJlZGRlZCBtYWlsYm94IGNvbW1hbmQKLSAqIGZvciByZWFkaW5nIGEgRkNGIHRhYmxlIGVudHJ5IHJlZmVyZWQgYnkgQGZjZl9pbmRleC4KKyAqIGZvciByZWFkaW5nIGEgRkNGIHRhYmxlIGVudHJ5IHJlZmVycmVkIGJ5IEBmY2ZfaW5kZXguCiAgKgogICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBtYWlsYm94IGNvbW1hbmQgY29uc3RydWN0ZWQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCiAgKiBOVUxMLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCmluZGV4IGYzY2ZiZTIuLmYyYjFiYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKQEAgLTUwLDcgKzUwLDcgQEAKICAqIGFuZCBzdWJjYXRlZ29yeS4gVGhlIGV2ZW50IHR5cGUgbXVzdCBjb21lIGZpcnN0LgogICogVGhlIHN1YmNhdGVnb3J5IGZ1cnRoZXIgZGVmaW5lcyB0aGUgZGF0YSB0aGF0IGZvbGxvd3MgaW4gdGhlIHJlc3QKICAqIG9mIHRoZSBwYXlsb2FkLiBFYWNoIGNhdGVnb3J5IHdpbGwgaGF2ZSBpdHMgb3duIHVuaXF1ZSBoZWFkZXIgcGx1cwotICogYW55IGFkZHRpb25hbCBkYXRhIHVuaXF1ZSB0byB0aGUgc3ViY2F0ZWdvcnkuCisgKiBhbnkgYWRkaXRpb25hbCBkYXRhIHVuaXF1ZSB0byB0aGUgc3ViY2F0ZWdvcnkuCiAgKiBUaGUgcGF5bG9hZCBzZW50IHZpYSB0aGUgZmMgdHJhbnNwb3J0IGlzIG9uZS13YXkgZHJpdmVyLT5hcHBsaWNhdGlvbi4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCA1MmIzNTE1Li4wZDkyZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTY1OCw3ICs2NTgsNyBAQAogCXJldHVybiAwOwogfQogLyoqCi0gKiBscGZjX3JlbGVhc2VfcnBpIC0gUmVsZWFzZSBhIFJQSSBieSBpc3N1ZWluZyB1bnJlZ19sb2dpbiBtYWlsYm94IGNtZC4KKyAqIGxwZmNfcmVsZWFzZV9ycGkgLSBSZWxlYXNlIGEgUlBJIGJ5IGlzc3VpbmcgdW5yZWdfbG9naW4gbWFpbGJveCBjbWQuCiAgKiBAcGhiYSA6IFBvaW50ZXIgdG8gbHBmY19oYmEgc3RydWN0dXJlLgogICogQHZwb3J0OiBQb2ludGVyIHRvIGxwZmNfdnBvcnQgc3RydWN0dXJlLgogICogQHJwaSAgOiBycGkgdG8gYmUgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggMmI5NjJiMC4uZmU3Y2M4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCQkJaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRySGlnaCA9IDA7CiAJCQlpb2NiLT51bHBCZGVDb3VudCA9IDA7CiAJCQlpb2NiLT51bHBMZSA9IDA7Ci0JCQkvKiBmaWxsIGluIHJlc3BvbmNlIEJERSAqLworCQkJLyogZmlsbCBpbiByZXNwb25zZSBCREUgKi8KIAkJCWlvY2ItPnVuc2xpMy5mY3BfZXh0LnJiZGUudHVzLmYuYmRlRmxhZ3MgPQogCQkJCQkJCUJVRkZfVFlQRV9CREVfNjQ7CiAJCQlpb2NiLT51bnNsaTMuZmNwX2V4dC5yYmRlLnR1cy5mLmJkZVNpemUgPQpAQCAtMTIxNywxMCArMTIxNywxMCBAQAogCQkJCSAgICAgKDIgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpKTsKIAkJCWRhdGFfYmRlLT5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChwaHlzYWRkcik7CiAJCQlkYXRhX2JkZS0+YWRkckxvdyA9IHB1dFBhZGRyTG93KHBoeXNhZGRyKTsKLQkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbmNlIGJkZSBhbmQgZGF0YSBicGwgKi8KKwkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbnNlIGJkZSBhbmQgZGF0YSBicGwgKi8KIAkJCWlvY2JfY21kLT51bnNsaTMuZmNwX2V4dC5lYmRlX2NvdW50ID0gMjsKIAkJfSBlbHNlIHsKLQkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbmNlIGJkZSBhbmQgZGF0YSBiZGVzICovCisJCQkvKiBlYmRlIGNvdW50IGluY2x1ZGVzIHRoZSByZXNwb25zZSBiZGUgYW5kIGRhdGEgYmRlcyAqLwogCQkJaW9jYl9jbWQtPnVuc2xpMy5mY3BfZXh0LmViZGVfY291bnQgPSAobnVtX2JkZSArIDEpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTIzODAsNyArMjM4MCw3IEBACiAJCX0KIAkJLyoKIAkJICogVGhlIGNtbmQtPnVuZGVyZmxvdyBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtdXN0Ci0JCSAqIGJlIHRyYW5zZmVyZWQgZm9yIHRoaXMgY29tbWFuZC4gIFByb3ZpZGVkIGEgc2Vuc2UgY29uZGl0aW9uCisJCSAqIGJlIHRyYW5zZmVycmVkIGZvciB0aGlzIGNvbW1hbmQuICBQcm92aWRlZCBhIHNlbnNlIGNvbmRpdGlvbgogCQkgKiBpcyBub3QgcHJlc2VudCwgbWFrZSBzdXJlIHRoZSBhY3R1YWwgYW1vdW50IHRyYW5zZmVycmVkIGlzIGF0CiAJCSAqIGxlYXN0IHRoZSB1bmRlcmZsb3cgdmFsdWUgb3IgZmFpbC4KIAkJICovCkBAIC0yODczLDcgKzI4NzMsNyBAQAogfQogCiAvKioKLSAqIGxwZmNfc2NzaV9hcGlfdGFibGVfc2V0dXAgLSBTZXQgdXAgc2NzaSBhcGkgZnVjbnRpb24ganVtcCB0YWJsZQorICogbHBmY19zY3NpX2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBzY3NpIGFwaSBmdW5jdGlvbiBqdW1wIHRhYmxlCiAgKiBAcGhiYTogVGhlIGhiYSBzdHJ1Y3QgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KICAqIEBkZXZfZ3JwOiBUaGUgSEJBIFBDSS1EZXZpY2UgZ3JvdXAgbnVtYmVyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKaW5kZXggNTkzMjI3My4uY2U2NDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKQEAgLTEzMCw3ICsxMzAsNyBAQAogCWRtYV9hZGRyX3Qgbm9uc2dfcGh5czsJLyogTm9uIHNjYXR0ZXItZ2F0aGVyIHBoeXNpY2FsIGFkZHJlc3MuICovCiAKIAkvKgotCSAqIGRhdGEgYW5kIGRtYV9oYW5kbGUgYXJlIHRoZSBrZXJuZWwgdmlydXRhbCBhbmQgYnVzIGFkZHJlc3Mgb2YgdGhlCisJICogZGF0YSBhbmQgZG1hX2hhbmRsZSBhcmUgdGhlIGtlcm5lbCB2aXJ0dWFsIGFuZCBidXMgYWRkcmVzcyBvZiB0aGUKIAkgKiBkbWEtYWJsZSBidWZmZXIgY29udGFpbmluZyB0aGUgZmNwX2NtZCwgZmNwX3JzcCBhbmQgYSBzY2F0dGVyCiAJICogZ2F0aGVyIGJkZSBsaXN0IHRoYXQgc3VwcG9ydHMgdGhlIHNnX3RhYmxlc2l6ZSB2YWx1ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDQ3NDZkY2QuLmRhY2FiYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMjgxNyw3ICsyODE3LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0IHdoZW4gdGhlcmUgaXMgYSByaW5nCiAgKiBldmVudCBmb3IgdGhlIGZjcCByaW5nLiBUaGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgYW55IGxvY2suCiAgKiBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIGVhY2ggcmVzcG9uc2UgaW9jYiBpbiB0aGUgcmVzcG9uc2UgcmluZyB1bnRpbCBpdAotICogZmluZHMgYW4gaW9jYiB3aXRoIExFIGJpdCBzZXQgYW5kIGNoYWlucyBhbGwgdGhlIGlvY2JzIHVwdG8gdGhlIGlvY2Igd2l0aAorICogZmluZHMgYW4gaW9jYiB3aXRoIExFIGJpdCBzZXQgYW5kIGNoYWlucyBhbGwgdGhlIGlvY2JzIHVwIHRvIHRoZSBpb2NiIHdpdGgKICAqIExFIGJpdCBzZXQuIFRoZSBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgY29tbWFuZCBpb2NiCiAgKiBpZiB0aGUgcmVzcG9uc2UgaW9jYiBpbmRpY2F0ZXMgYSBjb21wbGV0aW9uIGZvciBhIGNvbW1hbmQgaW9jYiBvciBpdCBpcwogICogYW4gYWJvcnQgY29tcGxldGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgY2FsbCBscGZjX3NsaV9wcm9jZXNzX3Vuc29sX2lvY2IKQEAgLTUxMTcsNyArNTExNyw3IEBACiAKIAkvKiBTZXR0aW5nIHN0YXRlIHVua25vd24gc28gbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nCiAJICogd291bGQgZ2V0IElPQ0JfRVJST1IgZnJvbSBscGZjX3NsaV9pc3N1ZV9pb2NiLCBhbGxvd2luZwotCSAqIGl0IHRvIGZhaWwgYWxsIG91c3RhbmRpbmcgU0NTSSBJTy4KKwkgKiBpdCB0byBmYWlsIGFsbCBvdXRzdGFuZGluZyBTQ1NJIElPLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPnBwb3J0LT53b3JrX3BvcnRfbG9jayk7CiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgJj0gfldPUktFUl9NQk9YX1RNTzsKQEAgLTYwMzEsNyArNjAzMSw3IEBACiB9CiAKIC8qKgotICogbHBmY19tYm94X2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBtYm94IGFwaSBmdWNudGlvbiBqdW1wIHRhYmxlCisgKiBscGZjX21ib3hfYXBpX3RhYmxlX3NldHVwIC0gU2V0IHVwIG1ib3ggYXBpIGZ1bmN0aW9uIGp1bXAgdGFibGUKICAqIEBwaGJhOiBUaGUgaGJhIHN0cnVjdCBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgogICogQGRldl9ncnA6IFRoZSBIQkEgUENJLURldmljZSBncm91cCBudW1iZXIuCiAgKgpAQCAtNjg0Nyw3ICs2ODQ3LDcgQEAKIH0KIAogLyoqCi0gKiBscGZjX3NsaV9hcGlfdGFibGVfc2V0dXAgLSBTZXQgdXAgc2xpIGFwaSBmdWNudGlvbiBqdW1wIHRhYmxlCisgKiBscGZjX3NsaV9hcGlfdGFibGVfc2V0dXAgLSBTZXQgdXAgc2xpIGFwaSBmdW5jdGlvbiBqdW1wIHRhYmxlCiAgKiBAcGhiYTogVGhlIGhiYSBzdHJ1Y3QgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KICAqIEBkZXZfZ3JwOiBUaGUgSEJBIFBDSS1EZXZpY2UgZ3JvdXAgbnVtYmVyLgogICoKQEAgLTc1MjEsNyArNzUyMSw3IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICptcCwgKm5leHRfbXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqc2xwID0gJnByaW5nLT5wb3N0YnVmcTsKIAotCS8qIFNlYXJjaCBwb3N0YnVmcSwgZnJvbSB0aGUgYmVnaW5pbmcsIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb24gdGFnICovCisJLyogU2VhcmNoIHBvc3RidWZxLCBmcm9tIHRoZSBiZWdpbm5pbmcsIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb24gdGFnICovCiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wLCBuZXh0X21wLCAmcHJpbmctPnBvc3RidWZxLCBsaXN0KSB7CiAJCWlmIChtcC0+YnVmZmVyX3RhZyA9PSB0YWcpIHsKQEAgLTc1NjUsNyArNzU2NSw3IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICptcCwgKm5leHRfbXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqc2xwID0gJnByaW5nLT5wb3N0YnVmcTsKIAotCS8qIFNlYXJjaCBwb3N0YnVmcSwgZnJvbSB0aGUgYmVnaW5pbmcsIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb24gcGh5cyAqLworCS8qIFNlYXJjaCBwb3N0YnVmcSwgZnJvbSB0aGUgYmVnaW5uaW5nLCBsb29raW5nIGZvciBhIG1hdGNoIG9uIHBoeXMgKi8KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXAsIG5leHRfbXAsICZwcmluZy0+cG9zdGJ1ZnEsIGxpc3QpIHsKIAkJaWYgKG1wLT5waHlzID09IHBoeXMpIHsKQEAgLTg0MzgsNyArODQzOCw3IEBACiAgKiBmb3IgcG9zc2libGUgZXJyb3IgYXR0ZW50aW9uIGV2ZW50cy4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGhvc3Rsb2NrCiAgKiB3aXRoIHNwaW5fbG9ja19pcnEoKS4KICAqCi0gKiBUaGlzIGZ1Y250aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIEVycm9yIEF0dGVudGlvbiBpbiB0aGUgSG9zdCBBdHRlbnRpb24KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIHdoZW4gdGhlcmUgaXMgRXJyb3IgQXR0ZW50aW9uIGluIHRoZSBIb3N0IEF0dGVudGlvbgogICogUmVnaXN0ZXIgYW5kIHJldHVybnMgMCBvdGhlcndpc2UuCiAgKiovCiBzdGF0aWMgaW50CkBAIC04NDkxLDcgKzg0OTEsNyBAQAogICogZm9yIHBvc3NpYmxlIGVycm9yIGF0dGVudGlvbiBldmVudHMuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBob3N0bG9jawogICogd2l0aCBzcGluX2xvY2tfaXJxKCkuCiAgKgotICogVGhpcyBmdWNudGlvbiByZXR1cm5zIDEgd2hlbiB0aGVyZSBpcyBFcnJvciBBdHRlbnRpb24gaW4gdGhlIEhvc3QgQXR0ZW50aW9uCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIEVycm9yIEF0dGVudGlvbiBpbiB0aGUgSG9zdCBBdHRlbnRpb24KICAqIFJlZ2lzdGVyIGFuZCByZXR1cm5zIDAgb3RoZXJ3aXNlLgogICoqLwogc3RhdGljIGludApAQCAtODU4MSw3ICs4NTgxLDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGltZXIgc29mdCBpbnRlcnJ1cHQgY29udGV4dCB0byBjaGVjayBIQkEncwogICogZXJyb3IgYXR0ZW50aW9uIHJlZ2lzdGVyIGJpdCBmb3IgZXJyb3IgYXR0ZW50aW9uIGV2ZW50cy4KICAqCi0gKiBUaGlzIGZ1Y250aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIEVycm9yIEF0dGVudGlvbiBpbiB0aGUgSG9zdCBBdHRlbnRpb24KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIHdoZW4gdGhlcmUgaXMgRXJyb3IgQXR0ZW50aW9uIGluIHRoZSBIb3N0IEF0dGVudGlvbgogICogUmVnaXN0ZXIgYW5kIHJldHVybnMgMCBvdGhlcndpc2UuCiAgKiovCiBpbnQKQEAgLTk2ODQsNyArOTY4NCw3IEBACiAgKiBAY3E6IFBvaW50ZXIgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUuCiAgKiBAd2NxZTogUG9pbnRlciB0byBhIGNvbXBsZXRpb24gcXVldWUgZW50cnkuCiAgKgotICogVGhpcyByb3V0aW5lIHByb2Nlc3MgYSBzbG93LXBhdGggd29yay1xdWV1ZSBvciByZWNpZXZlIHF1ZXVlIGNvbXBsZXRpb24gcXVldWUKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzIGEgc2xvdy1wYXRoIHdvcmstcXVldWUgb3IgcmVjZWl2ZSBxdWV1ZSBjb21wbGV0aW9uIHF1ZXVlCiAgKiBlbnRyeS4KICAqCiAgKiBSZXR1cm46IHRydWUgaWYgd29yayBwb3N0ZWQgdG8gd29ya2VyIHRocmVhZCwgb3RoZXJ3aXNlIGZhbHNlLgpAQCAtMTI5NzEsNyArMTI5NzEsNyBAQAogICogcmVjb3JkIGFuZCBwcm9jZXNzaW5nIGl0IG9uZSBhdCBhIHRpbWUgc3RhcnRpbmcgZnJvbSB0aGUgQGZjZl9pbmRleAogICogZm9yIGluaXRpYWwgRkNGIGRpc2NvdmVyeSBvciBmYXN0IEZDRiBmYWlsb3ZlciByZWRpc2NvdmVyeS4KICAqCi0gKiBSZXR1cm4gMCBpZiB0aGUgbWFpbGJveCBjb21tYW5kIGlzIHN1Ym1pdHRlZCBzdWNlc3NmdWxseSwgbm9uZSAwCisgKiBSZXR1cm4gMCBpZiB0aGUgbWFpbGJveCBjb21tYW5kIGlzIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHksIG5vbmUgMAogICogb3RoZXJ3aXNlLgogICoqLwogaW50CkBAIC0xMzAzMiw3ICsxMzAzMiw3IEBACiAgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byByZWFkIGFuIEZDRiByZWNvcmQgaW5kaWNhdGVkIGJ5IEBmY2ZfaW5kZXgKICAqIGFuZCB0byB1c2UgaXQgZm9yIEZMT0dJIHJvdW5kcm9iaW4gRkNGIGZhaWxvdmVyLgogICoKLSAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Vzc2Z1bGx5LCBub25lIDAKKyAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSwgbm9uZSAwCiAgKiBvdGhlcndpc2UuCiAgKiovCiBpbnQKQEAgLTEzMDc4LDcgKzEzMDc4LDcgQEAKICAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlYWQgYW4gRkNGIHJlY29yZCBpbmRpY2F0ZWQgYnkgQGZjZl9pbmRleCB0bwogICogZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBlbGlnaWJsZSBmb3IgRkxPR0kgcm91bmRyb2JpbiBmYWlsb3ZlciBsaXN0LgogICoKLSAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Vzc2Z1bGx5LCBub25lIDAKKyAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSwgbm9uZSAwCiAgKiBvdGhlcndpc2UuCiAgKiovCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKaW5kZXggYzIxMjY5NC4uZjI2ODRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCiAJYWRhcHRlci0+aG9zdC0+bWF4X2lkID0gMTY7CS8qIG1heCB0YXJnZXRzIHBlciBjaGFubmVsICovCiAKLQlhZGFwdGVyLT5ob3N0LT5tYXhfbHVuID0gNzsJLyogVXB0byA3IGx1bnMgZm9yIG5vbiBkaXNrIGRldmljZXMgKi8KKwlhZGFwdGVyLT5ob3N0LT5tYXhfbHVuID0gNzsJLyogVXAgdG8gNyBsdW5zIGZvciBub24gZGlzayBkZXZpY2VzICovCiAKIAlhZGFwdGVyLT5ob3N0LT5jbWRfcGVyX2x1biA9IG1heF9jbWRfcGVyX2x1bjsKIApAQCAtMzczNCw3ICszNzM0LDcgQEAKIAkgKiBjaGVjayBpcyB0aGUgYXBwbGljYXRpb24gY29uZm9ybXMgdG8gTklULiBXZSBkbyBub3QgaGF2ZSB0byBkbyBtdWNoCiAJICogaW4gdGhhdCBjYXNlLgogCSAqIFdlIGV4cGxvaXQgdGhlIGZhY3QgdGhhdCB0aGUgc2lnbmF0dXJlIGlzIHN0b3JlZCBpbiB0aGUgdmVyeQotCSAqIGJlZ2luaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuCisJICogYmVnaW5uaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuCiAJICovCiAKIAlpZiggY29weV9mcm9tX3VzZXIoc2lnbmF0dXJlLCBhcmcsIDcpICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKaW5kZXggODUzNDExOS4uOWE3ODk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKQEAgLTUzMiw5ICs1MzIsOSBAQAogCiAvKgogICogc3RydWN0IG1jb250cm9sbGVyIGlzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udHJvbGxlcnMgaW4gdGhlCi0gKiBzeXN0ZW0uIEl0cyB1cHRvIHRoZSBhcHBsaWNhdGlvbiBob3cgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbi4gV2UgYXJlIHBhc3NpbmcKKyAqIHN5c3RlbS4gSXRzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiBob3cgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbi4gV2UgYXJlIHBhc3NpbmcKICAqIGFzIG11Y2ggaW5mbyBhYm91dCB0aGUgY2FyZHMgYXMgcG9zc2libGUgYW5kIHVzZWZ1bC4gQmVmb3JlIGlzc3VpbmcgdGhlCi0gKiBjYWxsIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhcmRzLCB0aGUgYXBwbGljYWl0b24gbmVlZHMgdG8gaXNzdWUgYQorICogY2FsbCB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXJkcywgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGlzc3VlIGEKICAqIGlvY3RsIGZpcnN0IHRvIGZpbmQgb3V0IHRoZSBudW1iZXIgb2YgY29udHJvbGxlcnMgaW4gdGhlIHN5c3RlbS4KICAqLwogI2RlZmluZSBNQVhfQ09OVFJPTExFUlMgMzIKQEAgLTgwNCw3ICs4MDQsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWJhc2U7CiAJdm9pZCBfX2lvbWVtCQkqbW1pb19iYXNlOwogCi0JLyogbWJveDY0IHdpdGggbWJveCBub3QgYWxpZ25lZCBvbiAxNi1ieXRlIGJvdW5kcnkgKi8KKwkvKiBtYm94NjQgd2l0aCBtYm94IG5vdCBhbGlnbmVkIG9uIDE2LWJ5dGUgYm91bmRhcnkgKi8KIAltYm94NjRfdAkqdW5hX21ib3g2NDsKIAlkbWFfYWRkcl90CXVuYV9tYm94NjRfZG1hOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWJveF9kZWZzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWJveF9kZWZzLmgKaW5kZXggY2UyNDg3YS4uZTAxYzZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21ib3hfZGVmcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tYm94X2RlZnMuaApAQCAtNjYwLDcgKzY2MCw3IEBACiAgKiBAbHBhcmFtCTogbG9naWNhbCBkcml2ZXMgcGFyYW1ldGVycwogICogQHNwYW4JOiBzcGFuCiAgKgotICogOC1MRCBsb2dpY2FsIGRyaXZlIHdpdGggdXB0byA4IHNwYW5zCisgKiA4LUxEIGxvZ2ljYWwgZHJpdmUgd2l0aCB1cCB0byA4IHNwYW5zCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlsb2dkcnZfcGFyYW1fdAlscGFyYW07CkBAIC02NzMsNyArNjczLDcgQEAKICAqIEBscGFyYW0JOiBsb2dpY2FsIGRyaXZlcyBwYXJhbWV0ZXJzCiAgKiBAc3Bhbgk6IHNwYW4KICAqCi0gKiA4LUxEIGxvZ2ljYWwgZHJpdmUgd2l0aCB1cHRvIDQgc3BhbnMKKyAqIDgtTEQgbG9naWNhbCBkcml2ZSB3aXRoIHVwIHRvIDQgc3BhbnMKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWxvZ2Rydl9wYXJhbV90CWxwYXJhbTsKQEAgLTcyMCw3ICs3MjAsNyBAQAogICogQGxkcnYJOiBsb2dpY2FsIGRyaXZlcyBpbmZvcm1hdGlvbgogICogQHBkcnYJOiBwaHlzaWNhbCBkcml2ZXMgaW5mb3JtYXRpb24KICAqCi0gKiBEaXNrIGFycmF5IGZvciA4TEQgbG9naWNhbCBkcml2ZXMgd2l0aCB1cHRvIDggc3BhbnMKKyAqIERpc2sgYXJyYXkgZm9yIDhMRCBsb2dpY2FsIGRyaXZlcyB3aXRoIHVwIHRvIDggc3BhbnMKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQ4X3QJCQludW1sZHJ2OwpAQCAtNzM3LDcgKzczNyw3IEBACiAgKiBAbGRydgk6IGxvZ2ljYWwgZHJpdmVzIGluZm9ybWF0aW9uCiAgKiBAcGRydgk6IHBoeXNpY2FsIGRyaXZlcyBpbmZvcm1hdGlvbgogICoKLSAqIERpc2sgYXJyYXkgZm9yIDhMRCBsb2dpY2FsIGRyaXZlcyB3aXRoIHVwdG8gNCBzcGFucworICogRGlzayBhcnJheSBmb3IgOExEIGxvZ2ljYWwgZHJpdmVzIHdpdGggdXAgdG8gNCBzcGFucwogICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJdWludDhfdAkJCW51bWxkcnY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwppbmRleCA1NzA4Y2IyLi4xZGJhMzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKQEAgLTI2ODksNyArMjY4OSw3IEBACiAJCQkJKE1CT1hfUkVTRVRfV0FJVCArIE1CT1hfUkVTRVRfRVhUX1dBSVQpIC0gaSkpOwogCQl9CiAKLQkJLy8gYmFpbG91dCBpZiBubyByZWNvdmVyeSBoYXBwZW5kZWQgaW4gcmVzZXQgdGltZQorCQkvLyBiYWlsb3V0IGlmIG5vIHJlY292ZXJ5IGhhcHBlbmVkIGluIHJlc2V0IHRpbWUKIAkJaWYgKGFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHMgPT0gMCkgewogCQkJYnJlYWs7CiAJCX0KQEAgLTM0NTIsNyArMzQ1Miw3IEBACiAgKiBtZWdhcmFpZF9tYm94X3NldHVwX2RldmljZV9tYXAgLSBtYW5hZ2UgZGV2aWNlIGlkcwogICogQGFkYXB0ZXIJOiBEcml2ZXIncyBzb2Z0IHN0YXRlCiAgKgotICogTWFuYW5nZSB0aGUgZGV2aWNlIGlkcyB0byBoYXZlIGFuIGFwcHJvcHJhaXRlIG1hcHBpbmcgYmV0d2VlbiB0aGUga2VybmVsCisgKiBNYW5hbmdlIHRoZSBkZXZpY2UgaWRzIHRvIGhhdmUgYW4gYXBwcm9wcmlhdGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBrZXJuZWwKICAqIHNjc2kgYWRkcmVzc2VzIGFuZCBtZWdhcmFpZCBzY3NpIGFuZCBsb2dpY2FsIGRyaXZlIGFkZHJlc3Nlcy4gV2UgZXhwb3J0CiAgKiBzY3NpIGRldmljZXMgb24gdGhlaXIgYWN0dWFsIGFkZHJlc3Nlcywgd2hlcmVhcyB0aGUgbG9naWNhbCBkcml2ZXMgYXJlCiAgKiBleHBvcnRlZCBvbiBhIHZpcnR1YWwgc2NzaSBjaGFubmVsLgpAQCAtMzk3Myw3ICszOTczLDcgQEAKICAqIE5PVEU6IFRoZSBjb21tYW5kcyBpc3N1YW5jZSBmdW5jdGlvbmFsaXR5IGlzIG5vdCBnZW5lcmFsaXplZCBhbmQKICAqIGltcGxlbWVudGVkIGluIGNvbnRleHQgb2YgImdldCBsZCBtYXAiIGNvbW1hbmQgb25seS4gSWYgcmVxdWlyZWQsIHRoZQogICogY29tbWFuZCBpc3N1YW5jZSBsb2dpY2FsIGNhbiBiZSB0cml2aWFsbHkgcHVsbGVkIG91dCBhbmQgaW1wbGVtZW50ZWQgYXMgYQotICogc3RhbmRhbG9uZSBsaWJhcnkuIEZvciBub3csIHRoaXMgc2hvdWxkIHN1ZmZpY2Ugc2luY2UgdGhlcmUgaXMgbm8gb3RoZXIKKyAqIHN0YW5kYWxvbmUgbGlicmFyeS4gRm9yIG5vdywgdGhpcyBzaG91bGQgc3VmZmljZSBzaW5jZSB0aGVyZSBpcyBubyBvdGhlcgogICogdXNlciBvZiB0aGlzIGludGVyZmFjZS4KICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCmluZGV4IDYzNWIyMjguLjA0NmRjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKQEAgLTEzNDcsNyArMTM0Nyw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgaW9fY29tcGxldGlvbl90aW1lcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGludGVybmFsX3Jlc2V0X3BlbmRpbmdfcTsKIAotCS8qIFB0ciB0byBoYmEgc3BlY2ZpYyBpbmZvcm1hdGlvbiAqLworCS8qIFB0ciB0byBoYmEgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAl2b2lkICpjdHJsX2NvbnRleHQ7CiAJdTgJbXNpX2ZsYWc7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpeGVudHJ5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwppbmRleCBiYmQxMGM4Li42NmQ0Y2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwpAQCAtMTY5OCw3ICsxNjk4LDcgQEAKICAqIG1lZ2FzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcgLQlXYWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgY21kcwogICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciB1cHRvIE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FIHNlY29uZHMgZm9yIEZXIHRvCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciB1cCB0byBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRSBzZWNvbmRzIGZvciBGVyB0bwogICogY29tcGxldGUgYWxsIGl0cyBvdXRzdGFuZGluZyBjb21tYW5kcy4gUmV0dXJucyBlcnJvciBpZiBvbmUgb3IgbW9yZSBJT3MKICAqIGFyZSBwZW5kaW5nIGFmdGVyIHRoaXMgdGltZSBwZXJpb2QuIEl0IGFsc28gbWFya3MgdGhlIGNvbnRyb2xsZXIgZGVhZC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCmluZGV4IDIwZTZiODguLjE2NTQ1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTIxLDcgKzIxLDcgQEAKICAqICAwNS0yMS0wOCAgMDIuMDAuMDUgIEZpeGVkIHR5cG8gaW4gbmFtZSBvZiBNcGkyU2VwUmVxdWVzdF90LgogICogIDEwLTAyLTA4ICAwMi4wMC4wNiAgUmVtb3ZlZCBVbnRhZ2dlZCBhbmQgTm8gRGlzY29ubmVjdCB2YWx1ZXMgZnJvbSBTQ1NJIElPCiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIGZpZWxkIFRhc2sgQXR0cmlidXRlIGZsYWdzLgotICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgdG8gbXBpMi5oIGJlY2FzdWUgdGhleSBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIHRvIG1waTIuaCBiZWNhdXNlIHRoZXkgYXJlCiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21tb24gdG8gbWFueSBzdHJ1Y3R1cmVzLgogICogIDA1LTA2LTA5ICAwMi4wMC4wNyAgQ2hhbmdlZCB0YXNrIG1hbmFnZW1lbnQgdHlwZSBvZiBRdWVyeSBVbml0IEF0dGVudGlvbiB0bwogICogICAgICAgICAgICAgICAgICAgICAgUXVlcnkgQXN5bmNocm9ub3VzIEV2ZW50LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCA1ZTAwMWZmLi4zMzQ2MzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiB9CiAKIC8qKgotICogbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlciAtIGNsZWFyIGludGVydXB0IGNhbGxiYWNrIGhhbmRsZXIKKyAqIG1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIgLSBjbGVhciBpbnRlcnJ1cHQgY2FsbGJhY2sgaGFuZGxlcgogICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KQEAgLTExMTMsNyArMTExMyw3IEBACiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqCiAgKiBDaGVjayB0byBzZWUgaWYgY2FyZCBpcyBjYXBhYmxlIG9mIE1TSVgsIGFuZCBzZXQgbnVtYmVyCi0gKiBvZiBhdmFsaWFibGUgbXNpeCB2ZWN0b3JzCisgKiBvZiBhdmFpbGFibGUgbXNpeCB2ZWN0b3JzCiAgKi8KIHN0YXRpYyBpbnQKIF9iYXNlX2NoZWNrX2VuYWJsZV9tc2l4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKQEAgLTE1OTUsNyArMTU5NSw3IEBACiAKIAogLyoqCi0gKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkgLSBzZW5kIFRhc2sgTWFuYWdtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eSAtIHNlbmQgVGFzayBNYW5hZ2VtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKICAqCkBAIC0yNTk5LDcgKzI1OTksNyBAQAogCQlpbnRfc3RhdHVzID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CiAJCWlmIChpbnRfc3RhdHVzICYgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMpIHsKIAkJCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgotCQkJICAgICJzdWNjZXNzZnVsbCBjb3VudCglZCksIHRpbWVvdXQoJWQpXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgInN1Y2Nlc3NmdWwgY291bnQoJWQpLCB0aW1lb3V0KCVkKVxuIiwgaW9jLT5uYW1lLAogCQkJICAgIF9fZnVuY19fLCBjb3VudCwgdGltZW91dCkpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTI2NDAsNyArMjY0MCw3IEBACiAJCWludF9zdGF0dXMgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKIAkJaWYgKCEoaW50X3N0YXR1cyAmIE1QSTJfSElTX1NZUzJJT0NfREJfU1RBVFVTKSkgewogCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCi0JCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICAic3VjY2Vzc2Z1bCBjb3VudCglZCksIHRpbWVvdXQoJWQpXG4iLCBpb2MtPm5hbWUsCiAJCQkgICAgX19mdW5jX18sIGNvdW50LCB0aW1lb3V0KSk7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIGlmIChpbnRfc3RhdHVzICYgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMpIHsKQEAgLTI2ODgsNyArMjY4OCw3IEBACiAJCWRvb3JiZWxsX3JlZyA9IHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKIAkJaWYgKCEoZG9vcmJlbGxfcmVnICYgTVBJMl9ET09SQkVMTF9VU0VEKSkgewogCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCi0JCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICAic3VjY2Vzc2Z1bCBjb3VudCglZCksIHRpbWVvdXQoJWQpXG4iLCBpb2MtPm5hbWUsCiAJCQkgICAgX19mdW5jX18sIGNvdW50LCB0aW1lb3V0KSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggNmFmZDY3Yi4uNjg2MTI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC05Myw3ICs5Myw3IEBACiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lCiAgKiBDb250ZXh0OiBub25lLgogICoKLSAqIEZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGRlYnVnIGluZm8gaGVscGZ1bGwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCisgKiBGdW5jdGlvbiBmb3IgZGlzcGxheWluZyBkZWJ1ZyBpbmZvIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCiAgKiBpbiB0aGlzIG1vZHVsZS4KICAqLwogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCmluZGV4IGU5MmI3N2EuLmQ3MmYxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lCiAgKiBDb250ZXh0OiBub25lLgogICoKLSAqIEZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGRlYnVnIGluZm8gaGVscGZ1bGwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCisgKiBGdW5jdGlvbiBmb3IgZGlzcGxheWluZyBkZWJ1ZyBpbmZvIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCiAgKiBpbiB0aGlzIG1vZHVsZS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTY4OCw2ICs2ODgsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyogQ2hlY2sgZm9yIG92ZXJmbG93IGFuZCB3cmFwYXJvdW5kICovCisJaWYgKGthcmcuZGF0YV9zZ2Vfb2Zmc2V0ICogNCA+IGlvYy0+cmVxdWVzdF9zeiB8fAorCSAgICBrYXJnLmRhdGFfc2dlX29mZnNldCA+IChVSU5UX01BWCAvIDQpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIGNvcHkgaW4gcmVxdWVzdCBtZXNzYWdlIGZyYW1lIGZyb20gdXNlciAqLwogCWlmIChjb3B5X2Zyb21fdXNlcihtcGlfcmVxdWVzdCwgbWYsIGthcmcuZGF0YV9zZ2Vfb2Zmc2V0KjQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLApAQCAtMTk2Myw3ICsxOTcwLDcgQEAKIAlNcGkyRGlhZ0J1ZmZlclBvc3RSZXBseV90ICptcGlfcmVwbHk7CiAJaW50IHJjLCBpOwogCXU4IGJ1ZmZlcl90eXBlOwotCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdCwgcmVxdWVzdF9zaXplLCBjb3B5X3NpemU7CiAJdTE2IHNtaWQ7CiAJdTE2IGlvY19zdGF0dXM7CiAJdTggaXNzdWVfcmVzZXQgPSAwOwpAQCAtMTk5OSw2ICsyMDA2LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcmVxdWVzdF9zaXplID0gaW9jLT5kaWFnX2J1ZmZlcl9zeltidWZmZXJfdHlwZV07CisKIAlpZiAoKGthcmcuc3RhcnRpbmdfb2Zmc2V0ICUgNCkgfHwgKGthcmcuYnl0ZXNfdG9fcmVhZCAlIDQpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBlaXRoZXIgdGhlIHN0YXJ0aW5nX29mZnNldCAiCiAJCSAgICAib3IgYnl0ZXNfdG9fcmVhZCBhcmUgbm90IDQgYnl0ZSBhbGlnbmVkXG4iLCBpb2MtPm5hbWUsCkBAIC0yMDA2LDEzICsyMDE1LDIzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChrYXJnLnN0YXJ0aW5nX29mZnNldCA+IHJlcXVlc3Rfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlkaWFnX2RhdGEgPSAodm9pZCAqKShyZXF1ZXN0X2RhdGEgKyBrYXJnLnN0YXJ0aW5nX29mZnNldCk7CiAJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZGlhZ19idWZmZXIoJXApLCAiCiAJICAgICJvZmZzZXQoJWQpLCBzeiglZClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCiAJICAgIGRpYWdfZGF0YSwga2FyZy5zdGFydGluZ19vZmZzZXQsIGthcmcuYnl0ZXNfdG9fcmVhZCkpOwogCisJLyogVHJ1bmNhdGUgZGF0YSBvbiByZXF1ZXN0cyB0aGF0IGFyZSB0b28gbGFyZ2UgKi8KKwlpZiAoKGRpYWdfZGF0YSArIGthcmcuYnl0ZXNfdG9fcmVhZCA8IGRpYWdfZGF0YSkgfHwKKwkgICAgKGRpYWdfZGF0YSArIGthcmcuYnl0ZXNfdG9fcmVhZCA+IHJlcXVlc3RfZGF0YSArIHJlcXVlc3Rfc2l6ZSkpCisJCWNvcHlfc2l6ZSA9IHJlcXVlc3Rfc2l6ZSAtIGthcmcuc3RhcnRpbmdfb2Zmc2V0OworCWVsc2UKKwkJY29weV9zaXplID0ga2FyZy5ieXRlc190b19yZWFkOworCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKil1YXJnLT5kaWFnbm9zdGljX2RhdGEsCi0JICAgIGRpYWdfZGF0YSwga2FyZy5ieXRlc190b19yZWFkKSkgeworCSAgICBkaWFnX2RhdGEsIGNvcHlfc2l6ZSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IFVuYWJsZSB0byB3cml0ZSAiCiAJCSAgICAibXB0X2RpYWdfcmVhZF9idWZmZXJfdCBkYXRhIEAgJXBcbiIsIGlvYy0+bmFtZSwKIAkJICAgIF9fZnVuY19fLCBkaWFnX2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IDZjZWI3NzUuLmQyMDY0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogICogQGlzX3JhaWQ6IFtmbGFnXSAxID0gcmFpZCBvYmplY3QsIDAgPSBzYXMgb2JqZWN0CiAgKgogICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZGV2aWNlIHNob3VsZCBiZSBmaXJzdCByZXBvcnRlZCBkZXZpY2UgdG8KLSAqIHRvIHNjc2ktbWwgb3Igc2FzIHRyYW5zcG9ydCwgdGhpcyBwdXJwb3NlIGlzIGZvciBwZXJzaXN0YW50IGJvb3QgZGV2aWNlLgorICogdG8gc2NzaS1tbCBvciBzYXMgdHJhbnNwb3J0LCB0aGlzIHB1cnBvc2UgaXMgZm9yIHBlcnNpc3RlbnQgYm9vdCBkZXZpY2UuCiAgKiBUaGVyZSBhcmUgcHJpbWFyeSwgYWx0ZXJuYXRlLCBhbmQgY3VycmVudCBlbnRyaWVzIGluIGJpb3MgcGFnZSAyLiBUaGUgb3JkZXIKICAqIHByaW9yaXR5IGlzIHByaW1hcnksIGFsdGVybmF0ZSwgdGhlbiBjdXJyZW50LiAgVGhpcyByb3V0aW5lIHNhdmVzCiAgKiB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2Ugb2JqZWN0IGFuZCBpc19yYWlkIGZsYWcgaW4gdGhlIGlvYyBvYmplY3QuCkBAIC0yNjcxLDEwICsyNjcxLDEwIEBACiAgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCiAgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KICAqCi0gKiBUaGlzIGNvZGUgaXMgdG8gaW5pdGlhdGUgdGhlIGRldmljZSByZW1vdmFsIGhhbmRzaGFrZSBwcm90b2NhbAorICogVGhpcyBjb2RlIGlzIHRvIGluaXRpYXRlIHRoZSBkZXZpY2UgcmVtb3ZhbCBoYW5kc2hha2UgcHJvdG9jb2wKICAqIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBpc3N1ZSB0YXJnZXQgcmVzZXQKICAqIHVzaW5nIGhpZ2ggcHJpb3JpdHkgcmVxdWVzdCBxdWV1ZS4gIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQKLSAqIGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpIGZyb20gdGhpcyBjb21wbGV0aW9uLgorICogY29udHJvbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKSBmcm9tIHRoaXMgY29tcGxldGlvbi4KICAqCiAgKiBUaGlzIGlzIGRlc2lnbmVkIHRvIHNlbmQgbXVsaXBsZSB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCBhdCB0aGUgc2FtZQogICogdGltZSB0byB0aGUgZmlmby4gSWYgdGhlIGZpZm8gaXMgZnVsbCwgd2Ugd2lsbCBhcHBlbmQgdGhlIHJlcXVlc3QsCkBAIC0yNzQ5LDkgKzI3NDksOSBAQAogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KICAqCi0gKiBUaGlzIGlzIHRoZSBzYXMgaW91bml0IGNvbnRyb2xsIGNvbXBsZXRpb24gcm91dGluZS4KKyAqIFRoaXMgaXMgdGhlIHNhcyBpb3VuaXQgY29udHJvbCBjb21wbGV0aW9uIHJvdXRpbmUuCiAgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKLSAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKiBoYW5kc2hha2UgcHJvdG9jb2wgd2l0aCBjb250cm9sbGVyIGZpcm13YXJlLgogICoKICAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CiAgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgpAQCAtMjg3OCw4ICsyODc4LDggQEAKICAqCiAgKiBUaGlzIGlzIHRoZSB0YXJnZXQgcmVzZXQgY29tcGxldGlvbiByb3V0aW5lLgogICogVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvZGUgdG8gaW5pdGlhdGUgdGhlIGRldmljZSByZW1vdmFsCi0gKiBoYW5kc2hha2UgcHJvdG9jYWwgd2l0aCBjb250cm9sbGVyIGZpcm13YXJlLgotICogSXQgd2lsbCBzZW5kIGEgc2FzIGlvdW5pdCBjb250cm9sbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKQorICogaGFuZHNoYWtlIHByb3RvY29sIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4KKyAqIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQgY29udHJvbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKQogICoKICAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CiAgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgpAQCAtMjk4NCw3ICsyOTg0LDcgQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgYWRkZWQgdG8gYmV0dGVyIGhhbmRsZSBjYWJsZSBicmVha2VyLgogICoKLSAqIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBkcml2ZXIgcmVjaWV2ZXMgbXVsdGlwbGUgZXhwYW5kZXIKKyAqIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBkcml2ZXIgcmVjZWl2ZXMgbXVsdGlwbGUgZXhwYW5kZXIKICAqIGFkZCBhbmQgZGVsZXRlIGV2ZW50cyBpbiBhIHNpbmdsZSBzaG90LiAgV2hlbiB0aGVyZSBpcyBhIGRlbGV0ZSBldmVudAogICogdGhlIHJvdXRpbmUgd2lsbCB2b2lkIGFueSBwZW5kaW5nIGFkZCBldmVudHMgd2FpdGluZyBpbiB0aGUgZXZlbnQgcXVldWUuCiAgKgpAQCAtMzUxMSw3ICszNTExLDcgQEAKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogLyoqCi0gKiBfc2NzaWhfc2NzaV9pb2NfaW5mbyAtIHRyYW5zbGF0ZWQgbm9uLXN1Y2Nlc3NmdWxsIFNDU0lfSU8gcmVxdWVzdAorICogX3Njc2loX3Njc2lfaW9jX2luZm8gLSB0cmFuc2xhdGVkIG5vbi1zdWNjZXNzZnVsIFNDU0lfSU8gcmVxdWVzdAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKQEAgLTUxMzgsNyArNTEzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcjsKIAotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYnJvYWRjYXN0IHByaW1hdGl2ZTogIgorCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYnJvYWRjYXN0IHByaW1pdGl2ZTogIgogCSAgICAicGh5IG51bWJlciglZCksIHdpZHRoKCVkKVxuIiwgaW9jLT5uYW1lLCBldmVudF9kYXRhLT5QaHlOdW0sCiAJICAgIGV2ZW50X2RhdGEtPlBvcnRXaWR0aCkpOwogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYwppbmRleCA0NmNjMzgyLi44MzVkOGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCkBAIC0yNjc5LDcgKzI2NzksNyBAQAogfS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwgUkVTRUxfVEFHID4tLS0tLS0tLS0tLS0tLS0tLS0tKi8sewogCS8qCiAJKioJUmVhZCBJREVOVElGWSArIFNJTVBMRSArIFRBRyB1c2luZyBhIHNpbmdsZSBNT1ZFLgotCSoqCUFncmVzc2l2ZSBvcHRpbWl6YXRpb24sIGlzJ250IGl0PworCSoqCUFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpcydudCBpdD8KIAkqKglObyBuZWVkIHRvIHRlc3QgdGhlIFNJTVBMRSBUQUcgbWVzc2FnZSwgc2luY2UgdGhlIAogCSoqCWRyaXZlciBvbmx5IHN1cHBvcnRzIGNvbmZvcm1hbnQgZGV2aWNlcyBmb3IgdGFncy4gOy0pCiAJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jIGIvZHJpdmVycy9zY3NpL25zcDMyLmMKaW5kZXggNmI4YjAyMS4uZjZhNTBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL25zcDMyLmMKKysrIGIvZHJpdmVycy9zY3NpL25zcDMyLmMKQEAgLTEyODgsNyArMTI4OCw3IEBACiAJCQluc3AzMl9kYmcoTlNQMzJfREVCVUdfSU5UUiwgIlNTQUNLPTB4JWx4IiwgCiAJCQkJICAgIG5zcDMyX3JlYWQ0KGJhc2UsIFNBVkVEX1NBQ0tfQ05UKSk7CiAKLQkJCXNjc2lfc2V0X3Jlc2lkKFNDcG50LCAwKTsgLyogYWxsIGRhdGEgdHJhbnNmZXJlZCEgKi8KKwkJCXNjc2lfc2V0X3Jlc2lkKFNDcG50LCAwKTsgLyogYWxsIGRhdGEgdHJhbnNmZXJyZWQhICovCiAJCX0KIAogCQkvKgpAQCAtMTYzMCw3ICsxNjMwLDcgQEAKIAogCQkJLyoKIAkJCSAqIElmIFNBVkVEU0FDS0NOVCA9PSAwLCBpdCBtZWFucyBTYXZlZERhdGFQb2ludGVyIGlzCi0JCQkgKiBjb21lIGFmdGVyIGRhdGEgdHJhbnNmZXJpbmcuCisJCQkgKiBjb21lIGFmdGVyIGRhdGEgdHJhbnNmZXJyaW5nLgogCQkJICovCiAJCQlpZiAoc19zYWNrbGVuID4gMCkgewogCQkJCS8qCkBAIC0xNzg1LDcgKzE3ODUsNyBAQAogCQkgICB0aGUgaGVhZCBlbGVtZW50IG9mIHRoZSBzZy4gcmVzdGxlbiBpcyBjb3JyZWN0bHkgY2FsY3VsYXRlZC4gKi8KIAl9CiAKLQkvKiBjYWxjdWxhdGUgdGhlIHJlc3QgbGVuZ3RoIGZvciB0cmFuc2ZlcmluZyAqLworCS8qIGNhbGN1bGF0ZSB0aGUgcmVzdCBsZW5ndGggZm9yIHRyYW5zZmVycmluZyAqLwogCXJlc3RsZW4gPSBzZW50bGVuIC0gc19zYWNrbGVuOwogCiAJLyogdXBkYXRlIGFkanVzdGluZyBjdXJyZW50IFNHIHRhYmxlIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbnNwMzIuaCBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCmluZGV4IDk1NjVhY2YuLmMwMjIxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCkBAIC01MDcsNyArNTA3LDcgQEAKIC8qCiAgKiBTQ1NJIFRBUkdFVC9MVU4gZGVmaW5pdGlvbgogICovCi0jZGVmaW5lIE5TUDMyX0hPU1RfU0NTSUlEICAgIDcgIC8qIFNDU0kgaW5pdGlhdG9yIGlzIGV2ZXJ5dGltZSBkZWZpbmVkIGFzIDcgKi8KKyNkZWZpbmUgTlNQMzJfSE9TVF9TQ1NJSUQgICAgNyAgLyogU0NTSSBpbml0aWF0b3IgaXMgZXZlcnkgdGltZSBkZWZpbmVkIGFzIDcgKi8KICNkZWZpbmUgTUFYX1RBUkdFVAkgICAgIDgKICNkZWZpbmUgTUFYX0xVTgkJICAgICA4CS8qIFhYWDogSW4gU1BJMywgbWF4IG51bWJlciBvZiBMVU4gaXMgNjQuICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmMgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCmluZGV4IDUyMWUyMTguLjU4ZjViZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtMTM2Niw3ICsxMzY2LDcgQEAKIC8qIFRoZSB2YWx1ZXMgYmVsb3cgYXJlIGJhc2VkIG9uIHRoZSBPblN0cmVhbSBmcmFtZSBwYXlsb2FkIHNpemUgb2YgMzJLID09IDIqKjE1LAogICogdGhhdCBpcywgT1NTVF9GUkFNRV9TSElGVCArIE9TU1RfU0VDVE9SX1NISUZUIG11c3QgYmUgMTUuIFdpdGggYSBtaW5pbXVtIGJsb2NrCiAgKiBzaXplIG9mIDUxMiBieXRlcywgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlc29sdmUgMzJLLzUxMiA9PSA2NCA9PSAyKio2IHBvc2l0aW9ucwotICogaW5zaWRlIGVhY2ggZnJhbWUuIEZpbmFseSwgT1NTVF9TRUNUT1JfTUFTSyA9PSAyKipPU1NUX0ZSQU1FX1NISUZUIC0gMS4KKyAqIGluc2lkZSBlYWNoIGZyYW1lLiBGaW5hbGx5LCBPU1NUX1NFQ1RPUl9NQVNLID09IDIqKk9TU1RfRlJBTUVfU0hJRlQgLSAxLgogICovCiAjZGVmaW5lIE9TU1RfRlJBTUVfU0hJRlQgIDYKICNkZWZpbmUgT1NTVF9TRUNUT1JfU0hJRlQgOQpAQCAtMzEzMSw3ICszMTMxLDcgQEAKIAkJfQogI2lmIERFQlVHCiAJCWlmIChkZWJ1Z2dpbmcpCi0JCQlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBGbHVzaGluZyAlZCBieXRlcywgVHJhbnNmZXJpbmcgJWQgYnl0ZXMgaW4gJWQgbGJsb2Nrcy5cbiIsCisJCQlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBGbHVzaGluZyAlZCBieXRlcywgVHJhbnNmZXJyaW5nICVkIGJ5dGVzIGluICVkIGxibG9ja3MuXG4iLAogCQkJICAJCQkgbmFtZSwgb2Zmc2V0LCB0cmFuc2ZlciwgYmxrcyk7CiAjZW5kaWYKIApAQCAtMzgxMSw3ICszODExLDcgQEAKIAogCQkJaWYgKHRyYW5zZmVyID09IDApIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAiJXM6VzogTm90aGluZyBjYW4gYmUgdHJhbnNmZXJlZCwgcmVxdWVzdGVkICVaZCwgdGFwZSBibG9jayBzaXplICglZCVjKS5cbiIsCisJCQkJICAiJXM6VzogTm90aGluZyBjYW4gYmUgdHJhbnNmZXJyZWQsIHJlcXVlc3RlZCAlWmQsIHRhcGUgYmxvY2sgc2l6ZSAoJWQlYykuXG4iLAogCQkJICAgCQluYW1lLCBjb3VudCwgU1RwLT5ibG9ja19zaXplIDwgMTAyND8KIAkJCQkJU1RwLT5ibG9ja19zaXplOlNUcC0+YmxvY2tfc2l6ZS8xMDI0LAogCQkJCSAgICAgICAJU1RwLT5ibG9ja19zaXplPDEwMjQ/J2InOidrJyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NzdC5oIGIvZHJpdmVycy9zY3NpL29zc3QuaAppbmRleCAxMWQyNmM1Li5iNGZlYTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb3NzdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9vc3N0LmgKQEAgLTQxMyw3ICs0MTMsNyBAQAogICogQVVYCiAgKi8KIHR5cGVkZWYgc3RydWN0IG9zX2F1eF9zIHsKLSAgICAgICAgX19iZTMyICAgICAgICAgIGZvcm1hdF9pZDsgICAgICAgICAgICAgIC8qIGhhcmR3YXJlIGNvbXBhYmlsaXR5IEFVWCBpcyBiYXNlZCBvbiAqLworICAgICAgICBfX2JlMzIgICAgICAgICAgZm9ybWF0X2lkOyAgICAgICAgICAgICAgLyogaGFyZHdhcmUgY29tcGF0aWJpbGl0eSBBVVggaXMgYmFzZWQgb24gKi8KICAgICAgICAgY2hhciAgICAgICAgICAgIGFwcGxpY2F0aW9uX3NpZ1s0XTsgICAgIC8qIGRyaXZlciB1c2VkIHRvIHdyaXRlIHRoaXMgbWVkaWEgKi8KICAgICAgICAgX19iZTMyICAgICAgICAgIGhkd3I7ICAgICAgICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCiAgICAgICAgIF9fYmUzMiAgICAgICAgICB1cGRhdGVfZnJhbWVfY250cjsgICAgICAvKiBmb3IgY29uZmlndXJhdGlvbiBmcmFtZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggYmUzZjMzZC4uNTRiZGY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC03NDIsNyArNzQyLDcgQEAKIAogCQlyZXMgPSBuc3BfZmlmb19jb3VudChTQ3BudCkgLSBvY291bnQ7CiAJCS8vbnNwX2RiZyhOU1BfREVCVUdfREFUQV9JTywgInB0cj0weCVwIHRoaXM9MHgleCBvY291bnQ9MHgleCByZXM9MHgleCIsIFNDcG50LT5TQ3AucHRyLCBTQ3BudC0+U0NwLnRoaXNfcmVzaWR1YWwsIG9jb3VudCwgcmVzKTsKLQkJaWYgKHJlcyA9PSAwKSB7IC8qIGlmIHNvbWUgZGF0YSBhdmlsYWJsZSA/ICovCisJCWlmIChyZXMgPT0gMCkgeyAvKiBpZiBzb21lIGRhdGEgYXZhaWxhYmxlID8gKi8KIAkJCWlmIChzdGF0ID09IEJVU1BIQVNFX0RBVEFfSU4pIHsgLyogcGhhc2UgY2hhbmdlZD8gKi8KIAkJCQkvL25zcF9kYmcoTlNQX0RFQlVHX0RBVEFfSU8sICIgd2FpdCBmb3IgZGF0YSB0aGlzPSVkIiwgU0NwbnQtPlNDcC50aGlzX3Jlc2lkdWFsKTsKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKaW5kZXggMThiNmM1NS4uOGI3ZGIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCiAvKioKICAqIGJhcjRfc2hpZnQgLSBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gc2hpZnQgQkFSIGJhc2UgYWRkcmVzcwotICogQHBtODAwMV9oYSA6IG91ciBoYmEgY2FyZCBpbmZvbWF0aW9uCisgKiBAcG04MDAxX2hhIDogb3VyIGhiYSBjYXJkIGluZm9ybWF0aW9uCiAgKiBAc2hpZnRWYWx1ZSA6IHNoaWZ0aW5nIHZhbHVlIGluIG1lbW9yeSBiYXIuCiAgKi8KIHN0YXRpYyBpbnQgYmFyNF9zaGlmdChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEsIHUzMiBzaGlmdFZhbHVlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmggYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaAppbmRleCA4MzNhNTIwLi45MDkxMzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaAorKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaApAQCAtMjA5LDcgKzIwOSw3IEBACiAKIC8qCiAgKiBicmllZiB0aGUgZGF0YSBzdHJ1Y3R1cmUgb2YgU0FUQSBDb21wbGV0aW9uIFJlc3BvbnNlCi0gKiB1c2UgdG8gZGlzY3JpYmUgdGhlIHNhdGEgdGFzayByZXNwb25zZSAoNjQgYnl0ZXMpCisgKiB1c2UgdG8gZGVzY3JpYmUgdGhlIHNhdGEgdGFzayByZXNwb25zZSAoNjQgYnl0ZXMpCiAgKi8KIHN0cnVjdCBzYXRhX2NvbXBsZXRpb25fcmVzcCB7CiAJX19sZTMyCXRhZzsKQEAgLTk1MSw3ICs5NTEsNyBAQAogI2RlZmluZSBQQ0lFX0VWRU5UX0lOVEVSUlVQVAkJMHgwMDMwNDQKICNkZWZpbmUgUENJRV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFCTB4MDAzMDQ4CiAjZGVmaW5lIFBDSUVfRVJST1JfSU5URVJSVVBUCQkweDAwMzA0QwotLyogc2lnbmF0dXJlIGRlZmludGlvbiBmb3IgaG9zdCBzY3JhdGNoIHBhZDAgcmVnaXN0ZXIgKi8KKy8qIHNpZ25hdHVyZSBkZWZpbml0aW9uIGZvciBob3N0IHNjcmF0Y2ggcGFkMCByZWdpc3RlciAqLwogI2RlZmluZSBTUENfU09GVF9SRVNFVF9TSUdOQVRVUkUJMHgyNTJhY2JjZAogLyogU2lnbmF0dXJlIGZvciBTb2Z0IFJlc2V0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKaW5kZXggYmRiNmIyNy4uYWEwNWU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKQEAgLTQ0NSw3ICs0NDUsNyBAQAogc3RydWN0IGZ3X2NvbnRyb2xfZXggewogCXN0cnVjdCBmd19jb250cm9sX2luZm8gKmZ3X2NvbnRyb2w7CiAJdm9pZAkJCSpidWZmZXI7Lyoga2VlcCBidWZmZXIgcG9pbnRlciB0byBiZQotCWZyZWVkIHdoZW4gdGhlIHJlc3BvbmNlIGNvbWVzKi8KKwlmcmVlZCB3aGVuIHRoZSByZXNwb25zZSBjb21lcyovCiAJdm9pZAkJCSp2aXJ0QWRkcjsvKiBrZWVwIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZGF0YSAqLwogCXZvaWQJCQkqdXNyQWRkcjsvKiBrZWVwIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUKIAl1c2VyIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCmluZGV4IGJjZjg1OGUuLjdmNjM2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAgKiBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZSAtIENvbmZpZ3VyZXMgYSBTQ1NJIGRldmljZQogICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKICAqCi0gKiBUaGlzIGZ1Y250aW9uIGlzIGV4ZWN1dGVkIGJ5IFNDU0kgbWlkIGxheWVyIGp1c3QgYWZ0ZXIgYSBkZXZpY2UgaXMgZmlyc3QKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYnkgU0NTSSBtaWQgbGF5ZXIganVzdCBhZnRlciBhIGRldmljZSBpcyBmaXJzdAogICogc2Nhbm5lZCAoaS5lLiBpdCBoYXMgcmVzcG9uZGVkIHRvIGFuIElOUVVJUlkpLiBGb3IgVlNFVCByZXNvdXJjZXMsIHRoZQogICogdGltZW91dCB2YWx1ZSAoZGVmYXVsdCAzMHMpIHdpbGwgYmUgb3Zlci13cml0dGVuIHRvIGEgaGlnaGVyIHZhbHVlICg2MHMpCiAgKiBhbmQgbWF4X3NlY3RvcnMgdmFsdWUgd2lsbCBiZSBvdmVyLXdyaXR0ZW4gdG8gNTEyLiBJdCBhbHNvIHNldHMgcXVldWUgZGVwdGgKQEAgLTIxMjIsNyArMjEyMiw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBtb3N0IG9mIHRoZSBzdGVwcyByZXF1aXJlZCBmb3IgSU9BIHJlc2V0LiBUaGlzIGdldHMKICAqIGNhbGxlZCBieSB1c2VyIHRocmVhZHMgKG1vZHByb2JlL2luc21vZC9ybW1vZCkgdGltZXIsIHRhc2tsZXQgYW5kIG1pZGxheWVyJ3MKLSAqICdlaF8nIHRocmVhZC4gQWNjZXNzIHRvIHZhcmlhYmxlcyB1c2VkIGZvciBjb250cm9saW5nIHRoZSByZXNldCBzZXF1ZW5jZSBpcworICogJ2VoXycgdGhyZWFkLiBBY2Nlc3MgdG8gdmFyaWFibGVzIHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSByZXNldCBzZXF1ZW5jZSBpcwogICogc3luY2hyb25pemVkIHVzaW5nIGhvc3QgbG9jay4gVmFyaW91cyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyByZXNldCBwcm9jZXNzCiAgKiB3b3VsZCBtYWtlIHVzZSBvZiBhIHNpbmdsZSBjb21tYW5kIGJsb2NrLCBwb2ludGVyIHRvIHdoaWNoIGlzIGFsc28gc3RvcmVkIGluCiAgKiBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZS4KQEAgLTI5OTQsNyArMjk5NCw3IEBACiAKIAkvKiBJZiB0aGUgYWJvcnQgdGFzayBpcyBub3QgdGltZWQgb3V0IHdlIHdpbGwgZ2V0IGEgR29vZCBjb21wbGV0aW9uCiAJICogYXMgc2Vuc2Vfa2V5LCBvdGhlcndpc2Ugd2UgbWF5IGdldCBvbmUgdGhlIGZvbGxvd2luZyByZXNwb25zZXMKLQkgKiBkdWUgdG8gc3Vic3F1ZW50IGJ1cyByZXNldCBvciBkZXZpY2UgcmVzZXQuIEluIGNhc2UgSU9BU0MgaXMKKwkgKiBkdWUgdG8gc3Vic2VxdWVudCBidXMgcmVzZXQgb3IgZGV2aWNlIHJlc2V0LiBJbiBjYXNlIElPQVNDIGlzCiAJICogTlJfU1lOQ19SRVFVSVJFRCwgc2V0IHN5bmNfcmVxZCBmbGFnIGZvciB0aGUgY29ycmVzcG9uZGluZyByZXNvdXJjZQogCSAqLwogCWlmIChpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVQgfHwKQEAgLTM4MTQsNiArMzgxNCw5IEBACiAJCQlyYyA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKIAkJfQorCX0gZWxzZSBpZiAocmVxdWVzdF9zaXplIDwgMCkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOwogCX0KIAogCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55IGFkZGl0aW9uYWwgY29tbWFuZCBwYXJhbWV0ZXJzICovCkBAIC0zOTMzLDcgKzM5MzYsNyBAQAogCiAJCQkvKiBpZiBhYm9ydCB0YXNrIGNvdWxkbid0IGZpbmQgdGhlIGNvbW1hbmQgaS5lIGl0IGdvdAogCQkJICogY29tcGxldGVkIHByaW9yIHRvIGFib3J0aW5nLCByZXR1cm4gZ29vZCBjb21wbGV0aW9uLgotCQkJICogaWYgY29tbWFuZCBnb3QgYWJvcnRlZCBzdWNjZXNmdWxseSBvciB0aGVyZSB3YXMgSU9BCisJCQkgKiBpZiBjb21tYW5kIGdvdCBhYm9ydGVkIHN1Y2Nlc3NmdWxseSBvciB0aGVyZSB3YXMgSU9BCiAJCQkgKiByZXNldCBkdWUgdG8gYWJvcnQgdGFzayBpdHNlbGYgZ2V0dGluZyB0aW1lZG91dCB0aGVuCiAJCQkgKiByZXR1cm4gLUVUSU1FRE9VVAogCQkJICovCkBAIC01OTMyLDcgKzU5MzUsNyBAQAogCSAqIEhvd2V2ZXIsIGZpcm13YXJlIHN1cHBvcnRzIDY0LWJpdCBzdHJlYW1pbmcgRE1BIGJ1ZmZlcnMsIHdoZXJlYXMKIAkgKiBjb2hlcmVudCBidWZmZXJzIGFyZSB0byBiZSAzMi1iaXQuIFNpbmNlIHBjaV9hbGxvY19jb25zaXN0ZW50IGFsd2F5cwogCSAqIHJldHVybnMgbWVtb3J5IHdpdGhpbiA0R0IgKGlmIG5vdCwgY2hhbmdlIHRoaXMgbG9naWMpLCBjb2hlcmVudAotCSAqIGJ1ZmZlcnMgYXJlIHdpdGhpbiBmaXJtd2FyZSBhY2NlcHRpYmxlIGFkZHJlc3MgcmFuZ2VzLgorCSAqIGJ1ZmZlcnMgYXJlIHdpdGhpbiBmaXJtd2FyZSBhY2NlcHRhYmxlIGFkZHJlc3MgcmFuZ2VzLgogCSAqLwogCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID09IDQpIHx8CiAJICAgIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAppbmRleCA0ZGIyMTBkLi4zNGU0YzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKQEAgLTEwMjQsNyArMTAyNCw3IEBACiAKIAogLyoKLSAqIHBtY3JhaWRfaW9jdGxfaGVhZGVyIC0gZGVmaW5pdGlvbiBvZiBoZWFkZXIgc3RydWN0dXJlIHRoYXQgcHJlY2VlZHMgYWxsIHRoZQorICogcG1jcmFpZF9pb2N0bF9oZWFkZXIgLSBkZWZpbml0aW9uIG9mIGhlYWRlciBzdHJ1Y3R1cmUgdGhhdCBwcmVjZWRlcyBhbGwgdGhlCiAgKiBidWZmZXJzIGdpdmVuIGFzIGlvY3RsIGFyZ3VtZW50cy4KICAqCiAgKiAuc2lnbmF0dXJlICAgICAgICAgICA6IGFsd2F5cyBBU0NJSSBzdHJpbmcsICJQTUNSQUlEIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggNWRlYzY4NC4uOGJhNTc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC03OCw3ICs3OCw3IEBACiAJLSBDbGVhbiB1cCB2Y2hhbiBoYW5kbGluZwogICAgIFJldiAgMy4yMy4zMyBKdWx5IDMsIDIwMDMsIEplcyBTb3JlbnNlbgogCS0gRG9uJ3QgZGVmaW5lIHJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgYmVmb3JlIGRlZmluZSBkZXRlcm1pbmluZyBNTUlPLgotCSAgVGhpcyBqdXN0IGhhcHBlbmQgdG8gd29yayBvdXQgb24gaWE2NCBidXQgbm90IGVsc2V3aGVyZS4KKwkgIFRoaXMganVzdCBoYXBwZW5lZCB0byB3b3JrIG91dCBvbiBpYTY0IGJ1dCBub3QgZWxzZXdoZXJlLgogCS0gRG9uJ3QgdHJ5IGFuZCByZWFkIGZyb20gdGhlIGNhcmQgd2hpbGUgaXQgaXMgaW4gcmVzZXQgYXMKIAkgIGl0IHdvbid0IHJlc3BvbmQgYW5kIGNhdXNlcyBhbiBNQ0EKICAgICBSZXYgIDMuMjMuMzIgSnVuZSAyMywgMjAwMywgSmVzIFNvcmVuc2VuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggNmM1MWMwYS4uZWUyMDM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMjA4Niw3ICsyMDg2LDcgQEAKIH07CiAKIC8qCi0gKiBTTlMgY29tbWFuZCBzdHJ1Y3R1cmVzIC0tIGZvciAyMjAwIGNvbXBhdGFiaWxpdHkuCisgKiBTTlMgY29tbWFuZCBzdHJ1Y3R1cmVzIC0tIGZvciAyMjAwIGNvbXBhdGliaWxpdHkuCiAgKi8KICNkZWZpbmUJUkZUX0lEX1NOU19TQ01EX0xFTgkyMgogI2RlZmluZQlSRlRfSURfU05TX0NNRF9TSVpFCTYwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCmluZGV4IDYzMWZlZmMuLmY1YmEwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCkBAIC01MzksNyArNTM5LDcgQEAKIAkgKiBJZiBESUYgRXJyb3IgaXMgc2V0IGluIGNvbXBfc3RhdHVzLCB0aGVzZSBhZGRpdGlvbmFsIGZpZWxkcyBhcmUKIAkgKiBkZWZpbmVkOgogCSAqICZkYXRhWzEwXSA6IHVpbnQ4X3QgcmVwb3J0X3J1bnRfYmdbMl07CS0gY29tcHV0ZWQgZ3VhcmQKLQkgKiAmZGF0YVsxMl0gOiB1aW50OF90IGFjdHVhbF9kaWZbOF07CQktIERJRiBEYXRhIHJlY2lldmVkCisJICogJmRhdGFbMTJdIDogdWludDhfdCBhY3R1YWxfZGlmWzhdOwkJLSBESUYgRGF0YSByZWNlaXZlZAogCSAqICZkYXRhWzIwXSA6IHVpbnQ4X3QgZXhwZWN0ZWRfZGlmWzhdOwkJLSBESUYgRGF0YSBjb21wdXRlZAogCSovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IGQxN2VkOWEuLjcxMjUxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTQxNCw3ICs0MTQsNyBAQAogCQkJCSAgICAibWFya2VkIE9GRkxJTkUhXG4iKTsKIAkJCQl2aGEtPmZsYWdzLm9ubGluZSA9IDA7CiAJCQl9IGVsc2UgewotCQkJCS8qIENoZWNrIHRvIHNlZSBpZiBNUEkgdGltZW91dCBvY2N1cmVkICovCisJCQkJLyogQ2hlY2sgdG8gc2VlIGlmIE1QSSB0aW1lb3V0IG9jY3VycmVkICovCiAJCQkJaWYgKChtYnggJiBNQlhfMykgJiYgKGhhLT5mbGFncy5wb3J0MCkpCiAJCQkJCXNldF9iaXQoTVBJX1JFU0VUX05FRURFRCwKIAkJCQkJICAgICZ2aGEtPmRwY19mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggN2E3YzBlYy4uMzQ4OTMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCQkgICAgIXRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgewogCiAJCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSAgICAiTWFpbGJveCBjb21tYW5kIHRpbWVvdXQgb2NjdXJlZC4gIgorCQkJCSAgICAiTWFpbGJveCBjb21tYW5kIHRpbWVvdXQgb2NjdXJyZWQuICIKIAkJCQkgICAgIlNjaGVkdWxpbmcgSVNQICIgImFib3J0LiBlZWhfYnVzeTogMHgleFxuIiwKIAkJCQkgICAgaGEtPmZsYWdzLmVlaF9idXN5KTsKIAkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CkBAIC0zMjEsNyArMzIxLDcgQEAKIAkJCSAgICAhdGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKSB7CiAKIAkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cmVkLiAiCisJCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cnJlZC4gIgogCQkJCSAgICAiSXNzdWluZyBJU1AgYWJvcnQuXG4iKTsKIAogCQkJCXNldF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKTsKQEAgLTM3ODksNyArMzc4OSw3IEBACiAJbWNwLT5tYlsyMF0gPSBMU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CiAJbWNwLT5tYlsyMV0gPSBNU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CiAKLQkvKiByZWNpZXZlIGRhdGEgYWRkcmVzcyAqLworCS8qIHJlY2VpdmUgZGF0YSBhZGRyZXNzICovCiAJbWNwLT5tYlsxNl0gPSBMU1cobXJlcS0+cmN2X2RtYSk7CiAJbWNwLT5tYlsxN10gPSBNU1cobXJlcS0+cmN2X2RtYSk7CiAJbWNwLT5tYls2XSA9IExTVyhNU0QobXJlcS0+cmN2X2RtYSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwppbmRleCA3NmVjODc2Li40NTVmZTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwpAQCAtMjU5OCw3ICsyNTk4LDcgQEAKICAqIHFsYTgyeHhfc3RhcnRfc2NzaSgpIC0gU2VuZCBhIFNDU0kgY29tbWFuZCB0byB0aGUgSVNQCiAgKiBAc3A6IGNvbW1hbmQgdG8gc2VuZCB0byB0aGUgSVNQCiAgKgotICogUmV0dXJucyBub24temVybyBpZiBhIGZhaWx1cmUgb2NjdXJlZCwgZWxzZSB6ZXJvLgorICogUmV0dXJucyBub24temVybyBpZiBhIGZhaWx1cmUgb2NjdXJyZWQsIGVsc2UgemVyby4KICAqLwogaW50CiBxbGE4Mnh4X3N0YXJ0X3Njc2koc3JiX3QgKnNwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCA3NWE5NjZjLi5hYTc3NDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMTA0Niw3ICsxMDQ2LDcgQEAKIAogZWhfYnVzX3Jlc2V0X2RvbmU6CiAJcWxhX3ByaW50ayhLRVJOX0lORk8sIHZoYS0+aHcsICIlczogcmVzZXQgJXNcbiIsIF9fZnVuY19fLAotCSAgICAocmV0ID09IEZBSUxFRCkgPyAiZmFpbGVkIiA6ICJzdWNjZWRlZCIpOworCSAgICAocmV0ID09IEZBSUxFRCkgPyAiZmFpbGVkIiA6ICJzdWNjZWVkZWQiKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCiBlaF9ob3N0X3Jlc2V0X2xvY2s6CiAJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IHJlc2V0ICVzXG4iLCBfX2Z1bmNfXywKLQkgICAgKHJldCA9PSBGQUlMRUQpID8gImZhaWxlZCIgOiAic3VjY2VkZWQiKTsKKwkgICAgKHJldCA9PSBGQUlMRUQpID8gImZhaWxlZCIgOiAic3VjY2VlZGVkIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzkwMiw3ICszOTAyLDcgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJm90aGVyX3BkZXYtPmVuYWJsZV9jbnQpKSB7CiAJCQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiRm91bmQgUENJIGZ1bmMgYXZhaWxhYmUgYW5kIGVuYWJsZWQgYXQgMHgleFxuIiwKKwkJCSAgICAiRm91bmQgUENJIGZ1bmMgYXZhaWxhYmxlIGFuZCBlbmFibGVkIGF0IDB4JXhcbiIsCiAJCQkgICAgZm4pKTsKIAkJCXBjaV9kZXZfcHV0KG90aGVyX3BkZXYpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmgKaW5kZXggYzFmOGQxYi4uNDc1Nzg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kZWYuaApAQCAtMTgyLDcgKzE4Miw3IEBACiAJdWludDE2X3QgZmxhZ3M7CQkvKiAoMSkgU3RhdHVzIGZsYWdzLiAqLwogCiAjZGVmaW5lIFNSQl9ETUFfVkFMSUQJCUJJVF8zCS8qIERNQSBCdWZmZXIgbWFwcGVkLiAqLwotI2RlZmluZSBTUkJfR09UX1NFTlNFCQlCSVRfNAkvKiBzZW5zZSBkYXRhIHJlY2lldmVkLiAqLworI2RlZmluZSBTUkJfR09UX1NFTlNFCQlCSVRfNAkvKiBzZW5zZSBkYXRhIHJlY2VpdmVkLiAqLwogCXVpbnQ4X3Qgc3RhdGU7CQkvKiAoMSkgU3RhdHVzIGZsYWdzLiAqLwogCiAjZGVmaW5lIFNSQl9OT19RVUVVRV9TVEFURQkgMAkvKiBSZXF1ZXN0IGlzIGluIGJldHdlZW4gc3RhdGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwppbmRleCBiYmIyZTkwLi40OGUyMjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKQEAgLTEzMzgsNyArMTMzOCw3IEBACiAJfQogCiAJREVCVUcyKHByaW50aygic2NzaSVsZDogaW5pdGlhbGl6ZSBhZGFwdGVyOiAlc1xuIiwgaGEtPmhvc3Rfbm8sCi0JICAgIHN0YXR1cyA9PSBRTEFfRVJST1IgPyAiRkFJTEVEIiA6ICJTVUNDRURFRCIpKTsKKwkgICAgc3RhdHVzID09IFFMQV9FUlJPUiA/ICJGQUlMRUQiIDogIlNVQ0NFRURFRCIpKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCmluZGV4IGIzODMxYmQyLi45NDVjYzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZQkgRk05M0M1NkFfRVJBU0UJICAgICAgMHgzCiAjZGVmaW5lCSBGTTkzQzU2QV9FUkFTRV9BTEwgICAweDAKIAotLyogQ29tbWFuZCBFeHRlbnRpb25zICovCisvKiBDb21tYW5kIEV4dGVuc2lvbnMgKi8KICNkZWZpbmUJIEZNOTNDNTZBX1dFTl9FWFQJIDB4MwogI2RlZmluZQkgRk05M0M1NkFfV1JJVEVfQUxMX0VYVAkgMHgxCiAjZGVmaW5lCSBGTTkzQzU2QV9XRFNfRVhUCSAweDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKaW5kZXggYTRhY2IwZC4uMjMwYmEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKQEAgLTEyMTMsNyArMTIxMyw3IEBACiAKIAljbGVhcl9iaXQoRFBDX1JFU0VUX0FDVElWRSwgJmhhLT5kcGNfZmxhZ3MpOwogCURFQlVHMihwcmludGsoInNjc2klbGQ6IHJlY292ZXIgYWRhcHRlcjogJXNcbiIsIGhhLT5ob3N0X25vLAotCSAgICBzdGF0dXMgPT0gUUxBX0VSUk9SID8gIkZBSUxFRCIgOiAiU1VDQ0VERUQiKSk7CisJICAgIHN0YXR1cyA9PSBRTEFfRVJST1IgPyAiRkFJTEVEIiA6ICJTVUNDRUVERUQiKSk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMjExMCw3ICsyMTEwLDcgQEAKIAogCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkgICAgInNjc2klbGQ6JWQ6JWQ6IEFib3J0IGNvbW1hbmQgLSAlc1xuIiwKLQkgICAgaGEtPmhvc3Rfbm8sIGlkLCBsdW4sIChyZXQgPT0gU1VDQ0VTUykgPyAic3VjY2VkZWQiIDogImZhaWxlZCIpOworCSAgICBoYS0+aG9zdF9ubywgaWQsIGx1biwgKHJldCA9PSBTVUNDRVNTKSA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIyNzgsNyArMjI3OCw3IEBACiAJCXJldHVybl9zdGF0dXMgPSBTVUNDRVNTOwogCiAJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSE9TVCBSRVNFVCAlcy5cbiIsCi0JCSAgIHJldHVybl9zdGF0dXMgPT0gRkFJTEVEID8gIkZBSUxFRCIgOiAiU1VDQ0VERUQiKTsKKwkJICAgcmV0dXJuX3N0YXR1cyA9PSBGQUlMRUQgPyAiRkFJTEVEIiA6ICJTVUNDRUVERUQiKTsKIAogCXJldHVybiByZXR1cm5fc3RhdHVzOwogfQpAQCAtMjQ5Miw3ICsyNDkyLDcgQEAKIAkvKiBJbml0aWFsaXplIGRldmljZSBvciByZXN1bWUgaWYgaW4gc3VzcGVuZGVkIHN0YXRlICovCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKLQkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2NzaSVsZDogJXM6IENhbnQgcmUtZW5hYmxlICIKKwkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2NzaSVsZDogJXM6IENhbid0IHJlLWVuYWJsZSAiCiAJCSAgICAiZGV2aWNlIGFmdGVyIHJlc2V0XG4iLCBoYS0+aG9zdF9ubywgX19mdW5jX18pOwogCQlnb3RvIGV4aXRfc2xvdF9yZXNldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCBmYTU3NThjLi42ODg4YjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTI0NTQsNyArMjQ1NCw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IHNsYXZlX2Rlc3Ryb3kgPCV1ICV1ICV1ICV1PlxuIiwKIAkJICAgICAgIHNkcC0+aG9zdC0+aG9zdF9ubywgc2RwLT5jaGFubmVsLCBzZHAtPmlkLCBzZHAtPmx1bik7CiAJaWYgKGRldmlwKSB7Ci0JCS8qIG1ha2UgdGhpcyBzbG90IGF2YWxpYWJsZSBmb3IgcmUtdXNlICovCisJCS8qIG1ha2UgdGhpcyBzbG90IGF2YWlsYWJsZSBmb3IgcmUtdXNlICovCiAJCWRldmlwLT51c2VkID0gMDsKIAkJc2RwLT5ob3N0ZGF0YSA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA2ZDVjN2ZmLi4wYmFjOTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNDAwLDEwICs0MDAsMTUgQEAKIHN0YXRpYyB2b2lkIHNjc2lfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHEtPnF1ZXVlZGF0YTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJTElTVF9IRUFEKHN0YXJ2ZWRfbGlzdCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIGlmIHRoZSBkZXZpY2UgaXMgZGVhZCwgc2RldiB3aWxsIGJlIE5VTEwsIHNvIG5vIHF1ZXVlIHRvIHJ1biAqLworCWlmICghc2RldikKKwkJcmV0dXJuOworCisJc2hvc3QgPSBzZGV2LT5ob3N0OwogCWlmIChzY3NpX3RhcmdldChzZGV2KS0+c2luZ2xlX2x1bikKIAkJc2NzaV9zaW5nbGVfbHVuX3J1bihzZGV2KTsKIApAQCAtNDExLDggKzQxNiw2IEBACiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hvc3QtPnN0YXJ2ZWRfbGlzdCwgJnN0YXJ2ZWRfbGlzdCk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0YXJ2ZWRfbGlzdCkpIHsKLQkJaW50IGZsYWdzZXQ7Ci0KIAkJLyoKIAkJICogQXMgbG9uZyBhcyBzaG9zdCBpcyBhY2NlcHRpbmcgY29tbWFuZHMgYW5kIHdlIGhhdmUKIAkJICogc3RhcnZlZCBxdWV1ZXMsIGNhbGwgYmxrX3J1bl9xdWV1ZS4gc2NzaV9yZXF1ZXN0X2ZuCkBAIC00MzUsMjAgKzQzOCw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwotCi0JCXNwaW5fbG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKLQkJZmxhZ3NldCA9IHRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnEtPnF1ZXVlX2ZsYWdzKSAmJgotCQkJCSF0ZXN0X2JpdChRVUVVRV9GTEFHX1JFRU5URVIsCi0JCQkJCSZzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9mbGFncyk7Ci0JCWlmIChmbGFnc2V0KQotCQkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKLQkJX19ibGtfcnVuX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUsIGZhbHNlKTsKLQkJaWYgKGZsYWdzZXQpCi0JCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfUkVFTlRFUiwgc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0JCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwotCi0JCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKKwkJYmxrX3J1bl9xdWV1ZV9hc3luYyhzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKIAl9CiAJLyogcHV0IGFueSB1bnByb2Nlc3NlZCBlbnRyaWVzIGJhY2sgKi8KIAlsaXN0X3NwbGljZSgmc3RhcnZlZF9saXN0LCAmc2hvc3QtPnN0YXJ2ZWRfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9uZXRsaW5rLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9uZXRsaW5rLmMKaW5kZXggYTJlZDIwMS4uMjZhOGE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbmV0bGluay5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX25ldGxpbmsuYwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCQkJU0NTSV9OTF9HUlBfQ05ULCBzY3NpX25sX3Jjdl9tc2csIE5VTEwsCiAJCQkJVEhJU19NT0RVTEUpOwogCWlmICghc2NzaV9ubF9zb2NrKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZ2lzdGVyIG9mIHJlY2lldmUgaGFuZGxlciBmYWlsZWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZ2lzdGVyIG9mIHJlY2VpdmUgaGFuZGxlciBmYWlsZWRcbiIsCiAJCQkJX19mdW5jX18pOwogCQluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJnNjc2lfbmV0bGlua19ub3RpZmllcik7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IGU0NGZmNjQuLmU2MzkxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtMzIyLDE0ICszMjIsOCBAQAogCQlrZnJlZShldnQpOwogCX0KIAotCWlmIChzZGV2LT5yZXF1ZXN0X3F1ZXVlKSB7Ci0JCXNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlZGF0YSA9IE5VTEw7Ci0JCS8qIHVzZXIgY29udGV4dCBuZWVkZWQgdG8gZnJlZSBxdWV1ZSAqLwotCQlzY3NpX2ZyZWVfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0JCS8qIHRlbXBvcmFyeSBleHBlZGllbnQsIHRyeSB0byBjYXRjaCB1c2Ugb2YgcXVldWUgbG9jawotCQkgKiBhZnRlciBmcmVlIG9mIHNkZXYgKi8KLQkJc2Rldi0+cmVxdWVzdF9xdWV1ZSA9IE5VTEw7Ci0JfQorCS8qIE5VTEwgcXVldWUgbWVhbnMgdGhlIGRldmljZSBjYW4ndCBiZSB1c2VkICovCisJc2Rldi0+cmVxdWVzdF9xdWV1ZSA9IE5VTEw7CiAKIAlzY3NpX3RhcmdldF9yZWFwKHNjc2lfdGFyZ2V0KHNkZXYpKTsKIApAQCAtOTM3LDYgKzkzMSwxMiBAQAogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveSkKIAkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7CisKKwkvKiBjYXVzZSB0aGUgcmVxdWVzdCBmdW5jdGlvbiB0byByZWplY3QgYWxsIEkvTyByZXF1ZXN0cyAqLworCXNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlZGF0YSA9IE5VTEw7CisKKwkvKiBGcmVlaW5nIHRoZSBxdWV1ZSBzaWduYWxzIHRvIGJsb2NrIHRoYXQgd2UncmUgZG9uZSAqLworCXNjc2lfZnJlZV9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKIAlwdXRfZGV2aWNlKGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RndF9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RndF9saWIuYwppbmRleCBmNjcyODIwLi44YmNhOGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2xpYi5jCkBAIC05Myw3ICs5Myw3IEBACiAKIAkvKgogCSAqIFRoZSBibGsgaGVscGVycyBhcmUgdXNlZCB0byB0aGUgUkVBRC9XUklURSByZXF1ZXN0cwotCSAqIHRyYW5zZmVyaW5nIGRhdGEgZnJvbSBhIGluaXRpYXRvciBwb2ludCBvZiB2aWV3LiBTaW5jZQorCSAqIHRyYW5zZmVycmluZyBkYXRhIGZyb20gYSBpbml0aWF0b3IgcG9pbnQgb2Ygdmlldy4gU2luY2UKIAkgKiB3ZSBhcmUgaW4gdGFyZ2V0IG1vZGUgd2Ugd2FudCB0aGUgb3Bwb3NpdGUuCiAJICovCiAJcnEgPSBibGtfZ2V0X3JlcXVlc3Qoc2hvc3QtPnVzcGFjZV9yZXFfcSwgIXdyaXRlLCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDI5NDFkMmQuLjgxNTA2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0yMzc4LDcgKzIzNzgsNyBAQAogICogZmNfcmVtb3ZlX2hvc3QgLSBjYWxsZWQgdG8gdGVybWluYXRlIGFueSBmY190cmFuc3BvcnQtcmVsYXRlZCBlbGVtZW50cyBmb3IgYSBzY3NpIGhvc3QuCiAgKiBAc2hvc3Q6CVdoaWNoICZTY3NpX0hvc3QKICAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGltbWVkaWF0ZWx5IHByZWNlZWRpbmcgdGhlCisgKiBUaGlzIHJvdXRpbmUgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUKICAqIGEgZHJpdmVyJ3MgY2FsbCB0byBzY3NpX3JlbW92ZV9ob3N0KCkuCiAgKgogICogV0FSTklORzogQSBkcml2ZXIgdXRpbGl6aW5nIHRoZSBmY190cmFuc3BvcnQsIHdoaWNoIGZhaWxzIHRvIGNhbGwKQEAgLTI0NTgsNyArMjQ1OCw3IEBACiB9CiAKIC8qKgotICogZmNfc3RhcmdldF9kZWxldGUgLSBjYWxsZWQgdG8gZGVsZXRlIHRoZSBzY3NpIGRlY2VuZGVudHMgb2YgYW4gcnBvcnQKKyAqIGZjX3N0YXJnZXRfZGVsZXRlIC0gY2FsbGVkIHRvIGRlbGV0ZSB0aGUgc2NzaSBkZXNjZW5kYW50cyBvZiBhbiBycG9ydAogICogQHdvcms6CXJlbW90ZSBwb3J0IHRvIGJlIG9wZXJhdGVkIG9uLgogICoKICAqIERlbGV0ZXMgdGFyZ2V0IGFuZCBhbGwgc2RldnMuCkBAIC0zODE2LDI4ICszODE2LDE3IEBACiBzdGF0aWMgdm9pZAogZmNfYnNnX2dvb3NlX3F1ZXVlKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCiB7Ci0JaW50IGZsYWdzZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCWlmICghcnBvcnQtPnJxc3RfcSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBUaGlzIGdldC9wdXQgZGFuY2UgbWFrZXMgbm8gc2Vuc2UKKwkgKi8KIAlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHJwb3J0LT5ycXN0X3EtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlmbGFnc2V0ID0gdGVzdF9iaXQoUVVFVUVfRkxBR19SRUVOVEVSLCAmcnBvcnQtPnJxc3RfcS0+cXVldWVfZmxhZ3MpICYmCi0JCSAgIXRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnJwb3J0LT5ycXN0X3EtPnF1ZXVlX2ZsYWdzKTsKLQlpZiAoZmxhZ3NldCkKLQkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBycG9ydC0+cnFzdF9xKTsKLQlfX2Jsa19ydW5fcXVldWUocnBvcnQtPnJxc3RfcSwgZmFsc2UpOwotCWlmIChmbGFnc2V0KQotCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfUkVFTlRFUiwgcnBvcnQtPnJxc3RfcSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShycG9ydC0+cnFzdF9xLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KKwlibGtfcnVuX3F1ZXVlX2FzeW5jKHJwb3J0LT5ycXN0X3EpOwogCXB1dF9kZXZpY2UoJnJwb3J0LT5kZXYpOwogfQogCi0KIC8qKgogICogZmNfYnNnX3Jwb3J0X2Rpc3BhdGNoIC0gcHJvY2VzcyBycG9ydCBic2cgcmVxdWVzdHMgYW5kIGRpc3BhdGNoIHRvIExMREQKICAqIEBxOgkJcnBvcnQgcmVxdWVzdCBxdWV1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBiNjFlYmVjLi5iZDA4MDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKICAqCUBhcmc6IHRoaXMgaXMgdGhpcmQgYXJndW1lbnQgZ2l2ZW4gdG8gaW9jdGwoMikgc3lzdGVtIGNhbGwuCiAgKglPZnRlbiBjb250YWlucyBhIHBvaW50ZXIuCiAgKgotICoJUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgKHNvbWUgaW9jdGxzIHJldHVybiBwb3N0aXZlIG51bWJlcnMgb24KKyAqCVJldHVybnMgMCBpZiBzdWNjZXNzZnVsIChzb21lIGlvY3RscyByZXR1cm4gcG9zaXRpdmUgbnVtYmVycyBvbgogICoJc3VjY2VzcyBhcyB3ZWxsKS4gUmV0dXJucyBhIG5lZ2F0ZWQgZXJybm8gdmFsdWUgaW4gY2FzZSBvZiBlcnJvci4KICAqCiAgKglOb3RlOiBtb3N0IGlvY3RscyBhcmUgZm9yd2FyZCBvbnRvIHRoZSBibG9jayBzdWJzeXN0ZW0gb3IgZnVydGhlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCBhZWZhZGM2Li45NTAxOWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJLnJldmFsaWRhdGVfZGlzayA9IHNyX2Jsb2NrX3JldmFsaWRhdGVfZGlzaywKIAkvKiAKIAkgKiBObyBjb21wYXRfaW9jdGwgZm9yIG5vdyBiZWNhdXNlIHNyX2Jsb2NrX2lvY3RsIG5ldmVyCi0JICogc2VlbXMgdG8gcGFzcyBhcmJpdGFyeSBpb2N0bHMgZG93biB0byBob3N0IGRyaXZlcnMuCisJICogc2VlbXMgdG8gcGFzcyBhcmJpdHJhcnkgaW9jdGxzIGRvd24gdG8gaG9zdCBkcml2ZXJzLgogCSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmluZGV4IDRmMGU1NDguLjA3ZWFlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogICoKICAqIFBhcmFtZXRlcnM6IHN0cnVjdCBzY3NpX2NtbmQgKmNtZAogICogICAgVGhlIGNvbW1hbmQgdG8gd29yayBvbi4gVGhlIGZpcnN0IHNjYXR0ZXIgYnVmZmVyJ3MgZGF0YSBhcmUKLSAqICAgIGFzc3VtZWQgdG8gYmUgYWxyZWFkeSB0cmFuc2ZlcmVkIGludG8gcHRyL3RoaXNfcmVzaWR1YWwuCisgKiAgICBhc3N1bWVkIHRvIGJlIGFscmVhZHkgdHJhbnNmZXJyZWQgaW50byBwdHIvdGhpc19yZXNpZHVhbC4KICAqLwogCiBzdGF0aWMgdm9pZCBtZXJnZV9jb250aWd1b3VzX2J1ZmZlcnMoc3RydWN0IHNjc2lfY21uZCAqY21kKQpAQCAtMTcxNyw3ICsxNzE3LDcgQEAKICAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KICAqIAogICogUmV0dXJucyA6IC0xIHdoZW4gZGlmZmVyZW50IHBoYXNlIGlzIGVudGVyZWQgd2l0aG91dCB0cmFuc2ZlcnJpbmcKLSAqCW1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBhcmUgdHJhbnNmZXJlZCBvciBleGl0CisgKgltYXhpbXVtIG51bWJlciBvZiBieXRlcywgMCBpZiBhbGwgYnl0ZXMgYXJlIHRyYW5zZmVycmVkIG9yIGV4aXQKICAqCWlzIGluIHNhbWUgcGhhc2UuCiAgKgogICogCUFsc28sICpwaGFzZSwgKmNvdW50LCAqZGF0YSBhcmUgbW9kaWZpZWQgaW4gcGxhY2UuCkBAIC0xOTA0LDcgKzE5MDQsNyBAQAogICoJYnl0ZXMgdG8gdHJhbnNmZXIsICoqZGF0YSAtIHBvaW50ZXIgdG8gZGF0YSBwb2ludGVyLgogICogCiAgKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVyZWQgb3IgZXhpdAorICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVycmVkIG9yIGV4aXQKICAqCWlzIGluIHNhbWUgcGhhc2UuCiAgKgogICogCUFsc28sICpwaGFzZSwgKmNvdW50LCAqZGF0YSBhcmUgbW9kaWZpZWQgaW4gcGxhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMKaW5kZXggMTkwMTA3YS4uMDEyYzg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M0MTYuYwpAQCAtNzc0LDcgKzc3NCw3IEBACiAKIAkvKiBwcmludGsoInN5bTUzYzQxNl9yZXNldFxuIik7ICovCiAJYmFzZSA9IFNDcG50LT5kZXZpY2UtPmhvc3QtPmlvX3BvcnQ7Ci0JLyogc2VhcmNoIHNjc2lfaWQgLSBmaXhtZSwgd2Ugc2hvdWxkbnQgbmVlZCB0byBpdGVyYXRlIGZvciB0aGlzISAqLworCS8qIHNlYXJjaCBzY3NpX2lkIC0gZml4bWUsIHdlIHNob3VsZG4ndCBuZWVkIHRvIGl0ZXJhdGUgZm9yIHRoaXMhICovCiAJZm9yKGkgPSAwOyBpIDwgaG9zdF9pbmRleCAmJiBzY3NpX2lkID09IC0xOyBpKyspCiAJCWlmKGhvc3RzW2ldLmJhc2UgPT0gYmFzZSkKIAkJCXNjc2lfaWQgPSBob3N0c1tpXS5zY3NpX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzEuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncxLmgKaW5kZXggN2IwOGQ2Yy4uNjM5NTJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzEuaAorKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3MS5oCkBAIC0xNDQ5LDcgKzE0NDksNyBAQAogCQlQQUREUl9CIChtc2dfd2VpcmRfc2VlbiksCiAJLyoKIAkgKiAgV2UgZG9ubm90IGhhbmRsZSBleHRlbmRlZCBtZXNzYWdlcyBmcm9tIFNDUklQVFMuCi0JICogIFJlYWQgdGhlIGFtb3VudCBvZiBkYXRhIGNvcnJlcG9uZGluZyB0byB0aGUgCisJICogIFJlYWQgdGhlIGFtb3VudCBvZiBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gdGhlIAogCSAqICBtZXNzYWdlIGxlbmd0aCBhbmQgY2FsbCB0aGUgQyBjb2RlLgogCSAqLwogCVNDUl9DT1BZICgxKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncyLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3Mi5oCmluZGV4IGFlMWZiMTcuLmM4N2Q3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncyLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzIuaApAQCAtMTMyNiw3ICsxMzI2LDcgQEAKIAkJUEFERFJfQiAobXNnX3dlaXJkX3NlZW4pLAogCS8qCiAJICogIFdlIGRvbm5vdCBoYW5kbGUgZXh0ZW5kZWQgbWVzc2FnZXMgZnJvbSBTQ1JJUFRTLgotCSAqICBSZWFkIHRoZSBhbW91bnQgb2YgZGF0YSBjb3JyZXBvbmRpbmcgdG8gdGhlIAorCSAqICBSZWFkIHRoZSBhbW91bnQgb2YgZGF0YSBjb3JyZXNwb25kaW5nIHRvIHRoZSAKIAkgKiAgbWVzc2FnZSBsZW5ndGggYW5kIGNhbGwgdGhlIEMgY29kZS4KIAkgKi8KIAlTQ1JfU1RPUkVfUkVMIChzY3JhdGNoYSwgMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCmluZGV4IDJjM2U4OWQuLmQ5MmZlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCkBAIC0yNDU3LDcgKzI0NTcsNyBAQAogCQl9CiAKIAkJLyoKLQkJICogIFRoZSBkYXRhIGluIHRoZSBkbWEgZmlmbyBoYXMgbm90IGJlZW4gdHJhbnNmZXJlZCB0bworCQkgKiAgVGhlIGRhdGEgaW4gdGhlIGRtYSBmaWZvIGhhcyBub3QgYmVlbiB0cmFuc2ZlcnJlZCB0bwogCQkgKiAgdGhlIHRhcmdldCAtPiBhZGQgdGhlIGFtb3VudCB0byB0aGUgcmVzdAogCQkgKiAgYW5kIGNsZWFyIHRoZSBkYXRhLgogCQkgKiAgQ2hlY2sgdGhlIHNzdGF0MiByZWdpc3RlciBpbiBjYXNlIG9mIHdpZGUgdHJhbnNmZXIuCkBAIC01MDk0LDcgKzUwOTQsNyBAQAogfQogCiAvKgotICogIEx1biBjb250cm9sIGJsb2NrIGRlYWxsb2NhdGlvbi4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbGlkIHJlbWFpbmcgTENCcworICogIEx1biBjb250cm9sIGJsb2NrIGRlYWxsb2NhdGlvbi4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbGlkIHJlbWFpbmluZyBMQ0JzCiAgKiAgZm9yIHRoZSB0YXJnZXQuCiAgKi8KIGludCBzeW1fZnJlZV9sY2Ioc3RydWN0IHN5bV9oY2IgKm5wLCB1X2NoYXIgdG4sIHVfY2hhciBsbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fbWFsbG9jLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX21hbGxvYy5jCmluZGV4IDg4M2NhYzEuLjZmOWFmMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fbWFsbG9jLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9tYWxsb2MuYwpAQCAtNTAsNyArNTAsNyBAQAogICogIGZyb20gdGhlIFNDUklQVFMgY29kZS4gSW4gYWRkaXRpb24sIGNhY2hlIGxpbmUgYWxpZ25tZW50IAogICogIGlzIGd1YXJhbnRlZWQgZm9yIHBvd2VyIG9mIDIgY2FjaGUgbGluZSBzaXplLgogICoKLSAqICBUaGlzIGFsbG9jYXRvciBoYXMgYmVlbiBkZXZlbG9wcGVkIGZvciB0aGUgTGludXggc3ltNTNjOHh4ICAKKyAqICBUaGlzIGFsbG9jYXRvciBoYXMgYmVlbiBkZXZlbG9wZWQgZm9yIHRoZSBMaW51eCBzeW01M2M4eHggIAogICogIGRyaXZlciwgc2luY2UgdGhpcyBPL1MgZG9lcyBub3QgcHJvdmlkZSBuYXR1cmFsbHkgYWxpZ25lZCAKICAqICBhbGxvY2F0aW9ucy4KICAqICBJdCBoYXMgdGhlIGFkdmFudGFnZSBvZiBhbGxvd2luZyB0aGUgZHJpdmVyIHRvIHVzZSBwcml2YXRlIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jIGIvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jCmluZGV4IDA1NzFlZjk2Li45ZjRiNThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWx0cmFzdG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jCkBAIC0xMzgsNiArMTM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggNWY2OTdlMC4uNDQ2OGFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC0xODQzLDcgKzE4NDMsNyBAQAogICoKICAqIFRoZSBvcmlnaW5hbCBkcml2ZXIgdXNlZCB0byByZWx5IG9uIGEgZml4ZWQgc3hfdGFibGUsIGNvbnRhaW5pbmcgcGVyaW9kcwogICogZm9yIChvbmx5KSB0aGUgbG93ZXIgbGltaXRzIG9mIHRoZSByZXNwZWN0aXZlIGlucHV0LWNsb2NrLWZyZXF1ZW5jeSByYW5nZXMKLSAqICg4LTEwLzEyLTE1LzE2LTIwIE1IeikuIEFsdGhvdWdoIGl0IHNlZW1zLCB0aGF0IG5vIHByb2JsZW1zIG9jdXJyZWQgd2l0aAorICogKDgtMTAvMTItMTUvMTYtMjAgTUh6KS4gQWx0aG91Z2ggaXQgc2VlbXMsIHRoYXQgbm8gcHJvYmxlbXMgb2NjdXJyZWQgd2l0aAogICogdGhpcyBzZXR0aW5nIHNvIGZhciwgaXQgbWlnaHQgYmUgZGVzaXJhYmxlIHRvIGFkanVzdCB0aGUgdHJhbnNmZXIgcGVyaW9kcwogICogY2xvc2VyIHRvIHRoZSByZWFsbHkgYXR0YWNoZWQsIHBvc3NpYmx5IDI1JSBoaWdoZXIsIGlucHV0LWNsb2NrLCBzaW5jZQogICogLSB0aGUgd2QzM2M5MyBtYXkgcmVhbGx5IHVzZSBhIHNpZ25pZmljYW50IHNob3J0ZXIgcGVyaW9kLCB0aGFuIGl0IGhhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkNzAwMC5jIGIvZHJpdmVycy9zY3NpL3dkNzAwMC5jCmluZGV4IGRiNDUxYWUuLjllZTBhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS93ZDcwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMKQEAgLTgzNyw3ICs4MzcsNyBAQAogCQl9CiAJfQogCi0JLyogVGFrZSB0aGUgbG9jaywgdGhlbiBjaGVjayB3ZSBkaWRudCBnZXQgYmVhdGVuLCBpZiBzbyB0cnkgYWdhaW4gKi8KKwkvKiBUYWtlIHRoZSBsb2NrLCB0aGVuIGNoZWNrIHdlIGRpZG4ndCBnZXQgYmVhdGVuLCBpZiBzbyB0cnkgYWdhaW4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2NicG9vbF9sb2NrLCBmbGFncyk7CiAJaWYgKGZyZWVzY2JzIDwgbmVlZGVkKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjYnBvb2xfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYyBiL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKaW5kZXggMDQxMTNlNS4uMWU4MjRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYworKysgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCkBAIC01MTUsNyArNTE1LDcgQEAKIH0KIAogLyoKLSAqIFRoZSByZWFzb24gd2UgcHV0IGl0IGhlcmUgYmVjYXN1ZSB3ZSBuZWVkIHdhaXQgdGlsbCB0aGUgL3N5cy9maXJtd2FyZQorICogVGhlIHJlYXNvbiB3ZSBwdXQgaXQgaGVyZSBiZWNhdXNlIHdlIG5lZWQgd2FpdCB0aWxsIHRoZSAvc3lzL2Zpcm13YXJlCiAgKiBpcyBzZXR1cCwgdGhlbiBvdXIgaW50ZXJmYWNlIGNhbiBiZSByZWdpc3RlcmVkIGluIC9zeXMvZmlybXdhcmUvc2ZpCiAgKi8KIGNvcmVfaW5pdGNhbGwoc2ZpX3N5c2ZzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCmluZGV4IDVhNGUwYWYuLjA4ZGU1OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYworKysgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKQEAgLTY2MSw3ICs2NjEsNyBAQAogewogCiAJLyoKLQkgKiBUaGUgRklGTyBkZXB0aCBpcyBkaWZmZXJlbnQgaW5iZXR3ZWVuIHByaW1lY2VsbCB2YXJpYW50cy4KKwkgKiBUaGUgRklGTyBkZXB0aCBpcyBkaWZmZXJlbnQgYmV0d2VlbiBwcmltZWNlbGwgdmFyaWFudHMuCiAJICogSSBiZWxpZXZlIGZpbGxpbmcgaW4gdG9vIG11Y2ggaW4gdGhlIEZJRk8gbWlnaHQgY2F1c2UKIAkgKiBlcnJvbnMgaW4gOGJpdCB3aWRlIHRyYW5zZmVycyBvbiBBUk0gdmFyaWFudHMgKGp1c3QgOCB3b3JkcwogCSAqIEZJRk8sIG1lYW5zIG9ubHkgOHg4ID0gNjQgYml0cyBpbiBGSUZPKSBhdCBsZWFzdC4KQEAgLTcyMiw3ICs3MjIsNyBAQAogCQkgKiBUaGlzIGlubmVyIHJlYWRlciB0YWtlcyBjYXJlIG9mIHRoaW5ncyBhcHBlYXJpbmcgaW4gdGhlIFJYCiAJCSAqIEZJRk8gYXMgd2UncmUgdHJhbnNtaXR0aW5nLiBUaGlzIHdpbGwgaGFwcGVuIGEgbG90IHNpbmNlIHRoZQogCQkgKiBjbG9jayBzdGFydHMgcnVubmluZyB3aGVuIHlvdSBwdXQgdGhpbmdzIGludG8gdGhlIFRYIEZJRk8sCi0JCSAqIGFuZCB0aGVuIHRoaW5ncyBhcmUgY29udGlub3VzbHkgY2xvY2tlZCBpbnRvIHRoZSBSWCBGSUZPLgorCQkgKiBhbmQgdGhlbiB0aGluZ3MgYXJlIGNvbnRpbnVvdXNseSBjbG9ja2VkIGludG8gdGhlIFJYIEZJRk8uCiAJCSAqLwogCQl3aGlsZSAoKHJlYWR3KFNTUF9TUihwbDAyMi0+dmlydGJhc2UpKSAmIFNTUF9TUl9NQVNLX1JORSkKIAkJICAgICAgICYmIChwbDAyMi0+cnggPCBwbDAyMi0+cnhfZW5kKSkgewpAQCAtODQyLDcgKzg0Miw3IEBACiAKIAl1bm1hcF9mcmVlX2RtYV9zY2F0dGVyKHBsMDIyKTsKIAotCS8qIFVwZGF0ZSB0b3RhbCBieXRlcyB0cmFuc2ZlcmVkICovCisJLyogVXBkYXRlIHRvdGFsIGJ5dGVzIHRyYW5zZmVycmVkICovCiAJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IHBsMDIyLT5jdXJfdHJhbnNmZXItPmxlbjsKIAlpZiAocGwwMjItPmN1cl90cmFuc2Zlci0+Y3NfY2hhbmdlKQogCQlwbDAyMi0+Y3VyX2NoaXAtPgpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAkJCQkgIm51bWJlciBvZiBieXRlcyBvbiBhIDE2Yml0IGJ1cz8pXG4iLAogCQkJCSAodTMyKSAocGwwMjItPnJ4IC0gcGwwMjItPnJ4X2VuZCkpOwogCQl9Ci0JCS8qIFVwZGF0ZSB0b3RhbCBieXRlcyB0cmFuc2ZlcmVkICovCisJCS8qIFVwZGF0ZSB0b3RhbCBieXRlcyB0cmFuc2ZlcnJlZCAqLwogCQltc2ctPmFjdHVhbF9sZW5ndGggKz0gcGwwMjItPmN1cl90cmFuc2Zlci0+bGVuOwogCQlpZiAocGwwMjItPmN1cl90cmFuc2Zlci0+Y3NfY2hhbmdlKQogCQkJcGwwMjItPmN1cl9jaGlwLT4KQEAgLTE0MTUsMTEgKzE0MTUsMTEgQEAKIAkJICAgICAgIFNTUF9DUjEocGwwMjItPnZpcnRiYXNlKSk7CiAKIAkJZGV2X2RiZygmcGwwMjItPmFkZXYtPmRldiwgInBvbGxpbmcgdHJhbnNmZXIgb25nb2luZyAuLi5cbiIpOwotCQkvKiBGSVhNRTogaW5zZXJ0IGEgdGltZW91dCBzbyB3ZSBkb24ndCBoYW5nIGhlcmUgaW5kZWZpbmF0ZWx5ICovCisJCS8qIEZJWE1FOiBpbnNlcnQgYSB0aW1lb3V0IHNvIHdlIGRvbid0IGhhbmcgaGVyZSBpbmRlZmluaXRlbHkgKi8KIAkJd2hpbGUgKHBsMDIyLT50eCA8IHBsMDIyLT50eF9lbmQgfHwgcGwwMjItPnJ4IDwgcGwwMjItPnJ4X2VuZCkKIAkJCXJlYWR3cml0ZXIocGwwMjIpOwogCi0JCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgKi8KKwkJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJyZWQgKi8KIAkJbWVzc2FnZS0+YWN0dWFsX2xlbmd0aCArPSBwbDAyMi0+Y3VyX3RyYW5zZmVyLT5sZW47CiAJCWlmIChwbDAyMi0+Y3VyX3RyYW5zZmVyLT5jc19jaGFuZ2UpCiAJCQlwbDAyMi0+Y3VyX2NoaXAtPmNzX2NvbnRyb2woU1NQX0NISVBfREVTRUxFQ1QpOwpAQCAtMTU1NSw3ICsxNTU1LDcgQEAKIAkgKiBBIHdhaXRfcXVldWUgb24gdGhlIHBsMDIyLT5idXN5IGNvdWxkIGJlIHVzZWQsIGJ1dCB0aGVuIHRoZSBjb21tb24KIAkgKiBleGVjdXRpb24gcGF0aCAocHVtcF9tZXNzYWdlcykgd291bGQgYmUgcmVxdWlyZWQgdG8gY2FsbCB3YWtlX3VwIG9yCiAJICogZnJpZW5kcyBvbiBldmVyeSBTUEkgbWVzc2FnZS4gRG8gdGhpcyBpbnN0ZWFkICovCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZwbDAyMi0+cXVldWUpICYmIHBsMDIyLT5idXN5ICYmIGxpbWl0LS0pIHsKKwl3aGlsZSAoKCFsaXN0X2VtcHR5KCZwbDAyMi0+cXVldWUpIHx8IHBsMDIyLT5idXN5KSAmJiBsaW1pdC0tKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBsMDIyLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwbDAyMi0+cXVldWVfbG9jaywgZmxhZ3MpOwpAQCAtMjEyOSw3ICsyMTI5LDcgQEAKIAkJCSJwcm9iZSAtIHByb2JsZW0gcmVnaXN0ZXJpbmcgc3BpIG1hc3RlclxuIik7CiAJCWdvdG8gZXJyX3NwaV9yZWdpc3RlcjsKIAl9Ci0JZGV2X2RiZyhkZXYsICJwcm9iZSBzdWNjZWRlZFxuIik7CisJZGV2X2RiZyhkZXYsICJwcm9iZSBzdWNjZWVkZWRcbiIpOwogCS8qCiAJICogRGlzYWJsZSB0aGUgc2lsaWNvbiBibG9jayBwY2xrIGFuZCBhbnkgdm9sdGFnZSBkb21haW4gYW5kIGp1c3QKIAkgKiBwb3dlciBpdCB1cCBhbmQgY2xvY2sgaXQgd2hlbiBpdCdzIG5lZWRlZApAQCAtMjE4NCw3ICsyMTg0LDcgQEAKIAlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIocGwwMjItPm1hc3Rlcik7CiAJc3BpX21hc3Rlcl9wdXQocGwwMjItPm1hc3Rlcik7CiAJYW1iYV9zZXRfZHJ2ZGF0YShhZGV2LCBOVUxMKTsKLQlkZXZfZGJnKCZhZGV2LT5kZXYsICJyZW1vdmUgc3VjY2VkZWRcbiIpOworCWRldl9kYmcoJmFkZXYtPmRldiwgInJlbW92ZSBzdWNjZWVkZWRcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKaW5kZXggM2M5YWRlNi4uYjUwNTYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJCWF1MXh4eF9kYmRtYV9zdG9wKGh3LT5kbWFfcnhfY2gpOwogCQlhdTF4eHhfZGJkbWFfc3RvcChody0+ZG1hX3R4X2NoKTsKIAotCQkvKiBnZXQgbnVtYmVyIG9mIHRyYW5zZmVyZWQgYnl0ZXMgKi8KKwkJLyogZ2V0IG51bWJlciBvZiB0cmFuc2ZlcnJlZCBieXRlcyAqLwogCQlody0+cnhfY291bnQgPSBody0+bGVuIC0gYXUxeHh4X2dldF9kbWFfcmVzaWR1ZShody0+ZG1hX3J4X2NoKTsKIAkJaHctPnR4X2NvdW50ID0gaHctPmxlbiAtIGF1MXh4eF9nZXRfZG1hX3Jlc2lkdWUoaHctPmRtYV90eF9jaCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaS5jIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKaW5kZXggOWE2MTk2NC4uODcxZTMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKQEAgLTM0NSw3ICszNDUsNyBAQAogCiB2b2lkIGR3X3NwaV94ZmVyX2RvbmUoc3RydWN0IGR3X3NwaSAqZHdzKQogewotCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgcmV0dXJuIGNvdW50IGFjdHVhbCBieXRlcyByZWFkICovCisJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJyZWQgcmV0dXJuIGNvdW50IGFjdHVhbCBieXRlcyByZWFkICovCiAJZHdzLT5jdXJfbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGR3cy0+bGVuOwogCiAJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCkBAIC04MjEsNyArODIxLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKIAlkd3MtPnJ1biA9IFFVRVVFX1NUT1BQRUQ7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkd3MtPnF1ZXVlKSAmJiBkd3MtPmJ1c3kgJiYgbGltaXQtLSkgeworCXdoaWxlICgoIWxpc3RfZW1wdHkoJmR3cy0+cXVldWUpIHx8IGR3cy0+YnVzeSkgJiYgbGltaXQtLSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKIAkJbXNsZWVwKDEwKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmR3cy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpLmggYi9kcml2ZXJzL3NwaS9kd19zcGkuaAppbmRleCBmYjBiY2U1Li5iMjNlNDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9kd19zcGkuaAorKysgYi9kcml2ZXJzL3NwaS9kd19zcGkuaApAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBTUElfSU5UX1JYRkkJCQkoMSA8PCA0KQogI2RlZmluZSBTUElfSU5UX01TVEkJCQkoMSA8PCA1KQogCi0vKiBUWCBSWCBpbnRlcnJ1cHQgbGV2ZWwgdGhyZXNoaG9sZCwgbWF4IGNhbiBiZSAyNTYgKi8KKy8qIFRYIFJYIGludGVycnVwdCBsZXZlbCB0aHJlc2hvbGQsIG1heCBjYW4gYmUgMjU2ICovCiAjZGVmaW5lIFNQSV9JTlRfVEhSRVNIT0xECQkzMgogCiBlbnVtIGR3X3NzaV90eXBlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2VwOTN4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL2VwOTN4eF9zcGkuYwppbmRleCAwYmEzNWRmLi5kMzU3MDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9lcDkzeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvZXA5M3h4X3NwaS5jCkBAIC01MTIsNyArNTEyLDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBvbmUgU1BJIHRyYW5zZmVyIGdpdmVuIGluIEB0LiBGdW5jdGlvbiB3YWl0cyB1bnRpbAogICogdHJhbnNmZXIgaXMgY29tcGxldGUgKG1heSBzbGVlcCkgYW5kIHVwZGF0ZXMgQG1zZy0+c3RhdHVzIGJhc2VkIG9uIHdoZXRoZXIKLSAqIHRyYW5zZmVyIHdhcyBzdWNjZXNmdWxseSBwcm9jZXNzZWQgb3Igbm90LgorICogdHJhbnNmZXIgd2FzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgb3Igbm90LgogICovCiBzdGF0aWMgdm9pZCBlcDkzeHhfc3BpX3Byb2Nlc3NfdHJhbnNmZXIoc3RydWN0IGVwOTN4eF9zcGkgKmVzcGksCiAJCQkJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCmluZGV4IGE0MjliMDEuLmRjMjViZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKQEAgLTcwMCw3ICs3MDAsNyBAQAogCWlmICghcHhhMjV4X3NzcF9jb21wKGRydl9kYXRhKSkKIAkJd3JpdGVfU1NUTygwLCByZWcpOwogCi0JLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJlZCByZXR1cm4gY291bnQgYWN0dWFsIGJ5dGVzIHJlYWQgKi8KKwkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcnJlZCByZXR1cm4gY291bnQgYWN0dWFsIGJ5dGVzIHJlYWQgKi8KIAlkcnZfZGF0YS0+Y3VyX21zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+bGVuIC0KIAkJCQkoZHJ2X2RhdGEtPnJ4X2VuZCAtIGRydl9kYXRhLT5yeCk7CiAKQEAgLTc1OSw3ICs3NTksNyBAQAogCiAJCS8qCiAJCSAqIFBYQTI1eF9TU1AgaGFzIG5vIHRpbWVvdXQsIHNldCB1cCByeCB0aHJlc2hvdWxkIGZvciB0aGUKLQkJICogcmVtYWluZyBSWCBieXRlcy4KKwkJICogcmVtYWluaW5nIFJYIGJ5dGVzLgogCQkgKi8KIAkJaWYgKHB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpIHsKIApAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIAkgKiBleGVjdXRpb24gcGF0aCAocHVtcF9tZXNzYWdlcykgd291bGQgYmUgcmVxdWlyZWQgdG8gY2FsbCB3YWtlX3VwIG9yCiAJICogZnJpZW5kcyBvbiBldmVyeSBTUEkgbWVzc2FnZS4gRG8gdGhpcyBpbnN0ZWFkICovCiAJZHJ2X2RhdGEtPnJ1biA9IFFVRVVFX1NUT1BQRUQ7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkcnZfZGF0YS0+cXVldWUpICYmIGRydl9kYXRhLT5idXN5ICYmIGxpbWl0LS0pIHsKKwl3aGlsZSAoKCFsaXN0X2VtcHR5KCZkcnZfZGF0YS0+cXVldWUpIHx8IGRydl9kYXRhLT5idXN5KSAmJiBsaW1pdC0tKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGkuYwppbmRleCAzNGJiMTdmLi44MmI5YTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGkuYwpAQCAtOTU3LDcgKzk1Nyw3IEBACiAgKiBkcml2ZXJzIG1heSBETUEgZGlyZWN0bHkgaW50byBhbmQgb3V0IG9mIHRoZSBtZXNzYWdlIGJ1ZmZlcnMuCiAgKgogICogVGhpcyBjYWxsIHNob3VsZCBiZSB1c2VkIGJ5IGRyaXZlcnMgdGhhdCByZXF1aXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlCi0gKiBTUEkgYnVzLiBJdCBoYXMgdG8gYmUgcHJlY2VlZGVkIGJ5IGEgc3BpX2J1c19sb2NrIGNhbGwuIFRoZSBTUEkgYnVzIG11c3QKKyAqIFNQSSBidXMuIEl0IGhhcyB0byBiZSBwcmVjZWRlZCBieSBhIHNwaV9idXNfbG9jayBjYWxsLiBUaGUgU1BJIGJ1cyBtdXN0CiAgKiBiZSByZWxlYXNlZCBieSBhIHNwaV9idXNfdW5sb2NrIGNhbGwgd2hlbiB0aGUgZXhjbHVzaXZlIGFjY2VzcyBpcyBvdmVyLgogICoKICAqIEl0IHJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCmluZGV4IGEyODQ2MjQuLmY3MDZkYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwpAQCAtOTA1LDcgKzkwNSw3IEBACiAJCQkiSU8gd3JpdGUgZXJyb3IhXG4iKTsKIAkJbWVzc2FnZS0+c3RhdGUgPSBFUlJPUl9TVEFURTsKIAl9IGVsc2UgewotCQkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkICovCisJCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVycmVkICovCiAJCW1lc3NhZ2UtPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbl9pbl9ieXRlczsKIAkJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyIG9mIHRoaXMgbXNnICovCiAJCW1lc3NhZ2UtPnN0YXRlID0gYmZpbl9zcGlfbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7CkBAIC0xMjg0LDcgKzEyODQsNyBAQAogCSAqIGZyaWVuZHMgb24gZXZlcnkgU1BJIG1lc3NhZ2UuIERvIHRoaXMgaW5zdGVhZAogCSAqLwogCWRydl9kYXRhLT5ydW5uaW5nID0gZmFsc2U7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkcnZfZGF0YS0+cXVldWUpICYmIGRydl9kYXRhLT5idXN5ICYmIGxpbWl0LS0pIHsKKwl3aGlsZSAoKCFsaXN0X2VtcHR5KCZkcnZfZGF0YS0+cXVldWUpIHx8IGRydl9kYXRhLT5idXN5KSAmJiBsaW1pdC0tKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2ZzbF9lc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGlfZnNsX2VzcGkuYwppbmRleCA5MDBlOTIxLi40OTZmODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfZnNsX2VzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfZnNsX2VzcGkuYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJbXBjOHh4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAlyZWdfYmFzZSA9IG1wYzh4eHhfc3BpLT5yZWdfYmFzZTsKIAotCWh3X21vZGUgPSBjcy0+aHdfbW9kZTsgLyogU2F2ZSBvcmdpbmFsIHNldHRpbmdzICovCisJaHdfbW9kZSA9IGNzLT5od19tb2RlOyAvKiBTYXZlIG9yaWdpbmFsIHNldHRpbmdzICovCiAJY3MtPmh3X21vZGUgPSBtcGM4eHh4X3NwaV9yZWFkX3JlZygKIAkJCSZyZWdfYmFzZS0+Y3Ntb2RlW3NwaS0+Y2hpcF9zZWxlY3RdKTsKIAkvKiBtYXNrIG91dCBiaXRzIHdlIGFyZSBnb2luZyB0byBzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3BjaS5jIGIvZHJpdmVycy9zc2IvcGNpLmMKaW5kZXggYTQ2N2IyMC4uNmYzNDk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvcGNpLmMKKysrIGIvZHJpdmVycy9zc2IvcGNpLmMKQEAgLTY3MCw3ICs2NzAsNyBAQAogCQlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gU1BST00gYXZhaWxhYmxlIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAoYnVzLT5jaGlwY28uZGV2KSB7CS8qIGNhbiBiZSB1bmF2YWlsaWJsZSEgKi8KKwlpZiAoYnVzLT5jaGlwY28uZGV2KSB7CS8qIGNhbiBiZSB1bmF2YWlsYWJsZSEgKi8KIAkJLyoKIAkJICogZ2V0IFNQUk9NIG9mZnNldDogU1NCX1NQUk9NX0JBU0UxIGV4Y2VwdCBmb3IKIAkJICogY2hpcGNvbW1vbiByZXYgPj0gMzEgb3IgY2hpcCBJRCBpcyAweDQzMTIgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zcHJvbS5jIGIvZHJpdmVycy9zc2Ivc3Byb20uYwppbmRleCA0ZjdjYzhkLi41ZjM0ZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zcHJvbS5jCisrKyBiL2RyaXZlcnMvc3NiL3Nwcm9tLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCS8qIHRoaXMgcm91dGluZSBkaWZmZXJzIGZyb20gc3BlY3MgYXMgd2UgZG8gbm90IGFjY2VzcyBTUFJPTSBkaXJlY3RseQogCSAgIG9uIFBDTUNJQSAqLwogCWlmIChidXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfUENJICYmCi0JICAgIGJ1cy0+Y2hpcGNvLmRldiAmJgkvKiBjYW4gYmUgdW5hdmFpbGlibGUhICovCisJICAgIGJ1cy0+Y2hpcGNvLmRldiAmJgkvKiBjYW4gYmUgdW5hdmFpbGFibGUhICovCiAJICAgIGJ1cy0+Y2hpcGNvLmRldi0+aWQucmV2aXNpb24gPj0gMzEpCiAJCXJldHVybiBidXMtPmNoaXBjby5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9TUFJPTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCAxOGI0M2ZjLi5lMzc4NmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtMTE3LDggKzExNyw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3ZtZS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZW1yYXIvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2VwL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnIgpAQCAtMTMzLDggKzEzMSw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDI1L0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IGNmZDEzY2QuLmYwZDVjNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTQwLDcgKzQwLDYgQEAKIG9iai0kKENPTkZJR19WVDY2NTYpCQkrPSB2dDY2NTYvCiBvYmotJChDT05GSUdfSFlQRVJWKQkJKz0gaHYvCiBvYmotJChDT05GSUdfVk1FX0JVUykJCSs9IHZtZS8KLW9iai0kKENPTkZJR19NUlNUX1JBUl9IQU5ETEVSKQkrPSBtZW1yYXIvCiBvYmotJChDT05GSUdfRFhfU0VQKSAgICAgICAgICAgICs9IHNlcC8KIG9iai0kKENPTkZJR19JSU8pCQkrPSBpaW8vCiBvYmotJChDT05GSUdfQ1M1NTM1X0dQSU8pCSs9IGNzNTUzNV9ncGlvLwpAQCAtNDksNyArNDgsNiBAQAogb2JqLSQoQ09ORklHX1pDQUNIRSkJCSs9IHpjYWNoZS8KIG9iai0kKENPTkZJR19XTEFHUzQ5X0gyKQkrPSB3bGFnczQ5X2gyLwogb2JqLSQoQ09ORklHX1dMQUdTNDlfSDI1KQkrPSB3bGFnczQ5X2gyNS8KLW9iai0kKENPTkZJR19TQU1TVU5HX0xBUFRPUCkJKz0gc2Ftc3VuZy1sYXB0b3AvCiBvYmotJChDT05GSUdfRkJfU003WFgpCQkrPSBzbTd4eC8KIG9iai0kKENPTkZJR19WSURFT19EVDMxNTUpCSs9IGR0MzE1NXY0bC8KIG9iai0kKENPTkZJR19DUllTVEFMSEQpCQkrPSBjcnlzdGFsaGQvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZ21ib3hfaGNpdWFydC5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrX2dtYm94X2hjaXVhcnQuYwppbmRleCBjNjQ4OGUwLi40MTIyM2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZ21ib3hfaGNpdWFydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9BUjYwMDAvYXI2a19nbWJveF9oY2l1YXJ0LmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHBQcm90LT5DcmVkaXRzQ3VycmVudFNlZWspKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwUHJvdC0+Q3JlZGl0c0F2YWlsYWJsZSA+PSBwUHJvdC0+Q3JlZGl0c0N1cnJlbnRTZWVrKSB7Ci0gICAgICAgICAgICAgICAgLyogd2UgaGF2ZSBlbm91Z2ggY3JlZGl0cyB0byBmdWxsZmlsbCBhdCBsZWFzdCAxIHBhY2tldCB3YWl0aW5nIGluIHRoZSBxdWV1ZSAqLworICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgZW5vdWdoIGNyZWRpdHMgdG8gZnVsZmlsbCBhdCBsZWFzdCAxIHBhY2tldCB3YWl0aW5nIGluIHRoZSBxdWV1ZSAqLwogICAgICAgICAgICAgcFByb3QtPkNyZWRpdHNDdXJyZW50U2VlayA9IDA7CiAgICAgICAgICAgICBwUHJvdC0+U2VuZFN0YXRlRmxhZ3MgJj0gfkhDSV9TRU5EX1dBSVRfQ1JFRElUUzsgIAogICAgICAgICAgICAgZG9QZW5kaW5nU2VuZHMgPSB0cnVlOwpAQCAtMjg1LDcgKzI4NSw3IEBACiB7CiAgICAgc3RydWN0IGdtYm94X3Byb3RvX2hjaV91YXJ0ICAqcFByb3QgPSAoc3RydWN0IGdtYm94X3Byb3RvX2hjaV91YXJ0ICopcENvbnRleHQ7IAogICAgIAotICAgICAgICAvKiB0YXJnZXQgYXNzZXJ0aW9uIG9jY3VyZWQgKi8gICAgICAgICAgIAorICAgICAgICAvKiB0YXJnZXQgYXNzZXJ0aW9uIG9jY3VycmVkICovICAgICAgICAgICAKICAgICBOb3RpZnlUcmFuc3BvcnRGYWlsdXJlKHBQcm90LCBTdGF0dXMpOyAgCiB9CiAKQEAgLTUwNyw3ICs1MDcsNyBAQAogICAgICAgICAKICAgICB9IHdoaWxlIChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIHJlY2lldmVyICovCisgICAgICAgIC8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgcmVjZWl2ZXIgKi8KICAgICBpZiAoc3RhdHVzIHx8IGJsb2NrUmVjdikgewogICAgICAgICBEZXZHTWJveElSUUFjdGlvbihwUHJvdC0+cERldiwgR01CT1hfUkVDVl9JUlFfRElTQUJMRSwgUFJPQ19JT19TWU5DKTsgCiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FnZ3JfcmVjdl9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hZ2dyX3JlY3ZfYXBpLmgKaW5kZXggNjdhMDU4NC4uNWVhZDU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FnZ3JfcmVjdl9hcGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYWdncl9yZWN2X2FwaS5oCkBAIC03Miw3ICs3Miw3IEBACiAgKiBUaGlzIGV2ZW50IGlzIHRvIGluaXRpYXRlL21vZGlmeSB0aGUgcmVjZWl2ZSBzaWRlIHdpbmRvdy4KICAqIFRhcmdldCB3aWxsIHNlbmQgV01JX0FEREJBX1JFUV9FVkVOVElEIGV2ZW50IHRvIGhvc3QgLSB0byBzZXR1cCAKICAqIHJlY3YgcmUtb3JkZXJpbmcgcXVldWVzLiBUYXJnZXQgd2lsbCBuZWdvdGlhdGUgQUREQkEgd2l0aCBwZWVyLCAKLSAqIGFuZCBpbmRpY2F0ZSB2aWEgdGhpcyBldmVudCBhZnRlciBzdWNjZXNmdWxseSBjb21wbGV0aW5nIHRoZSAKKyAqIGFuZCBpbmRpY2F0ZSB2aWEgdGhpcyBldmVudCBhZnRlciBzdWNjZXNzZnVsbHkgY29tcGxldGluZyB0aGUgCiAgKiBuZWdvdGlhdGlvbi4gVGhpcyBoYXBwZW5zIGluIHR3byBzaXR1YXRpb25zOgogICogIDEuIEluaXRpYWwgc2V0dXAgb2YgYWdncmVnYXRpb24KICAqICAyLiBSZW5lZ290aWF0aW9uIG9mIGN1cnJlbnQgcmVjdiB3aW5kb3cuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2FfaGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2FfaGNpLmgKaW5kZXggMDhjYjAxMy4uMzc5ZDY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9hX2hjaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vYV9oY2kuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAjZGVmaW5lIFBBTF9OVU1fQ09NUExfREFUQV9CTE9DS19FVkVOVCAgICAgICAgICAgICAgMHg0OAogI2RlZmluZSBQQUxfU0hPUlRfUkFOR0VfTU9ERV9DSEFOR0VfQ09NUExfRVZFTlQgICAgIDB4NEMKICNkZWZpbmUgUEFMX0FNUF9TVEFUVVNfQ0hBTkdFX0VWRU5UICAgICAgICAgICAgICAgICAweDRECi0vKj09PT09PT09IEVuZCBvZiBQQUwgZXZlbnRzIGRlZmluaXRvbiA9PT09PT09PT09PT09PT09PSovCisvKj09PT09PT09IEVuZCBvZiBQQUwgZXZlbnRzIGRlZmluaXRpb24gPT09PT09PT09PT09PT09PT0qLwogCiAKIC8qPT09PT09PT0gVGltZW91dHMgKG5vdCBwYXJ0IG9mIEhDSSBjbWQsIGJ1dCBpbnB1dCB0byBQQUwgZW5naW5lKSA9PT09PT09PT0qLwpAQCAtNDMwLDcgKzQzMCw3IEBACiAgICAgdTggaHdfZXJyX2NvZGU7CiB9IFBPU1RQQUNLIEhDSV9FVkVOVF9IV19FUlI7CiAKLS8qIEZsdXNoIG9jY3VyZWQgZXZlbnQgKi8KKy8qIEZsdXNoIG9jY3VycmVkIGV2ZW50ICovCiAvKiBRb3MgVmlvbGF0aW9uIGV2ZW50ICovCiB0eXBlZGVmIHN0cnVjdCAgaGNpX2V2ZW50X2hhbmRsZV90IHsKICAgICB1OCBldmVudF9jb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9kYmdsb2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZGJnbG9nLmgKaW5kZXggM2EzZDAwZC4uYjdhMTIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9kYmdsb2cuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2RiZ2xvZy5oCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIERCR0xPR19NT0RVTEVJRF9OVU1fTUFYICAgICAgICAgIDE2IC8qIFVwcGVyIGxpbWl0IGlzIHdpZHRoIG9mIG1hc2sgKi8KIAogLyoKLSAqIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZGVmaW5pdGlvbiBvZiBhbnkgbmV3IG1vZHVsZSBpbnRyZHVjZWQgaXMgY2FwdHVyZWQKKyAqIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZGVmaW5pdGlvbiBvZiBhbnkgbmV3IG1vZHVsZSBpbnRyb2R1Y2VkIGlzIGNhcHR1cmVkCiAgKiBiZXR3ZWVuIHRoZSBEQkdMT0dfTU9EVUxFSURfU1RBUlQgYW5kIERCR0xPR19NT0RVTEVJRF9FTkQgZGVmaW5lcy4gVGhlIAogICogc3RydWN0dXJlIGlzIHJlcXVpcmVkIGZvciB0aGUgcGFyc2VyIHRvIGNvcnJlY3RseSBwaWNrIHVwIHRoZSB2YWx1ZXMgZm9yCiAgKiBkaWZmZXJlbnQgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZXBwaW5nX3Rlc3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZXBwaW5nX3Rlc3QuaAppbmRleCA1YzQwZDhhLi43MDI3ZmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2VwcGluZ190ZXN0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9lcHBpbmdfdGVzdC5oCkBAIC05Miw3ICs5Miw3IEBACiAjZGVmaW5lIEVQUElOR19DTURfUkVTRVRfUkVDVl9DTlQgICAgICAgMiAgIC8qIHJlc2V0IHJlY3YgY291bnQgKi8KICNkZWZpbmUgRVBQSU5HX0NNRF9DQVBUVVJFX1JFQ1ZfQ05UICAgICAzICAgLyogZmV0Y2ggcmVjdiBjb3VudCwgNC1ieXRlIGNvdW50IHJldHVybmVkIGluIENtZEJ1ZmZlcl90ICovCiAjZGVmaW5lIEVQUElOR19DTURfTk9fRUNITyAgICAgICAgICAgICAgNCAgIC8qIG5vbi1lY2hvIHBhY2tldCB0ZXN0ICh0eC1vbmx5KSAqLwotI2RlZmluZSBFUFBJTkdfQ01EX0NPTlRfUlhfU1RBUlQgICAgICAgIDUgICAvKiBjb250aW5vdXMgUlggcGFja2V0cywgcGFyYW1ldGVycyBhcmUgaW4gQ21kQnVmZmVyX2ggKi8KKyNkZWZpbmUgRVBQSU5HX0NNRF9DT05UX1JYX1NUQVJUICAgICAgICA1ICAgLyogY29udGludW91cyBSWCBwYWNrZXRzLCBwYXJhbWV0ZXJzIGFyZSBpbiBDbWRCdWZmZXJfaCAqLwogI2RlZmluZSBFUFBJTkdfQ01EX0NPTlRfUlhfU1RPUCAgICAgICAgIDYgICAvKiBzdG9wIGNvbnRpbnVvdXMgUlggcGFja2V0IHRyYW5zbWlzc2lvbiAqLwogCiAgICAgLyogdGVzdCBjb21tYW5kIHBhcmFtZXRlcnMgbWF5IGJlIG5vIG1vcmUgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2luaV9kc2V0LmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2luaV9kc2V0LmgKaW5kZXggOGJmYzc1OS4uYTllMDVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9pbmlfZHNldC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vaW5pX2RzZXQuaApAQCAtMzEsNyArMzEsNyBAQAogICovCiB0eXBlZGVmIGVudW0gewogI2lmIGRlZmluZWQoQVI2MDAyX1JFVjQpIHx8IGRlZmluZWQoQVI2MDAzKQotLyogQWRkIHRoZXNlIGRlZmluaXRpb25zIGZvciBjb21wYXRhYmlsaXR5ICAqLworLyogQWRkIHRoZXNlIGRlZmluaXRpb25zIGZvciBjb21wYXRpYmlsaXR5ICAqLwogI2RlZmluZSBXSEFMX0lOSV9EQVRBX0lEX0JCX1JGR0FJTl9MTkExIFdIQUxfSU5JX0RBVEFfSURfQkJfUkZHQUlOCiAjZGVmaW5lIFdIQUxfSU5JX0RBVEFfSURfQkJfUkZHQUlOX0xOQTIgV0hBTF9JTklfREFUQV9JRF9CQl9SRkdBSU4KICAgICBXSEFMX0lOSV9EQVRBX0lEX05VTEwgICAgICAgICAgICAgICA9MCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vdGVzdGNtZC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi90ZXN0Y21kLmgKaW5kZXggOWNhMWYyYS4uN2Q5NGFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi90ZXN0Y21kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi90ZXN0Y21kLmgKQEAgLTQzLDggKzQzLDggQEAKICAgICBQTjE1X1BBVFRFUk4KIH1UWF9EQVRBX1BBVFRFUk47CiAKLS8qIENvbnRpbm91cyB0eAotICAgbW9kZSA6IFRDTURfQ09OVF9UWF9PRkYgLSBEaXNhYmxpbmcgY29udGlub3VzIHR4CisvKiBDb250aW51b3VzIHR4CisgICBtb2RlIDogVENNRF9DT05UX1RYX09GRiAtIERpc2FibGluZyBjb250aW51b3VzIHR4CiAgICAgICAgICAgVENNRF9DT05UX1RYX1NJTkUgLSBFbmFibGUgY29udGludW91cyB1bm1vZHVsYXRlZCB0eAogICAgICAgICAgIFRDTURfQ09OVF9UWF9GUkFNRS0gRW5hYmxlIGNvbnRpbnVvdXMgbW9kdWxhdGVkIHR4CiAgICBmcmVxIDogQ2hhbm5lbCBmcmVxIGluIE1oei4gKGUuZyAyNDEyIGZvciBjaGFubmVsIDEgaW4gMTEgZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21pLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3dtaS5oCmluZGV4IGM2NDVhZjMuLjRlNjM0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21pLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWkuaApAQCAtMTU2OCw4ICsxNTY4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIHRvIHBzLXBvbGwgbW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAzICovCiAKLQl1MzIgc2NvQ29udFN0b21wTWF4OyAgIC8qIG1heCBudW1iZXIgb2YgY29udGlub3VzIHN0b21wIGFsbG93ZWQgaW4gb3B0IG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4Y2VkZGVkIHN3aXRjaCB0byBwc3BvbGwgbW9kZQorCXUzMiBzY29Db250U3RvbXBNYXg7ICAgLyogbWF4IG51bWJlciBvZiBjb250aW51b3VzIHN0b21wIGFsbG93ZWQgaW4gb3B0IG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4Y2VlZGVkIHN3aXRjaCB0byBwc3BvbGwgbW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IDMgKi8KIAogCXUzMiBzY29NaW5sb3dSYXRlTWJwczsgLyogTG93IHJhdGUgdGhyZXNob2xkICovCkBAIC0yMDg0LDcgKzIwODQsNyBAQAogLyoKICAqIEJTUyBJTkZPIEhEUiB2ZXJzaW9uIDIuMAogICogV2l0aCA2IGJ5dGVzIEhUQyBoZWFkZXIgYW5kIDYgYnl0ZXMgb2YgV01JIGhlYWRlcgotICogV01JX0JTU19JTkZPX0hEUiBjYW5ub3QgYmUgYWNjb21vZGF0ZWQgaW4gdGhlIHJlbW92ZWQgODAyLjExIG1hbmFnZW1lbnQKKyAqIFdNSV9CU1NfSU5GT19IRFIgY2Fubm90IGJlIGFjY29tbW9kYXRlZCBpbiB0aGUgcmVtb3ZlZCA4MDIuMTEgbWFuYWdlbWVudAogICogaGVhZGVyIHNwYWNlLgogICogLSBSZWR1Y2UgdGhlIGllTWFzayB0byAyIGJ5dGVzIGFzIG9ubHkgdHdvIGJpdCBmbGFncyBhcmUgdXNlZAogICogLSBSZW1vdmUgcnNzaSBhbmQgY29tcHV0ZSBpdCBvbiB0aGUgaG9zdC4gcnNzaSA9IHNuciAtIDk1CkBAIC0yOTExLDcgKzI5MTEsNyBAQAogICAgIHU4IHBrdElEOyAvKiBwYWNrZXQgSUQgdG8gaWRlbnRpZnkgcGFyZW50IHBhY2tldCAqLwogICAgIHU4IHJhdGVJZHg7IC8qIHJhdGUgaW5kZXggb24gc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gKi8KICAgICB1OCBhY2tGYWlsdXJlczsgLyogbnVtYmVyIG9mIEFDSyBmYWlsdXJlcyBpbiB0eCBhdHRlbXB0ICovCi0jaWYgMCAvKiBvcHRpb25hbCBwYXJhbXMgY3VycmVudGx5IG9tbWl0dGVkLiAqLworI2lmIDAgLyogb3B0aW9uYWwgcGFyYW1zIGN1cnJlbnRseSBvbWl0dGVkLiAqLwogICAgIHUzMiBxdWV1ZURlbGF5OyAvLyB1c2VjIGRlbGF5IG1lYXN1cmVkIFR4IFN0YXJ0IHRpbWUgLSBob3N0IGRlbGl2ZXJ5IHRpbWUKICAgICB1MzIgbWVkaWFEZWxheTsgLy8gdXNlYyBkZWxheSBtZWFzdXJlZCBBQ0sgcnggdGltZSAtIGhvc3QgZGVsaXZlcnkgdGltZQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3dtaXguaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21peC5oCmluZGV4IDVlYmI4MjguLjM2YWNiYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21peC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21peC5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIH0gUE9TVFBBQ0sgV01JWF9HUElPX0lOVFJfQUNLX0NNRDsKIAogLyoKLSAqIFRhcmdldCBpbmZvcm1zIEhvc3Qgb2YgR1BJTyBpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBvY3VycmVkIHNpbmNlIHRoZQorICogVGFyZ2V0IGluZm9ybXMgSG9zdCBvZiBHUElPIGludGVycnVwdHMgdGhhdCBoYXZlIG9jY3VycmVkIHNpbmNlIHRoZQogICogbGFzdCBXTUlYX0dJUE9fSU5UUl9BQ0tfQ01EIHdhcyByZWNlaXZlZC4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLS0KICAqIHRoZSBjdXJyZW50IEdQSU8gaW5wdXQgdmFsdWVzIGlzIHByb3ZpZGVkIC0tIGluIG9yZGVyIHRvIHN1cHBvcnQKICAqIHVzZSBvZiBhIEdQSU8gaW50ZXJydXB0IGFzIGEgRGF0YSBWYWxpZCBzaWduYWwgZm9yIG90aGVyIEdQSU8gcGlucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9odGNfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvaHRjX2FwaS5oCmluZGV4IDFiYzI0ODguLjRmYjc2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9odGNfYXBpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2h0Y19hcGkuaApAQCAtMjA5LDcgKzIwOSw3IEBACiB0eXBlZGVmIGVudW0gX0hUQ19DUkVESVRfRElTVF9SRUFTT04gewogICAgIEhUQ19DUkVESVRfRElTVF9TRU5EX0NPTVBMRVRFID0gMCwgICAgIC8qIGNyZWRpdHMgYXZhaWxhYmxlIGFzIGEgcmVzdWx0IG9mIGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQgb3BlcmF0aW9ucyAoTUFOREFUT1JZKSByZXN1bHRpbmcgaW4gY3JlZGl0IHJlcG9ydHMgKi8KLSAgICBIVENfQ1JFRElUX0RJU1RfQUNUSVZJVFlfQ0hBTkdFID0gMSwgICAvKiBhIGNoYW5nZSBpbiBlbmRwb2ludCBhY3Rpdml0eSBvY2N1cmVkIChPUFRJT05BTCkgKi8KKyAgICBIVENfQ1JFRElUX0RJU1RfQUNUSVZJVFlfQ0hBTkdFID0gMSwgICAvKiBhIGNoYW5nZSBpbiBlbmRwb2ludCBhY3Rpdml0eSBvY2N1cnJlZCAoT1BUSU9OQUwpICovCiAgICAgSFRDX0NSRURJVF9ESVNUX1NFRUtfQ1JFRElUUywgICAgICAgICAgLyogYW4gZW5kcG9pbnQgbmVlZHMgdG8gInNlZWsiIGNyZWRpdHMgKE9QVElPTkFMKSAqLwogICAgIEhUQ19EVU1QX0NSRURJVF9TVEFURSAgICAgICAgICAgICAgICAgIC8qIGZvciBkZWJ1Z2dpbmcsIGR1bXAgYW55IHN0YXRlIGluZm9ybWF0aW9uIHRoYXQgaXMga2VwdCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24gZnVuY3Rpb24gKi8KQEAgLTI1Myw3ICsyNTMsNyBAQAogICAgIHUzMiBSeFBhY2tldHNCdW5kbGVkOyAgICAgICAvKiBjb3VudCBvZiByZWN2IHBhY2tldHMgcmVjZWl2ZWQgaW4gYSBidW5kbGUgKi8KICAgICB1MzIgUnhCdW5kbGVMb29rQWhlYWRzOyAgICAgLyogY291bnQgb2YgbnVtYmVyIG9mIGJ1bmRsZWQgbG9va2FoZWFkcyAqLwogICAgIHUzMiBSeEJ1bmRsZUluZEZyb21IZHI7ICAgICAvKiBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJ1bmRsZSBpbmRpY2F0aW9ucyBmcm9tIHRoZSBIVEMgaGVhZGVyICovCi0gICAgdTMyIFJ4QWxsb2NUaHJlc2hIaXQ7ICAgICAgIC8qIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJlY3YgYWxsb2NhdGlvbiB0aHJlc2hob2xkIHdhcyBoaXQgKi8KKyAgICB1MzIgUnhBbGxvY1RocmVzaEhpdDsgICAgICAgLyogY291bnQgb2YgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcmVjdiBhbGxvY2F0aW9uIHRocmVzaG9sZCB3YXMgaGl0ICovCiAgICAgdTMyIFJ4QWxsb2NUaHJlc2hCeXRlczsgICAgIC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyAqLwogfTsKIApAQCAtMzkxLDcgKzM5MSw3IEBACiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KIHZvaWQgICAgICAgIEhUQ1N0b3AoSFRDX0hBTkRMRSBIVENIYW5kbGUpOwogLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotICBAZGVzYzogRGVzdG9yeSBIVEMgc2VydmljZQorICBAZGVzYzogRGVzdHJveSBIVEMgc2VydmljZQogICBAZnVuY3Rpb24gbmFtZTogSFRDRGVzdHJveQogICBAaW5wdXQ6IEhUQ0hhbmRsZSAKICAgQG91dHB1dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9jcmVkaXRfZGlzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2NyZWRpdF9kaXN0LmMKaW5kZXggYWU1NGUxZi4uMzNmYTAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2NyZWRpdF9kaXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2NyZWRpdF9kaXN0LmMKQEAgLTM0MSw3ICszNDEsNyBAQAogICAgICAgICBjcmVkaXRzID0gbWluKHBDcmVkSW5mby0+Q3VycmVudEZyZWVDcmVkaXRzLHBFUERpc3QtPlR4Q3JlZGl0c1NlZWspOwogCiAgICAgICAgIGlmIChjcmVkaXRzID49IHBFUERpc3QtPlR4Q3JlZGl0c1NlZWspIHsKLSAgICAgICAgICAgICAgICAvKiB3ZSBmb3VuZCBzb21lIHRvIGZ1bGxmaWxsIHRoZSBzZWVrIHJlcXVlc3QgKi8KKyAgICAgICAgICAgICAgICAvKiB3ZSBmb3VuZCBzb21lIHRvIGZ1bGZpbGwgdGhlIHNlZWsgcmVxdWVzdCAqLwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMzY0LDggKzM2NCw4IEBACiAKICAgICAgICAgICAgIGlmICgocEN1ckVwRGlzdC0+VHhDcmVkaXRzQXNzaWduZWQgLSBuZWVkKSA+PSBwQ3VyRXBEaXN0LT5UeENyZWRpdHNNaW4pIHsKICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGN1cnJlbnQgb25lIGhhcyBiZWVuIGFsbG9jYXRlZCBtb3JlIHRoYW4gaXQncyBtaW5pbXVtIGFuZCBpdAotICAgICAgICAgICAgICAgICAgICAgKiBoYXMgZW5vdWdoIGNyZWRpdHMgYXNzaWduZWQgYWJvdmUgaXQncyBtaW5pbXVtIHRvIGZ1bGxmaWxsIG91ciBuZWVkCi0gICAgICAgICAgICAgICAgICAgICAqIHRyeSB0byB0YWtlIGF3YXkganVzdCBlbm91Z2ggdG8gZnVsbGZpbGwgb3VyIG5lZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICogaGFzIGVub3VnaCBjcmVkaXRzIGFzc2lnbmVkIGFib3ZlIGl0J3MgbWluaW11bSB0byBmdWxmaWxsIG91ciBuZWVkCisgICAgICAgICAgICAgICAgICAgICAqIHRyeSB0byB0YWtlIGF3YXkganVzdCBlbm91Z2ggdG8gZnVsZmlsbCBvdXIgbmVlZCAqLwogICAgICAgICAgICAgICAgIFJlZHVjZUNyZWRpdHMocENyZWRJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1ckVwRGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJFcERpc3QtPlR4Q3JlZGl0c0Fzc2lnbmVkIC0gbmVlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9hbmRyb2lkLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9hbmRyb2lkLmMKaW5kZXggYzk2ZjZlOS4uNGFhNzVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjYwMDBfYW5kcm9pZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX2FuZHJvaWQuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5lZWRXYWtlKSB7Ci0gICAgICAgICAgICAvKiBrZWVwIGhvc3Qgd2FrZSB1cCBpZiB0aGVyZSBpcyBhbnkgZXZlbnQgYW5kIHBhY2thdGUgY29tbWluZyBpbiovCisgICAgICAgICAgICAvKiBrZWVwIGhvc3Qgd2FrZSB1cCBpZiB0aGVyZSBpcyBhbnkgZXZlbnQgYW5kIHBhY2thdGUgY29taW5nIGluKi8KICAgICAgICAgICAgIGlmICh3b3dsZWRvbikgewogICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMyXTsKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3ByaW50ZihidWYsICJvbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjYwMDBfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9kcnYuYwppbmRleCAyN2NiMDJkLi45N2Q2Y2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9kcnYuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiBpbnQKIGFyNjAwMF9kYmdsb2dfZ2V0X2RlYnVnX2xvZ3Moc3RydWN0IGFyNl9zb2Z0YyAqYXIpCiB7Ci0gICAgdTMyIGRhdGFbOF07IC8qIFNob3VsZCBiZSBhYmxlIHRvIGFjY29tb2RhdGUgc3RydWN0IGRiZ2xvZ19idWZfcyAqLworICAgIHUzMiBkYXRhWzhdOyAvKiBTaG91bGQgYmUgYWJsZSB0byBhY2NvbW1vZGF0ZSBzdHJ1Y3QgZGJnbG9nX2J1Zl9zICovCiAgICAgdTMyIGFkZHJlc3M7CiAgICAgdTMyIGxlbmd0aDsKICAgICB1MzIgZHJvcHBlZDsKQEAgLTIwNjMsNyArMjA2Myw3IEBACiAgKiAtIEluIGNhc2Ugb2Ygc3VycHJpc2UgcmVtb3ZhbCwgdGhlIGhjZCBhbHJlYWR5IGZyZWVzIHVwIHRoZSBwZW5kaW5nCiAgKiAgIGZvciB0aGUgZGV2aWNlIGFuZCBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIHVucmVnaXN0ZXIgdGhlIGZ1bmN0aW9uCiAgKiAgIGRyaXZlciBpbm9yZGVyIHRvIGdldCB0aGVzZSByZXF1ZXN0cy4gRm9yIHBsYW5uZWQgcmVtb3ZhbCwgdGhlIGZ1bmN0aW9uCi0gKiAgIGRyaXZlciBoYXMgdG8gZXhwbGljdGx5IHVucmVnaXN0ZXIgaXRzZWxmIHRvIGhhdmUgdGhlIGhjZCByZXR1cm4gYWxsIHRoZQorICogICBkcml2ZXIgaGFzIHRvIGV4cGxpY2l0bHkgdW5yZWdpc3RlciBpdHNlbGYgdG8gaGF2ZSB0aGUgaGNkIHJldHVybiBhbGwgdGhlCiAgKiAgIHBlbmRpbmcgcmVxdWVzdHMgYmVmb3JlIHRoZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBkZXZpY2VzIGFyZSBmcmVlZCB1cC4KICAqICAgTm90ZSB0aGF0IGFzIHBlciB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIGZ1bmN0aW9uIGRyaXZlciB3aWxsCiAgKiAgIGVuZCB1cCByZWxlYXNpbmcgYWxsIHRoZSBkZXZpY2VzIHNpbmNlIHRoZXJlIGlzIG5vIEFQSSB0byBzZWxlY3RpdmVseQpAQCAtMjk4Miw3ICsyOTgyLDcgQEAKICAgICAvKiBJZiB0YXJnZXQgaXMgbm90IGFzc29jaWF0ZWQgKi8KICAgICBpZiggKCFhci0+YXJDb25uZWN0ZWQgJiYgIWJ5cGFzc3dtaSkKICNpZmRlZiBDT05GSUdfSE9TVF9UQ01EX1NVUFBPUlQKLSAgICAgLyogVENNRCBkb2VzbnQgc3VwcG9ydCBhbnkgZGF0YSwgZnJlZSB0aGUgYnVmIGFuZCByZXR1cm4gKi8KKyAgICAgLyogVENNRCBkb2Vzbid0IHN1cHBvcnQgYW55IGRhdGEsIGZyZWUgdGhlIGJ1ZiBhbmQgcmV0dXJuICovCiAgICAgfHwgKGFyLT5hclRhcmdldE1vZGUgPT0gQVI2MDAwX1RDTURfTU9ERSkKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKQEAgLTYzOTMsNyArNjM5Myw3IEBACiAvKgogICogQWRkIHN1cHBvcnQgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgYSB2aXJ0dWFsIGFkYXB0ZXIgZm9yIHNvZnQgQVAuCiAgKiBTb21lIE9TIHJlcXVpcmVzIGRpZmZlcmVudCBhZGFwdGVycyBuYW1lcyBmb3Igc3RhdGlvbiBhbmQgc29mdCBBUCBtb2RlLgotICogVG8gc3VwcG9ydCB0aGVzZSByZXF1aXJlbWVudCwgY3JlYXRlIGFuZCBkZXN0b3J5IGEgbmV0ZGV2aWNlICBpbnN0YW5jZQorICogVG8gc3VwcG9ydCB0aGVzZSByZXF1aXJlbWVudCwgY3JlYXRlIGFuZCBkZXN0cm95IGEgbmV0ZGV2aWNlICBpbnN0YW5jZQogICogd2hlbiB0aGUgQVAgbW9kZSBpcyBvcGVyYXRpb25hbC4gQSBmdWxsIGZsZWRnZWQgc3VwcG9ydCBmb3IgdmlydWFsIGRldmljZQogICogaXMgbm90IGltcGxlbWVudGVkLiBSYXRoZXIgYSB2aXJ0dWFsIGludGVyZmFjZSBpcyBjcmVhdGVkIGFuZCBpcyBsaW5rZWQKICAqIHdpdGggdGhlIGV4aXN0aW5nIHBoeXNpY2FsIGRldmljZSBpbnN0YW5jZSBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiB0aGUgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3dtaS93bWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd21pL3dtaS5jCmluZGV4IDBkZGFlZTIuLmEwMGJmMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd21pL3dtaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd21pL3dtaS5jCkBAIC00ODY3LDcgKzQ4NjcsNyBAQAogI2lmZGVmIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVAogLyogV01JICBsYXllciBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgZGF0YSB0eXBlIG9mIHRoZSB0ZXN0IGNtZC4KICAgIFRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgY3VzdG9tZXJzIGxpa2UgUXVhbGNvbW0sIHdobyBtaWdodAotICAgaGF2ZSBkaWZmZXJlbnQgdGVzdCBjb21tYW5kIHJlcXVpcmVtZW50cyBmcm9tIGRpZmZlcm50IG1hbnVmYWN0dXJlcnMKKyAgIGhhdmUgZGlmZmVyZW50IHRlc3QgY29tbWFuZCByZXF1aXJlbWVudHMgZnJvbSBkaWZmZXJlbnQgbWFudWZhY3R1cmVycwogICovCiBpbnQKIHdtaV90ZXN0X2NtZChzdHJ1Y3Qgd21pX3QgKndtaXAsIHU4ICpidWYsIHUzMiBsZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0FkYXB0ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9iY20vQWRhcHRlci5oCmluZGV4IDMyOTA5ZTIuLjIwY2NhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vQWRhcHRlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vQWRhcHRlci5oCkBAIC00MTIsNyArNDEyLDcgQEAKIAogCS8vIHRoaXMgdG8ga2VlcCB0cmFjayBvZiB0aGUgVHggYW5kIFJ4IE1haWxCb3ggUmVnaXN0ZXJzLgogCWF0b21pY190CQkgICAgQ3Vyck51bUZyZWVUeERlc2M7Ci0JLy8gdG8ga2VlcCB0cmFjayB0aGUgbm8gb2YgYnl0ZSByZWNpZXZlZAorCS8vIHRvIGtlZXAgdHJhY2sgdGhlIG5vIG9mIGJ5dGUgcmVjZWl2ZWQKIAlVU0hPUlQJCQkJUHJldk51bVJlY3ZEZXNjczsKIAlVU0hPUlQJCQkJQ3Vyck51bVJlY3ZEZXNjczsKIAlVSU5UCQkJCXUzMlRvdGFsRFNEOwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJQk9PTEVBTgkJCWJTdGF0dXNXcml0ZTsKIAlVSU5UCQkJdWlOVk1EU0RTaXplOwogCVVJTlQJCQl1aVZlbmRvckV4dG5GbGFnOwotCSAvL2l0IHdpbGwgYWx3YXlzIHJlcHJlc2VudCBjaG9vc2VkIERTRCBhdCBhbnkgcG9pbnQgb2YgdGltZS4KKwkgLy9pdCB3aWxsIGFsd2F5cyByZXByZXNlbnQgY2hvc2VuIERTRCBhdCBhbnkgcG9pbnQgb2YgdGltZS4KIAkgLy8gR2VuZXJhbGx5IGl0IGlzIEFjdGl2ZSBEU0QgYnV0IGluIGNhc2Ugb2YgTlZNIFJEL1dSIGl0IG1pZ2h0IGJlIGRpZmZlcmVudC4KIAlVSU5UCQkJdWxGbGFzaENhbFN0YXJ0OwogCVVMT05HICAgICAgICAgICAgICAgICAgIHVsRmxhc2hDb250cm9sU2VjdGlvblN0YXJ0OwpAQCAtNTQ2LDEwICs1NDYsMTAgQEAKIAlQRkxBU0hfQ1NfSU5GTyBwc0ZsYXNoQ1NJbmZvIDsKIAlQRkxBU0gyWF9WRU5ET1JTUEVDSUZJQ19JTkZPIHBzRmxhc2gyeFZlbmRvckluZm87CiAJVUlOVCB1aUZsYXNoQmFzZUFkZDsgLy9GbGFzaCBzdGFydCBhZGRyZXNzCi0JVUlOVCB1aUFjdGl2ZUlTT09mZnNldDsgLy9BY3RpdmUgSVNPIG9mZnNldCBjaG9vc2VuIGJlZm9yZSBmL3cgZG93bmxvYWQKKwlVSU5UIHVpQWN0aXZlSVNPT2Zmc2V0OyAvL0FjdGl2ZSBJU08gb2Zmc2V0IGNob3NlbiBiZWZvcmUgZi93IGRvd25sb2FkCiAJRkxBU0gyWF9TRUNUSU9OX1ZBTCBlQWN0aXZlSVNPOyAvL0FjdGl2ZSBJU08gc2VjdGlvbiB2YWwKLQlGTEFTSDJYX1NFQ1RJT05fVkFMIGVBY3RpdmVEU0Q7CS8vQWN0aXZlIERTRCB2YWwgY2hvb3NlbiBiZWZvcmUgZi93IGRvd25sb2FkCi0JVUlOVCB1aUFjdGl2ZURTRE9mZnNldEF0RndEbGQ7ICAvL0ZvciBhY2Nlc3NpbmcgQWN0aXZlIERTRCBjaG9vc2VuIGJlZm9yZSBmL3cgZG93bmxvYWQKKwlGTEFTSDJYX1NFQ1RJT05fVkFMIGVBY3RpdmVEU0Q7CS8vQWN0aXZlIERTRCB2YWwgY2hvc2VuIGJlZm9yZSBmL3cgZG93bmxvYWQKKwlVSU5UIHVpQWN0aXZlRFNET2Zmc2V0QXRGd0RsZDsgIC8vRm9yIGFjY2Vzc2luZyBBY3RpdmUgRFNEIGNob3NlbiBiZWZvcmUgZi93IGRvd25sb2FkCiAJVUlOVCB1aUZsYXNoTGF5b3V0TWFqb3JWZXJzaW9uIDsKIAlVSU5UIHVpRmxhc2hMYXlvdXRNaW5vclZlcnNpb247CiAJQk9PTEVBTiBiQWxsRFNEV3JpdGVBbGxvdyA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0NtSG9zdC5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9DbUhvc3QuYwppbmRleCA5YmUxODRmLi5jMGVlOTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0NtSG9zdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vQ21Ib3N0LmMKQEAgLTM4NCw3ICszODQsNyBAQAogCQl9CiAJCWlmKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbCA9PSAwKQogCQl7Ci0JCQkvL3dlIGRpZG50IGdldCBwcm90b2NvbCBmaWVsZCBmaWxsZWQgaW4gYnkgdGhlIEJTCisJCQkvL3dlIGRpZG4ndCBnZXQgcHJvdG9jb2wgZmllbGQgZmlsbGVkIGluIGJ5IHRoZSBCUwogCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1Byb3RvY29sTGVuZ3RoPTA7CiAJCX0KIAkJZWxzZQpAQCAtODc5LDcgKzg3OSw3IEBACiAKIAkJCQkJCS8qCiAJCQkJCQkJUGFzc2luZyB0aGUgYXJndW1lbnQgdThQSFNJIGluc3RlYWQgb2YgY2xzaWQuIEJlY2F1c2UgZm9yIERMIHdpdGggbm8gY2xhc3NpZmllciBydWxlLAotCQkJCQkJCWNsc2lkIHdpbGwgYmUgemVybyBoZW5jZSB3ZSBjYW50IGhhdmUgbXVsdGlwbGUgUEhTIHJ1bGVzIGZvciB0aGUgc2FtZSBTRi4KKwkJCQkJCQljbHNpZCB3aWxsIGJlIHplcm8gaGVuY2Ugd2UgY2FuJ3QgaGF2ZSBtdWx0aXBsZSBQSFMgcnVsZXMgZm9yIHRoZSBzYW1lIFNGLgogCQkJCQkJCVRvIHN1cHBvcnQgbXVsdGlwbGUgUEhTIHJ1bGUsIHBhc3NpbmcgdThQSFNJLgogCQkJCQkJKi8KIApAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgInU4VHJhZmZpY0luZGljYXRpb25QcmVmZXJlbmNlCTogMHglWCIsCiAJCXBzdEFkZEluZGljYXRpb24tPnNmQXV0aG9yaXplZFNldC51OFRyYWZmaWNJbmRpY2F0aW9uUHJlZmVyZW5jZSk7CiAKLQlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgIiBUb3RhbCBDbGFzc2lmaWVycyBSZWNpZXZlZAkJOiAweCVYIixwc3RBZGRJbmRpY2F0aW9uLT5zZkF1dGhvcml6ZWRTZXQudThUb3RhbENsYXNzaWZpZXJzKTsKKwlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgIiBUb3RhbCBDbGFzc2lmaWVycyBSZWNlaXZlZAkJOiAweCVYIixwc3RBZGRJbmRpY2F0aW9uLT5zZkF1dGhvcml6ZWRTZXQudThUb3RhbENsYXNzaWZpZXJzKTsKIAogCW5DdXJDbGFzc2lmaWVyQ250ID0gcHN0QWRkSW5kaWNhdGlvbi0+c2ZBdXRob3JpemVkU2V0LnU4VG90YWxDbGFzc2lmaWVyczsKIApAQCAtMTMwNSw3ICsxMzA1LDcgQEAKIAlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgInU4VHJhZmZpY0luZGljYXRpb25QcmVmZXJlbmNlCTogMHglMDJYIiwKIAkJcHN0QWRkSW5kaWNhdGlvbi0+c2ZBZG1pdHRlZFNldC51OFRyYWZmaWNJbmRpY2F0aW9uUHJlZmVyZW5jZSk7CiAKLQlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgIiBUb3RhbCBDbGFzc2lmaWVycyBSZWNpZXZlZAkJOiAweCVYIixwc3RBZGRJbmRpY2F0aW9uLT5zZkFkbWl0dGVkU2V0LnU4VG90YWxDbGFzc2lmaWVycyk7CisJQkNNX0RFQlVHX1BSSU5UKCBBZGFwdGVyLERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgICIgVG90YWwgQ2xhc3NpZmllcnMgUmVjZWl2ZWQJCTogMHglWCIscHN0QWRkSW5kaWNhdGlvbi0+c2ZBZG1pdHRlZFNldC51OFRvdGFsQ2xhc3NpZmllcnMpOwogCiAJbkN1ckNsYXNzaWZpZXJDbnQgPSBwc3RBZGRJbmRpY2F0aW9uLT5zZkFkbWl0dGVkU2V0LnU4VG90YWxDbGFzc2lmaWVyczsKIApAQCAtMTUwMiw3ICsxNTAyLDcgQEAKIAlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgIiB1OFRyYWZmaWNJbmRpY2F0aW9uUHJlZmVyZW5jZQk6IDB4JVgiLAogCQlwc3RBZGRJbmRpY2F0aW9uLT5zZkFjdGl2ZVNldC51OFRyYWZmaWNJbmRpY2F0aW9uUHJlZmVyZW5jZSk7CiAKLQlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgIiBUb3RhbCBDbGFzc2lmaWVycyBSZWNpZXZlZAkJOiAweCVYIixwc3RBZGRJbmRpY2F0aW9uLT5zZkFjdGl2ZVNldC51OFRvdGFsQ2xhc3NpZmllcnMpOworCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAiIFRvdGFsIENsYXNzaWZpZXJzIFJlY2VpdmVkCQk6IDB4JVgiLHBzdEFkZEluZGljYXRpb24tPnNmQWN0aXZlU2V0LnU4VG90YWxDbGFzc2lmaWVycyk7CiAKIAluQ3VyQ2xhc3NpZmllckNudCA9IHBzdEFkZEluZGljYXRpb24tPnNmQWN0aXZlU2V0LnU4VG90YWxDbGFzc2lmaWVyczsKIApAQCAtMTY5Niw3ICsxNjk2LDcgQEAKIAkJLy9ObyBTcGVjaWFsIGhhbmRsaW5nIHNlbmQgdGhlIG1lc3NhZ2UgYXMgaXQgaXMKIAkJcmV0dXJuIDE7CiAJfQotCS8vIEZvciBEU0FfUkVRLCBvbmx5IHVwdG8gInBzZkF1dGhvcml6ZWRTZXQiIHBhcmFtZXRlciBzaG91bGQgYmUgYWNjZXNzZWQgYnkgZHJpdmVyIQorCS8vIEZvciBEU0FfUkVRLCBvbmx5IHVwIHRvICJwc2ZBdXRob3JpemVkU2V0IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IGRyaXZlciEKIAogCXBzdEFkZEluZGljYXRpb249a21hbGxvYyhzaXplb2YoKnBzdEFkZEluZGljYXRpb24pLCBHRlBfS0VSTkVMKTsKIAlpZihOVUxMPT1wc3RBZGRJbmRpY2F0aW9uKQpAQCAtMTc4OCw3ICsxNzg4LDcgQEAKIAlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJJbnNpZGUgUmVzdG9yZUNtQ29udHJvbFJlc3BvbnNlTWVzc2FnZSAiKTsKIAkvKgogCS8vTmVlZCB0byBBbGxvY2F0ZSBtZW1vcnkgdG8gY29udGFpbiB0aGUgU1VQRVIgTGFyZ2Ugc3RydWN0dXJlcwotCS8vT3VyIGRyaXZlciBjYW50IGNyZWF0ZSB0aGVzZSBzdHJ1Y3R1cmVzIG9uIFN0YWNrIDooCisJLy9PdXIgZHJpdmVyIGNhbid0IGNyZWF0ZSB0aGVzZSBzdHJ1Y3R1cmVzIG9uIFN0YWNrIDooCiAJKi8KIAlwc3RBZGRJbmRpY2F0aW9uRGVzdD1rbWFsbG9jKHNpemVvZihzdExvY2FsU0ZBZGRJbmRpY2F0aW9uQWx0KSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTE5NTcsNyArMTk1Nyw3IEBACiB7CiAJLyoKIAkvL05lZWQgdG8gQWxsb2NhdGUgbWVtb3J5IHRvIGNvbnRhaW4gdGhlIFNVUEVSIExhcmdlIHN0cnVjdHVyZXMKLQkvL091ciBkcml2ZXIgY2FudCBjcmVhdGUgdGhlc2Ugc3RydWN0dXJlcyBvbiBTdGFjaworCS8vT3VyIGRyaXZlciBjYW4ndCBjcmVhdGUgdGhlc2Ugc3RydWN0dXJlcyBvbiBTdGFjawogCSovCiAJQWRhcHRlci0+Y2FEc3hSZXFSZXNwPWttYWxsb2Moc2l6ZW9mKHN0TG9jYWxTRkFkZEluZGljYXRpb25BbHQpK0xFQURFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZighQWRhcHRlci0+Y2FEc3hSZXFSZXNwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9Ib3N0TUlCU0ludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9Ib3N0TUlCU0ludGVyZmFjZS5oCmluZGV4IGYxN2E0ZjEuLmUzNDUzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSG9zdE1JQlNJbnRlcmZhY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0hvc3RNSUJTSW50ZXJmYWNlLmgKQEAgLTYyLDcgKzYyLDcgQEAKIAlVTE9ORwkJCU51bURlc1VzZWQ7CiAJVUxPTkcJCQlDdXJyTnVtRnJlZURlc2M7CiAJVUxPTkcJCQlQcmV2TnVtRnJlZURlc2M7Ci0JLy8gdG8ga2VlcCB0cmFjayB0aGUgbm8gb2YgYnl0ZSByZWNpZXZlZAorCS8vIHRvIGtlZXAgdHJhY2sgdGhlIG5vIG9mIGJ5dGUgcmVjZWl2ZWQKIAlVTE9ORwkJCVByZXZOdW1SY2V2Qnl0ZXM7CiAJVUxPTkcJCQlDdXJyTnVtUmNldkJ5dGVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0lQdjZQcm90b2NvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9JUHY2UHJvdG9jb2wuYwppbmRleCA5MWI2ZmJlLi41YjRmZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0lQdjZQcm90b2NvbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vSVB2NlByb3RvY29sLmMKQEAgLTI4Nyw3ICsyODcsNyBAQAogCiAJZm9yKHVpTG9vcEluZGV4PTA7dWlMb29wSW5kZXg8dWlDb3VudElQU3JjQWRkcmVzc2VzO3VpTG9vcEluZGV4Kz11aUlwdjZBZGRyTm9Mb25nV29yZHMpCiAJewotCQlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfVFgsIElQVjZfREJHLCBEQkdfTFZMX0FMTCwgIlxuIFNyYyBJcHY2IEFkZHJlc3MgSW4gUmVjaWV2ZWQgUGFja2V0IDogXG4gIik7CisJCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9UWCwgSVBWNl9EQkcsIERCR19MVkxfQUxMLCAiXG4gU3JjIElwdjYgQWRkcmVzcyBJbiBSZWNlaXZlZCBQYWNrZXQgOiBcbiAiKTsKIAkJRHVtcElwdjZBZGRyZXNzKGF1bFNyY0lQKTsKIAkJQkNNX0RFQlVHX1BSSU5UKCBBZGFwdGVyLERCR19UWVBFX1RYLCBJUFY2X0RCRywgREJHX0xWTF9BTEwsICJcbiBTcmMgSXB2NiBNYXNrIEluIENsYXNzaWZpZXIgUnVsZTogXG4iKTsKIAkJRHVtcElwdjZBZGRyZXNzKCZwc3RDbGFzc2lmaWVyUnVsZS0+c3RTcmNJcEFkZHJlc3MudWxJcHY2TWFza1t1aUxvb3BJbmRleF0pOwpAQCAtMzQwLDcgKzM0MCw3IEBACiAKIAlmb3IodWlMb29wSW5kZXg9MDt1aUxvb3BJbmRleDx1aUNvdW50SVBEZXN0aW5hdGlvbkFkZHJlc3Nlczt1aUxvb3BJbmRleCs9dWlJcHY2QWRkck5vTG9uZ1dvcmRzKQogCXsKLQkJQkNNX0RFQlVHX1BSSU5UKCBBZGFwdGVyLERCR19UWVBFX1RYLCBJUFY2X0RCRywgREJHX0xWTF9BTEwsICJcbiBEZXN0aW5hdGlvbiBJcHY2IEFkZHJlc3MgSW4gUmVjaWV2ZWQgUGFja2V0IDogXG4gIik7CisJCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9UWCwgSVBWNl9EQkcsIERCR19MVkxfQUxMLCAiXG4gRGVzdGluYXRpb24gSXB2NiBBZGRyZXNzIEluIFJlY2VpdmVkIFBhY2tldCA6IFxuICIpOwogCQlEdW1wSXB2NkFkZHJlc3MoYXVsRGVzdElQKTsKIAkJQkNNX0RFQlVHX1BSSU5UKCBBZGFwdGVyLERCR19UWVBFX1RYLCBJUFY2X0RCRywgREJHX0xWTF9BTEwsICJcbiBEZXN0aW5hdGlvbiBJcHY2IE1hc2sgSW4gQ2xhc3NpZmllciBSdWxlOiBcbiIpOwogCQlEdW1wSXB2NkFkZHJlc3MoJnBzdENsYXNzaWZpZXJSdWxlLT5zdERlc3RJcEFkZHJlc3MudWxJcHY2TWFza1t1aUxvb3BJbmRleF0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJZGxlTW9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJZGxlTW9kZS5jCmluZGV4IGJmNWMwYWQuLjk2ZmE0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlSWRsZU1vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUlkbGVNb2RlLmMKQEAgLTExLDcgKzExLDcgQEAKIAogCiBSZXR1cm46CQkJCUJDTV9TVEFUVVNfU1VDQ0VTUyAtIElmIFdha2V1cCBvZiB0aGUgSFcgSW50ZXJmYWNlIHdhcyBzdWNjZXNzZnVsLgotCQkJCQkJT3RoZXIgICAgICAgICAgIC0gSWYgYW4gZXJyb3Igb2NjdXJlZC4KKwkJCQkJCU90aGVyICAgICAgICAgICAtIElmIGFuIGVycm9yIG9jY3VycmVkLgogKi8KIAogCkBAIC0yNiw3ICsyNiw3IEBACiAKIAogUmV0dXJuOgkJCQlCQ01fU1RBVFVTX1NVQ0NFU1MgLSBJZiBJZGxlIG1vZGUgcmVzcG9uc2UgcmVsYXRlZCBIVyBjb25maWd1cmF0aW9uIHdhcyBzdWNjZXNzZnVsLgotCQkJCQkJT3RoZXIgICAgICAgICAgIC0gSWYgYW4gZXJyb3Igb2NjdXJlZC4KKwkJCQkJCU90aGVyICAgICAgICAgICAtIElmIGFuIGVycm9yIG9jY3VycmVkLgogKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlSXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUlzci5jCmluZGV4IDIyMGZmOTIuLjY3NzE5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlSXNyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJc3IuYwpAQCAtODAsOCArODAsOCBAQAogCQl9CiAJCWNhc2UgLUVJTlBST0dSRVNTOgogCQl7Ci0JCQkvL1RoaXMgc2l0dWF0aW9uIG1heSBoYXBwZW5kIHdoZW4gVVJCdW5saW5rIGlzIHVzZWQuIGZvciBkZXRhaWwgY2hlY2sgdXNiX3VubGlua191cmIgZG9jdW1lbnRhdGlvbi4KLQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX09USEVSUywgSU5URl9JTklULCBEQkdfTFZMX0FMTCwiSW1wb3NzaWJlIGNvbmRpdGlvbiBoYXMgb2NjdXJlZC4uLiBzb21ldGhpbmcgdmVyeSBiYWQgaXMgZ29pbmcgb24iKTsKKwkJCS8vVGhpcyBzaXR1YXRpb24gbWF5IGhhcHBlbmVkIHdoZW4gVVJCdW5saW5rIGlzIHVzZWQuIGZvciBkZXRhaWwgY2hlY2sgdXNiX3VubGlua191cmIgZG9jdW1lbnRhdGlvbi4KKwkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX09USEVSUywgSU5URl9JTklULCBEQkdfTFZMX0FMTCwiSW1wb3NzaWJlIGNvbmRpdGlvbiBoYXMgb2NjdXJyZWQuLi4gc29tZXRoaW5nIHZlcnkgYmFkIGlzIGdvaW5nIG9uIik7CiAJCQlicmVhayA7CiAJCQkvL3JldHVybjsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VSeC5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VSeC5jCmluZGV4IDUzM2Y4ZWIuLjgwNmVmNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlUnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZVJ4LmMKQEAgLTM0LDcgKzM0LDcgQEAKIAlyZXR1cm4gcFJjYjsKIH0KIAotLyp0aGlzIGlzIHJlY2VpdmUgY2FsbCBiYWNrIC0gd2hlbiBwa3QgYXZpbGFibGUgZm9yIHJlY2VpdmUgKEJVTEsgSU4tIGVuZCBwb2ludCkqLworLyp0aGlzIGlzIHJlY2VpdmUgY2FsbCBiYWNrIC0gd2hlbiBwa3QgYXZhaWxhYmxlIGZvciByZWNlaXZlIChCVUxLIElOLSBlbmQgcG9pbnQpKi8KIHN0YXRpYyB2b2lkIHJlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAlpZigobnRvaHMocExlYWRlci0+VmNpZCkgPT0gVkNJRF9DT05UUk9MX1BBQ0tFVCkgfHwKIAkgICAgKCEocExlYWRlci0+U3RhdHVzID49IDB4MjAgICYmICBwTGVhZGVyLT5TdGF0dXMgPD0gMHgzRikpKQogCXsKLQkgICAgQkNNX0RFQlVHX1BSSU5UKHBzSW50ZkFkYXB0ZXItPnBzQWRhcHRlcixEQkdfVFlQRV9SWCwgUlhfQ1RSTCwgREJHX0xWTF9BTEwsICJSZWNpdmVkIGNvbnRyb2wgcGt0Li4uIik7CisJICAgIEJDTV9ERUJVR19QUklOVChwc0ludGZBZGFwdGVyLT5wc0FkYXB0ZXIsREJHX1RZUEVfUlgsIFJYX0NUUkwsIERCR19MVkxfQUxMLCAiUmVjZWl2ZWQgY29udHJvbCBwa3QuLi4iKTsKIAkJKihQVVNIT1JUKXNrYi0+ZGF0YSA9IHBMZWFkZXItPlN0YXR1czsKICAgICAgICAJbWVtY3B5KHNrYi0+ZGF0YStzaXplb2YoVVNIT1JUKSwgdXJiLT50cmFuc2Zlcl9idWZmZXIgKwogCQkJKHNpemVvZihMRUFERVIpKSwgcExlYWRlci0+UExlbmd0aCk7CkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJICAqIERhdGEgUGFja2V0LCBGb3JtYXQgYSBwcm9wZXIgRXRoZXJuZXQgSGVhZGVyCiAgICAgICAgIAkgICogYW5kIGdpdmUgaXQgdG8gdGhlIHN0YWNrCiAJCSAgKi8KLSAgICAgICAgQkNNX0RFQlVHX1BSSU5UKHBzSW50ZkFkYXB0ZXItPnBzQWRhcHRlcixEQkdfVFlQRV9SWCwgUlhfREFUQSwgREJHX0xWTF9BTEwsICJSZWNpdmVkIERhdGEgcGt0Li4uIik7CisgICAgICAgIEJDTV9ERUJVR19QUklOVChwc0ludGZBZGFwdGVyLT5wc0FkYXB0ZXIsREJHX1RZUEVfUlgsIFJYX0RBVEEsIERCR19MVkxfQUxMLCAiUmVjZWl2ZWQgRGF0YSBwa3QuLi4iKTsKIAkJc2tiX3Jlc2VydmUoc2tiLCAyICsgU0tCX1JFU0VSVkVfUEhTX0JZVEVTKTsKIAkJbWVtY3B5KHNrYi0+ZGF0YStFVEhfSExFTiwgKFBVQ0hBUil1cmItPnRyYW5zZmVyX2J1ZmZlciArIHNpemVvZihMRUFERVIpLCBwTGVhZGVyLT5QTGVuZ3RoKTsKIAkJc2tiLT5kZXYgPSBBZGFwdGVyLT5kZXY7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJc2tiX3B1dCAoc2tiLCBwTGVhZGVyLT5QTGVuZ3RoICsgRVRIX0hMRU4pOwogCQlBZGFwdGVyLT5QYWNrSW5mb1tRdWV1ZUluZGV4XS51aVRvdGFsUnhCeXRlcys9cExlYWRlci0+UExlbmd0aDsKIAkJQWRhcHRlci0+UGFja0luZm9bUXVldWVJbmRleF0udWlUaGlzUGVyaW9kUnhCeXRlcys9IHBMZWFkZXItPlBMZW5ndGg7Ci0gICAgICAgIEJDTV9ERUJVR19QUklOVChwc0ludGZBZGFwdGVyLT5wc0FkYXB0ZXIsREJHX1RZUEVfUlgsIFJYX0RBVEEsIERCR19MVkxfQUxMLCAiUmVjaXZlZCBEYXRhIHBrdCBvZiBsZW4gOjB4JVgiLCBwTGVhZGVyLT5QTGVuZ3RoKTsKKyAgICAgICAgQkNNX0RFQlVHX1BSSU5UKHBzSW50ZkFkYXB0ZXItPnBzQWRhcHRlcixEQkdfVFlQRV9SWCwgUlhfREFUQSwgREJHX0xWTF9BTEwsICJSZWNlaXZlZCBEYXRhIHBrdCBvZiBsZW4gOjB4JVgiLCBwTGVhZGVyLT5QTGVuZ3RoKTsKIAogCQlpZihuZXRpZl9ydW5uaW5nKEFkYXB0ZXItPmRldikpCiAJCXsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCiAKIFJldHVybjoJCQkJVFJVRSAgLSBJZiBSeCB3YXMgc3VjY2Vzc2Z1bC4KLQkJCQkJT3RoZXIgLSBJZiBhbiBlcnJvciBvY2N1cmVkLgorCQkJCQlPdGhlciAtIElmIGFuIGVycm9yIG9jY3VycmVkLgogKi8KIAogQk9PTEVBTiBJbnRlcmZhY2VSeCAoUFNfSU5URVJGQUNFX0FEQVBURVIgcHNJbnRmQWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9iY20vSW9jdGwuaAppbmRleCBlNGY4ZWI3Li5mODU5Y2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0lvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9Jb2N0bC5oCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogdHlwZWRlZiBlbnVtIF9GTEFTSDJYX1NFQ1RJT05fVkFMCiB7Ci0JTk9fU0VDVElPTl9WQUwgPSAwLCAvL25vIHNlY3Rpb24gaXMgY2hvb3NlbiB3aGVuIGFic29sdXRlIG9mZnNldCBpcyBnaXZlbiBmb3IgUkQvV1IKKwlOT19TRUNUSU9OX1ZBTCA9IDAsIC8vbm8gc2VjdGlvbiBpcyBjaG9zZW4gd2hlbiBhYnNvbHV0ZSBvZmZzZXQgaXMgZ2l2ZW4gZm9yIFJEL1dSCiAJSVNPX0lNQUdFMSwKIAlJU09fSU1BR0UyLAogCURTRDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0xlYWt5QnVja2V0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0xlYWt5QnVja2V0LmMKaW5kZXggZjRjZjQxYy4uYTU1ZDQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9MZWFreUJ1Y2tldC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vTGVha3lCdWNrZXQuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfVFgsIFRYX1BBQ0tFVFMsIERCR19MVkxfQUxMLCAiRm9yIFF1ZXVlOiAlemRcbiIsIHBzU0YtQWRhcHRlci0+UGFja0luZm8pOwogCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX1RYLCBUWF9QQUNLRVRTLCBEQkdfTFZMX0FMTCwgIlxuQXZhaWxhYmxlIFRva2VucyA9ICVkIHJlcXVpcmVkID0gJWRcbiIsCiAJCQkJCXBzU0YtPnVpQ3VycmVudFRva2VuQ291bnQsIGlQYWNrZXRMZW4pOwotCQkJCS8vdGhpcyBwYXJ0IGluZGljYXRlcyB0aGF0IGJlY3Vhc2Ugb2Ygbm9uLWF2YWlsYWJpbGl0eSBvZiB0aGUgdG9rZW5zCisJCQkJLy90aGlzIHBhcnQgaW5kaWNhdGVzIHRoYXQgYmVjYXVzZSBvZiBub24tYXZhaWxhYmlsaXR5IG9mIHRoZSB0b2tlbnMKIAkJCQkvL3BrdCBoYXMgbm90IGJlZW4gc2VuZCBvdXQgaGVuY2Ugc2V0dGluZyB0aGUgcGVuZGluZyBmbGFnIGluZGljYXRpbmcgdGhlIGhvc3QgdG8gc2VuZCBpdCBvdXQKIAkJCQkvL2ZpcnN0IG5leHQgaXRlcmF0aW9uICAuCiAJCQkJcHNTRi0+dWlQZW5kZWRMYXN0ID0gVFJVRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vTWlzYy5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9NaXNjLmMKaW5kZXggZDYyNGYzNS4uYzUwMDNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9NaXNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9NaXNjLmMKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJCUFkYXB0ZXItPkxpbmtTdGF0dXM9TElOS1VQX0RPTkU7CiAJCQkJQWRhcHRlci0+YlBIU0VuYWJsZWQgPSAqKHB1Y0J1ZmZlciszKTsKICAgICAgICAgICAgICAgIAlBZGFwdGVyLT5iRVRIQ1NFbmFibGVkID0gKihwdWNCdWZmZXIrNCkgJiBFVEhfQ1NfTUFTSzsKLQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9QUklOVEssIDAsIDAsICJQSFMgU3VwcG9ydCBTdGF0dXMgUmVjaWV2ZWQgSW4gTGlua1VwIEFjayA6ICV4IFxuIixBZGFwdGVyLT5iUEhTRW5hYmxlZCk7CisJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfUFJJTlRLLCAwLCAwLCAiUEhTIFN1cHBvcnQgU3RhdHVzIFJlY2VpdmVkIEluIExpbmtVcCBBY2sgOiAleCBcbiIsQWRhcHRlci0+YlBIU0VuYWJsZWQpOwogCQkJCWlmKChGQUxTRSA9PSBBZGFwdGVyLT5iU2h1dFN0YXR1cykmJgogCQkJCQkoRkFMU0UgPT0gQWRhcHRlci0+SWRsZU1vZGUpKQogCQkJCXsKQEAgLTExNTMsNyArMTE1Myw3IEBACiAKIAkvKgogICAgICAqIDEuIElmIHRoZSBMRUQgU2V0dGluZ3MgZmFpbHMsIGRvIG5vdCBzdG9wIGFuZCBkbyB0aGUgRmlybXdhcmUgZG93bmxvYWQuCi0gICAgICogMi4gVGhpcyBpbml0IHdvdWxkIGhhcHBlbmQgb25seSBpZiB0aGUgY2ZnIGZpbGUgaXMgcHJlc2VudCwgZWxzZQorICAgICAqIDIuIFRoaXMgaW5pdCB3b3VsZCBoYXBwZW5lZCBvbmx5IGlmIHRoZSBjZmcgZmlsZSBpcyBwcmVzZW50LCBlbHNlCiAgICAgICogICAgY2FsbCBmcm9tIHRoZSBpb2N0bCBjb250ZXh0LgogICAgICAqLwogCkBAIC0xMTg1LDcgKzExODUsNyBAQAogCQlzdGF0dXMgPSBQcm9wYWdhdGVDYWxQYXJhbXNGcm9tRmxhc2hUb01lbW9yeShwc19hZGFwdGVyKTsKIAkJaWYoc3RhdHVzKQogCQl7Ci0JCQlCQ01fREVCVUdfUFJJTlQocHNfYWRhcHRlcixEQkdfVFlQRV9JTklURVhJVCwgTVBfSU5JVCwgREJHX0xWTF9BTEwsIiBQcm9wb2dhdGlvbiBvZiBDYWwgcGFyYW0gZmFpbGVkIC4uIiApOworCQkJQkNNX0RFQlVHX1BSSU5UKHBzX2FkYXB0ZXIsREJHX1RZUEVfSU5JVEVYSVQsIE1QX0lOSVQsIERCR19MVkxfQUxMLCIgUHJvcGFnYXRpb24gb2YgQ2FsIHBhcmFtIGZhaWxlZCAuLiIgKTsKIAkJCWdvdG8gT1VUOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9Rb3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vUW9zLmMKaW5kZXggZmVhZGU5NC4uYzk3MDIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9Rb3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL1Fvcy5jCkBAIC03MjcsNyArNzI3LDcgQEAKIAogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIiVzICBDTFMgVXNlclByaW86JXggQ0xTIFZMQU5JRDoleFxuIixfX0ZVTkNUSU9OX18sbnRvaHMoKigoVVNIT1JUICopcHN0Q2xhc3NpZmllclJ1bGUtPnVzVXNlclByaW9yaXR5KSkscHN0Q2xhc3NpZmllclJ1bGUtPnVzVkxBTklEKTsKIAotCS8qIEluIGNhc2UgRlcgZGlkbid0IHJlY2lldmUgdGhlIFRMViwgdGhlIHByaW9yaXR5IGZpZWxkIHNob3VsZCBiZSBpZ25vcmVkICovCisJLyogSW4gY2FzZSBGVyBkaWRuJ3QgcmVjZWl2ZSB0aGUgVExWLCB0aGUgcHJpb3JpdHkgZmllbGQgc2hvdWxkIGJlIGlnbm9yZWQgKi8KIAlpZihwc3RDbGFzc2lmaWVyUnVsZS0+dXNWYWxpZGl0eUJpdE1hcCAmICgxPDxQS1RfQ0xBU1NJRklDQVRJT05fVVNFUl9QUklPUklUWV9WQUxJRCkpCiAJewogCQlpZihwc3RFdGhDc1BrdEluZm8tPmVOd3BrdEV0aEZyYW1lVHlwZSE9ZUV0aDgwMlFWTEFORnJhbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL2NudHJsX1NpZ25hbGluZ0ludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9jbnRybF9TaWduYWxpbmdJbnRlcmZhY2UuaAppbmRleCA4OTA3Nzg0Li5hYjEzMTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL2NudHJsX1NpZ25hbGluZ0ludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vY250cmxfU2lnbmFsaW5nSW50ZXJmYWNlLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgVkVORE9SX1BIU19QQVJBTV9MRU5HVEggMTAKICNkZWZpbmUgTUFYX05VTV9BQ1RJVkVfQlMgMTAKICNkZWZpbmUgQVVUSF9UT0tFTl9MRU5HVEgJMTAKLSNkZWZpbmUgTlVNX0hBUlFfQ0hBTk5FTFMJMTYJLy9DaGFuZ2VkIGZyb20gMTAgdG8gMTYgdG8gYWNjb21vZGF0ZSBhbGwgSEFSUSBjaGFubmVscworI2RlZmluZSBOVU1fSEFSUV9DSEFOTkVMUwkxNgkvL0NoYW5nZWQgZnJvbSAxMCB0byAxNiB0byBhY2NvbW1vZGF0ZSBhbGwgSEFSUSBjaGFubmVscwogI2RlZmluZSBWRU5ET1JfQ0xBU1NJRklFUl9QQVJBTV9MRU5HVEggMSAvL0NoYW5nZWQgdGhlIHNpemUgdG8gMSBieXRlIHNpbmNlIHdlIGRudCB1c2UgaXQKICNkZWZpbmUgIFZFTkRPUl9TUEVDSUZfUU9TX1BBUkFNIDEKICNkZWZpbmUgVkVORE9SX1BIU19QQVJBTV9MRU5HVEgJMTAKQEAgLTEwOSwxMyArMTA5LDEzIEBACiAgICAgQl9VSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICB1OFBIU0k7CiAJLyoqICBQSFNGIExlbmd0aCBPZiBUaGUgU2VydmljZSBGbG93Ki8KICAgICBCX1VJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHU4UEhTRkxlbmd0aDsKLSAgICAvKiogU3RyaW5nIG9mIGJ5dGVzIGNvbnRhaW5pbmcgaGVhZGVyIGluZm9ybWF0aW9uIHRvIGJlIHN1cHJlc3NlZCBieSB0aGUgc2VuZGluZyBDUyBhbmQgcmVjb25zdHJ1Y3RlZCBieSB0aGUgcmVjZWl2aW5nIENTKi8KKyAgICAvKiogU3RyaW5nIG9mIGJ5dGVzIGNvbnRhaW5pbmcgaGVhZGVyIGluZm9ybWF0aW9uIHRvIGJlIHN1cHByZXNzZWQgYnkgdGhlIHNlbmRpbmcgQ1MgYW5kIHJlY29uc3RydWN0ZWQgYnkgdGhlIHJlY2VpdmluZyBDUyovCiAgICAgQl9VSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICB1OFBIU0ZbTUFYX1BIU19MRU5HVEhTXTsKIAkvKiogIFBIU00gTGVuZ3RoIE9mIFRoZSBTZXJ2aWNlIEZsb3cqLwogICAgIEJfVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgdThQSFNNTGVuZ3RoOwogCS8qKiAgUEhTIE1hc2sgZm9yIHRoZSBTRiovCiAgICAgQl9VSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICB1OFBIU01bTUFYX1BIU19MRU5HVEhTXTsKLQkvKiogIDhiaXQgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHN1cHJlc3NlZCBmb3IgdGhlIFNlcnZpY2UgRmxvdyovCisJLyoqICA4Yml0IFRvdGFsIG51bWJlciBvZiBieXRlcyB0byBiZSBzdXBwcmVzc2VkIGZvciB0aGUgU2VydmljZSBGbG93Ki8KICAgICBCX1VJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHU4UEhTUzsKIAkvKiogIDhiaXQgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IFBhY2tldCBIZWFkZXIgY29udGVudHMgbmVlZCB0byBiZSB2ZXJpZmllZCBwcmlvciB0byBzdXByZXNzaW9uICovCiAgICAgQl9VSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICB1OFBIU1Y7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL252bS5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9udm0uYwppbmRleCBjNzI5MjM3Li40ZGE1YjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL252bS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vbnZtLmMKQEAgLTMxMyw3ICszMTMsNyBAQAogLy8JCXVpTnVtQnl0ZXMgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIHRoZSBFRVBST00uCiAvLwogLy8gUmV0dXJuczoKLS8vCQlPU0FMX1NUQVRVU19TVUNDRVNTIC0gaWYgRUVQUk9NIHJlYWQgaXMgc3VjY2Vzc2Z1bGwuCisvLwkJT1NBTF9TVEFUVVNfU1VDQ0VTUyAtIGlmIEVFUFJPTSByZWFkIGlzIHN1Y2Nlc3NmdWwuCiAvLwkJPEZBSUxVUkU+CQkJLSBpZiBmYWlsZWQuCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTQzMSw3ICs0MzEsNyBAQAogLy8JCXVpTnVtQnl0ZXMgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIHRoZSBGTEFTSC4KIC8vCiAvLyBSZXR1cm5zOgotLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBGTEFTSCByZWFkIGlzIHN1Y2Nlc3NmdWxsLgorLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBGTEFTSCByZWFkIGlzIHN1Y2Nlc3NmdWwuCiAvLwkJPEZBSUxVUkU+CQkJLSBpZiBmYWlsZWQuCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExNzQsNyArMTE3NCw3IEBACiAJaWYoTlVMTCA9PSBwVGVtcEJ1ZmYpCiAJCWdvdG8gQmVjZWVtRmxhc2hCdWxrV3JpdGVfRVhJVDsKIC8vCi0vLyBjaGVjayBpZiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIGlzIG92ZXJsYXBwZWQgYWNjcm9zcyBzZWN0b3JzCisvLyBjaGVjayBpZiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIGlzIG92ZXJsYXBwZWQgYWNyb3NzIHNlY3RvcnMKIC8vCiAJaWYodWlPZmZzZXQrdWlOdW1CeXRlcyA8IHVpU2VjdEJvdW5kYXJ5KQogCXsKQEAgLTEzOTAsNyArMTM5MCw3IEBACiAJCWdvdG8gQmVjZWVtRmxhc2hCdWxrV3JpdGVTdGF0dXNfRVhJVDsKIAogLy8KLS8vIGNoZWNrIGlmIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gaXMgb3ZlcmxhcHBlZCBhY2Nyb3NzIHNlY3RvcnMKKy8vIGNoZWNrIGlmIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gaXMgb3ZlcmxhcHBlZCBhY3Jvc3Mgc2VjdG9ycwogLy8KIAlpZih1aU9mZnNldCt1aU51bUJ5dGVzIDwgdWlTZWN0Qm91bmRhcnkpCiAJewpAQCAtMjAyMCw3ICsyMDIwLDcgQEAKIC8vCQl1aU51bUJ5dGVzIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlYWQgZnJvbSB0aGUgTlZNLgogLy8KIC8vIFJldHVybnM6Ci0vLwkJT1NBTF9TVEFUVVNfU1VDQ0VTUyAtIGlmIE5WTSByZWFkIGlzIHN1Y2Nlc3NmdWxsLgorLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBOVk0gcmVhZCBpcyBzdWNjZXNzZnVsLgogLy8JCTxGQUlMVVJFPgkJCS0gaWYgZmFpbGVkLgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMDgzLDcgKzIwODMsNyBAQAogLy8JCXVpTnVtQnl0ZXMgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbi4uCiAvLwogLy8gUmV0dXJuczoKLS8vCQlPU0FMX1NUQVRVU19TVUNDRVNTIC0gaWYgTlZNIHdyaXRlIGlzIHN1Y2Nlc3NmdWxsLgorLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBOVk0gd3JpdGUgaXMgc3VjY2Vzc2Z1bC4KIC8vCQk8RkFJTFVSRT4JCQktIGlmIGZhaWxlZC4KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjIxOCw3ICsyMjE4LDcgQEAKIC8vICAgICAgICAgIHVpU2VjdG9yU2l6ZSAtIHNlY3RvciBzaXplCiAvLwogLy8gUmV0dXJuczoKLS8vCQlPU0FMX1NUQVRVU19TVUNDRVNTIC0gaWYgTlZNIHdyaXRlIGlzIHN1Y2Nlc3NmdWxsLgorLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBOVk0gd3JpdGUgaXMgc3VjY2Vzc2Z1bC4KIC8vCQk8RkFJTFVSRT4JCQktIGlmIGZhaWxlZC4KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjQzMCw3ICsyNDMwLDcgQEAKICpJbnB1dCBQYXJhbWV0ZXI6CiAqCQlBZGFwdGVyIGRhdGEgc3RydWN0dXJlCiAqUmV0dXJuIFZhbHVlIDoKLSoJCTAuIG1lYW5zIHN1Y2VzczsKKyoJCTAuIG1lYW5zIHN1Y2Nlc3M7CiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjk5OCw3ICsyOTk4LDcgQEAKIAkvKgogCSoJQ29uc2lkZXJpbmcgYWxsIHRoZSBzZWN0aW9uIGZvciB3aGljaCBlbmQgb2Zmc2V0IGNhbiBiZSBjYWxjdWxhdGVkIG9yIGRpcmVjdGx5IGdpdmVuCiAJKglpbiBDUyBTdHJ1Y3R1cmUuIGlmIG1hdGNoaW5nIGNhc2UgZG9lcyBub3QgZXhpc3QsIHJldHVybiBTVEFUVVNfRkFJTFVSRSBpbmRpY2F0aW5nIHNlY3Rpb24KLQkqCWVuZG9mZnNldCBjYW4ndCBiZSBjYWxjdWxhdGVkIG9yIGdpdmVuIGluIENTIFN0dWN0dXJlLgorCSoJZW5kb2Zmc2V0IGNhbid0IGJlIGNhbGN1bGF0ZWQgb3IgZ2l2ZW4gaW4gQ1MgU3RydWN0dXJlLgogCSovCiAKIAlJTlQgU2VjdFN0YXJ0T2Zmc2V0ID0gMCA7CkBAIC0zMTczLDcgKzMxNzMsNyBAQAogKglAdWlOdW1CeXRlcyA6IE51bWJlciBvZiBCeXRlcyBmb3IgUmVhZAogKgogKglSZXR1cm4gdmFsdWU6LQotKgkJcmV0dXJuIHRydWUgb24gc3VjZXNzIGFuZCBTVEFUVVNfRkFJTFVSRSBvbiBmYWlsLgorKgkJcmV0dXJuIHRydWUgb24gc3VjY2VzcyBhbmQgU1RBVFVTX0ZBSUxVUkUgb24gZmFpbC4KICovCiAKIElOVCBCY21GbGFzaDJ4QnVsa1JlYWQoCkBAIC0zMjQxLDcgKzMyNDEsNyBAQAogKglAdWlOdW1CeXRlcyA6IE51bWJlciBvZiBCeXRlcyBmb3IgV3JpdGUKICoKICoJUmV0dXJuIHZhbHVlOi0KLSoJCXJldHVybiB0cnVlIG9uIHN1Y2VzcyBhbmQgU1RBVFVTX0ZBSUxVUkUgb24gZmFpbC4KKyoJCXJldHVybiB0cnVlIG9uIHN1Y2Nlc3MgYW5kIFNUQVRVU19GQUlMVVJFIG9uIGZhaWwuCiAqCiAqLwogCkBAIC0zMzA4LDcgKzMzMDgsNyBAQAogKglAQWRhcHRlciA6LURyaXZlcnMgcHJpdmF0ZSBEYXRhIFN0cnVjdHVyZQogKgogKglSZXR1cm4gVmFsdWU6LQotKgkJUmV0dXJuIFNUQVRVU19TVUNFU1MgaWYgZ2V0IHN1Y2VzcyBpbiBzZXR0aW5nIHRoZSByaWdodCBEU0QgZWxzZSBuZWdhaXZlIGVycm9yIGNvZGUKKyoJCVJldHVybiBTVEFUVVNfU1VDRVNTIGlmIGdldCBzdWNjZXNzIGluIHNldHRpbmcgdGhlIHJpZ2h0IERTRCBlbHNlIG5lZ2FpdmUgZXJyb3IgY29kZQogKgogKiovCiBzdGF0aWMgSU5UIEJjbUdldEFjdGl2ZURTRChQTUlOSV9BREFQVEVSIEFkYXB0ZXIpCkBAIC0zMzg0LDcgKzMzODQsNyBAQAogKglAdWlPZmZzZXQgOiBPZmZzZXQgcHJvdmlkZWQgaW4gdGhlIEZsYXNoCiAqCiAqCVJldHVybiBWYWx1ZTotCi0qCVN1Y2VzczotVFJVRSAsICBvZmZzZXQgaXMgd3JpdGFibGUKKyoJU3VjY2VzczotVFJVRSAsICBvZmZzZXQgaXMgd3JpdGFibGUKICoJRmFpbHVyZTotRkFMU0UsIG9mZnNldCBpcyBSTwogKgogKiovCkBAIC0zNDQxLDcgKzM0NDEsNyBAQAogCUBBZGFwdGVyOi1Ecml2ZXIgcHJpdmF0ZSBEYXRhIFN0cnVjdHVyZQogKgogKglSZXR1cm4gdmFsdWU6LQotKglTdWNlc3M6LSBTVEFUVVNfU1VDRVNTCisqCVN1Y2Nlc3M6LSBTVEFUVVNfU1VDRVNTCiAqCUZhaWx1cmU6LSBuZWdhdGl2ZSBlcnJvciBjb2RlCiAqKi8KIApAQCAtMzc4Myw3ICszNzgzLDcgQEAKIAkJCQkJLy8gVGhpcyBpcyBhIFNQRUNJQUwgQ2FzZSB3aGljaCB3aWxsIG9ubHkgaGFwcGVuIGlmIHRoZSBjdXJyZW50IGhpZ2hlc3QgcHJpb3JpdHkgSVNPIGhhcyBwcmlvcml0eSB2YWx1ZSA9IDB4N0ZGRkZGRkYuCiAJCQkJCS8vIFdlIHdpbGwgd3JpdGUgMSB0byB0aGUgY3VycmVudCBIaWdoZXN0IHByaW9yaXR5IElTTyBBbmQgdGhlbiBzaGFsbCBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhlIHJlcXVlc3RlZCBJU08KIAkJCQkJLy8gYnkgdXNlcgotCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIE5WTV9SVywgREJHX0xWTF9BTEwsICJTZWN0SW1hZ2VQcmlvcml0eSB3cmFwYXJvdW5kIGhhcHBlbmQsIGVGbGFzaDJ4U2VjdFZhbDogMHgleFxuIixlRmxhc2gyeFNlY3RWYWwpOworCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIE5WTV9SVywgREJHX0xWTF9BTEwsICJTZWN0SW1hZ2VQcmlvcml0eSB3cmFwYXJvdW5kIGhhcHBlbmVkLCBlRmxhc2gyeFNlY3RWYWw6IDB4JXhcbiIsZUZsYXNoMnhTZWN0VmFsKTsKIAkJCQkJU2VjdEltYWdlUHJpb3JpdHkgPSBodG9ubCgweDEpOwogCQkJCQlTdGF0dXMgPSBCY21GbGFzaDJ4QnVsa1dyaXRlKEFkYXB0ZXIsCiAJCQkJCQkJCSZTZWN0SW1hZ2VQcmlvcml0eSwKQEAgLTM4NTMsNyArMzg1Myw3IEBACiAJCQkJCS8vIFRoaXMgaXMgYSBTUEVDSUFMIENhc2Ugd2hpY2ggd2lsbCBvbmx5IGhhcHBlbiBpZiB0aGUgY3VycmVudCBoaWdoZXN0IHByaW9yaXR5IERTRCBoYXMgcHJpb3JpdHkgdmFsdWUgPSAweDdGRkZGRkZGLgogCQkJCQkvLyBXZSB3aWxsIHdyaXRlIDEgdG8gdGhlIGN1cnJlbnQgSGlnaGVzdCBwcmlvcml0eSBEU0QgQW5kIHRoZW4gc2hhbGwgaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0ZWQgRFNECiAJCQkJCS8vIGJ5IHVzZXIKLQkJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfUFJJTlRLLCBOVk1fUlcsIERCR19MVkxfQUxMLCAiU2VjdEltYWdlUHJpb3JpdHkgd3JhcGFyb3VuZCBoYXBwZW5kLCBlRmxhc2gyeFNlY3RWYWw6IDB4JXhcbiIsZUZsYXNoMnhTZWN0VmFsKTsKKwkJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfUFJJTlRLLCBOVk1fUlcsIERCR19MVkxfQUxMLCAiU2VjdEltYWdlUHJpb3JpdHkgd3JhcGFyb3VuZCBoYXBwZW5lZCwgZUZsYXNoMnhTZWN0VmFsOiAweCV4XG4iLGVGbGFzaDJ4U2VjdFZhbCk7CiAJCQkJCVNlY3RJbWFnZVByaW9yaXR5ID0gaHRvbmwoMHgxKTsKIAogCQkJCQlTdGF0dXMgPSBCY21GbGFzaDJ4QnVsa1dyaXRlKEFkYXB0ZXIsCkBAIC00MTE5LDcgKzQxMTksNyBAQAogCQkJCQkJCQkJCQkJTUFYX1JXX1NJWkUpOwogCQkJCUlzVGhpc0hlYWRlclNlY3RvciA9IEZBTFNFIDsKIAkJCX0KLQkJCS8vc3Vic3RyYWN0aW5nIHRoZSB3cml0dGVuIERhdGEKKwkJCS8vc3VidHJhY3RpbmcgdGhlIHdyaXR0ZW4gRGF0YQogCQkJdWlUb3RhbERhdGFUb0NvcHkgPSB1aVRvdGFsRGF0YVRvQ29weSAtIEFkYXB0ZXItPnVpU2VjdG9yU2l6ZSA7CiAJCX0KIApAQCAtNDI1MCw3ICs0MjUwLDcgQEAKIAkJCQlJc1RoaXNIZWFkZXJTZWN0b3IgPSBGQUxTRSA7CiAJCQl9CiAKLQkJCS8vc3Vic3RyYWN0aW5nIHRoZSB3cml0dGVuIERhdGEKKwkJCS8vc3VidHJhY3RpbmcgdGhlIHdyaXR0ZW4gRGF0YQogCQkJdWlUb3RhbERhdGFUb0NvcHkgPSB1aVRvdGFsRGF0YVRvQ29weSAtIEFkYXB0ZXItPnVpU2VjdG9yU2l6ZSA7CiAJCX0KIApAQCAtNDI2OCw3ICs0MjY4LDcgQEAKIEBlRmxhc2gyeFNlY3Rpb25WYWwgOi0gRmxhc2ggc2VjdGlvbiB2YWwgd2hpY2ggaGFzIGhlYWRlcgogCiBSZXR1cm4gVmFsdWUgOi0KLQlTdWNlc3MgOi0gSWYgU2VjdGlvbiBpcyBwcmVzZW50IGFuZCB3cml0YWJsZSwgY29ycnVwdCB0aGUgc2lnIGFuZCByZXR1cm4gU1RBVFVTX1NVQ0NFU1MKKwlTdWNjZXNzIDotIElmIFNlY3Rpb24gaXMgcHJlc2VudCBhbmQgd3JpdGFibGUsIGNvcnJ1cHQgdGhlIHNpZyBhbmQgcmV0dXJuIFNUQVRVU19TVUNDRVNTCiAJRmFpbHVyZSA6LVJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlCiAKIApAQCAtNDMwMSw3ICs0MzAxLDcgQEAKIEBlRmxhc2hTZWN0aW9uVmFsIDotIEZsYXNoIHNlY3Rpb24gdmFsIHdoaWNoIGhhcyBoZWFkZXIKIAogUmV0dXJuIFZhbHVlIDotCi0JU3VjZXNzIDotIElmIFNlY3Rpb24gaXMgcHJlc2VudCBhbmQgd3JpdGFibGUgd3JpdGUgdGhlIHNpZyBhbmQgcmV0dXJuIFNUQVRVU19TVUNDRVNTCisJU3VjY2VzcyA6LSBJZiBTZWN0aW9uIGlzIHByZXNlbnQgYW5kIHdyaXRhYmxlIHdyaXRlIHRoZSBzaWcgYW5kIHJldHVybiBTVEFUVVNfU1VDQ0VTUwogCUZhaWx1cmUgOi1SZXR1cm4gbmVnYXRpdmUgZXJyb3IgY29kZQogCiAqKi8KQEAgLTQ1MDQsNyArNDUwNCw3IEBACiAJCQkgICAgIGluIGNhc2Ugb2YgbnVtb2ZCeXRlcyAgZXF1YWwgemVybyBjb21wbGV0ZSBzZWN0aW9uIHdpbGwgYmUgY29waWVkLgogCiBSZXR1cm4gVmFsdWVzLQotCVN1Y2VzcyA6IFJldHVybiBTVEFUVVNfU1VDQ0VTUworCVN1Y2Nlc3MgOiBSZXR1cm4gU1RBVFVTX1NVQ0NFU1MKIAlGYWlsbHVyZSA6LSByZXR1cm4gbmVnYXRpdmUgZXJyb3IgY29kZQogCiAqKi8KQEAgLTQ2MjEsNyArNDYyMSw3IEBACiBAdWlPZmZzZXQgOi0gRmxhc2ggb2Zmc2V0IHRoYXQgaGFzIHRvIGJlIHdyaXR0ZW4uCiAKIFJldHVybiB2YWx1ZSA6LQotCVN1Y2VzcyA6LSBPbiBzdWNlc3MgcmV0dXJuIFNUQVRVU19TVUNDRVNTCisJU3VjY2VzcyA6LSBPbiBzdWNjZXNzIHJldHVybiBTVEFUVVNfU1VDQ0VTUwogCUZhaWxsdXJlIDotIFJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlCiAKICoqLwpAQCAtNDYzNCw3ICs0NjM0LDcgQEAKIAlVSU5UIHVpU2VjdEFsaWduQWRkciA9IDA7CiAJVUlOVCBzaWcgPSAwOwogCi0JLy9tYWtpbmcgdGhlIG9mZnNldCBzZWN0b3IgYWxsaWduZWQKKwkvL21ha2luZyB0aGUgb2Zmc2V0IHNlY3RvciBhbGlnbmVkCiAJdWlTZWN0QWxpZ25BZGRyID0gdWlPZmZzZXQgJiB+KEFkYXB0ZXItPnVpU2VjdG9yU2l6ZSAtIDEpOwogCiAKQEAgLTQ2NDMsNyArNDY0Myw3IEBACiAJKHVpU2VjdEFsaWduQWRkciA9PSBCY21HZXRTZWN0aW9uVmFsRW5kT2Zmc2V0KEFkYXB0ZXIsRFNEMCktIEFkYXB0ZXItPnVpU2VjdG9yU2l6ZSkpCiAJewogCi0JCS8vb2Zmc2V0IGZyb20gdGhlIHNlY3RvciBib3VuZHJ5IGhhdmluZyB0aGUgaGVhZGVyIG1hcAorCQkvL29mZnNldCBmcm9tIHRoZSBzZWN0b3IgYm91bmRhcnkgaGF2aW5nIHRoZSBoZWFkZXIgbWFwCiAJCW9mZnNldFRvUHJvdGVjdCA9IEFkYXB0ZXItPnBzRmxhc2gyeENTSW5mby0+T2Zmc2V0RnJvbURTRFN0YXJ0Rm9yRFNESGVhZGVyICUgQWRhcHRlci0+dWlTZWN0b3JTaXplOwogCQlIZWFkZXJTaXplVG9Qcm90ZWN0ID0gc2l6ZW9mKERTRF9IRUFERVIpOwogCQliSGFzSGVhZGVyID0gVFJVRSA7CkBAIC00Njk3LDcgKzQ2OTcsNyBAQAogQEFkYXBhdGVyIDotIEJjbSBEcml2ZXIgUHJpdmF0ZSBEYXRhIFN0cnVjdHVyZQogCiBPdXRQdXQ6LQotCVNlbGVjdCB0aGUgQXBwcm9wcmlhdGUgY2hpcCBhbmQgcmV0cm4gc3RhdHVzIFN1Y2VzcworCVNlbGVjdCB0aGUgQXBwcm9wcmlhdGUgY2hpcCBhbmQgcmV0cm4gc3RhdHVzIFN1Y2Nlc3MKICoqLwogc3RhdGljIElOVCBCY21Eb0NoaXBTZWxlY3QoUE1JTklfQURBUFRFUiBBZGFwdGVyLCBVSU5UIG9mZnNldCkKIHsKQEAgLTUwODYsNyArNTA4Niw3IEBACiAJewogCQlpZihJc1NlY3Rpb25Xcml0YWJsZShBZGFwdGVyLGVGbGFzaDJ4U2VjdGlvblZhbCkgIT0gVFJVRSkKIAkJewotCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfUFJJTlRLLCAwLCAwLCJTZWN0aW9uIGlzIG5vdCBXcml0YWJsZS4uLkhlbmNlIGNhbnQgQ29ycnVwdCBzaWduYXR1cmUiKTsKKwkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX1BSSU5USywgMCwgMCwiU2VjdGlvbiBpcyBub3QgV3JpdGFibGUuLi5IZW5jZSBjYW4ndCBDb3JydXB0IHNpZ25hdHVyZSIpOwogCQkJcmV0dXJuIFNFQ1RPUl9JU19OT1RfV1JJVEFCTEU7CiAJCX0KIAl9CkBAIC01MTU1LDcgKzUxNTUsNyBAQAogCiAJaWYoSXNTZWN0aW9uV3JpdGFibGUoQWRhcHRlcixlRmxhc2gyeFNlY3Rpb25WYWwpICE9IFRSVUUpCiAJewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9QUklOVEssIDAsIDAsIlNlY3Rpb24gaXMgbm90IFdyaXRhYmxlLi4uSGVuY2UgY2FudCBDb3JydXB0IHNpZ25hdHVyZSIpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9QUklOVEssIDAsIDAsIlNlY3Rpb24gaXMgbm90IFdyaXRhYmxlLi4uSGVuY2UgY2FuJ3QgQ29ycnVwdCBzaWduYXR1cmUiKTsKIAkJcmV0dXJuIFNFQ1RPUl9JU19OT1RfV1JJVEFCTEU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvUkVBRE1FCmluZGV4IDk5ZTY3NjYuLmY4ZmFjYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvUkVBRE1FCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvUkVBRE1FCkBAIC03MSw3ICs3MSw3IEBACiBwYXNzaXZlIG9wZXJhdGlvbi4gVHJhbnNtaXNzaW9uIG9uIHRob3NlIGNoYW5uZWxzIGlzIHN1cHByZXNzZWQgdW50aWwKIGFwcHJvcHJpYXRlIG90aGVyIHRyYWZmaWMgaXMgb2JzZXJ2ZWQgb24gdGhvc2UgY2hhbm5lbHMuCiAKLVdpdGhpbiB0aGUgZHJpdmVyLCB3ZSB1c2UgdGhlIGZpY3RpY2lvdXMgY291bnRyeSBjb2RlICJYMiIgdG8gcmVwcmVzZW50IHRoaXMKK1dpdGhpbiB0aGUgZHJpdmVyLCB3ZSB1c2UgdGhlIGZpY3RpdGlvdXMgY291bnRyeSBjb2RlICJYMiIgdG8gcmVwcmVzZW50IHRoaXMKIHdvcmxkd2lkZSByZWd1bGF0b3J5IGRvbWFpbi4gVGhlcmUgaXMgY3VycmVudGx5IG5vIGludGVyZmFjZSB0byBjb25maWd1cmUgYQogZGlmZmVyZW50IGRvbWFpbi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGhfc2RtbWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoX3NkbW1jLmMKaW5kZXggNjUzMTNmYS4uNzFjMzU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGhfc2RtbWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaF9zZG1tYy5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIH0KICNlbmRpZgkJCQkvKiBkZWZpbmVkKE9PQl9JTlRSX09OTFkpICYmIGRlZmluZWQoSFdfT09CKSAqLwogCi0vKiBDb25maWd1cmUgY2FsbGJhY2sgdG8gY2xpZW50IHdoZW4gd2UgcmVjaWV2ZSBjbGllbnQgaW50ZXJydXB0ICovCisvKiBDb25maWd1cmUgY2FsbGJhY2sgdG8gY2xpZW50IHdoZW4gd2UgcmVjZWl2ZSBjbGllbnQgaW50ZXJydXB0ICovCiBleHRlcm4gU0RJT0hfQVBJX1JDCiBzZGlvaF9pbnRlcnJ1cHRfcmVnaXN0ZXIoc2Rpb2hfaW5mb190ICpzZCwgc2Rpb2hfY2JfZm5fdCBmbiwgdm9pZCAqYXJnaCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2N1c3RvbV9ncGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9jdXN0b21fZ3Bpby5jCmluZGV4IGNiZmExYzEuLjFjZjZjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2N1c3RvbV9ncGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfY3VzdG9tX2dwaW8uYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2VuZGlmCiAKLS8qIEN1c3RvbWVyIHNwZWNpZmljIEhvc3QgR1BJTyBkZWZpbnRpb24gICovCisvKiBDdXN0b21lciBzcGVjaWZpYyBIb3N0IEdQSU8gZGVmaW5pdGlvbiAgKi8KIHN0YXRpYyBpbnQgZGhkX29vYl9ncGlvX251bSA9IC0xOwkvKiBHRyAxOSAqLwogCiBtb2R1bGVfcGFyYW0oZGhkX29vYl9ncGlvX251bSwgaW50LCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9saW51eC5jCmluZGV4IDAyYzZkNDQuLmRkMDM3NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfbGludXguYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCQlkaGRfc2V0X3BhY2tldF9maWx0ZXIoMSwgZGhkKTsKIAogCQkJLyogaWYgZHRpbSBza2lwIHNldHVwIGFzIGRlZmF1bHQgZm9yY2UgaXQKLQkJCSAqIHRvIHdha2UgZWFjaCB0aHJpZCBkdGltCisJCQkgKiB0byB3YWtlIGVhY2ggdGhpcmQgZHRpbQogCQkJICogZm9yIGJldHRlciBwb3dlciBzYXZpbmcuCiAJCQkgKiBOb3RlIHRoYXQgc2lkZSBlZmZlY3QgaXMgY2hhbmNlIHRvIG1pc3MgQkMvTUMKIAkJCSAqIHBhY2tldApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfc2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfc2Rpby5jCmluZGV4IDEwNjYyNzAuLjQ2NGY1MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX3NkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9zZGlvLmMKQEAgLTM2NTksNyArMzY1OSw3IEBACiAJCQkgKiBjb250cm9sIHBrdCByZWNlaXZlcy4KIAkJCSAqIExhdGVyIHdlIHVzZSBidWZmZXItcG9sbCBmb3IgZGF0YSBhcyB3ZWxsCiAJCQkgKiBhcyBjb250cm9sIHBhY2tldHMuCi0JCQkgKiBUaGlzIGlzIHJlcXVpcmVkIGJlY3Vhc2UgZGhkIHJlY2VpdmVzIGZ1bGwKKwkJCSAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBkaGQgcmVjZWl2ZXMgZnVsbAogCQkJICogZnJhbWUgaW4gZ1NQSSB1bmxpa2UgU0RJTy4KIAkJCSAqIEFmdGVyIHRoZSBmcmFtZSBpcyByZWNlaXZlZCB3ZSBoYXZlIHRvCiAJCQkgKiBkaXN0aW5ndWlzaCB3aGV0aGVyIGl0IGlzIGRhdGEKQEAgLTM3NDQsNyArMzc0NCw3IEBACiAJCQkJCWJ1cy0+ZGhkLT5yeF9lcnJvcnMrKzsKIAkJCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7CiAJCQkJCS8qIEZvcmNlIHJldHJ5IHcvbm9ybWFsIGhlYWRlciByZWFkLgotCQkJCQkgKiBEb24ndCBhdHRlbXAgTkFLIGZvcgorCQkJCQkgKiBEb24ndCBhdHRlbXB0IE5BSyBmb3IKIAkJCQkJICogZ1NQSQogCQkJCQkgKi8KIAkJCQkJZGhkc2Rpb19yeGZhaWwoYnVzLCB0cnVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9tYWM4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9tYWM4MDIxMS5jCmluZGV4IDc3NGI0ZTkuLmMxYjA3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX21hYzgwMjExLmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiAJICovCiAJaHctPm1heF9yYXRlcyA9IDI7CS8qIFByaW1hcnkgcmF0ZSBhbmQgMSBmYWxsYmFjayByYXRlICovCiAKLQlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDcgKiAxMDAwOwkvKiBjaGFubmVsIGNoYW5nZSB0aW1lIGlzIGRlcGVuZGFudCBvbiBjaGlwIGFuZCBiYW5kICAqLworCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gNyAqIDEwMDA7CS8qIGNoYW5uZWwgY2hhbmdlIHRpbWUgaXMgZGVwZW5kZW50IG9uIGNoaXAgYW5kIGJhbmQgICovCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CiAKIAlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJtaW5zdHJlbF9odCI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbXBkdS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW1wZHUuYwppbmRleCBjNmNkY2Q5Li5mMDA4NjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbXBkdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FtcGR1LmMKQEAgLTg5LDcgKzg5LDcgQEAKIC8qIHN0cnVjdHVyZSB0byBob2xkIHR4IGZpZm8gaW5mb3JtYXRpb24gYW5kIHByZS1sb2FkaW5nIHN0YXRlCiAgKiBjb3VudGVycyBzcGVjaWZpYyB0byB0eCB1bmRlcmZsb3dzIG9mIGFtcGR1cwogICogc29tZSBjb3VudGVycyBtaWdodCBiZSByZWR1bmRhbnQgd2l0aCB0aGUgb25lcyBpbiB3bGMgb3IgYW1wZHUgc3RydWN0dXJlcy4KLSAqIFRoaXMgYWxsb3dzIHRvIG1haW50YWluIGEgc3BlY2lmaWMgc3RhdGUgaW5kZXBlbmRhbnRseSBvZgorICogVGhpcyBhbGxvd3MgdG8gbWFpbnRhaW4gYSBzcGVjaWZpYyBzdGF0ZSBpbmRlcGVuZGVudGx5IG9mCiAgKiBob3cgb2Z0ZW4gYW5kL29yIHdoZW4gdGhlIHdsYyBjb3VudGVycyBhcmUgdXBkYXRlZC4KICAqLwogdHlwZWRlZiBzdHJ1Y3Qgd2xjX2ZpZm9faW5mbyB7CkBAIC0yNjUsNyArMjY1LDcgQEAKIAogCXNjYl9hbXBkdS0+bWF4X3BkdSA9ICh1OCkgYW1wZHUtPndsYy0+cHViLT50dW5hYmxlcy0+YW1wZHVudW1tcGR1OwogCi0JLyogZ28gYmFjayB0byBsZWdhY3kgc2l6ZSBpZiBzb21lIHByZWxvYWRpbmcgaXMgb2NjdXJpbmcgKi8KKwkvKiBnbyBiYWNrIHRvIGxlZ2FjeSBzaXplIGlmIHNvbWUgcHJlbG9hZGluZyBpcyBvY2N1cnJpbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZGUExEX0ZJRk87IGkrKykgewogCQlpZiAoYW1wZHUtPmZpZm9fdGJbaV0uYW1wZHVfcGxkX3NpemUgPiBGRlBMRF9QTERfSU5DUikKIAkJCXNjYl9hbXBkdS0+bWF4X3BkdSA9IEFNUERVX05VTV9NUERVX0xFR0FDWTsKQEAgLTQwNiw3ICs0MDYsNyBAQAogCQkvKgogCQkgICBjb21wdXRlIGEgbmV3IGRtYSB4ZmVyIHJhdGUgZm9yIG1heF9tcGR1IEAgbWF4IG1jcy4KIAkJICAgVGhpcyBpcyB0aGUgbWluaW11bSBkbWEgcmF0ZSB0aGF0Ci0JCSAgIGNhbiBhY2hlaXZlIG5vIHVuZmVyZmxvdyBjb25kaXRpb24gZm9yIHRoZSBjdXJyZW50IG1wZHUgc2l6ZS4KKwkJICAgY2FuIGFjaGlldmUgbm8gdW5mZXJmbG93IGNvbmRpdGlvbiBmb3IgdGhlIGN1cnJlbnQgbXBkdSBzaXplLgogCQkgKi8KIAkJLyogbm90ZSA6IHdlIGRpdmlkZS9tdWx0aXBseSBieSAxMDAgdG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvd3MgKi8KIAkJZmlmby0+ZG1heGZlcnJhdGUgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYm1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYm1hYy5jCmluZGV4IDVhOTZkYzMuLjRiNmUxODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2JtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ibWFjLmMKQEAgLTE5MTUsNyArMTkxNSw3IEBACiAKIAlwaHlfYndfY2xrYml0cyA9IHdsY19waHlfY2xrX2J3Yml0cyh3bGNfaHctPmJhbmQtPnBpKTsKIAotCS8qIFNwZWNmaWMgcmVzZXQgc2VxdWVuY2UgcmVxdWlyZWQgZm9yIE5QSFkgcmV2IDMgYW5kIDQgKi8KKwkvKiBTcGVjaWZpYyByZXNldCBzZXF1ZW5jZSByZXF1aXJlZCBmb3IgTlBIWSByZXYgMyBhbmQgNCAqLwogCWlmIChXTENJU05QSFkod2xjX2h3LT5iYW5kKSAmJiBOUkVWX0dFKHdsY19ody0+YmFuZC0+cGh5cmV2LCAzKSAmJgogCSAgICBOUkVWX0xFKHdsY19ody0+YmFuZC0+cGh5cmV2LCA0KSkgewogCQkvKiBTZXQgdGhlIFBIWSBiYW5kd2lkdGggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uYwppbmRleCA2MzliNWQ3Li5hYjdhYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfbWFpbi5jCkBAIC02MjgzLDcgKzYyODMsNyBAQAogCSAgICAgICAoKHByZWFtYmxlX3R5cGVbMV0gPT0gV0xDX01NX1BSRUFNQkxFKSA9PQogCQkodHhoLT5NTW9kZUZickxlbiAhPSAwKSkpOwogCi0JYWMgPSB3bWVfZmlmbzJhY1txdWV1ZV07CisJYWMgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcocCk7CiAJaWYgKFNDQl9XTUUoc2NiKSAmJiBxb3MgJiYgd2xjLT5lZGNmX3R4b3BbYWNdKSB7CiAJCXVpbnQgZnJhZ19kdXIsIGR1ciwgZHVyX2ZhbGxiYWNrOwogCkBAIC02OTE5LDggKzY5MTksNyBAQAogCQlwcmVhbWJsZSA9IDA7CiAJCWlmIChJU19DQ0socnNwZWMpKSB7CiAJCQlpZiAocnhoLT5QaHlSeFN0YXR1c18wICYgUFJYUzBfU0hPUlRIKQotCQkJCVdMX0VSUk9SKCJTaG9ydCBDQ0tcbiIpOwotCQkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CisJCQkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CiAJCX0gZWxzZSBpZiAoSVNfT0ZETShyc3BlYykpIHsKIAkJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOwogCQl9IGVsc2UgewpAQCAtNzA3OSwxMCArNzA3OCw4IEBACiAJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEoaC0+ZnJhbWVfY29udHJvbCkpCiAJCWdvdG8gdG9zczsKIAotCWlmIChpc19hbXNkdSkgewotCQlXTF9FUlJPUigiJXM6IGlzX2Ftc2R1IGNhdXNpbmcgdG9zc1xuIiwgX19mdW5jX18pOworCWlmIChpc19hbXNkdSkKIAkJZ290byB0b3NzOwotCX0KIAogCXdsY19yZWN2Y3RsKHdsYywgcnhoLCBwKTsKIAlyZXR1cm47CkBAIC04Mjk1LDcgKzgyOTIsNyBAQAogCXJldHVybiAocS0+c3RvcHBlZCAmIHByaW9fbWFzaykgPT0gcHJpb19tYXNrOwogfQogCi0vKiBwcm9wb2dhdGUgdGhlIGZsb3cgY29udHJvbCB0byBhbGwgaW50ZXJmYWNlcyB1c2luZyB0aGUgZ2l2ZW4gdHggcXVldWUgKi8KKy8qIHByb3BhZ2F0ZSB0aGUgZmxvdyBjb250cm9sIHRvIGFsbCBpbnRlcmZhY2VzIHVzaW5nIHRoZSBnaXZlbiB0eCBxdWV1ZSAqLwogdm9pZCB3bGNfdHhmbG93Y29udHJvbChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgc3RydWN0IHdsY190eHFfaW5mbyAqcWksCiAJCSAgICAgICBib29sIG9uLCBpbnQgcHJpbykKIHsKQEAgLTg0NjIsNyArODQ1OSw3IEBACiB9CiAKIC8qCi0gKiBGbGFnICdzY2FuIGluIHByb2dyZXNzJyB0byB3aXRob2xkIGR5bmFtaWMgcGh5IGNhbGlicmF0aW9uCisgKiBGbGFnICdzY2FuIGluIHByb2dyZXNzJyB0byB3aXRoaG9sZCBkeW5hbWljIHBoeSBjYWxpYnJhdGlvbgogICovCiB2b2lkIHdsY19zY2FuX3N0YXJ0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcmF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcmF0ZS5jCmluZGV4IDBjZmEzNjAuLmQyODRmMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3JhdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19yYXRlLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIGNhbHVjbGF0ZSB0aGUgcmF0ZSBvZiBhIHJ4J2QgZnJhbWUgYW5kIHJldHVybiBpdCBhcyBhIHJhdGVzcGVjICovCisvKiBjYWxjdWxhdGUgdGhlIHJhdGUgb2YgYSByeCdkIGZyYW1lIGFuZCByZXR1cm4gaXQgYXMgYSByYXRlc3BlYyAqLwogcmF0ZXNwZWNfdCBCQ01GQVNUUEFUSCB3bGNfY29tcHV0ZV9yc3BlYyhkMTFyeGhkcl90ICpyeGgsIHU4ICpwbGNwKQogewogCWludCBwaHlfdHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY21zcm9tX2ZtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNyb21fZm10LmgKaW5kZXggYWUyYmZmOC4uNDc2ODk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNyb21fZm10LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNyb21fZm10LmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiAjZGVmaW5lCVNST01fQ1JDUkVWCQk2MwogCi0vKiBTUk9NIFJldiA0OiBSZWFsbG9jYXRlIHRoZSBzb2Z0d2FyZSBwYXJ0IG9mIHRoZSBzcm9tIHRvIGFjY29tb2RhdGUKKy8qIFNST00gUmV2IDQ6IFJlYWxsb2NhdGUgdGhlIHNvZnR3YXJlIHBhcnQgb2YgdGhlIHNyb20gdG8gYWNjb21tb2RhdGUKICAqIE1JTU8gZmVhdHVyZXMuIEl0IGFzc3VtZXMgdXAgdG8gdHdvIFBDSUUgZnVuY3Rpb25zIGFuZCA0NDAgYnl0ZXMKICAqIG9mIHVzZWFibGUgc3JvbSBpLmUuIHRoZSB1c2VhYmxlIHN0b3JhZ2UgaW4gY2hpcHMgd2l0aCBPVFAgdGhhdAogICogaW1wbGVtZW50cyBoYXJkd2FyZSByZWR1bmRhbmN5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2huZHNvYy5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2huZHNvYy5oCmluZGV4IDk3NDdjYzQuLjY0MzU2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9obmRzb2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvaG5kc29jLmgKQEAgLTE4MSw3ICsxODEsNyBAQAogICogY29udmVudGlvbnMgZm9yIHRoZSB1c2UgdGhlIGZsYXNoIHNwYWNlOgogICovCiAKLS8qIE1pbnVtdW0gYW1vdW50IG9mIGZsYXNoIHdlIHN1cHBvcnQgKi8KKy8qIE1pbmltdW0gYW1vdW50IG9mIGZsYXNoIHdlIHN1cHBvcnQgKi8KICNkZWZpbmUgRkxBU0hfTUlOCQkweDAwMDIwMDAwCS8qIE1pbmltdW0gZmxhc2ggc2l6ZSAqLwogCiAvKiBBIGJvb3QvYmluYXJ5IG1heSBoYXZlIGFuIGVtYmVkZGVkIGJsb2NrIHRoYXQgZGVzY3JpYmVzIGl0cyBzaXplICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbW90cC5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbW90cC5jCmluZGV4IGJhNzFjMTAuLjE3OTkxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21vdHAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtb3RwLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXJldHVybiAoaW50KXN0OwogfQogCi0vKiBDYWxjdWxhdGUgbWF4IEhXL1NXIHJlZ2lvbiBieXRlIHNpemUgYnkgc3Vic3RyYWN0aW5nIGZ1c2UgcmVnaW9uIGFuZCBjaGVja3N1bSBzaXplLAorLyogQ2FsY3VsYXRlIG1heCBIVy9TVyByZWdpb24gYnl0ZSBzaXplIGJ5IHN1YnRyYWN0aW5nIGZ1c2UgcmVnaW9uIGFuZCBjaGVja3N1bSBzaXplLAogICogb3NpemV3IGlzIG9pLT53c2l6ZSAoT1RQIHNpemUgLSBHVSBzaXplKSBpbiB3b3JkcwogICovCiBzdGF0aWMgaW50IGlweG90cF9tYXhfcmduc3ooc2lfdCAqc2loLCBpbnQgb3NpemV3KQpAQCAtMjI5LDcgKzIyOSw3IEBACiAJCXJldCA9IG9zaXpldyAqIDIgLSBPVFBfU1pfRlVfNzIgLSBPVFBfU1pfQ0hFQ0tTVU07CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsJLyogRG9uJ3Qga29udyBhYm91dCB0aGlzIGNoaXAgKi8KKwkJQVNTRVJUKDApOwkvKiBEb24ndCBrbm93IGFib3V0IHRoaXMgY2hpcCAqLwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtc3JvbS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbXNyb20uYwppbmRleCBlY2EzNWI5Li44NTBiZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtc3JvbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21zcm9tLmMKQEAgLTE4NTksNyArMTg1OSw3IEBACiAKIAkvKgogCSAqIEFwcGx5IENSQyBvdmVyIFNST00gY29udGVudCByZWdhcmRsZXNzIFNST00gaXMgcHJlc2VudCBvciBub3QsCi0JICogYW5kIHVzZSB2YXJpYWJsZSA8ZGV2cGF0aD5zcm9tcmV2J3MgZXhpc3RhbmNlIGluIGZsYXNoIHRvIGRlY2lkZQorCSAqIGFuZCB1c2UgdmFyaWFibGUgPGRldnBhdGg+c3JvbXJldidzIGV4aXN0ZW5jZSBpbiBmbGFzaCB0byBkZWNpZGUKIAkgKiBpZiB3ZSBzaG91bGQgcmV0dXJuIGFuIGVycm9yIHdoZW4gQ1JDIGZhaWxzIG9yIHJlYWQgU1JPTSB2YXJpYWJsZXMKIAkgKiBmcm9tIGZsYXNoLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2huZGRtYS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2huZGRtYS5jCmluZGV4IDhhODFlYjkuLmJlMzM5ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9obmRkbWEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvaG5kZG1hLmMKQEAgLTExNzksNyArMTE3OSw3IEBACiAJCSAgIChyYW5nZSA9PSBITkRETUFfUkFOR0VfQUxMKSA/ICJhbGwiIDoKIAkJICAgKChyYW5nZSA9PQogCQkgICAgIEhORERNQV9SQU5HRV9UUkFOU01JVFRFRCkgPyAidHJhbnNtaXR0ZWQiIDoKLQkJICAgICJ0cmFuc2ZlcmVkIikpKTsKKwkJICAgICJ0cmFuc2ZlcnJlZCIpKSk7CiAKIAlpZiAoZGktPnR4aW4gPT0gZGktPnR4b3V0KQogCQlyZXR1cm47CkBAIC0xNTQ5LDcgKzE1NDksNyBAQAogICogSWYgcmFuZ2UgaXMgSE5ERE1BX1JBTkdFX1RSQU5TTUlUVEVELCByZWNsYWltIGRlc2NyaXB0b3JzIHRoYXQgaGF2ZSBiZQogICogdHJhbnNtaXR0ZWQgYXMgbm90ZWQgYnkgdGhlIGhhcmR3YXJlICJDdXJyRGVzY3IiIHBvaW50ZXIuCiAgKiBJZiByYW5nZSBpcyBITkRETUFfUkFOR0VfVFJBTlNGRVJFRCwgcmVjbGFpbSBkZXNjcmlwdG9ycyB0aGF0IGhhdmUgYmUKLSAqIHRyYW5zZmVyZWQgYnkgdGhlIERNQSBhcyBub3RlZCBieSB0aGUgaGFyZHdhcmUgIkFjdGl2ZURlc2NyIiBwb2ludGVyLgorICogdHJhbnNmZXJyZWQgYnkgdGhlIERNQSBhcyBub3RlZCBieSB0aGUgaGFyZHdhcmUgIkFjdGl2ZURlc2NyIiBwb2ludGVyLgogICogSWYgcmFuZ2UgaXMgSE5ERE1BX1JBTkdFX0FMTCwgcmVjbGFpbSBhbGwgdHhkKHMpIHBvc3RlZCB0byB0aGUgcmluZyBhbmQKICAqIHJldHVybiBhc3NvY2lhdGVkIHBhY2tldCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBoYXJkd2FyZSBwb2ludGVycy4KICAqLwpAQCAtMTU2Myw3ICsxNTYzLDcgQEAKIAkJICAgKHJhbmdlID09IEhORERNQV9SQU5HRV9BTEwpID8gImFsbCIgOgogCQkgICAoKHJhbmdlID09CiAJCSAgICAgSE5ERE1BX1JBTkdFX1RSQU5TTUlUVEVEKSA/ICJ0cmFuc21pdHRlZCIgOgotCQkgICAgInRyYW5zZmVyZWQiKSkpOworCQkgICAgInRyYW5zZmVycmVkIikpKTsKIAogCWlmIChkaS0+bnR4ZCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnBjbWNpYS5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NicGNtY2lhLmgKaW5kZXggNmI5OTIzZjUuLmQ0YzE1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnBjbWNpYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnBjbWNpYS5oCkBAIC0xMDksNyArMTA5LDcgQEAKICNkZWZpbmUJQ0lTVFBMX0NGVEFCTEUJCTB4MWIJLyogQ29uZmlnIHRhYmxlIGVudHJ5ICovCiAjZGVmaW5lCUNJU1RQTF9FTkQJCTB4ZmYJLyogRW5kIG9mIHRoZSBDSVMgdHVwbGUgY2hhaW4gKi8KIAotLyogRnVuY3Rpb24gaWRlbnRpZmllciBwcm92aWRlcyBjb250ZXh0IGZvciB0aGUgZnVuY3Rpb24gZXh0ZW50aW9ucyB0dXBsZSAqLworLyogRnVuY3Rpb24gaWRlbnRpZmllciBwcm92aWRlcyBjb250ZXh0IGZvciB0aGUgZnVuY3Rpb24gZXh0ZW5zaW9ucyB0dXBsZSAqLwogI2RlZmluZSBDSVNUUExfRklEX1NESU8JCTB4MGMJLyogRXh0ZW5zaW9ucyBkZWZpbmVkIGJ5IFNESU8gc3BlYyAqLwogCiAvKiBGdW5jdGlvbiBleHRlbnNpb25zIGZvciBMQU5zIChhc3N1bWVkIGZvciBleHRlbnNpb25zIG90aGVyIHRoYW4gU0RJTykgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zaXV0aWxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2l1dGlscy5jCmluZGV4IGVkMTY4Y2UuLjZlYmQ3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zaXV0aWxzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NpdXRpbHMuYwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAKIH0KIAogLyoKLSAqICBjbG9jayBjb250cm9sIHBvbGljeSBmdW5jdGlvbiB0aHJvdWdodCBjaGlwY29tbW9uCisgKiAgY2xvY2sgY29udHJvbCBwb2xpY3kgZnVuY3Rpb24gdGhyb3VnaCBjaGlwY29tbW9uCiAgKgogICogICAgc2V0IGR5bmFtaWMgY2xrIGNvbnRyb2wgbW9kZSAoZm9yY2VzbG93LCBmb3JjZWZhc3QsIGR5bmFtaWMpCiAgKiAgICByZXR1cm5zIHRydWUgaWYgd2UgYXJlIGZvcmNpbmcgZmFzdCBjbG9jawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IGE0Y2ViMjljLi5lN2U3MmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCkBAIC0yMDY0LDcgKzIwNjQsNyBAQAogCQkJICAgICBDT01FRElfQ0JfT1ZFUkZMT1cpKSB7CiAJCXJ1bmZsYWdzX21hc2sgfD0gU1JGX1JVTk5JTkc7CiAJfQotCS8qIHJlbWVtYmVyIGlmIGFuIGVycm9yIGV2ZW50IGhhcyBvY2N1cmVkLCBzbyBhbiBlcnJvcgorCS8qIHJlbWVtYmVyIGlmIGFuIGVycm9yIGV2ZW50IGhhcyBvY2N1cnJlZCwgc28gYW4gZXJyb3IKIAkgKiBjYW4gYmUgcmV0dXJuZWQgdGhlIG5leHQgdGltZSB0aGUgdXNlciBkb2VzIGEgcmVhZCgpICovCiAJaWYgKHMtPmFzeW5jLT5ldmVudHMgJiAoQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX09WRVJGTE9XKSkgewogCQlydW5mbGFnc19tYXNrIHw9IFNSRl9FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5jCmluZGV4IDY0NGJkYTQuLjQ4MmE0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYwpAQCAtMTI0LDkgKzEyNCw5IEBACiB8ICAgICAgICAgICAgICAgICAgICAgLTU6IFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAtNjogVGltaW5nIHVuaXR5IHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgIC03OiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgLTg6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtODogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpdGggICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgLTk6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtOTogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpdGggICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIENIUk9OT1MgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICovCkBAIC03MjEsMTAgKzcyMSwxMCBAQAogCQkJCQkJCQl9CiAJCQkJCQkJfSBlbHNlIHsKIAkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkJCQkJCQkvKiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkICovCisJCQkJCQkJCS8qIFlvdSBjYW4gbm90IHVzZSB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpdGggdGhpcyBib2FyZCAqLwogCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQkJCQkJCQkJRFBSSU5USygiWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggdGhpcyBib2FyZFxuIik7CisJCQkJCQkJCURQUklOVEsoIllvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aXRoIHRoaXMgYm9hcmRcbiIpOwogCQkJCQkJCQlpX1JldHVyblZhbHVlID0KIAkJCQkJCQkJCS04OwogCQkJCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCmluZGV4IDkwZTcxZTEuLmI5NzMwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYwpAQCAtNTksNyArNTksNyBAQAogLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLwogLyp8IElucHV0IFBhcmFtZXRlcnMgIDogaW50ICAgIGlfTmJPZldvcmRzVG9SZWFkIDogTmJyLiBvZiB3b3JkIHRvIHJlYWQgICAgICAgIHwqLwogLyp8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IEFkZHJlc3Mgb2YgdGhlIGVlcHJvbSB8Ki8KLS8qfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgd19FZXByb21TdGFydEFkZHJlc3MgOiBFZXByb20gc3RyYXQgYWRkcmVzcyAgICAgfCovCisvKnwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzIDogRWVwcm9tIHN0YXJ0IGFkZHJlc3MgICAgIHwqLwogLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLwogLyp8IE91dHB1dCBQYXJhbWV0ZXJzIDogdW5zaWduZWQgc2hvcnQgKiBwd19EYXRhUmVhZCA6IFJlYWQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCiAvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmMKaW5kZXggOWRkODU3ZC4uMDAyMjk3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CiAJdW5zaWduZWQgaW50IHVpX0RPOwogCi0JdWlfRE8gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9JUlEpICYgMHgxOwkvKiBDaGVjayBpZiBWQ0MgT1IgQ0MgaW50ZXJydXB0IGhhcyBvY2N1cmVkLiAqLworCXVpX0RPID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfSVJRKSAmIDB4MTsJLyogQ2hlY2sgaWYgVkNDIE9SIENDIGludGVycnVwdCBoYXMgb2NjdXJyZWQuICovCiAKIAlpZiAodWlfRE8gPT0gMCkgewogCQlwcmludGsoIlxuSW50ZXJydXB0IGZyb20gdW5Lbm93biBzb3VyY2VcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCmluZGV4IGE4MTNmZGIuLmZjNjEyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCXVuc2lnbmVkIHNob3J0IHVzX0NvbnZlcnRUaW1pbmcsIHVzX1RtcFZhbHVlLCBpOwogCXVuc2lnbmVkIGNoYXIgYl9UbXA7CiAKLQkvKiAgZml4IGNvbnZlcnRpb24gdGltZSB0byAxMCB1cyAqLworCS8qICBmaXggY29udmVyc2lvbiB0aW1lIHRvIDEwIHVzICovCiAJaWYgKCFkZXZwcml2LT51aV9Fb2NFb3NDb252ZXJzaW9uVGltZSkgewogCQlwcmludGsoIk5vIHRpbWVyMCBWYWx1ZSB1c2luZyAxMCB1c1xuIik7CiAJCXVzX0NvbnZlcnRUaW1pbmcgPSAxMDsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQ7CiAJCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKIAotCQkJLyogU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUgKi8KKwkJCS8qIFNldCB0aGUgY29udmVyc2lvbiB0aW1lICovCiAJCQlvdXR3KHVzX0NvbnZlcnRUaW1pbmcsCiAJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOwogCkBAIC0zMTEsNyArMzExLDcgQEAKIAkJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEOwogCQkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CiAKLQkJCS8qIFNldCB0aGUgY29udmVydGlvbiB0aW1lICovCisJCQkvKiBTZXQgdGhlIGNvbnZlcnNpb24gdGltZSAqLwogCQkJb3V0dyh1c19Db252ZXJ0VGltaW5nLAogCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKIApAQCAtMzU0LDkgKzM1NCw5IEBACiAJCQkvKiBTdGFydCBjb252ZXJzaW9uICovCiAJCQlvdXR3KDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1NUQVJUX0NPTlZFUlNJT04pOwogCi0JCQkvKiBXYWl0aW5nIG9mIGVuZCBvZiBjb252ZXJ0aW9uIGlmIGludGVycnVwdCBpcyBub3QgaW5zdGFsbGVkICovCisJCQkvKiBXYWl0aW5nIG9mIGVuZCBvZiBjb252ZXJzaW9uIGlmIGludGVycnVwdCBpcyBub3QgaW5zdGFsbGVkICovCiAJCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRElTQUJMRSkgewotCQkJCS8qIFdhaXRpbmcgdGhlIGVuZCBvZiBjb252ZXJ0aW9uICovCisJCQkJLyogV2FpdGluZyB0aGUgZW5kIG9mIGNvbnZlcnNpb24gKi8KIAkJCQlkbyB7CiAJCQkJCXVzX1RtcFZhbHVlID0KIAkJCQkJCWludyhkZXZwcml2LT5pb2Jhc2UgKwpAQCAtODU0LDcgKzg1NCw3IEBACiAJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAogCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRDsKIAkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKLQkJLyogU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUgKi8KKwkJLyogU2V0IHRoZSBjb252ZXJzaW9uIHRpbWUgKi8KIAkJb3V0dygoKHVuc2lnbmVkIHNob3J0KSB1aV9UaW1lclZhbHVlMCksCiAJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKIAkJYnJlYWs7CkBAIC04NzIsNyArODcyLDcgQEAKIAkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CiAJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMV9XT1JEOwogCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOwotCQkvKiBTZXQgdGhlIGNvbnZlcnRpb24gdGltZSAqLworCQkvKiBTZXQgdGhlIGNvbnZlcnNpb24gdGltZSAqLwogCQlvdXR3KCgodW5zaWduZWQgc2hvcnQpIHVpX1RpbWVyVmFsdWUxKSwKIAkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOwogCkBAIC04ODksNyArODg5LDcgQEAKIAkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQ7CiAJCW91dGIoYl9UbXAsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CiAKLQkJLyogU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUgKi8KKwkJLyogU2V0IHRoZSBjb252ZXJzaW9uIHRpbWUgKi8KIAkJb3V0dygoKHVuc2lnbmVkIHNob3J0KSB1aV9UaW1lclZhbHVlMCksCiAJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKIAkJYnJlYWs7CkBAIC0xMTA0LDcgKzExMDQsNyBAQAogCiAvKgogICogNAotICogYW1vdW50IG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVyZWQgc2V0IHRyYW5zZmVyIGNvdW50IHVzZWQgQURET04KKyAqIGFtb3VudCBvZiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCBzZXQgdHJhbnNmZXIgY291bnQgdXNlZCBBRERPTgogICogTVdUQyByZWdpc3RlciBjb21tZW50ZWQgdGVzdGluZwogICogb3V0bChkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdLAogICogZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbitBTUNDX09QX1JFR19BTVdUQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmgKaW5kZXggYjNjODE5Ny4uNTBlYjBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuaApAQCAtMTY5LDcgKzE2OSw3IEBACiAKIAl1bnNpZ25lZCBjaGFyIGJfVHlwZTsJCS8qIEVPQyBvciBFT1MgKi8KIAl1bnNpZ25lZCBjaGFyIGJfSW50ZXJydXB0RmxhZzsJLyogSW50ZXJydXB0IHVzZSBvciBub3QgICAgICAgICAgICAgICAgICAgICovCi0JdW5zaWduZWQgaW50IHVpX0NvbnZlcnRUaW1pbmc7CS8qIFNlbGVjdGlvbiBvZiB0aGUgY29udmVydGlvbiB0aW1lICAgICAgICAqLworCXVuc2lnbmVkIGludCB1aV9Db252ZXJ0VGltaW5nOwkvKiBTZWxlY3Rpb24gb2YgdGhlIGNvbnZlcnNpb24gdGltZSAgICAgICAgKi8KIAl1bnNpZ25lZCBjaGFyIGJfTmJyT2ZDaGFubmVsOwkvKiBOdW1iZXIgb2YgY2hhbm5lbCB0byByZWFkICAgICAgICAgICAgICAgKi8KIAl1bnNpZ25lZCBpbnQgdWlfQ2hhbm5lbExpc3RbTUFYX0FOQUxPR0lOUFVUX0NIQU5ORUxTXTsJLyogTnVtYmVyIG9mIHRoZSBjaGFubmVsIHRvIGJlIHJlYWQgICAgICAgICovCiAJdW5zaWduZWQgaW50IHVpX1JhbmdlTGlzdFtNQVhfQU5BTE9HSU5QVVRfQ0hBTk5FTFNdOwkvKiBHYWluIG9mIGVhY2ggY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYwppbmRleCBhOTNlMjM0Li5jNzVhMWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIC8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KIC8qfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGludCAgICBpX05iT2ZXb3Jkc1RvUmVhZCA6IE5ici4gb2Ygd29yZCB0byByZWFkICAgICAgICB8Ki8KIC8qfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgOiBBZGRyZXNzIG9mIHRoZSBlZXByb20gfCovCi0vKnwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzIDogRWVwcm9tIHN0cmF0IGFkZHJlc3MgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgICB3X0VlcHJvbVN0YXJ0QWRkcmVzcyA6IEVlcHJvbSBzdGFydCBhZGRyZXNzICAgICB8Ki8KIC8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KIC8qfCBPdXRwdXQgUGFyYW1ldGVycyA6IHVuc2lnbmVkIHNob3J0ICogcHdfRGF0YVJlYWQgOiBSZWFkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLwogLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLwpAQCAtODQ5LDcgKzg0OSw3IEBACiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOlNpbmdsZSBSZWFkCiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOlJlYWQgbW9yZSBjaGFubmVsCiAgIDI6U2luZ2xlIHNjYW4KLSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6Q29udGlub3VzIFNjYW4KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6Q29udGludW91cyBTY2FuCiAgIGRhdGFbMTNdICAgICAgICAgIDpOdW1iZXIgb2YgY2hhbm5lbHMgdG8gcmVhZAogICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzE0XSAgICAgICAgICA6UlREIGNvbm5lY3Rpb24gdHlwZQogICA6MDpSVEQgbm90IHVzZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKaW5kZXggNzY2MTAzYy4uNjMyZDVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKQEAgLTIzLDcgKzIzLDcgQEAKIC0gSWYgY21kLT5zY2FuX2JlZ2luX3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgVEdJTiAocGluIDQ2KS4KIC0gSWYgY21kLT5jb252ZXJ0X3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgRVhUVFJHIChwaW4gNDQpLgogLSBJZiBjbWQtPnN0YXJ0X3NyYy9zdG9wX3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgVEdJTiAocGluIDQ2KS4KLS0gSXQgaXMgbm90IG5lY2Nlc3NhcnkgdG8gaGF2ZSBjbWQuc2Nhbl9lbmRfYXJnPWNtZC5jaGFubGlzdF9sZW4gYnV0CistIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaGF2ZSBjbWQuc2Nhbl9lbmRfYXJnPWNtZC5jaGFubGlzdF9sZW4gYnV0CiAgIGNtZC5zY2FuX2VuZF9hcmcgbW9kdWxvIGNtZC5jaGFubGlzdF9sZW4gbXVzdCBieSAwLgogLSBJZiByZXR1cm4gdmFsdWUgb2YgY21kdGVzdCBpcyA1IHRoZW4geW91J3ZlIGJhZCBjaGFubmVsIGxpc3QKICAgKGl0IGlzbid0IHBvc3NpYmxlIG1peHR1cmUgUy5FLiBhbmQgRElGRiBpbnB1dHMgb3IgYmlwb2xhciBhbmQgdW5pcG9sYXIKQEAgLTgyMyw3ICs4MjMsNyBAQAogCQltb3ZlX2Jsb2NrX2Zyb21fZG1hKGRldiwgcywKIAkJCQkgICAgZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbZGV2cHJpdi0+ZG1hX2FjdGJ1Zl0sCiAJCQkJICAgIHNhbXBsZXNpbmJ1Zik7Ci0JCW0gPSBtIC0gc2FtcGxzOwkJLyogbT0gaG93IG1hbnkgc2FtcGxlcyB3YXMgdHJhbnNmZXJlZCAqLworCQltID0gbSAtIHNhbXBsczsJCS8qIG09IGhvdyBtYW55IHNhbXBsZXMgd2FzIHRyYW5zZmVycmVkICovCiAJfQogLyogRFBSSU5USygiWVlZXG4iKTsgKi8KIApAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAlEUFJJTlRLKCIzIGRtYWxlbjA9JWQgZG1hbGVuMT0lZFxuIiwgZG1hbGVuMCwgZG1hbGVuMSk7CiAJLyogdHJhbnNmZXIgd2l0aG91dCBUUklHX1dBS0VfRU9TICovCiAJaWYgKCEoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewotCQkvKiBpZiBpdCdzIHBvc3NpYmxlIHRoZW4gYWxsaWduIERNQSBidWZmZXJzIHRvIGxlbmd0aCBvZiBzY2FuICovCisJCS8qIGlmIGl0J3MgcG9zc2libGUgdGhlbiBhbGlnbiBETUEgYnVmZmVycyB0byBsZW5ndGggb2Ygc2NhbiAqLwogCQlpID0gZG1hbGVuMDsKIAkJZG1hbGVuMCA9CiAJCSAgICAoZG1hbGVuMCAvIChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpKSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKaW5kZXggNGI0NzAwMC4uNTM2MWYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYwpAQCAtNjUsNyArNjUsNyBAQAogICAgd3JpdHRlbiBieSBqZXJlbXkgdGhlbGVyIDx0aGVsZXJnQGliLmNuZWEuZ292LmFyPgogCiAgICBpbnN0aXR1dG8gYmFsc2Vpcm8KLSAgIGNvbWlzaW9uIG5hY2lvbmFsIGRlIGVuZXJnaWEgYXRvbWljYQorICAgY29tbWlzc2lvbiBuYWNpb25hbCBkZSBlbmVyZ2lhIGF0b21pY2EKICAgIHVuaXZlcnNpZGFkIG5hY2lvbmFsIGRlIGN1eW8KICAgIGFyZ2VudGluYQogCkBAIC0zNDIsNyArMzQyLDcgQEAKIAkvKiBjb252ZXJ0IG4gc2FtcGxlcyAqLwogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKIAotCQkvKiB3YWl0IGZvciBlbmQgb2YgY29udmVydGlvbiAqLworCQkvKiB3YWl0IGZvciBlbmQgb2YgY29udmVyc2lvbiAqLwogCQlpID0gMDsKIAkJZG8gewogCQkJLyogdWRlbGF5KDEpOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYwppbmRleCA0NjZlNjlmLi5kYTJiNzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYwpAQCAtOTgsNyArOTgsNyBAQAogI2RlZmluZQlTdGF0dXNfRkUJMHgwMTAwCS8qIDE9RklGTyBpcyBlbXB0eSAqLwogI2RlZmluZSBTdGF0dXNfRkgJMHgwMjAwCS8qIDE9RklGTyBpcyBoYWxmIGZ1bGwgKi8KICNkZWZpbmUgU3RhdHVzX0ZGCTB4MDQwMAkvKiAxPUZJRk8gaXMgZnVsbCwgZmF0YWwgZXJyb3IgKi8KLSNkZWZpbmUgU3RhdHVzX0lSUQkweDA4MDAJLyogMT1JUlEgb2NjdXJlZCAqLworI2RlZmluZSBTdGF0dXNfSVJRCTB4MDgwMAkvKiAxPUlSUSBvY2N1cnJlZCAqLwogLyogYml0cyBmcm9tIGNvbnRyb2wgcmVnaXN0ZXIgKFBDSTE3MXhfQ09OVFJPTCkgKi8KICNkZWZpbmUgQ29udHJvbF9DTlQwCTB4MDA0MAkvKiAxPUNOVDAgaGF2ZSBleHRlcm5hbCBzb3VyY2UsCiAJCQkJICogMD1oYXZlIGludGVybmFsIDEwMGtIeiBzb3VyY2UgKi8KQEAgLTExNjEsNyArMTE2MSw3IEBACiAJfQogCiAJaWYgKG5fY2hhbiA+IDEpIHsKLQkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rICovCisJCWNoYW5zZWdtZW50WzBdID0gY2hhbmxpc3RbMF07CS8qICBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5IHRpbWUgb2sgKi8KIAkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IG5fY2hhbjsgaSsrLCBzZWdsZW4rKykgewkvKiAgYnVpbGQgcGFydCBvZiBjaGFubGlzdCAqLwogCQkJLyogIHByaW50aygiJWQuICVkICVkXG4iLGksQ1JfQ0hBTihjaGFubGlzdFtpXSksQ1JfUkFOR0UoY2hhbmxpc3RbaV0pKTsgKi8KIAkJCWlmIChjaGFubGlzdFswXSA9PSBjaGFubGlzdFtpXSkKQEAgLTExNzYsOSArMTE3Niw5IEBACiAJCQkgICAgKENSX0NIQU4oY2hhbnNlZ21lbnRbaSAtIDFdKSArIDEpICUgcy0+bl9jaGFuOwogCQkJaWYgKENSX0FSRUYoY2hhbnNlZ21lbnRbaSAtIDFdKSA9PSBBUkVGX0RJRkYpCiAJCQkJbm93bXVzdGJlY2hhbiA9IChub3dtdXN0YmVjaGFuICsgMSkgJSBzLT5uX2NoYW47Ci0JCQlpZiAobm93bXVzdGJlY2hhbiAhPSBDUl9DSEFOKGNoYW5saXN0W2ldKSkgewkvKiAgY2hhbm5lbCBsaXN0IGlzbid0IGNvbnRpbm91cyA6LSggKi8KKwkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8qICBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGludW91cyA6LSggKi8KIAkJCQlwcmludGsKLQkJCQkgICAgKCJjaGFubmVsIGxpc3QgbXVzdCBiZSBjb250aW5vdXMhIGNoYW5saXN0WyVpXT0lZCBidXQgbXVzdCBiZSAlZCBvciAlZCFcbiIsCisJCQkJICAgICgiY2hhbm5lbCBsaXN0IG11c3QgYmUgY29udGludW91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKIAkJCQkgICAgIGksIENSX0NIQU4oY2hhbmxpc3RbaV0pLCBub3dtdXN0YmVjaGFuLAogCQkJCSAgICAgQ1JfQ0hBTihjaGFubGlzdFswXSkpOwogCQkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCmluZGV4IDA5NDE2NDMuLjYxOTY4YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogI2RlZmluZSAgIElOVF9NQVNLIDB4MwkJLyogIG1hc2sgb2YgaW50ZXJydXB0IHNlbGVjdCBiaXRzICovCiAjZGVmaW5lICAgSU5URSAweDQJCS8qICBpbnRlcnJ1cHQgZW5hYmxlICovCiAjZGVmaW5lICAgREFIRklFIDB4OAkJLyogIGRhYyBoYWxmIGZ1bGwgaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSAgIEVPQUlFCTB4MTAJCS8qICBlbmQgb2YgYXF1aXNpdGlvbiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgRU9BSUUJMHgxMAkJLyogIGVuZCBvZiBhY3F1aXNpdGlvbiBpbnRlcnJ1cHQgZW5hYmxlICovCiAjZGVmaW5lICAgREFIRkkJMHgyMAkJLyogIGRhYyBoYWxmIGZ1bGwgcmVhZCBzdGF0dXMgLyB3cml0ZSBpbnRlcnJ1cHQgY2xlYXIgKi8KICNkZWZpbmUgICBFT0FJIDB4NDAJCS8qICByZWFkIGVuZCBvZiBhY3EuIGludGVycnVwdCBzdGF0dXMgLyB3cml0ZSBjbGVhciAqLwogI2RlZmluZSAgIElOVCAweDgwCQkvKiAgcmVhZCBpbnRlcnJ1cHQgc3RhdHVzIC8gd3JpdGUgY2xlYXIgKi8KQEAgLTQ0MCw3ICs0NDAsNyBAQAogCXVuc2lnbmVkIGludCBkaXZpc29yMTsKIAl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50OwkvKiAgbnVtYmVyIG9mIGFuYWxvZyBpbnB1dCBzYW1wbGVzIHJlbWFpbmluZyAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhZGNfZmlmb19iaXRzOwkvKiAgYml0cyB0byB3cml0ZSB0byBpbnRlcnVwdC9hZGNmaWZvIHJlZ2lzdGVyICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFkY19maWZvX2JpdHM7CS8qICBiaXRzIHRvIHdyaXRlIHRvIGludGVycnVwdC9hZGNmaWZvIHJlZ2lzdGVyICovCiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IHM1OTMzX2ludGNzcl9iaXRzOwkvKiAgYml0cyB0byB3cml0ZSB0byBhbWNjIHM1OTMzIGludGVycnVwdCBjb250cm9sL3N0YXR1cyByZWdpc3RlciAqLwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhb19jb250cm9sX2JpdHM7CS8qICBiaXRzIHRvIHdyaXRlIHRvIGFvIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlciAqLwogCXNob3J0IGFpX2J1ZmZlcltBSV9CVUZGRVJfU0laRV07CkBAIC0xNjUzLDcgKzE2NTMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChzdGF0dXMgJiBFT0FJKSB7CiAJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkgICAgICJidWchIGVuY291bnRlcmVkIGVuZCBvZiBhcXVpc2l0aW9uIGludGVycnVwdD8iKTsKKwkJCSAgICAgImJ1ZyEgZW5jb3VudGVyZWQgZW5kIG9mIGFjcXVpc2l0aW9uIGludGVycnVwdD8iKTsKIAkJLyogIGNsZWFyIEVPQSBpbnRlcnJ1cHQgbGF0Y2ggKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAkJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgRU9BSSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKaW5kZXggMjU4M2UxNi4uMWUzMjQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgVElNRVJfQkFTRSAyNQkJLyogIDQwTUh6IG1hc3RlciBjbG9jayAqLwotI2RlZmluZSBQUkVTQ0FMRURfVElNRVJfQkFTRQkxMDAwMAkvKiAgMTAwa0h6ICdwcmVzY2FsZWQnIGNsb2NrIGZvciBzbG93IGFxdWlzaXRpb24sIG1heWJlIEknbGwgc3VwcG9ydCB0aGlzIHNvbWVkYXkgKi8KKyNkZWZpbmUgUFJFU0NBTEVEX1RJTUVSX0JBU0UJMTAwMDAJLyogIDEwMGtIeiAncHJlc2NhbGVkJyBjbG9jayBmb3Igc2xvdyBhY3F1aXNpdGlvbiwgbWF5YmUgSSdsbCBzdXBwb3J0IHRoaXMgc29tZWRheSAqLwogI2RlZmluZSBETUFfQlVGRkVSX1NJWkUgMHgxMDAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUwkweDEzMDcKQEAgLTEzNiw3ICsxMzYsNyBAQAogCUFEQ19ERUxBWV9JTlRFUlZBTF9VUFBFUl9SRUcgPSAweDFjLAkvKiAgdXBwZXIgOCBiaXRzIG9mIGRlbGF5IGludGVydmFsIGNvdW50ZXIgKi8KIAlBRENfQ09VTlRfTE9XRVJfUkVHID0gMHgxZSwJLyogIGxvd2VyIDE2IGJpdHMgb2YgaGFyZHdhcmUgY29udmVyc2lvbi9zY2FuIGNvdW50ZXIgKi8KIAlBRENfQ09VTlRfVVBQRVJfUkVHID0gMHgyMCwJLyogIHVwcGVyIDggYml0cyBvZiBoYXJkd2FyZSBjb252ZXJzaW9uL3NjYW4gY291bnRlciAqLwotCUFEQ19TVEFSVF9SRUcgPSAweDIyLAkvKiAgc29mdHdhcmUgdHJpZ2dlciB0byBzdGFydCBhcXVpc2l0aW9uICovCisJQURDX1NUQVJUX1JFRyA9IDB4MjIsCS8qICBzb2Z0d2FyZSB0cmlnZ2VyIHRvIHN0YXJ0IGFjcXVpc2l0aW9uICovCiAJQURDX0NPTlZFUlRfUkVHID0gMHgyNCwJLyogIGluaXRpYXRlcyBzaW5nbGUgY29udmVyc2lvbiAqLwogCUFEQ19RVUVVRV9DTEVBUl9SRUcgPSAweDI2LAkvKiAgY2xlYXJzIGFkYyBxdWV1ZSAqLwogCUFEQ19RVUVVRV9MT0FEX1JFRyA9IDB4MjgsCS8qICBsb2FkcyBhZGMgcXVldWUgKi8KQEAgLTE5OSw3ICsxOTksNyBAQAogCUFEQ19JTlRSX0VPU0NBTl9CSVRTID0gMHgyLAkvKiAgaW50ZXJydXB0IGVuZCBvZiBzY2FuICovCiAJQURDX0lOVFJfRU9TRVFfQklUUyA9IDB4MywJLyogIGludGVycnVwdCBlbmQgb2Ygc2VxdWVuY2UgKHByb2JhYmx5IHdvbnQgdXNlIHRoaXMgaXQncyBwcmV0dHkgZmFuY3kpICovCiAJRU5fQURDX0lOVFJfU1JDX0JJVCA9IDB4NCwJLyogIGVuYWJsZSBhZGMgaW50ZXJydXB0IHNvdXJjZSAqLwotCUVOX0FEQ19ET05FX0lOVFJfQklUID0gMHg4LAkvKiAgZW5hYmxlIGFkYyBhcXVpc2l0aW9uIGRvbmUgaW50ZXJydXB0ICovCisJRU5fQURDX0RPTkVfSU5UUl9CSVQgPSAweDgsCS8qICBlbmFibGUgYWRjIGFjcXVpc2l0aW9uIGRvbmUgaW50ZXJydXB0ICovCiAJREFDX0lOVFJfU1JDX01BU0sgPSAweDMwLAogCURBQ19JTlRSX1FFTVBUWV9CSVRTID0gMHgwLAogCURBQ19JTlRSX0hJR0hfQ0hBTl9CSVRTID0gMHgxMCwKQEAgLTI4NjcsNyArMjg2Nyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQkvKiAgc3RhcnQgYXF1aXNpdGlvbiAqLworCS8qICBzdGFydCBhY3F1aXNpdGlvbiAqLwogCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgewogCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19TVEFSVF9SRUcpOwogCQlERUJVR19QUklOVCgic29mdCB0cmlnXG4iKTsKQEAgLTI5NDIsNyArMjk0Miw3IEBACiAvKiBSZWFkIGZyb20gMzIgYml0IHdpZGUgYWkgZmlmbyBvZiA0MDIwIC0gZGVhbCB3aXRoIGluc2FuZSBncmV5IGNvZGluZyBvZiBwb2ludGVycy4KICAqIFRoZSBwY2ktNDAyMCBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzCiAgKiBkbWEgdHJhbnNmZXJzIChpdCBvbmx5IHN1cHBvcnRzIHRoZSB1c2Ugb2YgcGlvIGZvciBkcmFpbmluZyB0aGUgbGFzdCByZW1haW5pbmcKLSAqIHBvaW50cyBmcm9tIHRoZSBmaWZvIHdoZW4gYSBkYXRhIGFxdWlzaXRpb24gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQpLgorICogcG9pbnRzIGZyb20gdGhlIGZpZm8gd2hlbiBhIGRhdGEgYWNxdWlzaXRpb24gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQpLgogICovCiBzdGF0aWMgdm9pZCBwaW9fZHJhaW5fYWlfZmlmb18zMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewpAQCAtMzA0Niw3ICszMDQ2LDcgQEAKIAkJY29tZWRpX2Vycm9yKGRldiwgImZpZm8gb3ZlcnJ1biIpOwogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CiAJfQotCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBub29uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZyAqLworCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBubyBvbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCWRtYTFfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0NTX1JFRyk7CiAJaWYgKHBseF9zdGF0dXMgJiBJQ1NfRE1BMV9BKSB7CS8qICBkbWEgY2hhbiAxIGludGVycnVwdCAqLwpAQCAtMzE3MCw3ICszMTcwLDcgQEAKIAlhc3luYyA9IHMtPmFzeW5jOwogCWNtZCA9ICZhc3luYy0+Y21kOwogCi0JLyogIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnICovCisJLyogIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vIG9uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJZG1hMF9zdGF0dXMgPSByZWFkYihwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKIAlpZiAocGx4X3N0YXR1cyAmIElDU19ETUEwX0EpIHsJLyogIGRtYSBjaGFuIDAgaW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3Rlc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCmluZGV4IGIyMjBiMzAuLmE4MDQ3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCkBAIC04MSw3ICs4MSw3IEBACiAvKiBEYXRhIHVuaXF1ZSB0byB0aGlzIGRyaXZlciAqLwogc3RydWN0IHdhdmVmb3JtX3ByaXZhdGUgewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXN0cnVjdCB0aW1ldmFsIGxhc3Q7CS8qIHRpbWUgYXQgd2hpY2ggbGFzdCB0aW1lciBpbnRlcnJ1cHQgb2NjdXJlZCAqLworCXN0cnVjdCB0aW1ldmFsIGxhc3Q7CS8qIHRpbWUgYXQgd2hpY2ggbGFzdCB0aW1lciBpbnRlcnJ1cHQgb2NjdXJyZWQgKi8KIAl1bnNpZ25lZCBpbnQgdXZvbHRfYW1wbGl0dWRlOwkvKiB3YXZlZm9ybSBhbXBsaXR1ZGUgaW4gbWljcm92b2x0cyAqLwogCXVuc2lnbmVkIGxvbmcgdXNlY19wZXJpb2Q7CS8qIHdhdmVmb3JtIHBlcmlvZCBpbiBtaWNyb3NlY29uZHMgKi8KIAl1bnNpZ25lZCBsb25nIHVzZWNfY3VycmVudDsJLyogY3VycmVudCB0aW1lIChtb2R1bG8gd2F2ZWZvcm0gcGVyaW9kKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMKaW5kZXggNmVhOTNmOS4uNjBjMmIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCXJldHVybjsKIH0KIAotLyogZmx1c2hlcyByZW1haW5pbmcgZGF0YSBmcm9tIGJvYXJkIHdoZW4gZXh0ZXJuYWwgdHJpZ2dlciBoYXMgc3RvcHBlZCBhcXVpc2l0aW9uCisvKiBmbHVzaGVzIHJlbWFpbmluZyBkYXRhIGZyb20gYm9hcmQgd2hlbiBleHRlcm5hbCB0cmlnZ2VyIGhhcyBzdG9wcGVkIGFjcXVpc2l0aW9uCiAgKiBhbmQgd2UgYXJlIHVzaW5nIGRtYSB0cmFuc2ZlcnMgKi8KIHN0YXRpYyB2b2lkIGRhczE4MDBfZmx1c2hfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwppbmRleCBhZWNhZWRjLi45NmQ0MWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKIAlvdXRiKENPTlRST0wxLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGJhc2UgYWRkcmVzcyArIDcgdG8gYmUgU1RBVFVTMiByZWdpc3RlciAqLwogCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9TVEFUVVMyKSAmIFNUQVRVUzJfSENFTjsKLQkvKiBkb24ndCByZWxlYXNlIHNwaW5sb2NrIHlldCBzaW5jZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBub29uZSBlbHNlIGRpc2FibGVzIGhhcmR3YXJlIGNvbnZlcnNpb25zICovCisJLyogZG9uJ3QgcmVsZWFzZSBzcGlubG9jayB5ZXQgc2luY2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgbm8gb25lIGVsc2UgZGlzYWJsZXMgaGFyZHdhcmUgY29udmVyc2lvbnMgKi8KIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKaW5kZXggNjkzNzI4ZS4uMmI0ZTZlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCkBAIC01MzIsNyArNTMyLDcgQEAKIAkJbXNiID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlNU0IpOwogCiAJCS8qIGludmVydCBzaWduIGJpdCB0byBtYWtlIHJhbmdlIHVuc2lnbmVkLCB0aGlzIGlzIGFuCi0JCSAgIGlkaW9zeW5jcmFjeSBvZiB0aGUgZGlhbW9uZCBib2FyZCwgaXQgcmV0dXJuCisJCSAgIGlkaW9zeW5jcmFzeSBvZiB0aGUgZGlhbW9uZCBib2FyZCwgaXQgcmV0dXJuCiAJCSAgIGNvbnZlcnNpb25zIGFzIGEgc2lnbmVkIHZhbHVlLCBpLmUuIC0zMjc2OCB0bwogCQkgICAzMjc2NywgZmxpcHBpbmcgdGhlIGJpdCBhbmQgaW50ZXJwcmV0aW5nIGl0IGFzCiAJCSAgIHNpZ25lZCBnaXZlcyB5b3UgYSByYW5nZSBvZiAwIHRvIDY1NTM1IHdoaWNoIGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMKaW5kZXggYTE2NjRjYS4uMDEzMWQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTEuYwpAQCAtNTYwLDcgKzU2MCw3IEBACiAJc3dpdGNoIChkZXYtPmlfYWRtb2RlKSB7CiAJY2FzZSBDT01FRElfTURFTUFORDoKIAkJZGV2LT5udHJpZyA9IGFkdHJpZy0+biAtIDE7Ci0JCS8qIG5vdCBuZWNjZXNzYXJ5ICovCisJCS8qIG5vdCBuZWNlc3NhcnkgKi8KIAkJLypwcmludGsoImR0MjgxMTogQUQgc29mdCB0cmlnZ2VyXG4iKTsgKi8KIAkJLypvdXRiKERUMjgxMV9DTFJFUlJPUnxEVDI4MTFfSU5URU5CLAogCQkJZGV2LT5pb2Jhc2UrRFQyODExX0FEQ1NSKTsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYwppbmRleCAwNjA1OTg1Li4zMmQ5YzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCkBAIC03NzMsNyArNzczLDcgQEAKIAkJCXJldHZhbCA9IGR0OTgxMl9yZWFkX2luZm8oZGV2LCAxLCAmZncsIHNpemVvZihmdykpOwogCQkJaWYgKHJldHZhbCA9PSAwKSB7CiAJCQkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAotCQkJCQkgInVzYl9yZXNldF9jb25maWd1cmF0aW9uIHN1Y2NlZGVkICIKKwkJCQkJICJ1c2JfcmVzZXRfY29uZmlndXJhdGlvbiBzdWNjZWVkZWQgIgogCQkJCQkgImFmdGVyICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwppbmRleCAxNjYxYjU3Li5iYzAyMGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwpAQCAtMTAzMSw3ICsxMDMxLDcgQEAKIAkJd3JpdGVsKGhwZGlfaW50cl9zdGF0dXMsCiAJCSAgICAgICBwcml2KGRldiktPmhwZGlfaW9iYXNlICsgSU5URVJSVVBUX1NUQVRVU19SRUcpOwogCX0KLQkvKiAgc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm9vbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcgKi8KKwkvKiAgc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm8gb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAlkbWEwX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOwogCWlmIChwbHhfc3RhdHVzICYgSUNTX0RNQTBfQSkgewkvKiAgZG1hIGNoYW4gMCBpbnRlcnJ1cHQgKi8KQEAgLTEwNDUsNyArMTA0NSw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBub29uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZyAqLworCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBubyBvbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCWRtYTFfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0NTX1JFRyk7CiAJaWYgKHBseF9zdGF0dXMgJiBJQ1NfRE1BMV9BKSB7CS8qICBYWFggKi8vKiAgZG1hIGNoYW4gMSBpbnRlcnJ1cHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYwppbmRleCAwYmFiMzliLi4xMjY1NTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jCkBAIC03MTUsNyArNzE1LDcgQEAKIAlpcyBidWlsdCBjb3JyZWN0bHkKIAogUGFyYW1ldGVyczoKLQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgc2VydmljZSBzdHJ1Y3R1cmUKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QJUG9pbnRlciB0byBwYWNrZWQgY2hhbm5lbCBsaXN0CiAJdW5zaWduZWQgaW50IG5fY2hhbglOdW1iZXIgb2YgY2hhbm5lbHMgdG8gc2NhbgpAQCAtNzcyLDcgKzc3Miw3IEBACiAJU3RhdHVzIHJlZ2lzdGVyLgogCiBQYXJhbWV0ZXJzOgotCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXJ2aWNlIHN0cnVjdHVyZQogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdAlQb2ludGVyIHRvIHBhY2tlZCBjaGFubmVsIGxpc3QKIAl1bnNpZ25lZCBpbnQgbl9jaGFuCU51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCkBAIC04NDgsNyArODQ4LDcgQEAKIAlUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgaWNwIG11bHRpIGRldmljZSB0byBhICdzYWZlJyBzdGF0ZQogCiBQYXJhbWV0ZXJzOgotCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXJ2aWNlIHN0cnVjdHVyZQogCiBSZXR1cm5zOmludAkwID0gc3VjY2VzcwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMKaW5kZXggNzU1MTFiYS4uYjY5MmZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYwpAQCAtMTgxMCw3ICsxODEwLDcgQEAKIAkJICAgICAgIGFpX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnKSAmCiAJICAgIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BSV9IRikgewogCQlJU1JfUERFQlVHCi0JCSAgICAoIm1lNDAwMF9haV9pc3IoKTogRmlmbyBoYWxmIGZ1bGwgaW50ZXJydXB0IG9jY3VyZWRcbiIpOworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6IEZpZm8gaGFsZiBmdWxsIGludGVycnVwdCBvY2N1cnJlZFxuIik7CiAKIAkJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLwogCQl0bXAgPSBtZTQwMDBfaW5sKGRldiwgYWlfY29udGV4dC0+Y3RybF9yZWcpOwpAQCAtMTkwMyw3ICsxOTAzLDcgQEAKIAlpZiAobWU0MDAwX2lubChkZXYsCiAJCSAgICAgICBhaV9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykgJiBNRTQwMDBfSVJRX1NUQVRVU19CSVRfU0MpIHsKIAkJSVNSX1BERUJVRwotCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6IFNhbXBsZSBjb3VudGVyIGludGVycnVwdCBvY2N1cmVkXG4iKTsKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOiBTYW1wbGUgY291bnRlciBpbnRlcnJ1cHQgb2NjdXJyZWRcbiIpOwogCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLIHwgQ09NRURJX0NCX0VPQTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCmluZGV4IGE4OWVlYmQuLmRkMDlhNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMKQEAgLTM5LDggKzM5LDggQEAKIAogQ29uZmlndXJhdGlvbiBPcHRpb25zOgogICBbMF0gLSBJL08gYmFzZSBhZGRyZXNzCi0gIFsxXSAtIGNvbnZlcnRpb24gcmF0ZQotCUNvbnZlcnRpb24gcmF0ZSAgUk1TIG5vaXNlICBFZmZlY3RpdmUgTnVtYmVyIE9mIEJpdHMKKyAgWzFdIC0gY29udmVyc2lvbiByYXRlCisJQ29udmVyc2lvbiByYXRlICBSTVMgbm9pc2UgIEVmZmVjdGl2ZSBOdW1iZXIgT2YgQml0cwogCTAgICAgICAzLjUya0h6ICAgICAgICAyM3VWICAgICAgICAgICAgICAgIDE3CiAJMSAgICAgIDEuNzZrSHogICAgICAgMy41dVYgICAgICAgICAgICAgICAgMjAKIAkyICAgICAgIDg4MEh6ICAgICAgICAgMnVWICAgICAgICAgICAgICAgIDIxLjMKQEAgLTkzLDggKzkzLDggQEAKICNkZWZpbmUgTVBDNjI0X0RNWV9CSVQgICAgICAgICAgKDE8PDMwKQogI2RlZmluZSBNUEM2MjRfU0dOX0JJVCAgICAgICAgICAoMTw8MjkpCiAKLS8qIENvbnZlcnRpb24gc3BlZWRzICovCi0vKiBPU1I0IE9TUjMgT1NSMiBPU1IxIE9TUjAgIENvbnZlcnRpb24gcmF0ZSAgUk1TIG5vaXNlICBFTk9CXgorLyogQ29udmVyc2lvbiBzcGVlZHMgKi8KKy8qIE9TUjQgT1NSMyBPU1IyIE9TUjEgT1NSMCAgQ29udmVyc2lvbiByYXRlICBSTVMgbm9pc2UgIEVOT0JeCiAgKiAgWCAgICAwICAgIDAgICAgMCAgICAxICAgICAgICAzLjUya0h6ICAgICAgICAyM3VWICAgICAgMTcKICAqICBYICAgIDAgICAgMCAgICAxICAgIDAgICAgICAgIDEuNzZrSHogICAgICAgMy41dVYgICAgICAyMAogICogIFggICAgMCAgICAwICAgIDEgICAgMSAgICAgICAgIDg4MEh6ICAgICAgICAgMnVWICAgICAgMjEuMwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50awotCQkgICAgKEtFUk5fRVJSICJpbGxlZ2FsIGNvbnZlcnRpb24gcmF0ZSBzZXR0aW5nISIKKwkJICAgIChLRVJOX0VSUiAiaWxsZWdhbCBjb252ZXJzaW9uIHJhdGUgc2V0dGluZyEiCiAJCQkiIFZhbGlkIG51bWJlcnMgYXJlIDAuLjkuIFVzaW5nIDkgPT4gNi44NzUgSHosICIpOwogCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzNfNTJfa0h6OwogCX0KQEAgLTI5Niw3ICsyOTYsNyBAQAogCX0KIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKLQkJLyogIFRyaWdnZXIgdGhlIGNvbnZlcnRpb24gKi8KKwkJLyogIFRyaWdnZXIgdGhlIGNvbnZlcnNpb24gKi8KIAkJb3V0YihNUEM2MjRfQURTQ0ssIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CiAJCXVkZWxheSgxKTsKIAkJb3V0YihNUEM2MjRfQURDUyB8IE1QQzYyNF9BRFNDSywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKQEAgLTMwNCw3ICszMDQsNyBAQAogCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CiAJCXVkZWxheSgxKTsKIAotCQkvKiAgV2FpdCBmb3IgdGhlIGNvbnZlcnRpb24gdG8gZW5kICovCisJCS8qICBXYWl0IGZvciB0aGUgY29udmVyc2lvbiB0byBlbmQgKi8KIAkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgewogCQkJdWNQb3J0ID0gaW5iKGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CiAJCQlpZiAodWNQb3J0ICYgTVBDNjI0X0FEQlVTWSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKaW5kZXggNGQwMDUzZS4uYzE5MmI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKQEAgLTEwNCwxMCArMTA0LDEwIEBACiAjZGVmaW5lIFNUQVRVU19SRUcJCTB4MTIJLyogIHJlYWQgb25seSAqLwogI2RlZmluZSAgIEZORV9CSVQJCTB4MQkvKiAgZmlmbyBub3QgZW1wdHkgKi8KICNkZWZpbmUgICBPVkZMX0JJVAkJMHg4CS8qICBmaWZvIG92ZXJmbG93ICovCi0jZGVmaW5lICAgRURBUV9CSVQJCTB4MTAJLyogIGVuZCBvZiBhcXVpc2l0aW9uIGludGVycnVwdCAqLworI2RlZmluZSAgIEVEQVFfQklUCQkweDEwCS8qICBlbmQgb2YgYWNxdWlzaXRpb24gaW50ZXJydXB0ICovCiAjZGVmaW5lICAgRENBTF9CSVQJCTB4MjAJLyogIG9mZnNldCBjYWxpYnJhdGlvbiBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSAgIElOVFJfQklUCQkweDQwCS8qICBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQgKi8KLSNkZWZpbmUgICBETUFfVENfQklUCQkweDgwCS8qICBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0IGhhcyBvY2N1cmVkICovCisjZGVmaW5lICAgSU5UUl9CSVQJCTB4NDAJLyogIGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8KKyNkZWZpbmUgICBETUFfVENfQklUCQkweDgwCS8qICBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIElEX0JJVFMoeCkJKCgoeCkgPj4gOCkgJiAweDMpCiAjZGVmaW5lIElSUV9ETUFfQ05UUkxfUkVHCQkweDEyCS8qICB3cml0ZSBvbmx5ICovCiAjZGVmaW5lICAgRE1BX0NIQU5fQklUUyh4KQkJKCh4KSAmIDB4NykJLyogIHNldHMgZG1hIGNoYW5uZWwgKi8KQEAgLTQzNCw3ICs0MzQsNyBAQAogCXMtPmNhbmNlbCA9IGEyMTUwX2NhbmNlbDsKIAogCS8qIG5lZWQgdG8gZG8gdGhpcyBmb3Igc29mdHdhcmUgY291bnRpbmcgb2YgY29tcGxldGVkIGNvbnZlcnNpb25zLCB0bwotCSAqIHByZXZlbnQgaGFyZHdhcmUgY291bnQgZnJvbSBzdG9wcGluZyBhcXVpc2l0aW9uICovCisJICogcHJldmVudCBoYXJkd2FyZSBjb3VudCBmcm9tIHN0b3BwaW5nIGFjcXVpc2l0aW9uICovCiAJb3V0dyhIV19DT1VOVF9ESVNBQkxFLCBkZXYtPmlvYmFzZSArIEk4MjUzX01PREVfUkVHKTsKIAogCS8qICBzZXQgY2FyZCdzIGlycSBhbmQgZG1hIGxldmVscyAqLwpAQCAtNzI5LDcgKzcyOSw3IEBACiAJLyogIHNlbmQgdHJpZ2dlciBjb25maWcgYml0cyAqLwogCW91dHcodHJpZ2dlcl9iaXRzLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKIAotCS8qICBzdGFydCBhcXVpc2l0aW9uIGZvciBzb2Z0IHRyaWdnZXIgKi8KKwkvKiAgc3RhcnQgYWNxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlciAqLwogCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgewogCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19TVEFSVF9SRUcpOwogCX0KQEAgLTc2OCw3ICs3NjgsNyBAQAogCS8qICBzZXR1cCBzdGFydCB0cmlnZ2VyaW5nICovCiAJb3V0dygwLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKIAotCS8qICBzdGFydCBhcXVpc2l0aW9uIGZvciBzb2Z0IHRyaWdnZXIgKi8KKwkvKiAgc3RhcnQgYWNxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlciAqLwogCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1NUQVJUX1JFRyk7CiAKIAkvKiB0aGVyZSBpcyBhIDM1LjYgc2FtcGxlIGRlbGF5IGZvciBkYXRhIHRvIGdldCB0aHJvdWdoIHRoZSBhbnRpYWxpYXMgZmlsdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCmluZGV4IDI0MWZlNTIuLmFiOGYzNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCkBAIC0xODMsMTEgKzE4MywxMSBAQAogI2RlZmluZSAgIE9WRVJSVU5fQklUCTB4MgogLyogZmlmbyBvdmVyZmxvdyAqLwogI2RlZmluZSAgIE9WRVJGTE9XX0JJVAkweDQKLS8qIHRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJlZCAqLworLyogdGltZXIgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIFRJTUVSX0JJVAkweDgKLS8qIGRtYSB0ZXJtaW5hbCBjb3VudCBoYXMgb2NjdXJlZCAqLworLyogZG1hIHRlcm1pbmFsIGNvdW50IGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIERNQVRDX0JJVAkweDEwCi0vKiBleHRlcm5hbCB0cmlnZ2VyIGhhcyBvY2N1cmVkICovCisvKiBleHRlcm5hbCB0cmlnZ2VyIGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIEVYVF9UUklHX0JJVAkweDQwCiAvKiAxMjAwIGJvYXJkcyBvbmx5ICovCiAjZGVmaW5lIFNUQVRVUzJfUkVHCTB4MWQKQEAgLTExNDksNyArMTE0OSw3IEBACiAJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKIAlhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKIAotCS8qIG1ha2Ugc3VyZSBib2FyZCBpcyBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB1cCBhcXVpc2l0aW9uICovCisJLyogbWFrZSBzdXJlIGJvYXJkIGlzIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHVwIGFjcXVpc2l0aW9uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5TV1RSSUdfQklUICYgfkhXVFJJR19CSVQgJiB+UFJFVFJJR19CSVQ7CiAJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogCQlkZXZwcml2LT5jb21tYW5kM19iaXRzICY9IH5BRENfRk5FX0lOVFJfRU5fQklUOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOwogCi0JLyogIHN0YXJ0dXAgYXF1aXNpdGlvbiAqLworCS8qICBzdGFydHVwIGFjcXVpc2l0aW9uICovCiAKIAkvKiAgY29tbWFuZDIgcmVnICovCiAJLyogIHVzZSAyIGNhc2NhZGVkIGNvdW50ZXJzIGZvciBwYWNpbmcgKi8KQEAgLTE1NzEsOCArMTU3MSw4IEBACiAJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgRE1BVENfQ0xFQVJfUkVHKTsKIH0KIAotLyogbWFrZXMgc3VyZSBhbGwgZGF0YSBhY3F1aXJlZCBieSBib2FyZCBpcyB0cmFuc2ZlcmVkIHRvIGNvbWVkaSAodXNlZAotICogd2hlbiBhcXVpc2l0aW9uIGlzIHRlcm1pbmF0ZWQgYnkgc3RvcF9zcmMgPT0gVFJJR19FWFQpLiAqLworLyogbWFrZXMgc3VyZSBhbGwgZGF0YSBhY3F1aXJlZCBieSBib2FyZCBpcyB0cmFuc2ZlcnJlZCB0byBjb21lZGkgKHVzZWQKKyAqIHdoZW4gYWNxdWlzaXRpb24gaXMgdGVybWluYXRlZCBieSBzdG9wX3NyYyA9PSBUUklHX0VYVCkuICovCiBzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWlmIChkZXZwcml2LT5jdXJyZW50X3RyYW5zZmVyID09IGlzYV9kbWFfdHJhbnNmZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggMDA1ZDJmZS4uOGRkM2EwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtODIxLDcgKzgyMSw3IEBACiAJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NQRUVEOwogCQkJZXJyKys7CiAJCX0KLQkJLyogbm8gbWludW11bSBzcGVlZCAqLworCQkvKiBubyBtaW5pbXVtIHNwZWVkICovCiAJfSBlbHNlIHsKIAkJLyogVFJJR19FWFQgKi8KIAkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCmluZGV4IGM2ZGNlNGEuLjA5ZmY0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKQEAgLTM0LDcgKzM0LDcgQEAKICAqCSAgICAgICBhbmQgSSBjYW5uJ3QgdGVzdCBhbGwgZmVhdHVyZXMuKQogICoKICAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGluc24gYW5kIGNtZCBpbnRlcmZhY2VzLiBTb21lIGJvYXJkcyBzdXBwb3J0IG9ubHkgaW5zbgotICogYmVjb3VzZSB0aGVpciBoYXJkd2FyZSBkb24ndCBhbGxvdyBtb3JlIChQQ0wtODEzL0IsIEFDTC04MTEzLCBJU08tODEzKS4KKyAqIGJlY2F1c2UgdGhlaXIgaGFyZHdhcmUgZG9uJ3QgYWxsb3cgbW9yZSAoUENMLTgxMy9CLCBBQ0wtODExMywgSVNPLTgxMykuCiAgKiBEYXRhIHRyYW5zZmVyIG92ZXIgRE1BIGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4geW91IG1lYXN1cmUgb25seSBvbmUKICAqIGNoYW5uZWwsIHRoaXMgaXMgdG9vIGhhcmR3YXJlIGxpbWl0YXRpb24gb2YgdGhlc2UgYm9hcmRzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYwppbmRleCBlZjNjYzRmLi44ZjNmYzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCkBAIC05NTQsNyArOTU0LDcgQEAKIAl9CiAKIAlpZiAoY2hhbmxlbiA+IDEpIHsKLQkJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rICovCisJCS8qICBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5IHRpbWUgb2sgKi8KIAkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsKIAkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IGNoYW5sZW47IGkrKywgc2VnbGVuKyspIHsKIAkJCS8qICBidWlsZCBwYXJ0IG9mIGNoYW5saXN0ICovCkBAIC05NjgsMTAgKzk2OCwxMCBAQAogCQkJbm93bXVzdGJlY2hhbiA9CiAJCQkgICAgKENSX0NIQU4oY2hhbnNlZ21lbnRbaSAtIDFdKSArIDEpICUgY2hhbmxlbjsKIAkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7Ci0JCQkJLyogIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW5vdXMgOi0oICovCisJCQkJLyogIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW51b3VzIDotKCAqLwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkgICAgICAgImNvbWVkaSVkOiBwY2w4MTY6IGNoYW5uZWwgbGlzdCBtdXN0ICIKLQkJCQkgICAgICAgImJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCAiCisJCQkJICAgICAgICJiZSBjb250aW51b3VzISBjaGFubGlzdFslaV09JWQgYnV0ICIKIAkJCQkgICAgICAgIm11c3QgYmUgJWQgb3IgJWQhXG4iLCBkZXYtPm1pbm9yLAogCQkJCSAgICAgICBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwgbm93bXVzdGJlY2hhbiwKIAkJCQkgICAgICAgQ1JfQ0hBTihjaGFubGlzdFswXSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCmluZGV4IGY1OGQ3NWIuLmUzZWVhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKQEAgLTEyMzEsNyArMTIzMSw3IEBACiAJfQogCiAJaWYgKG5fY2hhbiA+IDEpIHsKLQkJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rICovCisJCS8qICBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5IHRpbWUgb2sgKi8KIAkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsKIAkJLyogIGJ1aWxkIHBhcnQgb2YgY2hhbmxpc3QgKi8KIAkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IG5fY2hhbjsgaSsrLCBzZWdsZW4rKykgewpAQCAtMTI0NSw5ICsxMjQ1LDkgQEAKIAkJCQlicmVhazsKIAkJCW5vd211c3RiZWNoYW4gPQogCQkJICAgIChDUl9DSEFOKGNoYW5zZWdtZW50W2kgLSAxXSkgKyAxKSAlIHMtPm5fY2hhbjsKLQkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8qICBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGlub3VzIDotKCAqLworCQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsJLyogIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW51b3VzIDotKCAqLwogCQkJCXByaW50awotCQkJCSAgICAoImNvbWVkaSVkOiBwY2w4MTg6IGNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKKwkJCQkgICAgKCJjb21lZGklZDogcGNsODE4OiBjaGFubmVsIGxpc3QgbXVzdCBiZSBjb250aW51b3VzISBjaGFubGlzdFslaV09JWQgYnV0IG11c3QgYmUgJWQgb3IgJWQhXG4iLAogCQkJCSAgICAgZGV2LT5taW5vciwgaSwgQ1JfQ0hBTihjaGFubGlzdFtpXSksCiAJCQkJICAgICBub3dtdXN0YmVjaGFuLCBDUl9DSEFOKGNoYW5saXN0WzBdKSk7CiAJCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKaW5kZXggNWM4MzJkNy4uZjJlODhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwpAQCAtNzMzLDcgKzczMyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6Ci0JCS8qIHJldHJlaXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCisJCS8qIHJldHJpZXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCiAJCWRhdGFbMV0gPQogCQkgICAgKHMtPmlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOwogCQlyZXR1cm4gaW5zbi0+bjsKQEAgLTEyNzksNyArMTI3OSw3IEBACiAJICAgIm5vIGJ1c3kgd2FpdGluZyIgcG9saWN5LiBUaGUgZmFjdCBpcyB0aGF0IHRoZSBoYXJkd2FyZSBpcwogCSAgIG5vcm1hbGx5IHNvIGZhc3QgdGhhdCB3ZSB1c3VhbGx5IG9ubHkgbmVlZCBvbmUgdGltZSB0aHJvdWdoIHRoZSBsb29wCiAJICAgYW55d2F5LiBUaGUgbG9uZ2VyIHRpbWVvdXQgaXMgZm9yIHJhcmUgb2NjYXNpb25zIGFuZCBmb3IgZGV0ZWN0aW5nCi0JICAgbm9uLWV4aXN0YW50IGhhcmR3YXJlLiAgKi8KKwkgICBub24tZXhpc3RlbnQgaGFyZHdhcmUuICAqLwogCiAJd2hpbGUgKHJldHJ5LS0pIHsKIAkJaWYgKGluYihpb2Jhc2UgKyAzKSAmIDB4ODApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKaW5kZXggN2E5Mjg3NC4uYjJjMmM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY211aW8uYwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6Ci0JCS8qIHJldHJlaXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCisJCS8qIHJldHJpZXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCiAJCWRhdGFbMV0gPQogCQkgICAgKHMtPmlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOwogCQlyZXR1cm4gaW5zbi0+bjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwppbmRleCBlYmJhOWJiLi44Mjk0MmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIAogCW91dGIodiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTlRST0wpOwogCi0JLyogUmVzZXQgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAobXkgY2FyZCBoYXMgYSB0ZW5kYW5jeSB0byByZXF1aXJlCisJLyogUmVzZXQgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAobXkgY2FyZCBoYXMgYSB0ZW5kZW5jeSB0byByZXF1aXJlCiAJICogcmVxdWlyZSBtdWx0aXBsZSByZWFkcyBvbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIGFjaGlldmUgdGhpcykKIAkgKi8KIApAQCAtNzUyLDcgKzc1Miw3IEBACiAKIAlvdXRiKHYsIGRldi0+aW9iYXNlICsgREFRUF9DT05UUk9MKTsKIAotCS8qIFJlc2V0IGFueSBwZW5kaW5nIGludGVycnVwdHMgKG15IGNhcmQgaGFzIGEgdGVuZGFuY3kgdG8gcmVxdWlyZQorCS8qIFJlc2V0IGFueSBwZW5kaW5nIGludGVycnVwdHMgKG15IGNhcmQgaGFzIGEgdGVuZGVuY3kgdG8gcmVxdWlyZQogCSAqIHJlcXVpcmUgbXVsdGlwbGUgcmVhZHMgb24gdGhlIHN0YXR1cyByZWdpc3RlciB0byBhY2hpZXZlIHRoaXMpCiAJICovCiAJY291bnRlciA9IDEwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYwppbmRleCAzNTc4NThkLi43ZjA5ZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCkBAIC03NSw3ICs3NSw3IEBACiAgICAgZGFzMTgwMCwgc2luY2UgdGhleSBoYXZlIHRoZSBiZXN0IGRvY3VtZW50ZWQgY29kZS4gIERyaXZlcgogICAgIGNiX3BjaWRhczY0LmMgdXNlcyB0aGUgc2FtZSBETUEgY29udHJvbGxlci4KIAotICAgIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgQWJvdXQgaW50ZXJydXB0IGRvZXNudCB3b3JrIGlmIFNhbXBsZSBpcworICAgIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgQWJvdXQgaW50ZXJydXB0IGRvZXNuJ3Qgd29yayBpZiBTYW1wbGUgaXMKICAgICBhbHNvIGVuYWJsZWQuICBJdCB0dXJucyBvdXQgdGhhdCBBYm91dCByZWFsbHkgaXNuJ3QgbmVlZGVkLCBzaW5jZQogICAgIHdlIGFsd2F5cyBjb3VudCBkb3duIHNhbXBsZXMgcmVhZC4KIApAQCAtMzcwLDcgKzM3MCw3IEBACiAJLyogdGltZXIgZ2F0ZSAod2hlbiBlbmFibGVkKSAqLwogCXU4IHV0Y0dhdGVbNF07CQkvKiAxIGV4dHJhIGFsbG93cyBzaW1wbGUgcmFuZ2UgY2hlY2sgKi8KIAotCS8qIHNoYWRvdyByZWdpc3RlcnMgYWZmZWN0IG90aGVyIHJlZ2lzdGVycywgYnV0IGNhbnQgYmUgcmVhZCBiYWNrICovCisJLyogc2hhZG93IHJlZ2lzdGVycyBhZmZlY3Qgb3RoZXIgcmVnaXN0ZXJzLCBidXQgY2FuJ3QgYmUgcmVhZCBiYWNrICovCiAJLyogVGhlIG1hY3JvcyBiZWxvdyB1cGRhdGUgdGhlc2Ugb24gd3JpdGVzICovCiAJdTE2IGludE1hc2s7CQkvKiBpbnRlcnJ1cHQgbWFzayAqLwogCXUxNiBpbnRDbGVhck1hc2s7CS8qIGludGVycnVwdCBjbGVhciBtYXNrICovCkBAIC00ODUsNyArNDg1LDcgQEAKICNkZWZpbmUgUnRkQWRjRmlmb0dldChkZXYpIFwKIAlyZWFkdyhkZXZwcml2LT5sYXMxK0xBUzFfQURDX0ZJRk8pCiAKLS8qIFJlYWQgdHdvIEFEQyBkYXRhIHZhbHVlcyAoRE9FU05UIFdPUkspICovCisvKiBSZWFkIHR3byBBREMgZGF0YSB2YWx1ZXMgKERPRVNOJ1QgV09SSykgKi8KICNkZWZpbmUgUnRkQWRjRmlmb0dldDIoZGV2KSBcCiAJcmVhZGwoZGV2cHJpdi0+bGFzMStMQVMxX0FEQ19GSUZPKQogCkBAIC04NTcsNyArODU3LDcgQEAKIAkJCURQUklOVEsoInJ0ZDUyMDogUENJIGxhdGVuY3kgPSAlZFxuIiwgcGNpX2xhdGVuY3kpOwogCQl9CiAKLQkJLyogVW5kb2N1bWVudGVkIEVQTEQgdmVyc2lvbiAoZG9lc250IG1hdGNoIFJURCBkcml2ZXIgcmVzdWx0cykgKi8KKwkJLyogVW5kb2N1bWVudGVkIEVQTEQgdmVyc2lvbiAoZG9lc24ndCBtYXRjaCBSVEQgZHJpdmVyIHJlc3VsdHMpICovCiAJCS8qRFBSSU5USyAoInJ0ZDUyMDogUmVhZGluZyBlcGxkIGZyb20gJXBcbiIsCiAJCSAgIGRldnByaXYtPmxhczArMCk7CiAJCSAgIGVwbGRfdmVyc2lvbiA9IHJlYWRsIChkZXZwcml2LT5sYXMwKzApOwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIC8qCiAgICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCiAgIG1vZGUgKHNpbXBsZXN0IGNhc2UpLgotICBUaGlzIGRvZXNudCB1c2UgaW50ZXJydXB0cy4KKyAgVGhpcyBkb2Vzbid0IHVzZSBpbnRlcnJ1cHRzLgogCiAgIE5vdGUsIHdlIGRvbid0IGRvIGFueSBzZXR0bGluZyBkZWxheXMuICBVc2UgYSBpbnN0cnVjdGlvbiBsaXN0IHRvCiAgIHNlbGVjdCwgZGVsYXksIHRoZW4gcmVhZC4KQEAgLTIxMjAsNyArMjEyMCw3IEBACiB9CiAKIC8qCi0gIFN0b3AgYSBydW5uaW5nIGRhdGEgYXF1aXNpdGlvbi4KKyAgU3RvcCBhIHJ1bm5pbmcgZGF0YSBhY3F1aXNpdGlvbi4KICovCiBzdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYwppbmRleCBkNWJhM2FiLi4yM2ZjNjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCWludCBnb3RfcmVnaW9uczsKIAlzaG9ydCBhbGxvY2F0ZWRCdWY7CiAJdWludDhfdCBhaV9jbWRfcnVubmluZzsJLyogIGFpX2NtZCBpcyBydW5uaW5nICovCi0JdWludDhfdCBhaV9jb250aW5vdXM7CS8qICBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCXVpbnQ4X3QgYWlfY29udGlub3VzOwkvKiAgY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJaW50IGFpX3NhbXBsZV9jb3VudDsJLyogIG51bWJlciBvZiBzYW1wbGVzIHRvIGFjcXVpcmUgKi8KIAl1bnNpZ25lZCBpbnQgYWlfc2FtcGxlX3RpbWVyOwogCS8qICB0aW1lIGJldHdlZW4gc2FtcGxlcyBpbiAgdW5pdHMgb2YgdGhlIHRpbWVyICovCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQAogCXVpbnQ4X3QgZ3JvdXA7CiAJdWludDE2X3QgaXJxYml0OwogCi0JREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCByZXF1ZXN0IHJlY2lldmVkISEhXG4iKTsKKwlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IHJlcXVlc3QgcmVjZWl2ZWQhISFcbiIpOwogCiAJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtMTE2NSwxNCArMTE2NSwxNCBAQAogCQkJCQkJCSgxNiAqIGdyb3VwKSkpCiAJCQkJCSAgICA9PSAxICYmIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CiAJCQkJCQlERUJVRwotCQkJCQkJICAgICgiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNpZXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsCisJCQkJCQkgICAgKCJzNjI2X2lycV9oYW5kbGVyOiBFZGdlIGNhcHR1cmUgaW50ZXJydXB0IHJlY2VpdmVkIGZyb20gY2hhbm5lbCAlZFxuIiwKIAkJCQkJCSAgICAgY21kLT5zdGFydF9hcmcpOwogCiAJCQkJCQkvKiAgU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4gKi8KIAkJCQkJCU1DX0VOQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAogCQkJCQkJREVCVUcKLQkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IGFxdWlzaXRpb24gc3RhcnQgdHJpZ2dlcmVkISEhXG4iKTsKKwkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IGFjcXVpc2l0aW9uIHN0YXJ0IHRyaWdnZXJlZCEhIVxuIik7CiAKIAkJCQkJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09CiAJCQkJCQkgICAgVFJJR19FWFQpIHsKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJCQkJCSAgICAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjID09CiAJCQkJCSAgICBUUklHX0VYVCkgewogCQkJCQkJREVCVUcKLQkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjaWV2ZWQgZnJvbSBjaGFubmVsICVkXG4iLAorCQkJCQkJICAgICgiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNlaXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsCiAJCQkJCQkgICAgIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogCiAJCQkJCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAkJCQkJICAgID09IDEKIAkJCQkJICAgICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsKIAkJCQkJCURFQlVHCi0JCQkJCQkgICAgKCJzNjI2X2lycV9oYW5kbGVyOiBFZGdlIGNhcHR1cmUgaW50ZXJydXB0IHJlY2lldmVkIGZyb20gY2hhbm5lbCAlZFxuIiwKKwkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjZWl2ZWQgZnJvbSBjaGFubmVsICVkXG4iLAogCQkJCQkJICAgICBjbWQtPmNvbnZlcnRfYXJnKTsKIAogCQkJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KQEAgLTE4MDUsNyArMTgwNSw3IEBACiAJCURFQlVHKCJzNjI2X2FpX2NtZDogTlVMTCBjb21tYW5kXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKLQkJREVCVUcoInM2MjZfYWlfY21kOiBjb21tYW5kIHJlY2lldmVkISEhXG4iKTsKKwkJREVCVUcoInM2MjZfYWlfY21kOiBjb21tYW5kIHJlY2VpdmVkISEhXG4iKTsKIAl9CiAKIAlpZiAoZGV2LT5pcnEgPT0gMCkgewpAQCAtMTg4MCw3ICsxODgwLDcgQEAKIAkJZGV2cHJpdi0+YWlfY29udGlub3VzID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBUUklHX05PTkU6Ci0JCS8qICBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCQkvKiAgY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJCWRldnByaXYtPmFpX2NvbnRpbm91cyA9IDE7CiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJCWJyZWFrOwpAQCAtMjU3MCw3ICsyNTcwLDcgQEAKIAl3aGlsZSAoKFJSNzE0NihQX0kyQ0NUUkwpICYgKEkyQ19CVVNZIHwgSTJDX0VSUikpID09IEkyQ19CVVNZKQogCQk7CiAKLQkvKiAgUmV0dXJuIG5vbi16ZXJvIGlmIEkyQyBlcnJvciBvY2N1cmVkLiAqLworCS8qICBSZXR1cm4gbm9uLXplcm8gaWYgSTJDIGVycm9yIG9jY3VycmVkLiAqLwogCXJldHVybiBSUjcxNDYoUF9JMkNDVFJMKSAmIEkyQ19FUlI7CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCBiZTkzYzMwLi5lNTQzZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAlzaG9ydCBpbnQgYW9fY21kX3J1bm5pbmc7CiAJLyogcHdtIGlzIHJ1bm5pbmcgKi8KIAlzaG9ydCBpbnQgcHdtX2NtZF9ydW5uaW5nOwotCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJLyogY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJc2hvcnQgaW50IGFpX2NvbnRpbm91czsKIAlzaG9ydCBpbnQgYW9fY29udGlub3VzOwogCS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFjcXVpcmUgKi8KQEAgLTUwMCw3ICs1MDAsNyBAQAogCiAJLyogdGVzdCwgaWYgd2UgdHJhbnNtaXQgb25seSBhIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCiAJaWYgKCEodGhpc191c2JkdXhzdWItPmFpX2NvbnRpbm91cykpIHsKLQkJLyogbm90IGNvbnRpbm91cywgZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KKwkJLyogbm90IGNvbnRpbnVvdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCiAJCXRoaXNfdXNiZHV4c3ViLT5haV9zYW1wbGVfY291bnQtLTsKIAkJLyogYWxsIHNhbXBsZXMgcmVjZWl2ZWQ/ICovCiAJCWlmICh0aGlzX3VzYmR1eHN1Yi0+YWlfc2FtcGxlX2NvdW50IDwgMCkgewpAQCAtNjUzLDcgKzY1Myw3IEBACiAJCS8qIHRpbWVyIHplcm8gKi8KIAkJdGhpc191c2JkdXhzdWItPmFvX2NvdW50ZXIgPSB0aGlzX3VzYmR1eHN1Yi0+YW9fdGltZXI7CiAKLQkJLyogaGFuZGxlIG5vbiBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCQkvKiBoYW5kbGUgbm9uIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwogCQlpZiAoISh0aGlzX3VzYmR1eHN1Yi0+YW9fY29udGlub3VzKSkgewogCQkJLyogZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAkJCXRoaXNfdXNiZHV4c3ViLT5hb19zYW1wbGVfY291bnQtLTsKQEAgLTk1Nyw3ICs5NTcsNyBAQAogCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKIAkJZXJyKys7CiAKLQkvKiBzY2FubmluZyBpcyBjb250aW5vdXMgKi8KKwkvKiBzY2FubmluZyBpcyBjb250aW51b3VzICovCiAJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKIAljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOwogCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAJCXVwKCZ0aGlzX3VzYmR1eHN1Yi0+c2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLyogc2V0IGN1cnJlbnQgY2hhbm5lbCBvZiB0aGUgcnVubmluZyBhcXVpc2l0aW9uIHRvIHplcm8gKi8KKwkvKiBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFjcXVpc2l0aW9uIHRvIHplcm8gKi8KIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCiAJdGhpc191c2JkdXhzdWItPmR1eF9jb21tYW5kc1sxXSA9IGNtZC0+Y2hhbmxpc3RfbGVuOwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIAkJdGhpc191c2JkdXhzdWItPmFpX3NhbXBsZV9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CiAJCXRoaXNfdXNiZHV4c3ViLT5haV9jb250aW5vdXMgPSAwOwogCX0gZWxzZSB7Ci0JCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJCS8qIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwogCQl0aGlzX3VzYmR1eHN1Yi0+YWlfY29udGlub3VzID0gMTsKIAkJdGhpc191c2JkdXhzdWItPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJfQpAQCAtMTUxNSw3ICsxNTE1LDcgQEAKIAkvKiBqdXN0IG5vdyB3ZSBzY2FuIGFsc28gaW4gdGhlIGhpZ2ggc3BlZWQgbW9kZSBldmVyeSBmcmFtZSAqLwogCS8qIHRoaXMgaXMgZHVlIHRvIGVoY2kgZHJpdmVyIGxpbWl0YXRpb25zICovCiAJaWYgKDApIHsJCS8qICh0aGlzX3VzYmR1eHN1Yi0+aGlnaF9zcGVlZCkgKi8KLQkJLyogc3RhcnQgaW1taWRpYXRlbHkgYSBuZXcgc2NhbiAqLworCQkvKiBzdGFydCBpbW1lZGlhdGVseSBhIG5ldyBzY2FuICovCiAJCS8qIHRoZSBzYW1wbGluZyByYXRlIGlzIHNldCBieSB0aGUgY292ZXJzaW9uIHJhdGUgKi8KIAkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKIAl9IGVsc2UgewpAQCAtMTUyNSw3ICsxNTI1LDcgQEAKIAlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCiAJCWVycisrOwogCi0JLyogc2Nhbm5pbmcgaXMgY29udGlub3VzICovCisJLyogc2Nhbm5pbmcgaXMgY29udGludW91cyAqLwogCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CiAJLyogd2UgYWx3YXlzIG91dHB1dCBhdCAxa0h6IGp1c3Qgbm93IGFsbCBjaGFubmVscyBhdCBvbmNlICovCiAJaWYgKDApIHsJCS8qICh0aGlzX3VzYmR1eHN1Yi0+aGlnaF9zcGVlZCkgKi8KQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJZGV2X2RiZygmdGhpc191c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAogCQkiY29tZWRpJWQ6ICVzXG4iLCBkZXYtPm1pbm9yLCBfX2Z1bmNfXyk7CiAKLQkvKiBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFxdWlzaXRpb24gdG8gemVybyAqLworCS8qIHNldCBjdXJyZW50IGNoYW5uZWwgb2YgdGhlIHJ1bm5pbmcgYWNxdWlzaXRpb24gdG8gemVybyAqLwogCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyArK2kpIHsKIAkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogCXRoaXNfdXNiZHV4c3ViLT5hb19jb3VudGVyID0gdGhpc191c2JkdXhzdWItPmFvX3RpbWVyOwogCiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewotCQkvKiBub3QgY29udGlub3VzICovCisJCS8qIG5vdCBjb250aW51b3VzICovCiAJCS8qIGNvdW50ZXIgKi8KIAkJLyogaGlnaCBzcGVlZCBhbHNvIHNjYW5zIGV2ZXJ5dGhpbmcgYXQgb25jZSAqLwogCQlpZiAoMCkgewkvKiAodGhpc191c2JkdXhzdWItPmhpZ2hfc3BlZWQpICovCkBAIC0xNzA4LDcgKzE3MDgsNyBAQAogCQl9CiAJCXRoaXNfdXNiZHV4c3ViLT5hb19jb250aW5vdXMgPSAwOwogCX0gZWxzZSB7Ci0JCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJCS8qIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwogCQl0aGlzX3VzYmR1eHN1Yi0+YW9fY29udGlub3VzID0gMTsKIAkJdGhpc191c2JkdXhzdWItPmFvX3NhbXBsZV9jb3VudCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKaW5kZXggNWIxNWU2ZC4uMmE4ZTcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAkvKiBjb21lZGkgZGV2aWNlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRleHQgKi8KIAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqY29tZWRpZGV2OwogCXNob3J0IGludCBhaV9jbWRfcnVubmluZzsJLyogYXN5bmNocm9ub3VzIGNvbW1hbmQgaXMgcnVubmluZyAqLwotCXNob3J0IGludCBhaV9jb250aW5vdXM7CS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJc2hvcnQgaW50IGFpX2NvbnRpbm91czsJLyogY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJbG9uZyBpbnQgYWlfc2FtcGxlX2NvdW50OwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBhY3F1aXJlICovCiAJdWludDhfdCAqZHV4X2NvbW1hbmRzOwkvKiBjb21tYW5kcyAqLwogCWludCBpZ25vcmU7CQkvKiBjb3VudGVyIHdoaWNoIGlnbm9yZXMgdGhlIGZpcnN0CkBAIC0zOTIsNyArMzkyLDcgQEAKIAlwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJaWYgKCF1ZGZzLT5pZ25vcmUpIHsKIAkJaWYgKCF1ZGZzLT5haV9jb250aW5vdXMpIHsKLQkJCS8qIG5vdCBjb250aW5vdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCisJCQkvKiBub3QgY29udGludW91cywgZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAkJCW4gPSB1cmItPmFjdHVhbF9sZW5ndGggLyBzaXplb2YodWludDE2X3QpOwogCQkJaWYgKHVubGlrZWx5KHVkZnMtPmFpX3NhbXBsZV9jb3VudCA8IG4pKSB7CiAJCQkJLyoKQEAgLTc3NSw3ICs3NzUsNyBAQAogCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLyogc2V0IGN1cnJlbnQgY2hhbm5lbCBvZiB0aGUgcnVubmluZyBhcXVpc2l0aW9uIHRvIHplcm8gKi8KKwkvKiBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFjcXVpc2l0aW9uIHRvIHplcm8gKi8KIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCiAJLyoKQEAgLTExODIsNyArMTE4Miw3IEBACiAJCX0KIAkJdWRmcy0+YWlfY29udGlub3VzID0gMDsKIAl9IGVsc2UgewotCQkvKiBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCQkvKiBjb250aW5vdXMgYWNxdWlzaXRpb24gKi8KIAkJdWRmcy0+YWlfY29udGlub3VzID0gMTsKIAkJdWRmcy0+YWlfc2FtcGxlX2NvdW50ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3B0bTEyMTcvY2xlYXJwYWRfdG0xMjE3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3B0bTEyMTcvY2xlYXJwYWRfdG0xMjE3LmMKaW5kZXggNzZlNGI3OC4uMGZlNzEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NwdG0xMjE3L2NsZWFycGFkX3RtMTIxNy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcHRtMTIxNy9jbGVhcnBhZF90bTEyMTcuYwpAQCAtNTIsNyArNTIsNyBAQAogI2RlZmluZSBUTUExMjE3X0RFVl9TVEFUVVMJCTB4MTMJLyogRGV2aWNlIFN0YXR1cyAqLwogI2RlZmluZSBUTUExMjE3X0lOVF9TVEFUVVMJCTB4MTQJLyogSW50ZXJydXB0IFN0YXR1cyAqLwogCi0vKiBDb250cm9sbGVyIGNhbiBkZXRlY3QgdXB0byAyIHBvc3NpYmxlIGZpbmdlciB0b3VjaGVzLgorLyogQ29udHJvbGxlciBjYW4gZGV0ZWN0IHVwIHRvIDIgcG9zc2libGUgZmluZ2VyIHRvdWNoZXMuCiAgKiBFYWNoIGZpbmdlciB0b3VjaCBwcm92aWRlcyAgMTIgYml0IFggWSBjby1vcmRpbmF0ZXMsIHRoZSB2YWx1ZXMgYXJlIHNwbGl0CiAgKiBhY3Jvc3MgMiByZWdpc3RlcnMsIGFuZCBhbiA4IGJpdCAgWiB2YWx1ZSAqLwogI2RlZmluZSBUTUExMjE3X0ZJTkdFUl9TVEFURQkJMHgxOCAvKiBGaW5nZXIgU3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuYwppbmRleCAxNDI5NjA4NS4uMzczNWVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfY21kcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuYwpAQCAtOTE0LDcgKzkxNCw3IEBACiAgKiBSZXR1cm46CiAgKglzdGF0dXMKICAqCi0gKiBDbG9zZXIgYXBsaWNhdGlvbiBoYW5kbGUgYW5kIHJlbGVhc2UgYXBwIHNwZWNpZmljCisgKiBDbG9zZXIgYXBwbGljYXRpb24gaGFuZGxlIGFuZCByZWxlYXNlIGFwcCBzcGVjaWZpYwogICogcmVzb3VyY2VzLgogICovCiBlbnVtIEJDX1NUQVRVUyBjcnlzdGFsaGRfdXNlcl9jbG9zZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2h3LmMKaW5kZXggMTNhNTE0ZC4uNWFjZjM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9ody5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAljcnlzdGFsaGRfZW5hYmxlX2ludGVycnVwdHMoYWRwKTsKIAogCS8qIEVuYWJsZSB0aGUgb3B0aW9uIGZvciBnZXR0aW5nIHRoZSB0b3RhbCBuby4gb2YgRFdPUkRTCi0JICogdGhhdCBoYXZlIGJlZW4gdHJhbnNmZXJlZCBieSB0aGUgUlhETUEgZW5naW5lCisJICogdGhhdCBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgYnkgdGhlIFJYRE1BIGVuZ2luZQogCSAqLwogCWRiZ19vcHRpb25zID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MxX0RNQV9ERUJVR19PUFRJT05TX1JFRyk7CiAJZGJnX29wdGlvbnMgfD0gMHgxMDsKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAJCXJldHVybiBzdHM7CiAJfQogCi0JLypHZXQgdGhlIFJlc3BvbmNlIEFkZHJlc3MqLworCS8qR2V0IHRoZSBSZXNwb25zZSBBZGRyZXNzKi8KIAljbWRfcmVzX2FkZHIgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIENwdTJIc3RNYngxKTsKIAogCS8qUmVhZCB0aGUgUmVzcG9uc2UqLwpAQCAtMjM2Nyw3ICsyMzY3LDcgQEAKIAlCQ01MT0coQkNNTE9HX0lORk8sICJjbG9jayBpcyBtb3ZpbmcgdG8gJWQgd2l0aCBuICVkIHdpdGggdmNvX21nICVkXG4iLAogCSAgICAgICBody0+Y29yZV9jbG9ja19taHosIG4sIHZjb19tZyk7CiAKLQkvKiBDaGFuZ2UgdGhlIERSQU0gcmVmcmVzaCByYXRlIHRvIGFjY29tb2RhdGUgdGhlIG5ldyBmcmVxdWVuY3kgKi8KKwkvKiBDaGFuZ2UgdGhlIERSQU0gcmVmcmVzaCByYXRlIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgZnJlcXVlbmN5ICovCiAJLyogcmVmcmVzaCByZWcgPSAoKHJlZnJlc2hfcmF0ZSAqIGNsb2NrX3JhdGUpLzE2KSAtIDE7IHJvdW5kaW5nIHVwKi8KIAlyZWZyZXNoX3JlZyA9ICg3ICogaHctPmNvcmVfY2xvY2tfbWh6IC8gMTYpOwogCWJjX2RlY19yZWdfd3IoaHctPmFkcCwgU0RSQU1fUkVGX1BBUkFNLCAoKDEgPDwgMTIpIHwgcmVmcmVzaF9yZWcpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5jCmluZGV4IGYyNzRjNzcuLjVjYzM0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuYwpAQCAtMTQ1NSw3ICsxNDU1LDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBJZiB0aGUgZGVzY3JpcHRvciBoYXMgbm90IHJlY292ZXJlZCwgdGhlbiBsZWF2aW5nIHRoZSBFTVBUWQogICAgICAgICAgICAgICogZW50cnkgc2V0IHdpbGwgbm90IHNpZ25hbCB0byB0aGUgTVVTWUNDIHRoYXQgdGhpcyBkZXNjcmlwdG9yCi0gICAgICAgICAgICAgKiBoYXMgYmVlbiBzZXJ2aWNlZC4gVGhlIEludGVycnVwdCBRdWV1ZSBjYW4gdGhlbiBzdGFydCBsb29zaW5nCisgICAgICAgICAgICAgKiBoYXMgYmVlbiBzZXJ2aWNlZC4gVGhlIEludGVycnVwdCBRdWV1ZSBjYW4gdGhlbiBzdGFydCBsb3NpbmcKICAgICAgICAgICAgICAqIGF2YWlsYWJsZSBkZXNjcmlwdG9ycyBhbmQgTVVTWUNDIGV2ZW50dWFsbHkgZW5jb3VudGVycyBhbmQKICAgICAgICAgICAgICAqIHJlcG9ydHMgdGhlIElOVEZVTEwgY29uZGl0aW9uLiAgUGVyIG1hbnVhbCwgY2hhbmdpbmcgYW55IGJpdAogICAgICAgICAgICAgICogbWFya3MgZGVzY3JpcHRvciBhcyBhdmFpbGFibGUsIHRodXMgdGhlIHVzZSBvZiBkaWZmZXJlbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmggYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5oCmluZGV4IGQyYzkxZWYuLjY4ZjM2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuaApAQCAtNzQsNyArNzQsNyBAQAogCiAjZGVmaW5lIElOVF9RVUVVRV9TSVpFICAgIE1VU1lDQ19OSVFECiAKLS8qIFJBTSBpbWFnZSBvZiBNVVNZQ0MgcmVnaXN0ZXJzIGxheWVkIG91dCBhcyBhIEMgc3RydWN0dXJlICovCisvKiBSQU0gaW1hZ2Ugb2YgTVVTWUNDIHJlZ2lzdGVycyBsYWlkIG91dCBhcyBhIEMgc3RydWN0dXJlICovCiAgICAgc3RydWN0IG11c3ljY19ncm91cHIKICAgICB7CiAgICAgICAgIFZJTlQzMiAgICAgIHRocFszMl07ICAgIC8qIFRyYW5zbWl0IEhlYWQgUG9pbnRlciBbNS0yOV0gICAgICAgICAgICovCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgIFZJTlQzMiAgICAgIHBjZDsgICAgICAgIC8qIFBvcnQgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yIFs1LTE5XSAgICovCiAgICAgfTsKIAotLyogaGFyZHdhcmUgTVVTWUNDIHJlZ2lzdGVycyBsYXllZCBvdXQgYXMgYSBDIHN0cnVjdHVyZSAqLworLyogaGFyZHdhcmUgTVVTWUNDIHJlZ2lzdGVycyBsYWlkIG91dCBhcyBhIEMgc3RydWN0dXJlICovCiAgICAgc3RydWN0IG11c3ljY19nbG9iYWxyCiAgICAgewogICAgICAgICBWSU5UMzIgICAgICBnYnA7ICAgICAgICAvKiBHcm91cCBCYXNlIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2RlZnMuaAppbmRleCAxODYzNDdiLi5hMzk1MDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2RlZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2RlZnMuaApAQCAtNTQsOCArNTQsOCBAQAogI2RlZmluZSBNVVNZQ0NfTVRVICAgICAgICAgIDIwNDggIC8qIGRlZmF1bHQgKi8KICNkZWZpbmUgTVVTWUNDX1RYREVTQ19NSU4gICAxMCAgICAvKiBIRExDIG1vZGUgZGVmYXVsdCAqLwogI2RlZmluZSBNVVNZQ0NfUlhERVNDX01JTiAgIDE4ICAgIC8qIEhETEMgbW9kZSBkZWZhdWx0ICovCi0jZGVmaW5lIE1VU1lDQ19UWERFU0NfVFJBTlMgNCAgICAgLyogVHJhbnNwYXJlbnQgbW9kZSBtaW51bXVtICMgb2YgVFggZGVzY3JpcHRvcnMgKi8KLSNkZWZpbmUgTVVTWUNDX1JYREVTQ19UUkFOUyAxMiAgICAvKiBUcmFuc3BhcmVudCBtb2RlIG1pbnVtdW0gIyBvZiBSWCBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBNVVNZQ0NfVFhERVNDX1RSQU5TIDQgICAgIC8qIFRyYW5zcGFyZW50IG1vZGUgbWluaW11bSAjIG9mIFRYIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIE1VU1lDQ19SWERFU0NfVFJBTlMgMTIgICAgLyogVHJhbnNwYXJlbnQgbW9kZSBtaW5pbXVtICMgb2YgUlggZGVzY3JpcHRvcnMgKi8KIAogI2RlZmluZSBNQVhfREVGQVVMVF9JRlFMRU4gIDMyICAgIC8qIG5ldHdvcmsgcWxlbiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZWNyYy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjcmMuYwppbmRleCA1MTIzMjk0Li4zZjNjZDYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjcmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZWNyYy5jCkBAIC05NSw3ICs5NSw3IEBACiAKICAgICAvKgogICAgICAqIGlmIHRhYmxlIG5vdCB5ZXQgY3JlYXRlZCwgZG8gc28uIERvbid0IGNhcmUgYWJvdXQgImV4dHJhIiB0aW1lCi0gICAgICogY2hlY2tpbmcgdGhpcyBldmVyeXRpbWUgc2JlQ3JjKCkgaXMgY2FsbGVkLCBzaW5jZSBDUkMgY2FsY3VsYXRpb25zIGFyZQorICAgICAqIGNoZWNraW5nIHRoaXMgZXZlcnkgdGltZSBzYmVDcmMoKSBpcyBjYWxsZWQsIHNpbmNlIENSQyBjYWxjdWxhdGlvbnMgYXJlCiAgICAgICogYWxyZWFkeSB0aW1lIGNvbnN1bWluZwogICAgICAqLwogICAgIGlmICghY3JjVGFibGVJbml0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVwcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZXByb2MuYwppbmRleCA3MGI5YjMzLi5mNDI1MzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZXByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZXByb2MuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICovCiAKICNpZiAxCi0gICAgLyogIzQgLSBpbnRlcHJldGF0aW9uIG9mIGFib3ZlID0gc2V0IEVPRiwgcmV0dXJuIGxlbiAqLworICAgIC8qICM0IC0gaW50ZXJwcmV0YXRpb24gb2YgYWJvdmUgPSBzZXQgRU9GLCByZXR1cm4gbGVuICovCiAgICAgKmVvZiA9IDE7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKaW5kZXggZTZjOGNiMy4uNDI1ZTkyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCkBAIC04NTYsNyArODU2LDcgQEAKICAqLwogCiAvKgotICogc3RydWN0dXJlIGZvciBzcGFjZSBhdmFpbGlhYmxlIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KKyAqIHN0cnVjdHVyZSBmb3Igc3BhY2UgYXZhaWxhYmxlIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTQKICAqCiAgKiAzMS0xNzogcmVzZXJ2ZWQKQEAgLTEwMzEsNyArMTAzMSw3IEBACiAgKiAzMTogcmVzZXQgTUlJIG1nbXQKICAqIDMwLTY6IHVudXNlZAogICogNTogc2NhbiBhdXRvIGluY3JlbWVudAotICogNDogcHJlYW1ibGUgc3VwcmVzcworICogNDogcHJlYW1ibGUgc3VwcHJlc3MKICAqIDM6IHVuZGVmaW5lZAogICogMi0wOiBtZ210IGNsb2NrIHJlc2V0CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmgKaW5kZXggNzgzNDlhZC4uOTQ2YzBjNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCkBAIC00NjgsNyArNDY4LDcgQEAKICNkZWZpbmUgVFJVRVBIWV9BTkVHX0NPTVBMRVRFICAgICAgICAgICAxCiAjZGVmaW5lIFRSVUVQSFlfQU5FR19ESVNBQkxFRCAgICAgICAgICAgMgogCi0vKiBEZWZpbmUgZHVwbGV4IGFkdmVydGlzbWVudCBmbGFncyAqLworLyogRGVmaW5lIGR1cGxleCBhZHZlcnRpc2VtZW50IGZsYWdzICovCiAjZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9OT05FICAgICAgICAgMHgwMAogI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCAgICAgICAgIDB4MDEKICNkZWZpbmUgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEYgICAgICAgICAweDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwppbmRleCAzMzkxMzZmLi5mYzZiZDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCSAqIG51bWJlciBvZiBlbnRyaWVzIGluIEZCUjEuCiAJICoKIAkgKiBGQlIxIGhvbGRzICJsYXJnZSIgZnJhbWVzLCBGQlIwIGhvbGRzICJzbWFsbCIgZnJhbWVzLiAgSWYgRkJSMQotCSAqIGVudHJpZXMgYXJlIGh1Z2UgaW4gb3JkZXIgdG8gYWNjb21vZGF0ZSBhICJqdW1ibyIgZnJhbWUsIHRoZW4gaXQKKwkgKiBlbnRyaWVzIGFyZSBodWdlIGluIG9yZGVyIHRvIGFjY29tbW9kYXRlIGEgImp1bWJvIiBmcmFtZSwgdGhlbiBpdAogCSAqIHdpbGwgaGF2ZSBsZXNzIGVudHJpZXMuICBDb252ZXJzZWx5LCBGQlIxIHdpbGwgbm93IGJlIHJlbGllZCB1cG9uCiAJICogdG8gY2FycnkgbW9yZSAibm9ybWFsIiBmcmFtZXMsIHRodXMgaXQncyBlbnRyeSBzaXplIGFsc28gaW5jcmVhc2VzCiAJICogYW5kIHRoZSBudW1iZXIgb2YgZW50cmllcyBnb2VzIHVwIHRvbyAoc2luY2UgaXQgbm93IGNhcnJpZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKaW5kZXggY2U0ZDkzMC4uZjcxNmU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCQkvKiBIYW5kbGUgU0xWIFRpbWVvdXQgSW50ZXJydXB0ICovCiAJCWlmIChzdGF0dXMgJiBFVF9JTlRSX1NMVl9USU1FT1VUKSB7CiAJCQkvKgotCQkJICogVGhpcyBtZWFucyBhIHRpbWVvdXQgaGFzIG9jY3VyZWQgb24gYSByZWFkIG9yCisJCQkgKiBUaGlzIG1lYW5zIGEgdGltZW91dCBoYXMgb2NjdXJyZWQgb24gYSByZWFkIG9yCiAJCQkgKiB3cml0ZSByZXF1ZXN0IHRvIG9uZSBvZiB0aGUgSkFHQ29yZSByZWdpc3RlcnMuIFRoZQogCQkJICogR2xvYmFsIFJlc291cmNlcyBibG9jayBoYXMgdGVybWluYXRlZCB0aGUgcmVxdWVzdAogCQkJICogYW5kIG9uIGEgcmVhZCByZXF1ZXN0LCByZXR1cm5lZCBhICJmYWtlIiB2YWx1ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKaW5kZXggMGMyOThjYS4uYjI1YmFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCSAqLwogCVBhY2tldEZpbHRlciA9IGFkYXB0ZXItPlBhY2tldEZpbHRlcjsKIAotCS8qIENsZWFyIHRoZSAnbXVsdGljYXN0JyBmbGFnIGxvY2FsbHk7IGJlY3Vhc2Ugd2Ugb25seSBoYXZlIGEgc2luZ2xlCisJLyogQ2xlYXIgdGhlICdtdWx0aWNhc3QnIGZsYWcgbG9jYWxseTsgYmVjYXVzZSB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUKIAkgKiBmbGFnIHRvIGNoZWNrIG11bHRpY2FzdCwgYW5kIG11bHRpcGxlIG11bHRpY2FzdCBhZGRyZXNzZXMgY2FuIGJlCiAJICogc2V0LCB0aGlzIGlzIHRoZSBlYXNpZXN0IHdheSB0byBkZXRlcm1pbmUgaWYgbW9yZSB0aGFuIG9uZQogCSAqIG11bHRpY2FzdCBhZGRyZXNzIGlzIGJlaW5nIHNldC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2Rldi5oCmluZGV4IDRhODliZDEuLjBiNjNmMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9kZXYuaApAQCAtMzAsNyArMzAsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVhZF9yZWcKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIEFTSUMgcmVnaXN0ZXIuCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gQVNJQyByZWdpc3Rlci4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKIC8vICAgICBvZmZzZXQgLSBBU0lDIHJlZ2lzdGVyIG9mZnNldApAQCAtNDksNyArNDksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfd3JpdGVfcmVnCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBBU0lDIHJlZ2lzdGVyLgorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHZhbHVlIGZvciBhIGdpdmVuIEFTSUMgcmVnaXN0ZXIuCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyAgICAgb2Zmc2V0IC0gQVNJQyByZWdpc3RlciBvZmZzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfZG5sZC5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9kbmxkLmMKaW5kZXggYjA3MjlmYy4uZmIzNzVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9kbmxkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9kbmxkLmMKQEAgLTk1LDQ3ICs5NSw0NyBAQAogVVNIT1JUIGhkcl9jaGVja3N1bShQUFNFVURPX0hEUiBwSGRyKTsKIAogdHlwZWRlZiBzdHJ1Y3QgX0RTUF9GSUxFX0hEUiB7Ci0JbG9uZyBidWlsZF9kYXRlOwotCWxvbmcgZHNwX2NvZmZfZGF0ZTsKLQlsb25nIGxvYWRlcl9jb2RlX2FkZHJlc3M7Ci0JbG9uZyBsb2FkZXJfY29kZV9zaXplOwotCWxvbmcgbG9hZGVyX2NvZGVfZW5kOwotCWxvbmcgZHNwX2NvZGVfYWRkcmVzczsKLQlsb25nIGRzcF9jb2RlX3NpemU7Ci0JbG9uZyBkc3BfY29kZV9lbmQ7Ci0JbG9uZyByZXNlcnZlZFs4XTsKKwl1MzIgIGJ1aWxkX2RhdGU7CisJdTMyICBkc3BfY29mZl9kYXRlOworCXUzMiAgbG9hZGVyX2NvZGVfYWRkcmVzczsKKwl1MzIgIGxvYWRlcl9jb2RlX3NpemU7CisJdTMyICBsb2FkZXJfY29kZV9lbmQ7CisJdTMyICBkc3BfY29kZV9hZGRyZXNzOworCXUzMiAgZHNwX2NvZGVfc2l6ZTsKKwl1MzIgIGRzcF9jb2RlX2VuZDsKKwl1MzIgIHJlc2VydmVkWzhdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgRFNQX0ZJTEVfSERSLCAqUERTUF9GSUxFX0hEUjsKIAogdHlwZWRlZiBzdHJ1Y3QgX0RTUF9GSUxFX0hEUl81IHsKLQlsb25nIHZlcnNpb25faWQ7CS8vIFZlcnNpb24gSUQgb2YgdGhpcyBpbWFnZSBmb3JtYXQuCi0JbG9uZyBwYWNrYWdlX2lkOwkvLyBQYWNrYWdlIElEIG9mIGNvZGUgcmVsZWFzZS4KLQlsb25nIGJ1aWxkX2RhdGU7CS8vIERhdGUvdGltZSBzdGFtcCB3aGVuIGZpbGUgd2FzIGJ1aWx0LgotCWxvbmcgY29tbWFuZHNfb2Zmc2V0OwkvLyBPZmZzZXQgdG8gYXR0YWNoZWQgY29tbWFuZHMgaW4gUHNldWRvIEhkciBmb3JtYXQuCi0JbG9uZyBsb2FkZXJfb2Zmc2V0OwkvLyBPZmZzZXQgdG8gYm9vdGxvYWRlciBjb2RlLgotCWxvbmcgbG9hZGVyX2NvZGVfYWRkcmVzczsJLy8gU3RhcnQgYWRkcmVzcyBvZiBib290bG9hZGVyLgotCWxvbmcgbG9hZGVyX2NvZGVfZW5kOwkvLyBXaGVyZSBib290bG9hZGVyIGNvZGUgZW5kcy4KLQlsb25nIGxvYWRlcl9jb2RlX3NpemU7Ci0JbG9uZyB2ZXJzaW9uX2RhdGFfb2Zmc2V0OwkvLyBPZmZzZXQgd2VyZSBzY3JhbWJsZWQgdmVyc2lvbiBkYXRhIGJlZ2lucy4KLQlsb25nIHZlcnNpb25fZGF0YV9zaXplOwkvLyBTaXplLCBpbiB3b3Jkcywgb2Ygc2NyYW1ibGVkIHZlcnNpb24gZGF0YS4KLQlsb25nIG5Ec3BJbWFnZXM7CS8vIE51bWJlciBvZiBEU1AgaW1hZ2VzIGluIGZpbGUuCisJdTMyICB2ZXJzaW9uX2lkOwkvLyBWZXJzaW9uIElEIG9mIHRoaXMgaW1hZ2UgZm9ybWF0LgorCXUzMiAgcGFja2FnZV9pZDsJLy8gUGFja2FnZSBJRCBvZiBjb2RlIHJlbGVhc2UuCisJdTMyICBidWlsZF9kYXRlOwkvLyBEYXRlL3RpbWUgc3RhbXAgd2hlbiBmaWxlIHdhcyBidWlsdC4KKwl1MzIgIGNvbW1hbmRzX29mZnNldDsJLy8gT2Zmc2V0IHRvIGF0dGFjaGVkIGNvbW1hbmRzIGluIFBzZXVkbyBIZHIgZm9ybWF0LgorCXUzMiAgbG9hZGVyX29mZnNldDsJLy8gT2Zmc2V0IHRvIGJvb3Rsb2FkZXIgY29kZS4KKwl1MzIgIGxvYWRlcl9jb2RlX2FkZHJlc3M7CS8vIFN0YXJ0IGFkZHJlc3Mgb2YgYm9vdGxvYWRlci4KKwl1MzIgIGxvYWRlcl9jb2RlX2VuZDsJLy8gV2hlcmUgYm9vdGxvYWRlciBjb2RlIGVuZHMuCisJdTMyICBsb2FkZXJfY29kZV9zaXplOworCXUzMiAgdmVyc2lvbl9kYXRhX29mZnNldDsJLy8gT2Zmc2V0IHdlcmUgc2NyYW1ibGVkIHZlcnNpb24gZGF0YSBiZWdpbnMuCisJdTMyICB2ZXJzaW9uX2RhdGFfc2l6ZTsJLy8gU2l6ZSwgaW4gd29yZHMsIG9mIHNjcmFtYmxlZCB2ZXJzaW9uIGRhdGEuCisJdTMyICBuRHNwSW1hZ2VzOwkvLyBOdW1iZXIgb2YgRFNQIGltYWdlcyBpbiBmaWxlLgogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgRFNQX0ZJTEVfSERSXzUsICpQRFNQX0ZJTEVfSERSXzU7CiAKIHR5cGVkZWYgc3RydWN0IF9EU1BfSU1BR0VfSU5GTyB7Ci0JbG9uZyBjb2ZmX2RhdGU7CQkvLyBEYXRlL3RpbWUgd2hlbiBEU1AgQ29mZiBpbWFnZSB3YXMgYnVpbHQuCi0JbG9uZyBiZWdpbl9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KLQlsb25nIGVuZF9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KLQlsb25nIHJ1bl9hZGRyZXNzOwkvLyBPbiBjaGlwIFN0YXJ0IGFkZHJlc3Mgb2YgRFNQIGNvZGUuCi0JbG9uZyBpbWFnZV9zaXplOwkvLyBTaXplIG9mIGltYWdlLgotCWxvbmcgdmVyc2lvbjsJCS8vIEVtYmVkZGVkIHZlcnNpb24gIyBvZiBEU1AgY29kZS4KKwl1MzIgIGNvZmZfZGF0ZTsJCS8vIERhdGUvdGltZSB3aGVuIERTUCBDb2ZmIGltYWdlIHdhcyBidWlsdC4KKwl1MzIgIGJlZ2luX29mZnNldDsJLy8gT2Zmc2V0IGluIGZpbGUgd2hlcmUgaW1hZ2UgYmVnaW5zLgorCXUzMiAgZW5kX29mZnNldDsJLy8gT2Zmc2V0IGluIGZpbGUgd2hlcmUgaW1hZ2UgYmVnaW5zLgorCXUzMiAgcnVuX2FkZHJlc3M7CS8vIE9uIGNoaXAgU3RhcnQgYWRkcmVzcyBvZiBEU1AgY29kZS4KKwl1MzIgIGltYWdlX3NpemU7CS8vIFNpemUgb2YgaW1hZ2UuCisJdTMyICB2ZXJzaW9uOwkJLy8gRW1iZWRkZWQgdmVyc2lvbiAjIG9mIERTUCBjb2RlLgogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgRFNQX0lNQUdFX0lORk8sICpQRFNQX0lNQUdFX0lORk87CiAKIHR5cGVkZWYgc3RydWN0IF9EU1BfSU1BR0VfSU5GT19WNiB7Ci0JbG9uZyBjb2ZmX2RhdGU7CQkvLyBEYXRlL3RpbWUgd2hlbiBEU1AgQ29mZiBpbWFnZSB3YXMgYnVpbHQuCi0JbG9uZyBiZWdpbl9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KLQlsb25nIGVuZF9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KLQlsb25nIHJ1bl9hZGRyZXNzOwkvLyBPbiBjaGlwIFN0YXJ0IGFkZHJlc3Mgb2YgRFNQIGNvZGUuCi0JbG9uZyBpbWFnZV9zaXplOwkvLyBTaXplIG9mIGltYWdlLgotCWxvbmcgdmVyc2lvbjsJCS8vIEVtYmVkZGVkIHZlcnNpb24gIyBvZiBEU1AgY29kZS4KKwl1MzIgIGNvZmZfZGF0ZTsJCS8vIERhdGUvdGltZSB3aGVuIERTUCBDb2ZmIGltYWdlIHdhcyBidWlsdC4KKwl1MzIgIGJlZ2luX29mZnNldDsJLy8gT2Zmc2V0IGluIGZpbGUgd2hlcmUgaW1hZ2UgYmVnaW5zLgorCXUzMiAgZW5kX29mZnNldDsJLy8gT2Zmc2V0IGluIGZpbGUgd2hlcmUgaW1hZ2UgYmVnaW5zLgorCXUzMiAgcnVuX2FkZHJlc3M7CS8vIE9uIGNoaXAgU3RhcnQgYWRkcmVzcyBvZiBEU1AgY29kZS4KKwl1MzIgIGltYWdlX3NpemU7CS8vIFNpemUgb2YgaW1hZ2UuCisJdTMyICB2ZXJzaW9uOwkJLy8gRW1iZWRkZWQgdmVyc2lvbiAjIG9mIERTUCBjb2RlLgogCXVuc2lnbmVkIHNob3J0IGNoZWNrc3VtOwkvLyBEc3AgRmlsZSBjaGVja3N1bQogCXVuc2lnbmVkIHNob3J0IHBhZDE7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBEU1BfSU1BR0VfSU5GT19WNiwgKlBEU1BfSU1BR0VfSU5GT19WNjsKQEAgLTg0Niw4ICs4NDYsOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBTVEFURV9ET05FX0RXTkxEOgotCQkJaWYgKCgoVUlOVCkgKHBVY0ZpbGUpIC0gKFVJTlQpIHBGaWxlU3RhcnQpID49Ci0JCQkJKFVJTlQpIEZpbGVMZW5ndGgpIHsKKwkJCWlmICgoKHVuc2lnbmVkIGxvbmcpIChwVWNGaWxlKSAtICh1bnNpZ25lZCBsb25nKSBwRmlsZVN0YXJ0KSA+PQorCQkJCSh1bnNpZ25lZCBsb25nKSBGaWxlTGVuZ3RoKSB7CiAJCQkJdWlTdGF0ZSA9IFNUQVRFX0RPTkVfRklMRTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTkwMSwxMSArOTAxLDExIEBACiAJCQkJCQkJCSAgJmluZm8tPnByb3ZfbGlzdCk7CiAJCQkJCQkvLyBNb3ZlIHRvIG5leHQgZW50cnkgaWYgYXZhaWxhYmxlCiAJCQkJCQlwVWNGaWxlID0KLQkJCQkJCQkoVUNIQVIgKikgKChVSU5UKSBwVWNGaWxlICsKLQkJCQkJCQkJICAgKFVJTlQpICgodXNIZHJMZW5ndGggKyAxKSAmIDB4RkZGRkZGRkUpICsgc2l6ZW9mKFBTRVVET19IRFIpKTsKLQkJCQkJCWlmICgoVUlOVCkgKHBVY0ZpbGUpIC0KLQkJCQkJCQkoVUlOVCkgKHBGaWxlU3RhcnQpID49Ci0JCQkJCQkJKFVJTlQpIEZpbGVMZW5ndGgpIHsKKwkJCQkJCQkoVUNIQVIgKikgKCh1bnNpZ25lZCBsb25nKSBwVWNGaWxlICsKKwkJCQkJCQkJICAgKHVuc2lnbmVkIGxvbmcpICgodXNIZHJMZW5ndGggKyAxKSAmIDB4RkZGRkZGRkUpICsgc2l6ZW9mKFBTRVVET19IRFIpKTsKKwkJCQkJCWlmICgodW5zaWduZWQgbG9uZykgKHBVY0ZpbGUpIC0KKwkJCQkJCQkodW5zaWduZWQgbG9uZykgKHBGaWxlU3RhcnQpID49CisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpIEZpbGVMZW5ndGgpIHsKIAkJCQkJCQl1aVN0YXRlID0KIAkJCQkJCQkJU1RBVEVfRE9ORV9GSUxFOwogCQkJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9ody5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9ody5jCmluZGV4IGZmNjkxZDkuLjgzMDgyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfaHcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2h3LmMKQEAgLTkwLDcgKzkwLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX2FzaWNfcmVhZAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmljIEFTSUMKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWMgQVNJQwogLy8gICAgICAgICAgICAgcmVnaXN0ZXIuCiAvLyBJbnB1dDoKIC8vICAgIGRldiAtIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTA3LDcgKzEwNyw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9hc2ljX3dyaXRlCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmljIEFTSUMKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmljIEFTSUMKIC8vICAgICAgICAgICAgIHJlZ2lzdGVyLgogLy8gSW5wdXQ6CiAvLyAgICBkZXYgLSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEyNCw3ICsxMjQsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVhZF9maWZvX2xlbgotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIEFTSUMgVXBsaW5rIEZJRk8gc3RhdHVzIHJlZ2lzdGVyCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIEFTSUMgVXBsaW5rIEZJRk8gc3RhdHVzIHJlZ2lzdGVyCiAvLyAgICAgICAgICAgICB3aGljaCB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgVXBsaW5rIEZJRk8uCiAvLyAgICAgICAgICAgICBTaXh0ZWVuIGJ5dGVzIGFyZSBzdWJ0cmFjdGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBBU0lDIGRvZXMgbm90CiAvLyAgICAgICAgICAgICByZWFjaCBpdHMgdGhyZXNob2xkLgpAQCAtMTQ4LDcgKzE0OCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9yZWFkX2RwcmFtCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBzcGVjaWZpYyBhcmVhIG9mIGRwcmFtCiAvLyAgICAgICAgICAgICAoRWxlY3RyYWJ1enogQVNJQyBvbmx5KQogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTc1LDcgKzE3NSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF93cml0ZV9kcHJhbQotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSB0byBhIHNwZWNpZmljIGFyZWEgb2YgZHByYW0KIC8vICAgICAgICAgICAgIChFbGVjdHJhYnV6eiBBU0lDIG9ubHkpCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yMDEsNyArMjAxLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3JlYWRfZHByYW1fbWFnXzE2Ci0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBzcGVjaWZpYyBhcmVhIG9mIGRwcmFtCiAvLyAgICAgICAgICAgICAoTWFnbmVtaXRlIEFTSUMgb25seSkKIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTIzMyw3ICsyMzMsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfd3JpdGVfZHByYW1fbWFnXzE2Ci0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgdG8gYSBzcGVjaWZpYyBhcmVhIG9mIGRwcmFtCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQogLy8gICAgICAgICAgICAgKE1hZ25lbWl0ZSBBU0lDIG9ubHkpCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yNjMsNyArMjYzLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3JlYWRfZHByYW1fbWFnXzMyCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBzcGVjaWZpYyBhcmVhIG9mIGRwcmFtCiAvLyAgICAgICAgICAgICAoTWFnbmVtaXRlIEFTSUMgb25seSkKIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTI5MCw3ICsyOTAsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfd3JpdGVfZHByYW1fbWFnXzMyCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgdG8gYSBzcGVjaWZpYyBhcmVhIG9mIGRwcmFtCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQogLy8gICAgICAgICAgICAgKE1hZ25lbWl0ZSBBU0lDIG9ubHkpCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0zMTUsNyArMzE1LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX2VuYWJsZV9pbnRlcnJ1cHRzCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIGludGVycnVwdHMgYmFzZSBvbiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgbWFzay4KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIGludGVycnVwdHMgYmFzZSBvbiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgbWFzay4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKIC8vIE91dHB1dDoKQEAgLTM0MCw3ICszNDAsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfZGlzYWJsZV9pbnRlcnJ1cHRzCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKIC8vIE91dHB1dDoKQEAgLTM2NCw3ICszNjQsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVzZXRfYXNpYwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIENhcmQgU2VydmljZSBmdW5jdGlvbiB0byByZXNldCB0aGUKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgQ2FyZCBTZXJ2aWNlIGZ1bmN0aW9uIHRvIHJlc2V0IHRoZQogLy8gICAgICAgICAgICAgQVNJQy4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTQwOCw3ICs0MDgsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVzZXRfY2FyZAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBjYXJkCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBjYXJkCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyBPdXRwdXQ6CkBAIC01NzEsNyArNTcxLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX2Noa2NhcmQKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnRseSBhdmFpbGFibGUgb24KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50bHkgYXZhaWxhYmxlIG9uCiAvLyAgICAgICAgICAgICB0aGUgc3lzdGVtLgogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtNjA3LDcgKzYwNyw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9oYmNoawotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIGhlYXJ0IGJlYXQgY2hlY2sgb2YgdGhlIERTUCBhcworLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBoZWFydCBiZWF0IGNoZWNrIG9mIHRoZSBEU1AgYXMKIC8vICAgICAgICAgICAgIHdlbGwgYXMgdGhlIEFTSUMuCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC04MjgsNyArODI4LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3NlbmRfY21kCi0vLyBEZXNjcmlwdG9uOgorLy8gRGVzY3JpcHRpb246CiAvLyBJbnB1dDoKIC8vIE91dHB1dDoKIC8vCkBAIC05MDgsNyArOTA4LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3JlY2VpdmVfY21kCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBhIG1lc3NhZ2UgZnJvbSB0aGUgZHByYW0gYXJlYS4KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBhIG1lc3NhZ2UgZnJvbSB0aGUgZHByYW0gYXJlYS4KIC8vIElucHV0OgogLy8gICAgZGV2IC0gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCiAvLyAgICBwYnVmZmVyIC0gY2FsbGVyIHN1cHBseSBhZGRyZXNzIHRvIGJ1ZmZlcgpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3Byb2NfZHJ2bXNnCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHJvY2VzcyB0aGUgdmFyaW91cyBkcml2ZXIgbWVzc2FnZXMuCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHByb2Nlc3MgdGhlIHZhcmlvdXMgZHJpdmVyIG1lc3NhZ2VzLgogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQogLy8gICAgIHBueHRwaCAtIHBvaW50ZXIgdG8gbmV4dCBwc2V1ZG8gaGVhZGVyCkBAIC0xMjg1LDcgKzEyODUsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcGFyc2VfZHByYW1fbXNnCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcGFyc2UgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgRFNQCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHBhcnNlIHRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIERTUAogLy8gICAgICAgICAgICAgdmlhIHRoZSBEUFJBTSBpbnRlcmZhY2UuCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xNDQyLDcgKzE0NDIsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfZmx1c2hfZmlmbwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGZsdXNoIG9uZSBwYWNrZXQgZnJvbSB0aGUgZG93bmxpbmsKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmx1c2ggb25lIHBhY2tldCBmcm9tIHRoZSBkb3dubGluawogLy8gICAgICAgICAgICAgRklGTy4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX2NvcHlfdXBfcGt0Ci0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHVsbCBGbGFyaW9uIHBhY2tldHMgb3V0IG9mIHRoZSBEb3dubGluaworLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCBwdWxsIEZsYXJpb24gcGFja2V0cyBvdXQgb2YgdGhlIERvd25saW5rCiAvLyAgICAgICAgICAgICBGSUZPIGFuZCBjb252ZXJ0IGl0IHRvIGFuIGV0aGVybmV0IHBhY2tldC4gIFRoZSBldGhlcm5ldCBwYWNrZXQgd2lsbAogLy8gICAgICAgICAgICAgdGhlbiBiZSBkZWxpdmVyIHRvIHRoZSBUQ1AvSVAgc3RhY2suCiAvLyBJbnB1dDoKQEAgLTE3NzMsNyArMTc3Myw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9jb3B5X2Rvd25fcGt0Ci0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBldGhlcm5ldCBwYWNrZXQgYW5kIGNvbnZlcnQgaXQgdG8KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBldGhlcm5ldCBwYWNrZXQgYW5kIGNvbnZlcnQgaXQgdG8KIC8vICAgICAgICAgICAgIGEgRmxhcmlvbiBwYWNrZXQgcHJpb3IgdG8gc2VuZGluZyBpdCB0byB0aGUgQVNJQyBEb3dubGluawogLy8gICAgICAgICAgICAgRklGTy4KIC8vIElucHV0OgpAQCAtMjI4OCw3ICsyMjg4LDMgQEAKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBOVUxMOwogfQotCi1FWFBPUlRfU1lNQk9MKGluaXRfZnQxMDAwX2NhcmQpOwotRVhQT1JUX1NZTUJPTChzdG9wX2Z0MTAwMF9jYXJkKTsKLUVYUE9SVF9TWU1CT0woZmxhcmlvbl9mdDEwMDBfY250KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKaW5kZXggOTM1NjA4ZS4uYmRmYjFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKQEAgLTIxNCw2ICsyMTQsMyBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KEZUMTAwMF9QUk9DLCBpbml0X25ldC5wcm9jX25ldCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmZ0MTAwMF9uZXRkZXZfbm90aWZpZXIpOwogfQotCi1FWFBPUlRfU1lNQk9MKGZ0MTAwMEluaXRQcm9jKTsKLUVYUE9SVF9TWU1CT0woZnQxMDAwQ2xlYW51cFByb2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9kb3dubG9hZC5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9kb3dubG9hZC5jCmluZGV4IDhlNjIyNDIuLjE5NzJiNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfZG93bmxvYWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2Rvd25sb2FkLmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogLy8gUGFyYW1ldGVyczogIHN0cnVjdCBmdDEwMDBfZGV2aWNlICAtIGRldmljZSBzdHJ1Y3R1cmUKIC8vICAgICAgICAgICAgICB1MTYgKipwVXNGaWxlIC0gRFNQIGltYWdlIGZpbGUgcG9pbnRlciBpbiB1MTYKIC8vICAgICAgICAgICAgICB1OCAgKipwVWNGaWxlIC0gRFNQIGltYWdlIGZpbGUgcG9pbnRlciBpbiB1OAotLy8gICAgICAgICAgICAgIGxvbmcgICB3b3JkX2xlbmd0aCAtIGxlbmdodCBvZiB0aGUgYnVmZmVyIHRvIGJlIHdyaXR0ZW4KKy8vICAgICAgICAgICAgICBsb25nICAgd29yZF9sZW5ndGggLSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB0byBiZSB3cml0dGVuCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gRFBSQU0KIC8vCiAvLyBSZXR1cm5zOiAgICAgU1RBVFVTX1NVQ0NFU1MgLSBzdWNjZXNzCkBAIC02MjgsNyArNjI4LDcgQEAKIC8vIFBhcmFtZXRlcnM6ICBzdHJ1Y3QgZnQxMDAwX2RldmljZSAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyAgICAgICAgICAgICAgdTE2ICoqcFVzRmlsZSAtIERTUCBpbWFnZSBmaWxlIHBvaW50ZXIgaW4gdTE2CiAvLyAgICAgICAgICAgICAgdTggICoqcFVjRmlsZSAtIERTUCBpbWFnZSBmaWxlIHBvaW50ZXIgaW4gdTgKLS8vICAgICAgICAgICAgICBsb25nICAgd29yZF9sZW5ndGggLSBsZW5naHQgb2YgdGhlIGJ1ZmZlciB0byBiZSB3cml0dGVuCisvLyAgICAgICAgICAgICAgbG9uZyAgIHdvcmRfbGVuZ3RoIC0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgdG8gYmUgd3JpdHRlbgogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIERQUkFNCiAvLwogLy8gUmV0dXJuczogICAgIFNUQVRVU19TVUNDRVNTIC0gc3VjY2VzcwpAQCAtODE3LDcgKzgxNyw3IEBACiAJCQkJCQkgKiBFcnJvciwgYmV5b25kIGJvb3QgY29kZSByYW5nZS4KIAkJCQkJCSAqLwogCQkJCQkJREVCVUcKLQkJCQkJCSAgICAoIkZUMTAwMDpkb3dubG9hZDpEb3dubG9hZCBlcnJvcjogUmVxdWVzdGVkIGxlbj0lZCBleGNlZWRzIEJPT1QgY29kZSBib3VuZHJ5LlxuIiwKKwkJCQkJCSAgICAoIkZUMTAwMDpkb3dubG9hZDpEb3dubG9hZCBlcnJvcjogUmVxdWVzdGVkIGxlbj0lZCBleGNlZWRzIEJPT1QgY29kZSBib3VuZGFyeS5cbiIsCiAJCQkJCQkgICAgIChpbnQpd29yZF9sZW5ndGgpOwogCQkJCQkJc3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7CiAJCQkJCQlicmVhazsKQEAgLTk1MCw3ICs5NTAsNyBAQAogCQkJCQkJICogRXJyb3IsIGJleW9uZCBib290IGNvZGUgcmFuZ2UuCiAJCQkJCQkgKi8KIAkJCQkJCURFQlVHCi0JCQkJCQkgICAgKCJGVDEwMDA6ZG93bmxvYWQ6RG93bmxvYWQgZXJyb3I6IFJlcXVlc3RlZCBsZW49JWQgZXhjZWVkcyBEU1AgY29kZSBib3VuZHJ5LlxuIiwKKwkJCQkJCSAgICAoIkZUMTAwMDpkb3dubG9hZDpEb3dubG9hZCBlcnJvcjogUmVxdWVzdGVkIGxlbj0lZCBleGNlZWRzIERTUCBjb2RlIGJvdW5kYXJ5LlxuIiwKIAkJCQkJCSAgICAgKGludCl3b3JkX2xlbmd0aCk7CiAJCQkJCQlzdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKIAkJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9ody5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9ody5jCmluZGV4IDc4ZGNkNDkuLjY4NGU2OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaHcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2h3LmMKQEAgLTU4NSw3ICs1ODUsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVzZXRfYXNpYwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIENhcmQgU2VydmljZSBmdW5jdGlvbiB0byByZXNldCB0aGUKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgQ2FyZCBTZXJ2aWNlIGZ1bmN0aW9uIHRvIHJlc2V0IHRoZQogLy8gICAgICAgICAgICAgQVNJQy4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTYyNiw3ICs2MjYsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVzZXRfY2FyZAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBjYXJkCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBjYXJkCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyBPdXRwdXQ6CkBAIC05MTcsNyArOTE3LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX2NvcHlfZG93bl9wa3QKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGFuIGV0aGVybmV0IHBhY2tldCBhbmQgY29udmVydCBpdCB0bworLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGFuIGV0aGVybmV0IHBhY2tldCBhbmQgY29udmVydCBpdCB0bwogLy8gICAgICAgICAgICAgYSBGbGFyaW9uIHBhY2tldCBwcmlvciB0byBzZW5kaW5nIGl0IHRvIHRoZSBBU0lDIERvd25saW5rCiAvLyAgICAgICAgICAgICBGSUZPLgogLy8gSW5wdXQ6CkBAIC0xMDc1LDEwICsxMDc1LDEwIEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9jb3B5X3VwX3BrdAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSBwYWNrZXQgZnJvbSB0aGUgRklGTyB1cCBsaW5rIGFuZAorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcGFja2V0IGZyb20gdGhlIEZJRk8gdXAgbGluayBhbmQKIC8vICAgICAgICAgICAgIGNvbnZlcnQgaXQgaW50byBhbiBldGhlcm5ldCBwYWNrZXQgYW5kIGRlbGl2ZXIgaXQgdG8gdGhlIElQIHN0YWNrCiAvLyBJbnB1dDoKLS8vICAgICB1cmIgLSB0aGUgcmVjZXZpbmcgdXNiIHVyYgorLy8gICAgIHVyYiAtIHRoZSByZWNlaXZpbmcgdXNiIHVyYgogLy8KIC8vIE91dHB1dDoKIC8vICAgICBzdGF0dXMgLSBGQUlMVVJFCkBAIC0xMTgyLDcgKzExODIsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfc3VibWl0X3J4X3VyYgotLy8gRGVzY3JpcHRvbjogdGhlIHJlY2VpdmluZyBmdW5jdGlvbiBvZiB0aGUgbmV0d29yayBkcml2ZXIKKy8vIERlc2NyaXB0aW9uOiB0aGUgcmVjZWl2aW5nIGZ1bmN0aW9uIG9mIHRoZSBuZXR3b3JrIGRyaXZlcgogLy8KIC8vIElucHV0OgogLy8gICAgIGluZm8gLSBhIHByaXZhdGUgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24KQEAgLTEzMTYsNyArMTMxNiw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9jaGtjYXJkCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50bHkgYXZhaWxhYmxlIG9uCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudGx5IGF2YWlsYWJsZSBvbgogLy8gICAgICAgICAgICAgdGhlIHN5c3RlbS4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEzNjMsNyArMTM2Myw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9yZWNlaXZlX2NtZAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgYSBtZXNzYWdlIGZyb20gdGhlIGRwcmFtIGFyZWEuCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgYSBtZXNzYWdlIGZyb20gdGhlIGRwcmFtIGFyZWEuCiAvLyBJbnB1dDoKIC8vICAgIGRldiAtIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQogLy8gICAgcGJ1ZmZlciAtIGNhbGxlciBzdXBwbHkgYWRkcmVzcyB0byBidWZmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaW9jdGwuaAppbmRleCAzZjcyZDViLi42YThhMTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2lvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9pb2N0bC5oCkBAIC01NSw3ICs1NSw3IEBACiAgICB1bnNpZ25lZCBjaGFyICAgICBzZXFfbnVtOyAgICAgICAgICAvL3NlcXVlbmNlIG51bWJlcgogICAgdW5zaWduZWQgY2hhciAgICAgcnN2ZDI7ICAgICAgICAgICAgLy9yZXNlcnZlZAogICAgdW5zaWduZWQgc2hvcnQgICAgcW9zX2NsYXNzOyAgICAgICAgLy9RdWFsaXR5IG9mIFNlcnZpY2UgY2xhc3MgKE5vdCBhcHBsaWNhYmxlIG9uIE1vYmlsZSkKLSAgIHVuc2lnbmVkIHNob3J0ICAgIGNoZWNrc3VtOyAgICAgICAgIC8vUHN1ZWRvIGhlYWRlciBjaGVja3N1bQorICAgdW5zaWduZWQgc2hvcnQgICAgY2hlY2tzdW07ICAgICAgICAgLy9Qc2V1ZG8gaGVhZGVyIGNoZWNrc3VtCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgX0lPQ1RMX0dFVF9WRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfdXNiLmggYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX3VzYi5oCmluZGV4IGUwNDdjMDMuLmYyZWNiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfdXNiLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuaApAQCAtMzY0LDcgKzM2NCw3IEBACiAKICNkZWZpbmUgSVNSX0VNUFRZCQkJKHU4KTB4MDAgCSAvLyBubyBiaXRzIHNldCBpbiBJU1IKIAotI2RlZmluZSBJU1JfRE9PUkJFTExfQUNLCSh1OCkweDAxCQkgLy8gIHRoZSBkb29yYmVsbCBpIHNlbnQgaGFzIGJlZW4gcmVjaWV2ZWQuCisjZGVmaW5lIElTUl9ET09SQkVMTF9BQ0sJKHU4KTB4MDEJCSAvLyAgdGhlIGRvb3JiZWxsIGkgc2VudCBoYXMgYmVlbiByZWNlaXZlZC4KIAogI2RlZmluZSBJU1JfRE9PUkJFTExfUEVORAkodTgpMHgwMiAJIC8vICBkb29yYmVsbCBmb3IgbWUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL2dlbmVyaWNfc2VyaWFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvZ2VuZXJpY19zZXJpYWwuYwppbmRleCA0NjY5ODhkLi5mMjlkZGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvZ2VuZXJpY19zZXJpYWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvZ2VuZXJpY19zZXJpYWwuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAkJYyA9IGNvdW50OwogIAotCQkvKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSB3ZSAiT1dOIiB0aGUgImhlYWQiLiBOb29uZSBlbHNlIGNhbiAKKwkJLyogVGhpcyBpcyBzYWZlIGJlY2F1c2Ugd2UgIk9XTiIgdGhlICJoZWFkIi4gTm8gb25lIGVsc2UgY2FuIAogCQkgICBjaGFuZ2UgdGhlICJoZWFkIjogd2Ugb3duIHRoZSBwb3J0X3dyaXRlX211dGV4LiAqLwogCQkvKiBEb24ndCBvdmVycnVuIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwogCQl0ID0gU0VSSUFMX1hNSVRfU0laRSAtIHBvcnQtPnhtaXRfaGVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vbWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL21hcC5oCmluZGV4IDgzNjY5NzguLjI4YTY2MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vbWFwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9tYXAuaApAQCAtODcsNyArODcsNyBAQAogKiogVGhlIFRvcG9sb2d5IGFycmF5IGNvbnRhaW5zIHRoZSBJRCBvZiB0aGUgdW5pdCBjb25uZWN0ZWQgdG8gZWFjaCBvZiB0aGUKICoqIGZvdXIgbGlua3Mgb24gdGhpcyB1bml0LiBUaGUgZW50cnkgd2lsbCBiZSAweEZGRkYgaWYgTk9USElORyBpcyBjb25uZWN0ZWQKICoqIHRvIHRoZSBsaW5rLCBvciB3aWxsIGJlIDB4RkYwMCBpZiBhbiBVTktOT1dOIHVuaXQgaXMgY29ubmVjdGVkIHRvIHRoZSBsaW5rLgotKiogVGhlIE5hbWUgZmllbGQgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCB1cHRvIDMxIGNoYXJhY3RlcnMsIGNvbnRhaW5pbmcKKyoqIFRoZSBOYW1lIGZpZWxkIGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgdXAgdG8gMzEgY2hhcmFjdGVycywgY29udGFpbmluZwogKiogdGhlICdjdXRlJyBuYW1lIHRoYXQgdGhlIHN5c2FkbWluL3VzZXJzIGtub3cgdGhlIFJUQSBieS4gSXQgaXMgcGVybWlzc2libGUKICoqIGZvciB0aGlzIHN0cmluZyB0byBjb250YWluIGFueSBjaGFyYWN0ZXIgaW4gdGhlIHJhbmdlIFwwNDAgdG8gXDE3NiBpbmNsdXNpdmUuCiAqKiBJbiBwYXJ0aWN1bGFyLCBjdHJsIHNlcXVlbmNlcyBhbmQgREVMICgweDdGLCBcMTc3KSBhcmUgbm90IGFsbG93ZWQuIFRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9ib290LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb2Jvb3QuYwppbmRleCBkOTU2ZGQzLi5mZmEwMWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb2Jvb3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb2Jvb3QuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJEYXRhIGF0IHVzZXIgYWRkcmVzcyAlcFxuIiwgcmJwLT5EYXRhUCk7CiAKIAkvKgotCSAqKiBDaGVjayB0aGF0IHdlIGhhdmUgc2V0IGFzc2lkZSBlbm91Z2ggbWVtb3J5IGZvciB0aGlzCisJICoqIENoZWNrIHRoYXQgd2UgaGF2ZSBzZXQgYXNpZGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhpcwogCSAqLwogCWlmIChyYnAtPkNvdW50ID4gU0lYVFlfRk9VUl9LKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiUlRBIEJvb3QgQ29kZSBUb28gTGFyZ2UhXG4iKTsKQEAgLTI5Myw3ICsyOTMsNyBAQAogCQkvKgogCQkgKiogICAgICAgICAgICAgICAgICAgICBTIFQgTyBQICEKIAkJICoqCi0JCSAqKiBVcHRvIHRoaXMgcG9pbnQgdGhlIGNvZGUgaGFzIGJlZW4gZmFpcmx5IHJhdGlvbmFsLCBhbmQgcG9zc2libHkKKwkJICoqIFVwIHRvIHRoaXMgcG9pbnQgdGhlIGNvZGUgaGFzIGJlZW4gZmFpcmx5IHJhdGlvbmFsLCBhbmQgcG9zc2libHkKIAkJICoqIGV2ZW4gc3RyYWlnaHQgZm9yd2FyZC4gV2hhdCBmb2xsb3dzIGlzIGEgcGlsZSBvZiBjcnVkIHRoYXQgd2lsbAogCQkgKiogbWFnaWNhbGx5IHR1cm4gaW50byBzaXggYnl0ZXMgb2YgdHJhbnNwdXRlciBhc3NlbWJsZXIuIE5vcm1hbGx5CiAJCSAqKiB5b3Ugd291bGQgZXhwZWN0IGFuIGFycmF5IG9yIHNvbWV0aGluZywgYnV0LCBiZWluZyBtZSwgSSBoYXZlCkBAIC00MTksNyArNDE5LDcgQEAKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJTZXQgY29udHJvbCBwb3J0XG4iKTsKIAogCQkvKgotCQkgKiogTm93LCB3YWl0IGZvciB1cHRvIGZpdmUgc2Vjb25kcyBmb3IgdGhlIFRwIHRvIHNldHVwIHRoZSBwYXJtbWFwCisJCSAqKiBOb3csIHdhaXQgZm9yIHVwIHRvIGZpdmUgc2Vjb25kcyBmb3IgdGhlIFRwIHRvIHNldHVwIHRoZSBwYXJtbWFwCiAJCSAqKiBwb2ludGVyOgogCQkgKi8KIAkJZm9yICh3YWl0X2NvdW50ID0gMDsgKHdhaXRfY291bnQgPCBwLT5SSU9Db25mLlN0YXJ0dXBUaW1lKSAmJiAocmVhZHcoJkhvc3RQLT5fX1Bhcm1NYXBSKSA9PSBPbGRQYXJtTWFwKTsgd2FpdF9jb3VudCsrKSB7CkBAIC00NzUsNyArNDc1LDcgQEAKIAogCQkvKgogCQkgKiogbm93IHdhaXQgZm9yIHRoZSBjYXJkIHRvIHNldCBhbGwgdGhlIHBhcm1tYXAtPlhYWCBzdHVmZgotCQkgKiogdGhpcyBpcyBhIHdhaXQgb2YgdXB0byB0d28gc2Vjb25kcy4uLi4KKwkJICoqIHRoaXMgaXMgYSB3YWl0IG9mIHVwIHRvIHR3byBzZWNvbmRzLi4uLgogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJMb29raW5nIGZvciBpbml0X2RvbmUgLSAlZCB0aWNrc1xuIiwgcC0+UklPQ29uZi5TdGFydHVwVGltZSk7CiAJCUhvc3RQLT50aW1lb3V0X2lkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvY21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb2NtZC5jCmluZGV4IGYxMjEzNTcuLjYxZWZkNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvY21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9jbWQuYwpAQCAtODYzLDcgKzg2Myw3IEBACiAJICoqIGJlaW5nIHRyYW5zZmVycmVkIGZyb20gdGhlIHdyaXRlIHF1ZXVlIGludG8gdGhlIHRyYW5zbWl0IHBhY2tldHMKIAkgKiogKGFkZF90cmFuc21pdCkgYW5kIG5vIGZ1cnRodXIgdHJhbnNtaXQgaW50ZXJydXB0IHdpbGwgYmUgc2VudCBmb3IgdGhhdAogCSAqKiBkYXRhLiBUaGUgbmV4dCBpbnRlcnJ1cHQgd2lsbCBvY2N1ciB1cCB0byA1MDBtcyBsYXRlciAoUklPSW50ciBpcyBjYWxsZWQKLQkgKiogdHdpY2UgYSBzZWNvbmQgYXMgYSBzYWZ0ZXkgbWVhc3VyZSkuIFRoaXMgd2FzIHRoZSBjYXNlIHdoZW4ga2VybWl0IHdhcworCSAqKiB0d2ljZSBhIHNlY29uZCBhcyBhIHNhZmV0eSBtZWFzdXJlKS4gVGhpcyB3YXMgdGhlIGNhc2Ugd2hlbiBrZXJtaXQgd2FzCiAJICoqIHVzZWQgdG8gc2VuZCBkYXRhIGludG8gYSBSSU8gcG9ydC4gQWZ0ZXIgZWFjaCBwYWNrZXQgd2FzIHNlbnQsIFRDRkxTSAogCSAqKiB3YXMgY2FsbGVkIHRvIGZsdXNoIHRoZSByZWFkIHF1ZXVlIHByZWVtcHRpdmVseS4gUG9ydFAtPkluVXNlIHdhcwogCSAqKiBpbmNyZW1lbnRlZCwgdGhlcmVieSBibG9ja2luZyB0aGUgNiBieXRlIGFja25vd2xlZGdlbWVudCBwYWNrZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvcm91dGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvcm91dGUuYwppbmRleCBmOWI5MzZhLi44NzU3Mzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb3JvdXRlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9yb3V0ZS5jCkBAIC00NTAsNyArNDUwLDcgQEAKIAkJICoqIHdlIHJlc2V0IHRoZSB1bml0LCBiZWNhdXNlIHdlIGRpZG4ndCBib290IGl0LgogCQkgKiogSG93ZXZlciwgaWYgdGhlIHRhYmxlIGlzIGZ1bGwsIGl0IGNvdWxkIGJlIHRoYXQgd2UgZGlkIGJvb3QKIAkJICoqIHRoaXMgdW5pdCwgYW5kIHNvIHdlIHdvbid0IHJlYm9vdCBpdCwgYmVjYXVzZSBpdCBpc24ndCByZWFsbHkKLQkJICoqIGFsbCB0aGF0IGRpc2FzdGVyb3VzIHRvIGtlZXAgdGhlIG9sZCBiaW5zIGluIG1vc3QgY2FzZXMuIFRoaXMKKwkJICoqIGFsbCB0aGF0IGRpc2FzdHJvdXMgdG8ga2VlcCB0aGUgb2xkIGJpbnMgaW4gbW9zdCBjYXNlcy4gVGhpcwogCQkgKiogaXMgYSByYXRoZXIgdGFja3kgZmVhdHVyZSwgYnV0IHdlIGFyZSBvbiB0aGUgZWRnZSBvZiByZWFsbGl0eQogCQkgKiogaGVyZSwgYmVjYXVzZSB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCBzb21lb25lIGhhcyBjb25uZWN0ZWQKIAkJICoqIDE2K01BWF9FWFRSQV9VTklUUyBvbnRvIG9uZSBob3N0LgpAQCAtNjc4LDcgKzY3OCw3IEBACiAKIAlIb3N0UC0+TWFwcGluZ1tVbml0SWRdLkZsYWdzICY9IH5CRUVOX0hFUkU7CiAKLQkvKiByaW9fZHByaW50KFJJT19ERUJVR19ST1VURSwgKCJVbml0ICVkIERPRVNOVCBLTk9XIFRIRSBIT1NUIVxuIiwgVW5pdElkKSk7ICovCisJLyogcmlvX2RwcmludChSSU9fREVCVUdfUk9VVEUsICgiVW5pdCAlZCBET0VTTidUIEtOT1cgVEhFIEhPU1QhXG4iLCBVbml0SWQpKTsgKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW90dHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvdHR5LmMKaW5kZXggOGE5MDM5My4uZTdlOTkxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW90dHkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb3R0eS5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAl9CiAKIAkvKgotCSAqKiBHcmFiIHBvaW50ZXIgdG8gdGhlIHBvcnQgc3R1Y3R1cmUKKwkgKiogR3JhYiBwb2ludGVyIHRvIHRoZSBwb3J0IHN0cnVjdHVyZQogCSAqLwogCVBvcnRQID0gcC0+UklPUG9ydHBbU3lzUG9ydF07CS8qIEdldCBjb250cm9sIHN0cnVjICovCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlBvcnRQOiAlcFxuIiwgUG9ydFApOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJfQogCiAJLyoKLQkgKiogSWYgdGhlIFJUQSBoYXMgbm90IGJvb3RlZCB5ZXQgYW5kIHRoZSB1c2VyIGhhcyBjaG9vc2VuIHRvIGJsb2NrCisJICoqIElmIHRoZSBSVEEgaGFzIG5vdCBib290ZWQgeWV0IGFuZCB0aGUgdXNlciBoYXMgY2hvc2VuIHRvIGJsb2NrCiAJICoqIHVudGlsIHRoZSBSVEEgaXMgcHJlc2VudCB0aGVuIHdlIG11c3Qgc3BpbiBoZXJlIHdhaXRpbmcgZm9yCiAJICoqIHRoZSBSVEEgdG8gYm9vdC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9zeC5jIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3N4LmMKaW5kZXggMTI5MTQ2Mi4uNGY5NGFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3N4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3N4LmMKQEAgLTE1OCwxMyArMTU4LDEzIEBACiAgKiBSZWFkeWluZyBmb3IgcmVsZWFzZSBvbiAyLjAueCAoc29ycnkgRGF2aWQsIDEuMDEgYmVjb21lcyAxLjEgZm9yIFJDUykuIAogICoKICAqIFJldmlzaW9uIDAuMTIgIDE5OTkvMDMvMjggMDk6MjA6MTAgIHdvbGZmCi0gKiBGaXhlZCBwcm9ibGVtIGluIDAuMTEsIGNvbnRpbnVlaW5nIGNsZWFudXAuCisgKiBGaXhlZCBwcm9ibGVtIGluIDAuMTEsIGNvbnRpbnVpbmcgY2xlYW51cC4KICAqCiAgKiBSZXZpc2lvbiAwLjExICAxOTk5LzAzLzI4IDA4OjQ2OjQ0ICB3b2xmZgogICogY2xlYW51cC4gTm90IGdvb2QuCiAgKgogICogUmV2aXNpb24gMC4xMCAgMTk5OS8wMy8yOCAwODowOTo0MyAgd29sZmYKLSAqIEZpeGVkIGxvb3NpbmcgY2hhcmFjdGVycyBvbiBjbG9zZS4KKyAqIEZpeGVkIGxvc2luZyBjaGFyYWN0ZXJzIG9uIGNsb3NlLgogICoKICAqIFJldmlzaW9uIDAuOSAgMTk5OS8wMy8yMSAyMjo1MjowMSAgd29sZmYKICAqIFBvcnRlZCBiYWNrIHRvIDIuMi4uLi4gKG1pbm9yIHRoaW5ncykKQEAgLTE1ODgsNyArMTU4OCw3IEBACiAjZGVmaW5lIFIwCQlpZiAocmVhZF9zeF9ieXRlKGJvYXJkLCBpKSAhPSAweDU1KSByZXR1cm4gMQogI2RlZmluZSBSMQkJaWYgKHJlYWRfc3hfYnl0ZShib2FyZCwgaSkgIT0gMHhhYSkgcmV0dXJuIDEKIAotLyogVGhpcyBtZW10ZXN0IHRha2VzIGEgaHVtYW4tbm90aWNhYmxlIHRpbWUuIFlvdSBub3JtYWxseSBvbmx5IGRvIGl0CisvKiBUaGlzIG1lbXRlc3QgdGFrZXMgYSBodW1hbi1ub3RpY2VhYmxlIHRpbWUuIFlvdSBub3JtYWxseSBvbmx5IGRvIGl0CiAgICBvbmNlIGEgYm9vdCwgc28gSSBndWVzcyB0aGF0IGl0IGlzIHdvcnRoIGl0LiAqLwogc3RhdGljIGludCBkb19tZW10ZXN0KHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQsIGludCBtaW4sIGludCBtYXgpCiB7CkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogI2RlZmluZSBSMQkJaWYgKHJlYWRfc3hfd29yZChib2FyZCwgaSkgIT0gMHhhYTU1KSByZXR1cm4gMQogCiAjaWYgMAotLyogVGhpcyBtZW10ZXN0IHRha2VzIGEgaHVtYW4tbm90aWNhYmxlIHRpbWUuIFlvdSBub3JtYWxseSBvbmx5IGRvIGl0CisvKiBUaGlzIG1lbXRlc3QgdGFrZXMgYSBodW1hbi1ub3RpY2VhYmxlIHRpbWUuIFlvdSBub3JtYWxseSBvbmx5IGRvIGl0CiAgICBvbmNlIGEgYm9vdCwgc28gSSBndWVzcyB0aGF0IGl0IGlzIHdvcnRoIGl0LiAqLwogc3RhdGljIGludCBkb19tZW10ZXN0X3coc3RydWN0IHN4X2JvYXJkICpib2FyZCwgaW50IG1pbiwgaW50IG1heCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvS2NvbmZpZwppbmRleCA1NTAxZWI5Li5jZThiZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIERSTV9QU0IKIAl0cmlzdGF0ZSAiSW50ZWwgR01BNTAwIEtNUyBGcmFtZWJ1ZmZlciIKLQlkZXBlbmRzIG9uIERSTSAmJiBQQ0kKKwlkZXBlbmRzIG9uIERSTSAmJiBQQ0kgJiYgWDg2CiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogICAgICAgICBzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAgICAgICAgIHNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcm0uaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2RybS5oCmluZGV4IGZiOWI0MjQuLmEzMzk0MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2RybS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2RybS5oCkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1MzIgcHJlX2FkZDsJLyogRGVzdGluYXRpb24gZm9ybWF0OiAqLwogCXUzMiBiYWNrZ3JvdW5kOwkvKiBEZXN0aW5hdGlvbiBhZGQgKi8KIAl1MzIgZHN0X2J1ZmZlcjsJLyogRGVzdGluYXRpb24gYnVmZmVyLiBJbmRleCBpbnRvIGJ1ZmZlcl9saXN0ICovCi0JdTMyIGFyZzA7CQkvKiBSZWxvYy1vcCBkZXBlbmRhbnQgKi8KKwl1MzIgYXJnMDsJCS8qIFJlbG9jLW9wIGRlcGVuZGVudCAqLwogCXUzMiBhcmcxOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYwppbmRleCA0NGNkMDk1Li5kMDFkNDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYwpAQCAtNTYxLDcgKzU2MSw3IEBACiAJCWtmcmVlKGRldl9wcml2KTsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9IE5VTEw7CiAKLQkJLypkZXN0b3J5IFZCVCBkYXRhKi8KKwkJLypkZXN0cm95IFZCVCBkYXRhKi8KIAkJcHNiX2ludGVsX2Rlc3Ryb3lfYmlvcyhkZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jCmluZGV4IGY1YmNkMTEuLjQ4YWM4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9iaW9zLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogfQogCiAvKioKLSAqIERlc3RvcnkgYW5kIGZyZWUgVkJUIGRhdGEKKyAqIERlc3Ryb3kgYW5kIGZyZWUgVkJUIGRhdGEKICAqLwogdm9pZCBwc2JfaW50ZWxfZGVzdHJveV9iaW9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMKaW5kZXggNzMxYTVhMi4uMWQyYmIwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm8uYwpAQCAtNTczLDcgKzU3Myw3IEBACiAJLyogTWFrZSBhbGwgZmllbGRzIG9mIHRoZSAgYXJncy9yZXQgdG8gemVybyAqLwogCW1lbXNldChieUFyZ3MsIDAsIHNpemVvZihieUFyZ3MpKTsKIAotCS8qIEZpbGwgdXAgdGhlIGFyZ3VlbWVudCB2YWx1ZXM7ICovCisJLyogRmlsbCB1cCB0aGUgYXJndW1lbnQgdmFsdWVzOyAqLwogCWJ5QXJnc1swXSA9ICh1OCkgKGluMG91dHB1dG1hc2sgJiAweEZGKTsKIAlieUFyZ3NbMV0gPSAodTgpICgoaW4wb3V0cHV0bWFzayA+PiA4KSAmIDB4RkYpOwogCWJ5QXJnc1syXSA9ICh1OCkgKGluMW91dHB1dG1hc2sgJiAweEZGKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm9fcmVncy5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfc2R2b19yZWdzLmgKaW5kZXggYTFkMTQ3NS4uYzcxMDdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfc2R2b19yZWdzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfc2R2b19yZWdzLmgKQEAgLTIxNyw3ICsyMTcsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgotICogVGFrZXMgYSBzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIHdoaWNoIG91dHB1dHMgYXJlIHRhcmdldHRlZCBieQorICogVGFrZXMgYSBzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIHdoaWNoIG91dHB1dHMgYXJlIHRhcmdldGVkIGJ5CiAgKiBmdXR1cmUgb3V0cHV0IGNvbW1hbmRzLgogICoKICAqIEFmZmVjdGVkIGNvbW1hbmRzIGluY2x1ZSBTRVRfT1VUUFVUX1RJTUlOR1NfUEFSVFsxMl0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2VfdXNlci5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX3VzZXIuaAppbmRleCBmYzEzZjg5Li43NjJhMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2VfdXNlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9mZW5jZV91c2VyLmgKQEAgLTEzMCw3ICsxMzAsNyBAQAogfTsKIAogLyoKLSAqIElvY3RsIG9mZnNldHMgZnJvbWUgZXh0ZW5zdGlvbiBzdGFydC4KKyAqIElvY3RsIG9mZnNldHMgZnJvbSBleHRlbnN0aW9uIHN0YXJ0LgogICovCiAKICNkZWZpbmUgVFRNX0ZFTkNFX1NJR05BTEVEIDB4MDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LnR4dAppbmRleCAwNmE3NmRhLi45ZGIxZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcudHh0CkBAIC0yLDcgKzIsNyBAQAogCiBQZXRlIEViZXJsZWluIDxwZXRlQHNlbnNvcmF5LmNvbT4KIAotVGhlIGRyaXZlciB3YXMgb3JpZ25hbGx5IHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgYW5kIGlzIGN1cnJlbnRseSBob3N0ZWQgYXQ6CitUaGUgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgYW5kIGlzIGN1cnJlbnRseSBob3N0ZWQgYXQ6CiBodHRwOi8vbmlrb3NhcGkub3JnL3dpa2kvaW5kZXgucGhwL1dJU19HbzcwMDdfTGludXhfZHJpdmVyCiBUaGUgZ283MDA3IGZpcm13YXJlIGNhbiBiZSBhY3F1aXJlZCBmcm9tIHRoZSBwYWNrYWdlIG9uIHRoZSBzaXRlIGFib3ZlLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwppbmRleCBhZjc4OTkzLi42OGFkMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKQEAgLTg5NCw3ICs4OTQsNyBAQAogCiAvKgogICogV2UgYnJlYWsgdGhlIHJlcXVlc3QgaW50byAxIG9yIG1vcmUgYmxrdnNjX3JlcXVlc3RzIGFuZCBzdWJtaXQKLSAqIHRoZW0uICBJZiB3ZSBjYW50IHN1Ym1pdCB0aGVtIGFsbCwgd2UgcHV0IHRoZW0gb24gdGhlCisgKiB0aGVtLiAgSWYgd2UgY2FuJ3Qgc3VibWl0IHRoZW0gYWxsLCB3ZSBwdXQgdGhlbSBvbiB0aGUKICAqIHBlbmRpbmdfbGlzdC4gVGhlIGJsa3ZzY19yZXF1ZXN0KCkgd2lsbCB3b3JrIG9uIHRoZSBwZW5kaW5nX2xpc3QuCiAgKi8KIHN0YXRpYyBpbnQgYmxrdnNjX2RvX3JlcXVlc3Qoc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuYwppbmRleCA3NzVhNTJhLi5mN2NlN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsLmMKQEAgLTgxLDE0ICs4MSwxNCBAQAogCiAJaWYgKGNoYW5uZWwtPm9mZmVybXNnLm1vbml0b3JfYWxsb2NhdGVkKSB7CiAJCS8qIEVhY2ggdTMyIHJlcHJlc2VudHMgMzIgY2hhbm5lbHMgKi8KLQkJc2V0X2JpdChjaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCAmIDMxLAorCQlzeW5jX3NldF9iaXQoY2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQgJiAzMSwKIAkJCSh1bnNpZ25lZCBsb25nICopIHZtYnVzX2Nvbm5lY3Rpb24uc2VuZF9pbnRfcGFnZSArCiAJCQkoY2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQgPj4gNSkpOwogCiAJCW1vbml0b3JwYWdlID0gdm1idXNfY29ubmVjdGlvbi5tb25pdG9yX3BhZ2VzOwogCQltb25pdG9ycGFnZSsrOyAvKiBHZXQgdGhlIGNoaWxkIHRvIHBhcmVudCBtb25pdG9yIHBhZ2UgKi8KIAotCQlzZXRfYml0KGNoYW5uZWwtPm1vbml0b3JfYml0LAorCQlzeW5jX3NldF9iaXQoY2hhbm5lbC0+bW9uaXRvcl9iaXQsCiAJCQkodW5zaWduZWQgbG9uZyAqKSZtb25pdG9ycGFnZS0+dHJpZ2dlcl9ncm91cAogCQkJCQlbY2hhbm5lbC0+bW9uaXRvcl9ncnBdLnBlbmRpbmcpOwogCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogCWlmIChDaGFubmVsLT5vZmZlcm1zZy5tb25pdG9yX2FsbG9jYXRlZCkgewogCQkvKiBFYWNoIHUzMiByZXByZXNlbnRzIDMyIGNoYW5uZWxzICovCi0JCWNsZWFyX2JpdChDaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCAmIDMxLAorCQlzeW5jX2NsZWFyX2JpdChDaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCAmIDMxLAogCQkJICAodW5zaWduZWQgbG9uZyAqKXZtYnVzX2Nvbm5lY3Rpb24uc2VuZF9pbnRfcGFnZSArCiAJCQkgIChDaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCA+PiA1KSk7CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogCQkJdm1idXNfY29ubmVjdGlvbi5tb25pdG9yX3BhZ2VzOwogCQltb25pdG9yUGFnZSsrOyAvKiBHZXQgdGhlIGNoaWxkIHRvIHBhcmVudCBtb25pdG9yIHBhZ2UgKi8KIAotCQljbGVhcl9iaXQoQ2hhbm5lbC0+bW9uaXRvcl9iaXQsCisJCXN5bmNfY2xlYXJfYml0KENoYW5uZWwtPm1vbml0b3JfYml0LAogCQkJICAodW5zaWduZWQgbG9uZyAqKSZtb25pdG9yUGFnZS0+dHJpZ2dlcl9ncm91cAogCQkJCQlbQ2hhbm5lbC0+bW9uaXRvcl9ncnBdLlBlbmRpbmcpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuYwppbmRleCBiYzAzOTNhLi4wNmI1NzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5jCkBAIC0xNjYsNyArMTY2LDcgQEAKICAqIGZyb20gSHlwZXItVi4gVGhpcyBzdHViIHJlc3BvbmRzIHRvIHRoZSBkZWZhdWx0IG5lZ290aWF0ZSBtZXNzYWdlcwogICogdGhhdCBjb21lIGluIGZvciBldmVyeSBub24gSURFL1NDU0kvTmV0d29yayByZXF1ZXN0LgogICogVGhpcyBiZWhhdmlvciBpcyBub3JtYWxseSBvdmVyd3JpdHRlbiBpbiB0aGUgaHZfdXRpbHMgZHJpdmVyLiBUaGF0Ci0gKiBkcml2ZXIgaGFuZGxlcyByZXF1ZXN0cyBsaWtlIGdyYWNlZnVsbCBzaHV0ZG93biwgaGVhcnRiZWF0cyBldGMuCisgKiBkcml2ZXIgaGFuZGxlcyByZXF1ZXN0cyBsaWtlIGdyYWNlZnVsIHNodXRkb3duLCBoZWFydGJlYXRzIGV0Yy4KICAqCiAgKiBNYWlubHkgdXNlZCBieSBIeXBlci1WIGRyaXZlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY29ubmVjdGlvbi5jCmluZGV4IDQ0YjIwM2IuLmFmYzgxMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Nvbm5lY3Rpb24uYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCWZvciAoZHdvcmQgPSAwOyBkd29yZCA8IG1heGR3b3JkOyBkd29yZCsrKSB7CiAJCQlpZiAocmVjdl9pbnRfcGFnZVtkd29yZF0pIHsKIAkJCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDMyOyBiaXQrKykgewotCQkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGJpdCwKKwkJCQkJaWYgKHN5bmNfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwKIAkJCQkJCSh1bnNpZ25lZCBsb25nICopCiAJCQkJCQkmcmVjdl9pbnRfcGFnZVtkd29yZF0pKSB7CiAJCQkJCQlyZWxpZCA9IChkd29yZCA8PCA1KSArIGJpdDsKQEAgLTMzOCw3ICszMzgsNyBAQAogaW50IHZtYnVzX3NldF9ldmVudCh1MzIgY2hpbGRfcmVsaWQpCiB7CiAJLyogRWFjaCB1MzIgcmVwcmVzZW50cyAzMiBjaGFubmVscyAqLwotCXNldF9iaXQoY2hpbGRfcmVsaWQgJiAzMSwKKwlzeW5jX3NldF9iaXQoY2hpbGRfcmVsaWQgJiAzMSwKIAkJKHVuc2lnbmVkIGxvbmcgKil2bWJ1c19jb25uZWN0aW9uLnNlbmRfaW50X3BhZ2UgKwogCQkoY2hpbGRfcmVsaWQgPj4gNSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odi5jCmluZGV4IDJkNDkyYWQuLjBiMDZmNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odi5jCkBAIC0zNyw3ICszNyw3IEBACiAKIC8qCiAgKiBxdWVyeV9oeXBlcnZpc29yX3ByZXNlbmNlCi0gKiAtIFF1ZXJ5IHRoZSBjcHVpZCBmb3IgcHJlc2Vuc2Ugb2Ygd2luZG93cyBoeXBlcnZpc29yCisgKiAtIFF1ZXJ5IHRoZSBjcHVpZCBmb3IgcHJlc2VuY2Ugb2Ygd2luZG93cyBoeXBlcnZpc29yCiAgKi8KIHN0YXRpYyBpbnQgcXVlcnlfaHlwZXJ2aXNvcl9wcmVzZW5jZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X2FwaS5oCmluZGV4IDcxMTRmY2UuLjQzYTcyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl9hcGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfYXBpLmgKQEAgLTUzLDE0ICs1MywxNCBAQAogCiAvKgogICogSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UCi0gKiBUaGUgaHlwZXJ2aXNvciBjb3VsZCBub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIGJlYWN1c2UgYSBwYXJhbWV0ZXIgaGFzIGFuCisgKiBUaGUgaHlwZXJ2aXNvciBjb3VsZCBub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIGJlY2F1c2UgYSBwYXJhbWV0ZXIgaGFzIGFuCiAgKiBpbnZhbGlkIGFsaWdubWVudC4KICAqLwogI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9BTElHTk1FTlQJCQkoKHUxNikweDAwMDQpCiAKIC8qCiAgKiBIVl9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIKLSAqIFRoZSBoeXBlcnZpc29yIGNvdWxkIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gYmVhY3VzZSBhbiBpbnZhbGlkIHBhcmFtZXRlcgorICogVGhlIGh5cGVydmlzb3IgY291bGQgbm90IHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBiZWNhdXNlIGFuIGludmFsaWQgcGFyYW1ldGVyCiAgKiB3YXMgc3BlY2lmaWVkLgogICovCiAjZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUgkJCSgodTE2KTB4MDAwNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl9rdnAuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl9rdnAuaAppbmRleCBlMDY5ZjU5Li44YzQwMmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfa3ZwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X2t2cC5oCkBAIC0zNiw3ICszNiw3IEBACiAgKiByZWdpc3RyeS4KICAqCiAgKiBOb3RlOiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGluIGRlZmluaW5nIHRoZSBLVlAgZXhjaGFuZ2UgbWVzc2FnZSAtIHRoaXMgdmFsdWUKLSAqIGNhbm5vdCBiZSBtb2RpZmllZCB3aXRob3V0IGFmZmVjdGluZyB0aGUgbWVzc2FnZSBzaXplIGFuZCBjb21wYXRhYmlsaXR5LgorICogY2Fubm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBtZXNzYWdlIHNpemUgYW5kIGNvbXBhdGliaWxpdHkuCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl9tb3VzZS5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X21vdXNlLmMKaW5kZXggNTAxNDdmOC4uMTE4YzdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X21vdXNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X21vdXNlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yMyw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlkZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgImh2X2FwaS5oIgogI2luY2x1ZGUgImxvZ2dpbmcuaCIKQEAgLTM3NCw3ICszNzYsNyBAQAogCSAgICAgICBkZXNjLT5kZXNjWzBdLndEZXNjcmlwdG9yTGVuZ3RoKTsKIAogCS8qIFNlbmQgdGhlIGFjayAqLwotCW1lbXNldCgmYWNrLCBzaXplb2Yoc3RydWN0IG1vdXNldnNjX3BydF9tc2cpLCAwKTsKKwltZW1zZXQoJmFjaywgMCwgc2l6ZW9mKHN0cnVjdCBtb3VzZXZzY19wcnRfbXNnKSk7CiAKIAlhY2sudHlwZSA9IFBpcGVNZXNzYWdlRGF0YTsKIAlhY2suc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3ludGhoaWRfZGV2aWNlX2luZm9fYWNrKTsKQEAgLTU5NSw3ICs1OTcsNyBAQAogCS8qCiAJICogTm93LCBpbml0aWF0ZSB0aGUgdnNjL3ZzcCBpbml0aWFsaXphdGlvbiBwcm90b2NvbCBvbiB0aGUgb3BlbiBjaGFubmVsCiAJICovCi0JbWVtc2V0KHJlcXVlc3QsIHNpemVvZihzdHJ1Y3QgbW91c2V2c2NfcHJ0X21zZyksIDApOworCW1lbXNldChyZXF1ZXN0LCAwLCBzaXplb2Yoc3RydWN0IG1vdXNldnNjX3BydF9tc2cpKTsKIAogCXJlcXVlc3QtPnR5cGUgPSBQaXBlTWVzc2FnZURhdGE7CiAJcmVxdWVzdC0+c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3ludGhoaWRfcHJvdG9jb2xfcmVxdWVzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3V0aWwuYwppbmRleCA0NzkyZjJjLi4yZGYxNTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl91dGlsLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJCQlleGVjdXRlX3NodXRkb3duID0gdHJ1ZTsKIAogCQkJCURQUklOVF9JTkZPKFZNQlVTLCAiU2h1dGRvd24gcmVxdWVzdCByZWNlaXZlZCAtIgotCQkJCQkgICAgIiBncmFjZWZ1bGwgc2h1dGRvd24gaW5pdGlhdGVkIik7CisJCQkJCSAgICAiIGdyYWNlZnVsIHNodXRkb3duIGluaXRpYXRlZCIpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlpY21zZ2hkcnAtPnN0YXR1cyA9IEhWX0VfRkFJTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCmluZGV4IDJkNDBmNWYuLjMzOTczNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwpAQCAtNDYsNiArNDYsNyBAQAogCS8qIHBvaW50IGJhY2sgdG8gb3VyIGRldmljZSBjb250ZXh0ICovCiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX2N0eDsKIAl1bnNpZ25lZCBsb25nIGF2YWlsOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKIAogCkBAIC0yMTksNiArMjIwLDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2Vfb2JqLT5kZXZpY2UpOworCXN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQgKm5kZXZfY3R4OwogCiAJaWYgKCFuZXQpIHsKIAkJRFBSSU5UX0VSUihORVRWU0NfRFJWLCAiZ290IGxpbmsgc3RhdHVzIGJ1dCBuZXQgZGV2aWNlICIKQEAgLTIzMCw2ICsyMzIsOCBAQAogCQluZXRpZl9jYXJyaWVyX29uKG5ldCk7CiAJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKIAkJbmV0aWZfbm90aWZ5X3BlZXJzKG5ldCk7CisJCW5kZXZfY3R4ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwkJc2NoZWR1bGVfd29yaygmbmRldl9jdHgtPndvcmspOwogCX0gZWxzZSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKQEAgLTMyOCw2ICszMzIsMjUgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcyA9CQlldGhfbWFjX2FkZHIsCiB9OwogCisvKgorICogU2VuZCBHQVJQIHBhY2tldCB0byBuZXR3b3JrIHBlZXJzIGFmdGVyIG1pZ3JhdGlvbnMuCisgKiBBZnRlciBRdWljayBNaWdyYXRpb24sIHRoZSBuZXR3b3JrIGlzIG5vdCBpbW1lZGlhdGVseSBvcGVyYXRpb25hbCBpbiB0aGUKKyAqIGN1cnJlbnQgY29udGV4dCB3aGVuIHJlY2VpdmluZyBSTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVCBldmVudC4gU28sIGFkZAorICogYW5vdGhlciBuZXRpZl9ub3RpZnlfcGVlcnMoKSBpbnRvIGEgc2NoZWR1bGVkIHdvcmssIG90aGVyd2lzZSBHQVJQIHBhY2tldAorICogd2lsbCBub3QgYmUgc2VudCBhZnRlciBxdWljayBtaWdyYXRpb24sIGFuZCBjYXVzZSBuZXR3b3JrIGRpc2Nvbm5lY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIG5ldHZzY19zZW5kX2dhcnAoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQgKm5kZXZfY3R4OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CisKKwltc2xlZXAoMjApOworCW5kZXZfY3R4ID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQsIHdvcmspOworCW5ldCA9IGRldl9nZXRfZHJ2ZGF0YSgmbmRldl9jdHgtPmRldmljZV9jdHgtPmRldmljZSk7CisJbmV0aWZfbm90aWZ5X3BlZXJzKG5ldCk7Cit9CisKKwogc3RhdGljIGludCBuZXR2c2NfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9CkBAIC0zNTMsNiArMzc2LDcgQEAKIAluZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eCA9IGRldmljZV9vYmo7CiAJbmV0X2RldmljZV9jdHgtPmF2YWlsID0gcmluZ19zaXplOwogCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIG5ldCk7CisJSU5JVF9XT1JLKCZuZXRfZGV2aWNlX2N0eC0+d29yaywgbmV0dnNjX3NlbmRfZ2FycCk7CiAKIAkvKiBOb3RpZnkgdGhlIG5ldHZzYyBkcml2ZXIgb2YgdGhlIG5ldyBkZXZpY2UgKi8KIAlyZXQgPSBuZXRfZHJ2X29iai0+YmFzZS5kZXZfYWRkKGRldmljZV9vYmosICZkZXZpY2VfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvcm5kaXNfZmlsdGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvcm5kaXNfZmlsdGVyLmMKaW5kZXggZTcxODljZC4uMDQ4Mzc2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJCXJldCA9IC0xOwogCQlEUFJJTlRfRVJSKE5FVFZTQywgInRpbWVvdXQgYmVmb3JlIHdlIGdvdCBhIHNldCByZXNwb25zZS4uLiIpOwogCQkvKgotCQkgKiBXZSBjYW50IGRlYWxsb2NhdGUgdGhlIHJlcXVlc3Qgc2luY2Ugd2UgbWF5IHN0aWxsIHJlY2VpdmUgYQorCQkgKiBXZSBjYW4ndCBkZWFsbG9jYXRlIHRoZSByZXF1ZXN0IHNpbmNlIHdlIG1heSBzdGlsbCByZWNlaXZlIGEKIAkJICogc2VuZCBjb21wbGV0aW9uIGZvciBpdC4KIAkJICovCiAJCWdvdG8gRXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi90b29scy9odl9rdnBfZGFlbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdG9vbHMvaHZfa3ZwX2RhZW1vbi5jCmluZGV4IGY1YTJkZDYuLjMzZjBmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi90b29scy9odl9rdnBfZGFlbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3Rvb2xzL2h2X2t2cF9kYWVtb24uYwpAQCAtMTAyLDIyICsxMDIsMjIgQEAKIHN0YXRpYyBjaGFyIGt2cF9yZWN2X2J1ZmZlcls0MDk2XTsKIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKIAotc3RhdGljIGNoYXIgb3NfbmFtZVsxMDBdOwotc3RhdGljIGNoYXIgb3NfbWFqb3JbNTBdOwotc3RhdGljIGNoYXIgb3NfbWlub3JbNTBdOwotc3RhdGljIGNoYXIgcHJvY2Vzc29yX2FyY2hbNTBdOwotc3RhdGljIGNoYXIgb3NfYnVpbGRbMTAwXTsKK3N0YXRpYyBjaGFyICpvc19uYW1lID0gIiI7CitzdGF0aWMgY2hhciAqb3NfbWFqb3IgPSAiIjsKK3N0YXRpYyBjaGFyICpvc19taW5vciA9ICIiOworc3RhdGljIGNoYXIgKnByb2Nlc3Nvcl9hcmNoOworc3RhdGljIGNoYXIgKm9zX2J1aWxkOwogc3RhdGljIGNoYXIgKmxpY192ZXJzaW9uOworc3RhdGljIHN0cnVjdCB1dHNuYW1lIHV0c19idWY7CiAKIHZvaWQga3ZwX2dldF9vc19pbmZvKHZvaWQpCiB7CiAJRklMRQkqZmlsZTsKLQljaGFyCSplb2w7Ci0Jc3RydWN0IHV0c25hbWUgYnVmOworCWNoYXIJKnAsIGJ1Zls1MTJdOwogCi0JdW5hbWUoJmJ1Zik7Ci0Jc3RyY3B5KG9zX2J1aWxkLCBidWYucmVsZWFzZSk7Ci0Jc3RyY3B5KHByb2Nlc3Nvcl9hcmNoLCBidWYubWFjaGluZSk7CisJdW5hbWUoJnV0c19idWYpOworCW9zX2J1aWxkID0gdXRzX2J1Zi5yZWxlYXNlOworCXByb2Nlc3Nvcl9hcmNoPSB1dHNfYnVmLm1hY2hpbmU7CiAKIAlmaWxlID0gZm9wZW4oIi9ldGMvU3VTRS1yZWxlYXNlIiwgInIiKTsKIAlpZiAoZmlsZSAhPSBOVUxMKQpAQCAtMTMyLDIxICsxMzIsNDYgQEAKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9zLgogCSAqLwotCXN0cmNweShvc19uYW1lLCAiTGludXgiKTsKLQlzdHJjcHkob3NfbWFqb3IsICIwIik7Ci0Jc3RyY3B5KG9zX21pbm9yLCAiMCIpOworCW9zX25hbWUgPSB1dHNfYnVmLnN5c25hbWU7CiAJcmV0dXJuOwogCiBrdnBfb3NpbmZvX2ZvdW5kOgotCWZnZXRzKG9zX25hbWUsIDk5LCBmaWxlKTsKLQllb2wgPSBpbmRleChvc19uYW1lLCAnXG4nKTsKLQkqZW9sID0gJ1wwJzsKLQlmZ2V0cyhvc19tYWpvciwgNDksIGZpbGUpOwotCWVvbCA9IGluZGV4KG9zX21ham9yLCAnXG4nKTsKLQkqZW9sID0gJ1wwJzsKLQlmZ2V0cyhvc19taW5vciwgNDksIGZpbGUpOwotCWVvbCA9IGluZGV4KG9zX21pbm9yLCAnXG4nKTsKLQkqZW9sID0gJ1wwJzsKKwkvKiB1cCB0byB0aHJlZSBsaW5lcyAqLworCXAgPSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKTsKKwlpZiAocCkgeworCQlwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChwKQorCQkJKnAgPSAnXDAnOworCQlwID0gc3RyZHVwKGJ1Zik7CisJCWlmICghcCkKKwkJCWdvdG8gZG9uZTsKKwkJb3NfbmFtZSA9IHA7CisKKwkJLyogc2Vjb25kIGxpbmUgKi8KKwkJcCA9IGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZpbGUpOworCQlpZiAocCkgeworCQkJcCA9IHN0cmNocihidWYsICdcbicpOworCQkJaWYgKHApCisJCQkJKnAgPSAnXDAnOworCQkJcCA9IHN0cmR1cChidWYpOworCQkJaWYgKCFwKQorCQkJCWdvdG8gZG9uZTsKKwkJCW9zX21ham9yID0gcDsKKworCQkJLyogdGhpcmQgbGluZSAqLworCQkJcCA9IGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZpbGUpOworCQkJaWYgKHApICB7CisJCQkJcCA9IHN0cmNocihidWYsICdcbicpOworCQkJCWlmIChwKQorCQkJCQkqcCA9ICdcMCc7CisJCQkJcCA9IHN0cmR1cChidWYpOworCQkJCWlmIChwKQorCQkJCQlvc19taW5vciA9IHA7CisJCQl9CisJCX0KKwl9CisKK2RvbmU6CiAJZmNsb3NlKGZpbGUpOwogCXJldHVybjsKIH0KQEAgLTIwMiw3ICsyMjcsNyBAQAogCiAJCQkvKgogCQkJICogV2Ugb25seSBzdXBwb3J0IEFGX0lORVQgYW5kIEFGX0lORVQ2Ci0JCQkgKiBhbmQgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIGlzIHNlcGVyYXRlZCBieSBhICI7Ii4KKwkJCSAqIGFuZCB0aGUgbGlzdCBvZiBhZGRyZXNzZXMgaXMgc2VwYXJhdGVkIGJ5IGEgIjsiLgogCQkJICovCiAJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciA9CiAJCQkJKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgY3VycC0+aWZhX2FkZHI7CkBAIC0yOTMsNyArMzE4LDcgQEAKIAlyZXR1cm4gc2VuZG1zZyhmZCwgJm1lc3NhZ2UsIDApOwogfQogCi1tYWluKHZvaWQpCitpbnQgbWFpbih2b2lkKQogewogCWludCBmZCwgbGVuLCBzb2NrX29wdDsKIAlpbnQgZXJyb3I7CkBAIC0zMDEsOSArMzI2LDEwIEBACiAJc3RydWN0IHBvbGxmZCBwZmQ7CiAJc3RydWN0IG5sbXNnaGRyICppbmNvbWluZ19tc2c7CiAJc3RydWN0IGNuX21zZwkqaW5jb21pbmdfY25fbXNnOworCXN0cnVjdCBodl9rdV9tc2cgKmh2X21zZzsKKwljaGFyCSpwOwogCWNoYXIJKmtleV92YWx1ZTsKIAljaGFyCSprZXlfbmFtZTsKLQlpbnQJIGtleV9pbmRleDsKIAogCWRhZW1vbigxLCAwKTsKIAlvcGVubG9nKCJLVlAiLCAwLCBMT0dfVVNFUik7CkBAIC0zNzMsOSArMzk5LDEwIEBACiAJCQkgKiBEcml2ZXIgaXMgcmVnaXN0ZXJpbmcgd2l0aCB1czsgc3Rhc2ggYXdheSB0aGUgdmVyc2lvbgogCQkJICogaW5mb3JtYXRpb24uCiAJCQkgKi8KLQkJCWxpY192ZXJzaW9uID0gbWFsbG9jKHN0cmxlbihpbmNvbWluZ19jbl9tc2ctPmRhdGEpICsgMSk7CisJCQlwID0gKGNoYXIgKilpbmNvbWluZ19jbl9tc2ctPmRhdGE7CisJCQlsaWNfdmVyc2lvbiA9IG1hbGxvYyhzdHJsZW4ocCkgKyAxKTsKIAkJCWlmIChsaWNfdmVyc2lvbikgewotCQkJCXN0cmNweShsaWNfdmVyc2lvbiwgaW5jb21pbmdfY25fbXNnLT5kYXRhKTsKKwkJCQlzdHJjcHkobGljX3ZlcnNpb24sIHApOwogCQkJCXN5c2xvZyhMT0dfSU5GTywgIktWUCBMSUMgVmVyc2lvbjogJXMiLAogCQkJCQlsaWNfdmVyc2lvbik7CiAJCQl9IGVsc2UgewpAQCAtMzg5LDE0ICs0MTYsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJa2V5X2luZGV4ID0KLQkJKChzdHJ1Y3QgaHZfa3VfbXNnICopaW5jb21pbmdfY25fbXNnLT5kYXRhKS0+a3ZwX2luZGV4OwotCQlrZXlfbmFtZSA9Ci0JCSgoc3RydWN0IGh2X2t1X21zZyAqKWluY29taW5nX2NuX21zZy0+ZGF0YSktPmt2cF9rZXk7Ci0JCWtleV92YWx1ZSA9Ci0JCSgoc3RydWN0IGh2X2t1X21zZyAqKWluY29taW5nX2NuX21zZy0+ZGF0YSktPmt2cF92YWx1ZTsKKwkJaHZfbXNnID0gKHN0cnVjdCBodl9rdV9tc2cgKilpbmNvbWluZ19jbl9tc2ctPmRhdGE7CisJCWtleV9uYW1lID0gKGNoYXIgKilodl9tc2ctPmt2cF9rZXk7CisJCWtleV92YWx1ZSA9IChjaGFyICopaHZfbXNnLT5rdnBfdmFsdWU7CiAKLQkJc3dpdGNoIChrZXlfaW5kZXgpIHsKKwkJc3dpdGNoIChodl9tc2ctPmt2cF9pbmRleCkgewogCQljYXNlIEZ1bGx5UXVhbGlmaWVkRG9tYWluTmFtZToKIAkJCWt2cF9nZXRfZG9tYWluX25hbWUoa2V5X3ZhbHVlLAogCQkJCQlIVl9LVlBfRVhDSEFOR0VfTUFYX1ZBTFVFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCmluZGV4IGI0NzNmNDYuLjc5MDg5ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCWV2ZW50ID0gKHVuaW9uIGh2X3N5bmljX2V2ZW50X2ZsYWdzICopcGFnZV9hZGRyICsgVk1CVVNfTUVTU0FHRV9TSU5UOwogCiAJLyogU2luY2Ugd2UgYXJlIGEgY2hpbGQsIHdlIG9ubHkgbmVlZCB0byBjaGVjayBiaXQgMCAqLwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKikgJmV2ZW50LT5mbGFnczMyWzBdKSkgeworCWlmIChzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKSAmZXZlbnQtPmZsYWdzMzJbMF0pKSB7CiAJCURQUklOVF9EQkcoVk1CVVMsICJyZWNlaXZlZCBldmVudCAlZCIsIGV2ZW50LT5mbGFnczMyWzBdKTsKIAkJcmV0IHw9IDB4MjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfcHJpdmF0ZS5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX3ByaXZhdGUuaAppbmRleCBjYTA1MGE0Li42ZjBkOGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19wcml2YXRlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjaGFubmVsX21nbXQuaCIKICNpbmNsdWRlICJyaW5nX2J1ZmZlci5oIgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vc3luY19iaXRvcHMuaD4KIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2lpb191dGlscy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2lpb191dGlscy5oCmluZGV4IDgwOTU3MjcuLmZkNzhlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9paW9fdXRpbHMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vaWlvX3V0aWxzLmgKQEAgLTU1Niw3ICs1NTYsNyBAQAogCQlpZiAoc3RyY21wKHRlbXAsIHZhbCkgIT0gMCkgewogCQkJcHJpbnRmKCJQb3NzaWJsZSBmYWlsdXJlIGluIHN0cmluZyB3cml0ZSBvZiAlcyAiCiAJCQkJIlNob3VsZCBiZSAlcyAiCi0JCQkJIndyaXRlbiB0byAlc1wlc1xuIiwKKwkJCQkid3JpdHRlbiB0byAlc1wlc1xuIiwKIAkJCQl0ZW1wLAogCQkJCXZhbCwKIAkJCQliYXNlZGlyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDEuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxLmgKaW5kZXggYzliZjIyYy4uMjNmZTU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMS5oCkBAIC03MCw3ICs3MCw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MjAxX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oCmluZGV4IGIzOTMyM2UuLmI4ODY4ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDMuaApAQCAtNjUsNyArNjUsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjIwM19zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDQuaAppbmRleCBlOWVkN2NiLi5lNjE4NDQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNC5oCkBAIC03Myw3ICs3Myw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oCmluZGV4IDRlOTc1OTYuLjhiMGRhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDkuaApAQCAtMTA5LDcgKzEwOSw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMC5oCmluZGV4IDcwMTMzMTQuLjRkNTc1OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjAuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MjIwX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MC5oCmluZGV4IDUxYTgwN2QuLjc2YTQ1NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDAuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcS5oCmluZGV4IDU3OWIzYTIuLjExNDAyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHEuaApAQCAtNTcsNyArNTcsNyBAQAogLyogUmVib290IG1lbW9yeSBjb250ZW50ICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfQ1RSTF8yX1JFQk9PVF9NRU1PUlkJMHgxMAogCi0vKiBJbnRlcnVwdCBFbmFibGUgLSBhcHBsaWVzIGRhdGEgcmVhZHkgdG8gdGhlIFJEWSBwYWQgKi8KKy8qIEludGVycnVwdCBFbmFibGUgLSBhcHBsaWVzIGRhdGEgcmVhZHkgdG8gdGhlIFJEWSBwYWQgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19DVFJMXzJfRU5BQkxFX0lOVEVSUlVQVAkweDA4CiAKIC8qIEVuYWJsZSBEYXRhIFJlYWR5IEdlbmVyYXRpb24gLSByZWxhdGlvbnNoaXAgd2l0aCBwcmV2aW91cyB1bmNsZWFyIGluIGRvY3MgKi8KQEAgLTcwLDM0ICs3MCwzNCBAQAogICogLSBvcHRpb24gZm9yIDE2IGJpdCBsZWZ0IGp1c3RpZmllZCAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX0NUUkxfMl9EQVRBX0FMSUdOTUVOVF8xNl9CSVRfTEVGVF9KVVNUSUZJRUQJMHgwMQogCi0vKiBJbnRlcnVwdCByZWxhdGVkIHN0dWZmICovCisvKiBJbnRlcnJ1cHQgcmVsYXRlZCBzdHVmZiAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0FERFIJCQkweDIzCiAKIC8qIFN3aXRjaCBmcm9tIG9yIGNvbWJpbmF0aW9uIGZvIGNvbmRpdGlvbnMgdG8gYW5kICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQk9PTEVBTl9BTkQJCTB4ODAKIAotLyogTGF0Y2ggaW50ZXJ1cHQgcmVxdWVzdCwKKy8qIExhdGNoIGludGVycnVwdCByZXF1ZXN0LAogICogaWYgb24gYWNrIG11c3QgYmUgZ2l2ZW4gYnkgcmVhZGluZyB0aGUgYWNrIHJlZ2lzdGVyICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfTEFUQ0hfU1JDCQkweDQwCiAKLS8qIFogSW50ZXJ1cHQgb24gSGlnaCAoYWJvdmUgdGhyZXNob2xkKSovCisvKiBaIEludGVycnVwdCBvbiBIaWdoIChhYm92ZSB0aHJlc2hvbGQpKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19JTlRFUlJVUFRfWl9ISUdICTB4MjAKLS8qIFogSW50ZXJ1cHQgb24gTG93ICovCisvKiBaIEludGVycnVwdCBvbiBMb3cgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19JTlRFUlJVUFRfWl9MT1cJMHgxMAotLyogWSBJbnRlcnVwdCBvbiBIaWdoICovCisvKiBZIEludGVycnVwdCBvbiBIaWdoICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfSU5URVJSVVBUX1lfSElHSAkweDA4Ci0vKiBZIEludGVydXB0IG9uIExvdyAqLworLyogWSBJbnRlcnJ1cHQgb24gTG93ICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfSU5URVJSVVBUX1lfTE9XCTB4MDQKLS8qIFggSW50ZXJ1cHQgb24gSGlnaCAqLworLyogWCBJbnRlcnJ1cHQgb24gSGlnaCAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0lOVEVSUlVQVF9YX0hJR0gJMHgwMgotLyogWCBJbnRlcnVwdCBvbiBMb3cgKi8KKy8qIFggSW50ZXJydXB0IG9uIExvdyAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0lOVEVSUlVQVF9YX0xPVyAweDAxCiAKLS8qIFJlZ2lzdGVyIHRoYXQgZ2l2ZXMgZGVzY3JpcHRpb24gb2Ygd2hhdCBjYXVzZWQgaW50ZXJ1cHQKKy8qIFJlZ2lzdGVyIHRoYXQgZ2l2ZXMgZGVzY3JpcHRpb24gb2Ygd2hhdCBjYXVzZWQgaW50ZXJydXB0CiAgKiAtIGxhdGNoZWQgaWYgc2V0IGluIENGR19BRERSRVMgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19BRERSCQkJMHgyNAogLyogdG9wIGJpdCBpZ25vcmVkICovCi0vKiBJbnRlcnVwdCBBY3RpdmUgKi8KKy8qIEludGVycnVwdCBBY3RpdmUgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfQUNUSVZBVEVECTB4NDAKIC8qIEludGVydXB0cyB0aGF0IGhhdmUgYmVlbiB0cmlnZ2VyZWQgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfWl9ISUdICTB4MjAKQEAgLTEyMyw3ICsxMjMsNyBAQAogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1NUQVRVU19YX05FV19EQVRBCQkJMHgwMQogCiAvKiBUaGUgYWNjZWxlcm9tZXRlciByZWFkaW5ncyAtIGxvdyBhbmQgaGlnaCBieXRlcy4KLUZvcm0gb2YgaGlnaCBieXRlIGRlcGVuZGFudCBvbiBqdXN0aWZpY2F0aW9uIHNldCBpbiBjdHJsIHJlZyAqLworRm9ybSBvZiBoaWdoIGJ5dGUgZGVwZW5kZW50IG9uIGp1c3RpZmljYXRpb24gc2V0IGluIGN0cmwgcmVnICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfT1VUX1hfTF9BRERSCQkJMHgyOAogI2RlZmluZSBMSVMzTDAyRFFfUkVHX09VVF9YX0hfQUREUgkJCTB4MjkKICNkZWZpbmUgTElTM0wwMkRRX1JFR19PVVRfWV9MX0FERFIJCQkweDJBCkBAIC0xNTUsNyArMTU1LDcgQEAKICAqIEBpbnRlcjoJCXVzZWQgdG8gY2hlY2sgaWYgbmV3IGludGVycnVwdCBoYXMgYmVlbiB0cmlnZ2VyZWQKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGxpczNsMDJkcV9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9jb3JlLmMKaW5kZXggYzRiNGFiNy4uMzA2N2Y5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX2NvcmUuYwpAQCAtNzcsNyArNzcsNyBAQAogLyoqCiAgKiBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCkgLSB3cml0ZSBzaW5nbGUgYnl0ZSB0byBhIHJlZ2lzdGVyCiAgKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCi0gKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSB3cml0ZW4KKyAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4KICAqIEB2YWw6IHRoZSB2YWx1ZSB0byB3cml0ZQogICoqLwogaW50IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jCmluZGV4IDJjNDYxYTMuLjUyOWEzY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9yaW5nLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogLyoqCiAgKiBsaXMzbDAyZHFfcmVhZF9hbGwoKSBSZWFkcyBhbGwgY2hhbm5lbHMgY3VycmVudGx5IHNlbGVjdGVkCiAgKiBAc3Q6CQlkZXZpY2Ugc3BlY2lmaWMgc3RhdGUKLSAqIEByeF9hcnJheToJKGRtYSBjYXBhYmxlKSByZWNpZXZlIGFycmF5LCBtdXN0IGJlIGF0IGxlYXN0CisgKiBAcnhfYXJyYXk6CShkbWEgY2FwYWJsZSkgcmVjZWl2ZSBhcnJheSwgbXVzdCBiZSBhdCBsZWFzdAogICoJCTQqbnVtYmVyIG9mIGNoYW5uZWxzCiAgKiovCiBzdGF0aWMgaW50IGxpczNsMDJkcV9yZWFkX2FsbChzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCwgdTggKnJ4X2FycmF5KQpAQCAtNDA5LDcgKzQwOSw3IEBACiAgKgogICogQXMgdGhlIHRyaWdnZXIgbWF5IG9jY3VyIG9uIGFueSBkYXRhIGVsZW1lbnQgYmVpbmcgdXBkYXRlZCBpdCBpcwogICogcmVhbGx5IHJhdGhlciBsaWtlbHkgdG8gb2NjdXIgZHVyaW5nIHRoZSByZWFkIGZyb20gdGhlIHByZXZpb3VzCi0gKiB0cmlnZ2VyIGV2ZW50LiAgVGhlIG9ubHkgd2F5IHRvIGRpc2NvdmVyIGlmIHRoaXMgaGFzIG9jY3VyZWQgb24KKyAqIHRyaWdnZXIgZXZlbnQuICBUaGUgb25seSB3YXkgdG8gZGlzY292ZXIgaWYgdGhpcyBoYXMgb2NjdXJyZWQgb24KICAqIGJvYXJkcyBub3Qgc3VwcG9ydGluZyBsZXZlbCBpbnRlcnJ1cHRzIGlzIHRvIHRha2UgYSBsb29rIGF0IHRoZSBsaW5lLgogICogSWYgaXQgaXMgaW5kaWNhdGluZyBhbm90aGVyIGludGVycnVwdCBhbmQgd2UgZG9uJ3Qgc2VlbSB0byBoYXZlIGEKICAqIGhhbmRsZXIgbG9va2luZyBhdCBpdCwgdGhlbiB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgY29yZSB0aGF0IHdlIG5lZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmgKaW5kZXggMjM4OTI4NC4uZGI3MTAzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmgKQEAgLTE4NSw3ICsxODUsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3Qgc2NhMzAwMF9jaGlwX2luZm8gLSBtb2RlbCBkZXBlbmRhbnQgcGFyYW1ldGVycworICogc3RydWN0IHNjYTMwMDBfY2hpcF9pbmZvIC0gbW9kZWwgZGVwZW5kZW50IHBhcmFtZXRlcnMKICAqIEBuYW1lOiAJCQltb2RlbCBpZGVudGlmaWNhdGlvbgogICogQHNjYWxlOgkJCXN0cmluZyBjb250YWluaW5nIGZsb2F0aW5nIHBvaW50IHNjYWxlIGZhY3RvcgogICogQHRlbXBfb3V0cHV0OgkJc29tZSBkZXZpY2VzIGhhdmUgdGVtcGVyYXR1cmUgc2Vuc29ycy4KQEAgLTIxMyw3ICsyMTMsNyBAQAogICogc2NhMzAwMF9yZWFkX2RhdGEoKSByZWFkIGEgc2VyaWVzIG9mIHZhbHVlcyBmcm9tIHRoZSBkZXZpY2UKICAqIEBkZXY6CQlkZXZpY2UKICAqIEByZWdfYWRkcmVzc19oaWdoOglzdGFydCBhZGRyZXNzIChkZWNyZW1lbnRlZCByZWFkKQotICogQHJ4OgkJCXBvaW50ZXIgd2hlcmUgcmVjaWV2ZWQgZGF0YSBpcyBwbGFjZWQuIENhbGxlZQorICogQHJ4OgkJCXBvaW50ZXIgd2hlcmUgcmVjZWl2ZWQgZGF0YSBpcyBwbGFjZWQuIENhbGxlZQogICoJCQlyZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGlzLgogICogQGxlbjoJCW51bWJlciBvZiBieXRlcyB0byByZWFkCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9yaW5nLmMKaW5kZXggYzg3MmZkZC4uYTczMGE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfcmluZy5jCkBAIC00Myw3ICs0Myw3IEBACiAgKgkJCWxlYWRpbmcgYnl0ZSB1c2VkIGluIGJ1cyBjb21tcy4KICAqCiAgKiBDdXJyZW50bHkgZG9lcyBub3QgcHJvdmlkZSB0aW1lc3RhbXBzLiAgQXMgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYWRkIHRoZW0gdGhleQotICogY2FuIG9ubHkgYmUgaW5mZXJyZWQgYXByb3hpbWF0ZWx5IGZyb20gcmluZyBidWZmZXIgZXZlbnRzIHN1Y2ggYXMgNTAlIGZ1bGwKKyAqIGNhbiBvbmx5IGJlIGluZmVycmVkIGFwcHJveGltYXRlbHkgZnJvbSByaW5nIGJ1ZmZlciBldmVudHMgc3VjaCBhcyA1MCUgZnVsbAogICogYW5kIGtub3dsZWRnZSBvZiB3aGVuIGJ1ZmZlciB3YXMgbGFzdCBlbXB0aWVkLiAgVGhpcyBpcyBsZWZ0IHRvIHVzZXJzcGFjZS4KICAqKi8KIHN0YXRpYyBpbnQgc2NhMzAwMF9yaXBfaHdfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5OF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOThfcmluZy5jCmluZGV4IDE5ZDFhY2UuLjkwNjhkN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5OF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3Mjk4X3JpbmcuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAvKioKICAqIGFkNzI5OF9wb2xsX2Z1bmNfdGgoKSB0aCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKICAqCi0gKiBBcyBzYW1wbGluZyBvbmx5IG9jY3VycyBvbiBzcGkgY29tbXMgb2NjdXJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAorICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gc3BpIGNvbW1zIG9jY3VycmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCiAgKiB0aGVuLiAgU29tZSB0cmlnZ2VycyB3aWxsIGdlbmVyYXRlIHRoZWlyIG93biB0aW1lIHN0YW1wLiAgQ3VycmVudGx5CiAgKiB0aGVyZSBpcyBubyB3YXkgb2Ygbm90aWZ5aW5nIHRoZW0gd2hlbiBubyBvbmUgY2FyZXMuCiAgKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X3JpbmcuYwppbmRleCAxZDY1NGM4Li45MmQ5Mzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9yaW5nLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogLyoqCiAgKiBhZDc0NzZfcG9sbF9mdW5jX3RoKCkgdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKgotICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKKyAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIGkyYyBjb21tcyBvY2N1cnJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAogICogdGhlbi4gIFNvbWUgdHJpZ2dlcnMgd2lsbCBnZW5lcmF0ZSB0aGVpciBvd24gdGltZSBzdGFtcC4gIEN1cnJlbnRseQogICogdGhlcmUgaXMgbm8gd2F5IG9mIG5vdGlmeWluZyB0aGVtIHdoZW4gbm8gb25lIGNhcmVzLgogICoqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19yaW5nLmMKaW5kZXggMmQ3ZmU2NS4uZGE3N2YyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfcmluZy5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIC8qKgogICogYWQ3ODg3X3BvbGxfZnVuY190aCgpIHRoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgogICoKLSAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIHNwaSBjb21tcyBvY2N1cmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCisgKiBBcyBzYW1wbGluZyBvbmx5IG9jY3VycyBvbiBzcGkgY29tbXMgb2NjdXJyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKICAqIHRoZW4uICBTb21lIHRyaWdnZXJzIHdpbGwgZ2VuZXJhdGUgdGhlaXIgb3duIHRpbWUgc3RhbXAuICBDdXJyZW50bHkKICAqIHRoZXJlIGlzIG5vIHdheSBvZiBub3RpZnlpbmcgdGhlbSB3aGVuIG5vIG9uZSBjYXJlcy4KICAqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCmluZGV4IGU1MDg0MWIuLmYwNGU2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIAltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOwogCW1hc2sgPSAxIDw8IHRoaXNfYXR0ci0+YWRkcmVzczsKLQkvKiBJZiByaW5nIGJ1ZmZlciBjYXB0dXJlIGlzIG9jY3VyaW5nLCBxdWVyeSB0aGUgYnVmZmVyICovCisJLyogSWYgcmluZyBidWZmZXIgY2FwdHVyZSBpcyBvY2N1cnJpbmcsIHF1ZXJ5IHRoZSBidWZmZXIgKi8KIAlpZiAoaWlvX3JpbmdfZW5hYmxlZChkZXZfaW5mbykpIHsKIAkJZGF0YSA9IHJldCA9IGFkNzk5eF9zaW5nbGVfY2hhbm5lbF9mcm9tX3Jpbmcoc3QsIG1hc2spOwogCQlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfcmluZy5jCmluZGV4IDU2YWJjMzkuLjA4NzVhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X3JpbmcuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAvKioKICAqIGFkNzk5eF9wb2xsX2Z1bmNfdGgoKSB0aCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKICAqCi0gKiBBcyBzYW1wbGluZyBvbmx5IG9jY3VycyBvbiBpMmMgY29tbXMgb2NjdXJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAorICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VycmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCiAgKiB0aGVuLiAgU29tZSB0cmlnZ2VycyB3aWxsIGdlbmVyYXRlIHRoZWlyIG93biB0aW1lIHN0YW1wLiAgQ3VycmVudGx5CiAgKiB0aGVyZSBpcyBubyB3YXkgb2Ygbm90aWZ5aW5nIHRoZW0gd2hlbiBubyBvbmUgY2FyZXMuCiAgKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfY29yZS5jCmluZGV4IGRkZTA5N2EuLmRlODNjM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfY29yZS5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCi0JLyogSWYgcmluZyBidWZmZXIgY2FwdHVyZSBpcyBvY2N1cmluZywgcXVlcnkgdGhlIGJ1ZmZlciAqLworCS8qIElmIHJpbmcgYnVmZmVyIGNhcHR1cmUgaXMgb2NjdXJyaW5nLCBxdWVyeSB0aGUgYnVmZmVyICovCiAJaWYgKGlpb19yaW5nX2VuYWJsZWQoZGV2X2luZm8pKSB7CiAJCW1hc2sgPSBtYXgxMzYzX21vZGVfdGFibGVbdGhpc19hdHRyLT5hZGRyZXNzXS5tb2RlbWFzazsKIAkJZGF0YSA9IG1heDEzNjNfc2luZ2xlX2NoYW5uZWxfZnJvbV9yaW5nKG1hc2ssIHN0KTsKQEAgLTE0MjUsNyArMTQyNSw3IEBACiB9CiAKIC8qCi0gKiBUbyBrZWVwIHRoaXMgbWFuYWdhYmxlIHdlIGFsd2F5cyB1c2Ugb25lIG9mIDMgc2NhbiBtb2Rlcy4KKyAqIFRvIGtlZXAgdGhpcyBtYW5hZ2VhYmxlIHdlIGFsd2F5cyB1c2Ugb25lIG9mIDMgc2NhbiBtb2Rlcy4KICAqIFNjYW4gMC4uLjMsIDAtMSwyLTMgYW5kIDEtMCwzLTIKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19tYXgxMzYzX2NoZWNrX2V2ZW50X21hc2soaW50IHRoaXNtYXNrLCBpbnQgY2hlY2ttYXNrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYwppbmRleCA1NTMyZjNlLi5kMzZmY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAvKioKICAqIG1heDEzNjNfcG9sbF9mdW5jX3RoKCkgLSB0aCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKICAqCi0gKiBBcyBzYW1wbGluZyBvbmx5IG9jY3VycyBvbiBpMmMgY29tbXMgb2NjdXJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAorICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VycmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCiAgKiB0aGVuLiAgU29tZSB0cmlnZ2VycyB3aWxsIGdlbmVyYXRlIHRoZWlyIG93biB0aW1lIHN0YW1wLiAgQ3VycmVudGx5CiAgKiB0aGVyZSBpcyBubyB3YXkgb2Ygbm90aWZ5aW5nIHRoZW0gd2hlbiBubyBvbmUgY2FyZXMuCiAgKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2NocmRldi5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaAppbmRleCA5OGQxYTJjLi40ZmNiOTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2NocmRldi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vY2hyZGV2LmgKQEAgLTMzLDcgKzMzLDcgQEAKIC8qKgogICogc3RydWN0IGlpb19ldmVudF9kYXRhIC0gVGhlIGFjdHVhbCBldmVudCBiZWluZyBwdXNoZWQgdG8gdXNlcnNwYWNlCiAgKiBAaWQ6CQlldmVudCBpZGVudGlmaWVyCi0gKiBAdGltZXN0YW1wOgliZXN0IGVzdGltYXRlIG9mIHRpbWUgb2YgZXZlbnQgb2NjdXJhbmNlIChvZnRlbiBmcm9tCisgKiBAdGltZXN0YW1wOgliZXN0IGVzdGltYXRlIG9mIHRpbWUgb2YgZXZlbnQgb2NjdXJyZW5jZSAob2Z0ZW4gZnJvbQogICoJCXRoZSBpbnRlcnJ1cHQgaGFuZGxlcikKICAqLwogc3RydWN0IGlpb19ldmVudF9kYXRhIHsKQEAgLTQyLDcgKzQyLDcgQEAKIH07CiAKIC8qKgotICogc3RydWN0IGlpb19kZXRlY3RlZF9ldmVudF9saXN0IC0gbGlzdCBlbGVtZW50IGZvciBldmVudHMgdGhhdCBoYXZlIG9jY3VyZWQKKyAqIHN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdCAtIGxpc3QgZWxlbWVudCBmb3IgZXZlbnRzIHRoYXQgaGF2ZSBvY2N1cnJlZAogICogQGxpc3Q6CQlsaW5rZWQgbGlzdCBoZWFkZXIKICAqIEBldjoJCQl0aGUgZXZlbnQgaXRzZWxmCiAgKiBAc2hhcmVkX3BvaW50ZXI6CXVzZWQgd2hlbiB0aGUgZXZlbnQgaXMgc2hhcmVkIC0gaS5lLiBjYW4gYmUgZXNjYWxsYXRlZApAQCAtOTgsNyArOTgsNyBAQAogICogQGxpc3Q6CQlsaXN0IGhlYWRlcgogICogQHJlZmNvdW50OgkJYXMgdGhlIGhhbmRsZXIgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIGRldmljZQogICoJCQlzaWRlIGV2ZW50cywgcmVmZXJlbmNlIGNvdW50aW5nIGVuc3VyZXMgY2xlYW4gcmVtb3ZhbAotICogQGV4aXN0X2xvY2s6CQlwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byByZWZjb3VudCB1c2VhZ2UuCisgKiBAZXhpc3RfbG9jazoJCXByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHJlZmNvdW50IHVzYWdlLgogICogQGhhbmRsZXI6CQlldmVudCBoYW5kbGVyIGZ1bmN0aW9uIC0gY2FsbGVkIG9uIGV2ZW50IGlmIHRoaXMKICAqCQkJZXZlbnRfaGFuZGxlciBpcyBlbmFibGVkLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwNjBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA2MF9jb3JlLmMKaW5kZXggNzAwZWIzOS4uYWU1M2U3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA2MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA2MF9jb3JlLmMKQEAgLTMwLDcgKzMwLDcgQEAKICAqIEB1c193OgkJYWN0dWFsIHNwaV9kZXZpY2UgdG8gd3JpdGUgY29uZmlnCiAgKiBAdXNfcjoJCWFjdHVhbCBzcGlfZGV2aWNlIHRvIHJlYWQgYmFjayBkYXRhCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQotICogQGJ1ZjoJCXRyYW5zbWl0IG9yIHJlY2lldmUgYnVmZmVyCisgKiBAYnVmOgkJdHJhbnNtaXQgb3IgcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MDYwX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwODBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA4MF9jb3JlLmMKaW5kZXggZmI0MzM2Yy4uZWY5ZTMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA4MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA4MF9jb3JlLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqIHN0cnVjdCBhZGlzMTYwODBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlIHRvIHdyaXRlIGRhdGEKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAYnVmOgkJdHJhbnNtaXQgb3IgcmVjaWV2ZSBidWZmZXIKKyAqIEBidWY6CQl0cmFuc21pdCBvciByZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBhZGlzMTYwODBfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oCmluZGV4IGMxZmQ0MzY0Li4xMzY5NTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oCkBAIC05MSw3ICs5MSw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiBAbmVnYXRlOgkJbmVnYXRlIHRoZSBzY2FsZSBwYXJhbWV0ZXIKICAqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oCmluZGV4IDI0OGJkZDIuLjcxMjdmMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9paW8uaApAQCAtOTIsNyArOTIsNyBAQAogICoJCQljaGFuZ2VzCiAgKiBAYXZhaWxhYmxlX3NjYW5fbWFza3M6IFtEUklWRVJdIG9wdGlvbmFsIGFycmF5IG9mIGFsbG93ZWQgYml0bWFza3MKICAqIEB0cmlnOgkJW0lOVEVSTl0gY3VycmVudCBkZXZpY2UgdHJpZ2dlciAocmluZyBidWZmZXIgbW9kZXMpCi0gKiBAcG9sbGZ1bmM6CQlbRFJJVkVSXSBmdW5jdGlvbiBydW4gb24gdHJpZ2dlciBiZWluZyByZWNpZXZlZAorICogQHBvbGxmdW5jOgkJW0RSSVZFUl0gZnVuY3Rpb24gcnVuIG9uIHRyaWdnZXIgYmVpbmcgcmVjZWl2ZWQKICAqKi8KIHN0cnVjdCBpaW9fZGV2IHsKIAlpbnQJCQkJaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMC5oCmluZGV4IDFmMjVkNjguLmMwOTU3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMC5oCkBAIC05OSw3ICs5OSw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwLmgKaW5kZXggYjAwMDAxZS4uYjFhZDQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwLmgKQEAgLTEwNSw3ICsxMDUsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMC5oCmluZGV4IDZmZjMzZTEuLmUzMjhiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMC5oCkBAIC0xNyw3ICsxNyw4IEBACiAjaWZuZGVmIFNQSV9BRElTMTY0MDBfSF8KICNkZWZpbmUgU1BJX0FESVMxNjQwMF9IXwogCi0jZGVmaW5lIEFESVMxNjQwMF9TVEFSVFVQX0RFTEFZCTIyMCAvKiBtcyAqLworI2RlZmluZSBBRElTMTY0MDBfU1RBUlRVUF9ERUxBWQkyOTAgLyogbXMgKi8KKyNkZWZpbmUgQURJUzE2NDAwX01URVNUX0RFTEFZIDkwIC8qIG1zICovCiAKICNkZWZpbmUgQURJUzE2NDAwX1JFQURfUkVHKGEpICAgIGEKICNkZWZpbmUgQURJUzE2NDAwX1dSSVRFX1JFRyhhKSAoKGEpIHwgMHg4MCkKQEAgLTEzMSw3ICsxMzIsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX2NvcmUuYwppbmRleCBjZmIxMDhhLi41NDBiZGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9jb3JlLmMKQEAgLTYsNiArNiw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA5IE1hbnVlbCBTdGFobCA8bWFudWVsLnN0YWhsQGlpcy5mcmF1bmhvZmVyLmRlPgogICogQ29weXJpZ2h0IChjKSAyMDA3IEpvbmF0aGFuIENhbWVyb24gPGppYzIzQGNhbS5hYy51az4KKyAqIENvcHlyaWdodCAoYykgMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC05Myw3ICs5NCw2IEBACiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCiAJCX0sCiAJfTsKIApAQCAtMTM3LDcgKzEzNyw2IEBACiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKIAkJfSwKIAl9OwogCkBAIC0zNzUsNyArMzc0LDcgQEAKIAkJZGV2X2VycihkZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHNlbGYgdGVzdCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQotCisJbXNsZWVwKEFESVMxNjQwMF9NVEVTVF9ERUxBWSk7CiAJYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhkZXYpOwogCiBlcnJfcmV0OgpAQCAtNDcxLDEwICs0NzAsMTEgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXQ7CiAKLQlpZiAocHJvZF9pZCAhPSBBRElTMTY0MDBfUFJPRFVDVF9JRF9ERUZBVUxUKQorCWlmICgocHJvZF9pZCAmIDB4RjAwMCkgIT0gQURJUzE2NDAwX1BST0RVQ1RfSURfREVGQVVMVCkKIAkJZGV2X3dhcm4oZGV2LCAidW5rbm93biBwcm9kdWN0IGlkIik7CiAKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IHByb2RfaWQgMHglMDR4IGF0IENTJWQgKGlycSAlZClcbiIsCisKKwlkZXZfaW5mbyhkZXYsICI6IHByb2RfaWQgMHglMDR4IGF0IENTJWQgKGlycSAlZClcbiIsCiAJCQlwcm9kX2lkLCBzdC0+dXMtPmNoaXBfc2VsZWN0LCBzdC0+dXMtPmlycSk7CiAKIAkvKiB1c2UgaGlnaCBzcGkgc3BlZWQgaWYgcG9zc2libGUgKi8KQEAgLTQ5NywxMiArNDk3LDEyIEBACiAJCQlfcmVnKQogCiBzdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhHWVJPX1gsIEFESVMxNjQwMF9YR1lST19PRkYpOwotc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoR1lST19ZLCBBRElTMTY0MDBfWEdZUk9fT0ZGKTsKLXN0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEdZUk9fWiwgQURJUzE2NDAwX1hHWVJPX09GRik7CitzdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhHWVJPX1ksIEFESVMxNjQwMF9ZR1lST19PRkYpOworc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoR1lST19aLCBBRElTMTY0MDBfWkdZUk9fT0ZGKTsKIAogc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoQUNDRUxfWCwgQURJUzE2NDAwX1hBQ0NMX09GRik7Ci1zdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhBQ0NFTF9ZLCBBRElTMTY0MDBfWEFDQ0xfT0ZGKTsKLXN0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEFDQ0VMX1osIEFESVMxNjQwMF9YQUNDTF9PRkYpOworc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoQUNDRUxfWSwgQURJUzE2NDAwX1lBQ0NMX09GRik7CitzdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhBQ0NFTF9aLCBBRElTMTY0MDBfWkFDQ0xfT0ZGKTsKIAogCiBzdGF0aWMgSUlPX0RFVl9BVFRSX0lOX05BTUVEX1JBVygwLCBzdXBwbHksIGFkaXMxNjQwMF9yZWFkXzE0Yml0X3NpZ25lZCwKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCiAJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYwppbmRleCAzMzI5M2ZiLi5kYTI4Y2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKQEAgLTEyMiwxMiArMTIyLDEwIEBACiAJCQkudHhfYnVmID0gc3QtPnR4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMCwKIAkJfSwgewogCQkJLnJ4X2J1ZiA9IHJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDI0LAotCQkJLmNzX2NoYW5nZSA9IDEsCiAJCX0sCiAJfTsKIApAQCAtMTYyLDkgKzE2MCwxMCBAQAogCQkJICAgICAgIHdvcmtfdHJpZ2dlcl90b19yaW5nKTsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKIAotCWludCBpID0gMDsKKwlpbnQgaSA9IDAsIGo7CiAJczE2ICpkYXRhOwogCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IHJpbmctPnNjYW5fbWFzazsKIAogCWRhdGEgPSBrbWFsbG9jKGRhdGFzaXplICwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkgewpAQCAtMTc0LDkgKzE3MywxMiBAQAogCiAJaWYgKHJpbmctPnNjYW5fY291bnQpCiAJCWlmIChhZGlzMTY0MDBfc3BpX3JlYWRfYnVyc3QoJnN0LT5pbmRpb19kZXYtPmRldiwgc3QtPnJ4KSA+PSAwKQotCQkJZm9yICg7IGkgPCByaW5nLT5zY2FuX2NvdW50OyBpKyspCisJCQlmb3IgKDsgaSA8IHJpbmctPnNjYW5fY291bnQ7IGkrKykgeworCQkJCWogPSBfX2ZmcyhtYXNrKTsKKwkJCQltYXNrICY9IH4oMSA8PCBqKTsKIAkJCQlkYXRhW2ldCT0gYmUxNl90b19jcHVwKAotCQkJCQkoX19iZTE2ICopJihzdC0+cnhbaSoyXSkpOworCQkJCQkoX19iZTE2ICopJihzdC0+cnhbaioyXSkpOworCQkJfQogCiAJLyogR3VhcmFudGVlZCB0byBiZSBhbGlnbmVkIHdpdGggOCBieXRlIGJvdW5kYXJ5ICovCiAJaWYgKHJpbmctPnNjYW5fdGltZXN0YW1wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCmluZGV4IGYzYmYxMTEuLjE3OTVlZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQkJCQkJCSAgIC0+ZGV0X2V2ZW50cy5saXN0KSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3JldDsKLQkJLyogU2luZ2xlIGFjY2VzcyBkZXZpY2Ugc28gbm9vbmUgZWxzZSBjYW4gZ2V0IHRoZSBkYXRhICovCisJCS8qIFNpbmdsZSBhY2Nlc3MgZGV2aWNlIHNvIG5vIG9uZSBlbHNlIGNhbiBnZXQgdGhlIGRhdGEgKi8KIAkJbXV0ZXhfbG9jaygmZXZfaW50LT5ldmVudF9saXN0X2xvY2spOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTMuaAppbmRleCA3MGRhYmFlNi4uM2I5YzdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmgKQEAgLTYyLDcgKzYyLDcgQEAKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkZTc3NTNfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU0LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTQuaAppbmRleCA4ZmFhOWIzLi4wYWEwNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTQuaApAQCAtODAsNyArODAsNyBAQAogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRlNzc1NF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTguaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCmluZGV4IGRmNWJiN2IuLmM2ZmQ5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCkBAIC05OCw3ICs5OCw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTkuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5oCmluZGV4IGU5ZDFjNDMuLmNjNzZjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5oCkBAIC00Myw3ICs0Myw3IEBACiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCi0gKiBAcng6CQkJcmVjaWV2ZSBidWZmZXIKKyAqIEByeDoJCQlyZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBhZGU3NzU5X3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzg1NC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmgKaW5kZXggNGFkODRhMy4uNzlhMjExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmgKQEAgLTE0OSw3ICsxNDksNyBAQAogICogQHNwaToJCQlhY3R1YWwgc3BpX2RldmljZQogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkZTc4NTRfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmgKaW5kZXggZjIxYWMwOS4uMzI5NDhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oCkBAIC0zMCw3ICszMCw3IEBACiAgKiBAZXZlbnRfY29kZToJCWV2ZW50IGluZGVudGlmaWNhdGlvbiBjb2RlCiAgKiBAdGltZXN0YW1wOgkJdGltZSBvZiBldmVudAogICoKLSAqIFR5cGljYWwgdXNlY2FzZSBpcyB0byBlc2NhbGF0ZSBhIDUwJSByaW5nIGZ1bGwgdG8gNzUlIGZ1bGwgaWYgbm9vbmUgaGFzIHlldAorICogVHlwaWNhbCB1c2VjYXNlIGlzIHRvIGVzY2FsYXRlIGEgNTAlIHJpbmcgZnVsbCB0byA3NSUgZnVsbCBpZiBubyBvbmUgaGFzIHlldAogICogcmVhZCB0aGUgZmlyc3QgZXZlbnQuIENsZWFybHkgdGhlIDUwJSBmdWxsIGlzIG5vIGxvbmdlciBvZiBpbnRlcmVzdCBpbgogICogdHlwaWNhbCB1c2UgY2FzZS4KICAqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvVE9ETwppbmRleCBhMjRlNWVkLi5jNzMzZDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9UT0RPCkBAIC0xLDcgKzEsNyBAQAogVE9ETwogLS0tLQogCi1HZXQgdGhlIG1lbXJhciBkcml2ZXIgY2xlYW5lZCB1cCBhbmQgdXBzdHJlYW0gKGRlcGVuZGFuY3kgYmxvY2tpbmcgU1NUKQorR2V0IHRoZSBtZW1yYXIgZHJpdmVyIGNsZWFuZWQgdXAgYW5kIHVwc3RyZWFtIChkZXBlbmRlbmN5IGJsb2NraW5nIFNTVCkKIFJlcGxhY2UgbG9uZy9zaG9ydCBwcmVzcyB3aXRoIHR3byB2aXJ0dWFsIGJ1dHRvbnMKIFJldmlldyB0aGUgcHJpbnRrcyBhbmQga2lsbCBvZmYgYW55IGxlZnQgb3ZlciBTVF9FUlI6IG1lc3NhZ2VzCiBSZXZpZXcgdGhlIG1pc2MgZGV2aWNlIGlvY3RscyBmb3IgMzIvNjRiaXQgc2FmZXR5IGFuZCBzYW5pdHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0LmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdC5jCmluZGV4IGNlNGE5ZjcuLjgxYzI0ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3QuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJLyogSW5pdCB0aGUgZGV2aWNlICovCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlpZiAocmV0KSB7Ci0JCXByX2VycigiZGV2aWNlIGNhbnQgYmUgZW5hYmxlZFxuIik7CisJCXByX2VycigiZGV2aWNlIGNhbid0IGJlIGVuYWJsZWRcbiIpOwogCQlnb3RvIGRvX2ZyZWVfbWVtOwogCX0KIAlzc3RfZHJ2X2N0eC0+cGNpID0gcGNpX2Rldl9nZXQocGNpKTsKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlpZiAocmV0KQotCQlwcl9lcnIoImRldmljZSBjYW50IGJlIGVuYWJsZWRcbiIpOworCQlwcl9lcnIoImRldmljZSBjYW4ndCBiZSBlbmFibGVkXG4iKTsKIAogCW11dGV4X2xvY2soJnNzdF9kcnZfY3R4LT5zc3RfbG9jayk7CiAJc3N0X2Rydl9jdHgtPnNzdF9zdGF0ZSA9IFNTVF9VTl9JTklUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfYXBwX2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfYXBwX2ludGVyZmFjZS5jCmluZGV4IGEzNjc5OTEuLjFkMDYyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2FwcF9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9hcHBfaW50ZXJmYWNlLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCWlmICghc3N0X2Rydl9jdHgtPm1tYXBfbWVtKQogCQlyZXR1cm4gLUVJTzsKIAotCS8qIHJvdW5kIGl0IHVwIHRvIHRoZSBwYWdlIGJvbmRhcnkgICovCisJLyogcm91bmQgaXQgdXAgdG8gdGhlIHBhZ2UgYm91bmRhcnkgICovCiAJLyptZW1fYXJlYSA9ICh2b2lkICopKCgoKHVuc2lnbmVkIGxvbmcpc3N0X2Rydl9jdHgtPm1tYXBfbWVtKQogCQkJCSsgUEFHRV9TSVpFIC0gMSkgJiBQQUdFX01BU0spOyovCiAJbWVtX2FyZWEgPSAodm9pZCAqKSBQQUdFX0FMSUdOKCh1bnNpZ25lZCBpbnQpIHNzdF9kcnZfY3R4LT5tbWFwX21lbSk7CkBAIC04NzEsNyArODcxLDcgQEAKIH0KIAogLyoqCi0gKiBpbnRlbF9zc3RfaW9jdGxfZHNwIC0gcmVjaWV2ZXMgdGhlIGRldmljZSBpb2N0bCdzCisgKiBpbnRlbF9zc3RfaW9jdGxfZHNwIC0gcmVjZWl2ZXMgdGhlIGRldmljZSBpb2N0bCdzCiAgKgogICogQGNtZDpJb2N0bCBjbWQKICAqIEBhcmc6ZGF0YQpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAKIAkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQotCQlwcl9kZWJ1ZygiU0VUX1ZPTFVNRSByZWNpZXZlZCBmb3IgJWQhXG4iLAorCQlwcl9kZWJ1ZygiU0VUX1ZPTFVNRSByZWNlaXZlZCBmb3IgJWQhXG4iLAogCQkJCXNldF92b2wuc3RyZWFtX2lkKTsKIAkJaWYgKG1pbm9yID09IFNUUkVBTV9NT0RVTEUgJiYgc2V0X3ZvbC5zdHJlYW1faWQgPT0gMCkgewogCQkJcHJfZGVidWcoImludmFsaWQgb3BlcmF0aW9uIVxuIik7CkBAIC0xMDg1LDcgKzEwODUsNyBAQAogCQkJcmV0dmFsID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9Ci0JCXByX2RlYnVnKCJJT0NUTF9HRVRfVk9MVU1FIHJlY2lldmVkIGZvciBzdHJlYW0gPSAlZCFcbiIsCisJCXByX2RlYnVnKCJJT0NUTF9HRVRfVk9MVU1FIHJlY2VpdmVkIGZvciBzdHJlYW0gPSAlZCFcbiIsCiAJCQkJZ2V0X3ZvbC5zdHJlYW1faWQpOwogCQlpZiAobWlub3IgPT0gU1RSRUFNX01PRFVMRSAmJiBnZXRfdm9sLnN0cmVhbV9pZCA9PSAwKSB7CiAJCQlwcl9kZWJ1ZygiaW52YWxpZCBvcGVyYXRpb24hXG4iKTsKQEAgLTExMTcsNyArMTExNyw3IEBACiAJCQlyZXR2YWwgPSAtRUZBVUxUOwogCQkJYnJlYWs7CiAJCX0KLQkJcHJfZGVidWcoIlNORFJWX1NTVF9TRVRfVk9MVU1FIHJlY2lldmVkIGZvciAlZCFcbiIsCisJCXByX2RlYnVnKCJTTkRSVl9TU1RfU0VUX1ZPTFVNRSByZWNlaXZlZCBmb3IgJWQhXG4iLAogCQkJc2V0X211dGUuc3RyZWFtX2lkKTsKIAkJaWYgKG1pbm9yID09IFNUUkVBTV9NT0RVTEUgJiYgc2V0X211dGUuc3RyZWFtX2lkID09IDApIHsKIAkJCXJldHZhbCA9IC1FUEVSTTsKQEAgLTExNTMsNyArMTE1Myw3IEBACiAJY2FzZSBfSU9DX05SKFNORFJWX1NTVF9NTUFQX0NBUFRVUkUpOiB7CiAJCXN0cnVjdCBzbmRfc3N0X21tYXBfYnVmZnMgbW1hcF9idWY7CiAKLQkJcHJfZGVidWcoIlNORFJWX1NTVF9NTUFQX1BMQVkvQ0FQVFVSRSByZWNpZXZlZCFcbiIpOworCQlwcl9kZWJ1ZygiU05EUlZfU1NUX01NQVBfUExBWS9DQVBUVVJFIHJlY2VpdmVkIVxuIik7CiAJCWlmIChtaW5vciAhPSBTVFJFQU1fTU9EVUxFKSB7CiAJCQlyZXR2YWwgPSAtRUJBRFJRQzsKIAkJCWJyZWFrOwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAljYXNlIF9JT0NfTlIoU05EUlZfU1NUX1NFVF9UQVJHRVRfREVWSUNFKTogewogCQlzdHJ1Y3Qgc25kX3NzdF90YXJnZXRfZGV2aWNlIHRhcmdldF9kZXZpY2U7CiAKLQkJcHJfZGVidWcoIlNFVF9UQVJHRVRfREVWSUNFIHJlY2lldmVkIVxuIik7CisJCXByX2RlYnVnKCJTRVRfVEFSR0VUX0RFVklDRSByZWNlaXZlZCFcbiIpOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRhcmdldF9kZXZpY2UsICh2b2lkIF9fdXNlciAqKWFyZywKIAkJCQlzaXplb2YodGFyZ2V0X2RldmljZSkpKSB7CiAJCQlyZXR2YWwgPSAtRUZBVUxUOwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAljYXNlIF9JT0NfTlIoU05EUlZfU1NUX0RSSVZFUl9JTkZPKTogewogCQlzdHJ1Y3Qgc25kX3NzdF9kcml2ZXJfaW5mbyBpbmZvOwogCi0JCXByX2RlYnVnKCJTTkRSVl9TU1RfRFJJVkVSX0lORk8gcmVjaXZlZFxuIik7CisJCXByX2RlYnVnKCJTTkRSVl9TU1RfRFJJVkVSX0lORk8gcmVjZWl2ZWRcbiIpOwogCQlpbmZvLnZlcnNpb24gPSBTU1RfVkVSU0lPTl9OVU07CiAJCS8qIGhhcmQgY29kaW5nLCBzaHVkIGdldCBzdW1ob3cgbGF0ZXIgKi8KIAkJaW5mby5hY3RpdmVfcGNtX3N0cmVhbXMgPSBzc3RfZHJ2X2N0eC0+c3RyZWFtX2NudCAtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kcnZfaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kcnZfaW50ZXJmYWNlLmMKaW5kZXggZWE4ZTI1MS4uZTljMTgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfZHJ2X2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Rydl9pbnRlcmZhY2UuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJcG1fcnVudGltZV9nZXRfc3luYygmc3N0X2Rydl9jdHgtPnBjaS0+ZGV2KTsKIAogCWlmIChzc3RfZHJ2X2N0eC0+c3N0X3N0YXRlID09IFNTVF9TVVNQRU5ERUQpIHsKLQkJLyogTFBFIGlzIHN1c3BlbmRlZCwgcmVzdW1lIGl0IGJlZm9yZSBwcm9jZWRpbmcqLworCQkvKiBMUEUgaXMgc3VzcGVuZGVkLCByZXN1bWUgaXQgYmVmb3JlIHByb2NlZWRpbmcqLwogCQlwcl9kZWJ1ZygiUmVzdW1pbmcgZnJvbSBTdXNwZW5kZWQgc3RhdGVcbiIpOwogCQlyZXR2YWwgPSBpbnRlbF9zc3RfcmVzdW1lKHNzdF9kcnZfY3R4LT5wY2kpOwogCQlpZiAocmV0dmFsKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kc3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCmluZGV4IDZlNWM5MTUuLmJmZmU0YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvZXIgZG93bmxvYWRpbmcgdGhlIGNvZGVjL3Bvc3Rwcm9jZXNzaW5nCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgZG93bmxvYWRpbmcgdGhlIGNvZGVjL3Bvc3Rwcm9jZXNzaW5nCiBsaWJyYXJ5IGlzIHNldCBmb3IgZG93bmxvYWQgdG8gU1NUIERTUCovCiBzdGF0aWMgaW50IHNzdF92YWxpZGF0ZV9saWJyYXJ5KGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfbGliLAogCQlzdHJ1Y3QgbGliX3Nsb3RfaW5mbyAqc2xvdCwKQEAgLTQwNSw3ICs0MDUsNyBAQAogCiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gRlcgcmVxdWVzdHMgZm9yIGEgcGFydGljdWxhciBsaWJhcnkgZG93bmxvYWQKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gRlcgcmVxdWVzdHMgZm9yIGEgcGFydGljdWxhciBsaWJyYXJ5IGRvd25sb2FkCiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBsaWJyYXJ5IHRvIGRvd25sb2FkKi8KIGludCBzc3RfbG9hZF9saWJyYXJ5KHN0cnVjdCBzbmRfc3N0X2xpYl9kb3dubG9hZCAqbGliLCB1OCBvcHMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9md19pcGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Z3X2lwYy5oCmluZGV4IDhkZjMxM2QuLjBmMGM1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Z3X2lwYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Z3X2lwYy5oCkBAIC0xMTEsNyArMTExLDcgQEAKICNkZWZpbmUgSVBDX1NTVF9QRVJJT0RfRUxBUFNFRCAweDk3IC8qIHBlcmlvZCBlbGFwc2VkICovCiAjZGVmaW5lIElQQ19JQV9UQVJHRVRfREVWX0NITkdEIDB4OTggLyogZXJyb3IgaW4gcHJvY2Vzc2luZyBhIHN0cmVhbSAqLwogCi0jZGVmaW5lIElQQ19TU1RfRVJST1JfRVZFTlQgMHg5OSAvKiBCdWZmZXIgb3ZlciBydW4gb2NjdXJlZCAqLworI2RlZmluZSBJUENfU1NUX0VSUk9SX0VWRU5UIDB4OTkgLyogQnVmZmVyIG92ZXIgcnVuIG9jY3VycmVkICovCiAvKiBMMlMgbWVzc2FnZXMgKi8KICNkZWZpbmUgSVBDX1NDX0REUl9MSU5LX1VQIDB4QzAKICNkZWZpbmUgSVBDX1NDX0REUl9MSU5LX0RPV04gMHhDMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3Rfc3RyZWFtLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW0uYwppbmRleCA3OTVlNDJhLi5kZDU4YmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW0uYwpAQCAtOTgsNyArOTgsNyBAQAogCQlpZiAoc3N0X2Rydl9jdHgtPnN0cmVhbXNbaV0uc3RhdHVzID09IFNUUkVBTV9VTl9JTklUKQogCQkJcmV0dXJuIGk7CiAJfQotCXByX2RlYnVnKCJEaWRudCBmaW5kIGVtcHR5IHN0cmVhbSBmb3IgbXJzdFxuIik7CisJcHJfZGVidWcoIkRpZG4ndCBmaW5kIGVtcHR5IHN0cmVhbSBmb3IgbXJzdFxuIik7CiAJcmV0dXJuIC1FQlVTWTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3Rfc3RyZWFtX2VuY29kZWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X3N0cmVhbV9lbmNvZGVkLmMKaW5kZXggMjk3NTNjNy4uZDVmMDdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3Rfc3RyZWFtX2VuY29kZWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW1fZW5jb2RlZC5jCkBAIC05MTQsNyArOTE0LDcgQEAKIAkJKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSByYXJfYnVmZmVycy5idXNfYWRkcmVzcyk7CiAJCXByX2RlYnVnKCJSQVIgYnVmIGFkZHIgaW4gRG5SIChpbnB1dCBidWZmZXIgZnVuY3Rpb24pMHglbHUiLAogCQkJCSAodW5zaWduZWQgbG9uZykgc3RyX2luZm8tPmRlY29kZV9pYnVmKTsKLQkJcHJfZGVidWcoInJhciBpbiBEblIgZGVjb2RlIGZ1bnRpb24vb3V0cHV0IGJfYWRkIHJhciA9MHglbHUiLAorCQlwcl9kZWJ1ZygicmFyIGluIERuUiBkZWNvZGUgZnVuY3Rpb24vb3V0cHV0IGJfYWRkIHJhciA9MHglbHUiLAogCQkJCSh1bnNpZ25lZCBsb25nKSByYXJfYnVmZmVycy5idXNfYWRkcmVzcyk7CiAJCSppbnB1dF9pbmRleCA9IGkgKyAxOwogCQlzdHJfaW5mby0+ZGVjb2RlX2lzaXplID0gZGJ1ZnMtPmlidWZzLT5idWZmX2VudHJ5W2ldLnNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmMKaW5kZXggZmIyMjkyMS4uZDIwNzYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuYwpAQCAtNzczLDcgKzc3Myw3IEBACiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CiAJCXNzdF9jYXJkX3ZlbmRvcl9pZCA9ICh2ZW5kb3JfYWRkci52YWx1ZSAmIChNQVNLMnxNQVNLMXxNQVNLMCkpOwotCQlwcl9kZWJ1Zygib3JnaW5hbCBuIGV4dHJhdGVkIHZlbmRvciBpZCA9IDB4JXggJWRcbiIsCisJCXByX2RlYnVnKCJvcmlnaW5hbCBuIGV4dHJhdGVkIHZlbmRvciBpZCA9IDB4JXggJWRcbiIsCiAJCQkJdmVuZG9yX2FkZHIudmFsdWUsIHNzdF9jYXJkX3ZlbmRvcl9pZCk7CiAJCWlmIChzc3RfY2FyZF92ZW5kb3JfaWQgPCAwIHx8IHNzdF9jYXJkX3ZlbmRvcl9pZCA+IDIpIHsKIAkJCXByX2VycigidmVuZG9yIGNhcmQgbm90IHN1cHBvcnRlZCEhXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuaAppbmRleCBjYTg4MWI3Li5lNzdkYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZC5oCkBAIC05MCw3ICs5MCw3IEBACiAgKiBAY2FyZF9pbmRleDogc291bmQgY2FyZCBpbmRleAogICogQGNhcmRfaWQ6IHNvdW5kIGNhcmQgaWQgZGV0ZWN0ZWQKICAqIEBzc3RkcnZfb3BzOiBwdHIgdG8gc3N0IGRyaXZlciBvcHMKLSAqIEBwZGV2OiBwdHIgdG8gcGxhdGZyb20gZGV2aWNlCisgKiBAcGRldjogcHRyIHRvIHBsYXRmb3JtIGRldmljZQogICogQGlycTogaW50ZXJydXB0IG51bWJlciBkZXRlY3RlZAogICogQHBtaWNfc3RhdHVzOiBEZXZpY2Ugc3RhdHVzIG9mIHNvdW5kIGNhcmQKICAqIEBpbnRfYmFzZTogcHRyIHRvIE1NSU8gaW50ZXJydXB0IHJlZ2lvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92MV9jb250cm9sLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwppbmRleCA5Y2MxNWMxLi4xZWE4MTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKaW5kZXggMjZkODE1YTYuLjNjNmIzYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlICJpbnRlbF9zc3QuaCIKICNpbmNsdWRlICJpbnRlbG1pZF9zbmRfY29udHJvbC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmMKaW5kZXggNWMwMWYyOC4uOGFmN2M4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvaW5pdC5jCkBAIC05MCw3ICs5MCw3IEBACiAKIAlyZXN1bHQgPSBFTkVfU2VuZFNjc2lDbWQodXMsIEZESVJfUkVBRCwgJmJ1ZiwgMCk7CiAJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFeGVjdGlvbiBNUyBJbml0IENvZGUgRmFpbCAhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiRXhlY3V0aW9uIE1TIEluaXQgQ29kZSBGYWlsICEhXG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJlc3VsdCA9IEVORV9TZW5kU2NzaUNtZCh1cywgRkRJUl9SRUFELCAmYnVmLCAwKTsKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJFeGVjdGlvbiBTTSBJbml0IENvZGUgRmFpbCAhISByZXN1bHQgPSAleFxuIiwgcmVzdWx0KTsKKwkJICAgICAgICJFeGVjdXRpb24gU00gSW5pdCBDb2RlIEZhaWwgISEgcmVzdWx0ID0gJXhcbiIsIHJlc3VsdCk7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbG1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCmluZGV4IDJjYmU5ZjguLjk1YzY4OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCkBAIC02NCw3ICs2NCw3IEBACiBleHRlcm4gc3RydWN0IEFERFJFU1MgICAgTWVkaWE7CiBleHRlcm4gc3RydWN0IENJU19BUkVBICAgQ2lzQXJlYTsKIAotLy9CSVQgQ29udHJvbGwgTWFjcm8KKy8vQklUIENvbnRyb2wgTWFjcm8KIEJZVEUgQml0RGF0YVtdID0geyAweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAgfSA7CiAjZGVmaW5lIFNldF9EX0JpdChhLGIpICAgIChhWyhCWVRFKSgoYikvOCldfD0gQml0RGF0YVsoYiklOF0pCiAjZGVmaW5lIENscl9EX0JpdChhLGIpICAgIChhWyhCWVRFKSgoYikvOCldJj1+Qml0RGF0YVsoYiklOF0pCkBAIC03Niw3ICs3Niw3IEBACiAKIAogLy8KLS8vLy9Qb3dlciBDb250cm9sbCAmIE1lZGlhIEV4aXN0IENoZWNrIEZ1bmN0aW9uCisvLy8vUG93ZXIgQ29udHJvbCAmIE1lZGlhIEV4aXN0IENoZWNrIEZ1bmN0aW9uCiAvLy8vLS0tLS0gSW5pdF9EX1NtYXJ0TWVkaWEoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy9pbnQgSW5pdF9EX1NtYXJ0TWVkaWEodm9pZCkKIC8vewpAQCAtNTc1LDcgKzU3NSw3IEBACiAvLyAgICByZXR1cm4oU1VDQ0VTUyk7CiAvL30KIC8vCi0vLy8vUG93ZXIgQ29udHJvbGwgJiBNZWRpYSBFeGlzdCBDaGVjayBTdWJyb3V0aW5lCisvLy8vUG93ZXIgQ29udHJvbCAmIE1lZGlhIEV4aXN0IENoZWNrIFN1YnJvdXRpbmUKIC8vLy8tLS0tLSBJbml0aWFsaXplX0RfTWVkaWEoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvL3ZvaWQgSW5pdGlhbGl6ZV9EX01lZGlhKHZvaWQpCiAvL3sKQEAgLTczOCw3ICs3MzgsNyBAQAogLy8gICAgcmV0dXJuKFNVQ0NFU1MpOwogLy99CiAqLwotLy9TbWFydE1lZGlhIFBoeXNpY2FsIEFkZHJlc3MgQ29udHJvbGwgU3Vicm91dGluZQorLy9TbWFydE1lZGlhIFBoeXNpY2FsIEFkZHJlc3MgQ29udHJvbCBTdWJyb3V0aW5lCiAvLy0tLS0tIENvbnZfRF9NZWRpYUFkZHIoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGludCBDb252X0RfTWVkaWFBZGRyKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbHN1Yi5jCmluZGV4IDgwZGE2MWMuLjRmZTQ3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxzdWIuYwpAQCAtNTcsNyArNTcsNyBAQAogI2RlZmluZSBPREQgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgIC8vIE9kZCBQYWdlIGZvciAyNTZieXRlL3BhZ2UKIAogCi0vL1NtYXJ0TWVkaWEgUmVkdW5kYW50IGJ1ZmZlciBkYXRhIENvbnRyb2xsIFN1YnJvdXRpbmUKKy8vU21hcnRNZWRpYSBSZWR1bmRhbnQgYnVmZmVyIGRhdGEgQ29udHJvbCBTdWJyb3V0aW5lCiAvLy0tLS0tIENoZWNrX0RfRGF0YUJsYW5rKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGludCBDaGVja19EX0RhdGFCbGFuayhCWVRFICpyZWR1bmRhbnQpCiB7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogICAgIH0KIH0KIC8qCi0vLy8vU21hcnRNZWRpYSBQb3dlciBDb250cm9sbCBTdWJyb3V0aW5lCisvLy8vU21hcnRNZWRpYSBQb3dlciBDb250cm9sIFN1YnJvdXRpbmUKIC8vLy8tLS0tLSBDbnRfRF9SZXNldCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vdm9pZCBDbnRfRF9SZXNldCh2b2lkKQogLy97CkBAIC0xNDc4LDcgKzE0NzgsNyBAQAogLy99CiAvLwogKi8KLS8vU21hcnRNZWRpYSBFQ0MgQ29udHJvbGwgU3Vicm91dGluZQorLy9TbWFydE1lZGlhIEVDQyBDb250cm9sIFN1YnJvdXRpbmUKIC8vLS0tLS0gQ2hlY2tfRF9SZWFkRXJyb3IoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbnQgQ2hlY2tfRF9SZWFkRXJyb3IoQllURSAqcmVkdW5kYW50KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19lbmUwMTAwLmggYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2VuZTAxMDAuaAppbmRleCA3NzZiNjkzLi4wNmJlYmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2VuZTAxMDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2VuZTAxMDAuaApAQCAtODEsNyArODEsNyBAQAogCiAvKiBDSVIgYmxvY2sgc2V0dGluZ3MgKi8KICNkZWZpbmUgRU5FX0NJUl9DT05GMQkJMHhGRUMwCi0jZGVmaW5lIEVORV9DSVJfQ09ORjFfQURDX09OCTB4NwkgLyogcmVjaWV2ZXIgb24gZ3BpbzQwIGVuYWJsZWQgKi8KKyNkZWZpbmUgRU5FX0NJUl9DT05GMV9BRENfT04JMHg3CSAvKiByZWNlaXZlciBvbiBncGlvNDAgZW5hYmxlZCAqLwogI2RlZmluZSBFTkVfQ0lSX0NPTkYxX0xFQVJOMQkoMSA8PCAzKSAvKiBlbmFibGVkIG9uIGxlYXJuaW5nIG1vZGUgKi8KICNkZWZpbmUgRU5FX0NJUl9DT05GMV9UWF9PTgkweDMwCSAvKiBlbmFibGVkIG9uIHRyYW5zbWl0ICovCiAjZGVmaW5lIEVORV9DSVJfQ09ORjFfVFhfQ0FSUgkoMSA8PCA3KSAvKiBzZW5kIFRYIGNhcnJpZXIgb3Igbm90ICovCkBAIC05Niw3ICs5Niw3IEBACiAKIC8qIHRyYW5zbWl0dGVyIC0gbm90IGltcGxlbWVudGVkIHlldCAqLwogLyogS0IzOTI2QyBhbmQgaGlnaGVyICovCi0vKiB0cmFuc21pc3Npb24gaXMgdmVyeSBzaW1pbGlhciB0byByZWNpZXZpbmcsIGEgYnl0ZSBpcyB3cml0dGVuIHRvICovCisvKiB0cmFuc21pc3Npb24gaXMgdmVyeSBzaW1pbGFyIHRvIHJlY2VpdmluZywgYSBieXRlIGlzIHdyaXR0ZW4gdG8gKi8KIC8qIEVORV9UWF9JTlBVVCwgaW4gc2FtZSBtYW5uZXIgYXMgaXQgaXMgcmVhZCBmcm9tIHNhbXBsZSBidWZmZXIgKi8KIC8qIHNhbXBsZSBwZXJpb2QgaXMgZml4ZWQqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZWViYzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotY29uZmlnIE1SU1RfUkFSX0hBTkRMRVIKLQl0cmlzdGF0ZSAiUkFSIGhhbmRsZXIgZHJpdmVyIGZvciBJbnRlbCBNb29yZXN0b3duIHBsYXRmb3JtIgotCWRlcGVuZHMgb24gUkFSX1JFR0lTVEVSCi0JLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmZhY2UgdG8KLQkgIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMgKFJBUikgYXZhaWxhYmxlIG9uIHRoZSBJbnRlbAotCSAgTW9vcmVzdG93biBwbGF0Zm9ybS4KLQotCSAgT25jZSBsb2NrZWQgZG93biwgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucyBhcmUgb25seQotCSAgYWNjZXNzaWJsZSBieSBzcGVjaWZpYyBoYXJkd2FyZSBvbiB0aGUgcGxhdGZvcm0uICBUaGUgeDg2Ci0JICBDUFUgaXMgdHlwaWNhbGx5IG5vdCBvbmUgb2YgdGhvc2UgcGxhdGZvcm1zLiAgQXMgc3VjaCB0aGlzCi0JICBkcml2ZXIgZG9lcyBub3QgYWNjZXNzIFJBUiwgYW5kIG9ubHkgcHJvdmlkZXMgYSBidWZmZXIKLQkgIGFsbG9jYXRpb24vYm9va2tlZXBpbmcgbWVjaGFuaXNtLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzMzM2YzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotb2JqLSQoQ09ORklHX01SU1RfUkFSX0hBTkRMRVIpCSs9IG1lbXJhci5vCi1tZW1yYXIteQkJCTo9IG1lbXJhcl9hbGxvY2F0b3IubyBtZW1yYXJfaGFuZGxlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNWUwOWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotUkFSIEhhbmRsZXIgKG1lbXJhcikgRHJpdmVyIFRPRE8gSXRlbXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU1haW50YWluZXI6IEV1Z2VuZSBFcHNodGV5biA8ZXVnZW5lLmVwc2h0ZXluQGludGVsLmNvbT4KLQotbWVtcmFyLmgKLS0tLS0tLS0tCi0xLiBUaGlzIGhlYWRlciBleHBvc2VzIHRoZSBkcml2ZXIncyB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UKLSAgIGludGVyZmFjZXMuICBJdCBzaG91bGQgYmUgbW92ZWQgdG8gPGxpbnV4L3Jhci9tZW1yYXIuaD4sIG9yCi0gICBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMsIHdoZW4gdGhpcyBtZW1yYXIgZHJpdmVyIGlzIG1vdmVkIG91dAotICAgb2YgYHN0YWdpbmcnLgotICAgICBhLiBJdCB3b3VsZCBiZSBpZGVhbCBpZiBzdGFnaW5nL3Jhcl9yZWdpc3Rlci9yYXJfcmVnaXN0ZXIuaCB3YXMKLSAgICAgICAgbW92ZWQgdG8gdGhlIHNhbWUgZGlyZWN0b3J5LgotCi1tZW1yYXJfYWxsb2NhdG9yLltjaF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotMS4gQWRkcmVzcyBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgd2l0aCB0aGUgbWVtcmFyX2FsbG9jYXRvci4KLQotMi4gSGlkZSBzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciBkZXRhaWxzL2ZpZWxkcy4gIFRoZXkgbmVlZCBub3QgYmUKLSAgIGV4cG9zZWQgdG8gdGhlIHVzZXIuCi0gICAgIGEuIEZvcndhcmQgZGVjbGFyZSBzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvci4KLSAgICAgYi4gTW92ZSBhbGwgdGhyZWUgc3RydWN0IGRlZmluaXRpb25zIHRvIGBtZW1yYXJfYWxsb2NhdG9yLmMnCi0gICAgICAgIHNvdXJjZSBmaWxlLgotICAgICBjLiBBZGQgYSBtZW1yYXJfYWxsb2NhdG9yX2xhcmdlc3RfZnJlZV9hcmVhKCkgZnVuY3Rpb24sIG9yCi0gICAgICAgIHNvbWV0aGluZyBsaWtlIHRoYXQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgdmFsdWUgb2YgdGhlIHN0cnVjdAotICAgICAgICBtZW1yYXJfYWxsb2NhdG9yICJsYXJnZXN0X2ZyZWVfYXJlYSIgZmllbGQuICBUaGlzIGFsbG93cyB0aGUKLSAgICAgICAgc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgZmllbGRzIHRvIGJlIGNvbXBsZXRlbHkgaGlkZGVuIGZyb20KLSAgICAgICAgdGhlIHVzZXIuICBUaGUgbWVtcmFyX2hhbmRsZXIgY29kZSByZWFsbHkgb25seSBuZWVkcyB0aGlzIGZvcgotICAgICAgICBzdGF0aXN0aWMgZ2F0aGVyaW5nIG9uLWRlbWFuZC4KLSAgICAgZC4gRG8gdGhlIHNhbWUgZm9yIHRoZSAiY2FwYWNpdHkiIGZpZWxkIGFzIHRoZQotICAgICAgICAibGFyZ2VzdF9mcmVlX2FyZWEiIGZpZWxkLgotCi0zLiBNb3ZlIG1lbXJhcl9hbGxvY2F0b3IuKiB0byBrZXJuZWwgYGxpYicgZGlyZWN0b3J5IHNpbmNlIGl0IGlzIEhXCi0gICBuZXV0cmFsLgotICAgICBhLiBBbHRlcm5hdGl2ZWx5LCB1c2UgbGliL2dlbmFsbG9jLmMgaW5zdGVhZC4KLSAgICAgYi4gQSBrZXJuZWwgcG9ydCBvZiBEb3VnIExlYSdzIG1hbGxvYygpIGltcGxlbWVudGF0aW9uIG1heSBhbHNvCi0gICAgICAgIGJlIGFuIG9wdGlvbi4KLQotbWVtcmFyX2hhbmRsZXIuYwotLS0tLS0tLS0tLS0tLS0tLQotMS4gU3BsaXQgdXNlciBzcGFjZSBpbnRlcmZhY2UgKGlvY3RsIGNvZGUpIGZyb20gY29yZS9rZXJuZWwgY29kZSwKLSAgIGUuZy46Ci0gICAgIG1lbXJhcl9oYW5kbGVyLmMgLT4gbWVtcmFyX2NvcmUuYywgbWVtcmFyX3VzZXIuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXItYWJpIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXItYWJpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNmYzk5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyLWFiaQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLVdoYXQ6CQkvZGV2L21lbXJhcgotRGF0ZToJCU1hcmNoIDIwMTAKLUtlcm5lbFZlcnNpb246CTIuNi4zNAotQ29udGFjdDoJRXVnZW5lIEVwc2h0ZXluIDxldWdlbmUuZXBzaHRleW5AaW50ZWwuY29tPgotRGVzY3JpcHRpb246CVRoZSBJbnRlbCBNb29yZXN0b3duIFJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiAoUkFSKQotCQlIYW5kbGVyIGRyaXZlciBleHBvc2VzIGFuIGlvY3RsKCkgYmFzZWQgaW50ZXJmYWNlIHRoYXQKLQkJYWxsb3dzIGEgdXNlciB0byByZXNlcnZlIGFuZCByZWxlYXNlIGJsb2NrcyBvZiBSQVIKLQkJbWVtb3J5LgotCi0JCU5vdGU6ICBBIHN5c2ZzIGJhc2VkIG9uZSB3YXMgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUKLQkJUkFSIGhhbmRsZXIncyB1c2FnZSBtb2RlbC4KLQotCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQkJCQlpb2N0bCgpIFJlcXVlc3RzCi0JCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCQlSQVJfSEFORExFUl9SRVNFUlZFCi0JCS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJRGVzY3JpcHRpb246CVJlc2VydmUgUkFSIGJsb2NrLgotCQlUeXBlOgkJc3RydWN0IFJBUl9ibG9ja19pbmZvCi0JCURpcmVjdGlvbjoJaW4vb3V0Ci0JCUVycm9yczoJCUVJTlZBTCAoaW52YWxpZCBSQVIgdHlwZSBvciBzaXplKQotCQkJCUVOT01FTSAobm90IGVub3VnaCBSQVIgbWVtb3J5KQotCi0JCVJBUl9IQU5ETEVSX1NUQVQKLQkJLS0tLS0tLS0tLS0tLS0tLQotCQlEZXNjcmlwdGlvbjoJR2V0IFJBUiBzdGF0aXN0aWNzLgotCQlUeXBlOgkJc3RydWN0IFJBUl9zdGF0Ci0JCURpcmVjdGlvbjoJaW4vb3V0Ci0JCUVycm9yczoJCUVJTlZBTCAoaW52YWxpZCBSQVIgdHlwZSkKLQotCQlSQVJfSEFORExFUl9SRUxFQVNFCi0JCS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJRGVzY3JpcHRpb246CVJlbGVhc2UgcHJldmlvdXNseSByZXNlcnZlZCBSQVIgYmxvY2suCi0JCVR5cGU6CQkzMiBiaXQgdW5zaWduZWQgaW50ZWdlcgotCQkJCShlLmcuIHVpbnQzMl90KSwgaS5lIHRoZSBSQVIgImhhbmRsZSIuCi0JCURpcmVjdGlvbjoJaW4KLQkJRXJyb3JzOgkJRUlOVkFMIChpbnZhbGlkIFJBUiBoYW5kbGUpCi0KLQotCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQkJCWlvY3RsKCkgUmVxdWVzdCBQYXJhbWV0ZXIgVHlwZXMKLQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JCVRoZSBzdHJ1Y3R1cmVzIHJlZmVycmVkIHRvIGFib3ZlIGFyZSBkZWZpbmVkIGFzCi0JCWZvbGxvd3M6Ci0KLQkJLyoqCi0JCSAqIHN0cnVjdCBSQVJfYmxvY2tfaW5mbyAtIHVzZXIgc3BhY2Ugc3RydWN0IHRoYXQKLQkJICoJCQkgICBkZXNjcmliZXMgUkFSIGJ1ZmZlcgotCQkgKiBAdHlwZToJVHlwZSBvZiBSQVIgbWVtb3J5IChlLmcuLAotCQkgKgkJUkFSX1RZUEVfVklERU8gb3IgUkFSX1RZUEVfQVVESU8pIFtpbl0KLQkJICogQHNpemU6CVJlcXVlc3RlZCBzaXplIG9mIGEgYmxvY2sgaW4gYnl0ZXMgdG8KLQkJICoJCWJlIHJlc2VydmVkIGluIFJBUi4gW2luXQotCQkgKiBAaGFuZGxlOglIYW5kbGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZlciB0bwotCQkgKgkJcmVzZXJ2ZWQgYmxvY2suIFtvdXRdCi0JCSAqCi0JCSAqIFRoaXMgaXMgdGhlIGJhc2ljIHN0cnVjdHVyZSBleHBvc2VkIHRvIHRoZSB1c2VyCi0JCSAqIHNwYWNlIHRoYXQgZGVzY3JpYmVzIGEgZ2l2ZW4gUkFSIGJ1ZmZlci4gIEl0IHVzZWQKLQkJICogYXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlIFJBUl9IQU5ETEVSX1JFU0VSVkUgaW9jdGwuCi0JCSAqIFRoZSBidWZmZXIncyB1bmRlcmx5aW5nIGJ1cyBhZGRyZXNzIGlzIG5vdCBleHBvc2VkCi0JCSAqIHRvIHRoZSB1c2VyLiAgVXNlciBzcGFjZSBjb2RlIHJlZmVycyB0byB0aGUgYnVmZmVyCi0JCSAqIGVudGlyZWx5IGJ5ICJoYW5kbGUiLgotCQkgKi8KLQkJc3RydWN0IFJBUl9ibG9ja19pbmZvIHsKLQkJCV9fdTMyIHR5cGU7Ci0JCQlfX3UzMiBzaXplOwotCQkJX191MzIgaGFuZGxlOwotCQl9OwotCi0JCS8qKgotCQkgKiBzdHJ1Y3QgUkFSX3N0YXQgLSBSQVIgc3RhdGlzdGljcyBzdHJ1Y3R1cmUKLQkJICogQHR5cGU6CQlUeXBlIG9mIFJBUiBtZW1vcnkgKGUuZy4sCi0JCSAqCQkJUkFSX1RZUEVfVklERU8gb3IKLQkJICoJCQlSQVJfVFlQRV9BVURJTykgW2luXQotCQkgKiBAY2FwYWNpdHk6CQlUb3RhbCBzaXplIG9mIFJBUiBtZW1vcnkKLQkJICoJCQlyZWdpb24uIFtvdXRdCi0JCSAqIEBsYXJnZXN0X2Jsb2NrX3NpemU6CVNpemUgb2YgdGhlIGxhcmdlc3QgcmVzZXJ2YWJsZQotCQkgKgkJCWJsb2NrLiBbb3V0XQotCQkgKgotCQkgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBSQVJfSEFORExFUl9TVEFUIGlvY3RsLgotCQkgKi8KLQkJc3RydWN0IFJBUl9zdGF0IHsKLQkJCV9fdTMyIHR5cGU7Ci0JCQlfX3UzMiBjYXBhY2l0eTsKLQkJCV9fdTMyIGxhcmdlc3RfYmxvY2tfc2l6ZTsKLQkJfTsKLQotCQlMYXN0bHksIHRoZSBSQVJfSEFORExFUl9SRUxFQVNFIGlvY3RsIGV4cGVjdHMgYQotCQkiaGFuZGxlIiB0byB0aGUgUkFSIGJsb2NrIG9mIG1lbW9yeS4gIEl0IGlzIGEgMzIgYml0Ci0JCXVuc2lnbmVkIGludGVnZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci5oIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZlYjczYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qCi0gKiAgICAgIFJBUiBIYW5kbGVyICgvZGV2L21lbXJhcikgaW50ZXJuYWwgZHJpdmVyIEFQSS4KLSAqICAgICAgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwKLSAqICAgICAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi0gKiAgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLSAqICAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogICAgICBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiAgICAgIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqICAgICAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcwotICogICAgICBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKi8KLQotCi0jaWZuZGVmIF9NRU1SQVJfSAotI2RlZmluZSBfTUVNUkFSX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotCi0vKioKLSAqIHN0cnVjdCBSQVJfc3RhdCAtIFJBUiBzdGF0aXN0aWNzIHN0cnVjdHVyZQotICogQHR5cGU6CQlUeXBlIG9mIFJBUiBtZW1vcnkgKGUuZy4sIGF1ZGlvIHZzLiB2aWRlbykKLSAqIEBjYXBhY2l0eToJCVRvdGFsIHNpemUgb2YgUkFSIG1lbW9yeSByZWdpb24uCi0gKiBAbGFyZ2VzdF9ibG9ja19zaXplOglTaXplIG9mIHRoZSBsYXJnZXN0IHJlc2VydmFibGUgYmxvY2suCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgUkFSX0hBTkRMRVJfU1RBVCBpb2N0bCBhbmQgZm9yIHRoZQotICogUkFSX2dldF9zdGF0KCkgdXNlciBzcGFjZSB3cmFwcGVyIGZ1bmN0aW9uLgotICovCi1zdHJ1Y3QgUkFSX3N0YXQgewotCV9fdTMyIHR5cGU7Ci0JX191MzIgY2FwYWNpdHk7Ci0JX191MzIgbGFyZ2VzdF9ibG9ja19zaXplOwotfTsKLQotCi0vKioKLSAqIHN0cnVjdCBSQVJfYmxvY2tfaW5mbyAtIHVzZXIgc3BhY2Ugc3RydWN0IHRoYXQgZGVzY3JpYmVzIFJBUiBidWZmZXIKLSAqIEB0eXBlOglUeXBlIG9mIFJBUiBtZW1vcnkgKGUuZy4sIGF1ZGlvIHZzLiB2aWRlbykKLSAqIEBzaXplOglSZXF1ZXN0ZWQgc2l6ZSBvZiBhIGJsb2NrIHRvIGJlIHJlc2VydmVkIGluIFJBUi4KLSAqIEBoYW5kbGU6CUhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIHJlc2VydmVkIGJsb2NrLgotICoKLSAqIFRoaXMgaXMgdGhlIGJhc2ljIHN0cnVjdHVyZSBleHBvc2VkIHRvIHRoZSB1c2VyIHNwYWNlIHRoYXQKLSAqIGRlc2NyaWJlcyBhIGdpdmVuIFJBUiBidWZmZXIuICBUaGUgYnVmZmVyJ3MgdW5kZXJseWluZyBidXMgYWRkcmVzcwotICogaXMgbm90IGV4cG9zZWQgdG8gdGhlIHVzZXIuICBVc2VyIHNwYWNlIGNvZGUgcmVmZXJzIHRvIHRoZSBidWZmZXIKLSAqIGVudGlyZWx5IGJ5ICJoYW5kbGUiLgotICovCi1zdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gewotCV9fdTMyIHR5cGU7Ci0JX191MzIgc2l6ZTsKLQlfX3UzMiBoYW5kbGU7Ci19OwotCi0KLSNkZWZpbmUgUkFSX0lPQ1RMX0JBU0UgMHhFMAotCi0vKiBSZXNlcnZlIFJBUiBibG9jay4gKi8KLSNkZWZpbmUgUkFSX0hBTkRMRVJfUkVTRVJWRSBfSU9XUihSQVJfSU9DVExfQkFTRSwgMHgwMCwgc3RydWN0IFJBUl9ibG9ja19pbmZvKQotCi0vKiBSZWxlYXNlIHByZXZpb3VzbHkgcmVzZXJ2ZWQgUkFSIGJsb2NrLiAqLwotI2RlZmluZSBSQVJfSEFORExFUl9SRUxFQVNFIF9JT1coUkFSX0lPQ1RMX0JBU0UsIDB4MDEsIF9fdTMyKQotCi0vKiBHZXQgUkFSIHN0YXRzLiAqLwotI2RlZmluZSBSQVJfSEFORExFUl9TVEFUICAgIF9JT1dSKFJBUl9JT0NUTF9CQVNFLCAweDAyLCBzdHJ1Y3QgUkFSX3N0YXQpCi0KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qICAgICAgICAgICAgICAgS2VybmVsIFNpZGUgUkFSIEhhbmRsZXIgSW50ZXJmYWNlICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKioKLSAqIHN0cnVjdCBSQVJfYnVmZmVyIC0ga2VybmVsIHNwYWNlIHN0cnVjdCB0aGF0IGRlc2NyaWJlcyBSQVIgYnVmZmVyCi0gKiBAaW5mbzoJCXN0cnVjdHVyZSBjb250YWluaW5nIGJhc2UgUkFSIGJ1ZmZlciBpbmZvcm1hdGlvbgotICogQGJ1c19hZGRyZXNzOglidWZmZXIgYnVzIGFkZHJlc3MKLSAqCi0gKiBTdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhIGdpdmVuIGJsb2NrIG9mCi0gKiBtZW1vcnkgaW4gUkFSLiAgSXQgaXMgZ2VuZXJhbGx5IG9ubHkgdXNlZCB3aGVuIHJldHJpZXZpbmcgUkFSCi0gKiByZWxhdGVkIGJ1cyBhZGRyZXNzZXMuCi0gKgotICogTm90ZTogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBvbmx5IGJ5IFJBUi1lbmFibGVkIGRyaXZlcnMsIGFuZCBpcwotICogICAgICAgbm90IGludGVuZGVkIHRvIGJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgc3BhY2UuCi0gKi8KLXN0cnVjdCBSQVJfYnVmZmVyIHsKLQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gaW5mbzsKLQlkbWFfYWRkcl90IGJ1c19hZGRyZXNzOwotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX01SU1RfUkFSX0hBTkRMRVIpCi0vKioKLSAqIHJhcl9yZXNlcnZlKCkgLSByZXNlcnZlIFJBUiBidWZmZXJzCi0gKiBAYnVmZmVyczoJYXJyYXkgb2YgUkFSX2J1ZmZlcnMgd2hlcmUgdHlwZSBhbmQgc2l6ZSBvZiBidWZmZXJzIHRvCi0gKgkJcmVzZXJ2ZSBhcmUgcGFzc2VkIGluLCBoYW5kbGUgYW5kIGJ1cyBhZGRyZXNzIGFyZQotICoJCXBhc3NlZCBvdXQKLSAqIEBjb3VudDoJbnVtYmVyIG9mIFJBUl9idWZmZXJzIGluIHRoZSAiYnVmZmVycyIgYXJyYXkKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXJ2ZSBidWZmZXJzIGluIHRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zCi0gKiBvZiBnaXZlbiB0eXBlcy4KLSAqCi0gKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHJlc2VydmVkIGJ1ZmZlcnMuICBTdWNjZXNzZnVsCi0gKiBidWZmZXIgcmVzZXJ2YXRpb25zIHdpbGwgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyBidXNfYWRkcmVzcyBmaWVsZAotICogc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUgaW4gdGhlIGdpdmVuIGJ1ZmZlcnMgdmVjdG9yLgotICovCi1leHRlcm4gc2l6ZV90IHJhcl9yZXNlcnZlKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLAotCQkJICBzaXplX3QgY291bnQpOwotCi0vKioKLSAqIHJhcl9yZWxlYXNlKCkgLSByZWxlYXNlIFJBUiBidWZmZXJzCi0gKiBAYnVmZmVyczoJYXJyYXkgb2YgUkFSX2J1ZmZlcnMgd2hlcmUgaGFuZGxlcyB0byBidWZmZXJzIHRvIGJlCi0gKgkJcmVsZWFzZWQgYXJlIHBhc3NlZCBpbgotICogQGNvdW50OgludW1iZXIgb2YgUkFSX2J1ZmZlcnMgaW4gdGhlICJidWZmZXJzIiBhcnJheQotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWxlYXNlIFJBUiBidWZmZXJzIHRoYXQgd2VyZSByZXRyaWV2ZWQgdGhyb3VnaAotICogYSBjYWxsIHRvIHJhcl9yZXNlcnZlKCkgb3IgcmFyX2hhbmRsZV90b19idXMoKSBieSBkZWNyZW1lbnRpbmcgdGhlCi0gKiByZWZlcmVuY2UgY291bnQuICBUaGUgUkFSIGJ1ZmZlciB3aWxsIGJlIHJlY2xhaW1lZCB3aGVuIHRoZQotICogcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8uCi0gKgotICogSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSByZWxlYXNlZCBidWZmZXJzLiAgU3VjY2Vzc2Z1bAotICogcmVsZWFzZXMgd2lsbCBoYXZlIHRoZWlyIGhhbmRsZSBmaWVsZCBzZXQgdG8gemVybyBpbiB0aGUgZ2l2ZW4KLSAqIGJ1ZmZlcnMgdmVjdG9yLgotICovCi1leHRlcm4gc2l6ZV90IHJhcl9yZWxlYXNlKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLAotCQkJICBzaXplX3QgY291bnQpOwotCi0vKioKLSAqIHJhcl9oYW5kbGVfdG9fYnVzKCkgLSBjb252ZXJ0IGEgdmVjdG9yIG9mIFJBUiBoYW5kbGVzIHRvIGJ1cyBhZGRyZXNzZXMKLSAqIEBidWZmZXJzOglhcnJheSBvZiBSQVJfYnVmZmVycyBjb250YWluaW5nIGhhbmRsZXMgdG8gYmUKLSAqCQljb252ZXJ0ZWQgdG8gYnVzX2FkZHJlc3NlcwotICogQGNvdW50OgludW1iZXIgb2YgUkFSX2J1ZmZlcnMgaW4gdGhlICJidWZmZXJzIiBhcnJheQotCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0cmlldmUgdGhlIFJBUiBidWZmZXIgYnVzIGFkZHJlc3NlcywgdHlwZSBhbmQKLSAqIHNpemUgY29ycmVzcG9uZGluZyB0byB0aGUgUkFSIGhhbmRsZXMgcHJvdmlkZWQgaW4gdGhlIGJ1ZmZlcnMKLSAqIHZlY3Rvci4KLSAqCi0gKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGNvbnZlcnRlZCBidWZmZXJzLiAgVGhlIGJ1cwotICogYWRkcmVzcyB3aWxsIGJlIHNldCB0byAwIGZvciB1bnJlY29nbml6ZWQgaGFuZGxlcy4KLSAqCi0gKiBUaGUgcmVmZXJlbmNlIGNvdW50IGZvciBlYWNoIGNvcnJlc3BvbmRpbmcgYnVmZmVyIGluIFJBUiB3aWxsIGJlCi0gKiBpbmNyZW1lbnRlZC4gIENhbGwgcmFyX3JlbGVhc2UoKSB3aGVuIGRvbmUgd2l0aCB0aGUgYnVmZmVycy4KLSAqLwotZXh0ZXJuIHNpemVfdCByYXJfaGFuZGxlX3RvX2J1cyhzdHJ1Y3QgUkFSX2J1ZmZlciAqYnVmZmVycywKLQkJCQlzaXplX3QgY291bnQpOwotCi0jZWxzZQotCi1leHRlcm4gaW5saW5lIHNpemVfdCByYXJfcmVzZXJ2ZShzdHJ1Y3QgUkFSX2J1ZmZlciAqYnVmZmVycywgc2l6ZV90IGNvdW50KQotewotCXJldHVybiAwOwotfQotCi1leHRlcm4gaW5saW5lIHNpemVfdCByYXJfcmVsZWFzZShzdHJ1Y3QgUkFSX2J1ZmZlciAqYnVmZmVycywgc2l6ZV90IGNvdW50KQotewotCXJldHVybiAwOwotfQotCi1leHRlcm4gaW5saW5lIHNpemVfdCByYXJfaGFuZGxlX3RvX2J1cyhzdHJ1Y3QgUkFSX2J1ZmZlciAqYnVmZmVycywKLQkJCQlzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAgLyogTVJTVF9SQVJfSEFORExFUiAqLwotI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAgLyogX01FTVJBUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9hbGxvY2F0b3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2FsbG9jYXRvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGY4YzU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2FsbG9jYXRvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMyICswLDAgQEAKLS8qCi0gKiAgICAgIG1lbXJhcl9hbGxvY2F0b3IgMS4wOiAgQW4gYWxsb2NhdG9yIGZvciBJbnRlbCBSQVIuCi0gKgotICogICAgICBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbAotICogICAgICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLSAqICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICogICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiAgICAgIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqICAgICAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotICogICAgICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzCi0gKiAgICAgIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKgotICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqICAgICAgVGhpcyBzaW1wbGUgYWxsb2NhdG9yIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEKLSAqICAgICAgbWFsbG9jKCkvZnJlZSgpLWxpa2UgaW50ZXJmYWNlIGZvciByZXNlcnZpbmcgc3BhY2Ugd2l0aGluIGEKLSAqICAgICAgcHJldmlvdXNseSByZXNlcnZlZCBibG9jayBvZiBtZW1vcnkuICBJdCBpcyBub3Qgc3BlY2lmaWMgdG8KLSAqICAgICAgYW55IGhhcmR3YXJlLCBub3IgaXMgaXQgY291cGxlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBwYWdpbmcKLSAqICAgICAgbWVjaGFuaXNtLgotICoKLSAqICAgICAgVGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRvIHByb3ZpZGUgYSBtZWFucwotICogICAgICB0byBwYXJ0aXRpb24gYW4gYXJiaXRyYXJ5IGJsb2NrIG9mIG1lbW9yeSB3aXRob3V0IGFjdHVhbGx5Ci0gKiAgICAgIGFjY2Vzc2luZyB0aGUgbWVtb3J5IG9yIGluY3VycmluZyBhbnkgaGFyZHdhcmUgc2lkZS1lZmZlY3RzCi0gKiAgICAgIChlLmcuIHBhZ2luZykuICBJdCBpcywgaW4gZWZmZWN0LCBhIGJvb2trZWVwaW5nIG1lY2hhbmlzbSBmb3IKLSAqICAgICAgYnVmZmVycy4KLSAqLwotCi0KLSNpbmNsdWRlICJtZW1yYXJfYWxsb2NhdG9yLmgiCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0KLXN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICptZW1yYXJfY3JlYXRlX2FsbG9jYXRvcih1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkJCQkgc2l6ZV90IGNhcGFjaXR5LAotCQkJCQkJIHNpemVfdCBibG9ja19zaXplKQotewotCXN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICphbGxvY2F0b3IgID0gTlVMTDsKLQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzICpmaXJzdF9ub2RlID0gTlVMTDsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoZSBiYXNlIGFkZHJlc3MgaXMgYWxpZ25lZCBvbiBhIGJsb2NrX3NpemUKLQkgKiBib3VuZGFyeS4KLQkgKgotCSAqIEB0b2RvIElzIHRoaXMgbmVjZXNzYXJ5PwotCSAqLwotCS8qIGJhc2UgPSBBTElHTihiYXNlLCBibG9ja19zaXplKTsgKi8KLQotCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMuCi0JICoKLQkgKiBNYWtlIHN1cmUgd2UgY2FuIGFsbG9jYXRlIHRoZSBlbnRpcmUgbWVtb3J5IHNwYWNlLiAgWmVybwotCSAqIGNhcGFjaXR5IG9yIGJsb2NrIHNpemUgYXJlIG9idmlvdXNseSBpbnZhbGlkLgotCSAqLwotCWlmIChiYXNlID09IDAKLQkgICAgfHwgY2FwYWNpdHkgPT0gMAotCSAgICB8fCBibG9ja19zaXplID09IDAKLQkgICAgfHwgVUxPTkdfTUFYIC0gY2FwYWNpdHkgPCBiYXNlCi0JICAgIHx8IGNhcGFjaXR5IDwgYmxvY2tfc2l6ZSkKLQkJcmV0dXJuIGFsbG9jYXRvcjsKLQotCS8qCi0JICogVGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiBjcmVhdGluZyBhIG1lbW9yeSBhbGxvY2F0b3IgdGhhdAotCSAqIGlzIG9ubHkgY2FwYWJsZSBvZiBob2xkaW5nIG9uZSBibG9jayBidXQgd2UnbGwgYWxsb3cgaXQsCi0JICogYW5kIGlzc3VlIGEgZGlhZ25vc3RpYy4KLQkgKi8KLQlXQVJOKGNhcGFjaXR5IDwgYmxvY2tfc2l6ZSAqIDIsCi0JICAgICAibWVtcmFyOiBPbmx5IG9uZSBibG9jayBhdmFpbGFibGUgdG8gYWxsb2NhdG9yLlxuIik7Ci0KLQlhbGxvY2F0b3IgPSBrbWFsbG9jKHNpemVvZigqYWxsb2NhdG9yKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoYWxsb2NhdG9yID09IE5VTEwpCi0JCXJldHVybiBhbGxvY2F0b3I7Ci0KLQltdXRleF9pbml0KCZhbGxvY2F0b3ItPmxvY2spOwotCWFsbG9jYXRvci0+YmFzZSA9IGJhc2U7Ci0KLQkvKiBSb3VuZCB0aGUgY2FwYWNpdHkgZG93biB0byBhIG11bHRpcGxlIG9mIGJsb2NrX3NpemUuICovCi0JYWxsb2NhdG9yLT5jYXBhY2l0eSA9IChjYXBhY2l0eSAvIGJsb2NrX3NpemUpICogYmxvY2tfc2l6ZTsKLQotCWFsbG9jYXRvci0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7Ci0KLQlhbGxvY2F0b3ItPmxhcmdlc3RfZnJlZV9hcmVhID0gYWxsb2NhdG9yLT5jYXBhY2l0eTsKLQotCS8qIEluaXRpYWxpemUgdGhlIGhhbmRsZSBhbmQgZnJlZSBsaXN0cy4gKi8KLQlJTklUX0xJU1RfSEVBRCgmYWxsb2NhdG9yLT5hbGxvY2F0ZWRfbGlzdC5saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYWxsb2NhdG9yLT5mcmVlX2xpc3QubGlzdCk7Ci0KLQlmaXJzdF9ub2RlID0ga21hbGxvYyhzaXplb2YoKmZpcnN0X25vZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZmlyc3Rfbm9kZSA9PSBOVUxMKQl7Ci0JCWtmcmVlKGFsbG9jYXRvcik7Ci0JCWFsbG9jYXRvciA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyogRnVsbCByYW5nZSBvZiBibG9ja3MgaXMgYXZhaWxhYmxlLiAqLwotCQlmaXJzdF9ub2RlLT5yYW5nZS5iZWdpbiA9IGJhc2U7Ci0JCWZpcnN0X25vZGUtPnJhbmdlLmVuZCAgID0gYmFzZSArIGFsbG9jYXRvci0+Y2FwYWNpdHk7Ci0JCWxpc3RfYWRkKCZmaXJzdF9ub2RlLT5saXN0LAotCQkJICZhbGxvY2F0b3ItPmZyZWVfbGlzdC5saXN0KTsKLQl9Ci0KLQlyZXR1cm4gYWxsb2NhdG9yOwotfQotCi12b2lkIG1lbXJhcl9kZXN0cm95X2FsbG9jYXRvcihzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqYWxsb2NhdG9yKQotewotCS8qCi0JICogQXNzdW1lIHRoYXQgdGhlIG1lbW9yeSBhbGxvY2F0b3IgbG9jayBpc24ndCBoZWxkIGF0IHRoaXMKLQkgKiBwb2ludCBpbiB0aW1lLiAgQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQuCi0JICovCi0KLQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzICpwb3MgPSBOVUxMOwotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgKm4gICA9IE5VTEw7Ci0KLQlpZiAoYWxsb2NhdG9yID09IE5VTEwpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0KLQkvKiBSZWNsYWltIGZyZWUgbGlzdCByZXNvdXJjZXMuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywKLQkJCQkgbiwKLQkJCQkgJmFsbG9jYXRvci0+ZnJlZV9saXN0Lmxpc3QsCi0JCQkJIGxpc3QpIHsKLQkJbGlzdF9kZWwoJnBvcy0+bGlzdCk7Ci0JCWtmcmVlKHBvcyk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZhbGxvY2F0b3ItPmxvY2spOwotCi0Ja2ZyZWUoYWxsb2NhdG9yKTsKLX0KLQotdW5zaWduZWQgbG9uZyBtZW1yYXJfYWxsb2NhdG9yX2FsbG9jKHN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICphbGxvY2F0b3IsCi0JCQkJICAgICBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzICpwb3MgPSBOVUxMOwotCi0Jc2l6ZV90IG51bV9ibG9ja3M7Ci0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9ieXRlczsKLQotCS8qCi0JICogQWRkcmVzcyBvZiBhbGxvY2F0ZWQgYnVmZmVyLiAgV2UgYXNzdW1lIHRoYXQgemVybyBpcyBub3QgYQotCSAqIHZhbGlkIGFkZHJlc3MuCi0JICovCi0JdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKLQotCWlmIChhbGxvY2F0b3IgPT0gTlVMTCB8fCBzaXplID09IDApCi0JCXJldHVybiBhZGRyOwotCi0JLyogUmVzZXJ2ZSBlbm91Z2ggYmxvY2tzIHRvIGhvbGQgdGhlIGFtb3VudCBvZiBieXRlcyByZXF1ZXN0ZWQuICovCi0JbnVtX2Jsb2NrcyA9IERJVl9ST1VORF9VUChzaXplLCBhbGxvY2F0b3ItPmJsb2NrX3NpemUpOwotCi0JcmVzZXJ2ZWRfYnl0ZXMgPSBudW1fYmxvY2tzICogYWxsb2NhdG9yLT5ibG9ja19zaXplOwotCi0JbXV0ZXhfbG9jaygmYWxsb2NhdG9yLT5sb2NrKTsKLQotCWlmIChyZXNlcnZlZF9ieXRlcyA+IGFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEpIHsKLQkJbXV0ZXhfdW5sb2NrKCZhbGxvY2F0b3ItPmxvY2spOwotCQlyZXR1cm4gYWRkcjsKLQl9Ci0KLQkvKgotCSAqIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZnJlZSBsaXN0IHRvIGZpbmQgYSBzdWl0YWJseSBzaXplZAotCSAqIHJhbmdlIG9mIGZyZWUgY29udGlndW91cyBtZW1vcnkgYmxvY2tzLgotCSAqCi0JICogV2UgYWxzbyB0YWtlIHRoZSBvcHBvcnR1bml0eSB0byByZXNldCB0aGUgc2l6ZSBvZiB0aGUKLQkgKiBsYXJnZXN0IGZyZWUgYXJlYSBzaXplIHN0YXRpc3RpYy4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmFsbG9jYXRvci0+ZnJlZV9saXN0Lmxpc3QsIGxpc3QpIHsKLQkJc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlICogY29uc3QgZnIgPSAmcG9zLT5yYW5nZTsKLQkJc2l6ZV90IGNvbnN0IGN1cnJfc2l6ZSA9IGZyLT5lbmQgLSBmci0+YmVnaW47Ci0KLQkJaWYgKGN1cnJfc2l6ZSA+PSByZXNlcnZlZF9ieXRlcyAmJiBhZGRyID09IDApIHsKLQkJCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZSAqcmFuZ2UgPSBOVUxMOwotCQkJc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcyAqIGNvbnN0IG5ld19ub2RlID0KLQkJCQlrbWFsbG9jKHNpemVvZigqbmV3X25vZGUpLCBHRlBfS0VSTkVMKTsKLQotCQkJaWYgKG5ld19ub2RlID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0KLQkJCWxpc3RfYWRkKCZuZXdfbm9kZS0+bGlzdCwKLQkJCQkgJmFsbG9jYXRvci0+YWxsb2NhdGVkX2xpc3QubGlzdCk7Ci0KLQkJCS8qCi0JCQkgKiBDYXJ2ZSBvdXQgYXJlYSBvZiBtZW1vcnkgZnJvbSBlbmQgb2YgZnJlZQotCQkJICogcmFuZ2UuCi0JCQkgKi8KLQkJCXJhbmdlICAgICAgICA9ICZuZXdfbm9kZS0+cmFuZ2U7Ci0JCQlyYW5nZS0+ZW5kICAgPSBmci0+ZW5kOwotCQkJZnItPmVuZCAgICAgLT0gcmVzZXJ2ZWRfYnl0ZXM7Ci0JCQlyYW5nZS0+YmVnaW4gPSBmci0+ZW5kOwotCQkJYWRkciAgICAgICAgID0gcmFuZ2UtPmJlZ2luOwotCi0JCQkvKgotCQkJICogQ2hlY2sgaWYgbGFyZ2VzdCBhcmVhIGhhcyBkZWNyZWFzZWQgaW4KLQkJCSAqIHNpemUuICBXZSdsbCBuZWVkIHRvIGNvbnRpbnVlIHNjYW5uaW5nIGZvcgotCQkJICogdGhlIG5leHQgbGFyZ2VzdCBhcmVhIGlmIGl0IGhhcy4KLQkJCSAqLwotCQkJaWYgKGN1cnJfc2l6ZSA9PSBhbGxvY2F0b3ItPmxhcmdlc3RfZnJlZV9hcmVhKQotCQkJCWFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEgLT0KLQkJCQkJcmVzZXJ2ZWRfYnl0ZXM7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBSZXNldCBsYXJnZXN0IGZyZWUgYXJlYSBzaXplIHN0YXRpc3RpYyBhcyBuZWVkZWQsCi0JCSAqIGJ1dCBvbmx5IGlmIHdlJ3ZlIGFjdHVhbGx5IGFsbG9jYXRlZCBtZW1vcnkuCi0JCSAqLwotCQlpZiAoYWRkciAhPSAwCi0JCSAgICAmJiBjdXJyX3NpemUgPiBhbGxvY2F0b3ItPmxhcmdlc3RfZnJlZV9hcmVhKSB7Ci0JCQlhbGxvY2F0b3ItPmxhcmdlc3RfZnJlZV9hcmVhID0gY3Vycl9zaXplOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQltdXRleF91bmxvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotbG9uZyBtZW1yYXJfYWxsb2NhdG9yX2ZyZWUoc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKmFsbG9jYXRvciwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZHN0ID0gTlVMTDsKLQotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgICAgICAqYWxsb2NhdGVkID0gTlVMTDsKLQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2UgY29uc3QgKmhhbmRsZSAgICA9IE5VTEw7Ci0KLQl1bnNpZ25lZCBsb25nIG9sZF9lbmQgICAgICAgID0gMDsKLQl1bnNpZ25lZCBsb25nIG5ld19jaHVua19zaXplID0gMDsKLQotCWlmIChhbGxvY2F0b3IgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWRkciA9PSAwKQotCQlyZXR1cm4gMDsgIC8qIElnbm9yZSAiZnJlZSgwKSIuICovCi0KLQltdXRleF9sb2NrKCZhbGxvY2F0b3ItPmxvY2spOwotCi0JLyogRmluZCB0aGUgY29ycmVzcG9uZGluZyBoYW5kbGUuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShhbGxvY2F0ZWQsCi0JCQkgICAgJmFsbG9jYXRvci0+YWxsb2NhdGVkX2xpc3QubGlzdCwKLQkJCSAgICBsaXN0KSB7Ci0JCWlmIChhbGxvY2F0ZWQtPnJhbmdlLmJlZ2luID09IGFkZHIpIHsKLQkJCWhhbmRsZSA9ICZhbGxvY2F0ZWQtPnJhbmdlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBObyBzdWNoIGJ1ZmZlciBjcmVhdGVkIGJ5IHRoaXMgYWxsb2NhdG9yLiAqLwotCWlmIChoYW5kbGUgPT0gTlVMTCkgewotCQltdXRleF91bmxvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qCi0JICogQ29hbGVzY2UgYWRqYWNlbnQgY2h1bmtzIG9mIG1lbW9yeSBpZiBwb3NzaWJsZS4KLQkgKgotCSAqIEBub3RlIFRoaXMgaXNuJ3QgZnVsbCBibG93biBjb2FsZXNjaW5nIHNpbmNlIHdlJ3JlIG9ubHkKLQkgKiAgICAgICBjb2FsZXNjaW5nIGF0IG1vc3QgdGhyZWUgY2h1bmtzIG9mIG1lbW9yeS4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZhbGxvY2F0b3ItPmZyZWVfbGlzdC5saXN0KSB7Ci0JCS8qIEB0b2RvIE8obikgcGVyZm9ybWFuY2UuICBPcHRpbWl6ZS4gKi8KLQotCQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2UgKiBjb25zdCBjaHVuayA9Ci0JCQkmbGlzdF9lbnRyeShwb3MsCi0JCQkJICAgIHN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMsCi0JCQkJICAgIGxpc3QpLT5yYW5nZTsKLQotCQkvKiBFeHRlbmQgc2l6ZSBvZiBleGlzdGluZyBmcmVlIGFkamFjZW50IGNodW5rLiAqLwotCQlpZiAoY2h1bmstPmVuZCA9PSBoYW5kbGUtPmJlZ2luKSB7Ci0JCQkvKgotCQkJICogQ2h1bmsgImxlc3MgdGhhbiIgdGhhbiB0aGUgb25lIHdlJ3JlCi0JCQkgKiBmcmVlaW5nIGlzIGFkamFjZW50LgotCQkJICoKLQkJCSAqIEJlZm9yZToKLQkJCSAqCi0JCQkgKiAgICstLS0tLSstLS0tLS0rCi0JCQkgKiAgIHxjaHVua3xoYW5kbGV8Ci0JCQkgKiAgICstLS0tLSstLS0tLS0rCi0JCQkgKgotCQkJICogQWZ0ZXI6Ci0JCQkgKgotCQkJICogICArLS0tLS0tLS0tLS0tKwotCQkJICogICB8ICAgY2h1bmsgICAgfAotCQkJICogICArLS0tLS0tLS0tLS0tKwotCQkJICovCi0KLQkJCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgY29uc3QgKiBjb25zdCBuZXh0ID0KLQkJCQlsaXN0X2VudHJ5KHBvcy0+bmV4dCwKLQkJCQkJICAgc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcywKLQkJCQkJICAgbGlzdCk7Ci0KLQkJCWNodW5rLT5lbmQgPSBoYW5kbGUtPmVuZDsKLQotCQkJLyoKLQkJCSAqIE5vdyBjaGVjayBpZiBuZXh0IGZyZWUgY2h1bmsgaXMgYWRqYWNlbnQgdG8KLQkJCSAqIHRoZSBjdXJyZW50IGV4dGVuZGVkIGZyZWUgY2h1bmsuCi0JCQkgKgotCQkJICogQmVmb3JlOgotCQkJICoKLQkJCSAqICAgKy0tLS0tLS0tLS0tLSstLS0tKwotCQkJICogICB8ICAgY2h1bmsgICAgfG5leHR8Ci0JCQkgKiAgICstLS0tLS0tLS0tLS0rLS0tLSsKLQkJCSAqCi0JCQkgKiBBZnRlcjoKLQkJCSAqCi0JCQkgKiAgICstLS0tLS0tLS0tLS0tLS0tLSsKLQkJCSAqICAgfCAgICAgIGNodW5rICAgICAgfAotCQkJICogICArLS0tLS0tLS0tLS0tLS0tLS0rCi0JCQkgKi8KLQkJCWlmICghbGlzdF9pc19zaW5ndWxhcihwb3MpCi0JCQkgICAgJiYgY2h1bmstPmVuZCA9PSBuZXh0LT5yYW5nZS5iZWdpbikgewotCQkJCWNodW5rLT5lbmQgPSBuZXh0LT5yYW5nZS5lbmQ7Ci0JCQkJbGlzdF9kZWwocG9zLT5uZXh0KTsKLQkJCQlrZnJlZShuZXh0KTsKLQkJCX0KLQotCQkJbGlzdF9kZWwoJmFsbG9jYXRlZC0+bGlzdCk7Ci0KLQkJCW5ld19jaHVua19zaXplID0gY2h1bmstPmVuZCAtIGNodW5rLT5iZWdpbjsKLQotCQkJZ290byBleGl0X21lbXJhcl9mcmVlOwotCi0JCX0gZWxzZSBpZiAoaGFuZGxlLT5lbmQgPT0gY2h1bmstPmJlZ2luKSB7Ci0JCQkvKgotCQkJICogQ2h1bmsgImdyZWF0ZXIgdGhhbiIgdGhhbiB0aGUgb25lIHdlJ3JlCi0JCQkgKiBmcmVlaW5nIGlzIGFkamFjZW50LgotCQkJICoKLQkJCSAqICAgKy0tLS0tLSstLS0tLSsKLQkJCSAqICAgfGhhbmRsZXxjaHVua3wKLQkJCSAqICAgKy0tLS0tLSstLS0tLSsKLQkJCSAqCi0JCQkgKiBBZnRlcjoKLQkJCSAqCi0JCQkgKiAgICstLS0tLS0tLS0tLS0rCi0JCQkgKiAgIHwgICBjaHVuayAgICB8Ci0JCQkgKiAgICstLS0tLS0tLS0tLS0rCi0JCQkgKi8KLQotCQkJc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcyBjb25zdCAqIGNvbnN0IHByZXYgPQotCQkJCWxpc3RfZW50cnkocG9zLT5wcmV2LAotCQkJCQkgICBzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzLAotCQkJCQkgICBsaXN0KTsKLQotCQkJY2h1bmstPmJlZ2luID0gaGFuZGxlLT5iZWdpbjsKLQotCQkJLyoKLQkJCSAqIE5vdyBjaGVjayBpZiBwcmV2aW91cyBmcmVlIGNodW5rIGlzCi0JCQkgKiBhZGphY2VudCB0byB0aGUgY3VycmVudCBleHRlbmRlZCBmcmVlCi0JCQkgKiBjaHVuay4KLQkJCSAqCi0JCQkgKgotCQkJICogQmVmb3JlOgotCQkJICoKLQkJCSAqICAgKy0tLS0rLS0tLS0tLS0tLS0tKwotCQkJICogICB8cHJldnwgICBjaHVuayAgICB8Ci0JCQkgKiAgICstLS0tKy0tLS0tLS0tLS0tLSsKLQkJCSAqCi0JCQkgKiBBZnRlcjoKLQkJCSAqCi0JCQkgKiAgICstLS0tLS0tLS0tLS0tLS0tLSsKLQkJCSAqICAgfCAgICAgIGNodW5rICAgICAgfAotCQkJICogICArLS0tLS0tLS0tLS0tLS0tLS0rCi0JCQkgKi8KLQkJCWlmICghbGlzdF9pc19zaW5ndWxhcihwb3MpCi0JCQkgICAgJiYgcHJldi0+cmFuZ2UuZW5kID09IGNodW5rLT5iZWdpbikgewotCQkJCWNodW5rLT5iZWdpbiA9IHByZXYtPnJhbmdlLmJlZ2luOwotCQkJCWxpc3RfZGVsKHBvcy0+cHJldik7Ci0JCQkJa2ZyZWUocHJldik7Ci0JCQl9Ci0KLQkJCWxpc3RfZGVsKCZhbGxvY2F0ZWQtPmxpc3QpOwotCi0JCQluZXdfY2h1bmtfc2l6ZSA9IGNodW5rLT5lbmQgLSBjaHVuay0+YmVnaW47Ci0KLQkJCWdvdG8gZXhpdF9tZW1yYXJfZnJlZTsKLQotCQl9IGVsc2UgaWYgKGNodW5rLT5lbmQgPCBoYW5kbGUtPmJlZ2luCi0JCQkgICAmJiBjaHVuay0+ZW5kID4gb2xkX2VuZCkgewotCQkJLyogS2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgZW50cnkgY291bGQgYmUKLQkJCSAqIHBvdGVudGlhbGx5IG1vdmVkIGZyb20gdGhlICJhbGxvY2F0ZWQiIGxpc3QKLQkJCSAqIHRvIHRoZSAiZnJlZSIgbGlzdCBpZiBjb2FsZXNjaW5nIGRvZXNuJ3QKLQkJCSAqIG9jY3VyLCBtYWtpbmcgc3VyZSB0aGUgImZyZWUiIGxpc3QgcmVtYWlucwotCQkJICogc29ydGVkLgotCQkJICovCi0JCQlvbGRfZW5kID0gY2h1bmstPmVuZDsKLQkJCWRzdCA9IHBvczsKLQkJfQotCX0KLQotCS8qCi0JICogTm90aGluZyB0byBjb2FsZXNjZS4KLQkgKgotCSAqIE1vdmUgdGhlIGVudHJ5IGZyb20gdGhlICJhbGxvY2F0ZWQiIGxpc3QgdG8gdGhlICJmcmVlIgotCSAqIGxpc3QuCi0JICovCi0JbGlzdF9tb3ZlKCZhbGxvY2F0ZWQtPmxpc3QsIGRzdCk7Ci0JbmV3X2NodW5rX3NpemUgPSBoYW5kbGUtPmVuZCAtIGhhbmRsZS0+YmVnaW47Ci0JYWxsb2NhdGVkID0gTlVMTDsKLQotZXhpdF9tZW1yYXJfZnJlZToKLQotCWlmIChuZXdfY2h1bmtfc2l6ZSA+IGFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEpCi0JCWFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEgPSBuZXdfY2h1bmtfc2l6ZTsKLQotCW11dGV4X3VubG9jaygmYWxsb2NhdG9yLT5sb2NrKTsKLQotCWtmcmVlKGFsbG9jYXRlZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLS8qCi0gIExvY2FsIFZhcmlhYmxlczoKLSAgICBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAgRW5kOgotKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2FsbG9jYXRvci5oIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfYWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiODBkZWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfYWxsb2NhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwKLSAqICAgICAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi0gKiAgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLSAqICAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogICAgICBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiAgICAgIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqICAgICAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcwotICogICAgICBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKi8KLQotI2lmbmRlZiBNRU1SQVJfQUxMT0NBVE9SX0gKLSNkZWZpbmUgTUVNUkFSX0FMTE9DQVRPUl9ICi0KLQotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLQotLyoqCi0gKiBzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2UgLSBzdHJ1Y3QgdGhhdCBkZXNjcmliZXMgYSBtZW1vcnkgcmFuZ2UKLSAqIEBiZWdpbjoJQmVnaW5uaW5nIG9mIGF2YWlsYWJsZSBhZGRyZXNzIHJhbmdlLgotICogQGVuZDoJRW5kIG9mIGF2YWlsYWJsZSBhZGRyZXNzIHJhbmdlLCBvbmUgcGFzdCB0aGUgZW5kLAotICoJCWkuZS4gW2JlZ2luLCBlbmQpLgotICovCi1zdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2UgewotLyogcHJpdmF0ZTogaW50ZXJuYWwgdXNlIG9ubHkgKi8KLQl1bnNpZ25lZCBsb25nIGJlZ2luOwotCXVuc2lnbmVkIGxvbmcgZW5kOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzIC0gbGlzdCBvZiBhcmVhcyBvZiBtZW1vcnkuCi0gKiBAbGlzdDoJTGlua2VkIGxpc3Qgb2YgYWRkcmVzcyByYW5nZXMuCi0gKiBAcmFuZ2U6CU1lbW9yeSBhZGRyZXNzIHJhbmdlIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gbGlzdCBub2RlLgotICovCi1zdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzIHsKLS8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZSByYW5nZTsKLX07Ci0KLS8qKgotICogc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgLSBlbmNhcHN1bGF0aW9uIG9mIHRoZSBtZW1vcnkgYWxsb2NhdG9yIHN0YXRlCi0gKiBAbG9jazoJCUxvY2sgdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIG1lbW9yeQotICoJCQlhbGxvY2F0b3Igc3RhdGUuCi0gKiBAYmFzZToJCUJhc2UgKHN0YXJ0KSBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0b3IgbWVtb3J5Ci0gKgkJCXNwYWNlLgotICogQGNhcGFjaXR5OgkJU2l6ZSBvZiB0aGUgYWxsb2NhdG9yIG1lbW9yeSBzcGFjZSBpbiBieXRlcy4KLSAqIEBibG9ja19zaXplOgkJVGhlIHNpemUgaW4gYnl0ZXMgb2YgaW5kaXZpZHVhbCBibG9ja3Mgd2l0aGluCi0gKgkJCXRoZSBhbGxvY2F0b3IgbWVtb3J5IHNwYWNlLgotICogQGxhcmdlc3RfZnJlZV9hcmVhOglMYXJnZXN0IGZyZWUgYXJlYSBvZiBtZW1vcnkgaW4gdGhlIGFsbG9jYXRvcgotICoJCQlpbiBieXRlcy4KLSAqIEBhbGxvY2F0ZWRfbGlzdDoJTGlzdCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrIGFkZHJlc3MKLSAqCQkJcmFuZ2VzLgotICogQGZyZWVfbGlzdDoJCUxpc3Qgb2YgZnJlZSBhZGRyZXNzIHJhbmdlcy4KLSAqCi0gKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgbWVtb3J5IGFsbG9jYXRvciBzdGF0ZSwgaW5jbHVkaW5nIHRoZQotICogYmFzZSBhZGRyZXNzLCBjYXBhY2l0eSwgZnJlZSBsaXN0LCBsb2NrLCBldGMuCi0gKi8KLXN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yIHsKLS8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovCi0Jc3RydWN0IG11dGV4IGxvY2s7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOwotCXNpemVfdCBjYXBhY2l0eTsKLQlzaXplX3QgYmxvY2tfc2l6ZTsKLQlzaXplX3QgbGFyZ2VzdF9mcmVlX2FyZWE7Ci0Jc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcyBhbGxvY2F0ZWRfbGlzdDsKLQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzIGZyZWVfbGlzdDsKLX07Ci0KLS8qKgotICogbWVtcmFyX2NyZWF0ZV9hbGxvY2F0b3IoKSAtIGNyZWF0ZSBhIG1lbW9yeSBhbGxvY2F0b3IKLSAqIEBiYXNlOglBZGRyZXNzIGF0IHdoaWNoIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGJlZ2lucy4KLSAqIEBjYXBhY2l0eToJRGVzaXJlZCBzaXplIG9mIHRoZSBtZW1vcnkgYWxsb2NhdG9yLiAgVGhpcyB2YWx1ZSBtdXN0Ci0gKgkJYmUgbGFyZ2VyIHRoYW4gdGhlIGJsb2NrX3NpemUsIGlkZWFsbHkgbW9yZSB0aGFuIHR3aWNlCi0gKgkJYXMgbGFyZ2Ugc2luY2UgdGhlcmUgd291bGRuJ3QgYmUgbXVjaCBwb2ludCBpbiB1c2luZyBhCi0gKgkJbWVtb3J5IGFsbG9jYXRvciBvdGhlcndpc2UuCi0gKiBAYmxvY2tfc2l6ZToJVGhlIHNpemUgb2YgaW5kaXZpZHVhbCBibG9ja3Mgd2l0aGluIHRoZSBtZW1vcnkKLSAqCQlhbGxvY2F0b3IuICBUaGlzIHZhbHVlIG11c3Qgc21hbGxlciB0aGFuIHRoZQotICoJCWNhcGFjaXR5LgotICoKLSAqIENyZWF0ZSBhIG1lbW9yeSBhbGxvY2F0b3Igd2l0aCB0aGUgZ2l2ZW4gY2FwYWNpdHkgYW5kIGJsb2NrIHNpemUuCi0gKiBUaGUgY2FwYWNpdHkgd2lsbCBiZSByZWR1Y2VkIHRvIGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUsIGlmCi0gKiBuZWNlc3NhcnkuCi0gKgotICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRvciwgaWYgY3JlYXRpb24gc3VjY2VlZHMsCi0gKiBvdGhlcndpc2UgemVybyBpZiBjcmVhdGlvbiBmYWlscy4gIEZhaWx1cmUgbWF5IG9jY3VyIGlmIG5vdCBlbm91Z2gKLSAqIGtlcm5lbCBtZW1vcnkgZXhpc3RzIHRvIGNyZWF0ZSB0aGUgbWVtcmFyX2FsbG9jYXRvciBpbnN0YW5jZQotICogaXRzZWxmLCBvciBpZiB0aGUgY2FwYWNpdHkgYW5kIGJsb2NrX3NpemUgYXJndW1lbnRzIGFyZSBub3QKLSAqIGNvbXBhdGlibGUgb3IgbWFrZSBzZW5zZS4KLSAqLwotc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKm1lbXJhcl9jcmVhdGVfYWxsb2NhdG9yKHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCQkJCSBzaXplX3QgY2FwYWNpdHksCi0JCQkJCQkgc2l6ZV90IGJsb2NrX3NpemUpOwotCi0vKioKLSAqIG1lbXJhcl9kZXN0cm95X2FsbG9jYXRvcigpIC0gZGVzdHJveSBhbGxvY2F0b3IKLSAqIEBhbGxvY2F0b3I6CVRoZSBhbGxvY2F0b3IgYmVpbmcgZGVzdHJveWVkLgotICoKLSAqIFJlY2xhaW0gcmVzb3VyY2VzIGhlbGQgYnkgdGhlIG1lbW9yeSBhbGxvY2F0b3IuICBUaGUgY2FsbGVyIG11c3QKLSAqIGV4cGxpY2l0bHkgZnJlZSBhbGwgbWVtb3J5IHJlc2VydmVkIGJ5IG1lbXJhcl9hbGxvY2F0b3JfYWxsb2MoKQotICogcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAgT3RoZXJ3aXNlIGxlYWtzIHdpbGwgb2NjdXIuCi0gKi8KLXZvaWQgbWVtcmFyX2Rlc3Ryb3lfYWxsb2NhdG9yKHN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICphbGxvY2F0b3IpOwotCi0vKioKLSAqIG1lbXJhcl9hbGxvY2F0b3JfYWxsb2MoKSAtIHJlc2VydmUgYW4gYXJlYSBvZiBtZW1vcnkgb2YgZ2l2ZW4gc2l6ZQotICogQGFsbG9jYXRvcjoJVGhlIGFsbG9jYXRvciBpbnN0YW5jZSBiZWluZyB1c2VkIHRvIHJlc2VydmUgYnVmZmVyLgotICogQHNpemU6CVRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgdG8gYWxsb2NhdGUuCi0gKgotICogVGhpcyBmdW5jdGlvbnMgcmVzZXJ2ZXMgYW4gYXJlYSBvZiBtZW1vcnkgbWFuYWdlZCBieSB0aGUgZ2l2ZW4KLSAqIGFsbG9jYXRvci4gIEl0IHJldHVybnMgemVybyBpZiBhbGxvY2F0aW9uIHdhcyBub3QgcG9zc2libGUuCi0gKiBGYWlsdXJlIG1heSBvY2N1ciBpZiB0aGUgYWxsb2NhdG9yIG5vIGxvbmdlciBoYXMgc3BhY2UgYXZhaWxhYmxlLgotICovCi11bnNpZ25lZCBsb25nIG1lbXJhcl9hbGxvY2F0b3JfYWxsb2Moc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKmFsbG9jYXRvciwKLQkJCQkgICAgIHNpemVfdCBzaXplKTsKLQotLyoqCi0gKiBtZW1yYXJfYWxsb2NhdG9yX2ZyZWUoKSAtIHJlbGVhc2UgYnVmZmVyIHN0YXJ0aW5nIGF0IGdpdmVuIGFkZHJlc3MKLSAqIEBhbGxvY2F0b3I6CVRoZSBhbGxvY2F0b3IgaW5zdGFuY2UgYmVpbmcgdXNlZCB0byByZWxlYXNlIHRoZSBidWZmZXIuCi0gKiBAYWRkcmVzczoJVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBiZWluZyByZWxlYXNlZC4KLSAqCi0gKiBSZWxlYXNlIGFuIGFyZWEgb2YgbWVtb3J5IHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyZXNzLiAgRmFpbHVyZQotICogY291bGQgb2NjdXIgaWYgdGhlIGdpdmVuIGFkZHJlc3MgaXMgbm90IGluIHRoZSBhZGRyZXNzIHNwYWNlCi0gKiBtYW5hZ2VkIGJ5IHRoZSBhbGxvY2F0b3IuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhbiBlcnJubwotICogKG5lZ2F0aXZlIHZhbHVlKSBvbiBmYWlsdXJlLgotICovCi1sb25nIG1lbXJhcl9hbGxvY2F0b3JfZnJlZShzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqYWxsb2NhdG9yLAotCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLQotI2VuZGlmICAvKiBNRU1SQVJfQUxMT0NBVE9SX0ggKi8KLQotCi0vKgotICBMb2NhbCBWYXJpYWJsZXM6Ci0gICAgYy1maWxlLXN0eWxlOiAibGludXgiCi0gIEVuZDoKLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9oYW5kbGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9oYW5kbGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmY2FhOGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfaGFuZGxlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAwNyArMCwwIEBACi0vKgotICogICAgICBtZW1yYXJfaGFuZGxlciAxLjA6ICBBbiBJbnRlbCByZXN0cmljdGVkIGFjY2VzcyByZWdpb24gaGFuZGxlciBkZXZpY2UKLSAqCi0gKiAgICAgIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsCi0gKiAgICAgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICogICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCi0gKiAgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqICAgICAgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAqICAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogICAgICBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKiAgICAgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMKLSAqICAgICAgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiAgICAgIE1vb3Jlc3Rvd24gcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucyAoUkFSKSBwcm92aWRlIGlzb2xhdGVkCi0gKiAgICAgIGFyZWFzIG9mIG1haW4gbWVtb3J5IHRoYXQgYXJlIG9ubHkgYWNjZWVzc2libGUgYnkgYXV0aG9yaXplZAotICogICAgICBkZXZpY2VzLgotICoKLSAqICAgICAgVGhlIEludGVsIE1vb3Jlc3Rvd24gUkFSIGhhbmRsZXIgbW9kdWxlIGV4cG9zZXMgYSBrZXJuZWwgc3BhY2UKLSAqICAgICAgUkFSIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbS4gIEl0IGlzIGVzc2VudGlhbGx5IGEKLSAqICAgICAgUkFSLXNwZWNpZmljIGFsbG9jYXRvci4KLSAqCi0gKiAgICAgIEJlc2lkZXMgcHJvdmlkaW5nIFJBUiBidWZmZXIgbWFuYWdlbWVudCwgdGhlIFJBUiBoYW5kbGVyIGFsc28KLSAqICAgICAgYmVoYXZlcyBpbiBtYW55IHdheXMgbGlrZSBhbiBPUyB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VyLiAgRm9yCi0gKiAgICAgIGV4YW1wbGUsIHRoZSBSQVIgImhhbmRsZXMiIGNyZWF0ZWQgYnkgdGhlIFJBUiBoYW5kbGVyIGFyZQotICogICAgICBhbmFsb2dvdXMgdG8gdXNlciBzcGFjZSB2aXJ0dWFsIGFkZHJlc3Nlcy4KLSAqCi0gKiAgICAgIFJBUiBtZW1vcnkgaXRzZWxmIGlzIG5ldmVyIGFjY2Vzc2VkIGRpcmVjdGx5IGJ5IHRoZSBSQVIKLSAqICAgICAgaGFuZGxlci4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFyX3JlZ2lzdGVyLmg+Ci0KLSNpbmNsdWRlICJtZW1yYXIuaCIKLSNpbmNsdWRlICJtZW1yYXJfYWxsb2NhdG9yLmgiCi0KLQotI2RlZmluZSBNRU1SQVJfVkVSICIxLjAiCi0KLS8qCi0gKiBNb29yZXN0b3duIHN1cHBvcnRzIHRocmVlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMuCi0gKgotICogV2Ugb25seSBjYXJlIGFib3V0IHRoZSBmaXJzdCB0d28sIHZpZGVvIGFuZCBhdWRpby4gIFRoZSB0aGlyZCwKLSAqIHJlc2VydmVkIGZvciBDaGFhYmkgYW5kIHRoZSBQLXVuaXQsIHdpbGwgYmUgaGFuZGxlZCBieSB0aGVpcgotICogcmVzcGVjdGl2ZSBkcml2ZXJzLgotICovCi0jZGVmaW5lIE1SU1RfTlVNX1JBUiAyCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKioKLSAqIHN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8gLSBzdHJ1Y3QgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgUkFSIGJ1ZmZlcnMKLSAqIEBsaXN0OglMaW5rZWQgbGlzdCBvZiBtZW1yYXJfYnVmZmVyX2luZm8gb2JqZWN0cy4KLSAqIEBidWZmZXI6CUNvcmUgUkFSIGJ1ZmZlciBpbmZvcm1hdGlvbi4KLSAqIEByZWZjb3VudDoJUmVmZXJlbmNlIGNvdW50LgotICogQG93bmVyOglGaWxlIGhhbmRsZSBjb3JyZXNwb25kaW5nIHRvIHByb2Nlc3MgdGhhdCByZXNlcnZlZCB0aGUKLSAqCQlibG9jayBvZiBtZW1vcnkgaW4gUkFSLiAgVGhpcyB3aWxsIGJlIHplcm8gZm9yIGJ1ZmZlcnMKLSAqCQlhbGxvY2F0ZWQgYnkgb3RoZXIgZHJpdmVycyBpbnN0ZWFkIG9mIGJ5IGEgdXNlciBzcGFjZQotICoJCXByb2Nlc3MuCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGEgbGluayBsaXN0IG9mIFJBUiBidWZmZXJzLCBhcyB3ZWxsIGFzCi0gKiBvdGhlciBjaGFyYWN0ZXJpc3RpY3Mgc3BlY2lmaWMgdG8gYSBnaXZlbiBsaXN0IG5vZGUsIHN1Y2ggYXMgdGhlCi0gKiByZWZlcmVuY2UgY291bnQgb24gdGhlIGNvcnJlc3BvbmRpbmcgUkFSIGJ1ZmZlci4KLSAqLwotc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBSQVJfYnVmZmVyIGJ1ZmZlcjsKLQlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKLQlzdHJ1Y3QgZmlsZSAqb3duZXI7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBtZW1yYXJfcmFyX2luZm8gLSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBnaXZlbiBSQVIKLSAqIEBiYXNlOglCYXNlIGJ1cyBhZGRyZXNzIG9mIHRoZSBSQVIuCi0gKiBAbGVuZ3RoOglMZW5ndGggb2YgdGhlIFJBUi4KLSAqIEBpb2Jhc2U6CVZpcnR1YWwgYWRkcmVzcyBvZiBSQVIgbWFwcGVkIGludG8ga2VybmVsLgotICogQGFsbG9jYXRvcjoJQWxsb2NhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgUkFSLiAgTm90ZSB0aGUgYWxsb2NhdG9yCi0gKgkJImNhcGFjaXR5IiBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSBSQVIgbGVuZ3RoIGlmIHRoZQotICoJCWxlbmd0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY29uZmlndXJlZCBhbGxvY2F0b3IKLSAqCQlibG9jayBzaXplLgotICogQGJ1ZmZlcnM6CVRhYmxlIHRoYXQga2VlcHMgdHJhY2sgb2YgYWxsIHJlc2VydmVkIFJBUiBidWZmZXJzLgotICogQGxvY2s6CUxvY2sgdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gUkFSLXNwZWNpZmljIGRhdGEKLSAqCQlzdHJ1Y3R1cmVzLgotICoKLSAqIEVhY2ggUkFSIGhhcyBhbiBhc3NvY2lhdGVkIG1lbXJhcl9yYXJfaW5mbyBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMKLSAqIHdoZXJlIGluIG1lbW9yeSB0aGUgUkFSIGlzIGxvY2F0ZWQsIGhvdyBsYXJnZSBpdCBpcywgYW5kIGEgbGlzdCBvZgotICogcmVzZXJ2ZWQgUkFSIGJ1ZmZlcnMgaW5zaWRlIHRoYXQgUkFSLiAgRWFjaCBSQVIgYWxzbyBoYXMgYSBtdXRleAotICogYXNzb2NpYXRlZCB3aXRoIGl0IHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gd2hlbiBvcGVyYXRpb25zIG9uCi0gKiBtdWx0aXBsZSBSQVJzIGFyZSBwZXJmb3JtZWQgaW4gcGFyYWxsZWwuCi0gKi8KLXN0cnVjdCBtZW1yYXJfcmFyX2luZm8gewotCWRtYV9hZGRyX3QgYmFzZTsKLQl1bnNpZ25lZCBsb25nIGxlbmd0aDsKLQl2b2lkIF9faW9tZW0gKmlvYmFzZTsKLQlzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqYWxsb2NhdG9yOwotCXN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8gYnVmZmVyczsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlpbnQgYWxsb2NhdGVkOwkvKiBUcnVlIGlmIHdlIG93biB0aGlzIFJBUiAqLwotfTsKLQotLyoKLSAqIEFycmF5IG9mIFJBUiBjaGFyYWN0ZXJpc3RpY3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvIG1lbXJhcnNbTVJTVF9OVU1fUkFSXTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIFZhbGlkYXRlIFJBUiB0eXBlLiAqLwotc3RhdGljIGlubGluZSBpbnQgbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHUzMiB0eXBlKQotewotCXJldHVybiB0eXBlID09IFJBUl9UWVBFX1ZJREVPIHx8IHR5cGUgPT0gUkFSX1RZUEVfQVVESU87Ci19Ci0KLS8qIENoZWNrIGlmIGFuIGFkZHJlc3MvaGFuZGxlIGZhbGxzIHdpdGggdGhlIGdpdmVuIFJBUiBtZW1vcnkgcmFuZ2UuICovCi1zdGF0aWMgaW5saW5lIGludCBtZW1yYXJfaGFuZGxlX2luX3JhbmdlKHN0cnVjdCBtZW1yYXJfcmFyX2luZm8gKnJhciwKLQkJCQkJIHUzMiB2YWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIGNvbnN0IGlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKSAocmFyLT5pb2Jhc2UpOwotCXJldHVybiAodmFkZHIgPj0gaW9iYXNlICYmIHZhZGRyIDwgaW9iYXNlICsgcmFyLT5sZW5ndGgpOwotfQotCi0vKiBSZXRyaWV2ZSBSQVIgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBoYW5kbGUuICovCi1zdGF0aWMgc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqbWVtcmFyX2dldF9yYXJfaW5mbyh1MzIgdmFkZHIpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE1SU1RfTlVNX1JBUjsgKytpKSB7Ci0JCXN0cnVjdCBtZW1yYXJfcmFyX2luZm8gKiBjb25zdCByYXIgPSAmbWVtcmFyc1tpXTsKLQkJaWYgKG1lbXJhcl9oYW5kbGVfaW5fcmFuZ2UocmFyLCB2YWRkcikpCi0JCQlyZXR1cm4gcmFyOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0vKioKLSAqCW1lbXJhcl9nZXRfYnVzIGFkZHJlc3MJCS0JaGFuZGxlIHRvIGJ1cyBhZGRyZXNzCi0gKgotICoJUmV0cmlldmUgYnVzIGFkZHJlc3MgZnJvbSBnaXZlbiBoYW5kbGUuCi0gKgotICoJUmV0dXJucyBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gaGFuZGxlLiAgWmVybyBpZiBoYW5kbGUgaXMKLSAqCWludmFsaWQuCi0gKi8KLXN0YXRpYyBkbWFfYWRkcl90IG1lbXJhcl9nZXRfYnVzX2FkZHJlc3MoCi0Jc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqcmFyLAotCXUzMiB2YWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIGNvbnN0IGlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKSAocmFyLT5pb2Jhc2UpOwotCi0JaWYgKCFtZW1yYXJfaGFuZGxlX2luX3JhbmdlKHJhciwgdmFkZHIpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogQW4gYXNzdW1wdGlvbiBpcyBtYWRlIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZmZzZXQgaXMKLQkgKiB0aGUgc2FtZSBhcyB0aGUgYnVzIGFkZHJlc3Mgb2Zmc2V0LCBhdCBsZWFzdCBiYXNlZCBvbiB0aGUKLQkgKiB3YXkgdGhpcyBkcml2ZXIgaXMgaW1wbGVtZW50ZWQuICBGb3IgZXhhbXBsZSwgdmFkZHIgKyAyID09Ci0JICogYmFkZHIgKyAyLgotCSAqCi0JICogQHRvZG8gSXMgdGhhdCBhIHZhbGlkIGFzc3VtcHRpb24/Ci0JICovCi0JcmV0dXJuIHJhci0+YmFzZSArICh2YWRkciAtIGlvYmFzZSk7Ci19Ci0KLS8qKgotICoJbWVtcmFyX2dldF9waHlzaWNhbF9hZGRyZXNzCS0JaGFuZGxlIHRvIHBoeXNpY2FsIGFkZHJlc3MKLSAqCi0gKglSZXRyaWV2ZSBwaHlzaWNhbCBhZGRyZXNzIGZyb20gZ2l2ZW4gaGFuZGxlLgotICoKLSAqCVJldHVybnMgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGhhbmRsZS4gIFplcm8gaWYgaGFuZGxlIGlzCi0gKglpbnZhbGlkLgotICovCi1zdGF0aWMgZG1hX2FkZHJfdCBtZW1yYXJfZ2V0X3BoeXNpY2FsX2FkZHJlc3MoCi0Jc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqcmFyLAotCXUzMiB2YWRkcikKLXsKLQkvKgotCSAqIEB0b2RvIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBidXMgYWRkcmVzcyBhbmQgcGh5c2ljYWwKLQkgKiAgICAgICBhZGRyZXNzIGFyZSB0aGUgc2FtZS4gIFRoYXQgaXMgdHJ1ZSBmb3IgTW9vcmVzdG93bgotCSAqICAgICAgIGJ1dCBub3QgbmVjZXNzYXJpbHkgb24gb3RoZXIgcGxhdGZvcm1zLiAgVGhpcwotCSAqICAgICAgIGRlZmljaWVuY3kgc2hvdWxkIGJlIGFkZHJlc3NlZCBhdCBzb21lIHBvaW50LgotCSAqLwotCXJldHVybiBtZW1yYXJfZ2V0X2J1c19hZGRyZXNzKHJhciwgdmFkZHIpOwotfQotCi0vKioKLSAqCW1lbXJhcl9yZWxlYXNlX2Jsb2NrCS0JcmVsZWFzZSBhIGJsb2NrIHRvIHRoZSBwb29sCi0gKglAa3JlZjoga3JlZiBvZiBibG9jawotICoKLSAqCUNvcmUgYmxvY2sgcmVsZWFzZSBjb2RlLiBBIG5vZGUgaGFzIGhpdCB6ZXJvIHJlZmVyZW5jZXMgc28gY2FuCi0gKgliZSByZWxlYXNlZCBhbmQgdGhlIGxpc3RzIG11c3QgYmUgdXBkYXRlZC4KLSAqCi0gKglOb3RlOiBUaGlzIGNvZGUgcmVtb3ZlcyB0aGUgbm9kZSBmcm9tIGEgbGlzdC4gIE1ha2Ugc3VyZSBhbnkgbGlzdAotICoJaXRlcmF0aW9uIGlzIHBlcmZvcm1lZCB1c2luZyBsaXN0X2Zvcl9lYWNoX3NhZmUoKS4KLSAqLwotc3RhdGljIHZvaWQgbWVtcmFyX3JlbGVhc2VfYmxvY2tfaShzdHJ1Y3Qga3JlZiAqcmVmKQotewotCS8qCi0JICogTGFzdCByZWZlcmVuY2UgaXMgYmVpbmcgcmVsZWFzZWQuICBSZW1vdmUgZnJvbSB0aGUgdGFibGUsCi0JICogYW5kIHJlY2xhaW0gcmVzb3VyY2VzLgotCSAqLwotCi0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAqIGNvbnN0IG5vZGUgPQotCQljb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvLCByZWZjb3VudCk7Ci0KLQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gKiBjb25zdCB1c2VyX2luZm8gPQotCQkmbm9kZS0+YnVmZmVyLmluZm87Ci0KLQlzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqIGNvbnN0IGFsbG9jYXRvciA9Ci0JCW1lbXJhcnNbdXNlcl9pbmZvLT50eXBlXS5hbGxvY2F0b3I7Ci0KLQlsaXN0X2RlbCgmbm9kZS0+bGlzdCk7Ci0KLQltZW1yYXJfYWxsb2NhdG9yX2ZyZWUoYWxsb2NhdG9yLCB1c2VyX2luZm8tPmhhbmRsZSk7Ci0KLQlrZnJlZShub2RlKTsKLX0KLQotLyoqCi0gKgltZW1yYXJfaW5pdF9yYXJfcmVzb3VyY2VzCS0JY29uZmlndXJlIGEgUkFSCi0gKglAcmFybnVtOiByYXIgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQKLSAqCUBkZXZuYW1lOiBuYW1lIG9mIG91ciBkZXZpY2UKLSAqCi0gKglJbml0aWFsaXplIFJBUiBwYXJhbWV0ZXJzLCBzdWNoIGFzIGJ1cyBhZGRyZXNzZXMsIGV0YyBhbmQgbWFrZQotICoJdGhlIHJlc291cmNlIGFjY2Vzc2libGUuCi0gKi8KLXN0YXRpYyBpbnQgbWVtcmFyX2luaXRfcmFyX3Jlc291cmNlcyhpbnQgcmFybnVtLCBjaGFyIGNvbnN0ICpkZXZuYW1lKQotewotCS8qIC0tLS0gU2FuaXR5IENoZWNrcyAtLS0tCi0JICogMS4gUkFSIGJ1cyBhZGRyZXNzZXMgaW4gYm90aCBMaW5jcm9mdCBhbmQgTGFuZ3dlbGwgUkFSCi0JICogICAgcmVnaXN0ZXJzIHNob3VsZCBiZSB0aGUgc2FtZS4KLQkgKiAgICBhLiBUaGVyZSdzIG5vIHdheSB3ZSBjYW4gZG8gdGhpcyB0aHJvdWdoIElBLgotCSAqCi0JICogMi4gU2VjdXJlIGRldmljZSBJRCBpbiBMYW5nd2VsbCBSQVIgcmVnaXN0ZXJzIHNob3VsZCBiZSBzZXQKLQkgKiAgICBhcHByb3ByaWF0ZWx5LCBlLmcuIG9ubHkgTFBFIERNQSBmb3IgdGhlIGF1ZGlvIFJBUiwgYW5kCi0JICogICAgc2VjdXJpdHkgZm9yIHRoZSBvdGhlciBMYW5nd2VsbCBiYXNlZCBSQVIgcmVnaXN0ZXJzLgotCSAqICAgIGEuIFRoZXJlJ3Mgbm8gd2F5IHdlIGNhbiBkbyB0aGlzIHRocm91Z2ggSUEuCi0JICoKLQkgKiAzLiBBdWRpbyBhbmQgdmlkZW8gUkFSIHJlZ2lzdGVycyBhbmQgUkFSIGFjY2VzcyBzaG91bGQgYmUKLQkgKiAgICBsb2NrZWQgZG93bi4gIElmIG5vdCwgZW5hYmxlIFJBUiBhY2Nlc3MgY29udHJvbC4gIEV4Y2VwdAotCSAqICAgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHRoZXJlIGlzIG5vIHJlYXNvbiBmb3IgdGhlbSB0bwotCSAqICAgIGJlIHVubG9ja2VkLgotCSAqICAgIGEuICBXZSBjYW4gb25seSBkbyB0aGlzIGZvciB0aGUgTGluY3JvZnQgKElBKSBzaWRlLgotCSAqCi0JICogQHRvZG8gU2hvdWxkIHRoZSBSQVIgaGFuZGxlciBkcml2ZXIgZXZlbiBiZSBhd2FyZSBvZiBhdWRpbwotCSAqICAgICAgIGFuZCB2aWRlbyBSQVIgc2V0dGluZ3M/Ci0JICovCi0KLQkvKgotCSAqIFJBUiBidWZmZXIgYmxvY2sgc2l6ZS4KLQkgKgotCSAqIFdlIGNob29zZSBpdCB0byBiZSB0aGUgc2l6ZSBvZiBhIHBhZ2UgdG8gc2ltcGxpZnkgdGhlCi0JICogL2Rldi9tZW1yYXIgbW1hcCgpIGltcGxlbWVudGF0aW9uIGFuZCB1c2FnZS4gIE90aGVyd2lzZQotCSAqIHBhZ2luZyBpcyBub3QgaW52b2x2ZWQgb25jZSBhbiBSQVIgaXMgbG9ja2VkIGRvd24uCi0JICovCi0Jc3RhdGljIHNpemVfdCBjb25zdCBSQVJfQkxPQ0tfU0laRSA9IFBBR0VfU0laRTsKLQotCWRtYV9hZGRyX3QgbG93LCBoaWdoOwotCXN0cnVjdCBtZW1yYXJfcmFyX2luZm8gKiBjb25zdCByYXIgPSAmbWVtcmFyc1tyYXJudW1dOwotCi0JQlVHX09OKE1SU1RfTlVNX1JBUiAhPSBBUlJBWV9TSVpFKG1lbXJhcnMpKTsKLQlCVUdfT04oIW1lbXJhcl9pc192YWxpZF9yYXJfdHlwZShyYXJudW0pKTsKLQlCVUdfT04ocmFyLT5hbGxvY2F0ZWQpOwotCi0JaWYgKHJhcl9nZXRfYWRkcmVzcyhyYXJudW0sICZsb3csICZoaWdoKSAhPSAwKQotCQkvKiBObyBSQVIgaXMgYXZhaWxhYmxlLiAqLwotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChsb3cgPT0gMCB8fCBoaWdoID09IDApIHsKLQkJcmFyLT5iYXNlICAgICAgPSAwOwotCQlyYXItPmxlbmd0aCAgICA9IDA7Ci0JCXJhci0+aW9iYXNlICAgID0gTlVMTDsKLQkJcmFyLT5hbGxvY2F0b3IgPSBOVUxMOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQkvKgotCSAqIEB0b2RvIFZlcmlmeSB0aGF0IExOQyBhbmQgTE5XIFJBUiByZWdpc3RlciBjb250ZW50cwotCSAqICAgICAgIGFkZHJlc3Nlcywgc2VjdXJpdHksIGV0YyBhcmUgY29tcGF0aWJsZSBhbmQKLQkgKiAgICAgICBjb25zaXN0ZW50KS4KLQkgKi8KLQotCXJhci0+bGVuZ3RoID0gaGlnaCAtIGxvdyArIDE7Ci0KLQkvKiBDbGFpbSBSQVIgbWVtb3J5IGFzIG91ciBvd24uICovCi0JaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsb3csIHJhci0+bGVuZ3RoLCBkZXZuYW1lKSA9PSBOVUxMKSB7Ci0JCXJhci0+bGVuZ3RoID0gMDsKLQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGNsYWltIFJBUlslZF0gbWVtb3J5LlxuIiwKLQkJICAgICAgIGRldm5hbWUsIHJhcm51bSk7Ci0JCXByX2VycigiJXM6IFJBUlslZF0gZGlzYWJsZWQuXG4iLCBkZXZuYW1lLCByYXJudW0pOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJhci0+YmFzZSA9IGxvdzsKLQotCS8qCi0JICogTm93IG1hcCBpdCBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KLQkgKgotCSAqIE5vdGUgdGhhdCB0aGUgUkFSIG1lbW9yeSBtYXkgb25seSBiZSBhY2Nlc3NlZCBieSBJQQotCSAqIHdoZW4gZGVidWdnaW5nLiAgT3RoZXJ3aXNlIGF0dGVtcHRzIHRvIGFjY2VzcyB0aGUKLQkgKiBSQVIgbWVtb3J5IHdoZW4gaXQgaXMgbG9ja2VkIGRvd24gd2lsbCByZXN1bHQgaW4KLQkgKiBiZWhhdmlvciBzaW1pbGFyIHRvIHdyaXRpbmcgdG8gL2Rldi9udWxsIGFuZAotCSAqIHJlYWRpbmcgZnJvbSAvZGV2L3plcm8uICBUaGlzIGJlaGF2aW9yIGlzIGVuZm9yY2VkCi0JICogYnkgdGhlIGhhcmR3YXJlLiAgRXZlbiBpZiB3ZSBkb24ndCBhY2Nlc3MgdGhlCi0JICogbWVtb3J5LCBtYXBwaW5nIGl0IGludG8gdGhlIGtlcm5lbCBwcm92aWRlcyB1cyB3aXRoCi0JICogYSBjb252ZW5pZW50IFJBUiBoYW5kbGUgdG8gYnVzIGFkZHJlc3MgbWFwcGluZy4KLQkgKi8KLQlyYXItPmlvYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyYXItPmJhc2UsIHJhci0+bGVuZ3RoKTsKLQlpZiAocmFyLT5pb2Jhc2UgPT0gTlVMTCkgewotCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gbWFwIFJBUiBtZW1vcnkuXG4iLCBkZXZuYW1lKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGxvdywgcmFyLT5sZW5ndGgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIGNvcnJlc3BvbmRpbmcgbWVtb3J5IGFsbG9jYXRvci4gKi8KLQlyYXItPmFsbG9jYXRvciA9IG1lbXJhcl9jcmVhdGVfYWxsb2NhdG9yKCh1bnNpZ25lZCBsb25nKSByYXItPmlvYmFzZSwKLQkJCQkJCXJhci0+bGVuZ3RoLCBSQVJfQkxPQ0tfU0laRSk7Ci0JaWYgKHJhci0+YWxsb2NhdG9yID09IE5VTEwpIHsKLQkJaW91bm1hcChyYXItPmlvYmFzZSk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihsb3csIHJhci0+bGVuZ3RoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJfaW5mbygiJXM6IEJSQVJbJWRdIGJ1cyBhZGRyZXNzIHJhbmdlID0gWzB4JWx4LCAweCVseF1cbiIsCi0JCWRldm5hbWUsIHJhcm51bSwgKHVuc2lnbmVkIGxvbmcpIGxvdywgKHVuc2lnbmVkIGxvbmcpIGhpZ2gpOwotCi0JcHJfaW5mbygiJXM6IEJSQVJbJWRdIHNpemUgPSAlenUgS2lCXG4iLAotCQkJZGV2bmFtZSwgcmFybnVtLCByYXItPmFsbG9jYXRvci0+Y2FwYWNpdHkgLyAxMDI0KTsKLQotCXJhci0+YWxsb2NhdGVkID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgltZW1yYXJfZmluaV9yYXJfcmVzb3VyY2VzCS0JZnJlZSB1cCBSQVIgcmVzb3VyY2VzCi0gKgotICoJRmluYWxpemUgUkFSIHJlc291cmNlcy4gRnJlZSB1cCB0aGUgcmVzb3VyY2UgdGFibGVzLCBoYW5kIHRoZSBtZW1vcnkKLSAqCWJhY2sgdG8gdGhlIGtlcm5lbCwgdW5tYXAgdGhlIGRldmljZSBhbmQgcmVsZWFzZSB0aGUgYWRkcmVzcyBzcGFjZS4KLSAqLwotc3RhdGljIHZvaWQgbWVtcmFyX2ZpbmlfcmFyX3Jlc291cmNlcyh2b2lkKQotewotCWludCB6OwotCXN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8gKnBvczsKLQlzdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvICp0bXA7Ci0KLQkvKgotCSAqIEB0b2RvIERvIHdlIG5lZWQgdG8gaG9sZCBhIGxvY2sgYXQgdGhpcyBwb2ludCBpbiB0aW1lPwotCSAqICAgICAgIChtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSBvciBleGl0PykKLQkgKi8KLQotCWZvciAoeiA9IE1SU1RfTlVNX1JBUjsgei0tICE9IDA7ICkgewotCQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICogY29uc3QgcmFyID0gJm1lbXJhcnNbel07Ci0KLQkJaWYgKCFyYXItPmFsbG9jYXRlZCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIENsZWFuIHVwIHJlbWFpbmluZyByZXNvdXJjZXMuICovCi0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywKLQkJCQkJIHRtcCwKLQkJCQkJICZyYXItPmJ1ZmZlcnMubGlzdCwKLQkJCQkJIGxpc3QpIHsKLQkJCWtyZWZfcHV0KCZwb3MtPnJlZmNvdW50LCBtZW1yYXJfcmVsZWFzZV9ibG9ja19pKTsKLQkJfQotCi0JCW1lbXJhcl9kZXN0cm95X2FsbG9jYXRvcihyYXItPmFsbG9jYXRvcik7Ci0JCXJhci0+YWxsb2NhdG9yID0gTlVMTDsKLQotCQlpb3VubWFwKHJhci0+aW9iYXNlKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHJhci0+YmFzZSwgcmFyLT5sZW5ndGgpOwotCi0JCXJhci0+aW9iYXNlID0gTlVMTDsKLQkJcmFyLT5iYXNlID0gMDsKLQkJcmFyLT5sZW5ndGggPSAwOwotCi0JCXVucmVnaXN0ZXJfcmFyKHopOwotCX0KLX0KLQotLyoqCi0gKgltZW1yYXJfcmVzZXJ2ZV9ibG9jawktCWhhbmRsZSBhbiBhbGxvY2F0aW9uIHJlcXVlc3QKLSAqCUByZXF1ZXN0OiBibG9jayBiZWluZyByZXF1ZXN0ZWQKLSAqCUBmaWxwOiBvd25lciBpdCBpcyB0aWVkIHRvCi0gKgotICoJQWxsb2NhdGUgYSBibG9jayBvZiB0aGUgcmVxdWVzdGVkIFJBUi4gSWYgc3VjY2Vzc2Z1bCByZXR1cm4gdGhlCi0gKglyZXF1ZXN0IG9iamVjdCBmaWxsZWQgaW4gYW5kIHplcm8sIGlmIG5vdCByZXBvcnQgYW4gZXJyb3IgY29kZQotICovCi0KLXN0YXRpYyBsb25nIG1lbXJhcl9yZXNlcnZlX2Jsb2NrKHN0cnVjdCBSQVJfYnVmZmVyICpyZXF1ZXN0LAotCQkJCSBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gKiBjb25zdCByaW5mbyA9ICZyZXF1ZXN0LT5pbmZvOwotCXN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAqYnVmZmVyX2luZm87Ci0JdTMyIGhhbmRsZTsKLQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICpyYXIgPSBOVUxMOwotCi0JLyogUHJldmVudCBhcnJheSBvdmVyZmxvdy4gKi8KLQlpZiAoIW1lbXJhcl9pc192YWxpZF9yYXJfdHlwZShyaW5mby0+dHlwZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmFyID0gJm1lbXJhcnNbcmluZm8tPnR5cGVdOwotCWlmICghcmFyLT5hbGxvY2F0ZWQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogUmVzZXJ2ZSBtZW1vcnkgaW4gUkFSLiAqLwotCWhhbmRsZSA9IG1lbXJhcl9hbGxvY2F0b3JfYWxsb2MocmFyLT5hbGxvY2F0b3IsIHJpbmZvLT5zaXplKTsKLQlpZiAoaGFuZGxlID09IDApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYnVmZmVyX2luZm8gPSBrbWFsbG9jKHNpemVvZigqYnVmZmVyX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCWlmIChidWZmZXJfaW5mbyA9PSBOVUxMKSB7Ci0JCW1lbXJhcl9hbGxvY2F0b3JfZnJlZShyYXItPmFsbG9jYXRvciwgaGFuZGxlKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JYnVmZmVyID0gJmJ1ZmZlcl9pbmZvLT5idWZmZXI7Ci0JYnVmZmVyLT5pbmZvLnR5cGUgPSByaW5mby0+dHlwZTsKLQlidWZmZXItPmluZm8uc2l6ZSA9IHJpbmZvLT5zaXplOwotCi0JLyogTWVtb3J5IGhhbmRsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBidXMgYWRkcmVzcy4gKi8KLQlidWZmZXItPmluZm8uaGFuZGxlID0gaGFuZGxlOwotCWJ1ZmZlci0+YnVzX2FkZHJlc3MgPSBtZW1yYXJfZ2V0X2J1c19hZGRyZXNzKHJhciwgaGFuZGxlKTsKLQotCS8qCi0JICogS2VlcCB0cmFjayBvZiBvd25lciBzbyB0aGF0IHdlIGNhbiBsYXRlciBjbGVhbnVwIGlmCi0JICogbmVjZXNzYXJ5LgotCSAqLwotCWJ1ZmZlcl9pbmZvLT5vd25lciA9IGZpbHA7Ci0KLQlrcmVmX2luaXQoJmJ1ZmZlcl9pbmZvLT5yZWZjb3VudCk7Ci0KLQltdXRleF9sb2NrKCZyYXItPmxvY2spOwotCWxpc3RfYWRkKCZidWZmZXJfaW5mby0+bGlzdCwgJnJhci0+YnVmZmVycy5saXN0KTsKLQltdXRleF91bmxvY2soJnJhci0+bG9jayk7Ci0KLQlyaW5mby0+aGFuZGxlID0gYnVmZmVyLT5pbmZvLmhhbmRsZTsKLQlyZXF1ZXN0LT5idXNfYWRkcmVzcyA9IGJ1ZmZlci0+YnVzX2FkZHJlc3M7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgltZW1yYXJfcmVsZWFzZV9ibG9jawkJLQlyZWxlYXNlIGEgUkFSIGJsb2NrCi0gKglAYWRkcjogYWRkcmVzcyBpbiBSQVIgc3BhY2UKLSAqCi0gKglSZWxlYXNlIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgYmxvY2suIFJlbGVhc2VzIGFjdCBvbiBjb21wbGV0ZQotICoJYmxvY2tzLCBwYXJ0aWFsbHkgZnJlZWluZyBhIGJsb2NrIGlzIG5vdCBzdXBwb3J0ZWQKLSAqLwotCi1zdGF0aWMgbG9uZyBtZW1yYXJfcmVsZWFzZV9ibG9jayh1MzIgYWRkcikKLXsKLQlzdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvICpwb3M7Ci0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAqdG1wOwotCXN0cnVjdCBtZW1yYXJfcmFyX2luZm8gKiBjb25zdCByYXIgPSBtZW1yYXJfZ2V0X3Jhcl9pbmZvKGFkZHIpOwotCWxvbmcgcmVzdWx0ID0gLUVJTlZBTDsKLQotCWlmIChyYXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQltdXRleF9sb2NrKCZyYXItPmxvY2spOwotCi0JLyoKLQkgKiBJdGVyYXRlIHRocm91Z2ggdGhlIGJ1ZmZlciBsaXN0IHRvIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBidWZmZXIgdG8gYmUgcmVsZWFzZWQuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywKLQkJCQkgdG1wLAotCQkJCSAmcmFyLT5idWZmZXJzLmxpc3QsCi0JCQkJIGxpc3QpIHsKLQkJc3RydWN0IFJBUl9ibG9ja19pbmZvICogY29uc3QgaW5mbyA9Ci0JCQkmcG9zLT5idWZmZXIuaW5mbzsKLQotCQkvKgotCQkgKiBUYWtlIGludG8gYWNjb3VudCBoYW5kbGUgb2Zmc2V0cyB0aGF0IG1heSBoYXZlIGJlZW4KLQkJICogYWRkZWQgdG8gdGhlIGJhc2UgaGFuZGxlLCBzdWNoIGFzIGluIHRoZSBmb2xsb3dpbmcKLQkJICogc2NlbmFyaW86Ci0JCSAqCi0JCSAqICAgICB1MzIgaGFuZGxlID0gYmFzZSArIG9mZnNldDsKLQkJICogICAgIHJhcl9oYW5kbGVfdG9fYnVzKGhhbmRsZSk7Ci0JCSAqICAgICByYXJfcmVsZWFzZShoYW5kbGUpOwotCQkgKi8KLQkJaWYgKGFkZHIgPj0gaW5mby0+aGFuZGxlCi0JCSAgICAmJiBhZGRyIDwgKGluZm8tPmhhbmRsZSArIGluZm8tPnNpemUpCi0JCSAgICAmJiBtZW1yYXJfaXNfdmFsaWRfcmFyX3R5cGUoaW5mby0+dHlwZSkpIHsKLQkJCWtyZWZfcHV0KCZwb3MtPnJlZmNvdW50LCBtZW1yYXJfcmVsZWFzZV9ibG9ja19pKTsKLQkJCXJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmcmFyLT5sb2NrKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICoJbWVtcmFyX2dldF9zdGF0cwktCXJlYWQgc3RhdGlzdGljcyBmb3IgYSBSQVIKLSAqCUByOiBzdGF0aXN0aWNzIHRvIGJlIGZpbGxlZCBpbgotICoKLSAqCVJldHVybnMgdGhlIHN0YXRpc3RpY3MgZGF0YSBmb3IgdGhlIFJBUiwgb3IgYW4gZXJyb3IgY29kZSBpZgotICoJdGhlIHJlcXVlc3QgY2Fubm90IGJlIGNvbXBsZXRlZAotICovCi1zdGF0aWMgbG9uZyBtZW1yYXJfZ2V0X3N0YXQoc3RydWN0IFJBUl9zdGF0ICpyKQotewotCXN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICphbGxvY2F0b3I7Ci0KLQlpZiAoIW1lbXJhcl9pc192YWxpZF9yYXJfdHlwZShyLT50eXBlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIW1lbXJhcnNbci0+dHlwZV0uYWxsb2NhdGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWFsbG9jYXRvciA9IG1lbXJhcnNbci0+dHlwZV0uYWxsb2NhdG9yOwotCi0JQlVHX09OKGFsbG9jYXRvciA9PSBOVUxMKTsKLQotCS8qCi0JICogQWxsb2NhdG9yIGNhcGFjaXR5IGRvZXNuJ3QgY2hhbmdlIG92ZXIgdGltZS4gIE5vCi0JICogbmVlZCB0byBzeW5jaHJvbml6ZS4KLQkgKi8KLQlyLT5jYXBhY2l0eSA9IGFsbG9jYXRvci0+Y2FwYWNpdHk7Ci0KLQltdXRleF9sb2NrKCZhbGxvY2F0b3ItPmxvY2spOwotCXItPmxhcmdlc3RfYmxvY2tfc2l6ZSA9IGFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWE7Ci0JbXV0ZXhfdW5sb2NrKCZhbGxvY2F0b3ItPmxvY2spOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCW1lbXJhcl9pb2N0bAkJLQlpb2N0bCBjYWxsYmFjawotICoJQGZpbHA6IGZpbGUgaXNzdWluZyB0aGUgcmVxdWVzdAotICoJQGNtZDogY29tbWFuZAotICoJQGFyZzogcG9pbnRlciB0byBjb250cm9sIGluZm9ybWF0aW9uCi0gKgotICoJUGVyZm9ybSBvbmUgb2YgdGhlIGlvY3RscyBzdXBwb3J0ZWQgYnkgdGhlIG1lbXJhciBkZXZpY2UKLSAqLwotCi1zdGF0aWMgbG9uZyBtZW1yYXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwKLQkJCSB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlsb25nIHJlc3VsdCA9IDA7Ci0KLQlzdHJ1Y3QgUkFSX2J1ZmZlciBidWZmZXI7Ci0Jc3RydWN0IFJBUl9ibG9ja19pbmZvICogY29uc3QgcmVxdWVzdCA9ICZidWZmZXIuaW5mbzsKLQlzdHJ1Y3QgUkFSX3N0YXQgcmFyX2luZm87Ci0JdTMyIHJhcl9oYW5kbGU7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUkFSX0hBTkRMRVJfUkVTRVJWRToKLQkJaWYgKGNvcHlfZnJvbV91c2VyKHJlcXVlc3QsCi0JCQkJICAgYXJncCwKLQkJCQkgICBzaXplb2YoKnJlcXVlc3QpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXJlc3VsdCA9IG1lbXJhcl9yZXNlcnZlX2Jsb2NrKCZidWZmZXIsIGZpbHApOwotCQlpZiAocmVzdWx0ICE9IDApCi0JCQlyZXR1cm4gcmVzdWx0OwotCi0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSk7Ci0KLQljYXNlIFJBUl9IQU5ETEVSX1JFTEVBU0U6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmcmFyX2hhbmRsZSwKLQkJCQkgICBhcmdwLAotCQkJCSAgIHNpemVvZihyYXJfaGFuZGxlKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlyZXR1cm4gbWVtcmFyX3JlbGVhc2VfYmxvY2socmFyX2hhbmRsZSk7Ci0KLQljYXNlIFJBUl9IQU5ETEVSX1NUQVQ6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmcmFyX2luZm8sCi0JCQkJICAgYXJncCwKLQkJCQkgICBzaXplb2YocmFyX2luZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCS8qCi0JCSAqIFBvcHVsYXRlIHRoZSBSQVJfc3RhdCBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIFJBUgotCQkgKiB0eXBlIGdpdmVuIGJ5IHRoZSB1c2VyCi0JCSAqLwotCQlpZiAobWVtcmFyX2dldF9zdGF0KCZyYXJfaW5mbykgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qCi0JCSAqIEB0b2RvIERvIHdlIG5lZWQgdG8gdmVyaWZ5IGRlc3RpbmF0aW9uIHBvaW50ZXIKLQkJICogICAgICAgImFyZ3AiIGlzIG5vbi16ZXJvPyAgSXMgdGhhdCBhbHJlYWR5IGRvbmUgYnkKLQkJICogICAgICAgY29weV90b191c2VyKCk/Ci0JCSAqLwotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsCi0JCQkJICAgICZyYXJfaW5mbywKLQkJCQkgICAgc2l6ZW9mKHJhcl9pbmZvKSkgPyAtRUZBVUxUIDogMDsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFRZOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCW1lbXJhcl9tbWFwCQktCW1tYXAgaGVscGVyIGZvciBkZXViZ2dpbmcKLSAqCUBmaWxwOiBoYW5kbGUgZG9pbmcgdGhlIG1hcHBpbmcKLSAqCUB2bWE6IG1lbW9yeSBhcmVhCi0gKgotICoJU3VwcG9ydCB0aGUgbW1hcCBvcGVyYXRpb24gb24gdGhlIFJBUiBzcGFjZSBmb3IgZGVidWdnaW5nIHN5c3RlbXMKLSAqCXdoZW4gdGhlIG1lbW9yeSBpcyBub3QgbG9ja2VkIGRvd24uCi0gKi8KLQotc3RhdGljIGludCBtZW1yYXJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JLyoKLQkgKiBUaGlzIG1tYXAoKSBpbXBsZW1lbnRhdGlvbiBpcyBwcmVkb21pbmFudGx5IHVzZWZ1bCBmb3IKLQkgKiBkZWJ1Z2dpbmcgc2luY2UgdGhlIENQVSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGFjY2Vzc2luZwotCSAqIFJBUiBtZW1vcnkgYnkgdGhlIGhhcmR3YXJlIHdoZW4gUkFSIGlzIHByb3Blcmx5IGxvY2tlZAotCSAqIGRvd24uCi0JICoKLQkgKiBJbiBvcmRlciBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VmdWwgUkFSIG1lbW9yeQotCSAqIG11c3QgYmUgbm90IGJlIGxvY2tlZCBkb3duLiAgSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGRvCi0JICogdGhhdCB3aGVuIGRlYnVnZ2luZy4gIERPIE5PVCBsZWF2ZSBSQVIgbWVtb3J5IHVubG9ja2VkIGluIGEKLQkgKiBkZXBsb3llZCBkZXZpY2UgdGhhdCB1dGlsaXplcyBSQVIuCi0JICovCi0KLQlzaXplX3QgY29uc3Qgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQotCS8qIFVzZXJzIHBhc3MgdGhlIFJBUiBoYW5kbGUgYXMgdGhlIG1tYXAoKSBvZmZzZXQgcGFyYW1ldGVyLiAqLwotCXVuc2lnbmVkIGxvbmcgY29uc3QgaGFuZGxlID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwotCi0Jc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9IG1lbXJhcl9nZXRfcmFyX2luZm8oaGFuZGxlKTsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQotCS8qIE9ubHkgYWxsb3cgcHJpdmlsZWRnZWQgYXBwcyB0byBnbyBwb2tpbmcgYXJvdW5kIHRoaXMgd2F5ICovCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogSW52YWxpZCBSQVIgaGFuZGxlIG9yIHNpemUgcGFzc2VkIHRvIG1tYXAoKS4gKi8KLQlpZiAocmFyID09IE5VTEwKLQkgICAgfHwgaGFuZGxlID09IDAKLQkgICAgfHwgc2l6ZSA+IChoYW5kbGUgLSAodW5zaWduZWQgbG9uZykgcmFyLT5pb2Jhc2UpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogUmV0cmlldmUgcGh5c2ljYWwgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBSQVIgaGFuZGxlLAotCSAqIGFuZCBjb252ZXJ0IGl0IHRvIGEgcGFnZSBmcmFtZS4KLQkgKi8KLQlwZm4gPSBtZW1yYXJfZ2V0X3BoeXNpY2FsX2FkZHJlc3MocmFyLCBoYW5kbGUpID4+IFBBR0VfU0hJRlQ7Ci0KLQotCXByX2RlYnVnKCJtZW1yYXI6IG1hcHBpbmcgUkFSIHJhbmdlIFsweCVseCwgMHglbHgpIGludG8gdXNlciBzcGFjZS5cbiIsCi0JCSBoYW5kbGUsCi0JCSBoYW5kbGUgKyBzaXplKTsKLQotCS8qCi0JICogTWFwIFJBUiBtZW1vcnkgaW50byB1c2VyIHNwYWNlLiAgVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwKLQkgKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHNpbmNlIHRoZSBtZW1vcnkgd29uJ3QgYmUKLQkgKiBhY2Nlc3NpYmxlLCBpLmUuIHJlYWRzIHJldHVybiB6ZXJvIGFuZCB3cml0ZXMgYXJlIGlnbm9yZWQsCi0JICogd2hlbiBSQVIgYWNjZXNzIGNvbnRyb2wgaXMgZW5hYmxlZC4KLQkgKi8KLQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwKLQkJCSAgICB2bWEtPnZtX3N0YXJ0LAotCQkJICAgIHBmbiwKLQkJCSAgICBzaXplLAotCQkJICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkvKiB2bWEtPnZtX29wcyA9ICZtZW1yYXJfbWVtX29wczsgKi8KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCW1lbXJhcl9vcGVuCQktCWRldmljZSBvcGVuIG1ldGhvZAotICoJQGlub2RlOiBpbm9kZSB0byBvcGVuCi0gKglAZmlscDogZmlsZSBoYW5kbGUKLSAqCi0gKglBcyB3ZSBzdXBwb3J0IG11bHRpcGxlIGFyYml0YXJ5IG9wZW5zIHRoZXJlIGlzIG5vIHdvcmsgdG8gYmUgZG9uZQotICoJcmVhbGx5LgotICovCi0KLXN0YXRpYyBpbnQgbWVtcmFyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJbWVtcmFyX3JlbGVhc2UJCS0JY2xvc2UgbWV0aG9kIGZvciBtaXNjZXYKLSAqCUBpbm9kZTogaW5vZGUgb2YgZGV2aWNlCi0gKglAZmlscDogaGFuZGxlIHRoYXQgaXMgZ29pbmcgYXdheQotICoKLSAqCUZyZWUgdXAgYWxsIHRoZSByZWdpb25zIHRoYXQgYmVsb25nIHRvIHRoaXMgZmlsZSBoYW5kbGUuIFdlIHVzZQotICoJdGhlIGhhbmRsZSBhcyBhIG5hdHVyYWwgTGludXggc3R5bGUgJ2xpZmV0aW1lJyBpbmRpY2F0b3IgYW5kIHRvCi0gKgllbnN1cmUgcmVzb3VyY2VzIGFyZSBub3QgbGVha2VkIHdoZW4gdGhlaXIgb3duZXIgZXhwbG9kZXMgaW4gYW4KLSAqCXVucGxhbm5lZCBmYXNoaW9uLgotICovCi0KLXN0YXRpYyBpbnQgbWVtcmFyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JLyogRnJlZSBhbGwgcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGZpbGUgaGFuZGxlLiAqLwotCi0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAqcG9zOwotCXN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8gKnRtcDsKLQlpbnQgejsKLQotCWZvciAoeiA9IDA7IHogIT0gTVJTVF9OVU1fUkFSOyArK3opIHsKLQkJc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9ICZtZW1yYXJzW3pdOwotCi0JCW11dGV4X2xvY2soJnJhci0+bG9jayk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywKLQkJCQkJIHRtcCwKLQkJCQkJICZyYXItPmJ1ZmZlcnMubGlzdCwKLQkJCQkJIGxpc3QpIHsKLQkJCWlmIChmaWxwID09IHBvcy0+b3duZXIpCi0JCQkJa3JlZl9wdXQoJnBvcy0+cmVmY291bnQsCi0JCQkJCSBtZW1yYXJfcmVsZWFzZV9ibG9ja19pKTsKLQkJfQotCi0JCW11dGV4X3VubG9jaygmcmFyLT5sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKglyYXJfcmVzZXJ2ZQkJLQlyZXNlcnZlIFJBUiBtZW1vcnkKLSAqCUBidWZmZXJzOiBidWZmZXJzIHRvIHJlc2VydmUKLSAqCUBjb3VudDogbnVtYmVyIHdhbnRlZAotICoKLSAqCVJlc2VydmUgYSBzZXJpZXMgb2YgYnVmZmVycyBpbiB0aGUgUkFSIHNwYWNlLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YKLSAqCWJ1ZmZlcnMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZAotICovCi0KLXNpemVfdCByYXJfcmVzZXJ2ZShzdHJ1Y3QgUkFSX2J1ZmZlciAqYnVmZmVycywgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBSQVJfYnVmZmVyICogY29uc3QgZW5kID0KLQkJKGJ1ZmZlcnMgPT0gTlVMTCA/IGJ1ZmZlcnMgOiBidWZmZXJzICsgY291bnQpOwotCXN0cnVjdCBSQVJfYnVmZmVyICppOwotCi0Jc2l6ZV90IHJlc2VydmVfY291bnQgPSAwOwotCi0JZm9yIChpID0gYnVmZmVyczsgaSAhPSBlbmQ7ICsraSkgewotCQlpZiAobWVtcmFyX3Jlc2VydmVfYmxvY2soaSwgTlVMTCkgPT0gMCkKLQkJCSsrcmVzZXJ2ZV9jb3VudDsKLQkJZWxzZQotCQkJaS0+YnVzX2FkZHJlc3MgPSAwOwotCX0KLQotCXJldHVybiByZXNlcnZlX2NvdW50OwotfQotRVhQT1JUX1NZTUJPTChyYXJfcmVzZXJ2ZSk7Ci0KLS8qKgotICoJcmFyX3JlbGVhc2UJCS0JcmV0dXJuIFJBUiBidWZmZXJzCi0gKglAYnVmZmVyczogYnVmZmVycyB0byByZWxlYXNlCi0gKglAc2l6ZTogc2l6ZSBvZiByZWxlYXNlZCBibG9jawotICoKLSAqCVJldHVybiBhIHNldCBvZiBidWZmZXJzIHRvIHRoZSBSQVIgcG9vbAotICovCi0KLXNpemVfdCByYXJfcmVsZWFzZShzdHJ1Y3QgUkFSX2J1ZmZlciAqYnVmZmVycywgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBSQVJfYnVmZmVyICogY29uc3QgZW5kID0KLQkJKGJ1ZmZlcnMgPT0gTlVMTCA/IGJ1ZmZlcnMgOiBidWZmZXJzICsgY291bnQpOwotCXN0cnVjdCBSQVJfYnVmZmVyICppOwotCi0Jc2l6ZV90IHJlbGVhc2VfY291bnQgPSAwOwotCi0JZm9yIChpID0gYnVmZmVyczsgaSAhPSBlbmQ7ICsraSkgewotCQl1MzIgKiBjb25zdCBoYW5kbGUgPSAmaS0+aW5mby5oYW5kbGU7Ci0JCWlmIChtZW1yYXJfcmVsZWFzZV9ibG9jaygqaGFuZGxlKSA9PSAwKSB7Ci0JCQkvKgotCQkJICogQHRvZG8gV2UgYXNzdW1lIHdlIHNob3VsZCBkbyB0aGlzIGVhY2ggdGltZQotCQkJICogICAgICAgdGhlIHJlZiBjb3VudCBpcyBkZWNyZW1lbnRlZC4gIFNob3VsZAotCQkJICogICAgICAgd2UgaW5zdGVhZCBvbmx5IGRvIHRoaXMgd2hlbiB0aGUgcmVmCi0JCQkgKiAgICAgICBjb3VudCBoYXMgZHJvcHBlZCB0byB6ZXJvLCBhbmQgdGhlCi0JCQkgKiAgICAgICBidWZmZXIgaGFzIGJlZW4gY29tcGxldGVseQotCQkJICogICAgICAgcmVsZWFzZWQvdW5tYXBwZWQ/Ci0JCQkgKi8KLQkJCSpoYW5kbGUgPSAwOwotCQkJKytyZWxlYXNlX2NvdW50OwotCQl9Ci0JfQotCi0JcmV0dXJuIHJlbGVhc2VfY291bnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHJhcl9yZWxlYXNlKTsKLQotLyoqCi0gKglyYXJfaGFuZGxlX3RvX2J1cwktCVJBUiB0byBidXMgYWRkcmVzcwotICoJQGJ1ZmZlcnM6IFJBUiBidWZmZXIgc3RydWN0dXJlCi0gKglAY291bnQ6IG51bWJlciBvZiBidWZmZXJzIHRvIGNvbnZlcnQKLSAqCi0gKglUdXJuIGEgbGlzdCBvZiBSQVIgaGFuZGxlIG1hcHBpbmdzIGludG8gYWN0dWFsIGJ1cyBhZGRyZXNzZXMuIE5vdGUKLSAqCXRoYXQgd2hlbiB0aGUgZGV2aWNlIGlzIGxvY2tlZCBkb3duIHRoZSBidXMgYWRkcmVzc2VzIGluIHF1ZXN0aW9uCi0gKglhcmUgbm90IENQVSBhY2Nlc3NpYmxlLgotICovCi0KLXNpemVfdCByYXJfaGFuZGxlX3RvX2J1cyhzdHJ1Y3QgUkFSX2J1ZmZlciAqYnVmZmVycywgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBSQVJfYnVmZmVyICogY29uc3QgZW5kID0KLQkJKGJ1ZmZlcnMgPT0gTlVMTCA/IGJ1ZmZlcnMgOiBidWZmZXJzICsgY291bnQpOwotCXN0cnVjdCBSQVJfYnVmZmVyICppOwotCXN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8gKnBvczsKLQotCXNpemVfdCBjb252ZXJzaW9uX2NvdW50ID0gMDsKLQotCS8qCi0JICogRmluZCBhbGwgYnVzIGFkZHJlc3NlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBoYW5kbGVzLgotCSAqCi0JICogQHRvZG8gTm90IGxpa2luZyB0aGlzIG5lc3RlZCBsb29wLiAgT3B0aW1pemUuCi0JICovCi0JZm9yIChpID0gYnVmZmVyczsgaSAhPSBlbmQ7ICsraSkgewotCQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICogY29uc3QgcmFyID0KLQkJCW1lbXJhcl9nZXRfcmFyX2luZm8oaS0+aW5mby5oYW5kbGUpOwotCi0JCS8qCi0JCSAqIENoZWNrIGlmIHdlIGhhdmUgYSBib2d1cyBoYW5kbGUsIGFuZCB0aGVuIGNvbnRpbnVlCi0JCSAqIHdpdGggcmVtYWluaW5nIGJ1ZmZlcnMuCi0JCSAqLwotCQlpZiAocmFyID09IE5VTEwpIHsKLQkJCWktPmJ1c19hZGRyZXNzID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmcmFyLT5sb2NrKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnJhci0+YnVmZmVycy5saXN0LCBsaXN0KSB7Ci0JCQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gKiBjb25zdCB1c2VyX2luZm8gPQotCQkJCSZwb3MtPmJ1ZmZlci5pbmZvOwotCi0JCQkvKgotCQkJICogVGFrZSBpbnRvIGFjY291bnQgaGFuZGxlIG9mZnNldHMgdGhhdCBtYXkKLQkJCSAqIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgYmFzZSBoYW5kbGUsIHN1Y2ggYXMKLQkJCSAqIGluIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86Ci0JCQkgKgotCQkJICogICAgIHUzMiBoYW5kbGUgPSBiYXNlICsgb2Zmc2V0OwotCQkJICogICAgIHJhcl9oYW5kbGVfdG9fYnVzKGhhbmRsZSk7Ci0JCQkgKi8KLQotCQkJaWYgKGktPmluZm8uaGFuZGxlID49IHVzZXJfaW5mby0+aGFuZGxlCi0JCQkgICAgJiYgaS0+aW5mby5oYW5kbGUgPCAodXNlcl9pbmZvLT5oYW5kbGUKLQkJCQkJCSArIHVzZXJfaW5mby0+c2l6ZSkpIHsKLQkJCQl1MzIgY29uc3Qgb2Zmc2V0ID0KLQkJCQkJaS0+aW5mby5oYW5kbGUgLSB1c2VyX2luZm8tPmhhbmRsZTsKLQotCQkJCWktPmluZm8udHlwZSA9IHVzZXJfaW5mby0+dHlwZTsKLQkJCQlpLT5pbmZvLnNpemUgPSB1c2VyX2luZm8tPnNpemUgLSBvZmZzZXQ7Ci0JCQkJaS0+YnVzX2FkZHJlc3MgPQotCQkJCQlwb3MtPmJ1ZmZlci5idXNfYWRkcmVzcwotCQkJCQkrIG9mZnNldDsKLQotCQkJCS8qIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LiAqLwotCQkJCWtyZWZfZ2V0KCZwb3MtPnJlZmNvdW50KTsKLQotCQkJCSsrY29udmVyc2lvbl9jb3VudDsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJaS0+YnVzX2FkZHJlc3MgPSAwOwotCQkJfQotCQl9Ci0KLQkJbXV0ZXhfdW5sb2NrKCZyYXItPmxvY2spOwotCX0KLQotCXJldHVybiBjb252ZXJzaW9uX2NvdW50OwotfQotRVhQT1JUX1NZTUJPTChyYXJfaGFuZGxlX3RvX2J1cyk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lbXJhcl9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS51bmxvY2tlZF9pb2N0bCA9IG1lbXJhcl9pb2N0bCwKLQkubW1hcCAgICAgICAgICAgPSBtZW1yYXJfbW1hcCwKLQkub3BlbiAgICAgICAgICAgPSBtZW1yYXJfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBtZW1yYXJfcmVsZWFzZSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtZW1yYXJfbWlzY2RldiA9IHsKLQkubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsICAgIC8qIGR5bmFtaWMgYWxsb2NhdGlvbiAqLwotCS5uYW1lID0gIm1lbXJhciIsICAgICAgICAgICAgICAgLyogL2Rldi9tZW1yYXIgKi8KLQkuZm9wcyA9ICZtZW1yYXJfZm9wcwotfTsKLQotc3RhdGljIGNoYXIgY29uc3QgYmFubmVyW10gX19pbml0ZGF0YSA9Ci0JS0VSTl9JTkZPCi0JIkludGVsIFJBUiBIYW5kbGVyOiAiIE1FTVJBUl9WRVIgIiBpbml0aWFsaXplZC5cbiI7Ci0KLS8qKgotICoJbWVtcmFyX3JlZ2lzdHJhdGlvbl9jYWxsYmFjawktCVJBUiBvYnRhaW5lZAotICoJQHJhcjogUkFSIG51bWJlcgotICoKLSAqCVdlIGhhdmUgYmVlbiBncmFudGVkIG93bmVyc2hpcCBvZiB0aGUgUkFSLiBBZGQgaXQgdG8gb3VyIG1lbW9yeQotICoJbWFuYWdlbWVudCB0YWJsZXMKLSAqLwotCi1zdGF0aWMgaW50IG1lbXJhcl9yZWdpc3RyYXRpb25fY2FsbGJhY2sodW5zaWduZWQgbG9uZyByYXIpCi17Ci0JLyoKLQkgKiBXZSBpbml0aWFsaXplIHRoZSBSQVIgcGFyYW1ldGVycyBlYXJseSBvbiBzbyB0aGF0IHdlIGNhbgotCSAqIGRpc2NvbnRpbnVlIG1lbXJhciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgotCSAqIGlmIHN1aXRhYmx5IGNvbmZpZ3VyZWQgUkFScyBhcmUgbm90IGF2YWlsYWJsZS4KLQkgKi8KLQlyZXR1cm4gbWVtcmFyX2luaXRfcmFyX3Jlc291cmNlcyhyYXIsIG1lbXJhcl9taXNjZGV2Lm5hbWUpOwotfQotCi0vKioKLSAqCW1lbXJhcl9pbml0CS0JaW5pdGlhbGlzZSBSQVIgc3VwcG9ydAotICoKLSAqCUluaXRpYWxpc2Ugc3VwcG9ydCBmb3IgUkFSIGhhbmRsZXJzLiBUaGlzIG1heSBnZXQgbG9hZGVkIGJlZm9yZQotICoJdGhlIFJBUiBzdXBwb3J0IGlzIGFjdGl2YXRlZCwgYnV0IHRoZSBjYWxsYmFja3Mgb24gdGhlIHJlZ2lzdHJhdGlvbgotICoJd2lsbCBoYW5kbGUgdGhhdCBzaXR1YXRpb24gZm9yIHVzIGFueXdheS4KLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBtZW1yYXJfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0JaW50IGk7Ci0KLQlwcmludGsoYmFubmVyKTsKLQotCS8qCi0JICogU29tZSBkZWxheWVkIGluaXRpYWxpemF0aW9uIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGRyaXZlci4KLQkgKiBNYWtlIHN1cmUgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIGRyaXZlciBjbGVhbi11cAotCSAqIChlLmcuIGR1cmluZyBkcml2ZXIncyByZWxlYXNlKCkgZnVuY3Rpb24pIGFyZSBmdWxseQotCSAqIGluaXRpYWxpemVkIGJlZm9yZSBmaXJzdCB1c2UuICBUaGlzIGlzIHBhcnRpY3VsYXJseQotCSAqIGltcG9ydGFudCBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgZGVsYXllZCBpbml0aWFsaXphdGlvbgotCSAqIGlzbid0IGNvbXBsZXRlZCwgbGVhdmluZyBiZWhpbmQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQKLQkgKiBkcml2ZXIuCi0JICoKLQkgKiBTdWNoIGEgc2NlbmFyaW8gY2FuIG9jY3VyIHdoZW4gUkFSIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlCi0JICogcGxhdGZvcm0sIGFuZCB0aGUgZHJpdmVyIGlzIHJlbGVhc2UoKWQuCi0JICovCi0JZm9yIChpID0gMDsgaSAhPSBBUlJBWV9TSVpFKG1lbXJhcnMpOyArK2kpIHsKLQkJc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9ICZtZW1yYXJzW2ldOwotCQltdXRleF9pbml0KCZyYXItPmxvY2spOwotCQlJTklUX0xJU1RfSEVBRCgmcmFyLT5idWZmZXJzLmxpc3QpOwotCX0KLQotCWVyciA9IG1pc2NfcmVnaXN0ZXIoJm1lbXJhcl9taXNjZGV2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyogTm93IGNsYWltIHRoZSB0d28gUkFScyB3ZSB3YW50ICovCi0JZXJyID0gcmVnaXN0ZXJfcmFyKDAsIG1lbXJhcl9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKLQotCWVyciA9IHJlZ2lzdGVyX3JhcigxLCBtZW1yYXJfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCAxKTsKLQlpZiAoZXJyID09IDApCi0JCXJldHVybiAwOwotCi0JLyogSXQgaXMgcG9zc2libGUgcmFyIDAgcmVnaXN0ZXJlZCBhbmQgYWxsb2NhdGVkIHJlc291cmNlcyB0aGVuIHJhciAxCi0JICAgZmFpbGVkIHNvIGRvIGEgZnVsbCByZXNvdXJjZSBmcmVlICovCi0JbWVtcmFyX2ZpbmlfcmFyX3Jlc291cmNlcygpOwotZmFpbDoKLQltaXNjX2RlcmVnaXN0ZXIoJm1lbXJhcl9taXNjZGV2KTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKioKLSAqCW1lbXJhcl9leGl0CS0JdW5yZWdpc3RlciBhbmQgdW5sb2FkCi0gKgotICoJVW5yZWdpc3RlciB0aGUgZGV2aWNlIGFuZCB0aGVuIHVubG9hZCBhbnkgbWFwcGluZ3MgYW5kIHJlbGVhc2UKLSAqCXRoZSBSQVIgcmVzb3VyY2VzCi0gKi8KLQotc3RhdGljIHZvaWQgX19leGl0IG1lbXJhcl9leGl0KHZvaWQpCi17Ci0JbWlzY19kZXJlZ2lzdGVyKCZtZW1yYXJfbWlzY2Rldik7Ci0JbWVtcmFyX2ZpbmlfcmFyX3Jlc291cmNlcygpOwotfQotCi0KLW1vZHVsZV9pbml0KG1lbXJhcl9pbml0KTsKLW1vZHVsZV9leGl0KG1lbXJhcl9leGl0KTsKLQotCi1NT0RVTEVfQVVUSE9SKCJPc3NhbWEgT3RobWFuIDxvc3NhbWEub3RobWFuQGludGVsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgUmVzdHJpY3RlZCBBY2Nlc3MgUmVnaW9uIEhhbmRsZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKE1FTVJBUl9WRVIpOwotCi0KLQotLyoKLSAgTG9jYWwgVmFyaWFibGVzOgotICAgIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICBFbmQ6Ci0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9tZHA0X292ZXJsYXkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9vdmVybGF5LmMKaW5kZXggZGUyODRjMi4uYjlhY2Y1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tZHA0X292ZXJsYXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfb3ZlcmxheS5jCkBAIC02OTYsNyArNjk2LDcgQEAKIAlzdGFnZSA9IHBpcGUtPm1peGVyX3N0YWdlOwogCW1peGVyID0gcGlwZS0+bWl4ZXJfbnVtOwogCi0JaWYgKHBpcGUgIT0gY3RybC0+c3RhZ2VbbWl4ZXJdW3N0YWdlXSkJLyogbm90IHJ1bmluZyAqLworCWlmIChwaXBlICE9IGN0cmwtPnN0YWdlW21peGVyXVtzdGFnZV0pCS8qIG5vdCBydW5uaW5nICovCiAJCXJldHVybjsKIAogCS8qIE1EUF9MQVlFUk1JWEVSX0lOX0NGRywgc2hhcmQgYnkgYm90aCBtaXhlciAwIGFuZCAxICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9tZHBfcHBwX2RxLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcF9wcHBfZHEuYwppbmRleCAzZGMxYzBjLi4zYTY4N2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcF9wcHBfZHEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcF9wcHBfZHEuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJCW1zbV9mYl9lbnN1cmVfbWVtX2NvaGVyZW5jeV9hZnRlcl9kbWEoam9iLT5pbmZvLCAmam9iLT5yZXEsIDEpOwogCiAJCS8qIFNjaGVkdWxlIGpvYnMgZm9yIGNsZWFudXAKLQkJICogQSBzZXBlcmF0ZSB3b3JrZXIgdGhyZWFkIGRvZXMgdGhpcyAqLworCQkgKiBBIHNlcGFyYXRlIHdvcmtlciB0aHJlYWQgZG9lcyB0aGlzICovCiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhtZHBfcHBwX2Rqb2JfY2xuciwgJmpvYi0+Y2xlYW5lciwKIAkJCW1kcF90aW1lcl9kdXJhdGlvbik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiLmMKaW5kZXggYTJmMjlkNC4uZTdlZjgzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYi5jCkBAIC04NTksNyArODU5LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlNU01fRkJfRVJSKCJtc21fZmJfaW5pdDogZmIgJWQgdW5rb3duIGltYWdlIHR5cGUhXG4iLAorCQlNU01fRkJfRVJSKCJtc21fZmJfaW5pdDogZmIgJWQgdW5rbm93biBpbWFnZSB0eXBlIVxuIiwKIAkJCSAgIG1mZC0+aW5kZXgpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTE3OTMsOSArMTc5Myw5IEBACiAvKgogICogTk9URTogVGhlIHVzZXJzcGFjZSBpc3N1ZXMgYmxpdCBvcGVyYXRpb25zIGluIGEgc2VxdWVuY2UsIHRoZSBzZXF1ZW5jZQogICogc3RhcnQgd2l0aCBhIG9wZXJhdGlvbiBtYXJrZWQgU1RBUlQgYW5kIGVuZHMgaW4gYW4gb3BlcmF0aW9uIG1hcmtlZAotICogRU5ELiBJdCBpcyBndXJhbnRlZWQgYnkgdGhlIHVzZXJzcGFjZSB0aGF0IGFsbCB0aGUgYmxpdCBvcGVyYXRpb25zCisgKiBFTkQuIEl0IGlzIGd1YXJhbnRlZWQgYnkgdGhlIHVzZXJzcGFjZSB0aGF0IGFsbCB0aGUgYmxpdCBvcGVyYXRpb25zCiAgKiBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQgYXJlIG9ubHkgd2l0aGluIHRoZSByZWdpb25zIG9mIGFyZWFzIGRlc2lnbmF0ZWQKLSAqIGJ5IHRoZSBTVEFSVCBhbmQgRU5EIG9wZXJhdGlvbnMgYW5kIHRoYXQgdGhlIHVzZXJzcGFjZSBkb2VzbnQgbW9kaWZ5CisgKiBieSB0aGUgU1RBUlQgYW5kIEVORCBvcGVyYXRpb25zIGFuZCB0aGF0IHRoZSB1c2Vyc3BhY2UgZG9lc24ndCBtb2RpZnkKICAqIHRob3NlIGFyZWFzLiBIZW5jZSBpdCB3b3VsZCBiZSBlbm91Z2ggdG8gcGVyZm9ybSBiYXJyaWVyL2NhY2hlIG9wZXJhdGlvbnMKICAqIG9ubHkgb24gdGhlIFNUQVJUIGFuZCBFTkQgb3BlcmF0aW9ucy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWNtZC1xdWV1ZS5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWNtZC1xdWV1ZS5oCmluZGV4IDU5ZDIyMTQuLjYxNDY1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1jbWQtcXVldWUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtY21kLXF1ZXVlLmgKQEAgLTIxNCw3ICsyMTQsNyBAQAogCS8qCiAJICogV2FybmluZzogVGhpcyBjb2RlIGN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggZGV2aWNlcyB0aGF0CiAJICogaGF2ZSAyNTYgcXVldWVzIG9yIGxlc3MuIERldmljZXMgd2l0aCBtb3JlIHRoYW4gMTYgcXVldWVzCi0JICogYXJlIGxheWVkIG91dCBpbiBtZW1vcnkgdG8gYWxsb3cgY29yZXMgcXVpY2sgYWNjZXNzIHRvCisJICogYXJlIGxhaWQgb3V0IGluIG1lbW9yeSB0byBhbGxvdyBjb3JlcyBxdWljayBhY2Nlc3MgdG8KIAkgKiBldmVyeSAxNnRoIHF1ZXVlLiBUaGlzIHJlZHVjZXMgY2FjaGUgdGhyYXNoaW5nIHdoZW4geW91IGFyZQogCSAqIHJ1bm5pbmcgMTYgcXVldWVzIHBlciBwb3J0IHRvIHN1cHBvcnQgbG9ja2xlc3Mgb3BlcmF0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWZwYS5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWZwYS5oCmluZGV4IDUwYThjOTEuLjFmMDRmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1mcGEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtZnBhLmgKQEAgLTE5NSw3ICsxOTUsNyBAQAogCWN2bXhfZnBhX2lvYmRtYV9kYXRhX3QgZGF0YTsKIAogCS8qCi0JICogSGFyZHdhcmUgb25seSB1c2VzIDY0IGJpdCBhbGxpZ25lZCBsb2NhdGlvbnMsIHNvIGNvbnZlcnQKKwkgKiBIYXJkd2FyZSBvbmx5IHVzZXMgNjQgYml0IGFsaWduZWQgbG9jYXRpb25zLCBzbyBjb252ZXJ0CiAJICogZnJvbSBieXRlIGFkZHJlc3MgdG8gNjQtYml0IGluZGV4CiAJICovCiAJZGF0YS5zLnNjcmFkZHIgPSBzY3JfYWRkciA+PiAzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci1ib2FyZC5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci1ib2FyZC5oCmluZGV4IDYxMWE4ZTAuLmI0NjViZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXItYm9hcmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtaGVscGVyLWJvYXJkLmgKQEAgLTgxLDcgKzgxLDcgQEAKICAqIEBwaHlfYWRkcjogIFRoZSBhZGRyZXNzIG9mIHRoZSBQSFkgdG8gcHJvZ3JhbQogICogQGxpbmtfZmxhZ3M6CiAgKiAgICAgICAgICAgICAgICAgIEZsYWdzIHRvIGNvbnRyb2wgYXV0b25lZ290aWF0aW9uLiAgQml0IDAgaXMgYXV0b25lZ290aWF0aW9uCi0gKiAgICAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIHRvIG1haW50YWluIGJhY2t3YXJlIGNvbXBhdGFiaWxpdHkuCisgKiAgICAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIHRvIG1haW50YWluIGJhY2t3YXJlIGNvbXBhdGliaWxpdHkuCiAgKiBAbGlua19pbmZvOiBMaW5rIHNwZWVkIHRvIHByb2dyYW0uIElmIHRoZSBzcGVlZCBpcyB6ZXJvIGFuZCBhdXRvbmVnb3RpYXRpb24KICAqICAgICAgICAgICAgICAgICAgaXMgZW5hYmxlZCwgYWxsIHBvc3NpYmxlIG5lZ290aWF0aW9uIHNwZWVkcyBhcmUgYWR2ZXJ0aXNlZC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtaGVscGVyLXV0aWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXItdXRpbC5jCmluZGV4IDQxZWY4YTQuLjEzMTE4MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXItdXRpbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXItdXRpbC5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIH0KIAogLyoqCi0gKiBSZXR1cm5zIHRoZSBJUEQvUEtPIHBvcnQgbnVtYmVyIGZvciBhIHBvcnQgb24gdGVoIGdpdmVuCisgKiBSZXR1cm5zIHRoZSBJUEQvUEtPIHBvcnQgbnVtYmVyIGZvciBhIHBvcnQgb24gdGhlIGdpdmVuCiAgKiBpbnRlcmZhY2UuCiAgKgogICogQGludGVyZmFjZTogSW50ZXJmYWNlIHRvIHVzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci5jCmluZGV4IDU5MTUwNjYuLmU5YzVjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtaGVscGVyLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogCiAJCWlmICghcmV0cnlfY250KQogCQkJY3ZteF9kcHJpbnRmKCJXQVJOSU5HOiBGSVhfSVBEX1BUUl9BTElHTk1FTlQgIgotCQkJCSAgICAgImdldF93b3JrKCkgdGltZW91dCBvY2N1cmVkLlxuIik7CisJCQkJICAgICAiZ2V0X3dvcmsoKSB0aW1lb3V0IG9jY3VycmVkLlxuIik7CiAKIAkJLyogRnJlZSBwYWNrZXQgKi8KIAkJaWYgKHdvcmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtbWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LW1kaW8uaAppbmRleCBmNDVkYzQ5Li5kODhhYjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtbWRpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1tZGlvLmgKQEAgLTI1NCw3ICsyNTQsNyBAQAogI2RlZmluZSBNRElPX0NMQVVTRV80NV9SRUFEX0lOQyAyCiAjZGVmaW5lIE1ESU9fQ0xBVVNFXzQ1X1JFQUQgICAgIDMKIAotLyogTU1EIGlkZW50aWZpZXJzLCBtb3N0bHkgZm9yIGFjY2Vzc2luZyBkZXZpY2VzIHdpdGhpbmcgWEVOUEFLIG1vZHVsZXMuICovCisvKiBNTUQgaWRlbnRpZmllcnMsIG1vc3RseSBmb3IgYWNjZXNzaW5nIGRldmljZXMgd2l0aGluIFhFTlBBSyBtb2R1bGVzLiAqLwogI2RlZmluZSBDVk1YX01NRF9ERVZJQ0VfUE1BX1BNRCAgICAgIDEKICNkZWZpbmUgQ1ZNWF9NTURfREVWSUNFX1dJUyAgICAgICAgICAyCiAjZGVmaW5lIENWTVhfTU1EX0RFVklDRV9QQ1MgICAgICAgICAgMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LXBrby5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LXBrby5oCmluZGV4IGYwNjhjMTkuLmRlMzQxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1wa28uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtcGtvLmgKQEAgLTk4LDcgKzk4LDcgQEAKIAkvKgogCSAqIFBLTyBkb2Vzbid0IGRvIGFueSBsb2NraW5nLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlCiAJICogYXBwbGljYXRpb24gdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgY29yZSBpcyBhY2Nlc3NpbmcKLQkgKiB0aGUgc2FtZSBxdWV1ZSBhdCB0aGUgc21hZSB0aW1lCisJICogdGhlIHNhbWUgcXVldWUgYXQgdGhlIHNhbWUgdGltZQogCSAqLwogCUNWTVhfUEtPX0xPQ0tfTk9ORSA9IDAsCiAJLyoKQEAgLTMyNCw3ICszMjQsNyBAQAogICogLSBDVk1YX1BLT19MT0NLX05PTkUKICAqICAgICAgLSBQS08gZG9lc24ndCBkbyBhbnkgbG9ja2luZy4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5CiAgKiAgICAgICAgICBvZiB0aGUgYXBwbGljYXRpb24gdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgY29yZQotICogICAgICAgICAgaXMgYWNjZXNzaW5nIHRoZSBzYW1lIHF1ZXVlIGF0IHRoZSBzbWFlIHRpbWUuCisgKiAgICAgICAgICBpcyBhY2Nlc3NpbmcgdGhlIHNhbWUgcXVldWUgYXQgdGhlIHNhbWUgdGltZS4KICAqIC0gQ1ZNWF9QS09fTE9DS19BVE9NSUNfVEFHCiAgKiAgICAgIC0gUEtPIHBlcmZvcm1zIGFuIGF0b21pYyB0YWdzd2l0Y2ggdG8gaW5zdXJlIGV4Y2x1c2l2ZQogICogICAgICAgICAgYWNjZXNzIHRvIHRoZSBvdXRwdXQgcXVldWUuIFRoaXMgd2lsbCBtYWludGFpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LXBvdy5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LXBvdy5oCmluZGV4IGJmOWUwNjkuLjk5OWFlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1wb3cuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtcG93LmgKQEAgLTE0OTIsOCArMTQ5Miw4IEBACiAvKioKICAqIFN3aXRjaCB0byBhIE5VTEwgdGFnLCB3aGljaCBlbmRzIGFueSBvcmRlcmluZyBvcgogICogc3luY2hyb25pemF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBQT1cgZm9yIHRoZSBjdXJyZW50Ci0gKiB3b3JrIHF1ZXVlIGVudHJ5LiAgVGhpcyBvcGVyYXRpb24gY29tcGxldGVzIGltbWVkaWF0bHksCi0gKiBzbyBjb21wbGV0ZXRpb24gc2hvdWxkIG5vdCBiZSB3YWl0ZWQgZm9yLgorICogd29yayBxdWV1ZSBlbnRyeS4gIFRoaXMgb3BlcmF0aW9uIGNvbXBsZXRlcyBpbW1lZGlhdGVseSwKKyAqIHNvIGNvbXBsZXRpb24gc2hvdWxkIG5vdCBiZSB3YWl0ZWQgZm9yLgogICogVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCB3YWl0IGZvciBwcmV2aW91cyB0YWcgc3dpdGNoZXMgdG8gY29tcGxldGUsCiAgKiBzbyB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgYW55IHByZXZpb3VzIHRhZyBzd2l0Y2hlcyBoYXZlIGNvbXBsZXRlZC4KICAqLwpAQCAtMTUzMiw4ICsxNTMyLDggQEAKIC8qKgogICogU3dpdGNoIHRvIGEgTlVMTCB0YWcsIHdoaWNoIGVuZHMgYW55IG9yZGVyaW5nIG9yCiAgKiBzeW5jaHJvbml6YXRpb24gcHJvdmlkZWQgYnkgdGhlIFBPVyBmb3IgdGhlIGN1cnJlbnQKLSAqIHdvcmsgcXVldWUgZW50cnkuICBUaGlzIG9wZXJhdGlvbiBjb21wbGV0ZXMgaW1tZWRpYXRseSwKLSAqIHNvIGNvbXBsZXRldGlvbiBzaG91bGQgbm90IGJlIHdhaXRlZCBmb3IuCisgKiB3b3JrIHF1ZXVlIGVudHJ5LiAgVGhpcyBvcGVyYXRpb24gY29tcGxldGVzIGltbWVkaWF0ZWx5LAorICogc28gY29tcGxldGlvbiBzaG91bGQgbm90IGJlIHdhaXRlZCBmb3IuCiAgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciBhbnkgcGVuZGluZyB0YWcgc3dpdGNoZXMgdG8gY29tcGxldGUKICAqIGJlZm9yZSByZXF1ZXN0aW5nIHRoZSBzd2l0Y2ggdG8gTlVMTC4KICAqLwpAQCAtMTY3Miw3ICsxNjcyLDcgQEAKIAogLyoqCiAgKiBQZXJmb3JtcyBhIHRhZyBzd2l0Y2ggYW5kIHRoZW4gYW4gaW1tZWRpYXRlIGRlc2NoZWR1bGUuIFRoaXMgY29tcGxldGVzCi0gKiBpbW1lZGlhdGx5LCBzbyBjb21wbGV0aW9uIG11c3Qgbm90IGJlIHdhaXRlZCBmb3IuICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UCisgKiBpbW1lZGlhdGVseSwgc28gY29tcGxldGlvbiBtdXN0IG5vdCBiZSB3YWl0ZWQgZm9yLiAgVGhpcyBmdW5jdGlvbiBkb2VzIE5PVAogICogdXBkYXRlIHRoZSB3cWUgaW4gRFJBTSB0byBtYXRjaCBhcmd1bWVudHMuCiAgKgogICogVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCB3YWl0IGZvciBhbnkgcHJpb3IgdGFnIHN3aXRjaGVzIHRvIGNvbXBsZXRlLCBzbyB0aGUKQEAgLTE3NTgsNyArMTc1OCw3IEBACiAKIC8qKgogICogUGVyZm9ybXMgYSB0YWcgc3dpdGNoIGFuZCB0aGVuIGFuIGltbWVkaWF0ZSBkZXNjaGVkdWxlLiBUaGlzIGNvbXBsZXRlcwotICogaW1tZWRpYXRseSwgc28gY29tcGxldGlvbiBtdXN0IG5vdCBiZSB3YWl0ZWQgZm9yLiAgVGhpcyBmdW5jdGlvbiBkb2VzIE5PVAorICogaW1tZWRpYXRlbHksIHNvIGNvbXBsZXRpb24gbXVzdCBub3QgYmUgd2FpdGVkIGZvci4gIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QKICAqIHVwZGF0ZSB0aGUgd3FlIGluIERSQU0gdG8gbWF0Y2ggYXJndW1lbnRzLgogICoKICAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgZm9yIGFueSBwcmlvciB0YWcgc3dpdGNoZXMgdG8gY29tcGxldGUsIHNvIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC11dGlsLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaAppbmRleCAyMzQ2NzU2Li5jNzQ1YTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaApAQCAtNTUsNyArNTUsNyBAQAogCQlyZXR1cm4gMjsKIAllbHNlIGlmIChpcGRfcG9ydCA8IDQwKQkvKiBJbnRlcmZhY2UgMyBmb3IgbG9vcGJhY2sgKi8KIAkJcmV0dXJuIDM7Ci0JZWxzZSBpZiAoaXBkX3BvcnQgPT0gNDApCS8qIE5vbiBleGlzdGFudCBpbnRlcmZhY2UgZm9yIFBPVzAgKi8KKwllbHNlIGlmIChpcGRfcG9ydCA9PSA0MCkJLyogTm9uIGV4aXN0ZW50IGludGVyZmFjZSBmb3IgUE9XMCAqLwogCQlyZXR1cm4gNDsKIAllbHNlCiAJCXBhbmljKCJJbGxlZ2FsIGlwZF9wb3J0ICVkIHBhc3NlZCB0byBJTlRFUkZBQ0VcbiIsIGlwZF9wb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZwppbmRleCBmMTA4MmY1Li5iMDUzMDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnCkBAIC05LDcgKzksNyBAQAogCiBjb25maWcgRkJfT0xQQ19EQ09OXzEKIAlib29sICJPTFBDIFhPLTEgRENPTiBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkJfT0xQQ19EQ09OCisJZGVwZW5kcyBvbiBGQl9PTFBDX0RDT04gJiYgR1BJT19DUzU1MzUKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIERDT04gaW4gWE8tMSBtb2RlbCBsYXB0b3BzLiAgVGhlIGtlcm5lbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jCmluZGV4IGIxNTRiZTcuLjIyYzA0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9vbHBjLmg+CiAKICNpbmNsdWRlICJvbHBjX2Rjb24uaCIKQEAgLTgwLDcgKzgxLDcgQEAKIAlsb2IgJj0gfigxIDw8IERDT05fSVJRKTsKIAlvdXRiKGxvYiwgMHg0ZDApOwogCi0JLyogUmVnaXN0ZXIgdGhlIGludGVydXB0IGhhbmRsZXIgKi8KKwkvKiBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlpZiAocmVxdWVzdF9pcnEoRENPTl9JUlEsICZkY29uX2ludGVycnVwdCwgMCwgIkRDT04iLCBkY29uKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm9scGMtZGNvbjogZmFpbGVkIHRvIHJlcXVlc3QgRENPTidzIGlycVxuIik7CiAJCWdvdG8gZXJyX3JlcV9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xXzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jCmluZGV4IGUyMTNiNjMuLjdhYTliMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL29scGMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jcnlwdG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jcnlwdG8uYwppbmRleCA2NTQwODY0Li41Y2NhMjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY3J5cHRvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NyeXB0by5jCkBAIC03NDUsNyArNzQ1LDcgQEAKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCBORVRGU19DQVBBQklMSVRJRVMgcmVzcG9uc2UgY29tbWFuZAotCSAqIHNob3VsZCBzZXR1cCBzdXBlcmJsb2NrIGluIGEgd2F5LCB3aGljaCBpcyBhY2NlcHRpYmxlCisJICogc2hvdWxkIHNldHVwIHN1cGVyYmxvY2sgaW4gYSB3YXksIHdoaWNoIGlzIGFjY2VwdGFibGUKIAkgKiBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlciwgc28gaWYgc2VydmVyIHJlZnVzZXMgY29ubmVjdGlvbiwKIAkgKiBpdCB3aWxsIHNlbmQgZXJyb3IgaW4gdHJhbnNhY3Rpb24gcmVzcG9uc2UuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL3F1YXRlY2hfdXNiMi5jIGIvZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9xdWF0ZWNoX3VzYjIuYwppbmRleCBjNDViMDllLi5jYTA5OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL3F1YXRlY2hfdXNiMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogICogdmFsdWUgb2YgdGhlIGxpbmUgc3RhdHVzIGZsYWdzIGZyb20gdGhlIHBvcnQKICAqIEBzaGFkb3dNU1I6IExhc3QgcmVjZWl2ZWQgc3RhdGUgb2YgdGhlIG1vZGVtIHN0YXR1cyByZWdpc3RlciwgaG9sZHMKICAqIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZW0gc3RhdHVzIHJlY2VpdmVkIGZyb20gdGhlIHBvcnQKLSAqIEByY3ZfZmx1c2g6IEZsYWcgaW5kaWNhdGluZyB0aGF0IGEgcmVjZWl2ZSBmbHVzaCBoYXMgb2NjdXJlZCBvbgorICogQHJjdl9mbHVzaDogRmxhZyBpbmRpY2F0aW5nIHRoYXQgYSByZWNlaXZlIGZsdXNoIGhhcyBvY2N1cnJlZCBvbgogICogdGhlIGhhcmR3YXJlLgogICogQHhtaXRfZmx1c2g6IEZsYWcgaW5kaWNhdGluZyB0aGF0IGEgdHJhbnNtaXQgZmx1c2ggaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5CiAgKiB0aGUgaGFyZHdhcmUuCkBAIC0xNTYsNyArMTU2LDcgQEAKICAqIGluY2x1ZGVzIHRoZSBzaXplIChleGNsdWRpbmcgaGVhZGVyKSBvZiBVUkJzIHRoYXQgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBidXQKICAqIGhhdmUgbm90IHlldCBiZWVuIHNlbnQgdG8gdG8gdGhlIGRldmljZSwgYW5kIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHNlbnQgb3V0CiAgKiBvZiB0aGUgcG9ydCBidXQgbm90IHlldCByZXBvcnRlZCBzZW50IGJ5IHRoZSAieG1pdF9lbXB0eSIgbWVzc2FnZXMgKHdoaWNoCi0gKiBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgZWFjaCB0aW1lIHRoZXkgYXJlIHJlY2lldmVkLCBkZXNwaXRlIHRoZQorICogaW5kaWNhdGUgdGhlIG51bWJlciBvZiBieXRlcyBzZW50IGVhY2ggdGltZSB0aGV5IGFyZSByZWNlaXZlZCwgZGVzcGl0ZSB0aGUKICAqIG1pc2xlYWRpbmcgbmFtZSkuCiAgKiAtIFN0YXJ0cyBhdCB6ZXJvIHdoZW4gcG9ydCBpcyBpbml0aWFsaXNlZC4KICAqIC0gaXMgaW5jcmVtZW50ZWQgYnkgdGhlIHNpemUgb2YgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiAobm8gaGVhZGVycykKQEAgLTY0OSw3ICs2NDksNyBAQAogCS8qIGFsdGhvdWdoIHRoZSBVU0Igc2lkZSBpcyBub3cgZW1wdHksIHRoZSBVQVJUIGl0c2VsZiBtYXkKIAkgKiBzdGlsbCBiZSBwdXNoaW5nIGNoYXJhY3RlcnMgb3V0IG92ZXIgdGhlIGxpbmUsIHNvIHdlIGhhdmUgdG8KIAkgKiB3YWl0IHRlc3RpbmcgdGhlIGFjdHVhbCBsaW5lIHN0YXR1cyB1bnRpbCB0aGUgbGluZXMgY2hhbmdlCi0JICogaW5kaWNhdGluZyB0aGF0IHRoZSBkYXRhIGlzIGRvbmUgdHJhbnNmZXJpbmcuICovCisJICogaW5kaWNhdGluZyB0aGF0IHRoZSBkYXRhIGlzIGRvbmUgdHJhbnNmZXJyaW5nLiAqLwogCS8qIEZJWE1FOiBzbG93IHRoaXMgcG9sbGluZyBkb3duIHNvIGl0IGRvZXNuJ3QgcnVuIHRoZSBVU0IgYnVzIGZsYXQgb3V0CiAJICogaWYgaXQgYWN0dWFsbHkgaGFzIHRvIHNwZW5kIGFueSB0aW1lIGluIHRoaXMgbG9vcCAod2hpY2ggaXQgbm9ybWFsbHkKIAkgKiBkb2Vzbid0IGJlY2F1c2UgdGhlIGJ1ZmZlciBpcyBuZWFybHkgZW1wdHkpICovCkBAIC03MjYsNyArNzI2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChwb3J0X2V4dHJhLT50eF9wZW5kaW5nX2J5dGVzID49IFFUMl9GSUZPX0RFUFRIKSB7CiAJCS8qIGJ1ZmZlciBpcyBmdWxsICg9PSkuID4gc2hvdWxkIG5vdCBvY2N1ciwgYnV0IHdvdWxkIGluZGljYXRlCi0JCSAqIHRoYXQgYW4gb3ZlcmZsb3cgaGFkIG9jY3VyZWQgKi8KKwkJICogdGhhdCBhbiBvdmVyZmxvdyBoYWQgb2NjdXJyZWQgKi8KIAkJZGJnKCIlcygpOiBwb3J0IHRyYW5zbWl0IGJ1ZmZlciBpcyBmdWxsISIsIF9fZnVuY19fKTsKIAkJLyogc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7IGNvbW1lbnRlZCBpbiB2ZW5kb3IgZHJpdmVyICovCiAJCXJldHVybiAwOwpAQCAtODIzLDcgKzgyMyw3IEBACiAJICogcmVkdWNlIHRoZSBmcmVlIHNwYWNlIGNvdW50IGJ5IHRoZSBzaXplIG9mIHRoZSBkaXNwYXRjaGVkIHdyaXRlLgogCSAqIFdoZW4gYSAidHJhbnNtaXQgZW1wdHkiIG1lc3NhZ2UgY29tZXMgYmFjayB1cCB0aGUgVVNCIHJlYWQgc3RyZWFtLAogCSAqIHdlIGRlY3JlbWVudCB0aGUgY291bnQgYnkgdGhlIG51bWJlciBvZiBieXRlcyByZXBvcnRlZCBzZW50LCB0aHVzCi0JICoga2VlcGluZyB0cmFjayBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNlbnQgYW5kIHJlY2lldmVkIGJ5dGVzLgorCSAqIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzZW50IGFuZCByZWNlaXZlZCBieXRlcy4KIAkgKi8KIAogCXJvb20gPSAoUVQyX0ZJRk9fREVQVEggLSBwb3J0X2V4dHJhLT50eF9wZW5kaW5nX2J5dGVzKTsKQEAgLTE3OTUsNyArMTc5NSw3IEBACiAJfQogfQogCi0vKiogQGJyaWVmIFJldHJlaXZlIHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyIGZyb20gdGhlIGRldmljZQorLyoqIEBicmllZiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSByZWdpc3RlciBmcm9tIHRoZSBkZXZpY2UKICAqCiAgKiBJc3N1ZXMgYSBHRVRfUkVHSVNURVIgdmVuZG9yLXNwY2lmaWMgcmVxdWVzdCBvdmVyIHRoZSBVU0IgY29udHJvbAogICogcGlwZSB0byBvYnRhaW4gYSB2YWx1ZSBiYWNrIGZyb20gYSBzcGVjaWZpYyByZWdpc3RlciBvbiBhIHNwZWNpZmljCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnRtcF9waHkuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydG1wX3BoeS5oCmluZGV4IDk4NDU0ZGYuLmE1MjIyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydG1wX3BoeS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydG1wX3BoeS5oCkBAIC00NjcsNyArNDY3LDcgQEAKIAkJCURCR1BSSU5UX0VSUigiQkJQIHdyaXRlIFIlZD0weCV4IGZhaWwuIEJ1c3lDbnQ9ICVkLmJQQ0ljbGtPZmYgPSAlZC4gXG4iLCBfSSwgQmJwQ3NyLndvcmQsIEJ1c3lDbnQsIChfQSktPmJQQ0ljbGtPZmYpOwlcCiAJCX0JCQkJCQkJCQkJCQkJCQkJCVwKIAl9IGVsc2UgewkJCQkJCQlcCi0JCURCR1BSSU5UX0VSUigiKioqKioqIEJCUF9Xcml0ZV9MYXRjaCBCdWZmZXIgZXhjZWVkcyBtYXggYm91bmRyeSAqKioqKiogXG4iKTsJXAorCQlEQkdQUklOVF9FUlIoIioqKioqKiBCQlBfV3JpdGVfTGF0Y2ggQnVmZmVyIGV4Y2VlZHMgbWF4IGJvdW5kYXJ5ICoqKioqKiBcbiIpOwlcCiAJfQkJCQkJCQkJCQkJCQkJCQkJCVwKIH0KICNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2JhX2FjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYmFfYWN0aW9uLmMKaW5kZXggNjJmNmY2Yi4uMTMzYmMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYmFfYWN0aW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYmFfYWN0aW9uLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotI2RlZmluZSBCQV9PUklfSU5JVF9TRVEJCShwRW50cnktPlR4U2VxW1RJRF0pCS8qMSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRhbCBzZXF1ZW5jZSBudW1iZXIgb2YgQkEgc2Vzc2lvbiAqLworI2RlZmluZSBCQV9PUklfSU5JVF9TRVEJCShwRW50cnktPlR4U2VxW1RJRF0pCS8qMSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWwgc2VxdWVuY2UgbnVtYmVyIG9mIEJBIHNlc3Npb24gKi8KIAogI2RlZmluZSBPUklfU0VTU0lPTl9NQVhfUkVUUlkJOAogI2RlZmluZSBPUklfQkFfU0VTU0lPTl9USU1FT1VUCSgyMDAwKQkvKiBtcyAqLwpAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAKIAogCQkvKgogCQkgKiBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzCi0JCSAqIGFuZCByZWNldmluZyBtcGR1IHRvIHVwcGVyIGxheWVyCisJCSAqIGFuZCByZWNlaXZpbmcgbXBkdSB0byB1cHBlciBsYXllcgogCQkgKiBtYWtlIHRjcC9pcCB0byB0YWtlIGNhcmUgcmVvcmRlcmluZyBtZWNoYW5pc20KIAkJICovCiAJCS8qYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2Flcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2Flcy5jCmluZGV4IGE5OTg3OWIuLmQ3MGQyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9hZXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fYWVzLmMKQEAgLTg1OCw3ICs4NTgsNyBAQAogc3RhdGljIHVpbnQzMiBLVDJbMjU2XTsKIHN0YXRpYyB1aW50MzIgS1QzWzI1Nl07CiAKLS8qIHBsYXRmb3JtLWluZGVwZW5kYW50CTMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbgltYWNyb3MgKi8KKy8qIHBsYXRmb3JtLWluZGVwZW5kZW50CTMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbgltYWNyb3MgKi8KIAogI2RlZmluZQlHRVRfVUlOVDMyKG4sYixpKQkJCQkJCVwKIHsJCQkJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fY2ZnLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fY2ZnLmMKaW5kZXggMjRmNDM5My4uNzI3Zjc5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9jZmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fY2ZnLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogICAgICAgICBwQWRhcHRlcglQb2ludGVyIHRvIG91ciBhZGFwdGVyCiAgICAgICAgIGtleVN0cmluZwlXUEEgcHJlLXNoYXJlZCBrZXkgc3RyaW5nCiAgICAgICAgIHBIYXNoU3RyCVN0cmluZyB1c2VkIGZvciBwYXNzd29yZCBoYXNoIGZ1bmN0aW9uCi0gICAgICAgIGhhc2hTdHJMZW4JTGVuZ2h0IG9mIHRoZSBoYXNoIHN0cmluZworICAgICAgICBoYXNoU3RyTGVuCUxlbmd0aCBvZiB0aGUgaGFzaCBzdHJpbmcKICAgICAgICAgcFBNS0J1ZgkJT3V0cHV0IGJ1ZmZlciBvZiBXUEFQU0sga2V5CiAKICAgICBSZXR1cm46CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYwppbmRleCBmNmMxOTNjLi4zMzc5OWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCiAJLyogKi8KIAkvKiBJbiBXTU0tVUFQU0QsIG1sbWUgZnJhbWUgc2hvdWxkIGJlIHNldCBwc20gYXMgcG93ZXIgc2F2aW5nIGJ1dCBwcm9iZSByZXF1ZXN0IGZyYW1lICovCi0JLyogRGF0YS1OdWxsIHBhY2tldHMgYWxzZSBwYXNzIHRocm91Z2ggTU1SZXF1ZXN0IGluIFJUMjg2MCwgaG93ZXZlciwgd2UgaG9wZSBjb250cm9sIHRoZSBwc20gYml0IHRvIHBhc3MgQVBTRCAqLworCS8qIERhdGEtTnVsbCBwYWNrZXRzIGFsc28gcGFzcyB0aHJvdWdoIE1NUmVxdWVzdCBpbiBSVDI4NjAsIGhvd2V2ZXIsIHdlIGhvcGUgY29udHJvbCB0aGUgcHNtIGJpdCB0byBwYXNzIEFQU0QgKi8KIC8qICAgICAgaWYgKChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSAhPSBCVFlQRV9EQVRBKSAmJiAocEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgIT0gQlRZUEVfQ05UTCkpICovCiAJewogCQlpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQUNUSU9OKSB8fApAQCAtMTkzMyw3ICsxOTMzLDcgQEAKIAogCWlmIChUeXBlTGVuIDw9IDE1MDApIHsJLyogODAyLjMsIDgwMi4zIExMQyAqLwogCQkvKgotCQkgICBEZXN0TUFDKDYpICsgU3JjTUFDKDYpICsgTGVuZ2h0KDIpICsKKwkJICAgRGVzdE1BQyg2KSArIFNyY01BQyg2KSArIExlbmd0aCgyKSArCiAJCSAgIERTQVAoMSkgKyBTU0FQKDEpICsgQ29udHJvbCgxKSArCiAJCSAgIGlmIHRoZSBEU0FQID0gMHhBQSwgU1NBUD0weEFBLCBDb250b3JsID0gMHgwMywgaXQgaGFzIGEgNS1ieXRlcyBTTkFQIGhlYWRlci4KIAkJICAgPT4gKyBTTkFQICg1LCBPcmlnaW5hdGlvbklEKDMpICsgZXRoZXJUeXBlKDIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV9wY2kuYwppbmRleCA3YWY1OWZmLi5mMDFhNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV9wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV9wY2kuYwpAQCAtNDM4LDEzICs0MzgsMTMgQEAKIAkvKiBBZGQgUnggc2l6ZSB0byBjaGFubmVsIGxvYWQgY291bnRlciwgd2Ugc2hvdWxkIGlnbm9yZSBlcnJvciBjb3VudHMgKi8KIAlwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyArPSAocFJ4RC0+U0RMMCArIDE0KTsKIAotCS8qIERyb3AgVG9EcyBwcm9taXNjb3VzIGZyYW1lLCBpdCBpcyBvcGVuZWQgZHVlIHRvIENDWCAyIGNoYW5uZWwgbG9hZCBzdGF0aXN0aWNzICovCisJLyogRHJvcCBUb0RzIHByb21pc2N1b3VzIGZyYW1lLCBpdCBpcyBvcGVuZWQgZHVlIHRvIENDWCAyIGNoYW5uZWwgbG9hZCBzdGF0aXN0aWNzICovCiAJaWYgKHBIZWFkZXIgIT0gTlVMTCkgewogCQlpZiAocEhlYWRlci0+RkMuVG9EcykgewogCQkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKIAkJfQogCX0KLQkvKiBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW50J3MgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UgKi8KKwkvKiBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW4ndCBkcm9wIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIGRyb3AgYmVhY29uIGluIHRoaXMgY2FzZSAqLwogCS8qIEkgYW0ga2luZCBvZiBkb3VidGluZyB0aGUgVTJNIGJpdCBvcGVyYXRpb24gKi8KIAkvKiBpZiAocFJ4RC0+VTJNID09IDApICovCiAJLyogICAgICByZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7ICovCkBAIC05MzksNyArOTM5LDcgQEAKIAkvKiAqLwogCS8qICovCiAJLyogSW4gV01NLVVBUFNELCBtbG1lIGZyYW1lIHNob3VsZCBiZSBzZXQgcHNtIGFzIHBvd2VyIHNhdmluZyBidXQgcHJvYmUgcmVxdWVzdCBmcmFtZSAqLwotCS8qIERhdGEtTnVsbCBwYWNrZXRzIGFsc2UgcGFzcyB0aHJvdWdoIE1NUmVxdWVzdCBpbiBSVDI4NjAsIGhvd2V2ZXIsIHdlIGhvcGUgY29udHJvbCB0aGUgcHNtIGJpdCB0byBwYXNzIEFQU0QgKi8KKwkvKiBEYXRhLU51bGwgcGFja2V0cyBhbHNvIHBhc3MgdGhyb3VnaCBNTVJlcXVlc3QgaW4gUlQyODYwLCBob3dldmVyLCB3ZSBob3BlIGNvbnRyb2wgdGhlIHBzbSBiaXQgdG8gcGFzcyBBUFNEICovCiAJaWYgKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlICE9IEJUWVBFX0RBVEEpIHsKIAkJaWYgKChwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX1BST0JFX1JFUSkKIAkJICAgIHx8ICEocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCmluZGV4IDdjNTZjMmYuLjgzYTYyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCkBAIC03MDIsNyArNzAyLDcgQEAKIAkqcFJ4UGVuZGluZwkJCXBlbmRpbmcgcmVjZWl2ZWQgcGFja2V0IGZsYWcKIAogUmV0dXJuIFZhbHVlOgotICAgIHRoZSByZWNpZXZlZCBwYWNrZXQKKyAgICB0aGUgcmVjZWl2ZWQgcGFja2V0CiAKIE5vdGU6CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTg1MCw3ICs4NTAsNyBAQAogCS8qIEFkZCBSeCBzaXplIHRvIGNoYW5uZWwgbG9hZCBjb3VudGVyLCB3ZSBzaG91bGQgaWdub3JlIGVycm9yIGNvdW50cyAqLwogCXBBZC0+U3RhQ2ZnLkNMQnVzeUJ5dGVzICs9IChwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ICsgMTQpOwogCi0JLyogRHJvcCBUb0RzIHByb21pc2NvdXMgZnJhbWUsIGl0IGlzIG9wZW5lZCBkdWUgdG8gQ0NYIDIgY2hhbm5lbCBsb2FkIHN0YXRpc3RpY3MgKi8KKwkvKiBEcm9wIFRvRHMgcHJvbWlzY3VvdXMgZnJhbWUsIGl0IGlzIG9wZW5lZCBkdWUgdG8gQ0NYIDIgY2hhbm5lbCBsb2FkIHN0YXRpc3RpY3MgKi8KIAlpZiAocEhlYWRlci0+RkMuVG9EcykgewogCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiRXJyO0ZDLlRvRHNcbiIpKTsKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CkBAIC04NjAsNyArODYwLDcgQEAKIAkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIikpOwogCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAl9Ci0JLyogRHJvcCBub3QgVTJNIGZyYW1lcywgY2FudCdzIGRyb3AgaGVyZSBiZWNhdXNlIHdlIHdpbGwgZHJvcCBiZWFjb24gaW4gdGhpcyBjYXNlICovCisJLyogRHJvcCBub3QgVTJNIGZyYW1lcywgY2FuJ3QgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UgKi8KIAkvKiBJIGFtIGtpbmQgb2YgZG91YnRpbmcgdGhlIFUyTSBiaXQgb3BlcmF0aW9uICovCiAJLyogaWYgKHBSeEQtPlUyTSA9PSAwKSAqLwogCS8qICAgICAgcmV0dXJuKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX21hY19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9tYWNfcGNpLmMKaW5kZXggMjFlZWQyNS4uZDA2ZjBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX21hY19wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fbWFjX3BjaS5jCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQAogCSAgIHBBZC0+Q2hlY2tEbWFCdXN5Q291bnQgPSAwOwogCSAgIH0KIAkgKi8KLS8qS0ggRGVidWc6TXkgb3JpZ2luYWwgY29kZXMgaGF2ZSB0aGUgZm9sbHdvaW5nIGNvZGVzLCBidXQgY3VycmVjbnQgY29kZXMgZG8gbm90IGhhdmUgaXQuICovCisvKktIIERlYnVnOk15IG9yaWdpbmFsIGNvZGVzIGhhdmUgdGhlIGZvbGxvd2luZyBjb2RlcywgYnV0IGN1cnJlY250IGNvZGVzIGRvIG5vdCBoYXZlIGl0LiAqLwogLyogRGlzYWJsZSBmb3Igc3RhYmlsaXR5LiBJZiBQQ0lFIExpbmsgQ29udHJvbCBpcyBtb2RpZmllZCBmb3IgYWR2YW5jZSBwb3dlciBzYXZlLCByZS1jb3ZlcnkgdGhpcyBjb2RlIHNlZ21lbnQuICovCiAJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCAweDEyODApOwogLypPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQ0xLU0VMRUNUXzQwTUhaKTsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zYW5pdHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zYW5pdHkuYwppbmRleCA2YjAwM2M5Li4zYmZiNGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc2FuaXR5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3Nhbml0eS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIAlpZiAoKE1zZ0xlbiAhPSBzaXplb2Yoc3RydWN0IHJ0X21sbWVfYWRkYmFfcmVxKSkpIHsKIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJNbG1lQWRkQkFSZXFTYW5pdHkgZmFpbCAtIG1lc3NhZ2UgbGVuZ2h0IG5vdCBjb3JyZWN0LlxuIikpOworCQkJICgiTWxtZUFkZEJBUmVxU2FuaXR5IGZhaWwgLSBtZXNzYWdlIGxlbmd0aCBub3QgY29ycmVjdC5cbiIpKTsKIAkJcmV0dXJuIEZBTFNFOwogCX0KIApAQCAtMTA0LDcgKzEwNCw3IEBACiAKIAlpZiAoKE1zZ0xlbiAhPSBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGVsYmFfcmVxKSkpIHsKIAkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIG1lc3NhZ2UgbGVuZ2h0IG5vdCBjb3JyZWN0LlxuIikpOworCQkJICgiTWxtZURlbEJBUmVxU2FuaXR5IGZhaWwgLSBtZXNzYWdlIGxlbmd0aCBub3QgY29ycmVjdC5cbiIpKTsKIAkJcmV0dXJuIEZBTFNFOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMKaW5kZXggZjg0MTk0ZC4uYWVmZTFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3N5bmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jCkBAIC02OTQsNyArNjk0LDcgQEAKIAkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwogCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKIAkJfQotCQkvKiBGb3IgU0NBTl9DSVNDT19QQVNTSVZFLCBkbyBub3RoaW5nIGFuZCBzaWxlbnRseSB3YWl0IGZvciBiZWFjb24gb3Igb3RoZXIgcHJvYmUgcmVwb25zZSAqLworCQkvKiBGb3IgU0NBTl9DSVNDT19QQVNTSVZFLCBkbyBub3RoaW5nIGFuZCBzaWxlbnRseSB3YWl0IGZvciBiZWFjb24gb3Igb3RoZXIgcHJvYmUgcmVzcG9uc2UgKi8KIAogCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU0NBTl9MSVNURU47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jCmluZGV4IDAwNDBmNDUuLjYxNmViZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAKIAlOb3RlOgogCQlBbGwgdGhlc2UgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHdwYS5oCi0JCUZvciBzdXBwbGljYW50LCB0aGVyZSBpcyBvbmx5IEVBUE9MIEtleSBtZXNzYWdlIGF2YWxpYWJsZQorCQlGb3Igc3VwcGxpY2FudCwgdGhlcmUgaXMgb25seSBFQVBPTCBLZXkgbWVzc2FnZSBhdmFpbGFibGUKIAogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KQEAgLTEyNjcsNyArMTI2Nyw3IEBACiAJCWludAkJcHJlZml4X2xlbgktCXRoZSBsZW5ndGggb2YgdGhlIGxhYmVsCiAJCXU4CSpkYXRhCQktCWEgc3BlY2lmaWMgZGF0YSB3aXRoIHZhcmlhYmxlIGxlbmd0aAogCQlpbnQJCWRhdGFfbGVuCS0JdGhlIGxlbmd0aCBvZiBhIHNwZWNpZmljIGRhdGEKLQkJaW50CQlsZW4JCQktCXRoZSBvdXRwdXQgbGVuZ2h0CisJCWludAkJbGVuCQkJLQl0aGUgb3V0cHV0IGxlbmd0aAogCiAJUmV0dXJuIFZhbHVlOgogCQl1OAkqb3V0cHV0CQktCXRoZSBjYWxjdWxhdGVkIHJlc3VsdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vbWxtZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vbWxtZS5jCmluZGV4IGQ5YzNmZDUuLmU0OGVhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9tbG1lLmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogCQkJcENoaXBPcHMtPkFzaWNIYWx0QWN0aW9uKHBBZCk7CiAJfQogCi0JUlRNUHVzZWNEZWxheSg1MDAwKTsJLyogIDUgbXNlYyB0byBndXJhbnRlZSBBbnQgRGl2ZXJzaXR5IHRpbWVyIGNhbmNlbGVkICovCisJUlRNUHVzZWNEZWxheSg1MDAwKTsJLyogIDUgbXNlYyB0byBndWFyYW50ZWUgQW50IERpdmVyc2l0eSB0aW1lciBjYW5jZWxlZCAqLwogCiAJTWxtZVF1ZXVlRGVzdHJveSgmcEFkLT5NbG1lLlF1ZXVlKTsKIAlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwpAQCAtMTEwNywxNCArMTEwNywxNCBAQAogCQkJCQkqcEluaXRUeFJhdGVJZHggPQogCQkJCQkgICAgUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CiAJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkJCSAgICAgKCJEUlM6IHVua293biBtb2RlLGRlZmF1bHQgdXNlIDExTiAxUyBBUCBcbiIpKTsKKwkJCQkJCSAgICAgKCJEUlM6IHVua25vd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMVMgQVAgXG4iKSk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yUzsKIAkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU1swXTsKIAkJCQkJKnBJbml0VHhSYXRlSWR4ID0KIAkJCQkJICAgIFJhdGVTd2l0Y2hUYWJsZTExTjJTWzFdOwogCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkgICAgICgiRFJTOiB1bmtvd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMlMgQVAgXG4iKSk7CisJCQkJCQkgICAgICgiRFJTOiB1bmtub3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDJTIEFQIFxuIikpOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpIHsKQEAgLTExMjMsNyArMTEyMyw3IEBACiAJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9CiAJCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4xU1sxXTsKIAkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJICAgICAoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDFTIEFQIFxuIikpOworCQkJCQkJICAgICAoIkRSUzogdW5rbm93biBtb2RlLGRlZmF1bHQgdXNlIDExTiAxUyBBUCBcbiIpKTsKIAkJCQl9IGVsc2UgewogCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7CiAJCQkJCSpwVGFibGVTaXplID0KQEAgLTExMzEsMTEgKzExMzEsMTEgQEAKIAkJCQkJKnBJbml0VHhSYXRlSWR4ID0KIAkJCQkJICAgIFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMV07CiAJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkJCSAgICAgKCJEUlM6IHVua293biBtb2RlLGRlZmF1bHQgdXNlIDExTiAyUyBBUCBcbiIpKTsKKwkJCQkJCSAgICAgKCJEUlM6IHVua25vd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMlMgQVAgXG4iKSk7CiAJCQkJfQogCQkJfQogCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAgICAgKCJEUlM6IHVua293biBtb2RlIChTdXBSYXRlTGVuPSVkLCBFeHRSYXRlTGVuPSVkLCBNQ1NTZXRbMF09MHgleCwgTUNTU2V0WzFdPTB4JXgpXG4iLAorCQkJCSAgICAgKCJEUlM6IHVua25vd24gbW9kZSAoU3VwUmF0ZUxlbj0lZCwgRXh0UmF0ZUxlbj0lZCwgTUNTU2V0WzBdPTB4JXgsIE1DU1NldFsxXT0weCV4KVxuIiwKIAkJCQkgICAgICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuLAogCQkJCSAgICAgIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4sCiAJCQkJICAgICAgcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0sCkBAIC0xMzY4LDcgKzEzNjgsNyBAQAogCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSArCiAJCQkJCSAgICAgMTAgKiBPU19IWikgPCBwQWQtPk1sbWUuTm93MzIpIHsKIAkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCSAoIk1NQ0hLIC0gUm9hbWluZywgTm8gZWxpZ2FibGUgZW50cnksIHRyeSBuZXcgc2NhbiFcbiIpKTsKKwkJCQkJCQkgKCJNTUNISyAtIFJvYW1pbmcsIE5vIGVsaWdpYmxlIGVudHJ5LCB0cnkgbmV3IHNjYW4hXG4iKSk7CiAJCQkJCQlwQWQtPlN0YUNmZy5TY2FuQ250ID0gMjsKIAkJCQkJCXBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9CiAJCQkJCQkgICAgcEFkLT5NbG1lLk5vdzMyOwpAQCAtMjgyOCw3ICsyODI4LDcgQEAKIAogLyogSVJRTCA9IFBBU1NJVkVfTEVWRUwgKi8KIC8qIElSUUwgPSBESVNQQVRDSF9MRVZFTCAqLwotLyogYkxpbmtVcCBpcyB0byBpZGVudGlmeSB0aGUgaW5pdGFsIGxpbmsgc3BlZWQuICovCisvKiBiTGlua1VwIGlzIHRvIGlkZW50aWZ5IHRoZSBpbml0aWFsIGxpbmsgc3BlZWQuICovCiAvKiBUUlVFIGluZGljYXRlcyB0aGUgcmF0ZSB1cGRhdGUgYXQgbGlua3VwLCB3ZSBzaG91bGQgbm90IHRyeSB0byBzZXQgdGhlIHJhdGUgYXQgNTRNYnBzLiAqLwogdm9pZCBNbG1lVXBkYXRlVHhSYXRlcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEJPT0xFQU4gYkxpbmtVcCwgdTggYXBpZHgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jCmluZGV4IGQzNTlhMTQuLjVmYTE5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jCkBAIC0yMDM3LDcgKzIwMzcsNyBAQAogCiAJCQlwRW50cnktPkZJRk9Db3VudCA9IDA7CiAJCQlwRW50cnktPk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQrKzsKLQkJCS8qIHVwZGF0ZSBOb0RhdGFJZGxlQ291bnQgd2hlbiBzdWNlc3NmdWwgc2VuZCBwYWNrZXQgdG8gU1RBLiAqLworCQkJLyogdXBkYXRlIE5vRGF0YUlkbGVDb3VudCB3aGVuIHN1Y2Nlc3NmdWwgc2VuZCBwYWNrZXQgdG8gU1RBLiAqLwogCQkJcEVudHJ5LT5Ob0RhdGFJZGxlQ291bnQgPSAwOwogCQkJcEVudHJ5LT5Db250aW51ZVR4RmFpbENudCA9IDA7CiAJCX0KQEAgLTI1MTYsNyArMjUxNiw3IEBACiAJLypwQWQtPlR1cm5BZ2dyQnVsa0luQ291bnQgPSAwOyAqLwogCXBBZC0+YlVzYlR4QnVsa0FnZ3JlID0gMDsKIAotCS8qIGluaXQgYXMgdW5zZWQgdmFsdWUgdG8gZW5zdXJlIGRyaXZlciB3aWxsIHNldCB0byBNQ1Ugb25jZS4gKi8KKwkvKiBpbml0IGFzIHVudXNlZCB2YWx1ZSB0byBlbnN1cmUgZHJpdmVyIHdpbGwgc2V0IHRvIE1DVSBvbmNlLiAqLwogCXBBZC0+TGVkSW5kaWNhdG9yU3RyZW5ndGggPSAweEZGOwogCiAJcEFkLT5Db21tb25DZmcuTWF4UGt0T25lVHhCdWxrID0gMjsKQEAgLTMwNzYsMTEgKzMwNzYsMTEgQEAKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVNldCBMRUQgU2lnbmFsIFN0cmVndGgKKwkJU2V0IExFRCBTaWduYWwgU3RyZW5ndGgKIAogCUFyZ3VtZW50czoKIAkJcEFkCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlEYm0JCQkJCQlTaWduYWwgU3RyZWd0aAorCQlEYm0JCQkJCQlTaWduYWwgU3RyZW5ndGgKIAogCVJldHVybiBWYWx1ZToKIAkJTm9uZQpAQCAtMzA5MCw3ICszMDkwLDcgQEAKIAlOb3RlOgogCQlDYW4gYmUgcnVuIG9uIGFueSBJUlFMIGxldmVsLgogCi0JCUFjY29yZGluZyB0byBNaWNyb3NvZnQgWmVybyBDb25maWcgV2lyZWxlc3MgU2lnbmFsIFN0cmVndGggZGVmaW5pdGlvbiBhcyBiZWxvd3MuCisJCUFjY29yZGluZyB0byBNaWNyb3NvZnQgWmVybyBDb25maWcgV2lyZWxlc3MgU2lnbmFsIFN0cmVuZ3RoIGRlZmluaXRpb24gYXMgYmVsb3dzLgogCQk8PSAtOTAgIE5vIFNpZ25hbAogCQk8PSAtODEgIFZlcnkgTG93CiAJCTw9IC03MSAgTG93CkBAIC0zMTE4LDcgKzMxMTgsNyBAQAogCQkJbkxlZCA9IDMxOwogCiAJCS8qICovCi0JCS8qIFVwZGF0ZSBTaWduYWwgU3RyZWd0aCB0byBmaXJtd2FyZSBpZiBjaGFuZ2VkLiAqLworCQkvKiBVcGRhdGUgU2lnbmFsIFN0cmVuZ3RoIHRvIGZpcm13YXJlIGlmIGNoYW5nZWQuICovCiAJCS8qICovCiAJCWlmIChwQWQtPkxlZEluZGljYXRvclN0cmVuZ3RoICE9IG5MZWQpIHsKIAkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MSwgMHhmZiwgbkxlZCwKQEAgLTMxNjYsNyArMzE2Niw3IEBACiAJCWlmIChwQWQtPkNvbW1vbkNmZy5QU1BYbGluaykKIAkJCXJ4X2ZpbHRlcl9mbGFnID0gUFNQWExJTks7CiAJCWVsc2UKLQkJCXJ4X2ZpbHRlcl9mbGFnID0gU1RBTk9STUFMOwkvKiBTdGFpb24gbm90IGRyb3AgY29udHJvbCBmcmFtZSB3aWxsIGZhaWwgV2lGaSBDZXJ0aWZpY2F0aW9uLiAqLworCQkJcnhfZmlsdGVyX2ZsYWcgPSBTVEFOT1JNQUw7CS8qIFN0YXRpb24gbm90IGRyb3AgY29udHJvbCBmcmFtZSB3aWxsIGZhaWwgV2lGaSBDZXJ0aWZpY2F0aW9uLiAqLwogCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIHJ4X2ZpbHRlcl9mbGFnKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9zcGVjdHJ1bS5jCmluZGV4IGMwZDJmNDIuLmNlYjYyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYwpAQCAtMTA1OCw4ICsxMDU4LDggQEAKIAkJMy4gTWVhc3VyZSBUb2tlbi4KIAkJNC4gTWVhc3VyZSBSZXF1ZXN0IE1vZGUuCiAJCTUuIE1lYXN1cmUgUmVxdWVzdCBUeXBlLgotCQk2LiBMZW5ndGggb2YgUmVwb3J0IEluZm9tYXRpb24KLQkJNy4gUG9pbnRlciBvZiBSZXBvcnQgSW5mb21hdGlvbiBCdWZmZXIuCisJCTYuIExlbmd0aCBvZiBSZXBvcnQgSW5mb3JtYXRpb24KKwkJNy4gUG9pbnRlciBvZiBSZXBvcnQgSW5mb3JtYXRpb24gQnVmZmVyLgogCiAJUmV0dXJuCTogTm9uZS4KIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAlQYXJhbWV0cnM6CiAJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQogCQkyLiBtZXNzYWdlIGxlbmd0aC4KLQkJMy4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IGluZm9tYXRpb24gYnVmZmVyLgorCQkzLiBDaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgaW5mb3JtYXRpb24gYnVmZmVyLgogCiAJUmV0dXJuCTogTm9uZS4KIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTQ2NSw3ICsxNDY1LDcgQEAKIAlQYXJhbWV0cnM6CiAJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQogCQkyLiBtZXNzYWdlIGxlbmd0aC4KLQkJMy4gTWVhc3VyZW1lbnQgcmVxdWVzdCBpbmZvbWF0aW9uIGJ1ZmZlci4KKwkJMy4gTWVhc3VyZW1lbnQgcmVxdWVzdCBpbmZvcm1hdGlvbiBidWZmZXIuCiAKIAlSZXR1cm4JOiBOb25lLgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNTM4LDggKzE1MzgsOCBAQAogCVBhcmFtZXRyczoKIAkJMS4gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCiAJCTIuIG1lc3NhZ2UgbGVuZ3RoLgotCQkzLiBNZWFzdXJlbWVudCByZXBvcnQgaW5mb21hdGlvbiBidWZmZXIuCi0JCTQuIGJhc2ljIHJlcG9ydCBpbmZvbWF0aW9uIGJ1ZmZlci4KKwkJMy4gTWVhc3VyZW1lbnQgcmVwb3J0IGluZm9ybWF0aW9uIGJ1ZmZlci4KKwkJNC4gYmFzaWMgcmVwb3J0IGluZm9ybWF0aW9uIGJ1ZmZlci4KIAogCVJldHVybgk6IE5vbmUuCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvbWxtZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9tbG1lLmgKaW5kZXggY2QxZWUzZC4uYTI4NTg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9tbG1lLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9tbG1lLmgKQEAgLTM3NCw3ICszNzQsNyBAQAogc3RydWN0IHJ0X2h0X3BoeV9pbmZvIHsKIAlCT09MRUFOIGJIdEVuYWJsZTsJLyogSWYgd2Ugc2hvdWxkIHVzZSBodCByYXRlLiAqLwogCUJPT0xFQU4gYlByZU5IdDsJLyogSWYgd2Ugc2hvdWxkIHVzZSBodCByYXRlLiAqLwotCS8qU3Vic3RyYWN0IGZyb20gSFQgQ2FwYWJpbGl0eSBJRSAqLworCS8qU3VidHJhY3QgZnJvbSBIVCBDYXBhYmlsaXR5IElFICovCiAJdTggTUNTU2V0WzE2XTsKIH07CiAKQEAgLTM5Miw3ICszOTIsNyBAQAogCXUxNiBBbXNkdVNpemU6MTsJLyogTWF4IHJlY2VpdmluZyBBLU1TRFUgc2l6ZSAqLwogCXUxNiByc3Y6NTsKIAotCS8qU3Vic3RyYWN0IGZyb20gQWRkaW9udCBIVCBJTkZPIElFICovCisJLypTdWJ0cmFjdCBmcm9tIEFkZGlvbnQgSFQgSU5GTyBJRSAqLwogCXU4IE1heFJBbXBkdUZhY3RvcjoyOwogCXU4IE1wZHVEZW5zaXR5OjM7CiAJdTggRXh0Q2hhbk9mZnNldDoyOwkvKiBQbGVhc2Ugbm90ZSB0aGUgZGlmZmVyZW5jZSB3aXRoIGZvbGxvd2luZyAgICAgdTggICBOZXdFeHRDaGFubmVsT2Zmc2V0OyBmcm9tIDgwMi4xMW4gKi8KQEAgLTQxMCw3ICs0MTAsNyBAQAogCXU4IEJTU0NvZXhpc3QyMDQwOwogfTsKIAotLyogICBmaWVsZCBpbiBBZGR0aW9uYWwgSFQgSW5mb3JtYXRpb24gSUUgLiAqLworLyogICBmaWVsZCBpbiBBZGRpdGlvbmFsIEhUIEluZm9ybWF0aW9uIElFIC4gKi8KIHN0cnVjdCBQQUNLRUQgcnRfYWRkX2h0aW5mbyB7CiAJdTggRXh0Q2hhbk9mZnNldDoyOwogCXU4IFJlY29tV2lkdGg6MTsKQEAgLTg1Nyw3ICs4NTcsNyBAQAogfTsKIAogLyogTUxNRSBBVVggZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0ZW1wb3JhcmxpeSBzZXR0aW5ncyBkdXJpbmcgYSBjb25uZWN0aW9uIGF0dGVtcHQuICovCi0vKiBPbmNlIHRoaXMgYXR0ZW1wIHN1Y2NlZWRzLCBhbGwgc2V0dGluZ3Mgd2lsbCBiZSBjb3B5IHRvIHBBZC0+U3RhQWN0aXZlLiAqLworLyogT25jZSB0aGlzIGF0dGVtcHQgc3VjY2VlZHMsIGFsbCBzZXR0aW5ncyB3aWxsIGJlIGNvcHkgdG8gcEFkLT5TdGFBY3RpdmUuICovCiAvKiBBIGNvbm5lY3Rpb24gYXR0ZW1wdCAodXNlciBzZXQgT0lELCByb2FtaW5nLCBDQ1ggZmFzdCByb2FtaW5nLC4uKSBjb25zaXN0cyBvZiAqLwogLyogc2V2ZXJhbCBzdGVwcyAoSk9JTiwgQVVUSCwgQVNTT0Mgb3IgUkVBU1NPQykgYW5kIG1heSBmYWlsIGF0IGFueSBzdGVwLiBXZSBwdXJwb3NlbHkgKi8KIC8qIHNlcGFyYXRlIHRoaXMgdW5kZXItdHJpYWwgc2V0dGluZ3MgYXdheSBmcm9tIHBBZC0+U3RhQWN0aXZlIHNvIHRoYXQgb25jZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCmluZGV4IGU1YjA0MjcuLjE1ODMzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCUFyZ3VtZW50czoKIAkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCiAJCXBJbnNBTVNEVUhkcglFV0MgQS1NU0RVIGZvcm1hdCBoYXMgZXh0cmEgMTQtYnl0ZXMgaGVhZGVyLiBpZiBUUlVFLCBpbnNlcnQgdGhpcyAxNC1ieXRlIGhkciBpbiBmcm9udCBvZiBNU0RVLgotCQkqcFNyY1RvdGFsTGVuCQkJcmV0dXJuIHRvdGFsIHBhY2tldCBsZW5ndGguIFRoaXMgbGVuZ2h0IGlzIGNhbGN1bGF0ZWQgd2l0aCA4MDIuMyBmb3JtYXQgcGFja2V0LgorCQkqcFNyY1RvdGFsTGVuCQkJcmV0dXJuIHRvdGFsIHBhY2tldCBsZW5ndGguIFRoaXMgbGVuZ3RoIGlzIGNhbGN1bGF0ZWQgd2l0aCA4MDIuMyBmb3JtYXQgcGFja2V0LgogCiAJUmV0dXJuIFZhbHVlOgogCQlORElTX1NUQVRVU19TVUNDRVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3BjaV9yYnVzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3BjaV9yYnVzLmMKaW5kZXggZTVmYjY3Yy4uZjgwYWI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wY2lfcmJ1cy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfcGNpX3JidXMuYwpAQCAtNjE5LDcgKzYxOSw3IEBACiAJICAgT3Iga2VybmVsIHdpbGwgcGFuaWMgYWZ0ZXIgaWZjb25maWcgcmEwIGRvd24gc29tZXRpbWVzICovCiAKIAkvKiAqLwotCS8qIEluaXRhbCB0aGUgSW50ZXJydXB0IHNvdXJjZS4gKi8KKwkvKiBJbml0aWFsIHRoZSBJbnRlcnJ1cHQgc291cmNlLiAqLwogCS8qICovCiAJSW50U291cmNlLndvcmQgPSAweDAwMDAwMDAwTDsKIC8qICAgICAgTWN1SW50U291cmNlLndvcmQgPSAweDAwMDAwMDAwTDsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKaW5kZXggZDE2YjA2YS4uM2MzMTM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKQEAgLTc1Niw3ICs3NTYsNyBAQAogLyogKi8KIHN0cnVjdCBydF9wcml2YXRlIHsKIAl1MzIgU3lzdGVtUmVzZXRDbnQ7CS8qIFN5c3RlbSByZXNldCBjb3VudGVyICovCi0JdTMyIFR4UmluZ0Z1bGxDbnQ7CS8qIFR4IHJpbmcgZnVsbCBvY2N1cnJhbmNlIG51bWJlciAqLworCXUzMiBUeFJpbmdGdWxsQ250OwkvKiBUeCByaW5nIGZ1bGwgb2NjdXJyZW5jZSBudW1iZXIgKi8KIAl1MzIgUGh5UnhFcnJDbnQ7CS8qIFBIWSBSeCBlcnJvciBjb3VudCwgZm9yIGRlYnVnIHB1cnBvc2UsIG1pZ2h0IG1vdmUgdG8gZ2xvYmFsIGNvdW50ZXIgKi8KIAkvKiBWYXJpYWJsZXMgZm9yIFdFUCBlbmNyeXB0aW9uIC8gZGVjcnlwdGlvbiBpbiBydG1wX3dlcC5jICovCiAJdTMyIEZDU0NSQzMyOwpAQCAtOTI1LDcgKzkyNSw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IHJlb3JkZXJpbmdfbXBkdSB7CiAJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbmV4dDsKLQl2b2lkICpwUGFja2V0OwkvKiBjb3ZlcnRlZCB0byA4MDIuMyBmcmFtZSAqLworCXZvaWQgKnBQYWNrZXQ7CS8qIGNvbnZlcnRlZCB0byA4MDIuMyBmcmFtZSAqLwogCWludCBTZXF1ZW5jZTsJCS8qIHNlcXVlbmNlIG51bWJlciBvZiBNUERVICovCiAJQk9PTEVBTiBiQU1TRFU7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMKaW5kZXggNTcxN2UxMi4uNDliMTAxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCkBAIC0yNDYwLDcgKzI0NjAsNyBAQAogCQl9CiAJfQogCi0JewkJCS8qIGRldGVybWluZSB0aGlzIGlvY3RsIGNvbW1hbmQgaXMgY29tbWluZyBmcm9tIHdoaWNoIGludGVyZmFjZS4gKi8KKwl7CQkJLyogZGV0ZXJtaW5lIHRoaXMgaW9jdGwgY29tbWFuZCBpcyBjb21pbmcgZnJvbSB3aGljaCBpbnRlcmZhY2UuICovCiAJCXBPYmotPmlvY3RsX2lmX3R5cGUgPSBJTlRfTUFJTjsKIAkJcE9iai0+aW9jdGxfaWYgPSBNQUlOX01CU1NJRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9idWxrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9idWxrLmMKaW5kZXggZDI3NDZmOC4uNjc5YjgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfYnVsay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2J1bGsuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJCQkJLyp8fCAoIChUaGlzQnVsa1NpemUgIT0gMCkgICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpICovCiAJCQkJKSB7CiAJCQkJLyogRm9yIFVTQiAxLjEgb3IgcGVlciB3aGljaCBkaWRuJ3Qgc3VwcG9ydCBBTVBEVSwgbGltaXQgdGhlIEJ1bGtPdXQgc2l6ZS4gKi8KLQkJCQkvKiBGb3IgcGVyZm9ybWVuY2UgaW4gYi9nIG1vZGUsIG5vdyBqdXN0IGNoZWNrIGZvciBVU0IgMS4xIGFuZCBkaWRuJ3QgY2FyZSBhYm91dCB0aGUgQVBNRFUgb3Igbm90ISAyMDA4LzA2LzA0LiAqLworCQkJCS8qIEZvciBwZXJmb3JtYW5jZSBpbiBiL2cgbW9kZSwgbm93IGp1c3QgY2hlY2sgZm9yIFVTQiAxLjEgYW5kIGRpZG4ndCBjYXJlIGFib3V0IHRoZSBBUE1EVSBvciBub3QhIDIwMDgvMDYvMDQuICovCiAJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9CiAJCQkJICAgIFRtcEJ1bGtFbmRQb3M7CiAJCQkJYnJlYWs7CkBAIC0zMTEsNyArMzExLDcgQEAKIAkJCQkgICAgVG1wQnVsa0VuZFBvczsKIAkJCQlicmVhazsKIAkJCX0gZWxzZSBpZiAoKChwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplIDwgNTEyKSAmJiAoKFRoaXNCdWxrU2l6ZSAmIDB4ZmZmZmY4MDApICE9IDApKSAvKnx8ICggKFRoaXNCdWxrU2l6ZSAhPSAwKSAgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkgKi8pIHsJLyogRm9yIFVTQiAxLjEgb3IgcGVlciB3aGljaCBkaWRuJ3Qgc3VwcG9ydCBBTVBEVSwgbGltaXQgdGhlIEJ1bGtPdXQgc2l6ZS4gKi8KLQkJCQkvKiBGb3IgcGVyZm9ybWVuY2UgaW4gYi9nIG1vZGUsIG5vdyBqdXN0IGNoZWNrIGZvciBVU0IgMS4xIGFuZCBkaWRuJ3QgY2FyZSBhYm91dCB0aGUgQVBNRFUgb3Igbm90ISAyMDA4LzA2LzA0LiAqLworCQkJCS8qIEZvciBwZXJmb3JtYW5jZSBpbiBiL2cgbW9kZSwgbm93IGp1c3QgY2hlY2sgZm9yIFVTQiAxLjEgYW5kIGRpZG4ndCBjYXJlIGFib3V0IHRoZSBBUE1EVSBvciBub3QhIDIwMDgvMDYvMDQuICovCiAJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9CiAJCQkJICAgIFRtcEJ1bGtFbmRQb3M7CiAJCQkJYnJlYWs7CkBAIC0xMDE2LDcgKzEwMTYsNyBAQAogCQkJCVJUVVNCQnVsa091dE51bGxGcmFtZShwQWQpOwogCQkJfQogCQl9Ci0JCS8qIDguIE5vIGRhdGEgYXZhbGlhYmxlICovCisJCS8qIDguIE5vIGRhdGEgYXZhaWxhYmxlICovCiAJCWVsc2UKIAkJCTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9kYXRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9kYXRhLmMKaW5kZXggNjkzNjg4Ni4uNWI3MmJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfZGF0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2RhdGEuYwpAQCAtNzEsNyArNzEsNyBAQAogCiAJUm91dGluZQlEZXNjcmlwdGlvbjoKIAkJVGhpcyBzdWJyb3V0aW5lIHdpbGwgc2NhbiB0aHJvdWdoIHJlbGVhdGl2ZSByaW5nIGRlc2NyaXB0b3IgdG8gZmluZAotCQlvdXQgYXZhbGlhYmxlIGZyZWUgcmluZyBkZXNjcmlwdG9yIGFuZCBjb21wYXJlIHdpdGggcmVxdWVzdCBzaXplLgorCQlvdXQgYXZhaWxhYmxlIGZyZWUgcmluZyBkZXNjcmlwdG9yIGFuZCBjb21wYXJlIHdpdGggcmVxdWVzdCBzaXplLgogCiAJQXJndW1lbnRzOgogCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCmluZGV4IDFiMzEwM2YuLjMxNjJhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgUjgxODdTRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxODdTRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCisJZGVwZW5kcyBvbiBtCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKIAlzZWxlY3QgRUVQUk9NXzkzQ1g2CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IGRjNjA4YzcuLjE2YWE2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0xMDk5LDcgKzEwOTksNyBAQAogCSAqIG5vdCBzZXQuIEFzIHNvbWUgY2FyZHMgbWF5IGhhdmUgZGlmZmVyZW50IEhXIHF1ZXVlcyB0aGF0CiAJICogb25lIG1pZ2h0IHdhbnQgdG8gdXNlIGZvciBkYXRhIGFuZCBtYW5hZ2VtZW50IGZyYW1lcwogCSAqIHRoZSBvcHRpb24gdG8gaGF2ZSB0d28gY2FsbGJhY2tzIG1pZ2h0IGJlIHVzZWZ1bC4KLQkgKiBUaGlzIGZ1Y250aW9uIGNhbid0IHNsZWVwLgorCSAqIFRoaXMgZnVuY3Rpb24gY2FuJ3Qgc2xlZXAuCiAJICovCiAJaW50ICgqc29mdG1hY19oYXJkX3N0YXJ0X3htaXQpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMTM4LDkgKzExMzgsOSBAQAogCSAqIGl0IGlzIGNhbGxlZCBpbiBhIHdvcmtfcXVldWUgd2hlbiBzd2l0aGNpbmcgdG8gYWQtaG9jIG1vZGUKIAkgKiBvciBpbiBiZWhhbGYgb2YgaXdsaXN0IHNjYW4gd2hlbiB0aGUgY2FyZCBpcyBhc3NvY2lhdGVkCiAJICogYW5kIHJvb3QgdXNlciBhc2sgZm9yIGEgc2Nhbi4KLQkgKiB0aGUgZnVjbnRpb24gc3RvcF9zY2FuIHNob3VsZCBzdG9wIGJvdGggdGhlIHN5bmNybyBhbmQKKwkgKiB0aGUgZnVuY3Rpb24gc3RvcF9zY2FuIHNob3VsZCBzdG9wIGJvdGggdGhlIHN5bmNybyBhbmQKIAkgKiBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBjYW4gc2xlZXAuCi0JICogVGhlIGZ1Y250aW9uIHN0YXJ0X3NjYW4gc2hvdWxkIGluaXRpYXRlIHRoZSBiYWNrZ3JvdW5kCisJICogVGhlIGZ1bmN0aW9uIHN0YXJ0X3NjYW4gc2hvdWxkIGluaXRpYXRlIHRoZSBiYWNrZ3JvdW5kCiAJICogc2Nhbm5pbmcgYW5kIGNhbid0IHNsZWVwLgogCSAqLwogCXZvaWQgKCpzY2FuX3N5bmNybykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCA3NzFlMDE5Li43MzZhMTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTE5NTQsNyArMTk1NCw3IEBACiAKIAogCi0vKiBmb2xsb3dpbmcgYXJlIGZvciBhIHNpbXBsaWVyIFRYIHF1ZXVlIG1hbmFnZW1lbnQuCisvKiBmb2xsb3dpbmcgYXJlIGZvciBhIHNpbXBsZXIgVFggcXVldWUgbWFuYWdlbWVudC4KICAqIEluc3RlYWQgb2YgdXNpbmcgbmV0aWZfW3N0b3Avd2FrZV1fcXVldWUgdGhlIGRyaXZlcgogICogd2lsbCB1c2VzIHRoZXNlIHR3byBmdW5jdGlvbiAocGx1cyBhIHJlc2V0IG9uZSksIHRoYXQKICAqIHdpbGwgaW50ZXJuYWxseSB1c2VzIHRoZSBrZXJuZWwgbmV0aWZfKiBhbmQgdGFrZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKaW5kZXggNzBhYjAwOC4uMjE1NWE3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKQEAgLTE1OTEsNyArMTU5MSw3IEBACiAJCXByaXYtPlJTU0kgPSBSU1NJOwogCQkvKiBTUSB0cmFuc2xhdGlvbiBmb3JtdWxhIGlzIHByb3ZpZGVkIGJ5IFNEMyBEWi4gMjAwNi4wNi4yNyAqLwogCQlpZiAocXVhbGl0eSA+PSAxMjcpCi0JCQlxdWFsaXR5ID0gMTsgLyowOyAqLyAvKiAwIHdpbGwgY2F1c2UgZXBjIHRvIHNob3cgc2lnbmFsIHplcm8gLCB3YWxrIGFyb3VkIG5vdzsgKi8KKwkJCXF1YWxpdHkgPSAxOyAvKjA7ICovIC8qIDAgd2lsbCBjYXVzZSBlcGMgdG8gc2hvdyBzaWduYWwgemVybyAsIHdhbGsgYXJvdW5kIG5vdzsgKi8KIAkJZWxzZSBpZiAocXVhbGl0eSA8IDI3KQogCQkJcXVhbGl0eSA9IDEwMDsKIAkJZWxzZQpAQCAtMzg4Myw3ICszODgzLDcgQEAKIAkgKiBJZiB0aGUgcGFja2V0IHByZXZpb3VzIG9mIHRoZSBuaWMgcG9pbnRlciBoYXMgYmVlbgogCSAqIHByb2Nlc3NlZCB0aGlzIGRvZXNuJ3QgbWF0dGVyOiBpdCB3aWxsIGJlIGNoZWNrZWQKIAkgKiBoZXJlIGF0IHRoZSBuZXh0IHJvdW5kLiBBbnl3YXkgaWYgbm8gbW9yZSBwYWNrZXQgYXJlCi0JICogVFhlZCBubyBtZW1vcnkgbGVhayBvY2NvdXIgYXQgYWxsLgorCSAqIFRYZWQgbm8gbWVtb3J5IGxlYWsgb2NjdXIgYXQgYWxsLgogCSAqLwogCiAJc3dpdGNoIChwcmkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYwppbmRleCBmYzQ5MDc4Li4yNjEwODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIC8vCiAvLwlEZXNjcmlwdGlvbjoKIC8vCQlDYWxsYmFjayBmdW5jdGlvbiBvZiBVcGRhdGVUeFBvd2VyV29ya0l0ZW0uCi0vLwkJQmVjYXVzZSBvZiBzb21lIGV2ZW50IGhhcHBlbmQsIGUuZy4gQ0NYIFRQQywgSGlnaCBQb3dlciBNZWNoYW5pc20sCisvLwkJQmVjYXVzZSBvZiBzb21lIGV2ZW50IGhhcHBlbmVkLCBlLmcuIENDWCBUUEMsIEhpZ2ggUG93ZXIgTWVjaGFuaXNtLAogLy8JCVdlIHVwZGF0ZSBUeCBwb3dlciBvZiBjdXJyZW50IGNoYW5uZWwgYWdhaW4uCiAvLwogdm9pZCBydGw4MTgwX3R4X3B3X3dxIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC05ODQsNyArOTg0LDcgQEAKIAkJewogCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCA9IDA7CiAJCQkvLwotCQkJLy8gV2hlbiB0cmFuc2ZlcmluZyBmcm9tIENDSyB0byBPRkRNLCBESUcgaXMgYW4gaW1wb3J0YW50IGlzc3VlLgorCQkJLy8gV2hlbiB0cmFuc2ZlcnJpbmcgZnJvbSBDQ0sgdG8gT0ZETSwgRElHIGlzIGFuIGltcG9ydGFudCBpc3N1ZS4KIAkJCS8vCiAJCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyKQogCQkJCWJVcGRhdGVJbml0aWFsR2FpbiA9IHRydWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3J0bDgyMjV6Mi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9ydGw4MjI1ejIuYwppbmRleCAyYTJhZmQ1Li4zZjA5Zjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3J0bDgyMjV6Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfcnRsODIyNXoyLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCW1hc2sgPSAobG93MmhpZ2gpID8gMHgwMSA6ICgoKHUzMikweDAxKSA8PCAoMTItMSkpOwogCiAJLyoKLQkgKiBXZSBtdXN0IHNldCBkYXRhIHBpbiB0byBIVyBjb250cm9sZWQsIG90aGVyd2lzZSBSRiBjYW4ndCBkcml2ZXIgaXQKKwkgKiBXZSBtdXN0IHNldCBkYXRhIHBpbiB0byBIVyBjb250cm9sbGVkLCBvdGhlcndpc2UgUkYgY2FuJ3QgZHJpdmVyIGl0CiAJICogYW5kIHZhbHVlIFJGIHJlZ2lzdGVyIHdvbid0IGJlIGFibGUgdG8gcmVhZCBiYWNrIHByb3Blcmx5LgogCSAqLwogCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zRW5hYmxlLCAob3ZhbDIgJiAofjB4MDEpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTg1Yl9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTg1Yl9pbml0LmMKaW5kZXggM2JkZjliMy4uNGIwYjgzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4NWJfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODViX2luaXQuYwpAQCAtMTI3Myw3ICsxMjczLDcgQEAKIAkvKgogCQlTdG9wIEJlYWNvbi4KIAotCQlWaXN0YSBhZGQgYSBBZGhvYyBwcm9maWxlLCBIVyByYWRpbyBvZmYgdW50aWxsIE9JRF9ET1QxMV9SRVNFVF9SRVFVRVNUCisJCVZpc3RhIGFkZCBhIEFkaG9jIHByb2ZpbGUsIEhXIHJhZGlvIG9mZiB1bnRpbCBPSURfRE9UMTFfUkVTRVRfUkVRVUVTVAogCQlEcml2ZXIgd291bGQgc2V0IE1TUj1OT19MSU5LLCB0aGVuIEhXIFJhZGlvIE9OLCBNZ250UXVldWUgU3R1Y2suCiAJCUJlY2F1c2UgQmNuIERNQSBpc24ndCBjb21wbGV0ZSwgbWdudCBxdWV1ZSB3b3VsZCBzdHVjayB1bnRpbCBCY24gcGFja2V0IHNlbmQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKaW5kZXggMmU2NGIyMy4uNzUwYzM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgUlRMODE5MkUKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCisJZGVwZW5kcyBvbiBtCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKIAlzZWxlY3QgQ1JZUFRPCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCAzY2EzODgxLi5kYmUyMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTE5NjcsNyArMTk2Nyw3IEBACiAgICAgICAgIHUxNiBwcmV2X3NlcV9jdGw7ICAgICAgIC8qIHVzZWQgdG8gZHJvcCBkdXBsaWNhdGUgZnJhbWVzICovCiAKIAkvKiBtYXAgb2YgYWxsb3dlZCBjaGFubmVscy4gMCBpcyBkdW1teSAqLwotCS8vIEZJWE1FOiByZW1lYmVyIHRvIGRlZmF1bHQgdG8gYSBiYXNpYyBjaGFubmVsIHBsYW4gZGVwZW5kaW5nIG9mIHRoZSBQSFkgdHlwZQorCS8vIEZJWE1FOiByZW1lbWJlciB0byBkZWZhdWx0IHRvIGEgYmFzaWMgY2hhbm5lbCBwbGFuIGRlcGVuZGluZyBvZiB0aGUgUEhZIHR5cGUKICNpZmRlZiBFTkFCTEVfRE9UMTFECiAJdm9pZCogcERvdDExZEluZm87CiAJYm9vbCBiR2xvYmFsRG9tYWluOwpAQCAtMjEyMSw3ICsyMTIxLDcgQEAKIAkgKiBub3Qgc2V0LiBBcyBzb21lIGNhcmRzIG1heSBoYXZlIGRpZmZlcmVudCBIVyBxdWV1ZXMgdGhhdAogCSAqIG9uZSBtaWdodCB3YW50IHRvIHVzZSBmb3IgZGF0YSBhbmQgbWFuYWdlbWVudCBmcmFtZXMKIAkgKiB0aGUgb3B0aW9uIHRvIGhhdmUgdHdvIGNhbGxiYWNrcyBtaWdodCBiZSB1c2VmdWwuCi0JICogVGhpcyBmdWNudGlvbiBjYW4ndCBzbGVlcC4KKwkgKiBUaGlzIGZ1bmN0aW9uIGNhbid0IHNsZWVwLgogCSAqLwogCWludCAoKnNvZnRtYWNfaGFyZF9zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlODAyMTEpOwpAQCAtMjE2MCw5ICsyMTYwLDkgQEAKIAkgKiBpdCBpcyBjYWxsZWQgaW4gYSB3b3JrX3F1ZXVlIHdoZW4gc3dpdGhjaW5nIHRvIGFkLWhvYyBtb2RlCiAJICogb3IgaW4gYmVoYWxmIG9mIGl3bGlzdCBzY2FuIHdoZW4gdGhlIGNhcmQgaXMgYXNzb2NpYXRlZAogCSAqIGFuZCByb290IHVzZXIgYXNrIGZvciBhIHNjYW4uCi0JICogdGhlIGZ1Y250aW9uIHN0b3Bfc2NhbiBzaG91bGQgc3RvcCBib3RoIHRoZSBzeW5jcm8gYW5kCisJICogdGhlIGZ1bmN0aW9uIHN0b3Bfc2NhbiBzaG91bGQgc3RvcCBib3RoIHRoZSBzeW5jcm8gYW5kCiAJICogYmFja2dyb3VuZCBzY2FubmluZyBhbmQgY2FuIHNsZWVwLgotCSAqIFRoZSBmdWNudGlvbiBzdGFydF9zY2FuIHNob3VsZCBpbml0aWF0ZSB0aGUgYmFja2dyb3VuZAorCSAqIFRoZSBmdW5jdGlvbiBzdGFydF9zY2FuIHNob3VsZCBpbml0aWF0ZSB0aGUgYmFja2dyb3VuZAogCSAqIHNjYW5uaW5nIGFuZCBjYW4ndCBzbGVlcC4KIAkgKi8KIAl2b2lkICgqc2Nhbl9zeW5jcm8pKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlODAyMTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggYWRkMDE1ZS4uZWQ1YTM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0xNDI2LDcgKzE0MjYsNyBAQAogc3RhdGljIHU4IHFvc19vdWlbUU9TX09VSV9MRU5dID0geyAweDAwLCAweDUwLCAweEYyIH07CiAKIC8qCi0qIE1ha2UgdGhlciBzdHJ1Y3R1cmUgd2UgcmVhZCBmcm9tIHRoZSBiZWFjb24gcGFja2V0IGhhcworKiBNYWtlIHRoZSBzdHJ1Y3R1cmUgd2UgcmVhZCBmcm9tIHRoZSBiZWFjb24gcGFja2V0IHRvIGhhdmUKICogdGhlIHJpZ2h0IHZhbHVlcwogKi8KIHN0YXRpYyBpbnQgaWVlZTgwMjExX3ZlcmlmeV9xb3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggZjY5MjJkNC4uN2Q0Y2JhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMjAyMyw3ICsyMDIzLDcgQEAKIAkJCQkJCQlyZXR1cm4gMTsKIAkJCQkJCX0KIAkJCQkJCWVsc2UKLQkJCQkJCXsJLy9maWxsaW5nIHRoZSBQZWVySFRDYXAuIC8vbWF5YmUgbm90IG5lY2Nlc2FyeSBhcyB3ZSBjYW4gZ2V0IGl0cyBpbmZvIGZyb20gY3VycmVudF9uZXR3b3JrLgorCQkJCQkJewkvL2ZpbGxpbmcgdGhlIFBlZXJIVENhcC4gLy9tYXliZSBub3QgbmVjZXNzYXJ5IGFzIHdlIGNhbiBnZXQgaXRzIGluZm8gZnJvbSBjdXJyZW50X25ldHdvcmsuCiAJCQkJCQkJbWVtY3B5KGllZWUtPnBIVEluZm8tPlBlZXJIVENhcEJ1ZiwgbmV0d29yay0+YnNzaHQuYmRIVENhcEJ1ZiwgbmV0d29yay0+YnNzaHQuYmRIVENhcExlbik7CiAJCQkJCQkJbWVtY3B5KGllZWUtPnBIVEluZm8tPlBlZXJIVEluZm9CdWYsIG5ldHdvcmstPmJzc2h0LmJkSFRJbmZvQnVmLCBuZXR3b3JrLT5ic3NodC5iZEhUSW5mb0xlbik7CiAJCQkJCQl9CkBAIC0yMTYzLDcgKzIxNjMsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBmb2xsb3dpbmcgYXJlIGZvciBhIHNpbXBsaWVyIFRYIHF1ZXVlIG1hbmFnZW1lbnQuCisvKiBmb2xsb3dpbmcgYXJlIGZvciBhIHNpbXBsZXIgVFggcXVldWUgbWFuYWdlbWVudC4KICAqIEluc3RlYWQgb2YgdXNpbmcgbmV0aWZfW3N0b3Avd2FrZV1fcXVldWUgdGhlIGRyaXZlcgogICogd2lsbCB1c2VzIHRoZXNlIHR3byBmdW5jdGlvbiAocGx1cyBhIHJlc2V0IG9uZSksIHRoYXQKICAqIHdpbGwgaW50ZXJuYWxseSB1c2VzIHRoZSBrZXJuZWwgbmV0aWZfKiBhbmQgdGFrZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hULmgKaW5kZXggZjk2ODgxNy4uNTZhMTIwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hULmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hULmgKQEAgLTY0LDcgKzY0LDcgQEAKIH1IVF9DSEFOTkVMX1dJRFRILCAqUEhUX0NIQU5ORUxfV0lEVEg7CiAKIC8vCi0vLyBSZXByZXNlbnQgRXh0ZW50aW9uIENoYW5uZWwgT2Zmc2V0IGluIEhUIENhcGFiaWxpdGllcworLy8gUmVwcmVzZW50IEV4dGVuc2lvbiBDaGFubmVsIE9mZnNldCBpbiBIVCBDYXBhYmlsaXRpZXMKIC8vIFRoaXMgaXMgYXZhaWxhYmxlIG9ubHkgaW4gNDBNaHogbW9kZS4KIC8vCiB0eXBlZGVmIGVudW0gX0hUX0VYVENITkxfT0ZGU0VUewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCmluZGV4IGEyYTRmZTkuLmY3YTlkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogLyoqCiAqIEZ1bmN0aW9uOglIVElPVEFjdElzRGlzYWJsZU1DUzE1CiAqCi0qIE92ZXJ2aWV3OglDaGVjayB3aGV0aGVyIGRyaXZlciBzaG91bGQgZGVjbGFyZSBjYXBhYmlsaXR5IG9mIHJlY2V2aW5nIE1DUzE1CisqIE92ZXJ2aWV3OglDaGVjayB3aGV0aGVyIGRyaXZlciBzaG91bGQgZGVjbGFyZSBjYXBhYmlsaXR5IG9mIHJlY2VpdmluZyBNQ1MxNQogKgogKiBJbnB1dDoKICoJCQlQQURBUFRFUgkJQWRhcHRlciwKQEAgLTQ5Niw3ICs0OTYsNyBAQAogLyoqCiAqIEZ1bmN0aW9uOglIVElPVEFjdElzRGlzYWJsZU1DU1R3b1NwYXRpYWxTdHJlYW0KICoKLSogT3ZlcnZpZXc6CUNoZWNrIHdoZXRoZXIgZHJpdmVyIHNob3VsZCBkZWNsYXJlIGNhcGFiaWxpdHkgb2YgcmVjZXZpbmcgQWxsIDIgc3MgcGFja2V0cworKiBPdmVydmlldzoJQ2hlY2sgd2hldGhlciBkcml2ZXIgc2hvdWxkIGRlY2xhcmUgY2FwYWJpbGl0eSBvZiByZWNlaXZpbmcgQWxsIDIgc3MgcGFja2V0cwogKgogKiBJbnB1dDoKICoJCQlQQURBUFRFUgkJQWRhcHRlciwKQEAgLTE2ODEsNyArMTY4MSw3IEBACiAJLy9pZiBpbiBoYWxmIE4gbW9kZSwgc2V0IHRvIDIwTSBiYW5kd2lkdGggcGxlYXNlIDA5LjA4LjIwMDggV0IuCiAJaWYgKEJhbmR3aWR0aD09SFRfQ0hBTk5FTF9XSURUSF8yMF80MCAmJiAoIWllZWUtPkdldEhhbGZObW9kZVN1cHBvcnRCeUFQc0hhbmRsZXIoaWVlZSkpKQogCSB7Ci0JIAkJLy8gSGFuZGxlIElsbGVnYWwgZXh0ZW50aW9uIGNoYW5uZWwgb2Zmc2V0ISEKKwkgCQkvLyBIYW5kbGUgSWxsZWdhbCBleHRlbnNpb24gY2hhbm5lbCBvZmZzZXQhIQogCQlpZihpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbDwyICYmIE9mZnNldD09SFRfRVhUQ0hOTF9PRkZTRVRfTE9XRVIpCiAJCQlPZmZzZXQgPSBIVF9FWFRDSE5MX09GRlNFVF9OT19FWFQ7CiAJCWlmKE9mZnNldD09SFRfRVhUQ0hOTF9PRkZTRVRfVVBQRVIgfHwgT2Zmc2V0PT1IVF9FWFRDSE5MX09GRlNFVF9MT1dFUikgewpAQCAtMTY5OCw3ICsxNjk4LDcgQEAKIAogCXBIVEluZm8tPmJTd0J3SW5Qcm9ncmVzcyA9IHRydWU7CiAKLQkvLyBUT0RPOiAyMDA3LjcuMTMgYnkgRW1pbHkgV2FpdCAyMDAwbXMgIGluIG9yZGVyIHRvIGdhcmFudGVlIHRoYXQgc3dpdGNoaW5nCisJLy8gVE9ETzogMjAwNy43LjEzIGJ5IEVtaWx5IFdhaXQgMjAwMG1zICBpbiBvcmRlciB0byBndWFyYW50ZWUgdGhhdCBzd2l0Y2hpbmcKIAkvLyAgIGJhbmR3aWR0aCBpcyBleGVjdXRlZCBhZnRlciBzY2FuIGlzIGZpbmlzaGVkLiBJdCBpcyBhIHRlbXBvcmFsIHNvbHV0aW9uCiAJLy8gICBiZWNhdXNlIHNvZnR3YXJlIHNob3VsZCBnYW5yYW50ZWUgdGhlIGxhc3Qgb3BlcmF0aW9uIG9mIHN3aXRjaGluZyBiYW5kd2lkdGgKIAkvLyAgIGlzIGV4ZWN1dGVkIHByb3BlcmxseS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UUy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKaW5kZXggYmFhYWMyMS4uZTdlMjZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAl1MTYJCQkJUnhUaW1lb3V0SW5kaWNhdGVTZXE7CiAJc3RydWN0IGxpc3RfaGVhZAkJUnhQZW5kaW5nUGt0TGlzdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJUnhQa3RQZW5kaW5nVGltZXI7Ci0JQkFfUkVDT1JECQkJUnhBZG1pdHRlZEJBUmVjb3JkOwkgLy8gRm9yIEJBIFJlY2VwaWVudAorCUJBX1JFQ09SRAkJCVJ4QWRtaXR0ZWRCQVJlY29yZDsJIC8vIEZvciBCQSBSZWNpcGllbnQKIAl1MTYJCQkJUnhMYXN0U2VxTnVtOwogCXU4CQkJCVJ4TGFzdEZyYWdOdW07CiAJdTgJCQkJbnVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCmluZGV4IDI5ZWVjZjAuLmFkNjg3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCVJlc2V0VHNDb21tb25JbmZvKCZwVFMtPlRzQ29tbW9uSW5mbyk7CiAJcFRTLT5SeEluZGljYXRlU2VxID0gMHhmZmZmOyAvLyBUaGlzIGluZGljYXRlIHRoZSBSeEluZGljYXRlU2VxIGlzIG5vdCB1c2VkIG5vdyEhCiAJcFRTLT5SeFRpbWVvdXRJbmRpY2F0ZVNlcSA9IDB4ZmZmZjsgLy8gVGhpcyBpbmRpY2F0ZSB0aGUgUnhUaW1lb3V0SW5kaWNhdGVTZXEgaXMgbm90IHVzZWQgbm93ISEKLQlSZXNldEJhRW50cnkoJnBUUy0+UnhBZG1pdHRlZEJBUmVjb3JkKTsJICAvLyBGb3IgQkEgUmVjZXBpZW50CisJUmVzZXRCYUVudHJ5KCZwVFMtPlJ4QWRtaXR0ZWRCQVJlY29yZCk7CSAgLy8gRm9yIEJBIFJlY2lwaWVudAogfQogCiB2b2lkIFRTSW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jCmluZGV4IGRmYTRlMTEuLjllNzgyOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuYwpAQCAtMjAzMiwxMyArMjAzMiwxMyBAQAogCXsKIAkJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgogCQkJcmVnQndPcE1vZGUgfD0gQldfT1BNT0RFXzIwTUhaOwotCQkgICAgICAgLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2FzdWUgd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcworCQkgICAgICAgLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2F1c2Ugd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwogCQkJd3JpdGVfbmljX2J5dGUocHJpdiwgQldfT1BNT0RFLCByZWdCd09wTW9kZSk7CiAJCQlicmVhazsKIAogCQljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA6CiAJCQlyZWdCd09wTW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOwotICAgICAgICAJCS8vIDIwMDcvMDIvMDcgTWFyayBieSBFbWlseSBiZWNhc3VlIHdlIGhhdmUgbm90IHZlcmlmeSB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgd29ya3MKKyAgICAgICAgCQkvLyAyMDA3LzAyLzA3IE1hcmsgYnkgRW1pbHkgYmVjYXVzZSB3ZSBoYXZlIG5vdCB2ZXJpZnkgd2hldGhlciB0aGlzIHJlZ2lzdGVyIHdvcmtzCiAJCQl3cml0ZV9uaWNfYnl0ZShwcml2LCBCV19PUE1PREUsIHJlZ0J3T3BNb2RlKTsKIAkJCWJyZWFrOwogCkBAIC0yMTE2LDcgKzIxMTYsNyBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKmZ1bmN0aW9uOiAgVGhpcyBmdW5jdGlvbiBzY2hlZHVsZXMgYmFuZHdpdGggc3dpdGNoIHdvcmsuCisgKmZ1bmN0aW9uOiAgVGhpcyBmdW5jdGlvbiBzY2hlZHVsZXMgYmFuZHdpZHRoIHN3aXRjaCB3b3JrLgogICogICBpbnB1dDogIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYKICAqICAgCSAgICAgSFRfQ0hBTk5FTF9XSURUSAlCYW5kd2lkdGggIC8vMjBNIG9yIDQwTQogICogICAJICAgICBIVF9FWFRDSE5MX09GRlNFVCBPZmZzZXQgCSAgIC8vVXBwZXIsIExvd2VyLCBvciBEb24ndCBjYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnCmluZGV4IDI4OTY5MTkuLjNmMDU1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIFJUTDgxOTJVCiAJdHJpc3RhdGUgIlJlYWxUZWsgUlRMODE5MlUgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTiAmJiBVU0IKKwlkZXBlbmRzIG9uIG0KIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgogCXNlbGVjdCBDUllQVE8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IGMwYjg0NGQuLmU3MTZmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMTk2NSw3ICsxOTY1LDcgQEAKIAl1MTYgcHJldl9zZXFfY3RsOyAgICAgICAvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLwogCiAJLyogbWFwIG9mIGFsbG93ZWQgY2hhbm5lbHMuIDAgaXMgZHVtbXkgKi8KLQkvLyBGSVhNRTogcmVtZWJlciB0byBkZWZhdWx0IHRvIGEgYmFzaWMgY2hhbm5lbCBwbGFuIGRlcGVuZGluZyBvZiB0aGUgUEhZIHR5cGUKKwkvLyBGSVhNRTogcmVtZW1iZXIgdG8gZGVmYXVsdCB0byBhIGJhc2ljIGNoYW5uZWwgcGxhbiBkZXBlbmRpbmcgb2YgdGhlIFBIWSB0eXBlCiAJdm9pZCogcERvdDExZEluZm87CiAJYm9vbCBiR2xvYmFsRG9tYWluOwogCWludCByYXRlOyAgICAgICAvKiBjdXJyZW50IHJhdGUgKi8KQEAgLTIxMTksNyArMjExOSw3IEBACiAJICogbm90IHNldC4gQXMgc29tZSBjYXJkcyBtYXkgaGF2ZSBkaWZmZXJlbnQgSFcgcXVldWVzIHRoYXQKIAkgKiBvbmUgbWlnaHQgd2FudCB0byB1c2UgZm9yIGRhdGEgYW5kIG1hbmFnZW1lbnQgZnJhbWVzCiAJICogdGhlIG9wdGlvbiB0byBoYXZlIHR3byBjYWxsYmFja3MgbWlnaHQgYmUgdXNlZnVsLgotCSAqIFRoaXMgZnVjbnRpb24gY2FuJ3Qgc2xlZXAuCisJICogVGhpcyBmdW5jdGlvbiBjYW4ndCBzbGVlcC4KIAkgKi8KIAlpbnQgKCpzb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTIxNTgsOSArMjE1OCw5IEBACiAJICogaXQgaXMgY2FsbGVkIGluIGEgd29ya19xdWV1ZSB3aGVuIHN3aXRoY2luZyB0byBhZC1ob2MgbW9kZQogCSAqIG9yIGluIGJlaGFsZiBvZiBpd2xpc3Qgc2NhbiB3aGVuIHRoZSBjYXJkIGlzIGFzc29jaWF0ZWQKIAkgKiBhbmQgcm9vdCB1c2VyIGFzayBmb3IgYSBzY2FuLgotCSAqIHRoZSBmdWNudGlvbiBzdG9wX3NjYW4gc2hvdWxkIHN0b3AgYm90aCB0aGUgc3luY3JvIGFuZAorCSAqIHRoZSBmdW5jdGlvbiBzdG9wX3NjYW4gc2hvdWxkIHN0b3AgYm90aCB0aGUgc3luY3JvIGFuZAogCSAqIGJhY2tncm91bmQgc2Nhbm5pbmcgYW5kIGNhbiBzbGVlcC4KLQkgKiBUaGUgZnVjbnRpb24gc3RhcnRfc2NhbiBzaG91bGQgaW5pdGlhdGUgdGhlIGJhY2tncm91bmQKKwkgKiBUaGUgZnVuY3Rpb24gc3RhcnRfc2NhbiBzaG91bGQgaW5pdGlhdGUgdGhlIGJhY2tncm91bmQKIAkgKiBzY2FubmluZyBhbmQgY2FuJ3Qgc2xlZXAuCiAJICovCiAJdm9pZCAoKnNjYW5fc3luY3JvKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDQ5OGI1MjAuLmE0MTQzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMTM5OSw3ICsxMzk5LDcgQEAKIHN0YXRpYyB1OCBxb3Nfb3VpW1FPU19PVUlfTEVOXSA9IHsgMHgwMCwgMHg1MCwgMHhGMiB9OwogCiAvKgotKiBNYWtlIHRoZXIgc3RydWN0dXJlIHdlIHJlYWQgZnJvbSB0aGUgYmVhY29uIHBhY2tldCBoYXMKKyogTWFrZSB0aGUgc3RydWN0dXJlIHdlIHJlYWQgZnJvbSB0aGUgYmVhY29uIHBhY2tldCB0byBoYXZlCiAqIHRoZSByaWdodCB2YWx1ZXMKICovCiBzdGF0aWMgaW50IGllZWU4MDIxMV92ZXJpZnlfcW9zX2luZm8oc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDQ5OTJkNjMuLjRlYzBhNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTE5NzMsNyArMTk3Myw3IEBACiAJCQkJCQkJcmV0dXJuIDE7CiAJCQkJCQl9CiAJCQkJCQllbHNlCi0JCQkJCQl7CS8vZmlsbGluZyB0aGUgUGVlckhUQ2FwLiAvL21heWJlIG5vdCBuZWNjZXNhcnkgYXMgd2UgY2FuIGdldCBpdHMgaW5mbyBmcm9tIGN1cnJlbnRfbmV0d29yay4KKwkJCQkJCXsJLy9maWxsaW5nIHRoZSBQZWVySFRDYXAuIC8vbWF5YmUgbm90IG5lY2Vzc2FyeSBhcyB3ZSBjYW4gZ2V0IGl0cyBpbmZvIGZyb20gY3VycmVudF9uZXR3b3JrLgogCQkJCQkJCW1lbWNweShpZWVlLT5wSFRJbmZvLT5QZWVySFRDYXBCdWYsIG5ldHdvcmstPmJzc2h0LmJkSFRDYXBCdWYsIG5ldHdvcmstPmJzc2h0LmJkSFRDYXBMZW4pOwogCQkJCQkJCW1lbWNweShpZWVlLT5wSFRJbmZvLT5QZWVySFRJbmZvQnVmLCBuZXR3b3JrLT5ic3NodC5iZEhUSW5mb0J1ZiwgbmV0d29yay0+YnNzaHQuYmRIVEluZm9MZW4pOwogCQkJCQkJfQpAQCAtMjExMyw3ICsyMTEzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogZm9sbG93aW5nIGFyZSBmb3IgYSBzaW1wbGllciBUWCBxdWV1ZSBtYW5hZ2VtZW50LgorLyogZm9sbG93aW5nIGFyZSBmb3IgYSBzaW1wbGVyIFRYIHF1ZXVlIG1hbmFnZW1lbnQuCiAgKiBJbnN0ZWFkIG9mIHVzaW5nIG5ldGlmX1tzdG9wL3dha2VdX3F1ZXVlIHRoZSBkcml2ZXIKICAqIHdpbGwgdXNlcyB0aGVzZSB0d28gZnVuY3Rpb24gKHBsdXMgYSByZXNldCBvbmUpLCB0aGF0CiAgKiB3aWxsIGludGVybmFsbHkgdXNlcyB0aGUga2VybmVsIG5ldGlmXyogYW5kIHRha2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCmluZGV4IGNkZTYwM2YuLjBiMWExZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCkBAIC02NCw3ICs2NCw3IEBACiB9SFRfQ0hBTk5FTF9XSURUSCwgKlBIVF9DSEFOTkVMX1dJRFRIOwogCiAvLwotLy8gUmVwcmVzZW50IEV4dGVudGlvbiBDaGFubmVsIE9mZnNldCBpbiBIVCBDYXBhYmlsaXRpZXMKKy8vIFJlcHJlc2VudCBFeHRlbnNpb24gQ2hhbm5lbCBPZmZzZXQgaW4gSFQgQ2FwYWJpbGl0aWVzCiAvLyBUaGlzIGlzIGF2YWlsYWJsZSBvbmx5IGluIDQwTWh6IG1vZGUuCiAvLwogdHlwZWRlZiBlbnVtIF9IVF9FWFRDSE5MX09GRlNFVHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCA1MGY0ZjU5Li5lODhhODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC00MjMsNyArNDIzLDcgQEAKIC8qKgogKiBGdW5jdGlvbjoJSFRJT1RBY3RJc0Rpc2FibGVNQ1MxNQogKgotKiBPdmVydmlldzoJQ2hlY2sgd2hldGhlciBkcml2ZXIgc2hvdWxkIGRlY2xhcmUgY2FwYWJpbGl0eSBvZiByZWNldmluZyBNQ1MxNQorKiBPdmVydmlldzoJQ2hlY2sgd2hldGhlciBkcml2ZXIgc2hvdWxkIGRlY2xhcmUgY2FwYWJpbGl0eSBvZiByZWNlaXZpbmcgTUNTMTUKICoKICogSW5wdXQ6CiAqCQkJUEFEQVBURVIJCUFkYXB0ZXIsCkBAIC00NjAsNyArNDYwLDcgQEAKIC8qKgogKiBGdW5jdGlvbjoJSFRJT1RBY3RJc0Rpc2FibGVNQ1NUd29TcGF0aWFsU3RyZWFtCiAqCi0qIE92ZXJ2aWV3OglDaGVjayB3aGV0aGVyIGRyaXZlciBzaG91bGQgZGVjbGFyZSBjYXBhYmlsaXR5IG9mIHJlY2V2aW5nIEFsbCAyIHNzIHBhY2tldHMKKyogT3ZlcnZpZXc6CUNoZWNrIHdoZXRoZXIgZHJpdmVyIHNob3VsZCBkZWNsYXJlIGNhcGFiaWxpdHkgb2YgcmVjZWl2aW5nIEFsbCAyIHNzIHBhY2tldHMKICoKICogSW5wdXQ6CiAqCQkJUEFEQVBURVIJCUFkYXB0ZXIsCkBAIC0xNDA5LDcgKzE0MDksNyBAQAogCS8vaWYgaW4gaGFsZiBOIG1vZGUsIHNldCB0byAyME0gYmFuZHdpZHRoIHBsZWFzZSAwOS4wOC4yMDA4IFdCLgogCWlmKEJhbmR3aWR0aD09SFRfQ0hBTk5FTF9XSURUSF8yMF80MCAmJiAoIWllZWUtPkdldEhhbGZObW9kZVN1cHBvcnRCeUFQc0hhbmRsZXIoaWVlZS0+ZGV2KSkpCiAJIHsKLQkJCS8vIEhhbmRsZSBJbGxlZ2FsIGV4dGVudGlvbiBjaGFubmVsIG9mZnNldCEhCisJCQkvLyBIYW5kbGUgSWxsZWdhbCBleHRlbnNpb24gY2hhbm5lbCBvZmZzZXQhIQogCQlpZihpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbDwyICYmIE9mZnNldD09SFRfRVhUQ0hOTF9PRkZTRVRfTE9XRVIpCiAJCQlPZmZzZXQgPSBIVF9FWFRDSE5MX09GRlNFVF9OT19FWFQ7CiAJCWlmKE9mZnNldD09SFRfRVhUQ0hOTF9PRkZTRVRfVVBQRVIgfHwgT2Zmc2V0PT1IVF9FWFRDSE5MX09GRlNFVF9MT1dFUikgewpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKIAogCXBIVEluZm8tPmJTd0J3SW5Qcm9ncmVzcyA9IHRydWU7CiAKLQkvLyBUT0RPOiAyMDA3LjcuMTMgYnkgRW1pbHkgV2FpdCAyMDAwbXMgIGluIG9yZGVyIHRvIGdhcmFudGVlIHRoYXQgc3dpdGNoaW5nCisJLy8gVE9ETzogMjAwNy43LjEzIGJ5IEVtaWx5IFdhaXQgMjAwMG1zICBpbiBvcmRlciB0byBndWFyYW50ZWUgdGhhdCBzd2l0Y2hpbmcKIAkvLyAgIGJhbmR3aWR0aCBpcyBleGVjdXRlZCBhZnRlciBzY2FuIGlzIGZpbmlzaGVkLiBJdCBpcyBhIHRlbXBvcmFsIHNvbHV0aW9uCiAJLy8gICBiZWNhdXNlIHNvZnR3YXJlIHNob3VsZCBnYW5yYW50ZWUgdGhlIGxhc3Qgb3BlcmF0aW9uIG9mIHN3aXRjaGluZyBiYW5kd2lkdGgKIAkvLyAgIGlzIGV4ZWN1dGVkIHByb3BlcmxseS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UUy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKaW5kZXggYmFhYWMyMS4uZTdlMjZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAl1MTYJCQkJUnhUaW1lb3V0SW5kaWNhdGVTZXE7CiAJc3RydWN0IGxpc3RfaGVhZAkJUnhQZW5kaW5nUGt0TGlzdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJUnhQa3RQZW5kaW5nVGltZXI7Ci0JQkFfUkVDT1JECQkJUnhBZG1pdHRlZEJBUmVjb3JkOwkgLy8gRm9yIEJBIFJlY2VwaWVudAorCUJBX1JFQ09SRAkJCVJ4QWRtaXR0ZWRCQVJlY29yZDsJIC8vIEZvciBCQSBSZWNpcGllbnQKIAl1MTYJCQkJUnhMYXN0U2VxTnVtOwogCXU4CQkJCVJ4TGFzdEZyYWdOdW07CiAJdTgJCQkJbnVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCmluZGV4IGMzZmNhYWUuLjk1N2NlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCVJlc2V0VHNDb21tb25JbmZvKCZwVFMtPlRzQ29tbW9uSW5mbyk7CiAJcFRTLT5SeEluZGljYXRlU2VxID0gMHhmZmZmOyAvLyBUaGlzIGluZGljYXRlIHRoZSBSeEluZGljYXRlU2VxIGlzIG5vdCB1c2VkIG5vdyEhCiAJcFRTLT5SeFRpbWVvdXRJbmRpY2F0ZVNlcSA9IDB4ZmZmZjsgLy8gVGhpcyBpbmRpY2F0ZSB0aGUgUnhUaW1lb3V0SW5kaWNhdGVTZXEgaXMgbm90IHVzZWQgbm93ISEKLQlSZXNldEJhRW50cnkoJnBUUy0+UnhBZG1pdHRlZEJBUmVjb3JkKTsJICAvLyBGb3IgQkEgUmVjZXBpZW50CisJUmVzZXRCYUVudHJ5KCZwVFMtPlJ4QWRtaXR0ZWRCQVJlY29yZCk7CSAgLy8gRm9yIEJBIFJlY2lwaWVudAogfQogCiB2b2lkIFRTSW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvc2NhdHRlcndhbGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvc2NhdHRlcndhbGsuYwppbmRleCA0OWY0MDFmLi4zNTQzYTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3NjYXR0ZXJ3YWxrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9zY2F0dGVyd2Fsay5jCkBAIC03MSw3ICs3MSw3IEBACiAJCQkJIHVuc2lnbmVkIGludCBtb3JlKQogewogCS8qIHdhbGstPmRhdGEgbWF5IGJlIHBvaW50aW5nIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBuZXh0IHBhZ2U7Ci0JICAgaG93ZXZlciwgd2Uga25vdyB3ZSB0cmFuc2ZlcmVkIGF0IGxlYXN0IG9uZSBieXRlLiAgU28sCisJICAgaG93ZXZlciwgd2Uga25vdyB3ZSB0cmFuc2ZlcnJlZCBhdCBsZWFzdCBvbmUgYnl0ZS4gIFNvLAogCSAgIHdhbGstPmRhdGEgLSAxIHdpbGwgYmUgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlIG1hcHBlZCBwYWdlLiAqLwogCiAJaWYgKG91dCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9jb3JlLmMKaW5kZXggZGE2MTJlNi4uZTgxYjhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9jb3JlLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogLyogdTggcmVhZF9waHlfY2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkcik7ICovCiAvKiB1OCByZWFkX3BoeV9vZmRtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkcik7ICovCiAvKiB0aGlzIG1pZ2h0IHN0aWxsIGNhbGxlZCBpbiB3aGF0IHdhcyB0aGUgUEhZIHJ0bDgxODUvcnRsODE5MiBjb21tb24gY29kZQotICogcGxhbnMgYXJlIHRvIHBvc3NpYmlsdHkgdHVybiBpdCBhZ2FpbiBpbiBvbmUgY29tbW9uIGNvZGUuLi4KKyAqIHBsYW5zIGFyZSB0byBwb3NzaWJpbGl0eSB0dXJuIGl0IGFnYWluIGluIG9uZSBjb21tb24gY29kZS4uLgogICovCiBpbmxpbmUgdm9pZCBmb3JjZV9wY2lfcG9zdGluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTM3OCw3ICsxMzc4LDcgQEAKIAkJLy90eF9hZ2dfZGVzYy0+TElOSVAgPSAwOwogCQkvL3R4X2FnZ19kZXNjLT5DbWRJbml0ID0gMTsKIAkJdHhfYWdnX2Rlc2MtPk9mZnNldCA9ICBzaXplb2YodHhfZndpbmZvXzgxOXhfdXNiKSArIDg7Ci0JCS8qIGFscmVhZHkgcmF3IGRhdGEsIG5lZWQgbm90IHRvIHN1YnN0cmFjdCBoZWFkZXIgbGVuZ3RoICovCisJCS8qIGFscmVhZHkgcmF3IGRhdGEsIG5lZWQgbm90IHRvIHN1YnRyYWN0IGhlYWRlciBsZW5ndGggKi8KIAkJdHhfYWdnX2Rlc2MtPlBrdFNpemUgPSBza2ItPmxlbiAmIDB4ZmZmZjsKIAogCQkvKkRXT1JEIDEqLwpAQCAtMjg4OCw3ICsyODg4LDcgQEAKIAlSVF9UUkFDRShDT01QX0VQUk9NLCAiPD09PT09PT09PT09JXMoKSwgZXByb210eXBlOiVkXG4iLCBfX0ZVTkNUSU9OX18sIHByaXYtPmVwcm9tdHlwZSk7CiB9CiAKLS8vdXNlZCB0byBzd2FwIGVuZGlhbi4gYXMgbnRvaGwgJiBodG9ubCBhcmUgbm90IG5lY2Nlc3NhcnkgdG8gc3dhcCBlbmRpYW4sIHNvIHVzZSB0aGlzIGluc3RlYWQuCisvL3VzZWQgdG8gc3dhcCBlbmRpYW4uIGFzIG50b2hsICYgaHRvbmwgYXJlIG5vdCBuZWNlc3NhcnkgdG8gc3dhcCBlbmRpYW4sIHNvIHVzZSB0aGlzIGluc3RlYWQuCiBzdGF0aWMgaW5saW5lIHUxNiBlbmRpYW5fc3dhcCh1MTYqIGRhdGEpCiB7CiAJdTE2IHRtcCA9ICpkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9IVFR5cGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfSFRUeXBlLmgKaW5kZXggMDFmNThiOS4uMmFjNDIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9IVFR5cGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX0hUVHlwZS5oCkBAIC02NSw3ICs2NSw3IEBACiB9SFRfQ0hBTk5FTF9XSURUSCwgKlBIVF9DSEFOTkVMX1dJRFRIOwogCiAvLwotLy8gUmVwcmVzZW50IEV4dGVudGlvbiBDaGFubmVsIE9mZnNldCBpbiBIVCBDYXBhYmlsaXRpZXMKKy8vIFJlcHJlc2VudCBFeHRlbnNpb24gQ2hhbm5lbCBPZmZzZXQgaW4gSFQgQ2FwYWJpbGl0aWVzCiAvLyBUaGlzIGlzIGF2YWlsYWJsZSBvbmx5IGluIDQwTWh6IG1vZGUuCiAvLwogdHlwZWRlZiBlbnVtIF9IVF9FWFRDSE5MX09GRlNFVHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX3BoeS5jCmluZGV4IDQxNjg0ZTguLmM0NTg2YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfcGh5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9waHkuYwpAQCAtMTUzMSwxMyArMTUzMSwxMyBAQAogCXsKIAkJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgogCQkJcmVnQndPcE1vZGUgfD0gQldfT1BNT0RFXzIwTUhaOwotCQkgICAgICAgLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2FzdWUgd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcworCQkgICAgICAgLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2F1c2Ugd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwogCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBCV19PUE1PREUsIHJlZ0J3T3BNb2RlKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKIAkJCXJlZ0J3T3BNb2RlICY9IH5CV19PUE1PREVfMjBNSFo7Ci0JCQkvLyAyMDA3LzAyLzA3IE1hcmsgYnkgRW1pbHkgYmVjYXN1ZSB3ZSBoYXZlIG5vdCB2ZXJpZnkgd2hldGhlciB0aGlzIHJlZ2lzdGVyIHdvcmtzCisJCQkvLyAyMDA3LzAyLzA3IE1hcmsgYnkgRW1pbHkgYmVjYXVzZSB3ZSBoYXZlIG5vdCB2ZXJpZnkgd2hldGhlciB0aGlzIHJlZ2lzdGVyIHdvcmtzCiAJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEJXX09QTU9ERSwgcmVnQndPcE1vZGUpOwogCQkJYnJlYWs7CiAKQEAgLTE2NDcsNyArMTY0Nyw3IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqZnVuY3Rpb246ICBUaGlzIGZ1bmN0aW9uIHNjaGVkdWxlcyBiYW5kd2l0aCBzd2l0Y2ggd29yay4KKyAqZnVuY3Rpb246ICBUaGlzIGZ1bmN0aW9uIHNjaGVkdWxlcyBiYW5kd2lkdGggc3dpdGNoIHdvcmsuCiAgKiAgIGlucHV0OiAgc3RydWN0IG5ldF9kZXZpY2UgKmRldgogICogICAJICAgICBIVF9DSEFOTkVMX1dJRFRICUJhbmR3aWR0aCAgLy8yME0gb3IgNDBNCiAgKiAgIAkgICAgIEhUX0VYVENITkxfT0ZGU0VUIE9mZnNldCAJICAgLy9VcHBlciwgTG93ZXIsIG9yIERvbid0IGNhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfY21kLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2NtZC5oCmluZGV4IDNhOTQ1YjUuLjJkYzc4NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfY21kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9jbWQuaApAQCAtNjU2LDcgKzY1Niw3IEBACiAvKgogICogUmVzdWx0OgogICogMHgwMDogc3VjY2VzcwotICogMHgwMTogc3VjZXNzLCBhbmQgY2hlY2sgUmVzcG9uc2UuCisgKiAweDAxOiBzdWNjZXNzLCBhbmQgY2hlY2sgUmVzcG9uc2UuCiAgKiAweDAyOiBjbWQgaWdub3JlZCBkdWUgdG8gZHVwbGljYXRlZCBzZXF1Y25lIG51bWJlcgogICogMHgwMzogY21kIGRyb3BwZWQgZHVlIHRvIGludmFsaWQgY21kIGNvZGUKICAqIDB4MDQ6IHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9sZWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbGVkLmgKaW5kZXggOTk0ZWY4Mi4uODA4NWU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9sZWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2xlZC5oCkBAIC03OCwxNCArNzgsMTQgQEAKIH07CiAKIHN0cnVjdCBsZWRfcHJpdiB7Ci0JLyogYWRkIGZvciBsZWQgY29udHJvbGwgKi8KKwkvKiBhZGQgZm9yIGxlZCBjb250cm9sICovCiAJc3RydWN0IExFRF84NzF4CQlTd0xlZDA7CiAJc3RydWN0IExFRF84NzF4CQlTd0xlZDE7CiAJZW51bSBMRURfU1RSQVRFR1lfODcxeAlMZWRTdHJhdGVneTsKIAl1OAkJCWJSZWdVc2VMZWQ7CiAJdm9pZCAoKkxlZENvbnRyb2xIYW5kbGVyKShzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJCSAgZW51bSBMRURfQ1RMX01PREUgTGVkQWN0aW9uKTsKLQkvKiBhZGQgZm9yIGxlZCBjb250cm9sbCAqLworCS8qIGFkZCBmb3IgbGVkIGNvbnRyb2wgKi8KIH07CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbWxtZS5jCmluZGV4IDk4YmE3NjAuLjg2NjU1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbWxtZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbWxtZS5jCkBAIC0xNjYzLDcgKzE2NjMsNyBAQAogCQkJICAgICAgKHN0cnVjdCBuZGlzX3dsYW5fYnNzaWRfZXggKilwZGV2X25ldHdvcmspOwogfQogCi0vKnRoZSBmdWNudGlvbiBpcyBhdCBwYXNzaXZlX2xldmVsKi8KKy8qdGhlIGZ1bmN0aW9uIGlzIGF0IHBhc3NpdmVfbGV2ZWwqLwogdm9pZCByODcxMl9qb2luYnNzX3Jlc2V0KHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJaW50IGk7CkBAIC0xNzI2LDcgKzE3MjYsNyBAQAogCXJldHVybiBwaHRwcml2LT5odF9vcHRpb247CiB9CiAKLS8qIHRoZSBmdWNudGlvbiBpcyA+IHBhc3NpdmVfbGV2ZWwgKGluIGNyaXRpY2FsX3NlY3Rpb24pICovCisvKiB0aGUgZnVuY3Rpb24gaXMgPiBwYXNzaXZlX2xldmVsIChpbiBjcml0aWNhbF9zZWN0aW9uKSAqLwogc3RhdGljIHZvaWQgdXBkYXRlX2h0X2NhcChzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGllLCB1aW50IGllX2xlbikKIHsKIAl1OCAqcCwgbWF4X2FtcGR1X3N6OwpAQCAtMTgwMyw3ICsxODAzLDcgQEAKIAl9CiB9CiAKLS8qdGhlIGZ1Y250aW9uIGlzID49IHBhc3NpdmVfbGV2ZWwqLworLyp0aGUgZnVuY3Rpb24gaXMgPj0gcGFzc2l2ZV9sZXZlbCovCiB1bnNpZ25lZCBpbnQgcjg3MTJfYWRkX2h0X2FkZHRfaW5mbyhzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJICAgICAgdTggKmluX2llLCB1OCAqb3V0X2llLAogCQkJICAgICAgdWludCBpbl9sZW4sIHVpbnQgKnBvdXRfbGVuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tbG1lLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuaAppbmRleCAyYjM1Yjc0Li4yNzk0ODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuaApAQCAtMjksNyArMjksNyBAQAogCQkJCQkJICogIHNpbmdsZS10b25lKi8KICNkZWZpbmUJV0lGSV9NUF9DVFhfQkFDS0dST1VORF9QRU5ESU5HCTB4MDAwODAwMDAgLyogcGVuZGluZyBpbiBjb250LCB0eAogCQkJCQkqIGJhY2tncm91bmQgZHVlIHRvIG91dCBvZiBza2IqLwotI2RlZmluZQlXSUZJX01QX0NUWF9DQ0tfSFcJMHgwMDEwMDAwMAkvKiBpbiBjb250aW5vdXMgdHgqLworI2RlZmluZQlXSUZJX01QX0NUWF9DQ0tfSFcJMHgwMDEwMDAwMAkvKiBpbiBjb250aW51b3VzIHR4Ki8KICNkZWZpbmUJV0lGSV9NUF9DVFhfQ0NLX0NTCTB4MDAyMDAwMDAJLyogaW4gY29udCwgdHggd2l0aCBjYXJyaWVyCiAJCQkJCQkgKiBzdXBwcmVzc2lvbiovCiAjZGVmaW5lICAgV0lGSV9NUF9MUEJLX1NUQVRFCTB4MDA0MDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXBfcGh5X3JlZ2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcF9waHlfcmVnZGVmLmgKaW5kZXggZTM4NmZiMC4uMjM1MzJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcF9waHlfcmVnZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcF9waHlfcmVnZGVmLmgKQEAgLTM4LDcgKzM4LDcgQEAKICAqIDIuIDB4ODAwLzB4OTAwLzB4QTAwLzB4QzAwLzB4RDAwLzB4RTAwCiAgKiAzLiBSRiByZWdpc3RlciAweDAwLTJFCiAgKiA0LiBCaXQgTWFzayBmb3IgQkIvUkYgcmVnaXN0ZXIKLSAqIDUuIE90aGVyIGRlZmludGlvbiBmb3IgQkIvUkYgUi9XCisgKiA1LiBPdGhlciBkZWZpbml0aW9uIGZvciBCQi9SRiBSL1cKICAqCiAgKiAxLiBQTUFDIGR1cGxpY2F0ZSByZWdpc3RlciBkdWUgdG8gY29ubmVjdGlvbjogUkZfTW9kZSwgVFJ4Uk4sIE51bU9mIEwtU1RGCiAgKiAxLiBQYWdlMSgweDEwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9oYWxpbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaGFsaW5pdC5jCmluZGV4IDBlOTQ4M2IuLjQ2Mjg3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9oYWxpbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2hhbGluaXQuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCS8qIEluaXRpYWxpemF0aW9uIGZvciBwb3dlciBvbiBzZXF1ZW5jZSwgKi8KIAkJcjg3MTJfd3JpdGU4KHBhZGFwdGVyLCBTUFMwX0NUUkwgKyAxLCAweDUzKTsKIAkJcjg3MTJfd3JpdGU4KHBhZGFwdGVyLCBTUFMwX0NUUkwsIDB4NTcpOwotCQkvKiBFbmFibGUgQUZFIE1hY3JvIEJsb2NrJ3MgQmFuZGdhcCBhZG4gRW5hYmxlIEFGRSBNYWNybworCQkvKiBFbmFibGUgQUZFIE1hY3JvIEJsb2NrJ3MgQmFuZGdhcCBhbmQgRW5hYmxlIEFGRSBNYWNybwogCQkgKiBCbG9jaydzIE1iaWFzCiAJCSAqLwogCQl2YWw4ID0gcjg3MTJfcmVhZDgocGFkYXB0ZXIsIEFGRV9NSVNDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvZGVidWcuaAppbmRleCBlMTQwOGIwLi5hYjMwNWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL2RlYnVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9kZWJ1Zy5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNkZWZpbmUgUlRTWF9TVE9SICJydHNfcHN0b3I6ICIKIAotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAjZGVmaW5lIFJUU1hfREVCVUdQKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIFJUU1hfU1RPUiB4KQogI2RlZmluZSBSVFNYX0RFQlVHUE4oeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgeCkKICNkZWZpbmUgUlRTWF9ERUJVR1BYKHguLi4pIHByaW50ayh4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jCmluZGV4IDgxMGUxNzAuLmQ4OTc5NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvbXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL21zLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmMKaW5kZXggNDUxNDQxOS4uMDI1MjVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmMKQEAgLTgyNCwxMyArODI0LDEzIEBACiAJY2hpcC0+ZnBnYV9tc19oZ19jbGsgPSBDTEtfODA7CiAJY2hpcC0+ZnBnYV9tc180Yml0X2NsayA9IENMS184MDsKIAljaGlwLT5mcGdhX21zXzFiaXRfY2xrID0gQ0xLXzQwOwotCWNoaXAtPmFzaWNfc2Rfc2RyMTA0X2NsayA9IDIwNzsKLQljaGlwLT5hc2ljX3NkX3NkcjUwX2NsayA9IDk5OwotCWNoaXAtPmFzaWNfc2RfZGRyNTBfY2xrID0gOTk7Ci0JY2hpcC0+YXNpY19zZF9oc19jbGsgPSA5OTsKLQljaGlwLT5hc2ljX21tY181Mm1fY2xrID0gOTk7Ci0JY2hpcC0+YXNpY19tc19oZ19jbGsgPSAxMTk7Ci0JY2hpcC0+YXNpY19tc180Yml0X2NsayA9IDc5OworCWNoaXAtPmFzaWNfc2Rfc2RyMTA0X2NsayA9IDIwMzsKKwljaGlwLT5hc2ljX3NkX3NkcjUwX2NsayA9IDk4OworCWNoaXAtPmFzaWNfc2RfZGRyNTBfY2xrID0gOTg7CisJY2hpcC0+YXNpY19zZF9oc19jbGsgPSA5ODsKKwljaGlwLT5hc2ljX21tY181Mm1fY2xrID0gOTg7CisJY2hpcC0+YXNpY19tc19oZ19jbGsgPSAxMTc7CisJY2hpcC0+YXNpY19tc180Yml0X2NsayA9IDc4OwogCWNoaXAtPmFzaWNfbXNfMWJpdF9jbGsgPSAzOTsKIAljaGlwLT5zc2NfZGVwdGhfc2Rfc2RyMTA0ID0gU1NDX0RFUFRIXzJNOwogCWNoaXAtPnNzY19kZXB0aF9zZF9zZHI1MCA9IFNTQ19ERVBUSF8yTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5jCmluZGV4IGY0NDNkOTcuLjRlNjA3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X2NoaXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgInJ0c3guaCIKICNpbmNsdWRlICJydHN4X3RyYW5zcG9ydC5oIgpAQCAtNjg0LDYgKzY4NSwxMSBAQAogCVJUU1hfREVCVUdQKCJkdyBpbiAweDcyNDogMHgleFxuIiwgbHZhbCk7CiAJdmFsID0gKHU4KWx2YWw7CiAJaWYgKCEodmFsICYgMHg4MCkpIHsKKwkJaWYgKHZhbCAmIDB4MDgpCisJCQljaGlwLT5sdW5fbW9kZSA9IERFRkFVTFRfU0lOR0xFOworCQllbHNlCisJCQljaGlwLT5sdW5fbW9kZSA9IFNEX01TXzJMVU47CisKIAkJaWYgKHZhbCAmIDB4MDQpIHsKIAkJCVNFVF9TRElPX0VYSVNUKGNoaXApOwogCQl9IGVsc2UgewpAQCAtNzA1LDEyICs3MTEsNiBAQAogCiAJCWNoaXAtPmFzcG1fbDBzX2wxX2VuID0gKHZhbCA+PiA1KSAmIDB4MDM7CiAKLQkJaWYgKHZhbCAmIDB4MDgpIHsKLQkJCWNoaXAtPmx1bl9tb2RlID0gREVGQVVMVF9TSU5HTEU7Ci0JCX0gZWxzZSB7Ci0JCQljaGlwLT5sdW5fbW9kZSA9IFNEX01TXzJMVU47Ci0JCX0KLQogCQl2YWwgPSAodTgpKGx2YWwgPj4gOCk7CiAKIAkJY2xrID0gKHZhbCA+PiA1KSAmIDB4MDc7CkBAIC0xMzEyLDExICsxMzEyLDExIEBACiAKICNpZmRlZiBTVVBQT1JUX09DUAogCWlmIChDSEVDS19MVU5fTU9ERShjaGlwLCBTRF9NU18yTFVOKSkgewotCQkjaWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRworI2lmZGVmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKIAkJaWYgKGNoaXAtPm9jcF9zdGF0ICYgKFNEX09DX05PVyB8IFNEX09DX0VWRVIgfCBNU19PQ19OT1cgfCBNU19PQ19FVkVSKSkgewogCQkJUlRTWF9ERUJVR1AoIk92ZXIgY3VycmVudCwgT0NQU1RBVCBpcyAweCV4XG4iLCBjaGlwLT5vY3Bfc3RhdCk7CiAJCX0KLQkJI2VuZGlmCisjZW5kaWYKIAogCQlpZiAoY2hpcC0+b2NwX3N0YXQgJiAoU0RfT0NfTk9XIHwgU0RfT0NfRVZFUikpIHsKIAkJCWlmIChjaGlwLT5jYXJkX2V4aXN0ICYgU0RfQ0FSRCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X2NoaXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmgKaW5kZXggNzEzYzVlYS4uOWY3Y2Q4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X2NoaXAuaApAQCAtMTgwLDggKzE4MCw4IEBACiAjZGVmaW5lIENVUl9FUlIgICAgICAgICAgICAgICAgIDB4NzAgICAgLyogY3VycmVudCBlcnJvciAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgREVGX0VSUiAgICAgICAgICAgICAgICAgMHg3MSAgICAvKiBzcGVjaWZpYyBjb21tYW5kIGVycm9yICAgICAgICAgICAqLwogCi0vKi0tLS0gc2Vuc2Uga2V5IEluZm9tYXRpb24gLS0tLSovCi0jZGVmaW5lIFNOU0tFWUlORk9fTEVOICAgICAgICAgIDMgICAgICAgLyogbGVuZ3RoIG9mIHNlbnNlIGtleSBpbmZvbWF0aW9uICAgKi8KKy8qLS0tLSBzZW5zZSBrZXkgSW5mb3JtYXRpb24gLS0tLSovCisjZGVmaW5lIFNOU0tFWUlORk9fTEVOICAgICAgICAgIDMgICAgICAgLyogbGVuZ3RoIG9mIHNlbnNlIGtleSBpbmZvcm1hdGlvbiAgICovCiAKICNkZWZpbmUgU0tTViAgICAgICAgICAgICAgICAgICAgMHg4MAogI2RlZmluZSBDREJfSUxMRUdBTCAgICAgICAgICAgICAweDQwCkBAIC0yMzUsMTMgKzIzNSwxMyBAQAogICAgIHVuc2lnbmVkIGNoYXIgICBzZWdfbm87CQkvKiBzZWdtZW50IE5vLiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7CQkvKiBieXRlNSA6IElMSSAgICAgICAgICAgICAgICAgICAgICAqLwogCQkJCQkJLyogYml0My0wIDogc2Vuc2Uga2V5ICAgICAgICAgICAgICAqLwotICAgIHVuc2lnbmVkIGNoYXIgICBpbmZvWzRdOwkJLyogaW5mb21hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgaW5mb1s0XTsJCS8qIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgICBhZF9zZW5zZV9sZW47CS8qIGFkZGl0aW9uYWwgc2Vuc2UgZGF0YSBsZW5ndGggICAgICovCi0gICAgdW5zaWduZWQgY2hhciAgIGNtZF9pbmZvWzRdOwkvKiBjb21tYW5kIHNwZWNpZmljIGluZm9tYXRpb24gICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgICBjbWRfaW5mb1s0XTsJLyogY29tbWFuZCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAgICAgICovCiAgICAgdW5zaWduZWQgY2hhciAgIGFzYzsJCS8qIEFTQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgdW5zaWduZWQgY2hhciAgIGFzY3E7CQkvKiBBU0NRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgICByZnU7CQkvKiBGUlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHVuc2lnbmVkIGNoYXIgICBzbnNfa2V5X2luZm9bM107CS8qIHNlbnNlIGtleSBzcGVjaWZpYyBpbmZvbWF0aW9uICAgICovCisgICAgdW5zaWduZWQgY2hhciAgIHNuc19rZXlfaW5mb1szXTsJLyogc2Vuc2Uga2V5IHNwZWNpZmljIGluZm9ybWF0aW9uICAgICovCiB9OwogCiAvKiBQQ0kgT3BlcmF0aW9uIFJlZ2lzdGVyIEFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5jCmluZGV4IDIwYzI0NjQuLjdkZTFmYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X3Njc2kuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgInJ0c3guaCIKICNpbmNsdWRlICJydHN4X3RyYW5zcG9ydC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X3Njc2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmgKaW5kZXggZmFjMTIyYy4uNjRiODQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X3Njc2kuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5oCkBAIC04NSw3ICs4NSw3IEBACiAjZGVmaW5lIENISVBfTk9STUFMTU9ERQkJMHgwMAogI2RlZmluZSBDSElQX0RFQlVHTU9ERQkJMHgwMQogCi0vKiBTRCBQYXNzIFRocm91Z2ggQ29tbWFuZCBFeHRlbnRpb24gKi8KKy8qIFNEIFBhc3MgVGhyb3VnaCBDb21tYW5kIEV4dGVuc2lvbiAqLwogI2RlZmluZSBTRF9QQVNTX1RIUlVfTU9ERQkweEQwCiAjZGVmaW5lIFNEX0VYRUNVVEVfTk9fREFUQQkweEQxCiAjZGVmaW5lIFNEX0VYRUNVVEVfUkVBRAkJMHhEMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCmluZGV4IDIxYmZhNTcuLmIxMjc3YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKQEAgLTkwOSw3ICs5MDksNyBAQAogCQlSVFNYX1dSSVRFX1JFRyhjaGlwLCBTRF9WUENMSzBfQ1RMLCBQSEFTRV9OT1RfUkVTRVQsIFBIQVNFX05PVF9SRVNFVCk7CiAJCVJUU1hfV1JJVEVfUkVHKGNoaXAsIENMS19DVEwsIENIQU5HRV9DTEssIDApOwogCX0gZWxzZSB7Ci0jaWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRworI2lmZGVmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKIAkJcnRzeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX1ZQX0NUTCwgJnZhbCk7CiAJCVJUU1hfREVCVUdQKCJTRF9WUF9DVEw6IDB4JXhcbiIsIHZhbCk7CiAJCXJ0c3hfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9EQ01QU19DVEwsICZ2YWwpOwpAQCAtOTU4LDcgKzk1OCw3IEBACiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCiBGYWlsOgotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAJcnRzeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX1ZQX0NUTCwgJnZhbCk7CiAJUlRTWF9ERUJVR1AoIlNEX1ZQX0NUTDogMHgleFxuIiwgdmFsKTsKIAlydHN4X3JlYWRfcmVnaXN0ZXIoY2hpcCwgU0RfRENNUFNfQ1RMLCAmdmFsKTsKQEAgLTE3MTksNyArMTcxOSw3IEBACiAJfQogCiBTZWFyY2hfRmluaXNoOgotCVJUU1hfREVCVUdQKCJGaW5hbCBjaG9vc2VuIHBoYXNlOiAlZFxuIiwgZmluYWxfcGhhc2UpOworCVJUU1hfREVCVUdQKCJGaW5hbCBjaG9zZW4gcGhhc2U6ICVkXG4iLCBmaW5hbF9waGFzZSk7CiAJcmV0dXJuIGZpbmFsX3BoYXNlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3RyYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3RyYWNlLmgKaW5kZXggMmM2NjhiYS4uYmM4M2I0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci90cmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvdHJhY2UuaApAQCAtODIsNyArODIsNyBAQAogI2RlZmluZSBUUkFDRV9HT1RPKGNoaXAsIGxhYmVsKQlnb3RvIGxhYmVsCiAjZW5kaWYKIAotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiBzdGF0aWMgaW5saW5lIHZvaWQgcnRzeF9kdW1wKHU4ICpidWYsIGludCBidWZfbGVuKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci94ZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci94ZC5jCmluZGV4IDdiY2Q0NjguLjlmM2FkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IveGQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3hkLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyN2M2MDguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1jb25maWcgU0FNU1VOR19MQVBUT1AKLQl0cmlzdGF0ZSAiU2Ftc3VuZyBMYXB0b3AgZHJpdmVyIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gUkZLSUxMICYmIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgWDg2Ci0JaGVscAotCSAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIGRyaXZlciBmb3IgdGhlIE4xMjggU2Ftc3VuZyBMYXB0b3AKLQkgIHByb3ZpZGluZyBjb250cm9sIG92ZXIgdGhlIFdpcmVsZXNzIExFRCBhbmQgdGhlIExDRCBiYWNrbGlnaHQKLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlCi0JICBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2Ftc3VuZy1sYXB0b3AuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3AvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3AvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNmY0MjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotb2JqLSQoQ09ORklHX1NBTVNVTkdfTEFQVE9QKQkrPSBzYW1zdW5nLWxhcHRvcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3AvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2E2ZDU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1UT0RPOgotCS0gcmV2aWV3IGZyb20gb3RoZXIgZGV2ZWxvcGVycwotCS0gZmlndXJlIG91dCBBQ1BJIHZpZGVvIGlzc3VlcwotCi1QbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9zYW1zdW5nLWxhcHRvcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTI5NDQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9zYW1zdW5nLWxhcHRvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsODQzICswLDAgQEAKLS8qCi0gKiBTYW1zdW5nIExhcHRvcCBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxMSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdraEBzdXNlLmRlKQotICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTEgTm92ZWxsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KLQotLyoKLSAqIFRoaXMgZHJpdmVyIGlzIG5lZWRlZCBiZWNhdXNlIGEgbnVtYmVyIG9mIFNhbXN1bmcgbGFwdG9wcyBkbyBub3QgaG9vawotICogdGhlaXIgY29udHJvbCBzZXR0aW5ncyB0aHJvdWdoIEFDUEkuICBTbyB3ZSBoYXZlIHRvIHBva2UgYXJvdW5kIGluIHRoZQotICogQklPUyB0byBkbyB0aGluZ3MgbGlrZSBicmlnaHRuZXNzIHZhbHVlcywgYW5kICJzcGVjaWFsIiBrZXkgY29udHJvbHMuCi0gKi8KLQotLyoKLSAqIFdlIGhhdmUgMCAtIDggYXMgdmFsaWQgYnJpZ2h0bmVzcyBsZXZlbHMuICBUaGUgc3BlY3Mgc2F5IHRoYXQgbGV2ZWwgMCBzaG91bGQKLSAqIGJlIHJlc2VydmVkIGJ5IHRoZSBCSU9TICh3aGljaCByZWFsbHkgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UpLCB3ZSB0ZWxsCi0gKiB1c2Vyc3BhY2UgdGhhdCB0aGUgdmFsdWUgaXMgMCAtIDcgYW5kIHRoZW4ganVzdCB0ZWxsIHRoZSBoYXJkd2FyZSAxIC0gOAotICovCi0jZGVmaW5lIE1BWF9CUklHSFQJMHgwNwotCi0KLSNkZWZpbmUgU0FCSV9JRkFDRV9NQUlOCQkJMHgwMAotI2RlZmluZSBTQUJJX0lGQUNFX1NVQgkJCTB4MDIKLSNkZWZpbmUgU0FCSV9JRkFDRV9DT01QTEVURQkJMHgwNAotI2RlZmluZSBTQUJJX0lGQUNFX0RBVEEJCQkweDA1Ci0KLS8qIFN0cnVjdHVyZSB0byBnZXQgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9uICovCi1zdHJ1Y3Qgc2FiaV9yZXR2YWwgewotCXU4IHJldHZhbFsyMF07Ci19OwotCi1zdHJ1Y3Qgc2FiaV9oZWFkZXJfb2Zmc2V0cyB7Ci0JdTggcG9ydDsKLQl1OCByZV9tZW07Ci0JdTggaWZhY2VfZnVuYzsKLQl1OCBlbl9tZW07Ci0JdTggZGF0YV9vZmZzZXQ7Ci0JdTggZGF0YV9zZWdtZW50OwotfTsKLQotc3RydWN0IHNhYmlfY29tbWFuZHMgewotCS8qCi0JICogQnJpZ2h0bmVzcyBpcyAwIC0gOCwgYXMgZGVzY3JpYmVkIGFib3ZlLgotCSAqIFZhbHVlIDAgaXMgZm9yIHRoZSBCSU9TIHRvIHVzZQotCSAqLwotCXU4IGdldF9icmlnaHRuZXNzOwotCXU4IHNldF9icmlnaHRuZXNzOwotCi0JLyoKLQkgKiBmaXJzdCBieXRlOgotCSAqIDB4MDAgLSB3aXJlbGVzcyBpcyBvZmYKLQkgKiAweDAxIC0gd2lyZWxlc3MgaXMgb24KLQkgKiBzZWNvbmQgYnl0ZToKLQkgKiAweDAyIC0gM0cgaXMgb2ZmCi0JICogMHgwMyAtIDNHIGlzIG9uCi0JICogVE9ETywgdmVyaWZ5IDNHIGlzIGNvcnJlY3QsIHRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0Li4uCi0JICovCi0JdTggZ2V0X3dpcmVsZXNzX2J1dHRvbjsKLQl1OCBzZXRfd2lyZWxlc3NfYnV0dG9uOwotCi0JLyogMCBpcyBvZmYsIDEgaXMgb24gKi8KLQl1OCBnZXRfYmFja2xpZ2h0OwotCXU4IHNldF9iYWNrbGlnaHQ7Ci0KLQkvKgotCSAqIDB4ODAgb3IgMHgwMCAtIG5vIGFjdGlvbgotCSAqIDB4ODEgLSByZWNvdmVyeSBrZXkgcHJlc3NlZAotCSAqLwotCXU4IGdldF9yZWNvdmVyeV9tb2RlOwotCXU4IHNldF9yZWNvdmVyeV9tb2RlOwotCi0JLyoKLQkgKiBvbiBzZWNsaW51eDogMCBpcyBsb3csIDEgaXMgaGlnaCwKLQkgKiBvbiBzd3NtaTogMCBpcyBub3JtYWwsIDEgaXMgc2lsZW50LCAyIGlzIHR1cmJvCi0JICovCi0JdTggZ2V0X3BlcmZvcm1hbmNlX2xldmVsOwotCXU4IHNldF9wZXJmb3JtYW5jZV9sZXZlbDsKLQotCS8qCi0JICogVGVsbCB0aGUgQklPUyB0aGF0IExpbnV4IGlzIHJ1bm5pbmcgb24gdGhpcyBtYWNoaW5lLgotCSAqIDgxIGlzIG9uLCA4MCBpcyBvZmYKLQkgKi8KLQl1OCBzZXRfbGludXg7Ci19OwotCi1zdHJ1Y3Qgc2FiaV9wZXJmb3JtYW5jZV9sZXZlbCB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1OCB2YWx1ZTsKLX07Ci0KLXN0cnVjdCBzYWJpX2NvbmZpZyB7Ci0JY29uc3QgY2hhciAqdGVzdF9zdHJpbmc7Ci0JdTE2IG1haW5fZnVuY3Rpb247Ci0JY29uc3Qgc3RydWN0IHNhYmlfaGVhZGVyX29mZnNldHMgaGVhZGVyX29mZnNldHM7Ci0JY29uc3Qgc3RydWN0IHNhYmlfY29tbWFuZHMgY29tbWFuZHM7Ci0JY29uc3Qgc3RydWN0IHNhYmlfcGVyZm9ybWFuY2VfbGV2ZWwgcGVyZm9ybWFuY2VfbGV2ZWxzWzRdOwotCXU4IG1pbl9icmlnaHRuZXNzOwotCXU4IG1heF9icmlnaHRuZXNzOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzYWJpX2NvbmZpZyBzYWJpX2NvbmZpZ3NbXSA9IHsKLQl7Ci0JCS50ZXN0X3N0cmluZyA9ICJTRUNMSU5VWCIsCi0KLQkJLm1haW5fZnVuY3Rpb24gPSAweDRjNDksCi0KLQkJLmhlYWRlcl9vZmZzZXRzID0gewotCQkJLnBvcnQgPSAweDAwLAotCQkJLnJlX21lbSA9IDB4MDIsCi0JCQkuaWZhY2VfZnVuYyA9IDB4MDMsCi0JCQkuZW5fbWVtID0gMHgwNCwKLQkJCS5kYXRhX29mZnNldCA9IDB4MDUsCi0JCQkuZGF0YV9zZWdtZW50ID0gMHgwNywKLQkJfSwKLQotCQkuY29tbWFuZHMgPSB7Ci0JCQkuZ2V0X2JyaWdodG5lc3MgPSAweDAwLAotCQkJLnNldF9icmlnaHRuZXNzID0gMHgwMSwKLQotCQkJLmdldF93aXJlbGVzc19idXR0b24gPSAweDAyLAotCQkJLnNldF93aXJlbGVzc19idXR0b24gPSAweDAzLAotCi0JCQkuZ2V0X2JhY2tsaWdodCA9IDB4MDQsCi0JCQkuc2V0X2JhY2tsaWdodCA9IDB4MDUsCi0KLQkJCS5nZXRfcmVjb3ZlcnlfbW9kZSA9IDB4MDYsCi0JCQkuc2V0X3JlY292ZXJ5X21vZGUgPSAweDA3LAotCi0JCQkuZ2V0X3BlcmZvcm1hbmNlX2xldmVsID0gMHgwOCwKLQkJCS5zZXRfcGVyZm9ybWFuY2VfbGV2ZWwgPSAweDA5LAotCi0JCQkuc2V0X2xpbnV4ID0gMHgwYSwKLQkJfSwKLQotCQkucGVyZm9ybWFuY2VfbGV2ZWxzID0gewotCQkJewotCQkJCS5uYW1lID0gInNpbGVudCIsCi0JCQkJLnZhbHVlID0gMCwKLQkJCX0sCi0JCQl7Ci0JCQkJLm5hbWUgPSAibm9ybWFsIiwKLQkJCQkudmFsdWUgPSAxLAotCQkJfSwKLQkJCXsgfSwKLQkJfSwKLQkJLm1pbl9icmlnaHRuZXNzID0gMSwKLQkJLm1heF9icmlnaHRuZXNzID0gOCwKLQl9LAotCXsKLQkJLnRlc3Rfc3RyaW5nID0gIlN3U21pQCIsCi0KLQkJLm1haW5fZnVuY3Rpb24gPSAweDU4NDMsCi0KLQkJLmhlYWRlcl9vZmZzZXRzID0gewotCQkJLnBvcnQgPSAweDAwLAotCQkJLnJlX21lbSA9IDB4MDQsCi0JCQkuaWZhY2VfZnVuYyA9IDB4MDIsCi0JCQkuZW5fbWVtID0gMHgwMywKLQkJCS5kYXRhX29mZnNldCA9IDB4MDUsCi0JCQkuZGF0YV9zZWdtZW50ID0gMHgwNywKLQkJfSwKLQotCQkuY29tbWFuZHMgPSB7Ci0JCQkuZ2V0X2JyaWdodG5lc3MgPSAweDEwLAotCQkJLnNldF9icmlnaHRuZXNzID0gMHgxMSwKLQotCQkJLmdldF93aXJlbGVzc19idXR0b24gPSAweDEyLAotCQkJLnNldF93aXJlbGVzc19idXR0b24gPSAweDEzLAotCi0JCQkuZ2V0X2JhY2tsaWdodCA9IDB4MmQsCi0JCQkuc2V0X2JhY2tsaWdodCA9IDB4MmUsCi0KLQkJCS5nZXRfcmVjb3ZlcnlfbW9kZSA9IDB4ZmYsCi0JCQkuc2V0X3JlY292ZXJ5X21vZGUgPSAweGZmLAotCi0JCQkuZ2V0X3BlcmZvcm1hbmNlX2xldmVsID0gMHgzMSwKLQkJCS5zZXRfcGVyZm9ybWFuY2VfbGV2ZWwgPSAweDMyLAotCi0JCQkuc2V0X2xpbnV4ID0gMHhmZiwKLQkJfSwKLQotCQkucGVyZm9ybWFuY2VfbGV2ZWxzID0gewotCQkJewotCQkJCS5uYW1lID0gIm5vcm1hbCIsCi0JCQkJLnZhbHVlID0gMCwKLQkJCX0sCi0JCQl7Ci0JCQkJLm5hbWUgPSAic2lsZW50IiwKLQkJCQkudmFsdWUgPSAxLAotCQkJfSwKLQkJCXsKLQkJCQkubmFtZSA9ICJvdmVyY2xvY2siLAotCQkJCS52YWx1ZSA9IDIsCi0JCQl9LAotCQkJeyB9LAotCQl9LAotCQkubWluX2JyaWdodG5lc3MgPSAwLAotCQkubWF4X2JyaWdodG5lc3MgPSA4LAotCX0sCi0JeyB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzYWJpX2NvbmZpZyAqc2FiaV9jb25maWc7Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNhYmk7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpzYWJpX2lmYWNlOwotc3RhdGljIHZvaWQgX19pb21lbSAqZjAwMDBfc2VnbWVudDsKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0X2RldmljZTsKLXN0YXRpYyBzdHJ1Y3QgbXV0ZXggc2FiaV9tdXRleDsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzZGV2Owotc3RhdGljIHN0cnVjdCByZmtpbGwgKnJmazsKLQotc3RhdGljIGludCBmb3JjZTsKLW1vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlLAotCQkiRGlzYWJsZSB0aGUgRE1JIGNoZWNrIGFuZCBmb3JjZXMgdGhlIGRyaXZlciB0byBiZSBsb2FkZWQiKTsKLQotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Ci0KLXN0YXRpYyBpbnQgc2FiaV9nZXRfY29tbWFuZCh1OCBjb21tYW5kLCBzdHJ1Y3Qgc2FiaV9yZXR2YWwgKnNyZXR2YWwpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0JdTE2IHBvcnQgPSByZWFkdyhzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLnBvcnQpOwotCXU4IGNvbXBsZXRlLCBpZmFjZV9kYXRhOwotCi0JbXV0ZXhfbG9jaygmc2FiaV9tdXRleCk7Ci0KLQkvKiBlbmFibGUgbWVtb3J5IHRvIGJlIGFibGUgdG8gd3JpdGUgdG8gaXQgKi8KLQlvdXRiKHJlYWRiKHNhYmkgKyBzYWJpX2NvbmZpZy0+aGVhZGVyX29mZnNldHMuZW5fbWVtKSwgcG9ydCk7Ci0KLQkvKiB3cml0ZSBvdXQgdGhlIGNvbW1hbmQgKi8KLQl3cml0ZXcoc2FiaV9jb25maWctPm1haW5fZnVuY3Rpb24sIHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX01BSU4pOwotCXdyaXRldyhjb21tYW5kLCBzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9TVUIpOwotCXdyaXRlYigwLCBzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9DT01QTEVURSk7Ci0Jb3V0YihyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmlmYWNlX2Z1bmMpLCBwb3J0KTsKLQotCS8qIHdyaXRlIHByb3RlY3QgbWVtb3J5IHRvIG1ha2UgaXQgc2FmZSAqLwotCW91dGIocmVhZGIoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5yZV9tZW0pLCBwb3J0KTsKLQotCS8qIHNlZSBpZiB0aGUgY29tbWFuZCBhY3R1YWxseSBzdWNjZWVkZWQgKi8KLQljb21wbGV0ZSA9IHJlYWRiKHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX0NPTVBMRVRFKTsKLQlpZmFjZV9kYXRhID0gcmVhZGIoc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfREFUQSk7Ci0JaWYgKGNvbXBsZXRlICE9IDB4YWEgfHwgaWZhY2VfZGF0YSA9PSAweGZmKSB7Ci0JCXByX3dhcm4oIlNBQkkgZ2V0IGNvbW1hbmQgMHglMDJ4IGZhaWxlZCB3aXRoIGNvbXBsZXRpb24gZmxhZyAweCUwMnggYW5kIGRhdGEgMHglMDJ4XG4iLAotCQkgICAgICAgIGNvbW1hbmQsIGNvbXBsZXRlLCBpZmFjZV9kYXRhKTsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQkvKgotCSAqIFNhdmUgb2ZmIHRoZSBkYXRhIGludG8gYSBzdHJ1Y3R1cmUgc28gdGhlIGNhbGxlciB1c2UgaXQuCi0JICogUmlnaHQgbm93IHdlIG9ubHkgd2FudCB0aGUgZmlyc3QgNCBieXRlcywKLQkgKiBUaGVyZSBhcmUgY29tbWFuZHMgdGhhdCBuZWVkIG1vcmUsIGJ1dCBub3QgZm9yIHRoZSBvbmVzIHdlCi0JICogY3VycmVudGx5IGNhcmUgYWJvdXQuCi0JICovCi0Jc3JldHZhbC0+cmV0dmFsWzBdID0gcmVhZGIoc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfREFUQSk7Ci0Jc3JldHZhbC0+cmV0dmFsWzFdID0gcmVhZGIoc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfREFUQSArIDEpOwotCXNyZXR2YWwtPnJldHZhbFsyXSA9IHJlYWRiKHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX0RBVEEgKyAyKTsKLQlzcmV0dmFsLT5yZXR2YWxbM10gPSByZWFkYihzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9EQVRBICsgMyk7Ci0KLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzYWJpX211dGV4KTsKLQlyZXR1cm4gcmV0dmFsOwotCi19Ci0KLXN0YXRpYyBpbnQgc2FiaV9zZXRfY29tbWFuZCh1OCBjb21tYW5kLCB1OCBkYXRhKQotewotCWludCByZXR2YWwgPSAwOwotCXUxNiBwb3J0ID0gcmVhZHcoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5wb3J0KTsKLQl1OCBjb21wbGV0ZSwgaWZhY2VfZGF0YTsKLQotCW11dGV4X2xvY2soJnNhYmlfbXV0ZXgpOwotCi0JLyogZW5hYmxlIG1lbW9yeSB0byBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0ICovCi0Jb3V0YihyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmVuX21lbSksIHBvcnQpOwotCi0JLyogd3JpdGUgb3V0IHRoZSBjb21tYW5kICovCi0Jd3JpdGV3KHNhYmlfY29uZmlnLT5tYWluX2Z1bmN0aW9uLCBzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9NQUlOKTsKLQl3cml0ZXcoY29tbWFuZCwgc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfU1VCKTsKLQl3cml0ZWIoMCwgc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfQ09NUExFVEUpOwotCXdyaXRlYihkYXRhLCBzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9EQVRBKTsKLQlvdXRiKHJlYWRiKHNhYmkgKyBzYWJpX2NvbmZpZy0+aGVhZGVyX29mZnNldHMuaWZhY2VfZnVuYyksIHBvcnQpOwotCi0JLyogd3JpdGUgcHJvdGVjdCBtZW1vcnkgdG8gbWFrZSBpdCBzYWZlICovCi0Jb3V0YihyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLnJlX21lbSksIHBvcnQpOwotCi0JLyogc2VlIGlmIHRoZSBjb21tYW5kIGFjdHVhbGx5IHN1Y2NlZWRlZCAqLwotCWNvbXBsZXRlID0gcmVhZGIoc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfQ09NUExFVEUpOwotCWlmYWNlX2RhdGEgPSByZWFkYihzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9EQVRBKTsKLQlpZiAoY29tcGxldGUgIT0gMHhhYSB8fCBpZmFjZV9kYXRhID09IDB4ZmYpIHsKLQkJcHJfd2FybigiU0FCSSBzZXQgY29tbWFuZCAweCUwMnggZmFpbGVkIHdpdGggY29tcGxldGlvbiBmbGFnIDB4JTAyeCBhbmQgZGF0YSAweCUwMnhcbiIsCi0JCSAgICAgICBjb21tYW5kLCBjb21wbGV0ZSwgaWZhY2VfZGF0YSk7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZzYWJpX211dGV4KTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2JhY2tsaWdodCh2b2lkKQotewotCXN0cnVjdCBzYWJpX3JldHZhbCBzcmV0dmFsOwotCi0Jc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X2JhY2tsaWdodCwgJnNyZXR2YWwpOwotCXByaW50ayhLRVJOX0RFQlVHICJiYWNrbGlnaHQgPSAweCUwMnhcbiIsIHNyZXR2YWwucmV0dmFsWzBdKTsKLQotCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF9iYWNrbGlnaHQsIDApOwotCXByaW50ayhLRVJOX0RFQlVHICJiYWNrbGlnaHQgc2hvdWxkIGJlIG9mZlxuIik7Ci0KLQlzYWJpX2dldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5nZXRfYmFja2xpZ2h0LCAmc3JldHZhbCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImJhY2tsaWdodCA9IDB4JTAyeFxuIiwgc3JldHZhbC5yZXR2YWxbMF0pOwotCi0JbXNsZWVwKDEwMDApOwotCi0Jc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X2JhY2tsaWdodCwgMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImJhY2tsaWdodCBzaG91bGQgYmUgb25cbiIpOwotCi0Jc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X2JhY2tsaWdodCwgJnNyZXR2YWwpOwotCXByaW50ayhLRVJOX0RFQlVHICJiYWNrbGlnaHQgPSAweCUwMnhcbiIsIHNyZXR2YWwucmV0dmFsWzBdKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93aXJlbGVzcyh2b2lkKQotewotCXN0cnVjdCBzYWJpX3JldHZhbCBzcmV0dmFsOwotCi0Jc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X3dpcmVsZXNzX2J1dHRvbiwgJnNyZXR2YWwpOwotCXByaW50ayhLRVJOX0RFQlVHICJ3aXJlbGVzcyBsZWQgPSAweCUwMnhcbiIsIHNyZXR2YWwucmV0dmFsWzBdKTsKLQotCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF93aXJlbGVzc19idXR0b24sIDApOwotCXByaW50ayhLRVJOX0RFQlVHICJ3aXJlbGVzcyBsZWQgc2hvdWxkIGJlIG9mZlxuIik7Ci0KLQlzYWJpX2dldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5nZXRfd2lyZWxlc3NfYnV0dG9uLCAmc3JldHZhbCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIndpcmVsZXNzIGxlZCA9IDB4JTAyeFxuIiwgc3JldHZhbC5yZXR2YWxbMF0pOwotCi0JbXNsZWVwKDEwMDApOwotCi0Jc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X3dpcmVsZXNzX2J1dHRvbiwgMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIndpcmVsZXNzIGxlZCBzaG91bGQgYmUgb25cbiIpOwotCi0Jc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X3dpcmVsZXNzX2J1dHRvbiwgJnNyZXR2YWwpOwotCXByaW50ayhLRVJOX0RFQlVHICJ3aXJlbGVzcyBsZWQgPSAweCUwMnhcbiIsIHNyZXR2YWwucmV0dmFsWzBdKTsKLX0KLQotc3RhdGljIHU4IHJlYWRfYnJpZ2h0bmVzcyh2b2lkKQotewotCXN0cnVjdCBzYWJpX3JldHZhbCBzcmV0dmFsOwotCWludCB1c2VyX2JyaWdodG5lc3MgPSAwOwotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBzYWJpX2dldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5nZXRfYnJpZ2h0bmVzcywKLQkJCQkgICZzcmV0dmFsKTsKLQlpZiAoIXJldHZhbCkgewotCQl1c2VyX2JyaWdodG5lc3MgPSBzcmV0dmFsLnJldHZhbFswXTsKLQkJaWYgKHVzZXJfYnJpZ2h0bmVzcyAhPSAwKQotCQkJdXNlcl9icmlnaHRuZXNzIC09IHNhYmlfY29uZmlnLT5taW5fYnJpZ2h0bmVzczsKLQl9Ci0JcmV0dXJuIHVzZXJfYnJpZ2h0bmVzczsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2JyaWdodG5lc3ModTggdXNlcl9icmlnaHRuZXNzKQotewotCXU4IHVzZXJfbGV2ZWwgPSB1c2VyX2JyaWdodG5lc3MgLSBzYWJpX2NvbmZpZy0+bWluX2JyaWdodG5lc3M7Ci0KLQlzYWJpX3NldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfYnJpZ2h0bmVzcywgdXNlcl9sZXZlbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXJldHVybiAoaW50KXJlYWRfYnJpZ2h0bmVzcygpOwotfQotCi1zdGF0aWMgaW50IHVwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXNldF9icmlnaHRuZXNzKGJkLT5wcm9wcy5icmlnaHRuZXNzKTsKLQotCWlmIChiZC0+cHJvcHMucG93ZXIgPT0gRkJfQkxBTktfVU5CTEFOSykKLQkJc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X2JhY2tsaWdodCwgMSk7Ci0JZWxzZQotCQlzYWJpX3NldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfYmFja2xpZ2h0LCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGJhY2tsaWdodF9vcHMgPSB7Ci0JLmdldF9icmlnaHRuZXNzCT0gZ2V0X2JyaWdodG5lc3MsCi0JLnVwZGF0ZV9zdGF0dXMJPSB1cGRhdGVfc3RhdHVzLAotfTsKLQotc3RhdGljIGludCByZmtpbGxfc2V0KHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKLXsKLQkvKiBEbyBzb21ldGhpbmcgd2l0aCBibG9ja2VkLi4uKi8KLQkvKgotCSAqIGJsb2NrZWQgPT0gZmFsc2UgaXMgb24KLQkgKiBibG9ja2VkID09IHRydWUgaXMgb2ZmCi0JICovCi0JaWYgKGJsb2NrZWQpCi0JCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF93aXJlbGVzc19idXR0b24sIDApOwotCWVsc2UKLQkJc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X3dpcmVsZXNzX2J1dHRvbiwgMSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCByZmtpbGxfb3BzIHJma2lsbF9vcHMgPSB7Ci0JLnNldF9ibG9jayA9IHJma2lsbF9zZXQsCi19OwotCi1zdGF0aWMgaW50IGluaXRfd2lyZWxlc3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2RldikKLXsKLQlpbnQgcmV0dmFsOwotCi0JcmZrID0gcmZraWxsX2FsbG9jKCJzYW1zdW5nLXdpZmkiLCAmc2Rldi0+ZGV2LCBSRktJTExfVFlQRV9XTEFOLAotCQkJICAgJnJma2lsbF9vcHMsIE5VTEwpOwotCWlmICghcmZrKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHZhbCA9IHJma2lsbF9yZWdpc3RlcihyZmspOwotCWlmIChyZXR2YWwpIHsKLQkJcmZraWxsX2Rlc3Ryb3kocmZrKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlc3Ryb3lfd2lyZWxlc3Modm9pZCkKLXsKLQlyZmtpbGxfdW5yZWdpc3RlcihyZmspOwotCXJma2lsbF9kZXN0cm95KHJmayk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGdldF9wZXJmb3JtYW5jZV9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBzYWJpX3JldHZhbCBzcmV0dmFsOwotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0KLQkvKiBSZWFkIHRoZSBzdGF0ZSAqLwotCXJldHZhbCA9IHNhYmlfZ2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLmdldF9wZXJmb3JtYW5jZV9sZXZlbCwKLQkJCQkgICZzcmV0dmFsKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JLyogVGhlIGxvZ2ljIGlzIGJhY2t3YXJkcywgeWVhaCwgbG90cyBvZiBmdW4uLi4gKi8KLQlmb3IgKGkgPSAwOyBzYWJpX2NvbmZpZy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm5hbWU7ICsraSkgewotCQlpZiAoc3JldHZhbC5yZXR2YWxbMF0gPT0gc2FiaV9jb25maWctPnBlcmZvcm1hbmNlX2xldmVsc1tpXS52YWx1ZSkKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzYWJpX2NvbmZpZy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm5hbWUpOwotCX0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgInVua25vd24iKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3BlcmZvcm1hbmNlX2xldmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCkKLXsKLQlpZiAoY291bnQgPj0gMSkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgc2FiaV9jb25maWctPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5uYW1lOyArK2kpIHsKLQkJCWNvbnN0IHN0cnVjdCBzYWJpX3BlcmZvcm1hbmNlX2xldmVsICpsZXZlbCA9Ci0JCQkJJnNhYmlfY29uZmlnLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV07Ci0JCQlpZiAoIXN0cm5jYXNlY21wKGxldmVsLT5uYW1lLCBidWYsIHN0cmxlbihsZXZlbC0+bmFtZSkpKSB7Ci0JCQkJc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X3BlcmZvcm1hbmNlX2xldmVsLAotCQkJCQkJIGxldmVsLT52YWx1ZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFzYWJpX2NvbmZpZy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm5hbWUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIERFVklDRV9BVFRSKHBlcmZvcm1hbmNlX2xldmVsLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgZ2V0X3BlcmZvcm1hbmNlX2xldmVsLCBzZXRfcGVyZm9ybWFuY2VfbGV2ZWwpOwotCi0KLXN0YXRpYyBpbnQgX19pbml0IGRtaV9jaGVja19jYihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JcHJfaW5mbygiZm91bmQgbGFwdG9wIG1vZGVsICclcydcbiIsCi0JCWlkLT5pZGVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIHNhbXN1bmdfZG1pX3RhYmxlW10gPSB7Ci0JewotCQkuaWRlbnQgPSAiTjEyOCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjEyOCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTjEyOCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJOMTMwIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOMTMwIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJOMTMwIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIlgxMjUiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKLQkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlgxMjUiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlgxMjUiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiWDEyMC9YMTcwIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJYMTIwL1gxNzAiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlgxMjAvWDE3MCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJOQzEwIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOQzEwIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJOQzEwIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCQl7Ci0JCS5pZGVudCA9ICJOUC1RNDUiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKLQkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNRNDVTNzBTIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJTUTQ1UzcwUyIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JCX0sCi0JewotCQkuaWRlbnQgPSAiWDM2MCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiWDM2MCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiWDM2MCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJSNDEwIFBsdXMiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKLQkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlI0MTBQIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJSNDYwIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIlI1MTgiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKLQkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlI1MTgiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlI1MTgiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiUjUxOS9SNzE5IiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJSNTE5L1I3MTkiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlI1MTkvUjcxOSIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJOMTUwL04yMTAvTjIyMC9OMjMwIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOMTUwL04yMTAvTjIyMC9OMjMwIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJOMTUwL04yMTAvTjIyMC9OMjMwIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIk4xNTBQL04yMTBQL04yMjBQIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOMTUwUC9OMjEwUC9OMjIwUCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTjE1MFAvTjIxMFAvTjIyMFAiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiUjUzMC9SNzMwIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCSAgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCSAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUjUzMC9SNzMwIiksCi0JCSAgICAgIERNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlI1MzAvUjczMCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJORjExMC9ORjIxMC9ORjMxMCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTkYxMTAvTkYyMTAvTkYzMTAiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk5GMTEwL05GMjEwL05GMzEwIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIk4xNDVQL04yNTBQL04yNjBQIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOMTQ1UC9OMjUwUC9OMjYwUCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTjE0NVAvTjI1MFAvTjI2MFAiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiUjcwL1I3MSIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUjcwL1I3MSIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiUjcwL1I3MSIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJQNDYwIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQNDYwIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJQNDYwIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGRtaSwgc2Ftc3VuZ19kbWlfdGFibGUpOwotCi1zdGF0aWMgaW50IGZpbmRfc2lnbmF0dXJlKHZvaWQgX19pb21lbSAqbWVtY2hlY2ssIGNvbnN0IGNoYXIgKnRlc3RTdHIpCi17Ci0JaW50IGkgPSAwOwotCWludCBsb2NhOwotCi0JZm9yIChsb2NhID0gMDsgbG9jYSA8IDB4ZmZmZjsgbG9jYSsrKSB7Ci0JCWNoYXIgdGVtcCA9IHJlYWRiKG1lbWNoZWNrICsgbG9jYSk7Ci0KLQkJaWYgKHRlbXAgPT0gdGVzdFN0cltpXSkgewotCQkJaWYgKGkgPT0gc3RybGVuKHRlc3RTdHIpLTEpCi0JCQkJYnJlYWs7Ci0JCQkrK2k7Ci0JCX0gZWxzZSB7Ci0JCQlpID0gMDsKLQkJfQotCX0KLQlyZXR1cm4gbG9jYTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgc2Ftc3VuZ19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwotCXN0cnVjdCBzYWJpX3JldHZhbCBzcmV0dmFsOwotCXVuc2lnbmVkIGludCBpZmFjZVA7Ci0JaW50IGk7Ci0JaW50IGxvY2E7Ci0JaW50IHJldHZhbDsKLQotCW11dGV4X2luaXQoJnNhYmlfbXV0ZXgpOwotCi0JaWYgKCFmb3JjZSAmJiAhZG1pX2NoZWNrX3N5c3RlbShzYW1zdW5nX2RtaV90YWJsZSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZjAwMDBfc2VnbWVudCA9IGlvcmVtYXBfbm9jYWNoZSgweGYwMDAwLCAweGZmZmYpOwotCWlmICghZjAwMDBfc2VnbWVudCkgewotCQlwcl9lcnIoIkNhbid0IG1hcCB0aGUgc2VnbWVudCBhdCAweGYwMDAwXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVHJ5IHRvIGZpbmQgb25lIG9mIHRoZSBzaWduYXR1cmVzIGluIG1lbW9yeSB0byBmaW5kIHRoZSBoZWFkZXIgKi8KLQlmb3IgKGkgPSAwOyBzYWJpX2NvbmZpZ3NbaV0udGVzdF9zdHJpbmcgIT0gMDsgKytpKSB7Ci0JCXNhYmlfY29uZmlnID0gJnNhYmlfY29uZmlnc1tpXTsKLQkJbG9jYSA9IGZpbmRfc2lnbmF0dXJlKGYwMDAwX3NlZ21lbnQsIHNhYmlfY29uZmlnLT50ZXN0X3N0cmluZyk7Ci0JCWlmIChsb2NhICE9IDB4ZmZmZikKLQkJCWJyZWFrOwotCX0KLQotCWlmIChsb2NhID09IDB4ZmZmZikgewotCQlwcl9lcnIoIlRoaXMgY29tcHV0ZXIgZG9lcyBub3Qgc3VwcG9ydCBTQUJJXG4iKTsKLQkJZ290byBlcnJvcl9ub19zaWduYXR1cmU7Ci0JfQotCi0JLyogcG9pbnQgdG8gdGhlIFNNSSBwb3J0IE51bWJlciAqLwotCWxvY2EgKz0gMTsKLQlzYWJpID0gKGYwMDAwX3NlZ21lbnQgKyBsb2NhKTsKLQotCWlmIChkZWJ1ZykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiVGhpcyBjb21wdXRlciBzdXBwb3J0cyBTQUJJPT0leFxuIiwKLQkJCWxvY2EgKyAweGYwMDAwIC0gNik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJTQUJJIGhlYWRlcjpcbiIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNNSSBQb3J0IE51bWJlciA9IDB4JTA0eFxuIiwKLQkJCXJlYWR3KHNhYmkgKyBzYWJpX2NvbmZpZy0+aGVhZGVyX29mZnNldHMucG9ydCkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNNSSBJbnRlcmZhY2UgRnVuY3Rpb24gPSAweCUwMnhcbiIsCi0JCQlyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmlmYWNlX2Z1bmMpKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBTTUkgZW5hYmxlIG1lbW9yeSBidWZmZXIgPSAweCUwMnhcbiIsCi0JCQlyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmVuX21lbSkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNNSSByZXN0b3JlIG1lbW9yeSBidWZmZXIgPSAweCUwMnhcbiIsCi0JCQlyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLnJlX21lbSkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNBQkkgZGF0YSBvZmZzZXQgPSAweCUwNHhcbiIsCi0JCQlyZWFkdyhzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmRhdGFfb2Zmc2V0KSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgU0FCSSBkYXRhIHNlZ21lbnQgPSAweCUwNHhcbiIsCi0JCQlyZWFkdyhzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmRhdGFfc2VnbWVudCkpOwotCX0KLQotCS8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIFNBQkkgSW50ZXJmYWNlICovCi0JaWZhY2VQID0gKHJlYWR3KHNhYmkgKyBzYWJpX2NvbmZpZy0+aGVhZGVyX29mZnNldHMuZGF0YV9zZWdtZW50KSAmIDB4MGZmZmYpIDw8IDQ7Ci0JaWZhY2VQICs9IHJlYWR3KHNhYmkgKyBzYWJpX2NvbmZpZy0+aGVhZGVyX29mZnNldHMuZGF0YV9vZmZzZXQpICYgMHgwZmZmZjsKLQlzYWJpX2lmYWNlID0gaW9yZW1hcF9ub2NhY2hlKGlmYWNlUCwgMTYpOwotCWlmICghc2FiaV9pZmFjZSkgewotCQlwcl9lcnIoIkNhbid0IHJlbWFwICV4XG4iLCBpZmFjZVApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCWlmIChkZWJ1ZykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaWZhY2VQID0gMHglMDh4XG4iLCBpZmFjZVApOwotCQlwcmludGsoS0VSTl9ERUJVRyAic2FiaV9pZmFjZSA9ICVwXG4iLCBzYWJpX2lmYWNlKTsKLQotCQl0ZXN0X2JhY2tsaWdodCgpOwotCQl0ZXN0X3dpcmVsZXNzKCk7Ci0KLQkJcmV0dmFsID0gc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X2JyaWdodG5lc3MsCi0JCQkJCSAgJnNyZXR2YWwpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiYnJpZ2h0bmVzcyA9IDB4JTAyeFxuIiwgc3JldHZhbC5yZXR2YWxbMF0pOwotCX0KLQotCS8qIFR1cm4gb24gIkxpbnV4IiBtb2RlIGluIHRoZSBCSU9TICovCi0JaWYgKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfbGludXggIT0gMHhmZikgewotCQlyZXR2YWwgPSBzYWJpX3NldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfbGludXgsCi0JCQkJCSAgMHg4MSk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCXByX3dhcm4oIkxpbnV4IG1vZGUgd2FzIG5vdCBzZXQhXG4iKTsKLQkJCWdvdG8gZXJyb3Jfbm9fcGxhdGZvcm07Ci0JCX0KLQl9Ci0KLQkvKiBrbm9jayB1cCBhIHBsYXRmb3JtIGRldmljZSB0byBoYW5nIHN0dWZmIG9mZiBvZiAqLwotCXNkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJzYW1zdW5nIiwgLTEsIE5VTEwsIDApOwotCWlmIChJU19FUlIoc2RldikpCi0JCWdvdG8gZXJyb3Jfbm9fcGxhdGZvcm07Ci0KLQkvKiBjcmVhdGUgYSBiYWNrbGlnaHQgZGV2aWNlIHRvIHRhbGsgdG8gdGhpcyBvbmUgKi8KLQltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7Ci0JcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKLQlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IHNhYmlfY29uZmlnLT5tYXhfYnJpZ2h0bmVzczsKLQliYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigic2Ftc3VuZyIsICZzZGV2LT5kZXYsCi0JCQkJCQkgICAgIE5VTEwsICZiYWNrbGlnaHRfb3BzLAotCQkJCQkJICAgICAmcHJvcHMpOwotCWlmIChJU19FUlIoYmFja2xpZ2h0X2RldmljZSkpCi0JCWdvdG8gZXJyb3Jfbm9fYmFja2xpZ2h0OwotCi0JYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcygpOwotCWJhY2tsaWdodF9kZXZpY2UtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiYWNrbGlnaHRfZGV2aWNlKTsKLQotCXJldHZhbCA9IGluaXRfd2lyZWxlc3Moc2Rldik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJvcl9ub19yZms7Ci0KLQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPmRldiwgJmRldl9hdHRyX3BlcmZvcm1hbmNlX2xldmVsKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGVycm9yX2ZpbGVfY3JlYXRlOwotCi1leGl0OgotCXJldHVybiAwOwotCi1lcnJvcl9maWxlX2NyZWF0ZToKLQlkZXN0cm95X3dpcmVsZXNzKCk7Ci0KLWVycm9yX25vX3JmazoKLQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmFja2xpZ2h0X2RldmljZSk7Ci0KLWVycm9yX25vX2JhY2tsaWdodDoKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZGV2KTsKLQotZXJyb3Jfbm9fcGxhdGZvcm06Ci0JaW91bm1hcChzYWJpX2lmYWNlKTsKLQotZXJyb3Jfbm9fc2lnbmF0dXJlOgotCWlvdW5tYXAoZjAwMDBfc2VnbWVudCk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzYW1zdW5nX2V4aXQodm9pZCkKLXsKLQkvKiBUdXJuIG9mZiAiTGludXgiIG1vZGUgaW4gdGhlIEJJT1MgKi8KLQlpZiAoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF9saW51eCAhPSAweGZmKQotCQlzYWJpX3NldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfbGludXgsIDB4ODApOwotCi0JZGV2aWNlX3JlbW92ZV9maWxlKCZzZGV2LT5kZXYsICZkZXZfYXR0cl9wZXJmb3JtYW5jZV9sZXZlbCk7Ci0JYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJhY2tsaWdodF9kZXZpY2UpOwotCWRlc3Ryb3lfd2lyZWxlc3MoKTsKLQlpb3VubWFwKHNhYmlfaWZhY2UpOwotCWlvdW5tYXAoZjAwMDBfc2VnbWVudCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2Rldik7Ci19Ci0KLW1vZHVsZV9pbml0KHNhbXN1bmdfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYW1zdW5nX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIEJhY2tsaWdodCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKaW5kZXggNzFhNWZiYy4uODkwZWVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKQEAgLTU1LDggKzU1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvcmFyX3JlZ2lzdGVyLmg+CiAKLSNpbmNsdWRlICIuLi9tZW1yYXIvbWVtcmFyLmgiCi0KICNpbmNsdWRlICJzZXBfZHJpdmVyX2h3X2RlZnMuaCIKICNpbmNsdWRlICJzZXBfZHJpdmVyX2NvbmZpZy5oIgogI2luY2x1ZGUgInNlcF9kcml2ZXJfYXBpLmgiCkBAIC01ODYsNyArNTg0LDcgQEAKIAlkZXZfZGJnKCZzZXAtPnBkZXYtPmRldiwgInBvbGw6IHNlbmRfY3QgaXMgJWx4IHJlcGx5IGN0IGlzICVseFxuIiwKIAkJc2VwLT5zZW5kX2N0LCBzZXAtPnJlcGx5X2N0KTsKIAotCS8qIENoZWNrIGlmIGVycm9yIG9jY3VyZWQgZHVyaW5nIHBvbGwgKi8KKwkvKiBDaGVjayBpZiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcG9sbCAqLwogCXJldHZhbDIgPSBzZXBfcmVhZF9yZWcoc2VwLCBIV19IT1NUX1NFUF9IT1NUX0dQUjNfUkVHX0FERFIpOwogCWlmIChyZXR2YWwyICE9IDB4MCkgewogCQlkZXZfd2Fybigmc2VwLT5wZGV2LT5kZXYsICJwb2xsOyBwb2xsIGVycm9yICV4XG4iLCByZXR2YWwyKTsKQEAgLTExMDYsNyArMTEwNCw3IEBACiAJCQlsbGlfYXJyYXlbY291bnRdLmJsb2NrX3NpemUpOwogCX0KIAotCS8qIFNldCBvdXRwdXQgcGFyYW1zIGFjb3JkaW5nIHRvIHRoZSBpbl9vdXQgZmxhZyAqLworCS8qIFNldCBvdXRwdXQgcGFyYW1zIGFjY29yZGluZyB0byB0aGUgaW5fb3V0IGZsYWcgKi8KIAlpZiAoaW5fb3V0X2ZsYWcgPT0gU0VQX0RSSVZFUl9JTl9GTEFHKSB7CiAJCSpsbGlfYXJyYXlfcHRyID0gbGxpX2FycmF5OwogCQlzZXAtPmRtYV9yZXNfYXJyW3NlcC0+bnJfZGNiX2NyZWF0XS5pbl9udW1fcGFnZXMgPSBudW1fcGFnZXM7CkBAIC0xNTc3LDcgKzE1NzUsNyBAQAogCiAJCS8qCiAJCSAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHRhYmxlIC0KLQkJICogdGhlbiBhbGxpZ24gaXQgdG8gdGhlIGJsb2NrIHNpemUKKwkJICogdGhlbiBhbGlnbiBpdCB0byB0aGUgYmxvY2sgc2l6ZQogCQkgKi8KIAkJaWYgKCFsYXN0X3RhYmxlX2ZsYWcpCiAJCQl0YWJsZV9kYXRhX3NpemUgPQpAQCAtMTk3NCw3ICsxOTcyLDcgQEAKIAlkZXZfZGJnKCZzZXAtPnBkZXYtPmRldiwgIlNFUF9EUklWRVJfRU5UUklFU19QRVJfVEFCTEVfSU5fU0VQIGlzICV4XG4iLAogCQlTRVBfRFJJVkVSX0VOVFJJRVNfUEVSX1RBQkxFX0lOX1NFUCk7CiAKLQkvKiBDYWxsIHRoZSBmdWNudGlvbiB0aGF0IGNyZWF0ZXMgdGFibGUgZnJvbSB0aGUgbGxpIGFycmF5cyAqLworCS8qIENhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyB0YWJsZSBmcm9tIHRoZSBsbGkgYXJyYXlzICovCiAJZXJyb3IgPSBzZXBfY29uc3RydWN0X2RtYV90YWJsZXNfZnJvbV9sbGkoc2VwLCBsbGlfaW5fYXJyYXksCiAJCXNlcC0+ZG1hX3Jlc19hcnJbc2VwLT5ucl9kY2JfY3JlYXRdLmluX251bV9wYWdlcywKIAkJbGxpX291dF9hcnJheSwKQEAgLTIzNzIsNyArMjM3MCw2IEBACiAJaW50IGVycm9yID0gMDsKIAkvKiBDb21tYW5kIGFyZ3MgKi8KIAlzdHJ1Y3QgcmFyX2huZGxfdG9fYnVzX3N0cnVjdCBjb21tYW5kX2FyZ3M7Ci0Jc3RydWN0IFJBUl9idWZmZXIgcmFyX2J1ZjsKIAkvKiBCdXMgYWRkcmVzcyAqLwogCWRtYV9hZGRyX3QgIHJhcl9idXMgPSAwOwogCS8qIEhvbGRzIHRoZSBSQVIgYWRkcmVzcyBpbiB0aGUgc3lzdGVtIG1lbW9yeSBvZmZzZXQgKi8KQEAgLTIzODYsMTYgKzIzODMsOCBAQAogCX0KIAogCS8qIENhbGwgdG8gdHJhbnNsYXRpb24gZnVuY3Rpb24gb25seSBpZiB1c2VyIGhhbmRsZSBpcyBub3QgTlVMTCAqLwotCWlmIChjb21tYW5kX2FyZ3MucmFyX2hhbmRsZSkgewotCQltZW1zZXQoJnJhcl9idWYsIDAsIHNpemVvZihyYXJfYnVmKSk7Ci0JCXJhcl9idWYuaW5mby5oYW5kbGUgPSAodTMyKWNvbW1hbmRfYXJncy5yYXJfaGFuZGxlOwotCi0JCWlmIChyYXJfaGFuZGxlX3RvX2J1cygmcmFyX2J1ZiwgMSkgIT0gMSkgewotCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJZ290byBlbmRfZnVuY3Rpb247Ci0JCX0KLQkJcmFyX2J1cyA9IHJhcl9idWYuYnVzX2FkZHJlc3M7Ci0JfQorCWlmIChjb21tYW5kX2FyZ3MucmFyX2hhbmRsZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWRldl9kYmcoJnNlcC0+cGRldi0+ZGV2LCAicmFyIG1zZzsgcmFyX2FkZHJfYnVzID0gJXhcbiIsICh1MzIpcmFyX2J1cyk7CiAKIAkvKiBTZXQgdmFsdWUgaW4gdGhlIFNZU1RFTSBNRU1PUlkgb2Zmc2V0ICovCkBAIC0yNDE2LDcgKzI0MDUsNyBAQAogICoJQGNtZDogY29tbWFuZAogICoJQGFyZzogcG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUKICAqCi0gKglJbXBsZW1lbnQgdGhlIGlvY3RsIG1ldGhvZHMgYXZhaWxibGUgb24gdGhlIFNFUCBkZXZpY2UuCisgKglJbXBsZW1lbnQgdGhlIGlvY3RsIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSBTRVAgZGV2aWNlLgogICovCiBzdGF0aWMgbG9uZyBzZXBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyX2NvbmZpZy5oIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyX2NvbmZpZy5oCmluZGV4IGQzYjkyMjAuLjEwMzM0MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlcl9jb25maWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXJfY29uZmlnLmgKQEAgLTY1LDExICs2NSwxMSBAQAogI2RlZmluZSBTRVBfRFJJVkVSX01JTl9EQVRBX1NJWkVfUEVSX1RBQkxFCQkxNgogCiAvKiBmbGFnIHRoYXQgc2lnbmlmaWVzIHRhaCB0aGUgbG9jayBpcwotY3VycmVudGx5IGhlbGQgYnkgdGhlIHByb2NjZXNzIChzdHJ1Y3QgZmlsZSkgKi8KK2N1cnJlbnRseSBoZWxkIGJ5IHRoZSBwcm9jZXNzIChzdHJ1Y3QgZmlsZSkgKi8KICNkZWZpbmUgU0VQX0RSSVZFUl9PV05fTE9DS19GTEFHICAgICAgICAgICAgICAgICAgICAgICAgMQogCiAvKiBmbGFnIHRoYXQgc2lnbmlmaWVzIHRhaCB0aGUgbG9jayBpcyBjdXJyZW50bHkgTk9UCi1oZWxkIGJ5IHRoZSBwcm9jY2VzcyAoc3RydWN0IGZpbGUpICovCitoZWxkIGJ5IHRoZSBwcm9jZXNzIChzdHJ1Y3QgZmlsZSkgKi8KICNkZWZpbmUgU0VQX0RSSVZFUl9ESVNPV05fTE9DS19GTEFHICAgICAgICAgICAgICAgICAgICAgMAogCiAvKiBpbmRpY2F0ZXMgd2hldGhlciBkcml2ZXIgaGFzIG1hcHBlZC91bm1hcHBlZCBzaGFyZWQgYXJlYSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FCmluZGV4IDcwZjQ5MDk5Li5iODNiYmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FCkBAIC0zMyw3ICszMyw3IEBACiAJLSBOQVBJPwogCS0gd2FzdGVkIG92ZXJoZWFkIG9mIGV4dHJhIHN0YXRzCiAJLSBzdGF0ZSB2YXJpYWJsZXMgZm9yIHRoaW5ncyB0aGF0IGFyZQotCSAgZWFzaWx5IGF2YWlsYmxlIGFuZCBzaG91bGRuJ3QgYmUga2VwdCBpbiBjYXJkIHN0cnVjdHVyZSwgY2FyZG51bSwgLi4uCisJICBlYXNpbHkgYXZhaWxhYmxlIGFuZCBzaG91bGRuJ3QgYmUga2VwdCBpbiBjYXJkIHN0cnVjdHVyZSwgY2FyZG51bSwgLi4uCiAJICBzbG90bnVtYmVyLCBldmVudHMsIC4uLgogCS0gZ2V0IHJpZCBvZiBzbGljX3NwaW5sb2NrIHdyYXBwZXIKIAktIHZvbGF0aWxlID09IGJhZCBkZXNpZ24gPT4gYmFkIGNvZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCBkMDA3ZTRhLi4zZTIyMzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC0yNiwxMCArMjYsNiBAQAogICoJQm95b2QueWFuZyA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KICAqLwogCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX19LRVJORUxfXwotI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC05NjUsNyArOTYxLDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAlzbXRjZmJfc2V0bW9kZShzZmIpOwotCS8qIFByaW1hcnkgZGlzcGxheSBzdGFydGluZyBmcm9tIDAgcG9zdGlvbiAqLworCS8qIFByaW1hcnkgZGlzcGxheSBzdGFydGluZyBmcm9tIDAgcG9zaXRpb24gKi8KIAlody5CYXNlQWRkcmVzc0luVlJBTSA9IDA7CiAJc2ZiLT5mYi5wYXIgPSAmaHc7CiAKQEAgLTEwMTksNiArMTAxNSw3IEBACiAJc210Y19mcmVlX2ZiX2luZm8oc2ZiKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogLyogSmFzb24gKDA4LzE0LzIwMDkpCiAgKiBzdXNwZW5kIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiB0aGUgc3VzcGVuZCBldmVudCBpcyB0cmlnZ2VyZWQKICAqLwpAQCAtMTA1NSw3ICsxMDUyLDcgQEAKIAogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1zZzsKIAotCS8qIGFkZGl0aW9uYWx5IHR1cm4gb2ZmIGFsbCBmdW5jdGlvbiBibG9ja3MgaW5jbHVkaW5nIGludGVybmFsIFBMTHMgKi8KKwkvKiBhZGRpdGlvbmFsbHkgdHVybiBvZmYgYWxsIGZ1bmN0aW9uIGJsb2NrcyBpbmNsdWRpbmcgaW50ZXJuYWwgUExMcyAqLwogCXNtdGNfc2VxdygweDIxLCAweGZmKTsKIAogCXJldHVybiAwOwpAQCAtMTExMSw2ICsxMTA4LDcgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIC8qIEphc29uICgwOC8xMy8yMDA5KQogICogcGNpX2RyaXZlciBzdHJ1Y3QgdXNlZCB0byB3cmFwIHRoZSBvcmlnaW5hbCBkcml2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKaW5kZXggMmNmNzdjOS4uMDNkY2FjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIlNvZnRsb2dpYyA2eDEwIE1QRUcgY29kZWMgY2FyZHMiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fREVWICYmIFNORCAmJiBJMkMKIAlzZWxlY3QgVklERU9CVUZfRE1BX1NHCisJc2VsZWN0IFNORF9QQ00KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU29mdGxvZ2ljIGJhc2VkIE1QRUctNCBhbmQgaC4yNjQgY29kZWMKIAkgIGNvZGVjIGNhcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva2V5aGVscC5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva2V5aGVscC5jCmluZGV4IDIzY2Y3ZjQuLjE3MGYzODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tleWhlbHAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rZXloZWxwLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAltZW1zZXQoa2V5X29mZnNldHMsIDAsIHNpemVvZihrZXlfb2Zmc2V0cykpOwogCWtwID0gc3RhdGVfdGJsICsgbnN0YXRlcyArIDE7CiAJd2hpbGUgKCprcCsrKSB7Ci0JCS8qIGNvdW50IG9jY3VycmFuY2VzIG9mIGVhY2ggZnVuY3Rpb24gKi8KKwkJLyogY291bnQgb2NjdXJyZW5jZXMgb2YgZWFjaCBmdW5jdGlvbiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgaSsrLCBrcCsrKSB7CiAJCQlpZiAoISprcCkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3Nwa2d1aWRlLnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3Nwa2d1aWRlLnR4dAppbmRleCAyNDM2MmViLi5mMzIxMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGtndWlkZS50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BrZ3VpZGUudHh0CkBAIC0xMDkxLDcgKzEwOTEsNyBAQAogCiBUaGVyZSBpcyBubyB3YXkgdG8gc2F2ZSB0aGVzZSB3aW5kb3cgc2V0dGluZ3MsIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUKIHdpbmRvdyBkZWZpbmVkIGZvciBlYWNoIHZpcnR1YWwgY29uc29sZS4gIFRoZXJlIGlzIGFsc28gbm8gd2F5IHRvIGhhdmUKLXdpbmRvd3MgYXV0b21hdGljbHkgZGVmaW5lZCBmb3Igc3BlY2lmaWMgYXBwbGljYXRpb25zLgord2luZG93cyBhdXRvbWF0aWNhbGx5IGRlZmluZWQgZm9yIHNwZWNpZmljIGFwcGxpY2F0aW9ucy4KIAogSW4gb3JkZXIgdG8gZGVmaW5lIGEgd2luZG93LCB1c2UgdGhlIHJldmlldyBrZXlzIHRvIG1vdmUgeW91ciByZWFkaW5nCiBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJlYSB5b3Ugd2FudCB0byBkZWZpbmUuICBUaGVuIHByZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMKaW5kZXggMDA3YjI0Yi4uNTA2NTQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuYwpAQCAtMzgsNyArMzgsNyBAQAogKiBPdXRwdXRzOiAgICAgIE51bWJlciBvZiBVc2VkIEJpdHMKICogICAgICAgICAgICAgICAwLCBpZiB0aGUgYXJndW1lbnQgaXMgMAogKiBEZXNjcmlwdGlvbjogIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBieSBhIGdpdmVuIHBvd2VyIG9mIDIgbnVtYmVyCi0qICAgICAgICAgICAgICAgTnVtYmVyIGNhbiBiZSB1cHRvIDMyIGJpdAorKiAgICAgICAgICAgICAgIE51bWJlciBjYW4gYmUgdXAgdG8gMzIgYml0CiAqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwogaW50IEdMT0JfQ2FsY19Vc2VkX0JpdHModTMyIG4pCiB7CkBAIC02NTMsNyArNjUzLDcgQEAKIAl9CiAJZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gZGV2OwogCi0JLyogQXMgTGludXggYmxvY2sgbGF5ZXIgZG9lbnMndCBzdXBwb3J0ID40S0IgaGFyZHdhcmUgc2VjdG9yLCAgKi8KKwkvKiBBcyBMaW51eCBibG9jayBsYXllciBkb2Vzbid0IHN1cHBvcnQgPjRLQiBoYXJkd2FyZSBzZWN0b3IsICAqLwogCS8qIEhlcmUgd2UgZm9yY2UgcmVwb3J0IDUxMiBieXRlIGhhcmR3YXJlIHNlY3RvciBzaXplIHRvIEtlcm5lbCAqLwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoZGV2LT5xdWV1ZSwgNTEyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmxhc2guYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmMKaW5kZXggYTJmODIwMC4uYWVhZDM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmxhc2guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mbGFzaC5jCkBAIC05NjUsNyArOTY1LDcgQEAKIAlpZiAoMCA9PSAqZmlyc3RfZmFpbGVkX2NtZCkKIAkJKmZpcnN0X2ZhaWxlZF9jbWQgPSBQZW5kaW5nQ01EW2lkeF0uU0JEQ21kSW5kZXg7CiAKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlVuY29ycmVjdGFibGUgZXJyb3IgaGFzIG9jY3VyZWQgIgorCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiVW5jb3JyZWN0YWJsZSBlcnJvciBoYXMgb2NjdXJyZWQgIgogCQkid2hpbGUgZXhlY3V0aW5nICV1IENvbW1hbmQgJXUgYWNjZXNpbmcgQmxvY2sgJXVcbiIsCiAJCSh1bnNpZ25lZCBpbnQpcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250LAogCQlQZW5kaW5nQ01EW2lkeF0uQ01ELApAQCAtMTg3OSw3ICsxODc5LDcgQEAKIH0KIAogLyoKLSAqIFNlYWNoIGluIHRoZSBMZXZlbDIgQ2FjaGUgdGFibGUgdG8gZmluZCB0aGUgY2FjaGUgaXRlbS4KKyAqIFNlYXJjaCBpbiB0aGUgTGV2ZWwyIENhY2hlIHRhYmxlIHRvIGZpbmQgdGhlIGNhY2hlIGl0ZW0uCiAgKiBJZiBmaW5kLCByZWFkIHRoZSBkYXRhIGZyb20gdGhlIE5BTkQgcGFnZSBvZiBMMiBDYWNoZSwKICAqIE90aGVyd2lzZSwgcmV0dXJuIEZBSUwuCiAgKi8KQEAgLTM5ODksNyArMzk4OSw3IEBACiAqIElucHV0czogICAgICAgaW5kZXggdG8gYmxvY2sgdGhhdCB3YXMganVzdCBpbmNyZW1lbnRlZCBhbmQgaXMgYXQgdGhlIG1heAogKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQogKiBEZXNjcmlwdGlvbjogIElmIGFueSBlcmFzZSBjb3VudHMgYXQgTUFYLCBhZGp1c3RzIGVyYXNlIGNvdW50IG9mIGV2ZXJ5Ci0qICAgICAgICAgICAgICAgYmxvY2sgYnkgc3Vic3RyYWN0aW5nIGxlYXN0IHdvcm4KKyogICAgICAgICAgICAgICBibG9jayBieSBzdWJ0cmFjdGluZyBsZWFzdCB3b3JuCiAqICAgICAgICAgICAgICAgY291bnRlciBmcm9tIGNvdW50ZXIgdmFsdWUgb2YgZXZlcnkgZW50cnkgaW4gd2VhciB0YWJsZQogKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KIHN0YXRpYyBpbnQgRlRMX0FkanVzdF9SZWxhdGl2ZV9FcmFzZV9Db3VudCh1MzIgSW5kZXhfb2ZfTUFYKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jCmluZGV4IGQ1NWE4ZTQuLjNlNjhkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0LmMKQEAgLTcxLDcgKzcxLDcgQEAKICNkZWZpbmUgU1lOQVBUSUNTX1JNSTRfREVWSUNFX0NPTlRST0xfRlVOQ19OVU0JKDB4MDEpCiAKIC8qKgotICogc3RydWN0IHN5bmFwdGljc19ybWk0X2ZuX2Rlc2MgLSBjb250YWlucyB0aGUgZnVudGlvbiBkZXNjcmlwdG9yIGluZm9ybWF0aW9uCisgKiBzdHJ1Y3Qgc3luYXB0aWNzX3JtaTRfZm5fZGVzYyAtIGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9yIGluZm9ybWF0aW9uCiAgKiBAcXVlcnlfYmFzZV9hZGRyOiBiYXNlIGFkZHJlc3MgZm9yIHF1ZXJ5CiAgKiBAY21kX2Jhc2VfYWRkcjogYmFzZSBhZGRyZXNzIGZvciBjb21tYW5kCiAgKiBAY3RybF9iYXNlX2FkZHI6IGJhc2UgYWRkcmVzcyBmb3IgY29udHJvbApAQCAtOTIsNyArOTIsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3Qgc3luYXB0aWNzX3JtaTRfZm4gLSBjb250YWlucyB0aGUgZnVudGlvbiBpbmZvcm1hdGlvbgorICogc3RydWN0IHN5bmFwdGljc19ybWk0X2ZuIC0gY29udGFpbnMgdGhlIGZ1bmN0aW9uIGluZm9ybWF0aW9uCiAgKiBAZm5fbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIKICAqIEBudW1fb2ZfZGF0YV9zb3VyY2VzOiBudW1iZXIgb2YgZGF0YSBzb3VyY2VzCiAgKiBAbnVtX29mX2RhdGFfcG9pbnRzOiBudW1iZXIgb2YgZmluZ2VycyB0b3VjaGVkCkBAIC0xNTEsNyArMTUxLDcgQEAKICAqIEBpbnB1dF9kZXY6IHBvaW50ZXIgZm9yIGlucHV0IGRldmljZQogICogQGkyY19jbGllbnQ6IHBvaW50ZXIgZm9yIGkyYyBjbGllbnQKICAqIEBib2FyZDogY29uc3RhbnQgcG9pbnRlciBmb3IgdG91Y2ggcGxhdGZvcm0gZGF0YQotICogQGZuX2xpc3RfbXV0ZXg6IG11dGV4IGZvciBmdW50aW9uIGxpc3QKKyAqIEBmbl9saXN0X211dGV4OiBtdXRleCBmb3IgZnVuY3Rpb24gbGlzdAogICogQHJtaTRfcGFnZV9tdXRleDogbXV0ZXggZm9yIHJtaTQgcGFnZQogICogQGN1cnJlbnRfcGFnZTogdmFyaWFibGUgZm9yIGludGVnZXIKICAqIEBudW1iZXJfb2ZfaW50ZXJydXB0X3JlZ2lzdGVyOiBpbnRlcnJ1cHQgcmVnaXN0ZXJzIGNvdW50CkBAIC0yNzgsNyArMjc4LDcgQEAKIAl0eGJ1ZlswXQk9IGFkZHJlc3MgJiBNQVNLXzhCSVQ7CiAJdHhidWZbMV0JPSBkYXRhOwogCXJldHZhbAkJPSBpMmNfbWFzdGVyX3NlbmQocGRhdGEtPmkyY19jbGllbnQsIHR4YnVmLCAyKTsKLQkvKiBBZGQgaW4gcmV0cnkgb24gd3JpdGVzIG9ubHkgaW4gY2VydGlhbiBlcnJvciByZXR1cm4gdmFsdWVzICovCisJLyogQWRkIGluIHJldHJ5IG9uIHdyaXRlcyBvbmx5IGluIGNlcnRhaW4gZXJyb3IgcmV0dXJuIHZhbHVlcyAqLwogCWlmIChyZXR2YWwgIT0gMikgewogCQlkZXZfZXJyKCZpMmMtPmRldiwgIiVzOmZhaWxlZDolZFxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAJCXJldHZhbCA9IC1FSU87CkBAIC01NjEsNyArNTYxLDcgQEAKIAl9CiAJLyoKIAkgKiAyRCBkYXRhIHNvdXJjZXMgaGF2ZSBvbmx5IDMgYml0cyBmb3IgdGhlIG51bWJlciBvZiBmaW5nZXJzCi0JICogc3VwcG9ydGVkIC0gc28gdGhlIGVuY29kaW5nIGlzIGEgYml0IHdpZXJkLgorCSAqIHN1cHBvcnRlZCAtIHNvIHRoZSBlbmNvZGluZyBpcyBhIGJpdCB3ZWlyZC4KIAkgKi8KIAlpZiAoKHF1ZXJpZXNbMV0gJiBNQVNLXzNCSVQpIDw9IDQpCiAJCS8qIGFkZCAxIHNpbmNlIHplcm8gYmFzZWQgKi8KQEAgLTEwMjcsNyArMTAyNyw3IEBACiAgKiBzeW5hcHRpY3Nfcm1pNF9yZW1vdmUoKSAtIFJlbW92ZXMgdGhlIGkyYy1jbGllbnQgdG91Y2hzY3JlZW4gZHJpdmVyCiAgKiBAY2xpZW50OiBpMmMgY2xpZW50IHN0cnVjdHVyZSBwb2ludGVyCiAgKgotICogVGhpcyBmdW50aW9uIHVzZXMgdG8gcmVtb3ZlIHRoZSBpMmMtY2xpZW50CisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdG8gcmVtb3ZlIHRoZSBpMmMtY2xpZW50CiAgKiB0b3VjaHNjcmVlbiBkcml2ZXIgYW5kIHJldHVybnMgaW50ZWdlci4KICAqLwogc3RhdGljIGludCBfX2RldmV4aXQgc3luYXB0aWNzX3JtaTRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogICogc3luYXB0aWNzX3JtaTRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgdG91Y2ggc2NyZWVuIGNvbnRyb2xsZXIKICAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQogICoKLSAqIFRoaXMgZnVudGlvbiBpcyB1c2VkIHRvIHN1c3BlbmQgdGhlCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3VzcGVuZCB0aGUKICAqIHRvdWNoIHBhbmVsIGNvbnRyb2xsZXIgYW5kIHJldHVybnMgaW50ZWdlcgogICovCiBzdGF0aWMgaW50IHN5bmFwdGljc19ybWk0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTA4OSw3ICsxMDg5LDcgQEAKICAqIHN5bmFwdGljc19ybWk0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSB0b3VjaCBzY3JlZW4gY29udHJvbGxlcgogICogQGRldjogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCiAgKgotICogVGhpcyBmdW50aW9uIGlzIHVzZWQgdG8gcmVzdW1lIHRoZSB0b3VjaCBwYW5lbAorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlc3VtZSB0aGUgdG91Y2ggcGFuZWwKICAqIGNvbnRyb2xsZXIgYW5kIHJldHVybnMgaW50ZWdlci4KICAqLwogc3RhdGljIGludCBzeW5hcHRpY3Nfcm1pNF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIC8qKgogICogc3luYXB0aWNzX3JtaTRfaW5pdCgpIC0gSW5pdGlhbGl6ZSB0aGUgdG91Y2hzY3JlZW4gZHJpdmVyCiAgKgotICogVGhpcyBmdW50aW9uIHVzZXMgdG8gaW5pdGlhbGl6ZXMgdGhlIHN5bmFwdGljcworICogVGhpcyBmdW5jdGlvbiB1c2VzIHRvIGluaXRpYWxpemVzIHRoZSBzeW5hcHRpY3MKICAqIHRvdWNoc2NyZWVuIGRyaXZlciBhbmQgcmV0dXJucyBpbnRlZ2VyLgogICovCiBzdGF0aWMgaW50IF9faW5pdCBzeW5hcHRpY3Nfcm1pNF9pbml0KHZvaWQpCkBAIC0xMTU4LDcgKzExNTgsNyBAQAogLyoqCiAgKiBzeW5hcHRpY3Nfcm1pNF9leGl0KCkgLSBEZS1pbml0aWFsaXplIHRoZSB0b3VjaHNjcmVlbiBkcml2ZXIKICAqCi0gKiBUaGlzIGZ1bnRpb24gdXNlcyB0byBkZS1pbml0aWFsaXplIHRoZSBzeW5hcHRpY3MKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0byBkZS1pbml0aWFsaXplIHRoZSBzeW5hcHRpY3MKICAqIHRvdWNoc2NyZWVuIGRyaXZlciBhbmQgcmV0dXJucyBub25lLgogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3luYXB0aWNzX3JtaTRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oCmluZGV4IDFlMDI3M2UuLjdjYjU4NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmgKQEAgLTM2Niw3ICszNjYsNyBAQAogICogID09PT09PT09IHNtX2ludGVycnVwdF9kc3AgPT09PT09PT0KICAqICBQdXJwb3NlOgogICogICAgICBTZXQgaW50ZXJydXB0IHZhbHVlICYgc2VuZCBhbiBpbnRlcnJ1cHQgdG8gdGhlIERTUCBwcm9jZXNzb3IocykuCi0gKiAgICAgIFRoaXMgaXMgdHlwaWNhbHkgdXNlZCB3aGVuIG1haWxib3ggaW50ZXJydXB0IG1lY2hhbmlzbXMgYWxsb3cgZGF0YQorICogICAgICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHdoZW4gbWFpbGJveCBpbnRlcnJ1cHQgbWVjaGFuaXNtcyBhbGxvdyBkYXRhCiAgKiAgICAgIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBpbnRlcnJ1cHQgc3VjaCBhcyBmb3IgT01BUCdzIENNRC9EQVRBIHJlZ3MuCiAgKiAgUGFyYW1ldGVyczoKICAqICAgICAgZGV2X2NvbnRleHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMKaW5kZXggODM4MTEzMC4uNmQ2NmU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvY2hubF9zbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2Nobmxfc20uYwpAQCAtNTc4LDcgKzU3OCw3IEBACiAJCX0gZWxzZSBpZiAoc3RhdF9zeW5jID09IC1FUEVSTSkgewogCQkJLyogVGhpcyBjYW4gb2NjdXIgd2hlbiB0aGUgdXNlciBtb2RlIHRocmVhZCBpcwogCQkJICogYWJvcnRlZCAoXkMpLCBvciB3aGVuIF9WV0lOMzJfV2FpdFNpbmdsZU9iamVjdCgpCi0JCQkgKiBmYWlscyBkdWUgdG8gdW5rb3duIGNhdXNlcy4gKi8KKwkJCSAqIGZhaWxzIGR1ZSB0byB1bmtub3duIGNhdXNlcy4gKi8KIAkJCS8qIEV2ZW4gdGhvdWdoIFdhaXQgZmFpbGVkLCB0aGVyZSBtYXkgYmUgc29tZXRoaW5nIGluCiAJCQkgKiB0aGUgUTogKi8KIAkJCWlmIChsaXN0X2VtcHR5KCZwY2hubC0+aW9fY29tcGxldGlvbnMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvY2xvYWQuYwppbmRleCAzOTAwNDA5Li5mZTFlZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMKQEAgLTcxOCw3ICs3MTgsNyBAQAogCSAqIGFzIGEgdGVtcG9yYXJ5IGZvciAuZGxsdmlldyByZWNvcmQgY29uc3RydWN0aW9uLgogCSAqIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoZSB3aG9sZSB0YWJsZS4gIEFkZCAxIHRvIHRoZSBzZWN0aW9uIGNvdW50CiAJICogaW4gY2FzZSBhIHRyYW1wb2xpbmUgc2VjdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBhcyB3ZWxsIGFzIHRoZQotCSAqIHNpemUgb2YgdGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBuYW1lIHNvIERMTFZpZXcgZG9lbnMndCBnZXQgbG9zdC4KKwkgKiBzaXplIG9mIHRoZSB0cmFtcG9saW5lIHNlY3Rpb24gbmFtZSBzbyBETExWaWV3IGRvZXNuJ3QgZ2V0IGxvc3QuCiAJICovCiAKIAlzaXogPSBzeW1fY291bnQgKiBzaXplb2Yoc3RydWN0IGxvY2FsX3N5bWJvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmMKaW5kZXggMDE0ZjVkNS4uYzIxNGRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19tbXUuYwpAQCAtNTksNyArNTksNyBAQAogICogUkVUVVJOUzoKICAqCiAgKiAgICAgICBUeXBlCQk6IGh3X3N0YXR1cwotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cmVkCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VycmVkCiAgKgkJCSBSRVRfQkFEX05VTExfUEFSQU0gICAgIC0tIEEgUG9pbnRlcgogICoJCQkJCQlQYXJhbWF0ZXIgd2FzIHNldCB0byBOVUxMCiAgKgpAQCAtMTAyLDcgKzEwMiw3IEBACiAgKiBSRVRVUk5TOgogICoKICAqICAgICAgIFR5cGUJICAgIAk6IGh3X3N0YXR1cwotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cmVkCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VycmVkCiAgKgkJCSBSRVRfQkFEX05VTExfUEFSQU0gICAgIC0tIEEgUG9pbnRlciBQYXJhbWF0ZXIKICAqCQkJCQkJICAgd2FzIHNldCB0byBOVUxMCiAgKgkJCSBSRVRfUEFSQU1fT1VUX09GX1JBTkdFIC0tIElucHV0IFBhcmFtZXRlciBvdXQKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICogUkVUVVJOUzoKICAqCiAgKiAgICAgICBUeXBlCSAgICAJOiBod19zdGF0dXMKLSAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IDAJCSAtLSBObyBlcnJvcnMgb2NjdXJlZAorICogICAgICAgRGVzY3JpcHRpb24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cnJlZAogICoJCQkgUkVUX0JBRF9OVUxMX1BBUkFNICAgICAtLSBBIFBvaW50ZXIgUGFyYW1hdGVyCiAgKgkJCQkJCQl3YXMgc2V0IHRvIE5VTEwKICAqCQkJIFJFVF9QQVJBTV9PVVRfT0ZfUkFOR0UgLS0gSW5wdXQgUGFyYW1ldGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvX2Nobmxfc20uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCmluZGV4IGQ2MGUyNTIuLjZlN2FiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlzOCBjaG5sX21vZGU7CQkvKiBDaG5sIG1vZGUgYW5kIGF0dHJpYnV0ZXMgKi8KIAkvKiBDaG5sIEkvTyBjb21wbGV0aW9uIGV2ZW50ICh1c2VyIG1vZGUpICovCiAJdm9pZCAqdXNlcl9ldmVudDsKLQkvKiBBYnN0cmFjdCBzeW5jcm9uaXphdGlvbiBvYmplY3QgKi8KKwkvKiBBYnN0cmFjdCBzeW5jaHJvbml6YXRpb24gb2JqZWN0ICovCiAJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50OwogCXUzMiBwcm9jZXNzOwkJLyogUHJvY2VzcyB3aGljaCBjcmVhdGVkIHRoaXMgY2hhbm5lbCAqLwogCXUzMiBjYl9hcmc7CQkvKiBBcmd1bWVudCB0byB1c2Ugd2l0aCBjYWxsYmFjayAqLwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBpb19jb21wbGV0aW9uczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfcGFja2V0c19saXN0OwkvKiBMaXN0IG9mIGZyZWUgSXJwcyAqLwogCXN0cnVjdCBudGZ5X29iamVjdCAqbnRmeV9vYmo7Ci0JdTMyIGJ5dGVzX21vdmVkOwkvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJlZCAqLworCXUzMiBieXRlc19tb3ZlZDsJLyogVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkICovCiAKIAkvKiBGb3IgRFNQLURNQSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmgKaW5kZXggYjIzOTUwMy4uNjg1MzQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Nsay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbGsuaApAQCAtNTUsNyArNTUsNyBAQAogICogICAgICBJbml0aWFsaXplcyBwcml2YXRlIHN0YXRlIG9mIENMSyBtb2R1bGUuCiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICogICAgICBDTEsgaW5pdGlhbGl6ZWQuCkBAIC03MSw3ICs3MSw3IEBACiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgogICogICAgICAwOglTdWNjZXNzLgotICoJLUVQRVJNOglFcnJvciBvY2N1cmVkIHdoaWxlIGVuYWJsaW5nIHRoZSBjbG9jay4KKyAqCS1FUEVSTToJRXJyb3Igb2NjdXJyZWQgd2hpbGUgZW5hYmxpbmcgdGhlIGNsb2NrLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKi8KQEAgLTg2LDcgKzg2LDcgQEAKICAqICBQYXJhbWV0ZXJzOgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVBFUk06ICAgICAgRXJyb3Igb2NjdXJlZCB3aGlsZSBkaXNhYmxpbmcgdGhlIGNsb2NrLgorICogICAgICAtRVBFUk06ICAgICAgRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGlzYWJsaW5nIHRoZSBjbG9jay4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY21tLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY21tLmgKaW5kZXggMjdhMjFiNS4uYWZmMjIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW0uaApAQCAtMTkwLDcgKzE5MCw3IEBACiAgKiAgICAgIEluaXRpYWxpemVzIHByaXZhdGUgc3RhdGUgb2YgQ01NIG1vZHVsZS4KICAqICBQYXJhbWV0ZXJzOgogICogIFJldHVybnM6Ci0gKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VyZWQuCisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VycmVkLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKiAgICAgIENNTSBpbml0aWFsaXplZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaAppbmRleCA1M2JkNGJiLi5jYjY4NGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY29kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NvZC5oCkBAIC0yNDksNyArMjQ5LDcgQEAKICAqICBQYXJhbWV0ZXJzOgogICogICAgICBOb25lLgogICogIFJldHVybnM6Ci0gKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VyZWQuCisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VycmVkLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDT0QgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rldi5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rldi5oCmluZGV4IGY0MWU0NzguLmY5MmI0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2LmgKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICogICAgICBJbml0aWFsaXplIERFVidzIHByaXZhdGUgc3RhdGUsIGtlZXBpbmcgYSByZWZlcmVuY2UgY291bnQgb24gZWFjaCBjYWxsLgogICogIFBhcmFtZXRlcnM6CiAgKiAgUmV0dXJuczoKLSAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJlZC4KKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJyZWQuCiAgKiAgUmVxdWlyZXM6CiAgKiAgRW5zdXJlczoKICAqICAgICAgVFJVRTogQSByZXF1aXJlbWVudCBmb3IgdGhlIG90aGVyIHB1YmxpYyBERVYgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rydi5oCmluZGV4IDI1ZWYxYTIuLjljZGJkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHJ2LmgKQEAgLTE1NCw3ICsxNTQsNyBAQAogICogIFBhcmFtZXRlcnM6CiAgKiAgICAgIGRydl9vYmo6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBjcmVhdGVkIERSViBPYmplY3QgaGFuZGxlLgogICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNlc3MKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKICAqICAgICAgLUVOT01FTTogICAgRmFpbGVkIGluIE1lbW9yeSBhbGxvY2F0aW9uCiAgKiAgICAgIC1FUEVSTTogICAgICBHZW5lcmFsIEZhaWx1cmUKICAqICBSZXF1aXJlczoKQEAgLTE3MCw3ICsxNzAsNyBAQAogICogICAgICBUaGVyZSBpcyBvbmUgRHJpdmVyIE9iamVjdCBmb3IgdGhlIERyaXZlciByZXByZXNlbnRpbmcKICAqICAgICAgdGhlIGRyaXZlciBpdHNlbGYuIEl0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGRldmljZQogICogICAgICBPYmplY3RzIGFuZCB0aGUgbGlzdCBvZiBEZXZpY2UgRXh0ZW5zaW9ucyBpbiB0aGUgc3lzdGVtLgotICogICAgICBBbHNvIGl0IGNhbiBob2xkIG90aGVyIG5lY2Nlc3NhcnkKKyAqICAgICAgQWxzbyBpdCBjYW4gaG9sZCBvdGhlciBuZWNlc3NhcnkKICAqICAgICAgaW5mb3JtYXRpb24gaW4gaXRzIHN0b3JhZ2UgYXJlYS4KICAqLwogZXh0ZXJuIGludCBkcnZfY3JlYXRlKHN0cnVjdCBkcnZfb2JqZWN0ICoqZHJ2X29iaik7CkBAIC0xODAsNyArMTgwLDcgQEAKICAqICBQdXJwb3NlOgogICogICAgICBkZXN0cm95cyB0aGUgRGV2IE9iamVjdCBsaXN0LCBEcnZFeHQgbGlzdAogICogICAgICBhbmQgZGVzdHJveSB0aGUgRFJWIG9iamVjdAotICogICAgICBDYWxsZWQgdXBvbiBkcml2ZXIgdW5Mb2FkaW5nLm9yIHVuc3VjY2VzZnVsIGxvYWRpbmcgb2YgdGhlIGRyaXZlci4KKyAqICAgICAgQ2FsbGVkIHVwb24gZHJpdmVyIHVuTG9hZGluZy5vciB1bnN1Y2Nlc3NmdWwgbG9hZGluZyBvZiB0aGUgZHJpdmVyLgogICogIFBhcmFtZXRlcnM6CiAgKiAgICAgIGRyaXZlcl9vYmo6ICAgICBIYW5kbGUgdG8gRHJpdmVyIG9iamVjdCAuCiAgKiAgUmV0dXJuczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVmcy5oCmluZGV4IGMyYmEyNmMuLmVkMzJiZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlZnMuaApAQCAtNTIsNyArNTIsNyBAQAogICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgY29udGV4dC4KICAqICBSZXR1cm5zOgogICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCisgKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VycmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KICAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KICAqICBSZXF1aXJlczoKICAqICAgICAgZGV2X2N0eHQgIT0gTlVMTApAQCAtOTEsNyArOTEsNyBAQAogICogICAgICBkc3BfYWRkcjogICAgICAgRFNQIGFkZHJlc3MgYXQgd2hpY2ggdG8gc3RhcnQgZXhlY3V0aW9uLgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgogICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgogICogIFJlcXVpcmVzOgogICogICAgICBkZXZfY3R4dCAhPSBOVUxMCkBAIC0xNDIsNyArMTQyLDcgQEAKICAqICAgICAgbWVtX3R5cGU6ICAgICAgIE1lbW9yeSBzcGFjZSBvbiBEU1AgdG8gd2hpY2ggdG8gdHJhbnNmZXIuCiAgKiAgUmV0dXJuczoKICAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cnJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCiAgKiAgICAgIC1FUEVSTTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCiAgKiAgUmVxdWlyZXM6CiAgKiAgICAgIGRldl9jdHh0ICE9IE5VTEw7CkBAIC0yMDUsNyArMjA1LDcgQEAKICAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGNvbnRleHQuCiAgKiAgUmV0dXJuczoKICAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cnJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCiAgKiAgICAgIC1FUEVSTTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCiAgKiAgUmVxdWlyZXM6CiAgKiAgICAgIGRldl9jdHh0ICE9IE5VTEwKQEAgLTI0OCw3ICsyNDgsNyBAQAogICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCBmcm9tIHdoaWNoIHRvIHRyYW5zZmVyLgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgogICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgogICogIFJlcXVpcmVzOgogICogICAgICBkZXZfY3R4dCAhPSBOVUxMOwpAQCAtMjc0LDcgKzI3NCw3IEBACiAgKiAgICAgIG1lbV90eXBlOiAgICAgICBNZW1vcnkgc3BhY2Ugb24gRFNQIHRvIHdoaWNoIHRvIHRyYW5zZmVyLgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgogICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgogICogIFJlcXVpcmVzOgogICogICAgICBkZXZfY3R4dCAhPSBOVUxMOwpAQCAtNjAxLDcgKzYwMSw3IEBACiAgKiAgUmV0dXJuczoKICAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOwogICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBjaG5sX29iai4KLSAqICAgICAgLUVUSU1FRE9VVDogVGltZW91dCBvY2N1cmVkIGJlZm9yZSBjaGFubmVsIGNvdWxkIGJlIGlkbGVkLgorICogICAgICAtRVRJTUVET1VUOiBUaW1lb3V0IG9jY3VycmVkIGJlZm9yZSBjaGFubmVsIGNvdWxkIGJlIGlkbGVkLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3IuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3IuaAppbmRleCBlNTA2YzRkLi40N2IwMzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWdyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21nci5oCkBAIC0xNzYsNyArMTc2LDcgQEAKICAqICAgICAgbWdyX2hhbmRsZTogICAgIEhhbmRsZSB0byB0aGUgTWFuYWdlciBPYmplY3QKICAqICAgICAgZGNkX2hhbmRsZTogICAgIFB0ciB0byByZWNlaXZlIHRoZSBEQ0QgSGFuZGxlLgogICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNlc3MKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKICAqICAgICAgLUVQRVJNOiAgICAgIEZhaWx1cmUgdG8gZ2V0IHRoZSBIYW5kbGUKICAqICBSZXF1aXJlczoKICAqICAgICAgTUdSIGlzIGluaXRpYWxpemVkLgpAQCAtMTk1LDcgKzE5NSw3IEBACiAgKiAgICAgIGNhbGwuIEluaXRpYWxpemVzIHRoZSBEQ0QuCiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICogICAgICBUUlVFOiBBIHJlcXVpcmVtZW50IGZvciB0aGUgb3RoZXIgcHVibGljIE1HUiBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaAppbmRleCA1M2RhMGVmLi4xNjM3MWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqICAgICAgLUVTUElQRTogICAgICAgIGlBbGcgZnVuY3Rpb25zIG5vdCBmb3VuZCBmb3IgYSBEQUlTIG5vZGUuCiAgKiAgICAgIC1FRE9NOiAgICAgICAgIGF0dHJfaW4gIT0gTlVMTCBhbmQgYXR0cl9pbi0+cHJpbyBvdXQgb2YKICAqICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS4KLSAqICAgICAgLUVQRVJNOiAgICAgICAgICBBIGZhaWx1cmUgb2NjdXJlZCwgdW5hYmxlIHRvIGFsbG9jYXRlIG5vZGUuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgQSBmYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gYWxsb2NhdGUgbm9kZS4KICAqICAgICAgLUVCQURSOiAgICBQcm9jY2Vzc29yIGlzIG5vdCBpbiB0aGUgcnVubmluZyBzdGF0ZS4KICAqICBSZXF1aXJlczoKICAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvYy5oCmluZGV4IDVlMDlmZDEuLmYwMGRmZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2MuaApAQCAtODksNyArODksNyBAQAogICogIFJldHVybnM6CiAgKiAgICAgIDAgICAgIDogICAgICAgU1VDQ0VTUwogICogICAgICAtRUZBVUxUIDogICAgICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgVGltZW91dCBPY2N1cmVkIGJlZm9yZSB0aGUgQ29udHJvbCBpbmZvcm1hdGlvbgorICogICAgICAtRVRJTUU6ICAgICAgIEEgVGltZW91dCBPY2N1cnJlZCBiZWZvcmUgdGhlIENvbnRyb2wgaW5mb3JtYXRpb24KICAqCQkJICBjb3VsZCBiZSBzZW50LgogICogICAgICAtRVBFUk0gICA6ICAgICAgIEdlbmVyYWwgRmFpbHVyZS4KICAqICBSZXF1aXJlczoKQEAgLTE2OSw3ICsxNjksNyBAQAogICogICAgICAwICAgICA6ICAgICAgIFN1Y2Nlc3MuCiAgKiAgICAgIC1FRkFVTFQgOiAgICAgICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCiAgKiAgICAgIC1FQkFEUjogICAgVGhlIHByb2Nlc3NvciBpcyBub3QgaW4gdGhlIFBST0NfUlVOTklORyBzdGF0ZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQgdG8gdGhlCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZCB0byB0aGUKICAqCQkJICBxdWVycnkuCiAgKiAgICAgIC1FUEVSTSAgIDogICAgICAgVW5hYmxlIHRvIGdldCBSZXNvdXJjZSBJbmZvcm1hdGlvbgogICogIFJlcXVpcmVzOgpAQCAtMjI5LDcgKzIyOSw3IEBACiAgKiAgICAgIGNhbGwuCiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICogICAgICBUUlVFOiBBIHJlcXVpcmVtZW50IGZvciB0aGUgb3RoZXIgcHVibGljIFBST0MgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oCmluZGV4IDVlM2FiMjEuLjBmYjA2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wd3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHdyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgogICogICAgICAwOiBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhc2xlZXAuCiAgKiAgICAgIC1FSU5WQUw6ICAgIFRoZSBzcGVjaWZpZWQgc2xlZXBfY29kZSBpcyBub3Qgc3VwcG9ydGVkLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIHdoaWxlIHdhaXRpbmcgZm9yIERTUCBzbGVlcAorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCB3aGlsZSB3YWl0aW5nIGZvciBEU1Agc2xlZXAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCiAgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCBzbGVlcCBjb21tYW5kIHRvCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERTUC4KQEAgLTY3LDcgKzY3LDcgQEAKICAqICBSZXR1cm5zOgogICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCiAgKiAgICAgIDA6ICBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhd2FrZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciB3YWtlCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCiAgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCB3YWtlIGNvbW1hbmQgdG8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQLgpAQCAtODUsNyArODUsNyBAQAogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KICAqICAgICAgMDogIFN1Y2Nlc3MsIGJ1dCB0aGUgRFNQIHdhcyBhbHJlYWR5IGF3YWtlLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgd2hpbGUgd2FpdGluZyBmb3Igd2FrZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbi4KICAqICAgICAgLUVQRVJNOiAgICAgICAgICBHZW5lcmFsIGZhaWx1cmUsIHVuYWJsZSB0byBzZW5kIHdha2UgY29tbWFuZCB0bwogICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBEU1AuCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqICBSZXR1cm5zOgogICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCiAgKiAgICAgIDA6ICBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhd2FrZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciB3YWtlCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCiAgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCB3YWtlIGNvbW1hbmQgdG8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYwppbmRleCA5YTM4ZDg2Li41MjI4MTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYwpAQCAtNzg3LDcgKzc4Nyw3IEBACiAKIAkvKgogCSAqIEZJWE1FOiB0aGlzIGNvZGUgbmVlZHMgc3RydWN0IHByb2Nfb2JqZWN0IHRvIGhhdmUgYSBsaXN0X2hlYWQKLQkgKiBhdCB0aGUgYmVnaW5pbmcuIElmIG5vdCwgdGhpcyBjYW4gZ28gaG9ycmlibHkgd3JvbmcuCisJICogYXQgdGhlIGJlZ2lubmluZy4gSWYgbm90LCB0aGlzIGNhbiBnbyBob3JyaWJseSB3cm9uZy4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoKGN1cnIsICZkZXZfb2JqLT5wcm9jX2xpc3QpCiAJCXByb2Nfbm90aWZ5X2NsaWVudHMoKHZvaWQgKiljdXJyLCByZXQpOwpAQCAtODEwLDcgKzgxMCw3IEBACiAJaWYgKCFkZXZfbm9kZV9vYmopCiAJCXN0YXR1cyA9IC1FRkFVTFQ7CiAKLQkvKiBSZXRyaWV2ZSB0aGUgZGV2aWNlIG9iamVjdCBoYW5kbGUgb3JpZ2luYWx5IHN0b3JlZCB3aXRoCisJLyogUmV0cmlldmUgdGhlIGRldmljZSBvYmplY3QgaGFuZGxlIG9yaWdpbmFsbHkgc3RvcmVkIHdpdGgKIAkgKiB0aGUgZGV2X25vZGU6ICovCiAJaWYgKCFzdGF0dXMpIHsKIAkJLyogY2hlY2sgdGhlIGRldmljZSBzdHJpbmcgYW5kIHRoZW4gc3RvcmUgZGV2IG9iamVjdCAqLwpAQCAtOTg2LDcgKzk4Niw3IEBACiAJLyogQWRkIERldk9iamVjdCB0byB0YWlsLiAqLwogCS8qCiAJICogRklYTUU6IHRoaXMgY29kZSBuZWVkcyBzdHJ1Y3QgcHJvY19vYmplY3QgdG8gaGF2ZSBhIGxpc3RfaGVhZAotCSAqIGF0IHRoZSBiZWdpbmluZy4gSWYgbm90LCB0aGlzIGNhbiBnbyBob3JyaWJseSB3cm9uZy4KKwkgKiBhdCB0aGUgYmVnaW5uaW5nLiBJZiBub3QsIHRoaXMgY2FuIGdvIGhvcnJpYmx5IHdyb25nLgogCSAqLwogCWxpc3RfYWRkX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKilwcm9jX29iaiwgJmRldl9vYmotPnByb2NfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKaW5kZXggOGM4ODU4My4uZGI4MjE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKQEAgLTYwOSw3ICs2MDksNyBAQAogCURCQ19SRVFVSVJFKGRldl9ub2RlX3N0cmcgIT0gTlVMTCk7CiAKIAkvKgotCSAqICBBbGxvY2F0ZSBtZW1vcnkgdG8gaG9sZCB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgbGl2ZSB1bnRpbGwKKwkgKiAgQWxsb2NhdGUgbWVtb3J5IHRvIGhvbGQgdGhlIHN0cmluZy4gVGhpcyB3aWxsIGxpdmUgdW50aWwKIAkgKiAgaXQgaXMgZnJlZWQgaW4gdGhlIFJlbGVhc2UgcmVzb3VyY2VzLiBVcGRhdGUgdGhlIGRyaXZlciBvYmplY3QKIAkgKiAgbGlzdC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYwppbmRleCBmYjVjMmJhLi4wZTcwY2JhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivbmxkci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYwpAQCAtNTcsOSArNTcsOSBAQAogICogICB1dXV1dXV1dXxmdWVlZWVlZXxmdWRkZGRkZHxmdWNjY2NjY3wKICAqICB3aGVyZQogICogICAgICB1ID0gdW51c2VkCi0gKiAgICAgIGNjY2NjYyA9IHByZWZlcmVkL3JlcXVpcmVkIGR5bmFtaWMgbWVtIHNlZ2lkIGZvciBjcmVhdGUgcGhhc2UgZGF0YS9jb2RlCi0gKiAgICAgIGRkZGRkZCA9IHByZWZlcmVkL3JlcXVpcmVkIGR5bmFtaWMgbWVtIHNlZ2lkIGZvciBkZWxldGUgcGhhc2UgZGF0YS9jb2RlCi0gKiAgICAgIGVlZWVlZSA9IHByZWZlcmVkL3JlcS4gZHluYW1pYyBtZW0gc2VnaWQgZm9yIGV4ZWN1dGUgcGhhc2UgZGF0YS9jb2RlCisgKiAgICAgIGNjY2NjYyA9IHByZWZlcnJlZC9yZXF1aXJlZCBkeW5hbWljIG1lbSBzZWdpZCBmb3IgY3JlYXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBkZGRkZGQgPSBwcmVmZXJyZWQvcmVxdWlyZWQgZHluYW1pYyBtZW0gc2VnaWQgZm9yIGRlbGV0ZSBwaGFzZSBkYXRhL2NvZGUKKyAqICAgICAgZWVlZWVlID0gcHJlZmVycmVkL3JlcS4gZHluYW1pYyBtZW0gc2VnaWQgZm9yIGV4ZWN1dGUgcGhhc2UgZGF0YS9jb2RlCiAgKiAgICAgIGYgPSBmbGFnIGluZGljYXRpbmcgaWYgbWVtb3J5IGlzIHByZWZlcnJlZCBvciByZXF1aXJlZDoKICAqCSAgZiA9IDEgaWYgcmVxdWlyZWQsIGYgPSAwIGlmIHByZWZlcnJlZC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9wcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9wcm9jLmMKaW5kZXggYzRlNWM0ZTAuLjI0MmRkMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9wcm9jLmMKQEAgLTE2NzAsNyArMTY3MCw3IEBACiAJaWYgKCFzdGF0dXMpIHsKIAkJZGV2X2RiZyhicmlkZ2UsICIlczogcHJvY2Vzc29yIGluIHN0YW5kYnkgbW9kZVxuIiwgX19mdW5jX18pOwogCQlwX3Byb2Nfb2JqZWN0LT5wcm9jX3N0YXRlID0gUFJPQ19TVE9QUEVEOwotCQkvKiBEZXN0b3J5IHRoZSBOb2RlIE1hbmFnZXIsIG1zZ19jdHJsIE1hbmFnZXIgKi8KKwkJLyogRGVzdHJveSB0aGUgTm9kZSBNYW5hZ2VyLCBtc2dfY3RybCBNYW5hZ2VyICovCiAJCWlmICghKGRldl9kZXN0cm95MihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqKSkpIHsKIAkJCS8qIERlc3Ryb3kgdGhlIG1zZ19jdHJsIGJ5IGNhbGxpbmcgbXNnX2RlbGV0ZSAqLwogCQkJZGV2X2dldF9tc2dfbWdyKHBfcHJvY19vYmplY3QtPmRldl9vYmosICZobXNnX21ncik7CkBAIC0xODI3LDcgKzE4MjcsNyBAQAogCiAJLyogVGhpcyBpcyBuZWVkZWQgb25seSB3aGVuIERldmljZSBpcyBsb2FkZWQgd2hlbiBpdCBpcwogCSAqIGFscmVhZHkgJ0FDVElWRScgKi8KLQkvKiBEZXN0b3J5IHRoZSBOb2RlIE1hbmFnZXIsIG1zZ19jdHJsIE1hbmFnZXIgKi8KKwkvKiBEZXN0cm95IHRoZSBOb2RlIE1hbmFnZXIsIG1zZ19jdHJsIE1hbmFnZXIgKi8KIAlpZiAoIWRldl9kZXN0cm95Mihwcm9jX29iai0+ZGV2X29iaikpIHsKIAkJLyogRGVzdHJveSB0aGUgbXNnX2N0cmwgYnkgY2FsbGluZyBtc2dfZGVsZXRlICovCiAJCWRldl9nZXRfbXNnX21ncihwcm9jX29iai0+ZGV2X29iaiwgJmhtc2dfbWdyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXZpZGVvLmMgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC12aWRlby5jCmluZGV4IGM4MGEzMTYuLjE3ZGI2NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXZpZGVvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdmlkZW8uYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJaWYgKCFidWYpCiAJCXJldHVybjsKIAotCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWxsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLworCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCiAJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOwogCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3R0eS9jZDE4NjUuaCBiL2RyaXZlcnMvc3RhZ2luZy90dHkvY2QxODY1LmgKaW5kZXggOTk0MDk2Ni4uOGMyYWQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3R0eS9jZDE4NjUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2NkMTg2NS5oCkBAIC05LDcgKzksNyBAQAogICogICAgICBQbGVhc2UgRE8gY29udGFjdCBpbzgtbGludXhAc3BlY2lhbGl4LmNvLnVrIGlmIHlvdSByZXF1aXJlCiAgKiAgICAgIHN1cHBvcnQuCiAgKgotICogICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcHBlZCBpbiB0aGUgQml0V2l6YXJkIGxpbnV4IGRldmljZQorICogICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGluIHRoZSBCaXRXaXphcmQgbGludXggZGV2aWNlCiAgKiAgICAgIGRyaXZlciBzZXJ2aWNlLiBJZiB5b3UgcmVxdWlyZSBhIGxpbnV4IGRldmljZSBkcml2ZXIgZm9yIHlvdXIKICAqICAgICAgcHJvZHVjdCwgcGxlYXNlIGNvbnRhY3QgZGV2aWNlc0BCaXRXaXphcmQubmwgZm9yIGEgcXVvdGUuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3R0eS9lcGNhLmMgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2VwY2EuYwppbmRleCA3YWQzNjM4Li43ZjEzNjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L2VwY2EuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2VwY2EuYwpAQCAtNyw3ICs3LDcgQEAKIAkqKiBUaGlzIGRyaXZlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IERpZ2kgKioKIAogCU11Y2ggb2YgdGhpcyBkZXNpZ24gYW5kIGNvZGUgY2FtZSBmcm9tIGVwY2EuYyB3aGljaCB3YXMKLQljb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgVHJveSBEZSBKb25naCwgYW5kIHN1YnNxdWVudGx5CisJY29weXJpZ2h0IChDKSAxOTk0LCAxOTk1IFRyb3kgRGUgSm9uZ2gsIGFuZCBzdWJzZXF1ZW50bHkKIAltb2RpZmllZCBieSBEYXZpZCBOdWdlbnQsIENocmlzdG9waCBMYW1ldGVyLCBNaWtlIE1jTGFnYW4uCiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDcxLDcgKzQ3MSw3IEBACiAJbWVtb2ZmKGNoKTsKIAogCS8qCi0JICogVGhlIGNoYW5uZWwgaGFzIG9mZmljaWFseSBiZWVuIGNsb3NlZC4gVGhlIG5leHQgdGltZSBpdCBpcyBvcGVuZWQgaXQKKwkgKiBUaGUgY2hhbm5lbCBoYXMgb2ZmaWNpYWxseSBiZWVuIGNsb3NlZC4gVGhlIG5leHQgdGltZSBpdCBpcyBvcGVuZWQgaXQKIAkgKiB3aWxsIGhhdmUgdG8gcmVpbml0aWFsaXplZC4gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGlzLgogCSAqLwogCS8qIFByZXZlbnQgZnV0dXJlIERpZ2kgcHJvZ3JhbW1lZCBpbnRlcnJ1cHRzIGZyb20gY29taW5nIGFjdGl2ZSAqLwpAQCAtOTc1LDcgKzk3NSw3IEBACiAKIAkvKgogCSAqIE5vdGUgOiBJZiBsaWxvIHdhcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyIGFuZCB0aGUgaWdub3JlCi0JICogZXBjYWNvbmZpZyBvcHRpb24gd2FzIGNob29zZW4gKGRpZ2llcGNhPTIpIHRoZW4gbmJkZXZzIGFuZCBudW1fY2FyZHMKKwkgKiBlcGNhY29uZmlnIG9wdGlvbiB3YXMgY2hvc2VuIChkaWdpZXBjYT0yKSB0aGVuIG5iZGV2cyBhbmQgbnVtX2NhcmRzCiAJICogd2lsbCBlcXVhbCAwIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgb2theTsgUENJIGNhcmRzIHdpbGwgc3RpbGwgYmUKIAkgKiBwaWNrZWQgdXAgaWYgZGV0ZWN0ZWQuCiAJICovCkBAIC0xMjMwLDE0ICsxMjMwLDE0IEBACiAJbWVtYWRkciA9IGJkLT5yZV9tYXBfbWVtYmFzZTsKIAogCS8qCi0JICogVGhlIGJlbG93IGFzc2lnbm1lbnQgd2lsbCBzZXQgYmMgdG8gcG9pbnQgYXQgdGhlIEJFR0lOSU5HIG9mIHRoZQorCSAqIFRoZSBiZWxvdyBhc3NpZ25tZW50IHdpbGwgc2V0IGJjIHRvIHBvaW50IGF0IHRoZSBCRUdJTk5JTkcgb2YgdGhlCiAJICogY2FyZHMgY2hhbm5lbCBzdHJ1Y3R1cmVzLiBGb3IgMSBjYXJkIHRoZXJlIHdpbGwgYmUgYmV0d2VlbiA4IGFuZCA2NAogCSAqIG9mIHRoZXNlIHN0cnVjdHVyZXMuCiAJICovCiAJYmMgPSBtZW1hZGRyICsgQ0hBTlNUUlVDVDsKIAogCS8qCi0JICogVGhlIGJlbG93IGFzc2lnbm1lbnQgd2lsbCBzZXQgZ2QgdG8gcG9pbnQgYXQgdGhlIEJFR0lOSU5HIG9mIGdsb2JhbAorCSAqIFRoZSBiZWxvdyBhc3NpZ25tZW50IHdpbGwgc2V0IGdkIHRvIHBvaW50IGF0IHRoZSBCRUdJTk5JTkcgb2YgZ2xvYmFsCiAJICogbWVtb3J5IGFkZHJlc3MgMHhjMDAuIFRoZSBmaXJzdCBkYXRhIGluIHRoYXQgZ2xvYmFsIG1lbW9yeSBhY3R1YWxseQogCSAqIHN0YXJ0cyBhdCBhZGRyZXNzIDB4YzFhLiBUaGUgY29tbWFuZCBpbiBwb2ludGVyIGJlZ2lucyBhdCAweGQxMC4KIAkgKi8KQEAgLTE0OTIsNyArMTQ5Miw3IEBACiAJCS8qCiAJCSAqIFRoZSB0d28gYXNzaWdubWVudHMgYmVsb3cgZ2V0IHRoZSBjdXJyZW50IG1vZGVtIHN0YXR1cwogCQkgKiAobXN0YXQpIGFuZCB0aGUgcHJldmlvdXMgbW9kZW0gc3RhdHVzIChsc3RhdCkuIFRoZXNlIGFyZQotCQkgKiB1c2VmdWwgYmVjdWFzZSBhbiBldmVudCBjb3VsZCBzaWduYWwgYSBjaGFuZ2UgaW4gbW9kZW0KKwkJICogdXNlZnVsIGJlY2F1c2UgYW4gZXZlbnQgY291bGQgc2lnbmFsIGEgY2hhbmdlIGluIG1vZGVtCiAJCSAqIHNpZ25hbHMgaXRzZWxmLgogCQkgKi8KIAkJbXN0YXQgPSByZWFkYihldmVudGJ1ZiArIDIpOwpAQCAtMTg5Nyw3ICsxODk3LDcgQEAKIAkJLyoKIAkJICogRXZlbiBpZiBoZWFkIGhhcyB3cmFwcGVkIGFyb3VuZCBvbmx5IHJlcG9ydCB0aGUgYW1vdW50IG9mCiAJCSAqIGRhdGEgdG8gYmUgZXF1YWwgdG8gdGhlIHNpemUgLSB0YWlsLiBSZW1lbWJlciBtZW1jcHkgY2FuJ3QKLQkJICogYXV0b21hdGljbHkgd3JhcCBhcm91bmQgdGhlIHJlY2VpdmUgYnVmZmVyLgorCQkgKiBhdXRvbWF0aWNhbGx5IHdyYXAgYXJvdW5kIHRoZSByZWNlaXZlIGJ1ZmZlci4KIAkJICovCiAJCWRhdGFUb1JlYWQgPSAod3JhcGdhcCA8IGJ5dGVzQXZhaWxhYmxlKSA/IHdyYXBnYXAKIAkJCQkJCQk6IGJ5dGVzQXZhaWxhYmxlOwpAQCAtMjU0Myw3ICsyNTQzLDcgQEAKIAkJCQkJYnJlYWs7CiAJCQkvKgogCQkJICogSWYgdGhlIGluZGV4IGluY3JlbWVudGVkIGFib3ZlIHJlZmVycyB0byBhCi0JCQkgKiBsZWdpdGFtYXRlIGJvYXJkIHR5cGUgc2V0IGl0IGhlcmUuCisJCQkgKiBsZWdpdGltYXRlIGJvYXJkIHR5cGUgc2V0IGl0IGhlcmUuCiAJCQkgKi8KIAkJCWlmIChpbmRleCA8IEVQQ0FfTlVNX1RZUEVTKQogCQkJCWJvYXJkLnR5cGUgPSBsb29wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaTJody5oIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaTJody5oCmluZGV4IGMwYmE2YzAuLjhkZjJmNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2kyaHcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2lwMi9pMmh3LmgKQEAgLTMzNSw3ICszMzUsNyBAQAogaW4gZmFjdCBnZW5lcmF0ZXMgYSByZXNldCBwdWxzZSBvbiB0aGUgYm9hcmQuIFRoaXMgcHVsc2UgaXMgZ3VhcmFudGVlZCB0byBsYXN0CiBsZXNzIHRoYW4gMTAgbWlsbGlzZWNvbmRzLiBUaGUgYWRkaXRpb25hbCBkZWxheSBlbnN1cmVzIHRoZSAxNDAwIGhhcyBoYWQgdGhlCiBjaGFuY2UgdG8gcmVzcG9uZCBzdWZmaWNpZW50bHkgdG8gdGhlIGZpcnN0IHJlc2V0LiBXaHkgbm90IGEgbG9uZ2VyIGRlbGF5PyBNdWNoCi1tb3JlIHRoYW4gNTAgbWlsbGlzZWNvbmRzIGdldHMgdG8gYmUgbm90aWNhYmxlLCBidXQgdGhlIGJvYXJkIHdvdWxkIHN0aWxsIHdvcmsuCittb3JlIHRoYW4gNTAgbWlsbGlzZWNvbmRzIGdldHMgdG8gYmUgbm90aWNlYWJsZSwgYnV0IHRoZSBib2FyZCB3b3VsZCBzdGlsbCB3b3JrLgogCiBPbmNlIGFsbCAxNiBieXRlcyBvZiB0aGUgUG93ZXItb24gUmVzZXQgTWVzc2FnZSBoYXZlIGJlZW4gcmVhZCwgdGhlIGJvb3RzdHJhcAogZmlybXdhcmUgaXMgcmVhZHkgdG8gcmVjZWl2ZSBsb2Fkd2FyZS4KQEAgLTM5OSw3ICszOTksNyBAQAogCQkvLyBleHBhbmRhYmxlIHByb2R1Y3RzIG11c3QgcmVwb3J0IGEgTUFQIG9mIGF2YWlsYWJsZSBjaGFubmVscy4gU2luY2UgCiAJCS8vIGVhY2ggVUFSVCBzdXBwb3J0cyBmb3VyIHBvcnRzLCB3ZSByZXByZXNlbnQgZWFjaCBVQVJUIGZvdW5kIGJ5IGEKIAkJLy8gc2luZ2xlIGJpdC4gVXNpbmcgdHdvIGJ5dGVzIHRvIHN1cHBseSB0aGUgbWFwcGluZyBpbmZvcm1hdGlvbiB3ZQotCQkvLyByZXBvcnQgdGhlIHByZXNlbnNlIG9yIGFic2Vuc2Ugb2YgdXAgdG8gMTYgVUFSVFMsIG9yIDY0IHBvcnRzIGluCisJCS8vIHJlcG9ydCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB1cCB0byAxNiBVQVJUUywgb3IgNjQgcG9ydHMgaW4KIAkJLy8gc3RlcHMgb2YgNCBwb3J0cy4gRm9yIC1JSUVYIHByb2R1Y3RzLCB0aGUgcG9ydHMgYXJlIG51bWJlcmVkCiAJCS8vIHN0YXJ0aW5nIGF0IHRoZSBib3ggY2xvc2VzdCB0byB0aGUgY29udHJvbGxlciBpbiB0aGUgImNoYWluIi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaTJsaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2kybGliLmMKaW5kZXggMGQxMGI4OS4uMTNhM2NhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaTJsaWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2lwMi9pMmxpYi5jCkBAIC04MjEsNyArODIxLDcgQEAKIC8vCiAvLyBEZXNjcmlwdGlvbjoKIC8vIFN0cmlwcyBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBhbmQgd3JpdGVzIGl0IHRvIHBEZXN0LiBJZiB0aGVyZSBpcyBhCi0vLyBjb2xsb3NhbCBibHVuZGVyLCAoaW52YWxpZCBzdHJ1Y3R1cmUgcG9pbnRlcnMgb3IgdGhlIGxpa2UpLCByZXR1cm5zIC0xLgorLy8gY29sb3NzYWwgYmx1bmRlciwgKGludmFsaWQgc3RydWN0dXJlIHBvaW50ZXJzIG9yIHRoZSBsaWtlKSwgcmV0dXJucyAtMS4KIC8vIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogc3RhdGljIGludApAQCAtOTA5LDcgKzkwOSw3IEBACiAvLyBSZXR1cm5zOiAgICBOdW1iZXIgb2YgYnl0ZXMgc3RyaXBwZWQsIG9yIC0xIGZvciBlcnJvcgogLy8KIC8vIERlc2NyaXB0aW9uOgotLy8gU3RyaXBzIGFueSBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlci4gSWYgdGhlcmUgaXMgYSBjb2xsb3NhbCBibHVuZGVyLAorLy8gU3RyaXBzIGFueSBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlci4gSWYgdGhlcmUgaXMgYSBjb2xvc3NhbCBibHVuZGVyLAogLy8gKGludmFsaWQgc3RydWN0dXJlIHBvaW50ZXJzIG9yIHRoZSBsaWtlKSwgcmV0dXJucyAtMS4gT3RoZXJ3aXNlLCByZXR1cm5zIHRoZQogLy8gbnVtYmVyIG9mIGJ5dGVzIHN0cmlwcGVkLgogLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk2Myw3ICs5NjMsNyBAQAogLy8gUmV0dXJuczogICAgTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgb3IgLTEgZm9yIGVycm9yCiAvLwogLy8gRGVzY3JpcHRpb246Ci0vLyBJZiB0aGVyZSBpcyBhIGNvbGxvc2FsIGJsdW5kZXIsIChpbnZhbGlkIHN0cnVjdHVyZSBwb2ludGVycyBvciB0aGUgbGlrZSksCisvLyBJZiB0aGVyZSBpcyBhIGNvbG9zc2FsIGJsdW5kZXIsIChpbnZhbGlkIHN0cnVjdHVyZSBwb2ludGVycyBvciB0aGUgbGlrZSksCiAvLyByZXR1cm5zIC0xLiBPdGhlcndpc2UsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzdHJpcHBlZC4gT3RoZXJ3aXNlLAogLy8gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyLgogLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAvLwogLy8gRGVzY3JpcHRpb246CiAvLyBRdWV1ZXMgdGhlIGRhdGEgYXQgcFNvdXJjZSB0byBiZSBzZW50IGFzIGRhdGEgcGFja2V0cyB0byB0aGUgYm9hcmQuIElmIHRoZXJlCi0vLyBpcyBhIGNvbGxvc2FsIGJsdW5kZXIsIChpbnZhbGlkIHN0cnVjdHVyZSBwb2ludGVycyBvciB0aGUgbGlrZSksIHJldHVybnMgLTEuCisvLyBpcyBhIGNvbG9zc2FsIGJsdW5kZXIsIChpbnZhbGlkIHN0cnVjdHVyZSBwb2ludGVycyBvciB0aGUgbGlrZSksIHJldHVybnMgLTEuCiAvLyBPdGhlcndpc2UsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiBXaGF0IGlmIHRoZXJlIGlzIG5vdCBlbm91Z2gKIC8vIHJvb20gZm9yIGFsbCB0aGUgZGF0YT8gSWYgcENoLT5jaGFubmVsT3B0aW9ucyAmIENPX05CTE9DS19XUklURSBpcyBzZXQsIHRoZW4KIC8vIHdlIHRyYW5zZmVyIGFzIG1hbnkgY2hhcmFjdGVycyBhcyB3ZSBjYW4gbm93LCB0aGVuIHJldHVybi4gSWYgdGhpcyBiaXQgaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2lwMm1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2lwMm1haW4uYwppbmRleCBlYTdhOGZiLi5iYTA3NGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L2lwMi9pcDJtYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaXAybWFpbi5jCkBAIC0xODI0LDcgKzE4MjQsNyBAQAogLy8JCWlwMnRyYWNlIChDSEFOTiwgSVRSQ19QVVRDLCAxMCwgMSwgc3RyaXAgKTsKIAogCQkvLwotCQkvLyBXZSBtYXkgbmVlZCB0byByZXN0YXJ0IGkyT3V0cHV0IGlmIGl0IGRvZXMgbm90IGZ1bGxmaWxsIHRoaXMgcmVxdWVzdAorCQkvLyBXZSBtYXkgbmVlZCB0byByZXN0YXJ0IGkyT3V0cHV0IGlmIGl0IGRvZXMgbm90IGZ1bGZpbGwgdGhpcyByZXF1ZXN0CiAJCS8vCiAJCXN0cmlwID0gaTJPdXRwdXQoIHBDaCwgcENoLT5QYnVmLCBwQ2gtPlBidWZfc3R1ZmYpOwogCQlpZiAoIHN0cmlwICE9IHBDaC0+UGJ1Zl9zdHVmZiApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jCmluZGV4IDE3YTFiZTUuLjVjMzU5OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXguYwpAQCAtOSw3ICs5LDcgQEAKICAqICAgICAgc3VwcG9ydC4gQnV0IHBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIChzcGVjaWFsaXgudHh0KQogICogICAgICBmaXJzdC4KICAqCi0gKiAgICAgIFRoaXMgZHJpdmVyIHdhcyBkZXZlbG9wcGVkIGluIHRoZSBCaXRXaXphcmQgbGludXggZGV2aWNlCisgKiAgICAgIFRoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgaW4gdGhlIEJpdFdpemFyZCBsaW51eCBkZXZpY2UKICAqICAgICAgZHJpdmVyIHNlcnZpY2UuIElmIHlvdSByZXF1aXJlIGEgbGludXggZGV2aWNlIGRyaXZlciBmb3IgeW91cgogICogICAgICBwcm9kdWN0LCBwbGVhc2UgY29udGFjdCBkZXZpY2VzQEJpdFdpemFyZC5ubCBmb3IgYSBxdW90ZS4KICAqCkBAIC05NzgsNyArOTc4LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAlzeF9vdXQoYnAsIENEMTg2eF9DQVIsIHBvcnRfTm8ocG9ydCkpOwogCi0JLyogVGhlIFNwZWNpYWxpeCBib2FyZCBkb2Vucyd0IGltcGxlbWVudCB0aGUgUlRTIGxpbmVzLgorCS8qIFRoZSBTcGVjaWFsaXggYm9hcmQgZG9lc24ndCBpbXBsZW1lbnQgdGhlIFJUUyBsaW5lcy4KIAkgICBUaGV5IGFyZSB1c2VkIHRvIHNldCB0aGUgSVJRIGxldmVsLiBEb24ndCB0b3VjaCB0aGVtLiAqLwogCWlmIChzeF9jcnRzY3RzKHR0eSkpCiAJCXBvcnQtPk1TVlIgPSBNU1ZSX0RUUiB8IChzeF9pbihicCwgQ0QxODZ4X01TVlIpICYgTVNWUl9SVFMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXhfaW84LmggYi9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeF9pbzguaAppbmRleCBjNjMwMDUyLi4xMjE1ZDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeF9pbzguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeF9pbzguaApAQCAtMTAsNyArMTAsNyBAQAogICogICAgICBQbGVhc2UgRE8gY29udGFjdCBpbzgtbGludXhAc3BlY2lhbGl4LmNvLnVrIGlmIHlvdSByZXF1aXJlCiAgKiAgICAgIHN1cHBvcnQuCiAgKgotICogICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcHBlZCBpbiB0aGUgQml0V2l6YXJkIGxpbnV4IGRldmljZQorICogICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGluIHRoZSBCaXRXaXphcmQgbGludXggZGV2aWNlCiAgKiAgICAgIGRyaXZlciBzZXJ2aWNlLiBJZiB5b3UgcmVxdWlyZSBhIGxpbnV4IGRldmljZSBkcml2ZXIgZm9yIHlvdXIKICAqICAgICAgcHJvZHVjdCwgcGxlYXNlIGNvbnRhY3QgZGV2aWNlc0BCaXRXaXphcmQubmwgZm9yIGEgcXVvdGUuCiAgKgpAQCAtNzksNyArNzksNyBAQAogCiAjZGVmaW5lIFNQRUNJQUxJWF9NQUdJQwkJMHgwOTA3CiAKLSNkZWZpbmUgU1hfQ0NSX1RJTUVPVVQgMTAwMDAgICAvKiBDQ1IgdGltZW91dC4gWW91IG1heSBuZWVkIHRvIHdhaXQgdXB0bworI2RlZmluZSBTWF9DQ1JfVElNRU9VVCAxMDAwMCAgIC8qIENDUiB0aW1lb3V0LiBZb3UgbWF5IG5lZWQgdG8gd2FpdCB1cCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIGludGVybmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yIGlzIGF2YWlsYWJsZSBhZ2FpbiBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBnaXZlIGl0IGEgY29tbWFuZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwppbmRleCA4MjE0YzM1Li5iY2U3ZDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwpAQCAtMjIwLDggKzIyMCwxMCBAQAogCX0KIAogCS8qIDEuIHN0b3AgdGhyZWFkcyAqLwotCWt0aHJlYWRfc3RvcCh1ZC0+dGNwX3J4KTsKLQlrdGhyZWFkX3N0b3AodWQtPnRjcF90eCk7CisJaWYgKHVkLT50Y3BfcnggJiYgIXRhc2tfaXNfZGVhZCh1ZC0+dGNwX3J4KSkKKwkJa3RocmVhZF9zdG9wKHVkLT50Y3BfcngpOworCWlmICh1ZC0+dGNwX3R4ICYmICF0YXNrX2lzX2RlYWQodWQtPnRjcF90eCkpCisJCWt0aHJlYWRfc3RvcCh1ZC0+dGNwX3R4KTsKIAogCS8qIDIuIGNsb3NlIHRoZSBzb2NrZXQgKi8KIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggNjQ0NWYxMi4uNTFmYmQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0xNzEsMzMgKzE3MSwyMyBAQAogCiBzdGF0aWMgaW50IHR3ZWFrX3Jlc2V0X2RldmljZV9jbWQoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKLQlfX3UxNiB2YWx1ZTsKLQlfX3UxNiBpbmRleDsKLQlpbnQgcmV0OworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYgPSAoc3RydWN0IHN0dWJfcHJpdiAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gcHJpdi0+c2RldjsKIAotCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OwotCXZhbHVlID0gbGUxNl90b19jcHUocmVxLT53VmFsdWUpOwotCWluZGV4ID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpOworCXVzYmlwX3VpbmZvKCJyZXNldF9kZXZpY2UgJXNcbiIsIGRldl9uYW1lKCZ1cmItPmRldi0+ZGV2KSk7CiAKLQl1c2JpcF91aW5mbygicmVzZXRfZGV2aWNlIChwb3J0ICVkKSB0byAlc1xuIiwgaW5kZXgsCi0JCQkJCQlkZXZfbmFtZSgmdXJiLT5kZXYtPmRldikpOwotCi0JLyogYWxsIGludGVyZmFjZXMgc2hvdWxkIGJlIG93bmVkIGJ5IHVzYmlwIGRyaXZlciwgc28ganVzdCByZXNldCBpdC4gICovCi0JcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1cmItPmRldiwgTlVMTCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgImxvY2sgZm9yIHJlc2V0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiB0cnkgdG8gcmVzZXQgdGhlIGRldmljZSAqLwotCXJldCA9IHVzYl9yZXNldF9kZXZpY2UodXJiLT5kZXYpOwotCWlmIChyZXQgPCAwKQotCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0XG4iKTsKLQotCXVzYl91bmxvY2tfZGV2aWNlKHVyYi0+ZGV2KTsKLQotCXJldHVybiByZXQ7CisJLyoKKwkgKiB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0IGNhdXNlZCBhIGRlYWRsb2NrOiBpdCBjYXVzZXMgdGhlIGRyaXZlcgorCSAqIHRvIHVuYmluZC4gSW4gdGhlIHNodXRkb3duIHRoZSByeCB0aHJlYWQgaXMgc2lnbmFsbGVkIHRvIHNodXQgZG93bgorCSAqIGJ1dCB0aGlzIHRocmVhZCBpcyBwZW5kaW5nIGluIHRoZSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0LgorCSAqCisJICogSW5zdGVhZCBxdWV1ZSB0aGUgcmVzZXQuCisJICoKKwkgKiBVbmZvcnR1bmF0bHkgYW4gZXhpc3RpbmcgdXNiaXAgY29ubmVjdGlvbiB3aWxsIGJlIGRyb3BwZWQgZHVlIHRvCisJICogZHJpdmVyIHVuYmluZGluZy4KKwkgKi8KKwl1c2JfcXVldWVfcmVzZXRfZGV2aWNlKHNkZXYtPmludGVyZmFjZSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYwppbmRleCA1NTIzZjI1Li42NGE1MmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKQEAgLTE3MCw3ICsxNzAsNiBAQAogCXN0cnVjdCBzdHViX3ByaXYgKnByaXYsICp0bXA7CiAKIAlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQlzdHJ1Y3Qga3ZlYyBpb3ZbM107CiAJc2l6ZV90IHR4c2l6ZTsKIAogCXNpemVfdCB0b3RhbF9zaXplID0gMDsKQEAgLTE4MCwyOCArMTc5LDczIEBACiAJCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKIAkJc3RydWN0IHVzYmlwX2hlYWRlciBwZHVfaGVhZGVyOwogCQl2b2lkICppc29fYnVmZmVyID0gTlVMTDsKKwkJc3RydWN0IGt2ZWMgKmlvdiA9IE5VTEw7CisJCWludCBpb3ZudW0gPSAwOwogCiAJCXR4c2l6ZSA9IDA7CiAJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKIAkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKLQkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKIAotCQl1c2JpcF9kYmdfc3R1Yl90eCgic2V0dXAgdHhkYXRhIHVyYiAlcFxuIiwgdXJiKTsKKwkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpCisJCQlpb3ZudW0gPSAyICsgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwkJZWxzZQorCQkJaW92bnVtID0gMjsKIAorCQlpb3YgPSBremFsbG9jKGlvdm51bSAqIHNpemVvZihzdHJ1Y3Qga3ZlYyksIEdGUF9LRVJORUwpOworCisJCWlmICghaW92KSB7CisJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpb3ZudW0gPSAwOwogCiAJCS8qIDEuIHNldHVwIHVzYmlwX2hlYWRlciAqLwogCQlzZXR1cF9yZXRfc3VibWl0X3BkdSgmcGR1X2hlYWRlciwgdXJiKTsKKwkJdXNiaXBfZGJnX3N0dWJfdHgoInNldHVwIHR4ZGF0YSBzZXFudW06ICVkIHVyYjogJXBcbiIsCisJCQkJCQlwZHVfaGVhZGVyLmJhc2Uuc2VxbnVtLCB1cmIpOworCQkvKnVzYmlwX2R1bXBfaGVhZGVyKHBkdV9oZWFkZXIpOyovCiAJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CiAKLQkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7Ci0JCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJaW92W2lvdm51bV0uaW92X2Jhc2UgPSAmcGR1X2hlYWRlcjsKKwkJaW92W2lvdm51bV0uaW92X2xlbiAgPSBzaXplb2YocGR1X2hlYWRlcik7CisJCWlvdm51bSsrOwogCQl0eHNpemUgKz0gc2l6ZW9mKHBkdV9oZWFkZXIpOwogCiAJCS8qIDIuIHNldHVwIHRyYW5zZmVyIGJ1ZmZlciAqLwotCQlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpICYmIHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKLQkJCWlvdlsxXS5pb3ZfYmFzZSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQkJaW92WzFdLmlvdl9sZW4gID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpICYmCisJCQkJdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgIT0gUElQRV9JU09DSFJPTk9VUyAmJgorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCQlpb3ZbaW92bnVtXS5pb3ZfYmFzZSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkJaW92W2lvdm51bV0uaW92X2xlbiAgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlpb3ZudW0rKzsKIAkJCXR4c2l6ZSArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCX0gZWxzZSBpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpICYmCisJCQkJdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJLyoKKwkJCSAqIEZvciBpc29jaHJvbm91cyBwYWNrZXRzOiBhY3R1YWwgbGVuZ3RoIGlzIHRoZSBzdW0gb2YKKwkJCSAqIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBpbmRpdmlkdWFsLCBwYWNrZXRzLCBidXQgYXMKKwkJCSAqIHRoZSBwYWNrZXQgb2Zmc2V0cyBhcmUgbm90IGNoYW5nZWQgdGhlcmUgd2lsbCBiZQorCQkJICogcGFkZGluZyBiZXR3ZWVuIHRoZSBwYWNrZXRzLiBUbyBvcHRpbWFsbHkgdXNlIHRoZQorCQkJICogYmFuZHdpZHRoIHRoZSBwYWRkaW5nIGlzIG5vdCB0cmFuc21pdHRlZC4KKwkJCSAqLworCisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJCQlpb3ZbaW92bnVtXS5pb3ZfYmFzZSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCQkJaW92W2lvdm51bV0uaW92X2xlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJCQlpb3ZudW0rKzsKKwkJCQl0eHNpemUgKz0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQkJfQorCisJCQlpZiAodHhzaXplICE9IHNpemVvZihwZHVfaGVhZGVyKSArIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LAorCQkJCQkiYWN0dWFsIGxlbmd0aCBvZiB1cmIgKCVkKSBkb2VzIG5vdCBtYXRjaCBpc28gcGFja2V0IHNpemVzICglZClcbiIsCisJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdHhzaXplLXNpemVvZihwZHVfaGVhZGVyKSk7CisJCQkJa2ZyZWUoaW92KTsKKwkJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQkgICByZXR1cm4gLTE7CisJCQl9CiAJCX0KIAogCQkvKiAzLiBzZXR1cCBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KQEAgLTIxMiwzMiArMjU2LDM0IEBACiAJCQlpZiAoIWlzb19idWZmZXIpIHsKIAkJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLAogCQkJCQkJU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQkJCWtmcmVlKGlvdik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlpb3ZbMl0uaW92X2Jhc2UgPSBpc29fYnVmZmVyOwotCQkJaW92WzJdLmlvdl9sZW4gID0gbGVuOworCQkJaW92W2lvdm51bV0uaW92X2Jhc2UgPSBpc29fYnVmZmVyOworCQkJaW92W2lvdm51bV0uaW92X2xlbiAgPSBsZW47CiAJCQl0eHNpemUgKz0gbGVuOworCQkJaW92bnVtKys7CiAJCX0KIAotCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyhzZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLCBpb3YsCi0JCQkJICAgICAzLCB0eHNpemUpOworCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyhzZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLAorCQkJCQkJaW92LCAgaW92bnVtLCB0eHNpemUpOwogCQlpZiAocmV0ICE9IHR4c2l6ZSkgewogCQkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsCiAJCQkJInNlbmRtc2cgZmFpbGVkISwgcmV0dmFsICVkIGZvciAlemRcbiIsCiAJCQkJcmV0LCB0eHNpemUpOworCQkJa2ZyZWUoaW92KTsKIAkJCWtmcmVlKGlzb19idWZmZXIpOwogCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKKwkJa2ZyZWUoaW92KTsKIAkJa2ZyZWUoaXNvX2J1ZmZlcik7Ci0JCXVzYmlwX2RiZ19zdHViX3R4KCJzZW5kIHR4ZGF0YVxuIik7CiAKIAkJdG90YWxfc2l6ZSArPSB0eHNpemU7CiAJfQogCi0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmc2Rldi0+cHJpdl9mcmVlLCBsaXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKaW5kZXggMzM3YWJjNC4uN2IxZmU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYwpAQCAtMzMzLDEwICszMzMsMTEgQEAKIAkJdXNiaXBfdWRiZygiQ01EX1VOTElOSzogc2VxICV1XG4iLCBwZHUtPnUuY21kX3VubGluay5zZXFudW0pOwogCQlicmVhazsKIAljYXNlIFVTQklQX1JFVF9TVUJNSVQ6Ci0JCXVzYmlwX3VkYmcoIlJFVF9TVUJNSVQ6IHN0ICVkIGFsICV1IHNmICVkIGVjICVkXG4iLAorCQl1c2JpcF91ZGJnKCJSRVRfU1VCTUlUOiBzdCAlZCBhbCAldSBzZiAlZCAjcCAlZCBlYyAlZFxuIiwKIAkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGF0dXMsCiAJCQkJcGR1LT51LnJldF9zdWJtaXQuYWN0dWFsX2xlbmd0aCwKIAkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGFydF9mcmFtZSwKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5udW1iZXJfb2ZfcGFja2V0cywKIAkJCQlwZHUtPnUucmV0X3N1Ym1pdC5lcnJvcl9jb3VudCk7CiAJY2FzZSBVU0JJUF9SRVRfVU5MSU5LOgogCQl1c2JpcF91ZGJnKCJSRVRfVU5MSU5LOiBzdGF0dXMgJWRcbiIsIHBkdS0+dS5yZXRfdW5saW5rLnN0YXR1cyk7CkBAIC01MjAsNiArNTIxLDcgQEAKIAkJcnBkdS0+c3RhdHVzCQk9IHVyYi0+c3RhdHVzOwogCQlycGR1LT5hY3R1YWxfbGVuZ3RoCT0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQlycGR1LT5zdGFydF9mcmFtZQk9IHVyYi0+c3RhcnRfZnJhbWU7CisJCXJwZHUtPm51bWJlcl9vZl9wYWNrZXRzID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKIAkJcnBkdS0+ZXJyb3JfY291bnQJPSB1cmItPmVycm9yX2NvdW50OwogCX0gZWxzZSB7CiAJCS8qIHZoY2lfcnguYyAqLwpAQCAtNTI3LDYgKzUyOSw3IEBACiAJCXVyYi0+c3RhdHVzCQk9IHJwZHUtPnN0YXR1czsKIAkJdXJiLT5hY3R1YWxfbGVuZ3RoCT0gcnBkdS0+YWN0dWFsX2xlbmd0aDsKIAkJdXJiLT5zdGFydF9mcmFtZQk9IHJwZHUtPnN0YXJ0X2ZyYW1lOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gcnBkdS0+bnVtYmVyX29mX3BhY2tldHM7CiAJCXVyYi0+ZXJyb3JfY291bnQJPSBycGR1LT5lcnJvcl9jb3VudDsKIAl9CiB9CkBAIC01OTUsMTEgKzU5OCwxMyBAQAogCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhdHVzKTsKIAkJY3B1X3RvX2JlMzJzKCZwZHUtPmFjdHVhbF9sZW5ndGgpOwogCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhcnRfZnJhbWUpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+bnVtYmVyX29mX3BhY2tldHMpOwogCQljcHVfdG9fYmUzMnMoJnBkdS0+ZXJyb3JfY291bnQpOwogCX0gZWxzZSB7CiAJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGF0dXMpOwogCQliZTMyX3RvX2NwdXMoJnBkdS0+YWN0dWFsX2xlbmd0aCk7CiAJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWNwdV90b19iZTMycygmcGR1LT5udW1iZXJfb2ZfcGFja2V0cyk7CiAJCWJlMzJfdG9fY3B1cygmcGR1LT5lcnJvcl9jb3VudCk7CiAJfQogfQpAQCAtNzI1LDYgKzczMCw3IEBACiAJaW50IHNpemUgPSBucCAqIHNpemVvZigqaXNvKTsKIAlpbnQgaTsKIAlpbnQgcmV0OworCWludCB0b3RhbF9sZW5ndGggPSAwOwogCiAJaWYgKCF1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkKIAkJcmV0dXJuIDA7CkBAIC03NTQsMTkgKzc2MCw3NSBAQAogCQlyZXR1cm4gLUVQSVBFOwogCX0KIAorCiAJZm9yIChpID0gMDsgaSA8IG5wOyBpKyspIHsKIAkJaXNvID0gYnVmZiArIChpICogc2l6ZW9mKCppc28pKTsKIAogCQl1c2JpcF9pc29fcGFrY2V0X2NvcnJlY3RfZW5kaWFuKGlzbywgMCk7CiAJCXVzYmlwX3BhY2tfaXNvKGlzbywgJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0sIDApOworCQl0b3RhbF9sZW5ndGggKz0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOwogCX0KIAogCWtmcmVlKGJ1ZmYpOwogCisJaWYgKHRvdGFsX2xlbmd0aCAhPSB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJICAidG90YWwgbGVuZ3RoIG9mIGlzbyBwYWNrZXRzICglZCkgbm90IGVxdWFsIHRvIGFjdHVhbCBsZW5ndGggb2YgYnVmZmVyICglZClcbiIsCisJCSAgdG90YWxfbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJCWlmICh1ZC0+c2lkZSA9PSBVU0JJUF9TVFVCKQorCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCWVsc2UKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCisJCXJldHVybiAtRVBJUEU7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3JlY3ZfaXNvKTsKIAorLyoKKyAqIFRoaXMgZnVuY3Rpb25zIHJlc3RvcmVzIHRoZSBwYWRkaW5nIHdoaWNoIHdhcyByZW1vdmVkIGZvciBvcHRpbWl6aW5nCisgKiB0aGUgYmFuZHdpZHRoIGR1cmluZyB0cmFuc2ZlciBvdmVyIHRjcC9pcAorICoKKyAqIGJ1ZmZlciBhbmQgaXNvIHBhY2tldHMgbmVlZCB0byBiZSBzdG9yZWQgYW5kIGJlIGluIHByb3BlcGVyIGVuZGlhbiBpbiB1cmIKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqLworaW50IHVzYmlwX3BhZF9pc28oc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgbnAgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCWludCBpOworCWludCByZXQ7CisJaW50IGFjdHVhbG9mZnNldCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCWlmICghdXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCisJCXJldHVybiAwOworCisJLyogaWYgbm8gcGFja2V0cyBvciBsZW5ndGggb2YgZGF0YSBpcyAwLCB0aGVuIG5vdGhpbmcgdG8gdW5wYWNrICovCisJaWYgKG5wID09IDAgfHwgdXJiLT5hY3R1YWxfbGVuZ3RoID09IDApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBpZiBhY3R1YWxfbGVuZ3RoIGlzIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggdGhlbiBubyBwYWRkaW5nIGlzCisJICogcHJlc2VudC4KKwkqLworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogbG9vcCBvdmVyIGFsbCBwYWNrZXRzIGZyb20gbGFzdCB0byBmaXJzdCAodG8gcHJldmVudCBvdmVyd3JpdHRpbmcKKwkgKiBtZW1vcnkgd2hlbiBwYWRkaW5nKSBhbmQgbW92ZSB0aGVtIGludG8gdGhlIHByb3BlciBwbGFjZQorCSAqLworCWZvciAoaSA9IG5wLTE7IGkgPiAwOyBpLS0pIHsKKwkJYWN0dWFsb2Zmc2V0IC09IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJbWVtbW92ZSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LAorCQkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBhY3R1YWxvZmZzZXQsCisJCQkJICB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfcGFkX2lzbyk7CiAKIC8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCiBpbnQgdXNiaXBfcmVjdl94YnVmZihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCmluZGV4IDlmODA5YzMuLmM3NjdmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKQEAgLTM3OSw2ICszNzksOCBAQAogaW50IHVzYmlwX3JlY3ZfeGJ1ZmYoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYik7CiAvKiBzb21lIG1lbWJlcnMgb2YgdXJiIG11c3QgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlLiAqLwogaW50IHVzYmlwX3JlY3ZfaXNvKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpOworLyogc29tZSBtZW1iZXJzIG9mIHVyYiBtdXN0IGJlIHN1YnN0aXR1dGVkIGJlZm9yZS4gKi8KK2ludCB1c2JpcF9wYWRfaXNvKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpOwogdm9pZCAqdXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KHN0cnVjdCB1cmIgKnVyYiwgc3NpemVfdCAqYnVmZmxlbik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwppbmRleCBlMjM0ODQ5Li40ZjRmMTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgKgogICogU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3J0cyBpcyAzMSAoIHBvcnQgMCB0byBwb3J0IDMwKSA/CiAgKgotICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgYWN0dWFsIHRyYW5zZmVyZWQgbGVuZ3RoIGluIGJ5dGUuIElmIG5vdGhpbmcgaGFzCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBhY3R1YWwgdHJhbnNmZXJyZWQgbGVuZ3RoIGluIGJ5dGUuIElmIG5vdGhpbmcgaGFzCiAgKiBiZWVuIGNoYW5nZWQsIHJldHVybiAwLiBJbiB0aGUgY2FzZSB0aGF0IHRoZSBudW1iZXIgb2YgcG9ydHMgaXMgbGVzcyB0aGFuIG9yCiAgKiBlcXVhbCB0byA2IChWSENJX05QT1JUUz09NyksIHJldHVybiAxLgogICoKQEAgLTg3Niw4ICs4NzYsMTAgQEAKIAl9CiAKIAkvKiBraWxsIHRocmVhZHMgcmVsYXRlZCB0byB0aGlzIHNkZXYsIGlmIHYuYy4gZXhpc3RzICovCi0Ja3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF9yeCk7Ci0Ja3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF90eCk7CisJaWYgKHZkZXYtPnVkLnRjcF9yeCkKKwkJa3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF9yeCk7CisJaWYgKHZkZXYtPnVkLnRjcF90eCkKKwkJa3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF90eCk7CiAKIAl1c2JpcF91aW5mbygic3RvcCB0aHJlYWRzXG4iKTsKIApAQCAtOTQ5LDkgKzk1MSw2IEBACiB7CiAJbWVtc2V0KHZkZXYsIDAsIHNpemVvZigqdmRldikpOwogCi0JdmRldi0+dWQudGNwX3J4ID0ga3RocmVhZF9jcmVhdGUodmhjaV9yeF9sb29wLCAmdmRldi0+dWQsICJ2aGNpX3J4Iik7Ci0JdmRldi0+dWQudGNwX3R4ID0ga3RocmVhZF9jcmVhdGUodmhjaV90eF9sb29wLCAmdmRldi0+dWQsICJ2aGNpX3R4Iik7Ci0KIAl2ZGV2LT51ZC5zaWRlICAgPSBVU0JJUF9WSENJOwogCXZkZXYtPnVkLnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKIAkvKiB2ZGV2LT51ZC5sb2NrICAgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCkBAIC0xMTM5LDcgKzExMzgsNyBAQAogCQl1c2JpcF91ZXJyKCJjcmVhdGUgaGNkIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQorCWhjZC0+aGFzX3R0ID0gMTsKIAogCS8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciB2aGNpX2hjZCAqLwogCXRoZV9jb250cm9sbGVyID0gaGNkX3RvX3ZoY2koaGNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCmluZGV4IDA5YmYyMzUuLjJmZmM5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwpAQCAtMTAwLDYgKzEwMCw5IEBACiAJaWYgKHVzYmlwX3JlY3ZfaXNvKHVkLCB1cmIpIDwgMCkKIAkJcmV0dXJuOwogCisJLyogcmVzdG9yZSB0aGUgcGFkZGluZyBpbiBpc28gcGFja2V0cyAqLworCWlmICh1c2JpcF9wYWRfaXNvKHVkLCB1cmIpIDwgMCkKKwkJcmV0dXJuOwogCiAJaWYgKHVzYmlwX2RiZ19mbGFnX3ZoY2lfcngpCiAJCXVzYmlwX2R1bXBfdXJiKHVyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYwppbmRleCAzZjI0NTlmLi5lMmRhZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJ2aGNpLmgiCiAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogLyogVE9ETzogcmVmaW5lIGxvY2tpbmcgPyovCiAKQEAgLTIyMCwxMyArMjIxLDEzIEBACiAJdmRldi0+dWQudGNwX3NvY2tldCA9IHNvY2tldDsKIAl2ZGV2LT51ZC5zdGF0dXMgICAgID0gVkRFVl9TVF9OT1RBU1NJR05FRDsKIAotCXdha2VfdXBfcHJvY2Vzcyh2ZGV2LT51ZC50Y3BfcngpOwotCXdha2VfdXBfcHJvY2Vzcyh2ZGV2LT51ZC50Y3BfdHgpOwotCiAJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOwogCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CiAJLyogZW5kIHRoZSBsb2NrICovCiAKKwl2ZGV2LT51ZC50Y3BfcnggPSBrdGhyZWFkX3J1bih2aGNpX3J4X2xvb3AsICZ2ZGV2LT51ZCwgInZoY2lfcngiKTsKKwl2ZGV2LT51ZC50Y3BfdHggPSBrdGhyZWFkX3J1bih2aGNpX3R4X2xvb3AsICZ2ZGV2LT51ZCwgInZoY2lfdHgiKTsKKwogCXJoX3BvcnRfY29ubmVjdChyaHBvcnQsIHNwZWVkKTsKIAogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwppbmRleCBkNGE0OGM0Li5hNDAwNzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCkBAIC02MjEsNyArNjIxLDcgQEAKIAogCS8qCiAJICogTGV0J3MgYWxsb2NhdGUgdGhlIHJlc291cmNlIGhlcmUgcmF0aGVyIHRoYW4gZnVydGhlciB1cCB0aGUgc3RhY2sgYXMKLQkgKiBpdCBhdm9pZHMgcHVzaGluZyBsb2FkcyBvZiBidXMgZGVwZW5kYW50IHN0dWZmIHVwIHRoZSBzdGFjaworCSAqIGl0IGF2b2lkcyBwdXNoaW5nIGxvYWRzIG9mIGJ1cyBkZXBlbmRlbnQgc3R1ZmYgdXAgdGhlIHN0YWNrCiAJICovCiAJcmV0dmFsID0gY2E5MWN4NDJfYWxsb2NfcmVzb3VyY2UoaW1hZ2UsIHNpemUpOwogCWlmIChyZXR2YWwpIHsKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAJCXBjaV9hdHRyID0gZGVzdC0+cHJpdmF0ZTsKIAl9CiAKLQkvKiBDaGVjayB3ZSBjYW4gZG8gZnVsbGZpbGwgcmVxdWlyZWQgYXR0cmlidXRlcyAqLworCS8qIENoZWNrIHdlIGNhbiBkbyBmdWxmaWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKi8KIAlpZiAoKHZtZV9hdHRyLT5hc3BhY2UgJiB+KFZNRV9BMTYgfCBWTUVfQTI0IHwgVk1FX0EzMiB8IFZNRV9VU0VSMSB8CiAJCVZNRV9VU0VSMikpICE9IDApIHsKIApAQCAtMTA2OSw3ICsxMDY5LDcgQEAKIAkJZ290byBlcnJfY3ljbGU7CiAJfQogCi0JLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBmdWxsZmlsbCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uICovCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBmdWxmaWxsIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gKi8KIAlpZiAoISgoKHNyYy0+dHlwZSA9PSBWTUVfRE1BX1BDSSkgJiYgKGRlc3QtPnR5cGUgPT0gVk1FX0RNQV9WTUUpKSB8fAogCQkoKHNyYy0+dHlwZSA9PSBWTUVfRE1BX1ZNRSkgJiYgKGRlc3QtPnR5cGUgPT0gVk1FX0RNQV9QQ0kpKSkpIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKaW5kZXggYjAwYTUzZS4uMTA2YWE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCkBAIC05MjgsNyArOTI4LDcgQEAKIAlzcGluX2xvY2soJmltYWdlLT5sb2NrKTsKIAogCS8qIExldCdzIGFsbG9jYXRlIHRoZSByZXNvdXJjZSBoZXJlIHJhdGhlciB0aGFuIGZ1cnRoZXIgdXAgdGhlIHN0YWNrIGFzCi0JICogaXQgYXZvaWRzIHB1c2hpbmcgbG9hZHMgb2YgYnVzIGRlcGVuZGFudCBzdHVmZiB1cCB0aGUgc3RhY2suIElmIHNpemUKKwkgKiBpdCBhdm9pZHMgcHVzaGluZyBsb2FkcyBvZiBidXMgZGVwZW5kZW50IHN0dWZmIHVwIHRoZSBzdGFjay4gSWYgc2l6ZQogCSAqIGlzIHplcm8sIGFueSBleGlzdGluZyByZXNvdXJjZSB3aWxsIGJlIGZyZWVkLgogCSAqLwogCXJldHZhbCA9IHRzaTE0OF9hbGxvY19yZXNvdXJjZShpbWFnZSwgc2l6ZSk7CkBAIC0xMzIwLDcgKzEzMjAsNyBAQAogCiAJLyoKIAkgKiBXcml0ZXMgYXJlIHBvc3RlZC4gV2UgbmVlZCB0byBkbyBhIHJlYWQgb24gdGhlIFZNRSBidXMgdG8gZmx1c2ggb3V0Ci0JICogYWxsIG9mIHRoZSB3cml0ZXMgYmVmb3JlIHdlIGNoZWNrIGZvciBlcnJvcnMuIFdlIGNhbid0IGd1YXJlbnRlZQorCSAqIGFsbCBvZiB0aGUgd3JpdGVzIGJlZm9yZSB3ZSBjaGVjayBmb3IgZXJyb3JzLiBXZSBjYW4ndCBndWFyYW50ZWUKIAkgKiB0aGF0IHJlYWRpbmcgdGhlIGRhdGEgd2UgaGF2ZSBqdXN0IHdyaXR0ZW4gaXMgc2FmZS4gSXQgaXMgYmVsaWV2ZWQKIAkgKiB0aGF0IHRoZXJlIGlzbid0IGFueSByZWFkLCB3cml0ZSByZS1vcmRlcmluZywgc28gd2UgY2FuIHJlYWQgYW55CiAJICogbG9jYXRpb24gaW4gVk1FIHNwYWNlLCBzbyBsZXRzIHJlYWQgdGhlIERldmljZSBJRCBmcm9tIHRoZSB0c2kxNDgncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguaCBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmgKaW5kZXggOWY5N2ZhOC4uYTNhYzJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5oCkBAIC0yMTIsNyArMjEyLDcgQEAKICNkZWZpbmUgVFNJMTQ4X0xDU1JfT0ZGU0VUX09UQVQJCTB4MUMKIAogLyoKLSAqIFZNRWJ1cyBpbnRlcnVwdCBhY2sKKyAqIFZNRWJ1cyBpbnRlcnJ1cHQgYWNrCiAgKiBvZmZzZXQgIDIwMAogICovCiAjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQUNLMQkweDIwNApAQCAtNjEzLDcgKzYxMyw3IEBACiAvKgogICogIFBDSS1YIFN0YXR1cyBSZWdpc3RlciAoQ1JHICskMDU0KQogICovCi0jZGVmaW5lIFRTSTE0OF9QQ0ZTX1BDSVhTVEFUX1JTQ0VNICAgICAoMTw8MjkpCS8qIFJlY2lldmVkIFNwbGl0IENvbXAgRXJyb3IgKi8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfUENJWFNUQVRfUlNDRU0gICAgICgxPDwyOSkJLyogUmVjZWl2ZWQgU3BsaXQgQ29tcCBFcnJvciAqLwogI2RlZmluZSBUU0kxNDhfUENGU19QQ0lYU1RBVF9ETUNSU19NICAgKDc8PDI2KQkvKiBtYXggQ3VtdWxhdGl2ZSBSZWFkIFNpemUgKi8KICNkZWZpbmUgVFNJMTQ4X1BDRlNfUENJWFNUQVRfRE1PU1RfTSAgICg3PDwyMykJLyogbWF4IG91dHN0YW5kaW5nIFNwbGl0IFRyYW5zCiAJCQkJCQkgKi8KQEAgLTk4Miw4ICs5ODIsOCBAQAogI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0NOVFNfSVJRMSAgICAgKDI8PDIyKQkvKiBJUlExIHRvIENudHIgKi8KICNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9DTlRTX0lSUTIgICAgICgzPDwyMikJLyogSVJRMiB0byBDbnRyICovCiAKLSNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9FREdJU19NICAgICAgICgzPDwyMCkJLyogRWRnZSBpbnRlcnVwdCBNQVNLICovCi0jZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfRURHSVNfRElTICAgICAoMTw8MjApCS8qIEVkZ2UgaW50ZXJ1cHQgRGlzYWJsZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0VER0lTX00gICAgICAgKDM8PDIwKQkvKiBFZGdlIGludGVycnVwdCBNQVNLICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfRURHSVNfRElTICAgICAoMTw8MjApCS8qIEVkZ2UgaW50ZXJydXB0IERpc2FibGUgKi8KICNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9FREdJU19JUlExICAgICgyPDwyMCkJLyogSVJRMSB0byBFZGdlICovCiAjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfRURHSVNfSVJRMiAgICAoMzw8MjApCS8qIElSUTIgdG8gRWRnZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9hcGkudHh0IGIvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYXBpLnR4dAppbmRleCBhOTEwYTBjLi40OTEwZTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9hcGkudHh0CisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lX2FwaS50eHQKQEAgLTYsNyArNiw3IEBACiAKIEFzIHdpdGggb3RoZXIgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgVk1FIGRldmljZSBkcml2ZXJzIHJlZ2lzdGVyCiB3aXRoIHRoZSBWTUUgc3Vic3lzdGVtLCB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGRldmljZXMgaW5pdCByb3V0aW5lLiAgVGhpcyBpcwotYWNoaWV2ZWQgdmlhIGEgY2FsbCB0byB0aGUgZm9sbHdvaW5nIGZ1bmN0aW9uOgorYWNoaWV2ZWQgdmlhIGEgY2FsbCB0byB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgogCiAJaW50IHZtZV9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB2bWVfZHJpdmVyICpkcml2ZXIpOwogCkBAIC0xMDgsNyArMTA4LDcgQEAKID09PT09PT09PT09PT09CiAKIE1hc3RlciB3aW5kb3dzIHByb3ZpZGUgYWNjZXNzIGZyb20gdGhlIGxvY2FsIHByb2Nlc3NvcltzXSBvdXQgb250byB0aGUgVk1FIGJ1cy4KLVRoZSBudW1iZXIgb2Ygd2luZG93cyBhdmFpbGFibGUgYW5kIHRoZSBhdmFpbGFibGUgYWNjZXNzIG1vZGVzIGlzIGRlcGVuZGFudCBvbgorVGhlIG51bWJlciBvZiB3aW5kb3dzIGF2YWlsYWJsZSBhbmQgdGhlIGF2YWlsYWJsZSBhY2Nlc3MgbW9kZXMgaXMgZGVwZW5kZW50IG9uCiB0aGUgdW5kZXJseWluZyBjaGlwc2V0LiBBIHdpbmRvdyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLgogCiAKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiBTbGF2ZSB3aW5kb3dzIHByb3ZpZGUgZGV2aWNlcyBvbiB0aGUgVk1FIGJ1cyBhY2Nlc3MgaW50byBtYXBwZWQgcG9ydGlvbnMgb2YgdGhlCiBsb2NhbCBtZW1vcnkuIFRoZSBudW1iZXIgb2Ygd2luZG93cyBhdmFpbGFibGUgYW5kIHRoZSBhY2Nlc3MgbW9kZXMgdGhhdCBjYW4gYmUKLXVzZWQgaXMgZGVwZW5kYW50IG9uIHRoZSB1bmRlcmx5aW5nIGNoaXBzZXQuIEEgd2luZG93IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUKK3VzZWQgaXMgZGVwZW5kZW50IG9uIHRoZSB1bmRlcmx5aW5nIGNoaXBzZXQuIEEgd2luZG93IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUKIGl0IGNhbiBiZSB1c2VkLgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZwppbmRleCAwNjFlNzMwLi5jM2JhNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZUNjY1NQogICAgdHJpc3RhdGUgIlZJQSBUZWNobm9sb2dpZXMgVlQ2NjU1IHN1cHBvcnQiCi0gICBkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCisgICBkZXBlbmRzIG9uIFBDSSAmJiBXTEFOICYmIG0KICAgIHNlbGVjdCBXSVJFTEVTU19FWFQKICAgIHNlbGVjdCBXRVhUX1BSSVYKICAgIC0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMKaW5kZXggOTUxYTNhOC4uMjcyMWUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMKQEAgLTExODYsNyArMTE4Niw3IEBACiAgICAgICAgICAgICB3RHVyYXRpb24gKz0gMTsgLy8gMSBUVSBmb3IgY2hhbm5lbCBzd2l0Y2hpbmcKIAogICAgICAgICAgICAgaWYgKChMT0RXT1JEKHF3U3RhcnRUU0YpID09IDApICYmIChISURXT1JEKHF3U3RhcnRUU0YpID09IDApKSB7Ci0gICAgICAgICAgICAgICAgLy8gc3RhcnQgaW1lZGlhdGVseSBieSBzZXR0aW5nIHN0YXJ0IFRTRiA9PSBjdXJyZW50IFRTRiArIDIgVFUKKyAgICAgICAgICAgICAgICAvLyBzdGFydCBpbW1lZGlhdGVseSBieSBzZXR0aW5nIHN0YXJ0IFRTRiA9PSBjdXJyZW50IFRTRiArIDIgVFUKICAgICAgICAgICAgICAgICBMT0RXT1JEKHF3U3RhcnRUU0YpID0gTE9EV09SRChxd0N1cnJUU0YpICsgMjA0ODsKICAgICAgICAgICAgICAgICBISURXT1JEKHF3U3RhcnRUU0YpID0gSElEV09SRChxd0N1cnJUU0YpOwogICAgICAgICAgICAgICAgIGlmIChMT0RXT1JEKHF3Q3VyclRTRikgPiBMT0RXT1JEKHF3U3RhcnRUU0YpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKaW5kZXggZWZhZjE5Yi4uYWQzOWM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAvKiBJUF9ieXRlX2FsaWduW10gaXMgdXNlZCBmb3IgSVAgaGVhZGVyIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkCiAgICAwOiBpbmRpY2F0ZSB0aGUgSVAgaGVhZGVyIHdvbid0IGJlIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkLihEZWZhdWx0KSAuCiAgICAxOiBpbmRpY2F0ZSB0aGUgSVAgaGVhZGVyIHdpbGwgYmUgdW5zaWduZWQgbG9uZyBieXRlIGFsaWduZWQuCi0gICAgICBJbiBzb21lIGVudmlyb21lbnQsIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkLAorICAgICAgSW4gc29tZSBlbnZpcm9ubWVudCwgdGhlIElQIGhlYWRlciBzaG91bGQgYmUgdW5zaWduZWQgbG9uZyBieXRlIGFsaWduZWQsCiAgICAgICBvciB0aGUgcGFja2V0IHdpbGwgYmUgZHJvcGVkIHdoZW4gd2UgcmVjZWl2ZSBpdC4gKGVnOiBJUFZTKQogKi8KIERFVklDRV9QQVJBTShJUF9ieXRlX2FsaWduLCJFbmFibGUgSVAgaGVhZGVyIGR3b3JkIGFsaWduZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmMKaW5kZXggYWJkNjc0NS4uYzMwMTcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmMKQEAgLTU4Nyw3ICs1ODcsNyBAQAogICAgICAgICAgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfU1RBKSAmJiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9KT0lOVEVEKSkgewogCiAJCS8vIENhbGwgbWdyIHRvIGJlZ2luIHRoZSBkZWF1dGhlbnRpY2F0aW9uCi0gICAgICAgICAgICAgICAgLy8gcmVhc29uID0gKDMpIGJlYWN1c2Ugc3RhIGhhcyBsZWZ0IEVTUworICAgICAgICAgICAgICAgIC8vIHJlYXNvbiA9ICgzKSBiZWNhdXNlIHN0YSBoYXMgbGVmdCBFU1MKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmVDdXJyU3RhdGU+PSBXTUFDX1NUQVRFX0FVVEgpIHsKICAgICAgICAgICAgICAgICAgICAgdk1nckRlQXV0aGVuQmVnaW5TdGEoKHZvaWQgKilwRGV2aWNlLCBwTWdtdCwgcE1nbXQtPmFieUN1cnJCU1NJRCwgKDMpLCAmU3RhdHVzKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5oCmluZGV4IDE0MWU4MGIuLmUzYWU1NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5oCkBAIC0yMjAsNyArMjIwLDcgQEAKICovCiAKIAotLy8gVHggTWFuYWdtZW50IFBhY2tldCBkZXNjcmlwdG9yCisvLyBUeCBNYW5hZ2VtZW50IFBhY2tldCBkZXNjcmlwdG9yCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhNZ210UGFja2V0IHsKIAogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgcDgwMjExSGVhZGVyOwpAQCAtMjMwLDcgKzIzMCw3IEBACiB9IFNUeE1nbXRQYWNrZXQsICpQU1R4TWdtdFBhY2tldDsKIAogCi0vLyBSeCBNYW5hZ21lbnQgUGFja2V0IGRlc2NyaXB0b3IKKy8vIFJ4IE1hbmFnZW1lbnQgUGFja2V0IGRlc2NyaXB0b3IKIHR5cGVkZWYgc3RydWN0IHRhZ1NSeE1nbXRQYWNrZXQgewogCiAgICAgUFVXTEFOXzgwMjExSERSICAgICBwODAyMTFIZWFkZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcKaW5kZXggYTQ0MWJhNS4uZjg5YWIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWVDY2NTYKIAl0cmlzdGF0ZSAiVklBIFRlY2hub2xvZ2llcyBWVDY2NTYgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOCisJZGVwZW5kcyBvbiBVU0IgJiYgV0xBTiAmJiBtCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKIAlzZWxlY3QgRldfTE9BREVSCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCmluZGV4IDhmMTg1NzguLjUxODVkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCkBAIC0xOTM4LDcgKzE5MzgsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogQ01EX1NUQVRVU19QRU5ESU5HIGlmIE1BQyBUeCByZXNvdXJjZSBhdmFsaWFibGU7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiBDTURfU1RBVFVTX1BFTkRJTkcgaWYgTUFDIFR4IHJlc291cmNlIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIEZBTFNFCiAgKgogLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmMKaW5kZXggYjgzYjY2MC4uMDE5ZmI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+ZVNjYW5TdGF0ZSA9IFdNQUNfSVNfU0NBTk5JTkc7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5U2NhbkJCVHlwZSA9IHBEZXZpY2UtPmJ5QkJUeXBlOyAgLy9sdWNhcwogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iU3RvcERhdGFQa3QgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIG9mZiBSQ1JfQlNTSUQgZmlsdGVyIGV2ZXJ5dGltZQorICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIG9mZiBSQ1JfQlNTSUQgZmlsdGVyIGV2ZXJ5IHRpbWUKICAgICAgICAgICAgICAgICAgICAgTUFDdlJlZ0JpdHNPZmYocERldmljZSwgTUFDX1JFR19SQ1IsIFJDUl9CU1NJRCk7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UnhNb2RlICY9IH5SQ1JfQlNTSUQ7CiAKQEAgLTYwNCw3ICs2MDQsNyBAQAogICAgICAgICAgICAgLy8gaWYgSW5mcmEgbW9kZQogICAgICAgICAgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfU1RBKSAmJiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9KT0lOVEVEKSkgewogICAgICAgICAgICAgICAgIC8vIENhbGwgbWdyIHRvIGJlZ2luIHRoZSBkZWF1dGhlbnRpY2F0aW9uCi0gICAgICAgICAgICAgICAgLy8gcmVhc29uID0gKDMpIGJlYWN1c2Ugc3RhIGhhcyBsZWZ0IEVTUworICAgICAgICAgICAgICAgIC8vIHJlYXNvbiA9ICgzKSBiZWNhdXNlIHN0YSBoYXMgbGVmdCBFU1MKIAkgICAgICBpZiAocE1nbXQtPmVDdXJyU3RhdGUgPj0gV01BQ19TVEFURV9BVVRIKSB7CiAJCXZNZ3JEZUF1dGhlbkJlZ2luU3RhKCh2b2lkICopcERldmljZSwKIAkJCQkgICAgIHBNZ210LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuaAppbmRleCA1OTRmM2E4Li4xM2RmYjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuaApAQCAtMjE4LDcgKzIxOCw3IEBACiAKIAogCi0vLyBUeCBNYW5hZ21lbnQgUGFja2V0IGRlc2NyaXB0b3IKKy8vIFR4IE1hbmFnZW1lbnQgUGFja2V0IGRlc2NyaXB0b3IKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeE1nbXRQYWNrZXQgewogCiAgICAgUFVXTEFOXzgwMjExSERSICAgICBwODAyMTFIZWFkZXI7CkBAIC0yMjgsNyArMjI4LDcgQEAKIH0gU1R4TWdtdFBhY2tldCwgKlBTVHhNZ210UGFja2V0OwogCiAKLS8vIFJ4IE1hbmFnbWVudCBQYWNrZXQgZGVzY3JpcHRvcgorLy8gUnggTWFuYWdlbWVudCBQYWNrZXQgZGVzY3JpcHRvcgogdHlwZWRlZiBzdHJ1Y3QgdGFnU1J4TWdtdFBhY2tldCB7CiAKICAgICBQVVdMQU5fODAyMTFIRFIgICAgIHA4MDIxMUhlYWRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzZG1hLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2RtYS5jCmluZGV4IDE2YjhlYzEuLmM0NjFkNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzZG1hLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNkbWEuYwpAQCAtMTA4Miw3ICsxMDgyLDcgQEAKIAkvKgogCSAqIGlmIHRoZSBkYXRhIHJlY2VpdmVkIGV4Y2VlZHMgdGhlIHNpemUgb2YgdGhlIERNQSBidWZmZXIsCiAJICogY2xpcCB0aGUgZGF0YSB0byB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgdGhpcyBjYW4gbGVhZAotCSAqIHRvIGxvb3Npbmcgc29tZSBkYXRhLCBidXQgaXMgbm90IGRpZmZlcmVudCB0aGFuIGRvaW5nCisJICogdG8gbG9zaW5nIHNvbWUgZGF0YSwgYnV0IGlzIG5vdCBkaWZmZXJlbnQgdGhhbiBkb2luZwogCSAqIG5vbi1wYWNrZXQgcmVhZHMgb24gdGhlIG90aGVyIGVuZHBvaW50cy4KIAkgKi8KIAlpZiAoZHNpemUgPiBkbWFfcC0+c2l6ZSAtIGRtYV9wLT5vZmZzZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2xlcDJwZXAuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbGVwMnBlcC5jCmluZGV4IDYwYjZmMzUuLjc2ODIxZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbGVwMnBlcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbGVwMnBlcC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAljeV9hc19waHlzaWNhbF9lbmRwb2ludF9zdGF0ZSBkZXNpcmVkOwogCiAJLyoKLQkgKiBub3RlLCB0aGVyZSBpcyBubyBlcnJvciBjaGVja2luZyBoZXJlIGJlY3Vhc2UKKwkgKiBub3RlLCB0aGVyZSBpcyBubyBlcnJvciBjaGVja2luZyBoZXJlIGJlY2F1c2UKIAkgKiBJU08gZXJyb3IgY2hlY2tpbmcgaGFwcGVucyB3aGVuIHRoZSBBUEkgaXMgY2FsbGVkLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2xvd2xldmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2xvd2xldmVsLmMKaW5kZXggZDQzZGQ4NS4uOTZhODZkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNsb3dsZXZlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbG93bGV2ZWwuYwpAQCAtNDMyLDcgKzQzMiw3IEBACiAqIGlzIHJlY2VpdmVkLiAgV2hlbiBhIGNvbXBsZXRlIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBjYWxsYmFjawogKiBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdHMgb24gdGhhdCBjb250ZXh0IGlzIGNhbGxlZC4gIFdoZW4gYSBjb21wbGV0ZQogKiByZXNwb25zZSBpcyByZWNldmllZCwgdGhlIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCB0aGF0Ci0qIGdlbmVyYXRlZCB0aGUgcmVwb25zZSBpcyBjYWxsZWQuCisqIGdlbmVyYXRlZCB0aGUgcmVzcG9uc2UgaXMgY2FsbGVkLgogKi8KIHZvaWQKIGN5X2FzX21haWxfYm94X2ludGVycnVwdF9oYW5kbGVyKGN5X2FzX2RldmljZSAqZGV2X3ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc21pc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbWlzYy5jCmluZGV4IDc4NTI0MTAuLjQ1NjRmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbWlzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbWlzYy5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAkJCQlpZiAodiAmIENZX0FTX01FTV9QMF9WTV9TRVRfQ0ZHTU9ERSkKIAkJCQkJY3lfYXNfaGFsX3ByaW50X21lc3NhZ2UoCiAJCQkJCSJpbml0aWFsaXphdGlvbiBtZXNzYWdlICIKLQkJCQkJInJlY2lldmVkLCBidXQgY29uZmlnIGJpdCAiCisJCQkJCSJyZWNlaXZlZCwgYnV0IGNvbmZpZyBiaXQgIgogCQkJCQkic3RpbGwgc2V0XG4iKTsKIAogCQkJCXYgPSBjeV9hc19oYWxfcmVhZF9yZWdpc3RlcihkZXZfcC0+dGFnLApAQCAtNDM2LDcgKzQzNiw3IEBACiAJCQkJaWYgKCh2ICYgQ1lfQVNfTUVNX1JTVF9SU1RDTVBUKSA9PSAwKQogCQkJCQljeV9hc19oYWxfcHJpbnRfbWVzc2FnZSgKIAkJCQkJImluaXRpYWxpemF0aW9uIG1lc3NhZ2UgIgotCQkJCQkicmVjaWV2ZWQsIGJ1dCByZXNldCBjb21wbGV0ZSAiCisJCQkJCSJyZWNlaXZlZCwgYnV0IHJlc2V0IGNvbXBsZXRlICIKIAkJCQkJImJpdCBzdGlsbCBub3Qgc2V0XG4iKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjM4MSw3ICsyMzgxLDcgQEAKIAkvKgogCSAqIHJlbGVhc2UgdGhlIHdlc3QgYnJpZGdlIG1pY3JvLV9jb250cm9sbGVyIGZyb20gcmVzZXQsCiAJICogc28gdGhhdCBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBjYW4gY29tcGxldGUuIHRoZSBhdHRlbXB0Ci0JICogdG8gcmVsZWFzZSBhbnRpb2NoIHJlc2V0IGlzIG1hZGUgdXB0byA4IHRpbWVzLgorCSAqIHRvIHJlbGVhc2UgYW50aW9jaCByZXNldCBpcyBtYWRlIHVwIHRvIDggdGltZXMuCiAJICovCiAJdiA9IDB4MDM7CiAJY291bnQgPSAweDA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNtdHAuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbXRwLmMKaW5kZXggMzY4OTg0Ni4uODU5ODM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNtdHAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc210cC5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAogCQlkZXZfcC0+bXRwX2V2ZW50X2NiID0gZXZlbnRfY19iOwogCQkvKgotCQkqIHdlIHJlZ2lzdGVyIGhlcmUgYmVjdWFzZSB0aGUgc3RhcnQgcmVxdWVzdCBtYXkgY2F1c2UKKwkJKiB3ZSByZWdpc3RlciBoZXJlIGJlY2F1c2UgdGhlIHN0YXJ0IHJlcXVlc3QgbWF5IGNhdXNlCiAJCSogZXZlbnRzIHRvIG9jY3VyIGJlZm9yZSB0aGUgcmVzcG9uc2UgdG8gdGhlIHN0YXJ0IHJlcXVlc3QuCiAJCSovCiAJCWN5X2FzX2xsX3JlZ2lzdGVyX3JlcXVlc3RfY2FsbGJhY2soZGV2X3AsCkBAIC00MjQsNyArNDI0LDcgQEAKIAkJZ290byBkZXN0cm95OwogCiAJLyoKLQkqIHdlIHN1Y2Vzc2Z1bGx5IHNodXRkb3duIHRoZSBzdGFjaywgc28gZGVjcmVtZW50CisJKiB3ZSBzdWNjZXNzZnVsbHkgc2h1dGRvd24gdGhlIHN0YWNrLCBzbyBkZWNyZW1lbnQKIAkqIHRvIG1ha2UgdGhlIGNvdW50IHplcm8uCiAJKi8KIAlkZXZfcC0+bXRwX2NvdW50LS07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc3N0b3JhZ2UuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzc3RvcmFnZS5jCmluZGV4IDI0NTE0MDQuLjdhYmQ2YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzc3RvcmFnZS5jCkBAIC0xNzczLDcgKzE3NzMsNyBAQAogCWlmICh1bml0ID4gMjU1KQogCQlyZXR1cm4gQ1lfQVNfRVJST1JfTk9fU1VDSF9VTklUOwogCi0JLyogV2UgYXJlIHN1cHBvc2VkIHRvIHJldHVybiBzdWNlc3MgaWYgdGhlIG51bWJlciBvZgorCS8qIFdlIGFyZSBzdXBwb3NlZCB0byByZXR1cm4gc3VjY2VzcyBpZiB0aGUgbnVtYmVyIG9mCiAJKiBibG9ja3MgaXMgemVybwogCSovCiAJaWYgKG51bV9ibG9ja3MgPT0gMCkgewpAQCAtMTk2OSw3ICsxOTY5LDcgQEAKIAlpZiAoY3lfYXNfZGV2aWNlX2lzX3VzYl9hc3luY19wZW5kaW5nKGRldl9wLCA2KSkKIAkJcmV0dXJuIENZX0FTX0VSUk9SX0FTWU5DX1BFTkRJTkc7CiAKLQkvKiBXZSBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIHN1Y2VzcyBpZiB0aGUgbnVtYmVyIG9mCisJLyogV2UgYXJlIHN1cHBvc2VkIHRvIHJldHVybiBzdWNjZXNzIGlmIHRoZSBudW1iZXIgb2YKIAkqIGJsb2NrcyBpcyB6ZXJvCiAJKi8KIAlpZiAobnVtX2Jsb2NrcyA9PSAwKQpAQCAtMzI4NSw3ICszMjg1LDcgQEAKIAlpZiAoY2FsbGJhY2sgPT0gMCkKIAkJcmV0dXJuIENZX0FTX0VSUk9SX05VTExfQ0FMTEJBQ0s7CiAKLQkvKiBXZSBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIHN1Y2VzcyBpZiB0aGUgbnVtYmVyIG9mCisJLyogV2UgYXJlIHN1cHBvc2VkIHRvIHJldHVybiBzdWNjZXNzIGlmIHRoZSBudW1iZXIgb2YKIAkgKiBibG9ja3MgaXMgemVybwogCSAqLwogCWlmICgoKG1pc2NfYnVmJkNZX1NESU9fQkxPQ0tNT0RFKSAhPSAwKSAmJiAoYXJndW1lbnQgPT0gMCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc3VzYi5jCmluZGV4IDkyZWE0MjUuLjFiNTVlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXN1c2IuYwpAQCAtNzM5LDcgKzczOSw3IEBACiAJCWN5X2FzX3VzYl9yZXNldF9lX3AwX3N0YXRlKGRldl9wKTsKIAogCQkvKgotCQkqIHdlIHJlZ2lzdGVyIGhlcmUgYmVjdWFzZSB0aGUgc3RhcnQgcmVxdWVzdCBtYXkgY2F1c2UKKwkJKiB3ZSByZWdpc3RlciBoZXJlIGJlY2F1c2UgdGhlIHN0YXJ0IHJlcXVlc3QgbWF5IGNhdXNlCiAJCSogZXZlbnRzIHRvIG9jY3VyIGJlZm9yZSB0aGUgcmVzcG9uc2UgdG8gdGhlIHN0YXJ0IHJlcXVlc3QuCiAJCSovCiAJCWN5X2FzX2xsX3JlZ2lzdGVyX3JlcXVlc3RfY2FsbGJhY2soZGV2X3AsCkBAIC04NjcsNyArODY3LDcgQEAKIAkJZ290byBkZXN0cm95OwogCiAJLyoKLQkgKiB3ZSBzdWNlc3NmdWxseSBzaHV0ZG93biB0aGUgc3RhY2ssIHNvCisJICogd2Ugc3VjY2Vzc2Z1bGx5IHNodXRkb3duIHRoZSBzdGFjaywgc28KIAkgKiBkZWNyZW1lbnQgdG8gbWFrZSB0aGUgY291bnQgemVyby4KIAkgKi8KIAljeV9hc191c2JfY2xlYW51cChkZXZfcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL21hY2gtb21hcDIvY3lhc2hhbG9tYXBfa2VybmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL21hY2gtb21hcDIvY3lhc2hhbG9tYXBfa2VybmVsLmMKaW5kZXggMjFjZGIwNi4uM2JjZWRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9tYWNoLW9tYXAyL2N5YXNoYWxvbWFwX2tlcm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jeWFzaGFsb21hcF9rZXJuZWwuYwpAQCAtODcsNyArODcsNyBAQAogCiAKIC8qCi0gKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UgaGFuZGxlIHN0b3JhZ2UgZW5kcG9pbnQgdHJhbnNmZXJzIHVwdG8gNCBLQgorICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGhhbmRsZSBzdG9yYWdlIGVuZHBvaW50IHRyYW5zZmVycyB1cCB0byA0IEtCCiAgKiB3aXRoaW4gdGhlIEhBTCBpdHNlbGYuCiAgKi8KICAjZGVmaW5lIENZQVNTVE9SQUdFX1dSSVRFX0VQX05VTQkoNCkKQEAgLTEwOCwxMiArMTA4LDEyIEBACiAJCQkJKChlcCkgPT0gNikgfHwgKChlcCkgPT0gOCkpCiAKIC8qCi0gKiBwZXJzaXN0YW50LCBzdG9yZXMgY3VycmVudCBHUE1DIGludGVyZmFjZSBjZmcgbW9kZQorICogcGVyc2lzdGVudCwgc3RvcmVzIGN1cnJlbnQgR1BNQyBpbnRlcmZhY2UgY2ZnIG1vZGUKICAqLwogc3RhdGljIHVpbnQ4X3QgcG5hbmRfMTZiaXQ7CiAKIC8qCi0gKiBrZWVwIHByb2Nlc3NpbmcgbmV3IFdCIERSUSBpbiBJU1IgdW50aWxsIGFsbCBoYW5kbGVkIChwZXJmb3JtYW5jZSBmZWF0dXJlKQorICoga2VlcCBwcm9jZXNzaW5nIG5ldyBXQiBEUlEgaW4gSVNSIHVudGlsIGFsbCBoYW5kbGVkIChwZXJmb3JtYW5jZSBmZWF0dXJlKQogICovCiAjZGVmaW5lIFBST0NFU1NfTVVMVElQTEVfRFJRX0lOX0lTUiAoMSkKIApAQCAtMTU3LDcgKzE1Nyw3IEBACiAJICogZG1hX3hmZXJfc3ogLSBzaXplIG9mIHRoZSBuZXh0IGRtYSB4ZmVyIG9uIFAgcG9ydAogCSAqIHNlZ194ZmVyX2NudCAtICBjb3VudHMgeGZlcmVkIGJ5dGVzIGZvciBpbiBjdXJyZW50IHNnX2xpc3QKIAkgKgkJbWVtb3J5IHNlZ21lbnQKLQkgKiByZXFfeGZlcl9jbnQgLSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJlZCBzbyBmYXIgaW4KKwkgKiByZXFfeGZlcl9jbnQgLSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgc28gZmFyIGluCiAJICoJCWN1cnJlbnQgcmVxdWVzdAogCSAqIHJlcV9sZW5ndGggLSB0b3RhbCByZXF1ZXN0IGxlbmd0aAogCSAqLwpAQCAtMjE2MCw3ICsyMTYwLDcgQEAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGNyZWF0ZSBhIHNsZWVwIGNoYW5uZWwuCiAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzIHRoZSBzbGVlcCBjaGFubmVsIG9iamVjdAotICogc2xlZXAgY2hhbm5lbCAod2hpY2ggaXMgTGludXggIndhaXRfcXVldWVfaGVhZF90IHdxIiBmb3IgdGhpcyBwYXRpY3VsYXIgSEFMKQorICogc2xlZXAgY2hhbm5lbCAod2hpY2ggaXMgTGludXggIndhaXRfcXVldWVfaGVhZF90IHdxIiBmb3IgdGhpcyBwYXJ0aWN1bGFyIEhBTCkKICAqIHBhc3NlZCBhcyBhIHBvaW50ZXIsIGFuZCBhbGxwb2NhdGVkIGJ5IHRoZSBjYWxsZXIKICAqICh0eXBpY2FsbHkgYXMgYSBsb2NhbCB2YXIgb24gdGhlIHN0YWNrKSAiQ3JlYXRlIiB3b3JkIHNob3VsZCByZWFkIGFzCiAgKiAiU2xlZXBPbiIsIHRoaXMgZnVuYyBkb2Vzbid0IGFjdHVhbGx5IGNyZWF0ZSBhbnl0aGluZwpAQCAtMjM2NCw3ICsyMzY0LDcgQEAKIAkgKi8KIAljeV9hc19oYWxfZ3BtY19lbmFibGVfMTZiaXRfYnVzKGN5X3RydWUpOwogI2Vsc2UKLSAgIC8qIEFzdG9yaWEgYW5kIEdQTUMgYXJlIGFscmVhZHkgaW4gOCBiaXQgbW9kZSwganN1dCBpbml0aWFsaXplIFBOQU5EX0NGRyAqLworICAgLyogQXN0b3JpYSBhbmQgR1BNQyBhcmUgYWxyZWFkeSBpbiA4IGJpdCBtb2RlLCBqdXN0IGluaXRpYWxpemUgUE5BTkRfQ0ZHICovCiAJYXN0X3BfbmFuZF9jYXNkaV93cml0ZShDWV9BU19NRU1fUE5BTkRfQ0ZHLCAweDAwMDApOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC93ZXN0YnJpZGdlL3dlc3RicmlkZ2Utb21hcDMtcG5hbmQtaGFsL2N5YXNoYWxvbWFwX2tlcm5lbC5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3dlc3RicmlkZ2Uvd2VzdGJyaWRnZS1vbWFwMy1wbmFuZC1oYWwvY3lhc2hhbG9tYXBfa2VybmVsLmgKaW5kZXggODBkZDUzMC4uNjQyNmVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3dlc3RicmlkZ2Uvd2VzdGJyaWRnZS1vbWFwMy1wbmFuZC1oYWwvY3lhc2hhbG9tYXBfa2VybmVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3dlc3RicmlkZ2Uvd2VzdGJyaWRnZS1vbWFwMy1wbmFuZC1oYWwvY3lhc2hhbG9tYXBfa2VybmVsLmgKQEAgLTIwLDcgKzIwLDcgQEAKICovCiAKIC8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmludGlvbiBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24KKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24KICAqIGxheWVyIG9uIE9NQVAzNDMwIHRhbGtpbmcgdG8gdGhlIFdlc3QgQnJpZGdlIEFzdG9yaWEgZGV2aWNlCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3dlc3RicmlkZ2Uvd2VzdGJyaWRnZS1vbWFwMy1wbmFuZC1oYWwvY3lhc21lbW1hcC5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3dlc3RicmlkZ2Uvd2VzdGJyaWRnZS1vbWFwMy1wbmFuZC1oYWwvY3lhc21lbW1hcC5oCmluZGV4IDNlZWUxOTIuLjQ2ZjA2ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC93ZXN0YnJpZGdlL3dlc3RicmlkZ2Utb21hcDMtcG5hbmQtaGFsL2N5YXNtZW1tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvd2VzdGJyaWRnZS93ZXN0YnJpZGdlLW9tYXAzLXBuYW5kLWhhbC9jeWFzbWVtbWFwLmgKQEAgLTUxLDcgKzUxLDcgQEAKICAqIAkJCQkJCQlHUE1DX0FERFIKICAqCQkJCQkJCVtBODpBMV0tPnVwRFs3OjBdCiAgKiBJTlQjCS1HUE1DX25XUF9HUElPXzYyCi0gKiBEQUNLCS1OL0MJCQkJIG5vdCBjb25lY3RlZAorICogREFDSwktTi9DCQkJCSBub3QgY29ubmVjdGVkCiAgKiBXQUtFVVAtR1BJT18xNjcKICAqIFJFU0VULUdQSU9fMTI2CiAgKiBSL0IJLUdQTUNfV0FJVDJfR1BJT182NApAQCAtMTA4LDcgKzEwOCw3IEBACiAJICoJCQkJCXdpbGwgYmUgbW9uaXRvcmVkCiAJICogUEZfRU5fRU5HSU5FIC0gMS0gRU5BQkxFUyBFTkdJTkUsIGJ1dCBpdCBuZWVkcyB0byBiZSBzdGFydGVkIGFmdGVyCiAJICoJCQkJCXRoYXQgQyBjdHJsIHJlZyBiaXQgMAotCSAqIFBGX0ZJRk9fVEhSRVNIT0xEIC0gRklGTyB0aHJlc2hob2xkIGluIG51bWJlciBvZiBCVVMoOCBvciAxNikgd29yZHMKKwkgKiBQRl9GSUZPX1RIUkVTSE9MRCAtIEZJRk8gdGhyZXNob2xkIGluIG51bWJlciBvZiBCVVMoOCBvciAxNikgd29yZHMKIAkgKiBQRl9XRUlHSFRFRF9QUklPICAtIE5VTSBvZiBjeWNsZXMgZ3JhbnRlZCB0byBQRkUgaWYgUk5EX1JPQklOCiAJICoJCQkJCXByaW9yaXRpemF0aW9uIGlzIGVuYWJsZWQKIAkgKiBQRl9ST1VORF9ST0JJTiAgLSBpZiBlbmFibGVkLCBnaXZlcyBwcmlvcml0eSB0byBvdGhlciBDUywgYnV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2Jsb2NrL2N5YXNibGtkZXZfcXVldWUuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYmxvY2svY3lhc2Jsa2Rldl9xdWV1ZS5jCmluZGV4IDBiYmI4YTMuLmQxOTk2YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYmxvY2svY3lhc2Jsa2Rldl9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYmxvY2svY3lhc2Jsa2Rldl9xdWV1ZS5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyogbmV3IHJlcSByZWNpZXZlZCwgaXNzdWUgaXQgdG8gdGhlIGRyaXZlciAgKi8KKwkJLyogbmV3IHJlcSByZWNlaXZlZCwgaXNzdWUgaXQgdG8gdGhlIGRyaXZlciAgKi8KIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAogCQkjaWZuZGVmIFdFU1RCUklER0VfTkRFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2dhZGdldC9jeWFzZ2FkZ2V0LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2dhZGdldC9jeWFzZ2FkZ2V0LmMKaW5kZXggZGVmYTA1Yy4uYmU4NTFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9nYWRnZXQvY3lhc2dhZGdldC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvZ2FkZ2V0L2N5YXNnYWRnZXQuYwpAQCAtNTg3LDYgKzU4Nyw3IEBACiAJCQkiY3lfYXNfdXNiX2VuZF9wb2ludF9jb25maWcgRVAgJXMgbWlzbWF0Y2ggIgogCQkJIm9uIGVuYWJsZWRcbiIsIGFuX2VwLT51c2JfZXBfaW5zdC5uYW1lKTsKIAkJI2VuZGlmCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuX2Rldi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNkZXZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNkZXZpY2UuaAppbmRleCAwYzA3MjZiNi4uNjQ1MmE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2RldmljZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNkZXZpY2UuaApAQCAtMTE5LDcgKzExOSw3IEBACiAjZGVmaW5lIENZX0FTX1JFUVVFU1RfTElTVF9TVEFURV9RVUVVRUQgKDB4MDApCiAvKiBUaGUgcmVxdWVzdCBpcyBzZW50LCB3YWl0aW5nIGZvciByZXNwb25zZSAqLwogI2RlZmluZSBDWV9BU19SRVFVRVNUX0xJU1RfU1RBVEVfV0FJVElORyAoMHgwMSkKLS8qIFRoZSByZXNwb25zZSBoYXMgYmVlbiByZWNlaXZlZCwgcHJvY2Vzc2luZyByZXBvbnNlICovCisvKiBUaGUgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQsIHByb2Nlc3NpbmcgcmVzcG9uc2UgKi8KICNkZWZpbmUgQ1lfQVNfUkVRVUVTVF9MSVNUX1NUQVRFX1JFQ0VJVkVEICgweDAyKQogLyogVGhlIHJlcXVlc3QvcmVzcG9uc2UgaXMgYmVpbmcgY2FuY2VsZWQgKi8KICNkZWZpbmUgQ1lfQVNfUkVRVUVTVF9MSVNUX1NUQVRFX0NBTkNFTElORyAoMHgwMykKQEAgLTUxNyw3ICs1MTcsNyBAQAogCWN5X2FzX2xsX3JlcXVlc3RfbGlzdF9ub2RlICpyZXF1ZXN0X3F1ZXVlX3A7CiAJLyogVGhlIGxpc3Qgbm9kZSBpbiB0aGUgcmVxdWVzdCBxdWV1ZSAqLwogCWN5X2FzX2xsX3JlcXVlc3RfbGlzdF9ub2RlICpsYXN0X25vZGVfcDsKLQkvKiBJbmRleCB1cHRvIHdoaWNoIGRhdGEgaXMgc3RvcmVkLiAqLworCS8qIEluZGV4IHVwIHRvIHdoaWNoIGRhdGEgaXMgc3RvcmVkLiAqLwogCXVpbnQxNl90IHF1ZXVlX2luZGV4OwogCS8qIEluZGV4IHRvIHRoZSBuZXh0IHJlcXVlc3QgaW4gdGhlIHF1ZXVlLiAqLwogCXVpbnQxNl90IHJxdF9pbmRleDsKQEAgLTc2OCw3ICs3NjgsNyBAQAogCXVpbnQzMl90IG10cF9jb3VudDsKIAkvKiBUaGUgTVRQIGV2ZW50IGNhbGxiYWNrIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgKi8KIAljeV9hc19tdHBfZXZlbnRfY2FsbGJhY2sgbXRwX2V2ZW50X2NiOwotCS8qIFRoZSBjdXJyZW50IGJsb2NrIHRhYmxlIHRvIGJlIHRyYW5zZmVyZWQgKi8KKwkvKiBUaGUgY3VycmVudCBibG9jayB0YWJsZSB0byBiZSB0cmFuc2ZlcnJlZCAqLwogCWN5X2FzX210cF9ibG9ja190YWJsZSAqdHBfYmxrX3RibDsKIAogCWN5X2FzX2NfYl9xdWV1ZSAqZnVuY19jYnNfbXRwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2RtYS5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2RtYS5oCmluZGV4IDhkYWI1ZTkuLjE2ZGM5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNkbWEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZG1hLmgKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgY29tcGxldGVzIGEgcmVxdWVzdGVkIERNQSBvcGVyYXRpb24uCiAKICAgIFJldHVybnMKLSAgIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgbW9kdWxlIGluaXRpYWxpemVkIHN1Y2Vzc2Z1bGx5CisgICBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIG1vZHVsZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkKICAgIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZHVyaW5nCiAJCWluaXRpYWxpemF0aW9uCiAgICBDWV9BU19FUlJPUl9BTFJFQURZX1JVTk5JTkcgLSB0aGUgRE1BIG1vZHVsZSB3YXMgYWxyZWFkeSBydW5uaW5nCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgIHRoZW4gZnJlZWluZyB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIERNQSBlbmRwb2ludC4KIAogICAgUmV0dXJucwotICAgQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBtb2R1bGUgc2h1dGRvd24gc3VjZXNzZnVsbHkKKyAgIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgbW9kdWxlIHNodXRkb3duIHN1Y2Nlc3NmdWxseQogICAgQ1lfQVNfRVJST1JfTk9UX1JVTk5JTkcgLSB0aGUgRE1BIG1vZHVsZSB3YXMgbm90IHJ1bm5pbmcKIAogICAgU2VlIEFsc28KQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAgICBSZXR1cm5zCiAgICBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHRyYWZmaWMgb24gdGhlIGVuZHBvaW50IGlzIGNhbmNlbGVkCi0Jc3VjZXNzZnVsbHkKKwlzdWNjZXNzZnVsbHkKIAogICAgU2VlIEFsc28KICovCkBAIC0yNjYsNyArMjY2LDcgQEAKICAgIHdpbGwgaGF2ZSB0byBtYWludGFpbiBhIGxpc3Qgb2Ygc2xlZXAgY2hhbm5lbHMgdG8gd2FrZS4KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHF1ZXVlIGhhcyBkcmFpbmVkIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgcXVldWUgaGFzIGRyYWluZWQgc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfRU5EUE9JTlQgLSB0aGUgZW5kcG9pbnQgZ2l2ZW4gaXMgbm90IHZhbGlkCiAgICAqIENZX0FTX0VSUk9SX05FU1RFRF9TTEVFUCAtIEN5QXNEbWFRdWV1ZVJlcXVlc3QoKSB3YXMgcmVxdWVzdGVkCiAgICAqCW9uIGFuIGVuZHBvaW50IHdoZXJlIEN5QXNEbWFRdWV1ZVJlcXVlc3Qgd2FzIGFscmVhZHkgY2FsbGVkCkBAIC0yOTUsNyArMjk1LDcgQEAKICAgIEN5QXNIYWxEbWFTZXR1cFJlYWQoKSBmdW5jdG9pbnMuCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSB2YWx1ZSB3YXMgc2V0IHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgdmFsdWUgd2FzIHNldCBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9TSVpFIC0gdGhlIHNpemUgdmFsdWUgd2FzIG5vdCB2YWxpZAogKi8KIGV4dGVybiBjeV9hc19yZXR1cm5fc3RhdHVzX3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNlcnIuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNlcnIuaAppbmRleCBmNzhkNjAyLi4yY2QwYWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZXJyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2Vyci5oCkBAIC0yOSw3ICsyOSw3IEBACiAqLwogCiAvKiBTdW1tYXJ5Ci0gICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Vzc2Z1bGx5CisgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQogKi8KICNkZWZpbmUgQ1lfQVNfRVJST1JfU1VDQ0VTUwkgKDApCiAKQEAgLTc5Niw3ICs3OTYsNyBAQAogICAgRGVzY3JpcHRpb24KICAgIFRoaXMgZXJyb3IgaXMgcmV0dXJuZWQgd2hlbiBhbiBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkIHRoYXQgY2Fubm90IGJlCiAgICBjb21wbGV0ZWQgd2hpbGUgdGhlIFVTQiBzdGFjayBpcyBjb25uZWN0ZWQgdG8gYSBVU0IgaG9zdC4gIEluIG9yZGVyCi0gICB0byBzdWNlc3NmdWxseSBjb21wbGV0ZSB0aGUgZGVzaXJlZCBvcGVyYXRpb24sIEN5QXNVc2JEaXNjb25uZWN0KCkKKyAgIHRvIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSB0aGUgZGVzaXJlZCBvcGVyYXRpb24sIEN5QXNVc2JEaXNjb25uZWN0KCkKICAgIG11c3QgYmUgY2FsbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSB0aGUgaG9zdC4KICovCiAjZGVmaW5lIENZX0FTX0VSUk9SX1VTQl9DT05ORUNURUQgKDUzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2hhbGRvYy5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2hhbGRvYy5oCmluZGV4IDI4MTM2YWQuLjViY2JlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNoYWxkb2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzaGFsZG9jLmgKQEAgLTU5Nyw3ICs1OTcsNyBAQAogICAgQ3lBc0hhbFNsZWVwQ2hhbm5lbC4KIAogICAgUmV0dXJucwotICAgQ3lUcnVlIGlzIHRoZSBpbml0aWFsaXphdGlvbiB3YXMgc3VjZXNzZnVsLCBhbmQgQ3lGYWxzZSBvdGhlcndpc2UKKyAgIEN5VHJ1ZSBpcyB0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGFuZCBDeUZhbHNlIG90aGVyd2lzZQogCiAgICBTZWUgQWxzbwogICAgKiBDeUFzSGFsU2xlZXBDaGFubmVsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzaW50ci5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2ludHIuaAppbmRleCAzZDcwNjNlLi42MGE2ZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzaW50ci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNpbnRyLmgKQEAgLTY5LDcgKzY5LDcgQEAKIAogICAgUmV0dXJucwogICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIGludGVycnVwdCBtb2R1bGUgd2FzIHN0b3BwZWQKLSAgICoJc3VjZXNzZnVsbHkKKyAgICoJc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX05PVF9SVU5OSU5HIC0gdGhlIGludGVycnVwdCBtb2R1bGUgd2FzIG5vdAogICAgKglydW5uaW5nCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNtaXNjLmggYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzbWlzYy5oCmluZGV4IDJmMDcwMTguLmRmN2MyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNtaXNjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc21pc2MuaApAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAqIE5lc3RhYmxlOiBZRVMKIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIGZpcm13YXJlIHdhcyBzdWNlc3NmdWxseSBkb3dubG9hZGVkCisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgZmlybXdhcmUgd2FzIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfSEFORExFCiAgICAqIENZX0FTX0VSUk9SX05PVF9DT05GSUdVUkVEIC0gdGhlIFdlc3QgQnJpZGdlIGRldmljZQogICAgKgl3YXMgbm90IGNvbmZpZ3VyZWQKQEAgLTgzNiw3ICs4MzYsNyBAQAogICAgb3duZXJzaGlwLgogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgcCBwb3J0IHN1Y2Vzc2Z1bGx5IGFjcXVpcmVkIHRoZQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHAgcG9ydCBzdWNjZXNzZnVsbHkgYWNxdWlyZWQgdGhlCiAgICAqIAlyZXNvdXJjZSBvZiBpbnRlcmVzdAogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRApAQCAtODc5LDcgKzg3OSw3IEBACiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogTk8KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHAgcG9ydCBzdWNlc3NmdWxseSByZWxlYXNlZAorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHAgcG9ydCBzdWNjZXNzZnVsbHkgcmVsZWFzZWQKICAgICoJdGhlIHJlc291cmNlIG9mIGludGVyZXN0CiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfSEFORExFCiAgICAqIENZX0FTX0VSUk9SX05PVF9DT05GSUdVUkVECkBAIC05MjksNyArOTI5LDcgQEAKIAogICAgUmV0dXJucwogICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHRyYWNlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4KLSAgICoJc3VjZXNzZnVsbHkgY2hhbmdlZAorICAgKglzdWNjZXNzZnVsbHkgY2hhbmdlZAogICAgKiBDWV9BU19FUlJPUl9OT19TVUNIX0JVUyAtIHRoZSBidXMgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0CiAgICAqIENZX0FTX0VSUk9SX05PX1NVQ0hfREVWSUNFIC0gdGhlIHNwZWNpZmllZCBtZWRpYS9kZXZpY2UKICAgICoJcGFpciBkb2VzIG5vdCBleGlzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3Byb3RvY29sLmggYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzcHJvdG9jb2wuaAppbmRleCAzMTc4MDVmLi43NzNiNjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzcHJvdG9jb2wuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzcHJvdG9jb2wuaApAQCAtNzU2LDcgKzc1Niw3IEBACiAJICogMSA6IERlYnVnIG1vZGUKIAogICAgRGVzY3JpcHRpb24KLSAgIFRoaXMgcmVwb25zZSBpcyBzZW50IHRvIHJldHVybiB0aGUgZmlybXdhcmUgdmVyc2lvbgorICAgVGhpcyByZXNwb25zZSBpcyBzZW50IHRvIHJldHVybiB0aGUgZmlybXdhcmUgdmVyc2lvbgogICAgbnVtYmVyIHRvIHRoZSByZXF1ZXN0b3IuCiAgKi8KICNkZWZpbmUgQ1lfUkVTUF9GSVJNV0FSRV9WRVJTSU9OICgxNikKQEAgLTM2NTUsNyArMzY1NSw3IEBACiAgICBUaGlzIHJlcXVlc3QgaXMgc2VudCB0byB0aGUgV2VzdCBCcmlkZ2Ugd2hlbiB0aGUgUCBwb3J0CiAgICBuZWVkcyB0byBzZW5kIGRhdGEgdG8gdGhlIEhvc3QgaW4gYSBUdXJibyBFbmRwb2ludC4KICAgIFVwb24gcmVjZWl2aW5nIHRoaXMgZXZlbnQsIEZpcm13YXJlIHdpbGwgbWFrZSB0aGUgZW5kIHBvaW50Ci0gICBhdmlsYWJsZSBmb3IgdGhlIFAgcG9ydC4gSWYgdGhlIGxlbmd0aCBpcyB6ZXJvLCB0aGVuCisgICBhdmFpbGFibGUgZm9yIHRoZSBQIHBvcnQuIElmIHRoZSBsZW5ndGggaXMgemVybywgdGhlbgogICAgZmlybXdhcmUgd2lsbCBzZW5kIGEgemVybyBsZW5ndGggcGFja2V0LgogCiAgICBEaXJlY3Rpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNzdG9yYWdlLmggYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzc3RvcmFnZS5oCmluZGV4IDY0ZjA3OGMuLjUyYjkzYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNzdG9yYWdlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3N0b3JhZ2UuaApAQCAtODMyLDcgKzgzMiw3IEBACiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbgogICAgKglsb2FkZWQgaW50byBXZXN0IEJyaWRnZQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRSAtIGFuIGludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgaW4KLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBtb2R1bGUgc3RhcnRlZCBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIG1vZHVsZSBzdGFydGVkIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9USU1FT1VUIC0gYSB0aW1lb3V0IG9jY3VycmVkIGNvbW11bmljYXRpbmcKICAgICoJd2l0aCB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlCiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkKQEAgLTg4Miw3ICs4ODIsNyBAQAogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRSAtIGFuIGludmFsaWQgaGFuZGxlIHdhcwogICAgKglwYXNzZWQgaW4KICAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0Ci0gICAqCWRvd24gc3VjZXNzZnVsbHkKKyAgICoJZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfVElNRU9VVCAtIGEgdGltZW91dCBvY2N1cnJlZAogICAgKgljb21tdW5pY2F0aW5nIHdpdGggdGhlIFdlc3QgQnJpZGdlIGRldmljZQogICAgKiBDWV9BU19FUlJPUl9OT1RfUlVOTklORwpAQCAtOTM0LDcgKzkzNCw3IEBACiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfSEFORExFIC0gYW4gaW52YWxpZCBoYW5kbGUKICAgICoJd2FzIHBhc3NlZCBpbgogICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIGZ1bmN0aW9uIHdhcyByZWdpc3RlcmVkCi0gICAqCXN1Y2Vzc2Z1bGx5CisgICAqCXN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfUlVOTklORyAtIHRoZSBzdGFjayBpcyBub3QgcnVubmluZwogCiAgICBTZWUgQWxzbwpAQCAtOTgxLDcgKzk4MSw3IEBACiAgICAqCWJlZW4gc3RhcnRlZAogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRSAtIGFuIGludmFsaWQgaGFuZGxlIHdhcwogICAgKglwYXNzZWQgaW4KLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgcmVxdWVzdCB3YXMgc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5CiAgICAqCXRyYW5zbWl0dGVkIHRvIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKICAgICogQ1lfQVNfRVJST1JfVElNRU9VVCAtIGEgdGltZW91dCBvY2N1cnJlZCBjb21tdW5pY2F0aW5nCiAgICAqCXdpdGggdGhlIFdlc3QgQnJpZGdlIGRldmljZQpAQCAtMTAzNCw3ICsxMDM0LDcgQEAKICAgICoJYmVlbiBzdGFydGVkCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfSEFORExFIC0gYW4gaW52YWxpZCBoYW5kbGUKICAgICoJd2FzIHBhc3NlZCBpbgotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIG1lZGlhIHdhcyBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIG1lZGlhIHdhcyBzdWNjZXNzZnVsbHkKICAgICoJcmVsZWFzZWQKICAgICogQ1lfQVNfRVJST1JfTUVESUFfTk9UX0NMQUlNRUQgLSB0aGUgbWVkaWEgd2FzIG5vdAogICAgKgljbGFpbWVkIGJ5IHRoZSBQIHBvcnQKQEAgLTE5MDUsNyArMTkwNSw3IEBACiAgICBkaWZmZXIgYmV0d2VlbiBTRCBjYXJkcy4KIAogICAgQSBsYXJnZSBlcmFzZSBjYW4gdGFrZSBhIHdoaWxlIHRvIGNvbXBsZXRlIGRlcGVuZGluZyBvbiB0aGUgU0QKLSAgIGNhcmQuIEluIHN1Y2ggYSBjYXNlIGl0IGlzIHJlY2NvbWVuZGVkIHRoYXQgYW4gYXN5bmMgY2FsbCBpcyBtYWRlLgorICAgY2FyZC4gSW4gc3VjaCBhIGNhc2UgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbiBhc3luYyBjYWxsIGlzIG1hZGUuCiAKICAgIFJldHVybnMKICAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIEFQSSBjYWxsIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKQEAgLTE5MjYsNyArMTkyNiw3IEBACiAgICAqCXJlcXVpcmVkIGJlZm9yZSBlcmFzZSBpcyBhbGxvd2VkCiAgICAqIENZX0FTX0VSUk9SX05PX1NVQ0hfQlVTCiAgICAqIENZX0FTX0VSUk9SX05PX1NVQ0hfREVWSUNFCi0gICAqIENZX0FTX0VSUk9SX05PVF9TVVBQT1JURUQgLSBFcmFzZSBpcyBjdXJyZW5seSBvbmx5IHN1cHBvcnRlZAorICAgKiBDWV9BU19FUlJPUl9OT1RfU1VQUE9SVEVEIC0gRXJhc2UgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkCiAgICAqCW9uIFNEIGFuZCB1c2luZyBTRCBvbmx5IGZpcm13YXJlCiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkKIApAQCAtMTk4NSw3ICsxOTg1LDcgQEAKICAgICoJdHlwZSB3YXMgbWFkZQogICAgKiBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZIC0gaW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9SRVNQT05TRSAtIGFuIGVycm9yIG1lc3NhZ2Ugd2FzCi0gICAqCXJlY2lldmVkIGZyb20gdGhlIGZpcm13YXJlCisgICAqCXJlY2VpdmVkIGZyb20gdGhlIGZpcm13YXJlCiAgICAqIENZX0FTX0VSUk9SX01FRElBX0FDQ0VTU19GQUlMVVJFIC0gdGhlcmUgd2FzIGVycm9yIGluCiAgICAqCXJlYWRpbmcgZnJvbSB0aGUgbWVkaWEKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9GVU5DVElPTiAtIEFuIElPIGF0dGVtcHQgd2FzIG1hZGUgdG8KQEAgLTIwNDcsNyArMjA0Nyw3IEBACiAgICAqCXBhaXIgZG9lcyBub3QgZXhpc3QKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcwotICAgKglyZWNpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZQorICAgKglyZWNlaXZlZCBmcm9tIHRoZSBmaXJtd2FyZQogCiAqLwogY3lfYXNfcmV0dXJuX3N0YXR1c190CkBAIC0yMDk1LDcgKzIwOTUsNyBAQAogICAgKglwYWlyIGRvZXMgbm90IGV4aXN0CiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMKLSAgICoJcmVjaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUKKyAgICoJcmVjZWl2ZWQgZnJvbSB0aGUgZmlybXdhcmUKICAgICovCiBjeV9hc19yZXR1cm5fc3RhdHVzX3QKIGN5X2FzX3NkaW9fcmVzZXRfY2FyZCgKQEAgLTIxMzksNyArMjEzOSw3IEBACiAgICAqIENZX0FTX0VSUk9SX05PX1NVQ0hfREVWSUNFIC0gdGhlIHNwZWNpZmllZCBtZWRpYS9kZXZpY2UgcGFpcgogICAgKglkb2VzIG5vdCBleGlzdAogICAgKiBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZIC0gaW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUKLSAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9SRVNQT05TRSAtIGFuIGVycm9yIG1lc3NhZ2Ugd2FzIHJlY2lldmVkCisgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcyByZWNlaXZlZAogICAgKglmcm9tIHRoZSBmaXJtd2FyZQogICAgKiBDWV9BU19FUlJPUl9NRURJQV9BQ0NFU1NfRkFJTFVSRSAtIHRoZXJlIHdhcyBlcnJvciBpbiByZWFkaW5nCiAgICAqCWZyb20gdGhlIG1lZGlhCkBAIC0yMTk4LDcgKzIxOTgsNyBAQAogICAgKiBDWV9BU19FUlJPUl9OT19TVUNIX0RFVklDRSAtIHRoZSBzcGVjaWZpZWQgbWVkaWEvZGV2aWNlCiAgICAqIHBhaXIgZG9lcyBub3QgZXhpc3QKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlCi0gICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcyByZWNpZXZlZAorICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMgcmVjZWl2ZWQKICAgICogZnJvbSB0aGUgZmlybXdhcmUKICAgICogQ1lfQVNfRVJST1JfTUVESUFfQUNDRVNTX0ZBSUxVUkUgLSB0aGVyZSB3YXMgZXJyb3IgaW4KICAgICogcmVhZGluZyBmcm9tIHRoZSBtZWRpYQpAQCAtMjI2Miw3ICsyMjYyLDcgQEAKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkKICAgICoJYXZhaWxhYmxlCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcwotICAgKglyZWNpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZQorICAgKglyZWNlaXZlZCBmcm9tIHRoZSBmaXJtd2FyZQogICAgKiBDWV9BU19FUlJPUl9NRURJQV9BQ0NFU1NfRkFJTFVSRSAtIHRoZXJlIHdhcyBlcnJvciBpbgogICAgKglyZWFkaW5nIGZyb20gdGhlIG1lZGlhCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfRlVOQ1RJT04gLSBBbiBJTyBhdHRlbXB0IHdhcyBtYWRlCkBAIC0yMzE5LDcgKzIzMTksNyBAQAogICAgKglwYWlyIGRvZXMgbm90IGV4aXN0CiAgICAqIENZX0FTX0VSUk9SX0FTWU5DX1BFTkRJTkcgLSBhbiBhc3luYyBvcGVyYXRpb24gaXMgcGVuZGluZwogICAgKiBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZIC0gaW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUKLSAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9SRVNQT05TRSAtIGFuIGVycm9yIG1lc3NhZ2Ugd2FzIHJlY2lldmVkCisgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcyByZWNlaXZlZAogICAgKglmcm9tIHRoZSBmaXJtd2FyZQogICAgKiBDWV9BU19FUlJPUl9NRURJQV9BQ0NFU1NfRkFJTFVSRSAtIHRoZXJlIHdhcyBlcnJvciBpbgogICAgKglyZWFkaW5nIGZyb20gdGhlIG1lZGlhCkBAIC0yMzk2LDcgKzIzOTYsNyBAQAogICAgKiBDWV9BU19FUlJPUl9BU1lOQ19QRU5ESU5HIC0gYW4gYXN5bmMgb3BlcmF0aW9uIGlzIHBlbmRpbmcKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcwotICAgKglyZWNpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZQorICAgKglyZWNlaXZlZCBmcm9tIHRoZSBmaXJtd2FyZQogICAgKiBDWV9BU19FUlJPUl9NRURJQV9BQ0NFU1NfRkFJTFVSRSAtIHRoZXJlIHdhcyBlcnJvciBpbgogICAgKglyZWFkaW5nIGZyb20gdGhlIG1lZGlhCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfRlVOQ1RJT04gLSBBbiBJTyBhdHRlbXB0IHdhcyBtYWRlCkBAIC0yNDcxLDcgKzI0NzEsNyBAQAogICAgKiBwYWlyIGRvZXMgbm90IGV4aXN0CiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMKLSAgICoJcmVjaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUKKyAgICoJcmVjZWl2ZWQgZnJvbSB0aGUgZmlybXdhcmUKICAgICogQ1lfQVNfRVJST1JfTUVESUFfQUNDRVNTX0ZBSUxVUkUgLSB0aGVyZSB3YXMgZXJyb3IgaW4KICAgICoJcmVhZGluZyBmcm9tIHRoZSBtZWRpYQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0ZVTkNUSU9OIC0gQW4gSU8gYXR0ZW1wdCB3YXMgbWFkZQpAQCAtMjcxNCw3ICsyNzE0LDcgQEAKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkKICAgICoJYXZhaWxhYmxlCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcwotICAgKglyZWNpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZQorICAgKglyZWNlaXZlZCBmcm9tIHRoZSBmaXJtd2FyZQogICAgKiBDWV9BU19FUlJPUl9NRURJQV9BQ0NFU1NfRkFJTFVSRSAtIHRoZXJlIHdhcyBlcnJvcgogICAgKglpbiByZWFkaW5nIGZyb20gdGhlIG1lZGlhCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfRlVOQ1RJT04gLSBBbiBJTyBhdHRlbXB0IHdhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3VzYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3VzYi5oCmluZGV4IDRhNTQ5ZTEuLmUzYmE5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXN1c2IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzdXNiLmgKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICAgYmUgc2VsZWN0ZWQgb24gYSBwYXJ0aXRpb25lZCBzdG9yYWdlIGRldmljZS4KIAogICAgRGVzY3JpcHRpb24KLSAgIFdlc3QgQnJpZGdlIGZpcm13YXJlIHN1cHBvcnRzIGNyZWF0aW5nIHVwdG8gdHdvCisgICBXZXN0IEJyaWRnZSBmaXJtd2FyZSBzdXBwb3J0cyBjcmVhdGluZyB1cCB0byB0d28KICAgIHBhcnRpdGlvbnMgb24gbWFzcyBzdG9yYWdlIGRldmljZXMgY29ubmVjdGVkIHRvCiAgICBXZXN0IEJyaWRnZS4gIFdoZW4gdGhlcmUgYXJlIHR3byBwYXJ0aXRpb25zIG9uIGEgZGV2aWNlLAogICAgdGhlIHVzZXIgY2FuIGNob29zZSB3aGljaCBvZiB0aGVzZSBwYXJ0aXRpb25zIHNob3VsZCBiZQpAQCAtNjk4LDcgKzY5OCw3IEBACiAgICAqCWJlZW4gY29uZmlndXJlZAogICAgKiBDWV9BU19FUlJPUl9OT19GSVJNV0FSRSAtIHRoZSBmaXJtd2FyZSBoYXMgbm90IGJlZW4gbG9hZGVkCiAgICAqCWludG8gV2VzdCBCcmlkZ2UKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX1RJTUVPVVQgLSBhIHRpbWVvdXQgb2NjdXJyZWQgY29tbXVuaWNhdGluZyB3aXRoCiAgICAqCXRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKIApAQCAtNzUyLDcgKzc1Miw3IEBACiAgICAqIE5lc3RhYmxlOiBZRVMKIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTc5MSw3ICs3OTEsNyBAQAogICAgKiBOZXN0YWJsZTogWUVTCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX05PVF9DT05GSUdVUkVEIC0gdGhlIFdlc3QgQnJpZGdlIGRldmljZSBoYXMgbm90CiAgICAqCWJlZW4gY29uZmlndXJlZAogICAgKiBDWV9BU19FUlJPUl9OT19GSVJNV0FSRSAtIHRoZSBmaXJtd2FyZSBoYXMgbm90IGJlZW4gbG9hZGVkCkBAIC04MjUsNyArODI1LDcgQEAKICAgICogVmFsaWQgSW4gQXN5bmNocm9ub3VzIENhbGxiYWNrOiBZZXMgKGlmIGNiIHN1cHBsaWVkKQogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRCAtIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UgaGFzIG5vdAogICAgKgliZWVuIGNvbmZpZ3VyZWQKICAgICogQ1lfQVNfRVJST1JfTk9fRklSTVdBUkUgLSB0aGUgZmlybXdhcmUgaGFzIG5vdCBiZWVuIGxvYWRlZApAQCAtODU1LDEzICs4NTUsMTMgQEAKICAgIHRoZSBVU0Igc3RhY2sKIAogICAgRGVzY3JpcHRpb24KLSAgIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSByZXF1ZXN0IHRvIFdlc3QgQnJpZGdlIHRvIHJldHJlaXZlCisgICBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgcmVxdWVzdCB0byBXZXN0IEJyaWRnZSB0byByZXRyaWV2ZQogICAgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgogCiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogWWVzIChpZiBjYiBzdXBwbGllZCkKIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTkwNiw3ICs5MDYsNyBAQAogICAgQ2hhcHRlciA5LgogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRCAtIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UgaGFzIG5vdAogICAgKgliZWVuIGNvbmZpZ3VyZWQKICAgICogQ1lfQVNfRVJST1JfTk9fRklSTVdBUkUgLSB0aGUgZmlybXdhcmUgaGFzIG5vdCBiZWVuIGxvYWRlZApAQCAtOTkzLDcgKzk5Myw3IEBACiAgICBEZXNjcmlwdGlvbgogICAgVGhpcyBkYXRhIHN0cnVjdHVyZSB0aGUgYnVmZmVyIHRvIGhvbGQgdGhlIGRlc2NyaXB0b3IKICAgIGRhdGEsIGFuZCBhbiBpbi9vdXQgcGFyYW1ldGVyIHRpIGluZGljYXRlIHRoZQotICAgbGVuZ2h0IG9mIHRoZSBidWZmZXIgYW5kIGRlc2NyaXB0b3IgZGF0YSBpbiBieXRlcy4KKyAgIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGFuZCBkZXNjcmlwdG9yIGRhdGEgaW4gYnl0ZXMuCiAKICAgIFNlZSBBbHNvCiAgICAqIEN5QXNVc2JHZXREZXNjcmlwdG9yCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogICAgQ2hhcHRlciA5LgogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRCAtIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UgaGFzIG5vdAogICAgKgliZWVuIGNvbmZpZ3VyZWQKICAgICogQ1lfQVNfRVJST1JfTk9fRklSTVdBUkUgLSB0aGUgZmlybXdhcmUgaGFzIG5vdCBiZWVuIGxvYWRlZApAQCAtMTEwNiw3ICsxMTA2LDcgQEAKICAgICogVmFsaWQgSW4gQXN5bmNocm9ub3VzIENhbGxiYWNrOiBOTwogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRCAtIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UgaGFzIG5vdAogICAgKgliZWVuIGNvbmZpZ3VyZWQKICAgICogQ1lfQVNfRVJST1JfTk9fRklSTVdBUkUgLSB0aGUgZmlybXdhcmUgaGFzIG5vdCBiZWVuIGxvYWRlZApAQCAtMTE0MCw3ICsxMTQwLDcgQEAKICAgIEFkZCBkb2N1bWVudGF0aW9uIGFib3V0IGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gbGltaXRhdGlvbnMKIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTExODEsNyArMTE4MSw3IEBACiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogTk8KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTEyMTksNyArMTIxOSw3IEBACiAgICBmdW5jdGlvbnMgc3RvcmUgYXdheSB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgdGhpcwogICAgQ3lBc1VzYkNvbW1pdENvbmZpZygpIGFjdHVhbGx5IGZpbmRzIHRoZQogICAgYmVzdCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgZW5kcG9pbnQKLSAgIGNvbmZpZ3VyYXRpb24gYW5kIHNlbmRzIHRoc2kgb3B0aW1hbAorICAgY29uZmlndXJhdGlvbiBhbmQgc2VuZHMgdGhpcyBvcHRpbWFsCiAgICBjb25maXVyYXRpb24gZG93biB0byB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlLgogCiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogWUVTIChpZiBjYiBzdXBwbGllZCkKQEAgLTEyNjgsNyArMTI2OCw3IEBACiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogTk8KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfVElNRU9VVCAtIGEgdGltZW91dCBvY2N1cnJlZCBjb21tdW5pY2F0aW5nIHdpdGgKICAgICoJdGhlIFdlc3QgQnJpZGdlIGRldmljZQogICAgKiBDWV9BU19FUlJPUl9OT1RfUlVOTklORyAtIHRoZSBVU0Igc3RhY2sgaXMgbm90IHJ1bm5pbmcKQEAgLTEzMTEsNyArMTMxMSw3IEBACiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogWUVTCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX1RJTUVPVVQgLSBhIHRpbWVvdXQgb2NjdXJyZWQgY29tbXVuaWNhdGluZyB3aXRoCiAgICAqCXRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKICAgICogQ1lfQVNfRVJST1JfTk9UX1JVTk5JTkcgLSB0aGUgVVNCIHN0YWNrIGlzIG5vdCBydW5uaW5nCkBAIC0xMzU1LDcgKzEzNTUsNyBAQAogICAgYSB6ZXJvIGxlbmd0aCBwYWNrZXQgdHJhbnNtaXR0ZWQgdG8gdGhlIFVTQiBob3N0LgogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9USU1FT1VUIC0gYSB0aW1lb3V0IG9jY3VycmVkIGNvbW11bmljYXRpbmcgd2l0aAogICAgKgl0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlCiAgICAqIENZX0FTX0VSUk9SX05PVF9SVU5OSU5HIC0gdGhlIFVTQiBzdGFjayBpcyBub3QgcnVubmluZwpAQCAtMTM5NSw3ICsxMzk1LDcgQEAKICAgIGluIGEgemVybyBsZW5ndGggcGFja2V0IHRyYW5zbWl0dGVkIHRvIHRoZSBVU0IgaG9zdC4KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfVElNRU9VVCAtIGEgdGltZW91dCBvY2N1cnJlZCBjb21tdW5pY2F0aW5nIHdpdGgKICAgICoJdGhlIFdlc3QgQnJpZGdlIGRldmljZQogICAgKiBDWV9BU19FUlJPUl9OT1RfUlVOTklORyAtIHRoZSBVU0Igc3RhY2sgaXMgbm90IHJ1bm5pbmcKQEAgLTE0MzUsNyArMTQzNSw3IEBACiAKICAgIFJldHVybnMKICAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24KLSAgICoJc3VjZXNzZnVsbHkKKyAgICoJc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX05PVF9SVU5OSU5HIC0gdGhlIFVTQiBzdGFjayBpcyBub3QKICAgICoJcnVubmluZwogICAgKiBDWV9BU19FUlJPUl9BU1lOQ19OT1RfUEVORElORyAtIG5vIGFzeW5jaHJvbm91cyBVU0IKQEAgLTE3OTEsNyArMTc5MSw3IEBACiAgICBkZXZpY2Ugc2hvdWxkIGJlIG1hZGUgdmlzaWJsZSB0byBVU0IuCiAKICAgIERlc2NyaXB0aW9uCi0gICBXZXN0IEJyaWRnZSBmaXJtd2FyZSBzdXBwb3J0cyB0aGUgY3JlYXRpb24gb2YgdXB0byB0d28KKyAgIFdlc3QgQnJpZGdlIGZpcm13YXJlIHN1cHBvcnRzIHRoZSBjcmVhdGlvbiBvZiB1cCB0byB0d28KICAgIHBhcnRpdGlvbnMgb24gbWFzcyBzdG9yYWdlIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBXZXN0IEJyaWRnZQogICAgZGV2aWNlLiAgV2hlbiB0aGVyZSBhcmUgdHdvIHBhcnRpdGlvbnMgb24gYSBkZXZpY2UsIHRoZSB1c2VyIGNhbgogICAgY2hvb3NlIHdoaWNoIG9mIHRoZXNlIHBhcnRpdGlvbnMgc2hvdWxkIGJlIG1hZGUgdmlzaWJsZSB0byB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kcy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKaW5kZXggOWNmZWE5NC4uYzlmMGU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCiAJCQlUeERlc0luZGV4ID0gcE1kcy0+VHhEZXNJbmRleDsgLyogR2V0IHRoZSBjdXJyZW50IElEICovCiAJCQlwVHhEZXMtPkRlc2NyaXB0b3JfSUQgPSBUeERlc0luZGV4OwotCQkJcE1kcy0+VHhEZXNGcm9tW1R4RGVzSW5kZXhdID0gMjsgLyogU3RvcmluZyB0aGUgaW5mb3JtYXRpb24gb2Ygc291cmNlIGNvbW1pbmcgZnJvbSAqLworCQkJcE1kcy0+VHhEZXNGcm9tW1R4RGVzSW5kZXhdID0gMjsgLyogU3RvcmluZyB0aGUgaW5mb3JtYXRpb24gb2Ygc291cmNlIGNvbWluZyBmcm9tICovCiAJCQlwTWRzLT5UeERlc0luZGV4Kys7CiAJCQlwTWRzLT5UeERlc0luZGV4ICU9IE1BWF9VU0JfVFhfREVTQ1JJUFRPUjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvUkVBRE1FLnVidW50dSBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL1JFQURNRS51YnVudHUKaW5kZXggNDdiZWFlYy4uZWRlZThiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvUkVBRE1FLnVidW50dQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9SRUFETUUudWJ1bnR1CkBAIC0xMTYsNyArMTE2LDcgQEAKIAogVGhlIEFnZXJlIFN5c3RlbXMgbGljZW5zZSBhcHBsaWVzLiBUaGlzIGlzIHdoeSBJIGluY2x1ZGUgdGhlIG9yaWdpbmFsCiBSRUFETUUud2xhZ3M0OS4gVGhlIGluc3RydWN0aW9ucyBpbiB0aGF0IGZpbGUgYXJlIGJvZ3VzIG5vdy4gSSBhbHNvCi1pbmNsdWRlIHRoZSBtYW4gcGFnZS4gRXZlbnRob3VnaCBzZXR0aW5nIHBhcmFtZXRlcnMgb24gdGhlIG1vZHVsZQoraW5jbHVkZSB0aGUgbWFuIHBhZ2UuIEV2ZW4gdGhvdWdoIHNldHRpbmcgcGFyYW1ldGVycyBvbiB0aGUgbW9kdWxlCiBkb2VzIG5vdCB3b3JrIGFueW1vcmUgYnV0IGl0IHByb3ZpZGVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZQogc2V0dGluZ3MuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9UT0RPCmluZGV4IDE0YWE0MTUuLjk0MDMyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvVE9ETwpAQCAtMSw3ICsxLDcgQEAKIEZpcnN0IG9mIGFsbCwgdGhlIGJlc3QgdGhpbmcgd291bGQgYmUgdGhhdCB0aGlzIGRyaXZlciBiZWNvbWVzIG9ic29sdGUgYnkKIGFkZGluZyBzdXBwb3J0IGZvciBIZXJtZXMgSUkgYW5kIEhlcm1lcyBJSS41IGNhcmRzIHRvIHRoZSBleGlzdGluZyBvcmlub2NvCiBkcml2ZXIuIFRoZSBvcmlub2NvIGRyaXZlciBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBIZXJtZXMgSSBiYXNlZCBjYXJkcy4KLVNpbmNlIHRoaXMgd2lsbCBub3QgaGFwcGVuIGJ5IG1hZ2ljIGFuZCBoYXMgbm90IGhhcHBlbmQgdW50aWwgbm93IHRoaXMKK1NpbmNlIHRoaXMgd2lsbCBub3QgaGFwcGVuIGJ5IG1hZ2ljIGFuZCBoYXMgbm90IGhhcHBlbmVkIHVudGlsIG5vdyB0aGlzCiBkcml2ZXIgcHJvdmlkZXMgYSBzdG9wLWdhcCBzb2x1dGlvbiBmb3IgdGhlc2UgdHlwZSBvZiBjYXJkcy4KIAogSGF2aW5nIHNhaWQgdGhhdCwgdGhlIGZvbGxvd2luZyB3aXNobGlzdCBjb21lcyB0byBtaW5kIHRvIG1ha2UgdGhlIGRyaXZlcgpAQCAtMTgsNyArMTgsNyBAQAogCS0gdGhlIGRyaXZlciBpcyBzcGxpdCBpbnRvIGEgSGVybWVzIElJIGFuZCBhIEhlcm1lcyBJSS41IHBhcnQsIGl0CiAJICB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBib3RoIHdpdGggb25lIG1vZHVsZSBpbnN0ZWFkIG9mIHR3bwogCS0gcmV2aWV3IGJ5IHRoZSB3aXJlbGVzcyBkZXZlbG9wZXIgY29tbXVuaXR5Ci0JLSB2ZXJpZnkgdGhlIGNvZGUgYWdhaW5zdCB0aGUgY29kaW5nIHN0YW5kYXJkcyBmb3IgYSBwcm9wcGVyIGxpbnV4CisJLSB2ZXJpZnkgdGhlIGNvZGUgYWdhaW5zdCB0aGUgY29kaW5nIHN0YW5kYXJkcyBmb3IgYSBwcm9wZXIgbGludXgKIAkgIGRyaXZlcgogCS0gcmVzb2x2ZSBsaWNlbnNlIGlzc3VlcyAoPykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2YuYwppbmRleCBkNGJkZDNlLi5hNzMzMTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2YuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2YuYwpAQCAtNTQwLDcgKzU0MCw3IEBACiAqCiAqLkNPTkRJVElPTlMKICogRXhjZXB0IGZvciBoY2ZfYWN0aW9uIHdpdGggSENGX0FDVF9JTlRfRk9SQ0VfT04gb3IgSENGX0FDVF9JTlRfT0ZGIGFzIHBhcmFtZXRlciBvciBoY2ZfY29ubmVjdCB3aXRoIGFuIEkvTwotKiBhZGRyZXNzIChpLmUuIG5vdCBIQ0ZfRElTQ09OTkVDVCksIGFsbCBoY2YtZnVuY3Rpb24gY2FsbHMgTVVTVCBiZSBwcmVjZWVkZWQgYnkgYSBjYWxsIG9mIGhjZl9hY3Rpb24gd2l0aAorKiBhZGRyZXNzIChpLmUuIG5vdCBIQ0ZfRElTQ09OTkVDVCksIGFsbCBoY2YtZnVuY3Rpb24gY2FsbHMgTVVTVCBiZSBwcmVjZWRlZCBieSBhIGNhbGwgb2YgaGNmX2FjdGlvbiB3aXRoCiAqIEhDRl9BQ1RfSU5UX09GRiBhcyBwYXJhbWV0ZXIuCiAqIE5vdGUgdGhhdCBoY2ZfY29ubmVjdCBkZWZhdWx0cyB0byBOSUMgaW50ZXJydXB0IGRpc2FibGVkIG1vZGUsIGkuZS4gYXMgaWYgaGNmX2FjdGlvbiggSENGX0FDVF9JTlRfT0ZGICkKICogd2FzIGNhbGxlZC4KQEAgLTg0Myw3ICs4NDMsNyBAQAogKi5NT0RVTEUJCWludCBoY2ZfY250bCggSUZCUCBpZmJwLCBoY2ZfMTYgY21kICkKICouUFVSUE9TRQkJQ29ubmVjdCBvciBkaXNjb25uZWN0IGEgc3BlY2lmaWMgcG9ydCB0byBhIHNwZWNpZmljIG5ldHdvcmsuCiAqISEgIDs/Pz8/Pz8/Pz8/Pz8/Pz8/IGNvbnRpbnVlIG5lZWRzIG1vcmUgZXhwbGFuYXRpb24KLSoJCQkJcmVjb3ZlcnMgYnkgbWVhbnMgb2YgImNvbnRpbnVlIiB3aGVuIHRoZSBjb25uZWN0IHByb2NlcyBpbiBDQ1ggbW9kZSBmYWlscworKgkJCQlyZWNvdmVycyBieSBtZWFucyBvZiAiY29udGludWUiIHdoZW4gdGhlIGNvbm5lY3QgcHJvY2VzcyBpbiBDQ1ggbW9kZSBmYWlscwogKgkJCQlFbmFibGVzIG9yIGRpc2FibGVzIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gZm9yIHRoZSBOSUMuCiAqCQkJCUFjdGl2YXRlcyBzdGF0aWMgTklDIGNvbmZpZ3VyYXRpb24gZm9yIGEgc3BlY2lmaWMgcG9ydCBhdCBjb25uZWN0LgogKgkJCQlBY3RpdmF0ZXMgc3RhdGljIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBwb3J0cyBhdCBlbmFibGUuCkBAIC0xMTcwLDEyICsxMTcwLDEyIEBACiAJCWlvX2FkZHIgPSBpb19iYXNlOwogCX0KIAotI2lmIDAgLy87PyBpZiBhIHN1YnNlcXVlbnQgaGNmX2Nvbm5lY3QgaXMgcHJlY2VlZGVkIGJ5IGFuIGhjZl9kaXNjb25uZWN0IHRoZSB3YWtldXAgaXMgbm90IG5lZWRlZCAhIQorI2lmIDAgLy87PyBpZiBhIHN1YnNlcXVlbnQgaGNmX2Nvbm5lY3QgaXMgcHJlY2VkZWQgYnkgYW4gaGNmX2Rpc2Nvbm5lY3QgdGhlIHdha2V1cCBpcyBub3QgbmVlZGVkICEhCiAjaWYgSENGX1NMRUVQCiAgICAgT1VUX1BPUlRfV09SRCggLi4uLi4rSFJFR19JTywgSFJFR19JT19XQUtFVVBfQVNZTkMgKTsgCSAgICAvL09QVyBub3QgeWV0IHVzZWFibGUKIAlNU0ZfV0FJVCg4MDApOwkJCQkJCQkJLy8gTVNGLWRlZmluZWQgZnVuY3Rpb24gdG8gd2FpdCBuIG1pY3Jvc2Vjb25kcy4KIAlub3RlIHRoYXQgTVNGX1dBSVQgdXNlcyBub3QgeWV0IGRlZmluZWQhISEhIElGQl9JT0Jhc2UgYW5kIElGQl9UaWNrSW5pICh2aWEgUFJPVF9DTlRfSU5JKQotCXNvIGJlIGNhcmVmdWxsIGlmIHRoaXMgY29kZSBpcyByZXN0b3JlZAorCXNvIGJlIGNhcmVmdWwgaWYgdGhpcyBjb2RlIGlzIHJlc3RvcmVkCiAjZW5kaWYgLy8gSENGX1NMRUVQCiAjZW5kaWYgLy8gMAogCkBAIC0xNTYzLDcgKzE1NjMsNyBAQAogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgTVNGIHRvIHN1cHBseSB0aGUgSENGIHdpdGggbmV3L21vcmUgYnVmZmVycyBmb3IgcmVjZWl2ZSBwdXJwb3Nlcy4KICogVGhlIEhDRiBjYW4gYmUgdXNlZCBpbiAyIGZhc2hpb25zOiB3aXRoIGFuZCB3aXRob3V0IGVuY2Fwc3VsYXRpb24gZm9yIGRhdGEgdHJhbnNmZXIuCiAqIFRoaXMgaXMgY29udHJvbGxlZCBhdCBjb21waWxlIHRpbWUgYnkgdGhlIEhDRl9FTkMgYml0IG9mIHRoZSBIQ0ZfRU5DQVAgc3lzdGVtIGNvbnN0YW50LgotKiBBcyBhIGNvbnNlcXVlbmNlLCBzb21lIGFkZGl0aW9uYWwgY29uc3RhaW50cyBhcHBseSB0byB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3IgYW5kIHRoZSBidWZmZXJzIGFzc29jaWF0ZWQKKyogQXMgYSBjb25zZXF1ZW5jZSwgc29tZSBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIGFwcGx5IHRvIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvciBhbmQgdGhlIGJ1ZmZlcnMgYXNzb2NpYXRlZAogKiB3aXRoIHRoZSBmaXJzdCAyIGRlc2NyaXB0b3JzLiBJbmRlcGVuZGVudCBvZiB0aGUgZW5jYXBzdWxhdGlvbiBmZWF0dXJlLCB0aGUgQ09VTlQgZmllbGRzIGFyZSBpZ25vcmVkLgogKiBBIHNwZWNpYWwgY2FzZSBpcyB0aGUgc3VwcGx5aW5nIG9mIHRoZSBERUxXQSBkZXNjcmlwdG9yLCB3aGljaCBtdXN0IGJlIHN1cHBsaWVkIGFzIHRoZSBmaXJzdCBkZXNjcmlwdG9yLgogKgpAQCAtMTczNSw3ICsxNzM1LDcgQEAKICogLSBpbiBjYXNlIGVuY2Fwc3VsYXRpb24gYnkgdGhlIEhDRiBpcyBzZWxlY3RlZDoKICoJICAtCVRoZSBGcmFtZUxpc3QgZG9lcyBub3QgY29uc2lzdHMgb2YgYXQgbGVhc3QgMiBEZXNjcmlwdG9ycy4KICoJICAtCVRoZSBmaXJzdCBkYXRhYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gZXhhY3RseSB0aGUgKHNwYWNlIGZvcikgdGhlIDgwMi4xMSBoZWFkZXIgKD09IDI4IHdvcmRzKQotKgkgIC0JVGhlIGZpcnN0IGRhdGFidWZmZXIgZG9lcyBub3QgaGF2ZSBhIHNpemUgdG8gYWRkaXRpb25hbGx5IGFjY29tb2RhdGUgdGhlIDgwMi4zIGhlYWRlciBhbmQgdGhlCisqCSAgLQlUaGUgZmlyc3QgZGF0YWJ1ZmZlciBkb2VzIG5vdCBoYXZlIGEgc2l6ZSB0byBhZGRpdGlvbmFsbHkgYWNjb21tb2RhdGUgdGhlIDgwMi4zIGhlYWRlciBhbmQgdGhlCiAqCQlTTkFQIGhlYWRlciBvZiB0aGUgZnJhbWUgYWZ0ZXIgZW5jYXBzdWxhdGlvbiAoPT0gMzkgd29yZHMpLgogKgkgIC0JVGhlIHNlY29uZCBkYXRhYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gYXQgbGVhc3QgREEsIFNBIGFuZCAndHlwZS9sZW5ndGgnICg9PTE0IGJ5dGVzIG9yIDcgd29yZHMpCiAqISEgVGhlIDJuZCBwYXJ0IG9mIHRoZSBsaXN0IG9mIGFzc2VydHMgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHB1dF9mcmFtZV9sc3QsIGluIG9yZGVyIHRvIGdldApAQCAtMTc2MiwxNCArMTc2MiwxNCBAQAogKgktIENvcHkgREEvU0EgZmllbGRzIGZyb20gdGhlIDJuZCBidWZmZXIKICogICAtIENhbGN1bGF0ZSB0b3RhbCBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKHNuYXAtaGVhZGVyICsgdHlwZS1maWVsZCArIHRoZSBsZW5ndGggb2YgYWxsIGJ1ZmZlciBmcmFnbWVudHMKICogICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgODAyLjMgZnJhbWUgKGkuZSBhbGwgZGVzY3JpcHRvcnMgZXhjZXB0IHRoZSBmaXJzdCksIGJ1dCBub3QgdGhlIERlc3RpbmF0aW9uQWRkcmVzcywKLSogICAgIFNvdXJjZUFkZHJlc3MgYW5kIGxlbmdodC1maWVsZCkKKyogICAgIFNvdXJjZUFkZHJlc3MgYW5kIGxlbmd0aC1maWVsZCkKICogICAgIEFzc2VydCB0aGUgbWVzc2FnZSBsZW5ndGgKICoJICBXcml0ZSBsZW5ndGguIE5vdGUgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbiBCRSBmb3JtYXQsIGhlbmNlIG9uIExFIHBsYXRmb3JtcyB0aGUgbGVuZ3RoIG11c3QgYmUgY29udmVydGVkCiAqCSAgOz8gVEhJUyBJUyBOT1QgV0hBVCBDVVJSRU5UTFkgSVMgSU1QTEVNRU5URUQKICoJLSBXcml0ZSBzbmFwIGhlYWRlci4gTm90ZSB0aGF0IHRoZSBsYXN0IGJ5dGUgb2YgdGhlIHNuYXAgaGVhZGVyIGlzIE5PVCBjb3BpZWQsIHRoYXQgYnl0ZSBpcyBhbHJlYWR5IGluCiAqCSAgcGxhY2UgYXMgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIGhjZl9lbmNhcC4KICoJTm90ZSB0aGF0IHRoZXJlIGFyZSBtYW55IHdheXMgdG8gc2tpbiBhIGNhdC4gVG8gZXhwcmVzcyB0aGUgb2Zmc2V0cyBpbiB0aGUgMXN0IGJ1ZmZlciB3aGlsZSB3cml0aW5nCi0qCXRoZSBzbmFwIGhlYWRlciwgSEZTX1RZUEUgaXMgY2hvb3NlbiBhcyBhIHJlZmVyZW5jZSBwb2ludCB0byBtYWtlIGl0IGVhc2llciB0byBncmFzcCB0aGF0IHRoZSBzbmFwIGhlYWRlcgorKgl0aGUgc25hcCBoZWFkZXIsIEhGU19UWVBFIGlzIGNob3NlbiBhcyBhIHJlZmVyZW5jZSBwb2ludCB0byBtYWtlIGl0IGVhc2llciB0byBncmFzcCB0aGF0IHRoZSBzbmFwIGhlYWRlcgogKglhbmQgZW5jYXBzdWFsdGlvbiB0eXBlIGFyZSBhdCBsZWFzdCByZWxhdGl2ZSBpbiB0aGUgcmlnaHQuCiAqODoJbW9kaWZ5IDFzdCBkZXNjcmlwdG9yIHRvIHJlZmxlY3QgbW92ZWQgcGFydCBvZiB0aGUgODAyLjMgaGVhZGVyICsgU25hcC1oZWFkZXIKICoJbW9kaWZ5IDJuZCBkZXNjcmlwdG9yIHRvIHNraXAgdGhlIG1vdmVkIHBhcnQgb2YgdGhlIDgwMi4zIGhlYWRlciAoREEvU0EKQEAgLTE5MzMsNyArMTkzMyw3IEBACiAqCUhDRl9TVUNDRVNTCQkJU3VjY2VzcwogKiEhCXZpYSBjbWRfZXhlICggdHlwZSA+PSBDRkdfUklEX0ZXX01JTiApCiAqCUhDRl9FUlJfTk9fTklDCQlOSUMgcmVtb3ZlZCBkdXJpbmcgcmV0cmlldmFsCi0qCUhDRl9FUlJfVElNRV9PVVQJRXhwZWN0ZWQgSGVybWVzIGV2ZW50IGRpZCBub3Qgb2NjdXJlIGluIGV4cGVjdGVkIHRpbWUKKyoJSENGX0VSUl9USU1FX09VVAlFeHBlY3RlZCBIZXJtZXMgZXZlbnQgZGlkIG5vdCBvY2N1ciBpbiBleHBlY3RlZCB0aW1lCiAqISEJdmlhIGNtZF9leGUgYW5kIHNldHVwX2JhcCAodHlwZSA+PSBDRkdfUklEX0ZXX01JTiApCiAqCUhDRl9FUlJfREVGVU5DVF8uLi4JSENGIGlzIGluIGRlZnVuY3QgbW9kZSAoYml0cyAweDdGIHJlZmxlY3QgY2F1c2UpCiAqCkBAIC0yOTU4LDcgKzI5NTgsNyBAQAogKgloY2Zfc2VydmljZV9uaWMgaXMgYWxzbyBza2lwcGVkIGluIHRob3NlIGNhc2VzLgogKglUbyBwcmV2ZW50IHRoYXQgaGNmX3NlcnZpY2VfbmljIHJlcG9ydHMgYm9ndXMgaW5mb3JtYXRpb24gdG8gdGhlIE1TRiB3aXRoIGFsbCAtIHBvc3NpYmx5IGRpZmZpY3VsdCB0bwogKglkZWJ1ZyAtIHVuZGVzaXJhYmxlIHNpZGUgZWZmZWN0cywgaXQgaXMgcGFyYW1vdW50IHRvIGNoZWNrIHRoZSBOSUMgcHJlc2VuY2UuIEluIGZvcm1lciBkYXlzIHRoZSBwcmVzZW5jZQotKgl0ZXN0IHdhcyBiYXNlZCBvbiB0aGUgSGVybWVzIHJlZ2lzdGVyIEhSRUdfU1dfMC4gU2luY2UgaW4gSENGX0FDVF9JTlRfT0ZGIGlzIGNob29zZW4gZm9yIHN0cmF0ZWd5IGJhc2VkIG9uCisqCXRlc3Qgd2FzIGJhc2VkIG9uIHRoZSBIZXJtZXMgcmVnaXN0ZXIgSFJFR19TV18wLiBTaW5jZSBpbiBIQ0ZfQUNUX0lOVF9PRkYgaXMgY2hvc2VuIGZvciBzdHJhdGVneSBiYXNlZCBvbgogKglIUkVHX0VWX1NUQVQsIHRoaXMgaXMgbm93IGFsc28gdXNlZCBpbiBoY2Zfc2VydmljZV9uaWMuIFRoZSBtb3RpdmF0aW9uIHRvIGNoYW5nZSBzdHJhdGVneSBpcyBwYXJ0bHkKICoJZHVlIHRvIGluY29uc2lzdGVudCBGL1cgaW1wbGVtZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byBIUkVHX1NXXzAgbWFuaXB1bGF0aW9uIGFyb3VuZCByZXNldCBhbmQgZG93bmxvYWQuCiAqCU5vdGUgdGhhdCBpbiBwb2xsZWQgZW52aXJvbm1lbnRzIENhcmQgUmVtb3ZhbCBpcyBub3QgZGV0ZWN0ZWQgYnkgSU5UX09GRiB3aGljaCBtYWtlcyB0aGUgY2hlY2sgaW4KQEAgLTQwNDgsNyArNDA0OCw3IEBACiAJSENGQVNTRVJUKCB3b3JkX2xlbiA9PSAwIHx8IHdvcmRfbGVuID09IDIgfHwgd29yZF9sZW4gPT0gNCwgd29yZF9sZW4gKQogCUhDRkFTU0VSVCggd29yZF9sZW4gPT0gMCB8fCAoKGhjZl8zMilidWZwICYgMSApID09IDAsIChoY2ZfMzIpYnVmcCApCiAJSENGQVNTRVJUKCB3b3JkX2xlbiA8PSBsZW4sIE1FUkdFMiggd29yZF9sZW4sIGxlbiApICkKLQkvL3NlZSBwdXRfZnJhZyBmb3IgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBiZSBjYXJlZnVsbCBhYm91dCB3aGF0IGFyZSBpbnQncyBhbmQgd2hhdCBhcmUKKwkvL3NlZSBwdXRfZnJhZyBmb3IgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBiZSBjYXJlZnVsIGFib3V0IHdoYXQgYXJlIGludCdzIGFuZCB3aGF0IGFyZQogCS8vaGNmXzE2J3MKIAlpZiAoIHdvcmRfbGVuICkgewkJCQkJCQkJLy8uICBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBjb252ZXJ0CiBoY2ZfOCBjOwpAQCAtNDcxMiw3ICs0NzEyLDcgQEAKICoJTm90ZSB0aGF0IGxlbiBpcyB1bnNpZ25lZCwgc28gZXZlbiBNU0YgSS9GIHZpb2xhdGlvbiB3b3JrcyBvdXQgTy5LLgogKglUaGUgJzInIGluIHRoZSBleHByZXNzaW9uICJsZW4rMiIgaXMgdXNlZCBiZWNhdXNlIDEgd29yZCBpcyBuZWVkZWQgZm9yIEwgaXRzZWxmIGFuZCAxIHdvcmQgaXMgbmVlZGVkCiAqCWZvciB0aGUgemVyby1zZW50aW5lbAotKjg6CXVwZGF0ZSBNYWlsQm94IEluZm8gbGVuZ3RoIHJlcG9ydCB0byBNU0Ygd2l0aCAib2xkZXN0IiBNQiBJbmZvIEJsb2NrIHNpemUuIEJlIGNhcmVmdWxsIGhlcmUsIGlmIHlvdSBnZXQKKyo4Ogl1cGRhdGUgTWFpbEJveCBJbmZvIGxlbmd0aCByZXBvcnQgdG8gTVNGIHdpdGggIm9sZGVzdCIgTUIgSW5mbyBCbG9jayBzaXplLiBCZSBjYXJlZnVsIGhlcmUsIGlmIHlvdSBnZXQKICoJaGVyZSBiZWZvcmUgdGhlIE1haWxCb3ggaXMgcmVnaXN0ZXJlZCwgeW91IGNhbid0IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGFkZHJlc3NlZCBieSBJRkJfTUJwIChpdCBpcyB0aGUKICoJTnVsbCBidWZmZXIpIHNvIGRvbid0IG1vdmUgdGhpcyBjb2RlIHRpbGwgdGhlIGVuZCBvZiB0aGlzIHJvdXRpbmUgYnV0IGtlZXAgaXQgd2hlcmUgdGhlcmUgaXMgZ2FydWFudGVlZAogKglhIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZmRlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmZGVmLmgKaW5kZXggNGUyMDE3MS4uY2IxOTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmZGVmLmgKQEAgLTMxNSw3ICszMTUsNyBAQAogCiAjaWYgSENGX0RNQQogLy8qKioqKioqKioqKioqKioqKioqKioqKioqIERNQSAoYnVzIG1hc3RlcmluZykKLQkvLyBCZSBjYXJlZnVsbCB0byB1c2UgdGhlc2UgcmVnaXN0ZXJzIG9ubHkgYXQgYSBnZW51aW5lIDMyIGJpdHMgTklDCisJLy8gQmUgY2FyZWZ1bCB0byB1c2UgdGhlc2UgcmVnaXN0ZXJzIG9ubHkgYXQgYSBnZW51aW5lIDMyIGJpdHMgTklDCiAJLy8gT24gMTYgYml0cyBOSUNzLCB0aGVzZSBhZGRyZXNzZXMgYXJlIG1hcHBlZCBpbnRvIHRoZSByYW5nZSAweDAwIHRocm91Z2ggMHgzRiB3aXRoIGFsbCBjb25zZXF1ZW5jZXMKIAkvLyB0aGVyZW9mLCBlLmcuICBIUkVHX0RNQV9DVFJMIHJlZ2lzdGVyIG1hcHMgdG8gSFJFR19DTUQuCiAjZGVmaW5lIEhSRUdfRE1BX0NUUkwJCQkJCQkweDAwNDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3dleHQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3dleHQuYwppbmRleCA5ZTVkYTA4Li41MjJhMzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF93ZXh0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfd2V4dC5jCkBAIC0yNTc1LDcgKzI1NzUsNyBAQAogICAgICAgICAgKiBUaGlzIGxvb2tzIGxpa2UgYSBuaWNlIHBsYWNlIHRvIHRlc3QgaWYgdGhlIEhDRiBpcyBzdGlsbAogICAgICAgICAgKiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGNhcmQuIEl0IHNlZW1zIHRoYXQgc29tZXRpbWVzIEJBUF8xCiAgICAgICAgICAqIGdldHMgY29ycnVwdGVkLiBCeSBsb29raW5nIGF0IHRoZSBjb21tZW50cyBpbiBIQ0YgdGhlCi0gICAgICAgICAqIGNhdXNlIGlzIHN0aWxsIGEgbWlzdGVyeS4gT2theSwgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlCisgICAgICAgICAqIGNhdXNlIGlzIHN0aWxsIGEgbXlzdGVyeS4gT2theSwgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlCiAgICAgICAgICAqIGNhcmQgaXMgZGVhZCwgcmVzZXQgdGhlIGNhcmQgdG8gcmV2aXZlLgogICAgICAgICAgKi8KIAlpZigobHAtPmhjZkN0eC5JRkJfQ2FyZFN0YXQgJiBDQVJEX1NUQVRfREVGVU5DVCkgIT0gMCkKQEAgLTM5MjQsNyArMzkyNCw3IEBACiAJbWVtc2V0KCBtc2csIDAsIHNpemVvZiggbXNnICkpOwogCiAKLQkvKiBCZWN1YXNlIE1JQyBmYWlsdXJlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMgeWV0LCB0aGV5CisJLyogQmVjYXVzZSBNSUMgZmFpbHVyZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zIHlldCwgdGhleQogCSAgIG11c3QgYmUgcGFzc2VkIGFzIGEgc3RyaW5nIHVzaW5nIGFuIElXRVZDVVNUT00gZXZlbnQuIEluIG9yZGVyIGZvciB0aGUKIAkgICBldmVudCB0byBiZSBlZmZlY3RpdmUsIHRoZSBzdHJpbmcgZm9ybWF0IG11c3QgYmUga25vd24gYnkgYm90aCB0aGUKIAkgICBkcml2ZXIgYW5kIHRoZSBzdXBwbGljYW50LiBUaGUgZm9sbG93aW5nIGlzIHRoZSBzdHJpbmcgZm9ybWF0IHVzZWQgYnkgdGhlCkBAIC0zOTk5LDcgKzM5OTksNyBAQAogCQltZW1jcHkoICZkYXRhLnJhd0RhdGEsICYoIGxwLT5sdHZSZWNvcmQudS51OFsxXSApLCA4OCApOwogCQl3cGFfaWUgPSB3bF9wYXJzZV93cGFfaWUoICZkYXRhLCAmbGVuZ3RoICk7CiAKLQkJLyogQmVjdWFzZSB0aGlzIGV2ZW50IChBc3NvY2lhdGlvbiBXUEEtSUUpIGlzIG5vdCBwYXJ0IG9mIHRoZSBXaXJlbGVzcworCQkvKiBCZWNhdXNlIHRoaXMgZXZlbnQgKEFzc29jaWF0aW9uIFdQQS1JRSkgaXMgbm90IHBhcnQgb2YgdGhlIFdpcmVsZXNzCiAJCUV4dGVuc2lvbnMgeWV0LCBpdCBtdXN0IGJlIHBhc3NlZCBhcyBhIHN0cmluZyB1c2luZyBhbiBJV0VWQ1VTVE9NIGV2ZW50LgogCQlJbiBvcmRlciBmb3IgdGhlIGV2ZW50IHRvIGJlIGVmZmVjdGl2ZSwgdGhlIHN0cmluZyBmb3JtYXQgbXVzdCBiZSBrbm93bgogCQlieSBib3RoIHRoZSBkcml2ZXIgYW5kIHRoZSBzdXBwbGljYW50LiBUaGUgZm9sbG93aW5nIGlzIHRoZSBzdHJpbmcgZm9ybWF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMjUvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyNS9UT0RPCmluZGV4IDE0YWE0MTUuLjk0MDMyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyNS9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyNS9UT0RPCkBAIC0xLDcgKzEsNyBAQAogRmlyc3Qgb2YgYWxsLCB0aGUgYmVzdCB0aGluZyB3b3VsZCBiZSB0aGF0IHRoaXMgZHJpdmVyIGJlY29tZXMgb2Jzb2x0ZSBieQogYWRkaW5nIHN1cHBvcnQgZm9yIEhlcm1lcyBJSSBhbmQgSGVybWVzIElJLjUgY2FyZHMgdG8gdGhlIGV4aXN0aW5nIG9yaW5vY28KIGRyaXZlci4gVGhlIG9yaW5vY28gZHJpdmVyIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIEhlcm1lcyBJIGJhc2VkIGNhcmRzLgotU2luY2UgdGhpcyB3aWxsIG5vdCBoYXBwZW4gYnkgbWFnaWMgYW5kIGhhcyBub3QgaGFwcGVuZCB1bnRpbCBub3cgdGhpcworU2luY2UgdGhpcyB3aWxsIG5vdCBoYXBwZW4gYnkgbWFnaWMgYW5kIGhhcyBub3QgaGFwcGVuZWQgdW50aWwgbm93IHRoaXMKIGRyaXZlciBwcm92aWRlcyBhIHN0b3AtZ2FwIHNvbHV0aW9uIGZvciB0aGVzZSB0eXBlIG9mIGNhcmRzLgogCiBIYXZpbmcgc2FpZCB0aGF0LCB0aGUgZm9sbG93aW5nIHdpc2hsaXN0IGNvbWVzIHRvIG1pbmQgdG8gbWFrZSB0aGUgZHJpdmVyCkBAIC0xOCw3ICsxOCw3IEBACiAJLSB0aGUgZHJpdmVyIGlzIHNwbGl0IGludG8gYSBIZXJtZXMgSUkgYW5kIGEgSGVybWVzIElJLjUgcGFydCwgaXQKIAkgIHdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIGJvdGggd2l0aCBvbmUgbW9kdWxlIGluc3RlYWQgb2YgdHdvCiAJLSByZXZpZXcgYnkgdGhlIHdpcmVsZXNzIGRldmVsb3BlciBjb21tdW5pdHkKLQktIHZlcmlmeSB0aGUgY29kZSBhZ2FpbnN0IHRoZSBjb2Rpbmcgc3RhbmRhcmRzIGZvciBhIHByb3BwZXIgbGludXgKKwktIHZlcmlmeSB0aGUgY29kZSBhZ2FpbnN0IHRoZSBjb2Rpbmcgc3RhbmRhcmRzIGZvciBhIHByb3BlciBsaW51eAogCSAgZHJpdmVyCiAJLSByZXNvbHZlIGxpY2Vuc2UgaXNzdWVzICg/KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9jZmc4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYwppbmRleCA2YTcxZjUyLi43NjM3ODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogfQogCiBpbnQgcHJpc20yX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgdTgga2V5X2luZGV4KQorCQkJICAgdTgga2V5X2luZGV4LCBib29sIHVuaWNhc3QsIGJvb2wgbXVsdGljYXN0KQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYwppbmRleCBlZDc1MWY0Li4yMWYyNWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYwpAQCAtMTk3Niw3ICsxOTc2LDcgQEAKIAogCXdsYW5kZXYtPm5zZGNhcHMgPSBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQgfCBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHByaXZhdGUgZGF0YSBzdHVjdHVyZS4gKi8KKwkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4gKi8KIAlody0+ZG90MTFfZGVzaXJlZF9ic3NfdHlwZSA9IDE7CiAKIAlyZXR1cm4gd2xhbmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCmluZGV4IDg3NjJhNTMuLjk2NjljMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwpAQCAtNzgzNCw3ICs3ODM0LDcgQEAKIAkJCQkJCT09IDYwMCkpIHsKIAkJCWluZGV4Kys7CiAJCX0KLQkJLyogQWxhbiAxMC8xOS8yMDA3OyBkbyB0aGUgc2ltaWxpYXIgYWRqdXN0bWVudCBsaWtlIFhHSVNlYXJjaENSVDFSYXRlKCkgKi8KKwkJLyogQWxhbiAxMC8xOS8yMDA3OyBkbyB0aGUgc2ltaWxhciBhZGp1c3RtZW50IGxpa2UgWEdJU2VhcmNoQ1JUMVJhdGUoKSAqLwogCQlpZiAoKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWFJlcyA9PSAxMDI0KQogCQkJCSYmIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLllSZXMKIAkJCQkJCT09IDc2OCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Z2F0eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZnYXR5cGVzLmgKaW5kZXggNGI4Nzk1MS4uZDYxM2U4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZnYXR5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZnYXR5cGVzLmgKQEAgLTg1LDcgKzg1LDcgQEAKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKik7CiB9OwogCi0vKiBBZGR0aW9uYWwgSU9DVEwgZm9yIGNvbW11bmljYXRpb24geGdpZmIgPD4gWCBkcml2ZXIgICAgICAgICovCisvKiBBZGRpdGlvbmFsIElPQ1RMIGZvciBjb21tdW5pY2F0aW9uIHhnaWZiIDw+IFggZHJpdmVyICAgICAgICAqLwogLyogSWYgY2hhbmdpbmcgdGhpcywgeGdpZmIuaCBtdXN0IGFsc28gYmUgY2hhbmdlZCAoZm9yIHhnaWZiKSAqLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYwppbmRleCAyYzVmY2ZlLi4zMGNiYjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jCkBAIC00OTYsOCArNDk2LDggQEAKIAlub25vcF9kZWxheV9tc2VjcyA9IHRnX3B0X2dwLT50Z19wdF9ncF9ub25vcF9kZWxheV9tc2VjczsKIAlzcGluX3VubG9jaygmdGdfcHRfZ3BfbWVtLT50Z19wdF9ncF9tZW1fbG9jayk7CiAJLyoKLQkgKiBQcm9jZXNzIEFMVUFfQUNDRVNTX1NUQVRFX0FDVElWRV9PUFRNSVpFRCBpbiBhIHNlcGVyYXRlIGNvbmRpdGlvbmFsCi0JICogc3RhdGVtZW50IHNvIHRoZSBjb21wbGllciBrbm93cyBleHBsaWN0bHkgdG8gY2hlY2sgdGhpcyBjYXNlIGZpcnN0LgorCSAqIFByb2Nlc3MgQUxVQV9BQ0NFU1NfU1RBVEVfQUNUSVZFX09QVE1JWkVEIGluIGEgc2VwYXJhdGUgY29uZGl0aW9uYWwKKwkgKiBzdGF0ZW1lbnQgc28gdGhlIGNvbXBpbGVyIGtub3dzIGV4cGxpY2l0bHkgdG8gY2hlY2sgdGhpcyBjYXNlIGZpcnN0LgogCSAqIEZvciB0aGUgT3B0aW1pemVkIEFMVUEgYWNjZXNzIHN0YXRlIGNhc2UsIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUKIAkgKiBpbmNvbWluZyBmYWJyaWMgY21kIEFTQVAuLgogCSAqLwpAQCAtMTE1Nyw3ICsxMTU3LDcgQEAKIAkJc3Bpbl91bmxvY2soJmx1X2dwLT5sdV9ncF9sb2NrKTsKIAkJLyoKIAkJICoKLQkJICogbHVfZ3BfbWVtIGlzIGFzc29pY2F0ZWQgd2l0aCBhIHNpbmdsZQorCQkgKiBsdV9ncF9tZW0gaXMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlCiAJCSAqIHN0cnVjdCBzZV9kZXZpY2UtPmRldl9hbHVhX2x1X2dwX21lbSwgYW5kIGlzIHJlbGVhc2VkIHdoZW4KIAkJICogc3RydWN0IHNlX2RldmljZSBpcyByZWxlYXNlZCB2aWEgY29yZV9hbHVhX2ZyZWVfbHVfZ3BfbWVtKCkuCiAJCSAqCkBAIC0xNDI5LDcgKzE0MjksNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZ0Z19wdF9ncC0+dGdfcHRfZ3BfbG9jayk7CiAJCS8qCi0JCSAqIHRnX3B0X2dwX21lbSBpcyBhc3NvaWNhdGVkIHdpdGggYSBzaW5nbGUKKwkJICogdGdfcHRfZ3BfbWVtIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZQogCQkgKiBzZV9wb3J0LT5zZXBfYWx1YV90Z19wdF9ncF9tZW0sIGFuZCBpcyByZWxlYXNlZCB2aWEKIAkJICogY29yZV9hbHVhX2ZyZWVfdGdfcHRfZ3BfbWVtKCkuCiAJCSAqCkBAIC0xOTYzLDcgKzE5NjMsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlczogRW5hYmxpbmcgQUxVQSBFbXVsYXRpb24gZm9yIFNQQy0zIgogCQkJIiBkZXZpY2VcbiIsIFRSQU5TUE9SVChkZXYpLT5uYW1lKTsKIAkJLyoKLQkJICogQXNzb2ljYXRlIHRoaXMgc3RydWN0IHNlX2RldmljZSB3aXRoIHRoZSBkZWZhdWx0IEFMVUEKKwkJICogQXNzb2NpYXRlIHRoaXMgc3RydWN0IHNlX2RldmljZSB3aXRoIHRoZSBkZWZhdWx0IEFMVUEKIAkJICogTFVOIEdyb3VwLgogCQkgKi8KIAkJbHVfZ3BfbWVtID0gY29yZV9hbHVhX2FsbG9jYXRlX2x1X2dwX21lbShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuYwppbmRleCAzZmI4ZTMyLi5kMjVlMjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuYwpAQCAtMzcxLDcgKzM3MSw3IEBACiAJaWYgKCEoZW5hYmxlKSkgewogCQkvKgogCQkgKiBkZXZlLT5zZV9sdW5fYWNsIHdpbGwgYmUgTlVMTCBmb3IgZGVtby1tb2RlIGNyZWF0ZWQgTFVOcwotCQkgKiB0aGF0IGhhdmUgbm90IGJlZW4gZXhwbGljdGx5IGNvbmNlcnRlZCB0byBNYXBwZWRMVU5zIC0+CisJCSAqIHRoYXQgaGF2ZSBub3QgYmVlbiBleHBsaWNpdGx5IGNvbmNlcnRlZCB0byBNYXBwZWRMVU5zIC0+CiAJCSAqIHN0cnVjdCBzZV9sdW5fYWNsLCBidXQgd2UgcmVtb3ZlIGRldmUtPmFsdWFfcG9ydF9saXN0IGZyb20KIAkJICogcG9ydC0+c2VwX2FsdWFfbGlzdC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgYWN0aXZlIFVBcyBhbmQKIAkJICogTm9kZUFDTCBjb250ZXh0IHNwZWNpZmljIFBSIG1ldGFkYXRhIGZvciBkZW1vLW1vZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19saWIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19saWIuYwppbmRleCBkNTdhZDY3Li4xZTE5M2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfbGliLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2xpYi5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAkJLyoKIAkJICogR28gYWhlYWQgYW5kIGRvIHRoZSBsb3dlciBjYXNlIGNvbnZlcnNpb24gb2YgdGhlIHJlY2VpdmVkCiAJCSAqIDEyIEFTQ0lJIGNoYXJhY3RlcnMgcmVwcmVzZW50aW5nIHRoZSBJU0lEIGluIHRoZSBUcmFuc3BvcnRJRAotCQkgKiBmb3IgY29tcGFyaXNpb24gYWdhaW5zdCB0aGUgcnVubmluZyBpU0NTSSBzZXNzaW9uJ3MgSVNJRCBmcm9tCisJCSAqIGZvciBjb21wYXJpc29uIGFnYWluc3QgdGhlIHJ1bm5pbmcgaVNDU0kgc2Vzc2lvbidzIElTSUQgZnJvbQogCQkgKiBpc2NzaV90YXJnZXQuYzpsaW9fc2Vzc19nZXRfaW5pdGlhdG9yX3NpZCgpCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jCmluZGV4IDAyZjU1M2EuLjE1MGM0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9maWxlLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogI2VuZGlmCiAvKglmbGFncyB8PSBPX0RJUkVDVDsgKi8KIAkvKgotCSAqIElmIGZkX2J1ZmZlcmVkX2lvPTEgaGFzIG5vdCBiZWVuIHNldCBleHBsaWN0bHkgKHRoZSBkZWZhdWx0KSwKKwkgKiBJZiBmZF9idWZmZXJlZF9pbz0xIGhhcyBub3QgYmVlbiBzZXQgZXhwbGljaXRseSAodGhlIGRlZmF1bHQpLAogCSAqIHVzZSBPX1NZTkMgdG8gZm9yY2UgRklMRUlPIHdyaXRlcyB0byBkaXNrLgogCSAqLwogCWlmICghKGZkX2Rldi0+ZmJkX2ZsYWdzICYgRkRCRF9VU0VfQlVGRkVSRURfSU8pKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKaW5kZXggMjUyMWY3NS4uYTc5ZjUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJYnJlYWs7CiAJfQogCS8qCi0JICogQ2FzZSB3aGVyZSB0aGUgQ0RCIGlzIGV4cGxpY3RseSBhbGxvd2VkIGluIHRoZSBhYm92ZSBzd2l0Y2gKKwkgKiBDYXNlIHdoZXJlIHRoZSBDREIgaXMgZXhwbGljaXRseSBhbGxvd2VkIGluIHRoZSBhYm92ZSBzd2l0Y2gKIAkgKiBzdGF0ZW1lbnQuCiAJICovCiAJaWYgKCEocmV0KSAmJiAhKG90aGVyX2NkYikpIHsKQEAgLTM3MzUsNyArMzczNSw3IEBACiAJCXJldHVybiBQWVhfVFJBTlNQT1JUX0xVX0NPTU1fRkFJTFVSRTsKIAogCWlmIChjbWQtPmRhdGFfbGVuZ3RoIDwgMjQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1BDLVBSOiBSZWNpZXZlZCBQUiBPVVQgcGFyYW1ldGVyIGxpc3QiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNQQy1QUjogUmVjZWl2ZWQgUFIgT1VUIHBhcmFtZXRlciBsaXN0IgogCQkJIiBsZW5ndGggdG9vIHNtYWxsOiAldVxuIiwgY21kLT5kYXRhX2xlbmd0aCk7CiAJCXJldHVybiBQWVhfVFJBTlNQT1JUX0lOVkFMSURfUEFSQU1FVEVSX0xJU1Q7CiAJfQpAQCAtMzc3OCw3ICszNzc4LDcgQEAKIAkgKi8KIAlpZiAoIShzcGVjX2lfcHQpICYmICgoY2RiWzFdICYgMHgxZikgIT0gUFJPX1JFR0lTVEVSX0FORF9NT1ZFKSAmJgogCSAgICAoY21kLT5kYXRhX2xlbmd0aCAhPSAyNCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1BDLVBSOiBSZWNpZXZlZCBQUiBPVVQgaWxsZWdhbCBwYXJhbWV0ZXIiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNQQy1QUjogUmVjZWl2ZWQgUFIgT1VUIGlsbGVnYWwgcGFyYW1ldGVyIgogCQkJIiBsaXN0IGxlbmd0aDogJXVcbiIsIGNtZC0+ZGF0YV9sZW5ndGgpOwogCQlyZXR1cm4gUFlYX1RSQU5TUE9SVF9JTlZBTElEX1BBUkFNRVRFUl9MSVNUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKaW5kZXggYmY2YWE4YS4uOTU4M2IyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKQEAgLTcxOSw3ICs3MTksNyBAQAogCQkJY21kLT5zZV9sdW4gPSBOVUxMOwogCQkJLyoKIAkJCSAqIFNvbWUgZmFicmljIG1vZHVsZXMgbGlrZSB0Y21fbG9vcCBjYW4gcmVsZWFzZQotCQkJICogdGhlaXIgaW50ZXJuYWxseSBhbGxvY2F0ZWQgSS9PIHJlZnJlbmNlIG5vdyBhbmQKKwkJCSAqIHRoZWlyIGludGVybmFsbHkgYWxsb2NhdGVkIEkvTyByZWZlcmVuY2Ugbm93IGFuZAogCQkJICogc3RydWN0IHNlX2NtZCBub3cuCiAJCQkgKi8KIAkJCWlmIChDTURfVEZPKGNtZCktPmNoZWNrX3N0b3BfZnJlZSAhPSBOVUxMKSB7CkBAIC0yMDI5LDcgKzIwMjksNyBAQAogCSAqIElmIHRoZSByZWNlaXZlZCBDREIgaGFzIGFsZWFkeSBiZWVuIEFCT1JURUQgYnkgdGhlIGdlbmVyaWMKIAkgKiB0YXJnZXQgZW5naW5lLCB3ZSBub3cgY2FsbCB0cmFuc3BvcnRfY2hlY2tfYWJvcnRlZF9zdGF0dXMoKQogCSAqIHRvIHF1ZXVlIGFueSBkZWxhdGVkIFRBU0tfQUJPUlRFRCBzdGF0dXMgZm9yIHRoZSByZWNlaXZlZCBDREIgdG8gdGhlCi0JICogZmFicmljIG1vZHVsZSBhcyB3ZSBhcmUgZXhwZWN0aW5nIG5vIGZ1dGhlciBpbmNvbWluZyBEQVRBIE9VVAorCSAqIGZhYnJpYyBtb2R1bGUgYXMgd2UgYXJlIGV4cGVjdGluZyBubyBmdXJ0aGVyIGluY29taW5nIERBVEEgT1VUCiAJICogc2VxdWVuY2VzIGF0IHRoaXMgcG9pbnQuCiAJICovCiAJaWYgKHRyYW5zcG9ydF9jaGVja19hYm9ydGVkX3N0YXR1cyhjbWQsIDEpICE9IDApCkBAIC0yNTAxLDcgKzI1MDEsNyBAQAogCWlmIChTRV9ERVYoY21kKS0+ZGV2X3Rhc2tfYXR0cl90eXBlICE9IFNBTV9UQVNLX0FUVFJfRU1VTEFURUQpCiAJCXJldHVybiAxOwogCS8qCi0JICogQ2hlY2sgZm9yIHRoZSBleGlzdGFuY2Ugb2YgSEVBRF9PRl9RVUVVRSwgYW5kIGlmIHRydWUgcmV0dXJuIDEKKwkgKiBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBIRUFEX09GX1FVRVVFLCBhbmQgaWYgdHJ1ZSByZXR1cm4gMQogCSAqIHRvIGFsbG93IHRoZSBwYXNzZWQgc3RydWN0IHNlX2NtZCBsaXN0IG9mIHRhc2tzIHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4KIAkgKi8KIAkgaWYgKGNtZC0+c2FtX3Rhc2tfYXR0ciA9PSBUQVNLX0FUVFJfSE9RKSB7CkBAIC0yNTQ3LDcgKzI1NDcsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmU0VfREVWKGNtZCktPmRldl9vcmRlcmVkX3N5bmMpICE9IDApIHsKIAkJLyoKIAkJICogT3RoZXJ3aXNlLCBhZGQgY21kIHcvIHRhc2tzIHRvIGRlbGF5ZWQgY21kIHF1ZXVlIHRoYXQKLQkJICogd2lsbCBiZSBkcmFpbmVkIHVwb24gY29tcGV0aW9uIG9mIEhFQURfT0ZfUVVFVUUgdGFzay4KKwkJICogd2lsbCBiZSBkcmFpbmVkIHVwb24gY29tcGxldGlvbiBvZiBIRUFEX09GX1FVRVVFIHRhc2suCiAJCSAqLwogCQlzcGluX2xvY2soJlNFX0RFVihjbWQpLT5kZWxheWVkX2NtZF9sb2NrKTsKIAkJY21kLT5zZV9jbWRfZmxhZ3MgfD0gU0NGX0RFTEFZRURfQ01EX0ZST01fU0FNX0FUVFI7CkBAIC0yNTg5LDcgKzI1ODksNyBAQAogCX0KIAkvKgogCSAqIENhbGwgdHJhbnNwb3J0X2NtZF9jaGVja19zdG9wKCkgdG8gc2VlIGlmIGEgZmFicmljIGV4Y2VwdGlvbgotCSAqIGhhcyBvY2N1cmVkIHRoYXQgcHJldmVudHMgZXhlY3V0aW9uLgorCSAqIGhhcyBvY2N1cnJlZCB0aGF0IHByZXZlbnRzIGV4ZWN1dGlvbi4KIAkgKi8KIAlpZiAoISh0cmFuc3BvcnRfY21kX2NoZWNrX3N0b3AoY21kLCAwLCBUUkFOU1BPUlRfUFJPQ0VTU0lORykpKSB7CiAJCS8qCkBAIC0zMTA5LDcgKzMxMDksNyBAQAogCWlmIChyZXQgIT0gMCkgewogCQljbWQtPnRyYW5zcG9ydF93YWl0X2Zvcl90YXNrcyA9ICZ0cmFuc3BvcnRfbm9wX3dhaXRfZm9yX3Rhc2tzOwogCQkvKgotCQkgKiBTZXQgU0NTSSBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKEFTQykgdG8gJ0xVTiBOb3QgQWNjZXNzYWJsZSc7CisJCSAqIFNldCBTQ1NJIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAoQVNDKSB0byAnTFVOIE5vdCBBY2Nlc3NpYmxlJzsKIAkJICogVGhlIEFMVUEgYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAoQVNDUSkgaXMgZGV0ZXJtaW5lZAogCQkgKiBieSB0aGUgQUxVQSBwcmltYXJ5IG9yIHNlY29uZGFyeSBhY2Nlc3Mgc3RhdGUuLgogCQkgKi8KQEAgLTM4NjcsNyArMzg2Nyw3IEBACiAJCX0KIAl9CiAJLyoKLQkgKiBDaGVjayBmb3IgYSBjYWxsYmFjaywgdXNlZCBieSBhbW91bmdzdCBvdGhlciB0aGluZ3MKKwkgKiBDaGVjayBmb3IgYSBjYWxsYmFjaywgdXNlZCBieSBhbW9uZ3N0IG90aGVyIHRoaW5ncwogCSAqIFhEV1JJVEVfUkVBRF8xMCBlbXVsYXRpb24uCiAJICovCiAJaWYgKGNtZC0+dHJhbnNwb3J0X2NvbXBsZXRlX2NhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdWEuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VhLmMKaW5kZXggYTJlZjM0Ni4uZGYzNTUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdWEuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91YS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkJfQogCQkvKgogCQkgKiBPdGhlcndpc2UgZm9yIHRoZSBkZWZhdWx0IDAwYiwgcmVsZWFzZSB0aGUgVU5JVCBBVFRFTlRJT04KLQkJICogY29uZGl0aW9uLiAgUmV0dXJuIHRoZSBBU0MvQVNDUSBvZiB0aGUgaGlnZXN0IHByaW9yaXR5IFVBCisJCSAqIGNvbmRpdGlvbi4gIFJldHVybiB0aGUgQVNDL0FTQ1Egb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgVUEKIAkJICogKGhlYWQgb2YgdGhlIGxpc3QpIGluIHRoZSBvdXRnb2luZyBDSEVDS19DT05ESVRJT04gKyBzZW5zZS4KIAkJICovCiAJCWlmIChoZWFkKSB7CkBAIC0zMDQsNyArMzA0LDcgQEAKIAkgKiBtYXRjaGluZyBzdHJ1Y3Qgc2VfbHVuLgogCSAqCiAJICogT25jZSB0aGUgcmV0dXJuaW5nIEFTQy9BU0NRIHZhbHVlcyBhcmUgc2V0LCB3ZSBnbyBhaGVhZCBhbmQKLQkgKiByZWxlYXNlIGFsbCBvZiB0aGUgVW5pdCBBdHRlbnRpb24gY29uZGl0aW9ucyBmb3IgdGhlIGFzc29pY2F0ZWQKKwkgKiByZWxlYXNlIGFsbCBvZiB0aGUgVW5pdCBBdHRlbnRpb24gY29uZGl0aW9ucyBmb3IgdGhlIGFzc29jaWF0ZWQKIAkgKiBzdHJ1Y3Qgc2VfbHVuLgogCSAqLwogCXNwaW5fbG9jaygmZGV2ZS0+dWFfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouYyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCmluZGV4IGIwMDEwMTkuLmQ1ZjkyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCkBAIC0xNjksNyArMTY5LDcgQEAKICAqIEFkZGVkIHN1cHBvcnQgZm9yIExpbnV4IDIuNC54IGtlcm5lbHMuCiAgKgogICogUmV2aXNpb24gMy43NyAgMjAwMS8wMS8wOSAwNDowMDo1MiAgZW9rZXJzb24KLSAqIExpbmV0ZXN0IHdpbGwgbm93IHRlc3QgdGhlIGxpbmUsIGV2ZW4gaWYgaXQgaGFzIHByZXZpb3VzbHkgc3VjY2VkZWQuCisgKiBMaW5ldGVzdCB3aWxsIG5vdyB0ZXN0IHRoZSBsaW5lLCBldmVuIGlmIGl0IGhhcyBwcmV2aW91c2x5IHN1Y2NlZWRlZC4KICAqCiAgKiBSZXZpc2lvbiAzLjc2ICAyMDAxLzAxLzA4IDE5OjI3OjAwICBlb2tlcnNvbgogICogRml4ZWQgcHJvYmxlbSB3aXRoIHN0YW5kYXJkIGNhYmxlIG9uIEludGVybmV0IFBob25lQ0FSRC4KQEAgLTM1Miw3ICszNTIsNyBAQAogCQl9IGVsc2UgewogCQkJai0+ZnNrc2l6ZSA9IDgwMDA7CiAJCQlpZihpeGpkZWJ1ZyAmIDB4MDIwMCkgewotCQkJCXByaW50aygiSVhKIHBob25lJWQgLSBhbGxvY2F0ZSBzdWNjZWRlZFxuIiwgai0+Ym9hcmQpOworCQkJCXByaW50aygiSVhKIHBob25lJWQgLSBhbGxvY2F0ZSBzdWNjZWVkZWRcbiIsIGotPmJvYXJkKTsKIAkJCX0KIAkJfQogCX0KQEAgLTQ4Nyw3ICs0ODcsNyBAQAogOC05CQlIYXJkd2FyZSBTdGF0dXMgUmVnaXN0ZXIJCQlSZWFkIE9ubHkKIEEtQgkJSGFyZHdhcmUgQ29udHJvbCBSZWdpc3RlcgkJCVJlYWQgV3JpdGUKIEMtRCBIb3N0IFRyYW5zbWl0IChXcml0ZSkgRGF0YSBCdWZmZXIgQWNjZXNzIFBvcnQgKGJ1ZmZlciBpbnB1dClXcml0ZSBPbmx5Ci1FLUYgSG9zdCBSZWNpZXZlIChSZWFkKSBEYXRhIEJ1ZmZlciBBY2Nlc3MgUG9ydCAoYnVmZmVyIGlucHV0KQlSZWFkIE9ubHkKK0UtRiBIb3N0IFJlY2VpdmUgKFJlYWQpIERhdGEgQnVmZmVyIEFjY2VzcyBQb3J0IChidWZmZXIgaW5wdXQpCVJlYWQgT25seQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXhqX3JlYWRfSFNSKElYSiAqaikKQEAgLTQxOTUsNyArNDE5NSw3IEBACiAJCQlpeGpfV3JpdGVEU1BDb21tYW5kKDB4RTMzOCwgaik7CS8qIFNldCBFY2hvIFN1cHByZXNzZXIgQXR0ZW51YXRpb24gdG8gMGRCICovCiAKIAkJCS8qIE5vdyB3ZSBjYW4gc2V0IHRoZSBBR0MgaW5pdGlhbCBwYXJhbWV0ZXJzIGFuZCB0dXJuIGl0IG9uICovCi0JCQlpeGpfV3JpdGVEU1BDb21tYW5kKDB4Q0Y5MCwgaik7CS8qIFNldCBBR0MgTWludW11bSBnYWluICovCisJCQlpeGpfV3JpdGVEU1BDb21tYW5kKDB4Q0Y5MCwgaik7CS8qIFNldCBBR0MgTWluaW11bSBnYWluICovCiAJCQlpeGpfV3JpdGVEU1BDb21tYW5kKDB4MDAyMCwgaik7CS8qIHRvIDAuMTI1ICgtMThkQikgKi8KIAkKIAkJCWl4al9Xcml0ZURTUENvbW1hbmQoMHhDRjkxLCBqKTsJLyogU2V0IEFHQyBNYXhpbXVtIGdhaW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5oIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKaW5kZXggNGMzMmE0My4uMmM4NDExMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKQEAgLTExNDksNyArMTE0OSw3IEBACiAJdW5zaWduZWQgaW50IGZpcnN0cmluZzoxOyAvKiBGaXJzdCByaW5nIGNhZGVuY2UgaXMgY29tcGxldGUgKi8KIAl1bnNpZ25lZCBpbnQgcHN0bmNoZWNrOjE7CS8qIEN1cnJlbnRseSBjaGVja2luZyB0aGUgUFNUTiBMaW5lICovCiAJdW5zaWduZWQgaW50IHBzdG5fcm1yOjE7Ci0JdW5zaWduZWQgaW50IHg6MzsJLyogdW5zZWQgYml0cyAqLworCXVuc2lnbmVkIGludCB4OjM7CS8qIHVudXNlZCBiaXRzICovCiAKIH0gSVhKX0ZMQUdTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jCmluZGV4IGMzNDI1YmIuLmI2ZjdkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXdyaXR0ZW4gPSAtRUlPOwogCQl9Ci0JCS8qIHJlbW92ZSBidWZmZXIgaWYgYW4gZXJyb3IgaGFzIG9jY3VyZWQgb3IgcmVjZWl2ZWQgZGF0YQorCQkvKiByZW1vdmUgYnVmZmVyIGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZCBvciByZWNlaXZlZCBkYXRhCiAJCSAqIGlzIG5vdCBjb3JyZWN0ICovCiAJCWlmIChyYyB8fCAocmItPm1idWYtPnZlcnNpb24gIT0gTVNHX1ZFUlNJT04pIHx8CiAJCQkgIChyYi0+bXNnLmxlbmd0aCAgICAhPSBNU0dfU0laRShyYi0+bWJ1Zi0+ZGF0YWxlbikpKQpAQCAtNjIwLDcgKzYyMCw3IEBACiAgKgkJdGhlIGluZGV4IG9mIGFuIHN0cnVjdCBodmNfaXVjdl9wcml2YXRlIGluc3RhbmNlLgogICoKICAqIFRoaXMgcm91dGluZSBub3RpZmllcyB0aGUgSFZDIGJhY2stZW5kIHRoYXQgYSB0dHkgaGFuZ3VwIChjYXJyaWVyIGxvc3MsCi0gKiB2aXJ0dWFsIG9yIG90aGVyd2lzZSkgaGFzIG9jY3VyZWQuCisgKiB2aXJ0dWFsIG9yIG90aGVyd2lzZSkgaGFzIG9jY3VycmVkLgogICogVGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBpZ25vcmVzIHZpcnR1YWwgaGFuZ3VwcyAodmhhbmd1cCgpKQogICogdG8ga2VlcCBhbiBleGlzdGluZyBJVUNWIGNvbW11bmljYXRpb24gcGF0aCBlc3RhYmxpc2hlZC4KICAqIChCYWNrZ3JvdW5kOiB2aGFuZ3VwKCkgaXMgY2FsbGVkIGZyb20gdXNlciBzcGFjZSAoYnkgZ2V0dHkgb3IgbG9naW4pIHRvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvaHZjX3Zpby5jIGIvZHJpdmVycy90dHkvaHZjL2h2Y192aW8uYwppbmRleCA1ZTJmNTJiLi5lNmVlYTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9odmMvaHZjX3Zpby5jCisrKyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfdmlvLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogdmlvIGRyaXZlciBpbnRlcmZhY2UgdG8gaHZjX2NvbnNvbGUuYwogICoKLSAqIFRoaXMgY29kZSB3YXMgbW92ZWQgaGVyZSB0byBhbGxvdyB0aGUgcmVtYWluZyBjb2RlIHRvIGJlIHJldXNlZCBhcyBhCisgKiBUaGlzIGNvZGUgd2FzIG1vdmVkIGhlcmUgdG8gYWxsb3cgdGhlIHJlbWFpbmluZyBjb2RlIHRvIGJlIHJldXNlZCBhcyBhCiAgKiBnZW5lcmljIHBvbGxpbmcgbW9kZSB3aXRoIHNlbWktcmVsaWFibGUgdHJhbnNwb3J0IGRyaXZlciBjb3JlIHRvIHRoZQogICogY29uc29sZSBhbmQgdHR5IHN1YnN5c3RlbXMuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvaHZjL2h2Y3MuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNzLmMKaW5kZXggYmVmMjM4Zi4uNGM4YjY2NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9odmNzLmMKKysrIGIvZHJpdmVycy90dHkvaHZjL2h2Y3MuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAgKiBhcmNoL3Bvd2VyZXBjL2luY2x1ZGUvYXNtL2h2Y3NlcnZlci5oCiAgKgogICogMS4zLjIgLT4gMS4zLjMgUmVwbGFjZWQgeWllbGQoKSBpbiBodmNzX2Nsb3NlKCkgd2l0aCB0dHlfd2FpdF91bnRpbF9zZW50KCkgdG8KLSAqIHByZXZlbnQgcG9zc2libGUgbG9ja3VwIHdpdGggcmVhbHRpbWUgc2NoZWR1bGluZyBhcyBzaW1pbGFyaWx5IHBvaW50ZWQgb3V0IGJ5CisgKiBwcmV2ZW50IHBvc3NpYmxlIGxvY2t1cCB3aXRoIHJlYWx0aW1lIHNjaGVkdWxpbmcgYXMgc2ltaWxhcmx5IHBvaW50ZWQgb3V0IGJ5CiAgKiBha3BtIGluIGh2Y19jb25zb2xlLiAgQ2hhbmdlZCByZXN1bHRlZCBpbiB0aGUgcmVtb3ZhbCBvZiBodmNzX2ZpbmFsX2Nsb3NlKCkKICAqIHRvIHJlb3JkZXIgY2xlYW51cCBvcGVyYXRpb25zIGFuZCBwcmV2ZW50IGRpc2NhcmRpbmcgb2YgcGVuZGluZyBkYXRhIGR1cmluZwogICogYW4gaHZjc19jbG9zZSgpLiAgUmVtb3ZlZCBzcGlubG9jayBwcm90ZWN0aW9uIG9mIGh2Y3Nfc3RydWN0IGRhdGEgbWVtYmVycyBpbgpAQCAtNTgxLDcgKzU4MSw3IEBACiAJCQkvKgogCQkJICogV2UgYXJlIHN0aWxsIG9ibGlnYXRlZCB0byBkZWxpdmVyIHRoZSBkYXRhIHRvIHRoZQogCQkJICogaHlwZXJ2aXNvciBldmVuIGlmIHRoZSB0dHkgaGFzIGJlZW4gY2xvc2VkIGJlY2F1c2UKLQkJCSAqIHdlIGNvbW1pdGVkIHRvIGRlbGl2ZXJpbmcgaXQuICBCdXQgZG9uJ3QgdHJ5IHRvIHdha2UKKwkJCSAqIHdlIGNvbW1pdHRlZCB0byBkZWxpdmVyaW5nIGl0LiAgQnV0IGRvbid0IHRyeSB0byB3YWtlCiAJCQkgKiBhIG5vbi1leGlzdGVudCB0dHkuCiAJCQkgKi8KIAkJCWlmICh0dHkpIHsKQEAgLTEzNDksNyArMTM0OSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh2Y3NkLT5sb2NrLCBmbGFncyk7CiAKIAkvKgotCSAqIFNvbWVob3cgYW4gb3BlbiBzdWNjZWRkZWQgYnV0IHRoZSBkZXZpY2Ugd2FzIHJlbW92ZWQgb3IgdGhlCisJICogU29tZWhvdyBhbiBvcGVuIHN1Y2NlZWRlZCBidXQgdGhlIGRldmljZSB3YXMgcmVtb3ZlZCBvciB0aGUKIAkgKiBjb25uZWN0aW9uIHRlcm1pbmF0ZWQgYmV0d2VlbiB0aGUgdnR5LXNlcnZlciBhbmQgcGFydG5lciB2dHkgZHVyaW5nCiAJICogdGhlIG1pZGRsZSBvZiBhIHdyaXRlIG9wZXJhdGlvbj8gIFRoaXMgaXMgYSBjcnVtbXkgcGxhY2UgdG8gZG8gdGhpcwogCSAqIGJ1dCB3ZSB3YW50IHRvIGtlZXAgaXQgYWxsIGluIHRoZSBzcGlubG9jay4KQEAgLTE0MjAsNyArMTQyMCw3IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIHJlYWxseSBhc2tpbmcgaG93IG11Y2ggY2FuIHdlIGd1YXJlbnRlZSB0aGF0IHdlIGNhbiBzZW5kIG9yIHRoYXQgd2UKKyAqIFRoaXMgaXMgcmVhbGx5IGFza2luZyBob3cgbXVjaCBjYW4gd2UgZ3VhcmFudGVlIHRoYXQgd2UgY2FuIHNlbmQgb3IgdGhhdCB3ZQogICogYWJzb2x1dGVseSBXSUxMIEJVRkZFUiBpZiB3ZSBjYW4ndCBzZW5kIGl0LiAgVGhpcyBkcml2ZXIgTVVTVCBob25vciB0aGUKICAqIHJldHVybiB2YWx1ZSwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgaHZjc19zdHJ1Y3QgYnVmZmVyaW5nLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9teHNlci5oIGIvZHJpdmVycy90dHkvbXhzZXIuaAppbmRleCA0MTg3OGE2Li4wYmY3OTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9teHNlci5oCisrKyBiL2RyaXZlcnMvdHR5L214c2VyLmgKQEAgLTExMyw3ICsxMTMsNyBAQAogI2RlZmluZSBNT1hBX01VU1RfSUlSX1JUTwkJMHgwQwogI2RlZmluZSBNT1hBX01VU1RfSUlSX0xTUgkJMHgwNgogCi0vKiByZWNpZXZlZCBYb24vWG9mZiBvciBzcGVjaWNhbCBpbnRlcnJ1cHQgcGVuZGluZyAqLworLyogcmVjZWl2ZWQgWG9uL1hvZmYgb3Igc3BlY2ljYWwgaW50ZXJydXB0IHBlbmRpbmcgKi8KICNkZWZpbmUgTU9YQV9NVVNUX0lJUl9YU0MJCTB4MTAKIAogLyogUlRTL0NUUyBjaGFuZ2Ugc3RhdGUgaW50ZXJydXB0IHBlbmRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IDE3NmY2MzIuLjc0MjczZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtNzQsNyArNzQsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBTZW1pLWFyYml0YXJ5IGJ1ZmZlciBzaXplIGxpbWl0cy4gMDcxMCBpcyBub3JtYWxseSBydW4gd2l0aCAzMi02NCBieXRlCisgKiBTZW1pLWFyYml0cmFyeSBidWZmZXIgc2l6ZSBsaW1pdHMuIDA3MTAgaXMgbm9ybWFsbHkgcnVuIHdpdGggMzItNjQgYnl0ZQogICogbGltaXRzIHNvIHRoaXMgaXMgcGxlbnR5CiAgKi8KICNkZWZpbmUgTUFYX01SVSA1MTIKQEAgLTgyLDcgKzgyLDcgQEAKIAogLyoKICAqCUVhY2ggYmxvY2sgb2YgZGF0YSB3ZSBoYXZlIHF1ZXVlZCB0byBnbyBvdXQgaXMgaW4gdGhlIGZvcm0gb2YKLSAqCWEgZ3NtX21zZyB3aGljaCBob2xkcyBldmVyeXRoaW5nIHdlIG5lZWQgaW4gYSBsaW5rIGxheWVyIGluZGVwZW5kYW50CisgKglhIGdzbV9tc2cgd2hpY2ggaG9sZHMgZXZlcnl0aGluZyB3ZSBuZWVkIGluIGEgbGluayBsYXllciBpbmRlcGVuZGVudAogICoJZm9ybWF0CiAgKi8KIApAQCAtMTE5Myw4ICsxMTkzLDggQEAKIAkJYnJlYWs7CiAJCS8qIE9wdGlvbmFsIHVuc3VwcG9ydGVkIGNvbW1hbmRzICovCiAJY2FzZSBDTURfUE46CS8qIFBhcmFtZXRlciBuZWdvdGlhdGlvbiAqLwotCWNhc2UgQ01EX1JQTjoJLyogUmVtb3RlIHBvcnQgbmVnb3RhdGlvbiAqLwotCWNhc2UgQ01EX1NOQzoJLyogU2VydmljZSBuZWdvdGF0aW9uIGNvbW1hbmQgKi8KKwljYXNlIENNRF9SUE46CS8qIFJlbW90ZSBwb3J0IG5lZ290aWF0aW9uICovCisJY2FzZSBDTURfU05DOgkvKiBTZXJ2aWNlIG5lZ290aWF0aW9uIGNvbW1hbmQgKi8KIAlkZWZhdWx0OgogCQkvKiBSZXBseSB0byBiYWQgY29tbWFuZHMgd2l0aCBhbiBOU0MgKi8KIAkJYnVmWzBdID0gY29tbWFuZDsKQEAgLTE2NTgsOCArMTY1OCwxMiBAQAogCiAJaWYgKChnc20tPmNvbnRyb2wgJiB+UEYpID09IFVJKQogCQlnc20tPmZjcyA9IGdzbV9mY3NfYWRkX2Jsb2NrKGdzbS0+ZmNzLCBnc20tPmJ1ZiwgZ3NtLT5sZW4pOwotCS8qIGdlbmVyYXRlIGZpbmFsIENSQyB3aXRoIHJlY2VpdmVkIEZDUyAqLwotCWdzbS0+ZmNzID0gZ3NtX2Zjc19hZGQoZ3NtLT5mY3MsIGdzbS0+cmVjZWl2ZWRfZmNzKTsKKwlpZiAoZ3NtLT5lbmNvZGluZyA9PSAwKXsKKwkJLyogV0FSTklORzogZ3NtLT5yZWNlaXZlZF9mY3MgaXMgdXNlZCBmb3IgZ3NtLT5lbmNvZGluZyA9IDAgb25seS4KKwkJICAgICAgICAgICAgSW4gdGhpcyBjYXNlIGl0IGNvbnRhaW4gdGhlIGxhc3QgcGllY2Ugb2YgZGF0YQorCQkgICAgICAgICAgICByZXF1aXJlZCB0byBnZW5lcmF0ZSBmaW5hbCBDUkMgKi8KKwkJZ3NtLT5mY3MgPSBnc21fZmNzX2FkZChnc20tPmZjcywgZ3NtLT5yZWNlaXZlZF9mY3MpOworCX0KIAlpZiAoZ3NtLT5mY3MgIT0gR09PRF9GQ1MpIHsKIAkJZ3NtLT5iYWRfZmNzKys7CiAJCWlmIChkZWJ1ZyAmIDQpCkBAIC0yMDI2LDcgKzIwMzAsNyBAQAogICoJQG11eDogbXV4IHRvIGZyZWUKICAqCiAgKglEaXNwb3NlIG9mIGFsbG9jYXRlZCByZXNvdXJjZXMgZm9yIGEgZGVhZCBtdXguIE5vIHJlZmNvdW50aW5nCi0gKglhdCBwcmVzZW50IHNvIHRoZSBtdXggbXVzdCBiZSB0cnVlbHkgZGVhZC4KKyAqCWF0IHByZXNlbnQgc28gdGhlIG11eCBtdXN0IGJlIHRydWx5IGRlYWQuCiAgKi8KIHZvaWQgZ3NtX2ZyZWVfbXV4KHN0cnVjdCBnc21fbXV4ICpnc20pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3R0eS5jIGIvZHJpdmVycy90dHkvbl90dHkuYwppbmRleCA0MjhmNGZlLi4wYWQzMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9uX3R0eS5jCisrKyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKQEAgLTk1LDYgKzk1LDcgQEAKIHsKIAkvKiB0dHktPnJlYWRfY250IGlzIG5vdCByZWFkIGxvY2tlZCA/ICovCiAJaW50CWxlZnQgPSBOX1RUWV9CVUZfU0laRSAtIHR0eS0+cmVhZF9jbnQgLSAxOworCWludCBvbGRfbGVmdDsKIAogCS8qCiAJICogSWYgd2UgYXJlIGRvaW5nIGlucHV0IGNhbm9uaWNhbGl6YXRpb24sIGFuZCB0aGVyZSBhcmUgbm8KQEAgLTEwNCw3ICsxMDUsMTIgQEAKIAkgKi8KIAlpZiAobGVmdCA8PSAwKQogCQlsZWZ0ID0gdHR5LT5pY2Fub24gJiYgIXR0eS0+Y2Fub25fZGF0YTsKKwlvbGRfbGVmdCA9IHR0eS0+cmVjZWl2ZV9yb29tOwogCXR0eS0+cmVjZWl2ZV9yb29tID0gbGVmdDsKKworCS8qIERpZCB0aGlzIG9wZW4gdXAgdGhlIHJlY2VpdmUgYnVmZmVyPyBXZSBtYXkgbmVlZCB0byBmbGlwICovCisJaWYgKGxlZnQgJiYgIW9sZF9sZWZ0KQorCQlzY2hlZHVsZV93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgcHV0X3R0eV9xdWV1ZV9ub2xvY2sodW5zaWduZWQgY2hhciBjLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbm96b21pLmMgYi9kcml2ZXJzL3R0eS9ub3pvbWkuYwppbmRleCBmNGYxMTE2Li5mZDBhOTg1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbm96b21pLmMKKysrIGIvZHJpdmVycy90dHkvbm96b21pLmMKQEAgLTE2NzMsNyArMTY3Myw3IEBACiAKIC8qCiAgKiBjYWxsZWQgd2hlbiB0aGUgdXNlcnNwYWNlIHByb2Nlc3Mgd3JpdGVzIHRvIHRoZSB0dHkgKC9kZXYvbm96KikuCi0gKiBEYXRhIGlzIGluc2VydGVkIGludG8gYSBmaWZvLCB3aGljaCBpcyB0aGVuIHJlYWQgYW5kIHRyYW5zZmVyZWQgdG8gdGhlIG1vZGVtLgorICogRGF0YSBpcyBpbnNlcnRlZCBpbnRvIGEgZmlmbywgd2hpY2ggaXMgdGhlbiByZWFkIGFuZCB0cmFuc2ZlcnJlZCB0byB0aGUgbW9kZW0uCiAgKi8KIHN0YXRpYyBpbnQgbnR0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCiAJCSAgICAgIGludCBjb3VudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3JvY2tldC5jIGIvZHJpdmVycy90dHkvcm9ja2V0LmMKaW5kZXggMzc4MGRhOC4uMDM2ZmVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvcm9ja2V0LmMKKysrIGIvZHJpdmVycy90dHkvcm9ja2V0LmMKQEAgLTIwNjAsNyArMjA2MCw3IEBACiAJCQlzQ2xvY2tQcmVzY2FsZSA9IDB4MTk7CiAJCQlycF9iYXVkX2Jhc2VbaV0gPSAyMzA0MDA7CiAJCX0gZWxzZSB7Ci0JCQkvKiBtb2QgNCAoZGV2aWRlIGJ5IDUpIHByZXNjYWxlICovCisJCQkvKiBtb2QgNCAoZGl2aWRlIGJ5IDUpIHByZXNjYWxlICovCiAJCQlzQ2xvY2tQcmVzY2FsZSA9IDB4MTQ7CiAJCQlycF9iYXVkX2Jhc2VbaV0gPSA0NjA4MDA7CiAJCX0KQEAgLTIxODMsNyArMjE4Myw3IEBACiAJCXNDbG9ja1ByZXNjYWxlID0gMHgxOTsJLyogbW9kIDkgKGRpdmlkZSBieSAxMCkgcHJlc2NhbGUgKi8KIAkJcnBfYmF1ZF9iYXNlW2ldID0gMjMwNDAwOwogCX0gZWxzZSB7Ci0JCXNDbG9ja1ByZXNjYWxlID0gMHgxNDsJLyogbW9kIDQgKGRldmlkZSBieSA1KSBwcmVzY2FsZSAqLworCQlzQ2xvY2tQcmVzY2FsZSA9IDB4MTQ7CS8qIG1vZCA0IChkaXZpZGUgYnkgNSkgcHJlc2NhbGUgKi8KIAkJcnBfYmF1ZF9iYXNlW2ldID0gNDYwODAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKaW5kZXggYjNiODgxYi4uNjYxMTUzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCkBAIC0xNjI5LDcgKzE2MjksNyBAQAogCQkJICAgIHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0RXQVBCMzIpICYmCiAJCQkgIChpaXIgJiBVQVJUX0lJUl9CVVNZKSA9PSBVQVJUX0lJUl9CVVNZKSB7CiAJCQkvKiBUaGUgRGVzaWduV2FyZSBBUEIgVUFSVCBoYXMgYW4gQnVzeSBEZXRlY3QgKDB4MDcpCi0JCQkgKiBpbnRlcnJ1cHQgbWVhbmluZyBhbiBMQ1Igd3JpdGUgYXR0ZW1wdCBvY2N1cmVkIHdoaWxlIHRoZQorCQkJICogaW50ZXJydXB0IG1lYW5pbmcgYW4gTENSIHdyaXRlIGF0dGVtcHQgb2NjdXJyZWQgd2hpbGUgdGhlCiAJCQkgKiBVQVJUIHdhcyBidXN5LiBUaGUgaW50ZXJydXB0IG11c3QgYmUgY2xlYXJlZCBieSByZWFkaW5nCiAJCQkgKiB0aGUgVUFSVCBzdGF0dXMgcmVnaXN0ZXIgKFVTUikgYW5kIHRoZSBMQ1IgcmUtd3JpdHRlbi4gKi8KIAkJCXVuc2lnbmVkIGludCBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BjaS5jCmluZGV4IDhiODkzMGYuLjczOGNlYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BjaS5jCkBAIC00MzMsNyArNDMzLDcgQEAKIC8qCiAgKiBTSUlHIHNlcmlhbCBjYXJkcyBoYXZlIGFuIFBDSSBpbnRlcmZhY2UgY2hpcCB3aGljaCBhbHNvIGNvbnRyb2xzCiAgKiB0aGUgVUFSVCBjbG9ja2luZyBmcmVxdWVuY3kuIEVhY2ggVUFSVCBjYW4gYmUgY2xvY2tlZCBpbmRlcGVuZGVudGx5Ci0gKiAoZXhjZXB0IGNhcmRzIGVxdWlwZWQgd2l0aCA0IFVBUlRzKSBhbmQgaW5pdGlhbCBjbG9ja2luZyBzZXR0aW5ncworICogKGV4Y2VwdCBjYXJkcyBlcXVpcHBlZCB3aXRoIDQgVUFSVHMpIGFuZCBpbml0aWFsIGNsb2NraW5nIHNldHRpbmdzCiAgKiBhcmUgc3RvcmVkIGluIHRoZSBFRVBST00gY2hpcC4gSXQgY2FuIGNhdXNlIHByb2JsZW1zIGJlY2F1c2UgdGhpcwogICogdmVyc2lvbiBvZiBzZXJpYWwgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBkaWZmZXJlbnRseSBjbG9ja2VkIFVBUlQncwogICogb24gc2luZ2xlIFBDSSBjYXJkLiBUbyBwcmV2ZW50IHRoaXMsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDExLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IDU3NzMxZTguLjZkZWVlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDExLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTEuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgYSBUWCBidWZmZXIgcXVldWVkLCBzbyB0cnkgdG8gcXVldWUgb25lLgotCSAqIElmIHdlIHN1Y2Nlc2Z1bGx5IHF1ZXVlZCBhIGJ1ZmZlciwgbWFzayB0aGUgVFggSVJRLgorCSAqIElmIHdlIHN1Y2Nlc3NmdWxseSBxdWV1ZWQgYSBidWZmZXIsIG1hc2sgdGhlIFRYIElSUS4KIAkgKi8KIAlpZiAocGwwMTFfZG1hX3R4X3JlZmlsbCh1YXApID4gMCkgewogCQl1YXAtPmltICY9IH5VQVJUMDExX1RYSU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvaWNvbS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2ljb20uYwppbmRleCA1M2E0NjgyLi44YTg2OWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvaWNvbS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pY29tLmMKQEAgLTEyNDgsNyArMTI0OCw3IEBACiAJCX0KIAl9CiAKLQkvKiBFbmFibGUgVHJhbnNtaXR0ZXIgYW5kIFJlY2lldmVyICovCisJLyogRW5hYmxlIFRyYW5zbWl0dGVyIGFuZCBSZWNlaXZlciAqLwogCW9mZnNldCA9CiAJICAgICh1bnNpZ25lZCBsb25nKSAmSUNPTV9QT1JULT5zdGF0U3RnLT5yY3ZbMF0gLQogCSAgICAodW5zaWduZWQgbG9uZykgSUNPTV9QT1JULT5zdGF0U3RnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCmluZGV4IGRmY2Y0YjEuLjYyZGY3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMKQEAgLTc4LDcgKzc4LDcgQEAKICNkZWZpbmUgIFVSWERfRlJNRVJSICAgICAoMTw8MTIpCiAjZGVmaW5lICBVUlhEX0JSSyAgICAgICAgKDE8PDExKQogI2RlZmluZSAgVVJYRF9QUkVSUiAgICAgICgxPDwxMCkKLSNkZWZpbmUgIFVDUjFfQURFTiAgICAgICAoMTw8MTUpIC8qIEF1dG8gZGVjdGVjdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIFVDUjFfQURFTiAgICAgICAoMTw8MTUpIC8qIEF1dG8gZGV0ZWN0IGludGVycnVwdCAqLwogI2RlZmluZSAgVUNSMV9BREJSICAgICAgICgxPDwxNCkgLyogQXV0byBkZXRlY3QgYmF1ZCByYXRlICovCiAjZGVmaW5lICBVQ1IxX1RSRFlFTiAgICAgKDE8PDEzKSAvKiBUcmFuc21pdHRlciByZWFkeSBpbnRlcnJ1cHQgZW5hYmxlICovCiAjZGVmaW5lICBVQ1IxX0lERU4gICAgICAgKDE8PDEyKSAvKiBJZGxlIGNvbmRpdGlvbiBpbnRlcnJ1cHQgKi8KQEAgLTM4MiwxMiArMzgyLDEzIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3J0c2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpICYgVVNSMV9SVFNTOworCXVuc2lnbmVkIGludCB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAKIAl3cml0ZWwoVVNSMV9SVFNELCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMSk7CisJdmFsID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpICYgVVNSMV9SVFNTOwogCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCAhIXZhbCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pcDIyemlsb2cuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pcDIyemlsb2cuYwppbmRleCBlYmZmNGExLi43YjFjZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvaXAyMnppbG9nLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2lwMjJ6aWxvZy5jCkBAIC0zNzUsNyArMzc1LDcgQEAKIAkJICogYmUgbmljZSB0byB0cmFuc21pdCBjb25zb2xlIHdyaXRlcyBqdXN0IGxpa2Ugd2Ugbm9ybWFsbHkgd291bGQgZm9yCiAJCSAqIGEgVFRZIGxpbmUuIChpZS4gYnVmZmVyZWQgYW5kIFRYIGludGVycnVwdCBkcml2ZW4pLiAgVGhhdCBpcyBub3QKIAkJICogZWFzeSBiZWNhdXNlIGNvbnNvbGUgd3JpdGVzIGNhbm5vdCBzbGVlcC4gIE9uZSBzb2x1dGlvbiBtaWdodCBiZQotCQkgKiB0byBwb2xsIG9uIGVub3VnaCBwb3J0LT54bWl0IHNwYWNlIGJlY29tbWluZyBmcmVlLiAgLURhdmVNCisJCSAqIHRvIHBvbGwgb24gZW5vdWdoIHBvcnQtPnhtaXQgc3BhY2UgYmVjb21pbmcgZnJlZS4gIC1EYXZlTQogCQkgKi8KIAkJaWYgKCEoc3RhdHVzICYgVHhfQlVGX0VNUCkpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbS5oIGIvZHJpdmVycy90dHkvc2VyaWFsL2pzbS9qc20uaAppbmRleCAzOGE1MDljLi5iNzA0YzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbS5oCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtLmgKQEAgLTI3Myw3ICsyNzMsNyBAQAogCSB1OCBmY3RyOwkJLyogV1IJRkNUUiAtIEZlYXR1cmUgQ29udHJvbCBSZWcgKi8KIAkgdTggZWZyOwkJLyogV1IJRUZSIC0gRW5oYW5jZWQgRnVuY3Rpb24gUmVnICovCiAJIHU4IHRmaWZvOwkJLyogV1IJVFhDTlQvVFhUUkcgLSBUcmFuc21pdCBGSUZPIFJlZyAqLwotCSB1OCByZmlmbzsJCS8qIFdSCVJYQ05UL1JYVFJHIC0gUmVjaWV2ZSBGSUZPIFJlZyAqLworCSB1OCByZmlmbzsJCS8qIFdSCVJYQ05UL1JYVFJHIC0gUmVjZWl2ZSBGSUZPIFJlZyAqLwogCSB1OCB4b2ZmY2hhcjE7CS8qIFdSCVhPRkYgMSAtIFhPZmYgQ2hhcmFjdGVyIDEgUmVnICovCiAJIHU4IHhvZmZjaGFyMjsJLyogV1IJWE9GRiAyIC0gWE9mZiBDaGFyYWN0ZXIgMiBSZWcgKi8KIAkgdTggeG9uY2hhcjE7CS8qIFdSCVhPTiAxIC0gWG9uIENoYXJhY3RlciAxIFJlZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2pzbS9qc21fbmVvLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbV9uZW8uYwppbmRleCA3OTYwZDk2Li40NTM4YzNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbV9uZW8uYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbV9uZW8uYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCS8qIENvcHkgZGF0YSBmcm9tIHVhcnQgdG8gdGhlIHF1ZXVlICovCiAJCW1lbWNweV9mcm9taW8oY2gtPmNoX3JxdWV1ZSArIGhlYWQsICZjaC0+Y2hfbmVvX3VhcnQtPnR4cnhidXJzdCwgbik7CiAJCS8qCi0JCSAqIFNpbmNlIFJYX0ZJRk9fREFUQV9FUlJPUiB3YXMgMCwgd2UgYXJlIGd1YXJlbnRlZWQKKwkJICogU2luY2UgUlhfRklGT19EQVRBX0VSUk9SIHdhcyAwLCB3ZSBhcmUgZ3VhcmFudGVlZAogCQkgKiB0aGF0IGFsbCB0aGUgZGF0YSBjdXJyZW50bHkgaW4gdGhlIEZJRk8gaXMgZnJlZSBvZgogCQkgKiBicmVha3MgYW5kIHBhcml0eS9mcmFtZS9vcnVuIGVycm9ycy4KIAkJICovCkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCQkJICogV2h5IHdvdWxkIEkgY2hlY2sgRVZFUlkgcG9zc2liaWxpdHkgb2YgdHlwZSBvZgogCQkJICogaW50ZXJydXB0LCB3aGVuIHdlIGtub3cgaXRzIFRYUkRZPz8/CiAJCQkgKiBCZWN1eiBmb3Igc29tZSByZWFzb24sIGV2ZW4gdGhvIHdlIGdvdCB0cmlnZ2VyZWQgZm9yIFRYUkRZLAotCQkJICogaXQgc2VlbXMgdG8gYmUgb2NjYXNzaW9uYWxseSB3cm9uZy4gSW5zdGVhZCBvZiBUWCwgd2hpY2gKKwkJCSAqIGl0IHNlZW1zIHRvIGJlIG9jY2FzaW9uYWxseSB3cm9uZy4gSW5zdGVhZCBvZiBUWCwgd2hpY2gKIAkJCSAqIGl0IHNob3VsZCBiZSwgSSB3YXMgZ2V0dGluZyB0aGluZ3MgbGlrZSBSWERZIHRvby4gV2VpcmQuCiAJCQkgKi8KIAkJCW5lb19wYXJzZV9pc3IoYnJkLCBwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5oCmluZGV4IDdhYjYzMjM5Li44NDE1ZmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5oCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmgKQEAgLTM2OSw3ICszNjksNyBAQAogCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19HUElPTElCKQotCS8qIEdQSU8gY2hpcCBzdHVjdHVyZSAqLworCS8qIEdQSU8gY2hpcCBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5jCmluZGV4IDM3ZTEzYzMuLjJmNTQ4YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmMKQEAgLTIzLDcgKzIzLDcgQEAKICAqICAgIDEgd29yZC4gSWYgU1BJIG1hc3RlciBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCBzY2xrIGZyZXF1ZW5jeSBjaGFuZ2UsCiAgKiAgICB0aGVuIHRoZSBjaGFyIG5lZWQgYmUgc2VudCBvdXQgb25lIGJ5IG9uZSB3aXRoIHNvbWUgZGVsYXkKICAqCi0gKiAyLiBDdXJyZW50bHkgb25seSBSWCBhdmFpbGFiZSBpbnRlcnJydXB0IGlzIHVzZWQsIG5vIG5lZWQgZm9yIHdhaXRpbmcgVFhFCisgKiAyLiBDdXJyZW50bHkgb25seSBSWCBhdmFpbGFibGUgaW50ZXJycnVwdCBpcyB1c2VkLCBubyBuZWVkIGZvciB3YWl0aW5nIFRYRQogICogICAgaW50ZXJydXB0IGZvciBhIGxvdyBzcGVlZCBVQVJUIGRldmljZQogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuaAppbmRleCBkMWVmNDNhLi5jMzdlYTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5oCkBAIC0yMSw3ICsyMSw3IEBACiAKICNkZWZpbmUgV0NfSVJRX01BU0sJCSgweEYgPDwgOCkKICNkZWZpbmUgV0NfVFhFX0lSUV9FTkFCTEUJKDEgPDwgMTEpCS8qIFRYIGVtcHR5IGlycSAqLwotI2RlZmluZSBXQ19SWEFfSVJRX0VOQUJMRQkoMSA8PCAxMCkJLyogUlggYXZhaWxhYmUgaXJxICovCisjZGVmaW5lIFdDX1JYQV9JUlFfRU5BQkxFCSgxIDw8IDEwKQkvKiBSWCBhdmFpbGFibGUgaXJxICovCiAjZGVmaW5lIFdDX1BBUl9ISUdIX0lSUV9FTkFCTEUJKDEgPDwgOSkKICNkZWZpbmUgV0NfUkVDX0FDVF9JUlFfRU5BQkxFCSgxIDw8IDgpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsX2hzLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbF9ocy5jCmluZGV4IGI5MDZmMTEuLjYyNDcwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsX2hzLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWxfaHMuYwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAgKgogICogSW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHdlIGFyZSBjYWxsZWQsIGFzCiAgKiB3ZSBtb2RpZnkgU2V0IEJhdWQgcmF0ZQotICogU2V0IHJlY2VpdmUgc3RhbGUgaW50ZXJydXB0IGxldmVsLCBkZXBlbmRhbnQgb24gQml0IFJhdGUKKyAqIFNldCByZWNlaXZlIHN0YWxlIGludGVycnVwdCBsZXZlbCwgZGVwZW5kZW50IG9uIEJpdCBSYXRlCiAgKiBHb2FsIGlzIHRvIGhhdmUgYXJvdW5kIDggbXMgYmVmb3JlIGluZGljYXRlIHN0YWxlLgogICogcm91bmR1cCAoKChCaXQgUmF0ZSAqIC4wMDgpIC8gMTApICsgMQogICovCkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVwb3J0LT5sb2NrLCBmbGFncyk7CiAJaWYgKG1zbV91cG9ydC0+Y2xrX3N0YXRlID09IE1TTV9IU19DTEtfT0ZGKSB7Ci0JCS8qIGlnbm9yZSB0aGUgZmlyc3QgaXJxIC0gaXQgaXMgYSBwZW5kaW5nIGlycSB0aGF0IG9jY3VyZWQKKwkJLyogaWdub3JlIHRoZSBmaXJzdCBpcnEgLSBpdCBpcyBhIHBlbmRpbmcgaXJxIHRoYXQgb2NjdXJyZWQKIAkJICogYmVmb3JlIGVuYWJsZV9pcnEoKSAqLwogCQlpZiAobXNtX3Vwb3J0LT5yeF93YWtldXAuaWdub3JlKQogCQkJbXNtX3Vwb3J0LT5yeF93YWtldXAuaWdub3JlID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vbWFwLXNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMKaW5kZXggNzYzNTM3OS4uNDdjYWRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIE5vdGU6IFRoaXMgZHJpdmVyIGlzIG1hZGUgc2VwZXJhdGUgZnJvbSA4MjUwIGRyaXZlciBhcyB3ZSBjYW5ub3QKKyAqIE5vdGU6IFRoaXMgZHJpdmVyIGlzIG1hZGUgc2VwYXJhdGUgZnJvbSA4MjUwIGRyaXZlciBhcyB3ZSBjYW5ub3QKICAqIG92ZXIgbG9hZCA4MjUwIGRyaXZlciB3aXRoIG9tYXAgcGxhdGZvcm0gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IKICAqIGZlYXR1cmVzIGxpa2UgRE1BLCBpdCBtYWtlcyBlYXNpZXIgdG8gaW1wbGVtZW50IGZlYXR1cmVzIGxpa2UgRE1BIGFuZAogICogaGFyZHdhcmUgZmxvdyBjb250cm9sIGFuZCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgY29uZmlndXJhdGlvbiB3aXRoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvcG1hY196aWxvZy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3BtYWNfemlsb2cuYwppbmRleCA1YjljZGU3Li5lMWM4ZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcG1hY196aWxvZy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wbWFjX3ppbG9nLmMKQEAgLTMzMCw3ICszMzAsNyBAQAogCQkgKiBXaGVuIHRoYXQgaGFwcGVucywgSSBkaXNhYmxlIHRoZSByZWNlaXZlIHNpZGUgb2YgdGhlIGRyaXZlci4KIAkJICogTm90ZSB0aGF0IHdoYXQgSSd2ZSBiZWVuIGV4cGVyaWVuY2luZyBpcyBhIHJlYWwgaXJxIGxvb3Agd2hlcmUKIAkJICogSSdtIGdldHRpbmcgZmxvb2RlZCByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwgcG9ydCBzcGVlZC4KLQkJICogU29tZXRoaW5nIHN0YW5nZSBpcyBnb2luZyBvbiB3aXRoIHRoZSBIVworCQkgKiBTb21ldGhpbmcgc3RyYW5nZSBpcyBnb2luZyBvbiB3aXRoIHRoZSBIVwogCQkgKi8KIAkJaWYgKCgrK2xvb3BzKSA+IDEwMDApCiAJCQlnb3RvIGZsb29kOwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJCSAqIGJlIG5pY2UgdG8gdHJhbnNtaXQgY29uc29sZSB3cml0ZXMganVzdCBsaWtlIHdlIG5vcm1hbGx5IHdvdWxkIGZvcgogCQkgKiBhIFRUWSBsaW5lLiAoaWUuIGJ1ZmZlcmVkIGFuZCBUWCBpbnRlcnJ1cHQgZHJpdmVuKS4gIFRoYXQgaXMgbm90CiAJCSAqIGVhc3kgYmVjYXVzZSBjb25zb2xlIHdyaXRlcyBjYW5ub3Qgc2xlZXAuICBPbmUgc29sdXRpb24gbWlnaHQgYmUKLQkJICogdG8gcG9sbCBvbiBlbm91Z2ggcG9ydC0+eG1pdCBzcGFjZSBiZWNvbW1pbmcgZnJlZS4gIC1EYXZlTQorCQkgKiB0byBwb2xsIG9uIGVub3VnaCBwb3J0LT54bWl0IHNwYWNlIGJlY29taW5nIGZyZWUuICAtRGF2ZU0KIAkJICovCiAJCWlmICghKHN0YXR1cyAmIFR4X0JVRl9FTVApKQogCQkJcmV0dXJuOwpAQCAtODA5LDcgKzgwOSw3IEBACiAjZW5kaWYgLyogIUNPTkZJR19QUENfUE1BQyAqLwogCiAvKgotICogRml4WmVyb0J1Zy4uLi5Xb3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIFNDQyByZWNldmluZyBjaGFubmVsLgorICogRml4WmVyb0J1Zy4uLi5Xb3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIFNDQyByZWNlaXZpbmcgY2hhbm5lbC4KICAqIEluc3BpcmVkIGZyb20gRGFyd2luIGNvZGUsIDE1IFNlcHQuIDIwMDAgIC1EYW5NCiAgKgogICogVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBwcmV2ZW50cyBhIHByb2JsZW0gdGhhdCBpcyBzZWVuIHdpdGggTydIYXJlIEFTSUNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYwppbmRleCAyMzM1ZWRhLi45ZTJmYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKQEAgLTY0LDcgKzY0LDcgQEAKICNkZWZpbmUgdHhfZW5hYmxlZChwb3J0KSAoKHBvcnQpLT51bnVzZWRbMF0pCiAjZGVmaW5lIHJ4X2VuYWJsZWQocG9ydCkgKChwb3J0KS0+dW51c2VkWzFdKQogCi0vKiBmbGFnIHRvIGlnbm9yZSBhbGwgY2hhcmFjdGVycyBjb21taW5nIGluICovCisvKiBmbGFnIHRvIGlnbm9yZSBhbGwgY2hhcmFjdGVycyBjb21pbmcgaW4gKi8KICNkZWZpbmUgUlhTVEFUX0RVTU1ZX1JFQUQgKDB4MTAwMDAwMDApCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICp0b19vdXJwb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0yOTEsNyArMjkxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogaWYgdGhlcmUgaXNudCBhbnl0aGluZyBtb3JlIHRvIHRyYW5zbWl0LCBvciB0aGUgdWFydCBpcyBub3cKKwkvKiBpZiB0aGVyZSBpc24ndCBhbnl0aGluZyBtb3JlIHRvIHRyYW5zbWl0LCBvciB0aGUgdWFydCBpcyBub3cKIAkgKiBzdG9wcGVkLCBkaXNhYmxlIHRoZSB1YXJ0IGFuZCBleGl0CiAJKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jCmluZGV4IGViNzk1OGMuLjkyMGE2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogfQogCiAvKgotICogSGVyZSB3ZSBkZWZpbmUgYSB0cmFuc2lzdGlvbiBub3RpZmllciBzbyB0aGF0IHdlIGNhbiB1cGRhdGUgYWxsIG9mIG91cgorICogSGVyZSB3ZSBkZWZpbmUgYSB0cmFuc2l0aW9uIG5vdGlmaWVyIHNvIHRoYXQgd2UgY2FuIHVwZGF0ZSBhbGwgb2Ygb3VyCiAgKiBwb3J0cycgYmF1ZCByYXRlIHdoZW4gdGhlIHBlcmlwaGVyYWwgY2xvY2sgY2hhbmdlcy4KICAqLwogc3RhdGljIGludCBzY2lfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLApAQCAtMTgzNiw2ICsxODM2LDEyIEBACiAJc2NpX3BvcnQgPSAmc2NpX3BvcnRzW2NvLT5pbmRleF07CiAJcG9ydCA9ICZzY2lfcG9ydC0+cG9ydDsKIAorCS8qCisJICogUmVmdXNlIHRvIGhhbmRsZSB1bmluaXRpYWxpemVkIHBvcnRzLgorCSAqLworCWlmICghcG9ydC0+b3BzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldCA9IHNjaV9yZW1hcF9wb3J0KHBvcnQpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7CkBAIC0xODY2LDEzICsxODcyLDYgQEAKIAkuZGF0YQkJPSAmc2NpX3VhcnRfZHJpdmVyLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc2NpX2NvbnNvbGVfaW5pdCh2b2lkKQotewotCXJlZ2lzdGVyX2NvbnNvbGUoJnNlcmlhbF9jb25zb2xlKTsKLQlyZXR1cm4gMDsKLX0KLWNvbnNvbGVfaW5pdGNhbGwoc2NpX2NvbnNvbGVfaW5pdCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgY29uc29sZSBlYXJseV9zZXJpYWxfY29uc29sZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiZWFybHlfdHR5U0MiLAogCS53cml0ZSAgICAgICAgICA9IHNlcmlhbF9jb25zb2xlX3dyaXRlLApAQCAtMTkwMSwxOCArMTkwMCwxOCBAQAogCXJlZ2lzdGVyX2NvbnNvbGUoJmVhcmx5X3NlcmlhbF9jb25zb2xlKTsKIAlyZXR1cm4gMDsKIH0KKworI2RlZmluZSBTQ0lfQ09OU09MRQkoJnNlcmlhbF9jb25zb2xlKQorCiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgX19kZXZpbml0IHNjaV9wcm9iZV9lYXJseXByaW50ayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXJldHVybiAtRUlOVkFMOwogfQotI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSkKLSNkZWZpbmUgU0NJX0NPTlNPTEUJKCZzZXJpYWxfY29uc29sZSkKLSNlbHNlCi0jZGVmaW5lIFNDSV9DT05TT0xFCTAKLSNlbmRpZgorI2RlZmluZSBTQ0lfQ09OU09MRQlOVUxMCisKKyNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFICovCiAKIHN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPQogCUtFUk5fSU5GTyAiU3VwZXJIIFNDSShGKSBkcml2ZXIgaW5pdGlhbGl6ZWRcbiI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NuX2NvbnNvbGUuYwppbmRleCBjZmY5YTMwLi4zNzdhZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc25fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogfTsKIAogLyogdGhlIGNvbnNvbGUgZG9lcyBvdXRwdXQgaW4gdHdvIGRpc3RpbmN0bHkgZGlmZmVyZW50IHdheXM6Ci0gKiBzeW5jaHJvbm91cyAocmF3KSBhbmQgYXN5bmNocm9ub3VzIChidWZmZXJlZCkuICBpbml0YWxseSwgZWFybHlfcHJpbnRrCisgKiBzeW5jaHJvbm91cyAocmF3KSBhbmQgYXN5bmNocm9ub3VzIChidWZmZXJlZCkuICBpbml0aWFsbHksIGVhcmx5X3ByaW50awogICogZG9lcyBzeW5jaHJvbm91cyBvdXRwdXQuICBhbnkgZGF0YSB3cml0dGVuIGdvZXMgZGlyZWN0bHkgdG8gdGhlIFNBTAogICogdG8gYmUgb3V0cHV0IChpbmNpZGVudGFsbHksIGl0IGlzIGludGVybmFsbHkgYnVmZmVyZWQgYnkgdGhlIFNBTCkKICAqIGFmdGVyIGludGVycnVwdHMgYW5kIHRpbWVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlLApAQCAtNDgxLDcgKzQ4MSw3IEBACiAJd2hpbGUgKHBvcnQtPnNjX29wcy0+c2FsX2lucHV0X3BlbmRpbmcoKSkgewogCQljaCA9IHBvcnQtPnNjX29wcy0+c2FsX2dldGMoKTsKIAkJaWYgKGNoIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzbl9jb25zb2xlOiBBbiBlcnJvciBvY2N1cmVkIHdoaWxlICIKKwkJCXByaW50ayhLRVJOX0VSUiAic25fY29uc29sZTogQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgIgogCQkJICAgICAgICJvYnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBjb25zb2xlICgweCUweClcbiIsIGNoKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5jCmluZGV4IDk5ZmY5YWIuLjhlOTE2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAkJICogYmUgbmljZSB0byB0cmFuc21pdCBjb25zb2xlIHdyaXRlcyBqdXN0IGxpa2Ugd2Ugbm9ybWFsbHkgd291bGQgZm9yCiAJCSAqIGEgVFRZIGxpbmUuIChpZS4gYnVmZmVyZWQgYW5kIFRYIGludGVycnVwdCBkcml2ZW4pLiAgVGhhdCBpcyBub3QKIAkJICogZWFzeSBiZWNhdXNlIGNvbnNvbGUgd3JpdGVzIGNhbm5vdCBzbGVlcC4gIE9uZSBzb2x1dGlvbiBtaWdodCBiZQotCQkgKiB0byBwb2xsIG9uIGVub3VnaCBwb3J0LT54bWl0IHNwYWNlIGJlY29tbWluZyBmcmVlLiAgLURhdmVNCisJCSAqIHRvIHBvbGwgb24gZW5vdWdoIHBvcnQtPnhtaXQgc3BhY2UgYmVjb21pbmcgZnJlZS4gIC1EYXZlTQogCQkgKi8KIAkJaWYgKCEoc3RhdHVzICYgVHhfQlVGX0VNUCkpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zeW5jbGluay5jIGIvZHJpdmVycy90dHkvc3luY2xpbmsuYwppbmRleCAxODg4OGQwLi4yN2RhMjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zeW5jbGluay5jCisrKyBiL2RyaXZlcnMvdHR5L3N5bmNsaW5rLmMKQEAgLTQwNzIsNyArNDA3Miw3IEBACiAJCiAJaWYgKCByZXF1ZXN0X2lycShpbmZvLT5pcnFfbGV2ZWwsbWdzbF9pbnRlcnJ1cHQsaW5mby0+aXJxX2ZsYWdzLAogCQlpbmZvLT5kZXZpY2VfbmFtZSwgaW5mbyApIDwgMCApIHsKLQkJcHJpbnRrKCAiJXMoJWQpOkNhbnQgcmVxdWVzdCBpbnRlcnJ1cHQgb24gZGV2aWNlICVzIElSUT0lZFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOkNhbid0IHJlcXVlc3QgaW50ZXJydXB0IG9uIGRldmljZSAlcyBJUlE9JWRcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+aXJxX2xldmVsICk7CiAJCWdvdG8gZXJyb3V0OwogCX0KQEAgLTQwOTUsNyArNDA5NSw3IEBACiAJCWluZm8tPm1lbW9yeV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPnBoeXNfbWVtb3J5X2Jhc2UsCiAJCQkJCQkJCTB4NDAwMDApOwogCQlpZiAoIWluZm8tPm1lbW9yeV9iYXNlKSB7Ci0JCQlwcmludGsoICIlcyglZCk6Q2FudCBtYXAgc2hhcmVkIG1lbW9yeSBvbiBkZXZpY2UgJXMgTWVtQWRkcj0lMDhYXG4iLAorCQkJcHJpbnRrKCAiJXMoJWQpOkNhbid0IG1hcCBzaGFyZWQgbWVtb3J5IG9uIGRldmljZSAlcyBNZW1BZGRyPSUwOFhcbiIsCiAJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfbWVtb3J5X2Jhc2UgKTsKIAkJCWdvdG8gZXJyb3V0OwogCQl9CkBAIC00MTA5LDcgKzQxMDksNyBAQAogCQlpbmZvLT5sY3JfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX2xjcl9iYXNlLAogCQkJCQkJCQlQQUdFX1NJWkUpOwogCQlpZiAoIWluZm8tPmxjcl9iYXNlKSB7Ci0JCQlwcmludGsoICIlcyglZCk6Q2FudCBtYXAgTENSIG1lbW9yeSBvbiBkZXZpY2UgJXMgTWVtQWRkcj0lMDhYXG4iLAorCQkJcHJpbnRrKCAiJXMoJWQpOkNhbid0IG1hcCBMQ1IgbWVtb3J5IG9uIGRldmljZSAlcyBNZW1BZGRyPSUwOFhcbiIsCiAJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfbGNyX2Jhc2UgKTsKIAkJCWdvdG8gZXJyb3V0OwogCQl9CkBAIC00MTE5LDcgKzQxMTksNyBAQAogCQkvKiBjbGFpbSBETUEgY2hhbm5lbCAqLwogCQkKIAkJaWYgKHJlcXVlc3RfZG1hKGluZm8tPmRtYV9sZXZlbCxpbmZvLT5kZXZpY2VfbmFtZSkgPCAwKXsKLQkJCXByaW50ayggIiVzKCVkKTpDYW50IHJlcXVlc3QgRE1BIGNoYW5uZWwgb24gZGV2aWNlICVzIERNQT0lZFxuIiwKKwkJCXByaW50ayggIiVzKCVkKTpDYW4ndCByZXF1ZXN0IERNQSBjaGFubmVsIG9uIGRldmljZSAlcyBETUE9JWRcbiIsCiAJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPmRtYV9sZXZlbCApOwogCQkJbWdzbF9yZWxlYXNlX3Jlc291cmNlcyggaW5mbyApOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC00MTMyLDcgKzQxMzIsNyBAQAogCX0KIAkKIAlpZiAoIG1nc2xfYWxsb2NhdGVfZG1hX2J1ZmZlcnMoaW5mbykgPCAwICkgewotCQlwcmludGsoICIlcyglZCk6Q2FudCBhbGxvY2F0ZSBETUEgYnVmZmVycyBvbiBkZXZpY2UgJXMgRE1BPSVkXG4iLAorCQlwcmludGsoICIlcyglZCk6Q2FuJ3QgYWxsb2NhdGUgRE1BIGJ1ZmZlcnMgb24gZGV2aWNlICVzIERNQT0lZFxuIiwKIAkJCV9fRklMRV9fLF9fTElORV9fLGluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5kbWFfbGV2ZWwgKTsKIAkJZ290byBlcnJvdXQ7CiAJfQkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL3R0eS9zeW5jbGlua19ndC5jCmluZGV4IGEzNWRkNTQuLjE4YjQ4Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy90dHkvc3luY2xpbmtfZ3QuYwpAQCAtMzQ5MSw3ICszNDkxLDcgQEAKIAogCWluZm8tPnJlZ19hZGRyID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPnBoeXNfcmVnX2FkZHIsIFNMR1RfUkVHX1NJWkUpOwogCWlmICghaW5mby0+cmVnX2FkZHIpIHsKLQkJREJHRVJSKCgiJXMgY2FudCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWRkcj0lMDhYXG4iLAorCQlEQkdFUlIoKCIlcyBjYW4ndCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWRkcj0lMDhYXG4iLAogCQkJaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfcmVnX2FkZHIpKTsKIAkJaW5mby0+aW5pdF9lcnJvciA9IERpYWdTdGF0dXNfQ2FudEFzc2lnblBjaVJlc291cmNlczsKIAkJZ290byBlcnJvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zeW5jbGlua21wLmMgYi9kcml2ZXJzL3R0eS9zeW5jbGlua21wLmMKaW5kZXggMzI3MzQzNi4uYzc3ODMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc3luY2xpbmttcC5jCisrKyBiL2RyaXZlcnMvdHR5L3N5bmNsaW5rbXAuYwpAQCAtMzU5NSw3ICszNTk1LDcgQEAKIAlpbmZvLT5tZW1vcnlfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX21lbW9yeV9iYXNlLAogCQkJCQkJCQlTQ0FfTUVNX1NJWkUpOwogCWlmICghaW5mby0+bWVtb3J5X2Jhc2UpIHsKLQkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbnQgbWFwIHNoYXJlZCBtZW1vcnksIE1lbUFkZHI9JTA4WFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbid0IG1hcCBzaGFyZWQgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cGh5c19tZW1vcnlfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM2MDMsNyArMzYwMyw3IEBACiAKIAlpbmZvLT5sY3JfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX2xjcl9iYXNlLCBQQUdFX1NJWkUpOwogCWlmICghaW5mby0+bGNyX2Jhc2UpIHsKLQkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbnQgbWFwIExDUiBtZW1vcnksIE1lbUFkZHI9JTA4WFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbid0IG1hcCBMQ1IgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cGh5c19sY3JfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM2MTIsNyArMzYxMiw3IEBACiAKIAlpbmZvLT5zY2FfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX3NjYV9iYXNlLCBQQUdFX1NJWkUpOwogCWlmICghaW5mby0+c2NhX2Jhc2UpIHsKLQkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbnQgbWFwIFNDQSBtZW1vcnksIE1lbUFkZHI9JTA4WFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbid0IG1hcCBTQ0EgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cGh5c19zY2FfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM2MjIsNyArMzYyMiw3IEBACiAJaW5mby0+c3RhdGN0cmxfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX3N0YXRjdHJsX2Jhc2UsCiAJCQkJCQkJCVBBR0VfU0laRSk7CiAJaWYgKCFpbmZvLT5zdGF0Y3RybF9iYXNlKSB7Ci0JCXByaW50ayggIiVzKCVkKTolcyBDYW50IG1hcCBTQ0EgU3RhdHVzL0NvbnRyb2wgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCisJCXByaW50ayggIiVzKCVkKTolcyBDYW4ndCBtYXAgU0NBIFN0YXR1cy9Db250cm9sIG1lbW9yeSwgTWVtQWRkcj0lMDhYXG4iLAogCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfc3RhdGN0cmxfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM4NjksNyArMzg2OSw3IEBACiAJCQkJCXBvcnRfYXJyYXlbMF0tPmlycV9mbGFncywKIAkJCQkJcG9ydF9hcnJheVswXS0+ZGV2aWNlX25hbWUsCiAJCQkJCXBvcnRfYXJyYXlbMF0pIDwgMCApIHsKLQkJCXByaW50ayggIiVzKCVkKTolcyBDYW50IHJlcXVlc3QgaW50ZXJydXB0LCBJUlE9JWRcbiIsCisJCQlwcmludGsoICIlcyglZCk6JXMgQ2FuJ3QgcmVxdWVzdCBpbnRlcnJ1cHQsIElSUT0lZFxuIiwKIAkJCQlfX0ZJTEVfXyxfX0xJTkVfXywKIAkJCQlwb3J0X2FycmF5WzBdLT5kZXZpY2VfbmFtZSwKIAkJCQlwb3J0X2FycmF5WzBdLT5pcnFfbGV2ZWwgKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYwppbmRleCBiOTQ1MTIxLi5mMWE3OTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCkBAIC00NDIsMTAgKzQ0Miw4IEBACiAJCQkgICBsaW5lIGRpc2NpcGxpbmUgYXMgd2Ugd2FudCB0byBlbXB0eSB0aGUgcXVldWUgKi8KIAkJCWlmICh0ZXN0X2JpdChUVFlfRkxVU0hQRU5ESU5HLCAmdHR5LT5mbGFncykpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoIXR0eS0+cmVjZWl2ZV9yb29tIHx8IHNlZW5fdGFpbCkgewotCQkJCXNjaGVkdWxlX3dvcmsoJnR0eS0+YnVmLndvcmspOworCQkJaWYgKCF0dHktPnJlY2VpdmVfcm9vbSB8fCBzZWVuX3RhaWwpCiAJCQkJYnJlYWs7Ci0JCQl9CiAJCQlpZiAoY291bnQgPiB0dHktPnJlY2VpdmVfcm9vbSkKIAkJCQljb3VudCA9IHR0eS0+cmVjZWl2ZV9yb29tOwogCQkJY2hhcl9idWYgPSBoZWFkLT5jaGFyX2J1Zl9wdHIgKyBoZWFkLT5yZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCA5MzZhNGVhLi5kN2Q1MGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uYworKysgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwpAQCAtMjEzNCw3ICsyMTM0LDcgQEAKICAqCWFjdHVhbGx5IGhhcyBkcml2ZXIgbGV2ZWwgbWVhbmluZyBhbmQgdHJpZ2dlcnMgYSBWQyByZXNpemUuCiAgKgogICoJTG9ja2luZzoKLSAqCQlEcml2ZXIgZGVwZW5kYW50LiBUaGUgZGVmYXVsdCBkb19yZXNpemUgbWV0aG9kIHRha2VzIHRoZQorICoJCURyaXZlciBkZXBlbmRlbnQuIFRoZSBkZWZhdWx0IGRvX3Jlc2l6ZSBtZXRob2QgdGFrZXMgdGhlCiAgKgl0dHkgdGVybWlvcyBtdXRleCBhbmQgY3RybF9sb2NrLiBUaGUgY29uc29sZSB0YWtlcyBpdHMgb3duIGxvY2sKICAqCXRoZW4gY2FsbHMgaW50byB0aGUgZGVmYXVsdCBtZXRob2QuCiAgKi8KQEAgLTIxNTUsNyArMjE1NSw3IEBACiAgKgl0aW9jY29ucwktCWFsbG93IGFkbWluIHRvIG1vdmUgbG9naWNhbCBjb25zb2xlCiAgKglAZmlsZTogdGhlIGZpbGUgdG8gYmVjb21lIGNvbnNvbGUKICAqCi0gKglBbGxvdyB0aGUgYWRtaW5zdHJhdG9yIHRvIG1vdmUgdGhlIHJlZGlyZWN0ZWQgY29uc29sZSBkZXZpY2UKKyAqCUFsbG93IHRoZSBhZG1pbmlzdHJhdG9yIHRvIG1vdmUgdGhlIHJlZGlyZWN0ZWQgY29uc29sZSBkZXZpY2UKICAqCiAgKglMb2NraW5nOiB1c2VzIHJlZGlyZWN0X2xvY2sgdG8gZ3VhcmQgdGhlIHJlZGlyZWN0IGluZm9ybWF0aW9uCiAgKi8KQEAgLTIyOTAsNyArMjI5MCw3IEBACiAvKioKICAqCXRpb2NncGdycAkJLQlnZXQgcHJvY2VzcyBncm91cAogICoJQHR0eTogdHR5IHBhc3NlZCBieSB1c2VyCi0gKglAcmVhbF90dHk6IHR0eSBzaWRlIG9mIHRoZSB0dHkgcGFzZWQgYnkgdGhlIHVzZXIgaWYgYSBwdHkgZWxzZSB0aGUgdHR5CisgKglAcmVhbF90dHk6IHR0eSBzaWRlIG9mIHRoZSB0dHkgcGFzc2VkIGJ5IHRoZSB1c2VyIGlmIGEgcHR5IGVsc2UgdGhlIHR0eQogICoJQHA6IHJldHVybmVkIHBpZAogICoKICAqCU9idGFpbiB0aGUgcHJvY2VzcyBncm91cCBvZiB0aGUgdHR5LiBJZiB0aGVyZSBpcyBubyBwcm9jZXNzIGdyb3VwCkBAIC0yMzY3LDcgKzIzNjcsNyBAQAogLyoqCiAgKgl0aW9jZ3NpZAkJLQlnZXQgc2Vzc2lvbiBpZAogICoJQHR0eTogdHR5IHBhc3NlZCBieSB1c2VyCi0gKglAcmVhbF90dHk6IHR0eSBzaWRlIG9mIHRoZSB0dHkgcGFzZWQgYnkgdGhlIHVzZXIgaWYgYSBwdHkgZWxzZSB0aGUgdHR5CisgKglAcmVhbF90dHk6IHR0eSBzaWRlIG9mIHRoZSB0dHkgcGFzc2VkIGJ5IHRoZSB1c2VyIGlmIGEgcHR5IGVsc2UgdGhlIHR0eQogICoJQHA6IHBvaW50ZXIgdG8gcmV0dXJuZWQgc2Vzc2lvbiBpZAogICoKICAqCU9idGFpbiB0aGUgc2Vzc2lvbiBpZCBvZiB0aGUgdHR5LiBJZiB0aGVyZSBpcyBubyBzZXNzaW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW9jdGwuYyBiL2RyaXZlcnMvdHR5L3R0eV9pb2N0bC5jCmluZGV4IDFhMTEzNWQuLjIxNTc0Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvdHR5L3R0eV9pb2N0bC5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAljYmF1ZCA9IHRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRDsKIAogI2lmZGVmIEJPVEhFUgotCS8qIE1hZ2ljIHRva2VuIGZvciBhcmJpdGFyeSBzcGVlZCB2aWEgY19pc3BlZWQvY19vc3BlZWQgKi8KKwkvKiBNYWdpYyB0b2tlbiBmb3IgYXJiaXRyYXJ5IHNwZWVkIHZpYSBjX2lzcGVlZC9jX29zcGVlZCAqLwogCWlmIChjYmF1ZCA9PSBCT1RIRVIpCiAJCXJldHVybiB0ZXJtaW9zLT5jX29zcGVlZDsKICNlbmRpZgpAQCAtMjgzLDcgKzI4Myw3IEBACiAJaWYgKGNiYXVkID09IEIwKQogCQlyZXR1cm4gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHRlcm1pb3MpOwogCi0JLyogTWFnaWMgdG9rZW4gZm9yIGFyYml0YXJ5IHNwZWVkIHZpYSBjX2lzcGVlZCovCisJLyogTWFnaWMgdG9rZW4gZm9yIGFyYml0cmFyeSBzcGVlZCB2aWEgY19pc3BlZWQqLwogCWlmIChjYmF1ZCA9PSBCT1RIRVIpCiAJCXJldHVybiB0ZXJtaW9zLT5jX2lzcGVlZDsKIApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAgKglAbmV3OiBOZXcgdGVybWlvcwogICoJQG9sZDogT2xkIHRlcm1pb3MKICAqCi0gKglQcm9wb2dhdGUgdGhlIGhhcmR3YXJlIHNwZWNpZmljIHRlcm1pbmFsIHNldHRpbmcgYml0cyBmcm9tCisgKglQcm9wYWdhdGUgdGhlIGhhcmR3YXJlIHNwZWNpZmljIHRlcm1pbmFsIHNldHRpbmcgYml0cyBmcm9tCiAgKgl0aGUgb2xkIHRlcm1pb3Mgc3RydWN0dXJlIHRvIHRoZSBuZXcgb25lLiBUaGlzIGlzIHVzZWQgaW4gY2FzZXMKICAqCXdoZXJlIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHJlY29uZmlndXJhdGlvbiBvciBhcyBhIGhlbHBlcgogICoJaW4gc29tZSBjYXNlcyB3aGVyZSBvbmx5IG1pbmltYWwgcmVjb25maWd1cmF0aW9uIGlzIHN1cHBvcnRlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdnQuYyBiL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKaW5kZXggYzgzY2RmYi4uNGJlYTFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdnQuYworKysgYi9kcml2ZXJzL3R0eS92dC92dC5jCkBAIC0zOTYzLDcgKzM5NjMsNyBAQAogICogIG9mIDMyIHBpeGVscy4gVXNlcnNwYWNlIGZvbnRkYXRhIGlzIHN0b3JlZCB3aXRoIDMyIGJ5dGVzIChzaG9ydHMvaW50cywgCiAgKiAgZGVwZW5kaW5nIG9uIHdpZHRoKSByZXNlcnZlZCBmb3IgZWFjaCBjaGFyYWN0ZXIgd2hpY2ggaXMga2luZGEgd2FzdHksIGJ1dCAKICAqICB0aGlzIGlzIGRvbmUgaW4gb3JkZXIgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBFR0EvVkdBIGZvbnRzLiBJdCAKLSAqICBpcyB1cHRvIHRoZSBhY3R1YWwgbG93LWxldmVsIGNvbnNvbGUtZHJpdmVyIGNvbnZlcnQgZGF0YSBpbnRvIGl0cyBmYXZvcml0ZQorICogIGlzIHVwIHRvIHRoZSBhY3R1YWwgbG93LWxldmVsIGNvbnNvbGUtZHJpdmVyIGNvbnZlcnQgZGF0YSBpbnRvIGl0cyBmYXZvcml0ZQogICogIGZvcm1hdCAobWF5YmUgd2Ugc2hvdWxkIGFkZCBhIGBmb250b2Zmc2V0JyBmaWVsZCB0byB0aGUgYGRpc3BsYXknCiAgKiAgc3RydWN0dXJlIHNvIHdlIHdvbid0IGhhdmUgdG8gY29udmVydCB0aGUgZm9udGRhdGEgYWxsIHRoZSB0aW1lLgogICogIC9KZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wcnVzcy5jIGIvZHJpdmVycy91aW8vdWlvX3BydXNzLmMKaW5kZXggZGFmNmU3Ny4uZTY3YjU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3BydXNzLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3BydXNzLmMKQEAgLTM5LDcgKzM5LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZXh0cmFtX3Bvb2xfc3osICJleHRlcm5hbCByYW0gcG9vbCBzaXplIHRvIGFsbG9jYXRlIik7CiAKIC8qCi0gKiBIb3N0IGV2ZW50IElSUSBudW1iZXJzIGZyb20gUFJVU1MgLSBQUlVTUyBjYW4gZ2VuZXJhdGUgdXB0byA4IGludGVycnVwdAorICogSG9zdCBldmVudCBJUlEgbnVtYmVycyBmcm9tIFBSVVNTIC0gUFJVU1MgY2FuIGdlbmVyYXRlIHVwIHRvIDggaW50ZXJydXB0CiAgKiBldmVudHMgdG8gQUlOVEMgb2YgQVJNIGhvc3QgcHJvY2Vzc29yIC0gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIElQQyBiL3cgUFJVU1MKICAqIGZpcm13YXJlIGFuZCB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLCBhc3luYyBub3RpZmljYXRpb24gZnJvbSBQUlUgZmlybXdhcmUKICAqIHRvIHVzZXIgc3BhY2UgYXBwbGljYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDQxYjZlNTEuLjAwNjQ4OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtNjYsNiArNjYsNyBAQAogCWRlZmF1bHQgeSBpZiBBUkNIX1ZUODUwMAogCWRlZmF1bHQgeSBpZiBQTEFUX1NQRUFSCiAJZGVmYXVsdCB5IGlmIEFSQ0hfTVNNCisJZGVmYXVsdCB5IGlmIE1JQ1JPQkxBWkUKIAlkZWZhdWx0IFBDSQogCiAjIEFSTSBTQTExMTEgY2hpcHMgaGF2ZSBhIG5vbi1QQ0kgYmFzZWQgIk9IQ0ktY29tcGF0aWJsZSIgVVNCIGhvc3QgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKaW5kZXggYjI2OGU5Zi4uZTcxNTIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCkBAIC0xMjgzLDcgKzEyODMsNyBAQAogCiAJLyogaW4gYnVsayBtb2RlIHRoZSBtb2RlbSBoYXZlIHByb2JsZW0gd2l0aCBoaWdoIHJhdGUKIAkgKiBjaGFuZ2luZyBpbnRlcm5hbCB0aW1pbmcgY291bGQgaW1wcm92ZSB0aGluZ3MsIGJ1dCB0aGUKLQkgKiB2YWx1ZSBpcyBtaXN0ZXJpb3VzLgorCSAqIHZhbHVlIGlzIG15c3RlcmlvdXMuCiAJICogQURJOTMwIGRvbid0IHN1cHBvcnQgaXQgKC1FUElQRSBlcnJvcikuCiAJICovCiAKQEAgLTE3NDMsNyArMTc0Myw3IEBACiAJCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgewotCQkvKiBUaGlzIHJlYWx5IHNob3VsZCBub3QgaGFwcGVuICovCisJCS8qIFRoaXMgcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuICovCiAJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJiYWQgY212cyB2ZXJzaW9uICVkXG4iLCB2ZXIpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNzk4LDcgKzE3OTgsNyBAQAogCQkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKLQkJLyogVGhpcyByZWFseSBzaG91bGQgbm90IGhhcHBlbiAqLworCQkvKiBUaGlzIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbiAqLwogCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiYmFkIGNtdnMgdmVyc2lvbiAlZFxuIiwgdmVyKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTgyOSw3ICsxODI5LDcgQEAKIAogCS8qIG1hc2sgaW50ZXJydXB0ICovCiAJc2MtPmJvb3RpbmcgPSAxOwotCS8qIFdlIG5lZWQgdG8gc2V0IHRoaXMgaGVyZSBiZWNhdXNlLCBhIGFjayB0aW1lb3V0IGNvdWxkIGhhdmUgb2NjdXJlZCwKKwkvKiBXZSBuZWVkIHRvIHNldCB0aGlzIGhlcmUgYmVjYXVzZSwgYSBhY2sgdGltZW91dCBjb3VsZCBoYXZlIG9jY3VycmVkLAogCSAqIGJ1dCBiZWZvcmUgd2Ugc3RhcnQgdGhlIHJlYm9vdCwgdGhlIGFjayBvY2N1cnMgYW5kIHNldCB0aGlzIHRvIDEuCiAJICogU28gd2Ugd2lsbCBmYWlsZWQgdG8gd2FpdCBSZWFkeSBDTVYuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWRydi5jIGIvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1kcnYuYwppbmRleCBiNmQ0OTIzLi42MjA1MGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWRydi5jCisrKyBiL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtZHJ2LmMKQEAgLTI3LDcgKzI3LDcgQEAKICAqIHRoZSBsaW5rIGJldHdlZW4gdGhlIGNvbW1vbiBoYXJkd2FyZSBwYXJ0cyBhbmQgdGhlIHN1YmRyaXZlcnMgKGUuZy4KICAqIGludGVycnVwdCBoYW5kbGluZykuCiAgKgotICogVGhlIGM2N3gwMCBoYXMgMiBTSUUncyAoc2VyaWFsIGludGVyZmFjZSBlbmdpbmUpIHdpY2ggY2FuIGJlIGNvbmZpZ3VyZWQKKyAqIFRoZSBjNjd4MDAgaGFzIDIgU0lFJ3MgKHNlcmlhbCBpbnRlcmZhY2UgZW5naW5lKSB3aGljaCBjYW4gYmUgY29uZmlndXJlZAogICogdG8gYmUgaG9zdCwgZGV2aWNlIG9yIE9URyAod2l0aCBzb21lIGxpbWl0YXRpb25zLCBFLkcuIG9ubHkgU0lFMSBjYW4gYmUgT1RHKS4KICAqCiAgKiBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24sIHRoZSBTSUUncyBhcmUgY3JlYXRlZCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtaGNkLmggYi9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWhjZC5oCmluZGV4IDc0ZTQ0NjIuLmUzZDQ5M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtaGNkLmgKKysrIGIvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1oY2QuaApAQCAtMzQsNyArMzQsNyBAQAogLyoKICAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBkZXBlbmQgb24gdGhlIENQVSBzcGVlZCwgYnVzIHNwZWVkLCAuLi4KICAqIFRoZXNlIGNhbiBiZSB0dW5lZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLCBlLmcuIGlmIGlzb2Nocm9ub3VzIHRyYW5zZmVycwotICogYXJlIHZlcnkgaW1wb3J0YW50LCBiYW5kd2l0aCBjYW4gYmUgc2FjcmlmaWNlZCB0byBndWFyYW50ZWUgdGhhdCB0aGUKKyAqIGFyZSB2ZXJ5IGltcG9ydGFudCwgYmFuZHdpZHRoIGNhbiBiZSBzYWNyaWZpY2VkIHRvIGd1YXJhbnRlZSB0aGF0IHRoZQogICogMW1zIGRlYWRsaW5lIHdpbGwgYmUgbWV0LgogICogSWYgYnVsayB0cmFuc2ZlcnMgYXJlIGltcG9ydGFudCwgdGhlIE1BWF9GUkFNRV9CVyBjYW4gYmUgaW5jcmVhc2VkLAogICogYnV0IHNvbWUgKG9yIG1hbnkpIGlzb2Nocm9ub3VzIGRlYWRsaW5lcyBtaWdodCBub3QgYmUgbWV0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1zY2hlZC5jIGIvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1zY2hlZC5jCmluZGV4IGY2YjNjMjUuLmEwM2ZiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLXNjaGVkLmMKQEAgLTkwNyw3ICs5MDcsNyBAQAogCiAvKiBSZW1vdmUgYWxsIHRkJ3MgZnJvbSB0aGUgbGlzdCB3aGljaCBjb21lCiAgKiBhZnRlciBsYXN0X3RkIGFuZCBhcmUgbWVhbnQgZm9yIHRoZSBzYW1lIHBpcGUuCi0gKiBUaGlzIGlzIHVzZWQgd2hlbiBhIHNob3J0IHBhY2tldCBoYXMgb2NjdXJlZCAqLworICogVGhpcyBpcyB1c2VkIHdoZW4gYSBzaG9ydCBwYWNrZXQgaGFzIG9jY3VycmVkICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYzY3eDAwX2NsZWFyX3BpcGUoc3RydWN0IGM2N3gwMF9oY2QgKmM2N3gwMCwKIAkJCQkgICAgIHN0cnVjdCBjNjd4MDBfdGQgKmxhc3RfdGQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmggYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKaW5kZXggNWVlYjU3MC4uYjRlYTU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaApAQCAtNTIsNyArNTIsNyBAQAogICovCiAKIC8qCi0gKiBUaGUgb25seSByZWFzb24gdG8gaGF2ZSBzZXZlcmFsIGJ1ZmZlcnMgaXMgdG8gYWNjb21vZGF0ZSBhc3N1bXB0aW9ucworICogVGhlIG9ubHkgcmVhc29uIHRvIGhhdmUgc2V2ZXJhbCBidWZmZXJzIGlzIHRvIGFjY29tbW9kYXRlIGFzc3VtcHRpb25zCiAgKiBpbiBsaW5lIGRpc2NpcGxpbmVzLiBUaGV5IGFzayBmb3IgZW1wdHkgc3BhY2UgYW1vdW50LCByZWNlaXZlIG91ciBVUkIgc2l6ZSwKICAqIGFuZCBwcm9jZWVkIHRvIGlzc3VlIHNldmVyYWwgMS1jaGFyYWN0ZXIgd3JpdGVzLCBhc3N1bWluZyB0aGV5IHdpbGwgZml0LgogICogVGhlIHZlcnkgZmlyc3Qgd3JpdGUgdGFrZXMgYSBjb21wbGV0ZSBVUkIuIEZvcnR1bmF0ZWx5LCB0aGlzIG9ubHkgaGFwcGVucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCA2YTU0NjM0Li4zODVhY2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCX0KIAogCQlkb25lICs9IG5fY2hhcmFjdGVyczsKLQkJLyogVGVybWluYXRlIGlmIGVuZC1vZi1tZXNzYWdlIGJpdCByZWNpZXZlZCBmcm9tIGRldmljZSAqLworCQkvKiBUZXJtaW5hdGUgaWYgZW5kLW9mLW1lc3NhZ2UgYml0IHJlY2VpdmVkIGZyb20gZGV2aWNlICovCiAJCWlmICgoYnVmZmVyWzhdICYgIDB4MDEpICYmIChhY3R1YWwgPj0gbl9jaGFyYWN0ZXJzICsgMTIpKQogCQkJcmVtYWluaW5nID0gMDsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCBhM2QyZTIzLi45NmZkZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCWJyZWFrOwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgogCQl0eXBlID0gIkludC4iOwotCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCB8fCBzcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpCiAJCQlpbnRlcnZhbCA9IDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpOwogCQllbHNlCiAJCQlpbnRlcnZhbCA9IGRlc2MtPmJJbnRlcnZhbDsKQEAgLTIyOSw3ICsyMjksOCBAQAogCWRlZmF1bHQ6CS8qICJjYW4ndCBoYXBwZW4iICovCiAJCXJldHVybiBzdGFydDsKIAl9Ci0JaW50ZXJ2YWwgKj0gKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IDEyNSA6IDEwMDA7CisJaW50ZXJ2YWwgKj0gKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIIHx8CisJCSAgICAgc3BlZWQgPT0gVVNCX1NQRUVEX1NVUEVSKSA/IDEyNSA6IDEwMDA7CiAJaWYgKGludGVydmFsICUgMTAwMCkKIAkJdW5pdCA9ICd1JzsKIAllbHNlIHsKQEAgLTU0Miw4ICs1NDMsOSBAQAogCWlmIChsZXZlbCA9PSAwKSB7CiAJCWludAltYXg7CiAKLQkJLyogaGlnaCBzcGVlZCByZXNlcnZlcyA4MCUsIGZ1bGwvbG93IHJlc2VydmVzIDkwJSAqLwotCQlpZiAodXNiZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJLyogc3VwZXIvaGlnaCBzcGVlZCByZXNlcnZlcyA4MCUsIGZ1bGwvbG93IHJlc2VydmVzIDkwJSAqLworCQlpZiAodXNiZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCB8fAorCQkgICAgdXNiZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpCiAJCQltYXggPSA4MDA7CiAJCWVsc2UKIAkJCW1heCA9IEZSQU1FX1RJTUVfTUFYX1VTRUNTX0FMTE9DOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggMDJiNGRiZi4uNzdhN2ZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC03MDAsNyArNzAwLDcgQEAKIAkvKiBUaGUgVVNCIDIuMCBzcGVjIHNheXMgMjU2IG1zLiAgVGhpcyBpcyBjbG9zZSBlbm91Z2ggYW5kIHdvbid0CiAJICogZXhjZWVkIHRoYXQgbGltaXQgaWYgSFogaXMgMTAwLiBUaGUgbWF0aCBpcyBtb3JlIGNsdW5reSB0aGFuCiAJICogbWF5YmUgZXhwZWN0ZWQsIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHRpbWVycyBmb3IgVVNCIGRldmljZXMKLQkgKiBmaXJlIGF0IHRoZSBzYW1lIHRpbWUgdG8gZ2l2ZSB0aGUgQ1BVIGEgYnJlYWsgaW5iZXR3ZWVuICovCisJICogZmlyZSBhdCB0aGUgc2FtZSB0aW1lIHRvIGdpdmUgdGhlIENQVSBhIGJyZWFrIGluIGJldHdlZW4gKi8KIAlpZiAoaGNkLT51c2VzX25ld19wb2xsaW5nID8gSENEX1BPTExfUkgoaGNkKSA6CiAJCQkobGVuZ3RoID09IDAgJiYgaGNkLT5zdGF0dXNfdXJiICE9IE5VTEwpKQogCQltb2RfdGltZXIgKCZoY2QtPnJoX3RpbWVyLCAoamlmZmllcy8oSFovNCkgKyAxKSAqIChIWi80KSk7CkBAIC0xOTA4LDcgKzE5MDgsNyBAQAogCiAJLyogU3RyZWFtcyBvbmx5IGFwcGx5IHRvIGJ1bGsgZW5kcG9pbnRzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXBzOyBpKyspCi0JCWlmICghdXNiX2VuZHBvaW50X3hmZXJfYnVsaygmZXBzW2ldLT5kZXNjKSkKKwkJaWYgKCFlcHNbaV0gfHwgIXVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJmVwc1tpXS0+ZGVzYykpCiAJCQlyZXR1cm47CiAKIAloY2QtPmRyaXZlci0+ZnJlZV9zdHJlYW1zKGhjZCwgZGV2LCBlcHMsIG51bV9lcHMsIG1lbV9mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA1NjRlYWE1Li45MzcyMGJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCiAJLyogbWFyayB0aGUgZGV2aWNlIGFzIGluYWN0aXZlLCBzbyBhbnkgZnVydGhlciB1cmIgc3VibWlzc2lvbnMgZm9yCiAJICogdGhpcyBkZXZpY2UgKGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuKSB3aWxsIGZhaWwgaW1tZWRpYXRlbHkuCi0JICogdGhpcyBxdWllc2NlcyBldmVyeXRpbmcgZXhjZXB0IHBlbmRpbmcgdXJicy4KKwkgKiB0aGlzIHF1aWVzY2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHBlbmRpbmcgdXJicy4KIAkgKi8KIAl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwogCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJVU0IgZGlzY29ubmVjdCwgZGV2aWNlIG51bWJlciAlZFxuIiwKQEAgLTIyODUsNyArMjI4NSwxNyBAQAogCX0KIAogCS8qIHNlZSA3LjEuNy42ICovCi0Jc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCS8qIENsZWFyIFBPUlRfUE9XRVIgaWYgaXQncyBhIFVTQjMuMCBkZXZpY2UgY29ubmVjdGVkIHRvIFVTQiAzLjAKKwkgKiBleHRlcm5hbCBodWIuCisJICogRklYTUU6IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHRoZSBzeXN0ZW0gYWJsZQorCSAqIHRvIHN1c3BlbmQvcmVzdW1lLgorCSAqLworCWlmICgoaHViLT5oZGV2LT5wYXJlbnQgIT0gTlVMTCkgJiYgaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkKKwkJc3RhdHVzID0gY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCisJCQkJCQlVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwllbHNlCisJCXN0YXR1cyA9IHNldF9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKKwkJCQkJCVVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CiAJaWYgKHN0YXR1cykgewogCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwgImNhbid0IHN1c3BlbmQgcG9ydCAlZCwgc3RhdHVzICVkXG4iLAogCQkJCXBvcnQxLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMgYi9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYwppbmRleCAwYmMwNmUyLi5hNmEzNTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYworKysgYi9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJCWlmICghKHBvcnRzYyAmIFBPUlRfQ09OTkVDVCkpCiAJCQlyZXR1cm4gLUVOT1RDT05OOwogCi0JCS8qIGJvbWIgb3V0IGNvbXBsZXRlbHkgaWYgc29tZXRoaW5nIHdlaXJkIGhhcHBlbmQgKi8KKwkJLyogYm9tYiBvdXQgY29tcGxldGVseSBpZiBzb21ldGhpbmcgd2VpcmQgaGFwcGVuZWQgKi8KIAkJaWYgKChwb3J0c2MgJiBQT1JUX0NTQykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggZjhkZDcyNi4uNmU0MmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogQ2FsY3VsYXRlcyBmaWZvIHN0YXJ0IG9mIGVuZHBvaW50IGJhc2VkIG9uIHByZWNlZWRpbmcgZW5kcG9pbnRzICovCisvKiBDYWxjdWxhdGVzIGZpZm8gc3RhcnQgb2YgZW5kcG9pbnQgYmFzZWQgb24gcHJlY2VkaW5nIGVuZHBvaW50cyAqLwogc3RhdGljIGludCB1ZGNfc2V0X3R4Zmlmb19hZGRyKHN0cnVjdCB1ZGNfZXAgKmVwKQogewogCXN0cnVjdCB1ZGMJKmRldjsKQEAgLTIxMzcsNyArMjEzNyw3IEBACiAJaWYgKHVzZV9kbWEpIHsKIAkJLyogQk5BIGV2ZW50ID8gKi8KIAkJaWYgKHRtcCAmIEFNRF9CSVQoVURDX0VQU1RTX0JOQSkpIHsKLQkJCURCRyhkZXYsICJCTkEgZXAlZG91dCBvY2N1cmVkIC0gREVTUFRSID0gJXggXG4iLAorCQkJREJHKGRldiwgIkJOQSBlcCVkb3V0IG9jY3VycmVkIC0gREVTUFRSID0gJXggXG4iLAogCQkJCQllcC0+bnVtLCByZWFkbCgmZXAtPnJlZ3MtPmRlc3B0cikpOwogCQkJLyogY2xlYXIgQk5BICovCiAJCQl3cml0ZWwodG1wIHwgQU1EX0JJVChVRENfRVBTVFNfQk5BKSwgJmVwLT5yZWdzLT5zdHMpOwpAQCAtMjE1MSw3ICsyMTUxLDcgQEAKIAl9CiAJLyogSEUgZXZlbnQgPyAqLwogCWlmICh0bXAgJiBBTURfQklUKFVEQ19FUFNUU19IRSkpIHsKLQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJIRSBlcCVkb3V0IG9jY3VyZWRcbiIsIGVwLT5udW0pOworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkhFIGVwJWRvdXQgb2NjdXJyZWRcbiIsIGVwLT5udW0pOwogCiAJCS8qIGNsZWFyIEhFICovCiAJCXdyaXRlbCh0bXAgfCBBTURfQklUKFVEQ19FUFNUU19IRSksICZlcC0+cmVncy0+c3RzKTsKQEAgLTIzNTQsNyArMjM1NCw3IEBACiAJCS8qIEJOQSA/ICovCiAJCWlmIChlcHN0cyAmIEFNRF9CSVQoVURDX0VQU1RTX0JOQSkpIHsKIAkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAotCQkJCSJCTkEgZXAlZGluIG9jY3VyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCisJCQkJIkJOQSBlcCVkaW4gb2NjdXJyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCiAJCQkJZXAtPm51bSwKIAkJCQkodW5zaWduZWQgbG9uZykgcmVhZGwoJmVwLT5yZWdzLT5kZXNwdHIpKTsKIApAQCAtMjM2Nyw3ICsyMzY3LDcgQEAKIAkvKiBIRSBldmVudCA/ICovCiAJaWYgKGVwc3RzICYgQU1EX0JJVChVRENfRVBTVFNfSEUpKSB7CiAJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAotCQkJIkhFIGVwJWRuIG9jY3VyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCisJCQkiSEUgZXAlZG4gb2NjdXJyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCiAJCQllcC0+bnVtLCAodW5zaWduZWQgbG9uZykgcmVhZGwoJmVwLT5yZWdzLT5kZXNwdHIpKTsKIAogCQkvKiBjbGVhciBIRSAqLwpAQCAtMjM4NCw3ICsyMzg0LDcgQEAKIAkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCiAJCQkJCXN0cnVjdCB1ZGNfcmVxdWVzdCwgcXVldWUpOwogCQkJLyoKLQkJCSAqIGxlbmd0aCBieXRlcyB0cmFuc2ZlcmVkCisJCQkgKiBsZW5ndGggYnl0ZXMgdHJhbnNmZXJyZWQKIAkJCSAqIGNoZWNrIGRtYSBkb25lIG9mIGxhc3QgZGVzYy4gaW4gUFBCRFUgbW9kZQogCQkJICovCiAJCQlpZiAodXNlX2RtYV9wcGJfZHUpIHsKQEAgLTI3ODQsNyArMjc4NCw3IEBACiAJCQkJCS8qIHdyaXRlIGZpZm8gKi8KIAkJCQkJdWRjX3R4Zmlmb193cml0ZShlcCwgJnJlcS0+cmVxKTsKIAotCQkJCQkvKiBsZW5naCBieXRlcyB0cmFuc2ZlcmVkICovCisJCQkJCS8qIGxlbmdoIGJ5dGVzIHRyYW5zZmVycmVkICovCiAJCQkJCWxlbiA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKIAkJCQkJaWYgKGxlbiA+IGVwLT5lcC5tYXhwYWNrZXQpCiAJCQkJCQlsZW4gPSBlcC0+ZXAubWF4cGFja2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmgKaW5kZXggNGJiYWJiYi4uMWQxYzc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5oCkBAIC01ODQsNyArNTg0LDcgQEAKICAqIFNFVCBhbmQgR0VUIGJpdGZpZWxkcyBpbiB1MzIgdmFsdWVzCiAgKiB2aWEgY29uc3RhbnRzIGZvciBtYXNrL29mZnNldDoKICAqIDxiaXRfZmllbGRfc3R1Yl9uYW1lPiBpcyB0aGUgdGV4dCBiZXR3ZWVuCi0gKiBVRENfIGFuZCBfTUFTS3xfT0ZTIG9mIGFwcHJvcGlhdGUKKyAqIFVEQ18gYW5kIF9NQVNLfF9PRlMgb2YgYXBwcm9wcmlhdGUKICAqIGNvbnN0YW50CiAgKgogICogc2V0IGJpdGZpZWxkIHZhbHVlIGluIHUzMiB1MzJWYWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggYmI4ZGRmMC4uOWI3Y2RiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTgyNiw3ICs4MjYsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIHJlaW5pdCA9PSByZXN0b3JlIGluaXRhbCBzb2Z0d2FyZSBzdGF0ZSAqLworLyogcmVpbml0ID09IHJlc3RvcmUgaW5pdGlhbCBzb2Z0d2FyZSBzdGF0ZSAqLwogc3RhdGljIHZvaWQgdWRjX3JlaW5pdChzdHJ1Y3QgYXQ5MV91ZGMgKnVkYykKIHsKIAl1MzIgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCBjMjI1MWM0Li44MjMxNGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyICpjb21wb3NpdGU7CiBzdGF0aWMgaW50ICgqY29tcG9zaXRlX2dhZGdldF9iaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOwogCi0vKiBTb21lIHN5c3RlbXMgd2lsbCBuZWVkIHJ1bnRpbWUgb3ZlcnJpZGVzIGZvciB0aGUgIHByb2R1Y3QgaWRlbnRpZmVycworLyogU29tZSBzeXN0ZW1zIHdpbGwgbmVlZCBydW50aW1lIG92ZXJyaWRlcyBmb3IgdGhlICBwcm9kdWN0IGlkZW50aWZpZXJzCiAgKiBwdWJsaXNoZWQgaW4gdGhlIGRldmljZSBkZXNjcmlwdG9yLCBlaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIG9yIGJvdGguCiAgKiBTdHJpbmcgcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCiAgKi8KQEAgLTIwNSwxNCArMjA1LDE0IEBACiAgKiB1c2JfaW50ZXJmYWNlX2lkKCkgaXMgY2FsbGVkIGZyb20gdXNiX2Z1bmN0aW9uLmJpbmQoKSBjYWxsYmFja3MgdG8KICAqIGFsbG9jYXRlIG5ldyBpbnRlcmZhY2UgSURzLiAgVGhlIGZ1bmN0aW9uIGRyaXZlciB3aWxsIHRoZW4gc3RvcmUgdGhhdAogICogSUQgaW4gaW50ZXJmYWNlLCBhc3NvY2lhdGlvbiwgQ0RDIHVuaW9uLCBhbmQgb3RoZXIgZGVzY3JpcHRvcnMuICBJdAotICogd2lsbCBhbHNvIGhhbmRsZSBhbnkgY29udHJvbCByZXF1ZXN0cyB0YXJnZXR0ZWQgYXQgdGhhdCBpbnRlcmZhY2UsCisgKiB3aWxsIGFsc28gaGFuZGxlIGFueSBjb250cm9sIHJlcXVlc3RzIHRhcmdldGVkIGF0IHRoYXQgaW50ZXJmYWNlLAogICogcGFydGljdWxhcmx5IGNoYW5naW5nIGl0cyBhbHRzZXR0aW5nIHZpYSBzZXRfYWx0KCkuICBUaGVyZSBtYXkKICAqIGFsc28gYmUgY2xhc3Mtc3BlY2lmaWMgb3IgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3RzIHRvIGhhbmRsZS4KICAqCiAgKiBBbGwgaW50ZXJmYWNlIGlkZW50aWZpZXIgc2hvdWxkIGJlIGFsbG9jYXRlZCB1c2luZyB0aGlzIHJvdXRpbmUsIHRvCiAgKiBlbnN1cmUgdGhhdCBmb3IgZXhhbXBsZSBkaWZmZXJlbnQgZnVuY3Rpb25zIGRvbid0IHdyb25nbHkgYXNzaWduCiAgKiBkaWZmZXJlbnQgbWVhbmluZ3MgdG8gdGhlIHNhbWUgaWRlbnRpZmllci4gIE5vdGUgdGhhdCBzaW5jZSBpbnRlcmZhY2UKLSAqIGlkZW50aWZlcnMgYXJlIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMsIGZ1bmN0aW9ucyB1c2VkIGluIG1vcmUgdGhhbgorICogaWRlbnRpZmllcnMgYXJlIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMsIGZ1bmN0aW9ucyB1c2VkIGluIG1vcmUgdGhhbgogICogb25lIGNvbmZpZ3VyYXRpb24gKG9yIG1vcmUgdGhhbiBvbmNlIGluIGEgZ2l2ZW4gY29uZmlndXJhdGlvbikgbmVlZAogICogbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHJlbGV2YW50IGRlc2NyaXB0b3JzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCmluZGV4IDAwOTc1ZWQuLjAxMTFmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwpAQCAtNzA2LDYgKzcwNiw3IEBACiAJc3RydWN0IGZfYXVkaW8JCSphdWRpbyA9IGZ1bmNfdG9fYXVkaW8oZik7CiAKIAl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5kZXNjcmlwdG9ycyk7CisJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+aHNfZGVzY3JpcHRvcnMpOwogCWtmcmVlKGF1ZGlvKTsKIH0KIApAQCAtNzQyLDcgKzc0Myw3IEBACiB9CiAKIC8qKgotICogYXVkaW9fYmluZF9jb25maWcgLSBhZGQgVVNCIGF1ZGlvIGZ1Y250aW9uIHRvIGEgY29uZmlndXJhdGlvbgorICogYXVkaW9fYmluZF9jb25maWcgLSBhZGQgVVNCIGF1ZGlvIGZ1bmN0aW9uIHRvIGEgY29uZmlndXJhdGlvbgogICogQGM6IHRoZSBjb25maWd1cmF0aW9uIHRvIHN1cGNhcmQgdGhlIFVTQiBhdWRpbyBmdW5jdGlvbgogICogQ29udGV4dDogc2luZ2xlIHRocmVhZGVkIGR1cmluZyBnYWRnZXQgc2V0dXAKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCmluZGV4IDk1ZGQ0NjYuLmIzYzMwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCkBAIC0zMTQsNiArMzE0LDkgQEAKIAogc3RhdGljIHZvaWQgZWVtX2NtZF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCiB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXJlcS0+Y29udGV4dDsKKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKIC8qCkBAIC00MjgsMTAgKzQzMSwxMSBAQAogCQkJCXNrYl90cmltKHNrYjIsIGxlbik7CiAJCQkJcHV0X3VuYWxpZ25lZF9sZTE2KEJJVCgxNSkgfCBCSVQoMTEpIHwgbGVuLAogCQkJCQkJCXNrYl9wdXNoKHNrYjIsIDIpKTsKLQkJCQlza2JfY29weV9iaXRzKHNrYiwgMCwgcmVxLT5idWYsIHNrYi0+bGVuKTsKLQkJCQlyZXEtPmxlbmd0aCA9IHNrYi0+bGVuOworCQkJCXNrYl9jb3B5X2JpdHMoc2tiMiwgMCwgcmVxLT5idWYsIHNrYjItPmxlbik7CisJCQkJcmVxLT5sZW5ndGggPSBza2IyLT5sZW47CiAJCQkJcmVxLT5jb21wbGV0ZSA9IGVlbV9jbWRfY29tcGxldGU7CiAJCQkJcmVxLT56ZXJvID0gMTsKKwkJCQlyZXEtPmNvbnRleHQgPSBza2IyOwogCQkJCWlmICh1c2JfZXBfcXVldWUocG9ydC0+aW5fZXAsIHJlcSwgR0ZQX0FUT01JQykpCiAJCQkJCURCRyhjZGV2LCAiZWNobyByZXNwb25zZSBxdWV1ZSBmYWlsXG4iKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX25jbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbmNtLmMKaW5kZXggMTMwZWVlNi4uODY5MDJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbmNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbmNtLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogI2RlZmluZSBOVEJfT1VUX1NJWkUJCTE2Mzg0CiAKIC8qCi0gKiBza2JzIG9mIHNpemUgbGVzcyB0aGFuIHRoYXQgd2lsbCBub3QgYmUgYWxsaWduZWQKKyAqIHNrYnMgb2Ygc2l6ZSBsZXNzIHRoYW4gdGhhdCB3aWxsIG5vdCBiZSBhbGlnbmVkCiAgKiB0byBOQ00ncyBkd050YkluTWF4U2l6ZSB0byBzYXZlIGJ1cyBiYW5kd2lkdGgKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwppbmRleCBhZWU3ZTNjLi4zNjYxM2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKQEAgLTExNDgsNiArMTE0OCwxMiBAQAogc3RhdGljIGludCB0eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKIHsKIAlpZiAoZXAtPnR4X3JlcSAhPSBOVUxMKSB7CisJCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGVwLT50eF9yZXE7CisJCXVuc2lnbmVkIHpscCA9IDAsIGxhc3RfbGVuID0gMDsKKworCQlsYXN0X2xlbiA9IG1pbl90KHVuc2lnbmVkLCByZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCwKKwkJCQllcC0+ZXAubWF4cGFja2V0KTsKKwogCQlpZiAoIXJlc3RhcnQpIHsKIAkJCWludCBhc2VudCA9IGVwLT5sYXN0OwogCQkJZXAtPnNlbnQgKz0gYXNlbnQ7CkBAIC0xMTU2LDkgKzExNjIsMTggQEAKIAkJCWVwLT5sYXN0ID0gMDsKIAkJfQogCisJCS8qIHpscCBuZWVkZWQgd2hlbiByZXEtPnJlLnplcm8gaXMgc2V0ICovCisJCWlmIChyZXEtPnJlcS56ZXJvKSB7CisJCQlpZiAobGFzdF9sZW4gPT0gMCB8fAorCQkJCShyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCQkJCXpscCA9IDA7CisJCQllbHNlCisJCQkJemxwID0gMTsKKwkJfSBlbHNlCisJCQl6bHAgPSAwOworCiAJCS8qIGEgcmVxdWVzdCBhbHJlYWR5IHdlcmUgdHJhbnNtaXR0ZWQgY29tcGxldGVseSAqLwotCQlpZiAoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgewotCQkJZXAtPnR4X3JlcS0+cmVxLmFjdHVhbCA9ICh1bnNpZ25lZCBpbnQpZXAtPnNlbnQ7CisJCWlmICgoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgJiYgIXpscCkgewogCQkJZG9uZShlcCwgZXAtPnR4X3JlcSwgMCk7CiAJCQllcC0+dHhfcmVxID0gTlVMTDsKIAkJCWVwLT5sYXN0ID0gMDsKQEAgLTExOTEsNiArMTIwNiw3IEBACiAJYnVmID0gKHU4ICopZXAtPnR4X3JlcS0+cmVxLmJ1ZiArIGVwLT5zZW50OwogCWlmIChidWYgJiYgc2l6ZSkgewogCQllcC0+bGFzdCA9IHNpemU7CisJCWVwLT50eF9yZXEtPnJlcS5hY3R1YWwgKz0gc2l6ZTsKIAkJZnJhbWVfc2V0X2RhdGEoZnJhbWUsIGJ1Zik7CiAJCWZyYW1lX3NldF9sZW5ndGgoZnJhbWUsIHNpemUpOwogCQlmcmFtZV9zZXRfc3RhdHVzKGZyYW1lLCBGUkFNRV9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaAppbmRleCBiZWE1YjgyLi5lMzVlMjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKQEAgLTIwOCwxNCArMjA4LDE0IEBACiAvKiBGcmFtZSBzdGF0dXMgZmllbGQgKi8KIC8qIFJlY2VpdmUgc2lkZSAqLwogI2RlZmluZSBGUkFNRV9PSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogRnJhbWUgdHJhbm1pdHRlZCBvciByZWNlaXZlZCBPSyAqLwotI2RlZmluZSBGUkFNRV9FUlJPUiAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRXJyb3Igb2NjdXJlZCBvbiBmcmFtZSAqLworI2RlZmluZSBGUkFNRV9FUlJPUiAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRXJyb3Igb2NjdXJyZWQgb24gZnJhbWUgKi8KICNkZWZpbmUgU1RBUlRfRlJBTUVfTE9TVCAgICAgICAweDQwMDAwMDAwIC8qIFNUQVJUX0ZSQU1FX0xPU1QgKi8KICNkZWZpbmUgRU5EX0ZSQU1FX0xPU1QgICAgICAgICAweDIwMDAwMDAwIC8qIEVORF9GUkFNRV9MT1NUICovCiAjZGVmaW5lIFJYX0VSX05PTk9DVCAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KICNkZWZpbmUgUlhfRVJfQklUU1RVRkYgICAgICAgICAweDA4MDAwMDAwIC8qIEZyYW1lIEFib3J0ZWQgLS1SZWNlaXZlZCBwYWNrZXQKIAkJCQkJICAgICB3aXRoIGJpdCBzdHVmZiBlcnJvciAqLwogI2RlZmluZSBSWF9FUl9DUkMgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogUmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIGVycm9yICovCi0jZGVmaW5lIFJYX0VSX09WRVJVTiAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBPdmVyLXJ1biBvY2N1cmVkIG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSWF9FUl9PVkVSVU4gICAgICAgICAgIDB4MDIwMDAwMDAgLyogT3Zlci1ydW4gb2NjdXJyZWQgb24gcmVjZXB0aW9uICovCiAjZGVmaW5lIFJYX0VSX1BJRCAgICAgICAgICAgICAgMHgwMTAwMDAwMCAvKiBXcm9uZyBQSUQgcmVjZWl2ZWQgKi8KIC8qIFRyYW5taXQgc2lkZSAqLwogI2RlZmluZSBUWF9FUl9OQUsgICAgICAgICAgICAgIDB4MDA4MDAwMDAgLyogUmVjZWl2ZWQgTkFLIGhhbmRzaGFrZSAqLwpAQCAtMzc5LDcgKzM3OSw3IEBACiAjZGVmaW5lIFRfTFNQICAgICAgICAgMHgwMTAwMDAwMCAgICAgICAgIC8qIExvdy1zcGVlZCB0cmFuc2FjdGlvbiAqLwogI2RlZmluZSBUX1BJRCAgICAgICAgIDB4MDBjMDAwMDAgICAgICAgICAvKiBwYWNrZXQgaWQgKi8KICNkZWZpbmUgVF9OQUsgICAgICAgICAweDAwMTAwMDAwICAgICAgICAgLyogTm8gYWNrLiAqLwotI2RlZmluZSBUX1NUQUwgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBTdGFsbCByZWNpZXZlZCAqLworI2RlZmluZSBUX1NUQUwgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBTdGFsbCByZWNlaXZlZCAqLwogI2RlZmluZSBUX1RPICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiB0aW1lIG91dCAqLwogI2RlZmluZSBUX1VOICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAgICAvKiB1bmRlcnJ1biAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKaW5kZXggOTEyY2I4ZS4uMDc0OTljMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAKIAltYXggPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CiAKLQkvKiBEaXNhYmxlIGF1dG9tYXRpYyB6bHAgZ2VuZXJhdGlvbi4gIERyaXZlciBpcyByZXBvbnNpYmxlIHRvIGluZGljYXRlCisJLyogRGlzYWJsZSBhdXRvbWF0aWMgemxwIGdlbmVyYXRpb24uICBEcml2ZXIgaXMgcmVzcG9uc2libGUgdG8gaW5kaWNhdGUKIAkgKiBleHBsaWNpdGx5IHRocm91Z2ggcmVxLT5yZXEuemVyby4gIFRoaXMgaXMgbmVlZGVkIHRvIGVuYWJsZSBtdWx0aS10ZAogCSAqIHJlcXVlc3QuICovCiAJemx0ID0gMTsKQEAgLTY0OCw3ICs2NDgsNyBAQAogCQkJfCBFUF9RVUVVRV9IRUFEX1NUQVRVU19IQUxUKSk7CiAJZFFILT5zaXplX2lvY19pbnRfc3RzICY9IHRlbXA7CiAKLQkvKiBFbnN1cmUgdGhhdCB1cGRhdGVzIHRvIHRoZSBRSCB3aWxsIG9jY3VyZSBiZWZvcmUgcHJpbWluZy4gKi8KKwkvKiBFbnN1cmUgdGhhdCB1cGRhdGVzIHRvIHRoZSBRSCB3aWxsIG9jY3VyIGJlZm9yZSBwcmltaW5nLiAqLwogCXdtYigpOwogCiAJLyogUHJpbWUgZW5kcG9pbnQgYnkgd3JpdGluZyAxIHRvIEVORFBUUFJJTUUgKi8KQEAgLTE0NTksNyArMTQ1OSw3IEBACiAJCQkJc3RhdHVzID0gLUVJTFNFUTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZQotCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCAoMHgleCkhXG4iLAorCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQgKDB4JXgpIVxuIiwKIAkJCQkJZXJyb3JzKTsKIAogCQl9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KGN1cnJfdGQtPnNpemVfaW9jX3N0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaAppbmRleCAyMGFlY2VlLi5lODhjY2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCkBAIC0xNSw3ICsxNSw3IEBACiAJdTggcmVzMVsyNTZdOwogCXUxNiBjYXBsZW5ndGg7CQkvKiBDYXBhYmlsaXR5IFJlZ2lzdGVyIExlbmd0aCAqLwogCXUxNiBoY2l2ZXJzaW9uOwkJLyogSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCi0JdTMyIGhjc3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBTdHJ1Y3R1YWwgUGFyYW1ldGVycyAqLworCXUzMiBoY3NwYXJhbXM7CQkvKiBIb3N0IENvbnRyb2xsZXIgU3RydWN0dXJhbCBQYXJhbWV0ZXJzICovCiAJdTMyIGhjY3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBDYXBhYmlsaXR5IFBhcmFtZXRlcnMgKi8KIAl1OCByZXMyWzIwXTsKIAl1MzIgZGNpdmVyc2lvbjsJCS8qIERldmljZSBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCkBAIC01Miw3ICs1Miw3IEBACiAJdTggcmVzMVsyNTZdOwogCXUxNiBjYXBsZW5ndGg7CQkvKiBDYXBhYmlsaXR5IFJlZ2lzdGVyIExlbmd0aCAqLwogCXUxNiBoY2l2ZXJzaW9uOwkJLyogSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCi0JdTMyIGhjc3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBTdHJ1Y3R1YWwgUGFyYW1ldGVycyAqLworCXUzMiBoY3NwYXJhbXM7CQkvKiBIb3N0IENvbnRyb2xsZXIgU3RydWN0dXJhbCBQYXJhbWV0ZXJzICovCiAJdTMyIGhjY3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBDYXBhYmlsaXR5IFBhcmFtZXRlcnMgKi8KIAl1OCByZXMyWzIwXTsKIAl1MzIgZGNpdmVyc2lvbjsJCS8qIERldmljZSBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IDBhYjdlMTQuLjQ3Yjg2YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC02Nyw3ICs2Nyw3IEBACiBtb2R1bGVfcGFyYW0oaWQsIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIHRoZSBVU0IgTUlESSBHYWRnZXQgYWRhcHRlci4iKTsKIAotLyogU29tZSBzeXN0ZW1zIHdpbGwgd2FudCBkaWZmZXJlbnQgcHJvZHVjdCBpZGVudGlmZXJzIHB1Ymxpc2hlZCBpbiB0aGUKKy8qIFNvbWUgc3lzdGVtcyB3aWxsIHdhbnQgZGlmZmVyZW50IHByb2R1Y3QgaWRlbnRpZmllcnMgcHVibGlzaGVkIGluIHRoZQogICogZGV2aWNlIGRlc2NyaXB0b3IsIGVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3Mgb3IgYm90aC4gIFRoZXNlIHN0cmluZwogICogcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggM2VkNzNmNC4uYTAxMzgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTM4Niw4ICszODYsMTAgQEAKIAogCS8qIGhhbHQgYW55IGVuZHBvaW50IGJ5IGRvaW5nIGEgIndyb25nIGRpcmVjdGlvbiIgaS9vIGNhbGwgKi8KIAlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbigmZGF0YS0+ZGVzYykpIHsKLQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmRhdGEtPmRlc2MpKQorCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZGF0YS0+ZGVzYykpIHsKKwkJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlEQkcgKGRhdGEtPmRldiwgIiVzIGhhbHRcbiIsIGRhdGEtPm5hbWUpOwogCQlzcGluX2xvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKIAkJaWYgKGxpa2VseSAoZGF0YS0+ZXAgIT0gTlVMTCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMKaW5kZXggMWVjYThiNC4uOWNlZTg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xhbmd3ZWxsX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sYW5nd2VsbF91ZGMuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJZHFoLT5kdGRfc3RhdHVzICY9IGR0ZF9zdGF0dXM7CiAJZGV2X3ZkYmcoJmRldi0+cGRldi0+ZGV2LCAiZHFoLT5kdGRfc3RhdHVzID0gMHgleFxuIiwgZHFoLT5kdGRfc3RhdHVzKTsKIAotCS8qIGVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIGRRSCB3aWxsIG9jY3VyZSBiZWZvcmUgcHJpbWluZyAqLworCS8qIGVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIGRRSCB3aWxsIG9jY3VyIGJlZm9yZSBwcmltaW5nICovCiAJd21iKCk7CiAKIAkvKiB3cml0ZSAxIHRvIGVuZHB0cHJpbWUgcmVnaXN0ZXIgdG8gUFJJTUUgZW5kcG9pbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKaW5kZXggZDU0NjhhNy4uYjYyYjI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCiAJCQkvKgogCQkJICogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgUUggd2lsbAotCQkJICogb2NjdXJlIGJlZm9yZSBwcmltaW5nLgorCQkJICogb2NjdXIgYmVmb3JlIHByaW1pbmcuCiAJCQkgKi8KIAkJCXdtYigpOwogCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJCSYgRVBfUVVFVUVfSEVBRF9ORVhUX1BPSU5URVJfTUFTSzs7CiAJCWRxaC0+c2l6ZV9pb2NfaW50X3N0cyA9IDA7CiAKLQkJLyogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgUUggd2lsbCBvY2N1cmUgYmVmb3JlIHByaW1pbmcuICovCisJCS8qIEVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIFFIIHdpbGwgb2NjdXIgYmVmb3JlIHByaW1pbmcuICovCiAJCXdtYigpOwogCiAJCS8qIFByaW1lIHRoZSBFbmRwb2ludCAqLwpAQCAtMTg0NSw3ICsxODQ1LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCS8qIENsZWFyIGFsbCB0aGUgaW50ZXJydXB0cyBvY2N1cmVkICovCisJLyogQ2xlYXIgYWxsIHRoZSBpbnRlcnJ1cHRzIG9jY3VycmVkICovCiAJd3JpdGVsKHN0YXR1cywgJnVkYy0+b3BfcmVncy0+dXNic3RzKTsKIAogCWlmIChzdGF0dXMgJiBVU0JTVFNfRVJSKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggZDA5MTU1Yi4uMjQ2OTZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogLyogZW5hYmxlX3N1c3BlbmQgLS0gV2hlbiBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgcmVzcG9uZCB0bwogICogVVNCIHN1c3BlbmQgcmVxdWVzdHMgYnkgcG93ZXJpbmcgZG93biB0aGUgTkVUMjI4MC4gIE90aGVyd2lzZSwKLSAqIFVTQiBzdXNwZW5kIHJlcXVlc3RzIHdpbGwgYmUgaWdub3JlZC4gIFRoaXMgaXMgYWNjZXB0aWJsZSBmb3IKKyAqIFVTQiBzdXNwZW5kIHJlcXVlc3RzIHdpbGwgYmUgaWdub3JlZC4gIFRoaXMgaXMgYWNjZXB0YWJsZSBmb3IKICAqIHNlbGYtcG93ZXJlZCBkZXZpY2VzCiAgKi8KIHN0YXRpYyBpbnQgZW5hYmxlX3N1c3BlbmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25va2lhLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbm9raWEuYwppbmRleCBiNTM2NGY5ZC4uNTVjYTYzYWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbm9raWEuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbm9raWEuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCWdvdG8gZXJyX3VzYjsKIAl9CiAKLQkvKiBmaW5hbHkgcmVnaXN0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkvKiBmaW5hbGx5IHJlZ2lzdGVyIHRoZSBjb25maWd1cmF0aW9uICovCiAJc3RhdHVzID0gdXNiX2FkZF9jb25maWcoY2RldiwgJm5va2lhX2NvbmZpZ181MDBtYV9kcml2ZXIsCiAJCQlub2tpYV9iaW5kX2NvbmZpZyk7CiAJaWYgKHN0YXR1cyA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYwppbmRleCAzZTRiMzVlLi42OGRiY2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKQEAgLTE2MDgsNyArMTYwOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghZGV2LT5kcml2ZXIgfHwgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkKIAkJcmV0dXJuIC1FU0hVVERPV047Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5kZXYtPmxvY2ssIGlmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgaWZsYWdzKTsKIAkvKiBtYXAgdGhlIGJ1ZmZlciBmb3IgZG1hICovCiAJaWYgKHVzYnJlcS0+bGVuZ3RoICYmCiAJICAgICgodXNicmVxLT5kbWEgPT0gRE1BX0FERFJfSU5WQUxJRCkgfHwgIXVzYnJlcS0+ZG1hKSkgewpAQCAtMTYyNSw4ICsxNjI1LDEwIEBACiAJCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQl9IGVsc2UgewogCQkJcmVxLT5idWYgPSBremFsbG9jKHVzYnJlcS0+bGVuZ3RoLCBHRlBfQVRPTUlDKTsKLQkJCWlmICghcmVxLT5idWYpCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQlpZiAoIXJlcS0+YnVmKSB7CisJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQlnb3RvIHByb2JlX2VuZDsKKwkJCX0KIAkJCWlmIChlcC0+aW4pIHsKIAkJCQltZW1jcHkocmVxLT5idWYsIHVzYnJlcS0+YnVmLCB1c2JyZXEtPmxlbmd0aCk7CiAJCQkJcmVxLT5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCAxMmZmNmNmLi5jM2YyYmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogI2RlZmluZSBQUklOVEVSX1ZFTkRPUl9OVU0JMHgwNTI1CQkvKiBOZXRDaGlwICovCiAjZGVmaW5lIFBSSU5URVJfUFJPRFVDVF9OVU0JMHhhNGE4CQkvKiBMaW51eC1VU0IgUHJpbnRlciBHYWRnZXQgKi8KIAotLyogU29tZSBzeXN0ZW1zIHdpbGwgd2FudCBkaWZmZXJlbnQgcHJvZHVjdCBpZGVudGlmZXJzIHB1Ymxpc2hlZCBpbiB0aGUKKy8qIFNvbWUgc3lzdGVtcyB3aWxsIHdhbnQgZGlmZmVyZW50IHByb2R1Y3QgaWRlbnRpZmllcnMgcHVibGlzaGVkIGluIHRoZQogICogZGV2aWNlIGRlc2NyaXB0b3IsIGVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3Mgb3IgYm90aC4gIFRoZXNlIHN0cmluZwogICogcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCmluZGV4IDJlZmQ2NzMuLjc4YTM5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAvKioKICAqIGluY19lcF9zdGF0c19ieXRlcyAtIFVwZGF0ZSBlcCBzdGF0cyBjb3VudHMKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKLSAqIEBjb3VudDogYnl0ZXMgdHJhbnNmZXJlZCBvbiBlbmRwb2ludAorICogQGNvdW50OiBieXRlcyB0cmFuc2ZlcnJlZCBvbiBlbmRwb2ludAogICogQGlzX2luOiBlcCBkaXJlY3Rpb24gKFVTQl9ESVJfSU4gb3IgMCkKICAqLwogc3RhdGljIHZvaWQgaW5jX2VwX3N0YXRzX2J5dGVzKHN0cnVjdCBweGFfZXAgKmVwLCBpbnQgY291bnQsIGludCBpc19pbikKQEAgLTg3Nyw3ICs4NzcsNyBAQAogICogSWYgdGhlcmUgaXMgbGVzcyBzcGFjZSBpbiByZXF1ZXN0IHRoYW4gYnl0ZXMgcmVjZWl2ZWQgaW4gT1VUIGVuZHBvaW50LAogICogYnl0ZXMgYXJlIGxlZnQgaW4gdGhlIE9VVCBlbmRwb2ludC4KICAqCi0gKiBSZXR1cm5zIGhvdyBtYW55IGJ5dGVzIHdlcmUgYWN0dWFsbHkgdHJhbnNmZXJlZAorICogUmV0dXJucyBob3cgbWFueSBieXRlcyB3ZXJlIGFjdHVhbGx5IHRyYW5zZmVycmVkCiAgKi8KIHN0YXRpYyBpbnQgcmVhZF9wYWNrZXQoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewpAQCAtOTE0LDcgKzkxNCw3IEBACiAgKiBlbmRwb2ludC4gSWYgdGhlcmUgYXJlIG5vIGJ5dGVzIHRvIHRyYW5zZmVyLCBkb2Vzbid0IHdyaXRlIGFueXRoaW5nCiAgKiB0byBwaHlzaWNhbCBlbmRwb2ludC4KICAqCi0gKiBSZXR1cm5zIGhvdyBtYW55IGJ5dGVzIHdlcmUgYWN0dWFsbHkgdHJhbnNmZXJlZC4KKyAqIFJldHVybnMgaG93IG1hbnkgYnl0ZXMgd2VyZSBhY3R1YWxseSB0cmFuc2ZlcnJlZC4KICAqLwogc3RhdGljIGludCB3cml0ZV9wYWNrZXQoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxLAogCQkJdW5zaWduZWQgaW50IG1heCkKQEAgLTk5MSw3ICs5OTEsNyBAQAogICogY2FsbGVyIGd1YXJhbnRlZXMgYXQgbGVhc3Qgb25lIHBhY2tldCBidWZmZXIgaXMgcmVhZHkgKG9yIGEgemxwKS4KICAqIERvZXNuJ3QgY29tcGxldGUgdGhlIHJlcXVlc3QsIHRoYXQncyB0aGUgY2FsbGVyJ3Mgam9iCiAgKgotICogUmV0dXJucyAxIGlmIHJlcXVlc3QgZnVsbHkgdHJhbnNmZXJlZCwgMCBpZiBwYXJ0aWFsIHRyYW5zZmVyCisgKiBSZXR1cm5zIDEgaWYgcmVxdWVzdCBmdWxseSB0cmFuc2ZlcnJlZCwgMCBpZiBwYXJ0aWFsIHRyYW5zZmVyCiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfZmlmbyhzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCiB7CkBAIC0xMDk0LDcgKzEwOTQsNyBAQAogICogU2VuZHMgYSByZXF1ZXN0IChvciBhIHBhcnQgb2YgdGhlIHJlcXVlc3QpIHRvIHRoZSBjb250cm9sIGVuZHBvaW50IChlcDAgaW4pLgogICogSWYgdGhlIHJlcXVlc3QgZG9lc24ndCBmaXQsIHRoZSByZW1haW5pbmcgcGFydCB3aWxsIGJlIHNlbnQgZnJvbSBpcnEuCiAgKiBUaGUgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZ1bGx5IHdyaXR0ZW4gb25seSBpZiBlaXRoZXIgOgotICogICAtIGxhc3Qgd3JpdGUgdHJhbnNmZXJlZCBhbGwgcmVtYWluaW5nIGJ5dGVzLCBidXQgZmlmbyB3YXMgbm90IGZ1bGx5IGZpbGxlZAorICogICAtIGxhc3Qgd3JpdGUgdHJhbnNmZXJyZWQgYWxsIHJlbWFpbmluZyBieXRlcywgYnV0IGZpZm8gd2FzIG5vdCBmdWxseSBmaWxsZWQKICAqICAgLSBsYXN0IHdyaXRlIHdhcyBhIDAgbGVuZ3RoIHdyaXRlCiAgKgogICogUmV0dXJucyAxIGlmIHJlcXVlc3QgZnVsbHkgd3JpdHRlbiwgMCBpZiByZXF1ZXN0IG9ubHkgcGFydGlhbGx5IHNlbnQKQEAgLTE1NDgsNyArMTU0OCw3IEBACiAgKiBweGFfdWRjX3dha2V1cCAtIEZvcmNlIHVkYyBkZXZpY2Ugb3V0IG9mIHN1c3BlbmQKICAqIEBfZ2FkZ2V0OiB1c2IgZ2FkZ2V0CiAgKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWxsLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KIHN0YXRpYyBpbnQgcHhhX3VkY193YWtldXAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKaW5kZXggMDE1MTE4NS4uNmRjYzFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYwpAQCAtMTA4Myw3ICsxMDgzLDkgQEAKIAogCWlmIChkdnNxID09IERTX0RGTFQpIHsKIAkJLyogYnVzIHJlc2V0ICovCisJCXNwaW5fdW5sb2NrKCZyOGE2NjU5Ny0+bG9jayk7CiAJCXI4YTY2NTk3LT5kcml2ZXItPmRpc2Nvbm5lY3QoJnI4YTY2NTk3LT5nYWRnZXQpOworCQlzcGluX2xvY2soJnI4YTY2NTk3LT5sb2NrKTsKIAkJcjhhNjY1OTdfdXBkYXRlX3VzYl9zcGVlZChyOGE2NjU5Nyk7CiAJfQogCWlmIChyOGE2NjU5Ny0+b2xkX2R2c3EgPT0gRFNfQ05GRyAmJiBkdnNxICE9IERTX0NORkcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKaW5kZXggZWY4MjVjMy4uMDkxMjY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwpAQCAtNDEsOCArNDEsOCBAQAogLyogRVAwX01QU19MSU1JVAogICoKICAqIFVuZm9ydHVuYXRlbHkgdGhlcmUgc2VlbXMgdG8gYmUgYSBsaW1pdCBvZiB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBjYW4KLSAqIGJlIHRyYW5zZmVyZWQgYnkgSU4gdHJhbnNhY3Rpb25zIG9uIEVQMC4gVGhpcyBpcyBlaXRoZXIgMTI3IGJ5dGVzIG9yIDMKLSAqIHBhY2tldHMgKHdoaWNoIHByYWN0aWFsbHkgbWVhbnMgMSBwYWNrZXQgYW5kIDYzIGJ5dGVzIG9mIGRhdGEpIHdoZW4gdGhlCisgKiBiZSB0cmFuc2ZlcnJlZCBieSBJTiB0cmFuc2FjdGlvbnMgb24gRVAwLiBUaGlzIGlzIGVpdGhlciAxMjcgYnl0ZXMgb3IgMworICogcGFja2V0cyAod2hpY2ggcHJhY3RpY2FsbHkgbWVhbnMgMSBwYWNrZXQgYW5kIDYzIGJ5dGVzIG9mIGRhdGEpIHdoZW4gdGhlCiAgKiBNUFMgaXMgc2V0IHRvIDY0LgogICoKICAqIFRoaXMgbWVhbnMgaWYgd2UgYXJlIHdhbnRpbmcgdG8gbW92ZSA+MTI3IGJ5dGVzIG9mIGRhdGEsIHdlIG5lZWQgdG8KQEAgLTc4Myw3ICs3ODMsNyBAQAogCQkgICAgICAgaHNvdGctPnJlZ3MgKyBTM0NfRElFUElOVChpbmRleCkpOwogCiAJLyogTm90ZSwgdHJ5aW5nIHRvIGNsZWFyIHRoZSBOQUsgaGVyZSBjYXVzZXMgcHJvYmxlbXMgd2l0aCB0cmFuc21pdAotCSAqIG9uIHRoZSBTM0M2NDAwIGVuZGluZyB1cCB3aXRoIHRoZSBUWEZJRk8gYmVjb21taW5nIGZ1bGwuICovCisJICogb24gdGhlIFMzQzY0MDAgZW5kaW5nIHVwIHdpdGggdGhlIFRYRklGTyBiZWNvbWluZyBmdWxsLiAqLwogCiAJLyogY2hlY2sgZXAgaXMgZW5hYmxlZCAqLwogCWlmICghKHJlYWRsKGhzb3RnLT5yZWdzICsgZXBjdHJsX3JlZykgJiBTM0NfRHhFUENUTF9FUEVuYSkpCkBAIC0xMTc2LDEwICsxMTc2LDEwIEBACiAJCXdyaXRlbChjdHJsLCBoc290Zy0+cmVncyArIHJlZyk7CiAKIAkJZGV2X2RiZyhoc290Zy0+ZGV2LAotCQkJIndyaXRlbiBEeEVQQ1RMPTB4JTA4eCB0byAlMDh4IChEeEVQQ1RMPTB4JTA4eClcbiIsCisJCQkid3JpdHRlbiBEeEVQQ1RMPTB4JTA4eCB0byAlMDh4IChEeEVQQ1RMPTB4JTA4eClcbiIsCiAJCQljdHJsLCByZWcsIHJlYWRsKGhzb3RnLT5yZWdzICsgcmVnKSk7CiAKLQkJLyogZG9uJ3QgYmVsaXZlIHdlIG5lZWQgdG8gYW55dGhpbmcgbW9yZSB0byBnZXQgdGhlIEVQCisJCS8qIGRvbid0IGJlbGlldmUgd2UgbmVlZCB0byBhbnl0aGluZyBtb3JlIHRvIGdldCB0aGUgRVAKIAkJICogdG8gcmVwbHkgd2l0aCBhIFNUQUxMIHBhY2tldCAqLwogCX0KIH0KQEAgLTE0MTYsNyArMTQxNiw3IEBACiAgKiB0cmFuc2FjdGlvbi4KICAqCiAgKiBOb3RlLCBzaW5jZSB3ZSBkb24ndCB3cml0ZSBhbnkgZGF0YSB0byB0aGUgVHhGSUZPLCB0aGVuIGl0IGlzCi0gKiBjdXJyZW50bHkgYmVsaXZlZCB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHdhaXQgZm9yIGFueSBzcGFjZSBpbgorICogY3VycmVudGx5IGJlbGlldmVkIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gd2FpdCBmb3IgYW55IHNwYWNlIGluCiAgKiB0aGUgVHhGSUZPLgogICovCiBzdGF0aWMgdm9pZCBzM2NfaHNvdGdfc2VuZF96bHAoc3RydWN0IHMzY19oc290ZyAqaHNvdGcsCkBAIC0xNTQwLDcgKzE1NDAsNyBAQAogICogdGhhdCByZXF1aXJlcyBwcm9jZXNzaW5nLCBzbyBmaW5kIG91dCB3aGF0IGlzIGluIHRoZXJlIGFuZCBkbyB0aGUKICAqIGFwcHJvcHJpYXRlIHJlYWQuCiAgKgotICogVGhlIFJYRklGTyBpcyBhIHRydWUgRklGTywgdGhlIHBhY2tldHMgY29tbWluZyBvdXQgYXJlIHN0aWxsIGluIHBhY2tldAorICogVGhlIFJYRklGTyBpcyBhIHRydWUgRklGTywgdGhlIHBhY2tldHMgY29taW5nIG91dCBhcmUgc3RpbGwgaW4gcGFja2V0CiAgKiBjaHVua3MsIHNvIGlmIHlvdSBoYXZlIHggcGFja2V0cyByZWNlaXZlZCBvbiBhbiBlbmRwb2ludCB5b3UnbGwgZ2V0IHgKICAqIEZJRk8gZXZlbnRzIGRlbGl2ZXJlZCwgZWFjaCB3aXRoIGEgcGFja2V0J3Mgd29ydGggb2YgZGF0YSBpbiBpdC4KICAqCkBAIC0yMTg4LDcgKzIxODgsNyBAQAogCiAJLyogdGhlc2UgbmV4dCB0d28gc2VlbSB0byBjcm9wLXVwIG9jY2FzaW9uYWxseSBjYXVzaW5nIHRoZSBjb3JlCiAJICogdG8gc2h1dGRvd24gdGhlIFVTQiB0cmFuc2Zlciwgc28gdHJ5IGNsZWFyaW5nIHRoZW0gYW5kIGxvZ2dpbmcKLQkgKiB0aGUgb2NjdXJlbmNlLiAqLworCSAqIHRoZSBvY2N1cnJlbmNlLiAqLwogCiAJaWYgKGdpbnRzdHMgJiBTM0NfR0lOVFNUU19HT1VUTmFrRWZmKSB7CiAJCWRldl9pbmZvKGhzb3RnLT5kZXYsICJHT1VUTmFrRWZmIHRyaWdnZXJlZFxuIik7CkBAIC0yNDY5LDcgKzI0NjksNyBAQAogCS5xdWV1ZQkJPSBzM2NfaHNvdGdfZXBfcXVldWUsCiAJLmRlcXVldWUJPSBzM2NfaHNvdGdfZXBfZGVxdWV1ZSwKIAkuc2V0X2hhbHQJPSBzM2NfaHNvdGdfZXBfc2V0aGFsdCwKLQkvKiBub3RlLCBkb24ndCBiZWxpdmUgd2UgaGF2ZSBhbnkgY2FsbCBmb3IgdGhlIGZpZm8gcm91dGluZXMgKi8KKwkvKiBub3RlLCBkb24ndCBiZWxpZXZlIHdlIGhhdmUgYW55IGNhbGwgZm9yIHRoZSBmaWZvIHJvdXRpbmVzICovCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCA5NDgzYWNkLi5lMGUwNzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC00MDIsNyArNDAyLDcgQEAKIAlkZXBlbmRzIG9uIFVTQl9GSENJX0hDRCAmJiBERUJVR19GUwogCWhlbHAKIAkgIFNheSAieSIgdG8gc2VlIHNvbWUgRkhDSSBkZWJ1ZyBpbmZvcm1hdGlvbiBhbmQgc3RhdGlzdGljcwotCSAgdGhyb3VnaHQgZGVidWdmcy4KKwkgIHRocm91Z2ggZGVidWdmcy4KIAogY29uZmlnIFVTQl9VMTMyX0hDRAogCXRyaXN0YXRlICJFbGFuIFUxMzIgQWRhcHRlciBIb3N0IENvbnRyb2xsZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwppbmRleCA3ZTQxYTk1Li42MjdmM2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAvKiBFSENJIFJlZ2lzdGVyIFNldCAqLwogI2RlZmluZSBFSENJX0lOU05SRUcwNAkJCQkJKDB4QTApCkBAIC0xMTgsNiArMTE5LDggQEAKIAlzdHJ1Y3QgZWhjaV9oY2QJCQkJKm9tYXBfZWhjaTsKIAlpbnQJCQkJCXJldCA9IC1FTk9ERVY7CiAJaW50CQkJCQlpcnE7CisJaW50CQkJCQlpOworCWNoYXIJCQkJCXN1cHBseVs3XTsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNTgsNiArMTYxLDIzIEBACiAJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVzKTsKIAloY2QtPnJlZ3MgPSByZWdzOwogCisJLyogZ2V0IGVoY2kgcmVndWxhdG9yIGFuZCBlbmFibGUgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IE9NQVAzX0hTX1VTQl9QT1JUUyA7IGkrKykgeworCQlpZiAocGRhdGEtPnBvcnRfbW9kZVtpXSAhPSBPTUFQX0VIQ0lfUE9SVF9NT0RFX1BIWSkgeworCQkJcGRhdGEtPnJlZ3VsYXRvcltpXSA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCQlzbnByaW50ZihzdXBwbHksIHNpemVvZihzdXBwbHkpLCAiaHN1c2IlZCIsIGkpOworCQlwZGF0YS0+cmVndWxhdG9yW2ldID0gcmVndWxhdG9yX2dldChkZXYsIHN1cHBseSk7CisJCWlmIChJU19FUlIocGRhdGEtPnJlZ3VsYXRvcltpXSkpIHsKKwkJCXBkYXRhLT5yZWd1bGF0b3JbaV0gPSBOVUxMOworCQkJZGV2X2RiZyhkZXYsCisJCQkiZmFpbGVkIHRvIGdldCBlaGNpIHBvcnQlZCByZWd1bGF0b3JcbiIsIGkpOworCQl9IGVsc2UgeworCQkJcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+cmVndWxhdG9yW2ldKTsKKwkJfQorCX0KKwogCXJldCA9IG9tYXBfdXNiaHNfZW5hYmxlKGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzdGFydCB1c2JocyB3aXRoIGVyciAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCmluZGV4IDk4ZGVkNjYuLjQyYWJkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwpAQCAtMTI0NywyNCArMTI0NywyNyBAQAogCiBzdGF0aWMgdm9pZCBzY2FuX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCiB7CisJYm9vbAkJCXN0b3BwZWQ7CiAJc3RydWN0IGVoY2lfcWgJCSpxaDsKIAllbnVtIGVoY2lfdGltZXJfYWN0aW9uCWFjdGlvbiA9IFRJTUVSX0lPX1dBVENIRE9HOwogCiAJZWhjaS0+c3RhbXAgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCk7CiAJdGltZXJfYWN0aW9uX2RvbmUgKGVoY2ksIFRJTUVSX0FTWU5DX1NIUklOSyk7CiByZXNjYW46CisJc3RvcHBlZCA9ICFIQ19JU19SVU5OSU5HKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSk7CiAJcWggPSBlaGNpLT5hc3luYy0+cWhfbmV4dC5xaDsKIAlpZiAobGlrZWx5IChxaCAhPSBOVUxMKSkgewogCQlkbyB7CiAJCQkvKiBjbGVhbiBhbnkgZmluaXNoZWQgd29yayBmb3IgdGhpcyBxaCAqLwotCQkJaWYgKCFsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KQotCQkJCQkmJiBxaC0+c3RhbXAgIT0gZWhjaS0+c3RhbXApIHsKKwkJCWlmICghbGlzdF9lbXB0eSgmcWgtPnF0ZF9saXN0KSAmJiAoc3RvcHBlZCB8fAorCQkJCQlxaC0+c3RhbXAgIT0gZWhjaS0+c3RhbXApKSB7CiAJCQkJaW50IHRlbXA7CiAKIAkJCQkvKiB1bmxpbmtzIGNvdWxkIGhhcHBlbiBoZXJlOyBjb21wbGV0aW9uCiAJCQkJICogcmVwb3J0aW5nIGRyb3BzIHRoZSBsb2NrLiAgcmVzY2FuIHVzaW5nCiAJCQkJICogdGhlIGxhdGVzdCBzY2hlZHVsZSwgYnV0IGRvbid0IHJlc2NhbgotCQkJCSAqIHFocyB3ZSBhbHJlYWR5IGZpbmlzaGVkIChubyBsb29waW5nKS4KKwkJCQkgKiBxaHMgd2UgYWxyZWFkeSBmaW5pc2hlZCAobm8gbG9vcGluZykKKwkJCQkgKiB1bmxlc3MgdGhlIGNvbnRyb2xsZXIgaXMgc3RvcHBlZC4KIAkJCQkgKi8KIAkJCQlxaCA9IHFoX2dldCAocWgpOwogCQkJCXFoLT5zdGFtcCA9IGVoY2ktPnN0YW1wOwpAQCAtMTI4NSw5ICsxMjg4LDkgQEAKIAkJCSAqLwogCQkJaWYgKGxpc3RfZW1wdHkoJnFoLT5xdGRfbGlzdCkKIAkJCQkJJiYgcWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0xJTktFRCkgewotCQkJCWlmICghZWhjaS0+cmVjbGFpbQotCQkJCQkmJiAoKGVoY2ktPnN0YW1wIC0gcWgtPnN0YW1wKSAmIDB4MWZmZikKLQkJCQkJCT49IChFSENJX1NIUklOS19GUkFNRVMgKiA4KSkKKwkJCQlpZiAoIWVoY2ktPnJlY2xhaW0gJiYgKHN0b3BwZWQgfHwKKwkJCQkJKChlaGNpLT5zdGFtcCAtIHFoLT5zdGFtcCkgJiAweDFmZmYpCisJCQkJCQk+PSBFSENJX1NIUklOS19GUkFNRVMgKiA4KSkKIAkJCQkJc3RhcnRfdW5saW5rX2FzeW5jKGVoY2ksIHFoKTsKIAkJCQllbHNlCiAJCQkJCWFjdGlvbiA9IFRJTUVSX0FTWU5DX1NIUklOSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKaW5kZXggZjg2ZDNmYS4uMzMzZGRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTY0NCw3ICs2NDQsNyBAQAogLyoKICAqIE9uIGNlcnRhaW4gcHBjLTQ0eCBTb0MgdGhlcmUgaXMgYSBIVyBpc3N1ZSwgdGhhdCBjb3VsZCBvbmx5IHdvcmtlZCBhcm91bmQgd2l0aAogICogZXhwbGljaXQgc3VzcGVuZC9vcGVyYXRlIG9mIE9IQ0kuIFRoaXMgZnVuY3Rpb24gaGVyZWJ5IG1ha2VzIHNlbnNlIG9ubHkgb24gdGhhdCBhcmNoLgotICogT3RoZXIgY29tbW9uIGJpdHMgYXJlIGRlcGVuZGFudCBvbiBoYXNfYW1jY191c2IyMyBxdWlyayBmbGFnLgorICogT3RoZXIgY29tbW9uIGJpdHMgYXJlIGRlcGVuZGVudCBvbiBoYXNfYW1jY191c2IyMyBxdWlyayBmbGFnLgogICovCiAjaWZkZWYgQ09ORklHXzQ0eAogc3RhdGljIGlubGluZSB2b2lkIHNldF9vaGNpX2hjZnMoc3RydWN0IGVoY2lfaGNkICplaGNpLCBpbnQgb3BlcmF0aW9uYWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKaW5kZXggYjg0ZmY3ZS4uMTkyMjNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJCS8qIDEgdGQgZnJvIHNldHVwLDEgZm9yIGFjayAqLwogCQlzaXplID0gMjsKIAljYXNlIFBJUEVfQlVMSzoKLQkJLyogb25lIHRkIGZvciBldmVyeSA0MDk2IGJ5dGVzKGNhbiBiZSB1cHRvIDhrKSAqLworCQkvKiBvbmUgdGQgZm9yIGV2ZXJ5IDQwOTYgYnl0ZXMoY2FuIGJlIHVwIHRvIDhrKSAqLwogCQlzaXplICs9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAvIDQwOTY7CiAJCS8qIC4uLmFkZCBmb3IgYW55IHJlbWFpbmluZyBieXRlcy4uLiAqLwogCQlpZiAoKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIDQwOTYpICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKaW5kZXggMzhmZTA1OC4uMGVhNTc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBURF9SWEVSCQkweDAwMjAgLyogUnggZXJyb3Igb3Igbm90ICovCiAKICNkZWZpbmUgVERfTkFLCQkweDAwMTAgLyogTm8gYWNrLiAqLwotI2RlZmluZSBURF9TVEFMCQkweDAwMDggLyogU3RhbGwgcmVjaWV2ZWQgKi8KKyNkZWZpbmUgVERfU1RBTAkJMHgwMDA4IC8qIFN0YWxsIHJlY2VpdmVkICovCiAjZGVmaW5lIFREX1RPCQkweDAwMDQgLyogdGltZSBvdXQgKi8KICNkZWZpbmUgVERfVU4JCTB4MDAwMiAvKiB1bmRlcnJ1biAqLwogI2RlZmluZSBURF9OTwkJMHgwMDEwIC8qIFJ4IE5vbiBPY3RldCBBbGlnbmVkIFBhY2tldCAqLwpAQCAtMjc0LDcgKzI3NCw3IEBACiAgKiBJdCBpcyBhbHNvIHByZXBhcmluZyB0aGUgVERzIGZvciBuZXcgZnJhbWVzLiBJZiB0aGUgVHggaW50ZXJydXB0cwogICogYXJlIGRpc2FibGVkLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhhdCByb3V0aW5lIHRvIGdldAogICogY29uZmlybWF0aW9uIGFib3V0IHRoZSBzdWJtaXR0ZWQgZnJhbWVzLiBPdGhlcndpc2UsIHRoZSByb3V0aW5lIGlzCi0gKiBjYWxsZWQgZnJvbWUgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZHVyaW5nIHRoZSBUeCBpbnRlcnJ1cHQuCisgKiBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBkdXJpbmcgdGhlIFR4IGludGVycnVwdC4KICAqIEluIHRoYXQgY2FzZSB0aGUgYXBwbGljYXRpb24gaXMgaW5mb3JtZWQgYnkgY2FsbGluZyB0aGUgYXBwbGljYXRpb24KICAqIHNwZWNpZmljICdmaGNpX3RyYW5zYWN0aW9uX2NvbmZpcm0nIHJvdXRpbmUKICAqLwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCQkJCXBrdC0+c3RhdHVzID0gVVNCX1REX1JYX0VSX05PTk9DVDsKIAkJCQllbHNlCiAJCQkJCWZoY2lfZXJyKHVzYi0+ZmhjaSwgImlsbGVnYWwgZXJyb3IgIgotCQkJCQkJICJvY2N1cmVkXG4iKTsKKwkJCQkJCSAib2NjdXJyZWRcbiIpOwogCQkJfSBlbHNlIGlmICh0ZF9zdGF0dXMgJiBURF9OQUspCiAJCQkJcGt0LT5zdGF0dXMgPSBVU0JfVERfVFhfRVJfTkFLOwogCQkJZWxzZSBpZiAodGRfc3RhdHVzICYgVERfVE8pCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkJCWVsc2UgaWYgKHRkX3N0YXR1cyAmIFREX1NUQUwpCiAJCQkJcGt0LT5zdGF0dXMgPSBVU0JfVERfVFhfRVJfU1RBTEw7CiAJCQllbHNlCi0JCQkJZmhjaV9lcnIodXNiLT5maGNpLCAiaWxsZWdhbCBlcnJvciBvY2N1cmVkXG4iKTsKKwkJCQlmaGNpX2Vycih1c2ItPmZoY2ksICJpbGxlZ2FsIGVycm9yIG9jY3VycmVkXG4iKTsKIAkJfSBlbHNlIGlmICgoZXh0cmFfZGF0YSAmIFREX1RPS19JTikgJiYKIAkJCQlwa3QtPmxlbiA+IHRkX2xlbmd0aCAtIENSQ19TSVpFKSB7CiAJCQlwa3QtPnN0YXR1cyA9IFVTQl9URF9SWF9EQVRBX1VOREVSVU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCmluZGV4IDcxYzNjYWEuLmRjNjkzOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCkBAIC04Miw3ICs4Miw3IEBACiAjZGVmaW5lIFVTQl9URF9SWF9FUl9OT05PQ1QJMHg0MDAwMDAwMCAvKiBUeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KICNkZWZpbmUgVVNCX1REX1JYX0VSX0JJVFNUVUZGCTB4MjAwMDAwMDAgLyogRnJhbWUgQWJvcnRlZC1SZWNlaXZlZCBwa3QgKi8KICNkZWZpbmUgVVNCX1REX1JYX0VSX0NSQwkweDEwMDAwMDAwIC8qIENSQyBlcnJvciAqLwotI2RlZmluZSBVU0JfVERfUlhfRVJfT1ZFUlVOCTB4MDgwMDAwMDAgLyogT3ZlciAtIHJ1biBvY2N1cmVkICovCisjZGVmaW5lIFVTQl9URF9SWF9FUl9PVkVSVU4JMHgwODAwMDAwMCAvKiBPdmVyIC0gcnVuIG9jY3VycmVkICovCiAjZGVmaW5lIFVTQl9URF9SWF9FUl9QSUQJMHgwNDAwMDAwMCAvKiB3cm9uZyBQSUQgcmVjZWl2ZWQgKi8KICNkZWZpbmUgVVNCX1REX1JYX0RBVEFfVU5ERVJVTgkweDAyMDAwMDAwIC8qIHNob3J0ZXIgdGhhbiBleHBlY3RlZCAqLwogI2RlZmluZSBVU0JfVERfUlhfREFUQV9PVkVSVU4JMHgwMTAwMDAwMCAvKiBsb25nZXIgdGhhbiBleHBlY3RlZCAqLwpAQCAtMzYzLDcgKzM2Myw3IEBACiBzdHJ1Y3QgdGQgewogCXZvaWQgKmRhdGE7CQkgLyogYSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBsZW47CSAvKiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgc3VibWl0dGVkICovCi0JdW5zaWduZWQgaW50IGFjdHVhbF9sZW47IC8qIGFjdHVhbCBieXRlcyB0cmFuc2ZlcmVkIG9uIHRoaXMgdGQgKi8KKwl1bnNpZ25lZCBpbnQgYWN0dWFsX2xlbjsgLyogYWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIG9uIHRoaXMgdGQgKi8KIAllbnVtIGZoY2lfdGFfdHlwZSB0eXBlOwkgLyogdHJhbnNhY3Rpb24gdHlwZSAqLwogCXU4IHRvZ2dsZTsJCSAvKiB0b2dnbGUgZm9yIG5leHQgdHJhbnMuIHdpdGhpbiB0aGlzIFREICovCiAJdTE2IGlzb19pbmRleDsJCSAvKiBJU08gdHJhbnNhY3Rpb24gaW5kZXggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jCmluZGV4IDI1NjJlOTIuLmFmMDU3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuYwpAQCAtMTMyMyw3ICsxMzIzLDcgQEAKICAqIChhbmQgaGVuY2Ugbm8gaW50ZXJydXB0IG9jY3VycykuCiAgKiBUaGlzIGNhdXNlcyB0aGUgdHJhbnNmZXIgaW4gcXVlc3Rpb24gdG8gaGFuZy4KICAqIFRoZSBrbHVkZ2UgYmVsb3cgY2hlY2tzIGZvciB0aGlzIGNvbmRpdGlvbiBhdCBlYWNoIFNPRiBhbmQgcHJvY2Vzc2VzIGFueQotICogYmxvY2tlZCBFVERzIChhZnRlciBhbiBhcmJpdGFyeSAxMCBmcmFtZSB3YWl0KQorICogYmxvY2tlZCBFVERzIChhZnRlciBhbiBhcmJpdHJhcnkgMTAgZnJhbWUgd2FpdCkKICAqCiAgKiBXaXRoIGEgc2luZ2xlIGFjdGl2ZSB0cmFuc2ZlciB0aGUgdXNidGVzdCB0ZXN0IHN1aXRlIHdpbGwgcnVuIGZvciBkYXlzCiAgKiB3aXRob3V0IHRoZSBrbHVkZ2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCmluZGV4IDEyZGI5NjEuLjlhMmM0MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCkBAIC0xMyw3ICsxMyw3IEBACiAKIC8qIEZ1bGwgc3BlZWQ6IG1heCAjIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIGZvciBhIHNpbmdsZSB1cmIKICAgIGF0IGEgdGltZSBtdXN0IGJlIDwgMTAyNCAmJiBtdXN0IGJlIG11bHRpcGxlIG9mIDY0LgotICAgODMyIGFsbG93cyB0cmFuc2ZlcmluZyA0a2lCIHdpdGhpbiA1IGZyYW1lcy4gKi8KKyAgIDgzMiBhbGxvd3MgdHJhbnNmZXJyaW5nIDRraUIgd2l0aGluIDUgZnJhbWVzLiAqLwogI2RlZmluZSBNQVhfVFJBTlNGRVJfU0laRV9GVUxMU1BFRUQJODMyCiAKIC8qIExvdyBzcGVlZDogdGhlcmUgaXMgbm8gcmVhc29uIHRvIHNjaGVkdWxlIGluIHZlcnkgYmlnCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKaW5kZXggNjYyY2QwMC4uZjk3NTcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJCQlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpIHsKIAkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOwogCQkJCS8qIHNhdmUgdGhlIGRhdGEgdW5kZXJydW4gZXJyb3IgY29kZSBmb3IgbGF0ZXIgYW5kCi0JCQkJICogcHJvY2VkZSB3aXRoIHRoZSBzdGF0dXMgc3RhZ2UKKwkJCQkgKiBwcm9jZWVkIHdpdGggdGhlIHN0YXR1cyBzdGFnZQogCQkJCSAqLwogCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBQVERfR0VUX0NPVU5UKHB0ZCk7CiAJCQkJQlVHX09OKHVyYi0+YWN0dWFsX2xlbmd0aCA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggZjUwZTg0YS4uN2IyZTY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJfQogCiAJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwKLQkJCQkiJXM6IENhbiBub3QgYWxsb2NhdGUgJWx1IGJ5dGVzIG9mIG1lbW9yeVxuIgorCQkJCSIlczogQ2Fubm90IGFsbG9jYXRlICV6dSBieXRlcyBvZiBtZW1vcnlcbiIKIAkJCQkiQ3VycmVudCBtZW1vcnkgbWFwOlxuIiwKIAkJCQlfX2Z1bmNfXywgcXRkLT5sZW5ndGgpOwogCWZvciAoaSA9IDA7IGkgPCBCTE9DS1M7IGkrKykgewpAQCAtMTYzMyw2ICsxNjMzLDcgQEAKIAkJCWludHNbaV0ucWggPSBOVUxMOwogCQkJaW50c1tpXS5xdGQgPSBOVUxMOwogCisJCQl1cmItPnN0YXR1cyA9IHN0YXR1czsKIAkJCWlzcDE3NjBfdXJiX2RvbmUoaGNkLCB1cmIpOwogCQkJaWYgKHF0ZCkKIAkJCQlwZShoY2QsIHFoLCBxdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IDE3YTYwNDMuLjk1OGQ5ODVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAoVVNCSF9FTkFCTEVfQ0UgfCBVU0JIX0VOQUJMRV9FIHwgVVNCSF9FTkFCTEVfQykKLSNlbGlmIF9fQklHX0VORElBTgorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAjZGVmaW5lIFVTQkhfRU5BQkxFX0lOSVQgKFVTQkhfRU5BQkxFX0NFIHwgVVNCSF9FTkFCTEVfRSB8IFVTQkhfRU5BQkxFX0MgfCBcCiAJCQkgIFVTQkhfRU5BQkxFX0JFKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCBlNzI4ODYzLi5kNTU3MjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJLy8gY2FzZSBQSVBFX0lOVEVSUlVQVDoKIAkJLy8gY2FzZSBQSVBFX0JVTEs6CiAJCWRlZmF1bHQ6Ci0JCQkvKiBvbmUgVEQgZm9yIGV2ZXJ5IDQwOTYgQnl0ZXMgKGNhbiBiZSB1cHRvIDhLKSAqLworCQkJLyogb25lIFREIGZvciBldmVyeSA0MDk2IEJ5dGVzIChjYW4gYmUgdXAgdG8gOEspICovCiAJCQlzaXplICs9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAvIDQwOTY7CiAJCQkvKiAuLi4gYW5kIGZvciBhbnkgcmVtYWluaW5nIGJ5dGVzIC4uLiAqLwogCQkJaWYgKCh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSA0MDk2KSAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKaW5kZXggNDRlNGRlYjMuLjRhNzcxZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwpAQCAtMjg3OSw3ICsyODc5LDcgQEAKIAkvKiBPaywgd2UgaGF2ZSBtb3JlIGpvYiB0byBkbyEgOikgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBudW0gLSAxOyBpKyspIHsKLQkJLyogR2V0IGZyZWUgbWljcm8gVVJCIHBvbGwgdGlsbCBhIGZyZWUgdXJiIGlzIHJlY2lldmVkICovCisJCS8qIEdldCBmcmVlIG1pY3JvIFVSQiBwb2xsIHRpbGwgYSBmcmVlIHVyYiBpcyByZWNlaXZlZCAqLwogCiAJCWRvIHsKIAkJCW11cmIgPSAoc3RydWN0IHVyYiAqKSBveHVfbXVyYl9hbGxvYyhveHUpOwpAQCAtMjkxMSw3ICsyOTExLDcgQEAKIAogCS8qIExhc3QgdXJiIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgICovCiAKLQkvKiBHZXQgZnJlZSBtaWNybyBVUkIgcG9sbCB0aWxsIGEgZnJlZSB1cmIgaXMgcmVjaWV2ZWQgKi8KKwkvKiBHZXQgZnJlZSBtaWNybyBVUkIgcG9sbCB0aWxsIGEgZnJlZSB1cmIgaXMgcmVjZWl2ZWQgKi8KIAlkbyB7CiAJCW11cmIgPSAoc3RydWN0IHVyYiAqKSBveHVfbXVyYl9hbGxvYyhveHUpOwogCQlpZiAoIW11cmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IDFkNTg2ZDQuLjliMTY2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCkBAIC04NCw2NSArODQsOTIgQEAKIHsKIAl1OCByZXYgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGFtZF9jaGlwc2V0X2luZm8gaW5mbzsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtZF9sb2NrLCBmbGFncyk7CiAKLQlhbWRfY2hpcHNldC5wcm9iZV9jb3VudCsrOwogCS8qIHByb2JlIG9ubHkgb25jZSAqLwotCWlmIChhbWRfY2hpcHNldC5wcm9iZV9jb3VudCA+IDEpIHsKKwlpZiAoYW1kX2NoaXBzZXQucHJvYmVfY291bnQgPiAwKSB7CisJCWFtZF9jaGlwc2V0LnByb2JlX2NvdW50Kys7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBhbWRfY2hpcHNldC5wcm9iZV9yZXN1bHQ7CiAJfQorCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfbG9jaywgZmxhZ3MpOwogCi0JYW1kX2NoaXBzZXQuc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVEksIDB4NDM4NSwgTlVMTCk7Ci0JaWYgKGFtZF9jaGlwc2V0LnNtYnVzX2RldikgewotCQlyZXYgPSBhbWRfY2hpcHNldC5zbWJ1c19kZXYtPnJldmlzaW9uOworCWluZm8uc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVEksIDB4NDM4NSwgTlVMTCk7CisJaWYgKGluZm8uc21idXNfZGV2KSB7CisJCXJldiA9IGluZm8uc21idXNfZGV2LT5yZXZpc2lvbjsKIAkJaWYgKHJldiA+PSAweDQwKQotCQkJYW1kX2NoaXBzZXQuc2JfdHlwZSA9IDE7CisJCQlpbmZvLnNiX3R5cGUgPSAxOwogCQllbHNlIGlmIChyZXYgPj0gMHgzMCAmJiByZXYgPD0gMHgzYikKLQkJCWFtZF9jaGlwc2V0LnNiX3R5cGUgPSAzOworCQkJaW5mby5zYl90eXBlID0gMzsKIAl9IGVsc2UgewotCQlhbWRfY2hpcHNldC5zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKLQkJCQkJCQkweDc4MGIsIE5VTEwpOwotCQlpZiAoIWFtZF9jaGlwc2V0LnNtYnVzX2RldikgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAwOworCQlpbmZvLnNtYnVzX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELAorCQkJCQkJMHg3ODBiLCBOVUxMKTsKKwkJaWYgKCFpbmZvLnNtYnVzX2RldikgeworCQkJcmV0ID0gMDsKKwkJCWdvdG8gY29tbWl0OwogCQl9Ci0JCXJldiA9IGFtZF9jaGlwc2V0LnNtYnVzX2Rldi0+cmV2aXNpb247CisKKwkJcmV2ID0gaW5mby5zbWJ1c19kZXYtPnJldmlzaW9uOwogCQlpZiAocmV2ID49IDB4MTEgJiYgcmV2IDw9IDB4MTgpCi0JCQlhbWRfY2hpcHNldC5zYl90eXBlID0gMjsKKwkJCWluZm8uc2JfdHlwZSA9IDI7CiAJfQogCi0JaWYgKGFtZF9jaGlwc2V0LnNiX3R5cGUgPT0gMCkgewotCQlpZiAoYW1kX2NoaXBzZXQuc21idXNfZGV2KSB7Ci0JCQlwY2lfZGV2X3B1dChhbWRfY2hpcHNldC5zbWJ1c19kZXYpOwotCQkJYW1kX2NoaXBzZXQuc21idXNfZGV2ID0gTlVMTDsKKwlpZiAoaW5mby5zYl90eXBlID09IDApIHsKKwkJaWYgKGluZm8uc21idXNfZGV2KSB7CisJCQlwY2lfZGV2X3B1dChpbmZvLnNtYnVzX2Rldik7CisJCQlpbmZvLnNtYnVzX2RldiA9IE5VTEw7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIDA7CisJCXJldCA9IDA7CisJCWdvdG8gY29tbWl0OwogCX0KIAotCWFtZF9jaGlwc2V0Lm5iX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELCAweDk2MDEsIE5VTEwpOwotCWlmIChhbWRfY2hpcHNldC5uYl9kZXYpIHsKLQkJYW1kX2NoaXBzZXQubmJfdHlwZSA9IDE7CisJaW5mby5uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwgMHg5NjAxLCBOVUxMKTsKKwlpZiAoaW5mby5uYl9kZXYpIHsKKwkJaW5mby5uYl90eXBlID0gMTsKIAl9IGVsc2UgewotCQlhbWRfY2hpcHNldC5uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKLQkJCQkJCQkweDE1MTAsIE5VTEwpOwotCQlpZiAoYW1kX2NoaXBzZXQubmJfZGV2KSB7Ci0JCQlhbWRfY2hpcHNldC5uYl90eXBlID0gMjsKLQkJfSBlbHNlICB7Ci0JCQlhbWRfY2hpcHNldC5uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKLQkJCQkJCQkJMHg5NjAwLCBOVUxMKTsKLQkJCWlmIChhbWRfY2hpcHNldC5uYl9kZXYpCi0JCQkJYW1kX2NoaXBzZXQubmJfdHlwZSA9IDM7CisJCWluZm8ubmJfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTUxMCwgTlVMTCk7CisJCWlmIChpbmZvLm5iX2RldikgeworCQkJaW5mby5uYl90eXBlID0gMjsKKwkJfSBlbHNlIHsKKwkJCWluZm8ubmJfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsCisJCQkJCQkgICAgIDB4OTYwMCwgTlVMTCk7CisJCQlpZiAoaW5mby5uYl9kZXYpCisJCQkJaW5mby5uYl90eXBlID0gMzsKIAkJfQogCX0KIAotCWFtZF9jaGlwc2V0LnByb2JlX3Jlc3VsdCA9IDE7CisJcmV0ID0gaW5mby5wcm9iZV9yZXN1bHQgPSAxOwogCXByaW50ayhLRVJOX0RFQlVHICJRVUlSSzogRW5hYmxlIEFNRCBQTEwgZml4XG4iKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGFtZF9jaGlwc2V0LnByb2JlX3Jlc3VsdDsKK2NvbW1pdDoKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhbWRfbG9jaywgZmxhZ3MpOworCWlmIChhbWRfY2hpcHNldC5wcm9iZV9jb3VudCA+IDApIHsKKwkJLyogcmFjZSAtIHNvbWVvbmUgZWxzZSB3YXMgZmFzdGVyIC0gZHJvcCBkZXZpY2VzICovCisKKwkJLyogTWFyayB0aGF0IHdlIHdoZXJlIGhlcmUgKi8KKwkJYW1kX2NoaXBzZXQucHJvYmVfY291bnQrKzsKKwkJcmV0ID0gYW1kX2NoaXBzZXQucHJvYmVfcmVzdWx0OworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9sb2NrLCBmbGFncyk7CisKKwkJaWYgKGluZm8ubmJfZGV2KQorCQkJcGNpX2Rldl9wdXQoaW5mby5uYl9kZXYpOworCQlpZiAoaW5mby5zbWJ1c19kZXYpCisJCQlwY2lfZGV2X3B1dChpbmZvLnNtYnVzX2Rldik7CisKKwl9IGVsc2UgeworCQkvKiBubyByYWNlIC0gY29tbWl0IHRoZSByZXN1bHQgKi8KKwkJaW5mby5wcm9iZV9jb3VudCsrOworCQlhbWRfY2hpcHNldCA9IGluZm87CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hbWRfZmluZF9jaGlwc2V0X2luZm8pOwogCkBAIC0yODQsNiArMzExLDcgQEAKIAogdm9pZCB1c2JfYW1kX2Rldl9wdXQodm9pZCkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqbmIsICpzbWJ1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtZF9sb2NrLCBmbGFncyk7CkBAIC0yOTQsMjAgKzMyMiwyMyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGFtZF9jaGlwc2V0Lm5iX2RldikgewotCQlwY2lfZGV2X3B1dChhbWRfY2hpcHNldC5uYl9kZXYpOwotCQlhbWRfY2hpcHNldC5uYl9kZXYgPSBOVUxMOwotCX0KLQlpZiAoYW1kX2NoaXBzZXQuc21idXNfZGV2KSB7Ci0JCXBjaV9kZXZfcHV0KGFtZF9jaGlwc2V0LnNtYnVzX2Rldik7Ci0JCWFtZF9jaGlwc2V0LnNtYnVzX2RldiA9IE5VTEw7Ci0JfQorCS8qIHNhdmUgdGhlbSB0byBwY2lfZGV2X3B1dCBvdXRzaWRlIG9mIHNwaW5sb2NrICovCisJbmIgICAgPSBhbWRfY2hpcHNldC5uYl9kZXY7CisJc21idXMgPSBhbWRfY2hpcHNldC5zbWJ1c19kZXY7CisKKwlhbWRfY2hpcHNldC5uYl9kZXYgPSBOVUxMOworCWFtZF9jaGlwc2V0LnNtYnVzX2RldiA9IE5VTEw7CiAJYW1kX2NoaXBzZXQubmJfdHlwZSA9IDA7CiAJYW1kX2NoaXBzZXQuc2JfdHlwZSA9IDA7CiAJYW1kX2NoaXBzZXQuaXNvY19yZXFzID0gMDsKIAlhbWRfY2hpcHNldC5wcm9iZV9yZXN1bHQgPSAwOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2xvY2ssIGZsYWdzKTsKKworCWlmIChuYikKKwkJcGNpX2Rldl9wdXQobmIpOworCWlmIChzbWJ1cykKKwkJcGNpX2Rldl9wdXQoc21idXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FtZF9kZXZfcHV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMKaW5kZXggZGMwYWI4My4uZDZlMTc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jCkBAIC03MzksNyArNzM5LDcgQEAKICAqIHByb2Nlc3NfaW5hY3RpdmVfcXRkIC0gcHJvY2VzcyBhbiBpbmFjdGl2ZSAoYnV0IG5vdCBoYWx0ZWQpIHFURC4KICAqCiAgKiBVcGRhdGUgdGhlIHVyYiB3aXRoIHRoZSB0cmFuc2ZlciBieXRlcyBmcm9tIHRoZSBxVEQsIGlmIHRoZSB1cmIgaXMKLSAqIGNvbXBsZXRlbHkgdHJhbnNmZXJlZCBvciAoaW4gdGhlIGNhc2Ugb2YgYW4gSU4gb25seSkgdGhlIExQRiBpcworICogY29tcGxldGVseSB0cmFuc2ZlcnJlZCBvciAoaW4gdGhlIGNhc2Ugb2YgYW4gSU4gb25seSkgdGhlIExQRiBpcwogICogc2V0LCB0aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSBhbmQgdGhlIHVyYiBzaG91bGQgYmUgcmV0dXJuZWQKICAqIHRvIHRoZSBzeXN0ZW0uCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCBhNzhmMmViLi43M2Y3NWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCkBAIC03NzcsNyArNzc3LDcgQEAKIAkJaWYgKHQxICE9IHQyKQogCQkJeGhjaV93cml0ZWwoeGhjaSwgdDIsIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOwogCi0JCWlmIChERVZfSElHSFNQRUVEKHQxKSkgeworCQlpZiAoaGNkLT5zcGVlZCAhPSBIQ0RfVVNCMykgewogCQkJLyogZW5hYmxlIHJlbW90ZSB3YWtlIHVwIGZvciBVU0IgMi4wICovCiAJCQl1MzIgX19pb21lbSAqYWRkcjsKIAkJCXUzMiB0bXA7CkBAIC04NjYsNiArODY2LDIxIEBACiAJCQkJdGVtcCB8PSBQT1JUX0xJTktfU1RST0JFIHwgWERFVl9VMDsKIAkJCQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wLCBwb3J0X2FycmF5W3BvcnRfaW5kZXhdKTsKIAkJCX0KKwkJCS8qIHdhaXQgZm9yIHRoZSBwb3J0IHRvIGVudGVyIFUwIGFuZCByZXBvcnQgcG9ydCBsaW5rCisJCQkgKiBzdGF0ZSBjaGFuZ2UuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCW1zbGVlcCgyMCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCisJCQkvKiBDbGVhciBQTEMgKi8KKwkJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOworCQkJaWYgKHRlbXAgJiBQT1JUX1BMQykgeworCQkJCXRlbXAgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbCh0ZW1wKTsKKwkJCQl0ZW1wIHw9IFBPUlRfUExDOworCQkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOworCQkJfQorCiAJCQlzbG90X2lkID0geGhjaV9maW5kX3Nsb3RfaWRfYnlfcG9ydChoY2QsCiAJCQkJCXhoY2ksIHBvcnRfaW5kZXggKyAxKTsKIAkJCWlmIChzbG90X2lkKQpAQCAtODczLDcgKzg4OCw3IEBACiAJCX0gZWxzZQogCQkJeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwgcG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CiAKLQkJaWYgKERFVl9ISUdIU1BFRUQodGVtcCkpIHsKKwkJaWYgKGhjZC0+c3BlZWQgIT0gSENEX1VTQjMpIHsKIAkJCS8qIGRpc2FibGUgcmVtb3RlIHdha2UgdXAgZm9yIFVTQiAyLjAgKi8KIAkJCXUzMiBfX2lvbWVtICphZGRyOwogCQkJdTMyIHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCBhMDAzZTc5Li42MjdmMzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC04NDYsNyArODQ2LDcgQEAKIAkJICogU2tpcCBwb3J0cyB0aGF0IGRvbid0IGhhdmUga25vd24gc3BlZWRzLCBvciBoYXZlIGR1cGxpY2F0ZQogCQkgKiBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgcG9ydCBzcGVlZCBlbnRyaWVzLgogCQkgKi8KLQkJaWYgKHBvcnRfc3BlZWQgPT0gMCB8fCBwb3J0X3NwZWVkID09IC0xKQorCQlpZiAocG9ydF9zcGVlZCA9PSAwIHx8IHBvcnRfc3BlZWQgPT0gRFVQTElDQVRFX0VOVFJZKQogCQkJY29udGludWU7CiAKIAkJLyoKQEAgLTk3NCw2ICs5NzQsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIENvbnZlcnQgaW50ZXJ2YWwgZXhwcmVzc2VkIGFzIDJeKGJJbnRlcnZhbCAtIDEpID09IGludGVydmFsIGludG8KKyAqIHN0cmFpZ2h0IGV4cG9uZW50IHZhbHVlIDJebiA9PSBpbnRlcnZhbC4KKyAqCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGhjaV9wYXJzZV9leHBvbmVudF9pbnRlcnZhbChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7CisKKwlpbnRlcnZhbCA9IGNsYW1wX3ZhbChlcC0+ZGVzYy5iSW50ZXJ2YWwsIDEsIDE2KSAtIDE7CisJaWYgKGludGVydmFsICE9IGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpCisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCisJCQkgImVwICUjeCAtIHJvdW5kaW5nIGludGVydmFsIHRvICVkIG1pY3JvZnJhbWVzXG4iLAorCQkJIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCisJCQkgMSA8PCBpbnRlcnZhbCk7CisKKwlyZXR1cm4gaW50ZXJ2YWw7Cit9CisKKy8qCisgKiBDb252ZXJ0IGJJbnRlcnZhbCBleHByZXNzZWQgaW4gZnJhbWVzIChpbiAxLTI1NSByYW5nZSkgdG8gZXhwb25lbnQgb2YKKyAqIG1pY3JvZnJhbWVzLCByb3VuZGVkIGRvd24gdG8gbmVhcmVzdCBwb3dlciBvZiAyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHhoY2lfcGFyc2VfZnJhbWVfaW50ZXJ2YWwoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJdW5zaWduZWQgaW50IGludGVydmFsOworCisJaW50ZXJ2YWwgPSBmbHMoOCAqIGVwLT5kZXNjLmJJbnRlcnZhbCkgLSAxOworCWludGVydmFsID0gY2xhbXBfdmFsKGludGVydmFsLCAzLCAxMCk7CisJaWYgKCgxIDw8IGludGVydmFsKSAhPSA4ICogZXAtPmRlc2MuYkludGVydmFsKQorCQlkZXZfd2FybigmdWRldi0+ZGV2LAorCQkJICJlcCAlI3ggLSByb3VuZGluZyBpbnRlcnZhbCB0byAlZCBtaWNyb2ZyYW1lcywgZXAgZGVzYyBzYXlzICVkIG1pY3JvZnJhbWVzXG4iLAorCQkJIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCisJCQkgMSA8PCBpbnRlcnZhbCwKKwkJCSA4ICogZXAtPmRlc2MuYkludGVydmFsKTsKKworCXJldHVybiBpbnRlcnZhbDsKK30KKwogLyogUmV0dXJuIHRoZSBwb2xsaW5nIG9yIE5BSyBpbnRlcnZhbC4KICAqCiAgKiBUaGUgcG9sbGluZyBpbnRlcnZhbCBpcyBleHByZXNzZWQgaW4gIm1pY3JvZnJhbWVzIi4gIElmIHhIQ0kncyBJbnRlcnZhbCBmaWVsZApAQCAtOTgyLDcgKzEwMjMsNyBAQAogICogVGhlIE5BSyBpbnRlcnZhbCBpcyBvbmUgTkFLIHBlciAxIHRvIDI1NSBtaWNyb2ZyYW1lcywgb3Igbm8gTkFLcyBpZiBpbnRlcnZhbAogICogaXMgc2V0IHRvIDAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2ludGVydmFsKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorc3RhdGljIHVuc2lnbmVkIGludCB4aGNpX2dldF9lbmRwb2ludF9pbnRlcnZhbChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKIHsKIAl1bnNpZ25lZCBpbnQgaW50ZXJ2YWwgPSAwOwpAQCAtOTkxLDQ1ICsxMDMyLDM4IEBACiAJY2FzZSBVU0JfU1BFRURfSElHSDoKIAkJLyogTWF4IE5BSyByYXRlICovCiAJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZlcC0+ZGVzYykgfHwKLQkJCQl1c2JfZW5kcG9pbnRfeGZlcl9idWxrKCZlcC0+ZGVzYykpCisJCSAgICB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKCZlcC0+ZGVzYykpIHsKIAkJCWludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOworCQkJYnJlYWs7CisJCX0KIAkJLyogRmFsbCB0aHJvdWdoIC0gU1MgYW5kIEhTIGlzb2MvaW50IGhhdmUgc2FtZSBkZWNvZGluZyAqLworCiAJY2FzZSBVU0JfU1BFRURfU1VQRVI6CiAJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJmVwLT5kZXNjKSB8fAotCQkJCXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmVwLT5kZXNjKSkgewotCQkJaWYgKGVwLT5kZXNjLmJJbnRlcnZhbCA9PSAwKQotCQkJCWludGVydmFsID0gMDsKLQkJCWVsc2UKLQkJCQlpbnRlcnZhbCA9IGVwLT5kZXNjLmJJbnRlcnZhbCAtIDE7Ci0JCQlpZiAoaW50ZXJ2YWwgPiAxNSkKLQkJCQlpbnRlcnZhbCA9IDE1OwotCQkJaWYgKGludGVydmFsICE9IGVwLT5kZXNjLmJJbnRlcnZhbCArIDEpCi0JCQkJZGV2X3dhcm4oJnVkZXYtPmRldiwgImVwICUjeCAtIHJvdW5kaW5nIGludGVydmFsIHRvICVkIG1pY3JvZnJhbWVzXG4iLAotCQkJCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywgMSA8PCBpbnRlcnZhbCk7CisJCSAgICB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZlcC0+ZGVzYykpIHsKKwkJCWludGVydmFsID0geGhjaV9wYXJzZV9leHBvbmVudF9pbnRlcnZhbCh1ZGV2LCBlcCk7CiAJCX0KIAkJYnJlYWs7Ci0JLyogQ29udmVydCBiSW50ZXJ2YWwgKGluIDEtMjU1IGZyYW1lcykgdG8gbWljcm9mcmFtZXMgYW5kIHJvdW5kIGRvd24gdG8KLQkgKiBuZWFyZXN0IHBvd2VyIG9mIDIuCi0JICovCisKIAljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KCZlcC0+ZGVzYykpIHsKKwkJCWludGVydmFsID0geGhjaV9wYXJzZV9leHBvbmVudF9pbnRlcnZhbCh1ZGV2LCBlcCk7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBGYWxsIHRocm91Z2ggZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50IGludGVydmFsIGRlY29kaW5nCisJCSAqIHNpbmNlIGl0IHVzZXMgdGhlIHNhbWUgcnVsZXMgYXMgbG93IHNwZWVkIGludGVycnVwdAorCQkgKiBlbmRwb2ludHMuCisJCSAqLworCiAJY2FzZSBVU0JfU1BFRURfTE9XOgogCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KCZlcC0+ZGVzYykgfHwKLQkJCQl1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZlcC0+ZGVzYykpIHsKLQkJCWludGVydmFsID0gZmxzKDgqZXAtPmRlc2MuYkludGVydmFsKSAtIDE7Ci0JCQlpZiAoaW50ZXJ2YWwgPiAxMCkKLQkJCQlpbnRlcnZhbCA9IDEwOwotCQkJaWYgKGludGVydmFsIDwgMykKLQkJCQlpbnRlcnZhbCA9IDM7Ci0JCQlpZiAoKDEgPDwgaW50ZXJ2YWwpICE9IDgqZXAtPmRlc2MuYkludGVydmFsKQotCQkJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCi0JCQkJCQkiZXAgJSN4IC0gcm91bmRpbmcgaW50ZXJ2YWwiCi0JCQkJCQkiIHRvICVkIG1pY3JvZnJhbWVzLCAiCi0JCQkJCQkiZXAgZGVzYyBzYXlzICVkIG1pY3JvZnJhbWVzXG4iLAotCQkJCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKLQkJCQkJCTEgPDwgaW50ZXJ2YWwsCi0JCQkJCQk4KmVwLT5kZXNjLmJJbnRlcnZhbCk7CisJCSAgICB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZlcC0+ZGVzYykpIHsKKworCQkJaW50ZXJ2YWwgPSB4aGNpX3BhcnNlX2ZyYW1lX2ludGVydmFsKHVkZXYsIGVwKTsKIAkJfQogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTEwNDEsNyArMTA3NSw3IEBACiAgKiB0cmFuc2FjdGlvbiBvcHBvcnR1bml0aWVzIHBlciBtaWNyb2ZyYW1lIiwgYnV0IHRoYXQgZ29lcyBpbiB0aGUgTWF4IEJ1cnN0CiAgKiBlbmRwb2ludCBjb250ZXh0IGZpZWxkLgogICovCi1zdGF0aWMgaW5saW5lIHUzMiB4aGNpX2dldF9lbmRwb2ludF9tdWx0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorc3RhdGljIHUzMiB4aGNpX2dldF9lbmRwb2ludF9tdWx0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQogewogCWlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfU1VQRVIgfHwKQEAgLTEwNTAsNyArMTA4NCw3IEBACiAJcmV0dXJuIGVwLT5zc19lcF9jb21wLmJtQXR0cmlidXRlczsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgeGhjaV9nZXRfZW5kcG9pbnRfdHlwZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKK3N0YXRpYyB1MzIgeGhjaV9nZXRfZW5kcG9pbnRfdHlwZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKIHsKIAlpbnQgaW47CkBAIC0xMDg0LDcgKzExMTgsNyBAQAogICogQmFzaWNhbGx5LCB0aGlzIGlzIHRoZSBtYXhwYWNrZXQgc2l6ZSwgbXVsdGlwbGllZCBieSB0aGUgYnVyc3Qgc2l6ZQogICogYW5kIG11bHQgc2l6ZS4KICAqLwotc3RhdGljIGlubGluZSB1MzIgeGhjaV9nZXRfbWF4X2VzaXRfcGF5bG9hZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitzdGF0aWMgdTMyIHhoY2lfZ2V0X21heF9lc2l0X3BheWxvYWQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKIHsKQEAgLTE3MjcsMTIgKzE3NjEsMTIgQEAKIAkJCSAqIGZvdW5kIGEgc2ltaWxhciBkdXBsaWNhdGUuCiAJCQkgKi8KIAkJCWlmICh4aGNpLT5wb3J0X2FycmF5W2ldICE9IG1ham9yX3JldmlzaW9uICYmCi0JCQkJeGhjaS0+cG9ydF9hcnJheVtpXSAhPSAodTgpIC0xKSB7CisJCQkJeGhjaS0+cG9ydF9hcnJheVtpXSAhPSBEVVBMSUNBVEVfRU5UUlkpIHsKIAkJCQlpZiAoeGhjaS0+cG9ydF9hcnJheVtpXSA9PSAweDAzKQogCQkJCQl4aGNpLT5udW1fdXNiM19wb3J0cy0tOwogCQkJCWVsc2UKIAkJCQkJeGhjaS0+bnVtX3VzYjJfcG9ydHMtLTsKLQkJCQl4aGNpLT5wb3J0X2FycmF5W2ldID0gKHU4KSAtMTsKKwkJCQl4aGNpLT5wb3J0X2FycmF5W2ldID0gRFVQTElDQVRFX0VOVFJZOwogCQkJfQogCQkJLyogRklYTUU6IFNob3VsZCB3ZSBkaXNhYmxlIHRoZSBwb3J0PyAqLwogCQkJY29udGludWU7CkBAIC0xODMxLDcgKzE4NjUsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BvcnRzOyBpKyspIHsKIAkJCWlmICh4aGNpLT5wb3J0X2FycmF5W2ldID09IDB4MDMgfHwKIAkJCQkJeGhjaS0+cG9ydF9hcnJheVtpXSA9PSAwIHx8Ci0JCQkJCXhoY2ktPnBvcnRfYXJyYXlbaV0gPT0gLTEpCisJCQkJCXhoY2ktPnBvcnRfYXJyYXlbaV0gPT0gRFVQTElDQVRFX0VOVFJZKQogCQkJCWNvbnRpbnVlOwogCiAJCQl4aGNpLT51c2IyX3BvcnRzW3BvcnRfaW5kZXhdID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwppbmRleCBjZWVhOWYzLi5hMTA0OTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCkBAIC0xMTQsNiArMTE0LDEwIEBACiAJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05FQykKIAkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfTkVDX0hPU1Q7CiAKKwkvKiBBTUQgUExMIHF1aXJrICovCisJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCAmJiB1c2JfYW1kX2ZpbmRfY2hpcHNldF9pbmZvKCkpCisJCXhoY2ktPnF1aXJrcyB8PSBYSENJX0FNRF9QTExfRklYOworCiAJLyogTWFrZSBzdXJlIHRoZSBIQyBpcyBoYWx0ZWQuICovCiAJcmV0dmFsID0geGhjaV9oYWx0KHhoY2kpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCBjZmMxYWQ5Li43NDM3Mzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTkzLDcgKzkzLDcgQEAKIC8qIERvZXMgdGhpcyBsaW5rIFRSQiBwb2ludCB0byB0aGUgZmlyc3Qgc2VnbWVudCBpbiBhIHJpbmcsCiAgKiBvciB3YXMgdGhlIHByZXZpb3VzIFRSQiB0aGUgbGFzdCBUUkIgb24gdGhlIGxhc3Qgc2VnbWVudCBpbiB0aGUgRVJTVD8KICAqLwotc3RhdGljIGlubGluZSBib29sIGxhc3RfdHJiX29uX2xhc3Rfc2VnKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfcmluZyAqcmluZywKK3N0YXRpYyBib29sIGxhc3RfdHJiX29uX2xhc3Rfc2VnKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfcmluZyAqcmluZywKIAkJc3RydWN0IHhoY2lfc2VnbWVudCAqc2VnLCB1bmlvbiB4aGNpX3RyYiAqdHJiKQogewogCWlmIChyaW5nID09IHhoY2ktPmV2ZW50X3JpbmcpCkBAIC0xMDcsNyArMTA3LDcgQEAKICAqIHNlZ21lbnQ/ICBJLmUuIHdvdWxkIHRoZSB1cGRhdGVkIGV2ZW50IFRSQiBwb2ludGVyIHN0ZXAgb2ZmIHRoZSBlbmQgb2YgdGhlCiAgKiBldmVudCBzZWc/CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxhc3RfdHJiKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfcmluZyAqcmluZywKK3N0YXRpYyBpbnQgbGFzdF90cmIoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nLAogCQlzdHJ1Y3QgeGhjaV9zZWdtZW50ICpzZWcsIHVuaW9uIHhoY2lfdHJiICp0cmIpCiB7CiAJaWYgKHJpbmcgPT0geGhjaS0+ZXZlbnRfcmluZykKQEAgLTExNiw3ICsxMTYsNyBAQAogCQlyZXR1cm4gKHRyYi0+bGluay5jb250cm9sICYgVFJCX1RZUEVfQklUTUFTSykgPT0gVFJCX1RZUEUoVFJCX0xJTkspOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBlbnF1ZXVlX2lzX2xpbmtfdHJiKHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcpCitzdGF0aWMgaW50IGVucXVldWVfaXNfbGlua190cmIoc3RydWN0IHhoY2lfcmluZyAqcmluZykKIHsKIAlzdHJ1Y3QgeGhjaV9saW5rX3RyYiAqbGluayA9ICZyaW5nLT5lbnF1ZXVlLT5saW5rOwogCXJldHVybiAoKGxpbmstPmNvbnRyb2wgJiBUUkJfVFlQRV9CSVRNQVNLKSA9PSBUUkJfVFlQRShUUkJfTElOSykpOwpAQCAtNTkyLDcgKzU5Miw3IEBACiAJZXAtPmVwX3N0YXRlIHw9IFNFVF9ERVFfUEVORElORzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHhoY2lfc3RvcF93YXRjaGRvZ190aW1lcl9pbl9pcnEoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9zdG9wX3dhdGNoZG9nX3RpbWVyX2luX2lycShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwKQogewogCWVwLT5lcF9zdGF0ZSAmPSB+RVBfSEFMVF9QRU5ESU5HOwpAQCAtNjE5LDYgKzYxOSwxMyBAQAogCiAJLyogT25seSBnaXZlYmFjayB1cmIgd2hlbiB0aGlzIGlzIHRoZSBsYXN0IHRkIGluIHVyYiAqLwogCWlmICh1cmJfcHJpdi0+dGRfY250ID09IHVyYl9wcml2LT5sZW5ndGgpIHsKKwkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCXhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKKwkJCWlmICh4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzCT09IDApIHsKKwkJCQlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9BTURfUExMX0ZJWCkKKwkJCQkJdXNiX2FtZF9xdWlya19wbGxfZW5hYmxlKCk7CisJCQl9CisJCX0KIAkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOwogCQl4aGNpX2RiZyh4aGNpLCAiR2l2ZWJhY2sgJXMgVVJCICVwXG4iLCBhZGplY3RpdmUsIHVyYik7CiAKQEAgLTEyMDksNyArMTIxNiw3IEBACiAJCSAqIFNraXAgcG9ydHMgdGhhdCBkb24ndCBoYXZlIGtub3duIHNwZWVkcywgb3IgaGF2ZSBkdXBsaWNhdGUKIAkJICogRXh0ZW5kZWQgQ2FwYWJpbGl0aWVzIHBvcnQgc3BlZWQgZW50cmllcy4KIAkJICovCi0JCWlmIChwb3J0X3NwZWVkID09IDAgfHwgcG9ydF9zcGVlZCA9PSAtMSkKKwkJaWYgKHBvcnRfc3BlZWQgPT0gMCB8fCBwb3J0X3NwZWVkID09IERVUExJQ0FURV9FTlRSWSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qCkBAIC0xMjM1LDYgKzEyNDIsNyBAQAogCXU4IG1ham9yX3JldmlzaW9uOwogCXN0cnVjdCB4aGNpX2J1c19zdGF0ZSAqYnVzX3N0YXRlOwogCXUzMiBfX2lvbWVtICoqcG9ydF9hcnJheTsKKwlib29sIGJvZ3VzX3BvcnRfc3RhdHVzID0gZmFsc2U7CiAKIAkvKiBQb3J0IHN0YXR1cyBjaGFuZ2UgZXZlbnRzIGFsd2F5cyBoYXZlIGEgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGNvZGUgKi8KIAlpZiAoR0VUX0NPTVBfQ09ERShldmVudC0+Z2VuZXJpYy5maWVsZFsyXSkgIT0gQ09NUF9TVUNDRVNTKSB7CkBAIC0xMjQ3LDYgKzEyNTUsNyBAQAogCW1heF9wb3J0cyA9IEhDU19NQVhfUE9SVFMoeGhjaS0+aGNzX3BhcmFtczEpOwogCWlmICgocG9ydF9pZCA8PSAwKSB8fCAocG9ydF9pZCA+IG1heF9wb3J0cykpIHsKIAkJeGhjaV93YXJuKHhoY2ksICJJbnZhbGlkIHBvcnQgaWQgJWRcbiIsIHBvcnRfaWQpOworCQlib2d1c19wb3J0X3N0YXR1cyA9IHRydWU7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKQEAgLTEyNTgsMTIgKzEyNjcsMTQgQEAKIAkJeGhjaV93YXJuKHhoY2ksICJFdmVudCBmb3IgcG9ydCAldSBub3QgaW4gIgogCQkJCSJFeHRlbmRlZCBDYXBhYmlsaXRpZXMsIGlnbm9yaW5nLlxuIiwKIAkJCQlwb3J0X2lkKTsKKwkJYm9ndXNfcG9ydF9zdGF0dXMgPSB0cnVlOwogCQlnb3RvIGNsZWFudXA7CiAJfQotCWlmIChtYWpvcl9yZXZpc2lvbiA9PSAodTgpIC0xKSB7CisJaWYgKG1ham9yX3JldmlzaW9uID09IERVUExJQ0FURV9FTlRSWSkgewogCQl4aGNpX3dhcm4oeGhjaSwgIkV2ZW50IGZvciBwb3J0ICV1IGR1cGxpY2F0ZWQgaW4iCiAJCQkJIkV4dGVuZGVkIENhcGFiaWxpdGllcywgaWdub3JpbmcuXG4iLAogCQkJCXBvcnRfaWQpOworCQlib2d1c19wb3J0X3N0YXR1cyA9IHRydWU7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKQEAgLTEzMzUsNiArMTM0NiwxMyBAQAogCS8qIFVwZGF0ZSBldmVudCByaW5nIGRlcXVldWUgcG9pbnRlciBiZWZvcmUgZHJvcHBpbmcgdGhlIGxvY2sgKi8KIAlpbmNfZGVxKHhoY2ksIHhoY2ktPmV2ZW50X3JpbmcsIHRydWUpOwogCisJLyogRG9uJ3QgbWFrZSB0aGUgVVNCIGNvcmUgcG9sbCB0aGUgcm9vdGh1YiBpZiB3ZSBnb3QgYSBiYWQgcG9ydCBzdGF0dXMKKwkgKiBjaGFuZ2UgZXZlbnQuICBCZXNpZGVzLCBhdCB0aGF0IHBvaW50IHdlIGNhbid0IHRlbGwgd2hpY2ggcm9vdGh1YgorCSAqIChVU0IgMi4wIG9yIFVTQiAzLjApIHRvIGtpY2suCisJICovCisJaWYgKGJvZ3VzX3BvcnRfc3RhdHVzKQorCQlyZXR1cm47CisKIAlzcGluX3VubG9jaygmeGhjaS0+bG9jayk7CiAJLyogUGFzcyB0aGlzIHVwIHRvIHRoZSBjb3JlICovCiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyhoY2QpOwpAQCAtMTU1NCw4ICsxNTcyLDE3IEBACiAKIAkJdXJiX3ByaXYtPnRkX2NudCsrOwogCQkvKiBHaXZlYmFjayB0aGUgdXJiIHdoZW4gYWxsIHRoZSB0ZHMgYXJlIGNvbXBsZXRlZCAqLwotCQlpZiAodXJiX3ByaXYtPnRkX2NudCA9PSB1cmJfcHJpdi0+bGVuZ3RoKQorCQlpZiAodXJiX3ByaXYtPnRkX2NudCA9PSB1cmJfcHJpdi0+bGVuZ3RoKSB7CiAJCQlyZXQgPSAxOworCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQl4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzLS07CisJCQkJaWYgKHhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMKKwkJCQkJPT0gMCkgeworCQkJCQlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9BTURfUExMX0ZJWCkKKwkJCQkJCXVzYl9hbWRfcXVpcmtfcGxsX2VuYWJsZSgpOworCQkJCX0KKwkJCX0KKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNjc1LDcxICsxNzAyLDUyIEBACiAJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKIAlpbnQgaWR4OwogCWludCBsZW4gPSAwOwotCWludCBza2lwX3RkID0gMDsKIAl1bmlvbiB4aGNpX3RyYiAqY3VyX3RyYjsKIAlzdHJ1Y3QgeGhjaV9zZWdtZW50ICpjdXJfc2VnOworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcmFtZTsKIAl1MzIgdHJiX2NvbXBfY29kZTsKKwlib29sIHNraXBfdGQgPSBmYWxzZTsKIAogCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBldmVudC0+YnVmZmVyKTsKIAl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKTsKIAl1cmJfcHJpdiA9IHRkLT51cmItPmhjcHJpdjsKIAlpZHggPSB1cmJfcHJpdi0+dGRfY250OworCWZyYW1lID0gJnRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF07CiAKLQlpZiAoZXAtPnNraXApIHsKLQkJLyogVGhlIHRyYW5zZmVyIGlzIHBhcnRseSBkb25lICovCi0JCSpzdGF0dXMgPSAtRVhERVY7Ci0JCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gLUVYREVWOwotCX0gZWxzZSB7Ci0JCS8qIGhhbmRsZSBjb21wbGV0aW9uIGNvZGUgKi8KLQkJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7Ci0JCWNhc2UgQ09NUF9TVUNDRVNTOgotCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5zdGF0dXMgPSAwOwotCQkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgaXNvYyB0cmFuc2ZlciFcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ09NUF9TSE9SVF9UWDoKLQkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCi0JCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5zdGF0dXMgPQotCQkJCQkgLUVSRU1PVEVJTzsKLQkJCWVsc2UKLQkJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBDT01QX0JXX09WRVI6Ci0JCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IC1FQ09NTTsKLQkJCXNraXBfdGQgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ09NUF9CVUZGX09WRVI6Ci0JCWNhc2UgQ09NUF9CQUJCTEU6Ci0JCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IC1FT1ZFUkZMT1c7Ci0JCQlza2lwX3RkID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIENPTVBfU1RBTEw6Ci0JCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IC1FUFJPVE87Ci0JCQlza2lwX3RkID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIENPTVBfU1RPUDoKLQkJY2FzZSBDT01QX1NUT1BfSU5WQUw6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gLTE7Ci0JCQlicmVhazsKLQkJfQorCS8qIGhhbmRsZSBjb21wbGV0aW9uIGNvZGUgKi8KKwlzd2l0Y2ggKHRyYl9jb21wX2NvZGUpIHsKKwljYXNlIENPTVBfU1VDQ0VTUzoKKwkJZnJhbWUtPnN0YXR1cyA9IDA7CisJCXhoY2lfZGJnKHhoY2ksICJTdWNjZXNzZnVsIGlzb2MgdHJhbnNmZXIhXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDT01QX1NIT1JUX1RYOgorCQlmcmFtZS0+c3RhdHVzID0gdGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LID8KKwkJCQktRVJFTU9URUlPIDogMDsKKwkJYnJlYWs7CisJY2FzZSBDT01QX0JXX09WRVI6CisJCWZyYW1lLT5zdGF0dXMgPSAtRUNPTU07CisJCXNraXBfdGQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIENPTVBfQlVGRl9PVkVSOgorCWNhc2UgQ09NUF9CQUJCTEU6CisJCWZyYW1lLT5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQlza2lwX3RkID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBDT01QX1NUQUxMOgorCQlmcmFtZS0+c3RhdHVzID0gLUVQUk9UTzsKKwkJc2tpcF90ZCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgQ09NUF9TVE9QOgorCWNhc2UgQ09NUF9TVE9QX0lOVkFMOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcmFtZS0+c3RhdHVzID0gLTE7CisJCWJyZWFrOwogCX0KIAotCS8qIGNhbGMgYWN0dWFsIGxlbmd0aCAqLwotCWlmIChlcC0+c2tpcCkgewotCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLmFjdHVhbF9sZW5ndGggPSAwOwotCQkvKiBVcGRhdGUgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8KLQkJd2hpbGUgKGVwX3JpbmctPmRlcXVldWUgIT0gdGQtPmxhc3RfdHJiKQotCQkJaW5jX2RlcSh4aGNpLCBlcF9yaW5nLCBmYWxzZSk7Ci0JCWluY19kZXEoeGhjaSwgZXBfcmluZywgZmFsc2UpOwotCQlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LCBlcCwgc3RhdHVzLCB0cnVlKTsKLQl9Ci0KLQlpZiAodHJiX2NvbXBfY29kZSA9PSBDT01QX1NVQ0NFU1MgfHwgc2tpcF90ZCA9PSAxKSB7Ci0JCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uYWN0dWFsX2xlbmd0aCA9Ci0JCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLmxlbmd0aDsKLQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCArPQotCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5sZW5ndGg7CisJaWYgKHRyYl9jb21wX2NvZGUgPT0gQ09NUF9TVUNDRVNTIHx8IHNraXBfdGQpIHsKKwkJZnJhbWUtPmFjdHVhbF9sZW5ndGggPSBmcmFtZS0+bGVuZ3RoOworCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9IGZyYW1lLT5sZW5ndGg7CiAJfSBlbHNlIHsKIAkJZm9yIChjdXJfdHJiID0gZXBfcmluZy0+ZGVxdWV1ZSwKIAkJICAgICBjdXJfc2VnID0gZXBfcmluZy0+ZGVxX3NlZzsgY3VyX3RyYiAhPSBldmVudF90cmI7CkBAIC0xNzU1LDcgKzE3NjMsNyBAQAogCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKIAogCQlpZiAodHJiX2NvbXBfY29kZSAhPSBDT01QX1NUT1BfSU5WQUwpIHsKLQkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uYWN0dWFsX2xlbmd0aCA9IGxlbjsKKwkJCWZyYW1lLT5hY3R1YWxfbGVuZ3RoID0gbGVuOwogCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCArPSBsZW47CiAJCX0KIAl9CkBAIC0xNzY2LDYgKzE3NzQsMzUgQEAKIAlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LCBlcCwgc3RhdHVzLCBmYWxzZSk7CiB9CiAKK3N0YXRpYyBpbnQgc2tpcF9pc29jX3RkKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfdGQgKnRkLAorCQkJc3RydWN0IHhoY2lfdHJhbnNmZXJfZXZlbnQgKmV2ZW50LAorCQkJc3RydWN0IHhoY2lfdmlydF9lcCAqZXAsIGludCAqc3RhdHVzKQoreworCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZnJhbWU7CisJaW50IGlkeDsKKworCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBldmVudC0+YnVmZmVyKTsKKwl1cmJfcHJpdiA9IHRkLT51cmItPmhjcHJpdjsKKwlpZHggPSB1cmJfcHJpdi0+dGRfY250OworCWZyYW1lID0gJnRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF07CisKKwkvKiBUaGUgdHJhbnNmZXIgaXMgcGFydGx5IGRvbmUgKi8KKwkqc3RhdHVzID0gLUVYREVWOworCWZyYW1lLT5zdGF0dXMgPSAtRVhERVY7CisKKwkvKiBjYWxjIGFjdHVhbCBsZW5ndGggKi8KKwlmcmFtZS0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwkvKiBVcGRhdGUgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8KKwl3aGlsZSAoZXBfcmluZy0+ZGVxdWV1ZSAhPSB0ZC0+bGFzdF90cmIpCisJCWluY19kZXEoeGhjaSwgZXBfcmluZywgZmFsc2UpOworCWluY19kZXEoeGhjaSwgZXBfcmluZywgZmFsc2UpOworCisJcmV0dXJuIGZpbmlzaF90ZCh4aGNpLCB0ZCwgTlVMTCwgZXZlbnQsIGVwLCBzdGF0dXMsIHRydWUpOworfQorCiAvKgogICogUHJvY2VzcyBidWxrIGFuZCBpbnRlcnJ1cHQgdGRzLCB1cGRhdGUgdXJiIHN0YXR1cyBhbmQgYWN0dWFsX2xlbmd0aC4KICAqLwpAQCAtMjAyNCwzNiArMjA2MSw0MiBAQAogCQl9CiAKIAkJdGQgPSBsaXN0X2VudHJ5KGVwX3JpbmctPnRkX2xpc3QubmV4dCwgc3RydWN0IHhoY2lfdGQsIHRkX2xpc3QpOworCiAJCS8qIElzIHRoaXMgYSBUUkIgaW4gdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgVEQ/ICovCiAJCWV2ZW50X3NlZyA9IHRyYl9pbl90ZChlcF9yaW5nLT5kZXFfc2VnLCBlcF9yaW5nLT5kZXF1ZXVlLAogCQkJCXRkLT5sYXN0X3RyYiwgZXZlbnRfZG1hKTsKLQkJaWYgKGV2ZW50X3NlZyAmJiBlcC0+c2tpcCkgeworCQlpZiAoIWV2ZW50X3NlZykgeworCQkJaWYgKCFlcC0+c2tpcCB8fAorCQkJICAgICF1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZ0ZC0+dXJiLT5lcC0+ZGVzYykpIHsKKwkJCQkvKiBIQyBpcyBidXN0ZWQsIGdpdmUgdXAhICovCisJCQkJeGhjaV9lcnIoeGhjaSwKKwkJCQkJIkVSUk9SIFRyYW5zZmVyIGV2ZW50IFRSQiBETUEgcHRyIG5vdCAiCisJCQkJCSJwYXJ0IG9mIGN1cnJlbnQgVERcbiIpOworCQkJCXJldHVybiAtRVNIVVRET1dOOworCQkJfQorCisJCQlyZXQgPSBza2lwX2lzb2NfdGQoeGhjaSwgdGQsIGV2ZW50LCBlcCwgJnN0YXR1cyk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKworCQlpZiAoZXAtPnNraXApIHsKIAkJCXhoY2lfZGJnKHhoY2ksICJGb3VuZCB0ZC4gQ2xlYXIgc2tpcCBmbGFnLlxuIik7CiAJCQllcC0+c2tpcCA9IGZhbHNlOwogCQl9Ci0JCWlmICghZXZlbnRfc2VnICYmCi0JCSAgICghZXAtPnNraXAgfHwgIXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJnRkLT51cmItPmVwLT5kZXNjKSkpIHsKLQkJCS8qIEhDIGlzIGJ1c3RlZCwgZ2l2ZSB1cCEgKi8KLQkJCXhoY2lfZXJyKHhoY2ksICJFUlJPUiBUcmFuc2ZlciBldmVudCBUUkIgRE1BIHB0ciBub3QgIgotCQkJCQkicGFydCBvZiBjdXJyZW50IFREXG4iKTsKLQkJCXJldHVybiAtRVNIVVRET1dOOwotCQl9CiAKLQkJaWYgKGV2ZW50X3NlZykgewotCQkJZXZlbnRfdHJiID0gJmV2ZW50X3NlZy0+dHJic1soZXZlbnRfZG1hIC0KLQkJCQkJIGV2ZW50X3NlZy0+ZG1hKSAvIHNpemVvZigqZXZlbnRfdHJiKV07Ci0JCQkvKgotCQkJICogTm8tb3AgVFJCIHNob3VsZCBub3QgdHJpZ2dlciBpbnRlcnJ1cHRzLgotCQkJICogSWYgZXZlbnRfdHJiIGlzIGEgbm8tb3AgVFJCLCBpdCBtZWFucyB0aGUKLQkJCSAqIGNvcnJlc3BvbmRpbmcgVEQgaGFzIGJlZW4gY2FuY2VsbGVkLiBKdXN0IGlnbm9yZQotCQkJICogdGhlIFRELgotCQkJICovCi0JCQlpZiAoKGV2ZW50X3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmIFRSQl9UWVBFX0JJVE1BU0spCi0JCQkJCSA9PSBUUkJfVFlQRShUUkJfVFJfTk9PUCkpIHsKLQkJCQl4aGNpX2RiZyh4aGNpLCAiZXZlbnRfdHJiIGlzIGEgbm8tb3AgVFJCLiAiCi0JCQkJCQkiU2tpcCBpdFxuIik7Ci0JCQkJZ290byBjbGVhbnVwOwotCQkJfQorCQlldmVudF90cmIgPSAmZXZlbnRfc2VnLT50cmJzWyhldmVudF9kbWEgLSBldmVudF9zZWctPmRtYSkgLworCQkJCQkJc2l6ZW9mKCpldmVudF90cmIpXTsKKwkJLyoKKwkJICogTm8tb3AgVFJCIHNob3VsZCBub3QgdHJpZ2dlciBpbnRlcnJ1cHRzLgorCQkgKiBJZiBldmVudF90cmIgaXMgYSBuby1vcCBUUkIsIGl0IG1lYW5zIHRoZQorCQkgKiBjb3JyZXNwb25kaW5nIFREIGhhcyBiZWVuIGNhbmNlbGxlZC4gSnVzdCBpZ25vcmUKKwkJICogdGhlIFRELgorCQkgKi8KKwkJaWYgKChldmVudF90cmItPmdlbmVyaWMuZmllbGRbM10gJiBUUkJfVFlQRV9CSVRNQVNLKQorCQkJCSA9PSBUUkJfVFlQRShUUkJfVFJfTk9PUCkpIHsKKwkJCXhoY2lfZGJnKHhoY2ksCisJCQkJICJldmVudF90cmIgaXMgYSBuby1vcCBUUkIuIFNraXAgaXRcbiIpOworCQkJZ290byBjbGVhbnVwOwogCQl9CiAKIAkJLyogTm93IHVwZGF0ZSB0aGUgdXJiJ3MgYWN0dWFsX2xlbmd0aCBhbmQgZ2l2ZSBiYWNrIHRvCkBAIC0zMTI2LDYgKzMxNjksMTIgQEAKIAkJfQogCX0KIAorCWlmICh4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDApIHsKKwkJaWYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfQU1EX1BMTF9GSVgpCisJCQl1c2JfYW1kX3F1aXJrX3BsbF9kaXNhYmxlKCk7CisJfQorCXhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMrKzsKKwogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCiAJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKaW5kZXggOWEzNjQ1Zi4uODFiOTc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKQEAgLTU1MCw2ICs1NTAsOSBAQAogCWRlbF90aW1lcl9zeW5jKCZ4aGNpLT5ldmVudF9yaW5nX3RpbWVyKTsKICNlbmRpZgogCisJaWYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfQU1EX1BMTF9GSVgpCisJCXVzYl9hbWRfZGV2X3B1dCgpOworCiAJeGhjaV9kYmcoeGhjaSwgIi8vIERpc2FibGluZyBldmVudCByaW5nIGludGVycnVwdHNcbiIpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOwogCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAgJiB+U1RTX0VJTlQsICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOwpAQCAtNzQxLDcgKzc0NCw3IEBACiAJaW50CQkJcmV0dmFsOwogCiAJLyogV2FpdCBhIGJpdCBpZiBlaXRoZXIgb2YgdGhlIHJvb3RodWJzIG5lZWQgdG8gc2V0dGxlIGZyb20gdGhlCi0JICogdHJhbnNpc3Rpb24gaW50byBidXMgc3VzcGVuZC4KKwkgKiB0cmFuc2l0aW9uIGludG8gYnVzIHN1c3BlbmQuCiAJICovCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHhoY2ktPmJ1c19zdGF0ZVswXS5uZXh0X3N0YXRlY2hhbmdlKSB8fAogCQkJdGltZV9iZWZvcmUoamlmZmllcywKQEAgLTc3MSw3ICs3NzQsOSBAQAogCiAJLyogSWYgcmVzdG9yZSBvcGVyYXRpb24gZmFpbHMsIHJlLWluaXRpYWxpemUgdGhlIEhDIGR1cmluZyByZXN1bWUgKi8KIAlpZiAoKHRlbXAgJiBTVFNfU1JFKSB8fCBoaWJlcm5hdGVkKSB7Ci0JCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CisJCS8qIExldCB0aGUgVVNCIGNvcmUga25vdyBfYm90aF8gcm9vdGh1YnMgbG9zdCBwb3dlci4gKi8KKwkJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoeGhjaS0+bWFpbl9oY2QtPnNlbGYucm9vdF9odWIpOworCQl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcih4aGNpLT5zaGFyZWRfaGNkLT5zZWxmLnJvb3RfaHViKTsKIAogCQl4aGNpX2RiZyh4aGNpLCAiU3RvcCBIQ0RcbiIpOwogCQl4aGNpX2hhbHQoeGhjaSk7CkBAIC0yMDcyLDcgKzIwNzcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJdmRldiA9IHhoY2ktPmRldnNbdWRldi0+c2xvdF9pZF07Ci0JLyogTWFyayBlYWNoIGVuZHBvaW50IGFzIGJlaW5nIGluIHRyYW5zaXN0aW9uLCBzbworCS8qIE1hcmsgZWFjaCBlbmRwb2ludCBhcyBiZWluZyBpbiB0cmFuc2l0aW9uLCBzbwogCSAqIHhoY2lfdXJiX2VucXVldWUoKSB3aWxsIHJlamVjdCBhbGwgVVJCcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2VwczsgaSsrKSB7CkBAIC0yMzg2LDEwICsyMzkxLDE4IEBACiAJLyogRXZlcnl0aGluZyBidXQgZW5kcG9pbnQgMCBpcyBkaXNhYmxlZCwgc28gZnJlZSBvciBjYWNoZSB0aGUgcmluZ3MuICovCiAJbGFzdF9mcmVlZF9lbmRwb2ludCA9IDE7CiAJZm9yIChpID0gMTsgaSA8IDMxOyArK2kpIHsKLQkJaWYgKCF2aXJ0X2Rldi0+ZXBzW2ldLnJpbmcpCi0JCQljb250aW51ZTsKLQkJeGhjaV9mcmVlX29yX2NhY2hlX2VuZHBvaW50X3JpbmcoeGhjaSwgdmlydF9kZXYsIGkpOwotCQlsYXN0X2ZyZWVkX2VuZHBvaW50ID0gaTsKKwkJc3RydWN0IHhoY2lfdmlydF9lcCAqZXAgPSAmdmlydF9kZXYtPmVwc1tpXTsKKworCQlpZiAoZXAtPmVwX3N0YXRlICYgRVBfSEFTX1NUUkVBTVMpIHsKKwkJCXhoY2lfZnJlZV9zdHJlYW1faW5mbyh4aGNpLCBlcC0+c3RyZWFtX2luZm8pOworCQkJZXAtPnN0cmVhbV9pbmZvID0gTlVMTDsKKwkJCWVwLT5lcF9zdGF0ZSAmPSB+RVBfSEFTX1NUUkVBTVM7CisJCX0KKworCQlpZiAoZXAtPnJpbmcpIHsKKwkJCXhoY2lfZnJlZV9vcl9jYWNoZV9lbmRwb2ludF9yaW5nKHhoY2ksIHZpcnRfZGV2LCBpKTsKKwkJCWxhc3RfZnJlZWRfZW5kcG9pbnQgPSBpOworCQl9CiAJfQogCXhoY2lfZGJnKHhoY2ksICJPdXRwdXQgY29udGV4dCBhZnRlciBzdWNjZXNzZnVsIHJlc2V0IGRldmljZSBjbWQ6XG4iKTsKIAl4aGNpX2RiZ19jdHgoeGhjaSwgdmlydF9kZXYtPm91dF9jdHgsIGxhc3RfZnJlZWRfZW5kcG9pbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCA3MTFkZTI1Li5iYTFiZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtMzAsNiArMzAsNyBAQAogCiAvKiBDb2RlIHNoYXJpbmcgYmV0d2VlbiBwY2ktcXVpcmtzIGFuZCB4aGNpIGhjZCAqLwogI2luY2x1ZGUJInhoY2ktZXh0LWNhcHMuaCIKKyNpbmNsdWRlICJwY2ktcXVpcmtzLmgiCiAKIC8qIHhIQ0kgUENJIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCiAjZGVmaW5lIFhIQ0lfU0JSTl9PRkZTRVQJKDB4NjApCkBAIC0yMzIsNyArMjMzLDcgQEAKICAqIG5vdGlmaWNhdGlvbiB0eXBlIHRoYXQgbWF0Y2hlcyBhIGJpdCBzZXQgaW4gdGhpcyBiaXQgZmllbGQuCiAgKi8KICNkZWZpbmUJREVWX05PVEVfTUFTSwkJKDB4ZmZmZikKLSNkZWZpbmUgRU5BQkxFX0RFVl9OT1RFKHgpCSgxIDw8IHgpCisjZGVmaW5lIEVOQUJMRV9ERVZfTk9URSh4KQkoMSA8PCAoeCkpCiAvKiBNb3N0IG9mIHRoZSBkZXZpY2Ugbm90aWZpY2F0aW9uIHR5cGVzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRlYnVnLgogICogU1cgZG9lcyBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gZnVuY3Rpb24gd2FrZSBub3RpZmljYXRpb25zLgogICovCkBAIC0zNDgsNiArMzQ5LDkgQEAKIC8qIEluaXRpYXRlIGEgd2FybSBwb3J0IHJlc2V0IC0gY29tcGxldGUgd2hlbiBQT1JUX1dSQyBpcyAnMScgKi8KICNkZWZpbmUgUE9SVF9XUgkJKDEgPDwgMzEpCiAKKy8qIFdlIG1hcmsgZHVwbGljYXRlIGVudHJpZXMgd2l0aCAtMSAqLworI2RlZmluZSBEVVBMSUNBVEVfRU5UUlkgKCh1OCkoLTEpKQorCiAvKiBQb3J0IFBvd2VyIE1hbmFnZW1lbnQgU3RhdHVzIGFuZCBDb250cm9sIC0gcG9ydF9wb3dlcl9iYXNlIGJpdG1hc2tzICovCiAvKiBJbmFjdGl2aXR5IHRpbWVyIHZhbHVlIGZvciB0cmFuc2l0aW9ucyBpbnRvIFUxLCBpbiBtaWNyb3NlY29uZHMuCiAgKiBUaW1lb3V0IGNhbiBiZSB1cCB0byAxMjd1cy4gIDB4RkYgbWVhbnMgYW4gaW5maW5pdGUgdGltZW91dC4KQEAgLTYwMSwxMSArNjA1LDExIEBACiAjZGVmaW5lIEVQX1NUQVRFX1NUT1BQRUQJMwogI2RlZmluZSBFUF9TVEFURV9FUlJPUgkJNAogLyogTXVsdCAtIE1heCBudW1iZXIgb2YgYnVydHN0IHdpdGhpbiBhbiBpbnRlcnZhbCwgaW4gRVAgY29tcGFuaW9uIGRlc2MuICovCi0jZGVmaW5lIEVQX01VTFQocCkJCSgocCAmIDB4MykgPDwgOCkKKyNkZWZpbmUgRVBfTVVMVChwKQkJKCgocCkgJiAweDMpIDw8IDgpCiAvKiBiaXRzIDEwOjE0IGFyZSBNYXggUHJpbWFyeSBTdHJlYW1zICovCiAvKiBiaXQgMTUgaXMgTGluZWFyIFN0cmVhbSBBcnJheSAqLwogLyogSW50ZXJ2YWwgLSBwZXJpb2QgYmV0d2VlbiByZXF1ZXN0cyB0byBhbiBlbmRwb2ludCAtIDEyNXUgaW5jcmVtZW50cy4gKi8KLSNkZWZpbmUgRVBfSU5URVJWQUwocCkJCSgocCAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBFUF9JTlRFUlZBTChwKQkJKCgocCkgJiAweGZmKSA8PCAxNikKICNkZWZpbmUgRVBfSU5URVJWQUxfVE9fVUZSQU1FUyhwKQkJKDEgPDwgKCgocCkgPj4gMTYpICYgMHhmZikpCiAjZGVmaW5lIEVQX01BWFBTVFJFQU1TX01BU0sJKDB4MWYgPDwgMTApCiAjZGVmaW5lIEVQX01BWFBTVFJFQU1TKHApCSgoKHApIDw8IDEwKSAmIEVQX01BWFBTVFJFQU1TX01BU0spCkBAIC04NzMsNyArODc3LDcgQEAKICNkZWZpbmUgQ09NUF9DTURfQUJPUlQJMjUKIC8qIFN0b3BwZWQgLSB0cmFuc2ZlciB3YXMgdGVybWluYXRlZCBieSBhIHN0b3AgZW5kcG9pbnQgY29tbWFuZCAqLwogI2RlZmluZSBDT01QX1NUT1AJMjYKLS8qIFNhbWUgYXMgQ09NUF9FUF9TVE9QUEVELCBidXQgdGhlIHRyYW5zZmVyZWQgbGVuZ3RoIGluIHRoZSBldmVudCBpcyBpbnZhbGlkICovCisvKiBTYW1lIGFzIENPTVBfRVBfU1RPUFBFRCwgYnV0IHRoZSB0cmFuc2ZlcnJlZCBsZW5ndGggaW4gdGhlIGV2ZW50IGlzIGludmFsaWQgKi8KICNkZWZpbmUgQ09NUF9TVE9QX0lOVkFMCTI3CiAvKiBDb250cm9sIEFib3J0IEVycm9yIC0gRGVidWcgQ2FwYWJpbGl0eSAtIGNvbnRyb2wgcGlwZSBhYm9ydGVkICovCiAjZGVmaW5lIENPTVBfREJHX0FCT1JUCTI4CkBAIC0xMjc2LDYgKzEyODAsNyBAQAogI2RlZmluZQlYSENJX0xJTktfVFJCX1FVSVJLCSgxIDw8IDApCiAjZGVmaW5lIFhIQ0lfUkVTRVRfRVBfUVVJUksJKDEgPDwgMSkKICNkZWZpbmUgWEhDSV9ORUNfSE9TVAkJKDEgPDwgMikKKyNkZWZpbmUgWEhDSV9BTURfUExMX0ZJWAkoMSA8PCAzKQogCS8qIFRoZXJlIGFyZSB0d28gcm9vdGh1YnMgdG8ga2VlcCB0cmFjayBvZiBidXMgc3VzcGVuZCBpbmZvIGZvciAqLwogCXN0cnVjdCB4aGNpX2J1c19zdGF0ZSAgIGJ1c19zdGF0ZVsyXTsKIAkvKiBJcyBlYWNoIHhIQ0kgcm9vdGh1YiBwb3J0IGEgVVNCIDMuMCwgVVNCIDIuMCwgb3IgVVNCIDEuMSBwb3J0PyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKaW5kZXggYzkwYzg5ZC4uYTAwMzc5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCkBAIC02OSw3ICs2OSw3IEBACiAgKgkyMDAwMDUxMyBhZGRlZCBJRHMgZm9yIGFsbCBwcm9kdWN0cyBzdXBwb3J0ZWQgYnkgV2luZG93cyBkcml2ZXIgKGpvaG4pCiAgKgkyMDAwMDUxNCBSZXdyb3RlIG10c19zY3NpX3F1ZXVlY29tbWFuZCB0byB1c2UgVVJCcyAoam9obikKICAqCTIwMDAwNTE0IFZlcnNpb24gMC4wLjhqCi0gKiAgICAgIDIwMDAwNTE0IEZpeCByZXBvcnRpbmcgb2Ygbm9uLWV4aXN0YW50IGRldmljZXMgdG8gU0NTSSBsYXllciAoam9obikKKyAqICAgICAgMjAwMDA1MTQgRml4IHJlcG9ydGluZyBvZiBub24tZXhpc3RlbnQgZGV2aWNlcyB0byBTQ1NJIGxheWVyIChqb2huKQogICoJMjAwMDA1MTQgQWRkZWQgTVRTX0RFQlVHX0lOVCAoam9obikKICAqCTIwMDAwNTE0IENoYW5nZWQgInVzYi1taWNyb3RlayIgdG8gIm1pY3JvdGVrIiBmb3IgY29uc2lzdGVuY3kgKGpvaG4pCiAgKgkyMDAwMDUxNCBTdHVwaWQgYnVnIGZpeGVzIChqb2huKQpAQCAtNTU3LDE0ICs1NTcsMTQgQEAKIAogCWlmICggIW1lbWNtcCggc3JiLT5jbW5kLCBtdHNfcmVhZF9pbWFnZV9zaWcsIG10c19yZWFkX2ltYWdlX3NpZ19sZW4gKQogKSB7IAkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX2ltYWdlKTsKLQkJTVRTX0RFQlVHKCAidHJhbnNmZXJpbmcgZnJvbSBkZXNjLT5lcF9pbWFnZSA9PSAlZFxuIiwKKwkJTVRTX0RFQlVHKCAidHJhbnNmZXJyaW5nIGZyb20gZGVzYy0+ZXBfaW1hZ2UgPT0gJWRcbiIsCiAJCQkgICAoaW50KWRlc2MtPmVwX2ltYWdlICk7CiAJfSBlbHNlIGlmICggTVRTX0RJUkVDVElPTl9JU19JTihzcmItPmNtbmRbMF0pICkgewogCQkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX3Jlc3BvbnNlKTsKLQkJCU1UU19ERUJVRyggInRyYW5zZmVyaW5nIGZyb20gZGVzYy0+ZXBfcmVzcG9uc2UgPT0gJWRcbiIsCisJCQlNVFNfREVCVUcoICJ0cmFuc2ZlcnJpbmcgZnJvbSBkZXNjLT5lcF9yZXNwb25zZSA9PSAlZFxuIiwKIAkJCQkgICAoaW50KWRlc2MtPmVwX3Jlc3BvbnNlKTsKIAl9IGVsc2UgewotCQlNVFNfREVCVUcoInRyYW5zZmVyaW5nIHRvIGRlc2MtPmVwX291dCA9PSAlZFxuIiwKKwkJTVRTX0RFQlVHKCJ0cmFuc2ZlcnJpbmcgdG8gZGVzYy0+ZXBfb3V0ID09ICVkXG4iLAogCQkJICAoaW50KWRlc2MtPmVwX291dCk7CiAJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGVzYy0+dXNiX2RldixkZXNjLT5lcF9vdXQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCmluZGV4IGU1NzNlNDcwNC4uYTIxOTBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCkBAIC00MCw3ICs0MCw3IEBACiAjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUwogI2RlZmluZSBJT1dBUlJJT1JfTUlOT1JfQkFTRQkwCiAjZWxzZQotI2RlZmluZSBJT1dBUlJJT1JfTUlOT1JfQkFTRQkyMDgJLy8gU0tFTEVUT05fTUlOT1JfQkFTRSAxOTIgKyAxNiwgbm90IG9mZmljYWwgeWV0CisjZGVmaW5lIElPV0FSUklPUl9NSU5PUl9CQVNFCTIwOAkvLyBTS0VMRVRPTl9NSU5PUl9CQVNFIDE5MiArIDE2LCBub3Qgb2ZmaWNpYWwgeWV0CiAjZW5kaWYKIAogLyogaW50ZXJydXB0IGlucHV0IHF1ZXVlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA0Y2JiN2U0Li43NDA3M2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0xNCw3ICsxNCw3IEBACiAJc2VsZWN0IFRXTDQwMzBfVVNCIGlmIE1BQ0hfT01BUF8zNDMwU0RQCiAJc2VsZWN0IFRXTDYwMzBfVVNCIGlmIE1BQ0hfT01BUF80NDMwU0RQIHx8IE1BQ0hfT01BUDRfUEFOREEKIAlzZWxlY3QgVVNCX09UR19VVElMUwotCXRyaXN0YXRlICdJbnZlbnRyYSBIaWdoc3BlZWQgRHVhbCBSb2xlIENvbnRyb2xsZXIgKFRJLCBBREksIC4uLiknCisJYm9vbCAnSW52ZW50cmEgSGlnaHNwZWVkIER1YWwgUm9sZSBDb250cm9sbGVyIChUSSwgQURJLCAuLi4pJwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91ciBzeXN0ZW0gaGFzIGEgZHVhbCByb2xlIGhpZ2ggc3BlZWQgVVNCCiAJICBjb250cm9sbGVyIGJhc2VkIG9uIHRoZSBNZW50b3IgR3JhcGhpY3Mgc2lsaWNvbiBJUC4gIFRoZW4KQEAgLTMwLDggKzMwLDggQEAKIAogCSAgSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdGhpcyBpcywgcGxlYXNlIHNheSBOLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOyB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAibXVzYi1oZHJjIi4KKyMJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOyB0aGUKKyMJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgIm11c2ItaGRyYyIuCiAKIGNob2ljZQogCXByb21wdCAiUGxhdGZvcm0gR2x1ZSBMYXllciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCA1MjMxMmU4Li44ZTJhMWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgIm11c2JfY29yZS5oIgorI2luY2x1ZGUgIm11c2Joc2RtYS5oIgogI2luY2x1ZGUgImJsYWNrZmluLmgiCiAKIHN0cnVjdCBiZmluX2dsdWUgewpAQCAtMzMyLDYgKzMzMywyNyBAQAogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW50IGJmaW5fbXVzYl9hZGp1c3RfY2hhbm5lbF9wYXJhbXMoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsLAorCQkJCXUxNiBwYWNrZXRfc3osIHU4ICptb2RlLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9hZGRyLCB1MzIgKmxlbikKK3sKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCisJLyoKKwkgKiBBbm9tYWx5IDA1MDAwNDUwIG1pZ2h0IGNhdXNlIGRhdGEgY29ycnVwdGlvbiB3aGVuIHVzaW5nIERNQQorCSAqIE1PREUgMSB0cmFuc21pdHMgd2l0aCBzaG9ydCBwYWNrZXQuICBTbyB0byB3b3JrIGFyb3VuZCB0aGlzLAorCSAqIHdlIHRydW5jYXRlIGFsbCBNT0RFIDEgdHJhbnNmZXJzIGRvd24gdG8gYSBtdWx0aXBsZSBvZiB0aGUKKwkgKiBtYXggcGFja2V0IHNpemUsIGFuZCB0aGVuIGRvIHRoZSBsYXN0IHNob3J0IHBhY2tldCB0cmFuc2ZlcgorCSAqIChpZiB0aGVyZSBpcyBhbnkpIHVzaW5nIE1PREUgMC4KKwkgKi8KKwlpZiAoQU5PTUFMWV8wNTAwMDQ1MCkgeworCQlpZiAobXVzYl9jaGFubmVsLT50cmFuc21pdCAmJiAqbW9kZSA9PSAxKQorCQkJKmxlbiA9ICpsZW4gLSAoKmxlbiAlIHBhY2tldF9zeik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGJmaW5fbXVzYl9yZWdfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAlpZiAoQU5PTUFMWV8wNTAwMDM0NikgewpAQCAtNDMwLDYgKzQ1Miw4IEBACiAKIAkudmJ1c19zdGF0dXMJPSBiZmluX211c2JfdmJ1c19zdGF0dXMsCiAJLnNldF92YnVzCT0gYmZpbl9tdXNiX3NldF92YnVzLAorCisJLmFkanVzdF9jaGFubmVsX3BhcmFtcyA9IGJmaW5fbXVzYl9hZGp1c3RfY2hhbm5lbF9wYXJhbXMsCiB9OwogCiBzdGF0aWMgdTY0IGJmaW5fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKaW5kZXggZGU1NWEzYy4uYWI0MzRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwpAQCAtNTk3LDEyICs1OTcsMTIgQEAKIAkJbGVuZ3RoID0gbWluKG5fYmRzICogbWF4cGFja2V0LCBsZW5ndGgpOwogCX0KIAotCURCRyg0LCAiVFggRE1BJWQsIHBrdFN6ICVkICVzIGJkcyAlZCBkbWEgMHgleCBsZW4gJXVcbiIsCisJREJHKDQsICJUWCBETUElZCwgcGt0U3ogJWQgJXMgYmRzICVkIGRtYSAweCVsbHggbGVuICV1XG4iLAogCQkJdHgtPmluZGV4LAogCQkJbWF4cGFja2V0LAogCQkJcm5kaXMgPyAicm5kaXMiIDogInRyYW5zcGFyZW50IiwKIAkJCW5fYmRzLAotCQkJYWRkciwgbGVuZ3RoKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuZ3RoKTsKIAogCWNwcGlfcm5kaXNfdXBkYXRlKHR4LCAwLCBtdXNiLT5jdHJsX2Jhc2UsIHJuZGlzKTsKIApAQCAtODIwLDcgKzgyMCw3IEBACiAJbGVuZ3RoID0gbWluKG5fYmRzICogbWF4cGFja2V0LCBsZW5ndGgpOwogCiAJREJHKDQsICJSWCBETUElZCBzZWcsIG1heHAgJWQgJXMgYmRzICVkIChjbnQgJWQpICIKLQkJCSJkbWEgMHgleCBsZW4gJXUgJXUvJXVcbiIsCisJCQkiZG1hIDB4JWxseCBsZW4gJXUgJXUvJXVcbiIsCiAJCQlyeC0+aW5kZXgsIG1heHBhY2tldCwKIAkJCW9uZXBhY2tldAogCQkJCT8gKGlzX3JuZGlzID8gInJuZGlzIiA6ICJvbmVwYWNrZXQiKQpAQCAtODI5LDcgKzgyOSw4IEBACiAJCQltdXNiX3JlYWRsKHRpYmFzZSwKIAkJCQlEQVZJTkNJX1JYQ1BQSV9CVUZDTlQwX1JFRyArIChyeC0+aW5kZXggKiA0KSkKIAkJCQkJJiAweGZmZmYsCi0JCQlhZGRyLCBsZW5ndGgsIHJ4LT5jaGFubmVsLmFjdHVhbF9sZW4sIHJ4LT5idWZfbGVuKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuZ3RoLAorCQkJcngtPmNoYW5uZWwuYWN0dWFsX2xlbiwgcngtPmJ1Zl9sZW4pOwogCiAJLyogb25seSBxdWV1ZSBvbmUgc2VnbWVudCBhdCBhIHRpbWUsIHNpbmNlIHRoZSBoYXJkd2FyZSBwcmV2ZW50cwogCSAqIGNvcnJlY3QgcXVldWUgc2h1dGRvd24gYWZ0ZXIgdW5leHBlY3RlZCBzaG9ydCBwYWNrZXRzCkBAIC0xMDM5LDkgKzEwNDAsOSBAQAogCQlpZiAoIWNvbXBsZXRlZCAmJiAoYmQtPmh3X29wdGlvbnMgJiBDUFBJX09XTl9TRVQpKQogCQkJYnJlYWs7CiAKLQkJREJHKDUsICJDL1JYQkQgJTA4eDogbnh0ICUwOHggYnVmICUwOHggIgorCQlEQkcoNSwgIkMvUlhCRCAlbGx4OiBueHQgJTA4eCBidWYgJTA4eCAiCiAJCQkib2ZmLmxlbiAlMDh4IG9wdC5sZW4gJTA4eCAoJWQpXG4iLAotCQkJYmQtPmRtYSwgYmQtPmh3X25leHQsIGJkLT5od19idWZwLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliZC0+ZG1hLCBiZC0+aHdfbmV4dCwgYmQtPmh3X2J1ZnAsCiAJCQliZC0+aHdfb2ZmX2xlbiwgYmQtPmh3X29wdGlvbnMsCiAJCQlyeC0+Y2hhbm5lbC5hY3R1YWxfbGVuKTsKIApAQCAtMTExMSwxMSArMTExMiwxMiBAQAogCQltdXNiX2VwX3NlbGVjdChjcHBpLT5tcmVncywgcngtPmluZGV4ICsgMSk7CiAJCWNzciA9IG11c2JfcmVhZHcocmVncywgTVVTQl9SWENTUik7CiAJCWlmIChjc3IgJiBNVVNCX1JYQ1NSX0RNQUVOQUIpIHsKLQkJCURCRyg0LCAibGlzdCVkICVwLyVwLCBsYXN0ICUwOHglcywgY3NyICUwNHhcbiIsCisJCQlEQkcoNCwgImxpc3QlZCAlcC8lcCwgbGFzdCAlbGx4JXMsIGNzciAlMDR4XG4iLAogCQkJCXJ4LT5pbmRleCwKIAkJCQlyeC0+aGVhZCwgcngtPnRhaWwsCiAJCQkJcngtPmxhc3RfcHJvY2Vzc2VkCi0JCQkJCT8gcngtPmxhc3RfcHJvY2Vzc2VkLT5kbWEKKwkJCQkJPyAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkJcngtPmxhc3RfcHJvY2Vzc2VkLT5kbWEKIAkJCQkJOiAwLAogCQkJCWNvbXBsZXRlZCA/ICIsIGNvbXBsZXRlZCIgOiAiIiwKIAkJCQljc3IpOwpAQCAtMTE2Nyw4ICsxMTY5LDExIEBACiAJdHggPSBtdXNiX3JlYWRsKHRpYmFzZSwgREFWSU5DSV9UWENQUElfTUFTS0VEX1JFRyk7CiAJcnggPSBtdXNiX3JlYWRsKHRpYmFzZSwgREFWSU5DSV9SWENQUElfTUFTS0VEX1JFRyk7CiAKLQlpZiAoIXR4ICYmICFyeCkKKwlpZiAoIXR4ICYmICFyeCkgeworCQlpZiAoY3BwaS0+aXJxKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gSVJRX05PTkU7CisJfQogCiAJREJHKDQsICJDUFBJIElSUSBUeCV4IFJ4JXhcbiIsIHR4LCByeCk7CiAKQEAgLTExOTksNyArMTIwNCw3IEBACiAJCSAqLwogCQlpZiAoTlVMTCA9PSBiZCkgewogCQkJREJHKDEsICJudWxsIEJEXG4iKTsKLQkJCXR4X3JhbS0+dHhfY29tcGxldGUgPSAwOworCQkJbXVzYl93cml0ZWwoJnR4X3JhbS0+dHhfY29tcGxldGUsIDAsIDApOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTQ1Miw3ICsxNDU3LDcgQEAKIAkJICogICAgY29tcGFyZSBtb2RlIGJ5IHdyaXRpbmcgMSB0byB0aGUgdHhfY29tcGxldGUgcmVnaXN0ZXIuCiAJCSAqLwogCQljcHBpX3Jlc2V0X3R4KHR4X3JhbSwgMSk7Ci0JCWNwcGlfY2gtPmhlYWQgPSAwOworCQljcHBpX2NoLT5oZWFkID0gTlVMTDsKIAkJbXVzYl93cml0ZWwoJnR4X3JhbS0+dHhfY29tcGxldGUsIDAsIDEpOwogCQljcHBpX2R1bXBfdHgoNSwgY3BwaV9jaCwgIiAoZG9uZSB0ZWFyZG93bikiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggNjMwYWU3Zi4uZjEwZmYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC0xMDMwLDYgKzEwMzAsNyBAQAogCXN0cnVjdCBtdXNiCSptdXNiID0gZGV2X3RvX211c2IoJnBkZXYtPmRldik7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMobXVzYi0+Y29udHJvbGxlcik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAltdXNiX3BsYXRmb3JtX2Rpc2FibGUobXVzYik7CiAJbXVzYl9nZW5lcmljX2Rpc2FibGUobXVzYik7CkBAIC0xMDQwLDYgKzEwNDEsNyBAQAogCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgMCk7CiAJbXVzYl9wbGF0Zm9ybV9leGl0KG11c2IpOwogCisJcG1fcnVudGltZV9wdXQobXVzYi0+Y29udHJvbGxlcik7CiAJLyogRklYTUUgcG93ZXIgZG93biAqLwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCA0YmQ5ZTIxLi4wZTA1M2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTI2MSw2ICsyNjEsNyBAQAogICogQHRyeV9pbGRlOgl0cmllcyB0byBpZGxlIHRoZSBJUAogICogQHZidXNfc3RhdHVzOiByZXR1cm5zIHZidXMgc3RhdHVzIGlmIHBvc3NpYmxlCiAgKiBAc2V0X3ZidXM6CWZvcmNlcyB2YnVzIHN0YXR1cworICogQGNoYW5uZWxfcHJvZ3JhbTogcHJlIGNoZWNrIGZvciBzdGFuZGFyZCBkbWEgY2hhbm5lbF9wcm9ncmFtIGZ1bmMKICAqLwogc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIHsKIAlpbnQJKCppbml0KShzdHJ1Y3QgbXVzYiAqbXVzYik7CkBAIC0yNzQsNiArMjc1LDEwIEBACiAKIAlpbnQJKCp2YnVzX3N0YXR1cykoc3RydWN0IG11c2IgKm11c2IpOwogCXZvaWQJKCpzZXRfdmJ1cykoc3RydWN0IG11c2IgKm11c2IsIGludCBvbik7CisKKwlpbnQJKCphZGp1c3RfY2hhbm5lbF9wYXJhbXMpKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQl1MTYgcGFja2V0X3N6LCB1OCAqbW9kZSwKKwkJCQlkbWFfYWRkcl90ICpkbWFfYWRkciwgdTMyICpsZW4pOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwppbmRleCA5ODUxOWM1Li5mNDdjMjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAkJCWlzX2RtYSA9IDE7CiAJCQljc3IgfD0gTVVTQl9UWENTUl9QX1daQ19CSVRTOwogCQkJY3NyICY9IH4oTVVTQl9UWENTUl9ETUFFTkFCIHwgTVVTQl9UWENTUl9QX1VOREVSUlVOIHwKLQkJCQkgTVVTQl9UWENTUl9UWFBLVFJEWSk7CisJCQkJIE1VU0JfVFhDU1JfVFhQS1RSRFkgfCBNVVNCX1RYQ1NSX0FVVE9TRVQpOwogCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWENTUiwgY3NyKTsKIAkJCS8qIEVuc3VyZSB3cml0ZWJ1ZmZlciBpcyBlbXB0eS4gKi8KIAkJCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9UWENTUik7CkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogCX0KIAogCS8qIGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGhhdmUgdGhlIHJlcXVlc3QsIGVhc3kgLi4uICovCi0JaWYgKG11c2JfZXAtPnJlcV9saXN0Lm5leHQgIT0gJnJlcXVlc3QtPmxpc3QgfHwgbXVzYl9lcC0+YnVzeSkKKwlpZiAobXVzYl9lcC0+cmVxX2xpc3QubmV4dCAhPSAmcmVxLT5saXN0IHx8IG11c2JfZXAtPmJ1c3kpCiAJCW11c2JfZ19naXZlYmFjayhtdXNiX2VwLCByZXF1ZXN0LCAtRUNPTk5SRVNFVCk7CiAKIAkvKiAuLi4gZWxzZSBhYm9ydCB0aGUgZG1hIHRyYW5zZmVyIC4uLiAqLwpAQCAtMTg4NywxMSArMTg4Nyw5IEBACiAJCQlvdGdfc2V0X3ZidXMobXVzYi0+eGNlaXYsIDEpOwogCiAJCWhjZC0+c2VsZi51c2VzX3Bpb19mb3JfY29udHJvbCA9IDE7Ci0KLQkJaWYgKG11c2ItPnhjZWl2LT5sYXN0X2V2ZW50ID09IFVTQl9FVkVOVF9OT05FKQotCQkJcG1fcnVudGltZV9wdXQobXVzYi0+Y29udHJvbGxlcik7Ci0KIAl9CisJaWYgKG11c2ItPnhjZWl2LT5sYXN0X2V2ZW50ID09IFVTQl9FVkVOVF9OT05FKQorCQlwbV9ydW50aW1lX3B1dChtdXNiLT5jb250cm9sbGVyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwppbmRleCAwMTQ0YTJkLi5kMjgxNzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKQEAgLTE2OSw2ICsxNjksMTQgQEAKIAlCVUdfT04oY2hhbm5lbC0+c3RhdHVzID09IE1VU0JfRE1BX1NUQVRVU19VTktOT1dOIHx8CiAJCWNoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSk7CiAKKwkvKiBMZXQgdGFyZ2V0cyBjaGVjay90d2VhayB0aGUgYXJndW1lbnRzICovCisJaWYgKG11c2ItPm9wcy0+YWRqdXN0X2NoYW5uZWxfcGFyYW1zKSB7CisJCWludCByZXQgPSBtdXNiLT5vcHMtPmFkanVzdF9jaGFubmVsX3BhcmFtcyhjaGFubmVsLAorCQkJcGFja2V0X3N6LCAmbW9kZSwgJmRtYV9hZGRyLCAmbGVuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJLyoKIAkgKiBUaGUgRE1BIGVuZ2luZSBpbiBSVEwxLjggYW5kIGFib3ZlIGNhbm5vdCBoYW5kbGUKIAkgKiBETUEgYWRkcmVzc2VzIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIGEgNCBieXRlIGJvdW5kYXJ5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCmluZGV4IDI1Y2I4YjAuLmU5ZTYwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKQEAgLTI1OSw5ICsyNTksMTAgQEAKIAljYXNlIFVTQl9FVkVOVF9WQlVTOgogCQlEQkcoNCwgIlZCVVMgQ29ubmVjdFxuIik7CiAKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKIAkJaWYgKG11c2ItPmdhZGdldF9kcml2ZXIpCiAJCQlwbV9ydW50aW1lX2dldF9zeW5jKG11c2ItPmNvbnRyb2xsZXIpOwotCisjZW5kaWYKIAkJb3RnX2luaXQobXVzYi0+eGNlaXYpOwogCQlicmVhazsKIApAQCAtMjY5LDcgKzI3MCw3IEBACiAJCURCRyg0LCAiVkJVUyBEaXNjb25uZWN0XG4iKTsKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwotCQlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikpCisJCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSB8fCBpc19wZXJpcGhlcmFsX2VuYWJsZWQobXVzYikpCiAJCQlpZiAobXVzYi0+Z2FkZ2V0X2RyaXZlcikKICNlbmRpZgogCQkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi91eDUwMC5jIGIvZHJpdmVycy91c2IvbXVzYi91eDUwMC5jCmluZGV4IGQ2Mzg0ZTQuLmY3ZTA0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvdXg1MDAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwLmMKQEAgLTkzLDYgKzkzLDggQEAKIAl9CiAKIAltdXNiLT5kZXYucGFyZW50CQk9ICZwZGV2LT5kZXY7CisJbXVzYi0+ZGV2LmRtYV9tYXNrCQk9IHBkZXYtPmRldi5kbWFfbWFzazsKKwltdXNiLT5kZXYuY29oZXJlbnRfZG1hX21hc2sJPSBwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2s7CiAKIAlnbHVlLT5kZXYJCQk9ICZwZGV2LT5kZXY7CiAJZ2x1ZS0+bXVzYgkJCT0gbXVzYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYwppbmRleCA4YzZmZGVmLi5lMjU3MDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCkBAIC0xNTMxLDcgKzE1MzEsNyBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGlzcCk7CiAJaXNwLT5jbGllbnQgPSBpMmM7CiAKLQkvKiB2ZXJpZnkgdGhlIGNoaXAgKHNob3VsZG4ndCBiZSBuZWNlc2FyeSkgKi8KKwkvKiB2ZXJpZnkgdGhlIGNoaXAgKHNob3VsZG4ndCBiZSBuZWNlc3NhcnkpICovCiAJc3RhdHVzID0gaXNwMTMwMV9nZXRfdTE2KGlzcCwgSVNQMTMwMV9WRU5ET1JfSUQpOwogCWlmIChzdGF0dXMgIT0gSTJDX1ZFTkRPUl9JRF9QSElMSVBTKSB7CiAJCWRldl9kYmcoJmkyYy0+ZGV2LCAibm90IHBoaWxpcHMgaWQ6ICVkXG4iLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2xhbmd3ZWxsX290Zy5jIGIvZHJpdmVycy91c2Ivb3RnL2xhbmd3ZWxsX290Zy5jCmluZGV4IDdmOWI4Y2QuLmU5NzNmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9sYW5nd2VsbF9vdGcuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvbGFuZ3dlbGxfb3RnLmMKQEAgLTU4MCw3ICs1ODAsNyBAQAogCQl0aW1lID0gVEJfQlVTX1NVU1BFTkQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9kYmcobG53LT5kZXYsICJ1bmtvd24gdGltZXIsIGNhbm5vdCBlbmFibGUgaXRcbiIpOworCQlkZXZfZGJnKGxudy0+ZGV2LCAidW5rbm93biB0aW1lciwgY2Fubm90IGVuYWJsZSBpdFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzODEsNyArMTM4MSw3IEBACiAJCQl9IGVsc2UgaWYgKCFpb3RnLT5oc20uYV9idXNfcmVxICYmIGlvdGctPm90Zy5ob3N0ICYmCiAJCQkJCWlvdGctPm90Zy5ob3N0LT5iX2hucF9lbmFibGUpIHsKIAkJCQkvKiBJdCBpcyBub3Qgc2FmZSBlbm91Z2ggdG8gZG8gYSBmYXN0Ci0JCQkJICogdHJhbnNpc3Rpb24gZnJvbSBBX1dBSVRfQkNPTiB0bworCQkJCSAqIHRyYW5zaXRpb24gZnJvbSBBX1dBSVRfQkNPTiB0bwogCQkJCSAqIEFfU1VTUEVORCAqLwogCQkJCW1zbGVlcCgxMDAwMCk7CiAJCQkJaWYgKGlvdGctPmhzbS5hX2J1c19yZXEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCmluZGV4IDBkYjZhY2UuLmFiYTIwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiBXaGVuIHJlYWRpbmcgdGhlIHByb2Nlc3MgaXMgYWxtb3N0IGVxdWFsIGV4Y2VwdCB0aGF0IHRoZSBoZWFkZXIgc3RhcnRzIHdpdGgKICAqIDB4MDAgMHgyMC4KICAqCi0gKiBUaGUgZGV2aWNlIHNpbXBseSBuZWVkIHNvbWUgc3R1ZmYgdG8gdW5kZXJzdGFuZCBkYXRhIGNvbW1pbmcgZnJvbSB0aGUgdXNiCisgKiBUaGUgZGV2aWNlIHNpbXBseSBuZWVkIHNvbWUgc3R1ZmYgdG8gdW5kZXJzdGFuZCBkYXRhIGNvbWluZyBmcm9tIHRoZSB1c2IKICAqIGJ1ZmZlcjogVGhlIEZpcnN0IGFuZCBTZWNvbmQgYnl0ZSBpcyB1c2VkIGZvciBhIEhlYWRlciwgdGhlIFRoaXJkIGFuZCBGb3VydGgKICAqIHRlbGxzIHRoZSAgZGV2aWNlIHRoZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gdGhlIHBhY2thZ2UgaG9sZHMuCiAgKiBQYWNrYWdlcyBhcmUgNjAgYnl0ZXMgbG9uZyBIZWFkZXIgU3R1ZmYuCkBAIC0zMCw3ICszMCw3IEBACiAgKiBvbmUuCiAgKgogICogVGhlIGRyaXZlciByZWdpc3RlcnMgaGltc2VsZiB3aXRoIHRoZSBVU0Itc2VyaWFsIGNvcmUgYW5kIHRoZSBVU0IgQ29yZS4gSSBoYWQKLSAqIHRvIGltcGxlbWVudCBhIHByb2JlIGZ1bmN0aW9uIGFnYWlucyBVU0Itc2VyaWFsLCBiZWNhdXNlIG90aGVyIHdheSwgdGhlCisgKiB0byBpbXBsZW1lbnQgYSBwcm9iZSBmdW5jdGlvbiBhZ2FpbnN0IFVTQi1zZXJpYWwsIGJlY2F1c2Ugb3RoZXIgd2F5LCB0aGUKICAqIGRyaXZlciB3YXMgYXR0YWNoaW5nIGhpbXNlbGYgdG8gYm90aCBpbnRlcmZhY2VzLiBJIGhhdmUgdHJ5ZWQgd2l0aCBkaWZmZXJlbnQKICAqIGNvbmZpZ3VyYXRpb25zIG9mIHVzYl9zZXJpYWxfZHJpdmVyIHdpdGggb3V0IGV4aXQsIG9ubHkgdGhlIHByb2JlIGZ1bmN0aW9uCiAgKiBjb3VsZCBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggNGRmM2UwYy4uMGYxMWFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUYyKSB9LCAvKiBDMTAwNyBIRiBiYW5kIFJGSUQgY29udHJvbGxlciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIxOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgSEFSUC0xICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjJCKSB9LCAvKiBNb2RlbSBFREdFKEdTTSkgQ29tYW5kZXIgMiAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODI2QikgfSwgLyogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4sIEZhc3R0cmF4IEdQUyBkZW1vc3RyYXRpb24gbW9kdWxlICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjZCKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiwgRmFzdHRyYXggR1BTIGRlbW9uc3RyYXRpb24gbW9kdWxlICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyRjkpIH0sIC8qIFByb2N5b24gQVZTICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCA5ODdlOWJmLi5kOTkwNmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqCiAgKiAgTG9ubmllIE1lbmRleiA8ZGlnbm9tZUBnbWFpbC5jb20+CiAgKiAgMDQtMTAtMjAwNAotICoJRHJpdmVyIG1vZGlmaWVkIHRvIHN1cHBvcnQgZHluYW1pYyBsaW5lIHNldHRpbmdzLiAgVmFyaW91cyBpbXByb3ZtZW50cworICoJRHJpdmVyIG1vZGlmaWVkIHRvIHN1cHBvcnQgZHluYW1pYyBsaW5lIHNldHRpbmdzLiAgVmFyaW91cyBpbXByb3ZlbWVudHMKICAqICAgICAgYW5kIGZlYXR1cmVzLgogICoKICAqICBOZWlsIFdoZWxjaGVsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IDY1OTY3YjMuLjRkZTZlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0xNyw3ICsxNyw3IEBACiAgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcwogICogZHJpdmVyCiAgKgotICogU2VlIGh0dHA6Ly9mdGRpLXVzYi1zaW8uc291cmNlZm9yZ2UubmV0IGZvciB1cHRvIGRhdGUgdGVzdGluZyBpbmZvCisgKiBTZWUgaHR0cDovL2Z0ZGktdXNiLXNpby5zb3VyY2Vmb3JnZS5uZXQgZm9yIHVwIHRvIGRhdGUgdGVzdGluZyBpbmZvCiAgKglhbmQgZXh0cmEgZG9jdW1lbnRhdGlvbgogICoKICAqIENoYW5nZSBlbnRyaWVzIGZyb20gMjAwNCBhbmQgZWFybGllciBjYW4gYmUgZm91bmQgaW4gdmVyc2lvbnMgb2YgdGhpcwpAQCAtMTUxLDYgKzE1MSw4IEBACiAgKiAvc3lzL2J1cy91c2IvZnRkaV9zaW8vbmV3X2lkLCB0aGVuIHNlbmQgcGF0Y2gvcmVwb3J0IQogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NUSV9NSU5JX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ1RJX05BTk9fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BTUMyMzJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQU5VU0JfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQU5EQVBURVJfUElEKSB9LApAQCAtNTI1LDYgKzUyNyw3IEBACiAJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM184X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSURURUNIX1ZJRCwgSURURUNIX0lEVDEyMjFVX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoT0NUX1ZJRCwgT0NUX1VTMTAxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoT0NUX1ZJRCwgT0NUX0RLMjAxX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSEVfVElSQTFfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX0hFX1RJUkExX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1VTQl9VSVJUX1BJRCksCkBAIC03ODcsNiArNzkwLDggQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIE1BUlZFTExfT1BFTlJEX1BJRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzgyMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzcyMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzczMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzg3MF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBNSlNHX0dFTkVSSUNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTUpTR19TUl9SQURJT19QSUQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKaW5kZXggYzU0M2U1NS4uZWZmZmMyMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTMwMCw2ICszMDAsOCBAQAogICogSGFtZWcgSE84MjAgYW5kIEhPODcwIGludGVyZmFjZSAodXNpbmcgVklEIDB4MDQwMykKICAqLwogI2RlZmluZSBIQU1FR19ITzgyMF9QSUQJCQkweGVkNzQKKyNkZWZpbmUgSEFNRUdfSE83MzBfUElECQkJMHhlZDczCisjZGVmaW5lIEhBTUVHX0hPNzIwX1BJRAkJCTB4ZWQ3MgogI2RlZmluZSBIQU1FR19ITzg3MF9QSUQJCQkweGVkNzEKIAogLyoKQEAgLTU3Miw2ICs1NzQsNyBAQAogLyogTm90ZTogT0NUIFVTMTAxIGlzIGFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoTlopIFhINjM4MSAqLwogLyogQWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChBdXMpIFhINjQ1MSAqLwogLyogQWxzbyByZWJhZGdlZCBhcyBTSUlHIEluYy4gbW9kZWwgVVMyMzA4IGhhcmR3YXJlIHZlcnNpb24gMSAqLworI2RlZmluZSBPQ1RfREsyMDFfUElECQkweDAxMDMJLyogT0NUIERLMjAxIFVTQiBkb2NraW5nIHN0YXRpb24gKi8KICNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCiAKIC8qCkBAIC0xMTQxLDMgKzExNDQsMTIgQEAKICNkZWZpbmUgUUlIQVJEV0FSRV9WSUQJCQkweDIwQjcKICNkZWZpbmUgTUlMS1lNSVNUT05FX0pUQUdTRVJJQUxfUElECTB4MDcxMwogCisvKgorICogQ1RJIEdtYkggUlM0ODUgQ29udmVydGVyIGh0dHA6Ly93d3cuY3RpLWxlYW4uY29tLworICovCisvKiBVU0ItNDg1LU1pbmkqLworI2RlZmluZSBGVERJX0NUSV9NSU5JX1BJRAkweEY2MDgKKy8qIFVTQi1OYW5vLTQ4NSovCisjZGVmaW5lIEZURElfQ1RJX05BTk9fUElECTB4RjYwQgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggZjFhZWRmYS4uYWJmMDk1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCkBAIC0xOTgxLDcgKzE5ODEsNyBAQAogCWlmIChjb2RlID09IElPU1BfU1RBVFVTX09QRU5fUlNQKSB7CiAJCWVkZ2VfcG9ydC0+dHhDcmVkaXRzID0gR0VUX1RYX0JVRkZFUl9TSVpFKGJ5dGUzKTsKIAkJZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMgPSBlZGdlX3BvcnQtPnR4Q3JlZGl0czsKLQkJZGJnKCIlcyAtIFBvcnQgJXUgT3BlbiBSZXNwb25zZSBJbml0YWwgTVNSID0gJTAyeCBUeEJ1ZmZlclNpemUgPSAlZCIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMiwgZWRnZV9wb3J0LT50eENyZWRpdHMpOworCQlkYmcoIiVzIC0gUG9ydCAldSBPcGVuIFJlc3BvbnNlIEluaXRpYWwgTVNSID0gJTAyeCBUeEJ1ZmZlclNpemUgPSAlZCIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMiwgZWRnZV9wb3J0LT50eENyZWRpdHMpOwogCQloYW5kbGVfbmV3X21zcihlZGdlX3BvcnQsIGJ5dGUyKTsKIAogCQkvKiBzZW5kIHRoZSBjdXJyZW50IGxpbmUgc2V0dGluZ3MgdG8gdGhlIHBvcnQgc28gd2UgYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5oCmluZGV4IGRjZWQ3ZWMuLmFkOWMxZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5oCkBAIC02OCw3ICs2OCw3IEBACiAjZGVmaW5lIFBST0NfU0VUX0NPTV9FTlRSWQkJMgogCiAKLS8qIFRoZSBmb2xsb3dpbmcgc3R1cmN0dXJlIGlzIHBhc3NlZCB0byB0aGUgd3JpdGUgKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUgd3JpdGUgKi8KIHN0cnVjdCBwcm9jV3JpdGUgewogCWludAlDb21tYW5kOwogCXVuaW9uIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKaW5kZXggZDg0MzQ5MS4uMGFhYzAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCiAJLyogV2UgY2FuIG9ubHkgc2VuZCBhIG1heGltdW0gb2YgMSBhbGlnbmVkIGJ5dGUgcGFnZSBhdCBhIHRpbWUgKi8KIAotCS8qIGNhbHVsYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiB0aGUgZmlyc3QgcGFnZSAqLworCS8qIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGZpcnN0IHBhZ2UgKi8KIAl3cml0ZV9sZW5ndGggPSBFUFJPTV9QQUdFX1NJWkUgLQogCQkJCShzdGFydF9hZGRyZXNzICYgKEVQUk9NX1BBR0VfU0laRSAtIDEpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCBkMmMwMTk2Li5iYTBkMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiBzdGF0aWMgaW50ICBtY3RfdTIzMl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyBpbnQgIG1jdF91MjMyX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwotc3RhdGljIGludCAgbWN0X3UyMzJfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50ICBtY3RfdTIzMl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCAgbWN0X3UyMzJfZ2V0X2ljb3VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3QgKmljb3VudCk7CkBAIC04NzQsNyArODc0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgIG1jdF91MjMyX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCAgbWN0X3UyMzJfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCURFRklORV9XQUlUKHdhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKaW5kZXggMjAxZjYwOS4uMWI1NjMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWlmICgoZGF0YVswXSA9PSAweDAwKSAmJiAoZGF0YVsxXSA9PSAweDAxKSkgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQkJLyogQ1RTIHN0YXR1cyBpbmZvbWF0aW9uIHBhY2thZ2UgKi8KKwkJCQkvKiBDVFMgc3RhdHVzIGluZm9ybWF0aW9uIHBhY2thZ2UgKi8KIAkJCQlpZiAoZGF0YVsyXSA9PSAweDAwKQogCQkJCQlwcml2LT5jdHMgPSBmYWxzZTsKIAkJCQllbHNlCkBAIC00MTMsNyArNDEzLDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IG9wdGljb25fdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IG9wdGljb25fdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA3NWM3ZjQ1Li5kNzdmZjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC00MDcsNiArNDA3LDEwIEBACiAvKiBPTkRBIE1UODI1VVAgSFNEUEEgMTQuMiBtb2RlbSAqLwogI2RlZmluZSBPTkRBX01UODI1VVAgICAgICAgICAweDAwMGIKIAorLyogU2Ftc3VuZyBwcm9kdWN0cyAqLworI2RlZmluZSBTQU1TVU5HX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgICAgICAgMHgwNGU4CisjZGVmaW5lIFNBTVNVTkdfUFJPRFVDVF9HVF9CMzczMCAgICAgICAgICAgICAgICAweDY4ODkKKwogLyogc29tZSBkZXZpY2VzIGludGVyZmFjZXMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGR1ZSB0byBhIG51bWJlciBvZiByZWFzb25zICovCiBlbnVtIG9wdGlvbl9ibGFja2xpc3RfcmVhc29uIHsKIAkJT1BUSU9OX0JMQUNLTElTVF9OT05FID0gMCwKQEAgLTk2OCw2ICs5NzIsNyBAQAogCXsgVVNCX0RFVklDRShPTElWRVRUSV9WRU5ET1JfSUQsIE9MSVZFVFRJX1BST0RVQ1RfT0xJQ0FSRDEwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ0VMT1RfVkVORE9SX0lELCBDRUxPVF9QUk9EVUNUX0NUNjgwTSkgfSwgLyogQ1QtNjUwIENETUEgNDUwIDF4RVZETyBtb2RlbSAqLwogCXsgVVNCX0RFVklDRShPTkRBX1ZFTkRPUl9JRCwgT05EQV9NVDgyNVVQKSB9LCAvKiBPTkRBIE1UODI1VVAgbW9kZW0gKi8KKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTVNVTkdfVkVORE9SX0lELCBTQU1TVU5HX1BST0RVQ1RfR1RfQjM3MzAsIFVTQl9DTEFTU19DRENfREFUQSwgMHgwMCwgMHgwMCkgfSwgLyogU2Ftc3VuZyBHVC1CMzczMC9HVC1CMzcxMCBMVEUgVVNCIG1vZGVtLiovCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYwppbmRleCA4ODU4MjAxLi41NGE5ZGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJaWZudW0gPSBpbnRmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAJZGJnKCJUaGlzIEludGVyZmFjZSA9ICVkIiwgaWZudW0pOwogCi0JZGF0YSA9IHNlcmlhbC0+cHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfd3dhbl9pbnRmX3ByaXZhdGUpLAorCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3d3YW5faW50Zl9wcml2YXRlKSwKIAkJCQkJIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzQsOCArMTM0LDEwIEBACiAJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoJmludGYtPmVuZHBvaW50WzFdLmRlc2MpKSB7CiAJCQlkYmcoIlFETCBwb3J0IGZvdW5kIik7CiAKLQkJCWlmIChzZXJpYWwtPmludGVyZmFjZS0+bnVtX2FsdHNldHRpbmcgPT0gMSkKLQkJCQlyZXR1cm4gMDsKKwkJCWlmIChzZXJpYWwtPmludGVyZmFjZS0+bnVtX2FsdHNldHRpbmcgPT0gMSkgeworCQkJCXJldHZhbCA9IDA7IC8qIFN1Y2Nlc3MgKi8KKwkJCQlicmVhazsKKwkJCX0KIAogCQkJcmV0dmFsID0gdXNiX3NldF9pbnRlcmZhY2Uoc2VyaWFsLT5kZXYsIGlmbnVtLCAxKTsKIAkJCWlmIChyZXR2YWwgPCAwKSB7CkBAIC0xNDUsNyArMTQ3LDYgQEAKIAkJCQlyZXR2YWwgPSAtRU5PREVWOwogCQkJCWtmcmVlKGRhdGEpOwogCQkJfQotCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCQlicmVhazsKIApAQCAtMTY2LDYgKzE2Nyw3IEBACiAJCQkJCSJDb3VsZCBub3Qgc2V0IGludGVyZmFjZSwgZXJyb3IgJWRcbiIsCiAJCQkJCXJldHZhbCk7CiAJCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCQlrZnJlZShkYXRhKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChpZm51bSA9PSAyKSB7CiAJCQlkYmcoIk1vZGVtIHBvcnQgZm91bmQiKTsKQEAgLTE3Nyw3ICsxNzksNiBAQAogCQkJCXJldHZhbCA9IC1FTk9ERVY7CiAJCQkJa2ZyZWUoZGF0YSk7CiAJCQl9Ci0JCQlyZXR1cm4gcmV0dmFsOwogCQl9IGVsc2UgaWYgKGlmbnVtPT0zKSB7CiAJCQkvKgogCQkJICogTk1FQSAoc2VyaWFsIGxpbmUgOTYwMCA4TjEpCkBAIC0xOTEsNiArMTkyLDcgQEAKIAkJCQkJIkNvdWxkIG5vdCBzZXQgaW50ZXJmYWNlLCBlcnJvciAlZFxuIiwKIAkJCQkJcmV0dmFsKTsKIAkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCWtmcmVlKGRhdGEpOwogCQkJfQogCQl9CiAJCWJyZWFrOwpAQCAtMTk5LDEyICsyMDEsMjcgQEAKIAkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKIAkJCSJ1bmtub3duIG51bWJlciBvZiBpbnRlcmZhY2VzOiAlZFxuIiwgbmludGYpOwogCQlrZnJlZShkYXRhKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHZhbCA9IC1FTk9ERVY7CiAJfQogCisJLyogU2V0IHNlcmlhbC0+cHJpdmF0ZSBpZiBub3QgcmV0dXJuaW5nIC1FTk9ERVYgKi8KKwlpZiAocmV0dmFsICE9IC1FTk9ERVYpCisJCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBkYXRhKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCitzdGF0aWMgdm9pZCBxY19yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwkvKiBDYWxsIHVzYl93d2FuIHJlbGVhc2UgJiBmcmVlIHRoZSBwcml2YXRlIGRhdGEgYWxsb2NhdGVkIGluIHFjcHJvYmUgKi8KKwl1c2Jfd3dhbl9yZWxlYXNlKHNlcmlhbCk7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworCWtmcmVlKHByaXYpOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHFjZGV2aWNlID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lciAgICAgPSBUSElTX01PRFVMRSwKQEAgLTIyMiw3ICsyMzksNyBAQAogCS5jaGFyc19pbl9idWZmZXIgICAgID0gdXNiX3d3YW5fY2hhcnNfaW5fYnVmZmVyLAogCS5hdHRhY2gJCSAgICAgPSB1c2Jfd3dhbl9zdGFydHVwLAogCS5kaXNjb25uZWN0CSAgICAgPSB1c2Jfd3dhbl9kaXNjb25uZWN0LAotCS5yZWxlYXNlCSAgICAgPSB1c2Jfd3dhbl9yZWxlYXNlLAorCS5yZWxlYXNlCSAgICAgPSBxY19yZWxlYXNlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCSAgICAgPSB1c2Jfd3dhbl9zdXNwZW5kLAogCS5yZXN1bWUJCSAgICAgPSB1c2Jfd3dhbl9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2VuZV91YjYyNTAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZW5lX3ViNjI1MC5jCmluZGV4IDA4ZTAzNzQuLjBlNWFhZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZW5lX3ViNjI1MC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZW5lX3ViNjI1MC5jCkBAIC01NjIsNyArNTYyLDcgQEAKIAogCXJlc3VsdCA9IGVuZV9zZW5kX3Njc2lfY21kKHVzLCBGRElSX1JFQUQsIE5VTEwsIDApOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7Ci0JCVVTX0RFQlVHUCgiRXhlY3Rpb24gU0QgSW5pdCBDb2RlIEZhaWwgISFcbiIpOworCQlVU19ERUJVR1AoIkV4ZWN1dGlvbiBTRCBJbml0IENvZGUgRmFpbCAhIVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC01ODEsNyArNTgxLDcgQEAKIAogCXJlc3VsdCA9IGVuZV9zZW5kX3Njc2lfY21kKHVzLCBGRElSX1JFQUQsICZidWYsIDApOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7Ci0JCVVTX0RFQlVHUCgiRXhlY3Rpb24gU0QgSW5pdCBDb2RlIEZhaWwgISFcbiIpOworCQlVU19ERUJVR1AoIkV4ZWN1dGlvbiBTRCBJbml0IENvZGUgRmFpbCAhIVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwppbmRleCA2Yjk5ODJjLi4wOWU1MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTE1MTAsNyArMTUxMCw3IEBACiAgKiBQcm90b2NvbCBhbmQgVHJhbnNwb3J0IGZvciB0aGUgSVNEMjAwIEFTSUMKICAqCiAgKiBUaGlzIHByb3RvY29sIGFuZCB0cmFuc3BvcnQgYXJlIGZvciBBVEEgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYW4gSVNEMjAwCi0gKiBBU0lDLiAgQW4gQVRBUEkgZGV2aWNlIHRoYXQgaXMgY29uZWN0ZWQgYXMgYSBzbGF2ZSBkZXZpY2Ugd2lsbCBiZQorICogQVNJQy4gIEFuIEFUQVBJIGRldmljZSB0aGF0IGlzIGNvbm5lY3RlZCBhcyBhIHNsYXZlIGRldmljZSB3aWxsIGJlCiAgKiBkZXRlY3RlZCBpbiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCB0aGUgcHJvdG9jb2wgd2lsbAogICogYmUgY2hhbmdlZCB0byBhbiBBVEFQSSBwcm90b2NvbCAoVHJhbnNwYXJlbnQgU0NTSSkuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCmluZGV4IDY4OWVlMWYuLjEzYjhiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoc2Rldi0+aG9zdCk7CiAKLQkvKiBNYW55IGRldmljZXMgaGF2ZSB0cm91YmxlIHRyYW5zZmVyaW5nIG1vcmUgdGhhbiAzMktCIGF0IGEgdGltZSwKKwkvKiBNYW55IGRldmljZXMgaGF2ZSB0cm91YmxlIHRyYW5zZmVycmluZyBtb3JlIHRoYW4gMzJLQiBhdCBhIHRpbWUsCiAJICogd2hpbGUgb3RoZXJzIGhhdmUgdHJvdWJsZSB3aXRoIG1vcmUgdGhhbiA2NEsuIEF0IHRoaXMgdGltZSB3ZQogCSAqIGFyZSBsaW1pdGluZyBib3RoIHRvIDMySyAoNjQgc2VjdG9yZXMpLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwppbmRleCBiZDNmNDE1Li4wYjAwMDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiB9CiAKIC8qCi0gKiBTdG9yZXMgY3JpdGljYWwgaW5mb3JtYXRpb24gaW4gaW50ZXJuYWwgcmVnaXN0ZXJzIGluIHByZXBhcnRpb24gZm9yIHRoZSBleGVjdXRpb24KKyAqIFN0b3JlcyBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbiBpbnRlcm5hbCByZWdpc3RlcnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBleGVjdXRpb24KICAqIG9mIGEgY29uZGl0aW9uYWwgdXNiYXRfcmVhZF9ibG9ja3Mgb3IgdXNiYXRfd3JpdGVfYmxvY2tzIGNhbGwuCiAgKi8KIHN0YXRpYyBpbnQgdXNiYXRfc2V0X3NodXR0bGVfZmVhdHVyZXMoc3RydWN0IHVzX2RhdGEgKnVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvY3J5cHRvLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jcnlwdG8uYwppbmRleCA4MjdjODdmLi43ZTRiZjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jcnlwdG8uYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jcnlwdG8uYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAgKiAgICAgdXNpbmcgdGhlIDE0IGJ5dGVzIG9mIEBhIHRvIGZpbGwgdXAKICAqICAgICBiMS57bWFjX2hlYWRlcixlMCxzZWN1cml0eV9yZXNlcnZlZCxwYWRkaW5nfS4KICAqCi0gKiBOT1RFOiBUaGUgZGVmaW5pdG9uIG9mIGwoYSkgaW4gV1VTQjEuMFs2LjVdIHZzIHRoZSBkZWZpbml0aW9uIG9mCisgKiBOT1RFOiBUaGUgZGVmaW5pdGlvbiBvZiBsKGEpIGluIFdVU0IxLjBbNi41XSB2cyB0aGUgZGVmaW5pdGlvbiBvZgogICogICAgICAgbChtKSBpcyBvcnRob2dvbmFsLCB0aGV5IGJlYXIgbm8gcmVsYXRpb25zaGlwLCBzbyBpdCBpcyBub3QKICAqICAgICAgIGluIGNvbmZsaWN0IHdpdGggdGhlIHBhcmFtZXRlcidzIHJlbGF0aW9uIHRoYXQKICAqICAgICAgIFdVU0IxLjBbNi40LjJdKSBkZWZpbmVzLgpAQCAtMjcyLDcgKzI3Miw3IEBACiAKIAkvKiBOb3cgd2UgY3J5cHQgdGhlIE1JQyBUYWcgKCppdikgd2l0aCBBeCAtLSB2YWx1ZXMgcGVyIFdVU0IxLjBbNi41XQogCSAqIFRoZSBwcm9jZWR1cmUgaXMgdG8gQUVTIGNyeXB0IHRoZSBBMCBibG9jayBhbmQgWE9SIHRoZSBNSUMKLQkgKiBUYWcgYWdhaW5zIGl0OyB3ZSBvbmx5IGRvIHRoZSBmaXJzdCA4IGJ5dGVzIGFuZCBwbGFjZSBpdAorCSAqIFRhZyBhZ2FpbnN0IGl0OyB3ZSBvbmx5IGRvIHRoZSBmaXJzdCA4IGJ5dGVzIGFuZCBwbGFjZSBpdAogCSAqIGRpcmVjdGx5IGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCiAJICoKIAkgKiBQT1MgQ3J5cHRvIEFQSTogc2l6ZSBpcyBhc3N1bWVkIHRvIGJlIEFFUydzIGJsb2NrIHNpemUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9yZXNlcnZhdGlvbi5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvcmVzZXJ2YXRpb24uYwppbmRleCA0ZWQ5NzM2Li42ZjRmYWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9yZXNlcnZhdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3Jlc2VydmF0aW9uLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAogLyoqCiAgKiB3dXNiaGNfcnN2X2VzdGFibGlzaCAtIGVzdGFibGlzaCBhIHJlc2VydmF0aW9uIGZvciB0aGUgY2x1c3RlcgotICogQHd1c2JoYzogdGhlIFdVU0IgSEMgcmVxdWVzdGluZyBhIGJhbmR3aXRoIHJlc2VydmF0aW9uCisgKiBAd3VzYmhjOiB0aGUgV1VTQiBIQyByZXF1ZXN0aW5nIGEgYmFuZHdpZHRoIHJlc2VydmF0aW9uCiAgKi8KIGludCB3dXNiaGNfcnN2X2VzdGFibGlzaChzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9yaC5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvcmguYwppbmRleCBjMTc1YjczLi4zOWRlMzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9yaC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3JoLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogICogICAgICAgICAgIGJpZyBvZiBhIHByb2JsZW0gW2FuZCB3ZSBjYW4ndCBtYWtlIGl0IGFuIHNwaW5sb2NrCiAgKiAgICAgICAgICAgYmVjYXVzZSBvdGhlciBwYXJ0cyBuZWVkIHRvIHRha2UgaXQgYW5kIHNsZWVwXSAuCiAgKgotICogICAgICAgICAgIEB1c2JfaGNkIGlzIHJlZmNvdW50ZWQsIHNvIGl0IHdvbid0IGRpc3NhcGVhciB1bmRlciB1cworICogICAgICAgICAgIEB1c2JfaGNkIGlzIHJlZmNvdW50ZWQsIHNvIGl0IHdvbid0IGRpc2FwcGVhciB1bmRlciB1cwogICogICAgICAgICAgIGFuZCBiZWZvcmUga2lsbGluZyBhIGhvc3QsIHRoZSBwb2xsaW5nIG9mIHRoZSByb290IGh1YgogICogICAgICAgICAgIHdvdWxkIGJlIHN0b3BwZWQgYW55d2F5LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1ycGlwZS5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtcnBpcGUuYwppbmRleCA4Y2I5ZDgwLi5jYTgwMTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1ycGlwZS5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXJwaXBlLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqCiAgKiBSUElQRQogICoKLSAqICAgVGFyZ2V0dGVkIGF0IGRpZmZlcmVudCBkb3duc3RyZWFtIGVuZHBvaW50cworICogICBUYXJnZXRlZCBhdCBkaWZmZXJlbnQgZG93bnN0cmVhbSBlbmRwb2ludHMKICAqCiAgKiAgIERlc2NyaXB0b3I6IHVzZSB0byBjb25maWcgdGhlIHJlbW90ZSBwaXBlLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXhmZXIuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXhmZXIuYwppbmRleCA4NGI3NDRjLi42Y2NkOTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS14ZmVyLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EteGZlci5jCkBAIC02MSw3ICs2MSw3IEBACiAgKgogICogICAgIFR3byBtZXRob2RzIGl0IGNvdWxkIGJlIGRvbmU6CiAgKgotICogICAgIChhKSBzZXQgdXAgYSB0aW1lciBldmVyeXRpbWUgYW4gcnBpcGUncyB1c2UgY291bnQgZHJvcHMgdG8gMQorICogICAgIChhKSBzZXQgdXAgYSB0aW1lciBldmVyeSB0aW1lIGFuIHJwaXBlJ3MgdXNlIGNvdW50IGRyb3BzIHRvIDEKICAqICAgICAgICAgKHdoaWNoIG1lYW5zIHVudXNlZCkgb3Igd2hlbiBhIHRyYW5zZmVyIGVuZHMuIFJlc2V0IHRoZQogICogICAgICAgICB0aW1lciB3aGVuIGEgeGZlciBpcyBxdWV1ZWQuIElmIHRoZSB0aW1lciBleHBpcmVzLCByZWxlYXNlCiAgKiAgICAgICAgIHRoZSBycGlwZSBbc2VlIHJwaXBlX2VwX2Rpc2FibGUoKV0uCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogCXN0cnVjdCB3YWhjICp3YTsJCS8qIFdpcmUgYWRhcHRlciB3ZSBhcmUgcGx1Z2dlZCB0byAqLwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7Ci0Jc3RydWN0IHVyYiAqdXJiOwkJLyogVVJCIHdlIGFyZSB0cmFuc2ZlcmluZyBmb3IgKi8KKwlzdHJ1Y3QgdXJiICp1cmI7CQkvKiBVUkIgd2UgYXJlIHRyYW5zZmVycmluZyBmb3IgKi8KIAlzdHJ1Y3Qgd2Ffc2VnICoqc2VnOwkJLyogdHJhbnNmZXIgc2VnbWVudHMgKi8KIAl1OCBzZWdzLCBzZWdzX3N1Ym1pdHRlZCwgc2Vnc19kb25lOwogCXVuc2lnbmVkIGlzX2luYm91bmQ6MTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogfQogCiAvKgotICogRGVzdG9yeSBhIHRyYW5zZmVyIHN0cnVjdHVyZQorICogRGVzdHJveSBhIHRyYW5zZmVyIHN0cnVjdHVyZQogICoKICAqIE5vdGUgdGhhdCB0aGUgeGZlci0+c2VnW2luZGV4XSB0aGluZ2llcyBmb2xsb3cgdGhlIFVSQiBsaWZlIGN5Y2xlLAogICogc28gd2UgbmVlZCB0byBwdXQgdGhlbSwgbm90IGZyZWUgdGhlbS4KQEAgLTQ5NCw3ICs0OTQsNyBAQAogICogZnVuY3Rpb24gZG9lcyBhbG1vc3QgdGhlIHNhbWUgdGhpbmcgYW5kIHRoZXkgd29yayBjbG9zZWx5CiAgKiB0b2dldGhlci4KICAqCi0gKiBJZiB0aGUgc2VnIHJlcXVlc3QgaGFzIGZhaWxlZCBidXQgdGhpcyBEVE8gcGhhc2UgaGFzIHN1Y2VlZGVkLAorICogSWYgdGhlIHNlZyByZXF1ZXN0IGhhcyBmYWlsZWQgYnV0IHRoaXMgRFRPIHBoYXNlIGhhcyBzdWNjZWVkZWQsCiAgKiB3YV9zZWdfY2IoKSBoYXMgYWxyZWFkeSBmYWlsZWQgdGhlIHNlZ21lbnQgYW5kIG1vdmVkIHRoZQogICogc3RhdHVzIHRvIFdBX1NFR19FUlJPUiwgc28gdGhpcyB3aWxsIGdvIHRocm91Z2ggJ2Nhc2UgMCcgYW5kCiAgKiBlZmZlY3RpdmVseSBkbyBub3RoaW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd3VzYmhjLmggYi9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuaAppbmRleCA2YmQ0MjZiLi4zYTJkMDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuaAorKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuaApAQCAtMjMxLDcgKzIzMSw3IEBACiAgKgogICogICAgTW9zdCBvZiB0aGUgdGltZXMgd2hlbiB5b3UgbmVlZCB0byB1c2UgaXQsIGl0IHdpbGwgYmUgbm9uLU5VTEwsCiAgKiAgICBzbyB0aGVyZSBpcyBubyByZWFsIG5lZWQgdG8gY2hlY2sgZm9yIGl0ICh3dXNiX2RldiB3aWxsCi0gKiAgICBkaXNzYXBlYXIgYmVmb3JlIHVzYl9kZXYpLgorICogICAgZGlzYXBwZWFyIGJlZm9yZSB1c2JfZGV2KS4KICAqCiAgKiAgLSBUaGUgZm9sbG93aW5nIGZpZWxkcyBuZWVkIHRvIGJlIGZpbGxlZCBvdXQgYmVmb3JlIGNhbGxpbmcKICAqICAgIHd1c2JoY19jcmVhdGUoKTogcG9ydHNfbWF4LCBtbWNpZXNfbWF4LCBtbWNpZV97YWRkLHJtfS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2RyaXZlci5jIGIvZHJpdmVycy91d2IvZHJpdmVyLmMKaW5kZXggMDhiZDZkYi4uM2U1NDU0YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXdiL2RyaXZlci5jCkBAIC02MSw3ICs2MSw3IEBACiAKIAogLyoqCi0gKiBJZiBhIGJlYWNvbiBkaXNzYXBlYXJzIGZvciBsb25nZXIgdGhhbiB0aGlzLCB0aGVuIHdlIGNvbnNpZGVyIHRoZQorICogSWYgYSBiZWFjb24gZGlzYXBwZWFycyBmb3IgbG9uZ2VyIHRoYW4gdGhpcywgdGhlbiB3ZSBjb25zaWRlciB0aGUKICAqIGRldmljZSB3aG8gd2FzIHJlcHJlc2VudGVkIGJ5IHRoYXQgYmVhY29uIHRvIGJlIGdvbmUuCiAgKgogICogRUNNQS0zNjhbMTcuMi4zLCBsYXN0IHBhcmFdIGVzdGFibGlzaGVzIHRoYXQgYSBkZXZpY2UgbXVzdCBub3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2RycC5jIGIvZHJpdmVycy91d2IvZHJwLmMKaW5kZXggYThkODNlMi4uM2ZiY2Y3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvZHJwLmMKKysrIGIvZHJpdmVycy91d2IvZHJwLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyogRFJQIENvbmZsaWN0IEFjdGlvbnMgKFtFQ01BLTM2OCAybmQgRWRpdGlvbl0gMTcuNC42KSAqLwogZW51bSB1d2JfZHJwX2NvbmZsaWN0X2FjdGlvbiB7Ci0JLyogUmVzZXJ2YXRpb24gaXMgbWFudGFpbmVkLCBubyBhY3Rpb24gbmVlZGVkICovCisJLyogUmVzZXJ2YXRpb24gaXMgbWFpbnRhaW5lZCwgbm8gYWN0aW9uIG5lZWRlZCAqLwogCVVXQl9EUlBfQ09ORkxJQ1RfTUFOVEFJTiA9IDAsCiAJCiAJLyogdGhlIGRldmljZSBzaGFsbCBub3QgdHJhbnNtaXQgZnJhbWVzIGluIGNvbmZsaWN0aW5nIE1BU3MgaW4KQEAgLTc0MSwxMiArNzQxLDEyIEBACiAgKiBEUlAgbm90aWZpY2F0aW9ucyBjYW4gb2NjdXIgZm9yIHRocmVlIGRpZmZlcmVudCByZWFzb25zOgogICoKICAqIC0gVVdCX0RSUF9OT1RJRl9EUlBfSUVfUkVDVkQ6IG9uZSBvciBtb3JlIERSUCBJRXMgd2l0aCB0aGUgUkMgYXMKLSAqICAgdGhlIHRhcmdldCBvciBzb3VyY2UgaGF2ZSBiZWVuIHJlY2lldmVkLgorICogICB0aGUgdGFyZ2V0IG9yIHNvdXJjZSBoYXZlIGJlZW4gcmVjZWl2ZWQuCiAgKgogICogICBUaGVzZSBEUlAgSUVzIGNvdWxkIGJlIG5ldyBvciBmb3IgYW4gZXhpc3RpbmcgcmVzZXJ2YXRpb24uCiAgKgogICogICBJZiB0aGUgRFJQIElFIGZvciBhbiBleGlzdGluZyByZXNlcnZhdGlvbiBjZWFzZXMgdG8gYmUgdG8KLSAqICAgcmVjaWV2ZWQgZm9yIGF0IGxlYXN0IG1NYXhMb3N0QmVhY29ucywgdGhlIHJlc2VydmF0aW9uIHNob3VsZCBiZQorICogICByZWNlaXZlZCBmb3IgYXQgbGVhc3QgbU1heExvc3RCZWFjb25zLCB0aGUgcmVzZXJ2YXRpb24gc2hvdWxkIGJlCiAgKiAgIGNvbnNpZGVyZWQgdG8gYmUgdGVybWluYXRlZC4gIE5vdGUgdGhhdCB0aGUgVEVSTUlOQVRFIHJlYXNvbiAoc2VlCiAgKiAgIGJlbG93KSBtYXkgbm90IGFsd2F5cyBiZSBzaWduYWxsZWQgKGUuZy4sIHRoZSByZW1vdGUgZGV2aWNlIGhhcwogICogICB0d28gb3IgbW9yZSByZXNlcnZhdGlvbnMgZXN0YWJsaXNoZWQgd2l0aCB0aGUgUkMpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvbGMtcmMuYyBiL2RyaXZlcnMvdXdiL2xjLXJjLmMKaW5kZXggYjAwOTFjNy4uYjQzOTVmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvbGMtcmMuYworKysgYi9kcml2ZXJzL3V3Yi9sYy1yYy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAl9CiAKIAlpZiAodXdiX21hY19hZGRyX3Vuc2V0KCZhZGRyKSB8fCB1d2JfbWFjX2FkZHJfYmNhc3QoJmFkZHIpKSB7Ci0JCWFkZHIuZGF0YVswXSA9IDB4MDI7IC8qIGxvY2FsbHkgYWRtaW5zdGVyZWQgYW5kIHVuaWNhc3QgKi8KKwkJYWRkci5kYXRhWzBdID0gMHgwMjsgLyogbG9jYWxseSBhZG1pbmlzdGVyZWQgYW5kIHVuaWNhc3QgKi8KIAkJZ2V0X3JhbmRvbV9ieXRlcygmYWRkci5kYXRhWzFdLCBzaXplb2YoYWRkci5kYXRhKS0xKTsKIAogCQlyZXN1bHQgPSB1d2JfcmNfbWFjX2FkZHJfc2V0KHJjLCAmYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9yZXNldC5jIGIvZHJpdmVycy91d2IvcmVzZXQuYwppbmRleCAyNzg0OTI5Li4zZGU2MzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9yZXNldC5jCisrKyBiL2RyaXZlcnMvdXdiL3Jlc2V0LmMKQEAgLTUyLDcgKzUyLDcgQEAKIAkiY2FuY2VsbGVkIiwKIAkiaW52YWxpZCBzdGF0ZSIsCiAJImludmFsaWQgc2l6ZSIsCi0JImFjayBub3QgcmVjaWV2ZWQiLAorCSJhY2sgbm90IHJlY2VpdmVkIiwKIAkibm8gbW9yZSBhc2llIG5vdGlmaWNhdGlvbiIsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91bWMtZGV2LmMgYi9kcml2ZXJzL3V3Yi91bWMtZGV2LmMKaW5kZXggY2NkMjE4NC4uYjI5NDhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvdW1jLWRldi5jCisrKyBiL2RyaXZlcnMvdXdiL3VtYy1kZXYuYwpAQCAtNzgsNyArNzgsNyBAQAogICogRmlyc3Qgd2UgdW5yZWdpc3RlciB0aGUgZGV2aWNlLCBtYWtlIHN1cmUgdGhlIGRyaXZlciBjYW4gZG8gaXQncwogICogcmVzb3VyY2UgcmVsZWFzZSB0aGluZyBhbmQgdGhlbiB3ZSB0cnkgdG8gcmVsZWFzZSBhbnkgbGVmdCBvdmVyCiAgKiByZXNvdXJjZXMuIFdlIHRha2UgYSByZWYgdG8gdGhlIGRldmljZSwgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QKLSAqIGRpc3NhcGVhciB1bmRlciBvdXIgZmVldC4KKyAqIGRpc2FwcGVhciB1bmRlciBvdXIgZmVldC4KICAqLwogdm9pZCB1bWNfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHVtY19kZXYgKnVtYykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jIGIvZHJpdmVycy92aWRlby9hY29ybmZiLmMKaW5kZXggODJhY2I4ZC4uNjE4M2E1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hY29ybmZiLmMKQEAgLTY2LDcgKzY2LDcgQEAKICAqIGhhdmUuICBBbGxvdyAxJSBlaXRoZXIgd2F5IG9uIHRoZSBub21pbmFsIGZvciBUVnMuCiAgKi8KICNkZWZpbmUgTlJfTU9OVFlQRVMJNgotc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBtb25zcGVjc1tOUl9NT05UWVBFU10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgbW9uc3BlY3NbTlJfTU9OVFlQRVNdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewkvKiBUVgkJKi8KIAkJLmhmbWluCT0gMTU0NjksCiAJCS5oZm1heAk9IDE1NzgxLApAQCAtODczLDcgKzg3Myw3IEBACiAvKgogICogRXZlcnl0aGluZyBhZnRlciBoZXJlIGlzIGluaXRpYWxpc2F0aW9uISEhCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1vZGVkYltdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlZGJbXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMzIweDI1NiBAIDUwSHogKi8KIAkJTlVMTCwgNTAsICAzMjAsICAyNTYsIDEyNTAwMCwgIDkyLCAgNjIsICAzNSwgMTksICAzOCwgMiwKIAkJRkJfU1lOQ19DT01QX0hJR0hfQUNULApAQCAtOTI1LDggKzkyNSw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgX19pbml0ZGF0YQotYWNvcm5mYl9kZWZhdWx0X21vZGUgPSB7CitzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBhY29ybmZiX2RlZmF1bHRfbW9kZSBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0JCU5VTEwsCiAJLnJlZnJlc2ggPQk2MCwKIAkueHJlcyA9CQk2NDAsCkBAIC05NDIsNyArOTQxLDcgQEAKIAkudm1vZGUgPQlGQl9WTU9ERV9OT05JTlRFUkxBQ0VECiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYWNvcm5mYl9pbml0X2ZiaW5mbyh2b2lkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGFjb3JuZmJfaW5pdF9mYmluZm8odm9pZCkKIHsKIAlzdGF0aWMgaW50IGZpcnN0ID0gMTsKIApAQCAtMTAxOCw4ICsxMDE3LDcgQEAKICAqCXNpemUgY2FuIG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgJ00nIG9yICdLJyBmb3IKICAqCU1CIG9yIEtCIHJlc3BlY3RpdmVseS4KICAqLwotc3RhdGljIHZvaWQgX19pbml0Ci1hY29ybmZiX3BhcnNlX21vbihjaGFyICpvcHQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYWNvcm5mYl9wYXJzZV9tb24oY2hhciAqb3B0KQogewogCWNoYXIgKnAgPSBvcHQ7CiAKQEAgLTEwNjYsOCArMTA2NCw3IEBACiAJY3VycmVudF9wYXIubW9udHlwZSA9IC0xOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQKLWFjb3JuZmJfcGFyc2VfbW9udHlwZShjaGFyICpvcHQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYWNvcm5mYl9wYXJzZV9tb250eXBlKGNoYXIgKm9wdCkKIHsKIAljdXJyZW50X3Bhci5tb250eXBlID0gLTI7CiAKQEAgLTExMDgsOCArMTEwNSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQKLWFjb3JuZmJfcGFyc2VfZHJhbShjaGFyICpvcHQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYWNvcm5mYl9wYXJzZV9kcmFtKGNoYXIgKm9wdCkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIApAQCAtMTEzNCwxNSArMTEzMCwxNCBAQAogc3RhdGljIHN0cnVjdCBvcHRpb25zIHsKIAljaGFyICpuYW1lOwogCXZvaWQgKCpwYXJzZSkoY2hhciAqb3B0KTsKLX0gb3B0X3RhYmxlW10gX19pbml0ZGF0YSA9IHsKK30gb3B0X3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7ICJtb24iLCAgICAgYWNvcm5mYl9wYXJzZV9tb24gICAgIH0sCiAJeyAibW9udHlwZSIsIGFjb3JuZmJfcGFyc2VfbW9udHlwZSB9LAogCXsgImRyYW0iLCAgICBhY29ybmZiX3BhcnNlX2RyYW0gICAgfSwKIAl7IE5VTEwsIE5VTEwgfQogfTsKIAotaW50IF9faW5pdAotYWNvcm5mYl9zZXR1cChjaGFyICpvcHRpb25zKQorc3RhdGljIGludCBfX2RldmluaXQgYWNvcm5mYl9zZXR1cChjaGFyICpvcHRpb25zKQogewogCXN0cnVjdCBvcHRpb25zICpvcHRwOwogCWNoYXIgKm9wdDsKQEAgLTExNzksOCArMTE3NCw3IEBACiAgKiBEZXRlY3QgdHlwZSBvZiBtb25pdG9yIGNvbm5lY3RlZAogICogIEZvciBub3csIHdlIGp1c3QgYXNzdW1lIFNWR0EKICAqLwotc3RhdGljIGludCBfX2luaXQKLWFjb3JuZmJfZGV0ZWN0X21vbml0b3J0eXBlKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhY29ybmZiX2RldGVjdF9tb25pdG9ydHlwZSh2b2lkKQogewogCXJldHVybiA0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCmluZGV4IGNjZWNmOTkuLjQ0ODRjNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTYzNyw3ICs2MzcsNyBAQAogICogIAltYWduaXR1ZGUgd2hpY2ggbmVlZHMgdG8gYmUgc2NhbGVkIGluIHRoaXMgZnVuY3Rpb24gZm9yIHRoZSBoYXJkd2FyZS4KICAqCVRoaW5ncyB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbiBhcmUgaG93IG1hbnkgY29sb3IgcmVnaXN0ZXJzLCBpZgogICoJYW55LCBhcmUgc3VwcG9ydGVkIHdpdGggdGhlIGN1cnJlbnQgY29sb3IgdmlzdWFsLiBXaXRoIHRydWVjb2xvciBtb2RlCi0gKglubyBjb2xvciBwYWxldHRlcyBhcmUgc3VwcG9ydGVkLiBIZXJlIGEgcHN1ZWRvIHBhbGV0dGUgaXMgY3JlYXRlZAorICoJbm8gY29sb3IgcGFsZXR0ZXMgYXJlIHN1cHBvcnRlZC4gSGVyZSBhIHBzZXVkbyBwYWxldHRlIGlzIGNyZWF0ZWQKICAqCXdoaWNoIHdlIHN0b3JlIHRoZSB2YWx1ZSBpbiBwc2V1ZG9fcGFsZXR0ZSBpbiBzdHJ1Y3QgZmJfaW5mby4gRm9yCiAgKglwc2V1ZG9jb2xvciBtb2RlIHdlIGhhdmUgYSBsaW1pdGVkIGNvbG9yIHBhbGV0dGUuIFRvIGRlYWwgd2l0aCB0aGlzCiAgKgl3ZSBjYW4gcHJvZ3JhbSB3aGF0IGNvbG9yIGlzIGRpc3BsYXllZCBmb3IgYSBwYXJ0aWN1bGFyIHBpeGVsIHZhbHVlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IGQ0MzdiM2QuLmViYjg5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTMxMjQsMTIgKzMxMjQsMTIgQEAKIAkJTSA9IHBsbF9yZWdzWzJdOwogCiAJCS8qCi0JCSAqIFBMTCBGZWVkYmFjayBEaXZpZGVyIE4gKERlcGVuZGFudCBvbiBDTE9DS19DTlRMKToKKwkJICogUExMIEZlZWRiYWNrIERpdmlkZXIgTiAoRGVwZW5kZW50IG9uIENMT0NLX0NOVEwpOgogCQkgKi8KIAkJTiA9IHBsbF9yZWdzWzcgKyAoY2xvY2tfY250bCAmIDMpXTsKIAogCQkvKgotCQkgKiBQTEwgUG9zdCBEaXZpZGVyIFAgKERlcGVuZGFudCBvbiBDTE9DS19DTlRMKToKKwkJICogUExMIFBvc3QgRGl2aWRlciBQIChEZXBlbmRlbnQgb24gQ0xPQ0tfQ05UTCk6CiAJCSAqLwogCQlQID0gMSA8PCAocGxsX3JlZ3NbNl0gPj4gKChjbG9ja19jbnRsICYgMykgPDwgMSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3Vyc29yLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3Vyc29yLmMKaW5kZXggMmJhOGIzYy4uNDZmNzJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2N1cnNvci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYwpAQCAtNTEsNyArNTEsNyBAQAogICogdG8gYSBsYXJnZXIgbnVtYmVyIGFuZCBzYXR1cmF0ZSBDVVJfSE9SWl9QT1NOIHRvIHplcm8uCiAgKgogICogaWYgWSBiZWNvbWVzIG5lZ2F0aXZlLCBDVVJfVkVSVF9PRkZTRVQgbXVzdCBiZSBhZGp1c3RlZCB0byBhIGxhcmdlciBudW1iZXIsCi0gKiBDVVJfT0ZGU0VUIG11c3QgYmUgYWRqdXN0ZWQgdG8gYSBwb2ludCB0byB0aGUgYXBwcm9wcmFpdGUgbGluZSBpbiB0aGUgY3Vyc29yCisgKiBDVVJfT0ZGU0VUIG11c3QgYmUgYWRqdXN0ZWQgdG8gYSBwb2ludCB0byB0aGUgYXBwcm9wcmlhdGUgbGluZSBpbiB0aGUgY3Vyc29yCiAgKiBkZWZpbml0YXRpb24gYW5kIENVUl9WRVJUX1BPU04gbXVzdCBiZSBzYXR1cmF0ZWQgdG8gemVyby4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKaW5kZXggNGVhMTg3ZC4uNWRmZjMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwpAQCAtMTU3Miw3ICsxNTcyLDcgQEAKIAkvKiBDb3B5IG1vbml0b3Igc3BlY3MgZnJvbSBwYW5lbCBkYXRhICovCiAJLyogZml4bWU6IHdlJ3JlIHNldHRpbmcgdXAgTENEIGNvbnRyb2xsZXIgd2luZG93cywgc28gdGhlc2UgZG9udCBnaXZlIGEKIAlkYW1uIGFzIHRvIHdoYXQgdGhlIG1vbml0b3Igc3BlY3MgYXJlICh0aGUgcGFuZWwgaXRzZWxmIGRvZXMsIGJ1dCB0aGF0Ci0JaXNudCBkb25lIGhlcmUuLi5zbyBtYXliZSBuZWVkIGEgZ2VuZXJpYyBjYXRjaGFsbCBtb25pdG9yIHNldHRpbmc/Pz8gKi8KKwlpc24ndCBkb25lIGhlcmUuLi5zbyBtYXliZSBuZWVkIGEgZ2VuZXJpYyBjYXRjaGFsbCBtb25pdG9yIHNldHRpbmc/Pz8gKi8KIAltZW1jcHkoJmZiaS0+bW9uc3BlY3MsICZwYW5lbC0+bW9uc3BlY3MsIHNpemVvZihzdHJ1Y3QgZmJfbW9uc3BlY3MpKTsKIAogCS8qIFdlIGZpcnN0IHRyeSB0aGUgdXNlciBtb2RlIHBhc3NlZCBpbiBhcmd1bWVudC4gSWYgdGhhdCBmYWlsZWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCmluZGV4IGFmNjA5ODMuLmM2NTMzYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCkBAIC0xMDksNyArMTA5LDcgQEAKICNkZWZpbmUgQ09SR0lCTF9CQVRUTE9XICAgICAgIDB4MDIKIAogLyoKLSAqIFRoaXMgaXMgb25seSBhIHBzdWVkbyBJMkMgaW50ZXJmYWNlLiBXZSBjYW4ndCB1c2UgdGhlIHN0YW5kYXJkIGtlcm5lbAorICogVGhpcyBpcyBvbmx5IGEgcHNldWRvIEkyQyBpbnRlcmZhY2UuIFdlIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQga2VybmVsCiAgKiByb3V0aW5lcyBhcyB0aGUgaW50ZXJmYWNlIGlzIHdyaXRlIG9ubHkuIFdlIGp1c3QgYXNzdW1lIHRoZSBkYXRhIGlzIGFja2VkLi4uCiAgKi8KIHN0YXRpYyB2b2lkIGxjZHRnX3NzcF9pMmNfc2VuZChzdHJ1Y3QgY29yZ2lfbGNkICpsY2QsIHVpbnQ4X3QgZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKaW5kZXggYmJjYTMxMi4uYmUyMGI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKQEAgLTYsNyArNiw3IEBACiAgKiBHUEwgdjIKICAqCiAgKiBUaGlzIGRyaXZlciBhc3N1bWVzIHNpbmdsZSBDUFUuIFRoYXQncyBva2F5LCBiZWNhdXNlIGNvbGxpZSBpcwotICogc2xpZ2h0bHkgb2xkIGhhcmR3YXJlLCBhbmQgbm9vbmUgaXMgZ29pbmcgdG8gcmV0cm9maXQgc2Vjb25kIENQVSB0bworICogc2xpZ2h0bHkgb2xkIGhhcmR3YXJlLCBhbmQgbm8gb25lIGlzIGdvaW5nIHRvIHJldHJvZml0IHNlY29uZCBDUFUgdG8KICAqIG9sZCBQREEuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZmluLWxxMDM1cTEtZmIuYyBiL2RyaXZlcnMvdmlkZW8vYmZpbi1scTAzNXExLWZiLmMKaW5kZXggYzhlMWYwNC4uMjNiNmM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iZmluLWxxMDM1cTEtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tbHEwMzVxMS1mYi5jCkBAIC0xNTQsOCArMTU0LDEwIEBACiAKIAlyZXQgPSBscTAzNXExX2NvbnRyb2woc3BpLCBMUTAzNV9TSFVUX0NUTCwgTFEwMzVfT04pOwogCXJldCB8PSBscTAzNXExX2NvbnRyb2woc3BpLCBMUTAzNV9EUklWRVJfT1VUUFVUX0NUTCwgY3RsLT5tb2RlKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJa2ZyZWUoY3RsKTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlzcGlfc2V0X2RydmRhdGEoc3BpLCBjdGwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmaW5fYWR2NzM5M2ZiLmggYi9kcml2ZXJzL3ZpZGVvL2JmaW5fYWR2NzM5M2ZiLmgKaW5kZXggOGM3ZjllNC4uY2Q1OTFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iZmluX2FkdjczOTNmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vYmZpbl9hZHY3MzkzZmIuaApAQCAtODcsMTIgKzg3LDEyIEBACiAKIHN0YXRpYyBjb25zdCB1OCBpbml0X05UU0NbXSA9IHsKIAkweDAwLCAweDFFLAkvKiBQb3dlciB1cCBhbGwgREFDcyBhbmQgUExMICovCi0JMHhDMywgMHgyNiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhDNSwgMHgxMiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhDMiwgMHg0QSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhDNiwgMHg1RSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhCRCwgMHgxOSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhCRiwgMHg0MiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCisJMHhDMywgMHgyNiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhDNSwgMHgxMiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhDMiwgMHg0QSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhDNiwgMHg1RSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhCRCwgMHgxOSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhCRiwgMHg0MiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCiAJMHg4QywgMHgxRiwJLyogTlRTQyBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLwogCTB4OEQsIDB4N0MsCS8qIE5UU0MgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KIAkweDhFLCAweEYwLAkvKiBOVFNDIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCkBAIC0xMDksMTIgKzEwOSwxMiBAQAogCiBzdGF0aWMgY29uc3QgdTggaW5pdF9QQUxbXSA9IHsKIAkweDAwLCAweDFFLAkvKiBQb3dlciB1cCBhbGwgREFDcyBhbmQgUExMICovCi0JMHhDMywgMHgyNiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhDNSwgMHgxMiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhDMiwgMHg0QSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhDNiwgMHg1RSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhCRCwgMHgxOSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCi0JMHhCRiwgMHg0MiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnRpb24gbWF0cml4ICovCisJMHhDMywgMHgyNiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhDNSwgMHgxMiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhDMiwgMHg0QSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhDNiwgMHg1RSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhCRCwgMHgxOSwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisJMHhCRiwgMHg0MiwJLyogUHJvZ3JhbSBSR0ItPllDckNiIENvbG9yIFNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCiAJMHg4QywgMHhDQiwJLyogUEFMIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCiAJMHg4RCwgMHg4QSwJLyogUEFMIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCiAJMHg4RSwgMHgwOSwJLyogUEFMIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IGM1ODM5MzQuLjg3NDU2MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0zNzAsNyArMzcwLDYgQEAKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmJfaW5mbywgcXVldWUpOwogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKLQlzdHJ1Y3QgZGlzcGxheSAqcDsKIAlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSBOVUxMOwogCWludCBjOwogCWludCBtb2RlOwpAQCAtMzg2LDcgKzM4NSw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJYyA9IHNjcl9yZWFkdygodTE2ICopIHZjLT52Y19wb3MpOwogCW1vZGUgPSAoIW9wcy0+Y3Vyc29yX2ZsYXNoIHx8IG9wcy0+Y3Vyc29yX3N0YXRlLmVuYWJsZSkgPwogCQlDTV9FUkFTRSA6IENNX0RSQVc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9taW5pXzR4Ni5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfbWluaV80eDYuYwppbmRleCBhMTlhN2YzLi5mYTZlNjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9taW5pXzR4Ni5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X21pbmlfNHg2LmMKQEAgLTEsNSArMSw1IEBACiAKLS8qIEhhbmQgY29tcG9zZWQgIk1pbmlzY3VsZSIgNHg2IGZvbnQsIHdpdGggYmluYXJ5IGRhdGEgZ2VuZXJhdGVkIHVzaW5nCisvKiBIYW5kIGNvbXBvc2VkICJNaW51c2N1bGUiIDR4NiBmb250LCB3aXRoIGJpbmFyeSBkYXRhIGdlbmVyYXRlZCB1c2luZwogICogUGVybCBzdHViLgogICoKICAqIFVzZSAncGVybCAteCBtaW5pXzR4Ni5jIDwgbWluaV80eDYuYyA+IG5ld192ZXJzaW9uLmMnIHRvIHJlZ2VuZXJhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwppbmRleCA4ZDYxZWY5Li44YjdkNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCkBAIC03NjMsNyArNzYzLDcgQEAKIAogCS8qCiAJICogU2V0IGZsYWcgdG8gMCBhbmQgd2FpdCBmb3IgaXNyIHRvIHNldCB0byAxLiBJdCB3b3VsZCBzZWVtIHRoZXJlIGlzIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBoZXJlIHdoZXJlIHRoZSBJU1IgY291bGQgaGF2ZSBvY2N1cmVkIGp1c3QgYmVmb3JlIG9yCisJICogcmFjZSBjb25kaXRpb24gaGVyZSB3aGVyZSB0aGUgSVNSIGNvdWxkIGhhdmUgb2NjdXJyZWQganVzdCBiZWZvcmUgb3IKIAkgKiBqdXN0IGFmdGVyIHRoaXMgc2V0LiBCdXQgc2luY2Ugd2UgYXJlIGp1c3QgY29hcnNlbHkgd2FpdGluZyBmb3IKIAkgKiBhIGZyYW1lIHRvIGNvbXBsZXRlIHRoZW4gdGhhdCdzIE9LLiBpLmUuIGlmIHRoZSBmcmFtZSBjb21wbGV0ZWQKIAkgKiBqdXN0IGJlZm9yZSB0aGlzIGNvZGUgZXhlY3V0ZWQgdGhlbiB3ZSBoYXZlIHRvIHdhaXQgYW5vdGhlciBmdWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jIGIvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYwppbmRleCBmNmEwOWFiLi4wYzY0N2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCW11dGV4X2xvY2soJmRkZXYtPmxvY2spOwogCWRldmljZV91bnJlZ2lzdGVyKGRkZXYtPmRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZGV2LT5sb2NrKTsKLQkvLyBNYXJrIGRldmljZSBpbmRleCBhcyBhdmFsaWFibGUKKwkvLyBNYXJrIGRldmljZSBpbmRleCBhcyBhdmFpbGFibGUKIAltdXRleF9sb2NrKCZhbGxvY2F0ZWRfZHNwX2xvY2spOwogCWlkcl9yZW1vdmUoJmFsbG9jYXRlZF9kc3AsIGRkZXYtPmlkeCk7CiAJbXV0ZXhfdW5sb2NrKCZhbGxvY2F0ZWRfZHNwX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9lZmlmYi5jIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCmluZGV4IDcwNDc3YzIuLjRlYjM4ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKQEAgLTUzLDYgKzUzLDcgQEAKIAlNX01CXzdfMSwJLyogTWFjQm9vaywgN3RoIHJldi4gKi8KIAlNX01CX1NSLAkvKiBNYWNCb29rLCAybmQgZ2VuLCAoU2FudGEgUm9zYSkgKi8KIAlNX01CQSwJCS8qIE1hY0Jvb2sgQWlyICovCisJTV9NQkFfMywJLyogTWFjYm9vayBBaXIsIDNyZCByZXYgKi8KIAlNX01CUCwJCS8qIE1hY0Jvb2sgUHJvICovCiAJTV9NQlBfMiwJLyogTWFjQm9vayBQcm8gMm5kIGdlbiAqLwogCU1fTUJQXzJfMiwJLyogTWFjQm9vayBQcm8gMiwybmQgZ2VuICovCkBAIC02NCw0MyArNjUsNTQgQEAKIAlNX01CUF82XzEsCS8qIE1hY0Jvb2sgUHJvLCA2LDF0aCBnZW4gKi8KIAlNX01CUF82XzIsCS8qIE1hY0Jvb2sgUHJvLCA2LDJ0aCBnZW4gKi8KIAlNX01CUF83XzEsCS8qIE1hY0Jvb2sgUHJvLCA3LDF0aCBnZW4gKi8KKwlNX01CUF84XzIsCS8qIE1hY0Jvb2sgUHJvLCA4LDJuZCBnZW4gKi8KIAlNX1VOS05PV04JLyogcGxhY2Vob2xkZXIgKi8KIH07CiAKKyNkZWZpbmUgT1ZFUlJJREVfTk9ORQkweDAKKyNkZWZpbmUgT1ZFUlJJREVfQkFTRQkweDEKKyNkZWZpbmUgT1ZFUlJJREVfU1RSSURFCTB4MgorI2RlZmluZSBPVkVSUklERV9IRUlHSFQJMHg0CisjZGVmaW5lIE9WRVJSSURFX1dJRFRICTB4OAorCiBzdGF0aWMgc3RydWN0IGVmaWZiX2RtaV9pbmZvIHsKIAljaGFyICpvcHRuYW1lOwogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAlpbnQgc3RyaWRlOwogCWludCB3aWR0aDsKIAlpbnQgaGVpZ2h0OworCWludCBmbGFnczsKIH0gZG1pX2xpc3RbXSBfX2luaXRkYXRhID0gewotCVtNX0kxN10gPSB7ICJpMTciLCAweDgwMDEwMDAwLCAxNDcyICogNCwgMTQ0MCwgOTAwIH0sCi0JW01fSTIwXSA9IHsgImkyMCIsIDB4ODAwMTAwMDAsIDE3MjggKiA0LCAxNjgwLCAxMDUwIH0sIC8qIGd1ZXNzICovCi0JW01fSTIwX1NSXSA9IHsgImltYWM3IiwgMHg0MDAxMDAwMCwgMTcyOCAqIDQsIDE2ODAsIDEwNTAgfSwKLQlbTV9JMjRdID0geyAiaTI0IiwgMHg4MDAxMDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAgfSwgLyogZ3Vlc3MgKi8KLQlbTV9JMjRfOF8xXSA9IHsgImltYWM4IiwgMHhjMDA2MDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAgfSwKLQlbTV9JMjRfMTBfMV0gPSB7ICJpbWFjMTAiLCAweGMwMDEwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTA4MCB9LAotCVtNX0kyN18xMV8xXSA9IHsgImltYWMxMSIsIDB4YzAwMTAwMDAsIDI1NjAgKiA0LCAyNTYwLCAxNDQwIH0sCi0JW01fTUlOSV09IHsgIm1pbmkiLCAweDgwMDAwMDAwLCAyMDQ4ICogNCwgMTAyNCwgNzY4IH0sCi0JW01fTUlOSV8zXzFdID0geyAibWluaTMxIiwgMHg0MDAxMDAwMCwgMTAyNCAqIDQsIDEwMjQsIDc2OCB9LAotCVtNX01JTklfNF8xXSA9IHsgIm1pbmk0MSIsIDB4YzAwMTAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwIH0sCi0JW01fTUJdID0geyAibWFjYm9vayIsIDB4ODAwMDAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAgfSwKLQlbTV9NQl81XzFdID0geyAibWFjYm9vazUxIiwgMHg4MDAxMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCB9LAotCVtNX01CXzZfMV0gPSB7ICJtYWNib29rNjEiLCAweDgwMDEwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwIH0sCi0JW01fTUJfN18xXSA9IHsgIm1hY2Jvb2s3MSIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAgfSwKLQlbTV9NQkFdID0geyAibWJhIiwgMHg4MDAwMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCB9LAotCVtNX01CUF0gPSB7ICJtYnAiLCAweDgwMDEwMDAwLCAxNDcyICogNCwgMTQ0MCwgOTAwIH0sCi0JW01fTUJQXzJdID0geyAibWJwMiIsIDAsIDAsIDAsIDAgfSwgLyogcGxhY2Vob2xkZXIgKi8KLQlbTV9NQlBfMl8yXSA9IHsgIm1icDIyIiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCB9LAotCVtNX01CUF9TUl0gPSB7ICJtYnAzIiwgMHg4MDAzMDAwMCwgMjA0OCAqIDQsIDE0NDAsIDkwMCB9LAotCVtNX01CUF80XSA9IHsgIm1icDQiLCAweGMwMDYwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCB9LAotCVtNX01CUF81XzFdID0geyAibWJwNTEiLCAweGMwMDEwMDAwLCAyMDQ4ICogNCwgMTQ0MCwgOTAwIH0sCi0JW01fTUJQXzVfMl0gPSB7ICJtYnA1MiIsIDB4YzAwMTAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwIH0sCi0JW01fTUJQXzVfM10gPSB7ICJtYnA1MyIsIDB4ZDAwMTAwMDAsIDIwNDggKiA0LCAxNDQwLCA5MDAgfSwKLQlbTV9NQlBfNl8xXSA9IHsgIm1icDYxIiwgMHg5MDAzMDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAgfSwKLQlbTV9NQlBfNl8yXSA9IHsgIm1icDYyIiwgMHg5MDAzMDAwMCwgMjA0OCAqIDQsIDE2ODAsIDEwNTAgfSwKLQlbTV9NQlBfN18xXSA9IHsgIm1icDcxIiwgMHhjMDAxMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCB9LAotCVtNX1VOS05PV05dID0geyBOVUxMLCAwLCAwLCAwLCAwIH0KKwlbTV9JMTddID0geyAiaTE3IiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX0kyMF0gPSB7ICJpMjAiLCAweDgwMDEwMDAwLCAxNzI4ICogNCwgMTY4MCwgMTA1MCwgT1ZFUlJJREVfTk9ORSB9LCAvKiBndWVzcyAqLworCVtNX0kyMF9TUl0gPSB7ICJpbWFjNyIsIDB4NDAwMTAwMDAsIDE3MjggKiA0LCAxNjgwLCAxMDUwLCBPVkVSUklERV9OT05FIH0sCisJW01fSTI0XSA9IHsgImkyNCIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwLCBPVkVSUklERV9OT05FIH0sIC8qIGd1ZXNzICovCisJW01fSTI0XzhfMV0gPSB7ICJpbWFjOCIsIDB4YzAwNjAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwLCBPVkVSUklERV9OT05FIH0sCisJW01fSTI0XzEwXzFdID0geyAiaW1hYzEwIiwgMHhjMDAxMDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEwODAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9JMjdfMTFfMV0gPSB7ICJpbWFjMTEiLCAweGMwMDEwMDAwLCAyNTYwICogNCwgMjU2MCwgMTQ0MCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01JTkldPSB7ICJtaW5pIiwgMHg4MDAwMDAwMCwgMjA0OCAqIDQsIDEwMjQsIDc2OCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01JTklfM18xXSA9IHsgIm1pbmkzMSIsIDB4NDAwMTAwMDAsIDEwMjQgKiA0LCAxMDI0LCA3NjgsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NSU5JXzRfMV0gPSB7ICJtaW5pNDEiLCAweGMwMDEwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CXSA9IHsgIm1hY2Jvb2siLCAweDgwMDAwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJfNV8xXSA9IHsgIm1hY2Jvb2s1MSIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQl82XzFdID0geyAibWFjYm9vazYxIiwgMHg4MDAxMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CXzdfMV0gPSB7ICJtYWNib29rNzEiLCAweDgwMDEwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJBXSA9IHsgIm1iYSIsIDB4ODAwMDAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAsIE9WRVJSSURFX05PTkUgfSwKKwkvKiAxMSIgTWFjYm9vayBBaXIgMywxIHBhc3NlcyB0aGUgd3Jvbmcgc3RyaWRlICovCisJW01fTUJBXzNdID0geyAibWJhMyIsIDAsIDIwNDggKiA0LCAwLCAwLCBPVkVSUklERV9TVFJJREUgfSwKKwlbTV9NQlBdID0geyAibWJwIiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CUF8yXSA9IHsgIm1icDIiLCAwLCAwLCAwLCAwLCBPVkVSUklERV9OT05FIH0sIC8qIHBsYWNlaG9sZGVyICovCisJW01fTUJQXzJfMl0gPSB7ICJtYnAyMiIsIDB4ODAwMTAwMDAsIDE0NzIgKiA0LCAxNDQwLCA5MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQlBfU1JdID0geyAibWJwMyIsIDB4ODAwMzAwMDAsIDIwNDggKiA0LCAxNDQwLCA5MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQlBfNF0gPSB7ICJtYnA0IiwgMHhjMDA2MDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQlBfNV8xXSA9IHsgIm1icDUxIiwgMHhjMDAxMDAwMCwgMjA0OCAqIDQsIDE0NDAsIDkwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CUF81XzJdID0geyAibWJwNTIiLCAweGMwMDEwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CUF81XzNdID0geyAibWJwNTMiLCAweGQwMDEwMDAwLCAyMDQ4ICogNCwgMTQ0MCwgOTAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJQXzZfMV0gPSB7ICJtYnA2MSIsIDB4OTAwMzAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJQXzZfMl0gPSB7ICJtYnA2MiIsIDB4OTAwMzAwMDAsIDIwNDggKiA0LCAxNjgwLCAxMDUwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJQXzdfMV0gPSB7ICJtYnA3MSIsIDB4YzAwMTAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQlBfOF8yXSA9IHsgIm1icDgyIiwgMHg5MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX1VOS05PV05dID0geyBOVUxMLCAwLCAwLCAwLCAwLCBPVkVSUklERV9OT05FIH0KIH07CiAKIHN0YXRpYyBpbnQgc2V0X3N5c3RlbShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpOwpAQCAtMTM4LDYgKzE1MCw3IEBACiAJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rNiwxIiwgTV9NQl82XzEpLAogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9vazcsMSIsIE1fTUJfN18xKSwKIAlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tBaXIxLDEiLCBNX01CQSksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rQWlyMywxIiwgTV9NQkFfMyksCiAJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9va1BybzEsMSIsIE1fTUJQKSwKIAlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rUHJvMiwxIiwgTV9NQlBfMiksCiAJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9va1BybzIsMiIsIE1fTUJQXzJfMiksCkBAIC0xNTEsMTkgKzE2NCwyNiBAQAogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9va1BybzYsMSIsIE1fTUJQXzZfMSksCiAJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rUHJvNiwyIiwgTV9NQlBfNl8yKSwKIAlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tQcm83LDEiLCBNX01CUF83XzEpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9va1BybzgsMiIsIE1fTUJQXzhfMiksCiAJe30sCiB9OwogCisjZGVmaW5lIGNob29zZV92YWx1ZShkbWl2YWx1ZSwgZnd2YWx1ZSwgZmllbGQsIGZsYWdzKSAoewlcCisJCXR5cGVvZihmd3ZhbHVlKSBfcmV0XyA9IGZ3dmFsdWU7CQlcCisJCWlmICgoZmxhZ3MpICYgKGZpZWxkKSkJCQkJXAorCQkJX3JldF8gPSBkbWl2YWx1ZTsJCQlcCisJCWVsc2UgaWYgKChmd3ZhbHVlKSA9PSAwKQkJCVwKKwkJCV9yZXRfID0gZG1pdmFsdWU7CQkJXAorCQlfcmV0XzsJCQkJCQlcCisJfSkKKwogc3RhdGljIGludCBzZXRfc3lzdGVtKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKIAlzdHJ1Y3QgZWZpZmJfZG1pX2luZm8gKmluZm8gPSBpZC0+ZHJpdmVyX2RhdGE7Ci0JaWYgKGluZm8tPmJhc2UgPT0gMCkKLQkJcmV0dXJuIDA7CiAKLQlwcmludGsoS0VSTl9JTkZPICJlZmlmYjogZG1pIGRldGVjdGVkICVzIC0gZnJhbWVidWZmZXIgYXQgJXAgIgotCQkJICIoJWR4JWQsIHN0cmlkZSAlZClcbiIsIGlkLT5pZGVudCwKLQkJCSAodm9pZCAqKWluZm8tPmJhc2UsIGluZm8tPndpZHRoLCBpbmZvLT5oZWlnaHQsCi0JCQkgaW5mby0+c3RyaWRlKTsKKwlpZiAoaW5mby0+YmFzZSA9PSAwICYmIGluZm8tPmhlaWdodCA9PSAwICYmIGluZm8tPndpZHRoID09IDAKKwkJCSYmIGluZm8tPnN0cmlkZSA9PSAwKQorCQlyZXR1cm4gMDsKIAogCS8qIFRydXN0IHRoZSBib290bG9hZGVyIG92ZXIgdGhlIERNSSB0YWJsZXMgKi8KIAlpZiAoc2NyZWVuX2luZm8ubGZiX2Jhc2UgPT0gMCkgewpAQCAtMTcxLDQwICsxOTEsNDcgQEAKIAkJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CiAJCWludCBmb3VuZF9iYXIgPSAwOwogI2VuZGlmCi0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gaW5mby0+YmFzZTsKKwkJaWYgKGluZm8tPmJhc2UpIHsKKwkJCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gY2hvb3NlX3ZhbHVlKGluZm8tPmJhc2UsCisJCQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UsIE9WRVJSSURFX0JBU0UsCisJCQkJaW5mby0+ZmxhZ3MpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQotCQkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgYWRkcmVzcyBpbiB0aGUgdGFibGUgaXMgYWN0dWFsbHkgb24gYQotCQkgKiBWR0EgZGV2aWNlJ3MgUENJIEJBUiAqLworCQkJLyogbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgaW4gdGhlIHRhYmxlIGlzIGFjdHVhbGx5CisJCQkgKiBvbiBhIFZHQSBkZXZpY2UncyBQQ0kgQkFSICovCiAKLQkJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKLQkJCWludCBpOwotCQkJaWYgKChkZXYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSkKLQkJCQljb250aW51ZTsKLQkJCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewotCQkJCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOworCQkJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKKwkJCQlpbnQgaTsKKwkJCQlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKQorCQkJCQljb250aW51ZTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKKwkJCQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBlbmQ7CiAKLQkJCQlzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGkpOwotCQkJCWlmIChzdGFydCA9PSAwKQotCQkJCQlicmVhazsKLQkJCQllbmQgPSBwY2lfcmVzb3VyY2VfZW5kKGRldiwgaSk7Ci0JCQkJaWYgKHNjcmVlbl9pbmZvLmxmYl9iYXNlID49IHN0YXJ0ICYmCi0JCQkJCQlzY3JlZW5faW5mby5sZmJfYmFzZSA8IGVuZCkgewotCQkJCQlmb3VuZF9iYXIgPSAxOworCQkJCQlzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGkpOworCQkJCQlpZiAoc3RhcnQgPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCQllbmQgPSBwY2lfcmVzb3VyY2VfZW5kKGRldiwgaSk7CisJCQkJCWlmIChzY3JlZW5faW5mby5sZmJfYmFzZSA+PSBzdGFydCAmJgorCQkJCQkgICAgc2NyZWVuX2luZm8ubGZiX2Jhc2UgPCBlbmQpIHsKKwkJCQkJCWZvdW5kX2JhciA9IDE7CisJCQkJCX0KIAkJCQl9CiAJCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZF9iYXIpCi0JCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IDA7CisJCQlpZiAoIWZvdW5kX2JhcikKKwkJCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IDA7CiAjZW5kaWYKKwkJfQogCX0KIAlpZiAoc2NyZWVuX2luZm8ubGZiX2Jhc2UpIHsKLQkJaWYgKHNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID09IDApCi0JCQlzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCA9IGluZm8tPnN0cmlkZTsKLQkJaWYgKHNjcmVlbl9pbmZvLmxmYl93aWR0aCA9PSAwKQotCQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gaW5mby0+d2lkdGg7Ci0JCWlmIChzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID09IDApCi0JCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gaW5mby0+aGVpZ2h0OworCQlzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCA9IGNob29zZV92YWx1ZShpbmZvLT5zdHJpZGUsCisJCQlzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCwgT1ZFUlJJREVfU1RSSURFLAorCQkJaW5mby0+ZmxhZ3MpOworCQlzY3JlZW5faW5mby5sZmJfd2lkdGggPSBjaG9vc2VfdmFsdWUoaW5mby0+d2lkdGgsCisJCQlzY3JlZW5faW5mby5sZmJfd2lkdGgsIE9WRVJSSURFX1dJRFRILAorCQkJaW5mby0+ZmxhZ3MpOworCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gY2hvb3NlX3ZhbHVlKGluZm8tPmhlaWdodCwKKwkJCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQsIE9WRVJSSURFX0hFSUdIVCwKKwkJCWluZm8tPmZsYWdzKTsKIAkJaWYgKHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgPT0gMCkKIAkJCXNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgPSBWSURFT19UWVBFX0VGSTsKIAl9IGVsc2UgewpAQCAtMjE0LDYgKzI0MSwxMyBAQAogCQlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID0gMDsKIAkJcmV0dXJuIDA7CiAJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiZWZpZmI6IGRtaSBkZXRlY3RlZCAlcyAtIGZyYW1lYnVmZmVyIGF0ICVwICIKKwkJCSAiKCVkeCVkLCBzdHJpZGUgJWQpXG4iLCBpZC0+aWRlbnQsCisJCQkgKHZvaWQgKilzY3JlZW5faW5mby5sZmJfYmFzZSwgc2NyZWVuX2luZm8ubGZiX3dpZHRoLAorCQkJIHNjcmVlbl9pbmZvLmxmYl9oZWlnaHQsIHNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoKTsKKworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZXA5M3h4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jCmluZGV4IGIzNThkMDQuLmNiZGIxYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZXA5M3h4LWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lcDkzeHgtZmIuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJICogVGhlcmUgaXMgYSBidWcgaW4gdGhlIGVwOTN4eCBmcmFtZWJ1ZmZlciB3aGljaCBjYXVzZXMgcHJvYmxlbXMKIAkgKiBpZiBiaXQgMjcgb2YgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgc2V0LgogCSAqIFNlZTogaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1hcm0ta2VybmVsJm09MTEwMDYxMjQ1NTAyMDAwJnc9MgotCSAqIFRoZXJlIGRvZXMgbm90IHNlZW0gdG8gYmUgYW55IG9mZmljYWwgZXJyYXRhIGZvciB0aGlzLCBidXQgSQorCSAqIFRoZXJlIGRvZXMgbm90IHNlZW0gdG8gYmUgYW55IG9mZmljaWFsIGVycmF0YSBmb3IgdGhpcywgYnV0IEkKIAkgKiBoYXZlIGNvbmZpcm1lZCB0aGUgcHJvYmxlbSBleGlzdHMgb24gbXkgaGFyZHdhcmUgKGVwOTMxNSkgYXQKIAkgKiBsZWFzdC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBlMmJmOTUzLi41YWFjMDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC00Miw5ICs0MiwzNCBAQAogCiAjZGVmaW5lIEZCUElYTUFQU0laRQkoMTAyNCAqIDgpCiAKK3N0YXRpYyBERUZJTkVfTVVURVgocmVnaXN0cmF0aW9uX2xvY2spOwogc3RydWN0IGZiX2luZm8gKnJlZ2lzdGVyZWRfZmJbRkJfTUFYXSBfX3JlYWRfbW9zdGx5OwogaW50IG51bV9yZWdpc3RlcmVkX2ZiIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqZ2V0X2ZiX2luZm8odW5zaWduZWQgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbzsKKworCWlmIChpZHggPj0gRkJfTUFYKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCW11dGV4X2xvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKKwlmYl9pbmZvID0gcmVnaXN0ZXJlZF9mYltpZHhdOworCWlmIChmYl9pbmZvKQorCQlhdG9taWNfaW5jKCZmYl9pbmZvLT5jb3VudCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisKKwlyZXR1cm4gZmJfaW5mbzsKK30KKworc3RhdGljIHZvaWQgcHV0X2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCit7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZmYl9pbmZvLT5jb3VudCkpCisJCXJldHVybjsKKwlpZiAoZmJfaW5mby0+ZmJvcHMtPmZiX2Rlc3Ryb3kpCisJCWZiX2luZm8tPmZib3BzLT5mYl9kZXN0cm95KGZiX2luZm8pOworfQorCiBpbnQgbG9ja19mYl9pbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwpAQCAtNjQ3LDYgKzY3Miw3IEBACiAKIHN0YXRpYyB2b2lkICpmYl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CiAJcmV0dXJuICgqcG9zIDwgRkJfTUFYKSA/IHBvcyA6IE5VTEw7CiB9CiAKQEAgLTY1OCw2ICs2ODQsNyBAQAogCiBzdGF0aWMgdm9pZCBmYl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgZmJfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpAQCAtNjkwLDEzICs3MTcsMzAgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAorLyoKKyAqIFdlIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGZiX2luZm8gaW4gZmlsZS0+cHJpdmF0ZV9kYXRhLAorICogYnV0IGlmIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQgZmIgaGFzIGNoYW5nZWQsIHdlIGRvbid0CisgKiBhY3R1YWxseSB3YW50IHRvIHVzZSBpdC4KKyAqCisgKiBTbyBsb29rIHVwIHRoZSBmYl9pbmZvIHVzaW5nIHRoZSBpbm9kZSBtaW5vciBudW1iZXIsCisgKiBhbmQganVzdCB2ZXJpZnkgaXQgYWdhaW5zdCB0aGUgcmVmZXJlbmNlIHdlIGhhdmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqZmlsZV9mYl9pbmZvKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCWludCBmYmlkeCA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKworCWlmIChpbmZvICE9IGZpbGUtPnByaXZhdGVfZGF0YSkKKwkJaW5mbyA9IE5VTEw7CisJcmV0dXJuIGluZm87Cit9CisKIHN0YXRpYyBzc2l6ZV90CiBmYl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CiAJdTggKmJ1ZmZlciwgKmRzdDsKIAl1OCBfX2lvbWVtICpzcmM7CiAJaW50IGMsIGNudCA9IDAsIGVyciA9IDA7CkBAIC03NjEsOSArODA1LDcgQEAKIGZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CiAJdTggKmJ1ZmZlciwgKnNyYzsKIAl1OCBfX2lvbWVtICpkc3Q7CiAJaW50IGMsIGNudCA9IDAsIGVyciA9IDA7CkBAIC0xMTQxLDEwICsxMTgzLDEwIEBACiAKIHN0YXRpYyBsb25nIGZiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CiAKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBkb19mYl9pb2N0bChpbmZvLCBjbWQsIGFyZyk7CiB9CiAKQEAgLTEyNjUsMTIgKzEzMDcsMTMgQEAKIHN0YXRpYyBsb25nIGZiX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0Jc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbGVfZmJfaW5mbyhmaWxlKTsKKwlzdHJ1Y3QgZmJfb3BzICpmYjsKIAlsb25nIHJldCA9IC1FTk9JT0NUTENNRDsKIAorCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisJZmIgPSBpbmZvLT5mYm9wczsKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgogCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5GTzoKQEAgLTEzMDMsMTYgKzEzNDYsMTggQEAKIHN0YXRpYyBpbnQKIGZiX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKIHsKLQlpbnQgZmJpZHggPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKLQlzdHJ1Y3QgZmJfb3BzICpmYiA9IGluZm8tPmZib3BzOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOworCXN0cnVjdCBmYl9vcHMgKmZiOwogCXVuc2lnbmVkIGxvbmcgb2ZmOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJdTMyIGxlbjsKIAorCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHZtYS0+dm1fcGdvZmYgPiAofjBVTCA+PiBQQUdFX1NISUZUKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJb2ZmID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCWZiID0gaW5mby0+ZmJvcHM7CiAJaWYgKCFmYikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJbXV0ZXhfbG9jaygmaW5mby0+bW1fbG9jayk7CkBAIC0xMzYxLDE0ICsxNDA2LDE2IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IHJlcyA9IDA7CiAKLQlpZiAoZmJpZHggPj0gRkJfTUFYKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0JaWYgKCFpbmZvKQorCWluZm8gPSBnZXRfZmJfaW5mbyhmYmlkeCk7CisJaWYgKCFpbmZvKSB7CiAJCXJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgZmJpZHgpOwotCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKLQlpZiAoIWluZm8pCi0JCXJldHVybiAtRU5PREVWOworCQlpbmZvID0gZ2V0X2ZiX2luZm8oZmJpZHgpOworCQlpZiAoIWluZm8pCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKElTX0VSUihpbmZvKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7CisKIAltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGluZm8tPmZib3BzLT5vd25lcikpIHsKIAkJcmVzID0gLUVOT0RFVjsKQEAgLTEzODYsNiArMTQzMyw4IEBACiAjZW5kaWYKIG91dDoKIAltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCWlmIChyZXMpCisJCXB1dF9mYl9pbmZvKGluZm8pOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE0MDEsNiArMTQ1MCw3IEBACiAJCWluZm8tPmZib3BzLT5mYl9yZWxlYXNlKGluZm8sMSk7CiAJbW9kdWxlX3B1dChpbmZvLT5mYm9wcy0+b3duZXIpOwogCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CisJcHV0X2ZiX2luZm8oaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0ODcsOCArMTUzNywxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGludCBkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKKwogI2RlZmluZSBWR0FfRkJfUEhZUyAweEEwMDAwCi12b2lkIHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoc3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3QgKmEsCitzdGF0aWMgdm9pZCBkb19yZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKHN0cnVjdCBhcGVydHVyZXNfc3RydWN0ICphLAogCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBwcmltYXJ5KQogewogCWludCBpOwpAQCAtMTUwNyw0NiArMTU1OSwzNSBAQAogCQkJKHByaW1hcnkgJiYgZ2VuX2FwZXIgJiYgZ2VuX2FwZXItPmNvdW50ICYmCiAJCQkgZ2VuX2FwZXItPnJhbmdlc1swXS5iYXNlID09IFZHQV9GQl9QSFlTKSkgewogCi0JCQlwcmludGsoS0VSTl9FUlIgImZiOiBjb25mbGljdGluZyBmYiBodyB1c2FnZSAiCisJCQlwcmludGsoS0VSTl9JTkZPICJmYjogY29uZmxpY3RpbmcgZmIgaHcgdXNhZ2UgIgogCQkJICAgICAgICIlcyB2cyAlcyAtIHJlbW92aW5nIGdlbmVyaWMgZHJpdmVyXG4iLAogCQkJICAgICAgIG5hbWUsIHJlZ2lzdGVyZWRfZmJbaV0tPmZpeC5pZCk7Ci0JCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHJlZ2lzdGVyZWRfZmJbaV0pOworCQkJZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihyZWdpc3RlcmVkX2ZiW2ldKTsKIAkJfQogCX0KIH0KLUVYUE9SVF9TWU1CT0wocmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyk7CiAKLS8qKgotICoJcmVnaXN0ZXJfZnJhbWVidWZmZXIgLSByZWdpc3RlcnMgYSBmcmFtZSBidWZmZXIgZGV2aWNlCi0gKglAZmJfaW5mbzogZnJhbWUgYnVmZmVyIGluZm8gc3RydWN0dXJlCi0gKgotICoJUmVnaXN0ZXJzIGEgZnJhbWUgYnVmZmVyIGRldmljZSBAZmJfaW5mby4KLSAqCi0gKglSZXR1cm5zIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLCBvciB6ZXJvIGZvciBzdWNjZXNzLgotICoKLSAqLwotCi1pbnQKLXJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQorc3RhdGljIGludCBkb19yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7CiAJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOwogCi0JaWYgKG51bV9yZWdpc3RlcmVkX2ZiID09IEZCX01BWCkKLQkJcmV0dXJuIC1FTlhJTzsKLQogCWlmIChmYl9jaGVja19mb3JlaWdubmVzcyhmYl9pbmZvKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKLQlyZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKGZiX2luZm8tPmFwZXJ0dXJlcywgZmJfaW5mby0+Zml4LmlkLAorCWRvX3JlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoZmJfaW5mby0+YXBlcnR1cmVzLCBmYl9pbmZvLT5maXguaWQsCiAJCQkJCSBmYl9pc19wcmltYXJ5X2RldmljZShmYl9pbmZvKSk7CiAKKwlpZiAobnVtX3JlZ2lzdGVyZWRfZmIgPT0gRkJfTUFYKQorCQlyZXR1cm4gLUVOWElPOworCiAJbnVtX3JlZ2lzdGVyZWRfZmIrKzsKIAlmb3IgKGkgPSAwIDsgaSA8IEZCX01BWDsgaSsrKQogCQlpZiAoIXJlZ2lzdGVyZWRfZmJbaV0pCiAJCQlicmVhazsKIAlmYl9pbmZvLT5ub2RlID0gaTsKKwlhdG9taWNfc2V0KCZmYl9pbmZvLT5jb3VudCwgMSk7CiAJbXV0ZXhfaW5pdCgmZmJfaW5mby0+bG9jayk7CiAJbXV0ZXhfaW5pdCgmZmJfaW5mby0+bW1fbG9jayk7CiAKQEAgLTE1OTIsNiArMTYzMyw2OSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRvX3VucmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCit7CisJc3RydWN0IGZiX2V2ZW50IGV2ZW50OworCWludCBpLCByZXQgPSAwOworCisJaSA9IGZiX2luZm8tPm5vZGU7CisJaWYgKGkgPCAwIHx8IGkgPj0gRkJfTUFYIHx8IHJlZ2lzdGVyZWRfZmJbaV0gIT0gZmJfaW5mbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWxvY2tfZmJfaW5mbyhmYl9pbmZvKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXZlbnQuaW5mbyA9IGZiX2luZm87CisJcmV0ID0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9GQl9VTkJJTkQsICZldmVudCk7CisJdW5sb2NrX2ZiX2luZm8oZmJfaW5mbyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmYl9pbmZvLT5waXhtYXAuYWRkciAmJgorCSAgICAoZmJfaW5mby0+cGl4bWFwLmZsYWdzICYgRkJfUElYTUFQX0RFRkFVTFQpKQorCQlrZnJlZShmYl9pbmZvLT5waXhtYXAuYWRkcik7CisJZmJfZGVzdHJveV9tb2RlbGlzdCgmZmJfaW5mby0+bW9kZWxpc3QpOworCXJlZ2lzdGVyZWRfZmJbaV0gPSBOVUxMOworCW51bV9yZWdpc3RlcmVkX2ZiLS07CisJZmJfY2xlYW51cF9kZXZpY2UoZmJfaW5mbyk7CisJZGV2aWNlX2Rlc3Ryb3koZmJfY2xhc3MsIE1LREVWKEZCX01BSk9SLCBpKSk7CisJZXZlbnQuaW5mbyA9IGZiX2luZm87CisJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9GQl9VTlJFR0lTVEVSRUQsICZldmVudCk7CisKKwkvKiB0aGlzIG1heSBmcmVlIGZiIGluZm8gKi8KKwlwdXRfZmJfaW5mbyhmYl9pbmZvKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKHN0cnVjdCBhcGVydHVyZXNfc3RydWN0ICphLAorCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBwcmltYXJ5KQoreworCW11dGV4X2xvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKKwlkb19yZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKGEsIG5hbWUsIHByaW1hcnkpOworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworfQorRVhQT1JUX1NZTUJPTChyZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKTsKKworLyoqCisgKglyZWdpc3Rlcl9mcmFtZWJ1ZmZlciAtIHJlZ2lzdGVycyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UKKyAqCUBmYl9pbmZvOiBmcmFtZSBidWZmZXIgaW5mbyBzdHJ1Y3R1cmUKKyAqCisgKglSZWdpc3RlcnMgYSBmcmFtZSBidWZmZXIgZGV2aWNlIEBmYl9pbmZvLgorICoKKyAqCVJldHVybnMgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IsIG9yIHplcm8gZm9yIHN1Y2Nlc3MuCisgKgorICovCitpbnQKK3JlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisJcmV0ID0gZG9fcmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJfaW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQogCiAvKioKICAqCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIgLSByZWxlYXNlcyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UKQEAgLTE2MDksNDYgKzE3MTMsMTUgQEAKICAqICAgICAgdGhhdCB0aGUgZHJpdmVyIGltcGxlbWVudHMgZmJfb3BlbigpIGFuZCBmYl9yZWxlYXNlKCkgdG8KICAqICAgICAgY2hlY2sgdGhhdCBubyBwcm9jZXNzZXMgYXJlIHVzaW5nIHRoZSBkZXZpY2UuCiAgKi8KLQogaW50CiB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQogewotCXN0cnVjdCBmYl9ldmVudCBldmVudDsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JaSA9IGZiX2luZm8tPm5vZGU7Ci0JaWYgKCFyZWdpc3RlcmVkX2ZiW2ldKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9CisJbXV0ZXhfbG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCXJldCA9IGRvX3VucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJfaW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CiAKLQotCWlmICghbG9ja19mYl9pbmZvKGZiX2luZm8pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlldmVudC5pbmZvID0gZmJfaW5mbzsKLQlyZXQgPSBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0ZCX1VOQklORCwgJmV2ZW50KTsKLQl1bmxvY2tfZmJfaW5mbyhmYl9pbmZvKTsKLQotCWlmIChyZXQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KLQotCWlmIChmYl9pbmZvLT5waXhtYXAuYWRkciAmJgotCSAgICAoZmJfaW5mby0+cGl4bWFwLmZsYWdzICYgRkJfUElYTUFQX0RFRkFVTFQpKQotCQlrZnJlZShmYl9pbmZvLT5waXhtYXAuYWRkcik7Ci0JZmJfZGVzdHJveV9tb2RlbGlzdCgmZmJfaW5mby0+bW9kZWxpc3QpOwotCXJlZ2lzdGVyZWRfZmJbaV09TlVMTDsKLQludW1fcmVnaXN0ZXJlZF9mYi0tOwotCWZiX2NsZWFudXBfZGV2aWNlKGZiX2luZm8pOwotCWRldmljZV9kZXN0cm95KGZiX2NsYXNzLCBNS0RFVihGQl9NQUpPUiwgaSkpOwotCWV2ZW50LmluZm8gPSBmYl9pbmZvOwotCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfRkJfVU5SRUdJU1RFUkVELCAmZXZlbnQpOwotCi0JLyogdGhpcyBtYXkgZnJlZSBmYiBpbmZvICovCi0JaWYgKGZiX2luZm8tPmZib3BzLT5mYl9kZXN0cm95KQotCQlmYl9pbmZvLT5mYm9wcy0+ZmJfZGVzdHJveShmYl9pbmZvKTsKLWRvbmU6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwppbmRleCBmNGEzMjc3Li4wNDI1MWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwpAQCAtMzMsNyArMzMsNyBAQAogICogZm9yIGRyaXZlciBwcml2YXRlIGRhdGEgKGluZm8tPnBhcikuIGluZm8tPnBhciAoaWYgYW55KSB3aWxsIGJlCiAgKiBhbGlnbmVkIHRvIHNpemVvZihsb25nKS4KICAqCi0gKiBSZXR1cm5zIHRoZSBuZXcgc3RydWN0dXJlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VyZWQuCisgKiBSZXR1cm5zIHRoZSBuZXcgc3RydWN0dXJlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICoKICAqLwogc3RydWN0IGZiX2luZm8gKmZyYW1lYnVmZmVyX2FsbG9jKHNpemVfdCBzaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZtMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZtMmZiLmMKaW5kZXggMWIwZmViOC4uZDA1MzNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mbTJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZm0yZmIuYwpAQCAtNDUsNyArNDUsNyBAQAogICoJYnVmZmVyIG5lZWRzIGFuIGFtb3VudCBvZiBtZW1vcnkgb2YgMS43NjkuNDcyIGJ5dGVzIHdoaWNoCiAgKglpcyBuZWFyIHRvIDIgTUJ5dGUgKHRoZSBhbGxvY2F0ZWQgYWRkcmVzcyBzcGFjZSBvZiBab3JybzIpLgogICoJVGhlIG1lbW9yeSBpcyBjaGFubmVsIGludGVybGVhdmVkLiBUaGF0IG1lYW5zIGV2ZXJ5IGNoYW5uZWwKLSAqCW93bnMgZm91ciBWUkFNcy4gVW5mb3J0dW5hdGx5IG1vc3QgRnJhbWVNYXN0ZXJzIElJIGFyZQorICoJb3ducyBmb3VyIFZSQU1zLiBVbmZvcnR1bmF0ZWx5IG1vc3QgRnJhbWVNYXN0ZXJzIElJIGFyZQogICoJbm90IGFzc2VtYmxlZCB3aXRoIG1lbW9yeSBmb3IgdGhlIGFscGhhIGNoYW5uZWwuIEluIHRoaXMKICAqCWNhc2UgaXQgY291bGQgYmUgcG9zc2libGUgdG8gYWRkIHRoZSBmcmFtZSBidWZmZXIgaW50byB0aGUKICAqCW5vcm1hbCBtZW1vcnkgcG9vbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jIGIvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKaW5kZXggOTA0OGY4Ny4uYmVkZjViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKQEAgLTg4Miw3ICs4ODIsNyBAQAogICogd2hpY2ggbmVlZHMgdG8gYmUgc2NhbGVkIGluIHRoaXMgZnVuY3Rpb24gZm9yIHRoZSBoYXJkd2FyZS4gVGhpbmdzIHRvIHRha2UKICAqIGludG8gY29uc2lkZXJhdGlvbiBhcmUgaG93IG1hbnkgY29sb3IgcmVnaXN0ZXJzLCBpZiBhbnksIGFyZSBzdXBwb3J0ZWQgd2l0aAogICogdGhlIGN1cnJlbnQgY29sb3IgdmlzdWFsLiBXaXRoIHRydWVjb2xvciBtb2RlIG5vIGNvbG9yIHBhbGV0dGVzIGFyZQotICogc3VwcG9ydGVkLiBIZXJlIGEgcHN1ZWRvIHBhbGV0dGUgaXMgY3JlYXRlZCB3aGljaCB3ZSBzdG9yZSB0aGUgdmFsdWUgaW4KKyAqIHN1cHBvcnRlZC4gSGVyZSBhIHBzZXVkbyBwYWxldHRlIGlzIGNyZWF0ZWQgd2hpY2ggd2Ugc3RvcmUgdGhlIHZhbHVlIGluCiAgKiBwc2V1ZG9fcGFsZXR0ZSBpbiBzdHJ1Y3QgZmJfaW5mby4gRm9yIHBzZXVkb2NvbG9yIG1vZGUgd2UgaGF2ZSBhIGxpbWl0ZWQKICAqIGNvbG9yIHBhbGV0dGUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwppbmRleCA5MzM4OTlkLi43ZTdiN2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9nYmVmYi5jCkBAIC03MjEsNyArNzIxLDcgQEAKIAogCSAgIFRpbGVzIGhhdmUgdGhlIGFkdmFudGFnZSB0aGF0IHRoZXkgY2FuIGJlIGFsbG9jYXRlZCBpbmRpdmlkdWFsbHkgaW4KIAkgICBtZW1vcnkuIEhvd2V2ZXIsIHRoaXMgbWFwcGluZyBpcyBub3QgbGluZWFyIGF0IGFsbCwgd2hpY2ggaXMgbm90Ci0JICAgcmVhbGx5IGNvbnZpZW5pZW50LiBJbiBvcmRlciB0byBzdXBwb3J0IGxpbmVhciBhZGRyZXNzaW5nLCB0aGUgR0JFCisJICAgcmVhbGx5IGNvbnZlbmllbnQuIEluIG9yZGVyIHRvIHN1cHBvcnQgbGluZWFyIGFkZHJlc3NpbmcsIHRoZSBHQkUKIAkgICBETUEgaGFyZHdhcmUgaXMgZm9vbGVkIGludG8gdGhpbmtpbmcgdGhlIHNjcmVlbiBpcyBvbmx5IG9uZSB0aWxlCiAJICAgbGFyZ2UgYW5kIGJ1dCBoYXMgYSBncmVhdGVyIGhlaWdodCwgc28gdGhhdCB0aGUgRE1BIHRyYW5zZmVyIGNvdmVycwogCSAgIHRoZSBzYW1lIHJlZ2lvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYi5oIGIvZHJpdmVycy92aWRlby9nZW9kZS9seGZiLmgKaW5kZXggYmU4Y2NiNC4uY2ZjZDgwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9seGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9nZW9kZS9seGZiLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogfTsKIAogI2RlZmluZSBHUF9CTFRfU1RBVFVTX0NFCQkoMSA8PCA0KQkvKiBjbWQgYnVmIGVtcHR5ICovCi0jZGVmaW5lIEdQX0JMVF9TVEFUVVNfUEIJCSgxIDw8IDApCS8qIHByaW1hdGl2ZSBidXN5ICovCisjZGVmaW5lIEdQX0JMVF9TVEFUVVNfUEIJCSgxIDw8IDApCS8qIHByaW1pdGl2ZSBidXN5ICovCiAKIAogLyogRGlzcGxheSBDb250cm9sbGVyIHJlZ2lzdGVycyAodGFibGUgNi00NyBmcm9tIHRoZSBkYXRhIGJvb2spICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfYWNjZWwuYwppbmRleCBmNWJlZGVlLi43NjcyZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9hY2NlbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX2FjY2VsLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogICogQHBhcjogcG9pbnRlciB0byBpODEwZmJfcGFyIHN0cnVjdHVyZQogICoKICAqIERFU0NSSVBUSU9OOgotICogQ2hlY2tzL3dhaXRzIGZvciBzdWZmaWNlbnQgc3BhY2UgaW4gcmluZ2J1ZmZlciBvZiBzaXplCisgKiBDaGVja3Mvd2FpdHMgZm9yIHN1ZmZpY2llbnQgc3BhY2UgaW4gcmluZ2J1ZmZlciBvZiBzaXplCiAgKiBzcGFjZS4gIFJldHVybnMgdGhlIHRhaWwgb2YgdGhlIGJ1ZmZlcgogICovIAogc3RhdGljIGlubGluZSB1MzIgYmVnaW5faXJpbmcoc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiBzcGFjZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwT3ZlcmxheURldmljZS5jIGIvZHJpdmVycy92aWRlby9reXJvL1NURzQwMDBPdmVybGF5RGV2aWNlLmMKaW5kZXggYThjOTcxMy4uMGFlZWFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9reXJvL1NURzQwMDBPdmVybGF5RGV2aWNlLmMKKysrIGIvZHJpdmVycy92aWRlby9reXJvL1NURzQwMDBPdmVybGF5RGV2aWNlLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCS8qKioqKioqKioqKioqKioqKiBIb3Jpem9udGFsIGRlY2ltYXRpb24vc2NhbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAkvKgotCSAqIE5vdyB3ZSBoYW5kbGUgdGhlIGhvcml6b250YWwgY2FzZSwgdGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyaXNvbiBvZgorCSAqIE5vdyB3ZSBoYW5kbGUgdGhlIGhvcml6b250YWwgY2FzZSwgdGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZgogCSAqIHRoZSB2ZXJ0aWNhbCBjYXNlIGluIHRoYXQgd2UgZGVjaW1hdGUgYnkgZmFjdG9ycyBvZiAyLiAgYXMgd2UgYXJlCiAJICogd29ya2luZyBpbiB3b3JkcyB3ZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZGVjaW1hdGUgYnkgdGhlc2UKIAkgKiBmYWN0b3JzLiAgYXMgd2UgYWx3YXlzIGhhdmUgdG8gaGF2ZSBhIGJ1ZmZlciB3aGljaCBpcyBhbGlnbmVkIHRvIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwUmVnLmggYi9kcml2ZXJzL3ZpZGVvL2t5cm8vU1RHNDAwMFJlZy5oCmluZGV4IDI0NDU0OWUuLjVkNjI2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwUmVnLmgKKysrIGIvZHJpdmVycy92aWRlby9reXJvL1NURzQwMDBSZWcuaApAQCAtMTYsNyArMTYsNyBAQAogCiAvKgogICogTWFjcm9zIHRoYXQgYWNjZXNzIG1lbW9yeSBtYXBwZWQgY2FyZCByZWdpc3RlcnMgaW4gUENJIHNwYWNlCi0gKiBBZGQgYW4gYXBwcm9wcmFpdGUgc2VjdGlvbiBmb3IgeW91ciBPUyBvciBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlLgorICogQWRkIGFuIGFwcHJvcHJpYXRlIHNlY3Rpb24gZm9yIHlvdXIgT1Mgb3IgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZS4KICAqLwogI2lmIGRlZmluZWQoX19LRVJORUxfXykKICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oCmluZGV4IGM2ZWQ3ODAuLjFlNmU0NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgICAgICBNMTA2NF9YRFZJQ0xLQ1RSTF9EVklMT09QQ1RMICAgICAgIDB4MzAKIAkvKiBDUlRDMiBwaXhlbCBjbG9jayBhbGxvd2VkIHRvKDApL2Jsb2NrZWQgZnJvbSgxKSBkcml2aW5nIENSVEMyICovCiAjZGVmaW5lICAgICAgTTEwNjRfWERWSUNMS0NUUkxfQzJEVklDTEtFTiAgICAgICAweDQwCi0JLyogUDFQTEwgbG9vcCBmaWx0ZXIgYmFuZHdpdGggc2VsZWN0aW9uICovCisJLyogUDFQTEwgbG9vcCBmaWx0ZXIgYmFuZHdpZHRoIHNlbGVjdGlvbiAqLwogI2RlZmluZSAgICAgIE0xMDY0X1hEVklDTEtDVFJMX1AxTE9PUEJXRFRDVEwgICAgMHg4MAogI2RlZmluZSBNMTA2NF9YQ1VSQ09MMFJFRAkweDA4CiAjZGVmaW5lIE0xMDY0X1hDVVJDT0wwR1JFRU4JMHgwOQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYwppbmRleCA4MzVhYWFhLi45YTQ0Y2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCQlody0+REFDcmVnW1BPUzMwMjZfWE1JU0NDVFJMXSA9IFRWUDMwMjZfWE1JU0NDVFJMX0RBQ19QVVAgfCBUVlAzMDI2X1hNSVNDQ1RSTF9EQUNfOEJJVCB8IFRWUDMwMjZfWE1JU0NDVFJMX1BTRUxfRElTIHwgVFZQMzAyNl9YTUlTQ0NUUkxfUFNFTF9MT1c7CiAJCQlicmVhazsKIAkJY2FzZSAxNjoKLQkJCS8qIFhMQVRDSENUUkwgc2hvdWxkIGJlIF80XzEgLyBfMl8xLi4uIFdoeSBpcyBub3Q/IChfMl8xIGlzIHVzZWQgZXZlcnl0aW1lKSAqLworCQkJLyogWExBVENIQ1RSTCBzaG91bGQgYmUgXzRfMSAvIF8yXzEuLi4gV2h5IGlzIG5vdD8gKF8yXzEgaXMgdXNlZCBldmVyeSB0aW1lKSAqLwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hUUlVFQ09MT1JDVFJMXSA9IChtaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCA9PSA1KSA/IChUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX0RJUkVDVENPTE9SIHwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9PUkdCXzE1NTUpIDogKFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfRElSRUNUQ09MT1IgfCBUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX1JHQl81NjUpOwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hNVVhDVFJMXSA9IG11eGN0cmwgfCBUVlAzMDI2X1hNVVhDVFJMX1BJWEVMXzE2QklUOwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hDTEtDVFJMXSA9IFRWUDMwMjZfWENMS0NUUkxfU1JDX1BMTCB8IFRWUDMwMjZfWENMS0NUUkxfRElWMjsKQEAgLTM5OSw3ICszOTksNyBAQAogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hDTEtDVFJMXSA9IFRWUDMwMjZfWENMS0NUUkxfU1JDX1BMTCB8IFRWUDMwMjZfWENMS0NUUkxfRElWNDsKIAkJCWJyZWFrOwogCQljYXNlIDMyOgotCQkJLyogWExBVENIQ1RSTCBzaG91bGQgYmUgXzJfMSAvIF8xXzEuLi4gV2h5IGlzIG5vdD8gKF8yXzEgaXMgdXNlZCBldmVyeXRpbWUpICovCisJCQkvKiBYTEFUQ0hDVFJMIHNob3VsZCBiZSBfMl8xIC8gXzFfMS4uLiBXaHkgaXMgbm90PyAoXzJfMSBpcyB1c2VkIGV2ZXJ5IHRpbWUpICovCiAJCQlody0+REFDcmVnW1BPUzMwMjZfWE1VWENUUkxdID0gbXV4Y3RybCB8IFRWUDMwMjZfWE1VWENUUkxfUElYRUxfMzJCSVQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYwppbmRleCA1Y2U2ZmE2Li40NGJmOGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCkBAIC02MjEsNyArNjIxLDcgQEAKIAkJdmFyLT55b2Zmc2V0ID0gdmFyLT55cmVzX3ZpcnR1YWwgLSB2YXItPnlyZXM7CiAKIAlpZiAoYnBwID09IDE2ICYmIHZhci0+Z3JlZW4ubGVuZ3RoID09IDUpIHsKLQkJYnBwLS07IC8qIGFuIGFydGlmaWNhbCB2YWx1ZSAtIDE1ICovCisJCWJwcC0tOyAvKiBhbiBhcnRpZmljaWFsIHZhbHVlIC0gMTUgKi8KIAl9CiAKIAlmb3IgKHJnYnQgPSB0YWJsZTsgcmdidC0+YnBwIDwgYnBwOyByZ2J0KyspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oCmluZGV4IGY5NmE0NzEuLjExZWQ1N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmgKQEAgLTEyLDcgKzEyLDcgQEAKICN1bmRlZiBNQVRST1hGQl9ERUJVRwogCiAvKiBoZWF2eSBkZWJ1Z2dpbmc6ICovCi0vKiAtLSBsb2dzIHB1dGNbc10sIHNvIGV2ZXJ5dGltZSBhIGNoYXIgaXMgZGlzcGxheWVkLCBpdCdzIGxvZ2dlZCAqLworLyogLS0gbG9ncyBwdXRjW3NdLCBzbyBldmVyeSB0aW1lIGEgY2hhciBpcyBkaXNwbGF5ZWQsIGl0J3MgbG9nZ2VkICovCiAjdW5kZWYgTUFUUk9YRkJfREVCVUdfSEVBVlkKIAogLyogVGhpcyBvbmUgX2NvdWxkXyBjYXVzZSBpbmZpbml0ZSBsb29wcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udWM5MDBmYi5oIGIvZHJpdmVycy92aWRlby9udWM5MDBmYi5oCmluZGV4IDZjMjNhYTMuLmJjN2M5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmgKQEAgLTgsNyArOCw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgIEF1dGhlcjoKKyAqICAgQXV0aG9yOgogICogICAgICAgIFdhbmcgUWlhbmcocnVyYWxpdHkubGludXhAZ21haWwuY29tKSAgMjAwOS8xMi8xNgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnIGIvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcKaW5kZXggMTVlN2YxOS4uMTk2ZmEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcKQEAgLTY0LDcgKzY0LDcgQEAKIAlkZXBlbmRzIG9uIEZCX09NQVAgJiYgRkJfT01BUF9MQ0RDX0VYVEVSTkFMCiAJaGVscAogCSAgU2F5IFkgaGVyZSwgaWYgeW91ciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgY2FwYWJsZSBvZgotCSAgbm90aWZ5aW5nIHRoZSBmcmFtZSBidWZmZXIgZHJpdmVyIHdoZW4gYSBjaGFuZ2UgaGFzIG9jY3VyZWQgaW4KKwkgIG5vdGlmeWluZyB0aGUgZnJhbWUgYnVmZmVyIGRyaXZlciB3aGVuIGEgY2hhbmdlIGhhcyBvY2N1cnJlZCBpbgogCSAgdGhlIGZyYW1lIGJ1ZmZlciBjb250ZW50IGFuZCB0aHVzIGEgcmVsb2FkIG9mIHRoZSBpbWFnZSBkYXRhIHRvCiAJICB0aGUgZXh0ZXJuYWwgZnJhbWUgYnVmZmVyIGlzIHJlcXVpcmVkLiBJZiB1bnN1cmUsIHNheSBOLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9oZG1pLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9oZG1pLmMKaW5kZXggMGQ0NGYwNy4uYTk4MWRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvaGRtaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2hkbWkuYwpAQCAtNTg3LDcgKzU4Nyw3IEBACiAJc3RydWN0IGhkbWlfY20gY207CiAJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyBlZGlkX3RpbWluZ3M7CiAKLQkvKiBzZWFjaCBibG9jayAwLCB0aGVyZSBhcmUgNCBEVERzIGFycmFuZ2VkIGluIHByaW9yaXR5IG9yZGVyICovCisJLyogc2VhcmNoIGJsb2NrIDAsIHRoZXJlIGFyZSA0IERURHMgYXJyYW5nZWQgaW4gcHJpb3JpdHkgb3JkZXIgKi8KIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBFRElEX1NJWkVfQkxPQ0swX1RJTUlOR19ERVNDUklQVE9SOyBjb3VudCsrKSB7CiAJCWN1cnJlbnRfZGVzY3JpcHRvcl9hZGRycyA9CiAJCQlFRElEX0RFU0NSSVBUT1JfQkxPQ0swX0FERFJFU1MgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMgYi9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYwppbmRleCBjZjRiZWI5Li4wMjgzYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYwpAQCAtMjUsNyArMjUsNyBAQAogCiAvKgogICogV0FSTklORzogVGhpcyBjb250cm9sbGVyIGlzIGF0dGFjaGVkIHRvIFN5c3RlbSBCdXMgMiBvZiB0aGUgUFhBIHdoaWNoCi0gKiBuZWVkcyBpdHMgYXJiaXRlciB0byBiZSBlbmFibGVkIGV4cGxpY3RseSAoQ0tFTkIgJiAxPDw5KS4KKyAqIG5lZWRzIGl0cyBhcmJpdGVyIHRvIGJlIGVuYWJsZWQgZXhwbGljaXRseSAoQ0tFTkIgJiAxPDw5KS4KICAqIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gZG8gdGhpcyBmcm9tIExpbnV4LCBzbyB5b3UgbmVlZCB0byB0ZWFjaAogICogeW91ciBib290bG9hZGVyIGZvciBub3cuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCBhMmU1YjUxLi4wZjRlOGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC0xNjQ4LDcgKzE2NDgsOSBAQAogCiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIENQVUZSRVFfUFJFQ0hBTkdFOgotCQlpZiAoIWZiaS0+b3ZlcmxheVswXS51c2FnZSAmJiAhZmJpLT5vdmVybGF5WzFdLnVzYWdlKQorI2lmZGVmIENPTkZJR19GQl9QWEFfT1ZFUkxBWQorCQlpZiAoIShmYmktPm92ZXJsYXlbMF0udXNhZ2UgfHwgZmJpLT5vdmVybGF5WzFdLnVzYWdlKSkKKyNlbmRpZgogCQkJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19ESVNBQkxFX0NMS0NIQU5HRSk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwppbmRleCA2ODE3ZDE4Li4zYjZjZGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICN1bmRlZiB3cml0ZWwKICNkZWZpbmUgd3JpdGVsKHYsIHIpIGRvIHsgXAogCXByaW50ayhLRVJOX0RFQlVHICIlczogJTA4eCA9PiAlcFxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpdiwgcik7IFwKLQlfX3Jhd193cml0ZWwodiwgcik7IH0gd2hpbGUoMCkKKwlfX3Jhd193cml0ZWwodiwgcik7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogRkJfUzNDX0RFQlVHX1JFR1dSSVRFICovCiAKIC8qIGlycV9mbGFncyBiaXRzICovCkBAIC01MTgsNyArNTE4LDcgQEAKIAogCQlkYXRhID0gVklEVENPTjJfTElORVZBTCh2YXItPnlyZXMgLSAxKSB8CiAJCSAgICAgICBWSURUQ09OMl9IT1pWQUwodmFyLT54cmVzIC0gMSk7Ci0JCXdyaXRlbChkYXRhLCByZWdzICtzZmItPnZhcmlhbnQudmlkdGNvbiArIDggKTsKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBzZmItPnZhcmlhbnQudmlkdGNvbiArIDgpOwogCX0KIAogCS8qIHdyaXRlIHRoZSBidWZmZXIgYWRkcmVzcyAqLwpAQCAtMTMwNCw2ICsxMzA0LDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgczNjX2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqcGxhdGlkOwogCXN0cnVjdCBzM2NfZmJfZHJpdmVyZGF0YSAqZmJkcnY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhICpwZDsKQEAgLTEzMTIsNyArMTMxMyw4IEBACiAJaW50IHdpbjsKIAlpbnQgcmV0ID0gMDsKIAotCWZiZHJ2ID0gKHN0cnVjdCBzM2NfZmJfZHJpdmVyZGF0YSAqKXBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldiktPmRyaXZlcl9kYXRhOworCXBsYXRpZCA9IHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldik7CisJZmJkcnYgPSAoc3RydWN0IHMzY19mYl9kcml2ZXJkYXRhICopcGxhdGlkLT5kcml2ZXJfZGF0YTsKIAogCWlmIChmYmRydi0+dmFyaWFudC5ucl93aW5kb3dzID4gUzNDX0ZCX01BWF9XSU4pIHsKIAkJZGV2X2VycihkZXYsICJ0b28gbWFueSB3aW5kb3dzLCBjYW5ub3QgYXR0YWNoXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNmYi5jIGIvZHJpdmVycy92aWRlby9zM2ZiLmMKaW5kZXggZGRlZGFkOS4uYzQ0ODJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2ZiLmMKQEAgLTcxLDkgKzcxLDkgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzM19uYW1lc1tdID0geyJTMyBVbmtub3duIiwgIlMzIFRyaW8zMiIsICJTMyBUcmlvNjQiLCAiUzMgVHJpbzY0VisiLAogCQkJIlMzIFRyaW82NFVWKyIsICJTMyBUcmlvNjRWMi9EWCIsICJTMyBUcmlvNjRWMi9HWCIsCi0JCQkiUzMgUGxhdG8vUFgiLCAiUzMgQXVyb3JhNjRWUCIsICJTMyBWaXJnZSIsCisJCQkiUzMgUGxhdG8vUFgiLCAiUzMgQXVyb3JhNjRWKyIsICJTMyBWaXJnZSIsCiAJCQkiUzMgVmlyZ2UvVlgiLCAiUzMgVmlyZ2UvRFgiLCAiUzMgVmlyZ2UvR1giLAotCQkJIlMzIFZpcmdlL0dYMiIsICJTMyBWaXJnZS9HWDJQIiwgIlMzIFZpcmdlL0dYMlAiLAorCQkJIlMzIFZpcmdlL0dYMiIsICJTMyBWaXJnZS9HWDIrIiwgIiIsCiAJCQkiUzMgVHJpbzNELzFYIiwgIlMzIFRyaW8zRC8yWCIsICJTMyBUcmlvM0QvMlgiLAogCQkJIlMzIFRyaW8zRCJ9OwogCkBAIC05MCw5ICs5MCw4IEBACiAjZGVmaW5lIENISVBfOTg4X1ZJUkdFX1ZYCTB4MEEKICNkZWZpbmUgQ0hJUF8zNzVfVklSR0VfRFgJMHgwQgogI2RlZmluZSBDSElQXzM4NV9WSVJHRV9HWAkweDBDCi0jZGVmaW5lIENISVBfMzU2X1ZJUkdFX0dYMgkweDBECi0jZGVmaW5lIENISVBfMzU3X1ZJUkdFX0dYMlAJMHgwRQotI2RlZmluZSBDSElQXzM1OV9WSVJHRV9HWDJQCTB4MEYKKyNkZWZpbmUgQ0hJUF8zNTdfVklSR0VfR1gyCTB4MEQKKyNkZWZpbmUgQ0hJUF8zNTlfVklSR0VfR1gyUAkweDBFCiAjZGVmaW5lIENISVBfMzYwX1RSSU8zRF8xWAkweDEwCiAjZGVmaW5lIENISVBfMzYyX1RSSU8zRF8yWAkweDExCiAjZGVmaW5lIENISVBfMzY4X1RSSU8zRF8yWAkweDEyCkBAIC0zNTksNyArMzU4LDkgQEAKIAl2Z2FfdyhwYXItPnN0YXRlLnZnYWJhc2UsIFZHQV9NSVNfVywgcmVndmFsIHwgVkdBX01JU19FTkJfUExMX0xPQUQpOwogCiAJLyogU2V0IFMzIGNsb2NrIHJlZ2lzdGVycyAqLwotCWlmIChwYXItPmNoaXAgPT0gQ0hJUF8zNjBfVFJJTzNEXzFYIHx8CisJaWYgKHBhci0+Y2hpcCA9PSBDSElQXzM1N19WSVJHRV9HWDIgfHwKKwkgICAgcGFyLT5jaGlwID09IENISVBfMzU5X1ZJUkdFX0dYMlAgfHwKKwkgICAgcGFyLT5jaGlwID09IENISVBfMzYwX1RSSU8zRF8xWCB8fAogCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjJfVFJJTzNEXzJYIHx8CiAJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM2OF9UUklPM0RfMlgpIHsKIAkJdmdhX3dzZXEocGFyLT5zdGF0ZS52Z2FiYXNlLCAweDEyLCAobiAtIDIpIHwgKChyICYgMykgPDwgNikpOwkvKiBuIGFuZCB0d28gYml0cyBvZiByICovCkBAIC01NjAsNyArNTYxLDkgQEAKIAlwcl9kZWJ1ZygiZmIlZDogb2Zmc2V0IHJlZ2lzdGVyICAgICAgIDogJWRcbiIsIGluZm8tPm5vZGUsIG9mZnNldF92YWx1ZSk7CiAJc3ZnYV93Y3J0X211bHRpKHBhci0+c3RhdGUudmdhYmFzZSwgczNfb2Zmc2V0X3JlZ3MsIG9mZnNldF92YWx1ZSk7CiAKLQlpZiAocGFyLT5jaGlwICE9IENISVBfMzYwX1RSSU8zRF8xWCAmJgorCWlmIChwYXItPmNoaXAgIT0gQ0hJUF8zNTdfVklSR0VfR1gyICYmCisJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM1OV9WSVJHRV9HWDJQICYmCisJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM2MF9UUklPM0RfMVggJiYKIAkgICAgcGFyLT5jaGlwICE9IENISVBfMzYyX1RSSU8zRF8yWCAmJgogCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNjhfVFJJTzNEXzJYKSB7CiAJCXZnYV93Y3J0KHBhci0+c3RhdGUudmdhYmFzZSwgMHg1NCwgMHgxOCk7IC8qIE0gcGFyYW1ldGVyICovCkBAIC02MDQsNyArNjA3LDkgQEAKIAkJdmdhX3djcnQocGFyLT5zdGF0ZS52Z2FiYXNlLCAweDY2LCAweDkwKTsKIAl9CiAKLQlpZiAocGFyLT5jaGlwID09IENISVBfMzYwX1RSSU8zRF8xWCB8fAorCWlmIChwYXItPmNoaXAgPT0gQ0hJUF8zNTdfVklSR0VfR1gyIHx8CisJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM1OV9WSVJHRV9HWDJQIHx8CisJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM2MF9UUklPM0RfMVggfHwKIAkgICAgcGFyLT5jaGlwID09IENISVBfMzYyX1RSSU8zRF8yWCB8fAogCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjhfVFJJTzNEXzJYIHx8CiAJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM2NV9UUklPM0QgICAgfHwKQEAgLTYxNyw4ICs2MjIsNyBAQAogCQl2Z2Ffd2NydChwYXItPnN0YXRlLnZnYWJhc2UsIDB4NjYsIDB4ODEpOwogCX0KIAotCWlmIChwYXItPmNoaXAgPT0gQ0hJUF8zNTZfVklSR0VfR1gyICB8fAotCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNTdfVklSR0VfR1gyUCB8fAorCWlmIChwYXItPmNoaXAgPT0gQ0hJUF8zNTdfVklSR0VfR1gyICB8fAogCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNTlfVklSR0VfR1gyUCB8fAogCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjBfVFJJTzNEXzFYIHx8CiAJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM2Ml9UUklPM0RfMlggfHwKQEAgLTY3NCw2ICs2NzgsOCBAQAogCQlwcl9kZWJ1ZygiZmIlZDogOCBiaXQgcHNldWRvY29sb3JcbiIsIGluZm8tPm5vZGUpOwogCQlzdmdhX3djcnRfbWFzayhwYXItPnN0YXRlLnZnYWJhc2UsIDB4NTAsIDB4MDAsIDB4MzApOwogCQlpZiAoaW5mby0+dmFyLnBpeGNsb2NrID4gMjAwMDAgfHwKKwkJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM1N19WSVJHRV9HWDIgfHwKKwkJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM1OV9WSVJHRV9HWDJQIHx8CiAJCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjBfVFJJTzNEXzFYIHx8CiAJCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjJfVFJJTzNEXzJYIHx8CiAJCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjhfVFJJTzNEXzJYKQpAQCAtNzAyLDcgKzcwOCw5IEBACiAJCX0gZWxzZSB7CiAJCQlzdmdhX3djcnRfbWFzayhwYXItPnN0YXRlLnZnYWJhc2UsIDB4NTAsIDB4MTAsIDB4MzApOwogCQkJc3ZnYV93Y3J0X21hc2socGFyLT5zdGF0ZS52Z2FiYXNlLCAweDY3LCAweDMwLCAweEYwKTsKLQkJCWlmIChwYXItPmNoaXAgIT0gQ0hJUF8zNjBfVFJJTzNEXzFYICYmCisJCQlpZiAocGFyLT5jaGlwICE9IENISVBfMzU3X1ZJUkdFX0dYMiAmJgorCQkJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM1OV9WSVJHRV9HWDJQICYmCisJCQkgICAgcGFyLT5jaGlwICE9IENISVBfMzYwX1RSSU8zRF8xWCAmJgogCQkJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM2Ml9UUklPM0RfMlggJiYKIAkJCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNjhfVFJJTzNEXzJYKQogCQkJCWhtdWwgPSAyOwpAQCAtNzI3LDcgKzczNSw5IEBACiAJCX0gZWxzZSB7CiAJCQlzdmdhX3djcnRfbWFzayhwYXItPnN0YXRlLnZnYWJhc2UsIDB4NTAsIDB4MTAsIDB4MzApOwogCQkJc3ZnYV93Y3J0X21hc2socGFyLT5zdGF0ZS52Z2FiYXNlLCAweDY3LCAweDUwLCAweEYwKTsKLQkJCWlmIChwYXItPmNoaXAgIT0gQ0hJUF8zNjBfVFJJTzNEXzFYICYmCisJCQlpZiAocGFyLT5jaGlwICE9IENISVBfMzU3X1ZJUkdFX0dYMiAmJgorCQkJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM1OV9WSVJHRV9HWDJQICYmCisJCQkgICAgcGFyLT5jaGlwICE9IENISVBfMzYwX1RSSU8zRF8xWCAmJgogCQkJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM2Ml9UUklPM0RfMlggJiYKIAkJCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNjhfVFJJTzNEXzJYKQogCQkJCWhtdWwgPSAyOwpAQCAtMTA2OSw2ICsxMDc5LDE2IEBACiAJCQlpbmZvLT5zY3JlZW5fc2l6ZSA9IDIgPDwgMjA7CiAJCQlicmVhazsKIAkJfQorCX0gZWxzZSBpZiAocGFyLT5jaGlwID09IENISVBfMzU3X1ZJUkdFX0dYMiB8fAorCQkgICBwYXItPmNoaXAgPT0gQ0hJUF8zNTlfVklSR0VfR1gyUCkgeworCQlzd2l0Y2ggKChyZWd2YWwgJiAweEMwKSA+PiA2KSB7CisJCWNhc2UgMTogLyogNE1CICovCisJCQlpbmZvLT5zY3JlZW5fc2l6ZSA9IDQgPDwgMjA7CisJCQlicmVhazsKKwkJY2FzZSAzOiAvKiAyTUIgKi8KKwkJCWluZm8tPnNjcmVlbl9zaXplID0gMiA8PCAyMDsKKwkJCWJyZWFrOworCQl9CiAJfSBlbHNlCiAJCWluZm8tPnNjcmVlbl9zaXplID0gczNfbWVtc2l6ZXNbcmVndmFsID4+IDVdIDw8IDEwOwogCWluZm8tPmZpeC5zbWVtX2xlbiA9IGluZm8tPnNjcmVlbl9zaXplOwpAQCAtMTI2OCw4ICsxMjg4LDggQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1MzLCAweDU2MzEpLCAuZHJpdmVyX2RhdGEgPSBDSElQXzMyNV9WSVJHRX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TMywgMHg4ODNEKSwgLmRyaXZlcl9kYXRhID0gQ0hJUF85ODhfVklSR0VfVlh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUzMsIDB4OEEwMSksIC5kcml2ZXJfZGF0YSA9IENISVBfWFhYX1ZJUkdFX0RYR1h9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUzMsIDB4OEExMCksIC5kcml2ZXJfZGF0YSA9IENISVBfMzU2X1ZJUkdFX0dYMn0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TMywgMHg4QTExKSwgLmRyaXZlcl9kYXRhID0gQ0hJUF8zNTdfVklSR0VfR1gyUH0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TMywgMHg4QTEwKSwgLmRyaXZlcl9kYXRhID0gQ0hJUF8zNTdfVklSR0VfR1gyfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1MzLCAweDhBMTEpLCAuZHJpdmVyX2RhdGEgPSBDSElQXzM1OV9WSVJHRV9HWDJQfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1MzLCAweDhBMTIpLCAuZHJpdmVyX2RhdGEgPSBDSElQXzM1OV9WSVJHRV9HWDJQfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1MzLCAweDhBMTMpLCAuZHJpdmVyX2RhdGEgPSBDSElQXzM2WF9UUklPM0RfMVhfMlh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUzMsIDB4ODkwNCksIC5kcml2ZXJfZGF0YSA9IENISVBfMzY1X1RSSU8zRH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jCmluZGV4IGIxNmU2MTMuLmJiNzFmZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jCkBAIC0xNTksOCArMTU5LDcgQEAKIAkJZWxzZQogCQkJZGV2X3dhcm4oJmNoYW4tPnBhci0+cGNpZGV2LT5kZXYsCiAJCQkJICJGYWlsZWQgdG8gcmVnaXN0ZXIgSTJDIGJ1cyAlcy5cbiIsIG5hbWUpOwotCX0gZWxzZQotCQljaGFuLT5wYXIgPSBOVUxMOworCX0KIAogCXJldHVybiByYzsKIH0KQEAgLTE3MCw5ICsxNjksOCBAQAogCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlwYXItPmNoYW4ucGFyCT0gcGFyOwogCi0Jc3dpdGNoKGluZm8tPmZpeC5hY2NlbCkgewotCWNhc2UgRkJfQUNDRUxfUFJPU0FWQUdFX0REUks6Ci0JY2FzZSBGQl9BQ0NFTF9QUk9TQVZBR0VfUE06CisJc3dpdGNoIChwYXItPmNoaXApIHsKKwljYXNlIFMzX1BST1NBVkFHRToKIAkJcGFyLT5jaGFuLnJlZyAgICAgICAgID0gQ1JfU0VSSUFMMjsKIAkJcGFyLT5jaGFuLmlvYWRkciAgICAgID0gcGFyLT5tbWlvLnZiYXNlOwogCQlwYXItPmNoYW4uYWxnby5zZXRzZGEgPSBwcm9zYXZhZ2VfZ3Bpb19zZXRzZGE7CkBAIC0xODAsNyArMTc4LDcgQEAKIAkJcGFyLT5jaGFuLmFsZ28uZ2V0c2RhID0gcHJvc2F2YWdlX2dwaW9fZ2V0c2RhOwogCQlwYXItPmNoYW4uYWxnby5nZXRzY2wgPSBwcm9zYXZhZ2VfZ3Bpb19nZXRzY2w7CiAJCWJyZWFrOwotCWNhc2UgRkJfQUNDRUxfU0FWQUdFNDoKKwljYXNlIFMzX1NBVkFHRTQ6CiAJCXBhci0+Y2hhbi5yZWcgPSBDUl9TRVJJQUwxOwogCQlpZiAocGFyLT5wY2lkZXYtPnJldmlzaW9uID4gMSAmJiAhKFZHQXJDUigweGE2LCBwYXIpICYgMHg0MCkpCiAJCQlwYXItPmNoYW4ucmVnID0gQ1JfU0VSSUFMMjsKQEAgLTE5MCw4ICsxODgsOCBAQAogCQlwYXItPmNoYW4uYWxnby5nZXRzZGEgPSBwcm9zYXZhZ2VfZ3Bpb19nZXRzZGE7CiAJCXBhci0+Y2hhbi5hbGdvLmdldHNjbCA9IHByb3NhdmFnZV9ncGlvX2dldHNjbDsKIAkJYnJlYWs7Ci0JY2FzZSBGQl9BQ0NFTF9TQVZBR0UyMDAwOgotCQlwYXItPmNoYW4ucmVnICAgICAgICAgPSAweGZmMjA7CisJY2FzZSBTM19TQVZBR0UyMDAwOgorCQlwYXItPmNoYW4ucmVnICAgICAgICAgPSBNTV9TRVJJQUwxOwogCQlwYXItPmNoYW4uaW9hZGRyICAgICAgPSBwYXItPm1taW8udmJhc2U7CiAJCXBhci0+Y2hhbi5hbGdvLnNldHNkYSA9IHNhdmFnZTRfZ3Bpb19zZXRzZGE7CiAJCXBhci0+Y2hhbi5hbGdvLnNldHNjbCA9IHNhdmFnZTRfZ3Bpb19zZXRzY2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaAppbmRleCBlNGMzZjIxLi40ZTk0OTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLmgKQEAgLTE1Myw3ICsxNTMsNyBAQAogCXVuc2lnbmVkIGNoYXIgQ1JUQ1syNV07ICAgICAgIC8qIENydGMgQ29udHJvbGxlciAqLwogCXVuc2lnbmVkIGNoYXIgU2VxdWVuY2VyWzVdOyAgIC8qIFZpZGVvIFNlcXVlbmNlciAqLwogCXVuc2lnbmVkIGNoYXIgR3JhcGhpY3NbOV07ICAgIC8qIFZpZGVvIEdyYXBoaWNzICovCi0JdW5zaWduZWQgY2hhciBBdHRyaWJ1dGVbMjFdOyAgLyogVmlkZW8gQXRyaWJ1dGUgKi8KKwl1bnNpZ25lZCBjaGFyIEF0dHJpYnV0ZVsyMV07ICAvKiBWaWRlbyBBdHRyaWJ1dGUgKi8KIAogCXVuc2lnbmVkIGludCBtb2RlLCByZWZyZXNoOwogCXVuc2lnbmVkIGNoYXIgU1IwOCwgU1IwRSwgU1IwRjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggNDg3OTExZS4uYTJkYzFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTM4NSw3ICszODUsNyBAQAogCUJDSV9TRU5EKEdsb2JhbEJpdG1hcERlc2NyaXB0b3IpOwogCiAJLyoKLQkgKiBJIGRvbid0IGtub3cgd2h5LCBzZW5kaW5nIHRoaXMgdHdpY2UgZml4ZXMgdGhlIGludGlhbCBibGFjayBzY3JlZW4sCisJICogSSBkb24ndCBrbm93IHdoeSwgc2VuZGluZyB0aGlzIHR3aWNlIGZpeGVzIHRoZSBpbml0aWFsIGJsYWNrIHNjcmVlbiwKIAkgKiBwcmV2ZW50cyBYIGZyb20gY3Jhc2hpbmcgYXQgbGVhc3QgaW4gVG9zaGliYSBsYXB0b3BzIHdpdGggU2F2YWdlSVguCiAJICogLS1Ub255CiAJICovCkBAIC0yMjExLDcgKzIyMTEsNyBAQAogCQlnb3RvIGZhaWxlZF9tbWlvOwogCiAJdmlkZW9fbGVuID0gc2F2YWdlX2luaXRfaHcocGFyKTsKLQkvKiBGSVhNRTogY2FudCBiZSBuZWdhdGl2ZSAqLworCS8qIEZJWE1FOiBjYW4ndCBiZSBuZWdhdGl2ZSAqLwogCWlmICh2aWRlb19sZW4gPCAwKSB7CiAJCWVyciA9IHZpZGVvX2xlbjsKIAkJZ290byBmYWlsZWRfbW1pbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggNzU3NjY1Yi4uOWJjYzYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTY0Myw3ICs2NDMsNyBAQAogCQkJY29udGludWU7CiAKIAkJYm9hcmRfY2ZnID0gJmNoLT5jZmcuYm9hcmRfY2ZnOwotCQlpZiAodHJ5X21vZHVsZV9nZXQoYm9hcmRfY2ZnLT5vd25lcikgJiYgYm9hcmRfY2ZnLT5kaXNwbGF5X29uKSB7CisJCWlmIChib2FyZF9jZmctPmRpc3BsYXlfb24gJiYgdHJ5X21vZHVsZV9nZXQoYm9hcmRfY2ZnLT5vd25lcikpIHsKIAkJCWJvYXJkX2NmZy0+ZGlzcGxheV9vbihib2FyZF9jZmctPmJvYXJkX2RhdGEsIGNoLT5pbmZvKTsKIAkJCW1vZHVsZV9wdXQoYm9hcmRfY2ZnLT5vd25lcik7CiAJCX0KQEAgLTY4OCw3ICs2ODgsNyBAQAogCQl9CiAKIAkJYm9hcmRfY2ZnID0gJmNoLT5jZmcuYm9hcmRfY2ZnOwotCQlpZiAodHJ5X21vZHVsZV9nZXQoYm9hcmRfY2ZnLT5vd25lcikgJiYgYm9hcmRfY2ZnLT5kaXNwbGF5X29mZikgeworCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29mZiAmJiB0cnlfbW9kdWxlX2dldChib2FyZF9jZmctPm93bmVyKSkgewogCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29mZihib2FyZF9jZmctPmJvYXJkX2RhdGEpOwogCQkJbW9kdWxlX3B1dChib2FyZF9jZmctPm93bmVyKTsKIAkJfQpAQCAtMTAzMiw2ICsxMDMyLDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTY3JlZW4gYmxhbmtpbmcuIEJlaGF2aW9yIGlzIGFzIGZvbGxvd3M6CisgKiBGQl9CTEFOS19VTkJMQU5LOiBzY3JlZW4gdW5ibGFua2VkLCBjbG9ja3MgZW5hYmxlZAorICogRkJfQkxBTktfTk9STUFMOiBzY3JlZW4gYmxhbmtlZCwgY2xvY2tzIGVuYWJsZWQKKyAqIEZCX0JMQU5LX1ZTWU5DLAorICogRkJfQkxBTktfSFNZTkMsCisgKiBGQl9CTEFOS19QT1dFUk9GRjogc2NyZWVuIGJsYW5rZWQsIGNsb2NrcyBkaXNhYmxlZAorICovCitzdGF0aWMgaW50IHNoX21vYmlsZV9sY2RjX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoID0gaW5mby0+cGFyOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2ICpwID0gY2gtPmxjZGM7CisKKwkvKiBibGFuayB0aGUgc2NyZWVuPyAqLworCWlmIChibGFuayA+IEZCX0JMQU5LX1VOQkxBTksgJiYgY2gtPmJsYW5rX3N0YXR1cyA9PSBGQl9CTEFOS19VTkJMQU5LKSB7CisJCXN0cnVjdCBmYl9maWxscmVjdCByZWN0ID0geworCQkJLndpZHRoID0gaW5mby0+dmFyLnhyZXMsCisJCQkuaGVpZ2h0ID0gaW5mby0+dmFyLnlyZXMsCisJCX07CisJCXNoX21vYmlsZV9sY2RjX2ZpbGxyZWN0KGluZm8sICZyZWN0KTsKKwl9CisJLyogdHVybiBjbG9ja3Mgb24/ICovCisJaWYgKGJsYW5rIDw9IEZCX0JMQU5LX05PUk1BTCAmJiBjaC0+Ymxhbmtfc3RhdHVzID4gRkJfQkxBTktfTk9STUFMKSB7CisJCXNoX21vYmlsZV9sY2RjX2Nsa19vbihwKTsKKwl9CisJLyogdHVybiBjbG9ja3Mgb2ZmPyAqLworCWlmIChibGFuayA+IEZCX0JMQU5LX05PUk1BTCAmJiBjaC0+Ymxhbmtfc3RhdHVzIDw9IEZCX0JMQU5LX05PUk1BTCkgeworCQkvKiBtYWtlIHN1cmUgdGhlIHNjcmVlbiBpcyB1cGRhdGVkIHdpdGggdGhlIGJsYWNrIGZpbGwgYmVmb3JlCisJCSAqIHN3aXRjaGluZyB0aGUgY2xvY2tzIG9mZi4gb25lIHZzeW5jIGlzIG5vdCBlbm91Z2ggc2luY2UKKwkJICogYmxhbmtpbmcgbWF5IG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgYSByZWZyZXNoLiBkZWZlcnJlZCBpbworCQkgKiBtb2RlIHdpbGwgcmVlbmFibGUgdGhlIGNsb2NrcyBhbmQgdXBkYXRlIHRoZSBzY3JlZW4gaW4gdGltZSwKKwkJICogc28gaXQgZG9lcyBub3QgbmVlZCB0aGlzLiAqLworCQlpZiAoIWluZm8tPmZiZGVmaW8pIHsKKwkJCXNoX21vYmlsZV93YWl0X2Zvcl92c3luYyhpbmZvKTsKKwkJCXNoX21vYmlsZV93YWl0X2Zvcl92c3luYyhpbmZvKTsKKwkJfQorCQlzaF9tb2JpbGVfbGNkY19jbGtfb2ZmKHApOworCX0KKworCWNoLT5ibGFua19zdGF0dXMgPSBibGFuazsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBmYl9vcHMgc2hfbW9iaWxlX2xjZGNfb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5mYl9zZXRjb2xyZWcJPSBzaF9tb2JpbGVfbGNkY19zZXRjb2xyZWcsCkBAIC0xMDQwLDYgKzEwODMsNyBAQAogCS5mYl9maWxscmVjdAk9IHNoX21vYmlsZV9sY2RjX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYQk9IHNoX21vYmlsZV9sY2RjX2NvcHlhcmVhLAogCS5mYl9pbWFnZWJsaXQJPSBzaF9tb2JpbGVfbGNkY19pbWFnZWJsaXQsCisJLmZiX2JsYW5rCT0gc2hfbW9iaWxlX2xjZGNfYmxhbmssCiAJLmZiX3Bhbl9kaXNwbGF5ID0gc2hfbW9iaWxlX2ZiX3Bhbl9kaXNwbGF5LAogCS5mYl9pb2N0bCAgICAgICA9IHNoX21vYmlsZV9pb2N0bCwKIAkuZmJfb3Blbgk9IHNoX21vYmlsZV9vcGVuLApAQCAtMTI1NCw3ICsxMjk4LDcgQEAKIAogCXN3aXRjaChhY3Rpb24pIHsKIAljYXNlIEZCX0VWRU5UX1NVU1BFTkQ6Ci0JCWlmICh0cnlfbW9kdWxlX2dldChib2FyZF9jZmctPm93bmVyKSAmJiBib2FyZF9jZmctPmRpc3BsYXlfb2ZmKSB7CisJCWlmIChib2FyZF9jZmctPmRpc3BsYXlfb2ZmICYmIHRyeV9tb2R1bGVfZ2V0KGJvYXJkX2NmZy0+b3duZXIpKSB7CiAJCQlib2FyZF9jZmctPmRpc3BsYXlfb2ZmKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSk7CiAJCQltb2R1bGVfcHV0KGJvYXJkX2NmZy0+b3duZXIpOwogCQl9CkBAIC0xMjY3LDcgKzEzMTEsNyBAQAogCQltdXRleF91bmxvY2soJmNoLT5vcGVuX2xvY2spOwogCiAJCS8qIEhETUkgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBMQ0RDIGNvbmZpZ3VyYXRpb24gKi8KLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KGJvYXJkX2NmZy0+b3duZXIpICYmIGJvYXJkX2NmZy0+ZGlzcGxheV9vbikgeworCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29uICYmIHRyeV9tb2R1bGVfZ2V0KGJvYXJkX2NmZy0+b3duZXIpKSB7CiAJCQlib2FyZF9jZmctPmRpc3BsYXlfb24oYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLCBpbmZvKTsKIAkJCW1vZHVsZV9wdXQoYm9hcmRfY2ZnLT5vd25lcik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5oIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmgKaW5kZXggNDYzNWVlZC4uZjE2Y2I1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmgKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiB2c3luY19jb21wbGV0aW9uOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBkaXNwbGF5X3ZhcjsKIAlpbnQgdXNlX2NvdW50OworCWludCBibGFua19zdGF0dXM7CiAJc3RydWN0IG11dGV4IG9wZW5fbG9jazsJCS8qIHByb3RlY3RzIHRoZSB1c2UgY291bnRlciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwppbmRleCA0NmQxYTY0Li41NmVmNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKW51bWVyYXRvcjsKIH0KIAotLyogc201MDFmYl9oel90b19wcyBpcyBpZGVudGljYWwgdG8gdGhlIG9wb3NpdGUgdHJhbnNmb3JtICovCisvKiBzbTUwMWZiX2h6X3RvX3BzIGlzIGlkZW50aWNhbCB0byB0aGUgb3Bwb3NpdGUgdHJhbnNmb3JtICovCiAKICNkZWZpbmUgc201MDFmYl9oel90b19wcyh4KSBzbTUwMWZiX3BzX3RvX2h6KHgpCiAKQEAgLTE3MTksNyArMTcxOSw3IEBACiAJICAgICAgIChoZWFkID09IEhFQURfQ1JUKSA/ICZzbTUwMWZiX29wc19jcnQgOiAmc201MDFmYl9vcHNfcG5sLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGZiX29wcykpOwogCi0JLyogdXBkYXRlIG9wcyBkZXBlbmRhbnQgb24gd2hhdCB3ZSd2ZSBiZWVuIHBhc3NlZCAqLworCS8qIHVwZGF0ZSBvcHMgZGVwZW5kZW50IG9uIHdoYXQgd2UndmUgYmVlbiBwYXNzZWQgKi8KIAogCWlmICgocGQtPmZsYWdzICYgU001MDFGQl9GTEFHX1VTRV9IV0NVUlNPUikgPT0gMCkKIAkJcGFyLT5vcHMuZmJfY3Vyc29yID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwppbmRleCAyYWI3MDQxLi4yMzAxYzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zc3RmYi5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAl3aGlsZSgxKSB7CiAJCWlmIChfX3NzdF9yZWFkKHZiYXNlLCBTVEFUVVMpICYgU1RBVFVTX0ZCSV9CVVNZKSB7CiAJCQlmX2RkZHByaW50aygic3RhdHVzOiBidXN5XG4iKTsKLS8qIEZJWE1FIGJhc2ljYWx5LCB0aGlzIGlzIGEgYnVzeSB3YWl0LiBtYXliZSBub3QgdGhhdCBnb29kLiBvaCB3ZWxsOworLyogRklYTUUgYmFzaWNhbGx5LCB0aGlzIGlzIGEgYnVzeSB3YWl0LiBtYXliZSBub3QgdGhhdCBnb29kLiBvaCB3ZWxsOwogICogdGhpcyBpcyBhIHNtYWxsIGxvb3AgYWZ0ZXIgYWxsLgogICogT3IgbWF5YmUgd2Ugc2hvdWxkIHVzZSBtZGVsYXkoKSBvciB1ZGVsYXkoKSBoZXJlIGluc3RlYWQgPyAqLwogCQkJY291bnQgPSAwOwpAQCAtNTAxLDcgKzUwMSw3IEBACiAJfQogCiAJaWYgKElTX1ZPT0RPTzIocGFyKSkgewotCQkvKiB2b29kb28yIGhhcyAzMiBwaXhlbCB3aWRlIHRpbGVzICwgQlVUIHN0YW5nZSB0aGluZ3MKKwkJLyogdm9vZG9vMiBoYXMgMzIgcGl4ZWwgd2lkZSB0aWxlcyAsIEJVVCBzdHJhbmdlIHRoaW5ncwogCQkgICBoYXBwZW4gd2l0aCBvZGQgbnVtYmVyIG9mIHRpbGVzICovCiAJCXBhci0+dGlsZXNfaW5fWCA9IChpbmZvLT52YXIueHJlcyArIDYzICkgLyA2NCAqIDI7CiAJfSBlbHNlIHsKQEAgLTkyMCwxMSArOTIwLDExIEBACiAgKiB3ZSBnZXQgdGhlIDFzdCBieXRlIChNIHZhbHVlKSBvZiBwcmVzZXQgZjEsZjcgYW5kIGZCCiAgKiB3aHkgdGhvc2UgMyA/IG1tbWguLi4gZm9yIG5vdywgaSdsbCBkbyBpdCB0aGUgZ2xpZGUgd2F5Li4uCiAgKiBhbmQgYXNrIHF1ZXN0aW9ucyBsYXRlci4gYW55d2F5LCBpdCBzZWVtcyB0aGF0IGFsbCB0aGUgZnJlcSByZWdpc3RlcnMgYXJlCi0gKiByZWFseSBhdCB0aGVpciBkZWZhdWx0IHN0YXRlIChjZiBzcGVjcykgc28gaSBhc2sgYWdhaW4sIHdoeSB0aG9zZSAzIHJlZ3MgPworICogcmVhbGx5IGF0IHRoZWlyIGRlZmF1bHQgc3RhdGUgKGNmIHNwZWNzKSBzbyBpIGFzayBhZ2Fpbiwgd2h5IHRob3NlIDMgcmVncyA/CiAgKiBtbW1taC4uIGl0IHNlZW1zIHRoYXQncyBtdWNoIG1vcmUgdWdseSB0aGFuIGkgdGhvdWdodC4gd2UgdXNlIGYwIGFuZCBmQSBmb3IKICAqIHBsbCBwcm9ncmFtbWluZywgc28gaW4gZmFjdCwgd2UgKmhvcGUqIHRoYXQgdGhlIGYxLCBmNyAmIGZCIHdvbid0IGJlCiAgKiB0b3VjaGVkLi4uCi0gKiBpcyBpdCByZWFseSBzYWZlID8gaG93IGNhbiBpIHJlc2V0IHRoaXMgcmFtZGFjID8gZ2VlZS4uLgorICogaXMgaXQgcmVhbGx5IHNhZmUgPyBob3cgY2FuIGkgcmVzZXQgdGhpcyByYW1kYWMgPyBnZWVlLi4uCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNzdF9kZXRlY3RfaWNzKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zdGljb3JlLmggYi9kcml2ZXJzL3ZpZGVvL3N0aWNvcmUuaAppbmRleCA3ZmU1YmU0Li5hZGRmN2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3N0aWNvcmUuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3N0aWNvcmUuaApAQCAtNzksNyArNzksNyBAQAogCSB1OCBjdXJyX21vbjsJCQkvKiBjdXJyZW50IG1vbml0b3IgY29uZmlndXJlZCAqLwogCSB1OCBmcmllbmRseV9ib290OwkJLyogaW4gZnJpZW5kbHkgYm9vdCBtb2RlICovCiAJczE2IHBvd2VyOwkJCS8qIHBvd2VyIGNhbGN1bGF0aW9uIChpbiBXYXR0cykgKi8KLQlzMzIgZnJlcV9yZWY7CQkJLyogZnJlcXVlbmN5IHJlZnJlbmNlICovCisJczMyIGZyZXFfcmVmOwkJCS8qIGZyZXF1ZW5jeSByZWZlcmVuY2UgKi8KIAl1MzIgc3RpX21lbV9hZGRyOwkJLyogcG9pbnRlciB0byBnbG9iYWwgc3RpIG1lbW9yeSAoc2l6ZT1zdGlfbWVtX3JlcXVlc3QpICovCiAJdTMyIGZ1dHVyZV9wdHI7IAkJLyogcG9pbnRlciB0byBmdXR1cmUgZGF0YSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCmluZGV4IDNlZTVlNjMuLmE5OWI5OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKKysrIGIvZHJpdmVycy92aWRlby90ZGZ4ZmIuYwpAQCAtODc3LDEyICs4NzcsMTIgQEAKIAllbHNlCiAJCXRkZnhfcm9wID0gVERGWF9ST1BfWE9SOwogCi0JLyogYXN1bWUgYWx3YXlzIHJlY3QtPmhlaWdodCA8IDQwOTYgKi8KKwkvKiBhc3N1bWUgYWx3YXlzIHJlY3QtPmhlaWdodCA8IDQwOTYgKi8KIAlpZiAoZHkgKyByZWN0LT5oZWlnaHQgPiA0MDk1KSB7CiAJCWRzdGJhc2UgPSBzdHJpZGUgKiBkeTsKIAkJZHkgPSAwOwogCX0KLQkvKiBhc3VtZSBhbHdheXMgcmVjdC0+d2lkdGggPCA0MDk2ICovCisJLyogYXNzdW1lIGFsd2F5cyByZWN0LT53aWR0aCA8IDQwOTYgKi8KIAlpZiAoZHggKyByZWN0LT53aWR0aCA+IDQwOTUpIHsKIAkJZHN0YmFzZSArPSBkeCAqIGJwcCA+PiAzOwogCQlkeCA9IDA7CkBAIC05MTUsMjIgKzkxNSwyMiBAQAogCXUzMiBkc3RiYXNlID0gMDsKIAl1MzIgc3JjYmFzZSA9IDA7CiAKLQkvKiBhc3VtZSBhbHdheXMgYXJlYS0+aGVpZ2h0IDwgNDA5NiAqLworCS8qIGFzc3VtZSBhbHdheXMgYXJlYS0+aGVpZ2h0IDwgNDA5NiAqLwogCWlmIChzeSArIGFyZWEtPmhlaWdodCA+IDQwOTUpIHsKIAkJc3JjYmFzZSA9IHN0cmlkZSAqIHN5OwogCQlzeSA9IDA7CiAJfQotCS8qIGFzdW1lIGFsd2F5cyBhcmVhLT53aWR0aCA8IDQwOTYgKi8KKwkvKiBhc3N1bWUgYWx3YXlzIGFyZWEtPndpZHRoIDwgNDA5NiAqLwogCWlmIChzeCArIGFyZWEtPndpZHRoID4gNDA5NSkgewogCQlzcmNiYXNlICs9IHN4ICogYnBwID4+IDM7CiAJCXN4ID0gMDsKIAl9Ci0JLyogYXN1bWUgYWx3YXlzIGFyZWEtPmhlaWdodCA8IDQwOTYgKi8KKwkvKiBhc3N1bWUgYWx3YXlzIGFyZWEtPmhlaWdodCA8IDQwOTYgKi8KIAlpZiAoZHkgKyBhcmVhLT5oZWlnaHQgPiA0MDk1KSB7CiAJCWRzdGJhc2UgPSBzdHJpZGUgKiBkeTsKIAkJZHkgPSAwOwogCX0KLQkvKiBhc3VtZSBhbHdheXMgYXJlYS0+d2lkdGggPCA0MDk2ICovCisJLyogYXNzdW1lIGFsd2F5cyBhcmVhLT53aWR0aCA8IDQwOTYgKi8KIAlpZiAoZHggKyBhcmVhLT53aWR0aCA+IDQwOTUpIHsKIAkJZHN0YmFzZSArPSBkeCAqIGJwcCA+PiAzOwogCQlkeCA9IDA7CkBAIC0xMDAzLDEyICsxMDAzLDEyIEBACiAjZWxzZQogCXNyY2ZtdCA9IDB4NDAwMDAwOwogI2VuZGlmCi0JLyogYXN1bWUgYWx3YXlzIGltYWdlLT5oZWlnaHQgPCA0MDk2ICovCisJLyogYXNzdW1lIGFsd2F5cyBpbWFnZS0+aGVpZ2h0IDwgNDA5NiAqLwogCWlmIChkeSArIGltYWdlLT5oZWlnaHQgPiA0MDk1KSB7CiAJCWRzdGJhc2UgPSBzdHJpZGUgKiBkeTsKIAkJZHkgPSAwOwogCX0KLQkvKiBhc3VtZSBhbHdheXMgaW1hZ2UtPndpZHRoIDwgNDA5NiAqLworCS8qIGFzc3VtZSBhbHdheXMgaW1hZ2UtPndpZHRoIDwgNDA5NiAqLwogCWlmIChkeCArIGltYWdlLT53aWR0aCA+IDQwOTUpIHsKIAkJZHN0YmFzZSArPSBkeCAqIGJwcCA+PiAzOwogCQlkeCA9IDA7CkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCQkgKiBsb3dlciBoYWxmIChsZWFzdCBzaWduaWZpY2FudCA2NCBiaXRzKSBvZiBhIDEyOCBiaXQgd29yZAogCQkgKiBhbmQgcGF0dGVybiAxIHRoZSB1cHBlciBoYWxmLiBJZiB5b3UgZXhhbWluZSB0aGUgZGF0YSBvZgogCQkgKiB0aGUgY3Vyc29yIGltYWdlIHRoZSBncmFwaGljcyBjYXJkIHVzZXMgdGhlbiBmcm9tIHRoZQotCQkgKiBiZWdpbmluZyB5b3Ugc2VlIGxpbmUgb25lIG9mIHBhdHRlcm4gMCwgbGluZSBvbmUgb2YKKwkJICogYmVnaW5uaW5nIHlvdSBzZWUgbGluZSBvbmUgb2YgcGF0dGVybiAwLCBsaW5lIG9uZSBvZgogCQkgKiBwYXR0ZXJuIDEsIGxpbmUgdHdvIG9mIHBhdHRlcm4gMCwgbGluZSB0d28gb2YgcGF0dGVybiAxLAogCQkgKiBldGMgZXRjLiBUaGUgbGluZWFyIHN0cmlkZSBmb3IgdGhlIGN1cnNvciBpcyBhbHdheXMgMTYgYnl0ZXMKIAkJICogKDEyOCBiaXRzKSB3aGljaCBpcyB0aGUgbWF4aW11bSBjdXJzb3Igd2lkdGggdGltZXMgdHdvIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90bWlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKaW5kZXggOTcxMGJmOC4uMGMzNDFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90bWlvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCkBAIC0zNTksNyArMzU5LDcgQEAKIHsKIAlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCS8qCi0JICogVGhpcyBjb2RlIGNhbiBiZSBjYWxsZWQgd2hpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKwkgKiBUaGlzIGNvZGUgY2FuIGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCiAJICogU28gaW5zdGVhZCBvZiByZWxheWluZyBvbiBpcnEgdG8gdHJpZ2dlciB0aGUgZXZlbnQsCiAJICogcG9sbCB0aGUgc3RhdGUgdGlsbCB0aGUgbmVjZXNzYXJ5IGNvbW1hbmQgaXMgZXhlY3V0ZWQuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3VkbGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3VkbGZiLmMKaW5kZXggMmM4MzY0ZS4uNjgwNDFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91ZGxmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdWRsZmIuYwpAQCAtNzY5LDcgKzc2OSw3IEBACiAKIAkJLyoKIAkJICogSWYgd2UgaGF2ZSBhIGRhbWFnZS1hd2FyZSBjbGllbnQsIHR1cm4gZmJfZGVmaW8gIm9mZiIKLQkJICogVG8gYXZvaWQgcGVyZiBpbWFjdCBvZiB1bmVjZXNzYXJ5IHBhZ2UgZmF1bHQgaGFuZGxpbmcuCisJCSAqIFRvIGF2b2lkIHBlcmYgaW1hY3Qgb2YgdW5uZWNlc3NhcnkgcGFnZSBmYXVsdCBoYW5kbGluZy4KIAkJICogRG9uZSBieSByZXNldHRpbmcgdGhlIGRlbGF5IGZvciB0aGlzIGZiX2luZm8gdG8gYSB2ZXJ5CiAJCSAqIGxvbmcgcGVyaW9kLiBQYWdlcyB3aWxsIGJlY29tZSB3cml0YWJsZSBhbmQgc3RheSB0aGF0IHdheS4KIAkJICogUmVzZXQgdG8gbm9ybWFsIHZhbHVlIHdoZW4gYWxsIGNsaWVudHMgaGF2ZSBjbG9zZWQgdGhpcyBmYi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jIGIvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKaW5kZXggMjhjY2FiNC4uNTNiMmM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogfQogCiAvKiBTZXQgdGhlIEVuYWJsZSBTZXQvUmVzZXQgUmVnaXN0ZXIgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlLiAgCi0gICBUaGUgY29kZSBoZXJlIGFsd2F5cyB1c2VzIHZhbHVlIDB4ZiBmb3IgdGhzaSByZWdpc3Rlci4gKi8KKyAgIFRoZSBjb2RlIGhlcmUgYWx3YXlzIHVzZXMgdmFsdWUgMHhmIGZvciB0aGlzIHJlZ2lzdGVyLiAqLwogc3RhdGljIGlubGluZSBpbnQgc2V0c3IoaW50IHNyKQogewogCWludCBvbGRzcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaAppbmRleCA3ODFmM2FhLi4yOWQ3MDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCkBAIC0xMzksNyArMTM5LDYgQEAKIAogc3RydWN0IGNydF9zZXR0aW5nX2luZm9ybWF0aW9uIHsKIAlpbnQgaWdhX3BhdGg7Ci0JaW50IHJlZnJlc2hfcmF0ZTsKIH07CiAKIHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKaW5kZXggNTcyOGZkNy4uZGM0Yzc3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCkBAIC0yMDAyLDEzICsyMDAyLDE1IEBACiAJaW50IGk7CiAJaW50IGluZGV4ID0gMDsKIAlpbnQgaF9hZGRyLCB2X2FkZHI7Ci0JdTMyIHBsbF9EX04sIGNsb2NrOworCXUzMiBwbGxfRF9OLCBjbG9jaywgcmVmcmVzaCA9IHZpYWZiX3JlZnJlc2g7CisKKwlpZiAodmlhZmJfU0FNTV9PTiAmJiBzZXRfaWdhID09IElHQTIpCisJCXJlZnJlc2ggPSB2aWFmYl9yZWZyZXNoMTsKIAogCWZvciAoaSA9IDA7IGkgPCB2aWRlb19tb2RlLT5tb2RlX2FycmF5OyBpKyspIHsKIAkJaW5kZXggPSBpOwogCi0JCWlmIChjcnRfdGFibGVbaV0ucmVmcmVzaF9yYXRlID09IHZpYXBhcmluZm8tPgotCQkJY3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlKQorCQlpZiAoY3J0X3RhYmxlW2ldLnJlZnJlc2hfcmF0ZSA9PSByZWZyZXNoKQogCQkJYnJlYWs7CiAJfQogCkBAIC0yMDE5LDcgKzIwMjEsNyBAQAogCWlmICgodmlhZmJfTENEX09OIHwgdmlhZmJfRFZJX09OKQogCSAgICAmJiB2aWRlb19tb2RlLT5jcnRjWzBdLmNydGMuaG9yX2FkZHIgPT0gNjQwCiAJICAgICYmIHZpZGVvX21vZGUtPmNydGNbMF0uY3J0Yy52ZXJfYWRkciA9PSA0ODAKLQkgICAgJiYgdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID09IDYwKSB7CisJICAgICYmIHJlZnJlc2ggPT0gNjApIHsKIAkJLyogVGhlIGJvcmRlciBpcyA4IHBpeGVscy4gKi8KIAkJY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQgPSBjcnRfcmVnLmhvcl9ibGFua19zdGFydCAtIDg7CiAKQEAgLTIwNzAsNyArMjA3Miw2IEBACiAJaW5pdF9sdmRzX2NoaXBfaW5mbygpOwogCiAJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOwotCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9IHZpYWZiX3JlZnJlc2g7CiAKIAkvKlNldCBJR0EgcGF0aCBmb3IgZWFjaCBkZXZpY2UgKi8KIAl2aWFmYl9zZXRfaWdhX3BhdGgoKTsKQEAgLTIwODMsMTMgKzIwODQsOSBAQAogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX21vZGU7CiB9CiAKLXZvaWQgdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKGludCBocmVzLCBpbnQgdnJlcywKLQlpbnQgYnBwLCBpbnQgdm1vZGVfcmVmcmVzaCwgaW50IGZsYWcpCit2b2lkIHZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbnQgaHJlcywgaW50IHZyZXMsIGludCBicHAsIGludCBmbGFnKQogewogCWlmIChmbGFnID09IDApIHsKLQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID0KLQkJCXZtb2RlX3JlZnJlc2g7Ci0KIAkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlID0gaHJlczsKIAkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlID0gdnJlczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKaW5kZXggNzI5NTI2My4uODg1ODU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvaHcuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCkBAIC05NDksOCArOTQ5LDcgQEAKIHZvaWQgX19kZXZpbml0IHZpYWZiX2luaXRfZGFjKGludCBzZXRfaWdhKTsKIGludCB2aWFmYl9nZXRfcGl4Y2xvY2soaW50IGhyZXMsIGludCB2cmVzLCBpbnQgdm1vZGVfcmVmcmVzaCk7CiBpbnQgdmlhZmJfZ2V0X3JlZnJlc2goaW50IGhyZXMsIGludCB2cmVzLCB1MzIgZmxvYXRfcmVmcmVzaCk7Ci12b2lkIHZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbnQgaHJlcywgaW50IHZyZXMsIGludCBicHAsCi0JCQkgICBpbnQgdm1vZGVfcmVmcmVzaCwgaW50IGZsYWcpOwordm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwLCBpbnQgZmxhZyk7CiAKIHZvaWQgdmlhZmJfc2V0X2lnYV9wYXRoKHZvaWQpOwogdm9pZCB2aWFmYl9zZXRfcHJpbWFyeV9jb2xvcl9yZWdpc3Rlcih1OCBpbmRleCwgdTggcmVkLCB1OCBncmVlbiwgdTggYmx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYwppbmRleCBkMDVjY2I2Li4zNTQ1OGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCX0KIAogCS8qIElmIGFkanVzdCBHYW1tYSB2YWx1ZSBpbiBTQU1NLCBmaWxsIElHQTEsCi0JICAgSUdBMiBHYW1tYSB0YWJsZSBzaW11bHRhbm91cy4gKi8KKwkgICBJR0EyIEdhbW1hIHRhYmxlIHNpbXVsdGFuZW91cy4gKi8KIAkvKiBTd2l0Y2ggdG8gSUdBMiBHYW1tYSBUYWJsZSAqLwogCWlmICgoYWN0aXZlX2RldmljZV9hbW91bnQgPiAxKSAmJgogCQkhKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oCmluZGV4IDE2NzBiYTguLmYyM2JlMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaApAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBfX1ZJQVVUSUxJVFlfSF9fCiAjZGVmaW5lIF9fVklBVVRJTElUWV9IX18KIAotLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdldCBpbmZvbWF0aW9uIGFib3V0IGRldmljZSdzIHN0YXRlICovCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGRldmljZSdzIHN0YXRlICovCiB2b2lkIHZpYWZiX2dldF9kZXZpY2Vfc3VwcG9ydF9zdGF0ZSh1MzIgKnN1cHBvcnRfc3RhdGUpOwogdm9pZCB2aWFmYl9nZXRfZGV2aWNlX2Nvbm5lY3Rfc3RhdGUodTMyICpjb25uZWN0X3N0YXRlKTsKIGJvb2wgdmlhZmJfbGNkX2dldF9zdXBwb3J0X2V4cGFuZF9zdGF0ZSh1MzIgeHJlcywgdTMyIHlyZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKaW5kZXggZjU1NWI4OS4uYTU0MmJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0xODIsMTMgKzE4MiwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBnZXRfdmFyX3JlZnJlc2goc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJdTMyIGh0b3RhbCwgdnRvdGFsOworCisJaHRvdGFsID0gdmFyLT5sZWZ0X21hcmdpbiArIHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luCisJCSsgdmFyLT5oc3luY19sZW47CisJdnRvdGFsID0gdmFyLT51cHBlcl9tYXJnaW4gKyB2YXItPnlyZXMgKyB2YXItPmxvd2VyX21hcmdpbgorCQkrIHZhci0+dnN5bmNfbGVuOworCXJldHVybiBQSUNPUzJLSFoodmFyLT5waXhjbG9jaykgKiAxMDAwIC8gKGh0b3RhbCAqIHZ0b3RhbCk7Cit9CisKIHN0YXRpYyBpbnQgdmlhZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCXN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCWludCBodG90YWwsIHZ0b3RhbCwgZGVwdGg7CisJaW50IGRlcHRoLCByZWZyZXNoOwogCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfZW50cnk7CiAJc3RydWN0IHZpYWZiX3BhciAqcHBhciA9IGluZm8tPnBhcjsKLQl1MzIgbG9uZ19yZWZyZXNoLCBsaW5lOworCXUzMiBsaW5lOwogCiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfY2hlY2tfdmFyIVxuIik7CiAJLyogU2FuaXR5IGNoZWNrICovCkBAIC0yMzEsMTcgKzI0MiwxMSBAQAogCS8qIEJhc2VkIG9uIHZhciBwYXNzZWQgaW4gdG8gY2FsY3VsYXRlIHRoZSByZWZyZXNoLAogCSAqIGJlY2F1c2Ugb3VyIGRyaXZlciB1c2Ugc29tZSBtb2RlcyBzcGVjaWFsLgogCSAqLwotCWh0b3RhbCA9IHZhci0+eHJlcyArIHZhci0+bGVmdF9tYXJnaW4gKwotCXZhci0+cmlnaHRfbWFyZ2luICsgdmFyLT5oc3luY19sZW47Ci0JdnRvdGFsID0gdmFyLT55cmVzICsgdmFyLT51cHBlcl9tYXJnaW4gKwotCQl2YXItPmxvd2VyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuOwotCWxvbmdfcmVmcmVzaCA9IDEwMDAwMDAwMDBVTCAvIHZhci0+cGl4Y2xvY2sgKiAxMDAwOwotCWxvbmdfcmVmcmVzaCAvPSAoaHRvdGFsICogdnRvdGFsKTsKLQotCXZpYWZiX3JlZnJlc2ggPSB2aWFmYl9nZXRfcmVmcmVzaCh2YXItPnhyZXMsIHZhci0+eXJlcywgbG9uZ19yZWZyZXNoKTsKKwlyZWZyZXNoID0gdmlhZmJfZ2V0X3JlZnJlc2godmFyLT54cmVzLCB2YXItPnlyZXMsCisJCWdldF92YXJfcmVmcmVzaCh2YXIpKTsKIAogCS8qIEFkanVzdCB2YXIgYWNjb3JkaW5nIHRvIG91ciBkcml2ZXIncyBvd24gdGFibGUgKi8KLQl2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbyh2YXIsIHZpYWZiX3JlZnJlc2gsIHZtb2RlX2VudHJ5KTsKKwl2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbyh2YXIsIHJlZnJlc2gsIHZtb2RlX2VudHJ5KTsKIAlpZiAodmFyLT5hY2NlbF9mbGFncyAmIEZCX0FDQ0VMRl9URVhUICYmCiAJCSFwcGFyLT5zaGFyZWQtPnZkZXYtPmVuZ2luZV9tbWlvKQogCQl2YXItPmFjY2VsX2ZsYWdzID0gMDsKQEAgLTI1MywxMiArMjU4LDEzIEBACiB7CiAJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyID0gaW5mby0+cGFyOwogCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfZW50cnksICp2bW9kZV9lbnRyeTEgPSBOVUxMOworCWludCByZWZyZXNoOwogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9wYXIhXG4iKTsKIAogCXZpYWZiX3VwZGF0ZV9maXgoaW5mbyk7CiAJdmlhcGFyLT5kZXB0aCA9IGZiX2dldF9jb2xvcl9kZXB0aCgmaW5mby0+dmFyLCAmaW5mby0+Zml4KTsKIAl2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcodmlhZmJpbmZvLT52YXIueHJlcywgdmlhZmJpbmZvLT52YXIueXJlcywKLQkJdmlhZmJpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIHZpYWZiX3JlZnJlc2gsIDApOworCQl2aWFmYmluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CiAKIAl2bW9kZV9lbnRyeSA9IHZpYWZiX2dldF9tb2RlKHZpYWZiaW5mby0+dmFyLnhyZXMsIHZpYWZiaW5mby0+dmFyLnlyZXMpOwogCWlmICh2aWFmYl9kdWFsX2ZiKSB7CkBAIC0yNjYsNyArMjcyLDcgQEAKIAkJCXZpYWZiaW5mbzEtPnZhci55cmVzKTsKIAkJdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKHZpYWZiaW5mbzEtPnZhci54cmVzLAogCQkJdmlhZmJpbmZvMS0+dmFyLnlyZXMsIHZpYWZiaW5mbzEtPnZhci5iaXRzX3Blcl9waXhlbCwKLQkJCXZpYWZiX3JlZnJlc2gxLCAxKTsKKwkJCTEpOwogCX0gZWxzZSBpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CiAJCURFQlVHX01TRyhLRVJOX0lORk8KIAkJInZpYWZiX3NlY29uZF94cmVzID0gJWQsIHZpYWZiX3NlY29uZF95cmVzID0gJWQsIGJwcCA9ICVkXG4iLApAQCAtMjc1LDE0ICsyODEsMTkgQEAKIAkJCXZpYWZiX3NlY29uZF95cmVzKTsKIAogCQl2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcodmlhZmJfc2Vjb25kX3hyZXMsCi0JCQl2aWFmYl9zZWNvbmRfeXJlcywgdmlhZmJfYnBwMSwgdmlhZmJfcmVmcmVzaDEsIDEpOworCQkJdmlhZmJfc2Vjb25kX3lyZXMsIHZpYWZiX2JwcDEsIDEpOwogCX0KIAorCXJlZnJlc2ggPSB2aWFmYl9nZXRfcmVmcmVzaChpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCWdldF92YXJfcmVmcmVzaCgmaW5mby0+dmFyKSk7CiAJaWYgKHZtb2RlX2VudHJ5KSB7Ci0JCWlmICh2aWFmYl9kdWFsX2ZiICYmIHZpYXBhci0+aWdhX3BhdGggPT0gSUdBMikKKwkJaWYgKHZpYWZiX2R1YWxfZmIgJiYgdmlhcGFyLT5pZ2FfcGF0aCA9PSBJR0EyKSB7CiAJCQl2aWFmYl9icHAxID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwotCQllbHNlCisJCQl2aWFmYl9yZWZyZXNoMSA9IHJlZnJlc2g7CisJCX0gZWxzZSB7CiAJCQl2aWFmYl9icHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CisJCQl2aWFmYl9yZWZyZXNoID0gcmVmcmVzaDsKKwkJfQogCiAJCWlmIChpbmZvLT52YXIuYWNjZWxfZmxhZ3MgJiBGQl9BQ0NFTEZfVEVYVCkKIAkJCWluZm8tPmZsYWdzICY9IH5GQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKQEAgLTE3OTUsMTQgKzE4MDYsOSBAQAogCWRlZmF1bHRfdmFyLnhyZXNfdmlydHVhbCA9IGRlZmF1bHRfeHJlczsKIAlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSBkZWZhdWx0X3lyZXM7CiAJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB2aWFmYl9icHA7Ci0JZGVmYXVsdF92YXIucGl4Y2xvY2sgPQotCSAgICB2aWFmYl9nZXRfcGl4Y2xvY2soZGVmYXVsdF94cmVzLCBkZWZhdWx0X3lyZXMsIHZpYWZiX3JlZnJlc2gpOwotCWRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luID0gKGRlZmF1bHRfeHJlcyA+PiAzKSAmIDB4Zjg7Ci0JZGVmYXVsdF92YXIucmlnaHRfbWFyZ2luID0gMzI7Ci0JZGVmYXVsdF92YXIudXBwZXJfbWFyZ2luID0gMTY7Ci0JZGVmYXVsdF92YXIubG93ZXJfbWFyZ2luID0gNDsKLQlkZWZhdWx0X3Zhci5oc3luY19sZW4gPSBkZWZhdWx0X3Zhci5sZWZ0X21hcmdpbjsKLQlkZWZhdWx0X3Zhci52c3luY19sZW4gPSA0OworCXZpYWZiX2ZpbGxfdmFyX3RpbWluZ19pbmZvKCZkZWZhdWx0X3ZhciwgdmlhZmJfZ2V0X3JlZnJlc2goCisJCWRlZmF1bHRfdmFyLnhyZXMsIGRlZmF1bHRfdmFyLnlyZXMsIHZpYWZiX3JlZnJlc2gpLAorCQl2aWFmYl9nZXRfbW9kZShkZWZhdWx0X3Zhci54cmVzLCBkZWZhdWx0X3Zhci55cmVzKSk7CiAJdmlhZmJfc2V0dXBfZml4aW5mbygmdmlhZmJpbmZvLT5maXgsIHZpYXBhcmluZm8pOwogCXZpYWZiaW5mby0+dmFyID0gZGVmYXVsdF92YXI7CiAKQEAgLTE4NDEsMTUgKzE4NDcsOSBAQAogCQlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOwogCQlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOwogCQlkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA9IHZpYWZiX2JwcDE7Ci0JCWRlZmF1bHRfdmFyLnBpeGNsb2NrID0KLQkJICAgIHZpYWZiX2dldF9waXhjbG9jayh2aWFmYl9zZWNvbmRfeHJlcywgdmlhZmJfc2Vjb25kX3lyZXMsCi0JCSAgICB2aWFmYl9yZWZyZXNoKTsKLQkJZGVmYXVsdF92YXIubGVmdF9tYXJnaW4gPSAodmlhZmJfc2Vjb25kX3hyZXMgPj4gMykgJiAweGY4OwotCQlkZWZhdWx0X3Zhci5yaWdodF9tYXJnaW4gPSAzMjsKLQkJZGVmYXVsdF92YXIudXBwZXJfbWFyZ2luID0gMTY7Ci0JCWRlZmF1bHRfdmFyLmxvd2VyX21hcmdpbiA9IDQ7Ci0JCWRlZmF1bHRfdmFyLmhzeW5jX2xlbiA9IGRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luOwotCQlkZWZhdWx0X3Zhci52c3luY19sZW4gPSA0OworCQl2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbygmZGVmYXVsdF92YXIsIHZpYWZiX2dldF9yZWZyZXNoKAorCQkJZGVmYXVsdF92YXIueHJlcywgZGVmYXVsdF92YXIueXJlcywgdmlhZmJfcmVmcmVzaDEpLAorCQkJdmlhZmJfZ2V0X21vZGUoZGVmYXVsdF92YXIueHJlcywgZGVmYXVsdF92YXIueXJlcykpOwogCiAJCXZpYWZiX3NldHVwX2ZpeGluZm8oJnZpYWZiaW5mbzEtPmZpeCwgdmlhcGFyaW5mbzEpOwogCQl2aWFmYl9jaGVja192YXIoJmRlZmF1bHRfdmFyLCB2aWFmYmluZm8xKTsKQEAgLTIwMDQsMjIgKzIwMDQsMjQgQEAKICAqLwogaW50IF9faW5pdCB2aWFmYl9pbml0KHZvaWQpCiB7Ci0JdTMyIGR1bW15OworCXUzMiBkdW1teV94LCBkdW1teV95OwogI2lmbmRlZiBNT0RVTEUKIAljaGFyICpvcHRpb24gPSBOVUxMOwogCWlmIChmYl9nZXRfb3B0aW9ucygidmlhZmIiLCAmb3B0aW9uKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJdmlhZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCWlmIChwYXJzZV9tb2RlKHZpYWZiX21vZGUsICZkdW1teSwgJmR1bW15KQotCQl8fCBwYXJzZV9tb2RlKHZpYWZiX21vZGUxLCAmZHVtbXksICZkdW1teSkKKwlpZiAocGFyc2VfbW9kZSh2aWFmYl9tb2RlLCAmZHVtbXlfeCwgJmR1bW15X3kpCisJCXx8ICF2aWFmYl9nZXRfbW9kZShkdW1teV94LCBkdW1teV95KQorCQl8fCBwYXJzZV9tb2RlKHZpYWZiX21vZGUxLCAmZHVtbXlfeCwgJmR1bW15X3kpCisJCXx8ICF2aWFmYl9nZXRfbW9kZShkdW1teV94LCBkdW1teV95KQogCQl8fCB2aWFmYl9icHAgPCAwIHx8IHZpYWZiX2JwcCA+IDMyCiAJCXx8IHZpYWZiX2JwcDEgPCAwIHx8IHZpYWZiX2JwcDEgPiAzMgogCQl8fCBwYXJzZV9hY3RpdmVfZGV2KCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJpbnRrKEtFUk5fSU5GTwotICAgICAgICJWSUEgR3JhcGhpY3MgSW50ZXJncmF0aW9uIENoaXBzZXQgZnJhbWVidWZmZXIgJWQuJWQgaW5pdGlhbGl6aW5nXG4iLAorICAgICAgICJWSUEgR3JhcGhpY3MgSW50ZWdyYXRpb24gQ2hpcHNldCBmcmFtZWJ1ZmZlciAlZC4lZCBpbml0aWFsaXppbmdcbiIsCiAJICAgICAgIFZFUlNJT05fTUFKT1IsIFZFUlNJT05fTUlOT1IpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby93MTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKaW5kZXggZDhiMTJjMy4uYzhiZThhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby93MTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCkBAIC0xMzA2LDcgKzEzMDYsNyBAQAogCXVuaW9uIGdyYXBoaWNfdl9kaXNwX3UgZ3JhcGhpY192X2Rpc3A7CiAJdW5pb24gY3J0Y190b3RhbF91IGNydGNfdG90YWw7CiAKLQkvKiB3MzIwMCBkb2VzbnQgbGlrZSB1bmRlZmluZWQgYml0cyBiZWluZyBzZXQgc28gemVybyByZWdpc3RlciB2YWx1ZXMgZmlyc3QgKi8KKwkvKiB3MzIwMCBkb2Vzbid0IGxpa2UgdW5kZWZpbmVkIGJpdHMgYmVpbmcgc2V0IHNvIHplcm8gcmVnaXN0ZXIgdmFsdWVzIGZpcnN0ICovCiAKIAlhY3RpdmVfaF9kaXNwLnZhbCA9IDA7CiAJYWN0aXZlX2hfZGlzcC5mLmFjdGl2ZV9oX3N0YXJ0PW1vZGUtPmxlZnRfbWFyZ2luOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCmluZGV4IDRmYjViMmIuLjRiY2M4YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKQEAgLTU5MCwxNSArNTkwLDEwIEBACiAKIHN0YXRpYyB2b2lkIHZpcnRpb19wY2lfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqX2QpCiB7Ci0Jc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihfZCwgc3RydWN0IHZpcnRpb19kZXZpY2UsIGRldik7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihfZCwgc3RydWN0IHZpcnRpb19kZXZpY2UsCisJCQkJCQkgZGV2KTsKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZShkZXYpOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdnBfZGV2LT5wY2lfZGV2OwogCi0JdnBfZGVsX3ZxcyhkZXYpOwotCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKLQlwY2lfaW91bm1hcChwY2lfZGV2LCB2cF9kZXYtPmlvYWRkcik7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJa2ZyZWUodnBfZGV2KTsKIH0KIApAQCAtNjgxLDYgKzY3NiwxMiBAQAogCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCiAJdW5yZWdpc3Rlcl92aXJ0aW9fZGV2aWNlKCZ2cF9kZXYtPnZkZXYpOworCisJdnBfZGVsX3ZxcygmdnBfZGV2LT52ZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CisJcGNpX2lvdW5tYXAocGNpX2RldiwgdnBfZGV2LT5pb2FkZHIpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBjYzJmNzNlLi5iMDA0M2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTM3MSw2ICszNzEsNyBAQAogCQkvKiBkZXRhY2hfYnVmIGNsZWFycyBkYXRhLCBzbyBncmFiIGl0IG5vdy4gKi8KIAkJYnVmID0gdnEtPmRhdGFbaV07CiAJCWRldGFjaF9idWYodnEsIGkpOworCQl2cS0+dnJpbmcuYXZhaWwtPmlkeC0tOwogCQlFTkRfVVNFKHZxKTsKIAkJcmV0dXJuIGJ1ZjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCmluZGV4IDM4ZTk2YWIuLjVlZjM4NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCkBAIC01NDUsNyArNTQ1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIFNlY29uZCB3cml0ZSwgZGF0YSB0cmFuc2ZlcmVkLiBSZWxlYXNlIHRoZSBtb2R1bGUgKi8KKwkvKiBTZWNvbmQgd3JpdGUsIGRhdGEgdHJhbnNmZXJyZWQuIFJlbGVhc2UgdGhlIG1vZHVsZSAqLwogCWlmIChoZHFfZGF0YS0+aW5pdF90cmFucyA+IDEpIHsKIAkJb21hcF9oZHFfcHV0KGhkcV9kYXRhKTsKIAkJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZoZHFfZGF0YS0+aGRxX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBiNjlkNzE0Li4xYjBmOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC05MzMsNyArOTMzLDcgQEAKIAlkZXBlbmRzIG9uIFNPQ19QTlg4MzM1CiAJaGVscAogCSAgSGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgUE5YODMzeCdzIHdhdGNoZG9nLiBUaGlzIGlzIGEKLQkgIHdhdGNoZG9nIHRpbWVyIHRoYXQgd2lsbCByZWJvb3QgdGhlIG1hY2hpbmUgYWZ0ZXIgYSBwcm9ncmFtYWJsZQorCSAgd2F0Y2hkb2cgdGltZXIgdGhhdCB3aWxsIHJlYm9vdCB0aGUgbWFjaGluZSBhZnRlciBhIHByb2dyYW1tYWJsZQogCSAgdGltZXIgaGFzIGV4cGlyZWQgYW5kIG5vIHByb2Nlc3MgaGFzIHdyaXR0ZW4gdG8gL2Rldi93YXRjaGRvZyBkdXJpbmcKIAkgIHRoYXQgdGltZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggZDUyMGJmOS4uM2Y4NjA4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiAjIE9ubHkgb25lIHdhdGNoZG9nIGNhbiBzdWNjZWVkLiBXZSBwcm9iZSB0aGUgSVNBL1BDSS9VU0IgYmFzZWQKICMgd2F0Y2hkb2ctY2FyZHMgZmlyc3QsIHRoZW4gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB3YXRjaGRvZwotIyBkcml2ZXJzIGFuZCB0aGVuIHRoZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRhbnQgInNvZnRkb2ciIGRyaXZlci4KKyMgZHJpdmVycyBhbmQgdGhlbiB0aGUgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50ICJzb2Z0ZG9nIiBkcml2ZXIuCiAjIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3VyIElTQS9QQ0kvVVNCIGNhcmQgaXNuJ3QgZGV0ZWN0ZWQgdGhhdAogIyB5b3UgY2FuIGZhbGwgYmFjayB0byBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZHJpdmVyIGFuZCBpZgogIyB0aGF0IGFsc28gZmFpbHMgdGhlbiB5b3UgY2FuIGZhbGwgYmFjayB0byB0aGUgc29mdHdhcmUgd2F0Y2hkb2cKQEAgLTE1Myw3ICsxNTMsNyBAQAogIyBYZW4KIG9iai0kKENPTkZJR19YRU5fV0RUKSArPSB4ZW5fd2R0Lm8KIAotIyBBcmNoaXRlY3R1cmUgSW5kZXBlbmRhbnQKKyMgQXJjaGl0ZWN0dXJlIEluZGVwZW5kZW50CiBvYmotJChDT05GSUdfV004MzFYX1dBVENIRE9HKSArPSB3bTgzMXhfd2R0Lm8KIG9iai0kKENPTkZJR19XTTgzNTBfV0FUQ0hET0cpICs9IHdtODM1MF93ZHQubwogb2JqLSQoQ09ORklHX01BWDYzWFhfV0FUQ0hET0cpICs9IG1heDYzeHhfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKaW5kZXggMmZmY2U0ZC4uYjZhMmI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKQEAgLTI2LDcgKzI2LDcgQEAKICAqCVRoZW9yeSBvZiBPcGVyYXRpb246CiAgKgkJVGhlIFdhdGNoLURvZyBUaW1lciBpcyBwcm92aWRlZCB0byBlbnN1cmUgdGhhdCBzdGFuZGFsb25lCiAgKgkJU3lzdGVtcyBjYW4gYWx3YXlzIHJlY292ZXIgZnJvbSBjYXRhc3Ryb3BoaWMgY29uZGl0aW9ucyB0aGF0Ci0gKgkJY2F1c2VkIHRoZSBDUFUgdG8gY3Jhc2guIFRoaXMgY29uZGl0aW9uIG1heSBoYXZlIG9jY3VyZWQgYnkKKyAqCQljYXVzZWQgdGhlIENQVSB0byBjcmFzaC4gVGhpcyBjb25kaXRpb24gbWF5IGhhdmUgb2NjdXJyZWQgYnkKICAqCQlleHRlcm5hbCBFTUkgb3IgYSBzb2Z0d2FyZSBidWcuIFdoZW4gdGhlIENQVSBzdG9wcyB3b3JraW5nCiAgKgkJY29ycmVjdGx5LCBoYXJkd2FyZSBvbiB0aGUgYm9hcmQgd2lsbCBlaXRoZXIgcGVyZm9ybSBhIGhhcmR3YXJlCiAgKgkJcmVzZXQgKGNvbGQgYm9vdCkgb3IgYSBub24tbWFza2FibGUgaW50ZXJydXB0IChOTUkpIHRvIGJyaW5nIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCmluZGV4IDM1YTBkMTIuLjVmZDAyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKQEAgLTM1LDYgKzM1LDcgQEAKICAqCWRvY3VtZW50IG51bWJlciAzMjQ2NDUtMDAxLCAzMjQ2NDYtMDAxOiBDb3VnYXIgUG9pbnQgKENQVCkKICAqCWRvY3VtZW50IG51bWJlciBUQkQgICAgICAgICAgICAgICAgICAgOiBQYXRzYnVyZyAoUEJHKQogICoJZG9jdW1lbnQgbnVtYmVyIFRCRCAgICAgICAgICAgICAgICAgICA6IERIODl4eENDCisgKglkb2N1bWVudCBudW1iZXIgVEJEICAgICAgICAgICAgICAgICAgIDogUGFudGhlciBQb2ludAogICovCiAKIC8qCkBAIC0xNTMsNiArMTU0LDM4IEBACiAJVENPX1BCRzEsCS8qIFBhdHNidXJnICovCiAJVENPX1BCRzIsCS8qIFBhdHNidXJnICovCiAJVENPX0RIODlYWENDLAkvKiBESDg5eHhDQyAqLworCVRDT19QUFQwLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDEsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUMiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQzLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDQsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUNSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ2LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDcsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUOCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ5LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDEwLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDExLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDEyLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDEzLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDE0LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDE1LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDE2LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDE3LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDE4LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDE5LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDIwLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDIxLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDIyLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDIzLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDI0LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDI1LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDI2LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDI3LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDI4LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDI5LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDMwLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDMxLAkvKiBQYW50aGVyIFBvaW50ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTI0NCw2ICsyNzcsMzggQEAKIAl7IlBhdHNidXJnIiwgMn0sCiAJeyJQYXRzYnVyZyIsIDJ9LAogCXsiREg4OXh4Q0MiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKKwl7IlBhbnRoZXIgUG9pbnQiLCAyfSwKIAl7TlVMTCwgMH0KIH07CiAKQEAgLTM2Myw2ICs0MjgsMzggQEAKIAl7IElUQ09fUENJX0RFVklDRSgweDFkNDAsCQkJCVRDT19QQkcxKX0sCiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZDQxLAkJCQlUQ09fUEJHMil9LAogCXsgSVRDT19QQ0lfREVWSUNFKDB4MjMxMCwJCQkJVENPX0RIODlYWENDKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQwLAkJCQlUQ09fUFBUMCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0MSwJCQkJVENPX1BQVDEpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDIsCQkJCVRDT19QUFQyKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQzLAkJCQlUQ09fUFBUMyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0NCwJCQkJVENPX1BQVDQpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDUsCQkJCVRDT19QUFQ1KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ2LAkJCQlUQ09fUFBUNil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0NywJCQkJVENPX1BQVDcpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDgsCQkJCVRDT19QUFQ4KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ5LAkJCQlUQ09fUFBUOSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0YSwJCQkJVENPX1BQVDEwKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRiLAkJCQlUQ09fUFBUMTEpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGMsCQkJCVRDT19QUFQxMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0ZCwJCQkJVENPX1BQVDEzKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRlLAkJCQlUQ09fUFBUMTQpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGYsCQkJCVRDT19QUFQxNSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1MCwJCQkJVENPX1BQVDE2KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTUxLAkJCQlUQ09fUFBUMTcpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTIsCQkJCVRDT19QUFQxOCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1MywJCQkJVENPX1BQVDE5KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU0LAkJCQlUQ09fUFBUMjApfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTUsCQkJCVRDT19QUFQyMSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1NiwJCQkJVENPX1BQVDIyKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU3LAkJCQlUQ09fUFBUMjMpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTgsCQkJCVRDT19QUFQyNCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1OSwJCQkJVENPX1BQVDI1KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTVhLAkJCQlUQ09fUFBUMjYpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWIsCQkJCVRDT19QUFQyNyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1YywJCQkJVENPX1BQVDI4KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTVkLAkJCQlUQ09fUFBUMjkpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWUsCQkJCVRDT19QUFQzMCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1ZiwJCQkJVENPX1BQVDMxKX0sCiAJeyAwLCB9LAkJCS8qIEVuZCBvZiBsaXN0ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlUQ09fd2R0X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tcGM4eHh4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGM4eHh4X3dkdC5jCmluZGV4IDY3MDlkNzIuLjUyOGJjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzh4eHhfd2R0LmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAJaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl3ZHRfdHlwZSA9IG1hdGNoLT5kYXRhOworCXdkdF90eXBlID0gb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKIAogCWlmICghZnJlcSB8fCBmcmVxID09IC0xKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYwppbmRleCAxMzlkNzczLi5iN2MxMzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCkBAIC00OSw3ICs0OSw3IEBACiAjZGVmaW5lIFdEVF9EQVRBX0lPX1BPUlQgICAgKFdEVF9JTkRFWF9JT19QT1JUKzEpCiAjZGVmaW5lIFNXQ19MRE4gICAgICAgICAgICAgMHgwNAogI2RlZmluZSBTSU9DRkcyICAgICAgICAgICAgIDB4MjIJLyogU2VyaWFsIElPIHJlZ2lzdGVyICovCi0jZGVmaW5lIFdEQ1RMICAgICAgICAgICAgICAgMHgxMAkvKiBXYXRjaGRvZy1UaW1lci1Db250cm9sbC1SZWdpc3RlciAqLworI2RlZmluZSBXRENUTCAgICAgICAgICAgICAgIDB4MTAJLyogV2F0Y2hkb2ctVGltZXItQ29udHJvbC1SZWdpc3RlciAqLwogI2RlZmluZSBXRFRPICAgICAgICAgICAgICAgIDB4MTEJLyogV2F0Y2hkb2cgdGltZW91dCByZWdpc3RlciAqLwogI2RlZmluZSBXRENGRyAgICAgICAgICAgICAgIDB4MTIJLyogV2F0Y2hkb2cgY29uZmlnIHJlZ2lzdGVyICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNzI0MF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNzI0MF93ZHQuYwppbmRleCA2N2RkZWIxLi5mZjExNTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzcyNDBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYmM3MjQwX3dkdC5jCkBAIC0yNzMsNyArMjczLDcgQEAKIAogCS8qIFRoZSBJTyBwb3J0IDB4MDQzIHVzZWQgdG8gZGlzYWJsZSB0aGUgd2F0Y2hkb2cKIAkgKiBpcyBhbHJlYWR5IGNsYWltZWQgYnkgdGhlIHN5c3RlbSB0aW1lciwgc28gd2UKLQkgKiBjYW50IHJlcXVlc3RfcmVnaW9uKCkgaXQgLi4uKi8KKwkgKiBjYW4ndCByZXF1ZXN0X3JlZ2lvbigpIGl0IC4uLiovCiAKIAlpZiAodGltZW91dCA8IDEgfHwgdGltZW91dCA+IFNCQzcyNDBfTUFYX1RJTUVPVVQpIHsKIAkJdGltZW91dCA9IFNCQzcyNDBfVElNRU9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2NoMzExeF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2NoMzExeF93ZHQuYwppbmRleCBiNjFhYjFjLi5jN2NmNGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NjaDMxMXhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zY2gzMTF4X3dkdC5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAlzcGluX2xvY2soJnNjaDMxMXhfd2R0X2RhdGEuaW9fbG9jayk7CiAKIAkvKiAtLSBXYXRjaGRvZyB0aW1lciBjb250cm9sIC0tCi0JICogQml0IDAgICBTdGF0dXMgQml0OiAwID0gVGltZXIgY291bnRpbmcsIDEgPSBUaW1lb3V0IG9jY3VyZWQKKwkgKiBCaXQgMCAgIFN0YXR1cyBCaXQ6IDAgPSBUaW1lciBjb3VudGluZywgMSA9IFRpbWVvdXQgb2NjdXJyZWQKIAkgKiBCaXQgMSAgIFJlc2VydmVkCiAJICogQml0IDIgICBGb3JjZSBUaW1lb3V0OiAxID0gRm9yY2VzIFdEIHRpbWVvdXQgZXZlbnQgKHNlbGYtY2xlYW5pbmcpCiAJICogQml0IDMgICBQMjAgRm9yY2UgVGltZW91dCBlbmFibGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zaHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zaHdkdC5jCmluZGV4IDRlM2U3ZWIuLmRiODRmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2h3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqIG5lY3NzYXJ5LgogICoKICAqIEFzIGEgcmVzdWx0IG9mIHRoaXMgdGltaW5nIHByb2JsZW0sIHRoZSBvbmx5IG1vZGVzIHRoYXQgYXJlIHBhcnRpY3VsYXJseQotICogZmVhc2libGUgYXJlIHRoZSA0MDk2IGFuZCB0aGUgMjA0OCBkaXZpc29ycywgd2hpY2ggeWVpbGQgNS4yNSBhbmQgMi42Mm1zCisgKiBmZWFzaWJsZSBhcmUgdGhlIDQwOTYgYW5kIHRoZSAyMDQ4IGRpdmlzb3JzLCB3aGljaCB5aWVsZCA1LjI1IGFuZCAyLjYybXMKICAqIG92ZXJmbG93IHBlcmlvZHMgcmVzcGVjdGl2ZWx5LgogICoKICAqIEFsc28sIHNpbmNlIHdlIGNhbid0IHJlYWxseSBleHBlY3QgdXNlcnNwYWNlIHRvIGJlIHJlc3BvbnNpdmUgZW5vdWdoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKaW5kZXggZGY4OGNmYS4uZTk3YjA0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgd2R0X3RpbWVyX2N0cmwodW5zaWduZWQgY2hhciByZWcpCiB7CiAJLyogLS0gV2F0Y2hkb2cgdGltZXIgY29udHJvbCAtLQotCSAqIEJpdCAwICAgU3RhdHVzIEJpdDogMCA9IFRpbWVyIGNvdW50aW5nLCAxID0gVGltZW91dCBvY2N1cmVkCisJICogQml0IDAgICBTdGF0dXMgQml0OiAwID0gVGltZXIgY291bnRpbmcsIDEgPSBUaW1lb3V0IG9jY3VycmVkCiAJICogQml0IDEgICBQb3dlciBMRUQgVG9nZ2xlOiAwID0gRGlzYWJsZSBUb2dnbGUsIDEgPSBUb2dnbGUgYXQgMSBIegogCSAqIEJpdCAyICAgRm9yY2UgVGltZW91dDogMSA9IEZvcmNlcyBXRCB0aW1lb3V0IGV2ZW50IChzZWxmLWNsZWFuaW5nKQogCSAqIEJpdCAzICAgUDIwIEZvcmNlIFRpbWVvdXQgZW5hYmxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc3A4MDVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NwODA1X3dkdC5jCmluZGV4IDBhMGVmZTcuLjBkODBlMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc3A4MDVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zcDgwNV93ZHQuYwpAQCAtOTAsNyArOTAsNyBAQAogCS8qCiAJICogc3A4MDUgcnVucyBjb3VudGVyIHdpdGggZ2l2ZW4gdmFsdWUgdHdpY2UsIGFmdGVyIHRoZSBlbmQgb2YgZmlyc3QKIAkgKiBjb3VudGVyIGl0IGdpdmVzIGFuIGludGVycnVwdCBhbmQgdGhlbiBzdGFydHMgY291bnRlciBhZ2Fpbi4gSWYKLQkgKiBpbnRlcnJ1cHQgYWxyZWFkeSBvY2N1cmVkIHRoZW4gaXQgcmVzZXRzIHRoZSBzeXN0ZW0uIFRoaXMgaXMgd2h5CisJICogaW50ZXJydXB0IGFscmVhZHkgb2NjdXJyZWQgdGhlbiBpdCByZXNldHMgdGhlIHN5c3RlbS4gVGhpcyBpcyB3aHkKIAkgKiBsb2FkIGlzIGhhbGYgb2Ygd2hhdCBzaG91bGQgYmUgcmVxdWlyZWQuCiAJICovCiAJbG9hZCA9IGRpdl91NjQocmF0ZSwgMikgKiB0aW1lb3V0IC0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2V2ZW50cy5jIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKaW5kZXggMDM2MzQzYi4uMzMxNjdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZXZlbnRzLmMKKysrIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKQEAgLTUsNyArNSw3IEBACiAgKiBkb21haW4gZ2V0cyAxMDI0IGV2ZW50IGNoYW5uZWxzLCBidXQgTlJfSVJRIGlzIG5vdCB0aGF0IGxhcmdlLCB3ZQogICogbXVzdCBkeW5hbWljYWxseSBtYXAgaXJxczwtPmV2ZW50IGNoYW5uZWxzLiAgVGhlIGV2ZW50IGNoYW5uZWxzCiAgKiBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ5IGRlZmluaW5nIGEgeGVuIGludGVycnVwdAotICogY2hpcC4gIFdoZW4gYW4gZXZlbnQgaXMgcmVjaWV2ZWQsIGl0IGlzIG1hcHBlZCB0byBhbiBpcnEgYW5kIHNlbnQKKyAqIGNoaXAuICBXaGVuIGFuIGV2ZW50IGlzIHJlY2VpdmVkLCBpdCBpcyBtYXBwZWQgdG8gYW4gaXJxIGFuZCBzZW50CiAgKiB0aHJvdWdoIHRoZSBub3JtYWwgaW50ZXJydXB0IHByb2Nlc3NpbmcgcGF0aC4KICAqCiAgKiBUaGVyZSBhcmUgZm91ciBraW5kcyBvZiBldmVudHMgd2hpY2ggY2FuIGJlIG1hcHBlZCB0byBhbiBldmVudApAQCAtNDE2LDcgKzQxNiw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJLyoKIAkgKiBGb3IgYW4gSFZNIGd1ZXN0IG9yIGRvbWFpbiAwIHdoaWNoIHNlZSAicmVhbCIgKGVtdWxhdGVkIG9yCi0JICogYWN0dWFsIHJlcGVjdGl2ZWx5KSBHU0lzIHdlIGFsbG9jYXRlIGR5bmFtaWMgSVJRcworCSAqIGFjdHVhbCByZXNwZWN0aXZlbHkpIEdTSXMgd2UgYWxsb2NhdGUgZHluYW1pYyBJUlFzCiAJICogZS5nLiB0aG9zZSBjb3JyZXNwb25kaW5nIHRvIGV2ZW50IGNoYW5uZWxzIG9yIE1TSXMKIAkgKiBldGMuIGZyb20gdGhlIHJhbmdlIGFib3ZlIHRob3NlICJyZWFsIiBHU0lzIHRvIGF2b2lkCiAJICogY29sbGlzaW9ucy4KQEAgLTkxMiw4ICs5MTIsNyBAQAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCWludCByZXR2YWw7CisJaW50IGlycSwgcmV0dmFsOwogCiAJaXJxID0gYmluZF9ldnRjaG5fdG9faXJxKGV2dGNobik7CiAJaWYgKGlycSA8IDApCkBAIC05NTUsOCArOTU0LDcgQEAKIAkJCSAgICBpcnFfaGFuZGxlcl90IGhhbmRsZXIsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBpcnFmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQogewotCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IHJldHZhbDsKKwlpbnQgaXJxLCByZXR2YWw7CiAKIAlpcnEgPSBiaW5kX3ZpcnFfdG9faXJxKHZpcnEsIGNwdSk7CiAJaWYgKGlycSA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCmluZGV4IDk1MTQzZGQuLmEyZWVlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL21hbmFnZS5jCisrKyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDx4ZW4veGVuLmg+CiAjaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgpAQCAtNjEsNyArNjIsNyBAQAogCXhlbl9tbV91bnBpbl9hbGwoKTsKIH0KIAotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiBzdGF0aWMgaW50IHhlbl9zdXNwZW5kKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN1c3BlbmRfaW5mbyAqc2kgPSBkYXRhOwpAQCAtNzAsOCArNzEsMTMgQEAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKIAllcnIgPSBzeXNkZXZfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gc3lzY29yZV9zdXNwZW5kKCk7CisJCWlmIChlcnIpCisJCQlzeXNkZXZfcmVzdW1lKCk7CisJfQogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5fc3VzcGVuZDogc3lzZGV2X3N1c3BlbmQgZmFpbGVkOiAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5fc3VzcGVuZDogc3lzdGVtIGNvcmUgc3VzcGVuZCBmYWlsZWQ6ICVkXG4iLAogCQkJZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC05NSw2ICsxMDEsNyBAQAogCQl4ZW5fdGltZXJfcmVzdW1lKCk7CiAJfQogCisJc3lzY29yZV9yZXN1bWUoKTsKIAlzeXNkZXZfcmVzdW1lKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE3Myw3ICsxODAsNyBAQAogI2VuZGlmCiAJc2h1dHRpbmdfZG93biA9IFNIVVRET1dOX0lOVkFMSUQ7CiB9Ci0jZW5kaWYJLyogQ09ORklHX0hJQkVSTkFUSU9OICovCisjZW5kaWYJLyogQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MgKi8KIAogc3RydWN0IHNodXRkb3duX2hhbmRsZXIgewogCWNvbnN0IGNoYXIgKmNvbW1hbmQ7CkBAIC0yMDIsNyArMjA5LDcgQEAKIAkJeyAicG93ZXJvZmYiLAlkb19wb3dlcm9mZiB9LAogCQl7ICJoYWx0IiwJZG9fcG93ZXJvZmYgfSwKIAkJeyAicmVib290IiwJZG9fcmVib290ICAgfSwKLSNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKyNpZmRlZiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUwogCQl7ICJzdXNwZW5kIiwJZG9fc3VzcGVuZCAgfSwKICNlbmRpZgogCQl7TlVMTCwgTlVMTH0sCmRpZmYgLS1naXQgYS9mcy85cC9maWQuYyBiL2ZzLzlwL2ZpZC5jCmluZGV4IDBlZTU5NDUuLjg1YjY3ZmYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2ZpZC5jCisrKyBiL2ZzLzlwL2ZpZC5jCkBAIC0yODYsMTEgKzI4Niw5IEBACiAKIHN0cnVjdCBwOV9maWQgKnY5ZnNfd3JpdGViYWNrX2ZpZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaW50IGVyciwgZmxhZ3M7CisJaW50IGVycjsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0Jc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAotCXY5c2VzID0gdjlmc19kZW50cnkydjlzZXMoZGVudHJ5KTsKIAlmaWQgPSB2OWZzX2ZpZF9jbG9uZV93aXRoX3VpZChkZW50cnksIDApOwogCWlmIChJU19FUlIoZmlkKSkKIAkJZ290byBlcnJvcl9vdXQ7CkBAIC0yOTksMTcgKzI5Nyw4IEBACiAJICogZGlydHkgcGFnZXMuIFdlIGFsd2F5cyByZXF1ZXN0IGZvciB0aGUgb3BlbiBmaWQgaW4gcmVhZC13cml0ZQogCSAqIG1vZGUgc28gdGhhdCBhIHBhcnRpYWwgcGFnZSB3cml0ZSB3aGljaCByZXN1bHQgaW4gcGFnZQogCSAqIHJlYWQgY2FuIHdvcmsuCi0JICoKLQkgKiB3ZSBkb24ndCBoYXZlIGEgdHN5bmNmcyBvcGVyYXRpb24gZm9yIG9sZGVyIHZlcnNpb24KLQkgKiBvZiBwcm90b2NvbC4gU28gbWFrZSBzdXJlIHRoZSB3cml0ZSBiYWNrIGZpZCBpcwotCSAqIG9wZW5lZCBpbiBPX1NZTkMgbW9kZS4KIAkgKi8KLQlpZiAoIXY5ZnNfcHJvdG9fZG90bCh2OXNlcykpCi0JCWZsYWdzID0gT19SRFdSIHwgT19TWU5DOwotCWVsc2UKLQkJZmxhZ3MgPSBPX1JEV1I7Ci0KLQllcnIgPSBwOV9jbGllbnRfb3BlbihmaWQsIGZsYWdzKTsKKwllcnIgPSBwOV9jbGllbnRfb3BlbihmaWQsIE9fUkRXUik7CiAJaWYgKGVyciA8IDApIHsKIAkJcDlfY2xpZW50X2NsdW5rKGZpZCk7CiAJCWZpZCA9IEVSUl9QVFIoZXJyKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuaCBiL2ZzLzlwL3Y5ZnMuaAppbmRleCA5NjY1YzJiLi5lNWViZWRmIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmgKKysrIGIvZnMvOXAvdjlmcy5oCkBAIC0xMTYsNyArMTE2LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OyAvKiBsaXN0IG9mIHNlc3Npb25zIHJlZ2lzdGVyZWQgd2l0aCB2OWZzICovCiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gYmRpOwogCXN0cnVjdCByd19zZW1hcGhvcmUgcmVuYW1lX3NlbTsKLQlzdHJ1Y3QgcDlfZmlkICpyb290X2ZpZDsgLyogVXNlZCBmb3IgZmlsZSBzeXN0ZW0gc3luYyAqLwogfTsKIAogLyogY2FjaGVfdmFsaWRpdHkgZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kZW50cnkuYyBiL2ZzLzlwL3Zmc19kZW50cnkuYwppbmRleCBiNmEzYjlmLi5lMDIyODkwIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGVudHJ5LmMKKysrIGIvZnMvOXAvdmZzX2RlbnRyeS5jCkBAIC0xMjYsNyArMTI2LDkgQEAKIAkJCXJldHZhbCA9IHY5ZnNfcmVmcmVzaF9pbm9kZV9kb3RsKGZpZCwgaW5vZGUpOwogCQllbHNlCiAJCQlyZXR2YWwgPSB2OWZzX3JlZnJlc2hfaW5vZGUoZmlkLCBpbm9kZSk7Ci0JCWlmIChyZXR2YWwgPD0gMCkKKwkJaWYgKHJldHZhbCA9PSAtRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIHJldHZhbDsKIAl9CiBvdXRfdmFsaWQ6CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCBmZmJiMTEzLi44MmE3YzM4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKQEAgLTgxMSw3ICs4MTEsNyBAQAogCWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOwogCWlmIChJU19FUlIoZmlkKSkgewogCQlfX3B1dG5hbWUobGluayk7Ci0JCWxpbmsgPSBFUlJfUFRSKFBUUl9FUlIoZmlkKSk7CisJCWxpbmsgPSBFUlJfQ0FTVChmaWQpOwogCQlnb3RvIG5kc2V0OwogCX0KIAlyZXR2YWwgPSBwOV9jbGllbnRfcmVhZGxpbmsoZmlkLCAmdGFyZ2V0KTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggZjNlZWQzMy4uZmVlZjZjZCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogCQlyZXR2YWwgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byByZWxlYXNlX3NiOwogCX0KKwogCXJvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOwogCWlmICghcm9vdCkgewogCQlpcHV0KGlub2RlKTsKQEAgLTE4NSwyMSArMTg2LDEwIEBACiAJCXA5c3RhdF9mcmVlKHN0KTsKIAkJa2ZyZWUoc3QpOwogCX0KLQl2OWZzX2ZpZF9hZGQocm9vdCwgZmlkKTsKIAlyZXR2YWwgPSB2OWZzX2dldF9hY2woaW5vZGUsIGZpZCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byByZWxlYXNlX3NiOwotCS8qCi0JICogQWRkIHRoZSByb290IGZpZCB0byBzZXNzaW9uIGluZm8uIFRoaXMgaXMgdXNlZAotCSAqIGZvciBmaWxlIHN5c3RlbSBzeW5jLiBXZSB3YW50IGEgY2xvbmVkIGZpZCBoZXJlCi0JICogc28gdGhhdCB3ZSBjYW4gZG8gYSBzeW5jX2ZpbGVzeXN0ZW0gYWZ0ZXIgYQotCSAqIHNocmlua19kY2FjaGVfZm9yX3Vtb3VudAotCSAqLwotCXY5c2VzLT5yb290X2ZpZCA9IHY5ZnNfZmlkX2Nsb25lKHJvb3QpOwotCWlmIChJU19FUlIodjlzZXMtPnJvb3RfZmlkKSkgewotCQlyZXR2YWwgPSBQVFJfRVJSKHY5c2VzLT5yb290X2ZpZCk7Ci0JCWdvdG8gcmVsZWFzZV9zYjsKLQl9CisJdjlmc19maWRfYWRkKHJvb3QsIGZpZCk7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiBzaW1wbGUgc2V0IG1vdW50LCByZXR1cm4gMFxuIik7CiAJcmV0dXJuIGRnZXQoc2ItPnNfcm9vdCk7CkBAIC0yMTAsMTEgKzIwMCwxNSBAQAogCXY5ZnNfc2Vzc2lvbl9jbG9zZSh2OXNlcyk7CiAJa2ZyZWUodjlzZXMpOwogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CisKIHJlbGVhc2Vfc2I6CiAJLyoKLQkgKiB3ZSB3aWxsIGRvIHRoZSBzZXNzaW9uX2Nsb3NlIGFuZCByb290IGRlbnRyeQotCSAqIHJlbGVhc2UgaW4gdGhlIGJlbG93IGNhbGwuCisJICogd2Ugd2lsbCBkbyB0aGUgc2Vzc2lvbl9jbG9zZSBhbmQgcm9vdCBkZW50cnkgcmVsZWFzZQorCSAqIGluIHRoZSBiZWxvdyBjYWxsLiBCdXQgd2UgbmVlZCB0byBjbHVuayBmaWQsIGJlY2F1c2Ugd2UgaGF2ZW4ndAorCSAqIGF0dGFjaGVkIHRoZSBmaWQgdG8gZGVudHJ5IHNvIGl0IHdvbid0IGdldCBjbHVua2VkCisJICogYXV0b21hdGljYWxseS4KIAkgKi8KKwlwOV9jbGllbnRfY2x1bmsoZmlkKTsKIAlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KQEAgLTIzMiw3ICsyMjYsNyBAQAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiICVwXG4iLCBzKTsKIAogCWtpbGxfYW5vbl9zdXBlcihzKTsKLQlwOV9jbGllbnRfY2x1bmsodjlzZXMtPnJvb3RfZmlkKTsKKwogCXY5ZnNfc2Vzc2lvbl9jYW5jZWwodjlzZXMpOwogCXY5ZnNfc2Vzc2lvbl9jbG9zZSh2OXNlcyk7CiAJa2ZyZWUodjlzZXMpOwpAQCAtMjg1LDE0ICsyNzksNiBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgdjlmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQotewotCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSBzYi0+c19mc19pbmZvOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJ2OWZzX3N5bmNfZnM6IHN1cGVyX2Jsb2NrICVwXG4iLCBzYik7Ci0JcmV0dXJuIHA5X2NsaWVudF9zeW5jX2ZzKHY5c2VzLT5yb290X2ZpZCk7Ci19Ci0KIHN0YXRpYyBpbnQgdjlmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKQEAgLTMwNyw2ICsyOTMsNTEgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCB2OWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcDlfd3N0YXQgd3N0YXQ7CisJc3RydWN0IHY5ZnNfaW5vZGUgKnY5aW5vZGU7CisJLyoKKwkgKiBzZW5kIGFuIGZzeW5jIHJlcXVlc3QgdG8gc2VydmVyIGlycmVzcGVjdGl2ZSBvZgorCSAqIHdiYy0+c3luY19tb2RlLgorCSAqLworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiJXM6IGlub2RlICVwXG4iLCBfX2Z1bmNfXywgaW5vZGUpOworCXY5aW5vZGUgPSBWOUZTX0koaW5vZGUpOworCWlmICghdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCkKKwkJcmV0dXJuIDA7CisJdjlmc19ibGFua193c3RhdCgmd3N0YXQpOworCisJcmV0ID0gcDlfY2xpZW50X3dzdGF0KHY5aW5vZGUtPndyaXRlYmFja19maWQsICZ3c3RhdCk7CisJaWYgKHJldCA8IDApIHsKKwkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX0RBVEFTWU5DKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdjlmc193cml0ZV9pbm9kZV9kb3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCWludCByZXQ7CisJc3RydWN0IHY5ZnNfaW5vZGUgKnY5aW5vZGU7CisJLyoKKwkgKiBzZW5kIGFuIGZzeW5jIHJlcXVlc3QgdG8gc2VydmVyIGlycmVzcGVjdGl2ZSBvZgorCSAqIHdiYy0+c3luY19tb2RlLgorCSAqLworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiJXM6IGlub2RlICVwXG4iLCBfX2Z1bmNfXywgaW5vZGUpOworCXY5aW5vZGUgPSBWOUZTX0koaW5vZGUpOworCWlmICghdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gcDlfY2xpZW50X2ZzeW5jKHY5aW5vZGUtPndyaXRlYmFja19maWQsIDApOworCWlmIChyZXQgPCAwKSB7CisJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9EQVRBU1lOQyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdjlmc19zdXBlcl9vcHMgPSB7CiAJLmFsbG9jX2lub2RlID0gdjlmc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZSA9IHY5ZnNfZGVzdHJveV9pbm9kZSwKQEAgLTMxNCwxNyArMzQ1LDE4IEBACiAJLmV2aWN0X2lub2RlID0gdjlmc19ldmljdF9pbm9kZSwKIAkuc2hvd19vcHRpb25zID0gZ2VuZXJpY19zaG93X29wdGlvbnMsCiAJLnVtb3VudF9iZWdpbiA9IHY5ZnNfdW1vdW50X2JlZ2luLAorCS53cml0ZV9pbm9kZSA9IHY5ZnNfd3JpdGVfaW5vZGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdjlmc19zdXBlcl9vcHNfZG90bCA9IHsKIAkuYWxsb2NfaW5vZGUgPSB2OWZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID0gdjlmc19kZXN0cm95X2lub2RlLAotCS5zeW5jX2ZzID0gdjlmc19zeW5jX2ZzLAogCS5zdGF0ZnMgPSB2OWZzX3N0YXRmcywKIAkuZHJvcF9pbm9kZSA9IHY5ZnNfZHJvcF9pbm9kZSwKIAkuZXZpY3RfaW5vZGUgPSB2OWZzX2V2aWN0X2lub2RlLAogCS5zaG93X29wdGlvbnMgPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKIAkudW1vdW50X2JlZ2luID0gdjlmc191bW91bnRfYmVnaW4sCisJLndyaXRlX2lub2RlID0gdjlmc193cml0ZV9pbm9kZV9kb3RsLAogfTsKIAogc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdjlmc19mc190eXBlID0gewpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9tYXAuYyBiL2ZzL2FkZnMvbWFwLmMKaW5kZXggZDFhNTkzMi4uNjkzNWYwNSAxMDA2NDQKLS0tIGEvZnMvYWRmcy9tYXAuYworKysgYi9mcy9hZGZzL21hcC5jCkBAIC01MSw3ICs1MSw3IEBACiAKIC8qCiAgKiBUaGlzIGlzIGZ1bi4gIFdlIG5lZWQgdG8gbG9hZCB1cCB0byAxOSBiaXRzIGZyb20gdGhlIG1hcCBhdCBhbgotICogYXJiaXRhcnkgYml0IGFsaWdubWVudC4gIChXZSdyZSBsaW1pdGVkIHRvIDE5IGJpdHMgYnkgRisgdmVyc2lvbiAyKS4KKyAqIGFyYml0cmFyeSBiaXQgYWxpZ25tZW50LiAgKFdlJ3JlIGxpbWl0ZWQgdG8gMTkgYml0cyBieSBGKyB2ZXJzaW9uIDIpLgogICovCiAjZGVmaW5lIEdFVF9GUkFHX0lEKF9tYXAsX3N0YXJ0LF9pZG1hc2spCQkJCVwKIAkoewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhY2hlLmMgYi9mcy9hZnMvY2FjaGUuYwppbmRleCAwZmIzMTVkLi41Nzc3NjNjMyAxMDA2NDQKLS0tIGEvZnMvYWZzL2NhY2hlLmMKKysrIGIvZnMvYWZzL2NhY2hlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIH0KIAogLyoKLSAqIHByb3ZpZGUgbmV3IGF1eGlsbGlhcnkgY2FjaGUgZGF0YQorICogcHJvdmlkZSBuZXcgYXV4aWxpYXJ5IGNhY2hlIGRhdGEKICAqLwogc3RhdGljIHVpbnQxNl90IGFmc19jZWxsX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCiAJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQpAQCAtMTE3LDcgKzExNyw3IEBACiB9CiAKIC8qCi0gKiBjaGVjayB0aGF0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCisgKiBjaGVjayB0aGF0IHRoZSBhdXhpbGlhcnkgZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgZW50cnkgaXMgc3RpbGwgdmFsaWQKICAqLwogc3RhdGljIGVudW0gZnNjYWNoZV9jaGVja2F1eCBhZnNfY2VsbF9jYWNoZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCiAJCQkJCQkgICAgICBjb25zdCB2b2lkICpidWZmZXIsCkBAIC0xNTAsNyArMTUwLDcgQEAKIH0KIAogLyoKLSAqIHByb3ZpZGUgbmV3IGF1eGlsbGlhcnkgY2FjaGUgZGF0YQorICogcHJvdmlkZSBuZXcgYXV4aWxpYXJ5IGNhY2hlIGRhdGEKICAqLwogc3RhdGljIHVpbnQxNl90IGFmc192bG9jYXRpb25fY2FjaGVfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKIAkJCQkJICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQpAQCAtMTcyLDcgKzE3Miw3IEBACiB9CiAKIC8qCi0gKiBjaGVjayB0aGF0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCisgKiBjaGVjayB0aGF0IHRoZSBhdXhpbGlhcnkgZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgZW50cnkgaXMgc3RpbGwgdmFsaWQKICAqLwogc3RhdGljCiBlbnVtIGZzY2FjaGVfY2hlY2thdXggYWZzX3Zsb2NhdGlvbl9jYWNoZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCkBAIC0yODMsNyArMjgzLDcgQEAKIH0KIAogLyoKLSAqIHByb3ZpZGUgbmV3IGF1eGlsbGlhcnkgY2FjaGUgZGF0YQorICogcHJvdmlkZSBuZXcgYXV4aWxpYXJ5IGNhY2hlIGRhdGEKICAqLwogc3RhdGljIHVpbnQxNl90IGFmc192bm9kZV9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAogCQkJCQl2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKQEAgLTMwOSw3ICszMDksNyBAQAogfQogCiAvKgotICogY2hlY2sgdGhhdCB0aGUgYXV4aWxsaWFyeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCB2YWxpZAorICogY2hlY2sgdGhhdCB0aGUgYXV4aWxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCiAgKi8KIHN0YXRpYyBlbnVtIGZzY2FjaGVfY2hlY2thdXggYWZzX3Zub2RlX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKIAkJCQkJCSAgICAgICBjb25zdCB2b2lkICpidWZmZXIsCmRpZmYgLS1naXQgYS9mcy9hZnMvY2VsbC5jIGIvZnMvYWZzL2NlbGwuYwppbmRleCAwZDVlZWFkZi4uM2MwOTBiNyAxMDA2NDQKLS0tIGEvZnMvYWZzL2NlbGwuYworKysgYi9mcy9hZnMvY2VsbC5jCkBAIC0yOTMsNyArMjkzLDcgQEAKIAkJaWYgKCFjZWxsKSB7CiAJCQkvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuIHVubGVzcyB1c2VyIHRyaWVzIHRvIG1vdW50CiAJCQkgKiB3aGVuIHJvb3QgY2VsbCBpcyBub3Qgc2V0LiBSZXR1cm4gYW4gaW1wb3NzaWJseQotCQkJICogYml6emFyZSBlcnJubyB0byBhbGVydCB0aGUgdXNlci4gVGhpbmdzIGxpa2UKKwkJCSAqIGJpemFycmUgZXJybm8gdG8gYWxlcnQgdGhlIHVzZXIuIFRoaW5ncyBsaWtlCiAJCQkgKiBFTk9FTlQgbWlnaHQgYmUgIm1vcmUgYXBwcm9wcmlhdGUiIGJ1dCB0aGV5IGhhcHBlbgogCQkJICogZm9yIG90aGVyIHJlYXNvbnMuCiAJCQkgKi8KZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuYwppbmRleCAxMDA3ZWQ2Li45MWRiZTJhIDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKKysrIGIvZnMvYXR0ci5jCkBAIC0xMjgsNyArMTI4LDcgQEAKICAqIHNldGF0dHJfY29weSBtdXN0IGJlIGNhbGxlZCB3aXRoIGlfbXV0ZXggaGVsZC4KICAqCiAgKiBzZXRhdHRyX2NvcHkgdXBkYXRlcyB0aGUgaW5vZGUncyBtZXRhZGF0YSB3aXRoIHRoYXQgc3BlY2lmaWVkCi0gKiBpbiBhdHRyLiBOb3RpY2FibHkgbWlzc2luZyBpcyBpbm9kZSBzaXplIHVwZGF0ZSwgd2hpY2ggaXMgbW9yZSBjb21wbGV4CisgKiBpbiBhdHRyLiBOb3RpY2VhYmx5IG1pc3NpbmcgaXMgaW5vZGUgc2l6ZSB1cGRhdGUsIHdoaWNoIGlzIG1vcmUgY29tcGxleAogICogYXMgaXQgcmVxdWlyZXMgcGFnZWNhY2hlIHVwZGF0ZXMuCiAgKgogICogVGhlIGlub2RlIGlzIG5vdCBtYXJrZWQgYXMgZGlydHkgYWZ0ZXIgdGhpcyBvcGVyYXRpb24uIFRoZSByYXRpb25hbGUgaXMKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggOTY4MDRhMS4uZjU1YWUyMyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogICogc2V0IHRoZSBETUFOQUdFRF9BVVRPTU9VTlQgYW5kIERNQU5BR0VEX1RSQU5TSVQgZmxhZ3Mgb24gdGhlIGxlYXZlcwogICogb2YgdGhlIGRpcmVjdG9yeSB0cmVlLiBUaGVyZSBpcyBubyBuZWVkIHRvIGNsZWFyIHRoZSBhdXRvbW91bnQgZmxhZwogICogZm9sbG93aW5nIGEgbW91bnQgb3IgcmVzdG9yZSBpdCBhZnRlciBhbiBleHBpcmUgYmVjYXVzZSB0aGVzZSBtb3VudHMKLSAqIGFyZSBhbHdheXMgY292ZXJlZC4gSG93ZXZlciwgaXQgaXMgbmVjY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGVzZQorICogYXJlIGFsd2F5cyBjb3ZlcmVkLiBIb3dldmVyLCBpdCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlc2UKICAqIGZsYWdzIGFyZSBjbGVhciBvbiBub24tZW1wdHkgZGlyZWN0b3JpZXMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2FsbHMKICAqIGR1cmluZyBwYXRoIHdhbGtzLgogICovCmRpZmYgLS1naXQgYS9mcy9iZWZzL0NoYW5nZUxvZyBiL2ZzL2JlZnMvQ2hhbmdlTG9nCmluZGV4IGNlOGM3ODcuLjc1YTQ2MWMgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvQ2hhbmdlTG9nCisrKyBiL2ZzL2JlZnMvQ2hhbmdlTG9nCkBAIC0yNCw3ICsyNCw3IEBACiAKIFZlcnNpb24gMC42NCAoMjAwMi0wMi0wNykKID09PT09PT09PT0KLSogRGlkIHRoZSBzdHJpbmcgY29tcGFyaXNpb24gcmVhbGx5IHJpZ2h0IHRoaXMgdGltZSAoYnRyZWUuYykgW1dEXQorKiBEaWQgdGhlIHN0cmluZyBjb21wYXJpc29uIHJlYWxseSByaWdodCB0aGlzIHRpbWUgKGJ0cmVlLmMpIFtXRF0KIAogKiBGaXhlZCB1cCBzb21lIHBsYWNlcyB3aGVyZSBJIGFzc3VtZWQgdGhhdCBhIGxvbmcgaW50IGNvdWxkIGhvbGQKIAlhIHBvaW50ZXIgdmFsdWUuIChidHJlZS5jKSBbV0RdCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlNb3JlIGZsZXhpYmxlLiBXaWxsIHNvb24gYmUgY29udHJvbGxhYmxlIGF0IG1vdW50IHRpbWUgCiAJKHNlZSBUT0RPKS4gW1dEXQogCi0qIFJld3JvdGUgZGF0YXN0cmVhbSBwb3NpdG9uIGxvb2t1cHMuCisqIFJld3JvdGUgZGF0YXN0cmVhbSBwb3NpdGlvbiBsb29rdXBzLgogCShkYXRhc3RyZWFtLmMpIFtXRF0KIAogKiBNb3ZlZCB0aGUgVE9ETyBsaXN0IHRvIGl0cyBvd24gZmlsZS4KQEAgLTE1MCw3ICsxNTAsNyBAQAogKiBBbnRvbiBhbHNvIHRvbGQgbWUgdGhhdCB0aGUgYmxvY2tzaXplIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGxhcmdlciB0aGFuIAogCXRoZSBwYWdlIHNpemUgaW4gbGludXgsIHdoaWNoIGlzIDRrIGkzODYuIE9vcHMuIEFkZGVkIGEgdGVzdCBmb3IgCiAJKGJsb2Nrc2l6ZSA+IFBBR0VfU0laRSksIGFuZCByZWZ1c2UgdG8gbW91bnQgaW4gdGhhdCBjYXNlLiBXaGF0IHRoaXMgCi0JcHJhY3RpY2FseSBtZWFucyBpcyB0aGF0IDhrIGJsb2Nrc2l6ZSB2b2x1bWVzIHdvbid0IHdvcmsgd2l0aG91dCBhIG1ham9yCisJcHJhY3RpY2FsbHkgbWVhbnMgaXMgdGhhdCA4ayBibG9ja3NpemUgdm9sdW1lcyB3b24ndCB3b3JrIHdpdGhvdXQgYSBtYWpvcgogCXJlc3RydWN0dXJpbmcgb2YgdGhlIGRyaXZlciAob3IgYW4gYWxwaGEgb3Igb3RoZXIgNjRiaXQgaGFyZHdhcmUpLiBbV0RdCiAKICogQ2xlYW5lZCB1cCB0aGUgYmVmc19jb3VudF9ibG9ja3MoKSBmdW5jdGlvbi4gTXVjaCBzbWFydGVyIG5vdy4gCkBAIC0xODMsNyArMTgzLDcgQEAKIAlzdHJ1Y3R1cmVzIGludG8gdGhlIGdlbmVyaWMgcG9pbnRlciBmaWVsZHMgb2YgdGhlIHB1YmxpYyBzdHJ1Y3R1cmVzIAogCXdpdGgga21hbGxvYygpLiBwdXRfc3VwZXIgYW5kIHB1dF9pbm9kZSBmcmVlIHRoZW0uIFRoaXMgYWxsb3dzIHVzIG5vdCAKIAl0byBoYXZlIHRvIHRvdWNoIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgcHVibGljIHN0cnVjdHVyZXMgaW4gCi0JaW5jbHVkZS9saW51eC9mcy5oLiBBbHNvLCBiZWZzX2lub2RlX2luZm8gaXMgaHVnZSAoYmVjdWFzZSBvZiB0aGUgCisJaW5jbHVkZS9saW51eC9mcy5oLiBBbHNvLCBiZWZzX2lub2RlX2luZm8gaXMgaHVnZSAoYmVjYXVzZSBvZiB0aGUgCiAJc3ltbGluayBzdHJpbmcpLiAoc3VwZXIuYywgaW5vZGUuYywgYmVmc19mcy5oKSBbV0RdCiAKICogRml4ZWQgYSB0aGlua28gdGhhdCB3YXMgY29ycnVwdGluZyBmaWxlIHJlYWRzIGFmdGVyIHRoZSBmaXJzdCBibG9ja19ydW4gCkBAIC00MDQsNyArNDA0LDcgQEAKIAogKiBGaXhlZCBjb21waWxlIGVycm9ycyBvbiAyLjQuMSBrZXJuZWwgKFdEKQogCVJlc29sdmUgcmVqZWN0ZWQgcGF0Y2hlcwotCUFjY29tb2RhdGUgY2hhbmdlZCBOTFMgaW50ZXJmYWNlICh1dGlsLmgpCisJQWNjb21tb2RhdGUgY2hhbmdlZCBOTFMgaW50ZXJmYWNlICh1dGlsLmgpCiAJTmVlZGVkIHRvIGluY2x1ZGUgPGxpbnV4L3NsYWIuaD4gaW4gbW9zdCBmaWxlcwogCU1ha2VmaWxlIGNoYW5nZXMKIAlmcy9Db25maWcuaW4gY2hhbmdlcwpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmggYi9mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaAppbmRleCA3ODkzZWFhLi5lYjU1N2Q5IDEwMDY0NAotLS0gYS9mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaAorKysgYi9mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaApAQCAtMjM0LDcgKzIzNCw3IEBACiB9IFBBQ0tFRCBiZWZzX2J0cmVlX3N1cGVyOwogCiAvKgotICogSGVhZGVyIHN0dWN0dXJlIG9mIGVhY2ggYnRyZWUgbm9kZQorICogSGVhZGVyIHN0cnVjdHVyZSBvZiBlYWNoIGJ0cmVlIG5vZGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWZzNjQgbGVmdDsKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYnRyZWUuYyBiL2ZzL2JlZnMvYnRyZWUuYwppbmRleCA0MjAyZGI3Li5hNjZjOWIxIDEwMDY0NAotLS0gYS9mcy9iZWZzL2J0cmVlLmMKKysrIGIvZnMvYmVmcy9idHJlZS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR1BMLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgZGV0YWlscy4KICAqCi0gKiAyMDAyLTAyLTA1OiBTZXJnZXkgUy4gS29zdHlsaW92IGFkZGVkIGJpbmFyeSBzZWFyY2ggd2l0aGluZworICogMjAwMi0wMi0wNTogU2VyZ2V5IFMuIEtvc3R5bGlvdiBhZGRlZCBiaW5hcnkgc2VhcmNoIHdpdGhpbgogICogCQlidHJlZSBub2Rlcy4KICAqCiAgKiBNYW55IHRoYW5rcyB0bzoKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvbGludXh2ZnMuYyBiL2ZzL2JlZnMvbGludXh2ZnMuYwppbmRleCAwNjQ1N2VkLi41NGI4YzI4IDEwMDY0NAotLS0gYS9mcy9iZWZzL2xpbnV4dmZzLmMKKysrIGIvZnMvYmVmcy9saW51eHZmcy5jCkBAIC03MzQsNyArNzM0LDcgQEAKIAogLyogVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHJlc3BvbnNpYmlsdGl5IG9mIGdldHRpbmcgdGhlCiAgKiBmaWxlc3lzdGVtIHJlYWR5IGZvciB1bm1vdW50aW5nLiAKLSAqIEJhc2ljbHksIHdlIGZyZWUgZXZlcnl0aGluZyB0aGF0IHdlIGFsbG9jYXRlZCBpbgorICogQmFzaWNhbGx5LCB3ZSBmcmVlIGV2ZXJ5dGhpbmcgdGhhdCB3ZSBhbGxvY2F0ZWQgaW4KICAqIGJlZnNfcmVhZF9pbm9kZQogICovCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jCmluZGV4IGYzNDA3OGQuLjMwMzk4M2YgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGYuYworKysgYi9mcy9iaW5mbXRfZWxmLmMKQEAgLTk0MSw5ICs5NDEsMTMgQEAKIAljdXJyZW50LT5tbS0+c3RhcnRfc3RhY2sgPSBicHJtLT5wOwogCiAjaWZkZWYgYXJjaF9yYW5kb21pemVfYnJrCi0JaWYgKChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkgJiYgKHJhbmRvbWl6ZV92YV9zcGFjZSA+IDEpKQorCWlmICgoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpICYmIChyYW5kb21pemVfdmFfc3BhY2UgPiAxKSkgewogCQljdXJyZW50LT5tbS0+YnJrID0gY3VycmVudC0+bW0tPnN0YXJ0X2JyayA9CiAJCQlhcmNoX3JhbmRvbWl6ZV9icmsoY3VycmVudC0+bW0pOworI2lmZGVmIENPTkZJR19DT01QQVRfQlJLCisJCWN1cnJlbnQtPmJya19yYW5kb21pemVkID0gMTsKKyNlbmRpZgorCX0KICNlbmRpZgogCiAJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgTU1BUF9QQUdFX1pFUk8pIHsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9mbGF0LmMgYi9mcy9iaW5mbXRfZmxhdC5jCmluZGV4IDgxMTM4NGIuLjM5N2QzMDUgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9mbGF0LmMKKysrIGIvZnMvYmluZm10X2ZsYXQuYwpAQCAtNzE3LDcgKzcxNyw3IEBACiAJICogaGVscCBzaW1wbGlmeSBhbGwgdGhpcyBtdW1ibyBqdW1ibwogCSAqCiAJICogV2UndmUgZ290IHR3byBkaWZmZXJlbnQgc2VjdGlvbnMgb2YgcmVsb2NhdGlvbiBlbnRyaWVzLgotCSAqIFRoZSBmaXJzdCBpcyB0aGUgR09UIHdoaWNoIHJlc2lkZXMgYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSBkYXRhIHNlZ21lbnQKKwkgKiBUaGUgZmlyc3QgaXMgdGhlIEdPVCB3aGljaCByZXNpZGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgc2VnbWVudAogCSAqIGFuZCBpcyB0ZXJtaW5hdGVkIHdpdGggYSAtMS4gIFRoaXMgb25lIGNhbiBiZSByZWxvY2F0ZWQgaW4gcGxhY2UuCiAJICogVGhlIHNlY29uZCBpcyB0aGUgZXh0cmEgcmVsb2NhdGlvbiBlbnRyaWVzIHRhY2tlZCBhZnRlciB0aGUgaW1hZ2UncwogCSAqIGRhdGEgc2VnbWVudC4gVGhlc2UgcmVxdWlyZSBhIGxpdHRsZSBtb3JlIHByb2Nlc3NpbmcgYXMgdGhlIGVudHJ5IGlzCmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDRkNmQ0YjYuLjg0MGEwZDcgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0xNDM2LDcgKzE0MzYsNyBAQAogICogICBwcmVmZXJyZWQgd2F5IHRvIGVuZCBJL08gb24gYSBiaW8sIGl0IHRha2VzIGNhcmUgb2YgY2xlYXJpbmcKICAqICAgQklPX1VQVE9EQVRFIG9uIGVycm9yLiBAZXJyb3IgaXMgMCBvbiBzdWNjZXNzLCBhbmQgYW5kIG9uZSBvZiB0aGUKICAqICAgZXN0YWJsaXNoZWQgLUV4eHh4ICgtRUlPLCBmb3IgaW5zdGFuY2UpIGVycm9yIHZhbHVlcyBpbiBjYXNlCi0gKiAgIHNvbWV0aGluZyB3ZW50IHdyb25nLiBOb29uZSBzaG91bGQgY2FsbCBiaV9lbmRfaW8oKSBkaXJlY3RseSBvbiBhCisgKiAgIHNvbWV0aGluZyB3ZW50IHdyb25nLiBObyBvbmUgc2hvdWxkIGNhbGwgYmlfZW5kX2lvKCkgZGlyZWN0bHkgb24gYQogICogICBiaW8gdW5sZXNzIHRoZXkgb3duIGl0IGFuZCB0aHVzIGtub3cgdGhhdCBpdCBoYXMgYW4gZW5kX2lvCiAgKiAgIGZ1bmN0aW9uLgogICoqLwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBjMTUxMWM2Li41MTQ3YmRkIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtNjUzLDcgKzY1Myw3IEBACiAgKiBAd2hvbGU6IHdob2xlIGJsb2NrIGRldmljZSBjb250YWluaW5nIEBiZGV2LCBtYXkgZXF1YWwgQGJkZXYKICAqIEBob2xkZXI6IGhvbGRlciB0cnlpbmcgdG8gY2xhaW0gQGJkZXYKICAqCi0gKiBUZXN0IHdodGhlciBAYmRldiBjYW4gYmUgY2xhaW1lZCBieSBAaG9sZGVyLgorICogVGVzdCB3aGV0aGVyIEBiZGV2IGNhbiBiZSBjbGFpbWVkIGJ5IEBob2xkZXIuCiAgKgogICogQ09OVEVYVDoKICAqIHNwaW5fbG9jaygmYmRldl9sb2NrKS4KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggZGUzNGJmYS4uNDRlYTViOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTE3OCwxNiArMTc4LDE4IEBACiAKIAlpZiAodmFsdWUpIHsKIAkJYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOwotCQlpZiAoYWNsID09IE5VTEwpIHsKLQkJCXZhbHVlID0gTlVMTDsKLQkJCXNpemUgPSAwOwotCQl9IGVsc2UgaWYgKElTX0VSUihhY2wpKSB7CisJCWlmIChJU19FUlIoYWNsKSkKIAkJCXJldHVybiBQVFJfRVJSKGFjbCk7CisKKwkJaWYgKGFjbCkgeworCQkJcmV0ID0gcG9zaXhfYWNsX3ZhbGlkKGFjbCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJcmV0ID0gYnRyZnNfc2V0X2FjbChOVUxMLCBkZW50cnktPmRfaW5vZGUsIGFjbCwgdHlwZSk7Ci0KK291dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IGQ0N2NlODMuLjhmNGI4MWQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtNzE4LDcgKzcxOCw3IEBACiAJdTY0IHRvdGFsX2J5dGVzOwkvKiB0b3RhbCBieXRlcyBpbiB0aGUgc3BhY2UsCiAJCQkJICAgdGhpcyBkb2Vzbid0IHRha2UgbWlycm9ycyBpbnRvIGFjY291bnQgKi8KIAl1NjQgYnl0ZXNfdXNlZDsJCS8qIHRvdGFsIGJ5dGVzIHVzZWQsCi0JCQkJICAgdGhpcyBkb2VzJ3QgdGFrZSBtaXJyb3JzIGludG8gYWNjb3VudCAqLworCQkJCSAgIHRoaXMgZG9lc24ndCB0YWtlIG1pcnJvcnMgaW50byBhY2NvdW50ICovCiAJdTY0IGJ5dGVzX3Bpbm5lZDsJLyogdG90YWwgYnl0ZXMgcGlubmVkLCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlCiAJCQkJICAgdHJhbnNhY3Rpb24gZmluaXNoZXMgKi8KIAl1NjQgYnl0ZXNfcmVzZXJ2ZWQ7CS8qIHRvdGFsIGJ5dGVzIHRoZSBhbGxvY2F0b3IgaGFzIHJlc2VydmVkIGZvcgpAQCAtNzQwLDggKzc0MCwxMCBAQAogCSAqLwogCXVuc2lnbmVkIGxvbmcgcmVzZXJ2YXRpb25fcHJvZ3Jlc3M7CiAKLQlpbnQgZnVsbDsJCS8qIGluZGljYXRlcyB0aGF0IHdlIGNhbm5vdCBhbGxvY2F0ZSBhbnkgbW9yZQorCWludCBmdWxsOjE7CQkvKiBpbmRpY2F0ZXMgdGhhdCB3ZSBjYW5ub3QgYWxsb2NhdGUgYW55IG1vcmUKIAkJCQkgICBjaHVua3MgZm9yIHRoaXMgc3BhY2UgKi8KKwlpbnQgY2h1bmtfYWxsb2M6MTsJLyogc2V0IGlmIHdlIGFyZSBhbGxvY2F0aW5nIGEgY2h1bmsgKi8KKwogCWludCBmb3JjZV9hbGxvYzsJLyogc2V0IGlmIHdlIG5lZWQgdG8gZm9yY2UgYSBjaHVuayBhbGxvYyBmb3IKIAkJCQkgICB0aGlzIHNwYWNlICovCiAKQEAgLTEyODQsNiArMTI4Niw4IEBACiAjZGVmaW5lIEJUUkZTX0lOT0RFX0RJUlNZTkMJCSgxIDw8IDEwKQogI2RlZmluZSBCVFJGU19JTk9ERV9DT01QUkVTUwkJKDEgPDwgMTEpCiAKKyNkZWZpbmUgQlRSRlNfSU5PREVfUk9PVF9JVEVNX0lOSVQJKDEgPDwgMzEpCisKIC8qIHNvbWUgbWFjcm9zIHRvIGdlbmVyYXRlIHNldC9nZXQgZnVuY3MgZm9yIHRoZSBzdHJ1Y3QgZmllbGRzLiAgVGhpcwogICogYXNzdW1lcyB0aGVyZSBpcyBhIGxlZm9vX3RvX2NwdSBmb3IgZXZlcnkgdHlwZSwgc28gbGV0cyBtYWtlIGEgc2ltcGxlCiAgKiBvbmUgZm9yIHU4OgpAQCAtMjM1OSw2ICsyMzYzLDggQEAKIGludCBidHJmc19maW5kX29ycGhhbl9yb290cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqdHJlZV9yb290KTsKIGludCBidHJmc19zZXRfcm9vdF9ub2RlKHN0cnVjdCBidHJmc19yb290X2l0ZW0gKml0ZW0sCiAJCQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbm9kZSk7Cit2b2lkIGJ0cmZzX2NoZWNrX2FuZF9pbml0X3Jvb3RfaXRlbShzdHJ1Y3QgYnRyZnNfcm9vdF9pdGVtICppdGVtKTsKKwogLyogZGlyLWl0ZW0uYyAqLwogaW50IGJ0cmZzX2luc2VydF9kaXJfaXRlbShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC0yNTcyLDYgKzI1NzgsMTEgQEAKIGludCBidHJmc19tYXJrX2V4dGVudF93cml0dGVuKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKIGludCBidHJmc19yZWxlYXNlX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwordm9pZCBidHJmc19kcm9wX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBudW1fcGFnZXMpOworaW50IGJ0cmZzX2RpcnR5X3BhZ2VzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnVtX3BhZ2VzLAorCQkgICAgICBsb2ZmX3QgcG9zLCBzaXplX3Qgd3JpdGVfYnl0ZXMsCisJCSAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKipjYWNoZWQpOwogCiAvKiB0cmVlLWRlZnJhZy5jICovCiBpbnQgYnRyZnNfZGVmcmFnX2xlYXZlcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCBkN2E3MzE1Li4yMjhjZjM2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC0xMjc1LDggKzEyNzUsMTAgQEAKIAlyb290LT5jb21taXRfcm9vdCA9IGJ0cmZzX3Jvb3Rfbm9kZShyb290KTsKIAlCVUdfT04oIXJvb3QtPm5vZGUpOwogb3V0OgotCWlmIChsb2NhdGlvbi0+b2JqZWN0aWQgIT0gQlRSRlNfVFJFRV9MT0dfT0JKRUNUSUQpCisJaWYgKGxvY2F0aW9uLT5vYmplY3RpZCAhPSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCkgewogCQlyb290LT5yZWZfY293cyA9IDE7CisJCWJ0cmZzX2NoZWNrX2FuZF9pbml0X3Jvb3RfaXRlbSgmcm9vdC0+cm9vdF9pdGVtKTsKKwl9CiAKIAlyZXR1cm4gcm9vdDsKIH0KQEAgLTI4MjIsNiArMjgyNCw3IEBACiAKIAlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CiAJaWYgKGRlbGF5ZWRfcmVmcy0+bnVtX2VudHJpZXMgPT0gMCkgeworCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZGVsYXllZF9yZWZzIGhhcyBOTyBlbnRyeVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMzA1NSw3ICszMDU4LDcgQEAKIAkJYnRyZnNfZGVzdHJveV9waW5uZWRfZXh0ZW50KHJvb3QsCiAJCQkJCSAgICByb290LT5mc19pbmZvLT5waW5uZWRfZXh0ZW50cyk7CiAKLQkJdC0+dXNlX2NvdW50ID0gMDsKKwkJYXRvbWljX3NldCgmdC0+dXNlX2NvdW50LCAwKTsKIAkJbGlzdF9kZWxfaW5pdCgmdC0+bGlzdCk7CiAJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zYWN0aW9uX2NhY2hlcCwgdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBmNjE5YzNjLi45ZWU2YmQ1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTMzLDYgKzMzLDI1IEBACiAjaW5jbHVkZSAibG9ja2luZy5oIgogI2luY2x1ZGUgImZyZWUtc3BhY2UtY2FjaGUuaCIKIAorLyogY29udHJvbCBmbGFncyBmb3IgZG9fY2h1bmtfYWxsb2MncyBmb3JjZSBmaWVsZAorICogQ0hVTktfQUxMT0NfTk9fRk9SQ0UgbWVhbnMgdG8gb25seSBhbGxvY2F0ZSBhIGNodW5rCisgKiBpZiB3ZSByZWFsbHkgbmVlZCBvbmUuCisgKgorICogQ0hVTktfQUxMT0NfRk9SQ0UgbWVhbnMgaXQgbXVzdCB0cnkgdG8gYWxsb2NhdGUgb25lCisgKgorICogQ0hVTktfQUxMT0NfTElNSVRFRCBtZWFucyB0byBvbmx5IHRyeSBhbmQgYWxsb2NhdGUgb25lCisgKiBpZiB3ZSBoYXZlIHZlcnkgZmV3IGNodW5rcyBhbHJlYWR5IGFsbG9jYXRlZC4gIFRoaXMgaXMKKyAqIHVzZWQgYXMgcGFydCBvZiB0aGUgY2x1c3RlcmluZyBjb2RlIHRvIGhlbHAgbWFrZSBzdXJlCisgKiB3ZSBoYXZlIGEgZ29vZCBwb29sIG9mIHN0b3JhZ2UgdG8gY2x1c3RlciBpbiwgd2l0aG91dAorICogZmlsbGluZyB0aGUgRlMgd2l0aCBlbXB0eSBjaHVua3MKKyAqCisgKi8KK2VudW0geworCUNIVU5LX0FMTE9DX05PX0ZPUkNFID0gMCwKKwlDSFVOS19BTExPQ19GT1JDRSA9IDEsCisJQ0hVTktfQUxMT0NfTElNSVRFRCA9IDIsCit9OworCiBzdGF0aWMgaW50IHVwZGF0ZV9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGFsbG9jKTsKQEAgLTMwMTksNyArMzAzOCw4IEBACiAJZm91bmQtPmJ5dGVzX3JlYWRvbmx5ID0gMDsKIAlmb3VuZC0+Ynl0ZXNfbWF5X3VzZSA9IDA7CiAJZm91bmQtPmZ1bGwgPSAwOwotCWZvdW5kLT5mb3JjZV9hbGxvYyA9IDA7CisJZm91bmQtPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTk9fRk9SQ0U7CisJZm91bmQtPmNodW5rX2FsbG9jID0gMDsKIAkqc3BhY2VfaW5mbyA9IGZvdW5kOwogCWxpc3RfYWRkX3JjdSgmZm91bmQtPmxpc3QsICZpbmZvLT5zcGFjZV9pbmZvKTsKIAlhdG9taWNfc2V0KCZmb3VuZC0+Y2FjaGluZ190aHJlYWRzLCAwKTsKQEAgLTMxNTAsNyArMzE3MCw3IEBACiAJCWlmICghZGF0YV9zaW5mby0+ZnVsbCAmJiBhbGxvY19jaHVuaykgewogCQkJdTY0IGFsbG9jX3RhcmdldDsKIAotCQkJZGF0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCQkJZGF0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSBDSFVOS19BTExPQ19GT1JDRTsKIAkJCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKIGFsbG9jOgogCQkJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMSk7CkBAIC0zMTYwLDcgKzMxODAsOCBAQAogCiAJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCiAJCQkJCSAgICAgYnl0ZXMgKyAyICogMTAyNCAqIDEwMjQsCi0JCQkJCSAgICAgYWxsb2NfdGFyZ2V0LCAwKTsKKwkJCQkJICAgICBhbGxvY190YXJnZXQsCisJCQkJCSAgICAgQ0hVTktfQUxMT0NfTk9fRk9SQ0UpOwogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJaWYgKHJldCAhPSAtRU5PU1BDKQpAQCAtMzIzOSwzMSArMzI2MCw1NiBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmb3VuZCwgaGVhZCwgbGlzdCkgewogCQlpZiAoZm91bmQtPmZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpCi0JCQlmb3VuZC0+Zm9yY2VfYWxsb2MgPSAxOworCQkJZm91bmQtPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfRk9SQ0U7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IHNob3VsZF9hbGxvY19jaHVuayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCSAgICAgIHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzaW5mbywgdTY0IGFsbG9jX2J5dGVzKQorCQkJICAgICAgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNpbmZvLCB1NjQgYWxsb2NfYnl0ZXMsCisJCQkgICAgICBpbnQgZm9yY2UpCiB7CiAJdTY0IG51bV9ieXRlcyA9IHNpbmZvLT50b3RhbF9ieXRlcyAtIHNpbmZvLT5ieXRlc19yZWFkb25seTsKKwl1NjQgbnVtX2FsbG9jYXRlZCA9IHNpbmZvLT5ieXRlc191c2VkICsgc2luZm8tPmJ5dGVzX3Jlc2VydmVkOwogCXU2NCB0aHJlc2g7CiAKLQlpZiAoc2luZm8tPmJ5dGVzX3VzZWQgKyBzaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBhbGxvY19ieXRlcyArIDI1NiAqIDEwMjQgKiAxMDI0IDwgbnVtX2J5dGVzKQorCWlmIChmb3JjZSA9PSBDSFVOS19BTExPQ19GT1JDRSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIGluIGxpbWl0ZWQgbW9kZSwgd2Ugd2FudCB0byBoYXZlIHNvbWUgZnJlZSBzcGFjZSB1cCB0bworCSAqIGFib3V0IDElIG9mIHRoZSBGUyBzaXplLgorCSAqLworCWlmIChmb3JjZSA9PSBDSFVOS19BTExPQ19MSU1JVEVEKSB7CisJCXRocmVzaCA9IGJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKKwkJdGhyZXNoID0gbWF4X3QodTY0LCA2NCAqIDEwMjQgKiAxMDI0LAorCQkJICAgICAgIGRpdl9mYWN0b3JfZmluZSh0aHJlc2gsIDEpKTsKKworCQlpZiAobnVtX2J5dGVzIC0gbnVtX2FsbG9jYXRlZCA8IHRocmVzaCkKKwkJCXJldHVybiAxOworCX0KKworCS8qCisJICogd2UgaGF2ZSB0d28gc2ltaWxhciBjaGVja3MgaGVyZSwgb25lIGJhc2VkIG9uIHBlcmNlbnRhZ2UKKwkgKiBhbmQgb25jZSBiYXNlZCBvbiBhIGhhcmQgbnVtYmVyIG9mIDI1Nk1CLiAgVGhlIGlkZWEKKwkgKiBpcyB0aGF0IGlmIHdlIGhhdmUgYSBnb29kIGFtb3VudCBvZiBmcmVlCisJICogcm9vbSwgZG9uJ3QgYWxsb2NhdGUgYSBjaHVuay4gIEEgZ29vZCBtb3VudCBpcworCSAqIGxlc3MgdGhhbiA4MCUgdXRpbGl6ZWQgb2YgdGhlIGNodW5rcyB3ZSBoYXZlIGFsbG9jYXRlZCwKKwkgKiBvciBtb3JlIHRoYW4gMjU2TUIgZnJlZQorCSAqLworCWlmIChudW1fYWxsb2NhdGVkICsgYWxsb2NfYnl0ZXMgKyAyNTYgKiAxMDI0ICogMTAyNCA8IG51bV9ieXRlcykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc2luZm8tPmJ5dGVzX3VzZWQgKyBzaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBhbGxvY19ieXRlcyA8IGRpdl9mYWN0b3IobnVtX2J5dGVzLCA4KSkKKwlpZiAobnVtX2FsbG9jYXRlZCArIGFsbG9jX2J5dGVzIDwgZGl2X2ZhY3RvcihudW1fYnl0ZXMsIDgpKQogCQlyZXR1cm4gMDsKIAogCXRocmVzaCA9IGJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKKworCS8qIDI1Nk1CIG9yIDUlIG9mIHRoZSBGUyAqLwogCXRocmVzaCA9IG1heF90KHU2NCwgMjU2ICogMTAyNCAqIDEwMjQsIGRpdl9mYWN0b3JfZmluZSh0aHJlc2gsIDUpKTsKIAogCWlmIChudW1fYnl0ZXMgPiB0aHJlc2ggJiYgc2luZm8tPmJ5dGVzX3VzZWQgPCBkaXZfZmFjdG9yKG51bV9ieXRlcywgMykpCiAJCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMyNzMsMTAgKzMzMTksOSBAQAogewogCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvOwogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gZXh0ZW50X3Jvb3QtPmZzX2luZm87CisJaW50IHdhaXRfZm9yX2FsbG9jID0gMDsKIAlpbnQgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJmZzX2luZm8tPmNodW5rX211dGV4KTsKLQogCWZsYWdzID0gYnRyZnNfcmVkdWNlX2FsbG9jX3Byb2ZpbGUoZXh0ZW50X3Jvb3QsIGZsYWdzKTsKIAogCXNwYWNlX2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhleHRlbnRfcm9vdC0+ZnNfaW5mbywgZmxhZ3MpOwpAQCAtMzI4NywyMSArMzMzMiw0MCBAQAogCX0KIAlCVUdfT04oIXNwYWNlX2luZm8pOwogCithZ2FpbjoKIAlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCWlmIChzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYykKLQkJZm9yY2UgPSAxOworCQlmb3JjZSA9IHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jOwogCWlmIChzcGFjZV9pbmZvLT5mdWxsKSB7CiAJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAotCWlmICghZm9yY2UgJiYgIXNob3VsZF9hbGxvY19jaHVuayhleHRlbnRfcm9vdCwgc3BhY2VfaW5mbywKLQkJCQkJICBhbGxvY19ieXRlcykpIHsKKwlpZiAoIXNob3VsZF9hbGxvY19jaHVuayhleHRlbnRfcm9vdCwgc3BhY2VfaW5mbywgYWxsb2NfYnl0ZXMsIGZvcmNlKSkgewogCQlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNwYWNlX2luZm8tPmNodW5rX2FsbG9jKSB7CisJCXdhaXRfZm9yX2FsbG9jID0gMTsKKwl9IGVsc2UgeworCQlzcGFjZV9pbmZvLT5jaHVua19hbGxvYyA9IDE7CiAJfQorCiAJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCisJbXV0ZXhfbG9jaygmZnNfaW5mby0+Y2h1bmtfbXV0ZXgpOworCisJLyoKKwkgKiBUaGUgY2h1bmtfbXV0ZXggaXMgaGVsZCB0aHJvdWdob3V0IHRoZSBlbnRpcmV0eSBvZiBhIGNodW5rCisJICogYWxsb2NhdGlvbiwgc28gb25jZSB3ZSd2ZSBhY3F1aXJlZCB0aGUgY2h1bmtfbXV0ZXggd2Uga25vdyB0aGF0IHRoZQorCSAqIG90aGVyIGd1eSBpcyBkb25lIGFuZCB3ZSBuZWVkIHRvIHJlY2hlY2sgYW5kIHNlZSBpZiB3ZSBzaG91bGQKKwkgKiBhbGxvY2F0ZS4KKwkgKi8KKwlpZiAod2FpdF9mb3JfYWxsb2MpIHsKKwkJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT5jaHVua19tdXRleCk7CisJCXdhaXRfZm9yX2FsbG9jID0gMDsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAkvKgogCSAqIElmIHdlIGhhdmUgbWl4ZWQgZGF0YS9tZXRhZGF0YSBjaHVua3Mgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2Uga2VlcAogCSAqIGFsbG9jYXRpbmcgbWl4ZWQgY2h1bmtzIGluc3RlYWQgb2YgaW5kaXZpZHVhbCBjaHVua3MuCkBAIC0zMzI3LDkgKzMzOTEsMTAgQEAKIAkJc3BhY2VfaW5mby0+ZnVsbCA9IDE7CiAJZWxzZQogCQlyZXQgPSAxOwotCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKKworCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTk9fRk9SQ0U7CisJc3BhY2VfaW5mby0+Y2h1bmtfYWxsb2MgPSAwOwogCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLW91dDoKIAltdXRleF91bmxvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT5jaHVua19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUzMDMsMTEgKzUzNjgsMTMgQEAKIAogCQlpZiAoYWxsb3dlZF9jaHVua19hbGxvYykgewogCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCi0JCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKKwkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsCisJCQkJCSAgICAgQ0hVTktfQUxMT0NfTElNSVRFRCk7CiAJCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKIAkJCWRvbmVfY2h1bmtfYWxsb2MgPSAxOwotCQl9IGVsc2UgaWYgKCFkb25lX2NodW5rX2FsbG9jKSB7Ci0JCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDE7CisJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MgJiYKKwkJCSAgIHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID09IENIVU5LX0FMTE9DX05PX0ZPUkNFKSB7CisJCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IENIVU5LX0FMTE9DX0xJTUlURUQ7CiAJCX0KIAogCQlpZiAobG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSkgewpAQCAtNTM5Myw3ICs1NDYwLDggQEAKIAkgKi8KIAlpZiAoZW1wdHlfc2l6ZSB8fCByb290LT5yZWZfY293cykKIAkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJCSAgICAgbnVtX2J5dGVzICsgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAwKTsKKwkJCQkgICAgIG51bV9ieXRlcyArIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwKKwkJCQkgICAgIENIVU5LX0FMTE9DX05PX0ZPUkNFKTsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJcmV0ID0gZmluZF9mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgbnVtX2J5dGVzLCBlbXB0eV9zaXplLApAQCAtNTQwNSw3ICs1NDczLDcgQEAKIAkJbnVtX2J5dGVzID0gbnVtX2J5dGVzICYgfihyb290LT5zZWN0b3JzaXplIC0gMSk7CiAJCW51bV9ieXRlcyA9IG1heChudW1fYnl0ZXMsIG1pbl9hbGxvY19zaXplKTsKIAkJZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJICAgICAgIG51bV9ieXRlcywgZGF0YSwgMSk7CisJCQkgICAgICAgbnVtX2J5dGVzLCBkYXRhLCBDSFVOS19BTExPQ19GT1JDRSk7CiAJCWdvdG8gYWdhaW47CiAJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBidHJmc190ZXN0X29wdChyb290LCBFTk9TUENfREVCVUcpKSB7CkBAIC03OTkxLDYgKzgwNTksMTAgQEAKIAkJCQl1NjQgZ3JvdXBfc3RhcnQgPSBncm91cC0+a2V5Lm9iamVjdGlkOwogCQkJCW5ld19leHRlbnRzID0ga21hbGxvYyhzaXplb2YoKm5ld19leHRlbnRzKSwKIAkJCQkJCSAgICAgIEdGUF9OT0ZTKTsKKwkJCQlpZiAoIW5ld19leHRlbnRzKSB7CisJCQkJCXJldCA9IC1FTk9NRU07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCQlucl9leHRlbnRzID0gMTsKIAkJCQlyZXQgPSBnZXRfbmV3X2xvY2F0aW9ucyhyZWxvY19pbm9kZSwKIAkJCQkJCQlleHRlbnRfa2V5LApAQCAtODEwOSwxMyArODE4MSwxNSBAQAogCiAJYWxsb2NfZmxhZ3MgPSB1cGRhdGVfYmxvY2tfZ3JvdXBfZmxhZ3Mocm9vdCwgY2FjaGUtPmZsYWdzKTsKIAlpZiAoYWxsb2NfZmxhZ3MgIT0gY2FjaGUtPmZsYWdzKQotCQlkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJCWRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCAyICogMTAyNCAqIDEwMjQsIGFsbG9jX2ZsYWdzLAorCQkJICAgICAgIENIVU5LX0FMTE9DX0ZPUkNFKTsKIAogCXJldCA9IHNldF9ibG9ja19ncm91cF9ybyhjYWNoZSk7CiAJaWYgKCFyZXQpCiAJCWdvdG8gb3V0OwogCWFsbG9jX2ZsYWdzID0gZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgY2FjaGUtPnNwYWNlX2luZm8tPmZsYWdzKTsKLQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIDIgKiAxMDI0ICogMTAyNCwgYWxsb2NfZmxhZ3MsCisJCQkgICAgIENIVU5LX0FMTE9DX0ZPUkNFKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJcmV0ID0gc2V0X2Jsb2NrX2dyb3VwX3JvKGNhY2hlKTsKQEAgLTgxMjgsNyArODIwMiw4IEBACiAJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0eXBlKQogewogCXU2NCBhbGxvY19mbGFncyA9IGdldF9hbGxvY19wcm9maWxlKHJvb3QsIHR5cGUpOwotCXJldHVybiBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJcmV0dXJuIGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCAyICogMTAyNCAqIDEwMjQsIGFsbG9jX2ZsYWdzLAorCQkJICAgICAgQ0hVTktfQUxMT0NfRk9SQ0UpOwogfQogCiAvKgpAQCAtODc4MSwyMyArODg1NiwzOCBAQAogaW50IGJ0cmZzX2luaXRfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbykKIHsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfc3VwZXJfYmxvY2sgKmRpc2tfc3VwZXI7CisJdTY0IGZlYXR1cmVzOworCXU2NCBmbGFnczsKKwlpbnQgbWl4ZWQgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBCVFJGU19CTE9DS19HUk9VUF9TWVNURU0sIDAsIDAsCi0JCQkJCQkJCSAmc3BhY2VfaW5mbyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlkaXNrX3N1cGVyID0gJmZzX2luZm8tPnN1cGVyX2NvcHk7CisJaWYgKCFidHJmc19zdXBlcl9yb290KGRpc2tfc3VwZXIpKQorCQlyZXR1cm4gMTsKIAotCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIEJUUkZTX0JMT0NLX0dST1VQX01FVEFEQVRBLCAwLCAwLAotCQkJCQkJCQkgJnNwYWNlX2luZm8pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZmVhdHVyZXMgPSBidHJmc19zdXBlcl9pbmNvbXBhdF9mbGFncyhkaXNrX3N1cGVyKTsKKwlpZiAoZmVhdHVyZXMgJiBCVFJGU19GRUFUVVJFX0lOQ09NUEFUX01JWEVEX0dST1VQUykKKwkJbWl4ZWQgPSAxOwogCi0JcmV0ID0gdXBkYXRlX3NwYWNlX2luZm8oZnNfaW5mbywgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSwgMCwgMCwKLQkJCQkJCQkJICZzcGFjZV9pbmZvKTsKKwlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX1NZU1RFTTsKKwlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCisJaWYgKG1peGVkKSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEgfCBCVFJGU19CTE9DS19HUk9VUF9EQVRBOworCQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOworCX0gZWxzZSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX0RBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMjBkZGIyOC4uYmE0MWRhNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTY5MCw2ICs2OTAsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHVuY2FjaGVfc3RhdGUoc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9wdHIpCit7CisJaWYgKGNhY2hlZF9wdHIgJiYgKCpjYWNoZWRfcHRyKSkgeworCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSA9ICpjYWNoZWRfcHRyOworCQkqY2FjaGVkX3B0ciA9IE5VTEw7CisJCWZyZWVfZXh0ZW50X3N0YXRlKHN0YXRlKTsKKwl9Cit9CisKIC8qCiAgKiBzZXQgc29tZSBiaXRzIG9uIGEgcmFuZ2UgaW4gdGhlIHRyZWUuICBUaGlzIG1heSByZXF1aXJlIGFsbG9jYXRpb25zIG9yCiAgKiBzbGVlcGluZywgc28gdGhlIGdmcCBtYXNrIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hhdCBpcyBhbGxvd2VkLgpAQCAtOTQwLDEwICs5NDksMTAgQEAKIH0KIAogaW50IHNldF9leHRlbnRfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQlnZnBfdCBtYXNrKQorCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9zdGF0ZSwgZ2ZwX3QgbWFzaykKIHsKLQlyZXR1cm4gc2V0X2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX1VQVE9EQVRFLCAwLCBOVUxMLAotCQkJICAgICAgTlVMTCwgbWFzayk7CisJcmV0dXJuIHNldF9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9VUFRPREFURSwgMCwKKwkJCSAgICAgIE5VTEwsIGNhY2hlZF9zdGF0ZSwgbWFzayk7CiB9CiAKIHN0YXRpYyBpbnQgY2xlYXJfZXh0ZW50X3VwdG9kYXRlKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LApAQCAtMTAxMiw4ICsxMDIxLDcgQEAKIAkJCQltYXNrKTsKIH0KIAotaW50IHVubG9ja19leHRlbnQoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCSAgZ2ZwX3QgbWFzaykKK2ludCB1bmxvY2tfZXh0ZW50KHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBnZnBfdCBtYXNrKQogewogCXJldHVybiBjbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9MT0NLRUQsIDEsIDAsIE5VTEwsCiAJCQkJbWFzayk7CkBAIC0xNzM1LDYgKzE3NDMsOSBAQAogCiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisJCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlOworCiAJCXRyZWUgPSAmQlRSRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKIAogCQlzdGFydCA9ICgodTY0KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsKQEAgLTE3NDksOSArMTc2MCwyMCBAQAogCQlpZiAoKytidmVjIDw9IGJ2ZWNfZW5kKQogCQkJcHJlZmV0Y2h3KCZidmVjLT5idl9wYWdlLT5mbGFncyk7CiAKKwkJc3Bpbl9sb2NrKCZ0cmVlLT5sb2NrKTsKKwkJc3RhdGUgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXRfc3RhdGUodHJlZSwgc3RhcnQsIEVYVEVOVF9MT0NLRUQpOworCQlpZiAoc3RhdGUgJiYgc3RhdGUtPnN0YXJ0ID09IHN0YXJ0KSB7CisJCQkvKgorCQkJICogdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgc3RhdGUsIHVubG9jayB3aWxsIGRyb3AKKwkJCSAqIHRoZSByZWYKKwkJCSAqLworCQkJY2FjaGVfc3RhdGUoc3RhdGUsICZjYWNoZWQpOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0cmVlLT5sb2NrKTsKKwogCQlpZiAodXB0b2RhdGUgJiYgdHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+cmVhZHBhZ2VfZW5kX2lvX2hvb2spIHsKIAkJCXJldCA9IHRyZWUtPm9wcy0+cmVhZHBhZ2VfZW5kX2lvX2hvb2socGFnZSwgc3RhcnQsIGVuZCwKLQkJCQkJCQkgICAgICBOVUxMKTsKKwkJCQkJCQkgICAgICBzdGF0ZSk7CiAJCQlpZiAocmV0KQogCQkJCXVwdG9kYXRlID0gMDsKIAkJfQpAQCAtMTc2NCwxNSArMTc4NiwxNiBAQAogCQkJCQl0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAkJCQlpZiAoZXJyKQogCQkJCQl1cHRvZGF0ZSA9IDA7CisJCQkJdW5jYWNoZV9zdGF0ZSgmY2FjaGVkKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQogCiAJCWlmICh1cHRvZGF0ZSkgewotCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBzdGFydCwgZW5kLAorCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBzdGFydCwgZW5kLCAmY2FjaGVkLAogCQkJCQkgICAgR0ZQX0FUT01JQyk7CiAJCX0KLQkJdW5sb2NrX2V4dGVudCh0cmVlLCBzdGFydCwgZW5kLCBHRlBfQVRPTUlDKTsKKwkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgc3RhcnQsIGVuZCwgJmNhY2hlZCwgR0ZQX0FUT01JQyk7CiAKIAkJaWYgKHdob2xlX3BhZ2UpIHsKIAkJCWlmICh1cHRvZGF0ZSkgewpAQCAtMTgxMSw2ICsxODM0LDcgQEAKIAogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOworCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpjYWNoZWQgPSBOVUxMOwogCQl0cmVlID0gJkJUUkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCktPmlvX3RyZWU7CiAKIAkJc3RhcnQgPSAoKHU2NClwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArCkBAIC0xODIxLDEzICsxODQ1LDE0IEBACiAJCQlwcmVmZXRjaHcoJmJ2ZWMtPmJ2X3BhZ2UtPmZsYWdzKTsKIAogCQlpZiAodXB0b2RhdGUpIHsKLQkJCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgc3RhcnQsIGVuZCwgR0ZQX0FUT01JQyk7CisJCQlzZXRfZXh0ZW50X3VwdG9kYXRlKHRyZWUsIHN0YXJ0LCBlbmQsICZjYWNoZWQsCisJCQkJCSAgICBHRlBfQVRPTUlDKTsKIAkJfSBlbHNlIHsKIAkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwogCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCQl9CiAKLQkJdW5sb2NrX2V4dGVudCh0cmVlLCBzdGFydCwgZW5kLCBHRlBfQVRPTUlDKTsKKwkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgc3RhcnQsIGVuZCwgJmNhY2hlZCwgR0ZQX0FUT01JQyk7CiAKIAl9IHdoaWxlIChidmVjID49IGJpby0+YmlfaW9fdmVjKTsKIApAQCAtMjAxNiwxNCArMjA0MSwxNyBAQAogCXdoaWxlIChjdXIgPD0gZW5kKSB7CiAJCWlmIChjdXIgPj0gbGFzdF9ieXRlKSB7CiAJCQljaGFyICp1c2VycGFnZTsKKwkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisKIAkJCWlvc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRSAtIHBhZ2Vfb2Zmc2V0OwogCQkJdXNlcnBhZ2UgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJCQltZW1zZXQodXNlcnBhZ2UgKyBwYWdlX29mZnNldCwgMCwgaW9zaXplKTsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyh1c2VycGFnZSwgS01fVVNFUjApOwogCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBjdXIsIGN1ciArIGlvc2l6ZSAtIDEsCi0JCQkJCSAgICBHRlBfTk9GUyk7Ci0JCQl1bmxvY2tfZXh0ZW50KHRyZWUsIGN1ciwgY3VyICsgaW9zaXplIC0gMSwgR0ZQX05PRlMpOworCQkJCQkgICAgJmNhY2hlZCwgR0ZQX05PRlMpOworCQkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgY3VyLCBjdXIgKyBpb3NpemUgLSAxLAorCQkJCQkgICAgICZjYWNoZWQsIEdGUF9OT0ZTKTsKIAkJCWJyZWFrOwogCQl9CiAJCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgcGFnZSwgcGFnZV9vZmZzZXQsIGN1ciwKQEAgLTIwNjMsMTQgKzIwOTEsMTcgQEAKIAkJLyogd2UndmUgZm91bmQgYSBob2xlLCBqdXN0IHplcm8gYW5kIGdvIG9uICovCiAJCWlmIChibG9ja19zdGFydCA9PSBFWFRFTlRfTUFQX0hPTEUpIHsKIAkJCWNoYXIgKnVzZXJwYWdlOworCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqY2FjaGVkID0gTlVMTDsKKwogCQkJdXNlcnBhZ2UgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJCQltZW1zZXQodXNlcnBhZ2UgKyBwYWdlX29mZnNldCwgMCwgaW9zaXplKTsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyh1c2VycGFnZSwgS01fVVNFUjApOwogCiAJCQlzZXRfZXh0ZW50X3VwdG9kYXRlKHRyZWUsIGN1ciwgY3VyICsgaW9zaXplIC0gMSwKLQkJCQkJICAgIEdGUF9OT0ZTKTsKLQkJCXVubG9ja19leHRlbnQodHJlZSwgY3VyLCBjdXIgKyBpb3NpemUgLSAxLCBHRlBfTk9GUyk7CisJCQkJCSAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CisJCQl1bmxvY2tfZXh0ZW50X2NhY2hlZCh0cmVlLCBjdXIsIGN1ciArIGlvc2l6ZSAtIDEsCisJCQkgICAgICAgICAgICAgICAgICAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CiAJCQljdXIgPSBjdXIgKyBpb3NpemU7CiAJCQlwYWdlX29mZnNldCArPSBpb3NpemU7CiAJCQljb250aW51ZTsKQEAgLTI2NTAsNyArMjY4MSw3IEBACiAJCXByZWZldGNodygmcGFnZS0+ZmxhZ3MpOwogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAkJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywKLQkJCQkJcGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpKSB7CisJCQkJCXBhZ2UtPmluZGV4LCBHRlBfTk9GUykpIHsKIAkJCV9fZXh0ZW50X3JlYWRfZnVsbF9wYWdlKHRyZWUsIHBhZ2UsIGdldF9leHRlbnQsCiAJCQkJCQkmYmlvLCAwLCAmYmlvX2ZsYWdzKTsKIAkJfQpAQCAtMjc4OSw5ICsyODIwLDEyIEBACiAJCQlpb2NvdW50Kys7CiAJCQlibG9ja19zdGFydCA9IGJsb2NrX3N0YXJ0ICsgaW9zaXplOwogCQl9IGVsc2UgewotCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBibG9ja19zdGFydCwgY3VyX2VuZCwKKwkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisKKwkJCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgYmxvY2tfc3RhcnQsIGN1cl9lbmQsICZjYWNoZWQsCiAJCQkJCSAgICBHRlBfTk9GUyk7Ci0JCQl1bmxvY2tfZXh0ZW50KHRyZWUsIGJsb2NrX3N0YXJ0LCBjdXJfZW5kLCBHRlBfTk9GUyk7CisJCQl1bmxvY2tfZXh0ZW50X2NhY2hlZCh0cmVlLCBibG9ja19zdGFydCwgY3VyX2VuZCwKKwkJCQkJICAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CiAJCQlibG9ja19zdGFydCA9IGN1cl9lbmQgKyAxOwogCQl9CiAJCXBhZ2Vfb2Zmc2V0ID0gYmxvY2tfc3RhcnQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CkBAIC0zNDU3LDcgKzM0OTEsNyBAQAogCW51bV9wYWdlcyA9IG51bV9leHRlbnRfcGFnZXMoZWItPnN0YXJ0LCBlYi0+bGVuKTsKIAogCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgZWItPnN0YXJ0LCBlYi0+c3RhcnQgKyBlYi0+bGVuIC0gMSwKLQkJCSAgICBHRlBfTk9GUyk7CisJCQkgICAgTlVMTCwgR0ZQX05PRlMpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlwYWdlID0gZXh0ZW50X2J1ZmZlcl9wYWdlKGViLCBpKTsKIAkJaWYgKChpID09IDAgJiYgKGViLT5zdGFydCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSkpIHx8CkBAIC0zODg1LDYgKzM5MTksMTIgQEAKIAlrdW5tYXBfYXRvbWljKGRzdF9rYWRkciwgS01fVVNFUjApOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlYXNfb3ZlcmxhcCh1bnNpZ25lZCBsb25nIHNyYywgdW5zaWduZWQgbG9uZyBkc3QsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgZGlzdGFuY2UgPSAoc3JjID4gZHN0KSA/IHNyYyAtIGRzdCA6IGRzdCAtIHNyYzsKKwlyZXR1cm4gZGlzdGFuY2UgPCBsZW47Cit9CisKIHN0YXRpYyB2b2lkIGNvcHlfcGFnZXMoc3RydWN0IHBhZ2UgKmRzdF9wYWdlLCBzdHJ1Y3QgcGFnZSAqc3JjX3BhZ2UsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGRzdF9vZmYsIHVuc2lnbmVkIGxvbmcgc3JjX29mZiwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQpAQCAtMzg5MiwxMCArMzkzMiwxMiBAQAogCWNoYXIgKmRzdF9rYWRkciA9IGttYXBfYXRvbWljKGRzdF9wYWdlLCBLTV9VU0VSMCk7CiAJY2hhciAqc3JjX2thZGRyOwogCi0JaWYgKGRzdF9wYWdlICE9IHNyY19wYWdlKQorCWlmIChkc3RfcGFnZSAhPSBzcmNfcGFnZSkgewogCQlzcmNfa2FkZHIgPSBrbWFwX2F0b21pYyhzcmNfcGFnZSwgS01fVVNFUjEpOwotCWVsc2UKKwl9IGVsc2UgewogCQlzcmNfa2FkZHIgPSBkc3Rfa2FkZHI7CisJCUJVR19PTihhcmVhc19vdmVybGFwKHNyY19vZmYsIGRzdF9vZmYsIGxlbikpOworCX0KIAogCW1lbWNweShkc3Rfa2FkZHIgKyBkc3Rfb2ZmLCBzcmNfa2FkZHIgKyBzcmNfb2ZmLCBsZW4pOwogCWt1bm1hcF9hdG9taWMoZHN0X2thZGRyLCBLTV9VU0VSMCk7CkBAIC0zOTcwLDcgKzQwMTIsNyBAQAogCQkgICAgICAgImxlbiAlbHUgbGVuICVsdVxuIiwgZHN0X29mZnNldCwgbGVuLCBkc3QtPmxlbik7CiAJCUJVR19PTigxKTsKIAl9Ci0JaWYgKGRzdF9vZmZzZXQgPCBzcmNfb2Zmc2V0KSB7CisJaWYgKCFhcmVhc19vdmVybGFwKHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIGxlbikpIHsKIAkJbWVtY3B5X2V4dGVudF9idWZmZXIoZHN0LCBkc3Rfb2Zmc2V0LCBzcmNfb2Zmc2V0LCBsZW4pOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCBmNjJjNTQ0Mi4uYWYyZDcxNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmgKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogCQkgICBpbnQgYml0cywgaW50IGV4Y2x1c2l2ZV9iaXRzLCB1NjQgKmZhaWxlZF9zdGFydCwKIAkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9zdGF0ZSwgZ2ZwX3QgbWFzayk7CiBpbnQgc2V0X2V4dGVudF91cHRvZGF0ZShzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsIHU2NCBzdGFydCwgdTY0IGVuZCwKLQkJCWdmcF90IG1hc2spOworCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9zdGF0ZSwgZ2ZwX3QgbWFzayk7CiBpbnQgc2V0X2V4dGVudF9uZXcoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCiAJCSAgIGdmcF90IG1hc2spOwogaW50IHNldF9leHRlbnRfZGlydHkoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggMmI2YzEyZS4uYTI0YTNmMiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAgKiBJbnNlcnQgQGVtIGludG8gQHRyZWUgb3IgcGVyZm9ybSBhIHNpbXBsZSBmb3J3YXJkL2JhY2t3YXJkIG1lcmdlIHdpdGgKICAqIGV4aXN0aW5nIG1hcHBpbmdzLiAgVGhlIGV4dGVudF9tYXAgc3RydWN0IHBhc3NlZCBpbiB3aWxsIGJlIGluc2VydGVkCiAgKiBpbnRvIHRoZSB0cmVlIGRpcmVjdGx5LCB3aXRoIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRha2VuLCBvciBhCi0gKiByZWZlcmVuY2UgZHJvcHBlZCBpZiB0aGUgbWVyZ2UgYXR0ZW1wdCB3YXMgc3VjY2Vzc2Z1bGwuCisgKiByZWZlcmVuY2UgZHJvcHBlZCBpZiB0aGUgbWVyZ2UgYXR0ZW1wdCB3YXMgc3VjY2Vzc2Z1bC4KICAqLwogaW50IGFkZF9leHRlbnRfbWFwcGluZyhzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICp0cmVlLAogCQkgICAgICAgc3RydWN0IGV4dGVudF9tYXAgKmVtKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IDY1NmJjMGEuLjc1ODk5YTAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogLyoKICAqIHVubG9ja3MgcGFnZXMgYWZ0ZXIgYnRyZnNfZmlsZV93cml0ZSBpcyBkb25lIHdpdGggdGhlbQogICovCi1zdGF0aWMgbm9pbmxpbmUgdm9pZCBidHJmc19kcm9wX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBudW1fcGFnZXMpCit2b2lkIGJ0cmZzX2Ryb3BfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG51bV9wYWdlcykKIHsKIAlzaXplX3QgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKQEAgLTEyNywxNiArMTI3LDEzIEBACiAgKiB0aGlzIGFsc28gbWFrZXMgdGhlIGRlY2lzaW9uIGFib3V0IGNyZWF0aW5nIGFuIGlubGluZSBleHRlbnQgdnMKICAqIGRvaW5nIHJlYWwgZGF0YSBleHRlbnRzLCBtYXJraW5nIHBhZ2VzIGRpcnR5IGFuZCBkZWxhbGxvYyBhcyByZXF1aXJlZC4KICAqLwotc3RhdGljIG5vaW5saW5lIGludCBkaXJ0eV9hbmRfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQkgICAgc3RydWN0IHBhZ2UgKipwYWdlcywKLQkJCQkJICAgIHNpemVfdCBudW1fcGFnZXMsCi0JCQkJCSAgICBsb2ZmX3QgcG9zLAotCQkJCQkgICAgc2l6ZV90IHdyaXRlX2J5dGVzKQoraW50IGJ0cmZzX2RpcnR5X3BhZ2VzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnVtX3BhZ2VzLAorCQkgICAgICBsb2ZmX3QgcG9zLCBzaXplX3Qgd3JpdGVfYnl0ZXMsCisJCSAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKipjYWNoZWQpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IGk7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZkZW50cnkoZmlsZSktPmRfaW5vZGU7CiAJdTY0IG51bV9ieXRlczsKIAl1NjQgc3RhcnRfcG9zOwogCXU2NCBlbmRfb2ZfbGFzdF9ibG9jazsKQEAgLTE0OSw3ICsxNDYsNyBAQAogCiAJZW5kX29mX2xhc3RfYmxvY2sgPSBzdGFydF9wb3MgKyBudW1fYnl0ZXMgLSAxOwogCWVyciA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHN0YXJ0X3BvcywgZW5kX29mX2xhc3RfYmxvY2ssCi0JCQkJCU5VTEwpOworCQkJCQljYWNoZWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTkwNiw3ICs5MDMsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9pbmRleDsKIAlzaXplX3QgbnVtX3dyaXR0ZW4gPSAwOwogCWludCBucnB0cnM7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCW5ycHRycyA9IG1pbigoaW92X2l0ZXJfY291bnQoaSkgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSAvCiAJCSAgICAgUEFHRV9DQUNIRV9TSVpFLCBQQUdFX0NBQ0hFX1NJWkUgLwpAQCAtOTkyLDkgKzk4OSw5IEBACiAJCX0KIAogCQlpZiAoY29waWVkID4gMCkgewotCQkJcmV0ID0gZGlydHlfYW5kX3JlbGVhc2VfcGFnZXMocm9vdCwgZmlsZSwgcGFnZXMsCi0JCQkJCQkgICAgICBkaXJ0eV9wYWdlcywgcG9zLAotCQkJCQkJICAgICAgY29waWVkKTsKKwkJCXJldCA9IGJ0cmZzX2RpcnR5X3BhZ2VzKHJvb3QsIGlub2RlLCBwYWdlcywKKwkJCQkJCWRpcnR5X3BhZ2VzLCBwb3MsIGNvcGllZCwKKwkJCQkJCU5VTEwpOwogCQkJaWYgKHJldCkgewogCQkJCWJ0cmZzX2RlbGFsbG9jX3JlbGVhc2Vfc3BhY2UoaW5vZGUsCiAJCQkJCWRpcnR5X3BhZ2VzIDw8IFBBR0VfQ0FDSEVfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDAwMzc0MjcuLjYzNzMxYTEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJmcmVlLXNwYWNlLWNhY2hlLmgiCiAjaW5jbHVkZSAidHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJkaXNrLWlvLmgiCisjaW5jbHVkZSAiZXh0ZW50X2lvLmgiCiAKICNkZWZpbmUgQklUU19QRVJfQklUTUFQCQkoUEFHRV9DQUNIRV9TSVpFICogOCkKICNkZWZpbmUgTUFYX0NBQ0hFX0JZVEVTX1BFUl9HSUcJKDMyICogMTAyNCkKQEAgLTgxLDYgKzgyLDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAJfQogCisJaW5vZGUtPmlfbWFwcGluZy0+ZmxhZ3MgJj0gfl9fR0ZQX0ZTOworCiAJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+bG9jayk7CiAJaWYgKCFyb290LT5mc19pbmZvLT5jbG9zaW5nKSB7CiAJCWJsb2NrX2dyb3VwLT5pbm9kZSA9IGlncmFiKGlub2RlKTsKQEAgLTIyMiw2ICsyMjUsNyBAQAogCXU2NCBudW1fZW50cmllczsKIAl1NjQgbnVtX2JpdG1hcHM7CiAJdTY0IGdlbmVyYXRpb247CisJdTY0IHVzZWQgPSBidHJmc19ibG9ja19ncm91cF91c2VkKCZibG9ja19ncm91cC0+aXRlbSk7CiAJdTMyIGN1cl9jcmMgPSB+KHUzMikwOwogCXBnb2ZmX3QgaW5kZXggPSAwOwogCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9vZmZzZXQ7CkBAIC00NjcsNiArNDcxLDE3IEBACiAJCWluZGV4Kys7CiAJfQogCisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwlpZiAoYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2UgIT0gKGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0IC0gdXNlZCAtCisJCQkJCWJsb2NrX2dyb3VwLT5ieXRlc19zdXBlcikpIHsKKwkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCQlwcmludGsoS0VSTl9FUlIgImJsb2NrIGdyb3VwICVsbHUgaGFzIGFuIHdyb25nIGFtb3VudCBvZiBmcmVlICIKKwkJICAgICAgICJzcGFjZVxuIiwgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCk7CisJCXJldCA9IDA7CisJCWdvdG8gZnJlZV9jYWNoZTsKKwl9CisJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCiAJcmV0ID0gMTsKIG91dDoKIAlrZnJlZShjaGVja3N1bXMpOwpAQCAtNDkzLDE4ICs1MDgsMjMgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCByYl9ub2RlICpub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm47CisJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpjYWNoZWRfc3RhdGUgPSBOVUxMOworCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIgPSBOVUxMOworCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdW5waW4gPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgYml0bWFwX2xpc3Q7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CisJdTY0IHN0YXJ0LCBlbmQsIGxlbjsKIAl1NjQgYnl0ZXMgPSAwOwogCXUzMiAqY3JjLCAqY2hlY2tzdW1zOwotCXBnb2ZmX3QgaW5kZXggPSAwLCBsYXN0X2luZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2Vfb2Zmc2V0OwotCWludCBudW1fY2hlY2tzdW1zOworCWludCBpbmRleCA9IDAsIG51bV9wYWdlcyA9IDA7CiAJaW50IGVudHJpZXMgPSAwOwogCWludCBiaXRtYXBzID0gMDsKIAlpbnQgcmV0ID0gMDsKKwlib29sIG5leHRfcGFnZSA9IGZhbHNlOworCWJvb2wgb3V0X29mX3NwYWNlID0gZmFsc2U7CiAKIAlyb290ID0gcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290OwogCkBAIC01MzIsMjQgKzU1Miw0MyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlsYXN0X2luZGV4ID0gKGlfc2l6ZV9yZWFkKGlub2RlKSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJbnVtX3BhZ2VzID0gKGlfc2l6ZV9yZWFkKGlub2RlKSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+CisJCVBBR0VfQ0FDSEVfU0hJRlQ7CiAJZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKIAlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGlub2RlLT5pX3NpemUgJgogCQkJCSB+KHJvb3QtPnNlY3RvcnNpemUgLSAxKSwgKHU2NCktMSk7CiAKIAkvKiBXZSBuZWVkIGEgY2hlY2tzdW0gcGVyIHBhZ2UuICovCi0JbnVtX2NoZWNrc3VtcyA9IGlfc2l6ZV9yZWFkKGlub2RlKSAvIFBBR0VfQ0FDSEVfU0laRTsKLQljcmMgPSBjaGVja3N1bXMgID0ga3phbGxvYyhzaXplb2YodTMyKSAqIG51bV9jaGVja3N1bXMsIEdGUF9OT0ZTKTsKKwljcmMgPSBjaGVja3N1bXMgPSBremFsbG9jKHNpemVvZih1MzIpICogbnVtX3BhZ2VzLCBHRlBfTk9GUyk7CiAJaWYgKCFjcmMpIHsKIAkJaXB1dChpbm9kZSk7CiAJCXJldHVybiAwOwogCX0KIAorCXBhZ2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBudW1fcGFnZXMsIEdGUF9OT0ZTKTsKKwlpZiAoIXBhZ2VzKSB7CisJCWtmcmVlKGNyYyk7CisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBTaW5jZSB0aGUgZmlyc3QgcGFnZSBoYXMgYWxsIG9mIG91ciBjaGVja3N1bXMgYW5kIG91ciBnZW5lcmF0aW9uIHdlCiAJICogbmVlZCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSBwYWdlIHRoYXQgd2UgY2FuIHN0YXJ0IHdyaXRpbmcKIAkgKiBvdXIgZW50cmllcy4KIAkgKi8KLQlmaXJzdF9wYWdlX29mZnNldCA9IChzaXplb2YodTMyKSAqIG51bV9jaGVja3N1bXMpICsgc2l6ZW9mKHU2NCk7CisJZmlyc3RfcGFnZV9vZmZzZXQgPSAoc2l6ZW9mKHUzMikgKiBudW1fcGFnZXMpICsgc2l6ZW9mKHU2NCk7CisKKwkvKiBHZXQgdGhlIGNsdXN0ZXIgZm9yIHRoaXMgYmxvY2tfZ3JvdXAgaWYgaXQgZXhpc3RzICovCisJaWYgKCFsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+Y2x1c3Rlcl9saXN0KSkKKwkJY2x1c3RlciA9IGxpc3RfZW50cnkoYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdC5uZXh0LAorCQkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciwKKwkJCQkgICAgIGJsb2NrX2dyb3VwX2xpc3QpOworCisJLyoKKwkgKiBXZSBzaG91bGRuJ3QgaGF2ZSBzd2l0Y2hlZCB0aGUgcGlubmVkIGV4dGVudHMgeWV0IHNvIHRoaXMgaXMgdGhlCisJICogcmlnaHQgb25lCisJICovCisJdW5waW4gPSByb290LT5mc19pbmZvLT5waW5uZWRfZXh0ZW50czsKIAogCS8qCiAJICogTG9jayBhbGwgcGFnZXMgZmlyc3Qgc28gd2UgY2FuIGxvY2sgdGhlIGV4dGVudCBzYWZlbHkuCkBAIC01NTksMjAgKzU5OCwxOCBAQAogCSAqIGFmdGVyIGZpbmRfZ2V0X3BhZ2UgYXQgdGhpcyBwb2ludC4gIEp1c3QgcHV0dGluZyB0aGlzIGhlcmUgc28gcGVvcGxlCiAJICoga25vdyBhbmQgZG9uJ3QgZnJlYWsgb3V0LgogCSAqLwotCXdoaWxlIChpbmRleCA8PSBsYXN0X2luZGV4KSB7CisJd2hpbGUgKGluZGV4IDwgbnVtX3BhZ2VzKSB7CiAJCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOwogCQlpZiAoIXBhZ2UpIHsKLQkJCXBnb2ZmX3QgaSA9IDA7CisJCQlpbnQgaTsKIAotCQkJd2hpbGUgKGkgPCBpbmRleCkgewotCQkJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGkpOwotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQkJaSsrOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZXNbaV0pOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CiAJCQl9CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CisJCXBhZ2VzW2luZGV4XSA9IHBhZ2U7CiAJCWluZGV4Kys7CiAJfQogCkBAIC01ODAsNiArNjE3LDEyIEBACiAJbG9ja19leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIDAsIGlfc2l6ZV9yZWFkKGlub2RlKSAtIDEsCiAJCQkgMCwgJmNhY2hlZF9zdGF0ZSwgR0ZQX05PRlMpOwogCisJLyoKKwkgKiBXaGVuIHNlYXJjaGluZyBmb3IgcGlubmVkIGV4dGVudHMsIHdlIG5lZWQgdG8gc3RhcnQgYXQgb3VyIHN0YXJ0CisJICogb2Zmc2V0LgorCSAqLworCXN0YXJ0ID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKKwogCS8qIFdyaXRlIG91dCB0aGUgZXh0ZW50IGVudHJpZXMgKi8KIAlkbyB7CiAJCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2VudHJ5ICplbnRyeTsKQEAgLTU4NywxOCArNjMwLDI1IEBACiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKIAkJdW5zaWduZWQgbG9uZyBzdGFydF9vZmZzZXQgPSAwOwogCisJCW5leHRfcGFnZSA9IGZhbHNlOworCiAJCWlmIChpbmRleCA9PSAwKSB7CiAJCQlzdGFydF9vZmZzZXQgPSBmaXJzdF9wYWdlX29mZnNldDsKIAkJCW9mZnNldCA9IHN0YXJ0X29mZnNldDsKIAkJfQogCi0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4KTsKKwkJaWYgKGluZGV4ID49IG51bV9wYWdlcykgeworCQkJb3V0X29mX3NwYWNlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJcGFnZSA9IHBhZ2VzW2luZGV4XTsKIAogCQlhZGRyID0ga21hcChwYWdlKTsKIAkJZW50cnkgPSBhZGRyICsgc3RhcnRfb2Zmc2V0OwogCiAJCW1lbXNldChhZGRyLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOwotCQl3aGlsZSAoMSkgeworCQl3aGlsZSAobm9kZSAmJiAhbmV4dF9wYWdlKSB7CiAJCQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZTsKIAogCQkJZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwpAQCAtNjE0LDEyICs2NjQsNDkgQEAKIAkJCQllbnRyeS0+dHlwZSA9IEJUUkZTX0ZSRUVfU1BBQ0VfRVhURU5UOwogCQkJfQogCQkJbm9kZSA9IHJiX25leHQobm9kZSk7Ci0JCQlpZiAoIW5vZGUpCi0JCQkJYnJlYWs7CisJCQlpZiAoIW5vZGUgJiYgY2x1c3RlcikgeworCQkJCW5vZGUgPSByYl9maXJzdCgmY2x1c3Rlci0+cm9vdCk7CisJCQkJY2x1c3RlciA9IE5VTEw7CisJCQl9CiAJCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2VudHJ5KTsKIAkJCWlmIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfZW50cnkpID49CiAJCQkgICAgUEFHRV9DQUNIRV9TSVpFKQorCQkJCW5leHRfcGFnZSA9IHRydWU7CisJCQllbnRyeSsrOworCQl9CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBhZGQgYW55IHBpbm5lZCBleHRlbnRzIHRvIG91ciBmcmVlIHNwYWNlIGNhY2hlCisJCSAqIHNvIHdlIGRvbid0IGxlYWsgdGhlIHNwYWNlCisJCSAqLworCQl3aGlsZSAoIW5leHRfcGFnZSAmJiAoc3RhcnQgPCBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkICsKKwkJCQkgICAgICBibG9ja19ncm91cC0+a2V5Lm9mZnNldCkpIHsKKwkJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdCh1bnBpbiwgc3RhcnQsICZzdGFydCwgJmVuZCwKKwkJCQkJCSAgICBFWFRFTlRfRElSVFkpOworCQkJaWYgKHJldCkgeworCQkJCXJldCA9IDA7CiAJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIFRoaXMgcGlubmVkIGV4dGVudCBpcyBvdXQgb2Ygb3VyIHJhbmdlICovCisJCQlpZiAoc3RhcnQgPj0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCArCisJCQkgICAgYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpCisJCQkJYnJlYWs7CisKKwkJCWxlbiA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQgKworCQkJCWJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0IC0gc3RhcnQ7CisJCQlsZW4gPSBtaW4obGVuLCBlbmQgKyAxIC0gc3RhcnQpOworCisJCQllbnRyaWVzKys7CisJCQllbnRyeS0+b2Zmc2V0ID0gY3B1X3RvX2xlNjQoc3RhcnQpOworCQkJZW50cnktPmJ5dGVzID0gY3B1X3RvX2xlNjQobGVuKTsKKwkJCWVudHJ5LT50eXBlID0gQlRSRlNfRlJFRV9TUEFDRV9FWFRFTlQ7CisKKwkJCXN0YXJ0ID0gZW5kICsgMTsKKwkJCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfZW50cnkpOworCQkJaWYgKG9mZnNldCArIHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9lbnRyeSkgPj0KKwkJCSAgICBQQUdFX0NBQ0hFX1NJWkUpCisJCQkJbmV4dF9wYWdlID0gdHJ1ZTsKIAkJCWVudHJ5Kys7CiAJCX0KIAkJKmNyYyA9IH4odTMyKTA7CkBAIC02MzIsMjUgKzcxOSw4IEBACiAKIAkJYnl0ZXMgKz0gUEFHRV9DQUNIRV9TSVpFOwogCi0JCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7Ci0JCXNldF9wYWdlX2V4dGVudF9tYXBwZWQocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0KLQkJLyoKLQkJICogV2UgbmVlZCB0byByZWxlYXNlIG91ciByZWZlcmVuY2Ugd2UgZ290IGZvciBncmFiX2NhY2hlX3BhZ2UsCi0JCSAqIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IHBhZ2Ugd2hpY2ggd2lsbCBob2xkIG91ciBjaGVja3N1bXMsIHdlCi0JCSAqIGRvIHRoYXQgYmVsb3cuCi0JCSAqLwotCQlpZiAoaW5kZXggIT0gMCkgewotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCX0KLQotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0KIAkJaW5kZXgrKzsKLQl9IHdoaWxlIChub2RlKTsKKwl9IHdoaWxlIChub2RlIHx8IG5leHRfcGFnZSk7CiAKIAkvKiBXcml0ZSBvdXQgdGhlIGJpdG1hcHMgKi8KIAlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCAmYml0bWFwX2xpc3QpIHsKQEAgLTY1OCw3ICs3MjgsMTEgQEAKIAkJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5ID0KIAkJCWxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgbGlzdCk7CiAKLQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOworCQlpZiAoaW5kZXggPj0gbnVtX3BhZ2VzKSB7CisJCQlvdXRfb2Zfc3BhY2UgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJcGFnZSA9IHBhZ2VzW2luZGV4XTsKIAogCQlhZGRyID0ga21hcChwYWdlKTsKIAkJbWVtY3B5KGFkZHIsIGVudHJ5LT5iaXRtYXAsIFBBR0VfQ0FDSEVfU0laRSk7CkBAIC02NjksNjQgKzc0Myw1OCBAQAogCQljcmMrKzsKIAkJYnl0ZXMgKz0gUEFHRV9DQUNIRV9TSVpFOwogCi0JCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7Ci0JCXNldF9wYWdlX2V4dGVudF9tYXBwZWQocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJbGlzdF9kZWxfaW5pdCgmZW50cnktPmxpc3QpOwogCQlpbmRleCsrOwogCX0KIAorCWlmIChvdXRfb2Zfc3BhY2UpIHsKKwkJYnRyZnNfZHJvcF9wYWdlcyhwYWdlcywgbnVtX3BhZ2VzKTsKKwkJdW5sb2NrX2V4dGVudF9jYWNoZWQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCAwLAorCQkJCSAgICAgaV9zaXplX3JlYWQoaW5vZGUpIC0gMSwgJmNhY2hlZF9zdGF0ZSwKKwkJCQkgICAgIEdGUF9OT0ZTKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKIAkvKiBaZXJvIG91dCB0aGUgcmVzdCBvZiB0aGUgcGFnZXMganVzdCB0byBtYWtlIHN1cmUgKi8KLQl3aGlsZSAoaW5kZXggPD0gbGFzdF9pbmRleCkgeworCXdoaWxlIChpbmRleCA8IG51bV9wYWdlcykgewogCQl2b2lkICphZGRyOwogCi0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4KTsKLQorCQlwYWdlID0gcGFnZXNbaW5kZXhdOwogCQlhZGRyID0ga21hcChwYWdlKTsKIAkJbWVtc2V0KGFkZHIsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CiAJCWt1bm1hcChwYWdlKTsKLQkJQ2xlYXJQYWdlQ2hlY2tlZChwYWdlKTsKLQkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKLQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQlieXRlcyArPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWluZGV4Kys7CiAJfQogCi0JYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgMCwgYnl0ZXMgLSAxLCAmY2FjaGVkX3N0YXRlKTsKLQogCS8qIFdyaXRlIHRoZSBjaGVja3N1bXMgYW5kIHRyYW5zIGlkIHRvIHRoZSBmaXJzdCBwYWdlICovCiAJewogCQl2b2lkICphZGRyOwogCQl1NjQgKmdlbjsKIAotCQlwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCAwKTsKKwkJcGFnZSA9IHBhZ2VzWzBdOwogCiAJCWFkZHIgPSBrbWFwKHBhZ2UpOwotCQltZW1jcHkoYWRkciwgY2hlY2tzdW1zLCBzaXplb2YodTMyKSAqIG51bV9jaGVja3N1bXMpOwotCQlnZW4gPSBhZGRyICsgKHNpemVvZih1MzIpICogbnVtX2NoZWNrc3Vtcyk7CisJCW1lbWNweShhZGRyLCBjaGVja3N1bXMsIHNpemVvZih1MzIpICogbnVtX3BhZ2VzKTsKKwkJZ2VuID0gYWRkciArIChzaXplb2YodTMyKSAqIG51bV9wYWdlcyk7CiAJCSpnZW4gPSB0cmFucy0+dHJhbnNpZDsKIAkJa3VubWFwKHBhZ2UpOwotCQlDbGVhclBhZ2VDaGVja2VkKHBhZ2UpOwotCQlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKHBhZ2UpOwotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJfQotCUJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uID0gdHJhbnMtPnRyYW5zaWQ7CiAKKwlyZXQgPSBidHJmc19kaXJ0eV9wYWdlcyhyb290LCBpbm9kZSwgcGFnZXMsIG51bV9wYWdlcywgMCwKKwkJCQkJICAgIGJ5dGVzLCAmY2FjaGVkX3N0YXRlKTsKKwlidHJmc19kcm9wX3BhZ2VzKHBhZ2VzLCBudW1fcGFnZXMpOwogCXVubG9ja19leHRlbnRfY2FjaGVkKCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgMCwKIAkJCSAgICAgaV9zaXplX3JlYWQoaW5vZGUpIC0gMSwgJmNhY2hlZF9zdGF0ZSwgR0ZQX05PRlMpOwogCisJaWYgKHJldCkgeworCQlyZXQgPSAwOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCUJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uID0gdHJhbnMtPnRyYW5zaWQ7CisKIAlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGlub2RlLT5pX21hcHBpbmcpOwogCiAJa2V5Lm9iamVjdGlkID0gQlRSRlNfRlJFRV9TUEFDRV9PQkpFQ1RJRDsKQEAgLTc3Nyw2ICs4NDUsNyBAQAogCQlCVFJGU19JKGlub2RlKS0+Z2VuZXJhdGlvbiA9IDA7CiAJfQogCWtmcmVlKGNoZWNrc3Vtcyk7CisJa2ZyZWUocGFnZXMpOwogCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogCXJldHVybiByZXQ7CkBAIC0xNjk5LDEwICsxNzY4LDEzIEBACiAKIAl3aGlsZSAoKG5vZGUgPSByYl9sYXN0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQpKSAhPSBOVUxMKSB7CiAJCWluZm8gPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKLQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOwotCQlpZiAoaW5mby0+Yml0bWFwKQotCQkJa2ZyZWUoaW5mby0+Yml0bWFwKTsKLQkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX2ZyZWVfc3BhY2VfY2FjaGVwLCBpbmZvKTsKKwkJaWYgKCFpbmZvLT5iaXRtYXApIHsKKwkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKKwkJCWttZW1fY2FjaGVfZnJlZShidHJmc19mcmVlX3NwYWNlX2NhY2hlcCwgaW5mbyk7CisJCX0gZWxzZSB7CisJCQlmcmVlX2JpdG1hcChibG9ja19ncm91cCwgaW5mbyk7CisJCX0KKwogCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKIAkJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMjIzMiw3ICsyMzA0LDcgQEAKIAkJCXN0YXJ0ID0gZW50cnktPm9mZnNldDsKIAkJCWJ5dGVzID0gbWluKGVudHJ5LT5ieXRlcywgZW5kIC0gc3RhcnQpOwogCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKLQkJCWtmcmVlKGVudHJ5KTsKKwkJCWttZW1fY2FjaGVfZnJlZShidHJmc19mcmVlX3NwYWNlX2NhY2hlcCwgZW50cnkpOwogCQl9CiAKIAkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggOTNjMjhhMS4uN2NkOGFiMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC0xMTIsNiArMTEyLDcgQEAKIHN0YXRpYyBub2lubGluZSBpbnQgaW5zZXJ0X2lubGluZV9leHRlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJdTY0IHN0YXJ0LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGNvbXByZXNzZWRfc2l6ZSwKKwkJCQlpbnQgY29tcHJlc3NfdHlwZSwKIAkJCQlzdHJ1Y3QgcGFnZSAqKmNvbXByZXNzZWRfcGFnZXMpCiB7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CkBAIC0xMjYsMTIgKzEyNyw5IEBACiAJc2l6ZV90IGN1cl9zaXplID0gc2l6ZTsKIAlzaXplX3QgZGF0YXNpemU7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JaW50IGNvbXByZXNzX3R5cGUgPSBCVFJGU19DT01QUkVTU19OT05FOwogCi0JaWYgKGNvbXByZXNzZWRfc2l6ZSAmJiBjb21wcmVzc2VkX3BhZ2VzKSB7Ci0JCWNvbXByZXNzX3R5cGUgPSByb290LT5mc19pbmZvLT5jb21wcmVzc190eXBlOworCWlmIChjb21wcmVzc2VkX3NpemUgJiYgY29tcHJlc3NlZF9wYWdlcykKIAkJY3VyX3NpemUgPSBjb21wcmVzc2VkX3NpemU7Ci0JfQogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCkBAIC0yMjEsNyArMjE5LDcgQEAKIHN0YXRpYyBub2lubGluZSBpbnQgY293X2ZpbGVfcmFuZ2VfaW5saW5lKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJCSBzaXplX3QgY29tcHJlc3NlZF9zaXplLAorCQkJCSBzaXplX3QgY29tcHJlc3NlZF9zaXplLCBpbnQgY29tcHJlc3NfdHlwZSwKIAkJCQkgc3RydWN0IHBhZ2UgKipjb21wcmVzc2VkX3BhZ2VzKQogewogCXU2NCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKQEAgLTI1NCw3ICsyNTIsNyBAQAogCQlpbmxpbmVfbGVuID0gbWluX3QodTY0LCBpc2l6ZSwgYWN0dWFsX2VuZCk7CiAJcmV0ID0gaW5zZXJ0X2lubGluZV9leHRlbnQodHJhbnMsIHJvb3QsIGlub2RlLCBzdGFydCwKIAkJCQkgICBpbmxpbmVfbGVuLCBjb21wcmVzc2VkX3NpemUsCi0JCQkJICAgY29tcHJlc3NlZF9wYWdlcyk7CisJCQkJICAgY29tcHJlc3NfdHlwZSwgY29tcHJlc3NlZF9wYWdlcyk7CiAJQlVHX09OKHJldCk7CiAJYnRyZnNfZGVsYWxsb2NfcmVsZWFzZV9tZXRhZGF0YShpbm9kZSwgZW5kICsgMSAtIHN0YXJ0KTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIGFsaWduZWRfZW5kIC0gMSwgMCk7CkBAIC00MzMsMTIgKzQzMSwxMyBAQAogCQkJICogdG8gbWFrZSBhbiB1bmNvbXByZXNzZWQgaW5saW5lIGV4dGVudC4KIAkJCSAqLwogCQkJcmV0ID0gY293X2ZpbGVfcmFuZ2VfaW5saW5lKHRyYW5zLCByb290LCBpbm9kZSwKLQkJCQkJCSAgICBzdGFydCwgZW5kLCAwLCBOVUxMKTsKKwkJCQkJCSAgICBzdGFydCwgZW5kLCAwLCAwLCBOVUxMKTsKIAkJfSBlbHNlIHsKIAkJCS8qIHRyeSBtYWtpbmcgYSBjb21wcmVzc2VkIGlubGluZSBleHRlbnQgKi8KIAkJCXJldCA9IGNvd19maWxlX3JhbmdlX2lubGluZSh0cmFucywgcm9vdCwgaW5vZGUsCiAJCQkJCQkgICAgc3RhcnQsIGVuZCwKLQkJCQkJCSAgICB0b3RhbF9jb21wcmVzc2VkLCBwYWdlcyk7CisJCQkJCQkgICAgdG90YWxfY29tcHJlc3NlZCwKKwkJCQkJCSAgICBjb21wcmVzc190eXBlLCBwYWdlcyk7CiAJCX0KIAkJaWYgKHJldCA9PSAwKSB7CiAJCQkvKgpAQCAtNzkyLDcgKzc5MSw3IEBACiAJaWYgKHN0YXJ0ID09IDApIHsKIAkJLyogbGV0cyB0cnkgdG8gbWFrZSBhbiBpbmxpbmUgZXh0ZW50ICovCiAJCXJldCA9IGNvd19maWxlX3JhbmdlX2lubGluZSh0cmFucywgcm9vdCwgaW5vZGUsCi0JCQkJCSAgICBzdGFydCwgZW5kLCAwLCBOVUxMKTsKKwkJCQkJICAgIHN0YXJ0LCBlbmQsIDAsIDAsIE5VTEwpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCiAJCQkJICAgICAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCkBAIC05NTUsNiArOTU0LDcgQEAKIAkJCSAxLCAwLCBOVUxMLCBHRlBfTk9GUyk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCWFzeW5jX2NvdyA9IGttYWxsb2Moc2l6ZW9mKCphc3luY19jb3cpLCBHRlBfTk9GUyk7CisJCUJVR19PTighYXN5bmNfY293KTsKIAkJYXN5bmNfY293LT5pbm9kZSA9IGlub2RlOwogCQlhc3luY19jb3ctPnJvb3QgPSByb290OwogCQlhc3luY19jb3ctPmxvY2tlZF9wYWdlID0gbG9ja2VkX3BhZ2U7CkBAIC0xNzcxLDkgKzE3NzEsMTIgQEAKIAlhZGRfcGVuZGluZ19jc3Vtcyh0cmFucywgaW5vZGUsIG9yZGVyZWRfZXh0ZW50LT5maWxlX29mZnNldCwKIAkJCSAgJm9yZGVyZWRfZXh0ZW50LT5saXN0KTsKIAotCWJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgMCwgb3JkZXJlZF9leHRlbnQpOwotCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwotCUJVR19PTihyZXQpOworCXJldCA9IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgMCwgb3JkZXJlZF9leHRlbnQpOworCWlmICghcmV0KSB7CisJCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOworCQlCVUdfT04ocmV0KTsKKwl9CisJcmV0ID0gMDsKIG91dDoKIAlpZiAobm9sb2NrKSB7CiAJCWlmICh0cmFucykKQEAgLTIyMjIsOCArMjIyNSw2IEBACiAJCQlpbnNlcnQgPSAxOwogI2VuZGlmCiAJCWluc2VydCA9IDE7Ci0JfSBlbHNlIHsKLQkJV0FSTl9PTighQlRSRlNfSShpbm9kZSktPm9ycGhhbl9tZXRhX3Jlc2VydmVkKTsKIAl9CiAKIAlpZiAoIUJUUkZTX0koaW5vZGUpLT5vcnBoYW5fbWV0YV9yZXNlcnZlZCkgewpAQCAtMjMyNCw3ICsyMzI1LDcgQEAKIAogCQkvKgogCQkgKiBpZiByZXQgPT0gMCBtZWFucyB3ZSBmb3VuZCB3aGF0IHdlIHdlcmUgc2VhcmNoaW5nIGZvciwgd2hpY2gKLQkJICogaXMgd2VpcmQsIGJ1dCBwb3NzaWJsZSwgc28gb25seSBzY3JldyB3aXRoIHBhdGggaWYgd2UgZGlkbnQKKwkJICogaXMgd2VpcmQsIGJ1dCBwb3NzaWJsZSwgc28gb25seSBzY3JldyB3aXRoIHBhdGggaWYgd2UgZGlkbid0CiAJCSAqIGZpbmQgdGhlIGtleSBhbmQgc2VlIGlmIHdlIGhhdmUgc3R1ZmYgdGhhdCBtYXRjaGVzCiAJCSAqLwogCQlpZiAocmV0ID4gMCkgewpAQCAtMjUzNyw4ICsyNTM4LDYgQEAKIAlCVFJGU19JKGlub2RlKS0+ZmxhZ3MgPSBidHJmc19pbm9kZV9mbGFncyhsZWFmLCBpbm9kZV9pdGVtKTsKIAogCWFsbG9jX2dyb3VwX2Jsb2NrID0gYnRyZnNfaW5vZGVfYmxvY2tfZ3JvdXAobGVhZiwgaW5vZGVfaXRlbSk7Ci0JaWYgKGxvY2F0aW9uLm9iamVjdGlkID09IEJUUkZTX0ZSRUVfU1BBQ0VfT0JKRUNUSUQpCi0JCWlub2RlLT5pX21hcHBpbmctPmZsYWdzICY9IH5fX0dGUF9GUzsKIAogCS8qCiAJICogdHJ5IHRvIHByZWNhY2hlIGEgTlVMTCBhY2wgZW50cnkgZm9yIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZQpAQCAtMjU5NSw2ICsyNTk0LDEzIEBACiAJCQkgICAgc3RydWN0IGJ0cmZzX2lub2RlX2l0ZW0gKml0ZW0sCiAJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwlpZiAoIWxlYWYtPm1hcF90b2tlbikKKwkJbWFwX3ByaXZhdGVfZXh0ZW50X2J1ZmZlcihsZWFmLCAodW5zaWduZWQgbG9uZylpdGVtLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgYnRyZnNfaW5vZGVfaXRlbSksCisJCQkJCSAgJmxlYWYtPm1hcF90b2tlbiwgJmxlYWYtPmthZGRyLAorCQkJCQkgICZsZWFmLT5tYXBfc3RhcnQsICZsZWFmLT5tYXBfbGVuLAorCQkJCQkgIEtNX1VTRVIxKTsKKwogCWJ0cmZzX3NldF9pbm9kZV91aWQobGVhZiwgaXRlbSwgaW5vZGUtPmlfdWlkKTsKIAlidHJmc19zZXRfaW5vZGVfZ2lkKGxlYWYsIGl0ZW0sIGlub2RlLT5pX2dpZCk7CiAJYnRyZnNfc2V0X2lub2RlX3NpemUobGVhZiwgaXRlbSwgQlRSRlNfSShpbm9kZSktPmRpc2tfaV9zaXplKTsKQEAgLTI2MjMsNiArMjYyOSwxMSBAQAogCWJ0cmZzX3NldF9pbm9kZV9yZGV2KGxlYWYsIGl0ZW0sIGlub2RlLT5pX3JkZXYpOwogCWJ0cmZzX3NldF9pbm9kZV9mbGFncyhsZWFmLCBpdGVtLCBCVFJGU19JKGlub2RlKS0+ZmxhZ3MpOwogCWJ0cmZzX3NldF9pbm9kZV9ibG9ja19ncm91cChsZWFmLCBpdGVtLCBCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXApOworCisJaWYgKGxlYWYtPm1hcF90b2tlbikgeworCQl1bm1hcF9leHRlbnRfYnVmZmVyKGxlYWYsIGxlYWYtPm1hcF90b2tlbiwgS01fVVNFUjEpOworCQlsZWFmLT5tYXBfdG9rZW4gPSBOVUxMOworCX0KIH0KIAogLyoKQEAgLTQyMTIsMTAgKzQyMjMsOCBAQAogCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCByZXQ7Ci0JdTMyIG5yaXRlbXM7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJaW50IHNsb3Q7Ci0JaW50IGFkdmFuY2U7CiAJdW5zaWduZWQgY2hhciBkX3R5cGU7CiAJaW50IG92ZXIgPSAwOwogCXUzMiBkaV9jdXI7CkBAIC00MjU4LDI3ICs0MjY3LDE5IEBACiAJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwotCWFkdmFuY2UgPSAwOwogCiAJd2hpbGUgKDEpIHsKIAkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwotCQlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZik7CiAJCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKLQkJaWYgKGFkdmFuY2UgfHwgc2xvdCA+PSBucml0ZW1zKSB7Ci0JCQlpZiAoc2xvdCA+PSBucml0ZW1zIC0gMSkgewotCQkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihyb290LCBwYXRoKTsKLQkJCQlpZiAocmV0KQotCQkJCQlicmVhazsKLQkJCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwotCQkJCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2xvdCsrOwotCQkJCXBhdGgtPnNsb3RzWzBdKys7Ci0JCQl9CisJCWlmIChzbG90ID49IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpKSB7CisJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYocm9vdCwgcGF0aCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGVycjsKKwkJCWVsc2UgaWYgKHJldCA+IDApCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKIAkJfQogCi0JCWFkdmFuY2UgPSAxOwogCQlpdGVtID0gYnRyZnNfaXRlbV9ucihsZWFmLCBzbG90KTsKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZmb3VuZF9rZXksIHNsb3QpOwogCkBAIC00Mjg3LDcgKzQyODgsNyBAQAogCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmZvdW5kX2tleSkgIT0ga2V5X3R5cGUpCiAJCQlicmVhazsKIAkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPCBmaWxwLT5mX3BvcykKLQkJCWNvbnRpbnVlOworCQkJZ290byBuZXh0OwogCiAJCWZpbHAtPmZfcG9zID0gZm91bmRfa2V5Lm9mZnNldDsKIApAQCAtNDM0MCw2ICs0MzQxLDggQEAKIAkJCWRpX2N1ciArPSBkaV9sZW47CiAJCQlkaSA9IChzdHJ1Y3QgYnRyZnNfZGlyX2l0ZW0gKikoKGNoYXIgKilkaSArIGRpX2xlbik7CiAJCX0KK25leHQ6CisJCXBhdGgtPnNsb3RzWzBdKys7CiAJfQogCiAJLyogUmVhY2hlZCBlbmQgb2YgZGlyZWN0b3J5L3Jvb3QuIEJ1bXAgcG9zIHBhc3QgdGhlIGxhc3QgaXRlbS4gKi8KQEAgLTQ1MzIsMTQgKzQ1MzUsMTcgQEAKIAlCVUdfT04oIXBhdGgpOwogCiAJaW5vZGUgPSBuZXdfaW5vZGUocm9vdC0+ZnNfaW5mby0+c2IpOwotCWlmICghaW5vZGUpCisJaWYgKCFpbm9kZSkgeworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KIAogCWlmIChkaXIpIHsKIAkJdHJhY2VfYnRyZnNfaW5vZGVfcmVxdWVzdChkaXIpOwogCiAJCXJldCA9IGJ0cmZzX3NldF9pbm9kZV9pbmRleChkaXIsIGluZGV4KTsKIAkJaWYgKHJldCkgeworCQkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCQkJaXB1dChpbm9kZSk7CiAJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCQl9CkBAIC00NzI2LDkgKzQ3MzIsMTAgQEAKIAlpbm9kZSA9IGJ0cmZzX25ld19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGlyLT5pX2lubywgb2JqZWN0aWQsCiAJCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgbW9kZSwgJmluZGV4KTsKLQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkKKwlpZiAoSVNfRVJSKGlub2RlKSkgeworCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOworCX0KIAogCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKGVycikgewpAQCAtNDc4Nyw5ICs0Nzk0LDEwIEBACiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGRpci0+aV9pbm8sIG9iamVjdGlkLAogCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIG1vZGUsICZpbmRleCk7Ci0JZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JaWYgKElTX0VSUihpbm9kZSkpCisJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHRyYW5zLCBpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnIpIHsKQEAgLTQ4MzksOSArNDg0Nyw2IEBACiAJaWYgKGlub2RlLT5pX25saW5rID09IH4wVSkKIAkJcmV0dXJuIC1FTUxJTks7CiAKLQlidHJmc19pbmNfbmxpbmsoaW5vZGUpOwotCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCiAJZXJyID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgJmluZGV4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CkBAIC00ODU3LDYgKzQ4NjIsOSBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJYnRyZnNfaW5jX25saW5rKGlub2RlKTsKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAlpaG9sZChpbm9kZSk7CiAKQEAgLTQ5OTQsNiArNTAwMiw4IEBACiAJaW5saW5lX3NpemUgPSBidHJmc19maWxlX2V4dGVudF9pbmxpbmVfaXRlbV9sZW4obGVhZiwKIAkJCQkJYnRyZnNfaXRlbV9ucihsZWFmLCBwYXRoLT5zbG90c1swXSkpOwogCXRtcCA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJcHRyID0gYnRyZnNfZmlsZV9leHRlbnRfaW5saW5lX3N0YXJ0KGl0ZW0pOwogCiAJcmVhZF9leHRlbnRfYnVmZmVyKGxlYWYsIHRtcCwgcHRyLCBpbmxpbmVfc2l6ZSk7CkBAIC01MjI2LDcgKzUyMzYsNyBAQAogCQkJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAJCX0KIAkJc2V0X2V4dGVudF91cHRvZGF0ZShpb190cmVlLCBlbS0+c3RhcnQsCi0JCQkJICAgIGV4dGVudF9tYXBfZW5kKGVtKSAtIDEsIEdGUF9OT0ZTKTsKKwkJCQkgICAgZXh0ZW50X21hcF9lbmQoZW0pIC0gMSwgTlVMTCwgR0ZQX05PRlMpOwogCQlnb3RvIGluc2VydDsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzIHVua25vd24gZm91bmRfdHlwZSAlZFxuIiwgZm91bmRfdHlwZSk7CkBAIC01NDMzLDE3ICs1NDQzLDMwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXh0ZW50X21hcCAqYnRyZnNfbmV3X2V4dGVudF9kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJCSAgc3RydWN0IGV4dGVudF9tYXAgKmVtLAogCQkJCQkJICB1NjQgc3RhcnQsIHU2NCBsZW4pCiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CiAJc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqZW1fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWU7CiAJc3RydWN0IGJ0cmZzX2tleSBpbnM7CiAJdTY0IGFsbG9jX2hpbnQ7CiAJaW50IHJldDsKKwlib29sIGluc2VydCA9IGZhbHNlOwogCi0JYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBzdGFydCArIGxlbiAtIDEsIDApOworCS8qCisJICogT2sgaWYgdGhlIGV4dGVudCBtYXAgd2UgbG9va2VkIHVwIGlzIGEgaG9sZSBhbmQgaXMgZm9yIHRoZSBleGFjdAorCSAqIHJhbmdlIHdlIHdhbnQsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBhbGxvY2F0ZSBhIG5ldyBvbmUsIGhvd2V2ZXIgaWYKKwkgKiBpdCBpcyBub3QgcmlnaHQgdGhlbiB3ZSBuZWVkIHRvIGZyZWUgdGhpcyBvbmUgYW5kIGRyb3AgdGhlIGNhY2hlIGZvcgorCSAqIG91ciByYW5nZS4KKwkgKi8KKwlpZiAoZW0tPmJsb2NrX3N0YXJ0ICE9IEVYVEVOVF9NQVBfSE9MRSB8fCBlbS0+c3RhcnQgIT0gc3RhcnQgfHwKKwkgICAgZW0tPmxlbiAhPSBsZW4pIHsKKwkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJZW0gPSBOVUxMOworCQlpbnNlcnQgPSB0cnVlOworCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSwgMCk7CisJfQogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwogCWlmIChJU19FUlIodHJhbnMpKQpAQCAtNTQ1OSwxMCArNTQ4MiwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOwogCWlmICghZW0pIHsKLQkJZW0gPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIG91dDsKKwkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJaWYgKCFlbSkgeworCQkJZW0gPSBFUlJfUFRSKC1FTk9NRU0pOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAllbS0+c3RhcnQgPSBzdGFydDsKQEAgLTU0NzIsOSArNTQ5NywxNSBAQAogCWVtLT5ibG9ja19zdGFydCA9IGlucy5vYmplY3RpZDsKIAllbS0+YmxvY2tfbGVuID0gaW5zLm9mZnNldDsKIAllbS0+YmRldiA9IHJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPmxhdGVzdF9iZGV2OworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBpZiB3ZSdyZSB1c2luZyB0aGUgb3JpZ2luYWwgZW0gd2Ugc2VhcmNoZWQKKwkgKiBmb3IsIHdlIGNvdWxkIGhhdmUgRVhURU5UX0ZMQUdfVkFDQU5DWSBzZXQsIGFuZCB3ZSBkb24ndCB3YW50IHRoYXQuCisJICovCisJZW0tPmZsYWdzID0gMDsKIAlzZXRfYml0KEVYVEVOVF9GTEFHX1BJTk5FRCwgJmVtLT5mbGFncyk7CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChpbnNlcnQpIHsKIAkJd3JpdGVfbG9jaygmZW1fdHJlZS0+bG9jayk7CiAJCXJldCA9IGFkZF9leHRlbnRfbWFwcGluZyhlbV90cmVlLCBlbSk7CiAJCXdyaXRlX3VubG9jaygmZW1fdHJlZS0+bG9jayk7CkBAIC01NjkyLDggKzU3MjMsNyBAQAogCSAqIGl0IGFib3ZlCiAJICovCiAJbGVuID0gYmhfcmVzdWx0LT5iX3NpemU7Ci0JZnJlZV9leHRlbnRfbWFwKGVtKTsKLQllbSA9IGJ0cmZzX25ld19leHRlbnRfZGlyZWN0KGlub2RlLCBzdGFydCwgbGVuKTsKKwllbSA9IGJ0cmZzX25ld19leHRlbnRfZGlyZWN0KGlub2RlLCBlbSwgc3RhcnQsIGxlbik7CiAJaWYgKElTX0VSUihlbSkpCiAJCXJldHVybiBQVFJfRVJSKGVtKTsKIAlsZW4gPSBtaW4obGVuLCBlbS0+bGVuIC0gKHN0YXJ0IC0gZW0tPnN0YXJ0KSk7CkBAIC01ODU2LDggKzU4ODYsMTAgQEAKIAl9CiAKIAlhZGRfcGVuZGluZ19jc3Vtcyh0cmFucywgaW5vZGUsIG9yZGVyZWQtPmZpbGVfb2Zmc2V0LCAmb3JkZXJlZC0+bGlzdCk7Ci0JYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkKTsKLQlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwlyZXQgPSBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIDAsIG9yZGVyZWQpOworCWlmICghcmV0KQorCQlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwlyZXQgPSAwOwogb3V0X3VubG9jazoKIAl1bmxvY2tfZXh0ZW50X2NhY2hlZCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIG9yZGVyZWQtPmZpbGVfb2Zmc2V0LAogCQkJICAgICBvcmRlcmVkLT5maWxlX29mZnNldCArIG9yZGVyZWQtPmxlbiAtIDEsCkBAIC01OTQzLDcgKzU5NzUsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBfX2J0cmZzX3N1Ym1pdF9kaW9fYmlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJIGludCBydywgdTY0IGZpbGVfb2Zmc2V0LCBpbnQgc2tpcF9zdW0sCi0JCQkJCSB1MzIgKmNzdW1zKQorCQkJCQkgdTMyICpjc3VtcywgaW50IGFzeW5jX3N1Ym1pdCkKIHsKIAlpbnQgd3JpdGUgPSBydyAmIFJFUV9XUklURTsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwpAQCAtNTk1NCwxMyArNTk4NiwyNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHdyaXRlICYmICFza2lwX3N1bSkgeworCWlmIChza2lwX3N1bSkKKwkJZ290byBtYXA7CisKKwlpZiAod3JpdGUgJiYgYXN5bmNfc3VibWl0KSB7CiAJCXJldCA9IGJ0cmZzX3dxX3N1Ym1pdF9iaW8ocm9vdC0+ZnNfaW5mbywKIAkJCQkgICBpbm9kZSwgcncsIGJpbywgMCwgMCwKIAkJCQkgICBmaWxlX29mZnNldCwKIAkJCQkgICBfX2J0cmZzX3N1Ym1pdF9iaW9fc3RhcnRfZGlyZWN0X2lvLAogCQkJCSAgIF9fYnRyZnNfc3VibWl0X2Jpb19kb25lKTsKIAkJZ290byBlcnI7CisJfSBlbHNlIGlmICh3cml0ZSkgeworCQkvKgorCQkgKiBJZiB3ZSBhcmVuJ3QgZG9pbmcgYXN5bmMgc3VibWl0LCBjYWxjdWxhdGUgdGhlIGNzdW0gb2YgdGhlCisJCSAqIGJpbyBub3cuCisJCSAqLworCQlyZXQgPSBidHJmc19jc3VtX29uZV9iaW8ocm9vdCwgaW5vZGUsIGJpbywgZmlsZV9vZmZzZXQsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CiAJfSBlbHNlIGlmICghc2tpcF9zdW0pIHsKIAkJcmV0ID0gYnRyZnNfbG9va3VwX2Jpb19zdW1zX2Rpbyhyb290LCBpbm9kZSwgYmlvLAogCQkJCQkgIGZpbGVfb2Zmc2V0LCBjc3Vtcyk7CkBAIC01OTY4LDcgKzYwMTEsOCBAQAogCQkJZ290byBlcnI7CiAJfQogCi0JcmV0ID0gYnRyZnNfbWFwX2Jpbyhyb290LCBydywgYmlvLCAwLCAxKTsKK21hcDoKKwlyZXQgPSBidHJmc19tYXBfYmlvKHJvb3QsIHJ3LCBiaW8sIDAsIGFzeW5jX3N1Ym1pdCk7CiBlcnI6CiAJYmlvX3B1dChiaW8pOwogCXJldHVybiByZXQ7CkBAIC01OTkwLDggKzYwMzQsMjMgQEAKIAlpbnQgbnJfcGFnZXMgPSAwOwogCXUzMiAqY3N1bXMgPSBkaXAtPmNzdW1zOwogCWludCByZXQgPSAwOworCWludCBhc3luY19zdWJtaXQgPSAwOwogCWludCB3cml0ZSA9IHJ3ICYgUkVRX1dSSVRFOwogCisJbWFwX2xlbmd0aCA9IG9yaWdfYmlvLT5iaV9zaXplOworCXJldCA9IGJ0cmZzX21hcF9ibG9jayhtYXBfdHJlZSwgUkVBRCwgc3RhcnRfc2VjdG9yIDw8IDksCisJCQkgICAgICAmbWFwX2xlbmd0aCwgTlVMTCwgMCk7CisJaWYgKHJldCkgeworCQliaW9fcHV0KG9yaWdfYmlvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKG1hcF9sZW5ndGggPj0gb3JpZ19iaW8tPmJpX3NpemUpIHsKKwkJYmlvID0gb3JpZ19iaW87CisJCWdvdG8gc3VibWl0OworCX0KKworCWFzeW5jX3N1Ym1pdCA9IDE7CiAJYmlvID0gYnRyZnNfZGlvX2Jpb19hbGxvYyhvcmlnX2Jpby0+YmlfYmRldiwgc3RhcnRfc2VjdG9yLCBHRlBfTk9GUyk7CiAJaWYgKCFiaW8pCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTk5OSwxNCArNjA1OCw2IEBACiAJYmlvLT5iaV9lbmRfaW8gPSBidHJmc19lbmRfZGlvX2JpbzsKIAlhdG9taWNfaW5jKCZkaXAtPnBlbmRpbmdfYmlvcyk7CiAKLQltYXBfbGVuZ3RoID0gb3JpZ19iaW8tPmJpX3NpemU7Ci0JcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKG1hcF90cmVlLCBSRUFELCBzdGFydF9zZWN0b3IgPDwgOSwKLQkJCSAgICAgICZtYXBfbGVuZ3RoLCBOVUxMLCAwKTsKLQlpZiAocmV0KSB7Ci0JCWJpb19wdXQoYmlvKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJd2hpbGUgKGJ2ZWMgPD0gKG9yaWdfYmlvLT5iaV9pb192ZWMgKyBvcmlnX2Jpby0+YmlfdmNudCAtIDEpKSB7CiAJCWlmICh1bmxpa2VseShtYXBfbGVuZ3RoIDwgc3VibWl0X2xlbiArIGJ2ZWMtPmJ2X2xlbiB8fAogCQkgICAgYmlvX2FkZF9wYWdlKGJpbywgYnZlYy0+YnZfcGFnZSwgYnZlYy0+YnZfbGVuLApAQCAtNjAyMCw3ICs2MDcxLDcgQEAKIAkJCWF0b21pY19pbmMoJmRpcC0+cGVuZGluZ19iaW9zKTsKIAkJCXJldCA9IF9fYnRyZnNfc3VibWl0X2Rpb19iaW8oYmlvLCBpbm9kZSwgcncsCiAJCQkJCQkgICAgIGZpbGVfb2Zmc2V0LCBza2lwX3N1bSwKLQkJCQkJCSAgICAgY3N1bXMpOworCQkJCQkJICAgICBjc3VtcywgYXN5bmNfc3VibWl0KTsKIAkJCWlmIChyZXQpIHsKIAkJCQliaW9fcHV0KGJpbyk7CiAJCQkJYXRvbWljX2RlYygmZGlwLT5wZW5kaW5nX2Jpb3MpOwpAQCAtNjA1Nyw4ICs2MTA4LDkgQEAKIAkJfQogCX0KIAorc3VibWl0OgogCXJldCA9IF9fYnRyZnNfc3VibWl0X2Rpb19iaW8oYmlvLCBpbm9kZSwgcncsIGZpbGVfb2Zmc2V0LCBza2lwX3N1bSwKLQkJCQkgICAgIGNzdW1zKTsKKwkJCQkgICAgIGNzdW1zLCBhc3luY19zdWJtaXQpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIApAQCAtNjE1Myw2ICs2MjA1LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKIAlpbnQgc2VnOworCWludCBpOwogCXNpemVfdCBzaXplOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBibG9ja3NpemVfbWFzayA9IHJvb3QtPnNlY3RvcnNpemUgLSAxOwpAQCAtNjE2Nyw4ICs2MjIwLDIyIEBACiAJCWFkZHIgPSAodW5zaWduZWQgbG9uZylpb3Zbc2VnXS5pb3ZfYmFzZTsKIAkJc2l6ZSA9IGlvdltzZWddLmlvdl9sZW47CiAJCWVuZCArPSBzaXplOwotCQlpZiAoKGFkZHIgJiBibG9ja3NpemVfbWFzaykgfHwgKHNpemUgJiBibG9ja3NpemVfbWFzaykpIAorCQlpZiAoKGFkZHIgJiBibG9ja3NpemVfbWFzaykgfHwgKHNpemUgJiBibG9ja3NpemVfbWFzaykpCiAJCQlnb3RvIG91dDsKKworCQkvKiBJZiB0aGlzIGlzIGEgd3JpdGUgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhbnltb3JlICovCisJCWlmIChydyAmIFdSSVRFKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgZHVwbGljYXRlIGlvdl9iYXNlJ3MgaW4gdGhpcworCQkgKiBpb3ZlYywgaWYgc28gcmV0dXJuIEVJTlZBTCwgb3RoZXJ3aXNlIHdlJ2xsIGdldCBjc3VtIGVycm9ycworCQkgKiB3aGVuIHJlYWRpbmcgYmFjay4KKwkJICovCisJCWZvciAoaSA9IHNlZyArIDE7IGkgPCBucl9zZWdzOyBpKyspIHsKKwkJCWlmIChpb3Zbc2VnXS5pb3ZfYmFzZSA9PSBpb3ZbaV0uaW92X2Jhc2UpCisJCQkJZ290byBvdXQ7CisJCX0KIAl9CiAJcmV0dmFsID0gMDsKIG91dDoKQEAgLTY5NjAsOCArNzAyNywxMCBAQAogCSAqIHNob3VsZCBjb3ZlciB0aGUgd29yc3QgY2FzZSBudW1iZXIgb2YgaXRlbXMgd2UnbGwgbW9kaWZ5LgogCSAqLwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMjApOwotCWlmIChJU19FUlIodHJhbnMpKQotCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKHRyYW5zKTsKKyAgICAgICAgICAgICAgICBnb3RvIG91dF9ub3RyYW5zOworICAgICAgICB9CiAKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIG5ld19kaXIpOwogCkBAIC03MDYxLDcgKzcxMzAsNyBAQAogCX0KIG91dF9mYWlsOgogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7Ci0KK291dF9ub3RyYW5zOgogCWlmIChvbGRfaW5vZGUtPmlfaW5vID09IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXVwX3JlYWQoJnJvb3QtPmZzX2luZm8tPnN1YnZvbF9zZW0pOwogCkBAIC03MjA5LDkgKzcyNzgsMTAgQEAKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGRpci0+aV9pbm8sIG9iamVjdGlkLAogCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIFNfSUZMTkt8U19JUldYVUdPLAogCQkJCSZpbmRleCk7Ci0JZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JaWYgKElTX0VSUihpbm9kZSkpCisJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHRyYW5zLCBpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IDdjMDdmZTIuLjI2MTZmN2UgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtODEsNiArODEsMTMgQEAKIAkJaWZsYWdzIHw9IEZTX05PQVRJTUVfRkw7CiAJaWYgKGZsYWdzICYgQlRSRlNfSU5PREVfRElSU1lOQykKIAkJaWZsYWdzIHw9IEZTX0RJUlNZTkNfRkw7CisJaWYgKGZsYWdzICYgQlRSRlNfSU5PREVfTk9EQVRBQ09XKQorCQlpZmxhZ3MgfD0gRlNfTk9DT1dfRkw7CisKKwlpZiAoKGZsYWdzICYgQlRSRlNfSU5PREVfQ09NUFJFU1MpICYmICEoZmxhZ3MgJiBCVFJGU19JTk9ERV9OT0NPTVBSRVNTKSkKKwkJaWZsYWdzIHw9IEZTX0NPTVBSX0ZMOworCWVsc2UgaWYgKGZsYWdzICYgQlRSRlNfSU5PREVfTk9DT01QUkVTUykKKwkJaWZsYWdzIHw9IEZTX05PQ09NUF9GTDsKIAogCXJldHVybiBpZmxhZ3M7CiB9CkBAIC0xNDQsMTYgKzE1MSwxMyBAQAogCWlmIChmbGFncyAmIH4oRlNfSU1NVVRBQkxFX0ZMIHwgRlNfQVBQRU5EX0ZMIHwgXAogCQkgICAgICBGU19OT0FUSU1FX0ZMIHwgRlNfTk9EVU1QX0ZMIHwgXAogCQkgICAgICBGU19TWU5DX0ZMIHwgRlNfRElSU1lOQ19GTCB8IFwKLQkJICAgICAgRlNfTk9DT01QX0ZMIHwgRlNfQ09NUFJfRkwgfCBcCi0JCSAgICAgIEZTX05PQ09XX0ZMIHwgRlNfQ09XX0ZMKSkKKwkJICAgICAgRlNfTk9DT01QX0ZMIHwgRlNfQ09NUFJfRkwgfAorCQkgICAgICBGU19OT0NPV19GTCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmICgoZmxhZ3MgJiBGU19OT0NPTVBfRkwpICYmIChmbGFncyAmIEZTX0NPTVBSX0ZMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKGZsYWdzICYgRlNfTk9DT1dfRkwpICYmIChmbGFncyAmIEZTX0NPV19GTCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxOCw2ICsyMjIsMTAgQEAKIAkJaXAtPmZsYWdzIHw9IEJUUkZTX0lOT0RFX0RJUlNZTkM7CiAJZWxzZQogCQlpcC0+ZmxhZ3MgJj0gfkJUUkZTX0lOT0RFX0RJUlNZTkM7CisJaWYgKGZsYWdzICYgRlNfTk9DT1dfRkwpCisJCWlwLT5mbGFncyB8PSBCVFJGU19JTk9ERV9OT0RBVEFDT1c7CisJZWxzZQorCQlpcC0+ZmxhZ3MgJj0gfkJUUkZTX0lOT0RFX05PREFUQUNPVzsKIAogCS8qCiAJICogVGhlIENPTVBSRVNTIGZsYWcgY2FuIG9ubHkgYmUgY2hhbmdlZCBieSB1c2Vycywgd2hpbGUgdGhlIE5PQ09NUFJFU1MKQEAgLTIzMCwxMSArMjM4LDkgQEAKIAl9IGVsc2UgaWYgKGZsYWdzICYgRlNfQ09NUFJfRkwpIHsKIAkJaXAtPmZsYWdzIHw9IEJUUkZTX0lOT0RFX0NPTVBSRVNTOwogCQlpcC0+ZmxhZ3MgJj0gfkJUUkZTX0lOT0RFX05PQ09NUFJFU1M7CisJfSBlbHNlIHsKKwkJaXAtPmZsYWdzICY9IH4oQlRSRlNfSU5PREVfQ09NUFJFU1MgfCBCVFJGU19JTk9ERV9OT0NPTVBSRVNTKTsKIAl9Ci0JaWYgKGZsYWdzICYgRlNfTk9DT1dfRkwpCi0JCWlwLT5mbGFncyB8PSBCVFJGU19JTk9ERV9OT0RBVEFDT1c7Ci0JZWxzZSBpZiAoZmxhZ3MgJiBGU19DT1dfRkwpCi0JCWlwLT5mbGFncyAmPSB+QlRSRlNfSU5PREVfTk9EQVRBQ09XOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKQEAgLTM3Myw2ICszNzksMTAgQEAKIAlpbm9kZV9pdGVtLT5uYnl0ZXMgPSBjcHVfdG9fbGU2NChyb290LT5sZWFmc2l6ZSk7CiAJaW5vZGVfaXRlbS0+bW9kZSA9IGNwdV90b19sZTMyKFNfSUZESVIgfCAwNzU1KTsKIAorCXJvb3RfaXRlbS5mbGFncyA9IDA7CisJcm9vdF9pdGVtLmJ5dGVfbGltaXQgPSAwOworCWlub2RlX2l0ZW0tPmZsYWdzID0gY3B1X3RvX2xlNjQoQlRSRlNfSU5PREVfUk9PVF9JVEVNX0lOSVQpOworCiAJYnRyZnNfc2V0X3Jvb3RfYnl0ZW5yKCZyb290X2l0ZW0sIGxlYWYtPnN0YXJ0KTsKIAlidHJmc19zZXRfcm9vdF9nZW5lcmF0aW9uKCZyb290X2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAlidHJmc19zZXRfcm9vdF9sZXZlbCgmcm9vdF9pdGVtLCAwKTsKQEAgLTIyODMsNyArMjI5Myw3IEBACiAJc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2luZm8gc3BhY2U7CiAJc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2luZm8gKmRlc3Q7CiAJc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2luZm8gKmRlc3Rfb3JpZzsKLQlzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyAqdXNlcl9kZXN0OworCXN0cnVjdCBidHJmc19pb2N0bF9zcGFjZV9pbmZvIF9fdXNlciAqdXNlcl9kZXN0OwogCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvOwogCXU2NCB0eXBlc1tdID0ge0JUUkZTX0JMT0NLX0dST1VQX0RBVEEsCiAJCSAgICAgICBCVFJGU19CTE9DS19HUk9VUF9TWVNURU0sCkBAIC0yNDM2LDggKzI0NDYsMTAgQEAKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXRyYW5zaWQgPSB0cmFucy0+dHJhbnNpZDsKIAlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb25fYXN5bmModHJhbnMsIHJvb3QsIDApOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCWlmIChhcmdwKQogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ0cmFuc2lkLCBzaXplb2YodHJhbnNpZCkpKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IDU4MjUwZTAuLjE5OWE4MDEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYworKysgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKQEAgLTIzNDYsNyArMjM0Niw3IEBACiAJCXJvb3QgPSBuZXh0LT5yb290OwogCQlCVUdfT04oIXJvb3QpOwogCi0JCS8qIG5vIG90aGVyIGNob2ljZSBmb3Igbm9uLXJlZmVybmNlIGNvdW50ZWQgdHJlZSAqLworCQkvKiBubyBvdGhlciBjaG9pY2UgZm9yIG5vbi1yZWZlcmVuY2VzIGNvdW50ZWQgdHJlZSAqLwogCQlpZiAoIXJvb3QtPnJlZl9jb3dzKQogCQkJcmV0dXJuIHJvb3Q7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jIGIvZnMvYnRyZnMvcm9vdC10cmVlLmMKaW5kZXggMjliMmQ3Yy4uNjkyOGJmZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcm9vdC10cmVlLmMKKysrIGIvZnMvYnRyZnMvcm9vdC10cmVlLmMKQEAgLTQ3MywzICs0NzMsMjEgQEAKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBPbGQgYnRyZnMgZm9yZ2V0cyB0byBpbml0IHJvb3RfaXRlbS0+ZmxhZ3MgYW5kIHJvb3RfaXRlbS0+Ynl0ZV9saW1pdAorICogZm9yIHN1YnZvbHVtZXMuIFRvIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSwgd2Ugc3RlYWwgYSBiaXQgZnJvbQorICogcm9vdF9pdGVtLT5pbm9kZV9pdGVtLT5mbGFncywgYW5kIHVzZSBpdCB0byBpbmRpY2F0ZSBpZiB0aG9zZSBmaWVsZHMKKyAqIGhhdmUgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4KKyAqLwordm9pZCBidHJmc19jaGVja19hbmRfaW5pdF9yb290X2l0ZW0oc3RydWN0IGJ0cmZzX3Jvb3RfaXRlbSAqcm9vdF9pdGVtKQoreworCXU2NCBpbm9kZV9mbGFncyA9IGxlNjRfdG9fY3B1KHJvb3RfaXRlbS0+aW5vZGUuZmxhZ3MpOworCisJaWYgKCEoaW5vZGVfZmxhZ3MgJiBCVFJGU19JTk9ERV9ST09UX0lURU1fSU5JVCkpIHsKKwkJaW5vZGVfZmxhZ3MgfD0gQlRSRlNfSU5PREVfUk9PVF9JVEVNX0lOSVQ7CisJCXJvb3RfaXRlbS0+aW5vZGUuZmxhZ3MgPSBjcHVfdG9fbGU2NChpbm9kZV9mbGFncyk7CisJCXJvb3RfaXRlbS0+ZmxhZ3MgPSAwOworCQlyb290X2l0ZW0tPmJ5dGVfbGltaXQgPSAwOworCX0KK30KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDJlZGZjMDMuLjBhYzcxMmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJT3B0X2NvbXByZXNzX3R5cGUsIE9wdF9jb21wcmVzc19mb3JjZSwgT3B0X2NvbXByZXNzX2ZvcmNlX3R5cGUsCiAJT3B0X25vdHJlZWxvZywgT3B0X3JhdGlvLCBPcHRfZmx1c2hvbmNvbW1pdCwgT3B0X2Rpc2NhcmQsCiAJT3B0X3NwYWNlX2NhY2hlLCBPcHRfY2xlYXJfY2FjaGUsIE9wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkLAotCU9wdF9lbm9zcGNfZGVidWcsIE9wdF9lcnIsCisJT3B0X2Vub3NwY19kZWJ1ZywgT3B0X3N1YnZvbHJvb3RpZCwgT3B0X2VyciwKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTE4OSw2ICsxODksNyBAQAogCXtPcHRfY2xlYXJfY2FjaGUsICJjbGVhcl9jYWNoZSJ9LAogCXtPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwgInVzZXJfc3Vidm9sX3JtX2FsbG93ZWQifSwKIAl7T3B0X2Vub3NwY19kZWJ1ZywgImVub3NwY19kZWJ1ZyJ9LAorCXtPcHRfc3Vidm9scm9vdGlkLCAic3Vidm9scm9vdGlkPSVkIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMjMyLDYgKzIzMyw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBPcHRfc3Vidm9sOgogCQljYXNlIE9wdF9zdWJ2b2xpZDoKKwkJY2FzZSBPcHRfc3Vidm9scm9vdGlkOgogCQljYXNlIE9wdF9kZXZpY2U6CiAJCQkvKgogCQkJICogVGhlc2UgYXJlIHBhcnNlZCBieSBidHJmc19wYXJzZV9lYXJseV9vcHRpb25zCkBAIC0zODgsNyArMzkwLDcgQEAKICAqLwogc3RhdGljIGludCBidHJmc19wYXJzZV9lYXJseV9vcHRpb25zKGNvbnN0IGNoYXIgKm9wdGlvbnMsIGZtb2RlX3QgZmxhZ3MsCiAJCXZvaWQgKmhvbGRlciwgY2hhciAqKnN1YnZvbF9uYW1lLCB1NjQgKnN1YnZvbF9vYmplY3RpZCwKLQkJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKipmc19kZXZpY2VzKQorCQl1NjQgKnN1YnZvbF9yb290aWQsIHN0cnVjdCBidHJmc19mc19kZXZpY2VzICoqZnNfZGV2aWNlcykKIHsKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJY2hhciAqb3B0cywgKm9yaWcsICpwOwpAQCAtNDI5LDYgKzQzMSwxOCBAQAogCQkJCQkqc3Vidm9sX29iamVjdGlkID0gaW50YXJnOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N1YnZvbHJvb3RpZDoKKwkJCWludGFyZyA9IDA7CisJCQllcnJvciA9IG1hdGNoX2ludCgmYXJnc1swXSwgJmludGFyZyk7CisJCQlpZiAoIWVycm9yKSB7CisJCQkJLyogd2Ugd2FudCB0aGUgb3JpZ2luYWwgZnNfdHJlZSAqLworCQkJCWlmICghaW50YXJnKQorCQkJCQkqc3Vidm9sX3Jvb3RpZCA9CisJCQkJCQlCVFJGU19GU19UUkVFX09CSkVDVElEOworCQkJCWVsc2UKKwkJCQkJKnN1YnZvbF9yb290aWQgPSBpbnRhcmc7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBPcHRfZGV2aWNlOgogCQkJZXJyb3IgPSBidHJmc19zY2FuX29uZV9kZXZpY2UobWF0Y2hfc3RyZHVwKCZhcmdzWzBdKSwKIAkJCQkJZmxhZ3MsIGhvbGRlciwgZnNfZGV2aWNlcyk7CkBAIC02NDQsNiArNjU4LDcgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGJ0cmZzX3NiKHZmcy0+bW50X3NiKTsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisJY2hhciAqY29tcHJlc3NfdHlwZTsKIAogCWlmIChidHJmc190ZXN0X29wdChyb290LCBERUdSQURFRCkpCiAJCXNlcV9wdXRzKHNlcSwgIixkZWdyYWRlZCIpOwpAQCAtNjYyLDggKzY3NywxNiBAQAogCWlmIChpbmZvLT50aHJlYWRfcG9vbF9zaXplICE9ICBtaW5fdCh1bnNpZ25lZCBsb25nLAogCQkJCQkgICAgIG51bV9vbmxpbmVfY3B1cygpICsgMiwgOCkpCiAJCXNlcV9wcmludGYoc2VxLCAiLHRocmVhZF9wb29sPSVkIiwgaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7Ci0JaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIENPTVBSRVNTKSkKLQkJc2VxX3B1dHMoc2VxLCAiLGNvbXByZXNzIik7CisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIENPTVBSRVNTKSkgeworCQlpZiAoaW5mby0+Y29tcHJlc3NfdHlwZSA9PSBCVFJGU19DT01QUkVTU19aTElCKQorCQkJY29tcHJlc3NfdHlwZSA9ICJ6bGliIjsKKwkJZWxzZQorCQkJY29tcHJlc3NfdHlwZSA9ICJsem8iOworCQlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgRk9SQ0VfQ09NUFJFU1MpKQorCQkJc2VxX3ByaW50ZihzZXEsICIsY29tcHJlc3MtZm9yY2U9JXMiLCBjb21wcmVzc190eXBlKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihzZXEsICIsY29tcHJlc3M9JXMiLCBjb21wcmVzc190eXBlKTsKKwl9CiAJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIE5PU1NEKSkKIAkJc2VxX3B1dHMoc2VxLCAiLG5vc3NkIik7CiAJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRF9TUFJFQUQpKQpAQCAtNjc4LDYgKzcwMSwxMiBAQAogCQlzZXFfcHV0cyhzZXEsICIsZGlzY2FyZCIpOwogCWlmICghKHJvb3QtPmZzX2luZm8tPnNiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpKQogCQlzZXFfcHV0cyhzZXEsICIsbm9hY2wiKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgU1BBQ0VfQ0FDSEUpKQorCQlzZXFfcHV0cyhzZXEsICIsc3BhY2VfY2FjaGUiKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgQ0xFQVJfQ0FDSEUpKQorCQlzZXFfcHV0cyhzZXEsICIsY2xlYXJfY2FjaGUiKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgVVNFUl9TVUJWT0xfUk1fQUxMT1dFRCkpCisJCXNlcV9wdXRzKHNlcSwgIix1c2VyX3N1YnZvbF9ybV9hbGxvd2VkIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcyMSw2ICs3NTAsNyBAQAogCWZtb2RlX3QgbW9kZSA9IEZNT0RFX1JFQUQ7CiAJY2hhciAqc3Vidm9sX25hbWUgPSBOVUxMOwogCXU2NCBzdWJ2b2xfb2JqZWN0aWQgPSAwOworCXU2NCBzdWJ2b2xfcm9vdGlkID0gMDsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKCEoZmxhZ3MgJiBNU19SRE9OTFkpKQpAQCAtNzI4LDcgKzc1OCw3IEBACiAKIAllcnJvciA9IGJ0cmZzX3BhcnNlX2Vhcmx5X29wdGlvbnMoZGF0YSwgbW9kZSwgZnNfdHlwZSwKIAkJCQkJICAmc3Vidm9sX25hbWUsICZzdWJ2b2xfb2JqZWN0aWQsCi0JCQkJCSAgJmZzX2RldmljZXMpOworCQkJCQkgICZzdWJ2b2xfcm9vdGlkLCAmZnNfZGV2aWNlcyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKQEAgLTc5MiwxNSArODIyLDE3IEBACiAJCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwogCX0KIAotCXJvb3QgPSBnZXRfZGVmYXVsdF9yb290KHMsIHN1YnZvbF9vYmplY3RpZCk7Ci0JaWYgKElTX0VSUihyb290KSkgewotCQllcnJvciA9IFBUUl9FUlIocm9vdCk7Ci0JCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Vidm9sX25hbWU7Ci0JfQogCS8qIGlmIHRoZXkgZ2F2ZSB1cyBhIHN1YnZvbHVtZSBuYW1lIGJpbmQgbW91bnQgaW50byB0aGF0ICovCiAJaWYgKHN0cmNtcChzdWJ2b2xfbmFtZSwgIi4iKSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfcm9vdDsKKworCQlyb290ID0gZ2V0X2RlZmF1bHRfcm9vdChzLCBzdWJ2b2xfcm9vdGlkKTsKKwkJaWYgKElTX0VSUihyb290KSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKHJvb3QpOworCQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CisJCQlnb3RvIGVycm9yX2ZyZWVfc3Vidm9sX25hbWU7CisJCX0KKwogCQltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIAkJbmV3X3Jvb3QgPSBsb29rdXBfb25lX2xlbihzdWJ2b2xfbmFtZSwgcm9vdCwKIAkJCQkgICAgICBzdHJsZW4oc3Vidm9sX25hbWUpKTsKQEAgLTgyMSw2ICs4NTMsMTMgQEAKIAkJfQogCQlkcHV0KHJvb3QpOwogCQlyb290ID0gbmV3X3Jvb3Q7CisJfSBlbHNlIHsKKwkJcm9vdCA9IGdldF9kZWZhdWx0X3Jvb3Qocywgc3Vidm9sX29iamVjdGlkKTsKKwkJaWYgKElTX0VSUihyb290KSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKHJvb3QpOworCQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CisJCQlnb3RvIGVycm9yX2ZyZWVfc3Vidm9sX25hbWU7CisJCX0KIAl9CiAKIAlrZnJlZShzdWJ2b2xfbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCBjZTQ4ZWI1Li5jNTcxNzM0IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTMyLDEwICszMiw4IEBACiAKIHN0YXRpYyBub2lubGluZSB2b2lkIHB1dF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKQogewotCVdBUk5fT04odHJhbnNhY3Rpb24tPnVzZV9jb3VudCA9PSAwKTsKLQl0cmFuc2FjdGlvbi0+dXNlX2NvdW50LS07Ci0JaWYgKHRyYW5zYWN0aW9uLT51c2VfY291bnQgPT0gMCkgewotCQlsaXN0X2RlbF9pbml0KCZ0cmFuc2FjdGlvbi0+bGlzdCk7CisJV0FSTl9PTihhdG9taWNfcmVhZCgmdHJhbnNhY3Rpb24tPnVzZV9jb3VudCkgPT0gMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnRyYW5zYWN0aW9uLT51c2VfY291bnQpKSB7CiAJCW1lbXNldCh0cmFuc2FjdGlvbiwgMCwgc2l6ZW9mKCp0cmFuc2FjdGlvbikpOwogCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNhY3Rpb25fY2FjaGVwLCB0cmFuc2FjdGlvbik7CiAJfQpAQCAtNjAsMTQgKzU4LDE0IEBACiAJCWlmICghY3VyX3RyYW5zKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24rKzsKLQkJY3VyX3RyYW5zLT5udW1fd3JpdGVycyA9IDE7CisJCWF0b21pY19zZXQoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMsIDEpOwogCQljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOwogCQljdXJfdHJhbnMtPnRyYW5zaWQgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmY3VyX3RyYW5zLT5jb21taXRfd2FpdCk7CiAJCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKIAkJY3VyX3RyYW5zLT5ibG9ja2VkID0gMDsKLQkJY3VyX3RyYW5zLT51c2VfY291bnQgPSAxOworCQlhdG9taWNfc2V0KCZjdXJfdHJhbnMtPnVzZV9jb3VudCwgMSk7CiAJCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAwOwogCQljdXJfdHJhbnMtPnN0YXJ0X3RpbWUgPSBnZXRfc2Vjb25kcygpOwogCkBAIC04OCw3ICs4Niw3IEBACiAJCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBjdXJfdHJhbnM7CiAJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAJfSBlbHNlIHsKLQkJY3VyX3RyYW5zLT5udW1fd3JpdGVycysrOworCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKTsKIAkJY3VyX3RyYW5zLT5udW1fam9pbmVkKys7CiAJfQogCkBAIC0xNDUsNyArMTQzLDcgQEAKIAljdXJfdHJhbnMgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uOwogCWlmIChjdXJfdHJhbnMgJiYgY3VyX3RyYW5zLT5ibG9ja2VkKSB7CiAJCURFRklORV9XQUlUKHdhaXQpOwotCQljdXJfdHJhbnMtPnVzZV9jb3VudCsrOworCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJCXdoaWxlICgxKSB7CiAJCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0LAogCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CkBAIC0xODEsNiArMTc5LDcgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpoOwogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOworCWludCByZXRyaWVzID0gMDsKIAlpbnQgcmV0OwogCiAJaWYgKHJvb3QtPmZzX2luZm8tPmZzX3N0YXRlICYgQlRSRlNfU1VQRVJfRkxBR19FUlJPUikKQEAgLTE5NywxMyArMTk2LDE0IEBACiAKIAlyZXQgPSBqb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChyZXQgPCAwKSB7CisJCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCBoKTsKIAkJaWYgKHR5cGUgIT0gVFJBTlNfSk9JTl9OT0xPQ0spCiAJCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKIAljdXJfdHJhbnMgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uOwotCWN1cl90cmFucy0+dXNlX2NvdW50Kys7CisJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCWlmICh0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKQogCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIApAQCAtMjIzLDEwICsyMjMsMTggQEAKIAogCWlmIChudW1faXRlbXMgPiAwKSB7CiAJCXJldCA9IGJ0cmZzX3RyYW5zX3Jlc2VydmVfbWV0YWRhdGEoaCwgcm9vdCwgbnVtX2l0ZW1zKTsKLQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCWlmIChyZXQgPT0gLUVBR0FJTiAmJiAhcmV0cmllcykgeworCQkJcmV0cmllcysrOwogCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKGgsIHJvb3QpOwogCQkJZ290byBhZ2FpbjsKKwkJfSBlbHNlIGlmIChyZXQgPT0gLUVBR0FJTikgeworCQkJLyoKKwkJCSAqIFdlIGhhdmUgYWxyZWFkeSByZXRyaWVkIGFuZCBnb3QgRUFHQUlOLCBzbyByZWFsbHkgd2UKKwkJCSAqIGRvbid0IGhhdmUgc3BhY2UsIHNvIHNldCByZXQgdG8gLUVOT1NQQy4KKwkJCSAqLworCQkJcmV0ID0gLUVOT1NQQzsKIAkJfQorCiAJCWlmIChyZXQgPCAwKSB7CiAJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24oaCwgcm9vdCk7CiAJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwpAQCAtMzI2LDcgKzMzNCw3IEBACiAJCQlnb3RvIG91dF91bmxvY2s7ICAvKiBub3RoaW5nIGNvbW1pdHRpbmd8Y29tbWl0dGVkICovCiAJfQogCi0JY3VyX3RyYW5zLT51c2VfY291bnQrKzsKKwlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAl3YWl0X2Zvcl9jb21taXQocm9vdCwgY3VyX3RyYW5zKTsKQEAgLTQ1NiwxOCArNDY0LDE0IEBACiAJCQl3YWtlX3VwX3Byb2Nlc3MoaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZCk7CiAJfQogCi0JaWYgKGxvY2spCi0JCW11dGV4X2xvY2soJmluZm8tPnRyYW5zX211dGV4KTsKIAlXQVJOX09OKGN1cl90cmFucyAhPSBpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uKTsKLQlXQVJOX09OKGN1cl90cmFucy0+bnVtX3dyaXRlcnMgPCAxKTsKLQljdXJfdHJhbnMtPm51bV93cml0ZXJzLS07CisJV0FSTl9PTihhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPCAxKTsKKwlhdG9taWNfZGVjKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKTsKIAogCXNtcF9tYigpOwogCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KSkKIAkJd2FrZV91cCgmY3VyX3RyYW5zLT53cml0ZXJfd2FpdCk7CiAJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7Ci0JaWYgKGxvY2spCi0JCW11dGV4X3VubG9jaygmaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9PSB0cmFucykKIAkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKQEAgLTk3NSw2ICs5NzksNyBAQAogCXJlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCByb290KTsKIAlidHJmc19zZXRfcm9vdF9sYXN0X3NuYXBzaG90KCZyb290LT5yb290X2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAltZW1jcHkobmV3X3Jvb3RfaXRlbSwgJnJvb3QtPnJvb3RfaXRlbSwgc2l6ZW9mKCpuZXdfcm9vdF9pdGVtKSk7CisJYnRyZnNfY2hlY2tfYW5kX2luaXRfcm9vdF9pdGVtKG5ld19yb290X2l0ZW0pOwogCiAJcm9vdF9mbGFncyA9IGJ0cmZzX3Jvb3RfZmxhZ3MobmV3X3Jvb3RfaXRlbSk7CiAJaWYgKHBlbmRpbmctPnJlYWRvbmx5KQpAQCAtMTE3Niw3ICsxMTgxLDcgQEAKIAkvKiB0YWtlIHRyYW5zYWN0aW9uIHJlZmVyZW5jZSAqLwogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAljdXJfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb247Ci0JY3VyX3RyYW5zLT51c2VfY291bnQrKzsKKwlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwpAQCAtMTIzNSw3ICsxMjQwLDcgQEAKIAogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlpZiAoY3VyX3RyYW5zLT5pbl9jb21taXQpIHsKLQkJY3VyX3RyYW5zLT51c2VfY291bnQrKzsKKwkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIApAQCAtMTI1Nyw3ICsxMjYyLDcgQEAKIAkJcHJldl90cmFucyA9IGxpc3RfZW50cnkoY3VyX3RyYW5zLT5saXN0LnByZXYsCiAJCQkJCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiwgbGlzdCk7CiAJCWlmICghcHJldl90cmFucy0+Y29tbWl0X2RvbmUpIHsKLQkJCXByZXZfdHJhbnMtPnVzZV9jb3VudCsrOworCQkJYXRvbWljX2luYygmcHJldl90cmFucy0+dXNlX2NvdW50KTsKIAkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJCQl3YWl0X2Zvcl9jb21taXQocm9vdCwgcHJldl90cmFucyk7CkBAIC0xMjk4LDE0ICsxMzAzLDE0IEBACiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCiAJCXNtcF9tYigpOwotCQlpZiAoY3VyX3RyYW5zLT5udW1fd3JpdGVycyA+IDEpCisJCWlmIChhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPiAxKQogCQkJc2NoZWR1bGVfdGltZW91dChNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAJCWVsc2UgaWYgKHNob3VsZF9ncm93KQogCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKIAogCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWZpbmlzaF93YWl0KCZjdXJfdHJhbnMtPndyaXRlcl93YWl0LCAmd2FpdCk7Ci0JfSB3aGlsZSAoY3VyX3RyYW5zLT5udW1fd3JpdGVycyA+IDEgfHwKKwl9IHdoaWxlIChhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPiAxIHx8CiAJCSAoc2hvdWxkX2dyb3cgJiYgY3VyX3RyYW5zLT5udW1fam9pbmVkICE9IGpvaW5lZCkpOwogCiAJcmV0ID0gY3JlYXRlX3BlbmRpbmdfc25hcHNob3RzKHRyYW5zLCByb290LT5mc19pbmZvKTsKQEAgLTEzOTIsNiArMTM5Nyw3IEBACiAKIAl3YWtlX3VwKCZjdXJfdHJhbnMtPmNvbW1pdF93YWl0KTsKIAorCWxpc3RfZGVsX2luaXQoJmN1cl90cmFucy0+bGlzdCk7CiAJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7CiAJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDIyOWE1OTQuLmU0NDFhY2MgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtMjcsMTEgKzI3LDExIEBACiAJICogdG90YWwgd3JpdGVycyBpbiB0aGlzIHRyYW5zYWN0aW9uLCBpdCBtdXN0IGJlIHplcm8gYmVmb3JlIHRoZQogCSAqIHRyYW5zYWN0aW9uIGNhbiBlbmQKIAkgKi8KLQl1bnNpZ25lZCBsb25nIG51bV93cml0ZXJzOworCWF0b21pY190IG51bV93cml0ZXJzOwogCiAJdW5zaWduZWQgbG9uZyBudW1fam9pbmVkOwogCWludCBpbl9jb21taXQ7Ci0JaW50IHVzZV9jb3VudDsKKwlhdG9taWNfdCB1c2VfY291bnQ7CiAJaW50IGNvbW1pdF9kb25lOwogCWludCBibG9ja2VkOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IGM1MDI3MWEuLmY5OTdlYzAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMjIwOSw4ICsyMjA5LDEwIEBACiAKIAlsb2cgPSByb290LT5sb2dfcm9vdDsKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCWlmICghcGF0aCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFwYXRoKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAlkaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgbG9nLCBwYXRoLCBkaXItPmlfaW5vLAogCQkJCSAgIG5hbWUsIG5hbWVfbGVuLCAtMSk7CkBAIC0yMjcxLDYgKzIyNzMsNyBAQAogCX0KIGZhaWw6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJkJUUkZTX0koZGlyKS0+bG9nX211dGV4KTsKIAlpZiAocmV0ID09IC1FTk9TUEMpIHsKIAkJcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgPSB0cmFucy0+dHJhbnNpZDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCAzMDlhNTdiLi5jNzM2N2FlIDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC0xNTUsNiArMTU1LDE1IEBACiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkID0gMDsKIAlpbnQgZm9yY2VfcmVnID0gMDsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKKworCS8qCisJICogdGhpcyBmdW5jdGlvbiBydW5zIGFsbCB0aGUgYmlvcyB3ZSd2ZSBjb2xsZWN0ZWQgZm9yCisJICogYSBwYXJ0aWN1bGFyIGRldmljZS4gIFdlIGRvbid0IHdhbnQgdG8gd2FuZGVyIG9mZiB0bworCSAqIGFub3RoZXIgZGV2aWNlIHdpdGhvdXQgZmlyc3Qgc2VuZGluZyBhbGwgb2YgdGhlc2UgZG93bi4KKwkgKiBTbywgc2V0dXAgYSBwbHVnIGhlcmUgYW5kIGZpbmlzaCBpdCBvZmYgYmVmb3JlIHdlIHJldHVybgorCSAqLworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAogCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhkZXZpY2UtPmJkZXYpOwogCWZzX2luZm8gPSBkZXZpY2UtPmRldl9yb290LT5mc19pbmZvOwpAQCAtMjk0LDYgKzMwMyw3IEBACiAJc3Bpbl91bmxvY2soJmRldmljZS0+aW9fbG9jayk7CiAKIGRvbmU6CisJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIuYyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggYTUzMDNiOC4uY2ZkNjYwNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMveGF0dHIuYworKysgYi9mcy9idHJmcy94YXR0ci5jCkBAIC0xODAsMTEgKzE4MCwxMCBAQAogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwogCXN0cnVjdCBidHJmc19kaXJfaXRlbSAqZGk7Ci0JaW50IHJldCA9IDAsIHNsb3QsIGFkdmFuY2U7CisJaW50IHJldCA9IDAsIHNsb3Q7CiAJc2l6ZV90IHRvdGFsX3NpemUgPSAwLCBzaXplX2xlZnQgPSBzaXplOwogCXVuc2lnbmVkIGxvbmcgbmFtZV9wdHI7CiAJc2l6ZV90IG5hbWVfbGVuOwotCXUzMiBucml0ZW1zOwogCiAJLyoKIAkgKiBvayB3ZSB3YW50IGFsbCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlkLgpAQCAtMjA0LDM0ICsyMDMsMjQgQEAKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7Ci0JYWR2YW5jZSA9IDA7CisKIAl3aGlsZSAoMSkgewogCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKIAkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwogCiAJCS8qIHRoaXMgaXMgd2hlcmUgd2Ugc3RhcnQgd2Fsa2luZyB0aHJvdWdoIHRoZSBwYXRoICovCi0JCWlmIChhZHZhbmNlIHx8IHNsb3QgPj0gbnJpdGVtcykgeworCQlpZiAoc2xvdCA+PSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKSkgewogCQkJLyoKIAkJCSAqIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGxhc3Qgc2xvdCBpbiB0aGlzIGxlYWYgd2UgbmVlZAogCQkJICogdG8gZ28gdG8gdGhlIG5leHQgbGVhZiBhbmQgcmVzZXQgZXZlcnl0aGluZwogCQkJICovCi0JCQlpZiAoc2xvdCA+PSBucml0ZW1zLTEpIHsKLQkJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYocm9vdCwgcGF0aCk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJYnJlYWs7Ci0JCQkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwotCQkJCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKLQkJCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICoganVzdCB3YWxraW5nIHRocm91Z2ggdGhlIHNsb3RzIG9uIHRoaXMgbGVhZgotCQkJCSAqLwotCQkJCXNsb3QrKzsKLQkJCQlwYXRoLT5zbG90c1swXSsrOwotCQkJfQorCQkJcmV0ID0gYnRyZnNfbmV4dF9sZWFmKHJvb3QsIHBhdGgpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnI7CisJCQllbHNlIGlmIChyZXQgPiAwKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CiAJCX0KLQkJYWR2YW5jZSA9IDE7CiAKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZmb3VuZF9rZXksIHNsb3QpOwogCkBAIC0yNTAsNyArMjM5LDcgQEAKIAogCQkvKiB3ZSBhcmUganVzdCBsb29raW5nIGZvciBob3cgYmlnIG91ciBidWZmZXIgbmVlZHMgdG8gYmUgKi8KIAkJaWYgKCFzaXplKQotCQkJY29udGludWU7CisJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKCFidWZmZXIgfHwgKG5hbWVfbGVuICsgMSkgPiBzaXplX2xlZnQpIHsKIAkJCXJldCA9IC1FUkFOR0U7CkBAIC0yNjMsNiArMjUyLDggQEAKIAogCQlzaXplX2xlZnQgLT0gbmFtZV9sZW4gKyAxOwogCQlidWZmZXIgKz0gbmFtZV9sZW4gKyAxOworbmV4dDoKKwkJcGF0aC0+c2xvdHNbMF0rKzsKIAl9CiAJcmV0ID0gdG90YWxfc2l6ZTsKIApkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYyBiL2ZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMKaW5kZXggMzdmZTEwMS4uMTA2NDgwNSAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYworKysgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIH0KIAogLyoKLSAqIHVwZGF0ZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGZvciBhbiBvYmplY3Qgb2JqZWN0IG9uIGRpc2sKKyAqIHVwZGF0ZSB0aGUgYXV4aWxpYXJ5IGRhdGEgZm9yIGFuIG9iamVjdCBvYmplY3Qgb24gZGlzawogICovCiBzdGF0aWMgdm9pZCBjYWNoZWZpbGVzX3VwZGF0ZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpfb2JqZWN0KQogewpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9hZGRyLmMgYi9mcy9jZXBoL2FkZHIuYwppbmRleCAzNzM2OGJhLi4zOGI4YWI1IDEwMDY0NAotLS0gYS9mcy9jZXBoL2FkZHIuYworKysgYi9mcy9jZXBoL2FkZHIuYwpAQCAtMjQsNyArMjQsNyBAQAogICogY29udGV4dCBuZWVkcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG9zZCB3cml0ZSBkdXJpbmcgd3JpdGViYWNrLgogICoKICAqIFNpbWlsYXJseSwgc3RydWN0IGNlcGhfaW5vZGVfaW5mbyBtYWludGFpbnMgYSBzZXQgb2YgY291bnRlcnMgdG8KLSAqIGNvdW50IGRpcnR5IHBhZ2VzIG9uIHRoZSBpbm9kZS4gIEluIHRoZSBhYnNlbnNlIG9mIHNuYXBzaG90cywKKyAqIGNvdW50IGRpcnR5IHBhZ2VzIG9uIHRoZSBpbm9kZS4gIEluIHRoZSBhYnNlbmNlIG9mIHNuYXBzaG90cywKICAqIGlfd3JidWZmZXJfcmVmID09IGlfd3JidWZmZXJfcmVmX2hlYWQgPT0gdGhlIGRpcnR5IHBhZ2UgY291bnQuCiAgKgogICogV2hlbiBhIHNuYXBzaG90IGlzIHRha2VuICh0aGF0IGlzLCB3aGVuIHRoZSBjbGllbnQgcmVjZWl2ZXMKQEAgLTc3NSw2ICs3NzUsMTMgQEAKIAkJCQkJICAgIGNpLT5pX3RydW5jYXRlX3NlcSwKIAkJCQkJICAgIGNpLT5pX3RydW5jYXRlX3NpemUsCiAJCQkJCSAgICAmaW5vZGUtPmlfbXRpbWUsIHRydWUsIDEsIDApOworCisJCQkJaWYgKCFyZXEpIHsKKwkJCQkJcmMgPSAtRU5PTUVNOworCQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQkJbWF4X3BhZ2VzID0gcmVxLT5yX251bV9wYWdlczsKIAogCQkJCWFsbG9jX3BhZ2VfdmVjKGZzYywgcmVxKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2Fwcy5jIGIvZnMvY2VwaC9jYXBzLmMKaW5kZXggNmI2MWRlZC4uMmE1NDA0YyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jYXBzLmMKKysrIGIvZnMvY2VwaC9jYXBzLmMKQEAgLTc2NSw3ICs3NjUsNyBAQAogCQkJaWYgKHRvdWNoKSB7CiAJCQkJc3RydWN0IHJiX25vZGUgKnE7CiAKLQkJCQkvKiB0b3VjaCB0aGlzICsgcHJlY2VlZGluZyBjYXBzICovCisJCQkJLyogdG91Y2ggdGhpcyArIHByZWNlZGluZyBjYXBzICovCiAJCQkJX190b3VjaF9jYXAoY2FwKTsKIAkJCQlmb3IgKHEgPSByYl9maXJzdCgmY2ktPmlfY2Fwcyk7IHEgIT0gcDsKIAkJCQkgICAgIHEgPSByYl9uZXh0KHEpKSB7CkBAIC04MTksNyArODE5LDcgQEAKIAkJdXNlZCB8PSBDRVBIX0NBUF9GSUxFX0NBQ0hFOwogCWlmIChjaS0+aV93cl9yZWYpCiAJCXVzZWQgfD0gQ0VQSF9DQVBfRklMRV9XUjsKLQlpZiAoY2ktPmlfd3JidWZmZXJfcmVmKQorCWlmIChjaS0+aV93Yl9yZWYgfHwgY2ktPmlfd3JidWZmZXJfcmVmKQogCQl1c2VkIHw9IENFUEhfQ0FQX0ZJTEVfQlVGRkVSOwogCXJldHVybiB1c2VkOwogfQpAQCAtMTMzMSwxMCArMTMzMSwxMSBAQAogfQogCiAvKgotICogTWFyayBjYXBzIGRpcnR5LiAgSWYgaW5vZGUgaXMgbmV3bHkgZGlydHksIGFkZCB0byB0aGUgZ2xvYmFsIGRpcnR5Ci0gKiBsaXN0LgorICogTWFyayBjYXBzIGRpcnR5LiAgSWYgaW5vZGUgaXMgbmV3bHkgZGlydHksIHJldHVybiB0aGUgZGlydHkgZmxhZ3MuCisgKiBDYWxsZXIgaXMgdGhlbiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBfX21hcmtfaW5vZGVfZGlydHkgd2l0aCB0aGUKKyAqIHJldHVybmVkIGZsYWdzIHZhbHVlLgogICovCi12b2lkIF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2ksIGludCBtYXNrKQoraW50IF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2ksIGludCBtYXNrKQogewogCXN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MgPQogCQljZXBoX3NiX3RvX2NsaWVudChjaS0+dmZzX2lub2RlLmlfc2IpLT5tZHNjOwpAQCAtMTM1Nyw3ICsxMzU4LDcgQEAKIAkJbGlzdF9hZGQoJmNpLT5pX2RpcnR5X2l0ZW0sICZtZHNjLT5jYXBfZGlydHkpOwogCQlzcGluX3VubG9jaygmbWRzYy0+Y2FwX2RpcnR5X2xvY2spOwogCQlpZiAoY2ktPmlfZmx1c2hpbmdfY2FwcyA9PSAwKSB7Ci0JCQlpZ3JhYihpbm9kZSk7CisJCQlpaG9sZChpbm9kZSk7CiAJCQlkaXJ0eSB8PSBJX0RJUlRZX1NZTkM7CiAJCX0KIAl9CkBAIC0xMzY1LDkgKzEzNjYsOCBAQAogCWlmICgoKHdhcyB8IGNpLT5pX2ZsdXNoaW5nX2NhcHMpICYgQ0VQSF9DQVBfRklMRV9CVUZGRVIpICYmCiAJICAgIChtYXNrICYgQ0VQSF9DQVBfRklMRV9CVUZGRVIpKQogCQlkaXJ0eSB8PSBJX0RJUlRZX0RBVEFTWU5DOwotCWlmIChkaXJ0eSkKLQkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBkaXJ0eSk7CiAJX19jYXBfZGVsYXlfcmVxdWV1ZShtZHNjLCBjaSk7CisJcmV0dXJuIGRpcnR5OwogfQogCiAvKgpAQCAtMTk5MCwxMSArMTk5MCwxMSBAQAogCWlmIChnb3QgJiBDRVBIX0NBUF9GSUxFX1dSKQogCQljaS0+aV93cl9yZWYrKzsKIAlpZiAoZ290ICYgQ0VQSF9DQVBfRklMRV9CVUZGRVIpIHsKLQkJaWYgKGNpLT5pX3dyYnVmZmVyX3JlZiA9PSAwKQotCQkJaWdyYWIoJmNpLT52ZnNfaW5vZGUpOwotCQljaS0+aV93cmJ1ZmZlcl9yZWYrKzsKLQkJZG91dCgiX190YWtlX2NhcF9yZWZzICVwIHdyYnVmZmVyICVkIC0+ICVkICg/KVxuIiwKLQkJICAgICAmY2ktPnZmc19pbm9kZSwgY2ktPmlfd3JidWZmZXJfcmVmLTEsIGNpLT5pX3dyYnVmZmVyX3JlZik7CisJCWlmIChjaS0+aV93Yl9yZWYgPT0gMCkKKwkJCWlob2xkKCZjaS0+dmZzX2lub2RlKTsKKwkJY2ktPmlfd2JfcmVmKys7CisJCWRvdXQoIl9fdGFrZV9jYXBfcmVmcyAlcCB3YiAlZCAtPiAlZCAoPylcbiIsCisJCSAgICAgJmNpLT52ZnNfaW5vZGUsIGNpLT5pX3diX3JlZi0xLCBjaS0+aV93Yl9yZWYpOwogCX0KIH0KIApAQCAtMjE2OSwxMiArMjE2OSwxMiBAQAogCQlpZiAoLS1jaS0+aV9yZGNhY2hlX3JlZiA9PSAwKQogCQkJbGFzdCsrOwogCWlmIChoYWQgJiBDRVBIX0NBUF9GSUxFX0JVRkZFUikgewotCQlpZiAoLS1jaS0+aV93cmJ1ZmZlcl9yZWYgPT0gMCkgeworCQlpZiAoLS1jaS0+aV93Yl9yZWYgPT0gMCkgewogCQkJbGFzdCsrOwogCQkJcHV0Kys7CiAJCX0KLQkJZG91dCgicHV0X2NhcF9yZWZzICVwIHdyYnVmZmVyICVkIC0+ICVkICg/KVxuIiwKLQkJICAgICBpbm9kZSwgY2ktPmlfd3JidWZmZXJfcmVmKzEsIGNpLT5pX3dyYnVmZmVyX3JlZik7CisJCWRvdXQoInB1dF9jYXBfcmVmcyAlcCB3YiAlZCAtPiAlZCAoPylcbiIsCisJCSAgICAgaW5vZGUsIGNpLT5pX3diX3JlZisxLCBjaS0+aV93Yl9yZWYpOwogCX0KIAlpZiAoaGFkICYgQ0VQSF9DQVBfRklMRV9XUikKIAkJaWYgKC0tY2ktPmlfd3JfcmVmID09IDApIHsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxlLmMKaW5kZXggMTU5YjUxMi4uMjAzMjUyZCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9maWxlLmMKKysrIGIvZnMvY2VwaC9maWxlLmMKQEAgLTczNCw5ICs3MzQsMTIgQEAKIAkJfQogCX0KIAlpZiAocmV0ID49IDApIHsKKwkJaW50IGRpcnR5OwogCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCQlfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9GSUxFX1dSKTsKKwkJZGlydHkgPSBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9GSUxFX1dSKTsKIAkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQlpZiAoZGlydHkpCisJCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGRpcnR5KTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW5vZGUuYyBiL2ZzL2NlcGgvaW5vZGUuYwppbmRleCBiNTRjOTdkYS4uNzBiNmE0OCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9pbm9kZS5jCisrKyBiL2ZzL2NlcGgvaW5vZGUuYwpAQCAtMzU1LDYgKzM1NSw3IEBACiAJY2ktPmlfcmRfcmVmID0gMDsKIAljaS0+aV9yZGNhY2hlX3JlZiA9IDA7CiAJY2ktPmlfd3JfcmVmID0gMDsKKwljaS0+aV93Yl9yZWYgPSAwOwogCWNpLT5pX3dyYnVmZmVyX3JlZiA9IDA7CiAJY2ktPmlfd3JidWZmZXJfcmVmX2hlYWQgPSAwOwogCWNpLT5pX3NoYXJlZF9nZW4gPSAwOwpAQCAtMTU2Nyw2ICsxNTY4LDcgQEAKIAlpbnQgcmVsZWFzZSA9IDAsIGRpcnRpZWQgPSAwOwogCWludCBtYXNrID0gMDsKIAlpbnQgZXJyID0gMDsKKwlpbnQgaW5vZGVfZGlydHlfZmxhZ3MgPSAwOwogCiAJaWYgKGNlcGhfc25hcChpbm9kZSkgIT0gQ0VQSF9OT1NOQVApCiAJCXJldHVybiAtRVJPRlM7CkBAIC0xNzI1LDEzICsxNzI3LDE2IEBACiAJCWRvdXQoInNldGF0dHIgJXAgQVRUUl9GSUxFIC4uLiBocm0hXG4iLCBpbm9kZSk7CiAKIAlpZiAoZGlydGllZCkgewotCQlfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBkaXJ0aWVkKTsKKwkJaW5vZGVfZGlydHlfZmxhZ3MgPSBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBkaXJ0aWVkKTsKIAkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJfQogCiAJcmVsZWFzZSAmPSBpc3N1ZWQ7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCisJaWYgKGlub2RlX2RpcnR5X2ZsYWdzKQorCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGlub2RlX2RpcnR5X2ZsYWdzKTsKKwogCWlmIChtYXNrKSB7CiAJCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKIAkJcmVxLT5yX2lub2RlX2Ryb3AgPSByZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNfY2xpZW50LmMgYi9mcy9jZXBoL21kc19jbGllbnQuYwppbmRleCBmNjBiMDdiLi5kMGZhZTRjIDEwMDY0NAotLS0gYS9mcy9jZXBoL21kc19jbGllbnQuYworKysgYi9mcy9jZXBoL21kc19jbGllbnQuYwpAQCAtMzMwNCw4ICszMzA0LDggQEAKIHsKIAlzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqcyA9IGNvbi0+cHJpdmF0ZTsKIAorCWRvdXQoIm1kc2MgY29uX3B1dCAlcCAoJWQpXG4iLCBzLCBhdG9taWNfcmVhZCgmcy0+c19yZWYpIC0gMSk7CiAJY2VwaF9wdXRfbWRzX3Nlc3Npb24ocyk7Ci0JZG91dCgibWRzYyBjb25fcHV0ICVwICglZClcbiIsIHMsIGF0b21pY19yZWFkKCZzLT5zX3JlZikpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zbmFwLmMgYi9mcy9jZXBoL3NuYXAuYwppbmRleCAwYWVlNjZiLi4yNDA2N2Q2IDEwMDY0NAotLS0gYS9mcy9jZXBoL3NuYXAuYworKysgYi9mcy9jZXBoL3NuYXAuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCXVwX3dyaXRlKCZtZHNjLT5zbmFwX3J3c2VtKTsKIAl9IGVsc2UgewogCQlzcGluX2xvY2soJm1kc2MtPnNuYXBfZW1wdHlfbG9jayk7Ci0JCWxpc3RfYWRkKCZtZHNjLT5zbmFwX2VtcHR5LCAmcmVhbG0tPmVtcHR5X2l0ZW0pOworCQlsaXN0X2FkZCgmcmVhbG0tPmVtcHR5X2l0ZW0sICZtZHNjLT5zbmFwX2VtcHR5KTsKIAkJc3Bpbl91bmxvY2soJm1kc2MtPnNuYXBfZW1wdHlfbG9jayk7CiAJfQogfQpAQCAtMzQyLDcgKzM0Miw3IEBACiAJbnVtID0gMDsKIAlzbmFwYy0+c2VxID0gcmVhbG0tPnNlcTsKIAlpZiAocGFyZW50KSB7Ci0JCS8qIGluY2x1ZGUgYW55IG9mIHBhcmVudCdzIHNuYXBzIG9jY3VyaW5nIF9hZnRlcl8gbXkKKwkJLyogaW5jbHVkZSBhbnkgb2YgcGFyZW50J3Mgc25hcHMgb2NjdXJyaW5nIF9hZnRlcl8gbXkKIAkJICAgcGFyZW50IGJlY2FtZSBteSBwYXJlbnQgKi8KIAkJZm9yIChpID0gMDsgaSA8IHBhcmVudC0+Y2FjaGVkX2NvbnRleHQtPm51bV9zbmFwczsgaSsrKQogCQkJaWYgKHBhcmVudC0+Y2FjaGVkX2NvbnRleHQtPnNuYXBzW2ldID49CmRpZmYgLS1naXQgYS9mcy9jZXBoL3N1cGVyLmggYi9mcy9jZXBoL3N1cGVyLmgKaW5kZXggNjE5ZmU3MS4uZjVjYWJlZiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9zdXBlci5oCisrKyBiL2ZzL2NlcGgvc3VwZXIuaApAQCAtMjkzLDcgKzI5Myw3IEBACiAKIAkvKiBoZWxkIHJlZmVyZW5jZXMgdG8gY2FwcyAqLwogCWludCBpX3Bpbl9yZWY7Ci0JaW50IGlfcmRfcmVmLCBpX3JkY2FjaGVfcmVmLCBpX3dyX3JlZjsKKwlpbnQgaV9yZF9yZWYsIGlfcmRjYWNoZV9yZWYsIGlfd3JfcmVmLCBpX3diX3JlZjsKIAlpbnQgaV93cmJ1ZmZlcl9yZWYsIGlfd3JidWZmZXJfcmVmX2hlYWQ7CiAJdTMyIGlfc2hhcmVkX2dlbjsgICAgICAgLyogaW5jcmVtZW50IGVhY2ggdGltZSB3ZSBnZXQgRklMRV9TSEFSRUQgKi8KIAl1MzIgaV9yZGNhY2hlX2dlbjsgICAgICAvKiBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgd2UgZ2V0IEZJTEVfQ0FDSEUuICovCkBAIC01MDYsNyArNTA2LDcgQEAKIHsKIAlyZXR1cm4gY2ktPmlfZGlydHlfY2FwcyB8IGNpLT5pX2ZsdXNoaW5nX2NhcHM7CiB9Ci1leHRlcm4gdm9pZCBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWFzayk7CitleHRlcm4gaW50IF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2ksIGludCBtYXNrKTsKIAogZXh0ZXJuIGludCBjZXBoX2NhcHNfcmV2b2tpbmcoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2ksIGludCBtYXNrKTsKIGV4dGVybiBpbnQgX19jZXBoX2NhcHNfdXNlZChzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL3hhdHRyLmMgYi9mcy9jZXBoL3hhdHRyLmMKaW5kZXggOGM5ZWJhNi4uZjJiNjI4NiAxMDA2NDQKLS0tIGEvZnMvY2VwaC94YXR0ci5jCisrKyBiL2ZzL2NlcGgveGF0dHIuYwpAQCAtNzAzLDYgKzcwMyw3IEBACiAJc3RydWN0IGNlcGhfaW5vZGVfeGF0dHIgKnhhdHRyID0gTlVMTDsKIAlpbnQgaXNzdWVkOwogCWludCByZXF1aXJlZF9ibG9iX3NpemU7CisJaW50IGRpcnR5OwogCiAJaWYgKGNlcGhfc25hcChpbm9kZSkgIT0gQ0VQSF9OT1NOQVApCiAJCXJldHVybiAtRVJPRlM7CkBAIC03NjMsMTEgKzc2NCwxMiBAQAogCWRvdXQoInNldHhhdHRyICVwIGlzc3VlZCAlc1xuIiwgaW5vZGUsIGNlcGhfY2FwX3N0cmluZyhpc3N1ZWQpKTsKIAllcnIgPSBfX3NldF94YXR0cihjaSwgbmV3bmFtZSwgbmFtZV9sZW4sIG5ld3ZhbCwKIAkJCSAgdmFsX2xlbiwgMSwgMSwgMSwgJnhhdHRyKTsKLQlfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9YQVRUUl9FWENMKTsKKwlkaXJ0eSA9IF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX1hBVFRSX0VYQ0wpOwogCWNpLT5pX3hhdHRycy5kaXJ0eSA9IHRydWU7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCisJaWYgKGRpcnR5KQorCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGRpcnR5KTsKIAlyZXR1cm4gZXJyOwogCiBkb19zeW5jOgpAQCAtODEwLDYgKzgxMiw3IEBACiAJc3RydWN0IGNlcGhfdnhhdHRyX2NiICp2eGF0dHJzID0gY2VwaF9pbm9kZV92eGF0dHJzKGlub2RlKTsKIAlpbnQgaXNzdWVkOwogCWludCBlcnI7CisJaW50IGRpcnR5OwogCiAJaWYgKGNlcGhfc25hcChpbm9kZSkgIT0gQ0VQSF9OT1NOQVApCiAJCXJldHVybiAtRVJPRlM7CkBAIC04MzMsMTIgKzgzNiwxMyBAQAogCQlnb3RvIGRvX3N5bmM7CiAKIAllcnIgPSBfX3JlbW92ZV94YXR0cl9ieV9uYW1lKGNlcGhfaW5vZGUoaW5vZGUpLCBuYW1lKTsKLQlfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9YQVRUUl9FWENMKTsKKwlkaXJ0eSA9IF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX1hBVFRSX0VYQ0wpOwogCWNpLT5pX3hhdHRycy5kaXJ0eSA9IHRydWU7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0KKwlpZiAoZGlydHkpCisJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgZGlydHkpOwogCXJldHVybiBlcnI7CiBkb19zeW5jOgogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQVVUSE9SUyBiL2ZzL2NpZnMvQVVUSE9SUwppbmRleCA3ZjdmYTNjLi5lYTk0MGIxIDEwMDY0NAotLS0gYS9mcy9jaWZzL0FVVEhPUlMKKysrIGIvZnMvY2lmcy9BVVRIT1JTCkBAIC0zNSw3ICszNSw3IEBACiBNaWtsb3MgU3plcmVkaSAKIEthemVvbiB0ZWFtIGZvciB2YXJpb3VzIGZpeGVzIGVzcGVjaWFsbHkgZm9yIDIuNCB2ZXJzaW9uLgogQXNzZXIgRmVybm8gKENoYW5nZSBOb3RpZnkgc3VwcG9ydCkKLVNoYWdneSAoRGF2ZSBLbGVpa2FtcCkgZm9yIGludW1lcmFibGUgc21hbGwgZnMgc3VnZ2VzdGlvbnMgYW5kIHNvbWUgZ29vZCBjbGVhbnVwCitTaGFnZ3kgKERhdmUgS2xlaWthbXApIGZvciBpbm51bWVyYWJsZSBzbWFsbCBmcyBzdWdnZXN0aW9ucyBhbmQgc29tZSBnb29kIGNsZWFudXAKIEd1bnRlciBLdWtrdWtrICh0ZXN0aW5nIGFuZCBzdWdnZXN0aW9ucyBmb3Igc3VwcG9ydCBvZiBvbGQgc2VydmVycykKIElnb3IgTWFtbWVkb3YgKERGUyBzdXBwb3J0KQogSmVmZiBMYXl0b24gKG1hbnksIG1hbnkgZml4ZXMsIGFzIHdlbGwgYXMgZ3JlYXQgd29yayBvbiB0aGUgY2lmcyBLZXJiZXJvcyBjb2RlKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9SRUFETUUgYi9mcy9jaWZzL1JFQURNRQppbmRleCBmZTE2ODM1Li43NGFiMTY1ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTY4NSwyMiArNjg1LDYgQEAKIAkJCXN1cHBvcnQgYW5kIHdhbnQgdG8gbWFwIHRoZSB1aWQgYW5kIGdpZCBmaWVsZHMgCiAJCQl0byB2YWx1ZXMgc3VwcGxpZWQgYXQgbW91bnQgKHJhdGhlciB0aGFuIHRoZSAKIAkJCWFjdHVhbCB2YWx1ZXMsIHRoZW4gc2V0IHRoaXMgdG8gemVyby4gKGRlZmF1bHQgMSkKLUV4cGVyaW1lbnRhbCAgICAgICAgICAgIFdoZW4gc2V0IHRvIDEgdXNlZCB0byBlbmFibGUgY2VydGFpbiBleHBlcmltZW50YWwKLQkJCWZlYXR1cmVzIChjdXJyZW50bHkgZW5hYmxlcyBtdWx0aXBhZ2Ugd3JpdGVzCi0JCQl3aGVuIHNpZ25pbmcgaXMgZW5hYmxlZCwgdGhlIG11bHRpcGFnZSB3cml0ZQotCQkJcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgd2FzIGRpc2FibGVkIHdoZW4KLQkJCXNpZ25pbmcgdHVybmVkIG9uIGluIGNhc2UgYnVmZmVyIHdhcyBtb2RpZmllZAotCQkJanVzdCBiZWZvcmUgaXQgd2FzIHNlbnQsIGFsc28gdGhpcyBmbGFnIHdpbGwKLQkJCWJlIHVzZWQgdG8gdXNlIHRoZSBuZXcgZXhwZXJpbWVudGFsIGRpcmVjdG9yeSBjaGFuZ2UgCi0JCQlub3RpZmljYXRpb24gY29kZSkuICBXaGVuIHNldCB0byAyIGVuYWJsZXMKLQkJCWFuIGFkZGl0aW9uYWwgZXhwZXJpbWVudGFsIGZlYXR1cmUsICJyYXcgbnRsbXNzcCIKLQkJCXNlc3Npb24gZXN0YWJsaXNobWVudCBzdXBwb3J0ICh3aGljaCBhbGxvd3MKLQkJCXNwZWNpZnlpbmcgInNlYz1udGxtc3NwIiBvbiBtb3VudCkuIFRoZSBMaW51eCBjaWZzCi0JCQltb2R1bGUgd2lsbCB1c2UgbnRsbXYyIGF1dGhlbnRpY2F0aW9uIGVuY2Fwc3VsYXRlZAotCQkJaW4gInJhdyBudGxtc3NwIiAobm90IHVzaW5nIFNQTkVHTykgd2hlbgotCQkJInNlYz1udGxtc3NwIiBpcyBzcGVjaWZpZWQgb24gbW91bnQuCi0JCQlUaGlzIHN1cHBvcnQgYWxzbyByZXF1aXJlcyBidWlsZGluZyBjaWZzIHdpdGgKLQkJCXRoZSBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgY29uZmlndXJhdGlvbiBmbGFnLgogCiBUaGVzZSBleHBlcmltZW50YWwgZmVhdHVyZXMgYW5kIHRyYWNpbmcgY2FuIGJlIGVuYWJsZWQgYnkgY2hhbmdpbmcgZmxhZ3MgaW4gCiAvcHJvYy9mcy9jaWZzIChhZnRlciB0aGUgY2lmcyBtb2R1bGUgaGFzIGJlZW4gaW5zdGFsbGVkIG9yIGJ1aWx0IGludG8gdGhlIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jYWNoZS5jIGIvZnMvY2lmcy9jYWNoZS5jCmluZGV4IGU2NTRkZmQuLjUzZDU3YTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2FjaGUuYworKysgYi9mcy9jaWZzL2NhY2hlLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqLwogc3RydWN0IGNpZnNfc2VydmVyX2tleSB7CiAJdWludDE2X3QJZmFtaWx5OwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KLQl1aW50MTZfdAlwb3J0OwkJLyogSVAgcG9ydCAqLworCV9fYmUxNgkJcG9ydDsJCS8qIElQIHBvcnQgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCBpbl9hZGRyCWlwdjRfYWRkcjsKIAkJc3RydWN0IGluNl9hZGRyCWlwdjZfYWRkcjsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggNjU4MjlkMy4uMzBkMDFiYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTQyMyw3ICs0MjMsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2VTTUJfcHJvY19mb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19tdWx0aXVzZXJfbW91bnRfcHJvY19mb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19zZWN1cml0eV9mbGFnc19wcm9jX2ZvcHM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX2ZvcHM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaWZzX2xpbnV4X2V4dF9wcm9jX2ZvcHM7CiAKIHZvaWQKQEAgLTQ0MSw4ICs0NDAsNiBAQAogCXByb2NfY3JlYXRlKCJjaWZzRllJIiwgMCwgcHJvY19mc19jaWZzLCAmY2lmc0ZZSV9wcm9jX2ZvcHMpOwogCXByb2NfY3JlYXRlKCJ0cmFjZVNNQiIsIDAsIHByb2NfZnNfY2lmcywgJnRyYWNlU01CX3Byb2NfZm9wcyk7CiAJcHJvY19jcmVhdGUoIk9wbG9ja0VuYWJsZWQiLCAwLCBwcm9jX2ZzX2NpZnMsICZjaWZzX29wbG9ja19wcm9jX2ZvcHMpOwotCXByb2NfY3JlYXRlKCJFeHBlcmltZW50YWwiLCAwLCBwcm9jX2ZzX2NpZnMsCi0JCSAgICAmY2lmc19leHBlcmltZW50YWxfcHJvY19mb3BzKTsKIAlwcm9jX2NyZWF0ZSgiTGludXhFeHRlbnNpb25zRW5hYmxlZCIsIDAsIHByb2NfZnNfY2lmcywKIAkJICAgICZjaWZzX2xpbnV4X2V4dF9wcm9jX2ZvcHMpOwogCXByb2NfY3JlYXRlKCJNdWx0aXVzZXJNb3VudCIsIDAsIHByb2NfZnNfY2lmcywKQEAgLTQ2OSw3ICs0NjYsNiBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KCJPcGxvY2tFbmFibGVkIiwgcHJvY19mc19jaWZzKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgiU2VjdXJpdHlGbGFncyIsIHByb2NfZnNfY2lmcyk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoIkxpbnV4RXh0ZW5zaW9uc0VuYWJsZWQiLCBwcm9jX2ZzX2NpZnMpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJFeHBlcmltZW50YWwiLCBwcm9jX2ZzX2NpZnMpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJMb29rdXBDYWNoZUVuYWJsZWQiLCBwcm9jX2ZzX2NpZnMpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9jaWZzIiwgTlVMTCk7CiB9CkBAIC01NTAsNDUgKzU0Niw2IEBACiAJLndyaXRlCQk9IGNpZnNfb3Bsb2NrX3Byb2Nfd3JpdGUsCiB9OwogCi1zdGF0aWMgaW50IGNpZnNfZXhwZXJpbWVudGFsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc2VxX3ByaW50ZihtLCAiJWRcbiIsIGV4cGVyaW1FbmFibGVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNpZnNfZXhwZXJpbWVudGFsX3Byb2Nfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNpZnNfZXhwZXJpbWVudGFsX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgYzsKLQlpbnQgcmM7Ci0KLQlyYyA9IGdldF91c2VyKGMsIGJ1ZmZlcik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JaWYgKGMgPT0gJzAnIHx8IGMgPT0gJ24nIHx8IGMgPT0gJ04nKQotCQlleHBlcmltRW5hYmxlZCA9IDA7Ci0JZWxzZSBpZiAoYyA9PSAnMScgfHwgYyA9PSAneScgfHwgYyA9PSAnWScpCi0JCWV4cGVyaW1FbmFibGVkID0gMTsKLQllbHNlIGlmIChjID09ICcyJykKLQkJZXhwZXJpbUVuYWJsZWQgPSAyOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGNpZnNfZXhwZXJpbWVudGFsX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotCS53cml0ZQkJPSBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX3dyaXRlLAotfTsKLQogc3RhdGljIGludCBjaWZzX2xpbnV4X2V4dF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXNlcV9wcmludGYobSwgIiVkXG4iLCBsaW51eEV4dEVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKaW5kZXggMGEyNjVhZC4uMmI2OGFjNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYworKysgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCkBAIC01Myw3ICs1Myw3IEBACiAgKgogICogRXh0cmFjdHMgc2hhcmVuYW1lIGZvcm0gZnVsbCBVTkMuCiAgKiBpLmUuIHN0cmlwcyBmcm9tIFVOQyB0cmFpbGluZyBwYXRoIHRoYXQgaXMgbm90IHBhcnQgb2Ygc2hhcmUKLSAqIG5hbWUgYW5kIGZpeHVwIG1pc3NpbmcgJ1wnIGluIHRoZSBiZWdpbmluZyBvZiBERlMgbm9kZSByZWZmZXJhbAorICogbmFtZSBhbmQgZml4dXAgbWlzc2luZyAnXCcgaW4gdGhlIGJlZ2lubmluZyBvZiBERlMgbm9kZSByZWZmZXJhbAogICogaWYgbmVjZXNzYXJ5LgogICogUmV0dXJucyBwb2ludGVyIHRvIHNoYXJlIG5hbWUgb24gc3VjY2VzcyBvciBFUlJfUFRSIG9uIGVycm9yLgogICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHJldHVybmVkIHN0cmluZy4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19zcG5lZ28uYyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwppbmRleCA0ZGZiYTgyLi4zM2QyMjEzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKKysrIGIvZnMvY2lmcy9jaWZzX3NwbmVnby5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJICAgTUFYX01FQ0hfU1RSX0xFTiArCiAJCSAgIFVJRF9LRVlfTEVOICsgKHNpemVvZih1aWRfdCkgKiAyKSArCiAJCSAgIENSRURVSURfS0VZX0xFTiArIChzaXplb2YodWlkX3QpICogMikgKwotCQkgICBVU0VSX0tFWV9MRU4gKyBzdHJsZW4oc2VzSW5mby0+dXNlck5hbWUpICsKKwkJICAgVVNFUl9LRVlfTEVOICsgc3RybGVuKHNlc0luZm8tPnVzZXJfbmFtZSkgKwogCQkgICBQSURfS0VZX0xFTiArIChzaXplb2YocGlkX3QpICogMikgKyAxOwogCiAJc3BuZWdvX2tleSA9IEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAlzcHJpbnRmKGRwLCAiO2NyZWR1aWQ9MHgleCIsIHNlc0luZm8tPmNyZWRfdWlkKTsKIAogCWRwID0gZGVzY3JpcHRpb24gKyBzdHJsZW4oZGVzY3JpcHRpb24pOwotCXNwcmludGYoZHAsICI7dXNlcj0lcyIsIHNlc0luZm8tPnVzZXJOYW1lKTsKKwlzcHJpbnRmKGRwLCAiO3VzZXI9JXMiLCBzZXNJbmZvLT51c2VyX25hbWUpOwogCiAJZHAgPSBkZXNjcmlwdGlvbiArIHN0cmxlbihkZXNjcmlwdGlvbik7CiAJc3ByaW50ZihkcCwgIjtwaWQ9MHgleCIsIGN1cnJlbnQtPnBpZCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwppbmRleCBmYzBmZDRmLi4xYjJlMTgwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCisrKyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAljYXNlIFVOSV9DT0xPTjoKIAkJKnRhcmdldCA9ICc6JzsKIAkJYnJlYWs7Ci0JY2FzZSBVTklfQVNURVJJSzoKKwljYXNlIFVOSV9BU1RFUklTSzoKIAkJKnRhcmdldCA9ICcqJzsKIAkJYnJlYWs7CiAJY2FzZSBVTklfUVVFU1RJT046CkBAIC0yNjQsNDAgKzI2NCw0MSBAQAogICogbmFtZXMgYXJlIGxpdHRsZSBlbmRpYW4gMTYgYml0IFVuaWNvZGUgb24gdGhlIHdpcmUKICAqLwogaW50Ci1jaWZzQ29udmVydFRvVUNTKF9fbGUxNiAqdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UsIGludCBtYXhsZW4sCitjaWZzQ29udmVydFRvVUNTKF9fbGUxNiAqdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UsIGludCBzcmNsZW4sCiAJCSBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpjcCwgaW50IG1hcENoYXJzKQogewogCWludCBpLCBqLCBjaGFybGVuOwotCWludCBsZW5fcmVtYWluaW5nID0gbWF4bGVuOwogCWNoYXIgc3JjX2NoYXI7Ci0JX191MTYgdGVtcDsKKwlfX2xlMTYgZHN0X2NoYXI7CisJd2NoYXJfdCB0bXA7CiAKIAlpZiAoIW1hcENoYXJzKQogCQlyZXR1cm4gY2lmc19zdHJ0b1VDUyh0YXJnZXQsIHNvdXJjZSwgUEFUSF9NQVgsIGNwKTsKIAotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbWF4bGVuOyBqKyspIHsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHNyY2xlbjsgaisrKSB7CiAJCXNyY19jaGFyID0gc291cmNlW2ldOworCQljaGFybGVuID0gMTsKIAkJc3dpdGNoIChzcmNfY2hhcikgewogCQljYXNlIDA6Ci0JCQlwdXRfdW5hbGlnbmVkX2xlMTYoMCwgJnRhcmdldFtqXSk7CisJCQlwdXRfdW5hbGlnbmVkKDAsICZ0YXJnZXRbal0pOwogCQkJZ290byBjdG9VQ1Nfb3V0OwogCQljYXNlICc6JzoKLQkJCXRlbXAgPSBVTklfQ09MT047CisJCQlkc3RfY2hhciA9IGNwdV90b19sZTE2KFVOSV9DT0xPTik7CiAJCQlicmVhazsKIAkJY2FzZSAnKic6Ci0JCQl0ZW1wID0gVU5JX0FTVEVSSUs7CisJCQlkc3RfY2hhciA9IGNwdV90b19sZTE2KFVOSV9BU1RFUklTSyk7CiAJCQlicmVhazsKIAkJY2FzZSAnPyc6Ci0JCQl0ZW1wID0gVU5JX1FVRVNUSU9OOworCQkJZHN0X2NoYXIgPSBjcHVfdG9fbGUxNihVTklfUVVFU1RJT04pOwogCQkJYnJlYWs7CiAJCWNhc2UgJzwnOgotCQkJdGVtcCA9IFVOSV9MRVNTVEhBTjsKKwkJCWRzdF9jaGFyID0gY3B1X3RvX2xlMTYoVU5JX0xFU1NUSEFOKTsKIAkJCWJyZWFrOwogCQljYXNlICc+JzoKLQkJCXRlbXAgPSBVTklfR1JUUlRIQU47CisJCQlkc3RfY2hhciA9IGNwdV90b19sZTE2KFVOSV9HUlRSVEhBTik7CiAJCQlicmVhazsKIAkJY2FzZSAnfCc6Ci0JCQl0ZW1wID0gVU5JX1BJUEU7CisJCQlkc3RfY2hhciA9IGNwdV90b19sZTE2KFVOSV9QSVBFKTsKIAkJCWJyZWFrOwogCQkvKgogCQkgKiBGSVhNRTogV2UgY2FuIG5vdCBoYW5kbGUgcmVtYXBwaW5nIGJhY2tzbGFzaCAoVU5JX1NMQVNIKQpAQCAtMzA1LDI4ICszMDYsMjQgQEAKIAkJICogYXMgdGhleSB1c2UgYmFja3NsYXNoIGFzIHNlcGFyYXRvci4KIAkJICovCiAJCWRlZmF1bHQ6Ci0JCQljaGFybGVuID0gY3AtPmNoYXIydW5pKHNvdXJjZStpLCBsZW5fcmVtYWluaW5nLAotCQkJCQkJJnRlbXApOworCQkJY2hhcmxlbiA9IGNwLT5jaGFyMnVuaShzb3VyY2UgKyBpLCBzcmNsZW4gLSBpLCAmdG1wKTsKKwkJCWRzdF9jaGFyID0gY3B1X3RvX2xlMTYodG1wKTsKKwogCQkJLyoKIAkJCSAqIGlmIG5vIG1hdGNoLCB1c2UgcXVlc3Rpb24gbWFyaywgd2hpY2ggYXQgbGVhc3QgaW4KIAkJCSAqIHNvbWUgY2FzZXMgc2VydmVzIGFzIHdpbGQgY2FyZAogCQkJICovCiAJCQlpZiAoY2hhcmxlbiA8IDEpIHsKLQkJCQl0ZW1wID0gMHgwMDNmOworCQkJCWRzdF9jaGFyID0gY3B1X3RvX2xlMTYoMHgwMDNmKTsKIAkJCQljaGFybGVuID0gMTsKIAkJCX0KLQkJCWxlbl9yZW1haW5pbmcgLT0gY2hhcmxlbjsKLQkJCS8qCi0JCQkgKiBjaGFyYWN0ZXIgbWF5IHRha2UgbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBzb3VyY2UKLQkJCSAqIHN0cmluZywgYnV0IHdpbGwgdGFrZSBleGFjdGx5IHR3byBieXRlcyBpbiB0aGUKLQkJCSAqIHRhcmdldCBzdHJpbmcKLQkJCSAqLwotCQkJaSArPSBjaGFybGVuOwotCQkJY29udGludWU7CiAJCX0KLQkJcHV0X3VuYWxpZ25lZF9sZTE2KHRlbXAsICZ0YXJnZXRbal0pOwotCQlpKys7IC8qIG1vdmUgdG8gbmV4dCBjaGFyIGluIHNvdXJjZSBzdHJpbmcgKi8KLQkJbGVuX3JlbWFpbmluZy0tOworCQkvKgorCQkgKiBjaGFyYWN0ZXIgbWF5IHRha2UgbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBzb3VyY2Ugc3RyaW5nLAorCQkgKiBidXQgd2lsbCB0YWtlIGV4YWN0bHkgdHdvIGJ5dGVzIGluIHRoZSB0YXJnZXQgc3RyaW5nCisJCSAqLworCQlpICs9IGNoYXJsZW47CisJCXB1dF91bmFsaWduZWQoZHN0X2NoYXIsICZ0YXJnZXRbal0pOwogCX0KIAogY3RvVUNTX291dDoKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmggYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5oCmluZGV4IDdmZTZiNTIuLjY0NGRkODgyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5oCisrKyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqIHJlc2VydmVkIHN5bWJvbHMgKGFsb25nIHdpdGggXCBhbmQgLyksIG90aGVyd2lzZSBpbGxlZ2FsIHRvIHN0b3JlCiAgKiBpbiBmaWxlbmFtZXMgaW4gTlRGUwogICovCi0jZGVmaW5lIFVOSV9BU1RFUklLICAgICAoX191MTYpICgnKicgKyAweEYwMDApCisjZGVmaW5lIFVOSV9BU1RFUklTSyAgICAoX191MTYpICgnKicgKyAweEYwMDApCiAjZGVmaW5lIFVOSV9RVUVTVElPTiAgICAoX191MTYpICgnPycgKyAweEYwMDApCiAjZGVmaW5lIFVOSV9DT0xPTiAgICAgICAoX191MTYpICgnOicgKyAweEYwMDApCiAjZGVmaW5lIFVOSV9HUlRSVEhBTiAgICAoX191MTYpICgnPicgKyAweEYwMDApCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggYTUxNTg1Zi4uZDFhMDE2YiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KIAotLyogQ2FsY3VsYXRlIGFuZCByZXR1cm4gdGhlIENJRlMgc2lnbmF0dXJlIGJhc2VkIG9uIHRoZSBtYWMga2V5IGFuZCBTTUIgUERVICovCi0vKiB0aGUgMTYgYnl0ZSBzaWduYXR1cmUgbXVzdCBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlciAgKi8KLS8qIE5vdGUgd2Ugb25seSB1c2UgdGhlIDFzdCBlaWdodCBieXRlcyAqLwotLyogTm90ZSB0aGF0IHRoZSBzbWIgaGVhZGVyIHNpZ25hdHVyZSBmaWVsZCBvbiBpbnB1dCBjb250YWlucyB0aGUKLQlzZXF1ZW5jZSBudW1iZXIgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkICovCi0KKy8qCisgKiBDYWxjdWxhdGUgYW5kIHJldHVybiB0aGUgQ0lGUyBzaWduYXR1cmUgYmFzZWQgb24gdGhlIG1hYyBrZXkgYW5kIFNNQiBQRFUuCisgKiBUaGUgMTYgYnl0ZSBzaWduYXR1cmUgbXVzdCBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB3ZSBvbmx5IHVzZSB0aGUKKyAqIDFzdCBlaWdodCBieXRlcyBhbmQgdGhhdCB0aGUgc21iIGhlYWRlciBzaWduYXR1cmUgZmllbGQgb24gaW5wdXQgY29udGFpbnMKKyAqIHRoZSBzZXF1ZW5jZSBudW1iZXIgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBBbHNvLCB0aGlzIGZ1bmN0aW9uCisgKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHNlcnZlci0+c3J2X211dGV4IGhlbGQuCisgKi8KIHN0YXRpYyBpbnQgY2lmc19jYWxjdWxhdGVfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBzbWJfaGRyICpjaWZzX3BkdSwKIAkJCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIGNoYXIgKnNpZ25hdHVyZSkKIHsKQEAgLTIwOSw4ICsyMTAsMTAgQEAKIAkJCQkJY3B1X3RvX2xlMzIoZXhwZWN0ZWRfc2VxdWVuY2VfbnVtYmVyKTsKIAljaWZzX3BkdS0+U2lnbmF0dXJlLlNlcXVlbmNlLlJlc2VydmVkID0gMDsKIAorCW11dGV4X2xvY2soJnNlcnZlci0+c3J2X211dGV4KTsKIAlyYyA9IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjaWZzX3BkdSwgc2VydmVyLAogCQl3aGF0X3dlX3RoaW5rX3NpZ19zaG91bGRfYmUpOworCW11dGV4X3VubG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOwogCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC00NjksMTUgKzQ3MiwxNSBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JLyogY29udmVydCBzZXMtPnVzZXJOYW1lIHRvIHVuaWNvZGUgYW5kIHVwcGVyY2FzZSAqLwotCWxlbiA9IHN0cmxlbihzZXMtPnVzZXJOYW1lKTsKKwkvKiBjb252ZXJ0IHNlcy0+dXNlcl9uYW1lIHRvIHVuaWNvZGUgYW5kIHVwcGVyY2FzZSAqLworCWxlbiA9IHN0cmxlbihzZXMtPnVzZXJfbmFtZSk7CiAJdXNlciA9IGttYWxsb2MoMiArIChsZW4gKiAyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVzZXIgPT0gTlVMTCkgewogCQljRVJST1IoMSwgImNhbGNfbnRsbXYyX2hhc2g6IHVzZXIgbWVtIGFsbG9jIGZhaWx1cmVcbiIpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gY2FsY19leGl0XzI7CiAJfQotCWxlbiA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKXVzZXIsIHNlcy0+dXNlck5hbWUsIGxlbiwgbmxzX2NwKTsKKwlsZW4gPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKil1c2VyLCBzZXMtPnVzZXJfbmFtZSwgbGVuLCBubHNfY3ApOwogCVVuaVN0cnVwcih1c2VyKTsKIAogCWNyeXB0b19zaGFzaF91cGRhdGUoJnNlcy0+c2VydmVyLT5zZWNtZWNoLnNkZXNjaG1hY21kNS0+c2hhc2gsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCBmMjk3MDEzLi41YzQxMmIzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTUzLDcgKzUzLDYgQEAKIGludCBjaWZzRVJST1IgPSAxOwogaW50IHRyYWNlU01CID0gMDsKIHVuc2lnbmVkIGludCBvcGxvY2tFbmFibGVkID0gMTsKLXVuc2lnbmVkIGludCBleHBlcmltRW5hYmxlZCA9IDA7CiB1bnNpZ25lZCBpbnQgbGludXhFeHRFbmFibGVkID0gMTsKIHVuc2lnbmVkIGludCBsb29rdXBDYWNoZUVuYWJsZWQgPSAxOwogdW5zaWduZWQgaW50IG11bHRpdXNlcl9tb3VudCA9IDA7CkBAIC0xMjcsNiArMTI2LDcgQEAKIAkJa2ZyZWUoY2lmc19zYik7CiAJCXJldHVybiByYzsKIAl9CisJY2lmc19zYi0+YmRpLnJhX3BhZ2VzID0gZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLnJhX3BhZ2VzOwogCiAjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAogCS8qIGNvcHkgbW91bnQgcGFyYW1zIHRvIHNiIGZvciB1c2UgaW4gc3VibW91bnRzICovCkBAIC00MDksOCArNDA5LDggQEAKIAogCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTVVMVElVU0VSKQogCQlzZXFfcHJpbnRmKHMsICIsbXVsdGl1c2VyIik7Ci0JZWxzZSBpZiAodGNvbi0+c2VzLT51c2VyTmFtZSkKLQkJc2VxX3ByaW50ZihzLCAiLHVzZXJuYW1lPSVzIiwgdGNvbi0+c2VzLT51c2VyTmFtZSk7CisJZWxzZSBpZiAodGNvbi0+c2VzLT51c2VyX25hbWUpCisJCXNlcV9wcmludGYocywgIix1c2VybmFtZT0lcyIsIHRjb24tPnNlcy0+dXNlcl9uYW1lKTsKIAogCWlmICh0Y29uLT5zZXMtPmRvbWFpbk5hbWUpCiAJCXNlcV9wcmludGYocywgIixkb21haW49JXMiLCB0Y29uLT5zZXMtPmRvbWFpbk5hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDE3YWZiMGYuLmE1ZDExMDYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTM3LDEwICszNyw5IEBACiAKICNkZWZpbmUgTUFYX1RSRUVfU0laRSAoMiArIE1BWF9TRVJWRVJfU0laRSArIDEgKyBNQVhfU0hBUkVfU0laRSArIDEpCiAjZGVmaW5lIE1BWF9TRVJWRVJfU0laRSAxNQotI2RlZmluZSBNQVhfU0hBUkVfU0laRSAgNjQJLyogdXNlZCB0byBiZSAyMCwgdGhpcyBzaG91bGQgc3RpbGwgYmUgZW5vdWdoICovCi0jZGVmaW5lIE1BWF9VU0VSTkFNRV9TSVpFIDMyCS8qIDMyIGlzIHRvIGFsbG93IGZvciAxNSBjaGFyIG5hbWVzICsgbnVsbAotCQkJCSAgIHRlcm1pbmF0aW9uIHRoZW4gKjIgZm9yIHVuaWNvZGUgdmVyc2lvbnMgKi8KLSNkZWZpbmUgTUFYX1BBU1NXT1JEX1NJWkUgNTEyICAvKiBtYXggZm9yIHdpbmRvd3Mgc2VlbXMgdG8gYmUgMjU2IHdpZGUgY2hhcnMgKi8KKyNkZWZpbmUgTUFYX1NIQVJFX1NJWkUgODAKKyNkZWZpbmUgTUFYX1VTRVJOQU1FX1NJWkUgMjU2CS8qIHJlYXNvbmFibGUgbWF4aW11bSBmb3IgY3VycmVudCBzZXJ2ZXJzICovCisjZGVmaW5lIE1BWF9QQVNTV09SRF9TSVpFIDUxMgkvKiBtYXggZm9yIHdpbmRvd3Mgc2VlbXMgdG8gYmUgMjU2IHdpZGUgY2hhcnMgKi8KIAogI2RlZmluZSBDSUZTX01JTl9SQ1ZfUE9PTCA0CiAKQEAgLTkyLDcgKzkxLDggQEAKIAlDaWZzTmV3ID0gMCwKIAlDaWZzR29vZCwKIAlDaWZzRXhpdGluZywKLQlDaWZzTmVlZFJlY29ubmVjdAorCUNpZnNOZWVkUmVjb25uZWN0LAorCUNpZnNOZWVkTmVnb3RpYXRlCiB9OwogCiBlbnVtIHNlY3VyaXR5RW51bSB7CkBAIC0yNzQsNyArMjc0LDcgQEAKIAlpbnQgY2FwYWJpbGl0aWVzOwogCWNoYXIgc2VydmVyTmFtZVtTRVJWRVJfTkFNRV9MRU5fV0lUSF9OVUxMICogMl07CS8qIEJCIG1ha2UgYmlnZ2VyIGZvcgogCQkJCVRDUCBuYW1lcyAtIHdpbGwgaXB2NiBhbmQgc2N0cCBhZGRyZXNzZXMgZml0PyAqLwotCWNoYXIgdXNlck5hbWVbTUFYX1VTRVJOQU1FX1NJWkUgKyAxXTsKKwljaGFyICp1c2VyX25hbWU7CiAJY2hhciAqZG9tYWluTmFtZTsKIAljaGFyICpwYXNzd29yZDsKIAlzdHJ1Y3Qgc2Vzc2lvbl9rZXkgYXV0aF9rZXk7CkBAIC04MTcsNyArODE3LDYgQEAKIAkJCQloYXZlIHRoZSB1aWQvcGFzc3dvcmQgb3IgS2VyYmVyb3MgY3JlZGVudGlhbAogCQkJCW9yIGVxdWl2YWxlbnQgZm9yIGN1cnJlbnQgdXNlciAqLwogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgb3Bsb2NrRW5hYmxlZDsKLUdMT0JBTF9FWFRFUk4gdW5zaWduZWQgaW50IGV4cGVyaW1FbmFibGVkOwogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgbG9va3VwQ2FjaGVFbmFibGVkOwogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgZ2xvYmFsX3NlY2ZsYWdzOwkvKiBpZiBvbiwgc2Vzc2lvbiBzZXR1cCBzZW50CiAJCQkJd2l0aCBtb3JlIHNlY3VyZSBudGxtc3NwMiBjaGFsbGVuZ2UvcmVzcCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCA5MDRhYTQ3Li5kZjk1OWJhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMTQyLDkgKzE0Miw5IEBACiAJICovCiAJd2hpbGUgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KSB7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHNlcnZlci0+cmVzcG9uc2VfcSwKLQkJCShzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzR29vZCksIDEwICogSFopOworCQkJKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNOZWVkUmVjb25uZWN0KSwgMTAgKiBIWik7CiAKLQkJLyogaXMgVENQIHNlc3Npb24gaXMgcmVlc3RhYmxpc2hlZCBub3cgPyovCisJCS8qIGFyZSB3ZSBzdGlsbCB0cnlpbmcgdG8gcmVjb25uZWN0PyAqLwogCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc05lZWRSZWNvbm5lY3QpCiAJCQlicmVhazsKIApAQCAtNzI5LDcgKzcyOSw3IEBACiAJCXJldHVybiByYzsKIAogCS8qIHNldCB1cCBlY2hvIHJlcXVlc3QgKi8KLQlzbWItPmhkci5UaWQgPSBjcHVfdG9fbGUxNigweGZmZmYpOworCXNtYi0+aGRyLlRpZCA9IDB4ZmZmZjsKIAlzbWItPmhkci5Xb3JkQ291bnQgPSAxOwogCXB1dF91bmFsaWduZWRfbGUxNigxLCAmc21iLT5FY2hvQ291bnQpOwogCXB1dF9iY2NfbGUoMSwgJnNtYi0+aGRyKTsKQEAgLTE4ODQsMTAgKzE4ODQsMTAgQEAKIAkJCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDSUZTX1dSTENLKSkKIAkJCQlwTG9ja0RhdGEtPmZsX3R5cGUgPSBGX1dSTENLOwogCi0JCQlwTG9ja0RhdGEtPmZsX3N0YXJ0ID0gcGFybV9kYXRhLT5zdGFydDsKLQkJCXBMb2NrRGF0YS0+ZmxfZW5kID0gcGFybV9kYXRhLT5zdGFydCArCi0JCQkJCQlwYXJtX2RhdGEtPmxlbmd0aCAtIDE7Ci0JCQlwTG9ja0RhdGEtPmZsX3BpZCA9IHBhcm1fZGF0YS0+cGlkOworCQkJcExvY2tEYXRhLT5mbF9zdGFydCA9IGxlNjRfdG9fY3B1KHBhcm1fZGF0YS0+c3RhcnQpOworCQkJcExvY2tEYXRhLT5mbF9lbmQgPSBwTG9ja0RhdGEtPmZsX3N0YXJ0ICsKKwkJCQkJbGU2NF90b19jcHUocGFybV9kYXRhLT5sZW5ndGgpIC0gMTsKKwkJCXBMb2NrRGF0YS0+ZmxfcGlkID0gbGUzMl90b19jcHUocGFybV9kYXRhLT5waWQpOwogCQl9CiAJfQogCkBAIC01MjQ3LDcgKzUyNDcsNyBAQAogCSAqIFNhbWJhIHNlcnZlciBpZ25vcmVzIHNldCBvZiBmaWxlIHNpemUgdG8gemVybyBkdWUgdG8gYnVncyBpbiBzb21lCiAJICogb2xkZXIgY2xpZW50cywgYnV0IHdlIHNob3VsZCBiZSBwcmVjaXNlIC0gd2UgdXNlIFNldEZpbGVTaXplIHRvCiAJICogc2V0IGZpbGUgc2l6ZSBhbmQgZG8gbm90IHdhbnQgdG8gdHJ1bmNhdGUgZmlsZSBzaXplIHRvIHplcm8KLQkgKiBhY2NpZGVudGx5IGFzIGhhcHBlbmVkIG9uIG9uZSBTYW1iYSBzZXJ2ZXIgYmV0YSBieSBwdXR0aW5nCisJICogYWNjaWRlbnRhbGx5IGFzIGhhcHBlbmVkIG9uIG9uZSBTYW1iYSBzZXJ2ZXIgYmV0YSBieSBwdXR0aW5nCiAJICogemVybyBpbnN0ZWFkIG9mIC0xIGhlcmUKIAkgKi8KIAlkYXRhX29mZnNldC0+RW5kT2ZGaWxlID0gY3B1X3RvX2xlNjQoTk9fQ0hBTkdFXzY0KTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggOGQ2YzE3YS4uMjc3MjYyYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE5OSw4ICsxOTksNyBAQAogCX0KIAlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCi0Jd2hpbGUgKChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzRXhpdGluZykgJiYKLQkgICAgICAgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNHb29kKSkgeworCXdoaWxlIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkgewogCQl0cnlfdG9fZnJlZXplKCk7CiAKIAkJLyogd2Ugc2hvdWxkIHRyeSBvbmx5IHRoZSBwb3J0IHdlIGNvbm5lY3RlZCB0byBiZWZvcmUgKi8KQEAgLTIxMiw3ICsyMTEsNyBAQAogCQkJYXRvbWljX2luYygmdGNwU2VzUmVjb25uZWN0Q291bnQpOwogCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0V4aXRpbmcpCi0JCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzR29vZDsKKwkJCQlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNOZWVkTmVnb3RpYXRlOwogCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJfQogCX0KQEAgLTI0OCwyNCArMjQ3LDI0IEBACiAJdG90YWxfZGF0YV9zaXplID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZwU01CdC0+dDJfcnNwLlRvdGFsRGF0YUNvdW50KTsKIAlkYXRhX2luX3RoaXNfcnNwID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZwU01CdC0+dDJfcnNwLkRhdGFDb3VudCk7CiAKLQlyZW1haW5pbmcgPSB0b3RhbF9kYXRhX3NpemUgLSBkYXRhX2luX3RoaXNfcnNwOwotCi0JaWYgKHJlbWFpbmluZyA9PSAwKQorCWlmICh0b3RhbF9kYXRhX3NpemUgPT0gZGF0YV9pbl90aGlzX3JzcCkKIAkJcmV0dXJuIDA7Ci0JZWxzZSBpZiAocmVtYWluaW5nIDwgMCkgeworCWVsc2UgaWYgKHRvdGFsX2RhdGFfc2l6ZSA8IGRhdGFfaW5fdGhpc19yc3ApIHsKIAkJY0ZZSSgxLCAidG90YWwgZGF0YSAlZCBzbWFsbGVyIHRoYW4gZGF0YSBpbiBmcmFtZSAlZCIsCiAJCQl0b3RhbF9kYXRhX3NpemUsIGRhdGFfaW5fdGhpc19yc3ApOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQljRllJKDEsICJtaXNzaW5nICVkIGJ5dGVzIGZyb20gdHJhbnNhY3QyLCBjaGVjayBuZXh0IHJlc3BvbnNlIiwKLQkJCXJlbWFpbmluZyk7Ci0JCWlmICh0b3RhbF9kYXRhX3NpemUgPiBtYXhCdWZTaXplKSB7Ci0JCQljRVJST1IoMSwgIlRvdGFsRGF0YVNpemUgJWQgaXMgb3ZlciBtYXhpbXVtIGJ1ZmZlciAlZCIsCi0JCQkJdG90YWxfZGF0YV9zaXplLCBtYXhCdWZTaXplKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiByZW1haW5pbmc7CiAJfQorCisJcmVtYWluaW5nID0gdG90YWxfZGF0YV9zaXplIC0gZGF0YV9pbl90aGlzX3JzcDsKKworCWNGWUkoMSwgIm1pc3NpbmcgJWQgYnl0ZXMgZnJvbSB0cmFuc2FjdDIsIGNoZWNrIG5leHQgcmVzcG9uc2UiLAorCQlyZW1haW5pbmcpOworCWlmICh0b3RhbF9kYXRhX3NpemUgPiBtYXhCdWZTaXplKSB7CisJCWNFUlJPUigxLCAiVG90YWxEYXRhU2l6ZSAlZCBpcyBvdmVyIG1heGltdW0gYnVmZmVyICVkIiwKKwkJCXRvdGFsX2RhdGFfc2l6ZSwgbWF4QnVmU2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmVtYWluaW5nOwogfQogCiBzdGF0aWMgaW50IGNvYWxlc2NlX3QyKHN0cnVjdCBzbWJfaGRyICpwc2Vjb25kLCBzdHJ1Y3Qgc21iX2hkciAqcFRhcmdldFNNQikKQEAgLTI3NSw3ICsyNzQsOCBAQAogCWNoYXIgKmRhdGFfYXJlYV9vZl90YXJnZXQ7CiAJY2hhciAqZGF0YV9hcmVhX29mX2J1ZjI7CiAJaW50IHJlbWFpbmluZzsKLQlfX3UxNiBieXRlX2NvdW50LCB0b3RhbF9kYXRhX3NpemUsIHRvdGFsX2luX2J1ZiwgdG90YWxfaW5fYnVmMjsKKwl1bnNpZ25lZCBpbnQgYnl0ZV9jb3VudCwgdG90YWxfaW5fYnVmOworCV9fdTE2IHRvdGFsX2RhdGFfc2l6ZSwgdG90YWxfaW5fYnVmMjsKIAogCXRvdGFsX2RhdGFfc2l6ZSA9IGdldF91bmFsaWduZWRfbGUxNigmcFNNQnQtPnQyX3JzcC5Ub3RhbERhdGFDb3VudCk7CiAKQEAgLTI4OCw3ICsyODgsNyBAQAogCXJlbWFpbmluZyA9IHRvdGFsX2RhdGFfc2l6ZSAtIHRvdGFsX2luX2J1ZjsKIAogCWlmIChyZW1haW5pbmcgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FUFJPVE87CiAKIAlpZiAocmVtYWluaW5nID09IDApIC8qIG5vdGhpbmcgdG8gZG8sIGlnbm9yZSAqLwogCQlyZXR1cm4gMDsKQEAgLTMwOSwyMCArMzA5LDI5IEBACiAJZGF0YV9hcmVhX29mX3RhcmdldCArPSB0b3RhbF9pbl9idWY7CiAKIAkvKiBjb3B5IHNlY29uZCBidWZmZXIgaW50byBlbmQgb2YgZmlyc3QgYnVmZmVyICovCi0JbWVtY3B5KGRhdGFfYXJlYV9vZl90YXJnZXQsIGRhdGFfYXJlYV9vZl9idWYyLCB0b3RhbF9pbl9idWYyKTsKIAl0b3RhbF9pbl9idWYgKz0gdG90YWxfaW5fYnVmMjsKKwkvKiBpcyB0aGUgcmVzdWx0IHRvbyBiaWcgZm9yIHRoZSBmaWVsZD8gKi8KKwlpZiAodG90YWxfaW5fYnVmID4gVVNIUlRfTUFYKQorCQlyZXR1cm4gLUVQUk9UTzsKIAlwdXRfdW5hbGlnbmVkX2xlMTYodG90YWxfaW5fYnVmLCAmcFNNQnQtPnQyX3JzcC5EYXRhQ291bnQpOworCisJLyogZml4IHVwIHRoZSBCQ0MgKi8KIAlieXRlX2NvdW50ID0gZ2V0X2JjY19sZShwVGFyZ2V0U01CKTsKIAlieXRlX2NvdW50ICs9IHRvdGFsX2luX2J1ZjI7CisJLyogaXMgdGhlIHJlc3VsdCB0b28gYmlnIGZvciB0aGUgZmllbGQ/ICovCisJaWYgKGJ5dGVfY291bnQgPiBVU0hSVF9NQVgpCisJCXJldHVybiAtRVBST1RPOwogCXB1dF9iY2NfbGUoYnl0ZV9jb3VudCwgcFRhcmdldFNNQik7CiAKIAlieXRlX2NvdW50ID0gcFRhcmdldFNNQi0+c21iX2J1Zl9sZW5ndGg7CiAJYnl0ZV9jb3VudCArPSB0b3RhbF9pbl9idWYyOwotCi0JLyogQkIgYWxzbyBhZGQgY2hlY2sgdGhhdCB3ZSBhcmUgbm90IGJleW9uZCBtYXhpbXVtIGJ1ZmZlciBzaXplICovCi0KKwkvKiBkb24ndCBhbGxvdyBidWZmZXIgdG8gb3ZlcmZsb3cgKi8KKwlpZiAoYnl0ZV9jb3VudCA+IENJRlNNYXhCdWZTaXplKQorCQlyZXR1cm4gLUVOT0JVRlM7CiAJcFRhcmdldFNNQi0+c21iX2J1Zl9sZW5ndGggPSBieXRlX2NvdW50OwogCisJbWVtY3B5KGRhdGFfYXJlYV9vZl90YXJnZXQsIGRhdGFfYXJlYV9vZl9idWYyLCB0b3RhbF9pbl9idWYyKTsKKwogCWlmIChyZW1haW5pbmcgPT0gdG90YWxfaW5fYnVmMikgewogCQljRllJKDEsICJmb3VuZCB0aGUgbGFzdCBzZWNvbmRhcnkgcmVzcG9uc2UiKTsKIAkJcmV0dXJuIDA7IC8qIHdlIGFyZSBkb25lICovCkBAIC00MjEsNyArNDMwLDcgQEAKIAkJcGR1X2xlbmd0aCA9IDQ7IC8qIGVub3VnaCB0byBnZXQgUkZDMTAwMSBoZWFkZXIgKi8KIAogaW5jb21wbGV0ZV9yY3Y6Ci0JCWlmIChlY2hvX3JldHJpZXMgPiAwICYmCisJCWlmIChlY2hvX3JldHJpZXMgPiAwICYmIHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNHb29kICYmCiAJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKwogCQkJCQkoZWNob19yZXRyaWVzICogU01CX0VDSE9fSU5URVJWQUwpKSkgewogCQkJY0VSUk9SKDEsICJTZXJ2ZXIgJXMgaGFzIG5vdCByZXNwb25kZWQgaW4gJWQgc2Vjb25kcy4gIgpAQCAtNjA4LDU5ICs2MTcsNjMgQEAKIAkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgewogCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOwogCi0JCQlpZiAoKG1pZF9lbnRyeS0+bWlkID09IHNtYl9idWZmZXItPk1pZCkgJiYKLQkJCSAgICAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpICYmCi0JCQkgICAgKG1pZF9lbnRyeS0+Y29tbWFuZCA9PSBzbWJfYnVmZmVyLT5Db21tYW5kKSkgewotCQkJCWlmIChsZW5ndGggPT0gMCAmJgotCQkJCSAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgewotCQkJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCi0JCQkJCWlzTXVsdGlSc3AgPSB0cnVlOwotCQkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgewotCQkJCQkJLyogbWVyZ2UgcmVzcG9uc2UgLSBmaXggdXAgMXN0Ki8KLQkJCQkJCWlmIChjb2FsZXNjZV90MihzbWJfYnVmZmVyLAotCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYpKSB7Ci0JCQkJCQkJbWlkX2VudHJ5LT5tdWx0aVJzcCA9Ci0JCQkJCQkJCSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkvKiBhbGwgcGFydHMgcmVjZWl2ZWQgKi8KLQkJCQkJCQltaWRfZW50cnktPm11bHRpRW5kID0KLQkJCQkJCQkJIHRydWU7Ci0JCQkJCQkJZ290byBtdWx0aV90Ml9mbmQ7Ci0JCQkJCQl9CisJCQlpZiAobWlkX2VudHJ5LT5taWQgIT0gc21iX2J1ZmZlci0+TWlkIHx8CisJCQkgICAgbWlkX2VudHJ5LT5taWRTdGF0ZSAhPSBNSURfUkVRVUVTVF9TVUJNSVRURUQgfHwKKwkJCSAgICBtaWRfZW50cnktPmNvbW1hbmQgIT0gc21iX2J1ZmZlci0+Q29tbWFuZCkgeworCQkJCW1pZF9lbnRyeSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChsZW5ndGggPT0gMCAmJgorCQkJICAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgeworCQkJCS8qIFdlIGhhdmUgYSBtdWx0aXBhcnQgdHJhbnNhY3QyIHJlc3AgKi8KKwkJCQlpc011bHRpUnNwID0gdHJ1ZTsKKwkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgeworCQkJCQkvKiBtZXJnZSByZXNwb25zZSAtIGZpeCB1cCAxc3QqLworCQkJCQlsZW5ndGggPSBjb2FsZXNjZV90MihzbWJfYnVmZmVyLAorCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYpOworCQkJCQlpZiAobGVuZ3RoID4gMCkgeworCQkJCQkJbGVuZ3RoID0gMDsKKwkJCQkJCW1pZF9lbnRyeS0+bXVsdGlSc3AgPSB0cnVlOworCQkJCQkJYnJlYWs7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoIWlzTGFyZ2VCdWYpIHsKLQkJCQkJCQljRVJST1IoMSwgIjFzdCB0cmFuczIgcmVzcCBuZWVkcyBiaWdidWYiKTsKLQkJCQkJLyogQkIgbWF5YmUgd2UgY2FuIGZpeCB0aGlzIHVwLCAgc3dpdGNoCi0JCQkJCSAgIHRvIGFscmVhZHkgYWxsb2NhdGVkIGxhcmdlIGJ1ZmZlcj8gKi8KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLyogSGF2ZSBmaXJzdCBidWZmZXIgKi8KLQkJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0KLQkJCQkJCQkJIHNtYl9idWZmZXI7Ci0JCQkJCQkJbWlkX2VudHJ5LT5sYXJnZUJ1ZiA9Ci0JCQkJCQkJCSB0cnVlOwotCQkJCQkJCWJpZ2J1ZiA9IE5VTEw7Ci0JCQkJCQl9CisJCQkJCQkvKiBhbGwgcGFydHMgcmVjZWl2ZWQgb3IKKwkJCQkJCSAqIHBhY2tldCBpcyBtYWxmb3JtZWQKKwkJCQkJCSAqLworCQkJCQkJbWlkX2VudHJ5LT5tdWx0aUVuZCA9IHRydWU7CisJCQkJCQlnb3RvIG11bHRpX3QyX2ZuZDsKIAkJCQkJfQotCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoIWlzTGFyZ2VCdWYpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBGSVhNRTogc3dpdGNoIHRvIGFscmVhZHkKKwkJCQkJCSAqICAgICAgICBhbGxvY2F0ZWQgbGFyZ2VidWY/CisJCQkJCQkgKi8KKwkJCQkJCWNFUlJPUigxLCAiMXN0IHRyYW5zMiByZXNwICIKKwkJCQkJCQkgICJuZWVkcyBiaWdidWYiKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIEhhdmUgZmlyc3QgYnVmZmVyICovCisJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0KKwkJCQkJCQkgc21iX2J1ZmZlcjsKKwkJCQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSB0cnVlOworCQkJCQkJYmlnYnVmID0gTlVMTDsKKwkJCQkJfQogCQkJCX0KLQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKLQkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gaXNMYXJnZUJ1ZjsKLW11bHRpX3QyX2ZuZDoKLQkJCQlpZiAobGVuZ3RoID09IDApCi0JCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQotCQkJCQkJCU1JRF9SRVNQT05TRV9SRUNFSVZFRDsKLQkJCQllbHNlCi0JCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQotCQkJCQkJCU1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JCQkJbWlkX2VudHJ5LT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKLSNlbmRpZgotCQkJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOwotCQkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCW1pZF9lbnRyeSA9IE5VTEw7CisJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKKwkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSBpc0xhcmdlQnVmOworbXVsdGlfdDJfZm5kOgorCQkJaWYgKGxlbmd0aCA9PSAwKQorCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVTUE9OU0VfUkVDRUlWRUQ7CisJCQllbHNlCisJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9IE1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJCQltaWRfZW50cnktPndoZW5fcmVjZWl2ZWQgPSBqaWZmaWVzOworI2VuZGlmCisJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKKwkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKKwkJCWJyZWFrOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAKQEAgLTgwOCw4ICs4MjEsNyBAQAogY2lmc19wYXJzZV9tb3VudF9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmRldm5hbWUsCiAJCQkgc3RydWN0IHNtYl92b2wgKnZvbCkKIHsKLQljaGFyICp2YWx1ZTsKLQljaGFyICpkYXRhOworCWNoYXIgKnZhbHVlLCAqZGF0YSwgKmVuZDsKIAl1bnNpZ25lZCBpbnQgIHRlbXBfbGVuLCBpLCBqOwogCWNoYXIgc2VwYXJhdG9yWzJdOwogCXNob3J0IGludCBvdmVycmlkZV91aWQgPSAtMTsKQEAgLTg1Miw2ICs4NjQsNyBAQAogCWlmICghb3B0aW9ucykKIAkJcmV0dXJuIDE7CiAKKwllbmQgPSBvcHRpb25zICsgc3RybGVuKG9wdGlvbnMpOwogCWlmIChzdHJuY21wKG9wdGlvbnMsICJzZXA9IiwgNCkgPT0gMCkgewogCQlpZiAob3B0aW9uc1s0XSAhPSAwKSB7CiAJCQlzZXBhcmF0b3JbMF0gPSBvcHRpb25zWzRdOwpAQCAtODgxLDcgKzg5NCw4IEBACiAJCQkJLyogbnVsbCB1c2VyLCBpZSBhbm9ueW1vdXMsIGF1dGhlbnRpY2F0aW9uICovCiAJCQkJdm9sLT5udWxsYXV0aCA9IDE7CiAJCQl9Ci0JCQlpZiAoc3Rybmxlbih2YWx1ZSwgMjAwKSA8IDIwMCkgeworCQkJaWYgKHN0cm5sZW4odmFsdWUsIE1BWF9VU0VSTkFNRV9TSVpFKSA8CisJCQkJCQlNQVhfVVNFUk5BTUVfU0laRSkgewogCQkJCXZvbC0+dXNlcm5hbWUgPSB2YWx1ZTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogdXNlcm5hbWUgdG9vIGxvbmdcbiIpOwpAQCAtOTE2LDYgKzkzMCw3IEBACiAJCQl0aGUgb25seSBpbGxlZ2FsIGNoYXJhY3RlciBpbiBhIHBhc3N3b3JkIGlzIG51bGwgKi8KIAogCQkJaWYgKCh2YWx1ZVt0ZW1wX2xlbl0gPT0gMCkgJiYKKwkJCSAgICAodmFsdWUgKyB0ZW1wX2xlbiA8IGVuZCkgJiYKIAkJCSAgICAodmFsdWVbdGVtcF9sZW4rMV0gPT0gc2VwYXJhdG9yWzBdKSkgewogCQkJCS8qIHJlaW5zZXJ0IGNvbW1hICovCiAJCQkJdmFsdWVbdGVtcF9sZW5dID0gc2VwYXJhdG9yWzBdOwpAQCAtMTQ3Miw3ICsxNDg3LDcgQEAKIHN0YXRpYyBib29sCiBtYXRjaF9wb3J0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IHNvY2thZGRyICphZGRyKQogewotCXVuc2lnbmVkIHNob3J0IGludCBwb3J0LCAqc3BvcnQ7CisJX19iZTE2IHBvcnQsICpzcG9ydDsKIAogCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgpAQCAtMTU3Miw3ICsxNTg3LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIG5vdyBjaGVjayBpZiBzaWduaW5nIG1vZGUgaXMgYWNjZXB0aWJsZSAqLworCS8qIG5vdyBjaGVjayBpZiBzaWduaW5nIG1vZGUgaXMgYWNjZXB0YWJsZSAqLwogCWlmICgoc2VjRmxhZ3MgJiBDSUZTU0VDX01BWV9TSUdOKSA9PSAwICYmCiAJICAgIChzZXJ2ZXItPnNlY01vZGUgJiBTRUNNT0RFX1NJR05fUkVRVUlSRUQpKQogCQkJcmV0dXJuIGZhbHNlOwpAQCAtMTc2NSw2ICsxNzgwLDcgQEAKIAkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAJCWdvdG8gb3V0X2Vycl9jcnlwdG9fcmVsZWFzZTsKIAl9CisJdGNwX3Nlcy0+dGNwU3RhdHVzID0gQ2lmc05lZWROZWdvdGlhdGU7CiAKIAkvKiB0aHJlYWQgc3Bhd25lZCwgcHV0IGl0IG9uIHRoZSBsaXN0ICovCiAJc3Bpbl9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CkBAIC0xODA4LDcgKzE4MjQsOSBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBhbnl0aGluZyBlbHNlIHRha2VzIHVzZXJuYW1lL3Bhc3N3b3JkICovCi0JCQlpZiAoc3RybmNtcChzZXMtPnVzZXJOYW1lLCB2b2wtPnVzZXJuYW1lLAorCQkJaWYgKHNlcy0+dXNlcl9uYW1lID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChzZXMtPnVzZXJfbmFtZSwgdm9sLT51c2VybmFtZSwKIAkJCQkgICAgTUFYX1VTRVJOQU1FX1NJWkUpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKHN0cmxlbih2b2wtPnVzZXJuYW1lKSAhPSAwICYmCkBAIC0xODUxLDYgKzE4NjksOCBAQAogCWNpZnNfcHV0X3RjcF9zZXNzaW9uKHNlcnZlcik7CiB9CiAKK3N0YXRpYyBib29sIHdhcm5lZF9vbl9udGxtOyAgLyogZ2xvYmFscyBpbml0IHRvIGZhbHNlIGF1dG9tYXRpY2FsbHkgKi8KKwogc3RhdGljIHN0cnVjdCBjaWZzU2VzSW5mbyAqCiBjaWZzX2dldF9zbWJfc2VzKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IHNtYl92b2wgKnZvbHVtZV9pbmZvKQogewpAQCAtMTkwNiw5ICsxOTI2LDExIEBACiAJZWxzZQogCQlzcHJpbnRmKHNlcy0+c2VydmVyTmFtZSwgIiVwSTQiLCAmYWRkci0+c2luX2FkZHIpOwogCi0JaWYgKHZvbHVtZV9pbmZvLT51c2VybmFtZSkKLQkJc3RybmNweShzZXMtPnVzZXJOYW1lLCB2b2x1bWVfaW5mby0+dXNlcm5hbWUsCi0JCQlNQVhfVVNFUk5BTUVfU0laRSk7CisJaWYgKHZvbHVtZV9pbmZvLT51c2VybmFtZSkgeworCQlzZXMtPnVzZXJfbmFtZSA9IGtzdHJkdXAodm9sdW1lX2luZm8tPnVzZXJuYW1lLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZXMtPnVzZXJfbmFtZSkKKwkJCWdvdG8gZ2V0X3Nlc19mYWlsOworCX0KIAogCS8qIHZvbHVtZV9pbmZvLT5wYXNzd29yZCBmcmVlZCBhdCB1bm1vdW50ICovCiAJaWYgKHZvbHVtZV9pbmZvLT5wYXNzd29yZCkgewpAQCAtMTkyMyw2ICsxOTQ1LDE1IEBACiAJfQogCXNlcy0+Y3JlZF91aWQgPSB2b2x1bWVfaW5mby0+Y3JlZF91aWQ7CiAJc2VzLT5saW51eF91aWQgPSB2b2x1bWVfaW5mby0+bGludXhfdWlkOworCisJLyogbnRsbXYyIGlzIG11Y2ggc3Ryb25nZXIgdGhhbiBudGxtIHNlY3VyaXR5LCBhbmQgaGFzIGJlZW4gYnJvYWRseQorCXN1cHBvcnRlZCBmb3IgbWFueSB5ZWFycywgdGltZSB0byB1cGRhdGUgZGVmYXVsdCBzZWN1cml0eSBtZWNoYW5pc20gKi8KKwlpZiAoKHZvbHVtZV9pbmZvLT5zZWNGbGcgPT0gMCkgJiYgd2FybmVkX29uX250bG0gPT0gZmFsc2UpIHsKKwkJd2FybmVkX29uX250bG0gPSB0cnVlOworCQljRVJST1IoMSwgImRlZmF1bHQgc2VjdXJpdHkgbWVjaGFuaXNtIHJlcXVlc3RlZC4gIFRoZSBkZWZhdWx0ICIKKwkJCSJzZWN1cml0eSBtZWNoYW5pc20gd2lsbCBiZSB1cGdyYWRlZCBmcm9tIG50bG0gdG8gIgorCQkJIm50bG12MiBpbiBrZXJuZWwgcmVsZWFzZSAyLjYuNDEiKTsKKwl9CiAJc2VzLT5vdmVycmlkZVNlY0ZsZyA9IHZvbHVtZV9pbmZvLT5zZWNGbGc7CiAKIAltdXRleF9sb2NrKCZzZXMtPnNlc3Npb25fbXV0ZXgpOwpAQCAtMjI3Niw3ICsyMzA3LDcgQEAKIGdlbmVyaWNfaXBfY29ubmVjdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCiB7CiAJaW50IHJjID0gMDsKLQl1bnNpZ25lZCBzaG9ydCBpbnQgc3BvcnQ7CisJX19iZTE2IHNwb3J0OwogCWludCBzbGVuLCBzZmFtaWx5OwogCXN0cnVjdCBzb2NrZXQgKnNvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyOwpAQCAtMjM2MSw3ICsyMzkyLDcgQEAKIHN0YXRpYyBpbnQKIGlwX2Nvbm5lY3Qoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQogewotCXVuc2lnbmVkIHNob3J0IGludCAqc3BvcnQ7CisJX19iZTE2ICpzcG9ydDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNlcnZlci0+ZHN0YWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJnNlcnZlci0+ZHN0YWRkcjsKIApAQCAtMjY0Miw2ICsyNjczLDExIEBACiAJCQkgICAgICAwIC8qIG5vdCBsZWdhY3kgKi8sIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCSAgICAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisKKwlpZiAocmMgPT0gLUVPUE5PVFNVUFAgfHwgcmMgPT0gLUVJTlZBTCkKKwkJcmMgPSBTTUJRdWVyeUluZm9ybWF0aW9uKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBwZmlsZV9pbmZvLAorCQkJCWNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCSAgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWtmcmVlKHBmaWxlX2luZm8pOwogCXJldHVybiByYzsKIH0KQEAgLTI4MjYsNyArMjg2Miw3IEBACiAKIHJlbW90ZV9wYXRoX2NoZWNrOgogCS8qIGNoZWNrIGlmIGEgd2hvbGUgcGF0aCAoaW5jbHVkaW5nIHByZXBhdGgpIGlzIG5vdCByZW1vdGUgKi8KLQlpZiAoIXJjICYmIGNpZnNfc2ItPnByZXBhdGhsZW4gJiYgdGNvbikgeworCWlmICghcmMgJiYgdGNvbikgewogCQkvKiBidWlsZF9wYXRoX3RvX3Jvb3Qgd29ya3Mgb25seSB3aGVuIHdlIGhhdmUgYSB2YWxpZCB0Y29uICovCiAJCWZ1bGxfcGF0aCA9IGNpZnNfYnVpbGRfcGF0aF90b19yb290KGNpZnNfc2IsIHRjb24pOwogCQlpZiAoZnVsbF9wYXRoID09IE5VTEwpIHsKQEAgLTI5MzMsNyArMjk2OSw3IEBACiAJCWlmIChtb3VudF9kYXRhICE9IG1vdW50X2RhdGFfZ2xvYmFsKQogCQkJa2ZyZWUobW91bnRfZGF0YSk7CiAJCS8qIElmIGZpbmRfdW5jIHN1Y2NlZWRlZCB0aGVuIHJjID09IDAgc28gd2UgY2FuIG5vdCBlbmQgKi8KLQkJLyogdXAgYWNjaWRlbnRseSBmcmVlaW5nIHNvbWVvbmUgZWxzZXMgdGNvbiBzdHJ1Y3QgKi8KKwkJLyogdXAgYWNjaWRlbnRhbGx5IGZyZWVpbmcgc29tZW9uZSBlbHNlcyB0Y29uIHN0cnVjdCAqLwogCQlpZiAodGNvbikKIAkJCWNpZnNfcHV0X3Rjb24odGNvbik7CiAJCWVsc2UgaWYgKHBTZXNJbmZvKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggZGQ1ZjIyOS4uOWVhNjVjZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0xODksNyArMTg5LDcgQEAKIAkJCWlub2RlLT5pX3NiLCBtb2RlLCBvZmxhZ3MsICZvcGxvY2ssICZmaWxlSGFuZGxlLCB4aWQpOwogCQkvKiBFSU8gY291bGQgaW5kaWNhdGUgdGhhdCAocG9zaXggb3Blbikgb3BlcmF0aW9uIGlzIG5vdAogCQkgICBzdXBwb3J0ZWQsIGRlc3BpdGUgd2hhdCBzZXJ2ZXIgY2xhaW1lZCBpbiBjYXBhYmlsaXR5Ci0JCSAgIG5lZ290YXRpb24uICBFUkVNT1RFIGluZGljYXRlcyBERlMganVuY3Rpb24sIHdoaWNoIGlzIG5vdAorCQkgICBuZWdvdGlhdGlvbi4gIEVSRU1PVEUgaW5kaWNhdGVzIERGUyBqdW5jdGlvbiwgd2hpY2ggaXMgbm90CiAJCSAgIGhhbmRsZWQgaW4gcG9zaXggb3BlbiAqLwogCiAJCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGMyN2QyMzYuLmZhZjU5NTIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC01NzUsOCArNTc1LDEwIEBACiAKIGludCBjaWZzX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNpZnNGaWxlSW5mb19wdXQoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgIT0gTlVMTCkgeworCQljaWZzRmlsZUluZm9fcHV0KGZpbGUtPnByaXZhdGVfZGF0YSk7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQogCiAJLyogcmV0dXJuIGNvZGUgZnJvbSB0aGUgLT5yZWxlYXNlIG9wIGlzIGFsd2F5cyBpZ25vcmVkICovCiAJcmV0dXJuIDA7CkBAIC05NzAsNiArOTcyLDkgQEAKIAkgICAgIHRvdGFsX3dyaXR0ZW4gKz0gYnl0ZXNfd3JpdHRlbikgewogCQlyYyA9IC1FQUdBSU47CiAJCXdoaWxlIChyYyA9PSAtRUFHQUlOKSB7CisJCQlzdHJ1Y3Qga3ZlYyBpb3ZbMl07CisJCQl1bnNpZ25lZCBpbnQgbGVuOworCiAJCQlpZiAob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSB7CiAJCQkJLyogd2UgY291bGQgZGVhZGxvY2sgaWYgd2UgY2FsbGVkCiAJCQkJICAgZmlsZW1hcF9mZGF0YXdhaXQgZnJvbSBoZXJlIHNvIHRlbGwKQEAgLTk3OSwzMSArOTg0LDE0IEBACiAJCQkJaWYgKHJjICE9IDApCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKGV4cGVyaW1FbmFibGVkIHx8IChwVGNvbi0+c2VzLT5zZXJ2ZXIgJiYKLQkJCQkoKHBUY29uLT5zZXMtPnNlcnZlci0+c2VjTW9kZSAmCi0JCQkJKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8IFNFQ01PREVfU0lHTl9FTkFCTEVEKSkKLQkJCQk9PSAwKSkpIHsKLQkJCQlzdHJ1Y3Qga3ZlYyBpb3ZbMl07Ci0JCQkJdW5zaWduZWQgaW50IGxlbjsKIAotCQkJCWxlbiA9IG1pbigoc2l6ZV90KWNpZnNfc2ItPndzaXplLAotCQkJCQkgIHdyaXRlX3NpemUgLSB0b3RhbF93cml0dGVuKTsKLQkJCQkvKiBpb3ZbMF0gaXMgcmVzZXJ2ZWQgZm9yIHNtYiBoZWFkZXIgKi8KLQkJCQlpb3ZbMV0uaW92X2Jhc2UgPSAoY2hhciAqKXdyaXRlX2RhdGEgKwotCQkJCQkJICB0b3RhbF93cml0dGVuOwotCQkJCWlvdlsxXS5pb3ZfbGVuID0gbGVuOwotCQkJCXJjID0gQ0lGU1NNQldyaXRlMih4aWQsIHBUY29uLAotCQkJCQkJb3Blbl9maWxlLT5uZXRmaWQsIGxlbiwKLQkJCQkJCSpwb2Zmc2V0LCAmYnl0ZXNfd3JpdHRlbiwKLQkJCQkJCWlvdiwgMSwgMCk7Ci0JCQl9IGVsc2UKLQkJCQlyYyA9IENJRlNTTUJXcml0ZSh4aWQsIHBUY29uLAotCQkJCQkgb3Blbl9maWxlLT5uZXRmaWQsCi0JCQkJCSBtaW5fdChjb25zdCBpbnQsIGNpZnNfc2ItPndzaXplLAotCQkJCQkgICAgICAgd3JpdGVfc2l6ZSAtIHRvdGFsX3dyaXR0ZW4pLAotCQkJCQkgKnBvZmZzZXQsICZieXRlc193cml0dGVuLAotCQkJCQkgd3JpdGVfZGF0YSArIHRvdGFsX3dyaXR0ZW4sCi0JCQkJCSBOVUxMLCAwKTsKKwkJCWxlbiA9IG1pbigoc2l6ZV90KWNpZnNfc2ItPndzaXplLAorCQkJCSAgd3JpdGVfc2l6ZSAtIHRvdGFsX3dyaXR0ZW4pOworCQkJLyogaW92WzBdIGlzIHJlc2VydmVkIGZvciBzbWIgaGVhZGVyICovCisJCQlpb3ZbMV0uaW92X2Jhc2UgPSAoY2hhciAqKXdyaXRlX2RhdGEgKyB0b3RhbF93cml0dGVuOworCQkJaW92WzFdLmlvdl9sZW4gPSBsZW47CisJCQlyYyA9IENJRlNTTUJXcml0ZTIoeGlkLCBwVGNvbiwgb3Blbl9maWxlLT5uZXRmaWQsIGxlbiwKKwkJCQkJICAgKnBvZmZzZXQsICZieXRlc193cml0dGVuLCBpb3YsIDEsIDApOwogCQl9CiAJCWlmIChyYyB8fCAoYnl0ZXNfd3JpdHRlbiA9PSAwKSkgewogCQkJaWYgKHRvdGFsX3dyaXR0ZW4pCkBAIC0xMjQwLDEyICsxMjI4LDYgQEAKIAl9CiAKIAl0Y29uID0gdGxpbmtfdGNvbihvcGVuX2ZpbGUtPnRsaW5rKTsKLQlpZiAoIWV4cGVyaW1FbmFibGVkICYmIHRjb24tPnNlcy0+c2VydmVyLT5zZWNNb2RlICYKLQkJCShTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpIHsKLQkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwotCQlrZnJlZShpb3YpOwotCQlyZXR1cm4gZ2VuZXJpY193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7Ci0JfQogCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKIAogCXhpZCA9IEdldFhpZCgpOwpAQCAtMTk4MCw2ICsxOTYyLDI0IEBACiAJcmV0dXJuIHRvdGFsX3JlYWQ7CiB9CiAKKy8qCisgKiBJZiB0aGUgcGFnZSBpcyBtbWFwJ2VkIGludG8gYSBwcm9jZXNzJyBwYWdlIHRhYmxlcywgdGhlbiB3ZSBuZWVkIHRvIG1ha2UKKyAqIHN1cmUgdGhhdCBpdCBkb2Vzbid0IGNoYW5nZSB3aGlsZSBiZWluZyB3cml0dGVuIGJhY2suCisgKi8KK3N0YXRpYyBpbnQKK2NpZnNfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtZi0+cGFnZTsKKworCWxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gVk1fRkFVTFRfTE9DS0VEOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNpZnNfZmlsZV92bV9vcHMgPSB7CisJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKKwkucGFnZV9ta3dyaXRlID0gY2lmc19wYWdlX21rd3JpdGUsCit9OworCiBpbnQgY2lmc19maWxlX3N0cmljdF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlpbnQgcmMsIHhpZDsKQEAgLTE5OTEsNiArMTk5MSw4IEBACiAJCWNpZnNfaW52YWxpZGF0ZV9tYXBwaW5nKGlub2RlKTsKIAogCXJjID0gZ2VuZXJpY19maWxlX21tYXAoZmlsZSwgdm1hKTsKKwlpZiAocmMgPT0gMCkKKwkJdm1hLT52bV9vcHMgPSAmY2lmc19maWxlX3ZtX29wczsKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjAwNyw2ICsyMDA5LDggQEAKIAkJcmV0dXJuIHJjOwogCX0KIAlyYyA9IGdlbmVyaWNfZmlsZV9tbWFwKGZpbGUsIHZtYSk7CisJaWYgKHJjID09IDApCisJCXZtYS0+dm1fb3BzID0gJmNpZnNfZmlsZV92bV9vcHM7CiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbGluay5jIGIvZnMvY2lmcy9saW5rLmMKaW5kZXggZTg4MDRkMy4uY2U0MTdhOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9saW5rLmMKKysrIGIvZnMvY2lmcy9saW5rLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCWlmIChyYyAhPSAwKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoZmlsZV9pbmZvLkVuZE9mRmlsZSAhPSBDSUZTX01GX1NZTUxJTktfRklMRV9TSVpFKSB7CisJaWYgKGZpbGVfaW5mby5FbmRPZkZpbGUgIT0gY3B1X3RvX2xlNjQoQ0lGU19NRl9TWU1MSU5LX0ZJTEVfU0laRSkpIHsKIAkJQ0lGU1NNQkNsb3NlKHhpZCwgdGNvbiwgbmV0ZmlkKTsKIAkJLyogaXQncyBub3QgYSBzeW1saW5rICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJaWYgKHJjICE9IDApCiAJCWdvdG8gb3V0OwogCi0JaWYgKGZpbGVfaW5mby5FbmRPZkZpbGUgIT0gQ0lGU19NRl9TWU1MSU5LX0ZJTEVfU0laRSkgeworCWlmIChmaWxlX2luZm8uRW5kT2ZGaWxlICE9IGNwdV90b19sZTY0KENJRlNfTUZfU1lNTElOS19GSUxFX1NJWkUpKSB7CiAJCUNJRlNTTUJDbG9zZSh4aWQsIHBUY29uLCBuZXRmaWQpOwogCQkvKiBpdCdzIG5vdCBhIHN5bWxpbmsgKi8KIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IDJhOTMwYTcuLjBjNjg0YWUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC0xMDAsNiArMTAwLDcgQEAKIAkJbWVtc2V0KGJ1Zl90b19mcmVlLT5wYXNzd29yZCwgMCwgc3RybGVuKGJ1Zl90b19mcmVlLT5wYXNzd29yZCkpOwogCQlrZnJlZShidWZfdG9fZnJlZS0+cGFzc3dvcmQpOwogCX0KKwlrZnJlZShidWZfdG9fZnJlZS0+dXNlcl9uYW1lKTsKIAlrZnJlZShidWZfdG9fZnJlZS0+ZG9tYWluTmFtZSk7CiAJa2ZyZWUoYnVmX3RvX2ZyZWUpOwogfQpAQCAtNTIwLDcgKzUyMSw3IEBACiAJCQkoc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb25fY2hhbmdlX25vdGlmeV9yc3AgKilidWY7CiAJCXN0cnVjdCBmaWxlX25vdGlmeV9pbmZvcm1hdGlvbiAqcG5vdGlmeTsKIAkJX191MzIgZGF0YV9vZmZzZXQgPSAwOwotCQlpZiAocFNNQnItPkJ5dGVDb3VudCA+IHNpemVvZihzdHJ1Y3QgZmlsZV9ub3RpZnlfaW5mb3JtYXRpb24pKSB7CisJCWlmIChnZXRfYmNjX2xlKGJ1ZikgPiBzaXplb2Yoc3RydWN0IGZpbGVfbm90aWZ5X2luZm9ybWF0aW9uKSkgewogCQkJZGF0YV9vZmZzZXQgPSBsZTMyX3RvX2NwdShwU01Cci0+RGF0YU9mZnNldCk7CiAKIAkJCXBub3RpZnkgPSAoc3RydWN0IGZpbGVfbm90aWZ5X2luZm9ybWF0aW9uICopCmRpZmYgLS1naXQgYS9mcy9jaWZzL3Nlc3MuYyBiL2ZzL2NpZnMvc2Vzcy5jCmluZGV4IDE2NzY1NzAuLjY0NTExNGEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc2Vzcy5jCisrKyBiL2ZzL2NpZnMvc2Vzcy5jCkBAIC0yMTksMTIgKzIxOSwxMiBAQAogCQliY2NfcHRyKys7CiAJfSAqLwogCS8qIGNvcHkgdXNlciAqLwotCWlmIChzZXMtPnVzZXJOYW1lID09IE5VTEwpIHsKKwlpZiAoc2VzLT51c2VyX25hbWUgPT0gTlVMTCkgewogCQkvKiBudWxsIHVzZXIgbW91bnQgKi8KIAkJKmJjY19wdHIgPSAwOwogCQkqKGJjY19wdHIrMSkgPSAwOwogCX0gZWxzZSB7Ci0JCWJ5dGVzX3JldCA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLCBzZXMtPnVzZXJOYW1lLAorCQlieXRlc19yZXQgPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgc2VzLT51c2VyX25hbWUsCiAJCQkJCSAgTUFYX1VTRVJOQU1FX1NJWkUsIG5sc19jcCk7CiAJfQogCWJjY19wdHIgKz0gMiAqIGJ5dGVzX3JldDsKQEAgLTI0NCwxMiArMjQ0LDExIEBACiAJLyogY29weSB1c2VyICovCiAJLyogQkIgd2hhdCBhYm91dCBudWxsIHVzZXIgbW91bnRzIC0gY2hlY2sgdGhhdCB3ZSBkbyB0aGlzIEJCICovCiAJLyogY29weSB1c2VyICovCi0JaWYgKHNlcy0+dXNlck5hbWUgPT0gTlVMTCkgewotCQkvKiBCQiB3aGF0IGFib3V0IG51bGwgdXNlciBtb3VudHMgLSBjaGVjayB0aGF0IHdlIGRvIHRoaXMgQkIgKi8KLQl9IGVsc2UgewotCQlzdHJuY3B5KGJjY19wdHIsIHNlcy0+dXNlck5hbWUsIE1BWF9VU0VSTkFNRV9TSVpFKTsKLQl9Ci0JYmNjX3B0ciArPSBzdHJubGVuKHNlcy0+dXNlck5hbWUsIE1BWF9VU0VSTkFNRV9TSVpFKTsKKwlpZiAoc2VzLT51c2VyX25hbWUgIT0gTlVMTCkKKwkJc3RybmNweShiY2NfcHRyLCBzZXMtPnVzZXJfbmFtZSwgTUFYX1VTRVJOQU1FX1NJWkUpOworCS8qIGVsc2UgbnVsbCB1c2VyIG1vdW50ICovCisKKwliY2NfcHRyICs9IHN0cm5sZW4oc2VzLT51c2VyX25hbWUsIE1BWF9VU0VSTkFNRV9TSVpFKTsKIAkqYmNjX3B0ciA9IDA7CiAJYmNjX3B0cisrOyAvKiBhY2NvdW50IGZvciBudWxsIHRlcm1pbmF0aW9uICovCiAKQEAgLTI3Nyw3ICsyNzYsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZGVjb2RlX3VuaWNvZGVfc3NldHVwKGNoYXIgKipwYmNjX2FyZWEsIF9fdTE2IGJsZWZ0LCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywKK2RlY29kZV91bmljb2RlX3NzZXR1cChjaGFyICoqcGJjY19hcmVhLCBpbnQgYmxlZnQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApCiB7CiAJaW50IGxlbjsKQEAgLTI4NSwxOSArMjg0LDYgQEAKIAogCWNGWUkoMSwgImJsZWZ0ICVkIiwgYmxlZnQpOwogCi0JLyoKLQkgKiBXaW5kb3dzIHNlcnZlcnMgZG8gbm90IGFsd2F5cyBkb3VibGUgbnVsbCB0ZXJtaW5hdGUgdGhlaXIgZmluYWwKLQkgKiBVbmljb2RlIHN0cmluZy4gQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbiB1bmV2ZW4gbnVtYmVyIG9mIGJ5dGVzCi0JICogbGVmdC4gSWYgc28sIHRoZW4gYWRkIGFuIGV4dHJhIE5VTEwgcGFkIGJ5dGUgdG8gdGhlIGVuZCBvZiB0aGUKLQkgKiByZXNwb25zZS4KLQkgKgotCSAqIFNlZSBzZWN0aW9uIDIuNy4yIGluICJJbXBsZW1lbnRpbmcgQ0lGUyIgZm9yIGRldGFpbHMKLQkgKi8KLQlpZiAoYmxlZnQgJSAyKSB7Ci0JCWRhdGFbYmxlZnRdID0gMDsKLQkJKytibGVmdDsKLQl9Ci0KIAlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAlzZXMtPnNlcnZlck9TID0gY2lmc19zdHJuZHVwX2Zyb21fdWNzKGRhdGEsIGJsZWZ0LCB0cnVlLCBubHNfY3ApOwogCWNGWUkoMSwgInNlcnZlck9TPSVzIiwgc2VzLT5zZXJ2ZXJPUyk7CkBAIC00MDUsOCArMzkxLDggQEAKIAkvKiBCQiBzcGVjIHNheXMgdGhhdCBpZiBBdklkIGZpZWxkIG9mIE1zdkF2VGltZXN0YW1wIGlzIHBvcHVsYXRlZCB0aGVuCiAJCXdlIG11c3Qgc2V0IHRoZSBNSUMgZmllbGQgb2YgdGhlIEFVVEhFTlRJQ0FURV9NRVNTQUdFICovCiAJc2VzLT5udGxtc3NwLT5zZXJ2ZXJfZmxhZ3MgPSBsZTMyX3RvX2NwdShwYmxvYi0+TmVnb3RpYXRlRmxhZ3MpOwotCXRpb2Zmc2V0ID0gY3B1X3RvX2xlMTYocGJsb2ItPlRhcmdldEluZm9BcnJheS5CdWZmZXJPZmZzZXQpOwotCXRpbGVuID0gY3B1X3RvX2xlMTYocGJsb2ItPlRhcmdldEluZm9BcnJheS5MZW5ndGgpOworCXRpb2Zmc2V0ID0gbGUzMl90b19jcHUocGJsb2ItPlRhcmdldEluZm9BcnJheS5CdWZmZXJPZmZzZXQpOworCXRpbGVuID0gbGUxNl90b19jcHUocGJsb2ItPlRhcmdldEluZm9BcnJheS5MZW5ndGgpOwogCWlmICh0aWxlbikgewogCQlzZXMtPmF1dGhfa2V5LnJlc3BvbnNlID0ga21hbGxvYyh0aWxlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VzLT5hdXRoX2tleS5yZXNwb25zZSkgewpAQCAtNTIzLDE0ICs1MDksMTQgQEAKIAkJdG1wICs9IGxlbjsKIAl9CiAKLQlpZiAoc2VzLT51c2VyTmFtZSA9PSBOVUxMKSB7CisJaWYgKHNlcy0+dXNlcl9uYW1lID09IE5VTEwpIHsKIAkJc2VjX2Jsb2ItPlVzZXJOYW1lLkJ1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyKHRtcCAtIHBidWZmZXIpOwogCQlzZWNfYmxvYi0+VXNlck5hbWUuTGVuZ3RoID0gMDsKIAkJc2VjX2Jsb2ItPlVzZXJOYW1lLk1heGltdW1MZW5ndGggPSAwOwogCQl0bXAgKz0gMjsKIAl9IGVsc2UgewogCQlpbnQgbGVuOwotCQlsZW4gPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKil0bXAsIHNlcy0+dXNlck5hbWUsCisJCWxlbiA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKXRtcCwgc2VzLT51c2VyX25hbWUsCiAJCQkJICAgIE1BWF9VU0VSTkFNRV9TSVpFLCBubHNfY3ApOwogCQlsZW4gKj0gMjsgLyogdW5pY29kZSBpcyAyIGJ5dGVzIGVhY2ggKi8KIAkJc2VjX2Jsb2ItPlVzZXJOYW1lLkJ1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyKHRtcCAtIHBidWZmZXIpOwpAQCAtOTMwLDcgKzkxNiw5IEBACiAJfQogCiAJLyogQkIgY2hlY2sgaWYgVW5pY29kZSBhbmQgZGVjb2RlIHN0cmluZ3MgKi8KLQlpZiAoc21iX2J1Zi0+RmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CisJaWYgKGJ5dGVzX3JlbWFpbmluZyA9PSAwKSB7CisJCS8qIG5vIHN0cmluZyBhcmVhIHRvIGRlY29kZSwgZG8gbm90aGluZyAqLworCX0gZWxzZSBpZiAoc21iX2J1Zi0+RmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCS8qIHVuaWNvZGUgc3RyaW5nIGFyZWEgbXVzdCBiZSB3b3JkLWFsaWduZWQgKi8KIAkJaWYgKCgodW5zaWduZWQgbG9uZykgYmNjX3B0ciAtICh1bnNpZ25lZCBsb25nKSBzbWJfYnVmKSAlIDIpIHsKIAkJCSsrYmNjX3B0cjsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmMKaW5kZXggOTBmZjNjYi4uMzMxM2RkMSAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvZGlyLmMKKysrIGIvZnMvY29uZmlnZnMvZGlyLmMKQEAgLTk5MCw3ICs5OTAsNyBAQAogICogVGhpcyBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBoZWxwZXJzLgogICoKICAqIEFsbG93IGFub3RoZXIga2VybmVsIHN5c3RlbSB0byBkZXBlbmQgb24gYSBjb25maWdfaXRlbS4gIElmIHRoaXMKLSAqIGhhcHBlbnMsIHRoZSBpdGVtIGNhbm5vdCBnbyBhd2F5IHVudGlsIHRoZSBkZXBlbmRhbnQgY2FuIGxpdmUgd2l0aG91dAorICogaGFwcGVucywgdGhlIGl0ZW0gY2Fubm90IGdvIGF3YXkgdW50aWwgdGhlIGRlcGVuZGVudCBjYW4gbGl2ZSB3aXRob3V0CiAgKiBpdC4gIFRoZSBpZGVhIGlzIHRvIGdpdmUgY2xpZW50IG1vZHVsZXMgYXMgc2ltcGxlIGFuIGludGVyZmFjZSBhcwogICogcG9zc2libGUuICBXaGVuIGEgc3lzdGVtIGFza3MgdGhlbSB0byBkZXBlbmQgb24gYW4gaXRlbSwgdGhleSBqdXN0CiAgKiBjYWxsIGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKCkuICBJZiB0aGUgaXRlbSBpcyBsaXZlIGFuZCB0aGUgY2xpZW50CmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IGFkMjVjNGMuLjIyYTBlZjQgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC05OSwxMiArOTksOSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBkX2hhc2hfbWFzayBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHVuc2lnbmVkIGludCBkX2hhc2hfc2hpZnQgX19yZWFkX21vc3RseTsKIAotc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCB7Ci0Jc3RydWN0IGhsaXN0X2JsX2hlYWQgaGVhZDsKLX07Ci1zdGF0aWMgc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqZGVudHJ5X2hhc2h0YWJsZSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBobGlzdF9ibF9oZWFkICpkZW50cnlfaGFzaHRhYmxlIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqZF9oYXNoKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2JsX2hlYWQgKmRfaGFzaChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgaGFzaCkKIHsKIAloYXNoICs9ICgodW5zaWduZWQgbG9uZykgcGFyZW50IF4gR09MREVOX1JBVElPX1BSSU1FKSAvIEwxX0NBQ0hFX0JZVEVTOwpAQCAtMTEyLDE2ICsxMDksNiBAQAogCXJldHVybiBkZW50cnlfaGFzaHRhYmxlICsgKGhhc2ggJiBEX0hBU0hNQVNLKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9ja19idWNrZXQoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYikKLXsKLQliaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopJmItPmhlYWQuZmlyc3QpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl91bmxvY2tfYnVja2V0KHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmIpCi17Ci0JX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmYi0+aGVhZC5maXJzdCk7Ci19Ci0KIC8qIFN0YXRpc3RpY3MgZ2F0aGVyaW5nLiAqLwogc3RydWN0IGRlbnRyeV9zdGF0X3QgZGVudHJ5X3N0YXQgPSB7CiAJLmFnZV9saW1pdCA9IDQ1LApAQCAtMTY3LDggKzE1NCw4IEBACiAJaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfcmVsZWFzZSkKIAkJZGVudHJ5LT5kX29wLT5kX3JlbGVhc2UoZGVudHJ5KTsKIAotCS8qIGlmIGRlbnRyeSB3YXMgbmV2ZXIgaW5zZXJ0ZWQgaW50byBoYXNoLCBpbW1lZGlhdGUgZnJlZSBpcyBPSyAqLwotCWlmIChobGlzdF9ibF91bmhhc2hlZCgmZGVudHJ5LT5kX2hhc2gpKQorCS8qIGlmIGRlbnRyeSB3YXMgbmV2ZXIgdmlzaWJsZSB0byBSQ1UsIGltbWVkaWF0ZSBmcmVlIGlzIE9LICovCisJaWYgKCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX1JDVUFDQ0VTUykpCiAJCV9fZF9mcmVlKCZkZW50cnktPmRfdS5kX3JjdSk7CiAJZWxzZQogCQljYWxsX3JjdSgmZGVudHJ5LT5kX3UuZF9yY3UsIF9fZF9mcmVlKTsKQEAgLTMzMCwyOCArMzE3LDE5IEBACiAgKi8KIHZvaWQgX19kX2Ryb3Aoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWlmICghKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9VTkhBU0hFRCkpIHsKLQkJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKSB7Ci0JCQliaXRfc3Bpbl9sb2NrKDAsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGVudHJ5LT5kX3NiLT5zX2Fub24uZmlyc3QpOwotCQkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKLQkJCWhsaXN0X2JsX2RlbF9pbml0KCZkZW50cnktPmRfaGFzaCk7Ci0JCQlfX2JpdF9zcGluX3VubG9jaygwLAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRlbnRyeS0+ZF9zYi0+c19hbm9uLmZpcnN0KTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmI7CisJaWYgKCFkX3VuaGFzaGVkKGRlbnRyeSkpIHsKKwkJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmI7CisJCWlmICh1bmxpa2VseShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfRElTQ09OTkVDVEVEKSkKKwkJCWIgPSAmZGVudHJ5LT5kX3NiLT5zX2Fub247CisJCWVsc2UKIAkJCWIgPSBkX2hhc2goZGVudHJ5LT5kX3BhcmVudCwgZGVudHJ5LT5kX25hbWUuaGFzaCk7Ci0JCQlzcGluX2xvY2tfYnVja2V0KGIpOwotCQkJLyoKLQkJCSAqIFdlIG1heSBub3QgYWN0dWFsbHkgbmVlZCB0byBwdXQgRENBQ0hFX1VOSEFTSEVECi0JCQkgKiBtYW5pcHVsYXRpb25zIHVuZGVyIHRoZSBoYXNoIGxvY2ssIGJ1dCBmb2xsb3cKLQkJCSAqIHRoZSBwcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UuCi0JCQkgKi8KLQkJCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfVU5IQVNIRUQ7Ci0JCQlobGlzdF9ibF9kZWxfcmN1KCZkZW50cnktPmRfaGFzaCk7Ci0JCQlzcGluX3VubG9ja19idWNrZXQoYik7Ci0JCQlkZW50cnlfcmN1d2Fsa19iYXJyaWVyKGRlbnRyeSk7Ci0JCX0KKworCQlobGlzdF9ibF9sb2NrKGIpOworCQlfX2hsaXN0X2JsX2RlbCgmZGVudHJ5LT5kX2hhc2gpOworCQlkZW50cnktPmRfaGFzaC5wcHJldiA9IE5VTEw7CisJCWhsaXN0X2JsX3VubG9jayhiKTsKKworCQlkZW50cnlfcmN1d2Fsa19iYXJyaWVyKGRlbnRyeSk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX2RfZHJvcCk7CkBAIC0xMzA0LDcgKzEyODIsNyBAQAogCWRuYW1lW25hbWUtPmxlbl0gPSAwOwogCiAJZGVudHJ5LT5kX2NvdW50ID0gMTsKLQlkZW50cnktPmRfZmxhZ3MgPSBEQ0FDSEVfVU5IQVNIRUQ7CisJZGVudHJ5LT5kX2ZsYWdzID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmZGVudHJ5LT5kX2xvY2spOwogCXNlcWNvdW50X2luaXQoJmRlbnRyeS0+ZF9zZXEpOwogCWRlbnRyeS0+ZF9pbm9kZSA9IE5VTEw7CkBAIC0xNjA2LDEwICsxNTg0LDkgQEAKIAl0bXAtPmRfaW5vZGUgPSBpbm9kZTsKIAl0bXAtPmRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDsKIAlsaXN0X2FkZCgmdG1wLT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKLQliaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopJnRtcC0+ZF9zYi0+c19hbm9uLmZpcnN0KTsKLQl0bXAtPmRfZmxhZ3MgJj0gfkRDQUNIRV9VTkhBU0hFRDsKKwlobGlzdF9ibF9sb2NrKCZ0bXAtPmRfc2ItPnNfYW5vbik7CiAJaGxpc3RfYmxfYWRkX2hlYWQoJnRtcC0+ZF9oYXNoLCAmdG1wLT5kX3NiLT5zX2Fub24pOwotCV9fYml0X3NwaW5fdW5sb2NrKDAsICh1bnNpZ25lZCBsb25nICopJnRtcC0+ZF9zYi0+c19hbm9uLmZpcnN0KTsKKwlobGlzdF9ibF91bmxvY2soJnRtcC0+ZF9zYi0+c19hbm9uKTsKIAlzcGluX3VubG9jaygmdG1wLT5kX2xvY2spOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlzZWN1cml0eV9kX2luc3RhbnRpYXRlKHRtcCwgaW5vZGUpOwpAQCAtMTc4OSw3ICsxNzY2LDcgQEAKIAl1bnNpZ25lZCBpbnQgbGVuID0gbmFtZS0+bGVuOwogCXVuc2lnbmVkIGludCBoYXNoID0gbmFtZS0+aGFzaDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzdHIgPSBuYW1lLT5uYW1lOwotCXN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmIgPSBkX2hhc2gocGFyZW50LCBoYXNoKTsKKwlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYiA9IGRfaGFzaChwYXJlbnQsIGhhc2gpOwogCXN0cnVjdCBobGlzdF9ibF9ub2RlICpub2RlOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIApAQCAtMTgxMyw3ICsxNzkwLDcgQEAKIAkgKgogCSAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgogCSAqLwotCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsICZiLT5oZWFkLCBkX2hhc2gpIHsKKwlobGlzdF9ibF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVudHJ5LCBub2RlLCBiLCBkX2hhc2gpIHsKIAkJc3RydWN0IGlub2RlICppOwogCQljb25zdCBjaGFyICp0bmFtZTsKIAkJaW50IHRsZW47CkBAIC0xOTA4LDcgKzE4ODUsNyBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBuYW1lLT5sZW47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLT5oYXNoOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciA9IG5hbWUtPm5hbWU7Ci0Jc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYiA9IGRfaGFzaChwYXJlbnQsIGhhc2gpOworCXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CiAJc3RydWN0IGhsaXN0X2JsX25vZGUgKm5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZm91bmQgPSBOVUxMOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKQEAgLTE5MzUsNyArMTkxMiw3IEBACiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCQotCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsICZiLT5oZWFkLCBkX2hhc2gpIHsKKwlobGlzdF9ibF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVudHJ5LCBub2RlLCBiLCBkX2hhc2gpIHsKIAkJY29uc3QgY2hhciAqdG5hbWU7CiAJCWludCB0bGVuOwogCkBAIC0yMDg2LDEzICsyMDYzLDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRfZGVsZXRlKTsKIAotc3RhdGljIHZvaWQgX19kX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICogZW50cnksIHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmIpCitzdGF0aWMgdm9pZCBfX2RfcmVoYXNoKHN0cnVjdCBkZW50cnkgKiBlbnRyeSwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIpCiB7CiAJQlVHX09OKCFkX3VuaGFzaGVkKGVudHJ5KSk7Ci0Jc3Bpbl9sb2NrX2J1Y2tldChiKTsKLSAJZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9VTkhBU0hFRDsKLQlobGlzdF9ibF9hZGRfaGVhZF9yY3UoJmVudHJ5LT5kX2hhc2gsICZiLT5oZWFkKTsKLQlzcGluX3VubG9ja19idWNrZXQoYik7CisJaGxpc3RfYmxfbG9jayhiKTsKKwllbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfUkNVQUNDRVNTOworCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmZW50cnktPmRfaGFzaCwgYik7CisJaGxpc3RfYmxfdW5sb2NrKGIpOwogfQogCiBzdGF0aWMgdm9pZCBfZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqIGVudHJ5KQpAQCAtMjEzMSw3ICsyMTA4LDcgQEAKICAqLwogdm9pZCBkZW50cnlfdXBkYXRlX25hbWVfY2FzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpuYW1lKQogewotCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpKTsKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCkpOwogCUJVR19PTihkZW50cnktPmRfbmFtZS5sZW4gIT0gbmFtZS0+bGVuKTsgLyogZF9sb29rdXAgZ2l2ZXMgdGhpcyAqLwogCiAJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CkBAIC0zMDI1LDcgKzMwMDIsNyBAQAogCiAJZGVudHJ5X2hhc2h0YWJsZSA9CiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJEZW50cnkgY2FjaGUiLAotCQkJCQlzaXplb2Yoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCksCisJCQkJCXNpemVvZihzdHJ1Y3QgaGxpc3RfYmxfaGVhZCksCiAJCQkJCWRoYXNoX2VudHJpZXMsCiAJCQkJCTEzLAogCQkJCQlIQVNIX0VBUkxZLApAQCAtMzAzNCw3ICszMDExLDcgQEAKIAkJCQkJMCk7CiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgKDEgPDwgZF9oYXNoX3NoaWZ0KTsgbG9vcCsrKQotCQlJTklUX0hMSVNUX0JMX0hFQUQoJmRlbnRyeV9oYXNodGFibGVbbG9vcF0uaGVhZCk7CisJCUlOSVRfSExJU1RfQkxfSEVBRChkZW50cnlfaGFzaHRhYmxlICsgbG9vcCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkY2FjaGVfaW5pdCh2b2lkKQpAQCAtMzA1Nyw3ICszMDM0LDcgQEAKIAogCWRlbnRyeV9oYXNodGFibGUgPQogCQlhbGxvY19sYXJnZV9zeXN0ZW1faGFzaCgiRGVudHJ5IGNhY2hlIiwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQpLAorCQkJCQlzaXplb2Yoc3RydWN0IGhsaXN0X2JsX2hlYWQpLAogCQkJCQlkaGFzaF9lbnRyaWVzLAogCQkJCQkxMywKIAkJCQkJMCwKQEAgLTMwNjYsNyArMzA0Myw3IEBACiAJCQkJCTApOwogCiAJZm9yIChsb29wID0gMDsgbG9vcCA8ICgxIDw8IGRfaGFzaF9zaGlmdCk7IGxvb3ArKykKLQkJSU5JVF9ITElTVF9CTF9IRUFEKCZkZW50cnlfaGFzaHRhYmxlW2xvb3BdLmhlYWQpOworCQlJTklUX0hMSVNUX0JMX0hFQUQoZGVudHJ5X2hhc2h0YWJsZSArIGxvb3ApOwogfQogCiAvKiBTTEFCIGNhY2hlIGZvciBfX2dldG5hbWUoKSBjb25zdW1lcnMgKi8KZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2NrLmMgYi9mcy9kbG0vbG9jay5jCmluZGV4IDA0YjhjNDQuLjU2ZDZiZmMgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2NrLmMKKysrIGIvZnMvZGxtL2xvY2suYwpAQCAtNTE5LDcgKzUxOSw3IEBACiAJfQogfQogCi0vKiBXaGVuIGFsbCByZWZlcmVuY2VzIHRvIHRoZSByc2IgYXJlIGdvbmUgaXQncyB0cmFuc2ZlcmVkIHRvCisvKiBXaGVuIGFsbCByZWZlcmVuY2VzIHRvIHRoZSByc2IgYXJlIGdvbmUgaXQncyB0cmFuc2ZlcnJlZCB0bwogICAgdGhlIHRvc3NlZCBsaXN0IGZvciBsYXRlciBkaXNwb3NhbC4gKi8KIAogc3RhdGljIHZvaWQgcHV0X3JzYihzdHJ1Y3QgZGxtX3JzYiAqcikKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggYmZmYTFlNy4uNWUyYzcxZiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTgxMCw3ICs4MTAsNyBAQAogCiAJLyoKIAkgKiBBZGQgaXQgdG8gdGhlIGFjdGl2ZSBxdWV1ZSBpbiBjYXNlIHdlIGdvdCBkYXRhCi0JICogYmV3ZWVuIHByb2Nlc3NpbmcgdGhlIGFjY2VwdCBhZGRpbmcgdGhlIHNvY2tldAorCSAqIGJldHdlZW4gcHJvY2Vzc2luZyB0aGUgYWNjZXB0IGFkZGluZyB0aGUgc29ja2V0CiAJICogdG8gdGhlIHJlYWRfc29ja2V0cyBsaXN0CiAJICovCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KENGX1JFQURfUEVORElORywgJmFkZGNvbi0+ZmxhZ3MpKQpkaWZmIC0tZ2l0IGEvZnMvZGxtL3JlY292ZXIuYyBiL2ZzL2RsbS9yZWNvdmVyLmMKaW5kZXggZWRhNDNmMy4uMTQ2MzgyMyAxMDA2NDQKLS0tIGEvZnMvZGxtL3JlY292ZXIuYworKysgYi9mcy9kbG0vcmVjb3Zlci5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIH0KIAogLyoKLSAqIFByb3BvZ2F0ZSB0aGUgbmV3IG1hc3RlciBub2RlaWQgdG8gbG9ja3MKKyAqIFByb3BhZ2F0ZSB0aGUgbmV3IG1hc3RlciBub2RlaWQgdG8gbG9ja3MKICAqIFRoZSBORVdfTUFTVEVSIGZsYWcgdGVsbHMgZGxtX3JlY292ZXJfbG9ja3MoKSB3aGljaCByc2IncyB0byBjb25zaWRlci4KICAqIFRoZSBORVdfTUFTVEVSMiBmbGFnIHRlbGxzIHJlY292ZXJfbHZiKCkgYW5kIHNldF9sb2Nrc19wdXJnZWQoKSB3aGljaAogICogcnNiJ3MgdG8gY29uc2lkZXIuCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9jcnlwdG8uYyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCmluZGV4IGQyYTcwYTQuLmI4ZDVjODAgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jCisrKyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCkBAIC0xNDUyLDYgKzE0NTIsMjUgQEAKIAljcnlwdF9zdGF0LT5tZXRhZGF0YV9zaXplID0gRUNSWVBURlNfTUlOSU1VTV9IRUFERVJfRVhURU5UX1NJWkU7CiB9CiAKK3ZvaWQgZWNyeXB0ZnNfaV9zaXplX2luaXQoY29uc3QgY2hhciAqcGFnZV92aXJ0LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0OworCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0OworCXU2NCBmaWxlX3NpemU7CisKKwljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoaW5vZGUpLT5jcnlwdF9zdGF0OworCW1vdW50X2NyeXB0X3N0YXQgPQorCQkmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKGlub2RlLT5pX3NiKS0+bW91bnRfY3J5cHRfc3RhdDsKKwlpZiAobW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19FTkNSWVBURURfVklFV19FTkFCTEVEKSB7CisJCWZpbGVfc2l6ZSA9IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGlub2RlKSk7CisJCWlmIChjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX01FVEFEQVRBX0lOX1hBVFRSKQorCQkJZmlsZV9zaXplICs9IGNyeXB0X3N0YXQtPm1ldGFkYXRhX3NpemU7CisJfSBlbHNlCisJCWZpbGVfc2l6ZSA9IGdldF91bmFsaWduZWRfYmU2NChwYWdlX3ZpcnQpOworCWlfc2l6ZV93cml0ZShpbm9kZSwgKGxvZmZfdClmaWxlX3NpemUpOworCWNyeXB0X3N0YXQtPmZsYWdzIHw9IEVDUllQVEZTX0lfU0laRV9JTklUSUFMSVpFRDsKK30KKwogLyoqCiAgKiBlY3J5cHRmc19yZWFkX2hlYWRlcnNfdmlydAogICogQHBhZ2VfdmlydDogVGhlIHZpcnR1YWwgYWRkcmVzcyBpbnRvIHdoaWNoIHRvIHJlYWQgdGhlIGhlYWRlcnMKQEAgLTE0ODIsNiArMTUwMSw4IEBACiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQorCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfSV9TSVpFX0lOSVRJQUxJWkVEKSkKKwkJZWNyeXB0ZnNfaV9zaXplX2luaXQocGFnZV92aXJ0LCBlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogCW9mZnNldCArPSBNQUdJQ19FQ1JZUFRGU19NQVJLRVJfU0laRV9CWVRFUzsKIAlyYyA9IGVjcnlwdGZzX3Byb2Nlc3NfZmxhZ3MoY3J5cHRfc3RhdCwgKHBhZ2VfdmlydCArIG9mZnNldCksCiAJCQkJICAgICZieXRlc19yZWFkKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKaW5kZXggYmQzY2FmZC4uZTcwMjgyNyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKKysrIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKQEAgLTI2OSw2ICsyNjksNyBAQAogI2RlZmluZSBFQ1JZUFRGU19FTkNGTl9VU0VfTU9VTlRfRk5FSyAweDAwMDAwODAwCiAjZGVmaW5lIEVDUllQVEZTX0VOQ0ZOX1VTRV9GRUsgICAgICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgRUNSWVBURlNfVU5MSU5LX1NJR1MgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBFQ1JZUFRGU19JX1NJWkVfSU5JVElBTElaRUQgICAweDAwMDA0MDAwCiAJdTMyIGZsYWdzOwogCXVuc2lnbmVkIGludCBmaWxlX3ZlcnNpb247CiAJc2l6ZV90IGl2X2J5dGVzOwpAQCAtMjk1LDYgKzI5Niw4IEBACiBzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyB7CiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKndpaV9pbm9kZTsKKwlzdHJ1Y3QgbXV0ZXggbG93ZXJfZmlsZV9tdXRleDsKKwlhdG9taWNfdCBsb3dlcl9maWxlX2NvdW50OwogCXN0cnVjdCBmaWxlICpsb3dlcl9maWxlOwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0IGNyeXB0X3N0YXQ7CiB9OwpAQCAtNjI2LDYgKzYyOSw3IEBACiBpbnQgZWNyeXB0ZnNfaW50ZXJwb3NlKHN0cnVjdCBkZW50cnkgKmhpZGRlbl9kZW50cnksCiAJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICp0aGlzX2RlbnRyeSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJICAgICAgIHUzMiBmbGFncyk7Cit2b2lkIGVjcnlwdGZzX2lfc2l6ZV9pbml0KGNvbnN0IGNoYXIgKnBhZ2VfdmlydCwgc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCiAJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlKTsKQEAgLTc1Nyw3ICs3NjEsOCBAQAogCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCiAJCQkgICAgIHN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50LAogCQkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7Ci1pbnQgZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5KTsKK2ludCBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnkpOwordm9pZCBlY3J5cHRmc19wdXRfbG93ZXJfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludAogZWNyeXB0ZnNfd3JpdGVfdGFnXzcwX3BhY2tldChjaGFyICpkZXN0LCBzaXplX3QgKnJlbWFpbmluZ19ieXRlcywKIAkJCSAgICAgc2l6ZV90ICpwYWNrZXRfc2l6ZSwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2ZpbGUuYyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwppbmRleCBjZWRjOTEzLi41NjZlNTQ3IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9maWxlLmMKKysrIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCkBAIC0xOTEsMTAgKzE5MSwxMCBAQAogCQkJCSAgICAgIHwgRUNSWVBURlNfRU5DUllQVEVEKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5jc19tdXRleCk7Ci0JcmMgPSBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBpbml0aWFsaXplICIKLQkJCSJ0aGUgcGVyc2lzdGVudCBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCisJCQkidGhlIGxvd2VyIGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKIAkJCSJbJXNdOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLAogCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwgcmMpOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMjAyLDkgKzIwMiw5IEBACiAJaWYgKChlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKS0+bG93ZXJfZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkKIAkgICAgPT0gT19SRE9OTFkgJiYgKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZKSB7CiAJCXJjID0gLUVQRVJNOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTG93ZXIgcGVyc2lzdGVudCBmaWxlIGlzIFJPOyBlQ3J5cHRmcyAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBMb3dlciBmaWxlIGlzIFJPOyBlQ3J5cHRmcyAiCiAJCSAgICAgICAiZmlsZSBtdXN0IGhlbmNlIGJlIG9wZW5lZCBST1xuIiwgX19mdW5jX18pOwotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF9wdXQ7CiAJfQogCWVjcnlwdGZzX3NldF9maWxlX2xvd2VyKAogCQlmaWxlLCBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKS0+bG93ZXJfZmlsZSk7CkBAIC0yMzIsMTAgKzIzMiwxMSBAQAogCQkJCSAgICAgICAiUGxhaW50ZXh0IHBhc3N0aHJvdWdoIG1vZGUgaXMgbm90ICIKIAkJCQkgICAgICAgImVuYWJsZWQ7IHJldHVybmluZyAtRUlPXG4iKTsKIAkJCQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKLQkJCQlnb3RvIG91dF9mcmVlOworCQkJCWdvdG8gb3V0X3B1dDsKIAkJCX0KIAkJCXJjID0gMDsKLQkJCWNyeXB0X3N0YXQtPmZsYWdzICY9IH4oRUNSWVBURlNfRU5DUllQVEVEKTsKKwkJCWNyeXB0X3N0YXQtPmZsYWdzICY9IH4oRUNSWVBURlNfSV9TSVpFX0lOSVRJQUxJWkVECisJCQkJCSAgICAgICB8IEVDUllQVEZTX0VOQ1JZUFRFRCk7CiAJCQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yNDUsNiArMjQ2LDggQEAKIAkJCSJbMHglLjE2bHhdIHNpemU6IFsweCUuMTZsbHhdXG4iLCBpbm9kZSwgaW5vZGUtPmlfaW5vLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSkpOwogCWdvdG8gb3V0Oworb3V0X3B1dDoKKwllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShpbm9kZSk7CiBvdXRfZnJlZToKIAlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfZmlsZV9pbmZvX2NhY2hlLAogCQkJZWNyeXB0ZnNfZmlsZV90b19wcml2YXRlKGZpbGUpKTsKQEAgLTI1NCwxNyArMjU3LDEzIEBACiAKIHN0YXRpYyBpbnQgZWNyeXB0ZnNfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGZsX293bmVyX3QgdGQpCiB7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZmlsZSAqbG93ZXJfZmlsZSA9IE5VTEw7Ci0KLQlsb3dlcl9maWxlID0gZWNyeXB0ZnNfZmlsZV90b19sb3dlcihmaWxlKTsKLQlpZiAobG93ZXJfZmlsZS0+Zl9vcCAmJiBsb3dlcl9maWxlLT5mX29wLT5mbHVzaCkKLQkJcmMgPSBsb3dlcl9maWxlLT5mX29wLT5mbHVzaChsb3dlcl9maWxlLCB0ZCk7Ci0JcmV0dXJuIHJjOworCXJldHVybiBmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURQorCSAgICAgICA/IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoZmlsZS0+Zl9tYXBwaW5nKSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgZWNyeXB0ZnNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShpbm9kZSk7CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2ZpbGVfaW5mb19jYWNoZSwKIAkJCWVjcnlwdGZzX2ZpbGVfdG9fcHJpdmF0ZShmaWxlKSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCBmOTkwNTFiLi40ZDRjYzZhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTE2OCwxOSArMTY4LDE4IEBACiAJCQkJImNvbnRleHQ7IHJjID0gWyVkXVxuIiwgcmMpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmMgPSBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBpbml0aWFsaXplICIKLQkJCSJ0aGUgcGVyc2lzdGVudCBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCisJCQkidGhlIGxvd2VyIGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKIAkJCSJbJXNdOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLAogCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YShlY3J5cHRmc19kZW50cnkpOwotCWlmIChyYykgeworCWlmIChyYykKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3cml0aW5nIGhlYWRlcnM7IHJjID0gWyVkXVxuIiwgcmMpOwotCQlnb3RvIG91dDsKLQl9CisJZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMjYsMTEgKzIyNSw5IEBACiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeTsKIAlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKIAlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlOwotCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0OwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0OwogCWNoYXIgKnBhZ2VfdmlydCA9IE5VTEw7Ci0JdTY0IGZpbGVfc2l6ZTsKLQlpbnQgcmMgPSAwOworCWludCBwdXRfbG93ZXIgPSAwLCByYyA9IDA7CiAKIAlsb3dlcl9kaXJfZGVudHJ5ID0gbG93ZXJfZGVudHJ5LT5kX3BhcmVudDsKIAlsb3dlcl9tbnQgPSBtbnRnZXQoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udCgKQEAgLTI3NywxNCArMjc0LDE1IEBACiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKKwlyYyA9IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKGVjcnlwdGZzX2RlbnRyeSk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZSAiCi0JCQkidGhlIHBlcnNpc3RlbnQgZmlsZSBmb3IgdGhlIGRlbnRyeSB3aXRoIG5hbWUgIgorCQkJInRoZSBsb3dlciBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCiAJCQkiWyVzXTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywKIAkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsIHJjKTsKIAkJZ290byBvdXRfZnJlZV9rbWVtOwogCX0KKwlwdXRfbG93ZXIgPSAxOwogCWNyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZSgKIAkJCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKIAkvKiBUT0RPOiBsb2NrIGZvciBjcnlwdF9zdGF0IGNvbXBhcmlzb24gKi8KQEAgLTMwMiwxOCArMzAwLDcgQEAKIAkJfQogCQljcnlwdF9zdGF0LT5mbGFncyB8PSBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUjsKIAl9Ci0JbW91bnRfY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCi0JCWVjcnlwdGZzX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7Ci0JaWYgKG1vdW50X2NyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVEVEX1ZJRVdfRU5BQkxFRCkgewotCQlpZiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUikKLQkJCWZpbGVfc2l6ZSA9IChjcnlwdF9zdGF0LT5tZXRhZGF0YV9zaXplCi0JCQkJICAgICArIGlfc2l6ZV9yZWFkKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkpOwotCQllbHNlCi0JCQlmaWxlX3NpemUgPSBpX3NpemVfcmVhZChsb3dlcl9kZW50cnktPmRfaW5vZGUpOwotCX0gZWxzZSB7Ci0JCWZpbGVfc2l6ZSA9IGdldF91bmFsaWduZWRfYmU2NChwYWdlX3ZpcnQpOwotCX0KLQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlLCAobG9mZl90KWZpbGVfc2l6ZSk7CisJZWNyeXB0ZnNfaV9zaXplX2luaXQocGFnZV92aXJ0LCBlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogb3V0X2ZyZWVfa21lbToKIAlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfaGVhZGVyX2NhY2hlXzIsIHBhZ2VfdmlydCk7CiAJZ290byBvdXQ7CkBAIC0zMjIsNiArMzA5LDggQEAKIAltbnRwdXQobG93ZXJfbW50KTsKIAlkX2Ryb3AoZWNyeXB0ZnNfZGVudHJ5KTsKIG91dDoKKwlpZiAocHV0X2xvd2VyKQorCQllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogCXJldHVybiByYzsKIH0KIApAQCAtNTM4LDggKzUyNyw2IEBACiAJZGdldChsb3dlcl9kZW50cnkpOwogCXJjID0gdmZzX3JtZGlyKGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsIGxvd2VyX2RlbnRyeSk7CiAJZHB1dChsb3dlcl9kZW50cnkpOwotCWlmICghcmMpCi0JCWRfZGVsZXRlKGxvd2VyX2RlbnRyeSk7CiAJZnNzdGFja19jb3B5X2F0dHJfdGltZXMoZGlyLCBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlKTsKIAlkaXItPmlfbmxpbmsgPSBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX25saW5rOwogCXVubG9ja19kaXIobG93ZXJfZGlyX2RlbnRyeSk7CkBAIC02MTAsOCArNTk3LDggQEAKIAkJZnNzdGFja19jb3B5X2F0dHJfYWxsKG9sZF9kaXIsIGxvd2VyX29sZF9kaXJfZGVudHJ5LT5kX2lub2RlKTsKIG91dF9sb2NrOgogCXVubG9ja19yZW5hbWUobG93ZXJfb2xkX2Rpcl9kZW50cnksIGxvd2VyX25ld19kaXJfZGVudHJ5KTsKLQlkcHV0KGxvd2VyX25ld19kZW50cnktPmRfcGFyZW50KTsKLQlkcHV0KGxvd2VyX29sZF9kZW50cnktPmRfcGFyZW50KTsKKwlkcHV0KGxvd2VyX25ld19kaXJfZGVudHJ5KTsKKwlkcHV0KGxvd2VyX29sZF9kaXJfZGVudHJ5KTsKIAlkcHV0KGxvd2VyX25ld19kZW50cnkpOwogCWRwdXQobG93ZXJfb2xkX2RlbnRyeSk7CiAJcmV0dXJuIHJjOwpAQCAtNzU5LDggKzc0NiwxMSBAQAogCiAJaWYgKHVubGlrZWx5KChpYS0+aWFfc2l6ZSA9PSBpX3NpemUpKSkgewogCQlsb3dlcl9pYS0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KKwlyYyA9IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKGRlbnRyeSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAJY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGRlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CiAJLyogU3dpdGNoIG9uIGdyb3dpbmcgb3Igc2hyaW5raW5nIGZpbGUgKi8KIAlpZiAoaWEtPmlhX3NpemUgPiBpX3NpemUpIHsKQEAgLTgzOCw2ICs4MjgsNyBAQAogCQkJbG93ZXJfaWEtPmlhX3ZhbGlkICY9IH5BVFRSX1NJWkU7CiAJfQogb3V0OgorCWVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKGlub2RlKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTkxMyw3ICs5MDQsMTMgQEAKIAogCQltb3VudF9jcnlwdF9zdGF0ID0gJmVjcnlwdGZzX3N1cGVyYmxvY2tfdG9fcHJpdmF0ZSgKIAkJCWRlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CisJCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZGVudHJ5KTsKKwkJaWYgKHJjKSB7CisJCQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCXJjID0gZWNyeXB0ZnNfcmVhZF9tZXRhZGF0YShkZW50cnkpOworCQllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShpbm9kZSk7CiAJCWlmIChyYykgewogCQkJaWYgKCEobW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MKIAkJCSAgICAgICYgRUNSWVBURlNfUExBSU5URVhUX1BBU1NUSFJPVUdIX0VOQUJMRUQpKSB7CkBAIC05MjcsMTAgKzkyNCwxNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJcmMgPSAwOwotCQkJY3J5cHRfc3RhdC0+ZmxhZ3MgJj0gfihFQ1JZUFRGU19FTkNSWVBURUQpOworCQkJY3J5cHRfc3RhdC0+ZmxhZ3MgJj0gfihFQ1JZUFRGU19JX1NJWkVfSU5JVElBTElaRUQKKwkJCQkJICAgICAgIHwgRUNSWVBURlNfRU5DUllQVEVEKTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlyYyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCQlmc3N0YWNrX2NvcHlfYXR0cl9hbGwoaW5vZGUsIGxvd2VyX2lub2RlKTsKKwl9CiAJbWVtY3B5KCZsb3dlcl9pYSwgaWEsIHNpemVvZihsb3dlcl9pYSkpOwogCWlmIChpYS0+aWFfdmFsaWQgJiBBVFRSX0ZJTEUpCiAJCWxvd2VyX2lhLmlhX2ZpbGUgPSBlY3J5cHRmc19maWxlX3RvX2xvd2VyKGlhLT5pYV9maWxlKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYyBiL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYwppbmRleCAwODUxYWI2Li42OWY5OTRhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKKysrIGIvZnMvZWNyeXB0ZnMva3RocmVhZC5jCkBAIC00NCw3ICs0NCw3IEBACiAgKiBAaWdub3JlZDogaWdub3JlZAogICoKICAqIFRoZSBlQ3J5cHRmcyBrZXJuZWwgdGhyZWFkIHRoYXQgaGFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBnZXR0aW5nCi0gKiB0aGUgbG93ZXIgcGVyc2lzdGVudCBmaWxlIHdpdGggUlcgcGVybWlzc2lvbnMuCisgKiB0aGUgbG93ZXIgZmlsZSB3aXRoIFJXIHBlcm1pc3Npb25zLgogICoKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvdGhlcndpc2UKICAqLwpAQCAtMTQxLDggKzE0MSw4IEBACiAJaW50IHJjID0gMDsKIAogCS8qIENvcnJlc3BvbmRpbmcgZHB1dCgpIGFuZCBtbnRwdXQoKSBhcmUgZG9uZSB3aGVuIHRoZQotCSAqIHBlcnNpc3RlbnQgZmlsZSBpcyBmcHV0KCkgd2hlbiB0aGUgZUNyeXB0ZnMgaW5vZGUgaXMKLQkgKiBkZXN0cm95ZWQuICovCisJICogbG93ZXIgZmlsZSBpcyBmcHV0KCkgd2hlbiBhbGwgZUNyeXB0ZnMgZmlsZXMgZm9yIHRoZSBpbm9kZSBhcmUKKwkgKiByZWxlYXNlZC4gKi8KIAlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJbW50Z2V0KGxvd2VyX21udCk7CiAJZmxhZ3MgfD0gSVNfUkRPTkxZKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkgPyBPX1JET05MWSA6IE9fUkRXUjsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21haW4uYyBiL2ZzL2VjcnlwdGZzL21haW4uYwppbmRleCBjMjdjMGVjLi44OWI5MzM4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tYWluLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCkBAIC05Niw3ICs5Niw3IEBACiB9CiAKIC8qKgotICogZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUKKyAqIGVjcnlwdGZzX2luaXRfbG93ZXJfZmlsZQogICogQGVjcnlwdGZzX2RlbnRyeTogRnVsbHkgaW5pdGlhbGl6ZWQgZUNyeXB0ZnMgZGVudHJ5IG9iamVjdCwgd2l0aAogICogICAgICAgICAgICAgICAgICAgdGhlIGxvd2VyIGRlbnRyeSBhbmQgdGhlIGxvd2VyIG1vdW50IHNldAogICoKQEAgLTEwNCw0MiArMTA0LDcwIEBACiAgKiBpbm9kZS4gQWxsIEkvTyBvcGVyYXRpb25zIHRvIHRoZSBsb3dlciBpbm9kZSBvY2N1ciB0aHJvdWdoIHRoYXQKICAqIGZpbGUuIFdoZW4gdGhlIGZpcnN0IGVDcnlwdGZzIGRlbnRyeSB0aGF0IGludGVycG9zZXMgd2l0aCB0aGUgZmlyc3QKICAqIGxvd2VyIGRlbnRyeSBmb3IgdGhhdCBpbm9kZSBpcyBjcmVhdGVkLCB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlCi0gKiBwZXJzaXN0ZW50IGZpbGUgc3RydWN0IGFuZCBhc3NvY2lhdGVzIGl0IHdpdGggdGhlIGVDcnlwdGZzCi0gKiBpbm9kZS4gV2hlbiB0aGUgZUNyeXB0ZnMgaW5vZGUgaXMgZGVzdHJveWVkLCB0aGUgZmlsZSBpcyBjbG9zZWQuCisgKiBsb3dlciBmaWxlIHN0cnVjdCBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSBlQ3J5cHRmcworICogaW5vZGUuIFdoZW4gYWxsIGVDcnlwdGZzIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vZGUgYXJlIHJlbGVhc2VkLCB0aGUKKyAqIGZpbGUgaXMgY2xvc2VkLgogICoKLSAqIFRoZSBwZXJzaXN0ZW50IGZpbGUgd2lsbCBiZSBvcGVuZWQgd2l0aCByZWFkL3dyaXRlIHBlcm1pc3Npb25zLCBpZgorICogVGhlIGxvd2VyIGZpbGUgd2lsbCBiZSBvcGVuZWQgd2l0aCByZWFkL3dyaXRlIHBlcm1pc3Npb25zLCBpZgogICogcG9zc2libGUuIE90aGVyd2lzZSwgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBhIGxvd2VyIHBlcnNpc3RlbnQgZmlsZSBpcyBhbHJlYWR5CisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBhIGxvd2VyIGZpbGUgaXMgYWxyZWFkeQogICogYXNzb2NpYXRlZCB3aXRoIHRoZSBlQ3J5cHRmcyBpbm9kZS4KICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLWludCBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnkpCitzdGF0aWMgaW50IGVjcnlwdGZzX2luaXRfbG93ZXJfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgIHN0cnVjdCBmaWxlICoqbG93ZXJfZmlsZSkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCXN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvICppbm9kZV9pbmZvID0KLQkJZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwotCWludCByYyA9IDA7CisJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSk7CisJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeSk7CisJaW50IHJjOwogCi0JaWYgKCFpbm9kZV9pbmZvLT5sb3dlcl9maWxlKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeTsKLQkJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQgPQotCQkJZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChlY3J5cHRmc19kZW50cnkpOwotCi0JCWxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihlY3J5cHRmc19kZW50cnkpOwotCQlyYyA9IGVjcnlwdGZzX3ByaXZpbGVnZWRfb3BlbigmaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwKLQkJCQkJICAgICAgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIGNyZWQpOwotCQlpZiAocmMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb3BlbmluZyBsb3dlciBwZXJzaXN0ZW50IGZpbGUgIgotCQkJICAgICAgICJmb3IgbG93ZXJfZGVudHJ5IFsweCVwXSBhbmQgbG93ZXJfbW50IFsweCVwXTsgIgotCQkJICAgICAgICJyYyA9IFslZF1cbiIsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCByYyk7Ci0JCQlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKLQkJfQorCXJjID0gZWNyeXB0ZnNfcHJpdmlsZWdlZF9vcGVuKGxvd2VyX2ZpbGUsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LAorCQkJCSAgICAgIGNyZWQpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIG9wZW5pbmcgbG93ZXIgZmlsZSAiCisJCSAgICAgICAiZm9yIGxvd2VyX2RlbnRyeSBbMHglcF0gYW5kIGxvd2VyX21udCBbMHglcF07ICIKKwkJICAgICAgICJyYyA9IFslZF1cbiIsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCByYyk7CisJCSgqbG93ZXJfZmlsZSkgPSBOVUxMOwogCX0KIAlyZXR1cm4gcmM7CiB9CiAKK2ludCBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm8gPQorCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGRlbnRyeS0+ZF9pbm9kZSk7CisJaW50IGNvdW50LCByYyA9IDA7CisKKwltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwljb3VudCA9IGF0b21pY19pbmNfcmV0dXJuKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX2NvdW50KTsKKwlpZiAoV0FSTl9PTl9PTkNFKGNvdW50IDwgMSkpCisJCXJjID0gLUVJTlZBTDsKKwllbHNlIGlmIChjb3VudCA9PSAxKSB7CisJCXJjID0gZWNyeXB0ZnNfaW5pdF9sb3dlcl9maWxlKGRlbnRyeSwKKwkJCQkJICAgICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOworCQlpZiAocmMpCisJCQlhdG9taWNfc2V0KCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX2NvdW50LCAwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKKworCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9jb3VudCwKKwkJCQkgICAgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCkpIHsKKwkJZnB1dChpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKKwkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZSA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGlub2RlICplY3J5cHRmc19nZXRfaW5vZGUoc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZSwKIAkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC0yNzYsNyArMzA0LDcgQEAKIC8qKgogICogZWNyeXB0ZnNfcGFyc2Vfb3B0aW9ucwogICogQHNiOiBUaGUgZWNyeXB0ZnMgc3VwZXIgYmxvY2sKLSAqIEBvcHRpb25zOiBUaGUgb3B0aW9ucyBwYXNlZCB0byB0aGUga2VybmVsCisgKiBAb3B0aW9uczogVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBrZXJuZWwKICAqCiAgKiBQYXJzZSBtb3VudCBvcHRpb25zOgogICogZGVidWc9TiAJICAgLSBlY3J5cHRmc192ZXJib3NpdHkgbGV2ZWwgZm9yIGRlYnVnIG91dHB1dApAQCAtODQwLDcgKzg2OCw3IEBACiAJfQogCXJjID0gZWNyeXB0ZnNfaW5pdF9tZXNzYWdpbmcoKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsdXJlIG9jY3VyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byAiCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbHVyZSBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvICIKIAkJCQkiaW5pdGlhbGl6ZSB0aGUgY29tbXVuaWNhdGlvbnMgY2hhbm5lbCB0byAiCiAJCQkJImVjcnlwdGZzZFxuIik7CiAJCWdvdG8gb3V0X2Rlc3Ryb3lfa3RocmVhZDsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL3N1cGVyLmMgYi9mcy9lY3J5cHRmcy9zdXBlci5jCmluZGV4IGJhY2M4ODIuLjI0NWI1MTcgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL3N1cGVyLmMKKysrIGIvZnMvZWNyeXB0ZnMvc3VwZXIuYwpAQCAtNTUsNiArNTUsOCBAQAogCWlmICh1bmxpa2VseSghaW5vZGVfaW5mbykpCiAJCWdvdG8gb3V0OwogCWVjcnlwdGZzX2luaXRfY3J5cHRfc3RhdCgmaW5vZGVfaW5mby0+Y3J5cHRfc3RhdCk7CisJbXV0ZXhfaW5pdCgmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CisJYXRvbWljX3NldCgmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9jb3VudCwgMCk7CiAJaW5vZGVfaW5mby0+bG93ZXJfZmlsZSA9IE5VTEw7CiAJaW5vZGUgPSAmaW5vZGVfaW5mby0+dmZzX2lub2RlOwogb3V0OgpAQCAtNzcsOCArNzksNyBAQAogICoKICAqIFRoaXMgaXMgdXNlZCBkdXJpbmcgdGhlIGZpbmFsIGRlc3RydWN0aW9uIG9mIHRoZSBpbm9kZS4gIEFsbAogICogYWxsb2NhdGlvbiBvZiBtZW1vcnkgcmVsYXRlZCB0byB0aGUgaW5vZGUsIGluY2x1ZGluZyBhbGxvY2F0ZWQKLSAqIG1lbW9yeSBpbiB0aGUgY3J5cHRfc3RhdCBzdHJ1Y3QsIHdpbGwgYmUgcmVsZWFzZWQgaGVyZS4gVGhpcwotICogZnVuY3Rpb24gYWxzbyBmcHV0KCkncyB0aGUgcGVyc2lzdGVudCBmaWxlIGZvciB0aGUgbG93ZXIgaW5vZGUuCisgKiBtZW1vcnkgaW4gdGhlIGNyeXB0X3N0YXQgc3RydWN0LCB3aWxsIGJlIHJlbGVhc2VkIGhlcmUuCiAgKiBUaGVyZSBzaG91bGQgYmUgbm8gY2hhbmNlIHRoYXQgdGhpcyBkZWFsbG9jYXRpb24gd2lsbCBiZSBtaXNzZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGVjcnlwdGZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTg2LDE2ICs4Nyw3IEBACiAJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm87CiAKIAlpbm9kZV9pbmZvID0gZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSk7Ci0JaWYgKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpIHsKLQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5ID0KLQkJCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfZGVudHJ5OwotCi0JCUJVR19PTighbG93ZXJfZGVudHJ5KTsKLQkJaWYgKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkgewotCQkJZnB1dChpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKLQkJCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUgPSBOVUxMOwotCQl9Ci0JfQorCUJVR19PTihpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKIAllY3J5cHRmc19kZXN0cm95X2NyeXB0X3N0YXQoJmlub2RlX2luZm8tPmNyeXB0X3N0YXQpOwogCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGVjcnlwdGZzX2lfY2FsbGJhY2spOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCBlZDM4ODAxLi5mOWNmZDE2IDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAKIAkvKgogCSAqIFRoaXMgaXMgYSBzaW5nbGUgbGlua2VkIGxpc3QgdGhhdCBjaGFpbnMgYWxsIHRoZSAic3RydWN0IGVwaXRlbSIgdGhhdAotCSAqIGhhcHBlbmVkIHdoaWxlIHRyYW5zZmVyaW5nIHJlYWR5IGV2ZW50cyB0byB1c2Vyc3BhY2Ugdy9vdXQKKwkgKiBoYXBwZW5lZCB3aGlsZSB0cmFuc2ZlcnJpbmcgcmVhZHkgZXZlbnRzIHRvIHVzZXJzcGFjZSB3L291dAogCSAqIGhvbGRpbmcgLT5sb2NrLgogCSAqLwogCXN0cnVjdCBlcGl0ZW0gKm92Zmxpc3Q7CkBAIC02MDYsNyArNjA2LDcgQEAKIAkgKiBXZSBkbyBub3QgbmVlZCB0byBob2xkICJlcC0+bXR4IiBoZXJlIGJlY2F1c2UgdGhlIGVwb2xsIGZpbGUKIAkgKiBpcyBvbiB0aGUgd2F5IHRvIGJlIHJlbW92ZWQgYW5kIG5vIG9uZSBoYXMgcmVmZXJlbmNlcyB0byBpdAogCSAqIGFueW1vcmUuIFRoZSBvbmx5IGhpdCBtaWdodCBjb21lIGZyb20gZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpIGJ1dAotCSAqIGhvbGRpbmcgImVwbXV0ZXgiIGlzIHN1ZmZpY2VudCBoZXJlLgorCSAqIGhvbGRpbmcgImVwbXV0ZXgiIGlzIHN1ZmZpY2llbnQgaGVyZS4KIAkgKi8KIAltdXRleF9sb2NrKCZlcG11dGV4KTsKIApAQCAtNzIwLDcgKzcyMCw3IEBACiAJLyoKIAkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAogCSAqIG5lY2Vzc2FyeS4gSXQgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlJ3JlIGluIHRoZSAic3RydWN0IGZpbGUiCi0JICogY2xlYW51cCBwYXRoLCBhbmQgdGhpcyBtZWFucyB0aGF0IG5vb25lIGlzIHVzaW5nIHRoaXMgZmlsZSBhbnltb3JlLgorCSAqIGNsZWFudXAgcGF0aCwgYW5kIHRoaXMgbWVhbnMgdGhhdCBubyBvbmUgaXMgdXNpbmcgdGhpcyBmaWxlIGFueW1vcmUuCiAJICogU28sIGZvciBleGFtcGxlLCBlcG9sbF9jdGwoKSBjYW5ub3QgaGl0IGhlcmUgc2luY2UgaWYgd2UgcmVhY2ggdGhpcwogCSAqIHBvaW50LCB0aGUgZmlsZSBjb3VudGVyIGFscmVhZHkgd2VudCB0byB6ZXJvIGFuZCBmZ2V0KCkgd291bGQgZmFpbC4KIAkgKiBUaGUgb25seSBoaXQgbWlnaHQgY29tZSBmcm9tIGVwX2ZyZWUoKSBidXQgYnkgaG9sZGluZyB0aGUgbXV0ZXgKQEAgLTExMTIsNyArMTExMiw3IEBACiAJCQkJICogVHJpZ2dlciBtb2RlLCB3ZSBuZWVkIHRvIGluc2VydCBiYWNrIGluc2lkZQogCQkJCSAqIHRoZSByZWFkeSBsaXN0LCBzbyB0aGF0IHRoZSBuZXh0IGNhbGwgdG8KIAkJCQkgKiBlcG9sbF93YWl0KCkgd2lsbCBjaGVjayBhZ2FpbiB0aGUgZXZlbnRzCi0JCQkJICogYXZhaWxhYmlsaXR5LiBBdCB0aGlzIHBvaW50LCBub29uZSBjYW4gaW5zZXJ0CisJCQkJICogYXZhaWxhYmlsaXR5LiBBdCB0aGlzIHBvaW50LCBubyBvbmUgY2FuIGluc2VydAogCQkJCSAqIGludG8gZXAtPnJkbGxpc3QgYmVzaWRlcyB1cy4gVGhlIGVwb2xsX2N0bCgpCiAJCQkJICogY2FsbGVycyBhcmUgbG9ja2VkIG91dCBieQogCQkJCSAqIGVwX3NjYW5fcmVhZHlfbGlzdCgpIGhvbGRpbmcgIm10eCIgYW5kIHRoZQpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvY29tbW9uLmggYi9mcy9leG9mcy9jb21tb24uaAppbmRleCA1ZTc0YWQzLi4zYmJkNDY5IDEwMDY0NAotLS0gYS9mcy9leG9mcy9jb21tb24uaAorKysgYi9mcy9leG9mcy9jb21tb24uaApAQCAtMTE1LDcgKzExNSw3IEBACiAgKiBEZXNjcmliZXMgdGhlIHJhaWQgdXNlZCBpbiB0aGUgRlMuIEl0IGlzIHBhcnQgb2YgdGhlIGRldmljZSB0YWJsZS4KICAqIFRoaXMgaGVyZSBpcyB0YWtlbiBmcm9tIHRoZSBwTkZTLW9iamVjdHMgZGVmaW5pdGlvbi4gSW4gZXhvZnMgd2UKICAqIHVzZSBvbmUgcmFpZCBwb2xpY3kgdGhyb3VnaC1vdXQgdGhlIGZpbGVzeXN0ZW0uIChOT1RFOiB0aGUgZnVubnkKLSAqIGFsaWdubWVudCBhdCBiZWdpbmluZy4gV2UgdGFrZSBjYXJlIG9mIGl0IGF0IGV4b2ZzX2RldmljZV90YWJsZS4KKyAqIGFsaWdubWVudCBhdCBiZWdpbm5pbmcuIFdlIHRha2UgY2FyZSBvZiBpdCBhdCBleG9mc19kZXZpY2VfdGFibGUuCiAgKi8KIHN0cnVjdCBleG9mc19kdF9kYXRhX21hcCB7CiAJX19sZTMyCWNiX251bV9jb21wczsKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXU4CXN5c3RlbWlkW09TRF9TWVNURU1JRF9MRU5dOwogCV9fbGU2NAlsb25nX25hbWVfb2Zmc2V0OwkvKiBJZiAhMCB0aGVuIG9mZnNldC1pbi1maWxlICovCiAJX19sZTMyCW9zZG5hbWVfbGVuOwkJLyogKi8KLQl1OAlvc2RuYW1lWzQ0XTsJCS8qIEVtYmJlZGVkLCBVc3VzYWxseSBhbiBhc2NpIHV1aWQgKi8KKwl1OAlvc2RuYW1lWzQ0XTsJCS8qIEVtYmJlZGVkLCBVc3VhbGx5IGFuIGFzY2kgdXVpZCAqLwogfSBfX3BhY2tlZDsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYmFsbG9jLmMgYi9mcy9leHQyL2JhbGxvYy5jCmluZGV4IDBkMDZmNGUuLjhmNDRjZWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYmFsbG9jLmMKKysrIGIvZnMvZXh0Mi9iYWxsb2MuYwpAQCAtODUwLDcgKzg1MCw3IEBACiAJCXJzdl93aW5kb3dfcmVtb3ZlKHNiLCBteV9yc3YpOwogCiAJLyoKLQkgKiBMZXQncyBib29rIHRoZSB3aG9sZSBhdmFsaWFibGUgd2luZG93IGZvciBub3cuICBXZSB3aWxsIGNoZWNrIHRoZQorCSAqIExldCdzIGJvb2sgdGhlIHdob2xlIGF2YWlsYWJsZSB3aW5kb3cgZm9yIG5vdy4gIFdlIHdpbGwgY2hlY2sgdGhlCiAJICogZGlzayBiaXRtYXAgbGF0ZXIgYW5kIHRoZW4sIGlmIHRoZXJlIGFyZSBmcmVlIGJsb2NrcyB0aGVuIHdlIGFkanVzdAogCSAqIHRoZSB3aW5kb3cgc2l6ZSBpZiBpdCdzIGxhcmdlciB0aGFuIHJlcXVlc3RlZC4KIAkgKiBPdGhlcndpc2UsIHdlIHdpbGwgcmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSB0cmVlIG5leHQgdGltZQpAQCAtMTM1Nyw5ICsxMzU3LDkgQEAKIAkJCWdvdG8gYWxsb2NhdGVkOwogCX0KIAkvKgotCSAqIFdlIG1heSBlbmQgdXAgYSBib2d1cyBlYWxpZXIgRU5PU1BDIGVycm9yIGR1ZSB0bworCSAqIFdlIG1heSBlbmQgdXAgYSBib2d1cyBlYXJsaWVyIEVOT1NQQyBlcnJvciBkdWUgdG8KIAkgKiBmaWxlc3lzdGVtIGlzICJmdWxsIiBvZiByZXNlcnZhdGlvbnMsIGJ1dAotCSAqIHRoZXJlIG1heWJlIGluZGVlZCBmcmVlIGJsb2NrcyBhdmFsaWFibGUgb24gZGlzaworCSAqIHRoZXJlIG1heWJlIGluZGVlZCBmcmVlIGJsb2NrcyBhdmFpbGFibGUgb24gZGlzawogCSAqIEluIHRoaXMgY2FzZSwgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHJlc2VydmF0aW9ucwogCSAqIGp1c3QgZG8gYmxvY2sgYWxsb2NhdGlvbiBhcyB3aXRob3V0IHJlc2VydmF0aW9ucy4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuYwppbmRleCBjNDdmNzA2Li43ODhlMDlhIDEwMDY0NAotLS0gYS9mcy9leHQyL2lub2RlLmMKKysrIGIvZnMvZXh0Mi9pbm9kZS5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJcmV0dXJuIGluZC0+YmgtPmJfYmxvY2tucjsKIAogCS8qCi0JICogSXQgaXMgZ29pbmcgdG8gYmUgcmVmZXJlZCBmcm9tIGlub2RlIGl0c2VsZj8gT0ssIGp1c3QgcHV0IGl0IGludG8KKwkgKiBJdCBpcyBnb2luZyB0byBiZSByZWZlcnJlZCBmcm9tIGlub2RlIGl0c2VsZj8gT0ssIGp1c3QgcHV0IGl0IGludG8KIAkgKiB0aGUgc2FtZSBjeWxpbmRlciBncm91cCB0aGVuLgogCSAqLwogCWJnX3N0YXJ0ID0gZXh0Ml9ncm91cF9maXJzdF9ibG9ja19ubyhpbm9kZS0+aV9zYiwgZWktPmlfYmxvY2tfZ3JvdXApOwpAQCAtOTEzLDcgKzkxMyw3IEBACiAgKgogICoJV2hlbiB3ZSBkbyB0cnVuY2F0ZSgpIHdlIG1heSBoYXZlIHRvIGNsZWFuIHRoZSBlbmRzIG9mIHNldmVyYWwgaW5kaXJlY3QKICAqCWJsb2NrcyBidXQgbGVhdmUgdGhlIGJsb2NrcyB0aGVtc2VsdmVzIGFsaXZlLiBCbG9jayBpcyBwYXJ0aWFsbHkKLSAqCXRydW5jYXRlZCBpZiBzb21lIGRhdGEgYmVsb3cgdGhlIG5ldyBpX3NpemUgaXMgcmVmZXJlZCBmcm9tIGl0IChhbmQKKyAqCXRydW5jYXRlZCBpZiBzb21lIGRhdGEgYmVsb3cgdGhlIG5ldyBpX3NpemUgaXMgcmVmZXJyZWQgZnJvbSBpdCAoYW5kCiAgKglpdCBpcyBvbiB0aGUgcGF0aCB0byB0aGUgZmlyc3QgY29tcGxldGVseSB0cnVuY2F0ZWQgZGF0YSBibG9jaywgaW5kZWVkKS4KICAqCVdlIGhhdmUgdG8gZnJlZSB0aGUgdG9wIG9mIHRoYXQgcGF0aCBhbG9uZyB3aXRoIGV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0CiAgKglvZiB0aGUgcGF0aC4gU2luY2Ugbm8gYWxsb2NhdGlvbiBwYXN0IHRoZSB0cnVuY2F0aW9uIHBvaW50IGlzIHBvc3NpYmxlCkBAIC05OTAsNyArOTkwLDcgQEAKICAqCUBwOglhcnJheSBvZiBibG9jayBudW1iZXJzCiAgKglAcToJcG9pbnRzIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGVuZCBvZiBhcnJheQogICoKLSAqCVdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJlZCBmcm9tIHRoYXQgYXJyYXkgKG51bWJlcnMgYXJlCisgKglXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVycmVkIGZyb20gdGhhdCBhcnJheSAobnVtYmVycyBhcmUKICAqCXN0b3JlZCBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCkgYW5kIHVwZGF0aW5nIEBpbm9kZS0+aV9ibG9ja3MKICAqCWFwcHJvcHJpYXRlbHkuCiAgKi8KQEAgLTEwMzAsNyArMTAzMCw3IEBACiAgKglAcToJcG9pbnRlciBpbW1lZGlhdGVseSBwYXN0IHRoZSBlbmQgb2YgYXJyYXkKICAqCUBkZXB0aDoJZGVwdGggb2YgdGhlIGJyYW5jaGVzIHRvIGZyZWUKICAqCi0gKglXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVyZWQgZnJvbSB0aGVzZSBicmFuY2hlcyAobnVtYmVycyBhcmUKKyAqCVdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJyZWQgZnJvbSB0aGVzZSBicmFuY2hlcyAobnVtYmVycyBhcmUKICAqCXN0b3JlZCBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCkgYW5kIHVwZGF0aW5nIEBpbm9kZS0+aV9ibG9ja3MKICAqCWFwcHJvcHJpYXRlbHkuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCA3NzMxNjk1Li4wYTc4ZGFlIDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0xMzgyLDcgKzEzODIsNyBAQAogCiAvKiBSZWFkIGRhdGEgZnJvbSBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QgYWZmb3JkCiAgKiBhY3F1aXJpbmcgdGhlIGxvY2tzLi4uIEFzIHF1b3RhIGZpbGVzIGFyZSBuZXZlciB0cnVuY2F0ZWQgYW5kIHF1b3RhIGNvZGUKLSAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm9vbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQorICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBubyBvbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQogICogd2UgZG9uJ3QgaGF2ZSB0byBiZSBhZnJhaWQgb2YgcmFjZXMgKi8KIHN0YXRpYyBzc2l6ZV90IGV4dDJfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSwKIAkJCSAgICAgICBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKQpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jCmluZGV4IGMyZTRkY2UuLjUyOTk3MDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHIuYworKysgYi9mcy9leHQyL3hhdHRyLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKICAqCiAgKiBUaGUgYmxvY2sgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IG11bHRpcGxlIGVudHJ5IGRlc2NyaXB0b3JzLiBUaGVzZSBlbnRyeQotICogZGVzY3JpcHRvcnMgYXJlIHZhcmlhYmxlIGluIHNpemUsIGFuZCBhbGxpZ25lZCB0byBFWFQyX1hBVFRSX1BBRAorICogZGVzY3JpcHRvcnMgYXJlIHZhcmlhYmxlIGluIHNpemUsIGFuZCBhbGlnbmVkIHRvIEVYVDJfWEFUVFJfUEFECiAgKiBieXRlIGJvdW5kYXJpZXMuIFRoZSBlbnRyeSBkZXNjcmlwdG9ycyBhcmUgc29ydGVkIGJ5IGF0dHJpYnV0ZSBuYW1lLAogICogc28gdGhhdCB0d28gZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrcyBjYW4gYmUgY29tcGFyZWQgZWZmaWNpZW50bHkuCiAgKgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggMTUzMjQyMTguLmZlNTIyOTcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtNTkwLDcgKzU5MCw3IEBACiAJCQkJQlVGRkVSX1RSQUNFKGRlYnVnX2JoLCAiRGVsZXRlZCEiKTsKIAkJCQlpZiAoIWJoMmpoKGJpdG1hcF9iaCktPmJfY29tbWl0dGVkX2RhdGEpCiAJCQkJCUJVRkZFUl9UUkFDRShkZWJ1Z19iaCwKLQkJCQkJCSJObyBjb21taXRlZCBkYXRhIGluIGJpdG1hcCIpOworCQkJCQkJIk5vIGNvbW1pdHRlZCBkYXRhIGluIGJpdG1hcCIpOwogCQkJCUJVRkZFUl9UUkFDRTIoZGVidWdfYmgsIGJpdG1hcF9iaCwgImJpdG1hcCIpOwogCQkJCV9fYnJlbHNlKGRlYnVnX2JoKTsKIAkJCX0KQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJCXJzdl93aW5kb3dfcmVtb3ZlKHNiLCBteV9yc3YpOwogCiAJLyoKLQkgKiBMZXQncyBib29rIHRoZSB3aG9sZSBhdmFsaWFibGUgd2luZG93IGZvciBub3cuICBXZSB3aWxsIGNoZWNrIHRoZQorCSAqIExldCdzIGJvb2sgdGhlIHdob2xlIGF2YWlsYWJsZSB3aW5kb3cgZm9yIG5vdy4gIFdlIHdpbGwgY2hlY2sgdGhlCiAJICogZGlzayBiaXRtYXAgbGF0ZXIgYW5kIHRoZW4sIGlmIHRoZXJlIGFyZSBmcmVlIGJsb2NrcyB0aGVuIHdlIGFkanVzdAogCSAqIHRoZSB3aW5kb3cgc2l6ZSBpZiBpdCdzIGxhcmdlciB0aGFuIHJlcXVlc3RlZC4KIAkgKiBPdGhlcndpc2UsIHdlIHdpbGwgcmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSB0cmVlIG5leHQgdGltZQpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAKICAqCiAgKiBleHQzX3Nob3VsZF9yZXRyeV9hbGxvYygpIGlzIGNhbGxlZCB3aGVuIEVOT1NQQyBpcyByZXR1cm5lZCwgYW5kIGlmCiAgKiBpdCBpcyBwcm9maXRhYmxlIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0Ci0gKiBmb3IgdGhlIGN1cnJlbnQgb3IgY29tbWl0aW5nIHRyYW5zYWN0aW9uIHRvIGNvbXBsZXRlLCBhbmQgdGhlbgorICogZm9yIHRoZSBjdXJyZW50IG9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUsIGFuZCB0aGVuCiAgKiByZXR1cm4gVFJVRS4KICAqCiAgKiBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHJldHJpZXMgZXhjZWVkIHRocmVlIHRpbWVzLCByZXR1cm4gRkFMU0UuCkBAIC0xNjMyLDkgKzE2MzIsOSBAQAogCQkJZ290byBhbGxvY2F0ZWQ7CiAJfQogCS8qCi0JICogV2UgbWF5IGVuZCB1cCBhIGJvZ3VzIGVhbGllciBFTk9TUEMgZXJyb3IgZHVlIHRvCisJICogV2UgbWF5IGVuZCB1cCBhIGJvZ3VzIGVhcmxpZXIgRU5PU1BDIGVycm9yIGR1ZSB0bwogCSAqIGZpbGVzeXN0ZW0gaXMgImZ1bGwiIG9mIHJlc2VydmF0aW9ucywgYnV0Ci0JICogdGhlcmUgbWF5YmUgaW5kZWVkIGZyZWUgYmxvY2tzIGF2YWxpYWJsZSBvbiBkaXNrCisJICogdGhlcmUgbWF5YmUgaW5kZWVkIGZyZWUgYmxvY2tzIGF2YWlsYWJsZSBvbiBkaXNrCiAJICogSW4gdGhpcyBjYXNlLCB3ZSBqdXN0IGZvcmdldCBhYm91dCB0aGUgcmVzZXJ2YXRpb25zCiAJICoganVzdCBkbyBibG9jayBhbGxvY2F0aW9uIGFzIHdpdGhvdXQgcmVzZXJ2YXRpb25zLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IGZlMjU0MWQuLjY4YjJlNDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTIwNTUsNyArMjA1NSw3IEBACiAgKgogICoJV2hlbiB3ZSBkbyB0cnVuY2F0ZSgpIHdlIG1heSBoYXZlIHRvIGNsZWFuIHRoZSBlbmRzIG9mIHNldmVyYWwKICAqCWluZGlyZWN0IGJsb2NrcyBidXQgbGVhdmUgdGhlIGJsb2NrcyB0aGVtc2VsdmVzIGFsaXZlLiBCbG9jayBpcwotICoJcGFydGlhbGx5IHRydW5jYXRlZCBpZiBzb21lIGRhdGEgYmVsb3cgdGhlIG5ldyBpX3NpemUgaXMgcmVmZXJlZAorICoJcGFydGlhbGx5IHRydW5jYXRlZCBpZiBzb21lIGRhdGEgYmVsb3cgdGhlIG5ldyBpX3NpemUgaXMgcmVmZXJyZWQKICAqCWZyb20gaXQgKGFuZCBpdCBpcyBvbiB0aGUgcGF0aCB0byB0aGUgZmlyc3QgY29tcGxldGVseSB0cnVuY2F0ZWQKICAqCWRhdGEgYmxvY2ssIGluZGVlZCkuICBXZSBoYXZlIHRvIGZyZWUgdGhlIHRvcCBvZiB0aGF0IHBhdGggYWxvbmcKICAqCXdpdGggZXZlcnl0aGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHBhdGguIFNpbmNlIG5vIGFsbG9jYXRpb24KQEAgLTIxODQsNyArMjE4NCw3IEBACiAgKiBAZmlyc3Q6CWFycmF5IG9mIGJsb2NrIG51bWJlcnMKICAqIEBsYXN0Oglwb2ludHMgaW1tZWRpYXRlbHkgcGFzdCB0aGUgZW5kIG9mIGFycmF5CiAgKgotICogV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcmVkIGZyb20gdGhhdCBhcnJheSAobnVtYmVycyBhcmUgc3RvcmVkIGFzCisgKiBXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVycmVkIGZyb20gdGhhdCBhcnJheSAobnVtYmVycyBhcmUgc3RvcmVkIGFzCiAgKiBsaXR0bGUtZW5kaWFuIDMyLWJpdCkgYW5kIHVwZGF0aW5nIEBpbm9kZS0+aV9ibG9ja3MgYXBwcm9wcmlhdGVseS4KICAqCiAgKiBXZSBhY2N1bXVsYXRlIGNvbnRpZ3VvdXMgcnVucyBvZiBibG9ja3MgdG8gZnJlZS4gIENvbnZlbmllbnRseSwgaWYgdGhlc2UKQEAgLTIyNzIsNyArMjI3Miw3IEBACiAgKglAbGFzdDoJcG9pbnRlciBpbW1lZGlhdGVseSBwYXN0IHRoZSBlbmQgb2YgYXJyYXkKICAqCUBkZXB0aDoJZGVwdGggb2YgdGhlIGJyYW5jaGVzIHRvIGZyZWUKICAqCi0gKglXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVyZWQgZnJvbSB0aGVzZSBicmFuY2hlcyAobnVtYmVycyBhcmUKKyAqCVdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJyZWQgZnJvbSB0aGVzZSBicmFuY2hlcyAobnVtYmVycyBhcmUKICAqCXN0b3JlZCBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCkgYW5kIHVwZGF0aW5nIEBpbm9kZS0+aV9ibG9ja3MKICAqCWFwcHJvcHJpYXRlbHkuCiAgKi8KQEAgLTMyOTEsNyArMzI5MSw3IEBACiAJaWYgKGV4dDNfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpCiAJCXJldCA9IDMgKiAoYnBwICsgaW5kaXJlY3RzKSArIDI7CiAJZWxzZQotCQlyZXQgPSAyICogKGJwcCArIGluZGlyZWN0cykgKyAyOworCQlyZXQgPSAyICogKGJwcCArIGluZGlyZWN0cykgKyBpbmRpcmVjdHMgKyAyOwogCiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJLyogV2Uga25vdyB0aGF0IHN0cnVjdHVyZSB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgZHVyaW5nIGRxdW90X2luaXRpYWxpemUgc28KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDEwOGIxNDIuLjc5MTZlNGNlIDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTEwMDksNyArMTAwOSw3IEBACiAKIAlpZiAodGVzdF9vcHQoc2IsIERFQlVHKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkVYVDMtZnM6IGV4dGVuZGluZyBsYXN0IGdyb3VwIGZyb20gIkUzRlNCTEsKLQkJICAgICAgICIgdXB0byAiRTNGU0JMSyIgYmxvY2tzXG4iLAorCQkgICAgICAgIiB1cCB0byAiRTNGU0JMSyIgYmxvY2tzXG4iLAogCQkgICAgICAgb19ibG9ja3NfY291bnQsIG5fYmxvY2tzX2NvdW50KTsKIAogCWlmIChuX2Jsb2Nrc19jb3VudCA9PSAwIHx8IG5fYmxvY2tzX2NvdW50ID09IG9fYmxvY2tzX2NvdW50KQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IDA3MTY4OWYuLjNjNmE5ZTAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTI5MjUsNyArMjkyNSw3IEBACiAKIC8qIFJlYWQgZGF0YSBmcm9tIHF1b3RhZmlsZSAtIGF2b2lkIHBhZ2VjYWNoZSBhbmQgc3VjaCBiZWNhdXNlIHdlIGNhbm5vdCBhZmZvcmQKICAqIGFjcXVpcmluZyB0aGUgbG9ja3MuLi4gQXMgcXVvdGEgZmlsZXMgYXJlIG5ldmVyIHRydW5jYXRlZCBhbmQgcXVvdGEgY29kZQotICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBub29uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCisgKiBpdHNlbGYgc2VyaWFsaXplcyB0aGUgb3BlcmF0aW9ucyAoYW5kIG5vIG9uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCiAgKiB3ZSBkb24ndCBoYXZlIHRvIGJlIGFmcmFpZCBvZiByYWNlcyAqLwogc3RhdGljIHNzaXplX3QgZXh0M19xdW90YV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBjaGFyICpkYXRhLAogCQkJICAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpCmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuYwppbmRleCA5N2I5NzBlLi4xYzY3MTM5IDEwMDY0NAotLS0gYS9mcy9leHQ0L2JhbGxvYy5jCisrKyBiL2ZzL2V4dDQvYmFsbG9jLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogICoKICAqIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKCkgaXMgY2FsbGVkIHdoZW4gRU5PU1BDIGlzIHJldHVybmVkLCBhbmQgaWYKICAqIGl0IGlzIHByb2ZpdGFibGUgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQKLSAqIGZvciB0aGUgY3VycmVudCBvciBjb21taXRpbmcgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUsIGFuZCB0aGVuCisgKiBmb3IgdGhlIGN1cnJlbnQgb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbiB0byBjb21wbGV0ZSwgYW5kIHRoZW4KICAqIHJldHVybiBUUlVFLgogICoKICAqIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcyBleGNlZWQgdGhyZWUgdGltZXMsIHJldHVybiBGQUxTRS4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmggYi9mcy9leHQ0L2V4dDRfamJkMi5oCmluZGV4IGUyNWU5OWIuLmQwZjUzNTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmgKKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuaApAQCAtODYsOCArODYsOCBAQAogCiAjaWZkZWYgQ09ORklHX1FVT1RBCiAvKiBBbW91bnQgb2YgYmxvY2tzIG5lZWRlZCBmb3IgcXVvdGEgdXBkYXRlIC0gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmUgd2FzCi0gKiBhbGxvY2F0ZWQgc28gd2UgbmVlZCB0byB1cGRhdGUgb25seSBpbm9kZStkYXRhICovCi0jZGVmaW5lIEVYVDRfUVVPVEFfVFJBTlNfQkxPQ0tTKHNiKSAodGVzdF9vcHQoc2IsIFFVT1RBKSA/IDIgOiAwKQorICogYWxsb2NhdGVkIHNvIHdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YSBibG9jayAqLworI2RlZmluZSBFWFQ0X1FVT1RBX1RSQU5TX0JMT0NLUyhzYikgKHRlc3Rfb3B0KHNiLCBRVU9UQSkgPyAxIDogMCkKIC8qIEFtb3VudCBvZiBibG9ja3MgbmVlZGVkIGZvciBxdW90YSBpbnNlcnQvZGVsZXRlIC0gd2UgZG8gc29tZSBibG9jayB3cml0ZXMKICAqIGJ1dCBpbm9kZSwgc2IgYW5kIGdyb3VwIHVwZGF0ZXMgYXJlIGRvbmUgb25seSBvbmNlICovCiAjZGVmaW5lIEVYVDRfUVVPVEFfSU5JVF9CTE9DS1Moc2IpICh0ZXN0X29wdChzYiwgUVVPVEEpID8gKERRVU9UX0lOSVRfQUxMT0MqXApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCBkZDJjYjUwLi40ODkwZDZmIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMTcyOSw3ICsxNzI5LDcgQEAKIAkJQlVHX09OKG5wYXRoLT5wX2RlcHRoICE9IHBhdGgtPnBfZGVwdGgpOwogCQllaCA9IG5wYXRoW2RlcHRoXS5wX2hkcjsKIAkJaWYgKGxlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKSA8IGxlMTZfdG9fY3B1KGVoLT5laF9tYXgpKSB7Ci0JCQlleHRfZGVidWcoIm5leHQgbGVhZiBpc250IGZ1bGwoJWQpXG4iLAorCQkJZXh0X2RlYnVnKCJuZXh0IGxlYWYgaXNuJ3QgZnVsbCglZClcbiIsCiAJCQkJICBsZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcykpOwogCQkJcGF0aCA9IG5wYXRoOwogCQkJZ290byByZXBlYXQ7CkBAIC0yNTMzLDcgKzI1MzMsNyBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV4dDRfZXh0X21hcF9ibG9ja3MoKSBpZiBzb21lb25lIHRyaWVzIHRvIHdyaXRlCiAgKiB0byBhbiB1bmluaXRpYWxpemVkIGV4dGVudC4gSXQgbWF5IHJlc3VsdCBpbiBzcGxpdHRpbmcgdGhlIHVuaW5pdGlhbGl6ZWQKLSAqIGV4dGVudCBpbnRvIG11bHRpcGxlIGV4dGVudHMgKHVwdG8gdGhyZWUgLSBvbmUgaW5pdGlhbGl6ZWQgYW5kIHR3bworICogZXh0ZW50IGludG8gbXVsdGlwbGUgZXh0ZW50cyAodXAgdG8gdGhyZWUgLSBvbmUgaW5pdGlhbGl6ZWQgYW5kIHR3bwogICogdW5pbml0aWFsaXplZCkuCiAgKiBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllczoKICAqICAgYT4gVGhlcmUgaXMgbm8gc3BsaXQgcmVxdWlyZWQ6IEVudGlyZSBleHRlbnQgc2hvdWxkIGJlIGluaXRpYWxpemVkCkBAIC0zMTc0LDcgKzMxNzQsNyBAQAogCQkJCQkJICAgcGF0aCwgZmxhZ3MpOwogCQkvKgogCQkgKiBGbGFnIHRoZSBpbm9kZShub24gYWlvIGNhc2UpIG9yIGVuZF9pbyBzdHJ1Y3QgKGFpbyBjYXNlKQotCQkgKiB0aGF0IHRoaXMgSU8gbmVlZHMgdG8gY29udmVydGlvbiB0byB3cml0dGVuIHdoZW4gSU8gaXMKKwkJICogdGhhdCB0aGlzIElPIG5lZWRzIHRvIGNvbnZlcnNpb24gdG8gd3JpdHRlbiB3aGVuIElPIGlzCiAJCSAqIGNvbXBsZXRlZAogCQkgKi8KIAkJaWYgKGlvICYmICEoaW8tPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pKSB7CkBAIC0zNDYwLDEwICszNDYwLDEwIEBACiAJCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZCgmbmV3ZXgpOwogCQkvKgogCQkgKiBpb19lbmQgc3RydWN0dXJlIHdhcyBjcmVhdGVkIGZvciBldmVyeSBJTyB3cml0ZSB0byBhbgotCQkgKiB1bmluaXRpYWxpemVkIGV4dGVudC4gVG8gYXZvaWQgdW5lY2Vzc2FyeSBjb252ZXJzaW9uLAorCQkgKiB1bmluaXRpYWxpemVkIGV4dGVudC4gVG8gYXZvaWQgdW5uZWNlc3NhcnkgY29udmVyc2lvbiwKIAkJICogaGVyZSB3ZSBmbGFnIHRoZSBJTyB0aGF0IHJlYWxseSBuZWVkcyB0aGUgY29udmVyc2lvbi4KIAkJICogRm9yIG5vbiBhc3ljbiBkaXJlY3QgSU8gY2FzZSwgZmxhZyB0aGUgaW5vZGUgc3RhdGUKLQkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCisJCSAqIHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIGNvbnZlcnNpb24gd2hlbiBJTyBpcyBkb25lLgogCQkgKi8KIAkJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19QUkVfSU8pKSB7CiAJCQlpZiAoaW8gJiYgIShpby0+ZmxhZyAmIEVYVDRfSU9fRU5EX1VOV1JJVFRFTikpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuYwppbmRleCA3Zjc0MDE5Li5lOTQ3M2NiIDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZzeW5jLmMKKysrIGIvZnMvZXh0NC9mc3luYy5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJICogdG8gdGhlIHdvcmstdG8tYmUgc2NoZWR1bGUgaXMgZnJlZWQuCiAJCSAqCiAJCSAqIFRodXMgd2UgbmVlZCB0byBrZWVwIHRoZSBpbyBzdHJ1Y3R1cmUgc3RpbGwgdmFsaWQgaGVyZSBhZnRlcgotCQkgKiBjb252ZXJ0aW9uIGZpbmlzaGVkLiBUaGUgaW8gc3RydWN0dXJlIGhhcyBhIGZsYWcgdG8KKwkJICogY29udmVyc2lvbiBmaW5pc2hlZC4gVGhlIGlvIHN0cnVjdHVyZSBoYXMgYSBmbGFnIHRvCiAJCSAqIGF2b2lkIGRvdWJsZSBjb252ZXJ0aW5nIGZyb20gYm90aCBmc3luYyBhbmQgYmFja2dyb3VuZCB3b3JrCiAJCSAqIHF1ZXVlIHdvcmsuCiAJCSAqLwpAQCAtMTI1LDkgKzEyNSwxMSBAQAogICogdGhlIHBhcmVudCBkaXJlY3RvcnkncyBwYXJlbnQgYXMgd2VsbCwgYW5kIHNvIG9uIHJlY3Vyc2l2ZWx5LCBpZgogICogdGhleSBhcmUgYWxzbyBmcmVzaGx5IGNyZWF0ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGV4dDRfc3luY19wYXJlbnQoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbnQgZXh0NF9zeW5jX3BhcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmM7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKIAogCXdoaWxlIChpbm9kZSAmJiBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTkVXRU5UUlkpKSB7CiAJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTkVXRU5UUlkpOwpAQCAtMTM2LDggKzEzOCwxNyBAQAogCQlpZiAoIWRlbnRyeSB8fCAhZGVudHJ5LT5kX3BhcmVudCB8fCAhZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSkKIAkJCWJyZWFrOwogCQlpbm9kZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7Ci0JCXN5bmNfbWFwcGluZ19idWZmZXJzKGlub2RlLT5pX21hcHBpbmcpOworCQlyZXQgPSBzeW5jX21hcHBpbmdfYnVmZmVycyhpbm9kZS0+aV9tYXBwaW5nKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQltZW1zZXQoJndiYywgMCwgc2l6ZW9mKHdiYykpOworCQl3YmMuc3luY19tb2RlID0gV0JfU1lOQ19BTEw7CisJCXdiYy5ucl90b193cml0ZSA9IDA7ICAgICAgICAgLyogb25seSB3cml0ZSBvdXQgdGhlIGlub2RlICovCisJCXJldCA9IHN5bmNfaW5vZGUoaW5vZGUsICZ3YmMpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CiAJfQorCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xNzYsNyArMTg3LDcgQEAKIAlpZiAoIWpvdXJuYWwpIHsKIAkJcmV0ID0gZ2VuZXJpY19maWxlX2ZzeW5jKGZpbGUsIGRhdGFzeW5jKTsKIAkJaWYgKCFyZXQgJiYgIWxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpCi0JCQlleHQ0X3N5bmNfcGFyZW50KGlub2RlKTsKKwkJCXJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCAxYTg2MjgyLi5mMmZhNWU4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0yNTAyLDYgKzI1MDIsNyBAQAogCQkgKiBmb3IgcGFydGlhbCB3cml0ZS4KIAkJICovCiAJCXNldF9idWZmZXJfbmV3KGJoKTsKKwkJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI1ODgsNyArMjU4OSw3IEBACiAgKiBiZWNhdXNlIHdlIHNob3VsZCBoYXZlIGhvbGVzIGZpbGxlZCBmcm9tIGV4dDRfcGFnZV9ta3dyaXRlKCkuIFdlIGV2ZW4gZG9uJ3QKICAqIG5lZWQgdG8gZmlsZSB0aGUgaW5vZGUgdG8gdGhlIHRyYW5zYWN0aW9uJ3MgbGlzdCBpbiBvcmRlcmVkIG1vZGUgYmVjYXVzZSBpZgogICogd2UgYXJlIHdyaXRpbmcgYmFjayBkYXRhIGFkZGVkIGJ5IHdyaXRlKCksIHRoZSBpbm9kZSBpcyBhbHJlYWR5IHRoZXJlIGFuZCBpZgotICogd2UgYXJlIHdyaXRpbmcgYmFjayBkYXRhIG1vZGlmaWVkIHZpYSBtbWFwKCksIG5vb25lIGd1YXJhbnRlZXMgaW4gd2hpY2gKKyAqIHdlIGFyZSB3cml0aW5nIGJhY2sgZGF0YSBtb2RpZmllZCB2aWEgbW1hcCgpLCBubyBvbmUgZ3VhcmFudGVlcyBpbiB3aGljaAogICogdHJhbnNhY3Rpb24gdGhlIGRhdGEgd2lsbCBoaXQgdGhlIGRpc2suIEluIGNhc2Ugd2UgYXJlIGpvdXJuYWxpbmcgZGF0YSwgd2UKICAqIGNhbm5vdCBzdGFydCB0cmFuc2FjdGlvbiBkaXJlY3RseSBiZWNhdXNlIHRyYW5zYWN0aW9uIHN0YXJ0IHJhbmtzIGFib3ZlIHBhZ2UKICAqIGxvY2sgc28gd2UgaGF2ZSB0byBkbyBzb21lIG1hZ2ljLgpAQCAtMjY5MCw3ICsyNjkxLDcgQEAKIAogLyoKICAqIFRoaXMgaXMgY2FsbGVkIHZpYSBleHQ0X2RhX3dyaXRlcGFnZXMoKSB0bwotICogY2FsdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBjcmVkaXRzIHRvIHJlc2VydmUgdG8gZml0CisgKiBjYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBjcmVkaXRzIHRvIHJlc2VydmUgdG8gZml0CiAgKiBhIHNpbmdsZSBleHRlbnQgYWxsb2NhdGlvbiBpbnRvIGEgc2luZ2xlIHRyYW5zYWN0aW9uLAogICogZXh0NF9kYV93cml0cGVhZ2VzKCkgd2lsbCBsb29wIGNhbGxpbmcgdGhpcyBiZWZvcmUKICAqIHRoZSBibG9jayBhbGxvY2F0aW9uLgpAQCAtMzMwNCw3ICszMzA1LDcgQEAKIAkgKiB0aGUgcGFnZXMgYnkgY2FsbGluZyByZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZSgpIGJ1dCB0aGF0CiAJICogd291bGQgYmUgdWdseSBpbiB0aGUgZXh0cmVtZS4gIFNvIGluc3RlYWQgd2Ugd291bGQgbmVlZCB0bwogCSAqIHJlcGxpY2F0ZSBwYXJ0cyBvZiB0aGUgY29kZSBpbiB0aGUgYWJvdmUgZnVuY3Rpb25zLAotCSAqIHNpbXBsaWZ5aW5nIHRoZW0gYmVjdWFzZSB3ZSB3b3VsZG4ndCBhY3R1YWxseSBpbnRlbmQgdG8KKwkgKiBzaW1wbGlmeWluZyB0aGVtIGJlY2F1c2Ugd2Ugd291bGRuJ3QgYWN0dWFsbHkgaW50ZW5kIHRvCiAJICogd3JpdGUgb3V0IHRoZSBwYWdlcywgYnV0IHJhdGhlciBvbmx5IGNvbGxlY3QgY29udGlndW91cwogCSAqIGxvZ2ljYWwgYmxvY2sgZXh0ZW50cywgY2FsbCB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yLCBhbmQKIAkgKiB0aGVuIHVwZGF0ZSB0aGUgYnVmZmVyIGhlYWRzIHdpdGggdGhlIGJsb2NrIGFsbG9jYXRpb25zLgpAQCAtMzY5NCw3ICszNjk1LDcgQEAKICAqCiAgKiBUaGUgdW53cnJpdHRlbiBleHRlbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIHdyaXR0ZW4gd2hlbiBESU8gaXMgY29tcGxldGVkLgogICogRm9yIGFzeW5jIGRpcmVjdCBJTywgc2luY2UgdGhlIElPIG1heSBzdGlsbCBwZW5kaW5nIHdoZW4gcmV0dXJuLCB3ZQotICogc2V0IHVwIGFuIGVuZF9pbyBjYWxsIGJhY2sgZnVuY3Rpb24sIHdoaWNoIHdpbGwgZG8gdGhlIGNvbnZlcnRpb24KKyAqIHNldCB1cCBhbiBlbmRfaW8gY2FsbCBiYWNrIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGRvIHRoZSBjb252ZXJzaW9uCiAgKiB3aGVuIGFzeW5jIGRpcmVjdCBJTyBjb21wbGV0ZWQuCiAgKgogICogSWYgdGhlIE9fRElSRUNUIHdyaXRlIHdpbGwgZXh0ZW5kIHRoZSBmaWxlIHRoZW4gYWRkIHRoaXMgaW5vZGUgdG8gdGhlCkBAIC0zNzE3LDcgKzM3MTgsNyBAQAogIAkJICogV2UgY291bGQgZGlyZWN0IHdyaXRlIHRvIGhvbGVzIGFuZCBmYWxsb2NhdGUuCiAJCSAqCiAgCQkgKiBBbGxvY2F0ZWQgYmxvY2tzIHRvIGZpbGwgdGhlIGhvbGUgYXJlIG1hcmtlZCBhcyB1bmluaXRpYWxpemVkCi0gCQkgKiB0byBwcmV2ZW50IHBhcmFsZWwgYnVmZmVyZWQgcmVhZCB0byBleHBvc2UgdGhlIHN0YWxlIGRhdGEKKyAJCSAqIHRvIHByZXZlbnQgcGFyYWxsZWwgYnVmZmVyZWQgcmVhZCB0byBleHBvc2UgdGhlIHN0YWxlIGRhdGEKICAJCSAqIGJlZm9yZSBESU8gY29tcGxldGUgdGhlIGRhdGEgSU8uCiAJCSAqCiAgCQkgKiBBcyB0byBwcmV2aW91c2x5IGZhbGxvY2F0ZWQgZXh0ZW50cywgZXh0NCBnZXRfYmxvY2sKQEAgLTM3NzgsNyArMzc3OSw3IEBACiAJCQlpbnQgZXJyOwogCQkJLyoKIAkJCSAqIGZvciBub24gQUlPIGNhc2UsIHNpbmNlIHRoZSBJTyBpcyBhbHJlYWR5Ci0JCQkgKiBjb21wbGV0ZWQsIHdlIGNvdWxkIGRvIHRoZSBjb252ZXJ0aW9uIHJpZ2h0IGhlcmUKKwkJCSAqIGNvbXBsZXRlZCwgd2UgY291bGQgZG8gdGhlIGNvbnZlcnNpb24gcmlnaHQgaGVyZQogCQkJICovCiAJCQllcnIgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsCiAJCQkJCQkJICAgICBvZmZzZXQsIHJldCk7CkBAIC00MDI1LDcgKzQwMjYsNyBAQAogICoKICAqCVdoZW4gd2UgZG8gdHJ1bmNhdGUoKSB3ZSBtYXkgaGF2ZSB0byBjbGVhbiB0aGUgZW5kcyBvZiBzZXZlcmFsCiAgKglpbmRpcmVjdCBibG9ja3MgYnV0IGxlYXZlIHRoZSBibG9ja3MgdGhlbXNlbHZlcyBhbGl2ZS4gQmxvY2sgaXMKLSAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgaWYgc29tZSBkYXRhIGJlbG93IHRoZSBuZXcgaV9zaXplIGlzIHJlZmVyZWQKKyAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgaWYgc29tZSBkYXRhIGJlbG93IHRoZSBuZXcgaV9zaXplIGlzIHJlZmVycmVkCiAgKglmcm9tIGl0IChhbmQgaXQgaXMgb24gdGhlIHBhdGggdG8gdGhlIGZpcnN0IGNvbXBsZXRlbHkgdHJ1bmNhdGVkCiAgKglkYXRhIGJsb2NrLCBpbmRlZWQpLiAgV2UgaGF2ZSB0byBmcmVlIHRoZSB0b3Agb2YgdGhhdCBwYXRoIGFsb25nCiAgKgl3aXRoIGV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXRoLiBTaW5jZSBubyBhbGxvY2F0aW9uCkBAIC00MTY5LDcgKzQxNzAsNyBAQAogICogQGZpcnN0OglhcnJheSBvZiBibG9jayBudW1iZXJzCiAgKiBAbGFzdDoJcG9pbnRzIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGVuZCBvZiBhcnJheQogICoKLSAqIFdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJlZCBmcm9tIHRoYXQgYXJyYXkgKG51bWJlcnMgYXJlIHN0b3JlZCBhcworICogV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcnJlZCBmcm9tIHRoYXQgYXJyYXkgKG51bWJlcnMgYXJlIHN0b3JlZCBhcwogICogbGl0dGxlLWVuZGlhbiAzMi1iaXQpIGFuZCB1cGRhdGluZyBAaW5vZGUtPmlfYmxvY2tzIGFwcHJvcHJpYXRlbHkuCiAgKgogICogV2UgYWNjdW11bGF0ZSBjb250aWd1b3VzIHJ1bnMgb2YgYmxvY2tzIHRvIGZyZWUuICBDb252ZW5pZW50bHksIGlmIHRoZXNlCkBAIC00MjYxLDcgKzQyNjIsNyBAQAogICoJQGxhc3Q6CXBvaW50ZXIgaW1tZWRpYXRlbHkgcGFzdCB0aGUgZW5kIG9mIGFycmF5CiAgKglAZGVwdGg6CWRlcHRoIG9mIHRoZSBicmFuY2hlcyB0byBmcmVlCiAgKgotICoJV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcmVkIGZyb20gdGhlc2UgYnJhbmNoZXMgKG51bWJlcnMgYXJlCisgKglXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVycmVkIGZyb20gdGhlc2UgYnJhbmNoZXMgKG51bWJlcnMgYXJlCiAgKglzdG9yZWQgYXMgbGl0dGxlLWVuZGlhbiAzMi1iaXQpIGFuZCB1cGRhdGluZyBAaW5vZGUtPmlfYmxvY2tzCiAgKglhcHByb3ByaWF0ZWx5LgogICovCkBAIC00NDI5LDggKzQ0MzAsOCBAQAogCUluZGlyZWN0IGNoYWluWzRdOwogCUluZGlyZWN0ICpwYXJ0aWFsOwogCV9fbGUzMiBuciA9IDA7Ci0JaW50IG47Ci0JZXh0NF9sYmxrX3QgbGFzdF9ibG9jazsKKwlpbnQgbiA9IDA7CisJZXh0NF9sYmxrX3QgbGFzdF9ibG9jaywgbWF4X2Jsb2NrOwogCXVuc2lnbmVkIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAogCXRyYWNlX2V4dDRfdHJ1bmNhdGVfZW50ZXIoaW5vZGUpOwpAQCAtNDQ1NSwxNCArNDQ1NiwxOCBAQAogCiAJbGFzdF9ibG9jayA9IChpbm9kZS0+aV9zaXplICsgYmxvY2tzaXplLTEpCiAJCQkJCT4+IEVYVDRfQkxPQ0tfU0laRV9CSVRTKGlub2RlLT5pX3NiKTsKKwltYXhfYmxvY2sgPSAoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfYml0bWFwX21heGJ5dGVzICsgYmxvY2tzaXplLTEpCisJCQkJCT4+IEVYVDRfQkxPQ0tfU0laRV9CSVRTKGlub2RlLT5pX3NiKTsKIAogCWlmIChpbm9kZS0+aV9zaXplICYgKGJsb2Nrc2l6ZSAtIDEpKQogCQlpZiAoZXh0NF9ibG9ja190cnVuY2F0ZV9wYWdlKGhhbmRsZSwgbWFwcGluZywgaW5vZGUtPmlfc2l6ZSkpCiAJCQlnb3RvIG91dF9zdG9wOwogCi0JbiA9IGV4dDRfYmxvY2tfdG9fcGF0aChpbm9kZSwgbGFzdF9ibG9jaywgb2Zmc2V0cywgTlVMTCk7Ci0JaWYgKG4gPT0gMCkKLQkJZ290byBvdXRfc3RvcDsJLyogZXJyb3IgKi8KKwlpZiAobGFzdF9ibG9jayAhPSBtYXhfYmxvY2spIHsKKwkJbiA9IGV4dDRfYmxvY2tfdG9fcGF0aChpbm9kZSwgbGFzdF9ibG9jaywgb2Zmc2V0cywgTlVMTCk7CisJCWlmIChuID09IDApCisJCQlnb3RvIG91dF9zdG9wOwkvKiBlcnJvciAqLworCX0KIAogCS8qCiAJICogT0suICBUaGlzIHRydW5jYXRlIGlzIGdvaW5nIHRvIGhhcHBlbi4gIFdlIGFkZCB0aGUgaW5vZGUgdG8gdGhlCkBAIC00NDkzLDcgKzQ0OTgsMTMgQEAKIAkgKi8KIAllaS0+aV9kaXNrc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAKLQlpZiAobiA9PSAxKSB7CQkvKiBkaXJlY3QgYmxvY2tzICovCisJaWYgKGxhc3RfYmxvY2sgPT0gbWF4X2Jsb2NrKSB7CisJCS8qCisJCSAqIEl0IGlzIHVubmVjZXNzYXJ5IHRvIGZyZWUgYW55IGRhdGEgYmxvY2tzIGlmIGxhc3RfYmxvY2sgaXMKKwkJICogZXF1YWwgdG8gdGhlIGluZGlyZWN0IGJsb2NrIGxpbWl0LgorCQkgKi8KKwkJZ290byBvdXRfdW5sb2NrOworCX0gZWxzZSBpZiAobiA9PSAxKSB7CQkvKiBkaXJlY3QgYmxvY2tzICovCiAJCWV4dDRfZnJlZV9kYXRhKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGlfZGF0YStvZmZzZXRzWzBdLAogCQkJICAgICAgIGlfZGF0YSArIEVYVDRfTkRJUl9CTE9DS1MpOwogCQlnb3RvIGRvX2luZGlyZWN0czsKQEAgLTQ1NTMsNiArNDU2NCw3IEBACiAJCTsKIAl9CiAKK291dF91bmxvY2s6CiAJdXBfd3JpdGUoJmVpLT5pX2RhdGFfc2VtKTsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gZXh0NF9jdXJyZW50X3RpbWUoaW5vZGUpOwogCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKQEAgLTUzOTgsMTMgKzU0MTAsMTIgQEAKIAkvKiBpZiBucmJsb2NrcyBhcmUgY29udGlndW91cyAqLwogCWlmIChjaHVuaykgewogCQkvKgotCQkgKiBXaXRoIE4gY29udGlndW91cyBkYXRhIGJsb2NrcywgaXQgbmVlZCBhdCBtb3N0Ci0JCSAqIE4vRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYikgaW5kaXJlY3QgYmxvY2tzCi0JCSAqIDIgZGluZGlyZWN0IGJsb2NrcwotCQkgKiAxIHRpbmRpcmVjdCBibG9jaworCQkgKiBXaXRoIE4gY29udGlndW91cyBkYXRhIGJsb2Nrcywgd2UgbmVlZCBhdCBtb3N0CisJCSAqIE4vRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYikgKyAxIGluZGlyZWN0IGJsb2NrcywKKwkJICogMiBkaW5kaXJlY3QgYmxvY2tzLCBhbmQgMSB0aW5kaXJlY3QgYmxvY2sKIAkJICovCi0JCWluZGlyZWN0cyA9IG5yYmxvY2tzIC8gRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYik7Ci0JCXJldHVybiBpbmRpcmVjdHMgKyAzOworCQlyZXR1cm4gRElWX1JPVU5EX1VQKG5yYmxvY2tzLAorCQkJCSAgICBFWFQ0X0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKSkgKyA0OwogCX0KIAkvKgogCSAqIGlmIG5yYmxvY2tzIGFyZSBub3QgY29udGlndW91cywgd29yc2UgY2FzZSwgZWFjaCBibG9jayB0b3VjaApAQCAtNTQ3OCw3ICs1NDg5LDcgQEAKIH0KIAogLyoKLSAqIENhbHVsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgY3JlZGl0cyB0byByZXNlcnZlIHRvIGZpdAorICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgY3JlZGl0cyB0byByZXNlcnZlIHRvIGZpdAogICogdGhlIG1vZGlmaWNhdGlvbiBvZiBhIHNpbmdsZSBwYWdlcyBpbnRvIGEgc2luZ2xlIHRyYW5zYWN0aW9uLAogICogd2hpY2ggbWF5IGluY2x1ZGUgbXVsdGlwbGUgY2h1bmtzIG9mIGJsb2NrIGFsbG9jYXRpb25zLgogICoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggYTU4MzdhOC4uZDhhMTZlZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTkyLDcgKzkyLDcgQEAKICAqIGJldHdlZW4gQ1BVcy4gSXQgaXMgcG9zc2libGUgdG8gZ2V0IHNjaGVkdWxlZCBhdCB0aGlzIHBvaW50LgogICoKICAqIFRoZSBsb2NhbGl0eSBncm91cCBwcmVhbGxvYyBzcGFjZSBpcyB1c2VkIGxvb2tpbmcgYXQgd2hldGhlciB3ZSBoYXZlCi0gKiBlbm91Z2ggZnJlZSBzcGFjZSAocGFfZnJlZSkgd2l0aGluZyB0aGUgcHJlYWxsb2Mgc3BhY2UuCisgKiBlbm91Z2ggZnJlZSBzcGFjZSAocGFfZnJlZSkgd2l0aGluIHRoZSBwcmVhbGxvYyBzcGFjZS4KICAqCiAgKiBJZiB3ZSBjYW4ndCBhbGxvY2F0ZSBibG9ja3MgdmlhIGlub2RlIHByZWFsbG9jIG9yL2FuZCBsb2NhbGl0eSBncm91cAogICogcHJlYWxsb2MgdGhlbiB3ZSBsb29rIGF0IHRoZSBidWRkeSBjYWNoZS4gVGhlIGJ1ZGR5IGNhY2hlIGlzIHJlcHJlc2VudGVkCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IGQxYmFmYTUuLjkyODE2YjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC01MTcsNyArNTE3LDcgQEAKIAkgKiBzdGFydCB3aXRoIG9uZSBjcmVkaXQgYWNjb3VudGVkIGZvcgogCSAqIHN1cGVyYmxvY2sgbW9kaWZpY2F0aW9uLgogCSAqCi0JICogRm9yIHRoZSB0bXBfaW5vZGUgd2UgYWxyZWFkeSBoYXZlIGNvbW1pdGVkIHRoZQorCSAqIEZvciB0aGUgdG1wX2lub2RlIHdlIGFscmVhZHkgaGF2ZSBjb21taXR0ZWQgdGhlCiAJICogdHJhc2NhdGlvbiB0aGF0IGNyZWF0ZWQgdGhlIGlub2RlLiBMYXRlciBhcyBhbmQKIAkgKiB3aGVuIHdlIGFkZCBleHRlbnRzIHdlIGV4dGVudCB0aGUgam91cm5hbAogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDIyNTQ2YWQuLjg1NTNkZmIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTI0MiwyNyArMjQyLDQ0IEBACiAgKiBqb3VybmFsX2VuZCBjYWxscyByZXN1bHQgaW4gdGhlIHN1cGVyYmxvY2sgYmVpbmcgbWFya2VkIGRpcnR5LCBzbwogICogdGhhdCBzeW5jKCkgd2lsbCBjYWxsIHRoZSBmaWxlc3lzdGVtJ3Mgd3JpdGVfc3VwZXIgY2FsbGJhY2sgaWYKICAqIGFwcHJvcHJpYXRlLgorICoKKyAqIFRvIGF2b2lkIGpfYmFycmllciBob2xkIGluIHVzZXJzcGFjZSB3aGVuIGEgdXNlciBjYWxscyBmcmVlemUoKSwKKyAqIGV4dDQgcHJldmVudHMgYSBuZXcgaGFuZGxlIGZyb20gYmVpbmcgc3RhcnRlZCBieSBzX2Zyb3plbiwgd2hpY2gKKyAqIGlzIGluIGFuIHVwcGVyIGxheWVyLgogICovCiBoYW5kbGVfdCAqZXh0NF9qb3VybmFsX3N0YXJ0X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuYmxvY2tzKQogewogCWpvdXJuYWxfdCAqam91cm5hbDsKKwloYW5kbGVfdCAgKmhhbmRsZTsKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVST0ZTKTsKIAotCXZmc19jaGVja19mcm96ZW4oc2IsIFNCX0ZSRUVaRV9UUkFOUyk7Ci0JLyogU3BlY2lhbCBjYXNlIGhlcmU6IGlmIHRoZSBqb3VybmFsIGhhcyBhYm9ydGVkIGJlaGluZCBvdXIKLQkgKiBiYWNrcyAoZWcuIEVJTyBpbiB0aGUgY29tbWl0IHRocmVhZCksIHRoZW4gd2Ugc3RpbGwgbmVlZCB0bwotCSAqIHRha2UgdGhlIEZTIGl0c2VsZiByZWFkb25seSBjbGVhbmx5LiAqLwogCWpvdXJuYWwgPSBFWFQ0X1NCKHNiKS0+c19qb3VybmFsOwotCWlmIChqb3VybmFsKSB7Ci0JCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpIHsKLQkJCWV4dDRfYWJvcnQoc2IsICJEZXRlY3RlZCBhYm9ydGVkIGpvdXJuYWwiKTsKLQkJCXJldHVybiBFUlJfUFRSKC1FUk9GUyk7Ci0JCX0KLQkJcmV0dXJuIGpiZDJfam91cm5hbF9zdGFydChqb3VybmFsLCBuYmxvY2tzKTsKKwloYW5kbGUgPSBleHQ0X2pvdXJuYWxfY3VycmVudF9oYW5kbGUoKTsKKworCS8qCisJICogSWYgYSBoYW5kbGUgaGFzIGJlZW4gc3RhcnRlZCwgaXQgc2hvdWxkIGJlIGFsbG93ZWQgdG8KKwkgKiBmaW5pc2gsIG90aGVyd2lzZSBkZWFkbG9jayBjb3VsZCBoYXBwZW4gYmV0d2VlbiBmcmVlemUKKwkgKiBhbmQgb3RoZXJzKGUuZy4gdHJ1bmNhdGUpIGR1ZSB0byB0aGUgcmVzdGFydCBvZiB0aGUKKwkgKiBqb3VybmFsIGhhbmRsZSBpZiB0aGUgZmlsZXN5c3RlbSBpcyBmb3J6ZW4gYW5kIGFjdGl2ZQorCSAqIGhhbmRsZXMgYXJlIG5vdCBzdG9wcGVkLgorCSAqLworCWlmICghaGFuZGxlKQorCQl2ZnNfY2hlY2tfZnJvemVuKHNiLCBTQl9GUkVFWkVfVFJBTlMpOworCisJaWYgKCFqb3VybmFsKQorCQlyZXR1cm4gZXh0NF9nZXRfbm9qb3VybmFsKCk7CisJLyoKKwkgKiBTcGVjaWFsIGNhc2UgaGVyZTogaWYgdGhlIGpvdXJuYWwgaGFzIGFib3J0ZWQgYmVoaW5kIG91cgorCSAqIGJhY2tzIChlZy4gRUlPIGluIHRoZSBjb21taXQgdGhyZWFkKSwgdGhlbiB3ZSBzdGlsbCBuZWVkIHRvCisJICogdGFrZSB0aGUgRlMgaXRzZWxmIHJlYWRvbmx5IGNsZWFubHkuCisJICovCisJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgeworCQlleHQ0X2Fib3J0KHNiLCAiRGV0ZWN0ZWQgYWJvcnRlZCBqb3VybmFsIik7CisJCXJldHVybiBFUlJfUFRSKC1FUk9GUyk7CiAJfQotCXJldHVybiBleHQ0X2dldF9ub2pvdXJuYWwoKTsKKwlyZXR1cm4gamJkMl9qb3VybmFsX3N0YXJ0KGpvdXJuYWwsIG5ibG9ja3MpOwogfQogCiAvKgpAQCAtNjE3LDcgKzYzNCw3IEBACiAJICogZmlsZXN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIG1hcmtlZCByZWFkL29ubHkgYW5kIHRoZQogCSAqIGpvdXJuYWwgaGFzIGJlZW4gYWJvcnRlZC4gIFdlIHJldHVybiAxIGFzIGEgaGludCB0byBjYWxsZXJzCiAJICogd2hvIG1pZ2h0IHdoYXQgdG8gdXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbQotCSAqIGV4dDRfZ3JwX2xvY2tlZF9lcnJvcigpIHRvIGRpc3Rpbmd1aXNoIGJld2VlbiB0aGUKKwkgKiBleHQ0X2dycF9sb2NrZWRfZXJyb3IoKSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZQogCSAqIEVSUk9SU19DT05UIGFuZCBFUlJPUlNfUk8gY2FzZSwgYW5kIHBlcmhhcHMgcmV0dXJuIG1vcmUKIAkgKiBhZ2dyZXNzaXZlbHkgZnJvbSB0aGUgZXh0NCBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgd2l0aCBhCiAJICogbW9yZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgpAQCAtMjk3NSw2ICsyOTkyLDEyIEBACiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX2luZm8tPmxpX2xpc3RfbXR4KTsKIAogCXNiaS0+c19saV9yZXF1ZXN0ID0gZWxyOworCS8qCisJICogc2V0IGVsciB0byBOVUxMIGhlcmUgc2luY2UgaXQgaGFzIGJlZW4gaW5zZXJ0ZWQgdG8KKwkgKiB0aGUgcmVxdWVzdF9saXN0IGFuZCB0aGUgcmVtb3ZhbCBhbmQgZnJlZSBvZiBpdCBpcworCSAqIGhhbmRsZWQgYnkgZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3QgZnJvbSBub3cgb24uCisJICovCisJZWxyID0gTlVMTDsKIAogCWlmICghKGV4dDRfbGlfaW5mby0+bGlfc3RhdGUgJiBFWFQ0X0xBWllJTklUX1JVTk5JTkcpKSB7CiAJCXJldCA9IGV4dDRfcnVuX2xhenlpbml0X3RocmVhZCgpOwpAQCAtMzM4NSw2ICszNDA4LDEwIEBACiAJZ2V0X3JhbmRvbV9ieXRlcygmc2JpLT5zX25leHRfZ2VuZXJhdGlvbiwgc2l6ZW9mKHUzMikpOwogCXNwaW5fbG9ja19pbml0KCZzYmktPnNfbmV4dF9nZW5fbG9jayk7CiAKKwlpbml0X3RpbWVyKCZzYmktPnNfZXJyX3JlcG9ydCk7CisJc2JpLT5zX2Vycl9yZXBvcnQuZnVuY3Rpb24gPSBwcmludF9kYWlseV9lcnJvcl9pbmZvOworCXNiaS0+c19lcnJfcmVwb3J0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgc2I7CisKIAllcnIgPSBwZXJjcHVfY291bnRlcl9pbml0KCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLAogCQkJZXh0NF9jb3VudF9mcmVlX2Jsb2NrcyhzYikpOwogCWlmICghZXJyKSB7CkBAIC0zNjQ2LDkgKzM2NzMsNiBAQAogCQkgIk9wdHM6ICVzJXMlcyIsIGRlc2NyLCBzYmktPnNfZXMtPnNfbW91bnRfb3B0cywKIAkJICpzYmktPnNfZXMtPnNfbW91bnRfb3B0cyA/ICI7ICIgOiAiIiwgb3JpZ19kYXRhKTsKIAotCWluaXRfdGltZXIoJnNiaS0+c19lcnJfcmVwb3J0KTsKLQlzYmktPnNfZXJyX3JlcG9ydC5mdW5jdGlvbiA9IHByaW50X2RhaWx5X2Vycm9yX2luZm87Ci0Jc2JpLT5zX2Vycl9yZXBvcnQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzYjsKIAlpZiAoZXMtPnNfZXJyb3JfY291bnQpCiAJCW1vZF90aW1lcigmc2JpLT5zX2Vycl9yZXBvcnQsIGppZmZpZXMgKyAzMDAqSFopOyAvKiA1IG1pbnV0ZXMgKi8KIApAQCAtMzY3Miw2ICszNjk2LDcgQEAKIAkJc2JpLT5zX2pvdXJuYWwgPSBOVUxMOwogCX0KIGZhaWxlZF9tb3VudDM6CisJZGVsX3RpbWVyKCZzYmktPnNfZXJyX3JlcG9ydCk7CiAJaWYgKHNiaS0+c19mbGV4X2dyb3VwcykgewogCQlpZiAoaXNfdm1hbGxvY19hZGRyKHNiaS0+c19mbGV4X2dyb3VwcykpCiAJCQl2ZnJlZShzYmktPnNfZmxleF9ncm91cHMpOwpAQCAtNDEzOCw2ICs0MTYzLDExIEBACiAvKgogICogTFZNIGNhbGxzIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGEgKHJlYWQtb25seSkgc25hcHNob3QgaXMgY3JlYXRlZC4gIFRoaXMKICAqIGdpdmVzIHVzIGEgY2hhbmNlIHRvIGZsdXNoIHRoZSBqb3VybmFsIGNvbXBsZXRlbHkgYW5kIG1hcmsgdGhlIGZzIGNsZWFuLgorICoKKyAqIE5vdGUgdGhhdCBvbmx5IHRoaXMgZnVuY3Rpb24gY2Fubm90IGJyaW5nIGEgZmlsZXN5c3RlbSB0byBiZSBpbiBhIGNsZWFuCisgKiBzdGF0ZSBpbmRlcGVuZGVudGx5LCBiZWNhdXNlIGV4dDQgcHJldmVudHMgYSBuZXcgaGFuZGxlIGZyb20gYmVpbmcgc3RhcnRlZAorICogYnkgQHNiLT5zX2Zyb3plbiwgd2hpY2ggc3RheXMgaW4gYW4gdXBwZXIgbGF5ZXIuICBJdCB0aHVzIG5lZWRzIGhlbHAgZnJvbQorICogdGhlIHVwcGVyIGxheWVyLgogICovCiBzdGF0aWMgaW50IGV4dDRfZnJlZXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC00NjE0LDE3ICs0NjQ0LDMwIEBACiAKIHN0YXRpYyBpbnQgZXh0NF9xdW90YV9vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHNiX2Rxb3B0KHNiKS0+ZmlsZXNbdHlwZV07CisJaGFuZGxlX3QgKmhhbmRsZTsKKwogCS8qIEZvcmNlIGFsbCBkZWxheWVkIGFsbG9jYXRpb24gYmxvY2tzIHRvIGJlIGFsbG9jYXRlZC4KIAkgKiBDYWxsZXIgYWxyZWFkeSBob2xkcyBzX3Vtb3VudCBzZW0gKi8KIAlpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSkKIAkJc3luY19maWxlc3lzdGVtKHNiKTsKIAorCS8qIFVwZGF0ZSBtb2RpZmljYXRpb24gdGltZXMgb2YgcXVvdGEgZmlsZXMgd2hlbiB1c2Vyc3BhY2UgY2FuCisJICogc3RhcnQgbG9va2luZyBhdCB0aGVtICovCisJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpCisJCWdvdG8gb3V0OworCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CisKK291dDoKIAlyZXR1cm4gZHF1b3RfcXVvdGFfb2ZmKHNiLCB0eXBlKTsKIH0KIAogLyogUmVhZCBkYXRhIGZyb20gcXVvdGFmaWxlIC0gYXZvaWQgcGFnZWNhY2hlIGFuZCBzdWNoIGJlY2F1c2Ugd2UgY2Fubm90IGFmZm9yZAogICogYWNxdWlyaW5nIHRoZSBsb2Nrcy4uLiBBcyBxdW90YSBmaWxlcyBhcmUgbmV2ZXIgdHJ1bmNhdGVkIGFuZCBxdW90YSBjb2RlCi0gKiBpdHNlbGYgc2VyaWFsaXplcyB0aGUgb3BlcmF0aW9ucyAoYW5kIG5vb25lIGVsc2Ugc2hvdWxkIHRvdWNoIHRoZSBmaWxlcykKKyAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm8gb25lIGVsc2Ugc2hvdWxkIHRvdWNoIHRoZSBmaWxlcykKICAqIHdlIGRvbid0IGhhdmUgdG8gYmUgYWZyYWlkIG9mIHJhY2VzICovCiBzdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGNoYXIgKmRhdGEsCiAJCQkgICAgICAgc2l6ZV90IGxlbiwgbG9mZl90IG9mZikKQEAgLTQ3MTQsOSArNDc1Nyw4IEBACiAJaWYgKGlub2RlLT5pX3NpemUgPCBvZmYgKyBsZW4pIHsKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmYgKyBsZW4pOwogCQlFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKKwkJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCX0KLQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gbGVuOwogfQpkaWZmIC0tZ2l0IGEvZnMvZmhhbmRsZS5jIGIvZnMvZmhhbmRsZS5jCmluZGV4IGJmOTNhZDIuLjZiMDg4NjQgMTAwNjQ0Ci0tLSBhL2ZzL2ZoYW5kbGUuYworKysgYi9mcy9maGFuZGxlLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmMKaW5kZXggMGJlMzQ0Ny4uNGM2OTkyZCAxMDA2NDQKLS0tIGEvZnMvZmlsZS5jCisrKyBiL2ZzL2ZpbGUuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzksMTQgKzQwLDE3IEBACiAgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZmR0YWJsZV9kZWZlciwgZmR0YWJsZV9kZWZlcl9saXN0KTsKIAotc3RhdGljIGlubGluZSB2b2lkICphbGxvY19mZG1lbSh1bnNpZ25lZCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkICphbGxvY19mZG1lbSh1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQl2b2lkICpkYXRhOwotCi0JZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4pOwotCWlmIChkYXRhICE9IE5VTEwpCi0JCXJldHVybiBkYXRhOwotCisJLyoKKwkgKiBWZXJ5IGxhcmdlIGFsbG9jYXRpb25zIGNhbiBzdHJlc3MgcGFnZSByZWNsYWltLCBzbyBmYWxsIGJhY2sgdG8KKwkgKiB2bWFsbG9jKCkgaWYgdGhlIGFsbG9jYXRpb24gc2l6ZSB3aWxsIGJlIGNvbnNpZGVyZWQgImxhcmdlIiBieSB0aGUgVk0uCisJICovCisJaWYgKHNpemUgPD0gKFBBR0VfU0laRSA8PCBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpIHsKKwkJdm9pZCAqZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4pOworCQlpZiAoZGF0YSAhPSBOVUxMKQorCQkJcmV0dXJuIGRhdGE7CisJfQogCXJldHVybiB2bWFsbG9jKHNpemUpOwogfQogCmRpZmYgLS1naXQgYS9mcy9maWxlc3lzdGVtcy5jIGIvZnMvZmlsZXN5c3RlbXMuYwppbmRleCA3NTFkNmIyLi4wODQ1Zjg0IDEwMDY0NAotLS0gYS9mcy9maWxlc3lzdGVtcy5jCisrKyBiL2ZzL2ZpbGVzeXN0ZW1zLmMKQEAgLTExMCwxNCArMTEwLDEzIEBACiAJCQkqdG1wID0gZnMtPm5leHQ7CiAJCQlmcy0+bmV4dCA9IE5VTEw7CiAJCQl3cml0ZV91bmxvY2soJmZpbGVfc3lzdGVtc19sb2NrKTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJdG1wID0gJigqdG1wKS0+bmV4dDsKIAl9CiAJd3JpdGVfdW5sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7CiAKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQogCXJldHVybiAtRUlOVkFMOwogfQogCmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2ZzaGVhZC5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19mc2hlYWQuYwppbmRleCA3ODk0OGI0Li5jOWE2YTk0IDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX2ZzaGVhZC5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfZnNoZWFkLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQlnb3RvIG91dF9mcmVlX3BmcDsKIAl9CiAJaWYgKCFWWEZTX0lTSUxUKFZYRlNfSU5PKGluZnAtPnZzaV9zdGlsaXN0KSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2eGZzOiBzdHJ1Y3R1YWwgbGlzdCBpbm9kZSBpcyBvZiB3cm9uZyB0eXBlICgleClcbiIsCisJCXByaW50ayhLRVJOX0VSUiAidnhmczogc3RydWN0dXJhbCBsaXN0IGlub2RlIGlzIG9mIHdyb25nIHR5cGUgKCV4KVxuIiwKIAkJCQlWWEZTX0lOTyhpbmZwLT52c2lfc3RpbGlzdCktPnZpaV9tb2RlICYgVlhGU19UWVBFX01BU0spOyAKIAkJZ290byBvdXRfaXB1dF9zdGlsaXN0OwogCX0KZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jCmluZGV4IDZjNTEzMWQuLjMzNjBmMWUgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMKKysrIGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAvKioKICAqIHZ4ZnNfaW5vZGVfYnlfbmFtZSAtIGZpbmQgaW5vZGUgbnVtYmVyIGZvciBkZW50cnkKICAqIEBkaXA6CWRpcmVjdG9yeSB0byBzZWFyY2ggaW4KLSAqIEBkcDoJCWRlbnRyeSB3ZSBzZWFjaCBmb3IKKyAqIEBkcDoJCWRlbnRyeSB3ZSBzZWFyY2ggZm9yCiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgIHZ4ZnNfaW5vZGVfYnlfbmFtZSBmaW5kcyBvdXQgdGhlIGlub2RlIG51bWJlciBvZgpkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19vbHQuaCBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfb2x0LmgKaW5kZXggZDgzMjQyOS4uYjdiM2FmNSAxMDA2NDQKLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmc19vbHQuaAorKysgYi9mcy9mcmVldnhmcy92eGZzX29sdC5oCkBAIC02MCw3ICs2MCw3IEBACiAgKgogICogVGhlIE9iamVjdCBMb2NhdGlvbiBUYWJsZSBoZWFkZXIgaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaAogICogT0xUIGV4dGVudC4gIEl0IGlzIHVzZWQgdG8gZmluZyBjZXJ0YWluIGZpbGVzeXN0ZW0td2lkZSBtZXRhZGF0YSwgZS5nLgotICogdGhlIGluaXRhbCBpbm9kZSBsaXN0LCB0aGUgZmlsZXNldCBoZWFkZXIgb3IgdGhlIGRldmljZSBjb25maWd1cmF0aW9uLgorICogdGhlIGluaXRpYWwgaW5vZGUgbGlzdCwgdGhlIGZpbGVzZXQgaGVhZGVyIG9yIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbi4KICAqLwogc3RydWN0IHZ4ZnNfb2x0IHsKIAl1X2ludDMyX3QJb2x0X21hZ2ljOwkvKiBtYWdpYyBudW1iZXIJCQkqLwpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCBiNWVkNTQxLi4zNDU5MWVlOCAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogICBUaGlzIGRvZXMgV0JfU1lOQ19OT05FIG9wcG9ydHVuaXN0aWMgd3JpdGViYWNrLiBUaGUgSU8gaXMgb25seQotICogICBzdGFydGVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCB3ZSBtYWtlIG5vIGd1YXJlbnRlZXMgb24KKyAqICAgc3RhcnRlZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgd2UgbWFrZSBubyBndWFyYW50ZWVzIG9uCiAgKiAgIGNvbXBsZXRpb24uIENhbGxlciBuZWVkIG5vdCBob2xkIHNiIHNfdW1vdW50IHNlbWFwaG9yZS4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IGM2YmE0OWIuLmIzMmViMjkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCWlmICghaW5vZGUpCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKKwkJaWYgKG5kICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSkKIAkJCXJldHVybiAtRUNISUxEOwogCiAJCWZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDZlYTAwNzMuLjgyYTY2NDYgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC01MjMsNyArNTIzLDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKgotCSAqIFBhZ2Ugd3JpdGViYWNrIGNhbiBleHRlbmQgYmV5b25kIHRoZSBsaWZ0aW1lIG9mIHRoZQorCSAqIFBhZ2Ugd3JpdGViYWNrIGNhbiBleHRlbmQgYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGUKIAkgKiBwYWdlLWNhY2hlIHBhZ2UsIHNvIG1ha2Ugc3VyZSB3ZSByZWFkIGEgcHJvcGVybHkgc3luY2VkCiAJICogcGFnZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvYW9wcy5jIGIvZnMvZ2ZzMi9hb3BzLmMKaW5kZXggYzcxOTk1Yi4uMGY1YzRmOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hb3BzLmMKKysrIGIvZnMvZ2ZzMi9hb3BzLmMKQEAgLTg4NCw4ICs4ODQsOCBAQAogCX0KIAogCWJyZWxzZShkaWJoKTsKLQlnZnMyX3RyYW5zX2VuZChzZHApOwogZmFpbGVkOgorCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAJaWYgKGFsKSB7CiAJCWdmczJfaW5wbGFjZV9yZWxlYXNlKGlwKTsKIAkJZ2ZzMl9xdW90YV91bmxvY2soaXApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9ibWFwLmMgYi9mcy9nZnMyL2JtYXAuYwppbmRleCBlZjNkYzRiLi43NGFkZDJkIDEwMDY0NAotLS0gYS9mcy9nZnMyL2JtYXAuYworKysgYi9mcy9nZnMyL2JtYXAuYwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKICAqIGVhcmxpZXIgdmVyc2lvbnMgb2YgR0ZTMiBoYXZlIGEgYnVnIGluIHRoZSBzdHVmZmVkIGZpbGUgcmVhZGluZwogICogY29kZSB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIGJ1ZmZlciBvdmVycnVuIGlmIHRoZSBzaXplIGlzIGxhcmdlcgogICogdGhhbiB0aGUgbWF4IHN0dWZmZWQgZmlsZSBzaXplLiBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXMgZnJvbQotICogb2NjdXJpbmcsIHN1Y2ggZmlsZXMgYXJlIHVuc3R1ZmZlZCwgYnV0IGluIG90aGVyIGNhc2VzIHdlIGNhbgorICogb2NjdXJyaW5nLCBzdWNoIGZpbGVzIGFyZSB1bnN0dWZmZWQsIGJ1dCBpbiBvdGhlciBjYXNlcyB3ZSBjYW4KICAqIGp1c3QgdXBkYXRlIHRoZSBpbm9kZSBzaXplIGRpcmVjdGx5LgogICoKICAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywgb3IgLXZlIG9uIGVycm9yCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Rpci5jIGIvZnMvZ2ZzMi9kaXIuYwppbmRleCA1YzM1NmQwLi5mNzg5YzU3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2Rpci5jCisrKyBiL2ZzL2dmczIvZGlyLmMKQEAgLTE1MDYsNyArMTUwNiw3IEBACiAJCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoZGlyLT5pX3NiLCAKIAkJCQliZTE2X3RvX2NwdShkZW50LT5kZV90eXBlKSwKIAkJCQliZTY0X3RvX2NwdShkZW50LT5kZV9pbnVtLm5vX2FkZHIpLAotCQkJCWJlNjRfdG9fY3B1KGRlbnQtPmRlX2ludW0ubm9fZm9ybWFsX2lubykpOworCQkJCWJlNjRfdG9fY3B1KGRlbnQtPmRlX2ludW0ubm9fZm9ybWFsX2lubyksIDApOwogCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gaW5vZGU7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCBiMjY4MmUwLi5lNDgzMTA4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtNjE3LDE4ICs2MTcsNTEgQEAKIAlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtcHR5X3dyaXRlX2VuZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwKLQkJCSAgIHVuc2lnbmVkIHRvKQorc3RhdGljIGludCBlbXB0eV93cml0ZV9lbmQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sCisJCQkgICB1bnNpZ25lZCB0bywgaW50IG1vZGUpCiB7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwl1bnNpZ25lZCBvZmZzZXQsIGJsa3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJcGdvZmZfdCBlbmRfaW5kZXggPSBpX3NpemVfcmVhZChpbm9kZSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCXplcm9fdXNlcihwYWdlLCBmcm9tLCB0by1mcm9tKTsKIAltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CiAKLQlpZiAoIWdmczJfaXNfd3JpdGViYWNrKGlwKSkKLQkJZ2ZzMl9wYWdlX2FkZF9kYXRhYnVmcyhpcCwgcGFnZSwgZnJvbSwgdG8pOworCWlmIChwYWdlLT5pbmRleCA8IGVuZF9pbmRleCB8fCAhKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSkgeworCQlpZiAoIWdmczJfaXNfd3JpdGViYWNrKGlwKSkKKwkJCWdmczJfcGFnZV9hZGRfZGF0YWJ1ZnMoaXAsIHBhZ2UsIGZyb20sIHRvKTsKIAotCWJsb2NrX2NvbW1pdF93cml0ZShwYWdlLCBmcm9tLCB0byk7CisJCWJsb2NrX2NvbW1pdF93cml0ZShwYWdlLCBmcm9tLCB0byk7CisJCXJldHVybiAwOworCX0KKworCW9mZnNldCA9IDA7CisJYmggPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisJd2hpbGUgKG9mZnNldCA8IHRvKSB7CisJCWlmIChvZmZzZXQgPj0gZnJvbSkgeworCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CisJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJCQljbGVhcl9idWZmZXJfbmV3KGJoKTsKKwkJCXdyaXRlX2RpcnR5X2J1ZmZlcihiaCwgV1JJVEUpOworCQl9CisJCW9mZnNldCArPSBibGtzaXplOworCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKKwl9CisKKwlvZmZzZXQgPSAwOworCWJoID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCXdoaWxlIChvZmZzZXQgPCB0bykgeworCQlpZiAob2Zmc2V0ID49IGZyb20pIHsKKwkJCXdhaXRfb25fYnVmZmVyKGJoKTsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlvZmZzZXQgKz0gYmxrc2l6ZTsKKwkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CisJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG5lZWRzX2VtcHR5X3dyaXRlKHNlY3Rvcl90IGJsb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtNjQzLDcgKzY3Niw4IEBACiAJcmV0dXJuICFidWZmZXJfbWFwcGVkKCZiaF9tYXApOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2VtcHR5X2Jsb2NrcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCitzdGF0aWMgaW50IHdyaXRlX2VtcHR5X2Jsb2NrcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sCisJCQkgICAgICBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAl1bnNpZ25lZCBzdGFydCwgZW5kLCBuZXh0LCBibGtzaXplOwpAQCAtNjY4LDcgKzcwMiw5IEBACiAJCQkJCQkJICBnZnMyX2Jsb2NrX21hcCk7CiAJCQkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQkJCXJldHVybiByZXQ7Ci0JCQkJZW1wdHlfd3JpdGVfZW5kKHBhZ2UsIHN0YXJ0LCBlbmQpOworCQkJCXJldCA9IGVtcHR5X3dyaXRlX2VuZChwYWdlLCBzdGFydCwgZW5kLCBtb2RlKTsKKwkJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQkJcmV0dXJuIHJldDsKIAkJCQllbmQgPSAwOwogCQkJfQogCQkJc3RhcnQgPSBuZXh0OwpAQCAtNjgyLDcgKzcxOCw5IEBACiAJCXJldCA9IF9fYmxvY2tfd3JpdGVfYmVnaW4ocGFnZSwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBnZnMyX2Jsb2NrX21hcCk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJcmV0dXJuIHJldDsKLQkJZW1wdHlfd3JpdGVfZW5kKHBhZ2UsIHN0YXJ0LCBlbmQpOworCQlyZXQgPSBlbXB0eV93cml0ZV9lbmQocGFnZSwgc3RhcnQsIGVuZCwgbW9kZSk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTczMSw3ICs3NjksNyBAQAogCiAJCWlmIChjdXJyID09IGVuZCkKIAkJCXRvID0gZW5kX29mZnNldDsKLQkJZXJyb3IgPSB3cml0ZV9lbXB0eV9ibG9ja3MocGFnZSwgZnJvbSwgdG8pOworCQllcnJvciA9IHdyaXRlX2VtcHR5X2Jsb2NrcyhwYWdlLCBmcm9tLCB0bywgbW9kZSk7CiAJCWlmICghZXJyb3IgJiYgb2Zmc2V0ICsgdG8gPiBpbm9kZS0+aV9zaXplICYmCiAJCSAgICAhKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSkgewogCQkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyB0byk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggZTI0MzEzMS4uN2E0ZmI2MyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtOTMsMTQgKzkzLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX2xvY2tfYnVja2V0KHVuc2lnbmVkIGludCBoYXNoKQogewotCXN0cnVjdCBobGlzdF9ibF9oZWFkICpibCA9ICZnbF9oYXNoX3RhYmxlW2hhc2hdOwotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilibCk7CisJaGxpc3RfYmxfbG9jaygmZ2xfaGFzaF90YWJsZVtoYXNoXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3VubG9ja19idWNrZXQodW5zaWduZWQgaW50IGhhc2gpCiB7Ci0Jc3RydWN0IGhsaXN0X2JsX2hlYWQgKmJsID0gJmdsX2hhc2hfdGFibGVbaGFzaF07Ci0JX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilibCk7CisJaGxpc3RfYmxfdW5sb2NrKCZnbF9oYXNoX3RhYmxlW2hhc2hdKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ZzMl9nbG9ja19kZWFsbG9jKHN0cnVjdCByY3VfaGVhZCAqcmN1KQpAQCAtMTEyMyw3ICsxMTIxLDcgQEAKICAqIEBudW1iZXI6IHRoZSBsb2NrIG51bWJlcgogICogQGdsb3BzOiB0aGUgZ2xvY2sgb3BlcmF0aW9ucyBmb3IgdGhlIHR5cGUgb2YgZ2xvY2sKICAqIEBzdGF0ZTogdGhlIHN0YXRlIHRvIGFjcXVpcmUgdGhlIGdsb2NrIGluCi0gKiBAZmxhZ3M6IG1vZGlmaWVyIGZsYWdzIGZvciB0aGUgYXF1aXNpdGlvbgorICogQGZsYWdzOiBtb2RpZmllciBmbGFncyBmb3IgdGhlIGFjcXVpc2l0aW9uCiAgKiBAZ2g6IHRoZSBzdHJ1Y3QgZ2ZzMl9ob2xkZXIKICAqCiAgKiBSZXR1cm5zOiBlcnJubwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDM3NTRlM2MuLjI1ZWViMmIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTM4NSw2ICszODUsMTAgQEAKIHN0YXRpYyB2b2lkIGlvcGVuX2dvX2NhbGxiYWNrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSAoc3RydWN0IGdmczJfaW5vZGUgKilnbC0+Z2xfb2JqZWN0OworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKKworCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuOwogCiAJaWYgKGdsLT5nbF9kZW1vdGVfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQgJiYKIAkgICAgZ2wtPmdsX3N0YXRlID09IExNX1NUX1NIQVJFRCAmJiBpcCkgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDk3ZDU0YTIuLjkxMzRkY2IgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuYworKysgYi9mcy9nZnMyL2lub2RlLmMKQEAgLTQwLDM3ICs0MCw2MSBAQAogCXU2NCBpcl9sZW5ndGg7CiB9OwogCitzdHJ1Y3QgZ2ZzMl9za2lwX2RhdGEgeworCXU2NCBub19hZGRyOworCWludCBza2lwcGVkOworCWludCBub25fYmxvY2s7Cit9OworCiBzdGF0aWMgaW50IGlnZXRfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQl1NjQgKm5vX2FkZHIgPSBvcGFxdWU7CisJc3RydWN0IGdmczJfc2tpcF9kYXRhICpkYXRhID0gb3BhcXVlOwogCi0JaWYgKGlwLT5pX25vX2FkZHIgPT0gKm5vX2FkZHIpCisJaWYgKGlwLT5pX25vX2FkZHIgPT0gZGF0YS0+bm9fYWRkcikgeworCQlpZiAoZGF0YS0+bm9uX2Jsb2NrICYmCisJCSAgICBpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9DTEVBUnxJX1dJTExfRlJFRSkpIHsKKwkJCWRhdGEtPnNraXBwZWQgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KIAkJcmV0dXJuIDE7Ci0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaWdldF9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7Ci0JdTY0ICpub19hZGRyID0gb3BhcXVlOworCXN0cnVjdCBnZnMyX3NraXBfZGF0YSAqZGF0YSA9IG9wYXF1ZTsKIAotCWlub2RlLT5pX2lubyA9ICh1bnNpZ25lZCBsb25nKSpub19hZGRyOwotCWlwLT5pX25vX2FkZHIgPSAqbm9fYWRkcjsKKwlpZiAoZGF0YS0+c2tpcHBlZCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJaW5vZGUtPmlfaW5vID0gKHVuc2lnbmVkIGxvbmcpKGRhdGEtPm5vX2FkZHIpOworCWlwLT5pX25vX2FkZHIgPSBkYXRhLT5ub19hZGRyOwogCXJldHVybiAwOwogfQogCiBzdHJ1Y3QgaW5vZGUgKmdmczJfaWxvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIGhhc2ggPSAodW5zaWduZWQgbG9uZylub19hZGRyOwotCXJldHVybiBpbG9va3VwNShzYiwgaGFzaCwgaWdldF90ZXN0LCAmbm9fYWRkcik7CisJc3RydWN0IGdmczJfc2tpcF9kYXRhIGRhdGE7CisKKwlkYXRhLm5vX2FkZHIgPSBub19hZGRyOworCWRhdGEuc2tpcHBlZCA9IDA7CisJZGF0YS5ub25fYmxvY2sgPSAwOworCXJldHVybiBpbG9va3VwNShzYiwgaGFzaCwgaWdldF90ZXN0LCAmZGF0YSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdmczJfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkcikKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdmczJfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkciwKKwkJCSAgICAgICBpbnQgbm9uX2Jsb2NrKQogeworCXN0cnVjdCBnZnMyX3NraXBfZGF0YSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgaGFzaCA9ICh1bnNpZ25lZCBsb25nKW5vX2FkZHI7Ci0JcmV0dXJuIGlnZXQ1X2xvY2tlZChzYiwgaGFzaCwgaWdldF90ZXN0LCBpZ2V0X3NldCwgJm5vX2FkZHIpOworCisJZGF0YS5ub19hZGRyID0gbm9fYWRkcjsKKwlkYXRhLnNraXBwZWQgPSAwOworCWRhdGEubm9uX2Jsb2NrID0gbm9uX2Jsb2NrOworCXJldHVybiBpZ2V0NV9sb2NrZWQoc2IsIGhhc2gsIGlnZXRfdGVzdCwgaWdldF9zZXQsICZkYXRhKTsKIH0KIAogLyoqCkBAIC0xMTEsMTkgKzEzNSwyMCBAQAogICogQHNiOiBUaGUgc3VwZXIgYmxvY2sKICAqIEBub19hZGRyOiBUaGUgaW5vZGUgbnVtYmVyCiAgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGlub2RlCisgKiBub25fYmxvY2s6IENhbiB3ZSBibG9jayBvbiBpbm9kZXMgdGhhdCBhcmUgYmVpbmcgZnJlZWQ/CiAgKgogICogUmV0dXJuczogQSBWRlMgaW5vZGUsIG9yIGFuIGVycm9yCiAgKi8KIAogc3RydWN0IGlub2RlICpnZnMyX2lub2RlX2xvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQl1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8pCisJCQkJdTY0IG5vX2FkZHIsIHU2NCBub19mb3JtYWxfaW5vLCBpbnQgbm9uX2Jsb2NrKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwOwogCXN0cnVjdCBnZnMyX2dsb2NrICppb19nbCA9IE5VTEw7CiAJaW50IGVycm9yOwogCi0JaW5vZGUgPSBnZnMyX2lnZXQoc2IsIG5vX2FkZHIpOworCWlub2RlID0gZ2ZzMl9pZ2V0KHNiLCBub19hZGRyLCBub25fYmxvY2spOwogCWlwID0gR0ZTMl9JKGlub2RlKTsKIAogCWlmICghaW5vZGUpCkBAIC0xODUsMTEgKzIxMCwxMiBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCWludCBlcnJvcjsKIAorCS8qIE11c3Qgbm90IHJlYWQgaW4gYmxvY2sgdW50aWwgYmxvY2sgdHlwZSBpcyB2ZXJpZmllZCAqLwogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9udW0oc2RwLCBub19hZGRyLCAmZ2ZzMl9pbm9kZV9nbG9wcywKLQkJCQkgIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKKwkJCQkgIExNX1NUX0VYQ0xVU0lWRSwgR0xfU0tJUCwgJmlfZ2gpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCkBAIC0xOTcsNyArMjIzLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKIAotCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX1VOS05PV04sIG5vX2FkZHIsIDApOworCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX1VOS05PV04sIG5vX2FkZHIsIDAsIDEpOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTg0Myw3ICs4NjksNyBAQAogCQlnb3RvIGZhaWxfZ3VubG9jazI7CiAKIAlpbm9kZSA9IGdmczJfaW5vZGVfbG9va3VwKGRpci0+aV9zYiwgSUYyRFQobW9kZSksIGludW0ubm9fYWRkciwKLQkJCQkgIGludW0ubm9fZm9ybWFsX2lubyk7CisJCQkJICBpbnVtLm5vX2Zvcm1hbF9pbm8sIDApOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZhaWxfZ3VubG9jazI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuaCBiL2ZzL2dmczIvaW5vZGUuaAppbmRleCAzZTAwYTY2Li4wOTljYTMwIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmgKKysrIGIvZnMvZ2ZzMi9pbm9kZS5oCkBAIC05Nyw3ICs5Nyw4IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmdmczJfaW5vZGVfbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIHR5cGUsIAotCQkJCSAgICAgICB1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8pOworCQkJCSAgICAgICB1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8sCisJCQkJICAgICAgIGludCBub25fYmxvY2spOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9sb29rdXBfYnlfaW51bShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IG5vX2FkZHIsCiAJCQkJCSB1NjQgKm5vX2Zvcm1hbF9pbm8sCiAJCQkJCSB1bnNpZ25lZCBpbnQgYmxrdHlwZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19mc3R5cGUuYyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCmluZGV4IDQyZWYyNDMuLmQzYzY5ZWIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX0RJUiwgbm9fYWRkciwgMCk7CisJaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChzYiwgRFRfRElSLCBub19hZGRyLCAwLCAwKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBpbiAlcyBpbm9kZTogJWxkXG4iLCBuYW1lLCBQVFJfRVJSKGlub2RlKSk7CiAJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggY2Y5MzBjZC4uNmZjYWU4NCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTk0NSw3ICs5NDUsNyBAQAogCQkvKiByZ2Jsa19zZWFyY2ggY2FuIHJldHVybiBhIGJsb2NrIDwgZ29hbCwgc28gd2UgbmVlZCB0bwogCQkgICBrZWVwIGl0IG1hcmNoaW5nIGZvcndhcmQuICovCiAJCW5vX2FkZHIgPSBibG9jayArIHJnZC0+cmRfZGF0YTA7Ci0JCWdvYWwrKzsKKwkJZ29hbCA9IG1heChibG9jayArIDEsIGdvYWwgKyAxKTsKIAkJaWYgKCpsYXN0X3VubGlua2VkICE9IE5PX0JMT0NLICYmIG5vX2FkZHIgPD0gKmxhc3RfdW5saW5rZWQpCiAJCQljb250aW51ZTsKIAkJaWYgKG5vX2FkZHIgPT0gc2tpcCkKQEAgLTk3MSw3ICs5NzEsNyBAQAogCQkJZm91bmQrKzsKIAogCQkvKiBMaW1pdCByZWNsYWltIHRvIHNlbnNpYmxlIG51bWJlciBvZiB0YXNrcyAqLwotCQlpZiAoZm91bmQgPiAyKk5SX0NQVVMpCisJCWlmIChmb3VuZCA+IE5SX0NQVVMpCiAJCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggZWM3M2VkNy4uYjlmMjhlNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAgKiBAc2RwOiB0aGUgZmlsZSBzeXN0ZW0KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGZsdXNoZXMgZGF0YSBhbmQgbWV0YSBkYXRhIGZvciBhbGwgbWFjaGluZXMgYnkKLSAqIGFxdWlyaW5nIHRoZSB0cmFuc2FjdGlvbiBsb2cgZXhjbHVzaXZlbHkuICBBbGwgam91cm5hbHMgYXJlCisgKiBhY3F1aXJpbmcgdGhlIHRyYW5zYWN0aW9uIGxvZyBleGNsdXNpdmVseS4gIEFsbCBqb3VybmFscyBhcmUKICAqIGVuc3VyZWQgdG8gYmUgaW4gYSBjbGVhbiBzdGF0ZSBhcyB3ZWxsLgogICoKICAqIFJldHVybnM6IGVycm5vCkBAIC0xMzE4LDE1ICsxMzE4LDE3IEBACiAKIHN0YXRpYyB2b2lkIGdmczJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoaW5vZGUtPmlfbmxpbmspCisJaWYgKGlub2RlLT5pX25saW5rIHx8IChzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKKwkvKiBNdXN0IG5vdCByZWFkIGlub2RlIGJsb2NrIHVudGlsIGJsb2NrIHR5cGUgaGFzIGJlZW4gdmVyaWZpZWQgKi8KKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCBHTF9TS0lQLCAmZ2gpOwogCWlmICh1bmxpa2VseShlcnJvcikpIHsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlwLT5pX2lvcGVuX2doKTsKIAkJZ290byBvdXQ7CkBAIC0xMzM2LDYgKzEzMzgsMTIgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3RydW5jYXRlOwogCisJaWYgKHRlc3RfYml0KEdJRl9JTlZBTElELCAmaXAtPmlfZmxhZ3MpKSB7CisJCWVycm9yID0gZ2ZzMl9pbm9kZV9yZWZyZXNoKGlwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfdHJ1bmNhdGU7CisJfQorCiAJaXAtPmlfaW9wZW5fZ2guZ2hfZmxhZ3MgfD0gR0xfTk9DQUNIRTsKIAlnZnMyX2dsb2NrX2RxX3dhaXQoJmlwLT5pX2lvcGVuX2doKTsKIAlnZnMyX2hvbGRlcl9yZWluaXQoTE1fU1RfRVhDTFVTSVZFLCBMTV9GTEFHX1RSWV8xQ0IgfCBHTF9OT0NBQ0hFLCAmaXAtPmlfaW9wZW5fZ2gpOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9LY29uZmlnIGIvZnMvaHBmcy9LY29uZmlnCmluZGV4IDBjMzlkYzMuLjU2YmQxNWMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvS2NvbmZpZworKysgYi9mcy9ocGZzL0tjb25maWcKQEAgLTEsNyArMSw2IEBACiBjb25maWcgSFBGU19GUwogCXRyaXN0YXRlICJPUy8yIEhQRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJMT0NLCi0JZGVwZW5kcyBvbiBCUk9LRU4gfHwgIVBSRUVNUFQKIAloZWxwCiAJICBPUy8yIGlzIElCTSdzIG9wZXJhdGluZyBzeXN0ZW0gZm9yIFBDJ3MsIHRoZSBzYW1lIGFzIFdhcnAsIGFuZCBIUEZTCiAJICBpcyB0aGUgZmlsZSBzeXN0ZW0gdXNlZCBmb3Igb3JnYW5pemluZyBmaWxlcyBvbiBPUy8yIGhhcmQgZGlzawpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9hbGxvYy5jIGIvZnMvaHBmcy9hbGxvYy5jCmluZGV4IDU1MDNlMmMuLjdhNWViMmMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvYWxsb2MuYworKysgYi9mcy9ocGZzL2FsbG9jLmMKQEAgLTgsOCArOCw2IEBACiAKICNpbmNsdWRlICJocGZzX2ZuLmgiCiAKLXN0YXRpYyBpbnQgaHBmc19hbGxvY19pZl9wb3NzaWJsZV9ub2xvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBzZWMpOwotCiAvKgogICogQ2hlY2sgaWYgYSBzZWN0b3IgaXMgYWxsb2NhdGVkIGluIGJpdG1hcAogICogVGhpcyBpcyByZWFsbHkgc2xvdy4gVHVybmVkIG9uIG9ubHkgaWYgY2hrPT0yCkBAIC0xOCw5ICsxNiw5IEBACiBzdGF0aWMgaW50IGNoa19pZl9hbGxvY2F0ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBzZWMsIGNoYXIgKm1zZykKIHsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7Ci0JdW5zaWduZWQgKmJtcDsKKwl1MzIgKmJtcDsKIAlpZiAoIShibXAgPSBocGZzX21hcF9iaXRtYXAocywgc2VjID4+IDE0LCAmcWJoLCAiY2hrIikpKSBnb3RvIGZhaWw7Ci0JaWYgKChibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gPj4gKHNlYyAmIDB4MWYpKSAmIDEpIHsKKwlpZiAoKGNwdV90b19sZTMyKGJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSkgPj4gKHNlYyAmIDB4MWYpKSAmIDEpIHsKIAkJaHBmc19lcnJvcihzLCAic2VjdG9yICclcycgLSAlMDh4IG5vdCBhbGxvY2F0ZWQgaW4gYml0bWFwIiwgbXNnLCBzZWMpOwogCQlnb3RvIGZhaWwxOwogCX0KQEAgLTI4LDcgKzI2LDcgQEAKIAlpZiAoc2VjID49IGhwZnNfc2IocyktPnNiX2RpcmJhbmRfc3RhcnQgJiYgc2VjIDwgaHBmc19zYihzKS0+c2JfZGlyYmFuZF9zdGFydCArIGhwZnNfc2IocyktPnNiX2RpcmJhbmRfc2l6ZSkgewogCQl1bnNpZ25lZCBzc2VjID0gKHNlYyAtIGhwZnNfc2IocyktPnNiX2RpcmJhbmRfc3RhcnQpIC8gNDsKIAkJaWYgKCEoYm1wID0gaHBmc19tYXBfZG5vZGVfYml0bWFwKHMsICZxYmgpKSkgZ290byBmYWlsOwotCQlpZiAoKGJtcFtzc2VjID4+IDVdID4+IChzc2VjICYgMHgxZikpICYgMSkgeworCQlpZiAoKGxlMzJfdG9fY3B1KGJtcFtzc2VjID4+IDVdKSA+PiAoc3NlYyAmIDB4MWYpKSAmIDEpIHsKIAkJCWhwZnNfZXJyb3IocywgInNlY3RvciAnJXMnIC0gJTA4eCBub3QgYWxsb2NhdGVkIGluIGRpcmVjdG9yeSBiaXRtYXAiLCBtc2csIHNlYyk7CiAJCQlnb3RvIGZhaWwxOwogCQl9CkBAIC03NSw3ICs3Myw2IEBACiAJCWhwZnNfZXJyb3IocywgIkJhZCBhbGxvY2F0aW9uIHNpemU6ICVkIiwgbik7CiAJCXJldHVybiAwOwogCX0KLQlsb2NrX3N1cGVyKHMpOwogCWlmIChicyAhPSB+MHgzZmZmKSB7CiAJCWlmICghKGJtcCA9IGhwZnNfbWFwX2JpdG1hcChzLCBuZWFyID4+IDE0LCAmcWJoLCAiYWliIikpKSBnb3RvIHVsczsKIAl9IGVsc2UgewpAQCAtODUsMTAgKzgyLDYgQEAKIAkJcmV0ID0gYnMgKyBucjsKIAkJZ290byBydDsKIAl9Ci0JLyppZiAoIXRzdGJpdHMoYm1wLCBuciArIG4sIG4gKyBmb3J3YXJkKSkgewotCQlyZXQgPSBicyArIG5yICsgbjsKLQkJZ290byBydDsKLQl9Ki8KIAlxID0gbnIgKyBuOyBiID0gMDsKIAl3aGlsZSAoKGEgPSB0c3RiaXRzKGJtcCwgcSwgbiArIGZvcndhcmQpKSAhPSAwKSB7CiAJCXEgKz0gYTsKQEAgLTEwNSwxNCArOTgsMTQgQEAKIAkJZ290byBydDsKIAl9CiAJbnIgPj49IDU7Ci0JLypmb3IgKGkgPSBuciArIDE7IGkgIT0gbnI7IGkrKywgaSAmPSAweDFmZikgeyovCisJLypmb3IgKGkgPSBuciArIDE7IGkgIT0gbnI7IGkrKywgaSAmPSAweDFmZikgKi8KIAlpID0gbnI7CiAJZG8gewotCQlpZiAoIWJtcFtpXSkgZ290byBjb250OwotCQlpZiAobiArIGZvcndhcmQgPj0gMHgzZiAmJiBibXBbaV0gIT0gLTEpIGdvdG8gY29udDsKKwkJaWYgKCFsZTMyX3RvX2NwdShibXBbaV0pKSBnb3RvIGNvbnQ7CisJCWlmIChuICsgZm9yd2FyZCA+PSAweDNmICYmIGxlMzJfdG9fY3B1KGJtcFtpXSkgIT0gMHhmZmZmZmZmZikgZ290byBjb250OwogCQlxID0gaTw8NTsKIAkJaWYgKGkgPiAwKSB7Ci0JCQl1bnNpZ25lZCBrID0gYm1wW2ktMV07CisJCQl1bnNpZ25lZCBrID0gbGUzMl90b19jcHUoYm1wW2ktMV0pOwogCQkJd2hpbGUgKGsgJiAweDgwMDAwMDAwKSB7CiAJCQkJcS0tOyBrIDw8PSAxOwogCQkJfQpAQCAtMTMyLDE4ICsxMjUsMTcgQEAKIAl9IHdoaWxlIChpICE9IG5yKTsKIAlydDoKIAlpZiAocmV0KSB7Ci0JCWlmIChocGZzX3NiKHMpLT5zYl9jaGsgJiYgKChyZXQgPj4gMTQpICE9IChicyA+PiAxNCkgfHwgKGJtcFsocmV0ICYgMHgzZmZmKSA+PiA1XSB8IH4oKCgxIDw8IG4pIC0gMSkgPDwgKHJldCAmIDB4MWYpKSkgIT0gMHhmZmZmZmZmZikpIHsKKwkJaWYgKGhwZnNfc2IocyktPnNiX2NoayAmJiAoKHJldCA+PiAxNCkgIT0gKGJzID4+IDE0KSB8fCAobGUzMl90b19jcHUoYm1wWyhyZXQgJiAweDNmZmYpID4+IDVdKSB8IH4oKCgxIDw8IG4pIC0gMSkgPDwgKHJldCAmIDB4MWYpKSkgIT0gMHhmZmZmZmZmZikpIHsKIAkJCWhwZnNfZXJyb3IocywgIkFsbG9jYXRpb24gZG9lc24ndCB3b3JrISBXYW50ZWQgJWQsIGFsbG9jYXRlZCBhdCAlMDh4IiwgbiwgcmV0KTsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIGI7CiAJCX0KLQkJYm1wWyhyZXQgJiAweDNmZmYpID4+IDVdICY9IH4oKCgxIDw8IG4pIC0gMSkgPDwgKHJldCAmIDB4MWYpKTsKKwkJYm1wWyhyZXQgJiAweDNmZmYpID4+IDVdICY9IGNwdV90b19sZTMyKH4oKCgxIDw8IG4pIC0gMSkgPDwgKHJldCAmIDB4MWYpKSk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAl9CiAJYjoKIAlocGZzX2JyZWxzZTQoJnFiaCk7CiAJdWxzOgotCXVubG9ja19zdXBlcihzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTUsNyArMTQ3LDcgQEAKICAqCQkJCXNlY3RvcnMKICAqLwogCi1zZWNubyBocGZzX2FsbG9jX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIG5lYXIsIHVuc2lnbmVkIG4sIGludCBmb3J3YXJkLCBpbnQgbG9jaykKK3NlY25vIGhwZnNfYWxsb2Nfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gbmVhciwgdW5zaWduZWQgbiwgaW50IGZvcndhcmQpCiB7CiAJc2Vjbm8gc2VjOwogCWludCBpOwpAQCAtMTY3LDcgKzE1OSw2IEBACiAJCWZvcndhcmQgPSAtZm9yd2FyZDsKIAkJZl9wID0gMTsKIAl9Ci0JaWYgKGxvY2spIGhwZnNfbG9ja19jcmVhdGlvbihzKTsKIAluX2JtcHMgPSAoc2JpLT5zYl9mc19zaXplICsgMHg0MDAwIC0gMSkgPj4gMTQ7CiAJaWYgKG5lYXIgJiYgbmVhciA8IHNiaS0+c2JfZnNfc2l6ZSkgewogCQlpZiAoKHNlYyA9IGFsbG9jX2luX2JtcChzLCBuZWFyLCBuLCBmX3AgPyBmb3J3YXJkIDogZm9yd2FyZC80KSkpIGdvdG8gcmV0OwpAQCAtMjE0LDE4ICsyMDUsMTcgQEAKIAlyZXQ6CiAJaWYgKHNlYyAmJiBmX3ApIHsKIAkJZm9yIChpID0gMDsgaSA8IGZvcndhcmQ7IGkrKykgewotCQkJaWYgKCFocGZzX2FsbG9jX2lmX3Bvc3NpYmxlX25vbG9jayhzLCBzZWMgKyBpICsgMSkpIHsKKwkJCWlmICghaHBmc19hbGxvY19pZl9wb3NzaWJsZShzLCBzZWMgKyBpICsgMSkpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJQcmVhbGxvYyBkb2Vzbid0IHdvcmshIFdhbnRlZCAlZCwgYWxsb2NhdGVkIGF0ICUwOHgsIGNhbid0IGFsbG9jYXRlICVkIiwgZm9yd2FyZCwgc2VjLCBpKTsKIAkJCQlzZWMgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQotCWlmIChsb2NrKSBocGZzX3VubG9ja19jcmVhdGlvbihzKTsKIAlyZXR1cm4gc2VjOwogfQogCi1zdGF0aWMgc2Vjbm8gYWxsb2NfaW5fZGlyYmFuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIG5lYXIsIGludCBsb2NrKQorc3RhdGljIHNlY25vIGFsbG9jX2luX2RpcmJhbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBuZWFyKQogewogCXVuc2lnbmVkIG5yID0gbmVhcjsKIAlzZWNubyBzZWM7CkBAIC0yMzYsNDkgKzIyNiwzNSBAQAogCQluciA9IHNiaS0+c2JfZGlyYmFuZF9zdGFydCArIHNiaS0+c2JfZGlyYmFuZF9zaXplIC0gNDsKIAluciAtPSBzYmktPnNiX2RpcmJhbmRfc3RhcnQ7CiAJbnIgPj49IDI7Ci0JaWYgKGxvY2spIGhwZnNfbG9ja19jcmVhdGlvbihzKTsKIAlzZWMgPSBhbGxvY19pbl9ibXAocywgKH4weDNmZmYpIHwgbnIsIDEsIDApOwotCWlmIChsb2NrKSBocGZzX3VubG9ja19jcmVhdGlvbihzKTsKIAlpZiAoIXNlYykgcmV0dXJuIDA7CiAJcmV0dXJuICgoc2VjICYgMHgzZmZmKSA8PCAyKSArIHNiaS0+c2JfZGlyYmFuZF9zdGFydDsKIH0KIAogLyogQWxsb2Mgc2VjdG9yIGlmIGl0J3MgZnJlZSAqLwogCi1zdGF0aWMgaW50IGhwZnNfYWxsb2NfaWZfcG9zc2libGVfbm9sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjKQoraW50IGhwZnNfYWxsb2NfaWZfcG9zc2libGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBzZWMpCiB7CiAJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwotCXVuc2lnbmVkICpibXA7Ci0JbG9ja19zdXBlcihzKTsKKwl1MzIgKmJtcDsKIAlpZiAoIShibXAgPSBocGZzX21hcF9iaXRtYXAocywgc2VjID4+IDE0LCAmcWJoLCAiYWlwIikpKSBnb3RvIGVuZDsKLQlpZiAoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdICYgKDEgPDwgKHNlYyAmIDB4MWYpKSkgewotCQlibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gJj0gfigxIDw8IChzZWMgJiAweDFmKSk7CisJaWYgKGxlMzJfdG9fY3B1KGJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSkgJiAoMSA8PCAoc2VjICYgMHgxZikpKSB7CisJCWJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSAmPSBjcHVfdG9fbGUzMih+KDEgPDwgKHNlYyAmIDB4MWYpKSk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwotCQl1bmxvY2tfc3VwZXIocyk7CiAJCXJldHVybiAxOwogCX0KIAlocGZzX2JyZWxzZTQoJnFiaCk7CiAJZW5kOgotCXVubG9ja19zdXBlcihzKTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IGhwZnNfYWxsb2NfaWZfcG9zc2libGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBzZWMpCi17Ci0JaW50IHI7Ci0JaHBmc19sb2NrX2NyZWF0aW9uKHMpOwotCXIgPSBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlX25vbG9jayhzLCBzZWMpOwotCWhwZnNfdW5sb2NrX2NyZWF0aW9uKHMpOwotCXJldHVybiByOwotfQotCiAvKiBGcmVlIHNlY3RvcnMgaW4gYml0bWFwcyAqLwogCiB2b2lkIGhwZnNfZnJlZV9zZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjLCB1bnNpZ25lZCBuKQogewogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQl1bnNpZ25lZCAqYm1wOworCXUzMiAqYm1wOwogCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CiAJLypwcmludGsoIjIgLSAiKTsqLwogCWlmICghbikgcmV0dXJuOwpAQCAtMjg2LDI2ICsyNjIsMjIgQEAKIAkJaHBmc19lcnJvcihzLCAiVHJ5aW5nIHRvIGZyZWUgcmVzZXJ2ZWQgc2VjdG9yICUwOHgiLCBzZWMpOwogCQlyZXR1cm47CiAJfQotCWxvY2tfc3VwZXIocyk7CiAJc2JpLT5zYl9tYXhfZndkX2FsbG9jICs9IG4gPiAweGZmZmYgPyAweGZmZmYgOiBuOwogCWlmIChzYmktPnNiX21heF9md2RfYWxsb2MgPiAweGZmZmZmZikgc2JpLT5zYl9tYXhfZndkX2FsbG9jID0gMHhmZmZmZmY7CiAJbmV3X21hcDoKIAlpZiAoIShibXAgPSBocGZzX21hcF9iaXRtYXAocywgc2VjID4+IDE0LCAmcWJoLCAiZnJlZSIpKSkgewotCQl1bmxvY2tfc3VwZXIocyk7CiAJCXJldHVybjsKIAl9CQogCW5ld190c3Q6Ci0JaWYgKChibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gPj4gKHNlYyAmIDB4MWYpICYgMSkpIHsKKwlpZiAoKGxlMzJfdG9fY3B1KGJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSkgPj4gKHNlYyAmIDB4MWYpICYgMSkpIHsKIAkJaHBmc19lcnJvcihzLCAic2VjdG9yICUwOHggbm90IGFsbG9jYXRlZCIsIHNlYyk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCQlyZXR1cm47CiAJfQotCWJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSB8PSAxIDw8IChzZWMgJiAweDFmKTsKKwlibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gfD0gY3B1X3RvX2xlMzIoMSA8PCAoc2VjICYgMHgxZikpOwogCWlmICghLS1uKSB7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwotCQl1bmxvY2tfc3VwZXIocyk7CiAJCXJldHVybjsKIAl9CQogCWlmICghKCsrc2VjICYgMHgzZmZmKSkgewpAQCAtMzI3LDEzICsyOTksMTMgQEAKIAlpbnQgbl9ibXBzID0gKGhwZnNfc2IocyktPnNiX2ZzX3NpemUgKyAweDQwMDAgLSAxKSA+PiAxNDsKIAlpbnQgYiA9IGhwZnNfc2IocyktPnNiX2NfYml0bWFwICYgMHgwZmZmZmZmZjsKIAlpbnQgaSwgajsKLQl1bnNpZ25lZCAqYm1wOworCXUzMiAqYm1wOwogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKIAlpZiAoKGJtcCA9IGhwZnNfbWFwX2Rub2RlX2JpdG1hcChzLCAmcWJoKSkpIHsKIAkJZm9yIChqID0gMDsgaiA8IDUxMjsgaisrKSB7CiAJCQl1bnNpZ25lZCBrOwotCQkJaWYgKCFibXBbal0pIGNvbnRpbnVlOwotCQkJZm9yIChrID0gYm1wW2pdOyBrOyBrID4+PSAxKSBpZiAoayAmIDEpIGlmICghLS1uKSB7CisJCQlpZiAoIWxlMzJfdG9fY3B1KGJtcFtqXSkpIGNvbnRpbnVlOworCQkJZm9yIChrID0gbGUzMl90b19jcHUoYm1wW2pdKTsgazsgayA+Pj0gMSkgaWYgKGsgJiAxKSBpZiAoIS0tbikgewogCQkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTM1MiwxMCArMzI0LDEwIEBACiAJY2hrX2JtcDoKIAlpZiAoYm1wKSB7CiAJCWZvciAoaiA9IDA7IGogPCA1MTI7IGorKykgewotCQkJdW5zaWduZWQgazsKLQkJCWlmICghYm1wW2pdKSBjb250aW51ZTsKKwkJCXUzMiBrOworCQkJaWYgKCFsZTMyX3RvX2NwdShibXBbal0pKSBjb250aW51ZTsKIAkJCWZvciAoayA9IDB4ZjsgazsgayA8PD0gNCkKLQkJCQlpZiAoKGJtcFtqXSAmIGspID09IGspIHsKKwkJCQlpZiAoKGxlMzJfdG9fY3B1KGJtcFtqXSkgJiBrKSA9PSBrKSB7CiAJCQkJCWlmICghLS1uKSB7CiAJCQkJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCQkJCQlyZXR1cm4gMDsKQEAgLTM3OSw0NCArMzUxLDQwIEBACiAJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGRubywgNCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwotCQl1bnNpZ25lZCAqYm1wOworCQl1MzIgKmJtcDsKIAkJdW5zaWduZWQgc3NlYyA9IChkbm8gLSBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3N0YXJ0KSAvIDQ7Ci0JCWxvY2tfc3VwZXIocyk7CiAJCWlmICghKGJtcCA9IGhwZnNfbWFwX2Rub2RlX2JpdG1hcChzLCAmcWJoKSkpIHsKLQkJCXVubG9ja19zdXBlcihzKTsKIAkJCXJldHVybjsKIAkJfQotCQlibXBbc3NlYyA+PiA1XSB8PSAxIDw8IChzc2VjICYgMHgxZik7CisJCWJtcFtzc2VjID4+IDVdIHw9IGNwdV90b19sZTMyKDEgPDwgKHNzZWMgJiAweDFmKSk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwotCQl1bmxvY2tfc3VwZXIocyk7CiAJfQogfQogCiBzdHJ1Y3QgZG5vZGUgKmhwZnNfYWxsb2NfZG5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBuZWFyLAotCQkJIGRub2RlX3NlY25vICpkbm8sIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICpxYmgsCi0JCQkgaW50IGxvY2spCisJCQkgZG5vZGVfc2Vjbm8gKmRubywgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKnFiaCkKIHsKIAlzdHJ1Y3QgZG5vZGUgKmQ7CiAJaWYgKGhwZnNfY291bnRfb25lX2JpdG1hcChzLCBocGZzX3NiKHMpLT5zYl9kbWFwKSA+IEZSRUVfRE5PREVTX0FERCkgewotCQlpZiAoISgqZG5vID0gYWxsb2NfaW5fZGlyYmFuZChzLCBuZWFyLCBsb2NrKSkpCi0JCQlpZiAoISgqZG5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgNCwgMCwgbG9jaykpKSByZXR1cm4gTlVMTDsKKwkJaWYgKCEoKmRubyA9IGFsbG9jX2luX2RpcmJhbmQocywgbmVhcikpKQorCQkJaWYgKCEoKmRubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDQsIDApKSkgcmV0dXJuIE5VTEw7CiAJfSBlbHNlIHsKLQkJaWYgKCEoKmRubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDQsIDAsIGxvY2spKSkKLQkJCWlmICghKCpkbm8gPSBhbGxvY19pbl9kaXJiYW5kKHMsIG5lYXIsIGxvY2spKSkgcmV0dXJuIE5VTEw7CisJCWlmICghKCpkbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCA0LCAwKSkpCisJCQlpZiAoISgqZG5vID0gYWxsb2NfaW5fZGlyYmFuZChzLCBuZWFyKSkpIHJldHVybiBOVUxMOwogCX0KIAlpZiAoIShkID0gaHBmc19nZXRfNHNlY3RvcnMocywgKmRubywgcWJoKSkpIHsKIAkJaHBmc19mcmVlX2Rub2RlKHMsICpkbm8pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbWVtc2V0KGQsIDAsIDIwNDgpOwotCWQtPm1hZ2ljID0gRE5PREVfTUFHSUM7Ci0JZC0+Zmlyc3RfZnJlZSA9IDUyOworCWQtPm1hZ2ljID0gY3B1X3RvX2xlMzIoRE5PREVfTUFHSUMpOworCWQtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMig1Mik7CiAJZC0+ZGlyZW50WzBdID0gMzI7CiAJZC0+ZGlyZW50WzJdID0gODsKIAlkLT5kaXJlbnRbMzBdID0gMTsKIAlkLT5kaXJlbnRbMzFdID0gMjU1OwotCWQtPnNlbGYgPSAqZG5vOworCWQtPnNlbGYgPSBjcHVfdG9fbGUzMigqZG5vKTsKIAlyZXR1cm4gZDsKIH0KIApAQCAtNDI0LDE2ICszOTIsMTYgQEAKIAkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpCiB7CiAJc3RydWN0IGZub2RlICpmOwotCWlmICghKCpmbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCAxLCBGTk9ERV9BTExPQ19GV0QsIDEpKSkgcmV0dXJuIE5VTEw7CisJaWYgKCEoKmZubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDEsIEZOT0RFX0FMTE9DX0ZXRCkpKSByZXR1cm4gTlVMTDsKIAlpZiAoIShmID0gaHBmc19nZXRfc2VjdG9yKHMsICpmbm8sIGJoKSkpIHsKIAkJaHBmc19mcmVlX3NlY3RvcnMocywgKmZubywgMSk7CiAJCXJldHVybiBOVUxMOwogCX0JCiAJbWVtc2V0KGYsIDAsIDUxMik7Ci0JZi0+bWFnaWMgPSBGTk9ERV9NQUdJQzsKLQlmLT5lYV9vZmZzID0gMHhjNDsKKwlmLT5tYWdpYyA9IGNwdV90b19sZTMyKEZOT0RFX01BR0lDKTsKKwlmLT5lYV9vZmZzID0gY3B1X3RvX2xlMTYoMHhjNCk7CiAJZi0+YnRyZWUubl9mcmVlX25vZGVzID0gODsKLQlmLT5idHJlZS5maXJzdF9mcmVlID0gODsKKwlmLT5idHJlZS5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCk7CiAJcmV0dXJuIGY7CiB9CiAKQEAgLTQ0MSwxNiArNDA5LDE2IEBACiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQogewogCXN0cnVjdCBhbm9kZSAqYTsKLQlpZiAoISgqYW5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgMSwgQU5PREVfQUxMT0NfRldELCAxKSkpIHJldHVybiBOVUxMOworCWlmICghKCphbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCAxLCBBTk9ERV9BTExPQ19GV0QpKSkgcmV0dXJuIE5VTEw7CiAJaWYgKCEoYSA9IGhwZnNfZ2V0X3NlY3RvcihzLCAqYW5vLCBiaCkpKSB7CiAJCWhwZnNfZnJlZV9zZWN0b3JzKHMsICphbm8sIDEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbWVtc2V0KGEsIDAsIDUxMik7Ci0JYS0+bWFnaWMgPSBBTk9ERV9NQUdJQzsKLQlhLT5zZWxmID0gKmFubzsKKwlhLT5tYWdpYyA9IGNwdV90b19sZTMyKEFOT0RFX01BR0lDKTsKKwlhLT5zZWxmID0gY3B1X3RvX2xlMzIoKmFubyk7CiAJYS0+YnRyZWUubl9mcmVlX25vZGVzID0gNDA7CiAJYS0+YnRyZWUubl91c2VkX25vZGVzID0gMDsKLQlhLT5idHJlZS5maXJzdF9mcmVlID0gODsKKwlhLT5idHJlZS5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCk7CiAJcmV0dXJuIGE7CiB9CmRpZmYgLS1naXQgYS9mcy9ocGZzL2Fub2RlLmMgYi9mcy9ocGZzL2Fub2RlLmMKaW5kZXggNmEyZjA0Yi4uMDhiNTAzZSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9hbm9kZS5jCisrKyBiL2ZzL2hwZnMvYW5vZGUuYwpAQCAtMjIsOCArMjIsOCBAQAogCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIGlmIChocGZzX3N0b3BfY3ljbGVzKHMsIGEsICZjMSwgJmMyLCAiaHBmc19icGx1c19sb29rdXAiKSkgcmV0dXJuIC0xOwogCWlmIChidHJlZS0+aW50ZXJuYWwpIHsKIAkJZm9yIChpID0gMDsgaSA8IGJ0cmVlLT5uX3VzZWRfbm9kZXM7IGkrKykKLQkJCWlmIChidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vID4gc2VjKSB7Ci0JCQkJYSA9IGJ0cmVlLT51LmludGVybmFsW2ldLmRvd247CisJCQlpZiAobGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubykgPiBzZWMpIHsKKwkJCQlhID0gbGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZG93bik7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCQlpZiAoIShhbm9kZSA9IGhwZnNfbWFwX2Fub2RlKHMsIGEsICZiaCkpKSByZXR1cm4gLTE7CiAJCQkJYnRyZWUgPSAmYW5vZGUtPmJ0cmVlOwpAQCAtMzQsMTggKzM0LDE4IEBACiAJCXJldHVybiAtMTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGJ0cmVlLT5uX3VzZWRfbm9kZXM7IGkrKykKLQkJaWYgKGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8gPD0gc2VjICYmCi0JCSAgICBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoID4gc2VjKSB7Ci0JCQlhID0gYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubyArIHNlYyAtIGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm87CisJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSA8PSBzZWMgJiYKKwkJICAgIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKSA+IHNlYykgeworCQkJYSA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8pICsgc2VjIC0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyk7CiAJCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSBpZiAoaHBmc19jaGtfc2VjdG9ycyhzLCBhLCAxLCAiZGF0YSIpKSB7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlpZiAoaW5vZGUpIHsKIAkJCQlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICpocGZzX2lub2RlID0gaHBmc19pKGlub2RlKTsKLQkJCQlocGZzX2lub2RlLT5pX2ZpbGVfc2VjID0gYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubzsKLQkJCQlocGZzX2lub2RlLT5pX2Rpc2tfc2VjID0gYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubzsKLQkJCQlocGZzX2lub2RlLT5pX25fc2VjcyA9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aDsKKwkJCQlocGZzX2lub2RlLT5pX2ZpbGVfc2VjID0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyk7CisJCQkJaHBmc19pbm9kZS0+aV9kaXNrX3NlYyA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8pOworCQkJCWhwZnNfaW5vZGUtPmlfbl9zZWNzID0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKTsKIAkJCX0KIAkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm4gYTsKQEAgLTgzLDggKzgzLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlpZiAoYnRyZWUtPmludGVybmFsKSB7Ci0JCWEgPSBidHJlZS0+dS5pbnRlcm5hbFtuXS5kb3duOwotCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5maWxlX3NlY25vID0gLTE7CisJCWEgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtuXS5kb3duKTsKKwkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC0xKTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlicmVsc2UoYmgpOwogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKQpAQCAtOTQsMTUgKzk0LDE1IEBACiAJCWdvdG8gZ29fZG93bjsKIAl9CiAJaWYgKG4gPj0gMCkgewotCQlpZiAoYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCAhPSBmc2Vjbm8pIHsKKwkJaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKSAhPSBmc2Vjbm8pIHsKIAkJCWhwZnNfZXJyb3IocywgImFsbG9jYXRlZCBzaXplICUwOHgsIHRyeWluZyB0byBhZGQgc2VjdG9yICUwOHgsICVjbm9kZSAlMDh4IiwKLQkJCQlidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoLCBmc2Vjbm8sCisJCQkJbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgpLCBmc2Vjbm8sCiAJCQkJZm5vZD8nZic6J2EnLCBub2RlKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJaWYgKGhwZnNfYWxsb2NfaWZfcG9zc2libGUocywgc2UgPSBidHJlZS0+dS5leHRlcm5hbFtuXS5kaXNrX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKSkgewotCQkJYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKys7CisJCWlmIChocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIHNlID0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZGlza19zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgpKSkgeworCQkJYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKSArIDEpOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybiBzZTsKQEAgLTExNSwyMCArMTE1LDIwIEBACiAJCX0KIAkJc2UgPSAhZm5vZCA/IG5vZGUgOiAobm9kZSArIDE2Mzg0KSAmIH4xNjM4MzsKIAl9CQotCWlmICghKHNlID0gaHBmc19hbGxvY19zZWN0b3Iocywgc2UsIDEsIGZzZWNubypBTExPQ19NPkFMTE9DX0ZXRF9NQVggPyBBTExPQ19GV0RfTUFYIDogZnNlY25vKkFMTE9DX008QUxMT0NfRldEX01JTiA/IEFMTE9DX0ZXRF9NSU4gOiBmc2Vjbm8qQUxMT0NfTSwgMSkpKSB7CisJaWYgKCEoc2UgPSBocGZzX2FsbG9jX3NlY3RvcihzLCBzZSwgMSwgZnNlY25vKkFMTE9DX00+QUxMT0NfRldEX01BWCA/IEFMTE9DX0ZXRF9NQVggOiBmc2Vjbm8qQUxMT0NfTTxBTExPQ19GV0RfTUlOID8gQUxMT0NfRldEX01JTiA6IGZzZWNubypBTExPQ19NKSkpIHsKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlmcyA9IG4gPCAwID8gMCA6IGJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGg7CisJZnMgPSBuIDwgMCA/IDAgOiBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCk7CiAJaWYgKCFidHJlZS0+bl9mcmVlX25vZGVzKSB7Ci0JCXVwID0gYSAhPSBub2RlID8gYW5vZGUtPnVwIDogLTE7CisJCXVwID0gYSAhPSBub2RlID8gbGUzMl90b19jcHUoYW5vZGUtPnVwKSA6IC0xOwogCQlpZiAoIShhbm9kZSA9IGhwZnNfYWxsb2NfYW5vZGUocywgYSwgJm5hLCAmYmgxKSkpIHsKIAkJCWJyZWxzZShiaCk7CiAJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBzZSwgMSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaWYgKGEgPT0gbm9kZSAmJiBmbm9kKSB7Ci0JCQlhbm9kZS0+dXAgPSBub2RlOworCQkJYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIobm9kZSk7CiAJCQlhbm9kZS0+YnRyZWUuZm5vZGVfcGFyZW50ID0gMTsKIAkJCWFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgPSBidHJlZS0+bl91c2VkX25vZGVzOwogCQkJYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBidHJlZS0+Zmlyc3RfZnJlZTsKQEAgLTEzNyw5ICsxMzcsOSBAQAogCQkJYnRyZWUtPmludGVybmFsID0gMTsKIAkJCWJ0cmVlLT5uX2ZyZWVfbm9kZXMgPSAxMTsKIAkJCWJ0cmVlLT5uX3VzZWRfbm9kZXMgPSAxOwotCQkJYnRyZWUtPmZpcnN0X2ZyZWUgPSAoY2hhciAqKSYoYnRyZWUtPnUuaW50ZXJuYWxbMV0pIC0gKGNoYXIgKilidHJlZTsKLQkJCWJ0cmVlLT51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSAtMTsKLQkJCWJ0cmVlLT51LmludGVybmFsWzBdLmRvd24gPSBuYTsKKwkJCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoKGNoYXIgKikmKGJ0cmVlLT51LmludGVybmFsWzFdKSAtIChjaGFyICopYnRyZWUpOworCQkJYnRyZWUtPnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC0xKTsKKwkJCWJ0cmVlLT51LmludGVybmFsWzBdLmRvd24gPSBjcHVfdG9fbGUzMihuYSk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCX0gZWxzZSBpZiAoIShyYW5vZGUgPSBocGZzX2FsbG9jX2Fub2RlKHMsIC8qYSovMCwgJnJhLCAmYmgyKSkpIHsKIAkJCWJyZWxzZShiaCk7CkBAIC0xNTMsMTUgKzE1MywxNSBAQAogCQlidHJlZSA9ICZhbm9kZS0+YnRyZWU7CiAJfQogCWJ0cmVlLT5uX2ZyZWVfbm9kZXMtLTsgbiA9IGJ0cmVlLT5uX3VzZWRfbm9kZXMrKzsKLQlidHJlZS0+Zmlyc3RfZnJlZSArPSAxMjsKLQlidHJlZS0+dS5leHRlcm5hbFtuXS5kaXNrX3NlY25vID0gc2U7Ci0JYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubyA9IGZzOwotCWJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCA9IDE7CisJYnRyZWUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShidHJlZS0+Zmlyc3RfZnJlZSkgKyAxMik7CisJYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZGlza19zZWNubyA9IGNwdV90b19sZTMyKHNlKTsKKwlidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoZnMpOworCWJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCA9IGNwdV90b19sZTMyKDEpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwogCWlmICgoYSA9PSBub2RlICYmIGZub2QpIHx8IG5hID09IC0xKSByZXR1cm4gc2U7CiAJYzIgPSAwOwotCXdoaWxlICh1cCAhPSAtMSkgeworCXdoaWxlICh1cCAhPSAoYW5vZGVfc2Vjbm8pLTEpIHsKIAkJc3RydWN0IGFub2RlICpuZXdfYW5vZGU7CiAJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCiAJCQlpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCB1cCwgJmMxLCAmYzIsICJocGZzX2FkZF9zZWN0b3JfdG9fYnRyZWUgIzIiKSkgcmV0dXJuIC0xOwpAQCAtMTc0LDQ3ICsxNzQsNDcgQEAKIAkJfQogCQlpZiAoYnRyZWUtPm5fZnJlZV9ub2RlcykgewogCQkJYnRyZWUtPm5fZnJlZV9ub2Rlcy0tOyBuID0gYnRyZWUtPm5fdXNlZF9ub2RlcysrOwotCQkJYnRyZWUtPmZpcnN0X2ZyZWUgKz0gODsKLQkJCWJ0cmVlLT51LmludGVybmFsW25dLmZpbGVfc2Vjbm8gPSAtMTsKLQkJCWJ0cmVlLT51LmludGVybmFsW25dLmRvd24gPSBuYTsKLQkJCWJ0cmVlLT51LmludGVybmFsW24tMV0uZmlsZV9zZWNubyA9IGZzOworCQkJYnRyZWUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShidHJlZS0+Zmlyc3RfZnJlZSkgKyA4KTsKKwkJCWJ0cmVlLT51LmludGVybmFsW25dLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CisJCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5kb3duID0gY3B1X3RvX2xlMzIobmEpOworCQkJYnRyZWUtPnUuaW50ZXJuYWxbbi0xXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoZnMpOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJYnJlbHNlKGJoKTsKIAkJCWJyZWxzZShiaDIpOwogCQkJaHBmc19mcmVlX3NlY3RvcnMocywgcmEsIDEpOwogCQkJaWYgKChhbm9kZSA9IGhwZnNfbWFwX2Fub2RlKHMsIG5hLCAmYmgpKSkgewotCQkJCWFub2RlLT51cCA9IHVwOworCQkJCWFub2RlLT51cCA9IGNwdV90b19sZTMyKHVwKTsKIAkJCQlhbm9kZS0+YnRyZWUuZm5vZGVfcGFyZW50ID0gdXAgPT0gbm9kZSAmJiBmbm9kOwogCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQlicmVsc2UoYmgpOwogCQkJfQogCQkJcmV0dXJuIHNlOwogCQl9Ci0JCXVwID0gdXAgIT0gbm9kZSA/IGFub2RlLT51cCA6IC0xOwotCQlidHJlZS0+dS5pbnRlcm5hbFtidHJlZS0+bl91c2VkX25vZGVzIC0gMV0uZmlsZV9zZWNubyA9IC8qZnMqLy0xOworCQl1cCA9IHVwICE9IG5vZGUgPyBsZTMyX3RvX2NwdShhbm9kZS0+dXApIDogLTE7CisJCWJ0cmVlLT51LmludGVybmFsW2J0cmVlLT5uX3VzZWRfbm9kZXMgLSAxXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLypmcyovLTEpOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWJyZWxzZShiaCk7CiAJCWEgPSBuYTsKIAkJaWYgKChuZXdfYW5vZGUgPSBocGZzX2FsbG9jX2Fub2RlKHMsIGEsICZuYSwgJmJoKSkpIHsKIAkJCWFub2RlID0gbmV3X2Fub2RlOwotCQkJLyphbm9kZS0+dXAgPSB1cCAhPSAtMSA/IHVwIDogcmE7Ki8KKwkJCS8qYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIodXAgIT0gLTEgPyB1cCA6IHJhKTsqLwogCQkJYW5vZGUtPmJ0cmVlLmludGVybmFsID0gMTsKIAkJCWFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgPSAxOwogCQkJYW5vZGUtPmJ0cmVlLm5fZnJlZV9ub2RlcyA9IDU5OwotCQkJYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSAxNjsKLQkJCWFub2RlLT5idHJlZS51LmludGVybmFsWzBdLmRvd24gPSBhOwotCQkJYW5vZGUtPmJ0cmVlLnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IC0xOworCQkJYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNigxNik7CisJCQlhbm9kZS0+YnRyZWUudS5pbnRlcm5hbFswXS5kb3duID0gY3B1X3RvX2xlMzIoYSk7CisJCQlhbm9kZS0+YnRyZWUudS5pbnRlcm5hbFswXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJYnJlbHNlKGJoKTsKIAkJCWlmICgoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBhLCAmYmgpKSkgewotCQkJCWFub2RlLT51cCA9IG5hOworCQkJCWFub2RlLT51cCA9IGNwdV90b19sZTMyKG5hKTsKIAkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCX0KIAkJfSBlbHNlIG5hID0gYTsKIAl9CiAJaWYgKChhbm9kZSA9IGhwZnNfbWFwX2Fub2RlKHMsIG5hLCAmYmgpKSkgewotCQlhbm9kZS0+dXAgPSBub2RlOworCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihub2RlKTsKIAkJaWYgKGZub2QpIGFub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSAxOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWJyZWxzZShiaCk7CkBAIC0yMzIsMTQgKzIzMiwxNCBAQAogCQl9CiAJCWJ0cmVlID0gJmZub2RlLT5idHJlZTsKIAl9Ci0JcmFub2RlLT51cCA9IG5vZGU7Ci0JbWVtY3B5KCZyYW5vZGUtPmJ0cmVlLCBidHJlZSwgYnRyZWUtPmZpcnN0X2ZyZWUpOworCXJhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihub2RlKTsKKwltZW1jcHkoJnJhbm9kZS0+YnRyZWUsIGJ0cmVlLCBsZTE2X3RvX2NwdShidHJlZS0+Zmlyc3RfZnJlZSkpOwogCWlmIChmbm9kKSByYW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IDE7CiAJcmFub2RlLT5idHJlZS5uX2ZyZWVfbm9kZXMgPSAocmFub2RlLT5idHJlZS5pbnRlcm5hbCA/IDYwIDogNDApIC0gcmFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXM7CiAJaWYgKHJhbm9kZS0+YnRyZWUuaW50ZXJuYWwpIGZvciAobiA9IDA7IG4gPCByYW5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlczsgbisrKSB7CiAJCXN0cnVjdCBhbm9kZSAqdW5vZGU7Ci0JCWlmICgodW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCByYW5vZGUtPnUuaW50ZXJuYWxbbl0uZG93biwgJmJoMSkpKSB7Ci0JCQl1bm9kZS0+dXAgPSByYTsKKwkJaWYgKCh1bm9kZSA9IGhwZnNfbWFwX2Fub2RlKHMsIGxlMzJfdG9fY3B1KHJhbm9kZS0+dS5pbnRlcm5hbFtuXS5kb3duKSwgJmJoMSkpKSB7CisJCQl1bm9kZS0+dXAgPSBjcHVfdG9fbGUzMihyYSk7CiAJCQl1bm9kZS0+YnRyZWUuZm5vZGVfcGFyZW50ID0gMDsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoMSk7CiAJCQlicmVsc2UoYmgxKTsKQEAgLTI0OCwxMSArMjQ4LDExIEBACiAJYnRyZWUtPmludGVybmFsID0gMTsKIAlidHJlZS0+bl9mcmVlX25vZGVzID0gZm5vZCA/IDEwIDogNTg7CiAJYnRyZWUtPm5fdXNlZF9ub2RlcyA9IDI7Ci0JYnRyZWUtPmZpcnN0X2ZyZWUgPSAoY2hhciAqKSZidHJlZS0+dS5pbnRlcm5hbFsyXSAtIChjaGFyICopYnRyZWU7Ci0JYnRyZWUtPnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGZzOwotCWJ0cmVlLT51LmludGVybmFsWzBdLmRvd24gPSByYTsKLQlidHJlZS0+dS5pbnRlcm5hbFsxXS5maWxlX3NlY25vID0gLTE7Ci0JYnRyZWUtPnUuaW50ZXJuYWxbMV0uZG93biA9IG5hOworCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoKGNoYXIgKikmYnRyZWUtPnUuaW50ZXJuYWxbMl0gLSAoY2hhciAqKWJ0cmVlKTsKKwlidHJlZS0+dS5pbnRlcm5hbFswXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoZnMpOworCWJ0cmVlLT51LmludGVybmFsWzBdLmRvd24gPSBjcHVfdG9fbGUzMihyYSk7CisJYnRyZWUtPnUuaW50ZXJuYWxbMV0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC0xKTsKKwlidHJlZS0+dS5pbnRlcm5hbFsxXS5kb3duID0gY3B1X3RvX2xlMzIobmEpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoMik7CkBAIC0yNzksNyArMjc5LDcgQEAKIAlnb19kb3duOgogCWQyID0gMDsKIAl3aGlsZSAoYnRyZWUxLT5pbnRlcm5hbCkgewotCQlhbm8gPSBidHJlZTEtPnUuaW50ZXJuYWxbcG9zXS5kb3duOworCQlhbm8gPSBsZTMyX3RvX2NwdShidHJlZTEtPnUuaW50ZXJuYWxbcG9zXS5kb3duKTsKIAkJaWYgKGxldmVsKSBicmVsc2UoYmgpOwogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKQogCQkJaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgYW5vLCAmZDEsICZkMiwgImhwZnNfcmVtb3ZlX2J0cmVlICMxIikpCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJcG9zID0gMDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGJ0cmVlMS0+bl91c2VkX25vZGVzOyBpKyspCi0JCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGJ0cmVlMS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vLCBidHJlZTEtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKTsKKwkJaHBmc19mcmVlX3NlY3RvcnMocywgbGUzMl90b19jcHUoYnRyZWUxLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8pLCBsZTMyX3RvX2NwdShidHJlZTEtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKSk7CiAJZ29fdXA6CiAJaWYgKCFsZXZlbCkgcmV0dXJuOwogCWJyZWxzZShiaCk7CkBAIC0yOTgsMTMgKzI5OCwxMyBAQAogCQlpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCBhbm8sICZjMSwgJmMyLCAiaHBmc19yZW1vdmVfYnRyZWUgIzIiKSkgcmV0dXJuOwogCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGFubywgMSk7CiAJb2FubyA9IGFubzsKLQlhbm8gPSBhbm9kZS0+dXA7CisJYW5vID0gbGUzMl90b19jcHUoYW5vZGUtPnVwKTsKIAlpZiAoLS1sZXZlbCkgewogCQlpZiAoIShhbm9kZSA9IGhwZnNfbWFwX2Fub2RlKHMsIGFubywgJmJoKSkpIHJldHVybjsKIAkJYnRyZWUxID0gJmFub2RlLT5idHJlZTsKIAl9IGVsc2UgYnRyZWUxID0gYnRyZWU7CiAJZm9yIChpID0gMDsgaSA8IGJ0cmVlMS0+bl91c2VkX25vZGVzOyBpKyspIHsKLQkJaWYgKGJ0cmVlMS0+dS5pbnRlcm5hbFtpXS5kb3duID09IG9hbm8pIHsKKwkJaWYgKGxlMzJfdG9fY3B1KGJ0cmVlMS0+dS5pbnRlcm5hbFtpXS5kb3duKSA9PSBvYW5vKSB7CiAJCQlpZiAoKHBvcyA9IGkgKyAxKSA8IGJ0cmVlMS0+bl91c2VkX25vZGVzKQogCQkJCWdvdG8gZ29fZG93bjsKIAkJCWVsc2UKQEAgLTQxMSw3ICs0MTEsNyBAQAogCQlpZiAoZm5vKSB7CiAJCQlidHJlZS0+bl9mcmVlX25vZGVzID0gODsKIAkJCWJ0cmVlLT5uX3VzZWRfbm9kZXMgPSAwOwotCQkJYnRyZWUtPmZpcnN0X2ZyZWUgPSA4OworCQkJYnRyZWUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNig4KTsKIAkJCWJ0cmVlLT5pbnRlcm5hbCA9IDA7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCX0gZWxzZSBocGZzX2ZyZWVfc2VjdG9ycyhzLCBmLCAxKTsKQEAgLTQyMSwyMiArNDIxLDIyIEBACiAJd2hpbGUgKGJ0cmVlLT5pbnRlcm5hbCkgewogCQlub2RlcyA9IGJ0cmVlLT5uX3VzZWRfbm9kZXMgKyBidHJlZS0+bl9mcmVlX25vZGVzOwogCQlmb3IgKGkgPSAwOyBpIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaSsrKQotCQkJaWYgKGJ0cmVlLT51LmludGVybmFsW2ldLmZpbGVfc2Vjbm8gPj0gc2VjcykgZ290byBmOworCQkJaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW2ldLmZpbGVfc2Vjbm8pID49IHNlY3MpIGdvdG8gZjsKIAkJYnJlbHNlKGJoKTsKIAkJaHBmc19lcnJvcihzLCAiaW50ZXJuYWwgYnRyZWUgJTA4eCBkb2Vzbid0IGVuZCB3aXRoIC0xIiwgbm9kZSk7CiAJCXJldHVybjsKIAkJZjoKIAkJZm9yIChqID0gaSArIDE7IGogPCBidHJlZS0+bl91c2VkX25vZGVzOyBqKyspCi0JCQlocGZzX2VhX3JlbW92ZShzLCBidHJlZS0+dS5pbnRlcm5hbFtqXS5kb3duLCAxLCAwKTsKKwkJCWhwZnNfZWFfcmVtb3ZlKHMsIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW2pdLmRvd24pLCAxLCAwKTsKIAkJYnRyZWUtPm5fdXNlZF9ub2RlcyA9IGkgKyAxOwogCQlidHJlZS0+bl9mcmVlX25vZGVzID0gbm9kZXMgLSBidHJlZS0+bl91c2VkX25vZGVzOwotCQlidHJlZS0+Zmlyc3RfZnJlZSA9IDggKyA4ICogYnRyZWUtPm5fdXNlZF9ub2RlczsKKwkJYnRyZWUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNig4ICsgOCAqIGJ0cmVlLT5uX3VzZWRfbm9kZXMpOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCWlmIChidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vID09IHNlY3MpIHsKKwkJaWYgKGJ0cmVlLT51LmludGVybmFsW2ldLmZpbGVfc2Vjbm8gPT0gY3B1X3RvX2xlMzIoc2VjcykpIHsKIAkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJbm9kZSA9IGJ0cmVlLT51LmludGVybmFsW2ldLmRvd247CisJCW5vZGUgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtpXS5kb3duKTsKIAkJYnJlbHNlKGJoKTsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKIAkJCWlmIChocGZzX3N0b3BfY3ljbGVzKHMsIG5vZGUsICZjMSwgJmMyLCAiaHBmc190cnVuY2F0ZV9idHJlZSIpKQpAQCAtNDQ2LDI1ICs0NDYsMjUgQEAKIAl9CQogCW5vZGVzID0gYnRyZWUtPm5fdXNlZF9ub2RlcyArIGJ0cmVlLT5uX2ZyZWVfbm9kZXM7CiAJZm9yIChpID0gMDsgaSA8IGJ0cmVlLT5uX3VzZWRfbm9kZXM7IGkrKykKLQkJaWYgKGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGggPj0gc2VjcykgZ290byBmZjsKKwkJaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKSA+PSBzZWNzKSBnb3RvIGZmOwogCWJyZWxzZShiaCk7CiAJcmV0dXJuOwogCWZmOgotCWlmIChzZWNzIDw9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pIHsKKwlpZiAoc2VjcyA8PSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSkgewogCQlocGZzX2Vycm9yKHMsICJ0aGVyZSBpcyBhbiBhbGxvY2F0aW9uIGVycm9yIGluIGZpbGUgJTA4eCwgc2VjdG9yICUwOHgiLCBmLCBzZWNzKTsKIAkJaWYgKGkpIGktLTsKIAl9Ci0JZWxzZSBpZiAoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA+IHNlY3MpIHsKLQkJaHBmc19mcmVlX3NlY3RvcnMocywgYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubyArIHNlY3MgLQotCQkJYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubywgYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoCi0JCQktIHNlY3MgKyBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKTsgLyogSSBob3BlIGdjYyBvcHRpbWl6ZXMgdGhpcyA6LSkgKi8KLQkJYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoID0gc2VjcyAtIGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm87CisJZWxzZSBpZiAobGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpID4gc2VjcykgeworCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vKSArIHNlY3MgLQorCQkJbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyksIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCkKKwkJCS0gc2VjcyArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pKTsgLyogSSBob3BlIGdjYyBvcHRpbWl6ZXMgdGhpcyA6LSkgKi8KKwkJYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoID0gY3B1X3RvX2xlMzIoc2VjcyAtIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pKTsKIAl9CiAJZm9yIChqID0gaSArIDE7IGogPCBidHJlZS0+bl91c2VkX25vZGVzOyBqKyspCi0JCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGJ0cmVlLT51LmV4dGVybmFsW2pdLmRpc2tfc2Vjbm8sIGJ0cmVlLT51LmV4dGVybmFsW2pdLmxlbmd0aCk7CisJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2pdLmRpc2tfc2Vjbm8pLCBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtqXS5sZW5ndGgpKTsKIAlidHJlZS0+bl91c2VkX25vZGVzID0gaSArIDE7CiAJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IG5vZGVzIC0gYnRyZWUtPm5fdXNlZF9ub2RlczsKLQlidHJlZS0+Zmlyc3RfZnJlZSA9IDggKyAxMiAqIGJ0cmVlLT5uX3VzZWRfbm9kZXM7CisJYnRyZWUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNig4ICsgMTIgKiBidHJlZS0+bl91c2VkX25vZGVzKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIH0KQEAgLTQ4MCwxMiArNDgwLDEyIEBACiAJc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWFfZW5kOwogCWlmICghKGZub2RlID0gaHBmc19tYXBfZm5vZGUocywgZm5vLCAmYmgpKSkgcmV0dXJuOwogCWlmICghZm5vZGUtPmRpcmZsYWcpIGhwZnNfcmVtb3ZlX2J0cmVlKHMsICZmbm9kZS0+YnRyZWUpOwotCWVsc2UgaHBmc19yZW1vdmVfZHRyZWUocywgZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CisJZWxzZSBocGZzX3JlbW92ZV9kdHJlZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKSk7CiAJZWFfZW5kID0gZm5vZGVfZW5kX2VhKGZub2RlKTsKIAlmb3IgKGVhID0gZm5vZGVfZWEoZm5vZGUpOyBlYSA8IGVhX2VuZDsgZWEgPSBuZXh0X2VhKGVhKSkKIAkJaWYgKGVhLT5pbmRpcmVjdCkKIAkJCWhwZnNfZWFfcmVtb3ZlKHMsIGVhX3NlYyhlYSksIGVhLT5hbm9kZSwgZWFfbGVuKGVhKSk7Ci0JaHBmc19lYV9leHRfcmVtb3ZlKHMsIGZub2RlLT5lYV9zZWNubywgZm5vZGUtPmVhX2Fub2RlLCBmbm9kZS0+ZWFfc2l6ZV9sKTsKKwlocGZzX2VhX2V4dF9yZW1vdmUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgZm5vZGUtPmVhX2Fub2RlLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSk7CiAJYnJlbHNlKGJoKTsKIAlocGZzX2ZyZWVfc2VjdG9ycyhzLCBmbm8sIDEpOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9idWZmZXIuYyBiL2ZzL2hwZnMvYnVmZmVyLmMKaW5kZXggNzkzY2I5ZC4uOWVjZGUyNyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9idWZmZXIuYworKysgYi9mcy9ocGZzL2J1ZmZlci5jCkBAIC05LDIyICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAiaHBmc19mbi5oIgogCi12b2lkIGhwZnNfbG9ja19jcmVhdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCi17Ci0jaWZkZWYgREVCVUdfTE9DS1MKLQlwcmludGsoImxvY2sgY3JlYXRpb25cbiIpOwotI2VuZGlmCi0JbXV0ZXhfbG9jaygmaHBmc19zYihzKS0+aHBmc19jcmVhdGlvbl9kZSk7Ci19Ci0KLXZvaWQgaHBmc191bmxvY2tfY3JlYXRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzKQotewotI2lmZGVmIERFQlVHX0xPQ0tTCi0JcHJpbnRrKCJ1bmxvY2sgY3JlYXRpb25cbiIpOwotI2VuZGlmCi0JbXV0ZXhfdW5sb2NrKCZocGZzX3NiKHMpLT5ocGZzX2NyZWF0aW9uX2RlKTsKLX0KLQogLyogTWFwIGEgc2VjdG9yIGludG8gYSBidWZmZXIgYW5kIHJldHVybiBwb2ludGVycyB0byBpdCBhbmQgdG8gdGhlIGJ1ZmZlci4gKi8KIAogdm9pZCAqaHBmc19tYXBfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgc2Vjbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCwKQEAgLTMyLDYgKzE2LDggQEAKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCisJaHBmc19sb2NrX2Fzc2VydChzKTsKKwogCWNvbmRfcmVzY2hlZCgpOwogCiAJKmJocCA9IGJoID0gc2JfYnJlYWQocywgc2Vjbm8pOwpAQCAtNTAsNiArMzYsOCBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJLypyZXR1cm4gaHBmc19tYXBfc2VjdG9yKHMsIHNlY25vLCBiaHAsIDApOyovCiAKKwlocGZzX2xvY2tfYXNzZXJ0KHMpOworCiAJY29uZF9yZXNjaGVkKCk7CiAKIAlpZiAoKCpiaHAgPSBiaCA9IHNiX2dldGJsayhzLCBzZWNubykpICE9IE5VTEwpIHsKQEAgLTcwLDYgKzU4LDggQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCWNoYXIgKmRhdGE7CiAKKwlocGZzX2xvY2tfYXNzZXJ0KHMpOworCiAJY29uZF9yZXNjaGVkKCk7CiAKIAlpZiAoc2Vjbm8gJiAzKSB7CkBAIC0xMjUsNiArMTE1LDggQEAKIHsKIAljb25kX3Jlc2NoZWQoKTsKIAorCWhwZnNfbG9ja19hc3NlcnQocyk7CisKIAlpZiAoc2Vjbm8gJiAzKSB7CiAJCXByaW50aygiSFBGUzogaHBmc19nZXRfNHNlY3RvcnM6IHVuYWxpZ25lZCByZWFkXG4iKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9ocGZzL2Rpci5jIGIvZnMvaHBmcy9kaXIuYwppbmRleCBiM2Q3YzBkLi5mNDZhZTAyIDEwMDY0NAotLS0gYS9mcy9ocGZzL2Rpci5jCisrKyBiL2ZzL2hwZnMvZGlyLmMKQEAgLTg4LDkgKzg4LDkgQEAKIAkJCWhwZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJub3QgYSBkaXJlY3RvcnksIGZub2RlICUwOGx4IiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpaW5vZGUtPmlfaW5vKTsKIAkJfQotCQlpZiAoaHBmc19pbm9kZS0+aV9kbm8gIT0gZm5vLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pIHsKKwkJaWYgKGhwZnNfaW5vZGUtPmlfZG5vICE9IGxlMzJfdG9fY3B1KGZuby0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKSkgewogCQkJZSA9IDE7Ci0JCQlocGZzX2Vycm9yKGlub2RlLT5pX3NiLCAiY29ycnVwdGVkIGlub2RlOiBpX2RubyA9PSAlMDh4LCBmbm9kZSAtPiBkbm9kZSA9PSAlMDh4IiwgaHBmc19pbm9kZS0+aV9kbm8sIGZuby0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKTsKKwkJCWhwZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJjb3JydXB0ZWQgaW5vZGU6IGlfZG5vID09ICUwOHgsIGZub2RlIC0+IGRub2RlID09ICUwOHgiLCBocGZzX2lub2RlLT5pX2RubywgbGUzMl90b19jcHUoZm5vLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pKTsKIAkJfQogCQlicmVsc2UoYmgpOwogCQlpZiAoZSkgewpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQlnb3RvIGFnYWluOwogCQl9CiAJCXRlbXBuYW1lID0gaHBmc190cmFuc2xhdGVfbmFtZShpbm9kZS0+aV9zYiwgZGUtPm5hbWUsIGRlLT5uYW1lbGVuLCBsYywgZGUtPm5vdF84eDMpOwotCQlpZiAoZmlsbGRpcihkaXJlbnQsIHRlbXBuYW1lLCBkZS0+bmFtZWxlbiwgb2xkX3BvcywgZGUtPmZub2RlLCBEVF9VTktOT1dOKSA8IDApIHsKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCB0ZW1wbmFtZSwgZGUtPm5hbWVsZW4sIG9sZF9wb3MsIGxlMzJfdG9fY3B1KGRlLT5mbm9kZSksIERUX1VOS05PV04pIDwgMCkgewogCQkJZmlscC0+Zl9wb3MgPSBvbGRfcG9zOwogCQkJaWYgKHRlbXBuYW1lICE9IGRlLT5uYW1lKSBrZnJlZSh0ZW1wbmFtZSk7CiAJCQlocGZzX2JyZWxzZTQoJnFiaCk7CkBAIC0yMjEsNyArMjIxLDcgQEAKIAkgKiBHZXQgaW5vZGUgbnVtYmVyLCB3aGF0IHdlJ3JlIGFmdGVyLgogCSAqLwogCi0JaW5vID0gZGUtPmZub2RlOworCWlubyA9IGxlMzJfdG9fY3B1KGRlLT5mbm9kZSk7CiAKIAkvKgogCSAqIEdvIGZpbmQgb3IgbWFrZSBhbiBpbm9kZS4KQEAgLTIzNiw3ICsyMzYsNyBAQAogCQlocGZzX2luaXRfaW5vZGUocmVzdWx0KTsKIAkJaWYgKGRlLT5kaXJlY3RvcnkpCiAJCQlocGZzX3JlYWRfaW5vZGUocmVzdWx0KTsKLQkJZWxzZSBpZiAoZGUtPmVhX3NpemUgJiYgaHBmc19zYihkaXItPmlfc2IpLT5zYl9lYXMpCisJCWVsc2UgaWYgKGxlMzJfdG9fY3B1KGRlLT5lYV9zaXplKSAmJiBocGZzX3NiKGRpci0+aV9zYiktPnNiX2VhcykKIAkJCWhwZnNfcmVhZF9pbm9kZShyZXN1bHQpOwogCQllbHNlIHsKIAkJCXJlc3VsdC0+aV9tb2RlIHw9IFNfSUZSRUc7CkBAIC0yNTAsOCArMjUwLDYgQEAKIAlocGZzX3Jlc3VsdCA9IGhwZnNfaShyZXN1bHQpOwogCWlmICghZGUtPmRpcmVjdG9yeSkgaHBmc19yZXN1bHQtPmlfcGFyZW50X2RpciA9IGRpci0+aV9pbm87CiAKLQlocGZzX2RlY2lkZV9jb252KHJlc3VsdCwgbmFtZSwgbGVuKTsKLQogCWlmIChkZS0+aGFzX2FjbCB8fCBkZS0+aGFzX3h0ZF9wZXJtKSBpZiAoIShkaXItPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCWhwZnNfZXJyb3IocmVzdWx0LT5pX3NiLCAiQUNMcyBvciBYUEVSTSBmb3VuZC4gVGhpcyBpcyBwcm9iYWJseSBIUEZTMzg2LiBUaGlzIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgaXQgbm93LiBTZW5kIG1lIHNvbWUgaW5mbyBvbiB0aGVzZSBzdHJ1Y3R1cmVzIik7CiAJCWdvdG8gYmFpbDE7CkBAIC0yNjMsMTkgKzI2MSwxOSBAQAogCSAqLwogCiAJaWYgKCFyZXN1bHQtPmlfY3RpbWUudHZfc2VjKSB7Ci0JCWlmICghKHJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZS0+Y3JlYXRpb25fZGF0ZSkpKQorCQlpZiAoIShyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGUtPmNyZWF0aW9uX2RhdGUpKSkpCiAJCQlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gMTsKIAkJcmVzdWx0LT5pX2N0aW1lLnR2X25zZWMgPSAwOwotCQlyZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGUtPndyaXRlX2RhdGUpOworCQlyZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGUtPndyaXRlX2RhdGUpKTsKIAkJcmVzdWx0LT5pX210aW1lLnR2X25zZWMgPSAwOwotCQlyZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGUtPnJlYWRfZGF0ZSk7CisJCXJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZS0+cmVhZF9kYXRlKSk7CiAJCXJlc3VsdC0+aV9hdGltZS50dl9uc2VjID0gMDsKLQkJaHBmc19yZXN1bHQtPmlfZWFfc2l6ZSA9IGRlLT5lYV9zaXplOworCQlocGZzX3Jlc3VsdC0+aV9lYV9zaXplID0gbGUzMl90b19jcHUoZGUtPmVhX3NpemUpOwogCQlpZiAoIWhwZnNfcmVzdWx0LT5pX2VhX21vZGUgJiYgZGUtPnJlYWRfb25seSkKIAkJCXJlc3VsdC0+aV9tb2RlICY9IH4wMjIyOwogCQlpZiAoIWRlLT5kaXJlY3RvcnkpIHsKIAkJCWlmIChyZXN1bHQtPmlfc2l6ZSA9PSAtMSkgewotCQkJCXJlc3VsdC0+aV9zaXplID0gZGUtPmZpbGVfc2l6ZTsKKwkJCQlyZXN1bHQtPmlfc2l6ZSA9IGxlMzJfdG9fY3B1KGRlLT5maWxlX3NpemUpOwogCQkJCXJlc3VsdC0+aV9kYXRhLmFfb3BzID0gJmhwZnNfYW9wczsKIAkJCQlocGZzX2kocmVzdWx0KS0+bW11X3ByaXZhdGUgPSByZXN1bHQtPmlfc2l6ZTsKIAkJCS8qCmRpZmYgLS1naXQgYS9mcy9ocGZzL2Rub2RlLmMgYi9mcy9ocGZzL2Rub2RlLmMKaW5kZXggOWIyZmZhZC4uMWUwZTJhYyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9kbm9kZS5jCisrKyBiL2ZzL2hwZnMvZG5vZGUuYwpAQCAtMTQsMTEgKzE0LDExIEBACiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZV9lbmQgPSBkbm9kZV9lbmRfZGUoZCk7CiAJaW50IGkgPSAxOwogCWZvciAoZGUgPSBkbm9kZV9maXJzdF9kZShkKTsgZGUgPCBkZV9lbmQ7IGRlID0gZGVfbmV4dF9kZShkZSkpIHsKLQkJaWYgKGRlID09IGZkZSkgcmV0dXJuICgobG9mZl90KSBkLT5zZWxmIDw8IDQpIHwgKGxvZmZfdClpOworCQlpZiAoZGUgPT0gZmRlKSByZXR1cm4gKChsb2ZmX3QpIGxlMzJfdG9fY3B1KGQtPnNlbGYpIDw8IDQpIHwgKGxvZmZfdClpOwogCQlpKys7CiAJfQogCXByaW50aygiSFBGUzogZ2V0X3Bvczogbm90X2ZvdW5kXG4iKTsKLQlyZXR1cm4gKChsb2ZmX3QpZC0+c2VsZiA8PCA0KSB8IChsb2ZmX3QpMTsKKwlyZXR1cm4gKChsb2ZmX3QpbGUzMl90b19jcHUoZC0+c2VsZikgPDwgNCkgfCAobG9mZl90KTE7CiB9CiAKIHZvaWQgaHBmc19hZGRfcG9zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCAqcG9zKQpAQCAtMTMwLDI5ICsxMzAsMzAgQEAKIHsKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlOwogCWlmICghKGRlID0gZG5vZGVfbGFzdF9kZShkKSkpIHsKLQkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogZW1wdHkgZG5vZGUgJTA4eCIsIGQtPnNlbGYpOworCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiBlbXB0eSBkbm9kZSAlMDh4IiwgbGUzMl90b19jcHUoZC0+c2VsZikpOwogCQlyZXR1cm47CiAJfQogCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIHsKIAkJaWYgKGRlLT5kb3duKSB7CiAJCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiBkbm9kZSAlMDh4IGhhcyBhbHJlYWR5IGxhc3QgcG9pbnRlciAlMDh4IiwKLQkJCQlkLT5zZWxmLCBkZV9kb3duX3BvaW50ZXIoZGUpKTsKKwkJCQlsZTMyX3RvX2NwdShkLT5zZWxmKSwgZGVfZG93bl9wb2ludGVyKGRlKSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKGRlLT5sZW5ndGggIT0gMzIpIHsKLQkJCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IGJhZCBsYXN0IGRpcmVudCBpbiBkbm9kZSAlMDh4IiwgZC0+c2VsZik7CisJCWlmIChsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAhPSAzMikgeworCQkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogYmFkIGxhc3QgZGlyZW50IGluIGRub2RlICUwOHgiLCBsZTMyX3RvX2NwdShkLT5zZWxmKSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAJaWYgKHB0cikgewotCQlpZiAoKGQtPmZpcnN0X2ZyZWUgKz0gNCkgPiAyMDQ4KSB7Ci0JCQlocGZzX2Vycm9yKHMsInNldF9sYXN0X3BvaW50ZXI6IHRvbyBsb25nIGRub2RlICUwOHgiLCBkLT5zZWxmKTsKLQkJCWQtPmZpcnN0X2ZyZWUgLT0gNDsKKwkJZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpICsgNCk7CisJCWlmIChsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSA+IDIwNDgpIHsKKwkJCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IHRvbyBsb25nIGRub2RlICUwOHgiLCBsZTMyX3RvX2NwdShkLT5zZWxmKSk7CisJCQlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgLSA0KTsKIAkJCXJldHVybjsKIAkJfQotCQlkZS0+bGVuZ3RoID0gMzY7CisJCWRlLT5sZW5ndGggPSBjcHVfdG9fbGUxNigzNik7CiAJCWRlLT5kb3duID0gMTsKLQkJKihkbm9kZV9zZWNubyAqKSgoY2hhciAqKWRlICsgMzIpID0gcHRyOworCQkqKGRub2RlX3NlY25vICopKChjaGFyICopZGUgKyAzMikgPSBjcHVfdG9fbGUzMihwdHIpOwogCX0KIH0KIApAQCAtMTY4LDcgKzE2OSw3IEBACiAJZm9yIChkZSA9IGRub2RlX2ZpcnN0X2RlKGQpOyBkZSA8IGRlX2VuZDsgZGUgPSBkZV9uZXh0X2RlKGRlKSkgewogCQlpbnQgYyA9IGhwZnNfY29tcGFyZV9uYW1lcyhzLCBuYW1lLCBuYW1lbGVuLCBkZS0+bmFtZSwgZGUtPm5hbWVsZW4sIGRlLT5sYXN0KTsKIAkJaWYgKCFjKSB7Ci0JCQlocGZzX2Vycm9yKHMsICJuYW1lICglYywlZCkgYWxyZWFkeSBleGlzdHMgaW4gZG5vZGUgJTA4eCIsICpuYW1lLCBuYW1lbGVuLCBkLT5zZWxmKTsKKwkJCWhwZnNfZXJyb3IocywgIm5hbWUgKCVjLCVkKSBhbHJlYWR5IGV4aXN0cyBpbiBkbm9kZSAlMDh4IiwgKm5hbWUsIG5hbWVsZW4sIGxlMzJfdG9fY3B1KGQtPnNlbGYpKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCWlmIChjIDwgMCkgYnJlYWs7CkBAIC0xNzYsMTUgKzE3NywxNCBAQAogCW1lbW1vdmUoKGNoYXIgKilkZSArIGRfc2l6ZSwgZGUsIChjaGFyICopZGVfZW5kIC0gKGNoYXIgKilkZSk7CiAJbWVtc2V0KGRlLCAwLCBkX3NpemUpOwogCWlmIChkb3duX3B0cikgewotCQkqKGludCAqKSgoY2hhciAqKWRlICsgZF9zaXplIC0gNCkgPSBkb3duX3B0cjsKKwkJKihkbm9kZV9zZWNubyAqKSgoY2hhciAqKWRlICsgZF9zaXplIC0gNCkgPSBjcHVfdG9fbGUzMihkb3duX3B0cik7CiAJCWRlLT5kb3duID0gMTsKIAl9Ci0JZGUtPmxlbmd0aCA9IGRfc2l6ZTsKLQlpZiAoZG93bl9wdHIpIGRlLT5kb3duID0gMTsKKwlkZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoZF9zaXplKTsKIAlkZS0+bm90Xzh4MyA9IGhwZnNfaXNfbmFtZV9sb25nKG5hbWUsIG5hbWVsZW4pOwogCWRlLT5uYW1lbGVuID0gbmFtZWxlbjsKIAltZW1jcHkoZGUtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwotCWQtPmZpcnN0X2ZyZWUgKz0gZF9zaXplOworCWQtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSArIGRfc2l6ZSk7CiAJcmV0dXJuIGRlOwogfQogCkBAIC0xOTQsMjUgKzE5NCwyNSBAQAogCQkJICAgc3RydWN0IGhwZnNfZGlyZW50ICpkZSkKIHsKIAlpZiAoZGUtPmxhc3QpIHsKLQkJaHBmc19lcnJvcihzLCAiYXR0ZW1wdCB0byBkZWxldGUgbGFzdCBkaXJlbnQgaW4gZG5vZGUgJTA4eCIsIGQtPnNlbGYpOworCQlocGZzX2Vycm9yKHMsICJhdHRlbXB0IHRvIGRlbGV0ZSBsYXN0IGRpcmVudCBpbiBkbm9kZSAlMDh4IiwgbGUzMl90b19jcHUoZC0+c2VsZikpOwogCQlyZXR1cm47CiAJfQotCWQtPmZpcnN0X2ZyZWUgLT0gZGUtPmxlbmd0aDsKLQltZW1tb3ZlKGRlLCBkZV9uZXh0X2RlKGRlKSwgZC0+Zmlyc3RfZnJlZSArIChjaGFyICopZCAtIChjaGFyICopZGUpOworCWQtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSAtIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpKTsKKwltZW1tb3ZlKGRlLCBkZV9uZXh0X2RlKGRlKSwgbGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgKyAoY2hhciAqKWQgLSAoY2hhciAqKWRlKTsKIH0KIAogc3RhdGljIHZvaWQgZml4X3VwX3B0cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZG5vZGUgKmQpCiB7CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZTsKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlX2VuZCA9IGRub2RlX2VuZF9kZShkKTsKLQlkbm9kZV9zZWNubyBkbm8gPSBkLT5zZWxmOworCWRub2RlX3NlY25vIGRubyA9IGxlMzJfdG9fY3B1KGQtPnNlbGYpOwogCWZvciAoZGUgPSBkbm9kZV9maXJzdF9kZShkKTsgZGUgPCBkZV9lbmQ7IGRlID0gZGVfbmV4dF9kZShkZSkpCiAJCWlmIChkZS0+ZG93bikgewogCQkJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwogCQkJc3RydWN0IGRub2RlICpkZDsKIAkJCWlmICgoZGQgPSBocGZzX21hcF9kbm9kZShzLCBkZV9kb3duX3BvaW50ZXIoZGUpLCAmcWJoKSkpIHsKLQkJCQlpZiAoZGQtPnVwICE9IGRubyB8fCBkZC0+cm9vdF9kbm9kZSkgewotCQkJCQlkZC0+dXAgPSBkbm87CisJCQkJaWYgKGxlMzJfdG9fY3B1KGRkLT51cCkgIT0gZG5vIHx8IGRkLT5yb290X2Rub2RlKSB7CisJCQkJCWRkLT51cCA9IGNwdV90b19sZTMyKGRubyk7CiAJCQkJCWRkLT5yb290X2Rub2RlID0gMDsKIAkJCQkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQkJCX0KQEAgLTI2Miw3ICsyNjIsNyBAQAogCQkJa2ZyZWUobm5hbWUpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQlpZiAoZC0+Zmlyc3RfZnJlZSArIGRlX3NpemUobmFtZWxlbiwgZG93bl9wdHIpIDw9IDIwNDgpIHsKKwlpZiAobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgKyBkZV9zaXplKG5hbWVsZW4sIGRvd25fcHRyKSA8PSAyMDQ4KSB7CiAJCWxvZmZfdCB0OwogCQljb3B5X2RlKGRlPWhwZnNfYWRkX2RlKGktPmlfc2IsIGQsIG5hbWUsIG5hbWVsZW4sIGRvd25fcHRyKSwgbmV3X2RlKTsKIAkJdCA9IGdldF9wb3MoZCwgZGUpOwpAQCAtMjg2LDExICsyODYsMTEgQEAKIAkJa2ZyZWUobm5hbWUpOwogCQlyZXR1cm4gMTsKIAl9CQotCW1lbWNweShuZCwgZCwgZC0+Zmlyc3RfZnJlZSk7CisJbWVtY3B5KG5kLCBkLCBsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSk7CiAJY29weV9kZShkZSA9IGhwZnNfYWRkX2RlKGktPmlfc2IsIG5kLCBuYW1lLCBuYW1lbGVuLCBkb3duX3B0ciksIG5ld19kZSk7CiAJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX2lucywgZ2V0X3BvcyhuZCwgZGUpLCAxKTsKIAloID0gKChjaGFyICopZG5vZGVfbGFzdF9kZShuZCkgLSAoY2hhciAqKW5kKSAvIDIgKyAxMDsKLQlpZiAoIShhZCA9IGhwZnNfYWxsb2NfZG5vZGUoaS0+aV9zYiwgZC0+dXAsICZhZG5vLCAmcWJoMSwgMCkpKSB7CisJaWYgKCEoYWQgPSBocGZzX2FsbG9jX2Rub2RlKGktPmlfc2IsIGxlMzJfdG9fY3B1KGQtPnVwKSwgJmFkbm8sICZxYmgxKSkpIHsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAidW5hYmxlIHRvIGFsbG9jIGRub2RlIC0gZG5vZGUgdHJlZSB3aWxsIGJlIGNvcnJ1cHRlZCIpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWtmcmVlKG5kKTsKQEAgLTMxMywyMCArMzEzLDIxIEBACiAJZG93bl9wdHIgPSBhZG5vOwogCXNldF9sYXN0X3BvaW50ZXIoaS0+aV9zYiwgYWQsIGRlLT5kb3duID8gZGVfZG93bl9wb2ludGVyKGRlKSA6IDApOwogCWRlID0gZGVfbmV4dF9kZShkZSk7Ci0JbWVtbW92ZSgoY2hhciAqKW5kICsgMjAsIGRlLCBuZC0+Zmlyc3RfZnJlZSArIChjaGFyICopbmQgLSAoY2hhciAqKWRlKTsKLQluZC0+Zmlyc3RfZnJlZSAtPSAoY2hhciAqKWRlIC0gKGNoYXIgKiluZCAtIDIwOwotCW1lbWNweShkLCBuZCwgbmQtPmZpcnN0X2ZyZWUpOworCW1lbW1vdmUoKGNoYXIgKiluZCArIDIwLCBkZSwgbGUzMl90b19jcHUobmQtPmZpcnN0X2ZyZWUpICsgKGNoYXIgKiluZCAtIChjaGFyICopZGUpOworCW5kLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUobmQtPmZpcnN0X2ZyZWUpIC0gKChjaGFyICopZGUgLSAoY2hhciAqKW5kIC0gMjApKTsKKwltZW1jcHkoZCwgbmQsIGxlMzJfdG9fY3B1KG5kLT5maXJzdF9mcmVlKSk7CiAJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX2RlbCwgKGxvZmZfdClkbm8gPDwgNCwgcG9zKTsKIAlmaXhfdXBfcHRycyhpLT5pX3NiLCBhZCk7CiAJaWYgKCFkLT5yb290X2Rub2RlKSB7Ci0JCWRubyA9IGFkLT51cCA9IGQtPnVwOworCQlhZC0+dXAgPSBkLT51cDsKKwkJZG5vID0gbGUzMl90b19jcHUoYWQtPnVwKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMSk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCWdvdG8gZ29fdXA7CiAJfQotCWlmICghKHJkID0gaHBmc19hbGxvY19kbm9kZShpLT5pX3NiLCBkLT51cCwgJnJkbm8sICZxYmgyLCAwKSkpIHsKKwlpZiAoIShyZCA9IGhwZnNfYWxsb2NfZG5vZGUoaS0+aV9zYiwgbGUzMl90b19jcHUoZC0+dXApLCAmcmRubywgJnFiaDIpKSkgewogCQlocGZzX2Vycm9yKGktPmlfc2IsICJ1bmFibGUgdG8gYWxsb2MgZG5vZGUgLSBkbm9kZSB0cmVlIHdpbGwgYmUgY29ycnVwdGVkIik7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgxKTsKQEAgLTMzOCw3ICszMzksNyBAQAogCWktPmlfYmxvY2tzICs9IDQ7CiAJcmQtPnJvb3RfZG5vZGUgPSAxOwogCXJkLT51cCA9IGQtPnVwOwotCWlmICghKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgZC0+dXAsICZiaCkpKSB7CisJaWYgKCEoZm5vZGUgPSBocGZzX21hcF9mbm9kZShpLT5pX3NiLCBsZTMyX3RvX2NwdShkLT51cCksICZiaCkpKSB7CiAJCWhwZnNfZnJlZV9kbm9kZShpLT5pX3NiLCByZG5vKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaDEpOwpAQCAtMzQ3LDEwICszNDgsMTEgQEAKIAkJa2ZyZWUobm5hbWUpOwogCQlyZXR1cm4gMTsKIAl9Ci0JZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IHJkbm87CisJZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGNwdV90b19sZTMyKHJkbm8pOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwotCWQtPnVwID0gYWQtPnVwID0gaHBmc19pKGkpLT5pX2RubyA9IHJkbm87CisJaHBmc19pKGkpLT5pX2RubyA9IHJkbm87CisJZC0+dXAgPSBhZC0+dXAgPSBjcHVfdG9fbGUzMihyZG5vKTsKIAlkLT5yb290X2Rub2RlID0gYWQtPnJvb3RfZG5vZGUgPSAwOwogCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAlocGZzX2JyZWxzZTQoJnFiaCk7CkBAIC0zNzMsNyArMzc1LDcgQEAKIAogaW50IGhwZnNfYWRkX2RpcmVudChzdHJ1Y3QgaW5vZGUgKmksCiAJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCB1bnNpZ25lZCBuYW1lbGVuLAotCQkgICAgc3RydWN0IGhwZnNfZGlyZW50ICpuZXdfZGUsIGludCBjZGVwdGgpCisJCSAgICBzdHJ1Y3QgaHBmc19kaXJlbnQgKm5ld19kZSkKIHsKIAlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICpocGZzX2lub2RlID0gaHBmc19pKGkpOwogCXN0cnVjdCBkbm9kZSAqZDsKQEAgLTQwMyw3ICs0MDUsNiBAQAogCQl9CiAJfQogCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQlpZiAoIWNkZXB0aCkgaHBmc19sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCWlmIChocGZzX2NoZWNrX2ZyZWVfZG5vZGVzKGktPmlfc2IsIEZSRUVfRE5PREVTX0FERCkpIHsKIAkJYyA9IDE7CiAJCWdvdG8gcmV0OwpAQCAtNDExLDcgKzQxMiw2IEBACiAJaS0+aV92ZXJzaW9uKys7CiAJYyA9IGhwZnNfYWRkX3RvX2Rub2RlKGksIGRubywgbmFtZSwgbmFtZWxlbiwgbmV3X2RlLCAwKTsKIAlyZXQ6Ci0JaWYgKCFjZGVwdGgpIGhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCXJldHVybiBjOwogfQogCkBAIC00MzcsOSArNDM3LDkgQEAKIAkJCQlyZXR1cm4gMDsKIAkJaWYgKCEoZG5vZGUgPSBocGZzX21hcF9kbm9kZShpLT5pX3NiLCBkbm8sICZxYmgpKSkgcmV0dXJuIDA7CiAJCWlmIChocGZzX3NiKGktPmlfc2IpLT5zYl9jaGspIHsKLQkJCWlmIChkbm9kZS0+dXAgIT0gY2hrX3VwKSB7CisJCQlpZiAobGUzMl90b19jcHUoZG5vZGUtPnVwKSAhPSBjaGtfdXApIHsKIAkJCQlocGZzX2Vycm9yKGktPmlfc2IsICJtb3ZlX3RvX3RvcDogdXAgcG9pbnRlciBmcm9tICUwOHggc2hvdWxkIGJlICUwOHgsIGlzICUwOHgiLAotCQkJCQlkbm8sIGNoa191cCwgZG5vZGUtPnVwKTsKKwkJCQkJZG5vLCBjaGtfdXAsIGxlMzJfdG9fY3B1KGRub2RlLT51cCkpOwogCQkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTQ1NSw3ICs0NTUsNyBAQAogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJfQogCXdoaWxlICghKGRlID0gZG5vZGVfcHJlX2xhc3RfZGUoZG5vZGUpKSkgewotCQlkbm9kZV9zZWNubyB1cCA9IGRub2RlLT51cDsKKwkJZG5vZGVfc2Vjbm8gdXAgPSBsZTMyX3RvX2NwdShkbm9kZS0+dXApOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWhwZnNfZnJlZV9kbm9kZShpLT5pX3NiLCBkbm8pOwogCQlpLT5pX3NpemUgLT0gMjA0ODsKQEAgLTQ3NCw4ICs0NzQsOCBAQAogCQkJaHBmc19icmVsc2U0KCZxYmgpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJZG5vZGUtPmZpcnN0X2ZyZWUgLT0gNDsKLQkJZGUtPmxlbmd0aCAtPSA0OworCQlkbm9kZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSAtIDQpOworCQlkZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgLSA0KTsKIAkJZGUtPmRvd24gPSAwOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWRubyA9IHVwOwpAQCAtNDgzLDEyICs0ODMsMTIgQEAKIAl0ID0gZ2V0X3Bvcyhkbm9kZSwgZGUpOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgdCwgNCk7CiAJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCB0ICsgMSwgNSk7Ci0JaWYgKCEobmRlID0ga21hbGxvYyhkZS0+bGVuZ3RoLCBHRlBfTk9GUykpKSB7CisJaWYgKCEobmRlID0ga21hbGxvYyhsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSwgR0ZQX05PRlMpKSkgewogCQlocGZzX2Vycm9yKGktPmlfc2IsICJvdXQgb2YgbWVtb3J5IGZvciBkaXJlbnQgLSBkaXJlY3Rvcnkgd2lsbCBiZSBjb3JydXB0ZWQiKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlyZXR1cm4gMDsKIAl9Ci0JbWVtY3B5KG5kZSwgZGUsIGRlLT5sZW5ndGgpOworCW1lbWNweShuZGUsIGRlLCBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSk7CiAJZGRubyA9IGRlLT5kb3duID8gZGVfZG93bl9wb2ludGVyKGRlKSA6IDA7CiAJaHBmc19kZWxldGVfZGUoaS0+aV9zYiwgZG5vZGUsIGRlKTsKIAlzZXRfbGFzdF9wb2ludGVyKGktPmlfc2IsIGRub2RlLCBkZG5vKTsKQEAgLTUxNywxMSArNTE3LDExIEBACiAJdHJ5X2l0X2FnYWluOgogCWlmIChocGZzX3N0b3BfY3ljbGVzKGktPmlfc2IsIGRubywgJmMxLCAmYzIsICJkZWxldGVfZW1wdHlfZG5vZGUiKSkgcmV0dXJuOwogCWlmICghKGRub2RlID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZG5vLCAmcWJoKSkpIHJldHVybjsKLQlpZiAoZG5vZGUtPmZpcnN0X2ZyZWUgPiA1NikgZ290byBlbmQ7Ci0JaWYgKGRub2RlLT5maXJzdF9mcmVlID09IDUyIHx8IGRub2RlLT5maXJzdF9mcmVlID09IDU2KSB7CisJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSA+IDU2KSBnb3RvIGVuZDsKKwlpZiAobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpID09IDUyIHx8IGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSA9PSA1NikgewogCQlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlX2VuZDsKIAkJaW50IHJvb3QgPSBkbm9kZS0+cm9vdF9kbm9kZTsKLQkJdXAgPSBkbm9kZS0+dXA7CisJCXVwID0gbGUzMl90b19jcHUoZG5vZGUtPnVwKTsKIAkJZGUgPSBkbm9kZV9maXJzdF9kZShkbm9kZSk7CiAJCWRvd24gPSBkZS0+ZG93biA/IGRlX2Rvd25fcG9pbnRlcihkZSkgOiAwOwogCQlpZiAoaHBmc19zYihpLT5pX3NiKS0+c2JfY2hrKSBpZiAocm9vdCAmJiAhZG93bikgewpAQCAtNTQ1LDEzICs1NDUsMTMgQEAKIAkJCQlyZXR1cm47CiAJCQkgICAgfQogCQkJaWYgKChkMSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRvd24sICZxYmgxKSkpIHsKLQkJCQlkMS0+dXAgPSB1cDsKKwkJCQlkMS0+dXAgPSBjcHVfdG9fbGUzMih1cCk7CiAJCQkJZDEtPnJvb3RfZG5vZGUgPSAxOwogCQkJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMSk7CiAJCQkJaHBmc19icmVsc2U0KCZxYmgxKTsKIAkJCX0KIAkJCWlmICgoZm5vZGUgPSBocGZzX21hcF9mbm9kZShpLT5pX3NiLCB1cCwgJmJoKSkpIHsKLQkJCQlmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gZG93bjsKKwkJCQlmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gY3B1X3RvX2xlMzIoZG93bik7CiAJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJCWJyZWxzZShiaCk7CiAJCQl9CkBAIC01NzAsMjIgKzU3MCwyMiBAQAogCQlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsICgobG9mZl90KWRubyA8PCA0KSB8IDEsICgobG9mZl90KXVwIDw8IDQpIHwgcCk7CiAJCWlmICghZG93bikgewogCQkJZGUtPmRvd24gPSAwOwotCQkJZGUtPmxlbmd0aCAtPSA0OwotCQkJZG5vZGUtPmZpcnN0X2ZyZWUgLT0gNDsKKwkJCWRlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAtIDQpOworCQkJZG5vZGUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgLSA0KTsKIAkJCW1lbW1vdmUoZGVfbmV4dF9kZShkZSksIChjaGFyICopZGVfbmV4dF9kZShkZSkgKyA0LAotCQkJCShjaGFyICopZG5vZGUgKyBkbm9kZS0+Zmlyc3RfZnJlZSAtIChjaGFyICopZGVfbmV4dF9kZShkZSkpOworCQkJCShjaGFyICopZG5vZGUgKyBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgLSAoY2hhciAqKWRlX25leHRfZGUoZGUpKTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBkbm9kZSAqZDE7CiAJCQlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmgxOwotCQkJKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGUgKyBkZS0+bGVuZ3RoIC0gNCkgPSBkb3duOworCQkJKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGUgKyBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAtIDQpID0gZG93bjsKIAkJCWlmICgoZDEgPSBocGZzX21hcF9kbm9kZShpLT5pX3NiLCBkb3duLCAmcWJoMSkpKSB7Ci0JCQkJZDEtPnVwID0gdXA7CisJCQkJZDEtPnVwID0gY3B1X3RvX2xlMzIodXApOwogCQkJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMSk7CiAJCQkJaHBmc19icmVsc2U0KCZxYmgxKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7Ci0JCWhwZnNfZXJyb3IoaS0+aV9zYiwgImRlbGV0ZV9lbXB0eV9kbm9kZTogZG5vZGUgJTA4eCwgZmlyc3RfZnJlZSA9PSAlMDN4IiwgZG5vLCBkbm9kZS0+Zmlyc3RfZnJlZSk7CisJCWhwZnNfZXJyb3IoaS0+aV9zYiwgImRlbGV0ZV9lbXB0eV9kbm9kZTogZG5vZGUgJTA4eCwgZmlyc3RfZnJlZSA9PSAlMDN4IiwgZG5vLCBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkpOwogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTU5NiwxOCArNTk2LDE4IEBACiAJCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDE7CiAJCWlmICghZGVfbmV4dC0+ZG93bikgZ290byBlbmRtOwogCQluZG93biA9IGRlX2Rvd25fcG9pbnRlcihkZV9uZXh0KTsKLQkJaWYgKCEoZGVfY3AgPSBrbWFsbG9jKGRlLT5sZW5ndGgsIEdGUF9OT0ZTKSkpIHsKKwkJaWYgKCEoZGVfY3AgPSBrbWFsbG9jKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpLCBHRlBfTk9GUykpKSB7CiAJCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIGR0cmVlIGJhbGFuY2luZ1xuIik7CiAJCQlnb3RvIGVuZG07CiAJCX0KLQkJbWVtY3B5KGRlX2NwLCBkZSwgZGUtPmxlbmd0aCk7CisJCW1lbWNweShkZV9jcCwgZGUsIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpKTsKIAkJaHBmc19kZWxldGVfZGUoaS0+aV9zYiwgZG5vZGUsIGRlKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgKChsb2ZmX3QpdXAgPDwgNCkgfCBwLCA0KTsKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX2RlbCwgKChsb2ZmX3QpdXAgPDwgNCkgfCBwLCAxKTsKIAkJaWYgKGRlX2NwLT5kb3duKSBpZiAoKGQxID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZGVfZG93bl9wb2ludGVyKGRlX2NwKSwgJnFiaDEpKSkgewotCQkJZDEtPnVwID0gbmRvd247CisJCQlkMS0+dXAgPSBjcHVfdG9fbGUzMihuZG93bik7CiAJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQkJaHBmc19icmVsc2U0KCZxYmgxKTsKIAkJfQpAQCAtNjM1LDcgKzYzNSw3IEBACiAJCQlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlbCA9IGRub2RlX2xhc3RfZGUoZDEpOwogCQkJZGxwID0gZGVsLT5kb3duID8gZGVfZG93bl9wb2ludGVyKGRlbCkgOiAwOwogCQkJaWYgKCFkbHAgJiYgZG93bikgewotCQkJCWlmIChkMS0+Zmlyc3RfZnJlZSA+IDIwNDQpIHsKKwkJCQlpZiAobGUzMl90b19jcHUoZDEtPmZpcnN0X2ZyZWUpID4gMjA0NCkgewogCQkJCQlpZiAoaHBmc19zYihpLT5pX3NiKS0+c2JfY2hrID49IDIpIHsKIAkJCQkJCXByaW50aygiSFBGUzogd2FybmluZzogdW5iYWxhbmNlZCBkbm9kZSB0cmVlLCBzZWUgaHBmcy50eHQgNCBtb3JlIGluZm9cbiIpOwogCQkJCQkJcHJpbnRrKCJIUEZTOiB3YXJuaW5nOiB0ZXJtaW5hdGluZyBiYWxhbmNpbmcgb3BlcmF0aW9uXG4iKTsKQEAgLTY0NywzOCArNjQ3LDM4IEBACiAJCQkJCXByaW50aygiSFBGUzogd2FybmluZzogdW5iYWxhbmNlZCBkbm9kZSB0cmVlLCBzZWUgaHBmcy50eHQgNCBtb3JlIGluZm9cbiIpOwogCQkJCQlwcmludGsoIkhQRlM6IHdhcm5pbmc6IGdvaW4nb25cbiIpOwogCQkJCX0KLQkJCQlkZWwtPmxlbmd0aCArPSA0OworCQkJCWRlbC0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZGVsLT5sZW5ndGgpICsgNCk7CiAJCQkJZGVsLT5kb3duID0gMTsKLQkJCQlkMS0+Zmlyc3RfZnJlZSArPSA0OworCQkJCWQxLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZDEtPmZpcnN0X2ZyZWUpICsgNCk7CiAJCQl9CiAJCQlpZiAoZGxwICYmICFkb3duKSB7Ci0JCQkJZGVsLT5sZW5ndGggLT0gNDsKKwkJCQlkZWwtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlbC0+bGVuZ3RoKSAtIDQpOwogCQkJCWRlbC0+ZG93biA9IDA7Ci0JCQkJZDEtPmZpcnN0X2ZyZWUgLT0gNDsKKwkJCQlkMS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQxLT5maXJzdF9mcmVlKSAtIDQpOwogCQkJfSBlbHNlIGlmIChkb3duKQotCQkJCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlbCArIGRlbC0+bGVuZ3RoIC0gNCkgPSBkb3duOworCQkJCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlbCArIGxlMTZfdG9fY3B1KGRlbC0+bGVuZ3RoKSAtIDQpID0gY3B1X3RvX2xlMzIoZG93bik7CiAJCX0gZWxzZSBnb3RvIGVuZG07Ci0JCWlmICghKGRlX2NwID0ga21hbGxvYyhkZV9wcmV2LT5sZW5ndGgsIEdGUF9OT0ZTKSkpIHsKKwkJaWYgKCEoZGVfY3AgPSBrbWFsbG9jKGxlMTZfdG9fY3B1KGRlX3ByZXYtPmxlbmd0aCksIEdGUF9OT0ZTKSkpIHsKIAkJCXByaW50aygiSFBGUzogb3V0IG9mIG1lbW9yeSBmb3IgZHRyZWUgYmFsYW5jaW5nXG4iKTsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCQlnb3RvIGVuZG07CiAJCX0KIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgxKTsKIAkJaHBmc19icmVsc2U0KCZxYmgxKTsKLQkJbWVtY3B5KGRlX2NwLCBkZV9wcmV2LCBkZV9wcmV2LT5sZW5ndGgpOworCQltZW1jcHkoZGVfY3AsIGRlX3ByZXYsIGxlMTZfdG9fY3B1KGRlX3ByZXYtPmxlbmd0aCkpOwogCQlocGZzX2RlbGV0ZV9kZShpLT5pX3NiLCBkbm9kZSwgZGVfcHJldik7CiAJCWlmICghZGVfcHJldi0+ZG93bikgewotCQkJZGVfcHJldi0+bGVuZ3RoICs9IDQ7CisJCQlkZV9wcmV2LT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShkZV9wcmV2LT5sZW5ndGgpICsgNCk7CiAJCQlkZV9wcmV2LT5kb3duID0gMTsKLQkJCWRub2RlLT5maXJzdF9mcmVlICs9IDQ7CisJCQlkbm9kZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSArIDQpOwogCQl9Ci0JCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlX3ByZXYgKyBkZV9wcmV2LT5sZW5ndGggLSA0KSA9IG5kb3duOworCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZV9wcmV2ICsgbGUxNl90b19jcHUoZGVfcHJldi0+bGVuZ3RoKSAtIDQpID0gY3B1X3RvX2xlMzIobmRvd24pOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCAoKGxvZmZfdCl1cCA8PCA0KSB8IChwIC0gMSksIDQpOwogCQlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsICgobG9mZl90KXVwIDw8IDQpIHwgcCwgKChsb2ZmX3QpdXAgPDwgNCkgfCAocCAtIDEpKTsKIAkJaWYgKGRvd24pIGlmICgoZDEgPSBocGZzX21hcF9kbm9kZShpLT5pX3NiLCBkZV9kb3duX3BvaW50ZXIoZGUpLCAmcWJoMSkpKSB7Ci0JCQlkMS0+dXAgPSBuZG93bjsKKwkJCWQxLT51cCA9IGNwdV90b19sZTMyKG5kb3duKTsKIAkJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMSk7CiAJCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQl9CkBAIC03MDEsNyArNzAxLDYgQEAKIHsKIAlzdHJ1Y3QgZG5vZGUgKmRub2RlID0gcWJoLT5kYXRhOwogCWRub2RlX3NlY25vIGRvd24gPSAwOwotCWludCBsb2NrID0gMDsKIAlsb2ZmX3QgdDsKIAlpZiAoZGUtPmZpcnN0IHx8IGRlLT5sYXN0KSB7CiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgImhwZnNfcmVtb3ZlX2RpcmVudDogYXR0ZW1wdCB0byBkZWxldGUgZmlyc3Qgb3IgbGFzdCBkaXJlbnQgaW4gZG5vZGUgJTA4eCIsIGRubyk7CkBAIC03MTAsMTEgKzcwOSw4IEBACiAJfQogCWlmIChkZS0+ZG93bikgZG93biA9IGRlX2Rvd25fcG9pbnRlcihkZSk7CiAJaWYgKGRlcHRoICYmIChkZS0+ZG93biB8fCAoZGUgPT0gZG5vZGVfZmlyc3RfZGUoZG5vZGUpICYmIGRlX25leHRfZGUoZGUpLT5sYXN0KSkpIHsKLQkJbG9jayA9IDE7Ci0JCWhwZnNfbG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJaWYgKGhwZnNfY2hlY2tfZnJlZV9kbm9kZXMoaS0+aV9zYiwgRlJFRV9ETk9ERVNfREVMKSkgewogCQkJaHBmc19icmVsc2U0KHFiaCk7Ci0JCQlocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJCXJldHVybiAyOwogCQl9CiAJfQpAQCAtNzI3LDExICs3MjMsOSBAQAogCQlkbm9kZV9zZWNubyBhID0gbW92ZV90b190b3AoaSwgZG93biwgZG5vKTsKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCA1LCB0KTsKIAkJaWYgKGEpIGRlbGV0ZV9lbXB0eV9kbm9kZShpLCBhKTsKLQkJaWYgKGxvY2spIGhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCQlyZXR1cm4gIWE7CiAJfQogCWRlbGV0ZV9lbXB0eV9kbm9kZShpLCBkbm8pOwotCWlmIChsb2NrKSBocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUxLDggKzc0NSw4IEBACiAJcHRyID0gMDsKIAlnb191cDoKIAlpZiAoIShkbm9kZSA9IGhwZnNfbWFwX2Rub2RlKHMsIGRubywgJnFiaCkpKSByZXR1cm47Ci0JaWYgKGhwZnNfc2IocyktPnNiX2NoaykgaWYgKG9kbm8gJiYgb2RubyAhPSAtMSAmJiBkbm9kZS0+dXAgIT0gb2RubykKLQkJaHBmc19lcnJvcihzLCAiaHBmc19jb3VudF9kbm9kZXM6IGJhZCB1cCBwb2ludGVyOyBkbm9kZSAlMDh4LCBkb3duICUwOHggcG9pbnRzIHRvICUwOHgiLCBvZG5vLCBkbm8sIGRub2RlLT51cCk7CisJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgaWYgKG9kbm8gJiYgb2RubyAhPSAtMSAmJiBsZTMyX3RvX2NwdShkbm9kZS0+dXApICE9IG9kbm8pCisJCWhwZnNfZXJyb3IocywgImhwZnNfY291bnRfZG5vZGVzOiBiYWQgdXAgcG9pbnRlcjsgZG5vZGUgJTA4eCwgZG93biAlMDh4IHBvaW50cyB0byAlMDh4Iiwgb2RubywgZG5vLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApKTsKIAlkZSA9IGRub2RlX2ZpcnN0X2RlKGRub2RlKTsKIAlpZiAocHRyKSB3aGlsZSgxKSB7CiAJCWlmIChkZS0+ZG93bikgaWYgKGRlX2Rvd25fcG9pbnRlcihkZSkgPT0gcHRyKSBnb3RvIHByb2Nlc3NfZGU7CkBAIC03NzYsNyArNzcwLDcgQEAKIAlpZiAoIWRlLT5maXJzdCAmJiAhZGUtPmxhc3QgJiYgbl9pdGVtcykgKCpuX2l0ZW1zKSsrOwogCWlmICgoZGUgPSBkZV9uZXh0X2RlKGRlKSkgPCBkbm9kZV9lbmRfZGUoZG5vZGUpKSBnb3RvIG5leHRfZGU7CiAJcHRyID0gZG5vOwotCWRubyA9IGRub2RlLT51cDsKKwlkbm8gPSBsZTMyX3RvX2NwdShkbm9kZS0+dXApOwogCWlmIChkbm9kZS0+cm9vdF9kbm9kZSkgewogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCXJldHVybjsKQEAgLTgyNCw4ICs4MTgsOCBAQAogCQkJcmV0dXJuIGQ7CiAJaWYgKCEoZGUgPSBtYXBfbnRoX2RpcmVudChzLCBkLCAxLCAmcWJoLCBOVUxMKSkpIHJldHVybiBkbm87CiAJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKLQkJaWYgKHVwICYmICgoc3RydWN0IGRub2RlICopcWJoLmRhdGEpLT51cCAhPSB1cCkKLQkJCWhwZnNfZXJyb3IocywgImhwZnNfZGVfYXNfZG93bl9hc19wb3NzaWJsZTogYmFkIHVwIHBvaW50ZXI7IGRub2RlICUwOHgsIGRvd24gJTA4eCBwb2ludHMgdG8gJTA4eCIsIHVwLCBkLCAoKHN0cnVjdCBkbm9kZSAqKXFiaC5kYXRhKS0+dXApOworCQlpZiAodXAgJiYgbGUzMl90b19jcHUoKChzdHJ1Y3QgZG5vZGUgKilxYmguZGF0YSktPnVwKSAhPSB1cCkKKwkJCWhwZnNfZXJyb3IocywgImhwZnNfZGVfYXNfZG93bl9hc19wb3NzaWJsZTogYmFkIHVwIHBvaW50ZXI7IGRub2RlICUwOHgsIGRvd24gJTA4eCBwb2ludHMgdG8gJTA4eCIsIHVwLCBkLCBsZTMyX3RvX2NwdSgoKHN0cnVjdCBkbm9kZSAqKXFiaC5kYXRhKS0+dXApKTsKIAlpZiAoIWRlLT5kb3duKSB7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJcmV0dXJuIGQ7CkBAIC04NzQsNyArODY4LDcgQEAKIAkvKiBHb2luZyB1cCAqLwogCWlmIChkbm9kZS0+cm9vdF9kbm9kZSkgZ290byBiYWlsOwogCi0JaWYgKCEodXBfZG5vZGUgPSBocGZzX21hcF9kbm9kZShpbm9kZS0+aV9zYiwgZG5vZGUtPnVwLCAmcWJoMCkpKQorCWlmICghKHVwX2Rub2RlID0gaHBmc19tYXBfZG5vZGUoaW5vZGUtPmlfc2IsIGxlMzJfdG9fY3B1KGRub2RlLT51cCksICZxYmgwKSkpCiAJCWdvdG8gYmFpbDsKIAogCWVuZF91cF9kZSA9IGRub2RlX2VuZF9kZSh1cF9kbm9kZSk7CkBAIC04ODIsMTYgKzg3NiwxNiBAQAogCWZvciAodXBfZGUgPSBkbm9kZV9maXJzdF9kZSh1cF9kbm9kZSk7IHVwX2RlIDwgZW5kX3VwX2RlOwogCSAgICAgdXBfZGUgPSBkZV9uZXh0X2RlKHVwX2RlKSkgewogCQlpZiAoISgrK2MgJiAwNzcpKSBocGZzX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJIm1hcF9wb3NfZGlyZW50OiBwb3MgY3Jvc3NlZCBkbm9kZSBib3VuZGFyeTsgZG5vZGUgPSAlMDh4IiwgZG5vZGUtPnVwKTsKKwkJCSJtYXBfcG9zX2RpcmVudDogcG9zIGNyb3NzZWQgZG5vZGUgYm91bmRhcnk7IGRub2RlID0gJTA4eCIsIGxlMzJfdG9fY3B1KGRub2RlLT51cCkpOwogCQlpZiAodXBfZGUtPmRvd24gJiYgZGVfZG93bl9wb2ludGVyKHVwX2RlKSA9PSBkbm8pIHsKLQkJCSpwb3NwID0gKChsb2ZmX3QpIGRub2RlLT51cCA8PCA0KSArIGM7CisJCQkqcG9zcCA9ICgobG9mZl90KSBsZTMyX3RvX2NwdShkbm9kZS0+dXApIDw8IDQpICsgYzsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoMCk7CiAJCQlyZXR1cm4gZGU7CiAJCX0KIAl9CiAJCiAJaHBmc19lcnJvcihpbm9kZS0+aV9zYiwgIm1hcF9wb3NfZGlyZW50OiBwb2ludGVyIHRvIGRub2RlICUwOHggbm90IGZvdW5kIGluIHBhcmVudCBkbm9kZSAlMDh4IiwKLQkJZG5vLCBkbm9kZS0+dXApOworCQlkbm8sIGxlMzJfdG9fY3B1KGRub2RlLT51cCkpOwogCWhwZnNfYnJlbHNlNCgmcWJoMCk7CiAJCiAJYmFpbDoKQEAgLTEwMTcsMTcgKzEwMTEsMTcgQEAKIAkJLypuYW1lMlsxNV0gPSAweGZmOyovCiAJCW5hbWUxbGVuID0gMTU7IG5hbWUybGVuID0gMjU2OwogCX0KLQlpZiAoISh1cGYgPSBocGZzX21hcF9mbm9kZShzLCBmLT51cCwgJmJoKSkpIHsKKwlpZiAoISh1cGYgPSBocGZzX21hcF9mbm9kZShzLCBsZTMyX3RvX2NwdShmLT51cCksICZiaCkpKSB7CiAJCWtmcmVlKG5hbWUyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQkKIAlpZiAoIXVwZi0+ZGlyZmxhZykgewogCQlicmVsc2UoYmgpOwotCQlocGZzX2Vycm9yKHMsICJmbm9kZSAlMDh4IGhhcyBub24tZGlyZWN0b3J5IHBhcmVudCAlMDh4IiwgZm5vLCBmLT51cCk7CisJCWhwZnNfZXJyb3IocywgImZub2RlICUwOHggaGFzIG5vbi1kaXJlY3RvcnkgcGFyZW50ICUwOHgiLCBmbm8sIGxlMzJfdG9fY3B1KGYtPnVwKSk7CiAJCWtmcmVlKG5hbWUyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWRubyA9IHVwZi0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vOworCWRubyA9IGxlMzJfdG9fY3B1KHVwZi0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKTsKIAlicmVsc2UoYmgpOwogCWdvX2Rvd246CiAJZG93bmQgPSAwOwpAQCAtMTA0OSw3ICsxMDQzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW5leHRfZGU6Ci0JaWYgKGRlLT5mbm9kZSA9PSBmbm8pIHsKKwlpZiAobGUzMl90b19jcHUoZGUtPmZub2RlKSA9PSBmbm8pIHsKIAkJa2ZyZWUobmFtZTIpOwogCQlyZXR1cm4gZGU7CiAJfQpAQCAtMTA2NSw3ICsxMDU5LDcgQEAKIAkJZ290byBnb19kb3duOwogCX0KIAlmOgotCWlmIChkZS0+Zm5vZGUgPT0gZm5vKSB7CisJaWYgKGxlMzJfdG9fY3B1KGRlLT5mbm9kZSkgPT0gZm5vKSB7CiAJCWtmcmVlKG5hbWUyKTsKIAkJcmV0dXJuIGRlOwogCX0KQEAgLTEwNzQsNyArMTA2OCw3IEBACiAJaWYgKChkZSA9IGRlX25leHRfZGUoZGUpKSA8IGRlX2VuZCkgZ290byBuZXh0X2RlOwogCWlmIChkLT5yb290X2Rub2RlKSBnb3RvIG5vdF9mb3VuZDsKIAlkb3duZCA9IGRubzsKLQlkbm8gPSBkLT51cDsKKwlkbm8gPSBsZTMyX3RvX2NwdShkLT51cCk7CiAJaHBmc19icmVsc2U0KHFiaCk7CiAJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKIAkJaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgZG93bmQsICZkMSwgJmQyLCAibWFwX2Zub2RlX2RpcmVudCAjMiIpKSB7CmRpZmYgLS1naXQgYS9mcy9ocGZzL2VhLmMgYi9mcy9ocGZzL2VhLmMKaW5kZXggNDVlNTNkOS4uZDhiODRkMSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9lYS5jCisrKyBiL2ZzL2hwZnMvZWEuYwpAQCAtMjQsNyArMjQsNyBAQAogCQl9CiAJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MsIDQsIGV4KSkgcmV0dXJuOwogCQlpZiAoZWEtPmluZGlyZWN0KSB7Ci0JCQlpZiAoZWEtPnZhbHVlbGVuICE9IDgpIHsKKwkJCWlmIChlYV92YWx1ZWxlbihlYSkgIT0gOCkgewogCQkJCWhwZnNfZXJyb3IocywgImVhLT5pbmRpcmVjdCBzZXQgd2hpbGUgZWEtPnZhbHVlbGVuIT04LCAlcyAlMDh4LCBwb3MgJTA4eCIsCiAJCQkJCWFubyA/ICJhbm9kZSIgOiAic2VjdG9ycyIsIGEsIHBvcyk7CiAJCQkJcmV0dXJuOwpAQCAtMzMsNyArMzMsNyBAQAogCQkJCXJldHVybjsKIAkJCWhwZnNfZWFfcmVtb3ZlKHMsIGVhX3NlYyhlYSksIGVhLT5hbm9kZSwgZWFfbGVuKGVhKSk7CiAJCX0KLQkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWEtPnZhbHVlbGVuICsgNTsKKwkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWFfdmFsdWVsZW4oZWEpICsgNTsKIAl9CiAJaWYgKCFhbm8pIGhwZnNfZnJlZV9zZWN0b3JzKHMsIGEsIChsZW4rNTExKSA+PiA5KTsKIAllbHNlIHsKQEAgLTc2LDI0ICs3NiwyNCBAQAogCXVuc2lnbmVkIHBvczsKIAlpbnQgYW5vLCBsZW47CiAJc2Vjbm8gYTsKKwljaGFyIGV4WzQgKyAyNTUgKyAxICsgOF07CiAJc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWE7CiAJc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWFfZW5kID0gZm5vZGVfZW5kX2VhKGZub2RlKTsKIAlmb3IgKGVhID0gZm5vZGVfZWEoZm5vZGUpOyBlYSA8IGVhX2VuZDsgZWEgPSBuZXh0X2VhKGVhKSkKIAkJaWYgKCFzdHJjbXAoZWEtPm5hbWUsIGtleSkpIHsKIAkJCWlmIChlYS0+aW5kaXJlY3QpCiAJCQkJZ290byBpbmRpcmVjdDsKLQkJCWlmIChlYS0+dmFsdWVsZW4gPj0gc2l6ZSkKKwkJCWlmIChlYV92YWx1ZWxlbihlYSkgPj0gc2l6ZSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweShidWYsIGVhX2RhdGEoZWEpLCBlYS0+dmFsdWVsZW4pOwotCQkJYnVmW2VhLT52YWx1ZWxlbl0gPSAwOworCQkJbWVtY3B5KGJ1ZiwgZWFfZGF0YShlYSksIGVhX3ZhbHVlbGVuKGVhKSk7CisJCQlidWZbZWFfdmFsdWVsZW4oZWEpXSA9IDA7CiAJCQlyZXR1cm4gMDsKIAkJfQotCWEgPSBmbm9kZS0+ZWFfc2Vjbm87Ci0JbGVuID0gZm5vZGUtPmVhX3NpemVfbDsKKwlhID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKTsKKwlsZW4gPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKTsKIAlhbm8gPSBmbm9kZS0+ZWFfYW5vZGU7CiAJcG9zID0gMDsKIAl3aGlsZSAocG9zIDwgbGVuKSB7Ci0JCWNoYXIgZXhbNCArIDI1NSArIDEgKyA4XTsKIAkJZWEgPSAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKWV4OwogCQlpZiAocG9zICsgNCA+IGxlbikgewogCQkJaHBmc19lcnJvcihzLCAiRUFzIGRvbid0IGVuZCBjb3JyZWN0bHksICVzICUwOHgsIGxlbiAlMDh4IiwKQEAgLTEwNiwxNCArMTA2LDE0IEBACiAJCWlmICghc3RyY21wKGVhLT5uYW1lLCBrZXkpKSB7CiAJCQlpZiAoZWEtPmluZGlyZWN0KQogCQkJCWdvdG8gaW5kaXJlY3Q7Ci0JCQlpZiAoZWEtPnZhbHVlbGVuID49IHNpemUpCisJCQlpZiAoZWFfdmFsdWVsZW4oZWEpID49IHNpemUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoaHBmc19lYV9yZWFkKHMsIGEsIGFubywgcG9zICsgNCArIGVhLT5uYW1lbGVuICsgMSwgZWEtPnZhbHVlbGVuLCBidWYpKQorCQkJaWYgKGhwZnNfZWFfcmVhZChzLCBhLCBhbm8sIHBvcyArIDQgKyBlYS0+bmFtZWxlbiArIDEsIGVhX3ZhbHVlbGVuKGVhKSwgYnVmKSkKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCWJ1ZltlYS0+dmFsdWVsZW5dID0gMDsKKwkJCWJ1ZltlYV92YWx1ZWxlbihlYSldID0gMDsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhLT52YWx1ZWxlbiArIDU7CisJCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhX3ZhbHVlbGVuKGVhKSArIDU7CiAJfQogCXJldHVybiAtRU5PRU5UOwogaW5kaXJlY3Q6CkBAIC0xMzgsMTYgKzEzOCwxNiBAQAogCQlpZiAoIXN0cmNtcChlYS0+bmFtZSwga2V5KSkgewogCQkJaWYgKGVhLT5pbmRpcmVjdCkKIAkJCQlyZXR1cm4gZ2V0X2luZGlyZWN0X2VhKHMsIGVhLT5hbm9kZSwgZWFfc2VjKGVhKSwgKnNpemUgPSBlYV9sZW4oZWEpKTsKLQkJCWlmICghKHJldCA9IGttYWxsb2MoKCpzaXplID0gZWEtPnZhbHVlbGVuKSArIDEsIEdGUF9OT0ZTKSkpIHsKKwkJCWlmICghKHJldCA9IGttYWxsb2MoKCpzaXplID0gZWFfdmFsdWVsZW4oZWEpKSArIDEsIEdGUF9OT0ZTKSkpIHsKIAkJCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIEVBXG4iKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCW1lbWNweShyZXQsIGVhX2RhdGEoZWEpLCBlYS0+dmFsdWVsZW4pOwotCQkJcmV0W2VhLT52YWx1ZWxlbl0gPSAwOworCQkJbWVtY3B5KHJldCwgZWFfZGF0YShlYSksIGVhX3ZhbHVlbGVuKGVhKSk7CisJCQlyZXRbZWFfdmFsdWVsZW4oZWEpXSA9IDA7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JYSA9IGZub2RlLT5lYV9zZWNubzsKLQlsZW4gPSBmbm9kZS0+ZWFfc2l6ZV9sOworCWEgPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pOworCWxlbiA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpOwogCWFubyA9IGZub2RlLT5lYV9hbm9kZTsKIAlwb3MgPSAwOwogCXdoaWxlIChwb3MgPCBsZW4pIHsKQEAgLTE2NCwxOCArMTY0LDE4IEBACiAJCWlmICghc3RyY21wKGVhLT5uYW1lLCBrZXkpKSB7CiAJCQlpZiAoZWEtPmluZGlyZWN0KQogCQkJCXJldHVybiBnZXRfaW5kaXJlY3RfZWEocywgZWEtPmFub2RlLCBlYV9zZWMoZWEpLCAqc2l6ZSA9IGVhX2xlbihlYSkpOwotCQkJaWYgKCEocmV0ID0ga21hbGxvYygoKnNpemUgPSBlYS0+dmFsdWVsZW4pICsgMSwgR0ZQX05PRlMpKSkgeworCQkJaWYgKCEocmV0ID0ga21hbGxvYygoKnNpemUgPSBlYV92YWx1ZWxlbihlYSkpICsgMSwgR0ZQX05PRlMpKSkgewogCQkJCXByaW50aygiSFBGUzogb3V0IG9mIG1lbW9yeSBmb3IgRUFcbiIpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQotCQkJaWYgKGhwZnNfZWFfcmVhZChzLCBhLCBhbm8sIHBvcyArIDQgKyBlYS0+bmFtZWxlbiArIDEsIGVhLT52YWx1ZWxlbiwgcmV0KSkgeworCQkJaWYgKGhwZnNfZWFfcmVhZChzLCBhLCBhbm8sIHBvcyArIDQgKyBlYS0+bmFtZWxlbiArIDEsIGVhX3ZhbHVlbGVuKGVhKSwgcmV0KSkgewogCQkJCWtmcmVlKHJldCk7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9Ci0JCQlyZXRbZWEtPnZhbHVlbGVuXSA9IDA7CisJCQlyZXRbZWFfdmFsdWVsZW4oZWEpXSA9IDA7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhLT52YWx1ZWxlbiArIDU7CisJCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhX3ZhbHVlbGVuKGVhKSArIDU7CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtMjAyLDEzICsyMDIsMTMgQEAKIAkJCWlmIChlYS0+aW5kaXJlY3QpIHsKIAkJCQlpZiAoZWFfbGVuKGVhKSA9PSBzaXplKQogCQkJCQlzZXRfaW5kaXJlY3RfZWEocywgZWEtPmFub2RlLCBlYV9zZWMoZWEpLCBkYXRhLCBzaXplKTsKLQkJCX0gZWxzZSBpZiAoZWEtPnZhbHVlbGVuID09IHNpemUpIHsKKwkJCX0gZWxzZSBpZiAoZWFfdmFsdWVsZW4oZWEpID09IHNpemUpIHsKIAkJCQltZW1jcHkoZWFfZGF0YShlYSksIGRhdGEsIHNpemUpOwogCQkJfQogCQkJcmV0dXJuOwogCQl9Ci0JYSA9IGZub2RlLT5lYV9zZWNubzsKLQlsZW4gPSBmbm9kZS0+ZWFfc2l6ZV9sOworCWEgPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pOworCWxlbiA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpOwogCWFubyA9IGZub2RlLT5lYV9hbm9kZTsKIAlwb3MgPSAwOwogCXdoaWxlIChwb3MgPCBsZW4pIHsKQEAgLTIyOCw2OCArMjI4LDcwIEBACiAJCQkJCXNldF9pbmRpcmVjdF9lYShzLCBlYS0+YW5vZGUsIGVhX3NlYyhlYSksIGRhdGEsIHNpemUpOwogCQkJfQogCQkJZWxzZSB7Ci0JCQkJaWYgKGVhLT52YWx1ZWxlbiA9PSBzaXplKQorCQkJCWlmIChlYV92YWx1ZWxlbihlYSkgPT0gc2l6ZSkKIAkJCQkJaHBmc19lYV93cml0ZShzLCBhLCBhbm8sIHBvcyArIDQgKyBlYS0+bmFtZWxlbiArIDEsIHNpemUsIGRhdGEpOwogCQkJfQogCQkJcmV0dXJuOwogCQl9Ci0JCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhLT52YWx1ZWxlbiArIDU7CisJCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhX3ZhbHVlbGVuKGVhKSArIDU7CiAJfQotCWlmICghZm5vZGUtPmVhX29mZnMpIHsKLQkJLyppZiAoZm5vZGUtPmVhX3NpemVfcykgeworCWlmICghbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpKSB7CisJCS8qaWYgKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKSB7CiAJCQlocGZzX2Vycm9yKHMsICJmbm9kZSAlMDh4OiBlYV9zaXplX3MgPT0gJTAzeCwgZWFfb2ZmcyA9PSAwIiwKLQkJCQlpbm9kZS0+aV9pbm8sIGZub2RlLT5lYV9zaXplX3MpOworCQkJCWlub2RlLT5pX2lubywgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpOwogCQkJcmV0dXJuOwogCQl9Ki8KLQkJZm5vZGUtPmVhX29mZnMgPSAweGM0OworCQlmbm9kZS0+ZWFfb2ZmcyA9IGNwdV90b19sZTE2KDB4YzQpOwogCX0KLQlpZiAoZm5vZGUtPmVhX29mZnMgPCAweGM0IHx8IGZub2RlLT5lYV9vZmZzICsgZm5vZGUtPmFjbF9zaXplX3MgKyBmbm9kZS0+ZWFfc2l6ZV9zID4gMHgyMDApIHsKKwlpZiAobGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpIDwgMHhjNCB8fCBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+YWNsX3NpemVfcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSA+IDB4MjAwKSB7CiAJCWhwZnNfZXJyb3IocywgImZub2RlICUwOGx4OiBlYV9vZmZzID09ICUwM3gsIGVhX3NpemVfcyA9PSAlMDN4IiwKIAkJCSh1bnNpZ25lZCBsb25nKWlub2RlLT5pX2lubywKLQkJCWZub2RlLT5lYV9vZmZzLCBmbm9kZS0+ZWFfc2l6ZV9zKTsKKwkJCWxlMzJfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSwgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpOwogCQlyZXR1cm47CiAJfQotCWlmICgoZm5vZGUtPmVhX3NpemVfcyB8fCAhZm5vZGUtPmVhX3NpemVfbCkgJiYKLQkgICAgIGZub2RlLT5lYV9vZmZzICsgZm5vZGUtPmFjbF9zaXplX3MgKyBmbm9kZS0+ZWFfc2l6ZV9zICsgc3RybGVuKGtleSkgKyBzaXplICsgNSA8PSAweDIwMCkgeworCWlmICgobGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgfHwgIWxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpKSAmJgorCSAgICAgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgKyBzdHJsZW4oa2V5KSArIHNpemUgKyA1IDw9IDB4MjAwKSB7CiAJCWVhID0gZm5vZGVfZW5kX2VhKGZub2RlKTsKIAkJKihjaGFyICopZWEgPSAwOwogCQllYS0+bmFtZWxlbiA9IHN0cmxlbihrZXkpOwotCQllYS0+dmFsdWVsZW4gPSBzaXplOworCQllYS0+dmFsdWVsZW5fbG8gPSBzaXplOworCQllYS0+dmFsdWVsZW5faGkgPSBzaXplID4+IDg7CiAJCXN0cmNweShlYS0+bmFtZSwga2V5KTsKIAkJbWVtY3B5KGVhX2RhdGEoZWEpLCBkYXRhLCBzaXplKTsKLQkJZm5vZGUtPmVhX3NpemVfcyArPSBzdHJsZW4oa2V5KSArIHNpemUgKyA1OworCQlmbm9kZS0+ZWFfc2l6ZV9zID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgKyBzdHJsZW4oa2V5KSArIHNpemUgKyA1KTsKIAkJZ290byByZXQ7CiAJfQogCS8qIE1vc3QgdGhlIGNvZGUgaGVyZSBpcyA5OS45OTkzNDIyJSB1bnVzZWQuIEkgaG9wZSB0aGVyZSBhcmUgbm8gYnVncy4KIAkgICBCdXQgd2hhdCAuLiBIUEZTLklGUyBoYXMgYWxzbyBidWdzIGluIGVhIG1hbmFnZW1lbnQuICovCi0JaWYgKGZub2RlLT5lYV9zaXplX3MgJiYgIWZub2RlLT5lYV9zaXplX2wpIHsKKwlpZiAobGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgJiYgIWxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpKSB7CiAJCXNlY25vIG47CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJCWNoYXIgKmRhdGE7Ci0JCWlmICghKG4gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBmbm8sIDEsIDAsIDEpKSkgcmV0dXJuOworCQlpZiAoIShuID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAwKSkpIHJldHVybjsKIAkJaWYgKCEoZGF0YSA9IGhwZnNfZ2V0X3NlY3RvcihzLCBuLCAmYmgpKSkgewogCQkJaHBmc19mcmVlX3NlY3RvcnMocywgbiwgMSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJbWVtY3B5KGRhdGEsIGZub2RlX2VhKGZub2RlKSwgZm5vZGUtPmVhX3NpemVfcyk7Ci0JCWZub2RlLT5lYV9zaXplX2wgPSBmbm9kZS0+ZWFfc2l6ZV9zOwotCQlmbm9kZS0+ZWFfc2l6ZV9zID0gMDsKLQkJZm5vZGUtPmVhX3NlY25vID0gbjsKLQkJZm5vZGUtPmVhX2Fub2RlID0gMDsKKwkJbWVtY3B5KGRhdGEsIGZub2RlX2VhKGZub2RlKSwgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpOworCQlmbm9kZS0+ZWFfc2l6ZV9sID0gY3B1X3RvX2xlMzIobGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpOworCQlmbm9kZS0+ZWFfc2l6ZV9zID0gY3B1X3RvX2xlMTYoMCk7CisJCWZub2RlLT5lYV9zZWNubyA9IGNwdV90b19sZTMyKG4pOworCQlmbm9kZS0+ZWFfYW5vZGUgPSBjcHVfdG9fbGUzMigwKTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlicmVsc2UoYmgpOwogCX0KLQlwb3MgPSBmbm9kZS0+ZWFfc2l6ZV9sICsgNSArIHN0cmxlbihrZXkpICsgc2l6ZTsKLQlsZW4gPSAoZm5vZGUtPmVhX3NpemVfbCArIDUxMSkgPj4gOTsKKwlwb3MgPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUgKyBzdHJsZW4oa2V5KSArIHNpemU7CisJbGVuID0gKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNTExKSA+PiA5OwogCWlmIChwb3MgPj0gMzAwMDApIGdvdG8gYmFpbDsKIAl3aGlsZSAoKChwb3MgKyA1MTEpID4+IDkpID4gbGVuKSB7CiAJCWlmICghbGVuKSB7Ci0JCQlpZiAoIShmbm9kZS0+ZWFfc2Vjbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBmbm8sIDEsIDAsIDEpKSkKLQkJCQlnb3RvIGJhaWw7CisJCQlzZWNubyBxID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAwKTsKKwkJCWlmICghcSkgZ290byBiYWlsOworCQkJZm5vZGUtPmVhX3NlY25vID0gY3B1X3RvX2xlMzIocSk7CiAJCQlmbm9kZS0+ZWFfYW5vZGUgPSAwOwogCQkJbGVuKys7CiAJCX0gZWxzZSBpZiAoIWZub2RlLT5lYV9hbm9kZSkgewotCQkJaWYgKGhwZnNfYWxsb2NfaWZfcG9zc2libGUocywgZm5vZGUtPmVhX3NlY25vICsgbGVuKSkgeworCQkJaWYgKGhwZnNfYWxsb2NfaWZfcG9zc2libGUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSArIGxlbikpIHsKIAkJCQlsZW4rKzsKIAkJCX0gZWxzZSB7CiAJCQkJLyogQWFyZ2guLi4gZG9uJ3Qga25vdyBob3cgdG8gY3JlYXRlIGVhIGFub2RlcyA6LSggKi8KQEAgLTI5OCwyNiArMzAwLDI2IEBACiAJCQkJYW5vZGVfc2Vjbm8gYV9zOwogCQkJCWlmICghKGFub2RlID0gaHBmc19hbGxvY19hbm9kZShzLCBmbm8sICZhX3MsICZiaCkpKQogCQkJCQlnb3RvIGJhaWw7Ci0JCQkJYW5vZGUtPnVwID0gZm5vOworCQkJCWFub2RlLT51cCA9IGNwdV90b19sZTMyKGZubyk7CiAJCQkJYW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IDE7CiAJCQkJYW5vZGUtPmJ0cmVlLm5fZnJlZV9ub2Rlcy0tOwogCQkJCWFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMrKzsKLQkJCQlhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSArPSAxMjsKLQkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gZm5vZGUtPmVhX3NlY25vOwotCQkJCWFub2RlLT51LmV4dGVybmFsWzBdLmZpbGVfc2Vjbm8gPSAwOwotCQkJCWFub2RlLT51LmV4dGVybmFsWzBdLmxlbmd0aCA9IGxlbjsKKwkJCQlhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGFub2RlLT5idHJlZS5maXJzdF9mcmVlKSArIDEyKTsKKwkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSk7CisJCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKDApOworCQkJCWFub2RlLT51LmV4dGVybmFsWzBdLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbik7CiAJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJCWJyZWxzZShiaCk7CiAJCQkJZm5vZGUtPmVhX2Fub2RlID0gMTsKLQkJCQlmbm9kZS0+ZWFfc2Vjbm8gPSBhX3M7Ki8KKwkJCQlmbm9kZS0+ZWFfc2Vjbm8gPSBjcHVfdG9fbGUzMihhX3MpOyovCiAJCQkJc2Vjbm8gbmV3X3NlYzsKIAkJCQlpbnQgaTsKLQkJCQlpZiAoIShuZXdfc2VjID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAxIC0gKChwb3MgKyA1MTEpID4+IDkpLCAxKSkpCisJCQkJaWYgKCEobmV3X3NlYyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMSAtICgocG9zICsgNTExKSA+PiA5KSkpKQogCQkJCQlnb3RvIGJhaWw7CiAJCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgxLCAqYmgyOwogCQkJCQl2b2lkICpiMSwgKmIyOwotCQkJCQlpZiAoIShiMSA9IGhwZnNfbWFwX3NlY3RvcihzLCBmbm9kZS0+ZWFfc2Vjbm8gKyBpLCAmYmgxLCBsZW4gLSBpIC0gMSkpKSB7CisJCQkJCWlmICghKGIxID0gaHBmc19tYXBfc2VjdG9yKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykgKyBpLCAmYmgxLCBsZW4gLSBpIC0gMSkpKSB7CiAJCQkJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBuZXdfc2VjLCAocG9zICsgNTExKSA+PiA5KTsKIAkJCQkJCWdvdG8gYmFpbDsKIAkJCQkJfQpAQCAtMzMxLDEzICszMzMsMTMgQEAKIAkJCQkJbWFya19idWZmZXJfZGlydHkoYmgyKTsKIAkJCQkJYnJlbHNlKGJoMik7CiAJCQkJfQotCQkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGZub2RlLT5lYV9zZWNubywgbGVuKTsKLQkJCQlmbm9kZS0+ZWFfc2Vjbm8gPSBuZXdfc2VjOworCQkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIGxlbik7CisJCQkJZm5vZGUtPmVhX3NlY25vID0gY3B1X3RvX2xlMzIobmV3X3NlYyk7CiAJCQkJbGVuID0gKHBvcyArIDUxMSkgPj4gOTsKIAkJCX0KIAkJfQogCQlpZiAoZm5vZGUtPmVhX2Fub2RlKSB7Ci0JCQlpZiAoaHBmc19hZGRfc2VjdG9yX3RvX2J0cmVlKHMsIGZub2RlLT5lYV9zZWNubywKKwkJCWlmIChocGZzX2FkZF9zZWN0b3JfdG9fYnRyZWUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwKIAkJCQkJCSAgICAgMCwgbGVuKSAhPSAtMSkgewogCQkJCWxlbisrOwogCQkJfSBlbHNlIHsKQEAgLTM0OSwxNyArMzUxLDE3IEBACiAJaFsxXSA9IHN0cmxlbihrZXkpOwogCWhbMl0gPSBzaXplICYgMHhmZjsKIAloWzNdID0gc2l6ZSA+PiA4OwotCWlmIChocGZzX2VhX3dyaXRlKHMsIGZub2RlLT5lYV9zZWNubywgZm5vZGUtPmVhX2Fub2RlLCBmbm9kZS0+ZWFfc2l6ZV9sLCA0LCBoKSkgZ290byBiYWlsOwotCWlmIChocGZzX2VhX3dyaXRlKHMsIGZub2RlLT5lYV9zZWNubywgZm5vZGUtPmVhX2Fub2RlLCBmbm9kZS0+ZWFfc2l6ZV9sICsgNCwgaFsxXSArIDEsIGtleSkpIGdvdG8gYmFpbDsKLQlpZiAoaHBmc19lYV93cml0ZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIGZub2RlLT5lYV9hbm9kZSwgZm5vZGUtPmVhX3NpemVfbCArIDUgKyBoWzFdLCBzaXplLCBkYXRhKSkgZ290byBiYWlsOwotCWZub2RlLT5lYV9zaXplX2wgPSBwb3M7CisJaWYgKGhwZnNfZWFfd3JpdGUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgZm5vZGUtPmVhX2Fub2RlLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSwgNCwgaCkpIGdvdG8gYmFpbDsKKwlpZiAoaHBmc19lYV93cml0ZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLCBmbm9kZS0+ZWFfYW5vZGUsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNCwgaFsxXSArIDEsIGtleSkpIGdvdG8gYmFpbDsKKwlpZiAoaHBmc19lYV93cml0ZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLCBmbm9kZS0+ZWFfYW5vZGUsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNSArIGhbMV0sIHNpemUsIGRhdGEpKSBnb3RvIGJhaWw7CisJZm5vZGUtPmVhX3NpemVfbCA9IGNwdV90b19sZTMyKHBvcyk7CiAJcmV0OgogCWhwZnNfaShpbm9kZSktPmlfZWFfc2l6ZSArPSA1ICsgc3RybGVuKGtleSkgKyBzaXplOwogCXJldHVybjsKIAliYWlsOgotCWlmIChmbm9kZS0+ZWFfc2Vjbm8pCi0JCWlmIChmbm9kZS0+ZWFfYW5vZGUpIGhwZnNfdHJ1bmNhdGVfYnRyZWUocywgZm5vZGUtPmVhX3NlY25vLCAxLCAoZm5vZGUtPmVhX3NpemVfbCArIDUxMSkgPj4gOSk7Ci0JCWVsc2UgaHBmc19mcmVlX3NlY3RvcnMocywgZm5vZGUtPmVhX3NlY25vICsgKChmbm9kZS0+ZWFfc2l6ZV9sICsgNTExKSA+PiA5KSwgbGVuIC0gKChmbm9kZS0+ZWFfc2l6ZV9sICsgNTExKSA+PiA5KSk7Ci0JZWxzZSBmbm9kZS0+ZWFfc2Vjbm8gPSBmbm9kZS0+ZWFfc2l6ZV9sID0gMDsKKwlpZiAobGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSkKKwkJaWYgKGZub2RlLT5lYV9hbm9kZSkgaHBmc190cnVuY2F0ZV9idHJlZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLCAxLCAobGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1MTEpID4+IDkpOworCQllbHNlIGhwZnNfZnJlZV9zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykgKyAoKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNTExKSA+PiA5KSwgbGVuIC0gKChsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUxMSkgPj4gOSkpOworCWVsc2UgZm5vZGUtPmVhX3NlY25vID0gZm5vZGUtPmVhX3NpemVfbCA9IGNwdV90b19sZTMyKDApOwogfQogCQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9maWxlLmMgYi9mcy9ocGZzL2ZpbGUuYwppbmRleCA5YjllYjY5Li44OWM1MDBlIDEwMDY0NAotLS0gYS9mcy9ocGZzL2ZpbGUuYworKysgYi9mcy9ocGZzL2ZpbGUuYwpAQCAtMjAsOCArMjAsOCBAQAogCiBpbnQgaHBmc19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZGF0YXN5bmMpCiB7Ci0JLypyZXR1cm4gZmlsZV9mc3luYyhmaWxlLCBkYXRhc3luYyk7Ki8KLQlyZXR1cm4gMDsgLyogRG9uJ3QgZnN5bmMgOi0pICovCisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlyZXR1cm4gc3luY19ibG9ja2Rldihpbm9kZS0+aV9zYi0+c19iZGV2KTsKIH0KIAogLyoKQEAgLTQ4LDM4ICs0OCw0NiBAQAogc3RhdGljIHZvaWQgaHBmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmkpCiB7CiAJaWYgKElTX0lNTVVUQUJMRShpKSkgcmV0dXJuIC8qLUVQRVJNKi87Ci0JaHBmc19sb2NrKGktPmlfc2IpOworCWhwZnNfbG9ja19hc3NlcnQoaS0+aV9zYik7CisKIAlocGZzX2koaSktPmlfbl9zZWNzID0gMDsKIAlpLT5pX2Jsb2NrcyA9IDEgKyAoKGktPmlfc2l6ZSArIDUxMSkgPj4gOSk7CiAJaHBmc19pKGkpLT5tbXVfcHJpdmF0ZSA9IGktPmlfc2l6ZTsKIAlocGZzX3RydW5jYXRlX2J0cmVlKGktPmlfc2IsIGktPmlfaW5vLCAxLCAoKGktPmlfc2l6ZSArIDUxMSkgPj4gOSkpOwogCWhwZnNfd3JpdGVfaW5vZGUoaSk7CiAJaHBmc19pKGkpLT5pX25fc2VjcyA9IDA7Ci0JaHBmc191bmxvY2soaS0+aV9zYik7CiB9CiAKIHN0YXRpYyBpbnQgaHBmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKKwlpbnQgcjsKIAlzZWNubyBzOworCWhwZnNfbG9jayhpbm9kZS0+aV9zYik7CiAJcyA9IGhwZnNfYm1hcChpbm9kZSwgaWJsb2NrKTsKIAlpZiAocykgewogCQltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgcyk7Ci0JCXJldHVybiAwOworCQlnb3RvIHJldF8wOwogCX0KLQlpZiAoIWNyZWF0ZSkgcmV0dXJuIDA7CisJaWYgKCFjcmVhdGUpIGdvdG8gcmV0XzA7CiAJaWYgKGlibG9jazw8OSAhPSBocGZzX2koaW5vZGUpLT5tbXVfcHJpdmF0ZSkgewogCQlCVUcoKTsKLQkJcmV0dXJuIC1FSU87CisJCXIgPSAtRUlPOworCQlnb3RvIHJldF9yOwogCX0KIAlpZiAoKHMgPSBocGZzX2FkZF9zZWN0b3JfdG9fYnRyZWUoaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubywgMSwgaW5vZGUtPmlfYmxvY2tzIC0gMSkpID09IC0xKSB7CiAJCWhwZnNfdHJ1bmNhdGVfYnRyZWUoaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubywgMSwgaW5vZGUtPmlfYmxvY2tzIC0gMSk7Ci0JCXJldHVybiAtRU5PU1BDOworCQlyID0gLUVOT1NQQzsKKwkJZ290byByZXRfcjsKIAl9CiAJaW5vZGUtPmlfYmxvY2tzKys7CiAJaHBmc19pKGlub2RlKS0+bW11X3ByaXZhdGUgKz0gNTEyOwogCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAJbWFwX2JoKGJoX3Jlc3VsdCwgaW5vZGUtPmlfc2IsIHMpOwotCXJldHVybiAwOworCXJldF8wOgorCXIgPSAwOworCXJldF9yOgorCWhwZnNfdW5sb2NrKGlub2RlLT5pX3NiKTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBocGZzX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCkBAIC0xMzAsOCArMTM4LDExIEBACiAJc3NpemVfdCByZXR2YWw7CiAKIAlyZXR2YWwgPSBkb19zeW5jX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwotCWlmIChyZXR2YWwgPiAwKQorCWlmIChyZXR2YWwgPiAwKSB7CisJCWhwZnNfbG9jayhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKIAkJaHBmc19pKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5pX2RpcnR5ID0gMTsKKwkJaHBmc191bmxvY2soZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CisJfQogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaHBmcy5oIGIvZnMvaHBmcy9ocGZzLmgKaW5kZXggMGU4NGM3My4uOGIwNjUwYSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9ocGZzLmgKKysrIGIvZnMvaHBmcy9ocGZzLmgKQEAgLTE5LDkgKzE5LDEzIEBACiAgICBGb3IgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBvbiBIUEZTLCBhc2sgc29tZWJvZHkgZWxzZSAtLSB0aGlzIGlzIGd1ZXNzd29yay4KICAgIFRoZXJlIGFyZSBjZXJ0YWluIHRvIGJlIG1hbnkgbWlzdGFrZXMuICovCiAKKyNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pICYmICFkZWZpbmVkKF9fQklHX0VORElBTikKKyNlcnJvciB1bmtub3duIGVuZGlhbgorI2VuZGlmCisKIC8qIE5vdGF0aW9uICovCiAKLXR5cGVkZWYgdW5zaWduZWQgc2Vjbm87CQkJLyogc2VjdG9yIG51bWJlciwgcGFydGl0aW9uIHJlbGF0aXZlICovCit0eXBlZGVmIHUzMiBzZWNubzsJCQkvKiBzZWN0b3IgbnVtYmVyLCBwYXJ0aXRpb24gcmVsYXRpdmUgKi8KIAogdHlwZWRlZiBzZWNubyBkbm9kZV9zZWNubzsJCS8qIHNlY3RvciBudW1iZXIgb2YgYSBkbm9kZSAqLwogdHlwZWRlZiBzZWNubyBmbm9kZV9zZWNubzsJCS8qIHNlY3RvciBudW1iZXIgb2YgYW4gZm5vZGUgKi8KQEAgLTM4LDI4ICs0MiwyOCBAQAogCiBzdHJ1Y3QgaHBmc19ib290X2Jsb2NrCiB7Ci0gIHVuc2lnbmVkIGNoYXIgam1wWzNdOwotICB1bnNpZ25lZCBjaGFyIG9lbV9pZFs4XTsKLSAgdW5zaWduZWQgY2hhciBieXRlc19wZXJfc2VjdG9yWzJdOwkvKiA1MTIgKi8KLSAgdW5zaWduZWQgY2hhciBzZWN0b3JzX3Blcl9jbHVzdGVyOwotICB1bnNpZ25lZCBjaGFyIG5fcmVzZXJ2ZWRfc2VjdG9yc1syXTsKLSAgdW5zaWduZWQgY2hhciBuX2ZhdHM7Ci0gIHVuc2lnbmVkIGNoYXIgbl9yb290ZGlyX2VudHJpZXNbMl07Ci0gIHVuc2lnbmVkIGNoYXIgbl9zZWN0b3JzX3NbMl07Ci0gIHVuc2lnbmVkIGNoYXIgbWVkaWFfYnl0ZTsKLSAgdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfZmF0OwotICB1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl90cmFjazsKLSAgdW5zaWduZWQgc2hvcnQgaGVhZHNfcGVyX2N5bDsKLSAgdW5zaWduZWQgaW50IG5faGlkZGVuX3NlY3RvcnM7Ci0gIHVuc2lnbmVkIGludCBuX3NlY3RvcnNfbDsJCS8qIHNpemUgb2YgcGFydGl0aW9uICovCi0gIHVuc2lnbmVkIGNoYXIgZHJpdmVfbnVtYmVyOwotICB1bnNpZ25lZCBjaGFyIG1iejsKLSAgdW5zaWduZWQgY2hhciBzaWdfMjhoOwkJLyogMjhoICovCi0gIHVuc2lnbmVkIGNoYXIgdm9sX3Nlcm5vWzRdOwotICB1bnNpZ25lZCBjaGFyIHZvbF9sYWJlbFsxMV07Ci0gIHVuc2lnbmVkIGNoYXIgc2lnX2hwZnNbOF07CQkvKiAiSFBGUyAgICAiICovCi0gIHVuc2lnbmVkIGNoYXIgcGFkWzQ0OF07Ci0gIHVuc2lnbmVkIHNob3J0IG1hZ2ljOwkJCS8qIGFhNTUgKi8KKyAgdTggam1wWzNdOworICB1OCBvZW1faWRbOF07CisgIHU4IGJ5dGVzX3Blcl9zZWN0b3JbMl07CS8qIDUxMiAqLworICB1OCBzZWN0b3JzX3Blcl9jbHVzdGVyOworICB1OCBuX3Jlc2VydmVkX3NlY3RvcnNbMl07CisgIHU4IG5fZmF0czsKKyAgdTggbl9yb290ZGlyX2VudHJpZXNbMl07CisgIHU4IG5fc2VjdG9yc19zWzJdOworICB1OCBtZWRpYV9ieXRlOworICB1MTYgc2VjdG9yc19wZXJfZmF0OworICB1MTYgc2VjdG9yc19wZXJfdHJhY2s7CisgIHUxNiBoZWFkc19wZXJfY3lsOworICB1MzIgbl9oaWRkZW5fc2VjdG9yczsKKyAgdTMyIG5fc2VjdG9yc19sOwkJLyogc2l6ZSBvZiBwYXJ0aXRpb24gKi8KKyAgdTggZHJpdmVfbnVtYmVyOworICB1OCBtYno7CisgIHU4IHNpZ18yOGg7CQkJLyogMjhoICovCisgIHU4IHZvbF9zZXJub1s0XTsKKyAgdTggdm9sX2xhYmVsWzExXTsKKyAgdTggc2lnX2hwZnNbOF07CQkvKiAiSFBGUyAgICAiICovCisgIHU4IHBhZFs0NDhdOworICB1MTYgbWFnaWM7CQkJLyogYWE1NSAqLwogfTsKIAogCkBAIC03MSwzMSArNzUsMjkgQEAKIAogc3RydWN0IGhwZnNfc3VwZXJfYmxvY2sKIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogZjk5NSBlODQ5ICovCi0gIHVuc2lnbmVkIG1hZ2ljMTsJCQkvKiBmYTUzIGU5YzUsIG1vcmUgbWFnaWM/ICovCi0gIC8qdW5zaWduZWQgaHVoMjAyOyovCQkJLyogPz8gMjAyID0gTi4gb2YgQi4gaW4gMS4wMDM5MDYyNSBTLiovCi0gIGNoYXIgdmVyc2lvbjsJCQkJLyogdmVyc2lvbiBvZiBhIGZpbGVzeXN0ZW0gIHVzdWFsbHkgMiAqLwotICBjaGFyIGZ1bmN2ZXJzaW9uOwkJCS8qIGZ1bmN0aW9uYWwgdmVyc2lvbiAtIG9sZGVzdCB2ZXJzaW9uCisgIHUzMiBtYWdpYzsJCQkJLyogZjk5NSBlODQ5ICovCisgIHUzMiBtYWdpYzE7CQkJCS8qIGZhNTMgZTljNSwgbW9yZSBtYWdpYz8gKi8KKyAgdTggdmVyc2lvbjsJCQkJLyogdmVyc2lvbiBvZiBhIGZpbGVzeXN0ZW0gIHVzdWFsbHkgMiAqLworICB1OCBmdW5jdmVyc2lvbjsJCQkvKiBmdW5jdGlvbmFsIHZlcnNpb24gLSBvbGRlc3QgdmVyc2lvbgogICAJCQkJCSAgIG9mIGZpbGVzeXN0ZW0gdGhhdCBjYW4gdW5kZXJzdGFuZAogCQkJCQkgICB0aGlzIGRpc2sgKi8KLSAgdW5zaWduZWQgc2hvcnQgaW50IHplcm87CQkvKiAwICovCisgIHUxNiB6ZXJvOwkJCQkvKiAwICovCiAgIGZub2RlX3NlY25vIHJvb3Q7CQkJLyogZm5vZGUgb2Ygcm9vdCBkaXJlY3RvcnkgKi8KICAgc2Vjbm8gbl9zZWN0b3JzOwkJCS8qIHNpemUgb2YgZmlsZXN5c3RlbSAqLwotICB1bnNpZ25lZCBuX2JhZGJsb2NrczsJCQkvKiBudW1iZXIgb2YgYmFkIGJsb2NrcyAqLworICB1MzIgbl9iYWRibG9ja3M7CQkJLyogbnVtYmVyIG9mIGJhZCBibG9ja3MgKi8KICAgc2Vjbm8gYml0bWFwczsJCQkvKiBwb2ludGVycyB0byBmcmVlIHNwYWNlIGJpdCBtYXBzICovCi0gIHVuc2lnbmVkIHplcm8xOwkJCS8qIDAgKi8KKyAgdTMyIHplcm8xOwkJCQkvKiAwICovCiAgIHNlY25vIGJhZGJsb2NrczsJCQkvKiBiYWQgYmxvY2sgbGlzdCAqLwotICB1bnNpZ25lZCB6ZXJvMzsJCQkvKiAwICovCisgIHUzMiB6ZXJvMzsJCQkJLyogMCAqLwogICB0aW1lMzJfdCBsYXN0X2Noa2RzazsJCQkvKiBkYXRlIGxhc3QgY2hlY2tlZCwgMCBpZiBuZXZlciAqLwotICAvKnVuc2lnbmVkIHplcm80OyovCQkJLyogMCAqLwotICB0aW1lMzJfdCBsYXN0X29wdGltaXplOwkJCS8qIGRhdGUgbGFzdCBvcHRpbWl6ZWQsIDAgaWYgbmV2ZXIgKi8KKyAgdGltZTMyX3QgbGFzdF9vcHRpbWl6ZTsJCS8qIGRhdGUgbGFzdCBvcHRpbWl6ZWQsIDAgaWYgbmV2ZXIgKi8KICAgc2Vjbm8gbl9kaXJfYmFuZDsJCQkvKiBudW1iZXIgb2Ygc2VjdG9ycyBpbiBkaXIgYmFuZCAqLwogICBzZWNubyBkaXJfYmFuZF9zdGFydDsJCQkvKiBmaXJzdCBzZWN0b3IgaW4gZGlyIGJhbmQgKi8KICAgc2Vjbm8gZGlyX2JhbmRfZW5kOwkJCS8qIGxhc3Qgc2VjdG9yIGluIGRpciBiYW5kICovCiAgIHNlY25vIGRpcl9iYW5kX2JpdG1hcDsJCS8qIGZyZWUgc3BhY2UgbWFwLCAxIGRub2RlIHBlciBiaXQgKi8KLSAgY2hhciB2b2x1bWVfbmFtZVszMl07CQkJLyogbm90IHVzZWQgKi8KKyAgdTggdm9sdW1lX25hbWVbMzJdOwkJCS8qIG5vdCB1c2VkICovCiAgIHNlY25vIHVzZXJfaWRfdGFibGU7CQkJLyogOCBwcmVhbGxvY2F0ZWQgc2VjdG9ycyAtIHVzZXIgaWQgKi8KLSAgdW5zaWduZWQgemVybzZbMTAzXTsJCQkvKiAwICovCisgIHUzMiB6ZXJvNlsxMDNdOwkJCS8qIDAgKi8KIH07CiAKIApAQCAtMTA3LDQ0ICsxMDksNjUgQEAKIAogc3RydWN0IGhwZnNfc3BhcmVfYmxvY2sKIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogZjk5MSAxODQ5ICovCi0gIHVuc2lnbmVkIG1hZ2ljMTsJCQkvKiBmYTUyIDI5YzUsIG1vcmUgbWFnaWM/ICovCisgIHUzMiBtYWdpYzsJCQkJLyogZjk5MSAxODQ5ICovCisgIHUzMiBtYWdpYzE7CQkJCS8qIGZhNTIgMjljNSwgbW9yZSBtYWdpYz8gKi8KIAotICB1bnNpZ25lZCBkaXJ0eTogMTsJCQkvKiAwIGNsZWFuLCAxICJpbXByb3Blcmx5IHN0b3BwZWQiICovCi0gIC8qdW5zaWduZWQgZmxhZzEyMzQ6IDQ7Ki8JCS8qIHVua25vd24gZmxhZ3MgKi8KLSAgdW5zaWduZWQgc3BhcmVkaXJfdXNlZDogMTsJCS8qIHNwYXJlIGRpcmJsa3MgdXNlZCAqLwotICB1bnNpZ25lZCBob3RmaXhlc191c2VkOiAxOwkJLyogaG90Zml4ZXMgdXNlZCAqLwotICB1bnNpZ25lZCBiYWRfc2VjdG9yOiAxOwkJLyogYmFkIHNlY3RvciwgY29ycnVwdGVkIGRpc2sgKD8/PykgKi8KLSAgdW5zaWduZWQgYmFkX2JpdG1hcDogMTsJCS8qIGJhZCBiaXRtYXAgKi8KLSAgdW5zaWduZWQgZmFzdDogMTsJCQkvKiBwYXJ0aXRpb24gd2FzIGZhc3QgZm9ybWF0dGVkICovCi0gIHVuc2lnbmVkIG9sZF93cm90ZTogMTsJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKi8KLSAgdW5zaWduZWQgb2xkX3dyb3RlXzE6IDE7CQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICg/KSAqLwotICB1bnNpZ25lZCBpbnN0YWxsX2Rhc2RfbGltaXRzOiAxOwkvKiBIUEZTMzg2IGZsYWdzICovCi0gIHVuc2lnbmVkIHJlc3luY2hfZGFzZF9saW1pdHM6IDE7Ci0gIHVuc2lnbmVkIGRhc2RfbGltaXRzX29wZXJhdGlvbmFsOiAxOwotICB1bnNpZ25lZCBtdWx0aW1lZGlhX2FjdGl2ZTogMTsKLSAgdW5zaWduZWQgZGNlX2FjbHNfYWN0aXZlOiAxOwotICB1bnNpZ25lZCBkYXNkX2xpbWl0c19kaXJ0eTogMTsKLSAgdW5zaWduZWQgZmxhZzY3OiAyOwotICB1bnNpZ25lZCBjaGFyIG1tX2NvbnRsZ3VsdHk7Ci0gIHVuc2lnbmVkIGNoYXIgdW51c2VkOworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBkaXJ0eTogMTsJCQkJLyogMCBjbGVhbiwgMSAiaW1wcm9wZXJseSBzdG9wcGVkIiAqLworICB1OCBzcGFyZWRpcl91c2VkOiAxOwkJCS8qIHNwYXJlIGRpcmJsa3MgdXNlZCAqLworICB1OCBob3RmaXhlc191c2VkOiAxOwkJCS8qIGhvdGZpeGVzIHVzZWQgKi8KKyAgdTggYmFkX3NlY3RvcjogMTsJCQkvKiBiYWQgc2VjdG9yLCBjb3JydXB0ZWQgZGlzayAoPz8/KSAqLworICB1OCBiYWRfYml0bWFwOiAxOwkJCS8qIGJhZCBiaXRtYXAgKi8KKyAgdTggZmFzdDogMTsJCQkJLyogcGFydGl0aW9uIHdhcyBmYXN0IGZvcm1hdHRlZCAqLworICB1OCBvbGRfd3JvdGU6IDE7CQkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAqLworICB1OCBvbGRfd3JvdGVfMTogMTsJCQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICg/KSAqLworI2Vsc2UKKyAgdTggb2xkX3dyb3RlXzE6IDE7CQkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAoPykgKi8KKyAgdTggb2xkX3dyb3RlOiAxOwkJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKi8KKyAgdTggZmFzdDogMTsJCQkJLyogcGFydGl0aW9uIHdhcyBmYXN0IGZvcm1hdHRlZCAqLworICB1OCBiYWRfYml0bWFwOiAxOwkJCS8qIGJhZCBiaXRtYXAgKi8KKyAgdTggYmFkX3NlY3RvcjogMTsJCQkvKiBiYWQgc2VjdG9yLCBjb3JydXB0ZWQgZGlzayAoPz8/KSAqLworICB1OCBob3RmaXhlc191c2VkOiAxOwkJCS8qIGhvdGZpeGVzIHVzZWQgKi8KKyAgdTggc3BhcmVkaXJfdXNlZDogMTsJCQkvKiBzcGFyZSBkaXJibGtzIHVzZWQgKi8KKyAgdTggZGlydHk6IDE7CQkJCS8qIDAgY2xlYW4sIDEgImltcHJvcGVybHkgc3RvcHBlZCIgKi8KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGluc3RhbGxfZGFzZF9saW1pdHM6IDE7CQkvKiBIUEZTMzg2IGZsYWdzICovCisgIHU4IHJlc3luY2hfZGFzZF9saW1pdHM6IDE7CisgIHU4IGRhc2RfbGltaXRzX29wZXJhdGlvbmFsOiAxOworICB1OCBtdWx0aW1lZGlhX2FjdGl2ZTogMTsKKyAgdTggZGNlX2FjbHNfYWN0aXZlOiAxOworICB1OCBkYXNkX2xpbWl0c19kaXJ0eTogMTsKKyAgdTggZmxhZzY3OiAyOworI2Vsc2UKKyAgdTggZmxhZzY3OiAyOworICB1OCBkYXNkX2xpbWl0c19kaXJ0eTogMTsKKyAgdTggZGNlX2FjbHNfYWN0aXZlOiAxOworICB1OCBtdWx0aW1lZGlhX2FjdGl2ZTogMTsKKyAgdTggZGFzZF9saW1pdHNfb3BlcmF0aW9uYWw6IDE7CisgIHU4IHJlc3luY2hfZGFzZF9saW1pdHM6IDE7CisgIHU4IGluc3RhbGxfZGFzZF9saW1pdHM6IDE7CQkvKiBIUEZTMzg2IGZsYWdzICovCisjZW5kaWYKKworICB1OCBtbV9jb250bGd1bHR5OworICB1OCB1bnVzZWQ7CiAKICAgc2Vjbm8gaG90Zml4X21hcDsJCQkvKiBpbmZvIGFib3V0IHJlbWFwcGVkIGJhZCBzZWN0b3JzICovCi0gIHVuc2lnbmVkIG5fc3BhcmVzX3VzZWQ7CQkvKiBudW1iZXIgb2YgaG90Zml4ZXMgKi8KLSAgdW5zaWduZWQgbl9zcGFyZXM7CQkJLyogbnVtYmVyIG9mIHNwYXJlcyBpbiBob3RmaXggbWFwICovCi0gIHVuc2lnbmVkIG5fZG5vZGVfc3BhcmVzX2ZyZWU7CQkvKiBzcGFyZSBkbm9kZXMgdW51c2VkICovCi0gIHVuc2lnbmVkIG5fZG5vZGVfc3BhcmVzOwkJLyogbGVuZ3RoIG9mIHNwYXJlX2Rub2Rlc1tdIGxpc3QsCisgIHUzMiBuX3NwYXJlc191c2VkOwkJCS8qIG51bWJlciBvZiBob3RmaXhlcyAqLworICB1MzIgbl9zcGFyZXM7CQkJCS8qIG51bWJlciBvZiBzcGFyZXMgaW4gaG90Zml4IG1hcCAqLworICB1MzIgbl9kbm9kZV9zcGFyZXNfZnJlZTsJCS8qIHNwYXJlIGRub2RlcyB1bnVzZWQgKi8KKyAgdTMyIG5fZG5vZGVfc3BhcmVzOwkJCS8qIGxlbmd0aCBvZiBzcGFyZV9kbm9kZXNbXSBsaXN0LAogCQkJCQkgICBmb2xsb3dzIGluIHRoaXMgYmxvY2sqLwogICBzZWNubyBjb2RlX3BhZ2VfZGlyOwkJCS8qIGNvZGUgcGFnZSBkaXJlY3RvcnkgYmxvY2sgKi8KLSAgdW5zaWduZWQgbl9jb2RlX3BhZ2VzOwkJLyogbnVtYmVyIG9mIGNvZGUgcGFnZXMgKi8KLSAgLyp1bnNpZ25lZCBsYXJnZV9udW1iZXJzWzJdOyovCS8qID8/ICovCi0gIHVuc2lnbmVkIHN1cGVyX2NyYzsJCQkvKiBvbiBIUEZTMzg2IGFuZCBMQU4gU2VydmVyIHRoaXMgaXMKKyAgdTMyIG5fY29kZV9wYWdlczsJCQkvKiBudW1iZXIgb2YgY29kZSBwYWdlcyAqLworICB1MzIgc3VwZXJfY3JjOwkJCS8qIG9uIEhQRlMzODYgYW5kIExBTiBTZXJ2ZXIgdGhpcyBpcwogICAJCQkJCSAgIGNoZWNrc3VtIG9mIHN1cGVyYmxvY2ssIG9uIG5vcm1hbAogCQkJCQkgICBPUy8yIHVudXNlZCAqLwotICB1bnNpZ25lZCBzcGFyZV9jcmM7CQkJLyogb24gSFBGUzM4NiBjaGVja3N1bSBvZiBzcGFyZWJsb2NrICovCi0gIHVuc2lnbmVkIHplcm8xWzE1XTsJCQkvKiB1bnVzZWQgKi8KKyAgdTMyIHNwYXJlX2NyYzsJCQkvKiBvbiBIUEZTMzg2IGNoZWNrc3VtIG9mIHNwYXJlYmxvY2sgKi8KKyAgdTMyIHplcm8xWzE1XTsJCQkvKiB1bnVzZWQgKi8KICAgZG5vZGVfc2Vjbm8gc3BhcmVfZG5vZGVzWzEwMF07CS8qIGVtZXJnZW5jeSBmcmVlIGRub2RlIGxpc3QgKi8KLSAgdW5zaWduZWQgemVybzJbMV07CQkJLyogcm9vbSBmb3IgbW9yZT8gKi8KKyAgdTMyIHplcm8yWzFdOwkJCQkvKiByb29tIGZvciBtb3JlPyAqLwogfTsKIAogLyogVGhlIGJhZCBibG9jayBsaXN0IGlzIDQgc2VjdG9ycyBsb25nLiAgVGhlIGZpcnN0IHdvcmQgbXVzdCBiZSB6ZXJvLApAQCAtMTc5LDE4ICsyMDIsMTggQEAKIAogc3RydWN0IGNvZGVfcGFnZV9kaXJlY3RvcnkKIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogNDk0NSAyMWY3ICovCi0gIHVuc2lnbmVkIG5fY29kZV9wYWdlczsJCS8qIG51bWJlciBvZiBwb2ludGVycyBmb2xsb3dpbmcgKi8KLSAgdW5zaWduZWQgemVybzFbMl07CisgIHUzMiBtYWdpYzsJCQkJLyogNDk0NSAyMWY3ICovCisgIHUzMiBuX2NvZGVfcGFnZXM7CQkJLyogbnVtYmVyIG9mIHBvaW50ZXJzIGZvbGxvd2luZyAqLworICB1MzIgemVybzFbMl07CiAgIHN0cnVjdCB7Ci0gICAgdW5zaWduZWQgc2hvcnQgaXg7CQkJLyogaW5kZXggKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBjb2RlX3BhZ2VfbnVtYmVyOwkvKiBjb2RlIHBhZ2UgbnVtYmVyICovCi0gICAgdW5zaWduZWQgYm91bmRzOwkJCS8qIG1hdGNoZXMgY29ycmVzcG9uZGluZyB3b3JkCisgICAgdTE2IGl4OwkJCQkvKiBpbmRleCAqLworICAgIHUxNiBjb2RlX3BhZ2VfbnVtYmVyOwkJLyogY29kZSBwYWdlIG51bWJlciAqLworICAgIHUzMiBib3VuZHM7CQkJCS8qIG1hdGNoZXMgY29ycmVzcG9uZGluZyB3b3JkCiAJCQkJCSAgIGluIGRhdGEgYmxvY2sgKi8KICAgICBzZWNubyBjb2RlX3BhZ2VfZGF0YTsJCS8qIHNlY3RvciBudW1iZXIgb2YgYSBjb2RlX3BhZ2VfZGF0YQogCQkJCQkgICBjb250YWluaW5nIGMucC4gYXJyYXkgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBpbmRleDsJCS8qIGluZGV4IGluIGMucC4gYXJyYXkgaW4gdGhhdCBzZWN0b3IqLwotICAgIHVuc2lnbmVkIHNob3J0IHVua25vd247CQkvKiBzb21lIHVua25vd24gdmFsdWU7IHVzdWFsbHkgMDsKKyAgICB1MTYgaW5kZXg7CQkJCS8qIGluZGV4IGluIGMucC4gYXJyYXkgaW4gdGhhdCBzZWN0b3IqLworICAgIHUxNiB1bmtub3duOwkJCS8qIHNvbWUgdW5rbm93biB2YWx1ZTsgdXN1YWxseSAwOwogICAgIAkJCQkJICAgMiBpbiBKYXBhbmVzZSB2ZXJzaW9uICovCiAgIH0gYXJyYXlbMzFdOwkJCQkvKiB1bmtub3duIGxlbmd0aCAqLwogfTsKQEAgLTIwMSwyMSArMjI0LDIxIEBACiAKIHN0cnVjdCBjb2RlX3BhZ2VfZGF0YQogewotICB1bnNpZ25lZCBtYWdpYzsJCQkvKiA4OTQ1IDIxZjcgKi8KLSAgdW5zaWduZWQgbl91c2VkOwkJCS8qICMgZWxlbWVudHMgdXNlZCBpbiBjX3BfZGF0YVtdICovCi0gIHVuc2lnbmVkIGJvdW5kc1szXTsJCQkvKiBsb29rcyBhIGJpdCBsaWtlCisgIHUzMiBtYWdpYzsJCQkJLyogODk0NSAyMWY3ICovCisgIHUzMiBuX3VzZWQ7CQkJCS8qICMgZWxlbWVudHMgdXNlZCBpbiBjX3BfZGF0YVtdICovCisgIHUzMiBib3VuZHNbM107CQkJLyogbG9va3MgYSBiaXQgbGlrZQogCQkJCQkgICAgIChiZWcxLGVuZDEpLCAoYmVnMixlbmQyKQogCQkJCQkgICBvbmUgYnl0ZSBlYWNoICovCi0gIHVuc2lnbmVkIHNob3J0IG9mZnNbM107CQkvKiBvZmZzZXRzIGZyb20gc3RhcnQgb2Ygc2VjdG9yCisgIHUxNiBvZmZzWzNdOwkJCQkvKiBvZmZzZXRzIGZyb20gc3RhcnQgb2Ygc2VjdG9yCiAJCQkJCSAgIHRvIHN0YXJ0IG9mIGNfcF9kYXRhW2l4XSAqLwogICBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIHNob3J0IGl4OwkJCS8qIGluZGV4ICovCi0gICAgdW5zaWduZWQgc2hvcnQgY29kZV9wYWdlX251bWJlcjsJLyogY29kZSBwYWdlIG51bWJlciAqLwotICAgIHVuc2lnbmVkIHNob3J0IHVua25vd247CQkvKiB0aGUgc2FtZSBhcyBpbiBjcCBkaXJlY3RvcnkgKi8KLSAgICB1bnNpZ25lZCBjaGFyIG1hcFsxMjhdOwkJLyogdXBjYXNlIHRhYmxlIGZvciBjaGFycyA4MC4uZmYgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCB6ZXJvMjsKKyAgICB1MTYgaXg7CQkJCS8qIGluZGV4ICovCisgICAgdTE2IGNvZGVfcGFnZV9udW1iZXI7CQkvKiBjb2RlIHBhZ2UgbnVtYmVyICovCisgICAgdTE2IHVua25vd247CQkJLyogdGhlIHNhbWUgYXMgaW4gY3AgZGlyZWN0b3J5ICovCisgICAgdTggbWFwWzEyOF07CQkJLyogdXBjYXNlIHRhYmxlIGZvciBjaGFycyA4MC4uZmYgKi8KKyAgICB1MTYgemVybzI7CiAgIH0gY29kZV9wYWdlWzNdOwotICB1bnNpZ25lZCBjaGFyIGluY29nbml0YVs3OF07CisgIHU4IGluY29nbml0YVs3OF07CiB9OwogCiAKQEAgLTI1NSw1MCArMjc4LDg0IEBACiAjZGVmaW5lIEROT0RFX01BR0lDICAgMHg3N2U0MGFhZQogCiBzdHJ1Y3QgZG5vZGUgewotICB1bnNpZ25lZCBtYWdpYzsJCQkvKiA3N2U0IDBhYWUgKi8KLSAgdW5zaWduZWQgZmlyc3RfZnJlZTsJCQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBkbm9kZSB0bworICB1MzIgbWFnaWM7CQkJCS8qIDc3ZTQgMGFhZSAqLworICB1MzIgZmlyc3RfZnJlZTsJCQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBkbm9kZSB0bwogCQkJCQkgICBmaXJzdCBmcmVlIGRpciBlbnRyeSAqLwotICB1bnNpZ25lZCByb290X2Rub2RlOjE7CQkvKiBJcyBpdCByb290IGRub2RlPyAqLwotICB1bnNpZ25lZCBpbmNyZW1lbnRfbWU6MzE7CQkvKiBzb21lIGtpbmQgb2YgYWN0aXZpdHkgY291bnRlcj8KLQkJCQkJICAgTmVpdGhlciBIUEZTLklGUyBub3IgQ0hLRFNLIGNhcmVzCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IHJvb3RfZG5vZGU6IDE7CQkJLyogSXMgaXQgcm9vdCBkbm9kZT8gKi8KKyAgdTggaW5jcmVtZW50X21lOiA3OwkJCS8qIHNvbWUga2luZCBvZiBhY3Rpdml0eSBjb3VudGVyPyAqLworCQkJCQkvKiBOZWl0aGVyIEhQRlMuSUZTIG5vciBDSEtEU0sgY2FyZXMKIAkJCQkJICAgaWYgeW91IGNoYW5nZSB0aGlzIHdvcmQgKi8KKyNlbHNlCisgIHU4IGluY3JlbWVudF9tZTogNzsJCQkvKiBzb21lIGtpbmQgb2YgYWN0aXZpdHkgY291bnRlcj8gKi8KKwkJCQkJLyogTmVpdGhlciBIUEZTLklGUyBub3IgQ0hLRFNLIGNhcmVzCisJCQkJCSAgIGlmIHlvdSBjaGFuZ2UgdGhpcyB3b3JkICovCisgIHU4IHJvb3RfZG5vZGU6IDE7CQkJLyogSXMgaXQgcm9vdCBkbm9kZT8gKi8KKyNlbmRpZgorICB1OCBpbmNyZW1lbnRfbWUyWzNdOwogICBzZWNubyB1cDsJCQkJLyogKHJvb3QgZG5vZGUpIGRpcmVjdG9yeSdzIGZub2RlCiAJCQkJCSAgIChub25yb290KSBwYXJlbnQgZG5vZGUgKi8KICAgZG5vZGVfc2Vjbm8gc2VsZjsJCQkvKiBwb2ludGVyIHRvIHRoaXMgZG5vZGUgKi8KLSAgdW5zaWduZWQgY2hhciBkaXJlbnRbMjAyOF07CQkvKiBvbmUgb3IgbW9yZSBkaXJlbnRzICovCisgIHU4IGRpcmVudFsyMDI4XTsJCQkvKiBvbmUgb3IgbW9yZSBkaXJlbnRzICovCiB9OwogCiBzdHJ1Y3QgaHBmc19kaXJlbnQgewotICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CQkvKiBvZmZzZXQgdG8gbmV4dCBkaXJlbnQgKi8KLSAgdW5zaWduZWQgZmlyc3Q6IDE7CQkJLyogc2V0IG9uIHBob255IF5BXkEgKCIuIikgZW50cnkgKi8KLSAgdW5zaWduZWQgaGFzX2FjbDogMTsKLSAgdW5zaWduZWQgZG93bjogMTsJCQkvKiBkb3duIHBvaW50ZXIgcHJlc2VudCAoYWZ0ZXIgbmFtZSkgKi8KLSAgdW5zaWduZWQgbGFzdDogMTsJCQkvKiBzZXQgb24gcGhvbnkgXDM3NyBlbnRyeSAqLwotICB1bnNpZ25lZCBoYXNfZWE6IDE7CQkJLyogZW50cnkgaGFzIEVBICovCi0gIHVuc2lnbmVkIGhhc194dGRfcGVybTogMTsJCS8qIGhhcyBleHRlbmRlZCBwZXJtIGxpc3QgKD8/PykgKi8KLSAgdW5zaWduZWQgaGFzX2V4cGxpY2l0X2FjbDogMTsKLSAgdW5zaWduZWQgaGFzX25lZWRlYTogMTsJCS8qID8/IHNvbWUgRUEgaGFzIE5FRURFQSBzZXQKKyAgdTE2IGxlbmd0aDsJCQkJLyogb2Zmc2V0IHRvIG5leHQgZGlyZW50ICovCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggZmlyc3Q6IDE7CQkJCS8qIHNldCBvbiBwaG9ueSBeQV5BICgiLiIpIGVudHJ5ICovCisgIHU4IGhhc19hY2w6IDE7CisgIHU4IGRvd246IDE7CQkJCS8qIGRvd24gcG9pbnRlciBwcmVzZW50IChhZnRlciBuYW1lKSAqLworICB1OCBsYXN0OiAxOwkJCQkvKiBzZXQgb24gcGhvbnkgXDM3NyBlbnRyeSAqLworICB1OCBoYXNfZWE6IDE7CQkJCS8qIGVudHJ5IGhhcyBFQSAqLworICB1OCBoYXNfeHRkX3Blcm06IDE7CQkJLyogaGFzIGV4dGVuZGVkIHBlcm0gbGlzdCAoPz8/KSAqLworICB1OCBoYXNfZXhwbGljaXRfYWNsOiAxOworICB1OCBoYXNfbmVlZGVhOiAxOwkJCS8qID8/IHNvbWUgRUEgaGFzIE5FRURFQSBzZXQKIAkJCQkJICAgSSBoYXZlIG5vIGlkZWEgd2h5IHRoaXMgaXMKIAkJCQkJICAgaW50ZXJlc3RpbmcgaW4gYSBkaXIgZW50cnkgKi8KLSAgdW5zaWduZWQgcmVhZF9vbmx5OiAxOwkJLyogZG9zIGF0dHJpYiAqLwotICB1bnNpZ25lZCBoaWRkZW46IDE7CQkJLyogZG9zIGF0dHJpYiAqLwotICB1bnNpZ25lZCBzeXN0ZW06IDE7CQkJLyogZG9zIGF0dHJpYiAqLwotICB1bnNpZ25lZCBmbGFnMTE6IDE7CQkJLyogd291bGQgYmUgdm9sdW1lIGxhYmVsIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgZGlyZWN0b3J5OiAxOwkJLyogZG9zIGF0dHJpYiAqLwotICB1bnNpZ25lZCBhcmNoaXZlOiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgbm90Xzh4MzogMTsJCQkvKiBuYW1lIGlzIG5vdCA4LjMgKi8KLSAgdW5zaWduZWQgZmxhZzE1OiAxOworI2Vsc2UKKyAgdTggaGFzX25lZWRlYTogMTsJCQkvKiA/PyBzb21lIEVBIGhhcyBORUVERUEgc2V0CisJCQkJCSAgIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGlzCisJCQkJCSAgIGludGVyZXN0aW5nIGluIGEgZGlyIGVudHJ5ICovCisgIHU4IGhhc19leHBsaWNpdF9hY2w6IDE7CisgIHU4IGhhc194dGRfcGVybTogMTsJCQkvKiBoYXMgZXh0ZW5kZWQgcGVybSBsaXN0ICg/Pz8pICovCisgIHU4IGhhc19lYTogMTsJCQkJLyogZW50cnkgaGFzIEVBICovCisgIHU4IGxhc3Q6IDE7CQkJCS8qIHNldCBvbiBwaG9ueSBcMzc3IGVudHJ5ICovCisgIHU4IGRvd246IDE7CQkJCS8qIGRvd24gcG9pbnRlciBwcmVzZW50IChhZnRlciBuYW1lKSAqLworICB1OCBoYXNfYWNsOiAxOworICB1OCBmaXJzdDogMTsJCQkJLyogc2V0IG9uIHBob255IF5BXkEgKCIuIikgZW50cnkgKi8KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IHJlYWRfb25seTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGhpZGRlbjogMTsJCQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBzeXN0ZW06IDE7CQkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggZmxhZzExOiAxOwkJCQkvKiB3b3VsZCBiZSB2b2x1bWUgbGFiZWwgZG9zIGF0dHJpYiAqLworICB1OCBkaXJlY3Rvcnk6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBhcmNoaXZlOiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggbm90Xzh4MzogMTsJCQkvKiBuYW1lIGlzIG5vdCA4LjMgKi8KKyAgdTggZmxhZzE1OiAxOworI2Vsc2UKKyAgdTggZmxhZzE1OiAxOworICB1OCBub3RfOHgzOiAxOwkJCS8qIG5hbWUgaXMgbm90IDguMyAqLworICB1OCBhcmNoaXZlOiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggZGlyZWN0b3J5OiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggZmxhZzExOiAxOwkJCQkvKiB3b3VsZCBiZSB2b2x1bWUgbGFiZWwgZG9zIGF0dHJpYiAqLworICB1OCBzeXN0ZW06IDE7CQkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggaGlkZGVuOiAxOwkJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IHJlYWRfb25seTogMTsJCQkvKiBkb3MgYXR0cmliICovCisjZW5kaWYKKwogICBmbm9kZV9zZWNubyBmbm9kZTsJCQkvKiBmbm9kZSBnaXZpbmcgYWxsb2NhdGlvbiBpbmZvICovCiAgIHRpbWUzMl90IHdyaXRlX2RhdGU7CQkJLyogbXRpbWUgKi8KLSAgdW5zaWduZWQgZmlsZV9zaXplOwkJCS8qIGZpbGUgbGVuZ3RoLCBieXRlcyAqLworICB1MzIgZmlsZV9zaXplOwkJCS8qIGZpbGUgbGVuZ3RoLCBieXRlcyAqLwogICB0aW1lMzJfdCByZWFkX2RhdGU7CQkJLyogYXRpbWUgKi8KICAgdGltZTMyX3QgY3JlYXRpb25fZGF0ZTsJCQkvKiBjdGltZSAqLwotICB1bnNpZ25lZCBlYV9zaXplOwkJCS8qIHRvdGFsIEVBIGxlbmd0aCwgYnl0ZXMgKi8KLSAgdW5zaWduZWQgY2hhciBub19vZl9hY2xzIDogMzsJCS8qIG51bWJlciBvZiBBQ0wncyAqLwotICB1bnNpZ25lZCBjaGFyIHJlc2VydmVyIDogNTsKLSAgdW5zaWduZWQgY2hhciBpeDsJCQkvKiBjb2RlIHBhZ2UgaW5kZXggKG9mIGZpbGVuYW1lKSwgc2VlCisgIHUzMiBlYV9zaXplOwkJCQkvKiB0b3RhbCBFQSBsZW5ndGgsIGJ5dGVzICovCisgIHU4IG5vX29mX2FjbHM7CQkJLyogbnVtYmVyIG9mIEFDTCdzIChsb3cgMyBiaXRzKSAqLworICB1OCBpeDsJCQkJLyogY29kZSBwYWdlIGluZGV4IChvZiBmaWxlbmFtZSksIHNlZQogCQkJCQkgICBzdHJ1Y3QgY29kZV9wYWdlX2RhdGEgKi8KLSAgdW5zaWduZWQgY2hhciBuYW1lbGVuLCBuYW1lWzFdOwkvKiBmaWxlIG5hbWUgKi8KKyAgdTggbmFtZWxlbiwgbmFtZVsxXTsJCQkvKiBmaWxlIG5hbWUgKi8KICAgLyogZG5vZGVfc2Vjbm8gZG93bjsJICBidHJlZSBkb3duIHBvaW50ZXIsIGlmIHByZXNlbnQsCiAgICAgIAkJCSAgZm9sbG93cyBuYW1lIG9uIG5leHQgd29yZCBib3VuZGFyeSwgb3IgbWF5YmUgaXQKIAkJCSAgcHJlY2VkZXMgbmV4dCBkaXJlbnQsIHdoaWNoIGlzIG9uIGEgd29yZCBib3VuZGFyeS4gKi8KQEAgLTMxOCwzOCArMzc1LDUwIEBACiAKIHN0cnVjdCBicGx1c19sZWFmX25vZGUKIHsKLSAgdW5zaWduZWQgZmlsZV9zZWNubzsJCQkvKiBmaXJzdCBmaWxlIHNlY3RvciBpbiBleHRlbnQgKi8KLSAgdW5zaWduZWQgbGVuZ3RoOwkJCS8qIGxlbmd0aCwgc2VjdG9ycyAqLworICB1MzIgZmlsZV9zZWNubzsJCQkvKiBmaXJzdCBmaWxlIHNlY3RvciBpbiBleHRlbnQgKi8KKyAgdTMyIGxlbmd0aDsJCQkJLyogbGVuZ3RoLCBzZWN0b3JzICovCiAgIHNlY25vIGRpc2tfc2Vjbm87CQkJLyogZmlyc3QgY29ycmVzcG9uZGluZyBkaXNrIHNlY3RvciAqLwogfTsKIAogc3RydWN0IGJwbHVzX2ludGVybmFsX25vZGUKIHsKLSAgdW5zaWduZWQgZmlsZV9zZWNubzsJCQkvKiBzdWJ0cmVlIG1hcHMgc2VjdG9ycyA8IHRoaXMgICovCisgIHUzMiBmaWxlX3NlY25vOwkJCS8qIHN1YnRyZWUgbWFwcyBzZWN0b3JzIDwgdGhpcyAgKi8KICAgYW5vZGVfc2Vjbm8gZG93bjsJCQkvKiBwb2ludGVyIHRvIHN1YnRyZWUgKi8KIH07CiAKIHN0cnVjdCBicGx1c19oZWFkZXIKIHsKLSAgdW5zaWduZWQgaGJmZjogMTsJLyogaGlnaCBiaXQgb2YgZmlyc3QgZnJlZSBlbnRyeSBvZmZzZXQgKi8KLSAgdW5zaWduZWQgZmxhZzE6IDE7Ci0gIHVuc2lnbmVkIGZsYWcyOiAxOwotICB1bnNpZ25lZCBmbGFnMzogMTsKLSAgdW5zaWduZWQgZmxhZzQ6IDE7Ci0gIHVuc2lnbmVkIGZub2RlX3BhcmVudDogMTsJCS8qID8gd2UncmUgcG9pbnRlZCB0byBieSBhbiBmbm9kZSwKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggaGJmZjogMTsJCQkvKiBoaWdoIGJpdCBvZiBmaXJzdCBmcmVlIGVudHJ5IG9mZnNldCAqLworICB1OCBmbGFnMTIzNDogNDsKKyAgdTggZm5vZGVfcGFyZW50OiAxOwkJCS8qID8gd2UncmUgcG9pbnRlZCB0byBieSBhbiBmbm9kZSwKIAkJCQkJICAgdGhlIGRhdGEgYnRyZWUgb3Igc29tZSBlYSBvciB0aGUKIAkJCQkJICAgbWFpbiBlYSBib290YWdlIHBvaW50ZXIgZWFfc2Vjbm8gKi8KIAkJCQkJLyogYWxzbyBjYW4gZ2V0IHNldCBpbiBmbm9kZXMsIHdoaWNoCiAJCQkJCSAgIG1heSBiZSBhIGNoa2RzayBnbGl0Y2ggb3IgbWF5IG1lYW4KIAkJCQkJICAgdGhpcyBiaXQgaXMgaXJyZWxldmFudCBpbiBmbm9kZXMsCiAJCQkJCSAgIG9yIHRoaXMgaW50ZXJwcmV0YXRpb24gaXMgYWxsIHdldCAqLwotICB1bnNpZ25lZCBiaW5hcnlfc2VhcmNoOiAxOwkJLyogc3VnZ2VzdCBiaW5hcnkgc2VhcmNoICh1bnVzZWQpICovCi0gIHVuc2lnbmVkIGludGVybmFsOiAxOwkJCS8qIDEgLT4gKGludGVybmFsKSB0cmVlIG9mIGFub2RlcworICB1OCBiaW5hcnlfc2VhcmNoOiAxOwkJCS8qIHN1Z2dlc3QgYmluYXJ5IHNlYXJjaCAodW51c2VkKSAqLworICB1OCBpbnRlcm5hbDogMTsJCQkvKiAxIC0+IChpbnRlcm5hbCkgdHJlZSBvZiBhbm9kZXMKIAkJCQkJICAgMCAtPiAobGVhZikgbGlzdCBvZiBleHRlbnRzICovCi0gIHVuc2lnbmVkIGNoYXIgZmlsbFszXTsKLSAgdW5zaWduZWQgY2hhciBuX2ZyZWVfbm9kZXM7CQkvKiBmcmVlIG5vZGVzIGluIGZvbGxvd2luZyBhcnJheSAqLwotICB1bnNpZ25lZCBjaGFyIG5fdXNlZF9ub2RlczsJCS8qIHVzZWQgbm9kZXMgaW4gZm9sbG93aW5nIGFycmF5ICovCi0gIHVuc2lnbmVkIHNob3J0IGZpcnN0X2ZyZWU7CQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBoZWFkZXIgdG8KKyNlbHNlCisgIHU4IGludGVybmFsOiAxOwkJCS8qIDEgLT4gKGludGVybmFsKSB0cmVlIG9mIGFub2RlcworCQkJCQkgICAwIC0+IChsZWFmKSBsaXN0IG9mIGV4dGVudHMgKi8KKyAgdTggYmluYXJ5X3NlYXJjaDogMTsJCQkvKiBzdWdnZXN0IGJpbmFyeSBzZWFyY2ggKHVudXNlZCkgKi8KKyAgdTggZm5vZGVfcGFyZW50OiAxOwkJCS8qID8gd2UncmUgcG9pbnRlZCB0byBieSBhbiBmbm9kZSwKKwkJCQkJICAgdGhlIGRhdGEgYnRyZWUgb3Igc29tZSBlYSBvciB0aGUKKwkJCQkJICAgbWFpbiBlYSBib290YWdlIHBvaW50ZXIgZWFfc2Vjbm8gKi8KKwkJCQkJLyogYWxzbyBjYW4gZ2V0IHNldCBpbiBmbm9kZXMsIHdoaWNoCisJCQkJCSAgIG1heSBiZSBhIGNoa2RzayBnbGl0Y2ggb3IgbWF5IG1lYW4KKwkJCQkJICAgdGhpcyBiaXQgaXMgaXJyZWxldmFudCBpbiBmbm9kZXMsCisJCQkJCSAgIG9yIHRoaXMgaW50ZXJwcmV0YXRpb24gaXMgYWxsIHdldCAqLworICB1OCBmbGFnMTIzNDogNDsKKyAgdTggaGJmZjogMTsJCQkvKiBoaWdoIGJpdCBvZiBmaXJzdCBmcmVlIGVudHJ5IG9mZnNldCAqLworI2VuZGlmCisgIHU4IGZpbGxbM107CisgIHU4IG5fZnJlZV9ub2RlczsJCQkvKiBmcmVlIG5vZGVzIGluIGZvbGxvd2luZyBhcnJheSAqLworICB1OCBuX3VzZWRfbm9kZXM7CQkJLyogdXNlZCBub2RlcyBpbiBmb2xsb3dpbmcgYXJyYXkgKi8KKyAgdTE2IGZpcnN0X2ZyZWU7CQkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgaGVhZGVyIHRvCiAJCQkJCSAgIGZpcnN0IGZyZWUgbm9kZSBpbiBhcnJheSAqLwogICB1bmlvbiB7CiAgICAgc3RydWN0IGJwbHVzX2ludGVybmFsX25vZGUgaW50ZXJuYWxbMF07IC8qIChpbnRlcm5hbCkgMi13b3JkIGVudHJpZXMgZ2l2aW5nCkBAIC0zNjksMzcgKzQzOCwzOCBAQAogCiBzdHJ1Y3QgZm5vZGUKIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogZjdlNCAwYWFlICovCi0gIHVuc2lnbmVkIHplcm8xWzJdOwkJCS8qIHJlYWQgaGlzdG9yeSAqLwotICB1bnNpZ25lZCBjaGFyIGxlbiwgbmFtZVsxNV07CQkvKiB0cnVlIGxlbmd0aCwgdHJ1bmNhdGVkIG5hbWUgKi8KKyAgdTMyIG1hZ2ljOwkJCQkvKiBmN2U0IDBhYWUgKi8KKyAgdTMyIHplcm8xWzJdOwkJCQkvKiByZWFkIGhpc3RvcnkgKi8KKyAgdTggbGVuLCBuYW1lWzE1XTsJCQkvKiB0cnVlIGxlbmd0aCwgdHJ1bmNhdGVkIG5hbWUgKi8KICAgZm5vZGVfc2Vjbm8gdXA7CQkJLyogcG9pbnRlciB0byBmaWxlJ3MgZGlyZWN0b3J5IGZub2RlICovCi0gIC8qdW5zaWduZWQgemVybzJbM107Ki8KICAgc2Vjbm8gYWNsX3NpemVfbDsKICAgc2Vjbm8gYWNsX3NlY25vOwotICB1bnNpZ25lZCBzaG9ydCBhY2xfc2l6ZV9zOwotICBjaGFyIGFjbF9hbm9kZTsKLSAgY2hhciB6ZXJvMjsJCQkJLyogaGlzdG9yeSBiaXQgY291bnQgKi8KLSAgdW5zaWduZWQgZWFfc2l6ZV9sOwkJCS8qIGxlbmd0aCBvZiBkaXNrLXJlc2lkZW50IGVhJ3MgKi8KKyAgdTE2IGFjbF9zaXplX3M7CisgIHU4IGFjbF9hbm9kZTsKKyAgdTggemVybzI7CQkJCS8qIGhpc3RvcnkgYml0IGNvdW50ICovCisgIHUzMiBlYV9zaXplX2w7CQkJLyogbGVuZ3RoIG9mIGRpc2stcmVzaWRlbnQgZWEncyAqLwogICBzZWNubyBlYV9zZWNubzsJCQkvKiBmaXJzdCBzZWN0b3Igb2YgZGlzay1yZXNpZGVudCBlYSdzKi8KLSAgdW5zaWduZWQgc2hvcnQgZWFfc2l6ZV9zOwkJLyogbGVuZ3RoIG9mIGZub2RlLXJlc2lkZW50IGVhJ3MgKi8KKyAgdTE2IGVhX3NpemVfczsJCQkvKiBsZW5ndGggb2YgZm5vZGUtcmVzaWRlbnQgZWEncyAqLwogCi0gIHVuc2lnbmVkIGZsYWcwOiAxOwotICB1bnNpZ25lZCBlYV9hbm9kZTogMTsJCQkvKiAxIC0+IGVhX3NlY25vIGlzIGFuIGFub2RlICovCi0gIHVuc2lnbmVkIGZsYWcyOiAxOwotICB1bnNpZ25lZCBmbGFnMzogMTsKLSAgdW5zaWduZWQgZmxhZzQ6IDE7Ci0gIHVuc2lnbmVkIGZsYWc1OiAxOwotICB1bnNpZ25lZCBmbGFnNjogMTsKLSAgdW5zaWduZWQgZmxhZzc6IDE7Ci0gIHVuc2lnbmVkIGRpcmZsYWc6IDE7CQkJLyogMSAtPiBkaXJlY3RvcnkuICBmaXJzdCAmIG9ubHkgZXh0ZW50CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGZsYWcwOiAxOworICB1OCBlYV9hbm9kZTogMTsJCQkvKiAxIC0+IGVhX3NlY25vIGlzIGFuIGFub2RlICovCisgIHU4IGZsYWcyMzQ1Njc6IDY7CisjZWxzZQorICB1OCBmbGFnMjM0NTY3OiA2OworICB1OCBlYV9hbm9kZTogMTsJCQkvKiAxIC0+IGVhX3NlY25vIGlzIGFuIGFub2RlICovCisgIHU4IGZsYWcwOiAxOworI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggZGlyZmxhZzogMTsJCQkvKiAxIC0+IGRpcmVjdG9yeS4gIGZpcnN0ICYgb25seSBleHRlbnQKIAkJCQkJICAgcG9pbnRzIHRvIGRub2RlLiAqLwotICB1bnNpZ25lZCBmbGFnOTogMTsKLSAgdW5zaWduZWQgZmxhZzEwOiAxOwotICB1bnNpZ25lZCBmbGFnMTE6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxMjogMTsKLSAgdW5zaWduZWQgZmxhZzEzOiAxOwotICB1bnNpZ25lZCBmbGFnMTQ6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxNTogMTsKKyAgdTggZmxhZzkwMTIzNDU6IDc7CisjZWxzZQorICB1OCBmbGFnOTAxMjM0NTogNzsKKyAgdTggZGlyZmxhZzogMTsJCQkvKiAxIC0+IGRpcmVjdG9yeS4gIGZpcnN0ICYgb25seSBleHRlbnQKKwkJCQkJICAgcG9pbnRzIHRvIGRub2RlLiAqLworI2VuZGlmCiAKICAgc3RydWN0IGJwbHVzX2hlYWRlciBidHJlZTsJCS8qIGIrIHRyZWUsIDggZXh0ZW50cyBvciAxMiBzdWJ0cmVlcyAqLwogICB1bmlvbiB7CkBAIC00MDcsMTcgKzQ3NywxNiBAQAogICAgIHN0cnVjdCBicGx1c19pbnRlcm5hbF9ub2RlIGludGVybmFsWzEyXTsKICAgfSB1OwogCi0gIHVuc2lnbmVkIGZpbGVfc2l6ZTsJCQkvKiBmaWxlIGxlbmd0aCwgYnl0ZXMgKi8KLSAgdW5zaWduZWQgbl9uZWVkZWE7CQkJLyogbnVtYmVyIG9mIEVBJ3Mgd2l0aCBORUVERUEgc2V0ICovCi0gIGNoYXIgdXNlcl9pZFsxNl07CQkJLyogdW51c2VkICovCi0gIHVuc2lnbmVkIHNob3J0IGVhX29mZnM7CQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBmbm9kZQorICB1MzIgZmlsZV9zaXplOwkJCS8qIGZpbGUgbGVuZ3RoLCBieXRlcyAqLworICB1MzIgbl9uZWVkZWE7CQkJCS8qIG51bWJlciBvZiBFQSdzIHdpdGggTkVFREVBIHNldCAqLworICB1OCB1c2VyX2lkWzE2XTsJCQkvKiB1bnVzZWQgKi8KKyAgdTE2IGVhX29mZnM7CQkJCS8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGZub2RlCiAJCQkJCSAgIHRvIGZpcnN0IGZub2RlLXJlc2lkZW50IGVhICovCi0gIGNoYXIgZGFzZF9saW1pdF90cmVzaGhvbGQ7Ci0gIGNoYXIgZGFzZF9saW1pdF9kZWx0YTsKLSAgdW5zaWduZWQgZGFzZF9saW1pdDsKLSAgdW5zaWduZWQgZGFzZF91c2FnZTsKLSAgLyp1bnNpZ25lZCB6ZXJvNVsyXTsqLwotICB1bnNpZ25lZCBjaGFyIGVhWzMxNl07CQkvKiB6ZXJvIG9yIG1vcmUgRUEncywgcGFja2VkIHRvZ2V0aGVyCisgIHU4IGRhc2RfbGltaXRfdHJlc2hob2xkOworICB1OCBkYXNkX2xpbWl0X2RlbHRhOworICB1MzIgZGFzZF9saW1pdDsKKyAgdTMyIGRhc2RfdXNhZ2U7CisgIHU4IGVhWzMxNl07CQkJCS8qIHplcm8gb3IgbW9yZSBFQSdzLCBwYWNrZWQgdG9nZXRoZXIKIAkJCQkJICAgd2l0aCBubyBhbGlnbm1lbnQgcGFkZGluZy4KIAkJCQkJICAgKERvIG5vdCB1c2UgdGhpcyBuYW1lLCBnZXQgaGVyZQogCQkJCQkgICB2aWEgZm5vZGUgKyBlYV9vZmZzLiBJIHRoaW5rLikgKi8KQEAgLTQzMCw3ICs0OTksNyBAQAogCiBzdHJ1Y3QgYW5vZGUKIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogMzdlNCAwYWFlICovCisgIHUzMiBtYWdpYzsJCQkJLyogMzdlNCAwYWFlICovCiAgIGFub2RlX3NlY25vIHNlbGY7CQkJLyogcG9pbnRlciB0byB0aGlzIGFub2RlICovCiAgIHNlY25vIHVwOwkJCQkvKiBwYXJlbnQgYW5vZGUgb3IgZm5vZGUgKi8KIApAQCAtNDQwLDcgKzUwOSw3IEBACiAgICAgc3RydWN0IGJwbHVzX2ludGVybmFsX25vZGUgaW50ZXJuYWxbNjBdOwogICB9IHU7CiAKLSAgdW5zaWduZWQgZmlsbFszXTsJCQkvKiB1bnVzZWQgKi8KKyAgdTMyIGZpbGxbM107CQkJCS8qIHVudXNlZCAqLwogfTsKIAogCkBAIC00NjEsMjUgKzUzMCwzMSBAQAogCiBzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlCiB7Ci0gIHVuc2lnbmVkIGluZGlyZWN0OiAxOwkJCS8qIDEgLT4gdmFsdWUgZ2l2ZXMgc2VjdG9yIG51bWJlcgorI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBpbmRpcmVjdDogMTsJCQkvKiAxIC0+IHZhbHVlIGdpdmVzIHNlY3RvciBudW1iZXIKIAkJCQkJICAgd2hlcmUgcmVhbCB2YWx1ZSBzdGFydHMgKi8KLSAgdW5zaWduZWQgYW5vZGU6IDE7CQkJLyogMSAtPiBzZWN0b3IgaXMgYW4gYW5vZGUKKyAgdTggYW5vZGU6IDE7CQkJCS8qIDEgLT4gc2VjdG9yIGlzIGFuIGFub2RlCiAJCQkJCSAgIHRoYXQgcG9pbnRzIHRvIGZyYWdtZW50ZWQgdmFsdWUgKi8KLSAgdW5zaWduZWQgZmxhZzI6IDE7Ci0gIHVuc2lnbmVkIGZsYWczOiAxOwotICB1bnNpZ25lZCBmbGFnNDogMTsKLSAgdW5zaWduZWQgZmxhZzU6IDE7Ci0gIHVuc2lnbmVkIGZsYWc2OiAxOwotICB1bnNpZ25lZCBuZWVkZWE6IDE7CQkJLyogcmVxdWlyZWQgZWEgKi8KLSAgdW5zaWduZWQgY2hhciBuYW1lbGVuOwkJLyogbGVuZ3RoIG9mIG5hbWUsIGJ5dGVzICovCi0gIHVuc2lnbmVkIHNob3J0IHZhbHVlbGVuOwkJLyogbGVuZ3RoIG9mIHZhbHVlLCBieXRlcyAqLwotICB1bnNpZ25lZCBjaGFyIG5hbWVbMF07CisgIHU4IGZsYWcyMzQ1NjogNTsKKyAgdTggbmVlZGVhOiAxOwkJCQkvKiByZXF1aXJlZCBlYSAqLworI2Vsc2UKKyAgdTggbmVlZGVhOiAxOwkJCQkvKiByZXF1aXJlZCBlYSAqLworICB1OCBmbGFnMjM0NTY6IDU7CisgIHU4IGFub2RlOiAxOwkJCQkvKiAxIC0+IHNlY3RvciBpcyBhbiBhbm9kZQorCQkJCQkgICB0aGF0IHBvaW50cyB0byBmcmFnbWVudGVkIHZhbHVlICovCisgIHU4IGluZGlyZWN0OiAxOwkJCS8qIDEgLT4gdmFsdWUgZ2l2ZXMgc2VjdG9yIG51bWJlcgorCQkJCQkgICB3aGVyZSByZWFsIHZhbHVlIHN0YXJ0cyAqLworI2VuZGlmCisgIHU4IG5hbWVsZW47CQkJCS8qIGxlbmd0aCBvZiBuYW1lLCBieXRlcyAqLworICB1OCB2YWx1ZWxlbl9sbzsJCQkvKiBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzICovCisgIHU4IHZhbHVlbGVuX2hpOwkJCS8qIGxlbmd0aCBvZiB2YWx1ZSwgYnl0ZXMgKi8KKyAgdTggbmFtZVswXTsKICAgLyoKLSAgICB1bnNpZ25lZCBjaGFyIG5hbWVbbmFtZWxlbl07CWFzY2lpIGF0dHJpYiBuYW1lCi0gICAgdW5zaWduZWQgY2hhciBudWw7CQkJdGVybWluYXRpbmcgJ1wwJywgbm90IGNvdW50ZWQKLSAgICB1bnNpZ25lZCBjaGFyIHZhbHVlW3ZhbHVlbGVuXTsJdmFsdWUsIGFyYml0cmFyeQorICAgIHU4IG5hbWVbbmFtZWxlbl07CQkJYXNjaWkgYXR0cmliIG5hbWUKKyAgICB1OCBudWw7CQkJCXRlcm1pbmF0aW5nICdcMCcsIG5vdCBjb3VudGVkCisgICAgdTggdmFsdWVbdmFsdWVsZW5dOwkJCXZhbHVlLCBhcmJpdHJhcnkKICAgICAgIGlmIHRoaXMuaW5kaXJlY3QsIHZhbHVlbGVuIGlzIDggYW5kIHRoZSB2YWx1ZSBpcwotICAgICAgICB1bnNpZ25lZCBsZW5ndGg7CQlyZWFsIGxlbmd0aCBvZiB2YWx1ZSwgYnl0ZXMKKyAgICAgICAgdTMyIGxlbmd0aDsJCQlyZWFsIGxlbmd0aCBvZiB2YWx1ZSwgYnl0ZXMKICAgICAgICAgc2Vjbm8gc2Vjbm87CQkJc2VjdG9yIGFkZHJlc3Mgd2hlcmUgaXQgc3RhcnRzCiAgICAgICBpZiB0aGlzLmFub2RlLCB0aGUgYWJvdmUgc2VjdG9yIG51bWJlciBpcyB0aGUgcm9vdCBvZiBhbiBhbm9kZSB0cmVlCiAgICAgICAgIHdoaWNoIHBvaW50cyB0byB0aGUgdmFsdWUuCmRpZmYgLS1naXQgYS9mcy9ocGZzL2hwZnNfZm4uaCBiL2ZzL2hwZnMvaHBmc19mbi5oCmluZGV4IGMxNWFkYmMuLmRkNTUyZjggMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvaHBmc19mbi5oCisrKyBiL2ZzL2hwZnMvaHBmc19mbi5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgImhwZnMuaCIKIApAQCAtNTEsMTggKzUyLDE2IEBACiAJdW5zaWduZWQgaV9kaXNrX3NlYzsJLyogKGZpbGVzKSBtaW5pbWFsaXN0IGNhY2hlIG9mIGFsbG9jIGluZm8gKi8KIAl1bnNpZ25lZCBpX25fc2VjczsJLyogKGZpbGVzKSBtaW5pbWFsaXN0IGNhY2hlIG9mIGFsbG9jIGluZm8gKi8KIAl1bnNpZ25lZCBpX2VhX3NpemU7CS8qIHNpemUgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyAqLwotCXVuc2lnbmVkIGlfY29udiA6IDI7CS8qIChmaWxlcykgY3JsZi0+bmV3bGluZSBoYWNrZXJ5ICovCiAJdW5zaWduZWQgaV9lYV9tb2RlIDogMTsJLyogZmlsZSdzIHBlcm1pc3Npb24gaXMgc3RvcmVkIGluIGVhICovCiAJdW5zaWduZWQgaV9lYV91aWQgOiAxOwkvKiBmaWxlJ3MgdWlkIGlzIHN0b3JlZCBpbiBlYSAqLwogCXVuc2lnbmVkIGlfZWFfZ2lkIDogMTsJLyogZmlsZSdzIGdpZCBpcyBzdG9yZWQgaW4gZWEgKi8KIAl1bnNpZ25lZCBpX2RpcnR5IDogMTsKLQlzdHJ1Y3QgbXV0ZXggaV9tdXRleDsKLQlzdHJ1Y3QgbXV0ZXggaV9wYXJlbnRfbXV0ZXg7CiAJbG9mZl90ICoqaV9yZGRpcl9vZmY7CiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIH07CiAKIHN0cnVjdCBocGZzX3NiX2luZm8geworCXN0cnVjdCBtdXRleCBocGZzX211dGV4OwkvKiBnbG9iYWwgaHBmcyBsb2NrICovCiAJaW5vX3Qgc2Jfcm9vdDsJCQkvKiBpbm9kZSBudW1iZXIgb2Ygcm9vdCBkaXIgKi8KIAl1bnNpZ25lZCBzYl9mc19zaXplOwkJLyogZmlsZSBzeXN0ZW0gc2l6ZSwgc2VjdG9ycyAqLwogCXVuc2lnbmVkIHNiX2JpdG1hcHM7CQkvKiBzZWN0b3IgbnVtYmVyIG9mIGJpdG1hcCBsaXN0ICovCkBAIC03NCw3ICs3Myw2IEBACiAJdWlkX3Qgc2JfdWlkOwkJCS8qIHVpZCBmcm9tIG1vdW50IG9wdGlvbnMgKi8KIAlnaWRfdCBzYl9naWQ7CQkJLyogZ2lkIGZyb20gbW91bnQgb3B0aW9ucyAqLwogCXVtb2RlX3Qgc2JfbW9kZTsJCS8qIG1vZGUgZnJvbSBtb3VudCBvcHRpb25zICovCi0JdW5zaWduZWQgc2JfY29udiA6IDI7CQkvKiBjcmxmLT5uZXdsaW5lIGhhY2tlcnkgKi8KIAl1bnNpZ25lZCBzYl9lYXMgOiAyOwkJLyogZWFzOiAwLWlnbm9yZSwgMS1ybywgMi1ydyAqLwogCXVuc2lnbmVkIHNiX2VyciA6IDI7CQkvKiBvbiBlcnJzOiAwLWNvbnQsIDEtcm8sIDItcGFuaWMgKi8KIAl1bnNpZ25lZCBzYl9jaGsgOiAyOwkJLyogY2hlY2tzOiAwLW5vLCAxLW5vcm1hbCwgMi1zdHJpY3QgKi8KQEAgLTg3LDIwICs4NSw5IEBACiAJdW5zaWduZWQgKnNiX2JtcF9kaXI7CQkvKiBtYWluIGJpdG1hcCBkaXJlY3RvcnkgKi8KIAl1bnNpZ25lZCBzYl9jX2JpdG1hcDsJCS8qIGN1cnJlbnQgYml0bWFwICovCiAJdW5zaWduZWQgc2JfbWF4X2Z3ZF9hbGxvYzsJLyogbWF4IGZvcndhZCBhbGxvY2F0aW9uICovCi0Jc3RydWN0IG11dGV4IGhwZnNfY3JlYXRpb25fZGU7CS8qIHdoZW4gY3JlYXRpbmcgZGlyZW50cywgbm9ib2R5IGVsc2UKLQkJCQkJICAgY2FuIGFsbG9jIGJsb2NrcyAqLwotCS8qdW5zaWduZWQgc2JfbW91bnRpbmcgOiAxOyovCiAJaW50IHNiX3RpbWVzaGlmdDsKIH07CiAKLS8qCi0gKiBjb252PSBvcHRpb25zCi0gKi8KLQotI2RlZmluZSBDT05WX0JJTkFSWSAwCQkJLyogbm8gY29udmVyc2lvbiAqLwotI2RlZmluZSBDT05WX1RFWFQgMQkJCS8qIGNybGYtPm5ld2xpbmUgKi8KLSNkZWZpbmUgQ09OVl9BVVRPIDIJCQkvKiBkZWNpZGUgYmFzZWQgb24gZmlsZSBjb250ZW50cyAqLwotCiAvKiBGb3VyIDUxMi1ieXRlIGJ1ZmZlcnMgYW5kIHRoZSAyayBibG9jayBvYnRhaW5lZCBieSBjb25jYXRlbmF0aW5nIHRoZW0gKi8KIAogc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgewpAQCAtMTEzLDcgKzEwMCw3IEBACiBzdGF0aWMgaW5saW5lIGRub2RlX3NlY25vIGRlX2Rvd25fcG9pbnRlciAoc3RydWN0IGhwZnNfZGlyZW50ICpkZSkKIHsKICAgQ0hLQ09ORChkZS0+ZG93biwoIkhQRlM6IGRlX2Rvd25fcG9pbnRlcjogIWRlLT5kb3duXG4iKSk7Ci0gIHJldHVybiAqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZSArIGRlLT5sZW5ndGggLSA0KTsKKyAgcmV0dXJuIGxlMzJfdG9fY3B1KCooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlICsgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkgLSA0KSk7CiB9CiAKIC8qIFRoZSBmaXJzdCBkaXIgZW50cnkgaW4gYSBkbm9kZSAqLwpAQCAtMTI3LDQxICsxMTQsNDYgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaHBmc19kaXJlbnQgKmRub2RlX2VuZF9kZSAoc3RydWN0IGRub2RlICpkbm9kZSkKIHsKLSAgQ0hLQ09ORChkbm9kZS0+Zmlyc3RfZnJlZT49MHgxNCAmJiBkbm9kZS0+Zmlyc3RfZnJlZTw9MHhhMDAsKCJIUEZTOiBkbm9kZV9lbmRfZGU6IGRub2RlLT5maXJzdF9mcmVlID0gJWRcbiIsKGludClkbm9kZS0+Zmlyc3RfZnJlZSkpOwotICByZXR1cm4gKHZvaWQgKikgZG5vZGUgKyBkbm9kZS0+Zmlyc3RfZnJlZTsKKyAgQ0hLQ09ORChsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSk+PTB4MTQgJiYgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpPD0weGEwMCwoIkhQRlM6IGRub2RlX2VuZF9kZTogZG5vZGUtPmZpcnN0X2ZyZWUgPSAleFxuIiwodW5zaWduZWQpbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpKSk7CisgIHJldHVybiAodm9pZCAqKSBkbm9kZSArIGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKTsKIH0KIAogLyogVGhlIGRpciBlbnRyeSBhZnRlciBkaXIgZW50cnkgZGUgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlX25leHRfZGUgKHN0cnVjdCBocGZzX2RpcmVudCAqZGUpCiB7Ci0gIENIS0NPTkQoZGUtPmxlbmd0aD49MHgyMCAmJiBkZS0+bGVuZ3RoPDB4ODAwLCgiSFBGUzogZGVfbmV4dF9kZTogZGUtPmxlbmd0aCA9ICVkXG4iLChpbnQpZGUtPmxlbmd0aCkpOwotICByZXR1cm4gKHZvaWQgKikgZGUgKyBkZS0+bGVuZ3RoOworICBDSEtDT05EKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpPj0weDIwICYmIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpPDB4ODAwLCgiSFBGUzogZGVfbmV4dF9kZTogZGUtPmxlbmd0aCA9ICV4XG4iLCh1bnNpZ25lZClsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSkpOworICByZXR1cm4gKHZvaWQgKikgZGUgKyBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICpmbm9kZV9lYShzdHJ1Y3QgZm5vZGUgKmZub2RlKQogewotCXJldHVybiAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKSgoY2hhciAqKWZub2RlICsgZm5vZGUtPmVhX29mZnMgKyBmbm9kZS0+YWNsX3NpemVfcyk7CisJcmV0dXJuIChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopKChjaGFyICopZm5vZGUgKyBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+YWNsX3NpemVfcykpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmZub2RlX2VuZF9lYShzdHJ1Y3QgZm5vZGUgKmZub2RlKQogewotCXJldHVybiAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKSgoY2hhciAqKWZub2RlICsgZm5vZGUtPmVhX29mZnMgKyBmbm9kZS0+YWNsX3NpemVfcyArIGZub2RlLT5lYV9zaXplX3MpOworCXJldHVybiAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKSgoY2hhciAqKWZub2RlICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpOworfQorCitzdGF0aWMgdW5zaWduZWQgZWFfdmFsdWVsZW4oc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWEpCit7CisJcmV0dXJuIGVhLT52YWx1ZWxlbl9sbyArIDI1NiAqIGVhLT52YWx1ZWxlbl9oaTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICpuZXh0X2VhKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhKQogewotCXJldHVybiAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKSgoY2hhciAqKWVhICsgNSArIGVhLT5uYW1lbGVuICsgZWEtPnZhbHVlbGVuKTsKKwlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKillYSArIDUgKyBlYS0+bmFtZWxlbiArIGVhX3ZhbHVlbGVuKGVhKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc2Vjbm8gZWFfc2VjKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhKQogewotCXJldHVybiAqKHNlY25vICopKChjaGFyICopZWEgKyA5ICsgZWEtPm5hbWVsZW4pOworCXJldHVybiBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChzZWNubyAqKSgoY2hhciAqKWVhICsgOSArIGVhLT5uYW1lbGVuKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHNlY25vIGVhX2xlbihzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKIHsKLQlyZXR1cm4gKihzZWNubyAqKSgoY2hhciAqKWVhICsgNSArIGVhLT5uYW1lbGVuKTsKKwlyZXR1cm4gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoc2Vjbm8gKikoKGNoYXIgKillYSArIDUgKyBlYS0+bmFtZWxlbikpKTsKIH0KIAogc3RhdGljIGlubGluZSBjaGFyICplYV9kYXRhKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhKQpAQCAtMTg2LDEzICsxNzgsMTMgQEAKIAlkc3QtPm5vdF84eDMgPSBuOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHRzdGJpdHModW5zaWduZWQgKmJtcCwgdW5zaWduZWQgYiwgdW5zaWduZWQgbikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHN0Yml0cyh1MzIgKmJtcCwgdW5zaWduZWQgYiwgdW5zaWduZWQgbikKIHsKIAlpbnQgaTsKIAlpZiAoKGIgPj0gMHg0MDAwKSB8fCAoYiArIG4gLSAxID49IDB4NDAwMCkpIHJldHVybiBuOwotCWlmICghKChibXBbKGIgJiAweDNmZmYpID4+IDVdID4+IChiICYgMHgxZikpICYgMSkpIHJldHVybiAxOworCWlmICghKChsZTMyX3RvX2NwdShibXBbKGIgJiAweDNmZmYpID4+IDVdKSA+PiAoYiAmIDB4MWYpKSAmIDEpKSByZXR1cm4gMTsKIAlmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQotCQlpZiAoLypiK2kgPCAweDQwMDAgJiYqLyAhKChibXBbKChiK2kpICYgMHgzZmZmKSA+PiA1XSA+PiAoKGIraSkgJiAweDFmKSkgJiAxKSkKKwkJaWYgKCEoKGxlMzJfdG9fY3B1KGJtcFsoKGIraSkgJiAweDNmZmYpID4+IDVdKSA+PiAoKGIraSkgJiAweDFmKSkgJiAxKSkKIAkJCXJldHVybiBpICsgMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMCwxMiArMTkyLDEyIEBACiAvKiBhbGxvYy5jICovCiAKIGludCBocGZzX2Noa19zZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgaW50LCBjaGFyICopOwotc2Vjbm8gaHBmc19hbGxvY19zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCB1bnNpZ25lZCwgaW50LCBpbnQpOworc2Vjbm8gaHBmc19hbGxvY19zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCB1bnNpZ25lZCwgaW50KTsKIGludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubyk7CiB2b2lkIGhwZnNfZnJlZV9zZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgdW5zaWduZWQpOwogaW50IGhwZnNfY2hlY2tfZnJlZV9kbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CiB2b2lkIGhwZnNfZnJlZV9kbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8pOwotc3RydWN0IGRub2RlICpocGZzX2FsbG9jX2Rub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgZG5vZGVfc2Vjbm8gKiwgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKiwgaW50KTsKK3N0cnVjdCBkbm9kZSAqaHBmc19hbGxvY19kbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGRub2RlX3NlY25vICosIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICopOwogc3RydWN0IGZub2RlICpocGZzX2FsbG9jX2Zub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgZm5vZGVfc2Vjbm8gKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKIHN0cnVjdCBhbm9kZSAqaHBmc19hbGxvY19hbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGFub2RlX3NlY25vICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CiAKQEAgLTIyMiw4ICsyMTQsNiBAQAogCiAvKiBidWZmZXIuYyAqLwogCi12b2lkIGhwZnNfbG9ja19jcmVhdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci12b2lkIGhwZnNfdW5sb2NrX2NyZWF0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHZvaWQgKmhwZnNfbWFwX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKiwgaW50KTsKIHZvaWQgKmhwZnNfZ2V0X3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CiB2b2lkICpocGZzX21hcF80c2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQsIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICosIGludCk7CkBAIC0yNDcsNyArMjM3LDcgQEAKIHN0cnVjdCBocGZzX2RpcmVudCAqaHBmc19hZGRfZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBkbm9kZSAqLAogCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHNlY25vKTsKIGludCBocGZzX2FkZF9kaXJlbnQoc3RydWN0IGlub2RlICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsCi0JCSAgICBzdHJ1Y3QgaHBmc19kaXJlbnQgKiwgaW50KTsKKwkJICAgIHN0cnVjdCBocGZzX2RpcmVudCAqKTsKIGludCBocGZzX3JlbW92ZV9kaXJlbnQoc3RydWN0IGlub2RlICosIGRub2RlX3NlY25vLCBzdHJ1Y3QgaHBmc19kaXJlbnQgKiwgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKiwgaW50KTsKIHZvaWQgaHBmc19jb3VudF9kbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICosIGRub2RlX3NlY25vLCBpbnQgKiwgaW50ICosIGludCAqKTsKIGRub2RlX3NlY25vIGhwZnNfZGVfYXNfZG93bl9hc19wb3NzaWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgZG5vZGVfc2Vjbm8gZG5vKTsKQEAgLTMwMyw3ICsyOTMsNiBAQAogCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwgaW50KTsKIGludCBocGZzX2lzX25hbWVfbG9uZyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkKTsKIHZvaWQgaHBmc19hZGp1c3RfbGVuZ3RoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgKik7Ci12b2lkIGhwZnNfZGVjaWRlX2NvbnYoc3RydWN0IGlub2RlICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQpOwogCiAvKiBuYW1laS5jICovCiAKQEAgLTM0NiwyMSArMzM1LDI2IEBACiAvKgogICogTG9ja2luZzoKICAqCi0gKiBocGZzX2xvY2soKSBpcyBhIGxlZnRvdmVyIGZyb20gdGhlIGJpZyBrZXJuZWwgbG9jay4KLSAqIFJpZ2h0IG5vdywgdGhlc2UgZnVuY3Rpb25zIGFyZSBlbXB0eSBhbmQgb25seSBsZWZ0Ci0gKiBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4gVGhlIGZpbGUgc3lzdGVtIG5vIGxvbmdlcgotICogd29ya3Mgb24gU01QIHN5c3RlbXMsIHNvIHRoZSBsb2NrIGlzIG5vdCBuZWVkZWQKLSAqIGFueSBtb3JlLgorICogaHBmc19sb2NrKCkgbG9ja3MgdGhlIHdob2xlIGZpbGVzeXN0ZW0uIEl0IG11c3QgYmUgdGFrZW4KKyAqIG9uIGFueSBtZXRob2QgY2FsbGVkIGJ5IHRoZSBWRlMuCiAgKgotICogSWYgc29tZW9uZSBpcyBpbnRlcmVzdGVkIGluIG1ha2luZyBpdCB3b3JrIGFnYWluLCB0aGlzCi0gKiB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gc3RhcnQgYnkgYWRkaW5nIGEgcGVyLXN1cGVyYmxvY2sKLSAqIG11dGV4IGFuZCBmaXhpbmcgYWxsIHRoZSBidWdzIGFuZCBwZXJmb3JtYW5jZSBpc3N1ZXMKLSAqIGNhdXNlZCBieSB0aGF0LgorICogV2UgZG9uJ3QgZG8gYW55IHBlci1maWxlIGxvY2tpbmcgYW55bW9yZSwgaXQgaXMgaGFyZCB0bworICogcmV2aWV3IGFuZCBIUEZTIGlzIG5vdCBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYW55d2F5LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaHBmc19sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKIHsKKwlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOworCW11dGV4X2xvY2soJnNiaS0+aHBmc19tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBocGZzX3VubG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CisJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKKwltdXRleF91bmxvY2soJnNiaS0+aHBmc19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBocGZzX2xvY2tfYXNzZXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3sKKwlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmc2JpLT5ocGZzX211dGV4KSk7CiB9CmRpZmYgLS1naXQgYS9mcy9ocGZzL2lub2RlLmMgYi9mcy9ocGZzL2lub2RlLmMKaW5kZXggODdmMWY3OC4uMzM4Y2Q4MyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9pbm9kZS5jCisrKyBiL2ZzL2hwZnMvaW5vZGUuYwpAQCAtMTcsNyArMTcsNiBAQAogCWktPmlfdWlkID0gaHBmc19zYihzYiktPnNiX3VpZDsKIAlpLT5pX2dpZCA9IGhwZnNfc2Ioc2IpLT5zYl9naWQ7CiAJaS0+aV9tb2RlID0gaHBmc19zYihzYiktPnNiX21vZGU7Ci0JaHBmc19pbm9kZS0+aV9jb252ID0gaHBmc19zYihzYiktPnNiX2NvbnY7CiAJaS0+aV9zaXplID0gLTE7CiAJaS0+aV9ibG9ja3MgPSAtMTsKIAkKQEAgLTExNiw4ICsxMTUsOCBAQAogCQlpLT5pX21vZGUgfD0gU19JRkRJUjsKIAkJaS0+aV9vcCA9ICZocGZzX2Rpcl9pb3BzOwogCQlpLT5pX2ZvcCA9ICZocGZzX2Rpcl9vcHM7Ci0JCWhwZnNfaW5vZGUtPmlfcGFyZW50X2RpciA9IGZub2RlLT51cDsKLQkJaHBmc19pbm9kZS0+aV9kbm8gPSBmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vOworCQlocGZzX2lub2RlLT5pX3BhcmVudF9kaXIgPSBsZTMyX3RvX2NwdShmbm9kZS0+dXApOworCQlocGZzX2lub2RlLT5pX2RubyA9IGxlMzJfdG9fY3B1KGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pOwogCQlpZiAoaHBmc19zYihzYiktPnNiX2NoayA+PSAyKSB7CiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoMDsKIAkJCWlmIChocGZzX21hcF9mbm9kZShzYiwgaHBmc19pbm9kZS0+aV9wYXJlbnRfZGlyLCAmYmgwKSkgYnJlbHNlKGJoMCk7CkBAIC0xMzMsNyArMTMyLDcgQEAKIAkJaS0+aV9vcCA9ICZocGZzX2ZpbGVfaW9wczsKIAkJaS0+aV9mb3AgPSAmaHBmc19maWxlX29wczsKIAkJaS0+aV9ubGluayA9IDE7Ci0JCWktPmlfc2l6ZSA9IGZub2RlLT5maWxlX3NpemU7CisJCWktPmlfc2l6ZSA9IGxlMzJfdG9fY3B1KGZub2RlLT5maWxlX3NpemUpOwogCQlpLT5pX2Jsb2NrcyA9ICgoaS0+aV9zaXplICsgNTExKSA+PiA5KSArIDE7CiAJCWktPmlfZGF0YS5hX29wcyA9ICZocGZzX2FvcHM7CiAJCWhwZnNfaShpKS0+bW11X3ByaXZhdGUgPSBpLT5pX3NpemU7CkBAIC0xNDQsNyArMTQzLDcgQEAKIHN0YXRpYyB2b2lkIGhwZnNfd3JpdGVfaW5vZGVfZWEoc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZm5vZGUgKmZub2RlKQogewogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfaW5vZGUgPSBocGZzX2koaSk7Ci0JLyppZiAoZm5vZGUtPmFjbF9zaXplX2wgfHwgZm5vZGUtPmFjbF9zaXplX3MpIHsKKwkvKmlmIChsZTMyX3RvX2NwdShmbm9kZS0+YWNsX3NpemVfbCkgfHwgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpKSB7CiAJCSAgIFNvbWUgdW5rbm93biBzdHJ1Y3R1cmVzIGxpa2UgQUNMIG1heSBiZSBpbiBmbm9kZSwKIAkJICAgd2UnZCBiZXR0ZXIgbm90IG92ZXJ3cml0ZSB0aGVtCiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgImZub2RlICUwOHggaGFzIHNvbWUgdW5rbm93biBIUEZTMzg2IHN0dWN0dXJlcyIsIGktPmlfaW5vKTsKQEAgLTE4Nyw5ICsxODYsNyBAQAogCQlrZnJlZShocGZzX2lub2RlLT5pX3JkZGlyX29mZik7CiAJCWhwZnNfaW5vZGUtPmlfcmRkaXJfb2ZmID0gTlVMTDsKIAl9Ci0JbXV0ZXhfbG9jaygmaHBmc19pbm9kZS0+aV9wYXJlbnRfbXV0ZXgpOwogCWlmICghaS0+aV9ubGluaykgewotCQltdXRleF91bmxvY2soJmhwZnNfaW5vZGUtPmlfcGFyZW50X211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAlwYXJlbnQgPSBpZ2V0X2xvY2tlZChpLT5pX3NiLCBocGZzX2lub2RlLT5pX3BhcmVudF9kaXIpOwpAQCAtMjAwLDE0ICsxOTcsOSBAQAogCQkJaHBmc19yZWFkX2lub2RlKHBhcmVudCk7CiAJCQl1bmxvY2tfbmV3X2lub2RlKHBhcmVudCk7CiAJCX0KLQkJbXV0ZXhfbG9jaygmaHBmc19pbm9kZS0+aV9tdXRleCk7CiAJCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKGkpOwotCQltdXRleF91bmxvY2soJmhwZnNfaW5vZGUtPmlfbXV0ZXgpOwogCQlpcHV0KHBhcmVudCk7Ci0JfSBlbHNlIHsKLQkJbWFya19pbm9kZV9kaXJ0eShpKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2lub2RlLT5pX3BhcmVudF9tdXRleCk7CiB9CiAKIHZvaWQgaHBmc193cml0ZV9pbm9kZV9ub2xvY2soc3RydWN0IGlub2RlICppKQpAQCAtMjI2LDMwICsyMTgsMzAgQEAKIAkJfQogCX0gZWxzZSBkZSA9IE5VTEw7CiAJaWYgKFNfSVNSRUcoaS0+aV9tb2RlKSkgewotCQlmbm9kZS0+ZmlsZV9zaXplID0gaS0+aV9zaXplOwotCQlpZiAoZGUpIGRlLT5maWxlX3NpemUgPSBpLT5pX3NpemU7CisJCWZub2RlLT5maWxlX3NpemUgPSBjcHVfdG9fbGUzMihpLT5pX3NpemUpOworCQlpZiAoZGUpIGRlLT5maWxlX3NpemUgPSBjcHVfdG9fbGUzMihpLT5pX3NpemUpOwogCX0gZWxzZSBpZiAoU19JU0RJUihpLT5pX21vZGUpKSB7Ci0JCWZub2RlLT5maWxlX3NpemUgPSAwOwotCQlpZiAoZGUpIGRlLT5maWxlX3NpemUgPSAwOworCQlmbm9kZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoMCk7CisJCWlmIChkZSkgZGUtPmZpbGVfc2l6ZSA9IGNwdV90b19sZTMyKDApOwogCX0KIAlocGZzX3dyaXRlX2lub2RlX2VhKGksIGZub2RlKTsKIAlpZiAoZGUpIHsKLQkJZGUtPndyaXRlX2RhdGUgPSBnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9tdGltZS50dl9zZWMpOwotCQlkZS0+cmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfYXRpbWUudHZfc2VjKTsKLQkJZGUtPmNyZWF0aW9uX2RhdGUgPSBnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9jdGltZS50dl9zZWMpOworCQlkZS0+d3JpdGVfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX210aW1lLnR2X3NlYykpOworCQlkZS0+cmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfYXRpbWUudHZfc2VjKSk7CisJCWRlLT5jcmVhdGlvbl9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfY3RpbWUudHZfc2VjKSk7CiAJCWRlLT5yZWFkX29ubHkgPSAhKGktPmlfbW9kZSAmIDAyMjIpOwotCQlkZS0+ZWFfc2l6ZSA9IGhwZnNfaW5vZGUtPmlfZWFfc2l6ZTsKKwkJZGUtPmVhX3NpemUgPSBjcHVfdG9fbGUzMihocGZzX2lub2RlLT5pX2VhX3NpemUpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAl9CiAJaWYgKFNfSVNESVIoaS0+aV9tb2RlKSkgewogCQlpZiAoKGRlID0gbWFwX2RpcmVudChpLCBocGZzX2lub2RlLT5pX2RubywgIlwwMDFcMDAxIiwgMiwgTlVMTCwgJnFiaCkpKSB7Ci0JCQlkZS0+d3JpdGVfZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX210aW1lLnR2X3NlYyk7Ci0JCQlkZS0+cmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfYXRpbWUudHZfc2VjKTsKLQkJCWRlLT5jcmVhdGlvbl9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfY3RpbWUudHZfc2VjKTsKKwkJCWRlLT53cml0ZV9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfbXRpbWUudHZfc2VjKSk7CisJCQlkZS0+cmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfYXRpbWUudHZfc2VjKSk7CisJCQlkZS0+Y3JlYXRpb25fZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2N0aW1lLnR2X3NlYykpOwogCQkJZGUtPnJlYWRfb25seSA9ICEoaS0+aV9tb2RlICYgMDIyMik7Ci0JCQlkZS0+ZWFfc2l6ZSA9IC8qaHBmc19pbm9kZS0+aV9lYV9zaXplKi8wOwotCQkJZGUtPmZpbGVfc2l6ZSA9IDA7CisJCQlkZS0+ZWFfc2l6ZSA9IGNwdV90b19sZTMyKC8qaHBmc19pbm9kZS0+aV9lYV9zaXplKi8wKTsKKwkJCWRlLT5maWxlX3NpemUgPSBjcHVfdG9fbGUzMigwKTsKIAkJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJfSBlbHNlCkBAIC0yNjksNiArMjYxLDEwIEBACiAJaHBmc19sb2NrKGlub2RlLT5pX3NiKTsKIAlpZiAoaW5vZGUtPmlfaW5vID09IGhwZnNfc2IoaW5vZGUtPmlfc2IpLT5zYl9yb290KQogCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEKSAmJiBhdHRyLT5pYV91aWQgPj0gMHgxMDAwMCkKKwkJZ290byBvdXRfdW5sb2NrOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkgJiYgYXR0ci0+aWFfZ2lkID49IDB4MTAwMDApCisJCWdvdG8gb3V0X3VubG9jazsKIAlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJiBhdHRyLT5pYV9zaXplID4gaW5vZGUtPmlfc2l6ZSkKIAkJZ290byBvdXRfdW5sb2NrOwogCkBAIC0yODQsNyArMjgwLDYgQEAKIAl9CiAKIAlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCiAJaHBmc193cml0ZV9pbm9kZShpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbWFwLmMgYi9mcy9ocGZzL21hcC5jCmluZGV4IDg0MGQwMzMuLmE3OTA4MjEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbWFwLmMKKysrIGIvZnMvaHBmcy9tYXAuYwpAQCAtMjEsNyArMjEsNyBAQAogCQlocGZzX2Vycm9yKHMsICJocGZzX21hcF9iaXRtYXAgY2FsbGVkIHdpdGggYmFkIHBhcmFtZXRlcjogJTA4eCBhdCAlcyIsIGJtcF9ibG9jaywgaWQpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0Jc2VjID0gaHBmc19zYihzKS0+c2JfYm1wX2RpcltibXBfYmxvY2tdOworCXNlYyA9IGxlMzJfdG9fY3B1KGhwZnNfc2IocyktPnNiX2JtcF9kaXJbYm1wX2Jsb2NrXSk7CiAJaWYgKCFzZWMgfHwgc2VjID4gaHBmc19zYihzKS0+c2JfZnNfc2l6ZS00KSB7CiAJCWhwZnNfZXJyb3IocywgImludmFsaWQgYml0bWFwIGJsb2NrIHBvaW50ZXIgJTA4eCAtPiAlMDh4IGF0ICVzIiwgYm1wX2Jsb2NrLCBzZWMsIGlkKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC00NiwxOCArNDYsMTggQEAKIAlzdHJ1Y3QgY29kZV9wYWdlX2RhdGEgKmNwZDsKIAlzdHJ1Y3QgY29kZV9wYWdlX2RpcmVjdG9yeSAqY3AgPSBocGZzX21hcF9zZWN0b3IocywgY3BzLCAmYmgsIDApOwogCWlmICghY3ApIHJldHVybiBOVUxMOwotCWlmIChjcC0+bWFnaWMgIT0gQ1BfRElSX01BR0lDKSB7Ci0JCXByaW50aygiSFBGUzogQ29kZSBwYWdlIGRpcmVjdG9yeSBtYWdpYyBkb2Vzbid0IG1hdGNoIChtYWdpYyA9ICUwOHgpXG4iLCBjcC0+bWFnaWMpOworCWlmIChsZTMyX3RvX2NwdShjcC0+bWFnaWMpICE9IENQX0RJUl9NQUdJQykgeworCQlwcmludGsoIkhQRlM6IENvZGUgcGFnZSBkaXJlY3RvcnkgbWFnaWMgZG9lc24ndCBtYXRjaCAobWFnaWMgPSAlMDh4KVxuIiwgbGUzMl90b19jcHUoY3AtPm1hZ2ljKSk7CiAJCWJyZWxzZShiaCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAoIWNwLT5uX2NvZGVfcGFnZXMpIHsKKwlpZiAoIWxlMzJfdG9fY3B1KGNwLT5uX2NvZGVfcGFnZXMpKSB7CiAJCXByaW50aygiSFBGUzogbl9jb2RlX3BhZ2VzID09IDBcbiIpOwogCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JY3BkcyA9IGNwLT5hcnJheVswXS5jb2RlX3BhZ2VfZGF0YTsKLQljcGkgPSBjcC0+YXJyYXlbMF0uaW5kZXg7CisJY3BkcyA9IGxlMzJfdG9fY3B1KGNwLT5hcnJheVswXS5jb2RlX3BhZ2VfZGF0YSk7CisJY3BpID0gbGUxNl90b19jcHUoY3AtPmFycmF5WzBdLmluZGV4KTsKIAlicmVsc2UoYmgpOwogCiAJaWYgKGNwaSA+PSAzKSB7CkBAIC02NiwxMiArNjYsMTIgQEAKIAl9CiAJCiAJaWYgKCEoY3BkID0gaHBmc19tYXBfc2VjdG9yKHMsIGNwZHMsICZiaCwgMCkpKSByZXR1cm4gTlVMTDsKLQlpZiAoKHVuc2lnbmVkKWNwZC0+b2Zmc1tjcGldID4gMHgxNzgpIHsKKwlpZiAobGUxNl90b19jcHUoY3BkLT5vZmZzW2NwaV0pID4gMHgxNzgpIHsKIAkJcHJpbnRrKCJIUEZTOiBDb2RlIHBhZ2UgaW5kZXggb3V0IG9mIHNlY3RvclxuIik7CiAJCWJyZWxzZShiaCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlwdHIgPSAodW5zaWduZWQgY2hhciAqKWNwZCArIGNwZC0+b2Zmc1tjcGldICsgNjsKKwlwdHIgPSAodW5zaWduZWQgY2hhciAqKWNwZCArIGxlMTZfdG9fY3B1KGNwZC0+b2Zmc1tjcGldKSArIDY7CiAJaWYgKCEoY3BfdGFibGUgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCkpKSB7CiAJCXByaW50aygiSFBGUzogb3V0IG9mIG1lbW9yeSBmb3IgY29kZSBwYWdlIHRhYmxlXG4iKTsKIAkJYnJlbHNlKGJoKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSB7CiAJCQlzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYTsKIAkJCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhX2VuZDsKLQkJCWlmIChmbm9kZS0+bWFnaWMgIT0gRk5PREVfTUFHSUMpIHsKKwkJCWlmIChsZTMyX3RvX2NwdShmbm9kZS0+bWFnaWMpICE9IEZOT0RFX01BR0lDKSB7CiAJCQkJaHBmc19lcnJvcihzLCAiYmFkIG1hZ2ljIG9uIGZub2RlICUwOGx4IiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpaW5vKTsKIAkJCQlnb3RvIGJhaWw7CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJCQkJICAgICh1bnNpZ25lZCBsb25nKWlubyk7CiAJCQkJCWdvdG8gYmFpbDsKIAkJCQl9Ci0JCQkJaWYgKGZub2RlLT5idHJlZS5maXJzdF9mcmVlICE9CisJCQkJaWYgKGxlMTZfdG9fY3B1KGZub2RlLT5idHJlZS5maXJzdF9mcmVlKSAhPQogCQkJCSAgICA4ICsgZm5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlcyAqIChmbm9kZS0+YnRyZWUuaW50ZXJuYWwgPyA4IDogMTIpKSB7CiAJCQkJCWhwZnNfZXJyb3IocywKIAkJCQkJICAgICJiYWQgZmlyc3RfZnJlZSBwb2ludGVyIGluIGZub2RlICUwOGx4IiwKQEAgLTE0NiwxMiArMTQ2LDEyIEBACiAJCQkJCWdvdG8gYmFpbDsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAoZm5vZGUtPmVhX3NpemVfcyAmJiAoKHNpZ25lZCBpbnQpZm5vZGUtPmVhX29mZnMgPCAweGM0IHx8Ci0JCQkgICAoc2lnbmVkIGludClmbm9kZS0+ZWFfb2ZmcyArIGZub2RlLT5hY2xfc2l6ZV9zICsgZm5vZGUtPmVhX3NpemVfcyA+IDB4MjAwKSkgeworCQkJaWYgKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpICYmIChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykgPCAweGM0IHx8CisJCQkgICBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+YWNsX3NpemVfcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSA+IDB4MjAwKSkgewogCQkJCWhwZnNfZXJyb3IocywKIAkJCQkJImJhZCBFQSBpbmZvIGluIGZub2RlICUwOGx4OiBlYV9vZmZzID09ICUwNHggZWFfc2l6ZV9zID09ICUwNHgiLAogCQkJCQkodW5zaWduZWQgbG9uZylpbm8sCi0JCQkJCWZub2RlLT5lYV9vZmZzLCBmbm9kZS0+ZWFfc2l6ZV9zKTsKKwkJCQkJbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpLCBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSk7CiAJCQkJZ290byBiYWlsOwogCQkJfQogCQkJZWEgPSBmbm9kZV9lYShmbm9kZSk7CkBAIC0xNzgsMTYgKzE3OCwyMCBAQAogCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIGlmIChocGZzX2Noa19zZWN0b3JzKHMsIGFubywgMSwgImFub2RlIikpIHJldHVybiBOVUxMOwogCWlmICgoYW5vZGUgPSBocGZzX21hcF9zZWN0b3IocywgYW5vLCBiaHAsIEFOT0RFX1JEX0FIRUFEKSkpCiAJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIHsKLQkJCWlmIChhbm9kZS0+bWFnaWMgIT0gQU5PREVfTUFHSUMgfHwgYW5vZGUtPnNlbGYgIT0gYW5vKSB7CisJCQlpZiAobGUzMl90b19jcHUoYW5vZGUtPm1hZ2ljKSAhPSBBTk9ERV9NQUdJQykgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBtYWdpYyBvbiBhbm9kZSAlMDh4IiwgYW5vKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9CisJCQlpZiAobGUzMl90b19jcHUoYW5vZGUtPnNlbGYpICE9IGFubykgeworCQkJCWhwZnNfZXJyb3IocywgInNlbGYgcG9pbnRlciBpbnZhbGlkIG9uIGFub2RlICUwOHgiLCBhbm8pOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KIAkJCWlmICgodW5zaWduZWQpYW5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlcyArICh1bnNpZ25lZClhbm9kZS0+YnRyZWUubl9mcmVlX25vZGVzICE9CiAJCQkgICAgKGFub2RlLT5idHJlZS5pbnRlcm5hbCA/IDYwIDogNDApKSB7CiAJCQkJaHBmc19lcnJvcihzLCAiYmFkIG51bWJlciBvZiBub2RlcyBpbiBhbm9kZSAlMDh4IiwgYW5vKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9Ci0JCQlpZiAoYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgIT0KKwkJCWlmIChsZTE2X3RvX2NwdShhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSkgIT0KIAkJCSAgICA4ICsgYW5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlcyAqIChhbm9kZS0+YnRyZWUuaW50ZXJuYWwgPyA4IDogMTIpKSB7CiAJCQkJaHBmc19lcnJvcihzLCAiYmFkIGZpcnN0X2ZyZWUgcG9pbnRlciBpbiBhbm9kZSAlMDh4IiwgYW5vKTsKIAkJCQlnb3RvIGJhaWw7CkBAIC0yMTksMjYgKzIyMywyNiBAQAogCQkJdW5zaWduZWQgcCwgcHAgPSAwOwogCQkJdW5zaWduZWQgY2hhciAqZCA9ICh1bnNpZ25lZCBjaGFyICopZG5vZGU7CiAJCQlpbnQgYiA9IDA7Ci0JCQlpZiAoZG5vZGUtPm1hZ2ljICE9IEROT0RFX01BR0lDKSB7CisJCQlpZiAobGUzMl90b19jcHUoZG5vZGUtPm1hZ2ljKSAhPSBETk9ERV9NQUdJQykgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBtYWdpYyBvbiBkbm9kZSAlMDh4Iiwgc2Vjbm8pOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KLQkJCWlmIChkbm9kZS0+c2VsZiAhPSBzZWNubykKLQkJCQlocGZzX2Vycm9yKHMsICJiYWQgc2VsZiBwb2ludGVyIG9uIGRub2RlICUwOHggc2VsZiA9ICUwOHgiLCBzZWNubywgZG5vZGUtPnNlbGYpOworCQkJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT5zZWxmKSAhPSBzZWNubykKKwkJCQlocGZzX2Vycm9yKHMsICJiYWQgc2VsZiBwb2ludGVyIG9uIGRub2RlICUwOHggc2VsZiA9ICUwOHgiLCBzZWNubywgbGUzMl90b19jcHUoZG5vZGUtPnNlbGYpKTsKIAkJCS8qIENoZWNrIGRpcmVudHMgLSBiYWQgZGlyZW50cyB3b3VsZCBjYXVzZSBpbmZpbml0ZQogCQkJICAgbG9vcHMgb3Igc2hvb3RpbmcgdG8gbWVtb3J5ICovCi0JCQlpZiAoZG5vZGUtPmZpcnN0X2ZyZWUgPiAyMDQ4LyogfHwgZG5vZGUtPmZpcnN0X2ZyZWUgPCA4NCovKSB7Ci0JCQkJaHBmc19lcnJvcihzLCAiZG5vZGUgJTA4eCBoYXMgZmlyc3RfZnJlZSA9PSAlMDh4Iiwgc2Vjbm8sIGRub2RlLT5maXJzdF9mcmVlKTsKKwkJCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgPiAyMDQ4KSB7CisJCQkJaHBmc19lcnJvcihzLCAiZG5vZGUgJTA4eCBoYXMgZmlyc3RfZnJlZSA9PSAlMDh4Iiwgc2Vjbm8sIGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSk7CiAJCQkJZ290byBiYWlsOwogCQkJfQotCQkJZm9yIChwID0gMjA7IHAgPCBkbm9kZS0+Zmlyc3RfZnJlZTsgcCArPSBkW3BdICsgKGRbcCsxXSA8PCA4KSkgeworCQkJZm9yIChwID0gMjA7IHAgPCBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSk7IHAgKz0gZFtwXSArIChkW3ArMV0gPDwgOCkpIHsKIAkJCQlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlID0gKHN0cnVjdCBocGZzX2RpcmVudCAqKSgoY2hhciAqKWRub2RlICsgcCk7Ci0JCQkJaWYgKGRlLT5sZW5ndGggPiAyOTIgfHwgKGRlLT5sZW5ndGggPCAzMikgfHwgKGRlLT5sZW5ndGggJiAzKSB8fCBwICsgZGUtPmxlbmd0aCA+IDIwNDgpIHsKKwkJCQlpZiAobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgPiAyOTIgfHwgKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpIDwgMzIpIHx8IChsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAmIDMpIHx8IHAgKyBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSA+IDIwNDgpIHsKIAkJCQkJaHBmc19lcnJvcihzLCAiYmFkIGRpcmVudCBzaXplIGluIGRub2RlICUwOHgsIGRpcmVudCAlMDN4LCBsYXN0ICUwM3giLCBzZWNubywgcCwgcHApOwogCQkJCQlnb3RvIGJhaWw7CiAJCQkJfQotCQkJCWlmICgoKDMxICsgZGUtPm5hbWVsZW4gKyBkZS0+ZG93bio0ICsgMykgJiB+MykgIT0gZGUtPmxlbmd0aCkgewotCQkJCQlpZiAoKCgzMSArIGRlLT5uYW1lbGVuICsgZGUtPmRvd24qNCArIDMpICYgfjMpIDwgZGUtPmxlbmd0aCAmJiBzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSBnb3RvIG9rOworCQkJCWlmICgoKDMxICsgZGUtPm5hbWVsZW4gKyBkZS0+ZG93bio0ICsgMykgJiB+MykgIT0gbGUxNl90b19jcHUoZGUtPmxlbmd0aCkpIHsKKwkJCQkJaWYgKCgoMzEgKyBkZS0+bmFtZWxlbiArIGRlLT5kb3duKjQgKyAzKSAmIH4zKSA8IGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpICYmIHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpIGdvdG8gb2s7CiAJCQkJCWhwZnNfZXJyb3IocywgIm5hbWVsZW4gZG9lcyBub3QgbWF0Y2ggZGlyZW50IHNpemUgaW4gZG5vZGUgJTA4eCwgZGlyZW50ICUwM3gsIGxhc3QgJTAzeCIsIHNlY25vLCBwLCBwcCk7CiAJCQkJCWdvdG8gYmFpbDsKIAkJCQl9CkBAIC0yNTEsNyArMjU1LDcgQEAKIAkJCQlwcCA9IHA7CiAJCQkJCiAJCQl9Ci0JCQlpZiAocCAhPSBkbm9kZS0+Zmlyc3RfZnJlZSkgeworCQkJaWYgKHAgIT0gbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpKSB7CiAJCQkJaHBmc19lcnJvcihzLCAic2l6ZSBvbiBsYXN0IGRpcmVudCBkb2VzIG5vdCBtYXRjaCBmaXJzdF9mcmVlOyBkbm9kZSAlMDh4Iiwgc2Vjbm8pOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KQEAgLTI3Nyw3ICsyODEsNyBAQAogCWlmICghZm5vZGUpCiAJCXJldHVybiAwOwogCi0JZG5vID0gZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubzsKKwlkbm8gPSBsZTMyX3RvX2NwdShmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKTsKIAlicmVsc2UoYmgpOwogCXJldHVybiBkbm87CiB9CmRpZmYgLS1naXQgYS9mcy9ocGZzL25hbWUuYyBiL2ZzL2hwZnMvbmFtZS5jCmluZGV4IGYyNDczNmQuLjlhY2RmMzMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbmFtZS5jCisrKyBiL2ZzL2hwZnMvbmFtZS5jCkBAIC04LDM5ICs4LDYgQEAKIAogI2luY2x1ZGUgImhwZnNfZm4uaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgKnRleHRfcG9zdGZpeFtdPXsKLSIuQVNNIiwgIi5CQVMiLCAiLkJBVCIsICIuQyIsICIuQ0MiLCAiLkNGRyIsICIuQ01EIiwgIi5DT04iLCAiLkNQUCIsICIuREVGIiwKLSIuRE9DIiwgIi5EUFIiLCAiLkVSWCIsICIuSCIsICIuSFBQIiwgIi5IVE0iLCAiLkhUTUwiLCAiLkpBVkEiLCAiLkxPRyIsICIuUEFTIiwKLSIuUkMiLCAiLlRFWCIsICIuVFhUIiwgIi5ZIiwgIiJ9OwotCi1zdGF0aWMgY29uc3QgY2hhciAqdGV4dF9wcmVmaXhbXT17Ci0iQVVUT0VYRUMuIiwgIkNIQU5HRVMiLCAiQ09QWUlORyIsICJDT05GSUcuIiwgIkNSRURJVFMiLCAiRkFRIiwgIkZJTEVfSUQuRElaIiwKLSJNQUtFRklMRSIsICJSRUFELk1FIiwgIlJFQURNRSIsICJURVJNQ0FQIiwgIiJ9OwotCi12b2lkIGhwZnNfZGVjaWRlX2NvbnYoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgbGVuKQotewotCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfaW5vZGUgPSBocGZzX2koaW5vZGUpOwotCWludCBpOwotCWlmIChocGZzX2lub2RlLT5pX2NvbnYgIT0gQ09OVl9BVVRPKSByZXR1cm47Ci0JZm9yIChpID0gMDsgKnRleHRfcG9zdGZpeFtpXTsgaSsrKSB7Ci0JCWludCBsID0gc3RybGVuKHRleHRfcG9zdGZpeFtpXSk7Ci0JCWlmIChsIDw9IGxlbikKLQkJCWlmICghaHBmc19jb21wYXJlX25hbWVzKGlub2RlLT5pX3NiLCB0ZXh0X3Bvc3RmaXhbaV0sIGwsIG5hbWUgKyBsZW4gLSBsLCBsLCAwKSkKLQkJCQlnb3RvIHRleHQ7Ci0JfQotCWZvciAoaSA9IDA7ICp0ZXh0X3ByZWZpeFtpXTsgaSsrKSB7Ci0JCWludCBsID0gc3RybGVuKHRleHRfcHJlZml4W2ldKTsKLQkJaWYgKGwgPD0gbGVuKQotCQkJaWYgKCFocGZzX2NvbXBhcmVfbmFtZXMoaW5vZGUtPmlfc2IsIHRleHRfcHJlZml4W2ldLCBsLCBuYW1lLCBsLCAwKSkKLQkJCQlnb3RvIHRleHQ7Ci0JfQotCWhwZnNfaW5vZGUtPmlfY29udiA9IENPTlZfQklOQVJZOwotCXJldHVybjsKLQl0ZXh0OgotCWhwZnNfaW5vZGUtPmlfY29udiA9IENPTlZfVEVYVDsKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG5vdF9hbGxvd2VkX2NoYXIodW5zaWduZWQgY2hhciBjKQogewogCXJldHVybiBjPCcgJyB8fCBjPT0nIicgfHwgYz09JyonIHx8IGM9PScvJyB8fCBjPT0nOicgfHwgYz09JzwnIHx8CmRpZmYgLS1naXQgYS9mcy9ocGZzL25hbWVpLmMgYi9mcy9ocGZzL25hbWVpLmMKaW5kZXggZDVmOGM4YS4uMWYwNTgzOSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9uYW1laS5jCisrKyBiL2ZzL2hwZnMvbmFtZWkuYwpAQCAtMjksNyArMjksNyBAQAogCWZub2RlID0gaHBmc19hbGxvY19mbm9kZShkaXItPmlfc2IsIGhwZnNfaShkaXIpLT5pX2RubywgJmZubywgJmJoKTsKIAlpZiAoIWZub2RlKQogCQlnb3RvIGJhaWw7Ci0JZG5vZGUgPSBocGZzX2FsbG9jX2Rub2RlKGRpci0+aV9zYiwgZm5vLCAmZG5vLCAmcWJoMCwgMSk7CisJZG5vZGUgPSBocGZzX2FsbG9jX2Rub2RlKGRpci0+aV9zYiwgZm5vLCAmZG5vLCAmcWJoMCk7CiAJaWYgKCFkbm9kZSkKIAkJZ290byBiYWlsMTsKIAltZW1zZXQoJmRlZSwgMCwgc2l6ZW9mIGRlZSk7CkBAIC0zNyw4ICszNyw4IEBACiAJaWYgKCEobW9kZSAmIDAyMjIpKSBkZWUucmVhZF9vbmx5ID0gMTsKIAkvKmRlZS5hcmNoaXZlID0gMDsqLwogCWRlZS5oaWRkZW4gPSBuYW1lWzBdID09ICcuJzsKLQlkZWUuZm5vZGUgPSBmbm87Ci0JZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKTsKKwlkZWUuZm5vZGUgPSBjcHVfdG9fbGUzMihmbm8pOworCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSkpOwogCXJlc3VsdCA9IG5ld19pbm9kZShkaXItPmlfc2IpOwogCWlmICghcmVzdWx0KQogCQlnb3RvIGJhaWwyOwpAQCAtNDYsNyArNDYsNyBAQAogCXJlc3VsdC0+aV9pbm8gPSBmbm87CiAJaHBmc19pKHJlc3VsdCktPmlfcGFyZW50X2RpciA9IGRpci0+aV9pbm87CiAJaHBmc19pKHJlc3VsdCktPmlfZG5vID0gZG5vOwotCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlZS5jcmVhdGlvbl9kYXRlKTsKKwlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZWUuY3JlYXRpb25fZGF0ZSkpOwogCXJlc3VsdC0+aV9jdGltZS50dl9uc2VjID0gMDsgCiAJcmVzdWx0LT5pX210aW1lLnR2X25zZWMgPSAwOyAKIAlyZXN1bHQtPmlfYXRpbWUudHZfbnNlYyA9IDA7IApAQCAtNjAsOCArNjAsNyBAQAogCWlmIChkZWUucmVhZF9vbmx5KQogCQlyZXN1bHQtPmlfbW9kZSAmPSB+MDIyMjsKIAotCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlLCAwKTsKKwlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwzOwogCWlmIChyID09IC0xKSB7CkBAIC03MCwyMSArNjksMjEgQEAKIAl9CiAJZm5vZGUtPmxlbiA9IGxlbjsKIAltZW1jcHkoZm5vZGUtPm5hbWUsIG5hbWUsIGxlbiA+IDE1ID8gMTUgOiBsZW4pOwotCWZub2RlLT51cCA9IGRpci0+aV9pbm87CisJZm5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZGlyLT5pX2lubyk7CiAJZm5vZGUtPmRpcmZsYWcgPSAxOwogCWZub2RlLT5idHJlZS5uX2ZyZWVfbm9kZXMgPSA3OwogCWZub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgPSAxOwotCWZub2RlLT5idHJlZS5maXJzdF9mcmVlID0gMHgxNDsKLQlmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gZG5vOwotCWZub2RlLT51LmV4dGVybmFsWzBdLmZpbGVfc2Vjbm8gPSAtMTsKKwlmbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDB4MTQpOworCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBjcHVfdG9fbGUzMihkbm8pOworCWZub2RlLT51LmV4dGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CiAJZG5vZGUtPnJvb3RfZG5vZGUgPSAxOwotCWRub2RlLT51cCA9IGZubzsKKwlkbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihmbm8pOwogCWRlID0gaHBmc19hZGRfZGUoZGlyLT5pX3NiLCBkbm9kZSwgIlwwMDFcMDAxIiwgMiwgMCk7Ci0JZGUtPmNyZWF0aW9uX2RhdGUgPSBkZS0+d3JpdGVfZGF0ZSA9IGRlLT5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKTsKKwlkZS0+Y3JlYXRpb25fZGF0ZSA9IGRlLT53cml0ZV9kYXRlID0gZGUtPnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpKTsKIAlpZiAoIShtb2RlICYgMDIyMikpIGRlLT5yZWFkX29ubHkgPSAxOwogCWRlLT5maXJzdCA9IGRlLT5kaXJlY3RvcnkgPSAxOwogCS8qZGUtPmhpZGRlbiA9IGRlLT5zeXN0ZW0gPSAwOyovCi0JZGUtPmZub2RlID0gZm5vOworCWRlLT5mbm9kZSA9IGNwdV90b19sZTMyKGZubyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiAJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgwKTsKQEAgLTEwMSwxMSArMTAwLDkgQEAKIAkJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAl9CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gMDsKIGJhaWwzOgotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWlwdXQocmVzdWx0KTsKIGJhaWwyOgogCWhwZnNfYnJlbHNlNCgmcWJoMCk7CkBAIC0xNDAsOCArMTM3LDggQEAKIAlpZiAoIShtb2RlICYgMDIyMikpIGRlZS5yZWFkX29ubHkgPSAxOwogCWRlZS5hcmNoaXZlID0gMTsKIAlkZWUuaGlkZGVuID0gbmFtZVswXSA9PSAnLic7Ci0JZGVlLmZub2RlID0gZm5vOwotCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSk7CisJZGVlLmZub2RlID0gY3B1X3RvX2xlMzIoZm5vKTsKKwlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpKTsKIAogCXJlc3VsdCA9IG5ld19pbm9kZShkaXItPmlfc2IpOwogCWlmICghcmVzdWx0KQpAQCAtMTU0LDkgKzE1MSw4IEBACiAJcmVzdWx0LT5pX29wID0gJmhwZnNfZmlsZV9pb3BzOwogCXJlc3VsdC0+aV9mb3AgPSAmaHBmc19maWxlX29wczsKIAlyZXN1bHQtPmlfbmxpbmsgPSAxOwotCWhwZnNfZGVjaWRlX2NvbnYocmVzdWx0LCBuYW1lLCBsZW4pOwogCWhwZnNfaShyZXN1bHQpLT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwotCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlZS5jcmVhdGlvbl9kYXRlKTsKKwlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZWUuY3JlYXRpb25fZGF0ZSkpOwogCXJlc3VsdC0+aV9jdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX2F0aW1lLnR2X25zZWMgPSAwOwpAQCAtMTY4LDggKzE2NCw3IEBACiAJcmVzdWx0LT5pX2RhdGEuYV9vcHMgPSAmaHBmc19hb3BzOwogCWhwZnNfaShyZXN1bHQpLT5tbXVfcHJpdmF0ZSA9IDA7CiAKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSwgMCk7CisJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSk7CiAJaWYgKHIgPT0gMSkKIAkJZ290byBiYWlsMjsKIAlpZiAociA9PSAtMSkgewpAQCAtMTc4LDcgKzE3Myw3IEBACiAJfQogCWZub2RlLT5sZW4gPSBsZW47CiAJbWVtY3B5KGZub2RlLT5uYW1lLCBuYW1lLCBsZW4gPiAxNSA/IDE1IDogbGVuKTsKLQlmbm9kZS0+dXAgPSBkaXItPmlfaW5vOworCWZub2RlLT51cCA9IGNwdV90b19sZTMyKGRpci0+aV9pbm8pOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwogCkBAIC0xOTMsMTIgKzE4OCwxMCBAQAogCQlocGZzX3dyaXRlX2lub2RlX25vbG9jayhyZXN1bHQpOwogCX0KIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgcmVzdWx0KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiAwOwogCiBiYWlsMjoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlpcHV0KHJlc3VsdCk7CiBiYWlsMToKIAlicmVsc2UoYmgpOwpAQCAtMjMyLDggKzIyNSw4IEBACiAJaWYgKCEobW9kZSAmIDAyMjIpKSBkZWUucmVhZF9vbmx5ID0gMTsKIAlkZWUuYXJjaGl2ZSA9IDE7CiAJZGVlLmhpZGRlbiA9IG5hbWVbMF0gPT0gJy4nOwotCWRlZS5mbm9kZSA9IGZubzsKLQlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpOworCWRlZS5mbm9kZSA9IGNwdV90b19sZTMyKGZubyk7CisJZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAKIAlyZXN1bHQgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKIAlpZiAoIXJlc3VsdCkKQEAgLTI0Miw3ICsyMzUsNyBAQAogCWhwZnNfaW5pdF9pbm9kZShyZXN1bHQpOwogCXJlc3VsdC0+aV9pbm8gPSBmbm87CiAJaHBmc19pKHJlc3VsdCktPmlfcGFyZW50X2RpciA9IGRpci0+aV9pbm87Ci0JcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGVlLmNyZWF0aW9uX2RhdGUpOworCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlZS5jcmVhdGlvbl9kYXRlKSk7CiAJcmVzdWx0LT5pX2N0aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfYXRpbWUudHZfbnNlYyA9IDA7CkBAIC0yNTQsOCArMjQ3LDcgQEAKIAlyZXN1bHQtPmlfYmxvY2tzID0gMTsKIAlpbml0X3NwZWNpYWxfaW5vZGUocmVzdWx0LCBtb2RlLCByZGV2KTsKIAotCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlLCAwKTsKKwlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwyOwogCWlmIChyID09IC0xKSB7CkBAIC0yNjQsMTkgKzI1NiwxNyBAQAogCX0KIAlmbm9kZS0+bGVuID0gbGVuOwogCW1lbWNweShmbm9kZS0+bmFtZSwgbmFtZSwgbGVuID4gMTUgPyAxNSA6IGxlbik7Ci0JZm5vZGUtPnVwID0gZGlyLT5pX2lubzsKKwlmbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihkaXItPmlfaW5vKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAKIAlpbnNlcnRfaW5vZGVfaGFzaChyZXN1bHQpOwogCiAJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgcmVzdWx0KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlicmVsc2UoYmgpOwogCWhwZnNfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIDA7CiBiYWlsMjoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlpcHV0KHJlc3VsdCk7CiBiYWlsMToKIAlicmVsc2UoYmgpOwpAQCAtMzEwLDggKzMwMCw4IEBACiAJbWVtc2V0KCZkZWUsIDAsIHNpemVvZiBkZWUpOwogCWRlZS5hcmNoaXZlID0gMTsKIAlkZWUuaGlkZGVuID0gbmFtZVswXSA9PSAnLic7Ci0JZGVlLmZub2RlID0gZm5vOwotCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSk7CisJZGVlLmZub2RlID0gY3B1X3RvX2xlMzIoZm5vKTsKKwlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpKTsKIAogCXJlc3VsdCA9IG5ld19pbm9kZShkaXItPmlfc2IpOwogCWlmICghcmVzdWx0KQpAQCAtMzE5LDcgKzMwOSw3IEBACiAJcmVzdWx0LT5pX2lubyA9IGZubzsKIAlocGZzX2luaXRfaW5vZGUocmVzdWx0KTsKIAlocGZzX2kocmVzdWx0KS0+aV9wYXJlbnRfZGlyID0gZGlyLT5pX2lubzsKLQlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZWUuY3JlYXRpb25fZGF0ZSk7CisJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGVlLmNyZWF0aW9uX2RhdGUpKTsKIAlyZXN1bHQtPmlfY3RpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX210aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9hdGltZS50dl9uc2VjID0gMDsKQEAgLTMzMyw4ICszMjMsNyBAQAogCXJlc3VsdC0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAlyZXN1bHQtPmlfZGF0YS5hX29wcyA9ICZocGZzX3N5bWxpbmtfYW9wczsKIAotCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlLCAwKTsKKwlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwyOwogCWlmIChyID09IC0xKSB7CkBAIC0zNDMsNyArMzMyLDcgQEAKIAl9CiAJZm5vZGUtPmxlbiA9IGxlbjsKIAltZW1jcHkoZm5vZGUtPm5hbWUsIG5hbWUsIGxlbiA+IDE1ID8gMTUgOiBsZW4pOwotCWZub2RlLT51cCA9IGRpci0+aV9pbm87CisJZm5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZGlyLT5pX2lubyk7CiAJaHBmc19zZXRfZWEocmVzdWx0LCBmbm9kZSwgIlNZTUxJTksiLCBzeW1saW5rLCBzdHJsZW4oc3ltbGluaykpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwpAQCAtMzUyLDExICszNDEsOSBAQAogCiAJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgcmVzdWx0KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiAwOwogYmFpbDI6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaXB1dChyZXN1bHQpOwogYmFpbDE6CiAJYnJlbHNlKGJoKTsKQEAgLTM3NCw3ICszNjEsNiBAQAogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlkbm9kZV9zZWNubyBkbm87Ci0JZm5vZGVfc2Vjbm8gZm5vOwogCWludCByOwogCWludCByZXAgPSAwOwogCWludCBlcnI7CkBAIC0zODIsOCArMzY4LDYgQEAKIAlocGZzX2xvY2soZGlyLT5pX3NiKTsKIAlocGZzX2FkanVzdF9sZW5ndGgobmFtZSwgJmxlbik7CiBhZ2FpbjoKLQltdXRleF9sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWVyciA9IC1FTk9FTlQ7CiAJZGUgPSBtYXBfZGlyZW50KGRpciwgaHBmc19pKGRpciktPmlfZG5vLCBuYW1lLCBsZW4sICZkbm8sICZxYmgpOwogCWlmICghZGUpCkBAIC0zOTcsNyArMzgxLDYgQEAKIAlpZiAoZGUtPmRpcmVjdG9yeSkKIAkJZ290byBvdXQxOwogCi0JZm5vID0gZGUtPmZub2RlOwogCXIgPSBocGZzX3JlbW92ZV9kaXJlbnQoZGlyLCBkbm8sIGRlLCAmcWJoLCAxKTsKIAlzd2l0Y2ggKHIpIHsKIAljYXNlIDE6CkBAIC00MTAsOCArMzkzLDYgQEAKIAkJaWYgKHJlcCsrKQogCQkJYnJlYWs7CiAKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JCW11dGV4X3VubG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwogCQlkZW50cnlfdW5oYXNoKGRlbnRyeSk7CiAJCWlmICghZF91bmhhc2hlZChkZW50cnkpKSB7CiAJCQlkcHV0KGRlbnRyeSk7CkBAIC00NDUsOCArNDI2LDYgQEAKIG91dDE6CiAJaHBmc19icmVsc2U0KCZxYmgpOwogb3V0OgotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwogCWhwZnNfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ1OSwxNSArNDM4LDEyIEBACiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWRub2RlX3NlY25vIGRubzsKLQlmbm9kZV9zZWNubyBmbm87CiAJaW50IG5faXRlbXMgPSAwOwogCWludCBlcnI7CiAJaW50IHI7CiAKIAlocGZzX2FkanVzdF9sZW5ndGgobmFtZSwgJmxlbik7CiAJaHBmc19sb2NrKGRpci0+aV9zYik7Ci0JbXV0ZXhfbG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwotCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAllcnIgPSAtRU5PRU5UOwogCWRlID0gbWFwX2RpcmVudChkaXIsIGhwZnNfaShkaXIpLT5pX2RubywgbmFtZSwgbGVuLCAmZG5vLCAmcWJoKTsKIAlpZiAoIWRlKQpAQCAtNDg2LDcgKzQ2Miw2IEBACiAJaWYgKG5faXRlbXMpCiAJCWdvdG8gb3V0MTsKIAotCWZubyA9IGRlLT5mbm9kZTsKIAlyID0gaHBmc19yZW1vdmVfZGlyZW50KGRpciwgZG5vLCBkZSwgJnFiaCwgMSk7CiAJc3dpdGNoIChyKSB7CiAJY2FzZSAxOgpAQCAtNTA1LDggKzQ4MCw2IEBACiBvdXQxOgogCWhwZnNfYnJlbHNlNCgmcWJoKTsKIG91dDoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC01NjgsMTIgKzU0MSw2IEBACiAKIAlocGZzX2xvY2soaS0+aV9zYik7CiAJLyogb3JkZXIgZG9lc24ndCBtYXR0ZXIsIGR1ZSB0byBWRlMgZXhjbHVzaW9uICovCi0JbXV0ZXhfbG9jaygmaHBmc19pKGkpLT5pX3BhcmVudF9tdXRleCk7Ci0JaWYgKG5ld19pbm9kZSkKLQkJbXV0ZXhfbG9jaygmaHBmc19pKG5ld19pbm9kZSktPmlfcGFyZW50X211dGV4KTsKLQltdXRleF9sb2NrKCZocGZzX2kob2xkX2RpciktPmlfbXV0ZXgpOwotCWlmIChuZXdfZGlyICE9IG9sZF9kaXIpCi0JCW11dGV4X2xvY2soJmhwZnNfaShuZXdfZGlyKS0+aV9tdXRleCk7CiAJCiAJLyogRXJtPyBNb3Zpbmcgb3ZlciB0aGUgZW1wdHkgbm9uLWJ1c3kgZGlyZWN0b3J5IGlzIHBlcmZlY3RseSBsZWdhbCAqLwogCWlmIChuZXdfaW5vZGUgJiYgU19JU0RJUihuZXdfaW5vZGUtPmlfbW9kZSkpIHsKQEAgLTYxMCw5ICs1NzcsNyBAQAogCiAJaWYgKG5ld19kaXIgPT0gb2xkX2RpcikgaHBmc19icmVsc2U0KCZxYmgpOwogCi0JaHBmc19sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwotCWlmICgociA9IGhwZnNfYWRkX2RpcmVudChuZXdfZGlyLCBuZXdfbmFtZSwgbmV3X2xlbiwgJmRlLCAxKSkpIHsKLQkJaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CisJaWYgKChyID0gaHBmc19hZGRfZGlyZW50KG5ld19kaXIsIG5ld19uYW1lLCBuZXdfbGVuLCAmZGUpKSkgewogCQlpZiAociA9PSAtMSkgaHBmc19lcnJvcihuZXdfZGlyLT5pX3NiLCAiaHBmc19yZW5hbWU6IGRpcmVudCBhbHJlYWR5IGV4aXN0cyEiKTsKIAkJZXJyID0gciA9PSAxID8gLUVOT1NQQyA6IC1FRlNFUlJPUjsKIAkJaWYgKG5ld19kaXIgIT0gb2xkX2RpcikgaHBmc19icmVsc2U0KCZxYmgpOwpAQCAtNjIxLDIwICs1ODYsMTcgQEAKIAkKIAlpZiAobmV3X2RpciA9PSBvbGRfZGlyKQogCQlpZiAoIShkZXAgPSBtYXBfZGlyZW50KG9sZF9kaXIsIGhwZnNfaShvbGRfZGlyKS0+aV9kbm8sIG9sZF9uYW1lLCBvbGRfbGVuLCAmZG5vLCAmcWJoKSkpIHsKLQkJCWhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCQkJaHBmc19lcnJvcihpLT5pX3NiLCAibG9va3VwIHN1Y2NlZWRlZCBidXQgbWFwIGRpcmVudCBmYWlsZWQgYXQgIzIiKTsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVuZDE7CiAJCX0KIAogCWlmICgociA9IGhwZnNfcmVtb3ZlX2RpcmVudChvbGRfZGlyLCBkbm8sIGRlcCwgJnFiaCwgMCkpKSB7Ci0JCWhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCQlocGZzX2Vycm9yKGktPmlfc2IsICJocGZzX3JlbmFtZTogY291bGQgbm90IHJlbW92ZSBkaXJlbnQiKTsKIAkJZXJyID0gciA9PSAyID8gLUVOT1NQQyA6IC1FRlNFUlJPUjsKIAkJZ290byBlbmQxOwogCX0KLQlocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKLQkKKwogCWVuZDoKIAlocGZzX2koaSktPmlfcGFyZW50X2RpciA9IG5ld19kaXItPmlfaW5vOwogCWlmIChTX0lTRElSKGktPmlfbW9kZSkpIHsKQEAgLTY0MiwyMiArNjA0LDE0IEBACiAJCWRyb3Bfbmxpbmsob2xkX2Rpcik7CiAJfQogCWlmICgoZm5vZGUgPSBocGZzX21hcF9mbm9kZShpLT5pX3NiLCBpLT5pX2lubywgJmJoKSkpIHsKLQkJZm5vZGUtPnVwID0gbmV3X2Rpci0+aV9pbm87CisJCWZub2RlLT51cCA9IGNwdV90b19sZTMyKG5ld19kaXItPmlfaW5vKTsKIAkJZm5vZGUtPmxlbiA9IG5ld19sZW47CiAJCW1lbWNweShmbm9kZS0+bmFtZSwgbmV3X25hbWUsIG5ld19sZW4+MTU/MTU6bmV3X2xlbik7CiAJCWlmIChuZXdfbGVuIDwgMTUpIG1lbXNldCgmZm5vZGUtPm5hbWVbbmV3X2xlbl0sIDAsIDE1IC0gbmV3X2xlbik7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJYnJlbHNlKGJoKTsKIAl9Ci0JaHBmc19pKGkpLT5pX2NvbnYgPSBocGZzX3NiKGktPmlfc2IpLT5zYl9jb252OwotCWhwZnNfZGVjaWRlX2NvbnYoaSwgbmV3X25hbWUsIG5ld19sZW4pOwogZW5kMToKLQlpZiAob2xkX2RpciAhPSBuZXdfZGlyKQotCQltdXRleF91bmxvY2soJmhwZnNfaShuZXdfZGlyKS0+aV9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2kob2xkX2RpciktPmlfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGkpLT5pX3BhcmVudF9tdXRleCk7Ci0JaWYgKG5ld19pbm9kZSkKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2kobmV3X2lub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwogCWhwZnNfdW5sb2NrKGktPmlfc2IpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9ocGZzL3N1cGVyLmMgYi9mcy9ocGZzL3N1cGVyLmMKaW5kZXggYzg5YjQwOC4uOTg1ODBhMyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9zdXBlci5jCisrKyBiL2ZzL2hwZnMvc3VwZXIuYwpAQCAtMTgsMTUgKzE4LDE2IEBACiAKIC8qIE1hcmsgdGhlIGZpbGVzeXN0ZW0gZGlydHksIHNvIHRoYXQgY2hrZHNrIGNoZWNrcyBpdCB3aGVuIG9zLzIgYm9vdGVkICovCiAKLXN0YXRpYyB2b2lkIG1hcmtfZGlydHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQorc3RhdGljIHZvaWQgbWFya19kaXJ0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGludCByZW1vdW50KQogewotCWlmIChocGZzX3NiKHMpLT5zYl9jaGtkc2sgJiYgIShzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCWlmIChocGZzX3NiKHMpLT5zYl9jaGtkc2sgJiYgKHJlbW91bnQgfHwgIShzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkpIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAkJc3RydWN0IGhwZnNfc3BhcmVfYmxvY2sgKnNiOwogCQlpZiAoKHNiID0gaHBmc19tYXBfc2VjdG9yKHMsIDE3LCAmYmgsIDApKSkgewogCQkJc2ItPmRpcnR5ID0gMTsKIAkJCXNiLT5vbGRfd3JvdGUgPSAwOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOworCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQkJYnJlbHNlKGJoKTsKIAkJfQogCX0KQEAgLTQwLDEwICs0MSwxMiBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGhwZnNfc3BhcmVfYmxvY2sgKnNiOwogCWlmIChzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSByZXR1cm47CisJc3luY19ibG9ja2RldihzLT5zX2JkZXYpOwogCWlmICgoc2IgPSBocGZzX21hcF9zZWN0b3IocywgMTcsICZiaCwgMCkpKSB7CiAJCXNiLT5kaXJ0eSA9IGhwZnNfc2IocyktPnNiX2Noa2RzayA+IDEgLSBocGZzX3NiKHMpLT5zYl93YXNfZXJyb3I7CiAJCXNiLT5vbGRfd3JvdGUgPSBocGZzX3NiKHMpLT5zYl9jaGtkc2sgPj0gMiAmJiAhaHBmc19zYihzKS0+c2Jfd2FzX2Vycm9yOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAkJYnJlbHNlKGJoKTsKIAl9CiB9CkBAIC02MywxMyArNjYsMTMgQEAKIAlpZiAoIWhwZnNfc2IocyktPnNiX3dhc19lcnJvcikgewogCQlpZiAoaHBmc19zYihzKS0+c2JfZXJyID09IDIpIHsKIAkJCXByaW50aygiOyBjcmFzaGluZyB0aGUgc3lzdGVtIGJlY2F1c2UgeW91IHdhbnRlZCBpdFxuIik7Ci0JCQltYXJrX2RpcnR5KHMpOworCQkJbWFya19kaXJ0eShzLCAwKTsKIAkJCXBhbmljKCJIUEZTIHBhbmljIik7CiAJCX0gZWxzZSBpZiAoaHBmc19zYihzKS0+c2JfZXJyID09IDEpIHsKIAkJCWlmIChzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSBwcmludGsoIjsgYWxyZWFkeSBtb3VudGVkIHJlYWQtb25seVxuIik7CiAJCQllbHNlIHsKIAkJCQlwcmludGsoIjsgcmVtb3VudGluZyByZWFkLW9ubHlcbiIpOwotCQkJCW1hcmtfZGlydHkocyk7CisJCQkJbWFya19kaXJ0eShzLCAwKTsKIAkJCQlzLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAkJCX0KIAkJfSBlbHNlIGlmIChzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSBwcmludGsoIjsgZ29pbmcgb24gLSBidXQgYW55dGhpbmcgd29uJ3QgYmUgZGVzdHJveWVkIGJlY2F1c2UgaXQncyByZWFkLW9ubHlcbiIpOwpAQCAtMTAyLDkgKzEwNSwxMiBAQAogewogCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CiAKKwlocGZzX2xvY2socyk7CisJdW5tYXJrX2RpcnR5KHMpOworCWhwZnNfdW5sb2NrKHMpOworCiAJa2ZyZWUoc2JpLT5zYl9jcF90YWJsZSk7CiAJa2ZyZWUoc2JpLT5zYl9ibXBfZGlyKTsKLQl1bm1hcmtfZGlydHkocyk7CiAJcy0+c19mc19pbmZvID0gTlVMTDsKIAlrZnJlZShzYmkpOwogfQpAQCAtMTI5LDcgKzEzNSw3IEBACiAJbl9iYW5kcyA9IChocGZzX3NiKHMpLT5zYl9mc19zaXplICsgMHgzZmZmKSA+PiAxNDsKIAljb3VudCA9IDA7CiAJZm9yIChuID0gMDsgbiA8IG5fYmFuZHM7IG4rKykKLQkJY291bnQgKz0gaHBmc19jb3VudF9vbmVfYml0bWFwKHMsIGhwZnNfc2IocyktPnNiX2JtcF9kaXJbbl0pOworCQljb3VudCArPSBocGZzX2NvdW50X29uZV9iaXRtYXAocywgbGUzMl90b19jcHUoaHBmc19zYihzKS0+c2JfYm1wX2RpcltuXSkpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTg4LDggKzE5NCw2IEBACiB7CiAJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqKSBmb287CiAKLQltdXRleF9pbml0KCZlaS0+aV9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmZWktPmlfcGFyZW50X211dGV4KTsKIAlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogCkBAIC0yMTgsNyArMjIyLDYgQEAKIAogZW51bSB7CiAJT3B0X2hlbHAsIE9wdF91aWQsIE9wdF9naWQsIE9wdF91bWFzaywgT3B0X2Nhc2VfbG93ZXIsIE9wdF9jYXNlX2FzaXMsCi0JT3B0X2NvbnZfYmluYXJ5LCBPcHRfY29udl90ZXh0LCBPcHRfY29udl9hdXRvLAogCU9wdF9jaGVja19ub25lLCBPcHRfY2hlY2tfbm9ybWFsLCBPcHRfY2hlY2tfc3RyaWN0LAogCU9wdF9lcnJfY29udCwgT3B0X2Vycl9ybywgT3B0X2Vycl9wYW5pYywKIAlPcHRfZWFzX25vLCBPcHRfZWFzX3JvLCBPcHRfZWFzX3J3LApAQCAtMjMzLDkgKzIzNiw2IEBACiAJe09wdF91bWFzaywgInVtYXNrPSVvIn0sCiAJe09wdF9jYXNlX2xvd2VyLCAiY2FzZT1sb3dlciJ9LAogCXtPcHRfY2FzZV9hc2lzLCAiY2FzZT1hc2lzIn0sCi0Je09wdF9jb252X2JpbmFyeSwgImNvbnY9YmluYXJ5In0sCi0Je09wdF9jb252X3RleHQsICJjb252PXRleHQifSwKLQl7T3B0X2NvbnZfYXV0bywgImNvbnY9YXV0byJ9LAogCXtPcHRfY2hlY2tfbm9uZSwgImNoZWNrPW5vbmUifSwKIAl7T3B0X2NoZWNrX25vcm1hbCwgImNoZWNrPW5vcm1hbCJ9LAogCXtPcHRfY2hlY2tfc3RyaWN0LCAiY2hlY2s9c3RyaWN0In0sCkBAIC0yNTMsNyArMjUzLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgcGFyc2Vfb3B0cyhjaGFyICpvcHRzLCB1aWRfdCAqdWlkLCBnaWRfdCAqZ2lkLCB1bW9kZV90ICp1bWFzaywKLQkJICAgICAgaW50ICpsb3dlcmNhc2UsIGludCAqY29udiwgaW50ICplYXMsIGludCAqY2hrLCBpbnQgKmVycnMsCisJCSAgICAgIGludCAqbG93ZXJjYXNlLCBpbnQgKmVhcywgaW50ICpjaGssIGludCAqZXJycywKIAkJICAgICAgaW50ICpjaGtkc2ssIGludCAqdGltZXNoaWZ0KQogewogCWNoYXIgKnA7CkBAIC0yOTUsMTUgKzI5NSw2IEBACiAJCWNhc2UgT3B0X2Nhc2VfYXNpczoKIAkJCSpsb3dlcmNhc2UgPSAwOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X2NvbnZfYmluYXJ5OgotCQkJKmNvbnYgPSBDT05WX0JJTkFSWTsKLQkJCWJyZWFrOwotCQljYXNlIE9wdF9jb252X3RleHQ6Ci0JCQkqY29udiA9IENPTlZfVEVYVDsKLQkJCWJyZWFrOwotCQljYXNlIE9wdF9jb252X2F1dG86Ci0JCQkqY29udiA9IENPTlZfQVVUTzsKLQkJCWJyZWFrOwogCQljYXNlIE9wdF9jaGVja19ub25lOgogCQkJKmNoayA9IDA7CiAJCQlicmVhazsKQEAgLTM3MCw5ICszNjEsNiBAQAogICAgICAgdW1hc2s9eHh4ICAgICAgICAgc2V0IG1vZGUgb2YgZmlsZXMgdGhhdCBkb24ndCBoYXZlIG1vZGUgc3BlY2lmaWVkIGluIGVhc1xuXAogICAgICAgY2FzZT1sb3dlciAgICAgICAgbG93ZXJjYXNlIGFsbCBmaWxlc1xuXAogICAgICAgY2FzZT1hc2lzICAgICAgICAgZG8gbm90IGxvd2VyY2FzZSBmaWxlcyAoZGVmYXVsdClcblwKLSAgICAgIGNvbnY9YmluYXJ5ICAgICAgIGRvIG5vdCBjb252ZXJ0IENSL0xGIC0+IExGIChkZWZhdWx0KVxuXAotICAgICAgY29udj1hdXRvICAgICAgICAgY29udmVydCBvbmx5IGZpbGVzIHdpdGgga25vd24gdGV4dCBleHRlbnNpb25zXG5cCi0gICAgICBjb252PXRleHQgICAgICAgICBjb252ZXJ0IGFsbCBmaWxlc1xuXAogICAgICAgY2hlY2s9bm9uZSAgICAgICAgbm8gZnMgY2hlY2tzIC0ga2VybmVsIG1heSBjcmFzaCBvbiBjb3JydXB0ZWQgZmlsZXN5c3RlbVxuXAogICAgICAgY2hlY2s9bm9ybWFsICAgICAgZG8gc29tZSBjaGVja3MgLSBpdCBzaG91bGQgbm90IGNyYXNoIChkZWZhdWx0KVxuXAogICAgICAgY2hlY2s9c3RyaWN0ICAgICAgZG8gZXh0cmEgdGltZS1jb25zdW1pbmcgY2hlY2tzLCB1c2VkIGZvciBkZWJ1Z2dpbmdcblwKQEAgLTM5NCw3ICszODIsNyBAQAogCXVpZF90IHVpZDsKIAlnaWRfdCBnaWQ7CiAJdW1vZGVfdCB1bWFzazsKLQlpbnQgbG93ZXJjYXNlLCBjb252LCBlYXMsIGNoaywgZXJycywgY2hrZHNrLCB0aW1lc2hpZnQ7CisJaW50IGxvd2VyY2FzZSwgZWFzLCBjaGssIGVycnMsIGNoa2RzaywgdGltZXNoaWZ0OwogCWludCBvOwogCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CiAJY2hhciAqbmV3X29wdHMgPSBrc3RyZHVwKGRhdGEsIEdGUF9LRVJORUwpOwpAQCAtNDA1LDExICszOTMsMTEgQEAKIAlsb2NrX3N1cGVyKHMpOwogCXVpZCA9IHNiaS0+c2JfdWlkOyBnaWQgPSBzYmktPnNiX2dpZDsKIAl1bWFzayA9IDA3NzcgJiB+c2JpLT5zYl9tb2RlOwotCWxvd2VyY2FzZSA9IHNiaS0+c2JfbG93ZXJjYXNlOyBjb252ID0gc2JpLT5zYl9jb252OworCWxvd2VyY2FzZSA9IHNiaS0+c2JfbG93ZXJjYXNlOwogCWVhcyA9IHNiaS0+c2JfZWFzOyBjaGsgPSBzYmktPnNiX2NoazsgY2hrZHNrID0gc2JpLT5zYl9jaGtkc2s7CiAJZXJycyA9IHNiaS0+c2JfZXJyOyB0aW1lc2hpZnQgPSBzYmktPnNiX3RpbWVzaGlmdDsKIAotCWlmICghKG8gPSBwYXJzZV9vcHRzKGRhdGEsICZ1aWQsICZnaWQsICZ1bWFzaywgJmxvd2VyY2FzZSwgJmNvbnYsCisJaWYgKCEobyA9IHBhcnNlX29wdHMoZGF0YSwgJnVpZCwgJmdpZCwgJnVtYXNrLCAmbG93ZXJjYXNlLAogCSAgICAmZWFzLCAmY2hrLCAmZXJycywgJmNoa2RzaywgJnRpbWVzaGlmdCkpKSB7CiAJCXByaW50aygiSFBGUzogYmFkIG1vdW50IG9wdGlvbnMuXG4iKTsKIAkJZ290byBvdXRfZXJyOwpAQCAtNDI3LDExICs0MTUsMTEgQEAKIAogCXNiaS0+c2JfdWlkID0gdWlkOyBzYmktPnNiX2dpZCA9IGdpZDsKIAlzYmktPnNiX21vZGUgPSAwNzc3ICYgfnVtYXNrOwotCXNiaS0+c2JfbG93ZXJjYXNlID0gbG93ZXJjYXNlOyBzYmktPnNiX2NvbnYgPSBjb252OworCXNiaS0+c2JfbG93ZXJjYXNlID0gbG93ZXJjYXNlOwogCXNiaS0+c2JfZWFzID0gZWFzOyBzYmktPnNiX2NoayA9IGNoazsgc2JpLT5zYl9jaGtkc2sgPSBjaGtkc2s7CiAJc2JpLT5zYl9lcnIgPSBlcnJzOyBzYmktPnNiX3RpbWVzaGlmdCA9IHRpbWVzaGlmdDsKIAotCWlmICghKCpmbGFncyAmIE1TX1JET05MWSkpIG1hcmtfZGlydHkocyk7CisJaWYgKCEoKmZsYWdzICYgTVNfUkRPTkxZKSkgbWFya19kaXJ0eShzLCAxKTsKIAogCXJlcGxhY2VfbW91bnRfb3B0aW9ucyhzLCBuZXdfb3B0cyk7CiAKQEAgLTQ3MSw3ICs0NTksNyBAQAogCXVpZF90IHVpZDsKIAlnaWRfdCBnaWQ7CiAJdW1vZGVfdCB1bWFzazsKLQlpbnQgbG93ZXJjYXNlLCBjb252LCBlYXMsIGNoaywgZXJycywgY2hrZHNrLCB0aW1lc2hpZnQ7CisJaW50IGxvd2VyY2FzZSwgZWFzLCBjaGssIGVycnMsIGNoa2RzaywgdGltZXNoaWZ0OwogCiAJZG5vZGVfc2Vjbm8gcm9vdF9kbm87CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZSA9IE5VTEw7CkBAIC00NzksMTEgKzQ2Nyw2IEBACiAKIAlpbnQgbzsKIAotCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgewotCQlwcmludGsoS0VSTl9FUlIgIkhQRlMgaXMgbm90IFNNUCBzYWZlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJc2F2ZV9tb3VudF9vcHRpb25zKHMsIG9wdGlvbnMpOwogCiAJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwpAQCAtNDk1LDIwICs0NzgsMjAgQEAKIAlzYmktPnNiX2JtcF9kaXIgPSBOVUxMOwogCXNiaS0+c2JfY3BfdGFibGUgPSBOVUxMOwogCi0JbXV0ZXhfaW5pdCgmc2JpLT5ocGZzX2NyZWF0aW9uX2RlKTsKKwltdXRleF9pbml0KCZzYmktPmhwZnNfbXV0ZXgpOworCWhwZnNfbG9jayhzKTsKIAogCXVpZCA9IGN1cnJlbnRfdWlkKCk7CiAJZ2lkID0gY3VycmVudF9naWQoKTsKIAl1bWFzayA9IGN1cnJlbnRfdW1hc2soKTsKIAlsb3dlcmNhc2UgPSAwOwotCWNvbnYgPSBDT05WX0JJTkFSWTsKIAllYXMgPSAyOwogCWNoayA9IDE7CiAJZXJycyA9IDE7CiAJY2hrZHNrID0gMTsKIAl0aW1lc2hpZnQgPSAwOwogCi0JaWYgKCEobyA9IHBhcnNlX29wdHMob3B0aW9ucywgJnVpZCwgJmdpZCwgJnVtYXNrLCAmbG93ZXJjYXNlLCAmY29udiwKKwlpZiAoIShvID0gcGFyc2Vfb3B0cyhvcHRpb25zLCAmdWlkLCAmZ2lkLCAmdW1hc2ssICZsb3dlcmNhc2UsCiAJICAgICZlYXMsICZjaGssICZlcnJzLCAmY2hrZHNrLCAmdGltZXNoaWZ0KSkpIHsKIAkJcHJpbnRrKCJIUEZTOiBiYWQgbW91bnQgb3B0aW9ucy5cbiIpOwogCQlnb3RvIGJhaWwwOwpAQCAtNTI2LDkgKzUwOSw5IEBACiAJaWYgKCEoc3BhcmVibG9jayA9IGhwZnNfbWFwX3NlY3RvcihzLCAxNywgJmJoMiwgMCkpKSBnb3RvIGJhaWwzOwogCiAJLyogQ2hlY2sgbWFnaWNzICovCi0JaWYgKC8qYm9vdGJsb2NrLT5tYWdpYyAhPSBCQl9NQUdJQwotCSAgICB8fCovIHN1cGVyYmxvY2stPm1hZ2ljICE9IFNCX01BR0lDCi0JICAgIHx8IHNwYXJlYmxvY2stPm1hZ2ljICE9IFNQX01BR0lDKSB7CisJaWYgKC8qbGUxNl90b19jcHUoYm9vdGJsb2NrLT5tYWdpYykgIT0gQkJfTUFHSUMKKwkgICAgfHwqLyBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5tYWdpYykgIT0gU0JfTUFHSUMKKwkgICAgfHwgbGUzMl90b19jcHUoc3BhcmVibG9jay0+bWFnaWMpICE9IFNQX01BR0lDKSB7CiAJCWlmICghc2lsZW50KSBwcmludGsoIkhQRlM6IEJhZCBtYWdpYyAuLi4gcHJvYmFibHkgbm90IEhQRlNcbiIpOwogCQlnb3RvIGJhaWw0OwogCX0KQEAgLTU0OSwxOSArNTMyLDE4IEBACiAJcy0+c19vcCA9ICZocGZzX3NvcHM7CiAJcy0+c19kX29wID0gJmhwZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKLQlzYmktPnNiX3Jvb3QgPSBzdXBlcmJsb2NrLT5yb290OwotCXNiaS0+c2JfZnNfc2l6ZSA9IHN1cGVyYmxvY2stPm5fc2VjdG9yczsKLQlzYmktPnNiX2JpdG1hcHMgPSBzdXBlcmJsb2NrLT5iaXRtYXBzOwotCXNiaS0+c2JfZGlyYmFuZF9zdGFydCA9IHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0OwotCXNiaS0+c2JfZGlyYmFuZF9zaXplID0gc3VwZXJibG9jay0+bl9kaXJfYmFuZDsKLQlzYmktPnNiX2RtYXAgPSBzdXBlcmJsb2NrLT5kaXJfYmFuZF9iaXRtYXA7CisJc2JpLT5zYl9yb290ID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+cm9vdCk7CisJc2JpLT5zYl9mc19zaXplID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+bl9zZWN0b3JzKTsKKwlzYmktPnNiX2JpdG1hcHMgPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5iaXRtYXBzKTsKKwlzYmktPnNiX2RpcmJhbmRfc3RhcnQgPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCk7CisJc2JpLT5zYl9kaXJiYW5kX3NpemUgPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKTsKKwlzYmktPnNiX2RtYXAgPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9iaXRtYXApOwogCXNiaS0+c2JfdWlkID0gdWlkOwogCXNiaS0+c2JfZ2lkID0gZ2lkOwogCXNiaS0+c2JfbW9kZSA9IDA3NzcgJiB+dW1hc2s7CiAJc2JpLT5zYl9uX2ZyZWUgPSAtMTsKIAlzYmktPnNiX25fZnJlZV9kbm9kZXMgPSAtMTsKIAlzYmktPnNiX2xvd2VyY2FzZSA9IGxvd2VyY2FzZTsKLQlzYmktPnNiX2NvbnYgPSBjb252OwogCXNiaS0+c2JfZWFzID0gZWFzOwogCXNiaS0+c2JfY2hrID0gY2hrOwogCXNiaS0+c2JfY2hrZHNrID0gY2hrZHNrOwpAQCAtNTczLDcgKzU1NSw3IEBACiAJc2JpLT5zYl9tYXhfZndkX2FsbG9jID0gMHhmZmZmZmY7CiAJCiAJLyogTG9hZCBiaXRtYXAgZGlyZWN0b3J5ICovCi0JaWYgKCEoc2JpLT5zYl9ibXBfZGlyID0gaHBmc19sb2FkX2JpdG1hcF9kaXJlY3Rvcnkocywgc3VwZXJibG9jay0+Yml0bWFwcykpKQorCWlmICghKHNiaS0+c2JfYm1wX2RpciA9IGhwZnNfbG9hZF9iaXRtYXBfZGlyZWN0b3J5KHMsIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmJpdG1hcHMpKSkpCiAJCWdvdG8gYmFpbDQ7CiAJCiAJLyogQ2hlY2sgZm9yIGdlbmVyYWwgZnMgZXJyb3JzKi8KQEAgLTU5MSwyMCArNTczLDIwIEBACiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoMik7CiAJfQogCi0JaWYgKHNwYXJlYmxvY2stPmhvdGZpeGVzX3VzZWQgfHwgc3BhcmVibG9jay0+bl9zcGFyZXNfdXNlZCkgeworCWlmIChsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5ob3RmaXhlc191c2VkKSB8fCBsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5uX3NwYXJlc191c2VkKSkgewogCQlpZiAoZXJycyA+PSAyKSB7CiAJCQlwcmludGsoIkhQRlM6IEhvdGZpeGVzIG5vdCBzdXBwb3J0ZWQgaGVyZSwgdHJ5IGNoa2Rza1xuIik7Ci0JCQltYXJrX2RpcnR5KHMpOworCQkJbWFya19kaXJ0eShzLCAwKTsKIAkJCWdvdG8gYmFpbDQ7CiAJCX0KIAkJaHBmc19lcnJvcihzLCAiaG90Zml4ZXMgbm90IHN1cHBvcnRlZCBoZXJlLCB0cnkgY2hrZHNrIik7CiAJCWlmIChlcnJzID09IDApIHByaW50aygiSFBGUzogUHJvY2VlZGluZywgYnV0IHlvdXIgZmlsZXN5c3RlbSB3aWxsIGJlIHByb2JhYmx5IGNvcnJ1cHRlZCBieSB0aGlzIGRyaXZlci4uLlxuIik7CiAJCWVsc2UgcHJpbnRrKCJIUEZTOiBUaGlzIGRyaXZlciBtYXkgcmVhZCBiYWQgZmlsZXMgb3IgY3Jhc2ggd2hlbiBvcGVyYXRpbmcgb24gZGlzayB3aXRoIGhvdGZpeGVzLlxuIik7CiAJfQotCWlmIChzcGFyZWJsb2NrLT5uX2Rub2RlX3NwYXJlcyAhPSBzcGFyZWJsb2NrLT5uX2Rub2RlX3NwYXJlc19mcmVlKSB7CisJaWYgKGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPm5fZG5vZGVfc3BhcmVzKSAhPSBsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5uX2Rub2RlX3NwYXJlc19mcmVlKSkgewogCQlpZiAoZXJycyA+PSAyKSB7CiAJCQlwcmludGsoIkhQRlM6IFNwYXJlIGRub2RlcyB1c2VkLCB0cnkgY2hrZHNrXG4iKTsKLQkJCW1hcmtfZGlydHkocyk7CisJCQltYXJrX2RpcnR5KHMsIDApOwogCQkJZ290byBiYWlsNDsKIAkJfQogCQlocGZzX2Vycm9yKHMsICJ3YXJuaW5nOiBzcGFyZSBkbm9kZXMgdXNlZCwgdHJ5IGNoa2RzayIpOwpAQCAtNjEyLDI2ICs1OTQsMjYgQEAKIAl9CiAJaWYgKGNoaykgewogCQl1bnNpZ25lZCBhOwotCQlpZiAoc3VwZXJibG9jay0+ZGlyX2JhbmRfZW5kIC0gc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQgKyAxICE9IHN1cGVyYmxvY2stPm5fZGlyX2JhbmQgfHwKLQkJICAgIHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCA8IHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0IHx8IHN1cGVyYmxvY2stPm5fZGlyX2JhbmQgPiAweDQwMDApIHsKKwkJaWYgKGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCkgLSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCkgKyAxICE9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm5fZGlyX2JhbmQpIHx8CisJCSAgICBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQpIDwgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpIHx8IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm5fZGlyX2JhbmQpID4gMHg0MDAwKSB7CiAJCQlocGZzX2Vycm9yKHMsICJkaXIgYmFuZCBzaXplIG1pc21hdGNoOiBkaXJfYmFuZF9zdGFydD09JTA4eCwgZGlyX2JhbmRfZW5kPT0lMDh4LCBuX2Rpcl9iYW5kPT0lMDh4IiwKLQkJCQlzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCwgc3VwZXJibG9jay0+ZGlyX2JhbmRfZW5kLCBzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKTsKKwkJCQlsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCksIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCksIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm5fZGlyX2JhbmQpKTsKIAkJCWdvdG8gYmFpbDQ7CiAJCX0KIAkJYSA9IHNiaS0+c2JfZGlyYmFuZF9zaXplOwogCQlzYmktPnNiX2RpcmJhbmRfc2l6ZSA9IDA7Ci0JCWlmIChocGZzX2Noa19zZWN0b3JzKHMsIHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0LCBzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kLCAiZGlyX2JhbmQiKSB8fAotCQkgICAgaHBmc19jaGtfc2VjdG9ycyhzLCBzdXBlcmJsb2NrLT5kaXJfYmFuZF9iaXRtYXAsIDQsICJkaXJfYmFuZF9iaXRtYXAiKSB8fAotCQkgICAgaHBmc19jaGtfc2VjdG9ycyhzLCBzdXBlcmJsb2NrLT5iaXRtYXBzLCA0LCAiYml0bWFwcyIpKSB7Ci0JCQltYXJrX2RpcnR5KHMpOworCQlpZiAoaHBmc19jaGtfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCksIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm5fZGlyX2JhbmQpLCAiZGlyX2JhbmQiKSB8fAorCQkgICAgaHBmc19jaGtfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9iaXRtYXApLCA0LCAiZGlyX2JhbmRfYml0bWFwIikgfHwKKwkJICAgIGhwZnNfY2hrX3NlY3RvcnMocywgbGUzMl90b19jcHUoc3VwZXJibG9jay0+Yml0bWFwcyksIDQsICJiaXRtYXBzIikpIHsKKwkJCW1hcmtfZGlydHkocywgMCk7CiAJCQlnb3RvIGJhaWw0OwogCQl9CiAJCXNiaS0+c2JfZGlyYmFuZF9zaXplID0gYTsKIAl9IGVsc2UgcHJpbnRrKCJIUEZTOiBZb3UgcmVhbGx5IGRvbid0IHdhbnQgYW55IGNoZWNrcz8gWW91IGFyZSBjcmF6eS4uLlxuIik7CiAKIAkvKiBMb2FkIGNvZGUgcGFnZSB0YWJsZSAqLwotCWlmIChzcGFyZWJsb2NrLT5uX2NvZGVfcGFnZXMpCi0JCWlmICghKHNiaS0+c2JfY3BfdGFibGUgPSBocGZzX2xvYWRfY29kZV9wYWdlKHMsIHNwYXJlYmxvY2stPmNvZGVfcGFnZV9kaXIpKSkKKwlpZiAobGUzMl90b19jcHUoc3BhcmVibG9jay0+bl9jb2RlX3BhZ2VzKSkKKwkJaWYgKCEoc2JpLT5zYl9jcF90YWJsZSA9IGhwZnNfbG9hZF9jb2RlX3BhZ2UocywgbGUzMl90b19jcHUoc3BhcmVibG9jay0+Y29kZV9wYWdlX2RpcikpKSkKIAkJCXByaW50aygiSFBGUzogV2FybmluZzogY29kZSBwYWdlIHN1cHBvcnQgaXMgZGlzYWJsZWRcbiIpOwogCiAJYnJlbHNlKGJoMik7CkBAIC02NjAsMTMgKzY0MiwxMyBAQAogCWlmICghZGUpCiAJCWhwZnNfZXJyb3IocywgInVuYWJsZSB0byBmaW5kIHJvb3QgZGlyIik7CiAJZWxzZSB7Ci0JCXJvb3QtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGRlLT5yZWFkX2RhdGUpOworCQlyb290LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBsZTMyX3RvX2NwdShkZS0+cmVhZF9kYXRlKSk7CiAJCXJvb3QtPmlfYXRpbWUudHZfbnNlYyA9IDA7Ci0JCXJvb3QtPmlfbXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGRlLT53cml0ZV9kYXRlKTsKKwkJcm9vdC0+aV9tdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgbGUzMl90b19jcHUoZGUtPndyaXRlX2RhdGUpKTsKIAkJcm9vdC0+aV9tdGltZS50dl9uc2VjID0gMDsKLQkJcm9vdC0+aV9jdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgZGUtPmNyZWF0aW9uX2RhdGUpOworCQlyb290LT5pX2N0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBsZTMyX3RvX2NwdShkZS0+Y3JlYXRpb25fZGF0ZSkpOwogCQlyb290LT5pX2N0aW1lLnR2X25zZWMgPSAwOwotCQlocGZzX2kocm9vdCktPmlfZWFfc2l6ZSA9IGRlLT5lYV9zaXplOworCQlocGZzX2kocm9vdCktPmlfZWFfc2l6ZSA9IGxlMTZfdG9fY3B1KGRlLT5lYV9zaXplKTsKIAkJaHBmc19pKHJvb3QpLT5pX3BhcmVudF9kaXIgPSByb290LT5pX2lubzsKIAkJaWYgKHJvb3QtPmlfc2l6ZSA9PSAtMSkKIAkJCXJvb3QtPmlfc2l6ZSA9IDIwNDg7CkBAIC02NzQsNiArNjU2LDcgQEAKIAkJCXJvb3QtPmlfYmxvY2tzID0gNTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCX0KKwlocGZzX3VubG9jayhzKTsKIAlyZXR1cm4gMDsKIAogYmFpbDQ6CWJyZWxzZShiaDIpOwpAQCAtNjgxLDYgKzY2NCw3IEBACiBiYWlsMjoJYnJlbHNlKGJoMCk7CiBiYWlsMToKIGJhaWwwOgorCWhwZnNfdW5sb2NrKHMpOwogCWtmcmVlKHNiaS0+c2JfYm1wX2Rpcik7CiAJa2ZyZWUoc2JpLT5zYl9jcF90YWJsZSk7CiAJcy0+c19mc19pbmZvID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDVmNGUxMWEuLjMzYzk2M2QgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTI1LDYgKzEyNSwxNCBAQAogc3RhdGljIERFQ0xBUkVfUldTRU0oaXBydW5lX3NlbSk7CiAKIC8qCisgKiBFbXB0eSBhb3BzLiBDYW4gYmUgdXNlZCBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGRvZXMgbm90CisgKiBkZWZpbmUgYW55IG9mIHRoZSBhZGRyZXNzX3NwYWNlIG9wZXJhdGlvbnMuCisgKi8KK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZW1wdHlfYW9wcyA9IHsKK307CitFWFBPUlRfU1lNQk9MKGVtcHR5X2FvcHMpOworCisvKgogICogU3RhdGlzdGljcyBnYXRoZXJpbmcuLgogICovCiBzdHJ1Y3QgaW5vZGVzX3N0YXRfdCBpbm9kZXNfc3RhdDsKQEAgLTE3Niw3ICsxODQsNiBAQAogICovCiBpbnQgaW5vZGVfaW5pdF9hbHdheXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlbXB0eV9hb3BzOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlbXB0eV9pb3BzOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVtcHR5X2ZvcHM7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmNvbnN0IG1hcHBpbmcgPSAmaW5vZGUtPmlfZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL2piZC9jb21taXQuYyBiL2ZzL2piZC9jb21taXQuYwppbmRleCBkYTg3MWVlLi42OWIxODA0IDEwMDY0NAotLS0gYS9mcy9qYmQvY29tbWl0LmMKKysrIGIvZnMvamJkL2NvbW1pdC5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIAkgKiB3ZSBkbyBub3QgcmVxdWlyZSBpdCB0byByZW1lbWJlciBleGFjdGx5IHdoaWNoIG9sZCBidWZmZXJzIGl0CiAJICogaGFzIHJlc2VydmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGJlaGF2aW91cgogCSAqIHRoYXQgbXVsdGlwbGUgam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKCkgY2FsbHMgdG8gdGhlIHNhbWUKLQkgKiBidWZmZXIgYXJlIHBlcmZlY3RseSBwZXJtaXNzYWJsZS4KKwkgKiBidWZmZXIgYXJlIHBlcmZlY3RseSBwZXJtaXNzaWJsZS4KIAkgKi8KIAl3aGlsZSAoY29tbWl0X3RyYW5zYWN0aW9uLT50X3Jlc2VydmVkX2xpc3QpIHsKIAkJamggPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfcmVzZXJ2ZWRfbGlzdDsKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IGViMTE2MDEuLmIzNzEzYWYgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtNzcwLDcgKzc3MCw3IEBACiAJam91cm5hbC0+al93YnVmc2l6ZSA9IG47CiAJam91cm5hbC0+al93YnVmID0ga21hbGxvYyhuICogc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAogCQkJX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtODMxLDcgKzgzMSw3IEBACiAJam91cm5hbC0+al93YnVmc2l6ZSA9IG47CiAJam91cm5hbC0+al93YnVmID0ga21hbGxvYyhuICogc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAogCQkJX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvamJkL3Jldm9rZS5jIGIvZnMvamJkL3Jldm9rZS5jCmluZGV4IGQyOTAxODMuLjMwNWE5MDcgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9yZXZva2UuYworKysgYi9mcy9qYmQvcmV2b2tlLmMKQEAgLTcxLDcgKzcxLDcgQEAKICAqIHN3aXRjaGluZyBoYXNoIHRhYmxlcyB1bmRlciB0aGVtLiBGb3Igb3BlcmF0aW9ucyBvbiB0aGUgbGlzdHMgb2YgZW50cmllcyBpbgogICogdGhlIGhhc2ggdGFibGUgal9yZXZva2VfbG9jayBpcyB1c2VkLgogICoKLSAqIEZpbmFsbHksIGFsc28gcmVwbGF5IGNvZGUgdXNlcyB0aGUgaGFzaCB0YWJsZXMgYnV0IGF0IHRoaXMgbW9tZW50IG5vb25lIGVsc2UKKyAqIEZpbmFsbHksIGFsc28gcmVwbGF5IGNvZGUgdXNlcyB0aGUgaGFzaCB0YWJsZXMgYnV0IGF0IHRoaXMgbW9tZW50IG5vIG9uZSBlbHNlCiAgKiBjYW4gdG91Y2ggdGhlbSAoZmlsZXN5c3RlbSBpc24ndCBtb3VudGVkIHlldCkgYW5kIGhlbmNlIG5vIGxvY2tpbmcgaXMKICAqIG5lZWRlZC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvamJkL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwppbmRleCA1YjJlNGMzLi42MGQyMzE5IDEwMDY0NAotLS0gYS9mcy9qYmQvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwpAQCAtMTM5Miw3ICsxMzkyLDcgQEAKIAkgKiBieSAzMHggb3IgbW9yZS4uLgogCSAqCiAJICogV2UgdHJ5IGFuZCBvcHRpbWl6ZSB0aGUgc2xlZXAgdGltZSBhZ2FpbnN0IHdoYXQgdGhlIHVuZGVybHlpbmcgZGlzawotCSAqIGNhbiBkbywgaW5zdGVhZCBvZiBoYXZpbmcgYSBzdGF0aWMgc2xlZXAgdGltZS4gIFRoaXMgaXMgdXNlZnVsbCBmb3IKKwkgKiBjYW4gZG8sIGluc3RlYWQgb2YgaGF2aW5nIGEgc3RhdGljIHNsZWVwIHRpbWUuICBUaGlzIGlzIHVzZWZ1bCBmb3IKIAkgKiB0aGUgY2FzZSB3aGVyZSBvdXIgc3RvcmFnZSBpcyBzbyBmYXN0IHRoYXQgaXQgaXMgbW9yZSBvcHRpbWFsIHRvIGdvCiAJICogYWhlYWQgYW5kIGZvcmNlIGEgZmx1c2ggYW5kIHdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBiZSBjb21taXR0ZWQKIAkgKiB0aGFuIGl0IGlzIHRvIHdhaXQgZm9yIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgdGltZSBmb3IgbmV3IHdyaXRlcnMgdG8KZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jCmluZGV4IGZhMzZkNzYuLjZlMjgwMDAgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY29tbWl0LmMKKysrIGIvZnMvamJkMi9jb21taXQuYwpAQCAtMTA1LDYgKzEwNSw4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgdGltZXNwZWMgbm93ID0gY3VycmVudF9rZXJuZWxfdGltZSgpOwogCisJKmNiaCA9IE5VTEw7CisKIAlpZiAoaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKQogCQlyZXR1cm4gMDsKIApAQCAtNDAzLDcgKzQwNSw3IEBACiAJICogd2UgZG8gbm90IHJlcXVpcmUgaXQgdG8gcmVtZW1iZXIgZXhhY3RseSB3aGljaCBvbGQgYnVmZmVycyBpdAogCSAqIGhhcyByZXNlcnZlZC4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBiZWhhdmlvdXIKIAkgKiB0aGF0IG11bHRpcGxlIGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKCkgY2FsbHMgdG8gdGhlIHNhbWUKLQkgKiBidWZmZXIgYXJlIHBlcmZlY3RseSBwZXJtaXNzYWJsZS4KKwkgKiBidWZmZXIgYXJlIHBlcmZlY3RseSBwZXJtaXNzaWJsZS4KIAkgKi8KIAl3aGlsZSAoY29tbWl0X3RyYW5zYWN0aW9uLT50X3Jlc2VydmVkX2xpc3QpIHsKIAkJamggPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfcmVzZXJ2ZWRfbGlzdDsKQEAgLTgwNiw3ICs4MDgsNyBAQAogCQlpZiAoZXJyKQogCQkJX19qYmQyX2pvdXJuYWxfYWJvcnRfaGFyZChqb3VybmFsKTsKIAl9Ci0JaWYgKCFlcnIgJiYgIWlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkKKwlpZiAoY2JoKQogCQllcnIgPSBqb3VybmFsX3dhaXRfb25fY29tbWl0X3JlY29yZChqb3VybmFsLCBjYmgpOwogCWlmIChKQkQyX0hBU19JTkNPTVBBVF9GRUFUVVJFKGpvdXJuYWwsCiAJCQkJICAgICAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCkgJiYKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggOTA0MDdiOC4uZTBlYzNkYiAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTkxNyw3ICs5MTcsNyBAQAogCWpvdXJuYWwtPmpfd2J1ZnNpemUgPSBuOwogCWpvdXJuYWwtPmpfd2J1ZiA9IGttYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFqb3VybmFsLT5qX3didWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FudCBhbGxvY2F0ZSBiaHMgZm9yIGNvbW1pdCB0aHJlYWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbid0IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKIAkJCV9fZnVuY19fKTsKIAkJZ290byBvdXRfZXJyOwogCX0KQEAgLTk4Myw3ICs5ODMsNyBAQAogCWpvdXJuYWwtPmpfd2J1ZnNpemUgPSBuOwogCWpvdXJuYWwtPmpfd2J1ZiA9IGttYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFqb3VybmFsLT5qX3didWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FudCBhbGxvY2F0ZSBiaHMgZm9yIGNvbW1pdCB0aHJlYWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbid0IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKIAkJCV9fZnVuY19fKTsKIAkJZ290byBvdXRfZXJyOwogCX0KQEAgLTI0MTMsMTAgKzI0MTMsMTIgQEAKIAluZXdfZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldm5hbWVfY2FjaGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19kZXYpCiAJCXJldHVybiAiTk9ERVYtQUxMT0NGQUlMVVJFIjsgLyogU29tZXRoaW5nIG5vbi1OVUxMICovCisJYmQgPSBiZGdldChkZXZpY2UpOwogCXNwaW5fbG9jaygmZGV2bmFtZV9jYWNoZV9sb2NrKTsKIAlpZiAoZGV2Y2FjaGVbaV0pIHsKIAkJaWYgKGRldmNhY2hlW2ldLT5kZXZpY2UgPT0gZGV2aWNlKSB7CiAJCQlrZnJlZShuZXdfZGV2KTsKKwkJCWJkcHV0KGJkKTsKIAkJCXJldCA9IGRldmNhY2hlW2ldLT5kZXZuYW1lOwogCQkJc3Bpbl91bmxvY2soJmRldm5hbWVfY2FjaGVfbG9jayk7CiAJCQlyZXR1cm4gcmV0OwpAQCAtMjQyNSw3ICsyNDI3LDYgQEAKIAl9CiAJZGV2Y2FjaGVbaV0gPSBuZXdfZGV2OwogCWRldmNhY2hlW2ldLT5kZXZpY2UgPSBkZXZpY2U7Ci0JYmQgPSBiZGdldChkZXZpY2UpOwogCWlmIChiZCkgewogCQliZGV2bmFtZShiZCwgZGV2Y2FjaGVbaV0tPmRldm5hbWUpOwogCQliZHB1dChiZCk7CmRpZmYgLS1naXQgYS9mcy9qYmQyL3Jldm9rZS5jIGIvZnMvamJkMi9yZXZva2UuYwppbmRleCA5YWQzMjFmLi42OWZkOTM1IDEwMDY0NAotLS0gYS9mcy9qYmQyL3Jldm9rZS5jCisrKyBiL2ZzL2piZDIvcmV2b2tlLmMKQEAgLTcxLDcgKzcxLDcgQEAKICAqIHN3aXRjaGluZyBoYXNoIHRhYmxlcyB1bmRlciB0aGVtLiBGb3Igb3BlcmF0aW9ucyBvbiB0aGUgbGlzdHMgb2YgZW50cmllcyBpbgogICogdGhlIGhhc2ggdGFibGUgal9yZXZva2VfbG9jayBpcyB1c2VkLgogICoKLSAqIEZpbmFsbHksIGFsc28gcmVwbGF5IGNvZGUgdXNlcyB0aGUgaGFzaCB0YWJsZXMgYnV0IGF0IHRoaXMgbW9tZW50IG5vb25lIGVsc2UKKyAqIEZpbmFsbHksIGFsc28gcmVwbGF5IGNvZGUgdXNlcyB0aGUgaGFzaCB0YWJsZXMgYnV0IGF0IHRoaXMgbW9tZW50IG5vIG9uZSBlbHNlCiAgKiBjYW4gdG91Y2ggdGhlbSAoZmlsZXN5c3RlbSBpc24ndCBtb3VudGVkIHlldCkgYW5kIGhlbmNlIG5vIGxvY2tpbmcgaXMKICAqIG5lZWRlZC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IDFkMTE5MTAuLjA1ZmE3N2EgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTE0MDMsNyArMTQwMyw3IEBACiAKIAkvKgogCSAqIE9uY2Ugd2UgZHJvcCB0X3VwZGF0ZXMsIGlmIGl0IGdvZXMgdG8gemVybyB0aGUgdHJhbnNhY3Rpb24KLQkgKiBjb3VsZCBzdGFydCBjb21taXRpbmcgb24gdXMgYW5kIGV2ZW50dWFsbHkgZGlzYXBwZWFyLiAgU28KKwkgKiBjb3VsZCBzdGFydCBjb21taXR0aW5nIG9uIHVzIGFuZCBldmVudHVhbGx5IGRpc2FwcGVhci4gIFNvCiAJICogb25jZSB3ZSBkbyB0aGlzLCB3ZSBtdXN0IG5vdCBkZXJlZmVyZW5jZSB0cmFuc2FjdGlvbgogCSAqIHBvaW50ZXIgYWdhaW4uCiAJICovCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9UT0RPIGIvZnMvamZmczIvVE9ETwppbmRleCA1ZDNlYTQwLi5jYTI4OTY0IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9UT0RPCisrKyBiL2ZzL2pmZnMyL1RPRE8KQEAgLTExLDcgKzExLDcgQEAKICAtIGNoZWNrcG9pbnRpbmcgKGRvIHdlIG5lZWQgdGhpcz8gc2NhbiBpcyBxdWl0ZSBmYXN0KQogIC0gbWFrZSB0aGUgc2NhbiBjb2RlIHBvcHVsYXRlIHJlYWwgaW5vZGVzIHNvIHJlYWRfaW5vZGUganVzdCBhZnRlciAKIAltb3VudCBkb2Vzbid0IGhhdmUgdG8gcmVhZCB0aGUgZmxhc2ggdHdpY2UgZm9yIGxhcmdlIGZpbGVzLgotCU1ha2UgdGhpcyBhIHBlci1pbm9kZSBvcHRpb24sIGNoYW5nYWJsZSB3aXRoIGNoYXR0ciwgc28geW91IGNhbgorCU1ha2UgdGhpcyBhIHBlci1pbm9kZSBvcHRpb24sIGNoYW5nZWFibGUgd2l0aCBjaGF0dHIsIHNvIHlvdSBjYW4KIAlkZWNpZGUgd2hpY2ggaW5vZGVzIHNob3VsZCBiZSBpbi1jb3JlIGltbWVkaWF0ZWx5IGFmdGVyIG1vdW50LgogIC0gdGVzdCwgdGVzdCwgdGVzdAogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9yZWFkaW5vZGUuYyBiL2ZzL2pmZnMyL3JlYWRpbm9kZS5jCmluZGV4IGQzMmVlOTQuLjJhYjFhMGQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3JlYWRpbm9kZS5jCisrKyBiL2ZzL2pmZnMyL3JlYWRpbm9kZS5jCkBAIC0yNCw3ICsyNCw3IEBACiAgKgogICogUmV0dXJuczogMCBpZiB0aGUgZGF0YSBDUkMgaXMgY29ycmVjdDsKICAqIAkgICAgMSAtIGlmIGluY29ycmVjdDsKLSAqCSAgICBlcnJvciBjb2RlIGlmIGFuIGVycm9yIG9jY3VyZWQuCisgKgkgICAgZXJyb3IgY29kZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RhdGljIGludCBjaGVja19ub2RlX2RhdGEoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl90bXBfZG5vZGVfaW5mbyAqdG4pCiB7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zdW1tYXJ5LmMgYi9mcy9qZmZzMi9zdW1tYXJ5LmMKaW5kZXggODAwMTcxZC4uZTUzN2ZiMCAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VtbWFyeS5jCisrKyBiL2ZzL2pmZnMyL3N1bW1hcnkuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJdGVtcC0+bm9kZXR5cGUgPSByaS0+bm9kZXR5cGU7CiAJdGVtcC0+aW5vZGUgPSByaS0+aW5vOwogCXRlbXAtPnZlcnNpb24gPSByaS0+dmVyc2lvbjsKLQl0ZW1wLT5vZmZzZXQgPSBjcHVfdG9famUzMihvZnMpOyAvKiByZWxhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5pbmcgb2YgdGhlIGplYiAqLworCXRlbXAtPm9mZnNldCA9IGNwdV90b19qZTMyKG9mcyk7IC8qIHJlbGF0aXZlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGplYiAqLwogCXRlbXAtPnRvdGxlbiA9IHJpLT50b3RsZW47CiAJdGVtcC0+bmV4dCA9IE5VTEw7CiAKQEAgLTEzOSw3ICsxMzksNyBAQAogCiAJdGVtcC0+bm9kZXR5cGUgPSByZC0+bm9kZXR5cGU7CiAJdGVtcC0+dG90bGVuID0gcmQtPnRvdGxlbjsKLQl0ZW1wLT5vZmZzZXQgPSBjcHVfdG9famUzMihvZnMpOwkvKiByZWxhdGl2ZSBmcm9tIHRoZSBiZWdpbmluZyBvZiB0aGUgamViICovCisJdGVtcC0+b2Zmc2V0ID0gY3B1X3RvX2plMzIob2ZzKTsJLyogcmVsYXRpdmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBqZWIgKi8KIAl0ZW1wLT5waW5vID0gcmQtPnBpbm87CiAJdGVtcC0+dmVyc2lvbiA9IHJkLT52ZXJzaW9uOwogCXRlbXAtPmlubyA9IHJkLT5pbm87CmRpZmYgLS1naXQgYS9mcy9qZmZzMi93YnVmLmMgYi9mcy9qZmZzMi93YnVmLmMKaW5kZXggMDdlZTE1NC4uNDUxNWJlYSAxMDA2NDQKLS0tIGEvZnMvamZmczIvd2J1Zi5jCisrKyBiL2ZzL2pmZnMyL3didWYuYwpAQCAtMTExNiw3ICsxMTE2LDcgQEAKIAogLyoKICAqIE9uIE5BTkQgd2UgdHJ5IHRvIG1hcmsgdGhpcyBibG9jayBiYWQuIElmIHRoZSBibG9jayB3YXMgZXJhc2VkIG1vcmUKLSAqIHRoYW4gTUFYX0VSQVNFX0ZBSUxVUkVTIHdlIG1hcmsgaXQgZmluYWx5IGJhZC4KKyAqIHRoYW4gTUFYX0VSQVNFX0ZBSUxVUkVTIHdlIG1hcmsgaXQgZmluYWxseSBiYWQuCiAgKiBEb24ndCBjYXJlIGFib3V0IGZhaWx1cmVzLiBUaGlzIGJsb2NrIHJlbWFpbnMgb24gdGhlIGVyYXNlLXBlbmRpbmcKICAqIG9yIGJhZGJsb2NrIGxpc3QgYXMgbG9uZyBhcyBub2JvZHkgbWFuaXB1bGF0ZXMgdGhlIGZsYXNoIHdpdGgKICAqIGEgYm9vdGxvYWRlciBvciBzb21ldGhpbmcgbGlrZSB0aGF0LgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kbWFwLmMgYi9mcy9qZnMvamZzX2RtYXAuYwppbmRleCBjOTJlYTNiLi40NDk2ODcyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2RtYXAuYworKysgYi9mcy9qZnMvamZzX2RtYXAuYwpAQCAtMTY0OSw3ICsxNjQ5LDcgQEAKIAkJfQogCiAJCS8qIHNlYXJjaCB0aGUgdHJlZSB3aXRoaW4gdGhlIGRtYXAgY29udHJvbCBwYWdlIGZvcgotCQkgKiBzdWZmaWNlbnQgZnJlZSBzcGFjZS4gIGlmIHN1ZmZpY2llbnQgZnJlZSBzcGFjZSBpcyBmb3VuZCwKKwkJICogc3VmZmljaWVudCBmcmVlIHNwYWNlLiAgaWYgc3VmZmljaWVudCBmcmVlIHNwYWNlIGlzIGZvdW5kLAogCQkgKiBkYkZpbmRMZWFmKCkgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxlYWYgYXQgd2hpY2gKIAkJICogZnJlZSBzcGFjZSB3YXMgZm91bmQuCiAJCSAqLwpAQCAtMjc0NCw3ICsyNzQ0LDcgQEAKIAkJCS8qIGNoZWNrIHdoaWNoIChsZWFmbm8gb3IgYnVkZHkpIGlzIHRoZSBsZWZ0IGJ1ZGR5LgogCQkJICogdGhlIGxlZnQgYnVkZHkgZ2V0cyB0byBjbGFpbSB0aGUgYmxvY2tzIHJlc3VsdGluZwogCQkJICogZnJvbSB0aGUgam9pbiB3aGlsZSB0aGUgcmlnaHQgZ2V0cyB0byBjbGFpbSBub25lLgotCQkJICogdGhlIGxlZnQgYnVkZHkgaXMgYWxzbyBlbGlnYWJsZSB0byBwYXJ0aWNpcGF0ZSBpbgorCQkJICogdGhlIGxlZnQgYnVkZHkgaXMgYWxzbyBlbGlnaWJsZSB0byBwYXJ0aWNpcGF0ZSBpbgogCQkJICogYSBqb2luIGF0IHRoZSBuZXh0IGhpZ2hlciBsZXZlbCB3aGlsZSB0aGUgcmlnaHQKIAkJCSAqIGlzIG5vdC4KIAkJCSAqCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2V4dGVudC5jIGIvZnMvamZzL2pmc19leHRlbnQuYwppbmRleCA1ZDNiYmQxLi5lNWZlODUwIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2V4dGVudC5jCisrKyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAJLyogYWxsb2NhdGUgdGhlIGRpc2sgYmxvY2tzIGZvciB0aGUgZXh0ZW50LiAgaW5pdGlhbGx5LCBleHRCYWxsb2MoKQogCSAqIHdpbGwgdHJ5IHRvIGFsbG9jYXRlIGRpc2sgYmxvY2tzIGZvciB0aGUgcmVxdWVzdGVkIHNpemUgKHhsZW4pLgotCSAqIGlmIHRoaXMgZmFpbHMgKHhsZW4gY29udGlndW91cyBmcmVlIGJsb2NrcyBub3QgYXZhbGlhYmxlKSwgaXQnbGwKKwkgKiBpZiB0aGlzIGZhaWxzICh4bGVuIGNvbnRpZ3VvdXMgZnJlZSBibG9ja3Mgbm90IGF2YWlsYWJsZSksIGl0J2xsCiAJICogdHJ5IHRvIGFsbG9jYXRlIGEgc21hbGxlciBudW1iZXIgb2YgYmxvY2tzIChwcm9kdWNpbmcgYSBzbWFsbGVyCiAJICogZXh0ZW50KSwgd2l0aCB0aGlzIHNtYWxsZXIgbnVtYmVyIG9mIGJsb2NrcyBjb25zaXN0aW5nIG9mIHRoZQogCSAqIHJlcXVlc3RlZCBudW1iZXIgb2YgYmxvY2tzIHJvdW5kZWQgZG93biB0byB0aGUgbmV4dCBzbWFsbGVyCkBAIC00ODEsNyArNDgxLDcgQEAKICAqCiAgKgkJaW5pdGlhbGx5LCB3ZSB3aWxsIHRyeSB0byBhbGxvY2F0ZSBkaXNrIGJsb2NrcyBmb3IgdGhlCiAgKgkJcmVxdWVzdGVkIHNpemUgKG5ibG9ja3MpLiAgaWYgdGhpcyBmYWlscyAobmJsb2NrcwotICoJCWNvbnRpZ3VvdXMgZnJlZSBibG9ja3Mgbm90IGF2YWxpYWJsZSksIHdlJ2xsIHRyeSB0byBhbGxvY2F0ZQorICoJCWNvbnRpZ3VvdXMgZnJlZSBibG9ja3Mgbm90IGF2YWlsYWJsZSksIHdlJ2xsIHRyeSB0byBhbGxvY2F0ZQogICoJCWEgc21hbGxlciBudW1iZXIgb2YgYmxvY2tzIChwcm9kdWNpbmcgYSBzbWFsbGVyIGV4dGVudCksIHdpdGgKICAqCQl0aGlzIHNtYWxsZXIgbnVtYmVyIG9mIGJsb2NrcyBjb25zaXN0aW5nIG9mIHRoZSByZXF1ZXN0ZWQKICAqCQludW1iZXIgb2YgYmxvY2tzIHJvdW5kZWQgZG93biB0byB0aGUgbmV4dCBzbWFsbGVyIHBvd2VyIG9mIDIKQEAgLTU3NSw3ICs1NzUsNyBAQAogICoJCXRvIGEgbmV3IHNldCBvZiBibG9ja3MuICBJZiBtb3ZpbmcgdGhlIGV4dGVudCwgd2UgaW5pdGlhbGx5CiAgKgkJd2lsbCB0cnkgdG8gYWxsb2NhdGUgZGlzayBibG9ja3MgZm9yIHRoZSByZXF1ZXN0ZWQgc2l6ZQogICoJCShuZXduYmxrcykuICBpZiB0aGlzIGZhaWxzIChuZXcgY29udGlndW91cyBmcmVlIGJsb2NrcyBub3QKLSAqCQlhdmFsaWFibGUpLCB3ZSdsbCB0cnkgdG8gYWxsb2NhdGUgYSBzbWFsbGVyIG51bWJlciBvZgorICoJCWF2YWlsYWJsZSksIHdlJ2xsIHRyeSB0byBhbGxvY2F0ZSBhIHNtYWxsZXIgbnVtYmVyIG9mCiAgKgkJYmxvY2tzIChwcm9kdWNpbmcgYSBzbWFsbGVyIGV4dGVudCksIHdpdGggdGhpcyBzbWFsbGVyCiAgKgkJbnVtYmVyIG9mIGJsb2NrcyBjb25zaXN0aW5nIG9mIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mCiAgKgkJYmxvY2tzIHJvdW5kZWQgZG93biB0byB0aGUgbmV4dCBzbWFsbGVyIHBvd2VyIG9mIDIKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW1hcC5jIGIvZnMvamZzL2pmc19pbWFwLmMKaW5kZXggM2EwOTQyMy4uZWQ1M2E0NyAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbWFwLmMKKysrIGIvZnMvamZzL2pmc19pbWFwLmMKQEAgLTEwNjksNyArMTA2OSw3IEBACiAJCSAqLwogCQlpZiAoaWFncC0+bmZyZWVleHRzID09IGNwdV90b19sZTMyKEVYVFNQRVJJQUcgLSAxKSkgewogCQkJLyogaW4gcHJlcGFyYXRpb24gZm9yIHJlbW92aW5nIHRoZSBpYWcgZnJvbSB0aGUKLQkJCSAqIGFnIGV4dGVudCBmcmVlIGxpc3QsIHJlYWQgdGhlIGlhZ3MgcHJlY2VlZGluZworCQkJICogYWcgZXh0ZW50IGZyZWUgbGlzdCwgcmVhZCB0aGUgaWFncyBwcmVjZWRpbmcKIAkJCSAqIGFuZCBmb2xsb3dpbmcgdGhlIGlhZyBvbiB0aGUgYWcgZXh0ZW50IGZyZWUKIAkJCSAqIGxpc3QuCiAJCQkgKi8KQEAgLTEwOTUsNyArMTA5NSw3IEBACiAJCWludCBpbm9mcmVlZndkID0gbGUzMl90b19jcHUoaWFncC0+aW5vZnJlZWZ3ZCk7CiAKIAkJLyogaW4gcHJlcGFyYXRpb24gZm9yIHJlbW92aW5nIHRoZSBpYWcgZnJvbSB0aGUKLQkJICogYWcgaW5vZGUgZnJlZSBsaXN0LCByZWFkIHRoZSBpYWdzIHByZWNlZWRpbmcKKwkJICogYWcgaW5vZGUgZnJlZSBsaXN0LCByZWFkIHRoZSBpYWdzIHByZWNlZGluZwogCQkgKiBhbmQgZm9sbG93aW5nIHRoZSBpYWcgb24gdGhlIGFnIGlub2RlIGZyZWUKIAkJICogbGlzdC4gIGJlZm9yZSByZWFkaW5nIHRoZXNlIGlhZ3MsIHdlIG11c3QgbWFrZQogCQkgKiBzdXJlIHRoYXQgd2UgYWxyZWFkeSBkb24ndCBoYXZlIHRoZW0gaW4gaGFuZApAQCAtMTY4MSw3ICsxNjgxLDcgQEAKIAkgKiB0cnkgdG8gYWxsb2NhdGUgYSBuZXcgZXh0ZW50IG9mIGZyZWUgaW5vZGVzLgogCSAqLwogCWlmIChhZGRleHQpIHsKLQkJLyogaWYgZnJlZSBzcGFjZSBpcyBub3QgYXZhbGlhYmxlIGZvciB0aGlzIG5ldyBleHRlbnQsIHRyeQorCQkvKiBpZiBmcmVlIHNwYWNlIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgbmV3IGV4dGVudCwgdHJ5CiAJCSAqIGJlbG93IHRvIGFsbG9jYXRlIGEgZnJlZSBhbmQgZXhpc3RpbmcgKGFscmVhZHkgYmFja2VkKQogCQkgKiBpbm9kZSBmcm9tIHRoZSBhZy4KIAkJICovCkBAIC0yMDM2LDcgKzIwMzYsNyBAQAogCiAJLyogY2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFzdCBmcmVlIGlub2RlIHdpdGhpbiB0aGUgaWFnLgogCSAqIGlmIHNvLCBpdCB3aWxsIGhhdmUgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBhZyBmcmVlCi0JICogaW5vZGUgbGlzdCwgc28gZ2V0IHRoZSBpYWdzIHByZWNlZWRpbmcgYW5kIGZvbGxvd2luZworCSAqIGlub2RlIGxpc3QsIHNvIGdldCB0aGUgaWFncyBwcmVjZWRpbmcgYW5kIGZvbGxvd2luZwogCSAqIGl0IG9uIHRoZSBsaXN0LgogCSAqLwogCWlmIChpYWdwLT5uZnJlZWlub3MgPT0gY3B1X3RvX2xlMzIoMSkpIHsKQEAgLTIyMDgsNyArMjIwOCw3IEBACiAKIAkvKiBjaGVjayBpZiB0aGlzIGlzIHRoZSBsYXN0IGZyZWUgZXh0ZW50IHdpdGhpbiB0aGUKIAkgKiBpYWcuICBpZiBzbywgdGhlIGlhZyBtdXN0IGJlIHJlbW92ZWQgZnJvbSB0aGUgYWcKLQkgKiBmcmVlIGV4dGVudCBsaXN0LCBzbyBnZXQgdGhlIGlhZ3MgcHJlY2VlZGluZyBhbmQKKwkgKiBmcmVlIGV4dGVudCBsaXN0LCBzbyBnZXQgdGhlIGlhZ3MgcHJlY2VkaW5nIGFuZAogCSAqIGZvbGxvd2luZyB0aGUgaWFnIG9uIHRoaXMgbGlzdC4KIAkgKi8KIAlpZiAoaWFncC0+bmZyZWVleHRzID09IGNwdV90b19sZTMyKDEpKSB7CkBAIC0yNTA0LDcgKzI1MDQsNyBAQAogCQl9CiAKIAotCQkvKiBnZXQgdGhlIG5leHQgYXZhbGlhYmxlIGlhZyBudW1iZXIgKi8KKwkJLyogZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBpYWcgbnVtYmVyICovCiAJCWlhZ25vID0gaW1hcC0+aW1fbmV4dGlhZzsKIAogCQkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIG5vdCBleGNlZWRlZCB0aGUgbWF4aW11bSBpbm9kZQpAQCAtMjYxNSw3ICsyNjE1LDcgQEAKIAogCQlkdXBsaWNhdGVJWHRyZWUoc2IsIGJsa25vLCB4bGVuLCAmeGFkZHIpOwogCi0JCS8qIHVwZGF0ZSB0aGUgbmV4dCBhdmFsaWFibGUgaWFnIG51bWJlciAqLworCQkvKiB1cGRhdGUgdGhlIG5leHQgYXZhaWxhYmxlIGlhZyBudW1iZXIgKi8KIAkJaW1hcC0+aW1fbmV4dGlhZyArPSAxOwogCiAJCS8qIEFkZCB0aGUgaWFnIHRvIHRoZSBpYWcgZnJlZSBsaXN0IHNvIHdlIGRvbid0IGxvc2UgdGhlIGlhZwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2dtZ3IuaCBiL2ZzL2pmcy9qZnNfbG9nbWdyLmgKaW5kZXggOTIzNmJjNC4uZTM4YzIxNSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2dtZ3IuaAorKysgYi9mcy9qZnMvamZzX2xvZ21nci5oCkBAIC0yODgsNyArMjg4LDcgQEAKIAkJLyoKIAkJICoJU1lOQ1BUOiBsb2cgc3luYyBwb2ludAogCQkgKgotCQkgKiByZXBsYXkgbG9nIHVwdG8gc3luY3B0IGFkZHJlc3Mgc3BlY2lmaWVkOworCQkgKiByZXBsYXkgbG9nIHVwIHRvIHN5bmNwdCBhZGRyZXNzIHNwZWNpZmllZDsKIAkJICovCiAJCXN0cnVjdCB7CiAJCQlfX2xlMzIgc3luYzsJLyogNDogc3luY3B0IGFkZHJlc3MgKDAgPSBoZXJlKSAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5oIGIvZnMvamZzL2pmc19tZXRhcGFnZS5oCmluZGV4IGQ5NGY4ZDkuLmE3OGJlZGEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaAorKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmgKQEAgLTc1LDcgKzc1LDcgQEAKIGV4dGVybiB2b2lkIGZvcmNlX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqKTsKIAogLyoKLSAqIGhvbGRfbWV0YXBhZ2UgYW5kIHB1dF9tZXRhcGFnZSBhcmUgdXNlZCBpbiBjb25qdWN0aW9uLiAgVGhlIHBhZ2UgbG9jaworICogaG9sZF9tZXRhcGFnZSBhbmQgcHV0X21ldGFwYWdlIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uLiAgVGhlIHBhZ2UgbG9jawogICogaXMgbm90IGRyb3BwZWQgYmV0d2VlbiB0aGUgdHdvLCBzbyBubyBvdGhlciB0aHJlYWRzIGNhbiBnZXQgb3IgcmVsZWFzZQogICogdGhlIG1ldGFwYWdlCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfdHhubWdyLmMgYi9mcy9qZnMvamZzX3R4bm1nci5jCmluZGV4IDk0NjY5NTcuLmY2Y2MwYzAgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdHhubWdyLmMKKysrIGIvZnMvamZzL2pmc190eG5tZ3IuYwpAQCAtNjM2LDcgKzYzNiw3IEBACiAJICogdGhlIGlub2RlIG9mIHRoZSBwYWdlIGFuZCBhdmFpbGFibGUgdG8gYWxsIGFub255bW91cwogCSAqIHRyYW5zYWN0aW9ucyB1bnRpbCB0eENvbW1pdCgpIHRpbWUgYXQgd2hpY2ggcG9pbnQKIAkgKiB0aGV5IGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgdHJhbnNhY3Rpb24gdGxvY2sgbGlzdCBvZgotCSAqIHRoZSBjb21taXRpbmcgdHJhbnNhY3Rpb24gb2YgdGhlIGlub2RlKQorCSAqIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIG9mIHRoZSBpbm9kZSkKIAkgKi8KIAlpZiAoeHRpZCA9PSAwKSB7CiAJCXRsY2stPnRpZCA9IHRpZDsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9yZXNpemUuYyBiL2ZzL2pmcy9yZXNpemUuYwppbmRleCAxYWJhMDAzLi44ZWE1ZWZiIDEwMDY0NAotLS0gYS9mcy9qZnMvcmVzaXplLmMKKysrIGIvZnMvamZzL3Jlc2l6ZS5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiAyLiBjb21wdXRlIG5ldyBGU0NLU2l6ZSBmcm9tIG5ldyBMVlNpemU7CiAgKiAzLiBzZXQgbmV3IEZTU2l6ZSBhcyBNSU4oRlNTaXplLCBMVlNpemUtKExvZ1NpemUrRlNDS1NpemUpKSB3aGVyZQogICogICAgYXNzZXJ0KG5ldyBGU1NpemUgPj0gb2xkIEZTU2l6ZSksCi0gKiAgICBpLmUuLCBmaWxlIHN5c3RlbSBtdXN0IG5vdCBiZSBzaHJpbmtlZDsKKyAqICAgIGkuZS4sIGZpbGUgc3lzdGVtIG11c3Qgbm90IGJlIHNocnVuazsKICAqLwogaW50IGpmc19leHRlbmRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzNjQgbmV3TFZTaXplLCBpbnQgbmV3TG9nU2l6ZSkKIHsKQEAgLTE4Miw3ICsxODIsNyBAQAogCSAqLwogCW5ld0ZTU2l6ZSA9IG5ld0xWU2l6ZSAtIG5ld0xvZ1NpemUgLSBuZXdGU0NLU2l6ZTsKIAotCS8qIGZpbGUgc3lzdGVtIGNhbm5vdCBiZSBzaHJpbmtlZCAqLworCS8qIGZpbGUgc3lzdGVtIGNhbm5vdCBiZSBzaHJ1bmsgKi8KIAlpZiAobmV3RlNTaXplIDwgYm1wLT5kYl9tYXBzaXplKSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IGVlY2E0OGEuLjA2YzhhNjcgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC02NDQsNyArNjQ0LDcgQEAKIAogLyogUmVhZCBkYXRhIGZyb20gcXVvdGFmaWxlIC0gYXZvaWQgcGFnZWNhY2hlIGFuZCBzdWNoIGJlY2F1c2Ugd2UgY2Fubm90IGFmZm9yZAogICogYWNxdWlyaW5nIHRoZSBsb2Nrcy4uLiBBcyBxdW90YSBmaWxlcyBhcmUgbmV2ZXIgdHJ1bmNhdGVkIGFuZCBxdW90YSBjb2RlCi0gKiBpdHNlbGYgc2VyaWFsaXplcyB0aGUgb3BlcmF0aW9ucyAoYW5kIG5vb25lIGVsc2Ugc2hvdWxkIHRvdWNoIHRoZSBmaWxlcykKKyAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm8gb25lIGVsc2Ugc2hvdWxkIHRvdWNoIHRoZSBmaWxlcykKICAqIHdlIGRvbid0IGhhdmUgdG8gYmUgYWZyYWlkIG9mIHJhY2VzICovCiBzdGF0aWMgc3NpemVfdCBqZnNfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSwKIAkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpCmRpZmYgLS1naXQgYS9mcy9sb2dmcy9kZXZfbXRkLmMgYi9mcy9sb2dmcy9kZXZfbXRkLmMKaW5kZXggNzQ2NmU5ZC4uMzM5ZTE3ZSAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvZGV2X210ZC5jCisrKyBiL2ZzL2xvZ2ZzL2Rldl9tdGQuYwpAQCAtNjAsNyArNjAsNyBAQAogICogYXN5bmNocm9ub3VzIHByb3BlcnRpZXMuICBTbyBqdXN0IHRvIHByZXZlbnQgdGhlIGZpcnN0IGltcGxlbWVudG9yIG9mIHN1Y2gKICAqIGEgdGhpbmcgZnJvbSBicmVha2luZyBsb2dmcyBpbiAyMzUwLCB3ZSBkbyB0aGUgdXN1YWwgcG9pbnRsZXNzIGRhbmNlIHRvCiAgKiBkZWNsYXJlIGEgY29tcGxldGlvbiB2YXJpYWJsZSBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgcmV0dXJuaW5nCi0gKiBmcm9tIG10ZF9lcmFzZSgpLiAgV2hhdCBhbiBleGNlcmNpc2UgaW4gZnV0aWxpdHkhCisgKiBmcm9tIG10ZF9lcmFzZSgpLiAgV2hhdCBhbiBleGVyY2lzZSBpbiBmdXRpbGl0eSEKICAqLwogc3RhdGljIHZvaWQgbG9nZnNfZXJhc2VfY2FsbGJhY2soc3RydWN0IGVyYXNlX2luZm8gKmVpKQogewpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvZGlyLmMgYi9mcy9sb2dmcy9kaXIuYwppbmRleCBmOWRkZjBjLi45ZWQ4OWQxIDEwMDY0NAotLS0gYS9mcy9sb2dmcy9kaXIuYworKysgYi9mcy9sb2dmcy9kaXIuYwpAQCAtOTIsNyArOTIsNyBAQAogICogc28gc2hvcnQgbmFtZXMgKGxlbiA8PSA5KSBkb24ndCBldmVuIG9jY3VweSB0aGUgY29tcGxldGUgMzJiaXQgbmFtZQogICogc3BhY2UuICBBIHByaW1lID4yNTYgZW5zdXJlcyBzaG9ydCBuYW1lcyBxdWlja2x5IHNwcmVhZCB0aGUgMzJiaXQKICAqIG5hbWUgc3BhY2UuICBBZGQgYWJvdXQgMjYgZm9yIHRoZSBlc3RpbWF0ZWQgYW1vdW50IG9mIGluZm9ybWF0aW9uCi0gKiBvZiBlYWNoIGNoYXJhY3RlciBhbmQgcGljayBhIHByaW1lIG5lYXJieSwgcHJlZmVycmFibHkgYSBiaXQtc3BhcnNlCisgKiBvZiBlYWNoIGNoYXJhY3RlciBhbmQgcGljayBhIHByaW1lIG5lYXJieSwgcHJlZmVyYWJseSBhIGJpdC1zcGFyc2UKICAqIG9uZS4KICAqLwogc3RhdGljIHUzMiBoYXNoXzMyKGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIHUzMiBzZWVkKQpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvcmVhZHdyaXRlLmMgYi9mcy9sb2dmcy9yZWFkd3JpdGUuYwppbmRleCBlZTk5YTlmLi45ZTIyMDg1IDEwMDY0NAotLS0gYS9mcy9sb2dmcy9yZWFkd3JpdGUuYworKysgYi9mcy9sb2dmcy9yZWFkd3JpdGUuYwpAQCAtMTYxNiw3ICsxNjE2LDcgQEAKIAkJZXJyID0gbG9nZnNfd3JpdGVfYnVmKGlub2RlLCBwYWdlLCBmbGFncyk7CiAJCWlmICghZXJyICYmIHNocmlua19sZXZlbChnY19sZXZlbCkgPT0gMCkgewogCQkJLyogUmV3cml0ZSBjYW5ub3QgbWFyayB0aGUgaW5vZGUgZGlydHkgYnV0IGhhcyB0bwotCQkJICogd3JpdGUgaXQgaW1tZWRpYXRseS4KKwkJCSAqIHdyaXRlIGl0IGltbWVkaWF0ZWx5LgogCQkJICogUTogQ2FuJ3Qgd2UganVzdCBjcmVhdGUgYW4gYWxpYXMgZm9yIHRoZSBpbm9kZQogCQkJICogaW5zdGVhZD8gIEFuZCBpZiBub3QsIHdoeSBub3Q/CiAJCQkgKi8KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL3N1cGVyLmMgYi9mcy9sb2dmcy9zdXBlci5jCmluZGV4IDMzNDM1ZTQuLmNlMDNhMTggMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL3N1cGVyLmMKKysrIGIvZnMvbG9nZnMvc3VwZXIuYwpAQCAtNDgwLDEwICs0ODAsNiBAQAogCQkJIXJlYWRfb25seSkKIAkJcmV0dXJuIC1FSU87CiAKLQltdXRleF9pbml0KCZzdXBlci0+c19kaXJvcF9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmc3VwZXItPnNfb2JqZWN0X2FsaWFzX211dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmc3VwZXItPnNfZnJlZWluZ19saXN0KTsKLQogCXJldCA9IGxvZ2ZzX2luaXRfcncoc2IpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC02MDEsNiArNTk3LDEwIEBACiAJaWYgKCFzdXBlcikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKKwltdXRleF9pbml0KCZzdXBlci0+c19kaXJvcF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmc3VwZXItPnNfb2JqZWN0X2FsaWFzX211dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmc3VwZXItPnNfZnJlZWluZ19saXN0KTsKKwogCWlmICghZGV2bmFtZSkKIAkJZXJyID0gbG9nZnNfZ2V0X3NiX2JkZXYoc3VwZXIsIHR5cGUsIGRldm5hbWUpOwogCWVsc2UgaWYgKHN0cm5jbXAoZGV2bmFtZSwgIm10ZCIsIDMpKQpkaWZmIC0tZ2l0IGEvZnMvbWJjYWNoZS5jIGIvZnMvbWJjYWNoZS5jCmluZGV4IGEyNTQ0NGFiLi4yZjE3NGJlIDEwMDY0NAotLS0gYS9mcy9tYmNhY2hlLmMKKysrIGIvZnMvbWJjYWNoZS5jCkBAIC01NDIsNyArNTQyLDcgQEAKICAqIG1iX2NhY2hlX2VudHJ5X2ZpbmRfZmlyc3QoKQogICoKICAqIEZpbmQgdGhlIGZpcnN0IGNhY2hlIGVudHJ5IG9uIGEgZ2l2ZW4gZGV2aWNlIHdpdGggYSBjZXJ0YWluIGtleSBpbgotICogYW4gYWRkaXRpb25hbCBpbmRleC4gQWRkaXRvbmFsIG1hdGNoZXMgY2FuIGJlIGZvdW5kIHdpdGgKKyAqIGFuIGFkZGl0aW9uYWwgaW5kZXguIEFkZGl0aW9uYWwgbWF0Y2hlcyBjYW4gYmUgZm91bmQgd2l0aAogICogbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KCkuIFJldHVybnMgTlVMTCBpZiBubyBtYXRjaCB3YXMgZm91bmQuIFRoZQogICogcmV0dXJuZWQgY2FjaGUgZW50cnkgaXMgbG9ja2VkIGZvciBzaGFyZWQgYWNjZXNzICgibXVsdGlwbGUgcmVhZGVycyIpLgogICoKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDNjYjYxNmQuLmUzYzRmMTEgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtNzAsNyArNzAsNyBAQAogICogbmFtZSBpbmRpY2F0ZWQgYnkgdGhlIHN5bWxpbmsuIFRoZSBvbGQgY29kZSBhbHdheXMgY29tcGxhaW5lZCB0aGF0IHRoZQogICogbmFtZSBhbHJlYWR5IGV4aXN0cywgZHVlIHRvIG5vdCBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgZXZlbiBpZiBpdHMgdGFyZ2V0CiAgKiBpcyBub25leGlzdGVudC4gIFRoZSBuZXcgc2VtYW50aWNzIGFmZmVjdHMgYWxzbyBta25vZCgpIGFuZCBsaW5rKCkgd2hlbgotICogdGhlIG5hbWUgaXMgYSBzeW1saW5rIHBvaW50aW5nIHRvIGEgbm9uLWV4aXN0YW50IG5hbWUuCisgKiB0aGUgbmFtZSBpcyBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gYSBub24tZXhpc3RlbnQgbmFtZS4KICAqCiAgKiBJIGRvbid0IGtub3cgd2hpY2ggc2VtYW50aWNzIGlzIHRoZSByaWdodCBvbmUsIHNpbmNlIEkgaGF2ZSBubyBhY2Nlc3MKICAqIHRvIHN0YW5kYXJkcy4gQnV0IEkgZm91bmQgYnkgdHJpYWwgdGhhdCBIUC1VWCA5LjAgaGFzIHRoZSBmdWxsICJuZXciCkBAIC0xNzksNyArMTc5LDcgQEAKIHN0YXRpYyBpbnQgYWNsX3Blcm1pc3Npb25fY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncywKIAkJaW50ICgqY2hlY2tfYWNsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKSkKIHsKLQl1bW9kZV90CQkJbW9kZSA9IGlub2RlLT5pX21vZGU7CisJdW5zaWduZWQgaW50IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCiAJbWFzayAmPSBNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDOwogCkBAIC02OTcsNiArNjk3LDcgQEAKIAkJZG8gewogCQkJc2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmZnMtPnNlcSk7CiAJCQluZC0+cm9vdCA9IGZzLT5yb290OworCQkJbmQtPnNlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbigmbmQtPnJvb3QuZGVudHJ5LT5kX3NlcSk7CiAJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmZzLT5zZXEsIHNlcSkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggN2RiYTJlZC4uZDk5YmNmNSAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTEwMzAsMTggKzEwMzAsNiBAQAogCS5zaG93CT0gc2hvd192ZnNtbnQKIH07CiAKLXN0YXRpYyBpbnQgdXVpZF9pc19uaWwodTggKnV1aWQpCi17Ci0JaW50IGk7Ci0JdTggICpjcCA9ICh1OCAqKXV1aWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpZiAoKmNwKyspCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbnQgc2hvd19tb3VudGluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCBwcm9jX21vdW50cyAqcCA9IG0tPnByaXZhdGU7CkBAIC0xMDg1LDEwICsxMDczLDYgQEAKIAlpZiAoSVNfTU5UX1VOQklOREFCTEUobW50KSkKIAkJc2VxX3B1dHMobSwgIiB1bmJpbmRhYmxlIik7CiAKLQlpZiAoIXV1aWRfaXNfbmlsKG1udC0+bW50X3NiLT5zX3V1aWQpKQotCQkvKiBwcmludCB0aGUgdXVpZCAqLwotCQlzZXFfcHJpbnRmKG0sICIgdXVpZDolcFUiLCBtbnQtPm1udF9zYi0+c191dWlkKTsKLQogCS8qIEZpbGVzeXN0ZW0gc3BlY2lmaWMgZGF0YSAqLwogCXNlcV9wdXRzKG0sICIgLSAiKTsKIAlzaG93X3R5cGUobSwgc2IpOwpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW5vZGUuYyBiL2ZzL25jcGZzL2lub2RlLmMKaW5kZXggMDBhMWQxYy4uMDI1MGU0YyAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW5vZGUuYworKysgYi9mcy9uY3Bmcy9pbm9kZS5jCkBAIC01OTYsNyArNTk2LDcgQEAKIC8qCXNlcnZlci0+cHJpdi5kYXRhID0gTlVMTDsJCSovCiAKIAlzZXJ2ZXItPm0gPSBkYXRhOwotCS8qIEFsdGhvdWdodCBhbnl0aGluZyBwcm9kdWNpbmcgdGhpcyBpcyBidWdneSwgaXQgaGFwcGVucworCS8qIEFsdGhvdWdoIGFueXRoaW5nIHByb2R1Y2luZyB0aGlzIGlzIGJ1Z2d5LCBpdCBoYXBwZW5zCiAJICAgbm93IGJlY2F1c2Ugb2YgUEFUSF9NQVggY2hhbmdlcy4uICovCiAJaWYgKHNlcnZlci0+bS50aW1lX291dCA8IDEpIHsKIAkJc2VydmVyLT5tLnRpbWVfb3V0ID0gMTA7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKaW5kZXggMTRlMGY5My4uMDBlY2Y2MiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jCisrKyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAKIAlhcmdzLT5jYmxfbGF5b3V0X3R5cGUgPSBudG9obCgqcCsrKTsKIAkvKiBEZXBpdGUgdGhlIHNwZWMncyB4ZHIsIGlvbW9kZSByZWFsbHkgYmVsb25ncyBpbiB0aGUgRklMRSBzd2l0Y2gsCi0JICogYXMgaXQgaXMgdW51c2VhYmxlIGFuZCBpZ25vcmVkIHdpdGggdGhlIG90aGVyIHR5cGVzLgorCSAqIGFzIGl0IGlzIHVudXNhYmxlIGFuZCBpZ25vcmVkIHdpdGggdGhlIG90aGVyIHR5cGVzLgogCSAqLwogCWlvbW9kZSA9IG50b2hsKCpwKyspOwogCWFyZ3MtPmNibF9sYXlvdXRjaGFuZ2VkID0gbnRvaGwoKnArKyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCAzYWM1YmQ2Li4yZjA5M2VkIDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogICogZGlzaywgYnV0IGl0IHJldHJpZXZlcyBhbmQgY2xlYXJzIGN0eC0+ZXJyb3IgYWZ0ZXIgc3luY2hpbmcsIGRlc3BpdGUKICAqIHRoZSB0d28gYmVpbmcgc2V0IGF0IHRoZSBzYW1lIHRpbWUgaW4gbmZzX2NvbnRleHRfc2V0X3dyaXRlX2Vycm9yKCkuCiAgKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm1lciBpcyB1c2VkIHRvIG5vdGlmeSB0aGUgX25leHRfIGNhbGwgdG8KLSAqIG5mc19maWxlX3dyaXRlKCkgdGhhdCBhIHdyaXRlIGVycm9yIG9jY3VyZWQsIGFuZCBoZW5jZSBjYXVzZSBpdCB0bworICogbmZzX2ZpbGVfd3JpdGUoKSB0aGF0IGEgd3JpdGUgZXJyb3Igb2NjdXJyZWQsIGFuZCBoZW5jZSBjYXVzZSBpdCB0bwogICogZmFsbCBiYWNrIHRvIGRvaW5nIGEgc3luY2hyb25vdXMgd3JpdGUuCiAgKi8KIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2ZzL25mcy9uYW1lc3BhY2UuYyBiL2ZzL25mcy9uYW1lc3BhY2UuYwppbmRleCA5MTY2ZmNiLi4xZjA2M2JhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmZzL25hbWVzcGFjZS5jCkBAIC0xMTksNyArMTE5LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19ORlNfVjQKLXN0YXRpYyBycGNfYXV0aGZsYXZvcl90IG5mc19maW5kX2Jlc3Rfc2VjKHN0cnVjdCBuZnM0X3NlY2luZm9fZmxhdm9ycyAqZmxhdm9ycywgc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBycGNfYXV0aGZsYXZvcl90IG5mc19maW5kX2Jlc3Rfc2VjKHN0cnVjdCBuZnM0X3NlY2luZm9fZmxhdm9ycyAqZmxhdm9ycykKIHsKIAlzdHJ1Y3QgZ3NzX2FwaV9tZWNoICptZWNoOwogCXN0cnVjdCB4ZHJfbmV0b2JqIG9pZDsKQEAgLTE0OCw2NyArMTQ4LDY0IEBACiAJcmV0dXJuIHBzZXVkb2ZsYXZvcjsKIH0KIAotc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX25lZ290aWF0ZV9zZWN1cml0eShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgbmZzX25lZ290aWF0ZV9zZWN1cml0eShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJICBjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICBycGNfYXV0aGZsYXZvcl90ICpmbGF2b3IpCiB7Ci0JaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3JzICpmbGF2b3JzOwogCWludCAoKnNlY2luZm8pKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgbmZzNF9zZWNpbmZvX2ZsYXZvcnMgKik7Ci0JcnBjX2F1dGhmbGF2b3JfdCBmbGF2b3IgPSBSUENfQVVUSF9VTklYOworCWludCByZXQgPSAtRVBFUk07CiAKIAlzZWNpbmZvID0gTkZTX1BST1RPKHBhcmVudC0+ZF9pbm9kZSktPnNlY2luZm87CiAJaWYgKHNlY2luZm8gIT0gTlVMTCkgewogCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKCFwYWdlKSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWZsYXZvcnMgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JCXN0YXR1cyA9IHNlY2luZm8ocGFyZW50LT5kX2lub2RlLCAmZGVudHJ5LT5kX25hbWUsIGZsYXZvcnMpOwotCQlmbGF2b3IgPSBuZnNfZmluZF9iZXN0X3NlYyhmbGF2b3JzLCBkZW50cnktPmRfaW5vZGUpOworCQlyZXQgPSBzZWNpbmZvKHBhcmVudC0+ZF9pbm9kZSwgJmRlbnRyeS0+ZF9uYW1lLCBmbGF2b3JzKTsKKwkJKmZsYXZvciA9IG5mc19maW5kX2Jlc3Rfc2VjKGZsYXZvcnMpOwogCQlwdXRfcGFnZShwYWdlKTsKIAl9CiAKLQlyZXR1cm4gZmxhdm9yOwotCiBvdXQ6Ci0Jc3RhdHVzID0gLUVOT01FTTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBycGNfYXV0aGZsYXZvcl90IG5mc19sb29rdXBfd2l0aF9zZWMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqcGF0aCwKLQkJCQkgICAgIHN0cnVjdCBuZnNfZmggKmZoLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3N0YXRpYyBpbnQgbmZzX2xvb2t1cF93aXRoX3NlYyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqcGF0aCwKKwkJCSAgICAgICBzdHJ1Y3QgbmZzX2ZoICpmaCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIsCisJCQkgICAgICAgcnBjX2F1dGhmbGF2b3JfdCAqZmxhdm9yKQogewotCXJwY19hdXRoZmxhdm9yX3QgZmxhdm9yOwogCXN0cnVjdCBycGNfY2xudCAqY2xvbmU7CiAJc3RydWN0IHJwY19hdXRoICphdXRoOwogCWludCBlcnI7CiAKLQlmbGF2b3IgPSBuZnNfbmVnb3RpYXRlX3NlY3VyaXR5KHBhcmVudCwgcGF0aC0+ZGVudHJ5KTsKLQlpZiAoZmxhdm9yIDwgMCkKKwllcnIgPSBuZnNfbmVnb3RpYXRlX3NlY3VyaXR5KHBhcmVudCwgcGF0aC0+ZGVudHJ5LCBmbGF2b3IpOworCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAljbG9uZSAgPSBycGNfY2xvbmVfY2xpZW50KHNlcnZlci0+Y2xpZW50KTsKLQlhdXRoICAgPSBycGNhdXRoX2NyZWF0ZShmbGF2b3IsIGNsb25lKTsKKwlhdXRoICAgPSBycGNhdXRoX2NyZWF0ZSgqZmxhdm9yLCBjbG9uZSk7CiAJaWYgKCFhdXRoKSB7Ci0JCWZsYXZvciA9IC1FSU87CisJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0X3NodXRkb3duOwogCX0KIAllcnIgPSBzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPmxvb2t1cChjbG9uZSwgcGFyZW50LT5kX2lub2RlLAogCQkJCQkJICAmcGF0aC0+ZGVudHJ5LT5kX25hbWUsCiAJCQkJCQkgIGZoLCBmYXR0cik7Ci0JaWYgKGVyciA8IDApCi0JCWZsYXZvciA9IGVycjsKIG91dF9zaHV0ZG93bjoKIAlycGNfc2h1dGRvd25fY2xpZW50KGNsb25lKTsKIG91dDoKLQlyZXR1cm4gZmxhdm9yOworCXJldHVybiBlcnI7CiB9CiAjZWxzZSAvKiBDT05GSUdfTkZTX1Y0ICovCi1zdGF0aWMgaW5saW5lIHJwY19hdXRoZmxhdm9yX3QgbmZzX2xvb2t1cF93aXRoX3NlYyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAotCQkJCSAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IG5mc19maCAqZmgsCi0JCQkJICAgICBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3N0YXRpYyBpbmxpbmUgaW50IG5mc19sb29rdXBfd2l0aF9zZWMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKKwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IG5mc19maCAqZmgsCisJCQkJICAgICAgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIsCisJCQkJICAgICAgcnBjX2F1dGhmbGF2b3JfdCAqZmxhdm9yKQogewogCXJldHVybiAtRVBFUk07CiB9CkBAIC0yMzQsNyArMjMxLDcgQEAKIAlzdHJ1Y3QgbmZzX2ZoICpmaCA9IE5VTEw7CiAJc3RydWN0IG5mc19mYXR0ciAqZmF0dHIgPSBOVUxMOwogCWludCBlcnI7Ci0JcnBjX2F1dGhmbGF2b3JfdCBmbGF2b3IgPSAxOworCXJwY19hdXRoZmxhdm9yX3QgZmxhdm9yID0gUlBDX0FVVEhfVU5JWDsKIAogCWRwcmludGsoIi0tPiBuZnNfZF9hdXRvbW91bnQoKVxuIik7CiAKQEAgLTI1NSwxMyArMjUyLDggQEAKIAllcnIgPSBzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPmxvb2t1cChzZXJ2ZXItPmNsaWVudCwgcGFyZW50LT5kX2lub2RlLAogCQkJCQkJICAmcGF0aC0+ZGVudHJ5LT5kX25hbWUsCiAJCQkJCQkgIGZoLCBmYXR0cik7Ci0JaWYgKGVyciA9PSAtRVBFUk0pIHsKLQkJZmxhdm9yID0gbmZzX2xvb2t1cF93aXRoX3NlYyhzZXJ2ZXIsIHBhcmVudCwgcGF0aC0+ZGVudHJ5LCBwYXRoLCBmaCwgZmF0dHIpOwotCQlpZiAoZmxhdm9yIDwgMCkKLQkJCWVyciA9IGZsYXZvcjsKLQkJZWxzZQotCQkJZXJyID0gMDsKLQl9CisJaWYgKGVyciA9PSAtRVBFUk0gJiYgTkZTX1BST1RPKHBhcmVudC0+ZF9pbm9kZSktPnNlY2luZm8gIT0gTlVMTCkKKwkJZXJyID0gbmZzX2xvb2t1cF93aXRoX3NlYyhzZXJ2ZXIsIHBhcmVudCwgcGF0aC0+ZGVudHJ5LCBwYXRoLCBmaCwgZmF0dHIsICZmbGF2b3IpOwogCWRwdXQocGFyZW50KTsKIAlpZiAoZXJyICE9IDApIHsKIAkJbW50ID0gRVJSX1BUUihlcnIpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRfZnMuaCBiL2ZzL25mcy9uZnM0X2ZzLmgKaW5kZXggZTFjMjYxZC4uYzRhNjk4MyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRfZnMuaAorKysgYi9mcy9uZnMvbmZzNF9mcy5oCkBAIC00Nyw2ICs0Nyw3IEBACiAJTkZTNENMTlRfTEFZT1VUUkVDQUxMLAogCU5GUzRDTE5UX1NFU1NJT05fUkVTRVQsCiAJTkZTNENMTlRfUkVDQUxMX1NMT1QsCisJTkZTNENMTlRfTEVBU0VfQ09ORklSTSwKIH07CiAKIGVudW0gbmZzNF9zZXNzaW9uX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5jIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKaW5kZXggNmY4MTkyZi4uYmU3OWRjOSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKKysrIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKQEAgLTExNyw2ICsxMTcsOCBAQAogCWNhc2UgLUVLRVlFWFBJUkVEOgogCQlycGNfZGVsYXkodGFzaywgRklMRUxBWU9VVF9QT0xMX1JFVFJZX01BWCk7CiAJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQOgorCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKCIlcyBEUyBlcnJvci4gUmV0cnkgdGhyb3VnaCBNRFMgJWRcbiIsIF9fZnVuY19fLAogCQkJdGFzay0+dGtfc3RhdHVzKTsKQEAgLTQxNiw3ICs0MTgsOCBAQAogZmlsZWxheW91dF9jaGVja19sYXlvdXQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCiAJCQlzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsLAogCQkJc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLAotCQkJc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkKQorCQkJc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkLAorCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqZHNhZGRyOwogCWludCBzdGF0dXMgPSAtRUlOVkFMOwpAQCAtNDM5LDcgKzQ0Miw3IEBACiAJLyogZmluZCBhbmQgcmVmZXJlbmNlIHRoZSBkZXZpY2VpZCAqLwogCWRzYWRkciA9IG5mczRfZmxfZmluZF9nZXRfZGV2aWNlaWQoaWQpOwogCWlmIChkc2FkZHIgPT0gTlVMTCkgewotCQlkc2FkZHIgPSBnZXRfZGV2aWNlX2luZm8obG8tPnBsaF9pbm9kZSwgaWQpOworCQlkc2FkZHIgPSBnZXRfZGV2aWNlX2luZm8obG8tPnBsaF9pbm9kZSwgaWQsIGdmcF9mbGFncyk7CiAJCWlmIChkc2FkZHIgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTUwMCw3ICs1MDMsOCBAQAogZmlsZWxheW91dF9kZWNvZGVfbGF5b3V0KHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmZsbywKIAkJCSBzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsLAogCQkJIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxnciwKLQkJCSBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqaWQpCisJCQkgc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkLAorCQkJIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgeGRyX3N0cmVhbSBzdHJlYW07CiAJc3RydWN0IHhkcl9idWYgYnVmID0gewpAQCAtNTE2LDcgKzUyMCw3IEBACiAKIAlkcHJpbnRrKCIlczogc2V0X2xheW91dF9tYXAgQmVnaW5cbiIsIF9fZnVuY19fKTsKIAotCXNjcmF0Y2ggPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXNjcmF0Y2ggPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJaWYgKCFzY3JhdGNoKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNTU0LDEzICs1NTgsMTMgQEAKIAkJZ290byBvdXRfZXJyOwogCiAJZmwtPmZoX2FycmF5ID0ga3phbGxvYyhmbC0+bnVtX2ZoICogc2l6ZW9mKHN0cnVjdCBuZnNfZmggKiksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCQkgICAgICAgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWZsLT5maF9hcnJheSkKIAkJZ290byBvdXRfZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGZsLT5udW1fZmg7IGkrKykgewogCQkvKiBEbyB3ZSB3YW50IHRvIHVzZSBhIG1lbXBvb2wgaGVyZT8gKi8KLQkJZmwtPmZoX2FycmF5W2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mc19maCksIEdGUF9LRVJORUwpOworCQlmbC0+ZmhfYXJyYXlbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzX2ZoKSwgZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFmbC0+ZmhfYXJyYXlbaV0pCiAJCQlnb3RvIG91dF9lcnJfZnJlZTsKIApAQCAtNjA1LDE5ICs2MDksMjAgQEAKIAogc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIGZpbGVsYXlvdXRfYWxsb2NfbHNlZyhzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwKLQkJICAgICAgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyKQorCQkgICAgICBzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpsZ3IsCisJCSAgICAgIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsOwogCWludCByYzsKIAlzdHJ1Y3QgbmZzNF9kZXZpY2VpZCBpZDsKIAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwotCWZsID0ga3phbGxvYyhzaXplb2YoKmZsKSwgR0ZQX0tFUk5FTCk7CisJZmwgPSBremFsbG9jKHNpemVvZigqZmwpLCBnZnBfZmxhZ3MpOwogCWlmICghZmwpCiAJCXJldHVybiBOVUxMOwogCi0JcmMgPSBmaWxlbGF5b3V0X2RlY29kZV9sYXlvdXQobGF5b3V0aWQsIGZsLCBsZ3IsICZpZCk7Ci0JaWYgKHJjICE9IDAgfHwgZmlsZWxheW91dF9jaGVja19sYXlvdXQobGF5b3V0aWQsIGZsLCBsZ3IsICZpZCkpIHsKKwlyYyA9IGZpbGVsYXlvdXRfZGVjb2RlX2xheW91dChsYXlvdXRpZCwgZmwsIGxnciwgJmlkLCBnZnBfZmxhZ3MpOworCWlmIChyYyAhPSAwIHx8IGZpbGVsYXlvdXRfY2hlY2tfbGF5b3V0KGxheW91dGlkLCBmbCwgbGdyLCAmaWQsIGdmcF9mbGFncykpIHsKIAkJX2ZpbGVsYXlvdXRfZnJlZV9sc2VnKGZsKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNjMzLDcgKzYzOCw3IEBACiAJCWludCBzaXplID0gKGZsLT5zdHJpcGVfdHlwZSA9PSBTVFJJUEVfU1BBUlNFKSA/CiAJCQlmbC0+ZHNhZGRyLT5kc19udW0gOiBmbC0+ZHNhZGRyLT5zdHJpcGVfY291bnQ7CiAKLQkJZmwtPmNvbW1pdF9idWNrZXRzID0ga2NhbGxvYyhzaXplLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOworCQlmbC0+Y29tbWl0X2J1Y2tldHMgPSBrY2FsbG9jKHNpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwgZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFmbC0+Y29tbWl0X2J1Y2tldHMpIHsKIAkJCWZpbGVsYXlvdXRfZnJlZV9sc2VnKCZmbC0+Z2VuZXJpY19oZHIpOwogCQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXQuaCBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCmluZGV4IDA4NWEzNTQuLjJiNDYxZDcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCisrKyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAicG5mcy5oIgogCiAvKgotICogRmllbGQgdGVzdGluZyBzaG93cyB3ZSBuZWVkIHRvIHN1cHBvcnQgdXB0byA0MDk2IHN0cmlwZSBpbmRpY2VzLgorICogRmllbGQgdGVzdGluZyBzaG93cyB3ZSBuZWVkIHRvIHN1cHBvcnQgdXAgdG8gNDA5NiBzdHJpcGUgaW5kaWNlcy4KICAqIFdlIHN0b3JlIGVhY2ggaW5kZXggYXMgYSB1OCAodTMyIG9uIHRoZSB3aXJlKSB0byBrZWVwIHRoZSBtZW1vcnkgZm9vdHByaW50CiAgKiByZWFzb25hYmxlLiBUaGlzIGluIHR1cm4gbWVhbnMgd2Ugc3VwcG9ydCBhIG1heGltdW0gb2YgMjU2CiAgKiBSRkMgNTY2MSBtdWx0aXBhdGhfbGlzdDQgc3RydWN0dXJlcy4KQEAgLTEwNCw2ICsxMDQsNiBAQAogbmZzNF9mbF9maW5kX2dldF9kZXZpY2VpZChzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqZGV2X2lkKTsKIGV4dGVybiB2b2lkIG5mczRfZmxfcHV0X2RldmljZWlkKHN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqZHNhZGRyKTsKIHN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqCi1nZXRfZGV2aWNlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldl9pZCk7CitnZXRfZGV2aWNlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldl9pZCwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAogI2VuZGlmIC8qIEZTX05GU19ORlM0RklMRUxBWU9VVF9IICovCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCmluZGV4IGRlNTM1MGYuLmRiMDdjN2EgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCisrKyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCkBAIC0yMjUsMTEgKzIyNSwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5mczRfcG5mc19kcyAqCi1uZnM0X3BuZnNfZHNfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBpcF9hZGRyLCB1MzIgcG9ydCkKK25mczRfcG5mc19kc19hZGQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGlwX2FkZHIsIHUzMiBwb3J0LCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mczRfcG5mc19kcyAqdG1wX2RzLCAqZHM7CiAKLQlkcyA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBfZHMpLCBHRlBfS0VSTkVMKTsKKwlkcyA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBfZHMpLCBnZnBfZmxhZ3MpOwogCWlmICghZHMpCiAJCWdvdG8gb3V0OwogCkBAIC0yNjEsNyArMjYxLDcgQEAKICAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnQgaXB2NCwgYW5kIG9uZSBtdWx0aS1wYXRoIGFkZHJlc3MuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZzNF9wbmZzX2RzICoKLWRlY29kZV9hbmRfYWRkX2RzKHN0cnVjdCB4ZHJfc3RyZWFtICpzdHJlYW1wLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorZGVjb2RlX2FuZF9hZGRfZHMoc3RydWN0IHhkcl9zdHJlYW0gKnN0cmVhbXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcyA9IE5VTEw7CiAJY2hhciAqYnVmOwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCQlybGVuKTsKIAkJZ290byBvdXRfZXJyOwogCX0KLQlidWYgPSBrbWFsbG9jKHJsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKHJsZW4gKyAxLCBnZnBfZmxhZ3MpOwogCWlmICghYnVmKSB7CiAJCWRwcmludGsoIiVzOiBOb3QgZW5vdWdoIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CkBAIC0zMzMsNyArMzMzLDcgQEAKIAlzc2NhbmYocHN0ciwgIi0lZC0lZCIsICZ0bXBbMF0sICZ0bXBbMV0pOwogCXBvcnQgPSBodG9ucygodG1wWzBdIDw8IDgpIHwgKHRtcFsxXSkpOwogCi0JZHMgPSBuZnM0X3BuZnNfZHNfYWRkKGlub2RlLCBpcF9hZGRyLCBwb3J0KTsKKwlkcyA9IG5mczRfcG5mc19kc19hZGQoaW5vZGUsIGlwX2FkZHIsIHBvcnQsIGdmcF9mbGFncyk7CiAJZHByaW50aygiJXM6IERlY29kZWQgYWRkcmVzcyBhbmQgcG9ydCAlc1xuIiwgX19mdW5jX18sIGJ1Zik7CiBvdXRfZnJlZToKIAlrZnJlZShidWYpOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAKIC8qIERlY29kZSBvcGFxdWUgZGV2aWNlIGRhdGEgYW5kIHJldHVybiB0aGUgcmVzdWx0ICovCiBzdGF0aWMgc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyKgotZGVjb2RlX2RldmljZShzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IHBuZnNfZGV2aWNlICpwZGV2KQorZGVjb2RlX2RldmljZShzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IHBuZnNfZGV2aWNlICpwZGV2LCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJaW50IGk7CiAJdTMyIGNudCwgbnVtOwpAQCAtMzYyLDcgKzM2Miw3IEBACiAJc3RydWN0IHBhZ2UgKnNjcmF0Y2g7CiAKIAkvKiBzZXQgdXAgeGRyIHN0cmVhbSAqLwotCXNjcmF0Y2ggPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXNjcmF0Y2ggPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJaWYgKCFzY3JhdGNoKQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTM4NCw3ICszODQsNyBAQAogCX0KIAogCS8qIHJlYWQgc3RyaXBlIGluZGljZXMgKi8KLQlzdHJpcGVfaW5kaWNlcyA9IGtjYWxsb2MoY250LCBzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKKwlzdHJpcGVfaW5kaWNlcyA9IGtjYWxsb2MoY250LCBzaXplb2YodTgpLCBnZnBfZmxhZ3MpOwogCWlmICghc3RyaXBlX2luZGljZXMpCiAJCWdvdG8gb3V0X2Vycl9mcmVlX3NjcmF0Y2g7CiAKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiAJZHNhZGRyID0ga3phbGxvYyhzaXplb2YoKmRzYWRkcikgKwogCQkJKHNpemVvZihzdHJ1Y3QgbmZzNF9wbmZzX2RzICopICogKG51bSAtIDEpKSwKLQkJCUdGUF9LRVJORUwpOworCQkJZ2ZwX2ZsYWdzKTsKIAlpZiAoIWRzYWRkcikKIAkJZ290byBvdXRfZXJyX2ZyZWVfc3RyaXBlX2luZGljZXM7CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCQlmb3IgKGogPSAwOyBqIDwgbXBfY291bnQ7IGorKykgewogCQkJaWYgKGogPT0gMCkgewogCQkJCWRzYWRkci0+ZHNfbGlzdFtpXSA9IGRlY29kZV9hbmRfYWRkX2RzKCZzdHJlYW0sCi0JCQkJCWlubyk7CisJCQkJCWlubywgZ2ZwX2ZsYWdzKTsKIAkJCQlpZiAoZHNhZGRyLT5kc19saXN0W2ldID09IE5VTEwpCiAJCQkJCWdvdG8gb3V0X2Vycl9mcmVlX2RldmljZWlkOwogCQkJfSBlbHNlIHsKQEAgLTUwMywxMiArNTAzLDEyIEBACiAgKiBhdmFpbGFibGUgZGV2aWNlcy4KICAqLwogc3RhdGljIHN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqCi1kZWNvZGVfYW5kX2FkZF9kZXZpY2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBuZnNfZGV2aWNlICpkZXYpCitkZWNvZGVfYW5kX2FkZF9kZXZpY2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBuZnNfZGV2aWNlICpkZXYsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKmQsICpuZXc7CiAJbG9uZyBoYXNoOwogCi0JbmV3ID0gZGVjb2RlX2RldmljZShpbm9kZSwgZGV2KTsKKwluZXcgPSBkZWNvZGVfZGV2aWNlKGlub2RlLCBkZXYsIGdmcF9mbGFncyk7CiAJaWYgKCFuZXcpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCBkZWNvZGUgb3IgYWRkIGRldmljZVxuIiwKIAkJCV9fZnVuY19fKTsKQEAgLTUzNyw3ICs1MzcsNyBAQAogICogb2YgYXZhaWxhYmxlIGRldmljZXMsIGFuZCByZXR1cm4gaXQuCiAgKi8KIHN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqCi1nZXRfZGV2aWNlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldl9pZCkKK2dldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqZGV2X2lkLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IHBuZnNfZGV2aWNlICpwZGV2ID0gTlVMTDsKIAl1MzIgbWF4X3Jlc3Bfc3o7CkBAIC01NTYsMTcgKzU1NiwxNyBAQAogCWRwcmludGsoIiVzIGlub2RlICVwIG1heF9yZXNwX3N6ICV1IG1heF9wYWdlcyAlZFxuIiwKIAkJX19mdW5jX18sIGlub2RlLCBtYXhfcmVzcF9zeiwgbWF4X3BhZ2VzKTsKIAotCXBkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlwZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBuZnNfZGV2aWNlKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAocGRldiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCXBhZ2VzID0ga3phbGxvYyhtYXhfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCXBhZ2VzID0ga3phbGxvYyhtYXhfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIGdmcF9mbGFncyk7CiAJaWYgKHBhZ2VzID09IE5VTEwpIHsKIAkJa2ZyZWUocGRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgbWF4X3BhZ2VzOyBpKyspIHsKLQkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFwYWdlc1tpXSkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQpAQCAtNTg3LDcgKzU4Nyw3IEBACiAJICogRm91bmQgbmV3IGRldmljZSwgbmVlZCB0byBkZWNvZGUgaXQgYW5kIHRoZW4gYWRkIGl0IHRvIHRoZQogCSAqIGxpc3Qgb2Yga25vd24gZGV2aWNlcyBmb3IgdGhpcyBtb3VudHBvaW50LgogCSAqLwotCWRzYWRkciA9IGRlY29kZV9hbmRfYWRkX2RldmljZShpbm9kZSwgcGRldik7CisJZHNhZGRyID0gZGVjb2RlX2FuZF9hZGRfZGV2aWNlKGlub2RlLCBwZGV2LCBnZnBfZmxhZ3MpOwogb3V0X2ZyZWU6CiAJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgaSsrKQogCQlfX2ZyZWVfcGFnZShwYWdlc1tpXSk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGRmZDFlNmQuLmNmMWIzMzkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvbmZzNC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCQlyZXQgPSBuZnM0X2RlbGF5KHNlcnZlci0+Y2xpZW50LCAmZXhjZXB0aW9uLT50aW1lb3V0KTsKIAkJCWlmIChyZXQgIT0gMCkKIAkJCQlicmVhazsKKwkJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CiAJCWNhc2UgLU5GUzRFUlJfT0xEX1NUQVRFSUQ6CiAJCQlleGNlcHRpb24tPnJldHJ5ID0gMTsKIAkJCWJyZWFrOwpAQCAtNDQzLDggKzQ0NSw4IEBACiAJaWYgKHJlcy0+c3Jfc3RhdHVzID09IDEpCiAJCXJlcy0+c3Jfc3RhdHVzID0gTkZTX09LOwogCi0JLyogLUVSRVNUQVJUU1lTIGNhbiByZXN1bHQgaW4gc2tpcHBpbmcgbmZzNDFfc2VxdWVuY2Vfc2V0dXAgKi8KLQlpZiAoIXJlcy0+c3Jfc2xvdCkKKwkvKiBkb24ndCBpbmNyZW1lbnQgdGhlIHNlcXVlbmNlIG51bWJlciBpZiB0aGUgdGFzayB3YXNuJ3Qgc2VudCAqLworCWlmICghUlBDX1dBU19TRU5UKHRhc2spKQogCQlnb3RvIG91dDsKIAogCS8qIENoZWNrIHRoZSBTRVFVRU5DRSBvcGVyYXRpb24gc3RhdHVzICovCkBAIC0yMTg1LDkgKzIxODcsMTQgQEAKIAlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OwogCWludCBlcnI7CiAJZG8gewotCQllcnIgPSBuZnM0X2hhbmRsZV9leGNlcHRpb24oc2VydmVyLAotCQkJCV9uZnM0X2xvb2t1cF9yb290KHNlcnZlciwgZmhhbmRsZSwgaW5mbyksCi0JCQkJJmV4Y2VwdGlvbik7CisJCWVyciA9IF9uZnM0X2xvb2t1cF9yb290KHNlcnZlciwgZmhhbmRsZSwgaW5mbyk7CisJCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAtTkZTNEVSUl9XUk9OR1NFQzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyID0gbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwgZXJyLCAmZXhjZXB0aW9uKTsKKwkJfQogCX0gd2hpbGUgKGV4Y2VwdGlvbi5yZXRyeSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyMDQsMzEgKzIyMTEsNTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IG5mczRfbG9va3VwX3Jvb3Qoc2VydmVyLCBmaGFuZGxlLCBpbmZvKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gLUVBR0FJTjsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG5mczRfZmluZF9yb290X3NlYyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlLAorCQkJICAgICAgc3RydWN0IG5mc19mc2luZm8gKmluZm8pCit7CisJaW50IGksIGxlbiwgc3RhdHVzID0gMDsKKwlycGNfYXV0aGZsYXZvcl90IGZsYXZfYXJyYXlbTkZTX01BWF9TRUNGTEFWT1JTXTsKKworCWxlbiA9IGdzc19tZWNoX2xpc3RfcHNldWRvZmxhdm9ycygmZmxhdl9hcnJheVswXSk7CisJZmxhdl9hcnJheVtsZW5dID0gUlBDX0FVVEhfTlVMTDsKKwlsZW4gKz0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlzdGF0dXMgPSBuZnM0X2xvb2t1cF9yb290X3NlYyhzZXJ2ZXIsIGZoYW5kbGUsIGluZm8sIGZsYXZfYXJyYXlbaV0pOworCQlpZiAoc3RhdHVzID09IC1ORlM0RVJSX1dST05HU0VDIHx8IHN0YXR1cyA9PSAtRUFDQ0VTKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKwkvKgorCSAqIC1FQUNDRVNTIGNvdWxkIG1lYW4gdGhhdCB0aGUgdXNlciBkb2Vzbid0IGhhdmUgY29ycmVjdCBwZXJtaXNzaW9ucworCSAqIHRvIGFjY2VzcyB0aGUgbW91bnQuICBJdCBjb3VsZCBhbHNvIG1lYW4gdGhhdCB3ZSB0cmllZCB0byBtb3VudAorCSAqIHdpdGggYSBnc3MgYXV0aCBmbGF2b3IsIGJ1dCBycGMuZ3NzZCBpc24ndCBydW5uaW5nLiAgRWl0aGVyIHdheSwKKwkgKiBleGlzdGluZyBtb3VudCBwcm9ncmFtcyBkb24ndCBoYW5kbGUgLUVBQ0NFUyB2ZXJ5IHdlbGwgc28gaXQgc2hvdWxkCisJICogYmUgbWFwcGVkIHRvIC1FUEVSTSBpbnN0ZWFkLgorCSAqLworCWlmIChzdGF0dXMgPT0gLUVBQ0NFUykKKwkJc3RhdHVzID0gLUVQRVJNOworCXJldHVybiBzdGF0dXM7Cit9CisKIC8qCiAgKiBnZXQgdGhlIGZpbGUgaGFuZGxlIGZvciB0aGUgIi8iIGRpcmVjdG9yeSBvbiB0aGUgc2VydmVyCiAgKi8KIHN0YXRpYyBpbnQgbmZzNF9wcm9jX2dldF9yb290KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCiAJCQkgICAgICBzdHJ1Y3QgbmZzX2ZzaW5mbyAqaW5mbykKIHsKLQlpbnQgaSwgbGVuLCBzdGF0dXMgPSAwOwotCXJwY19hdXRoZmxhdm9yX3QgZmxhdl9hcnJheVtORlNfTUFYX1NFQ0ZMQVZPUlMgKyAyXTsKLQotCWZsYXZfYXJyYXlbMF0gPSBSUENfQVVUSF9VTklYOwotCWxlbiA9IGdzc19tZWNoX2xpc3RfcHNldWRvZmxhdm9ycygmZmxhdl9hcnJheVsxXSk7Ci0JZmxhdl9hcnJheVsxK2xlbl0gPSBSUENfQVVUSF9OVUxMOwotCWxlbiArPSAyOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXN0YXR1cyA9IG5mczRfbG9va3VwX3Jvb3Rfc2VjKHNlcnZlciwgZmhhbmRsZSwgaW5mbywgZmxhdl9hcnJheVtpXSk7Ci0JCWlmIChzdGF0dXMgPT0gMCkKLQkJCWJyZWFrOwotCX0KKwlpbnQgc3RhdHVzID0gbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pOworCWlmICgoc3RhdHVzID09IC1ORlM0RVJSX1dST05HU0VDKSAmJiAhKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfU0VDRkxBVk9VUikpCisJCS8qCisJCSAqIEEgc3RhdHVzIG9mIC1ORlM0RVJSX1dST05HU0VDIHdpbGwgYmUgbWFwcGVkIHRvIC1FUEVSTQorCQkgKiBieSBuZnM0X21hcF9lcnJvcnMoKSBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLgorCQkgKi8KKwkJc3RhdHVzID0gbmZzNF9maW5kX3Jvb3Rfc2VjKHNlcnZlciwgZmhhbmRsZSwgaW5mbyk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQlzdGF0dXMgPSBuZnM0X3NlcnZlcl9jYXBhYmlsaXRpZXMoc2VydmVyLCBmaGFuZGxlKTsKIAlpZiAoc3RhdHVzID09IDApCkBAIC0zNjY5LDYgKzM2OTYsNyBAQAogCQkJcnBjX2RlbGF5KHRhc2ssIE5GUzRfUE9MTF9SRVRSWV9NQVgpOwogCQkJdGFzay0+dGtfc3RhdHVzID0gMDsKIAkJCXJldHVybiAtRUFHQUlOOworCQljYXNlIC1ORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUDoKIAkJY2FzZSAtTkZTNEVSUl9PTERfU1RBVEVJRDoKIAkJCXRhc2stPnRrX3N0YXR1cyA9IDA7CiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTM3MjUsMjEgKzM3NTMsMjAgQEAKIAkJCQlzaXplb2Yoc2V0Y2xpZW50aWQuc2NfdWFkZHIpLCAiJXMuJXUuJXUiLAogCQkJCWNscC0+Y2xfaXBhZGRyLCBwb3J0ID4+IDgsIHBvcnQgJiAyNTUpOwogCi0JCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAkJaWYgKHN0YXR1cyAhPSAtTkZTNEVSUl9DTElEX0lOVVNFKQogCQkJYnJlYWs7Ci0JCWlmIChzaWduYWxsZWQoKSkKKwkJaWYgKGxvb3AgIT0gMCkgeworCQkJKytjbHAtPmNsX2lkX3VuaXF1aWZpZXI7CiAJCQlicmVhazsKLQkJaWYgKGxvb3ArKyAmIDEpCi0JCQlzc2xlZXAoY2xwLT5jbF9sZWFzZV90aW1lIC8gSFogKyAxKTsKLQkJZWxzZQotCQkJaWYgKCsrY2xwLT5jbF9pZF91bmlxdWlmaWVyID09IDApCi0JCQkJYnJlYWs7CisJCX0KKwkJKytsb29wOworCQlzc2xlZXAoY2xwLT5jbF9sZWFzZV90aW1lIC8gSFogKyAxKTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IG5mc19jbGllbnQgKmNscCwKK2ludCBuZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAogCQlzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZF9yZXMgKmFyZywKIAkJc3RydWN0IHJwY19jcmVkICpjcmVkKQogewpAQCAtMzc1NCw3ICszNzgxLDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJbm93ID0gamlmZmllczsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwogCQljbHAtPmNsX2xlYXNlX3RpbWUgPSBmc2luZm8ubGVhc2VfdGltZSAqIEhaOwpAQCAtMzc2NCwyNiArMzc5MSw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCXN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqYXJnLAotCQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCi17Ci0JbG9uZyB0aW1lb3V0ID0gMDsKLQlpbnQgZXJyOwotCWRvIHsKLQkJZXJyID0gX25mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKGNscCwgYXJnLCBjcmVkKTsKLQkJc3dpdGNoIChlcnIpIHsKLQkJCWNhc2UgMDoKLQkJCQlyZXR1cm4gZXJyOwotCQkJY2FzZSAtTkZTNEVSUl9SRVNPVVJDRToKLQkJCQkvKiBUaGUgSUJNIGxhd3llcnMgbWlzcmVhZCBhbm90aGVyIGRvY3VtZW50ISAqLwotCQkJY2FzZSAtTkZTNEVSUl9ERUxBWToKLQkJCQllcnIgPSBuZnM0X2RlbGF5KGNscC0+Y2xfcnBjY2xpZW50LCAmdGltZW91dCk7Ci0JCX0KLQl9IHdoaWxlIChlcnIgPT0gMCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RydWN0IG5mczRfZGVsZWdyZXR1cm5kYXRhIHsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybmFyZ3MgYXJnczsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybnJlcyByZXM7CkBAIC00Nzg4LDcgKzQ3OTUsNyBAQAogCQkJCWluaXRfdXRzbmFtZSgpLT5kb21haW5uYW1lLAogCQkJCWNscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0Jc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CisJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgUlBDX1RBU0tfVElNRU9VVCk7CiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IG5mczRfY2hlY2tfY2xfZXhjaGFuZ2VfZmxhZ3MoY2xwLT5jbF9leGNoYW5nZV9mbGFncyk7CiAJZHByaW50aygiPC0tICVzIHN0YXR1cz0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwpAQCAtNDgzOSw2ICs0ODQ2LDggQEAKIAkJZHByaW50aygiJXMgUmV0cnk6IHRrX3N0YXR1cyAlZFxuIiwgX19mdW5jX18sIHRhc2stPnRrX3N0YXR1cyk7CiAJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUlOKTsKIAkJdGFzay0+dGtfc3RhdHVzID0gMDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CiAJCW5mc19yZXN0YXJ0X3JwYyh0YXNrLCBkYXRhLT5jbHApOwogCQlyZXR1cm47CiAJfQpAQCAtNDg3MSw3ICs0ODgwLDggQEAKIAkJLnJwY19jbGllbnQgPSBjbHAtPmNsX3JwY2NsaWVudCwKIAkJLnJwY19tZXNzYWdlID0gJm1zZywKIAkJLmNhbGxiYWNrX29wcyA9ICZuZnM0X2dldF9sZWFzZV90aW1lX29wcywKLQkJLmNhbGxiYWNrX2RhdGEgPSAmZGF0YQorCQkuY2FsbGJhY2tfZGF0YSA9ICZkYXRhLAorCQkuZmxhZ3MgPSBSUENfVEFTS19USU1FT1VULAogCX07CiAJaW50IHN0YXR1czsKIApAQCAtNTE3Myw3ICs1MTgzLDcgQEAKIAluZnM0X2luaXRfY2hhbm5lbF9hdHRycygmYXJncyk7CiAJYXJncy5mbGFncyA9IChTRVNTSU9ONF9QRVJTSVNUIHwgU0VTU0lPTjRfQkFDS19DSEFOKTsKIAotCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIFJQQ19UQVNLX1RJTUVPVVQpOwogCiAJaWYgKCFzdGF0dXMpCiAJCS8qIFZlcmlmeSB0aGUgc2Vzc2lvbidzIG5lZ290aWF0ZWQgY2hhbm5lbF9hdHRycyB2YWx1ZXMgKi8KQEAgLTUxOTYsMjAgKzUyMDYsMTAgQEAKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkICpwdHI7CiAJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNscC0+Y2xfc2Vzc2lvbjsKLQlsb25nIHRpbWVvdXQgPSAwOwotCWludCBlcnI7CiAKIAlkcHJpbnRrKCItLT4gJXMgY2xwPSVwIHNlc3Npb249JXBcbiIsIF9fZnVuY19fLCBjbHAsIHNlc3Npb24pOwogCi0JZG8gewotCQlzdGF0dXMgPSBfbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7Ci0JCWlmIChzdGF0dXMgPT0gLU5GUzRFUlJfREVMQVkpIHsKLQkJCWVyciA9IG5mczRfZGVsYXkoY2xwLT5jbF9ycGNjbGllbnQsICZ0aW1lb3V0KTsKLQkJCWlmIChlcnIpCi0JCQkJc3RhdHVzID0gZXJyOwotCQl9Ci0JfSB3aGlsZSAoc3RhdHVzID09IC1ORlM0RVJSX0RFTEFZKTsKLQorCXN0YXR1cyA9IF9uZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIApAQCAtNTI1MCw3ICs1MjUwLDcgQEAKIAltc2cucnBjX2FyZ3AgPSBzZXNzaW9uOwogCW1zZy5ycGNfcmVzcCA9IE5VTEw7CiAJbXNnLnJwY19jcmVkID0gTlVMTDsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlc3Npb24tPmNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlc3Npb24tPmNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAogCWlmIChzdGF0dXMpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTU0ODMsNiArNTQ4Myw4IEBACiAJCWJyZWFrOwogCWNhc2UgLU5GUzRFUlJfREVMQVk6CiAJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUFYKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CiAJCXJldHVybiAtRUFHQUlOOwogCWRlZmF1bHQ6CiAJCW5mczRfc2NoZWR1bGVfbGVhc2VfcmVjb3ZlcnkoY2xwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCBhNjgwNGY3Li4wMzZmNWFkIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC02NCwxMCArNjQsMTUgQEAKIAogaW50IG5mczRfaW5pdF9jbGllbnRpZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7Ci0Jc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzIGNsaWQ7CisJc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzIGNsaWQgPSB7CisJCS5jbGllbnRpZCA9IGNscC0+Y2xfY2xpZW50aWQsCisJCS5jb25maXJtID0gY2xwLT5jbF9jb25maXJtLAorCX07CiAJdW5zaWduZWQgc2hvcnQgcG9ydDsKIAlpbnQgc3RhdHVzOwogCisJaWYgKHRlc3RfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKSkKKwkJZ290byBkb19jb25maXJtOwogCXBvcnQgPSBuZnNfY2FsbGJhY2tfdGNwcG9ydDsKIAlpZiAoY2xwLT5jbF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikKIAkJcG9ydCA9IG5mc19jYWxsYmFja190Y3Bwb3J0NjsKQEAgLTc1LDEwICs4MCwxNCBAQAogCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZChjbHAsIE5GUzRfQ0FMTEJBQ0ssIHBvcnQsIGNyZWQsICZjbGlkKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OworCWNscC0+Y2xfY2xpZW50aWQgPSBjbGlkLmNsaWVudGlkOworCWNscC0+Y2xfY29uZmlybSA9IGNsaWQuY29uZmlybTsKKwlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKTsKK2RvX2NvbmZpcm06CiAJc3RhdHVzID0gbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oY2xwLCAmY2xpZCwgY3JlZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQljbHAtPmNsX2NsaWVudGlkID0gY2xpZC5jbGllbnRpZDsKKwljbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOwogCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVuZXdhbChjbHApOwogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC0yMzAsMTMgKzIzOSwxOCBAQAogewogCWludCBzdGF0dXM7CiAKKwlpZiAodGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpKQorCQlnb3RvIGRvX2NvbmZpcm07CiAJbmZzNF9iZWdpbl9kcmFpbl9zZXNzaW9uKGNscCk7CiAJc3RhdHVzID0gbmZzNF9wcm9jX2V4Y2hhbmdlX2lkKGNscCwgY3JlZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKKwlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKTsKK2RvX2NvbmZpcm06CiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKKwljbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOwogCW5mczQxX3NldHVwX3N0YXRlX3JlbmV3YWwoY2xwKTsKIAluZnNfbWFya19jbGllbnRfcmVhZHkoY2xwLCBORlNfQ1NfUkVBRFkpOwogb3V0OgpAQCAtMTU4NCwyMCArMTU5OCwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBuZnM0X3NldF9sZWFzZV9leHBpcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGludCBzdGF0dXMpCiB7Ci0JaWYgKG5mczRfaGFzX3Nlc3Npb24oY2xwKSkgewotCQlzd2l0Y2ggKHN0YXR1cykgewotCQljYXNlIC1ORlM0RVJSX0RFTEFZOgotCQljYXNlIC1ORlM0RVJSX0NMSURfSU5VU0U6Ci0JCWNhc2UgLUVBR0FJTjoKLQkJCWJyZWFrOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAtTkZTNEVSUl9DTElEX0lOVVNFOgorCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CisJCWNsZWFyX2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmY2xwLT5jbF9zdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfREVMQVk6CisJY2FzZSAtRVRJTUVET1VUOgorCWNhc2UgLUVBR0FJTjoKKwkJc3NsZWVwKDEpOworCQlicmVhazsKIAotCQljYXNlIC1FS0VZRVhQSVJFRDoKLQkJCW5mczRfd2Fybl9rZXlleHBpcmVkKGNscC0+Y2xfaG9zdG5hbWUpOwotCQljYXNlIC1ORlM0RVJSX05PVF9TQU1FOiAvKiBGaXhNZTogaW1wbGVtZW50IHJlY292ZXJ5Ci0JCQkJCSAqIGluIG5mczRfZXhjaGFuZ2VfaWQgKi8KLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQorCWNhc2UgLUVLRVlFWFBJUkVEOgorCQluZnM0X3dhcm5fa2V5ZXhwaXJlZChjbHAtPmNsX2hvc3RuYW1lKTsKKwljYXNlIC1ORlM0RVJSX05PVF9TQU1FOiAvKiBGaXhNZTogaW1wbGVtZW50IHJlY292ZXJ5CisJCQkJICogaW4gbmZzNF9leGNoYW5nZV9pZCAqLworCWRlZmF1bHQ6CisJCXJldHVybjsKIAl9CiAJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSk7CiB9CkBAIC0xNjA3LDcgKzE2MjQsNyBAQAogCWludCBzdGF0dXMgPSAwOwogCiAJLyogRW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gTkZTdjQgc3RhdGUgKi8KLQlmb3IoOzspIHsKKwlkbyB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpKSB7CiAJCQkvKiBXZSdyZSBnb2luZyB0byBoYXZlIHRvIHJlLWVzdGFibGlzaCBhIGNsaWVudGlkICovCiAJCQlzdGF0dXMgPSBuZnM0X3JlY2xhaW1fbGVhc2UoY2xwKTsKQEAgLTE2OTEsNyArMTcwOCw3IEBACiAJCQlicmVhazsKIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQoTkZTNENMTlRfTUFOQUdFUl9SVU5OSU5HLCAmY2xwLT5jbF9zdGF0ZSkgIT0gMCkKIAkJCWJyZWFrOwotCX0KKwl9IHdoaWxlIChhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkgPiAxKTsKIAlyZXR1cm47CiBvdXRfZXJyb3I6CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3I6IHN0YXRlIG1hbmFnZXIgZmFpbGVkIG9uIE5GU3Y0IHNlcnZlciAlcyIKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IGRkZGZiNTcuLmMzY2NkMmMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtMTQ1MiwyNiArMTQ1MiwyNSBAQAogCiBzdGF0aWMgdm9pZCBlbmNvZGVfcmVhZGRpcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzNF9yZWFkZGlyX2FyZyAqcmVhZGRpciwgc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKLQl1aW50MzJfdCBhdHRyc1syXSA9IHswLCAwfTsKKwl1aW50MzJfdCBhdHRyc1syXSA9IHsKKwkJRkFUVFI0X1dPUkQwX1JEQVRUUl9FUlJPUiwKKwkJRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlELAorCX07CiAJdWludDMyX3QgZGlyY291bnQgPSByZWFkZGlyLT5jb3VudCA+PiAxOwogCV9fYmUzMiAqcDsKIAogCWlmIChyZWFkZGlyLT5wbHVzKSB7CiAJCWF0dHJzWzBdIHw9IEZBVFRSNF9XT1JEMF9UWVBFfEZBVFRSNF9XT1JEMF9DSEFOR0V8RkFUVFI0X1dPUkQwX1NJWkV8Ci0JCQlGQVRUUjRfV09SRDBfRlNJRHxGQVRUUjRfV09SRDBfRklMRUhBTkRMRTsKKwkJCUZBVFRSNF9XT1JEMF9GU0lEfEZBVFRSNF9XT1JEMF9GSUxFSEFORExFfEZBVFRSNF9XT1JEMF9GSUxFSUQ7CiAJCWF0dHJzWzFdIHw9IEZBVFRSNF9XT1JEMV9NT0RFfEZBVFRSNF9XT1JEMV9OVU1MSU5LU3xGQVRUUjRfV09SRDFfT1dORVJ8CiAJCQlGQVRUUjRfV09SRDFfT1dORVJfR1JPVVB8RkFUVFI0X1dPUkQxX1JBV0RFVnwKIAkJCUZBVFRSNF9XT1JEMV9TUEFDRV9VU0VEfEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU3wKIAkJCUZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBfEZBVFRSNF9XT1JEMV9USU1FX01PRElGWTsKIAkJZGlyY291bnQgPj49IDE7CiAJfQotCWF0dHJzWzBdIHw9IEZBVFRSNF9XT1JEMF9SREFUVFJfRVJST1J8RkFUVFI0X1dPUkQwX0ZJTEVJRDsKLQlhdHRyc1sxXSB8PSBGQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7Ci0JLyogU3dpdGNoIHRvIG1vdW50ZWRfb25fZmlsZWlkIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KLQlpZiAocmVhZGRpci0+Yml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCkKLQkJYXR0cnNbMF0gJj0gfkZBVFRSNF9XT1JEMF9GSUxFSUQ7Ci0JZWxzZQotCQlhdHRyc1sxXSAmPSB+RkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEOworCS8qIFVzZSBtb3VudGVkX29uX2ZpbGVpZCBvbmx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KKwlpZiAoIShyZWFkZGlyLT5iaXRtYXNrWzFdICYgRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEKSkKKwkJYXR0cnNbMF0gfD0gRkFUVFI0X1dPUkQwX0ZJTEVJRDsKIAogCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTIrTkZTNF9WRVJJRklFUl9TSVpFKzIwKTsKIAkqcCsrID0gY3B1X3RvX2JlMzIoT1BfUkVBRERJUik7CkBAIC0zMTQwLDcgKzMxMzksNyBAQAogCQkJZ290byBvdXRfb3ZlcmZsb3c7CiAJCXhkcl9kZWNvZGVfaHlwZXIocCwgZmlsZWlkKTsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7Ci0JCXJldCA9IE5GU19BVFRSX0ZBVFRSX0ZJTEVJRDsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQ7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlaWQ9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqZmlsZWlkKTsKIAlyZXR1cm4gcmV0OwpAQCAtNDAwMiw3ICs0MDAxLDYgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXVtb2RlX3QgZm1vZGUgPSAwOwotCXVpbnQ2NF90IGZpbGVpZDsKIAl1aW50MzJfdCB0eXBlOwogCiAJc3RhdHVzID0gZGVjb2RlX2F0dHJfdHlwZSh4ZHIsIGJpdG1hcCwgJnR5cGUpOwpAQCAtNDEwMSwxMyArNDA5OSwxMCBAQAogCQlnb3RvIHhkcl9lcnJvcjsKIAlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwogCi0Jc3RhdHVzID0gZGVjb2RlX2F0dHJfbW91bnRlZF9vbl9maWxlaWQoeGRyLCBiaXRtYXAsICZmaWxlaWQpOworCXN0YXR1cyA9IGRlY29kZV9hdHRyX21vdW50ZWRfb25fZmlsZWlkKHhkciwgYml0bWFwLCAmZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKHN0YXR1cyAhPSAwICYmICEoZmF0dHItPnZhbGlkICYgc3RhdHVzKSkgewotCQlmYXR0ci0+ZmlsZWlkID0gZmlsZWlkOwotCQlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwotCX0KKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwogCiB4ZHJfZXJyb3I6CiAJZHByaW50aygiJXM6IHhkciByZXR1cm5lZCAlZFxuIiwgX19mdW5jX18sIC1zdGF0dXMpOwpAQCAtNDgzOCwxNyArNDgzMywyMSBAQAogCXN0cnVjdCBuZnM0X3NlY2luZm9fZmxhdm9yICpzZWNfZmxhdm9yOwogCWludCBzdGF0dXM7CiAJX19iZTMyICpwOwotCWludCBpOworCWludCBpLCBudW1fZmxhdm9yczsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9TRUNJTkZPKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKIAlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKIAlpZiAodW5saWtlbHkoIXApKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKLQlyZXMtPmZsYXZvcnMtPm51bV9mbGF2b3JzID0gYmUzMl90b19jcHVwKHApOwogCi0JZm9yIChpID0gMDsgaSA8IHJlcy0+Zmxhdm9ycy0+bnVtX2ZsYXZvcnM7IGkrKykgeworCXJlcy0+Zmxhdm9ycy0+bnVtX2ZsYXZvcnMgPSAwOworCW51bV9mbGF2b3JzID0gYmUzMl90b19jcHVwKHApOworCisJZm9yIChpID0gMDsgaSA8IG51bV9mbGF2b3JzOyBpKyspIHsKIAkJc2VjX2ZsYXZvciA9ICZyZXMtPmZsYXZvcnMtPmZsYXZvcnNbaV07Ci0JCWlmICgoY2hhciAqKSZzZWNfZmxhdm9yWzFdIC0gKGNoYXIgKilyZXMgPiBQQUdFX1NJWkUpCisJCWlmICgoY2hhciAqKSZzZWNfZmxhdm9yWzFdIC0gKGNoYXIgKilyZXMtPmZsYXZvcnMgPiBQQUdFX1NJWkUpCiAJCQlicmVhazsKIAogCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKQEAgLTQ4NTcsMTMgKzQ4NTYsMTUgQEAKIAkJc2VjX2ZsYXZvci0+Zmxhdm9yID0gYmUzMl90b19jcHVwKHApOwogCiAJCWlmIChzZWNfZmxhdm9yLT5mbGF2b3IgPT0gUlBDX0FVVEhfR1NTKSB7Ci0JCQlpZiAoZGVjb2RlX3NlY2luZm9fZ3NzKHhkciwgc2VjX2ZsYXZvcikpCi0JCQkJYnJlYWs7CisJCQlzdGF0dXMgPSBkZWNvZGVfc2VjaW5mb19nc3MoeGRyLCBzZWNfZmxhdm9yKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBvdXQ7CiAJCX0KKwkJcmVzLT5mbGF2b3JzLT5udW1fZmxhdm9ycysrOwogCX0KIAotCXJldHVybiAwOwotCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKIG91dF9vdmVyZmxvdzoKIAlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CiAJcmV0dXJuIC1FSU87CkBAIC02NDA4LDcgKzY0MDksOSBAQAogCWlmIChkZWNvZGVfZ2V0ZmF0dHJfYXR0cnMoeGRyLCBiaXRtYXAsIGVudHJ5LT5mYXR0ciwgZW50cnktPmZoLAogCQkJCQllbnRyeS0+c2VydmVyLCAxKSA8IDApCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKQorCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQpCisJCWVudHJ5LT5pbm8gPSBlbnRyeS0+ZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkOworCWVsc2UgaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpCiAJCWVudHJ5LT5pbm8gPSBlbnRyeS0+ZmF0dHItPmZpbGVpZDsKIAogCWVudHJ5LT5kX3R5cGUgPSBEVF9VTktOT1dOOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuYyBiL2ZzL25mcy9wbmZzLmMKaW5kZXggZDlhYjk3Mi4uZjU3ZjUyOCAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuYworKysgYi9mcy9uZnMvcG5mcy5jCkBAIC0zODMsNiArMzgzLDcgQEAKIAkJCQlwbGhfbGF5b3V0cyk7CiAJCWRwcmludGsoIiVzIGZyZWVpbmcgbGF5b3V0IGZvciBpbm9kZSAlbHVcbiIsIF9fZnVuY19fLAogCQkJbG8tPnBsaF9pbm9kZS0+aV9pbm8pOworCQlsaXN0X2RlbF9pbml0KCZsby0+cGxoX2xheW91dHMpOwogCQlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGxvLT5wbGhfaW5vZGUpKTsKIAl9CiB9CkBAIC00NjYsNyArNDY3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqCiBzZW5kX2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKIAkgICBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCSAgIHUzMiBpb21vZGUpCisJICAgdTMyIGlvbW9kZSwKKwkgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlICppbm8gPSBsby0+cGxoX2lub2RlOwogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGlubyk7CkBAIC00NzksNyArNDgxLDcgQEAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAogCUJVR19PTihjdHggPT0gTlVMTCk7Ci0JbGdwID0ga3phbGxvYyhzaXplb2YoKmxncCksIEdGUF9LRVJORUwpOworCWxncCA9IGt6YWxsb2Moc2l6ZW9mKCpsZ3ApLCBnZnBfZmxhZ3MpOwogCWlmIChsZ3AgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTQ4NywxMiArNDg5LDEyIEBACiAJbWF4X3Jlc3Bfc3ogPSBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3Nlc3Npb24tPmZjX2F0dHJzLm1heF9yZXNwX3N6OwogCW1heF9wYWdlcyA9IG1heF9yZXNwX3N6ID4+IFBBR0VfU0hJRlQ7CiAKLQlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBnZnBfZmxhZ3MpOwogCWlmICghcGFnZXMpCiAJCWdvdG8gb3V0X2Vycl9mcmVlOwogCiAJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgaSsrKSB7Ci0JCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJCWlmICghcGFnZXNbaV0pCiAJCQlnb3RvIG91dF9lcnJfZnJlZTsKIAl9CkBAIC01MDgsNiArNTEwLDcgQEAKIAlsZ3AtPmFyZ3MubGF5b3V0LnBhZ2VzID0gcGFnZXM7CiAJbGdwLT5hcmdzLmxheW91dC5wZ2xlbiA9IG1heF9wYWdlcyAqIFBBR0VfU0laRTsKIAlsZ3AtPmxzZWdwcCA9ICZsc2VnOworCWxncC0+Z2ZwX2ZsYWdzID0gZ2ZwX2ZsYWdzOwogCiAJLyogU3luY2hyb25vdXNseSByZXRyaWV2ZSBsYXlvdXQgaW5mb3JtYXRpb24gZnJvbSBzZXJ2ZXIgYW5kCiAJICogc3RvcmUgaW4gbHNlZy4KQEAgLTY2NSwxMSArNjY4LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICoKLWFsbG9jX2luaXRfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlubykKK2FsbG9jX2luaXRfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlubywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOwogCi0JbG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyKSwgR0ZQX0tFUk5FTCk7CisJbG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWxvKQogCQlyZXR1cm4gTlVMTDsKIAlhdG9taWNfc2V0KCZsby0+cGxoX3JlZmNvdW50LCAxKTsKQEAgLTY4MSw3ICs2ODQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqCi1wbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vKQorcG5mc19maW5kX2FsbG9jX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm8pOwogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKm5ldyA9IE5VTEw7CkBAIC02OTYsNyArNjk5LDcgQEAKIAkJCXJldHVybiBuZnNpLT5sYXlvdXQ7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7Ci0JbmV3ID0gYWxsb2NfaW5pdF9sYXlvdXRfaGRyKGlubyk7CisJbmV3ID0gYWxsb2NfaW5pdF9sYXlvdXRfaGRyKGlubywgZ2ZwX2ZsYWdzKTsKIAlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKIAogCWlmIChsaWtlbHkobmZzaS0+bGF5b3V0ID09IE5VTEwpKQkvKiBXb24gdGhlIHJhY2U/ICovCkBAIC03NTYsNyArNzU5LDggQEAKIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIHBuZnNfdXBkYXRlX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywKIAkJICAgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKLQkJICAgZW51bSBwbmZzX2lvbW9kZSBpb21vZGUpCisJCSAgIGVudW0gcG5mc19pb21vZGUgaW9tb2RlLAorCQkgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlubyk7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IE5GU19TRVJWRVIoaW5vKS0+bmZzX2NsaWVudDsKQEAgLTc2Nyw3ICs3NzEsNyBAQAogCWlmICghcG5mc19lbmFibGVkX3NiKE5GU19TRVJWRVIoaW5vKSkpCiAJCXJldHVybiBOVUxMOwogCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOwotCWxvID0gcG5mc19maW5kX2FsbG9jX2xheW91dChpbm8pOworCWxvID0gcG5mc19maW5kX2FsbG9jX2xheW91dChpbm8sIGdmcF9mbGFncyk7CiAJaWYgKGxvID09IE5VTEwpIHsKIAkJZHByaW50aygiJXMgRVJST1I6IGNhbid0IGdldCBwbmZzX2xheW91dF9oZHJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtODA3LDcgKzgxMSw3IEBACiAJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwogCX0KIAotCWxzZWcgPSBzZW5kX2xheW91dGdldChsbywgY3R4LCBpb21vZGUpOworCWxzZWcgPSBzZW5kX2xheW91dGdldChsbywgY3R4LCBpb21vZGUsIGdmcF9mbGFncyk7CiAJaWYgKCFsc2VnICYmIGZpcnN0KSB7CiAJCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmbG8tPnBsaF9sYXlvdXRzKTsKQEAgLTg0Niw3ICs4NTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJLyogSW5qZWN0IGxheW91dCBibG9iIGludG8gSS9PIGRldmljZSBkcml2ZXIgKi8KLQlsc2VnID0gTkZTX1NFUlZFUihpbm8pLT5wbmZzX2N1cnJfbGQtPmFsbG9jX2xzZWcobG8sIHJlcyk7CisJbHNlZyA9IE5GU19TRVJWRVIoaW5vKS0+cG5mc19jdXJyX2xkLT5hbGxvY19sc2VnKGxvLCByZXMsIGxncC0+Z2ZwX2ZsYWdzKTsKIAlpZiAoIWxzZWcgfHwgSVNfRVJSKGxzZWcpKSB7CiAJCWlmICghbHNlZykKIAkJCXN0YXR1cyA9IC1FTk9NRU07CkBAIC04OTksNyArOTAzLDggQEAKIAkJLyogVGhpcyBpcyBmaXJzdCBjb2VsZXNjZSBjYWxsIGZvciBhIHNlcmllcyBvZiBuZnNfcGFnZXMgKi8KIAkJcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKIAkJCQkJCSAgIHByZXYtPndiX2NvbnRleHQsCi0JCQkJCQkgICBJT01PREVfUkVBRCk7CisJCQkJCQkgICBJT01PREVfUkVBRCwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOwogCX0KIAlyZXR1cm4gTkZTX1NFUlZFUihwZ2lvLT5wZ19pbm9kZSktPnBuZnNfY3Vycl9sZC0+cGdfdGVzdChwZ2lvLCBwcmV2LCByZXEpOwogfQpAQCAtOTIxLDcgKzkyNiw4IEBACiAJCS8qIFRoaXMgaXMgZmlyc3QgY29lbGVzY2UgY2FsbCBmb3IgYSBzZXJpZXMgb2YgbmZzX3BhZ2VzICovCiAJCXBnaW8tPnBnX2xzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQocGdpby0+cGdfaW5vZGUsCiAJCQkJCQkgICBwcmV2LT53Yl9jb250ZXh0LAotCQkJCQkJICAgSU9NT0RFX1JXKTsKKwkJCQkJCSAgIElPTU9ERV9SVywKKwkJCQkJCSAgIEdGUF9OT0ZTKTsKIAl9CiAJcmV0dXJuIE5GU19TRVJWRVIocGdpby0+cGdfaW5vZGUpLT5wbmZzX2N1cnJfbGQtPnBnX3Rlc3QocGdpbywgcHJldiwgcmVxKTsKIH0KQEAgLTEwMDQsNiArMTAxMCw3IEBACiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKHdkYXRhLT5pbm9kZSk7CiAJbG9mZl90IGVuZF9wb3MgPSB3ZGF0YS0+YXJncy5vZmZzZXQgKyB3ZGF0YS0+cmVzLmNvdW50OworCWJvb2wgbWFya19hc19kaXJ0eSA9IGZhbHNlOwogCiAJc3Bpbl9sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTkZTX0lOT19MQVlPVVRDT01NSVQsICZuZnNpLT5mbGFncykpIHsKQEAgLTEwMTEsMTMgKzEwMTgsMTggQEAKIAkJZ2V0X2xzZWcod2RhdGEtPmxzZWcpOwogCQl3ZGF0YS0+bHNlZy0+cGxzX2xjX2NyZWQgPQogCQkJZ2V0X3JwY2NyZWQod2RhdGEtPmFyZ3MuY29udGV4dC0+c3RhdGUtPm93bmVyLT5zb19jcmVkKTsKLQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKHdkYXRhLT5pbm9kZSk7CisJCW1hcmtfYXNfZGlydHkgPSB0cnVlOwogCQlkcHJpbnRrKCIlczogU2V0IGxheW91dGNvbW1pdCBmb3IgaW5vZGUgJWx1ICIsCiAJCQlfX2Z1bmNfXywgd2RhdGEtPmlub2RlLT5pX2lubyk7CiAJfQogCWlmIChlbmRfcG9zID4gd2RhdGEtPmxzZWctPnBsc19lbmRfcG9zKQogCQl3ZGF0YS0+bHNlZy0+cGxzX2VuZF9wb3MgPSBlbmRfcG9zOwogCXNwaW5fdW5sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKKworCS8qIGlmIHBuZnNfbGF5b3V0Y29tbWl0X2lub2RlKCkgcnVucyBiZXR3ZWVuIGlub2RlIGxvY2tzLCB0aGUgbmV4dCBvbmUKKwkgKiB3aWxsIGJlIGEgbm9vcCBiZWNhdXNlIE5GU19JTk9fTEFZT1VUQ09NTUlUIHdpbGwgbm90IGJlIHNldCAqLworCWlmIChtYXJrX2FzX2RpcnR5KQorCQltYXJrX2lub2RlX2RpcnR5X3N5bmMod2RhdGEtPmlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBuZnNfc2V0X2xheW91dGNvbW1pdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9wbmZzLmggYi9mcy9uZnMvcG5mcy5oCmluZGV4IGJjNDgyNzIuLjBjMDE1YmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wbmZzLmgKKysrIGIvZnMvbmZzL3BuZnMuaApAQCAtNzAsNyArNzAsNyBAQAogCWNvbnN0IHUzMiBpZDsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICogKCphbGxvY19sc2VnKSAoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGF5b3V0aWQsIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxncik7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKiAoKmFsbG9jX2xzZWcpIChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLCBnZnBfdCBnZnBfZmxhZ3MpOwogCXZvaWQgKCpmcmVlX2xzZWcpIChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyk7CiAKIAkvKiB0ZXN0IGZvciBuZnMgcGFnZSBjYWNoZSBjb2FsZXNjaW5nICovCkBAIC0xMjYsNyArMTI2LDcgQEAKIHZvaWQgcHV0X2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcpOwogc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgogcG5mc191cGRhdGVfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCQkgICBlbnVtIHBuZnNfaW9tb2RlIGFjY2Vzc190eXBlKTsKKwkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIHZvaWQgc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICosIHUzMiBpZCk7CiB2b2lkIHVuc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICopOwogZW51bSBwbmZzX3RyeV9zdGF0dXMgcG5mc190cnlfdG9fd3JpdGVfZGF0YShzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKiwKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIHBuZnNfdXBkYXRlX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKLQkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSkKKwkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggN2NkZWQyYi4uMmJjZjBkYyAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAlhdG9taWNfc2V0KCZyZXEtPndiX2NvbXBsZXRlLCByZXF1ZXN0cyk7CiAKIAlCVUdfT04oZGVzYy0+cGdfbHNlZyAhPSBOVUxMKTsKLQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SRUFEKTsKKwlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SRUFELCBHRlBfS0VSTkVMKTsKIAlDbGVhclBhZ2VFcnJvcihwYWdlKTsKIAlvZmZzZXQgPSAwOwogCW5ieXRlcyA9IGRlc2MtPnBnX2NvdW50OwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJfQogCXJlcSA9IG5mc19saXN0X2VudHJ5KGRhdGEtPnBhZ2VzLm5leHQpOwogCWlmICgoIWxzZWcpICYmIGxpc3RfaXNfc2luZ3VsYXIoJmRhdGEtPnBhZ2VzKSkKLQkJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUkVBRCk7CisJCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JFQUQsIEdGUF9LRVJORUwpOwogCiAJcmV0ID0gbmZzX3JlYWRfcnBjc2V0dXAocmVxLCBkYXRhLCAmbmZzX3JlYWRfZnVsbF9vcHMsIGRlc2MtPnBnX2NvdW50LAogCQkJCTAsIGxzZWcpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCAyYjhlOWE1Li5lMjg4ZjA2IDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtMTAwNCw2ICsxMDA0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfU0VDRkxBVk9VUjsKIAltbnQtPmF1dGhfZmxhdm9yX2xlbiA9IDE7CiAJcmV0dXJuIDE7CiB9CkBAIC0xOTc2LDYgKzE5NzcsMTUgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogbm9hYyBpcyBhIHNwZWNpYWwgY2FzZS4gSXQgaW1wbGllcyAtbyBzeW5jLCBidXQgdGhhdCdzIG5vdAorCSAqIG5lY2Vzc2FyaWx5IHJlZmxlY3RlZCBpbiB0aGUgbXRhYiBvcHRpb25zLiBkb19yZW1vdW50X3NiCisJICogd2lsbCBjbGVhciBNU19TWU5DSFJPTk9VUyBpZiAtbyBzeW5jIHdhc24ndCBzcGVjaWZpZWQgaW4gdGhlCisJICogcmVtb3VudCBvcHRpb25zLCBzbyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgcmVzZXQgaXQuCisJICovCisJaWYgKGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX05PQUMpCisJCSpmbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKKwogCS8qIGNvbXBhcmUgbmV3IG1vdW50IG9wdGlvbnMgd2l0aCBvbGQgb25lcyAqLwogCWVycm9yID0gbmZzX2NvbXBhcmVfcmVtb3VudF9kYXRhKG5mc3MsIGRhdGEpOwogb3V0OgpAQCAtMjIzNSw4ICsyMjQ1LDcgQEAKIAlpZiAoIXMtPnNfcm9vdCkgewogCQkvKiBpbml0aWFsIHN1cGVyYmxvY2svcm9vdCBjcmVhdGlvbiAqLwogCQluZnNfZmlsbF9zdXBlcihzLCBkYXRhKTsKLQkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZSgKLQkJCXMsIGRhdGEgPyBkYXRhLT5mc2NhY2hlX3VuaXEgOiBOVUxMLCBOVUxMKTsKKwkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzLCBkYXRhLT5mc2NhY2hlX3VuaXEsIE5VTEwpOwogCX0KIAogCW1udHJvb3QgPSBuZnNfZ2V0X3Jvb3QocywgbW50ZmgsIGRldl9uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggYWYwYzYyNy4uNDljNzE1YiAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTU0MiwxMSArNTQyLDE1IEBACiAJaWYgKCFuZnNfbmVlZF9jb21taXQobmZzaSkpCiAJCXJldHVybiAwOwogCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlyZXQgPSBuZnNfc2Nhbl9saXN0KG5mc2ksIGRzdCwgaWR4X3N0YXJ0LCBucGFnZXMsIE5GU19QQUdFX1RBR19DT01NSVQpOwogCWlmIChyZXQgPiAwKQogCQluZnNpLT5uY29tbWl0IC09IHJldDsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisKIAlpZiAobmZzX25lZWRfY29tbWl0KE5GU19JKGlub2RlKSkpCiAJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9EQVRBU1lOQyk7CisKIAlyZXR1cm4gcmV0OwogfQogI2Vsc2UKQEAgLTY3Niw3ICs2ODAsNiBAQAogCXJlcSA9IG5mc19zZXR1cF93cml0ZV9yZXF1ZXN0KGN0eCwgcGFnZSwgb2Zmc2V0LCBjb3VudCk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCW5mc19tYXJrX3JlcXVlc3RfZGlydHkocmVxKTsKIAkvKiBVcGRhdGUgZmlsZSBsZW5ndGggKi8KIAluZnNfZ3Jvd19maWxlKHBhZ2UsIG9mZnNldCwgY291bnQpOwogCW5mc19tYXJrX3VwdG9kYXRlKHBhZ2UsIHJlcS0+d2JfcGdiYXNlLCByZXEtPndiX2J5dGVzKTsKQEAgLTkzNiw3ICs5MzksNyBAQAogCWF0b21pY19zZXQoJnJlcS0+d2JfY29tcGxldGUsIHJlcXVlc3RzKTsKIAogCUJVR19PTihkZXNjLT5wZ19sc2VnKTsKLQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SVyk7CisJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUlcsIEdGUF9OT0ZTKTsKIAlDbGVhclBhZ2VFcnJvcihwYWdlKTsKIAlvZmZzZXQgPSAwOwogCW5ieXRlcyA9IGRlc2MtPnBnX2NvdW50OwpAQCAtMTAxMCw3ICsxMDEzLDcgQEAKIAl9CiAJcmVxID0gbmZzX2xpc3RfZW50cnkoZGF0YS0+cGFnZXMubmV4dCk7CiAJaWYgKCghbHNlZykgJiYgbGlzdF9pc19zaW5ndWxhcigmZGF0YS0+cGFnZXMpKQotCQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SVyk7CisJCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JXLCBHRlBfTk9GUyk7CiAKIAlpZiAoKGRlc2MtPnBnX2lvZmxhZ3MgJiBGTFVTSF9DT05EX1NUQUJMRSkgJiYKIAkgICAgKGRlc2MtPnBnX21vcmVpbyB8fCBORlNfSShkZXNjLT5wZ19pbm9kZSktPm5jb21taXQpKQpAQCAtMTQxNCw4ICsxNDE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay0+dGtfcGlkLCB0YXNrLT50a19zdGF0dXMpOwogCiAJLyogQ2FsbCB0aGUgTkZTIHZlcnNpb24tc3BlY2lmaWMgY29kZSAqLwotCWlmIChORlNfUFJPVE8oZGF0YS0+aW5vZGUpLT5jb21taXRfZG9uZSh0YXNrLCBkYXRhKSAhPSAwKQotCQlyZXR1cm47CisJTkZTX1BST1RPKGRhdGEtPmlub2RlKS0+Y29tbWl0X2RvbmUodGFzaywgZGF0YSk7CiB9CiAKIHZvaWQgbmZzX2NvbW1pdF9yZWxlYXNlX3BhZ2VzKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqZGF0YSkKQEAgLTE0ODMsOSArMTQ4NSw3IEBACiAJcmVzID0gbmZzX2NvbW1pdF9zZXRfbG9jayhORlNfSShpbm9kZSksIG1heV93YWl0KTsKIAlpZiAocmVzIDw9IDApCiAJCWdvdG8gb3V0X21hcmtfZGlydHk7Ci0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlyZXMgPSBuZnNfc2Nhbl9jb21taXQoaW5vZGUsICZoZWFkLCAwLCAwKTsKLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJaWYgKHJlcykgewogCQlpbnQgZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCmluZGV4IGVjMGYyNzcuLjY5NDA0MzkgMTAwNjQ0Ci0tLSBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMKKysrIGIvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlicmVhazsKIAkJY2FzZSBBQ0xfTUFTSzoKLQkJCS8qIFNvbGFyaXMgc29tZXRpbWVzIHNldHMgYWRkaXRvbmFsIGJpdHMgaW4gdGhlIG1hc2sgKi8KKwkJCS8qIFNvbGFyaXMgc29tZXRpbWVzIHNldHMgYWRkaXRpb25hbCBiaXRzIGluIHRoZSBtYXNrICovCiAJCQllbnRyeS0+ZV9wZXJtICY9IFNfSVJXWE87CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbG9ja2QuYyBiL2ZzL25mc2QvbG9ja2QuYwppbmRleCAwYzZkODE2Li43YzgzMWEyIDEwMDY0NAotLS0gYS9mcy9uZnNkL2xvY2tkLmMKKysrIGIvZnMvbmZzZC9sb2NrZC5jCkBAIC0zOCw3ICszOCw2IEBACiAJZXhwX3JlYWRsb2NrKCk7CiAJbmZzZXJyID0gbmZzZF9vcGVuKHJxc3RwLCAmZmgsIFNfSUZSRUcsIE5GU0RfTUFZX0xPQ0ssIGZpbHApOwogCWZoX3B1dCgmZmgpOwotCXJxc3RwLT5ycV9jbGllbnQgPSBOVUxMOwogCWV4cF9yZWFkdW5sb2NrKCk7CiAgCS8qIFdlIHJldHVybiBubG0gZXJyb3IgY29kZXMgYXMgbmxtIGRvZXNuJ3Qga25vdwogCSAqIGFib3V0IG5mc2QsIGJ1dCBuZnNkIGRvZXMga25vdyBhYm91dCBubG0uLgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMzeGRyLmMgYi9mcy9uZnNkL25mczN4ZHIuYwppbmRleCA3ZTg0YTg1Li5hZDQ4ZmFjIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczN4ZHIuYworKysgYi9mcy9uZnNkL25mczN4ZHIuYwpAQCAtNzAyLDcgKzcwMiw3IEBACiAJCSpwKysgPSBodG9ubChyZXNwLT5lb2YpOwogCQkqcCsrID0gaHRvbmwocmVzcC0+Y291bnQpOwkvKiB4ZHIgb3BhcXVlIGNvdW50ICovCiAJCXhkcl9yZXNzaXplX2NoZWNrKHJxc3RwLCBwKTsKLQkJLyogbm93IHVwZGF0ZSBycXN0cC0+cnFfcmVzIHRvIHJlZmxlY3QgZGF0YSBhc3dlbGwgKi8KKwkJLyogbm93IHVwZGF0ZSBycXN0cC0+cnFfcmVzIHRvIHJlZmxlY3QgZGF0YSBhcyB3ZWxsICovCiAJCXJxc3RwLT5ycV9yZXMucGFnZV9sZW4gPSByZXNwLT5jb3VudDsKIAkJaWYgKHJlc3AtPmNvdW50ICYgMykgewogCQkJLyogbmVlZCB0byBwYWQgdGhlIHRhaWwgKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IGZiZGU2ZjcuLjRjZjA0ZTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMjU4LDYgKzI1OCw3IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZwLT5maV9kZWxlZ2VlcykpIHsKIAkJdmZzX3NldGxlYXNlKGZwLT5maV9kZWxlZ19maWxlLCBGX1VOTENLLCAmZnAtPmZpX2xlYXNlKTsKIAkJZnAtPmZpX2xlYXNlID0gTlVMTDsKKwkJZnB1dChmcC0+ZmlfZGVsZWdfZmlsZSk7CiAJCWZwLT5maV9kZWxlZ19maWxlID0gTlVMTDsKIAl9CiB9CkBAIC0zOTcsOSArMzk4LDEyIEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfZ2VuZXJpY19zdGF0ZWlkKHN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cCkKIHsKLQlpbnQgb2ZsYWcgPSBuZnM0X2FjY2Vzc19ibWFwX3RvX29tb2RlKHN0cCk7CisJaW50IG9mbGFnOwogCi0JbmZzNF9maWxlX3B1dF9hY2Nlc3Moc3RwLT5zdF9maWxlLCBvZmxhZyk7CisJaWYgKHN0cC0+c3RfYWNjZXNzX2JtYXApIHsKKwkJb2ZsYWcgPSBuZnM0X2FjY2Vzc19ibWFwX3RvX29tb2RlKHN0cCk7CisJCW5mczRfZmlsZV9wdXRfYWNjZXNzKHN0cC0+c3RfZmlsZSwgb2ZsYWcpOworCX0KIAlwdXRfbmZzNF9maWxlKHN0cC0+c3RfZmlsZSk7CiAJa21lbV9jYWNoZV9mcmVlKHN0YXRlaWRfc2xhYiwgc3RwKTsKIH0KQEAgLTMwNTUsNyArMzA1OSw3IEBACiAJaWYgKE9ORV9TVEFURUlEKHN0YXRlaWQpICYmIChmbGFncyAmIFJEX1NUQVRFKSkKIAkJcmV0dXJuIG5mc19vazsKIAllbHNlIGlmIChsb2Nrc19pbl9ncmFjZSgpKSB7Ci0JCS8qIEFuc3dlciBpbiByZW1haW5pbmcgY2FzZXMgZGVwZW5kcyBvbiBleGlzdGFuY2Ugb2YKKwkJLyogQW5zd2VyIGluIHJlbWFpbmluZyBjYXNlcyBkZXBlbmRzIG9uIGV4aXN0ZW5jZSBvZgogCQkgKiBjb25mbGljdGluZyBzdGF0ZTsgc28gd2UgbXVzdCB3YWl0IG91dCB0aGUgZ3JhY2UgcGVyaW9kLiAqLwogCQlyZXR1cm4gbmZzZXJyX2dyYWNlOwogCX0gZWxzZSBpZiAoZmxhZ3MgJiBXUl9TVEFURSkKQEAgLTM2NzUsNyArMzY3OSw3IEBACiAvKgogICogQWxsb2MgYSBsb2NrIG93bmVyIHN0cnVjdHVyZS4KICAqIENhbGxlZCBpbiBuZnNkNF9sb2NrIC0gdGhlcmVmb3JlLCBPUEVOIGFuZCBPUEVOX0NPTkZJUk0gKGlmIG5lZWRlZCkgaGFzIAotICogb2NjdXJlZC4gCisgKiBvY2N1cnJlZC4gCiAgKgogICogc3RyaGFzaHZhbCA9IGxvY2tfb3duZXJzdHJfaGFzaHZhbCAKICAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnN4ZHIuYyBiL2ZzL25mc2QvbmZzeGRyLmMKaW5kZXggNGNlMDA1ZC4uNjVlYzU5NSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnN4ZHIuYworKysgYi9mcy9uZnNkL25mc3hkci5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAkqcCsrID0gaHRvbmwocmVzcC0+Y291bnQpOwogCXhkcl9yZXNzaXplX2NoZWNrKHJxc3RwLCBwKTsKIAotCS8qIG5vdyB1cGRhdGUgcnFzdHAtPnJxX3JlcyB0byByZWZsZWN0IGRhdGEgYXN3ZWxsICovCisJLyogbm93IHVwZGF0ZSBycXN0cC0+cnFfcmVzIHRvIHJlZmxlY3QgZGF0YSBhcyB3ZWxsICovCiAJcnFzdHAtPnJxX3Jlcy5wYWdlX2xlbiA9IHJlc3AtPmNvdW50OwogCWlmIChyZXNwLT5jb3VudCAmIDMpIHsKIAkJLyogbmVlZCB0byBwYWQgdGhlIHRhaWwgKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDJlMWNlYmQuLjEyOWYzYzkgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMTM2Myw3ICsxMzYzLDcgQEAKIAkJZ290byBvdXQ7CiAJaWYgKCEoaWFwLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkpCiAJCWlhcC0+aWFfbW9kZSA9IDA7Ci0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0NSRUFURSk7CisJZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0VYRUMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xMzg1LDYgKzEzODUsMTMgQEAKIAlpZiAoSVNfRVJSKGRjaGlsZCkpCiAJCWdvdG8gb3V0X25mc2VycjsKIAorCS8qIElmIGZpbGUgZG9lc24ndCBleGlzdCwgY2hlY2sgZm9yIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBvbmUgKi8KKwlpZiAoIWRjaGlsZC0+ZF9pbm9kZSkgeworCQllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgU19JRkRJUiwgTkZTRF9NQVlfQ1JFQVRFKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGZoX2NvbXBvc2UocmVzZmhwLCBmaHAtPmZoX2V4cG9ydCwgZGNoaWxkLCBmaHApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2FsbG9jLmMgYi9mcy9uaWxmczIvYWxsb2MuYwppbmRleCAwYTBhNjZkLi5mNzY4NDQ4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYWxsb2MuYworKysgYi9mcy9uaWxmczIvYWxsb2MuYwpAQCAtNjQ2LDcgKzY0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBncm91cCwgZ3JvdXBfb2Zmc2V0OwogCWludCBpLCBqLCBuLCByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpICs9IG4pIHsKKwlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpID0gaikgewogCQlncm91cCA9IG5pbGZzX3BhbGxvY19ncm91cChpbm9kZSwgZW50cnlfbnJzW2ldLCAmZ3JvdXBfb2Zmc2V0KTsKIAkJcmV0ID0gbmlsZnNfcGFsbG9jX2dldF9kZXNjX2Jsb2NrKGlub2RlLCBncm91cCwgMCwgJmRlc2NfYmgpOwogCQlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9wYWdlLmMgYi9mcy9uaWxmczIvcGFnZS5jCmluZGV4IDlkMmRjNmIuLjExNjgwNTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9wYWdlLmMKKysrIGIvZnMvbmlsZnMyL3BhZ2UuYwpAQCAtNDk1LDggKzQ5NSw2IEBACiB2b2lkIG5pbGZzX21hcHBpbmdfaW5pdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCiB7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZW1wdHlfYW9wczsKLQogCW1hcHBpbmctPmhvc3QgPSBOVUxMOwogCW1hcHBpbmctPmZsYWdzID0gMDsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBHRlBfTk9GUyk7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYwppbmRleCA2YjEzMDVkLi45ZmRlMWMwIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkgZmQsIHJlc3BvbnNlKTsKIAkvKgogCSAqIG1ha2Ugc3VyZSB0aGUgcmVzcG9uc2UgaXMgdmFsaWQsIGlmIGludmFsaWQgd2UgZG8gbm90aGluZyBhbmQgZWl0aGVyCi0JICogdXNlcnNwYWNlIGNhbiBzZW5kIGEgdmFsaWQgcmVzcG9uY2Ugb3Igd2Ugd2lsbCBjbGVhbiBpdCB1cCBhZnRlciB0aGUKKwkgKiB1c2Vyc3BhY2UgY2FuIHNlbmQgYSB2YWxpZCByZXNwb25zZSBvciB3ZSB3aWxsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZQogCSAqIHRpbWVvdXQKIAkgKi8KIAlzd2l0Y2ggKHJlc3BvbnNlKSB7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMKaW5kZXggYTkxYjY5YS4uZTNjYmQ3NCAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYwpAQCAtMTk0LDEwICsxOTQsMTEgQEAKIAogc3RhdGljIHZvaWQgaW5vdGlmeV9mcmVlX2dyb3VwX3ByaXYoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCkKIHsKLQkvKiBpZGVhbGx5IHRoZSBpZHIgaXMgZW1wdHkgYW5kIHdlIHdvbid0IGhpdCB0aGUgQlVHIGluIHRlaCBjYWxsYmFjayAqLworCS8qIGlkZWFsbHkgdGhlIGlkciBpcyBlbXB0eSBhbmQgd2Ugd29uJ3QgaGl0IHRoZSBCVUcgaW4gdGhlIGNhbGxiYWNrICovCiAJaWRyX2Zvcl9lYWNoKCZncm91cC0+aW5vdGlmeV9kYXRhLmlkciwgaWRyX2NhbGxiYWNrLCBncm91cCk7CiAJaWRyX3JlbW92ZV9hbGwoJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyKTsKIAlpZHJfZGVzdHJveSgmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHIpOworCWF0b21pY19kZWMoJmdyb3VwLT5pbm90aWZ5X2RhdGEudXNlci0+aW5vdGlmeV9kZXZzKTsKIAlmcmVlX3VpZChncm91cC0+aW5vdGlmeV9kYXRhLnVzZXIpOwogfQogCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jCmluZGV4IGJkNDZlN2MuLjg0NDVmYmMgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jCisrKyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jCkBAIC0yOTAsNyArMjkwLDYgQEAKIHN0YXRpYyBpbnQgaW5vdGlmeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaWdub3JlZCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBncm91cC0+aW5vdGlmeV9kYXRhLnVzZXI7CiAKIAlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXApOwogCkBAIC0yOTksOCArMjk4LDYgQEAKIAkvKiBmcmVlIHRoaXMgZ3JvdXAsIG1hdGNoaW5nIGdldCB3YXMgaW5vdGlmeV9pbml0LT5mc25vdGlmeV9vYnRhaW5fZ3JvdXAgKi8KIAlmc25vdGlmeV9wdXRfZ3JvdXAoZ3JvdXApOwogCi0JYXRvbWljX2RlYygmdXNlci0+aW5vdGlmeV9kZXZzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC02OTcsNyArNjk0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZzbm90aWZ5X2dyb3VwICppbm90aWZ5X25ld19ncm91cChzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHVuc2lnbmVkIGludCBtYXhfZXZlbnRzKQorc3RhdGljIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqaW5vdGlmeV9uZXdfZ3JvdXAodW5zaWduZWQgaW50IG1heF9ldmVudHMpCiB7CiAJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cDsKIApAQCAtNzEwLDggKzcwNywxNCBAQAogCXNwaW5fbG9ja19pbml0KCZncm91cC0+aW5vdGlmeV9kYXRhLmlkcl9sb2NrKTsKIAlpZHJfaW5pdCgmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHIpOwogCWdyb3VwLT5pbm90aWZ5X2RhdGEubGFzdF93ZCA9IDA7Ci0JZ3JvdXAtPmlub3RpZnlfZGF0YS51c2VyID0gdXNlcjsKIAlncm91cC0+aW5vdGlmeV9kYXRhLmZhID0gTlVMTDsKKwlncm91cC0+aW5vdGlmeV9kYXRhLnVzZXIgPSBnZXRfY3VycmVudF91c2VyKCk7CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmdyb3VwLT5pbm90aWZ5X2RhdGEudXNlci0+aW5vdGlmeV9kZXZzKSA+CisJICAgIGlub3RpZnlfbWF4X3VzZXJfaW5zdGFuY2VzKSB7CisJCWZzbm90aWZ5X3B1dF9ncm91cChncm91cCk7CisJCXJldHVybiBFUlJfUFRSKC1FTUZJTEUpOworCX0KIAogCXJldHVybiBncm91cDsKIH0KQEAgLTcyMSw3ICs3MjQsNiBAQAogU1lTQ0FMTF9ERUZJTkUxKGlub3RpZnlfaW5pdDEsIGludCwgZmxhZ3MpCiB7CiAJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cDsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CiAJaW50IHJldDsKIAogCS8qIENoZWNrIHRoZSBJTl8qIGNvbnN0YW50cyBmb3IgY29uc2lzdGVuY3kuICAqLwpAQCAtNzMxLDMxICs3MzMsMTYgQEAKIAlpZiAoZmxhZ3MgJiB+KElOX0NMT0VYRUMgfCBJTl9OT05CTE9DSykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdXNlciA9IGdldF9jdXJyZW50X3VzZXIoKTsKLQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnVzZXItPmlub3RpZnlfZGV2cykgPj0KLQkJCWlub3RpZnlfbWF4X3VzZXJfaW5zdGFuY2VzKSkgewotCQlyZXQgPSAtRU1GSUxFOwotCQlnb3RvIG91dF9mcmVlX3VpZDsKLQl9Ci0KIAkvKiBmc25vdGlmeV9vYnRhaW5fZ3JvdXAgdG9vayBhIHJlZmVyZW5jZSB0byBncm91cCwgd2UgcHV0IHRoaXMgd2hlbiB3ZSBraWxsIHRoZSBmaWxlIGluIHRoZSBlbmQgKi8KLQlncm91cCA9IGlub3RpZnlfbmV3X2dyb3VwKHVzZXIsIGlub3RpZnlfbWF4X3F1ZXVlZF9ldmVudHMpOwotCWlmIChJU19FUlIoZ3JvdXApKSB7Ci0JCXJldCA9IFBUUl9FUlIoZ3JvdXApOwotCQlnb3RvIG91dF9mcmVlX3VpZDsKLQl9Ci0KLQlhdG9taWNfaW5jKCZ1c2VyLT5pbm90aWZ5X2RldnMpOworCWdyb3VwID0gaW5vdGlmeV9uZXdfZ3JvdXAoaW5vdGlmeV9tYXhfcXVldWVkX2V2ZW50cyk7CisJaWYgKElTX0VSUihncm91cCkpCisJCXJldHVybiBQVFJfRVJSKGdyb3VwKTsKIAogCXJldCA9IGFub25faW5vZGVfZ2V0ZmQoImlub3RpZnkiLCAmaW5vdGlmeV9mb3BzLCBncm91cCwKIAkJCQkgIE9fUkRPTkxZIHwgZmxhZ3MpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0dXJuIHJldDsKKwlpZiAocmV0IDwgMCkKKwkJZnNub3RpZnlfcHV0X2dyb3VwKGdyb3VwKTsKIAotCWZzbm90aWZ5X3B1dF9ncm91cChncm91cCk7Ci0JYXRvbWljX2RlYygmdXNlci0+aW5vdGlmeV9kZXZzKTsKLW91dF9mcmVlX3VpZDoKLQlmcmVlX3VpZCh1c2VyKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvbWFyay5jIGIvZnMvbm90aWZ5L21hcmsuYwppbmRleCA1MGMwMDg1Li4yNTJhYjFmIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvbWFyay5jCisrKyBiL2ZzL25vdGlmeS9tYXJrLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqIHJlZmVyZW5jaW5nIHRoaXMgb2JqZWN0LiAgVGhlIG9iamVjdCB0eXBpY2FsbHkgd2lsbCBsaXZlIGluc2lkZSB0aGUga2VybmVsCiAgKiB3aXRoIGEgcmVmY250IG9mIDIsIG9uZSBmb3IgZWFjaCBsaXN0IGl0IGlzIG9uIChpX2xpc3QsIGdfbGlzdCkuICBBbnkgdGFzawogICogd2hpY2ggY2FuIGZpbmQgdGhpcyBvYmplY3QgaG9sZGluZyB0aGUgYXBwcm9wcmlldGUgbG9ja3MsIGNhbiB0YWtlIGEgcmVmZXJlbmNlCi0gKiBhbmQgdGhlIG9iamVjdCBpdHNlbGYgaXMgZ3VhcmVudGVlZCB0byBzdXJ2aXZlIHVudGlsIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZC4KKyAqIGFuZCB0aGUgb2JqZWN0IGl0c2VsZiBpcyBndWFyYW50ZWVkIHRvIHN1cnZpdmUgdW50aWwgdGhlIHJlZmVyZW5jZSBpcyBkcm9wcGVkLgogICoKICAqIExPQ0tJTkc6CiAgKiBUaGVyZSBhcmUgMyBzcGlubG9ja3MgaW52b2x2ZWQgd2l0aCBmc25vdGlmeSBpbm9kZSBtYXJrcyBhbmQgdGhleSBNVVNUCmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuYwppbmRleCBmNTA5NGVlLi5mMTRmZGUyIDEwMDY0NAotLS0gYS9mcy9udGZzL2F0dHJpYi5jCisrKyBiL2ZzL250ZnMvYXR0cmliLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCX0gZWxzZSBpZiAoY3R4X25lZWRzX3Jlc2V0KSB7CiAJCS8qCiAJCSAqIElmIHRoZXJlIGlzIG5vIGF0dHJpYnV0ZSBsaXN0LCByZXN0b3JpbmcgdGhlIHNlYXJjaCBjb250ZXh0Ci0JCSAqIGlzIGFjb21wbGlzaGVkIHNpbXBseSBieSBjb3B5aW5nIHRoZSBzYXZlZCBjb250ZXh0IGJhY2sgb3ZlcgorCQkgKiBpcyBhY2NvbXBsaXNoZWQgc2ltcGx5IGJ5IGNvcHlpbmcgdGhlIHNhdmVkIGNvbnRleHQgYmFjayBvdmVyCiAJCSAqIHRoZSBjYWxsZXIgc3VwcGxpZWQgY29udGV4dC4gIElmIHRoZXJlIGlzIGFuIGF0dHJpYnV0ZSBsaXN0LAogCQkgKiB0aGluZ3MgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYXMgd2UgbmVlZCB0byBkZWFsIHdpdGggbWFwcGluZwogCQkgKiBvZiBtZnQgcmVjb3JkcyBhbmQgcmVzdWx0aW5nIHBvdGVudGlhbCBjaGFuZ2VzIGluIHBvaW50ZXJzLgpAQCAtMTE4MSw3ICsxMTgxLDcgQEAKICAqIGZvciwgaS5lLiBpZiBvbmUgd2FudHMgdG8gYWRkIHRoZSBhdHRyaWJ1dGUgdG8gdGhlIG1mdCByZWNvcmQgdGhpcyBpcyB0aGUKICAqIGNvcnJlY3QgcGxhY2UgdG8gaW5zZXJ0IGl0cyBhdHRyaWJ1dGUgbGlzdCBlbnRyeSBpbnRvLgogICoKLSAqIFdoZW4gLWVycm5vICE9IC1FTk9FTlQsIGFuIGVycm9yIG9jY3VyZWQgZHVyaW5nIHRoZSBsb29rdXAuICBAY3R4LT5hdHRyIGlzCisgKiBXaGVuIC1lcnJubyAhPSAtRU5PRU5ULCBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGxvb2t1cC4gIEBjdHgtPmF0dHIgaXMKICAqIHRoZW4gdW5kZWZpbmVkIGFuZCBpbiBwYXJ0aWN1bGFyIHlvdSBzaG91bGQgbm90IHJlbHkgb24gaXQgbm90IGNoYW5naW5nLgogICovCiBpbnQgbnRmc19hdHRyX2xvb2t1cChjb25zdCBBVFRSX1RZUEUgdHlwZSwgY29uc3QgbnRmc2NoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbXByZXNzLmMgYi9mcy9udGZzL2NvbXByZXNzLmMKaW5kZXggZWY5ZWQ4NS4uZWU0MTQ0YyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jCisrKyBiL2ZzL250ZnMvY29tcHJlc3MuYwpAQCAtNTAxLDcgKzUwMSw3IEBACiAJVkNOIHN0YXJ0X3ZjbiA9ICgoKHM2NClpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSAmIH5jYl9zaXplX21hc2spID4+CiAJCQl2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzOwogCS8qCi0JICogVGhlIGZpcnN0IHZjbiBhZnRlciB0aGUgbGFzdCB3YW50ZWQgdmNuIChtaW51bXVtIGFsaWdubWVudCBpcyBhZ2FpbgorCSAqIFRoZSBmaXJzdCB2Y24gYWZ0ZXIgdGhlIGxhc3Qgd2FudGVkIHZjbiAobWluaW11bSBhbGlnbm1lbnQgaXMgYWdhaW4KIAkgKiBQQUdFX0NBQ0hFX1NJWkUuCiAJICovCiAJVkNOIGVuZF92Y24gPSAoKCgoczY0KShpbmRleCArIDFVTCkgPDwgUEFHRV9DQUNIRV9TSElGVCkgKyBjYl9zaXplIC0gMSkKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCAwYjU2YzZiLi5jMDVkNmRjIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC02MjIsNyArNjIyLDcgQEAKIAkgKi8KIAkvKiBFdmVyeW9uZSBnZXRzIGFsbCBwZXJtaXNzaW9ucy4gKi8KIAl2aS0+aV9tb2RlIHw9IFNfSVJXWFVHTzsKLQkvKiBJZiByZWFkLW9ubHksIG5vb25lIGdldHMgd3JpdGUgcGVybWlzc2lvbnMuICovCisJLyogSWYgcmVhZC1vbmx5LCBubyBvbmUgZ2V0cyB3cml0ZSBwZXJtaXNzaW9ucy4gKi8KIAlpZiAoSVNfUkRPTkxZKHZpKSkKIAkJdmktPmlfbW9kZSAmPSB+U19JV1VHTzsKIAlpZiAobS0+ZmxhZ3MgJiBNRlRfUkVDT1JEX0lTX0RJUkVDVE9SWSkgewpAQCAtMjUyOSw3ICsyNTI5LDcgQEAKIAkJICogc3BlY2lmaWVzIHRoYXQgdGhlIGJlaGF2aW91ciBpcyB1bnNwZWNpZmllZCB0aHVzIHdlIGRvIG5vdAogCQkgKiBoYXZlIHRvIGRvIGFueXRoaW5nLiAgVGhpcyBtZWFucyB0aGF0IGluIG91ciBpbXBsZW1lbnRhdGlvbgogCQkgKiBpbiB0aGUgcmFyZSBjYXNlIHRoYXQgdGhlIGZpbGUgaXMgbW1hcCgpcGVkIGFuZCBhIHdyaXRlCi0JCSAqIG9jY3VyZWQgaW50byB0aGUgbW1hcCgpcGVkIHJlZ2lvbiBqdXN0IGJleW9uZCB0aGUgZmlsZSBzaXplCisJCSAqIG9jY3VycmVkIGludG8gdGhlIG1tYXAoKXBlZCByZWdpb24ganVzdCBiZXlvbmQgdGhlIGZpbGUgc2l6ZQogCQkgKiBhbmQgd3JpdGVwYWdlIGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkIHRvIHdyaXRlIG91dCB0aGUgcGFnZQogCQkgKiAod2hpY2ggd291bGQgY2xlYXIgdGhlIGFyZWEgYmV5b25kIHRoZSBmaWxlIHNpemUpIGFuZCB3ZSBub3cKIAkJICogZXh0ZW5kIHRoZSBmaWxlIHNpemUgdG8gaW5jb3Jwb3JhdGUgdGhpcyBkaXJ0eSByZWdpb24KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbGF5b3V0LmggYi9mcy9udGZzL2xheW91dC5oCmluZGV4IDhiMjU0OWYuLmZhZWNlNzEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbGF5b3V0LmgKKysrIGIvZnMvbnRmcy9sYXlvdXQuaApAQCAtMjg2LDcgKzI4Niw3IEBACiAgKiBmcmFnbWVudGVkLiBWb2x1bWUgZnJlZSBzcGFjZSBpbmNsdWRlcyB0aGUgZW1wdHkgcGFydCBvZiB0aGUgbWZ0IHpvbmUgYW5kCiAgKiB3aGVuIHRoZSB2b2x1bWUncyBmcmVlIDg4JSBhcmUgdXNlZCB1cCwgdGhlIG1mdCB6b25lIGlzIHNocnVuayBieSBhIGZhY3RvcgogICogb2YgMiwgdGh1cyBtYWtpbmcgbW9yZSBzcGFjZSBhdmFpbGFibGUgZm9yIG1vcmUgZmlsZXMvZGF0YS4gVGhpcyBwcm9jZXNzIGlzCi0gKiByZXBlYXRlZCBldmVyeXRpbWUgdGhlcmUgaXMgbm8gbW9yZSBmcmVlIHNwYWNlIGV4Y2VwdCBmb3IgdGhlIG1mdCB6b25lIHVudGlsCisgKiByZXBlYXRlZCBldmVyeSB0aW1lIHRoZXJlIGlzIG5vIG1vcmUgZnJlZSBzcGFjZSBleGNlcHQgZm9yIHRoZSBtZnQgem9uZSB1bnRpbAogICogdGhlcmUgcmVhbGx5IGlzIG5vIG1vcmUgZnJlZSBzcGFjZS4KICAqLwogCkBAIC0xNjU3LDEzICsxNjU3LDEzIEBACiAgKglwb2ludGVkIHRvIGJ5IHRoZSBPd25lciBmaWVsZCB3YXMgcHJvdmlkZWQgYnkgYSBkZWZhdWx0aW5nIG1lY2hhbmlzbQogICoJcmF0aGVyIHRoYW4gZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgb3JpZ2luYWwgcHJvdmlkZXIgb2YgdGhlCiAgKglzZWN1cml0eSBkZXNjcmlwdG9yLiAgVGhpcyBtYXkgYWZmZWN0IHRoZSB0cmVhdG1lbnQgb2YgdGhlIFNJRCB3aXRoCi0gKglyZXNwZWN0IHRvIGluaGVyaXRlbmNlIG9mIGFuIG93bmVyLgorICoJcmVzcGVjdCB0byBpbmhlcml0YW5jZSBvZiBhbiBvd25lci4KICAqCiAgKiBTRV9HUk9VUF9ERUZBVUxURUQgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBTSUQgaW4KICAqCXRoZSBHcm91cCBmaWVsZCB3YXMgcHJvdmlkZWQgYnkgYSBkZWZhdWx0aW5nIG1lY2hhbmlzbSByYXRoZXIgdGhhbgogICoJZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgb3JpZ2luYWwgcHJvdmlkZXIgb2YgdGhlIHNlY3VyaXR5CiAgKglkZXNjcmlwdG9yLiAgVGhpcyBtYXkgYWZmZWN0IHRoZSB0cmVhdG1lbnQgb2YgdGhlIFNJRCB3aXRoIHJlc3BlY3QgdG8KLSAqCWluaGVyaXRlbmNlIG9mIGEgcHJpbWFyeSBncm91cC4KKyAqCWluaGVyaXRhbmNlIG9mIGEgcHJpbWFyeSBncm91cC4KICAqCiAgKiBTRV9EQUNMX1BSRVNFTlQgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBzZWN1cml0eQogICoJZGVzY3JpcHRvciBjb250YWlucyBhIGRpc2NyZXRpb25hcnkgQUNMLiAgSWYgdGhpcyBmbGFnIGlzIHNldCBhbmQgdGhlCkBAIC0xNjc0LDcgKzE2NzQsNyBAQAogICoJcG9pbnRlZCB0byBieSB0aGUgRGFjbCBmaWVsZCB3YXMgcHJvdmlkZWQgYnkgYSBkZWZhdWx0aW5nIG1lY2hhbmlzbQogICoJcmF0aGVyIHRoYW4gZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgb3JpZ2luYWwgcHJvdmlkZXIgb2YgdGhlCiAgKglzZWN1cml0eSBkZXNjcmlwdG9yLiAgVGhpcyBtYXkgYWZmZWN0IHRoZSB0cmVhdG1lbnQgb2YgdGhlIEFDTCB3aXRoCi0gKglyZXNwZWN0IHRvIGluaGVyaXRlbmNlIG9mIGFuIEFDTC4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGlmIHRoZQorICoJcmVzcGVjdCB0byBpbmhlcml0YW5jZSBvZiBhbiBBQ0wuICBUaGlzIGZsYWcgaXMgaWdub3JlZCBpZiB0aGUKICAqCURhY2xQcmVzZW50IGZsYWcgaXMgbm90IHNldC4KICAqCiAgKiBTRV9TQUNMX1BSRVNFTlQgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsICBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VjdXJpdHkKQEAgLTE2ODYsNyArMTY4Niw3IEBACiAgKglwb2ludGVkIHRvIGJ5IHRoZSBTYWNsIGZpZWxkIHdhcyBwcm92aWRlZCBieSBhIGRlZmF1bHRpbmcgbWVjaGFuaXNtCiAgKglyYXRoZXIgdGhhbiBleHBsaWNpdGx5IHByb3ZpZGVkIGJ5IHRoZSBvcmlnaW5hbCBwcm92aWRlciBvZiB0aGUKICAqCXNlY3VyaXR5IGRlc2NyaXB0b3IuICBUaGlzIG1heSBhZmZlY3QgdGhlIHRyZWF0bWVudCBvZiB0aGUgQUNMIHdpdGgKLSAqCXJlc3BlY3QgdG8gaW5oZXJpdGVuY2Ugb2YgYW4gQUNMLiAgVGhpcyBmbGFnIGlzIGlnbm9yZWQgaWYgdGhlCisgKglyZXNwZWN0IHRvIGluaGVyaXRhbmNlIG9mIGFuIEFDTC4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGlmIHRoZQogICoJU2FjbFByZXNlbnQgZmxhZyBpcyBub3Qgc2V0LgogICoKICAqIFNFX1NFTEZfUkVMQVRJVkUgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBzZWN1cml0eQpAQCAtMjI4Myw3ICsyMjgzLDcgQEAKIAkvLwkJICAgdGhlIGtleV9sZW5ndGggaXMgemVybywgdGhlbiB0aGUgdmNuIGltbWVkaWF0ZWx5CiAJLy8JCSAgIGZvbGxvd3MgdGhlIElOREVYX0VOVFJZX0hFQURFUi4gUmVnYXJkbGVzcyBvZgogCS8vCQkgICBrZXlfbGVuZ3RoLCB0aGUgYWRkcmVzcyBvZiB0aGUgOC1ieXRlIGJvdW5kYXJ5Ci0JLy8JCSAgIGFsbGlnbmVkIHZjbiBvZiBJTkRFWF9FTlRSWXtfSEVBREVSfSAqaWUgaXMgZ2l2ZW4gYnkKKwkvLwkJICAgYWxpZ25lZCB2Y24gb2YgSU5ERVhfRU5UUll7X0hFQURFUn0gKmllIGlzIGdpdmVuIGJ5CiAJLy8JCSAgIChjaGFyKilpZSArIGxlMTZfdG9fY3B1KGllKiktPmxlbmd0aCkgLSBzaXplb2YoVkNOKSwKIAkvLwkJICAgd2hlcmUgc2l6ZW9mKFZDTikgY2FuIGJlIGhhcmRjb2RlZCBhcyA4IGlmIHdhbnRlZC4gKi8KIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBJTkRFWF9FTlRSWTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5jIGIvZnMvbnRmcy9sb2dmaWxlLmMKaW5kZXggNGRhZGNkZi4uYzcxZGUyOSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmMKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmMKQEAgLTY2OSw3ICs2NjksNyBAQAogICogb2YgY2FzZXMgd2hlcmUgd2UgdGhpbmsgdGhhdCBhIHZvbHVtZSBpcyBkaXJ0eSB3aGVuIGluIGZhY3QgaXQgaXMgY2xlYW4uCiAgKiBUaGlzIHNob3VsZCBvbmx5IGFmZmVjdCB2b2x1bWVzIHRoYXQgaGF2ZSBub3QgYmVlbiBzaHV0ZG93biBjbGVhbmx5IGJ1dCBkaWQKICAqIG5vdCBoYXZlIGFueSBwZW5kaW5nLCBub24tY2hlY2stcG9pbnRlZCBpL28sIGkuZS4gdGhleSB3ZXJlIGNvbXBsZXRlbHkgaWRsZQotICogYXQgbGVhc3QgZm9yIHRoZSBmaXZlIHNlY29uZHMgcHJlY2VlZGluZyB0aGUgdW5jbGVhbiBzaHV0ZG93bi4KKyAqIGF0IGxlYXN0IGZvciB0aGUgZml2ZSBzZWNvbmRzIHByZWNlZGluZyB0aGUgdW5jbGVhbiBzaHV0ZG93bi4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgJExvZ0ZpbGUgam91cm5hbCBoYXMgYWxyZWFkeSBiZWVuIGNvbnNpc3RlbmN5CiAgKiBjaGVja2VkIGJ5IGEgY2FsbCB0byBudGZzX2NoZWNrX2xvZ2ZpbGUoKSBhbmQgaW4gcGFydGljdWxhciBpZiB0aGUgJExvZ0ZpbGUKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5oIGIvZnMvbnRmcy9sb2dmaWxlLmgKaW5kZXggYjVhNmYwOC4uYWEyYjZhYyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmgKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmgKQEAgLTIyMiw3ICsyMjIsNyBAQAogLyogMjQqLwlzbGU2NCBmaWxlX3NpemU7CS8qIFVzYWJsZSBieXRlIHNpemUgb2YgdGhlIGxvZyBmaWxlLiAgSWYgdGhlCiAJCQkJICAgcmVzdGFydF9hcmVhX29mZnNldCArIHRoZSBvZmZzZXQgb2YgdGhlCiAJCQkJICAgZmlsZV9zaXplIGFyZSA+IDUxMCB0aGVuIGNvcnJ1cHRpb24gaGFzCi0JCQkJICAgb2NjdXJlZC4gIFRoaXMgaXMgdGhlIHZlcnkgZmlyc3QgY2hlY2sgd2hlbgorCQkJCSAgIG9jY3VycmVkLiAgVGhpcyBpcyB0aGUgdmVyeSBmaXJzdCBjaGVjayB3aGVuCiAJCQkJICAgc3RhcnRpbmcgd2l0aCB0aGUgcmVzdGFydF9hcmVhIGFzIGlmIGl0CiAJCQkJICAgZmFpbHMgaXQgbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBhYm92ZSB2YWx1ZXMKIAkJCQkgICB3aWxsIGJlIGNvcnJ1cHRlZCBieSB0aGUgbXVsdGkgc2VjdG9yCmRpZmYgLS1naXQgYS9mcy9udGZzL21mdC5jIGIvZnMvbnRmcy9tZnQuYwppbmRleCAzMjZlNzQ3Li4zODI4NTdmIDEwMDY0NAotLS0gYS9mcy9udGZzL21mdC5jCisrKyBiL2ZzL250ZnMvbWZ0LmMKQEAgLTczLDcgKzczLDcgQEAKIAkJaWYgKGluZGV4ID4gZW5kX2luZGV4IHx8IChpX3NpemUgJiB+UEFHRV9DQUNIRV9NQVNLKSA8IG9mcyArCiAJCQkJdm9sLT5tZnRfcmVjb3JkX3NpemUpIHsKIAkJCXBhZ2UgPSBFUlJfUFRSKC1FTk9FTlQpOwotCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiQXR0ZW10IHRvIHJlYWQgbWZ0IHJlY29yZCAweCVseCwgIgorCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiQXR0ZW1wdCB0byByZWFkIG1mdCByZWNvcmQgMHglbHgsICIKIAkJCQkJIndoaWNoIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBtZnQuICAiCiAJCQkJCSJUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSBudGZzICIKIAkJCQkJImRyaXZlci4iLCBuaS0+bWZ0X25vKTsKQEAgLTE0NDIsNyArMTQ0Miw3IEBACiAJCS8vIE5vdGU6IEl0IHdpbGwgbmVlZCB0byBiZSBhIHNwZWNpYWwgbWZ0IHJlY29yZCBhbmQgaWYgbm9uZSBvZgogCQkvLyB0aG9zZSBhcmUgYXZhaWxhYmxlIGl0IGdldHMgcmF0aGVyIGNvbXBsaWNhdGVkLi4uCiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIk5vdCBlbm91Z2ggc3BhY2UgaW4gdGhpcyBtZnQgcmVjb3JkIHRvICIKLQkJCQkiYWNjb21vZGF0ZSBleHRlbmRlZCBtZnQgYml0bWFwIGF0dHJpYnV0ZSAiCisJCQkJImFjY29tbW9kYXRlIGV4dGVuZGVkIG1mdCBiaXRtYXAgYXR0cmlidXRlICIKIAkJCQkiZXh0ZW50LiAgQ2Fubm90IGhhbmRsZSB0aGlzIHlldC4iKTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gdW5kb19hbGxvYzsKQEAgLTE4NzksNyArMTg3OSw3IEBACiAJCS8vIGFuZCB3ZSB3b3VsZCB0aGVuIG5lZWQgdG8gdXBkYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbWZ0CiAJCS8vIHJlY29yZCBhcHByb3ByaWF0ZWx5LiAgVGhpcyBpcyByYXRoZXIgY29tcGxpY2F0ZWQuLi4KIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiTm90IGVub3VnaCBzcGFjZSBpbiB0aGlzIG1mdCByZWNvcmQgdG8gIgotCQkJCSJhY2NvbW9kYXRlIGV4dGVuZGVkIG1mdCBkYXRhIGF0dHJpYnV0ZSAiCisJCQkJImFjY29tbW9kYXRlIGV4dGVuZGVkIG1mdCBkYXRhIGF0dHJpYnV0ZSAiCiAJCQkJImV4dGVudC4gIENhbm5vdCBoYW5kbGUgdGhpcyB5ZXQuIik7CiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIHVuZG9fYWxsb2M7CkBAIC0yMzU3LDcgKzIzNTcsNyBAQAogCX0KICNpZmRlZiBERUJVRwogCXJlYWRfbG9ja19pcnFzYXZlKCZtZnRibXBfbmktPnNpemVfbG9jaywgZmxhZ3MpOwotCW50ZnNfZGVidWcoIlN0YXR1cyBvZiBtZnRibXAgYWZ0ZXIgaW5pdGlhbGl6ZWQgZXh0ZW50aW9uOiAiCisJbnRmc19kZWJ1ZygiU3RhdHVzIG9mIG1mdGJtcCBhZnRlciBpbml0aWFsaXplZCBleHRlbnNpb246ICIKIAkJCSJhbGxvY2F0ZWRfc2l6ZSAweCVsbHgsIGRhdGFfc2l6ZSAweCVsbHgsICIKIAkJCSJpbml0aWFsaXplZF9zaXplIDB4JWxseC4iLAogCQkJKGxvbmcgbG9uZyltZnRibXBfbmktPmFsbG9jYXRlZF9zaXplLApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuYwppbmRleCA1NmE5YTZkMi4uZWFjN2Q2NyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9ydW5saXN0LmMKKysrIGIvZnMvbnRmcy9ydW5saXN0LmMKQEAgLTEyNDMsNyArMTI0Myw3IEBACiAgKiB3cml0ZS4KICAqCiAgKiBUaGlzIGlzIHVzZWQgd2hlbiBidWlsZGluZyB0aGUgbWFwcGluZyBwYWlycyBhcnJheSBvZiBhIHJ1bmxpc3QgdG8gY29tcHJlc3MKLSAqIGEgZ2l2ZW4gbG9naWNhbCBjbHVzdGVyIG51bWJlciAobGNuKSBvciBhIHNwZWNpZmljIHJ1biBsZW5ndGggdG8gdGhlIG1pbnVtdW0KKyAqIGEgZ2l2ZW4gbG9naWNhbCBjbHVzdGVyIG51bWJlciAobGNuKSBvciBhIHNwZWNpZmljIHJ1biBsZW5ndGggdG8gdGhlIG1pbmltdW0KICAqIHNpemUgcG9zc2libGUuCiAgKgogICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzLiAgT24gZXJyb3IsIGkuZS4gdGhlCmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggMjkwOTlhMC4uYjUyNzA2ZCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJICogdGhlIHZvbHVtZSBvbiBib290IGFuZCB1cGRhdGVzIHRoZW0uCiAJICoKIAkgKiBXaGVuIHJlbW91bnRpbmcgcmVhZC1vbmx5LCBtYXJrIHRoZSB2b2x1bWUgY2xlYW4gaWYgbm8gdm9sdW1lIGVycm9ycwotCSAqIGhhdmUgb2NjdXJlZC4KKwkgKiBoYXZlIG9jY3VycmVkLgogCSAqLwogCWlmICgoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpICYmICEoKmZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlzdGF0aWMgY29uc3QgY2hhciAqZXMgPSAiLiAgQ2Fubm90IHJlbW91bnQgcmVhZC13cml0ZS4iOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAKIAkJCQkJImhpYmVybmF0ZWQgb24gdGhlIHZvbHVtZS4iKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCS8qIEEgcmVhbCBlcnJvciBvY2N1cmVkLiAqLworCQkvKiBBIHJlYWwgZXJyb3Igb2NjdXJyZWQuICovCiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byBmaW5kIGlub2RlIG51bWJlciBmb3IgIgogCQkJCSJoaWJlcmZpbC5zeXMuIik7CiAJCXJldHVybiByZXQ7CkBAIC0xMzcwLDcgKzEzNzAsNyBAQAogCQkJTlZvbFNldFF1b3RhT3V0T2ZEYXRlKHZvbCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQotCQkvKiBBIHJlYWwgZXJyb3Igb2NjdXJlZC4gKi8KKwkJLyogQSByZWFsIGVycm9yIG9jY3VycmVkLiAqLwogCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gZmluZCBpbm9kZSBudW1iZXIgZm9yICRRdW90YS4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE0NTQsNyArMTQ1NCw3IEBACiAJCQlOVm9sU2V0VXNuSnJubFN0YW1wZWQodm9sKTsKIAkJCXJldHVybiB0cnVlOwogCQl9Ci0JCS8qIEEgcmVhbCBlcnJvciBvY2N1cmVkLiAqLworCQkvKiBBIHJlYWwgZXJyb3Igb2NjdXJyZWQuICovCiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byBmaW5kIGlub2RlIG51bWJlciBmb3IgIgogCQkJCSIkVXNuSnJubC4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjI5Miw3ICsyMjkyLDcgQEAKIAludGZzX2NvbW1pdF9pbm9kZSh2b2wtPm1mdF9pbm8pOwogCiAJLyoKLQkgKiBJZiBhIHJlYWQtd3JpdGUgbW91bnQgYW5kIG5vIHZvbHVtZSBlcnJvcnMgaGF2ZSBvY2N1cmVkLCBtYXJrIHRoZQorCSAqIElmIGEgcmVhZC13cml0ZSBtb3VudCBhbmQgbm8gdm9sdW1lIGVycm9ycyBoYXZlIG9jY3VycmVkLCBtYXJrIHRoZQogCSAqIHZvbHVtZSBjbGVhbi4gIEFsc28sIHJlLWNvbW1pdCBhbGwgYWZmZWN0ZWQgaW5vZGVzLgogCSAqLwogCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewpAQCAtMjQ5Niw3ICsyNDk2LDcgQEAKIAlpZiAodm9sLT5ucl9jbHVzdGVycyAmIDYzKQogCQlucl9mcmVlICs9IDY0IC0gKHZvbC0+bnJfY2x1c3RlcnMgJiA2Myk7CiAJdXBfcmVhZCgmdm9sLT5sY25ibXBfbG9jayk7Ci0JLyogSWYgZXJyb3JzIG9jY3VyZWQgd2UgbWF5IHdlbGwgaGF2ZSBnb25lIGJlbG93IHplcm8sIGZpeCB0aGlzLiAqLworCS8qIElmIGVycm9ycyBvY2N1cnJlZCB3ZSBtYXkgd2VsbCBoYXZlIGdvbmUgYmVsb3cgemVybywgZml4IHRoaXMuICovCiAJaWYgKG5yX2ZyZWUgPCAwKQogCQlucl9mcmVlID0gMDsKIAludGZzX2RlYnVnKCJFeGl0aW5nLiIpOwpAQCAtMjU2MSw3ICsyNTYxLDcgQEAKIAl9CiAJbnRmc19kZWJ1ZygiRmluaXNoZWQgcmVhZGluZyAkTUZULyRCSVRNQVAsIGxhc3QgaW5kZXggPSAweCVseC4iLAogCQkJaW5kZXggLSAxKTsKLQkvKiBJZiBlcnJvcnMgb2NjdXJlZCB3ZSBtYXkgd2VsbCBoYXZlIGdvbmUgYmVsb3cgemVybywgZml4IHRoaXMuICovCisJLyogSWYgZXJyb3JzIG9jY3VycmVkIHdlIG1heSB3ZWxsIGhhdmUgZ29uZSBiZWxvdyB6ZXJvLCBmaXggdGhpcy4gKi8KIAlpZiAobnJfZnJlZSA8IDApCiAJCW5yX2ZyZWUgPSAwOwogCW50ZnNfZGVidWcoIkV4aXRpbmcuIik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCBiMjdhMGQ4Li40OGFhOWM3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTQ1MTksNyArNDUxOSw3IEBACiB9CiAKIC8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBiZWdpbmluZyBvZiBhbiBpbnNlcnQuCisgKiBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaW5zZXJ0LgogICoKICAqIFRoaXMgY29tcHV0ZXMgYSBmZXcgdGhpbmdzIHRoYXQgYXJlIGNvbW1vbmx5IHVzZWQgaW4gdGhlIHByb2Nlc3Mgb2YKICAqIGluc2VydGluZyBpbnRvIHRoZSBidHJlZToKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuaCBiL2ZzL29jZnMyL2FvcHMuaAppbmRleCBlY2ViNDU2Li43NWNmM2FkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmgKKysrIGIvZnMvb2NmczIvYW9wcy5oCkBAIC03MSw3ICs3MSw3IEBACiAKIC8qCiAgKiBVc2luZyBhIG5hbWVkIGVudW0gcmVwcmVzZW50aW5nIGxvY2sgdHlwZXMgaW4gdGVybXMgb2YgI04gYml0IHN0b3JlZCBpbgotICogaW9jYi0+cHJpdmF0ZSwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXd0ZWVuCisgKiBpb2NiLT5wcml2YXRlLCB3aGljaCBpcyBnb2luZyB0byBiZSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4KICAqIG9jZnMyX2Rpb19lbmRfaW8oKSBhbmQgb2NmczJfZmlsZV9haW9fd3JpdGUvcmVhZCgpLgogICovCiBlbnVtIG9jZnMyX2lvY2JfbG9ja19iaXRzIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDI0NjFlYjMuLjY0MzcyMDIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtMjI3NSw3ICsyMjc1LDcgQEAKIAlrZnJlZShocyk7CiB9CiAKLS8qIGhiIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBhbmQgaXNzdWVpbmcgKi8KKy8qIGhiIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBhbmQgaXNzdWluZyAqLwogCiBzdGF0aWMgc3RydWN0IG8yaGJfY2FsbGJhY2sgKmhiY2FsbF9mcm9tX3R5cGUoZW51bSBvMmhiX2NhbGxiYWNrX3R5cGUgdHlwZSkKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3F1b3J1bS5jCmluZGV4IGE4NzM2NjcuLjhmOWNlYTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9xdW9ydW0uYwpAQCAtODksNyArODksNyBAQAogCX07CiB9CiAKLS8qIEluZGljYXRlIHRoYXQgYSB0aW1lb3V0IG9jY3VyZWQgb24gYSBoZWFyYmVhdCByZWdpb24gd3JpdGUuIFRoZQorLyogSW5kaWNhdGUgdGhhdCBhIHRpbWVvdXQgb2NjdXJyZWQgb24gYSBoZWFyYmVhdCByZWdpb24gd3JpdGUuIFRoZQogICogb3RoZXIgbm9kZXMgaW4gdGhlIGNsdXN0ZXIgbWF5IGNvbnNpZGVyIHVzIGRlYWQgYXQgdGhhdCB0aW1lIHNvIHdlCiAgKiB3YW50IHRvICJmZW5jZSIgb3Vyc2VsdmVzIHNvIHRoYXQgd2UgZG9uJ3Qgc2NyaWJibGUgb24gdGhlIGRpc2sKICAqIGFmdGVyIHRoZXkgdGhpbmsgdGhleSd2ZSByZWNvdmVyZWQgdXMuIFRoaXMgY2FuJ3Qgc29sdmUgYWxsCkBAIC0yNjEsNyArMjYxLDcgQEAKIAlzcGluX3VubG9jaygmcXMtPnFzX2xvY2spOwogfQogCi0vKiBUaGlzIGlzIGFuYWxhZ291cyB0byBoYl91cC4gIGFzIGEgbm9kZSdzIGNvbm5lY3Rpb24gY29tZXMgdXAgd2UgZGVsYXkgdGhlCisvKiBUaGlzIGlzIGFuYWxvZ291cyB0byBoYl91cC4gIGFzIGEgbm9kZSdzIGNvbm5lY3Rpb24gY29tZXMgdXAgd2UgZGVsYXkgdGhlCiAgKiBxdW9ydW0gZGVjaXNpb24gdW50aWwgd2Ugc2VlIGl0IGhlYXJ0YmVhdGluZy4gIHRoZSBob2xkIHdpbGwgYmUgZHJvcGVkIGluCiAgKiBoYl91cCBvciBoYl9kb3duLiAgaXQgbWlnaHQgYmUgcGVycGV0dWF0ZWQgYnkgY29uX2VyciB1bnRpbCBoYl9kb3duLiAgaWYKICAqIGl0J3MgYWxyZWFkeSBoZWFydGJlYXRpbmcgd2Ugd2UgbWlnaHQgYmUgZHJvcHBpbmcgYSBob2xkIHRoYXQgY29ubl91cCBnb3QuCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwppbmRleCBlZTA0ZmY1Li5kYjVlZTRiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKQEAgLTU2NSw3ICs1NjUsNyBAQAogCSAqIHRoZSB3b3JrIHF1ZXVlIGFjdHVhbGx5IGJlaW5nIHVwLiAqLwogCWlmICghdmFsaWQgJiYgbzJuZXRfd3EpIHsKIAkJdW5zaWduZWQgbG9uZyBkZWxheTsKLQkJLyogZGVsYXkgaWYgd2UncmUgd2l0aGluZyBhIFJFQ09OTkVDVF9ERUxBWSBvZiB0aGUKKwkJLyogZGVsYXkgaWYgd2UncmUgd2l0aGluIGEgUkVDT05ORUNUX0RFTEFZIG9mIHRoZQogCQkgKiBsYXN0IGF0dGVtcHQgKi8KIAkJZGVsYXkgPSAobm4tPm5uX2xhc3RfY29ubmVjdF9hdHRlbXB0ICsKIAkJCSBtc2Vjc190b19qaWZmaWVzKG8ybmV0X3JlY29ubmVjdF9kZWxheSgpKSkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwppbmRleCA5ZDY3NjEwLi5mZWRlNTdlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCkBAIC04MDgsNyArODA4LDcgQEAKIAkJCQlkbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwogCQkJZGxtX3B1dF9tbGUobWxlKTsKIAkJCW1sZSA9IE5VTEw7Ci0JCQkvKiB0aGlzIGlzIGxhbWUsIGJ1dCB3ZSBjYW50IHdhaXQgb24gZWl0aGVyCisJCQkvKiB0aGlzIGlzIGxhbWUsIGJ1dCB3ZSBjYW4ndCB3YWl0IG9uIGVpdGhlcgogCQkJICogdGhlIG1sZSBvciBsb2NrcmVzIHdhaXRxdWV1ZSBoZXJlICovCiAJCQlpZiAobWlnKQogCQkJCW1zbGVlcCgxMDApOwpAQCAtODQzLDcgKzg0Myw3IEBACiAKIAkvKiBmaW5hbGx5IGFkZCB0aGUgbG9ja3JlcyB0byBpdHMgaGFzaCBidWNrZXQgKi8KIAlfX2RsbV9pbnNlcnRfbG9ja3JlcyhkbG0sIHJlcyk7Ci0JLyogc2luY2UgdGhpcyBsb2NrcmVzIGlzIG5ldyBpdCBkb2VzbnQgbm90IHJlcXVpcmUgdGhlIHNwaW5sb2NrICovCisJLyogc2luY2UgdGhpcyBsb2NrcmVzIGlzIG5ldyBpdCBkb2Vzbid0IG5vdCByZXF1aXJlIHRoZSBzcGlubG9jayAqLwogCWRsbV9sb2NrcmVzX2dyYWJfaW5mbGlnaHRfcmVmX25ldyhkbG0sIHJlcyk7CiAKIAkvKiBpZiB0aGlzIG5vZGUgZG9lcyBub3QgYmVjb21lIHRoZSBtYXN0ZXIgbWFrZSBzdXJlIHRvIGRyb3AKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDE3N2QzYTYuLmI0YzhiYjYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtODM1LDcgKzgzNSw3IEBACiAKIAkvKiBJZiB3ZSBoYXZlIGFsbG93ZCB3aXBlIG9mIHRoaXMgaW5vZGUgZm9yIGFub3RoZXIgbm9kZSwgaXQKIAkgKiB3aWxsIGJlIG1hcmtlZCBoZXJlIHNvIHdlIGNhbiBzYWZlbHkgc2tpcCBpdC4gUmVjb3Zlcnkgd2lsbAotCSAqIGNsZWFudXAgYW55IGlub2RlcyB3ZSBtaWdodCBpbmFkdmVydGFudGx5IHNraXAgaGVyZS4gKi8KKwkgKiBjbGVhbnVwIGFueSBpbm9kZXMgd2UgbWlnaHQgaW5hZHZlcnRlbnRseSBza2lwIGhlcmUuICovCiAJaWYgKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX1NLSVBfREVMRVRFKQogCQlnb3RvIGJhaWxfdW5sb2NrOwogCkBAIC05MTcsNyArOTE3LDcgQEAKIAkgKiB0aGUgaW5vZGUgb3BlbiBsb2NrIGluIG9jZnMyX3JlYWRfbG9ja2VkX2lub2RlKCkuIFdoZW4gd2UKIAkgKiBnZXQgdG8gLT5kZWxldGVfaW5vZGUoKSwgZWFjaCBub2RlIHRyaWVzIHRvIGNvbnZlcnQgaXQncwogCSAqIGxvY2sgdG8gYW4gZXhjbHVzaXZlLiBUcnlsb2NrcyBhcmUgc2VyaWFsaXplZCBieSB0aGUgaW5vZGUKLQkgKiBtZXRhIGRhdGEgbG9jay4gSWYgdGhlIHVwY29udmVydCBzdWNlZWRzLCB3ZSBrbm93IHRoZSBpbm9kZQorCSAqIG1ldGEgZGF0YSBsb2NrLiBJZiB0aGUgdXBjb252ZXJ0IHN1Y2NlZWRzLCB3ZSBrbm93IHRoZSBpbm9kZQogCSAqIGlzIG5vIGxvbmdlciBsaXZlIGFuZCBjYW4gYmUgZGVsZXRlZC4KIAkgKgogCSAqIFRob3VnaCB3ZSBjYWxsIHRoaXMgd2l0aCB0aGUgbWV0YSBkYXRhIGxvY2sgaGVsZCwgdGhlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggZGNjMmQ5My4uYjE0MWE0NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMTM2OCw3ICsxMzY4LDcgQEAKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCiAJLyogTm93IGl0IGlzIHJpZ2h0IHRpbWUgdG8gcmVjb3ZlciBxdW90YXMuLi4gV2UgaGF2ZSB0byBkbyB0aGlzIHVuZGVyCi0JICogc3VwZXJibG9jayBsb2NrIHNvIHRoYXQgbm9vbmUgY2FuIHN0YXJ0IHVzaW5nIHRoZSBzbG90IChhbmQgY3Jhc2gpCisJICogc3VwZXJibG9jayBsb2NrIHNvIHRoYXQgbm8gb25lIGNhbiBzdGFydCB1c2luZyB0aGUgc2xvdCAoYW5kIGNyYXNoKQogCSAqIGJlZm9yZSB3ZSByZWNvdmVyIGl0ICovCiAJZm9yIChpID0gMDsgaSA8IHJtX3F1b3RhX3VzZWQ7IGkrKykgewogCQlxcmVjID0gb2NmczJfYmVnaW5fcXVvdGFfcmVjb3Zlcnkob3NiLCBybV9xdW90YVtpXSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmggYi9mcy9vY2ZzMi9qb3VybmFsLmgKaW5kZXggNjE4MGRhMS4uNjhjZjJmNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5oCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuaApAQCAtMjE1LDcgKzIxNSw3IEBACiAJCS8qIFdBUk5JTkc6IFRoaXMgb25seSBraWNrcyBvZmYgYSBzaW5nbGUKIAkJICogY2hlY2twb2ludC4gSWYgc29tZW9uZSByYWNlcyB5b3UgYW5kIGFkZHMgbW9yZQogCQkgKiBtZXRhZGF0YSB0byB0aGUgam91cm5hbCwgeW91IHdvbid0IGtub3csIGFuZCB3aWxsCi0JCSAqIHdpbmQgdXAgd2FpdGluZyAqYWxvdCogbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5LiBSaWdodAorCQkgKiB3aW5kIHVwIHdhaXRpbmcgKmEgbG90KiBsb25nZXIgdGhhbiBuZWNlc3NhcnkuIFJpZ2h0CiAJCSAqIG5vdyB3ZSBvbmx5IHVzZSB0aGlzIGluIGNsZWFyX2lub2RlIHNvIHRoYXQncwogCQkgKiBPSy4gKi8KIAkJb2NmczJfc3RhcnRfY2hlY2twb2ludChvc2IpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggMjhmMmNjMS4uZTVkNzM4YyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogfQogCiAvKioKLSAqIG9jZnMyX3ByZXBfbmV3X29ycGhhbmVkX2ZpbGUoKSAtIFByZXBhcmUgdGhlIG9ycGhhbiBkaXIgdG8gcmVjaWV2ZSBhIG5ld2x5CisgKiBvY2ZzMl9wcmVwX25ld19vcnBoYW5lZF9maWxlKCkgLSBQcmVwYXJlIHRoZSBvcnBoYW4gZGlyIHRvIHJlY2VpdmUgYSBuZXdseQogICogYWxsb2NhdGVkIGZpbGUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHR5cGljYWwgJ2FkZCB0byBvcnBoYW4gZGlyJwogICogb3BlcmF0aW9uIGluIHRoYXQgdGhlIGlub2RlIGRvZXMgbm90IHlldCBleGlzdC4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZQogICogdGhlIG9ycGhhbiBkaXIgc3RyaW5naWZpZXMgdGhlIGlub2RlIGJsb2NrIG51bWJlciB0byBjb21lIHVwIHdpdGggaXQncwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggYmYyZTc3Ni4uOTM4Mzg3YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC00NDEsNyArNDQxLDcgQEAKIHN0cnVjdCBvY2ZzMl9ibG9ja19jaGVjayB7CiAvKjAwKi8JX19sZTMyIGJjX2NyYzMyZTsJLyogODAyLjMgRXRoZXJuZXQgSUkgQ1JDMzIgKi8KIAlfX2xlMTYgYmNfZWNjOwkJLyogU2luZ2xlLWVycm9yLWNvcnJlY3Rpb24gcGFyaXR5IHZlY3Rvci4KLQkJCQkgICBUaGlzIGlzIGEgc2ltcGxlIEhhbW1pbmcgY29kZSBkZXBlbmRhbnQKKwkJCQkgICBUaGlzIGlzIGEgc2ltcGxlIEhhbW1pbmcgY29kZSBkZXBlbmRlbnQKIAkJCQkgICBvbiB0aGUgYmxvY2tzaXplLiAgT0NGUzIncyBtYXhpbXVtCiAJCQkJICAgYmxvY2tzaXplLCA0SywgcmVxdWlyZXMgMTYgcGFyaXR5IGJpdHMsCiAJCQkJICAgc28gd2UgZml0IGluIF9fbGUxNi4gKi8KQEAgLTc1MCw3ICs3NTAsNyBAQAogCQkJCQkJCSAgYWZ0ZXIgYW4gdW5jbGVhbgogCQkJCQkJCSAgc2h1dGRvd24gKi8KIAkJfSBqb3VybmFsMTsKLQl9IGlkMTsJCQkJLyogSW5vZGUgdHlwZSBkZXBlbmRhbnQgMSAqLworCX0gaWQxOwkJCQkvKiBJbm9kZSB0eXBlIGRlcGVuZGVudCAxICovCiAvKkMwKi8JdW5pb24gewogCQlzdHJ1Y3Qgb2NmczJfc3VwZXJfYmxvY2sJaV9zdXBlcjsKIAkJc3RydWN0IG9jZnMyX2xvY2FsX2FsbG9jCWlfbGFiOwpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIAlfX2xlMTYJeGVfbmFtZV9vZmZzZXQ7ICAvKiBieXRlIG9mZnNldCBmcm9tIHRoZSAxc3QgZW50cnkgaW4gdGhlCiAJCQkJICAgIGxvY2FsIHhhdHRyIHN0b3JhZ2UoaW5vZGUsIHhhdHRyIGJsb2NrIG9yCiAJCQkJICAgIHhhdHRyIGJ1Y2tldCkuICovCi0JX191OAl4ZV9uYW1lX2xlbjsJIC8qIHhhdHRyIG5hbWUgbGVuLCBkb2VzJ3QgaW5jbHVkZSBwcmVmaXguICovCisJX191OAl4ZV9uYW1lX2xlbjsJIC8qIHhhdHRyIG5hbWUgbGVuLCBkb2Vzbid0IGluY2x1ZGUgcHJlZml4LiAqLwogCV9fdTgJeGVfdHlwZTsgICAgICAgICAvKiB0aGUgbG93IDcgYml0cyBpbmRpY2F0ZSB0aGUgbmFtZSBwcmVmaXgKIAkJCQkgICogdHlwZSBhbmQgdGhlIGhpZ2hlc3QgYml0IGluZGljYXRlcyB3aGV0aGVyCiAJCQkJICAqIHRoZSBFQSBpcyBzdG9yZWQgaW4gdGhlIGxvY2FsIHN0b3JhZ2UuICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYyBiL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jCmluZGV4IDI3OWFlZjYuLjkyZmNkNTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jCisrKyBiL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jCkBAIC01NTYsNyArNTU2LDcgQEAKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAllcnIgPSBvY2ZzMl9xaW5mb19sb2NrKGluZm8sIGZyZWVpbmcpOwogCWlmIChlcnIgPCAwKSB7Ci0JCW1sb2coTUxfRVJST1IsICJGYWlsZWQgdG8gbG9jayBxdW90YSBpbmZvLCBsb29zaW5nIHF1b3RhIHdyaXRlIgorCQltbG9nKE1MX0VSUk9SLCAiRmFpbGVkIHRvIGxvY2sgcXVvdGEgaW5mbywgbG9zaW5nIHF1b3RhIHdyaXRlIgogCQkJICAgICAgICIgKHR5cGU9JWQsIGlkPSV1KVxuIiwgZHF1b3QtPmRxX3R5cGUsCiAJCQkgICAgICAgKHVuc2lnbmVkKWRxdW90LT5kcV9pZCk7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVzZXJ2YXRpb25zLmggYi9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuaAppbmRleCAxZTQ5Y2MyLi40MmMyYjgwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuaAorKysgYi9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuaApAQCAtMjksNyArMjksNyBAQAogc3RydWN0IG9jZnMyX2FsbG9jX3Jlc2VydmF0aW9uIHsKIAlzdHJ1Y3QgcmJfbm9kZQlyX25vZGU7CiAKLQl1bnNpZ25lZCBpbnQJcl9zdGFydDsJLyogQmVnaW5pbmcgb2YgY3VycmVudCB3aW5kb3cgKi8KKwl1bnNpZ25lZCBpbnQJcl9zdGFydDsJLyogQmVnaW5uaW5nIG9mIGN1cnJlbnQgd2luZG93ICovCiAJdW5zaWduZWQgaW50CXJfbGVuOwkJLyogTGVuZ3RoIG9mIHRoZSB3aW5kb3cgKi8KIAogCXVuc2lnbmVkIGludAlyX2xhc3RfbGVuOwkvKiBMZW5ndGggb2YgbW9zdCByZWNlbnQgYWxsb2MgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrZ2x1ZS5oIGIvZnMvb2NmczIvc3RhY2tnbHVlLmgKaW5kZXggOGNlNzM5OC4uMWVjNTZmZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tnbHVlLmgKKysrIGIvZnMvb2NmczIvc3RhY2tnbHVlLmgKQEAgLTEyNiw3ICsxMjYsNyBAQAogCSAqCiAJICogLT5jb25uZWN0KCkgbXVzdCBub3QgcmV0dXJuIHVudGlsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAogCSAqCi0JICogIC0gTm9kZSBkb3duIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgcmVjaWV2ZWQKKwkgKiAgLSBOb2RlIGRvd24gbm90aWZpY2F0aW9ucyBmb3IgdGhlIGZpbGVzeXN0ZW0gd2lsbCBiZSByZWNlaXZlZAogCSAqICAgIGFuZCBwYXNzZWQgdG8gY29ubi0+Y2NfcmVjb3ZlcnlfaGFuZGxlcigpLgogCSAqICAtIExvY2tpbmcgcmVxdWVzdHMgZm9yIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgcHJvY2Vzc2VkLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggYWI2ZTIwNi4uYmE1ZDk3ZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC0xNTExLDcgKzE1MTEsNyBAQAogCQltYXhfYml0cyA9IGxlMTZfdG9fY3B1KGdkLT5iZ19iaXRzKTsKIAogCQkvKiBUYWlsIGdyb3VwcyBpbiBjbHVzdGVyIGJpdG1hcHMgd2hpY2ggYXJlbid0IGNwZwotCQkgKiBhbGlnbmVkIGFyZSBwcm9uZSB0byBwYXJ0aWFsIGV4dGVudGlvbiBieSBhIGZhaWxlZAorCQkgKiBhbGlnbmVkIGFyZSBwcm9uZSB0byBwYXJ0aWFsIGV4dGVuc2lvbiBieSBhIGZhaWxlZAogCQkgKiBmcyByZXNpemUuIElmIHRoZSBmaWxlIHN5c3RlbSByZXNpemUgbmV2ZXIgZ290IHRvCiAJCSAqIHVwZGF0ZSB0aGUgZGlub2RlIGNsdXN0ZXIgY291bnQsIHRoZW4gd2UgZG9uJ3Qgd2FudAogCQkgKiB0byB0cnVzdCBhbnkgY2x1c3RlcnMgcGFzdCBpdCwgcmVnYXJkbGVzcyBvZiB3aGF0CkBAIC0yNDU5LDcgKzI0NTksNyBAQAogCS8qIFRoZSBhbGxvY19iaCBjb21lcyBmcm9tIG9jZnMyX2ZyZWVfZGlub2RlKCkgb3IKIAkgKiBvY2ZzMl9mcmVlX2NsdXN0ZXJzKCkuICBUaGUgY2FsbGVycyBoYXZlIGFsbCBsb2NrZWQgdGhlCiAJICogYWxsb2NhdG9yIGFuZCBnb3R0ZW4gYWxsb2NfYmggZnJvbSB0aGUgbG9jayBjYWxsLiAgVGhpcwotCSAqIHZhbGlkYXRlcyB0aGUgZGlub2RlIGJ1ZmZlci4gIEFueSBjb3JydXB0aW9uIHRoYXQgaGFzIGhhcHBlbmRlZAorCSAqIHZhbGlkYXRlcyB0aGUgZGlub2RlIGJ1ZmZlci4gIEFueSBjb3JydXB0aW9uIHRoYXQgaGFzIGhhcHBlbmVkCiAJICogaXMgYSBjb2RlIGJ1Zy4gKi8KIAlCVUdfT04oIU9DRlMyX0lTX1ZBTElEX0RJTk9ERShmZSkpOwogCUJVR19PTigoY291bnQgKyBzdGFydF9iaXQpID4gb2NmczJfYml0c19wZXJfZ3JvdXAoY2wpKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDY5ZmExMWIuLjVhNTIxYzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtNzgsNyArNzgsNyBAQAogc3RydWN0IGttZW1fY2FjaGUgKm9jZnMyX2RxdW90X2NhY2hlcDsKIHN0cnVjdCBrbWVtX2NhY2hlICpvY2ZzMl9xZl9jaHVua19jYWNoZXA7CiAKLS8qIE9DRlMyIG5lZWRzIHRvIHNjaGVkdWxlIHNldmVyYWwgZGlmZmVybnQgdHlwZXMgb2Ygd29yayB3aGljaAorLyogT0NGUzIgbmVlZHMgdG8gc2NoZWR1bGUgc2V2ZXJhbCBkaWZmZXJlbnQgdHlwZXMgb2Ygd29yayB3aGljaAogICogcmVxdWlyZSBjbHVzdGVyIGxvY2tpbmcsIGRpc2sgSS9PLCByZWNvdmVyeSB3YWl0cywgZXRjLiBTaW5jZSB0aGVzZQogICogdHlwZXMgb2Ygd29yayB0ZW5kIHRvIGJlIGhlYXZ5IHdlIGF2b2lkIHVzaW5nIHRoZSBrZXJuZWwgZXZlbnRzCiAgKiB3b3JrcXVldWUgYW5kIHNjaGVkdWxlIG9uIG91ciBvd24uICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCA1N2EyMTVkLi44MWVjZjljIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTM1NTQsNyArMzU1NCw3IEBACiAJZG93bl93cml0ZSgmT0NGUzJfSShpbm9kZSktPmlwX3hhdHRyX3NlbSk7CiAJLyoKIAkgKiBTY2FuIGlub2RlIGFuZCBleHRlcm5hbCBibG9jayB0byBmaW5kIHRoZSBzYW1lIG5hbWUKLQkgKiBleHRlbmRlZCBhdHRyaWJ1dGUgYW5kIGNvbGxlY3Qgc2VhcmNoIGluZm9tYXRpb24uCisJICogZXh0ZW5kZWQgYXR0cmlidXRlIGFuZCBjb2xsZWN0IHNlYXJjaCBpbmZvcm1hdGlvbi4KIAkgKi8KIAlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCAmeGlzKTsKIAlpZiAocmV0KQpAQCAtMzU3OCw3ICszNTc4LDcgQEAKIAkJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQkvKiBDaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBpcyByZWZjb3VudGVkIGFuZCBkbyBzb21lIHByZXBhcnRpb24uICovCisJLyogQ2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaXMgcmVmY291bnRlZCBhbmQgZG8gc29tZSBwcmVwYXJhdGlvbi4gKi8KIAlpZiAoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCAmJgogCSAgICAoIXhpcy5ub3RfZm91bmQgfHwgIXhicy5ub3RfZm91bmQpKSB7CiAJCXJldCA9IG9jZnMyX3ByZXBhcmVfcmVmY291bnRfeGF0dHIoaW5vZGUsIGRpLCAmeGksCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggYWM1NDY5Ny4uZDU0NWU5NyAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNTAwLDcgKzUwMCw3IEBACiAJLyogZXZlcnl0aGluZyBpcyB1cCBhbmQgcnVubmluZywgY29tbWVuY2UgKi8KIAlyY3VfYXNzaWduX3BvaW50ZXIocHRibC0+cGFydFtwYXJ0bm9dLCBwKTsKIAotCS8qIHN1cHByZXNzIHVldmVudCBpZiB0aGUgZGlzayBzdXByZXNzZXMgaXQgKi8KKwkvKiBzdXBwcmVzcyB1ZXZlbnQgaWYgdGhlIGRpc2sgc3VwcHJlc3NlcyBpdCAqLwogCWlmICghZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MoZGRldikpCiAJCWtvYmplY3RfdWV2ZW50KCZwZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAKQEAgLTU4NSw3ICs1ODUsNyBAQAogCS8qCiAJICogSWYgYW55IHBhcnRpdGlvbiBjb2RlIHRyaWVkIHRvIHJlYWQgYmV5b25kIEVPRCwgdHJ5CiAJICogdW5sb2NraW5nIG5hdGl2ZSBjYXBhY2l0eSBldmVuIGlmIHBhcnRpdGlvbiB0YWJsZSBpcwotCSAqIHN1Y2Vzc2Z1bGx5IHJlYWQgYXMgd2UgY291bGQgYmUgbWlzc2luZyBzb21lIHBhcnRpdGlvbnMuCisJICogc3VjY2Vzc2Z1bGx5IHJlYWQgYXMgd2UgY291bGQgYmUgbWlzc2luZyBzb21lIHBhcnRpdGlvbnMuCiAJICovCiAJaWYgKHN0YXRlLT5hY2Nlc3NfYmV5b25kX2VvZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2VmaS5jIGIvZnMvcGFydGl0aW9ucy9lZmkuYwppbmRleCBhYzBjY2I1Li4xOWQ2NzUwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2VmaS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvZWZpLmMKQEAgLTM0OCw2ICszNDgsMTIgQEAKIAkJZ290byBmYWlsOwogCX0KIAorCS8qIENoZWNrIHRoYXQgc2l6ZW9mX3BhcnRpdGlvbl9lbnRyeSBoYXMgdGhlIGNvcnJlY3QgdmFsdWUgKi8KKwlpZiAobGUzMl90b19jcHUoKCpncHQpLT5zaXplb2ZfcGFydGl0aW9uX2VudHJ5KSAhPSBzaXplb2YoZ3B0X2VudHJ5KSkgeworCQlwcl9kZWJ1ZygiR1VJRCBQYXJ0aXRpdGlvbiBFbnRyeSBTaXplIGNoZWNrIGZhaWxlZC5cbiIpOworCQlnb3RvIGZhaWw7CisJfQorCiAJaWYgKCEoKnB0ZXMgPSBhbGxvY19yZWFkX2dwdF9lbnRyaWVzKHN0YXRlLCAqZ3B0KSkpCiAJCWdvdG8gZmFpbDsKIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9sZG0uYyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKaW5kZXggYjEwZTM1NC4uY2U0ZjYyNCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9sZG0uYworKysgYi9mcy9wYXJ0aXRpb25zL2xkbS5jCkBAIC0xMjk5LDYgKzEyOTksMTEgQEAKIAogCUJVR19PTiAoIWRhdGEgfHwgIWZyYWdzKTsKIAorCWlmIChzaXplIDwgMiAqIFZCTEtfU0laRV9IRUFEKSB7CisJCWxkbV9lcnJvcigiVmFsdWUgb2Ygc2l6ZSBpcyB0byBzbWFsbC4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCWdyb3VwID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEgKyAweDA4KTsKIAlyZWMgICA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhICsgMHgwQyk7CiAJbnVtICAgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSArIDB4MEUpOwpAQCAtMTMwNiw2ICsxMzExLDEwIEBACiAJCWxkbV9lcnJvciAoIkEgVkJMSyBjbGFpbXMgdG8gaGF2ZSAlZCBwYXJ0cy4iLCBudW0pOwogCQlyZXR1cm4gZmFsc2U7CiAJfQorCWlmIChyZWMgPj0gbnVtKSB7CisJCWxkbV9lcnJvcigiUkVDIHZhbHVlICglZCkgZXhjZWVkcyBOVU0gdmFsdWUgKCVkKSIsIHJlYywgbnVtKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAogCWxpc3RfZm9yX2VhY2ggKGl0ZW0sIGZyYWdzKSB7CiAJCWYgPSBsaXN0X2VudHJ5IChpdGVtLCBzdHJ1Y3QgZnJhZywgbGlzdCk7CkBAIC0xMzM0LDEwICsxMzQzLDkgQEAKIAogCWYtPm1hcCB8PSAoMSA8PCByZWMpOwogCi0JaWYgKG51bSA+IDApIHsKLQkJZGF0YSArPSBWQkxLX1NJWkVfSEVBRDsKLQkJc2l6ZSAtPSBWQkxLX1NJWkVfSEVBRDsKLQl9CisJZGF0YSArPSBWQkxLX1NJWkVfSEVBRDsKKwlzaXplIC09IFZCTEtfU0laRV9IRUFEOworCiAJbWVtY3B5IChmLT5kYXRhK3JlYyooc2l6ZS1WQkxLX1NJWkVfSEVBRCkrVkJMS19TSVpFX0hFQUQsIGRhdGEsIHNpemUpOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDVhNjcwYzEuLmRmYTUzMjcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAl9CiAKIAkvKgotCSAqIE5vb25lIGVsc2UgaXMgYWxsb3dlZC4KKwkgKiBObyBvbmUgZWxzZSBpcyBhbGxvd2VkLgogCSAqLwogCW1tcHV0KG1tKTsKIAlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwpAQCAtMzEyNCwxMSArMzEyNCwxNiBAQAogLyogZm9yIHRoZSAvcHJvYy8gZGlyZWN0b3J5IGl0c2VsZiwgYWZ0ZXIgbm9uLXByb2Nlc3Mgc3R1ZmYgaGFzIGJlZW4gZG9uZSAqLwogaW50IHByb2NfcGlkX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQl1bnNpZ25lZCBpbnQgbnIgPSBmaWxwLT5mX3BvcyAtIEZJUlNUX1BST0NFU1NfRU5UUlk7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpyZWFwZXIgPSBnZXRfcHJvY190YXNrKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCXVuc2lnbmVkIGludCBucjsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlYXBlcjsKIAlzdHJ1Y3QgdGdpZF9pdGVyIGl0ZXI7CiAJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOwogCisJaWYgKGZpbHAtPmZfcG9zID49IFBJRF9NQVhfTElNSVQgKyBUR0lEX09GRlNFVCkKKwkJZ290byBvdXRfbm9fdGFzazsKKwluciA9IGZpbHAtPmZfcG9zIC0gRklSU1RfUFJPQ0VTU19FTlRSWTsKKworCXJlYXBlciA9IGdldF9wcm9jX3Rhc2soZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCFyZWFwZXIpCiAJCWdvdG8gb3V0X25vX3Rhc2s7CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCAyZTdhZGRmLi4zMThkODY1IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlpbnQgZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGdvZmYgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCWRldl90IGRldiA9IDA7CiAJaW50IGxlbjsKIApAQCAtMjI3LDEzICsyMjcsMTUgQEAKIAogCS8qIFdlIGRvbid0IHNob3cgdGhlIHN0YWNrIGd1YXJkIHBhZ2UgaW4gL3Byb2MvbWFwcyAqLwogCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikKLQkJaWYgKCF2bWFfc3RhY2tfY29udGludWUodm1hLT52bV9wcmV2LCB2bWEtPnZtX3N0YXJ0KSkKLQkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwlpZiAoc3RhY2tfZ3VhcmRfcGFnZV9zdGFydCh2bWEsIHN0YXJ0KSkKKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCWVuZCA9IHZtYS0+dm1fZW5kOworCWlmIChzdGFja19ndWFyZF9wYWdlX2VuZCh2bWEsIGVuZCkpCisJCWVuZCAtPSBQQUdFX1NJWkU7CiAKIAlzZXFfcHJpbnRmKG0sICIlMDhseC0lMDhseCAlYyVjJWMlYyAlMDhsbHggJTAyeDolMDJ4ICVsdSAlbiIsCiAJCQlzdGFydCwKLQkJCXZtYS0+dm1fZW5kLAorCQkJZW5kLAogCQkJZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAogCQkJZmxhZ3MgJiBWTV9XUklURSA/ICd3JyA6ICctJywKIAkJCWZsYWdzICYgVk1fRVhFQyA/ICd4JyA6ICctJywKZGlmZiAtLWdpdCBhL2ZzL3BzdG9yZS9LY29uZmlnIGIvZnMvcHN0b3JlL0tjb25maWcKaW5kZXggODY3ZDBhYy4uODAwN2FlNyAxMDA2NDQKLS0tIGEvZnMvcHN0b3JlL0tjb25maWcKKysrIGIvZnMvcHN0b3JlL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFNUT1JFCi0JYm9vbCAiUGVyc2lzdGFudCBzdG9yZSBzdXBwb3J0IgorCWJvb2wgIlBlcnNpc3RlbnQgc3RvcmUgc3VwcG9ydCIKIAlkZWZhdWx0IG4KIAloZWxwCiAJICAgVGhpcyBvcHRpb24gZW5hYmxlcyBnZW5lcmljIGFjY2VzcyB0byBwbGF0Zm9ybSBsZXZlbApkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggZmNjOGFlNy4uZDNjMDMyZiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC00NDIsNyArNDQyLDcgQEAKICAqLwogaW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogewotCWludCByZXQgPSAwLCByZXQyID0gMDsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpOwogCiAJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwpAQCAtNDU0LDE1ICs0NTQsMTAgQEAKIAlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKIAkvKiBJbmFjdGl2ZSBkcXVvdCBjYW4gYmUgb25seSBpZiB0aGVyZSB3YXMgZXJyb3IgZHVyaW5nIHJlYWQvaW5pdAogCSAqID0+IHdlIGhhdmUgYmV0dGVyIG5vdCB3cml0aW5nIGl0ICovCi0JaWYgKHRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpCiAJCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5jb21taXRfZHFibGsoZHF1b3QpOwotCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bZHF1b3QtPmRxX3R5cGVdKSkgewotCQkJcmV0MiA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT53cml0ZV9maWxlX2luZm8oCi0JCQkJCQlkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKLQkJfQotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSByZXQyOwotCX0KKwllbHNlCisJCXJldCA9IC1FSU87CiBvdXRfc2VtOgogCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC05NTYsNyArOTUxLDcgQEAKIAogLyoKICAqIFJlbW92ZSByZWZlcmVuY2VzIHRvIGRxdW90cyBmcm9tIGlub2RlIGFuZCBhZGQgZHF1b3QgdG8gbGlzdCBmb3IgZnJlZWluZwotICogaWYgd2UgaGF2ZSB0aGUgbGFzdCByZWZlcmVjZSB0byBkcXVvdAorICogaWYgd2UgaGF2ZSB0aGUgbGFzdCByZWZlcmVuY2UgdG8gZHF1b3QKICAqIFdlIGNhbid0IHJhY2Ugd2l0aCBhbnlib2R5IGJlY2F1c2Ugd2UgaG9sZCBkcXB0cl9zZW0gZm9yIHdyaXRpbmcuLi4KICAqLwogc3RhdGljIGludCByZW1vdmVfaW5vZGVfZHF1b3RfcmVmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLApkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCmluZGV4IDllZWFkMmMuLmZiYjBiNDcgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKQEAgLTExMiw2ICsxMTIsNyBAQAogCQlTZXRQYWdlRGlydHkocGFnZSk7CiAKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXB1dF9wYWdlKHBhZ2UpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IGM3NzUxNGIuLmM1ZTgyZWMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogKiogV3JpdGUgYWhlYWQgbG9nZ2luZyBpbXBsZW1lbnRhdGlvbiBjb3B5cmlnaHQgQ2hyaXMgTWFzb24gMjAwMAogKioKLSoqIFRoZSBiYWNrZ3JvdW5kIGNvbW1pdHMgbWFrZSB0aGlzIGNvZGUgdmVyeSBpbnRlcmVsYXRlZCwgYW5kCisqKiBUaGUgYmFja2dyb3VuZCBjb21taXRzIG1ha2UgdGhpcyBjb2RlIHZlcnkgaW50ZXJyZWxhdGVkLCBhbmQKICoqIG92ZXJseSBjb21wbGV4LiAgSSBuZWVkIHRvIHJldGhpbmsgdGhpbmdzIGEgYml0Li4uLlRoZSBtYWpvciBwbGF5ZXJzOgogKioKICoqIGpvdXJuYWxfYmVnaW4gLS0gY2FsbCB3aXRoIHRoZSBudW1iZXIgb2YgYmxvY2tzIHlvdSBleHBlY3QgdG8gbG9nLgpAQCAtMjcyNSw3ICsyNzI1LDcgQEAKIAkJCQkJCSBSRUlTRVJGU19ESVNLX09GRlNFVF9JTl9CWVRFUyAvCiAJCQkJCQkgc2ItPnNfYmxvY2tzaXplICsgMik7CiAKLQkvKiBTYW5pdHkgY2hlY2sgdG8gc2VlIGlzIHRoZSBzdGFuZGFyZCBqb3VybmFsIGZpdHRpbmcgd2l0aGluZyBmaXJzdCBiaXRtYXAKKwkvKiBTYW5pdHkgY2hlY2sgdG8gc2VlIGlzIHRoZSBzdGFuZGFyZCBqb3VybmFsIGZpdHRpbmcgd2l0aGluIGZpcnN0IGJpdG1hcAogCSAgIChhY3R1YWwgZm9yIHNtYWxsIGJsb2Nrc2l6ZXMpICovCiAJaWYgKCFTQl9PTkRJU0tfSk9VUk5BTF9ERVZJQ0Uoc2IpICYmCiAJICAgIChTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhzYikgKwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbG9jay5jIGIvZnMvcmVpc2VyZnMvbG9jay5jCmluZGV4IGI4N2FhMmMuLjdkZjFjZTQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2xvY2suYworKysgYi9mcy9yZWlzZXJmcy9sb2NrLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqIGZvciB0aGlzIG11dGV4LCBubyBuZWVkIGZvciBhIHN5c3RlbSB3aWRlIG11dGV4IGZhY2lsaXR5LgogICoKICAqIEFsc28gdGhpcyBsb2NrIGlzIG9mdGVuIHJlbGVhc2VkIGJlZm9yZSBhIGNhbGwgdGhhdCBjb3VsZCBibG9jayBiZWNhdXNlCi0gKiByZWlzZXJmcyBwZXJmb3JtYW5jZXMgd2VyZSBwYXJ0aWFseSBiYXNlZCBvbiB0aGUgcmVsZWFzZSB3aGlsZSBzY2hlZHVsZSgpCisgKiByZWlzZXJmcyBwZXJmb3JtYW5jZXMgd2VyZSBwYXJ0aWFsbHkgYmFzZWQgb24gdGhlIHJlbGVhc2Ugd2hpbGUgc2NoZWR1bGUoKQogICogcHJvcGVydHkgb2YgdGhlIEJrbC4KICAqLwogdm9pZCByZWlzZXJmc193cml0ZV9sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDBhYWIwNGYuLmIyMTZmZjYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJLyogYm9keSBvZiAic2F2ZSIgbGluayAqLwogCWxpbmsgPSBJTk9ERV9QS0VZKGlub2RlKS0+a19kaXJfaWQ7CiAKLQkvKiBwdXQgInNhdmUiIGxpbmsgaW5vdCB0cmVlLCBkb24ndCBjaGFyZ2UgcXVvdGEgdG8gYW55b25lICovCisJLyogcHV0ICJzYXZlIiBsaW5rIGludG8gdHJlZSwgZG9uJ3QgY2hhcmdlIHF1b3RhIHRvIGFueW9uZSAqLwogCXJldHZhbCA9CiAJICAgIHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCAmcGF0aCwgJmtleSwgJmloLCBOVUxMLCAoY2hhciAqKSZsaW5rKTsKIAlpZiAocmV0dmFsKSB7CkBAIC0yMTA0LDcgKzIxMDQsNyBAQAogCiAvKiBSZWFkIGRhdGEgZnJvbSBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QgYWZmb3JkCiAgKiBhY3F1aXJpbmcgdGhlIGxvY2tzLi4uIEFzIHF1b3RhIGZpbGVzIGFyZSBuZXZlciB0cnVuY2F0ZWQgYW5kIHF1b3RhIGNvZGUKLSAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm9vbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQorICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBubyBvbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQogICogd2UgZG9uJ3QgaGF2ZSB0byBiZSBhZnJhaWQgb2YgcmFjZXMgKi8KIHN0YXRpYyBzc2l6ZV90IHJlaXNlcmZzX3F1b3RhX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGNoYXIgKmRhdGEsCiAJCQkJICAgc2l6ZV90IGxlbiwgbG9mZl90IG9mZikKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IDVjMTFjYTguLjQ3ZDJhNDQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBkaXItPmlfbWFwcGluZzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkvKiBXZSBjYW4gZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIGZyZWUgZGVudHJpZXMsCi0JICAgYW5kIGFuIHVubGluay9ybWRpciBoYXMganVzdCBvY2N1cmVkIC0gR0ZQX05PRlMgYXZvaWRzIHRoaXMgKi8KKwkgICBhbmQgYW4gdW5saW5rL3JtZGlyIGhhcyBqdXN0IG9jY3VycmVkIC0gR0ZQX05PRlMgYXZvaWRzIHRoaXMgKi8KIAltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBHRlBfTk9GUyk7CiAJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG4gPj4gUEFHRV9DQUNIRV9TSElGVCwgTlVMTCk7CiAJaWYgKCFJU19FUlIocGFnZSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMgYi9mcy9zcXVhc2hmcy9jYWNoZS5jCmluZGV4IDI2YjE1YWUuLmMzN2I1MjAgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMKKysrIGIvZnMvc3F1YXNoZnMvY2FjaGUuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQllbnRyeSA9ICZjYWNoZS0+ZW50cnlbaV07CiAKIAkJCS8qCi0JCQkgKiBJbml0aWFsaXNlIGNob29zZW4gY2FjaGUgZW50cnksIGFuZCBmaWxsIGl0IGluIGZyb20KKwkJCSAqIEluaXRpYWxpc2UgY2hvc2VuIGNhY2hlIGVudHJ5LCBhbmQgZmlsbCBpdCBpbiBmcm9tCiAJCQkgKiBkaXNrLgogCQkJICovCiAJCQljYWNoZS0+dW51c2VkLS07CkBAIC0yODYsNyArMjg2LDcgQEAKIAogCiAvKgotICogQ29weSB1cHRvIGxlbmd0aCBieXRlcyBmcm9tIGNhY2hlIGVudHJ5IHRvIGJ1ZmZlciBzdGFydGluZyBhdCBvZmZzZXQgYnl0ZXMKKyAqIENvcHkgdXAgdG8gbGVuZ3RoIGJ5dGVzIGZyb20gY2FjaGUgZW50cnkgdG8gYnVmZmVyIHN0YXJ0aW5nIGF0IG9mZnNldCBieXRlcwogICogaW50byB0aGUgY2FjaGUgZW50cnkuICBJZiB0aGVyZSdzIG5vdCBsZW5ndGggYnl0ZXMgdGhlbiBjb3B5IHRoZSBudW1iZXIgb2YKICAqIGJ5dGVzIGF2YWlsYWJsZS4gIEluIGFsbCBjYXNlcyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL0tjb25maWcgYi9mcy91Ymlmcy9LY29uZmlnCmluZGV4IGQ3NDQwOTAuLmY4YjAxNjAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL0tjb25maWcKKysrIGIvZnMvdWJpZnMvS2NvbmZpZwpAQCAtNDcsNyArNDcsNyBAQAogCWJvb2wgIkVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVCSUZTX0ZTCiAJc2VsZWN0IERFQlVHX0ZTCi0Jc2VsZWN0IEtBTExTWU1TX0FMTAorCXNlbGVjdCBLQUxMU1lNUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgVUJJRlMgZGVidWdnaW5nIHN1cHBvcnQuIEl0IG1ha2VzIHN1cmUgdmFyaW91cwogCSAgYXNzZXJ0aW9ucywgc2VsZi1jaGVja3MsIGRlYnVnZ2luZyBtZXNzYWdlcyBhbmQgdGVzdCBtb2RlcyBhcmUgY29tcGlsZWQKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2J1ZGdldC5jIGIvZnMvdWJpZnMvYnVkZ2V0LmMKaW5kZXggYzhmZjBkMS4uOGIzYTdkYSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvYnVkZ2V0LmMKKysrIGIvZnMvdWJpZnMvYnVkZ2V0LmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCQlpZiAobGlhYjIgPCBsaWFiMSkKIAkJCXJldHVybiAtRUFHQUlOOwogCi0JCWRiZ19idWRnKCJuZXcgbGlhYmlsaXR5ICVsbGQgKG5vdCBzaHJpbmtlZCkiLCBsaWFiMik7CisJCWRiZ19idWRnKCJuZXcgbGlhYmlsaXR5ICVsbGQgKG5vdCBzaHJ1bmspIiwgbGlhYjIpOwogCiAJCS8qIExpYWJpbGl0eSBkaWQgbm90IHNocmluayBhZ2FpbiwgdHJ5IEdDICovCiAJCWRiZ19idWRnKCJSdW4gR0MiKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2NvbW1pdC5jIGIvZnMvdWJpZnMvY29tbWl0LmMKaW5kZXggYjE0OGZiYy4uMWJkMDFkZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvY29tbWl0LmMKKysrIGIvZnMvdWJpZnMvY29tbWl0LmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCXNpemVfdCBzejsKIAogCWlmICghKHViaWZzX2Noa19mbGFncyAmIFVCSUZTX0NIS19PTERfSURYKSkKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5jIGIvZnMvdWJpZnMvZGVidWcuYwppbmRleCBmMjVhNzMzLi4wMDRkMzc0IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5jCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmMKQEAgLTk3MiwxMSArOTcyLDM5IEBACiB2b2lkIGRiZ19zYXZlX3NwYWNlX2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpCiB7CiAJc3RydWN0IHViaWZzX2RlYnVnX2luZm8gKmQgPSBjLT5kYmc7Ci0KLQl1Ymlmc19nZXRfbHBfc3RhdHMoYywgJmQtPnNhdmVkX2xzdCk7CisJaW50IGZyZWVhYmxlX2NudDsKIAogCXNwaW5fbG9jaygmYy0+c3BhY2VfbG9jayk7CisJbWVtY3B5KCZkLT5zYXZlZF9sc3QsICZjLT5sc3QsIHNpemVvZihzdHJ1Y3QgdWJpZnNfbHBfc3RhdHMpKTsKKworCS8qCisJICogV2UgdXNlIGEgZGlydHkgaGFjayBoZXJlIGFuZCB6ZXJvIG91dCBAYy0+ZnJlZWFibGVfY250LCBiZWNhdXNlIGl0CisJICogYWZmZWN0cyB0aGUgZnJlZSBzcGFjZSBjYWxjdWxhdGlvbnMsIGFuZCBVQklGUyBtaWdodCBub3Qga25vdyBhYm91dAorCSAqIGFsbCBmcmVlYWJsZSBlcmFzZWJsb2Nrcy4gSW5kZWVkLCB3ZSBrbm93IGFib3V0IGZyZWVhYmxlIGVyYXNlYmxvY2tzCisJICogb25seSB3aGVuIHdlIHJlYWQgdGhlaXIgbHByb3BzLCBhbmQgd2UgZG8gdGhpcyBvbmx5IGxhemlseSwgdXBvbiB0aGUKKwkgKiBuZWVkLiBTbyBhdCBhbnkgZ2l2ZW4gcG9pbnQgb2YgdGltZSBAYy0+ZnJlZWFibGVfY250IG1pZ2h0IGJlIG5vdAorCSAqIGV4YWN0bHkgYWNjdXJhdGUuCisJICoKKwkgKiBKdXN0IG9uZSBleGFtcGxlIGFib3V0IHRoZSBpc3N1ZSB3ZSBoaXQgd2hlbiB3ZSBkaWQgbm90IHplcm8KKwkgKiBAYy0+ZnJlZWFibGVfY250LgorCSAqIDEuIFRoZSBmaWxlLXN5c3RlbSBpcyBtb3VudGVkIFIvTywgYy0+ZnJlZWFibGVfY250IGlzICUwLiBXZSBzYXZlIHRoZQorCSAqICAgIGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIEBkLT5zYXZlZF9mcmVlCisJICogMi4gV2UgcmUtbW91bnQgUi9XLCB3aGljaCBtYWtlcyBVQklGUyB0byByZWFkIHRoZSAibHNhdmUiCisJICogICAgaW5mb3JtYXRpb24gZnJvbSBmbGFzaCwgd2hlcmUgd2UgY2FjaGUgTEVCcyBmcm9tIHZhcmlvdXMKKwkgKiAgICBjYXRlZ29yaWVzICgndWJpZnNfcmVtb3VudF9mcygpJyAtPiAndWJpZnNfbHB0X2luaXQoKScKKwkgKiAgICAtPiAnbHB0X2luaXRfd3IoKScgLT4gJ3JlYWRfbHNhdmUoKScgLT4gJ3ViaWZzX2xwdF9sb29rdXAoKScKKwkgKiAgICAtPiAndWJpZnNfZ2V0X3Bub2RlKCknIC0+ICd1cGRhdGVfY2F0cygpJworCSAqICAgIC0+ICd1Ymlmc19hZGRfdG9fY2F0KCknKS4KKwkgKiAzLiBMc2F2ZSBjb250YWlucyBhIGZyZWVhYmxlIGVyYXNlYmxvY2ssIGFuZCBAYy0+ZnJlZWFibGVfY250CisJICogICAgYmVjb21lcyAlMS4KKwkgKiA0LiBXZSBjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdoZW4gdGhlIHJlLW1vdW50IGlzCisJICogICAgZmluaXNoZWQgaW4gJ2RiZ19jaGVja19zcGFjZV9pbmZvKCknIGFuZCBpdCBkb2VzIG5vdCBtYXRjaAorCSAqICAgIEBkLT5zYXZlZF9mcmVlLgorCSAqLworCWZyZWVhYmxlX2NudCA9IGMtPmZyZWVhYmxlX2NudDsKKwljLT5mcmVlYWJsZV9jbnQgPSAwOwogCWQtPnNhdmVkX2ZyZWUgPSB1Ymlmc19nZXRfZnJlZV9zcGFjZV9ub2xvY2soYyk7CisJYy0+ZnJlZWFibGVfY250ID0gZnJlZWFibGVfY250OwogCXNwaW5fdW5sb2NrKCZjLT5zcGFjZV9sb2NrKTsKIH0KIApAQCAtOTkzLDEyICsxMDIxLDE1IEBACiB7CiAJc3RydWN0IHViaWZzX2RlYnVnX2luZm8gKmQgPSBjLT5kYmc7CiAJc3RydWN0IHViaWZzX2xwX3N0YXRzIGxzdDsKLQlsb25nIGxvbmcgYXZhaWwsIGZyZWU7CisJbG9uZyBsb25nIGZyZWU7CisJaW50IGZyZWVhYmxlX2NudDsKIAogCXNwaW5fbG9jaygmYy0+c3BhY2VfbG9jayk7Ci0JYXZhaWwgPSB1Ymlmc19jYWxjX2F2YWlsYWJsZShjLCBjLT5taW5faWR4X2xlYnMpOworCWZyZWVhYmxlX2NudCA9IGMtPmZyZWVhYmxlX2NudDsKKwljLT5mcmVlYWJsZV9jbnQgPSAwOworCWZyZWUgPSB1Ymlmc19nZXRfZnJlZV9zcGFjZV9ub2xvY2soYyk7CisJYy0+ZnJlZWFibGVfY250ID0gZnJlZWFibGVfY250OwogCXNwaW5fdW5sb2NrKCZjLT5zcGFjZV9sb2NrKTsKLQlmcmVlID0gdWJpZnNfZ2V0X2ZyZWVfc3BhY2UoYyk7CiAKIAlpZiAoZnJlZSAhPSBkLT5zYXZlZF9mcmVlKSB7CiAJCXViaWZzX2VycigiZnJlZSBzcGFjZSBjaGFuZ2VkIGZyb20gJWxsZCB0byAlbGxkIiwKQEAgLTI4MDYsNDAgKzI4MzcsMzggQEAKIAlzdHJ1Y3QgdWJpZnNfZGVidWdfaW5mbyAqZCA9IGMtPmRiZzsKIAogCXNwcmludGYoZC0+ZGZzX2Rpcl9uYW1lLCAidWJpJWRfJWQiLCBjLT52aS51YmlfbnVtLCBjLT52aS52b2xfaWQpOwotCWQtPmRmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZC0+ZGZzX2Rpcl9uYW1lLCBkZnNfcm9vdGRpcik7Ci0JaWYgKElTX0VSUihkLT5kZnNfZGlyKSkgewotCQllcnIgPSBQVFJfRVJSKGQtPmRmc19kaXIpOwotCQl1Ymlmc19lcnIoImNhbm5vdCBjcmVhdGUgXCIlc1wiIGRlYnVnZnMgZGlyZWN0b3J5LCBlcnJvciAlZFxuIiwKLQkJCSAgZC0+ZGZzX2Rpcl9uYW1lLCBlcnIpOworCWZuYW1lID0gZC0+ZGZzX2Rpcl9uYW1lOworCWRlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZm5hbWUsIGRmc19yb290ZGlyKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoZGVudCkpCiAJCWdvdG8gb3V0OwotCX0KKwlkLT5kZnNfZGlyID0gZGVudDsKIAogCWZuYW1lID0gImR1bXBfbHByb3BzIjsKIAlkZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgU19JV1VTUiwgZC0+ZGZzX2RpciwgYywgJmRmc19mb3BzKTsKLQlpZiAoSVNfRVJSKGRlbnQpKQorCWlmIChJU19FUlJfT1JfTlVMTChkZW50KSkKIAkJZ290byBvdXRfcmVtb3ZlOwogCWQtPmRmc19kdW1wX2xwcm9wcyA9IGRlbnQ7CiAKIAlmbmFtZSA9ICJkdW1wX2J1ZGciOwogCWRlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCBTX0lXVVNSLCBkLT5kZnNfZGlyLCBjLCAmZGZzX2ZvcHMpOwotCWlmIChJU19FUlIoZGVudCkpCisJaWYgKElTX0VSUl9PUl9OVUxMKGRlbnQpKQogCQlnb3RvIG91dF9yZW1vdmU7CiAJZC0+ZGZzX2R1bXBfYnVkZyA9IGRlbnQ7CiAKIAlmbmFtZSA9ICJkdW1wX3RuYyI7CiAJZGVudCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZm5hbWUsIFNfSVdVU1IsIGQtPmRmc19kaXIsIGMsICZkZnNfZm9wcyk7Ci0JaWYgKElTX0VSUihkZW50KSkKKwlpZiAoSVNfRVJSX09SX05VTEwoZGVudCkpCiAJCWdvdG8gb3V0X3JlbW92ZTsKIAlkLT5kZnNfZHVtcF90bmMgPSBkZW50OwogCiAJcmV0dXJuIDA7CiAKIG91dF9yZW1vdmU6Ci0JZXJyID0gUFRSX0VSUihkZW50KTsKLQl1Ymlmc19lcnIoImNhbm5vdCBjcmVhdGUgXCIlc1wiIGRlYnVnZnMgZGlyZWN0b3J5LCBlcnJvciAlZFxuIiwKLQkJICBmbmFtZSwgZXJyKTsKIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZC0+ZGZzX2Rpcik7CiBvdXQ6CisJZXJyID0gZGVudCA/IFBUUl9FUlIoZGVudCkgOiAtRU5PREVWOworCXViaWZzX2VycigiY2Fubm90IGNyZWF0ZSBcIiVzXCIgZGVidWdmcyBkaXJlY3RvcnksIGVycm9yICVkXG4iLAorCQkgIGZuYW1lLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2RlYnVnLmggYi9mcy91Ymlmcy9kZWJ1Zy5oCmluZGV4IDkxOWYwZGUuLmU2NDkzY2EgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2RlYnVnLmgKKysrIGIvZnMvdWJpZnMvZGVidWcuaApAQCAtMjMsNiArMjMsMTIgQEAKICNpZm5kZWYgX19VQklGU19ERUJVR19IX18KICNkZWZpbmUgX19VQklGU19ERUJVR19IX18KIAorLyogQ2hlY2tpbmcgaGVscGVyIGZ1bmN0aW9ucyAqLwordHlwZWRlZiBpbnQgKCpkYmdfbGVhZl9jYWxsYmFjaykoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJIHN0cnVjdCB1Ymlmc196YnJhbmNoICp6YnIsIHZvaWQgKnByaXYpOwordHlwZWRlZiBpbnQgKCpkYmdfem5vZGVfY2FsbGJhY2spKHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSAgc3RydWN0IHViaWZzX3pub2RlICp6bm9kZSwgdm9pZCAqcHJpdik7CisKICNpZmRlZiBDT05GSUdfVUJJRlNfRlNfREVCVUcKIAogLyoqCkBAIC0yNzAsMTEgKzI3Niw2IEBACiB2b2lkIGRiZ19kdW1wX2luZGV4KHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIHZvaWQgZGJnX2R1bXBfbHB0X2xlYnMoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMpOwogCi0vKiBDaGVja2luZyBoZWxwZXIgZnVuY3Rpb25zICovCi10eXBlZGVmIGludCAoKmRiZ19sZWFmX2NhbGxiYWNrKShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKLQkJCQkgc3RydWN0IHViaWZzX3picmFuY2ggKnpiciwgdm9pZCAqcHJpdik7Ci10eXBlZGVmIGludCAoKmRiZ196bm9kZV9jYWxsYmFjaykoc3RydWN0IHViaWZzX2luZm8gKmMsCi0JCQkJICBzdHJ1Y3QgdWJpZnNfem5vZGUgKnpub2RlLCB2b2lkICpwcml2KTsKIGludCBkYmdfd2Fsa19pbmRleChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgZGJnX2xlYWZfY2FsbGJhY2sgbGVhZl9jYiwKIAkJICAgZGJnX3pub2RlX2NhbGxiYWNrIHpub2RlX2NiLCB2b2lkICpwcml2KTsKIApAQCAtMjk1LDcgKzI5Niw2IEBACiBpbnQgZGJnX2NoZWNrX2ZpbGVzeXN0ZW0oc3RydWN0IHViaWZzX2luZm8gKmMpOwogdm9pZCBkYmdfY2hlY2tfaGVhcChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2xwdF9oZWFwICpoZWFwLCBpbnQgY2F0LAogCQkgICAgaW50IGFkZF9wb3MpOwotaW50IGRiZ19jaGVja19scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpOwogaW50IGRiZ19jaGVja19scHRfbm9kZXMoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc19jbm9kZSAqY25vZGUsCiAJCQlpbnQgcm93LCBpbnQgY29sKTsKIGludCBkYmdfY2hlY2tfaW5vZGVfc2l6ZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKQEAgLTQwMSw1OCArNDAxLDk0IEBACiAjZGVmaW5lIERCR0tFWShrZXkpICAoKGNoYXIgKikoa2V5KSkKICNkZWZpbmUgREJHS0VZMShrZXkpICgoY2hhciAqKShrZXkpKQogCi0jZGVmaW5lIHViaWZzX2RlYnVnZ2luZ19pbml0KGMpICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgdWJpZnNfZGVidWdnaW5nX2V4aXQoYykgICAgICAgICAgICAgICAgKHt9KQorc3RhdGljIGlubGluZSBpbnQgdWJpZnNfZGVidWdnaW5nX2luaXQoc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHViaWZzX2RlYnVnZ2luZ19leGl0KHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZGJnX250eXBlKGludCB0eXBlKSAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuICIiOyB9CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRiZ19jc3RhdGUoaW50IGNtdF9zdGF0ZSkgICAgICAgICAgICAgICB7IHJldHVybiAiIjsgfQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkYmdfamhlYWQoaW50IGpoZWFkKSAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIiI7IH0KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitkYmdfZ2V0X2tleV9kdW1wKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkpICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuICIiOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfaW5vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKSAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgY29uc3Qgdm9pZCAqbm9kZSkgICAgICAgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9scHRfbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgICAgIHZvaWQgKm5vZGUsIGludCBsbnVtLAorCQkJCSAgICAgaW50IG9mZnMpICAgICAgICAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkCitkYmdfZHVtcF9idWRnZXRfcmVxKGNvbnN0IHN0cnVjdCB1Ymlmc19idWRnZXRfcmVxICpyZXEpICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkCitkYmdfZHVtcF9sc3RhdHMoY29uc3Qgc3RydWN0IHViaWZzX2xwX3N0YXRzICpsc3QpICAgICAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX2J1ZGcoc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9scHJvcChjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwKSAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfbHB0X2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX2xlYihjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQlpbnQgbG51bSkgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGJnX2R1bXBfem5vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCisJICAgICAgIGNvbnN0IHN0cnVjdCB1Ymlmc196bm9kZSAqem5vZGUpICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfaGVhcChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgc3RydWN0IHViaWZzX2xwdF9oZWFwICpoZWFwLAorCQkJCSBpbnQgY2F0KSAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX3Bub2RlKHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSAgc3RydWN0IHViaWZzX3Bub2RlICpwbm9kZSwKKwkJCQkgIHN0cnVjdCB1Ymlmc19ubm9kZSAqcGFyZW50LAorCQkJCSAgaW50IGlpcCkgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX3RuYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9pbmRleChzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfbHB0X2xlYnMoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMpICB7IHJldHVybjsgfQogCi0jZGVmaW5lIGRiZ19udHlwZSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICIiCi0jZGVmaW5lIGRiZ19jc3RhdGUoY210X3N0YXRlKSAgICAgICAgICAgICAgICAgICIiCi0jZGVmaW5lIGRiZ19qaGVhZChqaGVhZCkgICAgICAgICAgICAgICAgICAgICAgICIiCi0jZGVmaW5lIGRiZ19nZXRfa2V5X2R1bXAoYywga2V5KSAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfaW5vZGUoYywgaW5vZGUpICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9ub2RlKGMsIG5vZGUpICAgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX2xwdF9ub2RlKGMsIG5vZGUsIGxudW0sIG9mZnMpICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfYnVkZ2V0X3JlcShyZXEpICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9sc3RhdHMobHN0KSAgICAgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX2J1ZGcoYykgICAgICAgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfbHByb3AoYywgbHApICAgICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9scHJvcHMoYykgICAgICAgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX2xwdF9pbmZvKGMpICAgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfbGViKGMsIGxudW0pICAgICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF96bm9kZShjLCB6bm9kZSkgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX2hlYXAoYywgaGVhcCwgY2F0KSAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfcG5vZGUoYywgcG5vZGUsIHBhcmVudCwgaWlwKSAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF90bmMoYykgICAgICAgICAgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX2luZGV4KGMpICAgICAgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfbHB0X2xlYnMoYykgICAgICAgICAgICAgICAgICAgKHt9KQorc3RhdGljIGlubGluZSBpbnQgZGJnX3dhbGtfaW5kZXgoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJIGRiZ19sZWFmX2NhbGxiYWNrIGxlYWZfY2IsCisJCQkJIGRiZ196bm9kZV9jYWxsYmFjayB6bm9kZV9jYiwKKwkJCQkgdm9pZCAqcHJpdikgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19zYXZlX3NwYWNlX2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19zcGFjZV9pbmZvKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50CitkYmdfb2xkX2luZGV4X2NoZWNrX2luaXQoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkgc3RydWN0IHViaWZzX3picmFuY2ggKnpyb290KSAgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludAorZGJnX2NoZWNrX29sZF9pbmRleChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJICAgIHN0cnVjdCB1Ymlmc196YnJhbmNoICp6cm9vdCkgICAgICAgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hlY2tfY2F0cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hlY2tfbHRhYihzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hrX2xwdF9mcmVlX3NwYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hrX2xwdF9zeihzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgaW50IGFjdGlvbiwgaW50IGxlbikgICAgICAgICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2NoZWNrX3N5bmNlZF9pX3NpemUoc3RydWN0IGlub2RlICppbm9kZSkgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2NoZWNrX2Rpcl9zaXplKHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICpkaXIpICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hlY2tfdG5jKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgZXh0cmEpICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hlY2tfaWR4X3NpemUoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICAgICBsb25nIGxvbmcgaWR4X3NpemUpICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19maWxlc3lzdGVtKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfY2hlY2tfaGVhcChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgIHN0cnVjdCB1Ymlmc19scHRfaGVhcCAqaGVhcCwKKwkJCQkgIGludCBjYXQsIGludCBhZGRfcG9zKSAgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19scHRfbm9kZXMoc3RydWN0IHViaWZzX2luZm8gKmMsCisJc3RydWN0IHViaWZzX2Nub2RlICpjbm9kZSwgaW50IHJvdywgaW50IGNvbCkgICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19pbm9kZV9zaXplKHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBsb2ZmX3Qgc2l6ZSkgICAgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludAorZGJnX2NoZWNrX2RhdGFfbm9kZXNfb3JkZXIoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKSAgICAgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludAorZGJnX2NoZWNrX25vbmRhdGFfbm9kZXNfb3JkZXIoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKSAgICAgICAgICAgICB7IHJldHVybiAwOyB9CiAKLSNkZWZpbmUgZGJnX3dhbGtfaW5kZXgoYywgbGVhZl9jYiwgem5vZGVfY2IsIHByaXYpIDAKLSNkZWZpbmUgZGJnX29sZF9pbmRleF9jaGVja19pbml0KGMsIHpyb290KSAgICAgICAgIDAKLSNkZWZpbmUgZGJnX3NhdmVfc3BhY2VfaW5mbyhjKSAgICAgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2NoZWNrX3NwYWNlX2luZm8oYykgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX29sZF9pbmRleChjLCB6cm9vdCkgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2NhdHMoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2x0YWIoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2Noa19scHRfZnJlZV9zcGMoYykgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2Noa19scHRfc3ooYywgYWN0aW9uLCBsZW4pICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX3N5bmNlZF9pX3NpemUoaW5vZGUpICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2Rpcl9zaXplKGMsIGRpcikgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX3RuYyhjLCB4KSAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2lkeF9zaXplKGMsIGlkeF9zaXplKSAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2ZpbGVzeXN0ZW0oYykgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2hlYXAoYywgaGVhcCwgY2F0LCBhZGRfcG9zKSAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2NoZWNrX2xwcm9wcyhjKSAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2xwdF9ub2RlcyhjLCBjbm9kZSwgcm93LCBjb2wpICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2lub2RlX3NpemUoYywgaW5vZGUsIHNpemUpICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX2RhdGFfbm9kZXNfb3JkZXIoYywgaGVhZCkgICAgICAgIDAKLSNkZWZpbmUgZGJnX2NoZWNrX25vbmRhdGFfbm9kZXNfb3JkZXIoYywgaGVhZCkgICAgIDAKLSNkZWZpbmUgZGJnX2ZvcmNlX2luX3RoZV9nYXBzX2VuYWJsZWQgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2ZvcmNlX2luX3RoZV9nYXBzKCkgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2ZhaWx1cmVfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19mb3JjZV9pbl90aGVfZ2Fwcyh2b2lkKSAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KKyNkZWZpbmUgZGJnX2ZvcmNlX2luX3RoZV9nYXBzX2VuYWJsZWQgMAorI2RlZmluZSBkYmdfZmFpbHVyZV9tb2RlICAgICAgICAgICAgICAwCiAKLSNkZWZpbmUgZGJnX2RlYnVnZnNfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2RlYnVnZnNfZXhpdCgpCi0jZGVmaW5lIGRiZ19kZWJ1Z2ZzX2luaXRfZnMoYykgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIGRiZ19kZWJ1Z2ZzX2V4aXRfZnMoYykgICAgICAgICAgICAgICAgICAgICAwCitzdGF0aWMgaW5saW5lIGludCBkYmdfZGVidWdmc19pbml0KHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2RlYnVnZnNfZXhpdCh2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2RlYnVnZnNfaW5pdF9mcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2RlYnVnZnNfZXhpdF9mcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgeyByZXR1cm4gMDsgfQogCiAjZW5kaWYgLyogIUNPTkZJR19VQklGU19GU19ERUJVRyAqLwogI2VuZGlmIC8qICFfX1VCSUZTX0RFQlVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZmlsZS5jIGIvZnMvdWJpZnMvZmlsZS5jCmluZGV4IDI4YmUxZTYuLmIyODZkYjcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbGUuYworKysgYi9mcy91Ymlmcy9maWxlLmMKQEAgLTEzMTIsNiArMTMxMiw5IEBACiAKIAlkYmdfZ2VuKCJzeW5jaW5nIGlub2RlICVsdSIsIGlub2RlLT5pX2lubyk7CiAKKwlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBWRlMgaGFzIGFscmVhZHkgc3luY2hyb25pemVkIGRpcnR5IHBhZ2VzIGZvciB0aGlzIGlub2RlLiBTeW5jaHJvbml6ZQogCSAqIHRoZSBpbm9kZSB1bmxlc3MgdGhpcyBpcyBhICdkYXRhc3luYygpJyBjYWxsLgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbG9nLmMgYi9mcy91Ymlmcy9sb2cuYwppbmRleCA0ZDBjYjEyLi40MGZhNzgwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9sb2cuYworKysgYi9mcy91Ymlmcy9sb2cuYwpAQCAtMTc1LDI2ICsxNzUsNiBAQAogfQogCiAvKioKLSAqIHViaWZzX2NyZWF0ZV9idWRzX2xpc3RzIC0gY3JlYXRlIGpvdXJuYWwgaGVhZCBidWRzIGxpc3RzIGZvciByZW1vdW50IHJ3LgotICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAotICovCi12b2lkIHViaWZzX2NyZWF0ZV9idWRzX2xpc3RzKHN0cnVjdCB1Ymlmc19pbmZvICpjKQotewotCXN0cnVjdCByYl9ub2RlICpwOwotCi0Jc3Bpbl9sb2NrKCZjLT5idWRzX2xvY2spOwotCXAgPSByYl9maXJzdCgmYy0+YnVkcyk7Ci0Jd2hpbGUgKHApIHsKLQkJc3RydWN0IHViaWZzX2J1ZCAqYnVkID0gcmJfZW50cnkocCwgc3RydWN0IHViaWZzX2J1ZCwgcmIpOwotCQlzdHJ1Y3QgdWJpZnNfamhlYWQgKmpoZWFkID0gJmMtPmpoZWFkc1tidWQtPmpoZWFkXTsKLQotCQlsaXN0X2FkZF90YWlsKCZidWQtPmxpc3QsICZqaGVhZC0+YnVkc19saXN0KTsKLQkJcCA9IHJiX25leHQocCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZjLT5idWRzX2xvY2spOwotfQotCi0vKioKICAqIHViaWZzX2FkZF9idWRfdG9fbG9nIC0gYWRkIGEgbmV3IGJ1ZCB0byB0aGUgbG9nLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGpoZWFkOiBqb3VybmFsIGhlYWQgdGhlIGJ1ZCBiZWxvbmdzIHRvCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHQuYyBiL2ZzL3ViaWZzL2xwdC5jCmluZGV4IDcyNzc1ZDMuLmVmNTE1NWUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwdC5jCisrKyBiL2ZzL3ViaWZzL2xwdC5jCkBAIC0xMjcwLDEwICsxMjcwLDkgQEAKIAlsbnVtID0gYnJhbmNoLT5sbnVtOwogCW9mZnMgPSBicmFuY2gtPm9mZnM7CiAJcG5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWJpZnNfcG5vZGUpLCBHRlBfTk9GUyk7Ci0JaWYgKCFwbm9kZSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKCFwbm9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlpZiAobG51bSA9PSAwKSB7CiAJCS8qCiAJCSAqIFRoaXMgcG5vZGUgd2FzIG5vdCB3cml0dGVuIHdoaWNoIGp1c3QgbWVhbnMgdGhhdCB0aGUgTEVCCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9yZWNvdmVyeS5jIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwppbmRleCA5MzZmMmNiLi4zZGJhZDZmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9yZWNvdmVyeS5jCisrKyBiL2ZzL3ViaWZzL3JlY292ZXJ5LmMKQEAgLTMxNyw2ICszMTcsMzIgQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJbWVtY3B5KGMtPnJjdnJkX21zdF9ub2RlLCBjLT5tc3Rfbm9kZSwgVUJJRlNfTVNUX05PREVfU1opOworCisJCS8qCisJCSAqIFdlIGhhZCB0byByZWNvdmVyIHRoZSBtYXN0ZXIgbm9kZSwgd2hpY2ggbWVhbnMgdGhlcmUgd2FzIGFuCisJCSAqIHVuY2xlYW4gcmVib290LiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBtYXN0ZXIgbm9kZQorCQkgKiBpcyBjbGVhbiBhdCB0aGlzIHBvaW50LCBpLmUuLCAlVUJJRlNfTVNUX0RJUlRZIGlzIG5vdCBzZXQuCisJCSAqIEUuZy4sIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2hhaW4gb2YgZXZlbnRzOgorCQkgKgorCQkgKiAxLiBVQklGUyB3YXMgY2xlYW5seSB1bm1vdW50ZWQsIHNvIHRoZSBtYXN0ZXIgbm9kZSBpcyBjbGVhbgorCQkgKiAyLiBVQklGUyBpcyBiZWluZyBtb3VudGVkIFIvVyBhbmQgc3RhcnRzIGNoYW5naW5nIHRoZSBtYXN0ZXIKKwkJICogICAgbm9kZSBpbiB0aGUgZmlyc3QgKCVVQklGU19NU1RfTE5VTSkuIEEgcG93ZXIgY3V0IGhhcHBlbnMsCisJCSAqICAgIHNvIHRoaXMgTEVCIGVuZHMgdXAgd2l0aCBzb21lIGFtb3VudCBvZiBnYXJiYWdlIGF0IHRoZQorCQkgKiAgICBlbmQuCisJCSAqIDMuIFVCSUZTIGlzIGJlaW5nIG1vdW50ZWQgUi9PLiBXZSByZWFjaCB0aGlzIHBsYWNlIGFuZAorCQkgKiAgICByZWNvdmVyIHRoZSBtYXN0ZXIgbm9kZSBmcm9tIHRoZSBzZWNvbmQgTEVCCisJCSAqICAgICglVUJJRlNfTVNUX0xOVU0gKyAxKS4gQnV0IHdlIGNhbm5vdCB1cGRhdGUgdGhlIG1lZGlhCisJCSAqICAgIGJlY2F1c2Ugd2UgYXJlIGJlaW5nIG1vdW50ZWQgUi9PLiBXZSBoYXZlIHRvIGRlZmVyIHRoZQorCQkgKiAgICBvcGVyYXRpb24uCisJCSAqIDQuIEhvd2V2ZXIsIHRoaXMgbWFzdGVyIG5vZGUgKEBjLT5tc3Rfbm9kZSkgaXMgbWFya2VkIGFzCisJCSAqICAgIGNsZWFuIChzaW5jZSB0aGUgc3RlcCAxKS4gQW5kIGlmIHdlIGp1c3QgcmV0dXJuLCB0aGUKKwkJICogICAgbW91bnQgY29kZSB3aWxsIGJlIGNvbmZ1c2VkIGFuZCB3b24ndCByZWNvdmVyIHRoZSBtYXN0ZXIKKwkJICogICAgbm9kZSB3aGVuIGl0IGlzIHJlLW1vdW50ZXIgUi9XIGxhdGVyLgorCQkgKgorCQkgKiAgICBUaHVzLCB0byBmb3JjZSB0aGUgcmVjb3ZlcnkgYnkgbWFya2luZyB0aGUgbWFzdGVyIG5vZGUgYXMKKwkJICogICAgZGlydHkuCisJCSAqLworCQljLT5tc3Rfbm9kZS0+ZmxhZ3MgfD0gY3B1X3RvX2xlMzIoVUJJRlNfTVNUX0RJUlRZKTsKIAl9IGVsc2UgewogCQkvKiBXcml0ZSB0aGUgcmVjb3ZlcmVkIG1hc3RlciBub2RlICovCiAJCWMtPm1heF9zcW51bSA9IGxlNjRfdG9fY3B1KG1zdC0+Y2guc3FudW0pIC0gMTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlcGxheS5jIGIvZnMvdWJpZnMvcmVwbGF5LmMKaW5kZXggZWVkMGZjZi4uZDNkNmQzNiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvcmVwbGF5LmMKKysrIGIvZnMvdWJpZnMvcmVwbGF5LmMKQEAgLTU5LDYgKzU5LDcgQEAKICAqIEBuZXdfc2l6ZTogdHJ1bmNhdGlvbiBuZXcgc2l6ZQogICogQGZyZWU6IGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIGEgYnVkCiAgKiBAZGlydHk6IGFtb3VudCBvZiBkaXJ0eSBzcGFjZSBpbiBhIGJ1ZCBmcm9tIHBhZGRpbmcgYW5kIGRlbGV0aW9uIG5vZGVzCisgKiBAamhlYWQ6IGpvdXJuYWwgaGVhZCBudW1iZXIgb2YgdGhlIGJ1ZAogICoKICAqIFVCSUZTIGpvdXJuYWwgcmVwbGF5IG11c3QgY29tcGFyZSBub2RlIHNlcXVlbmNlIG51bWJlcnMsIHdoaWNoIG1lYW5zIGl0IG11c3QKICAqIGJ1aWxkIGEgdHJlZSBvZiBub2RlIGluZm9ybWF0aW9uIHRvIGluc2VydCBpbnRvIHRoZSBUTkMuCkBAIC04MCw2ICs4MSw3IEBACiAJCXN0cnVjdCB7CiAJCQlpbnQgZnJlZTsKIAkJCWludCBkaXJ0eTsKKwkJCWludCBqaGVhZDsKIAkJfTsKIAl9OwogfTsKQEAgLTE1OSw2ICsxNjEsMTEgQEAKIAkJZXJyID0gUFRSX0VSUihscCk7CiAJCWdvdG8gb3V0OwogCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgam91cm5hbCBoZWFkIHBvaW50cyB0byB0aGUgbGF0ZXN0IGJ1ZCAqLworCWVyciA9IHViaWZzX3didWZfc2Vla19ub2xvY2soJmMtPmpoZWFkc1tyLT5qaGVhZF0ud2J1Ziwgci0+bG51bSwKKwkJCQkgICAgIGMtPmxlYl9zaXplIC0gci0+ZnJlZSwgVUJJX1NIT1JUVEVSTSk7CisKIG91dDoKIAl1Ymlmc19yZWxlYXNlX2xwcm9wcyhjKTsKIAlyZXR1cm4gZXJyOwpAQCAtNjI3LDEwICs2MzQsNiBAQAogCXViaWZzX2Fzc2VydChzbGViLT5lbmRwdCAtIG9mZnMgPj0gdXNlZCk7CiAJdWJpZnNfYXNzZXJ0KHNsZWItPmVuZHB0ICUgYy0+bWluX2lvX3NpemUgPT0gMCk7CiAKLQlpZiAoc2xlYi0+ZW5kcHQgKyBjLT5taW5faW9fc2l6ZSA8PSBjLT5sZWJfc2l6ZSAmJiAhYy0+cm9fbW91bnQpCi0JCWVyciA9IHViaWZzX3didWZfc2Vla19ub2xvY2soJmMtPmpoZWFkc1tqaGVhZF0ud2J1ZiwgbG51bSwKLQkJCQkJICAgICBzbGViLT5lbmRwdCwgVUJJX1NIT1JUVEVSTSk7Ci0KIAkqZGlydHkgPSBzbGViLT5lbmRwdCAtIG9mZnMgLSB1c2VkOwogCSpmcmVlID0gYy0+bGViX3NpemUgLSBzbGViLT5lbmRwdDsKIApAQCAtNjUzLDEyICs2NTYsMTQgQEAKICAqIEBzcW51bTogc2VxdWVuY2UgbnVtYmVyCiAgKiBAZnJlZTogYW1vdW50IG9mIGZyZWUgc3BhY2UgaW4gYnVkCiAgKiBAZGlydHk6IGFtb3VudCBvZiBkaXJ0eSBzcGFjZSBmcm9tIHBhZGRpbmcgYW5kIGRlbGV0aW9uIG5vZGVzCisgKiBAamhlYWQ6IGpvdXJuYWwgaGVhZCBudW1iZXIgZm9yIHRoZSBidWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGluc2VydHMgYSByZWZlcmVuY2Ugbm9kZSB0byB0aGUgcmVwbGF5IHRyZWUgYW5kIHJldHVybnMgemVybwogICogaW4gY2FzZSBvZiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgaW5zZXJ0X3JlZl9ub2RlKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSwgaW50IG9mZnMsCi0JCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgc3FudW0sIGludCBmcmVlLCBpbnQgZGlydHkpCisJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgc3FudW0sIGludCBmcmVlLCBpbnQgZGlydHksCisJCQkgICBpbnQgamhlYWQpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwID0gJmMtPnJlcGxheV90cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCByZXBsYXlfZW50cnkgKnI7CkBAIC02ODgsNiArNjkzLDcgQEAKIAlyLT5mbGFncyA9IFJFUExBWV9SRUY7CiAJci0+ZnJlZSA9IGZyZWU7CiAJci0+ZGlydHkgPSBkaXJ0eTsKKwlyLT5qaGVhZCA9IGpoZWFkOwogCiAJcmJfbGlua19ub2RlKCZyLT5yYiwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJnItPnJiLCAmYy0+cmVwbGF5X3RyZWUpOwpAQCAtNzEyLDcgKzcxOCw3IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQllcnIgPSBpbnNlcnRfcmVmX25vZGUoYywgYi0+YnVkLT5sbnVtLCBiLT5idWQtPnN0YXJ0LCBiLT5zcW51bSwKLQkJCQkgICAgICBmcmVlLCBkaXJ0eSk7CisJCQkJICAgICAgZnJlZSwgZGlydHksIGItPmJ1ZC0+amhlYWQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCA2ZGRkOTk3Li4wNGFkMDdmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTEyNTcsMTIgKzEyNTcsMTIgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwllcnIgPSBhbGxvY193YnVmcyhjKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9jYnVmOworCiAJc3ByaW50ZihjLT5iZ3RfbmFtZSwgQkdUX05BTUVfUEFUVEVSTiwgYy0+dmkudWJpX251bSwgYy0+dmkudm9sX2lkKTsKIAlpZiAoIWMtPnJvX21vdW50KSB7Ci0JCWVyciA9IGFsbG9jX3didWZzKGMpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfY2J1ZjsKLQogCQkvKiBDcmVhdGUgYmFja2dyb3VuZCB0aHJlYWQgKi8KIAkJYy0+Ymd0ID0ga3RocmVhZF9jcmVhdGUodWJpZnNfYmdfdGhyZWFkLCBjLCAiJXMiLCBjLT5iZ3RfbmFtZSk7CiAJCWlmIChJU19FUlIoYy0+Ymd0KSkgewpAQCAtMTU2OCw2ICsxNTY4LDcgQEAKIAltdXRleF9sb2NrKCZjLT51bW91bnRfbXV0ZXgpOwogCWRiZ19zYXZlX3NwYWNlX2luZm8oYyk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDE7CisJYy0+cm9fbW91bnQgPSAwOwogCiAJZXJyID0gY2hlY2tfZnJlZV9zcGFjZShjKTsKIAlpZiAoZXJyKQpAQCAtMTYzMCwxMiArMTYzMSw2IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBhbGxvY193YnVmcyhjKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCXViaWZzX2NyZWF0ZV9idWRzX2xpc3RzKGMpOwotCiAJLyogQ3JlYXRlIGJhY2tncm91bmQgdGhyZWFkICovCiAJYy0+Ymd0ID0ga3RocmVhZF9jcmVhdGUodWJpZnNfYmdfdGhyZWFkLCBjLCAiJXMiLCBjLT5iZ3RfbmFtZSk7CiAJaWYgKElTX0VSUihjLT5iZ3QpKSB7CkBAIC0xNjcwLDE5ICsxNjY1LDMwIEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKKwlkYmdfZ2VuKCJyZS1tb3VudGVkIHJlYWQtd3JpdGUiKTsKKwljLT5yZW1vdW50aW5nX3J3ID0gMDsKKwogCWlmIChjLT5uZWVkX3JlY292ZXJ5KSB7CiAJCWMtPm5lZWRfcmVjb3ZlcnkgPSAwOwogCQl1Ymlmc19tc2coImRlZmVycmVkIHJlY292ZXJ5IGNvbXBsZXRlZCIpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIERvIG5vdCBydW4gdGhlIGRlYnVnZ2luZyBzcGFjZSBjaGVjayBpZiB0aGUgd2VyZSBkb2luZworCQkgKiByZWNvdmVyeSwgYmVjYXVzZSB3aGVuIHdlIHNhdmVkIHRoZSBpbmZvcm1hdGlvbiB3ZSBoYWQgdGhlCisJCSAqIGZpbGUtc3lzdGVtIGluIGEgc3RhdGUgd2hlcmUgdGhlIFROQyBhbmQgbHByb3BzIGhhcyBiZWVuCisJCSAqIG1vZGlmaWVkIGluIG1lbW9yeSwgYnV0IGFsbCB0aGUgSS9PIG9wZXJhdGlvbnMgKGluY2x1ZGluZyBhCisJCSAqIGNvbW1pdCkgd2VyZSBkZWZlcnJlZC4gU28gdGhlIGZpbGUtc3lzdGVtIHdhcyBpbgorCQkgKiAibm9uLWNvbW1pdHRlZCIgc3RhdGUuIE5vdyB0aGUgZmlsZS1zeXN0ZW0gaXMgaW4gY29tbWl0dGVkCisJCSAqIHN0YXRlLCBhbmQgb2YgY291cnNlIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSB3aWxsIGNoYW5nZQorCQkgKiBiZWNhdXNlLCBmb3IgZXhhbXBsZSwgdGhlIG9sZCBpbmRleCBzaXplIHdhcyBpbXByZWNpc2UuCisJCSAqLworCQllcnIgPSBkYmdfY2hlY2tfc3BhY2VfaW5mbyhjKTsKIAl9Ci0KLQlkYmdfZ2VuKCJyZS1tb3VudGVkIHJlYWQtd3JpdGUiKTsKLQljLT5yb19tb3VudCA9IDA7Ci0JYy0+cmVtb3VudGluZ19ydyA9IDA7Ci0JZXJyID0gZGJnX2NoZWNrX3NwYWNlX2luZm8oYyk7CiAJbXV0ZXhfdW5sb2NrKCZjLT51bW91bnRfbXV0ZXgpOwogCXJldHVybiBlcnI7CiAKIG91dDoKKwljLT5yb19tb3VudCA9IDE7CiAJdmZyZWUoYy0+b3JwaF9idWYpOwogCWMtPm9ycGhfYnVmID0gTlVMTDsKIAlpZiAoYy0+Ymd0KSB7CkBAIC0xNzMyLDcgKzE3MzgsNiBAQAogCWlmIChlcnIpCiAJCXViaWZzX3JvX21vZGUoYywgZXJyKTsKIAotCWZyZWVfd2J1ZnMoYyk7CiAJdmZyZWUoYy0+b3JwaF9idWYpOwogCWMtPm9ycGhfYnVmID0gTlVMTDsKIAlrZnJlZShjLT53cml0ZV9yZXNlcnZlX2J1Zik7CkBAIC0xNzYwLDEwICsxNzY1LDEyIEBACiAJICogb2YgdGhlIG1lZGlhLiBGb3IgZXhhbXBsZSwgdGhlcmUgd2lsbCBiZSBkaXJ0eSBpbm9kZXMgaWYgd2UgZmFpbGVkCiAJICogdG8gd3JpdGUgdGhlbSBiYWNrIGJlY2F1c2Ugb2YgSS9PIGVycm9ycy4KIAkgKi8KLQl1Ymlmc19hc3NlcnQoYXRvbWljX2xvbmdfcmVhZCgmYy0+ZGlydHlfcGdfY250KSA9PSAwKTsKLQl1Ymlmc19hc3NlcnQoYy0+YnVkZ19pZHhfZ3Jvd3RoID09IDApOwotCXViaWZzX2Fzc2VydChjLT5idWRnX2RkX2dyb3d0aCA9PSAwKTsKLQl1Ymlmc19hc3NlcnQoYy0+YnVkZ19kYXRhX2dyb3d0aCA9PSAwKTsKKwlpZiAoIWMtPnJvX2Vycm9yKSB7CisJCXViaWZzX2Fzc2VydChhdG9taWNfbG9uZ19yZWFkKCZjLT5kaXJ0eV9wZ19jbnQpID09IDApOworCQl1Ymlmc19hc3NlcnQoYy0+YnVkZ19pZHhfZ3Jvd3RoID09IDApOworCQl1Ymlmc19hc3NlcnQoYy0+YnVkZ19kZF9ncm93dGggPT0gMCk7CisJCXViaWZzX2Fzc2VydChjLT5idWRnX2RhdGFfZ3Jvd3RoID09IDApOworCX0KIAogCS8qCiAJICogVGhlICdjLT51bW91bnRfbG9jaycgcHJldmVudHMgcmFjZXMgYmV0d2VlbiBVQklGUyBtZW1vcnkgc2hyaW5rZXIKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3hhdHRyLmMgYi9mcy91Ymlmcy94YXR0ci5jCmluZGV4IGM3NDQwMGYuLjMyOTlmNDYgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3hhdHRyLmMKKysrIGIvZnMvdWJpZnMveGF0dHIuYwpAQCAtNTYsNiArNTYsNyBAQAogICovCiAKICNpbmNsdWRlICJ1Ymlmcy5oIgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsX3hhdHRyLmg+CkBAIC04MCw3ICs4MSw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbm9uZV9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbm9uZV9hZGRyZXNzX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBub25lX2ZpbGVfb3BlcmF0aW9uczsKIAogLyoqCkBAIC0xMzAsNyArMTMwLDcgQEAKIAl9CiAKIAkvKiBSZS1kZWZpbmUgYWxsIG9wZXJhdGlvbnMgdG8gYmUgIm5vdGhpbmciICovCi0JaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmbm9uZV9hZGRyZXNzX29wZXJhdGlvbnM7CisJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZW1wdHlfYW9wczsKIAlpbm9kZS0+aV9vcCA9ICZub25lX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfZm9wID0gJm5vbmVfZmlsZV9vcGVyYXRpb25zOwogCmRpZmYgLS1naXQgYS9mcy91ZnMvaW5vZGUuYyBiL2ZzL3Vmcy9pbm9kZS5jCmluZGV4IDI3YTRiYWIuLmU3NjU3NDMgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9pbm9kZS5jCisrKyBiL2ZzL3Vmcy9pbm9kZS5jCkBAIC03OCw3ICs3OCw3IEBACiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgZnJhZ21lbnQgZnJvbQotICogdGhlIGJlZ2luaW5nIG9mIHRoZSBmaWxlc3lzdGVtLgorICogdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZXN5c3RlbS4KICAqLwogCiBzdGF0aWMgdTY0IHVmc19mcmFnX21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBmcmFnLCBib29sIG5lZWRzX2xvY2spCmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IDc2OTNkNjIuLjM5MTVhZGUgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC00ODMsOSArNDgzLDkgQEAKIH0KIAogLyoKLSAqIERpZmZyZW50IHR5cGVzIG9mIFVGUyBob2xkIGZzX2NzdG90YWwgaW4gZGlmZmVyZW50Ci0gKiBwbGFjZXMsIGFuZCB1c2UgZGlmZnJlbnQgZGF0YSBzdHJ1Y3R1cmUgZm9yIGl0LgotICogVG8gbWFrZSB0aGluZ3Mgc2ltcGxpZXIgd2UganVzdCBjb3B5IGZzX2NzdG90YWwgdG8gdWZzX3NiX3ByaXZhdGVfaW5mbworICogRGlmZmVyZW50IHR5cGVzIG9mIFVGUyBob2xkIGZzX2NzdG90YWwgaW4gZGlmZmVyZW50CisgKiBwbGFjZXMsIGFuZCB1c2UgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlIGZvciBpdC4KKyAqIFRvIG1ha2UgdGhpbmdzIHNpbXBsZXIgd2UganVzdCBjb3B5IGZzX2NzdG90YWwgdG8gdWZzX3NiX3ByaXZhdGVfaW5mbwogICovCiBzdGF0aWMgdm9pZCB1ZnNfc2V0dXBfY3N0b3RhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpkaWZmIC0tZ2l0IGEvZnMvdWZzL3RydW5jYXRlLmMgYi9mcy91ZnMvdHJ1bmNhdGUuYwppbmRleCAxMTAxNDMwLi41ZjgyMWRiIDEwMDY0NAotLS0gYS9mcy91ZnMvdHJ1bmNhdGUuYworKysgYi9mcy91ZnMvdHJ1bmNhdGUuYwpAQCAtNDc5LDcgKzQ3OSw2IEBACiAJCQlicmVhazsKIAkJaWYgKElTX1NZTkMoaW5vZGUpICYmIChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpKQogCQkJdWZzX3N5bmNfaW5vZGUgKGlub2RlKTsKLQkJYmxrX2ZsdXNoX3BsdWcoY3VycmVudCk7CiAJCXlpZWxkKCk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCBhMTlhY2RiLi5mMWVmOTQ5IDEwMDY0NAotLS0gYS9mcy94YXR0ci5jCisrKyBiL2ZzL3hhdHRyLmMKQEAgLTY2Niw3ICs2NjYsNyBAQAogCWhhbmRsZXIgPSB4YXR0cl9yZXNvbHZlX25hbWUoZGVudHJ5LT5kX3NiLT5zX3hhdHRyLCAmbmFtZSk7CiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGhhbmRsZXItPnNldChkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCAwLCBoYW5kbGVyLT5mbGFncyk7CisJcmV0dXJuIGhhbmRsZXItPnNldChkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncywgaGFuZGxlci0+ZmxhZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDUyZGJkMTQuLjc5Y2UzOGIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTEyOTUsNyArMTI5NSw3IEBACiAgKiBJZiB0aGUgcHJpdmF0ZSBhcmd1bWVudCBpcyBub24tTlVMTCBfX3hmc19nZXRfYmxvY2tzIHNpZ25hbHMgdXMgdGhhdCB3ZQogICogbmVlZCB0byBpc3N1ZSBhIHRyYW5zYWN0aW9uIHRvIGNvbnZlcnQgdGhlIHJhbmdlIGZyb20gdW53cml0dGVuIHRvIHdyaXR0ZW4KICAqIGV4dGVudHMuICBJbiBjYXNlIHRoaXMgaXMgcmVndWxhciBzeW5jaHJvbm91cyBJL08gd2UganVzdCBjYWxsIHhmc19lbmRfaW8KLSAqIHRvIGRvIHRoaXMgYW5kIHdlIGFyZSBkb25lLiAgQnV0IGluIGNhc2UgdGhpcyB3YXMgYSBzdWNjZXNzZnVsbCBBSU8KKyAqIHRvIGRvIHRoaXMgYW5kIHdlIGFyZSBkb25lLiAgQnV0IGluIGNhc2UgdGhpcyB3YXMgYSBzdWNjZXNzZnVsIEFJTwogICogcmVxdWVzdCB0aGlzIGhhbmRsZXIgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIGZyb20gd2hpY2ggd2UKICAqIGNhbid0IHN0YXJ0IHRyYW5zYWN0aW9ucy4gIEluIHRoYXQgY2FzZSBvZmZsb2FkIHRoZSBJL08gY29tcGxldGlvbiB0bwogICogdGhlIHdvcmtxdWV1ZXMgd2UgYWxzbyB1c2UgZm9yIGJ1ZmZlcmVkIEkvTyBjb21wbGV0aW9uLgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYwppbmRleCA1OTZiYjJjLi45ZWY5ZWQyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAgKiBUaGUgdW5sb2NrZWQgY2hlY2sgaXMgc2FmZSBoZXJlIGJlY2F1c2UgaXQgb25seSBvY2N1cnMgd2hlbiB0aGVyZSBhcmUgbm90CiAgKiBiX2xydV9yZWYgY291bnRzIGxlZnQgb24gdGhlIGlub2RlIHVuZGVyIHRoZSBwYWctPnBhZ19idWZfbG9jay4gaXQgaXMgdGhlcmUKICAqIHRvIG9wdGltaXNlIHRoZSBzaHJpbmtlciByZW1vdmluZyB0aGUgYnVmZmVyIGZyb20gdGhlIExSVSBhbmQgY2FsbGluZwotICogeGZzX2J1Zl9mcmVlKCkuIGkuZS4gaXQgcmVtb3ZlcyBhbiB1bm5lY2Nlc3Nhcnkgcm91bmQgdHJpcCBvbiB0aGUKKyAqIHhmc19idWZfZnJlZSgpLiBpLmUuIGl0IHJlbW92ZXMgYW4gdW5uZWNlc3Nhcnkgcm91bmQgdHJpcCBvbiB0aGUKICAqIGJ0X2xydV9sb2NrLgogICovCiBTVEFUSUMgdm9pZApAQCAtMjkzLDcgKzI5Myw2IEBACiAJc2l6ZV90CQkJbmJ5dGVzLCBvZmZzZXQ7CiAJZ2ZwX3QJCQlnZnBfbWFzayA9IHhiX3RvX2dmcChmbGFncyk7CiAJdW5zaWduZWQgc2hvcnQJCXBhZ2VfY291bnQsIGk7Ci0JcGdvZmZfdAkJCWZpcnN0OwogCXhmc19vZmZfdAkJZW5kOwogCWludAkJCWVycm9yOwogCkBAIC0zMzMsNyArMzMyLDYgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJb2Zmc2V0ID0gYnAtPmJfb2Zmc2V0OwotCWZpcnN0ID0gYnAtPmJfZmlsZV9vZmZzZXQgPj4gUEFHRV9TSElGVDsKIAlicC0+Yl9mbGFncyB8PSBfWEJGX1BBR0VTOwogCiAJZm9yIChpID0gMDsgaSA8IGJwLT5iX3BhZ2VfY291bnQ7IGkrKykgewpAQCAtMzgwLDcgKzM3OCw3IEBACiB9CiAKIC8qCi0gKglNYXAgYnVmZmVyIGludG8ga2VybmVsIGFkZHJlc3Mtc3BhY2UgaWYgbmVzc2VjYXJ5LgorICoJTWFwIGJ1ZmZlciBpbnRvIGtlcm5lbCBhZGRyZXNzLXNwYWNlIGlmIG5lY2Vzc2FyeS4KICAqLwogU1RBVElDIGludAogX3hmc19idWZfbWFwX3BhZ2VzKApAQCAtNjU3LDggKzY1NSw2IEBACiAJeGZzX29mZl90CQlpb2ZmLAogCXNpemVfdAkJCWlzaXplKQogewotCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7Ci0KIAlpZiAoYmRpX3JlYWRfY29uZ2VzdGVkKHRhcmdldC0+YnRfYmRpKSkKIAkJcmV0dXJuOwogCkBAIC05MTksOCArOTE1LDYgQEAKIAogCWlmIChhdG9taWNfcmVhZCgmYnAtPmJfcGluX2NvdW50KSAmJiAoYnAtPmJfZmxhZ3MgJiBYQkZfU1RBTEUpKQogCQl4ZnNfbG9nX2ZvcmNlKGJwLT5iX3RhcmdldC0+YnRfbW91bnQsIDApOwotCWlmIChhdG9taWNfcmVhZCgmYnAtPmJfaW9fcmVtYWluaW5nKSkKLQkJYmxrX2ZsdXNoX3BsdWcoY3VycmVudCk7CiAJZG93bigmYnAtPmJfc2VtYSk7CiAJWEJfU0VUX09XTkVSKGJwKTsKIApAQCAtMTMwOSw4ICsxMzAzLDYgQEAKIHsKIAl0cmFjZV94ZnNfYnVmX2lvd2FpdChicCwgX1JFVF9JUF8pOwogCi0JaWYgKGF0b21pY19yZWFkKCZicC0+Yl9pb19yZW1haW5pbmcpKQotCQlibGtfZmx1c2hfcGx1ZyhjdXJyZW50KTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZicC0+Yl9pb3dhaXQpOwogCiAJdHJhY2VfeGZzX2J1Zl9pb3dhaXRfZG9uZShicCwgX1JFVF9JUF8pOwpAQCAtMTc0Nyw4ICsxNzM5LDggQEAKIAlkbyB7CiAJCWxvbmcJYWdlID0geGZzX2J1Zl9hZ2VfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCk7CiAJCWxvbmcJdG91dCA9IHhmc19idWZfdGltZXJfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCk7Ci0JCWludAljb3VudCA9IDA7CiAJCXN0cnVjdCBsaXN0X2hlYWQgdG1wOworCQlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCQlpZiAodW5saWtlbHkoZnJlZXppbmcoY3VycmVudCkpKSB7CiAJCQlzZXRfYml0KFhCVF9GT1JDRV9TTEVFUCwgJnRhcmdldC0+YnRfZmxhZ3MpOwpAQCAtMTc2NCwxNiArMTc1NiwxNSBAQAogCiAJCXhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwgYWdlKTsKIAkJbGlzdF9zb3J0KE5VTEwsICZ0bXAsIHhmc19idWZfY21wKTsKKworCQlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAJCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wKSkgewogCQkJc3RydWN0IHhmc19idWYgKmJwOwogCQkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0bXAsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7CiAJCQl4ZnNfYmRzdHJhdF9jYihicCk7Ci0JCQljb3VudCsrOwogCQl9Ci0JCWlmIChjb3VudCkKLQkJCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotCisJCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTE3OTMsNiArMTc4NCw3IEBACiAJaW50CQlwaW5jb3VudCA9IDA7CiAJTElTVF9IRUFEKHRtcF9saXN0KTsKIAlMSVNUX0hFQUQod2FpdF9saXN0KTsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNjb252ZXJ0ZF93b3JrcXVldWUpOwogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNkYXRhZF93b3JrcXVldWUpOwpAQCAtMTgwNyw2ICsxNzk5LDggQEAKIAkgKiB3ZSBkbyB0aGF0IGFmdGVyIGlzc3VpbmcgYWxsIHRoZSBJTy4KIAkgKi8KIAlsaXN0X3NvcnQoTlVMTCwgJnRtcF9saXN0LCB4ZnNfYnVmX2NtcCk7CisKKwlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXBfbGlzdCkpIHsKIAkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0bXBfbGlzdCwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CiAJCUFTU0VSVCh0YXJnZXQgPT0gYnAtPmJfdGFyZ2V0KTsKQEAgLTE4MTcsMTAgKzE4MTEsMTAgQEAKIAkJfQogCQl4ZnNfYmRzdHJhdF9jYihicCk7CiAJfQorCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiAKIAlpZiAod2FpdCkgewotCQkvKiBFeHBlZGl0ZSBhbmQgd2FpdCBmb3IgSU8gdG8gY29tcGxldGUuICovCi0JCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOworCQkvKiBXYWl0IGZvciBJTyB0byBjb21wbGV0ZS4gKi8KIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZ3YWl0X2xpc3QpKSB7CiAJCQlicCA9IGxpc3RfZmlyc3RfZW50cnkoJndhaXRfbGlzdCwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwppbmRleCA1MmFhZGZiLi5mNDIxM2JhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAogLyoKICAqIElmIHRoaXMgd2FzIGEgZGlyZWN0IG9yIHN5bmNocm9ub3VzIEkvTyB0aGF0IGZhaWxlZCAoc3VjaCBhcyBFTk9TUEMpIHRoZW4KLSAqIHBhcnQgb2YgdGhlIEkvTyBtYXkgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgdGhlIGVycm9yIG9jY3VyZWQuICBJbgorICogcGFydCBvZiB0aGUgSS9PIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB0byBkaXNrIGJlZm9yZSB0aGUgZXJyb3Igb2NjdXJyZWQuICBJbgogICogdGhpcyBjYXNlIHRoZSBvbi1kaXNrIGZpbGUgc2l6ZSBtYXkgaGF2ZSBiZWVuIGFkanVzdGVkIGJleW9uZCB0aGUgaW4tbWVtb3J5CiAgKiBmaWxlIHNpemUgYW5kIG5vdyBuZWVkcyB0byBiZSB0cnVuY2F0ZWQgYmFjay4KICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCmluZGV4IDlmZjdmYzYuLmRkMjE3ODQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAogLyoKICAqIElmIHRoZSBsaW51eCBpbm9kZSBpcyB2YWxpZCwgbWFyayBpdCBkaXJ0eS4KLSAqIFVzZWQgd2hlbiBjb21taXRpbmcgYSBkaXJ0eSBpbm9kZSBpbnRvIGEgdHJhbnNhY3Rpb24gc28gdGhhdAorICogVXNlZCB3aGVuIGNvbW1pdHRpbmcgYSBkaXJ0eSBpbm9kZSBpbnRvIGEgdHJhbnNhY3Rpb24gc28gdGhhdAogICogdGhlIGlub2RlIHdpbGwgZ2V0IHdyaXR0ZW4gYmFjayBieSB0aGUgbGludXggY29kZQogICovCiB2b2lkCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmMKaW5kZXggNTA4ZTA2Zi4uOWY3NmNjZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuYwpAQCAtMjgsNTMgKzI4LDQ5IEBACiAvKgogICogWEZTIGxvZ2dpbmcgZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBfX3hmc19wcmludGsoCiAJY29uc3QgY2hhcgkJKmxldmVsLAogCWNvbnN0IHN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCXN0cnVjdCB2YV9mb3JtYXQJKnZhZikKIHsKLQlpZiAobXAgJiYgbXAtPm1fZnNuYW1lKQotCQlyZXR1cm4gcHJpbnRrKCIlc1hGUyAoJXMpOiAlcFZcbiIsIGxldmVsLCBtcC0+bV9mc25hbWUsIHZhZik7Ci0JcmV0dXJuIHByaW50aygiJXNYRlM6ICVwVlxuIiwgbGV2ZWwsIHZhZik7CisJaWYgKG1wICYmIG1wLT5tX2ZzbmFtZSkgeworCQlwcmludGsoIiVzWEZTICglcyk6ICVwVlxuIiwgbGV2ZWwsIG1wLT5tX2ZzbmFtZSwgdmFmKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGsoIiVzWEZTOiAlcFZcbiIsIGxldmVsLCB2YWYpOwogfQogCi1pbnQgeGZzX3ByaW50aygKK3ZvaWQgeGZzX3ByaW50aygKIAljb25zdCBjaGFyCQkqbGV2ZWwsCiAJY29uc3Qgc3RydWN0IHhmc19tb3VudAkqbXAsCiAJY29uc3QgY2hhcgkJKmZtdCwgLi4uKQogewogCXN0cnVjdCB2YV9mb3JtYXQJdmFmOwogCXZhX2xpc3QJCQlhcmdzOwotCWludAkJCSByOwogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAogCXZhZi5mbXQgPSBmbXQ7CiAJdmFmLnZhID0gJmFyZ3M7CiAKLQlyID0gX194ZnNfcHJpbnRrKGxldmVsLCBtcCwgJnZhZik7CisJX194ZnNfcHJpbnRrKGxldmVsLCBtcCwgJnZhZik7CiAJdmFfZW5kKGFyZ3MpOwotCi0JcmV0dXJuIHI7CiB9CiAKICNkZWZpbmUgZGVmaW5lX3hmc19wcmludGtfbGV2ZWwoZnVuYywga2Vybl9sZXZlbCkJCVwKLWludCBmdW5jKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikJXAordm9pZCBmdW5jKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikJXAogewkJCQkJCQkJXAogCXN0cnVjdCB2YV9mb3JtYXQJdmFmOwkJCQlcCiAJdmFfbGlzdAkJCWFyZ3M7CQkJCVwKLQlpbnQJCQlyOwkJCQlcCiAJCQkJCQkJCVwKIAl2YV9zdGFydChhcmdzLCBmbXQpOwkJCQkJXAogCQkJCQkJCQlcCiAJdmFmLmZtdCA9IGZtdDsJCQkJCQlcCiAJdmFmLnZhID0gJmFyZ3M7CQkJCQkJXAogCQkJCQkJCQlcCi0JciA9IF9feGZzX3ByaW50ayhrZXJuX2xldmVsLCBtcCwgJnZhZik7CQkJXAorCV9feGZzX3ByaW50ayhrZXJuX2xldmVsLCBtcCwgJnZhZik7CQkJXAogCXZhX2VuZChhcmdzKTsJCQkJCQlcCi0JCQkJCQkJCVwKLQlyZXR1cm4gcjsJCQkJCQlcCiB9CQkJCQkJCQlcCiAKIGRlZmluZV94ZnNfcHJpbnRrX2xldmVsKHhmc19lbWVyZywgS0VSTl9FTUVSRyk7CkBAIC04OCw3ICs4NCw3IEBACiBkZWZpbmVfeGZzX3ByaW50a19sZXZlbCh4ZnNfZGVidWcsIEtFUk5fREVCVUcpOwogI2VuZGlmCiAKLWludAordm9pZAogeGZzX2FsZXJ0X3RhZygKIAljb25zdCBzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAlpbnQJCQlwYW5pY190YWcsCkBAIC05Nyw3ICs5Myw2IEBACiAJc3RydWN0IHZhX2Zvcm1hdAl2YWY7CiAJdmFfbGlzdAkJCWFyZ3M7CiAJaW50CQkJZG9fcGFuaWMgPSAwOwotCWludAkJCXI7CiAKIAlpZiAoeGZzX3BhbmljX21hc2sgJiYgKHhmc19wYW5pY19tYXNrICYgcGFuaWNfdGFnKSkgewogCQl4ZnNfcHJpbnRrKEtFUk5fQUxFUlQsIG1wLApAQCAtMTEwLDEyICsxMDUsMTAgQEAKIAl2YWYuZm10ID0gZm10OwogCXZhZi52YSA9ICZhcmdzOwogCi0JciA9IF9feGZzX3ByaW50ayhLRVJOX0FMRVJULCBtcCwgJnZhZik7CisJX194ZnNfcHJpbnRrKEtFUk5fQUxFUlQsIG1wLCAmdmFmKTsKIAl2YV9lbmQoYXJncyk7CiAKIAlCVUdfT04oZG9fcGFuaWMpOwotCi0JcmV0dXJuIHI7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuaAppbmRleCBlNzdmZmExLi5mMWIzZmMxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5oCkBAIC0zLDMyICszLDM0IEBACiAKIHN0cnVjdCB4ZnNfbW91bnQ7CiAKLWV4dGVybiBpbnQgeGZzX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsCitleHRlcm4gdm9pZCB4ZnNfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwotZXh0ZXJuIGludCB4ZnNfZW1lcmcoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorZXh0ZXJuIHZvaWQgeGZzX2VtZXJnKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIGludCB4ZnNfYWxlcnQoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorZXh0ZXJuIHZvaWQgeGZzX2FsZXJ0KGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIGludCB4ZnNfYWxlcnRfdGFnKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgdGFnLAorZXh0ZXJuIHZvaWQgeGZzX2FsZXJ0X3RhZyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IHRhZywKIAkJCSBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwotZXh0ZXJuIGludCB4ZnNfY3JpdChjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfY3JpdChjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKLWV4dGVybiBpbnQgeGZzX2Vycihjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfZXJyKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIGludCB4ZnNfd2Fybihjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfd2Fybihjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKLWV4dGVybiBpbnQgeGZzX25vdGljZShjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfbm90aWNlKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIGludCB4ZnNfaW5mbyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfaW5mbyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKIAogI2lmZGVmIERFQlVHCi1leHRlcm4gaW50IHhmc19kZWJ1Zyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfZGVidWcoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CiAjZWxzZQotI2RlZmluZSB4ZnNfZGVidWcobXAsIGZtdCwgLi4uKQkoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGVidWcoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQogI2VuZGlmCiAKIGV4dGVybiB2b2lkIGFzc2ZhaWwoY2hhciAqZXhwciwgY2hhciAqZiwgaW50IGwpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggMWJhNWM0NS4uYjM4ZTU4ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC04MTYsNzUgKzgxNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBYRlMgQUlMIHB1c2ggdGhyZWFkIHN1cHBvcnQKLSAqLwotdm9pZAoteGZzYWlsZF93YWtldXAoCi0Jc3RydWN0IHhmc19haWwJCSphaWxwLAotCXhmc19sc25fdAkJdGhyZXNob2xkX2xzbikKLXsKLQkvKiBvbmx5IGV2ZXIgbW92ZSB0aGUgdGFyZ2V0IGZvcndhcmRzICovCi0JaWYgKFhGU19MU05fQ01QKHRocmVzaG9sZF9sc24sIGFpbHAtPnhhX3RhcmdldCkgPiAwKSB7Ci0JCWFpbHAtPnhhX3RhcmdldCA9IHRocmVzaG9sZF9sc247Ci0JCXdha2VfdXBfcHJvY2VzcyhhaWxwLT54YV90YXNrKTsKLQl9Ci19Ci0KLVNUQVRJQyBpbnQKLXhmc2FpbGQoCi0Jdm9pZAkqZGF0YSkKLXsKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCA9IGRhdGE7Ci0JeGZzX2xzbl90CWxhc3RfcHVzaGVkX2xzbiA9IDA7Ci0JbG9uZwkJdG91dCA9IDA7IC8qIG1pbGxpc2Vjb25kcyAqLwotCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJLyoKLQkJICogZm9yIHNob3J0IHNsZWVwcyBpbmRpY2F0aW5nIGNvbmdlc3Rpb24sIGRvbid0IGFsbG93IHVzIHRvCi0JCSAqIGdldCB3b2tlbiBlYXJseS4gT3RoZXJ3aXNlIGFsbCB3ZSBkbyBpcyBiYW5nIG9uIHRoZSBBSUwgbG9jawotCQkgKiB3aXRob3V0IG1ha2luZyBwcm9ncmVzcy4KLQkJICovCi0JCWlmICh0b3V0ICYmIHRvdXQgPD0gMjApCi0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfS0lMTEFCTEUpOwotCQllbHNlCi0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQodG91dCA/Ci0JCQkJIG1zZWNzX3RvX2ppZmZpZXModG91dCkgOiBNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0KLQkJLyogc3dzdXNwICovCi0JCXRyeV90b19mcmVlemUoKTsKLQotCQlBU1NFUlQoYWlscC0+eGFfbW91bnQtPm1fbG9nKTsKLQkJaWYgKFhGU19GT1JDRURfU0hVVERPV04oYWlscC0+eGFfbW91bnQpKQotCQkJY29udGludWU7Ci0KLQkJdG91dCA9IHhmc2FpbGRfcHVzaChhaWxwLCAmbGFzdF9wdXNoZWRfbHNuKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0JLyogeGZzYWlsZCAqLwotCi1pbnQKLXhmc2FpbGRfc3RhcnQoCi0Jc3RydWN0IHhmc19haWwJKmFpbHApCi17Ci0JYWlscC0+eGFfdGFyZ2V0ID0gMDsKLQlhaWxwLT54YV90YXNrID0ga3RocmVhZF9ydW4oeGZzYWlsZCwgYWlscCwgInhmc2FpbGQvJXMiLAotCQkJCSAgICBhaWxwLT54YV9tb3VudC0+bV9mc25hbWUpOwotCWlmIChJU19FUlIoYWlscC0+eGFfdGFzaykpCi0JCXJldHVybiAtUFRSX0VSUihhaWxwLT54YV90YXNrKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAoteGZzYWlsZF9zdG9wKAotCXN0cnVjdCB4ZnNfYWlsCSphaWxwKQotewotCWt0aHJlYWRfc3RvcChhaWxwLT54YV90YXNrKTsKLX0KLQotCiAvKiBDYXRjaCBtaXNndWlkZWQgc291bHMgdGhhdCB0cnkgdG8gdXNlIHRoaXMgaW50ZXJmYWNlIG9uIFhGUyAqLwogU1RBVElDIHN0cnVjdCBpbm9kZSAqCiB4ZnNfZnNfYWxsb2NfaW5vZGUoCkBAIC0xMTkxLDIyICsxMTIyLDEyIEBACiAJCXJldHVybiAtZXJyb3I7CiAKIAlpZiAobGFwdG9wX21vZGUpIHsKLQkJaW50CXByZXZfc3luY19zZXEgPSBtcC0+bV9zeW5jX3NlcTsKLQogCQkvKgogCQkgKiBUaGUgZGlzayBtdXN0IGJlIGFjdGl2ZSBiZWNhdXNlIHdlJ3JlIHN5bmNpbmcuCiAJCSAqIFdlIHNjaGVkdWxlIHhmc3N5bmNkIG5vdyAobm93IHRoYXQgdGhlIGRpc2sgaXMKIAkJICogYWN0aXZlKSBpbnN0ZWFkIG9mIGxhdGVyICh3aGVuIGl0IG1pZ2h0IG5vdCBiZSkuCiAJCSAqLwotCQl3YWtlX3VwX3Byb2Nlc3MobXAtPm1fc3luY190YXNrKTsKLQkJLyoKLQkJICogV2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgc3luYyBpdGVyYXRpb24gdG8gY29tcGxldGUuCi0JCSAqIElmIHdlIGRvbid0LCB0aGUgZGlzayBhY3Rpdml0eSBjYXVzZWQgYnkgdGhlIHN5bmMKLQkJICogd2lsbCBjb21lIGFmdGVyIHRoZSBzeW5jIGlzIGNvbXBsZXRlZCwgYW5kIHRoYXQKLQkJICogdHJpZ2dlcnMgYW5vdGhlciBzeW5jIGZyb20gbGFwdG9wIG1vZGUuCi0JCSAqLwotCQl3YWl0X2V2ZW50KG1wLT5tX3dhaXRfc2luZ2xlX3N5bmNfdGFzaywKLQkJCQltcC0+bV9zeW5jX3NlcSAhPSBwcmV2X3N5bmNfc2VxKTsKKwkJZmx1c2hfZGVsYXllZF93b3JrX3N5bmMoJm1wLT5tX3N5bmNfd29yayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNDkwLDkgKzE0MTEsNiBAQAogCXNwaW5fbG9ja19pbml0KCZtcC0+bV9zYl9sb2NrKTsKIAltdXRleF9pbml0KCZtcC0+bV9ncm93bG9jayk7CiAJYXRvbWljX3NldCgmbXAtPm1fYWN0aXZlX3RyYW5zLCAwKTsKLQlJTklUX0xJU1RfSEVBRCgmbXAtPm1fc3luY19saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmbXAtPm1fc3luY19sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtcC0+bV93YWl0X3NpbmdsZV9zeW5jX3Rhc2spOwogCiAJbXAtPm1fc3VwZXIgPSBzYjsKIAlzYi0+c19mc19pbmZvID0gbXA7CkBAIC0xNzk5LDYgKzE3MTcsMzggQEAKIH0KIAogU1RBVElDIGludCBfX2luaXQKK3hmc19pbml0X3dvcmtxdWV1ZXModm9pZCkKK3sKKwkvKgorCSAqIG1heF9hY3RpdmUgaXMgc2V0IHRvIDggdG8gZ2l2ZSBlbm91Z2ggY29uY3VyZW5jeSB0byBhbGxvdworCSAqIG11bHRpcGxlIHdvcmsgb3BlcmF0aW9ucyBvbiBlYWNoIENQVSB0byBydW4uIFRoaXMgYWxsb3dzIG11bHRpcGxlCisJICogZmlsZXN5c3RlbXMgdG8gYmUgcnVubmluZyBzeW5jIHdvcmsgY29uY3VycmVudGx5LCBhbmQgc2NhbGVzIHdpdGgKKwkgKiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbS4KKwkgKi8KKwl4ZnNfc3luY2Rfd3EgPSBhbGxvY193b3JrcXVldWUoInhmc3N5bmNkIiwgV1FfQ1BVX0lOVEVOU0lWRSwgOCk7CisJaWYgKCF4ZnNfc3luY2Rfd3EpCisJCWdvdG8gb3V0OworCisJeGZzX2FpbF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgieGZzYWlsIiwgV1FfQ1BVX0lOVEVOU0lWRSwgOCk7CisJaWYgKCF4ZnNfYWlsX3dxKQorCQlnb3RvIG91dF9kZXN0cm95X3N5bmNkOworCisJcmV0dXJuIDA7CisKK291dF9kZXN0cm95X3N5bmNkOgorCWRlc3Ryb3lfd29ya3F1ZXVlKHhmc19zeW5jZF93cSk7CitvdXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK1NUQVRJQyB2b2lkCit4ZnNfZGVzdHJveV93b3JrcXVldWVzKHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUoeGZzX2FpbF93cSk7CisJZGVzdHJveV93b3JrcXVldWUoeGZzX3N5bmNkX3dxKTsKK30KKworU1RBVElDIGludCBfX2luaXQKIGluaXRfeGZzX2ZzKHZvaWQpCiB7CiAJaW50CQkJZXJyb3I7CkBAIC0xODEzLDEwICsxNzYzLDE0IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0geGZzX21ydV9jYWNoZV9pbml0KCk7CisJZXJyb3IgPSB4ZnNfaW5pdF93b3JrcXVldWVzKCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9kZXN0cm95X3pvbmVzOwogCisJZXJyb3IgPSB4ZnNfbXJ1X2NhY2hlX2luaXQoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2Rlc3Ryb3lfd3E7CisKIAllcnJvciA9IHhmc19maWxlc3RyZWFtX2luaXQoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X21ydV9jYWNoZV91bmluaXQ7CkBAIC0xODMzLDYgKzE3ODcsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2NsZWFudXBfcHJvY2ZzOwogCisJZXJyb3IgPSB4ZnNfaW5pdF93b3JrcXVldWVzKCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9zeXNjdGxfdW5yZWdpc3RlcjsKKwogCXZmc19pbml0cXVvdGEoKTsKIAogCWVycm9yID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmeGZzX2ZzX3R5cGUpOwpAQCAtMTg1MCw2ICsxODA4LDggQEAKIAl4ZnNfZmlsZXN0cmVhbV91bmluaXQoKTsKICBvdXRfbXJ1X2NhY2hlX3VuaW5pdDoKIAl4ZnNfbXJ1X2NhY2hlX3VuaW5pdCgpOworIG91dF9kZXN0cm95X3dxOgorCXhmc19kZXN0cm95X3dvcmtxdWV1ZXMoKTsKICBvdXRfZGVzdHJveV96b25lczoKIAl4ZnNfZGVzdHJveV96b25lcygpOwogIG91dDoKQEAgLTE4NjYsNiArMTgyNiw3IEBACiAJeGZzX2J1Zl90ZXJtaW5hdGUoKTsKIAl4ZnNfZmlsZXN0cmVhbV91bmluaXQoKTsKIAl4ZnNfbXJ1X2NhY2hlX3VuaW5pdCgpOworCXhmc19kZXN0cm95X3dvcmtxdWV1ZXMoKTsKIAl4ZnNfZGVzdHJveV96b25lcygpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKaW5kZXggNTk0Y2Q4Mi4uM2U4OThhNCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgInhmc19sb2cuaCIKICNpbmNsdWRlICJ4ZnNfaW51bS5oIgogI2luY2x1ZGUgInhmc190cmFucy5oIgorI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCkBAIC0zOSw2ICs0MCw4IEBACiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KIAorc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKnhmc19zeW5jZF93cTsJLyogc3luYyB3b3JrcXVldWUgKi8KKwogLyoKICAqIFRoZSBpbm9kZSBsb29rdXAgaXMgZG9uZSBpbiBiYXRjaGVzIHRvIGtlZXAgdGhlIGFtb3VudCBvZiBsb2NrIHRyYWZmaWMgYW5kCiAgKiByYWRpeCB0cmVlIGxvb2t1cHMgdG8gYSBtaW5pbXVtLiBUaGUgYmF0Y2ggc2l6ZSBpcyBhIHRyYWRlIG9mZiBiZXR3ZWVuCkBAIC00MDEsNyArNDA0LDcgQEAKIC8qCiAgKiBTZWNvbmQgc3RhZ2Ugb2YgYSBxdWllc2NlLiBUaGUgZGF0YSBpcyBhbHJlYWR5IHN5bmNlZCwgbm93IHdlIGhhdmUgdG8gdGFrZQogICogY2FyZSBvZiB0aGUgbWV0YWRhdGEuIE5ldyB0cmFuc2FjdGlvbnMgYXJlIGFscmVhZHkgYmxvY2tlZCwgc28gd2UgbmVlZCB0bwotICogd2FpdCBmb3IgYW55IHJlbWFpbmluZyB0cmFuc2FjdGlvbnMgdG8gZHJhaW4gb3V0IGJlZm9yZSBwcm9jZWRpbmcuCisgKiB3YWl0IGZvciBhbnkgcmVtYWluaW5nIHRyYW5zYWN0aW9ucyB0byBkcmFpbiBvdXQgYmVmb3JlIHByb2NlZWRpbmcuCiAgKi8KIHZvaWQKIHhmc19xdWllc2NlX2F0dHIoCkBAIC00MzEsNjIgKzQzNCwxMiBAQAogCXhmc191bm1vdW50ZnNfd3JpdGVzYihtcCk7CiB9CiAKLS8qCi0gKiBFbnF1ZXVlIGEgd29yayBpdGVtIHRvIGJlIHBpY2tlZCB1cCBieSB0aGUgdmZzIHhmc3N5bmNkIHRocmVhZC4KLSAqIERvaW5nIHRoaXMgaGFzIHR3byBhZHZhbnRhZ2VzOgotICogLSBJdCBzYXZlcyBvbiBzdGFjayBzcGFjZSwgd2hpY2ggaXMgdGlnaHQgaW4gY2VydGFpbiBzaXR1YXRpb25zCi0gKiAtIEl0IGNhbiBiZSB1c2VkICh3aXRoIGNhcmUpIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIGRlYWRsb2Nrcy4KLSAqIEZsdXNoaW5nIHdoaWxlIGFsbG9jYXRpbmcgaW4gYSBmdWxsIGZpbGVzeXN0ZW0gcmVxdWlyZXMgYm90aC4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19zeW5jZF9xdWV1ZV93b3JrKAotCXN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCXZvaWQJCSpkYXRhLAotCXZvaWQJCSgqc3luY2VyKShzdHJ1Y3QgeGZzX21vdW50ICosIHZvaWQgKiksCi0Jc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24pCitzdGF0aWMgdm9pZAoreGZzX3N5bmNkX3F1ZXVlX3N5bmMoCisJc3RydWN0IHhmc19tb3VudCAgICAgICAgKm1wKQogewotCXN0cnVjdCB4ZnNfc3luY193b3JrICp3b3JrOwotCi0Jd29yayA9IGttZW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCB4ZnNfc3luY193b3JrKSwgS01fU0xFRVApOwotCUlOSVRfTElTVF9IRUFEKCZ3b3JrLT53X2xpc3QpOwotCXdvcmstPndfc3luY2VyID0gc3luY2VyOwotCXdvcmstPndfZGF0YSA9IGRhdGE7Ci0Jd29yay0+d19tb3VudCA9IG1wOwotCXdvcmstPndfY29tcGxldGlvbiA9IGNvbXBsZXRpb247Ci0Jc3Bpbl9sb2NrKCZtcC0+bV9zeW5jX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJndvcmstPndfbGlzdCwgJm1wLT5tX3N5bmNfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJm1wLT5tX3N5bmNfbG9jayk7Ci0Jd2FrZV91cF9wcm9jZXNzKG1wLT5tX3N5bmNfdGFzayk7Ci19Ci0KLS8qCi0gKiBGbHVzaCBkZWxheWVkIGFsbG9jYXRlIGRhdGEsIGF0dGVtcHRpbmcgdG8gZnJlZSB1cCByZXNlcnZlZCBzcGFjZQotICogZnJvbSBleGlzdGluZyBhbGxvY2F0aW9ucy4gIEF0IHRoaXMgcG9pbnQgYSBuZXcgYWxsb2NhdGlvbiBhdHRlbXB0Ci0gKiBoYXMgZmFpbGVkIHdpdGggRU5PU1BDIGFuZCB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygc2NyYXRjaGluZyBvdXIKLSAqIGhlYWRzLCBsb29raW5nIGFib3V0IGZvciBtb3JlIHJvb20uLi4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19mbHVzaF9pbm9kZXNfd29yaygKLQlzdHJ1Y3QgeGZzX21vdW50ICptcCwKLQl2b2lkCQkqYXJnKQotewotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBhcmc7Ci0JeGZzX3N5bmNfZGF0YShtcCwgU1lOQ19UUllMT0NLKTsKLQl4ZnNfc3luY19kYXRhKG1wLCBTWU5DX1RSWUxPQ0sgfCBTWU5DX1dBSVQpOwotCWlwdXQoaW5vZGUpOwotfQotCi12b2lkCi14ZnNfZmx1c2hfaW5vZGVzKAotCXhmc19pbm9kZV90CSppcCkKLXsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gVkZTX0koaXApOwotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRpb24pOwotCi0JaWdyYWIoaW5vZGUpOwotCXhmc19zeW5jZF9xdWV1ZV93b3JrKGlwLT5pX21vdW50LCBpbm9kZSwgeGZzX2ZsdXNoX2lub2Rlc193b3JrLCAmY29tcGxldGlvbik7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmY29tcGxldGlvbik7Ci0JeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgWEZTX0xPR19TWU5DKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoeGZzX3N5bmNkX3dxLCAmbXAtPm1fc3luY193b3JrLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoeGZzX3N5bmNkX2NlbnRpc2VjcyAqIDEwKSk7CiB9CiAKIC8qCkBAIC00OTYsOSArNDQ5LDEwIEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfc3luY193b3JrZXIoCi0Jc3RydWN0IHhmc19tb3VudCAqbXAsCi0Jdm9pZAkJKnVudXNlZCkKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CisJc3RydWN0IHhmc19tb3VudCAqbXAgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAorCQkJCQlzdHJ1Y3QgeGZzX21vdW50LCBtX3N5bmNfd29yayk7CiAJaW50CQllcnJvcjsKIAogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKQEAgLTUwOCw3MyArNDYyLDEwNiBAQAogCQkJZXJyb3IgPSB4ZnNfZnNfbG9nX2R1bW15KG1wKTsKIAkJZWxzZQogCQkJeGZzX2xvZ19mb3JjZShtcCwgMCk7Ci0JCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CiAJCWVycm9yID0geGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7CisKKwkJLyogc3RhcnQgcHVzaGluZyBhbGwgdGhlIG1ldGFkYXRhIHRoYXQgaXMgY3VycmVudGx5IGRpcnR5ICovCisJCXhmc19haWxfcHVzaF9hbGwobXAtPm1fYWlsKTsKIAl9Ci0JbXAtPm1fc3luY19zZXErKzsKLQl3YWtlX3VwKCZtcC0+bV93YWl0X3NpbmdsZV9zeW5jX3Rhc2spOworCisJLyogcXVldWUgdXMgdXAgYWdhaW4gKi8KKwl4ZnNfc3luY2RfcXVldWVfc3luYyhtcCk7CiB9CiAKLVNUQVRJQyBpbnQKLXhmc3N5bmNkKAotCXZvaWQJCQkqYXJnKQorLyoKKyAqIFF1ZXVlIGEgbmV3IGlub2RlIHJlY2xhaW0gcGFzcyBpZiB0aGVyZSBhcmUgcmVjbGFpbWFibGUgaW5vZGVzIGFuZCB0aGVyZQorICogaXNuJ3QgYSByZWNsYWltIHBhc3MgYWxyZWFkeSBpbiBwcm9ncmVzcy4gQnkgZGVmYXVsdCBpdCBydW5zIGV2ZXJ5IDVzIGJhc2VkCisgKiBvbiB0aGUgeGZzIHN5bmNkIHdvcmsgZGVmYXVsdCBvZiAzMHMuIFBlcmhhcHMgdGhpcyBzaG91bGQgaGF2ZSBpdCdzIG93bgorICogdHVuYWJsZSwgYnV0IHRoYXQgY2FuIGJlIGRvbmUgaWYgdGhpcyBtZXRob2QgcHJvdmVzIHRvIGJlIGluZWZmZWN0aXZlIG9yIHRvbworICogYWdncmVzc2l2ZS4KKyAqLworc3RhdGljIHZvaWQKK3hmc19zeW5jZF9xdWV1ZV9yZWNsYWltKAorCXN0cnVjdCB4ZnNfbW91bnQgICAgICAgICptcCkKIHsKLQlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGFyZzsKLQlsb25nCQkJdGltZWxlZnQ7Ci0JeGZzX3N5bmNfd29ya190CQkqd29yaywgKm47Ci0JTElTVF9IRUFECQkodG1wKTsKIAotCXNldF9mcmVlemFibGUoKTsKLQl0aW1lbGVmdCA9IHhmc19zeW5jZF9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKTsKLQlmb3IgKDs7KSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZtcC0+bV9zeW5jX2xpc3QpKQotCQkJdGltZWxlZnQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZWxlZnQpOwotCQkvKiBzd3N1c3AgKi8KLQkJdHJ5X3RvX2ZyZWV6ZSgpOwotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpICYmIGxpc3RfZW1wdHkoJm1wLT5tX3N5bmNfbGlzdCkpCi0JCQlicmVhazsKKwkvKgorCSAqIFdlIGNhbiBoYXZlIGlub2RlcyBlbnRlciByZWNsYWltIGFmdGVyIHdlJ3ZlIHNodXQgZG93biB0aGUgc3luY2QKKwkgKiB3b3JrcXVldWUgZHVyaW5nIHVubW91bnQsIHNvIGRvbid0IGFsbG93IHJlY2xhaW0gd29yayB0byBiZSBxdWV1ZWQKKwkgKiBkdXJpbmcgdW5tb3VudC4KKwkgKi8KKwlpZiAoIShtcC0+bV9zdXBlci0+c19mbGFncyAmIE1TX0FDVElWRSkpCisJCXJldHVybjsKIAotCQlzcGluX2xvY2soJm1wLT5tX3N5bmNfbG9jayk7Ci0JCS8qCi0JCSAqIFdlIGNhbiBnZXQgd29rZW4gYnkgbGFwdG9wIG1vZGUsIHRvIGRvIGEgc3luYyAtCi0JCSAqIHRoYXQncyB0aGUgKG9ubHkhKSBjYXNlIHdoZXJlIHRoZSBsaXN0IHdvdWxkIGJlCi0JCSAqIGVtcHR5IHdpdGggdGltZSByZW1haW5pbmcuCi0JCSAqLwotCQlpZiAoIXRpbWVsZWZ0IHx8IGxpc3RfZW1wdHkoJm1wLT5tX3N5bmNfbGlzdCkpIHsKLQkJCWlmICghdGltZWxlZnQpCi0JCQkJdGltZWxlZnQgPSB4ZnNfc3luY2RfY2VudGlzZWNzICoKLQkJCQkJCQltc2Vjc190b19qaWZmaWVzKDEwKTsKLQkJCUlOSVRfTElTVF9IRUFEKCZtcC0+bV9zeW5jX3dvcmsud19saXN0KTsKLQkJCWxpc3RfYWRkX3RhaWwoJm1wLT5tX3N5bmNfd29yay53X2xpc3QsCi0JCQkJCSZtcC0+bV9zeW5jX2xpc3QpOwotCQl9Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJm1wLT5tX3N5bmNfbGlzdCwgJnRtcCk7Ci0JCXNwaW5fdW5sb2NrKCZtcC0+bV9zeW5jX2xvY2spOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3b3JrLCBuLCAmdG1wLCB3X2xpc3QpIHsKLQkJCSgqd29yay0+d19zeW5jZXIpKG1wLCB3b3JrLT53X2RhdGEpOwotCQkJbGlzdF9kZWwoJndvcmstPndfbGlzdCk7Ci0JCQlpZiAod29yayA9PSAmbXAtPm1fc3luY193b3JrKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHdvcmstPndfY29tcGxldGlvbikKLQkJCQljb21wbGV0ZSh3b3JrLT53X2NvbXBsZXRpb24pOwotCQkJa21lbV9mcmVlKHdvcmspOwotCQl9CisJcmN1X3JlYWRfbG9jaygpOworCWlmIChyYWRpeF90cmVlX3RhZ2dlZCgmbXAtPm1fcGVyYWdfdHJlZSwgWEZTX0lDSV9SRUNMQUlNX1RBRykpIHsKKwkJcXVldWVfZGVsYXllZF93b3JrKHhmc19zeW5jZF93cSwgJm1wLT5tX3JlY2xhaW1fd29yaywKKwkJCW1zZWNzX3RvX2ppZmZpZXMoeGZzX3N5bmNkX2NlbnRpc2VjcyAvIDYgKiAxMCkpOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KIAotCXJldHVybiAwOworLyoKKyAqIFRoaXMgaXMgYSBmYXN0IHBhc3Mgb3ZlciB0aGUgaW5vZGUgY2FjaGUgdG8gdHJ5IHRvIGdldCByZWNsYWltIG1vdmluZyBvbiBhcworICogbWFueSBpbm9kZXMgYXMgcG9zc2libGUgaW4gYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS4gSXQga2lja3MgaXRzZWxmIGV2ZXJ5IGZldworICogc2Vjb25kcywgYXMgd2VsbCBhcyBiZWluZyBraWNrZWQgYnkgdGhlIGlub2RlIGNhY2hlIHNocmlua2VyIHdoZW4gbWVtb3J5CisgKiBnb2VzIGxvdy4gSXQgc2NhbnMgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhdm9pZGluZyBsb2NrZWQgaW5vZGVzIG9yIHRob3NlCisgKiBhbHJlYWR5IGJlaW5nIGZsdXNoZWQsIGFuZCBvbmNlIGRvbmUgc2NoZWR1bGVzIGEgZnV0dXJlIHBhc3MuCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfcmVjbGFpbV93b3JrZXIoCisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB4ZnNfbW91bnQgKm1wID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKKwkJCQkJc3RydWN0IHhmc19tb3VudCwgbV9yZWNsYWltX3dvcmspOworCisJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBTWU5DX1RSWUxPQ0spOworCXhmc19zeW5jZF9xdWV1ZV9yZWNsYWltKG1wKTsKK30KKworLyoKKyAqIEZsdXNoIGRlbGF5ZWQgYWxsb2NhdGUgZGF0YSwgYXR0ZW1wdGluZyB0byBmcmVlIHVwIHJlc2VydmVkIHNwYWNlCisgKiBmcm9tIGV4aXN0aW5nIGFsbG9jYXRpb25zLiAgQXQgdGhpcyBwb2ludCBhIG5ldyBhbGxvY2F0aW9uIGF0dGVtcHQKKyAqIGhhcyBmYWlsZWQgd2l0aCBFTk9TUEMgYW5kIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBzY3JhdGNoaW5nIG91cgorICogaGVhZHMsIGxvb2tpbmcgYWJvdXQgZm9yIG1vcmUgcm9vbS4KKyAqCisgKiBRdWV1ZSBhIG5ldyBkYXRhIGZsdXNoIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5IGluIHByb2dyZXNzIGFuZAorICogd2FpdCBmb3IgY29tcGxldGlvbiBvZiB0aGUgZmx1c2guIFRoaXMgbWVhbnMgdGhhdCB3ZSBvbmx5IGV2ZXIgaGF2ZSBvbmUKKyAqIGlub2RlIGZsdXNoIGluIHByb2dyZXNzIG5vIG1hdHRlciBob3cgbWFueSBFTk9TUEMgZXZlbnRzIGFyZSBvY2N1cnJpbmcgYW5kCisgKiBzbyB3aWxsIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGJvZ2dpbmcgZG93biBkdWUgdG8gZXZlcnkgY29uY3VycmVudAorICogRU5PU1BDIGV2ZW50IHNjYW5uaW5nIGFsbCB0aGUgYWN0aXZlIGlub2RlcyBpbiB0aGUgc3lzdGVtIGZvciB3cml0ZWJhY2suCisgKi8KK3ZvaWQKK3hmc19mbHVzaF9pbm9kZXMoCisJc3RydWN0IHhmc19pbm9kZQkqaXApCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKworCXF1ZXVlX3dvcmsoeGZzX3N5bmNkX3dxLCAmbXAtPm1fZmx1c2hfd29yayk7CisJZmx1c2hfd29ya19zeW5jKCZtcC0+bV9mbHVzaF93b3JrKTsKK30KKworU1RBVElDIHZvaWQKK3hmc19mbHVzaF93b3JrZXIoCisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB4ZnNfbW91bnQgKm1wID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCXN0cnVjdCB4ZnNfbW91bnQsIG1fZmx1c2hfd29yayk7CisKKwl4ZnNfc3luY19kYXRhKG1wLCBTWU5DX1RSWUxPQ0spOworCXhmc19zeW5jX2RhdGEobXAsIFNZTkNfVFJZTE9DSyB8IFNZTkNfV0FJVCk7CiB9CiAKIGludAogeGZzX3N5bmNkX2luaXQoCiAJc3RydWN0IHhmc19tb3VudAkqbXApCiB7Ci0JbXAtPm1fc3luY193b3JrLndfc3luY2VyID0geGZzX3N5bmNfd29ya2VyOwotCW1wLT5tX3N5bmNfd29yay53X21vdW50ID0gbXA7Ci0JbXAtPm1fc3luY193b3JrLndfY29tcGxldGlvbiA9IE5VTEw7Ci0JbXAtPm1fc3luY190YXNrID0ga3RocmVhZF9ydW4oeGZzc3luY2QsIG1wLCAieGZzc3luY2QvJXMiLCBtcC0+bV9mc25hbWUpOwotCWlmIChJU19FUlIobXAtPm1fc3luY190YXNrKSkKLQkJcmV0dXJuIC1QVFJfRVJSKG1wLT5tX3N5bmNfdGFzayk7CisJSU5JVF9XT1JLKCZtcC0+bV9mbHVzaF93b3JrLCB4ZnNfZmx1c2hfd29ya2VyKTsKKwlJTklUX0RFTEFZRURfV09SSygmbXAtPm1fc3luY193b3JrLCB4ZnNfc3luY193b3JrZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZtcC0+bV9yZWNsYWltX3dvcmssIHhmc19yZWNsYWltX3dvcmtlcik7CisKKwl4ZnNfc3luY2RfcXVldWVfc3luYyhtcCk7CisJeGZzX3N5bmNkX3F1ZXVlX3JlY2xhaW0obXApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4Miw3ICs1NjksOSBAQAogeGZzX3N5bmNkX3N0b3AoCiAJc3RydWN0IHhmc19tb3VudAkqbXApCiB7Ci0Ja3RocmVhZF9zdG9wKG1wLT5tX3N5bmNfdGFzayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtcC0+bV9zeW5jX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbXAtPm1fcmVjbGFpbV93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZtcC0+bV9mbHVzaF93b3JrKTsKIH0KIAogdm9pZApAQCAtNjAxLDYgKzU5MCwxMCBAQAogCQkJCVhGU19JTk9fVE9fQUdOTyhpcC0+aV9tb3VudCwgaXAtPmlfaW5vKSwKIAkJCQlYRlNfSUNJX1JFQ0xBSU1fVEFHKTsKIAkJc3Bpbl91bmxvY2soJmlwLT5pX21vdW50LT5tX3BlcmFnX2xvY2spOworCisJCS8qIHNjaGVkdWxlIHBlcmlvZGljIGJhY2tncm91bmQgaW5vZGUgcmVjbGFpbSAqLworCQl4ZnNfc3luY2RfcXVldWVfcmVjbGFpbShpcC0+aV9tb3VudCk7CisKIAkJdHJhY2VfeGZzX3BlcmFnX3NldF9yZWNsYWltKGlwLT5pX21vdW50LCBwYWctPnBhZ19hZ25vLAogCQkJCQkJCS0xLCBfUkVUX0lQXyk7CiAJfQpAQCAtOTMzLDYgKzkyNiw3IEBACiAJCQkJCVhGU19MT09LVVBfQkFUQ0gsCiAJCQkJCVhGU19JQ0lfUkVDTEFJTV9UQUcpOwogCQkJaWYgKCFucl9mb3VuZCkgeworCQkJCWRvbmUgPSAxOwogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTAxNyw3ICsxMDExLDEzIEBACiB9CiAKIC8qCi0gKiBTaHJpbmtlciBpbmZyYXN0cnVjdHVyZS4KKyAqIElub2RlIGNhY2hlIHNocmlua2VyLgorICoKKyAqIFdoZW4gY2FsbGVkIHdlIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGEgYmFja2dyb3VuZCAoZmFzdCkgaW5vZGUgcmVjbGFpbSBpbgorICogcHJvZ3Jlc3MsIHdoaWxlIHdlIHdpbGwgdGhyb3R0bGUgdGhlIHNwZWVkIG9mIHJlY2xhaW0gdmlhIGRvaWluZyBzeW5jaHJvbm91cworICogcmVjbGFpbSBvZiBpbm9kZXMuIFRoYXQgbWVhbnMgaWYgd2UgY29tZSBhY3Jvc3MgZGlydHkgaW5vZGVzLCB3ZSB3YWl0IGZvcgorICogdGhlbSB0byBiZSBjbGVhbmVkLCB3aGljaCB3ZSBob3BlIHdpbGwgbm90IGJlIHZlcnkgbG9uZyBkdWUgdG8gdGhlCisgKiBiYWNrZ3JvdW5kIHdhbGtlciBoYXZpbmcgYWxyZWFkeSBraWNrZWQgdGhlIElPIG9mZiBvbiB0aG9zZSBkaXJ0eSBpbm9kZXMuCiAgKi8KIHN0YXRpYyBpbnQKIHhmc19yZWNsYWltX2lub2RlX3NocmluaygKQEAgLTEwMzIsMTAgKzEwMzIsMTUgQEAKIAogCW1wID0gY29udGFpbmVyX29mKHNocmluaywgc3RydWN0IHhmc19tb3VudCwgbV9pbm9kZV9zaHJpbmspOwogCWlmIChucl90b19zY2FuKSB7CisJCS8qIGtpY2sgYmFja2dyb3VuZCByZWNsYWltZXIgYW5kIHB1c2ggdGhlIEFJTCAqLworCQl4ZnNfc3luY2RfcXVldWVfcmVjbGFpbShtcCk7CisJCXhmc19haWxfcHVzaF9hbGwobXAtPm1fYWlsKTsKKwogCQlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX0ZTKSkKIAkJCXJldHVybiAtMTsKIAotCQl4ZnNfcmVjbGFpbV9pbm9kZXNfYWcobXAsIFNZTkNfVFJZTE9DSywgJm5yX3RvX3NjYW4pOworCQl4ZnNfcmVjbGFpbV9pbm9kZXNfYWcobXAsIFNZTkNfVFJZTE9DSyB8IFNZTkNfV0FJVCwKKwkJCQkJJm5yX3RvX3NjYW4pOwogCQkvKiB0ZXJtaW5hdGUgaWYgd2UgZG9uJ3QgZXhoYXVzdCB0aGUgc2NhbiAqLwogCQlpZiAobnJfdG9fc2NhbiA+IDApCiAJCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKaW5kZXggMzJiYTY2Mi4uZTNhNmFkMiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaApAQCAtMzIsNiArMzIsOCBAQAogI2RlZmluZSBTWU5DX1dBSVQJCTB4MDAwMQkvKiB3YWl0IGZvciBpL28gdG8gY29tcGxldGUgKi8KICNkZWZpbmUgU1lOQ19UUllMT0NLCQkweDAwMDIgIC8qIG9ubHkgdHJ5IHRvIGxvY2sgaW5vZGVzICovCiAKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqeGZzX3N5bmNkX3dxOwkvKiBzeW5jIHdvcmtxdWV1ZSAqLworCiBpbnQgeGZzX3N5bmNkX2luaXQoc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZCB4ZnNfc3luY2Rfc3RvcChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwppbmRleCA3ZTI0MTY0Li42ZmEyMTQ2IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCkBAIC02MDAsNyArNjAwLDcgQEAKIAogCS8qCiAJICogUmVzZXJ2YXRpb24gY291bnRlcnMgYXJlIGRlZmluZWQgYXMgcmVzZXJ2YXRpb24gcGx1cyBjdXJyZW50IHVzYWdlCi0JICogdG8gYXZvaWQgaGF2aW5nIHRvIGFkZCBldmVyeXRpbWUuCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIGFkZCBldmVyeSB0aW1lLgogCSAqLwogCWRxcC0+cV9yZXNfYmNvdW50ID0gYmU2NF90b19jcHUoZGRxcC0+ZF9iY291bnQpOwogCWRxcC0+cV9yZXNfaWNvdW50ID0gYmU2NF90b19jcHUoZGRxcC0+ZF9pY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IDI1NGVlMDYuLjY5MjI4YWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTQ2MSwxMiArNDYxLDEwIEBACiAJc3RydWN0IHhmc19xdW90YWluZm8JKnEgPSBtcC0+bV9xdW90YWluZm87CiAJaW50CQkJcmVjbDsKIAlzdHJ1Y3QgeGZzX2RxdW90CSpkcXA7Ci0JaW50CQkJbml0ZXJzOwogCWludAkJCWVycm9yOwogCiAJaWYgKCFxKQogCQlyZXR1cm4gMDsKLQluaXRlcnMgPSAwOwogYWdhaW46CiAJbXV0ZXhfbG9jaygmcS0+cWlfZHFsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHFwLCAmcS0+cWlfZHFsaXN0LCBxX21wbGlzdCkgewpAQCAtMTMxNCwxNCArMTMxMiw5IEBACiB7CiAJeGZzX2J1Zl90CSpicDsKIAlpbnQJCWVycm9yOwotCWludAkJbm90Y29tbWl0dGVkOwotCWludAkJaW5jcjsKIAlpbnQJCXR5cGU7CiAKIAlBU1NFUlQoYmxrY250ID4gMCk7Ci0Jbm90Y29tbWl0dGVkID0gMDsKLQlpbmNyID0gKGJsa2NudCA+IFhGU19RTV9NQVhfRFFDTFVTVEVSX0xPR1NaKSA/Ci0JCVhGU19RTV9NQVhfRFFDTFVTVEVSX0xPR1NaIDogYmxrY250OwogCXR5cGUgPSBmbGFncyAmIFhGU19RTU9QVF9VUVVPVEEgPyBYRlNfRFFfVVNFUiA6CiAJCShmbGFncyAmIFhGU19RTU9QVF9QUVVPVEEgPyBYRlNfRFFfUFJPSiA6IFhGU19EUV9HUk9VUCk7CiAJZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5oIGIvZnMveGZzL3F1b3RhL3hmc19xbS5oCmluZGV4IGM5NDQ2ZjEuLjU2N2IyOWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uaAorKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKQEAgLTY1LDExICs2NSw2IEBACiAgKiBibG9jayBpbiB0aGUgZHF1b3QveHFtIGNvZGUuCiAgKi8KICNkZWZpbmUgWEZTX0RRVU9UX0NMVVNURVJfU0laRV9GU0IJKHhmc19maWxibGtzX3QpMQotLyoKLSAqIFdoZW4gZG9pbmcgYSBxdW90YWNoZWNrLCB3ZSBsb2cgZHF1b3QgY2x1c3RlcnMgb2YgdGhpcyBtYW55IEZTQnMgYXQgbW9zdAotICogaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFdlIGRvbid0IHdhbnQgdG8gYXNrIGZvciB0b28gaHVnZSBhIGxvZyByZXNlcnZhdGlvbi4KLSAqLwotI2RlZmluZSBYRlNfUU1fTUFYX0RRQ0xVU1RFUl9MT0dTWgkzCiAKIHR5cGVkZWYgeGZzX2RxaGFzaF90CXhmc19kcWxpc3RfdDsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggNzc0ZDdlYy4uYTBhODI5YSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJICovCiAJCWlmIChxdW90YW9uZGlzayAmJiAhWEZTX1FNX05FRURfUVVPVEFDSEVDSyhtcCkpIHsKIAkJCS8qCi0JCQkgKiBJZiBhbiBlcnJvciBvY2N1cmVkLCBxbV9tb3VudF9xdW90YXMgY29kZQorCQkJICogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHFtX21vdW50X3F1b3RhcyBjb2RlCiAJCQkgKiBoYXMgYWxyZWFkeSBkaXNhYmxlZCBxdW90YXMuIFNvLCBqdXN0IGZpbmlzaAogCQkJICogbW91bnRpbmcsIGFuZCBnZXQgb24gd2l0aCB0aGUgYm9yaW5nIGxpZmUKIAkJCSAqIHdpdGhvdXQgZGlzayBxdW90YXMuCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggYzgyZjA2Ny4uMmRhZGIxNSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJLyoKIAkgKiBOZXh0IHdlIG1ha2UgdGhlIGNoYW5nZXMgaW4gdGhlIHF1b3RhIGZsYWcgaW4gdGhlIG1vdW50IHN0cnVjdC4KIAkgKiBUaGlzIGlzbid0IHByb3RlY3RlZCBieSBhIHBhcnRpY3VsYXIgbG9jayBkaXJlY3RseSwgYmVjYXVzZSB3ZQotCSAqIGRvbid0IHdhbnQgdG8gdGFrZSBhIG1ybG9jayBldmVyeXRpbWUgd2UgZGVwZW5kIG9uIHF1b3RhcyBiZWluZyBvbi4KKwkgKiBkb24ndCB3YW50IHRvIHRha2UgYSBtcmxvY2sgZXZlcnkgdGltZSB3ZSBkZXBlbmQgb24gcXVvdGFzIGJlaW5nIG9uLgogCSAqLwogCW1wLT5tX3FmbGFncyAmPSB+KGZsYWdzKTsKIApAQCAtMzEzLDE0ICszMTMsMTIgQEAKIHsKIAlpbnQJCWVycm9yOwogCXVpbnQJCXFmOwotCXVpbnQJCWFjY2ZsYWdzOwogCV9faW50NjRfdAlzYmZsYWdzOwogCiAJZmxhZ3MgJj0gKFhGU19BTExfUVVPVEFfQUNDVCB8IFhGU19BTExfUVVPVEFfRU5GRCk7CiAJLyoKIAkgKiBTd2l0Y2hpbmcgb24gcXVvdGEgYWNjb3VudGluZyBtdXN0IGJlIGRvbmUgYXQgbW91bnQgdGltZS4KIAkgKi8KLQlhY2NmbGFncyA9IGZsYWdzICYgWEZTX0FMTF9RVU9UQV9BQ0NUOwogCWZsYWdzICY9IH4oWEZTX0FMTF9RVU9UQV9BQ0NUKTsKIAogCXNiZmxhZ3MgPSAwOwpAQCAtMzU0LDcgKzM1Miw3IEBACiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CiAJLyoKLQkgKiBJZiBldmVyeXRoaW5nJ3MgdXB0by1kYXRlIGluY29yZSwgdGhlbiBkb24ndCB3YXN0ZSB0aW1lLgorCSAqIElmIGV2ZXJ5dGhpbmcncyB1cCB0by1kYXRlIGluY29yZSwgdGhlbiBkb24ndCB3YXN0ZSB0aW1lLgogCSAqLwogCWlmICgobXAtPm1fcWZsYWdzICYgZmxhZ3MpID09IGZsYWdzKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVFWElTVCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggNGJjM2M2NC4uMjdkNjRkNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMjM5NSwxNyArMjM5NSwzMyBAQAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKHhmc19hbGxvY19hcmdfdCkpOwogCWFyZ3MudHAgPSB0cDsKIAlhcmdzLm1wID0gdHAtPnRfbW91bnRwOworCisJLyoKKwkgKiB2YWxpZGF0ZSB0aGF0IHRoZSBibG9jayBudW1iZXIgaXMgbGVnYWwgLSB0aGUgZW5hYmxlcyB1cyB0byBkZXRlY3QKKwkgKiBhbmQgaGFuZGxlIGEgc2lsZW50IGZpbGVzeXN0ZW0gY29ycnVwdGlvbiByYXRoZXIgdGhhbiBjcmFzaGluZy4KKwkgKi8KIAlhcmdzLmFnbm8gPSBYRlNfRlNCX1RPX0FHTk8oYXJncy5tcCwgYm5vKTsKLQlBU1NFUlQoYXJncy5hZ25vIDwgYXJncy5tcC0+bV9zYi5zYl9hZ2NvdW50KTsKKwlpZiAoYXJncy5hZ25vID49IGFyZ3MubXAtPm1fc2Iuc2JfYWdjb3VudCkKKwkJcmV0dXJuIEVGU0NPUlJVUFRFRDsKKwogCWFyZ3MuYWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKGFyZ3MubXAsIGJubyk7CisJaWYgKGFyZ3MuYWdibm8gPj0gYXJncy5tcC0+bV9zYi5zYl9hZ2Jsb2NrcykKKwkJcmV0dXJuIEVGU0NPUlJVUFRFRDsKKwogCWFyZ3MucGFnID0geGZzX3BlcmFnX2dldChhcmdzLm1wLCBhcmdzLmFnbm8pOwotCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KCZhcmdzLCBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkpCisJQVNTRVJUKGFyZ3MucGFnKTsKKworCWVycm9yID0geGZzX2FsbG9jX2ZpeF9mcmVlbGlzdCgmYXJncywgWEZTX0FMTE9DX0ZMQUdfRlJFRUlORyk7CisJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMDsKLSNpZmRlZiBERUJVRwotCUFTU0VSVChhcmdzLmFnYnAgIT0gTlVMTCk7Ci0JQVNTRVJUKChhcmdzLmFnYm5vICsgbGVuKSA8PQotCQliZTMyX3RvX2NwdShYRlNfQlVGX1RPX0FHRihhcmdzLmFnYnApLT5hZ2ZfbGVuZ3RoKSk7Ci0jZW5kaWYKKworCS8qIHZhbGlkYXRlIHRoZSBleHRlbnQgc2l6ZSBpcyBsZWdhbCBub3cgd2UgaGF2ZSB0aGUgYWdmIGxvY2tlZCAqLworCWlmIChhcmdzLmFnYm5vICsgbGVuID4KKwkJCWJlMzJfdG9fY3B1KFhGU19CVUZfVE9fQUdGKGFyZ3MuYWdicCktPmFnZl9sZW5ndGgpKSB7CisJCWVycm9yID0gRUZTQ09SUlVQVEVEOworCQlnb3RvIGVycm9yMDsKKwl9CisKIAllcnJvciA9IHhmc19mcmVlX2FnX2V4dGVudCh0cCwgYXJncy5hZ2JwLCBhcmdzLmFnbm8sIGFyZ3MuYWdibm8sIGxlbiwgMCk7CiBlcnJvcjA6CiAJeGZzX3BlcmFnX3B1dChhcmdzLnBhZyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKaW5kZXggZTU0MTNkOS4uN2I3ZTAwNSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwpAQCAtOTkyLDcgKzk5Miw3IEBACiAJbGFzdHRhcmcgPSBYRlNfQlVGX1RBUkdFVChicCk7CiAKIAkvKgotCSAqIElmIHRoZSB3cml0ZSB3YXMgYXN5bmNocm9ub3VzIHRoZW4gbm9vbmUgd2lsbCBiZSBsb29raW5nIGZvciB0aGUKKwkgKiBJZiB0aGUgd3JpdGUgd2FzIGFzeW5jaHJvbm91cyB0aGVuIG5vIG9uZSB3aWxsIGJlIGxvb2tpbmcgZm9yIHRoZQogCSAqIGVycm9yLiAgQ2xlYXIgdGhlIGVycm9yIHN0YXRlIGFuZCB3cml0ZSB0aGUgYnVmZmVyIG91dCBhZ2Fpbi4KIAkgKgogCSAqIER1cmluZyBzeW5jIG9yIHVtb3VudCB3ZSdsbCB3cml0ZSBhbGwgcGVuZGluZyBidWZmZXJzIGFnYWluCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggNzQyYzgzMy4uYTM3NDgwYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMjc4OSw3ICsyNzg5LDcgQEAKIAogCS8qCiAJICogV2UgY2FuJ3QgZmx1c2ggdGhlIGlub2RlIHVudGlsIGl0IGlzIHVucGlubmVkLCBzbyB3YWl0IGZvciBpdCBpZiB3ZQotCSAqIGFyZSBhbGxvd2VkIHRvIGJsb2NrLiAgV2Uga25vdyBub29uZSBuZXcgY2FuIHBpbiBpdCwgYmVjYXVzZSB3ZSBhcmUKKwkgKiBhcmUgYWxsb3dlZCB0byBibG9jay4gIFdlIGtub3cgbm8gb25lIG5ldyBjYW4gcGluIGl0LCBiZWNhdXNlIHdlIGFyZQogCSAqIGhvbGRpbmcgdGhlIGlub2RlIGxvY2sgc2hhcmVkIGFuZCB5b3UgbmVlZCB0byBob2xkIGl0IGV4Y2x1c2l2ZWx5IHRvCiAJICogcGluIHRoZSBpbm9kZS4KIAkgKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGY3NTMyMDAuLmZmNGUyYTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTExMSw3ICsxMTEsNyBAQAogICogR2VuZXJhbGx5LCB3ZSBkbyBub3Qgd2FudCB0byBob2xkIHRoZSBpX3Jsb2NrIHdoaWxlIGhvbGRpbmcgdGhlCiAgKiBpX2lsb2NrLiBIaWVyYXJjaHkgaXMgaV9pb2xvY2sgZm9sbG93ZWQgYnkgaV9ybG9jay4KICAqCi0gKiB4ZnNfaXB0cl90IGNvbnRhaW5zIGFsbCB0aGUgaW5vZGUgZmllbGRzIHVwdG8gYW5kIGluY2x1ZGluZyB0aGUKKyAqIHhmc19pcHRyX3QgY29udGFpbnMgYWxsIHRoZSBpbm9kZSBmaWVsZHMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUKICAqIGlfbW5leHQgYW5kIGlfbXByZXYgZmllbGRzLCBpdCBpcyB1c2VkIGFzIGEgbWFya2VyIGluIHRoZSBpbm9kZQogICogY2hhaW4gb2ZmIHRoZSBtb3VudCBzdHJ1Y3R1cmUgYnkgeGZzX3N5bmMgY2FsbHMuCiAgKi8KQEAgLTMzNiw3ICszMzYsNyBAQAogCiAvKgogICogUHJvamVjdCBxdW90YSBpZCBoZWxwZXJzIChwcmV2aW91c2x5IHByb2ppZCB3YXMgMTZiaXQgb25seQotICogYW5kIHVzaW5nIHR3byAxNmJpdCB2YWx1ZXMgdG8gaG9sZCBuZXcgMzJiaXQgcHJvamlkIHdhcyBjaG9vc2VuCisgKiBhbmQgdXNpbmcgdHdvIDE2Yml0IHZhbHVlcyB0byBob2xkIG5ldyAzMmJpdCBwcm9qaWQgd2FzIGNob3NlbgogICogdG8gcmV0YWluIGNvbXBhdGliaWxpdHkgd2l0aCAib2xkIiBmaWxlc3lzdGVtcykuCiAgKi8KIHN0YXRpYyBpbmxpbmUgcHJpZF90CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IDQ2Y2M0MDEuLjU3NmZkZmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC0xOTgsNiArMTk4LDQxIEBACiB9CiAKIC8qCisgKiB4ZnNfaW5vZGVfaXRlbV9mb3JtYXRfZXh0ZW50cyAtIGNvbnZlcnQgaW4tY29yZSBleHRlbnRzIHRvIG9uLWRpc2sgZm9ybQorICoKKyAqIEZvciBlaXRoZXIgdGhlIGRhdGEgb3IgYXR0ciBmb3JrIGluIGV4dGVudCBmb3JtYXQsIHdlIG5lZWQgdG8gZW5kaWFuIGNvbnZlcnQKKyAqIHRoZSBpbi1jb3JlIGV4dGVudCBhcyB3ZSBwbGFjZSB0aGVtIGludG8gdGhlIG9uLWRpc2sgaW5vZGUuIEluIHRoaXMgY2FzZSwgd2UKKyAqIG5lZWQgdG8gZG8gdGhpcyBjb252ZXJzaW9uIGJlZm9yZSB3ZSB3cml0ZSB0aGUgZXh0ZW50cyBpbnRvIHRoZSBsb2cuIEJlY2F1c2UKKyAqIHdlIGRvbid0IGhhdmUgdGhlIGRpc2sgaW5vZGUgdG8gd3JpdGUgaW50byBoZXJlLCB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBhbmQKKyAqIGZvcm1hdCB0aGUgZXh0ZW50cyBpbnRvIGl0IHZpYSB4ZnNfaWV4dGVudHNfY29weSgpLiBXZSBmcmVlIHRoZSBidWZmZXIgaW4KKyAqIHRoZSB1bmxvY2sgcm91dGluZSBhZnRlciB0aGUgY29weSBmb3IgdGhlIGxvZyBoYXMgYmVlbiBtYWRlLgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHRoZSBkYXRhIGZvcmssIHRoZSBpbi1jb3JlIGFuZCBvbi1kaXNrIGZvcmsgc2l6ZXMgY2FuIGJlCisgKiBkaWZmZXJlbnQgZHVlIHRvIGRlbGF5ZWQgYWxsb2NhdGlvbiBleHRlbnRzLiBXZSBvbmx5IGxvZyBvbi1kaXNrIGV4dGVudHMKKyAqIGhlcmUsIHNvIGFsd2F5cyB1c2UgdGhlIHBoeXNpY2FsIGZvcmsgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlCisgKiBidWZmZXIgd2UgbmVlZCB0byBhbGxvY2F0ZS4KKyAqLworU1RBVElDIHZvaWQKK3hmc19pbm9kZV9pdGVtX2Zvcm1hdF9leHRlbnRzKAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAorCXN0cnVjdCB4ZnNfbG9nX2lvdmVjCSp2ZWNwLAorCWludAkJCXdoaWNoZm9yaywKKwlpbnQJCQl0eXBlKQoreworCXhmc19ibWJ0X3JlY190CQkqZXh0X2J1ZmZlcjsKKworCWV4dF9idWZmZXIgPSBrbWVtX2FsbG9jKFhGU19JRk9SS19TSVpFKGlwLCB3aGljaGZvcmspLCBLTV9TTEVFUCk7CisJaWYgKHdoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLKQorCQlpcC0+aV9pdGVtcC0+aWxpX2V4dGVudHNfYnVmID0gZXh0X2J1ZmZlcjsKKwllbHNlCisJCWlwLT5pX2l0ZW1wLT5pbGlfYWV4dGVudHNfYnVmID0gZXh0X2J1ZmZlcjsKKworCXZlY3AtPmlfYWRkciA9IGV4dF9idWZmZXI7CisJdmVjcC0+aV9sZW4gPSB4ZnNfaWV4dGVudHNfY29weShpcCwgZXh0X2J1ZmZlciwgd2hpY2hmb3JrKTsKKwl2ZWNwLT5pX3R5cGUgPSB0eXBlOworfQorCisvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gZmlsbCBpbiB0aGUgdmVjdG9yIG9mIGxvZyBpb3ZlY3MgZm9yIHRoZQogICogZ2l2ZW4gaW5vZGUgbG9nIGl0ZW0uICBJdCBmaWxscyB0aGUgZmlyc3QgaXRlbSB3aXRoIGFuIGlub2RlCiAgKiBsb2cgZm9ybWF0IHN0cnVjdHVyZSwgdGhlIHNlY29uZCB3aXRoIHRoZSBvbi1kaXNrIGlub2RlIHN0cnVjdHVyZSwKQEAgLTIxMyw3ICsyNDgsNiBAQAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gaWlwLT5pbGlfaW5vZGU7CiAJdWludAkJCW52ZWNzOwogCXNpemVfdAkJCWRhdGFfYnl0ZXM7Ci0JeGZzX2JtYnRfcmVjX3QJCSpleHRfYnVmZmVyOwogCXhmc19tb3VudF90CQkqbXA7CiAKIAl2ZWNwLT5pX2FkZHIgPSAmaWlwLT5pbGlfZm9ybWF0OwpAQCAtMzIwLDIyICszNTQsOCBAQAogCQkJfSBlbHNlCiAjZW5kaWYKIAkJCXsKLQkJCQkvKgotCQkJCSAqIFRoZXJlIGFyZSBkZWxheWVkIGFsbG9jYXRpb24gZXh0ZW50cwotCQkJCSAqIGluIHRoZSBpbm9kZSwgb3Igd2UgbmVlZCB0byBjb252ZXJ0Ci0JCQkJICogdGhlIGV4dGVudHMgdG8gb24gZGlzayBmb3JtYXQuCi0JCQkJICogVXNlIHhmc19pZXh0ZW50c19jb3B5KCkKLQkJCQkgKiB0byBjb3B5IG9ubHkgdGhlIHJlYWwgZXh0ZW50cyBpbnRvCi0JCQkJICogYSBzZXBhcmF0ZSBidWZmZXIuICBXZSdsbCBmcmVlIHRoZQotCQkJCSAqIGJ1ZmZlciBpbiB0aGUgdW5sb2NrIHJvdXRpbmUuCi0JCQkJICovCi0JCQkJZXh0X2J1ZmZlciA9IGttZW1fYWxsb2MoaXAtPmlfZGYuaWZfYnl0ZXMsCi0JCQkJCUtNX1NMRUVQKTsKLQkJCQlpaXAtPmlsaV9leHRlbnRzX2J1ZiA9IGV4dF9idWZmZXI7Ci0JCQkJdmVjcC0+aV9hZGRyID0gZXh0X2J1ZmZlcjsKLQkJCQl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLAotCQkJCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JRVhUOworCQkJCXhmc19pbm9kZV9pdGVtX2Zvcm1hdF9leHRlbnRzKGlwLCB2ZWNwLAorCQkJCQlYRlNfREFUQV9GT1JLLCBYTE9HX1JFR19UWVBFX0lFWFQpOwogCQkJfQogCQkJQVNTRVJUKHZlY3AtPmlfbGVuIDw9IGlwLT5pX2RmLmlmX2J5dGVzKTsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfZHNpemUgPSB2ZWNwLT5pX2xlbjsKQEAgLTQ0NSwxOSArNDY1LDEyIEBACiAJCQkgKi8KIAkJCXZlY3AtPmlfYWRkciA9IGlwLT5pX2FmcC0+aWZfdTEuaWZfZXh0ZW50czsKIAkJCXZlY3AtPmlfbGVuID0gaXAtPmlfYWZwLT5pZl9ieXRlczsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUOwogI2Vsc2UKIAkJCUFTU0VSVChpaXAtPmlsaV9hZXh0ZW50c19idWYgPT0gTlVMTCk7Ci0JCQkvKgotCQkJICogTmVlZCB0byBlbmRpYW4gZmxpcCBiZWZvcmUgbG9nZ2luZwotCQkJICovCi0JCQlleHRfYnVmZmVyID0ga21lbV9hbGxvYyhpcC0+aV9hZnAtPmlmX2J5dGVzLAotCQkJCUtNX1NMRUVQKTsKLQkJCWlpcC0+aWxpX2FleHRlbnRzX2J1ZiA9IGV4dF9idWZmZXI7Ci0JCQl2ZWNwLT5pX2FkZHIgPSBleHRfYnVmZmVyOwotCQkJdmVjcC0+aV9sZW4gPSB4ZnNfaWV4dGVudHNfY29weShpcCwgZXh0X2J1ZmZlciwKLQkJCQkJWEZTX0FUVFJfRk9SSyk7CisJCQl4ZnNfaW5vZGVfaXRlbV9mb3JtYXRfZXh0ZW50cyhpcCwgdmVjcCwKKwkJCQkJWEZTX0FUVFJfRk9SSywgWExPR19SRUdfVFlQRV9JQVRUUl9FWFQpOwogI2VuZGlmCi0JCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lBVFRSX0VYVDsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfYXNpemUgPSB2ZWNwLT5pX2xlbjsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCBkYzE4ODJhLi43NTFlOTRmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTIwNCw3ICsyMDQsNiBAQAogCXhmc19hZ2lfdAkJKmFnaTsJLyogYWdpIGhlYWRlciBkYXRhICovCiAJeGZzX2FnaW5vX3QJCWFnaW5vOwkvKiBpbm9kZSAjIGluIGFsbG9jYXRpb24gZ3JvdXAgKi8KIAl4ZnNfYWdudW1iZXJfdAkJYWdubzsJLyogYWxsb2NhdGlvbiBncm91cCBudW1iZXIgKi8KLQl4ZnNfZGFkZHJfdAkJYm5vOwkvKiBpbm9kZSBjbHVzdGVyIHN0YXJ0IGRhZGRyICovCiAJaW50CQkJY2h1bmtpZHg7IC8qIGN1cnJlbnQgaW5kZXggaW50byBpbm9kZSBjaHVuayAqLwogCWludAkJCWNsdXN0aWR4OyAvKiBjdXJyZW50IGluZGV4IGludG8gaW5vZGUgY2x1c3RlciAqLwogCXhmc19idHJlZV9jdXJfdAkJKmN1cjsJLyogYnRyZWUgY3Vyc29yIGZvciBpYWxsb2MgYnRyZWUgKi8KQEAgLTQ2Myw3ICs0NjIsNiBAQAogCQkJCQkJIG1wLT5tX3NiLnNiX2lub3BibG9nKTsKIAkJCQl9CiAJCQkJaW5vID0gWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgYWdpbm8pOwotCQkJCWJubyA9IFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIGFnYm5vKTsKIAkJCQkvKgogCQkJCSAqIFNraXAgaWYgdGhpcyBpbm9kZSBpcyBmcmVlLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggMjVlZmE5Yi4uYjYxMmNlNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC03NjEsNyArNzYxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBYTE9HX1NUQVRFX0NPVkVSX05FRUQ6CiAJY2FzZSBYTE9HX1NUQVRFX0NPVkVSX05FRUQyOgotCQlpZiAoIXhmc190cmFuc19haWxfdGFpbChsb2ctPmxfYWlscCkgJiYKKwkJaWYgKCF4ZnNfYWlsX21pbl9sc24obG9nLT5sX2FpbHApICYmCiAJCSAgICB4bG9nX2ljbG9nc19lbXB0eShsb2cpKSB7CiAJCQlpZiAobG9nLT5sX2NvdmVyZWRfc3RhdGUgPT0gWExPR19TVEFURV9DT1ZFUl9ORUVEKQogCQkJCWxvZy0+bF9jb3ZlcmVkX3N0YXRlID0gWExPR19TVEFURV9DT1ZFUl9ET05FOwpAQCAtODAxLDcgKzgwMSw3IEBACiAJeGZzX2xzbl90CQl0YWlsX2xzbjsKIAlzdHJ1Y3QgbG9nCQkqbG9nID0gbXAtPm1fbG9nOwogCi0JdGFpbF9sc24gPSB4ZnNfdHJhbnNfYWlsX3RhaWwobXAtPm1fYWlsKTsKKwl0YWlsX2xzbiA9IHhmc19haWxfbWluX2xzbihtcC0+bV9haWwpOwogCWlmICghdGFpbF9sc24pCiAJCXRhaWxfbHNuID0gYXRvbWljNjRfcmVhZCgmbG9nLT5sX2xhc3Rfc3luY19sc24pOwogCkBAIC0xMjM5LDcgKzEyMzksNyBAQAogCSAqIHRoZSBmaWxlc3lzdGVtIGlzIHNodXR0aW5nIGRvd24uCiAJICovCiAJaWYgKCFYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKQotCQl4ZnNfdHJhbnNfYWlsX3B1c2gobG9nLT5sX2FpbHAsIHRocmVzaG9sZF9sc24pOworCQl4ZnNfYWlsX3B1c2gobG9nLT5sX2FpbHAsIHRocmVzaG9sZF9sc24pOwogfQogCiAvKgpAQCAtMzQwNyw2ICszNDA3LDE3IEBACiAJCXhmc19lbWVyZyhsb2ctPmxfbXAsICIlczogaW52YWxpZCBwdHIiLCBfX2Z1bmNfXyk7CiB9CiAKKy8qCisgKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGdyYW50IHdyaXRlIGhlYWQgZGlkbid0IGp1c3Qgb3ZlciBsYXAgdGhlIHRhaWwuICBJZgorICogdGhlIGN5Y2xlcyBhcmUgdGhlIHNhbWUsIHdlIGNhbid0IGJlIG92ZXJsYXBwaW5nLiAgT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdGhhdAorICogdGhlIGN5Y2xlcyBkaWZmZXIgYnkgZXhhY3RseSBvbmUgYW5kIGNoZWNrIHRoZSBieXRlIGNvdW50LgorICoKKyAqIFRoaXMgY2hlY2sgaXMgcnVuIHVubG9ja2VkLCBzbyBjYW4gZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMuIFJhdGhlciB0aGFuIGFzc2VydAorICogb24gZmFpbHVyZXMsIHVzZSBhIHdhcm4tb25jZSBmbGFnIGFuZCBhIHBhbmljIHRhZyB0byBhbGxvdyB0aGUgYWRtaW4gdG8KKyAqIGRldGVybWluZSBpZiB0aGV5IHdhbnQgdG8gcGFuaWMgdGhlIG1hY2hpbmUgd2hlbiBzdWNoIGFuIGVycm9yIG9jY3Vycy4gRm9yCisgKiBkZWJ1ZyBrZXJuZWxzIHRoaXMgd2lsbCBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB1c2luZyBhbiBhc3NlcnQgYnV0LCB1bmxpbmtlCisgKiBhbiBhc3NlcnQsIGl0IGNhbiBiZSB0dXJuZWQgb2ZmIGF0IHJ1bnRpbWUuCisgKi8KIFNUQVRJQyB2b2lkCiB4bG9nX3ZlcmlmeV9ncmFudF90YWlsKAogCXN0cnVjdCBsb2cJKmxvZykKQEAgLTM0MTQsMTcgKzM0MjUsMjIgQEAKIAlpbnQJCXRhaWxfY3ljbGUsIHRhaWxfYmxvY2tzOwogCWludAkJY3ljbGUsIHNwYWNlOwogCi0JLyoKLQkgKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGdyYW50IHdyaXRlIGhlYWQgZGlkbid0IGp1c3Qgb3ZlciBsYXAgdGhlCi0JICogdGFpbC4gIElmIHRoZSBjeWNsZXMgYXJlIHRoZSBzYW1lLCB3ZSBjYW4ndCBiZSBvdmVybGFwcGluZy4KLQkgKiBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGF0IHRoZSBjeWNsZXMgZGlmZmVyIGJ5IGV4YWN0bHkgb25lIGFuZAotCSAqIGNoZWNrIHRoZSBieXRlIGNvdW50LgotCSAqLwogCXhsb2dfY3JhY2tfZ3JhbnRfaGVhZCgmbG9nLT5sX2dyYW50X3dyaXRlX2hlYWQsICZjeWNsZSwgJnNwYWNlKTsKIAl4bG9nX2NyYWNrX2F0b21pY19sc24oJmxvZy0+bF90YWlsX2xzbiwgJnRhaWxfY3ljbGUsICZ0YWlsX2Jsb2Nrcyk7CiAJaWYgKHRhaWxfY3ljbGUgIT0gY3ljbGUpIHsKLQkJQVNTRVJUKGN5Y2xlIC0gMSA9PSB0YWlsX2N5Y2xlKTsKLQkJQVNTRVJUKHNwYWNlIDw9IEJCVE9CKHRhaWxfYmxvY2tzKSk7CisJCWlmIChjeWNsZSAtIDEgIT0gdGFpbF9jeWNsZSAmJgorCQkgICAgIShsb2ctPmxfZmxhZ3MgJiBYTE9HX1RBSUxfV0FSTikpIHsKKwkJCXhmc19hbGVydF90YWcobG9nLT5sX21wLCBYRlNfUFRBR19MT0dSRVMsCisJCQkJIiVzOiBjeWNsZSAtIDEgIT0gdGFpbF9jeWNsZSIsIF9fZnVuY19fKTsKKwkJCWxvZy0+bF9mbGFncyB8PSBYTE9HX1RBSUxfV0FSTjsKKwkJfQorCisJCWlmIChzcGFjZSA+IEJCVE9CKHRhaWxfYmxvY2tzKSAmJgorCQkgICAgIShsb2ctPmxfZmxhZ3MgJiBYTE9HX1RBSUxfV0FSTikpIHsKKwkJCXhmc19hbGVydF90YWcobG9nLT5sX21wLCBYRlNfUFRBR19MT0dSRVMsCisJCQkJIiVzOiBzcGFjZSA+IEJCVE9CKHRhaWxfYmxvY2tzKSIsIF9fZnVuY19fKTsKKwkJCWxvZy0+bF9mbGFncyB8PSBYTE9HX1RBSUxfV0FSTjsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IDE1ZGJmMWYuLjU4NjQ4NTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTE0NCw2ICsxNDQsNyBAQAogI2RlZmluZQlYTE9HX1JFQ09WRVJZX05FRURFRAkweDQJLyogbG9nIHdhcyByZWNvdmVyZWQgKi8KICNkZWZpbmUgWExPR19JT19FUlJPUgkJMHg4CS8qIGxvZyBoaXQgYW4gSS9PIGVycm9yLCBhbmQgYmVpbmcKIAkJCQkJICAgc2h1dGRvd24gKi8KKyNkZWZpbmUgWExPR19UQUlMX1dBUk4JCTB4MTAJLyogbG9nIHRhaWwgdmVyaWZ5IHdhcm5pbmcgaXNzdWVkICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAvKgpAQCAtNTcwLDcgKzU3MSw3IEBACiAgKiBXaGVuIHdlIGNyYWNrIGFuIGF0b21pYyBMU04sIHdlIHNhbXBsZSBpdCBmaXJzdCBzbyB0aGF0IHRoZSB2YWx1ZSB3aWxsIG5vdAogICogY2hhbmdlIHdoaWxlIHdlIGFyZSBjcmFja2luZyBpdCBpbnRvIHRoZSBjb21wb25lbnQgdmFsdWVzLiBUaGlzIG1lYW5zIHdlCiAgKiB3aWxsIGFsd2F5cyBnZXQgY29uc2lzdGVudCBjb21wb25lbnQgdmFsdWVzIHRvIHdvcmsgZnJvbS4gVGhpcyBzaG91bGQgYWx3YXlzCi0gKiBiZSB1c2VkIHRvIHNtYXBsZSBhbmQgY3JhY2sgTFNOcyB0YWh0IGFyZSBzdG9yZWQgYW5kIHVwZGF0ZWQgaW4gYXRvbWljCisgKiBiZSB1c2VkIHRvIHNhbXBsZSBhbmQgY3JhY2sgTFNOcyB0aGF0IGFyZSBzdG9yZWQgYW5kIHVwZGF0ZWQgaW4gYXRvbWljCiAgKiB2YXJpYWJsZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IDBjNGE1NjEuLjVjYzQ2NGEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCS8qCiAJICogV2UgZG8gbG9nIEkvTyBpbiB1bml0cyBvZiBsb2cgc2VjdG9ycyAoYSBwb3dlci1vZi0yCiAJICogbXVsdGlwbGUgb2YgdGhlIGJhc2ljIGJsb2NrIHNpemUpLCBzbyB3ZSByb3VuZCB1cCB0aGUKLQkgKiByZXF1ZXN0ZWQgc2l6ZSB0byBhY29tbW9kYXRlIHRoZSBiYXNpYyBibG9ja3MgcmVxdWlyZWQKKwkgKiByZXF1ZXN0ZWQgc2l6ZSB0byBhY2NvbW1vZGF0ZSB0aGUgYmFzaWMgYmxvY2tzIHJlcXVpcmVkCiAJICogZm9yIGNvbXBsZXRlIGxvZyBzZWN0b3JzLgogCSAqCiAJICogSW4gYWRkaXRpb24sIHRoZSBidWZmZXIgbWF5IGJlIHVzZWQgZm9yIGEgbm9uLXNlY3Rvci0KQEAgLTExMiw3ICsxMTIsNyBAQAogCSAqIGFuIGlzc3VlLiAgTm9yIHdpbGwgdGhpcyBiZSBhIHByb2JsZW0gaWYgdGhlIGxvZyBJL08gaXMKIAkgKiBkb25lIGluIGJhc2ljIGJsb2NrcyAoc2VjdG9yIHNpemUgMSkuICBCdXQgb3RoZXJ3aXNlIHdlCiAJICogZXh0ZW5kIHRoZSBidWZmZXIgYnkgb25lIGV4dHJhIGxvZyBzZWN0b3IgdG8gZW5zdXJlCi0JICogdGhlcmUncyBzcGFjZSB0byBhY2NvbW9kYXRlIHRoaXMgcG9zc2libGlsaXR5LgorCSAqIHRoZXJlJ3Mgc3BhY2UgdG8gYWNjb21tb2RhdGUgdGhpcyBwb3NzaWJpbGl0eS4KIAkgKi8KIAlpZiAobmJibGtzID4gMSAmJiBsb2ctPmxfc2VjdEJCc2l6ZSA+IDEpCiAJCW5iYmxrcyArPSBsb2ctPmxfc2VjdEJCc2l6ZTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaAppbmRleCBhNjJlODk3Li4xOWFmMGFiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmgKKysrIGIvZnMveGZzL3hmc19tb3VudC5oCkBAIC0yMDMsMTIgKzIwMyw5IEBACiAJc3RydWN0IG11dGV4CQltX2ljc2JfbXV0ZXg7CS8qIGJhbGFuY2VyIHN5bmMgbG9jayAqLwogI2VuZGlmCiAJc3RydWN0IHhmc19tcnVfY2FjaGUJKm1fZmlsZXN0cmVhbTsgIC8qIHBlci1tb3VudCBmaWxlc3RyZWFtIGRhdGEgKi8KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKm1fc3luY190YXNrOwkvKiBnZW5lcmFsaXNlZCBzeW5jIHRocmVhZCAqLwotCXhmc19zeW5jX3dvcmtfdAkJbV9zeW5jX3dvcms7CS8qIHdvcmsgaXRlbSBmb3IgVkZTX1NZTkMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCW1fc3luY19saXN0OwkvKiBzeW5jIHRocmVhZCB3b3JrIGl0ZW0gbGlzdCAqLwotCXNwaW5sb2NrX3QJCW1fc3luY19sb2NrOwkvKiB3b3JrIGl0ZW0gbGlzdCBsb2NrICovCi0JaW50CQkJbV9zeW5jX3NlcTsJLyogc3luYyB0aHJlYWQgZ2VuZXJhdGlvbiBuby4gKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdAltX3dhaXRfc2luZ2xlX3N5bmNfdGFzazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCW1fc3luY193b3JrOwkvKiBiYWNrZ3JvdW5kIHN5bmMgd29yayAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsJbV9yZWNsYWltX3dvcms7CS8qIGJhY2tncm91bmQgaW5vZGUgcmVjbGFpbSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAltX2ZsdXNoX3dvcms7CS8qIGJhY2tncm91bmQgaW5vZGUgZmx1c2ggKi8KIAlfX2ludDY0X3QJCW1fdXBkYXRlX2ZsYWdzOwkvKiBzYiBmbGFncyB3ZSBuZWVkIHRvIHVwZGF0ZQogCQkJCQkJICAgb24gdGhlIG5leHQgcmVtb3VudCxydyAqLwogCXN0cnVjdCBzaHJpbmtlcgkJbV9pbm9kZV9zaHJpbms7CS8qIGlub2RlIHJlY2xhaW0gc2hyaW5rZXIgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IDEyYWZmOTUuLjVmYzIzODAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtMjgsNzQgKzI4LDEzOCBAQAogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAKLVNUQVRJQyB2b2lkIHhmc19haWxfc3BsaWNlKHN0cnVjdCB4ZnNfYWlsICosIHN0cnVjdCBsaXN0X2hlYWQgKiwgeGZzX2xzbl90KTsKLVNUQVRJQyB2b2lkIHhmc19haWxfZGVsZXRlKHN0cnVjdCB4ZnNfYWlsICosIHhmc19sb2dfaXRlbV90ICopOwotU1RBVElDIHhmc19sb2dfaXRlbV90ICogeGZzX2FpbF9taW4oc3RydWN0IHhmc19haWwgKik7Ci1TVEFUSUMgeGZzX2xvZ19pdGVtX3QgKiB4ZnNfYWlsX25leHQoc3RydWN0IHhmc19haWwgKiwgeGZzX2xvZ19pdGVtX3QgKik7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqeGZzX2FpbF93cTsJLyogQUlMIHdvcmtxdWV1ZSAqLwogCiAjaWZkZWYgREVCVUcKLVNUQVRJQyB2b2lkIHhmc19haWxfY2hlY2soc3RydWN0IHhmc19haWwgKiwgeGZzX2xvZ19pdGVtX3QgKik7Ci0jZWxzZQorLyoKKyAqIENoZWNrIHRoYXQgdGhlIGxpc3QgaXMgc29ydGVkIGFzIGl0IHNob3VsZCBiZS4KKyAqLworU1RBVElDIHZvaWQKK3hmc19haWxfY2hlY2soCisJc3RydWN0IHhmc19haWwJKmFpbHAsCisJeGZzX2xvZ19pdGVtX3QJKmxpcCkKK3sKKwl4ZnNfbG9nX2l0ZW1fdAkqcHJldl9saXA7CisKKwlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDaGVjayB0aGUgbmV4dCBhbmQgcHJldmlvdXMgZW50cmllcyBhcmUgdmFsaWQuCisJICovCisJQVNTRVJUKChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgIT0gMCk7CisJcHJldl9saXAgPSBsaXN0X2VudHJ5KGxpcC0+bGlfYWlsLnByZXYsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworCWlmICgmcHJldl9saXAtPmxpX2FpbCAhPSAmYWlscC0+eGFfYWlsKQorCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pIDw9IDApOworCisJcHJldl9saXAgPSBsaXN0X2VudHJ5KGxpcC0+bGlfYWlsLm5leHQsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworCWlmICgmcHJldl9saXAtPmxpX2FpbCAhPSAmYWlscC0+eGFfYWlsKQorCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pID49IDApOworCisKKyNpZmRlZiBYRlNfVFJBTlNfREVCVUcKKwkvKgorCSAqIFdhbGsgdGhlIGxpc3QgY2hlY2tpbmcgbHNuIG9yZGVyaW5nLCBhbmQgdGhhdCBldmVyeSBlbnRyeSBoYXMgdGhlCisJICogWEZTX0xJX0lOX0FJTCBmbGFnIHNldC4gVGhpcyBpcyByZWFsbHkgZXhwZW5zaXZlLCBzbyBvbmx5IGRvIGl0CisJICogd2hlbiBzcGVjaWZpY2FsbHkgZGVidWdnaW5nIHRoZSB0cmFuc2FjdGlvbiBzdWJzeXN0ZW0uCisJICovCisJcHJldl9saXAgPSBsaXN0X2VudHJ5KCZhaWxwLT54YV9haWwsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobGlwLCAmYWlscC0+eGFfYWlsLCBsaV9haWwpIHsKKwkJaWYgKCZwcmV2X2xpcC0+bGlfYWlsICE9ICZhaWxwLT54YV9haWwpCisJCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pIDw9IDApOworCQlBU1NFUlQoKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAhPSAwKTsKKwkJcHJldl9saXAgPSBsaXA7CisJfQorI2VuZGlmIC8qIFhGU19UUkFOU19ERUJVRyAqLworfQorI2Vsc2UgLyogIURFQlVHICovCiAjZGVmaW5lCXhmc19haWxfY2hlY2soYSxsKQogI2VuZGlmIC8qIERFQlVHICovCiAKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBBSUwuICBJZiB0aGUgQUlMIGlzIGVtcHR5LCB0aGVuCisgKiByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHhmc19sb2dfaXRlbV90ICoKK3hmc19haWxfbWluKAorCXN0cnVjdCB4ZnNfYWlsICAqYWlscCkKK3sKKwlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmYWlscC0+eGFfYWlsLCB4ZnNfbG9nX2l0ZW1fdCwgbGlfYWlsKTsKK30KKworIC8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIEFJTC4gIElmIHRoZSBBSUwgaXMgZW1wdHksIHRoZW4KKyAqIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgeGZzX2xvZ19pdGVtX3QgKgoreGZzX2FpbF9tYXgoCisJc3RydWN0IHhmc19haWwgICphaWxwKQoreworCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBsaXN0X2VudHJ5KGFpbHAtPnhhX2FpbC5wcmV2LCB4ZnNfbG9nX2l0ZW1fdCwgbGlfYWlsKTsKK30KIAogLyoKLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBsb2cgbWFuYWdlciBjb2RlIHRvIGRldGVybWluZSB0aGUgTFNOCi0gKiBvZiB0aGUgdGFpbCBvZiB0aGUgbG9nLiAgVGhpcyBpcyBleGFjdGx5IHRoZSBMU04gb2YgdGhlIGZpcnN0Ci0gKiBpdGVtIGluIHRoZSBBSUwuICBJZiB0aGUgQUlMIGlzIGVtcHR5LCB0aGVuIHRoaXMgZnVuY3Rpb24KLSAqIHJldHVybnMgMC4KKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGl0ZW0gd2hpY2ggZm9sbG93cyB0aGUgZ2l2ZW4gaXRlbSBpbiB0aGUgQUlMLiAgSWYKKyAqIHRoZSBnaXZlbiBpdGVtIGlzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QsIHRoZW4gcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyB4ZnNfbG9nX2l0ZW1fdCAqCit4ZnNfYWlsX25leHQoCisJc3RydWN0IHhmc19haWwgICphaWxwLAorCXhmc19sb2dfaXRlbV90ICAqbGlwKQoreworCWlmIChsaXAtPmxpX2FpbC5uZXh0ID09ICZhaWxwLT54YV9haWwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJmxpcC0+bGlfYWlsLCB4ZnNfbG9nX2l0ZW1fdCwgbGlfYWlsKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBsb2cgbWFuYWdlciBjb2RlIHRvIGRldGVybWluZSB0aGUgTFNOIG9mIHRoZSB0YWlsIG9mCisgKiB0aGUgbG9nLiAgVGhpcyBpcyBleGFjdGx5IHRoZSBMU04gb2YgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIEFJTC4gIElmIHRoZSBBSUwKKyAqIGlzIGVtcHR5LCB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwLgogICoKLSAqIFdlIG5lZWQgdGhlIEFJTCBsb2NrIGluIG9yZGVyIHRvIGdldCBhIGNvaGVyZW50IHJlYWQgb2YgdGhlCi0gKiBsc24gb2YgdGhlIGxhc3QgaXRlbSBpbiB0aGUgQUlMLgorICogV2UgbmVlZCB0aGUgQUlMIGxvY2sgaW4gb3JkZXIgdG8gZ2V0IGEgY29oZXJlbnQgcmVhZCBvZiB0aGUgbHNuIG9mIHRoZSBsYXN0CisgKiBpdGVtIGluIHRoZSBBSUwuCiAgKi8KIHhmc19sc25fdAoteGZzX3RyYW5zX2FpbF90YWlsKAoreGZzX2FpbF9taW5fbHNuKAogCXN0cnVjdCB4ZnNfYWlsCSphaWxwKQogewotCXhmc19sc25fdAlsc247CisJeGZzX2xzbl90CWxzbiA9IDA7CiAJeGZzX2xvZ19pdGVtX3QJKmxpcDsKIAogCXNwaW5fbG9jaygmYWlscC0+eGFfbG9jayk7CiAJbGlwID0geGZzX2FpbF9taW4oYWlscCk7Ci0JaWYgKGxpcCA9PSBOVUxMKSB7Ci0JCWxzbiA9ICh4ZnNfbHNuX3QpMDsKLQl9IGVsc2UgeworCWlmIChsaXApCiAJCWxzbiA9IGxpcC0+bGlfbHNuOwotCX0KIAlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7CiAKIAlyZXR1cm4gbHNuOwogfQogCiAvKgotICogeGZzX3RyYW5zX3B1c2hfYWlsCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBtb3ZlIHRoZSB0YWlsIG9mIHRoZSBBSUwgZm9yd2FyZC4gIEl0IGRvZXMgdGhpcyBieQotICogdHJ5aW5nIHRvIGZsdXNoIGl0ZW1zIGluIHRoZSBBSUwgd2hvc2UgbHNucyBhcmUgYmVsb3cgdGhlIGdpdmVuCi0gKiB0aHJlc2hvbGRfbHNuLgotICoKLSAqIHRoZSBwdXNoIGlzIHJ1biBhc3luY2hyb25vdXNseSBpbiBhIHNlcGFyYXRlIHRocmVhZCwgc28gd2UgcmV0dXJuIHRoZSB0YWlsCi0gKiBvZiB0aGUgbG9nIHJpZ2h0IG5vdyBpbnN0ZWFkIG9mIHRoZSB0YWlsIGFmdGVyIHRoZSBwdXNoLiBUaGlzIG1lYW5zIHdlIHdpbGwKLSAqIGVpdGhlciBjb250aW51ZSByaWdodCBhd2F5LCBvciB3ZSB3aWxsIHNsZWVwIHdhaXRpbmcgb24gdGhlIGFzeW5jIHRocmVhZCB0bwotICogZG8gaXRzIHdvcmsuCi0gKgotICogV2UgZG8gdGhpcyB1bmxvY2tlZCAtIHdlIG9ubHkgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgaW4gdGhlCi0gKiBBSUwgYXQgdGhlIHRpbWUgd2UgYXJlIGNhbGxlZC4gV2UgZG9uJ3QgbmVlZCB0byBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mCi0gKiBhbnkgb2YgdGhlIG9iamVjdHMsIHNvIHRoZSBsb2NrIGlzIG5vdCBuZWVkZWQuCisgKiBSZXR1cm4gdGhlIG1heGltdW0gbHNuIGhlbGQgaW4gdGhlIEFJTCwgb3IgemVybyBpZiB0aGUgQUlMIGlzIGVtcHR5LgogICovCi12b2lkCi14ZnNfdHJhbnNfYWlsX3B1c2goCi0Jc3RydWN0IHhmc19haWwJKmFpbHAsCi0JeGZzX2xzbl90CXRocmVzaG9sZF9sc24pCitzdGF0aWMgeGZzX2xzbl90Cit4ZnNfYWlsX21heF9sc24oCisJc3RydWN0IHhmc19haWwgICphaWxwKQogewotCXhmc19sb2dfaXRlbV90CSpsaXA7CisJeGZzX2xzbl90ICAgICAgIGxzbiA9IDA7CisJeGZzX2xvZ19pdGVtX3QgICpsaXA7CiAKLQlsaXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKLQlpZiAobGlwICYmICFYRlNfRk9SQ0VEX1NIVVRET1dOKGFpbHAtPnhhX21vdW50KSkgewotCQlpZiAoWEZTX0xTTl9DTVAodGhyZXNob2xkX2xzbiwgYWlscC0+eGFfdGFyZ2V0KSA+IDApCi0JCQl4ZnNhaWxkX3dha2V1cChhaWxwLCB0aHJlc2hvbGRfbHNuKTsKLQl9CisJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKKwlsaXAgPSB4ZnNfYWlsX21heChhaWxwKTsKKwlpZiAobGlwKQorCQlsc24gPSBsaXAtPmxpX2xzbjsKKwlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7CisKKwlyZXR1cm4gbHNuOwogfQogCiAvKgpAQCAtMjM2LDM1ICszMDAsNzggQEAKIH0KIAogLyoKLSAqIHhmc2FpbGRfcHVzaCBkb2VzIHRoZSB3b3JrIG9mIHB1c2hpbmcgb24gdGhlIEFJTC4gIFJldHVybmluZyBhIHRpbWVvdXQgb2YKLSAqIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgc2xlZXAgdW50aWwgd29rZW4uCisgKiBzcGxpY2UgdGhlIGxvZyBpdGVtIGxpc3QgaW50byB0aGUgQUlMIGF0IHRoZSBnaXZlbiBMU04uCiAgKi8KLWxvbmcKLXhmc2FpbGRfcHVzaCgKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKLQl4ZnNfbHNuX3QJKmxhc3RfbHNuKQorc3RhdGljIHZvaWQKK3hmc19haWxfc3BsaWNlKAorCXN0cnVjdCB4ZnNfYWlsICAqYWlscCwKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCXhmc19sc25fdCAgICAgICBsc24pCiB7Ci0JbG9uZwkJdG91dCA9IDA7Ci0JeGZzX2xzbl90CWxhc3RfcHVzaGVkX2xzbiA9ICpsYXN0X2xzbjsKLQl4ZnNfbHNuX3QJdGFyZ2V0ID0gIGFpbHAtPnhhX3RhcmdldDsKLQl4ZnNfbHNuX3QJbHNuOwotCXhmc19sb2dfaXRlbV90CSpsaXA7Ci0JaW50CQlmbHVzaF9sb2csIGNvdW50LCBzdHVjazsKLQl4ZnNfbW91bnRfdAkqbXAgPSBhaWxwLT54YV9tb3VudDsKKwl4ZnNfbG9nX2l0ZW1fdCAgKm5leHRfbGlwOworCisJLyogSWYgdGhlIGxpc3QgaXMgZW1wdHksIGp1c3QgaW5zZXJ0IHRoZSBpdGVtLiAgKi8KKwlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkgeworCQlsaXN0X3NwbGljZShsaXN0LCAmYWlscC0+eGFfYWlsKTsKKwkJcmV0dXJuOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShuZXh0X2xpcCwgJmFpbHAtPnhhX2FpbCwgbGlfYWlsKSB7CisJCWlmIChYRlNfTFNOX0NNUChuZXh0X2xpcC0+bGlfbHNuLCBsc24pIDw9IDApCisJCQlicmVhazsKKwl9CisKKwlBU1NFUlQoJm5leHRfbGlwLT5saV9haWwgPT0gJmFpbHAtPnhhX2FpbCB8fAorCSAgICAgICBYRlNfTFNOX0NNUChuZXh0X2xpcC0+bGlfbHNuLCBsc24pIDw9IDApOworCisJbGlzdF9zcGxpY2VfaW5pdChsaXN0LCAmbmV4dF9saXAtPmxpX2FpbCk7Cit9CisKKy8qCisgKiBEZWxldGUgdGhlIGdpdmVuIGl0ZW0gZnJvbSB0aGUgQUlMLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaXRlbS4KKyAqLworc3RhdGljIHZvaWQKK3hmc19haWxfZGVsZXRlKAorCXN0cnVjdCB4ZnNfYWlsICAqYWlscCwKKwl4ZnNfbG9nX2l0ZW1fdCAgKmxpcCkKK3sKKwl4ZnNfYWlsX2NoZWNrKGFpbHAsIGxpcCk7CisJbGlzdF9kZWwoJmxpcC0+bGlfYWlsKTsKKwl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9jbGVhcihhaWxwLCBsaXApOworfQorCisvKgorICogeGZzX2FpbF93b3JrZXIgZG9lcyB0aGUgd29yayBvZiBwdXNoaW5nIG9uIHRoZSBBSUwuIEl0IHdpbGwgcmVxdWV1ZSBpdHNlbGYKKyAqIHRvIHJ1biBhdCBhIGxhdGVyIHRpbWUgaWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvIHRvIGNvbXBsZXRlIHRoZSBwdXNoLgorICovCitTVEFUSUMgdm9pZAoreGZzX2FpbF93b3JrZXIoCisJc3RydWN0IHdvcmtfc3RydWN0CSp3b3JrKQoreworCXN0cnVjdCB4ZnNfYWlsCQkqYWlscCA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCisJCQkJCXN0cnVjdCB4ZnNfYWlsLCB4YV93b3JrKTsKKwl4ZnNfbW91bnRfdAkJKm1wID0gYWlscC0+eGFfbW91bnQ7CiAJc3RydWN0IHhmc19haWxfY3Vyc29yCSpjdXIgPSAmYWlscC0+eGFfY3Vyc29yczsKLQlpbnQJCXB1c2hfeGZzYnVmZCA9IDA7CisJeGZzX2xvZ19pdGVtX3QJCSpsaXA7CisJeGZzX2xzbl90CQlsc247CisJeGZzX2xzbl90CQl0YXJnZXQ7CisJbG9uZwkJCXRvdXQgPSAxMDsKKwlpbnQJCQlmbHVzaF9sb2cgPSAwOworCWludAkJCXN0dWNrID0gMDsKKwlpbnQJCQljb3VudCA9IDA7CisJaW50CQkJcHVzaF94ZnNidWZkID0gMDsKIAogCXNwaW5fbG9jaygmYWlscC0+eGFfbG9jayk7CisJdGFyZ2V0ID0gYWlscC0+eGFfdGFyZ2V0OwogCXhmc190cmFuc19haWxfY3Vyc29yX2luaXQoYWlscCwgY3VyKTsKLQlsaXAgPSB4ZnNfdHJhbnNfYWlsX2N1cnNvcl9maXJzdChhaWxwLCBjdXIsICpsYXN0X2xzbik7CisJbGlwID0geGZzX3RyYW5zX2FpbF9jdXJzb3JfZmlyc3QoYWlscCwgY3VyLCBhaWxwLT54YV9sYXN0X3B1c2hlZF9sc24pOwogCWlmICghbGlwIHx8IFhGU19GT1JDRURfU0hVVERPV04obXApKSB7CiAJCS8qCiAJCSAqIEFJTCBpcyBlbXB0eSBvciBvdXIgcHVzaCBoYXMgcmVhY2hlZCB0aGUgZW5kLgogCQkgKi8KIAkJeGZzX3RyYW5zX2FpbF9jdXJzb3JfZG9uZShhaWxwLCBjdXIpOwogCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCSpsYXN0X2xzbiA9IDA7Ci0JCXJldHVybiB0b3V0OworCQlnb3RvIG91dF9kb25lOwogCX0KIAogCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWwpOwpAQCAtMjgxLDggKzM4OCw3IEBACiAJICogbG90cyBvZiBjb250ZW50aW9uIG9uIHRoZSBBSUwgbGlzdHMuCiAJICovCiAJbHNuID0gbGlwLT5saV9sc247Ci0JZmx1c2hfbG9nID0gc3R1Y2sgPSBjb3VudCA9IDA7Ci0Jd2hpbGUgKChYRlNfTFNOX0NNUChsaXAtPmxpX2xzbiwgdGFyZ2V0KSA8IDApKSB7CisJd2hpbGUgKChYRlNfTFNOX0NNUChsaXAtPmxpX2xzbiwgdGFyZ2V0KSA8PSAwKSkgewogCQlpbnQJbG9ja19yZXN1bHQ7CiAJCS8qCiAJCSAqIElmIHdlIGNhbiBsb2NrIHRoZSBpdGVtIHdpdGhvdXQgc2xlZXBpbmcsIHVubG9jayB0aGUgQUlMCkBAIC0zMDEsMTMgKzQwNywxMyBAQAogCQljYXNlIFhGU19JVEVNX1NVQ0NFU1M6CiAJCQlYRlNfU1RBVFNfSU5DKHhzX3B1c2hfYWlsX3N1Y2Nlc3MpOwogCQkJSU9QX1BVU0gobGlwKTsKLQkJCWxhc3RfcHVzaGVkX2xzbiA9IGxzbjsKKwkJCWFpbHAtPnhhX2xhc3RfcHVzaGVkX2xzbiA9IGxzbjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgWEZTX0lURU1fUFVTSEJVRjoKIAkJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfcHVzaGJ1Zik7CiAJCQlJT1BfUFVTSEJVRihsaXApOwotCQkJbGFzdF9wdXNoZWRfbHNuID0gbHNuOworCQkJYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuID0gbHNuOwogCQkJcHVzaF94ZnNidWZkID0gMTsKIAkJCWJyZWFrOwogCkBAIC0zMTksNyArNDI1LDcgQEAKIAogCQljYXNlIFhGU19JVEVNX0xPQ0tFRDoKIAkJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfbG9ja2VkKTsKLQkJCWxhc3RfcHVzaGVkX2xzbiA9IGxzbjsKKwkJCWFpbHAtPnhhX2xhc3RfcHVzaGVkX2xzbiA9IGxzbjsKIAkJCXN0dWNrKys7CiAJCQlicmVhazsKIApAQCAtMzc0LDkgKzQ4MCwyNyBAQAogCQl3YWtlX3VwX3Byb2Nlc3MobXAtPm1fZGRldl90YXJncC0+YnRfdGFzayk7CiAJfQogCisJLyogYXNzdW1lIHdlIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGluIGEgc2hvcnQgd2hpbGUgKi8KK291dF9kb25lOgogCWlmICghY291bnQpIHsKIAkJLyogV2UncmUgcGFzdCBvdXIgdGFyZ2V0IG9yIGVtcHR5LCBzbyBpZGxlICovCi0JCWxhc3RfcHVzaGVkX2xzbiA9IDA7CisJCWFpbHAtPnhhX2xhc3RfcHVzaGVkX2xzbiA9IDA7CisKKwkJLyoKKwkJICogV2UgY2xlYXIgdGhlIFhGU19BSUxfUFVTSElOR19CSVQgZmlyc3QgYmVmb3JlIGNoZWNraW5nCisJCSAqIHdoZXRoZXIgdGhlIHRhcmdldCBoYXMgY2hhbmdlZC4gSWYgdGhlIHRhcmdldCBoYXMgY2hhbmdlZCwKKwkJICogdGhpcyBwdXNoZXMgdGhlIHJlcXVldWUgcmFjZSBkaXJlY3RseSBvbnRvIHRoZSByZXN1bHQgb2YgdGhlCisJCSAqIGF0b21pYyB0ZXN0L3NldCBiaXQsIHNvIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgZWl0aGVyIHRoZQorCQkgKiB0aGUgcHVzaGVyIHRoYXQgY2hhbmdlZCB0aGUgdGFyZ2V0IG9yIG91cnNlbHZlcyB3aWxsIHJlcXVldWUKKwkJICogdGhlIHdvcmsgKGJ1dCBub3QgYm90aCkuCisJCSAqLworCQljbGVhcl9iaXQoWEZTX0FJTF9QVVNISU5HX0JJVCwgJmFpbHAtPnhhX2ZsYWdzKTsKKwkJc21wX3JtYigpOworCQlpZiAoWEZTX0xTTl9DTVAoYWlscC0+eGFfdGFyZ2V0LCB0YXJnZXQpID09IDAgfHwKKwkJICAgIHRlc3RfYW5kX3NldF9iaXQoWEZTX0FJTF9QVVNISU5HX0JJVCwgJmFpbHAtPnhhX2ZsYWdzKSkKKwkJCXJldHVybjsKKworCQl0b3V0ID0gNTA7CiAJfSBlbHNlIGlmIChYRlNfTFNOX0NNUChsc24sIHRhcmdldCkgPj0gMCkgewogCQkvKgogCQkgKiBXZSByZWFjaGVkIHRoZSB0YXJnZXQgc28gd2FpdCBhIGJpdCBsb25nZXIgZm9yIEkvTyB0bwpAQCAtMzg0LDcgKzUwOCw3IEBACiAJCSAqIHN0YXJ0IHRoZSBuZXh0IHNjYW4gZnJvbSB0aGUgc3RhcnQgb2YgdGhlIEFJTC4KIAkJICovCiAJCXRvdXQgPSA1MDsKLQkJbGFzdF9wdXNoZWRfbHNuID0gMDsKKwkJYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuID0gMDsKIAl9IGVsc2UgaWYgKChzdHVjayAqIDEwMCkgLyBjb3VudCA+IDkwKSB7CiAJCS8qCiAJCSAqIEVpdGhlciB0aGVyZSBpcyBhIGxvdCBvZiBjb250ZW50aW9uIG9uIHRoZSBBSUwgb3Igd2UKQEAgLTM5NiwxNCArNTIwLDYxIEBACiAJCSAqIGNvbnRpbnVpbmcgZnJvbSB3aGVyZSB3ZSB3ZXJlLgogCQkgKi8KIAkJdG91dCA9IDIwOwotCX0gZWxzZSB7Ci0JCS8qIG1vcmUgdG8gZG8sIGJ1dCB3YWl0IGEgc2hvcnQgd2hpbGUgYmVmb3JlIGNvbnRpbnVpbmcgKi8KLQkJdG91dCA9IDEwOwogCX0KLQkqbGFzdF9sc24gPSBsYXN0X3B1c2hlZF9sc247Ci0JcmV0dXJuIHRvdXQ7CisKKwkvKiBUaGVyZSBpcyBtb3JlIHRvIGRvLCByZXF1ZXVlIHVzLiAgKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsoeGZzX3N5bmNkX3dxLCAmYWlscC0+eGFfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcyh0b3V0KSk7CiB9CiAKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIG1vdmUgdGhlIHRhaWwgb2YgdGhlIEFJTCBmb3J3YXJkLiAgSXQgZG9lcyB0aGlzIGJ5CisgKiB0cnlpbmcgdG8gZmx1c2ggaXRlbXMgaW4gdGhlIEFJTCB3aG9zZSBsc25zIGFyZSBiZWxvdyB0aGUgZ2l2ZW4KKyAqIHRocmVzaG9sZF9sc24uCisgKgorICogVGhlIHB1c2ggaXMgcnVuIGFzeW5jaHJvbm91c2x5IGluIGEgd29ya3F1ZXVlLCB3aGljaCBtZWFucyB0aGUgY2FsbGVyIG5lZWRzCisgKiB0byBoYW5kbGUgd2FpdGluZyBvbiB0aGUgYXN5bmMgZmx1c2ggZm9yIHNwYWNlIHRvIGJlY29tZSBhdmFpbGFibGUuCisgKiBXZSBkb24ndCB3YW50IHRvIGludGVycnVwdCBhbnkgcHVzaCB0aGF0IGlzIGluIHByb2dyZXNzLCBoZW5jZSB3ZSBvbmx5IHF1ZXVlCisgKiB3b3JrIGlmIHdlIHNldCB0aGUgcHVzaGluZyBiaXQgYXBwcm9yaWF0ZWx5LgorICoKKyAqIFdlIGRvIHRoaXMgdW5sb2NrZWQgLSB3ZSBvbmx5IG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZXJlIGlzIGFueXRoaW5nIGluIHRoZQorICogQUlMIGF0IHRoZSB0aW1lIHdlIGFyZSBjYWxsZWQuIFdlIGRvbid0IG5lZWQgdG8gYWNjZXNzIHRoZSBjb250ZW50cyBvZgorICogYW55IG9mIHRoZSBvYmplY3RzLCBzbyB0aGUgbG9jayBpcyBub3QgbmVlZGVkLgorICovCit2b2lkCit4ZnNfYWlsX3B1c2goCisJc3RydWN0IHhmc19haWwJKmFpbHAsCisJeGZzX2xzbl90CXRocmVzaG9sZF9sc24pCit7CisJeGZzX2xvZ19pdGVtX3QJKmxpcDsKKworCWxpcCA9IHhmc19haWxfbWluKGFpbHApOworCWlmICghbGlwIHx8IFhGU19GT1JDRURfU0hVVERPV04oYWlscC0+eGFfbW91bnQpIHx8CisJICAgIFhGU19MU05fQ01QKHRocmVzaG9sZF9sc24sIGFpbHAtPnhhX3RhcmdldCkgPD0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgbmV3IHRhcmdldCBpcyBub3RpY2VkIGluIHB1c2ggY29kZSBiZWZvcmUgaXQgY2xlYXJzCisJICogdGhlIFhGU19BSUxfUFVTSElOR19CSVQuCisJICovCisJc21wX3dtYigpOworCXhmc190cmFuc19haWxfY29weV9sc24oYWlscCwgJmFpbHAtPnhhX3RhcmdldCwgJnRocmVzaG9sZF9sc24pOworCWlmICghdGVzdF9hbmRfc2V0X2JpdChYRlNfQUlMX1BVU0hJTkdfQklULCAmYWlscC0+eGFfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoeGZzX3N5bmNkX3dxLCAmYWlscC0+eGFfd29yaywgMCk7Cit9CisKKy8qCisgKiBQdXNoIG91dCBhbGwgaXRlbXMgaW4gdGhlIEFJTCBpbW1lZGlhdGVseQorICovCit2b2lkCit4ZnNfYWlsX3B1c2hfYWxsKAorCXN0cnVjdCB4ZnNfYWlsICAqYWlscCkKK3sKKwl4ZnNfbHNuX3QgICAgICAgdGhyZXNob2xkX2xzbiA9IHhmc19haWxfbWF4X2xzbihhaWxwKTsKKworCWlmICh0aHJlc2hvbGRfbHNuKQorCQl4ZnNfYWlsX3B1c2goYWlscCwgdGhyZXNob2xkX2xzbik7Cit9CiAKIC8qCiAgKiBUaGlzIGlzIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGl0ZW0gaXMgdW5sb2NrZWQgdGhhdCBtYXkgaGF2ZQpAQCAtNjE1LDcgKzc4Niw2IEBACiAJeGZzX21vdW50X3QJKm1wKQogewogCXN0cnVjdCB4ZnNfYWlsCSphaWxwOwotCWludAkJZXJyb3I7CiAKIAlhaWxwID0ga21lbV96YWxsb2Moc2l6ZW9mKHN0cnVjdCB4ZnNfYWlsKSwgS01fTUFZRkFJTCk7CiAJaWYgKCFhaWxwKQpAQCAtNjI0LDE1ICs3OTQsOSBAQAogCWFpbHAtPnhhX21vdW50ID0gbXA7CiAJSU5JVF9MSVNUX0hFQUQoJmFpbHAtPnhhX2FpbCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFpbHAtPnhhX2xvY2spOwotCWVycm9yID0geGZzYWlsZF9zdGFydChhaWxwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWVfYWlscDsKKwlJTklUX0RFTEFZRURfV09SSygmYWlscC0+eGFfd29yaywgeGZzX2FpbF93b3JrZXIpOwogCW1wLT5tX2FpbCA9IGFpbHA7CiAJcmV0dXJuIDA7Ci0KLW91dF9mcmVlX2FpbHA6Ci0Ja21lbV9mcmVlKGFpbHApOwotCXJldHVybiBlcnJvcjsKIH0KIAogdm9pZApAQCAtNjQxLDEyNCArODA1LDYgQEAKIHsKIAlzdHJ1Y3QgeGZzX2FpbAkqYWlscCA9IG1wLT5tX2FpbDsKIAotCXhmc2FpbGRfc3RvcChhaWxwKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFpbHAtPnhhX3dvcmspOwogCWttZW1fZnJlZShhaWxwKTsKIH0KLQotLyoKLSAqIHNwbGljZSB0aGUgbG9nIGl0ZW0gbGlzdCBpbnRvIHRoZSBBSUwgYXQgdGhlIGdpdmVuIExTTi4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19haWxfc3BsaWNlKAotCXN0cnVjdCB4ZnNfYWlsCSphaWxwLAotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JeGZzX2xzbl90CWxzbikKLXsKLQl4ZnNfbG9nX2l0ZW1fdAkqbmV4dF9saXA7Ci0KLQkvKgotCSAqIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBqdXN0IGluc2VydCB0aGUgaXRlbS4KLQkgKi8KLQlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkgewotCQlsaXN0X3NwbGljZShsaXN0LCAmYWlscC0+eGFfYWlsKTsKLQkJcmV0dXJuOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShuZXh0X2xpcCwgJmFpbHAtPnhhX2FpbCwgbGlfYWlsKSB7Ci0JCWlmIChYRlNfTFNOX0NNUChuZXh0X2xpcC0+bGlfbHNuLCBsc24pIDw9IDApCi0JCQlicmVhazsKLQl9Ci0KLQlBU1NFUlQoKCZuZXh0X2xpcC0+bGlfYWlsID09ICZhaWxwLT54YV9haWwpIHx8Ci0JICAgICAgIChYRlNfTFNOX0NNUChuZXh0X2xpcC0+bGlfbHNuLCBsc24pIDw9IDApKTsKLQotCWxpc3Rfc3BsaWNlX2luaXQobGlzdCwgJm5leHRfbGlwLT5saV9haWwpOwotCXJldHVybjsKLX0KLQotLyoKLSAqIERlbGV0ZSB0aGUgZ2l2ZW4gaXRlbSBmcm9tIHRoZSBBSUwuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpdGVtLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2FpbF9kZWxldGUoCi0Jc3RydWN0IHhmc19haWwJKmFpbHAsCi0JeGZzX2xvZ19pdGVtX3QJKmxpcCkKLXsKLQl4ZnNfYWlsX2NoZWNrKGFpbHAsIGxpcCk7Ci0JbGlzdF9kZWwoJmxpcC0+bGlfYWlsKTsKLQl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9jbGVhcihhaWxwLCBsaXApOwotfQotCi0vKgotICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgQUlMLgotICogSWYgdGhlIEFJTCBpcyBlbXB0eSwgdGhlbiByZXR1cm4gTlVMTC4KLSAqLwotU1RBVElDIHhmc19sb2dfaXRlbV90ICoKLXhmc19haWxfbWluKAotCXN0cnVjdCB4ZnNfYWlsCSphaWxwKQotewotCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZhaWxwLT54YV9haWwsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOwotfQotCi0vKgotICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaXRlbSB3aGljaCBmb2xsb3dzCi0gKiB0aGUgZ2l2ZW4gaXRlbSBpbiB0aGUgQUlMLiAgSWYgdGhlIGdpdmVuIGl0ZW0KLSAqIGlzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QsIHRoZW4gcmV0dXJuIE5VTEwuCi0gKi8KLVNUQVRJQyB4ZnNfbG9nX2l0ZW1fdCAqCi14ZnNfYWlsX25leHQoCi0Jc3RydWN0IHhmc19haWwJKmFpbHAsCi0JeGZzX2xvZ19pdGVtX3QJKmxpcCkKLXsKLQlpZiAobGlwLT5saV9haWwubmV4dCA9PSAmYWlscC0+eGFfYWlsKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZsaXAtPmxpX2FpbCwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7Ci19Ci0KLSNpZmRlZiBERUJVRwotLyoKLSAqIENoZWNrIHRoYXQgdGhlIGxpc3QgaXMgc29ydGVkIGFzIGl0IHNob3VsZCBiZS4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19haWxfY2hlY2soCi0Jc3RydWN0IHhmc19haWwJKmFpbHAsCi0JeGZzX2xvZ19pdGVtX3QJKmxpcCkKLXsKLQl4ZnNfbG9nX2l0ZW1fdAkqcHJldl9saXA7Ci0KLQlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBDaGVjayB0aGUgbmV4dCBhbmQgcHJldmlvdXMgZW50cmllcyBhcmUgdmFsaWQuCi0JICovCi0JQVNTRVJUKChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgIT0gMCk7Ci0JcHJldl9saXAgPSBsaXN0X2VudHJ5KGxpcC0+bGlfYWlsLnByZXYsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOwotCWlmICgmcHJldl9saXAtPmxpX2FpbCAhPSAmYWlscC0+eGFfYWlsKQotCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pIDw9IDApOwotCi0JcHJldl9saXAgPSBsaXN0X2VudHJ5KGxpcC0+bGlfYWlsLm5leHQsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOwotCWlmICgmcHJldl9saXAtPmxpX2FpbCAhPSAmYWlscC0+eGFfYWlsKQotCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pID49IDApOwotCi0KLSNpZmRlZiBYRlNfVFJBTlNfREVCVUcKLQkvKgotCSAqIFdhbGsgdGhlIGxpc3QgY2hlY2tpbmcgbHNuIG9yZGVyaW5nLCBhbmQgdGhhdCBldmVyeSBlbnRyeSBoYXMgdGhlCi0JICogWEZTX0xJX0lOX0FJTCBmbGFnIHNldC4gVGhpcyBpcyByZWFsbHkgZXhwZW5zaXZlLCBzbyBvbmx5IGRvIGl0Ci0JICogd2hlbiBzcGVjaWZpY2FsbHkgZGVidWdnaW5nIHRoZSB0cmFuc2FjdGlvbiBzdWJzeXN0ZW0uCi0JICovCi0JcHJldl9saXAgPSBsaXN0X2VudHJ5KCZhaWxwLT54YV9haWwsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobGlwLCAmYWlscC0+eGFfYWlsLCBsaV9haWwpIHsKLQkJaWYgKCZwcmV2X2xpcC0+bGlfYWlsICE9ICZhaWxwLT54YV9haWwpCi0JCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pIDw9IDApOwotCQlBU1NFUlQoKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAhPSAwKTsKLQkJcHJldl9saXAgPSBsaXA7Ci0JfQotI2VuZGlmIC8qIFhGU19UUkFOU19ERUJVRyAqLwotfQotI2VuZGlmIC8qIERFQlVHICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2lub2RlLmMgYi9mcy94ZnMveGZzX3RyYW5zX2lub2RlLmMKaW5kZXggMTYwODRkOC4uMDQ4YjBjNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfaW5vZGUuYwpAQCAtODEsNyArODEsNyBAQAogICoKICAqCiAgKiBHcmFicyBhIHJlZmVyZW5jZSB0byB0aGUgaW5vZGUgd2hpY2ggd2lsbCBiZSBkcm9wcGVkIHdoZW4gdGhlIHRyYW5zYWN0aW9uCi0gKiBpcyBjb21taXRlZC4gIFRoZSBpbm9kZSB3aWxsIGFsc28gYmUgdW5sb2NrZWQgYXQgdGhhdCBwb2ludC4gIFRoZSBpbm9kZQorICogaXMgY29tbWl0dGVkLiAgVGhlIGlub2RlIHdpbGwgYWxzbyBiZSB1bmxvY2tlZCBhdCB0aGF0IHBvaW50LiAgVGhlIGlub2RlCiAgKiBtdXN0IGJlIGxvY2tlZCwgYW5kIGl0IGNhbm5vdCBiZSBhc3NvY2lhdGVkIHdpdGggYW55IHRyYW5zYWN0aW9uLgogICovCiB2b2lkCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX3ByaXYuaCBiL2ZzL3hmcy94ZnNfdHJhbnNfcHJpdi5oCmluZGV4IDM1MTYyYzIuLjZiMTY0ZTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfcHJpdi5oCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfcHJpdi5oCkBAIC02NSwxNiArNjUsMjIgQEAKIHN0cnVjdCB4ZnNfYWlsIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSp4YV9tb3VudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXhhX2FpbDsKLQl1aW50CQkJeGFfZ2VuOwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqeGFfdGFzazsKIAl4ZnNfbHNuX3QJCXhhX3RhcmdldDsKIAlzdHJ1Y3QgeGZzX2FpbF9jdXJzb3IJeGFfY3Vyc29yczsKIAlzcGlubG9ja190CQl4YV9sb2NrOworCXN0cnVjdCBkZWxheWVkX3dvcmsJeGFfd29yazsKKwl4ZnNfbHNuX3QJCXhhX2xhc3RfcHVzaGVkX2xzbjsKKwl1bnNpZ25lZCBsb25nCQl4YV9mbGFnczsKIH07CiAKKyNkZWZpbmUgWEZTX0FJTF9QVVNISU5HX0JJVAkwCisKIC8qCiAgKiBGcm9tIHhmc190cmFuc19haWwuYwogICovCisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqeGZzX2FpbF93cTsJLyogQUlMIHdvcmtxdWV1ZSAqLworCiB2b2lkCXhmc190cmFuc19haWxfdXBkYXRlX2J1bGsoc3RydWN0IHhmc19haWwgKmFpbHAsCiAJCQkJc3RydWN0IHhmc19sb2dfaXRlbSAqKmxvZ19pdGVtcywgaW50IG5yX2l0ZW1zLAogCQkJCXhmc19sc25fdCBsc24pIF9fcmVsZWFzZXMoYWlscC0+eGFfbG9jayk7CkBAIC05OCwxMiArMTA0LDEzIEBACiAJeGZzX3RyYW5zX2FpbF9kZWxldGVfYnVsayhhaWxwLCAmbGlwLCAxKTsKIH0KIAotdm9pZAkJCXhmc190cmFuc19haWxfcHVzaChzdHJ1Y3QgeGZzX2FpbCAqLCB4ZnNfbHNuX3QpOwordm9pZAkJCXhmc19haWxfcHVzaChzdHJ1Y3QgeGZzX2FpbCAqLCB4ZnNfbHNuX3QpOwordm9pZAkJCXhmc19haWxfcHVzaF9hbGwoc3RydWN0IHhmc19haWwgKik7Cit4ZnNfbHNuX3QJCXhmc19haWxfbWluX2xzbihzdHJ1Y3QgeGZzX2FpbCAqYWlscCk7CisKIHZvaWQJCQl4ZnNfdHJhbnNfdW5sb2NrZWRfaXRlbShzdHJ1Y3QgeGZzX2FpbCAqLAogCQkJCQl4ZnNfbG9nX2l0ZW1fdCAqKTsKIAoteGZzX2xzbl90CQl4ZnNfdHJhbnNfYWlsX3RhaWwoc3RydWN0IHhmc19haWwgKmFpbHApOwotCiBzdHJ1Y3QgeGZzX2xvZ19pdGVtCSp4ZnNfdHJhbnNfYWlsX2N1cnNvcl9maXJzdChzdHJ1Y3QgeGZzX2FpbCAqYWlscCwKIAkJCQkJc3RydWN0IHhmc19haWxfY3Vyc29yICpjdXIsCiAJCQkJCXhmc19sc25fdCBsc24pOwpAQCAtMTEyLDExICsxMTksNiBAQAogdm9pZAkJCXhmc190cmFuc19haWxfY3Vyc29yX2RvbmUoc3RydWN0IHhmc19haWwgKmFpbHAsCiAJCQkJCXN0cnVjdCB4ZnNfYWlsX2N1cnNvciAqY3VyKTsKIAotbG9uZwl4ZnNhaWxkX3B1c2goc3RydWN0IHhmc19haWwgKiwgeGZzX2xzbl90ICopOwotdm9pZAl4ZnNhaWxkX3dha2V1cChzdHJ1Y3QgeGZzX2FpbCAqLCB4ZnNfbHNuX3QpOwotaW50CXhmc2FpbGRfc3RhcnQoc3RydWN0IHhmc19haWwgKik7Ci12b2lkCXhmc2FpbGRfc3RvcChzdHJ1Y3QgeGZzX2FpbCAqKTsKLQogI2lmIEJJVFNfUEVSX0xPTkcgIT0gNjQKIHN0YXRpYyBpbmxpbmUgdm9pZAogeGZzX3RyYW5zX2FpbF9jb3B5X2xzbigKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCBjNDhiNDIxLi5iN2E1ZmU3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC05NTMsNyArOTUzLDcgQEAKIAkJICogSWYgd2UgcHJldmlvdXNseSB0cnVuY2F0ZWQgdGhpcyBmaWxlIGFuZCByZW1vdmVkIG9sZCBkYXRhCiAJCSAqIGluIHRoZSBwcm9jZXNzLCB3ZSB3YW50IHRvIGluaXRpYXRlICJlYXJseSIgd3JpdGVvdXQgb24KIAkJICogdGhlIGxhc3QgY2xvc2UuICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gY29tYmF0IHRoZSBub3RvcmlvdXMKLQkJICogTlVMTCBmaWxlcyBwcm9ibGVtIHdoaWNoIGlzIHBhcnRpY3VsYXJseSBub3RpY2FibGUgZnJvbSBhCisJCSAqIE5VTEwgZmlsZXMgcHJvYmxlbSB3aGljaCBpcyBwYXJ0aWN1bGFybHkgbm90aWNlYWJsZSBmcm9tIGEKIAkJICogdHJ1bmNhdGUgZG93biwgYnVmZmVyZWQgKHJlLSl3cml0ZSAoZGVsYWxsb2MpLCBmb2xsb3dlZCBieQogCQkgKiBhIGNyYXNoLiAgV2hhdCB3ZSBhcmUgZWZmZWN0aXZlbHkgZG9pbmcgaGVyZSBpcwogCQkgKiBzaWduaWZpY2FudGx5IHJlZHVjaW5nIHRoZSB0aW1lIHdpbmRvdyB3aGVyZSB3ZSdkIG90aGVyd2lzZQpAQCAtOTgyLDcgKzk4Miw3IEBACiAJCSAqCiAJCSAqIEZ1cnRoZXIsIGNoZWNrIGlmIHRoZSBpbm9kZSBpcyBiZWluZyBvcGVuZWQsIHdyaXR0ZW4gYW5kCiAJCSAqIGNsb3NlZCBmcmVxdWVudGx5IGFuZCB3ZSBoYXZlIGRlbGF5ZWQgYWxsb2NhdGlvbiBibG9ja3MKLQkJICogb3VzdGFuZGluZyAoZS5nLiBzdHJlYW1pbmcgd3JpdGVzIGZyb20gdGhlIE5GUyBzZXJ2ZXIpLAorCQkgKiBvdXRzdGFuZGluZyAoZS5nLiBzdHJlYW1pbmcgd3JpdGVzIGZyb20gdGhlIE5GUyBzZXJ2ZXIpLAogCQkgKiB0cnVuY2F0aW5nIHRoZSBibG9ja3MgcGFzdCBFT0Ygd2lsbCBjYXVzZSBmcmFnbWVudGF0aW9uIHRvCiAJCSAqIG9jY3VyLgogCQkgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCBkNDFjOTQ4Li5mMTM4MDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtMjkwLDcgKzI5MCw3IEBACiAjZGVmaW5lIEFDUElfRkFEVF9BUElDX0NMVVNURVIgICAgICAoMTw8MTgpCS8qIDE4OiBbVjRdIEFsbCBsb2NhbCBBUElDcyBtdXN0IHVzZSBjbHVzdGVyIG1vZGVsIChBQ1BJIDMuMCkgKi8KICNkZWZpbmUgQUNQSV9GQURUX0FQSUNfUEhZU0lDQUwgICAgICgxPDwxOSkJLyogMTk6IFtWNF0gQWxsIGxvY2FsIHhfYVBJQ3MgbXVzdCB1c2UgcGh5c2ljYWwgZGVzdCBtb2RlIChBQ1BJIDMuMCkgKi8KIAotLyogVmFsdWVzIGZvciBwcmVmZXJyZWRfcHJvZmlsZSAoUHJlZmVyZWQgUG93ZXIgTWFuYWdlbWVudCBQcm9maWxlcykgKi8KKy8qIFZhbHVlcyBmb3IgcHJlZmVycmVkX3Byb2ZpbGUgKFByZWZlcnJlZCBQb3dlciBNYW5hZ2VtZW50IFByb2ZpbGVzKSAqLwogCiBlbnVtIGFjcGlfcHJlZmVyZWRfcG1fcHJvZmlsZXMgewogCVBNX1VOU1BFQ0lGSUVEID0gMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IGYyZDJmYWYuLmU1YTNmNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtMTk0LDYgKzE5NCwxMyBAQAogI2lmZGVmIENPTkZJR19TTVAKICMgZGVmaW5lIFdBUk5fT05fU01QKHgpCQkJV0FSTl9PTih4KQogI2Vsc2UKKy8qCisgKiBVc2Ugb2YgKHswO30pIGJlY2F1c2UgV0FSTl9PTl9TTVAoeCkgbWF5IGJlIHVzZWQgZWl0aGVyIGFzCisgKiBhIHN0YW5kIGFsb25lIGxpbmUgc3RhdGVtZW50IG9yIGFzIGEgY29uZGl0aW9uIGluIGFuIGlmICgpCisgKiBzdGF0ZW1lbnQuCisgKiBBIHNpbXBsZSAiMCIgd291bGQgY2F1c2UgZ2NjIHRvIGdpdmUgYSAic3RhdGVtZW50IGhhcyBubyBlZmZlY3QiCisgKiB3YXJuaW5nLgorICovCiAjIGRlZmluZSBXQVJOX09OX1NNUCh4KQkJCSh7MDt9KQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKaW5kZXggOTQyZDMwYi4uMGRkNGU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKQEAgLTE5Miw3ICsxOTIsNyBAQAogICogU0lHQlVTIHNpX2NvZGVzCiAgKi8KICNkZWZpbmUgQlVTX0FEUkFMTgkoX19TSV9GQVVMVHwxKQkvKiBpbnZhbGlkIGFkZHJlc3MgYWxpZ25tZW50ICovCi0jZGVmaW5lIEJVU19BRFJFUlIJKF9fU0lfRkFVTFR8MikJLyogbm9uLWV4aXN0YW50IHBoeXNpY2FsIGFkZHJlc3MgKi8KKyNkZWZpbmUgQlVTX0FEUkVSUgkoX19TSV9GQVVMVHwyKQkvKiBub24tZXhpc3RlbnQgcGh5c2ljYWwgYWRkcmVzcyAqLwogI2RlZmluZSBCVVNfT0JKRVJSCShfX1NJX0ZBVUxUfDMpCS8qIG9iamVjdCBzcGVjaWZpYyBoYXJkd2FyZSBlcnJvciAqLwogLyogaGFyZHdhcmUgbWVtb3J5IGVycm9yIGNvbnN1bWVkIG9uIGEgbWFjaGluZSBjaGVjazogYWN0aW9uIHJlcXVpcmVkICovCiAjZGVmaW5lIEJVU19NQ0VFUlJfQVIJKF9fU0lfRkFVTFR8NCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCAzMmM0NWU1Li5iZDI5N2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC03NzMsNyArNzczLDcgQEAKICAqIHRoZSBzZWN0aW9ucyB0aGF0IGhhcyB0aGlzIHJlc3RyaWN0aW9uIChvciBzaW1pbGFyKQogICogaXMgbG9jYXRlZCBiZWZvcmUgdGhlIG9uZXMgcmVxdWlyaW5nIFBBR0VfU0laRSBhbGlnbm1lbnQuCiAgKiBOT1NBVkVfREFUQSBzdGFydHMgYW5kIGVuZHMgd2l0aCBhIFBBR0VfU0laRSBhbGlnbm1lbnQgd2hpY2gKLSAqIG1hdGNoZXMgdGhlIHJlcXVpcm1lbnQgb2YgUEFHRV9BTElHTkVEX0RBVEEuCisgKiBtYXRjaGVzIHRoZSByZXF1aXJlbWVudCBvZiBQQUdFX0FMSUdORURfREFUQS4KICAqCiAgKiB1c2UgMCBhcyBwYWdlX2FsaWduIGlmIHBhZ2VfYWxpZ25lZCBkYXRhIGlzIG5vdCB1c2VkICovCiAjZGVmaW5lIFJXX0RBVEFfU0VDVElPTihjYWNoZWxpbmUsIHBhZ2VhbGlnbmVkLCBpbml0dGFzaykJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCBhZDU3NzBmLi4yMDI0MjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC05NSw3ICs5NSw3IEBACiAgKiBkcm1fY29yZSwgZHJtX2RyaXZlciwgZHJtX2ttcwogICogZHJtX2NvcmUgbGV2ZWwgY2FuIGJlIHVzZWQgaW4gdGhlIGdlbmVyaWMgZHJtIGNvZGUuIEZvciBleGFtcGxlOgogICogCWRybV9pb2N0bCwgZHJtX21tLCBkcm1fbWVtb3J5Ci0gKiBUaGUgbWFjcm8gZGVmaW5pdG9uIG9mIERSTV9ERUJVRyBpcyB1c2VkLgorICogVGhlIG1hY3JvIGRlZmluaXRpb24gb2YgRFJNX0RFQlVHIGlzIHVzZWQuCiAgKiAJRFJNX0RFQlVHKGZtdCwgYXJncy4uLikKICAqIAlUaGUgZGVidWcgaW5mbyBieSB1c2luZyB0aGUgRFJNX0RFQlVHIGNhbiBiZSBvYnRhaW5lZCBieSBhZGRpbmcKICAqIAl0aGUgYm9vdCBvcHRpb24gb2YgImRybS5kZWJ1Zz0xIi4KQEAgLTgwOCw3ICs4MDgsNyBAQAogCSAqCiAJICogXHJldHVybiBGbGFncywgb3InZWQgdG9nZXRoZXIgYXMgZm9sbG93czoKIAkgKgotCSAqIERSTV9TQ0FOT1VUUE9TX1ZBTElEID0gUXVlcnkgc3VjY2Vzc2Z1bGwuCisJICogRFJNX1NDQU5PVVRQT1NfVkFMSUQgPSBRdWVyeSBzdWNjZXNzZnVsLgogCSAqIERSTV9TQ0FOT1VUUE9TX0lOVkJMID0gSW5zaWRlIHZibGFuay4KIAkgKiBEUk1fU0NBTk9VVFBPU19BQ0NVUkFURSA9IFJldHVybmVkIHBvc2l0aW9uIGlzIGFjY3VyYXRlLiBBIGxhY2sgb2YKIAkgKiB0aGlzIGZsYWcgbWVhbnMgdGhhdCByZXR1cm5lZCBwb3NpdGlvbiBtYXkgYmUgb2Zmc2V0IGJ5IGEgY29uc3RhbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IDYwZWRmOWIuLmQ5NDY4NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtNjUsNyArNjUsNyBAQAogICAgIE1PREVfSF9JTExFR0FMLAkvKiBtb2RlIGhhcyBpbGxlZ2FsIGhvcml6b250YWwgdGltaW5ncyAqLwogICAgIE1PREVfVl9JTExFR0FMLAkvKiBtb2RlIGhhcyBpbGxlZ2FsIGhvcml6b250YWwgdGltaW5ncyAqLwogICAgIE1PREVfQkFEX1dJRFRILAkvKiByZXF1aXJlcyBhbiB1bnN1cHBvcnRlZCBsaW5lcGl0Y2ggKi8KLSAgICBNT0RFX05PTU9ERSwJLyogbm8gbW9kZSB3aXRoIGEgbWFjaGluZyBuYW1lICovCisgICAgTU9ERV9OT01PREUsCS8qIG5vIG1vZGUgd2l0aCBhIG1hdGNoaW5nIG5hbWUgKi8KICAgICBNT0RFX05PX0lOVEVSTEFDRSwJLyogaW50ZXJsYWNlZCBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KICAgICBNT0RFX05PX0RCTEVTQ0FOLAkvKiBkb3VibGVzY2FuIG1vZGUgbm90IHN1cHBvcnRlZCAqLwogICAgIE1PREVfTk9fVlNDQU4sCS8qIG11bHRpc2NhbiBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KQEAgLTMyMSw3ICszMjEsNyBAQAogCiAJLyoKIAkgKiBGbGlwIHRvIHRoZSBnaXZlbiBmcmFtZWJ1ZmZlci4gIFRoaXMgaW1wbGVtZW50cyB0aGUgcGFnZQotCSAqIGZsaXAgaW9jdGwgZGVzY2liZWQgaW4gZHJtX21vZGUuaCwgc3BlY2lmaWNhbGx5LCB0aGUKKwkgKiBmbGlwIGlvY3RsIGRlc2NyaWJlZCBpbiBkcm1fbW9kZS5oLCBzcGVjaWZpY2FsbHksIHRoZQogCSAqIGltcGxlbWVudGF0aW9uIG11c3QgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCBibG9jayBhbGwKIAkgKiByZW5kZXJpbmcgdG8gdGhlIGN1cnJlbnQgZmIgdW50aWwgdGhlIGZsaXAgaGFzIGNvbXBsZXRlZC4KIAkgKiBJZiB1c2Vyc3BhY2Ugc2V0IHRoZSBldmVudCBmbGFnIGluIHRoZSBpb2N0bCwgdGhlIGV2ZW50CkBAIC03NzgsNiArNzc4LDcgQEAKIAkJCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBkcm1fbW9kZV9nYW1tYV9zZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHU4ICpkcm1fZmluZF9jZWFfZXh0ZW5zaW9uKHN0cnVjdCBlZGlkICplZGlkKTsKIGV4dGVybiBib29sIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHN0cnVjdCBlZGlkICplZGlkKTsKIGV4dGVybiBib29sIGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhzdHJ1Y3QgZWRpZCAqZWRpZCk7CiBleHRlcm4gaW50IGRybV9tb2RlX3BhZ2VfZmxpcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCmluZGV4IGYyMmU3ZmUuLmM5OWMzZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTExOCw2ICsxMTgsNyBAQAogCQkJICAgIHVuc2lnbmVkIHRyYW5zcCwKIAkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKK2Jvb2wgZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21vZGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7CiB2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZSh2b2lkKTsKIHZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJCSAgICB1aW50MzJfdCBmYl93aWR0aCwgdWludDMyX3QgZmJfaGVpZ2h0KTsKQEAgLTEyNiw3ICsxMjcsNyBAQAogCiBpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKLWJvb2wgZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpOworaW50IGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKIGJvb2wgZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBpbnQgYnBwX3NlbCk7CiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpOwogaW50IGRybV9mYl9oZWxwZXJfZGVidWdfZW50ZXIoc3RydWN0IGZiX2luZm8gKmluZm8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21tLmggYi9pbmNsdWRlL2RybS9kcm1fbW0uaAppbmRleCBiMWU3ODA5Li41NjRiMTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fbW0uaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW0uaApAQCAtNTYsNyArNTYsNyBAQAogfTsKIAogc3RydWN0IGRybV9tbSB7Ci0JLyogTGlzdCBvZiBhbGwgbWVtb3J5IG5vZGVzIHRoYXQgaW1tZWRpYXRseSBwcmVjZWVkIGEgZnJlZSBob2xlLiAqLworCS8qIExpc3Qgb2YgYWxsIG1lbW9yeSBub2RlcyB0aGF0IGltbWVkaWF0ZWx5IHByZWNlZGUgYSBmcmVlIGhvbGUuICovCiAJc3RydWN0IGxpc3RfaGVhZCBob2xlX3N0YWNrOwogCS8qIGhlYWRfbm9kZS5ub2RlX2xpc3QgaXMgdGhlIGxpc3Qgb2YgYWxsIG1lbW9yeSBub2Rlcywgb3JkZXJlZAogCSAqIGFjY29yZGluZyB0byB0aGUgKGluY3JlYXNpbmcpIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBub2RlLiAqLwpAQCAtODYsNyArODYsNyBAQAogfQogI2RlZmluZSBkcm1fbW1fZm9yX2VhY2hfbm9kZShlbnRyeSwgbW0pIGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFwKIAkJCQkJCSYobW0pLT5oZWFkX25vZGUubm9kZV9saXN0LCBcCi0JCQkJCQlub2RlX2xpc3QpOworCQkJCQkJbm9kZV9saXN0KQogI2RlZmluZSBkcm1fbW1fZm9yX2VhY2hfc2Nhbm5lZF9ub2RlX3JldmVyc2UoZW50cnksIG4sIG1tKSBcCiAJZm9yIChlbnRyeSA9IChtbSktPnByZXZfc2Nhbm5lZF9ub2RlLCBcCiAJCW5leHQgPSBlbnRyeSA/IGxpc3RfZW50cnkoZW50cnktPm5vZGVfbGlzdC5uZXh0LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAppbmRleCBhZTZiN2EzLi5jNDk2MWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKQEAgLTI3Nyw3ICsyNzcsNyBAQAogI2RlZmluZSBEUk1fTU9ERV9DVVJTT1JfTU9WRQkoMTw8MSkKIAogLyoKLSAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgaW4gZmxhZ3MgZGlmZnJlbnQgbWVtYmVycyBhcmUgdXNlZC4KKyAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgaW4gZmxhZ3MgZGlmZmVyZW50IG1lbWJlcnMgYXJlIHVzZWQuCiAgKgogICogQ1VSU09SX0JPIHVzZXMKICAqICAgIGNydGMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCA4MjBlZTkwLi5mMDRiMmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC0xNTUsNiArMTU1LDcgQEAKIAl7MHgxMDAyLCAweDY3MTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FZTUFOfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjcxYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQVlNQU58UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzFkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBWU1BTnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3MWYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FZTUFOfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjcyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0xNjcsNiArMTY4LDcgQEAKIAl7MHgxMDAyLCAweDY3MjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzM4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjczOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3M2UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njc0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0xOTksNiArMjAxLDcgQEAKIAl7MHgxMDAyLCAweDY4OEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4OTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4OTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4OWIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4OWMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSEVNTE9DS3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4OWQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSEVNTE9DS3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4OWUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTIwOSw3ICsyMTIsOSBAQAogCXsweDEwMDIsIDB4NjhiMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YmEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YmUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YmYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGMxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JFRFdPT0R8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhjNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SRURXT09EfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTQ3Miw2ICs0NzcsOCBAQAogCXsweDEwMDIsIDB4OTgwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9QQUxNfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg5ODA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1BBTE18UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk4MDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUEFMTXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTgwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9QQUxNfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5ODA3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1BBTE18UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MCwgMCwgMH0KIAogI2RlZmluZSByMTI4X1BDSV9JRFMgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oIGIvaW5jbHVkZS9kcm0vbWdhX2RybS5oCmluZGV4IGMxNjA5N2YuLmZjYTgxNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL21nYV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogICovCiAjZGVmaW5lIE1HQV9OUl9TQVJFQV9DTElQUkVDVFMJOAogCi0vKiAyIGhlYXBzICgxIGZvciBjYXJkLCAxIGZvciBhZ3ApLCBlYWNoIGRpdmlkZWQgaW50byB1cHRvIDEyOAorLyogMiBoZWFwcyAoMSBmb3IgY2FyZCwgMSBmb3IgYWdwKSwgZWFjaCBkaXZpZGVkIGludG8gdXAgdG8gMTI4CiAgKiByZWdpb25zLCBzdWJqZWN0IHRvIGEgbWluaW11bSByZWdpb24gc2l6ZSBvZiAoMTw8MTYpID09IDY0ay4KICAqCiAgKiBDbGllbnRzIG1heSBzdWJkaXZpZGUgcmVnaW9ucyBpbnRlcm5hbGx5LCBidXQgd2hlbiBzaGFyaW5nIGJldHdlZW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCAzZGVjNDFjLi43ODdmN2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC02NDEsNyArNjQxLDcgQEAKIH0gZHJtX3JhZGVvbl92ZXJ0ZXgyX3Q7CiAKIC8qIHYxLjMgLSBvYnNvbGV0ZXMgZHJtX3JhZGVvbl92ZXJ0ZXgyCi0gKiAgICAgIC0gYWxsb3dzIGFyYml0YXJpbHkgbGFyZ2UgY2xpcHJlY3QgbGlzdAorICogICAgICAtIGFsbG93cyBhcmJpdHJhcmlseSBsYXJnZSBjbGlwcmVjdCBsaXN0CiAgKiAgICAgIC0gYWxsb3dzIHVwZGF0aW5nIG9mIHRjbCBwYWNrZXQsIHZlY3RvciBhbmQgc2NhbGFyIHN0YXRlCiAgKiAgICAgIC0gYWxsb3dzIG1lbW9yeS1lZmZpY2llbnQgZGVzY3JpcHRpb24gb2Ygc3RhdGUgdXBkYXRlcwogICogICAgICAtIGFsbG93cyBzdGF0ZSB0byBiZSBlbWl0dGVkIHdpdGhvdXQgYSBwcmltaXRpdmUKQEAgLTkwOSw2ICs5MDksOCBAQAogI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0NNQVNLCQkweDA4IC8qIGdldCBhY2Nlc3MgdG8gQ01BU0sgb24gcjMwMCAqLwogI2RlZmluZSBSQURFT05fSU5GT19DTE9DS19DUllTVEFMX0ZSRVEJMHgwOSAvKiBjbG9jayBjcnlzdGFsIGZyZXF1ZW5jeSAqLwogI2RlZmluZSBSQURFT05fSU5GT19OVU1fQkFDS0VORFMJMHgwYSAvKiBEQi9iYWNrZW5kcyBmb3IgcjYwMCsgLSBuZWVkIGZvciBPUSAqLworI2RlZmluZSBSQURFT05fSU5GT19OVU1fVElMRV9QSVBFUwkweDBiIC8qIHRpbGUgcGlwZXMgZm9yIHI2MDArICovCisjZGVmaW5lIFJBREVPTl9JTkZPX0ZVU0lPTl9HQVJUX1dPUktJTkcJMHgwYyAvKiBmdXNpb24gd3JpdGVzIHRvIEdUVCB3ZXJlIGJyb2tlbiBiZWZvcmUgdGhpcyAqLwogCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKIAl1aW50MzJfdAkJcmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3NhdmFnZV9kcm0uaCBiL2luY2x1ZGUvZHJtL3NhdmFnZV9kcm0uaAppbmRleCA0ODYzY2Y2Li44MThkNDliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9zYXZhZ2VfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vc2F2YWdlX2RybS5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaWZuZGVmIF9fU0FWQUdFX1NBUkVBX0RFRklORVNfXwogI2RlZmluZSBfX1NBVkFHRV9TQVJFQV9ERUZJTkVTX18KIAotLyogMiBoZWFwcyAoMSBmb3IgY2FyZCwgMSBmb3IgYWdwKSwgZWFjaCBkaXZpZGVkIGludG8gdXB0byAxMjgKKy8qIDIgaGVhcHMgKDEgZm9yIGNhcmQsIDEgZm9yIGFncCksIGVhY2ggZGl2aWRlZCBpbnRvIHVwIHRvIDEyOAogICogcmVnaW9ucywgc3ViamVjdCB0byBhIG1pbmltdW0gcmVnaW9uIHNpemUgb2YgKDE8PDE2KSA9PSA2NGsuCiAgKgogICogQ2xpZW50cyBtYXkgc3ViZGl2aWRlIHJlZ2lvbnMgaW50ZXJuYWxseSwgYnV0IHdoZW4gc2hhcmluZyBiZXR3ZWVuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaAppbmRleCA1MDg1MmFhLi42MmEwZTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmgKQEAgLTUwLDEwICs1MCwxMCBAQAogICoKICAqIEBmcGZuOgkJZmlyc3QgdmFsaWQgcGFnZSBmcmFtZSBudW1iZXIgdG8gcHV0IHRoZSBvYmplY3QKICAqIEBscGZuOgkJbGFzdCB2YWxpZCBwYWdlIGZyYW1lIG51bWJlciB0byBwdXQgdGhlIG9iamVjdAotICogQG51bV9wbGFjZW1lbnQ6CW51bWJlciBvZiBwcmVmZXJlZCBwbGFjZW1lbnRzCi0gKiBAcGxhY2VtZW50OgkJcHJlZmVyZWQgcGxhY2VtZW50cwotICogQG51bV9idXN5X3BsYWNlbWVudDoJbnVtYmVyIG9mIHByZWZlcmVkIHBsYWNlbWVudHMgd2hlbiBuZWVkIHRvIGV2aWN0IGJ1ZmZlcgotICogQGJ1c3lfcGxhY2VtZW50OglwcmVmZXJlZCBwbGFjZW1lbnRzIHdoZW4gbmVlZCB0byBldmljdCBidWZmZXIKKyAqIEBudW1fcGxhY2VtZW50OgludW1iZXIgb2YgcHJlZmVycmVkIHBsYWNlbWVudHMKKyAqIEBwbGFjZW1lbnQ6CQlwcmVmZXJyZWQgcGxhY2VtZW50cworICogQG51bV9idXN5X3BsYWNlbWVudDoJbnVtYmVyIG9mIHByZWZlcnJlZCBwbGFjZW1lbnRzIHdoZW4gbmVlZCB0byBldmljdCBidWZmZXIKKyAqIEBidXN5X3BsYWNlbWVudDoJcHJlZmVycmVkIHBsYWNlbWVudHMgd2hlbiBuZWVkIHRvIGV2aWN0IGJ1ZmZlcgogICoKICAqIFN0cnVjdHVyZSBpbmRpY2F0aW5nIHRoZSBwbGFjZW1lbnQgeW91IHJlcXVlc3QgZm9yIGFuIG9iamVjdC4KICAqLwpAQCAtMTU4LDkgKzE1OCw5IEBACiAgKiB0aGUgb2JqZWN0IGlzIGRlc3Ryb3llZC4KICAqIEBldmVudF9xdWV1ZTogUXVldWUgZm9yIHByb2Nlc3NlcyB3YWl0aW5nIG9uIGJ1ZmZlciBvYmplY3Qgc3RhdHVzIGNoYW5nZS4KICAqIEBtZW06IHN0cnVjdHVyZSBkZXNjcmliaW5nIGN1cnJlbnQgcGxhY2VtZW50LgotICogQHBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlOiBVc3VhbGx5IHRoZSBzd2FwIHN0b3JhZ2UgaXMgZGVsZXRlZCBmb3IgYnVmZmVycworICogQHBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlOiBVc3VhbGx5IHRoZSBzd2FwIHN0b3JhZ2UgaXMgZGVsZXRlZCBmb3IgYnVmZmVycwogICogcGlubmVkIGluIHBoeXNpY2FsIG1lbW9yeS4gSWYgdGhpcyBiZWhhdmlvdXIgaXMgbm90IGRlc2lyZWQsIHRoaXMgbWVtYmVyCi0gKiBob2xkcyBhIHBvaW50ZXIgdG8gYSBwZXJzaXN0YW50IHNobWVtIG9iamVjdC4KKyAqIGhvbGRzIGEgcG9pbnRlciB0byBhIHBlcnNpc3RlbnQgc2htZW0gb2JqZWN0LgogICogQHR0bTogVFRNIHN0cnVjdHVyZSBob2xkaW5nIHN5c3RlbSBwYWdlcy4KICAqIEBldmljdGVkOiBXaGV0aGVyIHRoZSBvYmplY3Qgd2FzIGV2aWN0ZWQgd2l0aG91dCB1c2VyLXNwYWNlIGtub3dpbmcuCiAgKiBAY3B1X3dyaXRlczogRm9yIHN5bmNocm9uaXphdGlvbi4gTnVtYmVyIG9mIGNwdSB3cml0ZXJzLgpAQCAtMjIxLDcgKzIyMSw3IEBACiAJICovCiAKIAlzdHJ1Y3QgdHRtX21lbV9yZWcgbWVtOwotCXN0cnVjdCBmaWxlICpwZXJzaXN0YW50X3N3YXBfc3RvcmFnZTsKKwlzdHJ1Y3QgZmlsZSAqcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2U7CiAJc3RydWN0IHR0bV90dCAqdHRtOwogCWJvb2wgZXZpY3RlZDsKIApAQCAtNDU5LDkgKzQ1OSw5IEBACiAgKiB1c2VyIGJ1ZmZlciBvYmplY3QuCiAgKiBAaW50ZXJydXB0aWJsZTogSWYgbmVlZGluZyB0byBzbGVlcCB0byB3YWl0IGZvciBHUFUgcmVzb3VyY2VzLAogICogc2xlZXAgaW50ZXJydXB0aWJsZS4KLSAqIEBwZXJzaXN0YW50X3N3YXBfc3RvcmFnZTogVXN1YWxseSB0aGUgc3dhcCBzdG9yYWdlIGlzIGRlbGV0ZWQgZm9yIGJ1ZmZlcnMKKyAqIEBwZXJzaXN0ZW50X3N3YXBfc3RvcmFnZTogVXN1YWxseSB0aGUgc3dhcCBzdG9yYWdlIGlzIGRlbGV0ZWQgZm9yIGJ1ZmZlcnMKICAqIHBpbm5lZCBpbiBwaHlzaWNhbCBtZW1vcnkuIElmIHRoaXMgYmVoYXZpb3VyIGlzIG5vdCBkZXNpcmVkLCB0aGlzIG1lbWJlcgotICogaG9sZHMgYSBwb2ludGVyIHRvIGEgcGVyc2lzdGFudCBzaG1lbSBvYmplY3QuIFR5cGljYWxseSwgdGhpcyB3b3VsZAorICogaG9sZHMgYSBwb2ludGVyIHRvIGEgcGVyc2lzdGVudCBzaG1lbSBvYmplY3QuIFR5cGljYWxseSwgdGhpcyB3b3VsZAogICogcG9pbnQgdG8gdGhlIHNobWVtIG9iamVjdCBiYWNraW5nIGEgR0VNIG9iamVjdCBpZiBUVE0gaXMgdXNlZCB0byBiYWNrIGEKICAqIEdFTSB1c2VyIGludGVyZmFjZS4KICAqIEBhY2Nfc2l6ZTogQWNjb3VudGVkIHNpemUgZm9yIHRoaXMgb2JqZWN0LgpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJCQl1aW50MzJfdCBwYWdlX2FsaWdubWVudCwKIAkJCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3N0YXJ0LAogCQkJYm9vbCBpbnRlcnJ1YnRpYmxlLAotCQkJc3RydWN0IGZpbGUgKnBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlLAorCQkJc3RydWN0IGZpbGUgKnBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlLAogCQkJc2l6ZV90IGFjY19zaXplLAogCQkJdm9pZCAoKmRlc3Ryb3kpIChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKikpOwogLyoqCkBAIC01MDYsOSArNTA2LDkgQEAKICAqIHVzZXIgYnVmZmVyIG9iamVjdC4KICAqIEBpbnRlcnJ1cHRpYmxlOiBJZiBuZWVkaW5nIHRvIHNsZWVwIHdoaWxlIHdhaXRpbmcgZm9yIEdQVSByZXNvdXJjZXMsCiAgKiBzbGVlcCBpbnRlcnJ1cHRpYmxlLgotICogQHBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlOiBVc3VhbGx5IHRoZSBzd2FwIHN0b3JhZ2UgaXMgZGVsZXRlZCBmb3IgYnVmZmVycworICogQHBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlOiBVc3VhbGx5IHRoZSBzd2FwIHN0b3JhZ2UgaXMgZGVsZXRlZCBmb3IgYnVmZmVycwogICogcGlubmVkIGluIHBoeXNpY2FsIG1lbW9yeS4gSWYgdGhpcyBiZWhhdmlvdXIgaXMgbm90IGRlc2lyZWQsIHRoaXMgbWVtYmVyCi0gKiBob2xkcyBhIHBvaW50ZXIgdG8gYSBwZXJzaXN0YW50IHNobWVtIG9iamVjdC4gVHlwaWNhbGx5LCB0aGlzIHdvdWxkCisgKiBob2xkcyBhIHBvaW50ZXIgdG8gYSBwZXJzaXN0ZW50IHNobWVtIG9iamVjdC4gVHlwaWNhbGx5LCB0aGlzIHdvdWxkCiAgKiBwb2ludCB0byB0aGUgc2htZW0gb2JqZWN0IGJhY2tpbmcgYSBHRU0gb2JqZWN0IGlmIFRUTSBpcyB1c2VkIHRvIGJhY2sgYQogICogR0VNIHVzZXIgaW50ZXJmYWNlLgogICogQHBfYm86IE9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiAqcF9ibyBwb2ludHMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LgpAQCAtNTI4LDcgKzUyOCw3IEBACiAJCQkJdWludDMyX3QgcGFnZV9hbGlnbm1lbnQsCiAJCQkJdW5zaWduZWQgbG9uZyBidWZmZXJfc3RhcnQsCiAJCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLAotCQkJCXN0cnVjdCBmaWxlICpwZXJzaXN0YW50X3N3YXBfc3RvcmFnZSwKKwkJCQlzdHJ1Y3QgZmlsZSAqcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2UsCiAJCQkJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICoqcF9ibyk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKaW5kZXggZWZlZDA4Mi4uMDlhZjJkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCkBAIC0xMjIsNyArMTIyLDcgQEAKICNkZWZpbmUgVFRNX1BBR0VfRkxBR19VU0VSX0RJUlRZICAgICAgKDEgPDwgMikKICNkZWZpbmUgVFRNX1BBR0VfRkxBR19XUklURSAgICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgVFRNX1BBR0VfRkxBR19TV0FQUEVEICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgVFRNX1BBR0VfRkxBR19QRVJTSVNUQU5UX1NXQVAgKDEgPDwgNSkKKyNkZWZpbmUgVFRNX1BBR0VfRkxBR19QRVJTSVNURU5UX1NXQVAgKDEgPDwgNSkKICNkZWZpbmUgVFRNX1BBR0VfRkxBR19aRVJPX0FMTE9DICAgICAgKDEgPDwgNikKICNkZWZpbmUgVFRNX1BBR0VfRkxBR19ETUEzMiAgICAgICAgICAgKDEgPDwgNykKIApAQCAtMjIzLDkgKzIyMyw5IEBACiAJICogQG1lbTo6bW1fbm9kZSBzaG91bGQgYmUgc2V0IHRvIGEgbm9uLW51bGwgdmFsdWUsIGFuZAogCSAqIEBtZW06OnN0YXJ0IHNob3VsZCBiZSBzZXQgdG8gYSB2YWx1ZSBpZGVudGlmeWluZyB0aGUgYmVnaW5uaW5nCiAJICogb2YgdGhlIHJhbmdlIGFsbG9jYXRlZCwgYW5kIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHplcm8uCi0JICogSWYgdGhlIG1lbW9yeSByZWdpb24gYWNjb21vZGF0ZSB0aGUgYnVmZmVyIG9iamVjdCwgQG1lbTo6bW1fbm9kZQorCSAqIElmIHRoZSBtZW1vcnkgcmVnaW9uIGFjY29tbW9kYXRlIHRoZSBidWZmZXIgb2JqZWN0LCBAbWVtOjptbV9ub2RlCiAJICogc2hvdWxkIGJlIHNldCB0byBOVUxMLCBhbmQgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMC4KLQkgKiBJZiBhIHN5c3RlbSBlcnJvciBvY2N1cmVkLCBwcmV2ZW50aW5nIHRoZSByZXF1ZXN0IHRvIGJlIGZ1bGZpbGxlZCwKKwkgKiBJZiBhIHN5c3RlbSBlcnJvciBvY2N1cnJlZCwgcHJldmVudGluZyB0aGUgcmVxdWVzdCB0byBiZSBmdWxmaWxsZWQsCiAJICogdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogCSAqCiAJICogTm90ZSB0aGF0IEBtZW06Om1tX25vZGUgd2lsbCBvbmx5IGJlIGRlcmVmZXJlbmNlZCBieQpAQCAtNzE0LDcgKzcxNCw3IEBACiAgKi8KIGV4dGVybiBpbnQgdHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVpbnQzMl90IHBsYWNlbWVudCk7CiBleHRlcm4gaW50IHR0bV90dF9zd2Fwb3V0KHN0cnVjdCB0dG1fdHQgKnR0bSwKLQkJCSAgc3RydWN0IGZpbGUgKnBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlKTsKKwkJCSAgc3RydWN0IGZpbGUgKnBlcnNpc3RlbnRfc3dhcF9zdG9yYWdlKTsKIAogLyoKICAqIHR0bV9iby5jCkBAIC04NDEsNyArODQxLDcgQEAKICAqIGRpZmZlcmVudCBvcmRlciwgZWl0aGVyIGJ5IHdpbGwgb3IgYXMgYSByZXN1bHQgb2YgYSBidWZmZXIgYmVpbmcgZXZpY3RlZAogICogdG8gbWFrZSByb29tIGZvciBhIGJ1ZmZlciBhbHJlYWR5IHJlc2VydmVkLiAoQnVmZmVycyBhcmUgcmVzZXJ2ZWQgYmVmb3JlCiAgKiB0aGV5IGFyZSBldmljdGVkKS4gVGhlIGZvbGxvd2luZyBhbGdvcml0aG0gcHJldmVudHMgc3VjaCBkZWFkbG9ja3MgZnJvbQotICogb2NjdXJpbmc6CisgKiBvY2N1cnJpbmc6CiAgKiAxKSBCdWZmZXJzIGFyZSByZXNlcnZlZCB3aXRoIHRoZSBscnUgc3BpbmxvY2sgaGVsZC4gVXBvbiBzdWNjZXNzZnVsCiAgKiByZXNlcnZhdGlvbiB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGxydSBsaXN0LiBUaGlzIHN0b3BzIGEgcmVzZXJ2ZWQgYnVmZmVyCiAgKiBmcm9tIGJlaW5nIGV2aWN0ZWQuIEhvd2V2ZXIgdGhlIGxydSBzcGlubG9jayBpcyByZWxlYXNlZCBiZXR3ZWVuIHRoZSB0aW1lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmggYi9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmgKaW5kZXggNjUwZTZiZi4uNWMzNjQzMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3Ztd2dmeF9kcm0uaAorKysgYi9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmgKQEAgLTU5Miw3ICs1OTIsNyBAQAogLyoqCiAgKiBEUk1fVk1XX1VQREFURV9MQVlPVVQgLSBVcGRhdGUgbGF5b3V0CiAgKgotICogVXBkYXRlcyB0aGUgcHJlZmVyZWQgbW9kZXMgYW5kIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBjb25uZWN0b3JzLiBUaGUKKyAqIFVwZGF0ZXMgdGhlIHByZWZlcnJlZCBtb2RlcyBhbmQgY29ubmVjdGlvbiBzdGF0dXMgZm9yIGNvbm5lY3RvcnMuIFRoZQogICogY29tbWFuZCBjb25pc2l0cyBvZiBvbmUgZHJtX3Ztd191cGRhdGVfbGF5b3V0X2FyZyBwb2ludGluZyBvdXQgYSBhcnJheQogICogb2YgbnVtX291dHB1dHMgZHJtX3Ztd19yZWN0J3MuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oCmluZGV4IDI0ZDI2ZWYuLmU4MmUzZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaApAQCAtMTM2LDcgKzEzNiw3IEBACiAJaW50CSgqY2hlY2spKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwogCiAJLyoKLQkgKiBDb21wdWxzYXJ5LiAgRGVjb2RlIGZiLT5mYi52YXIgaW50byByZWdzLT4qLiAgSW4gdGhlIGNhc2Ugb2YKKwkgKiBDb21wdWxzb3J5LiAgRGVjb2RlIGZiLT5mYi52YXIgaW50byByZWdzLT4qLiAgSW4gdGhlIGNhc2Ugb2YKIAkgKiBmaXhlZCB0aW1pbmcsIHNldCByZWdzLT4qIHRvIHRoZSByZWdpc3RlciB2YWx1ZXMgcmVxdWlyZWQuCiAJICovCiAJdm9pZAkoKmRlY29kZSkoc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3QgY2xjZF9yZWdzICpyZWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCmluZGV4IGY2MDIyNzAuLjIxMTE0ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaApAQCAtMzAsMTUgKzMwLDE1IEBACiAgKiBAY2RfaW52ZXJ0OiB0cnVlIGlmIHRoZSBncGlvX2NkIHBpbiB2YWx1ZSBpcyBhY3RpdmUgbG93CiAgKiBAY2FwYWJpbGl0aWVzOiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBibG9jayBhcyBpbXBsZW1lbnRlZCBpbgogICogdGhpcyBwbGF0Zm9ybSwgc2lnbmlmeSBhbnl0aGluZyBNTUNfQ0FQXyogZnJvbSBtbWMvaG9zdC5oCi0gKiBAZG1hX2ZpbHRlcjogZnVuY3Rpb24gdXNlZCB0byBzZWxlY3QgYW4gYXByb3ByaWF0ZSBSWCBhbmQgVFgKKyAqIEBkbWFfZmlsdGVyOiBmdW5jdGlvbiB1c2VkIHRvIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBSWCBhbmQgVFgKICAqIERNQSBjaGFubmVsIHRvIGJlIHVzZWQgZm9yIERNQSwgaWYgYW5kIG9ubHkgaWYgeW91J3JlIGRlcGxveWluZyB0aGUKICAqIGdlbmVyaWMgRE1BIGVuZ2luZQogICogQGRtYV9yeF9wYXJhbTogcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgRE1BIGFsbG9jYXRpb24KLSAqIGZpbHRlciBpbiBvcmRlciB0byBzZWxlY3QgYW4gYXByb3ByaWF0ZSBSWCBjaGFubmVsLiBJZgorICogZmlsdGVyIGluIG9yZGVyIHRvIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBSWCBjaGFubmVsLiBJZgogICogdGhlcmUgaXMgYSBiaWRpcmVjdGlvbmFsIFJYK1RYIGNoYW5uZWwsIHRoZW4ganVzdCBzcGVjaWZ5CiAgKiB0aGlzIGFuZCBsZWF2ZSBkbWFfdHhfcGFyYW0gc2V0IHRvIE5VTEwKICAqIEBkbWFfdHhfcGFyYW06IHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIERNQSBhbGxvY2F0aW9uCi0gKiBmaWx0ZXIgaW4gb3JkZXIgdG8gc2VsZWN0IGFuIGFwcm9wcmlhdGUgVFggY2hhbm5lbC4gSWYgdGhpcworICogZmlsdGVyIGluIG9yZGVyIHRvIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBUWCBjaGFubmVsLiBJZiB0aGlzCiAgKiBpcyBOVUxMIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHVzZSB0aGUgUlggY2hhbm5lbCBhcyBhCiAgKiBiaWRpcmVjdGlvbmFsIGNoYW5uZWwKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmgKaW5kZXggZTYxMjU3NS4uYjQzMjZiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdF9zcGlubG9jay5oCkBAIC0yMywxMSArMjMsMTEgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQogCXdoaWxlICh1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0X2xvY2soYml0bnVtLCBhZGRyKSkpIHsKLQkJd2hpbGUgKHRlc3RfYml0KGJpdG51bSwgYWRkcikpIHsKLQkJCXByZWVtcHRfZW5hYmxlKCk7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJCWRvIHsKIAkJCWNwdV9yZWxheCgpOwotCQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCX0KKwkJfSB3aGlsZSAodGVzdF9iaXQoYml0bnVtLCBhZGRyKSk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KICNlbmRpZgogCV9fYWNxdWlyZShiaXRsb2NrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDE2YTkwMmYuLjJhZDk1ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMzg4LDIwICszODgsMTkgQEAKICNkZWZpbmUJUVVFVUVfRkxBR19TWU5DRlVMTAkzCS8qIHJlYWQgcXVldWUgaGFzIGJlZW4gZmlsbGVkICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfQVNZTkNGVUxMCTQJLyogd3JpdGUgcXVldWUgaGFzIGJlZW4gZmlsbGVkICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVBRAkJNQkvKiBxdWV1ZSBiZWluZyB0b3JuIGRvd24gKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19SRUVOVEVSCTYJLyogUmUtZW50cmFuY3kgYXZvaWRhbmNlICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfRUxWU1dJVENICTcJLyogZG9uJ3QgdXNlIGVsZXZhdG9yLCBqdXN0IGRvIEZJRk8gKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19CSURJCQk4CS8qIHF1ZXVlIHN1cHBvcnRzIGJpZGkgcmVxdWVzdHMgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19OT01FUkdFUyAgICAgOQkvKiBkaXNhYmxlIG1lcmdlIGF0dGVtcHRzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfU0FNRV9DT01QICAgMTAJLyogZm9yY2UgY29tcGxldGUgb24gc2FtZSBDUFUgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19GQUlMX0lPICAgICAxMQkvKiBmYWtlIHRpbWVvdXQgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19TVEFDS0FCTEUgICAxMgkvKiBzdXBwb3J0cyByZXF1ZXN0IHN0YWNraW5nICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfTk9OUk9UICAgICAgMTMJLyogbm9uLXJvdGF0aW9uYWwgZGV2aWNlIChTU0QpICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRUxWU1dJVENICTYJLyogZG9uJ3QgdXNlIGVsZXZhdG9yLCBqdXN0IGRvIEZJRk8gKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19CSURJCQk3CS8qIHF1ZXVlIHN1cHBvcnRzIGJpZGkgcmVxdWVzdHMgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19OT01FUkdFUyAgICAgOAkvKiBkaXNhYmxlIG1lcmdlIGF0dGVtcHRzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfU0FNRV9DT01QCTkJLyogZm9yY2UgY29tcGxldGUgb24gc2FtZSBDUFUgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19GQUlMX0lPICAgICAxMAkvKiBmYWtlIHRpbWVvdXQgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19TVEFDS0FCTEUgICAxMQkvKiBzdXBwb3J0cyByZXF1ZXN0IHN0YWNraW5nICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9OUk9UICAgICAgMTIJLyogbm9uLXJvdGF0aW9uYWwgZGV2aWNlIChTU0QpICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNgkvKiBzdXBwb3J0cyBESVNDQVJEICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfTk9YTUVSR0VTICAgMTcJLyogTm8gZXh0ZW5kZWQgbWVyZ2VzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfQUREX1JBTkRPTSAgMTgJLyogQ29udHJpYnV0ZXMgdG8gcmFuZG9tIHBvb2wgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19TRUNESVNDQVJEICAxOQkvKiBzdXBwb3J0cyBTRUNESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTMJLyogZG8gSU8gc3RhdHMgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNAkvKiBzdXBwb3J0cyBESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9YTUVSR0VTICAgMTUJLyogTm8gZXh0ZW5kZWQgbWVyZ2VzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfQUREX1JBTkRPTSAgMTYJLyogQ29udHJpYnV0ZXMgdG8gcmFuZG9tIHBvb2wgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19TRUNESVNDQVJEICAxNwkvKiBzdXBwb3J0cyBTRUNESVNDQVJEICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19TVEFDS0FCTEUpCXwJXApAQCAtNjk3LDggKzY5Niw5IEBACiBleHRlcm4gdm9pZCBibGtfc3RvcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBibGtfc3luY19xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBfX2Jsa19zdG9wX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKLWV4dGVybiB2b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBmb3JjZV9rYmxvY2tkKTsKK2V4dGVybiB2b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOworZXh0ZXJuIHZvaWQgYmxrX3J1bl9xdWV1ZV9hc3luYyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gaW50IGJsa19ycV9tYXBfdXNlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAogCQkJICAgc3RydWN0IHJxX21hcF9kYXRhICosIHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcsCiAJCQkgICBnZnBfdCk7CkBAIC04NTcsMjYgKzg1NywzOSBAQAogc3RydWN0IGJsa19wbHVnIHsKIAl1bnNpZ25lZCBsb25nIG1hZ2ljOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNiX2xpc3Q7CiAJdW5zaWduZWQgaW50IHNob3VsZF9zb3J0OwogfTsKK3N0cnVjdCBibGtfcGx1Z19jYiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGJsa19wbHVnX2NiICopOworfTsKIAogZXh0ZXJuIHZvaWQgYmxrX3N0YXJ0X3BsdWcoc3RydWN0IGJsa19wbHVnICopOwogZXh0ZXJuIHZvaWQgYmxrX2ZpbmlzaF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqKTsKLWV4dGVybiB2b2lkIF9fYmxrX2ZsdXNoX3BsdWcoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBibGtfcGx1ZyAqKTsKK2V4dGVybiB2b2lkIGJsa19mbHVzaF9wbHVnX2xpc3Qoc3RydWN0IGJsa19wbHVnICosIGJvb2wpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2ZsdXNoX3BsdWcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IGJsa19wbHVnICpwbHVnID0gdHNrLT5wbHVnOwogCi0JaWYgKHVubGlrZWx5KHBsdWcpKQotCQlfX2Jsa19mbHVzaF9wbHVnKHRzaywgcGx1Zyk7CisJaWYgKHBsdWcpCisJCWJsa19mbHVzaF9wbHVnX2xpc3QocGx1ZywgZmFsc2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3NjaGVkdWxlX2ZsdXNoX3BsdWcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IGJsa19wbHVnICpwbHVnID0gdHNrLT5wbHVnOworCisJaWYgKHBsdWcpCisJCWJsa19mbHVzaF9wbHVnX2xpc3QocGx1ZywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfbmVlZHNfZmx1c2hfcGx1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcgPSB0c2stPnBsdWc7CiAKLQlyZXR1cm4gcGx1ZyAmJiAhbGlzdF9lbXB0eSgmcGx1Zy0+bGlzdCk7CisJcmV0dXJuIHBsdWcgJiYgKCFsaXN0X2VtcHR5KCZwbHVnLT5saXN0KSB8fCAhbGlzdF9lbXB0eSgmcGx1Zy0+Y2JfbGlzdCkpOwogfQogCiAvKgpAQCAtMTIwNiw2ICsxMjE5LDcgQEAKIAlzdHJ1Y3Qga29iamVjdAkJa29iajsKIH07CiAKK2V4dGVybiBib29sIGJsa19pbnRlZ3JpdHlfaXNfaW5pdGlhbGl6ZWQoc3RydWN0IGdlbmRpc2sgKik7CiBleHRlcm4gaW50IGJsa19pbnRlZ3JpdHlfcmVnaXN0ZXIoc3RydWN0IGdlbmRpc2sgKiwgc3RydWN0IGJsa19pbnRlZ3JpdHkgKik7CiBleHRlcm4gdm9pZCBibGtfaW50ZWdyaXR5X3VucmVnaXN0ZXIoc3RydWN0IGdlbmRpc2sgKik7CiBleHRlcm4gaW50IGJsa19pbnRlZ3JpdHlfY29tcGFyZShzdHJ1Y3QgZ2VuZGlzayAqLCBzdHJ1Y3QgZ2VuZGlzayAqKTsKQEAgLTEyNjIsNiArMTI3Niw3IEBACiAjZGVmaW5lIHF1ZXVlX21heF9pbnRlZ3JpdHlfc2VnbWVudHMoYSkJCSgwKQogI2RlZmluZSBibGtfaW50ZWdyaXR5X21lcmdlX3JxKGEsIGIsIGMpCQkoMCkKICNkZWZpbmUgYmxrX2ludGVncml0eV9tZXJnZV9iaW8oYSwgYiwgYykJKDApCisjZGVmaW5lIGJsa19pbnRlZ3JpdHlfaXNfaW5pdGlhbGl6ZWQoYSkJCSgwKQogCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKQEAgLTEzMTIsNiArMTMyNywxMSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3NjaGVkdWxlX2ZsdXNoX3BsdWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworfQorCisKIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfbmVlZHNfZmx1c2hfcGx1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IGI4NjEzZTguLjAxZWNhMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0xMTEsNiArMTExLDggQEAKIAlfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4LCBQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCB4KSBcCiAJX19hbGxvY19ib290bWVtX25vZGUocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQorI2RlZmluZSBhbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ2RhdCwgeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZV9ub3BhbmljKHBnZGF0LCB4KSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9lcnJvci5oIGIvaW5jbHVkZS9saW51eC9jYW4vZXJyb3IuaAppbmRleCBkNDEyN2ZkLi41OTU4MDc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9lcnJvci5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL2Vycm9yLmgKQEAgLTUxLDcgKzUxLDcgQEAKICNkZWZpbmUgQ0FOX0VSUl9QUk9UX0JJVDEgICAgICAgIDB4MTAgLyogdW5hYmxlIHRvIHNlbmQgcmVjZXNzaXZlIGJpdCAqLwogI2RlZmluZSBDQU5fRVJSX1BST1RfT1ZFUkxPQUQgICAgMHgyMCAvKiBidXMgb3ZlcmxvYWQgKi8KICNkZWZpbmUgQ0FOX0VSUl9QUk9UX0FDVElWRSAgICAgIDB4NDAgLyogYWN0aXZlIGVycm9yIGFubm91bmNlbWVudCAqLwotI2RlZmluZSBDQU5fRVJSX1BST1RfVFggICAgICAgICAgMHg4MCAvKiBlcnJvciBvY2N1cmVkIG9uIHRyYW5zbWlzc2lvbiAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfVFggICAgICAgICAgMHg4MCAvKiBlcnJvciBvY2N1cnJlZCBvbiB0cmFuc21pc3Npb24gKi8KIAogLyogZXJyb3IgaW4gQ0FOIHByb3RvY29sIChsb2NhdGlvbikgLyBkYXRhWzNdICovCiAjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfVU5TUEVDICAweDAwIC8qIHVuc3BlY2lmaWVkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9uZXRsaW5rLmgKaW5kZXggMzI1MGRlOS4uMzQ1NDJkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaApAQCAtMTcsNyArMTcsNyBAQAogLyoKICAqIENBTiBiaXQtdGltaW5nIHBhcmFtZXRlcnMKICAqCi0gKiBGb3IgZnV0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVhZCBjaGFwdGVyICI4IEJJVCBUSU1JTkcKKyAqIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVhZCBjaGFwdGVyICI4IEJJVCBUSU1JTkcKICAqIFJFUVVJUkVNRU5UUyIgb2YgdGhlICJCb3NjaCBDQU4gU3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDIuMCIKICAqIGF0IGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMuYm9zY2guZGUvcGRmL2NhbjJzcGVjLnBkZi4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vbWNwMjUxeC5oIGIvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vbWNwMjUxeC5oCmluZGV4IDhlMjA1NDAuLjA4OWZlNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3BsYXRmb3JtL21jcDI1MXguaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS9tY3AyNTF4LmgKQEAgLTEyLDYgKzEyLDcgQEAKIC8qKgogICogc3RydWN0IG1jcDI1MXhfcGxhdGZvcm1fZGF0YSAtIE1DUDI1MVggU1BJIENBTiBjb250cm9sbGVyIHBsYXRmb3JtIGRhdGEKICAqIEBvc2NpbGxhdG9yX2ZyZXF1ZW5jeTogICAgICAgLSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBpbiBIegorICogQGlycV9mbGFnczogICAgICAgICAgICAgICAgICAtIElSUUYgY29uZmlndXJhdGlvbiBmbGFncwogICogQGJvYXJkX3NwZWNpZmljX3NldHVwOiAgICAgICAtIGNhbGxlZCBiZWZvcmUgcHJvYmluZyB0aGUgY2hpcCAocG93ZXIscmVzZXQpCiAgKiBAdHJhbnNjZWl2ZXJfZW5hYmxlOiAgICAgICAgIC0gY2FsbGVkIHRvIHBvd2VyIG9uL29mZiB0aGUgdHJhbnNjZWl2ZXIKICAqIEBwb3dlcl9lbmFibGU6ICAgICAgICAgICAgICAgLSBjYWxsZWQgdG8gcG93ZXIgb24vb2ZmIHRoZSBtY3AgKmFuZCogdGhlCkBAIC0yNCw2ICsyNSw3IEBACiAKIHN0cnVjdCBtY3AyNTF4X3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGxvbmcgb3NjaWxsYXRvcl9mcmVxdWVuY3k7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJaW50ICgqYm9hcmRfc3BlY2lmaWNfc2V0dXApKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOwogCWludCAoKnRyYW5zY2VpdmVyX2VuYWJsZSkoaW50IGVuYWJsZSk7CiAJaW50ICgqcG93ZXJfZW5hYmxlKSAoaW50IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCmluZGV4IDE2ZWU4YjQuLmQ0Njc1YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCkBAIC01NDYsMTggKzU0Niw3IEBACiBleHRlcm4gYm9vbCBjYXBhYmxlKGludCBjYXApOwogZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTsKIGV4dGVybiBib29sIHRhc2tfbnNfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApOwotCi0vKioKLSAqIG5zb3duX2NhcGFibGUgLSBDaGVjayBzdXBlcmlvciBjYXBhYmlsaXR5IHRvIG9uZSdzIG93biB1c2VyX25zCi0gKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSBpbiBxdWVzdGlvbgotICoKLSAqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIHRoZSBnaXZlbiBzdXBlcmlvciBjYXBhYmlsaXR5Ci0gKiB0YXJnZXRlZCBhdCBpdHMgb3duIHVzZXIgbmFtZXNwYWNlLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgbnNvd25fY2FwYWJsZShpbnQgY2FwKQotewotCXJldHVybiBuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBjYXApOwotfQorZXh0ZXJuIGJvb2wgbnNvd25fY2FwYWJsZShpbnQgY2FwKTsKIAogLyogYXVkaXQgc3lzdGVtIHdhbnRzIHRvIGdldCBjYXAgaW5mbyBmcm9tIGZpbGVzIGFzIHdlbGwgKi8KIGV4dGVybiBpbnQgZ2V0X3Zmc19jYXBzX2Zyb21fZGlzayhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBjcHVfdmZzX2NhcF9kYXRhICpjcHVfY2Fwcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nkay5oIGIvaW5jbHVkZS9saW51eC9jZGsuaAppbmRleCAwOTA4ZGFmLi44MDA5M2E4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nkay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2RrLmgKQEAgLTE0OSw3ICsxNDksNyBAQAogLyoKICAqCURlZmluZSB0aGUgbWVtb3J5IG1hcHBpbmcgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSBpcyBwb2ludGVkIHRvIGJ5CiAgKgl0aGUgbWVtcCBmaWVsZCBpbiB0aGUgc3RsY2RraGRyIHN0cnVjdC4gQXMgbWFueSBhcyB0aGVzZSBzdHJ1Y3R1cmVzCi0gKglhcyByZXF1aXJlZCBhcmUgbGF5ZWQgb3V0IGluIHNoYXJlZCBtZW1vcnkgdG8gZGVmaW5lIGhvdyB0aGUgcmVzdCBvZgorICoJYXMgcmVxdWlyZWQgYXJlIGxhaWQgb3V0IGluIHNoYXJlZCBtZW1vcnkgdG8gZGVmaW5lIGhvdyB0aGUgcmVzdCBvZgogICoJc2hhcmVkIG1lbW9yeSBpcyBkaXZpZGVkIHVwLiBUaGVyZSB3aWxsIGJlIG9uZSBmb3IgZWFjaCBwb3J0LgogICovCiB0eXBlZGVmIHN0cnVjdCBjZGttZW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZmFnMTI4NjRiLmggYi9pbmNsdWRlL2xpbnV4L2NmYWcxMjg2NGIuaAppbmRleCA2ZjlmMTlkLi5iNDU0ZGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NmYWcxMjg2NGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NmYWcxMjg2NGIuaApAQCAtNDQsNyArNDQsNyBAQAogLyoKICAqIEdldCB0aGUgcmVmcmVzaCByYXRlIG9mIHRoZSBMQ0QKICAqCi0gKiBSZXR1cm5zIHRoZSByZWZyZXNoIHJhdGUgKGhlcnR6cykuCisgKiBSZXR1cm5zIHRoZSByZWZyZXNoIHJhdGUgKGhlcnR6KS4KICAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBjZmFnMTI4NjRiX2dldHJhdGUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IGU2NTRmYTIuLjVhYzdlYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMjQwLDcgKzI0MCw3IEBACiAJLyogRm9yIFJDVS1wcm90ZWN0ZWQgZGVsZXRpb24gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CiAKLQkvKiBMaXN0IG9mIGV2ZW50cyB3aGljaCB1c2Vyc3BhY2Ugd2FudCB0byByZWNpZXZlICovCisJLyogTGlzdCBvZiBldmVudHMgd2hpY2ggdXNlcnNwYWNlIHdhbnQgdG8gcmVjZWl2ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKIAlzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jazsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaAppbmRleCA3MmJmZWZkLi4zYzRhYWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKQEAgLTIwLDcgKzIwLDcgQEAKIH0gYXRyZXFfdDsKIAogCi0vKiB3aGF0IGlzIHBhcnRpY3VsYXJseSBzdHVwaWQgaW4gdGhlIG9yaWdpbmFsIGRyaXZlciBpcyB0aGUgYXJjaC1kZXBlbmRhbnQKKy8qIHdoYXQgaXMgcGFydGljdWxhcmx5IHN0dXBpZCBpbiB0aGUgb3JpZ2luYWwgZHJpdmVyIGlzIHRoZSBhcmNoLWRlcGVuZGVudAogICogbWVtYmVyIHNpemVzLiBUaGlzIGxlYWRzIHRvIENPTkZJR19DT01QQVQgYnJlYWthZ2UsIHNpbmNlIDMyYml0IHVzZXJzcGFjZQogICogd2lsbCBsYXkgb3V0IHRoZSBzdHJ1Y3R1cmUgbWVtYmVycyBkaWZmZXJlbnRseSB0aGFuIHRoZSA2NGJpdCBrZXJuZWwuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oCmluZGV4IGRkYjdhOTcuLjY0NTc3OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKQEAgLTIxOCw3ICsyMTgsNyBAQAogICogZ3JvdXAgY2hpbGRyZW4uICBkZWZhdWx0X2dyb3VwcyBtYXkgY29leGlzdCBhbG9uZ3NpemUgbWFrZV9ncm91cCgpIG9yCiAgKiBtYWtlX2l0ZW0oKSwgYnV0IGlmIHRoZSBncm91cCB3aXNoZXMgdG8gaGF2ZSBvbmx5IGRlZmF1bHRfZ3JvdXBzCiAgKiBjaGlsZHJlbiAoZGlzYWxsb3dpbmcgbWtkaXIoMikpLCBpdCBuZWVkIG5vdCBwcm92aWRlIGVpdGhlciBmdW5jdGlvbi4KLSAqIElmIHRoZSBncm91cCBoYXMgY29tbWl0KCksIGl0IHN1cHBvcnRzIHBlbmRpbmcgYW5kIGNvbW1pdGVkIChhY3RpdmUpCisgKiBJZiB0aGUgZ3JvdXAgaGFzIGNvbW1pdCgpLCBpdCBzdXBwb3J0cyBwZW5kaW5nIGFuZCBjb21taXR0ZWQgKGFjdGl2ZSkKICAqIGl0ZW1zLgogICovCiBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Blci5oIGIvaW5jbHVkZS9saW51eC9jcGVyLmgKaW5kZXggMzcyYTI1OC4uYzIzMDQ5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcGVyLmgKQEAgLTMxMCw3ICszMTAsNyBAQAogCV9fdTgJY3B1aWRbNDhdOwogfTsKIAotLyogSUEzMi9YNjQgUHJvY2Vzc29yIEVycm9yIEluZm9tYXRpb24gU3RydWN0dXJlICovCisvKiBJQTMyL1g2NCBQcm9jZXNzb3IgRXJyb3IgSW5mb3JtYXRpb24gU3RydWN0dXJlICovCiBzdHJ1Y3QgY3Blcl9pYV9lcnJfaW5mbyB7CiAJdXVpZF9sZQllcnJfdHlwZTsKIAlfX3U2NAl2YWxpZGF0aW9uX2JpdHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IDlhZWViMGIuLmJlMTZiNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0xNDYsNiArMTQ2LDcgQEAKIAl2b2lkCQkqc2VjdXJpdHk7CS8qIHN1YmplY3RpdmUgTFNNIHNlY3VyaXR5ICovCiAjZW5kaWYKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CS8qIHJlYWwgdXNlciBJRCBzdWJzY3JpcHRpb24gKi8KKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7IC8qIGNhY2hlZCB1c2VyLT51c2VyX25zICovCiAJc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm87CS8qIHN1cHBsZW1lbnRhcnkgZ3JvdXBzIGZvciBldWlkL2ZzZ2lkICovCiAJc3RydWN0IHJjdV9oZWFkCXJjdTsJCS8qIFJDVSBkZWxldGlvbiBob29rICovCiB9OwpAQCAtMzU0LDEwICszNTUsMTUgQEAKICNkZWZpbmUgY3VycmVudF9mc2dpZCgpIAkoY3VycmVudF9jcmVkX3h4eChmc2dpZCkpCiAjZGVmaW5lIGN1cnJlbnRfY2FwKCkJCShjdXJyZW50X2NyZWRfeHh4KGNhcF9lZmZlY3RpdmUpKQogI2RlZmluZSBjdXJyZW50X3VzZXIoKQkJKGN1cnJlbnRfY3JlZF94eHgodXNlcikpCi0jZGVmaW5lIF9jdXJyZW50X3VzZXJfbnMoKQkoY3VycmVudF9jcmVkX3h4eCh1c2VyKS0+dXNlcl9ucykKICNkZWZpbmUgY3VycmVudF9zZWN1cml0eSgpCShjdXJyZW50X2NyZWRfeHh4KHNlY3VyaXR5KSkKIAotZXh0ZXJuIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqY3VycmVudF91c2VyX25zKHZvaWQpOworI2lmZGVmIENPTkZJR19VU0VSX05TCisjZGVmaW5lIGN1cnJlbnRfdXNlcl9ucygpIChjdXJyZW50X2NyZWRfeHh4KHVzZXJfbnMpKQorI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zOworI2RlZmluZSBjdXJyZW50X3VzZXJfbnMoKSAoJmluaXRfdXNlcl9ucykKKyNlbmRpZgorCiAKICNkZWZpbmUgY3VycmVudF91aWRfZ2lkKF91aWQsIF9naWQpCQlcCiBkbyB7CQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggZjJhZmVkNC4uMTlkOTBhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAgICogdHlwaWNhbGx5IHVzaW5nIGRfc3BsaWNlX2FsaWFzLiAqLwogCiAjZGVmaW5lIERDQUNIRV9SRUZFUkVOQ0VECTB4MDAwOCAgLyogUmVjZW50bHkgdXNlZCwgZG9uJ3QgZGlzY2FyZC4gKi8KLSNkZWZpbmUgRENBQ0hFX1VOSEFTSEVECQkweDAwMTAJCisjZGVmaW5lIERDQUNIRV9SQ1VBQ0NFU1MJMHgwMDEwCS8qIEVudHJ5IGhhcyBldmVyIGJlZW4gUkNVLXZpc2libGUgKi8KICNkZWZpbmUgRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQgMHgwMDIwCiAgICAgIC8qIFBhcmVudCBpbm9kZSBpcyB3YXRjaGVkIGJ5IGlub3RpZnkgKi8KIApAQCAtMzg0LDcgKzM4NCw3IEBACiAgCiBzdGF0aWMgaW5saW5lIGludCBkX3VuaGFzaGVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlyZXR1cm4gKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9VTkhBU0hFRCk7CisJcmV0dXJuIGhsaXN0X2JsX3VuaGFzaGVkKCZkZW50cnktPmRfaGFzaCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRfdW5saW5rZWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaAppbmRleCA0Y2I3MmI5Li43OTI1YmYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaApAQCAtMTYsNyArMTYsNyBAQAogCiAvKgogICogU29tZSBhcmNoaXRlY3R1cmVzIHdhbnQgdG8gZW5zdXJlIHRoZXJlIGlzIG5vIGxvY2FsIGRhdGEgaW4gdGhlaXIKLSAqIHByZS1ib290IGVudmlyb25tZW50LCBzbyB0aGF0IGRhdGEgY2FuIGFyYml0YXJpbHkgcmVsb2NhdGVkICh2aWEKKyAqIHByZS1ib290IGVudmlyb25tZW50LCBzbyB0aGF0IGRhdGEgY2FuIGFyYml0cmFyaWx5IHJlbG9jYXRlZCAodmlhCiAgKiBHT1QgcmVmZXJlbmNlcykuICBUaGlzIGlzIGFjaGlldmVkIGJ5IGRlZmluaW5nIFNUQVRJQ19SV19EQVRBIHRvCiAgKiBiZSBudWxsLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IGUyNzY4ODMuLjMyYTQ0MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0xOTcsNyArMTk3LDYgQEAKIHN0cnVjdCBkbV90YXJnZXRfY2FsbGJhY2tzIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50ICgqY29uZ2VzdGVkX2ZuKSAoc3RydWN0IGRtX3RhcmdldF9jYWxsYmFja3MgKiwgaW50KTsKLQl2b2lkICgqdW5wbHVnX2ZuKShzdHJ1Y3QgZG1fdGFyZ2V0X2NhbGxiYWNrcyAqKTsKIH07CiAKIGludCBkbV9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IHRhcmdldF90eXBlICp0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmggYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCmluZGV4IDliZWJkN2YuLmVlZTdhZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtNDM0LDcgKzQzNCw3IEBACiAgKgl6ZXJvIG9yIGVycm9yIGNvZGUKICAqIEBkZXZpY2VfdHhfc3RhdHVzOiBwb2xsIGZvciB0cmFuc2FjdGlvbiBjb21wbGV0aW9uLCB0aGUgb3B0aW9uYWwKICAqCXR4c3RhdGUgcGFyYW1ldGVyIGNhbiBiZSBzdXBwbGllZCB3aXRoIGEgcG9pbnRlciB0byBnZXQgYQotICoJc3RydWN0IHdpdGggYXV4aWxhcnkgdHJhbnNmZXIgc3RhdHVzIGluZm9ybWF0aW9uLCBvdGhlcndpc2UgdGhlIGNhbGwKKyAqCXN0cnVjdCB3aXRoIGF1eGlsaWFyeSB0cmFuc2ZlciBzdGF0dXMgaW5mb3JtYXRpb24sIG90aGVyd2lzZSB0aGUgY2FsbAogICoJd2lsbCBqdXN0IHJldHVybiBhIHNpbXBsZSBzdGF0dXMgY29kZQogICogQGRldmljZV9pc3N1ZV9wZW5kaW5nOiBwdXNoIHBlbmRpbmcgdHJhbnNhY3Rpb25zIHRvIGhhcmR3YXJlCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHJiZC5oIGIvaW5jbHVkZS9saW51eC9kcmJkLmgKaW5kZXggZDE4ZDY3My4uY2VjNDY3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kcmJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9kcmJkLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCi0vKiBBbHRvdWdoIHRoZSBMaW51eCBzb3VyY2UgY29kZSBtYWtlcyBhIGRpZmZlcmVuY2UgYmV0d2VlbgorLyogQWx0aG91Z2ggdGhlIExpbnV4IHNvdXJjZSBjb2RlIG1ha2VzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuCiAgICBnZW5lcmljIGVuZGlhbm5lc3MgYW5kIHRoZSBiaXRmaWVsZHMnIGVuZGlhbm5lc3MsIHRoZXJlIGlzIG5vCiAgICBhcmNoaXRlY3R1cmUgYXMgb2YgTGludXgtMi42LjI0LXJjNCB3aGVyZSB0aGUgYml0ZmlsZWRzJyBlbmRpYW5uZXNzCiAgICBkb2VzIG5vdCBtYXRjaCB0aGUgZ2VuZXJpYyBlbmRpYW5uZXNzLiAqLwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJLyogVGhlc2UgdGVtcG9yYWwgc3RhdGVzIGFyZSBhbGwgdXNlZCBvbiB0aGUgd2F5CiAJICogZnJvbSA+PSBDX0NPTk5FQ1RFRCB0byBVbmNvbm5lY3RlZC4KIAkgKiBUaGUgJ2Rpc2Nvbm5lY3QgcmVhc29uJyBzdGF0ZXMKLQkgKiBJIGRvIG5vdCBhbGxvdyB0byBjaGFuZ2UgYmV3ZWVuIHRoZW0uICovCisJICogSSBkbyBub3QgYWxsb3cgdG8gY2hhbmdlIGJldHdlZW4gdGhlbS4gKi8KIAlDX1RJTUVPVVQsCiAJQ19CUk9LRU5fUElQRSwKIAlDX05FVFdPUktfRkFJTFVSRSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHJiZF9saW1pdHMuaCBiL2luY2x1ZGUvbGludXgvZHJiZF9saW1pdHMuaAppbmRleCBiYjI2NGE1Li4yNDZmNTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RyYmRfbGltaXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9kcmJkX2xpbWl0cy5oCkBAIC00Myw3ICs0Myw3IEBACiAKIC8qIG5ldCB7ICovCiAgIC8qIHRpbWVvdXQsIHVuaXQgY2VudGkgc2Vjb25kcwotICAgKiBtb3JlIHRoYW4gb25lIG1pbnV0ZSB0aW1lb3V0IGlzIG5vdCB1c2VmdWxsICovCisgICAqIG1vcmUgdGhhbiBvbmUgbWludXRlIHRpbWVvdXQgaXMgbm90IHVzZWZ1bCAqLwogI2RlZmluZSBEUkJEX1RJTUVPVVRfTUlOIDEKICNkZWZpbmUgRFJCRF9USU1FT1VUX01BWCA2MDAKICNkZWZpbmUgRFJCRF9USU1FT1VUX0RFRiA2MCAgICAgICAvKiA2IHNlY29uZHMgKi8KQEAgLTY4LDcgKzY4LDcgQEAKICNkZWZpbmUgRFJCRF9NQVhfRVBPQ0hfU0laRV9NQVggMjAwMDAKICNkZWZpbmUgRFJCRF9NQVhfRVBPQ0hfU0laRV9ERUYgMjA0OAogCi0gIC8qIEkgZG9uJ3QgdGhpbmsgdGhhdCBhIHRjcCBzZW5kIGJ1ZmZlciBvZiBtb3JlIHRoYW4gMTBNIGlzIHVzZWZ1bGwgKi8KKyAgLyogSSBkb24ndCB0aGluayB0aGF0IGEgdGNwIHNlbmQgYnVmZmVyIG9mIG1vcmUgdGhhbiAxME0gaXMgdXNlZnVsICovCiAjZGVmaW5lIERSQkRfU05EQlVGX1NJWkVfTUlOICAwCiAjZGVmaW5lIERSQkRfU05EQlVGX1NJWkVfTUFYICAoMTA8PDIwKQogI2RlZmluZSBEUkJEX1NOREJVRl9TSVpFX0RFRiAgMApAQCAtMTAxLDcgKzEwMSw3IEBACiAjZGVmaW5lIERSQkRfUkFURV9NQVggKDQgPDwgMjApCiAjZGVmaW5lIERSQkRfUkFURV9ERUYgMjUwICAvKiBrYi9zZWNvbmQgKi8KIAotICAvKiBsZXNzIHRoYW4gNyB3b3VsZCBoaXQgcGVyZm9ybWFuY2UgdW5uZWNjZXNzYXJpbHkuCisgIC8qIGxlc3MgdGhhbiA3IHdvdWxkIGhpdCBwZXJmb3JtYW5jZSB1bm5lY2Vzc2FyaWx5LgogICAgKiAzODMzIGlzIHRoZSBsYXJnZXN0IHByaW1lIHRoYXQgc3RpbGwgZG9lcyBmaXQKICAgICogaW50byA2NCBzZWN0b3JzIG9mIGFjdGl2aXR5IGxvZyAqLwogI2RlZmluZSBEUkJEX0FMX0VYVEVOVFNfTUlOICA3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmggYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKaW5kZXggZDkzZWZjYzQ0NS4uMjFhOGViZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCisrKyBiL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaApAQCAtMTAxLDcgKzEwMSw2IEBACiBleHRlcm4gdm9pZCBlbHZfZGlzcGF0Y2hfYWRkX3RhaWwoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7CiBleHRlcm4gdm9pZCBlbHZfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKIGV4dGVybiB2b2lkIF9fZWx2X2FkZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICosIGludCk7Ci1leHRlcm4gdm9pZCBlbHZfaW5zZXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICosIGludCk7CiBleHRlcm4gaW50IGVsdl9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKiwgc3RydWN0IGJpbyAqKTsKIGV4dGVybiBpbnQgZWx2X3RyeV9tZXJnZShzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3QgYmlvICopOwogZXh0ZXJuIHZvaWQgZWx2X21lcmdlX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICosCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IGM4ZmNiZGQuLmRjODBkODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC02MTQsNyArNjE0LDcgQEAKICAqIHZhbHVlcyBvZiBjb3JyZXNwb25kaW5nIGJpdHMgaW4gZmVhdHVyZXNbXS5yZXF1ZXN0ZWQuIEJpdHMgaW4gLnJlcXVlc3RlZAogICogbm90IHNldCBpbiAudmFsaWQgb3Igbm90IGNoYW5nZWFibGUgYXJlIGlnbm9yZWQuCiAgKgotICogUmV0dXJucyAlRUlOVkFMIHdoZW4gLnZhbGlkIGNvbnRhaW5zIHVuZGVmaW5lZCBvciBuZXZlci1jaGFuZ2FibGUgYml0cworICogUmV0dXJucyAlRUlOVkFMIHdoZW4gLnZhbGlkIGNvbnRhaW5zIHVuZGVmaW5lZCBvciBuZXZlci1jaGFuZ2VhYmxlIGJpdHMKICAqIG9yIHNpemUgaXMgbm90IGVxdWFsIHRvIHJlcXVpcmVkIG51bWJlciBvZiBmZWF0dXJlcyB3b3JkcyAoMzItYml0IGJsb2NrcykuCiAgKiBSZXR1cm5zID49IDAgaWYgcmVxdWVzdCB3YXMgY29tcGxldGVkOyBiaXRzIHNldCBpbiB0aGUgdmFsdWUgbWVhbjoKICAqICAgJUVUSFRPT0xfRl9VTlNVUFBPUlRFRCAtIHRoZXJlIHdlcmUgYml0cyBzZXQgaW4gLnZhbGlkIHRoYXQgYXJlIG5vdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaCBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKaW5kZXggZjY4NTZhNS4uZjM2MjczMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBpbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oICggRWZmaWNlbnQgZXZlbnQgcG9sbGluZyBpbXBsZW1lbnRhdGlvbiApCisgKiAgaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaCAoIEVmZmljaWVudCBldmVudCBwb2xsaW5nIGltcGxlbWVudGF0aW9uICkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsLi4uLDIwMDYJIERhdmlkZSBMaWJlbnppCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmggYi9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmgKaW5kZXggMzNhNDJmMi4uM2E0Y2VmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaApAQCAtMTIwLDcgKzEyMCw3IEBACiAgKiBlbmNvZGVfZmg6CiAgKiAgICBAZW5jb2RlX2ZoIHNob3VsZCBzdG9yZSBpbiB0aGUgZmlsZSBoYW5kbGUgZnJhZ21lbnQgQGZoICh1c2luZyBhdCBtb3N0CiAgKiAgICBAbWF4X2xlbiBieXRlcykgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCBieSBAZGVjb2RlX2ZoIHRvIHJlY292ZXIgdGhlCi0gKiAgICBmaWxlIHJlZmVyZWQgdG8gYnkgdGhlICZzdHJ1Y3QgZGVudHJ5IEBkZS4gIElmIHRoZSBAY29ubmVjdGFibGUgZmxhZyBpcworICogICAgZmlsZSByZWZlcnJlZCB0byBieSB0aGUgJnN0cnVjdCBkZW50cnkgQGRlLiAgSWYgdGhlIEBjb25uZWN0YWJsZSBmbGFnIGlzCiAgKiAgICBzZXQsIHRoZSBlbmNvZGVfZmgoKSBzaG91bGQgc3RvcmUgc3VmZmljaWVudCBpbmZvcm1hdGlvbiBzbyB0aGF0IGEgZ29vZAogICogICAgYXR0ZW1wdCBjYW4gYmUgbWFkZSB0byBmaW5kIG5vdCBvbmx5IHRoZSBmaWxlIGJ1dCBhbHNvIGl0J3MgcGxhY2UgaW4gdGhlCiAgKiAgICBmaWxlc3lzdGVtLiAgIFRoaXMgdHlwaWNhbGx5IG1lYW5zIHN0b3JpbmcgYSByZWZlcmVuY2UgdG8gZGUtPmRfcGFyZW50IGluCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggYjJhMzYzOS4uNmE4Mjc0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtNTM0LDE0ICs1MzQsMTQgQEAKICNkZWZpbmUgRkJfRVZFTlRfR0VUX0NPTlNPTEVfTUFQICAgICAgICAweDA3CiAvKiAgICAgIENPTlNPTEUtU1BFQ0lGSUM6IHNldCBjb25zb2xlIHRvIGZyYW1lYnVmZmVyIG1hcHBpbmcgKi8KICNkZWZpbmUgRkJfRVZFTlRfU0VUX0NPTlNPTEVfTUFQICAgICAgICAweDA4Ci0vKiAgICAgIEEgaGFyZHdhcmUgZGlzcGxheSBibGFuayBjaGFuZ2Ugb2NjdXJlZCAqLworLyogICAgICBBIGhhcmR3YXJlIGRpc3BsYXkgYmxhbmsgY2hhbmdlIG9jY3VycmVkICovCiAjZGVmaW5lIEZCX0VWRU5UX0JMQU5LICAgICAgICAgICAgICAgICAgMHgwOQogLyogICAgICBQcml2YXRlIG1vZGVsaXN0IGlzIHRvIGJlIHJlcGxhY2VkICovCiAjZGVmaW5lIEZCX0VWRU5UX05FV19NT0RFTElTVCAgICAgICAgICAgMHgwQQogLyoJVGhlIHJlc29sdXRpb24gb2YgdGhlIHBhc3NlZCBpbiBmYl9pbmZvIGFib3V0IHRvIGNoYW5nZSBhbmQKICAgICAgICAgYWxsIHZjJ3Mgc2hvdWxkIGJlIGNoYW5nZWQgICAgICAgICAqLwogI2RlZmluZSBGQl9FVkVOVF9NT0RFX0NIQU5HRV9BTEwJMHgwQgotLyoJQSBzb2Z0d2FyZSBkaXNwbGF5IGJsYW5rIGNoYW5nZSBvY2N1cmVkICovCisvKglBIHNvZnR3YXJlIGRpc3BsYXkgYmxhbmsgY2hhbmdlIG9jY3VycmVkICovCiAjZGVmaW5lIEZCX0VWRU5UX0NPTkJMQU5LICAgICAgICAgICAgICAgMHgwQwogLyogICAgICBHZXQgZHJhd2luZyByZXF1aXJlbWVudHMgICAgICAgICovCiAjZGVmaW5lIEZCX0VWRU5UX0dFVF9SRVEgICAgICAgICAgICAgICAgMHgwRApAQCAtODA1LDcgKzgwNSw3IEBACiAvKiBBIGRyaXZlciBtYXkgc2V0IHRoaXMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGl0IGRvZXMgd2FudCBhIHNldF9wYXIgdG8gYmUKICAqIGNhbGxlZCBldmVyeSB0aW1lIHdoZW4gZmJjb25fc3dpdGNoIGlzIGV4ZWN1dGVkLiBUaGUgYWR2YW50YWdlIGlzIHRoYXQgd2l0aAogICogdGhpcyBmbGFnIHNldCB5b3UgY2FuIHJlYWxseSBiZSBzdXJlIHRoYXQgc2V0X3BhciBpcyBhbHdheXMgY2FsbGVkIGJlZm9yZQotICogYW55IG9mIHRoZSBmdW5jdGlvbnMgZGVwZW5kYW50IG9uIHRoZSBjb3JyZWN0IGhhcmR3YXJlIHN0YXRlIG9yIGFsdGVyaW5nCisgKiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBkZXBlbmRlbnQgb24gdGhlIGNvcnJlY3QgaGFyZHdhcmUgc3RhdGUgb3IgYWx0ZXJpbmcKICAqIHRoYXQgc3RhdGUsIGV2ZW4gaWYgeW91IGFyZSB1c2luZyBzb21lIGJyb2tlbiBYIHJlbGVhc2VzLiBUaGUgZGlzYWR2YW50YWdlCiAgKiBpcyB0aGF0IGl0IGludHJvZHVjZXMgdW53YW50ZWQgZGVsYXlzIHRvIGV2ZXJ5IGNvbnNvbGUgc3dpdGNoIGlmIHNldF9wYXIKICAqIGlzIHNsb3cuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHRyeSB0aGlzIGZsYWcgaW4gdGhlIGRyaXZlcnMgaW5pdGlhbGl6YXRpb24KQEAgLTgzMiw2ICs4MzIsNyBAQAogI2RlZmluZSBGQklORk9fQ0FOX0ZPUkNFX09VVFBVVCAgICAgMHgyMDAwMDAKIAogc3RydWN0IGZiX2luZm8geworCWF0b21pY190IGNvdW50OwogCWludCBub2RlOwogCWludCBmbGFnczsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIExvY2sgZm9yIG9wZW4vcmVsZWFzZS9pb2N0bCBmdW5jcyAqLwpAQCAtODc3LDcgKzg3OCw3IEBACiAJdm9pZCAqZmJjb25fcGFyOyAgICAgICAgICAgICAgICAvKiBmYmNvbiB1c2Utb25seSBwcml2YXRlIGFyZWEgKi8KIAkvKiBGcm9tIGhlcmUgb24gZXZlcnl0aGluZyBpcyBkZXZpY2UgZGVwZW5kZW50ICovCiAJdm9pZCAqcGFyOwotCS8qIHdlIG5lZWQgdGhlIFBDSSBvciBzaW1pbGlhciBhcGVydHVyZSBiYXNlL3NpemUgbm90CisJLyogd2UgbmVlZCB0aGUgUENJIG9yIHNpbWlsYXIgYXBlcnR1cmUgYmFzZS9zaXplIG5vdAogCSAgIHNtZW1fc3RhcnQvc2l6ZSBhcyBzbWVtX3N0YXJ0IG1heSBqdXN0IGJlIGFuIG9iamVjdAogCSAgIGFsbG9jYXRlZCBpbnNpZGUgdGhlIGFwZXJ0dXJlIHNvIG1heSBub3QgYWN0dWFsbHkgb3ZlcmxhcCAqLwogCXN0cnVjdCBhcGVydHVyZXNfc3RydWN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKaW5kZXggNTllYTQwNi4uNGZmMDk4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKQEAgLTkwMCw3ICs5MDAsNyBAQAogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAtIChEZSlhbGxvY2F0ZSBhIGNoYW5uZWwgb3IgYmFuZHdpZHRoCi0gKiBAY2xvc3VyZToJUGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIGNvcnJlcG9uZGluZyBpc28gcmVzb3VyY2UgZXZlbnRzCisgKiBAY2xvc3VyZToJUGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIGNvcnJlc3BvbmRpbmcgaXNvIHJlc291cmNlIGV2ZW50cwogICogQGNoYW5uZWxzOglJc29jaHJvbm91cyBjaGFubmVscyBvZiB3aGljaCBvbmUgaXMgdG8gYmUgKGRlKWFsbG9jYXRlZAogICogQGJhbmR3aWR0aDoJSXNvY2hyb25vdXMgYmFuZHdpZHRoIHVuaXRzIHRvIGJlIChkZSlhbGxvY2F0ZWQKICAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgYWxsb2NhdGlvbiwgd3JpdHRlbiBieSB0aGUga2VybmVsIChvbmx5IHZhbGlkIGluCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaCBiL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oCmluZGV4IDcwZTRlZmEuLmViZWIyZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oCkBAIC02MSw3ICs2MSw3IEBACiBzdHJ1Y3QgZmxleF9hcnJheSAqZmxleF9hcnJheV9hbGxvYyhpbnQgZWxlbWVudF9zaXplLCB1bnNpZ25lZCBpbnQgdG90YWwsCiAJCWdmcF90IGZsYWdzKTsKIGludCBmbGV4X2FycmF5X3ByZWFsbG9jKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IHN0YXJ0LAotCQl1bnNpZ25lZCBpbnQgZW5kLCBnZnBfdCBmbGFncyk7CisJCXVuc2lnbmVkIGludCBucl9lbGVtZW50cywgZ2ZwX3QgZmxhZ3MpOwogdm9pZCBmbGV4X2FycmF5X2ZyZWUoc3RydWN0IGZsZXhfYXJyYXkgKmZhKTsKIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICpmYSk7CiBpbnQgZmxleF9hcnJheV9wdXQoc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgZWxlbWVudF9uciwgdm9pZCAqc3JjLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUyZjI4M2MuLmNkZjk0OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTM1OCw3ICszNTgsNiBAQAogI2RlZmluZSBGU19FWFRFTlRfRkwJCQkweDAwMDgwMDAwIC8qIEV4dGVudHMgKi8KICNkZWZpbmUgRlNfRElSRUNUSU9fRkwJCQkweDAwMTAwMDAwIC8qIFVzZSBkaXJlY3QgaS9vICovCiAjZGVmaW5lIEZTX05PQ09XX0ZMCQkJMHgwMDgwMDAwMCAvKiBEbyBub3QgY293IGZpbGUgKi8KLSNkZWZpbmUgRlNfQ09XX0ZMCQkJMHgwMjAwMDAwMCAvKiBDb3cgZmlsZSAqLwogI2RlZmluZSBGU19SRVNFUlZFRF9GTAkJCTB4ODAwMDAwMDAgLyogcmVzZXJ2ZWQgZm9yIGV4dDIgbGliICovCiAKICNkZWZpbmUgRlNfRkxfVVNFUl9WSVNJQkxFCQkweDAwMDNERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLwpAQCAtNDY1LDcgKzQ2NCw3IEBACiAJc3RydWN0IHRpbWVzcGVjCWlhX2N0aW1lOwogCiAJLyoKLQkgKiBOb3QgYW4gYXR0cmlidXRlLCBidXQgYW4gYXV4aWxhcnkgaW5mbyBmb3IgZmlsZXN5c3RlbXMgd2FudGluZyB0bworCSAqIE5vdCBhbiBhdHRyaWJ1dGUsIGJ1dCBhbiBhdXhpbGlhcnkgaW5mbyBmb3IgZmlsZXN5c3RlbXMgd2FudGluZyB0bwogCSAqIGltcGxlbWVudCBhbiBmdHJ1bmNhdGUoKSBsaWtlIG1ldGhvZC4gIE5PVEU6IGZpbGVzeXN0ZW0gc2hvdWxkCiAJICogY2hlY2sgZm9yIChpYV92YWxpZCAmIEFUVFJfRklMRSksIGFuZCBub3QgZm9yIChpYV9maWxlICE9IE5VTEwpLgogCSAqLwpAQCAtNjEzLDYgKzYxMiw4IEBACiAJaW50ICgqZXJyb3JfcmVtb3ZlX3BhZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCBwYWdlICopOwogfTsKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZW1wdHlfYW9wczsKKwogLyoKICAqIHBhZ2VjYWNoZV93cml0ZV9iZWdpbi9wYWdlY2FjaGVfd3JpdGVfZW5kIG11c3QgYmUgdXNlZCBieSBnZW5lcmFsIGNvZGUKICAqIHRvIHdyaXRlIGludG8gdGhlIHBhZ2VjYWNoZS4KQEAgLTY0Nyw3ICs2NDgsNyBAQAogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAkvKgogCSAqIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyB0aGF0IGFsaWdubWVudCBpcyBhbHJlYWR5IHRoZSBjYXNlOyBidXQKLQkgKiBtdXN0IGJlIGVuZm9yY2VkIGhlcmUgZm9yIENSSVMsIHRvIGxldCB0aGUgbGVhc3Qgc2lnbmZpY2FudCBiaXQKKwkgKiBtdXN0IGJlIGVuZm9yY2VkIGhlcmUgZm9yIENSSVMsIHRvIGxldCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CiAJICogb2Ygc3RydWN0IHBhZ2UncyAibWFwcGluZyIgcG9pbnRlciBiZSB1c2VkIGZvciBQQUdFX01BUFBJTkdfQU5PTi4KIAkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaAppbmRleCBiODU4MWMwLi43NjQyN2U2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaApAQCAtMjM2LDcgKzIzNiw3IEBACiAJLyogdW5waW4gYW4gb2JqZWN0IGluIHRoZSBjYWNoZSAqLwogCXZvaWQgKCp1bnBpbl9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKIAotCS8qIHN0b3JlIHRoZSB1cGRhdGVkIGF1eGlsbGlhcnkgZGF0YSBvbiBhbiBvYmplY3QgKi8KKwkvKiBzdG9yZSB0aGUgdXBkYXRlZCBhdXhpbGlhcnkgZGF0YSBvbiBhbiBvYmplY3QgKi8KIAl2b2lkICgqdXBkYXRlX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOwogCiAJLyogZGlzY2FyZCB0aGUgcmVzb3VyY2VzIHBpbm5lZCBieSBhbiBvYmplY3QgYW5kIGVmZmVjdCByZXRpcmVtZW50IGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCmluZGV4IGVjMGRhZDUuLjdjNGQ3MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCkBAIC0xMDIsOSArMTAyLDkgQEAKIAkgKi8KIAl2b2lkICgqZ2V0X2F0dHIpKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB1aW50NjRfdCAqc2l6ZSk7CiAKLQkvKiBnZXQgdGhlIGF1eGlsbGlhcnkgZGF0YSBmcm9tIG5ldGZzIGRhdGEKKwkvKiBnZXQgdGhlIGF1eGlsaWFyeSBkYXRhIGZyb20gbmV0ZnMgZGF0YQogCSAqIC0gdGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBpbmRleCBjYXJyaWVzIG5vIHN0YXRlIGRhdGEKLQkgKiAtIHNob3VsZCBzdG9yZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGluIHRoZSBidWZmZXIKKwkgKiAtIHNob3VsZCBzdG9yZSB0aGUgYXV4aWxpYXJ5IGRhdGEgaW4gdGhlIGJ1ZmZlcgogCSAqIC0gc2hvdWxkIHJldHVybiB0aGUgYW1vdW50IG9mIGFtb3VudCBzdG9yZWQKIAkgKiAtIG5vdCBwZXJtaXR0ZWQgdG8gcmV0dXJuIGFuIGVycm9yCiAJICogLSB0aGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgc291cmNlIGlzCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkvKiBjb25zdWx0IHRoZSBuZXRmcyBhYm91dCB0aGUgc3RhdGUgb2YgYW4gb2JqZWN0CiAJICogLSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGluZGV4IGNhcnJpZXMgbm8gc3RhdGUgZGF0YQogCSAqIC0gdGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHRhcmdldCBpcwotCSAqICAgcHJlc2VudGVkLCBhcyBpcyB0aGUgYXV4aWxsaWFyeSBkYXRhCisJICogICBwcmVzZW50ZWQsIGFzIGlzIHRoZSBhdXhpbGlhcnkgZGF0YQogCSAqLwogCWVudW0gZnNjYWNoZV9jaGVja2F1eCAoKmNoZWNrX2F1eCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsCiAJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCAyMmIzMmFmLi5iNWE1NTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTM3LDYgKzM3LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQlmbGFnczsKIAl1bnNpZ25lZCBjaGFyCQlwcmVlbXB0X2NvdW50OwogCWludAkJCXBpZDsKKwlpbnQJCQlwYWRkaW5nOwogfTsKIAogI2RlZmluZSBGVFJBQ0VfTUFYX0VWRU5UCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggYmZiOGY5My4uNTZkOGZjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zNTMsNiArMzUzLDggQEAKIAogdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3Qoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKTsKIHZvaWQgZnJlZV9wYWdlc19leGFjdCh2b2lkICp2aXJ0LCBzaXplX3Qgc2l6ZSk7CisvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGFsbG9jX3BhZ2VzX2V4YWN0X25vZGUgISEhICovCit2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWQoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKTsKIAogI2RlZmluZSBfX2dldF9mcmVlX3BhZ2UoZ2ZwX21hc2spIFwKIAkJX19nZXRfZnJlZV9wYWdlcygoZ2ZwX21hc2spLCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggYmIyOWJiMS4uNDJmN2UyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC03OTksNyArNzk5LDcgQEAKICAqCiAgKiBDYWxsIHRoaXMgaW4gcHJvYmUgZnVuY3Rpb24gKmFmdGVyKiBoaWRfcGFyc2UuIFRoaXMgd2lsbCBzZXR1cCBIVyBidWZmZXJzCiAgKiBhbmQgc3RhcnQgdGhlIGRldmljZSAoaWYgbm90IGRlZmZlcmVkIHRvIGRldmljZSBvcGVuKS4gaGlkX2h3X3N0b3AgbXVzdCBiZQotICogY2FsbGVkIGlmIHRoaXMgd2FzIHN1Y2Nlc3NmdWxsLgorICogY2FsbGVkIGlmIHRoaXMgd2FzIHN1Y2Nlc3NmdWwuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBoaWRfaHdfc3RhcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCiAJCXVuc2lnbmVkIGludCBjb25uZWN0X21hc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hwX3NkYy5oIGIvaW5jbHVkZS9saW51eC9ocF9zZGMuaAppbmRleCA5ZGIzZDQ1Li5kMzkyOTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hwX3NkYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaHBfc2RjLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogI2RlZmluZSBIUF9TRENfU1RBVFVTX1JFRwkweDQwCS8qIERhdGEgZnJvbSBhbiBpODA0MiByZWdpc3RlciAqLwogI2RlZmluZSBIUF9TRENfU1RBVFVTX0hJTENNRCAgICAweDUwCS8qIENvbW1hbmQgZnJvbSBISUwgTUxDICovCiAjZGVmaW5lIEhQX1NEQ19TVEFUVVNfSElMREFUQSAgIDB4NjAJLyogRGF0YSBmcm9tIEhJTCBNTEMgKi8KLSNkZWZpbmUgSFBfU0RDX1NUQVRVU19QVVAJMHg3MAkvKiBTdWNlc3NmdWwgcG93ZXItdXAgc2VsZiB0ZXN0ICovCisjZGVmaW5lIEhQX1NEQ19TVEFUVVNfUFVQCTB4NzAJLyogU3VjY2Vzc2Z1bCBwb3dlci11cCBzZWxmIHRlc3QgKi8KICNkZWZpbmUgSFBfU0RDX1NUQVRVU19LQ09PS0VECTB4ODAJLyogS2V5IGZyb20gY29va2VkIGtiZCAqLwogI2RlZmluZSBIUF9TRENfU1RBVFVTX0tSUEcJMHhjMAkvKiBLZXkgZnJvbSBSZXBlYXQgR2VuICovCiAjZGVmaW5lIEhQX1NEQ19TVEFUVVNfS01PRF9TVVAJMHgxMAkvKiBTaGlmdCBrZXkgaXMgdXAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggZGYyOWM4Zi4uODg0N2M4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCSBsb25nIGFkanVzdF9uZXh0KQogewotCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzKQogCQlyZXR1cm47CiAJX192bWFfYWRqdXN0X3RyYW5zX2h1Z2Uodm1hLCBzdGFydCwgZW5kLCBhZGp1c3RfbmV4dCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyby5oIGIvaW5jbHVkZS9saW51eC9pMm8uaAppbmRleCA5ZTdhMTJkLi5hNmRlZWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyby5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJvLmgKQEAgLTgyNiw3ICs4MjYsNyBAQAogICoJQGM6IEkyTyBjb250cm9sbGVyCiAgKgogICoJVGhpcyBmdW5jdGlvbiB0cmllcyB0byBnZXQgYSBtZXNzYWdlIGZyYW1lLiBJZiBubyBtZXNzYWdlIGZyYW1lIGlzCi0gKglhdmFpbGFibGUgZG8gbm90IHdhaXQgdW50aWwgb25lIGlzIGF2YWlsYWJlIChzZWUgYWxzbyBpMm9fbXNnX2dldF93YWl0KS4KKyAqCWF2YWlsYWJsZSBkbyBub3Qgd2FpdCB1bnRpbCBvbmUgaXMgYXZhaWxhYmxlIChzZWUgYWxzbyBpMm9fbXNnX2dldF93YWl0KS4KICAqCVRoZSByZXR1cm5lZCBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIGZyYW1lIGlzIG5vdCBpbiBJL08gbWVtb3J5LCBpdCBpcwogICoJYWxsb2NhdGVkIGZyb20gYSBtZW1wb29sLiBCdXQgYmVjYXVzZSBhIE1GQSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUKICAqCWNvbnRyb2xsZXIgdG9vIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBpMm9fbXNnX3Bvc3QoKSB3aWxsIG5ldmVyIGZhaWwuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggZjNhNzc5NC4uNzcxZDZkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMTY3LDYgKzE2Nyw3IEBACiAjZGVmaW5lIFNZTl9SRVBPUlQJCTAKICNkZWZpbmUgU1lOX0NPTkZJRwkJMQogI2RlZmluZSBTWU5fTVRfUkVQT1JUCQkyCisjZGVmaW5lIFNZTl9EUk9QUEVECQkzCiAKIC8qCiAgKiBLZXlzIGFuZCBidXR0b25zCkBAIC01NTMsOCArNTU0LDggQEAKICNkZWZpbmUgS0VZX0RWRAkJCTB4MTg1CS8qIE1lZGlhIFNlbGVjdCBEVkQgKi8KICNkZWZpbmUgS0VZX0FVWAkJCTB4MTg2CiAjZGVmaW5lIEtFWV9NUDMJCQkweDE4NwotI2RlZmluZSBLRVlfQVVESU8JCTB4MTg4Ci0jZGVmaW5lIEtFWV9WSURFTwkJMHgxODkKKyNkZWZpbmUgS0VZX0FVRElPCQkweDE4OAkvKiBBTCBBdWRpbyBCcm93c2VyICovCisjZGVmaW5lIEtFWV9WSURFTwkJMHgxODkJLyogQUwgTW92aWUgQnJvd3NlciAqLwogI2RlZmluZSBLRVlfRElSRUNUT1JZCQkweDE4YQogI2RlZmluZSBLRVlfTElTVAkJMHgxOGIKICNkZWZpbmUgS0VZX01FTU8JCTB4MThjCS8qIE1lZGlhIFNlbGVjdCBNZXNzYWdlcyAqLwpAQCAtNjAzLDggKzYwNCw5IEBACiAjZGVmaW5lIEtFWV9GUkFNRUZPUldBUkQJMHgxYjUKICNkZWZpbmUgS0VZX0NPTlRFWFRfTUVOVQkweDFiNgkvKiBHZW5EZXNjIC0gc3lzdGVtIGNvbnRleHQgbWVudSAqLwogI2RlZmluZSBLRVlfTUVESUFfUkVQRUFUCTB4MWI3CS8qIENvbnN1bWVyIC0gdHJhbnNwb3J0IGNvbnRyb2wgKi8KLSNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNVUCAgICAgICAgMHgxYjggICAvKiAxMCBjaGFubmVscyB1cCAoMTArKSAqLwotI2RlZmluZSBLRVlfMTBDSEFOTkVMU0RPV04gICAgICAweDFiOSAgIC8qIDEwIGNoYW5uZWxzIGRvd24gKDEwLSkgKi8KKyNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNVUAkweDFiOAkvKiAxMCBjaGFubmVscyB1cCAoMTArKSAqLworI2RlZmluZSBLRVlfMTBDSEFOTkVMU0RPV04JMHgxYjkJLyogMTAgY2hhbm5lbHMgZG93biAoMTAtKSAqLworI2RlZmluZSBLRVlfSU1BR0VTCQkweDFiYQkvKiBBTCBJbWFnZSBCcm93c2VyICovCiAKICNkZWZpbmUgS0VZX0RFTF9FT0wJCTB4MWMwCiAjZGVmaW5lIEtFWV9ERUxfRU9TCQkweDFjMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9tdC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tdC5oCmluZGV4IGIzYWMwNmEuLjMxOGJiODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L210LmgKQEAgLTQ4LDYgKzQ4LDEyIEBACiAJaW5wdXRfZXZlbnQoZGV2LCBFVl9BQlMsIEFCU19NVF9TTE9ULCBzbG90KTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlucHV0X2lzX210X2F4aXMoaW50IGF4aXMpCit7CisJcmV0dXJuIGF4aXMgPT0gQUJTX01UX1NMT1QgfHwKKwkJKGF4aXMgPj0gQUJTX01UX0ZJUlNUICYmIGF4aXMgPD0gQUJTX01UX0xBU1QpOworfQorCiB2b2lkIGlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKIAkJCQl1bnNpZ25lZCBpbnQgdG9vbF90eXBlLCBib29sIGFjdGl2ZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDk0M2M5YjUuLmJlYTBhYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtOTgsNyArOTgsNyBAQAogICogQG5leHQ6CXBvaW50ZXIgdG8gdGhlIG5leHQgaXJxYWN0aW9uIGZvciBzaGFyZWQgaW50ZXJydXB0cwogICogQGlycToJaW50ZXJydXB0IG51bWJlcgogICogQGRpcjoJcG9pbnRlciB0byB0aGUgcHJvYy9pcnEvTk4vbmFtZSBlbnRyeQotICogQHRocmVhZF9mbjoJaW50ZXJ1cHQgaGFuZGxlciBmdW5jdGlvbiBmb3IgdGhyZWFkZWQgaW50ZXJydXB0cworICogQHRocmVhZF9mbjoJaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gZm9yIHRocmVhZGVkIGludGVycnVwdHMKICAqIEB0aHJlYWQ6CXRocmVhZCBwb2ludGVyIGZvciB0aHJlYWRlZCBpbnRlcnJ1cHRzCiAgKiBAdGhyZWFkX2ZsYWdzOglmbGFncyByZWxhdGVkIHRvIEB0aHJlYWQKICAqIEB0aHJlYWRfbWFzazoJYml0bWFzayBmb3Iga2VlcGluZyB0cmFjayBvZiBAdGhyZWFkIGFjdGl2aXR5CkBAIC00ODQsNyArNDg0LDcgQEAKICAgIFByb3BlcnRpZXM6CiAgICAqIElmIHRhc2tsZXRfc2NoZWR1bGUoKSBpcyBjYWxsZWQsIHRoZW4gdGFza2xldCBpcyBndWFyYW50ZWVkCiAgICAgIHRvIGJlIGV4ZWN1dGVkIG9uIHNvbWUgY3B1IGF0IGxlYXN0IG9uY2UgYWZ0ZXIgdGhpcy4KLSAgICogSWYgdGhlIHRhc2tsZXQgaXMgYWxyZWFkeSBzY2hlZHVsZWQsIGJ1dCBpdHMgZXhjZWN1dGlvbiBpcyBzdGlsbCBub3QKKyAgICogSWYgdGhlIHRhc2tsZXQgaXMgYWxyZWFkeSBzY2hlZHVsZWQsIGJ1dCBpdHMgZXhlY3V0aW9uIGlzIHN0aWxsIG5vdAogICAgICBzdGFydGVkLCBpdCB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZS4KICAgICogSWYgdGhpcyB0YXNrbGV0IGlzIGFscmVhZHkgcnVubmluZyBvbiBhbm90aGVyIENQVSAob3Igc2NoZWR1bGUgaXMgY2FsbGVkCiAgICAgIGZyb20gdGFza2xldCBpdHNlbGYpLCBpdCBpcyByZXNjaGVkdWxlZCBmb3IgbGF0ZXIuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwbWkuaCBiL2luY2x1ZGUvbGludXgvaXBtaS5oCmluZGV4IDA0NWYyZjIuLmNhODVjZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBtaS5oCkBAIC0xMTEsNyArMTExLDcgQEAKICAqIEEgTEFOIEFkZHJlc3MuICBUaGlzIGlzIGFuIGFkZHJlc3MgdG8vZnJvbSBhIExBTiBpbnRlcmZhY2UgYnJpZGdlZAogICogYnkgdGhlIEJNQywgbm90IGFuIGFkZHJlc3MgYWN0dWFsbHkgb3V0IG9uIHRoZSBMQU4uCiAgKgotICogQSBjb25jaW91cyBkZWNpc2lvbiB3YXMgbWFkZSBoZXJlIHRvIGRldmlhdGUgc2xpZ2h0bHkgZnJvbSB0aGUgSVBNSQorICogQSBjb25zY2lvdXMgZGVjaXNpb24gd2FzIG1hZGUgaGVyZSB0byBkZXZpYXRlIHNsaWdodGx5IGZyb20gdGhlIElQTUkKICAqIHNwZWMuICBXZSBkbyBub3QgdXNlIHJxU1dJRCBhbmQgcnNTV0lEIGxpa2UgaXQgc2hvd3MgaW4gdGhlCiAgKiBtZXNzYWdlLiAgSW5zdGVhZCwgd2UgdXNlIHJlbW90ZV9TV0lEIGFuZCBsb2NhbF9TV0lELiAgVGhpcyBtZWFucwogICogdGhhdCBhbnkgbWVzc2FnZSAoYSByZXF1ZXN0IG9yIHJlc3BvbnNlKSBmcm9tIGFub3RoZXIgZGV2aWNlIHdpbGwKQEAgLTI1OSw3ICsyNTksNyBAQAogCXZvaWQgKCpkb25lKShzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqbXNnKTsKIAogCS8qIFBsYWNlLWhvbGRlciBmb3IgdGhlIGRhdGEsIGRvbid0IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0Ci0JICAgdGhlIHNpemUgb3IgZXhpc3RhbmNlIG9mIHRoaXMsIHNpbmNlIGl0IG1heSBjaGFuZ2UuICovCisJICAgdGhlIHNpemUgb3IgZXhpc3RlbmNlIG9mIHRoaXMsIHNpbmNlIGl0IG1heSBjaGFuZ2UuICovCiAJdW5zaWduZWQgY2hhciAgIG1zZ19kYXRhW0lQTUlfTUFYX01TR19MRU5HVEhdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuL2hkbGMuaCBiL2luY2x1ZGUvbGludXgvaXNkbi9oZGxjLmgKaW5kZXggNGIzZWNjNC4uOTY1MjEzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuL2hkbGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4vaGRsYy5oCkBAIC0yLDcgKzIsNyBAQAogICogaGRsYy5oICAtLSAgR2VuZXJhbCBwdXJwb3NlIElTRE4gSERMQyBkZWNvZGVyLgogICoKICAqIEltcGxlbWVudGF0aW9uIG9mIGEgSERMQyBkZWNvZGVyL2VuY29kZXIgaW4gc29mdHdhcmUuCi0gKiBOZWNjZXNzYXJ5IGJlY2F1c2Ugc29tZSBJU0ROIGRldmljZXMgZG9uJ3QgaGF2ZSBIRExDCisgKiBOZWNlc3NhcnkgYmVjYXVzZSBzb21lIElTRE4gZGV2aWNlcyBkb24ndCBoYXZlIEhETEMKICAqIGNvbnRyb2xsZXJzLgogICoKICAqIENvcHlyaWdodCAoQykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXhqdXNlci5oIGIvaW5jbHVkZS9saW51eC9peGp1c2VyLmgKaW5kZXggODhiNDU4OS4uOTRhYjVlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9peGp1c2VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9peGp1c2VyLmgKQEAgLTUwLDcgKzUwLDcgQEAKICogSU9DVEwncyB1c2VkIGZvciB0aGUgUXVpY2tuZXQgVGVsZXBob255IENhcmRzCiAqCiAqIElmIHlvdSB1c2UgdGhlIElYSkNUTF9URVNUUkFNIGNvbW1hbmQsIHRoZSBjYXJkIG11c3QgYmUgcG93ZXIgY3ljbGVkIHRvCi0qIHJlc2V0IHRoZSBTUkFNIHZhbHVlcyBiZWZvcmUgZnV0aGVyIHVzZS4KKyogcmVzZXQgdGhlIFNSQU0gdmFsdWVzIGJlZm9yZSBmdXJ0aGVyIHVzZS4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmggYi9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAppbmRleCA5MjJhYTMxLi5mOTc2NzJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaApAQCAtNDIsNyArNDIsNyBAQAogLyogTEFUQ0ggaXMgdXNlZCBpbiB0aGUgaW50ZXJ2YWwgdGltZXIgYW5kIGZ0YXBlIHNldHVwLiAqLwogI2RlZmluZSBMQVRDSCAgKChDTE9DS19USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQkvKiBGb3IgZGl2aWRlciAqLwogCi0vKiBTdXBwb3NlIHdlIHdhbnQgdG8gZGV2aWRlIHR3byBudW1iZXJzIE5PTSBhbmQgREVOOiBOT00vREVOLCB0aGVuIHdlIGNhbgorLyogU3VwcG9zZSB3ZSB3YW50IHRvIGRpdmlkZSB0d28gbnVtYmVycyBOT00gYW5kIERFTjogTk9NL0RFTiwgdGhlbiB3ZSBjYW4KICAqIGltcHJvdmUgYWNjdXJhY3kgYnkgc2hpZnRpbmcgTFNIIGJpdHMsIGhlbmNlIGNhbGN1bGF0aW5nOgogICogICAgIChOT00gPDwgTFNIKSAvIERFTgogICogVGhpcyBob3dldmVyIG1lYW5zIHRyb3VibGUgZm9yIGxhcmdlIE5PTSwgYmVjYXVzZSAoTk9NIDw8IExTSCkgbWF5IG5vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t0aW1lLmggYi9pbmNsdWRlL2xpbnV4L2t0aW1lLmgKaW5kZXggZTFjZWFhOS4uNjAzYmVjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgva3RpbWUuaApAQCAtMzUsNyArMzUsNyBAQAogICoKICAqIE9uIDMyLWJpdCBDUFVzIGFuIG9wdGltaXplZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZXNwZWMgc3RydWN0dXJlCiAgKiBpcyB1c2VkIHRvIGF2b2lkIGV4cGVuc2l2ZSBjb252ZXJzaW9ucyBmcm9tIGFuZCB0byB0aW1lc3BlY3MuIFRoZQotICogZW5kaWFuLWF3YXJlIG9yZGVyIG9mIHRoZSB0diBzdHJ1Y3QgbWVtYmVycyBpcyBjaG9vc2VuIHRvIGFsbG93CisgKiBlbmRpYW4tYXdhcmUgb3JkZXIgb2YgdGhlIHR2IHN0cnVjdCBtZW1iZXJzIGlzIGNob3NlbiB0byBhbGxvdwogICogbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgb24gdGhlIHR2NjQgbWVtYmVyIG9mIHRoZSB1bmlvbiB0b28sIHdoaWNoCiAgKiBmb3IgY2VydGFpbiBvcGVyYXRpb25zIHByb2R1Y2VzIGJldHRlciBjb2RlLgogICoKQEAgLTE1OCw3ICsxNTgsNyBAQAogICogQGxoczoJbWludWVuZAogICogQHJoczoJc3VidHJhaGVuZAogICoKLSAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3Vic3RyYWN0aW9uCisgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIHN1YnRyYWN0aW9uCiAgKi8KIHN0YXRpYyBpbmxpbmUga3RpbWVfdCBrdGltZV9zdWIoY29uc3Qga3RpbWVfdCBsaHMsIGNvbnN0IGt0aW1lX3QgcmhzKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWQtbG0zNTMwLmggYi9pbmNsdWRlL2xpbnV4L2xlZC1sbTM1MzAuaAppbmRleCBiYjY5ZDIwLi41ODU5MmZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZC1sbTM1MzAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xlZC1sbTM1MzAuaApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBMTTM1MzBfUkFNUF9USU1FXzhzCQkoNykKIAogLyogQUxTIFJlc2lzdG9yIFNlbGVjdCAqLwotI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfWgkJKDB4MDApIC8qIEFMUyBJbXBlZGVuY2UgKi8KKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEX1oJCSgweDAwKSAvKiBBTFMgSW1wZWRhbmNlICovCiAjZGVmaW5lIExNMzUzMF9BTFNfSU1QRF8xM181M2tPaG0JKDB4MDEpCiAjZGVmaW5lIExNMzUzMF9BTFNfSU1QRF85XzAxa09obQkoMHgwMikKICNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzVfNDFrT2htCSgweDAzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggYzcxZjQ2OS4uMDRmMzJhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0xMzcsOCArMTM3LDYgQEAKIAlBVEFfREZMQUdfQUNQSV9QRU5ESU5HCT0gKDEgPDwgNSksIC8qIEFDUEkgcmVzdW1lIGFjdGlvbiBwZW5kaW5nICovCiAJQVRBX0RGTEFHX0FDUElfRkFJTEVECT0gKDEgPDwgNiksIC8qIEFDUEkgb24gZGV2Y2ZnIGhhcyBmYWlsZWQgKi8KIAlBVEFfREZMQUdfQU4JCT0gKDEgPDwgNyksIC8qIEFOIGNvbmZpZ3VyZWQgKi8KLQlBVEFfREZMQUdfSElQTQkJPSAoMSA8PCA4KSwgLyogZGV2aWNlIHN1cHBvcnRzIEhJUE0gKi8KLQlBVEFfREZMQUdfRElQTQkJPSAoMSA8PCA5KSwgLyogZGV2aWNlIHN1cHBvcnRzIERJUE0gKi8KIAlBVEFfREZMQUdfRE1BRElSCT0gKDEgPDwgMTApLCAvKiBkZXZpY2UgcmVxdWlyZXMgRE1BRElSICovCiAJQVRBX0RGTEFHX0NGR19NQVNLCT0gKDEgPDwgMTIpIC0gMSwKIApAQCAtMTk4LDYgKzE5Niw3IEBACiAJCQkJCSAgICAgICogbWFuYWdlbWVudCAqLwogCUFUQV9GTEFHX1NXX0FDVElWSVRZCT0gKDEgPDwgMjIpLCAvKiBkcml2ZXIgc3VwcG9ydHMgc3cgYWN0aXZpdHkKIAkJCQkJICAgICAgKiBsZWQgKi8KKwlBVEFfRkxBR19OT19ESVBNCT0gKDEgPDwgMjMpLCAvKiBob3N0IG5vdCBoYXBweSB3aXRoIERJUE0gKi8KIAogCS8qIGJpdHMgMjQ6MzEgb2YgYXAtPmZsYWdzIGFyZSByZXNlcnZlZCBmb3IgTExEIHNwZWNpZmljIGZsYWdzICovCiAKQEAgLTM2NCw3ICszNjMsNyBAQAogCUFUQV9FSF9DTURfVElNRU9VVF9UQUJMRV9TSVpFID0gNiwKIAogCS8qIEhvcmthZ2UgdHlwZXMuIE1heSBiZSBzZXQgYnkgbGliYXRhIG9yIGNvbnRyb2xsZXIgb24gZHJpdmVzCi0JICAgKHNvbWUgaG9ya2FnZSBtYXkgYmUgZHJpdmUvY29udHJvbGxlciBwYWlyIGRlcGVuZGFudCAqLworCSAgIChzb21lIGhvcmthZ2UgbWF5IGJlIGRyaXZlL2NvbnRyb2xsZXIgcGFpciBkZXBlbmRlbnQgKi8KIAogCUFUQV9IT1JLQUdFX0RJQUdOT1NUSUMJPSAoMSA8PCAwKSwJLyogRmFpbGVkIGJvb3QgZGlhZyAqLwogCUFUQV9IT1JLQUdFX05PRE1BCT0gKDEgPDwgMSksCS8qIERNQSBwcm9ibGVtcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0X2JsLmggYi9pbmNsdWRlL2xpbnV4L2xpc3RfYmwuaAppbmRleCA1YmFkMTdkMS4uMzFmOWQ3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0X2JsLmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0X2JsLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9MSVNUX0JMX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KIAogLyoKICAqIFNwZWNpYWwgdmVyc2lvbiBvZiBsaXN0cywgd2hlcmUgaGVhZCBvZiB0aGUgbGlzdCBoYXMgYSBsb2NrIGluIHRoZSBsb3dlc3QKQEAgLTExNCw2ICsxMTUsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9ibF9sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpiKQoreworCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKiliKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2JsX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYikKK3sKKwlfX2JpdF9zcGluX3VubG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWIpOworfQorCiAvKioKICAqIGhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5CS0gaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQogICogQHRwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xydV9jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9scnVfY2FjaGUuaAppbmRleCA3OGZiZjI0Li42YTRmYWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xydV9jYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbHJ1X2NhY2hlLmgKQEAgLTE0OCw3ICsxNDgsNyBAQAogICoKICAqIERSQkQgY3VycmVudGx5IChNYXkgMjAwOSkgb25seSB1c2VzIDYxIGVsZW1lbnRzIG9uIHRoZSByZXN5bmMgbHJ1X2NhY2hlCiAgKiAodG90YWwgbWVtb3J5IHVzYWdlIDIgcGFnZXMpLCBhbmQgdXAgdG8gMzgzMyBlbGVtZW50cyBvbiB0aGUgYWN0X2xvZwotICogbHJ1X2NhY2hlLCB0b3RhbGxpbmcgfjIxNSBrQiBmb3IgNjRiaXQgYXJjaGl0ZWNodHVyZSwgfjUzIHBhZ2VzLgorICogbHJ1X2NhY2hlLCB0b3RhbGxpbmcgfjIxNSBrQiBmb3IgNjRiaXQgYXJjaGl0ZWN0dXJlLCB+NTMgcGFnZXMuCiAgKgogICogV2UgdXN1YWxseSBkbyBub3QgYWN0dWFsbHkgZnJlZSB0aGVzZSBvYmplY3RzIGFnYWluLCBidXQgb25seSAicmVjeWNsZSIKICAqIHRoZW0sIGFzIHRoZSBjaGFuZ2UgImluZGV4OiAtb2xkX2xhYmVsLCArTENfRlJFRSIgd291bGQgbmVlZCBhIHRyYW5zYWN0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDVhNWNlNzAuLjVlOTg0MGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMjE2LDcgKzIxNiw3IEBACiAJcmV0dXJuIDsKIH0KIAotc3RhdGljIGlubGluZSBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3JvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcm90YXRlX3JlY2xhaW1hYmxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaAppbmRleCBhZDFiMTlhLi5hZWYyMzMwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaApAQCAtODYsMTYgKzg2LDI1IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1mZF9jZWxsICptZmRfZ2V0X2NlbGwoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlyZXR1cm4gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJcmV0dXJuIHBkZXYtPm1mZF9jZWxsOwogfQogCiAvKgogICogR2l2ZW4gYSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCdzIGJlZW4gY3JlYXRlZCBieSBtZmRfYWRkX2RldmljZXMoKSwgZmV0Y2gKICAqIHRoZSAubWZkX2RhdGEgZW50cnkgZnJvbSB0aGUgbWZkX2NlbGwgdGhhdCBjcmVhdGVkIGl0LgorICogT3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBwbGF0Zm9ybV9kYXRhIHBvaW50ZXIuCisgKiBUaGlzIG1haW50YWlucyBjb21wYXRpYmlsaXR5IHdpdGggcGxhdGZvcm0gZHJpdmVycyB3aG9zZSBkZXZpY2VzIGFyZW4ndAorICogY3JlYXRlZCBieSB0aGUgbWZkIGxheWVyLCBhbmQgZXhwZWN0IHBsYXRmb3JtX2RhdGEgdG8gY29udGFpbiB3aGF0IHdvdWxkJ3ZlCisgKiBvdGhlcndpc2UgYmVlbiBpbiBtZmRfZGF0YS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkICptZmRfZ2V0X2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlyZXR1cm4gbWZkX2dldF9jZWxsKHBkZXYpLT5tZmRfZGF0YTsKKwljb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBtZmRfZ2V0X2NlbGwocGRldik7CisKKwlpZiAoY2VsbCkKKwkJcmV0dXJuIGNlbGwtPm1mZF9kYXRhOworCWVsc2UKKwkJcmV0dXJuIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogfQogCiBleHRlcm4gaW50IG1mZF9hZGRfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9wZGF0YS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKaW5kZXggYWZlNGRiNC4uNjMyZDE1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKQEAgLTgxLDcgKzgxLDkgQEAKIAlpbnQgcnB1OyAgICAgICAgICAgICAgIC8qKiBQZW4gZG93biBzZW5zaXRpdml0eSByZXNpc3RvciBkaXZpZGVyICovCiAJaW50IHByZXNzdXJlOyAgICAgICAgICAvKiogUmVwb3J0IHByZXNzdXJlIChib29sZWFuKSAqLwogCXVuc2lnbmVkIGludCBkYXRhX2lycTsgLyoqIFRvdWNoIGRhdGEgcmVhZHkgSVJRICovCisJaW50IGRhdGFfaXJxZjsgICAgICAgICAvKiogSVJRIGZsYWdzIGZvciBkYXRhIHJlYWR5IElSUSAqLwogCXVuc2lnbmVkIGludCBwZF9pcnE7ICAgLyoqIFRvdWNoIHBlbmRvd24gZGV0ZWN0IElSUSAqLworCWludCBwZF9pcnFmOyAgICAgICAgICAgLyoqIElSUSBmbGFncyBmb3IgcGVuIGRvd24gSVJRICovCiB9OwogCiBlbnVtIHdtODMxeF93YXRjaGRvZ19hY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3BtaWMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9wbWljLmgKaW5kZXggZTc4NmZlOS4uNTc5YjUwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3BtaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvcG1pYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIHBtaWMuaCAgLS0gIFBvd2VyIE1hbmFnbWVudCBEcml2ZXIgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqIHBtaWMuaCAgLS0gIFBvd2VyIE1hbmFnZW1lbnQgRHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCiAgKgogICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA3NjA2ZDdkLi42NTA3ZGRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMzcsNyArMTM3LDggQEAKICNkZWZpbmUgVk1fUmFuZG9tUmVhZEhpbnQodikJCSgodiktPnZtX2ZsYWdzICYgVk1fUkFORF9SRUFEKQogCiAvKgotICogc3BlY2lhbCB2bWFzIHRoYXQgYXJlIG5vbi1tZXJnYWJsZSwgbm9uLW1sb2NrKClhYmxlCisgKiBTcGVjaWFsIHZtYXMgdGhhdCBhcmUgbm9uLW1lcmdhYmxlLCBub24tbWxvY2soKWFibGUuCisgKiBOb3RlOiBtbS9odWdlX21lbW9yeS5jIFZNX05PX1RIUCBkZXBlbmRzIG9uIHRoaXMgZGVmaW5pdGlvbi4KICAqLwogI2RlZmluZSBWTV9TUEVDSUFMIChWTV9JTyB8IFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCkKIApAQCAtNjA4LDcgKzYwOSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIERlZmluZSB0aGUgYml0IHNoaWZ0cyB0byBhY2Nlc3MgZWFjaCBzZWN0aW9uLiAgRm9yIG5vbi1leGlzdGFudAorICogRGVmaW5lIHRoZSBiaXQgc2hpZnRzIHRvIGFjY2VzcyBlYWNoIHNlY3Rpb24uICBGb3Igbm9uLWV4aXN0ZW50CiAgKiBzZWN0aW9ucyB3ZSBkZWZpbmUgdGhlIHNoaWZ0IGFzIDA7IHRoYXQgcGx1cyBhIDAgbWFzayBlbnN1cmVzCiAgKiB0aGUgY29tcGlsZXIgd2lsbCBvcHRpbWlzZSBhd2F5IHJlZmVyZW5jZSB0byB0aGVtLgogICovCkBAIC0xMDEwLDExICsxMDExLDMzIEBACiBpbnQgY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8oc3RydWN0IHBhZ2UgKnBhZ2UpOwogCiAvKiBJcyB0aGUgdm1hIGEgY29udGludWF0aW9uIG9mIHRoZSBzdGFjayB2bWEgYWJvdmUgaXQ/ICovCi1zdGF0aWMgaW5saW5lIGludCB2bWFfc3RhY2tfY29udGludWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHZtYV9ncm93c2Rvd24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gdm1hICYmICh2bWEtPnZtX2VuZCA9PSBhZGRyKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2Vfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikgJiYKKwkJKHZtYS0+dm1fc3RhcnQgPT0gYWRkcikgJiYKKwkJIXZtYV9ncm93c2Rvd24odm1hLT52bV9wcmV2LCBhZGRyKTsKK30KKworLyogSXMgdGhlIHZtYSBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgc3RhY2sgdm1hIGJlbG93IGl0PyAqLworc3RhdGljIGlubGluZSBpbnQgdm1hX2dyb3dzdXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gdm1hICYmICh2bWEtPnZtX3N0YXJ0ID09IGFkZHIpICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCkgJiYKKwkJKHZtYS0+dm1fZW5kID09IGFkZHIpICYmCisJCSF2bWFfZ3Jvd3N1cCh2bWEtPnZtX25leHQsIGFkZHIpOworfQorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtb3ZlX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIG9sZF9hZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5ld192bWEsCiAJCXVuc2lnbmVkIGxvbmcgbmV3X2FkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKaW5kZXggYzAyMDdhNy4uYmRkN2NlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKQEAgLTk4LDcgKzk4LDcgQEAKICAqIEVWRU5UX0RBVEFfQ09NUExFVEUgaXMgc2V0IGluIEBwZW5kaW5nX2V2ZW50cywgYWxsIGRhdGEtcmVsYXRlZAogICogaW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIGFuZCBAZGF0YV9zdGF0dXMgdXBkYXRlZCB3aXRoIGEKICAqIHNuYXBzaG90IG9mIFNSLiBTaW1pbGFybHksIGJlZm9yZSBFVkVOVF9DTURfQ09NUExFVEUgaXMgc2V0LCB0aGUKLSAqIENNRFJEWSBpbnRlcnVwdCBtdXN0IGJlIGRpc2FibGVkIGFuZCBAY21kX3N0YXR1cyB1cGRhdGVkIHdpdGggYQorICogQ01EUkRZIGludGVycnVwdCBtdXN0IGJlIGRpc2FibGVkIGFuZCBAY21kX3N0YXR1cyB1cGRhdGVkIHdpdGggYQogICogc25hcHNob3Qgb2YgU1IsIGFuZCBiZWZvcmUgRVZFTlRfWEZFUl9DT01QTEVURSBjYW4gYmUgc2V0LCB0aGUKICAqIGJ5dGVzX3hmZXJlZCBmaWVsZCBvZiBAZGF0YSBtdXN0IGJlIHdyaXR0ZW4uIFRoaXMgaXMgZW5zdXJlZCBieQogICogdXNpbmcgYmFycmllcnMuCkBAIC0xNzIsNyArMTcyLDcgQEAKICNkZWZpbmUgRFdfTUNJX1FVSVJLX0lETUFDX0RUTwkJCUJJVCgwKQogLyogZGVsYXkgbmVlZGVkIGJldHdlZW4gcmV0cmllcyBvbiBzb21lIDIuMTFhIGltcGxlbWVudGF0aW9ucyAqLwogI2RlZmluZSBEV19NQ0lfUVVJUktfUkVUUllfREVMQVkJCUJJVCgxKQotLyogSGlnaCBTcGVlZCBDYXBhYmxlIC0gU3VwcG9ydHMgSFMgY2FyZHMgKHVwdG8gNTBNSHopICovCisvKiBIaWdoIFNwZWVkIENhcGFibGUgLSBTdXBwb3J0cyBIUyBjYXJkcyAodXAgdG8gNTBNSHopICovCiAjZGVmaW5lIERXX01DSV9RVUlSS19ISUdIU1BFRUQJCQlCSVQoMikKIC8qIFVucmVsaWFibGUgY2FyZCBkZXRlY3Rpb24gKi8KICNkZWZpbmUgRFdfTUNJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTglCSVQoMykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggOWQyZGViMi4uYTM3NTljYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTI0OSw3ICsyNDksNyBAQAogICogU3RydWN0dXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgZnJvbSBrZXJuZWwgdG8gbXVsdGljYXN0IHJvdXRlci4KICAqIFdlJ2xsIG92ZXJsYXkgdGhlIHN0cnVjdHVyZSBvbnRvIGFuIE1MRCBoZWFkZXIgKG5vdCBhbiBJUHY2IGhlZGVyIGxpa2UgaWdtcG1zZ3t9CiAgKiB1c2VkIGZvciBJUHY0IGltcGxlbWVudGF0aW9uKS4gVGhpcyBpcyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIHdpbGwgYmUgcGFzc2VkIHZpYSBhbgotICogSVB2NiByYXcgc29ja2V0LCBvbiB3aWNoIGFuIGFwcGxpY2F0aW9uIHdpbGwgb25seSByZWNlaXZlciB0aGUgcGF5bG9hZCBpLmUgdGhlIGRhdGEgYWZ0ZXIKKyAqIElQdjYgcmF3IHNvY2tldCwgb24gd2hpY2ggYW4gYXBwbGljYXRpb24gd2lsbCBvbmx5IHJlY2VpdmVyIHRoZSBwYXlsb2FkIGkuZSB0aGUgZGF0YSBhZnRlcgogICogdGhlIElQdjYgaGVhZGVyIGFuZCBhbGwgdGhlIGV4dGVuc2lvbiBoZWFkZXJzLiAoU2VlIHNlY3Rpb24gMyBvZiBSRkMgMzU0MikKICAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IDBkODIzZjIuLmQyNDkyNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkKIAlhZGRyID0gKGNtZF9vZnMgKiB0eXBlKSAqIGludGVybGVhdmU7CiAKLQkvKiBNb2RpZnkgdGhlIHVubG9jayBhZGRyZXNzIGlmIHdlIGFyZSBpbiBjb21wYXRpYmxpdHkgbW9kZS4KKwkvKiBNb2RpZnkgdGhlIHVubG9jayBhZGRyZXNzIGlmIHdlIGFyZSBpbiBjb21wYXRpYmlsaXR5IG1vZGUuCiAJICogRm9yIDE2Yml0IGRldmljZXMgb24gOCBiaXQgYnVzc2VzCiAJICogYW5kIDMyYml0IGRldmljZXMgb24gMTYgYml0IGJ1c3NlcwogCSAqIHNldCB0aGUgbG93IGJpdCBvZiB0aGUgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmNlIG9mIHRoZSBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IGFlNjdlZjUuLmQ0NDE5MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTQxNiw5ICs0MTYsOSBAQAogICogQHNlbGVjdF9jaGlwOglbUkVQTEFDRUFCTEVdIHNlbGVjdCBjaGlwIG5yCiAgKiBAYmxvY2tfYmFkOgkJW1JFUExBQ0VBQkxFXSBjaGVjaywgaWYgdGhlIGJsb2NrIGlzIGJhZAogICogQGJsb2NrX21hcmtiYWQ6CVtSRVBMQUNFQUJMRV0gbWFyayB0aGUgYmxvY2sgYmFkCi0gKiBAY21kX2N0cmw6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW50aW9uIGZvciBjb250cm9sbGluZworICogQGNtZF9jdHJsOgkJW0JPQVJEU1BFQ0lGSUNdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGNvbnRyb2xsaW5nCiAgKgkJCUFMRS9DTEUvbkNFLiBBbHNvIHVzZWQgdG8gd3JpdGUgY29tbWFuZCBhbmQgYWRkcmVzcwotICogQGluaXRfc2l6ZToJCVtCT0FSRFNQRUNJRklDXSBoYXJkd2FyZXNwZWNpZmljIGZ1bnRpb24gZm9yIHNldHRpbmcKKyAqIEBpbml0X3NpemU6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igc2V0dGluZwogICoJCQltdGQtPm9vYnNpemUsIG10ZC0+d3JpdGVzaXplIGFuZCBzbyBvbi4KICAqCQkJQGlkX2RhdGEgY29udGFpbnMgdGhlIDggYnl0ZXMgdmFsdWVzIG9mIE5BTkRfQ01EX1JFQURJRC4KICAqCQkJUmV0dXJuIHdpdGggdGhlIGJ1cyB3aWR0aC4KQEAgLTQzNyw3ICs0MzcsNyBAQAogICogQGVyYXNlX2NtZDoJCVtJTlRFUk5dIGVyYXNlIGNvbW1hbmQgd3JpdGUgZnVuY3Rpb24sIHNlbGVjdGFibGUgZHVlCiAgKgkJCXRvIEFORCBzdXBwb3J0LgogICogQHNjYW5fYmJ0OgkJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiB0byBzY2FuIGJhZCBibG9jayB0YWJsZQotICogQGNoaXBfZGVsYXk6CQlbQk9BUkRTUEVDSUZJQ10gY2hpcCBkZXBlbmRlbnQgZGVsYXkgZm9yIHRyYW5zZmVyaW5nCisgKiBAY2hpcF9kZWxheToJCVtCT0FSRFNQRUNJRklDXSBjaGlwIGRlcGVuZGVudCBkZWxheSBmb3IgdHJhbnNmZXJyaW5nCiAgKgkJCWRhdGEgZnJvbSBhcnJheSB0byByZWFkIHJlZ3MgKHRSKS4KICAqIEBzdGF0ZToJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOQU5EIGRldmljZQogICogQG9vYl9wb2k6CQlwb2lzb24gdmFsdWUgYnVmZmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC94aXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCmluZGV4IDM2ZWZjYmEuLmFiZWQ0ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCkBAIC01MSw3ICs1MSw3IEBACiAgKiAJcmV0dXJuIGluIHVzZWNzIHRoZSBlbGFwc2VkIHRpbWViZXR3ZWVuIG5vdyBhbmQgdGhlIHJlZmVyZW5jZSB4IGFzCiAgKiAJcmV0dXJuZWQgYnkgeGlwX2N1cnJ0aW1lKCkuCiAgKgotICogCW5vdGUgMTogY29udmVydGlvbiB0byB1c2VjIGNhbiBiZSBhcHByb3hpbWF0ZWQsIGFzIGxvbmcgYXMgdGhlCisgKiAJbm90ZSAxOiBjb252ZXJzaW9uIHRvIHVzZWMgY2FuIGJlIGFwcHJveGltYXRlZCwgYXMgbG9uZyBhcyB0aGUKICAqIAkJcmV0dXJuZWQgdmFsdWUgaXMgPD0gdGhlIHJlYWwgZWxhcHNlZCB0aW1lLgogICogCW5vdGUgMjogdGhpcyBzaG91bGQgYmUgYWJsZSB0byBjb3BlIHdpdGggYSBmZXcgc2Vjb25kcyB3aXRob3V0CiAgKiAJCW92ZXJmbG93aW5nLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNWVlYjJjZC4uMDI0OWZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yNTk4LDggKzI1OTgsOCBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBkZXZfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWlmIChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCi0JCXJldHVybiAhIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pOworCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCisJCXJldHVybiAxOwogCWlmICghZGV2LT5ldGh0b29sX29wcyB8fCAhZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4X2NzdW0pCiAJCXJldHVybiAwOwogCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhfY3N1bShkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggZWVlYzAwYS4uN2ZhOTVkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCkBAIC0yNzAsNyArMjcwLDggQEAKIAkJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCQkgICAgdW5zaWduZWQgaW50IGxlbiwKIAkJCQkJICAgIHVfaW50OF90IHByb3RvY29sKTsKLQlpbnQJCSgqcm91dGUpKHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpOworCWludAkJKCpyb3V0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAorCQkJCSBzdHJ1Y3QgZmxvd2kgKmZsLCBib29sIHN0cmljdCk7CiAJdm9pZAkJKCpzYXZlcm91dGUpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KTsKIAlpbnQJCSgqcmVyb3V0ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKaW5kZXggZWMzMzNkOC4uNWEyNjJlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKQEAgLTI5Myw3ICsyOTMsNyBAQAogCS8qIExvY2sgcHJvdGVjdGluZyB0aGUgc2V0IGRhdGEgKi8KIAlyd2xvY2tfdCBsb2NrOwogCS8qIFJlZmVyZW5jZXMgdG8gdGhlIHNldCAqLwotCWF0b21pY190IHJlZjsKKwl1MzIgcmVmOwogCS8qIFRoZSBjb3JlIHNldCB0eXBlICovCiAJc3RydWN0IGlwX3NldF90eXBlICp0eXBlOwogCS8qIFRoZSB0eXBlIHZhcmlhbnQgZG9pbmcgdGhlIHJlYWwgam9iICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYWhhc2guaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9haGFzaC5oCmluZGV4IGVjOWQ5YmUuLmEwMTk2YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9haGFzaC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9haGFzaC5oCkBAIC01MTUsOCArNTE1LDcgQEAKIAlpZiAoaC0+bmV0bWFzayAhPSBIT1NUX01BU0spCiAJCU5MQV9QVVRfVTgoc2tiLCBJUFNFVF9BVFRSX05FVE1BU0ssIGgtPm5ldG1hc2spOwogI2VuZGlmCi0JTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywKLQkJICAgICAgaHRvbmwoYXRvbWljX3JlYWQoJnNldC0+cmVmKSAtIDEpKTsKKwlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtPnJlZiAtIDEpKTsKIAlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9NRU1TSVpFLCBodG9ubChtZW1zaXplKSk7CiAJaWYgKHdpdGhfdGltZW91dChoLT50aW1lb3V0KSkKIAkJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfVElNRU9VVCwgaHRvbmwoaC0+dGltZW91dCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oCmluZGV4IDJhMTBlZmQuLjZhMDY2NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmgKQEAgLTYwLDcgKzYwLDcgQEAKIAlfX2JlMTYgcGF5bG9hZF9sZW47CS8qIHNpemUgb2YgcHBwIHBheWxvYWQsIG5vdCBpbmMuIGdyZSBoZWFkZXIgKi8KIAlfX2JlMTYgY2FsbF9pZDsJCS8qIHBlZXIncyBjYWxsX2lkIGZvciB0aGlzIHNlc3Npb24gKi8KIAlfX2JlMzIgc2VxOwkJLyogc2VxdWVuY2UgbnVtYmVyLiAgUHJlc2VudCBpZiBTPT0xICovCi0JX19iZTMyIGFjazsJCS8qIHNlcSBudW1iZXIgb2YgaGlnaGVzdCBwYWNrZXQgcmVjaWV2ZWQgYnkgKi8KKwlfX2JlMzIgYWNrOwkJLyogc2VxIG51bWJlciBvZiBoaWdoZXN0IHBhY2tldCByZWNlaXZlZCBieSAqLwogCQkJCS8qICBzZW5kZXIgaW4gdGhpcyBzZXNzaW9uICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCmluZGV4IDFjNmYwYzUuLjg3OTdlZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCkBAIC05Miw3ICs5Miw3IEBACiAKIC8qIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGJldHdlZW4gYW4gZWJ0X2VudHJ5IHN0cnVjdCBhbmQgYW4KICAqIGVidF9lbnRyaWVzIHN0cnVjdCB3aGVuIHRyYXZlcnNpbmcgdGhlIGVudHJpZXMgZnJvbSBzdGFydCB0byBlbmQuCi0gKiBVc2luZyB0aGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUgYWxvdCwgd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byB1c2UKKyAqIFVzaW5nIHRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSBhIGxvdCwgd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byB1c2UKICAqIGVidF9lbnRyaWVzLgogICogQ29udHJhcnksIGlwdGFibGVzIGRvZXNuJ3QgdXNlIHNvbWV0aGluZyBsaWtlIGVidF9lbnRyaWVzIGFuZCB0aGVyZWZvcmUgdXNlcwogICogZGlmZmVyZW50IHRlY2huaXF1ZXMgZm9yIG5hbWluZyB0aGUgcG9saWN5IGFuZCBzdWNoLiBTbywgaXB0YWJsZXMgZG9lc24ndApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnM0LmggYi9pbmNsdWRlL2xpbnV4L25mczQuaAppbmRleCBiNTI4ZjZkLi4xNzhmYWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mczQuaApAQCAtMzU5LDcgKzM1OSw3IEBACiAJCQkJCQkvKiBFcnJvciAxMDA3MyBpcyB1bnVzZWQuICovCiAJTkZTNEVSUl9DTElFTlRJRF9CVVNZCT0gMTAwNzQsCS8qIGNsaWVudGlkIGhhcyBzdGF0ZSAqLwogCU5GUzRFUlJfUE5GU19JT19IT0xFCT0gMTAwNzUsCS8qIElPIHRvIF9TUEFSU0UgZmlsZSBob2xlICovCi0JTkZTNEVSUl9TRVFfRkFMU0VfUkVUUlkJPSAxMDA3NiwJLyogcmV0cnkgbm90IG9yaWdpb25hbCAqLworCU5GUzRFUlJfU0VRX0ZBTFNFX1JFVFJZCT0gMTAwNzYsCS8qIHJldHJ5IG5vdCBvcmlnaW5hbCAqLwogCU5GUzRFUlJfQkFEX0hJR0hfU0xPVAk9IDEwMDc3LAkvKiBzZXF1ZW5jZSBhcmcgYmFkICovCiAJTkZTNEVSUl9ERUFEU0VTU0lPTgk9IDEwMDc4LAkvKiBwZXJzaXN0ZW50IHNlc3Npb24gZGVhZCAqLwogCU5GUzRFUlJfRU5DUl9BTEdfVU5TVVBQID0gMTAwNzksCS8qIFNTViBhbGcgbWlzbWF0Y2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDIxNmNlYTUuLjg3Njk0Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtNDcsNiArNDcsNyBAQAogCiAjaWZkZWYgQ09ORklHX05GU19WNAogCXU2NAkJCWNsX2NsaWVudGlkOwkvKiBjb25zdGFudCAqLworCW5mczRfdmVyaWZpZXIJCWNsX2NvbmZpcm07CS8qIENsaWVudGlkIHZlcmlmaWVyICovCiAJdW5zaWduZWQgbG9uZwkJY2xfc3RhdGU7CiAKIAlzcGlubG9ja190CQljbF9sb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAppbmRleCA3OGIxMDFlLi43ZTM3MWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaApAQCAtNTAsNiArNTAsNyBAQAogCX0gZHU7CiAJc3RydWN0IG5mc19mc2lkCQlmc2lkOwogCV9fdTY0CQkJZmlsZWlkOworCV9fdTY0CQkJbW91bnRlZF9vbl9maWxlaWQ7CiAJc3RydWN0IHRpbWVzcGVjCQlhdGltZTsKIAlzdHJ1Y3QgdGltZXNwZWMJCW10aW1lOwogCXN0cnVjdCB0aW1lc3BlYwkJY3RpbWU7CkBAIC04Myw2ICs4NCw3IEBACiAjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1BSRUNIQU5HRQkoMVUgPDwgMTgpCiAjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMCSgxVSA8PCAxOSkJLyogTkZTdjQgcmVmZXJyYWwgKi8KICNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfTU9VTlRQT0lOVAkoMVUgPDwgMjApCS8qIFRyZWF0IGFzIG1vdW50cG9pbnQgKi8KKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQJCSgxVSA8PCAyMSkKIAogI2RlZmluZSBORlNfQVRUUl9GQVRUUiAoTkZTX0FUVFJfRkFUVFJfVFlQRSBcCiAJCXwgTkZTX0FUVFJfRkFUVFJfTU9ERSBcCkBAIC0yMzEsNiArMjMzLDcgQEAKIAlzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfYXJncyBhcmdzOwogCXN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgcmVzOwogCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoqbHNlZ3BwOworCWdmcF90IGdmcF9mbGFnczsKIH07CiAKIHN0cnVjdCBuZnM0X2dldGRldmljZWluZm9fYXJncyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmgKaW5kZXggYmQzMTYxNS4uODQwNThlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL2V4cG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9leHBvcnQuaApAQCAtODAsNyArODAsNyBAQAogCiAvKgogICogV2Uga2VlcCBhbiBhcnJheSBvZiBwc2V1ZG9mbGF2b3JzIHdpdGggdGhlIGV4cG9ydCwgaW4gb3JkZXIgZnJvbSBtb3N0Ci0gKiB0byBsZWFzdCBwcmVmZXJyZWQuICBGb3IgdGhlIGZvcnNlZWFibGUgZnV0dXJlLCB3ZSBkb24ndCBleHBlY3QgbW9yZQorICogdG8gbGVhc3QgcHJlZmVycmVkLiAgRm9yIHRoZSBmb3Jlc2VlYWJsZSBmdXR1cmUsIHdlIGRvbid0IGV4cGVjdCBtb3JlCiAgKiB0aGFuIHRoZSBlaWdodCBwc2V1ZG9mbGF2b3JzIG51bGwsIHVuaXgsIGtyYjUsIGtyYjVpLCBrcmI1cCwgc2twbTMsCiAgKiBzcGttM2ksIGFuZCBzcGttM3AgKGFuZCB1c2luZyBhbGwgOCBhdCBvbmNlIHNob3VsZCBiZSByYXJlKS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaAppbmRleCA4MGQ1NWJiLi5mNzZkODBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaApAQCAtNDksNyArNDksNyBAQAogICoKICAqIFRoZSBhdXRoX3R5cGUgZmllbGQgc3BlY2lmaWVzIGhvdyB0aGUgZmlsZWhhbmRsZSBjYW4gYmUgYXV0aGVudGljYXRlZAogICogVGhpcyBtaWdodCBhbGxvdyBhIGZpbGUgdG8gYmUgY29uZmlybWVkIHRvIGJlIGluIGEgd3JpdGFibGUgcGFydCBvZiBhCi0gKiBmaWxldHJlZSB3aXRob3V0IGNoZWNraW5nIHRoZSBwYXRoIGZyb20gaXQgdXB0byB0aGUgcm9vdC4KKyAqIGZpbGV0cmVlIHdpdGhvdXQgY2hlY2tpbmcgdGhlIHBhdGggZnJvbSBpdCB1cCB0byB0aGUgcm9vdC4KICAqIEN1cnJlbnQgdmFsdWVzOgogICogICAgIDAgIC0gTm8gYXV0aGVudGljYXRpb24uICBmYl9hdXRoIGlzIDAgYnl0ZXMgbG9uZwogICogUG9zc2libGUgZnV0dXJlIHZhbHVlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggMzAwMjIxOC4uYmJmYTEwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTQxNCw3ICs0MTQsNyBAQAogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7Ci0vKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBpbmJldHdlZW4sIHRoaXMgaXMgQUJJISAqLworLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCiAJTkw4MDIxMV9DTURfVU5TUEVDLAogCiAJTkw4MDIxMV9DTURfR0VUX1dJUEhZLAkJLyogY2FuIGR1bXAgKi8KQEAgLTg2MCw3ICs4NjAsNyBAQAogICoJVGhpcyBjYW4gYmUgdXNlZCB0byBtYXNrIG91dCBhbnRlbm5hcyB3aGljaCBhcmUgbm90IGF0dGFjaGVkIG9yIHNob3VsZAogICoJbm90IGJlIHVzZWQgZm9yIHJlY2VpdmluZy4gSWYgYW4gYW50ZW5uYSBpcyBub3Qgc2VsZWN0ZWQgaW4gdGhpcyBiaXRtYXAKICAqCXRoZSBoYXJkd2FyZSBzaG91bGQgbm90IGJlIGNvbmZpZ3VyZWQgdG8gcmVjZWl2ZSBvbiB0aGlzIGFudGVubmEuCi0gKglGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0b24gc2VlIEBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWC4KKyAqCUZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gc2VlIEBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWC4KICAqCiAgKiBATkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfQVZBSUxfVFg6IEJpdG1hcCBvZiBhbnRlbm5hcyB3aGljaCBhcmUgYXZhaWxhYmxlCiAgKglmb3IgY29uZmlndXJhdGlvbiBhcyBUWCBhbnRlbm5hcyB2aWEgdGhlIGFib3ZlIHBhcmFtZXRlcnMuCkBAIC04OTEsNyArODkxLDcgQEAKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwogZW51bSBubDgwMjExX2F0dHJzIHsKLS8qIGRvbid0IGNoYW5nZSB0aGUgb3JkZXIgb3IgYWRkIGFueXRoaW5nIGluYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisvKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBiZXR3ZWVuLCB0aGlzIGlzIEFCSSEgKi8KIAlOTDgwMjExX0FUVFJfVU5TUEVDLAogCiAJTkw4MDIxMV9BVFRSX1dJUEhZLApAQCAtMTQxOSw3ICsxNDE5LDcgQEAKICAqIAk4MDIuMTEgY291bnRyeSBpbmZvcm1hdGlvbiBlbGVtZW50IHdpdGggcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBpdAogICogCXRoaW5rcyB3ZSBzaG91bGQgY29uc2lkZXIuIGNmZzgwMjExIG9ubHkgcHJvY2Vzc2VzIHRoZSBjb3VudHJ5CiAgKgljb2RlIGZyb20gdGhlIElFLCBhbmQgcmVsaWVzIG9uIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbgotICoJc3RydWN0dXJlIHBhc2VkIGJ5IHVzZXJzcGFjZSAoQ1JEQSkgZnJvbSBvdXIgd2lyZWxlc3MtcmVnZGIuCisgKglzdHJ1Y3R1cmUgcGFzc2VkIGJ5IHVzZXJzcGFjZSAoQ1JEQSkgZnJvbSBvdXIgd2lyZWxlc3MtcmVnZGIuCiAgKglJZiBhIGNoYW5uZWwgaXMgZW5hYmxlZCBidXQgdGhlIGNvdW50cnkgY29kZSBpbmRpY2F0ZXMgaXQgc2hvdWxkCiAgKgliZSBkaXNhYmxlZCB3ZSBkaXNhYmxlIHRoZSBjaGFubmVsIGFuZCByZS1lbmFibGUgaXQgdXBvbiBkaXNhc3NvY2lhdGlvbi4KICAqLwpAQCAtMTU5OCw3ICsxNTk4LDcgQEAKICAqIEBOTDgwMjExX01FU0hDT05GX1JFVFJZX1RJTUVPVVQ6IHNwZWNpZmllcyB0aGUgaW5pdGlhbCByZXRyeSB0aW1lb3V0IGluCiAgKiBtaWxsaXNlY29uZCB1bml0cywgdXNlZCBieSB0aGUgUGVlciBMaW5rIE9wZW4gbWVzc2FnZQogICoKLSAqIEBOTDgwMjExX01FU0hDT05GX0NPTkZJUk1fVElNRU9VVDogc3BlY2lmaWVzIHRoZSBpbml0YWwgY29uZmlybSB0aW1lb3V0LCBpbgorICogQE5MODAyMTFfTUVTSENPTkZfQ09ORklSTV9USU1FT1VUOiBzcGVjaWZpZXMgdGhlIGluaXRpYWwgY29uZmlybSB0aW1lb3V0LCBpbgogICogbWlsbGlzZWNvbmQgdW5pdHMsIHVzZWQgYnkgdGhlIHBlZXIgbGluayBtYW5hZ2VtZW50IHRvIGNsb3NlIGEgcGVlciBsaW5rCiAgKgogICogQE5MODAyMTFfTUVTSENPTkZfSE9MRElOR19USU1FT1VUOiBzcGVjaWZpZXMgdGhlIGhvbGRpbmcgdGltZW91dCwgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaCBiL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaAppbmRleCAyMDI2ZjllLi42MjFkZmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkJCQkJKiBlbmFibGluZyBpbnRlcnJ1cHRzLiBNdXN0IG5vdCBzbGVlcCwKIAkJCQkJKiBtdXN0IG5vdCBmYWlsICovCiAKLS8qIFVzZWQgZm9yIENQVSBob3RwbHVnIGV2ZW50cyBvY2N1cmluZyB3aGlsZSB0YXNrcyBhcmUgZnJvemVuIGR1ZSB0byBhIHN1c3BlbmQKKy8qIFVzZWQgZm9yIENQVSBob3RwbHVnIGV2ZW50cyBvY2N1cnJpbmcgd2hpbGUgdGFza3MgYXJlIGZyb3plbiBkdWUgdG8gYSBzdXNwZW5kCiAgKiBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MKICAqLwogI2RlZmluZSBDUFVfVEFTS1NfRlJPWkVOCTB4MDAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vbWFwM2lzcC5oIGIvaW5jbHVkZS9saW51eC9vbWFwM2lzcC5oCmluZGV4IDE1MDgyMmIuLmI2MTExZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb21hcDNpc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L29tYXAzaXNwLmgKQEAgLTI1MCw3ICsyNTAsNyBAQAogLyogQ29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgSG9yaXpvbnRhbCBNZWRpYW4gRmlsdGVyICovCiBzdHJ1Y3Qgb21hcDNpc3BfaDNhX2FmX2htZiB7CiAJX191OCBlbmFibGU7CS8qIFN0YXR1cyBvZiBIb3Jpem9udGFsIE1lZGlhbiBGaWx0ZXIgKi8KLQlfX3U4IHRocmVzaG9sZDsJLyogVGhyZXNoaG9sZCBWYWx1ZSBmb3IgSG9yaXpvbnRhbCBNZWRpYW4gRmlsdGVyICovCisJX191OCB0aHJlc2hvbGQ7CS8qIFRocmVzaG9sZCBWYWx1ZSBmb3IgSG9yaXpvbnRhbCBNZWRpYW4gRmlsdGVyICovCiB9OwogCiAvKiBDb250YWlucyB0aGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBJSVIgRmlsdGVycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCmluZGV4IGY1ZGUyMWQuLjk2MWVjYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAjZGVmaW5lIFBDR19BUlJBWUlEX09GRlNFVAkoQklUU19QRVJfTE9ORyAtIFBDR19BUlJBWUlEX1dJRFRIKQogLyoKLSAqIFplcm8gdGhlIHNoaWZ0IGNvdW50IGZvciBub24tZXhpc3RhbnQgZmllbGRzLCB0byBwcmV2ZW50IGNvbXBpbGVyCisgKiBaZXJvIHRoZSBzaGlmdCBjb3VudCBmb3Igbm9uLWV4aXN0ZW50IGZpZWxkcywgdG8gcHJldmVudCBjb21waWxlcgogICogd2FybmluZ3MgYW5kIGVuc3VyZSByZWZlcmVuY2VzIGFyZSBvcHRpbWl6ZWQgYXdheS4KICAqLwogI2RlZmluZSBQQ0dfQVJSQVlJRF9TSElGVAkoUENHX0FSUkFZSURfT0ZGU0VUICogKFBDR19BUlJBWUlEX1dJRFRIICE9IDApKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCAxMWZkMzgxLi44YWJlOGQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNTE4LDcgKzUxOCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzExSF9OQl9NSVNDCTB4MTMwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xMUhfTkJfTElOSwkweDEzMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YzCTB4MTYwMwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfTElOSwkweDE2MDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0Y0CTB4MTYwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DTkIxN0hfRjMJMHgxNzAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFCQkweDIwMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTEFOQ0VfSE9NRQkweDIwMDEKQEAgLTI0NzcsMTUgKzI0NzcsMTIgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0MF9IQgkweDFhMjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NV9IQgkweDFhMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUCTB4MWEzOAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX1NNQlVTCTB4MWMyMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX0xQQ19NSU4JMHgxYzQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ09VR0FSUE9JTlRfTFBDX01BWAkweDFjNWYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVUwkweDFkMjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19MUENfMAkweDFkNDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19MUENfMQkweDFkNDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9ESDg5WFhDQ19MUENfTUlOCTB4MjMxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX0xQQ19NQVgJMHgyMzFmCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfREg4OVhYQ0NfU01CVVMJMHgyMzMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wCTB4MjQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMQkweDI0MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzMJMHgyNDEzCkBAIC0yNjk2LDcgKzI2OTMsNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzUJMHgzYTYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNV8zNDAwX1NFUklFU19MUENfTUlOCTB4M2IwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfTFBDX01BWAkweDNiMWYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81XzM0MDBfU0VSSUVTX1NNQlVTCTB4M2IzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CCTB4NDAyZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzUxMDBfMTYJMHg2NWYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNTEwMF8yMQkweDY1ZjUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAppbmRleCA1YjdlNmIxLi5iZTAxMzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCkBAIC0yMjMsNyArMjIzLDcgQEAKICNkZWZpbmUgIFBDSV9QTV9DQVBfUE1FX0NMT0NLCTB4MDAwOAkvKiBQTUUgY2xvY2sgcmVxdWlyZWQgKi8KICNkZWZpbmUgIFBDSV9QTV9DQVBfUkVTRVJWRUQgICAgMHgwMDEwICAvKiBSZXNlcnZlZCBmaWVsZCAqLwogI2RlZmluZSAgUENJX1BNX0NBUF9EU0kJCTB4MDAyMAkvKiBEZXZpY2Ugc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLSNkZWZpbmUgIFBDSV9QTV9DQVBfQVVYX1BPV0VSCTB4MDFDMAkvKiBBdXhpbGxpYXJ5IHBvd2VyIHN1cHBvcnQgbWFzayAqLworI2RlZmluZSAgUENJX1BNX0NBUF9BVVhfUE9XRVIJMHgwMUMwCS8qIEF1eGlsaWFyeSBwb3dlciBzdXBwb3J0IG1hc2sgKi8KICNkZWZpbmUgIFBDSV9QTV9DQVBfRDEJCTB4MDIwMAkvKiBEMSBwb3dlciBzdGF0ZSBzdXBwb3J0ICovCiAjZGVmaW5lICBQQ0lfUE1fQ0FQX0QyCQkweDA0MDAJLyogRDIgcG93ZXIgc3RhdGUgc3VwcG9ydCAqLwogI2RlZmluZSAgUENJX1BNX0NBUF9QTUUJCTB4MDgwMAkvKiBQTUUgcGluIHN1cHBvcnRlZCAqLwpAQCAtNDM1LDcgKzQzNSw3IEBACiAjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9MMFNFTAkweDAwMDA3MDAwIC8qIEwwcyBFeGl0IExhdGVuY3kgKi8KICNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0wxRUwJMHgwMDAzODAwMCAvKiBMMSBFeGl0IExhdGVuY3kgKi8KICNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0NMS1BNCTB4MDAwNDAwMDAgLyogTDEgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudCAqLwotI2RlZmluZSAgUENJX0VYUF9MTktDQVBfU0RFUkMJMHgwMDA4MDAwMCAvKiBTdXByaXNlIERvd24gRXJyb3IgUmVwb3J0aW5nIENhcGFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX1NERVJDCTB4MDAwODAwMDAgLyogU3VycHJpc2UgRG93biBFcnJvciBSZXBvcnRpbmcgQ2FwYWJsZSAqLwogI2RlZmluZSAgUENJX0VYUF9MTktDQVBfRExMTEFSQwkweDAwMTAwMDAwIC8qIERhdGEgTGluayBMYXllciBMaW5rIEFjdGl2ZSBSZXBvcnRpbmcgQ2FwYWJsZSAqLwogI2RlZmluZSAgUENJX0VYUF9MTktDQVBfTEJOQwkweDAwMjAwMDAwIC8qIExpbmsgQmFuZHdpZHRoIE5vdGlmaWNhdGlvbiBDYXBhYmlsaXR5ICovCiAjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9QTgkweGZmMDAwMDAwIC8qIFBvcnQgTnVtYmVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaAppbmRleCAzYTVjNDQ0Li44Yjk3MzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKQEAgLTk0OCw3ICs5NDgsNyBAQAogCWlycXNhZmVfZ2VuZXJpY19jcHVfY21weGNoZ19kb3VibGUocGNwMSwgcGNwMiwgb3ZhbDEsIG92YWwyLCBudmFsMSwgbnZhbDIpCiAjIGVuZGlmCiAjIGRlZmluZSBpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZShwY3AxLCBwY3AyLCBvdmFsMSwgb3ZhbDIsIG52YWwxLCBudmFsMikJXAotCV9fcGNwdV9kb3VibGVfY2FsbF9yZXR1cm5faW50KGlycXNhZmVfY3B1X2NtcHhjaGdfZG91YmxlXywgKHBjcDEpLCAocGNwMiksIChvdmFsMSksIChvdmFsMiksIChudmFsMSksIChudmFsMikpCisJX19wY3B1X2RvdWJsZV9jYWxsX3JldHVybl9ib29sKGlycXNhZmVfY3B1X2NtcHhjaGdfZG91YmxlXywgKHBjcDEpLCAocGNwMiksIChvdmFsMSksIChvdmFsMiksIChudmFsMSksIChudmFsMikpCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fTElOVVhfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggMzExYjRkYy4uZWU5ZjFlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTY2Miw3ICs2NjIsNyBAQAogCWludCAgKCpjb21taXRfdHhuKQkoc3RydWN0IHBtdSAqcG11KTsgLyogb3B0aW9uYWwgKi8KIAkvKgogCSAqIFdpbGwgY2FuY2VsIHRoZSB0cmFuc2FjdGlvbiwgYXNzdW1lcyAtPmRlbCgpIGlzIGNhbGxlZAotCSAqIGZvciBlYWNoIHN1Y2Nlc3NmdWxsIC0+YWRkKCkgZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4KKwkgKiBmb3IgZWFjaCBzdWNjZXNzZnVsIC0+YWRkKCkgZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4KIAkgKi8KIAl2b2lkICgqY2FuY2VsX3R4bikJKHN0cnVjdCBwbXUgKnBtdSk7IC8qIG9wdGlvbmFsICovCiB9OwpAQCAtMTA4Niw3ICsxMDg2LDcgQEAKIHsKIAlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQ09OVEVYVF9TV0lUQ0hFUywgMSwgMSwgTlVMTCwgMCk7CiAKLQlDT05EX1NUTVQoJnBlcmZfc2NoZWRfZXZlbnRzLCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQodGFzaywgbmV4dCkpOworCV9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dCh0YXNrLCBuZXh0KTsKIH0KIAogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkLmggYi9pbmNsdWRlL2xpbnV4L3BpZC5oCmluZGV4IGVmY2VkYTAuLmNkY2VkODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9waWQuaApAQCAtMjEsNyArMjEsNyBAQAogICogcXVpY2tseSBmcm9tIHRoZSBudW1lcmljIHBpZCB2YWx1ZS4gIFRoZSBhdHRhY2hlZCBwcm9jZXNzZXMgbWF5IGJlCiAgKiBxdWlja2x5IGFjY2Vzc2VkIGJ5IGZvbGxvd2luZyBwb2ludGVycyBmcm9tIHN0cnVjdCBwaWQuCiAgKgotICogU3RvcmluZyBwaWRfdCB2YWx1ZXMgaW4gdGhlIGtlcm5lbCBhbmQgcmVmZXJpbmcgdG8gdGhlbSBsYXRlciBoYXMgYQorICogU3RvcmluZyBwaWRfdCB2YWx1ZXMgaW4gdGhlIGtlcm5lbCBhbmQgcmVmZXJyaW5nIHRvIHRoZW0gbGF0ZXIgaGFzIGEKICAqIHByb2JsZW0uICBUaGUgcHJvY2VzcyBvcmlnaW5hbGx5IHdpdGggdGhhdCBwaWQgbWF5IGhhdmUgZXhpdGVkIGFuZCB0aGUKICAqIHBpZCBhbGxvY2F0b3Igd3JhcHBlZCwgYW5kIGFub3RoZXIgcHJvY2VzcyBjb3VsZCBoYXZlIGNvbWUgYWxvbmcKICAqIGFuZCBiZWVuIGFzc2lnbmVkIHRoYXQgcGlkLgpAQCAtMTE3LDcgKzExNyw3IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX2dldF9waWQoaW50IG5yKTsKIGV4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX2dlX3BpZChpbnQgbnIsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICopOwotaW50IG5leHRfcGlkbWFwKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMsIGludCBsYXN0KTsKK2ludCBuZXh0X3BpZG1hcChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcGlkX25zLCB1bnNpZ25lZCBpbnQgbGFzdCk7CiAKIGV4dGVybiBzdHJ1Y3QgcGlkICphbGxvY19waWQoc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKIGV4dGVybiB2b2lkIGZyZWVfcGlkKHN0cnVjdCBwaWQgKnBpZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaAppbmRleCBiMTAzMmEzLi4zYTAyZTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogCV9fdTMyCQlsaW1pdDsgICAgICAgIC8qIEhBUkQgbWF4aW1hbCBxdWV1ZSBsZW5ndGggKGJ5dGVzKSAgICAqLwogCV9fdTMyCQlxdGhfbWluOyAgICAgIC8qIE1pbiBhdmVyYWdlIGxlbmd0aCB0aHJlc2hvbGQgKGJ5dGVzKSAqLwogCV9fdTMyCQlxdGhfbWF4OyAgICAgIC8qIE1heCBhdmVyYWdlIGxlbmd0aCB0aHJlc2hvbGQgKGJ5dGVzKSAqLwotCV9fdTMyCQlEUDsgICAgICAgICAgIC8qIHVwdG8gMl4zMiBEUHMgKi8KKwlfX3UzMgkJRFA7ICAgICAgICAgICAvKiB1cCB0byAyXjMyIERQcyAqLwogCV9fdTMyCQliYWNrbG9nOwogCV9fdTMyCQlxYXZlOwogCV9fdTMyCQlmb3JjZWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCBkOTZkYjk4Li43NDQ5NDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KIAorc3RydWN0IG1mZF9jZWxsOworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHsKIAljb25zdCBjaGFyCSogbmFtZTsKIAlpbnQJCWlkOwpAQCAtMjMsNiArMjUsOSBAQAogCiAJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZAkqaWRfZW50cnk7CiAKKwkvKiBNRkQgY2VsbCBwb2ludGVyICovCisJc3RydWN0IG1mZF9jZWxsICptZmRfY2VsbDsKKwogCS8qIGFyY2ggc3BlY2lmaWMgYWRkaXRpb25zICovCiAJc3RydWN0IHBkZXZfYXJjaGRhdGEJYXJjaGRhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb2xsLmggYi9pbmNsdWRlL2xpbnV4L3BvbGwuaAppbmRleCAxYTJjY2Q2Li5jZjQwMDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BvbGwuaApAQCAtODIsNyArODIsNyBAQAogfQogCiAvKgotICogU2NhbGVhYmxlIHZlcnNpb24gb2YgdGhlIGZkX3NldC4KKyAqIFNjYWxhYmxlIHZlcnNpb24gb2YgdGhlIGZkX3NldC4KICAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LWNsb2NrLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LWNsb2NrLmgKaW5kZXggMzY5ZTE5ZC4uN2YxMTgzZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9zaXgtY2xvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LWNsb2NrLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeC10aW1lcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogCiBzdHJ1Y3QgcG9zaXhfY2xvY2s7CiAKQEAgLTEwNCw3ICsxMDUsNyBAQAogICogQG9wczogICAgIEZ1bmN0aW9uYWwgaW50ZXJmYWNlIHRvIHRoZSBjbG9jawogICogQGNkZXY6ICAgIENoYXJhY3RlciBkZXZpY2UgaW5zdGFuY2UgZm9yIHRoaXMgY2xvY2sKICAqIEBrcmVmOiAgICBSZWZlcmVuY2UgY291bnQuCi0gKiBAbXV0ZXg6ICAgUHJvdGVjdHMgdGhlICd6b21iaWUnIGZpZWxkIGZyb20gY29uY3VycmVudCBhY2Nlc3MuCisgKiBAcndzZW06ICAgUHJvdGVjdHMgdGhlICd6b21iaWUnIGZpZWxkIGZyb20gY29uY3VycmVudCBhY2Nlc3MuCiAgKiBAem9tYmllOiAgSWYgJ3pvbWJpZScgaXMgdHJ1ZSwgdGhlbiB0aGUgaGFyZHdhcmUgaGFzIGRpc2FwcGVhcmVkLgogICogQHJlbGVhc2U6IEEgZnVuY3Rpb24gdG8gZnJlZSB0aGUgc3RydWN0dXJlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzCiAgKiAgICAgICAgICAgemVyby4gTWF5IGJlIE5VTEwgaWYgc3RydWN0dXJlIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLgpAQCAtMTE3LDcgKzExOCw3IEBACiAJc3RydWN0IHBvc2l4X2Nsb2NrX29wZXJhdGlvbnMgb3BzOwogCXN0cnVjdCBjZGV2IGNkZXY7CiAJc3RydWN0IGtyZWYga3JlZjsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSByd3NlbTsKIAlib29sIHpvbWJpZTsKIAl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHBvc2l4X2Nsb2NrICpjbGspOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCBiL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaAppbmRleCBhZjdjMzZhLi5hM2JmYmRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oCkBAIC0yOSw3ICsyOSw3IEBACiAJcHJlZmV0Y2h3KHgpCS0gcHJlZmV0Y2hlcyB0aGUgY2FjaGVsaW5lIGF0ICJ4IiBmb3Igd3JpdGUKIAlzcGluX2xvY2tfcHJlZmV0Y2goeCkgLSBwcmVmZXRjaGVzIHRoZSBzcGlubG9jayAqeCBmb3IgdGFraW5nCiAJCi0JdGhlcmUgaXMgYWxzbyBQUkVGRVRDSF9TVFJJREUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdXJlLXByZWZlcmVkIAorCXRoZXJlIGlzIGFsc28gUFJFRkVUQ0hfU1RSSURFIHdoaWNoIGlzIHRoZSBhcmNoaXRlY3VyZS1wcmVmZXJyZWQgCiAJImxvb2thaGVhZCIgc2l6ZSBmb3IgcHJlZmV0Y2hpbmcgc3RyZWFtZWQgb3BlcmF0aW9ucy4KIAkKICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IDgzOGMxMTQuLmVhZjQzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC0yMDgsNiArMjA4LDggQEAKIAkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQsY29uc3QgY2hhciAqZGVzdCkge3JldHVybiBOVUxMO30KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21rZGlyKGNvbnN0IGNoYXIgKm5hbWUsCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpIHtyZXR1cm4gTlVMTDt9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19ta2Rpcl9tb2RlKGNvbnN0IGNoYXIgKm5hbWUsCisJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KSB7IHJldHVybiBOVUxMOyB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjcmVhdGVfcHJvY19yZWFkX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsCiAJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFzZSwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCBhMTE0N2U1Li45MTc4ZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTE4OSw2ICsxODksMTAgQEAKIAkJY2hpbGQtPnB0cmFjZSA9IGN1cnJlbnQtPnB0cmFjZTsKIAkJX19wdHJhY2VfbGluayhjaGlsZCwgY3VycmVudC0+cGFyZW50KTsKIAl9CisKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisJYXRvbWljX3NldCgmY2hpbGQtPnB0cmFjZV9icF9yZWZjbnQsIDEpOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtMzUwLDYgKzM1NCwxMyBAQAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnc1s2XSwgdW5zaWduZWQgaW50IG1heGFyZ3MsCiAJCQkJdW5zaWduZWQgbG9uZyAqc3AsIHVuc2lnbmVkIGxvbmcgKnBjKTsKIAotI2VuZGlmCisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAorZXh0ZXJuIGludCBwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIHB0cmFjZV9wdXRfYnJlYWtwb2ludHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTCAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHhhMnh4X3NzcC5oIGIvaW5jbHVkZS9saW51eC9weGEyeHhfc3NwLmgKaW5kZXggMmY2OTFlNC4uNDQ4MzVmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9weGEyeHhfc3NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9weGEyeHhfc3NwLmgKQEAgLTEyMiw3ICsxMjIsNyBAQAogI2RlZmluZSBTU0NSMV9UU1JFCQkoMSA8PCAyMSkJLyogVHJhbnNtaXQgU2VydmljZSBSZXF1ZXN0IEVuYWJsZSAqLwogI2RlZmluZSBTU0NSMV9SU1JFCQkoMSA8PCAyMCkJLyogUmVjZWl2ZSBTZXJ2aWNlIFJlcXVlc3QgRW5hYmxlICovCiAjZGVmaW5lIFNTQ1IxX1RJTlRFCQkoMSA8PCAxOSkJLyogUmVjZWl2ZXIgVGltZS1vdXQgSW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBTU0NSMV9QSU5URQkJKDEgPDwgMTgpCS8qIFBlcmlwaGVyYWwgVHJhaWxpbmcgQnl0ZSBJbnRlcnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU1NDUjFfUElOVEUJCSgxIDw8IDE4KQkvKiBQZXJpcGhlcmFsIFRyYWlsaW5nIEJ5dGUgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBTU0NSMV9JRlMJCSgxIDw8IDE2KQkvKiBJbnZlcnQgRnJhbWUgU2lnbmFsICovCiAjZGVmaW5lIFNTQ1IxX1NUUkYJCSgxIDw8IDE1KQkvKiBTZWxlY3QgRklGTyBvciBFRldSICovCiAjZGVmaW5lIFNTQ1IxX0VGV1IJCSgxIDw8IDE0KQkvKiBFbmFibGUgRklGTyBXcml0ZS9SZWFkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAppbmRleCBmZmEyZWZiLi43NWNiZjRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKQEAgLTI1MSw3ICsyNTEsNyBAQAogCV9fbGU2NAl1dGltZTsJCS8qIDQwIGJpdHMgc2Vjb25kLCAyNCBidGVzIG1pY3Jvc2Vjb25kcyAqLwogCV9fbGU2NAlldmVudHM7CQkvKiBpbmNyZW1lbnRlZCB3aGVuIHN1cGVyYmxvY2sgdXBkYXRlZCAqLwogCV9fbGU2NAlyZXN5bmNfb2Zmc2V0OwkvKiBkYXRhIGJlZm9yZSB0aGlzIG9mZnNldCAoZnJvbSBkYXRhX29mZnNldCkga25vd24gdG8gYmUgaW4gc3luYyAqLwotCV9fbGUzMglzYl9jc3VtOwkvKiBjaGVja3N1bSB1cHRvIGRldnNbbWF4X2Rldl0gKi8KKwlfX2xlMzIJc2JfY3N1bTsJLyogY2hlY2tzdW0gdXAgdG8gZGV2c1ttYXhfZGV2XSAqLwogCV9fbGUzMgltYXhfZGV2OwkvKiBzaXplIG9mIGRldnNbXSBhcnJheSB0byBjb25zaWRlciAqLwogCV9fdTgJcGFkM1s2NC0zMl07CS8qIHNldCB0byAwIHdoZW4gd3JpdGluZyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggYWY1NjE0OC4uZmY0MjJkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtMzM5LDYgKzMzOSwxMiBAQAogCQkoKHR5cGVvZigqcCkgX19mb3JjZSBfX2tlcm5lbCAqKShwKSk7IFwKIAl9KQogCisjZGVmaW5lIF9fcmN1X2FjY2Vzc19pbmRleChwLCBzcGFjZSkgXAorCSh7IFwKKwkJdHlwZW9mKHApIF9fX19fX19fX3AxID0gQUNDRVNTX09OQ0UocCk7IFwKKwkJcmN1X2RlcmVmZXJlbmNlX3NwYXJzZShwLCBzcGFjZSk7IFwKKwkJKF9fX19fX19fX3AxKTsgXAorCX0pCiAjZGVmaW5lIF9fcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKHAsIGMpIFwKIAkoeyBcCiAJCXR5cGVvZihwKSBfX19fX19fX19wMSA9IEFDQ0VTU19PTkNFKHApOyBcCkBAIC00MjksNiArNDM1LDIwIEBACiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9yYXcocCkgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIDEpIC8qQEBAIG5lZWRlZD8gQEBAKi8KIAogLyoqCisgKiByY3VfYWNjZXNzX2luZGV4KCkgLSBmZXRjaCBSQ1UgaW5kZXggd2l0aCBubyBkZXJlZmVyZW5jaW5nCisgKiBAcDogVGhlIGluZGV4IHRvIHJlYWQKKyAqCisgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgUkNVLXByb3RlY3RlZCBpbmRleCwgYnV0IG9taXQgdGhlCisgKiBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBhbmQga2VlcCB0aGUgQUNDRVNTX09OQ0UoKS4gIFRoaXMgaXMgdXNlZnVsCisgKiB3aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIGluZGV4IGlzIGFjY2Vzc2VkLCBidXQgdGhlIGluZGV4IGlzIG5vdAorICogZGVyZWZlcmVuY2VkLCBmb3IgZXhhbXBsZSwgd2hlbiB0ZXN0aW5nIGFuIFJDVS1wcm90ZWN0ZWQgaW5kZXggYWdhaW5zdAorICogLTEuICBBbHRob3VnaCByY3VfYWNjZXNzX2luZGV4KCkgbWF5IGFsc28gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZQorICogdXBkYXRlLXNpZGUgbG9ja3MgcHJldmVudCB0aGUgdmFsdWUgb2YgdGhlIGluZGV4IGZyb20gY2hhbmdpbmcsIHlvdQorICogc2hvdWxkIGluc3RlYWQgdXNlIHJjdV9kZXJlZmVyZW5jZV9pbmRleF9wcm90ZWN0ZWQoKSBmb3IgdGhpcyB1c2UgY2FzZS4KKyAqLworI2RlZmluZSByY3VfYWNjZXNzX2luZGV4KHApIF9fcmN1X2FjY2Vzc19pbmRleCgocCksIF9fcmN1KQorCisvKioKICAqIHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjaygpIC0gcmN1X2RlcmVmZXJlbmNlIGZvciBpbmRpY2VzIHdpdGggZGVidWcgY2hlY2tpbmcKICAqIEBwOiBUaGUgcG9pbnRlciB0byByZWFkLCBwcmlvciB0byBkZXJlZmVyZW5jaW5nCiAgKiBAYzogVGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIGRlcmVmZXJlbmNlIHdpbGwgdGFrZSBwbGFjZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IDBhMzg0MmEuLmVjYTc1ZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTE1NTcsNyArMTU1Nyw3IEBACiAvKiBXaGVuIGluc2VydGluZyBhbiBpdGVtLiAqLwogI2RlZmluZSBNX0lOU0VSVAknaScKIC8qIFdoZW4gaW5zZXJ0aW5nIGludG8gKGRpcmVjdG9yaWVzIG9ubHkpIG9yIGFwcGVuZGluZyBvbnRvIGFuIGFscmVhZHkKLSAgIGV4aXN0YW50IGl0ZW0uICovCisgICBleGlzdGVudCBpdGVtLiAqLwogI2RlZmluZSBNX1BBU1RFCQkncCcKIC8qIFdoZW4gZGVsZXRpbmcgYW4gaXRlbS4gKi8KICNkZWZpbmUgTV9ERUxFVEUJJ2QnCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpby5oIGIvaW5jbHVkZS9saW51eC9yaW8uaAppbmRleCA0ZTM3YTdjZi4uNGQ1MDYxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpby5oCkBAIC0zOTYsNyArMzk2LDcgQEAKIH07CiAKIC8qIEFyY2hpdGVjdHVyZSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgZnVuY3Rpb25zICovCi1leHRlcm4gdm9pZCByaW9fcmVnaXN0ZXJfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqKTsKK2V4dGVybiBpbnQgcmlvX3JlZ2lzdGVyX21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKik7CiBleHRlcm4gaW50IHJpb19vcGVuX2luYl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKiwgdm9pZCAqLCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCByaW9fY2xvc2VfaW5iX21ib3goc3RydWN0IHJpb19tcG9ydCAqLCBpbnQpOwogZXh0ZXJuIGludCByaW9fb3Blbl9vdXRiX21ib3goc3RydWN0IHJpb19tcG9ydCAqLCB2b2lkICosIGludCwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmlvX2lkcy5oIGIvaW5jbHVkZS9saW51eC9yaW9faWRzLmgKaW5kZXggNzQxMGQzMy4uMGNlZTAxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW9faWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yaW9faWRzLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgUklPX0RJRF9JRFRDUFM2UQkJMHgwMzVmCiAjZGVmaW5lIFJJT19ESURfSURUQ1BTMTBRCQkweDAzNWUKICNkZWZpbmUgUklPX0RJRF9JRFRDUFMxODQ4CQkweDAzNzQKKyNkZWZpbmUgUklPX0RJRF9JRFRDUFMxNDMyCQkweDAzNzUKICNkZWZpbmUgUklPX0RJRF9JRFRDUFMxNjE2CQkweDAzNzkKICNkZWZpbmUgUklPX0RJRF9JRFRWUFMxNjE2CQkweDAzNzcKICNkZWZpbmUgUklPX0RJRF9JRFRTUFMxNjE2CQkweDAzNzgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCmluZGV4IDJjYTdlOGEuLjg3N2VjZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMuaApAQCAtMjI4LDYgKzIyOCw4IEBACiAJCQlzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSk7CiBleHRlcm4gaW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJCQlzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSk7CitleHRlcm4gaW50IHJ0Y19pbml0aWFsaXplX2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCisJCQkJc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pOwogZXh0ZXJuIHZvaWQgcnRjX3VwZGF0ZV9pcnEoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJCXVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA4M2JkMmUyLi43ODFhYmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC04NTQsNyArODU0LDcgQEAKIAogLyoKICAqIE9wdGltaXNlIFNEIGZsYWdzIGZvciBwb3dlciBzYXZpbmdzOgotICogU0RfQkFMQU5DRV9ORVdJRExFIGhlbHBzIGFncmVzc2l2ZSB0YXNrIGNvbnNvbGlkYXRpb24gYW5kIHBvd2VyIHNhdmluZ3MuCisgKiBTRF9CQUxBTkNFX05FV0lETEUgaGVscHMgYWdncmVzc2l2ZSB0YXNrIGNvbnNvbGlkYXRpb24gYW5kIHBvd2VyIHNhdmluZ3MuCiAgKiBLZWVwIGRlZmF1bHQgU0QgZmxhZ3MgaWYgc2NoZWRfe3NtdCxtY31fcG93ZXJfc2F2aW5nPTAKICAqLwogCkBAIC0xMjU0LDYgKzEyNTQsOSBAQAogI2VuZGlmCiAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKmFjdGl2ZV9tbTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUX0JSSworCXVuc2lnbmVkIGJya19yYW5kb21pemVkOjE7CisjZW5kaWYKICNpZiBkZWZpbmVkKFNQTElUX1JTU19DT1VOVElORykKIAlzdHJ1Y3QgdGFza19yc3Nfc3RhdAlyc3Nfc3RhdDsKICNlbmRpZgpAQCAtMTUzNCw2ICsxNTM3LDkgQEAKIAkJdW5zaWduZWQgbG9uZyBtZW1zd19ucl9wYWdlczsgLyogdW5jaGFyZ2VkIG1lbStzd2FwIHVzYWdlICovCiAJfSBtZW1jZ19iYXRjaDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKwlhdG9taWNfdCBwdHJhY2VfYnBfcmVmY250OworI2VuZGlmCiB9OwogCiAvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IGNhMDJmMTcuLjhjZTU5ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiAJaW50ICgqaW5vZGVfcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKmlub2RlX2ZvbGxvd19saW5rKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7Ci0JaW50ICgqaW5vZGVfcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKKwlpbnQgKCppbm9kZV9wZXJtaXNzaW9uKSAoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGZsYWdzKTsKIAlpbnQgKCppbm9kZV9zZXRhdHRyKQkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogCWludCAoKmlub2RlX2dldGF0dHIpIChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAlpbnQgKCppbm9kZV9zZXR4YXR0cikgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGQ5ZTUyZmEuLmQwYWU5MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtNDc0LDcgKzQ3NCw3IEBACiBleHRlcm4gdm9pZCBza2JfZHN0X3NldF9ub3JlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwogCiAvKioKLSAqIHNrYl9kc3RfaXNfbm9yZWYgLSBUZXN0IGlmIHNrYiBkc3QgaXNudCByZWZjb3VudGVkCisgKiBza2JfZHN0X2lzX25vcmVmIC0gVGVzdCBpZiBza2IgZHN0IGlzbid0IHJlZmNvdW50ZWQKICAqIEBza2I6IGJ1ZmZlcgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RzdF9pc19ub3JlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbWM5MXguaCBiL2luY2x1ZGUvbGludXgvc21jOTF4LmgKaW5kZXggYmMyMWRiNS4uNzYxOTliNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbWM5MXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYzkxeC5oCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFJQQ19MRURfMTAJKDB4MDIpCS8qIExFRCA9IDEwTWJwcyBsaW5rIGRldGVjdCAqLwogI2RlZmluZSBSUENfTEVEX0ZECSgweDAzKQkvKiBMRUQgPSBGdWxsIER1cGxleCBNb2RlICovCiAjZGVmaW5lIFJQQ19MRURfVFhfUlgJKDB4MDQpCS8qIExFRCA9IFRYIG9yIFJYIHBhY2tldCBvY2N1cnJlZCAqLwotI2RlZmluZSBSUENfTEVEXzEwMAkoMHgwNSkJLyogTEVEID0gMTAwTWJwcyBsaW5rIGRlY3RlY3QgKi8KKyNkZWZpbmUgUlBDX0xFRF8xMDAJKDB4MDUpCS8qIExFRCA9IDEwME1icHMgbGluayBkZXRlY3QgKi8KICNkZWZpbmUgUlBDX0xFRF9UWAkoMHgwNikJLyogTEVEID0gVFggcGFja2V0IG9jY3VycmVkICovCiAjZGVmaW5lIFJQQ19MRURfUlgJKDB4MDcpCS8qIExFRCA9IFJYIHBhY2tldCBvY2N1cnJlZCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCBlZGJiMWQwLi5kMmI1ZTk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTg4LDcgKzg4LDcgQEAKIH07CiAKIC8qCi0gKglBbmNpbGxpYXJ5IGRhdGEgb2JqZWN0IGluZm9ybWF0aW9uIE1BQ1JPUworICoJQW5jaWxsYXJ5IGRhdGEgb2JqZWN0IGluZm9ybWF0aW9uIE1BQ1JPUwogICoJVGFibGUgNS0xNCBvZiBQT1NJWCAxMDAzLjFnCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaCBiL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmgKaW5kZXggMTkwNGFmZS4uZmUyMDRmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvdW5kY2FyZC5oCkBAIC0xMjMxLDcgKzEyMzEsNyBAQAogI2RlZmluZSBTRVFfUEFOTklORyhkZXYsIHZvaWNlLCBwb3MpIFNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9QQU4sIChwb3MrMTI4KSAvIDIpCiAKIC8qCi0gKiBUaW1pbmcgYW5kIHN5bmNyb25pemF0aW9uIG1hY3JvcworICogVGltaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbWFjcm9zCiAgKi8KIAogI2RlZmluZSBfVElNRVJfRVZFTlQoZXYsIHBhcm0pCQl7X1NFUV9ORUVEQlVGKDgpO1wKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaWRldi5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpZGV2LmgKaW5kZXggYmYwNTcwYS4uNTJkOWVkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpZGV2LmgKQEAgLTY2LDcgKzY2LDcgQEAKICAqIGFyZSBpbiBhIGRpZmZlcmVudCBhZGRyZXNzIHNwYWNlIChhbmQgbWF5IGJlIG9mIGRpZmZlcmVudCBzaXplcyBpbiBzb21lCiAgKiBjYXNlcywgc3VjaCBhcyAzMi1iaXQgaTM4NiB1c2Vyc3BhY2Ugb3ZlciBhIDY0LWJpdCB4ODZfNjQga2VybmVsKS4KICAqIFplcm8taW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlLCBpbmNsdWRpbmcgY3VycmVudGx5IHVudXNlZCBmaWVsZHMsIHRvCi0gKiBhY2NvbW9kYXRlIHBvdGVudGlhbCBmdXR1cmUgdXBkYXRlcy4KKyAqIGFjY29tbW9kYXRlIHBvdGVudGlhbCBmdXR1cmUgdXBkYXRlcy4KICAqCiAgKiBTUElfSU9DX01FU1NBR0UgZ2l2ZXMgdXNlcnNwYWNlIHRoZSBlcXVpdmFsZW50IG9mIGtlcm5lbCBzcGlfc3luYygpLgogICogUGFzcyBpdCBhbiBhcnJheSBvZiByZWxhdGVkIHRyYW5zZmVycywgdGhleSdsbCBleGVjdXRlIHRvZ2V0aGVyLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCmluZGV4IDgwZTUzNTguLjBiMjJkNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKQEAgLTgxLDcgKzgxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCiAvKgotICogUHVsbCB0aGUgYXJjaF9zcGluKigpIGZ1bmN0aW9ucy9kZWNsYXJhdGlvbnMgKFVQLW5vbmRlYnVnIGRvZXNudCBuZWVkIHRoZW0pOgorICogUHVsbCB0aGUgYXJjaF9zcGluKigpIGZ1bmN0aW9ucy9kZWNsYXJhdGlvbnMgKFVQLW5vbmRlYnVnIGRvZXNuJ3QgbmVlZCB0aGVtKToKICAqLwogI2lmZGVmIENPTkZJR19TTVAKICMgaW5jbHVkZSA8YXNtL3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oIGIvaW5jbHVkZS9saW51eC9zdG1tYWMuaAppbmRleCBlMTAzNTI5Li5mMjkxOTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RtbWFjLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgX19TVE1NQUNfUExBVEZPUk1fREFUQQogI2RlZmluZSBfX1NUTU1BQ19QTEFURk9STV9EQVRBCiAKLS8qIHBsYXRmcm9tIGRhdGEgZm9yIHBsYXRmcm9tIGRldmljZSBzdHJ1Y3R1cmUncyBwbGF0ZnJvbV9kYXRhIGZpZWxkICovCisvKiBwbGF0Zm9ybSBkYXRhIGZvciBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlJ3MgcGxhdGZvcm1fZGF0YSBmaWVsZCAqLwogCiAvKiBQcml2YXRlIGRhdGEgZm9yIHRoZSBTVE0gb24tYm9hcmQgZXRoZXJuZXQgZHJpdmVyICovCiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaCBiL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmgKaW5kZXggMTgwODk2MC4uMDkyZGM5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oCkBAIC0xMDUsNyArMTA1LDcgQEAKICAqIEBjcHVzOiB0aGUgY3B1cyB0byBydW4gdGhlIEBmbigpIG9uIChOVUxMID0gYW55IG9ubGluZSBjcHUpCiAgKgogICogRGVzY3JpcHRpb246IFRoaXMgY2F1c2VzIGEgdGhyZWFkIHRvIGJlIHNjaGVkdWxlZCBvbiBldmVyeSBjcHUsCi0gKiBlYWNoIG9mIHdoaWNoIGRpc2FibGVzIGludGVycnVwdHMuICBUaGUgcmVzdWx0IGlzIHRoYXQgbm9vbmUgaXMKKyAqIGVhY2ggb2Ygd2hpY2ggZGlzYWJsZXMgaW50ZXJydXB0cy4gIFRoZSByZXN1bHQgaXMgdGhhdCBubyBvbmUgaXMKICAqIGhvbGRpbmcgYSBzcGlubG9jayBvciBpbnNpZGUgYW55IG90aGVyIHByZWVtcHQtZGlzYWJsZWQgcmVnaW9uIHdoZW4KICAqIEBmbigpIHJ1bnMuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NhY2hlLmgKaW5kZXggNzg5OGVhMS4uOGQyZWVmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jYWNoZS5oCkBAIC0zNSwxMCArMzUsMTAgQEAKICAqIEVhY2ggY2FjaGUgbXVzdCBiZSByZWdpc3RlcmVkIHNvIHRoYXQgaXQgY2FuIGJlIGNsZWFuZWQgcmVndWxhcmx5LgogICogV2hlbiB0aGUgY2FjaGUgaXMgdW5yZWdpc3RlcmVkLCBpdCBpcyBmbHVzaGVkIGNvbXBsZXRlbHkuCiAgKgotICogRW50cmllcyBoYXZlIGEgcmVmIGNvdW50IGFuZCBhICdoYXNoZWQnIGZsYWcgd2hpY2ggY291bnRzIHRoZSBleGlzdGFuY2UKKyAqIEVudHJpZXMgaGF2ZSBhIHJlZiBjb3VudCBhbmQgYSAnaGFzaGVkJyBmbGFnIHdoaWNoIGNvdW50cyB0aGUgZXhpc3RlbmNlCiAgKiBpbiB0aGUgaGFzaCB0YWJsZS4KICAqIFdlIG9ubHkgZXhwaXJlIGVudHJpZXMgd2hlbiByZWZjb3VudCBpcyB6ZXJvLgotICogRXhpc3RhbmNlIGluIHRoZSBjYWNoZSBpcyBjb3VudGVkICB0aGUgcmVmY291bnQuCisgKiBFeGlzdGVuY2UgaW4gdGhlIGNhY2hlIGlzIGNvdW50ZWQgIHRoZSByZWZjb3VudC4KICAqLwogCiAvKiBFdmVyeSBjYWNoZSBpdGVtIGhhcyBhIGNvbW1vbiBoZWFkZXIgdGhhdCBpcyB1c2VkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAppbmRleCBkODFkYjgwLi5mNzNjNDgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTEyNywxMyArMTI3LDE2IEBACiAjZGVmaW5lIFJQQ19UQVNLX0tJTExFRAkJMHgwMTAwCQkvKiB0YXNrIHdhcyBraWxsZWQgKi8KICNkZWZpbmUgUlBDX1RBU0tfU09GVAkJMHgwMjAwCQkvKiBVc2Ugc29mdCB0aW1lb3V0cyAqLwogI2RlZmluZSBSUENfVEFTS19TT0ZUQ09OTgkweDA0MDAJCS8qIEZhaWwgaWYgY2FuJ3QgY29ubmVjdCAqLworI2RlZmluZSBSUENfVEFTS19TRU5UCQkweDA4MDAJCS8qIG1lc3NhZ2Ugd2FzIHNlbnQgKi8KKyNkZWZpbmUgUlBDX1RBU0tfVElNRU9VVAkweDEwMDAJCS8qIGZhaWwgd2l0aCBFVElNRURPVVQgb24gdGltZW91dCAqLwogCiAjZGVmaW5lIFJQQ19JU19BU1lOQyh0KQkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19BU1lOQykKICNkZWZpbmUgUlBDX0lTX1NXQVBQRVIodCkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TV0FQUEVSKQogI2RlZmluZSBSUENfRE9fUk9PVE9WRVJSSURFKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfUk9PVENSRURTKQogI2RlZmluZSBSUENfQVNTQVNTSU5BVEVEKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfS0lMTEVEKQotI2RlZmluZSBSUENfSVNfU09GVCh0KQkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TT0ZUKQorI2RlZmluZSBSUENfSVNfU09GVCh0KQkJKCh0KS0+dGtfZmxhZ3MgJiAoUlBDX1RBU0tfU09GVHxSUENfVEFTS19USU1FT1VUKSkKICNkZWZpbmUgUlBDX0lTX1NPRlRDT05OKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU09GVENPTk4pCisjZGVmaW5lIFJQQ19XQVNfU0VOVCh0KQkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TRU5UKQogCiAjZGVmaW5lIFJQQ19UQVNLX1JVTk5JTkcJMAogI2RlZmluZSBSUENfVEFTS19RVUVVRUQJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoX2dzcy5oCmluZGV4IGNhN2Q3MjUuLjgzYmJlZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjYXV0aF9nc3MuaApAQCAtMiw3ICsyLDcgQEAKICAqIGxpbnV4L2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmgKICAqCiAgKiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAdW1pY2guZWR1PgotICogQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbnZpZXJzaXR5IG9mIE1pY2hpZ2FuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4KICAqLwogCiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfU1ZDQVVUSF9HU1NfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAppbmRleCA1YTg5ZTM2Li4wODNmZmVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaApAQCAtMjQ5LDYgKzI0OSw4IEBACiBleHRlcm4gaW50IGhpYmVybmF0ZSh2b2lkKTsKIGV4dGVybiBib29sIHN5c3RlbV9lbnRlcmluZ19oaWJlcm5hdGlvbih2b2lkKTsKICNlbHNlIC8qIENPTkZJR19ISUJFUk5BVElPTiAqLworc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX25vc2F2ZV9yZWdpb24odW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbl9sYXRlKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBlKSB7fQogc3RhdGljIGlubGluZSBpbnQgc3dzdXNwX3BhZ2VfaXNfZm9yYmlkZGVuKHN0cnVjdCBwYWdlICpwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3NldF9wYWdlX2ZyZWUoc3RydWN0IHBhZ2UgKnApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3Vuc2V0X3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqcCkge30KQEAgLTI5NywxNCArMjk5LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBtdXRleCBwbV9tdXRleDsKIAotI2lmbmRlZiBDT05GSUdfSElCRVJOQVRJT04KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBlKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX25vc2F2ZV9yZWdpb25fbGF0ZSh1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkKLXsKLX0KLQorI2lmbmRlZiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUwogc3RhdGljIGlubGluZSB2b2lkIGxvY2tfc3lzdGVtX3NsZWVwKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3N5c3RlbV9zbGVlcCh2b2lkKSB7fQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9zeXNkZXYuaAppbmRleCA4YTc1ZGE1Li5kZmIwNzhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKQEAgLTcsMTMgKzcsMTMgQEAKICAqIFdlIHN0aWxsIGhhdmUgYSBub3Rpb24gb2YgYSBkcml2ZXIgZm9yIGEgc3lzdGVtIGRldmljZSwgYmVjYXVzZSB3ZSBzdGlsbAogICogd2FudCB0byBwZXJmb3JtIGJhc2ljIG9wZXJhdGlvbnMgb24gdGhlc2UgZGV2aWNlcy4gCiAgKgotICogV2UgYWxzbyBzdXBwb3J0IGF1eGlsbGFyeSBkcml2ZXJzIGJpbmRpbmcgdG8gZGV2aWNlcyBvZiBhIGNlcnRhaW4gY2xhc3MuCisgKiBXZSBhbHNvIHN1cHBvcnQgYXV4aWxpYXJ5IGRyaXZlcnMgYmluZGluZyB0byBkZXZpY2VzIG9mIGEgY2VydGFpbiBjbGFzcy4KICAqIAogICogVGhpcyBhbGxvd3MgY29uZmlndXJhYmxlIGRyaXZlcnMgdG8gcmVnaXN0ZXIgdGhlbXNlbHZlcyBmb3IgZGV2aWNlcyBvZgogICogYSBjZXJ0YWluIHR5cGUuIEFuZCwgaXQgYWxsb3dzIGNsYXNzIGRlZmluaXRpb25zIHRvIHJlc2lkZSBpbiBnZW5lcmljCiAgKiBjb2RlIHdoaWxlIGFyY2gtc3BlY2lmaWMgY29kZSBjYW4gcmVnaXN0ZXIgc3BlY2lmaWMgZHJpdmVycy4KICAqCi0gKiBBdXhpbGxhcnkgZHJpdmVycyByZWdpc3RlcmVkIHdpdGggYSBOVUxMIGNscyBhcmUgcmVnaXN0ZXJlZCBhcyBkcml2ZXJzCisgKiBBdXhpbGlhcnkgZHJpdmVycyByZWdpc3RlcmVkIHdpdGggYSBOVUxMIGNscyBhcmUgcmVnaXN0ZXJlZCBhcyBkcml2ZXJzCiAgKiBmb3IgYWxsIHN5c3RlbSBkZXZpY2VzLCBhbmQgZ2V0IG5vdGlmaWNhdGlvbiBjYWxscyBmb3IgZWFjaCBkZXZpY2UuIAogICovCiAKQEAgLTcwLDcgKzcwLDcgQEAKIGV4dGVybiB2b2lkIHN5c2Rldl9jbGFzc19yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICosCiAJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKik7CiAvKioKLSAqIEF1eGlsbGFyeSBzeXN0ZW0gZGV2aWNlIGRyaXZlcnMuCisgKiBBdXhpbGlhcnkgc3lzdGVtIGRldmljZSBkcml2ZXJzLgogICovCiAKIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXJxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC90aW1lcnF1ZXVlLmgKaW5kZXggZDI0YWFiYS4uYTUyMGZkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lcnF1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcnF1ZXVlLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAkJCQkJCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5vZGUpOwogCiAvKioKLSAqIHRpbWVycXVldWVfZ2V0bmV4dCAtIFJldHVybnMgdGhlIHRpbWVyIHdpdGggdGhlIGVhcmxpZXMgZXhwaXJhdGlvbiB0aW1lCisgKiB0aW1lcnF1ZXVlX2dldG5leHQgLSBSZXR1cm5zIHRoZSB0aW1lciB3aXRoIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUKICAqCiAgKiBAaGVhZDogaGVhZCBvZiB0aW1lcnF1ZXVlCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKaW5kZXggM2EyZTY2ZC4uZWJjZmE0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCkBAIC0xNjksNyArMTY5LDcgQEAKICAqIHRyYWNlaG9va190cmFjZXJfdGFzayAtIHJldHVybiB0aGUgdGFzayB0aGF0IGlzIHRyYWNpbmcgdGhlIGdpdmVuIHRhc2sKICAqIEB0c2s6CQl0YXNrIHRvIGNvbnNpZGVyCiAgKgotICogUmV0dXJucyBOVUxMIGlmIG5vb25lIGlzIHRyYWNpbmcgQHRhc2ssIG9yIHRoZSAmc3RydWN0IHRhc2tfc3RydWN0CisgKiBSZXR1cm5zIE5VTEwgaWYgbm8gb25lIGlzIHRyYWNpbmcgQHRhc2ssIG9yIHRoZSAmc3RydWN0IHRhc2tfc3RydWN0CiAgKiBwb2ludGVyIHRvIGl0cyB0cmFjZXIuCiAgKgogICogTXVzdCBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLiAgVGhlIHBvaW50ZXIgcmV0dXJuZWQgbWlnaHQgYmUga2VwdApAQCAtNDQ4LDcgKzQ0OCw3IEBACiAgKgogICogUmV0dXJuIHplcm8gdG8gY2hlY2sgZm9yIGEgcmVhbCBwZW5kaW5nIHNpZ25hbCBub3JtYWxseS4KICAqIFJldHVybiAtMSBhZnRlciByZWxlYXNpbmcgdGhlIHNpZ2xvY2sgdG8gcmVwZWF0IHRoZSBjaGVjay4KLSAqIFJldHVybiBhIHNpZ25hbCBudW1iZXIgdG8gaW5kdWNlIGFuIGFydGlmaWNhbCBzaWduYWwgZGVsaXZlcnksCisgKiBSZXR1cm4gYSBzaWduYWwgbnVtYmVyIHRvIGluZHVjZSBhbiBhcnRpZmljaWFsIHNpZ25hbCBkZWxpdmVyeSwKICAqIHNldHRpbmcgKkBpbmZvIGFuZCAqQHJldHVybl9rYSB0byBzcGVjaWZ5IGl0cyBkZXRhaWxzIGFuZCBiZWhhdmlvci4KICAqCiAgKiBUaGUgQHJldHVybl9rYS0+c2FfaGFuZGxlciB2YWx1ZSBjb250cm9scyB0aGUgZGlzcG9zaXRpb24gb2YgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VjYjE0MDAuaCBiL2luY2x1ZGUvbGludXgvdWNiMTQwMC5oCmluZGV4IDFiNDc5MDkuLjVjNzUxNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWNiMTQwMC5oCisrKyBiL2luY2x1ZGUvbGludXgvdWNiMTQwMC5oCkBAIC04LDcgKzgsNyBAQAogICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFNwbGl0aW5nIGRvbmUgYnk6IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+Ci0gKiBJZiBzb21ldGhpbmcgZG9lc250IHdvcmsgYW5kIGl0IHdvcmtlZCBiZWZvcmUgc3BsaXRpbmcsIGUtbWFpbCBtZSwKKyAqIElmIHNvbWV0aGluZyBkb2Vzbid0IHdvcmsgYW5kIGl0IHdvcmtlZCBiZWZvcmUgc3BsaXRpbmcsIGUtbWFpbCBtZSwKICAqIGRvbnQgYm90aGVyIE5pY29sYXMgcGxlYXNlIDstKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCBlNjNlZmViLi42NWY3OGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTYyMyw3ICs2MjMsNyBAQAogICogVVNCIGh1YnMuICBUaGF0IG1ha2VzIGl0IHN0YXkgdGhlIHNhbWUgdW50aWwgc3lzdGVtcyBhcmUgcGh5c2ljYWxseQogICogcmVjb25maWd1cmVkLCBieSByZS1jYWJsaW5nIGEgdHJlZSBvZiBVU0IgZGV2aWNlcyBvciBieSBtb3ZpbmcgVVNCIGhvc3QKICAqIGNvbnRyb2xsZXJzLiAgQWRkaW5nIGFuZCByZW1vdmluZyBkZXZpY2VzLCBpbmNsdWRpbmcgdmlydHVhbCByb290IGh1YnMKLSAqIGluIGhvc3QgY29udHJvbGxlciBkcml2ZXIgbW9kdWxlcywgZG9lcyBub3QgY2hhbmdlIHRoZXNlIHBhdGggaWRlbnRpZmVyczsKKyAqIGluIGhvc3QgY29udHJvbGxlciBkcml2ZXIgbW9kdWxlcywgZG9lcyBub3QgY2hhbmdlIHRoZXNlIHBhdGggaWRlbnRpZmllcnM7CiAgKiBuZWl0aGVyIGRvZXMgcmVib290aW5nIG9yIHJlLWVudW1lcmF0aW5nLiAgVGhlc2UgYXJlIG1vcmUgdXNlZnVsIGlkZW50aWZpZXJzCiAgKiB0aGFuIGNoYW5nZWFibGUgKCJ1bnN0YWJsZSIpIG9uZXMgbGlrZSBidXMgbnVtYmVycyBvciBkZXZpY2UgYWRkcmVzc2VzLgogICoKQEAgLTc5Myw3ICs3OTMsNyBAQAogICoJdXNiX3NldF9pbnRmZGF0YSgpIHRvIGFzc29jaWF0ZSBkcml2ZXItc3BlY2lmaWMgZGF0YSB3aXRoIHRoZQogICoJaW50ZXJmYWNlLiAgSXQgbWF5IGFsc28gdXNlIHVzYl9zZXRfaW50ZXJmYWNlKCkgdG8gc3BlY2lmeSB0aGUKICAqCWFwcHJvcHJpYXRlIGFsdHNldHRpbmcuICBJZiB1bndpbGxpbmcgdG8gbWFuYWdlIHRoZSBpbnRlcmZhY2UsCi0gKglyZXR1cm4gLUVOT0RFViwgaWYgZ2VudWluZSBJTyBlcnJvcnMgb2NjdXJlZCwgYW4gYXBwcm9wcmlhdGUKKyAqCXJldHVybiAtRU5PREVWLCBpZiBnZW51aW5lIElPIGVycm9ycyBvY2N1cnJlZCwgYW4gYXBwcm9wcmlhdGUKICAqCW5lZ2F0aXZlIGVycm5vIHZhbHVlLgogICogQGRpc2Nvbm5lY3Q6IENhbGxlZCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUsIHVzdWFsbHkKICAqCWJlY2F1c2UgaXRzIGRldmljZSBoYXMgYmVlbiAob3IgaXMgYmVpbmcpIGRpc2Nvbm5lY3RlZCBvciB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKaW5kZXggM2QyOWE3ZC4uODgyYTA4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKQEAgLTE4OCw3ICsxODgsNyBAQAogICogQGJpbmQoKSBtZXRob2QgaXMgdGhlbiB1c2VkIHRvIGluaXRpYWxpemUgYWxsIHRoZSBmdW5jdGlvbnMgYW5kIHRoZW4KICAqIGNhbGwgQHVzYl9hZGRfZnVuY3Rpb24oKSBmb3IgdGhlbS4KICAqCi0gKiBUaG9zZSBmdW5jdGlvbnMgd291bGQgbm9ybWFsbHkgYmUgaW5kZXBlbmRhbnQgb2YgZWFjaCBvdGhlciwgYnV0IHRoYXQncworICogVGhvc2UgZnVuY3Rpb25zIHdvdWxkIG5vcm1hbGx5IGJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIsIGJ1dCB0aGF0J3MKICAqIG5vdCBtYW5kYXRvcnkuICBDREMgV01DIGRldmljZXMgYXJlIGFuIGV4YW1wbGUgd2hlcmUgZnVuY3Rpb25zIG9mdGVuCiAgKiBkZXBlbmQgb24gb3RoZXIgZnVuY3Rpb25zLCB3aXRoIHNvbWUgZnVuY3Rpb25zIHN1YnNpZGlhcnkgdG8gb3RoZXJzLgogICogU3VjaCBpbnRlcmRlcGVuZGVuY3kgbWF5IGJlIG1hbmFnZWQgaW4gYW55IHdheSwgc28gbG9uZyBhcyBhbGwgb2YgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oIGIvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaAppbmRleCA2NTYzODAyLi5lNDlkZmQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfZGVmLmgKQEAgLTE1OSw3ICsxNTksNyBAQAogI2RlZmluZSBVU0JNT0RFX0NNX0lETEUJKDA8PDApCQkvKiBpZGxlIHN0YXRlICovCiAKIC8qIE1vb3Jlc3Rvd24gaGFzIHNvbWUgbm9uLXN0YW5kYXJkIHJlZ2lzdGVycywgcGFydGlhbGx5IGR1ZSB0byB0aGUgZmFjdCB0aGF0Ci0gKiBpdHMgRUhDSSBjb250cm9sbGVyIGhhcyBib3RoIFRUIGFuZCBMUE0gc3VwcG9ydC4gSE9TVFBDeCBhcmUgZXh0ZW50aW9ucyB0bworICogaXRzIEVIQ0kgY29udHJvbGxlciBoYXMgYm90aCBUVCBhbmQgTFBNIHN1cHBvcnQuIEhPU1RQQ3ggYXJlIGV4dGVuc2lvbnMgdG8KICAqIFBPUlRTQ3gKICAqLwogI2RlZmluZSBIT1NUUEMwCQkweDg0CQkvKiBIT1NUUEMgZXh0ZW5zaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9mdW5jdGlvbmZzLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9mdW5jdGlvbmZzLmgKaW5kZXggNmY2NDljMS4uNzU4N2VmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZnVuY3Rpb25mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2Z1bmN0aW9uZnMuaApAQCAtNDUsNyArNDUsNyBAQAogICogfCBvZmYgfCBuYW1lICAgICAgfCB0eXBlICAgICAgICAgfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICogfC0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICogfCAgIDAgfCBtYWdpYyAgICAgfCBMRTMyICAgICAgICAgfCBGVU5DVElPTkZTX3tGUyxIU31fREVTQ1JJUFRPUlNfTUFHSUMgfAotICogfCAgIDQgfCBsZW5naHQgICAgfCBMRTMyICAgICAgICAgfCBsZW5ndGggb2YgdGhlIHdob2xlIGRhdGEgY2h1bmsgICAgICAgfAorICogfCAgIDQgfCBsZW5ndGggICAgfCBMRTMyICAgICAgICAgfCBsZW5ndGggb2YgdGhlIHdob2xlIGRhdGEgY2h1bmsgICAgICAgfAogICogfCAgIDggfCBmc19jb3VudCAgfCBMRTMyICAgICAgICAgfCBudW1iZXIgb2YgZnVsbC1zcGVlZCBkZXNjcmlwdG9ycyAgICAgfAogICogfCAgMTIgfCBoc19jb3VudCAgfCBMRTMyICAgICAgICAgfCBudW1iZXIgb2YgaGlnaC1zcGVlZCBkZXNjcmlwdG9ycyAgICAgfAogICogfCAgMTYgfCBmc19kZXNjcnMgfCBEZXNjcmlwdG9yW10gfCBsaXN0IG9mIGZ1bGwtc3BlZWQgZGVzY3JpcHRvcnMgICAgICAgfApAQCAtODYsNyArODYsNyBAQAogICogfCAgIDAgfCBsYW5nICAgIHwgTEUxNiAgICAgICAgICAgICAgfCBsYW5ndWFnZSBjb2RlICAgICAgICAgICAgICAgICAgICAgIHwKICAqIHwgICAyIHwgc3RyaW5ncyB8IFN0cmluZ1tzdHJfY291bnRdIHwgYXJyYXkgb2Ygc3RyaW5ncyBpbiBnaXZlbiBsYW5ndWFnZSB8CiAgKgotICogRm9yIGVhY2ggc3RyaW5nIHRoZXIgaXMgb25lIHN0cmluZ3MgZW50cnkgKGllLiB0aGVyZSBhcmUgc3RyX2NvdW50CisgKiBGb3IgZWFjaCBzdHJpbmcgdGhlcmUgaXMgb25lIHN0cmluZ3MgZW50cnkgKGllLiB0aGVyZSBhcmUgc3RyX2NvdW50CiAgKiBzdHJpbmcgZW50cmllcykuICBFYWNoIFN0cmluZyBpcyBhIE5VTCB0ZXJtaW5hdGVkIHN0cmluZyBlbmNvZGVkIGluCiAgKiBVVEYtOC4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaAppbmRleCAwMDY0MTJjLi5lNTM4MTcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaApAQCAtNzIsNyArNzIsNyBAQAogICogQnVsayBlbmRwb2ludHMgY2FuIHVzZSBhbnkgc2l6ZSBidWZmZXJzLCBhbmQgY2FuIGFsc28gYmUgdXNlZCBmb3IgaW50ZXJydXB0CiAgKiB0cmFuc2ZlcnMuIGludGVycnVwdC1vbmx5IGVuZHBvaW50cyBjYW4gYmUgbXVjaCBsZXNzIGZ1bmN0aW9uYWwuCiAgKgotICogTk9URTogIHRoaXMgaXMgYW5hbGFnb3VzIHRvICdzdHJ1Y3QgdXJiJyBvbiB0aGUgaG9zdCBzaWRlLCBleGNlcHQgdGhhdAorICogTk9URTogIHRoaXMgaXMgYW5hbG9nb3VzIHRvICdzdHJ1Y3QgdXJiJyBvbiB0aGUgaG9zdCBzaWRlLCBleGNlcHQgdGhhdAogICogaXQncyB0aGlubmVyIGFuZCBwcm9tb3RlcyBtb3JlIHByZS1hbGxvY2F0aW9uLgogICovCiAKQEAgLTI2OSw3ICsyNjksNyBAQAogICoKICAqIENvbnRyb2wgZW5kcG9pbnRzIC4uLiBhZnRlciBnZXR0aW5nIGEgc2V0dXAoKSBjYWxsYmFjaywgdGhlIGRyaXZlciBxdWV1ZXMKICAqIG9uZSByZXNwb25zZSAoZXZlbiBpZiBpdCB3b3VsZCBiZSB6ZXJvIGxlbmd0aCkuICBUaGF0IGVuYWJsZXMgdGhlCi0gKiBzdGF0dXMgYWNrLCBhZnRlciB0cmFuc2ZlcmluZyBkYXRhIGFzIHNwZWNpZmllZCBpbiB0aGUgcmVzcG9uc2UuICBTZXR1cAorICogc3RhdHVzIGFjaywgYWZ0ZXIgdHJhbnNmZXJyaW5nIGRhdGEgYXMgc3BlY2lmaWVkIGluIHRoZSByZXNwb25zZS4gIFNldHVwCiAgKiBmdW5jdGlvbnMgbWF5IHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlcyB0byBnZW5lcmF0ZSBwcm90b2NvbCBzdGFsbHMuCiAgKiAoTm90ZSB0aGF0IHNvbWUgVVNCIGRldmljZSBjb250cm9sbGVycyBkaXNhbGxvdyBwcm90b2NvbCBzdGFsbCByZXNwb25zZXMKICAqIGluIHNvbWUgY2FzZXMuKSAgV2hlbiBjb250cm9sIHJlc3BvbnNlcyBhcmUgZGVmZXJyZWQgKHRoZSByZXNwb25zZSBpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWlkaS5oIGIvaW5jbHVkZS9saW51eC91c2IvbWlkaS5oCmluZGV4IDFkMTA0MDguLmM4YzUyZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21pZGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9taWRpLmgKQEAgLTcwLDcgKzcwLDcgQEAKIAlfX3U4ICBiSmFja0lEOwogCV9fdTggIGJOcklucHV0UGluczsJCS8qIHAgKi8KIAlzdHJ1Y3QgdXNiX21pZGlfc291cmNlX3BpbiBwaW5zW107IC8qIFtwXSAqLwotCS8qX191OCAgaUphY2s7ICAtLSBvbW1pdHRlZCBkdWUgdG8gdmFyaWFibGUtc2l6ZWQgcGluc1tdICovCisJLypfX3U4ICBpSmFjazsgIC0tIG9taXR0ZWQgZHVlIHRvIHZhcmlhYmxlLXNpemVkIHBpbnNbXSAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgVVNCX0RUX01JRElfT1VUX1NJWkUocCkJKDcgKyAyICogKHApKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAppbmRleCAyMDFmMjIyLi42MDViMGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaApAQCAtNjgsNiArNjgsNyBAQAogIwkJZGVmaW5lIEVWRU5UX1JYX1BBVVNFRAk1CiAjCQlkZWZpbmUgRVZFTlRfREVWX1dBS0lORyA2CiAjCQlkZWZpbmUgRVZFTlRfREVWX0FTTEVFUCA3CisjCQlkZWZpbmUgRVZFTlRfREVWX09QRU4JOAogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyX29mKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpAQCAtOTcsMTIgKzk4LDE0IEBACiAKICNkZWZpbmUgRkxBR19MSU5LX0lOVFIJMHgwODAwCQkvKiB1cGRhdGVzIGxpbmsgKGNhcnJpZXIpIHN0YXR1cyAqLwogCisjZGVmaW5lIEZMQUdfUE9JTlRUT1BPSU5UIDB4MTAwMAkvKiBwb3NzaWJseSB1c2UgInVzYiVkIiBuYW1lcyAqLworCiAvKgogICogSW5kaWNhdGVzIHRvIHVzYm5ldCwgdGhhdCBVU0IgZHJpdmVyIGFjY3VtdWxhdGVzIG11bHRpcGxlIElQIHBhY2tldHMuCiAgKiBBZmZlY3RzIHN0YXRpc3RpYyAoY291bnRlcnMpIGFuZCBzaG9ydCBwYWNrZXQgaGFuZGxpbmcuCiAgKi8KLSNkZWZpbmUgRkxBR19NVUxUSV9QQUNLRVQJMHgxMDAwCi0jZGVmaW5lIEZMQUdfUlhfQVNTRU1CTEUJMHgyMDAwCS8qIHJ4IHBhY2tldHMgbWF5IHNwYW4gPjEgZnJhbWVzICovCisjZGVmaW5lIEZMQUdfTVVMVElfUEFDS0VUCTB4MjAwMAorI2RlZmluZSBGTEFHX1JYX0FTU0VNQkxFCTB4NDAwMAkvKiByeCBwYWNrZXRzIG1heSBzcGFuID4xIGZyYW1lcyAqLwogCiAJLyogaW5pdCBkZXZpY2UgLi4uIGNhbiBzbGVlcCwgb3IgY2F1c2UgcHJvYmUoKSBmYWlsdXJlICovCiAJaW50CSgqYmluZCkoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3d1c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL3d1c2IuaAppbmRleCA2M2ViZGNjLi4wYzRkNGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi93dXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivd3VzYi5oCkBAIC0xMjYsNyArMTI2LDcgQEAKIC8qKgogICogV1VTQiBJRTogQ2hhbm5lbCBTdG9wIChXVVNCMS4wWzcuNS44XSkKICAqCi0gKiBUZWxscyBkZXZpY2VzIHRoZSBob3N0IGlzIGdvaW5nIHRvIHN0b3Agc2VuZGluZyBNTUNzIGFuZCB3aWxsIGRpc3NhcGVhci4KKyAqIFRlbGxzIGRldmljZXMgdGhlIGhvc3QgaXMgZ29pbmcgdG8gc3RvcCBzZW5kaW5nIE1NQ3MgYW5kIHdpbGwgZGlzYXBwZWFyLgogICovCiBzdHJ1Y3Qgd3VpZV9jaGFubmVsX3N0b3AgewogCXN0cnVjdCB3dWllX2hkciBoZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3V3Yi5oIGIvaW5jbHVkZS9saW51eC91d2IuaAppbmRleCA3ZmM5NzQ2Li5iMGM1NjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3V3Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXdiLmgKQEAgLTI3NCw3ICsyNzQsNyBAQAogCiAvKioKICAqIHN0cnVjdCB1d2JfZHJwX2F2YWlsIC0gYSByYWRpbyBjb250cm9sbGVyJ3MgdmlldyBvZiBNQVMgdXNhZ2UKLSAqIEBnbG9iYWw6ICAgTUFTIHVudXNlZCBieSBuZWlnaGJvcnMgKGV4Y2x1ZGluZyByZXNlcnZhdGlvbnMgdGFyZ2V0dGVkCisgKiBAZ2xvYmFsOiAgIE1BUyB1bnVzZWQgYnkgbmVpZ2hib3JzIChleGNsdWRpbmcgcmVzZXJ2YXRpb25zIHRhcmdldGVkCiAgKiAgICAgICAgICAgIG9yIG93bmVkIGJ5IHRoZSBsb2NhbCByYWRpbyBjb250cm9sbGVyKSBvciB0aGUgYmVhb24gcGVyaW9kCiAgKiBAbG9jYWw6ICAgIE1BUyB1bnVzZWQgYnkgbG9jYWwgZXN0YWJsaXNoZWQgcmVzZXJ2YXRpb25zCiAgKiBAcGVuZGluZzogIE1BUyB1bnVzZWQgYnkgbG9jYWwgcGVuZGluZyByZXNlcnZhdGlvbnMKQEAgLTcwMiwxMCArNzAyLDEwIEBACiAJZWRjLT50aW1lc3RhcnQgPSBqaWZmaWVzOwogfQogCi0vKiBDYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cmVkLgorLyogQ2FsbGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuCiAgKiBUaGlzIGlzIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIG51bWJlciBvZiBhY2NlcHRhYmxlIGVycm9ycyBwZXIgdGltZQogICogcGVyaW9kIGhhcyBiZWVuIGV4Y2VlZGVkLiBJdCBpcyBub3QgYWNjdXJhdGUgYXMgdGhlcmUgYXJlIGNhc2VzIGluIHdoaWNoCi0gKiB0aGlzIHNjaGVtZSB3aWxsIG5vdCB3b3JrLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUgcGVyaW9kaWMgb2NjdXJlbmNlcworICogdGhpcyBzY2hlbWUgd2lsbCBub3Qgd29yaywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIHBlcmlvZGljIG9jY3VycmVuY2VzCiAgKiBvZiBlcnJvcnMgdGhhdCBzdHJhZGRsZSB1cGRhdGVzIHRvIHRoZSBzdGFydCB0aW1lLiBUaGlzIHNjaGVtZSBpcwogICogc3VmZmljaWVudCBmb3Igb3VyIHVzYWdlLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXdiL3VtYy5oIGIvaW5jbHVkZS9saW51eC91d2IvdW1jLmgKaW5kZXggNGI0ZmMwZi4uN2I0ODQyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91d2IvdW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC91d2IvdW1jLmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogICoKICAqIEZJWE1FOiBUaGlzIGlzIGFzIGRpcnR5IGFzIGl0IGdldHMsIGJ1dCB3ZSBuZWVkIHNvbWUgd2F5IHRvIGNoZWNrCiAgKiB0aGUgY29ycmVjdCB0eXBlIG9mIHVtY19kZXYtPnBhcmVudCAoc28gdGhhdCBmb3IgZXhhbXBsZSwgd2UgY2FuCi0gKiBjYXN0IHRvIHBjaV9kZXYpLiBDYXN0aW5nIHRvIHBjaV9kZXYgaXMgbmVjZXNhcnkgYmVjYXVzZSBhdCBzb21lCisgKiBjYXN0IHRvIHBjaV9kZXYpLiBDYXN0aW5nIHRvIHBjaV9kZXYgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYXQgc29tZQogICogcG9pbnQgd2UgbmVlZCB0byByZXF1ZXN0IHJlc291cmNlcyBmcm9tIHRoZSBkZXZpY2UuIE1hcHBpbmcgaXMKICAqIGVhc2lseSBvdmVyIGNvbWUgKGlvcmVtYXAgYW5kIHN0dWZmIGFyZSBidXMgYWdub3N0aWMpLCBidXQgaG9va2luZwogICogdXAgdG8gc29tZSBlcnJvciBoYW5kbGVycyAoc3VjaCBhcyBwY2kgZXJyb3IgaGFuZGxlcnMpIG1pZ2h0IG5lZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmdhYXJiLmggYi9pbmNsdWRlL2xpbnV4L3ZnYWFyYi5oCmluZGV4IGU5ZTE1MjQuLjljMzEyMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmdhYXJiLmgKKysrIGIvaW5jbHVkZS9saW51eC92Z2FhcmIuaApAQCAtNzgsNyArNzgsNyBAQAogICogICAgIHdldGhlciB0aGUgY2FyZCBpcyBkb2luZyBsZWdhY3kgZGVjb2RpbmcgZm9yIHRoYXQgdHlwZSBvZiByZXNvdXJjZS4gSWYKICAqICAgICB5ZXMsIHRoZSBsb2NrIGlzICJjb252ZXJ0ZWQiIGludG8gYSBsZWdhY3kgcmVzb3VyY2UgbG9jay4KICAqICAgICBUaGUgYXJiaXRlciB3aWxsIGZpcnN0IGxvb2sgZm9yIGFsbCBWR0EgY2FyZHMgdGhhdCBtaWdodCBjb25mbGljdAotICogICAgIGFuZCBkaXNhYmxlIHRoZWlyIElPcyBhbmQvb3IgTWVtb3J5IGFjY2VzcywgaW5sY3VkaW5nIFZHQSBmb3J3YXJkaW5nCisgKiAgICAgYW5kIGRpc2FibGUgdGhlaXIgSU9zIGFuZC9vciBNZW1vcnkgYWNjZXNzLCBpbmNsdWRpbmcgVkdBIGZvcndhcmRpbmcKICAqICAgICBvbiBQMlAgYnJpZGdlcyBpZiBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIHJlcXVlc3RlZCByZXNvdXJjZXMgY2FuCiAgKiAgICAgYmUgdXNlZC4gVGhlbiwgdGhlIGNhcmQgaXMgbWFya2VkIGFzIGxvY2tpbmcgdGhlc2UgcmVzb3VyY2VzIGFuZAogICogICAgIHRoZSBJTyBhbmQvb3IgTWVtb3J5IGFjY2Vzc2UgYXJlIGVuYWJsZWQgb24gdGhlIGNhcmQgKGluY2x1ZGluZwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgKiAgICAgdmdhX2NvbmZsaWN0cwogICoKICAqICAgICBBcmNoaXRlY3R1cmVzIHNob3VsZCBkZWZpbmUgdGhpcyBpZiB0aGV5IGhhdmUgc2V2ZXJhbAotICogICAgIGluZGVwZW5kYW50IFBDSSBkb21haW5zIHRoYXQgY2FuIGFmZm9yZCBjb25jdXJyZW50IFZHQQorICogICAgIGluZGVwZW5kZW50IFBDSSBkb21haW5zIHRoYXQgY2FuIGFmZm9yZCBjb25jdXJyZW50IFZHQQogICogICAgIGRlY29kaW5nCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKaW5kZXggNDYxYzAxMS4uMmIzODMxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC01OCw2ICs1OCwxMyBAQAogCQlVTkVWSUNUQUJMRV9QR0NMRUFSRUQsCS8qIG9uIENPVywgcGFnZSB0cnVuY2F0ZSAqLwogCQlVTkVWSUNUQUJMRV9QR1NUUkFOREVELAkvKiB1bmFibGUgdG8gaXNvbGF0ZSBvbiB1bmxvY2sgKi8KIAkJVU5FVklDVEFCTEVfTUxPQ0tGUkVFRCwKKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKKwkJVEhQX0ZBVUxUX0FMTE9DLAorCQlUSFBfRkFVTFRfRkFMTEJBQ0ssCisJCVRIUF9DT0xMQVBTRV9BTExPQywKKwkJVEhQX0NPTExBUFNFX0FMTE9DX0ZBSUxFRCwKKwkJVEhQX1NQTElULAorI2VuZGlmCiAJCU5SX1ZNX0VWRU5UX0lURU1TCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpbWF4LmggYi9pbmNsdWRlL2xpbnV4L3dpbWF4LmgKaW5kZXggNGZkY2M1Ni4uOWY2Yjc3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aW1heC5oCisrKyBiL2luY2x1ZGUvbGludXgvd2ltYXguaApAQCAtMTE0LDcgKzExNCw3IEBACiAJV0lNQVhfR05MX1JFU0VUX0lGSURYID0gMSwKIH07CiAKLS8qIEF0cmlidXRlcyBmb3Igd2ltYXhfc3RhdGVfZ2V0KCkgKi8KKy8qIEF0dHJpYnV0ZXMgZm9yIHdpbWF4X3N0YXRlX2dldCgpICovCiBlbnVtIHsKIAlXSU1BWF9HTkxfU1RHRVRfSUZJRFggPSAxLAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveGlsaW54ZmIuaCBiL2luY2x1ZGUvbGludXgveGlsaW54ZmIuaAppbmRleCBmMjQ2M2Y1Li41YTE1NWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hpbGlueGZiLmgKKysrIGIvaW5jbHVkZS9saW51eC94aWxpbnhmYi5oCkBAIC0xNiw3ICsxNiw3IEBACiAvKiBNTDMwMC80MDMgcmVmZXJlbmNlIGRlc2lnbiBmcmFtZWJ1ZmZlciBkcml2ZXIgcGxhdGZvcm0gZGF0YSBzdHJ1Y3QgKi8KIHN0cnVjdCB4aWxpbnhmYl9wbGF0Zm9ybV9kYXRhIHsKIAl1MzIgcm90YXRlX3NjcmVlbjsJLyogRmxhZyB0byByb3RhdGUgZGlzcGxheSAxODAgZGVncmVlcyAqLwotCXUzMiBzY3JlZW5faGVpZ2h0X21tOwkvKiBQaHlzaWNhbCBkaW1lbnRpb25zIG9mIHNjcmVlbiBpbiBtbSAqLworCXUzMiBzY3JlZW5faGVpZ2h0X21tOwkvKiBQaHlzaWNhbCBkaW1lbnNpb25zIG9mIHNjcmVlbiBpbiBtbSAqLwogCXUzMiBzY3JlZW5fd2lkdGhfbW07CiAJdTMyIHhyZXMsIHlyZXM7CQkvKiByZXNvbHV0aW9uIG9mIHNjcmVlbiBpbiBwaXhlbHMgKi8KIAl1MzIgeHZpcnQsIHl2aXJ0OwkvKiByZXNvbHV0aW9uIG9mIG1lbW9yeSBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9kbTM1NV9jY2RjLmggYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oCmluZGV4IGRmOGE3YjEuLmFkZjJmZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9kbTM1NV9jY2RjLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2RtMzU1X2NjZGMuaApAQCAtMTkzLDcgKzE5Myw3IEBACiAjZGVmaW5lIENDRENfREZUX1RBQkxFX1NJWkUJMTYKIC8qCiAgKiBNYWluIFN0cnVjdHVyZSBmb3IgdmVydGljYWwgZGVmZWN0IGNvcnJlY3Rpb24uIFZlcnRpY2FsIGRlZmVjdAotICogY29ycmVjdGlvbiBjYW4gY29ycmVjdCB1cHRvIDE2IGRlZmVjdHMgaWYgZGVmZWN0cyBsZXNzIHRoYW4gMTYKKyAqIGNvcnJlY3Rpb24gY2FuIGNvcnJlY3QgdXAgdG8gMTYgZGVmZWN0cyBpZiBkZWZlY3RzIGxlc3MgdGhhbiAxNgogICogdGhlbiBwYWQgdGhlIHJlc3Qgd2l0aCAwCiAgKi8KIHN0cnVjdCBjY2RjX3ZlcnRpY2FsX2RmdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvaXNpZi5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaAppbmRleCBiMGI3NGFkLi43ZjNkNzZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvaXNpZi5oCkBAIC0xOTksNyArMTk5LDcgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiBDb2xvciBTcGFjZSBDb252ZXJ0aW9uIChDU0MpCisqKiBDb2xvciBTcGFjZSBDb252ZXJzaW9uIChDU0MpCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBJU0lGX0NTQ19OVU1fQ09FRkYJMTYKIHN0cnVjdCBpc2lmX2NvbG9yX3NwYWNlX2NvbnYgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9saXJjLmggYi9pbmNsdWRlL21lZGlhL2xpcmMuaAppbmRleCA2Njc4YTE2OS4uNGIzYWIyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9saXJjLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9saXJjLmgKQEAgLTEzNyw3ICsxMzcsNyBAQAogICovCiAjZGVmaW5lIExJUkNfU0VUX1JFQ19GSUxURVJfU1BBQ0UgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxYiwgX191MzIpCiAvKgotICogaWYgZmlsdGVyIGNhbm5vdCBiZSBzZXQgaW5kZXBlbmRhbnRseSBmb3IgcHVsc2Uvc3BhY2UsIHRoaXMgc2hvdWxkCisgKiBpZiBmaWx0ZXIgY2Fubm90IGJlIHNldCBpbmRlcGVuZGVudGx5IGZvciBwdWxzZS9zcGFjZSwgdGhpcyBzaG91bGQKICAqIGJlIHVzZWQKICAqLwogI2RlZmluZSBMSVJDX1NFVF9SRUNfRklMVEVSICAgICAgICAgICAgX0lPVygnaScsIDB4MDAwMDAwMWMsIF9fdTMyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvOXAvOXAuaCBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKaW5kZXggNmI3NWE2OS4uZDJkZjU1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvOXAuaAorKysgYi9pbmNsdWRlL25ldC85cC85cC5oCkBAIC0xMTksNyArMTE5LDcgQEAKICAqIEBQOV9UUkVBRDogcmVxdWVzdCB0byB0cmFuc2ZlciBkYXRhIGZyb20gYSBmaWxlIG9yIGRpcmVjdG9yeQogICogQFA5X1JSRUFEOiByZXNwb25zZSB3aXRoIGRhdGEgcmVxdWVzdGVkCiAgKiBAUDlfVFdSSVRFOiByZXVxZXN0IHRvIHRyYW5zZmVyIGRhdGEgdG8gYSBmaWxlCi0gKiBAUDlfUldSSVRFOiByZXNwb25zZSB3aXRoIG91dCBtdWNoIGRhdGEgd2FzIHRyYW5zZmVyZWQgdG8gZmlsZQorICogQFA5X1JXUklURTogcmVzcG9uc2Ugd2l0aCBvdXQgbXVjaCBkYXRhIHdhcyB0cmFuc2ZlcnJlZCB0byBmaWxlCiAgKiBAUDlfVENMVU5LOiBmb3JnZXQgYWJvdXQgYSBoYW5kbGUgdG8gYW4gZW50aXR5IHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0KICAqIEBQOV9SQ0xVTks6IHJlc3BvbnNlIHdoZW4gc2VydmVyIGhhcyBmb3Jnb3R0ZW4gYWJvdXQgdGhlIGhhbmRsZQogICogQFA5X1RSRU1PVkU6IHJlcXVlc3QgdG8gcmVtb3ZlIGFuIGVudGl0eSBmcm9tIHRoZSBoaWVyYXJjaHkKQEAgLTEzOSw4ICsxMzksNiBAQAogICovCiAKIGVudW0gcDlfbXNnX3QgewotCVA5X1RTWU5DRlMgPSAwLAotCVA5X1JTWU5DRlMsCiAJUDlfVExFUlJPUiA9IDYsCiAJUDlfUkxFUlJPUiwKIAlQOV9UU1RBVEZTID0gOCwKQEAgLTI5NCw3ICsyOTIsNyBAQAogICoKICAqIFFJRCB0eXBlcyBhcmUgYSBzdWJzZXQgb2YgcGVybWlzc2lvbnMgLSB0aGV5IGFyZSBwcmltYXJpbHkKICAqIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBzZW1hbnRpY3MgZm9yIGEgZmlsZSBzeXN0ZW0gZW50aXR5IHZpYQotICogYSBqdW1wLXRhYmxlLiAgVGhlaXIgdmFsdWUgaXMgYWxzbyB0aGUgbW9zdCBzaWduaWZpZ2FudCAxNiBiaXRzCisgKiBhIGp1bXAtdGFibGUuICBUaGVpciB2YWx1ZSBpcyBhbHNvIHRoZSBtb3N0IHNpZ25pZmljYW50IDE2IGJpdHMKICAqIG9mIHRoZSBwZXJtaXNzaW9uX3QKICAqCiAgKiBTZWUgQWxzbzogaHR0cDovL3BsYW45LmJlbGwtbGFicy5jb20vbWFnaWMvbWFuMmh0bWwvMi9zdGF0CkBAIC0zNjYsOCArMzY0LDggQEAKIC8qKgogICogc3RydWN0IHA5X3N0YXQgLSBmaWxlIHN5c3RlbSBtZXRhZGF0YSBpbmZvcm1hdGlvbgogICogQHNpemU6IGxlbmd0aCBwcmVmaXggZm9yIHRoaXMgc3RhdCBzdHJ1Y3R1cmUgaW5zdGFuY2UKLSAqIEB0eXBlOiB0aGUgdHlwZSBvZiB0aGUgc2VydmVyIChlcXVpdmlsZW50IHRvIGEgbWFqb3IgbnVtYmVyKQotICogQGRldjogdGhlIHN1Yi10eXBlIG9mIHRoZSBzZXJ2ZXIgKGVxdWl2aWxlbnQgdG8gYSBtaW5vciBudW1iZXIpCisgKiBAdHlwZTogdGhlIHR5cGUgb2YgdGhlIHNlcnZlciAoZXF1aXZhbGVudCB0byBhIG1ham9yIG51bWJlcikKKyAqIEBkZXY6IHRoZSBzdWItdHlwZSBvZiB0aGUgc2VydmVyIChlcXVpdmFsZW50IHRvIGEgbWlub3IgbnVtYmVyKQogICogQHFpZDogdW5pcXVlIGlkIGZyb20gdGhlIHNlcnZlciBvZiB0eXBlICZwOV9xaWQKICAqIEBtb2RlOiBQbGFuIDkgZm9ybWF0IHBlcm1pc3Npb25zIG9mIHR5cGUgJnA5X3Blcm1fdAogICogQGF0aW1lOiBMYXN0IGFjY2Vzcy9yZWFkIHRpbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKaW5kZXggMGEzMDk3Ny4uMDUxYTk5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogICogVHJhbnNwb3J0IHVzZSBhbiBhcnJheSB0byB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cwogICogaW5zdGVhZCBvZiBhIGxpc3QuICBXaGlsZSB0aGlzIG1heSBpbmN1cnIgb3ZlcmhlYWQgZHVyaW5nIGluaXRpYWwKICAqIGFsbG9jYXRpb24gb3IgZXhwYW5zaW9uLCBpdCBtYWtlcyByZXF1ZXN0IGxvb2t1cCBtdWNoIGVhc2llciBhcyB0aGUKLSAqIHRhZyBpZCBpcyBhIGluZGV4IGludG8gYW4gYXJyYXkuICAoV2UgdXNlIHRhZysxIHNvIHRoYXQgd2UgY2FuIGFjY29tb2RhdGUKKyAqIHRhZyBpZCBpcyBhIGluZGV4IGludG8gYW4gYXJyYXkuICAoV2UgdXNlIHRhZysxIHNvIHRoYXQgd2UgY2FuIGFjY29tbW9kYXRlCiAgKiB0aGUgLTEgdGFnIGZvciB0aGUgVF9WRVJTSU9OIHJlcXVlc3QpLgogICogVGhpcyBhbHNvIGhhcyB0aGUgbmljZSBlZmZlY3Qgb2Ygb25seSBoYXZpbmcgdG8gYWxsb2NhdGUgd2FpdF9xdWV1ZXMKICAqIG9uY2UsIGluc3RlYWQgb2YgY29uc3RhbnRseSBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIHRoZW0uICBJdHMgcG9zc2libGUKQEAgLTIxOCw4ICsyMTgsOCBAQAogdm9pZCBwOV9jbGllbnRfYmVnaW5fZGlzY29ubmVjdChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KTsKIHN0cnVjdCBwOV9maWQgKnA5X2NsaWVudF9hdHRhY2goc3RydWN0IHA5X2NsaWVudCAqY2xudCwgc3RydWN0IHA5X2ZpZCAqYWZpZCwKIAkJCQkJY2hhciAqdW5hbWUsIHUzMiBuX3VuYW1lLCBjaGFyICphbmFtZSk7Ci1zdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIGludCBud25hbWUsIGNoYXIgKip3bmFtZXMsCi0JCQkJCQkJCWludCBjbG9uZSk7CitzdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIHVpbnQxNl90IG53bmFtZSwKKwkJY2hhciAqKnduYW1lcywgaW50IGNsb25lKTsKIGludCBwOV9jbGllbnRfb3BlbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBtb2RlKTsKIGludCBwOV9jbGllbnRfZmNyZWF0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKm5hbWUsIHUzMiBwZXJtLCBpbnQgbW9kZSwKIAkJCQkJCQljaGFyICpleHRlbnNpb24pOwpAQCAtMjMwLDcgKzIzMCw2IEBACiAJCWdpZF90IGdpZCwgc3RydWN0IHA5X3FpZCAqcWlkKTsKIGludCBwOV9jbGllbnRfY2x1bmsoc3RydWN0IHA5X2ZpZCAqZmlkKTsKIGludCBwOV9jbGllbnRfZnN5bmMoc3RydWN0IHA5X2ZpZCAqZmlkLCBpbnQgZGF0YXN5bmMpOwotaW50IHA5X2NsaWVudF9zeW5jX2ZzKHN0cnVjdCBwOV9maWQgKmZpZCk7CiBpbnQgcDlfY2xpZW50X3JlbW92ZShzdHJ1Y3QgcDlfZmlkICpmaWQpOwogaW50IHA5X2NsaWVudF9yZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLAogCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC90cmFuc3BvcnQuaCBiL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCmluZGV4IDgyODY4ZjEuLjhmMDhjNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCkBAIC0zMCw3ICszMCw3IEBACiAKIC8qIERlZmF1bHQuIEFkZCBQYXlsb2FkIHRvIFBEVSBiZWZvcmUgc2VuZGluZyBpdCBkb3duIHRvIHRyYW5zcG9ydCBsYXllciAqLwogI2RlZmluZSBQOV9UUkFOU19QUkVGX1BBWUxPQURfREVGICAweDAKLS8qIFNlbmQgcGF5IGxvYWQgc2VwZXJhdGVseSB0byB0cmFuc3BvcnQgbGF5ZXIgYWxvbmcgd2l0aCBQRFUuKi8KKy8qIFNlbmQgcGF5IGxvYWQgc2VwYXJhdGVseSB0byB0cmFuc3BvcnQgbGF5ZXIgYWxvbmcgd2l0aCBQRFUuKi8KICNkZWZpbmUgUDlfVFJBTlNfUFJFRl9QQVlMT0FEX1NFUCAgMHgxCiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IGVjNmFjZjIuLjJjMGQzMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTg0LDYgKzg0LDggQEAKIAlIQ0lfU0VSVklDRV9DQUNIRSwKIAlIQ0lfTElOS19LRVlTLAogCUhDSV9ERUJVR19LRVlTLAorCisJSENJX1JFU0VULAogfTsKIAogLyogSENJIGlvY3RsIGRlZmluZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZjbmZnLmggYi9pbmNsdWRlL25ldC9jYWlmL2NmY25mZy5oCmluZGV4IGY2ODg0NzguLmYzM2QzNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZjbmZnLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZmNuZmcuaApAQCAtNjksNyArNjksNyBAQAogICoJCWNmY25mZ19hZGRfYWRhcHRfbGF5ZXIgdG8gc3BlY2lmeSBQSFkgZm9yIHRoZSBsaW5rLgogICogQHByZWY6CVRoZSBwaHkgKGxpbmsgbGF5ZXIpIHByZWZlcmVuY2UuCiAgKiBAZmNzOglTcGVjaWZ5IGlmIGNoZWNrc3VtIGlzIHVzZWQgaW4gQ0FJRiBGcmFtaW5nIExheWVyLgotICogQHN0eDoJU3BlY2lmeSBpZiBTdGFydCBPZiBGcmFtZSBlWHRlbnRpb24gaXMgdXNlZC4KKyAqIEBzdHg6CVNwZWNpZnkgaWYgU3RhcnQgT2YgRnJhbWUgZXh0ZW5zaW9uIGlzIHVzZWQuCiAgKi8KIAogdm9pZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmggYi9pbmNsdWRlL25ldC9nZW5fc3RhdHMuaAppbmRleCBmYTE1NzcxLi5hNzliNmNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nZW5fc3RhdHMuaAorKysgYi9pbmNsdWRlL25ldC9nZW5fc3RhdHMuaApAQCAtMTEsNyArMTEsNyBAQAogCXN0cnVjdCBza19idWZmICogIHNrYjsKIAlzdHJ1Y3QgbmxhdHRyICogICB0YWlsOwogCi0JLyogQmFja3dhcmQgY29tcGF0YWJpbGl0eSAqLworCS8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KIAlpbnQgICAgICAgICAgICAgICBjb21wYXRfdGNfc3RhdHM7CiAJaW50ICAgICAgICAgICAgICAgY29tcGF0X3hzdGF0czsKIAl2b2lkICogICAgICAgICAgICB4c3RhdHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAppbmRleCA4OGJkZDAxLi4yZmE4ZDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKQEAgLTM4LDkgKzM4LDE5IEBACiAJcmV0dXJuIG91dGVyOwogfQogCi0jZGVmaW5lCUlORVRfRUNOX3htaXQoc2spIGRvIHsgaW5ldF9zayhzayktPnRvcyB8PSBJTkVUX0VDTl9FQ1RfMDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUJSU5FVF9FQ05fZG9udHhtaXQoc2spIFwKLQlkbyB7IGluZXRfc2soc2spLT50b3MgJj0gfklORVRfRUNOX01BU0s7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgSU5FVF9FQ05feG1pdChzdHJ1Y3Qgc29jayAqc2spCit7CisJaW5ldF9zayhzayktPnRvcyB8PSBJTkVUX0VDTl9FQ1RfMDsKKwlpZiAoaW5ldDZfc2soc2spICE9IE5VTEwpCisJCWluZXQ2X3NrKHNrKS0+dGNsYXNzIHw9IElORVRfRUNOX0VDVF8wOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5FVF9FQ05fZG9udHhtaXQoc3RydWN0IHNvY2sgKnNrKQoreworCWluZXRfc2soc2spLT50b3MgJj0gfklORVRfRUNOX01BU0s7CisJaWYgKGluZXQ2X3NrKHNrKSAhPSBOVUxMKQorCQlpbmV0Nl9zayhzayktPnRjbGFzcyAmPSB+SU5FVF9FQ05fTUFTSzsKK30KIAogI2RlZmluZSBJUDZfRUNOX2Zsb3dfaW5pdChsYWJlbCkgZG8gewkJXAogICAgICAgKGxhYmVsKSAmPSB+aHRvbmwoSU5FVF9FQ05fTUFTSyA8PCAyMCk7CVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDMwYjQ5ZWQuLjg2YWVmZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtNTIsNyArNTIsNyBAQAogCSAqLwogCWlmIChsaWtlbHkoc2tiLT5kZXYgJiYgc2tiLT5kZXYtPm5kX25ldCkpCiAJCXJldHVybiBkZXZfbmV0KHNrYi0+ZGV2KTsKLQlpZiAoc2tiX2RzdChza2IpLT5kZXYpCisJaWYgKHNrYl9kc3Qoc2tiKSAmJiBza2JfZHN0KHNrYiktPmRldikKIAkJcmV0dXJuIGRldl9uZXQoc2tiX2RzdChza2IpLT5kZXYpOwogCVdBUk4oc2tiLT5zaywgIk1heWJlIHNrYl9za25ldCBzaG91bGQgYmUgdXNlZCBpbiAlcygpIGF0IGxpbmU6JWRcbiIsCiAJCSAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7CkBAIC05Miw3ICs5Miw3IEBACiB9CiAvKgogICogVGhpcyBvbmUgbmVlZGVkIGZvciBzaW5nbGVfb3Blbl9uZXQgc2luY2UgbmV0IGlzIHN0b3JlZCBkaXJlY3RseSBpbgotICogcHJpdmF0ZSBub3QgYXMgYSBzdHJ1Y3QgaS5lLiBzZXFfZmlsZV9uZXQgY2FudCBiZSB1c2VkLgorICogcHJpdmF0ZSBub3QgYXMgYSBzdHJ1Y3QgaS5lLiBzZXFfZmlsZV9uZXQgY2FuJ3QgYmUgdXNlZC4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpzZXFfZmlsZV9zaW5nbGVfbmV0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewpAQCAtNzkxLDYgKzc5MSw3IEBACiAvKiBJUFZTIGluIG5ldHdvcmsgbmFtZXNwYWNlICovCiBzdHJ1Y3QgbmV0bnNfaXB2cyB7CiAJaW50CQkJZ2VuOwkJLyogR2VuZXJhdGlvbiAqLworCWludAkJCWVuYWJsZTsJCS8qIGVuYWJsZSBsaWtlIG5mX2hvb2tzIGRvICovCiAJLyoKIAkgKglIYXNoIHRhYmxlOiBmb3IgcmVhbCBzZXJ2aWNlIGxvb2t1cHMKIAkgKi8KQEAgLTEwODksNiArMTA5MCwyMiBAQAogCWF0b21pY19pbmMoJmN0bF9jcC0+bl9jb250cm9sKTsKIH0KIAorLyoKKyAqIElQVlMgbmV0bnMgaW5pdCAmIGNsZWFudXAgZnVuY3Rpb25zCisgKi8KK2V4dGVybiBpbnQgX19pcF92c19lc3RpbWF0b3JfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIGludCBfX2lwX3ZzX2NvbnRyb2xfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIGludCBfX2lwX3ZzX3Byb3RvY29sX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19hcHBfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIGludCBfX2lwX3ZzX2Nvbm5faW5pdChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIGludCBfX2lwX3ZzX3N5bmNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19jb25uX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfYXBwX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19jb250cm9sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfZXN0aW1hdG9yX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfc3luY19jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX3NlcnZpY2VfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOwogCiAvKgogICogICAgICBJUFZTIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCmluZGV4IDE3ZmNkOTYuLmZiNGI3NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmgKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiAJbm90aWZ5X3Qgbm90aWZ5OyAvKiBDYWxsYmFja3MgdG8gSXJMTVAgKi8KIAotCWludCAgICBtdHRfcmVxdWlyZWQ7ICAvKiBNaW51bXVtIHR1cm5hcm91bmQgdGltZSByZXF1aXJlZCAqLworCWludCAgICBtdHRfcmVxdWlyZWQ7ICAvKiBNaW5pbXVtIHR1cm5hcm91bmQgdGltZSByZXF1aXJlZCAqLwogCWludCAgICB4Ym9mc19kZWxheTsgICAvKiBOciBvZiBYQk9GJ3MgdXNlZCB0byBNVFQgKi8KIAlpbnQgICAgYm9mc19jb3VudDsgICAgLyogTmVnb3RpYXRlZCBleHRyYSBCT0ZzICovCiAJaW50ICAgIG5leHRfYm9mczsgICAgIC8qIE5lZ290aWF0ZWQgZXh0cmEgQk9GcyBhZnRlciBuZXh0IGZyYW1lICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3dyYXBwZXIuaCBiL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCmluZGV4IDI5NDJhZDYuLmVlZjUzZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCkBAIC00Miw3ICs0Miw3IEBACiAKICNkZWZpbmUgSVJEQV9UUkFOUyAweDIwICAgIC8qIEFzeW5jaHJvbm91cyB0cmFuc3BhcmVuY3kgbW9kaWZpZXIgKi8gICAgICAgCiAKLS8qIFN0YXRlcyBmb3IgcmVjZXZpbmcgYSBmcmFtZSBpbiBhc3luYyBtb2RlICovCisvKiBTdGF0ZXMgZm9yIHJlY2VpdmluZyBhIGZyYW1lIGluIGFzeW5jIG1vZGUgKi8KIGVudW0gewogCU9VVFNJREVfRlJBTUUsIAogCUJFR0lOX0ZSQU1FLCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oIGIvaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgKaW5kZXggMjA1YTMzNi4uMTEyMWJhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgKQEAgLTE3Myw3ICsxNzMsNyBAQAogCS8qCiAJICogVGhlIG1lc3NhZ2VfcGVuZGluZyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYW4gaWN1diBpbnRlcnJ1cHQKIAkgKiB0eXBlIDB4MDYgb3IgdHlwZSAweDA3IGhhcyBiZWVuIHJlY2VpdmVkLiBBIG5ldyBtZXNzYWdlIGlzCi0JICogYXZhaWxhYmUgYW5kIGNhbiBiZSByZWNlaXZlZCB3aXRoIGl1Y3ZfbWVzc2FnZV9yZWNlaXZlLgorCSAqIGF2YWlsYWJsZSBhbmQgY2FuIGJlIHJlY2VpdmVkIHdpdGggaXVjdl9tZXNzYWdlX3JlY2VpdmUuCiAJICovCiAJdm9pZCAoKm1lc3NhZ2VfcGVuZGluZykoc3RydWN0IGl1Y3ZfcGF0aCAqLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICopOwogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmggYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKaW5kZXggM2FmZGIyMS4uNWQ1YTZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oCisrKyBiL2luY2x1ZGUvbmV0L2l3X2hhbmRsZXIuaApAQCAtOTEsNyArOTEsNyBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBnb2FscyB3ZXJlIGFzIGZvbGxvdyA6CiAgKglvIE9idmlvdXMgOiB5b3Ugc2hvdWxkIG5vdCBuZWVkIGEgUGhEIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZywKLSAqCQl0aGUgYmVuZWZpdCBpcyBlYXNpZXIgbWFpbnRhaW5hbmNlLgorICoJCXRoZSBiZW5lZml0IGlzIGVhc2llciBtYWludGVuYW5jZS4KICAqCW8gRmxleGlibGUgOiBpdCBzaG91bGQgYWNjb21tb2RhdGUgYSB3aWRlIHZhcmlldHkgb2YgZHJpdmVyCiAgKgkJaW1wbGVtZW50YXRpb25zIGFuZCBiZSBhcyBmbGV4aWJsZSBhcyB0aGUgb2xkIEFQSS4KICAqCW8gTGVhbiA6IGl0IHNob3VsZCBiZSBlZmZpY2llbnQgbWVtb3J5IHdpc2UgdG8gbWluaW1pc2UgdGhlIGltcGFjdApAQCAtMTI5LDcgKzEyOSw3IEBACiAgKgogICogRnVuY3Rpb25zIHByb3RvdHlwZSB1c2VzIHVuaW9uIGl3cmVxX2RhdGEKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTb21lIHdvdWxkIGhhdmUgcHJlZmVyZWQgZnVuY3Rpb25zIGRlZmluZWQgdGhpcyB3YXkgOgorICogU29tZSB3b3VsZCBoYXZlIHByZWZlcnJlZCBmdW5jdGlvbnMgZGVmaW5lZCB0aGlzIHdheSA6CiAgKglzdGF0aWMgaW50IG15ZHJpdmVyX2lvY3RsX3NldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCiAgKgkJCQkJICBsb25nIHJhdGUsIGludCBhdXRvKQogICogMSkgVGhlIGtlcm5lbCBjb2RlIGRvZXNuJ3QgInZhbGlkYXRlIiB0aGUgY29udGVudCBvZiBpd3JlcV9kYXRhLCBhbmQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19wZHUuaCBiL2luY2x1ZGUvbmV0L2xsY19wZHUuaAppbmRleCA3NWI4ZTI5Li5mNTdlN2Q0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGNfcGR1LmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCkBAIC0xOTksNyArMTk5LDcgQEAKIAl1OCBzc2FwOwogCXU4IGN0cmxfMTsKIAl1OCBjdHJsXzI7Ci19OworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV9zbiAqbGxjX3BkdV9zbl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXU4IGRzYXA7CiAJdTggc3NhcDsKIAl1OCBjdHJsXzE7Ci19OworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV91biAqbGxjX3BkdV91bl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTM1OSw3ICszNTksNyBAQAogCXU4IGZtdF9pZDsJLyogYWx3YXlzIDB4ODEgZm9yIExMQyAqLwogCXU4IHR5cGU7CS8qIGRpZmZlcmVudCBpZiBOVUxML25vbi1OVUxMIExTQVAgKi8KIAl1OCBydzsJCS8qIHNlbmRlciByZWNlaXZlIHdpbmRvdyAqLwotfTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICoJbGxjX3BkdV9pbml0X2FzX3hpZF9jbWQgLSBzZXRzIGJ5dGVzIDMsIDQgJiA1IG9mIExMQyBoZWFkZXIgYXMgWElECkBAIC00MTUsNyArNDE1LDcgQEAKIAl1OCAgY3Vycl9zc3Y7CQkvKiBjdXJyZW50IHNlbmQgc3RhdGUgdmFyaWFibGUgdmFsICovCiAJdTggIGN1cnJfcnN2OwkJLyogY3VycmVudCByZWNlaXZlIHN0YXRlIHZhcmlhYmxlICovCiAJdTggIGluZF9iaXRzOwkJLyogaW5kaWNhdG9yIGJpdHMgc2V0IHdpdGggbWFjcm8gKi8KLX07Cit9IF9fcGFja2VkOwogCiBleHRlcm4gdm9pZCBsbGNfcGR1X3NldF9jbWRfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUpOwogZXh0ZXJuIHZvaWQgbGxjX3BkdV9zZXRfcGZfYml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IGJpdF92YWx1ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCBjZWZlMWIzLi4wMjVkNGNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAgKiBhY2NlbGVyYXRpb24gKGkuZS4gaXdsd2lmaSkuIFRob3NlIGRyaXZlcnMgc2hvdWxkIHByb3ZpZGUgdXBkYXRlX3RraXBfa2V5CiAgKiBoYW5kbGVyLgogICogVGhlIHVwZGF0ZV90a2lwX2tleSgpIGNhbGwgdXBkYXRlcyB0aGUgZHJpdmVyIHdpdGggdGhlIG5ldyBwaGFzZSAxIGtleS4KLSAqIFRoaXMgaGFwcGVucyBldmVyeXRpbWUgdGhlIGl2MTYgd3JhcHMgYXJvdW5kIChldmVyeSA2NTUzNiBwYWNrZXRzKS4gVGhlCisgKiBUaGlzIGhhcHBlbnMgZXZlcnkgdGltZSB0aGUgaXYxNiB3cmFwcyBhcm91bmQgKGV2ZXJ5IDY1NTM2IHBhY2tldHMpLiBUaGUKICAqIHNldF9rZXkoKSBjYWxsIHdpbGwgaGFwcGVuIG9ubHkgb25jZSBmb3IgZWFjaCBrZXkgKHVubGVzcyB0aGUgQVAgZGlkCiAgKiByZWtleWluZyksIGl0IHdpbGwgbm90IGluY2x1ZGUgYSB2YWxpZCBwaGFzZSAxIGtleS4gVGhlIHZhbGlkIHBoYXNlIDEga2V5IGlzCiAgKiBwcm92aWRlZCBieSB1cGRhdGVfdGtpcF9rZXkgb25seS4gVGhlIHRyaWdnZXIgdGhhdCBtYWtlcyBtYWM4MDIxMSBjYWxsIHRoaXMKQEAgLTE3NTMsOCArMTc1MywxOSBAQAogICogCXRoYXQgVFgvUlhfU1RPUCBjYW4gcGFzcyBOVUxMIGZvciB0aGlzIHBhcmFtZXRlci4KICAqCVRoZSBAYnVmX3NpemUgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgYWN0aW9uIGlzIHNldCB0bwogICoJJUlFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTCBhbmQgaW5kaWNhdGVzIHRoZSBwZWVyJ3MgcmVvcmRlcgotICoJYnVmZmVyIHNpemUgKG51bWJlciBvZiBzdWJmcmFtZXMpIGZvciB0aGlzIHNlc3Npb24gLS0gYWdncmVnYXRlcwotICoJY29udGFpbmluZyBtb3JlIHN1YmZyYW1lcyB0aGFuIHRoaXMgbWF5IG5vdCBiZSB0cmFuc21pdHRlZCB0byB0aGUgcGVlci4KKyAqCWJ1ZmZlciBzaXplIChudW1iZXIgb2Ygc3ViZnJhbWVzKSBmb3IgdGhpcyBzZXNzaW9uIC0tIHRoZSBkcml2ZXIKKyAqCW1heSBuZWl0aGVyIHNlbmQgYWdncmVnYXRlcyBjb250YWluaW5nIG1vcmUgc3ViZnJhbWVzIHRoYW4gdGhpcworICoJbm9yIHNlbmQgYWdncmVnYXRlcyBpbiBhIHdheSB0aGF0IGxvc3QgZnJhbWVzIHdvdWxkIGV4Y2VlZCB0aGUKKyAqCWJ1ZmZlciBzaXplLiBJZiBqdXN0IGxpbWl0aW5nIHRoZSBhZ2dyZWdhdGUgc2l6ZSwgdGhpcyB3b3VsZCBiZQorICoJcG9zc2libGUgd2l0aCBhIGJ1Zl9zaXplIG9mIDg6CisgKgkgLSBUWDogMS4uLi4uNworICoJIC0gUlg6ICAyLi4uLjcgKGxvc3QgZnJhbWUgIzEpCisgKgkgLSBUWDogICAgICAgIDguLjEuLi4KKyAqCXdoaWNoIGlzIGludmFsaWQgc2luY2UgIzEgd2FzIG5vdyByZS10cmFuc21pdHRlZCB3ZWxsIHBhc3QgdGhlCisgKglidWZmZXIgc2l6ZSBvZiA4LiBDb3JyZWN0IHdheXMgdG8gcmV0cmFuc21pdCAjMSB3b3VsZCBiZToKKyAqCSAtIFRYOiAgICAgICAxIG9yIDE4IG9yIDgxCisgKglFdmVuICIxODkiIHdvdWxkIGJlIHdyb25nIHNpbmNlIDEgY291bGQgYmUgbG9zdCBhZ2Fpbi4KKyAqCiAgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IGQ5NTQ5YWYuLjY1YWZjNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC0zMiw3ICszMiw3IEBACiAgICAKICAgIFRoZSByZXN1bHQ6IFszNF04NiBpcyBub3QgZ29vZCBjaG9pY2UgZm9yIFFvUyByb3V0ZXIgOi0oCiAKLSAgIFRoZSB0aGluZ3MgYXJlIG5vdCBzbyBiYWQsIGJlY2F1c2Ugd2UgbWF5IHVzZSBhcnRpZmljYWwKKyAgIFRoZSB0aGluZ3MgYXJlIG5vdCBzbyBiYWQsIGJlY2F1c2Ugd2UgbWF5IHVzZSBhcnRpZmljaWFsCiAgICBjbG9jayBldmFsdWF0ZWQgYnkgaW50ZWdyYXRpb24gb2YgbmV0d29yayBkYXRhIGZsb3cKICAgIGluIHRoZSBtb3N0IGNyaXRpY2FsIHBsYWNlcy4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKaW5kZXggZjg4NDI5Yy4uOGZjZTA2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9yb3V0ZS5oCkBAIC02NCw2ICs2NCw3IEBACiAKIAlfX2JlMzIJCQlydF9kc3Q7CS8qIFBhdGggZGVzdGluYXRpb24JKi8KIAlfX2JlMzIJCQlydF9zcmM7CS8qIFBhdGggc291cmNlCQkqLworCWludAkJCXJ0X3JvdXRlX2lpZjsKIAlpbnQJCQlydF9paWY7CiAJaW50CQkJcnRfb2lmOwogCV9fdTMyCQkJcnRfbWFyazsKQEAgLTgwLDEyICs4MSwxMiBAQAogCiBzdGF0aWMgaW5saW5lIGJvb2wgcnRfaXNfaW5wdXRfcm91dGUoc3RydWN0IHJ0YWJsZSAqcnQpCiB7Ci0JcmV0dXJuIHJ0LT5ydF9paWYgIT0gMDsKKwlyZXR1cm4gcnQtPnJ0X3JvdXRlX2lpZiAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgcnRfaXNfb3V0cHV0X3JvdXRlKHN0cnVjdCBydGFibGUgKnJ0KQogewotCXJldHVybiBydC0+cnRfaWlmID09IDA7CisJcmV0dXJuIHJ0LT5ydF9yb3V0ZV9paWYgPT0gMDsKIH0KIAogc3RydWN0IGlwX3J0X2FjY3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCBjYzkxODVjLi4wZjZlNjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtNDIyLDcgKzQyMiw3IEBACiAJX191MzIgYWRhcHRhdGlvbl9pbmQ7CiAKIAlfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzY3RwX3BhcmFtaGRyX3QpICsgU0NUUF9BVVRIX1JBTkRPTV9MRU5HVEhdOwotCV9fdTggYXV0aF9obWFjc1tTQ1RQX0FVVEhfTlVNX0hNQUNTICsgMl07CisJX191OCBhdXRoX2htYWNzW1NDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICsgMl07CiAJX191OCBhdXRoX2NodW5rc1tzaXplb2Yoc2N0cF9wYXJhbWhkcl90KSArIFNDVFBfQVVUSF9NQVhfQ0hVTktTXTsKIAogCS8qIFRoaXMgaXMgYSBzaGltIGZvciBteSBwZWVyJ3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggZGEwNTM0ZC4uMDE4MTBhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKIAogLyoKICAqIEtlcm5lbCBzb2NrZXRzLCBmLmUuIHJ0bmwgb3IgaWNtcF9zb2NrZXQsIGFyZSBhIHBhcnQgb2YgYSBuYW1lc3BhY2UuCi0gKiBUaGV5IHNob3VsZCBub3QgaG9sZCBhIHJlZmVycmVuY2UgdG8gYSBuYW1lc3BhY2UgaW4gb3JkZXIgdG8gYWxsb3cKKyAqIFRoZXkgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIGEgbmFtZXNwYWNlIGluIG9yZGVyIHRvIGFsbG93CiAgKiB0byBzdG9wIGl0LgogICogU29ja2V0cyBhZnRlciBza19jaGFuZ2VfbmV0IHNob3VsZCBiZSByZWxlYXNlZCB1c2luZyBza19yZWxlYXNlX2tlcm5lbAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaCBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCmluZGV4IGVlYjA3N2QuLmE4MTIyZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCisrKyBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCkBAIC0xNiw3ICsxNiw3IEBACiAKIHN0cnVjdCBmbG93aTY7CiAKLS8qIGV4dGVudGlvbiBoZWFkZXJzICovCisvKiBleHRlbnNpb24gaGVhZGVycyAqLwogZXh0ZXJuIGludAkJCQlpcHY2X2V4dGhkcnNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkCQkJCWlwdjZfZXh0aGRyc19leGl0KHZvaWQpOwogZXh0ZXJuIGludAkJCQlpcHY2X2ZyYWdfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3dpbWF4LmggYi9pbmNsdWRlL25ldC93aW1heC5oCmluZGV4IDM0NjFhYTEuLmM3OTliYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3dpbWF4LmgKKysrIGIvaW5jbHVkZS9uZXQvd2ltYXguaApAQCAtMjg2LDcgKzI4Niw3IEBACiAgKiAgICAgZG9lcyBub3QgZGlzY29ubmVjdCB0aGUgZGV2aWNlIGZyb20gdGhlIGJ1cyBhbmQgcmV0dXJuIDAuCiAgKiAgICAgSWYgdGhhdCBmYWlscywgaXQgc2hvdWxkIHJlc29ydCB0byBzb21lIHNvcnQgb2YgY29sZCBvciBidXMKICAqICAgICByZXNldCAoZXZlbiBpZiBpdCBpbXBsaWVzIGEgYnVzIGRpc2Nvbm5lY3Rpb24gYW5kIGRldmljZQotICogICAgIGRpc3NhcGVhcmFuY2UpLiBJbiB0aGF0IGNhc2UsIC1FTk9ERVYgc2hvdWxkIGJlIHJldHVybmVkIHRvCisgKiAgICAgZGlzYXBwZWFyYW5jZSkuIEluIHRoYXQgY2FzZSwgLUVOT0RFViBzaG91bGQgYmUgcmV0dXJuZWQgdG8KICAqICAgICBpbmRpY2F0ZSB0aGUgZGV2aWNlIGlzIGdvbmUuCiAgKiAgICAgVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIHN5bmNocm9ub3VzLCBhbmQgcmV0dXJuIG9ubHkgd2hlbiB0aGUKICAqICAgICByZXNldCBpcyBjb21wbGV0ZS4gSW4gY2FzZSBvZiBoYXZpbmcgaGFkIHRvIHJlc29ydCB0byBidXMvY29sZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvd3Bhbi1waHkuaCBiL2luY2x1ZGUvbmV0L3dwYW4tcGh5LmgKaW5kZXggODU5MjYyMy4uZDg2ZmZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvd3Bhbi1waHkuaAorKysgYi9pbmNsdWRlL25ldC93cGFuLXBoeS5oCkBAIC0yOCw3ICsyOCw3IEBACiAJc3RydWN0IG11dGV4IHBpYl9sb2NrOwogCiAJLyoKLQkgKiBUaGlzIGlzIGEgUElCIGFjb3JkaW5nIHRvIDgwMi4xNS40LTIwMDYuCisJICogVGhpcyBpcyBhIFBJQiBhY2NvcmRpbmcgdG8gODAyLjE1LjQtMjAwNi4KIAkgKiBXZSBkbyBub3QgcHJvdmlkZSB0aW1pbmctcmVsYXRlZCB2YXJpYWJsZXMsIGFzIHRoZXkKIAkgKiBhcmVuJ3QgdXNlZCBvdXRzaWRlIG9mIGRyaXZlcgogCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDZhZTRiYzUuLjIwYWZlYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTMyNCw2ICszMjQsNyBAQAogCWludAkJCSgqdG1wbF9zb3J0KShzdHJ1Y3QgeGZybV90bXBsICoqZHN0LCBzdHJ1Y3QgeGZybV90bXBsICoqc3JjLCBpbnQgbik7CiAJaW50CQkJKCpzdGF0ZV9zb3J0KShzdHJ1Y3QgeGZybV9zdGF0ZSAqKmRzdCwgc3RydWN0IHhmcm1fc3RhdGUgKipzcmMsIGludCBuKTsKIAlpbnQJCQkoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CQkJKCpvdXRwdXRfZmluaXNoKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJCQkoKmV4dHJhY3RfaW5wdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwogCWludAkJCSgqZXh0cmFjdF9vdXRwdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LApAQCAtMTQ1NCw2ICsxNDU1LDcgQEAKIGV4dGVybiBpbnQgeGZybTRfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNF9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm00X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgeGZybTRfb3V0cHV0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTRfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCB4ZnJtX3R1bm5lbCAqaGFuZGxlciwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBpbnQgeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoc3RydWN0IHhmcm1fdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtNl9leHRyYWN0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTE0NzAsNiArMTQ3Miw3IEBACiBleHRlcm4gaW50IHhmcm02X2V4dHJhY3Rfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHhmcm02X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm02X2ZpbmRfMXN0ZnJhZ29wdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgdTggKipwcmV2aGRyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy9wYWNrZXQuaCBiL2luY2x1ZGUvcnhycGMvcGFja2V0LmgKaW5kZXggOWIyYzMwOC4uZjI5MDJlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yeHJwYy9wYWNrZXQuaAorKysgYi9pbmNsdWRlL3J4cnBjL3BhY2tldC5oCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAqIEtlcmJlcm9zIHNlY3VyaXR5IHR5cGUtMiByZXNwb25zZSBwYWNrZXQKICAqLwogc3RydWN0IHJ4a2FkX3Jlc3BvbnNlIHsKLQlfX2JlMzIJCXZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhpcyByZXBvbnNlIHR5cGUgKi8KKwlfX2JlMzIJCXZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhpcyByZXNwb25zZSB0eXBlICovCiAJX19iZTMyCQlfX3BhZDsKIAogCS8qIGVuY3J5cHRlZCBiaXQgb2YgdGhlIHJlc3BvbnNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmMvZmNfZmNwLmggYi9pbmNsdWRlL3Njc2kvZmMvZmNfZmNwLmgKaW5kZXggOGExNDNjYS4uNjUyZGVjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2ZjcC5oCisrKyBiL2luY2x1ZGUvc2NzaS9mYy9mY19mY3AuaApAQCAtNzUsNyArNzUsNyBAQAogI2RlZmluZQlGQ1BfUFRBX1NJTVBMRQkgICAgMAkvKiBzaW1wbGUgdGFzayBhdHRyaWJ1dGUgKi8KICNkZWZpbmUJRkNQX1BUQV9IRUFEUQkgICAgMQkvKiBoZWFkIG9mIHF1ZXVlIHRhc2sgYXR0cmlidXRlICovCiAjZGVmaW5lCUZDUF9QVEFfT1JERVJFRCAgICAgMgkvKiBvcmRlcmVkIHRhc2sgYXR0cmlidXRlICovCi0jZGVmaW5lCUZDUF9QVEFfQUNBCSAgICA0CS8qIGF1dG8uIGNvbnRpZ2VudCBhbGxlZ2lhbmNlICovCisjZGVmaW5lCUZDUF9QVEFfQUNBCSAgICA0CS8qIGF1dG8uIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSAqLwogI2RlZmluZQlGQ1BfUFRBX01BU0sJICAgIDcJLyogbWFzayBmb3IgdGFzayBhdHRyaWJ1dGUgZmllbGQgKi8KICNkZWZpbmUJRkNQX1BSSV9TSElGVAkgICAgMwkvKiBwcmlvcml0eSBmaWVsZCBzdGFydHMgaW4gYml0IDMgKi8KICNkZWZpbmUJRkNQX1BSSV9SRVNWRF9NQVNLICAweDgwCS8qIHJlc2VydmVkIGJpdHMgaW4gcHJpb3JpdHkgZmllbGQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKaW5kZXggYzNlMWNiYy4uZGRiMDQ1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKKysrIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKQEAgLTI5Miw3ICsyOTIsNyBAQAogCUlTQ1NJX1BBUkFNX1BFUlNJU1RFTlRfUE9SVCwKIAlJU0NTSV9QQVJBTV9TRVNTX1JFQ09WRVJZX1RNTywKIAotCS8qIHBhc2VkIGluIHRocm91Z2ggYmluZCBjb25uIHVzaW5nIHRyYW5zcG9ydF9mZCAqLworCS8qIHBhc3NlZCBpbiB0aHJvdWdoIGJpbmQgY29ubiB1c2luZyB0cmFuc3BvcnRfZmQgKi8KIAlJU0NTSV9QQVJBTV9DT05OX1BPUlQsCiAJSVNDU0lfUEFSQU1fQ09OTl9BRERSRVNTLAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliZmMuaCBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCmluZGV4IDI0MTkzYzEuLmEzY2JkYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJmYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCkBAIC0yNjAsNyArMjYwLDcgQEAKIC8qKgogICogc3RydWN0IGZjX3NlcV9lbHNfZGF0YSAtIEVMUyBkYXRhIHVzZWQgZm9yIHBhc3NpbmcgRUxTIHNwZWNpZmljIHJlc3BvbnNlcwogICogQHJlYXNvbjogVGhlIHJlYXNvbiBmb3IgcmVqZWN0aW9uCi0gKiBAZXhwbGFuOiBUaGUgZXhwbGFpbmF0aW9uIG9mIHRoZSByZWplY3Rpb24KKyAqIEBleHBsYW46IFRoZSBleHBsYW5hdGlvbiBvZiB0aGUgcmVqZWN0aW9uCiAgKgogICogTWFpbmx5IHVzZWQgYnkgdGhlIGV4Y2hhbmdlIG1hbmFnZXIgbGF5ZXIuCiAgKi8KQEAgLTUyNSw3ICs1MjUsNyBAQAogCQkJc3RydWN0IGZjX2ZyYW1lICopOwogCiAJLyoKLQkgKiBTZW5kIGFuIEVMUyByZXNwb25zZSB1c2luZyBpbmZvbWF0aW9uIGZyb20gdGhlIHJlY2VpdmVkIGZyYW1lLgorCSAqIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlY2VpdmVkIGZyYW1lLgogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwpAQCAtNjYzLDcgKzY2Myw3IEBACiAJaW50ICgqcnBvcnRfbG9nb2ZmKShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKIAogCS8qCi0JICogUmVjaWV2ZSBhIHJlcXVlc3QgZnJvbSBhIHJlbW90ZSBwb3J0LgorCSAqIFJlY2VpdmUgYSByZXF1ZXN0IGZyb20gYSByZW1vdGUgcG9ydC4KIAkgKgogCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KQEAgLTcwNCw3ICs3MDQsNyBAQAogCQkJCQkgdm9pZCAqKSk7CiAKIAkvKgotCSAqIENsZWFudXAgdGhlIEZDUCBsYXllciwgdXNlZCBkdXJyaW5nIGxpbmsgZG93biBhbmQgcmVzZXQKKwkgKiBDbGVhbnVwIHRoZSBGQ1AgbGF5ZXIsIHVzZWQgZHVyaW5nIGxpbmsgZG93biBhbmQgcmVzZXQKIAkgKgogCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaAppbmRleCBlNmI5ZmQyLi5hYzBjYzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oCkBAIC01Miw3ICs1Miw3IEBACiAJaXNjc2lfc2VnbWVudF9kb25lX2ZuX3QJKmRvbmU7CiB9OwogCi0vKiBTb2NrZXQgY29ubmVjdGlvbiByZWNpZXZlIGhlbHBlciAqLworLyogU29ja2V0IGNvbm5lY3Rpb24gcmVjZWl2ZSBoZWxwZXIgKi8KIHN0cnVjdCBpc2NzaV90Y3BfcmVjdiB7CiAJc3RydWN0IGlzY3NpX2hkcgkqaGRyOwogCXN0cnVjdCBpc2NzaV9zZWdtZW50CXNlZ21lbnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oIGIvaW5jbHVkZS9zY3NpL29zZF9pbml0aWF0b3IuaAppbmRleCA1M2E5ZTg4Li4wYTUwNzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oCisrKyBiL2luY2x1ZGUvc2NzaS9vc2RfaW5pdGlhdG9yLmgKQEAgLTI2NSw3ICsyNjUsNyBAQAogICogQG9zaSAgICAgICAgICAgLSBSZWNpZXZzIGEgbW9yZSBkZXRhaWxlZCBlcnJvciByZXBvcnQgaW5mb3JtYXRpb24gKG9wdGlvbmFsKS4KICAqIEBzaWxlbnQgICAgICAgIC0gRG8gbm90IHByaW50IHRvIGRtc2cgKEV2ZW4gaWYgZW5hYmxlZCkKICAqIEBiYWRfb2JqX2xpc3QgIC0gU29tZSBjb21tYW5kcyBhY3Qgb24gbXVsdGlwbGUgb2JqZWN0cy4gRmFpbGVkIG9iamVjdHMgd2lsbAotICogICAgICAgICAgICAgICAgICBiZSByZWNpZXZlZCBoZXJlIChvcHRpb25hbCkKKyAqICAgICAgICAgICAgICAgICAgYmUgcmVjZWl2ZWQgaGVyZSAob3B0aW9uYWwpCiAgKiBAbWF4X29iaiAgICAgICAtIFNpemUgb2YgQGJhZF9vYmpfbGlzdC4KICAqIEBiYWRfYXR0cl9saXN0IC0gTGlzdCBvZiBmYWlsaW5nIGF0dHJpYnV0ZXMgKG9wdGlvbmFsKQogICogQG1heF9hdHRyICAgICAgLSBTaXplIG9mIEBiYWRfYXR0cl9saXN0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IGU3ZTM4NTguLmYxZjI2NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIGVudW0gewogCVNDU0lfUURFUFRIX0RFRkFVTFQsCS8qIGRlZmF1bHQgcmVxdWVzdGVkIGNoYW5nZSwgZS5nLiBmcm9tIHN5c2ZzICovCiAJU0NTSV9RREVQVEhfUUZVTEwsCS8qIHNjc2ktbWwgcmVxdWVzdGVkIGR1ZSB0byBxdWV1ZSBmdWxsICovCi0JU0NTSV9RREVQVEhfUkFNUF9VUCwJLyogc2NzaS1tbCByZXF1ZXN0ZWQgZHVlIHRvIHRocmVzaGhvbGQgZXZlbnQgKi8KKwlTQ1NJX1FERVBUSF9SQU1QX1VQLAkvKiBzY3NpLW1sIHJlcXVlc3RlZCBkdWUgdG8gdGhyZXNob2xkIGV2ZW50ICovCiB9OwogCiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKaW5kZXggNTk4MTZmZS4uMmE2NTE2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKQEAgLTE5Miw5ICsxOTIsOSBAQAogICoKICAqIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBmb3IgZWFjaCBGQyBwb3J0IGlzIGEgdmlydHVhbCBGQyBwb3J0LiBWaXJ0dWFsCiAgKiBwb3J0cyBzaGFyZSB0aGUgcGh5c2ljYWwgbGluayB3aXRoIHRoZSBQaHlzaWNhbCBwb3J0LiBFYWNoIHZpcnR1YWwKLSAqIHBvcnRzIGhhcyBhIHVuaXF1ZSBwcmVzZW5zZSBvbiB0aGUgU0FOLCBhbmQgbWF5IGJlIGluc3RhbnRpYXRlZCB2aWEKKyAqIHBvcnRzIGhhcyBhIHVuaXF1ZSBwcmVzZW5jZSBvbiB0aGUgU0FOLCBhbmQgbWF5IGJlIGluc3RhbnRpYXRlZCB2aWEKICAqIE5QSVYsIFZpcnR1YWwgRmFicmljcywgb3IgdmlhIGFkZGl0aW9uYWwgQUxQQXMuIEFzIHRoZSB2cG9ydCBpcyBhCi0gKiB1bmlxdWUgcHJlc2Vuc2UsIGVhY2ggdnBvcnQgaGFzIGl0J3Mgb3duIHZpZXcgb2YgdGhlIGZhYnJpYywKKyAqIHVuaXF1ZSBwcmVzZW5jZSwgZWFjaCB2cG9ydCBoYXMgaXQncyBvd24gdmlldyBvZiB0aGUgZmFicmljLAogICogYXV0aGVudGljYXRpb24gcHJpdmlsZWdlLCBhbmQgcHJpb3JpdGllcy4KICAqCiAgKiBBIHZpcnR1YWwgcG9ydCBtYXkgc3VwcG9ydCAxIG9yIG1vcmUgRkM0IHJvbGVzLiBUeXBpY2FsbHkgaXQgaXMgYQpAQCAtMzcwLDcgKzM3MCw3IEBACiAvKgogICogRkMgU0NTSSBUYXJnZXQgQXR0cmlidXRlcwogICoKLSAqIFRoZSBTQ1NJIFRhcmdldCBpcyBjb25zaWRlcmVkIGFuIGV4dGVudGlvbiBvZiBhIHJlbW90ZSBwb3J0IChhcworICogVGhlIFNDU0kgVGFyZ2V0IGlzIGNvbnNpZGVyZWQgYW4gZXh0ZW5zaW9uIG9mIGEgcmVtb3RlIHBvcnQgKGFzCiAgKiBhIHJlbW90ZSBwb3J0IGNhbiBiZSBtb3JlIHRoYW4gYSBTQ1NJIFRhcmdldCkuIFdpdGhpbiB0aGUgc2NzaQogICogc3Vic3lzdGVtLCB3ZSBsZWF2ZSB0aGUgVGFyZ2V0IGFzIGEgc2VwYXJhdGUgZW50aXR5LiBEb2luZyBzbwogICogcHJvdmlkZXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHByaW9yIEZDIHRyYW5zcG9ydCBhcGkncywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oIGIvaW5jbHVkZS9zb3VuZC9hYzk3X2NvZGVjLmgKaW5kZXggZjFkY2VmZTQuLjAyY2JiNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCisrKyBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCkBAIC0zODUsNyArMzg1LDcgQEAKICNkZWZpbmUgQUM5N19TQ0FQX0RFVEVDVF9CWV9WRU5ET1IgKDE8PDgpIC8qIHVzZSB2ZW5kb3IgcmVnaXN0ZXJzIGZvciByZWFkIHRlc3RzICovCiAjZGVmaW5lIEFDOTdfU0NBUF9OT19TUERJRgkoMTw8OSkJLyogZG9uJ3QgYnVpbGQgU1BESUYgY29udHJvbHMgKi8KICNkZWZpbmUgQUM5N19TQ0FQX0VBUERfTEVECSgxPDwxMCkJLyogRUFQRCBhcyBtdXRlIExFRCAqLwotI2RlZmluZSBBQzk3X1NDQVBfUE9XRVJfU0FWRQkoMTw8MTEpCS8qIGNhcGFibGUgZm9yIGFnZ3Jlc2l2ZSBwb3dlci1zYXZpbmcgKi8KKyNkZWZpbmUgQUM5N19TQ0FQX1BPV0VSX1NBVkUJKDE8PDExKQkvKiBjYXBhYmxlIGZvciBhZ2dyZXNzaXZlIHBvd2VyLXNhdmluZyAqLwogCiAvKiBhYzk3LT5mbGFncyAqLwogI2RlZmluZSBBQzk3X0hBU19QQ19CRUVQCSgxPDwwKQkvKiBmb3JjZSBQQyBTcGVha2VyIHVzYWdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaCBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCmluZGV4IGU2N2RiMjguLjQwNGFjYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oCisrKyBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCkBAIC0xOTEsNyArMTkxLDcgQEAKICAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqCiAgKiBBbGwgc2xhdmVzIG11c3QgYmUgdGhlIHNhbWUgdHlwZSAocmV0dXJuaW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uCi0gKiB2aWEgaW5mbyBjYWxsYmFjaykuICBUaGUgZnVjbnRpb24gZG9lc24ndCBjaGVjayBpdCwgc28gaXQncyB5b3VyCisgKiB2aWEgaW5mbyBjYWxsYmFjaykuICBUaGUgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpdCwgc28gaXQncyB5b3VyCiAgKiByZXNwb25zaWJpbGl0eS4KICAqCiAgKiBBbHNvLCBzb21lIGFkZGl0aW9uYWwgbGltaXRhdGlvbnM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaAppbmRleCA0OWIwM2M5Li44MDA4YzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oCisrKyBiL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQAogfTsKIAogc3RydWN0IGRzcF9zcG9zX2luc3RhbmNlIHsKLQlzdHJ1Y3QgZHNwX3N5bWJvbF9kZXNjIHN5bWJvbF90YWJsZTsgLyogY3VycmVudGx5IGF2YWlsYmxlIGxvYWRlZCBzeW1ib2xzIGluIFNQICovCisJc3RydWN0IGRzcF9zeW1ib2xfZGVzYyBzeW1ib2xfdGFibGU7IC8qIGN1cnJlbnRseSBhdmFpbGFibGUgbG9hZGVkIHN5bWJvbHMgaW4gU1AgKi8KIAogCWludCBubW9kdWxlczsKIAlzdHJ1Y3QgZHNwX21vZHVsZV9kZXNjICogbW9kdWxlczsgLyogbW9kdWxlcyBsb2FkZWQgaW50byBTUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9oZHNwbS5oIGIvaW5jbHVkZS9zb3VuZC9oZHNwbS5oCmluZGV4IDE3NzRmZjUuLjFmNTllYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvaGRzcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL2hkc3BtLmgKQEAgLTE5Myw3ICsxOTMsNyBAQAogICogMzI3NjggQnl0ZXMKICAqLwogCi0vKiBvcmdhbmlzYXRpb24gaXMgNjQgY2hhbm5lbGZhZGVyIGluIGEgY29udGlub3VzIG1lbW9yeSBibG9jayAqLworLyogb3JnYW5pc2F0aW9uIGlzIDY0IGNoYW5uZWxmYWRlciBpbiBhIGNvbnRpbnVvdXMgbWVtb3J5IGJsb2NrICovCiAvKiBlcXVpdmFsZW50IHRvIGhhcmR3YXJlIGRlZmluaXRpb24sIG1heWJlIGZvciBmdXR1cmUgZmVhdHVyZSBvZiBtbWFwIG9mCiAgKiB0aGVtCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaCBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAppbmRleCBkZGMyYjNkLi5mNzJjMTAzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtMjMsNyArMjMsNyBAQAogLyoKICAqIFNvQyBkeW5hbWljIGF1ZGlvIHBvd2VyIG1hbmFnZW1lbnQKICAqCi0gKiBXZSBjYW4gaGF2ZSB1cHRvIDQgcG93ZXIgZG9tYWlucworICogV2UgY2FuIGhhdmUgdXAgdG8gNCBwb3dlciBkb21haW5zCiAgKiAJMS4gQ29kZWMgZG9tYWluIC0gVlJFRiwgVk1JRAogICogICAgIFVzdWFsbHkgY29udHJvbGxlZCBhdCBjb2RlYyBwcm9iZS9yZW1vdmUsIGFsdGhvdWdoIGNhbiBiZSBzZXQKICAqICAgICBhdCBzdHJlYW0gdGltZSBpZiBwb3dlciBpcyBub3QgbmVlZGVkIGZvciBzaWRldG9uZSwgZXRjLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCmluZGV4IGMxNWVkNTAuLjFkM2I1YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAqIE5vdGUgdGhhdCBib3RoIGluY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaDpNQVhfQ09NTUFORF9TSVpFIGFuZAogICogaW5jbHVkZS9saW51eC9ibGtkZXYuaDpCTE9DS19NQVhfQ0RCIGFzIG9mIHYyLjYuMzYtcmM0IHN0aWxsIHVzZQogICogMTYtYnl0ZSBDREJzIGJ5IGRlZmF1bHQgYW5kIHJlcXVpcmUgYW4gZXh0cmEgYWxsb2NhdGlvbiBmb3IKLSAqIDMyLWJ5dGUgQ0RCcyB0byBiZWNhc3VlIG9mIGxlZ2FjeSBpc3N1ZXMuCisgKiAzMi1ieXRlIENEQnMgdG8gYmVjYXVzZSBvZiBsZWdhY3kgaXNzdWVzLgogICoKICAqIFdpdGhpbiBUQ00gQ29yZSB0aGVyZSBhcmUgbm8gc3VjaCBsZWdhY3kgbGltaXRpYXRpb25zLCBzbyB3ZSBnbyBhaGVhZAogICogdXNlIDMyLWJ5dGUgQ0RCcyBieSBkZWZhdWx0IGFuZCB1c2UgaW5jbHVkZS9zY3NpL3Njc2kuaDpzY3NpX2NvbW1hbmRfc2l6ZSgpCkBAIC0zMDIsNyArMzAyLDcgQEAKIAogCiAvKgotICogVXNlZCBieSBUQ00gQ29yZSBpbnRlcm5hbGx5IHRvIHNpZ25hbCBpZiA+PSBTUEMtMyBwZXJpc3RlbnQgcmVzZXJ2YXRpb25zCisgKiBVc2VkIGJ5IFRDTSBDb3JlIGludGVybmFsbHkgdG8gc2lnbmFsIGlmID49IFNQQy0zIHBlcnNpc3RlbnQgcmVzZXJ2YXRpb25zCiAgKiBlbXVsYXRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgcnVubmluZyBpbiB3aXRoIFRDTS9wU0NTSSBwYXNzdGhyb3VnaAogICogbW9kZQogICovCkBAIC05MzQsNyArOTM0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFjbF9ub2RlX2xpc3Q7CiAJc3RydWN0IHNlX2x1bgkJKnRwZ19sdW5fbGlzdDsKIAlzdHJ1Y3Qgc2VfbHVuCQl0cGdfdmlydF9sdW4wOwotCS8qIExpc3Qgb2YgVENNIHNlc3Npb25zIGFzc29pY2F0ZWQgd3RoIHRoaXMgVFBHICovCisJLyogTGlzdCBvZiBUQ00gc2Vzc2lvbnMgYXNzb2NpYXRlZCB3dGggdGhpcyBUUEcgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXRwZ19zZXNzX2xpc3Q7CiAJLyogUG9pbnRlciB0byAkRkFCUklDX01PRCBkZXBlbmRlbnQgY29kZSAqLwogCXN0cnVjdCB0YXJnZXRfY29yZV9mYWJyaWNfb3BzICpzZV90cGdfdGZvOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oCmluZGV4IDVlYjhiMWEuLmRjNzhmNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19vcHMuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAkvKgogCSAqIE9wdGlvbmFsIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIFRDTSB0byBwZXJmb3JtIGNvbW1hbmQgbWFwCiAJICogZnJvbSBUQ00gcHJvY2Vzc2luZyB0aHJlYWQgY29udGV4dCwgZm9yIHRob3NlIHN0cnVjdCBzZV9jbWQKLQkgKiBpbml0YWxseSBhbGxvY2F0ZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisJICogaW5pdGlhbGx5IGFsbG9jYXRlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KIAkgKi8KIAlpbnQgKCpuZXdfY21kX21hcCkoc3RydWN0IHNlX2NtZCAqKTsKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKaW5kZXggNzhmMThhZC4uYmYzNjY1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCkBAIC00MDEsOSArNDAxLDkgQEAKIAogREVDTEFSRV9FVkVOVF9DTEFTUyhibG9ja191bnBsdWcsCiAKLQlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBkZXB0aCwgYm9vbCBleHBsaWNpdCksCiAKLQlUUF9BUkdTKHEpLAorCVRQX0FSR1MocSwgZGVwdGgsIGV4cGxpY2l0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoIGludCwJCW5yX3JxCQkJKQpAQCAtNDExLDcgKzQxMSw3IEBACiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5ucl9ycQk9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOworCQlfX2VudHJ5LT5ucl9ycSA9IGRlcHRoOwogCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgY3VycmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7CiAJKSwKIApAQCAtNDE5LDMxICs0MTksMTkgQEAKICk7CiAKIC8qKgotICogYmxvY2tfdW5wbHVnX3RpbWVyIC0gdGltZWQgcmVsZWFzZSBvZiBvcGVyYXRpb25zIHJlcXVlc3RzIGluIHF1ZXVlIHRvIGRldmljZSBkcml2ZXIKKyAqIGJsb2NrX3VucGx1ZyAtIHJlbGVhc2Ugb2Ygb3BlcmF0aW9ucyByZXF1ZXN0cyBpbiByZXF1ZXN0IHF1ZXVlCiAgKiBAcTogcmVxdWVzdCBxdWV1ZSB0byB1bnBsdWcKLSAqCi0gKiBVbnBsdWcgdGhlIHJlcXVlc3QgcXVldWUgQHEgYmVjYXVzZSBhIHRpbWVyIGV4cGlyZWQgYW5kIGFsbG93IGJsb2NrCi0gKiBvcGVyYXRpb24gcmVxdWVzdHMgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlIGRyaXZlci4KLSAqLwotREVGSU5FX0VWRU5UKGJsb2NrX3VucGx1ZywgYmxvY2tfdW5wbHVnX3RpbWVyLAotCi0JVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAotCi0JVFBfQVJHUyhxKQotKTsKLQotLyoqCi0gKiBibG9ja191bnBsdWdfaW8gLSByZWxlYXNlIG9mIG9wZXJhdGlvbnMgcmVxdWVzdHMgaW4gcmVxdWVzdCBxdWV1ZQotICogQHE6IHJlcXVlc3QgcXVldWUgdG8gdW5wbHVnCisgKiBAZGVwdGg6IG51bWJlciBvZiByZXF1ZXN0cyBqdXN0IGFkZGVkIHRvIHRoZSBxdWV1ZQorICogQGV4cGxpY2l0OiB3aGV0aGVyIHRoaXMgd2FzIGFuIGV4cGxpY2l0IHVucGx1Zywgb3Igb25lIGZyb20gc2NoZWR1bGUoKQogICoKICAqIFVucGx1ZyByZXF1ZXN0IHF1ZXVlIEBxIGJlY2F1c2UgZGV2aWNlIGRyaXZlciBpcyBzY2hlZHVsZWQgdG8gd29yawogICogb24gZWxlbWVudHMgaW4gdGhlIHJlcXVlc3QgcXVldWUuCiAgKi8KLURFRklORV9FVkVOVChibG9ja191bnBsdWcsIGJsb2NrX3VucGx1Z19pbywKK0RFRklORV9FVkVOVChibG9ja191bnBsdWcsIGJsb2NrX3VucGx1ZywKIAotCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IGRlcHRoLCBib29sIGV4cGxpY2l0KSwKIAotCVRQX0FSR1MocSkKKwlUUF9BUkdTKHEsIGRlcHRoLCBleHBsaWNpdCkKICk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZ2ZwZmxhZ3MuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2dmcGZsYWdzLmgKaW5kZXggZTM2MTVjMC4uOWZlM2EzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZ2ZwZmxhZ3MuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9nZnBmbGFncy5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKi8KICNkZWZpbmUgc2hvd19nZnBfZmxhZ3MoZmxhZ3MpCQkJCQkJXAogCShmbGFncykgPyBfX3ByaW50X2ZsYWdzKGZsYWdzLCAifCIsCQkJCVwKKwl7KHVuc2lnbmVkIGxvbmcpR0ZQX1RSQU5TSFVHRSwJCSJHRlBfVFJBTlNIVUdFIn0sCVwKIAl7KHVuc2lnbmVkIGxvbmcpR0ZQX0hJR0hVU0VSX01PVkFCTEUsCSJHRlBfSElHSFVTRVJfTU9WQUJMRSJ9LCBcCiAJeyh1bnNpZ25lZCBsb25nKUdGUF9ISUdIVVNFUiwJCSJHRlBfSElHSFVTRVIifSwJXAogCXsodW5zaWduZWQgbG9uZylHRlBfVVNFUiwJCSJHRlBfVVNFUiJ9LAkJXApAQCAtMzIsNiArMzMsOSBAQAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9IQVJEV0FMTCwJCSJHRlBfSEFSRFdBTEwifSwJXAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9USElTTk9ERSwJCSJHRlBfVEhJU05PREUifSwJXAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9SRUNMQUlNQUJMRSwJIkdGUF9SRUNMQUlNQUJMRSJ9LAlcCi0Jeyh1bnNpZ25lZCBsb25nKV9fR0ZQX01PVkFCTEUsCQkiR0ZQX01PVkFCTEUifQkJXAorCXsodW5zaWduZWQgbG9uZylfX0dGUF9NT1ZBQkxFLAkJIkdGUF9NT1ZBQkxFIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX05PVFJBQ0ssCQkiR0ZQX05PVFJBQ0sifSwJCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9fS1NXQVBELAkiR0ZQX05PX0tTV0FQRCJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX09USEVSX05PREUsCSJHRlBfT1RIRVJfTk9ERSJ9CVwKIAkpIDogIkdGUF9OT1dBSVQiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8va3lyby5oIGIvaW5jbHVkZS92aWRlby9reXJvLmgKaW5kZXggZGJhN2RlMi4uYzU2Mzk2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9reXJvLmgKKysrIGIvaW5jbHVkZS92aWRlby9reXJvLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAl1MzIgUElYQ0xLOwkvKiBQaXhlbCBDbG9jayAgICAgICAqLwogCXUzMiBIQ0xLOwkvKiBIb3IgQ2xvY2sgICAgICAgICAqLwogCi0JLyogVXNlZnVsbCB0byBob2xkIGRlcHRoIGhlcmUgZm9yIExpbnV4ICovCisJLyogVXNlZnVsIHRvIGhvbGQgZGVwdGggaGVyZSBmb3IgTGludXggKi8KIAl1OCBQSVhERVBUSDsKIAogI2lmZGVmIENPTkZJR19NVFJSCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmggYi9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmgKaW5kZXggMDhiNjYzNy4uYmM1MDEzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9uZW9tYWdpYy5oCisrKyBiL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAJdW5zaWduZWQgY2hhciBDUlRDWzI1XTsJCS8qIENydGMgQ29udHJvbGxlciAqLwogCXVuc2lnbmVkIGNoYXIgU2VxdWVuY2VyWzVdOwkvKiBWaWRlbyBTZXF1ZW5jZXIgKi8KIAl1bnNpZ25lZCBjaGFyIEdyYXBoaWNzWzldOwkvKiBWaWRlbyBHcmFwaGljcyAqLwotCXVuc2lnbmVkIGNoYXIgQXR0cmlidXRlWzIxXTsJLyogVmlkZW8gQXRyaWJ1dGUgKi8KKwl1bnNpZ25lZCBjaGFyIEF0dHJpYnV0ZVsyMV07CS8qIFZpZGVvIEF0dHJpYnV0ZSAqLwogCiAJdW5zaWduZWQgY2hhciBHZW5lcmFsTG9ja1JlZzsKIAl1bnNpZ25lZCBjaGFyIEV4dENSVERpc3BBZGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9uZXdwb3J0LmggYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAppbmRleCAwMDFiOTM1Li4zZDdjNGI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAorKysgYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCiAgKiAKLSAqIFVsZiBDYXJsc3NvbiAtIENvbXBhYmlsaXR5IHdpdGggdGhlIElSSVggc3RydWN0dXJlcyBhZGRlZAorICogVWxmIENhcmxzc29uIC0gQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSBJUklYIHN0cnVjdHVyZXMgYWRkZWQKICAqLwogCiAjaWZuZGVmIF9TR0lfTkVXUE9SVF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3Npc2ZiLmggYi9pbmNsdWRlL3ZpZGVvL3Npc2ZiLmgKaW5kZXggZmRkNzRmMS4uNmRjNWRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9zaXNmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vc2lzZmIuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAJX191MzIgIHNpc2ZiX3Jlc3VsdFs0XTsKIH07CiAKLS8qIEFkZHRpb25hbCBJT0NUTHMgZm9yIGNvbW11bmljYXRpb24gc2lzZmIgPD4gWCBkcml2ZXIgICAgICAgICAgICAgICAgKi8KKy8qIEFkZGl0aW9uYWwgSU9DVExzIGZvciBjb21tdW5pY2F0aW9uIHNpc2ZiIDw+IFggZHJpdmVyICAgICAgICAgICAgICAgICovCiAvKiBJZiBjaGFuZ2luZyB0aGlzLCB2Z2F0eXBlcy5oIG11c3QgYWxzbyBiZSBjaGFuZ2VkIChmb3IgWCBkcml2ZXIpICAgICovCiAKIC8qIGlvY3RsIGZvciBpZGVudGlmeWluZyBhbmQgZ2l2aW5nIHNvbWUgaW5mbyAoZXNwLiBtZW1vcnkgaGVhcCBzdGFydCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vc3N0ZmIuaCBiL2luY2x1ZGUvdmlkZW8vc3N0ZmIuaAppbmRleCBiNTJmMDczLi5jNDQ5ZWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3NzdGZiLmgKKysrIGIvaW5jbHVkZS92aWRlby9zc3RmYi5oCkBAIC0xNTYsNyArMTU2LDcgQEAKICNkZWZpbmUgREFDX1JFQUQJCUZCSUlOSVQyCS8qIGluIHJlbWFwIG1vZGUgKi8KICNkZWZpbmUgRkJJSU5JVDMJCTB4MDIxYwkJLyogZmJpIGNvbnRyb2xzICovCiAjICBkZWZpbmUgRElTQUJMRV9URVhUVVJFCSAgQklUKDYpCi0jICBkZWZpbmUgWV9TV0FQX09SSUdJTl9TSElGVAkgIDIyCQkvKiBZIHN3YXAgc3Vic3RyYWN0aW9uIHZhbHVlICovCisjICBkZWZpbmUgWV9TV0FQX09SSUdJTl9TSElGVAkgIDIyCQkvKiBZIHN3YXAgc3VidHJhY3Rpb24gdmFsdWUgKi8KICNkZWZpbmUgSFNZTkMJCQkweDAyMjAKICNkZWZpbmUgVlNZTkMJCQkweDAyMjQKICNkZWZpbmUgREFDX0RBVEEJCTB4MDIyYwpAQCAtMjEyLDkgKzIxMiw5IEBACiAjICBkZWZpbmUgREFDUkVHX0NSMF8yNEJQUAkgIDB4NTAJCS8qIG1vZGUgNSAqLwogI2RlZmluZQlEQUNSRUdfQ1IxX0kJCTB4MDUKICNkZWZpbmUgREFDUkVHX0NDX0kJCTB4MDYKLSMgIGRlZmluZSBEQUNSRUdfQ0NfQ0xLQQkgIEJJVCg3KQkvKiBjbGsgQSBjb250cm9sZWQgYnkgcmVncyAqLworIyAgZGVmaW5lIERBQ1JFR19DQ19DTEtBCSAgQklUKDcpCS8qIGNsayBBIGNvbnRyb2xsZWQgYnkgcmVncyAqLwogIyAgZGVmaW5lIERBQ1JFR19DQ19DTEtBX0MJICAoMjw8NCkJLyogY2xrIEEgdXNlcyByZWcgQyAqLwotIyAgZGVmaW5lIERBQ1JFR19DQ19DTEtCCSAgQklUKDMpCS8qIGNsayBCIGNvbnRyb2xlZCBieSByZWdzICovCisjICBkZWZpbmUgREFDUkVHX0NDX0NMS0IJICBCSVQoMykJLyogY2xrIEIgY29udHJvbGxlZCBieSByZWdzICovCiAjICBkZWZpbmUgREFDUkVHX0NDX0NMS0JfRAkgIDMJCS8qIGNsa0IgdXNlcyByZWcgRCAqLwogI2RlZmluZSBEQUNSRUdfQUMwX0kJCTB4NDgJCS8qIGNsb2NrIEEgcmVnIEMgKi8KICNkZWZpbmUgREFDUkVHX0FDMV9JCQkweDQ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZWxmbm90ZS5oIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2VsZm5vdGUuaAppbmRleCA3YTgyNjJjLi4wMzYwYjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZWxmbm90ZS5oCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9lbGZub3RlLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAogLyoKICAqIFRoZSBvZmZzZXQgb2YgdGhlIEVMRiBwYWRkciBmaWVsZCBmcm9tIHRoZSBhY3V0YWwgcmVxdWlyZWQKLSAqIHBzdWVkby1waHlzaWNhbCBhZGRyZXNzIChudW1lcmljKS4KKyAqIHBzZXVkby1waHlzaWNhbCBhZGRyZXNzIChudW1lcmljKS4KICAqCiAgKiBUaGlzIGlzIHVzZWQgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBrZXJuZWxzCiAgKiB3aGljaCB3cm90ZSBfX1BBR0VfT0ZGU0VUIGludG8gdGhhdCBmaWVsZC4gVGhpcyBmaWVsZCBkZWZhdWx0cyB0byAwCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggNTYyNDBlNy4uN2E3MWUwYSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtOTI0LDE0ICs5MjQsNiBAQAogICAgICAgICAgIGVudmlyb25tZW50cyB3aGljaCBjYW4gdG9sZXJhdGUgYSAibm9uLXN0YW5kYXJkIiBrZXJuZWwuCiAgICAgICAgICAgT25seSB1c2UgdGhpcyBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogCi1jb25maWcgRU1CRURERUQKLQlib29sICJFbWJlZGRlZCBzeXN0ZW0iCi0Jc2VsZWN0IEVYUEVSVAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkIGlmIGNvbXBpbGluZyB0aGUga2VybmVsIGZvcgotCSAgYW4gZW1iZWRkZWQgc3lzdGVtIHNvIGNlcnRhaW4gZXhwZXJ0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQotCSAgZm9yIGNvbmZpZ3VyYXRpb24uCi0KIGNvbmZpZyBVSUQxNgogCWJvb2wgIkVuYWJsZSAxNi1iaXQgVUlEIHN5c3RlbSBjYWxscyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBBUk0gfHwgQkxBQ0tGSU4gfHwgQ1JJUyB8fCBGUlYgfHwgSDgzMDAgfHwgWDg2XzMyIHx8IE02OEsgfHwgKFMzOTAgJiYgITY0QklUKSB8fCBTVVBFUkggfHwgU1BBUkMzMiB8fCAoU1BBUkM2NCAmJiBDT01QQVQpIHx8IFVNTCB8fCAoWDg2XzY0ICYmIElBMzJfRU1VTEFUSU9OKQpAQCAtMTEwNCw2ICsxMDk2LDE0IEBACiAgICAgICAgICAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nCiAgICAgICAgICAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suCiAKK2NvbmZpZyBFTUJFRERFRAorCWJvb2wgIkVtYmVkZGVkIHN5c3RlbSIKKwlzZWxlY3QgRVhQRVJUCisJaGVscAorCSAgVGhpcyBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgaWYgY29tcGlsaW5nIHRoZSBrZXJuZWwgZm9yCisJICBhbiBlbWJlZGRlZCBzeXN0ZW0gc28gY2VydGFpbiBleHBlcnQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlCisJICBmb3IgY29uZmlndXJhdGlvbi4KKwogY29uZmlnIEhBVkVfUEVSRl9FVkVOVFMKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmMKaW5kZXggM2UwMTEyMS4uYzA4NTFhOCAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHMuYworKysgYi9pbml0L2RvX21vdW50cy5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJZ290byBkb25lOwogCiAJLyoKLQkgKiB0cnkgbm9uLWV4aXN0YW50LCBidXQgdmFsaWQgcGFydGl0aW9uLCB3aGljaCBtYXkgb25seSBleGlzdAorCSAqIHRyeSBub24tZXhpc3RlbnQsIGJ1dCB2YWxpZCBwYXJ0aXRpb24sIHdoaWNoIG1heSBvbmx5IGV4aXN0CiAJICogYWZ0ZXIgcmV2YWxpZGF0aW5nIHRoZSBkaXNrLCBsaWtlIHBhcnRpdGlvbmVkIG1kIGRldmljZXMKIAkgKi8KIAl3aGlsZSAocCA+IHMgJiYgaXNkaWdpdChwWy0xXSkpCmRpZmYgLS1naXQgYS9pcGMvbXNnLmMgYi9pcGMvbXNnLmMKaW5kZXggMGU3MzJlOS4uNzM4NWRlMiAxMDA2NDQKLS0tIGEvaXBjL21zZy5jCisrKyBiL2lwYy9tc2cuYwpAQCAtNzA0LDcgKzcwNCw3IEBACiAJbXNxLT5xX3N0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAogCWlmICghcGlwZWxpbmVkX3NlbmQobXNxLCBtc2cpKSB7Ci0JCS8qIG5vb25lIGlzIHdhaXRpbmcgZm9yIHRoaXMgbWVzc2FnZSwgZW5xdWV1ZSBpdCAqLworCQkvKiBubyBvbmUgaXMgd2FpdGluZyBmb3IgdGhpcyBtZXNzYWdlLCBlbnF1ZXVlIGl0ICovCiAJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bV9saXN0LCAmbXNxLT5xX21lc3NhZ2VzKTsKIAkJbXNxLT5xX2NieXRlcyArPSBtc2dzejsKIAkJbXNxLT5xX3FudW0rKzsKQEAgLTg0Miw3ICs4NDIsNyBAQAogCQkgKiBEaXNhYmxlIHByZWVtcHRpb24uICBXZSBkb24ndCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBxdWV1ZQogCQkgKiBhbmQgZ2V0dGluZyBhIHJlZmVyZW5jZSB3b3VsZCBkZWZlYXQgdGhlIGlkZWEgb2YgYSBsb2NrbGVzcwogCQkgKiBvcGVyYXRpb24sIHRodXMgdGhlIGNvZGUgcmVsaWVzIG9uIHJjdSB0byBndWFyYW50ZWUgdGhlCi0JCSAqIGV4aXN0YW5jZSBvZiBtc3E6CisJCSAqIGV4aXN0ZW5jZSBvZiBtc3E6CiAJCSAqIFByaW9yIHRvIGRlc3RydWN0aW9uLCBleHB1bmdlX2FsbCgtRUlSRE0pIGNoYW5nZXMgcl9tc2cuCiAJCSAqIFRodXMgaWYgcl9tc2cgaXMgLUVBR0FJTiwgdGhlbiB0aGUgcXVldWUgbm90IHlldCBkZXN0cm95ZWQuCiAJCSAqIHJjdV9yZWFkX2xvY2soKSBwcmV2ZW50cyBwcmVlbXB0aW9uIGJldHdlZW4gcmVhZGluZyByX21zZwpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IGFlMDQwYTAuLjM0MTkzZWQgMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTEzNjIsNyArMTM2Miw3IEBACiAJICogc2VtaWQgaWRlbnRpZmllcnMgYXJlIG5vdCB1bmlxdWUgLSBmaW5kX2FsbG9jX3VuZG8gbWF5IGhhdmUKIAkgKiBhbGxvY2F0ZWQgYW4gdW5kbyBzdHJ1Y3R1cmUsIGl0IHdhcyBpbnZhbGlkYXRlZCBieSBhbiBSTUlECiAJICogYW5kIG5vdyBhIG5ldyBhcnJheSB3aXRoIHJlY2VpdmVkIHRoZSBzYW1lIGlkLiBDaGVjayBhbmQgZmFpbC4KLQkgKiBUaGlzIGNhc2UgY2FuIGJlIGRldGVjdGVkIGNoZWNraW5nIHVuLT5zZW1pZC4gVGhlIGV4aXN0YW5jZSBvZgorCSAqIFRoaXMgY2FzZSBjYW4gYmUgZGV0ZWN0ZWQgY2hlY2tpbmcgdW4tPnNlbWlkLiBUaGUgZXhpc3RlbmNlIG9mCiAJICogInVuIiBpdHNlbGYgaXMgZ3VhcmFudGVlZCBieSByY3UuCiAJICovCiAJZXJyb3IgPSAtRUlEUk07CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggODY0NDQ1Mi4uNzI5YWNiNyAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAKIAkvKgogCSAqIFdlIG5lZWQgbG9vayBubyBmdXJ0aGVyIHRoYW4gdGhlIG1heGltdW0gYWRkcmVzcyBhIGZyYWdtZW50CiAJICogY291bGQgcG9zc2libHkgaGF2ZSBsYW5kZWQgYXQuIEFsc28gY2FzdCB0aGluZ3MgdG8gbG9mZl90IHRvCi0JICogcHJldmVudCBvdmVyZmxvd3MgYW5kIG1ha2UgY29tcGFyaXNpb25zIHZzLiBlcXVhbC13aWR0aCB0eXBlcy4KKwkgKiBwcmV2ZW50IG92ZXJmbG93cyBhbmQgbWFrZSBjb21wYXJpc29ucyB2cy4gZXF1YWwtd2lkdGggdHlwZXMuCiAJICovCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJd2hpbGUgKHZtYSAmJiAobG9mZl90KSh2bWEtPnZtX2VuZCAtIGFkZHIpIDw9IHNpemUpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdF90cmVlLmMgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCmluZGV4IDM3YjJiZWEuLmU5OWRkYTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdF90cmVlLmMKKysrIGIva2VybmVsL2F1ZGl0X3RyZWUuYwpAQCAtNjA3LDcgKzYwNyw3IEBACiAJCXNwaW5fbG9jaygmaGFzaF9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmdHJlZS0+Y2h1bmtzLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gZmluZF9jaHVuayhub2RlKTsKLQkJCS8qIHRoaXMgY291bGQgYmUgTlVMTCBpZiB0aGUgd2F0Y2ggaXMgZGllaW5nIGVsc2Ugd2hlcmUuLi4gKi8KKwkJCS8qIHRoaXMgY291bGQgYmUgTlVMTCBpZiB0aGUgd2F0Y2ggaXMgZHlpbmcgZWxzZSB3aGVyZS4uLiAqLwogCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGNodW5rLT5tYXJrLmkuaW5vZGU7CiAJCQlub2RlLT5pbmRleCB8PSAxVTw8MzE7CiAJCQlpZiAoaXRlcmF0ZV9tb3VudHMoY29tcGFyZV9yb290LCBpbm9kZSwgcm9vdF9tbnQpKQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggZjQ5YTAzMS4uYjMzNTEzYSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogLyoKICAqIHRvX3NlbmQgYW5kIGxlbl9zZW50IGFjY291bnRpbmcgYXJlIHZlcnkgbG9vc2UgZXN0aW1hdGVzLiAgV2UgYXJlbid0CiAgKiByZWFsbHkgd29ycmllZCBhYm91dCBhIGhhcmQgY2FwIHRvIE1BWF9FWEVDVkVfQVVESVRfTEVOIHNvIG11Y2ggYXMgYmVpbmcKLSAqIHdpdGhpbiBhYm91dCA1MDAgYnl0ZXMgKG5leHQgcGFnZSBib3VuZHJ5KQorICogd2l0aGluIGFib3V0IDUwMCBieXRlcyAobmV4dCBwYWdlIGJvdW5kYXJ5KQogICoKICAqIHdoeSBzbnByaW50Zj8gIGFuIGludCBpcyB1cCB0byAxMiBkaWdpdHMgbG9uZy4gIGlmIHdlIGp1c3QgYXNzdW1lZCB3aGVuCiAgKiBsb2dnaW5nIHRoYXQgYVslZF09IHdhcyBnb2luZyB0byBiZSAxNiBjaGFyYWN0ZXJzIGxvbmcgd2Ugd291bGQgYmUgd2FzdGluZwpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggYmYwYzczNC4uMzJhODBlMCAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0zOTksMyArMzk5LDE1IEBACiAJcmV0dXJuIG5zX2NhcGFibGUodGFza19jcmVkX3h4eCh0LCB1c2VyKS0+dXNlcl9ucywgY2FwKTsKIH0KIEVYUE9SVF9TWU1CT0wodGFza19uc19jYXBhYmxlKTsKKworLyoqCisgKiBuc293bl9jYXBhYmxlIC0gQ2hlY2sgc3VwZXJpb3IgY2FwYWJpbGl0eSB0byBvbmUncyBvd24gdXNlcl9ucworICogQGNhcDogVGhlIGNhcGFiaWxpdHkgaW4gcXVlc3Rpb24KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eQorICogdGFyZ2V0ZWQgYXQgaXRzIG93biB1c2VyIG5hbWVzcGFjZS4KKyAqLworYm9vbCBuc293bl9jYXBhYmxlKGludCBjYXApCit7CisJcmV0dXJuIG5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIGNhcCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggZTMxYjIyMC4uMjVjN2ViNSAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiB9OwogCiAvKgotICogY2dyb3VwX2V2ZW50IHJlcHJlc2VudHMgZXZlbnRzIHdoaWNoIHVzZXJzcGFjZSB3YW50IHRvIHJlY2lldmUuCisgKiBjZ3JvdXBfZXZlbnQgcmVwcmVzZW50cyBldmVudHMgd2hpY2ggdXNlcnNwYWNlIHdhbnQgdG8gcmVjZWl2ZS4KICAqLwogc3RydWN0IGNncm91cF9ldmVudCB7CiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCBjOTVmYzRkLi4xMmI3NDU4IDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0xMjYsNyArMTI2LDcgQEAKICNlbHNlIC8qICNpZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIHN0YXRpYyB2b2lkIGNwdV9ob3RwbHVnX2JlZ2luKHZvaWQpIHt9CiBzdGF0aWMgdm9pZCBjcHVfaG90cGx1Z19kb25lKHZvaWQpIHt9Ci0jZW5kaWYJLyogI2VzbGUgI2lmIENPTkZJR19IT1RQTFVHX0NQVSAqLworI2VuZGlmCS8qICNlbHNlICNpZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogLyogTmVlZCB0byBrbm93IGFib3V0IENQVXMgZ29pbmcgdXAvZG93bj8gKi8KIGludCBfX3JlZiByZWdpc3Rlcl9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmVkLmMgYi9rZXJuZWwvY3JlZC5jCmluZGV4IDU1NTdiNTUuLjgwOTNjMTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtNTQsNiArNTQsNyBAQAogCS5jYXBfZWZmZWN0aXZlCQk9IENBUF9JTklUX0VGRl9TRVQsCiAJLmNhcF9ic2V0CQk9IENBUF9JTklUX0JTRVQsCiAJLnVzZXIJCQk9IElOSVRfVVNFUiwKKwkudXNlcl9ucwkJPSAmaW5pdF91c2VyX25zLAogCS5ncm91cF9pbmZvCQk9ICZpbml0X2dyb3VwcywKICNpZmRlZiBDT05GSUdfS0VZUwogCS50Z2NyZWQJCQk9ICZpbml0X3RnY3JlZCwKQEAgLTQxMCw2ICs0MTEsMTEgQEAKIAkJCWdvdG8gZXJyb3JfcHV0OwogCX0KIAorCS8qIGNhY2hlIHVzZXJfbnMgaW4gY3JlZC4gIERvZXNuJ3QgbmVlZCBhIHJlZmNvdW50IGJlY2F1c2UgaXQgd2lsbAorCSAqIHN0YXkgcGlubmVkIGJ5IGNyZWQtPnVzZXIKKwkgKi8KKwluZXctPnVzZXJfbnMgPSBuZXctPnVzZXItPnVzZXJfbnM7CisKICNpZmRlZiBDT05GSUdfS0VZUwogCS8qIG5ldyB0aHJlYWRzIGdldCB0aGVpciBvd24gdGhyZWFkIGtleXJpbmdzIGlmIHRoZWlyIHBhcmVudCBhbHJlYWR5CiAJICogaGFkIG9uZSAqLwpAQCAtNzQxLDEyICs3NDcsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzZXRfY3JlYXRlX2ZpbGVzX2FzKTsKIAotc3RydWN0IHVzZXJfbmFtZXNwYWNlICpjdXJyZW50X3VzZXJfbnModm9pZCkKLXsKLQlyZXR1cm4gX2N1cnJlbnRfdXNlcl9ucygpOwotfQotRVhQT1JUX1NZTUJPTChjdXJyZW50X3VzZXJfbnMpOwotCiAjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCiAKIGJvb2wgY3JlZHNfYXJlX2ludmFsaWQoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jIGIva2VybmVsL2RlYnVnL2RlYnVnX2NvcmUuYwppbmRleCBjZWZkNGExLi5iYWQ2Nzg2IDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogCiAJLyoKIAkgKiBGb3Igc2luZ2xlIHN0ZXBwaW5nLCB0cnkgdG8gb25seSBlbnRlciBvbiB0aGUgcHJvY2Vzc29yCi0JICogdGhhdCB3YXMgc2luZ2xlIHN0ZXBwaW5nLiAgVG8gZ2F1cmQgYWdhaW5zdCBhIGRlYWRsb2NrLCB0aGUKKwkgKiB0aGF0IHdhcyBzaW5nbGUgc3RlcHBpbmcuICBUbyBndWFyZCBhZ2FpbnN0IGEgZGVhZGxvY2ssIHRoZQogCSAqIGtlcm5lbCB3aWxsIG9ubHkgdHJ5IGZvciB0aGUgdmFsdWUgb2Ygc3N0ZXBfdHJpZXMgYmVmb3JlCiAJICogZ2l2aW5nIHVwIGFuZCBjb250aW51aW5nIG9uLgogCSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCmluZGV4IDZiYzZlM2IuLmJlMTQ3NzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYworKysgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKQEAgLTQ0MSw5ICs0NDEsOSBAQAogICoJc3ltYm9sIG5hbWUsIGFuZCBvZmZzZXQgdG8gdGhlIGNhbGxlci4KICAqCiAgKglUaGUgYXJndW1lbnQgbWF5IGNvbnNpc3Qgb2YgYSBudW1lcmljIHZhbHVlIChkZWNpbWFsIG9yCi0gKgloZXhpZGVjaW1hbCksIGEgc3ltYm9sIG5hbWUsIGEgcmVnaXN0ZXIgbmFtZSAocHJlY2VlZGVkIGJ5IHRoZQorICoJaGV4aWRlY2ltYWwpLCBhIHN5bWJvbCBuYW1lLCBhIHJlZ2lzdGVyIG5hbWUgKHByZWNlZGVkIGJ5IHRoZQogICoJcGVyY2VudCBzaWduKSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBhIG51bWVyaWMgdmFsdWUKLSAqCShwcmVjZWVkZWQgYnkgYSBkb2xsYXIgc2lnbikgb3IgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uCisgKgkocHJlY2VkZWQgYnkgYSBkb2xsYXIgc2lnbikgb3IgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uCiAgKgljb25zaXN0aW5nIG9mIGEgc3ltYm9sIG5hbWUsICsvLSwgYW5kIGEgbnVtZXJpYyBjb25zdGFudCB2YWx1ZQogICoJKG9mZnNldCkuCiAgKiBQYXJhbWV0ZXJzOgpAQCAtMTMzNSw3ICsxMzM1LDcgQEAKICAqCWVycm9yCQlUaGUgaGFyZHdhcmUtZGVmaW5lZCBlcnJvciBjb2RlCiAgKglyZWFzb24yCQlrZGIncyBjdXJyZW50IHJlYXNvbiBjb2RlLgogICoJCQlJbml0aWFsbHkgZXJyb3IgYnV0IGNhbiBjaGFuZ2UKLSAqCQkJYWNvcmRpbmcgdG8ga2RiIHN0YXRlLgorICoJCQlhY2NvcmRpbmcgdG8ga2RiIHN0YXRlLgogICoJZGJfcmVzdWx0CVJlc3VsdCBjb2RlIGZyb20gYnJlYWsgb3IgZGVidWcgcG9pbnQuCiAgKglyZWdzCQlUaGUgZXhjZXB0aW9uIGZyYW1lIGF0IHRpbWUgb2YgZmF1bHQvYnJlYWtwb2ludC4KICAqCQkJc2hvdWxkIGFsd2F5cyBiZSB2YWxpZC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3N1cHBvcnQuYyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3N1cHBvcnQuYwppbmRleCA2YjI0ODVkLi41NTMyZGQzIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9zdXBwb3J0LmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfc3VwcG9ydC5jCkBAIC01NDUsNyArNTQ1LDcgQEAKICAqCU1hc2sgZm9yIHByb2Nlc3Mgc3RhdGUuCiAgKiBOb3RlczoKICAqCVRoZSBtYXNrIGZvbGRzIGRhdGEgZnJvbSBzZXZlcmFsIHNvdXJjZXMgaW50byBhIHNpbmdsZSBsb25nIHZhbHVlLCBzbwotICoJYmUgY2FyZWZ1bGwgbm90IHRvIG92ZXJsYXAgdGhlIGJpdHMuICBUQVNLXyogYml0cyBhcmUgaW4gdGhlIExTQiwKKyAqCWJlIGNhcmVmdWwgbm90IHRvIG92ZXJsYXAgdGhlIGJpdHMuICBUQVNLXyogYml0cyBhcmUgaW4gdGhlIExTQiwKICAqCXNwZWNpYWwgY2FzZXMgbGlrZSBVTlJVTk5BQkxFIGFyZSBpbiB0aGUgTVNCLiAgQXMgb2YgMi42LjEwLXJjMSB0aGVyZQogICoJaXMgbm8gb3ZlcmxhcCBiZXR3ZWVuIFRBU0tfKiBhbmQgRVhJVF8qIGJ1dCB0aGF0IG1heSBub3QgYWx3YXlzIGJlCiAgKgl0cnVlLCBzbyBFWElUXyogYml0cyBhcmUgc2hpZnRlZCBsZWZ0IDE2IGJpdHMgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNmE0ODhhZC4uOGRkODc0MSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC04NDEsNyArODQxLDcgQEAKIAkvKiBMZXQgZmF0aGVyIGtub3cgd2UgZGllZAogCSAqCiAJICogVGhyZWFkIHNpZ25hbHMgYXJlIGNvbmZpZ3VyYWJsZSwgYnV0IHlvdSBhcmVuJ3QgZ29pbmcgdG8gdXNlCi0JICogdGhhdCB0byBzZW5kIHNpZ25hbHMgdG8gYXJiaXRhcnkgcHJvY2Vzc2VzLgorCSAqIHRoYXQgdG8gc2VuZCBzaWduYWxzIHRvIGFyYml0cmFyeSBwcm9jZXNzZXMuCiAJICogVGhhdCBzdG9wcyByaWdodCBub3cuCiAJICoKIAkgKiBJZiB0aGUgcGFyZW50IGV4ZWMgaWQgZG9lc24ndCBtYXRjaCB0aGUgZXhlYyBpZCB3ZSBzYXZlZApAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkvKgogCSAqIEZJWE1FOiBkbyB0aGF0IG9ubHkgd2hlbiBuZWVkZWQsIHVzaW5nIHNjaGVkX2V4aXQgdHJhY2Vwb2ludAogCSAqLwotCWZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHRzayk7CisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOwogCiAJZXhpdF9ub3RpZnkodHNrLCBncm91cF9kZWFkKTsKICNpZmRlZiBDT05GSUdfTlVNQQpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCBkZmI5MjRmLi5mZTI4ZGMyIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtMTg4Niw3ICsxODg2LDcgQEAKIAlyZXN0YXJ0LT5mdXRleC52YWwgPSB2YWw7CiAJcmVzdGFydC0+ZnV0ZXgudGltZSA9IGFic190aW1lLT50djY0OwogCXJlc3RhcnQtPmZ1dGV4LmJpdHNldCA9IGJpdHNldDsKLQlyZXN0YXJ0LT5mdXRleC5mbGFncyA9IGZsYWdzOworCXJlc3RhcnQtPmZ1dGV4LmZsYWdzID0gZmxhZ3MgfCBGTEFHU19IQVNfVElNRU9VVDsKIAogCXJldCA9IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IDkwMTc0NzguLjg3ZmRiM2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtODEsNyArODEsMTEgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IGhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtNQVhfQ0xPQ0tTXTsKK3N0YXRpYyBpbnQgaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW01BWF9DTE9DS1NdID0geworCVtDTE9DS19SRUFMVElNRV0JPSBIUlRJTUVSX0JBU0VfUkVBTFRJTUUsCisJW0NMT0NLX01PTk9UT05JQ10JPSBIUlRJTUVSX0JBU0VfTU9OT1RPTklDLAorCVtDTE9DS19CT09UVElNRV0JPSBIUlRJTUVSX0JBU0VfQk9PVFRJTUUsCit9OwogCiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2Nsb2NraWRfdG9fYmFzZShjbG9ja2lkX3QgY2xvY2tfaWQpCiB7CkBAIC0xNzIyLDEwICsxNzI2LDYgQEAKIAogdm9pZCBfX2luaXQgaHJ0aW1lcnNfaW5pdCh2b2lkKQogewotCWhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtDTE9DS19SRUFMVElNRV0gPSBIUlRJTUVSX0JBU0VfUkVBTFRJTUU7Ci0JaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW0NMT0NLX01PTk9UT05JQ10gPSBIUlRJTUVSX0JBU0VfTU9OT1RPTklDOwotCWhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtDTE9DS19CT09UVElNRV0gPSBIUlRJTUVSX0JBU0VfQk9PVFRJTUU7Ci0KIAlocnRpbWVyX2NwdV9ub3RpZnkoJmhydGltZXJzX25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwKIAkJCSAgKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaHJ0aW1lcnNfbmIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCAxZGFmYzg2Li40YWYxZTJiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiAgKglAZGVzYzoJdGhlIGludGVycnVwdCBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoaXMgaXJxCiAgKgogICoJSW50ZXJydXB0IG9jY3VyZXMgb24gdGhlIGZhbGxpbmcgYW5kL29yIHJpc2luZyBlZGdlIG9mIGEgaGFyZHdhcmUKLSAqCXNpZ25hbC4gVGhlIG9jY3VyZW5jZSBpcyBsYXRjaGVkIGludG8gdGhlIGlycSBjb250cm9sbGVyIGhhcmR3YXJlCisgKglzaWduYWwuIFRoZSBvY2N1cnJlbmNlIGlzIGxhdGNoZWQgaW50byB0aGUgaXJxIGNvbnRyb2xsZXIgaGFyZHdhcmUKICAqCWFuZCBtdXN0IGJlIGFja2VkIGluIG9yZGVyIHRvIGJlIHJlZW5hYmxlZC4gQWZ0ZXIgdGhlIGFjayBhbm90aGVyCiAgKglpbnRlcnJ1cHQgY2FuIGhhcHBlbiBvbiB0aGUgc2FtZSBzb3VyY2UgZXZlbiBiZWZvcmUgdGhlIGZpcnN0IG9uZQogICoJaXMgaGFuZGxlZCBieSB0aGUgYXNzb2NpYXRlZCBldmVudCBoYW5kbGVyLiBJZiB0aGlzIGhhcHBlbnMgaXQKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDEyYTgwZmQuLjA3YzE2MTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTA1MSw2ICsxMDUxLDcgQEAKIAlyZWdpc3Rlcl9pcnFfcHJvYyhpcnEsIGRlc2MpOwogCW5ldy0+ZGlyID0gTlVMTDsKIAlyZWdpc3Rlcl9oYW5kbGVyX3Byb2MoaXJxLCBuZXcpOworCWZyZWVfY3B1bWFza192YXIobWFzayk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9taWdyYXRpb24uYyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKaW5kZXggYmM2MTk0Ni4uNDc0MjA5MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9taWdyYXRpb24uYworKysgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCkBAIC0zNSw3ICszNSw3IEBACiAJICogZG8gdGhlIGRpc2FibGUsIHJlLXByb2dyYW0sIGVuYWJsZSBzZXF1ZW5jZS4KIAkgKiBUaGlzIGlzICpub3QqIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGxldmVsIHRyaWdnZXJlZAogCSAqIGJ1dCBpbiBhIGVkZ2UgdHJpZ2dlciBjYXNlLCB3ZSBtaWdodCBiZSBzZXR0aW5nIHJ0ZQotCSAqIHdoZW4gYW4gYWN0aXZlIHRyaWdnZXIgaXMgY29tbWluZyBpbi4gVGhpcyBjb3VsZAorCSAqIHdoZW4gYW4gYWN0aXZlIHRyaWdnZXIgaXMgY29taW5nIGluLiBUaGlzIGNvdWxkCiAJICogY2F1c2Ugc29tZSBpb2FwaWNzIHRvIG1hbC1mdW5jdGlvbi4KIAkgKiBCZWluZyBwYXJhbm9pZCBpIGd1ZXNzIQogCSAqCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3Byb2MuYyBiL2tlcm5lbC9pcnEvcHJvYy5jCmluZGV4IGRkMjAxYmQuLjgzNDg5OWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvcHJvYy5jCisrKyBiL2tlcm5lbC9pcnEvcHJvYy5jCkBAIC00MTksNyArNDE5LDcgQEAKIAl9IGVsc2UgewogCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgIk5vbmUiKTsKIAl9Ci0jaWZkZWYgQ09ORklHX0dFTklSQ19JUlFfU0hPV19MRVZFTAorI2lmZGVmIENPTkZJR19HRU5FUklDX0lSUV9TSE9XX0xFVkVMCiAJc2VxX3ByaW50ZihwLCAiICUtOHMiLCBpcnFkX2lzX2xldmVsX3R5cGUoJmRlc2MtPmlycV9kYXRhKSA/ICJMZXZlbCIgOiAiRWRnZSIpOwogI2VuZGlmCiAJaWYgKGRlc2MtPm5hbWUpCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IDRlMjQwYTMuLjg3Yjc3ZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9rbXNnX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTQ0LDcgKzE0NSw3IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBkZXN0aW5hdGlvbiBwYWdlcyAqLwogCUlOSVRfTElTVF9IRUFEKCZpbWFnZS0+ZGVzdF9wYWdlcyk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBsaXN0IG9mIHVudXNlYWJsZSBwYWdlcyAqLworCS8qIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgdW51c2FibGUgcGFnZXMgKi8KIAlJTklUX0xJU1RfSEVBRCgmaW1hZ2UtPnVudXNlYWJsZV9wYWdlcyk7CiAKIAkvKiBSZWFkIGluIHRoZSBzZWdtZW50cyAqLwpAQCAtNDU0LDcgKzQ1NSw3IEBACiAJLyogRGVhbCB3aXRoIHRoZSBkZXN0aW5hdGlvbiBwYWdlcyBJIGhhdmUgaW5hZHZlcnRlbnRseSBhbGxvY2F0ZWQuCiAJICoKIAkgKiBJZGVhbGx5IEkgd291bGQgY29udmVydCBtdWx0aS1wYWdlIGFsbG9jYXRpb25zIGludG8gc2luZ2xlCi0JICogcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFkZCBldmVyeXRpbmcgdG8gaW1hZ2UtPmRlc3RfcGFnZXMuCisJICogcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFkZCBldmVyeXRoaW5nIHRvIGltYWdlLT5kZXN0X3BhZ2VzLgogCSAqCiAJICogRm9yIG5vdyBpdCBpcyBzaW1wbGVyIHRvIGp1c3QgZnJlZSB0aGUgcGFnZXMuCiAJICovCkBAIC02MDIsNyArNjAzLDcgQEAKIAkvKiBXYWxrIHRocm91Z2ggYW5kIGZyZWUgYW55IGV4dHJhIGRlc3RpbmF0aW9uIHBhZ2VzIEkgbWF5IGhhdmUgKi8KIAlraW1hZ2VfZnJlZV9wYWdlX2xpc3QoJmltYWdlLT5kZXN0X3BhZ2VzKTsKIAotCS8qIFdhbGsgdGhyb3VnaCBhbmQgZnJlZSBhbnkgdW51c2VhYmxlIHBhZ2VzIEkgaGF2ZSBjYWNoZWQgKi8KKwkvKiBXYWxrIHRocm91Z2ggYW5kIGZyZWUgYW55IHVudXNhYmxlIHBhZ2VzIEkgaGF2ZSBjYWNoZWQgKi8KIAlraW1hZ2VfZnJlZV9wYWdlX2xpc3QoJmltYWdlLT51bnVzZWFibGVfcGFnZXMpOwogCiB9CkBAIC0xNTMyLDYgKzE1MzMsMTEgQEAKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJLyogU3VzcGVuZCBzeXN0ZW0gZGV2aWNlcyAqLwogCQllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKKwkJaWYgKCFlcnJvcikgeworCQkJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKKwkJCWlmIChlcnJvcikKKwkJCQlzeXNkZXZfcmVzdW1lKCk7CisJCX0KIAkJaWYgKGVycm9yKQogCQkJZ290byBFbmFibGVfaXJxczsKIAl9IGVsc2UKQEAgLTE1NDYsNiArMTU1Miw3IEBACiAKICNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAogCWlmIChrZXhlY19pbWFnZS0+cHJlc2VydmVfY29udGV4dCkgeworCQlzeXNjb3JlX3Jlc3VtZSgpOwogCQlzeXNkZXZfcmVzdW1lKCk7CiAgRW5hYmxlX2lycXM6CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDY4NGFiM2YuLjNiMzRkMjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiBpbiBAbm9kZSwgdG8gZ2V0IE5VTUEgYWZmaW5pdHkgZm9yIGt0aHJlYWQgc3RhY2ssIG9yIGVsc2UgZ2l2ZSAtMS4KICAqIFdoZW4gd29rZW4sIHRoZSB0aHJlYWQgd2lsbCBydW4gQHRocmVhZGZuKCkgd2l0aCBAZGF0YSBhcyBpdHMKICAqIGFyZ3VtZW50LiBAdGhyZWFkZm4oKSBjYW4gZWl0aGVyIGNhbGwgZG9fZXhpdCgpIGRpcmVjdGx5IGlmIGl0IGlzIGEKLSAqIHN0YW5kYWxvbmUgdGhyZWFkIGZvciB3aGljaCBub29uZSB3aWxsIGNhbGwga3RocmVhZF9zdG9wKCksIG9yCisgKiBzdGFuZGFsb25lIHRocmVhZCBmb3Igd2hpY2ggbm8gb25lIHdpbGwgY2FsbCBrdGhyZWFkX3N0b3AoKSwgb3IKICAqIHJldHVybiB3aGVuICdrdGhyZWFkX3Nob3VsZF9zdG9wKCknIGlzIHRydWUgKHdoaWNoIG1lYW5zCiAgKiBrdGhyZWFkX3N0b3AoKSBoYXMgYmVlbiBjYWxsZWQpLiAgVGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgemVybwogICogb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXI7IGl0IHdpbGwgYmUgcGFzc2VkIHRvIGt0aHJlYWRfc3RvcCgpLgpkaWZmIC0tZ2l0IGEva2VybmVsL2xhdGVuY3l0b3AuYyBiL2tlcm5lbC9sYXRlbmN5dG9wLmMKaW5kZXggZWU3NGIzNS4uMzc2MDY2ZSAxMDA2NDQKLS0tIGEva2VybmVsL2xhdGVuY3l0b3AuYworKysgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIH0KIAogLyoqCi0gKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJlZCBsYXRlbmN5CisgKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJyZWQgbGF0ZW5jeQogICogQHRzayAtIHRoZSB0YXNrIHN0cnVjdCBvZiB0aGUgdGFzayBoaXR0aW5nIHRoZSBsYXRlbmN5CiAgKiBAdXNlY3MgLSB0aGUgZHVyYXRpb24gb2YgdGhlIGxhdGVuY3kgaW4gbWljcm9zZWNvbmRzCiAgKiBAaW50ZXIgLSAxIGlmIHRoZSBzbGVlcCB3YXMgaW50ZXJydXB0aWJsZSwgMCBpZiB1bmludGVycnVwdGlibGUKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDBkMjA1OGQuLjUzYTY4OTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtMjMwOSw3ICsyMzA5LDcgQEAKIAlpZiAodW5saWtlbHkoY3Vyci0+aGFyZGlycXNfZW5hYmxlZCkpIHsKIAkJLyoKIAkJICogTmVpdGhlciBpcnEgbm9yIHByZWVtcHRpb24gYXJlIGRpc2FibGVkIGhlcmUKLQkJICogc28gdGhpcyBpcyByYWN5IGJ5IG5hdHVyZSBidXQgbG9vc2luZyBvbmUgaGl0CisJCSAqIHNvIHRoaXMgaXMgcmFjeSBieSBuYXR1cmUgYnV0IGxvc2luZyBvbmUgaGl0CiAJCSAqIGluIGEgc3RhdCBpcyBub3QgYSBiaWcgZGVhbC4KIAkJICovCiAJCV9fZGVidWdfYXRvbWljX2luYyhyZWR1bmRhbnRfaGFyZGlycXNfb24pOwpAQCAtMjYyMCw3ICsyNjIwLDcgQEAKIAlpZiAoIWdyYXBoX2xvY2soKSkKIAkJcmV0dXJuIDA7CiAJLyoKLQkgKiBNYWtlIHN1cmUgd2UgZGlkbnQgcmFjZToKKwkgKiBNYWtlIHN1cmUgd2UgZGlkbid0IHJhY2U6CiAJICovCiAJaWYgKHVubGlrZWx5KGhsb2NrX2NsYXNzKHRoaXMpLT51c2FnZV9tYXNrICYgbmV3X21hc2spKSB7CiAJCWdyYXBoX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDFmOWY3YmMuLmQ1OTM4YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTgwOSw3ICs4MDksNyBAQAogCQl3YWl0X2Zvcl96ZXJvX3JlZmNvdW50KG1vZCk7CiAKIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Ci0JLyogRmluYWwgZGVzdHJ1Y3Rpb24gbm93IG5vb25lIGlzIHVzaW5nIGl0LiAqLworCS8qIEZpbmFsIGRlc3RydWN0aW9uIG5vdyBubyBvbmUgaXMgdXNpbmcgaXQuICovCiAJaWYgKG1vZC0+ZXhpdCAhPSBOVUxMKQogCQltb2QtPmV4aXQoKTsKIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZtb2R1bGVfbm90aWZ5X2xpc3QsCkBAIC0yNzc3LDcgKzI3NzcsNyBAQAogCW1vZC0+c3RhdGUgPSBNT0RVTEVfU1RBVEVfQ09NSU5HOwogCiAJLyogTm93IHNldyBpdCBpbnRvIHRoZSBsaXN0cyBzbyB3ZSBjYW4gZ2V0IGxvY2tkZXAgYW5kIG9vcHMKLQkgKiBpbmZvIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLiAgTm9vbmUgc2hvdWxkIGFjY2VzcyB1cywgc2luY2UKKwkgKiBpbmZvIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLiAgTm8gb25lIHNob3VsZCBhY2Nlc3MgdXMsIHNpbmNlCiAJICogc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KCkgd2lsbCBmYWlsLgogCSAqIGxvY2tkZXAvb29wcyBjYW4gcnVuIGFzeW5jaHJvbm91cywgc28gdXNlIHRoZSBSQ1UgbGlzdCBpbnNlcnRpb24KIAkgKiBmdW5jdGlvbiB0byBpbnNlcnQgaW4gYSB3YXkgc2FmZSB0byBjb25jdXJyZW50IHJlYWRlcnMuCkBAIC0yOTcxLDcgKzI5NzEsNyBAQAogCWVsc2UKIAkJbmV4dHZhbCA9ICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2NvcmUrbW9kLT5jb3JlX3RleHRfc2l6ZTsKIAotCS8qIFNjYW4gZm9yIGNsb3Nlc3QgcHJlY2VlZGluZyBzeW1ib2wsIGFuZCBuZXh0IHN5bWJvbC4gKEVMRgorCS8qIFNjYW4gZm9yIGNsb3Nlc3QgcHJlY2VkaW5nIHN5bWJvbCwgYW5kIG5leHQgc3ltYm9sLiAoRUxGCiAJICAgc3RhcnRzIHJlYWwgc3ltYm9scyBhdCAxKS4gKi8KIAlmb3IgKGkgPSAxOyBpIDwgbW9kLT5udW1fc3ltdGFiOyBpKyspIHsKIAkJaWYgKG1vZC0+c3ltdGFiW2ldLnN0X3NobmR4ID09IFNITl9VTkRFRikKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC5jIGIva2VybmVsL211dGV4LmMKaW5kZXggYTU4ODlmYi4uYzQxOTVmYSAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LmMKKysrIGIva2VybmVsL211dGV4LmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCQl9CiAJCV9fc2V0X3Rhc2tfc3RhdGUodGFzaywgc3RhdGUpOwogCi0JCS8qIGRpZG50IGdldCB0aGUgbG9jaywgZ28gdG8gc2xlZXA6ICovCisJCS8qIGRpZG4ndCBnZXQgdGhlIGxvY2ssIGdvIHRvIHNsZWVwOiAqLwogCQlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYWRhdGEuYyBiL2tlcm5lbC9wYWRhdGEuYwppbmRleCA3NTEwMTk0Li5iOTE5NDFkIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFkYXRhLmMKKysrIGIva2VybmVsL3BhZGF0YS5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJLyoKIAkJICogVGhpcyBjcHUgaGFzIHRvIGRvIHRoZSBwYXJhbGxlbCBwcm9jZXNzaW5nIG9mIHRoZSBuZXh0CiAJCSAqIG9iamVjdC4gSXQncyB3YWl0aW5nIGluIHRoZSBjcHUncyBwYXJhbGxlbGl6YXRpb24gcXVldWUsCi0JCSAqIHNvIGV4aXQgaW1lZGlhdGVseS4KKwkJICogc28gZXhpdCBpbW1lZGlhdGVseS4KIAkJICovCiAJCWlmIChQVFJfRVJSKHBhZGF0YSkgPT0gLUVOT0RBVEEpIHsKIAkJCWRlbF90aW1lcigmcGQtPnRpbWVyKTsKQEAgLTI4NCw3ICsyODQsNyBAQAogCS8qCiAJICogVGhlIG5leHQgb2JqZWN0IHRoYXQgbmVlZHMgc2VyaWFsaXphdGlvbiBtaWdodCBoYXZlIGFycml2ZWQgdG8KIAkgKiB0aGUgcmVvcmRlciBxdWV1ZXMgaW4gdGhlIG1lYW50aW1lLCB3ZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbgotCSAqIGZyb20gdGhlIHRpbWVyIGZ1bmN0aW9uIGlmIG5vb25lIGVsc2UgY2FyZXMgZm9yIGl0LgorCSAqIGZyb20gdGhlIHRpbWVyIGZ1bmN0aW9uIGlmIG5vIG9uZSBlbHNlIGNhcmVzIGZvciBpdC4KIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJnBkLT5yZW9yZGVyX29iamVjdHMpCiAJCQkmJiAhKHBpbnN0LT5mbGFncyAmIFBBREFUQV9SRVNFVCkpCkBAIC01MTUsNyArNTE1LDcgQEAKIAlwdXRfb25saW5lX2NwdXMoKTsKIH0KIAotLyogUmVwbGFjZSB0aGUgaW50ZXJuYWwgY29udHJvbCBzdHVjdHVyZSB3aXRoIGEgbmV3IG9uZS4gKi8KKy8qIFJlcGxhY2UgdGhlIGludGVybmFsIGNvbnRyb2wgc3RydWN0dXJlIHdpdGggYSBuZXcgb25lLiAqLwogc3RhdGljIHZvaWQgcGFkYXRhX3JlcGxhY2Uoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCiAJCQkgICBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGRfbmV3KQogewpAQCAtNzY4LDcgKzc2OCw3IEBACiB9CiAKICAvKioKLSAqIHBhZGF0YV9yZW1vdmVfY3B1IC0gcmVtb3ZlIGEgY3B1IGZyb20gdGhlIG9uZSBvciBib3RoKHNlcmlhbCBhbmQgcGFyYWxlbGwpCisgKiBwYWRhdGFfcmVtb3ZlX2NwdSAtIHJlbW92ZSBhIGNwdSBmcm9tIHRoZSBvbmUgb3IgYm90aChzZXJpYWwgYW5kIHBhcmFsbGVsKQogICogICAgICAgICAgICAgICAgICAgICBwYWRhdGEgY3B1bWFza3MuCiAgKgogICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCAwZGExNDExLi43YWIzODhhIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC05NSw3ICs5NSw3IEBACiAJLyogRmluZCBwYXJhbWV0ZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmFtczsgaSsrKSB7CiAJCWlmIChwYXJhbWVxKHBhcmFtLCBwYXJhbXNbaV0ubmFtZSkpIHsKLQkJCS8qIE5vb25lIGhhbmRsZWQgTlVMTCwgc28gZG8gaXQgaGVyZS4gKi8KKwkJCS8qIE5vIG9uZSBoYW5kbGVkIE5VTEwsIHNvIGRvIGl0IGhlcmUuICovCiAJCQlpZiAoIXZhbCAmJiBwYXJhbXNbaV0ub3BzLT5zZXQgIT0gcGFyYW1fc2V0X2Jvb2wpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlERUJVR1AoIlRoZXkgYXJlIGVxdWFsISAgQ2FsbGluZyAlcFxuIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGM3NTkyNWMuLjhlODFhOTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTQ1LDggKzE0NSw4IEBACiAgKi8KIGludCBzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCBfX3JlYWRfbW9zdGx5ID0gMTsKIAotLyogTWluaW11bSBmb3IgMTI4IHBhZ2VzICsgMSBmb3IgdGhlIHVzZXIgY29udHJvbCBwYWdlICovCi1pbnQgc3lzY3RsX3BlcmZfZXZlbnRfbWxvY2sgX19yZWFkX21vc3RseSA9IDUxNjsgLyogJ2ZyZWUnIGtiIHBlciB1c2VyICovCisvKiBNaW5pbXVtIGZvciA1MTIga2lCICsgMSB1c2VyIGNvbnRyb2wgcGFnZSAqLworaW50IHN5c2N0bF9wZXJmX2V2ZW50X21sb2NrIF9fcmVhZF9tb3N0bHkgPSA1MTIgKyAoUEFHRV9TSVpFIC8gMTAyNCk7IC8qICdmcmVlJyBraUIgcGVyIHVzZXIgKi8KIAogLyoKICAqIG1heCBwZXJmIGV2ZW50IHNhbXBsZSByYXRlCkBAIC0zNjQsNiArMzY0LDcgQEAKIAkJCX0KIAogCQkJaWYgKG1vZGUgJiBQRVJGX0NHUk9VUF9TV0lOKSB7CisJCQkJV0FSTl9PTl9PTkNFKGNwdWN0eC0+Y2dycCk7CiAJCQkJLyogc2V0IGNncnAgYmVmb3JlIGN0eHN3IGluIHRvCiAJCQkJICogYWxsb3cgZXZlbnRfZmlsdGVyX21hdGNoKCkgdG8gbm90CiAJCQkJICogaGF2ZSB0byBwYXNzIHRhc2sgYXJvdW5kCkBAIC0yNDIzLDYgKzI0MjQsMTQgQEAKIAlpZiAoIWN0eCB8fCAhY3R4LT5ucl9ldmVudHMpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBXZSBtdXN0IGN0eHN3IG91dCBjZ3JvdXAgZXZlbnRzIHRvIGF2b2lkIGNvbmZsaWN0CisJICogd2hlbiBpbnZva2luZyBwZXJmX3Rhc2tfZXZlbnRfc2NoZWRfaW4oKSBsYXRlciBvbgorCSAqIGluIHRoaXMgZnVuY3Rpb24uIE90aGVyd2lzZSB3ZSBlbmQgdXAgdHJ5aW5nIHRvCisJICogY3R4c3dpbiBjZ3JvdXAgZXZlbnRzIHdoaWNoIGFyZSBhbHJlYWR5IHNjaGVkdWxlZAorCSAqIGluLgorCSAqLworCXBlcmZfY2dyb3VwX3NjaGVkX291dChjdXJyZW50KTsKIAl0YXNrX2N0eF9zY2hlZF9vdXQoY3R4LCBFVkVOVF9BTEwpOwogCiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKQEAgLTI0NDcsNiArMjQ1Niw5IEBACiAKIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiAKKwkvKgorCSAqIEFsc28gY2FsbHMgY3R4c3dpbiBmb3IgY2dyb3VwIGV2ZW50cywgaWYgYW55OgorCSAqLwogCXBlcmZfZXZlbnRfY29udGV4dF9zY2hlZF9pbihjdHgsIGN0eC0+dGFzayk7CiBvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtNjUzMSw2ICs2NTQzLDExIEBACiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KIAorCWlmICh0YXNrKSB7CisJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwkJdGFzayA9IE5VTEw7CisJfQorCiAJLyoKIAkgKiBMb29rIHVwIHRoZSBncm91cCBsZWFkZXIgKHdlIHdpbGwgYXR0YWNoIHRoaXMgZXZlbnQgdG8gaXQpOgogCSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZC5jIGIva2VybmVsL3BpZC5jCmluZGV4IDAyZjIyMTIuLjU3YTgzNDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWQuYworKysgYi9rZXJuZWwvcGlkLmMKQEAgLTIxNywxMSArMjE3LDE0IEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQgbmV4dF9waWRtYXAoc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9ucywgaW50IGxhc3QpCitpbnQgbmV4dF9waWRtYXAoc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9ucywgdW5zaWduZWQgaW50IGxhc3QpCiB7CiAJaW50IG9mZnNldDsKIAlzdHJ1Y3QgcGlkbWFwICptYXAsICplbmQ7CiAKKwlpZiAobGFzdCA+PSBQSURfTUFYX0xJTUlUKQorCQlyZXR1cm4gLTE7CisKIAlvZmZzZXQgPSAobGFzdCArIDEpICYgQklUU19QRVJfUEFHRV9NQVNLOwogCW1hcCA9ICZwaWRfbnMtPnBpZG1hcFsobGFzdCArIDEpL0JJVFNfUEVSX1BBR0VdOwogCWVuZCA9ICZwaWRfbnMtPnBpZG1hcFtQSURNQVBfRU5UUklFU107CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCA2N2ZlYTlkLi4wNzkxYjEzIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTEzNDcsNyArMTM0Nyw3IEBACiAKIAkvKgogCSAqIE5vdyB0aGF0IGFsbCB0aGUgdGltZXJzIG9uIG91ciBsaXN0IGhhdmUgdGhlIGZpcmluZyBmbGFnLAotCSAqIG5vb25lIHdpbGwgdG91Y2ggdGhlaXIgbGlzdCBlbnRyaWVzIGJ1dCB1cy4gIFdlJ2xsIHRha2UKKwkgKiBubyBvbmUgd2lsbCB0b3VjaCB0aGVpciBsaXN0IGVudHJpZXMgYnV0IHVzLiAgV2UnbGwgdGFrZQogCSAqIGVhY2ggdGltZXIncyBsb2NrIGJlZm9yZSBjbGVhcmluZyBpdHMgZmlyaW5nIGZsYWcsIHNvIG5vCiAJICogdGltZXIgY2FsbCB3aWxsIGludGVyZmVyZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwppbmRleCA0YzAxMjQ5Li5lNTQ5OGQ3IDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCkBAIC0zMTMsNyArMzEzLDcgQEAKICAqIHJlc3RhcnRlZCAoaS5lLiB3ZSBoYXZlIGZsYWdnZWQgdGhpcyBpbiB0aGUgc3lzX3ByaXZhdGUgZW50cnkgb2YgdGhlCiAgKiBpbmZvIGJsb2NrKS4KICAqCi0gKiBUbyBwcm90ZWN0IGFnaW5zdCB0aGUgdGltZXIgZ29pbmcgYXdheSB3aGlsZSB0aGUgaW50ZXJydXB0IGlzIHF1ZXVlZCwKKyAqIFRvIHByb3RlY3QgYWdhaW5zdCB0aGUgdGltZXIgZ29pbmcgYXdheSB3aGlsZSB0aGUgaW50ZXJydXB0IGlzIHF1ZXVlZCwKICAqIHdlIHJlcXVpcmUgdGhhdCB0aGUgaXRfcmVxdWV1ZV9wZW5kaW5nIGZsYWcgYmUgc2V0LgogICovCiB2b2lkIGRvX3NjaGVkdWxlX25leHRfdGltZXIoc3RydWN0IHNpZ2luZm8gKmluZm8pCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDQ2MDNmMDguLjZkZTlhOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC0xOCw5ICsxOCwxMyBAQAogCiAJICBUdXJuaW5nIE9GRiB0aGlzIHNldHRpbmcgaXMgTk9UIHJlY29tbWVuZGVkISBJZiBpbiBkb3VidCwgc2F5IFkuCiAKK2NvbmZpZyBISUJFUk5BVEVfQ0FMTEJBQ0tTCisJYm9vbAorCiBjb25maWcgSElCRVJOQVRJT04KIAlib29sICJIaWJlcm5hdGlvbiAoYWthICdzdXNwZW5kIHRvIGRpc2snKSIKIAlkZXBlbmRzIG9uIFNXQVAgJiYgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRQorCXNlbGVjdCBISUJFUk5BVEVfQ0FMTEJBQ0tTCiAJc2VsZWN0IExaT19DT01QUkVTUwogCXNlbGVjdCBMWk9fREVDT01QUkVTUwogCS0tLWhlbHAtLS0KQEAgLTg1LDcgKzg5LDcgQEAKIAogY29uZmlnIFBNX1NMRUVQCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gU1VTUEVORCB8fCBISUJFUk5BVElPTiB8fCBYRU5fU0FWRV9SRVNUT1JFCisJZGVwZW5kcyBvbiBTVVNQRU5EIHx8IEhJQkVSTkFURV9DQUxMQkFDS1MKIAogY29uZmlnIFBNX1NMRUVQX1NNUAogCWRlZl9ib29sIHkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwppbmRleCBhZWFiZDI2Li41MGFhZTY2IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKKysrIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCkBAIC0yNzMsOCArMjczLDExIEBACiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCWVycm9yID0gc3lzZGV2X3N1c3BlbmQoUE1TR19GUkVFWkUpOwotCWlmICghZXJyb3IpCisJaWYgKCFlcnJvcikgewogCQllcnJvciA9IHN5c2NvcmVfc3VzcGVuZCgpOworCQlpZiAoZXJyb3IpCisJCQlzeXNkZXZfcmVzdW1lKCk7CisJfQogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIlBNOiBTb21lIHN5c3RlbSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duLCAiCiAJCQkiYWJvcnRpbmcgaGliZXJuYXRpb25cbiIpOwpAQCAtNDA3LDggKzQxMCwxMSBAQAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfUVVJRVNDRSk7Ci0JaWYgKCFlcnJvcikKKwlpZiAoIWVycm9yKSB7CiAJCWVycm9yID0gc3lzY29yZV9zdXNwZW5kKCk7CisJCWlmIChlcnJvcikKKwkJCXN5c2Rldl9yZXN1bWUoKTsKKwl9CiAJaWYgKGVycm9yKQogCQlnb3RvIEVuYWJsZV9pcnFzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCA4ZWFiYTVmLi5kZTlhZWY4IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogICogd3JpdGluZyB0byAnc3RhdGUnLiAgSXQgZmlyc3Qgc2hvdWxkIHJlYWQgZnJvbSAnd2FrZXVwX2NvdW50JyBhbmQgc3RvcmUKICAqIHRoZSByZWFkIHZhbHVlLiAgVGhlbiwgYWZ0ZXIgY2Fycnlpbmcgb3V0IGl0cyBvd24gcHJlcGFyYXRpb25zIGZvciB0aGUgc3lzdGVtCiAgKiB0cmFuc2l0aW9uIHRvIGEgc2xlZXAgc3RhdGUsIGl0IHNob3VsZCB3cml0ZSB0aGUgc3RvcmVkIHZhbHVlIHRvCi0gKiAnd2FrZXVwX2NvdW50Jy4gIElmIHRoYXQgZmFpbHMsIGF0IGxlYXN0IG9uZSB3YWtldXAgZXZlbnQgaGFzIG9jY3VyZWQgc2luY2UKKyAqICd3YWtldXBfY291bnQnLiAgSWYgdGhhdCBmYWlscywgYXQgbGVhc3Qgb25lIHdha2V1cCBldmVudCBoYXMgb2NjdXJyZWQgc2luY2UKICAqICd3YWtldXBfY291bnQnIHdhcyByZWFkIGFuZCAnc3RhdGUnIHNob3VsZCBub3QgYmUgd3JpdHRlbiB0by4gIE90aGVyd2lzZSwgaXQKICAqIGlzIGFsbG93ZWQgdG8gd3JpdGUgdG8gJ3N0YXRlJywgYnV0IHRoZSB0cmFuc2l0aW9uIHdpbGwgYmUgYWJvcnRlZCBpZiB0aGVyZQogICogYXJlIGFueSB3YWtldXAgZXZlbnRzIGRldGVjdGVkIGFmdGVyICd3YWtldXBfY291bnQnIHdhcyB3cml0dGVuIHRvLgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N1c3BlbmQuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKaW5kZXggMjgxNGMzMi4uNjI3NTk3MCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N1c3BlbmQuYworKysgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCkBAIC0xNjQsOCArMTY0LDExIEBACiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwotCWlmICghZXJyb3IpCisJaWYgKCFlcnJvcikgewogCQllcnJvciA9IHN5c2NvcmVfc3VzcGVuZCgpOworCQlpZiAoZXJyb3IpCisJCQlzeXNkZXZfcmVzdW1lKCk7CisJfQogCWlmICghZXJyb3IpIHsKIAkJaWYgKCEoc3VzcGVuZF90ZXN0KFRFU1RfQ09SRSkgfHwgcG1fd2FrZXVwX3BlbmRpbmcoKSkpIHsKIAkJCWVycm9yID0gc3VzcGVuZF9vcHMtPmVudGVyKHN0YXRlKTsKQEAgLTIxMyw3ICsyMTYsNiBAQAogCQkJZ290byBDbG9zZTsKIAl9CiAJc3VzcGVuZF9jb25zb2xlKCk7Ci0JcG1fcmVzdHJpY3RfZ2ZwX21hc2soKTsKIAlzdXNwZW5kX3Rlc3Rfc3RhcnQoKTsKIAllcnJvciA9IGRwbV9zdXNwZW5kX3N0YXJ0KFBNU0dfU1VTUEVORCk7CiAJaWYgKGVycm9yKSB7CkBAIC0yMzAsNyArMjMyLDYgQEAKIAlzdXNwZW5kX3Rlc3Rfc3RhcnQoKTsKIAlkcG1fcmVzdW1lX2VuZChQTVNHX1JFU1VNRSk7CiAJc3VzcGVuZF90ZXN0X2ZpbmlzaCgicmVzdW1lIGRldmljZXMiKTsKLQlwbV9yZXN0b3JlX2dmcF9tYXNrKCk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKICBDbG9zZToKIAlpZiAoc3VzcGVuZF9vcHMtPmVuZCkKQEAgLTI5MSw3ICsyOTIsOSBAQAogCQlnb3RvIEZpbmlzaDsKIAogCXByX2RlYnVnKCJQTTogRW50ZXJpbmcgJXMgc2xlZXBcbiIsIHBtX3N0YXRlc1tzdGF0ZV0pOworCXBtX3Jlc3RyaWN0X2dmcF9tYXNrKCk7CiAJZXJyb3IgPSBzdXNwZW5kX2RldmljZXNfYW5kX2VudGVyKHN0YXRlKTsKKwlwbV9yZXN0b3JlX2dmcF9tYXNrKCk7CiAKICBGaW5pc2g6CiAJcHJfZGVidWcoIlBNOiBGaW5pc2hpbmcgd2FrZXVwLlxuIik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlci5jIGIva2VybmVsL3Bvd2VyL3VzZXIuYwppbmRleCBjMzZjM2I5Li43ZDAyZDMzIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvdXNlci5jCisrKyBiL2tlcm5lbC9wb3dlci91c2VyLmMKQEAgLTEzNSw4ICsxMzUsMTAgQEAKIAlmcmVlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKCk7CiAJZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlmcmVlX2FsbF9zd2FwX3BhZ2VzKGRhdGEtPnN3YXApOwotCWlmIChkYXRhLT5mcm96ZW4pCisJaWYgKGRhdGEtPmZyb3plbikgeworCQlwbV9yZXN0b3JlX2dmcF9tYXNrKCk7CiAJCXRoYXdfcHJvY2Vzc2VzKCk7CisJfQogCXBtX25vdGlmaWVyX2NhbGxfY2hhaW4oZGF0YS0+bW9kZSA9PSBPX1JET05MWSA/CiAJCQlQTV9QT1NUX0hJQkVSTkFUSU9OIDogUE1fUE9TVF9SRVNUT1JFKTsKIAlhdG9taWNfaW5jKCZzbmFwc2hvdF9kZXZpY2VfYXZhaWxhYmxlKTsKQEAgLTM3OSw2ICszODEsNyBAQAogCQkgKiBQTV9ISUJFUk5BVElPTl9QUkVQQVJFCiAJCSAqLwogCQllcnJvciA9IHN1c3BlbmRfZGV2aWNlc19hbmRfZW50ZXIoUE1fU1VTUEVORF9NRU0pOworCQlkYXRhLT5yZWFkeSA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkFQU0hPVF9QTEFURk9STV9TVVBQT1JUOgpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IDBmYzFlZWQuLmRjN2FiNjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CiAKIAogLyoKQEAgLTg3OSwzICs4ODAsMTkgQEAKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCS8qIENPTkZJR19DT01QQVQgKi8KKworI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKK2ludCBwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZ0c2stPnB0cmFjZV9icF9yZWZjbnQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKK30KKwordm9pZCBwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0c2stPnB0cmFjZV9icF9yZWZjbnQpKQorCQlmbHVzaF9wdHJhY2VfaHdfYnJlYWtwb2ludCh0c2spOworfQorI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggZjU5MmNlNi4uMzEyZjhiOSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTIzMDksNyArMjMwOSw3IEBACiAgKiBDYXVzZSBhIHByb2Nlc3Mgd2hpY2ggaXMgcnVubmluZyBvbiBhbm90aGVyIENQVSB0byBlbnRlcgogICoga2VybmVsLW1vZGUsIHdpdGhvdXQgYW55IGRlbGF5LiAodG8gZ2V0IHNpZ25hbHMgaGFuZGxlZC4pCiAgKgotICogTk9URTogdGhpcyBmdW5jdGlvbiBkb2VzbnQgaGF2ZSB0byB0YWtlIHRoZSBydW5xdWV1ZSBsb2NrLAorICogTk9URTogdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gdGFrZSB0aGUgcnVucXVldWUgbG9jaywKICAqIGJlY2F1c2UgYWxsIGl0IHdhbnRzIHRvIGVuc3VyZSBpcyB0aGF0IHRoZSByZW1vdGUgdGFzayBlbnRlcnMKICAqIHRoZSBrZXJuZWwuIElmIHRoZSBJUEkgcmFjZXMgYW5kIHRoZSB0YXNrIGhhcyBiZWVuIG1pZ3JhdGVkCiAgKiB0byBhbm90aGVyIENQVSB0aGVuIG5vIGhhcm0gaXMgZG9uZSBhbmQgdGhlIHB1cnBvc2UgaGFzIGJlZW4KQEAgLTQxMTEsMjAgKzQxMTEsMjAgQEAKIAkJCQkJdHJ5X3RvX3dha2VfdXBfbG9jYWwodG9fd2FrZXVwKTsKIAkJCX0KIAkJCWRlYWN0aXZhdGVfdGFzayhycSwgcHJldiwgREVRVUVVRV9TTEVFUCk7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgZ29pbmcgdG8gc2xlZXAgYW5kIHdlIGhhdmUgcGx1Z2dlZCBJTyBxdWV1ZWQsIG1ha2UKKwkJCSAqIHN1cmUgdG8gc3VibWl0IGl0IHRvIGF2b2lkIGRlYWRsb2Nrcy4KKwkJCSAqLworCQkJaWYgKGJsa19uZWVkc19mbHVzaF9wbHVnKHByZXYpKSB7CisJCQkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCQkJYmxrX3NjaGVkdWxlX2ZsdXNoX3BsdWcocHJldik7CisJCQkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOworCQkJfQogCQl9CiAJCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5udmNzdzsKIAl9CiAKLQkvKgotCSAqIElmIHdlIGFyZSBnb2luZyB0byBzbGVlcCBhbmQgd2UgaGF2ZSBwbHVnZ2VkIElPIHF1ZXVlZCwgbWFrZQotCSAqIHN1cmUgdG8gc3VibWl0IGl0IHRvIGF2b2lkIGRlYWRsb2Nrcy4KLQkgKi8KLQlpZiAocHJldi0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIGJsa19uZWVkc19mbHVzaF9wbHVnKHByZXYpKSB7Ci0JCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwotCQlibGtfZmx1c2hfcGx1ZyhwcmV2KTsKLQkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwotCX0KLQogCXByZV9zY2hlZHVsZShycSwgcHJldik7CiAKIAlpZiAodW5saWtlbHkoIXJxLT5ucl9ydW5uaW5nKSkKQEAgLTQ5OTcsNyArNDk5Nyw3IEBACiAJICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwLT5waV9sb2NrLCBmbGFncyk7CiAJLyoKLQkgKiBUbyBiZSBhYmxlIHRvIGNoYW5nZSBwLT5wb2xpY3kgc2FmZWx5LCB0aGUgYXByb3ByaWF0ZQorCSAqIFRvIGJlIGFibGUgdG8gY2hhbmdlIHAtPnBvbGljeSBzYWZlbHksIHRoZSBhcHByb3ByaWF0ZQogCSAqIHJ1bnF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkLgogCSAqLwogCXJxID0gX190YXNrX3JxX2xvY2socCk7CkBAIC01MDExLDYgKzUwMTEsMTcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyoKKwkgKiBJZiBub3QgY2hhbmdpbmcgYW55dGhpbmcgdGhlcmUncyBubyBuZWVkIHRvIHByb2NlZWQgZnVydGhlcjoKKwkgKi8KKwlpZiAodW5saWtlbHkocG9saWN5ID09IHAtPnBvbGljeSAmJiAoIXJ0X3BvbGljeShwb2xpY3kpIHx8CisJCQlwYXJhbS0+c2NoZWRfcHJpb3JpdHkgPT0gcC0+cnRfcHJpb3JpdHkpKSkgeworCisJCV9fdGFza19ycV91bmxvY2socnEpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cGlfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAlpZiAodXNlcikgewogCQkvKgpAQCAtNTcwNSw3ICs1NzE2LDcgQEAKIAlkb19lYWNoX3RocmVhZChnLCBwKSB7CiAJCS8qCiAJCSAqIHJlc2V0IHRoZSBOTUktdGltZW91dCwgbGlzdGluZyBhbGwgZmlsZXMgb24gYSBzbG93Ci0JCSAqIGNvbnNvbGUgbWlnaHQgdGFrZSBhbG90IG9mIHRpbWU6CisJCSAqIGNvbnNvbGUgbWlnaHQgdGFrZSBhIGxvdCBvZiB0aW1lOgogCQkgKi8KIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJCWlmICghc3RhdGVfZmlsdGVyIHx8IChwLT5zdGF0ZSAmIHN0YXRlX2ZpbHRlcikpCkBAIC02MzIwLDYgKzYzMzEsOSBAQAogCQlicmVhazsKICNlbmRpZgogCX0KKworCXVwZGF0ZV9tYXhfaW50ZXJ2YWwoKTsKKwogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuYyBiL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuYwppbmRleCA1OTQ2YWM1Li40MjkyNDJmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmMKKysrIGIva2VybmVsL3NjaGVkX2F1dG9ncm91cC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAlzdHJ1Y3QgYXV0b2dyb3VwICphZyA9IGF1dG9ncm91cF9jcmVhdGUoKTsKIAogCWF1dG9ncm91cF9tb3ZlX2dyb3VwKHAsIGFnKTsKLQkvKiBkcm9wIGV4dHJhIHJlZnJlbmNlIGFkZGVkIGJ5IGF1dG9ncm91cF9jcmVhdGUoKSAqLworCS8qIGRyb3AgZXh0cmEgcmVmZXJlbmNlIGFkZGVkIGJ5IGF1dG9ncm91cF9jcmVhdGUoKSAqLwogCWF1dG9ncm91cF9rcmVmX3B1dChhZyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjaGVkX2F1dG9ncm91cF9jcmVhdGVfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDNmN2VjOWUuLjZmYTgzM2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGF0ZW5jeXRvcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogCiAvKgogICogVGFyZ2V0ZWQgcHJlZW1wdGlvbiBsYXRlbmN5IGZvciBDUFUtYm91bmQgdGFza3M6CkBAIC0yMTAzLDIxICsyMTA0LDIwIEBACiAJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKIAkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgY2ZzX3JxICpidXNpZXN0X2Nmc19ycSkKIHsKLQlpbnQgbG9vcHMgPSAwLCBwdWxsZWQgPSAwLCBwaW5uZWQgPSAwOworCWludCBsb29wcyA9IDAsIHB1bGxlZCA9IDA7CiAJbG9uZyByZW1fbG9hZF9tb3ZlID0gbWF4X2xvYWRfbW92ZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOwogCiAJaWYgKG1heF9sb2FkX21vdmUgPT0gMCkKIAkJZ290byBvdXQ7CiAKLQlwaW5uZWQgPSAxOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZidXNpZXN0X2Nmc19ycS0+dGFza3MsIHNlLmdyb3VwX25vZGUpIHsKIAkJaWYgKGxvb3BzKysgPiBzeXNjdGxfc2NoZWRfbnJfbWlncmF0ZSkKIAkJCWJyZWFrOwogCiAJCWlmICgocC0+c2UubG9hZC53ZWlnaHQgPj4gMSkgPiByZW1fbG9hZF9tb3ZlIHx8Ci0JCSAgICAhY2FuX21pZ3JhdGVfdGFzayhwLCBidXNpZXN0LCB0aGlzX2NwdSwgc2QsIGlkbGUsICZwaW5uZWQpKQorCQkgICAgIWNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsIHNkLCBpZGxlLAorCQkJCSAgICAgIGFsbF9waW5uZWQpKQogCQkJY29udGludWU7CiAKIAkJcHVsbF90YXNrKGJ1c2llc3QsIHAsIHRoaXNfcnEsIHRoaXNfY3B1KTsKQEAgLTIxNTIsOSArMjE1Miw2IEBACiAJICovCiAJc2NoZWRzdGF0X2FkZChzZCwgbGJfZ2FpbmVkW2lkbGVdLCBwdWxsZWQpOwogCi0JaWYgKGFsbF9waW5uZWQpCi0JCSphbGxfcGlubmVkID0gcGlubmVkOwotCiAJcmV0dXJuIG1heF9sb2FkX21vdmUgLSByZW1fbG9hZF9tb3ZlOwogfQogCkBAIC0zMDYxLDcgKzMwNTgsNyBAQAogCiAJLyoKIAkgKiBpZiAqaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiB0aGUgYXZlcmFnZSBsb2FkIHBlciBydW5uYWJsZSB0YXNrCi0JICogdGhlcmUgaXMgbm8gZ2F1cmFudGVlIHRoYXQgYW55IHRhc2tzIHdpbGwgYmUgbW92ZWQgc28gd2UnbGwgaGF2ZQorCSAqIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGFueSB0YXNrcyB3aWxsIGJlIG1vdmVkIHNvIHdlJ2xsIGhhdmUKIAkgKiBhIHRoaW5rIGFib3V0IGJ1bXBpbmcgaXRzIHZhbHVlIHRvIGZvcmNlIGF0IGxlYXN0IG9uZSB0YXNrIHRvIGJlCiAJICogbW92ZWQKIAkgKi8KQEAgLTMxMjYsNiArMzEyMyw4IEBACiAJaWYgKCFzZHMuYnVzaWVzdCB8fCBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nID09IDApCiAJCWdvdG8gb3V0X2JhbGFuY2VkOwogCisJc2RzLmF2Z19sb2FkID0gKFNDSEVEX0xPQURfU0NBTEUgKiBzZHMudG90YWxfbG9hZCkgLyBzZHMudG90YWxfcHdyOworCiAJLyoKIAkgKiBJZiB0aGUgYnVzaWVzdCBncm91cCBpcyBpbWJhbGFuY2VkIHRoZSBiZWxvdyBjaGVja3MgZG9uJ3QKIAkgKiB3b3JrIGJlY2F1c2UgdGhleSBhc3N1bWVzIGFsbCB0aGluZ3MgYXJlIGVxdWFsLCB3aGljaCB0eXBpY2FsbHkKQEAgLTMxNTAsNyArMzE0OSw2IEBACiAJICogRG9uJ3QgcHVsbCBhbnkgdGFza3MgaWYgdGhpcyBncm91cCBpcyBhbHJlYWR5IGFib3ZlIHRoZSBkb21haW4KIAkgKiBhdmVyYWdlIGxvYWQuCiAJICovCi0Jc2RzLmF2Z19sb2FkID0gKFNDSEVEX0xPQURfU0NBTEUgKiBzZHMudG90YWxfbG9hZCkgLyBzZHMudG90YWxfcHdyOwogCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5hdmdfbG9hZCkKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAKQEAgLTMzMzksNiArMzMzNyw3IEBACiAJCSAqIHN0aWxsIHVuYmFsYW5jZWQuIGxkX21vdmVkIHNpbXBseSBzdGF5cyB6ZXJvLCBzbyBpdCBpcwogCQkgKiBjb3JyZWN0bHkgdHJlYXRlZCBhcyBhbiBpbWJhbGFuY2UuCiAJCSAqLworCQlhbGxfcGlubmVkID0gMTsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlkb3VibGVfcnFfbG9jayh0aGlzX3JxLCBidXNpZXN0KTsKIAkJbGRfbW92ZWQgPSBtb3ZlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LApAQCAtMzgxOSw2ICszODE4LDE3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFsYW5jaW5nKTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseSBtYXhfbG9hZF9iYWxhbmNlX2ludGVydmFsID0gSFovMTA7CisKKy8qCisgKiBTY2FsZSB0aGUgbWF4IGxvYWRfYmFsYW5jZSBpbnRlcnZhbCB3aXRoIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLgorICogVGhpcyB0cmFkZXMgbG9hZC1iYWxhbmNlIGxhdGVuY3kgb24gbGFyZ2VyIG1hY2hpbmVzIGZvciBsZXNzIGNyb3NzIHRhbGsuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9tYXhfaW50ZXJ2YWwodm9pZCkKK3sKKwltYXhfbG9hZF9iYWxhbmNlX2ludGVydmFsID0gSFoqbnVtX29ubGluZV9jcHVzKCkvMTA7Cit9CisKIC8qCiAgKiBJdCBjaGVja3MgZWFjaCBzY2hlZHVsaW5nIGRvbWFpbiB0byBzZWUgaWYgaXQgaXMgZHVlIHRvIGJlIGJhbGFuY2VkLAogICogYW5kIGluaXRpYXRlcyBhIGJhbGFuY2luZyBvcGVyYXRpb24gaWYgc28uCkBAIC0zODQ4LDEwICszODU4LDcgQEAKIAogCQkvKiBzY2FsZSBtcyB0byBqaWZmaWVzICovCiAJCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhpbnRlcnZhbCk7Ci0JCWlmICh1bmxpa2VseSghaW50ZXJ2YWwpKQotCQkJaW50ZXJ2YWwgPSAxOwotCQlpZiAoaW50ZXJ2YWwgPiBIWipOUl9DUFVTLzEwKQotCQkJaW50ZXJ2YWwgPSBIWipOUl9DUFVTLzEwOworCQlpbnRlcnZhbCA9IGNsYW1wKGludGVydmFsLCAxVUwsIG1heF9sb2FkX2JhbGFuY2VfaW50ZXJ2YWwpOwogCiAJCW5lZWRfc2VyaWFsaXplID0gc2QtPmZsYWdzICYgU0RfU0VSSUFMSVpFOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGRiMzA4Y2IuLmU3Y2ViZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xMzc4LDcgKzEzNzgsNyBAQAogCQl0YXNrID0gcGlja19uZXh0X3B1c2hhYmxlX3Rhc2socnEpOwogCQlpZiAodGFza19jcHUobmV4dF90YXNrKSA9PSBycS0+Y3B1ICYmIHRhc2sgPT0gbmV4dF90YXNrKSB7CiAJCQkvKgotCQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZSB0YXNrIGhhc250IG1vdmVkIGF0IGFsbCwgYnV0CisJCQkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIHRhc2sgaGFzbid0IG1vdmVkIGF0IGFsbCwgYnV0CiAJCQkgKiBpdCBoYXMgZmFpbGVkIHRvIHB1c2guICBXZSB3aWxsIG5vdCB0cnkgYWdhaW4sCiAJCQkgKiBzaW5jZSB0aGUgb3RoZXIgY3B1cyB3aWxsIHB1bGwgZnJvbSB1cyB3aGVuIHRoZXkKIAkJCSAqIGFyZSByZWFkeS4KQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJCQkvKgogCQkJICogV2UgY29udGludWUgd2l0aCB0aGUgc2VhcmNoLCBqdXN0IGluCiAJCQkgKiBjYXNlIHRoZXJlJ3MgYW4gZXZlbiBoaWdoZXIgcHJpbyB0YXNrCi0JCQkgKiBpbiBhbm90aGVyIHJ1bnF1ZXVlLiAobG93IGxpa2VseWhvb2QKKwkJCSAqIGluIGFub3RoZXIgcnVucXVldWUuIChsb3cgbGlrZWxpaG9vZAogCQkJICogYnV0IHBvc3NpYmxlKQogCQkJICovCiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCAxMTg2Y2Y3Li43MTY1YWY1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIC8qCiAgKiBhbGxvY2F0ZSBhIG5ldyBzaWduYWwgcXVldWUgcmVjb3JkCiAgKiAtIHRoaXMgbWF5IGJlIGNhbGxlZCB3aXRob3V0IGxvY2tzIGlmIGFuZCBvbmx5IGlmIHQgPT0gY3VycmVudCwgb3RoZXJ3aXNlIGFuCi0gKiAgIGFwcG9wcmlhdGUgbG9jayBtdXN0IGJlIGhlbGQgdG8gc3RvcCB0aGUgdGFyZ2V0IHRhc2sgZnJvbSBleGl0aW5nCisgKiAgIGFwcHJvcHJpYXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvIHN0b3AgdGhlIHRhcmdldCB0YXNrIGZyb20gZXhpdGluZwogICovCiBzdGF0aWMgc3RydWN0IHNpZ3F1ZXVlICoKIF9fc2lncXVldWVfYWxsb2MoaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0LCBnZnBfdCBmbGFncywgaW50IG92ZXJyaWRlX3JsaW1pdCkKQEAgLTM3NSwxNSArMzc1LDE1IEBACiAJcmV0dXJuICF0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHRzaywgc2lnKTsKIH0KIAotCi0vKiBOb3RpZnkgdGhlIHN5c3RlbSB0aGF0IGEgZHJpdmVyIHdhbnRzIHRvIGJsb2NrIGFsbCBzaWduYWxzIGZvciB0aGlzCisvKgorICogTm90aWZ5IHRoZSBzeXN0ZW0gdGhhdCBhIGRyaXZlciB3YW50cyB0byBibG9jayBhbGwgc2lnbmFscyBmb3IgdGhpcwogICogcHJvY2VzcywgYW5kIHdhbnRzIHRvIGJlIG5vdGlmaWVkIGlmIGFueSBzaWduYWxzIGF0IGFsbCB3ZXJlIHRvIGJlCiAgKiBzZW50L2FjdGVkIHVwb24uICBJZiB0aGUgbm90aWZpZXIgcm91dGluZSByZXR1cm5zIG5vbi16ZXJvLCB0aGVuIHRoZQogICogc2lnbmFsIHdpbGwgYmUgYWN0ZWQgdXBvbiBhZnRlciBhbGwuICBJZiB0aGUgbm90aWZpZXIgcm91dGluZSByZXR1cm5zIDAsCiAgKiB0aGVuIHRoZW4gc2lnbmFsIHdpbGwgYmUgYmxvY2tlZC4gIE9ubHkgb25lIGJsb2NrIHBlciBwcm9jZXNzIGlzCiAgKiBhbGxvd2VkLiAgcHJpdiBpcyBhIHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHRoYXQgdGhlIG5vdGlmaWVyIHJvdXRpbmUKLSAqIGNhbiB1c2UgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzaWduYWwgc2hvdWxkIGJlIGJsb2NrZWQgb3Igbm90LiAgKi8KLQorICogY2FuIHVzZSB0byBkZXRlcm1pbmUgaWYgdGhlIHNpZ25hbCBzaG91bGQgYmUgYmxvY2tlZCBvciBub3QuCisgKi8KIHZvaWQKIGJsb2NrX2FsbF9zaWduYWxzKGludCAoKm5vdGlmaWVyKSh2b2lkICpwcml2KSwgdm9pZCAqcHJpdiwgc2lnc2V0X3QgKm1hc2spCiB7CkBAIC00MzQsOSArNDM0LDEwIEBACiAJCWNvcHlfc2lnaW5mbyhpbmZvLCAmZmlyc3QtPmluZm8pOwogCQlfX3NpZ3F1ZXVlX2ZyZWUoZmlyc3QpOwogCX0gZWxzZSB7Ci0JCS8qIE9rLCBpdCB3YXNuJ3QgaW4gdGhlIHF1ZXVlLiAgVGhpcyBtdXN0IGJlCi0JCSAgIGEgZmFzdC1wYXRoZWQgc2lnbmFsIG9yIHdlIG11c3QgaGF2ZSBiZWVuCi0JCSAgIG91dCBvZiBxdWV1ZSBzcGFjZS4gIFNvIHplcm8gb3V0IHRoZSBpbmZvLgorCQkvKgorCQkgKiBPaywgaXQgd2Fzbid0IGluIHRoZSBxdWV1ZS4gIFRoaXMgbXVzdCBiZQorCQkgKiBhIGZhc3QtcGF0aGVkIHNpZ25hbCBvciB3ZSBtdXN0IGhhdmUgYmVlbgorCQkgKiBvdXQgb2YgcXVldWUgc3BhY2UuICBTbyB6ZXJvIG91dCB0aGUgaW5mby4KIAkJICovCiAJCWluZm8tPnNpX3NpZ25vID0gc2lnOwogCQlpbmZvLT5zaV9lcnJubyA9IDA7CkBAIC00NjgsNyArNDY5LDcgQEAKIH0KIAogLyoKLSAqIERlcXVldWUgYSBzaWduYWwgYW5kIHJldHVybiB0aGUgZWxlbWVudCB0byB0aGUgY2FsbGVyLCB3aGljaCBpcyAKKyAqIERlcXVldWUgYSBzaWduYWwgYW5kIHJldHVybiB0aGUgZWxlbWVudCB0byB0aGUgY2FsbGVyLCB3aGljaCBpcwogICogZXhwZWN0ZWQgdG8gZnJlZSBpdC4KICAqCiAgKiBBbGwgY2FsbGVycyBoYXZlIHRvIGhvbGQgdGhlIHNpZ2xvY2suCkBAIC00OTAsNyArNDkxLDcgQEAKIAkJICogaXRpbWVycyBhcmUgcHJvY2VzcyBzaGFyZWQgYW5kIHdlIHJlc3RhcnQgcGVyaW9kaWMKIAkJICogaXRpbWVycyBpbiB0aGUgc2lnbmFsIGRlbGl2ZXJ5IHBhdGggdG8gcHJldmVudCBEb1MKIAkJICogYXR0YWNrcyBpbiB0aGUgaGlnaCByZXNvbHV0aW9uIHRpbWVyIGNhc2UuIFRoaXMgaXMKLQkJICogY29tcGxpYW50IHdpdGggdGhlIG9sZCB3YXkgb2Ygc2VsZiByZXN0YXJ0aW5nCisJCSAqIGNvbXBsaWFudCB3aXRoIHRoZSBvbGQgd2F5IG9mIHNlbGYtcmVzdGFydGluZwogCQkgKiBpdGltZXJzLCBhcyB0aGUgU0lHQUxSTSBpcyBhIGxlZ2FjeSBzaWduYWwgYW5kIG9ubHkKIAkJICogcXVldWVkIG9uY2UuIENoYW5naW5nIHRoZSByZXN0YXJ0IGJlaGF2aW91ciB0bwogCQkgKiByZXN0YXJ0IHRoZSB0aW1lciBpbiB0aGUgc2lnbmFsIGRlcXVldWUgcGF0aCBpcwpAQCAtOTIzLDE0ICs5MjQsMTUgQEAKIAlpZiAoaW5mbyA9PSBTRU5EX1NJR19GT1JDRUQpCiAJCWdvdG8gb3V0X3NldDsKIAotCS8qIFJlYWwtdGltZSBzaWduYWxzIG11c3QgYmUgcXVldWVkIGlmIHNlbnQgYnkgc2lncXVldWUsIG9yCi0JICAgc29tZSBvdGhlciByZWFsLXRpbWUgbWVjaGFuaXNtLiAgSXQgaXMgaW1wbGVtZW50YXRpb24KLQkgICBkZWZpbmVkIHdoZXRoZXIga2lsbCgpIGRvZXMgc28uICBXZSBhdHRlbXB0IHRvIGRvIHNvLCBvbgotCSAgIHRoZSBwcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UsIGJ1dCBzaW5jZSBraWxsIGlzIG5vdAotCSAgIGFsbG93ZWQgdG8gZmFpbCB3aXRoIEVBR0FJTiB3aGVuIGxvdyBvbiBtZW1vcnkgd2UganVzdAotCSAgIG1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgc2lnbmFsIGdldHMgZGVsaXZlcmVkIGFuZCBkb24ndAotCSAgIHBhc3Mgb24gdGhlIGluZm8gc3RydWN0LiAgKi8KLQorCS8qCisJICogUmVhbC10aW1lIHNpZ25hbHMgbXVzdCBiZSBxdWV1ZWQgaWYgc2VudCBieSBzaWdxdWV1ZSwgb3IKKwkgKiBzb21lIG90aGVyIHJlYWwtdGltZSBtZWNoYW5pc20uICBJdCBpcyBpbXBsZW1lbnRhdGlvbgorCSAqIGRlZmluZWQgd2hldGhlciBraWxsKCkgZG9lcyBzby4gIFdlIGF0dGVtcHQgdG8gZG8gc28sIG9uCisJICogdGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSwgYnV0IHNpbmNlIGtpbGwgaXMgbm90CisJICogYWxsb3dlZCB0byBmYWlsIHdpdGggRUFHQUlOIHdoZW4gbG93IG9uIG1lbW9yeSB3ZSBqdXN0CisJICogbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBzaWduYWwgZ2V0cyBkZWxpdmVyZWQgYW5kIGRvbid0CisJICogcGFzcyBvbiB0aGUgaW5mbyBzdHJ1Y3QuCisJICovCiAJaWYgKHNpZyA8IFNJR1JUTUlOKQogCQlvdmVycmlkZV9ybGltaXQgPSAoaXNfc2lfc3BlY2lhbChpbmZvKSB8fCBpbmZvLT5zaV9jb2RlID49IDApOwogCWVsc2UKQEAgLTEyMDEsOCArMTIwMyw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQKLWtpbGxfcHJvY19pbmZvKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBwaWRfdCBwaWQpCitpbnQga2lsbF9wcm9jX2luZm8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHBpZF90IHBpZCkKIHsKIAlpbnQgZXJyb3I7CiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTI5OSw4ICsxMzAwLDcgQEAKICAqIFRoZXNlIGFyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgc291cmNlLgogICovCiAKLWludAotc2VuZF9zaWdfaW5mbyhpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoraW50IHNlbmRfc2lnX2luZm8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAkvKgogCSAqIE1ha2Ugc3VyZSBsZWdhY3kga2VybmVsIHVzZXJzIGRvbid0IHNlbmQgaW4gYmFkIHZhbHVlcwpAQCAtMTM2OCw3ICsxMzY4LDcgQEAKICAqIFRoZXNlIGZ1bmN0aW9ucyBzdXBwb3J0IHNlbmRpbmcgc2lnbmFscyB1c2luZyBwcmVhbGxvY2F0ZWQgc2lncXVldWUKICAqIHN0cnVjdHVyZXMuICBUaGlzIGlzIG5lZWRlZCAiYmVjYXVzZSByZWFsdGltZSBhcHBsaWNhdGlvbnMgY2Fubm90CiAgKiBhZmZvcmQgdG8gbG9zZSBub3RpZmljYXRpb25zIG9mIGFzeW5jaHJvbm91cyBldmVudHMsIGxpa2UgdGltZXIKLSAqIGV4cGlyYXRpb25zIG9yIEkvTyBjb21wbGV0aW9ucyIuICBJbiB0aGUgY2FzZSBvZiBQb3NpeCBUaW1lcnMKKyAqIGV4cGlyYXRpb25zIG9yIEkvTyBjb21wbGV0aW9ucyIuICBJbiB0aGUgY2FzZSBvZiBQT1NJWCBUaW1lcnMKICAqIHdlIGFsbG9jYXRlIHRoZSBzaWdxdWV1ZSBzdHJ1Y3R1cmUgZnJvbSB0aGUgdGltZXJfY3JlYXRlLiAgSWYgdGhpcwogICogYWxsb2NhdGlvbiBmYWlscyB3ZSBhcmUgYWJsZSB0byByZXBvcnQgdGhlIGZhaWx1cmUgdG8gdGhlIGFwcGxpY2F0aW9uCiAgKiB3aXRoIGFuIEVBR0FJTiBlcnJvci4KQEAgLTE1NTMsNyArMTU1Myw3IEBACiAJaW5mby5zaV9zaWdubyA9IFNJR0NITEQ7CiAJaW5mby5zaV9lcnJubyA9IDA7CiAJLyoKLQkgKiBzZWUgY29tbWVudCBpbiBkb19ub3RpZnlfcGFyZW50KCkgYWJvdCB0aGUgZm9sbG93aW5nIDMgbGluZXMKKwkgKiBzZWUgY29tbWVudCBpbiBkb19ub3RpZnlfcGFyZW50KCkgYWJvdXQgdGhlIGZvbGxvd2luZyA0IGxpbmVzCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCWluZm8uc2lfcGlkID0gdGFza19waWRfbnJfbnModHNrLCBwYXJlbnQtPm5zcHJveHktPnBpZF9ucyk7CkBAIC0xNjExLDcgKzE2MTEsNyBAQAogfQogCiAvKgotICogUmV0dXJuIG5vbnplcm8gaWYgdGhlcmUgaXMgYSBTSUdLSUxMIHRoYXQgc2hvdWxkIGJlIHdha2luZyB1cyB1cC4KKyAqIFJldHVybiBub24temVybyBpZiB0aGVyZSBpcyBhIFNJR0tJTEwgdGhhdCBzaG91bGQgYmUgd2FraW5nIHVzIHVwLgogICogQ2FsbGVkIHdpdGggdGhlIHNpZ2xvY2sgaGVsZC4KICAqLwogc3RhdGljIGludCBzaWdraWxsX3BlbmRpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCkBAIC0xNzM1LDcgKzE3MzUsNyBAQAogLyoKICAqIFRoaXMgcGVyZm9ybXMgdGhlIHN0b3BwaW5nIGZvciBTSUdTVE9QIGFuZCBvdGhlciBzdG9wIHNpZ25hbHMuCiAgKiBXZSBoYXZlIHRvIHN0b3AgYWxsIHRocmVhZHMgaW4gdGhlIHRocmVhZCBncm91cC4KLSAqIFJldHVybnMgbm9uemVybyBpZiB3ZSd2ZSBhY3R1YWxseSBzdG9wcGVkIGFuZCByZWxlYXNlZCB0aGUgc2lnbG9jay4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgd2UndmUgYWN0dWFsbHkgc3RvcHBlZCBhbmQgcmVsZWFzZWQgdGhlIHNpZ2xvY2suCiAgKiBSZXR1cm5zIHplcm8gaWYgd2UgZGlkbid0IHN0b3AgYW5kIHN0aWxsIGhvbGQgdGhlIHNpZ2xvY2suCiAgKi8KIHN0YXRpYyBpbnQgZG9fc2lnbmFsX3N0b3AoaW50IHNpZ25yKQpAQCAtMTgyMywxMCArMTgyMywxMiBAQAogCiAJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKIAotCS8qIFVwZGF0ZSB0aGUgc2lnaW5mbyBzdHJ1Y3R1cmUgaWYgdGhlIHNpZ25hbCBoYXMKLQkgICBjaGFuZ2VkLiAgSWYgdGhlIGRlYnVnZ2VyIHdhbnRlZCBzb21ldGhpbmcKLQkgICBzcGVjaWZpYyBpbiB0aGUgc2lnaW5mbyBzdHJ1Y3R1cmUgdGhlbiBpdCBzaG91bGQKLQkgICBoYXZlIHVwZGF0ZWQgKmluZm8gdmlhIFBUUkFDRV9TRVRTSUdJTkZPLiAgKi8KKwkvKgorCSAqIFVwZGF0ZSB0aGUgc2lnaW5mbyBzdHJ1Y3R1cmUgaWYgdGhlIHNpZ25hbCBoYXMKKwkgKiBjaGFuZ2VkLiAgSWYgdGhlIGRlYnVnZ2VyIHdhbnRlZCBzb21ldGhpbmcKKwkgKiBzcGVjaWZpYyBpbiB0aGUgc2lnaW5mbyBzdHJ1Y3R1cmUgdGhlbiBpdCBzaG91bGQKKwkgKiBoYXZlIHVwZGF0ZWQgKmluZm8gdmlhIFBUUkFDRV9TRVRTSUdJTkZPLgorCSAqLwogCWlmIChzaWduciAhPSBpbmZvLT5zaV9zaWdubykgewogCQlpbmZvLT5zaV9zaWdubyA9IHNpZ25yOwogCQlpbmZvLT5zaV9lcnJubyA9IDA7CkBAIC0xODg1LDcgKzE4ODcsNyBAQAogCWZvciAoOzspIHsKIAkJc3RydWN0IGtfc2lnYWN0aW9uICprYTsKIAkJLyoKLQkJICogVHJhY2luZyBjYW4gaW5kdWNlIGFuIGFydGlmaWNhbCBzaWduYWwgYW5kIGNob29zZSBzaWdhY3Rpb24uCisJCSAqIFRyYWNpbmcgY2FuIGluZHVjZSBhbiBhcnRpZmljaWFsIHNpZ25hbCBhbmQgY2hvb3NlIHNpZ2FjdGlvbi4KIAkJICogVGhlIHJldHVybiB2YWx1ZSBpbiBAc2lnbnIgZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBhY3Rpb24sCiAJCSAqIGJ1dCBAaW5mby0+c2lfc2lnbm8gaXMgdGhlIHNpZ25hbCBudW1iZXIgd2Ugd2lsbCByZXBvcnQuCiAJCSAqLwpAQCAtMjAzNCw3ICsyMDM2LDggQEAKIAlpZiAoIXNpZ25hbF9wZW5kaW5nKHRzaykpCiAJCWdvdG8gb3V0OwogCi0JLyogSXQgY291bGQgYmUgdGhhdCBfX2dyb3VwX2NvbXBsZXRlX3NpZ25hbCgpIGNob29zZSB1cyB0bworCS8qCisJICogSXQgY291bGQgYmUgdGhhdCBfX2dyb3VwX2NvbXBsZXRlX3NpZ25hbCgpIGNob29zZSB1cyB0bwogCSAqIG5vdGlmeSBhYm91dCBncm91cC13aWRlIHNpZ25hbC4gQW5vdGhlciB0aHJlYWQgc2hvdWxkIGJlCiAJICogd29rZW4gbm93IHRvIHRha2UgdGhlIHNpZ25hbCBzaW5jZSB3ZSB3aWxsIG5vdC4KIAkgKi8KQEAgLTIwNzIsNiArMjA3NSw5IEBACiAgKiBTeXN0ZW0gY2FsbCBlbnRyeSBwb2ludHMuCiAgKi8KIAorLyoqCisgKiAgc3lzX3Jlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbAorICovCiBTWVNDQUxMX0RFRklORTAocmVzdGFydF9zeXNjYWxsKQogewogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0ID0gJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jazsKQEAgLTIxMjUsNiArMjEzMSwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorLyoqCisgKiAgc3lzX3J0X3NpZ3Byb2NtYXNrIC0gY2hhbmdlIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBibG9ja2VkIHNpZ25hbHMKKyAqICBAaG93OiB3aGV0aGVyIHRvIGFkZCwgcmVtb3ZlLCBvciBzZXQgc2lnbmFscworICogIEBzZXQ6IHN0b3JlcyBwZW5kaW5nIHNpZ25hbHMKKyAqICBAb3NldDogcHJldmlvdXMgdmFsdWUgb2Ygc2lnbmFsIG1hc2sgaWYgbm9uLW51bGwKKyAqICBAc2lnc2V0c2l6ZTogc2l6ZSBvZiBzaWdzZXRfdCB0eXBlCisgKi8KIFNZU0NBTExfREVGSU5FNChydF9zaWdwcm9jbWFzaywgaW50LCBob3csIHNpZ3NldF90IF9fdXNlciAqLCBzZXQsCiAJCXNpZ3NldF90IF9fdXNlciAqLCBvc2V0LCBzaXplX3QsIHNpZ3NldHNpemUpCiB7CkBAIC0yMTgzLDggKzIxOTYsMTQgQEAKIAogb3V0OgogCXJldHVybiBlcnJvcjsKLX0JCit9CiAKKy8qKgorICogIHN5c19ydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBhIHBlbmRpbmcgc2lnbmFsIHRoYXQgaGFzIGJlZW4gcmFpc2VkCisgKgkJCXdoaWxlIGJsb2NrZWQKKyAqICBAc2V0OiBzdG9yZXMgcGVuZGluZyBzaWduYWxzCisgKiAgQHNpZ3NldHNpemU6IHNpemUgb2Ygc2lnc2V0X3QgdHlwZSBvciBsYXJnZXIKKyAqLwogU1lTQ0FMTF9ERUZJTkUyKHJ0X3NpZ3BlbmRpbmcsIHNpZ3NldF90IF9fdXNlciAqLCBzZXQsIHNpemVfdCwgc2lnc2V0c2l6ZSkKIHsKIAlyZXR1cm4gZG9fc2lncGVuZGluZyhzZXQsIHNpZ3NldHNpemUpOwpAQCAtMjIzMyw5ICsyMjUyLDkgQEAKIAkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdHJhcG5vLCAmdG8tPnNpX3RyYXBubyk7CiAjZW5kaWYKICNpZmRlZiBCVVNfTUNFRVJSX0FPCi0JCS8qIAorCQkvKgogCQkgKiBPdGhlciBjYWxsZXJzIG1pZ2h0IG5vdCBpbml0aWFsaXplIHRoZSBzaV9sc2IgZmllbGQsCi0JIAkgKiBzbyBjaGVjayBleHBsaWNpdGVseSBmb3IgdGhlIHJpZ2h0IGNvZGVzIGhlcmUuCisJCSAqIHNvIGNoZWNrIGV4cGxpY2l0bHkgZm9yIHRoZSByaWdodCBjb2RlcyBoZXJlLgogCQkgKi8KIAkJaWYgKGZyb20tPnNpX2NvZGUgPT0gQlVTX01DRUVSUl9BUiB8fCBmcm9tLT5zaV9jb2RlID09IEJVU19NQ0VFUlJfQU8pCiAJCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9hZGRyX2xzYiwgJnRvLT5zaV9hZGRyX2xzYik7CkBAIC0yMjY0LDYgKzIyODMsMTQgQEAKIAogI2VuZGlmCiAKKy8qKgorICogIHN5c19ydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzIHNwZWNpZmllZAorICoJCQlpbiBAdXRoZXNlCisgKiAgQHV0aGVzZTogcXVldWVkIHNpZ25hbHMgdG8gd2FpdCBmb3IKKyAqICBAdWluZm86IGlmIG5vbi1udWxsLCB0aGUgc2lnbmFsJ3Mgc2lnaW5mbyBpcyByZXR1cm5lZCBoZXJlCisgKiAgQHV0czogdXBwZXIgYm91bmQgb24gcHJvY2VzcyB0aW1lIHN1c3BlbnNpb24KKyAqICBAc2lnc2V0c2l6ZTogc2l6ZSBvZiBzaWdzZXRfdCB0eXBlCisgKi8KIFNZU0NBTExfREVGSU5FNChydF9zaWd0aW1lZHdhaXQsIGNvbnN0IHNpZ3NldF90IF9fdXNlciAqLCB1dGhlc2UsCiAJCXNpZ2luZm9fdCBfX3VzZXIgKiwgdWluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKiwgdXRzLAogCQlzaXplX3QsIHNpZ3NldHNpemUpCkBAIC0yMjgwLDcgKzIzMDcsNyBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aGVzZSwgdXRoZXNlLCBzaXplb2YodGhlc2UpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQorCiAJLyoKIAkgKiBJbnZlcnQgdGhlIHNldCBvZiBhbGxvd2VkIHNpZ25hbHMgdG8gZ2V0IHRob3NlIHdlCiAJICogd2FudCB0byBibG9jay4KQEAgLTIzMDUsOSArMjMzMiwxMSBAQAogCQkJCSAgICsgKHRzLnR2X3NlYyB8fCB0cy50dl9uc2VjKSk7CiAKIAkJaWYgKHRpbWVvdXQpIHsKLQkJCS8qIE5vbmUgcmVhZHkgLS0gdGVtcG9yYXJpbHkgdW5ibG9jayB0aG9zZSB3ZSdyZQorCQkJLyoKKwkJCSAqIE5vbmUgcmVhZHkgLS0gdGVtcG9yYXJpbHkgdW5ibG9jayB0aG9zZSB3ZSdyZQogCQkJICogaW50ZXJlc3RlZCB3aGlsZSB3ZSBhcmUgc2xlZXBpbmcgaW4gc28gdGhhdCB3ZSdsbAotCQkJICogYmUgYXdha2VuZWQgd2hlbiB0aGV5IGFycml2ZS4gICovCisJCQkgKiBiZSBhd2FrZW5lZCB3aGVuIHRoZXkgYXJyaXZlLgorCQkJICovCiAJCQljdXJyZW50LT5yZWFsX2Jsb2NrZWQgPSBjdXJyZW50LT5ibG9ja2VkOwogCQkJc2lnYW5kc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsICZ0aGVzZSk7CiAJCQlyZWNhbGNfc2lncGVuZGluZygpOwpAQCAtMjMzOSw2ICsyMzY4LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiAgc3lzX2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcworICogIEBwaWQ6IHRoZSBQSUQgb2YgdGhlIHByb2Nlc3MKKyAqICBAc2lnOiBzaWduYWwgdG8gYmUgc2VudAorICovCiBTWVNDQUxMX0RFRklORTIoa2lsbCwgcGlkX3QsIHBpZCwgaW50LCBzaWcpCiB7CiAJc3RydWN0IHNpZ2luZm8gaW5mbzsKQEAgLTI0MTQsNyArMjQ0OCwxMSBAQAogCXJldHVybiBkb190a2lsbCh0Z2lkLCBwaWQsIHNpZyk7CiB9CiAKLS8qCisvKioKKyAqICBzeXNfdGtpbGwgLSBzZW5kIHNpZ25hbCB0byBvbmUgc3BlY2lmaWMgdGFzaworICogIEBwaWQ6IHRoZSBQSUQgb2YgdGhlIHRhc2sKKyAqICBAc2lnOiBzaWduYWwgdG8gYmUgc2VudAorICoKICAqICBTZW5kIGEgc2lnbmFsIHRvIG9ubHkgb25lIHRhc2ssIGV2ZW4gaWYgaXQncyBhIENMT05FX1RIUkVBRCB0YXNrLgogICovCiBTWVNDQUxMX0RFRklORTIodGtpbGwsIHBpZF90LCBwaWQsIGludCwgc2lnKQpAQCAtMjQyNiw2ICsyNDY0LDEyIEBACiAJcmV0dXJuIGRvX3RraWxsKDAsIHBpZCwgc2lnKTsKIH0KIAorLyoqCisgKiAgc3lzX3J0X3NpZ3F1ZXVlaW5mbyAtIHNlbmQgc2lnbmFsIGluZm9ybWF0aW9uIHRvIGEgc2lnbmFsCisgKiAgQHBpZDogdGhlIFBJRCBvZiB0aGUgdGhyZWFkCisgKiAgQHNpZzogc2lnbmFsIHRvIGJlIHNlbnQKKyAqICBAdWluZm86IHNpZ25hbCBpbmZvIHRvIGJlIHNlbnQKKyAqLwogU1lTQ0FMTF9ERUZJTkUzKHJ0X3NpZ3F1ZXVlaW5mbywgcGlkX3QsIHBpZCwgaW50LCBzaWcsCiAJCXNpZ2luZm9fdCBfX3VzZXIgKiwgdWluZm8pCiB7CkBAIC0yNTUzLDEyICsyNTk3LDExIEBACiAKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQkvKgotCQkgKgotCQkgKiBOb3RlIC0gdGhpcyBjb2RlIHVzZWQgdG8gdGVzdCBzc19mbGFncyBpbmNvcnJlY3RseQorCQkgKiBOb3RlIC0gdGhpcyBjb2RlIHVzZWQgdG8gdGVzdCBzc19mbGFncyBpbmNvcnJlY3RseToKIAkJICogIAkgIG9sZCBjb2RlIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB1c2luZyBzc19mbGFncz09MAogCQkgKgkgIHRvIG1lYW4gc3NfZmxhZ3M9PVNTX09OU1RBQ0sgKGFzIHRoaXMgd2FzIHRoZSBvbmx5CiAJCSAqCSAgd2F5IHRoYXQgd29ya2VkKSAtIHRoaXMgZml4IHByZXNlcnZlcyB0aGF0IG9sZGVyCi0JCSAqCSAgbWVjaGFuaXNtCisJCSAqCSAgbWVjaGFuaXNtLgogCQkgKi8KIAkJaWYgKHNzX2ZsYWdzICE9IFNTX0RJU0FCTEUgJiYgc3NfZmxhZ3MgIT0gU1NfT05TVEFDSyAmJiBzc19mbGFncyAhPSAwKQogCQkJZ290byBvdXQ7CkBAIC0yNTkyLDYgKzI2MzUsMTAgQEAKIAogI2lmZGVmIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAKKy8qKgorICogIHN5c19zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKKyAqICBAc2V0OiB3aGVyZSBtYXNrIG9mIHBlbmRpbmcgc2lnbmFsIGlzIHJldHVybmVkCisgKi8KIFNZU0NBTExfREVGSU5FMShzaWdwZW5kaW5nLCBvbGRfc2lnc2V0X3QgX191c2VyICosIHNldCkKIHsKIAlyZXR1cm4gZG9fc2lncGVuZGluZyhzZXQsIHNpemVvZigqc2V0KSk7CkBAIC0yNjAwLDggKzI2NDcsMTUgQEAKICNlbmRpZgogCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCi0vKiBTb21lIHBsYXRmb3JtcyBoYXZlIHRoZWlyIG93biB2ZXJzaW9uIHdpdGggc3BlY2lhbCBhcmd1bWVudHMgb3RoZXJzCi0gICBzdXBwb3J0IG9ubHkgc3lzX3J0X3NpZ3Byb2NtYXNrLiAgKi8KKy8qKgorICogIHN5c19zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKKyAqICBAaG93OiB3aGV0aGVyIHRvIGFkZCwgcmVtb3ZlLCBvciBzZXQgc2lnbmFscworICogIEBzZXQ6IHNpZ25hbHMgdG8gYWRkIG9yIHJlbW92ZSAoaWYgbm9uLW51bGwpCisgKiAgQG9zZXQ6IHByZXZpb3VzIHZhbHVlIG9mIHNpZ25hbCBtYXNrIGlmIG5vbi1udWxsCisgKgorICogU29tZSBwbGF0Zm9ybXMgaGF2ZSB0aGVpciBvd24gdmVyc2lvbiB3aXRoIHNwZWNpYWwgYXJndW1lbnRzOworICogb3RoZXJzIHN1cHBvcnQgb25seSBzeXNfcnRfc2lncHJvY21hc2suCisgKi8KIAogU1lTQ0FMTF9ERUZJTkUzKHNpZ3Byb2NtYXNrLCBpbnQsIGhvdywgb2xkX3NpZ3NldF90IF9fdXNlciAqLCBzZXQsCiAJCW9sZF9zaWdzZXRfdCBfX3VzZXIgKiwgb3NldCkKQEAgLTI2NTQsNiArMjcwOCwxMyBAQAogI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSyAqLwogCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorLyoqCisgKiAgc3lzX3J0X3NpZ2FjdGlvbiAtIGFsdGVyIGFuIGFjdGlvbiB0YWtlbiBieSBhIHByb2Nlc3MKKyAqICBAc2lnOiBzaWduYWwgdG8gYmUgc2VudAorICogIEBhY3Q6IG5ldyBzaWdhY3Rpb24KKyAqICBAb2FjdDogdXNlZCB0byBzYXZlIHRoZSBwcmV2aW91cyBzaWdhY3Rpb24KKyAqICBAc2lnc2V0c2l6ZTogc2l6ZSBvZiBzaWdzZXRfdCB0eXBlCisgKi8KIFNZU0NBTExfREVGSU5FNChydF9zaWdhY3Rpb24sIGludCwgc2lnLAogCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqLCBhY3QsCiAJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICosIG9hY3QsCkBAIC0yNzQwLDYgKzI4MDEsMTIgQEAKICNlbmRpZgogCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKKy8qKgorICogIHN5c19ydF9zaWdzdXNwZW5kIC0gcmVwbGFjZSB0aGUgc2lnbmFsIG1hc2sgZm9yIGEgdmFsdWUgd2l0aCB0aGUKKyAqCUB1bmV3c2V0IHZhbHVlIHVudGlsIGEgc2lnbmFsIGlzIHJlY2VpdmVkCisgKiAgQHVuZXdzZXQ6IG5ldyBzaWduYWwgbWFzayB2YWx1ZQorICogIEBzaWdzZXRzaXplOiBzaXplIG9mIHNpZ3NldF90IHR5cGUKKyAqLwogU1lTQ0FMTF9ERUZJTkUyKHJ0X3NpZ3N1c3BlbmQsIHNpZ3NldF90IF9fdXNlciAqLCB1bmV3c2V0LCBzaXplX3QsIHNpZ3NldHNpemUpCiB7CiAJc2lnc2V0X3QgbmV3c2V0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggNzM1ZDg3MC4uMTc0Zjk3NiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC01NjcsNyArNTY3LDcgQEAKIC8qKgogICogdGFza2xldF9ocnRpbWVyX2luaXQgLSBJbml0IGEgdGFza2xldC9ocnRpbWVyIGNvbWJvIGZvciBzb2Z0aXJxIGNhbGxiYWNrcwogICogQHR0aW1lcjoJIHRhc2tsZXRfaHJ0aW1lciB3aGljaCBpcyBpbml0aWFsaXplZAotICogQGZ1bmN0aW9uOgkgaHJ0aW1lciBjYWxsYmFjayBmdW50aW9uIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0CisgKiBAZnVuY3Rpb246CSBocnRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0CiAgKiBAd2hpY2hfY2xvY2s6IGNsb2NrIGlkIChDTE9DS19NT05PVE9OSUMvQ0xPQ0tfUkVBTFRJTUUpCiAgKiBAbW9kZToJIGhydGltZXIgbW9kZSAoSFJUSU1FUl9NT0RFX0FCUy9IUlRJTUVSX01PREVfUkVMKQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCA2NTE5Y2Y2Mi4uMGUxN2MxMCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC02ODUsOCArNjg1LDggQEAKIAkvKiBBZGQgY2xvY2tzb3VyY2UgdG8gdGhlIGNsY29rc291cmNlIGxpc3QgKi8KIAltdXRleF9sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZShjcyk7Ci0JY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZV93YXRjaGRvZyhjcyk7CisJY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MDYsOCArNzA2LDggQEAKIAogCW11dGV4X2xvY2soJmNsb2Nrc291cmNlX211dGV4KTsKIAljbG9ja3NvdXJjZV9lbnF1ZXVlKGNzKTsKLQljbG9ja3NvdXJjZV9zZWxlY3QoKTsKIAljbG9ja3NvdXJjZV9lbnF1ZXVlX3dhdGNoZG9nKGNzKTsKKwljbG9ja3NvdXJjZV9zZWxlY3QoKTsKIAltdXRleF91bmxvY2soJmNsb2Nrc291cmNlX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwppbmRleCBiMmZhNTA2Li5hNDcwMTU0IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMKKysrIGIva2VybmVsL3RpbWUvamlmZmllcy5jCkBAIC0zNCw3ICszNCw3IEBACiAgKiBpbmFjY3VyYWNpZXMgY2F1c2VkIGJ5IG1pc3NlZCBvciBsb3N0IHRpbWVyCiAgKiBpbnRlcnJ1cHRzIGFuZCB0aGUgaW5hYmlsaXR5IGZvciB0aGUgdGltZXIKICAqIGludGVycnVwdCBoYXJkd2FyZSB0byBhY2N1cmF0bHkgdGljayBhdCB0aGUKLSAqIHJlcXVlc3RlZCBIWiB2YWx1ZS4gSXQgaXMgYWxzbyBub3QgcmVjY29tZW5kZWQKKyAqIHJlcXVlc3RlZCBIWiB2YWx1ZS4gSXQgaXMgYWxzbyBub3QgcmVjb21tZW5kZWQKICAqIGZvciAidGljay1sZXNzIiBzeXN0ZW1zLgogICovCiAjZGVmaW5lIE5TRUNfUEVSX0pJRkZZCSgodTMyKSgoKCh1NjQpTlNFQ19QRVJfU0VDKTw8OCkvQUNUSFopKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvcG9zaXgtY2xvY2suYyBiL2tlcm5lbC90aW1lL3Bvc2l4LWNsb2NrLmMKaW5kZXggMjUwMjhkZC4uYzM0MGNhNiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvcG9zaXgtY2xvY2suYworKysgYi9rZXJuZWwvdGltZS9wb3NpeC1jbG9jay5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeC1jbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMzQsMTkgKzMzLDE5IEBACiB7CiAJc3RydWN0IHBvc2l4X2Nsb2NrICpjbGsgPSBmcC0+cHJpdmF0ZV9kYXRhOwogCi0JbXV0ZXhfbG9jaygmY2xrLT5tdXRleCk7CisJZG93bl9yZWFkKCZjbGstPnJ3c2VtKTsKIAogCWlmICghY2xrLT56b21iaWUpCiAJCXJldHVybiBjbGs7CiAKLQltdXRleF91bmxvY2soJmNsay0+bXV0ZXgpOworCXVwX3JlYWQoJmNsay0+cndzZW0pOwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9wb3NpeF9jbG9jayhzdHJ1Y3QgcG9zaXhfY2xvY2sgKmNsaykKIHsKLQltdXRleF91bmxvY2soJmNsay0+bXV0ZXgpOworCXVwX3JlYWQoJmNsay0+cndzZW0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBwb3NpeF9jbG9ja19yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZiwKQEAgLTE1Niw3ICsxNTUsNyBAQAogCXN0cnVjdCBwb3NpeF9jbG9jayAqY2xrID0KIAkJY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBwb3NpeF9jbG9jaywgY2Rldik7CiAKLQltdXRleF9sb2NrKCZjbGstPm11dGV4KTsKKwlkb3duX3JlYWQoJmNsay0+cndzZW0pOwogCiAJaWYgKGNsay0+em9tYmllKSB7CiAJCWVyciA9IC1FTk9ERVY7CkBAIC0xNzIsNyArMTcxLDcgQEAKIAkJZnAtPnByaXZhdGVfZGF0YSA9IGNsazsKIAl9CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjbGstPm11dGV4KTsKKwl1cF9yZWFkKCZjbGstPnJ3c2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMTEsMjUgKzIxMCwyMCBAQAogCWludCBlcnI7CiAKIAlrcmVmX2luaXQoJmNsay0+a3JlZik7Ci0JbXV0ZXhfaW5pdCgmY2xrLT5tdXRleCk7CisJaW5pdF9yd3NlbSgmY2xrLT5yd3NlbSk7CiAKIAljZGV2X2luaXQoJmNsay0+Y2RldiwgJnBvc2l4X2Nsb2NrX2ZpbGVfb3BlcmF0aW9ucyk7CiAJY2xrLT5jZGV2Lm93bmVyID0gY2xrLT5vcHMub3duZXI7CiAJZXJyID0gY2Rldl9hZGQoJmNsay0+Y2RldiwgZGV2aWQsIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gbm9fY2RldjsKIAogCXJldHVybiBlcnI7Ci1ub19jZGV2OgotCW11dGV4X2Rlc3Ryb3koJmNsay0+bXV0ZXgpOwotCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwb3NpeF9jbG9ja19yZWdpc3Rlcik7CiAKIHN0YXRpYyB2b2lkIGRlbGV0ZV9jbG9jayhzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgcG9zaXhfY2xvY2sgKmNsayA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcG9zaXhfY2xvY2ssIGtyZWYpOwotCW11dGV4X2Rlc3Ryb3koJmNsay0+bXV0ZXgpOworCiAJaWYgKGNsay0+cmVsZWFzZSkKIAkJY2xrLT5yZWxlYXNlKGNsayk7CiB9CkBAIC0yMzgsOSArMjMyLDkgQEAKIHsKIAljZGV2X2RlbCgmY2xrLT5jZGV2KTsKIAotCW11dGV4X2xvY2soJmNsay0+bXV0ZXgpOworCWRvd25fd3JpdGUoJmNsay0+cndzZW0pOwogCWNsay0+em9tYmllID0gdHJ1ZTsKLQltdXRleF91bmxvY2soJmNsay0+bXV0ZXgpOworCXVwX3dyaXRlKCZjbGstPnJ3c2VtKTsKIAogCWtyZWZfcHV0KCZjbGstPmtyZWYsIGRlbGV0ZV9jbG9jayk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCBkYTgwMGZmLi43MjNjNzYzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTUyMiwxMCArNTIyLDExIEBACiAgKi8KIHZvaWQgdGlja19icm9hZGNhc3Rfc2V0dXBfb25lc2hvdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYykKIHsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCiAJLyogU2V0IGl0IHVwIG9ubHkgb25jZSAhICovCiAJaWYgKGJjLT5ldmVudF9oYW5kbGVyICE9IHRpY2tfaGFuZGxlX29uZXNob3RfYnJvYWRjYXN0KSB7CiAJCWludCB3YXNfcGVyaW9kaWMgPSBiYy0+bW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzsKLQkJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCQliYy0+ZXZlbnRfaGFuZGxlciA9IHRpY2tfaGFuZGxlX29uZXNob3RfYnJvYWRjYXN0OwogCQljbG9ja2V2ZW50c19zZXRfbW9kZShiYywgQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CkBAIC01NTEsNiArNTUyLDE1IEBACiAJCQl0aWNrX2Jyb2FkY2FzdF9zZXRfZXZlbnQodGlja19uZXh0X3BlcmlvZCwgMSk7CiAJCX0gZWxzZQogCQkJYmMtPm5leHRfZXZlbnQudHY2NCA9IEtUSU1FX01BWDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgZmlyc3QgY3B1IHdoaWNoIHN3aXRjaGVzIHRvIG9uZXNob3QgbW9kZSBzZXRzCisJCSAqIHRoZSBiaXQgZm9yIGFsbCBvdGhlciBjcHVzIHdoaWNoIGFyZSBpbiB0aGUgZ2VuZXJhbAorCQkgKiAocGVyaW9kaWMpIGJyb2FkY2FzdCBtYXNrLiBTbyB0aGUgYml0IGlzIHNldCBhbmQKKwkJICogd291bGQgcHJldmVudCB0aGUgZmlyc3QgYnJvYWRjYXN0IGVudGVyIGFmdGVyIHRoaXMKKwkJICogdG8gcHJvZ3JhbSB0aGUgYmMgZGV2aWNlLgorCQkgKi8KKwkJdGlja19icm9hZGNhc3RfY2xlYXJfb25lc2hvdChjcHUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKaW5kZXggMmYzYjU4NS4uYTVkMGEzYSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGludCB0aW1lcl9mbGFnKQogewogCS8qCi0JICogSXQgZG9lc250IG1hdHRlciB3aGljaCBsb2NrIHdlIHRha2U6CisJICogSXQgZG9lc24ndCBtYXR0ZXIgd2hpY2ggbG9jayB3ZSB0YWtlOgogCSAqLwogCXJhd19zcGlubG9ja190ICpsb2NrOwogCXN0cnVjdCBlbnRyeSAqZW50cnksIGlucHV0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL0tjb25maWcgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwppbmRleCA2MWQ3ZDU5Zi4uMmFkMzllNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTE0MSw3ICsxNDEsNyBAQAogY29uZmlnIEZVTkNUSU9OX1RSQUNFUgogCWJvb2wgIktlcm5lbCBGdW5jdGlvbiBUcmFjZXIiCiAJZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUgotCXNlbGVjdCBGUkFNRV9QT0lOVEVSIGlmICFBUk1fVU5XSU5EICYmICFTMzkwCisJc2VsZWN0IEZSQU1FX1BPSU5URVIgaWYgIUFSTV9VTldJTkQgJiYgIVMzOTAgJiYgIU1JQ1JPQkxBWkUKIAlzZWxlY3QgS0FMTFNZTVMKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDdhYTQwZjguLjY5NTdhYTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC04NTAsMjkgKzg1MCwyMSBAQAogCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9QTFVHLCAwLCAwLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfaW8odm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfdW5wbHVnKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgIHVuc2lnbmVkIGludCBkZXB0aCwgYm9vbCBleHBsaWNpdCkKIHsKIAlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKIAogCWlmIChidCkgewotCQl1bnNpZ25lZCBpbnQgcGR1ID0gcS0+cnEuY291bnRbUkVBRF0gKyBxLT5ycS5jb3VudFtXUklURV07Ci0JCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQocGR1KTsKKwkJX19iZTY0IHJwZHUgPSBjcHVfdG9fYmU2NChkZXB0aCk7CisJCXUzMiB3aGF0OwogCi0JCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgMCwgQkxLX1RBX1VOUExVR19JTywgMCwKLQkJCQlzaXplb2YocnBkdSksICZycGR1KTsKLQl9Ci19CisJCWlmIChleHBsaWNpdCkKKwkJCXdoYXQgPSBCTEtfVEFfVU5QTFVHX0lPOworCQllbHNlCisJCQl3aGF0ID0gQkxLX1RBX1VOUExVR19USU1FUjsKIAotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKLQotCWlmIChidCkgewotCQl1bnNpZ25lZCBpbnQgcGR1ID0gcS0+cnEuY291bnRbUkVBRF0gKyBxLT5ycS5jb3VudFtXUklURV07Ci0JCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQocGR1KTsKLQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9VTlBMVUdfVElNRVIsIDAsCi0JCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7CisJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgMCwgd2hhdCwgMCwgc2l6ZW9mKHJwZHUpLCAmcnBkdSk7CiAJfQogfQogCkBAIC0xMDE1LDkgKzEwMDcsNyBAQAogCVdBUk5fT04ocmV0KTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7CiAJV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z190aW1lcihibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lciwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbywgTlVMTCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnKGJsa19hZGRfdHJhY2VfdW5wbHVnLCBOVUxMKTsKIAlXQVJOX09OKHJldCk7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7CiAJV0FSTl9PTihyZXQpOwpAQCAtMTAzMiw4ICsxMDIyLDcgQEAKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlbWFwKGJsa19hZGRfdHJhY2VfcnFfcmVtYXAsIE5VTEwpOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX2lvKGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvLCBOVUxMKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z190aW1lcihibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lciwgTlVMTCk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc2xlZXBycShibGtfYWRkX3RyYWNlX3NsZWVwcnEsIE5VTEwpOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggYzA3NWY0ZS4uZWUyNGZhMSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMTI2OCw3ICsxMjY4LDcgQEAKIAkJcC0+ZmxhZ3MgPSAwTDsKIAogCQkvKgotCQkgKiBEbyB0aGUgaW5pdGlhbCByZWNvcmQgY29udmVydGlvbiBmcm9tIG1jb3VudCBqdW1wCisJCSAqIERvIHRoZSBpbml0aWFsIHJlY29yZCBjb252ZXJzaW9uIGZyb20gbWNvdW50IGp1bXAKIAkJICogdG8gdGhlIE5PUCBpbnN0cnVjdGlvbnMuCiAJCSAqLwogCQlpZiAoIWZ0cmFjZV9jb2RlX2Rpc2FibGUobW9kLCBwKSkgewpAQCAtMzQyNSw3ICszNDI1LDcgQEAKIAlhdG9taWNfc2V0KCZ0LT50cmFjaW5nX2dyYXBoX3BhdXNlLCAwKTsKIAlhdG9taWNfc2V0KCZ0LT50cmFjZV9vdmVycnVuLCAwKTsKIAl0LT5mdHJhY2VfdGltZXN0YW1wID0gMDsKLQkvKiBtYWtlIGN1cnJfcmV0X3N0YWNrIHZpc2FibGUgYmVmb3JlIHdlIGFkZCB0aGUgcmV0X3N0YWNrICovCisJLyogbWFrZSBjdXJyX3JldF9zdGFjayB2aXNpYmxlIGJlZm9yZSB3ZSBhZGQgdGhlIHJldF9zdGFjayAqLwogCXNtcF93bWIoKTsKIAl0LT5yZXRfc3RhY2sgPSByZXRfc3RhY2s7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IGQ5YzhiY2EuLjBlZjdiNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC0xNDc4LDcgKzE0NzgsNyBAQAogCXJldHVybiBsb2NhbF9yZWFkKCZicGFnZS0+ZW50cmllcykgJiBSQl9XUklURV9NQVNLOwogfQogCi0vKiBTaXplIGlzIGRldGVybWluZWQgYnkgd2hhdCBoYXMgYmVlbiBjb21taXRlZCAqLworLyogU2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHdoYXQgaGFzIGJlZW4gY29tbWl0dGVkICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX3BhZ2Vfc2l6ZShzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlKQogewogCXJldHVybiByYl9wYWdlX2NvbW1pdChicGFnZSk7CkBAIC0yOTMyLDcgKzI5MzIsNyBAQAogCS8qCiAJICogY3B1X2J1ZmZlci0+cGFnZXMganVzdCBuZWVkcyB0byBwb2ludCB0byB0aGUgYnVmZmVyLCBpdAogCSAqICBoYXMgbm8gc3BlY2lmaWMgYnVmZmVyIHBhZ2UgdG8gcG9pbnQgdG8uIExldHMgbW92ZSBpdCBvdXQKLQkgKiAgb2Ygb3VyIHdheSBzbyB3ZSBkb24ndCBhY2NpZGVudGx5IHN3YXAgaXQuCisJICogIG9mIG91ciB3YXkgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHN3YXAgaXQuCiAJICovCiAJY3B1X2J1ZmZlci0+cGFnZXMgPSByZWFkZXItPmxpc3QucHJldjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCA5NTQxYzI3Li4xY2I0OWJlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtMTExMCw2ICsxMTEwLDcgQEAKIAogCWVudHJ5LT5wcmVlbXB0X2NvdW50CQk9IHBjICYgMHhmZjsKIAllbnRyeS0+cGlkCQkJPSAodHNrKSA/IHRzay0+cGlkIDogMDsKKwllbnRyeS0+cGFkZGluZwkJCT0gMDsKIAllbnRyeS0+ZmxhZ3MgPQogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUCiAJCShpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSA/IFRSQUNFX0ZMQUdfSVJRU19PRkYgOiAwKSB8CkBAIC0zMjM5LDcgKzMyNDAsNyBAQAogCQl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKIAogCS8qCi0JICogSWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gc2VuZCB0byB1c2VyLCBpbnNwaXRlIG9mIGNvbnN1bWluZyB0cmFjZQorCSAqIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHNlbmQgdG8gdXNlciwgaW4gc3BpdGUgb2YgY29uc3VtaW5nIHRyYWNlCiAJICogZW50cmllcywgZ28gYmFjayB0byB3YWl0IGZvciBtb3JlIGVudHJpZXMuCiAJICovCiAJaWYgKHNyZXQgPT0gLUVCVVNZKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfY2xvY2suYwppbmRleCA2ODVhNjdkLi42MzAyNzQ3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfY2xvY2suYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfY2xvY2suYwpAQCAtNDYsNyArNDYsNyBAQAogfQogCiAvKgotICogdHJhY2VfY2xvY2soKTogJ2luYmV0d2VlbicgdHJhY2UgY2xvY2suIE5vdCBjb21wbGV0ZWx5IHNlcmlhbGl6ZWQsCisgKiB0cmFjZV9jbG9jaygpOiAnYmV0d2VlbicgdHJhY2UgY2xvY2suIE5vdCBjb21wbGV0ZWx5IHNlcmlhbGl6ZWQsCiAgKiBidXQgbm90IGNvbXBsZXRlbHkgaW5jb3JyZWN0IHdoZW4gY3Jvc3NpbmcgQ1BVcyBlaXRoZXIuCiAgKgogICogVGhpcyBpcyBiYXNlZCBvbiBjcHVfY2xvY2soKSwgd2hpY2ggd2lsbCBhbGxvdyBhdCBtb3N0IH4xIGppZmZ5IG9mCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oIGIva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaAppbmRleCAxNTE2Y2IzLi5lMzI3NDRjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKQEAgLTI3LDcgKzI3LDcgQEAKICAqCSAgaW4gdGhlIHN0cnVjdHVyZS4KICAqCiAgKiAgICogZm9yIHN0cnVjdHVyZXMgd2l0aGluIHN0cnVjdHVyZXMsIHRoZSBmb3JtYXQgb2YgdGhlIGludGVybmFsCi0gKglzdHJ1Y3R1cmUgaXMgbGF5ZWQgb3V0LiBUaGlzIGFsbG93cyB0aGUgaW50ZXJuYWwgc3RydWN0dXJlCisgKglzdHJ1Y3R1cmUgaXMgbGFpZCBvdXQuIFRoaXMgYWxsb3dzIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUKICAqCXRvIGJlIGRlY2lwaGVyZWQgZm9yIHRoZSBmb3JtYXQgZmlsZS4gQWx0aG91Z2ggdGhlc2UgbWFjcm9zCiAgKgltYXkgYmVjb21lIG91dCBvZiBzeW5jIHdpdGggdGhlIGludGVybmFsIHN0cnVjdHVyZSwgdGhleQogICoJd2lsbCBjcmVhdGUgYSBjb21waWxlIGVycm9yIGlmIGl0IGhhcHBlbnMuIFNpbmNlIHRoZQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IGU4OGY3NGYuLjJmZTExMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIGZsYWdzKTsKIAlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCBwcmVlbXB0X2NvdW50KTsKIAlfX2NvbW1vbl9maWVsZChpbnQsIHBpZCk7CisJX19jb21tb25fZmllbGQoaW50LCBwYWRkaW5nKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKaW5kZXggNzZiMDU5OC4uOTYyY2RiMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwpAQCAtOTA1LDcgKzkwNSw3IEBACiAgKgogICogcmV0dXJucyAxIGlmCiAgKiAgLSB3ZSBhcmUgaW5zaWRlIGlycSBjb2RlCi0gKiAgLSB3ZSBqdXN0IGV4dGVyZWQgaXJxIGNvZGUKKyAqICAtIHdlIGp1c3QgZW50ZXJlZCBpcnEgY29kZQogICoKICAqIHJldHVubnMgMCBpZgogICogIC0gZnVuY2dyYXBoLWludGVycnVwdHMgb3B0aW9uIGlzIHNldApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKaW5kZXggOTJiNmUxZS4uYTQ5NjliNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCkBAIC04MCw3ICs4MCw3IEBACiAgKiBza2lwIHRoZSBsYXRlbmN5IGlmIHRoZSBzZXF1ZW5jZSBoYXMgY2hhbmdlZCAtIHNvbWUgb3RoZXIgc2VjdGlvbgogICogZGlkIGEgbWF4aW11bSBhbmQgY291bGQgZGlzdHVyYiBvdXIgbWVhc3VyZW1lbnQgd2l0aCBzZXJpYWwgY29uc29sZQogICogcHJpbnRvdXRzLCBldGMuIFRydWx5IGNvaW5jaWRpbmcgbWF4aW11bSBsYXRlbmNpZXMgc2hvdWxkIGJlIHJhcmUKLSAqIGFuZCB3aGF0IGhhcHBlbnMgdG9nZXRoZXIgaGFwcGVucyBzZXBhcmF0ZWx5IGFzIHdlbGwsIHNvIHRoaXMgZG9lc250CisgKiBhbmQgd2hhdCBoYXBwZW5zIHRvZ2V0aGVyIGhhcHBlbnMgc2VwYXJhdGVseSBhcyB3ZWxsLCBzbyB0aGlzIGRvZXNuJ3QKICAqIGRlY3JlYXNlIHRoZSB2YWxpZGl0eSBvZiB0aGUgbWF4aW11bSBmb3VuZDoKICAqLwogc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCXVuc2lnbmVkIGxvbmcgbWF4X3NlcXVlbmNlOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCmluZGV4IDg0MzViNDMuLjM1ZDU1YTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKQEAgLTE4MzksNyArMTgzOSw3IEBACiAJa2ZyZWUodHAtPmNhbGwucHJpbnRfZm10KTsKIH0KIAotLyogTWFrZSBhIGRlYnVnZnMgaW50ZXJmYWNlIGZvciBjb250cm9saW5nIHByb2JlIHBvaW50cyAqLworLyogTWFrZSBhIGRlYnVnZnMgaW50ZXJmYWNlIGZvciBjb250cm9sbGluZyBwcm9iZSBwb2ludHMgKi8KIHN0YXRpYyBfX2luaXQgaW50IGluaXRfa3Byb2JlX3RyYWNlKHZvaWQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci1yZXR1cm4tbm90aWZpZXIuYyBiL2tlcm5lbC91c2VyLXJldHVybi1ub3RpZmllci5jCmluZGV4IGViMjdmZDMuLjkyY2I3MDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLXJldHVybi1ub3RpZmllci5jCisrKyBiL2tlcm5lbC91c2VyLXJldHVybi1ub3RpZmllci5jCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qCiAgKiBSZW1vdmVzIGEgcmVnaXN0ZXJlZCB1c2VyIHJldHVybiBub3RpZmllci4gIE11c3QgYmUgY2FsbGVkIGZyb20gYXRvbWljCi0gKiBjb250ZXh0LCBhbmQgZnJvbSB0aGUgc2FtZSBjcHUgcmVnaXN0cmF0aW9uIG9jY3VyZWQgaW4uCisgKiBjb250ZXh0LCBhbmQgZnJvbSB0aGUgc2FtZSBjcHUgcmVnaXN0cmF0aW9uIG9jY3VycmVkIGluLgogICovCiB2b2lkIHVzZXJfcmV0dXJuX25vdGlmaWVyX3VucmVnaXN0ZXIoc3RydWN0IHVzZXJfcmV0dXJuX25vdGlmaWVyICp1cm4pCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvd2FpdC5jIGIva2VybmVsL3dhaXQuYwppbmRleCBiMDMxMGViLi5mNDVlYThkIDEwMDY0NAotLS0gYS9rZXJuZWwvd2FpdC5jCisrKyBiL2tlcm5lbC93YWl0LmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogICogd29rZW4gdXAgdGhyb3VnaCB0aGUgcXVldWUuCiAgKgogICogVGhpcyBwcmV2ZW50cyB3YWl0ZXIgc3RhcnZhdGlvbiB3aGVyZSBhbiBleGNsdXNpdmUgd2FpdGVyCi0gKiBhYm9ydHMgYW5kIGlzIHdva2VuIHVwIGNvbmN1cnJlbnRseSBhbmQgbm9vbmUgd2FrZXMgdXAKKyAqIGFib3J0cyBhbmQgaXMgd29rZW4gdXAgY29uY3VycmVudGx5IGFuZCBubyBvbmUgd2FrZXMgdXAKICAqIHRoZSBuZXh0IHdhaXRlci4KICAqLwogdm9pZCBhYm9ydF9leGNsdXNpdmVfd2FpdCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICp3YWl0LApkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCAxNDBkY2U3Li4xNDczM2Q0IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtNDMwLDkgKzQzMCwxMiBAQAogCQlwID0ga3RocmVhZF9jcmVhdGUod2F0Y2hkb2csICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY3B1LCAid2F0Y2hkb2cvJWQiLCBjcHUpOwogCQlpZiAoSVNfRVJSKHApKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNvZnRsb2NrdXAgd2F0Y2hkb2cgZm9yICVpIGZhaWxlZFxuIiwgY3B1KTsKLQkJCWlmICghZXJyKQorCQkJaWYgKCFlcnIpIHsKIAkJCQkvKiBpZiBoYXJkbG9ja3VwIGhhc24ndCBhbHJlYWR5IHNldCB0aGlzICovCiAJCQkJZXJyID0gUFRSX0VSUihwKTsKKwkJCQkvKiBhbmQgZGlzYWJsZSB0aGUgcGVyZiBldmVudCAqLworCQkJCXdhdGNoZG9nX25taV9kaXNhYmxlKGNwdSk7CisJCQl9CiAJCQlnb3RvIG91dDsKIAkJfQogCQlrdGhyZWFkX2JpbmQocCwgY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCAwNGVmODMwLi5lMzM3OGU4IDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0xMjkxLDggKzEyOTEsMTQgQEAKIAkJCXJldHVybiB0cnVlOwogCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOwogCi0JCS8qIENQVSBoYXMgY29tZSB1cCBpbmJldHdlZW4sIHJldHJ5IG1pZ3JhdGlvbiAqLworCQkvKgorCQkgKiBXZSd2ZSByYWNlZCB3aXRoIENQVSBob3RbdW5dcGx1Zy4gIEdpdmUgaXQgYSBicmVhdGhlcgorCQkgKiBhbmQgcmV0cnkgbWlncmF0aW9uLiAgY29uZF9yZXNjaGVkKCkgaXMgcmVxdWlyZWQgaGVyZTsKKwkJICogb3RoZXJ3aXNlLCB3ZSBtaWdodCBkZWFkbG9jayBhZ2FpbnN0IGNwdV9zdG9wIHRyeWluZyB0bworCQkgKiBicmluZyBkb3duIHRoZSBDUFUgb24gbm9uLXByZWVtcHRpdmUga2VybmVsLgorCQkgKi8KIAkJY3B1X3JlbGF4KCk7CisJCWNvbmRfcmVzY2hlZCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCBkZjkyMzRjLi5jNzY4YmNkIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNDM0LDExICs0MzQsOSBAQAogCiBjb25maWcgREVCVUdfS01FTUxFQUtfVEVTVAogCXRyaXN0YXRlICJTaW1wbGUgdGVzdCBmb3IgdGhlIGtlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvciIKLQlkZXBlbmRzIG9uIERFQlVHX0tNRU1MRUFLCisJZGVwZW5kcyBvbiBERUJVR19LTUVNTEVBSyAmJiBtCiAJaGVscAotCSAgU2F5IFkgb3IgTSBoZXJlIHRvIGJ1aWxkIGEgdGVzdCBmb3IgdGhlIGtlcm5lbCBtZW1vcnkgbGVhawotCSAgZGV0ZWN0b3IuIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBtb2R1bGUgdGhhdCBleHBsaWNpdGx5IGxlYWtzCi0JICBtZW1vcnkuCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgbW9kdWxlIHRoYXQgZXhwbGljaXRseSBsZWFrcyBtZW1vcnkuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCA3NDFmYWU5Li45MWUwY2NmIDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC04MzAsNyArODMwLDcgQEAKICAqICBAb3JpZyAoaS5lLiBiaXRzIDMsIDUsIDcgYW5kIDkpIHdlcmUgYWxzbyBzZXQuCiAgKgogICogIFdoZW4gYml0IDExIGlzIHNldCBpbiBAb3JpZywgaXQgbWVhbnMgdHVybiBvbiB0aGUgYml0IGluCi0gKiAgQGRzdCBjb3JyZXNwb25kaW5nIHRvIHdoYXRldmVyIGlzIHRoZSB0d2VsdGggYml0IHRoYXQgaXMKKyAqICBAZHN0IGNvcnJlc3BvbmRpbmcgdG8gd2hhdGV2ZXIgaXMgdGhlIHR3ZWxmdGggYml0IHRoYXQgaXMKICAqICB0dXJuZWQgb24gaW4gQHJlbG1hcC4gIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGVyZSB3ZXJlCiAgKiAgb25seSB0ZW4gYml0cyB0dXJuZWQgb24gaW4gQHJlbG1hcCAoMzAuLjM5KSwgc28gdGhhdCBiaXQKICAqICAxMSB3YXMgc2V0IGluIEBvcmlnIGhhZCBubyBhZmZlY3Qgb24gQGRzdC4KZGlmZiAtLWdpdCBhL2xpYi9idHJlZS5jIGIvbGliL2J0cmVlLmMKaW5kZXggYzljNmYwMy4uMmEzNDM5MiAxMDA2NDQKLS0tIGEvbGliL2J0cmVlLmMKKysrIGIvbGliL2J0cmVlLmMKQEAgLTExLDcgKzExLDcgQEAKICAqIHNlZSBodHRwOi8vcHJvZ3JhbW1pbmcua2lja3MtYXNzLm5ldC9rZXJuZWwtcGF0Y2hlcy92bWFfbG9va3VwL2J0cmVlLnBhdGNoCiAgKgogICogQSByZWxhdGl2ZWx5IHNpbXBsZSBCK1RyZWUgaW1wbGVtZW50YXRpb24uICBJIGhhdmUgd3JpdHRlbiBpdCBhcyBhIGxlYXJuaW5nCi0gKiBleGNlcmNpc2UgdG8gdW5kZXJzdGFuZCBob3cgQitUcmVlcyB3b3JrLiAgVHVybmVkIG91dCB0byBiZSB1c2VmdWwgYXMgd2VsbC4KKyAqIGV4ZXJjaXNlIHRvIHVuZGVyc3RhbmQgaG93IEIrVHJlZXMgd29yay4gIFR1cm5lZCBvdXQgdG8gYmUgdXNlZnVsIGFzIHdlbGwuCiAgKgogICogQitUcmVlcyBjYW4gYmUgdXNlZCBzaW1pbGFyIHRvIExpbnV4IHJhZGl4IHRyZWVzICh3aGljaCBkb24ndCBoYXZlIGFueXRoaW5nCiAgKiBpbiBjb21tb24gd2l0aCB0ZXh0Ym9vayByYWRpeCB0cmVlcywgYmV3YXJlKS4gIFByZXJlcXVpc2l0ZSBmb3IgdGhlbSB3b3JraW5nCkBAIC01NDEsNyArNTQxLDcgQEAKIAlpbnQgaSwgbm9fbGVmdCwgbm9fcmlnaHQ7CiAKIAlpZiAoZmlsbCA9PSAwKSB7Ci0JCS8qIEJlY2F1c2Ugd2UgZG9uJ3Qgc3RlYWwgZW50cmllcyBmcm9tIGEgbmVpZ2JvdXIsIHRoaXMgY2FzZQorCQkvKiBCZWNhdXNlIHdlIGRvbid0IHN0ZWFsIGVudHJpZXMgZnJvbSBhIG5laWdoYm91ciwgdGhpcyBjYXNlCiAJCSAqIGNhbiBoYXBwZW4uICBQYXJlbnQgbm9kZSBjb250YWlucyBhIHNpbmdsZSBjaGlsZCwgdGhpcwogCQkgKiBub2RlLCBzbyBtZXJnaW5nIHdpdGggYSBzaWJsaW5nIG5ldmVyIGhhcHBlbnMuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvbGliL2RlY29tcHJlc3NfdW54ei5jIGIvbGliL2RlY29tcHJlc3NfdW54ei5jCmluZGV4IGNlY2QyM2QuLjlmMzRlYjUgMTAwNjQ0Ci0tLSBhL2xpYi9kZWNvbXByZXNzX3VueHouYworKysgYi9saWIvZGVjb21wcmVzc191bnh6LmMKQEAgLTgzLDcgKzgzLDcgQEAKICAqICAgIHNhZmV0eV9tYXJnaW4gPSAxMjggKyB1bmNvbXByZXNzZWRfc2l6ZSAqIDggLyAzMjc2OCArIDY1NTM2CiAgKiAgICAgICAgICAgICAgICAgID0gMTI4ICsgKHVuY29tcHJlc3NlZF9zaXplID4+IDEyKSArIDY1NTM2CiAgKgotICogRm9yIGNvbXBhcmlzaW9uLCBhY2NvcmRpbmcgdG8gYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYywgdGhlCisgKiBGb3IgY29tcGFyaXNvbiwgYWNjb3JkaW5nIHRvIGFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMsIHRoZQogICogZXF1aXZhbGVudCBmb3JtdWxhIGZvciBEZWZsYXRlIGlzIHRoaXM6CiAgKgogICogICAgc2FmZXR5X21hcmdpbiA9IDE4ICsgKHVuY29tcHJlc3NlZF9zaXplID4+IDEyKSArIDMyNzY4CmRpZmYgLS1naXQgYS9saWIvZmxleF9hcnJheS5jIGIvbGliL2ZsZXhfYXJyYXkuYwppbmRleCBjMGVhNDBiLi44NTRiNTdiIDEwMDY0NAotLS0gYS9saWIvZmxleF9hcnJheS5jCisrKyBiL2xpYi9mbGV4X2FycmF5LmMKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAKIC8qKgogICogZmxleF9hcnJheV9wcmVhbGxvYyAtIGd1YXJhbnRlZSB0aGF0IGFycmF5IHNwYWNlIGV4aXN0cwotICogQGZhOgkJdGhlIGZsZXggYXJyYXkgZm9yIHdoaWNoIHRvIHByZWFsbG9jYXRlIHBhcnRzCi0gKiBAc3RhcnQ6CWluZGV4IG9mIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9yIHdoaWNoIHNwYWNlIGlzIGFsbG9jYXRlZAotICogQGVuZDoJaW5kZXggb2YgbGFzdCAoaW5jbHVzaXZlKSBlbGVtZW50IGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKLSAqIEBmbGFnczoJcGFnZSBhbGxvY2F0aW9uIGZsYWdzCisgKiBAZmE6CQkJdGhlIGZsZXggYXJyYXkgZm9yIHdoaWNoIHRvIHByZWFsbG9jYXRlIHBhcnRzCisgKiBAc3RhcnQ6CQlpbmRleCBvZiBmaXJzdCBhcnJheSBlbGVtZW50IGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKKyAqIEBucl9lbGVtZW50czoJbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKKyAqIEBmbGFnczoJCXBhZ2UgYWxsb2NhdGlvbiBmbGFncwogICoKICAqIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhhdCBubyBmdXR1cmUgY2FsbHMgdG8gZmxleF9hcnJheV9wdXQoKQogICogd2lsbCBhbGxvY2F0ZSBtZW1vcnkuICBJdCBjYW4gYmUgdXNlZCBpZiB5b3UgYXJlIGV4cGVjdGluZyB0bwpAQCAtMjQ1LDE0ICsyNDUsMjQgQEAKICAqIExvY2tpbmcgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgogICovCiBpbnQgZmxleF9hcnJheV9wcmVhbGxvYyhzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBzdGFydCwKLQkJCXVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKQorCQkJdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCBnZnBfdCBmbGFncykKIHsKIAlpbnQgc3RhcnRfcGFydDsKIAlpbnQgZW5kX3BhcnQ7CiAJaW50IHBhcnRfbnI7CisJdW5zaWduZWQgaW50IGVuZDsKIAlzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0ICpwYXJ0OwogCi0JaWYgKHN0YXJ0ID49IGZhLT50b3RhbF9ucl9lbGVtZW50cyB8fCBlbmQgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCWlmICghc3RhcnQgJiYgIW5yX2VsZW1lbnRzKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhcnQgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCQlyZXR1cm4gLUVOT1NQQzsKKwlpZiAoIW5yX2VsZW1lbnRzKQorCQlyZXR1cm4gMDsKKworCWVuZCA9IHN0YXJ0ICsgbnJfZWxlbWVudHMgLSAxOworCisJaWYgKGVuZCA+PSBmYS0+dG90YWxfbnJfZWxlbWVudHMpCiAJCXJldHVybiAtRU5PU1BDOwogCWlmIChlbGVtZW50c19maXRfaW5fYmFzZShmYSkpCiAJCXJldHVybiAwOwpAQCAtMzQzLDYgKzM1Myw4IEBACiAJaW50IHBhcnRfbnI7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoIWZhLT50b3RhbF9ucl9lbGVtZW50cykKKwkJcmV0dXJuIDA7CiAJaWYgKGVsZW1lbnRzX2ZpdF9pbl9iYXNlKGZhKSkKIAkJcmV0dXJuIHJldDsKIAlmb3IgKHBhcnRfbnIgPSAwOyBwYXJ0X25yIDwgRkxFWF9BUlJBWV9OUl9CQVNFX1BUUlM7IHBhcnRfbnIrKykgewpkaWZmIC0tZ2l0IGEvbGliL2tzdHJ0b3guYyBiL2xpYi9rc3RydG94LmMKaW5kZXggMDU2NzJlOC4uYTIzNWYzYyAxMDA2NDQKLS0tIGEvbGliL2tzdHJ0b3guYworKysgYi9saWIva3N0cnRveC5jCkBAIC00OSwxMiArNDksOSBAQAogCQkJdmFsID0gKnMgLSAnMCc7CiAJCWVsc2UgaWYgKCdhJyA8PSBfdG9sb3dlcigqcykgJiYgX3RvbG93ZXIoKnMpIDw9ICdmJykKIAkJCXZhbCA9IF90b2xvd2VyKCpzKSAtICdhJyArIDEwOwotCQllbHNlIGlmICgqcyA9PSAnXG4nKSB7Ci0JCQlpZiAoKihzICsgMSkgPT0gJ1wwJykKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlCisJCWVsc2UgaWYgKCpzID09ICdcbicgJiYgKihzICsgMSkgPT0gJ1wwJykKKwkJCWJyZWFrOworCQllbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAodmFsID49IGJhc2UpCmRpZmYgLS1naXQgYS9saWIvcGFyc2VyLmMgYi9saWIvcGFyc2VyLmMKaW5kZXggNmU4OWVjYS4uZGNiYWFlZiAxMDA2NDQKLS0tIGEvbGliL3BhcnNlci5jCisrKyBiL2xpYi9wYXJzZXIuYwpAQCAtMTMsNyArMTMsNyBAQAogCiAvKioKICAqIG1hdGNoX29uZTogLSBEZXRlcm1pbmVzIGlmIGEgc3RyaW5nIG1hdGNoZXMgYSBzaW1wbGUgcGF0dGVybgotICogQHM6IHRoZSBzdHJpbmcgdG8gZXhhbWluZSBmb3IgcHJlc2Vuc2Ugb2YgdGhlIHBhdHRlcm4KKyAqIEBzOiB0aGUgc3RyaW5nIHRvIGV4YW1pbmUgZm9yIHByZXNlbmNlIG9mIHRoZSBwYXR0ZXJuCiAgKiBAcDogdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXR0ZXJuCiAgKiBAYXJnczogYXJyYXkgb2YgJU1BWF9PUFRfQVJHUyAmc3Vic3RyaW5nX3QgZWxlbWVudHMuIFVzZWQgdG8gcmV0dXJuIG1hdGNoCiAgKiBsb2NhdGlvbnMuCmRpZmYgLS1naXQgYS9saWIvdGVzdC1rc3RydG94LmMgYi9saWIvdGVzdC1rc3RydG94LmMKaW5kZXggMzI1YzJmOS4uZDU1NzY5ZCAxMDA2NDQKLS0tIGEvbGliL3Rlc3Qta3N0cnRveC5jCisrKyBiL2xpYi90ZXN0LWtzdHJ0b3guYwpAQCAtMzE1LDEyICszMTUsMTIgQEAKIAkJeyI2NTUzNyIsCTEwLAk2NTUzN30sCiAJCXsiMjE0NzQ4MzY0NiIsCTEwLAkyMTQ3NDgzNjQ2fSwKIAkJeyIyMTQ3NDgzNjQ3IiwJMTAsCTIxNDc0ODM2NDd9LAotCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OH0sCi0JCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5fSwKLQkJeyI0Mjk0OTY3Mjk0IiwJMTAsCTQyOTQ5NjcyOTR9LAotCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NX0sCi0JCXsiNDI5NDk2NzI5NiIsCTEwLAk0Mjk0OTY3Mjk2fSwKLQkJeyI0Mjk0OTY3Mjk3IiwJMTAsCTQyOTQ5NjcyOTd9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OFVMTH0sCisJCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5VUxMfSwKKwkJeyI0Mjk0OTY3Mjk0IiwJMTAsCTQyOTQ5NjcyOTRVTEx9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NVVMTH0sCisJCXsiNDI5NDk2NzI5NiIsCTEwLAk0Mjk0OTY3Mjk2VUxMfSwKKwkJeyI0Mjk0OTY3Mjk3IiwJMTAsCTQyOTQ5NjcyOTdVTEx9LAogCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDYiLAkxMCwJOTIyMzM3MjAzNjg1NDc3NTgwNlVMTH0sCiAJCXsiOTIyMzM3MjAzNjg1NDc3NTgwNyIsCTEwLAk5MjIzMzcyMDM2ODU0Nzc1ODA3VUxMfSwKIAkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA4IiwJMTAsCTkyMjMzNzIwMzY4NTQ3NzU4MDhVTEx9LApAQCAtMzY5LDEyICszNjksMTIgQEAKIAkJeyI2NTUzNyIsCTEwLAk2NTUzN30sCiAJCXsiMjE0NzQ4MzY0NiIsCTEwLAkyMTQ3NDgzNjQ2fSwKIAkJeyIyMTQ3NDgzNjQ3IiwJMTAsCTIxNDc0ODM2NDd9LAotCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OH0sCi0JCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5fSwKLQkJeyI0Mjk0OTY3Mjk0IiwJMTAsCTQyOTQ5NjcyOTR9LAotCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NX0sCi0JCXsiNDI5NDk2NzI5NiIsCTEwLAk0Mjk0OTY3Mjk2fSwKLQkJeyI0Mjk0OTY3Mjk3IiwJMTAsCTQyOTQ5NjcyOTd9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OExMfSwKKwkJeyIyMTQ3NDgzNjQ5IiwJMTAsCTIxNDc0ODM2NDlMTH0sCisJCXsiNDI5NDk2NzI5NCIsCTEwLAk0Mjk0OTY3Mjk0TEx9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NUxMfSwKKwkJeyI0Mjk0OTY3Mjk2IiwJMTAsCTQyOTQ5NjcyOTZMTH0sCisJCXsiNDI5NDk2NzI5NyIsCTEwLAk0Mjk0OTY3Mjk3TEx9LAogCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDYiLAkxMCwJOTIyMzM3MjAzNjg1NDc3NTgwNkxMfSwKIAkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA3IiwJMTAsCTkyMjMzNzIwMzY4NTQ3NzU4MDdMTH0sCiAJfTsKQEAgLTQxOCwxMCArNDE4LDEwIEBACiAJCXsiNjU1MzciLAkxMCwJNjU1Mzd9LAogCQl7IjIxNDc0ODM2NDYiLAkxMCwJMjE0NzQ4MzY0Nn0sCiAJCXsiMjE0NzQ4MzY0NyIsCTEwLAkyMTQ3NDgzNjQ3fSwKLQkJeyIyMTQ3NDgzNjQ4IiwJMTAsCTIxNDc0ODM2NDh9LAotCQl7IjIxNDc0ODM2NDkiLAkxMCwJMjE0NzQ4MzY0OX0sCi0JCXsiNDI5NDk2NzI5NCIsCTEwLAk0Mjk0OTY3Mjk0fSwKLQkJeyI0Mjk0OTY3Mjk1IiwJMTAsCTQyOTQ5NjcyOTV9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OFV9LAorCQl7IjIxNDc0ODM2NDkiLAkxMCwJMjE0NzQ4MzY0OVV9LAorCQl7IjQyOTQ5NjcyOTQiLAkxMCwJNDI5NDk2NzI5NFV9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NVV9LAogCX07CiAJVEVTVF9PSyhrc3RydG91MzIsIHUzMiwgIiV1IiwgdGVzdF91MzJfb2spOwogfQpkaWZmIC0tZ2l0IGEvbGliL3RpbWVycXVldWUuYyBiL2xpYi90aW1lcnF1ZXVlLmMKaW5kZXggZTNhMTA1MC4uMTkxMTc2YSAxMDA2NDQKLS0tIGEvbGliL3RpbWVycXVldWUuYworKysgYi9saWIvdGltZXJxdWV1ZS5jCkBAIC01LDcgKzUsNyBAQAogICogIFVzZXMgcmJ0cmVlcyBmb3IgcXVpY2sgbGlzdCBhZGRzIGFuZCBleHBpcmF0aW9uLgogICoKICAqICBOT1RFOiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbmVlZCB0byBiZSBzZXJpYWxpemVkCi0gKiAgdG8gYXZvaWQgcmFjZXMuIE5vIGxvY2tpbmcgaXMgZG9uZSBieSB0aGlzIGxpYmFyeSBjb2RlLgorICogIHRvIGF2b2lkIHJhY2VzLiBObyBsb2NraW5nIGlzIGRvbmUgYnkgdGhpcyBsaWJyYXJ5IGNvZGUuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggYmMwYWM2Yi4uZGZkNjAxOSAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTc5Nyw3ICs3OTcsNyBAQAogCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIHV1aWQsIHNwZWMpOwogfQogCi1pbnQga3B0cl9yZXN0cmljdCA9IDE7CitpbnQga3B0cl9yZXN0cmljdCBfX3JlYWRfbW9zdGx5OwogCiAvKgogICogU2hvdyBhICclcCcgdGhpbmcuICBBIGtlcm5lbCBleHRlbnNpb24gaXMgdGhhdCB0aGUgJyVwJyBpcyBmb2xsb3dlZApkaWZmIC0tZ2l0IGEvbGliL3h6L3h6X2RlY19sem1hMi5jIGIvbGliL3h6L3h6X2RlY19sem1hMi5jCmluZGV4IGVhNWZhNGYuLmE2Y2RjOTYgMTAwNjQ0Ci0tLSBhL2xpYi94ei94el9kZWNfbHptYTIuYworKysgYi9saWIveHoveHpfZGVjX2x6bWEyLmMKQEAgLTk2OSw2ICs5NjksOSBAQAogCQkJICovCiAJCQl0bXAgPSBiLT5pbltiLT5pbl9wb3MrK107CiAKKwkJCWlmICh0bXAgPT0gMHgwMCkKKwkJCQlyZXR1cm4gWFpfU1RSRUFNX0VORDsKKwogCQkJaWYgKHRtcCA+PSAweEUwIHx8IHRtcCA9PSAweDAxKSB7CiAJCQkJcy0+bHptYTIubmVlZF9wcm9wcyA9IHRydWU7CiAJCQkJcy0+bHptYTIubmVlZF9kaWN0X3Jlc2V0ID0gZmFsc2U7CkBAIC0xMDAxLDkgKzEwMDQsNiBAQAogCQkJCQkJbHptYV9yZXNldChzKTsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCWlmICh0bXAgPT0gMHgwMCkKLQkJCQkJcmV0dXJuIFhaX1NUUkVBTV9FTkQ7Ci0KIAkJCQlpZiAodG1wID4gMHgwMikKIAkJCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CiAKZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IDBkOWEwMzYuLmJlZmM4NzUgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtNzg3LDcgKzc4Nyw3IEBACiAgKiBqaWZmaWVzIGZvciBlaXRoZXIgYSBCREkgdG8gZXhpdCBjb25nZXN0aW9uIG9mIHRoZSBnaXZlbiBAc3luYyBxdWV1ZQogICogb3IgYSB3cml0ZSB0byBjb21wbGV0ZS4KICAqCi0gKiBJbiB0aGUgYWJzZW5zZSBvZiB6b25lIGNvbmdlc3Rpb24sIGNvbmRfcmVzY2hlZCgpIGlzIGNhbGxlZCB0byB5aWVsZAorICogSW4gdGhlIGFic2VuY2Ugb2Ygem9uZSBjb25nZXN0aW9uLCBjb25kX3Jlc2NoZWQoKSBpcyBjYWxsZWQgdG8geWllbGQKICAqIHRoZSBwcm9jZXNzb3IgaWYgbmVjZXNzYXJ5IGJ1dCBvdGhlcndpc2UgZG9lcyBub3Qgc2xlZXAuCiAgKgogICogVGhlIHJldHVybiB2YWx1ZSBpcyAwIGlmIHRoZSBzbGVlcCBpcyBmb3IgdGhlIGZ1bGwgdGltZW91dC4gT3RoZXJ3aXNlLApkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMGE2MTllMC4uODMzMjZhZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNDQsMjUgKzI0NCwyOSBAQAogCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAogCQkJCWVudW0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZyBmbGFnKQogewotCWlmICh0ZXN0X2JpdChmbGFnLCAmdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJbeWVzXSBub1xuIik7Ci0JZWxzZQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJ5ZXMgW25vXVxuIik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICAhIXRlc3RfYml0KGZsYWcsICZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpOwogfQorCiBzdGF0aWMgc3NpemVfdCBzaW5nbGVfZmxhZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCQkgZW51bSB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFnIGZsYWcpCiB7Ci0JaWYgKCFtZW1jbXAoInllcyIsIGJ1ZiwKLQkJICAgIG1pbihzaXplb2YoInllcyIpLTEsIGNvdW50KSkpIHsKLQkJc2V0X2JpdChmbGFnLCAmdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpOwotCX0gZWxzZSBpZiAoIW1lbWNtcCgibm8iLCBidWYsCi0JCQkgICBtaW4oc2l6ZW9mKCJubyIpLTEsIGNvdW50KSkpIHsKLQkJY2xlYXJfYml0KGZsYWcsICZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyk7Ci0JfSBlbHNlCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgcmV0OworCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAodmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICh2YWx1ZSkKKwkJc2V0X2JpdChmbGFnLCAmdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KGZsYWcsICZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyk7CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTY4MCw4ICs2ODQsMTEgQEAKIAkJCXJldHVybiBWTV9GQVVMVF9PT007CiAJCXBhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKHZtYSksCiAJCQkJCSAgdm1hLCBoYWRkciwgbnVtYV9ub2RlX2lkKCksIDApOwotCQlpZiAodW5saWtlbHkoIXBhZ2UpKQorCQlpZiAodW5saWtlbHkoIXBhZ2UpKSB7CisJCQljb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spOwogCQkJZ290byBvdXQ7CisJCX0KKwkJY291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0FMTE9DKTsKIAkJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSkgewogCQkJcHV0X3BhZ2UocGFnZSk7CiAJCQlnb3RvIG91dDsKQEAgLTkwOSwxMSArOTE2LDEzIEBACiAJCW5ld19wYWdlID0gTlVMTDsKIAogCWlmICh1bmxpa2VseSghbmV3X3BhZ2UpKSB7CisJCWNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7CiAJCXJldCA9IGRvX2h1Z2VfcG1kX3dwX3BhZ2VfZmFsbGJhY2sobW0sIHZtYSwgYWRkcmVzcywKIAkJCQkJCSAgIHBtZCwgb3JpZ19wbWQsIHBhZ2UsIGhhZGRyKTsKIAkJcHV0X3BhZ2UocGFnZSk7CiAJCWdvdG8gb3V0OwogCX0KKwljb3VudF92bV9ldmVudChUSFBfRkFVTFRfQUxMT0MpOwogCiAJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UobmV3X3BhZ2UsIG1tLCBHRlBfS0VSTkVMKSkpIHsKIAkJcHV0X3BhZ2UobmV3X3BhZ2UpOwpAQCAtMTM5MCw2ICsxMzk5LDcgQEAKIAogCUJVR19PTighUGFnZVN3YXBCYWNrZWQocGFnZSkpOwogCV9fc3BsaXRfaHVnZV9wYWdlKHBhZ2UsIGFub25fdm1hKTsKKwljb3VudF92bV9ldmVudChUSFBfU1BMSVQpOwogCiAJQlVHX09OKFBhZ2VDb21wb3VuZChwYWdlKSk7CiBvdXRfdW5sb2NrOgpAQCAtMTM5OCw2ICsxNDA4LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZGVmaW5lIFZNX05PX1RIUCAoVk1fU1BFQ0lBTHxWTV9JTlNFUlRQQUdFfFZNX01JWEVETUFQfFZNX1NBT3wgXAorCQkgICBWTV9IVUdFVExCfFZNX1NIQVJFRHxWTV9NQVlTSEFSRSkKKwogaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCSAgICAgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MsIGludCBhZHZpY2UpCiB7CkBAIC0xNDA2LDExICsxNDE5LDcgQEAKIAkJLyoKIAkJICogQmUgc29tZXdoYXQgb3Zlci1wcm90ZWN0aXZlIGxpa2UgS1NNIGZvciBub3chCiAJCSAqLwotCQlpZiAoKnZtX2ZsYWdzICYgKFZNX0hVR0VQQUdFIHwKLQkJCQkgVk1fU0hBUkVEICAgfCBWTV9NQVlTSEFSRSAgIHwKLQkJCQkgVk1fUEZOTUFQICAgfCBWTV9JTyAgICAgIHwgVk1fRE9OVEVYUEFORCB8Ci0JCQkJIFZNX1JFU0VSVkVEIHwgVk1fSFVHRVRMQiB8IFZNX0lOU0VSVFBBR0UgfAotCQkJCSBWTV9NSVhFRE1BUCB8IFZNX1NBTykpCisJCWlmICgqdm1fZmxhZ3MgJiAoVk1fSFVHRVBBR0UgfCBWTV9OT19USFApKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCSp2bV9mbGFncyAmPSB+Vk1fTk9IVUdFUEFHRTsKIAkJKnZtX2ZsYWdzIHw9IFZNX0hVR0VQQUdFOwpAQCAtMTQyNiwxMSArMTQzNSw3IEBACiAJCS8qCiAJCSAqIEJlIHNvbWV3aGF0IG92ZXItcHJvdGVjdGl2ZSBsaWtlIEtTTSBmb3Igbm93IQogCQkgKi8KLQkJaWYgKCp2bV9mbGFncyAmIChWTV9OT0hVR0VQQUdFIHwKLQkJCQkgVk1fU0hBUkVEICAgfCBWTV9NQVlTSEFSRSAgIHwKLQkJCQkgVk1fUEZOTUFQICAgfCBWTV9JTyAgICAgIHwgVk1fRE9OVEVYUEFORCB8Ci0JCQkJIFZNX1JFU0VSVkVEIHwgVk1fSFVHRVRMQiB8IFZNX0lOU0VSVFBBR0UgfAotCQkJCSBWTV9NSVhFRE1BUCB8IFZNX1NBTykpCisJCWlmICgqdm1fZmxhZ3MgJiAoVk1fTk9IVUdFUEFHRSB8IFZNX05PX1RIUCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJKnZtX2ZsYWdzICY9IH5WTV9IVUdFUEFHRTsKIAkJKnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7CkBAIC0xNTY0LDEwICsxNTY5LDE0IEBACiAJCSAqIHBhZ2UgZmF1bHQgaWYgbmVlZGVkLgogCQkgKi8KIAkJcmV0dXJuIDA7Ci0JaWYgKHZtYS0+dm1fZmlsZSB8fCB2bWEtPnZtX29wcykKKwlpZiAodm1hLT52bV9vcHMpCiAJCS8qIGtodWdlcGFnZWQgbm90IHlldCB3b3JraW5nIG9uIGZpbGUgb3Igc3BlY2lhbCBtYXBwaW5ncyAqLwogCQlyZXR1cm4gMDsKLQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJLyoKKwkgKiBJZiBpc19wZm5fbWFwcGluZygpIGlzIHRydWUgaXNfbGVhcm5fcGZuX21hcHBpbmcoKSBtdXN0IGJlCisJICogdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCSAqLworCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCB2bWEtPnZtX2ZsYWdzICYgVk1fTk9fVEhQKTsKIAloc3RhcnQgPSAodm1hLT52bV9zdGFydCArIH5IUEFHRV9QTURfTUFTSykgJiBIUEFHRV9QTURfTUFTSzsKIAloZW5kID0gdm1hLT52bV9lbmQgJiBIUEFHRV9QTURfTUFTSzsKIAlpZiAoaHN0YXJ0IDwgaGVuZCkKQEAgLTE3ODQsOSArMTc5MywxMSBAQAogCQkJCSAgICAgIG5vZGUsIF9fR0ZQX09USEVSX05PREUpOwogCWlmICh1bmxpa2VseSghbmV3X3BhZ2UpKSB7CiAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpOwogCQkqaHBhZ2UgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQlyZXR1cm47CiAJfQorCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQyk7CiAJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UobmV3X3BhZ2UsIG1tLCBHRlBfS0VSTkVMKSkpIHsKIAkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJcHV0X3BhZ2UobmV3X3BhZ2UpOwpAQCAtMTgxNiwxMiArMTgyNywxNSBAQAogCSAgICAodm1hLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpKQogCQlnb3RvIG91dDsKIAotCS8qIFZNX1BGTk1BUCB2bWFzIG1heSBoYXZlIHZtX29wcyBudWxsIGJ1dCB2bV9maWxlIHNldCAqLwotCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzKQogCQlnb3RvIG91dDsKIAlpZiAoaXNfdm1hX3RlbXBvcmFyeV9zdGFjayh2bWEpKQogCQlnb3RvIG91dDsKLQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJLyoKKwkgKiBJZiBpc19wZm5fbWFwcGluZygpIGlzIHRydWUgaXNfbGVhcm5fcGZuX21hcHBpbmcoKSBtdXN0IGJlCisJICogdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCSAqLworCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCB2bWEtPnZtX2ZsYWdzICYgVk1fTk9fVEhQKTsKIAogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOwogCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpCkBAIC0yMDU0LDEzICsyMDY4LDE2IEBACiAJCQlwcm9ncmVzcysrOwogCQkJY29udGludWU7CiAJCX0KLQkJLyogVk1fUEZOTUFQIHZtYXMgbWF5IGhhdmUgdm1fb3BzIG51bGwgYnV0IHZtX2ZpbGUgc2V0ICovCi0JCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcykKIAkJCWdvdG8gc2tpcDsKIAkJaWYgKGlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2sodm1hKSkKIAkJCWdvdG8gc2tpcDsKLQotCQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJCS8qCisJCSAqIElmIGlzX3Bmbl9tYXBwaW5nKCkgaXMgdHJ1ZSBpc19sZWFybl9wZm5fbWFwcGluZygpCisJCSAqIG11c3QgYmUgdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCQkgKi8KKwkJVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8CisJCQkgIHZtYS0+dm1fZmxhZ3MgJiBWTV9OT19USFApOwogCiAJCWhzdGFydCA9ICh2bWEtPnZtX3N0YXJ0ICsgfkhQQUdFX1BNRF9NQVNLKSAmIEhQQUdFX1BNRF9NQVNLOwogCQloZW5kID0gdm1hLT52bV9lbmQgJiBIUEFHRV9QTURfTUFTSzsKQEAgLTIxNTEsOCArMjE2OCwxMSBAQAogI2lmbmRlZiBDT05GSUdfTlVNQQogCQlpZiAoISpocGFnZSkgewogCQkJKmhwYWdlID0gYWxsb2NfaHVnZXBhZ2Uoa2h1Z2VwYWdlZF9kZWZyYWcoKSk7Ci0JCQlpZiAodW5saWtlbHkoISpocGFnZSkpCisJCQlpZiAodW5saWtlbHkoISpocGFnZSkpIHsKKwkJCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0NfRkFJTEVEKTsKIAkJCQlicmVhazsKKwkJCX0KKwkJCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQyk7CiAJCX0KICNlbHNlCiAJCWlmIChJU19FUlIoKmhwYWdlKSkKQEAgLTIxOTIsOCArMjIxMiwxMSBAQAogCiAJZG8gewogCQlocGFnZSA9IGFsbG9jX2h1Z2VwYWdlKGtodWdlcGFnZWRfZGVmcmFnKCkpOwotCQlpZiAoIWhwYWdlKQorCQlpZiAoIWhwYWdlKSB7CisJCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0NfRkFJTEVEKTsKIAkJCWtodWdlcGFnZWRfYWxsb2Nfc2xlZXAoKTsKKwkJfSBlbHNlCisJCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0MpOwogCX0gd2hpbGUgKHVubGlrZWx5KCFocGFnZSkgJiYKIAkJIGxpa2VseShraHVnZXBhZ2VkX2VuYWJsZWQoKSkpOwogCXJldHVybiBocGFnZTsKQEAgLTIyMTAsOCArMjIzMywxMSBAQAogCXdoaWxlIChsaWtlbHkoa2h1Z2VwYWdlZF9lbmFibGVkKCkpKSB7CiAjaWZuZGVmIENPTkZJR19OVU1BCiAJCWhwYWdlID0ga2h1Z2VwYWdlZF9hbGxvY19odWdlcGFnZSgpOwotCQlpZiAodW5saWtlbHkoIWhwYWdlKSkKKwkJaWYgKHVubGlrZWx5KCFocGFnZSkpIHsKKwkJCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpOwogCQkJYnJlYWs7CisJCX0KKwkJY291bnRfdm1fZXZlbnQoVEhQX0NPTExBUFNFX0FMTE9DKTsKICNlbHNlCiAJCWlmIChJU19FUlIoaHBhZ2UpKSB7CiAJCQlraHVnZXBhZ2VkX2FsbG9jX3NsZWVwKCk7CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggMDZkZTVhYS4uOGVlM2JkOCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCWlmIChyZy0+ZnJvbSA+IHQpCiAJCQlyZXR1cm4gY2hnOwogCi0JCS8qIFdlIG92ZXJsYXAgd2l0aCB0aGlzIGFyZWEsIGlmIGl0IGV4dGVuZHMgZnV0aGVyIHRoYW4KKwkJLyogV2Ugb3ZlcmxhcCB3aXRoIHRoaXMgYXJlYSwgaWYgaXQgZXh0ZW5kcyBmdXJ0aGVyIHRoYW4KIAkJICogdXMgdGhlbiB3ZSBtdXN0IGV4dGVuZCBvdXJzZWx2ZXMuICBBY2NvdW50IGZvciBpdHMKIAkJICogZXhpc3RpbmcgcmVzZXJ2YXRpb24uICovCiAJCWlmIChyZy0+dG8gPiB0KSB7CkBAIC04NDIsNyArODQyLDcgQEAKIH0KIAogLyoKLSAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW9kYXRlIGEgcmVzZXJ2YXRpb24KKyAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uCiAgKiBvZiBzaXplICdkZWx0YScuCiAgKi8KIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgaW50IGRlbHRhKQpAQCAtODkwLDcgKzg5MCw3IEBACiAKIAkvKgogCSAqIFRoZSBzdXJwbHVzX2xpc3Qgbm93IGNvbnRhaW5zIF9hdF9sZWFzdF8gdGhlIG51bWJlciBvZiBleHRyYSBwYWdlcwotCSAqIG5lZWRlZCB0byBhY2NvbW9kYXRlIHRoZSByZXNlcnZhdGlvbi4gIEFkZCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyCisJICogbmVlZGVkIHRvIGFjY29tbW9kYXRlIHRoZSByZXNlcnZhdGlvbi4gIEFkZCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyCiAJICogb2YgcGFnZXMgdG8gdGhlIGh1Z2V0bGIgcG9vbCBhbmQgZnJlZSB0aGUgZXh0cmFzIGJhY2sgdG8gdGhlIGJ1ZGR5CiAJICogYWxsb2NhdG9yLiAgQ29tbWl0IHRoZSBlbnRpcmUgcmVzZXJ2YXRpb24gaGVyZSB0byBwcmV2ZW50IGFub3RoZXIKIAkgKiBwcm9jZXNzIGZyb20gc3RlYWxpbmcgdGhlIHBhZ2VzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBwb29sIGJ1dApAQCAtMjA0Myw3ICsyMDQzLDcgQEAKIAkgKiBUaGlzIG5ldyBWTUEgc2hvdWxkIHNoYXJlIGl0cyBzaWJsaW5ncyByZXNlcnZhdGlvbiBtYXAgaWYgcHJlc2VudC4KIAkgKiBUaGUgVk1BIHdpbGwgb25seSBldmVyIGhhdmUgYSB2YWxpZCByZXNlcnZhdGlvbiBtYXAgcG9pbnRlciB3aGVyZQogCSAqIGl0IGlzIGJlaW5nIGNvcGllZCBmb3IgYW5vdGhlciBzdGlsbCBleGlzdGluZyBWTUEuICBBcyB0aGF0IFZNQQotCSAqIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgcmVzZXJ2YXRpb24gbWFwIGl0IGNhbm5vdCBkaXNzYXBwZWFyIHVudGlsCisJICogaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgaXQgY2Fubm90IGRpc2FwcGVhciB1bnRpbAogCSAqIGFmdGVyIHRoaXMgb3BlbiBjYWxsIGNvbXBsZXRlcy4gIEl0IGlzIHRoZXJlZm9yZSBzYWZlIHRvIHRha2UgYQogCSAqIG5ldyByZWZlcmVuY2UgaGVyZSB3aXRob3V0IGFkZGl0aW9uYWwgbG9ja2luZy4KIAkgKi8KQEAgLTI0OTAsNyArMjQ5MCw3IEBACiAJLyoKIAkgKiBDdXJyZW50bHksIHdlIGFyZSBmb3JjZWQgdG8ga2lsbCB0aGUgcHJvY2VzcyBpbiB0aGUgZXZlbnQgdGhlCiAJICogb3JpZ2luYWwgbWFwcGVyIGhhcyB1bm1hcHBlZCBwYWdlcyBmcm9tIHRoZSBjaGlsZCBkdWUgdG8gYSBmYWlsZWQKLQkgKiBDT1cuIFdhcm4gdGhhdCBzdWNoIGEgc2l0dWF0aW9uIGhhcyBvY2N1cmVkIGFzIGl0IG1heSBub3QgYmUgb2J2aW91cworCSAqIENPVy4gV2FybiB0aGF0IHN1Y2ggYSBzaXR1YXRpb24gaGFzIG9jY3VycmVkIGFzIGl0IG1heSBub3QgYmUgb2J2aW91cwogCSAqLwogCWlmIChpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX1VOTUFQUEVEKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9tbS9od3BvaXNvbi1pbmplY3QuYyBiL21tL2h3cG9pc29uLWluamVjdC5jCmluZGV4IDA5NDhmMTAuLmM3ZmM3ZmQgMTAwNjQ0Ci0tLSBhL21tL2h3cG9pc29uLWluamVjdC5jCisrKyBiL21tL2h3cG9pc29uLWluamVjdC5jCkBAIC0xLDQgKzEsNCBAQAotLyogSW5qZWN0IGEgaHdwb2lzb24gbWVtb3J5IGZhaWx1cmUgb24gYSBhcmJpdGFyeSBwZm4gKi8KKy8qIEluamVjdCBhIGh3cG9pc29uIG1lbW9yeSBmYWlsdXJlIG9uIGEgYXJiaXRyYXJ5IHBmbiAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM0MzhkZDQuLjlkMGNlZDggMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKKysrIGIvbW0vaW50ZXJuYWwuaApAQCAtMTYyLDcgKzE2Miw3IEBACiB9CiAKIC8qCi0gKiBJdGVyYXRvciBvdmVyIGFsbCBzdWJwYWdlcyB3aXRoaW5nIHRoZSBtYXhpbWFsbHkgYWxpZ25lZCBnaWdhbnRpYworICogSXRlcmF0b3Igb3ZlciBhbGwgc3VicGFnZXMgd2l0aGluIHRoZSBtYXhpbWFsbHkgYWxpZ25lZCBnaWdhbnRpYwogICogcGFnZSAnYmFzZScuICBIYW5kbGUgYW55IGRpc2NvbnRpZ3VpdHkgaW4gdGhlIG1lbV9tYXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKm1lbV9tYXBfbmV4dChzdHJ1Y3QgcGFnZSAqaXRlciwKZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jCmluZGV4IDg0MjI1ZjMuLmMxZDU4NjcgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKKysrIGIvbW0va21lbWxlYWsuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiB9IHdoaWxlICgwKQogCiAvKgotICogTWFjcm8gaW52b2tlZCB3aGVuIGEgc2VyaW91cyBrbWVtbGVhayBjb25kaXRpb24gb2NjdXJlZCBhbmQgY2Fubm90IGJlCisgKiBNYWNybyBpbnZva2VkIHdoZW4gYSBzZXJpb3VzIGttZW1sZWFrIGNvbmRpdGlvbiBvY2N1cnJlZCBhbmQgY2Fubm90IGJlCiAgKiByZWNvdmVyZWQgZnJvbS4gS21lbWxlYWsgd2lsbCBiZSBkaXNhYmxlZCBhbmQgZnVydGhlciBhbGxvY2F0aW9uL2ZyZWVpbmcKICAqIHRyYWNpbmcgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KICAqLwpAQCAtMTAwNiw3ICsxMDA2LDcgQEAKIAogLyoKICAqIE1lbW9yeSBzY2FubmluZyBpcyBhIGxvbmcgcHJvY2VzcyBhbmQgaXQgbmVlZHMgdG8gYmUgaW50ZXJydXB0YWJsZS4gVGhpcwotICogZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgc3VjaCBpbnRlcnJ1cHQgY29uZGl0aW9uIG9jY3VyZWQuCisgKiBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBzdWNoIGludGVycnVwdCBjb25kaXRpb24gb2NjdXJyZWQuCiAgKi8KIHN0YXRpYyBpbnQgc2Nhbl9zaG91bGRfc3RvcCh2b2lkKQogewpAQCAtMTczMyw3ICsxNzMzLDcgQEAKIAogCWlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZXJyb3IpKSB7CiAJCS8qCi0JCSAqIFNvbWUgZXJyb3Igb2NjdXJlZCBhbmQga21lbWxlYWsgd2FzIGRpc2FibGVkLiBUaGVyZSBpcyBhCisJCSAqIFNvbWUgZXJyb3Igb2NjdXJyZWQgYW5kIGttZW1sZWFrIHdhcyBkaXNhYmxlZC4gVGhlcmUgaXMgYQogCQkgKiBzbWFsbCBjaGFuY2UgdGhhdCBrbWVtbGVha19kaXNhYmxlKCkgd2FzIGNhbGxlZCBpbW1lZGlhdGVseQogCQkgKiBhZnRlciBzZXR0aW5nIGttZW1sZWFrX2luaXRpYWxpemVkIGFuZCB3ZSBtYXkgZW5kIHVwIHdpdGgKIAkJICogdHdvIGNsZWFuLXVwIHRocmVhZHMgYnV0IHNlcmlhbGl6ZWQgYnkgc2Nhbl9tdXRleC4KZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggMWJiZTc4NS4uOTQyZGZjNyAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTcyMCw3ICs3MjAsNyBAQAogCQlzd2FwcGVkID0gUGFnZVN3YXBDYWNoZShwYWdlKTsKIAkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKIAkJLyoKLQkJICogT2sgdGhpcyBpcyB0cmlja3ksIHdoZW4gZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHJ1biBpdCBkb2VzbnQKKwkJICogT2sgdGhpcyBpcyB0cmlja3ksIHdoZW4gZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHJ1biBpdCBkb2Vzbid0CiAJCSAqIHRha2UgYW55IGxvY2ssIHRoZXJlZm9yZSB0aGUgY2hlY2sgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gbWFrZQogCQkgKiB3aXRoIHRoZSBwYWdlY291bnQgYWdhaW5zdCB0aGUgbWFwY291bnQgaXMgcmFjZXkgYW5kCiAJCSAqIE9fRElSRUNUIGNhbiBoYXBwZW4gcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDFmMGI0NjAuLjAxMGY5MTYgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE0NjYsNyArMTQ2Niw3IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKgotCQkJCSAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXR0ZWQgcmVjbGFpbS4KKwkJCQkgKiBXZSB3YW50IHRvIGRvIG1vcmUgdGFyZ2V0ZWQgcmVjbGFpbS4KIAkJCQkgKiBleGNlc3MgPj4gMiBpcyBub3QgdG8gZXhjZXNzaXZlIHNvIGFzIHRvCiAJCQkJICogcmVjbGFpbSB0b28gbXVjaCwgbm9yIHRvbyBsZXNzIHRoYXQgd2Uga2VlcAogCQkJCSAqIGNvbWluZyBiYWNrIHRvIHJlY2xhaW0gZnJvbSB0aGlzIGNncm91cApAQCAtMjI2NSw3ICsyMjY1LDcgQEAKICAqIC0gY29tcG91bmRfbG9jayBpcyBoZWxkIHdoZW4gbnJfcGFnZXMgPiAxCiAgKgogICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGRvICJjaGFyZ2UiIG5vciBjc3NfZ2V0IHRvIG5ldyBjZ3JvdXAuIEl0IHNob3VsZCBiZQotICogZG9uZSBieSBhIGNhbGxlcihfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZSB3b3VsZCBiZSB1c2VmdWxsKS4gSWYgQHVuY2hhcmdlIGlzCisgKiBkb25lIGJ5IGEgY2FsbGVyKF9fbWVtX2Nncm91cF90cnlfY2hhcmdlIHdvdWxkIGJlIHVzZWZ1bCkuIElmIEB1bmNoYXJnZSBpcwogICogdHJ1ZSwgdGhpcyBmdW5jdGlvbiBkb2VzICJ1bmNoYXJnZSIgZnJvbSBvbGQgY2dyb3VwLCBidXQgaXQgZG9lc24ndCBpZgogICogQHVuY2hhcmdlIGlzIGZhbHNlLCBzbyBhIGNhbGxlciBzaG91bGQgZG8gInVuY2hhcmdlIi4KICAqLwpAQCAtMjMxOCw3ICsyMzE4LDcgQEAKIAkgKiBXZSBjaGFyZ2VzIGFnYWluc3QgInRvIiB3aGljaCBtYXkgbm90IGhhdmUgYW55IHRhc2tzLiBUaGVuLCAidG8iCiAJICogY2FuIGJlIHVuZGVyIHJtZGlyKCkuIEJ1dCBpbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBjYWxsZXIgb2YKIAkgKiB0aGlzIGZ1bmN0aW9uIGlzIGp1c3QgZm9yY2VfZW1wdHkoKSBhbmQgbW92ZSBjaGFyZ2UsIHNvIGl0J3MKLQkgKiBnYXJhbnRlZWQgdGhhdCAidG8iIGlzIG5ldmVyIHJlbW92ZWQuIFNvLCB3ZSBkb24ndCBjaGVjayBybWRpcgorCSAqIGd1YXJhbnRlZWQgdGhhdCAidG8iIGlzIG5ldmVyIHJlbW92ZWQuIFNvLCB3ZSBkb24ndCBjaGVjayBybWRpcgogCSAqIHN0YXR1cyBoZXJlLgogCSAqLwogCW1vdmVfdW5sb2NrX3BhZ2VfY2dyb3VwKHBjLCAmZmxhZ3MpOwpAQCAtMjY0OCw3ICsyNjQ4LDcgQEAKIAkJYmF0Y2gtPm1lbWNnID0gbWVtOwogCS8qCiAJICogZG9fYmF0Y2ggPiAwIHdoZW4gdW5tYXBwaW5nIHBhZ2VzIG9yIGlub2RlIGludmFsaWRhdGUvdHJ1bmNhdGUuCi0JICogSW4gdGhvc2UgY2FzZXMsIGFsbCBwYWdlcyBmcmVlZCBjb250aW5vdXNseSBjYW4gYmUgZXhwZWN0ZWQgdG8gYmUgaW4KKwkgKiBJbiB0aG9zZSBjYXNlcywgYWxsIHBhZ2VzIGZyZWVkIGNvbnRpbnVvdXNseSBjYW4gYmUgZXhwZWN0ZWQgdG8gYmUgaW4KIAkgKiB0aGUgc2FtZSBjZ3JvdXAgYW5kIHdlIGhhdmUgY2hhbmNlIHRvIGNvYWxlc2NlIHVuY2hhcmdlcy4KIAkgKiBCdXQgd2UgZG8gdW5jaGFyZ2Ugb25lIGJ5IG9uZSBpZiB0aGlzIGlzIGtpbGxlZCBieSBPT00oVElGX01FTURJRSkKIAkgKiBiZWNhdXNlIHdlIHdhbnQgdG8gZG8gdW5jaGFyZ2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDM3ZmViOWYuLjJiOWE1ZWUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJICogRG9uJ3QgdXNlIGZvcmNlIGhlcmUsIGl0J3MgY29udmVuaWVudCBpZiB0aGUgc2lnbmFsCiAJICogY2FuIGJlIHRlbXBvcmFyaWx5IGJsb2NrZWQuCiAJICogVGhpcyBjb3VsZCBjYXVzZSBhIGxvb3Agd2hlbiB0aGUgdXNlciBzZXRzIFNJR0JVUwotCSAqIHRvIFNJR19JR04sIGJ1dCBob3BlZnVsbHkgbm9vbmUgd2lsbCBkbyB0aGF0PworCSAqIHRvIFNJR19JR04sIGJ1dCBob3BlZnVsbHkgbm8gb25lIHdpbGwgZG8gdGhhdD8KIAkgKi8KIAlyZXQgPSBzZW5kX3NpZ19pbmZvKFNJR0JVUywgJnNpLCB0KTsgIC8qIHN5bmNocm9ub3VzPyAqLwogCWlmIChyZXQgPCAwKQpAQCAtNjM0LDcgKzYzNCw3IEBACiAJCSAqIHdoZW4gdGhlIHBhZ2UgaXMgcmVyZWFkIG9yIGRyb3BwZWQuICBJZiBhbgogCQkgKiBhcHBsaWNhdGlvbiBhc3N1bWVzIGl0IHdpbGwgYWx3YXlzIGdldCBlcnJvciBvbgogCQkgKiBmc3luYywgYnV0IGRvZXMgb3RoZXIgb3BlcmF0aW9ucyBvbiB0aGUgZmQgYmVmb3JlCi0JCSAqIGFuZCB0aGUgcGFnZSBpcyBkcm9wcGVkIGluYmV0d2VlbiB0aGVuIHRoZSBlcnJvcgorCQkgKiBhbmQgdGhlIHBhZ2UgaXMgZHJvcHBlZCBiZXR3ZWVuIHRoZW4gdGhlIGVycm9yCiAJCSAqIHdpbGwgbm90IGJlIHByb3Blcmx5IHJlcG9ydGVkLgogCQkgKgogCQkgKiBUaGlzIGNhbiBhbHJlYWR5IGhhcHBlbiBldmVuIHdpdGhvdXQgaHdwb2lzb25lZApAQCAtNzI4LDcgKzcyOCw3IEBACiAgKiBUaGUgdGFibGUgbWF0Y2hlcyB0aGVtIGluIG9yZGVyIGFuZCBjYWxscyB0aGUgcmlnaHQgaGFuZGxlci4KICAqCiAgKiBUaGlzIGlzIHF1aXRlIHRyaWNreSBiZWNhdXNlIHdlIGNhbiBhY2Nlc3MgcGFnZSBhdCBhbnkgdGltZQotICogaW4gaXRzIGxpdmUgY3ljbGUsIHNvIGFsbCBhY2Nlc3NlcyBoYXZlIHRvIGJlIGV4dHJlbWx5IGNhcmVmdWwuCisgKiBpbiBpdHMgbGl2ZSBjeWNsZSwgc28gYWxsIGFjY2Vzc2VzIGhhdmUgdG8gYmUgZXh0cmVtZWx5IGNhcmVmdWwuCiAgKgogICogVGhpcyBpcyBub3QgY29tcGxldGUuIE1vcmUgc3RhdGVzIGNvdWxkIGJlIGFkZGVkLgogICogRm9yIGFueSBtaXNzaW5nIHN0YXRlIGRvbid0IGF0dGVtcHQgcmVjb3ZlcnkuCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDlkYThjYWIuLjYxZTY2ZjAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0xMzU5LDcgKzEzNTksNyBAQAogCQkgKi8KIAkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwogCX0KLQlpZiAoZmxhZ3MgJiBGT0xMX01MT0NLKSB7CisJaWYgKChmbGFncyAmIEZPTExfTUxPQ0spICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkgewogCQkvKgogCQkgKiBUaGUgcHJlbGltaW5hcnkgbWFwcGluZyBjaGVjayBpcyBtYWlubHkgdG8gYXZvaWQgdGhlCiAJCSAqIHBvaW50bGVzcyBvdmVyaGVhZCBvZiBsb2NrX3BhZ2Ugb24gdGhlIFpFUk9fUEFHRQpAQCAtMTQxMCw2ICsxNDEwLDEyIEBACiAJcmV0dXJuIHBhZ2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gc3RhY2tfZ3VhcmRfcGFnZV9zdGFydCh2bWEsIGFkZHIpIHx8CisJICAgICAgIHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHZtYSwgYWRkcitQQUdFX1NJWkUpOworfQorCiAvKioKICAqIF9fZ2V0X3VzZXJfcGFnZXMoKSAtIHBpbiB1c2VyIHBhZ2VzIGluIG1lbW9yeQogICogQHRzazoJdGFza19zdHJ1Y3Qgb2YgdGFyZ2V0IHRhc2sKQEAgLTE0ODgsNyArMTQ5NCw2IEBACiAJCXZtYSA9IGZpbmRfZXh0ZW5kX3ZtYShtbSwgc3RhcnQpOwogCQlpZiAoIXZtYSAmJiBpbl9nYXRlX2FyZWEobW0sIHN0YXJ0KSkgewogCQkJdW5zaWduZWQgbG9uZyBwZyA9IHN0YXJ0ICYgUEFHRV9NQVNLOwotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnYXRlX3ZtYSA9IGdldF9nYXRlX3ZtYShtbSk7CiAJCQlwZ2RfdCAqcGdkOwogCQkJcHVkX3QgKnB1ZDsKIAkJCXBtZF90ICpwbWQ7CkBAIC0xNTEzLDEwICsxNTE4LDExIEBACiAJCQkJcHRlX3VubWFwKHB0ZSk7CiAJCQkJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiAJCQl9CisJCQl2bWEgPSBnZXRfZ2F0ZV92bWEobW0pOwogCQkJaWYgKHBhZ2VzKSB7CiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkJCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2UoZ2F0ZV92bWEsIHN0YXJ0LCAqcHRlKTsKKwkJCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBzdGFydCwgKnB0ZSk7CiAJCQkJaWYgKCFwYWdlKSB7CiAJCQkJCWlmICghKGd1cF9mbGFncyAmIEZPTExfRFVNUCkgJiYKIAkJCQkJICAgICBpc196ZXJvX3BmbihwdGVfcGZuKCpwdGUpKSkKQEAgLTE1MzAsMTIgKzE1MzYsNyBAQAogCQkJCWdldF9wYWdlKHBhZ2UpOwogCQkJfQogCQkJcHRlX3VubWFwKHB0ZSk7Ci0JCQlpZiAodm1hcykKLQkJCQl2bWFzW2ldID0gZ2F0ZV92bWE7Ci0JCQlpKys7Ci0JCQlzdGFydCArPSBQQUdFX1NJWkU7Ci0JCQlucl9wYWdlcy0tOwotCQkJY29udGludWU7CisJCQlnb3RvIG5leHRfcGFnZTsKIAkJfQogCiAJCWlmICghdm1hIHx8CkBAIC0xNTY1LDYgKzE1NjYsMTEgQEAKIAkJCQlpbnQgcmV0OwogCQkJCXVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IDA7CiAKKwkJCQkvKiBGb3IgbWxvY2ssIGp1c3Qgc2tpcCB0aGUgc3RhY2sgZ3VhcmQgcGFnZS4gKi8KKwkJCQlpZiAoZm9sbF9mbGFncyAmIEZPTExfTUxPQ0spIHsKKwkJCQkJaWYgKHN0YWNrX2d1YXJkX3BhZ2Uodm1hLCBzdGFydCkpCisJCQkJCQlnb3RvIG5leHRfcGFnZTsKKwkJCQl9CiAJCQkJaWYgKGZvbGxfZmxhZ3MgJiBGT0xMX1dSSVRFKQogCQkJCQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwogCQkJCWlmIChub25ibG9ja2luZykKQEAgLTE2MzEsNiArMTYzNyw3IEBACiAJCQkJZmx1c2hfYW5vbl9wYWdlKHZtYSwgcGFnZSwgc3RhcnQpOwogCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJfQorbmV4dF9wYWdlOgogCQkJaWYgKHZtYXMpCiAJCQkJdm1hc1tpXSA9IHZtYTsKIAkJCWkrKzsKQEAgLTMzODYsNyArMzM5Myw3IEBACiAJICogcnVuIHB0ZV9vZmZzZXRfbWFwIG9uIHRoZSBwbWQsIGlmIGFuIGh1Z2UgcG1kIGNvdWxkCiAJICogbWF0ZXJpYWxpemUgZnJvbSB1bmRlciB1cyBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4KIAkgKi8KLQlpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHZtYSwgcG1kLCBhZGRyZXNzKSkpCisJaWYgKHVubGlrZWx5KHBtZF9ub25lKCpwbWQpKSAmJiBfX3B0ZV9hbGxvYyhtbSwgdm1hLCBwbWQsIGFkZHJlc3MpKQogCQlyZXR1cm4gVk1fRkFVTFRfT09NOwogCS8qIGlmIGFuIGh1Z2UgcG1kIG1hdGVyaWFsaXplZCBmcm9tIHVuZGVyIHVzIGp1c3QgcmV0cnkgbGF0ZXIgKi8KIAlpZiAodW5saWtlbHkocG1kX3RyYW5zX2h1Z2UoKnBtZCkpKQpAQCAtMzY3OCw3ICszNjg1LDcgQEAKIAkJCSAqLwogI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVAogCQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwotCQkJaWYgKCF2bWEpCisJCQlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcikKIAkJCQlicmVhazsKIAkJCWlmICh2bWEtPnZtX29wcyAmJiB2bWEtPnZtX29wcy0+YWNjZXNzKQogCQkJCXJldCA9IHZtYS0+dm1fb3BzLT5hY2Nlc3Modm1hLCBhZGRyLCBidWYsCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCAzMjFmYzc0Li45Y2ExZDYwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQotCW1heF9tYXBuciA9IG1heChwYWdlX3RvX3BmbihwYWdlKSwgbWF4X21hcG5yKTsKKwltYXhfbWFwbnIgPSBtYXgocGZuLCBtYXhfbWFwbnIpOwogI2VuZGlmCiAKIAlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKQEAgLTcyNCw3ICs3MjQsNyBAQAogCQkJICAgICAgIHBmbik7CiAJCQlkdW1wX3BhZ2UocGFnZSk7CiAjZW5kaWYKLQkJCS8qIEJlY2FzdWUgd2UgZG9uJ3QgaGF2ZSBiaWcgem9uZS0+bG9jay4gd2Ugc2hvdWxkCisJCQkvKiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYmlnIHpvbmUtPmxvY2suIHdlIHNob3VsZAogCQkJICAgY2hlY2sgdGhpcyBhZ2FpbiBoZXJlLiAqLwogCQkJaWYgKHBhZ2VfY291bnQocGFnZSkpIHsKIAkJCQlub3RfbWFuYWdlZCsrOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGIwNDA2ZDcuLjM0MTMyZjggMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCQkgKiByZWRvIHRoZSBhY2NvdW50aW5nIHRoYXQgY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8gdW5kaWQsCiAJCSAqIGJ1dCB3ZSBjYW4ndCB1c2Ugc2V0X3BhZ2VfZGlydHkgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uCiAJCSAqIGlzIGFjdHVhbGx5IGEgc2lnbmFsIHRoYXQgYWxsIG9mIHRoZSBwYWdlIGhhcyBiZWNvbWUgZGlydHkuCi0JCSAqIFdoZXJhcyBvbmx5IHBhcnQgb2Ygb3VyIHBhZ2UgbWF5IGJlIGRpcnR5LgorCQkgKiBXaGVyZWFzIG9ubHkgcGFydCBvZiBvdXIgcGFnZSBtYXkgYmUgZGlydHkuCiAJCSAqLwogCQlfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycyhuZXdwYWdlKTsKICAJfQpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggMjY4OWEwOGMuLjUxNmIyYzIgMTAwNjQ0Ci0tLSBhL21tL21sb2NrLmMKKysrIGIvbW0vbWxvY2suYwpAQCAtMTM1LDEzICsxMzUsNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3RhY2tfZ3VhcmRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikgJiYKLQkJKHZtYS0+dm1fc3RhcnQgPT0gYWRkcikgJiYKLQkJIXZtYV9zdGFja19jb250aW51ZSh2bWEtPnZtX3ByZXYsIGFkZHIpOwotfQotCiAvKioKICAqIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSAgbWxvY2sgYSByYW5nZSBvZiBwYWdlcyBpbiB0aGUgdm1hLgogICogQHZtYTogICB0YXJnZXQgdm1hCkBAIC0xNjksNyArMTYyLDcgQEAKIAlWTV9CVUdfT04oZW5kICAgPiB2bWEtPnZtX2VuZCk7CiAJVk1fQlVHX09OKCFyd3NlbV9pc19sb2NrZWQoJm1tLT5tbWFwX3NlbSkpOwogCi0JZ3VwX2ZsYWdzID0gRk9MTF9UT1VDSDsKKwlndXBfZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9NTE9DSzsKIAkvKgogCSAqIFdlIHdhbnQgdG8gdG91Y2ggd3JpdGFibGUgbWFwcGluZ3Mgd2l0aCBhIHdyaXRlIGZhdWx0IGluIG9yZGVyCiAJICogdG8gYnJlYWsgQ09XLCBleGNlcHQgZm9yIHNoYXJlZCBtYXBwaW5ncyBiZWNhdXNlIHRoZXNlIGRvbid0IENPVwpAQCAtMTg1LDE1ICsxNzgsNiBAQAogCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKQogCQlndXBfZmxhZ3MgfD0gRk9MTF9GT1JDRTsKIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQlndXBfZmxhZ3MgfD0gRk9MTF9NTE9DSzsKLQotCS8qIFdlIGRvbid0IHRyeSB0byBhY2Nlc3MgdGhlIGd1YXJkIHBhZ2Ugb2YgYSBzdGFjayB2bWEgKi8KLQlpZiAoc3RhY2tfZ3VhcmRfcGFnZSh2bWEsIHN0YXJ0KSkgewotCQlhZGRyICs9IFBBR0VfU0laRTsKLQkJbnJfcGFnZXMtLTsKLQl9Ci0KIAlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgYWRkciwgbnJfcGFnZXMsIGd1cF9mbGFncywKIAkJCQlOVUxMLCBOVUxMLCBub25ibG9ja2luZyk7CiB9CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggMmVjOGViNS4uNzcyMTQwYyAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJICogcmFuZG9taXplX3ZhX3NwYWNlIHRvIDIsIHdoaWNoIHdpbGwgc3RpbGwgY2F1c2UgbW0tPnN0YXJ0X2JyawogCSAqIHRvIGJlIGFyYml0cmFyaWx5IHNoaWZ0ZWQKIAkgKi8KLQlpZiAobW0tPnN0YXJ0X2JyayA+IFBBR0VfQUxJR04obW0tPmVuZF9kYXRhKSkKKwlpZiAoY3VycmVudC0+YnJrX3JhbmRvbWl6ZWQpCiAJCW1pbl9icmsgPSBtbS0+c3RhcnRfYnJrOwogCWVsc2UKIAkJbWluX2JyayA9IG1tLT5lbmRfZGF0YTsKQEAgLTE3NjcsMTAgKzE3NjcsMTMgQEAKIAkJc2l6ZSA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OwogCQlncm93ID0gKGFkZHJlc3MgLSB2bWEtPnZtX2VuZCkgPj4gUEFHRV9TSElGVDsKIAotCQllcnJvciA9IGFjY3Rfc3RhY2tfZ3Jvd3RoKHZtYSwgc2l6ZSwgZ3Jvdyk7Ci0JCWlmICghZXJyb3IpIHsKLQkJCXZtYS0+dm1fZW5kID0gYWRkcmVzczsKLQkJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOworCQllcnJvciA9IC1FTk9NRU07CisJCWlmICh2bWEtPnZtX3Bnb2ZmICsgKHNpemUgPj4gUEFHRV9TSElGVCkgPj0gdm1hLT52bV9wZ29mZikgeworCQkJZXJyb3IgPSBhY2N0X3N0YWNrX2dyb3d0aCh2bWEsIHNpemUsIGdyb3cpOworCQkJaWYgKCFlcnJvcikgeworCQkJCXZtYS0+dm1fZW5kID0gYWRkcmVzczsKKwkJCQlwZXJmX2V2ZW50X21tYXAodm1hKTsKKwkJCX0KIAkJfQogCX0KIAl2bWFfdW5sb2NrX2Fub25fdm1hKHZtYSk7CkBAIC0xODE0LDExICsxODE3LDE0IEBACiAJCXNpemUgPSB2bWEtPnZtX2VuZCAtIGFkZHJlc3M7CiAJCWdyb3cgPSAodm1hLT52bV9zdGFydCAtIGFkZHJlc3MpID4+IFBBR0VfU0hJRlQ7CiAKLQkJZXJyb3IgPSBhY2N0X3N0YWNrX2dyb3d0aCh2bWEsIHNpemUsIGdyb3cpOwotCQlpZiAoIWVycm9yKSB7Ci0JCQl2bWEtPnZtX3N0YXJ0ID0gYWRkcmVzczsKLQkJCXZtYS0+dm1fcGdvZmYgLT0gZ3JvdzsKLQkJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOworCQllcnJvciA9IC1FTk9NRU07CisJCWlmIChncm93IDw9IHZtYS0+dm1fcGdvZmYpIHsKKwkJCWVycm9yID0gYWNjdF9zdGFja19ncm93dGgodm1hLCBzaXplLCBncm93KTsKKwkJCWlmICghZXJyb3IpIHsKKwkJCQl2bWEtPnZtX3N0YXJ0ID0gYWRkcmVzczsKKwkJCQl2bWEtPnZtX3Bnb2ZmIC09IGdyb3c7CisJCQkJcGVyZl9ldmVudF9tbWFwKHZtYSk7CisJCQl9CiAJCX0KIAl9CiAJdm1hX3VubG9ja19hbm9uX3ZtYSh2bWEpOwpkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCAxZGU5OGQ0Li5hN2MxZjlmIDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMjc3LDkgKzI3NywxNiBAQAogCWlmIChvbGRfbGVuID4gdm1hLT52bV9lbmQgLSBhZGRyKQogCQlnb3RvIEVmYXVsdDsKIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSB7Ci0JCWlmIChuZXdfbGVuID4gb2xkX2xlbikKKwkvKiBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYSBncm93aW5nIG1hcHBpbmcgKi8KKwlpZiAobmV3X2xlbiA+IG9sZF9sZW4pIHsKKwkJdW5zaWduZWQgbG9uZyBwZ29mZjsKKworCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9ET05URVhQQU5EIHwgVk1fUEZOTUFQKSkKIAkJCWdvdG8gRWZhdWx0OworCQlwZ29mZiA9IChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwkJcGdvZmYgKz0gdm1hLT52bV9wZ29mZjsKKwkJaWYgKHBnb2ZmICsgKG5ld19sZW4gPj4gUEFHRV9TSElGVCkgPCBwZ29mZikKKwkJCWdvdG8gRWludmFsOwogCX0KIAogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CmRpZmYgLS1naXQgYS9tbS9ub2Jvb3RtZW0uYyBiL21tL25vYm9vdG1lbS5jCmluZGV4IGU5OWY2Y2QuLjkxMDkwNDkgMTAwNjQ0Ci0tLSBhL21tL25vYm9vdG1lbS5jCisrKyBiL21tL25vYm9vdG1lbS5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIHsKIAkvKgogCSAqIFdlIG5lZWQgdG8gdXNlIE1BWF9OVU1OT0RFUyBpbnN0ZWFkIG9mIE5PREVfREFUQSgwKS0+bm9kZV9pZAotCSAqICBiZWNhdXNlIGluIHNvbWUgY2FzZSBsaWtlIE5vZGUwIGRvZXNudCBoYXZlIFJBTSBpbnN0YWxsZWQKKwkgKiAgYmVjYXVzZSBpbiBzb21lIGNhc2UgbGlrZSBOb2RlMCBkb2Vzbid0IGhhdmUgUkFNIGluc3RhbGxlZAogCSAqICBsb3cgcmFtIHdpbGwgYmUgb24gTm9kZTEKIAkgKiBVc2UgTUFYX05VTU5PREVTIHdpbGwgbWFrZSBzdXJlIGFsbCByYW5nZXMgaW4gZWFybHlfbm9kZV9tYXBbXQogCSAqICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBvbmx5IE5vZGUwIHJlbGF0ZWQKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDZhODE5ZDEuLmY1MmU4NWMgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtODQsMjQgKzg0LDYgQEAKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCiAvKgotICogSWYgdGhpcyBpcyBhIHN5c3RlbSBPT00gKG5vdCBhIG1lbWNnIE9PTSkgYW5kIHRoZSB0YXNrIHNlbGVjdGVkIHRvIGJlCi0gKiBraWxsZWQgaXMgbm90IGFscmVhZHkgcnVubmluZyBhdCBoaWdoIChSVCkgcHJpb3JpdGllcywgc3BlZWQgdXAgdGhlCi0gKiByZWNvdmVyeSBieSBib29zdGluZyB0aGUgZHlpbmcgdGFzayB0byB0aGUgbG93ZXN0IEZJRk8gcHJpb3JpdHkuCi0gKiBUaGF0IGhlbHBzIHdpdGggdGhlIHJlY292ZXJ5IGFuZCBhdm9pZHMgaW50ZXJmZXJpbmcgd2l0aCBSVCB0YXNrcy4KLSAqLwotc3RhdGljIHZvaWQgYm9vc3RfZHlpbmdfdGFza19wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0Jc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSAxIH07Ci0KLQlpZiAobWVtKQotCQlyZXR1cm47Ci0KLQlpZiAoIXJ0X3Rhc2socCkpCi0JCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHAsIFNDSEVEX0ZJRk8sICZwYXJhbSk7Ci19Ci0KLS8qCiAgKiBUaGUgcHJvY2VzcyBwIG1heSBoYXZlIGRldGFjaGVkIGl0cyBvd24gLT5tbSB3aGlsZSBleGl0aW5nIG9yIHRocm91Z2gKICAqIHVzZV9tbSgpLCBidXQgb25lIG9yIG1vcmUgb2YgaXRzIHN1YnRocmVhZHMgbWF5IHN0aWxsIGhhdmUgYSB2YWxpZAogICogcG9pbnRlci4gIFJldHVybiBwLCBvciBhbnkgb2YgaXRzIHN1YnRocmVhZHMgd2l0aCBhIHZhbGlkIC0+bW0sIHdpdGgKQEAgLTE5MCwxMCArMTcyLDEzIEBACiAKIAkvKgogCSAqIFRoZSBiYXNlbGluZSBmb3IgdGhlIGJhZG5lc3Mgc2NvcmUgaXMgdGhlIHByb3BvcnRpb24gb2YgUkFNIHRoYXQgZWFjaAotCSAqIHRhc2sncyByc3MgYW5kIHN3YXAgc3BhY2UgdXNlLgorCSAqIHRhc2sncyByc3MsIHBhZ2V0YWJsZSBhbmQgc3dhcCBzcGFjZSB1c2UuCiAJICovCi0JcG9pbnRzID0gKGdldF9tbV9yc3MocC0+bW0pICsgZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX1NXQVBFTlRTKSkgKiAxMDAwIC8KLQkJCXRvdGFscGFnZXM7CisJcG9pbnRzID0gZ2V0X21tX3JzcyhwLT5tbSkgKyBwLT5tbS0+bnJfcHRlczsKKwlwb2ludHMgKz0gZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX1NXQVBFTlRTKTsKKworCXBvaW50cyAqPSAxMDAwOworCXBvaW50cyAvPSB0b3RhbHBhZ2VzOwogCXRhc2tfdW5sb2NrKHApOwogCiAJLyoKQEAgLTQ1MiwxMyArNDM3LDYgQEAKIAlzZXRfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9NRU1ESUUpOwogCWZvcmNlX3NpZyhTSUdLSUxMLCBwKTsKIAotCS8qCi0JICogV2UgZ2l2ZSBvdXIgc2FjcmlmaWNpYWwgbGFtYiBoaWdoIHByaW9yaXR5IGFuZCBhY2Nlc3MgdG8KLQkgKiBhbGwgdGhlIG1lbW9yeSBpdCBuZWVkcy4gVGhhdCB3YXkgaXQgc2hvdWxkIGJlIGFibGUgdG8KLQkgKiBleGl0KCkgYW5kIGNsZWFyIG91dCBpdHMgcmVzb3VyY2VzIHF1aWNrbHkuLi4KLQkgKi8KLQlib29zdF9keWluZ190YXNrX3ByaW8ocCwgbWVtKTsKLQogCXJldHVybiAwOwogfQogI3VuZGVmIEsKQEAgLTQ4Miw3ICs0NjAsNiBAQAogCSAqLwogCWlmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcpIHsKIAkJc2V0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTUVNRElFKTsKLQkJYm9vc3RfZHlpbmdfdGFza19wcmlvKHAsIG1lbSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTU2LDcgKzUzMyw2IEBACiAJICovCiAJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCXNldF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKTsKLQkJYm9vc3RfZHlpbmdfdGFza19wcmlvKGN1cnJlbnQsIE5VTEwpOwogCQlyZXR1cm47CiAJfQogCkBAIC03MTIsNyArNjg4LDYgQEAKIAkgKi8KIAlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpOwotCQlib29zdF9keWluZ190YXNrX3ByaW8oY3VycmVudCwgTlVMTCk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBkNmU3YmE3Li4zZjhiY2UyIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC05NDIsNyArOTQyLDcgQEAKIAkJCSAqIElmIGJyZWFraW5nIGEgbGFyZ2UgYmxvY2sgb2YgcGFnZXMsIG1vdmUgYWxsIGZyZWUKIAkJCSAqIHBhZ2VzIHRvIHRoZSBwcmVmZXJyZWQgYWxsb2NhdGlvbiBsaXN0LiBJZiBmYWxsaW5nCiAJCQkgKiBiYWNrIGZvciBhIHJlY2xhaW1hYmxlIGtlcm5lbCBhbGxvY2F0aW9uLCBiZSBtb3JlCi0JCQkgKiBhZ3Jlc3NpdmUgYWJvdXQgdGFraW5nIG93bmVyc2hpcCBvZiBmcmVlIHBhZ2VzCisJCQkgKiBhZ2dyZXNzaXZlIGFib3V0IHRha2luZyBvd25lcnNoaXAgb2YgZnJlZSBwYWdlcwogCQkJICovCiAJCQlpZiAodW5saWtlbHkoY3VycmVudF9vcmRlciA+PSAocGFnZWJsb2NrX29yZGVyID4+IDEpKSB8fAogCQkJCQlzdGFydF9taWdyYXRldHlwZSA9PSBNSUdSQVRFX1JFQ0xBSU1BQkxFIHx8CkBAIC0yMzE3LDYgKzIzMTcsMjEgQEAKIAogRVhQT1JUX1NZTUJPTChmcmVlX3BhZ2VzKTsKIAorc3RhdGljIHZvaWQgKm1ha2VfYWxsb2NfZXhhY3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBvcmRlciwgc2l6ZV90IHNpemUpCit7CisJaWYgKGFkZHIpIHsKKwkJdW5zaWduZWQgbG9uZyBhbGxvY19lbmQgPSBhZGRyICsgKFBBR0VfU0laRSA8PCBvcmRlcik7CisJCXVuc2lnbmVkIGxvbmcgdXNlZCA9IGFkZHIgKyBQQUdFX0FMSUdOKHNpemUpOworCisJCXNwbGl0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopYWRkciksIG9yZGVyKTsKKwkJd2hpbGUgKHVzZWQgPCBhbGxvY19lbmQpIHsKKwkJCWZyZWVfcGFnZSh1c2VkKTsKKwkJCXVzZWQgKz0gUEFHRV9TSVpFOworCQl9CisJfQorCXJldHVybiAodm9pZCAqKWFkZHI7Cit9CisKIC8qKgogICogYWxsb2NfcGFnZXNfZXhhY3QgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgcGh5c2ljYWxseS1jb250aWd1b3VzIHBhZ2VzLgogICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKQEAgLTIzMzYsMjIgKzIzNTEsMzMgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlhZGRyID0gX19nZXRfZnJlZV9wYWdlcyhnZnBfbWFzaywgb3JkZXIpOwotCWlmIChhZGRyKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWxsb2NfZW5kID0gYWRkciArIChQQUdFX1NJWkUgPDwgb3JkZXIpOwotCQl1bnNpZ25lZCBsb25nIHVzZWQgPSBhZGRyICsgUEFHRV9BTElHTihzaXplKTsKLQotCQlzcGxpdF9wYWdlKHZpcnRfdG9fcGFnZSgodm9pZCAqKWFkZHIpLCBvcmRlcik7Ci0JCXdoaWxlICh1c2VkIDwgYWxsb2NfZW5kKSB7Ci0JCQlmcmVlX3BhZ2UodXNlZCk7Ci0JCQl1c2VkICs9IFBBR0VfU0laRTsKLQkJfQotCX0KLQotCXJldHVybiAodm9pZCAqKWFkZHI7CisJcmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoYWRkciwgb3JkZXIsIHNpemUpOwogfQogRVhQT1JUX1NZTUJPTChhbGxvY19wYWdlc19leGFjdCk7CiAKIC8qKgorICogYWxsb2NfcGFnZXNfZXhhY3RfbmlkIC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIG9mIHBoeXNpY2FsbHktY29udGlndW91cworICoJCQkgICBwYWdlcyBvbiBhIG5vZGUuCisgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQKKyAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlCisgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24KKyAqCisgKiBMaWtlIGFsbG9jX3BhZ2VzX2V4YWN0KCksIGJ1dCB0cnkgdG8gYWxsb2NhdGUgb24gbm9kZSBuaWQgZmlyc3QgYmVmb3JlIGZhbGxpbmcKKyAqIGJhY2suCisgKiBOb3RlIHRoaXMgaXMgbm90IGFsbG9jX3BhZ2VzX2V4YWN0X25vZGUoKSB3aGljaCBhbGxvY2F0ZXMgb24gYSBzcGVjaWZpYyBub2RlLAorICogYnV0IGlzIG5vdCBleGFjdC4KKyAqLwordm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykKK3sKKwl1bnNpZ25lZCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKwlzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzX25vZGUobmlkLCBnZnBfbWFzaywgb3JkZXIpOworCWlmICghcCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHApLCBvcmRlciwgc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25pZCk7CisKKy8qKgogICogZnJlZV9wYWdlc19leGFjdCAtIHJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYWxsb2NfcGFnZXNfZXhhY3QoKQogICogQHZpcnQ6IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhbGxvY19wYWdlc19leGFjdC4KICAqIEBzaXplOiBzaXplIG9mIGFsbG9jYXRpb24sIHNhbWUgdmFsdWUgYXMgcGFzc2VkIHRvIGFsbG9jX3BhZ2VzX2V4YWN0KCkuCkBAIC0zMTc2LDcgKzMyMDIsNyBAQAogICogQ2FsbGVkIHdpdGggem9uZWxpc3RzX211dGV4IGhlbGQgYWx3YXlzCiAgKiB1bmxlc3Mgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HLgogICovCi12b2lkIGJ1aWxkX2FsbF96b25lbGlzdHModm9pZCAqZGF0YSkKK3ZvaWQgX19yZWYgYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKQogewogCXNldF96b25lbGlzdF9vcmRlcigpOwogCkBAIC0zNTY0LDcgKzM1OTAsNyBAQAogCiAJaWYgKCFzbGFiX2lzX2F2YWlsYWJsZSgpKSB7CiAJCXpvbmUtPndhaXRfdGFibGUgPSAod2FpdF9xdWV1ZV9oZWFkX3QgKikKLQkJCWFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYWxsb2Nfc2l6ZSk7CisJCQlhbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ2RhdCwgYWxsb2Nfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhpcyBjYXNlIG1lYW5zIHRoYXQgYSB6b25lIHdob3NlIHNpemUgd2FzIDAgZ2V0cyBuZXcgbWVtb3J5CkBAIC0zOTI2LDcgKzM5NTIsNyBAQAogCiAvKgogICogVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZG8gbm90IGluY2x1ZGUgWk9ORV9NT1ZBQkxFCi0gKiBiZWNhdXNlIGl0IGlzIHNpemVkIGluZGVwZW5kYW50IG9mIGFyY2hpdGVjdHVyZS4gVW5saWtlIHRoZSBvdGhlciB6b25lcywKKyAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLAogICogdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBaT05FX01PVkFCTEUgaXMgbm90IGZpeGVkLiBJdCBtYXkgYmUgZGlmZmVyZW50CiAgKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlCiAgKiBpcyBkaXN0cmlidXRlZC4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gYWRqdXN0cyB0aGUgem9uZSByYW5nZXMKQEAgLTQxNDEsNyArNDE2Nyw4IEBACiAJdW5zaWduZWQgbG9uZyB1c2VtYXBzaXplID0gdXNlbWFwX3NpemUoem9uZXNpemUpOwogCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IE5VTEw7CiAJaWYgKHVzZW1hcHNpemUpCi0JCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgdXNlbWFwc2l6ZSk7CisJCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LAorCQkJCQkJCQkgICB1c2VtYXBzaXplKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdXNlbWFwKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCkBAIC00MzA3LDcgKzQzMzQsNyBAQAogCQlzaXplID0gIChlbmQgLSBzdGFydCkgKiBzaXplb2Yoc3RydWN0IHBhZ2UpOwogCQltYXAgPSBhbGxvY19yZW1hcChwZ2RhdC0+bm9kZV9pZCwgc2l6ZSk7CiAJCWlmICghbWFwKQotCQkJbWFwID0gYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCBzaXplKTsKKwkJCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LCBzaXplKTsKIAkJcGdkYXQtPm5vZGVfbWVtX21hcCA9IG1hcCArIChwZ2RhdC0+bm9kZV9zdGFydF9wZm4gLSBzdGFydCk7CiAJfQogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKaW5kZXggYTEyY2MzZi4uMmRhYWRjMyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jZ3JvdXAuYworKysgYi9tbS9wYWdlX2Nncm91cC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHsKIAl2b2lkICphZGRyID0gTlVMTDsKIAotCWFkZHIgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKKwlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5pZCwgc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKGFkZHIpCiAJCXJldHVybiBhZGRyOwogCkBAIC0zNzcsNyArMzc3LDcgQEAKICAqIEBuZXc6IG5ldyBpZAogICoKICAqIFJldHVybnMgb2xkIGlkIGF0IHN1Y2Nlc3MsIDAgYXQgZmFpbHVyZS4KLSAqIChUaGVyZSBpcyBubyBtZW1fY2dyb3VwIHVzZWluZyAwIGFzIGl0cyBpZCkKKyAqIChUaGVyZSBpcyBubyBtZW1fY2dyb3VwIHVzaW5nIDAgYXMgaXRzIGlkKQogICovCiB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9jbXB4Y2hnKHN3cF9lbnRyeV90IGVudCwKIAkJCQkJdW5zaWduZWQgc2hvcnQgb2xkLCB1bnNpZ25lZCBzaG9ydCBuZXcpCmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDU1ZDRkMTEuLmExNjBkYjMgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC0zNDIsNyArMzQyLDcgQEAKICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKICAqCiAgKiBEZXRlcm1pbmUgd2hldGhlciBhcmVhIG1hcCBvZiBAY2h1bmsgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgdG8KLSAqIGFjY29tb2RhdGUgYSBuZXcgYWxsb2NhdGlvbi4KKyAqIGFjY29tbW9kYXRlIGEgbmV3IGFsbG9jYXRpb24uCiAgKgogICogQ09OVEVYVDoKICAqIHBjcHVfbG9jay4KQEAgLTQzMSw3ICs0MzEsNyBAQAogICogZGVwZW5kaW5nIG9uIEBoZWFkLCBpcyByZWR1Y2VkIGJ5IEB0YWlsIGJ5dGVzIGFuZCBAdGFpbCBieXRlIGJsb2NrCiAgKiBpcyBpbnNlcnRlZCBhZnRlciB0aGUgdGFyZ2V0IGJsb2NrLgogICoKLSAqIEBjaHVuay0+bWFwIG11c3QgaGF2ZSBlbm91Z2ggZnJlZSBzbG90cyB0byBhY2NvbW9kYXRlIHRoZSBzcGxpdC4KKyAqIEBjaHVuay0+bWFwIG11c3QgaGF2ZSBlbm91Z2ggZnJlZSBzbG90cyB0byBhY2NvbW1vZGF0ZSB0aGUgc3BsaXQuCiAgKgogICogQ09OVEVYVDoKICAqIHBjcHVfbG9jay4KQEAgLTE0MzUsNyArMTQzNSw3IEBACiAJLyoKIAkgKiBEZXRlcm1pbmUgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZSBhbmQgbWF4X3VwYSBzdWNoIHRoYXQKIAkgKiBhbGxvY19zaXplIGlzIG11bHRpcGxlIG9mIGF0b21fc2l6ZSBhbmQgaXMgdGhlIHNtYWxsZXN0Ci0JICogd2hpY2ggY2FuIGFjY29tb2RhdGUgNGsgYWxpZ25lZCBzZWdtZW50cyB3aGljaCBhcmUgZXF1YWwgdG8KKwkgKiB3aGljaCBjYW4gYWNjb21tb2RhdGUgNGsgYWxpZ25lZCBzZWdtZW50cyB3aGljaCBhcmUgZXF1YWwgdG8KIAkgKiBvciBsYXJnZXIgdGhhbiBtaW5fdW5pdF9zaXplLgogCSAqLwogCW1pbl91bml0X3NpemUgPSBtYXhfdChzaXplX3QsIHNpemVfc3VtLCBQQ1BVX01JTl9VTklUX1NJWkUpOwpAQCAtMTU1MCw3ICsxNTUwLDcgQEAKICAqIEBhdG9tX3NpemU6IGFsbG9jYXRpb24gYXRvbSBzaXplCiAgKiBAY3B1X2Rpc3RhbmNlX2ZuOiBjYWxsYmFjayB0byBkZXRlcm1pbmUgZGlzdGFuY2UgYmV0d2VlbiBjcHVzLCBvcHRpb25hbAogICogQGFsbG9jX2ZuOiBmdW5jdGlvbiB0byBhbGxvY2F0ZSBwZXJjcHUgcGFnZQotICogQGZyZWVfZm46IGZ1bnRpb24gdG8gZnJlZSBwZXJjcHUgcGFnZQorICogQGZyZWVfZm46IGZ1bmN0aW9uIHRvIGZyZWUgcGVyY3B1IHBhZ2UKICAqCiAgKiBUaGlzIGlzIGEgaGVscGVyIHRvIGVhc2Ugc2V0dGluZyB1cCBlbWJlZGRlZCBmaXJzdCBwZXJjcHUgY2h1bmsgYW5kCiAgKiBjYW4gYmUgY2FsbGVkIHdoZXJlIHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoKSBpcyBleHBlY3RlZC4KQEAgLTE2NzgsNyArMTY3OCw3IEBACiAgKiBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsgLSBtYXAgdGhlIGZpcnN0IGNodW5rIHVzaW5nIFBBR0VfU0laRSBwYWdlcwogICogQHJlc2VydmVkX3NpemU6IHRoZSBzaXplIG9mIHJlc2VydmVkIHBlcmNwdSBhcmVhIGluIGJ5dGVzCiAgKiBAYWxsb2NfZm46IGZ1bmN0aW9uIHRvIGFsbG9jYXRlIHBlcmNwdSBwYWdlLCBhbHdheXMgY2FsbGVkIHdpdGggUEFHRV9TSVpFCi0gKiBAZnJlZV9mbjogZnVudGlvbiB0byBmcmVlIHBlcmNwdSBwYWdlLCBhbHdheXMgY2FsbGVkIHdpdGggUEFHRV9TSVpFCisgKiBAZnJlZV9mbjogZnVuY3Rpb24gdG8gZnJlZSBwZXJjcHUgcGFnZSwgYWx3YXlzIGNhbGxlZCB3aXRoIFBBR0VfU0laRQogICogQHBvcHVsYXRlX3B0ZV9mbjogZnVuY3Rpb24gdG8gcG9wdWxhdGUgcHRlCiAgKgogICogVGhpcyBpcyBhIGhlbHBlciB0byBlYXNlIHNldHRpbmcgdXAgcGFnZS1yZW1hcHBlZCBmaXJzdCBwZXJjcHUKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU4ZGE3YzEuLmRmYzcwNjkgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNDIxLDcgKzQyMSw4IEBACiAJCSAqIGEgd2FzdGUgdG8gYWxsb2NhdGUgaW5kZXggaWYgd2UgY2Fubm90IGFsbG9jYXRlIGRhdGEuCiAJCSAqLwogCQlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7Ci0JCQlpZiAocGVyY3B1X2NvdW50ZXJfY29tcGFyZSgmc2JpbmZvLT51c2VkX2Jsb2NrcywgKHNiaW5mby0+bWF4X2Jsb2NrcyAtIDEpKSA+IDApCisJCQlpZiAocGVyY3B1X2NvdW50ZXJfY29tcGFyZSgmc2JpbmZvLT51c2VkX2Jsb2NrcywKKwkJCQkJCXNiaW5mby0+bWF4X2Jsb2NrcyAtIDEpID49IDApCiAJCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJCQlwZXJjcHVfY291bnRlcl9pbmMoJnNiaW5mby0+dXNlZF9ibG9ja3MpOwogCQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKQEAgLTg1MSw3ICs4NTIsNyBAQAogCiBzdGF0aWMgaW50IHNobWVtX3VudXNlX2lub2RlKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAl1bnNpZ25lZCBsb25nIGlkeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKQEAgLTg3NCw4ICs4NzUsMTAgQEAKIAlpZiAoc2l6ZSA+IFNITUVNX05SX0RJUkVDVCkKIAkJc2l6ZSA9IFNITUVNX05SX0RJUkVDVDsKIAlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JaWYgKG9mZnNldCA+PSAwKQorCWlmIChvZmZzZXQgPj0gMCkgeworCQlzaG1lbV9zd3BfYmFsYW5jZV91bm1hcCgpOwogCQlnb3RvIGZvdW5kOworCX0KIAlpZiAoIWluZm8tPmlfaW5kaXJlY3QpCiAJCWdvdG8gbG9zdDI7CiAKQEAgLTkxMywxMSArOTE2LDExIEBACiAJCQlpZiAoc2l6ZSA+IEVOVFJJRVNfUEVSX1BBR0UpCiAJCQkJc2l6ZSA9IEVOVFJJRVNfUEVSX1BBR0U7CiAJCQlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAkJCWlmIChvZmZzZXQgPj0gMCkgewogCQkJCXNobWVtX2Rpcl91bm1hcChkaXIpOwogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CisJCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAkJfQogCX0KIGxvc3QxOgpAQCAtOTI3LDggKzkzMCw3IEBACiAJcmV0dXJuIDA7CiBmb3VuZDoKIAlpZHggKz0gb2Zmc2V0OwotCWlub2RlID0gaWdyYWIoJmluZm8tPnZmc19pbm9kZSk7Ci0Jc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXB0ciArPSBvZmZzZXQ7CiAKIAkvKgogCSAqIE1vdmUgX2hlYWRfIHRvIHN0YXJ0IHNlYXJjaCBmb3IgbmV4dCBmcm9tIGhlcmUuCkBAIC05MzksMzcgKzk0MSwxOCBAQAogCSAqLwogCWlmIChzaG1lbV9zd2FwbGlzdC5uZXh0ICE9ICZpbmZvLT5zd2FwbGlzdCkKIAkJbGlzdF9tb3ZlX3RhaWwoJnNobWVtX3N3YXBsaXN0LCAmaW5mby0+c3dhcGxpc3QpOwotCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCi0JZXJyb3IgPSAxOwotCWlmICghaW5vZGUpCi0JCWdvdG8gb3V0OwogCS8qCi0JICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdC4KLQkgKiBDaGFyZ2VkIGJhY2sgdG8gdGhlIHVzZXIobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KLQkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKiBXZSByZWx5IG9uIHNobWVtX3N3YXBsaXN0X211dGV4LCBub3Qgb25seSB0byBwcm90ZWN0IHRoZSBzd2FwbGlzdCwKKwkgKiBidXQgYWxzbyB0byBob2xkIHVwIHNobWVtX2V2aWN0X2lub2RlKCk6IHNvIGlub2RlIGNhbm5vdCBiZSBmcmVlZAorCSAqIGJlbmVhdGggdXMgKHBhZ2Vsb2NrIGRvZXNuJ3QgaGVscCB1bnRpbCB0aGUgcGFnZSBpcyBpbiBwYWdlY2FjaGUpLgogCSAqLwotCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UocGFnZSwgY3VycmVudC0+bW0sIEdGUF9LRVJORUwpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0JZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVycm9yID0gMTsKLQotCXNwaW5fbG9jaygmaW5mby0+bG9jayk7Ci0JcHRyID0gc2htZW1fc3dwX2VudHJ5KGluZm8sIGlkeCwgTlVMTCk7Ci0JaWYgKHB0ciAmJiBwdHItPnZhbCA9PSBlbnRyeS52YWwpIHsKLQkJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgaW5vZGUtPmlfbWFwcGluZywKLQkJCQkJCWlkeCwgR0ZQX05PV0FJVCk7Ci0JCS8qIGRvZXMgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlIG9uIGVycm9yICovCi0JfSBlbHNlCS8qIHdlIG11c3QgY29tcGVuc2F0ZSBmb3Igb3VyIHByZWNoYXJnZSBhYm92ZSAqLwotCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJbWFwcGluZyA9IGluZm8tPnZmc19pbm9kZS5pX21hcHBpbmc7CisJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgbWFwcGluZywgaWR4LCBHRlBfTk9XQUlUKTsKKwkvKiB3aGljaCBkb2VzIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZSBvbiBlcnJvciAqLwogCiAJaWYgKGVycm9yID09IC1FRVhJU1QpIHsKLQkJc3RydWN0IHBhZ2UgKmZpbGVwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpZHgpOworCQlzdHJ1Y3QgcGFnZSAqZmlsZXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7CiAJCWVycm9yID0gMTsKIAkJaWYgKGZpbGVwYWdlKSB7CiAJCQkvKgpAQCAtOTg5LDE0ICs5NzIsOCBAQAogCQlzd2FwX2ZyZWUoZW50cnkpOwogCQllcnJvciA9IDE7CS8qIG5vdCBhbiBlcnJvciwgYnV0IGVudHJ5IHdhcyBmb3VuZCAqLwogCX0KLQlpZiAocHRyKQotCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKKwlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwotb3V0OgotCXVubG9ja19wYWdlKHBhZ2UpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQlpcHV0KGlub2RlKTsJCS8qIGFsbG93cyBmb3IgTlVMTCAqLwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTAwOCw2ICs5ODUsMjYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbmV4dDsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbzsKIAlpbnQgZm91bmQgPSAwOworCWludCBlcnJvcjsKKworCS8qCisJICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdCwgYmVmb3JlIHRha2luZworCSAqIHRoZSBzaG1lbV9zd2FwbGlzdF9tdXRleCB3aGljaCBtaWdodCBob2xkIHVwIHNobWVtX3dyaXRlcGFnZSgpLgorCSAqIENoYXJnZWQgYmFjayB0byB0aGUgdXNlciAobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KKwkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKi8KKwllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHBhZ2UsIGN1cnJlbnQtPm1tLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCS8qCisJICogVHJ5IHRvIHByZWxvYWQgd2hpbGUgd2UgY2FuIHdhaXQsIHRvIG5vdCBtYWtlIGEgaGFiaXQgb2YKKwkgKiBkcmFpbmluZyBhdG9taWMgcmVzZXJ2ZXM7IGJ1dCBkb24ndCBsYXRjaCBvbiB0byB0aGlzIGNwdSwKKwkgKiBpdCdzIG9rYXkgaWYgc29tZXRpbWVzIHdlIGdldCByZXNjaGVkdWxlZCBhZnRlciB0aGlzLgorCSAqLworCWVycm9yID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCWlmIChlcnJvcikKKwkJZ290byB1bmNoYXJnZTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiAKIAltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG5leHQsICZzaG1lbV9zd2FwbGlzdCkgewpAQCAtMTAxNSwxNyArMTAxMiwxOSBAQAogCQlmb3VuZCA9IHNobWVtX3VudXNlX2lub2RlKGluZm8sIGVudHJ5LCBwYWdlKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWlmIChmb3VuZCkKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJfQogCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCS8qCi0JICogQ2FuIHNvbWUgcmFjZSBicmluZyB1cyBoZXJlPyAgV2UndmUgYmVlbiBob2xkaW5nIHBhZ2UgbG9jaywKLQkgKiBzbyBJIHRoaW5rIG5vdDsgYnV0IHdvdWxkIHJhdGhlciB0cnkgYWdhaW4gbGF0ZXIgdGhhbiBCVUcoKQotCSAqLworCit1bmNoYXJnZToKKwlpZiAoIWZvdW5kKQorCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJaWYgKGZvdW5kIDwgMCkKKwkJZXJyb3IgPSBmb3VuZDsKK291dDoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci1vdXQ6Ci0JcmV0dXJuIChmb3VuZCA8IDApID8gZm91bmQgOiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKQEAgLTEwNjMsNyArMTA2MiwyNSBAQAogCWVsc2UKIAkJc3dhcC52YWwgPSAwOwogCisJLyoKKwkgKiBBZGQgaW5vZGUgdG8gc2htZW1fdW51c2UoKSdzIGxpc3Qgb2Ygc3dhcHBlZC1vdXQgaW5vZGVzLAorCSAqIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBEbyBpdCBub3cgYmVjYXVzZSB3ZSBjYW5ub3QgdGFrZQorCSAqIG11dGV4IHdoaWxlIGhvbGRpbmcgc3BpbmxvY2ssIGFuZCBtdXN0IGRvIHNvIGJlZm9yZSB0aGUgcGFnZQorCSAqIGlzIG1vdmVkIHRvIHN3YXAgY2FjaGUsIHdoZW4gaXRzIHBhZ2Vsb2NrIG5vIGxvbmdlciBwcm90ZWN0cworCSAqIHRoZSBpbm9kZSBmcm9tIGV2aWN0aW9uLiAgQnV0IGRvbid0IHVubG9jayB0aGUgbXV0ZXggdW50aWwKKwkgKiB3ZSd2ZSB0YWtlbiB0aGUgc3BpbmxvY2ssIGJlY2F1c2Ugc2htZW1fdW51c2VfaW5vZGUoKSB3aWxsCisJICogcHJ1bmUgYSAhc3dhcHBlZCBpbm9kZSBmcm9tIHRoZSBzd2FwbGlzdCB1bmRlciBib3RoIGxvY2tzLgorCSAqLworCWlmIChzd2FwLnZhbCkgeworCQltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisJCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCisJCQlsaXN0X2FkZF90YWlsKCZpbmZvLT5zd2FwbGlzdCwgJnNobWVtX3N3YXBsaXN0KTsKKwl9CisKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOworCWlmIChzd2FwLnZhbCkKKwkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisKIAlpZiAoaW5kZXggPj0gaW5mby0+bmV4dF9pbmRleCkgewogCQlCVUdfT04oIShpbmZvLT5mbGFncyAmIFNITUVNX1RSVU5DQVRFKSk7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMTA4MywyMSArMTEwMCwxMCBAQAogCQlkZWxldGVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCQlzaG1lbV9zd3Bfc2V0KGluZm8sIGVudHJ5LCBzd2FwLnZhbCk7CiAJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCi0JCQlpbm9kZSA9IGlncmFiKGlub2RlKTsKLQkJZWxzZQotCQkJaW5vZGUgPSBOVUxMOwogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCXN3YXBfc2htZW1fYWxsb2Moc3dhcCk7CiAJCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7Ci0JCWlmIChpbm9kZSkgewotCQkJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCQkJLyogbW92ZSBpbnN0ZWFkIG9mIGFkZCBpbiBjYXNlIHdlJ3JlIHJhY2luZyAqLwotCQkJbGlzdF9tb3ZlX3RhaWwoJmluZm8tPnN3YXBsaXN0LCAmc2htZW1fc3dhcGxpc3QpOwotCQkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7Ci0JCQlpcHV0KGlub2RlKTsKLQkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEzOTcsMjEgKzE0MDMsMTYgQEAKIAkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKIAkJc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtPmlfc2IpOwogCQlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7Ci0JCQlpZiAoKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoJnNiaW5mby0+dXNlZF9ibG9ja3MsIHNiaW5mby0+bWF4X2Jsb2NrcykgPiAwKSB8fAotCQkJICAgIHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7Ci0JCQkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCQkJCWVycm9yID0gLUVOT1NQQzsKLQkJCQlnb3RvIGZhaWxlZDsKLQkJCX0KKwkJCWlmIChwZXJjcHVfY291bnRlcl9jb21wYXJlKCZzYmluZm8tPnVzZWRfYmxvY2tzLAorCQkJCQkJc2JpbmZvLT5tYXhfYmxvY2tzKSA+PSAwIHx8CisJCQkgICAgc2htZW1fYWNjdF9ibG9jayhpbmZvLT5mbGFncykpCisJCQkJZ290byBub3NwYWNlOwogCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKIAkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOwogCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQllcnJvciA9IC1FTk9TUEM7Ci0JCQlnb3RvIGZhaWxlZDsKLQkJfQorCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKQorCQkJZ290byBub3NwYWNlOwogCiAJCWlmICghZmlsZXBhZ2UpIHsKIAkJCWludCByZXQ7CkBAIC0xNDkxLDYgKzE0OTIsMjQgQEAKIAllcnJvciA9IDA7CiAJZ290byBvdXQ7CiAKK25vc3BhY2U6CisJLyoKKwkgKiBQZXJoYXBzIHRoZSBwYWdlIHdhcyBicm91Z2h0IGluIGZyb20gc3dhcCBiZXR3ZWVuIGZpbmRfbG9ja19wYWdlCisJICogYW5kIHRha2luZyBpbmZvLT5sb2NrPyAgV2UgYWxsb3cgZm9yIHRoYXQgYXQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1LAorCSAqIGJ1dCBtdXN0IGFsc28gYXZvaWQgcmVwb3J0aW5nIGEgc3B1cmlvdXMgRU5PU1BDIHdoaWxlIHdvcmtpbmcgb24gYQorCSAqIGZ1bGwgdG1wZnMuICAoV2hlbiBmaWxlcGFnZSBoYXMgYmVlbiBwYXNzZWQgaW4gdG8gc2htZW1fZ2V0cGFnZSwgaXQKKwkgKiBpcyBhbHJlYWR5IGluIHBhZ2UgY2FjaGUsIHdoaWNoIHByZXZlbnRzIHRoaXMgcmFjZSBmcm9tIG9jY3VycmluZy4pCisJICovCisJaWYgKCFmaWxlcGFnZSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaWR4KTsKKwkJaWYgKHBhZ2UpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCWdvdG8gcmVwZWF0OworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwllcnJvciA9IC1FTk9TUEM7CiBmYWlsZWQ6CiAJaWYgKCpwYWdlcCAhPSBmaWxlcGFnZSkgewogCQl1bmxvY2tfcGFnZShmaWxlcGFnZSk7CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggNTY4ODAzZi4uNDZhOWMxNiAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtODc4LDcgKzg3OCw3IEBACiAJbmMgPSBrbWFsbG9jX25vZGUobWVtc2l6ZSwgZ2ZwLCBub2RlKTsKIAkvKgogCSAqIFRoZSBhcnJheV9jYWNoZSBzdHJ1Y3R1cmVzIGNvbnRhaW4gcG9pbnRlcnMgdG8gZnJlZSBvYmplY3QuCi0JICogSG93ZXZlciwgd2hlbiBzdWNoIG9iamVjdHMgYXJlIGFsbG9jYXRlZCBvciB0cmFuc2ZlcmVkIHRvIGFub3RoZXIKKwkgKiBIb3dldmVyLCB3aGVuIHN1Y2ggb2JqZWN0cyBhcmUgYWxsb2NhdGVkIG9yIHRyYW5zZmVycmVkIHRvIGFub3RoZXIKIAkgKiBjYWNoZSB0aGUgcG9pbnRlcnMgYXJlIG5vdCBjbGVhcmVkIGFuZCB0aGV5IGNvdWxkIGJlIGNvdW50ZWQgYXMKIAkgKiB2YWxpZCByZWZlcmVuY2VzIGR1cmluZyBhIGttZW1sZWFrIHNjYW4uIFRoZXJlZm9yZSwga21lbWxlYWsgbXVzdAogCSAqIG5vdCBzY2FuIHN1Y2ggb2JqZWN0cy4KQEAgLTI2MDYsNyArMjYwNiw3IEBACiAgKgogICogVGhlIGNhY2hlIG11c3QgYmUgZW1wdHkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqCi0gKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIHRoYXQgbm9vbmUgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGUgY2FjaGUKKyAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCBubyBvbmUgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGUgY2FjaGUKICAqIGR1cmluZyB0aGUga21lbV9jYWNoZV9kZXN0cm95KCkuCiAgKi8KIHZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZjg4MTg3NC4uOWQyZTVlNCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtNjQsNyArNjQsNyBAQAogICogICB3ZSBtdXN0IHN0YXkgYXdheSBmcm9tIGl0IGZvciBhIHdoaWxlIHNpbmNlIHdlIG1heSBjYXVzZSBhIGJvdW5jaW5nCiAgKiAgIGNhY2hlbGluZSBpZiB3ZSB0cnkgdG8gYWNxdWlyZSB0aGUgbG9jay4gU28gZ28gb250byB0aGUgbmV4dCBzbGFiLgogICogICBJZiBhbGwgcGFnZXMgYXJlIGJ1c3kgdGhlbiB3ZSBtYXkgYWxsb2NhdGUgYSBuZXcgc2xhYiBpbnN0ZWFkIG9mIHJldXNpbmcKLSAqICAgYSBwYXJ0aWFsIHNsYWIuIEEgbmV3IHNsYWIgaGFzIG5vb25lIG9wZXJhdGluZyBvbiBpdCBhbmQgdGh1cyB0aGVyZSBpcworICogICBhIHBhcnRpYWwgc2xhYi4gQSBuZXcgc2xhYiBoYXMgbm8gb25lIG9wZXJhdGluZyBvbiBpdCBhbmQgdGh1cyB0aGVyZSBpcwogICogICBubyBkYW5nZXIgb2YgY2FjaGVsaW5lIGNvbnRlbnRpb24uCiAgKgogICogICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGluIG9yZGVyIHRvCkBAIC0xOTI5LDcgKzE5MjksNyBAQAogCWVsc2UgewogI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJCS8qCi0JCSAqIFRoZSBjbXB4Y2hnIHdpbGwgb25seSBtYXRjaCBpZiB0aGVyZSB3YXMgbm8gYWRkaXRvbmFsCisJCSAqIFRoZSBjbXB4Y2hnIHdpbGwgb25seSBtYXRjaCBpZiB0aGVyZSB3YXMgbm8gYWRkaXRpb25hbAogCQkgKiBvcGVyYXRpb24gYW5kIGlmIHdlIGFyZSBvbiB0aGUgcmlnaHQgcHJvY2Vzc29yLgogCQkgKgogCQkgKiBUaGUgY21weGNoZyBkb2VzIHRoZSBmb2xsb3dpbmcgYXRvbWljYWxseSAod2l0aG91dCBsb2NrIHNlbWFudGljcyEpCkBAIC0xOTQwLDcgKzE5NDAsNyBAQAogCQkgKiBTaW5jZSB0aGlzIGlzIHdpdGhvdXQgbG9jayBzZW1hbnRpY3MgdGhlIHByb3RlY3Rpb24gaXMgb25seSBhZ2FpbnN0CiAJCSAqIGNvZGUgZXhlY3V0aW5nIG9uIHRoaXMgY3B1ICpub3QqIGZyb20gYWNjZXNzIGJ5IG90aGVyIGNwdXMuCiAJCSAqLwotCQlpZiAodW5saWtlbHkoIXRoaXNfY3B1X2NtcHhjaGdfZG91YmxlKAorCQlpZiAodW5saWtlbHkoIWlycXNhZmVfY3B1X2NtcHhjaGdfZG91YmxlKAogCQkJCXMtPmNwdV9zbGFiLT5mcmVlbGlzdCwgcy0+Y3B1X3NsYWItPnRpZCwKIAkJCQlvYmplY3QsIHRpZCwKIAkJCQlnZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0KSwgbmV4dF90aWQodGlkKSkpKSB7CkBAIC0yMTQ1LDcgKzIxNDUsNyBAQAogCQlzZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0LCBjLT5mcmVlbGlzdCk7CiAKICNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAotCQlpZiAodW5saWtlbHkoIXRoaXNfY3B1X2NtcHhjaGdfZG91YmxlKAorCQlpZiAodW5saWtlbHkoIWlycXNhZmVfY3B1X2NtcHhjaGdfZG91YmxlKAogCQkJCXMtPmNwdV9zbGFiLT5mcmVlbGlzdCwgcy0+Y3B1X3NsYWItPnRpZCwKIAkJCQljLT5mcmVlbGlzdCwgdGlkLAogCQkJCW9iamVjdCwgbmV4dF90aWQodGlkKSkpKSB7CkBAIC0zNTQ3LDcgKzM1NDcsNyBAQAogCiAJcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBjYWxsZXIpOwogCi0JLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2lldmVkLiAqLworCS8qIEhvbm9yIHRoZSBjYWxsIHNpdGUgcG9pbnRlciB3ZSByZWNlaXZlZC4gKi8KIAl0cmFjZV9rbWFsbG9jKGNhbGxlciwgcmV0LCBzaXplLCBzLT5zaXplLCBnZnBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzU3Nyw3ICszNTc3LDcgQEAKIAogCXJldCA9IHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGNhbGxlcik7CiAKLQkvKiBIb25vciB0aGUgY2FsbCBzaXRlIHBvaW50ZXIgd2UgcmVjaWV2ZWQuICovCisJLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2VpdmVkLiAqLwogCXRyYWNlX2ttYWxsb2Nfbm9kZShjYWxsZXIsIHJldCwgc2l6ZSwgcy0+c2l6ZSwgZ2ZwZmxhZ3MsIG5vZGUpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggOTMyNTAyMC4uYWE2NGIxMiAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTUwMCw3ICs1MDAsNyBAQAogCSAqIHNvIGFsbG9jIDJNICh3aXRoIDJNIGFsaWduKSBhbmQgMjQgYnl0ZXMgaW4gdHVybiB3aWxsCiAJICogbWFrZSBuZXh0IDJNIHNsaXAgdG8gb25lIG1vcmUgMk0gbGF0ZXIuCiAJICogdGhlbiBpbiBiaWcgc3lzdGVtLCB0aGUgbWVtb3J5IHdpbGwgaGF2ZSBhIGxvdCBvZiBob2xlcy4uLgotCSAqIGhlcmUgdHJ5IHRvIGFsbG9jYXRlIDJNIHBhZ2VzIGNvbnRpbm91c2x5LgorCSAqIGhlcmUgdHJ5IHRvIGFsbG9jYXRlIDJNIHBhZ2VzIGNvbnRpbnVvdXNseS4KIAkgKgogCSAqIHBvd2VycGMgbmVlZCB0byBjYWxsIHNwYXJzZV9pbml0X29uZV9zZWN0aW9uIHJpZ2h0IGFmdGVyIGVhY2gKIAkgKiBzcGFyc2VfZWFybHlfbWVtX21hcF9hbGxvYywgc28gYWxsb2NhdGUgdXNlbWFwX21hcCBhdCBmaXJzdC4KZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCBhNDQ4ZGIzLi41NjAyZjFhIDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC0zOTYsNiArMzk2LDkgQEAKIAlpZiAoIVBhZ2VMUlUocGFnZSkpCiAJCXJldHVybjsKIAorCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCXJldHVybjsKKwogCS8qIFNvbWUgcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgcGFnZSAqLwogCWlmIChwYWdlX21hcHBlZChwYWdlKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IGYxMjY5NzUuLmU3YjEwM2EgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYworKysgYi9tbS91dGlsLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogLyoKICAqIExpa2UgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGV4Y2VwdCBpdHMgSVJRLXNhZmUgaW4gdGhhdCBpdCB3b24ndCBmYWxsCiAgKiBiYWNrIHRvIHRoZSByZWd1bGFyIEdVUC4KLSAqIElmIHRoZSBhcmNoaXRlY3R1cmUgbm90IHN1cHBvcnQgdGhpcyBmdWNudGlvbiwgc2ltcGx5IHJldHVybiB3aXRoIG5vCisgKiBJZiB0aGUgYXJjaGl0ZWN0dXJlIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb24sIHNpbXBseSByZXR1cm4gd2l0aCBubwogICogcGFnZSBwaW5uZWQKICAqLwogaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBfX2dldF91c2VyX3BhZ2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZjczYjg2NS4uOGJmZDQ1MCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvb29tLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTkzNiw3ICs5MzcsNyBAQAogCSAqIGJhY2sgb2ZmIGFuZCB3YWl0IGZvciBjb25nZXN0aW9uIHRvIGNsZWFyIGJlY2F1c2UgZnVydGhlciByZWNsYWltCiAJICogd2lsbCBlbmNvdW50ZXIgdGhlIHNhbWUgcHJvYmxlbQogCSAqLwotCWlmIChucl9kaXJ0eSA9PSBucl9jb25nZXN0ZWQgJiYgbnJfZGlydHkgIT0gMCkKKwlpZiAobnJfZGlydHkgJiYgbnJfZGlydHkgPT0gbnJfY29uZ2VzdGVkICYmIHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQogCQl6b25lX3NldF9mbGFnKHpvbmUsIFpPTkVfQ09OR0VTVEVEKTsKIAogCWZyZWVfcGFnZV9saXN0KCZmcmVlX3BhZ2VzKTsKQEAgLTEwNjUsNyArMTA2Niw3IEBACiAJCSAqIHN1cnJvdW5kaW5nIHRoZSB0YWcgcGFnZS4gIE9ubHkgdGFrZSB0aG9zZSBwYWdlcyBvZgogCQkgKiB0aGUgc2FtZSBhY3RpdmUgc3RhdGUgYXMgdGhhdCB0YWcgcGFnZS4gIFdlIG1heSBzYWZlbHkKIAkJICogcm91bmQgdGhlIHRhcmdldCBwYWdlIHBmbiBkb3duIHRvIHRoZSByZXF1ZXN0ZWQgb3JkZXIKLQkJICogYXMgdGhlIG1lbV9tYXAgaXMgZ3VhcmVudGVlZCB2YWxpZCBvdXQgdG8gTUFYX09SREVSLAorCQkgKiBhcyB0aGUgbWVtX21hcCBpcyBndWFyYW50ZWVkIHZhbGlkIG91dCB0byBNQVhfT1JERVIsCiAJCSAqIHdoZXJlIHRoYXQgcGFnZSBpcyBpbiBhIGRpZmZlcmVudCB6b25lIHdlIHdpbGwgZGV0ZWN0CiAJCSAqIGl0IGZyb20gaXRzIHpvbmUgaWQgYW5kIGFib3J0IHRoaXMgYmxvY2sgc2Nhbi4KIAkJICovCkBAIC0xOTg4LDE3ICsxOTg5LDEyIEBACiAJcmV0dXJuIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPCB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpICogNjsKIH0KIAotLyoKLSAqIEFzIGhpYmVybmF0aW9uIGlzIGdvaW5nIG9uLCBrc3dhcGQgaXMgZnJlZXplZCBzbyB0aGF0IGl0IGNhbid0IG1hcmsKLSAqIHRoZSB6b25lIGludG8gYWxsX3VucmVjbGFpbWFibGUuIEl0IGNhbid0IGhhbmRsZSBPT00gZHVyaW5nIGhpYmVybmF0aW9uLgotICogU28gbGV0J3MgY2hlY2sgem9uZSdzIHVucmVjbGFpbWFibGUgaW4gZGlyZWN0IHJlY2xhaW0gYXMgd2VsbCBhcyBrc3dhcGQuCi0gKi8KKy8qIEFsbCB6b25lcyBpbiB6b25lbGlzdCBhcmUgdW5yZWNsYWltYWJsZT8gKi8KIHN0YXRpYyBib29sIGFsbF91bnJlY2xhaW1hYmxlKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCiAJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB6b25lcmVmICp6OwogCXN0cnVjdCB6b25lICp6b25lOwotCWJvb2wgYWxsX3VucmVjbGFpbWFibGUgPSB0cnVlOwogCiAJZm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwKIAkJCWdmcF96b25lKHNjLT5nZnBfbWFzayksIHNjLT5ub2RlbWFzaykgewpAQCAtMjAwNiwxMyArMjAwMiwxMSBAQAogCQkJY29udGludWU7CiAJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoem9uZV9yZWNsYWltYWJsZSh6b25lKSkgewotCQkJYWxsX3VucmVjbGFpbWFibGUgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9CisJCWlmICghem9uZS0+YWxsX3VucmVjbGFpbWFibGUpCisJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcmV0dXJuIGFsbF91bnJlY2xhaW1hYmxlOworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtMjEwOCw2ICsyMTAyLDE0IEBACiAJaWYgKHNjLT5ucl9yZWNsYWltZWQpCiAJCXJldHVybiBzYy0+bnJfcmVjbGFpbWVkOwogCisJLyoKKwkgKiBBcyBoaWJlcm5hdGlvbiBpcyBnb2luZyBvbiwga3N3YXBkIGlzIGZyZWV6ZWQgc28gdGhhdCBpdCBjYW4ndCBtYXJrCisJICogdGhlIHpvbmUgaW50byBhbGxfdW5yZWNsYWltYWJsZS4gVGh1cyBieXBhc3NpbmcgYWxsX3VucmVjbGFpbWFibGUKKwkgKiBjaGVjay4KKwkgKi8KKwlpZiAob29tX2tpbGxlcl9kaXNhYmxlZCkKKwkJcmV0dXJuIDA7CisKIAkvKiB0b3AgcHJpb3JpdHkgc2hyaW5rX3pvbmVzIHN0aWxsIGhhZCBtb3JlIHRvIGRvPyBkb24ndCBPT00sIHRoZW4gKi8KIAlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykgJiYgIWFsbF91bnJlY2xhaW1hYmxlKHpvbmVsaXN0LCBzYykpCiAJCXJldHVybiAxOwpAQCAtMjIyNCw3ICsyMjI2LDcgQEAKICAqICAgbyBhIDE2TSBETUEgem9uZSB0aGF0IGlzIGJhbGFuY2VkIHdpbGwgbm90IGJhbGFuY2UgYSB6b25lIG9uIGFueQogICogICAgIHJlYXNvbmFibGUgc2l6ZWQgbWFjaGluZQogICogICBvIE9uIGFsbCBvdGhlciBtYWNoaW5lcywgdGhlIHRvcCB6b25lIG11c3QgYmUgYXQgbGVhc3QgYSByZWFzb25hYmxlCi0gKiAgICAgcHJlY2VudGFnZSBvZiB0aGUgbWlkZGxlIHpvbmVzLiBGb3IgZXhhbXBsZSwgb24gMzItYml0IHg4NiwgaGlnaG1lbQorICogICAgIHBlcmNlbnRhZ2Ugb2YgdGhlIG1pZGRsZSB6b25lcy4gRm9yIGV4YW1wbGUsIG9uIDMyLWJpdCB4ODYsIGhpZ2htZW0KICAqICAgICB3b3VsZCBuZWVkIHRvIGJlIGF0IGxlYXN0IDI1Nk0gZm9yIGl0IHRvIGJlIGJhbGFuY2UgYSB3aG9sZSBub2RlLgogICogICAgIFNpbWlsYXJseSwgb24geDg2LTY0IHRoZSBOb3JtYWwgem9uZSB3b3VsZCBuZWVkIHRvIGJlIGF0IGxlYXN0IDFHCiAgKiAgICAgdG8gYmFsYW5jZSBhIG5vZGUgb24gaXRzIG93bi4gVGhlc2Ugc2VlbWVkIGxpa2UgcmVhc29uYWJsZSByYXRpb3MuCmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDc3MmIzOWIuLjg5N2VhOWUgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC0zMjEsOSArMzIxLDEyIEBACiAJCS8qCiAJCSAqIFRoZSBmZXRjaGluZyBvZiB0aGUgc3RhdF90aHJlc2hvbGQgaXMgcmFjeS4gV2UgbWF5IGFwcGx5CiAJCSAqIGEgY291bnRlciB0aHJlc2hvbGQgdG8gdGhlIHdyb25nIHRoZSBjcHUgaWYgd2UgZ2V0Ci0JCSAqIHJlc2NoZWR1bGVkIHdoaWxlIGV4ZWN1dGluZyBoZXJlLiBIb3dldmVyLCB0aGUgZm9sbG93aW5nCi0JCSAqIHdpbGwgYXBwbHkgdGhlIHRocmVzaG9sZCBhZ2FpbiBhbmQgdGhlcmVmb3JlIGJyaW5nIHRoZQotCQkgKiBjb3VudGVyIHVuZGVyIHRoZSB0aHJlc2hvbGQuCisJCSAqIHJlc2NoZWR1bGVkIHdoaWxlIGV4ZWN1dGluZyBoZXJlLiBIb3dldmVyLCB0aGUgbmV4dAorCQkgKiBjb3VudGVyIHVwZGF0ZSB3aWxsIGFwcGx5IHRoZSB0aHJlc2hvbGQgYWdhaW4gYW5kCisJCSAqIHRoZXJlZm9yZSBicmluZyB0aGUgY291bnRlciB1bmRlciB0aGUgdGhyZXNob2xkIGFnYWluLgorCQkgKgorCQkgKiBNb3N0IG9mIHRoZSB0aW1lIHRoZSB0aHJlc2hvbGRzIGFyZSB0aGUgc2FtZSBhbnl3YXlzCisJCSAqIGZvciBhbGwgY3B1cyBpbiBhIHpvbmUuCiAJCSAqLwogCQl0ID0gdGhpc19jcHVfcmVhZChwY3AtPnN0YXRfdGhyZXNob2xkKTsKIApAQCAtOTQ1LDcgKzk0OCwxNiBAQAogCSJ1bmV2aWN0YWJsZV9wZ3NfY2xlYXJlZCIsCiAJInVuZXZpY3RhYmxlX3Bnc19zdHJhbmRlZCIsCiAJInVuZXZpY3RhYmxlX3Bnc19tbG9ja2ZyZWVkIiwKKworI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQorCSJ0aHBfZmF1bHRfYWxsb2MiLAorCSJ0aHBfZmF1bHRfZmFsbGJhY2siLAorCSJ0aHBfY29sbGFwc2VfYWxsb2MiLAorCSJ0aHBfY29sbGFwc2VfYWxsb2NfZmFpbGVkIiwKKwkidGhwX3NwbGl0IiwKICNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1ZNX0VWRU5UU19DT1VOVEVSUyAqLwogfTsKIAogc3RhdGljIHZvaWQgem9uZWluZm9fc2hvd19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQsCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCA3ODUwNDEyLi4wZWIxYTg4IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCisrKyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTEyNCw2ICsxMjQsOSBAQAogCiAJZ3JwLT5ucl92bGFucy0tOwogCisJaWYgKHZsYW4tPmZsYWdzICYgVkxBTl9GTEFHX0dWUlApCisJCXZsYW5fZ3ZycF9yZXF1ZXN0X2xlYXZlKGRldik7CisKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuX2lkLCBOVUxMKTsKIAlpZiAoIWdycC0+a2lsbGFsbCkKIAkJc3luY2hyb25pemVfbmV0KCk7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGUzNGVhOWUuLmIyZmY2YzggMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC00ODcsOSArNDg3LDYgQEAKIAlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLT5yZWFsX2RldjsKIAotCWlmICh2bGFuLT5mbGFncyAmIFZMQU5fRkxBR19HVlJQKQotCQl2bGFuX2d2cnBfcmVxdWVzdF9sZWF2ZShkZXYpOwotCiAJZGV2X21jX3Vuc3luYyhyZWFsX2RldiwgZGV2KTsKIAlkZXZfdWNfdW5zeW5jKHJlYWxfZGV2LCBkZXYpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCBkMTMxNGNmLi5kOTQwYzQ5IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtNTQsNyArNTQsNyBAQAogCiAvKgogICoJU3RydWN0dXJlcyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgL3Byb2MgZmlsZXN5c3RlbS4KLSAqCVZMQU4gY3JlYXRlcyBpdHMgb3duIGRpcmVjdG9yeSAvcHJvYy9uZXQvdmxhbiB3aXRoIHRoZSBmb2xvd2luZworICoJVkxBTiBjcmVhdGVzIGl0cyBvd24gZGlyZWN0b3J5IC9wcm9jL25ldC92bGFuIHdpdGggdGhlIGZvbGxvd2luZwogICoJZW50cmllczoKICAqCWNvbmZpZwkJZGV2aWNlIHN0YXR1cy9jb25maWd1cmF0aW9uCiAgKgk8ZGV2aWNlPgllbnRyeSBmb3IgZWFjaCAgZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggMmNjYmYwNC4uYTlhYTJkZCAxMDA2NDQKLS0tIGEvbmV0LzlwL2NsaWVudC5jCisrKyBiL25ldC85cC9jbGllbnQuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgKiBAdGFnOiBudW1lcmljIGlkIGZvciB0cmFuc2FjdGlvbgogICoKICAqIHRoaXMgaXMgYSBzaW1wbGUgYXJyYXkgbG9va3VwLCBidXQgd2lsbCBncm93IHRoZQotICogcmVxdWVzdF9zbG90cyBhcyBuZWNlc3NhcnkgdG8gYWNjb21vZGF0ZSB0cmFuc2FjdGlvbgorICogcmVxdWVzdF9zbG90cyBhcyBuZWNlc3NhcnkgdG8gYWNjb21tb2RhdGUgdHJhbnNhY3Rpb24KICAqIGlkcyB3aGljaCBkaWQgbm90IHByZXZpb3VzbHkgaGF2ZSBhIHNsb3QuCiAgKgogICogdGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgY2xpZW50IHNwaW5sb2NrIHRvIG1hbmFnZSBsb2NrcywgaXRzCkBAIC02MTQsNyArNjE0LDcgQEAKIAogCWVyciA9IGMtPnRyYW5zX21vZC0+cmVxdWVzdChjLCByZXEpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWlmIChlcnIgIT0gLUVSRVNUQVJUU1lTKQorCQlpZiAoZXJyICE9IC1FUkVTVEFSVFNZUyAmJiBlcnIgIT0gLUVGQVVMVCkKIAkJCWMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKIAkJZ290byByZXRlcnI7CiAJfQpAQCAtOTI5LDE1ICs5MjksMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F0dGFjaCk7CiAKLXN0cnVjdCBwOV9maWQgKnA5X2NsaWVudF93YWxrKHN0cnVjdCBwOV9maWQgKm9sZGZpZCwgaW50IG53bmFtZSwgY2hhciAqKnduYW1lcywKLQlpbnQgY2xvbmUpCitzdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIHVpbnQxNl90IG53bmFtZSwKKwkJY2hhciAqKnduYW1lcywgaW50IGNsb25lKQogewogCWludCBlcnI7CiAJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAJc3RydWN0IHA5X3FpZCAqd3FpZHM7CiAJc3RydWN0IHA5X3JlcV90ICpyZXE7Ci0JaW50MTZfdCBud3FpZHMsIGNvdW50OworCXVpbnQxNl90IG53cWlkcywgY291bnQ7CiAKIAllcnIgPSAwOwogCXdxaWRzID0gTlVMTDsKQEAgLTk1NSw3ICs5NTUsNyBAQAogCQlmaWQgPSBvbGRmaWQ7CiAKIAotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFdBTEsgZmlkcyAlZCwlZCBud25hbWUgJWQgd25hbWVbMF0gJXNcbiIsCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUV0FMSyBmaWRzICVkLCVkIG53bmFtZSAldWQgd25hbWVbMF0gJXNcbiIsCiAJCW9sZGZpZC0+ZmlkLCBmaWQtPmZpZCwgbnduYW1lLCB3bmFtZXMgPyB3bmFtZXNbMF0gOiBOVUxMKTsKIAogCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdBTEssICJkZFQiLCBvbGRmaWQtPmZpZCwgZmlkLT5maWQsCkBAIC0xMjIwLDI3ICsxMjIwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2ZzeW5jKTsKIAotaW50IHA5X2NsaWVudF9zeW5jX2ZzKHN0cnVjdCBwOV9maWQgKmZpZCkKLXsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUU1lOQ19GUyBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKLQotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UU1lOQ0ZTLCAiZCIsIGZpZC0+ZmlkKTsKLQlpZiAoSVNfRVJSKHJlcSkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXEpOwotCQlnb3RvIGVycm9yOwotCX0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJTWU5DRlMgZmlkICVkXG4iLCBmaWQtPmZpZCk7Ci0JcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKLWVycm9yOgotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9zeW5jX2ZzKTsKLQogaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL25ldC85cC9wcm90b2NvbC5jIGIvbmV0LzlwL3Byb3RvY29sLmMKaW5kZXggOGE0MDg0Zi4uYTg3MzI3NyAxMDA2NDQKLS0tIGEvbmV0LzlwL3Byb3RvY29sLmMKKysrIGIvbmV0LzlwL3Byb3RvY29sLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ1QnOnsKLQkJCQlpbnQxNl90ICpud25hbWUgPSB2YV9hcmcoYXAsIGludDE2X3QgKik7CisJCQkJdWludDE2X3QgKm53bmFtZSA9IHZhX2FyZyhhcCwgdWludDE2X3QgKik7CiAJCQkJY2hhciAqKip3bmFtZXMgPSB2YV9hcmcoYXAsIGNoYXIgKioqKTsKIAogCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIHByb3RvX3ZlcnNpb24sCkBAIC00NjgsNyArNDY4LDggQEAKIAkJY2FzZSAnRSc6ewogCQkJCSBpbnQzMl90IGNudCA9IHZhX2FyZyhhcCwgaW50MzJfdCk7CiAJCQkJIGNvbnN0IGNoYXIgKmsgPSB2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7Ci0JCQkJIGNvbnN0IGNoYXIgKnUgPSB2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7CisJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1ID0gdmFfYXJnKGFwLAorCQkJCQkJCWNvbnN0IHZvaWQgX191c2VyICopOwogCQkJCSBlcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwgImQiLAogCQkJCQkJIGNudCk7CiAJCQkJIGlmICghZXJyY29kZSAmJiBwZHVfd3JpdGVfdXJ3KHBkdSwgaywgdSwgY250KSkKQEAgLTQ5NSw3ICs0OTYsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ1QnOnsKLQkJCQlpbnQxNl90IG53bmFtZSA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQl1aW50MTZfdCBud25hbWUgPSB2YV9hcmcoYXAsIGludCk7CiAJCQkJY29uc3QgY2hhciAqKnduYW1lcyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKik7CiAKIAkJCQllcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwgInciLApAQCAtNjczLDYgKzY3NCw3IEBACiAJfQogCiAJc3RyY3B5KGRpcmVudC0+ZF9uYW1lLCBuYW1lcHRyKTsKKwlrZnJlZShuYW1lcHRyKTsKIAogb3V0OgogCXJldHVybiBmYWtlX3BkdS5vZmZzZXQ7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfY29tbW9uLmMgYi9uZXQvOXAvdHJhbnNfY29tbW9uLmMKaW5kZXggOTE3MmFiNy4uOWE3MGViZCAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2NvbW1vbi5jCisrKyBiL25ldC85cC90cmFuc19jb21tb24uYwpAQCAtMzYsNyArMzYsNyBAQAogRVhQT1JUX1NZTUJPTChwOV9yZWxlYXNlX3JlcV9wYWdlcyk7CiAKIC8qKgotICogcDlfbnJfcGFnZXMgLSBSZXR1cm4gbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCB0byBhY2NvbW9kYXRlIHRoZSBwYXlsb2FkLgorICogcDlfbnJfcGFnZXMgLSBSZXR1cm4gbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgcGF5bG9hZC4KICAqLwogaW50CiBwOV9ucl9wYWdlcyhzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKQEAgLTU1LDcgKzU1LDcgQEAKICAqIEByZXE6IFJlcXVlc3QgdG8gYmUgc2VudCB0byBzZXJ2ZXIuCiAgKiBAcGRhdGFfb2ZmOiBkYXRhIG9mZnNldCBpbnRvIHRoZSBmaXJzdCBwYWdlIGFmdGVyIHRyYW5zbGF0aW9uIChndXApLgogICogQHBkYXRhX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBJTy4gZ3VwIG1heSBub3QgcmV0dXJuIHJlcXVlc3RlZCAjIG9mIHBhZ2VzLgotICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gYWNjb21vZGF0ZSB0aGUgcGF5bG9hZAorICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gYWNjb21tb2RhdGUgdGhlIHBheWxvYWQKICAqIEBydzogSW5kaWNhdGVzIGlmIHRoZSBwYWdlcyBhcmUgZm9yIHJlYWQgb3Igd3JpdGUuCiAgKi8KIGludApAQCAtNjMsMTAgKzYzLDEwIEBACiAJCWludCBucl9wYWdlcywgdTggcncpCiB7CiAJdWludDMyX3QgZmlyc3RfcGFnZV9ieXRlcyA9IDA7Ci0JdWludDMyX3QgcGRhdGFfbWFwcGVkX3BhZ2VzOworCWludDMyX3QgcGRhdGFfbWFwcGVkX3BhZ2VzOwogCXN0cnVjdCB0cmFuc19ycGFnZV9pbmZvICAqcnBpbmZvOwogCi0JKnBkYXRhX29mZiA9IChzaXplX3QpcmVxLT50Yy0+cHVidWYgJiAoUEFHRV9TSVpFLTEpOworCSpwZGF0YV9vZmYgPSAoX19mb3JjZSBzaXplX3QpcmVxLT50Yy0+cHVidWYgJiAoUEFHRV9TSVpFLTEpOwogCiAJaWYgKCpwZGF0YV9vZmYpCiAJCWZpcnN0X3BhZ2VfYnl0ZXMgPSBtaW4oKChzaXplX3QpUEFHRV9TSVpFIC0gKnBkYXRhX29mZiksCkBAIC03NSwxNCArNzUsOSBAQAogCXJwaW5mbyA9IHJlcS0+dGMtPnByaXZhdGU7CiAJcGRhdGFfbWFwcGVkX3BhZ2VzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCgodW5zaWduZWQgbG9uZylyZXEtPnRjLT5wdWJ1ZiwKIAkJCW5yX3BhZ2VzLCBydywgJnJwaW5mby0+cnBfZGF0YVswXSk7CisJaWYgKHBkYXRhX21hcHBlZF9wYWdlcyA8PSAwKQorCQlyZXR1cm4gcGRhdGFfbWFwcGVkX3BhZ2VzOwogCi0JaWYgKHBkYXRhX21hcHBlZF9wYWdlcyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnZXRfdXNlcl9wYWdlc19mYXN0IGZhaWxlZDolZCB1ZGF0YTolcCIKLQkJCQkibnJfcGFnZXM6JWRcbiIsIHBkYXRhX21hcHBlZF9wYWdlcywKLQkJCQlyZXEtPnRjLT5wdWJ1ZiwgbnJfcGFnZXMpOwotCQlwZGF0YV9tYXBwZWRfcGFnZXMgPSAwOwotCQlyZXR1cm4gLUVJTzsKLQl9CiAJcnBpbmZvLT5ycF9ucl9wYWdlcyA9IHBkYXRhX21hcHBlZF9wYWdlczsKIAlpZiAoKnBkYXRhX29mZikgewogCQkqcGRhdGFfbGVuID0gZmlyc3RfcGFnZV9ieXRlczsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCBlOGYwNDZiLi4yNDRlNzA3IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMKKysrIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCkBAIC0zMjYsOCArMzI2LDExIEBACiAJCQlvdXRwID0gcGFja19zZ19saXN0X3AoY2hhbi0+c2csIG91dCwgVklSVFFVRVVFX05VTSwKIAkJCQkJcGRhdGFfb2ZmLCBycGluZm8tPnJwX2RhdGEsIHBkYXRhX2xlbik7CiAJCX0gZWxzZSB7Ci0JCQljaGFyICpwYnVmID0gcmVxLT50Yy0+cHVidWYgPyByZXEtPnRjLT5wdWJ1ZiA6Ci0JCQkJCQkJCXJlcS0+dGMtPnBrYnVmOworCQkJY2hhciAqcGJ1ZjsKKwkJCWlmIChyZXEtPnRjLT5wdWJ1ZikKKwkJCQlwYnVmID0gKF9fZm9yY2UgY2hhciAqKSByZXEtPnRjLT5wdWJ1ZjsKKwkJCWVsc2UKKwkJCQlwYnVmID0gcmVxLT50Yy0+cGtidWY7CiAJCQlvdXRwID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0sIHBidWYsCiAJCQkJCXJlcS0+dGMtPnBidWZfc2l6ZSk7CiAJCX0KQEAgLTM1Miw4ICszNTUsMTIgQEAKIAkJCWluID0gcGFja19zZ19saXN0X3AoY2hhbi0+c2csIG91dCtpbnAsIFZJUlRRVUVVRV9OVU0sCiAJCQkJCXBkYXRhX29mZiwgcnBpbmZvLT5ycF9kYXRhLCBwZGF0YV9sZW4pOwogCQl9IGVsc2UgewotCQkJY2hhciAqcGJ1ZiA9IHJlcS0+dGMtPnB1YnVmID8gcmVxLT50Yy0+cHVidWYgOgotCQkJCQkJCQlyZXEtPnRjLT5wa2J1ZjsKKwkJCWNoYXIgKnBidWY7CisJCQlpZiAocmVxLT50Yy0+cHVidWYpCisJCQkJcGJ1ZiA9IChfX2ZvcmNlIGNoYXIgKikgcmVxLT50Yy0+cHVidWY7CisJCQllbHNlCisJCQkJcGJ1ZiA9IHJlcS0+dGMtPnBrYnVmOworCiAJCQlpbiA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgb3V0K2lucCwgVklSVFFVRVVFX05VTSwKIAkJCQkJcGJ1ZiwgcmVxLT50Yy0+cGJ1Zl9zaXplKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0LzlwL3V0aWwuYyBiL25ldC85cC91dGlsLmMKaW5kZXggYjg0NjE5Yi4uZGE2YWY4MSAxMDA2NDQKLS0tIGEvbmV0LzlwL3V0aWwuYworKysgYi9uZXQvOXAvdXRpbC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIC8qKgogICogcDlfaWRwb29sX2Rlc3Ryb3kgLSBjcmVhdGUgYSBuZXcgcGVyLWNvbm5lY3Rpb24gaWQgcG9vbAotICogQHA6IGlkcG9vbCB0byBkZXN0b3J5CisgKiBAcDogaWRwb29sIHRvIGRlc3Ryb3kKICAqLwogCiB2b2lkIHA5X2lkcG9vbF9kZXN0cm95KHN0cnVjdCBwOV9pZHBvb2wgKnApCmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCBmY2UyZWFlLi4yMjUyYzIwIDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTUwOSw3ICs1MDksNyBAQAogCXdyaXRlX2xvY2tfaXJxKCZkZXZzX2xvY2spOwogCW5ldF9kZXYgPSBicjI2ODRfZmluZF9kZXYoJmJlLmlmc3BlYyk7CiAJaWYgKG5ldF9kZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoInRyaWVkIHRvIGF0dGFjaCB0byBub24tZXhpc3RhbnQgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJ0cmllZCB0byBhdHRhY2ggdG8gbm9uLWV4aXN0ZW50IGRldmljZVxuIik7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBlcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5oIGIvbmV0L2F0bS9sZWMuaAppbmRleCA5ZDE0ZDE5Li5kZmMwNzE5IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5oCisrKyBiL25ldC9hdG0vbGVjLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAqIE9wZXJhdGlvbnMgdGhhdCBMQU5FMiBjYXBhYmxlIGRldmljZSBjYW4gZG8uIFR3byBmaXJzdCBmdW5jdGlvbnMKICAqIGFyZSB1c2VkIHRvIG1ha2UgdGhlIGRldmljZSBkbyB0aGluZ3MuIFNlZSBzcGVjIDMuMS4zIGFuZCAzLjEuNC4KICAqCi0gKiBUaGUgdGhpcmQgZnVuY3Rpb24gaXMgaW50ZW50ZWQgZm9yIHRoZSBNUE9BIGNvbXBvbmVudCBzaXR0aW5nIG9uCisgKiBUaGUgdGhpcmQgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSBNUE9BIGNvbXBvbmVudCBzaXR0aW5nIG9uCiAgKiB0b3Agb2YgdGhlIExBTkUgZGV2aWNlLiBUaGUgTVBPQSBjb21wb25lbnQgYXNzaWducyBpdCdzIG93biBmdW5jdGlvbgogICogdG8gKCphc3NvY2lhdGVfaW5kaWNhdG9yKSgpIGFuZCB0aGUgTEFORSBkZXZpY2Ugd2lsbCB1c2UgdGhhdAogICogZnVuY3Rpb24gdG8gdGVsbCBhYm91dCBUTFZzIGl0IHNlZXMgZmxvYXRpbmcgdGhyb3VnaC4KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCmluZGV4IDllZDI2MTQuLjgyNGUxZjYgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJCWdvdG8gZHJvcHBlZDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBzb2Z0X2lmYWNlKTsKIAotCS8qIHNob3VsZCBub3QgYmUgbmVjY2VzYXJ5IGFueW1vcmUgYXMgd2UgdXNlIHNrYl9wdWxsX3Jjc3VtKCkKKwkvKiBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBhbnltb3JlIGFzIHdlIHVzZSBza2JfcHVsbF9yY3N1bSgpCiAJICogVE9ETzogcGxlYXNlIHZlcmlmeSB0aGlzIGFuZCByZW1vdmUgdGhpcyBUT0RPCiAJICogLS0gRGVjIDIxc3QgMjAwOSwgU2ltb24gV3VuZGVybGljaCAqLwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggYjM3MmZiOC4uYjVhOGFmYyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJQlRfREJHKCIlcyAlbGQiLCBoZGV2LT5uYW1lLCBvcHQpOwogCiAJLyogUmVzZXQgZGV2aWNlICovCisJc2V0X2JpdChIQ0lfUkVTRVQsICZoZGV2LT5mbGFncyk7CiAJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9SRVNFVCwgMCwgTlVMTCk7CiB9CiAKQEAgLTIxMyw4ICsyMTQsMTAgQEAKIAkvKiBNYW5kYXRvcnkgaW5pdGlhbGl6YXRpb24gKi8KIAogCS8qIFJlc2V0ICovCi0JaWYgKCF0ZXN0X2JpdChIQ0lfUVVJUktfTk9fUkVTRVQsICZoZGV2LT5xdWlya3MpKQorCWlmICghdGVzdF9iaXQoSENJX1FVSVJLX05PX1JFU0VULCAmaGRldi0+cXVpcmtzKSkgeworCQkJc2V0X2JpdChIQ0lfUkVTRVQsICZoZGV2LT5mbGFncyk7CiAJCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFU0VULCAwLCBOVUxMKTsKKwl9CiAKIAkvKiBSZWFkIExvY2FsIFN1cHBvcnRlZCBGZWF0dXJlcyAqLwogCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfUkVBRF9MT0NBTF9GRUFUVVJFUywgMCwgTlVMTCk7CkBAIC01ODUsNiArNTg4LDcgQEAKIAloY2lfcmVxX2xvY2soaGRldik7CiAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncykpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJmhkZXYtPmNtZF90aW1lcik7CiAJCWhjaV9yZXFfdW5sb2NrKGhkZXYpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMDc0LDYgKzEwNzgsNyBAQAogCiAJQlRfRVJSKCIlcyBjb21tYW5kIHR4IHRpbWVvdXQiLCBoZGV2LT5uYW1lKTsKIAlhdG9taWNfc2V0KCZoZGV2LT5jbWRfY250LCAxKTsKKwljbGVhcl9iaXQoSENJX1JFU0VULCAmaGRldi0+ZmxhZ3MpOwogCXRhc2tsZXRfc2NoZWR1bGUoJmhkZXYtPmNtZF90YXNrKTsKIH0KIApAQCAtMTg3Nyw3ICsxODgyLDcgQEAKIAlyZWFkX3VubG9jaygmaGNpX3Rhc2tfbG9jayk7CiB9CiAKLS8qIC0tLS0tIEhDSSBSWCB0YXNrIChpbmNvbWluZyBkYXRhIHByb2NjZXNzaW5nKSAtLS0tLSAqLworLyogLS0tLS0gSENJIFJYIHRhc2sgKGluY29taW5nIGRhdGEgcHJvY2Vzc2luZykgLS0tLS0gKi8KIAogLyogQUNMIGRhdGEgcGFja2V0ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2FjbGRhdGFfcGFja2V0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggM2ZiZmE1MC4uYjI1NzAxNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC0xODMsNiArMTgzLDggQEAKIAogCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCisJY2xlYXJfYml0KEhDSV9SRVNFVCwgJmhkZXYtPmZsYWdzKTsKKwogCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX1JFU0VULCBzdGF0dXMpOwogfQogCkBAIC0xODQ3LDcgKzE4NDksNyBAQAogCWlmIChldi0+b3Bjb2RlICE9IEhDSV9PUF9OT1ApCiAJCWRlbF90aW1lcigmaGRldi0+Y21kX3RpbWVyKTsKIAotCWlmIChldi0+bmNtZCkgeworCWlmIChldi0+bmNtZCAmJiAhdGVzdF9iaXQoSENJX1JFU0VULCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWF0b21pY19zZXQoJmhkZXYtPmNtZF9jbnQsIDEpOwogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmaGRldi0+Y21kX3EpKQogCQkJdGFza2xldF9zY2hlZHVsZSgmaGRldi0+Y21kX3Rhc2spOwpAQCAtMjM4NSw4ICsyMzg3LDYgQEAKIAlpZiAoIWNvbm4pCiAJCWdvdG8gdW5sb2NrOwogCi0JaGNpX2Nvbm5faG9sZChjb25uKTsKLQogCWNvbm4tPnJlbW90ZV9jYXAgPSBldi0+Y2FwYWJpbGl0eTsKIAljb25uLT5yZW1vdGVfb29iID0gZXYtPm9vYl9kYXRhOwogCWNvbm4tPnJlbW90ZV9hdXRoID0gZXYtPmF1dGhlbnRpY2F0aW9uOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYwppbmRleCBjOWY5Y2VjLi4yYzhkZDQ0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYwpAQCAtMTA1MSw2ICsxMDUxLDcgQEAKIAl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlidF9jYihza2IpLT5yZXRyaWVzKys7CiAJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNih0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CisJY29udHJvbCAmPSBMMkNBUF9DVFJMX1NBUjsKIAogCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9GQklUKSB7CiAJCWNvbnRyb2wgfD0gTDJDQVBfQ1RSTF9GSU5BTDsKQEAgLTExMTYsNyArMTExNyw5IEBACiAJCWJ0X2NiKHNrYiktPnR4X3NlcSA9IHBpLT5uZXh0X3R4X3NlcTsKIAkJcGktPm5leHRfdHhfc2VxID0gKHBpLT5uZXh0X3R4X3NlcSArIDEpICUgNjQ7CiAKLQkJcGktPnVuYWNrZWRfZnJhbWVzKys7CisJCWlmIChidF9jYihza2IpLT5yZXRyaWVzID09IDEpCisJCQlwaS0+dW5hY2tlZF9mcmFtZXMrKzsKKwogCQlwaS0+ZnJhbWVzX3NlbnQrKzsKIAogCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYwppbmRleCBmYzg1ZTdhLi4yOTlmZTU2IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYwpAQCAtNjc5LDcgKzY3OSw3IEBACiAKIAkJaWYgKG9wdCA9PSBCVF9GTFVTSEFCTEVfT0ZGKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQkJCS8qIHByb2NlZWQgZnV0aGVyIG9ubHkgd2hlbiB3ZSBoYXZlIGwyY2FwX2Nvbm4gYW5kCisJCQkvKiBwcm9jZWVkIGZ1cnRoZXIgb25seSB3aGVuIHdlIGhhdmUgbDJjYXBfY29ubiBhbmQKIAkJCSAgIE5vIEZsdXNoIHN1cHBvcnQgaW4gdGhlIExNICovCiAJCQlpZiAoIWNvbm4gfHwgIWxtcF9ub19mbHVzaF9jYXBhYmxlKGNvbm4tPmhjb24tPmhkZXYpKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKQEAgLTkyMyw4ICs5MjMsOSBAQAogCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOwogCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKIAkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKLQkJfSBlbHNlCi0JCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJfQorCisJCWwyY2FwX2NoYW5fZGVsKHNrLCByZWFzb24pOwogCQlicmVhazsKIAogCWNhc2UgQlRfQ09OTkVDVDoKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbWdtdC5jIGIvbmV0L2JsdWV0b290aC9tZ210LmMKaW5kZXggMDA1NGM3NC4uNDQ3NmQ4ZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9tZ210LmMKKysrIGIvbmV0L2JsdWV0b290aC9tZ210LmMKQEAgLTEyMzAsNiArMTIzMCw4IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIG1nbXRfb3AsIEVOT0RFVik7CiAKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisKIAlpZiAoIXRlc3RfYml0KEhDSV9VUCwgJmhkZXYtPmZsYWdzKSkgewogCQllcnIgPSBjbWRfc3RhdHVzKHNrLCBpbmRleCwgbWdtdF9vcCwgRU5FVERPV04pOwogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZmRiLmMgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCmluZGV4IDg4NDg1Y2MuLmNjNGQzYzUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJc3Bpbl91bmxvY2tfYmgoJmJyLT5oYXNoX2xvY2spOwogfQogCi0vKiBGbHVzaCBhbGwgZW50cmllcyByZWZlcmluZyB0byBhIHNwZWNpZmljIHBvcnQuCisvKiBGbHVzaCBhbGwgZW50cmllcyByZWZlcnJpbmcgdG8gYSBzcGVjaWZpYyBwb3J0LgogICogaWYgZG9fYWxsIGlzIHNldCBhbHNvIGZsdXNoIHN0YXRpYyBlbnRyaWVzCiAgKi8KIHZvaWQgYnJfZmRiX2RlbGV0ZV9ieV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCBlMjE2MDc5Li4wYzdiYWRhIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJCWdvdG8gZHJvcDsKIAogCQkvKiBJZiBTVFAgaXMgdHVybmVkIG9mZiwgdGhlbiBmb3J3YXJkICovCi0JCWlmIChwLT5ici0+c3RwX2VuYWJsZWQgPT0gQlJfTk9fU1RQKQorCQlpZiAocC0+YnItPnN0cF9lbmFibGVkID09IEJSX05PX1NUUCAmJiBkZXN0WzVdID09IDApCiAJCQlnb3RvIGZvcndhcmQ7CiAKIAkJaWYgKE5GX0hPT0soTkZQUk9UT19CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIHNrYi0+ZGV2LApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pb2N0bC5jIGIvbmV0L2JyaWRnZS9icl9pb2N0bC5jCmluZGV4IGNiNDMzMTIuLjNkOWZjYTAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW9jdGwuYworKysgYi9uZXQvYnJpZGdlL2JyX2lvY3RsLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogLyoKICAqIExlZ2FjeSBpb2N0bCdzIHRocm91Z2ggU0lPQ0RFVlBSSVZBVEUKICAqIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCB3YXMgdG9vIGRpZmZpY3VsdCB0bwotICogdG8gZG8gdGhlIHRyYW5zbGF0aW9uIGZvciAzMi82NGJpdCBpb2N0bCBjb21wYXRhYmlsaXR5LgorICogdG8gZG8gdGhlIHRyYW5zbGF0aW9uIGZvciAzMi82NGJpdCBpb2N0bCBjb21wYXRpYmlsaXR5LgogICovCiBzdGF0aWMgaW50IG9sZF9kZXZfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IDAwOGZmNmMuLjc0ZWY0ZDQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtMjQ5LDExICsyNDksOSBAQAogCQlnb3RvIGRyb3A7CiAJfQogCi0JLyogWmVybyBvdXQgdGhlIENCIGJ1ZmZlciBpZiBubyBvcHRpb25zIHByZXNlbnQgKi8KLQlpZiAoaXBoLT5paGwgPT0gNSkgewotCQltZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTsKKwltZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTsKKwlpZiAoaXBoLT5paGwgPT0gNSkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJb3B0LT5vcHRsZW4gPSBpcGgtPmlobCo0IC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiAJaWYgKGlwX29wdGlvbnNfY29tcGlsZShkZXZfbmV0KGRldiksIG9wdCwgc2tiKSkKQEAgLTczOSw3ICs3MzcsNyBAQAogCQluZl9icmlkZ2UtPm1hc2sgfD0gQlJORl9QS1RfVFlQRTsKIAl9CiAKLQlpZiAoYnJfcGFyc2VfaXBfb3B0aW9ucyhza2IpKQorCWlmIChwZiA9PSBQRl9JTkVUICYmIGJyX3BhcnNlX2lwX29wdGlvbnMoc2tiKSkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAkvKiBUaGUgcGh5c2RldiBtb2R1bGUgY2hlY2tzIG9uIHRoaXMgKi8KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDg5MzY2OWMuLjFhOTJiMzYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTc2Niw3ICsxNzY2LDcgQEAKIAogCW5ld2luZm8tPmVudHJpZXNfc2l6ZSA9IHNpemU7CiAKLQl4dF9jb21wYXRfaW5pdF9vZmZzZXRzKEFGX0lORVQsIGluZm8tPm5lbnRyaWVzKTsKKwl4dF9jb21wYXRfaW5pdF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFLCBpbmZvLT5uZW50cmllcyk7CiAJcmV0dXJuIEVCVF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGNvbXBhdF9jYWxjX2VudHJ5LCBpbmZvLAogCQkJCQkJCWVudHJpZXMsIG5ld2luZm8pOwogfQpAQCAtMTg4Miw3ICsxODgyLDcgQEAKIAlzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOwogCXN0cnVjdCB4dF90YXJnZXQgKnd0OwogCXZvaWQgKmRzdCA9IE5VTEw7Ci0JaW50IG9mZiwgcGFkID0gMCwgcmV0ID0gMDsKKwlpbnQgb2ZmLCBwYWQgPSAwOwogCXVuc2lnbmVkIGludCBzaXplX2tlcm4sIGVudHJ5X29mZnNldCwgbWF0Y2hfc2l6ZSA9IG13dC0+bWF0Y2hfc2l6ZTsKIAogCXN0cmxjcHkobmFtZSwgbXd0LT51Lm5hbWUsIHNpemVvZihuYW1lKSk7CkBAIC0xOTM1LDEzICsxOTM1LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKCFkc3QpIHsKLQkJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19CUklER0UsIGVudHJ5X29mZnNldCwKLQkJCQkJb2ZmICsgZWJ0X2NvbXBhdF9lbnRyeV9wYWRzaXplKCkpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCiAJc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCArPSBtYXRjaF9zaXplICsgb2ZmOwogCXN0YXRlLT5idWZfdXNlcl9vZmZzZXQgKz0gbWF0Y2hfc2l6ZTsKIAlwYWQgPSBYVF9BTElHTihzaXplX2tlcm4pIC0gc2l6ZV9rZXJuOwpAQCAtMjAxNiw1MCArMjAwOSw2IEBACiAJcmV0dXJuIGdyb3d0aDsKIH0KIAotI2RlZmluZSBFQlRfQ09NUEFUX1dBVENIRVJfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICAgICAgICAgXAotKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXVuc2lnbmVkIGludCBfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaW50IF9fcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKl9fd2F0Y2hlcjsgICAgICAgICAgICAgXAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZm9yIChfX2kgPSBlLT53YXRjaGVyc19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIF9faSA8IChlKS0+dGFyZ2V0X29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICAgX19pICs9IF9fd2F0Y2hlci0+d2F0Y2hlcl9zaXplICsgICAgICAgICAgICAgICBcCi0JICAgICBzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSkgeyAgICAgICAgIFwKLQkJX193YXRjaGVyID0gKHZvaWQgKikoZSkgKyBfX2k7ICAgICAgICAgICAgICBcCi0JCV9fcmV0ID0gZm4oX193YXRjaGVyICwgIyMgYXJncyk7ICAgICAgICAgICAgXAotCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChfX3JldCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWlmIChfX2kgIT0gKGUpLT50YXJnZXRfb2Zmc2V0KSAgICAgICAgICAgICAgXAotCQkJX19yZXQgPSAtRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCi0KLSNkZWZpbmUgRUJUX0NPTVBBVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl1bnNpZ25lZCBpbnQgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWludCBfX3JldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0Jc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0ICpfX21hdGNoOyAgICAgICAgICAgICAgIFwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWZvciAoX19pID0gc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnkpOyAgICAgICAgICAgICAgICBcCi0JICAgICBfX2kgPCAoZSktPndhdGNoZXJzX29mZnNldDsgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIF9faSArPSBfX21hdGNoLT5tYXRjaF9zaXplICsgICAgICAgICAgICAgICAgICAgXAotCSAgICAgc2l6ZW9mKHN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCkpIHsgICAgICAgICBcCi0JCV9fbWF0Y2ggPSAodm9pZCAqKShlKSArIF9faTsgICAgICAgICAgICAgICAgXAotCQlfX3JldCA9IGZuKF9fbWF0Y2ggLCAjIyBhcmdzKTsgICAgICAgICAgICAgIFwKLQkJaWYgKF9fcmV0ICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoX19yZXQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoX19pICE9IChlKS0+d2F0Y2hlcnNfb2Zmc2V0KSAgICAgICAgICAgIFwKLQkJCV9fcmV0ID0gLUVJTlZBTDsgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCV9fcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19KQotCiAvKiBjYWxsZWQgZm9yIGFsbCBlYnRfZW50cnkgc3RydWN0dXJlcy4gKi8KIHN0YXRpYyBpbnQgc2l6ZV9lbnRyeV9td3Qoc3RydWN0IGVidF9lbnRyeSAqZW50cnksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCiAJCQkgIHVuc2lnbmVkIGludCAqdG90YWwsCkBAIC0yMTMyLDYgKzIwODEsMTQgQEAKIAkJfQogCX0KIAorCWlmIChzdGF0ZS0+YnVmX2tlcm5fc3RhcnQgPT0gTlVMTCkgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYnVmX3N0YXJ0IC0gKGNoYXIgKikgYmFzZTsKKworCQlyZXQgPSB4dF9jb21wYXRfYWRkX29mZnNldChORlBST1RPX0JSSURHRSwgb2Zmc2V0LCBuZXdfb2Zmc2V0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXN0YXJ0b2ZmID0gc3RhdGUtPmJ1Zl91c2VyX29mZnNldCAtIHN0YXJ0b2ZmOwogCiAJQlVHX09OKCp0b3RhbCA8IHN0YXJ0b2ZmKTsKQEAgLTIyNDAsNiArMjE5Nyw3IEBACiAKIAl4dF9jb21wYXRfbG9jayhORlBST1RPX0JSSURHRSk7CiAKKwl4dF9jb21wYXRfaW5pdF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFLCB0bXAubmVudHJpZXMpOwogCXJldCA9IGNvbXBhdF9jb3B5X2VudHJpZXMoZW50cmllc190bXAsIHRtcC5lbnRyaWVzX3NpemUsICZzdGF0ZSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NhaWZfc29ja2V0LmMgYi9uZXQvY2FpZi9jYWlmX3NvY2tldC5jCmluZGV4IDgxODRjMDMuLjM3YTQwMzQgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NhaWZfc29ja2V0LmMKKysrIGIvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYwpAQCAtODUyLDcgKzg1Miw3IEBACiAJc29jay0+c3RhdGUgPSBTU19DT05ORUNUSU5HOwogCXNrLT5za19zdGF0ZSA9IENBSUZfQ09OTkVDVElORzsKIAotCS8qIENoZWNrIHByaW9yaXR5IHZhbHVlIGNvbW1pbmcgZnJvbSBzb2NrZXQgKi8KKwkvKiBDaGVjayBwcmlvcml0eSB2YWx1ZSBjb21pbmcgZnJvbSBzb2NrZXQgKi8KIAkvKiBpZiBwcmlvcml0eSB2YWx1ZSBpcyBvdXQgb2YgcmFuZ2UgaXQgd2lsbCBiZSBhanVzdGVkICovCiAJaWYgKGNmX3NrLT5zay5za19wcmlvcml0eSA+IENBSUZfUFJJT19NQVgpCiAJCWNmX3NrLT5jb25uX3JlcS5wcmlvcml0eSA9IENBSUZfUFJJT19NQVg7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZmRnbWwuYyBiL25ldC9jYWlmL2NmZGdtbC5jCmluZGV4IDI3ZGFiMjYuLjA1NGZkYjUgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmZGdtbC5jCisrKyBiL25ldC9jYWlmL2NmZGdtbC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bmV0L2NhaWYvY2ZzcnZsLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2Zwa3QuaD4KIAorCiAjZGVmaW5lIGNvbnRhaW5lcl9vYmoobGF5cikgKChzdHJ1Y3QgY2ZzcnZsICopIGxheXIpCiAKICNkZWZpbmUgREdNX0NNRF9CSVQgIDB4ODAKQEAgLTgzLDYgKzg0LDcgQEAKIAogc3RhdGljIGludCBjZmRnbWxfdHJhbnNtaXQoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZnBrdCAqcGt0KQogeworCXU4IHBhY2tldF90eXBlOwogCXUzMiB6ZXJvID0gMDsKIAlzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKmluZm87CiAJc3RydWN0IGNmc3J2bCAqc2VydmljZSA9IGNvbnRhaW5lcl9vYmoobGF5cik7CkBAIC05NCw3ICs5Niw5IEBACiAJaWYgKGNmcGt0X2dldGxlbihwa3QpID4gREdNX01UVSkKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAotCWNmcGt0X2FkZF9oZWFkKHBrdCwgJnplcm8sIDQpOworCWNmcGt0X2FkZF9oZWFkKHBrdCwgJnplcm8sIDMpOworCXBhY2tldF90eXBlID0gMHgwODsgLyogQjkgc2V0IC0gVU5DTEFTU0lGSUVEICovCisJY2Zwa3RfYWRkX2hlYWQocGt0LCAmcGFja2V0X3R5cGUsIDEpOwogCiAJLyogQWRkIGluZm8gZm9yIE1VWC1sYXllciB0byByb3V0ZSB0aGUgcGFja2V0IG91dC4gKi8KIAlpbmZvID0gY2Zwa3RfaW5mbyhwa3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZtdXhsLmMgYi9uZXQvY2FpZi9jZm11eGwuYwppbmRleCA0NmYzNGIyLi4yNGYxZmZhIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZm11eGwuYworKysgYi9uZXQvY2FpZi9jZm11eGwuYwpAQCAtMjQ0LDkgKzI0NCw5IEBACiAJCQkJaW50IHBoeWlkKQogewogCXN0cnVjdCBjZm11eGwgKm11eGwgPSBjb250YWluZXJfb2JqKGxheXIpOwotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CiAJc3RydWN0IGNmbGF5ZXIgKmxheWVyOwotCWxpc3RfZm9yX2VhY2gobm9kZSwgJm11eGwtPnNydmxfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmbXV4bC0+c3J2bF9saXN0KSB7CiAJCWxheWVyID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgY2ZsYXllciwgbm9kZSk7CiAJCWlmIChjZnNydmxfcGh5aWRfbWF0Y2gobGF5ZXIsIHBoeWlkKSkKIAkJCWxheWVyLT5jdHJsY21kKGxheWVyLCBjdHJsLCBwaHlpZCk7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCA4NzFhMGFkLi44YTZhMDVlIDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCisrKyBiL25ldC9jYW4vYmNtLmMKQEAgLTM4Nyw3ICszODcsNyBAQAogfQogCiAvKgotICogYmNtX3R4X3RpbWVvdXRfaGFuZGxlciAtIHBlcmZvcm1lcyBjeWNsaWMgQ0FOIGZyYW1lIHRyYW5zbWlzc2lvbnMKKyAqIGJjbV90eF90aW1lb3V0X2hhbmRsZXIgLSBwZXJmb3JtcyBjeWNsaWMgQ0FOIGZyYW1lIHRyYW5zbWlzc2lvbnMKICAqLwogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGJjbV90eF90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpCiB7CkBAIC0xNDI3LDkgKzE0MjcsMTQgQEAKIHN0YXRpYyBpbnQgYmNtX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgYmNtX3NvY2sgKmJvID0gYmNtX3NrKHNrKTsKKwlzdHJ1Y3QgYmNtX3NvY2sgKmJvOwogCXN0cnVjdCBiY21fb3AgKm9wLCAqbmV4dDsKIAorCWlmIChzayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWJvID0gYmNtX3NrKHNrKTsKKwogCS8qIHJlbW92ZSBiY21fb3BzLCB0aW1lciwgcnhfdW5yZWdpc3RlcigpLCBldGMuICovCiAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYm8tPm5vdGlmaWVyKTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jCmluZGV4IDY0OWFjZmEuLjBlYjM5YTcgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcmF3LmMKKysrIGIvbmV0L2Nhbi9yYXcuYwpAQCAtMzA1LDcgKzMwNSwxMiBAQAogc3RhdGljIGludCByYXdfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCByYXdfc29jayAqcm8gPSByYXdfc2soc2spOworCXN0cnVjdCByYXdfc29jayAqcm87CisKKwlpZiAoIXNrKQorCQlyZXR1cm4gMDsKKworCXJvID0gcmF3X3NrKHNrKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZyby0+bm90aWZpZXIpOwogCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXIuYyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCmluZGV4IDA1ZjM1NzguLmUxNWE4MmMgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jCisrKyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCkBAIC0yMjY3LDYgKzIyNjcsMTkgQEAKIAltLT5tb3JlX3RvX2ZvbGxvdyA9IGZhbHNlOwogCW0tPnBvb2wgPSBOVUxMOwogCisJLyogbWlkZGxlICovCisJbS0+bWlkZGxlID0gTlVMTDsKKworCS8qIGRhdGEgKi8KKwltLT5ucl9wYWdlcyA9IDA7CisJbS0+cGFnZV9hbGlnbm1lbnQgPSAwOworCW0tPnBhZ2VzID0gTlVMTDsKKwltLT5wYWdlbGlzdCA9IE5VTEw7CisJbS0+YmlvID0gTlVMTDsKKwltLT5iaW9faXRlciA9IE5VTEw7CisJbS0+YmlvX3NlZyA9IDA7CisJbS0+dHJhaWwgPSBOVUxMOworCiAJLyogZnJvbnQgKi8KIAlpZiAoZnJvbnRfbGVuKSB7CiAJCWlmIChmcm9udF9sZW4gPiBQQUdFX0NBQ0hFX1NJWkUpIHsKQEAgLTIyODYsMTkgKzIyOTksNiBAQAogCX0KIAltLT5mcm9udC5pb3ZfbGVuID0gZnJvbnRfbGVuOwogCi0JLyogbWlkZGxlICovCi0JbS0+bWlkZGxlID0gTlVMTDsKLQotCS8qIGRhdGEgKi8KLQltLT5ucl9wYWdlcyA9IDA7Ci0JbS0+cGFnZV9hbGlnbm1lbnQgPSAwOwotCW0tPnBhZ2VzID0gTlVMTDsKLQltLT5wYWdlbGlzdCA9IE5VTEw7Ci0JbS0+YmlvID0gTlVMTDsKLQltLT5iaW9faXRlciA9IE5VTEw7Ci0JbS0+YmlvX3NlZyA9IDA7Ci0JbS0+dHJhaWwgPSBOVUxMOwotCiAJZG91dCgiY2VwaF9tc2dfbmV3ICVwIGZyb250ICVkXG4iLCBtLCBmcm9udF9sZW4pOwogCXJldHVybiBtOwogCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9vc2RfY2xpZW50LmMgYi9uZXQvY2VwaC9vc2RfY2xpZW50LmMKaW5kZXggM2I5MWQ2NS4uNmI1ZGRhMSAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvb3NkX2NsaWVudC5jCisrKyBiL25ldC9jZXBoL29zZF9jbGllbnQuYwpAQCAtNDcwLDggKzQ3MCw4IEBACiAJCQkJCSBzbmFwYywgb3BzLAogCQkJCQkgdXNlX21lbXBvb2wsCiAJCQkJCSBHRlBfTk9GUywgTlVMTCwgTlVMTCk7Ci0JaWYgKElTX0VSUihyZXEpKQotCQlyZXR1cm4gcmVxOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qIGNhbGN1bGF0ZSBtYXggd3JpdGUgc2l6ZSAqLwogCWNhbGNfbGF5b3V0KG9zZGMsIHZpbm8sIGxheW91dCwgb2ZmLCBwbGVuLCByZXEsIG9wcyk7CkBAIC01NzksOSArNTc5LDE1IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBucmVxLCAmb3NkLT5vX2xpbmdlcl9yZXF1ZXN0cywKIAkJCQkgcl9saW5nZXJfb3NkKSB7Ci0JCV9fdW5yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdChvc2RjLCByZXEpOworCQkvKgorCQkgKiByZXJlZ2lzdGVyIHJlcXVlc3QgcHJpb3IgdG8gdW5yZWdpc3RlcmluZyBsaW5nZXIgc28KKwkJICogdGhhdCByX29zZCBpcyBwcmVzZXJ2ZWQuCisJCSAqLworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnJlcS0+cl9yZXFfbHJ1X2l0ZW0pKTsKIAkJX19yZWdpc3Rlcl9yZXF1ZXN0KG9zZGMsIHJlcSk7Ci0JCWxpc3RfbW92ZSgmcmVxLT5yX3JlcV9scnVfaXRlbSwgJm9zZGMtPnJlcV91bnNlbnQpOworCQlsaXN0X2FkZCgmcmVxLT5yX3JlcV9scnVfaXRlbSwgJm9zZGMtPnJlcV91bnNlbnQpOworCQlsaXN0X2FkZCgmcmVxLT5yX29zZF9pdGVtLCAmcmVxLT5yX29zZC0+b19yZXF1ZXN0cyk7CisJCV9fdW5yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdChvc2RjLCByZXEpOwogCQlkb3V0KCJyZXF1ZXVlZCBsaW5nZXJpbmcgJXAgdGlkICVsbHUgb3NkJWRcbiIsIHJlcSwgcmVxLT5yX3RpZCwKIAkJICAgICBvc2QtPm9fb3NkKTsKIAl9CkBAIC03OTgsNyArODA0LDcgQEAKIAlyZXEtPnJfcmVxdWVzdC0+aGRyLnRpZCA9IGNwdV90b19sZTY0KHJlcS0+cl90aWQpOwogCUlOSVRfTElTVF9IRUFEKCZyZXEtPnJfcmVxX2xydV9pdGVtKTsKIAotCWRvdXQoInJlZ2lzdGVyX3JlcXVlc3QgJXAgdGlkICVsbGRcbiIsIHJlcSwgcmVxLT5yX3RpZCk7CisJZG91dCgiX19yZWdpc3Rlcl9yZXF1ZXN0ICVwIHRpZCAlbGxkXG4iLCByZXEsIHJlcS0+cl90aWQpOwogCV9faW5zZXJ0X3JlcXVlc3Qob3NkYywgcmVxKTsKIAljZXBoX29zZGNfZ2V0X3JlcXVlc3QocmVxKTsKIAlvc2RjLT5udW1fcmVxdWVzdHMrKzsKQEAgLTkxNyw3ICs5MjMsNyBAQAogLyoKICAqIFBpY2sgYW4gb3NkICh0aGUgZmlyc3QgJ3VwJyBvc2QgaW4gdGhlIHBnKSwgYWxsb2NhdGUgdGhlIG9zZCBzdHJ1Y3QKICAqIChhcyBuZWVkZWQpLCBhbmQgc2V0IHRoZSByZXF1ZXN0IHJfb3NkIGFwcHJvcHJpYXRlbHkuICBJZiB0aGVyZSBpcwotICogbm8gdXAgb3NkLCBzZXQgcl9vc2QgdG8gTlVMTC4gIE1vdmUgdGhlIHJlcXVlc3QgdG8gdGhlIGFwcHJvcGlhdGUgbGlzdAorICogbm8gdXAgb3NkLCBzZXQgcl9vc2QgdG8gTlVMTC4gIE1vdmUgdGhlIHJlcXVlc3QgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3QKICAqICh1bnNlbnQsIGhvbWVsZXNzKSBvciBsZWF2ZSBvbiBpbi1mbGlnaHQgbHJ1LgogICoKICAqIFJldHVybiAwIGlmIHVuY2hhbmdlZCwgMSBpZiBjaGFuZ2VkLCBvciBuZWdhdGl2ZSBvbiBlcnJvci4KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggM2RhOWZiMC4uYjYyNGZlNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTEyODQsMTEgKzEyODQsMTMgQEAKICAqLwogaW50IGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCUxJU1RfSEVBRChzaW5nbGUpOworCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCUxJU1RfSEVBRChzaW5nbGUpOwogCi0JbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7Ci0JZGV2X2Nsb3NlX21hbnkoJnNpbmdsZSk7Ci0JbGlzdF9kZWwoJnNpbmdsZSk7CisJCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOworCQlkZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKKwkJbGlzdF9kZWwoJnNpbmdsZSk7CisJfQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkZXZfY2xvc2UpOwpAQCAtMjA5MSw3ICsyMDkzLDcgQEAKIAkJdTMyIGZlYXR1cmVzOwogCiAJCS8qCi0JCSAqIElmIGRldmljZSBkb2VzbnQgbmVlZCBza2ItPmRzdCwgcmVsZWFzZSBpdCByaWdodCBub3cgd2hpbGUKKwkJICogSWYgZGV2aWNlIGRvZXNuJ3QgbmVlZCBza2ItPmRzdCwgcmVsZWFzZSBpdCByaWdodCBub3cgd2hpbGUKIAkJICogaXRzIGhvdCBpbiB0aGlzIGNwdSBjYWNoZQogCQkgKi8KIAkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9YTUlUX0RTVF9SRUxFQVNFKQpAQCAtMjE1MSw3ICsyMTUzLDcgQEAKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CiAKIAkJLyoKLQkJICogSWYgZGV2aWNlIGRvZXNudCBuZWVkIG5za2ItPmRzdCwgcmVsZWFzZSBpdCByaWdodCBub3cgd2hpbGUKKwkJICogSWYgZGV2aWNlIGRvZXNuJ3QgbmVlZCBuc2tiLT5kc3QsIHJlbGVhc2UgaXQgcmlnaHQgbm93IHdoaWxlCiAJCSAqIGl0cyBob3QgaW4gdGhpcyBjcHUgY2FjaGUKIAkJICovCiAJCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfWE1JVF9EU1RfUkVMRUFTRSkKQEAgLTI5NzAsOCArMjk3Miw4IEBACiAgKiB3aGVuIENPTkZJR19ORVRfQ0xTX0FDVCBpcz8gb3RoZXJ3aXNlIHNvbWUgdXNlbGVzcyBpbnN0cnVjdGlvbnMKICAqIGEgY29tcGFyZSBhbmQgMiBzdG9yZXMgZXh0cmEgcmlnaHQgbm93IGlmIHdlIGRvbnQgaGF2ZSBpdCBvbgogICogYnV0IGhhdmUgQ09ORklHX05FVF9DTFNfQUNUCi0gKiBOT1RFOiBUaGlzIGRvZXNudCBzdG9wIGFueSBmdW5jdGlvbmFsaXR5OyBpZiB5b3UgZG9udCBoYXZlCi0gKiB0aGUgaW5ncmVzcyBzY2hlZHVsZXIsIHlvdSBqdXN0IGNhbnQgYWRkIHBvbGljaWVzIG9uIGluZ3Jlc3MuCisgKiBOT1RFOiBUaGlzIGRvZXNuJ3Qgc3RvcCBhbnkgZnVuY3Rpb25hbGl0eTsgaWYgeW91IGRvbnQgaGF2ZQorICogdGhlIGluZ3Jlc3Mgc2NoZWR1bGVyLCB5b3UganVzdCBjYW4ndCBhZGQgcG9saWNpZXMgb24gaW5ncmVzcy4KICAqCiAgKi8KIHN0YXRpYyBpbnQgaW5nX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpyeHEpCkBAIC0zODAwLDcgKzM4MDIsNyBAQAogCQkgKiB3aXRoIG5ldHBvbGwncyBwb2xsX25hcGkoKS4gIE9ubHkgdGhlIGVudGl0eSB3aGljaAogCQkgKiBvYnRhaW5zIHRoZSBsb2NrIGFuZCBzZWVzIE5BUElfU1RBVEVfU0NIRUQgc2V0IHdpbGwKIAkJICogYWN0dWFsbHkgbWFrZSB0aGUgLT5wb2xsKCkgY2FsbC4gIFRoZXJlZm9yZSB3ZSBhdm9pZAotCQkgKiBhY2NpZGVudGx5IGNhbGxpbmcgLT5wb2xsKCkgd2hlbiBOQVBJIGlzIG5vdCBzY2hlZHVsZWQuCisJCSAqIGFjY2lkZW50YWxseSBjYWxsaW5nIC0+cG9sbCgpIHdoZW4gTkFQSSBpcyBub3Qgc2NoZWR1bGVkLgogCQkgKi8KIAkJd29yayA9IDA7CiAJCWlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVELCAmbi0+c3RhdGUpKSB7CkBAIC00NzczLDcgKzQ3NzUsNyBAQAogCQkgKiBpcyBuZXZlciByZWFjaGVkCiAJCSAqLwogCQlXQVJOX09OKDEpOwotCQllcnIgPSAtRUlOVkFMOworCQllcnIgPSAtRU5PVFRZOwogCQlicmVhazsKIAogCX0KQEAgLTUwNDEsNyArNTA0Myw3IEBACiAJCS8qIFNldCB0aGUgcGVyIGRldmljZSBtZW1vcnkgYnVmZmVyIHNwYWNlLgogCQkgKiBOb3QgYXBwbGljYWJsZSBpbiBvdXIgY2FzZSAqLwogCWNhc2UgU0lPQ1NJRkxJTks6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOT1RUWTsKIAogCS8qCiAJICoJVW5rbm93biBvciBwcml2YXRlIGlvY3RsLgpAQCAtNTA2Miw3ICs1MDY0LDcgQEAKIAkJLyogVGFrZSBjYXJlIG9mIFdpcmVsZXNzIEV4dGVuc2lvbnMgKi8KIAkJaWYgKGNtZCA+PSBTSU9DSVdGSVJTVCAmJiBjbWQgPD0gU0lPQ0lXTEFTVCkKIAkJCXJldHVybiB3ZXh0X2hhbmRsZV9pb2N0bChuZXQsICZpZnIsIGNtZCwgYXJnKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU5PVFRZOwogCX0KIH0KIApAQCAtNTE4NCwzMyArNTE4NiwzNyBAQAogCS8qIEZpeCBpbGxlZ2FsIGNoZWNrc3VtIGNvbWJpbmF0aW9ucyAqLwogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICYmCiAJICAgIChmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKSkgewotCQluZXRkZXZfaW5mbyhkZXYsICJtaXhlZCBIVyBhbmQgSVAgY2hlY2tzdW0gc2V0dGluZ3MuXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAibWl4ZWQgSFcgYW5kIElQIGNoZWNrc3VtIHNldHRpbmdzLlxuIik7CiAJCWZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKTsKIAl9CiAKIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSAmJgogCSAgICAoZmVhdHVyZXMgJiAoTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX0lQVjZfQ1NVTSkpKSB7Ci0JCW5ldGRldl9pbmZvKGRldiwgIm1peGVkIG5vIGNoZWNrc3VtbWluZyBhbmQgb3RoZXIgc2V0dGluZ3MuXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAibWl4ZWQgbm8gY2hlY2tzdW1taW5nIGFuZCBvdGhlciBzZXR0aW5ncy5cbiIpOwogCQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX0lQVjZfQ1NVTXxORVRJRl9GX0hXX0NTVU0pOwogCX0KIAogCS8qIEZpeCBpbGxlZ2FsIFNHK0NTVU0gY29tYmluYXRpb25zLiAqLwogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJgogCSAgICAhKGZlYXR1cmVzICYgTkVUSUZfRl9BTExfQ1NVTSkpIHsKLQkJbmV0ZGV2X2luZm8oZGV2LAotCQkJICAgICJEcm9wcGluZyBORVRJRl9GX1NHIHNpbmNlIG5vIGNoZWNrc3VtIGZlYXR1cmUuXG4iKTsKKwkJbmV0ZGV2X2RiZyhkZXYsCisJCQkiRHJvcHBpbmcgTkVUSUZfRl9TRyBzaW5jZSBubyBjaGVja3N1bSBmZWF0dXJlLlxuIik7CiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwogCX0KIAogCS8qIFRTTyByZXF1aXJlcyB0aGF0IFNHIGlzIHByZXNlbnQgYXMgd2VsbC4gKi8KLQlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9UU08pICYmICEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSkgewotCQluZXRkZXZfaW5mbyhkZXYsICJEcm9wcGluZyBORVRJRl9GX1RTTyBzaW5jZSBubyBTRyBmZWF0dXJlLlxuIik7Ci0JCWZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9BTExfVFNPKSAmJiAhKGZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEcm9wcGluZyBUU08gZmVhdHVyZXMgc2luY2Ugbm8gU0cgZmVhdHVyZS5cbiIpOworCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9BTExfVFNPOwogCX0KIAorCS8qIFRTTyBFQ04gcmVxdWlyZXMgdGhhdCBUU08gaXMgcHJlc2VudCBhcyB3ZWxsLiAqLworCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX0FMTF9UU08pID09IE5FVElGX0ZfVFNPX0VDTikKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPX0VDTjsKKwogCS8qIFNvZnR3YXJlIEdTTyBkZXBlbmRzIG9uIFNHLiAqLwogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX0dTTykgJiYgIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpKSB7Ci0JCW5ldGRldl9pbmZvKGRldiwgIkRyb3BwaW5nIE5FVElGX0ZfR1NPIHNpbmNlIG5vIFNHIGZlYXR1cmUuXG4iKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEcm9wcGluZyBORVRJRl9GX0dTTyBzaW5jZSBubyBTRyBmZWF0dXJlLlxuIik7CiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0dTTzsKIAl9CiAKQEAgLTUyMjAsMTMgKzUyMjYsMTMgQEAKIAkJaWYgKCEoKGZlYXR1cmVzICYgTkVUSUZfRl9HRU5fQ1NVTSkgfHwKIAkJICAgIChmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKQogCQkJICAgID09IChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKSkgewotCQkJbmV0ZGV2X2luZm8oZGV2LAorCQkJbmV0ZGV2X2RiZyhkZXYsCiAJCQkJIkRyb3BwaW5nIE5FVElGX0ZfVUZPIHNpbmNlIG5vIGNoZWNrc3VtIG9mZmxvYWQgZmVhdHVyZXMuXG4iKTsKIAkJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1VGTzsKIAkJfQogCiAJCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJCW5ldGRldl9pbmZvKGRldiwKKwkJCW5ldGRldl9kYmcoZGV2LAogCQkJCSJEcm9wcGluZyBORVRJRl9GX1VGTyBzaW5jZSBubyBORVRJRl9GX1NHIGZlYXR1cmUuXG4iKTsKIAkJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1VGTzsKIAkJfQpAQCAtNTQwOCwxMiArNTQxNCw2IEBACiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NPRlRfRkVBVFVSRVM7CiAJZGV2LT53YW50ZWRfZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzICYgZGV2LT5od19mZWF0dXJlczsKIAotCS8qIEF2b2lkIHdhcm5pbmcgZnJvbSBuZXRkZXZfZml4X2ZlYXR1cmVzKCkgZm9yIEdTTyB3aXRob3V0IFNHICovCi0JaWYgKCEoZGV2LT53YW50ZWRfZmVhdHVyZXMgJiBORVRJRl9GX1NHKSkgewotCQlkZXYtPndhbnRlZF9mZWF0dXJlcyAmPSB+TkVUSUZfRl9HU087Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfR1NPOwotCX0KLQogCS8qIEVuYWJsZSBHUk8gYW5kIE5FVElGX0ZfSElHSERNQSBmb3IgdmxhbnMgYnkgZGVmYXVsdCwKIAkgKiB2bGFuX2Rldl9pbml0KCkgd2lsbCBkbyB0aGUgZGV2LT5mZWF0dXJlcyBjaGVjaywgc28gdGhlc2UgZmVhdHVyZXMKIAkgKiBhcmUgZW5hYmxlZCBvbmx5IGlmIHN1cHBvcnRlZCBieSB1bmRlcmx5aW5nIGRldmljZS4KQEAgLTYzMzYsNyArNjMzNiw3IEBACiAJCWlmIChkZXYtPnJ0bmxfbGlua19vcHMpCiAJCQljb250aW51ZTsKIAotCQkvKiBQdXNoIHJlbWFpbmcgbmV0d29yayBkZXZpY2VzIHRvIGluaXRfbmV0ICovCisJCS8qIFB1c2ggcmVtYWluaW5nIG5ldHdvcmsgZGV2aWNlcyB0byBpbml0X25ldCAqLwogCQlzbnByaW50ZihmYl9uYW1lLCBJRk5BTVNJWiwgImRldiVkIiwgZGV2LT5pZmluZGV4KTsKIAkJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKGRldiwgJmluaXRfbmV0LCBmYl9uYW1lKTsKIAkJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAyMzJiMTg3Li5hZmI4YWZiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYworKysgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNDI1LDcgKzQyNSw3IEBACiAgKiBBcyB3ZSBkb250IHdhbnQgdG8gY2xlYXIgbWVtW10gYXJyYXkgZm9yIGVhY2ggcGFja2V0IGdvaW5nIHRocm91Z2gKICAqIHNrX3J1bl9maWx0ZXIoKSwgd2UgY2hlY2sgdGhhdCBmaWx0ZXIgbG9hZGVkIGJ5IHVzZXIgbmV2ZXIgdHJ5IHRvIHJlYWQKICAqIGEgY2VsbCBpZiBub3QgcHJldmlvdXNseSB3cml0dGVuLCBhbmQgd2UgY2hlY2sgYWxsIGJyYW5jaGVzIHRvIGJlIHN1cmUKLSAqIGEgbWFsaWNpb3VzIHVzZXIgZG9lc250IHRyeSB0byBhYnVzZSB1cy4KKyAqIGEgbWFsaWNpb3VzIHVzZXIgZG9lc24ndCB0cnkgdG8gYWJ1c2UgdXMuCiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfbG9hZF9hbmRfc3RvcmVzKHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxlbikKIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2xpbmtfd2F0Y2guYyBiL25ldC9jb3JlL2xpbmtfd2F0Y2guYwppbmRleCAwMWExMTAxLi5hN2IzNDIxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9saW5rX3dhdGNoLmMKKysrIGIvbmV0L2NvcmUvbGlua193YXRjaC5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsoJmxpbmt3YXRjaF93b3JrKSkKIAkJcmV0dXJuOwogCi0JLyogT3RoZXJ3aXNlIHdlIHJlc2NoZWR1bGUgaXQgYWdhaW4gZm9yIGltbWVkaWF0ZSBleGVjdGlvbi4gKi8KKwkvKiBPdGhlcndpc2Ugd2UgcmVzY2hlZHVsZSBpdCBhZ2FpbiBmb3IgaW1tZWRpYXRlIGV4ZWN1dGlvbi4gKi8KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmxpbmt3YXRjaF93b3JrLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA0OWY3ZWE1Li5kN2M0YmI0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAgKiBhcyBmYWlsdXJlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdmVyeSB1bmxpa2VseSwgaXQgY2FuIG9ubHkgaGFwcGVuIGR1ZQogICogdG8gbGFjayBvZiBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIHRoZSBjaGFpbiB0byBzdG9yZSBhbGwgbWVzc2FnZQogICogaGFuZGxlcnMgZm9yIGEgcHJvdG9jb2wuIE1lYW50IGZvciB1c2UgaW4gaW5pdCBmdW5jdGlvbnMgd2hlcmUgbGFjawotICogb2YgbWVtb3J5IGltcGxpZXMgbm8gc2Vuc2UgaW4gY29udGludWVpbmcuCisgKiBvZiBtZW1vcnkgaW1wbGllcyBubyBzZW5zZSBpbiBjb250aW51aW5nLgogICovCiB2b2lkIHJ0bmxfcmVnaXN0ZXIoaW50IHByb3RvY29sLCBpbnQgbXNndHlwZSwKIAkJICAgcnRubF9kb2l0X2Z1bmMgZG9pdCwgcnRubF9kdW1waXRfZnVuYyBkdW1waXQpCkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogZXJyb3V0OgogCWlmIChlcnIgPCAwICYmIG1vZGlmaWVkICYmIG5ldF9yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQSBsaW5rIGNoYW5nZSByZXF1ZXN0IGZhaWxlZCB3aXRoICIKLQkJICAgICAgICJzb21lIGNoYW5nZXMgY29taXR0ZWQgYWxyZWFkeS4gSW50ZXJmYWNlICVzIG1heSAiCisJCSAgICAgICAic29tZSBjaGFuZ2VzIGNvbW1pdHRlZCBhbHJlYWR5LiBJbnRlcmZhY2UgJXMgbWF5ICIKIAkJICAgICAgICJoYXZlIGJlZW4gbGVmdCB3aXRoIGFuIGluY29uc2lzdGVudCBjb25maWd1cmF0aW9uLCAiCiAJCSAgICAgICAicGxlYXNlIGNoZWNrLlxuIiwgZGV2LT5uYW1lKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA4MDFkZDA4Li43ZWJlZWQwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMjI2Nyw3ICsyMjY3LDcgQEAKICAqIG9mIGJ5dGVzIGFscmVhZHkgY29uc3VtZWQgYW5kIHRoZSBuZXh0IGNhbGwgdG8KICAqIHNrYl9zZXFfcmVhZCgpIHdpbGwgcmV0dXJuIHRoZSByZW1haW5pbmcgcGFydCBvZiB0aGUgYmxvY2suCiAgKgotICogTm90ZSAxOiBUaGUgc2l6ZSBvZiBlYWNoIGJsb2NrIG9mIGRhdGEgcmV0dXJuZWQgY2FuIGJlIGFyYml0YXJ5LAorICogTm90ZSAxOiBUaGUgc2l6ZSBvZiBlYWNoIGJsb2NrIG9mIGRhdGEgcmV0dXJuZWQgY2FuIGJlIGFyYml0cmFyeSwKICAqICAgICAgIHRoaXMgbGltaXRhdGlvbiBpcyB0aGUgY29zdCBmb3IgemVyb2NvcHkgc2VxZXVlbnRhbAogICogICAgICAgcmVhZHMgb2YgcG90ZW50aWFsbHkgbm9uIGxpbmVhciBkYXRhLgogICoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA3ZGZlZDc5Li42ZTgxOTc4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIF9fdTMyIHN5c2N0bF93bWVtX2RlZmF1bHQgX19yZWFkX21vc3RseSA9IFNLX1dNRU1fTUFYOwogX191MzIgc3lzY3RsX3JtZW1fZGVmYXVsdCBfX3JlYWRfbW9zdGx5ID0gU0tfUk1FTV9NQVg7CiAKLS8qIE1heGltYWwgc3BhY2UgZWF0ZW4gYnkgaW92ZWMgb3IgYW5jaWxsaWFyeSBkYXRhIHBsdXMgc29tZSBzcGFjZSAqLworLyogTWF4aW1hbCBzcGFjZSBlYXRlbiBieSBpb3ZlYyBvciBhbmNpbGxhcnkgZGF0YSBwbHVzIHNvbWUgc3BhY2UgKi8KIGludCBzeXNjdGxfb3B0bWVtX21heCBfX3JlYWRfbW9zdGx5ID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKigyKlVJT19NQVhJT1YrNTEyKTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX29wdG1lbV9tYXgpOwogCkBAIC0xMTc1LDcgKzExNzUsNyBAQAogdm9pZCBza19mcmVlKHN0cnVjdCBzb2NrICpzaykKIHsKIAkvKgotCSAqIFdlIHN1YnN0cmFjdCBvbmUgZnJvbSBza193bWVtX2FsbG9jIGFuZCBjYW4ga25vdyBpZgorCSAqIFdlIHN1YnRyYWN0IG9uZSBmcm9tIHNrX3dtZW1fYWxsb2MgYW5kIGNhbiBrbm93IGlmCiAJICogc29tZSBwYWNrZXRzIGFyZSBzdGlsbCBpbiBzb21lIHR4IHF1ZXVlLgogCSAqIElmIG5vdCBudWxsLCBzb2NrX3dmcmVlKCkgd2lsbCBjYWxsIF9fc2tfZnJlZShzaykgbGF0ZXIKIAkgKi8KQEAgLTExODUsMTAgKzExODUsMTAgQEAKIEVYUE9SVF9TWU1CT0woc2tfZnJlZSk7CiAKIC8qCi0gKiBMYXN0IHNvY2tfcHV0IHNob3VsZCBkcm9wIHJlZmVycmVuY2UgdG8gc2stPnNrX25ldC4gSXQgaGFzIGFscmVhZHkKLSAqIGJlZW4gZHJvcHBlZCBpbiBza19jaGFuZ2VfbmV0LiBUYWtpbmcgcmVmZXJyZW5jZSB0byBzdG9wcGluZyBuYW1lc3BhY2UKKyAqIExhc3Qgc29ja19wdXQgc2hvdWxkIGRyb3AgcmVmZXJlbmNlIHRvIHNrLT5za19uZXQuIEl0IGhhcyBhbHJlYWR5CisgKiBiZWVuIGRyb3BwZWQgaW4gc2tfY2hhbmdlX25ldC4gVGFraW5nIHJlZmVyZW5jZSB0byBzdG9wcGluZyBuYW1lc3BhY2UKICAqIGlzIG5vdCBhbiBvcHRpb24uCi0gKiBUYWtlIHJlZmVycmVuY2UgdG8gYSBzb2NrZXQgdG8gcmVtb3ZlIGl0IGZyb20gaGFzaCBfYWxpdmVfIGFuZCBhZnRlciB0aGF0CisgKiBUYWtlIHJlZmVyZW5jZSB0byBhIHNvY2tldCB0byByZW1vdmUgaXQgZnJvbSBoYXNoIF9hbGl2ZV8gYW5kIGFmdGVyIHRoYXQKICAqIGRlc3Ryb3kgaXQgaW4gdGhlIGNvbnRleHQgb2YgaW5pdF9uZXQuCiAgKi8KIHZvaWQgc2tfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3B0aW9ucy5jIGIvbmV0L2RjY3Avb3B0aW9ucy5jCmluZGV4IGYwNmZmY2YuLjRiMmFiNjUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL29wdGlvbnMuYworKysgYi9uZXQvZGNjcC9vcHRpb25zLmMKQEAgLTEyMyw2ICsxMjMsOCBAQAogCQljYXNlIERDQ1BPX0NIQU5HRV9MIC4uLiBEQ0NQT19DT05GSVJNX1I6CiAJCQlpZiAocGt0X3R5cGUgPT0gRENDUF9QS1RfREFUQSkgICAgICAvKiBSRkMgNDM0MCwgNiAqLwogCQkJCWJyZWFrOworCQkJaWYgKGxlbiA9PSAwKQorCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOwogCQkJcmMgPSBkY2NwX2ZlYXRfcGFyc2Vfb3B0aW9ucyhzaywgZHJlcSwgbWFuZGF0b3J5LCBvcHQsCiAJCQkJCQkgICAgKnZhbHVlLCB2YWx1ZSArIDEsIGxlbiAtIDEpOwogCQkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCA3ODRkMzAyMS4uMTM2ZDQxYyAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3V0cHV0LmMKKysrIGIvbmV0L2RjY3Avb3V0cHV0LmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogfQogCiAvKioKLSAqIGRjY3BfZGV0ZXJtaW5lX2NjbXBzICAtICBGaW5kIG91dCBhYm91dCBDQ0lELXNwZWNmaWMgcGFja2V0LXNpemUgbGltaXRzCisgKiBkY2NwX2RldGVybWluZV9jY21wcyAgLSAgRmluZCBvdXQgYWJvdXQgQ0NJRC1zcGVjaWZpYyBwYWNrZXQtc2l6ZSBsaW1pdHMKICAqIFdlIG9ubHkgY29uc2lkZXIgdGhlIEhDLXNlbmRlciBDQ0lEIGZvciBzZXR0aW5nIHRoZSBDQ01QUyAoUkZDIDQzNDAsIDE0LiksCiAgKiBzaW5jZSB0aGUgUlggQ0NJRCBpcyByZXN0cmljdGVkIHRvIGZlZWRiYWNrIHBhY2tldHMgKEFja3MpLCB3aGljaCBhcmUgc21hbGwKICAqIGluIGNvbXBhcmlzb24gd2l0aCB0aGUgZGF0YSB0cmFmZmljLiBBIHZhbHVlIG9mIDAgbWVhbnMgIm5vIGN1cnJlbnQgQ0NNUFMiLgpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9LY29uZmlnIGIvbmV0L2RzYS9LY29uZmlnCmluZGV4IDg3YmI1ZjQuLmM1M2RlZDIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvS2NvbmZpZworKysgYi9uZXQvZHNhL0tjb25maWcKQEAgLTQxLDEyICs0MSwxMiBAQAogCWRlZmF1bHQgbgogCiBjb25maWcgTkVUX0RTQV9NVjg4RTYxMzEKLQlib29sICJNYXJ2ZWxsIDg4RTYwOTUvNjA5NUYvNjEzMSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgorCWJvb2wgIk1hcnZlbGwgODhFNjA4NS82MDk1LzYwOTVGLzYxMzEgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCIKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFgKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUKIAlzZWxlY3QgTkVUX0RTQV9UQUdfRFNBCiAJLS0taGVscC0tLQotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYwOTUvNjA5NUYvNjEzMQorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYwODUvNjA5NS82MDk1Ri82MTMxCiAJICBldGhlcm5ldCBzd2l0Y2ggY2hpcHMuCiAKIGNvbmZpZyBORVRfRFNBX01WODhFNjEyM182MV82NQpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYxMzEuYyBiL25ldC9kc2EvbXY4OGU2MTMxLmMKaW5kZXggYmIyYjQxYi4uNDVmNzQxMSAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYxMzEuYworKysgYi9uZXQvZHNhL212ODhlNjEzMS5jCkBAIC0xNCw2ICsxNCwxMyBAQAogI2luY2x1ZGUgImRzYV9wcml2LmgiCiAjaW5jbHVkZSAibXY4OGU2eHh4LmgiCiAKKy8qCisgKiBTd2l0Y2ggcHJvZHVjdCBJRHMKKyAqLworI2RlZmluZSBJRF82MDg1CQkweDA0YTAKKyNkZWZpbmUgSURfNjA5NQkJMHgwOTUwCisjZGVmaW5lIElEXzYxMzEJCTB4MTA2MAorCiBzdGF0aWMgY2hhciAqbXY4OGU2MTMxX3Byb2JlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBzd19hZGRyKQogewogCWludCByZXQ7CkBAIC0yMSw5ICsyOCwxMSBAQAogCXJldCA9IF9fbXY4OGU2eHh4X3JlZ19yZWFkKGJ1cywgc3dfYWRkciwgUkVHX1BPUlQoMCksIDB4MDMpOwogCWlmIChyZXQgPj0gMCkgewogCQlyZXQgJj0gMHhmZmYwOwotCQlpZiAocmV0ID09IDB4MDk1MCkKKwkJaWYgKHJldCA9PSBJRF82MDg1KQorCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYwODUiOworCQlpZiAocmV0ID09IElEXzYwOTUpCiAJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjA5NS84OEU2MDk1RiI7Ci0JCWlmIChyZXQgPT0gMHgxMDYwKQorCQlpZiAocmV0ID09IElEXzYxMzEpCiAJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjEzMSI7CiAJfQogCkBAIC0xMjQsNyArMTMzLDcgQEAKIAkgKiBJZ25vcmUgcmVtb3ZlZCB0YWcgZGF0YSBvbiBkb3VibHkgdGFnZ2VkIHBhY2tldHMsIGRpc2FibGUKIAkgKiBmbG93IGNvbnRyb2wgbWVzc2FnZXMsIGZvcmNlIGZsb3cgY29udHJvbCBwcmlvcml0eSB0byB0aGUKIAkgKiBoaWdoZXN0LCBhbmQgc2VuZCBhbGwgc3BlY2lhbCBtdWx0aWNhc3QgZnJhbWVzIHRvIHRoZSBDUFUKLQkgKiBwb3J0IGF0IHRoZSBoaWdlc3QgcHJpb3JpdHkuCisJICogcG9ydCBhdCB0aGUgaGlnaGVzdCBwcmlvcml0eS4KIAkgKi8KIAlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDUsIDB4MDBmZik7CiAKQEAgLTE2NCw2ICsxNzMsNyBAQAogCiBzdGF0aWMgaW50IG12ODhlNjEzMV9zZXR1cF9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCiB7CisJc3RydWN0IG12ODhlNnh4eF9wcml2X3N0YXRlICpwcyA9ICh2b2lkICopKGRzICsgMSk7CiAJaW50IGFkZHIgPSBSRUdfUE9SVChwKTsKIAl1MTYgdmFsOwogCkBAIC0xNzEsMTAgKzE4MSwxMyBAQAogCSAqIE1BQyBGb3JjaW5nIHJlZ2lzdGVyOiBkb24ndCBmb3JjZSBsaW5rLCBzcGVlZCwgZHVwbGV4CiAJICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcyBvbiBwaHlzaWNhbAogCSAqIHBvcnRzLCBidXQgZm9yY2UgdGhlIENQVSBwb3J0IGFuZCBhbGwgRFNBIHBvcnRzIHRvIDEwMDAgTWIvcwotCSAqIGZ1bGwgZHVwbGV4LgorCSAqICgxMDAgTWIvcyBvbiA2MDg1KSBmdWxsIGR1cGxleC4KIAkgKi8KIAlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSB8fCBkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQotCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDNlKTsKKwkJaWYgKHBzLT5pZCA9PSBJRF82MDg1KQorCQkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAzZCk7IC8qIDEwMCBNYi9zICovCisJCWVsc2UKKwkJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwM2UpOyAvKiAxMDAwIE1iL3MgKi8KIAllbHNlCiAJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOwogCkBAIC0xOTQsOCArMjA3LDE1IEBACiAJICogbW9kZSwgYnV0IGRvIG5vdCBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzLgogCSAqLwogCXZhbCA9IDB4MDQzMzsKLQlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKSB7CiAJCXZhbCB8PSAweDAxMDQ7CisJCS8qCisJCSAqIE9uIDYwODUsIHVua25vd24gbXVsdGljYXN0IGZvcndhcmQgaXMgY29udHJvbGxlZAorCQkgKiBoZXJlIHJhdGhlciB0aGFuIGluIFBvcnQgQ29udHJvbCAyIHJlZ2lzdGVyLgorCQkgKi8KKwkJaWYgKHBzLT5pZCA9PSBJRF82MDg1KQorCQkJdmFsIHw9IDB4MDAwODsKKwl9CiAJaWYgKGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCiAJCXZhbCB8PSAweDAxMDA7CiAJUkVHX1dSSVRFKGFkZHIsIDB4MDQsIHZhbCk7CkBAIC0yMzgsMTAgKzI1OCwxOSBAQAogCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKIAkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gbXVsdGljYXN0IGFkZHJlc3Nlcy4KIAkgKi8KLQl2YWwgPSAweDAwODAgfCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7Ci0JaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQotCQl2YWwgfD0gMHgwMDQwOwotCVJFR19XUklURShhZGRyLCAweDA4LCB2YWwpOworCWlmIChwcy0+aWQgPT0gSURfNjA4NSkKKwkJLyoKKwkJICogb24gNjA4NSwgYml0cyAzOjAgYXJlIHJlc2VydmVkLCBiaXQgNiBjb250cm9sIEFSUAorCQkgKiBtaXJyb3JpbmcsIGFuZCBtdWx0aWNhc3QgZm9yd2FyZCBpcyBoYW5kbGVkIGluCisJCSAqIFBvcnQgQ29udHJvbCByZWdpc3Rlci4KKwkJICovCisJCVJFR19XUklURShhZGRyLCAweDA4LCAweDAwODApOworCWVsc2UgeworCQl2YWwgPSAweDAwODAgfCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJCXZhbCB8PSAweDAwNDA7CisJCVJFR19XUklURShhZGRyLCAweDA4LCB2YWwpOworCX0KIAogCS8qCiAJICogUmF0ZSBDb250cm9sOiBkaXNhYmxlIGluZ3Jlc3MgcmF0ZSBsaW1pdGluZy4KQEAgLTI4Niw2ICszMTUsOCBAQAogCW12ODhlNnh4eF9wcHVfc3RhdGVfaW5pdChkcyk7CiAJbXV0ZXhfaW5pdCgmcHMtPnN0YXRzX211dGV4KTsKIAorCXBzLT5pZCA9IFJFR19SRUFEKFJFR19QT1JUKDApLCAweDAzKSAmIDB4ZmZmMDsKKwogCXJldCA9IG12ODhlNjEzMV9zd2l0Y2hfcmVzZXQoZHMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTZ4eHguaCBiL25ldC9kc2EvbXY4OGU2eHh4LmgKaW5kZXggZWIwZTBhYS4uNjExNTZjYTIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2eHh4LmgKKysrIGIvbmV0L2RzYS9tdjg4ZTZ4eHguaApAQCAtMzksNiArMzksOCBAQAogCSAqIEhvbGQgdGhpcyBtdXRleCBvdmVyIHNuYXBzaG90ICsgZHVtcCBzZXF1ZW5jZXMuCiAJICovCiAJc3RydWN0IG11dGV4CXN0YXRzX211dGV4OworCisJaW50CQlpZDsgLyogc3dpdGNoIHByb2R1Y3QgaWQgKi8KIH07CiAKIHN0cnVjdCBtdjg4ZTZ4eHhfaHdfc3RhdCB7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZSBiL25ldC9pZWVlODAyMTU0L01ha2VmaWxlCmluZGV4IGNlMmQzMzUuLjU3NjExODUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L01ha2VmaWxlCisrKyBiL25ldC9pZWVlODAyMTU0L01ha2VmaWxlCkBAIC0xLDUgKzEsMyBAQAogb2JqLSQoQ09ORklHX0lFRUU4MDIxNTQpICs9CWllZWU4MDIxNTQubyBhZl84MDIxNTQubwogaWVlZTgwMjE1NC15CQk6PSBuZXRsaW5rLm8gbmwtbWFjLm8gbmwtcGh5Lm8gbmxfcG9saWN5Lm8gd3Bhbi1jbGFzcy5vCiBhZl84MDIxNTQteQkJOj0gYWZfaWVlZTgwMjE1NC5vIHJhdy5vIGRncmFtLm8KLQotY2NmbGFncy15ICs9IC1XYWxsIC1EREVCVUcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwppbmRleCAwOTRlMTUwLi5hMGFmN2VhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMKKysrIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjYXRlZ29yeSByYW5nZXMgcGVybWl0dGVkIGluIHRoZSByYW5nZWQgY2F0ZWdvcnkgdGFnCiAgKiAodGFnICM1KS4gIFlvdSBtYXkgbm90ZSB0aGF0IHRoZSBJRVRGIGRyYWZ0IHN0YXRlcyB0aGF0IHRoZSBtYXhpbXVtIG51bWJlcgogICogb2YgY2F0ZWdvcnkgcmFuZ2VzIGlzIDcsIGJ1dCBpZiB0aGUgbG93IGVuZCBvZiB0aGUgbGFzdCBjYXRlZ29yeSByYW5nZSBpcwotICogemVybyB0aGVuIGl0IGlzIHBvc3NpYmlsZSB0byBmaXQgOCBjYXRlZ29yeSByYW5nZXMgYmVjYXVzZSB0aGUgemVybyBzaG91bGQKKyAqIHplcm8gdGhlbiBpdCBpcyBwb3NzaWJsZSB0byBmaXQgOCBjYXRlZ29yeSByYW5nZXMgYmVjYXVzZSB0aGUgemVybyBzaG91bGQKICAqIGJlIG9taXR0ZWQuICovCiAjZGVmaW5lIENJUFNPX1Y0X1RBR19STkdfQ0FUX01BWCAgICAgIDgKIApAQCAtNDM4LDcgKzQzOCw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiBTZWFyY2ggdGhlIERPSSBkZWZpbml0aW9uIGxpc3QgZm9yIGEgRE9JIGRlZmluaXRpb24gd2l0aCBhIERPSSB2YWx1ZSB0aGF0Ci0gKiBtYXRjaGVzIEBkb2kuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmlsZSBmb3IgY2FsbGluZyByY3VfcmVhZF9bdW5dbG9jaygpLgorICogbWF0Y2hlcyBAZG9pLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyByY3VfcmVhZF9bdW5dbG9jaygpLgogICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIERPSSBkZWZpbml0aW9uIG9uIHN1Y2Nlc3MgYW5kIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIHN0cnVjdCBjaXBzb192NF9kb2kgKmNpcHNvX3Y0X2RvaV9zZWFyY2godTMyIGRvaSkKQEAgLTEyOTMsNyArMTI5Myw3IEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAogCQkvKiBUaGlzIHdpbGwgc2VuZCBwYWNrZXRzIHVzaW5nIHRoZSAib3B0aW1pemVkIiBmb3JtYXQgd2hlbgotCQkgKiBwb3NzaWJpbGUgYXMgc3BlY2lmaWVkIGluICBzZWN0aW9uIDMuNC4yLjYgb2YgdGhlCisJCSAqIHBvc3NpYmxlIGFzIHNwZWNpZmllZCBpbiAgc2VjdGlvbiAzLjQuMi42IG9mIHRoZQogCQkgKiBDSVBTTyBkcmFmdC4gKi8KIAkJaWYgKGNpcHNvX3Y0X3JibV9vcHRmbXQgJiYgcmV0X3ZhbCA+IDAgJiYgcmV0X3ZhbCA8PSAxMCkKIAkJCXRhZ19sZW4gPSAxNDsKQEAgLTE3NTIsNyArMTc1Miw3IEBACiB9CiAKIC8qKgotICogY2lwc29fdjRfZXJyb3IgLSBTZW5kIHRoZSBjb3JyZWN0IHJlcG9uc2UgZm9yIGEgYmFkIHBhY2tldAorICogY2lwc29fdjRfZXJyb3IgLSBTZW5kIHRoZSBjb3JyZWN0IHJlc3BvbnNlIGZvciBhIGJhZCBwYWNrZXQKICAqIEBza2I6IHRoZSBwYWNrZXQKICAqIEBlcnJvcjogdGhlIGVycm9yIGNvZGUKICAqIEBnYXRld2F5OiBDSVBTTyBnYXRld2F5IGZsYWcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA1MzQ1YjBiLi5jZDljYTA4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xNjgwLDcgKzE2ODAsNyBAQAogCQlyZXR1cm47CiAKIAljbmYtPnN5c2N0bCA9IE5VTEw7Ci0JdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUodC0+c3lzY3RsX2hlYWRlcik7CisJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHQtPnN5c2N0bF9oZWFkZXIpOwogCWtmcmVlKHQtPmRldl9uYW1lKTsKIAlrZnJlZSh0KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl90cmllLmMgYi9uZXQvaXB2NC9maWJfdHJpZS5jCmluZGV4IGI5MmM4NmYuLjVmZTliOGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl90cmllLmMKKysrIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpAQCAtMTIsNyArMTIsNyBAQAogICoKICAqICAgSGFucyBMaXNzIDxoYW5zLmxpc3NAaXRzLnV1LnNlPiAgVXBwc2FsYSBVbml2ZXJzaXRldAogICoKLSAqIFRoaXMgd29yayBpcyBiYXNlZCBvbiB0aGUgTFBDLXRyaWUgd2hpY2ggaXMgb3JpZ2luYWxseSBkZXNjaWJlZCBpbjoKKyAqIFRoaXMgd29yayBpcyBiYXNlZCBvbiB0aGUgTFBDLXRyaWUgd2hpY2ggaXMgb3JpZ2luYWxseSBkZXNjcmliZWQgaW46CiAgKgogICogQW4gZXhwZXJpbWVudGFsIHN0dWR5IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgZm9yIGR5bmFtaWMgdHJpZXMKICAqIFN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KQEAgLTE5NzgsOSArMTk3OCw2IEBACiAJdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKIAltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAKLQlpZiAoaWQgPT0gUlRfVEFCTEVfTE9DQUwpCi0JCXByX2luZm8oIklQdjQgRklCOiBVc2luZyBMQy10cmllIHZlcnNpb24gJXNcbiIsIFZFUlNJT04pOwotCiAJcmV0dXJuIHRiOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggYTkxZGMxNi4uZTVmOGE3MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNzA0LDcgKzcwNCw3IEBACiAJICovCiAKIAkvKgotCSAqCUNoZWNrIHRoZSBvdGhlciBlbmQgaXNudCB2aW9sYXRpbmcgUkZDIDExMjIuIFNvbWUgcm91dGVycyBzZW5kCisJICoJQ2hlY2sgdGhlIG90aGVyIGVuZCBpc24ndCB2aW9sYXRpbmcgUkZDIDExMjIuIFNvbWUgcm91dGVycyBzZW5kCiAJICoJYm9ndXMgcmVzcG9uc2VzIHRvIGJyb2FkY2FzdCBmcmFtZXMuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlCiAJICoJZmlyc3QgY2hlY2sgeW91ciBuZXRtYXNrIG1hdGNoZXMgYXQgYm90aCBlbmRzLCBpZiBpdCBkb2VzIHRoZW4KIAkgKglnZXQgdGhlIG90aGVyIHZlbmRvciB0byBmaXggdGhlaXIga2l0LgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggNmMwYjdmNC4uMzhmMjNlNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC03Myw3ICs3Myw3IEBACiAJCSAgICAgIXNrMi0+c2tfYm91bmRfZGV2X2lmIHx8CiAJCSAgICAgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBzazItPnNrX2JvdW5kX2Rldl9pZikpIHsKIAkJCWlmICghcmV1c2UgfHwgIXNrMi0+c2tfcmV1c2UgfHwKLQkJCSAgICAoKDEgPDwgc2syLT5za19zdGF0ZSkgJiAoVENQRl9MSVNURU4gfCBUQ1BGX0NMT1NFKSkpIHsKKwkJCSAgICBzazItPnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKIAkJCQljb25zdCBfX2JlMzIgc2syX3Jjdl9zYWRkciA9IHNrX3Jjdl9zYWRkcihzazIpOwogCQkJCWlmICghc2syX3Jjdl9zYWRkciB8fCAhc2tfcmN2X3NhZGRyKHNrKSB8fAogCQkJCSAgICBzazJfcmN2X3NhZGRyID09IHNrX3Jjdl9zYWRkcihzaykpCkBAIC0xMjIsOCArMTIyLDcgQEAKIAkJCQkJICAgICh0Yi0+bnVtX293bmVycyA8IHNtYWxsZXN0X3NpemUgfHwgc21hbGxlc3Rfc2l6ZSA9PSAtMSkpIHsKIAkJCQkJCXNtYWxsZXN0X3NpemUgPSB0Yi0+bnVtX293bmVyczsKIAkJCQkJCXNtYWxsZXN0X3JvdmVyID0gcm92ZXI7Ci0JCQkJCQlpZiAoYXRvbWljX3JlYWQoJmhhc2hpbmZvLT5ic29ja2V0cykgPiAoaGlnaCAtIGxvdykgKyAxICYmCi0JCQkJCQkgICAgIWluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPmJpbmRfY29uZmxpY3Qoc2ssIHRiKSkgeworCQkJCQkJaWYgKGF0b21pY19yZWFkKCZoYXNoaW5mby0+YnNvY2tldHMpID4gKGhpZ2ggLSBsb3cpICsgMSkgewogCQkJCQkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKIAkJCQkJCQlzbnVtID0gc21hbGxlc3Rfcm92ZXI7CiAJCQkJCQkJZ290byBoYXZlX3NudW07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwppbmRleCBkZDFiMjBlLi45ZGY0ZTYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0cGVlci5jCisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmMKQEAgLTM1NCw3ICszNTQsOCBAQAogfQogCiAvKiBNYXkgYmUgY2FsbGVkIHdpdGggbG9jYWwgQkggZW5hYmxlZC4gKi8KLXN0YXRpYyB2b2lkIHVubGlua19mcm9tX3Bvb2woc3RydWN0IGluZXRfcGVlciAqcCwgc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlKQorc3RhdGljIHZvaWQgdW5saW5rX2Zyb21fcG9vbChzdHJ1Y3QgaW5ldF9wZWVyICpwLCBzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsCisJCQkgICAgIHN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXSkKIHsKIAlpbnQgZG9fZnJlZTsKIApAQCAtMzY4LDcgKzM2OSw2IEBACiAJICogV2UgdXNlIHJlZmNudD0tMSB0byBhbGVydCBsb2NrbGVzcyByZWFkZXJzIHRoaXMgZW50cnkgaXMgZGVsZXRlZC4KIAkgKi8KIAlpZiAoYXRvbWljX2NtcHhjaGcoJnAtPnJlZmNudCwgMSwgLTEpID09IDEpIHsKLQkJc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKnN0YWNrW1BFRVJfTUFYREVQVEhdOwogCQlzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqKnN0YWNrcHRyLCAqKipkZWxwOwogCQlpZiAobG9va3VwKCZwLT5kYWRkciwgc3RhY2ssIGJhc2UpICE9IHApCiAJCQlCVUcoKTsKQEAgLTQyMiw3ICs0MjIsNyBAQAogfQogCiAvKiBNYXkgYmUgY2FsbGVkIHdpdGggbG9jYWwgQkggZW5hYmxlZC4gKi8KLXN0YXRpYyBpbnQgY2xlYW51cF9vbmNlKHVuc2lnbmVkIGxvbmcgdHRsKQorc3RhdGljIGludCBjbGVhbnVwX29uY2UodW5zaWduZWQgbG9uZyB0dGwsIHN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXSkKIHsKIAlzdHJ1Y3QgaW5ldF9wZWVyICpwID0gTlVMTDsKIApAQCAtNDU0LDcgKzQ1NCw3IEBACiAJCSAqIGhhcHBlbiBiZWNhdXNlIG9mIGVudHJ5IGxpbWl0cyBpbiByb3V0ZSBjYWNoZS4gKi8KIAkJcmV0dXJuIC0xOwogCi0JdW5saW5rX2Zyb21fcG9vbChwLCBwZWVyX3RvX2Jhc2UocCkpOworCXVubGlua19mcm9tX3Bvb2wocCwgcGVlcl90b19iYXNlKHApLCBzdGFjayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQAogCiAJaWYgKGJhc2UtPnRvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCiAJCS8qIFJlbW92ZSBvbmUgbGVzcy1yZWNlbnRseS11c2VkIGVudHJ5LiAqLwotCQljbGVhbnVwX29uY2UoMCk7CisJCWNsZWFudXBfb25jZSgwLCBzdGFjayk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTU0MCw2ICs1NDAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAlpbnQgdHRsLCB0b3RhbDsKKwlzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqc3RhY2tbUEVFUl9NQVhERVBUSF07CiAKIAl0b3RhbCA9IGNvbXB1dGVfdG90YWwoKTsKIAlpZiAodG90YWwgPj0gaW5ldF9wZWVyX3RocmVzaG9sZCkKQEAgLTU0OCw3ICs1NDksNyBAQAogCQl0dGwgPSBpbmV0X3BlZXJfbWF4dHRsCiAJCQkJLSAoaW5ldF9wZWVyX21heHR0bCAtIGluZXRfcGVlcl9taW50dGwpIC8gSFogKgogCQkJCQl0b3RhbCAvIGluZXRfcGVlcl90aHJlc2hvbGQgKiBIWjsKLQl3aGlsZSAoIWNsZWFudXBfb25jZSh0dGwpKSB7CisJd2hpbGUgKCFjbGVhbnVwX29uY2UodHRsLCBzdGFjaykpIHsKIAkJaWYgKGppZmZpZXMgIT0gbm93KQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKaW5kZXggYTExNTFiOC4uYjFkMjgyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC0yMjMsMzEgKzIyMywzMCBAQAogCiAJaWYgKChxcC0+cS5sYXN0X2luICYgSU5FVF9GUkFHX0ZJUlNUX0lOKSAmJiBxcC0+cS5mcmFnbWVudHMgIT0gTlVMTCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqaGVhZCA9IHFwLT5xLmZyYWdtZW50czsKKwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CisJCWludCBlcnI7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQloZWFkLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHFwLT5paWYpOwogCQlpZiAoIWhlYWQtPmRldikKIAkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiAKKwkJLyogc2tiIGRzdCBpcyBzdGFsZSwgZHJvcCBpdCwgYW5kIHBlcmZvcm0gcm91dGUgbG9va3VwIGFnYWluICovCisJCXNrYl9kc3RfZHJvcChoZWFkKTsKKwkJaXBoID0gaXBfaGRyKGhlYWQpOworCQllcnIgPSBpcF9yb3V0ZV9pbnB1dF9ub3JlZihoZWFkLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAorCQkJCQkgICBpcGgtPnRvcywgaGVhZC0+ZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CisKIAkJLyoKLQkJICogT25seSBzZWFyY2ggcm91dGVyIHRhYmxlIGZvciB0aGUgaGVhZCBmcmFnbWVudCwKLQkJICogd2hlbiBkZWZyYWdpbmcgdGltZW91dCBhdCBQUkVfUk9VVElORyBIT09LLgorCQkgKiBPbmx5IGFuIGVuZCBob3N0IG5lZWRzIHRvIHNlbmQgYW4gSUNNUAorCQkgKiAiRnJhZ21lbnQgUmVhc3NlbWJseSBUaW1lb3V0IiBtZXNzYWdlLCBwZXIgUkZDNzkyLgogCQkgKi8KLQkJaWYgKHFwLT51c2VyID09IElQX0RFRlJBR19DT05OVFJBQ0tfSU4gJiYgIXNrYl9kc3QoaGVhZCkpIHsKLQkJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKGhlYWQpOwotCQkJaW50IGVyciA9IGlwX3JvdXRlX2lucHV0KGhlYWQsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCi0JCQkJCQkgaXBoLT50b3MsIGhlYWQtPmRldik7Ci0JCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCQlnb3RvIG91dF9yY3VfdW5sb2NrOworCQlpZiAocXAtPnVzZXIgPT0gSVBfREVGUkFHX0NPTk5UUkFDS19JTiAmJgorCQkgICAgc2tiX3J0YWJsZShoZWFkKS0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCisJCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCi0JCQkvKgotCQkJICogT25seSBhbiBlbmQgaG9zdCBuZWVkcyB0byBzZW5kIGFuIElDTVAKLQkJCSAqICJGcmFnbWVudCBSZWFzc2VtYmx5IFRpbWVvdXQiIG1lc3NhZ2UsIHBlciBSRkM3OTIuCi0JCQkgKi8KLQkJCWlmIChza2JfcnRhYmxlKGhlYWQpLT5ydF90eXBlICE9IFJUTl9MT0NBTCkKLQkJCQlnb3RvIG91dF9yY3VfdW5sb2NrOwotCi0JCX0KIAogCQkvKiBTZW5kIGFuIElDTVAgIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZS4gKi8KIAkJaWNtcF9zZW5kKGhlYWQsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfRlJBR1RJTUUsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jIGIvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCmluZGV4IDI4YTczNmYuLjIzOTFiMjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX29wdGlvbnMuYworKysgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKQEAgLTMyOSw3ICszMjksNyBAQAogCQkJCQlwcF9wdHIgPSBvcHRwdHIgKyAyOwogCQkJCQlnb3RvIGVycm9yOwogCQkJCX0KLQkJCQlpZiAoc2tiKSB7CisJCQkJaWYgKHJ0KSB7CiAJCQkJCW1lbWNweSgmb3B0cHRyW29wdHB0clsyXS0xXSwgJnJ0LT5ydF9zcGVjX2RzdCwgNCk7CiAJCQkJCW9wdC0+aXNfY2hhbmdlZCA9IDE7CiAJCQkJfQpAQCAtMzcxLDcgKzM3MSw3IEBACiAJCQkJCQlnb3RvIGVycm9yOwogCQkJCQl9CiAJCQkJCW9wdC0+dHMgPSBvcHRwdHIgLSBpcGg7Ci0JCQkJCWlmIChza2IpIHsKKwkJCQkJaWYgKHJ0KSAgewogCQkJCQkJbWVtY3B5KCZvcHRwdHJbb3B0cHRyWzJdLTFdLCAmcnQtPnJ0X3NwZWNfZHN0LCA0KTsKIAkJCQkJCXRpbWVwdHIgPSAoX19iZTMyKikmb3B0cHRyW29wdHB0clsyXSszXTsKIAkJCQkJfQpAQCAtNjAzLDcgKzYwMyw3IEBACiAJdW5zaWduZWQgbG9uZyBvcmVmZHN0OwogCWludCBlcnI7CiAKLQlpZiAoIW9wdC0+c3JyKQorCWlmICghb3B0LT5zcnIgfHwgIXJ0KQogCQlyZXR1cm4gMDsKIAogCWlmIChza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9IT1NUKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCA2N2YyNDFiLi40NTljMDExIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJCS8qIElGOiBpdCBkb2Vzbid0IGZpdCwgdXNlICdtdHUnIC0gdGhlIGRhdGEgc3BhY2UgbGVmdCAqLwogCQlpZiAobGVuID4gbXR1KQogCQkJbGVuID0gbXR1OwotCQkvKiBJRjogd2UgYXJlIG5vdCBzZW5kaW5nIHVwdG8gYW5kIGluY2x1ZGluZyB0aGUgcGFja2V0IGVuZAorCQkvKiBJRjogd2UgYXJlIG5vdCBzZW5kaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIHBhY2tldCBlbmQKIAkJICAgdGhlbiBhbGlnbiB0aGUgbmV4dCBzdGFydCBvbiBhbiBlaWdodCBieXRlIGJvdW5kYXJ5ICovCiAJCWlmIChsZW4gPCBsZWZ0KQl7CiAJCQlsZW4gJj0gfjc7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbmZpZy5jIGIvbmV0L2lwdjQvaXBjb25maWcuYwppbmRleCAyYjA5Nzc1Li5jYmZmMmVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbmZpZy5jCisrKyBiL25ldC9pcHY0L2lwY29uZmlnLmMKQEAgLTE0NDQsNyArMTQ0NCw3IEBACiAJCXJvb3Rfc2VydmVyX2FkZHIgPSBhZGRyOwogCiAJLyoKLQkgKiBVc2UgZGVmYXVsdHMgd2hlcmVldmVyIGFwcGxpY2FibGUuCisJICogVXNlIGRlZmF1bHRzIHdoZXJldmVyIGFwcGxpY2FibGUuCiAJICovCiAJaWYgKGljX2RlZmF1bHRzKCkgPCAwKQogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci5jCmluZGV4IGYzYzBiNTQuLjQ2MTRiYWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci5jCkBAIC0yMjEsOSArMjIxLDEwIEBACiAJcmV0dXJuIGNzdW07CiB9CiAKLXN0YXRpYyBpbnQgbmZfaXBfcm91dGUoc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKK3N0YXRpYyBpbnQgbmZfaXBfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAorCQkgICAgICAgc3RydWN0IGZsb3dpICpmbCwgYm9vbCBzdHJpY3QgX19hbHdheXNfdW51c2VkKQogewotCXN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZmbC0+dS5pcDQpOworCXN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbC0+dS5pcDQpOwogCWlmIChJU19FUlIocnQpKQogCQlyZXR1cm4gUFRSX0VSUihydCk7CiAJKmRzdCA9ICZydC0+ZHN0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggNGI1ZDQ1Ny4uODliYzdlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC03Niw3ICs3Niw3IEBACiB9CiAKIC8qCi0gKiBVbmZvcnR1bmF0bHksIF9iIGFuZCBfbWFzayBhcmUgbm90IGFsaWduZWQgdG8gYW4gaW50IChvciBsb25nIGludCkKKyAqIFVuZm9ydHVuYXRlbHksIF9iIGFuZCBfbWFzayBhcmUgbm90IGFsaWduZWQgdG8gYW4gaW50IChvciBsb25nIGludCkKICAqIFNvbWUgYXJjaGVzIGRvbnQgY2FyZSwgdW5yb2xsaW5nIHRoZSBsb29wIGlzIGEgd2luIG9uIHRoZW0uCiAgKiBGb3Igb3RoZXIgYXJjaGVzLCB3ZSBvbmx5IGhhdmUgYSAxNmJpdCBhbGlnbmVtZW50LgogICovCkBAIC0xODc0LDcgKzE4NzQsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjE7CiAKLQkvKiBOb29uZSBlbHNlIHdpbGwgYmUgZG93bmluZyBzZW0gbm93LCBzbyB3ZSB3b24ndCBzbGVlcCAqLworCS8qIE5vIG9uZSBlbHNlIHdpbGwgYmUgZG93bmluZyBzZW0gbm93LCBzbyB3ZSB3b24ndCBzbGVlcCAqLwogCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldHMoYXJwdF9idWlsdGluX3RnLCBBUlJBWV9TSVpFKGFycHRfYnVpbHRpbl90ZykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggZmZjZWEwZC4uNzA0OTE1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMjIzMyw3ICsyMjMzLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnIxOwogCi0JLyogTm9vbmUgZWxzZSB3aWxsIGJlIGRvd25pbmcgc2VtIG5vdywgc28gd2Ugd29uJ3Qgc2xlZXAgKi8KKwkvKiBObyBvbmUgZWxzZSB3aWxsIGJlIGRvd25pbmcgc2VtIG5vdywgc28gd2Ugd29uJ3Qgc2xlZXAgKi8KIAlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGlwdF9idWlsdGluX3RnLCBBUlJBWV9TSVpFKGlwdF9idWlsdGluX3RnKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyMjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggMjFiY2Y0Ny4uOWM3MWIyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogfQogRVhQT1JUX1NZTUJPTChuZl9uYXRfcHJvdG9jb2xfcmVnaXN0ZXIpOwogCi0vKiBOb29uZSBzdG9yZXMgdGhlIHByb3RvY29sIGFueXdoZXJlOyBzaW1wbHkgZGVsZXRlIGl0LiAqLworLyogTm8gb25lIHN0b3JlcyB0aGUgcHJvdG9jb2wgYW55d2hlcmU7IHNpbXBseSBkZWxldGUgaXQuICovCiB2b2lkIG5mX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnByb3RvKQogewogCXNwaW5fbG9ja19iaCgmbmZfbmF0X2xvY2spOwpAQCAtNTMyLDcgKzUzMiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKTsKIAotLyogTm9vbmUgdXNpbmcgY29ubnRyYWNrIGJ5IHRoZSB0aW1lIHRoaXMgY2FsbGVkLiAqLworLyogTm8gb25lIHVzaW5nIGNvbm50cmFjayBieSB0aGUgdGltZSB0aGlzIGNhbGxlZC4gKi8KIHN0YXRpYyB2b2lkIG5mX25hdF9jbGVhbnVwX2Nvbm50cmFjayhzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7CiAJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQgPSBuZl9jdF9leHRfZmluZChjdCwgTkZfQ1RfRVhUX05BVCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDJkM2M3MmUuLmJjZWFlYzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC02MjIsNyArNjIyLDcgQEAKIHN0YXRpYyB2b2lkIHJhd19jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIHsKIAkvKgotCSAqIFJhdyBzb2NrZXRzIG1heSBoYXZlIGRpcmVjdCBrZXJuZWwgcmVmZXJlbmVjZXMuIEtpbGwgdGhlbS4KKwkgKiBSYXcgc29ja2V0cyBtYXkgaGF2ZSBkaXJlY3Qga2VybmVsIHJlZmVyZW5jZXMuIEtpbGwgdGhlbS4KIAkgKi8KIAlpcF9yYV9jb250cm9sKHNrLCAwLCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggNGIwYzgxMS4uOTllNmU0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC04MjEsNyArODIxLDcgQEAKIH0KIAogLyoKLSAqIFBlcnR1YmF0aW9uIG9mIHJ0X2dlbmlkIGJ5IGEgc21hbGwgcXVhbnRpdHkgWzEuLjI1Nl0KKyAqIFBlcnR1cmJhdGlvbiBvZiBydF9nZW5pZCBieSBhIHNtYWxsIHF1YW50aXR5IFsxLi4yNTZdCiAgKiBVc2luZyA4IGJpdHMgb2Ygc2h1ZmZsaW5nIGVuc3VyZSB3ZSBjYW4gY2FsbCBydF9jYWNoZV9pbnZhbGlkYXRlKCkKICAqIG1hbnkgdGltZXMgKDJeMjQpIHdpdGhvdXQgZ2l2aW5nIHJlY2VudCBydF9nZW5pZC4KICAqIEplbmtpbnMgaGFzaCBpcyBzdHJvbmcgZW5vdWdoIHRoYXQgbGl0bGUgY2hhbmdlcyBvZiBydF9nZW5pZCBhcmUgT0suCkBAIC0xMTkxLDcgKzExOTEsNyBAQAogI2VuZGlmCiAJLyoKIAkgKiBTaW5jZSBsb29rdXAgaXMgbG9ja2ZyZWUsIHdlIG11c3QgbWFrZSBzdXJlCi0JICogcHJldmlvdXMgd3JpdGVzIHRvIHJ0IGFyZSBjb21pdHRlZCB0byBtZW1vcnkKKwkgKiBwcmV2aW91cyB3cml0ZXMgdG8gcnQgYXJlIGNvbW1pdHRlZCB0byBtZW1vcnkKIAkgKiBiZWZvcmUgbWFraW5nIHJ0IHZpc2libGUgdG8gb3RoZXIgQ1BVUy4KIAkgKi8KIAlyY3VfYXNzaWduX3BvaW50ZXIocnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbiwgcnQpOwpAQCAtMTg5MSw2ICsxODkxLDcgQEAKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCXJ0aC0+ZHN0LnRjbGFzc2lkID0gaXRhZzsKICNlbmRpZgorCXJ0aC0+cnRfcm91dGVfaWlmID0gZGV2LT5pZmluZGV4OwogCXJ0aC0+cnRfaWlmCT0gZGV2LT5pZmluZGV4OwogCXJ0aC0+ZHN0LmRldgk9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKIAlkZXZfaG9sZChydGgtPmRzdC5kZXYpOwpAQCAtMjAyNiw2ICsyMDI3LDcgQEAKIAlydGgtPnJ0X2tleV9zcmMJPSBzYWRkcjsKIAlydGgtPnJ0X3NyYwk9IHNhZGRyOwogCXJ0aC0+cnRfZ2F0ZXdheQk9IGRhZGRyOworCXJ0aC0+cnRfcm91dGVfaWlmID0gaW5fZGV2LT5kZXYtPmlmaW5kZXg7CiAJcnRoLT5ydF9paWYgCT0gaW5fZGV2LT5kZXYtPmlmaW5kZXg7CiAJcnRoLT5kc3QuZGV2CT0gKG91dF9kZXYpLT5kZXY7CiAJZGV2X2hvbGQocnRoLT5kc3QuZGV2KTsKQEAgLTIyMDIsNiArMjIwNCw3IEBACiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQKIAlydGgtPmRzdC50Y2xhc3NpZCA9IGl0YWc7CiAjZW5kaWYKKwlydGgtPnJ0X3JvdXRlX2lpZiA9IGRldi0+aWZpbmRleDsKIAlydGgtPnJ0X2lpZgk9IGRldi0+aWZpbmRleDsKIAlydGgtPmRzdC5kZXYJPSBuZXQtPmxvb3BiYWNrX2RldjsKIAlkZXZfaG9sZChydGgtPmRzdC5kZXYpOwpAQCAtMjQwMSw3ICsyNDA0LDggQEAKIAlydGgtPnJ0X21hcmsgICAgPSBvbGRmbHA0LT5mbG93aTRfbWFyazsKIAlydGgtPnJ0X2RzdAk9IGZsNC0+ZGFkZHI7CiAJcnRoLT5ydF9zcmMJPSBmbDQtPnNhZGRyOwotCXJ0aC0+cnRfaWlmCT0gMDsKKwlydGgtPnJ0X3JvdXRlX2lpZiA9IDA7CisJcnRoLT5ydF9paWYJPSBvbGRmbHA0LT5mbG93aTRfb2lmID8gOiBkZXZfb3V0LT5pZmluZGV4OwogCS8qIGdldCByZWZlcmVuY2VzIHRvIHRoZSBkZXZpY2VzIHRoYXQgYXJlIHRvIGJlIGhvbGQgYnkgdGhlIHJvdXRpbmcKIAkgICBjYWNoZSBlbnRyeSAqLwogCXJ0aC0+ZHN0LmRldgk9IGRldl9vdXQ7CkBAIC0yNjg2LDYgKzI2OTAsMTIgQEAKIHsKIH0KIAorc3RhdGljIHUzMiAqaXB2NF9ydF9ibGFja2hvbGVfY293X21ldHJpY3Moc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2xkKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVULAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUCksCkBAIC0yNjk0LDYgKzI3MDQsNyBAQAogCS5kZWZhdWx0X210dQkJPQlpcHY0X2JsYWNraG9sZV9kZWZhdWx0X210dSwKIAkuZGVmYXVsdF9hZHZtc3MJCT0JaXB2NF9kZWZhdWx0X2Fkdm1zcywKIAkudXBkYXRlX3BtdHUJCT0JaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCisJLmNvd19tZXRyaWNzCQk9CWlwdjRfcnRfYmxhY2tob2xlX2Nvd19tZXRyaWNzLAogfTsKIAogc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZykKQEAgLTI3MTYsNiArMjcyNyw3IEBACiAJCXJ0LT5ydF9rZXlfZHN0ID0gb3J0LT5ydF9rZXlfZHN0OwogCQlydC0+cnRfa2V5X3NyYyA9IG9ydC0+cnRfa2V5X3NyYzsKIAkJcnQtPnJ0X3RvcyA9IG9ydC0+cnRfdG9zOworCQlydC0+cnRfcm91dGVfaWlmID0gb3J0LT5ydF9yb3V0ZV9paWY7CiAJCXJ0LT5ydF9paWYgPSBvcnQtPnJ0X2lpZjsKIAkJcnQtPnJ0X29pZiA9IG9ydC0+cnRfb2lmOwogCQlydC0+cnRfbWFyayA9IG9ydC0+cnRfbWFyazsKQEAgLTI3MjUsNyArMjczNyw2IEBACiAJCXJ0LT5ydF90eXBlID0gb3J0LT5ydF90eXBlOwogCQlydC0+cnRfZHN0ID0gb3J0LT5ydF9kc3Q7CiAJCXJ0LT5ydF9zcmMgPSBvcnQtPnJ0X3NyYzsKLQkJcnQtPnJ0X2lpZiA9IG9ydC0+cnRfaWlmOwogCQlydC0+cnRfZ2F0ZXdheSA9IG9ydC0+cnRfZ2F0ZXdheTsKIAkJcnQtPnJ0X3NwZWNfZHN0ID0gb3J0LT5ydF9zcGVjX2RzdDsKIAkJcnQtPnBlZXIgPSBvcnQtPnBlZXI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IDFhNDU2NjUuLjMyMWU2ZTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC0zMTEsNyArMzExLDYgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9fbGFyZ2VfYml0bWFwLAogCX0sCi0jaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCXsKIAkJLnByb2NuYW1lCT0gImlnbXBfbWF4X21lbWJlcnNoaXBzIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9pZ21wX21heF9tZW1iZXJzaGlwcywKQEAgLTMxOSw4ICszMTgsNiBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYwogCX0sCi0KLSNlbmRpZgogCXsKIAkJLnByb2NuYW1lCT0gImlnbXBfbWF4X21zZiIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfaWdtcF9tYXhfbXNmLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2N1YmljLmMgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwppbmRleCAzNDM0MGM5Li5mMzc2YjA1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY3ViaWMuYworKysgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwpAQCAtOTMsNiArOTMsNyBAQAogCXUzMglhY2tfY250OwkvKiBudW1iZXIgb2YgYWNrcyAqLwogCXUzMgl0Y3BfY3duZDsJLyogZXN0aW1hdGVkIHRjcCBjd25kICovCiAjZGVmaW5lIEFDS19SQVRJT19TSElGVAk0CisjZGVmaW5lIEFDS19SQVRJT19MSU1JVCAoMzJ1IDw8IEFDS19SQVRJT19TSElGVCkKIAl1MTYJZGVsYXllZF9hY2s7CS8qIGVzdGltYXRlIHRoZSByYXRpbyBvZiBQYWNrZXRzL0FDS3MgPDwgNCAqLwogCXU4CXNhbXBsZV9jbnQ7CS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGRlY2lkZSBjdXJyX3J0dCAqLwogCXU4CWZvdW5kOwkJLyogdGhlIGV4aXQgcG9pbnQgaXMgZm91bmQ/ICovCkBAIC0zOTgsOCArMzk5LDEyIEBACiAJdTMyIGRlbGF5OwogCiAJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pIHsKLQkJY250IC09IGNhLT5kZWxheWVkX2FjayA+PiBBQ0tfUkFUSU9fU0hJRlQ7Ci0JCWNhLT5kZWxheWVkX2FjayArPSBjbnQ7CisJCXUzMiByYXRpbyA9IGNhLT5kZWxheWVkX2FjazsKKworCQlyYXRpbyAtPSBjYS0+ZGVsYXllZF9hY2sgPj4gQUNLX1JBVElPX1NISUZUOworCQlyYXRpbyArPSBjbnQ7CisKKwkJY2EtPmRlbGF5ZWRfYWNrID0gbWluKHJhdGlvLCBBQ0tfUkFUSU9fTElNSVQpOwogCX0KIAogCS8qIFNvbWUgY2FsbHMgYXJlIGZvciBkdXBsaWNhdGVzIHdpdGhvdXQgdGltZXRhbXBzICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbHAuYyBiL25ldC9pcHY0L3RjcF9scC5jCmluZGV4IDY1NmQ0MzEuLjcyZjcyMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9scC5jCisrKyBiL25ldC9pcHY0L3RjcF9scC5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKiAgICAgd2l0aGluIGNvbmdfYXZvaWQuCiAgKiAgIG8gRXJyb3IgY29ycmVjdGluZyBpbiByZW1vdGUgSFosIHRoZXJlZm9yZSByZW1vdGUgSFogd2lsbCBiZSBrZWVwZWQKICAqICAgICBvbiBjaGVja2luZyBhbmQgdXBkYXRpbmcuCi0gKiAgIG8gSGFuZGxpbmcgY2FsY3VsYXRpb24gb2YgT25lLVdheS1EZWxheSAoT1dEKSB3aXRoaW4gcnR0X3NhbXBsZSwgc2ljbmUKKyAqICAgbyBIYW5kbGluZyBjYWxjdWxhdGlvbiBvZiBPbmUtV2F5LURlbGF5IChPV0QpIHdpdGhpbiBydHRfc2FtcGxlLCBzaW5jZQogICogICAgIE9XRCBoYXZlIGEgc2ltaWxhciBtZWFuaW5nIGFzIFJUVC4gQWxzbyBjb3JyZWN0IHRoZSBidWdneSBmb3JtdWxhci4KICAqICAgbyBIYW5kbGUgcmVhY3Rpb24gZm9yIEVhcmx5IENvbmdlc3Rpb24gSW5kaWNhdGlvbiAoRUNJKSB3aXRoaW4KICAqICAgICBwa3RzX2Fja2VkLCBhcyBtZW50aW9uZWQgd2l0aGluIHBzZXVkbyBjb2RlLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGRmYTViZWIuLjE3Mzg4YzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTczLDcgKzczLDcgQEAKIAl0Y3BfYWR2YW5jZV9zZW5kX2hlYWQoc2ssIHNrYik7CiAJdHAtPnNuZF9ueHQgPSBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXE7CiAKLQkvKiBEb24ndCBvdmVycmlkZSBOYWdsZSBpbmRlZmluYXRlbHkgd2l0aCBGLVJUTyAqLworCS8qIERvbid0IG92ZXJyaWRlIE5hZ2xlIGluZGVmaW5pdGVseSB3aXRoIEYtUlRPICovCiAJaWYgKHRwLT5mcnRvX2NvdW50ZXIgPT0gMikKIAkJdHAtPmZydG9fY291bnRlciA9IDM7CiAKQEAgLTEwMDMsNyArMTAwMyw4IEBACiAJaW50IG5sZW47CiAJdTggZmxhZ3M7CiAKLQlCVUdfT04obGVuID4gc2tiLT5sZW4pOworCWlmIChXQVJOX09OKGxlbiA+IHNrYi0+bGVuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAluc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYikgLSBsZW47CiAJaWYgKG5zaXplIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF95ZWFoLmMgYi9uZXQvaXB2NC90Y3BfeWVhaC5jCmluZGV4IGRjN2Y0MzEuLjA1YzNiNmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF95ZWFoLmMKKysrIGIvbmV0L2lwdjQvdGNwX3llYWguYwpAQCAtMjAsNyArMjAsNyBAQAogI2RlZmluZSBUQ1BfWUVBSF9ERUxUQSAgICAgICAgMyAvL2xvZyBtaW5pbXVtIGZyYWN0aW9uIG9mIGN3bmQgdG8gYmUgcmVtb3ZlZCBvbiBsb3NzCiAjZGVmaW5lIFRDUF9ZRUFIX0VQU0lMT04gICAgICAxIC8vbG9nIG1heGltdW0gZnJhY3Rpb24gdG8gYmUgcmVtb3ZlZCBvbiBlYXJseSBkZWNvbmdlc3Rpb24KICNkZWZpbmUgVENQX1lFQUhfUEhZICAgICAgICAgIDggLy9saW4gbWF4aW11bSBkZWx0YSBmcm9tIGJhc2UKLSNkZWZpbmUgVENQX1lFQUhfUkhPICAgICAgICAgMTYgLy9saW4gbWludW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgcnR0IHRvIGNvbnNpZGVyIGNvbXBldGl0aW9uIG9uIGxvc3MKKyNkZWZpbmUgVENQX1lFQUhfUkhPICAgICAgICAgMTYgLy9saW4gbWluaW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgcnR0IHRvIGNvbnNpZGVyIGNvbXBldGl0aW9uIG9uIGxvc3MKICNkZWZpbmUgVENQX1lFQUhfWkVUQSAgICAgICAgNTAgLy9saW4gbWluaW11bSBudW1iZXIgb2Ygc3RhdGUgc3dpdGNocyB0byByZXNldCByZW5vX2NvdW50CiAKICNkZWZpbmUgVENQX1NDQUxBQkxFX0FJX0NOVAkgMTAwVQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCA1ODhmNDdhLi5mODdhOGViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAgKiAgQHNrOiAgICAgICAgICBzb2NrZXQgc3RydWN0IGluIHF1ZXN0aW9uCiAgKiAgQHNudW06ICAgICAgICBwb3J0IG51bWJlciB0byBsb29rIHVwCiAgKiAgQHNhZGRyX2NvbXA6ICBBRi1kZXBlbmRlbnQgY29tcGFyaXNvbiBvZiBib3VuZCBsb2NhbCBJUCBhZGRyZXNzZXMKLSAqICBAaGFzaDJfbnVsbGFkZHI6IEFGLWRlcGVuZGFudCBoYXNoIHZhbHVlIGluIHNlY29uZGFyeSBoYXNoIGNoYWlucywKKyAqICBAaGFzaDJfbnVsbGFkZHI6IEFGLWRlcGVuZGVudCBoYXNoIHZhbHVlIGluIHNlY29uZGFyeSBoYXNoIGNoYWlucywKICAqICAgICAgICAgICAgICAgICAgIHdpdGggTlVMTCBhZGRyZXNzCiAgKi8KIGludCB1ZHBfbGliX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X291dHB1dC5jIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKaW5kZXggNTcxYWE5Ni4uMmQ1MTg0MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybTRfcHJlcGFyZV9vdXRwdXQpOwogCi1zdGF0aWMgaW50IHhmcm00X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCB4ZnJtNF9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCWlmICghc2tiX2RzdChza2IpLT54ZnJtKSB7CkBAIC04Niw3ICs4NiwxMSBAQAogCiBpbnQgeGZybTRfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpOworCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LT54ZnJtOworCiAJcmV0dXJuIE5GX0hPT0tfQ09ORChORlBST1RPX0lQVjQsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBza2IsCi0JCQkgICAgTlVMTCwgc2tiX2RzdChza2IpLT5kZXYsIHhmcm00X291dHB1dF9maW5pc2gsCisJCQkgICAgTlVMTCwgZHN0LT5kZXYsCisJCQkgICAgeC0+b3V0ZXJfbW9kZS0+YWZpbmZvLT5vdXRwdXRfZmluaXNoLAogCQkJICAgICEoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX1JFUk9VVEVEKSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDEzZTBlN2YuLmQyMGEwNWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC03NCw2ICs3NCw3IEBACiAJcnQtPnJ0X2tleV9kc3QgPSBmbDQtPmRhZGRyOwogCXJ0LT5ydF9rZXlfc3JjID0gZmw0LT5zYWRkcjsKIAlydC0+cnRfdG9zID0gZmw0LT5mbG93aTRfdG9zOworCXJ0LT5ydF9yb3V0ZV9paWYgPSBmbDQtPmZsb3dpNF9paWY7CiAJcnQtPnJ0X2lpZiA9IGZsNC0+Zmxvd2k0X2lpZjsKIAlydC0+cnRfb2lmID0gZmw0LT5mbG93aTRfb2lmOwogCXJ0LT5ydF9tYXJrID0gZmw0LT5mbG93aTRfbWFyazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCmluZGV4IDE3MTdjNjQuLjgwNWQ2M2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKKysrIGIvbmV0L2lwdjQveGZybTRfc3RhdGUuYwpAQCAtNzgsNiArNzgsNyBAQAogCS5pbml0X3RlbXBzZWwJCT0gX194ZnJtNF9pbml0X3RlbXBzZWwsCiAJLmluaXRfdGVtcHJvcAkJPSB4ZnJtNF9pbml0X3RlbXByb3AsCiAJLm91dHB1dAkJCT0geGZybTRfb3V0cHV0LAorCS5vdXRwdXRfZmluaXNoCQk9IHhmcm00X291dHB1dF9maW5pc2gsCiAJLmV4dHJhY3RfaW5wdXQJCT0geGZybTRfZXh0cmFjdF9pbnB1dCwKIAkuZXh0cmFjdF9vdXRwdXQJCT0geGZybTRfZXh0cmFjdF9vdXRwdXQsCiAJLnRyYW5zcG9ydF9maW5pc2gJPSB4ZnJtNF90cmFuc3BvcnRfZmluaXNoLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggM2RhYWYzYy4uYTdiZGEwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0xMDg0LDcgKzEwODQsNyBAQAogCWNhc2UgSVBWNl9TQUREUl9SVUxFX1BSSVZBQ1k6CiAJICAgIHsKIAkJLyogUnVsZSA3OiBQcmVmZXIgcHVibGljIGFkZHJlc3MKLQkJICogTm90ZTogcHJlZmVyIHRlbXByYXJ5IGFkZHJlc3MgaWYgdXNlX3RlbXBhZGRyID49IDIKKwkJICogTm90ZTogcHJlZmVyIHRlbXBvcmFyeSBhZGRyZXNzIGlmIHVzZV90ZW1wYWRkciA+PSAyCiAJCSAqLwogCQlpbnQgcHJlZnRtcCA9IGRzdC0+cHJlZnMgJiAoSVBWNl9QUkVGRVJfU1JDX1BVQkxJQ3xJUFY2X1BSRUZFUl9TUkNfVE1QKSA/CiAJCQkJISEoZHN0LT5wcmVmcyAmIElQVjZfUFJFRkVSX1NSQ19UTVApIDoKQEAgLTE5NjgsNyArMTk2OCw3IEBACiAJCQkJCSAqICB0byB0aGUgc3RvcmVkIGxpZmV0aW1lIHNpbmNlIHdlJ2xsCiAJCQkJCSAqICBiZSB1cGRhdGluZyB0aGUgdGltZXN0YW1wIGJlbG93LAogCQkJCQkgKiAgZWxzZSB3ZSdsbCBzZXQgaXQgYmFjayB0byB0aGUKLQkJCQkJICogIG1pbnVtdW0uCisJCQkJCSAqICBtaW5pbXVtLgogCQkJCQkgKi8KIAkJCQkJaWYgKHByZWZlcmVkX2xmdCAhPSBpZnAtPnByZWZlcmVkX2xmdCkgewogCQkJCQkJdmFsaWRfbGZ0ID0gc3RvcmVkX2xmdDsKQEAgLTQ1MzcsNyArNDUzNyw3IEBACiAKIAl0ID0gcC0+c3lzY3RsOwogCXAtPnN5c2N0bCA9IE5VTEw7Ci0JdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUodC0+c3lzY3RsX2hlYWRlcik7CisJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHQtPnN5c2N0bF9oZWFkZXIpOwogCWtmcmVlKHQtPmRldl9uYW1lKTsKIAlrZnJlZSh0KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IDRiMTNkNWQuLmFmY2M3MDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtMTExMyw3ICsxMTEzLDcgQEAKIAkvKgogCSAqCWlwbmd3ZyBBUEkgZHJhZnQgbWFrZXMgY2xlYXIgdGhhdCB0aGUgY29ycmVjdCBzZW1hbnRpY3MKIAkgKglmb3IgVENQIGFuZCBVRFAgaXMgdG8gY29uc2lkZXIgb25lIFRDUCBhbmQgVURQIGluc3RhbmNlCi0JICoJaW4gYSBob3N0IGF2YWlsaWFibGUgYnkgYm90aCBJTkVUIGFuZCBJTkVUNiBBUElzIGFuZAorCSAqCWluIGEgaG9zdCBhdmFpbGFibGUgYnkgYm90aCBJTkVUIGFuZCBJTkVUNiBBUElzIGFuZAogCSAqCWFibGUgdG8gY29tbXVuaWNhdGUgdmlhIGJvdGggbmV0d29yayBwcm90b2NvbHMuCiAJICovCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA1YWE4ZWM4Li41OWRjY2ZiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0zNzEsNyArMzcxLDcgQEAKIAlpdiA9IGVzcF90bXBfaXYoYWVhZCwgdG1wLCBzZXFoaWxlbik7CiAJcmVxID0gZXNwX3RtcF9yZXEoYWVhZCwgaXYpOwogCWFzZyA9IGVzcF9yZXFfc2coYWVhZCwgcmVxKTsKLQlzZyA9IGFzZyArIDE7CisJc2cgPSBhc2cgKyBzZ2xpc3RzOwogCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDE2NjA1NDYuLmYyYzViMGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCkBAIC00NCw3ICs0NCw3IEBACiAJCSAgICAgIXNrMi0+c2tfYm91bmRfZGV2X2lmIHx8CiAJCSAgICAgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBzazItPnNrX2JvdW5kX2Rldl9pZikgJiYKIAkJICAgICghc2stPnNrX3JldXNlIHx8ICFzazItPnNrX3JldXNlIHx8Ci0JCSAgICAgKCgxIDw8IHNrMi0+c2tfc3RhdGUpICYgKFRDUEZfTElTVEVOIHwgVENQRl9DTE9TRSkpKSAmJgorCQkgICAgIHNrMi0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgJiYKIAkJICAgICBpcHY2X3Jjdl9zYWRkcl9lcXVhbChzaywgc2syKSkKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCAxODIwODg3Li40NmNmN2JlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC03NzksNyArNzc5LDcgQEAKIAkJLyogSUY6IGl0IGRvZXNuJ3QgZml0LCB1c2UgJ210dScgLSB0aGUgZGF0YSBzcGFjZSBsZWZ0ICovCiAJCWlmIChsZW4gPiBtdHUpCiAJCQlsZW4gPSBtdHU7Ci0JCS8qIElGOiB3ZSBhcmUgbm90IHNlbmRpbmcgdXB0byBhbmQgaW5jbHVkaW5nIHRoZSBwYWNrZXQgZW5kCisJCS8qIElGOiB3ZSBhcmUgbm90IHNlbmRpbmcgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgcGFja2V0IGVuZAogCQkgICB0aGVuIGFsaWduIHRoZSBuZXh0IHN0YXJ0IG9uIGFuIGVpZ2h0IGJ5dGUgYm91bmRhcnkgKi8KIAkJaWYgKGxlbiA8IGxlZnQpCXsKIAkJCWxlbiAmPSB+NzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKaW5kZXggMzlhYWNhMi4uMjhiYzFmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKQEAgLTkwLDkgKzkwLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmZfaXA2X3JvdXRlKHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpCitzdGF0aWMgaW50IG5mX2lwNl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKipkc3QsCisJCQlzdHJ1Y3QgZmxvd2kgKmZsLCBib29sIHN0cmljdCkKIHsKLQkqZHN0ID0gaXA2X3JvdXRlX291dHB1dCgmaW5pdF9uZXQsIE5VTEwsICZmbC0+dS5pcDYpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyBmYWtlX3BpbmZvOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrIGZha2Vfc2sgPSB7CisJCS8qIG1ha2VzIGlwNl9yb3V0ZV9vdXRwdXQgc2V0IFJUNl9MT09LVVBfRl9JRkFDRTogKi8KKwkJLnNrLnNrX2JvdW5kX2Rldl9pZiA9IDEsCisJCS5waW5ldDYgPSAoc3RydWN0IGlwdjZfcGluZm8gKikgJmZha2VfcGluZm8sCisJfTsKKwljb25zdCB2b2lkICpzayA9IHN0cmljdCA/ICZmYWtlX3NrIDogTlVMTDsKKworCSpkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssICZmbC0+dS5pcDYpOwogCXJldHVybiAoKmRzdCktPmVycm9yOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCAwYjJhZjliLi41YTFjNmYyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTIyNDgsNyArMjI0OCw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyMTsKIAotCS8qIE5vb25lIGVsc2Ugd2lsbCBiZSBkb3duaW5nIHNlbSBub3csIHNvIHdlIHdvbid0IHNsZWVwICovCisJLyogTm8gb25lIGVsc2Ugd2lsbCBiZSBkb3duaW5nIHNlbSBub3csIHNvIHdlIHdvbid0IHNsZWVwICovCiAJcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpcDZ0X2J1aWx0aW5fdGcsIEFSUkFZX1NJWkUoaXA2dF9idWlsdGluX3RnKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyMjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKaW5kZXggMjhlNzQ0OC4uYTVhNGM1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKQEAgLTQ1LDYgKzQ1LDggQEAKIAlpbnQgdGNwaG9mZiwgbmVlZHNfYWNrOwogCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpvaXA2aCA9IGlwdjZfaGRyKG9sZHNrYik7CiAJc3RydWN0IGlwdjZoZHIgKmlwNmg7CisjZGVmaW5lIERFRkFVTFRfVE9TX1ZBTFVFCTB4MFUKKwljb25zdCBfX3U4IHRjbGFzcyA9IERFRkFVTFRfVE9TX1ZBTFVFOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CiAJdTggcHJvdG87CiAJc3RydWN0IGZsb3dpNiBmbDY7CkBAIC0xMjQsNyArMTI2LDcgQEAKIAlza2JfcHV0KG5za2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihuc2tiKTsKIAlpcDZoID0gaXB2Nl9oZHIobnNrYik7Ci0JaXA2aC0+dmVyc2lvbiA9IDY7CisJKihfX2JlMzIgKilpcDZoID0gIGh0b25sKDB4NjAwMDAwMDAgfCAodGNsYXNzIDw8IDIwKSk7CiAJaXA2aC0+aG9wX2xpbWl0ID0gaXA2X2RzdF9ob3BsaW1pdChkc3QpOwogCWlwNmgtPm5leHRoZHIgPSBJUFBST1RPX1RDUDsKIAlpcHY2X2FkZHJfY29weSgmaXA2aC0+c2FkZHIsICZvaXA2aC0+ZGFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY2X2hvb2tzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjZfaG9va3MuYwppbmRleCA5N2M1YjIxLi5jZGQ2ZDA0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjZfaG9va3MuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjZfaG9va3MuYwpAQCAtNzEsNyArNzEsNyBAQAogCWlmIChyZWFzbSA9PSBOVUxMKQogCQlyZXR1cm4gTkZfU1RPTEVOOwogCi0JLyogZXJyb3Igb2NjdXJlZCBvciBub3QgZnJhZ21lbnRlZCAqLworCS8qIGVycm9yIG9jY3VycmVkIG9yIG5vdCBmcmFnbWVudGVkICovCiAJaWYgKHJlYXNtID09IHNrYikKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggODQzNDA2Zi4uZmQwZWVjNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC0xNTMsNiArMTUzLDEyIEBACiB7CiB9CiAKK3N0YXRpYyB1MzIgKmlwNl9ydF9ibGFja2hvbGVfY293X21ldHJpY3Moc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBvbGQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVDYsCiAJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQVjYpLApAQCAtMTYxLDYgKzE2Nyw3IEBACiAJLmRlZmF1bHRfbXR1CQk9CWlwNl9ibGFja2hvbGVfZGVmYXVsdF9tdHUsCiAJLmRlZmF1bHRfYWR2bXNzCQk9CWlwNl9kZWZhdWx0X2Fkdm1zcywKIAkudXBkYXRlX3BtdHUJCT0JaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKKwkuY293X21ldHJpY3MJCT0JaXA2X3J0X2JsYWNraG9sZV9jb3dfbWV0cmljcywKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgaXA2X3RlbXBsYXRlX21ldHJpY3NbUlRBWF9NQVhdID0gewpAQCAtMjAxMiw3ICsyMDE5LDYgQEAKIAlydC0+ZHN0Lm91dHB1dCA9IGlwNl9vdXRwdXQ7CiAJcnQtPnJ0NmlfZGV2ID0gbmV0LT5sb29wYmFja19kZXY7CiAJcnQtPnJ0NmlfaWRldiA9IGlkZXY7Ci0JZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfSE9QTElNSVQsIC0xKTsKIAlydC0+ZHN0Lm9ic29sZXRlID0gLTE7CiAKIAlydC0+cnQ2aV9mbGFncyA9IFJURl9VUCB8IFJURl9OT05FWFRIT1A7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCAyYjBjMTg2Li40ZjQ5ZTVkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTUwMyw2ICs1MDMsNyBAQAogCWRzdCA9IGlwNl9kc3RfbG9va3VwX2Zsb3coc2ssICZmbDYsIGZpbmFsX3AsIGZhbHNlKTsKIAlpZiAoSVNfRVJSKGRzdCkpIHsKIAkJZXJyID0gUFRSX0VSUihkc3QpOworCQlkc3QgPSBOVUxMOwogCQlnb3RvIGRvbmU7CiAJfQogCXNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIHJ2cCk7CkBAIC0xNjIxLDYgKzE2MjIsNyBAQAogCQlvcHRfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAKIAlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkgeyAvKiBGYXN0IHBhdGggKi8KKwkJc29ja19ycHNfc2F2ZV9yeGhhc2goc2ssIHNrYi0+cnhoYXNoKTsKIAkJaWYgKHRjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgdGNwX2hkcihza2IpLCBza2ItPmxlbikpCiAJCQlnb3RvIHJlc2V0OwogCQlpZiAob3B0X3NrYikKQEAgLTE2NDgsNyArMTY1MCw4IEBACiAJCQkJX19rZnJlZV9za2Iob3B0X3NrYik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCX0KKwl9IGVsc2UKKwkJc29ja19ycHNfc2F2ZV9yeGhhc2goc2ssIHNrYi0+cnhoYXNoKTsKIAogCWlmICh0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYiwgdGNwX2hkcihza2IpLCBza2ItPmxlbikpCiAJCWdvdG8gcmVzZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IGQ3MDM3YzAuLjllMzA1ZDc0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtNTA1LDYgKzUwNSw5IEBACiAJaW50IHJjOwogCWludCBpc191ZHBsaXRlID0gSVNfVURQTElURShzayk7CiAKKwlpZiAoIWlwdjZfYWRkcl9hbnkoJmluZXQ2X3NrKHNrKS0+ZGFkZHIpKQorCQlzb2NrX3Jwc19zYXZlX3J4aGFzaChzaywgc2tiLT5yeGhhc2gpOworCiAJaWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKQogCQlnb3RvIGRyb3A7CiAKQEAgLTEzMzIsNyArMTMzNSw3IEBACiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJLyogQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIGhlYWRyb29tIHRvIGluc2VydCBmcmFnbWVudCBoZWFkZXIuICovCi0JaWYgKChza2JfaGVhZHJvb20oc2tiKSA8IGZyYWdfaGRyX3N6KSAmJgorCWlmICgoc2tiX21hY19oZWFkZXIoc2tiKSA8IHNrYi0+aGVhZCArIGZyYWdfaGRyX3N6KSAmJgogCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZnJhZ19oZHJfc3osIDAsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYwppbmRleCA4ZTY4OGIzLi40OWE5MWM1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybTZfcHJlcGFyZV9vdXRwdXQpOwogCi1zdGF0aWMgaW50IHhmcm02X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCB4ZnJtNl9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCUlQNkNCKHNrYiktPmZsYWdzIHw9IElQNlNLQl9YRlJNX1RSQU5TRk9STUVEOwpAQCAtOTcsOSArOTcsOSBAQAogCWlmICgoeCAmJiB4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpICYmCiAJICAgICgoc2tiLT5sZW4gPiBpcDZfc2tiX2RzdF9tdHUoc2tiKSAmJiAhc2tiX2lzX2dzbyhza2IpKSB8fAogCQlkc3RfYWxsZnJhZyhza2JfZHN0KHNrYikpKSkgewotCQkJcmV0dXJuIGlwNl9mcmFnbWVudChza2IsIHhmcm02X291dHB1dF9maW5pc2gpOworCQkJcmV0dXJuIGlwNl9mcmFnbWVudChza2IsIHgtPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0X2ZpbmlzaCk7CiAJfQotCXJldHVybiB4ZnJtNl9vdXRwdXRfZmluaXNoKHNrYik7CisJcmV0dXJuIHgtPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0X2ZpbmlzaChza2IpOwogfQogCiBpbnQgeGZybTZfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCBhZmU5NDFlLi4yNDhmMGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCS50bXBsX3NvcnQJCT0gX194ZnJtNl90bXBsX3NvcnQsCiAJLnN0YXRlX3NvcnQJCT0gX194ZnJtNl9zdGF0ZV9zb3J0LAogCS5vdXRwdXQJCQk9IHhmcm02X291dHB1dCwKKwkub3V0cHV0X2ZpbmlzaAkJPSB4ZnJtNl9vdXRwdXRfZmluaXNoLAogCS5leHRyYWN0X2lucHV0CQk9IHhmcm02X2V4dHJhY3RfaW5wdXQsCiAJLmV4dHJhY3Rfb3V0cHV0CQk9IHhmcm02X2V4dHJhY3Rfb3V0cHV0LAogCS50cmFuc3BvcnRfZmluaXNoCT0geGZybTZfdHJhbnNwb3J0X2ZpbmlzaCwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2FmX2lyZGEuYyBiL25ldC9pcmRhL2FmX2lyZGEuYwppbmRleCBjOTg5MGUyLi5jYzYxNjk3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9hZl9pcmRhLmMKKysrIGIvbmV0L2lyZGEvYWZfaXJkYS5jCkBAIC0xMjk3LDggKzEyOTcsNyBAQAogCS8qIE5vdGUgOiBzb2NrZXQuYyBzZXQgTVNHX0VPUiBvbiBTRVFQQUNLRVQgc29ja2V0cyAqLwogCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUIHwgTVNHX0VPUiB8IE1TR19DTVNHX0NPTVBBVCB8CiAJCQkgICAgICAgTVNHX05PU0lHTkFMKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbG9ja19zb2NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwLmMgYi9uZXQvaXJkYS9pcmxhcC5jCmluZGV4IDc4M2M1ZjMuLjAwNWI0MjQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwLmMKKysrIGIvbmV0L2lyZGEvaXJsYXAuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKIAlpcmxhcF9hcHBseV9kZWZhdWx0X2Nvbm5lY3Rpb25fcGFyYW1ldGVycyhzZWxmKTsKIAotCXNlbGYtPk4zID0gMzsgLyogIyBjb25uZWN0aW9ucyBhdHRlbXRzIHRvIHRyeSBiZWZvcmUgZ2l2aW5nIHVwICovCisJc2VsZi0+TjMgPSAzOyAvKiAjIGNvbm5lY3Rpb25zIGF0dGVtcHRzIHRvIHRyeSBiZWZvcmUgZ2l2aW5nIHVwICovCiAKIAlzZWxmLT5zdGF0ZSA9IExBUF9ORE07CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCmluZGV4IGQ0MzRjODguLmJiNDcwMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwpAQCAtNzA4LDcgKzcwOCw3IEBACiAKIAkJCQlzZWxmLT5mcmFtZV9zZW50ID0gVFJVRTsKIAkJCX0KLQkJCS8qIFJlYWRqdXN0IG91ciB0aW1lciB0byBhY2NvbW9kYXRlIGRldmljZXMKKwkJCS8qIFJlYWRqdXN0IG91ciB0aW1lciB0byBhY2NvbW1vZGF0ZSBkZXZpY2VzCiAJCQkgKiBkb2luZyBmYXN0ZXIgb3Igc2xvd2VyIGRpc2NvdmVyeSB0aGFuIHVzLi4uCiAJCQkgKiBKZWFuIElJICovCiAJCQlpcmxhcF9zdGFydF9xdWVyeV90aW1lcihzZWxmLCBpbmZvLT5TLCBpbmZvLT5zKTsKQEAgLTkzMSw3ICs5MzEsNyBAQAogCQlpcmxhcF9zZW5kX3JyX2ZyYW1lKHNlbGYsIENNRF9GUkFNRSk7CiAKIAkJLyogVGhlIHRpbWVyIGlzIHNldCB0byBoYWxmIHRoZSBub3JtYWwgdGltZXIgdG8gcXVpY2tseQotCQkgKiBkZXRlY3QgYSBmYWlsdXJlIHRvIG5lZ29jaWF0ZSB0aGUgbmV3IGNvbm5lY3Rpb24KKwkJICogZGV0ZWN0IGEgZmFpbHVyZSB0byBuZWdvdGlhdGUgdGhlIG5ldyBjb25uZWN0aW9uCiAJCSAqIHBhcmFtZXRlcnMuIElyTEFQIDYuMTEuMy4yLCBub3RlIDMuCiAJCSAqIE5vdGUgdGhhdCBjdXJyZW50bHkgd2UgZG9uJ3QgcHJvY2VzcyB0aGlzIGZhaWx1cmUKIAkJICogcHJvcGVybHksIGFzIHdlIHNob3VsZCBkbyBhIHF1aWNrIGRpc2Nvbm5lY3QuCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCQkJCXJldHVybiAtRVBST1RPOwogCQkJfQogCi0JCQkvKiBTdWJzdHJhY3Qgc3BhY2UgdXNlZCBieSB0aGlzIHNrYiAqLworCQkJLyogU3VidHJhY3Qgc3BhY2UgdXNlZCBieSB0aGlzIHNrYiAqLwogCQkJc2VsZi0+Ynl0ZXNfbGVmdCAtPSBza2ItPmxlbjsKICNlbHNlCS8qIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XICovCiAJCQkvKiBXaW5kb3cgaGFzIGJlZW4gYWRqdXN0ZWQgZm9yIHRoZSBtYXggcGFja2V0CkBAIC0xODA4LDcgKzE4MDgsNyBAQAogCiAJCQkJcmV0dXJuIC1FUFJPVE87IC8qIFRyeSBhZ2FpbiBsYXRlciAqLwogCQkJfQotCQkJLyogU3Vic3RyYWN0IHNwYWNlIHVzZWQgYnkgdGhpcyBza2IgKi8KKwkJCS8qIFN1YnRyYWN0IHNwYWNlIHVzZWQgYnkgdGhpcyBza2IgKi8KIAkJCXNlbGYtPmJ5dGVzX2xlZnQgLT0gc2tiLT5sZW47CiAjZWxzZQkvKiBDT05GSUdfSVJEQV9EWU5BTUlDX1dJTkRPVyAqLwogCQkJLyogV2luZG93IGhhcyBiZWVuIGFkanVzdGVkIGZvciB0aGUgbWF4IHBhY2tldApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYyBiL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKaW5kZXggNjg4MjIyYy4uOGMwMDQxNiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYworKysgYi9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCkBAIC04NDgsNyArODQ4LDcgQEAKIAkgKiB0aG91Z2ggSXJMQVAgaXMgY3VycmVudGx5IHNlbmRpbmcgdGhlICpsYXN0KiBmcmFtZSBvZiB0aGUKIAkgKiB0eC13aW5kb3csIHRoZSBkcml2ZXIgbW9zdCBsaWtlbHkgaGFzIG9ubHkganVzdCBzdGFydGVkCiAJICogc2VuZGluZyB0aGUgKmZpcnN0KiBmcmFtZSBvZiB0aGUgc2FtZSB0eC13aW5kb3cuCi0JICogSS5lLiB3ZSBhcmUgYWx3YXlzIGF0IHRoZSB2ZXJ5IGJlZ2luaW5nIG9mIG9yIFR4IHdpbmRvdy4KKwkgKiBJLmUuIHdlIGFyZSBhbHdheXMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIG9yIFR4IHdpbmRvdy4KIAkgKiBOb3csIHdlIGFyZSBzdXBwb3NlZCB0byBzZXQgdGhlIGZpbmFsIHRpbWVyIGZyb20gdGhlIGVuZAogCSAqIG9mIG91ciB0eC13aW5kb3cgdG8gbGV0IHRoZSBvdGhlciBwZWVyIHJlcGx5LiBTbywgd2UgbmVlZAogCSAqIHRvIGFkZCBleHRyYSB0aW1lIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBmYWN0IHRoYXQgd2UKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybG1wX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCmluZGV4IGMxZmI1ZGIuLjk1MDVhN2QgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybG1wX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJc3dpdGNoIChldmVudCkgewogI2lmZGVmIENPTkZJR19JUkRBX1VMVFJBCiAJY2FzZSBMTV9VREFUQV9JTkRJQ0FUSU9OOgotCQkvKiBUaGlzIGlzIG1vc3QgYml6emFyZS4gVGhvc2UgcGFja2V0cyBhcmUgIGFrYSB1bnJlbGlhYmxlCisJCS8qIFRoaXMgaXMgbW9zdCBiaXphcnJlLiBUaG9zZSBwYWNrZXRzIGFyZSAgYWthIHVucmVsaWFibGUKIAkJICogY29ubmVjdGVkLCBha2EgSXJMUFQgb3IgU09DS19ER1JBTS9JUkRBUFJPVE9fVU5JVERBVEEuCiAJCSAqIFdoeSBkbyB3ZSBwYXNzIHRoZW0gYXMgVWx0cmEgPz8/IEplYW4gSUkgKi8KIAkJaXJsbXBfY29ubmxlc3NfZGF0YV9pbmRpY2F0aW9uKHNlbGYsIHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXQuaAppbmRleCAwZDgyZmY1Li45NzllY2IyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0LmgKQEAgLTczLDcgKzczLDcgQEAKICAqIEluZmluaXRlIHRoYW5rcyB0byB0aG9zZSBicmF2ZSBzb3VscyBmb3IgcHJvdmlkaW5nIHRoZSBpbmZyYXN0cnVjdHVyZQogICogdXBvbiB3aGljaCBJck5FVCBpcyBidWlsdC4KICAqCi0gKiBUaGFua3MgdG8gYWxsIG15IGNvbGxlZ3VlcyBpbiBIUCBmb3IgaGVscGluZyBtZS4gSW4gcGFydGljdWxhciwKKyAqIFRoYW5rcyB0byBhbGwgbXkgY29sbGVhZ3VlcyBpbiBIUCBmb3IgaGVscGluZyBtZS4gSW4gcGFydGljdWxhciwKICAqIHRoYW5rcyB0byBTYWxpbCBQcmFkaGFuIGFuZCBCaWxsIFNlcnJhIGZvciBXMmsgdGVzdGluZy4uLgogICogVGhhbmtzIHRvIEx1aXogTWFnYWxoYWVzIGZvciBpcm5ldGQgYW5kIG11Y2ggdGVzdGluZy4uLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lycXVldWUuYyBiL25ldC9pcmRhL2lycXVldWUuYwppbmRleCA4NDlhYWYwLi45NzE1ZTZlIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnF1ZXVlLmMKKysrIGIvbmV0L2lyZGEvaXJxdWV1ZS5jCkBAIC00MCw3ICs0MCw3IEBACiAgKglvIHRoZSBoYXNoIGZ1bmN0aW9uIGZvciBpbnRzIGlzIHBhdGhldGljIChidXQgY291bGQgYmUgY2hhbmdlZCkKICAqCW8gbG9ja2luZyBpcyBzb21ldGltZSBzdXNwaWNpb3VzIChlc3BlY2lhbGx5IGR1cmluZyBlbnVtZXJhdGlvbikKICAqCW8gbW9zdCB1c2VycyBoYXZlIG9ubHkgYSBmZXcgZWxlbWVudHMgKD09IG92ZXJoZWFkKQotICoJbyBtb3N0IHVzZXJzIG5ldmVyIHVzZSBzZWFjaCwgc28gZG9uJ3QgYmVuZWZpdCBmcm9tIGhhc2hpbmcKKyAqCW8gbW9zdCB1c2VycyBuZXZlciB1c2Ugc2VhcmNoLCBzbyBkb24ndCBiZW5lZml0IGZyb20gaGFzaGluZwogICogUHJvYmxlbSBhbHJlYWR5IGZpeGVkIDoKICAqCW8gbm90IDY0IGJpdCBjb21wbGlhbnQgKG1vc3QgdXNlcnMgZG8gaGFzaHYgPSAoaW50KSBzZWxmKQogICoJbyBoYXNoYmluX3JlbW92ZSgpIGlzIGJyb2tlbiA9PiB1c2UgaGFzaGJpbl9yZW1vdmVfdGhpcygpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnR0cC5jIGIvbmV0L2lyZGEvaXJ0dHAuYwppbmRleCBmNjA1NGY5Li45ZDlhZjQ2IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnR0cC5jCisrKyBiL25ldC9pcmRhL2lydHRwLmMKQEAgLTExOTMsNyArMTE5Myw3IEBACiAvKgogICogRnVuY3Rpb24gaXJ0dHBfY29ubmVjdF9jb25maXJtIChoYW5kbGUsIHFvcywgc2tiKQogICoKLSAqICAgIFNldmljZSB1c2VyIGNvbmZpcm1zIFRTQVAgY29ubmVjdGlvbiB3aXRoIHBlZXIuCisgKiAgICBTZXJ2aWNlIHVzZXIgY29uZmlybXMgVFNBUCBjb25uZWN0aW9uIHdpdGggcGVlci4KICAqCiAgKi8KIHN0YXRpYyB2b2lkIGlydHRwX2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvcW9zLmMgYi9uZXQvaXJkYS9xb3MuYwppbmRleCAyYjAwOTc0Li4xYjUxYmNmIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9xb3MuYworKysgYi9uZXQvaXJkYS9xb3MuYwpAQCAtMzksMTYgKzM5LDE2IEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXBfZnJhbWUuaD4KIAogLyoKLSAqIE1heGltdW0gdmFsdWVzIG9mIHRoZSBiYXVkIHJhdGUgd2UgbmVnb2NpYXRlIHdpdGggdGhlIG90aGVyIGVuZC4KKyAqIE1heGltdW0gdmFsdWVzIG9mIHRoZSBiYXVkIHJhdGUgd2UgbmVnb3RpYXRlIHdpdGggdGhlIG90aGVyIGVuZC4KICAqIE1vc3Qgb2Z0ZW4sIHlvdSBkb24ndCBoYXZlIHRvIGNoYW5nZSB0aGF0LCBiZWNhdXNlIExpbnV4LUlyREEgd2lsbAogICogdXNlIHRoZSBtYXhpbXVtIG9mZmVyZWQgYnkgdGhlIGxpbmsgbGF5ZXIsIHdoaWNoIHVzdWFsbHkgd29ya3MgZmluZS4KICAqIEluIHNvbWUgdmVyeSByYXJlIGNhc2VzLCB5b3UgbWF5IHdhbnQgdG8gbGltaXQgaXQgdG8gbG93ZXIgc3BlZWRzLi4uCiAgKi8KIGludCBzeXNjdGxfbWF4X2JhdWRfcmF0ZSA9IDE2MDAwMDAwOwogLyoKLSAqIE1heGltdW0gdmFsdWUgb2YgdGhlIGxhcCBkaXNjb25uZWN0IHRpbWVyIHdlIG5lZ29jaWF0ZSB3aXRoIHRoZSBvdGhlciBlbmQuCisgKiBNYXhpbXVtIHZhbHVlIG9mIHRoZSBsYXAgZGlzY29ubmVjdCB0aW1lciB3ZSBuZWdvdGlhdGUgd2l0aCB0aGUgb3RoZXIgZW5kLgogICogTW9zdCBvZnRlbiwgdGhlIHZhbHVlIGJlbG93IHJlcHJlc2VudCB0aGUgYmVzdCBjb21wcm9taXNlLCBidXQgc29tZSB1c2VyCi0gKiBtYXkgd2FudCB0byBrZWVwIHRoZSBMQVAgYWxpdmUgbG9uZ3VlciBvciBzaG9ydGVyIGluIGNhc2Ugb2YgbGluayBmYWlsdXJlLgorICogbWF5IHdhbnQgdG8ga2VlcCB0aGUgTEFQIGFsaXZlIGxvbmdlciBvciBzaG9ydGVyIGluIGNhc2Ugb2YgbGluayBmYWlsdXJlLgogICogUmVtZW1iZXIgdGhhdCB0aGUgdGhyZXNob2xkIHRpbWUgKGVhcmx5IHdhcm5pbmcpIGlzIGZpeGVkIHRvIDNzLi4uCiAgKi8KIGludCBzeXNjdGxfbWF4X25vcmVwbHlfdGltZSA9IDEyOwpAQCAtNDExLDcgKzQxMSw3IEBACiAJICogRml4IHR4IGRhdGEgc2l6ZSBhY2NvcmRpbmcgdG8gdXNlciBsaW1pdHMgLSBKZWFuIElJCiAJICovCiAJaWYgKHFvcy0+ZGF0YV9zaXplLnZhbHVlID4gc3lzY3RsX21heF90eF9kYXRhX3NpemUpCi0JCS8qIEFsbG93IG5vbiBkaXNjcmV0ZSBhZGp1c3RlbWVudCB0byBhdm9pZCBsb29zaW5nIGNhcGFjaXR5ICovCisJCS8qIEFsbG93IG5vbiBkaXNjcmV0ZSBhZGp1c3RlbWVudCB0byBhdm9pZCBsb3NpbmcgY2FwYWNpdHkgKi8KIAkJcW9zLT5kYXRhX3NpemUudmFsdWUgPSBzeXNjdGxfbWF4X3R4X2RhdGFfc2l6ZTsKIAkvKgogCSAqIE92ZXJyaWRlIFR4IHdpbmRvdyBpZiB1c2VyIHJlcXVlc3QgaXQuIC0gSmVhbiBJSQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvdGltZXIuYyBiL25ldC9pcmRhL3RpbWVyLmMKaW5kZXggMDMzNWJhMC4uZjQxOGNiMiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvdGltZXIuYworKysgYi9uZXQvaXJkYS90aW1lci5jCkBAIC01OSw3ICs1OSw3IEBACiAJICogc2xvdCB0aW1lLCBwbHVzIGFkZCBzb21lIGV4dHJhIHRpbWUgdG8gcHJvcGVybHkgcmVjZWl2ZSB0aGUgbGFzdAogCSAqIGRpc2NvdmVyeSBwYWNrZXQgKHdoaWNoIGlzIGxvbmdlciBkdWUgdG8gZXh0cmEgZGlzY292ZXJ5IGluZm8pLAogCSAqIHRvIGF2b2lkIG1lc3Npbmcgd2l0aCBmb3IgaW5jb21taW5nIGNvbm5lY3Rpb25zIHJlcXVlc3RzIGFuZAotCSAqIHRvIGFjY29tb2RhdGUgZGV2aWNlcyB0aGF0IHBlcmZvcm0gZGlzY292ZXJ5IHNsb3dlciB0aGFuIHVzLgorCSAqIHRvIGFjY29tbW9kYXRlIGRldmljZXMgdGhhdCBwZXJmb3JtIGRpc2NvdmVyeSBzbG93ZXIgdGhhbiB1cy4KIAkgKiBKZWFuIElJICovCiAJdGltZW91dCA9ICgoc3lzY3RsX3Nsb3RfdGltZW91dCAqIEhaIC8gMTAwMCkgKiAoUyAtIHMpCiAJCSAgICsgWElERVhUUkFfVElNRU9VVCArIFNNQUxMQlVTWV9USU1FT1VUKTsKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuYwppbmRleCA5NjM3ZTQ1Li45ODZiMmE1IDEwMDY0NAotLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmMKKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCkBAIC0yNTAsNyArMjUwLDcgQEAKICAqCVBSTURBVEFbMC4uNl0Jc29ja2V0IGRhdGEgKG1heCA3IGJ5dGVzKTsKICAqCVBSTURBVEFbN10Jc29ja2V0IGRhdGEgbGVuZ3RoIHZhbHVlIChsZW4gaXMgMHhmZiAtIFBSTURBVEFbN10pCiAgKgotICogVGhlIHNvY2tldCBkYXRhIGxlbmd0aCBpcyBjb21wdXRlZCBieSBzdWJzdHJhY3RpbmcgdGhlIHNvY2tldCBkYXRhIGxlbmd0aAorICogVGhlIHNvY2tldCBkYXRhIGxlbmd0aCBpcyBjb21wdXRlZCBieSBzdWJ0cmFjdGluZyB0aGUgc29ja2V0IGRhdGEgbGVuZ3RoCiAgKiB2YWx1ZSBmcm9tIDB4RkYuCiAgKiBJZiB0aGUgc29ja2V0IGRhdGEgbGVuIGlzIGdyZWF0ZXIgNywgdGhlbiBQUk1EQVRBIGNhbiBiZSB1c2VkIGZvciBzcGVjaWFsCiAgKiBub3RpZmljYXRpb25zIChzZWUgaXVjdl9zb2NrX3NodXRkb3duKTsgYW5kIGZ1cnRoZXIsCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9pdWN2LmMgYi9uZXQvaXVjdi9pdWN2LmMKaW5kZXggMWVlNWRhYi4uOGYxNTZiZCAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvaXVjdi5jCisrKyBiL25ldC9pdWN2L2l1Y3YuYwpAQCAtNzM1LDcgKzczNSw3IEBACiAJc3RydWN0IGl1Y3ZfaXJxX2xpc3QgKnAsICpuOwogCiAJLyoKLQkgKiBXaGVuIGEgcGF0aCBpcyBzZXZlcmVkLCB0aGUgcGF0aGlkIGNhbiBiZSByZXVzZWQgaW1tZWRpYXRseQorCSAqIFdoZW4gYSBwYXRoIGlzIHNldmVyZWQsIHRoZSBwYXRoaWQgY2FuIGJlIHJldXNlZCBpbW1lZGlhdGVseQogCSAqIG9uIGEgaXVjdiBjb25uZWN0IG9yIGEgY29ubmVjdGlvbiBwZW5kaW5nIGludGVycnVwdC4gUmVtb3ZlCiAJICogYWxsIGVudHJpZXMgZnJvbSB0aGUgdGFzayBxdWV1ZSB0aGF0IHJlZmVyIHRvIGEgc3RhbGUgcGF0aGlkCiAJICogKGl1Y3ZfcGF0aF90YWJsZVtpeF0gPT0gTlVMTCkuIE9ubHkgdGhlbiBkbyB0aGUgaXVjdiBjb25uZWN0CkBAIC04MDcsNyArODA3LDcgQEAKIAlzcGluX2xvY2tfYmgoJml1Y3ZfdGFibGVfbG9jayk7CiAJLyogUmVtb3ZlIGhhbmRsZXIgZnJvbSB0aGUgaXVjdl9oYW5kbGVyX2xpc3QuICovCiAJbGlzdF9kZWxfaW5pdCgmaGFuZGxlci0+bGlzdCk7Ci0JLyogU2V2ZXIgYWxsIHBhdGhpZHMgc3RpbGwgcmVmZXJpbmcgdG8gdGhlIGhhbmRsZXIuICovCisJLyogU2V2ZXIgYWxsIHBhdGhpZHMgc3RpbGwgcmVmZXJyaW5nIHRvIHRoZSBoYW5kbGVyLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmaGFuZGxlci0+cGF0aHMsIGxpc3QpIHsKIAkJaXVjdl9zZXZlcl9wYXRoaWQocC0+cGF0aGlkLCBOVUxMKTsKIAkJaXVjdl9wYXRoX3RhYmxlW3AtPnBhdGhpZF0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9pcC5jIGIvbmV0L2wydHAvbDJ0cF9pcC5jCmluZGV4IGZjZTliZDMuLjVjMDRmM2UgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfaXAuYworKysgYi9uZXQvbDJ0cC9sMnRwX2lwLmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJMMlRQIG92ZXIgSVAiKTsKIE1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKIAotLyogVXNlIHRoZSB2YWx1ZSBvZiBTT0NLX0RHUkFNICgyKSBkaXJlY3RvcnksIGJlY2F1c2UgX19zdHJpbmdpZnkgZG9lcyd0IGxpa2UKKy8qIFVzZSB0aGUgdmFsdWUgb2YgU09DS19ER1JBTSAoMikgZGlyZWN0b3J5LCBiZWNhdXNlIF9fc3RyaW5naWZ5IGRvZXNuJ3QgbGlrZQogICogZW51bXMKICAqLwogTU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UT19UWVBFKFBGX0lORVQsIDIsIElQUFJPVE9fTDJUUCk7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19pbnB1dC5jIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwppbmRleCAwNThmMWU5Li45MDMyNDIxIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19pbnB1dC5jCisrKyBiL25ldC9sbGMvbGxjX2lucHV0LmMKQEAgLTEyMSw4ICsxMjEsNyBAQAogCQlzMzIgZGF0YV9zaXplID0gbnRvaHMocGR1bGVuKSAtIGxsY19sZW47CiAKIAkJaWYgKGRhdGFfc2l6ZSA8IDAgfHwKLQkJICAgICgoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0KLQkJICAgICAgKHU4ICopcGR1KSAtIGxsY19sZW4pIDwgZGF0YV9zaXplKQorCQkgICAgIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX3NpemUpKQogCQkJcmV0dXJuIDA7CiAJCWlmICh1bmxpa2VseShwc2tiX3RyaW1fcmNzdW0oc2tiLCBkYXRhX3NpemUpKSkKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDMzNDIxMzUuLjQ0MDQ5NzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTE1MDQsNiArMTUwNCw4IEBACiAJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIG9sZF9yZXE7CiAJaW50IGVycjsKIAorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNkYXRhLT51Lm1nZC5tdHgpOworCiAJb2xkX3JlcSA9IHNkYXRhLT51Lm1nZC5yZXFfc21wczsKIAlzZGF0YS0+dS5tZ2QucmVxX3NtcHMgPSBzbXBzX21vZGU7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKaW5kZXggZGFjYWNlNi4uOWVhN2MwZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKQEAgLTE3Nyw5ICsxNzcsOSBAQAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCW11dGV4X2xvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCWVyciA9IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzZGF0YSwgc21wc19tb2RlKTsKLQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwltdXRleF91bmxvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggYTQwNDAxNy4uYzE4Mzk2YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTk3LDcgKzk3LDcgQEAKIAlzaXplX3Qgc3VwcF9yYXRlc19sZW47CiAKIAkvKgotCSAqIER1cmluZyBhc3NvY2F0aW9uLCB3ZSBzYXZlIGFuIEVSUCB2YWx1ZSBmcm9tIGEgcHJvYmUgcmVzcG9uc2Ugc28KKwkgKiBEdXJpbmcgYXNzb2NpYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbwogCSAqIHRoYXQgd2UgY2FuIGZlZWQgRVJQIGluZm8gdG8gdGhlIGRyaXZlciB3aGVuIGhhbmRsaW5nIHRoZQogCSAqIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gdGhlc2UgZmllbGRzIHByb2JhYmx5IHdvbid0IGJlIHVwLXRvLWRhdGUKIAkgKiBvdGhlcndpc2UsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGVtLgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDhjMDI0NjkuLmFmM2M1NjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCQlpZiAoSVNfRVJSKGtleS0+dS5jY21wLnRmbSkpIHsKIAkJCWVyciA9IFBUUl9FUlIoa2V5LT51LmNjbXAudGZtKTsKIAkJCWtmcmVlKGtleSk7Ci0JCQlrZXkgPSBFUlJfUFRSKGVycik7CisJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CkBAIC0zNjAsNyArMzYwLDcgQEAKIAkJaWYgKElTX0VSUihrZXktPnUuYWVzX2NtYWMudGZtKSkgewogCQkJZXJyID0gUFRSX0VSUihrZXktPnUuYWVzX2NtYWMudGZtKTsKIAkJCWtmcmVlKGtleSk7Ci0JCQlrZXkgPSBFUlJfUFRSKGVycik7CisJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTQwMCwxMSArNDAwLDEyIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKm9sZF9rZXk7CiAJaW50IGlkeCwgcmV0OwotCWJvb2wgcGFpcndpc2UgPSBrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0U7CisJYm9vbCBwYWlyd2lzZTsKIAogCUJVR19PTighc2RhdGEpOwogCUJVR19PTigha2V5KTsKIAorCXBhaXJ3aXNlID0ga2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFOwogCWlkeCA9IGtleS0+Y29uZi5rZXlpZHg7CiAJa2V5LT5sb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlrZXktPnNkYXRhID0gc2RhdGE7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggOGQ2NWI0Ny4uMzM2Y2E5ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtNjI4LDcgKzYyOCw3IEBACiAgKgogICogQG1wYXRoOiBtZXNoIHBhdGggd2hvc2UgcXVldWUgaGFzIHRvIGJlIGZyZWVkCiAgKgotICogTG9ja2luZzogdGhlIGZ1bmN0aW9uIG11c3QgbWUgY2FsbGVkIHdpdGhpbmcgYSByY3VfcmVhZF9sb2NrIHJlZ2lvbgorICogTG9ja2luZzogdGhlIGZ1bmN0aW9uIG11c3QgbWUgY2FsbGVkIHdpdGhpbiBhIHJjdV9yZWFkX2xvY2sgcmVnaW9uCiAgKi8KIHZvaWQgbWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpCiB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYwppbmRleCA4MjEyYThiLi5jMDZhYTNhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCQl9CiAJfQogCi0JLyogdHJ5IHRvIHNhbXBsZSB1cCB0byBoYWxmIG9mIHRoZSBhdmFpbGJsZSByYXRlcyBkdXJpbmcgZWFjaCBpbnRlcnZhbCAqLworCS8qIHRyeSB0byBzYW1wbGUgdXAgdG8gaGFsZiBvZiB0aGUgYXZhaWxhYmxlIHJhdGVzIGR1cmluZyBlYWNoIGludGVydmFsICovCiAJbWktPnNhbXBsZV9jb3VudCAqPSA0OwogCiAJY3VyX3Byb2IgPSAwOwpAQCAtNjU5LDE4ICs2NTksMTQgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvICptY3MgPSAmc3RhLT5odF9jYXAubWNzOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwobXAtPmh3KTsKIAl1MTYgc3RhX2NhcCA9IHN0YS0+aHRfY2FwLmNhcDsKKwlpbnQgbl9zdXBwb3J0ZWQgPSAwOwogCWludCBhY2tfZHVyOwogCWludCBzdGJjOwogCWludCBpOwogCiAJLyogZmFsbCBiYWNrIHRvIHRoZSBvbGQgbWluc3RyZWwgZm9yIGxlZ2FjeSBzdGF0aW9ucyAqLwotCWlmICghc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7Ci0JCW1zcC0+aXNfaHQgPSBmYWxzZTsKLQkJbWVtc2V0KCZtc3AtPmxlZ2FjeSwgMCwgc2l6ZW9mKG1zcC0+bGVnYWN5KSk7Ci0JCW1zcC0+bGVnYWN5LnIgPSBtc3AtPnJhdGVsaXN0OwotCQltc3AtPmxlZ2FjeS5zYW1wbGVfdGFibGUgPSBtc3AtPnNhbXBsZV90YWJsZTsKLQkJcmV0dXJuIG1hYzgwMjExX21pbnN0cmVsLnJhdGVfaW5pdChwcml2LCBzYmFuZCwgc3RhLCAmbXNwLT5sZWdhY3kpOwotCX0KKwlpZiAoIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJZ290byB1c2VfbGVnYWN5OwogCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobWluc3RyZWxfbWNzX2dyb3VwcykgIT0KIAkJTUlOU1RSRUxfTUFYX1NUUkVBTVMgKiBNSU5TVFJFTF9TVFJFQU1fR1JPVVBTKTsKQEAgLTcyNSw3ICs3MjEsMjIgQEAKIAogCQltaS0+Z3JvdXBzW2ldLnN1cHBvcnRlZCA9CiAJCQltY3MtPnJ4X21hc2tbbWluc3RyZWxfbWNzX2dyb3Vwc1tpXS5zdHJlYW1zIC0gMV07CisKKwkJaWYgKG1pLT5ncm91cHNbaV0uc3VwcG9ydGVkKQorCQkJbl9zdXBwb3J0ZWQrKzsKIAl9CisKKwlpZiAoIW5fc3VwcG9ydGVkKQorCQlnb3RvIHVzZV9sZWdhY3k7CisKKwlyZXR1cm47CisKK3VzZV9sZWdhY3k6CisJbXNwLT5pc19odCA9IGZhbHNlOworCW1lbXNldCgmbXNwLT5sZWdhY3ksIDAsIHNpemVvZihtc3AtPmxlZ2FjeSkpOworCW1zcC0+bGVnYWN5LnIgPSBtc3AtPnJhdGVsaXN0OworCW1zcC0+bGVnYWN5LnNhbXBsZV90YWJsZSA9IG1zcC0+c2FtcGxlX3RhYmxlOworCXJldHVybiBtYWM4MDIxMV9taW5zdHJlbC5yYXRlX2luaXQocHJpdiwgc2JhbmQsIHN0YSwgJm1zcC0+bGVnYWN5KTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZC5oIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkLmgKaW5kZXggNjUxMGY4ZS4uMTkxMTFjNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkLmgKKysrIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkLmgKQEAgLTc3LDcgKzc3LDcgQEAKIH07CiAKIHN0cnVjdCByY19waWRfZXZlbnQgewotCS8qIFRoZSB0aW1lIHdoZW4gdGhlIGV2ZW50IG9jY3VyZWQgKi8KKwkvKiBUaGUgdGltZSB3aGVuIHRoZSBldmVudCBvY2N1cnJlZCAqLwogCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOwogCiAJLyogRXZlbnQgSUQgbnVtYmVyICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDVjMTkzMGJhLi5jNWQ0NTMwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAgKiBzcGVjcyB3ZXJlIHNhbmUgZW5vdWdoIHRoaXMgdGltZSBhcm91bmQgdG8gcmVxdWlyZSBwYWRkaW5nIGVhY2ggQS1NU0RVCiAgKiBzdWJmcmFtZSB0byBhIGxlbmd0aCB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgZm91ci4KICAqCi0gKiBQYWRkaW5nIGxpa2UgQXRoZXJvcyBoYXJkd2FyZSBhZGRzIHdoaWNoIGlzIGluYmV0d2VlbiB0aGUgODAyLjExIGhlYWRlciBhbmQKKyAqIFBhZGRpbmcgbGlrZSBBdGhlcm9zIGhhcmR3YXJlIGFkZHMgd2hpY2ggaXMgYmV0d2VlbiB0aGUgODAyLjExIGhlYWRlciBhbmQKICAqIHRoZSBwYXlsb2FkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgODAyLjExCiAgKiBoZWFkZXIgdG8gYmUgZGlyZWN0bHkgaW4gZnJvbnQgb2YgdGhlIHBheWxvYWQgaW4gdGhhdCBjYXNlLgogICovCkBAIC02MTIsNyArNjEyLDggQEAKIAkJCQlza2lwcGVkKys7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGlkX2FnZ19yeC0+cmVvcmRlcl90aW1lW2pdICsKKwkJCWlmIChza2lwcGVkICYmCisJCQkgICAgIXRpbWVfYWZ0ZXIoamlmZmllcywgdGlkX2FnZ19yeC0+cmVvcmRlcl90aW1lW2pdICsKIAkJCQkJSFRfUlhfUkVPUkRFUl9CVUZfVElNRU9VVCkpCiAJCQkJZ290byBzZXRfcmVsZWFzZV90aW1lcjsKIApAQCAtMjU0MCw3ICsyNTQxLDYgQEAKIAkJICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uCiAJCSAqLwogCQlyeC0+c2tiID0gc2tiOwotCQlyeC0+ZmxhZ3MgPSAwOwogCiAJCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2RlY3J5cHQpCiAJCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2NoZWNrX21vcmVfZGF0YSkKQEAgLTI2MTEsNiArMjYxMSw3IEBACiAJCS5zZGF0YSA9IHN0YS0+c2RhdGEsCiAJCS5sb2NhbCA9IHN0YS0+bG9jYWwsCiAJCS5xdWV1ZSA9IHRpZCwKKwkJLmZsYWdzID0gMCwKIAl9OwogCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggZDAzMTFhMy4uMTNlOGMzMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTQ3LDkgKzQ3LDkgQEAKICAqIFN0YXRpb24gZW50cmllcyBhcmUgYWRkZWQgYnkgbWFjODAyMTEgd2hlbiB5b3UgZXN0YWJsaXNoIGEgbGluayB3aXRoIGEKICAqIHBlZXIuIFRoaXMgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBmb3IgdGhlIGRpZmZlcmVudCB0eXBlIG9mIGludGVyZmFjZXMKICAqIHdlIHN1cHBvcnQuIEZvciBhIHJlZ3VsYXIgc3RhdGlvbiB0aGlzIG1lYW4gd2UgYWRkIHRoZSBBUCBzdGEgd2hlbiB3ZQotICogcmVjZWl2ZSBhbiBhc3NvY2F0aW9uIHJlc3BvbnNlIGZyb20gdGhlIEFQLiBGb3IgSUJTUyB0aGlzIG9jY3VycyB3aGVuCisgKiByZWNlaXZlIGFuIGFzc29jaWF0aW9uIHJlc3BvbnNlIGZyb20gdGhlIEFQLiBGb3IgSUJTUyB0aGlzIG9jY3VycyB3aGVuCiAgKiBnZXQgdG8ga25vdyBhYm91dCBhIHBlZXIgb24gdGhlIHNhbWUgSUJTUy4gRm9yIFdEUyB3ZSBhZGQgdGhlIHN0YSBmb3IKLSAqIHRoZSBwZWVyIGltZWRpYXRlbHkgdXBvbiBkZXZpY2Ugb3Blbi4gV2hlbiB1c2luZyBBUCBtb2RlIHdlIGFkZCBzdGF0aW9ucworICogdGhlIHBlZXIgaW1tZWRpYXRlbHkgdXBvbiBkZXZpY2Ugb3Blbi4gV2hlbiB1c2luZyBBUCBtb2RlIHdlIGFkZCBzdGF0aW9ucwogICogZm9yIGVhY2ggcmVzcGVjdGl2ZSBzdGF0aW9uIHVwb24gcmVxdWVzdCBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5sODAyMTEuCiAgKgogICogSW4gb3JkZXIgdG8gcmVtb3ZlIGEgU1RBIGluZm8gc3RydWN0dXJlLCB2YXJpb3VzIHN0YV9pbmZvX2Rlc3Ryb3lfKigpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCmluZGV4IDU3NjgxMTQuLmIyZjk1OTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCkBAIC0xNzMsNyArMTczLDcgQEAKIC8qKgogICogZW51bSBwbGlua19zdGF0ZSAtIHN0YXRlIG9mIGEgbWVzaCBwZWVyIGxpbmsgZmluaXRlIHN0YXRlIG1hY2hpbmUKICAqCi0gKiBAUExJTktfTElTVEVOOiBpbml0aWFsIHN0YXRlLCBjb25zaWRlcmVkIHRoZSBpbXBsaWNpdCBzdGF0ZSBvZiBub24gZXhpc3RhbnQKKyAqIEBQTElOS19MSVNURU46IGluaXRpYWwgc3RhdGUsIGNvbnNpZGVyZWQgdGhlIGltcGxpY2l0IHN0YXRlIG9mIG5vbiBleGlzdGVudAogICogCW1lc2ggcGVlciBsaW5rcwogICogQFBMSU5LX09QTl9TTlQ6IG1lc2ggcGxpbmsgb3BlbiBmcmFtZSBoYXMgYmVlbiBzZW50IHRvIHRoaXMgbWVzaCBwZWVyCiAgKiBAUExJTktfT1BOX1JDVkQ6IG1lc2ggcGxpbmsgb3BlbiBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIHRoaXMgbWVzaCBwZWVyCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IGNlNDU5NmUuLmJkMTIyNGYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0yMzcsNiArMjM3LDEwIEBACiAJCQkJICAgICAmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKIAl9CiAKKwkvKiBEb24ndCByZXN0YXJ0IHRoZSB0aW1lciBpZiB3ZSdyZSBub3QgZGlzYXNzb2NpYXRlZCAqLworCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCisJCXJldHVybiBUWF9DT05USU5VRTsKKwogCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwogCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBjM2Y5ODhhLi4zMmJmZjZkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC02NTIsNyArNjUyLDYgQEAKIGNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQUREUlRZUEUKIAl0cmlzdGF0ZSAnImFkZHJ0eXBlIiBhZGRyZXNzIHR5cGUgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWRlcGVuZHMgb24gKElQVjYgfHwgSVBWNj1uKQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gbWF0Y2ggd2hhdCByb3V0aW5nIHRoaW5rcyBvZiBhbiBhZGRyZXNzLAogCSAgZWcuIFVOSUNBU1QsIExPQ0FMLCBCUk9BRENBU1QsIC4uLgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwppbmRleCBiY2E5Njk5Li5hMTEzZmYwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYwpAQCAtMzM4LDggKzMzOCw3IEBACiAJTkxBX1BVVF9JUEFERFI0KHNrYiwgSVBTRVRfQVRUUl9JUF9UTywgaHRvbmwobWFwLT5sYXN0X2lwKSk7CiAJaWYgKG1hcC0+bmV0bWFzayAhPSAzMikKIAkJTkxBX1BVVF9VOChza2IsIElQU0VUX0FUVFJfTkVUTUFTSywgbWFwLT5uZXRtYXNrKTsKLQlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLAotCQkgICAgICBodG9ubChhdG9taWNfcmVhZCgmc2V0LT5yZWYpIC0gMSkpOworCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsIGh0b25sKHNldC0+cmVmIC0gMSkpOwogCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX01FTVNJWkUsCiAJCSAgICAgIGh0b25sKHNpemVvZigqbWFwKSArIG1hcC0+bWVtc2l6ZSkpOwogCWlmICh3aXRoX3RpbWVvdXQobWFwLT50aW1lb3V0KSkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMKaW5kZXggNWU3OTAxNy4uYTI3NDMwMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMKQEAgLTM0Myw2ICszNDMsMTAgQEAKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07CiAJc3RydWN0IGlwbWFjIGRhdGE7CiAKKwkvKiBNQUMgY2FuIGJlIHNyYyBvbmx5ICovCisJaWYgKCEoZmxhZ3MgJiBJUFNFVF9ESU1fVFdPX1NSQykpCisJCXJldHVybiAwOworCiAJZGF0YS5pZCA9IG50b2hsKGlwNGFkZHIoc2tiLCBmbGFncyAmIElQU0VUX0RJTV9PTkVfU1JDKSk7CiAJaWYgKGRhdGEuaWQgPCBtYXAtPmZpcnN0X2lwIHx8IGRhdGEuaWQgPiBtYXAtPmxhc3RfaXApCiAJCXJldHVybiAtSVBTRVRfRVJSX0JJVE1BUF9SQU5HRTsKQEAgLTQzNCw4ICs0MzgsNyBAQAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAlOTEFfUFVUX0lQQUREUjQoc2tiLCBJUFNFVF9BVFRSX0lQLCBodG9ubChtYXAtPmZpcnN0X2lwKSk7CiAJTkxBX1BVVF9JUEFERFI0KHNrYiwgSVBTRVRfQVRUUl9JUF9UTywgaHRvbmwobWFwLT5sYXN0X2lwKSk7Ci0JTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywKLQkJICAgICAgaHRvbmwoYXRvbWljX3JlYWQoJnNldC0+cmVmKSAtIDEpKTsKKwlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtPnJlZiAtIDEpKTsKIAlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9NRU1TSVpFLAogCQkgICAgICBodG9ubChzaXplb2YoKm1hcCkKIAkJCSAgICArIChtYXAtPmxhc3RfaXAgLSBtYXAtPmZpcnN0X2lwICsgMSkgKiBtYXAtPmRzaXplKSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYwppbmRleCAxNjVmMDliLi42YjM4ZWI4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMKQEAgLTMyMCw4ICszMjAsNyBAQAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAlOTEFfUFVUX05FVDE2KHNrYiwgSVBTRVRfQVRUUl9QT1JULCBodG9ucyhtYXAtPmZpcnN0X3BvcnQpKTsKIAlOTEFfUFVUX05FVDE2KHNrYiwgSVBTRVRfQVRUUl9QT1JUX1RPLCBodG9ucyhtYXAtPmxhc3RfcG9ydCkpOwotCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsCi0JCSAgICAgIGh0b25sKGF0b21pY19yZWFkKCZzZXQtPnJlZikgLSAxKSk7CisJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywgaHRvbmwoc2V0LT5yZWYgLSAxKSk7CiAJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfTUVNU0laRSwKIAkJICAgICAgaHRvbmwoc2l6ZW9mKCptYXApICsgbWFwLT5tZW1zaXplKSk7CiAJaWYgKHdpdGhfdGltZW91dChtYXAtPnRpbWVvdXQpKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCmluZGV4IGQ2YjQ4MjMuLjcyZDFhYzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKQEAgLTI2LDYgKzI2LDcgQEAKIAogc3RhdGljIExJU1RfSEVBRChpcF9zZXRfdHlwZV9saXN0KTsJCS8qIGFsbCByZWdpc3RlcmVkIHNldCB0eXBlcyAqLwogc3RhdGljIERFRklORV9NVVRFWChpcF9zZXRfdHlwZV9tdXRleCk7CQkvKiBwcm90ZWN0cyBpcF9zZXRfdHlwZV9saXN0ICovCitzdGF0aWMgREVGSU5FX1JXTE9DSyhpcF9zZXRfcmVmX2xvY2spOwkJLyogcHJvdGVjdHMgdGhlIHNldCByZWZzICovCiAKIHN0YXRpYyBzdHJ1Y3QgaXBfc2V0ICoqaXBfc2V0X2xpc3Q7CQkvKiBhbGwgaW5kaXZpZHVhbCBzZXRzICovCiBzdGF0aWMgaXBfc2V0X2lkX3QgaXBfc2V0X21heCA9IENPTkZJR19JUF9TRVRfTUFYOyAvKiBtYXggbnVtYmVyIG9mIHNldHMgKi8KQEAgLTMwMSwxMyArMzAyLDE4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIF9faXBfc2V0X2dldChpcF9zZXRfaWRfdCBpbmRleCkKIHsKLQlhdG9taWNfaW5jKCZpcF9zZXRfbGlzdFtpbmRleF0tPnJlZik7CisJd3JpdGVfbG9ja19iaCgmaXBfc2V0X3JlZl9sb2NrKTsKKwlpcF9zZXRfbGlzdFtpbmRleF0tPnJlZisrOworCXdyaXRlX3VubG9ja19iaCgmaXBfc2V0X3JlZl9sb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBfX2lwX3NldF9wdXQoaXBfc2V0X2lkX3QgaW5kZXgpCiB7Ci0JYXRvbWljX2RlYygmaXBfc2V0X2xpc3RbaW5kZXhdLT5yZWYpOworCXdyaXRlX2xvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CisJQlVHX09OKGlwX3NldF9saXN0W2luZGV4XS0+cmVmID09IDApOworCWlwX3NldF9saXN0W2luZGV4XS0+cmVmLS07CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOwogfQogCiAvKgpAQCAtMzI0LDcgKzMzMCw3IEBACiAJc3RydWN0IGlwX3NldCAqc2V0ID0gaXBfc2V0X2xpc3RbaW5kZXhdOwogCWludCByZXQgPSAwOwogCi0JQlVHX09OKHNldCA9PSBOVUxMIHx8IGF0b21pY19yZWFkKCZzZXQtPnJlZikgPT0gMCk7CisJQlVHX09OKHNldCA9PSBOVUxMKTsKIAlwcl9kZWJ1Zygic2V0ICVzLCBpbmRleCAldVxuIiwgc2V0LT5uYW1lLCBpbmRleCk7CiAKIAlpZiAoZGltIDwgc2V0LT50eXBlLT5kaW1lbnNpb24gfHwKQEAgLTM1Niw3ICszNjIsNyBAQAogCXN0cnVjdCBpcF9zZXQgKnNldCA9IGlwX3NldF9saXN0W2luZGV4XTsKIAlpbnQgcmV0OwogCi0JQlVHX09OKHNldCA9PSBOVUxMIHx8IGF0b21pY19yZWFkKCZzZXQtPnJlZikgPT0gMCk7CisJQlVHX09OKHNldCA9PSBOVUxMKTsKIAlwcl9kZWJ1Zygic2V0ICVzLCBpbmRleCAldVxuIiwgc2V0LT5uYW1lLCBpbmRleCk7CiAKIAlpZiAoZGltIDwgc2V0LT50eXBlLT5kaW1lbnNpb24gfHwKQEAgLTM3OCw3ICszODQsNyBAQAogCXN0cnVjdCBpcF9zZXQgKnNldCA9IGlwX3NldF9saXN0W2luZGV4XTsKIAlpbnQgcmV0ID0gMDsKIAotCUJVR19PTihzZXQgPT0gTlVMTCB8fCBhdG9taWNfcmVhZCgmc2V0LT5yZWYpID09IDApOworCUJVR19PTihzZXQgPT0gTlVMTCk7CiAJcHJfZGVidWcoInNldCAlcywgaW5kZXggJXVcbiIsIHNldC0+bmFtZSwgaW5kZXgpOwogCiAJaWYgKGRpbSA8IHNldC0+dHlwZS0+ZGltZW5zaW9uIHx8CkBAIC0zOTcsNyArNDAzLDYgQEAKICAqIEZpbmQgc2V0IGJ5IG5hbWUsIHJlZmVyZW5jZSBpdCBvbmNlLiBUaGUgcmVmZXJlbmNlIG1ha2VzIHN1cmUgdGhlCiAgKiB0aGluZyBwb2ludGVkIHRvLCBkb2VzIG5vdCBnbyBhd2F5IHVuZGVyIG91ciBmZWV0LgogICoKLSAqIFRoZSBuZm5sIG11dGV4IG11c3QgYWxyZWFkeSBiZSBhY3RpdmF0ZWQuCiAgKi8KIGlwX3NldF9pZF90CiBpcF9zZXRfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaXBfc2V0ICoqc2V0KQpAQCAtNDIzLDE1ICs0MjgsMTIgQEAKICAqIHJlZmVyZW5jZSBjb3VudCBieSAxLiBUaGUgY2FsbGVyIHNoYWxsIG5vdCBhc3N1bWUgdGhlIGluZGV4CiAgKiB0byBiZSB2YWxpZCwgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICoKLSAqIFRoZSBuZm5sIG11dGV4IG11c3QgYWxyZWFkeSBiZSBhY3RpdmF0ZWQuCiAgKi8KIHZvaWQKIGlwX3NldF9wdXRfYnlpbmRleChpcF9zZXRfaWRfdCBpbmRleCkKIHsKLQlpZiAoaXBfc2V0X2xpc3RbaW5kZXhdICE9IE5VTEwpIHsKLQkJQlVHX09OKGF0b21pY19yZWFkKCZpcF9zZXRfbGlzdFtpbmRleF0tPnJlZikgPT0gMCk7CisJaWYgKGlwX3NldF9saXN0W2luZGV4XSAhPSBOVUxMKQogCQlfX2lwX3NldF9wdXQoaW5kZXgpOwotCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9wdXRfYnlpbmRleCk7CiAKQEAgLTQ0MSw3ICs0NDMsNiBAQAogICogY2FuJ3QgYmUgZGVzdHJveWVkLiBUaGUgc2V0IGNhbm5vdCBiZSByZW5hbWVkIGR1ZSB0bwogICogdGhlIHJlZmVyZW5jaW5nIGVpdGhlci4KICAqCi0gKiBUaGUgbmZubCBtdXRleCBtdXN0IGFscmVhZHkgYmUgYWN0aXZhdGVkLgogICovCiBjb25zdCBjaGFyICoKIGlwX3NldF9uYW1lX2J5aW5kZXgoaXBfc2V0X2lkX3QgaW5kZXgpCkBAIC00NDksNyArNDUwLDcgQEAKIAljb25zdCBzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBpcF9zZXRfbGlzdFtpbmRleF07CiAKIAlCVUdfT04oc2V0ID09IE5VTEwpOwotCUJVR19PTihhdG9taWNfcmVhZCgmc2V0LT5yZWYpID09IDApOworCUJVR19PTihzZXQtPnJlZiA9PSAwKTsKIAogCS8qIFJlZmVyZW5jZWQsIHNvIGl0J3Mgc2FmZSAqLwogCXJldHVybiBzZXQtPm5hbWU7CkBAIC01MTUsMTAgKzUxNiw3IEBACiBpcF9zZXRfbmZubF9wdXQoaXBfc2V0X2lkX3QgaW5kZXgpCiB7CiAJbmZubF9sb2NrKCk7Ci0JaWYgKGlwX3NldF9saXN0W2luZGV4XSAhPSBOVUxMKSB7Ci0JCUJVR19PTihhdG9taWNfcmVhZCgmaXBfc2V0X2xpc3RbaW5kZXhdLT5yZWYpID09IDApOwotCQlfX2lwX3NldF9wdXQoaW5kZXgpOwotCX0KKwlpcF9zZXRfcHV0X2J5aW5kZXgoaW5kZXgpOwogCW5mbmxfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfbmZubF9wdXQpOwpAQCAtNTI2LDcgKzUyNCw3IEBACiAvKgogICogQ29tbXVuaWNhdGlvbiBwcm90b2NvbCB3aXRoIHVzZXJzcGFjZSBvdmVyIG5ldGxpbmsuCiAgKgotICogV2UgYWxyZWFkeSBsb2NrZWQgYnkgbmZubF9sb2NrLgorICogVGhlIGNvbW1hbmRzIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBuZm5sIG11dGV4LgogICovCiAKIHN0YXRpYyBpbmxpbmUgYm9vbApAQCAtNjU3LDcgKzY1NSw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJ3bG9ja19pbml0KCZzZXQtPmxvY2spOwogCXN0cmxjcHkoc2V0LT5uYW1lLCBuYW1lLCBJUFNFVF9NQVhOQU1FTEVOKTsKLQlhdG9taWNfc2V0KCZzZXQtPnJlZiwgMCk7CiAJc2V0LT5mYW1pbHkgPSBmYW1pbHk7CiAKIAkvKgpAQCAtNjkwLDggKzY4Nyw4IEBACiAKIAkvKgogCSAqIEhlcmUsIHdlIGhhdmUgYSB2YWxpZCwgY29uc3RydWN0ZWQgc2V0IGFuZCB3ZSBhcmUgcHJvdGVjdGVkCi0JICogYnkgbmZubF9sb2NrLiBGaW5kIHRoZSBmaXJzdCBmcmVlIGluZGV4IGluIGlwX3NldF9saXN0IGFuZAotCSAqIGNoZWNrIGNsYXNoaW5nLgorCSAqIGJ5IHRoZSBuZm5sIG11dGV4LiBGaW5kIHRoZSBmaXJzdCBmcmVlIGluZGV4IGluIGlwX3NldF9saXN0CisJICogYW5kIGNoZWNrIGNsYXNoaW5nLgogCSAqLwogCWlmICgocmV0ID0gZmluZF9mcmVlX2lkKHNldC0+bmFtZSwgJmluZGV4LCAmY2xhc2gpKSAhPSAwKSB7CiAJCS8qIElmIHRoaXMgaXMgdGhlIHNhbWUgc2V0IGFuZCByZXF1ZXN0ZWQsIGlnbm9yZSBlcnJvciAqLwpAQCAtNzUxLDMxICs3NDgsNTEgQEAKIAkgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSkKIHsKIAlpcF9zZXRfaWRfdCBpOworCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KHByb3RvY29sX2ZhaWxlZChhdHRyKSkpCiAJCXJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MOwogCi0JLyogUmVmZXJlbmNlcyBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBuZm5sIG11dGV4ICovCisJLyogQ29tbWFuZHMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJlZmVyZW5jZXMgYXJlCisJICogcHJvdGVjdGVkIGJ5IHRoZSBpcF9zZXRfcmVmX2xvY2suCisJICogRXh0ZXJuYWwgc3lzdGVtcyAoaS5lLiB4dF9zZXQpIG11c3QgY2FsbAorCSAqIGlwX3NldF9wdXR8Z2V0X25mbmxfKiBmdW5jdGlvbnMsIHRoYXQgd2F5IHdlCisJICogY2FuIHNhZmVseSBjaGVjayByZWZlcmVuY2VzIGhlcmUuCisJICoKKwkgKiBsaXN0OnNldCB0aW1lciBjYW4gb25seSBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZQorCSAqIGNvdW50ZXIsIHNvIGlmIGl0J3MgYWxyZWFkeSB6ZXJvLCB3ZSBjYW4gcHJvY2VlZAorCSAqIHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4KKwkgKi8KKwlyZWFkX2xvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CiAJaWYgKCFhdHRyW0lQU0VUX0FUVFJfU0VUTkFNRV0pIHsKIAkJZm9yIChpID0gMDsgaSA8IGlwX3NldF9tYXg7IGkrKykgewotCQkJaWYgKGlwX3NldF9saXN0W2ldICE9IE5VTEwgJiYKLQkJCSAgICAoYXRvbWljX3JlYWQoJmlwX3NldF9saXN0W2ldLT5yZWYpKSkKLQkJCQlyZXR1cm4gLUlQU0VUX0VSUl9CVVNZOworCQkJaWYgKGlwX3NldF9saXN0W2ldICE9IE5VTEwgJiYgaXBfc2V0X2xpc3RbaV0tPnJlZikgeworCQkJCXJldCA9IElQU0VUX0VSUl9CVVNZOworCQkJCWdvdG8gb3V0OworCQkJfQogCQl9CisJCXJlYWRfdW5sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpIDwgaXBfc2V0X21heDsgaSsrKSB7CiAJCQlpZiAoaXBfc2V0X2xpc3RbaV0gIT0gTlVMTCkKIAkJCQlpcF9zZXRfZGVzdHJveV9zZXQoaSk7CiAJCX0KIAl9IGVsc2UgewogCQlpID0gZmluZF9zZXRfaWQobmxhX2RhdGEoYXR0cltJUFNFVF9BVFRSX1NFVE5BTUVdKSk7Ci0JCWlmIChpID09IElQU0VUX0lOVkFMSURfSUQpCi0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmlwX3NldF9saXN0W2ldLT5yZWYpKQotCQkJcmV0dXJuIC1JUFNFVF9FUlJfQlVTWTsKKwkJaWYgKGkgPT0gSVBTRVRfSU5WQUxJRF9JRCkgeworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKGlwX3NldF9saXN0W2ldLT5yZWYpIHsKKwkJCXJldCA9IC1JUFNFVF9FUlJfQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlYWRfdW5sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOwogCiAJCWlwX3NldF9kZXN0cm95X3NldChpKTsKIAl9CiAJcmV0dXJuIDA7CitvdXQ6CisJcmVhZF91bmxvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogLyogRmx1c2ggc2V0cyAqLwpAQCAtODM0LDYgKzg1MSw3IEBACiAJc3RydWN0IGlwX3NldCAqc2V0OwogCWNvbnN0IGNoYXIgKm5hbWUyOwogCWlwX3NldF9pZF90IGk7CisJaW50IHJldCA9IDA7CiAKIAlpZiAodW5saWtlbHkocHJvdG9jb2xfZmFpbGVkKGF0dHIpIHx8CiAJCSAgICAgYXR0cltJUFNFVF9BVFRSX1NFVE5BTUVdID09IE5VTEwgfHwKQEAgLTg0MywyNSArODYxLDMzIEBACiAJc2V0ID0gZmluZF9zZXQobmxhX2RhdGEoYXR0cltJUFNFVF9BVFRSX1NFVE5BTUVdKSk7CiAJaWYgKHNldCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoYXRvbWljX3JlYWQoJnNldC0+cmVmKSAhPSAwKQotCQlyZXR1cm4gLUlQU0VUX0VSUl9SRUZFUkVOQ0VEOworCisJcmVhZF9sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOworCWlmIChzZXQtPnJlZiAhPSAwKSB7CisJCXJldCA9IC1JUFNFVF9FUlJfUkVGRVJFTkNFRDsKKwkJZ290byBvdXQ7CisJfQogCiAJbmFtZTIgPSBubGFfZGF0YShhdHRyW0lQU0VUX0FUVFJfU0VUTkFNRTJdKTsKIAlmb3IgKGkgPSAwOyBpIDwgaXBfc2V0X21heDsgaSsrKSB7CiAJCWlmIChpcF9zZXRfbGlzdFtpXSAhPSBOVUxMICYmCi0JCSAgICBTVFJFUShpcF9zZXRfbGlzdFtpXS0+bmFtZSwgbmFtZTIpKQotCQkJcmV0dXJuIC1JUFNFVF9FUlJfRVhJU1RfU0VUTkFNRTI7CisJCSAgICBTVFJFUShpcF9zZXRfbGlzdFtpXS0+bmFtZSwgbmFtZTIpKSB7CisJCQlyZXQgPSAtSVBTRVRfRVJSX0VYSVNUX1NFVE5BTUUyOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAJc3RybmNweShzZXQtPm5hbWUsIG5hbWUyLCBJUFNFVF9NQVhOQU1FTEVOKTsKIAotCXJldHVybiAwOworb3V0OgorCXJlYWRfdW5sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIC8qIFN3YXAgdHdvIHNldHMgc28gdGhhdCBuYW1lL2luZGV4IHBvaW50cyB0byB0aGUgb3RoZXIuCiAgKiBSZWZlcmVuY2VzIGFuZCBzZXQgbmFtZXMgYXJlIGFsc28gc3dhcHBlZC4KICAqCi0gKiBXZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBuZm5sIG11dGV4IGFuZCByZWZlcmVuY2VzIGFyZQotICogbWFuaXB1bGF0ZWQgb25seSBieSBob2xkaW5nIHRoZSBtdXRleC4gVGhlIGtlcm5lbCBpbnRlcmZhY2VzCisgKiBUaGUgY29tbWFuZHMgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIG5mbmwgbXV0ZXggYW5kIHJlZmVyZW5jZXMgYXJlCisgKiBwcm90ZWN0ZWQgYnkgdGhlIGlwX3NldF9yZWZfbG9jay4gVGhlIGtlcm5lbCBpbnRlcmZhY2VzCiAgKiBkbyBub3QgaG9sZCB0aGUgbXV0ZXggYnV0IHRoZSBwb2ludGVyIHNldHRpbmdzIGFyZSBhdG9taWMKICAqIHNvIHRoZSBpcF9zZXRfbGlzdCBhbHdheXMgY29udGFpbnMgdmFsaWQgcG9pbnRlcnMgdG8gdGhlIHNldHMuCiAgKi8KQEAgLTg3NCw3ICs5MDAsNiBAQAogCXN0cnVjdCBpcF9zZXQgKmZyb20sICp0bzsKIAlpcF9zZXRfaWRfdCBmcm9tX2lkLCB0b19pZDsKIAljaGFyIGZyb21fbmFtZVtJUFNFVF9NQVhOQU1FTEVOXTsKLQl1MzIgZnJvbV9yZWY7CiAKIAlpZiAodW5saWtlbHkocHJvdG9jb2xfZmFpbGVkKGF0dHIpIHx8CiAJCSAgICAgYXR0cltJUFNFVF9BVFRSX1NFVE5BTUVdID09IE5VTEwgfHwKQEAgLTg5MywyMyArOTE4LDIxIEBACiAJdG8gPSBpcF9zZXRfbGlzdFt0b19pZF07CiAKIAkvKiBGZWF0dXJlcyBtdXN0IG5vdCBjaGFuZ2UuCi0JICogTm90IGFuIGFydGlmaWNhbCByZXN0cmljdGlvbiBhbnltb3JlLCBhcyB3ZSBtdXN0IHByZXZlbnQKKwkgKiBOb3QgYW4gYXJ0aWZpY2lhbCByZXN0cmljdGlvbiBhbnltb3JlLCBhcyB3ZSBtdXN0IHByZXZlbnQKIAkgKiBwb3NzaWJsZSBsb29wcyBjcmVhdGVkIGJ5IHN3YXBwaW5nIGluIHNldGxpc3QgdHlwZSBvZiBzZXRzLiAqLwogCWlmICghKGZyb20tPnR5cGUtPmZlYXR1cmVzID09IHRvLT50eXBlLT5mZWF0dXJlcyAmJgogCSAgICAgIGZyb20tPnR5cGUtPmZhbWlseSA9PSB0by0+dHlwZS0+ZmFtaWx5KSkKIAkJcmV0dXJuIC1JUFNFVF9FUlJfVFlQRV9NSVNNQVRDSDsKIAotCS8qIE5vIG1hZ2ljIGhlcmU6IHJlZiBtdW5naW5nIHByb3RlY3RlZCBieSB0aGUgbmZubF9sb2NrICovCiAJc3RybmNweShmcm9tX25hbWUsIGZyb20tPm5hbWUsIElQU0VUX01BWE5BTUVMRU4pOwotCWZyb21fcmVmID0gYXRvbWljX3JlYWQoJmZyb20tPnJlZik7Ci0KIAlzdHJuY3B5KGZyb20tPm5hbWUsIHRvLT5uYW1lLCBJUFNFVF9NQVhOQU1FTEVOKTsKLQlhdG9taWNfc2V0KCZmcm9tLT5yZWYsIGF0b21pY19yZWFkKCZ0by0+cmVmKSk7CiAJc3RybmNweSh0by0+bmFtZSwgZnJvbV9uYW1lLCBJUFNFVF9NQVhOQU1FTEVOKTsKLQlhdG9taWNfc2V0KCZ0by0+cmVmLCBmcm9tX3JlZik7CiAKKwl3cml0ZV9sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOworCXN3YXAoZnJvbS0+cmVmLCB0by0+cmVmKTsKIAlpcF9zZXRfbGlzdFtmcm9tX2lkXSA9IHRvOwogCWlwX3NldF9saXN0W3RvX2lkXSA9IGZyb207CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MjYsNyArOTQ5LDcgQEAKIHsKIAlpZiAoY2ItPmFyZ3NbMl0pIHsKIAkJcHJfZGVidWcoInJlbGVhc2Ugc2V0ICVzXG4iLCBpcF9zZXRfbGlzdFtjYi0+YXJnc1sxXV0tPm5hbWUpOwotCQlfX2lwX3NldF9wdXQoKGlwX3NldF9pZF90KSBjYi0+YXJnc1sxXSk7CisJCWlwX3NldF9wdXRfYnlpbmRleCgoaXBfc2V0X2lkX3QpIGNiLT5hcmdzWzFdKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC05OTksOCArMTAyMiw5IEBACiAJaWYgKGNiLT5hcmdzWzFdID49IGlwX3NldF9tYXgpCiAJCWdvdG8gb3V0OwogCi0JcHJfZGVidWcoImFyZ3NbMF06ICVsZCBhcmdzWzFdOiAlbGRcbiIsIGNiLT5hcmdzWzBdLCBjYi0+YXJnc1sxXSk7CiAJbWF4ID0gY2ItPmFyZ3NbMF0gPT0gRFVNUF9PTkUgPyBjYi0+YXJnc1sxXSArIDEgOiBpcF9zZXRfbWF4OworZHVtcF9sYXN0OgorCXByX2RlYnVnKCJhcmdzWzBdOiAlbGQgYXJnc1sxXTogJWxkXG4iLCBjYi0+YXJnc1swXSwgY2ItPmFyZ3NbMV0pOwogCWZvciAoOyBjYi0+YXJnc1sxXSA8IG1heDsgY2ItPmFyZ3NbMV0rKykgewogCQlpbmRleCA9IChpcF9zZXRfaWRfdCkgY2ItPmFyZ3NbMV07CiAJCXNldCA9IGlwX3NldF9saXN0W2luZGV4XTsKQEAgLTEwMTUsOCArMTAzOSw4IEBACiAJCSAqIHNvIHRoYXQgbGlzdHMgKHVuaW9ucyBvZiBzZXRzKSBhcmUgZHVtcGVkIGxhc3QuCiAJCSAqLwogCQlpZiAoY2ItPmFyZ3NbMF0gIT0gRFVNUF9PTkUgJiYKLQkJICAgICEoKGNiLT5hcmdzWzBdID09IERVTVBfQUxMKSBeCi0JCSAgICAgIChzZXQtPnR5cGUtPmZlYXR1cmVzICYgSVBTRVRfRFVNUF9MQVNUKSkpCisJCSAgICAoKGNiLT5hcmdzWzBdID09IERVTVBfQUxMKSA9PQorCQkgICAgICEhKHNldC0+dHlwZS0+ZmVhdHVyZXMgJiBJUFNFVF9EVU1QX0xBU1QpKSkKIAkJCWNvbnRpbnVlOwogCQlwcl9kZWJ1ZygiTGlzdCBzZXQ6ICVzXG4iLCBzZXQtPm5hbWUpOwogCQlpZiAoIWNiLT5hcmdzWzJdKSB7CkBAIC0xMDYwLDYgKzEwODQsMTIgQEAKIAkJCWdvdG8gcmVsZWFzZV9yZWZjb3VudDsKIAkJfQogCX0KKwkvKiBJZiB3ZSBkdW1wIGFsbCBzZXRzLCBjb250aW51ZSB3aXRoIGR1bXBpbmcgbGFzdCBvbmVzICovCisJaWYgKGNiLT5hcmdzWzBdID09IERVTVBfQUxMKSB7CisJCWNiLT5hcmdzWzBdID0gRFVNUF9MQVNUOworCQljYi0+YXJnc1sxXSA9IDA7CisJCWdvdG8gZHVtcF9sYXN0OworCX0KIAlnb3RvIG91dDsKIAogbmxhX3B1dF9mYWlsdXJlOgpAQCAtMTA2OCwxMyArMTA5OCw4IEBACiAJLyogSWYgdGhlcmUgd2FzIGFuIGVycm9yIG9yIHNldCBpcyBkb25lLCByZWxlYXNlIHNldCAqLwogCWlmIChyZXQgfHwgIWNiLT5hcmdzWzJdKSB7CiAJCXByX2RlYnVnKCJyZWxlYXNlIHNldCAlc1xuIiwgaXBfc2V0X2xpc3RbaW5kZXhdLT5uYW1lKTsKLQkJX19pcF9zZXRfcHV0KGluZGV4KTsKKwkJaXBfc2V0X3B1dF9ieWluZGV4KGluZGV4KTsKIAl9Ci0KLQkvKiBJZiB3ZSBkdW1wIGFsbCBzZXRzLCBjb250aW51ZSB3aXRoIGR1bXBpbmcgbGFzdCBvbmVzICovCi0JaWYgKGNiLT5hcmdzWzBdID09IERVTVBfQUxMICYmIGNiLT5hcmdzWzFdID49IG1heCAmJiAhY2ItPmFyZ3NbMl0pCi0JCWNiLT5hcmdzWzBdID0gRFVNUF9MQVNUOwotCiBvdXQ6CiAJaWYgKG5saCkgewogCQlubG1zZ19lbmQoc2tiLCBubGgpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKaW5kZXggYTQ3YzMyOS4uZTkxNTllOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCkBAIC00MywxNCArNDMsMTkgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNldF9lbGVtICoKIGxpc3Rfc2V0X2VsZW0oY29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAsIHUzMiBpZCkKIHsKLQlyZXR1cm4gKHN0cnVjdCBzZXRfZWxlbSAqKSgoY2hhciAqKW1hcC0+bWVtYmVycyArIGlkICogbWFwLT5kc2l6ZSk7CisJcmV0dXJuIChzdHJ1Y3Qgc2V0X2VsZW0gKikoKHZvaWQgKiltYXAtPm1lbWJlcnMgKyBpZCAqIG1hcC0+ZHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZXRfdGVsZW0gKgorbGlzdF9zZXRfdGVsZW0oY29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAsIHUzMiBpZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzZXRfdGVsZW0gKikoKHZvaWQgKiltYXAtPm1lbWJlcnMgKyBpZCAqIG1hcC0+ZHNpemUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wKIGxpc3Rfc2V0X3RpbWVvdXQoY29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAsIHUzMiBpZCkKIHsKLQljb25zdCBzdHJ1Y3Qgc2V0X3RlbGVtICplbGVtID0KLQkJKGNvbnN0IHN0cnVjdCBzZXRfdGVsZW0gKikgbGlzdF9zZXRfZWxlbShtYXAsIGlkKTsKKwljb25zdCBzdHJ1Y3Qgc2V0X3RlbGVtICplbGVtID0gbGlzdF9zZXRfdGVsZW0obWFwLCBpZCk7CiAKIAlyZXR1cm4gaXBfc2V0X3RpbWVvdXRfdGVzdChlbGVtLT50aW1lb3V0KTsKIH0KQEAgLTU4LDE5ICs2MywxMSBAQAogc3RhdGljIGlubGluZSBib29sCiBsaXN0X3NldF9leHBpcmVkKGNvbnN0IHN0cnVjdCBsaXN0X3NldCAqbWFwLCB1MzIgaWQpCiB7Ci0JY29uc3Qgc3RydWN0IHNldF90ZWxlbSAqZWxlbSA9Ci0JCShjb25zdCBzdHJ1Y3Qgc2V0X3RlbGVtICopIGxpc3Rfc2V0X2VsZW0obWFwLCBpZCk7CisJY29uc3Qgc3RydWN0IHNldF90ZWxlbSAqZWxlbSA9IGxpc3Rfc2V0X3RlbGVtKG1hcCwgaWQpOwogCiAJcmV0dXJuIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZWxlbS0+dGltZW91dCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1saXN0X3NldF9leGlzdChjb25zdCBzdHJ1Y3Qgc2V0X3RlbGVtICplbGVtKQotewotCXJldHVybiBlbGVtLT5pZCAhPSBJUFNFVF9JTlZBTElEX0lEICYmCi0JICAgICAgICFpcF9zZXRfdGltZW91dF9leHBpcmVkKGVsZW0tPnRpbWVvdXQpOwotfQotCiAvKiBTZXQgbGlzdCB3aXRob3V0IGFuZCB3aXRoIHRpbWVvdXQgKi8KIAogc3RhdGljIGludApAQCAtMTQ2LDExICsxNDMsMTEgQEAKIAlzdHJ1Y3Qgc2V0X3RlbGVtICplOwogCiAJZm9yICg7IGkgPCBtYXAtPnNpemU7IGkrKykgewotCQllID0gKHN0cnVjdCBzZXRfdGVsZW0gKilsaXN0X3NldF9lbGVtKG1hcCwgaSk7CisJCWUgPSBsaXN0X3NldF90ZWxlbShtYXAsIGkpOwogCQlzd2FwKGUtPmlkLCBpZCk7CisJCXN3YXAoZS0+dGltZW91dCwgdGltZW91dCk7CiAJCWlmIChlLT5pZCA9PSBJUFNFVF9JTlZBTElEX0lEKQogCQkJYnJlYWs7Ci0JCXN3YXAoZS0+dGltZW91dCwgdGltZW91dCk7CiAJfQogfQogCkBAIC0xNjQsNyArMTYxLDcgQEAKIAkJLyogTGFzdCBlbGVtZW50IHJlcGxhY2VkOiBlLmcuIGFkZCBuZXcsYmVmb3JlLGxhc3QgKi8KIAkJaXBfc2V0X3B1dF9ieWluZGV4KGUtPmlkKTsKIAlpZiAod2l0aF90aW1lb3V0KG1hcC0+dGltZW91dCkpCi0JCWxpc3RfZWxlbV90YWRkKG1hcCwgaSwgaWQsIHRpbWVvdXQpOworCQlsaXN0X2VsZW1fdGFkZChtYXAsIGksIGlkLCBpcF9zZXRfdGltZW91dF9zZXQodGltZW91dCkpOwogCWVsc2UKIAkJbGlzdF9lbGVtX2FkZChtYXAsIGksIGlkKTsKIApAQCAtMTcyLDExICsxNjksMTEgQEAKIH0KIAogc3RhdGljIGludAotbGlzdF9zZXRfZGVsKHN0cnVjdCBsaXN0X3NldCAqbWFwLCBpcF9zZXRfaWRfdCBpZCwgdTMyIGkpCitsaXN0X3NldF9kZWwoc3RydWN0IGxpc3Rfc2V0ICptYXAsIHUzMiBpKQogewogCXN0cnVjdCBzZXRfZWxlbSAqYSA9IGxpc3Rfc2V0X2VsZW0obWFwLCBpKSwgKmI7CiAKLQlpcF9zZXRfcHV0X2J5aW5kZXgoaWQpOworCWlwX3NldF9wdXRfYnlpbmRleChhLT5pZCk7CiAKIAlmb3IgKDsgaSA8IG1hcC0+c2l6ZSAtIDE7IGkrKykgewogCQliID0gbGlzdF9zZXRfZWxlbShtYXAsIGkgKyAxKTsKQEAgLTMwOCwxMSArMzA1LDExIEBACiAJCQkJIChiZWZvcmUgPT0gMCB8fAogCQkJCSAgKGJlZm9yZSA+IDAgJiYKIAkJCQkgICBuZXh0X2lkX2VxKG1hcCwgaSwgcmVmaWQpKSkpCi0JCQkJcmV0ID0gbGlzdF9zZXRfZGVsKG1hcCwgaWQsIGkpOworCQkJCXJldCA9IGxpc3Rfc2V0X2RlbChtYXAsIGkpOwogCQkJZWxzZSBpZiAoYmVmb3JlIDwgMCAmJgogCQkJCSBlbGVtLT5pZCA9PSByZWZpZCAmJgogCQkJCSBuZXh0X2lkX2VxKG1hcCwgaSwgaWQpKQotCQkJCXJldCA9IGxpc3Rfc2V0X2RlbChtYXAsIGlkLCBpICsgMSk7CisJCQkJcmV0ID0gbGlzdF9zZXRfZGVsKG1hcCwgaSArIDEpOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zNjksOCArMzY2LDcgQEAKIAlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9TSVpFLCBodG9ubChtYXAtPnNpemUpKTsKIAlpZiAod2l0aF90aW1lb3V0KG1hcC0+dGltZW91dCkpCiAJCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX1RJTUVPVVQsIGh0b25sKG1hcC0+dGltZW91dCkpOwotCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsCi0JCSAgICAgIGh0b25sKGF0b21pY19yZWFkKCZzZXQtPnJlZikgLSAxKSk7CisJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywgaHRvbmwoc2V0LT5yZWYgLSAxKSk7CiAJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfTUVNU0laRSwKIAkJICAgICAgaHRvbmwoc2l6ZW9mKCptYXApICsgbWFwLT5zaXplICogbWFwLT5kc2l6ZSkpOwogCWlwc2V0X25lc3RfZW5kKHNrYiwgbmVzdGVkKTsKQEAgLTQ2MSwxNiArNDU3LDEzIEBACiAJc3RydWN0IHNldF90ZWxlbSAqZTsKIAl1MzIgaTsKIAotCS8qIFdlIHJ1biBwYXJhbGxlbCB3aXRoIG90aGVyIHJlYWRlcnMgKHRlc3QgZWxlbWVudCkKLQkgKiBidXQgYWRkaW5nL2RlbGV0aW5nIG5ldyBlbnRyaWVzIGlzIGxvY2tlZCBvdXQgKi8KLQlyZWFkX2xvY2tfYmgoJnNldC0+bG9jayk7Ci0JZm9yIChpID0gbWFwLT5zaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJZSA9IChzdHJ1Y3Qgc2V0X3RlbGVtICopIGxpc3Rfc2V0X2VsZW0obWFwLCBpKTsKLQkJaWYgKGUtPmlkICE9IElQU0VUX0lOVkFMSURfSUQgJiYKLQkJICAgIGxpc3Rfc2V0X2V4cGlyZWQobWFwLCBpKSkKLQkJCWxpc3Rfc2V0X2RlbChtYXAsIGUtPmlkLCBpKTsKKwl3cml0ZV9sb2NrX2JoKCZzZXQtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBtYXAtPnNpemU7IGkrKykgeworCQllID0gbGlzdF9zZXRfdGVsZW0obWFwLCBpKTsKKwkJaWYgKGUtPmlkICE9IElQU0VUX0lOVkFMSURfSUQgJiYgbGlzdF9zZXRfZXhwaXJlZChtYXAsIGkpKQorCQkJbGlzdF9zZXRfZGVsKG1hcCwgaSk7CiAJfQotCXJlYWRfdW5sb2NrX2JoKCZzZXQtPmxvY2spOworCXdyaXRlX3VubG9ja19iaCgmc2V0LT5sb2NrKTsKIAogCW1hcC0+Z2MuZXhwaXJlcyA9IGppZmZpZXMgKyBJUFNFVF9HQ19QRVJJT0QobWFwLT50aW1lb3V0KSAqIEhaOwogCWFkZF90aW1lcigmbWFwLT5nYyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggMmRjNmRlMS4uMDU5YWYzMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwpAQCAtNTcyLDExICs1NzIsMTEgQEAKIAkub3BlbgkgPSBpcF92c19hcHBfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKICNlbmRpZgogCi1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19hcHBfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2FwcF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CiAKQEAgLTU4NSwyNiArNTg1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgX19pcF92c19hcHBfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgX19pcF92c19hcHBfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX3ZzX2FwcCIpOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwX3ZzX2FwcF9vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX2FwcF9pbml0LAotCS5leGl0ID0gX19pcF92c19hcHBfY2xlYW51cCwKLX07Ci0KIGludCBfX2luaXQgaXBfdnNfYXBwX2luaXQodm9pZCkKIHsKLQlpbnQgcnY7Ci0KLQlydiA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3ZzX2FwcF9vcHMpOwotCXJldHVybiBydjsKKwlyZXR1cm4gMDsKIH0KIAogCiB2b2lkIGlwX3ZzX2FwcF9jbGVhbnVwKHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF92c19hcHBfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCmluZGV4IGYyODkzMDYuLmJmMjhhYzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAJCQlhdG9taWNfaW5jKCZkZXN0LT5pbmFjdGNvbm5zKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gaW5jcmVhc2UKLQkJICAgdGhlIHBlcmlzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi8KKwkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCiAJCWF0b21pY19pbmMoJmRlc3QtPnBlcnNpc3Rjb25ucyk7CiAJfQogCkBAIC02NTcsNyArNjU3LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBkZWNyZWFzZQotCQkgICB0aGUgcGVyaXN0ZW50IGNvbm5lY3Rpb24gY291bnRlciAqLworCQkgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi8KIAkJYXRvbWljX2RlYygmZGVzdC0+cGVyc2lzdGNvbm5zKTsKIAl9CiAKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAJLm9wZW4gICAgPSBpcF92c19jb25uX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmlwX3ZzX29yaWdpbl9uYW1lKHVuc2lnbmVkIGZsYWdzKQpAQCAtMTExNCw3ICsxMTE0LDcgQEAKIAkub3BlbiAgICA9IGlwX3ZzX2Nvbm5fc3luY19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKICNlbmRpZgpAQCAtMTI1OCwyMiArMTI1OCwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfY29ubl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2Nvbm5fY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJLyogZmx1c2ggYWxsIHRoZSBjb25uZWN0aW9uIGVudHJpZXMgZmlyc3QgKi8KIAlpcF92c19jb25uX2ZsdXNoKG5ldCk7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX3ZzX2Nvbm4iKTsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfdnNfY29ubl9zeW5jIik7CiB9Ci1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfY29ubl9vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX2Nvbm5faW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfY29ubl9jbGVhbnVwLAotfTsKIAogaW50IF9faW5pdCBpcF92c19jb25uX2luaXQodm9pZCkKIHsKIAlpbnQgaWR4OwotCWludCByZXRjOwogCiAJLyogQ29tcHV0ZSBzaXplIGFuZCBtYXNrICovCiAJaXBfdnNfY29ubl90YWJfc2l6ZSA9IDEgPDwgaXBfdnNfY29ubl90YWJfYml0czsKQEAgLTEzMDksMTcgKzEzMDQsMTQgQEAKIAkJcndsb2NrX2luaXQoJl9faXBfdnNfY29ubnRibF9sb2NrX2FycmF5W2lkeF0ubCk7CiAJfQogCi0JcmV0YyA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29ubl9vcHMpOwotCiAJLyogY2FsY3VsYXRlIHRoZSByYW5kb20gdmFsdWUgZm9yIGNvbm5lY3Rpb24gaGFzaCAqLwogCWdldF9yYW5kb21fYnl0ZXMoJmlwX3ZzX2Nvbm5fcm5kLCBzaXplb2YoaXBfdnNfY29ubl9ybmQpKTsKIAotCXJldHVybiByZXRjOworCXJldHVybiAwOwogfQogCiB2b2lkIGlwX3ZzX2Nvbm5fY2xlYW51cCh2b2lkKQogewotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb25uX29wcyk7CiAJLyogUmVsZWFzZSB0aGUgZW1wdHkgY2FjaGUgKi8KIAlrbWVtX2NhY2hlX2Rlc3Ryb3koaXBfdnNfY29ubl9jYWNoZXApOwogCXZmcmVlKGlwX3ZzX2Nvbm5fdGFiKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDA3YWNjZjYuLmE3NGRhZTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTExMyw2ICsxMTEzLDkgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwlpZiAoIW5ldF9pcHZzKG5ldCktPmVuYWJsZSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCWlmIChhZiA9PSBBRl9JTkVUNikgewpAQCAtMTM0Myw2ICsxMzQ2LDcgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAKIAluZXQgPSBza2JfbmV0KHNrYik7CisKIAlwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KG5ldCwgY2loLT5wcm90b2NvbCk7CiAJaWYgKCFwZCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTE1MjksNiArMTUzMywxMSBAQAogCQkJICAgICAgSVBfVlNfREJHX0FERFIoYWYsICZpcGguZGFkZHIpLCBob29rbnVtKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CisJLyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqLworCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwlpZiAoIW5ldF9pcHZzKG5ldCktPmVuYWJsZSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKIAogCS8qIEJhZC4uLiBEbyBub3QgYnJlYWsgcmF3IHNvY2tldHMgKi8KQEAgLTE1NjIsNyArMTU3MSw2IEBACiAJCQlpcF92c19maWxsX2lwaGRyKGFmLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgJmlwaCk7CiAJCX0KIAotCW5ldCA9IHNrYl9uZXQoc2tiKTsKIAkvKiBQcm90b2NvbCBzdXBwb3J0ZWQ/ICovCiAJcGQgPSBpcF92c19wcm90b19kYXRhX2dldChuZXQsIGlwaC5wcm90b2NvbCk7CiAJaWYgKHVubGlrZWx5KCFwZCkpCkBAIC0xNTg4LDcgKzE1OTYsNiBAQAogCX0KIAogCUlQX1ZTX0RCR19QS1QoMTEsIGFmLCBwcCwgc2tiLCAwLCAiSW5jb21pbmcgcGFja2V0Iik7Ci0JbmV0ID0gc2tiX25ldChza2IpOwogCWlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCS8qIENoZWNrIHRoZSBzZXJ2ZXIgc3RhdHVzICovCiAJaWYgKGNwLT5kZXN0ICYmICEoY3AtPmRlc3QtPmZsYWdzICYgSVBfVlNfREVTVF9GX0FWQUlMQUJMRSkpIHsKQEAgLTE3NDMsMTAgKzE3NTAsMTYgQEAKIAkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CiAJaW50IHI7CisJc3RydWN0IG5ldCAqbmV0OwogCiAJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVApCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKKwkvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovCisJbmV0ID0gc2tiX25ldChza2IpOworCWlmICghbmV0X2lwdnMobmV0KS0+ZW5hYmxlKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCiAJcmV0dXJuIGlwX3ZzX2luX2ljbXAoc2tiLCAmciwgaG9va251bSk7CiB9CiAKQEAgLTE3NTcsMTAgKzE3NzAsMTYgQEAKIAkJICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CiAJaW50IHI7CisJc3RydWN0IG5ldCAqbmV0OwogCiAJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgIT0gSVBQUk9UT19JQ01QVjYpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKKwkvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovCisJbmV0ID0gc2tiX25ldChza2IpOworCWlmICghbmV0X2lwdnMobmV0KS0+ZW5hYmxlKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCiAJcmV0dXJuIGlwX3ZzX2luX2ljbXBfdjYoc2tiLCAmciwgaG9va251bSk7CiB9CiAjZW5kaWYKQEAgLTE4ODQsMTkgKzE5MDMsNzAgQEAKIAkJcHJfZXJyKCIlcygpOiBubyBtZW1vcnkuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwkvKiBIb2xkIHRoZSBiZWFzdCB1bnRpbCBhIHNlcnZpY2UgaXMgcmVnaXN0ZXJkICovCisJaXB2cy0+ZW5hYmxlID0gMDsKIAlpcHZzLT5uZXQgPSBuZXQ7CiAJLyogQ291bnRlcnMgdXNlZCBmb3IgY3JlYXRpbmcgdW5pcXVlIG5hbWVzICovCiAJaXB2cy0+Z2VuID0gYXRvbWljX3JlYWQoJmlwdnNfbmV0bnNfY250KTsKIAlhdG9taWNfaW5jKCZpcHZzX25ldG5zX2NudCk7CiAJbmV0LT5pcHZzID0gaXB2czsKKworCWlmIChfX2lwX3ZzX2VzdGltYXRvcl9pbml0KG5ldCkgPCAwKQorCQlnb3RvIGVzdGltYXRvcl9mYWlsOworCisJaWYgKF9faXBfdnNfY29udHJvbF9pbml0KG5ldCkgPCAwKQorCQlnb3RvIGNvbnRyb2xfZmFpbDsKKworCWlmIChfX2lwX3ZzX3Byb3RvY29sX2luaXQobmV0KSA8IDApCisJCWdvdG8gcHJvdG9jb2xfZmFpbDsKKworCWlmIChfX2lwX3ZzX2FwcF9pbml0KG5ldCkgPCAwKQorCQlnb3RvIGFwcF9mYWlsOworCisJaWYgKF9faXBfdnNfY29ubl9pbml0KG5ldCkgPCAwKQorCQlnb3RvIGNvbm5fZmFpbDsKKworCWlmIChfX2lwX3ZzX3N5bmNfaW5pdChuZXQpIDwgMCkKKwkJZ290byBzeW5jX2ZhaWw7CisKIAlwcmludGsoS0VSTl9JTkZPICJJUFZTOiBDcmVhdGluZyBuZXRucyBzaXplPSV6dSBpZD0lZFxuIiwKIAkJCSBzaXplb2Yoc3RydWN0IG5ldG5zX2lwdnMpLCBpcHZzLT5nZW4pOwogCXJldHVybiAwOworLyoKKyAqIEVycm9yIGhhbmRsaW5nCisgKi8KKworc3luY19mYWlsOgorCV9faXBfdnNfY29ubl9jbGVhbnVwKG5ldCk7Citjb25uX2ZhaWw6CisJX19pcF92c19hcHBfY2xlYW51cChuZXQpOworYXBwX2ZhaWw6CisJX19pcF92c19wcm90b2NvbF9jbGVhbnVwKG5ldCk7Citwcm90b2NvbF9mYWlsOgorCV9faXBfdnNfY29udHJvbF9jbGVhbnVwKG5ldCk7Citjb250cm9sX2ZhaWw6CisJX19pcF92c19lc3RpbWF0b3JfY2xlYW51cChuZXQpOworZXN0aW1hdG9yX2ZhaWw6CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgX19pcF92c19jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlJUF9WU19EQkcoMTAsICJpcHZzIG5ldG5zICVkIHJlbGVhc2VkXG4iLCBuZXRfaXB2cyhuZXQpLT5nZW4pOworCV9faXBfdnNfc2VydmljZV9jbGVhbnVwKG5ldCk7CS8qIGlwX3ZzX2ZsdXNoKCkgd2l0aCBsb2NrcyAqLworCV9faXBfdnNfY29ubl9jbGVhbnVwKG5ldCk7CisJX19pcF92c19hcHBfY2xlYW51cChuZXQpOworCV9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChuZXQpOworCV9faXBfdnNfY29udHJvbF9jbGVhbnVwKG5ldCk7CisJX19pcF92c19lc3RpbWF0b3JfY2xlYW51cChuZXQpOworCUlQX1ZTX0RCRygyLCAiaXB2cyBuZXRucyAlZCByZWxlYXNlZFxuIiwgbmV0X2lwdnMobmV0KS0+Z2VuKTsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2Rldl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlFbnRlckZ1bmN0aW9uKDIpOworCW5ldF9pcHZzKG5ldCktPmVuYWJsZSA9IDA7CS8qIERpc2FibGUgcGFja2V0IHJlY2VwdGlvbiAqLworCV9faXBfdnNfc3luY19jbGVhbnVwKG5ldCk7CisJTGVhdmVGdW5jdGlvbigyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHZzX2NvcmVfb3BzID0gewpAQCAtMTkwNiw2ICsxOTc2LDEwIEBACiAJLnNpemUgPSBzaXplb2Yoc3RydWN0IG5ldG5zX2lwdnMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHZzX2NvcmVfZGV2X29wcyA9IHsKKwkuZXhpdCA9IF9faXBfdnNfZGV2X2NsZWFudXAsCit9OworCiAvKgogICoJSW5pdGlhbGl6ZSBJUCBWaXJ0dWFsIFNlcnZlcgogICovCkBAIC0xOTEzLDEwICsxOTg3LDYgQEAKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CS8qIEFsbG9jIGlwX3ZzIHN0cnVjdCAqLwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJaXBfdnNfZXN0aW1hdG9yX2luaXQoKTsKIAlyZXQgPSBpcF92c19jb250cm9sX2luaXQoKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTk0NCwxNSArMjAxNCwyOCBAQAogCQlnb3RvIGNsZWFudXBfY29ubjsKIAl9CiAKKwlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvcmVfb3BzKTsJLyogQWxsb2MgaXBfdnMgc3RydWN0ICovCisJaWYgKHJldCA8IDApCisJCWdvdG8gY2xlYW51cF9zeW5jOworCisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXB2c19jb3JlX2Rldl9vcHMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfc3ViOworCiAJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXBfdnNfb3BzLCBBUlJBWV9TSVpFKGlwX3ZzX29wcykpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByX2VycigiY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKLQkJZ290byBjbGVhbnVwX3N5bmM7CisJCWdvdG8gY2xlYW51cF9kZXY7CiAJfQogCiAJcHJfaW5mbygiaXB2cyBsb2FkZWQuXG4iKTsKKwogCXJldHVybiByZXQ7CiAKK2NsZWFudXBfZGV2OgorCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXB2c19jb3JlX2Rldl9vcHMpOworY2xlYW51cF9zdWI6CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvcmVfb3BzKTsKIGNsZWFudXBfc3luYzoKIAlpcF92c19zeW5jX2NsZWFudXAoKTsKICAgY2xlYW51cF9jb25uOgpAQCAtMTk2NCwyMCArMjA0NywyMCBAQAogCWlwX3ZzX2NvbnRyb2xfY2xlYW51cCgpOwogICBjbGVhbnVwX2VzdGltYXRvcjoKIAlpcF92c19lc3RpbWF0b3JfY2xlYW51cCgpOwotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CS8qIGZyZWUgaXBfdnMgc3RydWN0ICovCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwX3ZzX2NsZWFudXAodm9pZCkKIHsKIAluZl91bnJlZ2lzdGVyX2hvb2tzKGlwX3ZzX29wcywgQVJSQVlfU0laRShpcF92c19vcHMpKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwdnNfY29yZV9kZXZfb3BzKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwkvKiBmcmVlIGlwX3ZzIHN0cnVjdCAqLwogCWlwX3ZzX3N5bmNfY2xlYW51cCgpOwogCWlwX3ZzX2Nvbm5fY2xlYW51cCgpOwogCWlwX3ZzX2FwcF9jbGVhbnVwKCk7CiAJaXBfdnNfcHJvdG9jb2xfY2xlYW51cCgpOwogCWlwX3ZzX2NvbnRyb2xfY2xlYW51cCgpOwogCWlwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKCk7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvcmVfb3BzKTsJLyogZnJlZSBpcF92cyBzdHJ1Y3QgKi8KIAlwcl9pbmZvKCJpcHZzIHVubG9hZGVkLlxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwppbmRleCAzMzczM2M4Li4zNzg5MGYyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCkBAIC02OSw2ICs2OSwxMSBAQAogfQogI2VuZGlmCiAKKworLyogIFByb3RvcyAqLworc3RhdGljIHZvaWQgX19pcF92c19kZWxfc2VydmljZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKTsKKworCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIC8qIFRha2VuIGZyb20gcnQ2X2ZpbGxfbm9kZSgpIGluIG5ldC9pcHY2L3JvdXRlLmMsIGlzIHRoZXJlIGEgYmV0dGVyIHdheT8gKi8KIHN0YXRpYyBpbnQgX19pcF92c19hZGRyX2lzX2xvY2FsX3Y2KHN0cnVjdCBuZXQgKm5ldCwKQEAgLTEyMTQsNiArMTIxOSw4IEBACiAJd3JpdGVfdW5sb2NrX2JoKCZfX2lwX3ZzX3N2Y19sb2NrKTsKIAogCSpzdmNfcCA9IHN2YzsKKwkvKiBOb3cgdGhlcmUgaXMgYSBzZXJ2aWNlIC0gZnVsbCB0aHJvdHRsZSAqLworCWlwdnMtPmVuYWJsZSA9IDE7CiAJcmV0dXJuIDA7CiAKIApAQCAtMTQ3Miw2ICsxNDc5LDg0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKglEZWxldGUgc2VydmljZSBieSB7bmV0bnN9IGluIHRoZSBzZXJ2aWNlIHRhYmxlLgorICoJQ2FsbGVkIGJ5IF9faXBfdnNfY2xlYW51cCgpCisgKi8KK3ZvaWQgX19pcF92c19zZXJ2aWNlX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQoreworCUVudGVyRnVuY3Rpb24oMik7CisJLyogQ2hlY2sgZm9yICJmdWxsIiBhZGRyZXNzZWQgZW50cmllcyAqLworCW11dGV4X2xvY2soJl9faXBfdnNfbXV0ZXgpOworCWlwX3ZzX2ZsdXNoKG5ldCk7CisJbXV0ZXhfdW5sb2NrKCZfX2lwX3ZzX211dGV4KTsKKwlMZWF2ZUZ1bmN0aW9uKDIpOworfQorLyoKKyAqIFJlbGVhc2UgZHN0IGhvbGQgYnkgZHN0X2NhY2hlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19pcF92c19kZXZfcmVzZXQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2JoKCZkZXN0LT5kc3RfbG9jayk7CisJaWYgKGRlc3QtPmRzdF9jYWNoZSAmJiBkZXN0LT5kc3RfY2FjaGUtPmRldiA9PSBkZXYpIHsKKwkJSVBfVlNfREJHX0JVRigzLCAiUmVzZXQgZGV2OiVzIGRlc3QgJXM6JXUgLGRlc3QtPnJlZmNudD0lZFxuIiwKKwkJCSAgICAgIGRldi0+bmFtZSwKKwkJCSAgICAgIElQX1ZTX0RCR19BRERSKGRlc3QtPmFmLCAmZGVzdC0+YWRkciksCisJCQkgICAgICBudG9ocyhkZXN0LT5wb3J0KSwKKwkJCSAgICAgIGF0b21pY19yZWFkKCZkZXN0LT5yZWZjbnQpKTsKKwkJaXBfdnNfZHN0X3Jlc2V0KGRlc3QpOworCX0KKwlzcGluX3VubG9ja19iaCgmZGVzdC0+ZHN0X2xvY2spOworCit9CisvKgorICogTmV0ZGV2IGV2ZW50IHJlY2VpdmVyCisgKiBDdXJyZW50bHkgb25seSBORVRERVZfVU5SRUdJU1RFUiBpcyBoYW5kbGVkLCBpLmUuIGlmIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8KKyAqIGEgZGV2aWNlIHRoYXQgaXMgInVucmVnaXN0ZXIiIGl0IG11c3QgYmUgcmVsZWFzZWQuCisgKi8KK3N0YXRpYyBpbnQgaXBfdnNfZHN0X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJCSAgICB2b2lkICpwdHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisJc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YzsKKwlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDsKKwl1bnNpZ25lZCBpbnQgaWR4OworCisJaWYgKGV2ZW50ICE9IE5FVERFVl9VTlJFR0lTVEVSKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJSVBfVlNfREJHKDMsICIlcygpIGRldj0lc1xuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7CisJRW50ZXJGdW5jdGlvbigyKTsKKwltdXRleF9sb2NrKCZfX2lwX3ZzX211dGV4KTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IElQX1ZTX1NWQ19UQUJfU0laRTsgaWR4KyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdmMsICZpcF92c19zdmNfdGFibGVbaWR4XSwgc19saXN0KSB7CisJCQlpZiAobmV0X2VxKHN2Yy0+bmV0LCBuZXQpKSB7CisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXN0LCAmc3ZjLT5kZXN0aW5hdGlvbnMsCisJCQkJCQkgICAgbl9saXN0KSB7CisJCQkJCV9faXBfdnNfZGV2X3Jlc2V0KGRlc3QsIGRldik7CisJCQkJfQorCQkJfQorCQl9CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdmMsICZpcF92c19zdmNfZndtX3RhYmxlW2lkeF0sIGZfbGlzdCkgeworCQkJaWYgKG5ldF9lcShzdmMtPm5ldCwgbmV0KSkgeworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzdCwgJnN2Yy0+ZGVzdGluYXRpb25zLAorCQkJCQkJICAgIG5fbGlzdCkgeworCQkJCQlfX2lwX3ZzX2Rldl9yZXNldChkZXN0LCBkZXYpOworCQkJCX0KKwkJCX0KKworCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXN0LCAmbmV0X2lwdnMobmV0KS0+ZGVzdF90cmFzaCwgbl9saXN0KSB7CisJCV9faXBfdnNfZGV2X3Jlc2V0KGRlc3QsIGRldik7CisJfQorCW11dGV4X3VubG9jaygmX19pcF92c19tdXRleCk7CisJTGVhdmVGdW5jdGlvbigyKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CiAKIC8qCiAgKglaZXJvIGNvdW50ZXJzIGluIGEgc2VydmljZSBvciBhbGwgc2VydmljZXMKQEAgLTE5ODEsNyArMjA2Niw3IEBACiAJLm9wZW4gICAgPSBpcF92c19pbmZvX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCiAjZW5kaWYKQEAgLTIwMjQsNyArMjEwOSw3IEBACiAJLm9wZW4gPSBpcF92c19zdGF0c19zZXFfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAKIHN0YXRpYyBpbnQgaXBfdnNfc3RhdHNfcGVyY3B1X3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0yMDkzLDcgKzIxNzgsNyBAQAogCS5vcGVuID0gaXBfdnNfc3RhdHNfcGVyY3B1X3NlcV9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2VfbmV0LAogfTsKICNlbmRpZgogCkBAIC0zMTIwLDcgKzMyMDUsNyBAQAogc3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGFlbW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2JfbmV0KHNrYik7CisJc3RydWN0IG5ldCAqbmV0ID0gc2tiX3NrbmV0KHNrYik7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCiAJbXV0ZXhfbG9jaygmX19pcF92c19tdXRleCk7CkBAIC0zNTg4LDYgKzM2NzMsMTAgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXBfdnNfZHN0X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gaXBfdnNfZHN0X2V2ZW50LAorfTsKKwogaW50IF9fbmV0X2luaXQgX19pcF92c19jb250cm9sX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCWludCBpZHg7CkBAIC0zNjI2LDcgKzM3MTUsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfY29udHJvbF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCkBAIC0zNjM5LDExICszNzI4LDYgQEAKIAlmcmVlX3BlcmNwdShpcHZzLT50b3Rfc3RhdHMuY3B1c3RhdHMpOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfY29udHJvbF9vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX2NvbnRyb2xfaW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfY29udHJvbF9jbGVhbnVwLAotfTsKLQogaW50IF9faW5pdCBpcF92c19jb250cm9sX2luaXQodm9pZCkKIHsKIAlpbnQgaWR4OwpAQCAtMzY1NywzMyArMzc0MSwzMiBAQAogCQlJTklUX0xJU1RfSEVBRCgmaXBfdnNfc3ZjX2Z3bV90YWJsZVtpZHhdKTsKIAl9CiAKLQlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvbnRyb2xfb3BzKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIG5hbWVzcGFjZS5cbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KIAlzbXBfd21iKCk7CS8qIERvIHdlIHJlYWxseSBuZWVkIGl0IG5vdyA/ICovCiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoImNhbm5vdCByZWdpc3RlciBzb2Nrb3B0LlxuIik7Ci0JCWdvdG8gZXJyX25ldDsKKwkJZ290byBlcnJfc29jazsKIAl9CiAKIAlyZXQgPSBpcF92c19nZW5sX3JlZ2lzdGVyKCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoImNhbm5vdCByZWdpc3RlciBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlLlxuIik7Ci0JCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmaXBfdnNfc29ja29wdHMpOwotCQlnb3RvIGVycl9uZXQ7CisJCWdvdG8gZXJyX2dlbmw7CiAJfQogCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF92c19kc3Rfbm90aWZpZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9ub3RmOworCiAJTGVhdmVGdW5jdGlvbigyKTsKIAlyZXR1cm4gMDsKIAotZXJyX25ldDoKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29udHJvbF9vcHMpOwotZXJyOgorZXJyX25vdGY6CisJaXBfdnNfZ2VubF91bnJlZ2lzdGVyKCk7CitlcnJfZ2VubDoKKwluZl91bnJlZ2lzdGVyX3NvY2tvcHQoJmlwX3ZzX3NvY2tvcHRzKTsKK2Vycl9zb2NrOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM2OTEsNyArMzc3NCw2IEBACiB2b2lkIGlwX3ZzX2NvbnRyb2xfY2xlYW51cCh2b2lkKQogewogCUVudGVyRnVuY3Rpb24oMik7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvbnRyb2xfb3BzKTsKIAlpcF92c19nZW5sX3VucmVnaXN0ZXIoKTsKIAluZl91bnJlZ2lzdGVyX3NvY2tvcHQoJmlwX3ZzX3NvY2tvcHRzKTsKIAlMZWF2ZUZ1bmN0aW9uKDIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCmluZGV4IDhjODc2NmMuLjUwOGNjZTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWRzdC0+b3V0YnBzID0gKGUtPm91dGJwcyArIDB4RikgPj4gNTsKIH0KIAotc3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfZXN0aW1hdG9yX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgX19pcF92c19lc3RpbWF0b3JfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCkBAIC0yMDMsMjQgKzIwMywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfZXN0aW1hdG9yX2V4aXQoc3RydWN0IG5ldCAqbmV0KQordm9pZCBfX25ldF9leGl0IF9faXBfdnNfZXN0aW1hdG9yX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewogCWRlbF90aW1lcl9zeW5jKCZuZXRfaXB2cyhuZXQpLT5lc3RfdGltZXIpOwogfQotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF92c19hcHBfb3BzID0gewotCS5pbml0ID0gX19pcF92c19lc3RpbWF0b3JfaW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfZXN0aW1hdG9yX2V4aXQsCi19OwogCiBpbnQgX19pbml0IGlwX3ZzX2VzdGltYXRvcl9pbml0KHZvaWQpCiB7Ci0JaW50IHJ2OwotCi0JcnYgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF92c19hcHBfb3BzKTsKLQlyZXR1cm4gcnY7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgaXBfdnNfZXN0aW1hdG9yX2NsZWFudXAodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3ZzX2FwcF9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKaW5kZXggZjI3NmRmOS4uODdlNDBlYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIHsKIAlsaXN0X2RlbCgmZW4tPmxpc3QpOwogCS8qCi0JICogV2UgZG9uJ3Qga2ZyZWUgZGVzdCBiZWNhdXNlIGl0IGlzIHJlZmVyZWQgZWl0aGVyIGJ5IGl0cyBzZXJ2aWNlCisJICogV2UgZG9uJ3Qga2ZyZWUgZGVzdCBiZWNhdXNlIGl0IGlzIHJlZmVycmVkIGVpdGhlciBieSBpdHMgc2VydmljZQogCSAqIG9yIHRoZSB0cmFzaCBkZXN0IGxpc3QuCiAJICovCiAJYXRvbWljX2RlYygmZW4tPmRlc3QtPnJlZmNudCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jCmluZGV4IGNiMWM5OTEuLjkwZjYxOGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAl3cml0ZV9sb2NrKCZzZXQtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBlcCwgJnNldC0+bGlzdCwgbGlzdCkgewogCQkvKgotCQkgKiBXZSBkb24ndCBrZnJlZSBkZXN0IGJlY2F1c2UgaXQgaXMgcmVmZXJlZCBlaXRoZXIKKwkJICogV2UgZG9uJ3Qga2ZyZWUgZGVzdCBiZWNhdXNlIGl0IGlzIHJlZmVycmVkIGVpdGhlcgogCQkgKiBieSBpdHMgc2VydmljZSBvciBieSB0aGUgdHJhc2ggZGVzdCBsaXN0LgogCQkgKi8KIAkJYXRvbWljX2RlYygmZS0+ZGVzdC0+cmVmY250KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKaW5kZXggMTc0ODRhNC4uZWI4NjAyOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKQEAgLTMxNiw3ICszMTYsNyBAQAogLyoKICAqIHBlciBuZXR3b3JrIG5hbWUtc3BhY2UgaW5pdAogICovCi1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19wcm90b2NvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IF9faXBfdnNfcHJvdG9jb2xfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAjaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUAogCXJlZ2lzdGVyX2lwX3ZzX3Byb3RvX25ldG5zKG5ldCwgJmlwX3ZzX3Byb3RvY29sX3RjcCk7CkBAIC0zMzYsNyArMzM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQordm9pZCBfX25ldF9leGl0IF9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCXN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDsKQEAgLTM0OSwxMSArMzQ5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19wcm90b19vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX3Byb3RvY29sX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAsCi19OwotCiBpbnQgX19pbml0IGlwX3ZzX3Byb3RvY29sX2luaXQodm9pZCkKIHsKIAljaGFyIHByb3RvY29sc1s2NF07CkBAIC0zODIsNyArMzc3LDYgQEAKIAlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfZXNwKTsKICNlbmRpZgogCXByX2luZm8oIlJlZ2lzdGVyZWQgcHJvdG9jb2xzICglcylcbiIsICZwcm90b2NvbHNbMl0pOwotCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX3Byb3RvX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5Myw3ICszODcsNiBAQAogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJaW50IGk7CiAKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfcHJvdG9fb3BzKTsKIAkvKiB1bnJlZ2lzdGVyIGFsbCB0aGUgaXB2cyBwcm90b2NvbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSVBfVlNfUFJPVE9fVEFCX1NJWkU7IGkrKykgewogCQl3aGlsZSAoKHBwID0gaXBfdnNfcHJvdG9fdGFibGVbaV0pICE9IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwppbmRleCBiMDI3Y2NjLi5kMTJlZDUzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTU2Niw3ICs1NjYsNyBAQAogCSAqIFNIVVRET1dOIHNlbnQgZnJvbSB0aGUgY2xpZW50LCB3YWl0aW5mIGZvciBTSFVUIEFDSyBmcm9tIHRoZSBzZXJ2ZXIKIAkgKi8KIAkvKgotCSAqIFdlIHJlY2lldmVkIHRoZSBkYXRhIGNodWNrLCBrZWVwIHRoZSBzdGF0ZSB1bmNoYW5nZWQuIEkgYXNzdW1lCisJICogV2UgcmVjZWl2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKIAkgKiB0aGF0IHN0aWxsIGRhdGEgY2h1bmNrcyAgY2FuIGJlIHJlY2VpdmVkIGJ5IGJvdGggdGhlIHBlZXJzIGluCiAJICogU0hVRE9XTiBzdGF0ZQogCSAqLwpAQCAtNjMzLDcgKzYzMyw3IEBACiAJICogU0hVVERPV04gc2VudCBmcm9tIHRoZSBzZXJ2ZXIsIHdhaXRpbmYgZm9yIFNIVVRET1dOIEFDSyBmcm9tIGNsaWVudAogCSAqLwogCS8qCi0JICogV2UgcmVjaWV2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKKwkgKiBXZSByZWNlaXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQogCSAqIHRoYXQgc3RpbGwgZGF0YSBjaHVuY2tzICBjYW4gYmUgcmVjZWl2ZWQgYnkgYm90aCB0aGUgcGVlcnMgaW4KIAkgKiBTSFVET1dOIHN0YXRlCiAJICovCkBAIC03MDEsNyArNzAxLDcgQEAKIAkgKiBTSFVURE9XTiBBQ0sgZnJvbSB0aGUgY2xpZW50LCBhd2FpdGluZyBmb3IgU0hVVERPV04gQ09NIGZyb20gc2VydmVyCiAJICovCiAJLyoKLQkgKiBXZSByZWNpZXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQorCSAqIFdlIHJlY2VpdmVkIHRoZSBkYXRhIGNodWNrLCBrZWVwIHRoZSBzdGF0ZSB1bmNoYW5nZWQuIEkgYXNzdW1lCiAJICogdGhhdCBzdGlsbCBkYXRhIGNodW5ja3MgIGNhbiBiZSByZWNlaXZlZCBieSBib3RoIHRoZSBwZWVycyBpbgogCSAqIFNIVURPV04gc3RhdGUKIAkgKi8KQEAgLTc3MSw3ICs3NzEsNyBAQAogCSAqIFNIVVRET1dOIEFDSyBmcm9tIHRoZSBzZXJ2ZXIsIGF3YWl0aW5nIGZvciBTSFVURE9XTiBDT00gZnJvbSBjbGllbnQKIAkgKi8KIAkvKgotCSAqIFdlIHJlY2lldmVkIHRoZSBkYXRhIGNodWNrLCBrZWVwIHRoZSBzdGF0ZSB1bmNoYW5nZWQuIEkgYXNzdW1lCisJICogV2UgcmVjZWl2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKIAkgKiB0aGF0IHN0aWxsIGRhdGEgY2h1bmNrcyAgY2FuIGJlIHJlY2VpdmVkIGJ5IGJvdGggdGhlIHBlZXJzIGluCiAJICogU0hVRE9XTiBzdGF0ZQogCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggM2U3OTYxZS4uZTI5MmU1YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC0xMzAzLDEzICsxMzAzLDE4IEBACiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlpbnQgcmVzdWx0OwogCi0JLyogRmlyc3QgY3JlYXRlIGEgc29ja2V0ICovCi0JcmVzdWx0ID0gX19zb2NrX2NyZWF0ZShuZXQsIFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jaywgMSk7CisJLyogRmlyc3QgY3JlYXRlIGEgc29ja2V0IG1vdmUgaXQgdG8gcmlnaHQgbmFtZSBzcGFjZSBsYXRlciAqLworCXJlc3VsdCA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcl9lcnIoIkVycm9yIGR1cmluZyBjcmVhdGlvbiBvZiBzb2NrZXQ7IHRlcm1pbmF0aW5nXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9Ci0KKwkvKgorCSAqIEtlcm5lbCBzb2NrZXRzIHRoYXQgYXJlIGEgcGFydCBvZiBhIG5hbWVzcGFjZSwgc2hvdWxkIG5vdAorCSAqIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBuYW1lc3BhY2UgaW4gb3JkZXIgdG8gYWxsb3cgdG8gc3RvcCBpdC4KKwkgKiBBZnRlciBza19jaGFuZ2VfbmV0IHNob3VsZCBiZSByZWxlYXNlZCB1c2luZyBza19yZWxlYXNlX2tlcm5lbC4KKwkgKi8KKwlza19jaGFuZ2VfbmV0KHNvY2stPnNrLCBuZXQpOwogCXJlc3VsdCA9IHNldF9tY2FzdF9pZihzb2NrLT5zaywgaXB2cy0+bWFzdGVyX21jYXN0X2lmbik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJfZXJyKCJFcnJvciBzZXR0aW5nIG91dGJvdW5kIG1jYXN0IGludGVyZmFjZVxuIik7CkBAIC0xMzM0LDggKzEzMzksOCBAQAogCiAJcmV0dXJuIHNvY2s7CiAKLSAgZXJyb3I6Ci0Jc29ja19yZWxlYXNlKHNvY2spOworZXJyb3I6CisJc2tfcmVsZWFzZV9rZXJuZWwoc29jay0+c2spOwogCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiB9CiAKQEAgLTEzNTAsMTIgKzEzNTUsMTcgQEAKIAlpbnQgcmVzdWx0OwogCiAJLyogRmlyc3QgY3JlYXRlIGEgc29ja2V0ICovCi0JcmVzdWx0ID0gX19zb2NrX2NyZWF0ZShuZXQsIFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jaywgMSk7CisJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByX2VycigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOwogCQlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogCX0KLQorCS8qCisJICogS2VybmVsIHNvY2tldHMgdGhhdCBhcmUgYSBwYXJ0IG9mIGEgbmFtZXNwYWNlLCBzaG91bGQgbm90CisJICogaG9sZCBhIHJlZmVyZW5jZSB0byBhIG5hbWVzcGFjZSBpbiBvcmRlciB0byBhbGxvdyB0byBzdG9wIGl0LgorCSAqIEFmdGVyIHNrX2NoYW5nZV9uZXQgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nIHNrX3JlbGVhc2Vfa2VybmVsLgorCSAqLworCXNrX2NoYW5nZV9uZXQoc29jay0+c2ssIG5ldCk7CiAJLyogaXQgaXMgZXF1aXZhbGVudCB0byB0aGUgUkVVU0VBRERSIG9wdGlvbiBpbiB1c2VyLXNwYWNlICovCiAJc29jay0+c2stPnNrX3JldXNlID0gMTsKIApAQCAtMTM3Nyw4ICsxMzg3LDggQEAKIAogCXJldHVybiBzb2NrOwogCi0gIGVycm9yOgotCXNvY2tfcmVsZWFzZShzb2NrKTsKK2Vycm9yOgorCXNrX3JlbGVhc2Vfa2VybmVsKHNvY2stPnNrKTsKIAlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogfQogCkBAIC0xNDczLDcgKzE0ODMsNyBAQAogCQlpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7CiAKIAkvKiByZWxlYXNlIHRoZSBzZW5kaW5nIG11bHRpY2FzdCBzb2NrZXQgKi8KLQlzb2NrX3JlbGVhc2UodGluZm8tPnNvY2spOworCXNrX3JlbGVhc2Vfa2VybmVsKHRpbmZvLT5zb2NrLT5zayk7CiAJa2ZyZWUodGluZm8pOwogCiAJcmV0dXJuIDA7CkBAIC0xNTEzLDcgKzE1MjMsNyBAQAogCX0KIAogCS8qIHJlbGVhc2UgdGhlIHNlbmRpbmcgbXVsdGljYXN0IHNvY2tldCAqLwotCXNvY2tfcmVsZWFzZSh0aW5mby0+c29jayk7CisJc2tfcmVsZWFzZV9rZXJuZWwodGluZm8tPnNvY2stPnNrKTsKIAlrZnJlZSh0aW5mby0+YnVmKTsKIAlrZnJlZSh0aW5mbyk7CiAKQEAgLTE2MDEsNyArMTYxMSw3IEBACiBvdXRidWY6CiAJa2ZyZWUoYnVmKTsKIG91dHNvY2tldDoKLQlzb2NrX3JlbGVhc2Uoc29jayk7CisJc2tfcmVsZWFzZV9rZXJuZWwoc29jay0+c2spOwogb3V0OgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjEwLDYgKzE2MjAsNyBAQAogaW50IHN0b3Bfc3luY190aHJlYWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgc3RhdGUpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOworCWludCByZXRjID0gLUVJTlZBTDsKIAogCUlQX1ZTX0RCRyg3LCAiJXMoKTogcGlkICVkXG4iLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkpOwogCkBAIC0xNjI5LDcgKzE2NDAsNyBAQAogCQlzcGluX2xvY2tfYmgoJmlwdnMtPnN5bmNfbG9jayk7CiAJCWlwdnMtPnN5bmNfc3RhdGUgJj0gfklQX1ZTX1NUQVRFX01BU1RFUjsKIAkJc3Bpbl91bmxvY2tfYmgoJmlwdnMtPnN5bmNfbG9jayk7Ci0JCWt0aHJlYWRfc3RvcChpcHZzLT5tYXN0ZXJfdGhyZWFkKTsKKwkJcmV0YyA9IGt0aHJlYWRfc3RvcChpcHZzLT5tYXN0ZXJfdGhyZWFkKTsKIAkJaXB2cy0+bWFzdGVyX3RocmVhZCA9IE5VTEw7CiAJfSBlbHNlIGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9CQUNLVVApIHsKIAkJaWYgKCFpcHZzLT5iYWNrdXBfdGhyZWFkKQpAQCAtMTYzOSwyMiArMTY1MCwyMCBAQAogCQkJdGFza19waWRfbnIoaXB2cy0+YmFja3VwX3RocmVhZCkpOwogCiAJCWlwdnMtPnN5bmNfc3RhdGUgJj0gfklQX1ZTX1NUQVRFX0JBQ0tVUDsKLQkJa3RocmVhZF9zdG9wKGlwdnMtPmJhY2t1cF90aHJlYWQpOworCQlyZXRjID0ga3RocmVhZF9zdG9wKGlwdnMtPmJhY2t1cF90aHJlYWQpOwogCQlpcHZzLT5iYWNrdXBfdGhyZWFkID0gTlVMTDsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBkZWNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCAqLwogCWlwX3ZzX3VzZV9jb3VudF9kZWMoKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXRjOwogfQogCiAvKgogICogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdCBmb3IgZWFjaCBuZXRucwogICovCi1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19zeW5jX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgX19pcF92c19zeW5jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIApAQCAtMTY2OCwyNCArMTY3NywyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2lwX3ZzX3N5bmNfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9faXBfdnNfc3luY19jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdG9wX3N5bmNfdGhyZWFkKG5ldCwgSVBfVlNfU1RBVEVfTUFTVEVSKTsKLQlzdG9wX3N5bmNfdGhyZWFkKG5ldCwgSVBfVlNfU1RBVEVfQkFDS1VQKTsKKwlpbnQgcmV0YzsKKworCXJldGMgPSBzdG9wX3N5bmNfdGhyZWFkKG5ldCwgSVBfVlNfU1RBVEVfTUFTVEVSKTsKKwlpZiAocmV0YyAmJiByZXRjICE9IC1FU1JDSCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc3RvcCBNYXN0ZXIgRGFlbW9uXG4iKTsKKworCXJldGMgPSBzdG9wX3N5bmNfdGhyZWFkKG5ldCwgSVBfVlNfU1RBVEVfQkFDS1VQKTsKKwlpZiAocmV0YyAmJiByZXRjICE9IC1FU1JDSCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc3RvcCBCYWNrdXAgRGFlbW9uXG4iKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHZzX3N5bmNfb3BzID0gewotCS5pbml0ID0gX19pcF92c19zeW5jX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX3N5bmNfY2xlYW51cCwKLX07Ci0KLQogaW50IF9faW5pdCBpcF92c19zeW5jX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19zeW5jX29wcyk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgaXBfdnNfc3luY19jbGVhbnVwKHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX3N5bmNfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCA5NDEyODZjLi4yZTFjMTFmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAkgICBSRUpFQ1Qgd2lsbCBnaXZlIHNwdXJpb3VzIHdhcm5pbmdzIGhlcmUuICovCiAJLyogTkZfQ1RfQVNTRVJUKGF0b21pY19yZWFkKCZjdC0+Y3RfZ2VuZXJhbC51c2UpID09IDEpOyAqLwogCi0JLyogTm8gZXh0ZXJuYWwgcmVmZXJlbmNlcyBtZWFucyBub29uZSBlbHNlIGNvdWxkIGhhdmUKKwkvKiBObyBleHRlcm5hbCByZWZlcmVuY2VzIG1lYW5zIG5vIG9uZSBlbHNlIGNvdWxkIGhhdmUKIAkgICBjb25maXJtZWQgdXMuICovCiAJTkZfQ1RfQVNTRVJUKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKTsKIAlwcl9kZWJ1ZygiQ29uZmlybWluZyBjb25udHJhY2sgJXBcbiIsIGN0KTsKQEAgLTkwMSw3ICs5MDEsNyBAQAogCXJldCA9IGwzcHJvdG8tPmdldF9sNHByb3RvKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYiksCiAJCQkJICAgJmRhdGFvZmYsICZwcm90b251bSk7CiAJaWYgKHJldCA8PSAwKSB7Ci0JCXByX2RlYnVnKCJub3QgcHJlcGFyZWQgdG8gdHJhY2sgeWV0IG9yIGVycm9yIG9jY3VyZWRcbiIpOworCQlwcl9kZWJ1Zygibm90IHByZXBhcmVkIHRvIHRyYWNrIHlldCBvciBlcnJvciBvY2N1cnJlZFxuIik7CiAJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGVycm9yKTsKIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7CiAJCXJldCA9IC1yZXQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jCmluZGV4IDg2Nzg4MjMuLmJjZDVlZDYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jCkBAIC02MzEsNyArNjMxLDcgQEAKIAkJQ0hFQ0tfQk9VTkQoYnMsIDIpOwogCQljb3VudCA9ICpicy0+Y3VyKys7CiAJCWNvdW50IDw8PSA4OwotCQljb3VudCA9ICpicy0+Y3VyKys7CisJCWNvdW50ICs9ICpicy0+Y3VyKys7CiAJCWJyZWFrOwogCWNhc2UgU0VNSToKIAkJQllURV9BTElHTihicyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDUzM2ExODMuLjE4YjJjZTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC03MzEsMTAgKzczMSwxMCBAQAogCiAJCW1lbXNldCgmZmwyLCAwLCBzaXplb2YoZmwyKSk7CiAJCWZsMi5kYWRkciA9IGRzdC0+aXA7Ci0JCWlmICghYWZpbmZvLT5yb3V0ZSgoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQxLAotCQkJCSAgIGZsb3dpNF90b19mbG93aSgmZmwxKSkpIHsKLQkJCWlmICghYWZpbmZvLT5yb3V0ZSgoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQyLAotCQkJCQkgICBmbG93aTRfdG9fZmxvd2koJmZsMikpKSB7CisJCWlmICghYWZpbmZvLT5yb3V0ZSgmaW5pdF9uZXQsIChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDEsCisJCQkJICAgZmxvd2k0X3RvX2Zsb3dpKCZmbDEpLCBmYWxzZSkpIHsKKwkJCWlmICghYWZpbmZvLT5yb3V0ZSgmaW5pdF9uZXQsIChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDIsCisJCQkJCSAgIGZsb3dpNF90b19mbG93aSgmZmwyKSwgZmFsc2UpKSB7CiAJCQkJaWYgKHJ0MS0+cnRfZ2F0ZXdheSA9PSBydDItPnJ0X2dhdGV3YXkgJiYKIAkJCQkgICAgcnQxLT5kc3QuZGV2ICA9PSBydDItPmRzdC5kZXYpCiAJCQkJCXJldCA9IDE7CkBAIC03NTUsMTAgKzc1NSwxMCBAQAogCiAJCW1lbXNldCgmZmwyLCAwLCBzaXplb2YoZmwyKSk7CiAJCWlwdjZfYWRkcl9jb3B5KCZmbDIuZGFkZHIsICZkc3QtPmluNik7Ci0JCWlmICghYWZpbmZvLT5yb3V0ZSgoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQxLAotCQkJCSAgIGZsb3dpNl90b19mbG93aSgmZmwxKSkpIHsKLQkJCWlmICghYWZpbmZvLT5yb3V0ZSgoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQyLAotCQkJCQkgICBmbG93aTZfdG9fZmxvd2koJmZsMikpKSB7CisJCWlmICghYWZpbmZvLT5yb3V0ZSgmaW5pdF9uZXQsIChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDEsCisJCQkJICAgZmxvd2k2X3RvX2Zsb3dpKCZmbDEpLCBmYWxzZSkpIHsKKwkJCWlmICghYWZpbmZvLT5yb3V0ZSgmaW5pdF9uZXQsIChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDIsCisJCQkJCSAgIGZsb3dpNl90b19mbG93aSgmZmwyKSwgZmFsc2UpKSB7CiAJCQkJaWYgKCFtZW1jbXAoJnJ0MS0+cnQ2aV9nYXRld2F5LCAmcnQyLT5ydDZpX2dhdGV3YXksCiAJCQkJCSAgICBzaXplb2YocnQxLT5ydDZpX2dhdGV3YXkpKSAmJgogCQkJCSAgICBydDEtPmRzdC5kZXYgPT0gcnQyLT5kc3QuZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDMwYmY4YTEuLjQ4MmU5MGMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTEzMzQsNiArMTMzNCw3IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CisJc3RydWN0IG5mX2Nvbm5fdHN0YW1wICp0c3RhbXA7CiAKIAljdCA9IG5mX2Nvbm50cmFja19hbGxvYyhuZXQsIHpvbmUsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkKQEAgLTE0NTEsNiArMTQ1Miw5IEBACiAJCV9fc2V0X2JpdChJUFNfRVhQRUNURURfQklULCAmY3QtPnN0YXR1cyk7CiAJCWN0LT5tYXN0ZXIgPSBtYXN0ZXJfY3Q7CiAJfQorCXRzdGFtcCA9IG5mX2Nvbm5fdHN0YW1wX2ZpbmQoY3QpOworCWlmICh0c3RhbXApCisJCXRzdGFtcC0+c3RhcnQgPSBrdGltZV90b19ucyhrdGltZV9nZXRfcmVhbCgpKTsKIAogCWFkZF90aW1lcigmY3QtPnRpbWVvdXQpOwogCW5mX2Nvbm50cmFja19oYXNoX2luc2VydChjdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggOWFlNTdjNS4uMmU2NjRhNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwpAQCAtOTgsNyArOTgsNyBAQAogI2RlZmluZSBzSVYJQ1RfRENDUF9JTlZBTElECiAKIC8qCi0gKiBEQ0NQIHN0YXRlIHRyYW5zaXN0aW9uIHRhYmxlCisgKiBEQ0NQIHN0YXRlIHRyYW5zaXRpb24gdGFibGUKICAqCiAgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgVENQIHRyYWNraW5nOgogICoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA2ZjRlZTcwLi42NzcyYjExIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC0xMDcsOSArMTA3LDkgQEAKIC8qIGFib3J0ICAgICAgICAqLyB7c0NMLCBzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzQ0x9LAogLyogc2h1dGRvd24gICAgICovIHtzQ0wsIHNDTCwgc0NXLCBzQ0UsIHNTUywgc1NTLCBzU1IsIHNTQX0sCiAvKiBzaHV0ZG93bl9hY2sgKi8ge3NTQSwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU0EsIHNTQSwgc1NBfSwKLS8qIGVycm9yICAgICAgICAqLyB7c0NMLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzU0F9LC8qIENhbnQgaGF2ZSBTdGFsZSBjb29raWUqLworLyogZXJyb3IgICAgICAgICovIHtzQ0wsIHNDTCwgc0NXLCBzQ0UsIHNFUywgc1NTLCBzU1IsIHNTQX0sLyogQ2FuJ3QgaGF2ZSBTdGFsZSBjb29raWUqLwogLyogY29va2llX2VjaG8gICovIHtzQ0wsIHNDTCwgc0NFLCBzQ0UsIHNFUywgc1NTLCBzU1IsIHNTQX0sLyogNS4yLjQgLSBCaWcgVE9ETyAqLwotLyogY29va2llX2FjayAgICovIHtzQ0wsIHNDTCwgc0NXLCBzQ0UsIHNFUywgc1NTLCBzU1IsIHNTQX0sLyogQ2FudCBjb21lIGluIG9yaWcgZGlyICovCisvKiBjb29raWVfYWNrICAgKi8ge3NDTCwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiBDYW4ndCBjb21lIGluIG9yaWcgZGlyICovCiAvKiBzaHV0ZG93bl9jb21wKi8ge3NDTCwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc0NMfQogCX0sCiAJewpAQCAtMTIxLDcgKzEyMSw3IEBACiAvKiBzaHV0ZG93biAgICAgKi8ge3NJViwgc0NMLCBzQ1csIHNDRSwgc1NSLCBzU1MsIHNTUiwgc1NBfSwKIC8qIHNodXRkb3duX2FjayAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTQSwgc1NBLCBzU0F9LAogLyogZXJyb3IgICAgICAgICovIHtzSVYsIHNDTCwgc0NXLCBzQ0wsIHNFUywgc1NTLCBzU1IsIHNTQX0sCi0vKiBjb29raWVfZWNobyAgKi8ge3NJViwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiBDYW50IGNvbWUgaW4gcmVwbHkgZGlyICovCisvKiBjb29raWVfZWNobyAgKi8ge3NJViwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiBDYW4ndCBjb21lIGluIHJlcGx5IGRpciAqLwogLyogY29va2llX2FjayAgICovIHtzSVYsIHNDTCwgc0NXLCBzRVMsIHNFUywgc1NTLCBzU1IsIHNTQX0sCiAvKiBzaHV0ZG93bl9jb21wKi8ge3NJViwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc0NMfQogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggYmNmNDdlYi4uMjM3Y2MxOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTcwNyw3ICs3MDcsNyBAQAogfQogCiAvKiBMb2NhdGUgYSBTRFAgaGVhZGVyIChvcHRpb25hbGx5IGEgc3Vic3RyaW5nIHdpdGhpbiB0aGUgaGVhZGVyIHZhbHVlKSwKLSAqIG9wdGlvbmFsbHkgc3RvcHBpbmcgYXQgdGhlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGUgdGVybSBoZWFkZXIsIHBhcnNlCisgKiBvcHRpb25hbGx5IHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSB0ZXJtIGhlYWRlciwgcGFyc2UKICAqIGl0IGFuZCByZXR1cm4gdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBkYXRhIHdlJ3JlIGludGVyZXN0ZWQgaW4uCiAgKi8KIGludCBjdF9zaXBfZ2V0X3NkcF9oZWFkZXIoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCmluZGV4IDVhYjIyZTIuLjViNDY2Y2QgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCWNvbnN0IHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbzsKIAljb25zdCBzdHJ1Y3QgbmZfcXVldWVfaGFuZGxlciAqcWg7CiAKLQkvKiBRVUVVRSA9PSBEUk9QIGlmIG5vb25lIGlzIHdhaXRpbmcsIHRvIGJlIHNhZmUuICovCisJLyogUVVFVUUgPT0gRFJPUCBpZiBubyBvbmUgaXMgd2FpdGluZywgdG8gYmUgc2FmZS4gKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlxaCA9IHJjdV9kZXJlZmVyZW5jZShxdWV1ZV9oYW5kbGVyW3BmXSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggYTlhZGY0Yy4uOGEwMjVhNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtNDU1LDYgKzQ1NSw3IEBACiAJCXZmcmVlKHh0W2FmXS5jb21wYXRfdGFiKTsKIAkJeHRbYWZdLmNvbXBhdF90YWIgPSBOVUxMOwogCQl4dFthZl0ubnVtYmVyID0gMDsKKwkJeHRbYWZdLmN1ciA9IDA7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X2ZsdXNoX29mZnNldHMpOwpAQCAtNDczLDggKzQ3NCw3IEBACiAJCWVsc2UKIAkJCXJldHVybiBtaWQgPyB0bXBbbWlkIC0gMV0uZGVsdGEgOiAwOwogCX0KLQlXQVJOX09OX09OQ0UoMSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGxlZnQgPyB0bXBbbGVmdCAtIDFdLmRlbHRhIDogMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF9jYWxjX2p1bXApOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0RTQ1AuYyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCmluZGV4IDBhMjI5MTkuLmFlODI3MTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCkBAIC05OSw3ICs5OSw3IEBACiAJdV9pbnQ4X3Qgb3JpZywgbnY7CiAKIAlvcmlnID0gaXB2Nl9nZXRfZHNmaWVsZChpcGgpOwotCW52ICAgPSAob3JpZyAmIGluZm8tPnRvc19tYXNrKSBeIGluZm8tPnRvc192YWx1ZTsKKwludiAgID0gKG9yaWcgJiB+aW5mby0+dG9zX21hc2spIF4gaW5mby0+dG9zX3ZhbHVlOwogCiAJaWYgKG9yaWcgIT0gbnYpIHsKIAkJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jCmluZGV4IDZlNmI0NmMuLjllNjNiNDMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWFpID0gbmZfZ2V0X2FmaW5mbyhmYW1pbHkpOwogCWlmIChhaSAhPSBOVUxMKQotCQlhaS0+cm91dGUoKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0LCAmZmwpOworCQlhaS0+cm91dGUoJmluaXRfbmV0LCAoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQsICZmbCwgZmFsc2UpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKHJ0ICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfYWRkcnR5cGUuYyBiL25ldC9uZXRmaWx0ZXIveHRfYWRkcnR5cGUuYwppbmRleCAyMjIwYjg1Li5iNzdkMzgzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2FkZHJ0eXBlLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9hZGRydHlwZS5jCkBAIC0zMiwxMSArMzIsMzIgQEAKIE1PRFVMRV9BTElBUygiaXA2dF9hZGRydHlwZSIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfSVA2X05GX0lQVEFCTEVTKSB8fCBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVNfTU9EVUxFKQotc3RhdGljIHUzMiB4dF9hZGRydHlwZV9ydDZfdG9fdHlwZShjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQorc3RhdGljIHUzMiBtYXRjaF9sb29rdXBfcnQ2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CisJY29uc3Qgc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvOworCXN0cnVjdCBmbG93aTYgZmxvdzsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCXUzMiByZXQ7CisJaW50IHJvdXRlX2VycjsKIAotCWlmICghcnQpCisJbWVtc2V0KCZmbG93LCAwLCBzaXplb2YoZmxvdykpOworCWlwdjZfYWRkcl9jb3B5KCZmbG93LmRhZGRyLCBhZGRyKTsKKwlpZiAoZGV2KQorCQlmbG93LmZsb3dpNl9vaWYgPSBkZXYtPmlmaW5kZXg7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlhZmluZm8gPSBuZl9nZXRfYWZpbmZvKE5GUFJPVE9fSVBWNik7CisJaWYgKGFmaW5mbyAhPSBOVUxMKQorCQlyb3V0ZV9lcnIgPSBhZmluZm8tPnJvdXRlKG5ldCwgKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0LAorCQkJCQlmbG93aTZfdG9fZmxvd2koJmZsb3cpLCAhIWRldik7CisJZWxzZQorCQlyb3V0ZV9lcnIgPSAxOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAocm91dGVfZXJyKQogCQlyZXR1cm4gWFRfQUREUlRZUEVfVU5SRUFDSEFCTEU7CiAKIAlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfUkVKRUNUKQpAQCAtNDgsNiArNjksOSBAQAogCQlyZXQgfD0gWFRfQUREUlRZUEVfTE9DQUw7CiAJaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0FOWUNBU1QpCiAJCXJldCB8PSBYVF9BRERSVFlQRV9BTllDQVNUOworCisKKwlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjUsMTggKzg5LDggQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKChYVF9BRERSVFlQRV9MT0NBTCB8IFhUX0FERFJUWVBFX0FOWUNBU1QgfAotCSAgICAgWFRfQUREUlRZUEVfVU5SRUFDSEFCTEUpICYgbWFzaykgewotCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwotCQl1MzIgdHlwZTsKLQkJaW50IGlmaW5kZXggPSBkZXYgPyBkZXYtPmlmaW5kZXggOiAwOwotCi0JCXJ0ID0gcnQ2X2xvb2t1cChuZXQsIGFkZHIsIE5VTEwsIGlmaW5kZXgsICEhZGV2KTsKLQotCQl0eXBlID0geHRfYWRkcnR5cGVfcnQ2X3RvX3R5cGUocnQpOwotCi0JCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKLQkJcmV0dXJuICEhKG1hc2sgJiB0eXBlKTsKLQl9CisJICAgICBYVF9BRERSVFlQRV9VTlJFQUNIQUJMRSkgJiBtYXNrKQorCQlyZXR1cm4gISEobWFzayAmIG1hdGNoX2xvb2t1cF9ydDYobmV0LCBkZXYsIGFkZHIpKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKaW5kZXggMmMwMDg2YS4uNjE4MDVkNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJcmV0dXJuIGluZm8tPm1hdGNoX2ZsYWdzICYgWFRfQ09OTlRSQUNLX1NUQVRFOwogCWlmICgoaW5mby0+bWF0Y2hfZmxhZ3MgJiBYVF9DT05OVFJBQ0tfRElSRUNUSU9OKSAmJgogCSAgICAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9PUklHSU5BTCkgXgotCSAgICAhIShpbmZvLT5pbnZlcnRfZmxhZ3MgJiBYVF9DT05OVFJBQ0tfRElSRUNUSU9OKSkKKwkgICAgIShpbmZvLT5pbnZlcnRfZmxhZ3MgJiBYVF9DT05OVFJBQ0tfRElSRUNUSU9OKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGluZm8tPm1hdGNoX2ZsYWdzICYgWFRfQ09OTlRSQUNLX09SSUdTUkMpCkBAIC0yNzIsMTEgKzI3Miw2IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChzdHJjbXAocGFyLT50YWJsZSwgInJhdyIpID09IDApIHsKLQkJcHJfaW5mbygic3RhdGUgaXMgdW5kZXRlcm1pbmVkIGF0IHRoZSB0aW1lIG9mIHJhdyB0YWJsZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXJldCA9IG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQocGFyLT5mYW1pbHkpOwogCWlmIChyZXQgPCAwKQogCQlwcl9pbmZvKCJjYW5ub3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgcHJvdG89JXVcbiIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NldC5jIGIvbmV0L25ldGZpbHRlci94dF9zZXQuYwppbmRleCAwNjFkNDhjLi5iM2JhYmFlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3NldC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc2V0LmMKQEAgLTgxLDYgKzgxLDcgQEAKIAlpZiAoaW5mby0+bWF0Y2hfc2V0LnUuZmxhZ3NbSVBTRVRfRElNX01BWC0xXSAhPSAwKSB7CiAJCXByX3dhcm5pbmcoIlByb3RvY29sIGVycm9yOiBzZXQgbWF0Y2ggZGltZW5zaW9uICIKIAkJCSAgICJpcyBvdmVyIHRoZSBsaW1pdCFcbiIpOworCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+bWF0Y2hfc2V0LmluZGV4KTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCkBAIC0xMzUsNiArMTM2LDggQEAKIAkJaWYgKGluZGV4ID09IElQU0VUX0lOVkFMSURfSUQpIHsKIAkJCXByX3dhcm5pbmcoIkNhbm5vdCBmaW5kIGRlbF9zZXQgaW5kZXggJXUgYXMgdGFyZ2V0XG4iLAogCQkJCSAgIGluZm8tPmRlbF9zZXQuaW5kZXgpOworCQkJaWYgKGluZm8tPmFkZF9zZXQuaW5kZXggIT0gSVBTRVRfSU5WQUxJRF9JRCkKKwkJCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+YWRkX3NldC5pbmRleCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCX0KQEAgLTE0Miw2ICsxNDUsMTAgQEAKIAkgICAgaW5mby0+ZGVsX3NldC51LmZsYWdzW0lQU0VUX0RJTV9NQVgtMV0gIT0gMCkgewogCQlwcl93YXJuaW5nKCJQcm90b2NvbCBlcnJvcjogU0VUIHRhcmdldCBkaW1lbnNpb24gIgogCQkJICAgImlzIG92ZXIgdGhlIGxpbWl0IVxuIik7CisJCWlmIChpbmZvLT5hZGRfc2V0LmluZGV4ICE9IElQU0VUX0lOVkFMSURfSUQpCisJCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+YWRkX3NldC5pbmRleCk7CisJCWlmIChpbmZvLT5kZWxfc2V0LmluZGV4ICE9IElQU0VUX0lOVkFMSURfSUQpCisJCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+ZGVsX3NldC5pbmRleCk7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KIApAQCAtMTkyLDYgKzE5OSw3IEBACiAJaWYgKGluZm8tPm1hdGNoX3NldC5kaW0gPiBJUFNFVF9ESU1fTUFYKSB7CiAJCXByX3dhcm5pbmcoIlByb3RvY29sIGVycm9yOiBzZXQgbWF0Y2ggZGltZW5zaW9uICIKIAkJCSAgICJpcyBvdmVyIHRoZSBsaW1pdCFcbiIpOworCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+bWF0Y2hfc2V0LmluZGV4KTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCkBAIC0yMTksNyArMjI3LDcgQEAKIAlpZiAoaW5mby0+ZGVsX3NldC5pbmRleCAhPSBJUFNFVF9JTlZBTElEX0lEKQogCQlpcF9zZXRfZGVsKGluZm8tPmRlbF9zZXQuaW5kZXgsCiAJCQkgICBza2IsIHBhci0+ZmFtaWx5LAotCQkJICAgaW5mby0+YWRkX3NldC5kaW0sCisJCQkgICBpbmZvLT5kZWxfc2V0LmRpbSwKIAkJCSAgIGluZm8tPmRlbF9zZXQuZmxhZ3MpOwogCiAJcmV0dXJuIFhUX0NPTlRJTlVFOwpAQCAtMjQ1LDEzICsyNTMsMTkgQEAKIAkJaWYgKGluZGV4ID09IElQU0VUX0lOVkFMSURfSUQpIHsKIAkJCXByX3dhcm5pbmcoIkNhbm5vdCBmaW5kIGRlbF9zZXQgaW5kZXggJXUgYXMgdGFyZ2V0XG4iLAogCQkJCSAgIGluZm8tPmRlbF9zZXQuaW5kZXgpOworCQkJaWYgKGluZm8tPmFkZF9zZXQuaW5kZXggIT0gSVBTRVRfSU5WQUxJRF9JRCkKKwkJCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+YWRkX3NldC5pbmRleCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCX0KIAlpZiAoaW5mby0+YWRkX3NldC5kaW0gPiBJUFNFVF9ESU1fTUFYIHx8Ci0JICAgIGluZm8tPmRlbF9zZXQuZmxhZ3MgPiBJUFNFVF9ESU1fTUFYKSB7CisJICAgIGluZm8tPmRlbF9zZXQuZGltID4gSVBTRVRfRElNX01BWCkgewogCQlwcl93YXJuaW5nKCJQcm90b2NvbCBlcnJvcjogU0VUIHRhcmdldCBkaW1lbnNpb24gIgogCQkJICAgImlzIG92ZXIgdGhlIGxpbWl0IVxuIik7CisJCWlmIChpbmZvLT5hZGRfc2V0LmluZGV4ICE9IElQU0VUX0lOVkFMSURfSUQpCisJCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+YWRkX3NldC5pbmRleCk7CisJCWlmIChpbmZvLT5kZWxfc2V0LmluZGV4ICE9IElQU0VUX0lOVkFMSURfSUQpCisJCQlpcF9zZXRfbmZubF9wdXQoaW5mby0+ZGVsX3NldC5pbmRleCk7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKaW5kZXggZDM3YjdmOC4uZGUwZDhlNCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCkBAIC0xMDksNyArMTA5LDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIFRoaXMgaXMgdGhlIGhhc2hpbmcgZnVuY3Rpb24gZm9yIHRoZSBkb21haW4gaGFzaCB0YWJsZSwgaXQgcmV0dXJucyB0aGUKLSAqIGNvcnJlY3QgYnVja2V0IG51bWJlciBmb3IgdGhlIGRvbWFpbi4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvcgorICogY29ycmVjdCBidWNrZXQgbnVtYmVyIGZvciB0aGUgZG9tYWluLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKICAqIGVuc3VyaW5nIHRoYXQgdGhlIGhhc2ggdGFibGUgaXMgcHJvdGVjdGVkIHdpdGggZWl0aGVyIGEgUkNVIHJlYWQgbG9jayBvciB0aGUKICAqIGhhc2ggdGFibGUgbG9jay4KICAqCkBAIC0xMzQsNyArMTM0LDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIFNlYXJjaGVzIHRoZSBkb21haW4gaGFzaCB0YWJsZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUKLSAqIGVudHJ5IGlmIGZvdW5kLCBvdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvcgorICogZW50cnkgaWYgZm91bmQsIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKICAqIGVuc3VyaW5nIHRoYXQgdGhlIGhhc2ggdGFibGUgaXMgcHJvdGVjdGVkIHdpdGggZWl0aGVyIGEgUkNVIHJlYWQgbG9jayBvciB0aGUKICAqIGhhc2ggdGFibGUgbG9jay4KICAqCkBAIC0xNjUsNyArMTY1LDcgQEAKICAqIFNlYXJjaGVzIHRoZSBkb21haW4gaGFzaCB0YWJsZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUKICAqIGVudHJ5IGlmIGFuIGV4YWN0IG1hdGNoIGlzIGZvdW5kLCBpZiBhbiBleGFjdCBtYXRjaCBpcyBub3QgcHJlc2VudCBpbiB0aGUKICAqIGhhc2ggdGFibGUgdGhlbiB0aGUgZGVmYXVsdCBlbnRyeSBpcyByZXR1cm5lZCBpZiB2YWxpZCBvdGhlcndpc2UgTlVMTCBpcwotICogcmV0dXJuZWQuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmlsZSBlbnN1cmluZyB0aGF0IHRoZSBoYXNoIHRhYmxlIGlzCisgKiByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZW5zdXJpbmcgdGhhdCB0aGUgaGFzaCB0YWJsZSBpcwogICogcHJvdGVjdGVkIHdpdGggZWl0aGVyIGEgUkNVIHJlYWQgbG9jayBvciB0aGUgaGFzaCB0YWJsZSBsb2NrLgogICoKICAqLwpAQCAtMTkzLDcgKzE5Myw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiBHZW5lcmF0ZSBhbiBhdWRpdCByZWNvcmQgZm9yIGFkZGluZyBhIG5ldyBOZXRMYWJlbC9MU00gbWFwcGluZyBlbnRyeSB3aXRoCi0gKiB0aGUgZ2l2ZW4gaW5mb3JtYXRpb24uICBDYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBob2xkaW5nIHRoZSBuZWNlc3NhcnkKKyAqIHRoZSBnaXZlbiBpbmZvcm1hdGlvbi4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgbmVjZXNzYXJ5CiAgKiBsb2Nrcy4KICAqCiAgKi8KQEAgLTYwNSw3ICs2MDUsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogTG9vayB0aHJvdWdoIHRoZSBkb21haW4gaGFzaCB0YWJsZSBzZWFyY2hpbmcgZm9yIGFuIGVudHJ5IHRvIG1hdGNoIEBkb21haW4sCi0gKiByZXR1cm4gYSBwb2ludGVyIHRvIGEgY29weSBvZiB0aGUgZW50cnkgb3IgTlVMTC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlCisgKiByZXR1cm4gYSBwb2ludGVyIHRvIGEgY29weSBvZiB0aGUgZW50cnkgb3IgTlVMTC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUKICAqIGZvciBlbnN1cmluZyB0aGF0IHJjdV9yZWFkX1t1bl1sb2NrKCkgaXMgY2FsbGVkLgogICoKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKaW5kZXggOTk4ZTg1ZS4uNGYyNTFiMSAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCkBAIC0yNTksNyArMjU5LDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIFRoaXMgZnVuY3Rpb24gaXMgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0aGUgTElTVEFMTCBhbmQgTElTVERFRiBjb21tYW5kCi0gKiBoYW5kbGVycy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBSQ1UgcmVhZCBsb2NrCisgKiBoYW5kbGVycy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFJDVSByZWFkIGxvY2sKICAqIGlzIGhlbGQuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3NlbmQuYyBiL25ldC9yZHMvaWJfc2VuZC5jCmluZGV4IGM0N2E1MTEuLjdjNGRjZTggMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfc2VuZC5jCisrKyBiL25ldC9yZHMvaWJfc2VuZC5jCkBAIC0zNTUsNyArMzU1LDcgQEAKICAqCiAgKiBDb25jZXB0dWFsbHksIHdlIGhhdmUgdHdvIGNvdW50ZXJzOgogICogIC0Jc2VuZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSdyZSBhbGxvd2VkCi0gKgl0byBzdWJtaXQgd2l0aG91dCBvdmVycnVuaW5nIHRoZSByZWNpZXZlcidzIHF1ZXVlLiBGb3IKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2VpdmVyJ3MgcXVldWUuIEZvcgogICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KICAqCiAgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfY20uYyBiL25ldC9yZHMvaXdfY20uYwppbmRleCA3MTJjZjJkLi4zYTYwYTE1IDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3X2NtLmMKKysrIGIvbmV0L3Jkcy9pd19jbS5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAl1bnNpZ25lZCBpbnQgc2VuZF9zaXplLCByZWN2X3NpemU7CiAJaW50IHJldDsKIAotCS8qIFRoZSBvZmZzZXQgb2YgMSBpcyB0byBhY2NvbW9kYXRlIHRoZSBhZGRpdGlvbmFsIEFDSyBXUi4gKi8KKwkvKiBUaGUgb2Zmc2V0IG9mIDEgaXMgdG8gYWNjb21tb2RhdGUgdGhlIGFkZGl0aW9uYWwgQUNLIFdSLiAqLwogCXNlbmRfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2l3ZGV2LT5tYXhfd3JzLCByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyICsgMSk7CiAJcmVjdl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCByZHNfaXdkZXYtPm1heF93cnMsIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IgKyAxKTsKIAlyZHNfaXdfcmluZ19yZXNpemUoc2VuZF9yaW5nLCBzZW5kX3NpemUgLSAxKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmRtYS5jIGIvbmV0L3Jkcy9pd19yZG1hLmMKaW5kZXggNTk1MDllOS4uNmRlYWE3NyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19yZG1hLmMKKysrIGIvbmV0L3Jkcy9pd19yZG1hLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogI2Vsc2UKIAkJCS8qIEZJWE1FIC0gbmVlZHMgdG8gY29tcGFyZSB0aGUgbG9jYWwgYW5kIHJlbW90ZQogCQkJICogaXBhZGRyL3BvcnQgdHVwbGUsIGJ1dCB0aGUgaXBhZGRyIGlzIHRoZSBvbmx5Ci0JCQkgKiBhdmFpbGFibGUgaW5mb21hdGlvbiBpbiB0aGUgcmRzX3NvY2sgKGFzIHRoZSByZXN0IGFyZQorCQkJICogYXZhaWxhYmxlIGluZm9ybWF0aW9uIGluIHRoZSByZHNfc29jayAoYXMgdGhlIHJlc3QgYXJlCiAJCQkgKiB6ZXJvJ2VkLiAgSXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgcHJvcGVybHkgcG9wdWxhdGVkCiAJCQkgKiBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4uLgogCQkJICovCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3NlbmQuYyBiL25ldC9yZHMvaXdfc2VuZC5jCmluZGV4IDYyODBlYTAuLjU0NWQ4ZWUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXdfc2VuZC5jCisrKyBiL25ldC9yZHMvaXdfc2VuZC5jCkBAIC0zMDcsNyArMzA3LDcgQEAKICAqCiAgKiBDb25jZXB0dWFsbHksIHdlIGhhdmUgdHdvIGNvdW50ZXJzOgogICogIC0Jc2VuZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSdyZSBhbGxvd2VkCi0gKgl0byBzdWJtaXQgd2l0aG91dCBvdmVycnVuaW5nIHRoZSByZWNpZXZlcidzIHF1ZXVlLiBGb3IKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2VpdmVyJ3MgcXVldWUuIEZvcgogICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KICAqCiAgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggMzViOWMyZS4uZDU4YWU1ZiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKKysrIGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogfQogCiAvKgotICogV2UncmUgbWFraW5nIHRoZSBjb25jaW91cyB0cmFkZS1vZmYgaGVyZSB0byBvbmx5IHNlbmQgb25lIG1lc3NhZ2UKKyAqIFdlJ3JlIG1ha2luZyB0aGUgY29uc2Npb3VzIHRyYWRlLW9mZiBoZXJlIHRvIG9ubHkgc2VuZCBvbmUgbWVzc2FnZQogICogZG93biB0aGUgY29ubmVjdGlvbiBhdCBhIHRpbWUuCiAgKiAgIFBybzoKICAqICAgICAgLSB0eCBxdWV1ZWluZyBpcyBhIHNpbXBsZSBmaWZvIGxpc3QKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYyBiL25ldC9yb3NlL3Jvc2Vfcm91dGUuYwppbmRleCAwOGRjZDJmLi40NzljYWU1IDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCkBAIC01ODcsNyArNTg3LDcgQEAKIAogLyoKICAqCUNoZWNrIHRoYXQgdGhlIGRldmljZSBnaXZlbiBpcyBhIHZhbGlkIEFYLjI1IGludGVyZmFjZSB0aGF0IGlzICJ1cCIuCi0gKiAJY2FsbGVkIHdoaXRoIFJUTkwKKyAqIAljYWxsZWQgd2l0aCBSVE5MCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqcm9zZV9heDI1X2Rldl9maW5kKGNoYXIgKmRldm5hbWUpCiB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwppbmRleCAxNTg3M2UxLi4xNGI0MmY0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCisrKyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTk5OSw3ICs5OTksNyBAQAogCXN3aXRjaCAobi0+bmxtc2dfdHlwZSkgewogCWNhc2UgUlRNX05FV0FDVElPTjoKIAkJLyogd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBhbGwgb3RoZXIgZmxhZ3MKLQkJICogaW1wbHkgY3JlYXRlIG9ubHkgaWYgaXQgZG9lc250IGV4aXN0CisJCSAqIGltcGx5IGNyZWF0ZSBvbmx5IGlmIGl0IGRvZXNuJ3QgZXhpc3QKIAkJICogTm90ZSB0aGF0IENSRUFURSB8IEVYQ0wgaW1wbGllcyB0aGF0CiAJCSAqIGJ1dCBzaW5jZSB3ZSB3YW50IGF2b2lkIGFtYmlndWl0eSAoZWcgd2hlbiBmbGFncwogCQkgKiBpcyB6ZXJvKSB0aGVuIGp1c3Qgc2V0IHRoaXMKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwppbmRleCA1MGM3YzA2Li43YWZmZTlhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJCX0KIAkJCWlmIChvZmZzZXQgPiAwICYmIG9mZnNldCA+IHNrYi0+bGVuKSB7CiAJCQkJcHJfaW5mbygidGMgZmlsdGVyIHBlZGl0IgotCQkJCQkiIG9mZnNldCAlZCBjYW50IGV4Y2VlZCBwa3QgbGVuZ3RoICVkXG4iLAorCQkJCQkiIG9mZnNldCAlZCBjYW4ndCBleGNlZWQgcGt0IGxlbmd0aCAlZFxuIiwKIAkJCQkgICAgICAgb2Zmc2V0LCBza2ItPmxlbik7CiAJCQkJZ290byBiYWQ7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZW1fbWV0YS5jIGIvbmV0L3NjaGVkL2VtX21ldGEuYwppbmRleCBhNGRlNjdlLi40OTEzMGU4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1fbWV0YS5jCisrKyBiL25ldC9zY2hlZC9lbV9tZXRhLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqIAlvbiB0aGUgbWV0YSB0eXBlLiBPYnZpb3VzbHksIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgbXVzdCBhbHNvCiAgKiAJYmUgcHJvdmlkZWQgZm9yIG5vbi1udW1lcmljIHR5cGVzLgogICoKLSAqIAlBZGRpdGlvbmFseSwgdHlwZSBkZXBlbmRhbnQgbW9kaWZpZXJzIHN1Y2ggYXMgc2hpZnQgb3BlcmF0b3JzCisgKiAJQWRkaXRpb25hbGx5LCB0eXBlIGRlcGVuZGVudCBtb2RpZmllcnMgc3VjaCBhcyBzaGlmdCBvcGVyYXRvcnMKICAqIAlvciBtYXNrIG1heSBiZSBhcHBsaWVkIHRvIGV4dGVuZCB0aGUgZnVuY3Rpb25hbGl5LiBBcyBvZiBub3csCiAgKiAJdGhlIHZhcmlhYmxlIGxlbmd0aCB0eXBlIHN1cHBvcnRzIHNoaWZ0aW5nIHRoZSBieXRlIHN0cmluZyB0bwogICogCXRoZSByaWdodCwgZWF0aW5nIHVwIGFueSBudW1iZXIgb2Ygb2N0ZXRzIGFuZCB0aHVzIHN1cHBvcnRpbmcKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IGUxNDI5YTguLjI5Yjk0MmMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAgKiBmaWx0ZXJzIGluIHFkaXNjIGFuZCBpbiBpbm5lciBub2RlcyAoaWYgaGlnaGVyIGZpbHRlciBwb2ludHMgdG8gdGhlIGlubmVyCiAgKiBub2RlKS4gSWYgd2UgZW5kIHVwIHdpdGggY2xhc3NpZCBNQUpPUjowIHdlIGVucXVldWUgdGhlIHNrYiBpbnRvIHNwZWNpYWwKICAqIGludGVybmFsIGZpZm8gKGRpcmVjdCkuIFRoZXNlIHBhY2tldHMgdGhlbiBnbyBkaXJlY3RseSB0aHJ1LiBJZiB3ZSBzdGlsbAotICogaGF2ZSBubyB2YWxpZCBsZWFmIHdlIHRyeSB0byB1c2UgTUFKT1I6ZGVmYXVsdCBsZWFmLiBJdCBzdGlsbCB1bnN1Y2Nlc3NmdWxsCisgKiBoYXZlIG5vIHZhbGlkIGxlYWYgd2UgdHJ5IHRvIHVzZSBNQUpPUjpkZWZhdWx0IGxlYWYuIEl0IHN0aWxsIHVuc3VjY2Vzc2Z1bAogICogdGhlbiBmaW5pc2ggYW5kIHJldHVybiBkaXJlY3QgcXVldWUuCiAgKi8KICNkZWZpbmUgSFRCX0RJUkVDVCAoKHN0cnVjdCBodGJfY2xhc3MgKiktMUwpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggZWRiYmY3YS4uNjljMzVmNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJdTMyIHJuZCA9IG5ldF9yYW5kb20oKTsKIAogCS8qCi0JICogTWFrZXMgYSBjb21wYXJpc2lvbiBiZXR3ZWVuIHJuZCBhbmQgdGhlIHRyYW5zaXRpb24KKwkgKiBNYWtlcyBhIGNvbXBhcmlzb24gYmV0d2VlbiBybmQgYW5kIHRoZSB0cmFuc2l0aW9uCiAJICogcHJvYmFiaWxpdGllcyBvdXRnb2luZyBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLCB0aGVuIGRlY2lkZXMgdGhlCiAJICogbmV4dCBzdGF0ZSBhbmQgaWYgdGhlIG5leHQgcGFja2V0IGhhcyB0byBiZSB0cmFuc21pdHRlZCBvciBsb3N0LgogCSAqIFRoZSBmb3VyIHN0YXRlcyBjb3JyZXNwb25kIHRvOgpAQCAtMjEyLDkgKzIxMiw5IEBACiAgKiBHZW5lcmF0ZXMgbG9zc2VzIGFjY29yZGluZyB0byB0aGUgR2lsYmVydC1FbGxpb3QgbG9zcyBtb2RlbCBvcgogICogaXRzIHNwZWNpYWwgY2FzZXMgIChHaWxiZXJ0IG9yIFNpbXBsZSBHaWxiZXJ0KQogICoKLSAqIE1ha2VzIGEgY29tcGFyaXNpb24gYmV0d2VlbiByYW5kb20gbnVtYmVyIGFuZCB0aGUgdHJhbnNpdGlvbgorICogTWFrZXMgYSBjb21wYXJpc29uIGJldHdlZW4gcmFuZG9tIG51bWJlciBhbmQgdGhlIHRyYW5zaXRpb24KICAqIHByb2JhYmlsaXRpZXMgb3V0Z29pbmcgZnJvbSB0aGUgY3VycmVudCBzdGF0ZSwgdGhlbiBkZWNpZGVzIHRoZQotICogbmV4dCBzdGF0ZS4gQSBzZWNvbmQgcmFuZG9tIG51bWJlciBpcyBleHRyYWN0ZWQgYW5kIHRoZSBjb21wYXJpc2lvbgorICogbmV4dCBzdGF0ZS4gQSBzZWNvbmQgcmFuZG9tIG51bWJlciBpcyBleHRyYWN0ZWQgYW5kIHRoZSBjb21wYXJpc29uCiAgKiB3aXRoIHRoZSBsb3NzIHByb2JhYmlsaXR5IG9mIHRoZSBjdXJyZW50IHN0YXRlIGRlY2lkZXMgaWYgdGhlIG5leHQKICAqIHBhY2tldCB3aWxsIGJlIHRyYW5zbWl0dGVkIG9yIGxvc3QuCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggNmIwNDI4Ny4uMWEyMWM1NyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTU2OSw2ICs1NjksOCBAQAogCQlzY3RwX2Fzc29jX3NldF9wcmltYXJ5KGFzb2MsIHRyYW5zcG9ydCk7CiAJaWYgKGFzb2MtPnBlZXIuYWN0aXZlX3BhdGggPT0gcGVlcikKIAkJYXNvYy0+cGVlci5hY3RpdmVfcGF0aCA9IHRyYW5zcG9ydDsKKwlpZiAoYXNvYy0+cGVlci5yZXRyYW5fcGF0aCA9PSBwZWVyKQorCQlhc29jLT5wZWVyLnJldHJhbl9wYXRoID0gdHJhbnNwb3J0OwogCWlmIChhc29jLT5wZWVyLmxhc3RfZGF0YV9mcm9tID09IHBlZXIpCiAJCWFzb2MtPnBlZXIubGFzdF9kYXRhX2Zyb20gPSB0cmFuc3BvcnQ7CiAKQEAgLTEzMjMsNiArMTMyNSw4IEBACiAKIAlpZiAodCkKIAkJYXNvYy0+cGVlci5yZXRyYW5fcGF0aCA9IHQ7CisJZWxzZQorCQl0ID0gYXNvYy0+cGVlci5yZXRyYW5fcGF0aDsKIAogCVNDVFBfREVCVUdfUFJJTlRLX0lQQUREUigic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGg6YXNzb2NpYXRpb24iCiAJCQkJICIgJXAgYWRkcjogIiwKQEAgLTE1OTMsNyArMTU5Nyw3IEBACiAJc3RydWN0IHNjdHBfY2h1bmsgKmFjazsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqdG1wOwogCi0JLyogV2UgY2FuIHJlbW92ZSBhbGwgdGhlIGVudHJpZXMgZnJvbSB0aGUgcXVldWUgdXB0bworCS8qIFdlIGNhbiByZW1vdmUgYWxsIHRoZSBlbnRyaWVzIGZyb20gdGhlIHF1ZXVlIHVwIHRvCiAJICogdGhlICJQZWVyLVNlcXVlbmNlLU51bWJlciIuCiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFjaywgdG1wLCAmYXNvYy0+YXNjb25mX2Fja19saXN0LApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXV0aC5jIGIvbmV0L3NjdHAvYXV0aC5jCmluZGV4IGRkYmJmN2MuLjg2NWU2OGYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2F1dGguYworKysgYi9uZXQvc2N0cC9hdXRoLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXJldHVybiBuZXc7CiB9CiAKLS8qIEZyZWUgdGhlIHNoYXJlZCBrZXkgc3R1Y3R1cmUgKi8KKy8qIEZyZWUgdGhlIHNoYXJlZCBrZXkgc3RydWN0dXJlICovCiBzdGF0aWMgdm9pZCBzY3RwX2F1dGhfc2hrZXlfZnJlZShzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpCiB7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZzaF9rZXktPmtleV9saXN0KSk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAlrZnJlZShzaF9rZXkpOwogfQogCi0vKiBEZXN0b3J5IHRoZSBlbnRpcmUga2V5IGxpc3QuICBUaGlzIGlzIGRvbmUgZHVyaW5nIHRoZQorLyogRGVzdHJveSB0aGUgZW50aXJlIGtleSBsaXN0LiAgVGhpcyBpcyBkb25lIGR1cmluZyB0aGUKICAqIGFzc29jaW9uIGFuZCBlbmRwb2ludCBmcmVlIHByb2Nlc3MuCiAgKi8KIHZvaWQgc2N0cF9hdXRoX2Rlc3Ryb3lfa2V5cyhzdHJ1Y3QgbGlzdF9oZWFkICprZXlzKQpAQCAtMzI0LDcgKzMyNCw3IEBACiAJaWYgKCFwZWVyX2tleV92ZWN0b3IgfHwgIWxvY2FsX2tleV92ZWN0b3IpCiAJCWdvdG8gb3V0OwogCi0JLyogRmlndXJlIG91dCB0aGUgb3JkZXIgaW4gd2ljaCB0aGUga2V5X3ZlY3RvcnMgd2lsbCBiZQorCS8qIEZpZ3VyZSBvdXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBrZXlfdmVjdG9ycyB3aWxsIGJlCiAJICogYWRkZWQgdG8gdGhlIGVuZHBvaW50IHNoYXJlZCBrZXkuCiAJICogU0NUUC1BVVRILCBTZWN0aW9uIDYuMToKIAkgKiAgIFRoaXMgaXMgcGVyZm9ybWVkIGJ5IHNlbGVjdGluZyB0aGUgbnVtZXJpY2FsbHkgc21hbGxlciBrZXkKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IDgyNjY2MWIuLjU0MzZjNjkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAKICogICAgYXNzb2NpYXRpb24uCiAqCiAqIFRoaXMgbWVhbnMgdGhhdCBhbnkgY2h1bmtzIHRoYXQgY2FuIGhlbHAgdXMgaWRlbnRpZnkgdGhlIGFzc29jaWF0aW9uIG5lZWQKLSogdG8gYmUgbG9va2VkIGF0IHRvIGZpbmQgdGhpcyBhc3NvY2F0aW9uLgorKiB0byBiZSBsb29rZWQgYXQgdG8gZmluZCB0aGlzIGFzc29jaWF0aW9uLgogKi8KIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqX19zY3RwX3Jjdl93YWxrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqbGFkZHIsCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jCmluZGV4IDYwNjAwZDMuLmI0ZjNjZjAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHB1dC5jCisrKyBiL25ldC9zY3RwL291dHB1dC5jCkBAIC01MTAsNyArNTEwLDcgQEAKIAkJc2gtPmNoZWNrc3VtID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOwogCX0gZWxzZSB7CiAJCWlmIChkc3QtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NDVFBfQ1NVTSkgewotCQkJLyogbm8gbmVlZCB0byBzZWVkIHBzdWVkbyBjaGVja3N1bSBmb3IgU0NUUCAqLworCQkJLyogbm8gbmVlZCB0byBzZWVkIHBzZXVkbyBjaGVja3N1bSBmb3IgU0NUUCAqLwogCQkJbnNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAkJCW5za2ItPmNzdW1fc3RhcnQgPSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIobnNrYikgLQogCQkJICAgICAgICAgICAgICAgICAgICBuc2tiLT5oZWFkKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IDI2ZGMwMDUxLi5iZjkyYTViIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTE3NywxMyArMTc3LDEzIEBACiAgKiAzKSBJZiB0aGUgbWlzc2luZyByZXBvcnQgY291bnQgZm9yIFRTTiB0IGlzIHRvIGJlCiAgKiBpbmNyZW1lbnRlZCBhY2NvcmRpbmcgdG8gW1JGQzI5NjBdIGFuZAogICogW1NDVFBfU1RFV0FSVC0yMDAyXSwgYW5kIENIQU5HRU9WRVJfQUNUSVZFIGlzIHNldCwKLSAqIHRoZW4gdGhlIHNlbmRlciBNVVNUIGZ1dGhlciBleGVjdXRlIHN0ZXBzIDMuMSBhbmQKKyAqIHRoZW4gdGhlIHNlbmRlciBNVVNUIGZ1cnRoZXIgZXhlY3V0ZSBzdGVwcyAzLjEgYW5kCiAgKiAzLjIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtaXNzaW5nIHJlcG9ydCBjb3VudCBmb3IKICAqIFRTTiB0IFNIT1VMRCBOT1QgYmUgaW5jcmVtZW50ZWQuCiAgKgogICogMy4zKSBJZiAzLjEgYW5kIDMuMiBkbyBub3QgZGljdGF0ZSB0aGF0IHRoZSBtaXNzaW5nCiAgKiByZXBvcnQgY291bnQgZm9yIHQgc2hvdWxkIG5vdCBiZSBpbmNyZW1lbnRlZCwgdGhlbgotICogdGhlIHNlbmRlciBTT1VMRCBpbmNyZW1lbnQgbWlzc2luZyByZXBvcnQgY291bnQgZm9yCisgKiB0aGUgc2VuZGVyIFNIT1VMRCBpbmNyZW1lbnQgbWlzc2luZyByZXBvcnQgY291bnQgZm9yCiAgKiB0IChhY2NvcmRpbmcgdG8gW1JGQzI5NjBdIGFuZCBbU0NUUF9TVEVXQVJUXzIwMDJdKS4KICAqLwogc3RhdGljIGlubGluZSBpbnQgc2N0cF9jYWNjX3NraXAoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpwcmltYXJ5LApAQCAtODQzLDcgKzg0Myw3IEBACiAJCWNhc2UgU0NUUF9DSURfRUNOX0NXUjoKIAkJY2FzZSBTQ1RQX0NJRF9BU0NPTkZfQUNLOgogCQkJb25lX3BhY2tldCA9IDE7Ci0JCQkvKiBGYWxsIHRocm91Z2h0ICovCisJCQkvKiBGYWxsIHRocm91Z2ggKi8KIAogCQljYXNlIFNDVFBfQ0lEX1NBQ0s6CiAJCWNhc2UgU0NUUF9DSURfSEVBUlRCRUFUOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IGRlOTg2NjUuLmIzNDM0Y2MgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTMxMDYsMTAgKzMxMDYsMTAgQEAKIAogCS8qIGNyZWF0ZSBhbiBBU0NPTkZfQUNLIGNodW5rLgogCSAqIEJhc2VkIG9uIHRoZSBkZWZpbml0aW9ucyBvZiBwYXJhbWV0ZXJzLCB3ZSBrbm93IHRoYXQgdGhlIHNpemUgb2YKLQkgKiBBU0NPTkZfQUNLIHBhcmFtZXRlcnMgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdHdpY2Ugb2YgQVNDT05GCisJICogQVNDT05GX0FDSyBwYXJhbWV0ZXJzIGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGZvdXJmb2xkIG9mIEFTQ09ORgogCSAqIHBhcmFtZXRlcnMuCiAJICovCi0JYXNjb25mX2FjayA9IHNjdHBfbWFrZV9hc2NvbmZfYWNrKGFzb2MsIHNlcmlhbCwgY2h1bmtfbGVuICogMik7CisJYXNjb25mX2FjayA9IHNjdHBfbWFrZV9hc2NvbmZfYWNrKGFzb2MsIHNlcmlhbCwgY2h1bmtfbGVuICogNCk7CiAJaWYgKCFhc2NvbmZfYWNrKQogCQlnb3RvIGRvbmU7CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwppbmRleCBiMjFiMjE4Li41Zjg2ZWU0YiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJICogSWYgdGhlIHRpbWVyIHdhcyBhIGhlYXJ0YmVhdCwgd2Ugb25seSBpbmNyZW1lbnQgZXJyb3IgY291bnRzCiAJICogd2hlbiB3ZSBhbHJlYWR5IGhhdmUgYW4gb3V0c3RhbmRpbmcgSEVBUlRCRUFUIHRoYXQgaGFzIG5vdAogCSAqIGJlZW4gYWNrbm93bGVkZ2VkLgotCSAqIEFkZGl0aW9uYWx5LCBzb21lIHRyYW5wb3J0IHN0YXRlcyBpbmhpYml0IGVycm9yIGluY3JlbWVudHMuCisJICogQWRkaXRpb25hbGx5LCBzb21lIHRyYW5wb3J0IHN0YXRlcyBpbmhpYml0IGVycm9yIGluY3JlbWVudHMuCiAJICovCiAJaWYgKCFpc19oYikgewogCQlhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50Kys7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDRiNGViN2MuLjc2NzkyMDggMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAkJICoKIAkJICogVGhpcyBtZWFucyB0aGF0IGlmIHdlIG9ubHkgd2FudCB0byBhYm9ydCBhc3NvY2lhdGlvbnMKIAkJICogaW4gYW4gYXV0aGVudGljYXRlZCB3YXkgKGkuZSBBVVRIK0FCT1JUKSwgdGhlbiB3ZQotCQkgKiBjYW4ndCBkZXN0cm95IHRoaXMgYXNzb2NpYXRpb24ganVzdCBiZWN1YXNlIHRoZSBwYWNrZXQKKwkJICogY2FuJ3QgZGVzdHJveSB0aGlzIGFzc29jaWF0aW9uIGp1c3QgYmVjYXVzZSB0aGUgcGFja2V0CiAJCSAqIHdhcyBtYWxmb3JtZWQuCiAJCSAqLwogCQlpZiAoc2N0cF9hdXRoX3JlY3ZfY2lkKFNDVFBfQ0lEX0FCT1JULCBhc29jKSkKQEAgLTE1NDYsNyArMTU0Niw3IEBACiB9CiAKIC8qCi0gKiBIYW5kbGUgc2ltdWx0YW5vdXMgSU5JVC4KKyAqIEhhbmRsZSBzaW11bHRhbmVvdXMgSU5JVC4KICAqIFRoaXMgbWVhbnMgd2Ugc3RhcnRlZCBhbiBJTklUIGFuZCB0aGVuIHdlIGdvdCBhbiBJTklUIHJlcXVlc3QgZnJvbQogICogb3VyIHBlZXIuCiAgKgpAQCAtMjA3OSw3ICsyMDc5LDcgQEAKIAkgKiBSRkMgMjk2MCwgU2VjdGlvbiAzLjMuNwogCSAqICAgIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGFuIEFCT1JUIHdpdGggYSBmb3JtYXQgZXJyb3Igb3IgZm9yIGFuCiAJICogICAgYXNzb2NpYXRpb24gdGhhdCBkb2Vzbid0IGV4aXN0LCBpdCBNVVNUIHNpbGVudGx5IGRpc2NhcmQgaXQuCi0JICogQmVjYXN1ZSB0aGUgbGVuZ3RoIGlzICJpbnZhbGlkIiwgd2UgY2FuJ3QgcmVhbGx5IGRpc2NhcmQganVzdAorCSAqIEJlY2F1c2UgdGhlIGxlbmd0aCBpcyAiaW52YWxpZCIsIHdlIGNhbid0IHJlYWxseSBkaXNjYXJkIGp1c3QKIAkgKiBhcyB3ZSBkbyBub3Qga25vdyBpdHMgdHJ1ZSBsZW5ndGguICBTbywgdG8gYmUgc2FmZSwgZGlzY2FyZCB0aGUKIAkgKiBwYWNrZXQuCiAJICovCkBAIC0yMTIwLDcgKzIxMjAsNyBAQAogCSAqIFJGQyAyOTYwLCBTZWN0aW9uIDMuMy43CiAJICogICAgSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYW4gQUJPUlQgd2l0aCBhIGZvcm1hdCBlcnJvciBvciBmb3IgYW4KIAkgKiAgICBhc3NvY2lhdGlvbiB0aGF0IGRvZXNuJ3QgZXhpc3QsIGl0IE1VU1Qgc2lsZW50bHkgZGlzY2FyZCBpdC4KLQkgKiBCZWNhc3VlIHRoZSBsZW5ndGggaXMgImludmFsaWQiLCB3ZSBjYW4ndCByZWFsbHkgZGlzY2FyZCBqdXN0CisJICogQmVjYXVzZSB0aGUgbGVuZ3RoIGlzICJpbnZhbGlkIiwgd2UgY2FuJ3QgcmVhbGx5IGRpc2NhcmQganVzdAogCSAqIGFzIHdlIGRvIG5vdCBrbm93IGl0cyB0cnVlIGxlbmd0aC4gIFNvLCB0byBiZSBzYWZlLCBkaXNjYXJkIHRoZQogCSAqIHBhY2tldC4KIAkgKi8KQEAgLTIzODEsNyArMjM4MSw3IEBACiAJICogUkZDIDI5NjAsIFNlY3Rpb24gMy4zLjcKIAkgKiAgICBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhbiBBQk9SVCB3aXRoIGEgZm9ybWF0IGVycm9yIG9yIGZvciBhbgogCSAqICAgIGFzc29jaWF0aW9uIHRoYXQgZG9lc24ndCBleGlzdCwgaXQgTVVTVCBzaWxlbnRseSBkaXNjYXJkIGl0LgotCSAqIEJlY2FzdWUgdGhlIGxlbmd0aCBpcyAiaW52YWxpZCIsIHdlIGNhbid0IHJlYWxseSBkaXNjYXJkIGp1c3QKKwkgKiBCZWNhdXNlIHRoZSBsZW5ndGggaXMgImludmFsaWQiLCB3ZSBjYW4ndCByZWFsbHkgZGlzY2FyZCBqdXN0CiAJICogYXMgd2UgZG8gbm90IGtub3cgaXRzIHRydWUgbGVuZ3RoLiAgU28sIHRvIGJlIHNhZmUsIGRpc2NhcmQgdGhlCiAJICogcGFja2V0LgogCSAqLwpAQCAtMjQ0OCw3ICsyNDQ4LDcgQEAKIAkgKiBSRkMgMjk2MCwgU2VjdGlvbiAzLjMuNwogCSAqICAgIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGFuIEFCT1JUIHdpdGggYSBmb3JtYXQgZXJyb3Igb3IgZm9yIGFuCiAJICogICAgYXNzb2NpYXRpb24gdGhhdCBkb2Vzbid0IGV4aXN0LCBpdCBNVVNUIHNpbGVudGx5IGRpc2NhcmQgaXQuCi0JICogQmVjYXN1ZSB0aGUgbGVuZ3RoIGlzICJpbnZhbGlkIiwgd2UgY2FuJ3QgcmVhbGx5IGRpc2NhcmQganVzdAorCSAqIEJlY2F1c2UgdGhlIGxlbmd0aCBpcyAiaW52YWxpZCIsIHdlIGNhbid0IHJlYWxseSBkaXNjYXJkIGp1c3QKIAkgKiBhcyB3ZSBkbyBub3Qga25vdyBpdHMgdHJ1ZSBsZW5ndGguICBTbywgdG8gYmUgc2FmZSwgZGlzY2FyZCB0aGUKIAkgKiBwYWNrZXQuCiAJICovCkBAIC0zODU1LDcgKzM4NTUsNyBAQAogfQogCiAvKgotICogU0NUUC1BVVRIIFNlY3Rpb24gNi4zIFJlY2V2aW5nIGF1dGhlbnRpY2F0ZWQgY2h1a25zCisgKiBTQ1RQLUFVVEggU2VjdGlvbiA2LjMgUmVjZWl2aW5nIGF1dGhlbnRpY2F0ZWQgY2h1a25zCiAgKgogICogICAgVGhlIHJlY2VpdmVyIE1VU1QgdXNlIHRoZSBITUFDIGFsZ29yaXRobSBpbmRpY2F0ZWQgaW4gdGhlIEhNQUMKICAqICAgIElkZW50aWZpZXIgZmllbGQuICBJZiB0aGlzIGFsZ29yaXRobSB3YXMgbm90IHNwZWNpZmllZCBieSB0aGUKQEAgLTQyMzEsNyArNDIzMSw3IEBACiAJICoKIAkgKiBUaGlzIG1lYW5zIHRoYXQgaWYgd2Ugb25seSB3YW50IHRvIGFib3J0IGFzc29jaWF0aW9ucwogCSAqIGluIGFuIGF1dGhlbnRpY2F0ZWQgd2F5IChpLmUgQVVUSCtBQk9SVCksIHRoZW4gd2UKLQkgKiBjYW4ndCBkZXN0cm95IHRoaXMgYXNzb2NpYXRpb24ganVzdCBiZWN1YXNlIHRoZSBwYWNrZXQKKwkgKiBjYW4ndCBkZXN0cm95IHRoaXMgYXNzb2NpYXRpb24ganVzdCBiZWNhdXNlIHRoZSBwYWNrZXQKIAkgKiB3YXMgbWFsZm9ybWVkLgogCSAqLwogCWlmIChzY3RwX2F1dGhfcmVjdl9jaWQoU0NUUF9DSURfQUJPUlQsIGFzb2MpKQpAQCAtNDQwMiw5ICs0NDAyLDkgQEAKIH0KIAogLyogSGFuZGxlIHByb3RvY29sIHZpb2xhdGlvbiBvZiBhbiBpbnZhbGlkIGNodW5rIGJ1bmRsaW5nLiAgRm9yIGV4YW1wbGUsCi0gKiB3aGVuIHdlIGhhdmUgYW4gYXNzb2NpYXRpb24gYW5kIHdlIHJlY2lldmUgYnVuZGxlZCBJTklULUFDSywgb3IKKyAqIHdoZW4gd2UgaGF2ZSBhbiBhc3NvY2lhdGlvbiBhbmQgd2UgcmVjZWl2ZSBidW5kbGVkIElOSVQtQUNLLCBvcgogICogU0hVRE9XTi1DT01QTEVURSwgb3VyIHBlZXIgaXMgY2xlYXJseSB2aW9sYXRpb25nIHRoZSAiTVVTVCBOT1QgYnVuZGxlIgotICogc3RhdGVtZW50IGZyb20gdGhlIHNwZWNzLiAgQWRkaXRpbmFsbHksIHRoZXJlIG1pZ2h0IGJlIGFuIGF0dGFja2VyCisgKiBzdGF0ZW1lbnQgZnJvbSB0aGUgc3BlY3MuICBBZGRpdGlvbmFsbHksIHRoZXJlIG1pZ2h0IGJlIGFuIGF0dGFja2VyCiAgKiBvbiB0aGUgcGF0aCBhbmQgd2UgbWF5IG5vdCB3YW50IHRvIGNvbnRpbnVlIHRoaXMgY29tbXVuaWNhdGlvbi4KICAqLwogc3RhdGljIHNjdHBfZGlzcG9zaXRpb25fdCBzY3RwX3NmX3Zpb2xhdGlvbl9jaHVuaygKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggMzk1MWExMC4uZGViODJlMyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTExOTMsNyArMTE5Myw3IEBACiAgKiBhbiBlbmRwb2ludCB0aGF0IGlzIG11bHRpLWhvbWVkLiAgTXVjaCBsaWtlIHNjdHBfYmluZHgoKSB0aGlzIGNhbGwKICAqIGFsbG93cyBhIGNhbGxlciB0byBzcGVjaWZ5IG11bHRpcGxlIGFkZHJlc3NlcyBhdCB3aGljaCBhIHBlZXIgY2FuIGJlCiAgKiByZWFjaGVkLiAgVGhlIHdheSB0aGUgU0NUUCBzdGFjayB1c2VzIHRoZSBsaXN0IG9mIGFkZHJlc3NlcyB0byBzZXQgdXAKLSAqIHRoZSBhc3NvY2lhdGlvbiBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRhbnQuICBUaGlzIGZ1bmN0aW9uIG9ubHkKKyAqIHRoZSBhc3NvY2lhdGlvbiBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBUaGlzIGZ1bmN0aW9uIG9ubHkKICAqIHNwZWNpZmllcyB0aGF0IHRoZSBzdGFjayB3aWxsIHRyeSB0byBtYWtlIHVzZSBvZiBhbGwgdGhlIGFkZHJlc3NlcyBpbgogICogdGhlIGxpc3Qgd2hlbiBuZWVkZWQuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmMKaW5kZXggYWE3MmU4OS4uNjFiMWY1YSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdWxwZXZlbnQuYworKysgYi9uZXQvc2N0cC91bHBldmVudC5jCkBAIC01NTQsNyArNTU0LDcgQEAKIAltZW1jcHkoJnNzZi0+c3NmX2luZm8sICZjaHVuay0+c2luZm8sIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7CiAKIAkvKiBQZXIgVFNWV0cgZGlzY3Vzc2lvbiB3aXRoIFJhbmR5LiBBbGxvdyB0aGUgYXBwbGljYXRpb24gdG8KLQkgKiByZXNzZW1ibGUgYSBmcmFnbWVudGVkIG1lc3NhZ2UuCisJICogcmVhc3NlbWJsZSBhIGZyYWdtZW50ZWQgbWVzc2FnZS4KIAkgKi8KIAlzc2YtPnNzZl9pbmZvLnNpbmZvX2ZsYWdzID0gY2h1bmstPmNodW5rX2hkci0+ZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscHF1ZXVlLmMgYi9uZXQvc2N0cC91bHBxdWV1ZS5jCmluZGV4IDE3Njc4MTguLmYyZDFkZTcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvdWxwcXVldWUuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogSWYgZnJhZ21lbnQgaW50ZXJsZWF2ZSBpcyBlbmFibGVkLCB3ZQotCQkJICogY2FuIHF1ZXVlIHRoaXMgdG8gdGhlIHJlY2lldmUgcXVldWUgaW5zdGVhZAorCQkJICogY2FuIHF1ZXVlIHRoaXMgdG8gdGhlIHJlY2VpdmUgcXVldWUgaW5zdGVhZAogCQkJICogb2YgdGhlIGxvYmJ5LgogCQkJICovCiAJCQlpZiAoc2N0cF9zayhzayktPmZyYWdfaW50ZXJsZWF2ZSkKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCA1MjEyNDQ3Li4zMTBkMTZiIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0yOTg2LDcgKzI5ODYsNyBAQAogCiAvKiBTaW5jZSBvbGQgc3R5bGUgYnJpZGdlIGlvY3RsJ3MgZW5kdXAgdXNpbmcgU0lPQ0RFVlBSSVZBVEUKICAqIGZvciBzb21lIG9wZXJhdGlvbnM7IHRoaXMgZm9yY2VzIHVzZSBvZiB0aGUgbmV3ZXIgYnJpZGdlLXV0aWxzIHRoYXQKLSAqIHVzZSBjb21wYXRpYWJsZSBpb2N0bHMKKyAqIHVzZSBjb21wYXRpYmxlIGlvY3RscwogICovCiBzdGF0aWMgaW50IG9sZF9icmlkZ2VfaW9jdGwoY29tcGF0X3Vsb25nX3QgX191c2VyICphcmdwKQogewpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9LY29uZmlnIGIvbmV0L3N1bnJwYy9LY29uZmlnCmluZGV4IDg4NzNmZDguLmIyMTk4ZTYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvS2NvbmZpZworKysgYi9uZXQvc3VucnBjL0tjb25maWcKQEAgLTE4LDE0ICsxOCwxMyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIFJQQ1NFQ19HU1NfS1JCNQotCXRyaXN0YXRlCisJdHJpc3RhdGUgIlNlY3VyZSBSUEM6IEtlcmJlcm9zIFYgbWVjaGFuaXNtIgogCWRlcGVuZHMgb24gU1VOUlBDICYmIENSWVBUTwotCXByb21wdCAiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc20iIGlmICEoTkZTX1Y0IHx8IE5GU0RfVjQpCisJZGVwZW5kcyBvbiBDUllQVE9fTUQ1ICYmIENSWVBUT19ERVMgJiYgQ1JZUFRPX0NCQyAmJiBDUllQVE9fQ1RTCisJZGVwZW5kcyBvbiBDUllQVE9fRUNCICYmIENSWVBUT19ITUFDICYmIENSWVBUT19TSEExICYmIENSWVBUT19BRVMKKwlkZXBlbmRzIG9uIENSWVBUT19BUkM0CiAJZGVmYXVsdCB5CiAJc2VsZWN0IFNVTlJQQ19HU1MKLQlzZWxlY3QgQ1JZUFRPX01ENQotCXNlbGVjdCBDUllQVE9fREVTCi0Jc2VsZWN0IENSWVBUT19DQkMKIAloZWxwCiAJICBDaG9vc2UgWSBoZXJlIHRvIGVuYWJsZSBTZWN1cmUgUlBDIHVzaW5nIHRoZSBLZXJiZXJvcyB2ZXJzaW9uIDUKIAkgIEdTUy1BUEkgbWVjaGFuaXNtIChSRkMgMTk2NCkuCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKaW5kZXggZjM5MTRkMC4uMzM5YmE2NCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCXdhcm5fZ3NzZCgpOwogCQl0YXNrLT50a190aW1lb3V0ID0gMTUqSFo7CiAJCXJwY19zbGVlcF9vbigmcGlwZV92ZXJzaW9uX3JwY193YWl0cXVldWUsIHRhc2ssIE5VTEwpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FQUdBSU47CiAJfQogCWlmIChJU19FUlIoZ3NzX21zZykpIHsKIAkJZXJyID0gUFRSX0VSUihnc3NfbXNnKTsKQEAgLTU2MywxMCArNTYzLDEyIEBACiAJaWYgKFBUUl9FUlIoZ3NzX21zZykgPT0gLUVBR0FJTikgewogCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwaXBlX3ZlcnNpb25fd2FpdHF1ZXVlLAogCQkJCXBpcGVfdmVyc2lvbiA+PSAwLCAxNSpIWik7CisJCWlmIChwaXBlX3ZlcnNpb24gPCAwKSB7CisJCQl3YXJuX2dzc2QoKTsKKwkJCWVyciA9IC1FQUNDRVM7CisJCX0KIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQlpZiAocGlwZV92ZXJzaW9uIDwgMCkKLQkJCXdhcm5fZ3NzZCgpOwogCQlnb3RvIHJldHJ5OwogCX0KIAlpZiAoSVNfRVJSKGdzc19tc2cpKSB7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jCmluZGV4IDkwMjJmMGEuLjBhOWEyZWMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jCkBAIC00MjcsNyArNDI3LDcgQEAKIGNvbnRleHRfZGVyaXZlX2tleXNfcmM0KHN0cnVjdCBrcmI1X2N0eCAqY3R4KQogewogCXN0cnVjdCBjcnlwdG9faGFzaCAqaG1hYzsKLQlzdGF0aWMgY29uc3QgY2hhciBzaWdrZXljb25zdGFudFtdID0gInNpZ25hdHVyZWtleSI7CisJY2hhciBzaWdrZXljb25zdGFudFtdID0gInNpZ25hdHVyZWtleSI7CiAJaW50IHNsZW4gPSBzdHJsZW4oc2lna2V5Y29uc3RhbnQpICsgMTsJLyogaW5jbHVkZSBudWxsIHRlcm1pbmF0b3IgKi8KIAlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCmluZGV4IGJjZGFlNzguLjhkMGY3ZDMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKQEAgLTExMDEsNyArMTEwMSw3IEBACiAKIAkvKiBjcmVkZW50aWFsIGlzOgogCSAqICAgdmVyc2lvbig9PTEpLCBwcm9jKDAsMSwyLDMpLCBzZXEsIHNlcnZpY2UgKDEsMiwzKSwgaGFuZGxlCi0JICogYXQgbGVhc3QgNSB1MzJzLCBhbmQgaXMgcHJlY2VlZGVkIGJ5IGxlbmd0aCwgc28gdGhhdCBtYWtlcyA2LgorCSAqIGF0IGxlYXN0IDUgdTMycywgYW5kIGlzIHByZWNlZGVkIGJ5IGxlbmd0aCwgc28gdGhhdCBtYWtlcyA2LgogCSAqLwogCiAJaWYgKGFyZ3YtPmlvdl9sZW4gPCA1ICogNCkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggZTdhOTZlNC4uOGQ4M2Y5ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTE1MDgsNyArMTUwOCwxMCBAQAogCQlpZiAoY2xudC0+Y2xfY2hhdHR5KQogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogc2VydmVyICVzIG5vdCByZXNwb25kaW5nLCB0aW1lZCBvdXRcbiIsCiAJCQkJY2xudC0+Y2xfcHJvdG5hbWUsIGNsbnQtPmNsX3NlcnZlcik7Ci0JCXJwY19leGl0KHRhc2ssIC1FSU8pOworCQlpZiAodGFzay0+dGtfZmxhZ3MgJiBSUENfVEFTS19USU1FT1VUKQorCQkJcnBjX2V4aXQodGFzaywgLUVUSU1FRE9VVCk7CisJCWVsc2UKKwkJCXJwY19leGl0KHRhc2ssIC1FSU8pOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IDk0OTRjMzcuLmNlNWViNjggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC05MDYsNiArOTA2LDcgQEAKIAl9CiAKIAlkcHJpbnRrKCJSUEM6ICU1dSB4bWl0IGNvbXBsZXRlXG4iLCB0YXNrLT50a19waWQpOworCXRhc2stPnRrX2ZsYWdzIHw9IFJQQ19UQVNLX1NFTlQ7CiAJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiAKIAl4cHJ0LT5vcHMtPnNldF9yZXRyYW5zX3RpbWVvdXQodGFzayk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKaW5kZXggMWUzMzZhMC4uYmYwMDVkMyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jCisrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYwpAQCAtNTA0LDcgKzUwNCw3IEBACiAgKiAgIEVBR0FJTjoJVGhlIHNvY2tldCB3YXMgYmxvY2tlZCwgcGxlYXNlIGNhbGwgYWdhaW4gbGF0ZXIgdG8KICAqCQljb21wbGV0ZSB0aGUgcmVxdWVzdAogICogRU5PVENPTk46CUNhbGxlciBuZWVkcyB0byBpbnZva2UgY29ubmVjdCBsb2dpYyB0aGVuIGNhbGwgYWdhaW4KLSAqICAgIG90aGVyOglTb21lIG90aGVyIGVycm9yIG9jY3VyZWQsIHRoZSByZXF1ZXN0IHdhcyBub3Qgc2VudAorICogICAgb3RoZXI6CVNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQsIHRoZSByZXF1ZXN0IHdhcyBub3Qgc2VudAogICovCiBzdGF0aWMgaW50IHhzX3VkcF9zZW5kX3JlcXVlc3Qoc3RydWN0IHJwY190YXNrICp0YXNrKQogewpAQCAtNTkwLDcgKzU5MCw3IEBACiAgKiAgIEVBR0FJTjoJVGhlIHNvY2tldCB3YXMgYmxvY2tlZCwgcGxlYXNlIGNhbGwgYWdhaW4gbGF0ZXIgdG8KICAqCQljb21wbGV0ZSB0aGUgcmVxdWVzdAogICogRU5PVENPTk46CUNhbGxlciBuZWVkcyB0byBpbnZva2UgY29ubmVjdCBsb2dpYyB0aGVuIGNhbGwgYWdhaW4KLSAqICAgIG90aGVyOglTb21lIG90aGVyIGVycm9yIG9jY3VyZWQsIHRoZSByZXF1ZXN0IHdhcyBub3Qgc2VudAorICogICAgb3RoZXI6CVNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQsIHRoZSByZXF1ZXN0IHdhcyBub3Qgc2VudAogICoKICAqIFhYWDogSW4gdGhlIGNhc2Ugb2Ygc29mdCB0aW1lb3V0cywgc2hvdWxkIHdlIGV2ZW50dWFsbHkgZ2l2ZSB1cAogICoJaWYgc2VuZG1zZyBpcyBub3QgYWJsZSB0byBtYWtlIHByb2dyZXNzPwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jCmluZGV4IDQzNjM5ZmYuLmViZjMzOGYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYworKysgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTI0NzEsNyArMjQ3MSw3IEBACiAgKiBBIHBlbmRpbmcgbWVzc2FnZSBiZWluZyByZS1hc3NlbWJsZWQgbXVzdCBzdG9yZSBjZXJ0YWluIHZhbHVlcwogICogdG8gaGFuZGxlIHN1YnNlcXVlbnQgZnJhZ21lbnRzIGNvcnJlY3RseS4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMKICAqIGhlbHAgc3RvcmluZyB0aGVzZSB2YWx1ZXMgaW4gdW51c2VkLCBhdmFpbGFibGUgZmllbGRzIGluIHRoZQotICogcGVuZGluZyBtZXNzYWdlLiBUaGlzIG1ha2VzIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gdW5lY2Vzc2FyeS4KKyAqIHBlbmRpbmcgbWVzc2FnZS4gVGhpcyBtYWtlcyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHVubmVjZXNzYXJ5LgogICovCiAKIHN0YXRpYyB2b2lkIHNldF9sb25nX21zZ19zZXFubyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgc2Vxbm8pCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKaW5kZXggYzlmYTZkZi4uODAwMjVhMSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlidWYgPSBuYW1lZF9wcmVwYXJlX2J1ZihXSVRIRFJBV0FMLCBJVEVNX1NJWkUsIDApOwogCWlmICghYnVmKSB7Ci0JCXdhcm4oIldpdGhkcmF3bCBkaXN0cmlidXRpb24gZmFpbHVyZVxuIik7CisJCXdhcm4oIldpdGhkcmF3YWwgZGlzdHJpYnV0aW9uIGZhaWx1cmVcbiIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggMTY2M2UxYS4uYjFkNzViZSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCS8qCiAJCSAqIFRoaXMgbWF5IGxvb2sgbGlrZSBhbiBvZmYgYnkgb25lIGVycm9yIGJ1dCBpdCBpcyBhIGJpdCBtb3JlCiAJCSAqIHN1YnRsZS4gMTA4IGlzIHRoZSBsb25nZXN0IHZhbGlkIEFGX1VOSVggcGF0aCBmb3IgYSBiaW5kaW5nLgotCQkgKiBzdW5fcGF0aFsxMDhdIGRvZXNudCBhcyBzdWNoIGV4aXN0LiAgSG93ZXZlciBpbiBrZXJuZWwgc3BhY2UKKwkJICogc3VuX3BhdGhbMTA4XSBkb2Vzbid0IGFzIHN1Y2ggZXhpc3QuICBIb3dldmVyIGluIGtlcm5lbCBzcGFjZQogCQkgKiB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IGl0IGlzIGEgdmFsaWQgbWVtb3J5IGxvY2F0aW9uIGluIG91cgogCQkgKiBrZXJuZWwgYWRkcmVzcyBidWZmZXIuCiAJCSAqLwpAQCAtNTI0LDYgKzUyNCw4IEBACiAJCQkgICAgICBpbnQsIGludCk7CiBzdGF0aWMgaW50IHVuaXhfc2VxcGFja2V0X3NlbmRtc2coc3RydWN0IGtpb2NiICosIHN0cnVjdCBzb2NrZXQgKiwKIAkJCQkgIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90KTsKK3N0YXRpYyBpbnQgdW5peF9zZXFwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKiwgc3RydWN0IHNvY2tldCAqLAorCQkJCSAgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsIGludCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc3RyZWFtX29wcyA9IHsKIAkuZmFtaWx5ID0JUEZfVU5JWCwKQEAgLTU4Myw3ICs1ODUsNyBAQAogCS5zZXRzb2Nrb3B0ID0Jc29ja19ub19zZXRzb2Nrb3B0LAogCS5nZXRzb2Nrb3B0ID0Jc29ja19ub19nZXRzb2Nrb3B0LAogCS5zZW5kbXNnID0JdW5peF9zZXFwYWNrZXRfc2VuZG1zZywKLQkucmVjdm1zZyA9CXVuaXhfZGdyYW1fcmVjdm1zZywKKwkucmVjdm1zZyA9CXVuaXhfc2VxcGFja2V0X3JlY3Ztc2csCiAJLm1tYXAgPQkJc29ja19ub19tbWFwLAogCS5zZW5kcGFnZSA9CXNvY2tfbm9fc2VuZHBhZ2UsCiB9OwpAQCAtMTY5OSw2ICsxNzAxLDE4IEBACiAJcmV0dXJuIHVuaXhfZGdyYW1fc2VuZG1zZyhraW9jYiwgc29jaywgbXNnLCBsZW4pOwogfQogCitzdGF0aWMgaW50IHVuaXhfc2VxcGFja2V0X3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKworCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKQorCQlyZXR1cm4gLUVOT1RDT05OOworCisJcmV0dXJuIHVuaXhfZGdyYW1fcmVjdm1zZyhpb2NiLCBzb2NrLCBtc2csIHNpemUsIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgdW5peF9jb3B5X2FkZHIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHVuaXhfc29jayAqdSA9IHVuaXhfc2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMgYi9uZXQvd2Fucm91dGVyL3dhbnByb2MuYwppbmRleCAxMWYyNWM3Li5mMzQ2Mzk1IDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL3dhbnByb2MuYworKysgYi9uZXQvd2Fucm91dGVyL3dhbnByb2MuYwpAQCAtNTEsNyArNTEsNyBAQAogCiAvKgogICoJU3RydWN0dXJlcyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgL3Byb2MgZmlsZXN5c3RlbS4KLSAqCVJvdXRlciBjcmVhdGVzIGl0cyBvd24gZGlyZWN0b3J5IC9wcm9jL25ldC9yb3V0ZXIgd2l0aCB0aGUgZm9sb3dpbmcKKyAqCVJvdXRlciBjcmVhdGVzIGl0cyBvd24gZGlyZWN0b3J5IC9wcm9jL25ldC9yb3V0ZXIgd2l0aCB0aGUgZm9sbG93aW5nCiAgKgllbnRyaWVzOgogICoJY29uZmlnCQlkZXZpY2UgY29uZmlndXJhdGlvbgogICoJc3RhdHVzCQlnbG9iYWwgZGV2aWNlIHN0YXRpc3RpY3MKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCAzMzMyZDViLi5hYjgwMWExIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC04MDksNyArODA5LDcgQEAKIAlpZiAocikgewogCQkvKgogCQkgKiBXZSB3aWxsIGRpc2FibGUgYWxsIGNoYW5uZWxzIHRoYXQgZG8gbm90IG1hdGNoIG91cgotCQkgKiByZWNpZXZlZCByZWd1bGF0b3J5IHJ1bGUgdW5sZXNzIHRoZSBoaW50IGlzIGNvbWluZworCQkgKiByZWNlaXZlZCByZWd1bGF0b3J5IHJ1bGUgdW5sZXNzIHRoZSBoaW50IGlzIGNvbWluZwogCQkgKiBmcm9tIGEgQ291bnRyeSBJRSBhbmQgdGhlIENvdW50cnkgSUUgaGFkIG5vIGluZm9ybWF0aW9uCiAJCSAqIGFib3V0IGEgYmFuZC4gVGhlIElFRUUgODAyLjExIHNwZWMgYWxsb3dzIGZvciBhbiBBUAogCQkgKiB0byBzZW5kIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHJlZ3VsYXRvcnkgcnVsZXMgYWxsb3dlZCwKQEAgLTgzOCw3ICs4MzgsNyBAQAogCSAgICByZXF1ZXN0X3dpcGh5ICYmIHJlcXVlc3Rfd2lwaHkgPT0gd2lwaHkgJiYKIAkgICAgcmVxdWVzdF93aXBoeS0+ZmxhZ3MgJiBXSVBIWV9GTEFHX1NUUklDVF9SRUdVTEFUT1JZKSB7CiAJCS8qCi0JCSAqIFRoaXMgZ2F1cmFudGVlcyB0aGUgZHJpdmVyJ3MgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluCisJCSAqIFRoaXMgZ3VhcmFudGVlcyB0aGUgZHJpdmVyJ3MgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluCiAJCSAqIHdpbGwgYWx3YXlzIGJlIHVzZWQgYXMgYSBiYXNlIGZvciBmdXJ0aGVyIHJlZ3VsYXRvcnkKIAkJICogc2V0dGluZ3MKIAkJICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwppbmRleCBlYTQyN2Y0Li5mYmY2ZjMzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jCisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmMKQEAgLTEyNCw2ICsxMjQsMTUgQEAKIH0KIAogLyogbXVzdCBob2xkIGRldi0+YnNzX2xvY2shICovCitzdGF0aWMgdm9pZCBfX2NmZzgwMjExX3VubGlua19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MpCit7CisJbGlzdF9kZWxfaW5pdCgmYnNzLT5saXN0KTsKKwlyYl9lcmFzZSgmYnNzLT5yYm4sICZkZXYtPmJzc190cmVlKTsKKwlrcmVmX3B1dCgmYnNzLT5yZWYsIGJzc19yZWxlYXNlKTsKK30KKworLyogbXVzdCBob2xkIGRldi0+YnNzX2xvY2shICovCiB2b2lkIGNmZzgwMjExX2Jzc19leHBpcmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqdG1wOwpAQCAtMTM0LDkgKzE0Myw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+dHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKIAkJCWNvbnRpbnVlOwotCQlsaXN0X2RlbCgmYnNzLT5saXN0KTsKLQkJcmJfZXJhc2UoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7Ci0JCWtyZWZfcHV0KCZic3MtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlfX2NmZzgwMjExX3VubGlua19ic3MoZGV2LCBic3MpOwogCQlleHBpcmVkID0gdHJ1ZTsKIAl9CiAKQEAgLTU4NSwxNiArNTkyLDIzIEBACiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzOwogCXNpemVfdCBpZWxlbiA9IGxlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKIAkJCQkgICAgICB1LnByb2JlX3Jlc3AudmFyaWFibGUpOwotCXNpemVfdCBwcml2c3ogPSB3aXBoeS0+YnNzX3ByaXZfc2l6ZTsKKwlzaXplX3QgcHJpdnN6OworCisJaWYgKFdBUk5fT04oIW1nbXQpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChXQVJOX09OKCF3aXBoeSkpCisJCXJldHVybiBOVUxMOwogCiAJaWYgKFdBUk5fT04od2lwaHktPnNpZ25hbF90eXBlID09IENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQyAmJgogCSAgICAgICAgICAgIChzaWduYWwgPCAwIHx8IHNpZ25hbCA+IDEwMCkpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChXQVJOX09OKCFtZ210IHx8ICF3aXBoeSB8fAotCQkgICAgbGVuIDwgb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LnByb2JlX3Jlc3AudmFyaWFibGUpKSkKKwlpZiAoV0FSTl9PTihsZW4gPCBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUucHJvYmVfcmVzcC52YXJpYWJsZSkpKQogCQlyZXR1cm4gTlVMTDsKIAorCXByaXZzeiA9IHdpcGh5LT5ic3NfcHJpdl9zaXplOworCiAJcmVzID0ga3phbGxvYyhzaXplb2YoKnJlcykgKyBwcml2c3ogKyBpZWxlbiwgZ2ZwKTsKIAlpZiAoIXJlcykKIAkJcmV0dXJuIE5VTEw7CkBAIC02NjIsMTEgKzY3Niw4IEBACiAKIAlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmYnNzLT5saXN0KSkgewotCQlsaXN0X2RlbF9pbml0KCZic3MtPmxpc3QpOworCQlfX2NmZzgwMjExX3VubGlua19ic3MoZGV2LCBic3MpOwogCQlkZXYtPmJzc19nZW5lcmF0aW9uKys7Ci0JCXJiX2VyYXNlKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOwotCi0JCWtyZWZfcHV0KCZic3MtPnJlZiwgYnNzX3JlbGVhc2UpOwogCX0KIAlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMgYi9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKaW5kZXggNDA2MjA3NS4uZjc3ZTRlNyAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCisrKyBiL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYwpAQCAtMzEsNyArMzEsNyBAQAogICogeDI1X3BhcnNlX2ZhY2lsaXRpZXMgLSBQYXJzZSBmYWNpbGl0aWVzIGZyb20gc2tiIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0cwogICoKICAqIEBza2I6IHNrX2J1ZmYgdG8gcGFyc2UKLSAqIEBmYWNpbGl0aWVzOiBSZWd1bGFyIGZhY2lsaXRlcywgdXBkYXRlZCBhcyBmYWNpbGl0aWVzIGFyZSBmb3VuZAorICogQGZhY2lsaXRpZXM6IFJlZ3VsYXIgZmFjaWxpdGllcywgdXBkYXRlZCBhcyBmYWNpbGl0aWVzIGFyZSBmb3VuZAogICogQGR0ZV9mYWNzOiBJVFUgRFRFIGZhY2lsaXRpZXMsIHVwZGF0ZWQgYXMgRFRFIGZhY2lsaXRpZXMgYXJlIGZvdW5kCiAgKiBAdmNfZmFjX21hc2s6IG1hc2sgaXMgdXBkYXRlZCB3aXRoIGFsbCBmYWNpbGl0aWVzIGZvdW5kCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfZm9yd2FyZC5jIGIvbmV0L3gyNS94MjVfZm9yd2FyZC5jCmluZGV4IDI1YTgxMDcuLmM1NDFiNjIgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2ZvcndhcmQuYworKysgYi9uZXQveDI1L3gyNV9mb3J3YXJkLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAkJZ290byBvdXRfbm9fcm91dGU7CiAKIAlpZiAoKG5laWdoX25ldyA9IHgyNV9nZXRfbmVpZ2gocnQtPmRldikpID09IE5VTEwpIHsKLQkJLyogVGhpcyBzaG91bGRudCBoYXBwZW4sIGlmIGl0IG9jY3VycyBzb21laG93CisJCS8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgaWYgaXQgb2NjdXJzIHNvbWVob3cKIAkJICogZG8gc29tZXRoaW5nIHNlbnNpYmxlCiAJCSAqLwogCQlnb3RvIG91dF9wdXRfcm91dGU7CkBAIC00NSw3ICs0NSw3IEBACiAJfQogCiAJLyogUmVtb3RlIGVuZCBzZW5kaW5nIGEgY2FsbCByZXF1ZXN0IG9uIGFuIGFscmVhZHkKLQkgKiBlc3RhYmxpc2hlZCBMQ0k/IEl0IHNob3VsZG50IGhhcHBlbiwganVzdCBpbiBjYXNlLi4KKwkgKiBlc3RhYmxpc2hlZCBMQ0k/IEl0IHNob3VsZG4ndCBoYXBwZW4sIGp1c3QgaW4gY2FzZS4uCiAJICovCiAJcmVhZF9sb2NrX2JoKCZ4MjVfZm9yd2FyZF9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2goZW50cnksICZ4MjVfZm9yd2FyZF9saXN0KSB7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCAxNTc5MmQ4Li5iNGQ3NDVlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTE0MDYsNiArMTQwNiw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0geHBfbmV0KHBvbGljeSk7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHhmcm1fbW9kZSAqaW5uZXJfbW9kZTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfcHJldiA9IE5VTEw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0MCA9IE5VTEw7CiAJaW50IGkgPSAwOwpAQCAtMTQzNiw2ICsxNDM3LDE3IEBACiAJCQlnb3RvIHB1dF9zdGF0ZXM7CiAJCX0KIAorCQlpZiAoeGZybVtpXS0+c2VsLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKKwkJCWlubmVyX21vZGUgPSB4ZnJtX2lwMmlubmVyX21vZGUoeGZybVtpXSwKKwkJCQkJCQl4ZnJtX2FmMnByb3RvKGZhbWlseSkpOworCQkJaWYgKCFpbm5lcl9tb2RlKSB7CisJCQkJZXJyID0gLUVBRk5PU1VQUE9SVDsKKwkJCQlkc3RfcmVsZWFzZShkc3QpOworCQkJCWdvdG8gcHV0X3N0YXRlczsKKwkJCX0KKwkJfSBlbHNlCisJCQlpbm5lcl9tb2RlID0geGZybVtpXS0+aW5uZXJfbW9kZTsKKwogCQlpZiAoIWRzdF9wcmV2KQogCQkJZHN0MCA9IGRzdDE7CiAJCWVsc2UgewpAQCAtMTQ2NCw3ICsxNDc2LDcgQEAKIAkJZHN0MS0+bGFzdHVzZSA9IG5vdzsKIAogCQlkc3QxLT5pbnB1dCA9IGRzdF9kaXNjYXJkOwotCQlkc3QxLT5vdXRwdXQgPSB4ZnJtW2ldLT5vdXRlcl9tb2RlLT5hZmluZm8tPm91dHB1dDsKKwkJZHN0MS0+b3V0cHV0ID0gaW5uZXJfbW9kZS0+YWZpbmZvLT5vdXRwdXQ7CiAKIAkJZHN0MS0+bmV4dCA9IGRzdF9wcmV2OwogCQlkc3RfcHJldiA9IGRzdDE7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3JlcGxheS5jIGIvbmV0L3hmcm0veGZybV9yZXBsYXkuYwppbmRleCBmMjE4Mzg1Li40N2YxYjg2IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3JlcGxheS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKQEAgLTUzMiw5ICs1MzIsMTIgQEAKIAogCWlmIChyZXBsYXlfZXNuKSB7CiAJCWlmIChyZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93ID4KLQkJICAgIHJlcGxheV9lc24tPmJtcF9sZW4gKiBzaXplb2YoX191MzIpKQorCQkgICAgcmVwbGF5X2Vzbi0+Ym1wX2xlbiAqIHNpemVvZihfX3UzMikgKiA4KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmIHJlcGxheV9lc24tPnJlcGxheV93aW5kb3cgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmIHgtPnJlcGxheV9lc24pCiAJCXgtPnJlcGwgPSAmeGZybV9yZXBsYXlfZXNuOwogCWVsc2UKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggM2QxNWQzZS4uYzY1OGNiMyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTEyNCw2ICsxMjQsOSBAQAogewogCXN0cnVjdCBubGF0dHIgKnJ0ID0gYXR0cnNbWEZSTUFfUkVQTEFZX0VTTl9WQUxdOwogCisJaWYgKChwLT5mbGFncyAmIFhGUk1fU1RBVEVfRVNOKSAmJiAhcnQpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCFydCkKIAkJcmV0dXJuIDA7CiAKQEAgLTg5NCw3ICs4OTcsNyBAQAogCXUzMiAqZjsKIAogCW5saCA9IG5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCBYRlJNX01TR19ORVdTUERJTkZPLCBzaXplb2YodTMyKSwgMCk7Ci0JaWYgKG5saCA9PSBOVUxMKSAvKiBzaG91bGRudCByZWFsbHkgaGFwcGVuIC4uLiAqLworCWlmIChubGggPT0gTlVMTCkgLyogc2hvdWxkbid0IHJlYWxseSBoYXBwZW4gLi4uICovCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKIAlmID0gbmxtc2dfZGF0YShubGgpOwpAQCAtOTU0LDcgKzk1Nyw3IEBACiAJdTMyICpmOwogCiAJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIFhGUk1fTVNHX05FV1NBRElORk8sIHNpemVvZih1MzIpLCAwKTsKLQlpZiAobmxoID09IE5VTEwpIC8qIHNob3VsZG50IHJlYWxseSBoYXBwZW4gLi4uICovCisJaWYgKG5saCA9PSBOVUxMKSAvKiBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiAuLi4gKi8KIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogCWYgPSBubG1zZ19kYXRhKG5saCk7CkBAIC0xMzYxLDcgKzEzNjQsNyBAQAogCWlmICgheHApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBzaG91bGRudCBleGNsIGJlIGJhc2VkIG9uIG5saCBmbGFncz8/CisJLyogc2hvdWxkbid0IGV4Y2wgYmUgYmFzZWQgb24gbmxoIGZsYWdzPz8KIAkgKiBBaGEhIHRoaXMgaXMgYW50aS1uZXRsaW5rIHJlYWxseSBpLmUgIG1vcmUgcGZrZXkgZGVyaXZlZAogCSAqIGluIG5ldGxpbmsgZXhjbCBpcyBhIGZsYWcgYW5kIHlvdSB3b3VsZG50IG5lZWQKIAkgKiBhIHR5cGUgWEZSTV9NU0dfVVBEUE9MSUNZIC0gSkhTICovCmRpZmYgLS1naXQgYS9zYW1wbGVzL0tjb25maWcgYi9zYW1wbGVzL0tjb25maWcKaW5kZXggZTAzY2YwZS4uNDEwNjNlNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9LY29uZmlnCisrKyBiL3NhbXBsZXMvS2NvbmZpZwpAQCAtNTUsNyArNTUsNyBAQAogCSAgSWYgaW4gZG91YnQsIHNheSAiTiIgaGVyZS4KIAogY29uZmlnIFNBTVBMRV9LREIKLQl0cmlzdGF0ZSAiQnVpbGQga2RiIGNvbW1hbmQgZXhtYXBsZSAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCisJdHJpc3RhdGUgIkJ1aWxkIGtkYiBjb21tYW5kIGV4YW1wbGUgLS0gbG9hZGFibGUgbW9kdWxlcyBvbmx5IgogCWRlcGVuZHMgb24gS0dEQl9LREIgJiYgbQogCWhlbHAKIAkgIEJ1aWxkIGFuIGV4YW1wbGUgb2YgaG93IHRvIGR5bmFtaWNhbGx5IGFkZCB0aGUgaGVsbG8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaHdfYnJlYWtwb2ludC9kYXRhX2JyZWFrcG9pbnQuYyBiL3NhbXBsZXMvaHdfYnJlYWtwb2ludC9kYXRhX2JyZWFrcG9pbnQuYwppbmRleCBiZDBmMzM3Li4wNjM2NTM5IDEwMDY0NAotLS0gYS9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvZGF0YV9icmVha3BvaW50LmMKKysrIGIvc2FtcGxlcy9od19icmVha3BvaW50L2RhdGFfYnJlYWtwb2ludC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKgogICogVGhpcyBmaWxlIGlzIGEga2VybmVsIG1vZHVsZSB0aGF0IHBsYWNlcyBhIGJyZWFrcG9pbnQgb3ZlciBrc3ltX25hbWUga2VybmVsCiAgKiB2YXJpYWJsZSB1c2luZyBIYXJkd2FyZSBCcmVha3BvaW50IHJlZ2lzdGVyLiBUaGUgY29ycmVzcG9uZGluZyBoYW5kbGVyIHdoaWNoCi0gKiBwcmludHMgYSBiYWNrdHJhY2UgaXMgaW52b2tlZCBldmVyeXRpbWUgYSB3cml0ZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG9uCisgKiBwcmludHMgYSBiYWNrdHJhY2UgaXMgaW52b2tlZCBldmVyeSB0aW1lIGEgd3JpdGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbgogICogdGhhdCB2YXJpYWJsZS4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwOQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0IGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CmluZGV4IDdkMjIwNTYuLjU2ZGZhZmMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAorKysgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKQEAgLTM1LDE0ICszNSwxNCBAQAogIyBLQlVJTERfTU9EUE9TVF9XQVJOIGNhbiBiZSBzZXQgdG8gYXZvaWQgZXJyb3Igb3V0IGluIGNhc2Ugb2YgdW5kZWZpbmVkCiAjIHN5bWJvbHMgaW4gdGhlIGZpbmFsIG1vZHVsZSBsaW5raW5nIHN0YWdlCiAjIEtCVUlMRF9NT0RQT1NUX05PRklOQUwgY2FuIGJlIHNldCB0byBza2lwIHRoZSBmaW5hbCBsaW5rIG9mIG1vZHVsZXMuCi0jIFRoaXMgaXMgc29sZWx5IHVzZWZ1bGwgdG8gc3BlZWQgdXAgdGVzdCBjb21waWxlcworIyBUaGlzIGlzIHNvbGVseSB1c2VmdWwgdG8gc3BlZWQgdXAgdGVzdCBjb21waWxlcwogUEhPTlkgOj0gX21vZHBvc3QKIF9tb2Rwb3N0OiBfX21vZHBvc3QKIAogaW5jbHVkZSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKIGluY2x1ZGUgc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQogCi0jIFdoZW4gYnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcyBsb2FkIHRoZSBLYnVpbGQgZmlsZSB0byByZXRyZWl2ZSBFWFRSQV9TWU1CT0xTIGluZm8KKyMgV2hlbiBidWlsZGluZyBleHRlcm5hbCBtb2R1bGVzIGxvYWQgdGhlIEtidWlsZCBmaWxlIHRvIHJldHJpZXZlIEVYVFJBX1NZTUJPTFMgaW5mbwogaWZuZXEgKCQoS0JVSUxEX0VYVE1PRCksKQogCiAjIHNldCBzcmMgKyBvYmogLSB0aGV5IG1heSBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIC5tb2QuYyBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggOGY5ZTM5NC4uZDg2NzA4MSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMTk0NiwxMyArMTk0NiwxMyBAQAogIyBwcmludGsgc2hvdWxkIHVzZSBLRVJOXyogbGV2ZWxzLiAgTm90ZSB0aGF0IGZvbGxvdyBvbiBwcmludGsncyBvbiB0aGUKICMgc2FtZSBsaW5lIGRvIG5vdCBuZWVkIGEgbGV2ZWwsIHNvIHdlIHVzZSB0aGUgY3VycmVudCBibG9jayBjb250ZXh0CiAjIHRvIHRyeSBhbmQgZmluZCBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgcHJpbnRrLiAgSW4gc3VtbWFyeSB0aGUgY3VycmVudAotIyBwcmludGsgaW5jbHVkZXMgYWxsIHByZWNlZWRpbmcgcHJpbnRrJ3Mgd2hpY2ggaGF2ZSBubyBuZXdsaW5lIG9uIHRoZSBlbmQuCisjIHByaW50ayBpbmNsdWRlcyBhbGwgcHJlY2VkaW5nIHByaW50aydzIHdoaWNoIGhhdmUgbm8gbmV3bGluZSBvbiB0aGUgZW5kLgogIyB3ZSBhc3N1bWUgdGhlIGZpcnN0IGJhZCBwcmludGsgaXMgdGhlIG9uZSB0byByZXBvcnQuCiAJCWlmICgkbGluZSA9fiAvXGJwcmludGtcKCg/IUtFUk5fKVxzKiIvKSB7CiAJCQlteSAkb2sgPSAwOwogCQkJZm9yIChteSAkbG4gPSAkbGluZW5yIC0gMTsgJGxuID49ICRmaXJzdF9saW5lOyAkbG4tLSkgewogCQkJCSNwcmludCAiQ0hFQ0s8JGxpbmVzWyRsbiAtIDFdXG4iOwotCQkJCSMgd2UgaGF2ZSBhIHByZWNlZWRpbmcgcHJpbnRrIGlmIGl0IGVuZHMKKwkJCQkjIHdlIGhhdmUgYSBwcmVjZWRpbmcgcHJpbnRrIGlmIGl0IGVuZHMKIAkJCQkjIHdpdGggIlxuIiBpZ25vcmUgaXQsIGVsc2UgaXQgaXMgdG8gYmxhbWUKIAkJCQlpZiAoJGxpbmVzWyRsbiAtIDFdID1+IG17XGJwcmludGtcKH0pIHsKIAkJCQkJaWYgKCRyYXdsaW5lc1skbG4gLSAxXSAhfiBte1xcbiJ9KSB7CkBAIC0yMDQ0LDcgKzIwNDQsNyBAQAogCQkJZm9yIChteSAkbiA9IDA7ICRuIDwgJCNlbGVtZW50czsgJG4gKz0gMikgewogCQkJCSRvZmYgKz0gbGVuZ3RoKCRlbGVtZW50c1skbl0pOwogCi0JCQkJIyBQaWNrIHVwIHRoZSBwcmVjZWVkaW5nIGFuZCBzdWNjZWVkaW5nIGNoYXJhY3RlcnMuCisJCQkJIyBQaWNrIHVwIHRoZSBwcmVjZWRpbmcgYW5kIHN1Y2NlZWRpbmcgY2hhcmFjdGVycy4KIAkJCQlteSAkY2EgPSBzdWJzdHIoJG9wbGluZSwgMCwgJG9mZik7CiAJCQkJbXkgJGNjID0gJyc7CiAJCQkJaWYgKGxlbmd0aCgkb3BsaW5lKSA+PSAoJG9mZiArIGxlbmd0aCgkZWxlbWVudHNbJG4gKyAxXSkpKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9saWJmZHQvbGliZmR0LmggYi9zY3JpcHRzL2R0Yy9saWJmZHQvbGliZmR0LmgKaW5kZXggY2U4MGU0Zi4uZmY2MjQ2ZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvbGliZmR0L2xpYmZkdC5oCisrKyBiL3NjcmlwdHMvZHRjL2xpYmZkdC9saWJmZHQuaApAQCAtNjEsNyArNjEsNyBAQAogI2RlZmluZSBGRFRfRVJSX05PVEZPVU5ECTEKIAkvKiBGRFRfRVJSX05PVEZPVU5EOiBUaGUgcmVxdWVzdGVkIG5vZGUgb3IgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgKi8KICNkZWZpbmUgRkRUX0VSUl9FWElTVFMJCTIKLQkvKiBGRFRfRVJSX0VYSVNUUzogQXR0ZW1wZWQgdG8gY3JlYXRlIGEgbm9kZSBvciBwcm9wZXJ0eSB3aGljaAorCS8qIEZEVF9FUlJfRVhJU1RTOiBBdHRlbXB0ZWQgdG8gY3JlYXRlIGEgbm9kZSBvciBwcm9wZXJ0eSB3aGljaAogCSAqIGFscmVhZHkgZXhpc3RzICovCiAjZGVmaW5lIEZEVF9FUlJfTk9TUEFDRQkJMwogCS8qIEZEVF9FUlJfTk9TUEFDRTogT3BlcmF0aW9uIG5lZWRlZCB0byBleHBhbmQgdGhlIGRldmljZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvbGl2ZXRyZWUuYyBiL3NjcmlwdHMvZHRjL2xpdmV0cmVlLmMKaW5kZXggYzkyMDlkNS4uMjZkMGUxZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvbGl2ZXRyZWUuYworKysgYi9zY3JpcHRzL2R0Yy9saXZldHJlZS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJCX0KIAkJfQogCi0JCS8qIGlmIG5vIGNvbGxpc2lvbiBvY2N1cmVkLCBhZGQgY2hpbGQgdG8gdGhlIG9sZCBub2RlLiAqLworCQkvKiBpZiBubyBjb2xsaXNpb24gb2NjdXJyZWQsIGFkZCBjaGlsZCB0byB0aGUgb2xkIG5vZGUuICovCiAJCWlmIChuZXdfY2hpbGQpCiAJCQlhZGRfY2hpbGQob2xkX25vZGUsIG5ld19jaGlsZCk7CiAJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggYi9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAppbmRleCA1NWNhZWNkLi5lMTJiMWE3IDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAorKysgYi9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaApAQCAtMjg0LDcgKzI4NCw3IEBACiBkb25lCiAKICMgSWYgb3V0cHV0X2ZpbGUgaXMgc2V0IHdlIHdpbGwgZ2VuZXJhdGUgY3BpbyBhcmNoaXZlIGFuZCBjb21wcmVzcyBpdAotIyB3ZSBhcmUgY2FyZWZ1bGwgdG8gZGVsZXRlIHRtcCBmaWxlcworIyB3ZSBhcmUgY2FyZWZ1bCB0byBkZWxldGUgdG1wIGZpbGVzCiBpZiBbICEgLXogJHtvdXRwdXRfZmlsZX0gXTsgdGhlbgogCWlmIFsgLXogJHtjcGlvX2ZpbGV9IF07IHRoZW4KIAkJY3Bpb190ZmlsZT0iJChta3RlbXAgJHtUTVBESVI6LS90bXB9L2NwaW9maWxlLlhYWFhYWCkiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwppbmRleCA2NTkzMjZjLi4wMDZhZDgxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZi5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCQl9CiAJCWlmICghY2hpbGQpCiAJCQljb250aW51ZTsKLQkJaWYgKGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJz8nKSB7CisJCWlmIChsaW5lWzBdICYmIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJz8nKSB7CiAJCQlwcmludF9oZWxwKGNoaWxkKTsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggOWY4NTAxMi4uZDc5MzAwMSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMTcwNSw3ICsxNzA1LDcgQEAKIAogCSRwYXJhbSA9IHhtbF9lc2NhcGUoJHBhcmFtKTsKIAotCSMgc3RyaXAgc3BhY2VzIGZyb20gJHBhcmFtIHNvIHRoYXQgaXQgaXMgb25lIGNvbnRpbm91cyBzdHJpbmcKKwkjIHN0cmlwIHNwYWNlcyBmcm9tICRwYXJhbSBzbyB0aGF0IGl0IGlzIG9uZSBjb250aW51b3VzIHN0cmluZwogCSMgb24gQHBhcmFtZXRlcmxpc3Q7CiAJIyB0aGlzIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSBjaGVja19zZWN0aW9ucygpIGNhbm5vdCBmaW5kCiAJIyBhIHBhcmFtZXRlciBsaWtlICJhZGRyWzYgKyAyXSIgYmVjYXVzZSBpdCBhY3R1YWxseSBhcHBlYXJzCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKaW5kZXggODNjOWMwNC4uOGE3YjE1NSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCisrKyBiL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgpAQCAtOTIsNyArOTIsNyBAQAogCQllY2hvICIiID4mMgogCQllY2hvICcqKiAqKiAqKiAgV0FSTklORyAgKiogKiogKionID4mMgogCQllY2hvICIiID4mMgotCQllY2hvICJZb3VyIGFyY2hpdGVjdHVyZSBkaWQgbm90IGRlZmluZSBhbnkgYXJjaGl0ZWN0dXJlLWRlcGVuZGFudCBmaWxlcyIgPiYyCisJCWVjaG8gIllvdXIgYXJjaGl0ZWN0dXJlIGRpZCBub3QgZGVmaW5lIGFueSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIiA+JjIKIAkJZWNobyAidG8gYmUgcGxhY2VkIGludG8gdGhlIHRhcmJhbGwuIFBsZWFzZSBhZGQgdGhvc2UgdG8gJHswfSAuLi4iID4mMgogCQllY2hvICIiID4mMgogCQlzbGVlcCA1CmRpZmYgLS1naXQgYS9zY3JpcHRzL3J0LXRlc3Rlci9ydC10ZXN0ZXIucHkgYi9zY3JpcHRzL3J0LXRlc3Rlci9ydC10ZXN0ZXIucHkKaW5kZXggOGM4MWQ3Ni4uMzQxODZjYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9ydC10ZXN0ZXIvcnQtdGVzdGVyLnB5CisrKyBiL3NjcmlwdHMvcnQtdGVzdGVyL3J0LXRlc3Rlci5weQpAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3RhdDoKIAkJICAgIHMgPSBzLnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICAgaWYgcy5zdGFydHN3aXRoKHRlc3RvcFswXSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFNlcGVyYXRlIHN0YXR1cyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBTZXBhcmF0ZSBzdGF0dXMgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHNbMjpdLnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gYW5hbHlzZSh2YWwsIHRlc3RvcCwgZGF0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL21hdGNoLmMgYi9zZWN1cml0eS9hcHBhcm1vci9tYXRjaC5jCmluZGV4IDVjYjRkYzEuLjA2ZDc2NGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2FwcGFybW9yL21hdGNoLmMKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvbWF0Y2guYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgKgogICogVW5wYWNrIGEgZGZhIHRoYXQgaGFzIGJlZW4gc2VyaWFsaXplZC4gIFRvIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIGRmYQogICogZm9ybWF0IGxvb2sgaW4gRG9jdW1lbnRhdGlvbi9hcHBhcm1vci50eHQKLSAqIEFzc3VtZXMgdGhlIGRmYSBAYmxvYiBzdHJlYW0gaGFzIGJlZW4gYWxpZ25lZCBvbiBhIDggYnl0ZSBib3VuZHJ5CisgKiBBc3N1bWVzIHRoZSBkZmEgQGJsb2Igc3RyZWFtIGhhcyBiZWVuIGFsaWduZWQgb24gYSA4IGJ5dGUgYm91bmRhcnkKICAqCiAgKiBSZXR1cm5zOiBhbiB1bnBhY2tlZCBkZmEgcmVhZHkgZm9yIG1hdGNoaW5nIG9yIEVSUl9QVFIgb24gZmFpbHVyZQogICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmMgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmMKaW5kZXggZWIzNzAwZS4uZTMzYWFmNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKiBAZTogc2VyaWFsaXplZCBkYXRhIGV4dGVudCBpbmZvcm1hdGlvbiAgKE5PVCBOVUxMKQogICogQHByb2ZpbGU6IHByb2ZpbGUgdG8gYWRkIHRoZSBhY2NlcHQgdGFibGUgdG8gKE5PVCBOVUxMKQogICoKLSAqIFJldHVybnM6IDEgaWYgdGFibGUgc3VjY2VzZnVsbHkgdW5wYWNrZWQKKyAqIFJldHVybnM6IDEgaWYgdGFibGUgc3VjY2Vzc2Z1bGx5IHVucGFja2VkCiAgKi8KIHN0YXRpYyBib29sIHVucGFja190cmFuc190YWJsZShzdHJ1Y3QgYWFfZXh0ICplLCBzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSkKIHsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwppbmRleCAyOTg0ZWE0Li5iYmI1MTE1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYXBfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgY2FwX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGZsYWdzKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMTAxMTQyMy4uNGJhNmQ0YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC01MTgsMTYgKzUxOCwxNCBAQAogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIDApOwogfQogCiBpbnQgc2VjdXJpdHlfaW5vZGVfZXhlY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKLQlpZiAoZmxhZ3MpCi0JCXJldHVybiAtRUNISUxEOwotCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDKTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBNQVlfRVhFQywgZmxhZ3MpOwogfQogCiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCmluZGV4IDlkYTY0MjAuLjFkMDI3ZTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwpAQCAtNDcxLDYgKzQ3MSw3IEBACiAgKiBAYXZkOiBhY2Nlc3MgdmVjdG9yIGRlY2lzaW9ucwogICogQHJlc3VsdDogcmVzdWx0IGZyb20gYXZjX2hhc19wZXJtX25vYXVkaXQKICAqIEBhOiAgYXV4aWxpYXJ5IGF1ZGl0IGRhdGEKKyAqIEBmbGFnczogVkZTIHdhbGsgZmxhZ3MKICAqCiAgKiBBdWRpdCB0aGUgZ3JhbnRpbmcgb3IgZGVuaWFsIG9mIHBlcm1pc3Npb25zIGluIGFjY29yZGFuY2UKICAqIHdpdGggdGhlIHBvbGljeS4gIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCBieQpAQCAtNDgxLDkgKzQ4MiwxMCBAQAogICogYmUgcGVyZm9ybWVkIHVuZGVyIGEgbG9jaywgdG8gYWxsb3cgdGhlIGxvY2sgdG8gYmUgcmVsZWFzZWQKICAqIGJlZm9yZSBjYWxsaW5nIHRoZSBhdWRpdGluZyBjb2RlLgogICovCi12b2lkIGF2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCitpbnQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKIAkgICAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKLQkgICAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQsIGludCByZXN1bHQsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYSkKKwkgICAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQsIGludCByZXN1bHQsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYSwKKwkgICAgICAgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIHN0YWNrX2RhdGE7CiAJdTMyIGRlbmllZCwgYXVkaXRlZDsKQEAgLTUxNSwxMSArNTE3LDI0IEBACiAJZWxzZQogCQlhdWRpdGVkID0gcmVxdWVzdGVkICYgYXZkLT5hdWRpdGFsbG93OwogCWlmICghYXVkaXRlZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKKwogCWlmICghYSkgewogCQlhID0gJnN0YWNrX2RhdGE7CiAJCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoYSwgTk9ORSk7CiAJfQorCisJLyoKKwkgKiBXaGVuIGluIGEgUkNVIHdhbGsgZG8gdGhlIGF1ZGl0IG9uIHRoZSBSQ1UgcmV0cnkuICBUaGlzIGlzIGJlY2F1c2UKKwkgKiB0aGUgY29sbGVjdGlvbiBvZiB0aGUgZG5hbWUgaW4gYW4gaW5vZGUgYXVkaXQgbWVzc2FnZSBpcyBub3QgUkNVCisJICogc2FmZS4gIE5vdGUgdGhpcyBtYXkgZHJvcCBzb21lIGF1ZGl0cyB3aGVuIHRoZSBzaXR1YXRpb24gY2hhbmdlcworCSAqIGR1cmluZyByZXRyeS4gSG93ZXZlciB0aGlzIGlzIGxvZ2ljYWxseSBqdXN0IGFzIGlmIHRoZSBvcGVyYXRpb24KKwkgKiBoYXBwZW5lZCBhIGxpdHRsZSBsYXRlci4KKwkgKi8KKwlpZiAoKGEtPnR5cGUgPT0gTFNNX0FVRElUX0RBVEFfRlMpICYmCisJICAgIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKIAlhLT5zZWxpbnV4X2F1ZGl0X2RhdGEudGNsYXNzID0gdGNsYXNzOwogCWEtPnNlbGludXhfYXVkaXRfZGF0YS5yZXF1ZXN0ZWQgPSByZXF1ZXN0ZWQ7CiAJYS0+c2VsaW51eF9hdWRpdF9kYXRhLnNzaWQgPSBzc2lkOwpAQCAtNTI5LDYgKzU0NCw3IEBACiAJYS0+bHNtX3ByZV9hdWRpdCA9IGF2Y19hdWRpdF9wcmVfY2FsbGJhY2s7CiAJYS0+bHNtX3Bvc3RfYXVkaXQgPSBhdmNfYXVkaXRfcG9zdF9jYWxsYmFjazsKIAljb21tb25fbHNtX2F1ZGl0KGEpOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTc5Myw2ICs4MDksNyBAQAogICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzCiAgKiBAcmVxdWVzdGVkOiByZXF1ZXN0ZWQgcGVybWlzc2lvbnMsIGludGVycHJldGVkIGJhc2VkIG9uIEB0Y2xhc3MKICAqIEBhdWRpdGRhdGE6IGF1eGlsaWFyeSBhdWRpdCBkYXRhCisgKiBAZmxhZ3M6IFZGUyB3YWxrIGZsYWdzCiAgKgogICogQ2hlY2sgdGhlIEFWQyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgQHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZAogICogZm9yIHRoZSBTSUQgcGFpciAoQHNzaWQsIEB0c2lkKSwgaW50ZXJwcmV0aW5nIHRoZSBwZXJtaXNzaW9ucwpAQCAtODAyLDE0ICs4MTksMTkgQEAKICAqIHBlcm1pc3Npb25zIGFyZSBncmFudGVkLCAtJUVBQ0NFUyBpZiBhbnkgcGVybWlzc2lvbnMgYXJlIGRlbmllZCwgb3IKICAqIGFub3RoZXIgLWVycm5vIHVwb24gb3RoZXIgZXJyb3JzLgogICovCi1pbnQgYXZjX2hhc19wZXJtKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywKLQkJIHUzMiByZXF1ZXN0ZWQsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhKQoraW50IGF2Y19oYXNfcGVybV9mbGFncyh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsCisJCSAgICAgICB1MzIgcmVxdWVzdGVkLCBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSwKKwkJICAgICAgIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7Ci0JaW50IHJjOworCWludCByYywgcmMyOwogCiAJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgMCwgJmF2ZCk7Ci0JYXZjX2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAmYXZkLCByYywgYXVkaXRkYXRhKTsKKworCXJjMiA9IGF2Y19hdWRpdChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgJmF2ZCwgcmMsIGF1ZGl0ZGF0YSwKKwkJCWZsYWdzKTsKKwlpZiAocmMyKQorCQlyZXR1cm4gcmMyOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGY5YzM3NjQuLjhmYjI0ODggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTE0NDYsOCArMTQ0NiwxMSBAQAogCX0KIAogCXJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIHNjbGFzcywgYXYsIDAsICZhdmQpOwotCWlmIChhdWRpdCA9PSBTRUNVUklUWV9DQVBfQVVESVQpCi0JCWF2Y19hdWRpdChzaWQsIHNpZCwgc2NsYXNzLCBhdiwgJmF2ZCwgcmMsICZhZCk7CisJaWYgKGF1ZGl0ID09IFNFQ1VSSVRZX0NBUF9BVURJVCkgeworCQlpbnQgcmMyID0gYXZjX2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAmYXZkLCByYywgJmFkLCAwKTsKKwkJaWYgKHJjMikKKwkJCXJldHVybiByYzI7CisJfQogCXJldHVybiByYzsKIH0KIApAQCAtMTQ2Nyw3ICsxNDcwLDggQEAKIHN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgIHUzMiBwZXJtcywKLQkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCisJCQkgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwLAorCQkJICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKQEAgLTE0ODcsNyArMTQ5MSw3IEBACiAJCWFkLnUuZnMuaW5vZGUgPSBpbm9kZTsKIAl9CiAKLQlyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0+c2lkLCBpc2VjLT5zY2xhc3MsIHBlcm1zLCBhZHApOworCXJldHVybiBhdmNfaGFzX3Blcm1fZmxhZ3Moc2lkLCBpc2VjLT5zaWQsIGlzZWMtPnNjbGFzcywgcGVybXMsIGFkcCwgZmxhZ3MpOwogfQogCiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmcKQEAgLTE1MDQsNyArMTUwOCw3IEBACiAJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKIAlhZC51LmZzLnBhdGgubW50ID0gbW50OwogCWFkLnUuZnMucGF0aC5kZW50cnkgPSBkZW50cnk7Ci0JcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBhdiwgJmFkKTsKKwlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIGF2LCAmYWQsIDApOwogfQogCiAvKiBDaGVjayB3aGV0aGVyIGEgdGFzayBjYW4gdXNlIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvCkBAIC0xNTQwLDcgKzE1NDQsNyBAQAogCS8qIGF2IGlzIHplcm8gaWYgb25seSBjaGVja2luZyBhY2Nlc3MgdG8gdGhlIGRlc2NyaXB0b3IuICovCiAJcmMgPSAwOwogCWlmIChhdikKLQkJcmMgPSBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgYXYsICZhZCk7CisJCXJjID0gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIGF2LCAmYWQsIDApOwogCiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMTU3NCw3ICsxNTc4LDggQEAKIAkJcmV0dXJuIHJjOwogCiAJaWYgKCFuZXdzaWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpIHsKLQkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwgdGNsYXNzLCBOVUxMLCAmbmV3c2lkKTsKKwkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwgdGNsYXNzLAorCQkJCQkgICAgICZkZW50cnktPmRfbmFtZSwgJm5ld3NpZCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIAl9CkBAIC0yMTAzLDcgKzIxMDgsNyBAQAogCQkJZmlsZSA9IGZpbGVfcHJpdi0+ZmlsZTsKIAkJCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJCWlmIChpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwKLQkJCQkJICAgRklMRV9fUkVBRCB8IEZJTEVfX1dSSVRFLCBOVUxMKSkgeworCQkJCQkgICBGSUxFX19SRUFEIHwgRklMRV9fV1JJVEUsIE5VTEwsIDApKSB7CiAJCQkJZHJvcF90dHkgPSAxOwogCQkJfQogCQl9CkBAIC0yNjM1LDcgKzI2NDAsNyBAQAogCXJldHVybiBkZW50cnlfaGFzX3Blcm0oY3JlZCwgTlVMTCwgZGVudHJ5LCBGSUxFX19SRUFEKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CkBAIC0yNjU3LDcgKzI2NjIsNyBAQAogCiAJcGVybXMgPSBmaWxlX21hc2tfdG9fYXYoaW5vZGUtPmlfbW9kZSwgbWFzayk7CiAKLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIHBlcm1zLCAmYWQpOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgcGVybXMsICZhZCwgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCkBAIC0zMjA1LDcgKzMyMTAsNyBAQAogCSAqIG5ldyBpbm9kZSBsYWJlbCBvciBuZXcgcG9saWN5LgogCSAqIFRoaXMgY2hlY2sgaXMgbm90IHJlZHVuZGFudCAtIGRvIG5vdCByZW1vdmUuCiAJICovCi0JcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBvcGVuX2ZpbGVfdG9fYXYoZmlsZSksIE5VTEwpOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgb3Blbl9maWxlX3RvX2F2KGZpbGUpLCBOVUxMLCAwKTsKIH0KIAogLyogdGFzayBzZWN1cml0eSBvcGVyYXRpb25zICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgKaW5kZXggNTYxNTA4MS4uZTc3YjJhYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaApAQCAtNTQsMTEgKzU0LDExIEBACiAKIHZvaWQgX19pbml0IGF2Y19pbml0KHZvaWQpOwogCi12b2lkIGF2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCitpbnQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKIAkgICAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKIAkgICAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQsCiAJICAgICAgIGludCByZXN1bHQsCi0JICAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYSk7CisJICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphLCB1bnNpZ25lZCBmbGFncyk7CiAKICNkZWZpbmUgQVZDX1NUUklDVCAxIC8qIElnbm9yZSBwZXJtaXNzaXZlIG1vZGUuICovCiBpbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLApAQCAtNjYsOSArNjYsMTcgQEAKIAkJCSB1bnNpZ25lZCBmbGFncywKIAkJCSBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7CiAKLWludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLAotCQkgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKLQkJIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhKTsKK2ludCBhdmNfaGFzX3Blcm1fZmxhZ3ModTMyIHNzaWQsIHUzMiB0c2lkLAorCQkgICAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKKwkJICAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhLAorCQkgICAgICAgdW5zaWduZWQpOworCitzdGF0aWMgaW5saW5lIGludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLAorCQkJICAgICAgIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsCisJCQkgICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEpCit7CisJcmV0dXJuIGF2Y19oYXNfcGVybV9mbGFncyhzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgYXVkaXRkYXRhLCAwKTsKK30KIAogdTMyIGF2Y19wb2xpY3lfc2Vxbm8odm9pZCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwppbmRleCAxYzJmYzQ2Li5jM2JmM2VkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCkBAIC0xNTEsNyArMTUxLDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIENhbGxlZCB3aGVuIHRoZSBOZXRMYWJlbCBzdGF0ZSBvZiBhIHNrX3NlY3VyaXR5X3N0cnVjdCBuZWVkcyB0byBiZSByZXNldC4KLSAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBhbGwgdGhlIE5ldExhYmVsIHNrX3NlY3VyaXR5X3N0cnVjdCBsb2NraW5nLgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYWxsIHRoZSBOZXRMYWJlbCBza19zZWN1cml0eV9zdHJ1Y3QgbG9ja2luZy4KICAqCiAgKi8KIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKaW5kZXggZTdiODUwYS4uNzEwMjQ1NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnR5cGVfdmFsX3RvX3N0cnVjdF9hcnJheSwgMCwKLQkJCQkgcC0+cF90eXBlcy5ucHJpbSAtIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkJCQkgcC0+cF90eXBlcy5ucHJpbSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKQEAgLTUxOSw3ICs1MTksNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnN5bV92YWxfdG9fbmFtZVtpXSwKLQkJCQkJIDAsIHAtPnN5bXRhYltpXS5ucHJpbSAtIDEsCisJCQkJCSAwLCBwLT5zeW10YWJbaV0ubnByaW0sCiAJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwpAQCAtMTgxOSw4ICsxODE5LDYgQEAKIAkJZ290byBvdXQ7CiAJbmVsID0gbGUzMl90b19jcHUoYnVmWzBdKTsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IG5lbD0lZFxuIiwgX19mdW5jX18sIG5lbCk7Ci0KIAlsYXN0ID0gcC0+ZmlsZW5hbWVfdHJhbnM7CiAJd2hpbGUgKGxhc3QgJiYgbGFzdC0+bmV4dCkKIAkJbGFzdCA9IGxhc3QtPm5leHQ7CkBAIC0xODU3LDggKzE4NTUsNiBAQAogCQkJZ290byBvdXQ7CiAJCW5hbWVbbGVuXSA9IDA7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZnQ9JXAgZnQtPm5hbWU9JXAgZnQtPm5hbWU9JXNcbiIsIF9fZnVuY19fLCBmdCwgZnQtPm5hbWUsIGZ0LT5uYW1lKTsKLQogCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikgKiA0KTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CkBAIC0yMzc1LDcgKzIzNzEsNyBAQAogCQlnb3RvIGJhZDsKIAogCS8qIHByZWFsbG9jYXRlIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIHB1dCBldmVyIGZhaWxpbmcgKi8KLQlyYyA9IGZsZXhfYXJyYXlfcHJlYWxsb2MocC0+dHlwZV9hdHRyX21hcF9hcnJheSwgMCwgcC0+cF90eXBlcy5ucHJpbSAtIDEsCisJcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnR5cGVfYXR0cl9tYXBfYXJyYXksIDAsIHAtPnBfdHlwZXMubnByaW0sCiAJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKIAlpZiAocmMpCiAJCWdvdG8gYmFkOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGVhN2MwMWYuLjZlZjRhZjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTI4MDYsNyArMjgwNiw3IEBACiAJY2FzZSBBVURJVF9TVUJKX0NMUjoKIAljYXNlIEFVRElUX09CSl9MRVZfTE9XOgogCWNhc2UgQVVESVRfT0JKX0xFVl9ISUdIOgotCQkvKiB3ZSBkbyBub3QgYWxsb3cgYSByYW5nZSwgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5zZSBvZiAnLScgKi8KKwkJLyogd2UgZG8gbm90IGFsbG93IGEgcmFuZ2UsIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgJy0nICovCiAJCWlmIChzdHJjaHIocnVsZXN0ciwgJy0nKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKQEAgLTMwNzUsNyArMzA3NSw3IEBACiAgKiBEZXNjcmlwdGlvbjoKICAqIENvbnZlcnQgdGhlIGdpdmVuIE5ldExhYmVsIHNlY3VyaXR5IGF0dHJpYnV0ZXMgaW4gQHNlY2F0dHIgaW50byBhCiAgKiBTRUxpbnV4IFNJRC4gIElmIHRoZSBAc2VjYXR0ciBmaWVsZCBkb2VzIG5vdCBjb250YWluIGEgZnVsbCBTRUxpbnV4Ci0gKiBTSUQvY29udGV4dCB0aGVuIHVzZSBTRUNJTklUU0lEX05FVE1TRyBhcyB0aGUgZm91bmRhdGlvbi4gIElmIHBvc3NpYmlsZSB0aGUKKyAqIFNJRC9jb250ZXh0IHRoZW4gdXNlIFNFQ0lOSVRTSURfTkVUTVNHIGFzIHRoZSBmb3VuZGF0aW9uLiAgSWYgcG9zc2libGUgdGhlCiAgKiAnY2FjaGUnIGZpZWxkIG9mIEBzZWNhdHRyIGlzIHNldCBhbmQgdGhlIENBQ0hFIGZsYWcgaXMgc2V0OyB0aGlzIGlzIHRvCiAgKiBhbGxvdyB0aGUgQHNlY2F0dHIgdG8gYmUgdXNlZCBieSBOZXRMYWJlbCB0byBjYWNoZSB0aGUgc2VjYXR0ciB0byBTSUQKICAqIGNvbnZlcnNpb24gZm9yIGZ1dHVyZSBsb29rdXBzLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwppbmRleCA4NjQ1M2RiLi45NjM3ZTEwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAgKiBzbWFja19mcm9tX3NlY2lkIC0gZmluZCB0aGUgU21hY2sgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIGEgc2VjaWQKICAqIEBzZWNpZDogYW4gaW50ZWdlciB0aGF0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIFNtYWNrIGxhYmVsCiAgKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFwcHJvcHJhaXRlIFNtYWNrIGxhYmVsIGlmIHRoZXJlIGlzIG9uZSwKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBTbWFjayBsYWJlbCBpZiB0aGVyZSBpcyBvbmUsCiAgKiBvdGhlcndpc2UgYSBwb2ludGVyIHRvIHRoZSBpbnZhbGlkIFNtYWNrIGxhYmVsLgogICovCiBjaGFyICpzbWFja19mcm9tX3NlY2lkKGNvbnN0IHUzMiBzZWNpZCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggMjNjN2E2ZC4uNDAwYTVkNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTY4Niw3ICs2ODYsNyBAQAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCAtRUFDQ0VTIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKIApAQCAtNjk2LDYgKzY5NiwxMCBAQAogCSAqLwogCWlmIChtYXNrID09IDApCiAJCXJldHVybiAwOworCisJLyogTWF5IGJlIGRyb3BwYWJsZSBhZnRlciBhdWRpdCAqLworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKIAlzbWtfYWRfaW5pdCgmYWQsIF9fZnVuY19fLCBMU01fQVVESVRfREFUQV9GUyk7CiAJc21rX2FkX3NldGZpZWxkX3VfZnNfaW5vZGUoJmFkLCBpbm9kZSk7CiAJcmV0dXJuIHNta19jdXJhY2Moc21rX29mX2lub2RlKGlub2RlKSwgbWFzaywgJmFkKTsKQEAgLTE3OTQsNyArMTc5OCw3IEBACiAgKiBDYXNleSBzYXlzIHRoYXQgQ0lQU08gaXMgZ29vZCBlbm91Z2ggZm9yIG5vdy4KICAqIEl0IGNhbiBiZSB1c2VkIHRvIGVmZmVjdC4KICAqIEl0IGNhbiBhbHNvIGJlIGFidXNlZCB0byBlZmZlY3Qgd2hlbiBuZWNlc3NhcnkuCi0gKiBBcHBvbG9naWVzIHRvIHRoZSBUU0lHIGdyb3VwIGluIGdlbmVyYWwgYW5kIEdXIGluIHBhcnRpY3VsYXIuCisgKiBBcG9sb2dpZXMgdG8gdGhlIFRTSUcgZ3JvdXAgaW4gZ2VuZXJhbCBhbmQgR1cgaW4gcGFydGljdWxhci4KICAqLwogc3RhdGljIHZvaWQgc21hY2tfdG9fc2VjYXR0cihjaGFyICpzbWFjaywgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqbmxzcCkKIHsKQEAgLTI1MzAsNyArMjUzNCw3IEBACiAJc3dpdGNoIChzYnAtPnNfbWFnaWMpIHsKIAljYXNlIFNNQUNLX01BR0lDOgogCQkvKgotCQkgKiBDYXNleSBzYXlzIHRoYXQgaXQncyBhIGxpdHRsZSBlbWJhcmFzc2luZworCQkgKiBDYXNleSBzYXlzIHRoYXQgaXQncyBhIGxpdHRsZSBlbWJhcnJhc3NpbmcKIAkJICogdGhhdCB0aGUgc21hY2sgZmlsZSBzeXN0ZW0gZG9lc24ndCBkbwogCQkgKiBleHRlbmRlZCBhdHRyaWJ1dGVzLgogCQkgKi8KQEAgLTMwODQsNyArMzA4OCw3IEBACiAJLyoKIAkgKiBXZSBuZWVkIHRvIGRlY2lkZSBpZiB3ZSB3YW50IHRvIGxhYmVsIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIGhlcmUKIAkgKiBpZiB3ZSBkbyB3ZSBvbmx5IG5lZWQgdG8gbGFiZWwgdGhlIHJlcXVlc3Rfc29jayBhbmQgdGhlIHN0YWNrIHdpbGwKLQkgKiBwcm9wb2dhdGUgdGhlIHdpcmUtbGFiZWwgdG8gdGhlIHNvY2sgd2hlbiBpdCBpcyBjcmVhdGVkLgorCSAqIHByb3BhZ2F0ZSB0aGUgd2lyZS1sYWJlbCB0byB0aGUgc29jayB3aGVuIGl0IGlzIGNyZWF0ZWQuCiAJICovCiAJaGRyID0gaXBfaGRyKHNrYik7CiAJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBoZHItPnNhZGRyOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCmluZGV4IDkwZDFiYmEuLmY5MzQ2MDEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCWlmICgqcHBvcyAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKgotCSAqIE1pbm9yIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkKKwkgKiBNaW5vciBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAJICovCiAJaWYgKGNvdW50IDwgKFNNS19PTE9BRExFTikgfHwgY291bnQgPiBTTUtfTE9BRExFTikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMjMsNyArMjIzLDcgQEAKIAl9CiAKIAkvKgotCSAqIE1vcmUgb24gdGhlIG1pbm9yIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkKKwkgKiBNb3JlIG9uIHRoZSBtaW5vciBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAJICovCiAJaWYgKGNvdW50ID09IChTTUtfT0xPQURMRU4pKQogCQlkYXRhW1NNS19PTE9BRExFTl0gPSAnLSc7CkBAIC05MjcsNyArOTI3LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIHdlIGRlbGV0ZSB0aGUgdW5sYWJlbGVkIGVudHJ5LCBvbmx5IGlmIHRoZSBwcmV2aW91cyBsYWJlbAotCQkgKiB3YXNudCB0aGUgc3BlY2lhbCBDSVBTTyBvcHRpb24gKi8KKwkJICogd2Fzbid0IHRoZSBzcGVjaWFsIENJUFNPIG9wdGlvbiAqLwogCQlpZiAoc2twLT5zbWtfbGFiZWwgIT0gc21hY2tfY2lwc29fb3B0aW9uKQogCQkJcmMgPSBuZXRsYmxfY2ZnX3VubGJsX3N0YXRpY19kZWwoJmluaXRfbmV0LCBOVUxMLAogCQkJCQkmc2twLT5zbWtfaG9zdC5zaW5fYWRkciwgJnNrcC0+c21rX21hc2ssCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vbG9hZF9wb2xpY3kuYyBiL3NlY3VyaXR5L3RvbW95by9sb2FkX3BvbGljeS5jCmluZGV4IGJiYWRhN2MuLjMzMTJlNTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9sb2FkX3BvbGljeS5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9sb2FkX3BvbGljeS5jCkBAIC0yMyw3ICsyMyw3IEBACiAJICogSWYgdGhlIGluaXRyZCBpbmNsdWRlcyAvc2Jpbi9pbml0IGJ1dCByZWFsLXJvb3QtZGV2IGhhcyBub3QKIAkgKiBtb3VudGVkIG9uIC8geWV0LCBhY3RpdmF0aW5nIE1BQyB3aWxsIGJsb2NrIHRoZSBzeXN0ZW0gc2luY2UKIAkgKiBwb2xpY2llcyBhcmUgbm90IGxvYWRlZCB5ZXQuCi0JICogVGh1cywgbGV0IGRvX2V4ZWN2ZSgpIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeXRpbWUuCisJICogVGh1cywgbGV0IGRvX2V4ZWN2ZSgpIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lLgogCSAqLwogCXN0cnVjdCBwYXRoIHBhdGg7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMKaW5kZXggODgwOGI4Mi4uNzZlMGQ1NiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMKQEAgLTE0MCw2ICsxNDAsOSBAQAogCWlmICghcHJ0ZCB8fCAhcHJ0ZC0+cGFyYW1zKQogCQlyZXR1cm4gMDsKIAorCWlmIChwcnRkLT5kbWFfY2ggPT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCiAJRENTUihwcnRkLT5kbWFfY2gpICY9IH5EQ1NSX1JVTjsKIAlEQ1NSKHBydGQtPmRtYV9jaCkgPSAwOwogCURDTUQocHJ0ZC0+ZG1hX2NoKSA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCmluZGV4IDkxN2U0MDUuLjE1MGNiN2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCkBAIC0yNTMsNyArMjUzLDcgQEAKICAqIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzIC0gcHJlLWFsbG9jYXRpb24gZm9yIHRoZSBnaXZlbiBETUEgdHlwZQogICogQHN1YnN0cmVhbTogdGhlIHBjbSBzdWJzdHJlYW0gaW5zdGFuY2UKICAqIEB0eXBlOiBETUEgdHlwZSAoU05EUlZfRE1BX1RZUEVfKikKLSAqIEBkYXRhOiBETUEgdHlwZSBkZXBlbmRhbnQgZGF0YQorICogQGRhdGE6IERNQSB0eXBlIGRlcGVuZGVudCBkYXRhCiAgKiBAc2l6ZTogdGhlIHJlcXVlc3RlZCBwcmUtYWxsb2NhdGlvbiBzaXplIGluIGJ5dGVzCiAgKiBAbWF4OiB0aGUgbWF4LiBhbGxvd2VkIHByZS1hbGxvY2F0aW9uIHNpemUKICAqCkBAIC0yNzgsMTAgKzI3OCwxMCBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlcyk7CiAKIC8qKgotICogc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbCAtIHByZS1hbGxvY2F0aW9uIGZvciBjb250aW5vdXMgbWVtb3J5IHR5cGUgKGFsbCBzdWJzdHJlYW1zKQorICogc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbCAtIHByZS1hbGxvY2F0aW9uIGZvciBjb250aW51b3VzIG1lbW9yeSB0eXBlIChhbGwgc3Vic3RyZWFtcykKICAqIEBwY206IHRoZSBwY20gaW5zdGFuY2UKICAqIEB0eXBlOiBETUEgdHlwZSAoU05EUlZfRE1BX1RZUEVfKikKLSAqIEBkYXRhOiBETUEgdHlwZSBkZXBlbmRhbnQgZGF0YQorICogQGRhdGE6IERNQSB0eXBlIGRlcGVuZGVudCBkYXRhCiAgKiBAc2l6ZTogdGhlIHJlcXVlc3RlZCBwcmUtYWxsb2NhdGlvbiBzaXplIGluIGJ5dGVzCiAgKiBAbWF4OiB0aGUgbWF4LiBhbGxvd2VkIHByZS1hbGxvY2F0aW9uIHNpemUKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IGZlNWM4MDMuLjFhMDc3NTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAkJCQkgICBQTV9RT1NfQ1BVX0RNQV9MQVRFTkNZLCB1c2Vjcyk7CiAJcmV0dXJuIDA7CiAgX2Vycm9yOgotCS8qIGhhcmR3YXJlIG1pZ2h0IGJlIHVudXNlYWJsZSBmcm9tIHRoaXMgdGltZSwKKwkvKiBoYXJkd2FyZSBtaWdodCBiZSB1bnVzYWJsZSBmcm9tIHRoaXMgdGltZSwKIAkgICBzbyB3ZSBmb3JjZSBhcHBsaWNhdGlvbiB0byByZXRyeSB0byBzZXQKIAkgICB0aGUgY29ycmVjdCBoYXJkd2FyZSBwYXJhbWV0ZXIgc2V0dGluZ3MgKi8KIAlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX09QRU47CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfZHVtbXkuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jCmluZGV4IGYzYmRjNTQuLjFkN2Q5MGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jCkBAIC01MCw3ICs1MCw3IEBACiAKIAlvcHRpb24gc25kLXNlcS1kdW1teSBwb3J0cz00CiAKLSAgVGhlIG1vZGxlIG9wdGlvbiAiZHVwbGV4PTEiIGVuYWJsZXMgZHVwbGV4IG9wZXJhdGlvbiB0byB0aGUgcG9ydC4KKyAgVGhlIG1vZGVsIG9wdGlvbiAiZHVwbGV4PTEiIGVuYWJsZXMgZHVwbGV4IG9wZXJhdGlvbiB0byB0aGUgcG9ydC4KICAgSW4gZHVwbGV4IG1vZGUsIGEgcGFpciBvZiBwb3J0cyBhcmUgY3JlYXRlZCBpbnN0ZWFkIG9mIHNpbmdsZSBwb3J0LAogICBhbmQgZXZlbnRzIGFyZSB0dW5uZWxlZCBiZXR3ZWVuIHBhaXItcG9ydHMuICBGb3IgZXhhbXBsZSwgaW5wdXQgdG8KICAgcG9ydCBBIGlzIHNlbnQgdG8gb3V0cHV0IHBvcnQgb2YgYW5vdGhlciBwb3J0IEIgYW5kIHZpY2UgdmVyc2EuCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYyBiL3NvdW5kL2NvcmUvdm1hc3Rlci5jCmluZGV4IGE4OTk0OGEuLmEzOWQzZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvdm1hc3Rlci5jCisrKyBiL3NvdW5kL2NvcmUvdm1hc3Rlci5jCkBAIC0yMzMsNyArMjMzLDcgQEAKICAqIEFkZCBhIHNsYXZlIGNvbnRyb2wgdG8gdGhlIGdyb3VwIHdpdGggdGhlIGdpdmVuIG1hc3RlciBjb250cm9sCiAgKgogICogQWxsIHNsYXZlcyBtdXN0IGJlIHRoZSBzYW1lIHR5cGUgKHJldHVybmluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbgotICogdmlhIGluZm8gY2FsbGJhY2spLiAgVGhlIGZ1Y250aW9uIGRvZXNuJ3QgY2hlY2sgaXQsIHNvIGl0J3MgeW91cgorICogdmlhIGluZm8gY2FsbGJhY2spLiAgVGhlIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaXQsIHNvIGl0J3MgeW91cgogICogcmVzcG9uc2liaWxpdHkuCiAgKgogICogQWxzbywgc29tZSBhZGRpdGlvbmFsIGxpbWl0YXRpb25zOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY20taW5kaXJlY3QyLmMgYi9zb3VuZC9kcml2ZXJzL3BjbS1pbmRpcmVjdDIuYwppbmRleCAzYzkzYzIzLi5lNzNmYWZkIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3BjbS1pbmRpcmVjdDIuYworKysgYi9zb3VuZC9kcml2ZXJzL3BjbS1pbmRpcmVjdDIuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCWlmIChkaWZmIDwgLShzbmRfcGNtX3NmcmFtZXNfdCkgKHJ1bnRpbWUtPmJvdW5kYXJ5IC8gMikpCiAJCQlkaWZmICs9IHJ1bnRpbWUtPmJvdW5kYXJ5OwogCQkvKiBudW1iZXIgb2YgYnl0ZXMgImFkZGVkIiBieSBBTFNBIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mCi0JCSAqIGJ5dGVzIHdoaWNoIGFyZSByZWFkeSB0byAiYmUgdHJhbnNmZXJlZCB0byBIVyIvInBsYXllZCIKKwkJICogYnl0ZXMgd2hpY2ggYXJlIHJlYWR5IHRvICJiZSB0cmFuc2ZlcnJlZCB0byBIVyIvInBsYXllZCIKIAkJICogVGhlbiwgc2V0IHJlYy0+YXBwbF9wdHIgdG8gbm90IGNvdW50IGJ5dGVzIHR3aWNlIG5leHQgdGltZS4KIAkJICovCiAJCXJlYy0+c3dfcmVhZHkgKz0gKGludClmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgZGlmZik7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAkJLyogY29weSBieXRlcyBmcm9tIGludGVybWVkaWF0ZSBidWZmZXIgcG9zaXRpb24gc3dfZGF0YSB0byB0aGUKIAkJICogSFcgYW5kIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbgogCQkgKiBGdXJ0aGVybW9yZSwgc2V0IGh3X3JlYWR5IHRvIDAsIGlmIHRoZSBmaWZvIGlzbid0IGVtcHR5Ci0JCSAqIG5vdyA9PiBtb3JlIGNvdWxkIGJlIHRyYW5zZmVyZWQgdG8gZmlmbworCQkgKiBub3cgPT4gbW9yZSBjb3VsZCBiZSB0cmFuc2ZlcnJlZCB0byBmaWZvCiAJCSAqLwogCQlieXRlcyA9IGNvcHkoc3Vic3RyZWFtLCByZWMsIGJ5dGVzKTsKIAkJcmVjLT5ieXRlczJodyArPSBieXRlczsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCmluZGV4IDM1YTJmNzEuLjVlODk3YjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9wY20uYwpAQCAtMTE4OSw3ICsxMTg5LDcgQEAKIAogCiAvKgotICogdnhfaW5pdF9hdWRpb19pbyAtIGNoZWNrIHRoZSBhdmFpbGFiZSBhdWRpbyBpL28gYW5kIGFsbG9jYXRlIHBpcGUgYXJyYXlzCisgKiB2eF9pbml0X2F1ZGlvX2lvIC0gY2hlY2sgdGhlIGF2YWlsYWJsZSBhdWRpbyBpL28gYW5kIGFsbG9jYXRlIHBpcGUgYXJyYXlzCiAgKi8KIHN0YXRpYyBpbnQgdnhfaW5pdF9hdWRpb19pbyhzdHJ1Y3QgdnhfY29yZSAqY2hpcCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMgYi9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCmluZGV4IDBjNDA5NTEuLjVkNjFmNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKKysrIGIvc291bmQvaXNhL3NiL2VtdTgwMDAuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAKIC8qCiAgKiBTaXplIHRoZSBvbmJvYXJkIG1lbW9yeS4KLSAqIFRoaXMgaXMgd3JpdHRlbiBzbyBhcyBub3QgdG8gbmVlZCBhcmJpdGFyeSBkZWxheXMgYWZ0ZXIgdGhlIHdyaXRlLiBJdAorICogVGhpcyBpcyB3cml0dGVuIHNvIGFzIG5vdCB0byBuZWVkIGFyYml0cmFyeSBkZWxheXMgYWZ0ZXIgdGhlIHdyaXRlLiBJdAogICogc2VlbXMgdGhhdCB0aGUgb25seSB3YXkgdG8gZG8gdGhpcyBpcyB0byB1c2UgdGhlIG9uZSBjaGFubmVsIGFuZCBrZWVwCiAgKiByZWFsbG9jYXRpbmcgYmV0d2VlbiByZWFkIGFuZCB3cml0ZS4KICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfbWlkaS5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfbWlkaS5jCmluZGV4IGYxNGE3YzAuLjY1MzI5ZjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X21pZGkuYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9taWRpLmMKQEAgLTUzNyw3ICs1MzcsNyBAQAogCX0KIAogCS8qIFR1cm4gb24gVmlydHVhbCBNSURJLCBidXQgZmlyc3QgKmFsd2F5cyogdHVybiBpdCBvZmYsCi0JICAgc2luY2Ugb3RoZXJ3aXNlIGNvbnNlY3R1dGl2ZSByZWxvYWRzIG9mIHRoZSBkcml2ZXIgd2lsbAorCSAgIHNpbmNlIG90aGVyd2lzZSBjb25zZWN1dGl2ZSByZWxvYWRzIG9mIHRoZSBkcml2ZXIgd2lsbAogCSAgIG5ldmVyIGNhdXNlIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgaW5pdGlhbCAiaW50ZXJuYWwiIG9yIAogCSAgICJleHRlcm5hbCIgc291cmNlIGJ5dGVzIGluIHRoZSBNSURJIGRhdGEgc3RyZWFtLiBUaGlzCiAJICAgaXMgcHJldHR5IGltcG9ydGFudCwgc2luY2UgdGhlIGludGVybmFsIGhhcmR3YXJlIGdlbmVyYWxseSB3aWxsCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCmluZGV4IDkxOTFiMzIuLjJhNDJjYzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC00MjQsNyArNDI0LDcgQEAKIAogCS8qCiAJICogV2FpdCBmb3IgKHBvc3NpYmxlIC0tIGR1cmluZyBpbml0IGF1dG8tY2FsaWJyYXRpb24gbWF5IG5vdCBiZSBzZXQpCi0JICogY2FsaWJyYXRpb24gcHJvY2VzcyB0byBzdGFydC4gTmVlZHMgdXB0byA1IHNhbXBsZSBwZXJpb2RzIG9uIEFEMTg0OAorCSAqIGNhbGlicmF0aW9uIHByb2Nlc3MgdG8gc3RhcnQuIE5lZWRzIHVwIHRvIDUgc2FtcGxlIHBlcmlvZHMgb24gQUQxODQ4CiAJICogd2hpY2ggYXQgdGhlIHNsb3dlc3QgcG9zc2libGUgcmF0ZSBvZiA1LjUxMjUga0h6IG1lYW5zIDkwNyB1cy4KIAkgKi8KIAltc2xlZXAoMSk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWM5N19jb2RlYy5jIGIvc291bmQvb3NzL2FjOTdfY29kZWMuYwppbmRleCA4NTRjMzAzLi4wY2QyM2Q5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKQEAgLTI4LDcgKzI4LDcgQEAKICAqCiAgKiBIaXN0b3J5CiAgKiBNYXkgMDIsIDIwMDMgTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KLSAqCVJlbW92ZWQgbm9uIGV4aXN0YW50IFdNOTcwMAorICoJUmVtb3ZlZCBub24gZXhpc3RlbnQgV005NzAwCiAgKglBZGRlZCBzdXBwb3J0IGZvciBXTTk3MDUsIFdNOTcwOCwgV005NzA5LCBXTTk3MTAsIFdNOTcxMQogICoJV005NzEyIGFuZCBXTTk3MTcKICAqIE1hciAyOCwgMjAwMiBSYW5kb2xwaCBCZW50c29uIDxiZW50c29uQGhvbG1zam9lbi5jb20+CkBAIC00NDEsNyArNDQxLDcgQEAKIH0KIAogLyogcmVhZCBvciB3cml0ZSB0aGUgcmVjbWFzaywgdGhlIGFjOTcgY2FuIHJlYWxseSBoYXZlIGxlZnQgYW5kIHJpZ2h0IHJlY29yZGluZwotICAgaW5wdXRzIGluZGVwZW5kYW50bHkgc2V0LCBidXQgT1NTIGRvZXNuJ3Qgc2VlbSB0byB3YW50IHVzIHRvIGV4cHJlc3MgdGhhdCB0bworICAgaW5wdXRzIGluZGVwZW5kZW50bHkgc2V0LCBidXQgT1NTIGRvZXNuJ3Qgc2VlbSB0byB3YW50IHVzIHRvIGV4cHJlc3MgdGhhdCB0bwogICAgdGhlIHVzZXIuIHRoZSBjYWxsZXIgZ3VhcmFudGVlcyB0aGF0IHdlIGhhdmUgYSBzdXBwb3J0ZWQgYml0IHNldCwgYW5kIHRoZXkKICAgIG11c3QgYmUgaG9sZGluZyB0aGUgY2FyZCdzIHNwaW5sb2NrICovCiBzdGF0aWMgaW50IGFjOTdfcmVjbWFza19pbyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBydywgaW50IG1hc2spIApAQCAtNzU0LDcgKzc1NCw3IEBACiAJaWYoKGNvZGVjLT5jb2RlY19vcHMgPT0gJm51bGxfb3BzKSAmJiAoZiAmIDQpKQogCQljb2RlYy0+Y29kZWNfb3BzID0gJmRlZmF1bHRfZGlnaXRhbF9vcHM7CiAJCi0JLyogQSBkZXZpY2Ugd2hpY2ggdGhpbmtzIGl0cyBhIG1vZGVtIGJ1dCBpc250ICovCisJLyogQSBkZXZpY2Ugd2hpY2ggdGhpbmtzIGl0cyBhIG1vZGVtIGJ1dCBpc24ndCAqLwogCWlmKGNvZGVjLT5mbGFncyAmIEFDOTdfREVMVURFRF9NT0RFTSkKIAkJY29kZWMtPm1vZGVtID0gMDsKIAkJCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXVkaW8uYyBiL3NvdW5kL29zcy9hdWRpby5jCmluZGV4IDdkZjQ4YTIuLjRiOTU4YjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdWRpby5jCisrKyBiL3NvdW5kL29zcy9hdWRpby5jCkBAIC01MTQsNyArNTE0LDcgQEAKIAkJCQljb3VudCArPSBkbWFwLT5ieXRlc19pbl91c2U7CS8qIFBvaW50ZXIgd3JhcCBub3QgaGFuZGxlZCB5ZXQgKi8KIAkJCWNvdW50ICs9IGRtYXAtPmJ5dGVfY291bnRlcjsKIAkJCi0JCQkvKiBTdWJzdHJhY3QgY3VycmVudCBjb3VudCBmcm9tIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBieSBhcHAgKi8KKwkJCS8qIFN1YnRyYWN0IGN1cnJlbnQgY291bnQgZnJvbSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gYnkgYXBwICovCiAJCQljb3VudCA9IGRtYXAtPnVzZXJfY291bnRlciAtIGNvdW50OwogCQkJaWYgKGNvdW50IDwgMCkKIAkJCQljb3VudCA9IDA7CkBAIC05MzEsNyArOTMxLDcgQEAKIAkJCWlmIChjb3VudCA8IGRtYXBfb3V0LT5mcmFnbWVudF9zaXplICYmIGRtYXBfb3V0LT5xaGVhZCAhPSAwKQogCQkJCWNvdW50ICs9IGRtYXBfb3V0LT5ieXRlc19pbl91c2U7CS8qIFBvaW50ZXIgd3JhcCBub3QgaGFuZGxlZCB5ZXQgKi8KIAkJCWNvdW50ICs9IGRtYXBfb3V0LT5ieXRlX2NvdW50ZXI7Ci0JCQkvKiBTdWJzdHJhY3QgY3VycmVudCBjb3VudCBmcm9tIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBieSBhcHAgKi8KKwkJCS8qIFN1YnRyYWN0IGN1cnJlbnQgY291bnQgZnJvbSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gYnkgYXBwICovCiAJCQljb3VudCA9IGRtYXBfb3V0LT51c2VyX2NvdW50ZXIgLSBjb3VudDsKIAkJCWlmIChjb3VudCA8IDApCiAJCQkJY291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKaW5kZXggODdlMmM3Mi4uYzkxODMxMyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCkBAIC0xMDIxLDcgKzEwMjEsNyBAQAogCWNhc2UgU05EQ1RMX0RTUF9TWU5DOgogCQkvKiBUaGlzIGNhbGwsIGVmZmVjdGl2ZWx5LCBoYXMgdGhlIHNhbWUgYmVoYXZpb3VyIGFzIFNORENUTF9EU1BfUkVTRVQKIAkJICAgZXhjZXB0IHRoYXQgaXQgd2FpdHMgZm9yIG91dHB1dCB0byBmaW5pc2ggYmVmb3JlIHJlc2V0dGluZwotCQkgICBldmVyeXRoaW5nIC0gcmVhZCwgaG93ZXZlciwgaXMga2lsbGVkIGltZWRpYXRlbHkuCisJCSAgIGV2ZXJ5dGhpbmcgLSByZWFkLCBob3dldmVyLCBpcyBraWxsZWQgaW1tZWRpYXRlbHkuCiAJCSovCiAJCXJlc3VsdCA9IDAgOwogCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9taWRpYnVmLmMgYi9zb3VuZC9vc3MvbWlkaWJ1Zi5jCmluZGV4IGNlZWRiMWUuLjhjZGIyY2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9taWRpYnVmLmMKKysrIGIvc291bmQvb3NzL21pZGlidWYuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKIAkJewotCQkJLyogQlJPS0UgQlJPS0UgQlJPS0UgLSBDQU5UIERPIFRISVMgV0lUSCBDTEkgISEgKi8KKwkJCS8qIEJST0tFIEJST0tFIEJST0tFIC0gQ0FOJ1QgRE8gVEhJUyBXSVRIIENMSSAhISAqLwogCQkJLyogeWVzLCB0aGluayB0aGUgc2FtZSwgc28gSSByZW1vdmVkIHRoZSBjbGkoKSBicmFja2V0cyAKIAkJCQlRVUVVRV9CWVRFIGlzIHByb3RlY3RlZCBhZ2FpbnN0IGludGVycnVwdHMgKi8KIAkJCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciAqKSAmdG1wX2RhdGEsICYoYnVmKVtjXSwgMSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9jYXJkLmMgYi9zb3VuZC9vc3Mvc2JfY2FyZC5jCmluZGV4IDg0ZWY0ZDAuLmZiNWQ3MjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9jYXJkLmMKKysrIGIvc291bmQvb3NzL3NiX2NhcmQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBzb3VuZC9vc3Mvc2JfY2FyZC5jCiAgKgotICogRGV0ZWN0aW9uIHJvdXRpbmUgZm9yIHRoZSBJU0EgU291bmQgQmxhc3RlciBhbmQgY29tcGF0YWJsZSBzb3VuZAorICogRGV0ZWN0aW9uIHJvdXRpbmUgZm9yIHRoZSBJU0EgU291bmQgQmxhc3RlciBhbmQgY29tcGF0aWJsZSBzb3VuZAogICogY2FyZHMuCiAgKgogICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSAoR1BMKQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NiX2Vzcy5jIGIvc291bmQvb3NzL3NiX2Vzcy5jCmluZGV4IDk4OTBjZjIuLjVjNzczZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9lc3MuYworKysgYi9zb3VuZC9vc3Mvc2JfZXNzLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogICogY29ycmVzcG9uZGluZyBwbGF5YmFjayBsZXZlbHMsIHVubGVzcyByZWNtYXNrIHNheXMgdGhleSBhcmVuJ3QgcmVjb3JkZWQuIEluCiAgKiB0aGUgbGF0dGVyIGNhc2UgdGhlIHJlY29yZGluZyB2b2x1bWVzIGFyZSAwLgogICogTm93IHJlY29yZGluZyBsZXZlbHMgb2YgaW5wdXRzIGNhbiBiZSBjb250cm9sbGVkLCBieSBjaGFuZ2luZyB0aGUgcGxheWJhY2sKLSAqIGxldmVscy4gRnV0aGVybW9yZSBzZXZlcmFsIGRldmljZXMgY2FuIGJlIHJlY29yZGVkIHRvZ2V0aGVyICh3aGljaCBpcyBub3QKKyAqIGxldmVscy4gRnVydGhlcm1vcmUgc2V2ZXJhbCBkZXZpY2VzIGNhbiBiZSByZWNvcmRlZCB0b2dldGhlciAod2hpY2ggaXMgbm90CiAgKiBwb3NzaWJsZSB3aXRoIHRoZSBFUzE2ODgpLgogICogQmVzaWRlcyB0aGUgc2VwYXJhdGUgcmVjb3JkaW5nIGxldmVsIGNvbnRyb2wgZm9yIGVhY2ggaW5wdXQsIHRoZSBjb21tb24KICAqIHJlY29yZGluZyBsZXZlbCBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IFJFQ0xFViBhcyBkZXNjcmliZWQgYWJvdmUuCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwppbmRleCA0NDM1N2Q4Li4wOWQ0NjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCisrKyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKQEAgLTg3NSw3ICs4NzUsNyBAQAogCQlpZiAocy0+cHJvcF9hZGMuZm10ICYgQUZNVF9TOCB8fCBzLT5wcm9wX2FkYy5mbXQgJiBBRk1UX1U4KSB7CiAJCQkvLyAKIAkJCS8vIG5vdyBvbmx5IHVzZSAxNiBiaXQgY2FwdHVyZSwgZHVlIHRvIHRydW5jYXRpb24gaXNzdWUKLQkJCS8vIGluIHRoZSBjaGlwLCBub3RpY2FibGUgZGlzdG9ydGlvbiBvY2N1cnMuCisJCQkvLyBpbiB0aGUgY2hpcCwgbm90aWNlYWJsZSBkaXN0b3J0aW9uIG9jY3Vycy4KIAkJCS8vIGFsbG9jYXRlIGJ1ZmZlciBhbmQgdGhlbiBjb252ZXJ0IGZyb20gMTYgYml0IHRvIAogCQkJLy8gOCBiaXQgZm9yIHRoZSB1c2VyIGJ1ZmZlci4KIAkJCS8vCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvdmlkYy5jIGIvc291bmQvb3NzL3ZpZGMuYwppbmRleCBmMGUwY2FhLi4xMmJhMjhlIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdmlkYy5jCisrKyBiL3NvdW5kL29zcy92aWRjLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCQl9IGVsc2UgewogCQkJLypwcmludGsoIlZJREM6IGludGVybmFsICVkICVkICVkXG4iLCByYXRlLCByYXRlX2ludCwgaHdyYXRlKTsqLwogCQkJaHdjdHJsPTB4MDAwMDAwMDM7Ci0JCQkvKiBBbGxvdyByb3VnbHkgMC40JSB0b2xlcmFuY2UgKi8KKwkJCS8qIEFsbG93IHJvdWdobHkgMC40JSB0b2xlcmFuY2UgKi8KIAkJCWlmIChkaWZmX2ludCA+IChyYXRlLzI1NikpCiAJCQkJcmF0ZT1yYXRlX2ludDsKIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5jIGIvc291bmQvcGNpL2FkMTg4OS5jCmluZGV4IDQzODJkMGYuLmQ4ZjZmZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hZDE4ODkuYworKysgYi9zb3VuZC9wY2kvYWQxODg5LmMKQEAgLTI5LDcgKzI5LDcgQEAKICAqCVBNIHN1cHBvcnQKICAqCU1JREkgc3VwcG9ydAogICoJR2FtZSBQb3J0IHN1cHBvcnQKLSAqCVNHIERNQSBzdXBwb3J0ICh0aGlzIHdpbGwgbmVlZCAqYWxvdCogb2Ygd29yaykKKyAqCVNHIERNQSBzdXBwb3J0ICh0aGlzIHdpbGwgbmVlZCAqYSBsb3QqIG9mIHdvcmspCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCmluZGV4IGY1M2EzMWUuLmY4Y2NjOTY3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMKQEAgLTk2Myw3ICs5NjMsNyBAQAogCiAJLyo/IGFsc28gY2hlY2sgQVNJNTAwMCBzYW1wbGVyYXRlIHNvdXJjZQogCSAgICBJZiBleHRlcm5hbCwgb25seSBzdXBwb3J0IGV4dGVybmFsIHJhdGUuCi0JICAgIElmIGludGVybmFsIGFuZCBvdGhlciBzdHJlYW0gcGxheWluZywgY2FudCBzd2l0Y2gKKwkgICAgSWYgaW50ZXJuYWwgYW5kIG90aGVyIHN0cmVhbSBwbGF5aW5nLCBjYW4ndCBzd2l0Y2gKIAkqLwogCiAJaW5pdF90aW1lcigmZHBjbS0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGkuaCBiL3NvdW5kL3BjaS9hc2locGkvaHBpLmgKaW5kZXggNmZjMDI1Yy4uMjU1NDI5YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGkuaAorKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaS5oCkBAIC03MjUsNyArNzI1LDcgQEAKICNkZWZpbmUgSFBJX1BBRF9USVRMRV9MRU4gICAgICAgICAgICAgICA2NAogLyoqIFRoZSB0ZXh0IHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50LiAqLwogI2RlZmluZSBIUElfUEFEX0NPTU1FTlRfTEVOICAgICAgICAgICAgIDI1NgotLyoqIFRoZSBQVFkgd2hlbiB0aGUgdHVuZXIgaGFzIG5vdCByZWNpZXZlZCBhbnkgUFRZLiAqLworLyoqIFRoZSBQVFkgd2hlbiB0aGUgdHVuZXIgaGFzIG5vdCByZWNlaXZlZCBhbnkgUFRZLiAqLwogI2RlZmluZSBIUElfUEFEX1BST0dSQU1fVFlQRV9JTlZBTElEICAgIDB4ZmZmZgogLyoqIFx9ICovCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjAwMC5jIGIvc291bmQvcGNpL2FzaWhwaS9ocGk2MDAwLmMKaW5kZXggM2UzYzJlZi4uOGM4YWFjNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGk2MDAwLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGk2MDAwLmMKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiAJYW8ucHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBocGlfaHdfb2JqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhby5wcml2KSB7Ci0JCUhQSV9ERUJVR19MT0coRVJST1IsICJjYW50IGdldCBtZW0gZm9yIGFkYXB0ZXIgb2JqZWN0XG4iKTsKKwkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgImNhbid0IGdldCBtZW0gZm9yIGFkYXB0ZXIgb2JqZWN0XG4iKTsKIAkJcGhyLT5lcnJvciA9IEhQSV9FUlJPUl9NRU1PUllfQUxMT0M7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCmluZGV4IDYyMDUyNWIuLjIyZTlmMDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCkBAIC00NjYsNyArNDY2LDcgQEAKIAogCWFvLnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHBpX2h3X29iaiksIEdGUF9LRVJORUwpOwogCWlmICghYW8ucHJpdikgewotCQlIUElfREVCVUdfTE9HKEVSUk9SLCAiY2FudCBnZXQgbWVtIGZvciBhZGFwdGVyIG9iamVjdFxuIik7CisJCUhQSV9ERUJVR19MT0coRVJST1IsICJjYW4ndCBnZXQgbWVtIGZvciBhZGFwdGVyIG9iamVjdFxuIik7CiAJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfTUVNT1JZX0FMTE9DOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlfaW50ZXJuYWwuaCBiL3NvdW5kL3BjaS9hc2locGkvaHBpX2ludGVybmFsLmgKaW5kZXggYWY2NzhiZS4uM2I5ZmQxMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlfaW50ZXJuYWwuaAorKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaV9pbnRlcm5hbC5oCkBAIC02MDcsNyArNjA3LDcgQEAKICNlbmRpZgogCiBzdHJ1Y3QgaHBpX2J1ZmZlciB7Ci0gIC8qKiBwbGFjZWhvZGVyIGZvciBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IChzZWUgZHdCdWZmZXJTaXplKSAqLworICAvKiogcGxhY2Vob2RlciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc2VlIGR3QnVmZmVyU2l6ZSkgKi8KIAlzdHJ1Y3QgaHBpX21zZ19mb3JtYXQgcmVzZXJ2ZWQ7CiAJdTMyIGNvbW1hbmQ7IC8qKjwgSFBJX0JVRkZFUl9DTURfeHh4Ki8KIAl1MzIgcGNpX2FkZHJlc3M7IC8qKjwgUENJIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYnVmZmVyIGZvciBEU1AgRE1BICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCmluZGV4IGJjYmRmMzAuLjM2MDAyOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCkBAIC03MjIsNyArNzIyLDcgQEAKIAkJcmV0dXJuIHBoci0+ZXJyb3I7CiAJfQogCWlmIChoci5lcnJvciA9PSAwKSB7Ci0JCS8qIHRoZSBhZGFwdGVyIHdhcyBjcmVhdGVkIHN1Y2Nlc2Z1bGx5CisJCS8qIHRoZSBhZGFwdGVyIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQogCQkgICBzYXZlIHRoZSBtYXBwaW5nIGZvciBmdXR1cmUgdXNlICovCiAJCWhwaV9lbnRyeV9wb2ludHNbaHIudS5zLmFkYXB0ZXJfaW5kZXhdID0gZW50cnlfcG9pbnRfZnVuYzsKIAkJLyogcHJlcGFyZSBhZGFwdGVyIChwcmUtb3BlbiBzdHJlYW1zIGV0Yy4pICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaAppbmRleCBlY2I4ZjRkLi4wMmY2ZTA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKQEAgLTEwNCw3ICsxMDQsNyBAQAogI2RlZmluZSBNSVhfUExBWUIoeCkgKHZvcnRleC0+bWl4cGxheWJbeF0pCiAjZGVmaW5lIE1JWF9TUERJRih4KSAodm9ydGV4LT5taXhzcGRpZlt4XSkKIAotI2RlZmluZSBOUl9XVFBCIDB4MjAJCS8qIFdUIGNoYW5uZWxzIHBlciBlYWhjIGJhbmsuICovCisjZGVmaW5lIE5SX1dUUEIgMHgyMAkJLyogV1QgY2hhbm5lbHMgcGVyIGVhY2ggYmFuay4gKi8KIAogLyogU3RydWN0cyAqLwogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYwppbmRleCBmNGFhOGZmLi45YWU4YjNiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYwpAQCAtNTMsNyArNTMsNyBAQAogfQogCiAjZW5kaWYKLS8qIEF0bW9zcGhlcmljIGFic29yYnRpb24uICovCisvKiBBdG1vc3BoZXJpYyBhYnNvcnB0aW9uLiAqLwogCiBzdGF0aWMgdm9pZAogYTNkc3JjX1NldEF0bW9zVGFyZ2V0KGEzZHNyY190ICogYSwgc2hvcnQgYWEsIHNob3J0IGIsIHNob3J0IGMsIHNob3J0IGQsCkBAIC04MzUsNyArODM1LDcgQEAKIAkJcGFyYW1zW2ldID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CiAJLyogVHJhbnNsYXRlIGdlbmVyaWMgZmlsdGVyIHBhcmFtcyB0byBhM2QgZmlsdGVyIHBhcmFtcy4gKi8KIAl2b3J0ZXhfYTNkX3RyYW5zbGF0ZV9maWx0ZXIoYS0+ZmlsdGVyLCBwYXJhbXMpOwotCS8qIEF0bW9zcGhlcmljIGFic29yYnRpb24gYW5kIGZpbHRlcmluZy4gKi8KKwkvKiBBdG1vc3BoZXJpYyBhYnNvcnB0aW9uIGFuZCBmaWx0ZXJpbmcuICovCiAJYTNkc3JjX1NldEF0bW9zVGFyZ2V0KGEsIGEtPmZpbHRlclswXSwKIAkJCSAgICAgIGEtPmZpbHRlclsxXSwgYS0+ZmlsdGVyWzJdLAogCQkJICAgICAgYS0+ZmlsdGVyWzNdLCBhLT5maWx0ZXJbNF0pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfcGNtLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwppbmRleCA1NDM5ZDY2Li42MmU5NTkxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwpAQCAtNDQsMTAgKzQ0LDEwIEBACiAJLmNoYW5uZWxzX21pbiA9IDEsCiAJLmNoYW5uZWxzX21heCA9IDIsCiAJLmJ1ZmZlcl9ieXRlc19tYXggPSAweDEwMDAwLAotCS5wZXJpb2RfYnl0ZXNfbWluID0gMHgxLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMHgyMCwKIAkucGVyaW9kX2J5dGVzX21heCA9IDB4MTAwMCwKIAkucGVyaW9kc19taW4gPSAyLAotCS5wZXJpb2RzX21heCA9IDMyLAorCS5wZXJpb2RzX21heCA9IDEwMjQsCiB9OwogCiAjaWZuZGVmIENISVBfQVU4ODIwCkBAIC0xNDAsNiArMTQwLDkgQEAKIAkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCXNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1bnRpbWUsIDAsCisJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDY0KTsKKwogCWlmIChWT1JURVhfUENNX1RZUEUoc3Vic3RyZWFtLT5wY20pICE9IFZPUlRFWF9QQ01fV1QpIHsKICNpZm5kZWYgQ0hJUF9BVTg4MjAKIAkJaWYgKFZPUlRFWF9QQ01fVFlQRShzdWJzdHJlYW0tPnBjbSkgPT0gVk9SVEVYX1BDTV9BM0QpIHsKQEAgLTUxNSw3ICs1MTgsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGlkeCBpbmRpY2F0ZXMgd2hpY2gga2luZCBvZiBQQ00gZGV2aWNlLiBBREIsIFNQRElGLCBJMlMgYW5kIEEzRCBzaGFyZSB0aGUgCi0JICogc2FtZSBkbWEgZW5naW5lLiBXVCB1c2VzIGl0IG93biBzZXBhcmF0ZSBkbWEgZW5naW5lIHdoY2loIGNhbnQgY2FwdHVyZS4gKi8KKwkgKiBzYW1lIGRtYSBlbmdpbmUuIFdUIHVzZXMgaXQgb3duIHNlcGFyYXRlIGRtYSBlbmdpbmUgd2hpY2ggY2FuJ3QgY2FwdHVyZS4gKi8KIAlpZiAoaWR4ID09IFZPUlRFWF9QQ01fQURCKQogCQlucl9jYXB0ID0gbnI7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggNTcxNWM0ZDAuLjliN2E2MzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgKiAgUG9zc2libGUgcmVtZWRpZXM6CiAgKiAgLSB1c2Ugc3BlYWtlciAoYW1wbGlmaWVyKSBvdXRwdXQgaW5zdGVhZCBvZiBoZWFkcGhvbmUgb3V0cHV0CiAgKiAgICAoaW4gY2FzZSBjcmFja2xpbmcgaXMgZHVlIHRvIG92ZXJsb2FkZWQgb3V0cHV0IGNsaXBwaW5nKQotICogIC0gcGx1ZyBjYXJkIGludG8gYSBkaWZmZXJlbnQgUENJIHNsb3QsIHByZWZlcnJhYmx5IG9uZSB0aGF0IGlzbid0IHNoYXJlZAorICogIC0gcGx1ZyBjYXJkIGludG8gYSBkaWZmZXJlbnQgUENJIHNsb3QsIHByZWZlcmFibHkgb25lIHRoYXQgaXNuJ3Qgc2hhcmVkCiAgKiAgICB0b28gbXVjaCAodGhpcyBoZWxwcyBhIGxvdCwgYnV0IG5vdCBjb21wbGV0ZWx5ISkKICAqICAtIGdldCByaWQgb2YgUENJIFZHQSBjYXJkLCB1c2UgQUdQIGluc3RlYWQKICAqICAtIHVwZ3JhZGUgb3IgZG93bmdyYWRlIEJJT1MKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2LmggYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNi5oCmluZGV4IGZjNTNiOWIuLmU4ZThjY2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2LmgKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDYuaApAQCAtNTEsNyArNTEsNyBAQAogICogICAgQWRkIHN1cHBvcnQgZm9yIG11dGUgY29udHJvbCBvbiBTQiBMaXZlIDI0Yml0IChjYXJkcyB3LyBTUEkgREFDKQogICoKICAqCi0gKiAgVGhpcyBjb2RlIHdhcyBpbml0YWxseSBiYXNlZCBvbiBjb2RlIGZyb20gQUxTQSdzIGVtdTEwazF4LmMgd2hpY2ggaXM6CisgKiAgVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgogICogIENvcHlyaWdodCAoYykgYnkgRnJhbmNpc2NvIE1vcmFlcyA8Zm1vcmFlc0BuYy5yci5jb20+CiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTc1LDcgKzE3NSw3IEBACiAvKiBDQTAxMDYgcG9pbnRlci1vZmZzZXQgcmVnaXN0ZXIgc2V0LCBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBQVFIgYW5kIERBVEEgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLyogSW5pdGFsbHkgYWxsIHJlZ2lzdGVycyBmcm9tIDB4MDAgdG8gMHgzZiBoYXZlIHplcm8gY29udGVudHMuICovCisvKiBJbml0aWFsbHkgYWxsIHJlZ2lzdGVycyBmcm9tIDB4MDAgdG8gMHgzZiBoYXZlIHplcm8gY29udGVudHMuICovCiAjZGVmaW5lIFBMQVlCQUNLX0xJU1RfQUREUgkweDAwCQkvKiBCYXNlIERNQSBhZGRyZXNzIG9mIGEgbGlzdCBvZiBwb2ludGVycyB0byBlYWNoIHBlcmlvZC9zaXplICovCiAJCQkJCQkvKiBPbmUgbGlzdCBlbnRyeTogNCBieXRlcyBmb3IgRE1BIGFkZHJlc3MsIAogCQkJCQkJICogNCBieXRlcyBmb3IgcGVyaW9kX3NpemUgPDwgMTYuCkBAIC0yMjMsNyArMjIzLDcgQEAKICAqIFRoZSBqYWNrIGhhcyA0IHBvbGVzLiBJIHdpbGwgY2FsbCAxIC0gVGlwLCAyIC0gTmV4dCB0byAxLCAzIC0gTmV4dCB0byAyLCA0IC0gTmV4dCB0byAzCiAgKiBGb3IgQW5hbG9ndWU6IDEgLT4gQ2VudGVyIFNwZWFrZXIsIDIgLT4gU3ViIFdvb2ZlciwgMyAtPiBHcm91bmQsIDQgLT4gR3JvdW5kCiAgKiBGb3IgRGlnaXRhbDogMSAtPiBGcm9udCBTUERJRiwgMiAtPiBSZWFyIFNQRElGLCAzIC0+IENlbnRlci9TdWJ3b29mZXIgU1BESUYsIDQgLT4gR3JvdW5kLgotICogU3RhbmRhcmQgNCBwb2xlIFZpZGVvIEEvViBjYWJsZSB3aXRoIFJDQSBvdXRwdXRzOiAxIC0+IFdoaXRlLCAyIC0+IFllbGxvdywgMyAtPiBTaGVpbGQgb24gYWxsIHRocmVlLCA0IC0+IFJlZC4KKyAqIFN0YW5kYXJkIDQgcG9sZSBWaWRlbyBBL1YgY2FibGUgd2l0aCBSQ0Egb3V0cHV0czogMSAtPiBXaGl0ZSwgMiAtPiBZZWxsb3csIDMgLT4gU2hpZWxkIG9uIGFsbCB0aHJlZSwgNCAtPiBSZWQuCiAgKiBTbywgZnJvbSB0aGlzIHlvdSBjYW4gc2VlIHRoYXQgeW91IGNhbm5vdCB1c2UgYSBTdGFuZGFyZCA0IHBvbGUgVmlkZW8gQS9WIGNhYmxlIHdpdGggdGhlIFNCIEF1ZGlneSBMUyBjYXJkLgogICovCiAvKiBUaGUgRnJvbnQgU1BESUYgUENNIGdldHMgbWl4ZWQgd2l0aCBzYW1wbGVzIGZyb20gdGhlIEFDOTcgY29kZWMsIHNvIGNhbiBvbmx5IHdvcmsgZm9yIFN0ZXJlbyBQQ00gYW5kIG5vdCBBQzMvRFRTCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMDFiNDkzOC4uNDM3NzU5MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTE3LDcgKzExNyw3IEBACiAgKiAgICBEQUM6IFVua25vd24KICAqICAgIFRyeWluZyB0byBoYW5kbGUgaXQgbGlrZSB0aGUgU0IwNDEwLgogICoKLSAqICBUaGlzIGNvZGUgd2FzIGluaXRhbGx5IGJhc2VkIG9uIGNvZGUgZnJvbSBBTFNBJ3MgZW11MTBrMXguYyB3aGljaCBpczoKKyAqICBUaGlzIGNvZGUgd2FzIGluaXRpYWxseSBiYXNlZCBvbiBjb2RlIGZyb20gQUxTQSdzIGVtdTEwazF4LmMgd2hpY2ggaXM6CiAgKiAgQ29weXJpZ2h0IChjKSBieSBGcmFuY2lzY28gTW9yYWVzIDxmbW9yYWVzQG5jLnJyLmNvbT4KICAqCiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9taXhlci5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWl4ZXIuYwppbmRleCA2MzBhYTQ5Li44NGYzZjkyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9taXhlci5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21peGVyLmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqICAwLjAuMTgKICAqICAgIEFkZCBzdXBwb3J0IGZvciBtdXRlIGNvbnRyb2wgb24gU0IgTGl2ZSAyNGJpdCAoY2FyZHMgdy8gU1BJIERBQykKICAqCi0gKiAgVGhpcyBjb2RlIHdhcyBpbml0YWxseSBiYXNlZCBvbiBjb2RlIGZyb20gQUxTQSdzIGVtdTEwazF4LmMgd2hpY2ggaXM6CisgKiAgVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgogICogIENvcHlyaWdodCAoYykgYnkgRnJhbmNpc2NvIE1vcmFlcyA8Zm1vcmFlc0BuYy5yci5jb20+CiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfcHJvYy5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfcHJvYy5jCmluZGV4IGJhOTY0MjguLmM2OTQ0NjRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9wcm9jLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfcHJvYy5jCkBAIC00Miw3ICs0Miw3IEBACiAgKiAgMC4wLjE4CiAgKiAgICBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgTGluZS1pbiBjYXB0dXJlIG9uIFNCIExpdmUgMjRiaXQuCiAgKgotICogIFRoaXMgY29kZSB3YXMgaW5pdGFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgorICogIFRoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGJhc2VkIG9uIGNvZGUgZnJvbSBBTFNBJ3MgZW11MTBrMXguYyB3aGljaCBpczoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEZyYW5jaXNjbyBNb3JhZXMgPGZtb3JhZXNAbmMucnIuY29tPgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCBiNWJiMDM2Li5mNGU1NzM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC03Myw3ICs3Myw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZm1fcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZtX3BvcnQsICJGTSBwb3J0LiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHNvZnRfYWMzLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc29mdF9hYzMsICJTb2Z3YXJlLWNvbnZlcnNpb24gb2YgcmF3IFNQRElGIHBhY2tldHMgKG1vZGVsIDAzMyBvbmx5KS4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc29mdF9hYzMsICJTb2Z0d2FyZS1jb252ZXJzaW9uIG9mIHJhdyBTUERJRiBwYWNrZXRzIChtb2RlbCAwMzMgb25seSkuIik7CiAjaWZkZWYgU1VQUE9SVF9KT1lTVElDSwogbW9kdWxlX3BhcmFtX2FycmF5KGpveXN0aWNrX3BvcnQsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGpveXN0aWNrX3BvcnQsICJKb3lzdGljayBwb3J0IGFkZHJlc3MuIik7CkBAIC02NTYsOCArNjU2LDggQEAKIH0KIAogLyoKLSAqIFByb2dyYW0gcGxsIHJlZ2lzdGVyIGJpdHMsIEkgYXNzdW1lIHRoYXQgdGhlIDggcmVnaXN0ZXJzIDB4ZjggdXB0byAweGZmCi0gKiBhcmUgbWFwcGVkIG9udG8gdGhlIDggQURDL0RBQyBzYW1wbGluZyBmcmVxdWVuY3kgd2hpY2ggY2FuIGJlIGNob29zZW4KKyAqIFByb2dyYW0gcGxsIHJlZ2lzdGVyIGJpdHMsIEkgYXNzdW1lIHRoYXQgdGhlIDggcmVnaXN0ZXJzIDB4ZjggdXAgdG8gMHhmZgorICogYXJlIG1hcHBlZCBvbnRvIHRoZSA4IEFEQy9EQUMgc2FtcGxpbmcgZnJlcXVlbmN5IHdoaWNoIGNhbiBiZSBjaG9zZW4KICAqIGF0IHRoZSByZWdpc3RlciBDTV9SRUdfRlVOQ1RSTDEgKDB4MDQpLgogICogUHJvYmxlbTogb3RoZXIgd2F5cyBhcmUgYWxzbyBwb3NzaWJsZSAoYW55IGluZm9ybWF0aW9uIGFib3V0IHRoYXQ/KQogICovCkBAIC02NjYsNyArNjY2LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnID0gQ01fUkVHX1BMTCArIHNsb3Q7CiAJLyoKIAkgKiBHdWVzcyB0aGF0IHRoaXMgcHJvZ3JhbXMgYXQgcmVnLiAweDA0IHRoZSBwb3MgMTU6MTMvMTI6MTAKLQkgKiBmb3IgRFNGQy9BU0ZDICgwMDAgdXB0byAxMTEpLgorCSAqIGZvciBEU0ZDL0FTRkMgKDAwMCB1cCB0byAxMTEpLgogCSAqLwogCiAJLyogRklYTUU6IEluaXQgKERvIHdlJ3ZlIHRvIHNldCBhbiBvdGhlciByZWdpc3RlciBmaXJzdCBiZWZvcmUgcHJvZ3JhbW1pbmc/KSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwppbmRleCBiOTMyMTU0Li4xM2YzM2MwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKICAqICBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIGhhcmR3YXJlIG1hbmFnZXIuCiAgKgogICogIENyZWF0ZXMga21hbGxvY2F0ZWQgY3RfYXRjIHN0cnVjdHVyZS4gSW5pdGlhbGl6ZXMgaGFyZHdhcmUuCi0gKiAgUmV0dXJucyAwIGlmIHN1Y2VlZHMsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgZmFpbHMuCisgKiAgUmV0dXJucyAwIGlmIHN1Y2NlZWRzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGZhaWxzLgogICovCiAKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazEuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCmluZGV4IDBjZjQwMGYuLmE1Yzk1N2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCkBAIC0xMjg1LDcgKzEyODUsNyBAQAogCWh3X3dyaXRlXzIwa3goaHcsIFBUUEFMWCwgcHRwX3BoeXNfbG93KTsKIAlod193cml0ZV8yMGt4KGh3LCBQVFBBSFgsIHB0cF9waHlzX2hpZ2gpOwogCWh3X3dyaXRlXzIwa3goaHcsIFRSTkNUTCwgdHJuY3RsKTsKLQlod193cml0ZV8yMGt4KGh3LCBUUk5JUywgMHgyMDBjMDEpOyAvKiByZWFseSBuZWVkZWQ/ICovCisJaHdfd3JpdGVfMjBreChodywgVFJOSVMsIDB4MjAwYzAxKTsgLyogcmVhbGx5IG5lZWRlZD8gKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvbWVtb3J5LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9tZW1vcnkuYwppbmRleCA5NTdhMzExLi5jMjUwNjE0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9tZW1vcnkuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9tZW1vcnkuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAvKgogICogbWFwIHRoZSBnaXZlbiBtZW1vcnkgYmxvY2sgb24gUFRCLgogICogaWYgdGhlIGJsb2NrIGlzIGFscmVhZHkgbWFwcGVkLCB1cGRhdGUgdGhlIGxpbmsgb3JkZXIuCi0gKiBpZiBubyBlbXB0eSBwYWdlcyBhcmUgZm91bmQsIHRyaWVzIHRvIHJlbGVhc2UgdW5zZWQgbWVtb3J5IGJsb2NrcworICogaWYgbm8gZW1wdHkgcGFnZXMgYXJlIGZvdW5kLCB0cmllcyB0byByZWxlYXNlIHVudXNlZCBtZW1vcnkgYmxvY2tzCiAgKiBhbmQgcmV0cnkgdGhlIG1hcHBpbmcuCiAgKi8KIGludCBzbmRfZW11MTBrMV9tZW1ibGtfbWFwKHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBzdHJ1Y3Qgc25kX2VtdTEwazFfbWVtYmxrICpibGspCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKaW5kZXggNjFiOGFiMy4uYTgxZGM0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwpAQCAtNjksNyArNjksNyBAQAogICogICAgQURDOiBQaGlsaXBzIDEzNjFUIChTdGVyZW8gMjRiaXQpCiAgKiAgICBEQUM6IENTNDM4Mi1LICg4LWNoYW5uZWwsIDI0Yml0LCAxOTJLaHopCiAgKgotICogIFRoaXMgY29kZSB3YXMgaW5pdGFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgorICogIFRoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGJhc2VkIG9uIGNvZGUgZnJvbSBBTFNBJ3MgZW11MTBrMXguYyB3aGljaCBpczoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEZyYW5jaXNjbyBNb3JhZXMgPGZtb3JhZXNAbmMucnIuY29tPgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuaCBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuaAppbmRleCAwMGY0ODE3Li40ZTBlZTFhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmgKKysrIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5oCkBAIC01OSw3ICs1OSw3IEBACiAgKiAgICBBREM6IFBoaWxpcHMgMTM2MVQgKFN0ZXJlbyAyNGJpdCkKICAqICAgIERBQzogQ1M0MzgyLUsgKDgtY2hhbm5lbCwgMjRiaXQsIDE5MktoeikKICAqCi0gKiAgVGhpcyBjb2RlIHdhcyBpbml0YWxseSBiYXNlZCBvbiBjb2RlIGZyb20gQUxTQSdzIGVtdTEwazF4LmMgd2hpY2ggaXM6CisgKiAgVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgogICogIENvcHlyaWdodCAoYykgYnkgRnJhbmNpc2NvIE1vcmFlcyA8Zm1vcmFlc0BuYy5yci5jb20+CiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtODYsNyArODYsNyBAQAogICogVGhlIHNhbXBsZSByYXRlIGlzIGFsc28gY29udHJvbGxlZCBieSB0aGUgc2FtZSByZWdpc3RlcnMgdGhhdCBjb250cm9sIHRoZSByYXRlIG9mIHRoZSBFTVUxMEsyIHNhbXBsZSByYXRlIGNvbnZlcnRlcnMuCiAgKi8KIAotLyogSW5pdGFsbHkgYWxsIHJlZ2lzdGVycyBmcm9tIDB4MDAgdG8gMHgzZiBoYXZlIHplcm8gY29udGVudHMuICovCisvKiBJbml0aWFsbHkgYWxsIHJlZ2lzdGVycyBmcm9tIDB4MDAgdG8gMHgzZiBoYXZlIHplcm8gY29udGVudHMuICovCiAjZGVmaW5lIFBMQVlCQUNLX0xJU1RfQUREUgkweDAwCQkvKiBCYXNlIERNQSBhZGRyZXNzIG9mIGEgbGlzdCBvZiBwb2ludGVycyB0byBlYWNoIHBlcmlvZC9zaXplICovCiAJCQkJCQkvKiBPbmUgbGlzdCBlbnRyeTogNCBieXRlcyBmb3IgRE1BIGFkZHJlc3MsIAogCQkJCQkJICogNCBieXRlcyBmb3IgcGVyaW9kX3NpemUgPDwgMTYuCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCAyYzc5ZTk2Li43NTlhZGUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKQEAgLTkzNyw2ICs5MzcsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9zaHV0dXBfcGlucyk7CiAKKyNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQogLyogUmVzdG9yZSB0aGUgcGluIGNvbnRyb2xzIGNsZWFyZWQgcHJldmlvdXNseSB2aWEgc25kX2hkYV9zaHV0dXBfcGlucygpICovCiBzdGF0aWMgdm9pZCByZXN0b3JlX3NodXR1cF9waW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtOTUzLDYgKzk1NCw3IEBACiAJfQogCWNvZGVjLT5waW5zX3NodXR1cCA9IDA7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKQEAgLTEzMjksNiArMTMzMSw3IEBACiAJfQogfQogCisjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKIC8qIGNsZWFuIHVwIGFsbCBzdHJlYW1zOyBjYWxsZWQgZnJvbSBzdXNwZW5kICovCiBzdGF0aWMgdm9pZCBoZGFfY2xlYW51cF9hbGxfc3RyZWFtcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEzNDAsNiArMTM0Myw3IEBACiAJCQlyZWFsbHlfY2xlYW51cF9zdHJlYW0oY29kZWMsIHApOwogCX0KIH0KKyNlbmRpZgogCiAvKgogICogYW1wIGFjY2VzcyBmdW5jdGlvbnMKQEAgLTM2NjEsNyArMzY2NSw3IEBACiAgKiB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycyBmb3Igc2V0IHVwLgogICogb3BzLmNsZWFudXAgc2hvdWxkIGJlIGNhbGxlZCBpbiBod19mcmVlIGZvciBjbGVhbiB1cCBvZiBzdHJlYW1zLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWxsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KIGludCBfX2RldmluaXQgc25kX2hkYV9idWlsZF9wY21zKHN0cnVjdCBoZGFfYnVzICpidXMpCiB7CkBAIC00ODUxLDcgKzQ4NTUsNyBAQAogICoKICAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLgogICoKLSAqIFRoaXMgZnVjbnRpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gUE9XRVJfU0FWRSBpc24ndCBzZXQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgb25seSB3aGVuIFBPV0VSX1NBVkUgaXNuJ3Qgc2V0LgogICogSW4gdGhlIHBvd2VyLXNhdmUgbW9kZSwgdGhlIGNvZGVjIGlzIHJlc3VtZWQgZHluYW1pY2FsbHkuCiAgKi8KIGludCBzbmRfaGRhX3Jlc3VtZShzdHJ1Y3QgaGRhX2J1cyAqYnVzKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDY5ZTMzODYuLmFkOTdkOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTMwMzUsNiArMzAzNSw3IEBACiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjNiwgIlRoaW5rcGFkIEVkZ2UgMTMiLCBDWFQ1MDY2X0FTVVMpLAogIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiTGVub3ZvIFRoaW5rcGFkIiwgQ1hUNTA2Nl9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFkYSwgIkxlbm92byBYMjIwIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFkYiwgIkxlbm92byBYMjIwLXRhYmxldCIsIENYVDUwNjZfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gRzU2MCIsIENYVDUwNjZfQVNVUyksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIiwgQ1hUNTA2Nl9JREVBUEFEKSwgLyogRmFsbGJhY2sgZm9yIExlbm92b3Mgd2l0aG91dCBkb2NrIG1pYyAqLwogCXt9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCmluZGV4IDI1MTc3M2UuLjcxNTYxNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC0xMjgwLDYgKzEyODAsMzkgQEAKIAkJCQkJICAgICBzdHJlYW1fdGFnLCBmb3JtYXQsIHN1YnN0cmVhbSk7CiB9CiAKK3N0YXRpYyB2b2lkIG52aGRtaV84Y2hfN3hfc2V0X2luZm9fZnJhbWVfcGFyYW1ldGVycyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJCSAgICBpbnQgY2hhbm5lbHMpCit7CisJdW5zaWduZWQgaW50IGNoYW5tYXNrOworCWludCBjaGFuID0gY2hhbm5lbHMgPyAoY2hhbm5lbHMgLSAxKSA6IDE7CisKKwlzd2l0Y2ggKGNoYW5uZWxzKSB7CisJZGVmYXVsdDoKKwljYXNlIDA6CisJY2FzZSAyOgorCQljaGFubWFzayA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJY2hhbm1hc2sgPSAweDA4OworCQlicmVhazsKKwljYXNlIDY6CisJCWNoYW5tYXNrID0gMHgwYjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQljaGFubWFzayA9IDB4MTM7CisJCWJyZWFrOworCX0KKworCS8qIFNldCB0aGUgYXVkaW8gaW5mb2ZyYW1lIGNoYW5uZWwgYWxsb2NhdGlvbiBhbmQgY2hlY2tzdW0gZmllbGRzLiAgVGhlCisJICogY2hhbm5lbCBjb3VudCBpcyBjb21wdXRlZCBpbXBsaWNpdGx5IGJ5IHRoZSBoYXJkd2FyZS4gKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEsIDAsCisJCQlOdl9WRVJCX1NFVF9DaGFubmVsX0FsbG9jYXRpb24sIGNoYW5tYXNrKTsKKworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MSwgMCwKKwkJCU52X1ZFUkJfU0VUX0luZm9fRnJhbWVfQ2hlY2tzdW0sCisJCQkoMHg3MSAtIGNoYW4gLSBjaGFubWFzaykpOworfQorCiBzdGF0aWMgaW50IG52aGRtaV84Y2hfN3hfcGNtX2Nsb3NlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMjk4LDYgKzEzMzEsMTAgQEAKIAkJCQlBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULCAwKTsKIAl9CiAKKwkvKiBUaGUgYXVkaW8gaGFyZHdhcmUgc2VuZHMgYSBjaGFubmVsIGNvdW50IG9mIDB4NyAoOGNoKSB3aGVuIGFsbCB0aGUKKwkgKiBzdHJlYW1zIGFyZSBkaXNhYmxlZC4gKi8KKwludmhkbWlfOGNoXzd4X3NldF9pbmZvX2ZyYW1lX3BhcmFtZXRlcnMoY29kZWMsIDgpOworCiAJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbG9zZShjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKIH0KIApAQCAtMTMwOCwzNyArMTM0NSwxNiBAQAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJaW50IGNoczsKLQl1bnNpZ25lZCBpbnQgZGF0YURDQzEsIGRhdGFEQ0MyLCBjaGFuLCBjaGFubWFzaywgY2hhbm5lbF9pZDsKKwl1bnNpZ25lZCBpbnQgZGF0YURDQzEsIGRhdGFEQ0MyLCBjaGFubmVsX2lkOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAogCWNocyA9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHM7Ci0JY2hhbiA9IGNocyA/IChjaHMgLSAxKSA6IDE7CiAKLQlzd2l0Y2ggKGNocykgewotCWRlZmF1bHQ6Ci0JY2FzZSAwOgotCWNhc2UgMjoKLQkJY2hhbm1hc2sgPSAweDAwOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWNoYW5tYXNrID0gMHgwODsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQljaGFubWFzayA9IDB4MGI7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJY2hhbm1hc2sgPSAweDEzOwotCQlicmVhazsKLQl9CiAJZGF0YURDQzEgPSBBQ19ESUcxX0VOQUJMRSB8IEFDX0RJRzFfQ09QWVJJR0hUOwogCWRhdGFEQ0MyID0gMHgyOwogCi0JLyogc2V0IHRoZSBBdWRpbyBJbmZvckZyYW1lIENoYW5uZWwgQWxsb2NhdGlvbiAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MSwgMCwKLQkJCU52X1ZFUkJfU0VUX0NoYW5uZWxfQWxsb2NhdGlvbiwgY2hhbm1hc2spOwotCiAJLyogdHVybiBvZmYgU1BESUYgb25jZTsgb3RoZXJ3aXNlIHRoZSBJRUM5NTggYml0cyB3b24ndCBiZSB1cGRhdGVkICovCiAJaWYgKGNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgJiYgKGNvZGVjLT5zcGRpZl9jdGxzICYgQUNfRElHMV9FTkFCTEUpKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLApAQCAtMTQxMywxMCArMTQyOSw3IEBACiAJCX0KIAl9CiAKLQkvKiBzZXQgdGhlIEF1ZGlvIEluZm8gRnJhbWUgQ2hlY2tzdW0gKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEsIDAsCi0JCQlOdl9WRVJCX1NFVF9JbmZvX0ZyYW1lX0NoZWNrc3VtLAotCQkJKDB4NzEgLSBjaGFuIC0gY2hhbm1hc2spKTsKKwludmhkbWlfOGNoXzd4X3NldF9pbmZvX2ZyYW1lX3BhcmFtZXRlcnMoY29kZWMsIGNocyk7CiAKIAltdXRleF91bmxvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJcmV0dXJuIDA7CkBAIC0xNTEyLDYgKzE1MjUsMTEgQEAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA4OwogCXNwZWMtPnBjbV9wbGF5YmFjayA9ICZudmhkbWlfcGNtX3BsYXliYWNrXzhjaF83eDsKIAljb2RlYy0+cGF0Y2hfb3BzID0gbnZoZG1pX3BhdGNoX29wc184Y2hfN3g7CisKKwkvKiBJbml0aWFsaXplIHRoZSBhdWRpbyBpbmZvZnJhbWUgY2hhbm5lbCBtYXNrIGFuZCBjaGVja3N1bSB0byBzb21ldGhpbmcKKwkgKiB2YWxpZCAqLworCW52aGRtaV84Y2hfN3hfc2V0X2luZm9fZnJhbWVfcGFyYW1ldGVycyhjb2RlYywgOCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCAxMmM2ZjQ1Li5jODI5NzlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAKIC8qCiAgKiBDb250cm9sIHRoZSBtb2RlIG9mIHBpbiB3aWRnZXQgc2V0dGluZ3MgdmlhIHRoZSBtaXhlci4gICJwYyIgaXMgdXNlZAotICogaW5zdGVhZCBvZiAiJSIgdG8gYXZvaWQgY29uc2VxdWVuY2VzIG9mIGFjY2lkZW50bHkgdHJlYXRpbmcgdGhlICUgYXMKKyAqIGluc3RlYWQgb2YgIiUiIHRvIGF2b2lkIGNvbnNlcXVlbmNlcyBvZiBhY2NpZGVudGFsbHkgdHJlYXRpbmcgdGhlICUgYXMKICAqIGJlaW5nIHBhcnQgb2YgYSBmb3JtYXQgc3BlY2lmaWVyLiAgTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBvZiBhIHZhbHVlIGlzCiAgKiA2MyBjaGFyYWN0ZXJzIHBsdXMgTlVMTCB0ZXJtaW5hdG9yLgogICoKQEAgLTE3MDQsMTEgKzE3MDQsMTEgQEAKIAkJCQkgICBjb2RlYy0+Y2hpcF9uYW1lLCBmaXgtPnR5cGUpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCFmaXhbaWRdLmNoYWluZWQpCisJCWlmICghZml4LT5jaGFpbmVkKQogCQkJYnJlYWs7CiAJCWlmICgrK2RlcHRoID4gMTApCiAJCQlicmVhazsKLQkJaWQgPSBmaXhbaWRdLmNoYWluX2lkOworCQlpZCA9IGZpeC0+Y2hhaW5faWQ7CiAJfQogfQogCkBAIC01NjQ1LDYgKzU2NDUsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGJlZXBfd2hpdGVfbGlzdFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyOWYsICJBU1VTIiwgMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODNjZSwgIkVlZVBDIiwgMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxYSwgIkVlZVBDIiwgMSksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZDYxMywgIkludGVsIiwgMSksCiAJe30KIH07CkBAIC05ODM2LDcgKzk4MzcsNyBAQAogCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIwZCwgIkRlbGwgSW5zcGlyb24gNTMwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhM2QsICJIUCBQYXZpbGxpb24iLCBBTEM4ODNfNlNUX0RJRyksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmEzZCwgIkhQIFBhdmlsaW9uIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNGYsICJIUCBTYW1iYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjAsICJIUCBMdWNrbm93IiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MSwgIkhQIE5ldHRsZSIsIEFMQzg4M182U1RfRElHKSwKQEAgLTk4NjMsNiArOTg2NCw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNzEsIDB4ODI1OCwgIkV2ZXNoYW0gVm95YWVnZXIiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMGYxLCAweDIzNTAsICJUWUFOLVMyMzUwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA4ZSwgMHg1MzRkLCBOVUxMLCBBTEM4ODNfM1NUXzZjaCksCisJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIFAzNSBEUzNSIiwgQUxDODgyXzZTVF9ESUcpLAogCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MDM0OSwgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwNDBkLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLApAQCAtMTA2OTksNyArMTA3MDEsNiBAQAogCVBJTkZJWF9MRU5PVk9fWTUzMCwKIAlQSU5GSVhfUEJfTTUyMTAsCiAJUElORklYX0FDRVJfQVNQSVJFXzc3MzYsCi0JUElORklYX0dJR0FCWVRFXzg4MEdNLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjODgyX2ZpeHVwc1tdID0gewpAQCAtMTA3MzEsMTMgKzEwNzMyLDYgQEAKIAkJLnR5cGUgPSBBTENfRklYVVBfU0tVLAogCQkudi5za3UgPSBBTENfRklYVVBfU0tVX0lHTk9SRSwKIAl9LAotCVtQSU5GSVhfR0lHQUJZVEVfODgwR01dID0gewotCQkudHlwZSA9IEFMQ19GSVhVUF9QSU5TLAotCQkudi5waW5zID0gKGNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnW10pIHsKLQkJCXsgMHgxNCwgMHgxMTE0NDEwIH0sIC8qIHNldCBhcyBzcGVha2VyICovCi0JCQl7IH0KLQkJfQotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX2ZpeHVwX3RibFtdID0gewpAQCAtMTA3NDUsNyArMTA3MzksNiBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJMZW5vdm8gWTUzMCIsIFBJTkZJWF9MRU5PVk9fWTUzMCksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTA3YSwgIkFiaXQgQVc5RC1NQVgiLCBQSU5GSVhfQUJJVF9BVzlEX01BWCksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDI5NiwgIkFjZXIgQXNwaXJlIDc3MzZ6IiwgUElORklYX0FDRVJfQVNQSVJFXzc3MzYpLAotCVNORF9QQ0lfUVVJUksoMHgxNDU4LCAweGEwMDIsICJHaWdhYnl0ZSIsIFBJTkZJWF9HSUdBQllURV84ODBHTSksCiAJe30KIH07CiAKQEAgLTE0MTI0LDcgKzE0MTE3LDcgQEAKIH07CiAKIHN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5X2FkY19jYW5kaWRhdGVzW10gPSB7Ci0JMHgwOCwgMHgwOSwgMHgwNywKKwkweDA4LCAweDA5LCAweDA3LCAweDExLAogfTsKIAogI2RlZmluZSBhbGMyNjlfbW9kZXMJCWFsYzI2MF9tb2RlcwpAQCAtMTQ4NjgsNiArMTQ4NjEsMjMgQEAKIAlhbGNfd3JpdGVfY29lZl9pZHgoY29kZWMsIDB4MWUsIGNvZWYgfCAweDgwKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjMjcxX2ZpeHVwX2RtaWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pCit7CisJc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2ZXJic1tdID0geworCQl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwZH0sCisJCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4NDAwMH0sCisJCXt9CisJfTsKKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJaWYgKHN0cmNtcChjb2RlYy0+Y2hpcF9uYW1lLCAiQUxDMjcxWCIpKQorCQlyZXR1cm47CisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEyKTsKKwlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgPT0gQUNfSkFDS19QT1JUX0ZJWEVEKQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCB2ZXJicyk7Cit9CisKIGVudW0gewogCUFMQzI2OV9GSVhVUF9TT05ZX1ZBSU8sCiAJQUxDMjc1X0ZJWFVQX1NPTllfVkFJT19HUElPMiwKQEAgLTE0ODc2LDYgKzE0ODg2LDcgQEAKIAlBTEMyNjlfRklYVVBfQVNVU19HNzNKVywKIAlBTEMyNjlfRklYVVBfTEVOT1ZPX0VBUEQsCiAJQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSwKKwlBTEMyNzFfRklYVVBfRE1JQywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzI2OV9maXh1cHNbXSA9IHsKQEAgLTE0OTI5LDcgKzE0OTQwLDExIEBACiAJCS52LmZ1bmMgPSBhbGMyNjlfZml4dXBfaHdlcSwKIAkJLmNoYWluZWQgPSB0cnVlLAogCQkuY2hhaW5faWQgPSBBTEMyNzVfRklYVVBfU09OWV9WQUlPX0dQSU8yCi0JfQorCX0sCisJW0FMQzI3MV9GSVhVUF9ETUlDXSA9IHsKKwkJLnR5cGUgPSBBTENfRklYVVBfRlVOQywKKwkJLnYuZnVuYyA9IGFsYzI3MV9maXh1cF9kbWljLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2ZpeHVwX3RibFtdID0gewpAQCAtMTQ5MzgsNiArMTQ5NTMsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwODQsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9IV0VRKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNGQsICJTb255IFZBSU8iLCBBTEMyNjlfRklYVVBfU09OWV9WQUlPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDcwLCAiRGVsbCBNMTAxeiIsIEFMQzI2OV9GSVhVUF9ERUxMX00xMDFaKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwMjUsICJBY2VyIEFzcGlyZSIsIEFMQzI3MV9GSVhVUF9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiVGhpbmtwYWQgU0w0MTAvNTEwIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxNWUsICJUaGlua3BhZCBMNTEyIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYjgsICJUaGlua3BhZCBFZGdlIDE0IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLApAQCAtMTg3ODIsNiArMTg3OTgsOCBAQAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNmUsICJUb3NoaWJhIE5CMjB4IiwgQUxDNjYyX0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCisJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MjMwNCwgIlF1YW50YSBXSDEiLCBBTEM2NjNfQVNVU19IMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMGMsICJQQiBSUzY1IiwgQUxDNjYzX0FTVVNfTTUxVkEpLApAQCAtMTk0NTUsNyArMTk0NzMsNyBAQAogCUFMQzY2Ml9GSVhVUF9JREVBUEFELAogCUFMQzI3Ml9GSVhVUF9NQVJJTywKIAlBTEM2NjJfRklYVVBfQ1pDX1AxMFQsCi0JQUxDNjYyX0ZJWFVQX0dJR0FCWVRFLAorCUFMQzY2Ml9GSVhVUF9TS1VfSUdOT1JFLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjNjYyX2ZpeHVwc1tdID0gewpAQCAtMTk0ODQsMjAgKzE5NTAyLDE3IEBACiAJCQl7fQogCQl9CiAJfSwKLQlbQUxDNjYyX0ZJWFVQX0dJR0FCWVRFXSA9IHsKLQkJLnR5cGUgPSBBTENfRklYVVBfUElOUywKLQkJLnYucGlucyA9IChjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZ1tdKSB7Ci0JCQl7IDB4MTQsIDB4MTExNDQxMCB9LCAvKiBzZXQgYXMgc3BlYWtlciAqLwotCQkJeyB9Ci0JCX0KKwlbQUxDNjYyX0ZJWFVQX1NLVV9JR05PUkVdID0geworCQkudHlwZSA9IEFMQ19GSVhVUF9TS1UsCisJCS52LnNrdSA9IEFMQ19GSVhVUF9TS1VfSUdOT1JFLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMDgsICJBY2VyIEFzcGlyZSA4OTQyRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMWMsICJHYXRld2F5IE5WNzkiLCBBTEM2NjJfRklYVVBfU0tVX0lHTk9SRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDM4YiwgIkFjZXIgQXNwaXJlIDg5NDNHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzA1MSwgIlNhbXN1bmcgUjcyMCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUiLCBBTEM2NjJfRklYVVBfR0lHQUJZVEUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gSWRlYXBhZCBZNTUwUCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYTBkLCAiTGVub3ZvIElkZWFwYWQgWTU1MCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MWIzNSwgMHgyMjA2LCAiQ1pDIFAxMFQiLCBBTEM2NjJfRklYVVBfQ1pDX1AxMFQpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDA1ZmNkNjAuLjk0ZDE5YzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTI0NzUsNyArMjQ3NSw3IEBACiAgCiAJc3BlYy0+aHBfc3dpdGNoID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPyBuaWQgOiAwOwogCi0JLyogY2hlY2sgdG8gYmUgc3VyZSB0aGF0IHRoZSBwb3J0cyBhcmUgdXB0byBkYXRlIHdpdGgKKwkvKiBjaGVjayB0byBiZSBzdXJlIHRoYXQgdGhlIHBvcnRzIGFyZSB1cCB0byBkYXRlIHdpdGgKIAkgKiBzd2l0Y2ggY2hhbmdlcwogCSAqLwogCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIG5pZCk7CkBAIC0zNDA4LDYgKzM0MDgsOSBAQAogCWhkYV9uaWRfdCBjb25uW0hEQV9NQVhfTlVNX0lOUFVUU107CiAJaW50IGksIG51bXM7CiAKKwlpZiAoIShnZXRfd2NhcHMoY29kZWMsIG11eCkgJiBBQ19XQ0FQX0NPTk5fTElTVCkpCisJCXJldHVybiAtMTsKKwogCW51bXMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbXV4LCBjb25uLCBBUlJBWV9TSVpFKGNvbm4pKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtczsgaSsrKQogCQlpZiAoY29ubltpXSA9PSBuaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwppbmRleCAxMzcxYjU3Yy4uMDk5NzAzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC0xMjkyLDE0ICsxMjkyLDE4IEBACiB7CiAJaW50IGk7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDsKLQljb25zdCBjaGFyICpsYWJlbHNbXSA9IHsiTWljIiwgIkZyb250IE1pYyIsICJMaW5lIn07CisJY29uc3QgY2hhciAqbGFiZWxzW10gPSB7Ik1pYyIsICJGcm9udCBNaWMiLCAiTGluZSIsICJSZWFyIE1pYyJ9OworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKIAogCW1lbXNldCgmaWQsIDAsIHNpemVvZihpZCkpOwogCWlkLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGFiZWxzKTsgaSsrKSB7CiAJCXNwcmludGYoaWQubmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIGxhYmVsc1tpXSk7Ci0JCXNuZF9jdGxfbm90aWZ5KGNvZGVjLT5idXMtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAotCQkJICAgICAgICZpZCk7CisJCWN0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsIGlkLm5hbWUpOworCQlpZiAoY3RsKQorCQkJc25kX2N0bF9ub3RpZnkoY29kZWMtPmJ1cy0+Y2FyZCwKKwkJCQkJU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkJCSZjdGwtPmlkKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jIGIvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMKaW5kZXggMmY2MjUyMi4uM2U0ZjhjMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCXVkZWxheSgxMDApOwogCS8qCiAJICogc2VuZCBkZXZpY2UgYWRkcmVzcywgY29tbWFuZCBhbmQgdmFsdWUsCi0JICogc2tpcHBpbmcgYWNrIGN5Y2xlcyBpbmJldHdlZW4KKwkgKiBza2lwcGluZyBhY2sgY3ljbGVzIGluIGJldHdlZW4KIAkgKi8KIAlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7CiAJCXN3aXRjaCAoaikgewpAQCAtMjE0Myw3ICsyMTQzLDcgQEAKIAkJaWNlLT5udW1fdG90YWxfYWRjcyA9IDI7CiAJfQogCi0JLyogdG8gcmVtZWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzIG9mIENTODQxNSAqLworCS8qIHRvIHJlbWVtYmVyIHRoZSByZWdpc3RlciB2YWx1ZXMgb2YgQ1M4NDE1ICovCiAJaWNlLT5ha20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2FrbTR4eHgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWljZS0+YWttKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCA0ZmM2ZDhiLi5mNDU5NGQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0yNzU1LDcgKzI3NTUsNyBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCQlpZiAoYy0+bXB1NDAxXzFfbmFtZSkKLQkJCS8qICBQcmVmZXJlZCBuYW1lIGF2YWlsYWJsZSBpbiBjYXJkX2luZm8gKi8KKwkJCS8qICBQcmVmZXJyZWQgbmFtZSBhdmFpbGFibGUgaW4gY2FyZF9pbmZvICovCiAJCQlzbnByaW50ZihpY2UtPnJtaWRpWzBdLT5uYW1lLAogCQkJCSBzaXplb2YoaWNlLT5ybWlkaVswXS0+bmFtZSksCiAJCQkJICIlcyAlZCIsIGMtPm1wdTQwMV8xX25hbWUsIGNhcmQtPm51bWJlcik7CkBAIC0yNzcyLDcgKzI3NzIsNyBAQAogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAJCQlpZiAoYy0+bXB1NDAxXzJfbmFtZSkKLQkJCQkvKiAgUHJlZmVyZWQgbmFtZSBhdmFpbGFibGUgaW4gY2FyZF9pbmZvICovCisJCQkJLyogIFByZWZlcnJlZCBuYW1lIGF2YWlsYWJsZSBpbiBjYXJkX2luZm8gKi8KIAkJCQlzbnByaW50ZihpY2UtPnJtaWRpWzFdLT5uYW1lLAogCQkJCQkgc2l6ZW9mKGljZS0+cm1pZGlbMV0tPm5hbWUpLAogCQkJCQkgIiVzICVkIiwgYy0+bXB1NDAxXzJfbmFtZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3BvbnRpcy5jIGIvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKaW5kZXggY2RiODczZi4uOTJjMTE2MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKQEAgLTc2OCw3ICs3NjgsNyBAQAogCWljZS0+bnVtX3RvdGFsX2RhY3MgPSAyOwogCWljZS0+bnVtX3RvdGFsX2FkY3MgPSAyOwogCi0JLyogdG8gcmVtZWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCisJLyogdG8gcmVtZW1iZXIgdGhlIHJlZ2lzdGVyIHZhbHVlcyAqLwogCWljZS0+YWttID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9ha200eHh4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgaWNlLT5ha20pCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYwppbmRleCA2YTlmZWUzLi43NjRjYzkzZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAJKiBkb24ndCBjYWxsIHNuZF9pY2UxNzEyX2dwaW9fZ2V0L3B1dCgpLCBvdGhlcndpc2UgaXQncyBvdmVyd3JpdHRlbgogCSovCiAJaWNlLT5ncGlvLnNhdmVkWzBdID0gMDsKLQkvKiB0byByZW1lYmVyIHRoZSByZWdpc3RlciB2YWx1ZXMgKi8KKwkvKiB0byByZW1lbWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCiAKIAlpY2UtPmFrbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfYWttNHh4eCksIEdGUF9LRVJORUwpOwogCWlmICghIGljZS0+YWttKQpAQCAtMTEyOCw3ICsxMTI4LDcgQEAKIAkqIGRvbid0IGNhbGwgc25kX2ljZTE3MTJfZ3Bpb19nZXQvcHV0KCksIG90aGVyd2lzZSBpdCdzIG92ZXJ3cml0dGVuCiAJKi8KIAlpY2UtPmdwaW8uc2F2ZWRbMF0gPSAwOwotCS8qIHRvIHJlbWViZXIgdGhlIHJlZ2lzdGVyIHZhbHVlcyAqLworCS8qIHRvIHJlbWVtYmVyIHRoZSByZWdpc3RlciB2YWx1ZXMgKi8KIAogCWljZS0+YWttID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9ha200eHh4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgaWNlLT5ha20pCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IDYyOWE1NDkuLjZjODk2ZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC01MzQsNyArNTM0LDcgQEAKIAkJdWRlbGF5KDEwKTsKIAl9IHdoaWxlICh0aW1lLS0pOwogCi0JLyogYWNjZXNzIHRvIHNvbWUgZm9yYmlkZGVuIChub24gZXhpc3RhbnQpIGFjOTcgcmVnaXN0ZXJzIHdpbGwgbm90CisJLyogYWNjZXNzIHRvIHNvbWUgZm9yYmlkZGVuIChub24gZXhpc3RlbnQpIGFjOTcgcmVnaXN0ZXJzIHdpbGwgbm90CiAJICogcmVzZXQgdGhlIHNlbWFwaG9yZS4gU28gZXZlbiBpZiB5b3UgZG9uJ3QgZ2V0IHRoZSBzZW1hcGhvcmUsIHN0aWxsCiAJICogY29udGludWUgdGhlIGFjY2Vzcy4gV2UgZG9uJ3QgbmVlZCB0aGUgc2VtYXBob3JlIGFueXdheS4gKi8KIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJjb2RlY19zZW1hcGhvcmU6IHNlbWFwaG9yZSBpcyBub3QgcmVhZHkgWzB4JXhdWzB4JXhdXG4iLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDJhZThkMjkuLjI3NzA5ZjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCQl1ZGVsYXkoMTApOwogCX0gd2hpbGUgKHRpbWUtLSk7CiAKLQkvKiBhY2Nlc3MgdG8gc29tZSBmb3JiaWRkZW4gKG5vbiBleGlzdGFudCkgYWM5NyByZWdpc3RlcnMgd2lsbCBub3QKKwkvKiBhY2Nlc3MgdG8gc29tZSBmb3JiaWRkZW4gKG5vbiBleGlzdGVudCkgYWM5NyByZWdpc3RlcnMgd2lsbCBub3QKIAkgKiByZXNldCB0aGUgc2VtYXBob3JlLiBTbyBldmVuIGlmIHlvdSBkb24ndCBnZXQgdGhlIHNlbWFwaG9yZSwgc3RpbGwKIAkgKiBjb250aW51ZSB0aGUgYWNjZXNzLiBXZSBkb24ndCBuZWVkIHRoZSBzZW1hcGhvcmUgYW55d2F5LiAqLwogCXNuZF9wcmludGsoS0VSTl9FUlIgImNvZGVjX3NlbWFwaG9yZTogc2VtYXBob3JlIGlzIG5vdCByZWFkeSBbMHgleF1bMHgleF1cbiIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9jb3JlLmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9jb3JlLmMKaW5kZXggZDMzNTBmMy4uM2RmMGY1MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnRfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2NvcmUuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJaWYgKCEgdGltZW91dCkgewogCQkvKiBlcnJvciAtIG5vIGFjayAqLwogCQltdXRleF91bmxvY2soJm1nci0+bXNnX211dGV4KTsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3I6IG5vIHJlcG9uc2Ugb24gbXNnICV4XG4iLCBtc2dfZnJhbWUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlcnJvcjogbm8gcmVzcG9uc2Ugb24gbXNnICV4XG4iLCBtc2dfZnJhbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI3OCw3ICsyNzgsNyBAQAogCWVyciA9IGdldF9tc2cobWdyLCAmcmVzcCwgbXNnX2ZyYW1lKTsKIAogCWlmKCByZXF1ZXN0LT5tZXNzYWdlX2lkICE9IHJlc3AubWVzc2FnZV9pZCApCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIlJFUE9OU0UgRVJST1IhXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiUkVTUE9OU0UgRVJST1IhXG4iKTsKIAogCW11dGV4X3VubG9jaygmbWdyLT5tc2dfbXV0ZXgpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYwppbmRleCA4MzNlNzE4Li4zMDQ0MTFjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmMKQEAgLTEwNDIsMTEgKzEwNDIsMTEgQEAKIAlpbnQgaSwgajsKIAogCWlmIChtZ3ItPnNyY19pdF9kc3AgJiBQQ1hIUl9JUlFfRlJFUV9DSEFOR0UpCi0JCXNuZF9wcmludGRkKCJUQVNLTEVUIDogUENYSFJfSVJRX0ZSRVFfQ0hBTkdFIGV2ZW50IG9jY3VyZWRcbiIpOworCQlzbmRfcHJpbnRkZCgiVEFTS0xFVCA6IFBDWEhSX0lSUV9GUkVRX0NIQU5HRSBldmVudCBvY2N1cnJlZFxuIik7CiAJaWYgKG1nci0+c3JjX2l0X2RzcCAmIFBDWEhSX0lSUV9USU1FX0NPREUpCi0JCXNuZF9wcmludGRkKCJUQVNLTEVUIDogUENYSFJfSVJRX1RJTUVfQ09ERSBldmVudCBvY2N1cmVkXG4iKTsKKwkJc25kX3ByaW50ZGQoIlRBU0tMRVQgOiBQQ1hIUl9JUlFfVElNRV9DT0RFIGV2ZW50IG9jY3VycmVkXG4iKTsKIAlpZiAobWdyLT5zcmNfaXRfZHNwICYgUENYSFJfSVJRX05PVElGWSkKLQkJc25kX3ByaW50ZGQoIlRBU0tMRVQgOiBQQ1hIUl9JUlFfTk9USUZZIGV2ZW50IG9jY3VyZWRcbiIpOworCQlzbmRfcHJpbnRkZCgiVEFTS0xFVCA6IFBDWEhSX0lSUV9OT1RJRlkgZXZlbnQgb2NjdXJyZWRcbiIpOwogCWlmIChtZ3ItPnNyY19pdF9kc3AgJiAoUENYSFJfSVJRX0ZSRVFfQ0hBTkdFIHwgUENYSFJfSVJRX1RJTUVfQ09ERSkpIHsKIAkJLyogY2xlYXIgZXZlbnRzIEZSRVFfQ0hBTkdFIGFuZCBUSU1FX0NPREUgKi8KIAkJcGN4aHJfaW5pdF9ybWgocHJtaCwgQ01EX1RFU1RfSVQpOwpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAkJCSAgICBlcnIsIHBybWgtPnN0YXRbMF0pOwogCX0KIAlpZiAobWdyLT5zcmNfaXRfZHNwICYgUENYSFJfSVJRX0FTWU5DKSB7Ci0JCXNuZF9wcmludGRkKCJUQVNLTEVUIDogUENYSFJfSVJRX0FTWU5DIGV2ZW50IG9jY3VyZWRcbiIpOworCQlzbmRfcHJpbnRkZCgiVEFTS0xFVCA6IFBDWEhSX0lSUV9BU1lOQyBldmVudCBvY2N1cnJlZFxuIik7CiAKIAkJcGN4aHJfaW5pdF9ybWgocHJtaCwgQ01EX0FTWU5DKTsKIAkJcHJtaC0+Y21kWzBdIHw9IDE7CS8qIGFkZCBTRUxfQVNZTkNfRVZFTlRTICovCkBAIC0xMjMzLDcgKzEyMzMsNyBAQAogCXJlZyA9IFBDWEhSX0lOUEwobWdyLCBQQ1hIUl9QTFhfTDJQQ0lEQik7CiAJUENYSFJfT1VUUEwobWdyLCBQQ1hIUl9QTFhfTDJQQ0lEQiwgcmVnKTsKIAotCS8qIHRpbWVyIGlycSBvY2N1cmVkICovCisJLyogdGltZXIgaXJxIG9jY3VycmVkICovCiAJaWYgKHJlZyAmIFBDWEhSX0lSUV9USU1FUikgewogCQlpbnQgdGltZXJfdG9nZ2xlID0gcmVnICYgUENYSFJfSVJRX1RJTUVSOwogCQkvKiBpcyBhIDI0IGJpdCBjb3VudGVyICovCkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCWlmIChyZWcgJiBQQ1hIUl9JUlFfTUFTSykgewogCQlpZiAocmVnICYgUENYSFJfSVJRX0FTWU5DKSB7CiAJCQkvKiBhcyB3ZSBkaWRuJ3QgcmVxdWVzdCBhbnkgYXN5bmMgbm90aWZpY2F0aW9ucywKLQkJCSAqIHNvbWUga2luZCBvZiB4cnVuIGVycm9yIHdpbGwgcHJvYmFibHkgb2NjdXJlZAorCQkJICogc29tZSBraW5kIG9mIHhydW4gZXJyb3Igd2lsbCBwcm9iYWJseSBvY2N1cnJlZAogCQkJICovCiAJCQkvKiBiZXR0ZXIgcmVzeW5jaHJvbml6ZSBhbGwgc3RyZWFtcyBuZXh0IGludGVycnVwdCA6ICovCiAJCQltZ3ItPmRzcF90aW1lX2xhc3QgPSBQQ1hIUl9EU1BfVElNRV9JTlZBTElEOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2LmMgYi9zb3VuZC9wY2kvcm1lOTYuYwppbmRleCBkNWY1YjQ0Li45ZmYyNDdmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTYuYworKysgYi9zb3VuZC9wY2kvcm1lOTYuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAjZGVmaW5lIFJNRTk2X1JDUl9CSVRQT1NfRjEgMjgKICNkZWZpbmUgUk1FOTZfUkNSX0JJVFBPU19GMiAyOQogCi0vKiBBZGRpdG9uYWwgcmVnaXN0ZXIgYml0cyAqLworLyogQWRkaXRpb25hbCByZWdpc3RlciBiaXRzICovCiAjZGVmaW5lIFJNRTk2X0FSX1dTRUwgICAgICAgKDEgPDwgMCkKICNkZWZpbmUgUk1FOTZfQVJfQU5BTE9HICAgICAoMSA8PCAxKQogI2RlZmluZSBSTUU5Nl9BUl9GUkVRUEFEXzAgICgxIDw8IDIpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCBhMzIzZWFmLi45NDk2OTFhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCiAvKiBTdGF0dXMyIFJlZ2lzdGVyIGJpdHMgKi8gLyogTUFESSBPTkxZICovCiAKLSNkZWZpbmUgSERTUE1fdmVyc2lvbjAgKDE8PDApCS8qIG5vdCByZWFseSBkZWZpbmVkIGJ1dCBJIGd1ZXNzICovCisjZGVmaW5lIEhEU1BNX3ZlcnNpb24wICgxPDwwKQkvKiBub3QgcmVhbGx5IGRlZmluZWQgYnV0IEkgZ3Vlc3MgKi8KICNkZWZpbmUgSERTUE1fdmVyc2lvbjEgKDE8PDEpCS8qIGluIGZvcm1lciBjYXJkcyBpdCB3YXMgPz8/ICovCiAjZGVmaW5lIEhEU1BNX3ZlcnNpb24yICgxPDwyKQogCkBAIC05MzYsNyArOTM2LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpwbGF5YmFja19taXhlcl9jdGxzW0hEU1BNX01BWF9DSEFOTkVMU107CiAJLyogYnV0IGlucHV0IHRvIG11Y2gsIHNvIG5vdCB1c2VkICovCiAJc3RydWN0IHNuZF9rY29udHJvbCAqaW5wdXRfbWl4ZXJfY3Rsc1tIRFNQTV9NQVhfQ0hBTk5FTFNdOwotCS8qIGZ1bGwgbWl4ZXIgYWNjZXNzYWJsZSBvdmVyIG1peGVyIGlvY3RsIG9yIGh3ZGVwLWRldmljZSAqLworCS8qIGZ1bGwgbWl4ZXIgYWNjZXNzaWJsZSBvdmVyIG1peGVyIGlvY3RsIG9yIGh3ZGVwLWRldmljZSAqLwogCXN0cnVjdCBoZHNwbV9taXhlciAqbWl4ZXI7CiAKIAlzdHJ1Y3QgaGRzcG1fdGNvICp0Y287ICAvKiBOVUxMIGlmIG5vIFRDTyBkZXRlY3RlZCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3NpczcwMTkuYyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKaW5kZXggMWI4ZjY3NC4uMmI1YzdhOTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zaXM3MDE5LmMKKysrIGIvc291bmQvcGNpL3NpczcwMTkuYwpAQCAtMzA4LDcgKzMwOCw3IEBACiAJdTMyIGludHIsIHN0YXR1czsKIAogCS8qIFdlIG9ubHkgdXNlIHRoZSBETUEgaW50ZXJydXB0cywgYW5kIHdlIGRvbid0IGVuYWJsZSBhbnkgb3RoZXIKLQkgKiBzb3VyY2Ugb2YgaW50ZXJydXB0cy4gQnV0LCBpdCBpcyBwb3NzaWJsZSB0byBzZWUgYW4gaW50ZXJ1cHQKKwkgKiBzb3VyY2Ugb2YgaW50ZXJydXB0cy4gQnV0LCBpdCBpcyBwb3NzaWJsZSB0byBzZWUgYW4gaW50ZXJydXB0CiAJICogc3RhdHVzIHRoYXQgZGlkbid0IGFjdHVhbGx5IGludGVycnVwdCB1cywgc28gZWxpbWluYXRlIGFueXRoaW5nCiAJICogd2UncmUgbm90IGV4cGVjdGluZyB0byBhdm9pZCBmYWxzZWx5IGNsYWltaW5nIGFuIElSUSwgYW5kIGFuCiAJICogZW5zdWluZyBlbmRsZXNzIGxvb3AuCkBAIC03NzMsNyArNzczLDcgQEAKIAkJdnBlcmlvZCA9IDA7CiAJfQogCi0JLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGltcGxlbWVudHMgdGhlIHRpbWluZyBzeW5jcm9uaXphdGlvbiwgc28KKwkvKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaW1wbGVtZW50cyB0aGUgdGltaW5nIHN5bmNocm9uaXphdGlvbiwgc28KIAkgKiBzZXR1cCBpdHMgc3RhdGUuCiAJICovCiAJdGltaW5nLT5mbGFncyB8PSBWT0lDRV9TWU5DX1RJTUlORzsKQEAgLTExMzksNyArMTEzOSw3IEBACiAJICovCiAJb3V0bChTSVNfRE1BX0NTUl9QQ0lfU0VUVElOR1MsIGlvICsgU0lTX0RNQV9DU1IpOwogCi0JLyogUmVzZXQgdGhlIHN5bmNyb25pemF0aW9uIGdyb3VwcyBmb3IgYWxsIG9mIHRoZSBjaGFubmVscworCS8qIFJlc2V0IHRoZSBzeW5jaHJvbml6YXRpb24gZ3JvdXBzIGZvciBhbGwgb2YgdGhlIGNoYW5uZWxzCiAJICogdG8gYmUgYXN5bmNyb25vdXMuIElmIHdlIHN0YXJ0IGRvaW5nIFNQRElGIG9yIDUuMSBzb3VuZCwgZXRjLgogCSAqIHdlJ2xsIG5lZWQgdG8gY2hhbmdlIGhvdyB3ZSBoYW5kbGUgdGhlc2UuIFVudGlsIHRoZW4sIHdlIGp1c3QKIAkgKiBhc3NpZ24gc3ViLW1peGVyIDAgdG8gYWxsIHBsYXliYWNrIGNoYW5uZWxzLCBhbmQgYXZvaWQgYW55CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5jIGIvc291bmQvcHBjL3NuZF9wczMuYwppbmRleCBlZGNlOGEyLi5iYzgyM2E1IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5jCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCQkgKiBmaWxsaW5nIGR1bW15IGRhdGEsIHNlcmlhbCBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRvCiAJCSAqIGNvbnN1bWUgdGhlbSBhbmQgdGhlbiB3aWxsIGdlbmVyYXRlIG5vcm1hbCBidWZmZXIKIAkJICogZW1wdHkgaW50ZXJydXB0cy4KLQkJICogSWYgYm90aCBidWZmZXIgdW5kZXJmbG93IGFuZCBidWZmZXIgZW1wdHkgYXJlIG9jY3VyZWQsCisJCSAqIElmIGJvdGggYnVmZmVyIHVuZGVyZmxvdyBhbmQgYnVmZmVyIGVtcHR5IGFyZSBvY2N1cnJlZCwKIAkJICogaXQgaXMgYmV0dGVyIHRvIGRvIG5vbWFsIGRhdGEgdHJhbnNmZXIgdGhhbiBlbXB0eSBvbmUKIAkJICovCiAJCXNuZF9wczNfcHJvZ3JhbV9kbWEoY2FyZCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzX3JlZy5oIGIvc291bmQvcHBjL3NuZF9wczNfcmVnLmgKaW5kZXggMDNmZGVlNC4uMmU2MzAyMCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3NuZF9wczNfcmVnLmgKKysrIGIvc291bmQvcHBjL3NuZF9wczNfcmVnLmgKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgdHJhbnNmZXJzLiAgQW55IGludGVycnVwdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYW5jZWxlZCB0cmFuc2ZlcnMKICAgIHdpbGwgb2NjdXIgYXMgaWYgdGhlIHRyYW5zZmVyIGhhZCBmaW5pc2hlZC4KICAgIFNpbmNlIHRoaXMgYml0IGlzIGRlc2lnbmVkIHRvIHJlY292ZXIgZnJvbSBETUEgcmVsYXRlZCBpc3N1ZXMKLSAgIHdoaWNoIGFyZSBjYXVzZWQgYnkgdW5wcmVkaWN0YWJsZSBzaXR1YXRpb25zLCBpdCBpcyBwcmVmZXJlZCB0byB3YWl0CisgICB3aGljaCBhcmUgY2F1c2VkIGJ5IHVucHJlZGljdGFibGUgc2l0dWF0aW9ucywgaXQgaXMgcHJlZmVycmVkIHRvIHdhaXQKICAgIGZvciBub3JtYWwgRE1BIHRyYW5zZmVyIGVuZCB3aXRob3V0IHVzaW5nIHRoaXMgYml0LgogKi8KICNkZWZpbmUgUFMzX0FVRElPX0NPTkZJR19DTEVBUiAgICAgICAgICAoMSA8PCA4KSAgLyogUldJVkYgKi8KQEAgLTMxNiwxMyArMzE2LDEzIEBACiAKIC8qCiBBdWRpbyBQb3J0IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKLUluZGljYXRlcyBJbnRlcnJ1cHQgc3RhdHVzLCB3aGljaCBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQsIGFuZCBjYW4gY2xlYXIKK0luZGljYXRlcyBJbnRlcnJ1cHQgc3RhdHVzLCB3aGljaCBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkLCBhbmQgY2FuIGNsZWFyCiBlYWNoIGludGVycnVwdCBpbiB0aGlzIHJlZ2lzdGVyLgogV3JpdGluZyAxYiB0byBhIGZpZWxkIGNvbnRhaW5pbmcgMWIgY2xlYXJzIGZpZWxkIGFuZCBkZS1hc3NlcnRzIGludGVycnVwdC4KIFdyaXRpbmcgMGIgdG8gYSBmaWVsZCBoYXMgbm8gZWZmZWN0LgogRmllbGQgdmF1bGVzIGFyZSB0aGUgZm9sbG93aW5nOgotMCAtIEludGVycnVwdCBoYXNuJ3Qgb2NjdXJlZC4KLTEgLSBJbnRlcnJ1cHQgaGFzIG9jY3VyZWQuCiswIC0gSW50ZXJydXB0IGhhc24ndCBvY2N1cnJlZC4KKzEgLSBJbnRlcnJ1cHQgaGFzIG9jY3VycmVkLgogCiAKICAzMSAgICAgICAgICAgIDI0IDIzICAgICAgICAgICAxNiAxNSAgICAgICAgICAgIDggNyAgICAgICAgICAgICAwCkBAIC00NzMsNyArNDczLDcgQEAKIC8qCiBTYW1wbGluZyBSYXRlCiBTcGVjaWZpZXMgdGhlIGRpdmlkZSByYXRpbyBvZiB0aGUgYml0IGNsb2NrIChjbG9jayBvdXRwdXQKLWZyb20gYmNsa28pIHVzZWQgYnkgdGhlIDMtd2lyZSBBdWRpbyBPdXRwdXQgQ2xvY2ssIHdoY2loCitmcm9tIGJjbGtvKSB1c2VkIGJ5IHRoZSAzLXdpcmUgQXVkaW8gT3V0cHV0IENsb2NrLCB3aGljaAogaXMgYXBwbGllZCB0byB0aGUgbWFzdGVyIGNsb2NrIHNlbGVjdGVkIGJ5IG1ja3NlbC4KIERhdGEgb3V0cHV0IGlzIHN5bmNocm9uaXplZCB3aXRoIHRoaXMgY2xvY2suCiAqLwpAQCAtNzU2LDcgKzc1Niw3IEBACiBET05FIGluZGljYXRlcyB0aGUgcHJldmlvdXMgcmVxdWVzdCBoYXMgY29tcGxldGVkLgogRVZFTlQgaW5kaWNhdGVzIHRoYXQgdGhlIERNQSBlbmdpbmUgaXMgd2FpdGluZyBmb3IgdGhlIEVWRU5UIHRvIG9jY3VyLgogUEVORElORyBpbmRpY2F0ZXMgdGhhdCB0aGUgRE1BIGVuZ2luZSBoYXMgbm90IHN0YXJ0ZWQgcHJvY2Vzc2luZyB0aGlzCi1yZXF1ZXN0LCBidXQgdGhlIEVWRU5UIGhhcyBvY2N1cmVkLgorcmVxdWVzdCwgYnV0IHRoZSBFVkVOVCBoYXMgb2NjdXJyZWQuCiBETUEgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MuCiBOT1RJRlkgaW5kaWNhdGVzIHRoYXQgdGhlIG5vdGlmaWVyIHNpZ25hbGxpbmcgZW5kIG9mIHRyYW5zZmVyIGlzIGJlaW5nIHdyaXR0ZW4uCiBDTEVBUiBpbmRpY2F0ZWQgdGhhdCB0aGUgcHJldmlvdXMgdHJhbnNmZXIgd2FzIGNsZWFyZWQuCkBAIC04MjQsNyArODI0LDcgQEAKIAogLyoKIFBTM19BVURJT19ETUFTSVpFIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIDEyOC1ieXRlIGJsb2NrcyArIDEgdG8gdHJhbnNmZXIuCi1TbyBhIHZhbHVlIG9mIDAgbWVhbnMgMTI4LWJ5dGVzIHdpbGwgZ2V0IHRyYW5zZmVyZWQuCitTbyBhIHZhbHVlIG9mIDAgbWVhbnMgMTI4LWJ5dGVzIHdpbGwgZ2V0IHRyYW5zZmVycmVkLgogCiAKICAzMSAgICAgICAgICAgIDI0IDIzICAgICAgICAgICAxNiAxNSAgICAgICAgICAgIDggNyAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwppbmRleCA1ZDIzMGNlLi43ZmJmYTA1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKQEAgLTY3Miw3ICs2NzIsNyBAQAogCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCiAJc3NjX3dyaXRlbChzc2NfcC0+c3NjLT5yZWdzLCBJRVIsIHNzY19wLT5zc2Nfc3RhdGUuc3NjX2ltcik7CiAKLQkvKiBSZS1lbmFibGUgcmVjaWV2ZSBhbmQgdHJhbnNtaXQgYXMgYXBwcm9wcmlhdGUgKi8KKwkvKiBSZS1lbmFibGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgYXMgYXBwcm9wcmlhdGUgKi8KIAljciA9IDA7CiAJY3IgfD0KIAkgICAgKHNzY19wLT5zc2Nfc3RhdGUuc3NjX3NyICYgU1NDX0JJVChTUl9SWEVOKSkgPyBTU0NfQklUKENSX1JYRU4pIDogMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5jIGIvc291bmQvc29jL2NvZGVjcy9hbGM1NjIzLmMKaW5kZXggNGYzNzdjOS4uZWVjZmZiNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hbGM1NjIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hbGM1NjIzLmMKQEAgLTQ4MSw3ICs0ODEsNyBAQAogfTsKIAogLyogTm90ZSA6IHBsbCBjb2RlIGZyb20gb3JpZ2luYWwgYWxjNTYyMyBkcml2ZXIuIE5vdCBzdXJlIG9mIGhvdyBnb29kIGl0IGlzICovCi0vKiB1c2VmdWxsIG9ubHkgZm9yIG1hc3RlciBtb2RlICovCisvKiB1c2VmdWwgb25seSBmb3IgbWFzdGVyIG1vZGUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX3BsbF9kaXYgY29kZWNfbWFzdGVyX3BsbF9kaXZbXSA9IHsKIAogCXsgIDIwNDgwMDAsICA4MTkyMDAwLAkweDBlYTB9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMKaW5kZXggZjdjZDM0NmYuLmY1Y2NkYmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYwpAQCAtMzA4LDggKzMwOCw2IEBACiAJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgano0NzQwX2NvZGVjX2RhcG1fcm91dGVzLAogCQlBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcykpOwogCi0Jc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKLQogCWp6NDc0MF9jb2RlY19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2xtNDg1Ny5jIGIvc291bmQvc29jL2NvZGVjcy9sbTQ4NTcuYwppbmRleCA3MmRlNDdlLi4yYzJhNjgxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2xtNDg1Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvbG00ODU3LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQlsbTQ4NTdfZ2V0X21vZGUsIGxtNDg1N19zZXRfbW9kZSksCiB9OwogCi0vKiBUaGVyZSBpcyBhIGRlbXV4IGluYmV0d2VlbiB0aGUgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG91dHB1dCBzaWduYWxzLgorLyogVGhlcmUgaXMgYSBkZW11eCBiZXR3ZWVuIHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBvdXRwdXQgc2lnbmFscy4KICAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBtb2RlbCBpdCBpbiBBU29DIGFuZCBzaW5jZSBpdCBkb2VzIG5vdCBtYWtlCiAgKiBtdWNoIG9mIGEgZGlmZmVyZW5jZSBpbiBwcmFjdGljZSBzaW1wbHkgY29ubmVjdCB0aGUgaW5wdXQgZGlyZWNsdHkgdG8gdGhlCiAgKiBvdXRwdXRzLiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zbjk1MDMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwppbmRleCAyYTMwZWFlLi40ZDlmYjI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwpAQCAtMjYsNyArMjYsOSBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKICNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTkyNSw3ICs5MjcsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUJCT0gc245NTAzMV9kZXZpY2VfcHJvYmUsCi0JLnJlbW92ZQkJPSBzbjk1MDMxX2RldmljZV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbjk1MDMxX2RldmljZV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc245NTAzMV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jCmluZGV4IDI3MjdiZWYuLmIwNGQyODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jCkBAIC0xMzksNyArMTM5LDcgQEAKIFNPQ19ET1VCTEVfUigiQ2FwdHVyZSBTd2l0Y2giLCBTU00yNjAyX0xJTlZPTCwgU1NNMjYwMl9SSU5WT0wsIDcsIDEsIDEpLAogCiBTT0NfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSIsIFNTTTI2MDJfQVBBTkEsIDAsIDEsIDApLAotU09DX1NJTkdMRSgiTWljIEJvb3N0MiAoKzIwZEIpIiwgU1NNMjYwMl9BUEFOQSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJNaWMgQm9vc3QyICgrMjBkQikiLCBTU00yNjAyX0FQQU5BLCA4LCAxLCAwKSwKIFNPQ19TSU5HTEUoIk1pYyBTd2l0Y2giLCBTU00yNjAyX0FQQU5BLCAxLCAxLCAxKSwKIAogU09DX1NJTkdMRSgiU2lkZXRvbmUgUGxheWJhY2sgVm9sdW1lIiwgU1NNMjYwMl9BUEFOQSwgNiwgMywgMSksCkBAIC02MDIsNyArNjAyLDcgQEAKIAkucmVhZCA9IHNzbTI2MDJfcmVhZF9yZWdfY2FjaGUsCiAJLndyaXRlID0gc3NtMjYwMl93cml0ZSwKIAkuc2V0X2JpYXNfbGV2ZWwgPSBzc20yNjAyX3NldF9iaWFzX2xldmVsLAotCS5yZWdfY2FjaGVfc2l6ZSA9IHNpemVvZihzc20yNjAyX3JlZyksCisJLnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRShzc20yNjAyX3JlZyksCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKIAkucmVnX2NhY2hlX2RlZmF1bHQgPSBzc20yNjAyX3JlZywKIH07CkBAIC02MTQsNyArNjE0LDcgQEAKICAqICAgIGxvdyAgPSAweDFhCiAgKiAgICBoaWdoID0gMHgxYgogICovCi1zdGF0aWMgaW50IHNzbTI2MDJfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzc20yNjAyX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNzbTI2MDJfcHJpdiAqc3NtMjYwMjsKQEAgLTYzNSw3ICs2MzUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc3NtMjYwMl9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzc20yNjAyX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmNsaWVudC0+ZGV2KTsKIAlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CkBAIC02NTUsNyArNjU1LDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSBzc20yNjAyX2kyY19wcm9iZSwKLQkucmVtb3ZlID0gc3NtMjYwMl9pMmNfcmVtb3ZlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzc20yNjAyX2kyY19yZW1vdmUpLAogCS5pZF90YWJsZSA9IHNzbTI2MDJfaTJjX2lkLAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5oIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5oCmluZGV4IDYyYjFmMjIuLjY3ZjE5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmgKQEAgLTE0LDE0ICsxNCwxNCBAQAogI2RlZmluZSBBSUMyNl9QQUdFX0FERFIocGFnZSwgb2Zmc2V0KQkoKHBhZ2UgPDwgNikgfCBvZmZzZXQpCiAjZGVmaW5lIEFJQzI2X05VTV9SRUdTCQkJQUlDMjZfUEFHRV9BRERSKDMsIDApCiAKLS8qIFBhZ2UgMDogQXV4aWxsYXJ5IGRhdGEgcmVnaXN0ZXJzICovCisvKiBQYWdlIDA6IEF1eGlsaWFyeSBkYXRhIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBSUMyNl9SRUdfQkFUMQkJCUFJQzI2X1BBR0VfQUREUigwLCAweDA1KQogI2RlZmluZSBBSUMyNl9SRUdfQkFUMgkJCUFJQzI2X1BBR0VfQUREUigwLCAweDA2KQogI2RlZmluZSBBSUMyNl9SRUdfQVVYCQkJQUlDMjZfUEFHRV9BRERSKDAsIDB4MDcpCiAjZGVmaW5lIEFJQzI2X1JFR19URU1QMQkJCUFJQzI2X1BBR0VfQUREUigwLCAweDA5KQogI2RlZmluZSBBSUMyNl9SRUdfVEVNUDIJCQlBSUMyNl9QQUdFX0FERFIoMCwgMHgwQSkKIAotLyogUGFnZSAxOiBBdXhpbGxhcnkgY29udHJvbCByZWdpc3RlcnMgKi8KKy8qIFBhZ2UgMTogQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFJQzI2X1JFR19BVVhfQURDCQlBSUMyNl9QQUdFX0FERFIoMSwgMHgwMCkKICNkZWZpbmUgQUlDMjZfUkVHX1NUQVRVUwkJQUlDMjZfUEFHRV9BRERSKDEsIDB4MDEpCiAjZGVmaW5lIEFJQzI2X1JFR19SRUZFUkVOQ0UJCUFJQzI2X1BBR0VfQUREUigxLCAweDAzKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IDNiZWRhYjIuLjZjNDNjMTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTg4NCw3ICs4ODQsNyBAQAogCWlmIChieXBhc3NfcGxsKQogCQlyZXR1cm4gMDsKIAotCS8qIFVzZSBQTEwsIGNvbXB1dGUgYXByb3ByaWF0ZSBzZXR1cCBmb3IgaiwgZCwgciBhbmQgcCwgdGhlIGNsb3Nlc3QKKwkvKiBVc2UgUExMLCBjb21wdXRlIGFwcHJvcHJpYXRlIHNldHVwIGZvciBqLCBkLCByIGFuZCBwLCB0aGUgY2xvc2VzdAogCSAqIG9uZSB3aW5zIHRoZSBnYW1lLiBUcnkgd2l0aCBkPT0wIGZpcnN0LCBuZXh0IHdpdGggZCE9MC4KIAkgKiBDb25zdHJhaW50cyBmb3IgaiBhcmUgYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2hlZXQuCiAJICogVGhlIHN5c2NsayBpcyBkaXZpZGVkIGJ5IDEwMDAgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwppbmRleCBlYjFhMGI0Li4wODJlOWQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCQkvKgogCQkgKiBGb3IgRklGTyBieXBhc3MgbW9kZToKIAkJICogRW5hYmxlIHRoZSBGSUZPIGJ5cGFzcyAoRGlzYWJsZSB0aGUgRklGTyB1c2UpCi0JCSAqIFNldCB0aGUgQkNMSyBhcyBjb250aW5vdXMKKwkJICogU2V0IHRoZSBCQ0xLIGFzIGNvbnRpbnVvdXMKIAkJICovCiAJCWZpZm9jdHJsX2EgfD0gREFDMzNfRkJZUEFTOwogCQlhaWN0cmxfYiB8PSBEQUMzM19CQ0xLT047CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCmluZGV4IDg1MTI4MDAuLjU3NTIzOGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCkBAIC0yODEsNyArMjgxLDcgQEAKIAkJCQkgaSwgdmFsLCB0d2w0MDMwX3JlZ1tpXSk7CiAJCX0KIAl9Ci0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRm91bmQgJWQgbm9uIG1hY2hpbmcgcmVnaXN0ZXJzLiAlc1xuIiwKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJGb3VuZCAlZCBub24tbWF0Y2hpbmcgcmVnaXN0ZXJzLiAlc1xuIiwKIAkJIGRpZmZlcmVuY2UsIGRpZmZlcmVuY2UgPyAiTm90IE9LIiA6ICJPSyIpOwogfQogCkBAIC0yMDE4LDcgKzIwMTgsNyBAQAogCXU4IG1vZGU7CiAKIAkvKiBJZiB0aGUgc3lzdGVtIG1hc3RlciBjbG9jayBpcyBub3QgMjZNSHosIHRoZSB2b2ljZSBQQ00gaW50ZXJmYWNlIGlzCi0JICogbm90IGF2aWxhYmxlLgorCSAqIG5vdCBhdmFpbGFibGUuCiAJICovCiAJaWYgKHR3bDQwMzAtPnN5c2NsayAhPSAyNjAwMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJUaGUgYm9hcmQgaXMgY29uZmlndXJlZCBmb3IgJXUgSHosIHdoaWxlIgpAQCAtMjAyOCw3ICsyMDI4LDcgQEAKIAl9CiAKIAkvKiBJZiB0aGUgY29kZWMgbW9kZSBpcyBub3Qgb3B0aW9uMiwgdGhlIHZvaWNlIFBDTSBpbnRlcmZhY2UgaXMgbm90Ci0JICogYXZpbGFibGUuCisJICogYXZhaWxhYmxlLgogCSAqLwogCW1vZGUgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFKQogCQkmIFRXTDQwMzBfT1BUX01PREU7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCmluZGV4IDQ4ZmZkNDAuLmE3YjhmMzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCkBAIC02MDEsOSArNjAxLDcgQEAKIAkucmVnX2NhY2hlX3N0ZXAgPSAxLAogCS5yZWFkID0gdWRhMTM0eF9yZWFkX3JlZ19jYWNoZSwKIAkud3JpdGUgPSB1ZGExMzR4X3dyaXRlLAotI2lmZGVmIFBPV0VSX09GRl9PTl9TVEFOREJZCiAJLnNldF9iaWFzX2xldmVsID0gdWRhMTM0eF9zZXRfYmlhc19sZXZlbCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdWRhMTM0eF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKaW5kZXggOGY2YjVlZS4uNGJiYzBhNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCkBAIC03NzIsNyArNzcyLDcgQEAKIAkJCXJlZyAmPSB+KFdNODU4MF9QV1JETjFfUFdETiB8IFdNODU4MF9QV1JETjFfQUxMREFDUEQpOwogCQkJc25kX3NvY193cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgcmVnKTsKIAotCQkJLyogTWFrZSBWTUlEIGhpZ2ggaW1wZWRlbmNlICovCisJCQkvKiBNYWtlIFZNSUQgaGlnaCBpbXBlZGFuY2UgKi8KIAkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgIFdNODU4MF9BRENfQ09OVFJPTDEpOwogCQkJcmVnICY9IH4weDEwMDsKIAkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9BRENfQ09OVFJPTDEsIHJlZyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwppbmRleCAzZjA5ZGVlLi5mZmEyZmZlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKQEAgLTEzMTIsNyArMTMxMiw3IEBACiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKIC8qCi0gKiBUaGUgV004NzUzIHN1cHBvcnRzIHVwdG8gNCBkaWZmZXJlbnQgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSBEQUkKKyAqIFRoZSBXTTg3NTMgc3VwcG9ydHMgdXAgdG8gNCBkaWZmZXJlbnQgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSBEQUkKICAqIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGdpdmVzIDIgUENNJ3MgYXZhaWxhYmxlIGZvciB1c2UsIGhpZmkgYW5kIHZvaWNlLgogICogTk9URTogVGhlIFZvaWNlIFBDTSBjYW5ub3QgcGxheSBvciBjYXB0dXJlIGF1ZGlvIHRvIHRoZSBDUFUgYXMgaXQncyBEQUkKICAqIGlzIGNvbm5lY3RlZCBiZXR3ZWVuIHRoZSB3bTg3NTMgYW5kIGEgQlQgY29kZWMgb3IgR1NNIG1vZGVtLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKaW5kZXggYWUxY2FkZi4uODI0ZDFjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCkBAIC0yNDcsOCArMjQ3LDYgQEAKIAljYXNlIFdNODkwM19SRVZJU0lPTl9OVU1CRVI6CiAJY2FzZSBXTTg5MDNfSU5URVJSVVBUX1NUQVRVU18xOgogCWNhc2UgV004OTAzX1dSSVRFX1NFUVVFTkNFUl80OgotCWNhc2UgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMzoKLQljYXNlIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzI6CiAJY2FzZSBXTTg5MDNfRENfU0VSVk9fUkVBREJBQ0tfMToKIAljYXNlIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18yOgogCWNhc2UgV004OTAzX0RDX1NFUlZPX1JFQURCQUNLXzM6CkBAIC02OTQsNyArNjkyLDcgQEAKIFNPQ19TSU5HTEVfVExWKCJEUkMgU3RhcnR1cCBWb2x1bWUiLCBXTTg5MDNfRFJDXzAsIDYsIDE4LCAwLCBkcmNfdGx2X3N0YXJ0dXApLAogCiBTT0NfRE9VQkxFX1JfVExWKCJEaWdpdGFsIENhcHR1cmUgVm9sdW1lIiwgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9MRUZULAotCQkgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKwkJIFdNODkwM19BRENfRElHSVRBTF9WT0xVTUVfUklHSFQsIDEsIDEyMCwgMCwgZGlnaXRhbF90bHYpLAogU09DX0VOVU0oIkFEQyBDb21wYW5kaW5nIE1vZGUiLCBhZGNfY29tcGFuZGluZyksCiBTT0NfU0lOR0xFKCJBREMgQ29tcGFuZGluZyBTd2l0Y2giLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzAsIDMsIDEsIDApLAogCkBAIC04NzUsMzQgKzg3Myw0MCBAQAogU05EX1NPQ19EQVBNX01JWEVSKCJSaWdodCBTcGVha2VyIE1peGVyIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfNCwgMCwgMCwKIAkJICAgcmlnaHRfc3BlYWtlcl9taXhlciwgQVJSQVlfU0laRShyaWdodF9zcGVha2VyX21peGVyKSksCiAKLVNORF9TT0NfREFQTV9QR0FfUygiTGVmdCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19BTkFMT0dVRV9IUF8wLAotCQkgICA0LCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiUmlnaHQgSGVhZHBob25lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwKK1NORF9TT0NfREFQTV9QR0FfUygiTGVmdCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzIsCiAJCSAgIDAsIDAsIE5VTEwsIDApLAogCi1TTkRfU09DX0RBUE1fUEdBX1MoIkxlZnQgTGluZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNCwgMCwKK1NORF9TT0NfREFQTV9QR0FfUygiTGVmdCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwLAogCQkgICBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMCwgMCwKK1NORF9TT0NfREFQTV9QR0FfUygiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMywgMCwgMCwKIAkJICAgTlVMTCwgMCksCiAKIFNORF9TT0NfREFQTV9QR0FfUygiSFBMX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA3LCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiSFBMX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0hQXzAsIDYsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfRU5BX0RMWSIsIDEsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBMX0VOQV9ETFkiLCAyLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgNSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQTF9FTkEiLCAxLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgNCwgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9STVZfU0hPUlQiLCA0LCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMywgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9FTkFfT1VUUCIsIDMsIFdNODkwM19BTkFMT0dVRV9IUF8wLCAyLCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiSFBSX0VOQV9ETFkiLCAxLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9FTkFfRExZIiwgMiwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUFJfRU5BIiwgMSwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDAsIDAsIE5VTEwsIDApLAogCiBTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDcsIDAsCiAJCSAgIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfT1VUUCIsIDMsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDYsIDAsCiAJCSAgIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNSwgMCwKK1NORF9TT0NfREFQTV9QR0FfUygiTElORU9VVExfRU5BX0RMWSIsIDIsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDUsIDAsCisJCSAgIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkEiLCAxLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCA0LCAwLAogCQkgICBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMywgMCwKIAkJICAgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMiwgMCwKIAkJICAgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQV9ETFkiLCAxLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAxLCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUUl9FTkFfRExZIiwgMiwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMSwgMCwKKwkJICAgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQSIsIDEsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDAsIDAsCiAJCSAgIE5VTEwsIDApLAogCiBTTkRfU09DX0RBUE1fU1VQUExZKCJEQ1MgTWFzdGVyIiwgV004OTAzX0RDX1NFUlZPXzAsIDQsIDAsIE5VTEwsIDApLApAQCAtMTAzNywxMCArMTA0MSwxNCBAQAogCXsgIkxlZnQgU3BlYWtlciBQR0EiLCBOVUxMLCAiTGVmdCBTcGVha2VyIE1peGVyIiB9LAogCXsgIlJpZ2h0IFNwZWFrZXIgUEdBIiwgTlVMTCwgIlJpZ2h0IFNwZWFrZXIgTWl4ZXIiIH0sCiAKLQl7ICJIUExfRU5BX0RMWSIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiB9LAotCXsgIkhQUl9FTkFfRExZIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiB9LAotCXsgIkxJTkVPVVRMX0VOQV9ETFkiLCBOVUxMLCAiTGVmdCBMaW5lIE91dHB1dCBQR0EiIH0sCi0JeyAiTElORU9VVFJfRU5BX0RMWSIsIE5VTEwsICJSaWdodCBMaW5lIE91dHB1dCBQR0EiIH0sCisJeyAiSFBMX0VOQSIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiB9LAorCXsgIkhQUl9FTkEiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCisJeyAiSFBMX0VOQV9ETFkiLCBOVUxMLCAiSFBMX0VOQSIgfSwKKwl7ICJIUFJfRU5BX0RMWSIsIE5VTEwsICJIUFJfRU5BIiB9LAorCXsgIkxJTkVPVVRMX0VOQSIsIE5VTEwsICJMZWZ0IExpbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJMSU5FT1VUUl9FTkEiLCBOVUxMLCAiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiB9LAorCXsgIkxJTkVPVVRMX0VOQV9ETFkiLCBOVUxMLCAiTElORU9VVExfRU5BIiB9LAorCXsgIkxJTkVPVVRSX0VOQV9ETFkiLCBOVUxMLCAiTElORU9VVFJfRU5BIiB9LAogCiAJeyAiSFBMX0RDUyIsIE5VTEwsICJEQ1MgTWFzdGVyIiB9LAogCXsgIkhQUl9EQ1MiLCBOVUxMLCAiRENTIE1hc3RlciIgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCmluZGV4IDQ0M2FlNTguLjliM2JiYTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYwpAQCAtMTg5NSw3ICsxODk1LDcgQEAKIAogCXByX2RlYnVnKCJGdmNvPSVkSHpcbiIsIHRhcmdldCk7CiAKLQkvKiBGaW5kIGFuIGFwcHJvcHJhaXRlIEZMTF9GUkFUSU8gYW5kIGZhY3RvciBpdCBvdXQgb2YgdGhlIHRhcmdldCAqLworCS8qIEZpbmQgYW4gYXBwcm9wcmlhdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpOyBpKyspIHsKIAkJaWYgKGZsbF9mcmF0aW9zW2ldLm1pbiA8PSBGcmVmICYmIEZyZWYgPD0gZmxsX2ZyYXRpb3NbaV0ubWF4KSB7CiAJCQlmbGxfZGl2LT5mbGxfZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0uZmxsX2ZyYXRpbzsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCmluZGV4IDVlMDIxNGQuLjNjNzE5ODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIExvb2t1cCB0YWJsZSBzcGVjaWZpeWluZyBTUkFURSAodGFibGUgMjUgaW4gZGF0YXNoZWV0KTsgc29tZSBvZiB0aGUKKy8qIExvb2t1cCB0YWJsZSBzcGVjaWZ5aW5nIFNSQVRFICh0YWJsZSAyNSBpbiBkYXRhc2hlZXQpOyBzb21lIG9mIHRoZQogICogb3V0cHV0IGZyZXF1ZW5jaWVzIGhhdmUgYmVlbiByb3VuZGVkIHRvIHRoZSBzdGFuZGFyZCBmcmVxdWVuY2llcwogICogdGhleSBhcmUgaW50ZW5kZWQgdG8gbWF0Y2ggd2hlcmUgdGhlIGVycm9yIGlzIHNsaWdodC4gKi8KIHN0YXRpYyBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKaW5kZXggM2I3MWRkNi4uNTAwMDExZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCkBAIC0zMTM3LDcgKzMxMzcsNyBAQAogCiAJcHJfZGVidWcoIkZMTCBGdmNvPSVkSHpcbiIsIHRhcmdldCk7CiAKLQkvKiBGaW5kIGFuIGFwcHJvcHJhaXRlIEZMTF9GUkFUSU8gYW5kIGZhY3RvciBpdCBvdXQgb2YgdGhlIHRhcmdldCAqLworCS8qIEZpbmQgYW4gYXBwcm9wcmlhdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpOyBpKyspIHsKIAkJaWYgKGZsbF9mcmF0aW9zW2ldLm1pbiA8PSBGcmVmICYmIEZyZWYgPD0gZmxsX2ZyYXRpb3NbaV0ubWF4KSB7CiAJCQlmbGxfZGl2LT5mbGxfZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0uZmxsX2ZyYXRpbzsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MS5jCmluZGV4IDI4ZmRmZDYuLjNjMmVlMWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTEuYwpAQCAtOTgxLDcgKzk4MSw3IEBACiAJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX0NMT0NLSU5HXzIpOwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQ0xPQ0tJTkdfMiwgcmVnIHwgV004OTkxX1NZU0NMS19TUkMpOwogCi0JCS8qIHNldCB1cCBOICwgZnJhY3Rpb25hbCBtb2RlIGFuZCBwcmUtZGl2aXNvciBpZiBuZWNjZXNzYXJ5ICovCisJCS8qIHNldCB1cCBOICwgZnJhY3Rpb25hbCBtb2RlIGFuZCBwcmUtZGl2aXNvciBpZiBuZWNlc3NhcnkgKi8KIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX1BMTDEsIHBsbF9kaXYubiB8IFdNODk5MV9TRE0gfAogCQkJICAgICAgKHBsbF9kaXYuZGl2MiA/IFdNODk5MV9QUkVTQ0FMRSA6IDApKTsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX1BMTDIsICh1OCkocGxsX2Rpdi5rPj44KSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwppbmRleCAzNzlmYTIyLi4wNTZhZWY5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAJcHJfZGVidWcoIkZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKIAotCS8qIEZpbmQgYW4gYXBwcm9wcmFpdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCisJLyogRmluZCBhbiBhcHByb3ByaWF0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGxfZnJhdGlvcyk7IGkrKykgewogCQlpZiAoZmxsX2ZyYXRpb3NbaV0ubWluIDw9IEZyZWYgJiYgRnJlZiA8PSBmbGxfZnJhdGlvc1tpXS5tYXgpIHsKIAkJCWZsbF9kaXYtPmZsbF9mcmF0aW8gPSBmbGxfZnJhdGlvc1tpXS5mbGxfZnJhdGlvOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKaW5kZXggM2RjNjRjOC4uODRlMWJkMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCkBAIC04MiwxOCArODIsMTggQEAKIAogCWludCBtYmNfZW5hWzNdOwogCi0JLyogUGxhdGZvcm0gZGVwZW5kYW50IERSQyBjb25maWd1cmF0aW9uICovCisJLyogUGxhdGZvcm0gZGVwZW5kZW50IERSQyBjb25maWd1cmF0aW9uICovCiAJY29uc3QgY2hhciAqKmRyY190ZXh0czsKIAlpbnQgZHJjX2NmZ1tXTTg5OTRfTlVNX0RSQ107CiAJc3RydWN0IHNvY19lbnVtIGRyY19lbnVtOwogCi0JLyogUGxhdGZvcm0gZGVwZW5kYW50IFJlVHVuZSBtb2JpbGUgY29uZmlndXJhdGlvbiAqLworCS8qIFBsYXRmb3JtIGRlcGVuZGVudCBSZVR1bmUgbW9iaWxlIGNvbmZpZ3VyYXRpb24gKi8KIAlpbnQgbnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CiAJY29uc3QgY2hhciAqKnJldHVuZV9tb2JpbGVfdGV4dHM7CiAJaW50IHJldHVuZV9tb2JpbGVfY2ZnW1dNODk5NF9OVU1fRVFdOwogCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07CiAKLQkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgTUJDIGNvbmZpZ3VyYXRpb24gKi8KKwkvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgTUJDIGNvbmZpZ3VyYXRpb24gKi8KIAlpbnQgbWJjX2NmZzsKIAljb25zdCBjaGFyICoqbWJjX3RleHRzOwogCXN0cnVjdCBzb2NfZW51bSBtYmNfZW51bTsKQEAgLTMyNjEsMjAgKzMyNjEsMzYgQEAKIAl3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogCS8qIExhdGNoIHZvbHVtZSB1cGRhdGVzIChyaWdodCBvbmx5OyB3ZSBhbHdheXMgZG8gbGVmdCB0aGVuIHJpZ2h0KS4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMxX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxREFDMV9WVSwgV004OTk0X0FJRjFEQUMxX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMxX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMURBQzFfVlUsIFdNODk5NF9BSUYxREFDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMl9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMURBQzJfVlUsIFdNODk5NF9BSUYxREFDMl9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMl9SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0FJRjFEQUMyX1ZVLCBXTTg5OTRfQUlGMURBQzJfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0RBQ19MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMkRBQ19WVSwgV004OTk0X0FJRjJEQUNfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0RBQ19SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0FJRjJEQUNfVlUsIFdNODk5NF9BSUYyREFDX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMxX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxQURDMV9WVSwgV004OTk0X0FJRjFBREMxX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMxX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMUFEQzFfVlUsIFdNODk5NF9BSUYxQURDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQURDMl9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMUFEQzJfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQURDMl9SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0FJRjFBREMyX1ZVLCBXTTg5OTRfQUlGMUFEQzJfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0FEQ19MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMkFEQ19WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9BRENfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYyQURDX1ZVLCBXTTg5OTRfQUlGMUFEQzJfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9EQUMxX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9EQUMxX1ZVLCBXTTg5OTRfREFDMV9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0RBQzFfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9EQUMxX1ZVLCBXTTg5OTRfREFDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0RBQzJfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0RBQzJfVlUsIFdNODk5NF9EQUMyX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMl9SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0RBQzJfVlUsIFdNODk5NF9EQUMyX1ZVKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKaW5kZXggNTVjZGYyOS4uOTFjNmIzOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIC8qCiAgKiBTdG9wIGFueSBhdHRlbXB0cyB0byBjaGFuZ2Ugc3BlYWtlciBtb2RlIHdoaWxlIHRoZSBzcGVha2VyIGlzIGVuYWJsZWQuCiAgKgotICogV2UgYWxzbyBoYXZlIHNvbWUgc3BlY2lhbCBhbnRpLXBvcCBjb250cm9scyBkZXBlbmRhbnQgb24gc3BlYWtlcgorICogV2UgYWxzbyBoYXZlIHNvbWUgc3BlY2lhbCBhbnRpLXBvcCBjb250cm9scyBkZXBlbmRlbnQgb24gc3BlYWtlcgogICogbW9kZSB3aGljaCBtdXN0IGJlIGNoYW5nZWQgYWxvbmcgd2l0aCB0aGUgbW9kZS4KICAqLwogc3RhdGljIGludCBzcGVha2VyX21vZGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtNDU2LDcgKzQ1Niw3IEBACiAKIAlwcl9kZWJ1ZygiRnZjbz0lZEh6XG4iLCB0YXJnZXQpOwogCi0JLyogRmluZCBhbiBhcHByb3ByYWl0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KKwkvKiBGaW5kIGFuIGFwcHJvcHJpYXRlIEZMTF9GUkFUSU8gYW5kIGZhY3RvciBpdCBvdXQgb2YgdGhlIHRhcmdldCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZsbF9mcmF0aW9zKTsgaSsrKSB7CiAJCWlmIChmbGxfZnJhdGlvc1tpXS5taW4gPD0gRnJlZiAmJiBGcmVmIDw9IGZsbF9mcmF0aW9zW2ldLm1heCkgewogCQkJZmxsX2Rpdi0+ZmxsX2ZyYXRpbyA9IGZsbF9mcmF0aW9zW2ldLmZsbF9mcmF0aW87CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCmluZGV4IDdiNmIzYzEuLjQwMDVlOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCkBAIC03NDAsMTIgKzc0MCwxMiBAQAogCiAJeyAiU1BLTCIsICJJbnB1dCBTd2l0Y2giLCAiTUlYSU5MIiB9LAogCXsgIlNQS0wiLCAiSU4xTFAgU3dpdGNoIiwgIklOMUxQIiB9LAotCXsgIlNQS0wiLCAiT3V0cHV0IFN3aXRjaCIsICJMZWZ0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJTUEtMIiwgIk91dHB1dCBTd2l0Y2giLCAiTGVmdCBPdXRwdXQgUEdBIiB9LAogCXsgIlNQS0wiLCBOVUxMLCAiVE9DTEsiIH0sCiAKIAl7ICJTUEtSIiwgIklucHV0IFN3aXRjaCIsICJNSVhJTlIiIH0sCiAJeyAiU1BLUiIsICJJTjFSUCBTd2l0Y2giLCAiSU4xUlAiIH0sCi0JeyAiU1BLUiIsICJPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJTUEtSIiwgIk91dHB1dCBTd2l0Y2giLCAiUmlnaHQgT3V0cHV0IFBHQSIgfSwKIAl7ICJTUEtSIiwgTlVMTCwgIlRPQ0xLIiB9LAogCiAJeyAiU1BLTCBCb29zdCIsICJEaXJlY3QgVm9pY2UgU3dpdGNoIiwgIkRpcmVjdCBWb2ljZSIgfSwKQEAgLTc2Nyw4ICs3NjcsOCBAQAogCXsgIlNQS09VVFJQIiwgTlVMTCwgIlNQS1IgRHJpdmVyIiB9LAogCXsgIlNQS09VVFJOIiwgTlVMTCwgIlNQS1IgRHJpdmVyIiB9LAogCi0JeyAiTGVmdCBIZWFkcGhvbmUgTXV4IiwgIk1peGVyIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAotCXsgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCAiTWl4ZXIiLCAiUmlnaHQgT3V0cHV0IE1peGVyIiB9LAorCXsgIkxlZnQgSGVhZHBob25lIE11eCIsICJNaXhlciIsICJMZWZ0IE91dHB1dCBQR0EiIH0sCisJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJNaXhlciIsICJSaWdodCBPdXRwdXQgUEdBIiB9LAogCiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBNdXgiIH0sCiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJSaWdodCBIZWFkcGhvbmUgTXV4IiB9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCmluZGV4IGE1YWY4MzQuLjRkZGM2ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKQEAgLTQzNCwxNyArNDM0LDIxIEBACiAJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JFKTsKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEFGU1JFKTsKIAotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywgKDB4NyA8PCAyNikpOworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywKKwkJCQlBQ0xLWCB8IEFIQ0xLWCB8IEFGU1gpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CiAJCS8qIGNvZGVjIGlzIGNsb2NrIG1hc3RlciBhbmQgZnJhbWUgc2xhdmUgKi8KLQkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1hDVExfUkVHLCBBQ0xLWEUpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcsIEFDTEtYRSk7CiAJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLCBBRlNYRSk7CiAKLQkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLUkNUTF9SRUcsIEFDTEtSRSk7CiAJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1JYRk1DVExfUkVHLCBBRlNSRSk7CiAKLQkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUERJUl9SRUcsICgweDJkIDw8IDI2KSk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLAorCQkJCUFDTEtYIHwgQUNMS1IpOworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywKKwkJCQlBRlNYIHwgQUZTUik7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKIAkJLyogY29kZWMgaXMgY2xvY2sgYW5kIGZyYW1lIG1hc3RlciAqLwpAQCAtNDU0LDcgKzQ1OCw4IEBACiAJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JFKTsKIAkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEFGU1JFKTsKIAotCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywgKDB4M2YgPDwgMjYpKTsKKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUERJUl9SRUcsCisJCQkJQUNMS1ggfCBBSENMS1ggfCBBRlNYIHwgQUNMS1IgfCBBSENMS1IgfCBBRlNSKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNjQ0LDcgKzY0OSw3IEBACiAJCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWFRETV9SRUcsIG1hc2spOwogCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1UX1JFRywgVFhPUkQpOwogCi0JCWlmICgoZGV2LT50ZG1fc2xvdHMgPj0gMikgfHwgKGRldi0+dGRtX3Nsb3RzIDw9IDMyKSkKKwkJaWYgKChkZXYtPnRkbV9zbG90cyA+PSAyKSAmJiAoZGV2LT50ZG1fc2xvdHMgPD0gMzIpKQogCQkJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRywKIAkJCQkJRlNYTU9EKGRldi0+dGRtX3Nsb3RzKSwgRlNYTU9EKDB4MUZGKSk7CiAJCWVsc2UKQEAgLTY2MCw3ICs2NjUsNyBAQAogCQkJCUFIQ0xLUkUpOwogCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhURE1fUkVHLCBtYXNrKTsKIAotCQlpZiAoKGRldi0+dGRtX3Nsb3RzID49IDIpIHx8IChkZXYtPnRkbV9zbG90cyA8PSAzMikpCisJCWlmICgoZGV2LT50ZG1fc2xvdHMgPj0gMikgJiYgKGRldi0+dGRtX3Nsb3RzIDw9IDMyKSkKIAkJCW1jYXNwX21vZF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsCiAJCQkJCUZTUk1PRChkZXYtPnRkbV9zbG90cyksIEZTUk1PRCgweDFGRikpOwogCQllbHNlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1zc2kuYyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCmluZGV4IGJjOTJlYzYuLmFjMmRlZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiBzYW5lIHByb2Nlc3NvciB2ZW5kb3JzIGhhdmUgYSBGSUZPIHBlciBBQzk3IHNsb3QsIHRoZSBpLk1YIGhhcyBvbmx5CiAgKiBvbmUgRklGTyB3aGljaCBjb21iaW5lcyBhbGwgdmFsaWQgcmVjZWl2ZSBzbG90cy4gV2UgY2Fubm90IGV2ZW4gc2VsZWN0CiAgKiB3aGljaCBzbG90cyB3ZSB3YW50IHRvIHJlY2VpdmUuIFRoZSBXTTk3MTIgd2l0aCB3aGljaCB0aGlzIGRyaXZlcgotICogd2FzIGRldmVsb3BwZWQgd2l0aCBhbHdheXMgc2VuZHMgR1BJTyBzdGF0dXMgZGF0YSBpbiBzbG90IDEyIHdoaWNoCisgKiB3YXMgZGV2ZWxvcGVkIHdpdGggYWx3YXlzIHNlbmRzIEdQSU8gc3RhdHVzIGRhdGEgaW4gc2xvdCAxMiB3aGljaAogICogd2UgcmVjZWl2ZSBpbiBvdXIgKFBDTS0pIGRhdGEgc3RyZWFtLiBUaGUgb25seSBjaGFuY2Ugd2UgaGF2ZSBpcyB0bwogICogbWFudWFsbHkgc2tpcCB0aGlzIGRhdGEgaW4gdGhlIEZJUSBoYW5kbGVyLiBXaXRoIHNhbXBsaW5nIHJhdGVzIGRpZmZlcmVudAogICogZnJvbSA0ODAwMEh6IG5vdCBldmVyeSBmcmFtZSBoYXMgdmFsaWQgcmVjZWl2ZSBkYXRhLCBzbyB0aGUgcmF0aW8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jIGIvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMKaW5kZXggNDE5YmY0Zi4uY2QyMmE1NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMKKysrIGIvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXN0cnVjdCBqejQ3NDBfaTJzICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwogCXVpbnQzMl90IGNvbmY7CiAKLQlpZiAoIWRhaS0+YWN0aXZlKQorCWlmIChkYWktPmFjdGl2ZSkKIAkJcmV0dXJuOwogCiAJY29uZiA9IGp6NDc0MF9pMnNfcmVhZChpMnMsIEpaX1JFR19BSUNfQ09ORik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtZG1hLmMgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtZG1hLmMKaW5kZXggMGZkNmE2My4uZTEzYzZjZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWRtYS5jCisrKyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1kbWEuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJcHJpdiA9IHNuZF9zb2NfZGFpX2dldF9kbWFfZGF0YShjcHVfZGFpLCBzdWJzdHJlYW0pOwogCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAma2lya3dvb2RfZG1hX3NuZF9odyk7CiAKLQkvKiBFbnN1cmUgdGhhdCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIGRtYSBidXJzdCBhcmUgZnVsbGZpbGxlZCAqLworCS8qIEVuc3VyZSB0aGF0IGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gZG1hIGJ1cnN0IGFyZSBmdWxmaWxsZWQgKi8KIAllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsCiAJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLAogCQkJcHJpdi0+YnVyc3QgKiAyLApAQCAtMTcwLDcgKzE3MCw3IEBACiAKIAkJLyoKIAkJICogRW5hYmxlIEVycm9yIGludGVycnVwdHMuIFdlJ3JlIG9ubHkgYWNrJ2luZyB0aGVtIGJ1dAotCQkgKiBpdCdzIHVzZWZ1bGwgZm9yIGRpYWdub3N0aWNzCisJCSAqIGl0J3MgdXNlZnVsIGZvciBkaWFnbm9zdGljcwogCQkgKi8KIAkJd3JpdGVsKCh1bnNpZ25lZCBsb25nKS0xLCBwcml2LT5pbyArIEtJUktXT09EX0VSUl9NQVNLKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYyBiL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jCmluZGV4IGVlMmMyMjQuLjZiMWY5ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jCisrKyBiL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jCkBAIC0xMTYsMTggKzExNiwyMCBAQAogc3RhdGljIGlubGluZSB2b2lkIHNzdF9zZXRfc3RyZWFtX3N0YXR1cyhzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW0sCiAJCQkJCWludCBzdGF0ZSkKIHsKLQlzcGluX2xvY2soJnN0cmVhbS0+c3RhdHVzX2xvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0cmVhbS0+c3RhdHVzX2xvY2ssIGZsYWdzKTsKIAlzdHJlYW0tPnN0cmVhbV9zdGF0dXMgPSBzdGF0ZTsKLQlzcGluX3VubG9jaygmc3RyZWFtLT5zdGF0dXNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RyZWFtLT5zdGF0dXNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzc3RfZ2V0X3N0cmVhbV9zdGF0dXMoc3RydWN0IHNzdF9ydW50aW1lX3N0cmVhbSAqc3RyZWFtKQogewogCWludCBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RyZWFtLT5zdGF0dXNfbG9jaywgZmxhZ3MpOwogCXN0YXRlID0gc3RyZWFtLT5zdHJlYW1fc3RhdHVzOwotCXNwaW5fdW5sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHJlYW0tPnN0YXR1c19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHN0YXRlOwogfQogCkBAIC0zNzQsNiArMzc2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3N0X3BsYXRmb3JtX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc3N0X3BsYXRmb3JtX29wcyA9IHsKIAkub3BlbiA9IHNzdF9wbGF0Zm9ybV9vcGVuLAogCS5jbG9zZSA9IHNzdF9wbGF0Zm9ybV9jbG9zZSwKQEAgLTM4Miw2ICszODksNyBAQAogCS50cmlnZ2VyID0gc3N0X3BsYXRmb3JtX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gc3N0X3BsYXRmb3JtX3BjbV9wb2ludGVyLAogCS5od19wYXJhbXMgPSBzc3RfcGxhdGZvcm1fcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNzdF9wbGF0Zm9ybV9wY21faHdfZnJlZSwKIH07CiAKIHN0YXRpYyB2b2lkIHNzdF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQpAQCAtNDQwLDcgKzQ0OCw3IEBACiAKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBBUlJBWV9TSVpFKHNzdF9wbGF0Zm9ybV9kYWkpKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7Ci0JcHJfZGVidWcoInNzdF9wbGF0Zm9ybV9yZW1vdmUgc3VjZXNzXG4iKTsKKwlwcl9kZWJ1Zygic3N0X3BsYXRmb3JtX3JlbW92ZSBzdWNjZXNzXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYzLDcgKzQ3MSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc3N0X3NvY19wbGF0Zm9ybV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNzdF9wbGF0Zm9ybV9kcml2ZXIpOwotCXByX2RlYnVnKCJzc3Rfc29jX3BsYXRmb3JtX2V4aXQgc3VjZXNzXG4iKTsKKwlwcl9kZWJ1Zygic3N0X3NvY19wbGF0Zm9ybV9leGl0IHN1Y2Nlc3NcbiIpOwogfQogbW9kdWxlX2V4aXQoc3N0X3NvY19wbGF0Zm9ybV9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwppbmRleCAzMTY3YmU2Li40NjJjYmNiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgKi8KIAogLyogVG8gYWN0dWFsbHkgYXBwbHkgYW55IG1vZGVtIGNvbnRyb2xsZWQgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHRvIHRoZSBjb2RlYywKLSAqIHdlIG11c3QgY29ubmVjdCBjb2RlYyBEQUkgcGlucyB0byB0aGUgbW9kZW0gZm9yIGEgbW9tZW50LiAgQmUgY2FyZWZ1bGwgbm90CisgKiB3ZSBtdXN0IGNvbm5lY3QgY29kZWMgREFJIHBpbnMgdG8gdGhlIG1vZGVtIGZvciBhIG1vbWVudC4gIEJlIGNhcmVmdWwgbm90CiAgKiB0byBpbnRlcmZlcmUgd2l0aCBvdXIgZGlnaXRhbCBtdXRlIGZ1bmN0aW9uIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGhhcmR3YXJlLiAqLwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGN4ODE4MDFfdGltZXI7CiBzdGF0aWMgYm9vbCBjeDgxODAxX2NtZF9wZW5kaW5nOwpAQCAtNDAyLDkgKzQwMiw5IEBACiAKIAogLyoKLSAqIEV2ZW4gaWYgbm90IHZlcnkgdXNlZnVsbCwgdGhlIHNvdW5kIGNhcmQgY2FuIHN0aWxsIHdvcmsgd2l0aG91dCBhbnkgb2YgdGhlCisgKiBFdmVuIGlmIG5vdCB2ZXJ5IHVzZWZ1bCwgdGhlIHNvdW5kIGNhcmQgY2FuIHN0aWxsIHdvcmsgd2l0aG91dCBhbnkgb2YgdGhlCiAgKiBhYm92ZSBmdW5jdG9uYWxpdHkgYWN0aXZhdGVkLiAgWW91IGNhbiBzdGlsbCBjb250cm9sIGl0cyBhdWRpbyBpbnB1dC9vdXRwdXQKLSAqIGNvbnN0ZWxsYXRpb24gYW5kIHNwZWFrZXJwaG9uZSBnYWluIGZyb20gdXNlcnNwYWNlIGJ5IGlzc3VlaW5nIEFUIGNvbW1hbmRzCisgKiBjb25zdGVsbGF0aW9uIGFuZCBzcGVha2VycGhvbmUgZ2FpbiBmcm9tIHVzZXJzcGFjZSBieSBpc3N1aW5nIEFUIGNvbW1hbmRzCiAgKiBvdmVyIHRoZSBtb2RlbSBwb3J0LgogICovCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LXBjbS5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtcGNtLmMKaW5kZXggMDJmYjY2NC4uMmNlMGIyZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtcGNtLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEyeHgtcGNtLmMKQEAgLTY1LDYgKzY1LDcgQEAKIAlpZiAocHJ0ZC0+ZG1hX2NoID49IDApIHsKIAkJcHhhX2ZyZWVfZG1hKHBydGQtPmRtYV9jaCk7CiAJCXBydGQtPmRtYV9jaCA9IC0xOworCQlwcnRkLT5wYXJhbXMgPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCmluZGV4IGFjNTc3MjYuLmI2NDQ1NzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCS5jb2RlY19uYW1lID0gIndtOTcxMy1jb2RlYyIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCi0JLmNvZGVjX25hbWUgPSAid205NzEzLWhpZmkiLAorCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTMtaGlmaSIsCiAJLmluaXQgPSB6eWxvbml0ZV93bTk3MTNfaW5pdCwKIH0sCiB7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTctYXV4IiwKLQkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtYXV4IiwKKwkuY29kZWNfZGFpX25hbWUgPSAid205NzEzLWF1eCIsCiB9LAogewogCS5uYW1lID0gIldNOTcxMyBWb2ljZSIsCkBAIC0xODQsNyArMTg0LDcgQEAKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCS5jcHVfZGFpX25hbWUgPSAicHhhLXNzcC1kYWkuMiIsCi0JLmNvZGVjX25hbWUgPSAid205NzEzLXZvaWNlIiwKKwkuY29kZWNfZGFpX25hbWUgPSAid205NzEzLXZvaWNlIiwKIAkub3BzID0gJnp5bG9uaXRlX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKaW5kZXggZjZiM2EzYy4uMGU4MGRhZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jCkBAIC0yMzYsMTggKzIzNiwxOCBAQAogCS5uYW1lID0gIldNODk5NCIsCiAJLnN0cmVhbV9uYW1lID0gIldNODk5NCBIaUZpIiwKIAkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctaTJzLjAiLAotCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5OTQtaGlmaSIsCisJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1haWYxIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg5OTQtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg5OTQtY29kZWMuMC0wMDFhIiwKIAkuaW5pdCA9IGdvbmlfd204OTk0X2luaXQsCiAJLm9wcyA9ICZnb25pX2hpZmlfb3BzLAogfSwgewogCS5uYW1lID0gIldNODk5NCBWb2ljZSIsCiAJLnN0cmVhbV9uYW1lID0gIlZvaWNlIiwKIAkuY3B1X2RhaV9uYW1lID0gImdvbmktdm9pY2UtZGFpIiwKLQkuY29kZWNfZGFpX25hbWUgPSAid204OTk0LXZvaWNlIiwKKwkuY29kZWNfZGFpX25hbWUgPSAid204OTk0LWFpZjIiLAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTAwMWEiLAogCS5vcHMgPSAmZ29uaV92b2ljZV9vcHMsCiB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCmluZGV4IDc4YmZkYjMuLjQ1MjIzMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJU09DX0RBUE1fUElOX1NXSVRDSCgiSGFuZHNldCBNaWMiKSwKIH07CiAKLS8qIEdUQTAyIHNwZWNpZmljIHJvdXRlcyBhbmQgY29udHJvbGxzICovCisvKiBHVEEwMiBzcGVjaWZpYyByb3V0ZXMgYW5kIGNvbnRyb2xzICovCiAKICNpZmRlZiBDT05GSUdfTUFDSF9ORU8xOTczX0dUQTAyCiAKQEAgLTM3Miw3ICszNzIsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBHVEEwMSBzcGVjaWZpYyBjb250cm9sbHMgKi8KKy8qIEdUQTAxIHNwZWNpZmljIGNvbnRyb2xzICovCiAKICNpZmRlZiBDT05GSUdfTUFDSF9ORU8xOTczX0dUQTAxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jIGIvc291bmQvc29jL3NhbXN1bmcvcGNtLmMKaW5kZXggMzhhYWM3ZC4uOWM3ZThiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvcGNtLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvcGNtLmMKQEAgLTM1MCw4ICszNTAsOCBAQAogCWN0bCA9IHJlYWRsKHJlZ3MgKyBTM0NfUENNX0NUTCk7CiAKIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKLQkJLyogTm90aGluZyB0byBkbywgTkJfTkYgYnkgZGVmYXVsdCAqLworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCS8qIE5vdGhpbmcgdG8gZG8sIElCX05GIGJ5IGRlZmF1bHQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2VycihwY20tPmRldiwgIlVuc3VwcG9ydGVkIGNsb2NrIGludmVyc2lvbiFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCmluZGV4IDBjOTk5N2UuLjIzYzBlODMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTEyMDAsMTAgKzEyMDAsMTEgQEAKIAltYXN0ZXItPmZzaWIubWFzdGVyCT0gbWFzdGVyOwogCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG1hc3Rlcik7CiAKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCWZzaV9zb2Z0X2FsbF9yZXNldChtYXN0ZXIpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsICZmc2lfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCQkJICBpZF9lbnRyeS0+bmFtZSwgbWFzdGVyKTsKQEAgLTEyMTgsOCArMTIxOSwxNyBAQAogCQlnb3RvIGV4aXRfZnJlZV9pcnE7CiAJfQogCi0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBmc2lfc29jX2RhaSwgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBmc2lfc29jX2RhaSwKKwkJCQkgICAgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBzbmQgZGFpIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBleGl0X3NuZF9zb2M7CisJfQogCisJcmV0dXJuIHJldDsKKworZXhpdF9zbmRfc29jOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKIGV4aXRfZnJlZV9pcnE6CiAJZnJlZV9pcnEoaXJxLCBtYXN0ZXIpOwogZXhpdF9pb3VubWFwOgpAQCAtMTIzOCwxMiArMTI0OCwxMSBAQAogCiAJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCi0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJnBkZXYtPmRldiwgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOwotCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKLQorCWZyZWVfaXJxKG1hc3Rlci0+aXJxLCBtYXN0ZXIpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAotCWZyZWVfaXJxKG1hc3Rlci0+aXJxLCBtYXN0ZXIpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZwZGV2LT5kZXYsIEFSUkFZX1NJWkUoZnNpX3NvY19kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CiAKIAlpb3VubWFwKG1hc3Rlci0+YmFzZSk7CiAJa2ZyZWUobWFzdGVyKTsKQEAgLTEzMjEsMyArMTMzMCw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBvbmNoaXAgRlNJIGF1ZGlvIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpmc2ktcGNtLWF1ZGlvIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IDRkZGE1ODkuLmRkNTVkMTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC05Miw4ICs5Miw4IEBACiBzdGF0aWMgaW50IGZvcm1hdF9yZWdpc3Rlcl9zdHIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJICAgICAgIHVuc2lnbmVkIGludCByZWcsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlpbnQgd29yZHNpemUgPSBjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplICogMjsKLQlpbnQgcmVnc2l6ZSA9IG1pbl9ieXRlc19uZWVkZWQoY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpICogMjsKKwlpbnQgd29yZHNpemUgPSBtaW5fYnl0ZXNfbmVlZGVkKGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKSAqIDI7CisJaW50IHJlZ3NpemUgPSBjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplICogMjsKIAlpbnQgcmV0OwogCWNoYXIgdG1wYnVmW2xlbiArIDFdOwogCWNoYXIgcmVnYnVmW3JlZ3NpemUgKyAxXTsKQEAgLTEzMiw4ICsxMzIsOCBAQAogCXNpemVfdCB0b3RhbCA9IDA7CiAJbG9mZl90IHAgPSAwOwogCi0Jd29yZHNpemUgPSBjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplICogMjsKLQlyZWdzaXplID0gbWluX2J5dGVzX25lZWRlZChjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgKiAyOworCXdvcmRzaXplID0gbWluX2J5dGVzX25lZWRlZChjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgKiAyOworCXJlZ3NpemUgPSBjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplICogMjsKIAogCWxlbiA9IHdvcmRzaXplICsgcmVnc2l6ZSArIDIgKyAxOwogCkBAIC02MjksNiArNjI5LDcgQEAKIAkJCXJ1bnRpbWUtPmh3LnJhdGVzIHw9IGNvZGVjX2RhaV9kcnYtPmNhcHR1cmUucmF0ZXM7CiAJfQogCisJcmV0ID0gLUVJTlZBTDsKIAlzbmRfcGNtX2xpbWl0X2h3X3JhdGVzKHJ1bnRpbWUpOwogCWlmICghcnVudGltZS0+aHcucmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiAlcyA8LT4gJXMgTm8gbWF0Y2hpbmcgcmF0ZXNcbiIsCkBAIC02NDAsNyArNjQxLDggQEAKIAkJCWNvZGVjX2RhaS0+bmFtZSwgY3B1X2RhaS0+bmFtZSk7CiAJCWdvdG8gY29uZmlnX2VycjsKIAl9Ci0JaWYgKCFydW50aW1lLT5ody5jaGFubmVsc19taW4gfHwgIXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCkgeworCWlmICghcnVudGltZS0+aHcuY2hhbm5lbHNfbWluIHx8ICFydW50aW1lLT5ody5jaGFubmVsc19tYXggfHwKKwkgICAgcnVudGltZS0+aHcuY2hhbm5lbHNfbWluID4gcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogJXMgPC0+ICVzIE5vIG1hdGNoaW5nIGNoYW5uZWxzXG4iLAogCQkJCWNvZGVjX2RhaS0+bmFtZSwgY3B1X2RhaS0+bmFtZSk7CiAJCWdvdG8gY29uZmlnX2VycjsKQEAgLTIwNjAsNiArMjA2Miw3IEBACiAJLnJlc3VtZSA9IHNuZF9zb2NfcmVzdW1lLAogCS5wb3dlcm9mZiA9IHNuZF9zb2NfcG93ZXJvZmYsCiB9OworRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19wbV9vcHMpOwogCiAvKiBBU29DIHBsYXRmb3JtIGRyaXZlciAqLwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29jX2RyaXZlciA9IHsKQEAgLTMyODgsNiArMzI5MSw4IEBACiAJaWYgKCFjYXJkLT5uYW1lIHx8ICFjYXJkLT5kZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2X3NldF9kcnZkYXRhKGNhcmQtPmRldiwgY2FyZCk7CisKIAlzbmRfc29jX2luaXRpYWxpemVfY2FyZF9saXN0cyhjYXJkKTsKIAogCXNvY19pbml0X2NhcmRfZGVidWdmcyhjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMgYi9zb3VuZC9zb2MvdGVncmEvaGFybW9ueS5jCmluZGV4IDg1ODU5NTcuLjU1NmE1NzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMKKysrIGIvc291bmQvc29jL3RlZ3JhL2hhcm1vbnkuYwpAQCAtMzcwLDYgKzM3MCw3IEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBEUlZfTkFNRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZzbmRfc29jX3BtX29wcywKIAl9LAogCS5wcm9iZSA9IHRlZ3JhX3NuZF9oYXJtb255X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0ZWdyYV9zbmRfaGFybW9ueV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL2Zpcm13YXJlLmMgYi9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYwppbmRleCA5MDgxYTU0Li44NmMxYTMxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYworKysgYi9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYwpAQCAtNzYsNyArNzYsNyBAQAogCXUxNiBhZGRyZXNzOwogCXU4IGxlbjsKIAl1OCBkYXRhWzI1Nl07Ci0JY2hhciBlcnJvcjsgLyogdHJ1ZSBpZiBhbiBlcnJvciBvY2N1cmVkIHBhcnNpbmcgdGhpcyByZWNvcmQgKi8KKwljaGFyIGVycm9yOyAvKiB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkIHBhcnNpbmcgdGhpcyByZWNvcmQgKi8KIAogCXU4IG1heF9sZW47IC8qIG1heGltdW0gcmVjb3JkIGxlbmd0aCBpbiB3aG9sZSBpaGV4ICovCiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAvKgogICogcmV0dXJucyB0cnVlIGlmIHJlY29yZCBpcyBhdmFpbGFibGUsIGZhbHNlIG90aGVyd2lzZS4KLSAqIGlmZiBhbiBlcnJvciBvY2N1cmVkLCBmYWxzZSB3aWxsIGJlIHJldHVybmVkIGFuZCByZWNvcmQtPmVycm9yIHdpbGwgYmUgdHJ1ZS4KKyAqIGlmZiBhbiBlcnJvciBvY2N1cnJlZCwgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZCBhbmQgcmVjb3JkLT5lcnJvciB3aWxsIGJlIHRydWUuCiAgKi8KIHN0YXRpYyBib29sIHVzYjZmaXJlX2Z3X2loZXhfbmV4dF9yZWNvcmQoc3RydWN0IGloZXhfcmVjb3JkICpyZWNvcmQpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvZm9ybWF0LmMgYi9zb3VuZC91c2IvZm9ybWF0LmMKaW5kZXggNWI3OTJkMi4uZjA3OWI1ZSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2Zvcm1hdC5jCisrKyBiL3NvdW5kL3VzYi9mb3JtYXQuYwpAQCAtMTc2LDkgKzE3NiwxMSBAQAogCQkJaWYgKCFyYXRlKQogCQkJCWNvbnRpbnVlOwogCQkJLyogQy1NZWRpYSBDTTY1MDEgbWlzbGFiZWxzIGl0cyA5NiBrSHogYWx0c2V0dGluZyAqLworCQkJLyogVGVycmF0ZWMgQXVyZW9uIDcuMSBVU0IgQy1NZWRpYSA2MjA2LCB0b28gKi8KIAkJCWlmIChyYXRlID09IDQ4MDAwICYmIG5yX3JhdGVzID09IDEgJiYKIAkJCSAgICAoY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDBkOGMsIDB4MDIwMSkgfHwKLQkJCSAgICAgY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDBkOGMsIDB4MDEwMikpICYmCisJCQkgICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAxMDIpIHx8CisJCQkgICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwY2NkLCAweDAwYjEpKSAmJgogCQkJICAgIGZwLT5hbHRzZXR0aW5nID09IDUgJiYgZnAtPm1heHBhY2tzaXplID09IDM5MikKIAkJCQlyYXRlID0gOTYwMDA7CiAJCQkvKiBDcmVhdGl2ZSBWRjA0NzAgTGl2ZSBDYW0gcmVwb3J0cyAxNiBrSHogaW5zdGVhZCBvZiA4a0h6ICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWlkaS5jIGIvc291bmQvdXNiL21pZGkuYwppbmRleCBiNGIzOWMwLi5mOTI4OTEwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWlkaS5jCisrKyBiL3NvdW5kL3VzYi9taWRpLmMKQEAgLTEzMDEsNiArMTMwMSw3IEBACiAJY2FzZSBVU0JfSUQoMHgxNWNhLCAweDAxMDEpOiAvKiBUZXh0ZWNoIFVTQiBNaWRpIENhYmxlICovCiAJY2FzZSBVU0JfSUQoMHgxNWNhLCAweDE4MDYpOiAvKiBUZXh0ZWNoIFVTQiBNaWRpIENhYmxlICovCiAJY2FzZSBVU0JfSUQoMHgxYTg2LCAweDc1MmQpOiAvKiBRaW5IZW5nIENIMzQ1ICJVU0IyLjAtTUlESSIgKi8KKwljYXNlIFVTQl9JRCgweGZjMDgsIDB4MDEwMSk6IC8qIFVua25vd24gdmVuZG9yIENhYmxlICovCiAJCWVwLT5tYXhfdHJhbnNmZXIgPSA0OwogCQlicmVhazsKIAkJLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggNWU0Nzc1Ny4uNmVjMzNiNiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyLmMKKysrIGIvc291bmQvdXNiL21peGVyLmMKQEAgLTExODIsNyArMTE4Miw3IEBACiAvKgogICogcGFyc2UgYSBmZWF0dXJlIHVuaXQKICAqCi0gKiBtb3N0IG9mIGNvbnRyb2xscyBhcmUgZGVmaW5lZCBoZXJlLgorICogbW9zdCBvZiBjb250cm9scyBhcmUgZGVmaW5lZCBoZXJlLgogICovCiBzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2ZlYXR1cmVfdW5pdChzdHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCBpbnQgdW5pdGlkLCB2b2lkICpfZnRyKQogewpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy5jIGIvc291bmQvdXNiL3F1aXJrcy5jCmluZGV4IDM1NTc1OWIuLjFiOTRlYzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MuYworKysgYi9zb3VuZC91c2IvcXVpcmtzLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogICogYXVkaW8taW50ZXJmYWNlIHF1aXJrcwogICoKICAqIHJldHVybnMgemVybyBpZiBubyBzdGFuZGFyZCBhdWRpby9NSURJIHBhcnNpbmcgaXMgbmVlZGVkLgotICogcmV0dXJucyBhIHBvc3RpdmUgdmFsdWUgaWYgc3RhbmRhcmQgYXVkaW8vbWlkaSBpbnRlcmZhY2VzIGFyZSBwYXJzZWQKKyAqIHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZSBpZiBzdGFuZGFyZCBhdWRpby9taWRpIGludGVyZmFjZXMgYXJlIHBhcnNlZAogICogYWZ0ZXIgdGhpcy4KICAqIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBhdCBlcnJvci4KICAqLwpAQCAtNTMzLDYgKzUzMyw3IEBACiAKIAljYXNlIFVTQl9JRCgweDBkOGMsIDB4MDEwMik6CiAJCS8qIEMtTWVkaWEgQ002MjA2IC8gQ00xMDYtTGlrZSBTb3VuZCBEZXZpY2UgKi8KKwljYXNlIFVTQl9JRCgweDBjY2QsIDB4MDBiMSk6IC8qIFRlcnJhdGVjIEF1cmVvbiA3LjEgVVNCICovCiAJCXJldHVybiBzbmRfdXNiX2NtNjIwNl9ib290X3F1aXJrKGRldik7CiAKIAljYXNlIFVTQl9JRCgweDEzM2UsIDB4MDgxNSk6CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYwppbmRleCAyODdlZjczLi5hNTEzNDBmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKQEAgLTIwLDcgKzIwLDcgQEAKICBhdCBzdGFuZGFyZCBzYW1wbGVyYXRlcywKICB3aGF0IGxlZCB0byB0aGlzIHBhcnQgb2YgdGhlIHVzeDJ5IG1vZHVsZTogCiAgSXQgcHJvdmlkZXMgdGhlIGFsc2Ega2VybmVsIGhhbGYgb2YgdGhlIHVzeDJ5LWFsc2EtamFjayBkcml2ZXIgcGFpci4KLSBUaGUgcGFpciB1c2VzIGEgaGFyZHdhcmUgZGVwZW5kYW50IGFsc2EtZGV2aWNlIGZvciBtbWFwZWQgcGNtIHRyYW5zcG9ydC4KKyBUaGUgcGFpciB1c2VzIGEgaGFyZHdhcmUgZGVwZW5kZW50IGFsc2EtZGV2aWNlIGZvciBtbWFwZWQgcGNtIHRyYW5zcG9ydC4KICBBZHZhbnRhZ2UgYWNoaWV2ZWQ6CiAgICAgICAgICBUaGUgdXNiX2hjIG1vdmVzIHBjbSBkYXRhIGZyb20vaW50byBtZW1vcnkgdmlhIERNQS4KICAgICAgICAgIFRoYXQgbWVtb3J5IGlzIG1tYXBlZCBieSBqYWNrJ3MgdXN4MnkgZHJpdmVyLgpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgMnBlcmlvZHMgd29ya3MgYnV0IGlzIHVzZWxlc3MgY2F1c2Ugb2YgY3JhY2tsaW5nKS4KIAogIFRoaXMgaXMgYSBmaXJzdCAicHJvb2Ygb2YgY29uY2VwdCIgaW1wbGVtZW50YXRpb24uCi0gTGF0ZXIsIGZ1bmN0aW9uYWxpdGllcyBzaG91bGQgbWlncmF0ZSB0byBtb3JlIGFwcm9wcmlhdGUgcGxhY2VzOgorIExhdGVyLCBmdW5jdGlvbmFsaXRpZXMgc2hvdWxkIG1pZ3JhdGUgdG8gbW9yZSBhcHByb3ByaWF0ZSBwbGFjZXM6CiAgVXNlcmxhbmQ6CiAgLSBUaGUgamFja2QgY291bGQgbW1hcCBpdHMgZmxvYXQtcGNtIGJ1ZmZlcnMgZGlyZWN0bHkgZnJvbSBhbHNhLWxpYi4KICAtIGFsc2EtbGliIGNvdWxkIHByb3ZpZGUgcG93ZXIgb2YgMiBwZXJpb2Qgc2l6ZWQgc2hhcGluZyBjb21iaW5lZCB3aXRoIGludC9mbG9hdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMTU4YzMwZS4uMGM1NDI1NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0zNSwxNSArMzUsMjEgQEAKIAkJCQkgIC1lIHMvcHBjLiovcG93ZXJwYy8gLWUgcy9taXBzLiovbWlwcy8gXAogCQkJCSAgLWUgcy9zaFsyMzRdLiovc2gvICkKIAorQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjCitBUiA9ICQoQ1JPU1NfQ09NUElMRSlhcgorCiAjIEFkZGl0aW9uYWwgQVJDSCBzZXR0aW5ncyBmb3IgeDg2CiBpZmVxICgkKEFSQ0gpLGkzODYpCiAgICAgICAgIEFSQ0ggOj0geDg2CiBlbmRpZgogaWZlcSAoJChBUkNIKSx4ODZfNjQpCi0JUkFXX0FSQ0ggOj0geDg2XzY0Ci0gICAgICAgIEFSQ0ggOj0geDg2Ci0JQVJDSF9DRkxBR1MgOj0gLURBUkNIX1g4Nl82NAotCUFSQ0hfSU5DTFVERSA9IC4uLy4uL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUworCUFSQ0ggOj0geDg2CisJSVNfWDg2XzY0IDo9ICQoc2hlbGwgZWNobyBfX3g4Nl82NF9fIHwgJHtDQ30gLUUgLXhjIC0gfCB0YWlsIC1uIDEpCisJaWZlcSAoJHtJU19YODZfNjR9LCAxKQorCQlSQVdfQVJDSCA6PSB4ODZfNjQKKwkJQVJDSF9DRkxBR1MgOj0gLURBUkNIX1g4Nl82NAorCQlBUkNIX0lOQ0xVREUgPSAuLi8uLi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKKwllbmRpZgogZW5kaWYKIAogIwpAQCAtMTE5LDggKzEyNSw2IEBACiAKIGV4cG9ydCBwcmVmaXggYmluZGlyIHNoYXJlZGlyIHN5c2NvbmZkaXIKIAotQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjCi1BUiA9ICQoQ1JPU1NfQ09NUElMRSlhcgogUk0gPSBybSAtZgogTUtESVIgPSBta2RpcgogRklORCA9IGZpbmQKQEAgLTE2NSw4ICsxNjksMTIgQEAKIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpCiAKICQoT1VUUFVUKXB5dGhvbi9wZXJmLnNvOiAkKFBZUkZfT0JKUykKLQkkKFFVSUVUX0dFTilweXRob24gdXRpbC9zZXR1cC5weSAtLXF1aWV0ICBidWlsZF9leHQgLS1idWlsZC1saWI9JyQoT1VUUFVUKXB5dGhvbicgXAotCQkJCQkJLS1idWlsZC10ZW1wPSckKE9VVFBVVClweXRob24vdGVtcCcKKwkkKFFVSUVUX0dFTikoIFwKKwkJZXhwb3J0IENGTEFHUz0iJChCQVNJQ19DRkxBR1MpIjsgXAorCQlweXRob24gdXRpbC9zZXR1cC5weSAtLXF1aWV0ICBidWlsZF9leHQgLS1idWlsZC1saWI9JyQoT1VUUFVUKXB5dGhvbicgXAorCQkJLS1idWlsZC10ZW1wPSckKE9VVFBVVClweXRob24vdGVtcCcgXAorCSkKKwogIwogIyBObyBQZXJsIHNjcmlwdHMgcmlnaHQgbm93OgogIwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDZmZWJjYzEuLjA5NzRmOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTQxLDcgKzQxLDcgQEAKIHN0YXRpYyB1NjQJCQlkZWZhdWx0X2ludGVydmFsCQk9ICAgICAgMDsKIAogc3RhdGljIHVuc2lnbmVkIGludAkJcGFnZV9zaXplOwotc3RhdGljIHVuc2lnbmVkIGludAkJbW1hcF9wYWdlcwkJCT0gICAgMTI4Oworc3RhdGljIHVuc2lnbmVkIGludAkJbW1hcF9wYWdlcwkJCT0gVUlOVF9NQVg7CiBzdGF0aWMgdW5zaWduZWQgaW50CQl1c2VyX2ZyZXEgCQkJPSBVSU5UX01BWDsKIHN0YXRpYyBpbnQJCQlmcmVxCQkJCT0gICAxMDAwOwogc3RhdGljIGludAkJCW91dHB1dDsKQEAgLTE2Myw2ICsxNjMsNyBAQAogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZzZWwtPmF0dHI7CiAJaW50IHRyYWNrID0gIWV2c2VsLT5pZHg7IC8qIG9ubHkgdGhlIGZpcnN0IGNvdW50ZXIgbmVlZHMgdGhlc2UgKi8KIAorCWF0dHItPmluaGVyaXQJCT0gIW5vX2luaGVyaXQ7CiAJYXR0ci0+cmVhZF9mb3JtYXQJPSBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgfAogCQkJCSAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HIHwKIAkJCQkgIFBFUkZfRk9STUFUX0lEOwpAQCAtMjUxLDYgKzI1Miw5IEBACiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKIAorCWlmIChldmxpc3QtPmNwdXMtPm1hcFswXSA8IDApCisJCW5vX2luaGVyaXQgPSB0cnVlOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKIAkJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9ICZwb3MtPmF0dHI7CiAJCS8qCkBAIC0yNzEsMTUgKzI3NSwxMyBAQAogcmV0cnlfc2FtcGxlX2lkOgogCQlhdHRyLT5zYW1wbGVfaWRfYWxsID0gc2FtcGxlX2lkX2FsbF9hdmFpbCA/IDEgOiAwOwogdHJ5X2FnYWluOgotCQlpZiAocGVyZl9ldnNlbF9fb3Blbihwb3MsIGV2bGlzdC0+Y3B1cywgZXZsaXN0LT50aHJlYWRzLCBncm91cCwKLQkJCQkgICAgICFub19pbmhlcml0KSA8IDApIHsKKwkJaWYgKHBlcmZfZXZzZWxfX29wZW4ocG9zLCBldmxpc3QtPmNwdXMsIGV2bGlzdC0+dGhyZWFkcywgZ3JvdXApIDwgMCkgewogCQkJaW50IGVyciA9IGVycm5vOwogCi0JCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpCi0JCQkJZGllKCJQZXJtaXNzaW9uIGVycm9yIC0gYXJlIHlvdSByb290P1xuIgotCQkJCQkiXHQgQ29uc2lkZXIgdHdlYWtpbmciCi0JCQkJCSIgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkLlxuIik7Ci0JCQllbHNlIGlmIChlcnIgPT0gIEVOT0RFViAmJiBjcHVfbGlzdCkgeworCQkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKSB7CisJCQkJdWlfX3dhcm5pbmdfcGFyYW5vaWQoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9IGVsc2UgaWYgKGVyciA9PSAgRU5PREVWICYmIGNwdV9saXN0KSB7CiAJCQkJZGllKCJObyBzdWNoIGRldmljZSAtIGRpZCB5b3Ugc3BlY2lmeSIKIAkJCQkJIiBhbiBvdXQtb2YtcmFuZ2UgcHJvZmlsZSBDUFU/XG4iKTsKIAkJCX0gZWxzZSBpZiAoZXJyID09IEVJTlZBTCAmJiBzYW1wbGVfaWRfYWxsX2F2YWlsKSB7CkBAIC0zMDIsMTEgKzMwNCwxOSBAQAogCQkJCQkmJiBhdHRyLT5jb25maWcgPT0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTKSB7CiAKIAkJCQlpZiAodmVyYm9zZSkKLQkJCQkJd2FybmluZygiIC4uLiB0cnlpbmcgdG8gZmFsbCBiYWNrIHRvIGNwdS1jbG9jay10aWNrc1xuIik7CisJCQkJCXVpX193YXJuaW5nKCJUaGUgY3ljbGVzIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQsICIKKwkJCQkJCSAgICAidHJ5aW5nIHRvIGZhbGwgYmFjayB0byBjcHUtY2xvY2stdGlja3NcbiIpOwogCQkJCWF0dHItPnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkU7CiAJCQkJYXR0ci0+Y29uZmlnID0gUEVSRl9DT1VOVF9TV19DUFVfQ0xPQ0s7CiAJCQkJZ290byB0cnlfYWdhaW47CiAJCQl9CisKKwkJCWlmIChlcnIgPT0gRU5PRU5UKSB7CisJCQkJdWlfX3dhcm5pbmcoIlRoZSAlcyBldmVudCBpcyBub3Qgc3VwcG9ydGVkLlxuIiwKKwkJCQkJICAgIGV2ZW50X25hbWUocG9zKSk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCiAJCQlwcmludGYoIlxuIik7CiAJCQllcnJvcigic3lzX3BlcmZfZXZlbnRfb3BlbigpIHN5c2NhbGwgcmV0dXJuZWQgd2l0aCAlZCAoJXMpLiAgL2Jpbi9kbWVzZyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuIiwKIAkJCSAgICAgIGVyciwgc3RyZXJyb3IoZXJyKSk7CkBAIC00MTcsNyArNDI3LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBldnNlbF9saXN0LT5jcHVzLT5ucjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGV2c2VsX2xpc3QtPm5yX21tYXBzOyBpKyspIHsKIAkJaWYgKGV2c2VsX2xpc3QtPm1tYXBbaV0uYmFzZSkKIAkJCW1tYXBfcmVhZCgmZXZzZWxfbGlzdC0+bW1hcFtpXSk7CiAJfQpAQCAtNTA2LDYgKzUxNiwxMCBAQAogCWlmIChoYXZlX3RyYWNlcG9pbnRzKCZldnNlbF9saXN0LT5lbnRyaWVzKSkKIAkJcGVyZl9oZWFkZXJfX3NldF9mZWF0KCZzZXNzaW9uLT5oZWFkZXIsIEhFQURFUl9UUkFDRV9JTkZPKTsKIAorCS8qIDUxMiBraUI6IGRlZmF1bHQgYW1vdW50IG9mIHVucHJpdmlsZWdlZCBtbG9ja2VkIG1lbW9yeSAqLworCWlmIChtbWFwX3BhZ2VzID09IFVJTlRfTUFYKQorCQltbWFwX3BhZ2VzID0gKDUxMiAqIDEwMjQpIC8gcGFnZV9zaXplOworCiAJaWYgKGZvcmtzKSB7CiAJCWNoaWxkX3BpZCA9IGZvcmsoKTsKIAkJaWYgKGNoaWxkX3BpZCA8IDApIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IGUyMTA5ZjkuLjAzZjBlNDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtMTY3LDE2ICsxNjcsMTcgQEAKIAkJYXR0ci0+cmVhZF9mb3JtYXQgPSBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgfAogCQkJCSAgICBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkc7CiAKLQlpZiAoc3lzdGVtX3dpZGUpCi0JCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoZXZzZWwsIGV2c2VsX2xpc3QtPmNwdXMsIGZhbHNlLCBmYWxzZSk7Ci0KIAlhdHRyLT5pbmhlcml0ID0gIW5vX2luaGVyaXQ7CisKKwlpZiAoc3lzdGVtX3dpZGUpCisJCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoZXZzZWwsIGV2c2VsX2xpc3QtPmNwdXMsIGZhbHNlKTsKKwogCWlmICh0YXJnZXRfcGlkID09IC0xICYmIHRhcmdldF90aWQgPT0gLTEpIHsKIAkJYXR0ci0+ZGlzYWJsZWQgPSAxOwogCQlhdHRyLT5lbmFibGVfb25fZXhlYyA9IDE7CiAJfQogCi0JcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChldnNlbCwgZXZzZWxfbGlzdC0+dGhyZWFkcywgZmFsc2UsIGZhbHNlKTsKKwlyZXR1cm4gcGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKGV2c2VsLCBldnNlbF9saXN0LT50aHJlYWRzLCBmYWxzZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwppbmRleCAxYjIxMDZjLi4yZjlhMzM3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlnb3RvIG91dF90aHJlYWRfbWFwX2RlbGV0ZTsKIAl9CiAKLQlpZiAocGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKGV2c2VsLCB0aHJlYWRzLCBmYWxzZSwgZmFsc2UpIDwgMCkgeworCWlmIChwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoZXZzZWwsIHRocmVhZHMsIGZhbHNlKSA8IDApIHsKIAkJcHJfZGVidWcoImZhaWxlZCB0byBvcGVuIGNvdW50ZXI6ICVzLCAiCiAJCQkgInR3ZWFrIC9wcm9jL3N5cy9rZXJuZWwvcGVyZl9ldmVudF9wYXJhbm9pZD9cbiIsCiAJCQkgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTMwMyw3ICszMDMsNyBAQAogCX0KIAogCWlmIChwZXJmX2V2c2VsX19yZWFkX29uX2NwdShldnNlbCwgMCwgMCkgPCAwKSB7Ci0JCXByX2RlYnVnKCJwZXJmX2V2c2VsX19vcGVuX3JlYWRfb25fY3B1XG4iKTsKKwkJcHJfZGVidWcoInBlcmZfZXZzZWxfX3JlYWRfb25fY3B1XG4iKTsKIAkJZ290byBvdXRfY2xvc2VfZmQ7CiAJfQogCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7CiAJfQogCi0JaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMsIGZhbHNlLCBmYWxzZSkgPCAwKSB7CisJaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMsIGZhbHNlKSA8IDApIHsKIAkJcHJfZGVidWcoImZhaWxlZCB0byBvcGVuIGNvdW50ZXI6ICVzLCAiCiAJCQkgInR3ZWFrIC9wcm9jL3N5cy9rZXJuZWwvcGVyZl9ldmVudF9wYXJhbm9pZD9cbiIsCiAJCQkgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHBlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGV2c2VsLCBjcHUsIDApIDwgMCkgewotCQkJcHJfZGVidWcoInBlcmZfZXZzZWxfX29wZW5fcmVhZF9vbl9jcHVcbiIpOworCQkJcHJfZGVidWcoInBlcmZfZXZzZWxfX3JlYWRfb25fY3B1XG4iKTsKIAkJCWVyciA9IC0xOwogCQkJYnJlYWs7CiAJCX0KQEAgLTUyOSw3ICs1MjksNyBAQAogCiAJCXBlcmZfZXZsaXN0X19hZGQoZXZsaXN0LCBldnNlbHNbaV0pOwogCi0JCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2Vsc1tpXSwgY3B1cywgdGhyZWFkcywgZmFsc2UsIGZhbHNlKSA8IDApIHsKKwkJaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWxzW2ldLCBjcHVzLCB0aHJlYWRzLCBmYWxzZSkgPCAwKSB7CiAJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIG9wZW4gY291bnRlcjogJXMsICIKIAkJCQkgInR3ZWFrIC9wcm9jL3N5cy9rZXJuZWwvcGVyZl9ldmVudF9wYXJhbm9pZD9cbiIsCiAJCQkJIHN0cmVycm9yKGVycm5vKSk7CkBAIC01NDksNyArNTQ5LDcgQEAKIAkJCSsrZm9vOwogCQl9CiAKLQl3aGlsZSAoKGV2ZW50ID0gcGVyZl9ldmxpc3RfX3JlYWRfb25fY3B1KGV2bGlzdCwgMCkpICE9IE5VTEwpIHsKKwl3aGlsZSAoKGV2ZW50ID0gcGVyZl9ldmxpc3RfX21tYXBfcmVhZChldmxpc3QsIDApKSAhPSBOVUxMKSB7CiAJCXN0cnVjdCBwZXJmX3NhbXBsZSBzYW1wbGU7CiAKIAkJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSAhPSBQRVJGX1JFQ09SRF9TQU1QTEUpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCA2NzZiNGZiLi5lYmZjN2NmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC04MDEsMTIgKzgwMSwxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19tbWFwX3JlYWRfY3B1KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGludCBjcHUpCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX21tYXBfcmVhZF9pZHgoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlOwogCXVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50OwogCi0Jd2hpbGUgKChldmVudCA9IHBlcmZfZXZsaXN0X19yZWFkX29uX2NwdSh0b3AuZXZsaXN0LCBjcHUpKSAhPSBOVUxMKSB7CisJd2hpbGUgKChldmVudCA9IHBlcmZfZXZsaXN0X19tbWFwX3JlYWQodG9wLmV2bGlzdCwgaWR4KSkgIT0gTlVMTCkgewogCQlwZXJmX3Nlc3Npb25fX3BhcnNlX3NhbXBsZShzZWxmLCBldmVudCwgJnNhbXBsZSk7CiAKIAkJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9TQU1QTEUpCkBAIC04MjAsOCArODIwLDggQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCB0b3AuZXZsaXN0LT5jcHVzLT5ucjsgaSsrKQotCQlwZXJmX3Nlc3Npb25fX21tYXBfcmVhZF9jcHUoc2VsZiwgaSk7CisJZm9yIChpID0gMDsgaSA8IHRvcC5ldmxpc3QtPm5yX21tYXBzOyBpKyspCisJCXBlcmZfc2Vzc2lvbl9fbW1hcF9yZWFkX2lkeChzZWxmLCBpKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfY291bnRlcnMoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCkBAIC04NDUsMTUgKzg0NSwxNiBAQAogCQl9CiAKIAkJYXR0ci0+bW1hcCA9IDE7CisJCWF0dHItPmluaGVyaXQgPSBpbmhlcml0OwogdHJ5X2FnYWluOgogCQlpZiAocGVyZl9ldnNlbF9fb3Blbihjb3VudGVyLCB0b3AuZXZsaXN0LT5jcHVzLAotCQkJCSAgICAgdG9wLmV2bGlzdC0+dGhyZWFkcywgZ3JvdXAsIGluaGVyaXQpIDwgMCkgeworCQkJCSAgICAgdG9wLmV2bGlzdC0+dGhyZWFkcywgZ3JvdXApIDwgMCkgewogCQkJaW50IGVyciA9IGVycm5vOwogCi0JCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpCi0JCQkJZGllKCJQZXJtaXNzaW9uIGVycm9yIC0gYXJlIHlvdSByb290P1xuIgotCQkJCQkiXHQgQ29uc2lkZXIgdHdlYWtpbmciCi0JCQkJCSIgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkLlxuIik7CisJCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpIHsKKwkJCQl1aV9fd2FybmluZ19wYXJhbm9pZCgpOworCQkJCWdvdG8gb3V0X2VycjsKKwkJCX0KIAkJCS8qCiAJCQkgKiBJZiBpdCdzIGN5Y2xlcyB0aGVuIGZhbGwgYmFjayB0byBocnRpbWVyCiAJCQkgKiBiYXNlZCBjcHUtY2xvY2stdGljayBzdyBjb3VudGVyLCB3aGljaApAQCAtODYxLDI1ICs4NjIsNDEgQEAKIAkJCSAqLwogCQkJaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX0hBUkRXQVJFICYmCiAJCQkgICAgYXR0ci0+Y29uZmlnID09IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUykgewotCiAJCQkJaWYgKHZlcmJvc2UpCi0JCQkJCXdhcm5pbmcoIiAuLi4gdHJ5aW5nIHRvIGZhbGwgYmFjayB0byBjcHUtY2xvY2stdGlja3NcbiIpOworCQkJCQl1aV9fd2FybmluZygiQ3ljbGVzIGV2ZW50IG5vdCBzdXBwb3J0ZWQsXG4iCisJCQkJCQkgICAgInRyeWluZyB0byBmYWxsIGJhY2sgdG8gY3B1LWNsb2NrLXRpY2tzXG4iKTsKIAogCQkJCWF0dHItPnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkU7CiAJCQkJYXR0ci0+Y29uZmlnID0gUEVSRl9DT1VOVF9TV19DUFVfQ0xPQ0s7CiAJCQkJZ290byB0cnlfYWdhaW47CiAJCQl9Ci0JCQlwcmludGYoIlxuIik7Ci0JCQllcnJvcigic3lzX3BlcmZfZXZlbnRfb3BlbigpIHN5c2NhbGwgcmV0dXJuZWQgd2l0aCAlZCAiCi0JCQkgICAgICAiKCVzKS4gIC9iaW4vZG1lc2cgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiIsCi0JCQkgICAgICBlcnIsIHN0cmVycm9yKGVycikpOwotCQkJZGllKCJObyBDT05GSUdfUEVSRl9FVkVOVFM9eSBrZXJuZWwgc3VwcG9ydCBjb25maWd1cmVkP1xuIik7Ci0JCQlleGl0KC0xKTsKKworCQkJaWYgKGVyciA9PSBFTk9FTlQpIHsKKwkJCQl1aV9fd2FybmluZygiVGhlICVzIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQuXG4iLAorCQkJCQkgICAgZXZlbnRfbmFtZShjb3VudGVyKSk7CisJCQkJZ290byBvdXRfZXJyOworCQkJfQorCisJCQl1aV9fd2FybmluZygiVGhlIHN5c19wZXJmX2V2ZW50X29wZW4oKSBzeXNjYWxsICIKKwkJCQkgICAgInJldHVybmVkIHdpdGggJWQgKCVzKS4gIC9iaW4vZG1lc2cgIgorCQkJCSAgICAibWF5IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiIKKwkJCQkgICAgIk5vIENPTkZJR19QRVJGX0VWRU5UUz15IGtlcm5lbCBzdXBwb3J0ICIKKwkJCQkgICAgImNvbmZpZ3VyZWQ/XG4iLCBlcnIsIHN0cmVycm9yKGVycikpOworCQkJZ290byBvdXRfZXJyOwogCQl9CiAJfQogCi0JaWYgKHBlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgbW1hcF9wYWdlcywgZmFsc2UpIDwgMCkKLQkJZGllKCJmYWlsZWQgdG8gbW1hcCB3aXRoICVkICglcylcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCWlmIChwZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIG1tYXBfcGFnZXMsIGZhbHNlKSA8IDApIHsKKwkJdWlfX3dhcm5pbmcoIkZhaWxlZCB0byBtbWFwIHdpdGggJWQgKCVzKVxuIiwKKwkJCSAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCXJldHVybjsKKworb3V0X2VycjoKKwlleGl0X2Jyb3dzZXIoMCk7CisJZXhpdCgwKTsKIH0KIAogc3RhdGljIGludCBfX2NtZF90b3Aodm9pZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jZ3JvdXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9jZ3JvdXAuYwppbmRleCA5ZmVhNzU1Li45NmJlZTVjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2dyb3VwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Nncm91cC5jCkBAIC0xMyw3ICsxMyw3IEBACiB7CiAJRklMRSAqZnA7CiAJY2hhciBtb3VudHBvaW50W01BWF9QQVRIKzFdLCB0b2tlbnNbTUFYX1BBVEgrMV0sIHR5cGVbTUFYX1BBVEgrMV07Ci0JY2hhciAqdG9rZW4sICpzYXZlZF9wdHI7CisJY2hhciAqdG9rZW4sICpzYXZlZF9wdHIgPSBOVUxMOwogCWludCBmb3VuZCA9IDA7CiAKIAlmcCA9IGZvcGVuKCIvcHJvYy9tb3VudHMiLCAiciIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMgYi90b29scy9wZXJmL3V0aWwvZGVidWcuYwppbmRleCBkNDUzNmE5Li4xNTU3NDlkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZGVidWcuYworKysgYi90b29scy9wZXJmL3V0aWwvZGVidWcuYwpAQCAtNTcsNiArNTcsMTYgQEAKIH0KICNlbmRpZgogCit2b2lkIHVpX193YXJuaW5nX3BhcmFub2lkKHZvaWQpCit7CisJdWlfX3dhcm5pbmcoIlBlcm1pc3Npb24gZXJyb3IgLSBhcmUgeW91IHJvb3Q/XG4iCisJCSAgICAiQ29uc2lkZXIgdHdlYWtpbmcgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkOlxuIgorCQkgICAgIiAtMSAtIE5vdCBwYXJhbm9pZCBhdCBhbGxcbiIKKwkJICAgICIgIDAgLSBEaXNhbGxvdyByYXcgdHJhY2Vwb2ludCBhY2Nlc3MgZm9yIHVucHJpdlxuIgorCQkgICAgIiAgMSAtIERpc2FsbG93IGNwdSBldmVudHMgZm9yIHVucHJpdlxuIgorCQkgICAgIiAgMiAtIERpc2FsbG93IGtlcm5lbCBwcm9maWxpbmcgZm9yIHVucHJpdlxuIik7Cit9CisKIHZvaWQgdHJhY2VfZXZlbnQodW5pb24gcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJdW5zaWduZWQgY2hhciAqcmF3X2V2ZW50ID0gKHZvaWQgKilldmVudDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmgKaW5kZXggOTM1MTZjZjQuLmZkNTNkYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oCkBAIC0zNiw1ICszNiw2IEBACiAjZW5kaWYKIAogdm9pZCB1aV9fd2FybmluZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKK3ZvaWQgdWlfX3dhcm5pbmdfcGFyYW5vaWQodm9pZCk7CiAKICNlbmRpZgkvKiBfX1BFUkZfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAyYjE1YzM2Li4xMDIzZjY3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtNzEwLDcgKzcxMCw3IEBACiAJCSAqIGluIHRoZSB3aG9sZSBrZXJuZWwgc3ltYm9sIGxpc3QuCiAJCSAqLwogCQlpZiAoKGxvbmcgbG9uZylhbC0+YWRkciA8IDAgJiYKLQkJICAgIGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwgJiYKKwkJICAgIGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSICYmCiAJCSAgICBtYWNoaW5lICYmIG1nICE9ICZtYWNoaW5lLT5rbWFwcykgewogCQkJbWcgPSAmbWFjaGluZS0+a21hcHM7CiAJCQlnb3RvIHRyeV9hZ2FpbjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwppbmRleCBkODUyY2VmLi4yM2ViMjJiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiZXZsaXN0LmgiCiAjaW5jbHVkZSAiZXZzZWwuaCIKICNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKIAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKQEAgLTE2NSwxMSArMTY2LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXVuaW9uIHBlcmZfZXZlbnQgKnBlcmZfZXZsaXN0X19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IGNwdSkKK3VuaW9uIHBlcmZfZXZlbnQgKnBlcmZfZXZsaXN0X19tbWFwX3JlYWQoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBpZHgpCiB7CiAJLyogWFhYIE1vdmUgdGhpcyB0byBwZXJmLmMsIG1ha2luZyBpdCBnZW5lcmFsbHkgYXZhaWxhYmxlICovCiAJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7Ci0Jc3RydWN0IHBlcmZfbW1hcCAqbWQgPSAmZXZsaXN0LT5tbWFwW2NwdV07CisJc3RydWN0IHBlcmZfbW1hcCAqbWQgPSAmZXZsaXN0LT5tbWFwW2lkeF07CiAJdW5zaWduZWQgaW50IGhlYWQgPSBwZXJmX21tYXBfX3JlYWRfaGVhZChtZCk7CiAJdW5zaWduZWQgaW50IG9sZCA9IG1kLT5wcmV2OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBtZC0+YmFzZSArIHBhZ2Vfc2l6ZTsKQEAgLTIzNCwzNCArMjM1LDEyNCBAQAogCiB2b2lkIHBlcmZfZXZsaXN0X19tdW5tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCiB7Ci0JaW50IGNwdTsKKwlpbnQgaTsKIAorCWZvciAoaSA9IDA7IGkgPCBldmxpc3QtPm5yX21tYXBzOyBpKyspIHsKKwkJaWYgKGV2bGlzdC0+bW1hcFtpXS5iYXNlICE9IE5VTEwpIHsKKwkJCW11bm1hcChldmxpc3QtPm1tYXBbaV0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7CisJCQlldmxpc3QtPm1tYXBbaV0uYmFzZSA9IE5VTEw7CisJCX0KKwl9CisKKwlmcmVlKGV2bGlzdC0+bW1hcCk7CisJZXZsaXN0LT5tbWFwID0gTlVMTDsKK30KKworaW50IHBlcmZfZXZsaXN0X19hbGxvY19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCWV2bGlzdC0+bnJfbW1hcHMgPSBldmxpc3QtPmNwdXMtPm5yOworCWlmIChldmxpc3QtPmNwdXMtPm1hcFswXSA9PSAtMSkKKwkJZXZsaXN0LT5ucl9tbWFwcyA9IGV2bGlzdC0+dGhyZWFkcy0+bnI7CisJZXZsaXN0LT5tbWFwID0gemFsbG9jKGV2bGlzdC0+bnJfbW1hcHMgKiBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcCkpOworCXJldHVybiBldmxpc3QtPm1tYXAgIT0gTlVMTCA/IDAgOiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IF9fcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJCSAgICAgICBpbnQgaWR4LCBpbnQgcHJvdCwgaW50IG1hc2ssIGludCBmZCkKK3sKKwlldmxpc3QtPm1tYXBbaWR4XS5wcmV2ID0gMDsKKwlldmxpc3QtPm1tYXBbaWR4XS5tYXNrID0gbWFzazsKKwlldmxpc3QtPm1tYXBbaWR4XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAorCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKKwlpZiAoZXZsaXN0LT5tbWFwW2lkeF0uYmFzZSA9PSBNQVBfRkFJTEVEKSB7CisJCWlmIChldmxpc3QtPmNwdXMtPm1hcFtpZHhdID09IC0xICYmIGV2c2VsLT5hdHRyLmluaGVyaXQpCisJCQl1aV9fd2FybmluZygiSW5oZXJpdCBpcyBub3QgYWxsb3dlZCBvbiBwZXItdGFzayAiCisJCQkJICAgICJldmVudHMgdXNpbmcgbW1hcC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcGVyZl9ldmxpc3RfX2FkZF9wb2xsZmQoZXZsaXN0LCBmZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9ldmxpc3RfX21tYXBfcGVyX2NwdShzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IHByb3QsIGludCBtYXNrKQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKKwlpbnQgY3B1LCB0aHJlYWQ7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGV2bGlzdC0+Y3B1cy0+bnI7IGNwdSsrKSB7CisJCWludCBvdXRwdXQgPSAtMTsKKworCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IGV2bGlzdC0+dGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2c2VsLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCQkJaW50IGZkID0gRkQoZXZzZWwsIGNwdSwgdGhyZWFkKTsKKworCQkJCWlmIChvdXRwdXQgPT0gLTEpIHsKKwkJCQkJb3V0cHV0ID0gZmQ7CisJCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgZXZzZWwsIGNwdSwKKwkJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCisJCQkJCQlnb3RvIG91dF91bm1hcDsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoaW9jdGwoZmQsIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsIG91dHB1dCkgIT0gMCkKKwkJCQkJCWdvdG8gb3V0X3VubWFwOworCQkJCX0KKworCQkJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKKwkJCQkgICAgcGVyZl9ldmxpc3RfX2lkX2FkZF9mZChldmxpc3QsIGV2c2VsLCBjcHUsIHRocmVhZCwgZmQpIDwgMCkKKwkJCQkJZ290byBvdXRfdW5tYXA7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgogCWZvciAoY3B1ID0gMDsgY3B1IDwgZXZsaXN0LT5jcHVzLT5ucjsgY3B1KyspIHsKIAkJaWYgKGV2bGlzdC0+bW1hcFtjcHVdLmJhc2UgIT0gTlVMTCkgewogCQkJbXVubWFwKGV2bGlzdC0+bW1hcFtjcHVdLmJhc2UsIGV2bGlzdC0+bW1hcF9sZW4pOwogCQkJZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSA9IE5VTEw7CiAJCX0KIAl9CisJcmV0dXJuIC0xOwogfQogCi1pbnQgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCitzdGF0aWMgaW50IHBlcmZfZXZsaXN0X19tbWFwX3Blcl90aHJlYWQoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBwcm90LCBpbnQgbWFzaykKIHsKLQlldmxpc3QtPm1tYXAgPSB6YWxsb2MoZXZsaXN0LT5jcHVzLT5uciAqIHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwKSk7Ci0JcmV0dXJuIGV2bGlzdC0+bW1hcCAhPSBOVUxMID8gMCA6IC1FTk9NRU07Ci19CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCWludCB0aHJlYWQ7CiAKLXN0YXRpYyBpbnQgX19wZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IGNwdSwgaW50IHByb3QsCi0JCQkgICAgICAgaW50IG1hc2ssIGludCBmZCkKLXsKLQlldmxpc3QtPm1tYXBbY3B1XS5wcmV2ID0gMDsKLQlldmxpc3QtPm1tYXBbY3B1XS5tYXNrID0gbWFzazsKLQlldmxpc3QtPm1tYXBbY3B1XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAotCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSA9PSBNQVBfRkFJTEVEKQotCQlyZXR1cm4gLTE7CisJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBldmxpc3QtPnRocmVhZHMtPm5yOyB0aHJlYWQrKykgeworCQlpbnQgb3V0cHV0ID0gLTE7CiAKLQlwZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldnNlbCwgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQkJaW50IGZkID0gRkQoZXZzZWwsIDAsIHRocmVhZCk7CisKKwkJCWlmIChvdXRwdXQgPT0gLTEpIHsKKwkJCQlvdXRwdXQgPSBmZDsKKwkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGV2c2VsLCB0aHJlYWQsCisJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCisJCQkJCWdvdG8gb3V0X3VubWFwOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaW9jdGwoZmQsIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsIG91dHB1dCkgIT0gMCkKKwkJCQkJZ290byBvdXRfdW5tYXA7CisJCQl9CisKKwkJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKKwkJCSAgICBwZXJmX2V2bGlzdF9faWRfYWRkX2ZkKGV2bGlzdCwgZXZzZWwsIDAsIHRocmVhZCwgZmQpIDwgMCkKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJfQorCX0KKwogCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBldmxpc3QtPnRocmVhZHMtPm5yOyB0aHJlYWQrKykgeworCQlpZiAoZXZsaXN0LT5tbWFwW3RocmVhZF0uYmFzZSAhPSBOVUxMKSB7CisJCQltdW5tYXAoZXZsaXN0LT5tbWFwW3RocmVhZF0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7CisJCQlldmxpc3QtPm1tYXBbdGhyZWFkXS5iYXNlID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7CiB9CiAKIC8qKiBwZXJmX2V2bGlzdF9fbW1hcCAtIENyZWF0ZSBwZXIgY3B1IG1hcHMgdG8gcmVjZWl2ZSBldmVudHMKQEAgLTI4MiwxMSArMzczLDExIEBACiBpbnQgcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBwYWdlcywgYm9vbCBvdmVyd3JpdGUpCiB7CiAJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7Ci0JaW50IG1hc2sgPSBwYWdlcyAqIHBhZ2Vfc2l6ZSAtIDEsIGNwdTsKLQlzdHJ1Y3QgcGVyZl9ldnNlbCAqZmlyc3RfZXZzZWwsICpldnNlbDsKKwlpbnQgbWFzayA9IHBhZ2VzICogcGFnZV9zaXplIC0gMTsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJY29uc3Qgc3RydWN0IGNwdV9tYXAgKmNwdXMgPSBldmxpc3QtPmNwdXM7CiAJY29uc3Qgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMgPSBldmxpc3QtPnRocmVhZHM7Ci0JaW50IHRocmVhZCwgcHJvdCA9IFBST1RfUkVBRCB8IChvdmVyd3JpdGUgPyAwIDogUFJPVF9XUklURSk7CisJaW50IHByb3QgPSBQUk9UX1JFQUQgfCAob3ZlcndyaXRlID8gMCA6IFBST1RfV1JJVEUpOwogCiAJaWYgKGV2bGlzdC0+bW1hcCA9PSBOVUxMICYmIHBlcmZfZXZsaXN0X19hbGxvY19tbWFwKGV2bGlzdCkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI5Niw0MiArMzg3LDE4IEBACiAKIAlldmxpc3QtPm92ZXJ3cml0ZSA9IG92ZXJ3cml0ZTsKIAlldmxpc3QtPm1tYXBfbGVuID0gKHBhZ2VzICsgMSkgKiBwYWdlX3NpemU7Ci0JZmlyc3RfZXZzZWwgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2c2VsLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CiAJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKIAkJICAgIGV2c2VsLT5zYW1wbGVfaWQgPT0gTlVMTCAmJgogCQkgICAgcGVyZl9ldnNlbF9fYWxsb2NfaWQoZXZzZWwsIGNwdXMtPm5yLCB0aHJlYWRzLT5ucikgPCAwKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgY3B1KyspIHsKLQkJCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgdGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7Ci0JCQkJaW50IGZkID0gRkQoZXZzZWwsIGNwdSwgdGhyZWFkKTsKLQotCQkJCWlmIChldnNlbC0+aWR4IHx8IHRocmVhZCkgewotCQkJCQlpZiAoaW9jdGwoZmQsIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsCi0JCQkJCQkgIEZEKGZpcnN0X2V2c2VsLCBjcHUsIDApKSAhPSAwKQotCQkJCQkJZ290byBvdXRfdW5tYXA7Ci0JCQkJfSBlbHNlIGlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgY3B1LCBwcm90LCBtYXNrLCBmZCkgPCAwKQotCQkJCQlnb3RvIG91dF91bm1hcDsKLQotCQkJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKLQkJCQkgICAgcGVyZl9ldmxpc3RfX2lkX2FkZF9mZChldmxpc3QsIGV2c2VsLCBjcHUsIHRocmVhZCwgZmQpIDwgMCkKLQkJCQkJZ290byBvdXRfdW5tYXA7Ci0JCQl9Ci0JCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlpZiAoZXZsaXN0LT5jcHVzLT5tYXBbMF0gPT0gLTEpCisJCXJldHVybiBwZXJmX2V2bGlzdF9fbW1hcF9wZXJfdGhyZWFkKGV2bGlzdCwgcHJvdCwgbWFzayk7CiAKLW91dF91bm1hcDoKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyBjcHUrKykgewotCQlpZiAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSAhPSBOVUxMKSB7Ci0JCQltdW5tYXAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7Ci0JCQlldmxpc3QtPm1tYXBbY3B1XS5iYXNlID0gTlVMTDsKLQkJfQotCX0KLQlyZXR1cm4gLTE7CisJcmV0dXJuIHBlcmZfZXZsaXN0X19tbWFwX3Blcl9jcHUoZXZsaXN0LCBwcm90LCBtYXNrKTsKIH0KIAogaW50IHBlcmZfZXZsaXN0X19jcmVhdGVfbWFwcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgcGlkX3QgdGFyZ2V0X3BpZCwKQEAgLTM0Miw3ICs0MDksNyBAQAogCWlmIChldmxpc3QtPnRocmVhZHMgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHRhcmdldF90aWQgIT0gLTEpCisJaWYgKGNwdV9saXN0ID09IE5VTEwgJiYgdGFyZ2V0X3RpZCAhPSAtMSkKIAkJZXZsaXN0LT5jcHVzID0gY3B1X21hcF9fZHVtbXlfbmV3KCk7CiAJZWxzZQogCQlldmxpc3QtPmNwdXMgPSBjcHVfbWFwX19uZXcoY3B1X2xpc3QpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCmluZGV4IDhiMWNiN2EuLjcxMDlkN2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKQEAgLTE3LDYgKzE3LDcgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBoZWFkc1tQRVJGX0VWTElTVF9fSExJU1RfU0laRV07CiAJaW50CQkgbnJfZW50cmllczsKIAlpbnQJCSBucl9mZHM7CisJaW50CQkgbnJfbW1hcHM7CiAJaW50CQkgbW1hcF9sZW47CiAJYm9vbAkJIG92ZXJ3cml0ZTsKIAl1bmlvbiBwZXJmX2V2ZW50IGV2ZW50X2NvcHk7CkBAIC00Niw3ICs0Nyw3IEBACiAKIHN0cnVjdCBwZXJmX2V2c2VsICpwZXJmX2V2bGlzdF9faWQyZXZzZWwoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHU2NCBpZCk7CiAKLXVuaW9uIHBlcmZfZXZlbnQgKnBlcmZfZXZsaXN0X19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldmxpc3QgKnNlbGYsIGludCBjcHUpOwordW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX21tYXBfcmVhZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKnNlbGYsIGludCBpZHgpOwogCiBpbnQgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogaW50IHBlcmZfZXZsaXN0X19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgcGFnZXMsIGJvb2wgb3ZlcndyaXRlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKaW5kZXggNjYyNTk2YS4uZDZmZDU5YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogfQogCiBzdGF0aWMgaW50IF9fcGVyZl9ldnNlbF9fb3BlbihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzLAotCQkJICAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCkKKwkJCSAgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwKQogewogCWludCBjcHUsIHRocmVhZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKQEAgLTE5MiwxOSArMTkyLDYgQEAKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1cy0+bnI7IGNwdSsrKSB7CiAJCWludCBncm91cF9mZCA9IC0xOwotCQkvKgotCQkgKiBEb24ndCBhbGxvdyBtbWFwKCkgb2YgaW5oZXJpdGVkIHBlci10YXNrIGNvdW50ZXJzLiBUaGlzCi0JCSAqIHdvdWxkIGNyZWF0ZSBhIHBlcmZvcm1hbmNlIGlzc3VlIGR1ZSB0byBhbGwgY2hpbGRyZW4gd3JpdGluZwotCQkgKiB0byB0aGUgc2FtZSBidWZmZXIuCi0JCSAqCi0JCSAqIEZJWE1FOgotCQkgKiBQcm9wZXIgZml4IGlzIG5vdCB0byBwYXNzICdpbmhlcml0JyB0byBwZXJmX2V2c2VsX19vcGVuKiwKLQkJICogYnV0IGEgJ2ZsYWdzJyBwYXJhbWV0ZXIsIHdpdGggJ2dyb3VwJyBmb2xkZWQgdGhlcmUgYXMgd2VsbCwKLQkJICogdGhlbiBpbnRyb2R1Y2UgYSBQRVJGX09fe01NQVAsR1JPVVAsSU5IRVJJVH0gZW51bSwgYW5kIGlmCi0JCSAqIE9fTU1BUCBpcyBzZXQsIGVtaXQgYSB3YXJuaW5nIGlmIGNwdSA8IDAgYW5kIE9fSU5IRVJJVCBpcwotCQkgKiBzZXQuIExldHMgZ28gZm9yIHRoZSBtaW5pbWFsIGZpeCBmaXJzdCB0aG8uCi0JCSAqLwotCQlldnNlbC0+YXR0ci5pbmhlcml0ID0gKGNwdXMtPm1hcFtjcHVdID49IDApICYmIGluaGVyaXQ7CiAKIAkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCB0aHJlYWRzLT5ucjsgdGhyZWFkKyspIHsKIApAQCAtMjUzLDcgKzI0MCw3IEBACiB9OwogCiBpbnQgcGVyZl9ldnNlbF9fb3BlbihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzLAotCQkgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpCisJCSAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXApCiB7CiAJaWYgKGNwdXMgPT0gTlVMTCkgewogCQkvKiBXb3JrIGFyb3VuZCBvbGQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgc3RyaWN0IGFsaWFzaW5nICovCkBAIC0yNjMsMTkgKzI1MCwxOSBAQAogCWlmICh0aHJlYWRzID09IE5VTEwpCiAJCXRocmVhZHMgPSAmZW1wdHlfdGhyZWFkX21hcC5tYXA7CiAKLQlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBncm91cCwgaW5oZXJpdCk7CisJcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgdGhyZWFkcywgZ3JvdXApOwogfQogCiBpbnQgcGVyZl9ldnNlbF9fb3Blbl9wZXJfY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCSAgICAgc3RydWN0IGNwdV9tYXAgKmNwdXMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCkKKwkJCSAgICAgc3RydWN0IGNwdV9tYXAgKmNwdXMsIGJvb2wgZ3JvdXApCiB7Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgJmVtcHR5X3RocmVhZF9tYXAubWFwLCBncm91cCwgaW5oZXJpdCk7CisJcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgJmVtcHR5X3RocmVhZF9tYXAubWFwLCBncm91cCk7CiB9CiAKIGludCBwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpCisJCQkJc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXApCiB7Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgJmVtcHR5X2NwdV9tYXAubWFwLCB0aHJlYWRzLCBncm91cCwgaW5oZXJpdCk7CisJcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgJmVtcHR5X2NwdV9tYXAubWFwLCB0aHJlYWRzLCBncm91cCk7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF9fcGFyc2VfaWRfc2FtcGxlKGNvbnN0IHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgdHlwZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKaW5kZXggNjcxMGFiNS4uZjc5YmIyYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKQEAgLTgxLDExICs4MSwxMSBAQAogdm9pZCBwZXJmX2V2c2VsX19jbG9zZV9mZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBuY3B1cywgaW50IG50aHJlYWRzKTsKIAogaW50IHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkgICAgIHN0cnVjdCBjcHVfbWFwICpjcHVzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpOworCQkJICAgICBzdHJ1Y3QgY3B1X21hcCAqY3B1cywgYm9vbCBncm91cCk7CiBpbnQgcGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCQlzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywgYm9vbCBncm91cCwgYm9vbCBpbmhlcml0KTsKKwkJCQlzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywgYm9vbCBncm91cCk7CiBpbnQgcGVyZl9ldnNlbF9fb3BlbihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzLAotCQkgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpOworCQkgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwKTsKIAogI2RlZmluZSBwZXJmX2V2c2VsX19tYXRjaChldnNlbCwgdCwgYykJCVwKIAkoZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfIyN0ICYmCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggNWRkZWU2Ni4uZjAyMjMxNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTIzNCw3ICsyMzQsNiBAQAogCiAJLyogU2VhcmNoaW5nIHRyYWNlIGV2ZW50cyBjb3JyZXNwb25kaW5nIHRvIHByb2JlIGV2ZW50ICovCiAJbnRldnMgPSBmaW5kX3Byb2JlX3RyYWNlX2V2ZW50cyhmZCwgcGV2LCB0ZXZzLCBtYXhfdGV2cyk7Ci0JY2xvc2UoZmQpOwogCiAJaWYgKG50ZXZzID4gMCkgewkvKiBTdWNjZWVkZWQgdG8gZmluZCB0cmFjZSBldmVudHMgKi8KIAkJcHJfZGVidWcoImZpbmQgJWQgcHJvYmVfdHJhY2VfZXZlbnRzLlxuIiwgbnRldnMpOwpAQCAtMzg4LDcgKzM4Nyw2IEBACiAJfQogCiAJcmV0ID0gZmluZF9saW5lX3JhbmdlKGZkLCBscik7Ci0JY2xvc2UoZmQpOwogCWlmIChyZXQgPT0gMCkgewogCQlwcl93YXJuaW5nKCJTcGVjaWZpZWQgc291cmNlIGxpbmUgaXMgbm90IGZvdW5kLlxuIik7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtNTEyLDE5ICs1MTAsMTggQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWZkID0gb3Blbl92bWxpbnV4KG1vZHVsZSk7Ci0JaWYgKGZkIDwgMCkgewotCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gb3BlbiBkZWJ1ZyBpbmZvcm1hdGlvbiBmaWxlLlxuIik7Ci0JCXJldHVybiBmZDsKLQl9Ci0KIAlzZXR1cF9wYWdlcigpOwogCi0JZm9yIChpID0gMDsgaSA8IG5wZXZzICYmIHJldCA+PSAwOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5wZXZzICYmIHJldCA+PSAwOyBpKyspIHsKKwkJZmQgPSBvcGVuX3ZtbGludXgobW9kdWxlKTsKKwkJaWYgKGZkIDwgMCkgeworCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIG9wZW4gZGVidWcgaW5mb3JtYXRpb24gZmlsZS5cbiIpOworCQkJcmV0ID0gZmQ7CisJCQlicmVhazsKKwkJfQogCQlyZXQgPSBzaG93X2F2YWlsYWJsZV92YXJzX2F0KGZkLCAmcGV2c1tpXSwgbWF4X3ZscywgX2ZpbHRlciwKIAkJCQkJICAgICBleHRlcm5zKTsKLQotCWNsb3NlKGZkKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCmluZGV4IDE5NGY5ZTIuLmI3Yzg1Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKQEAgLTI3Myw2ICsyNzMsMjUgQEAKIAlyZXR1cm4gZHdhcmZfZm9ybXN0cmluZygmYXR0cik7CiB9CiAKKy8qIEdldCBhIGxpbmUgbnVtYmVyIGFuZCBmaWxlIG5hbWUgZm9yIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQgY3VfZmluZF9saW5laW5mbyhEd2FyZl9EaWUgKmN1ZGllLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgY29uc3QgY2hhciAqKmZuYW1lLCBpbnQgKmxpbmVubykKK3sKKwlEd2FyZl9MaW5lICpsaW5lOworCUR3YXJmX0FkZHIgbGFkZHI7CisKKwlsaW5lID0gZHdhcmZfZ2V0c3JjX2RpZShjdWRpZSwgKER3YXJmX0FkZHIpYWRkcik7CisJaWYgKGxpbmUgJiYgZHdhcmZfbGluZWFkZHIobGluZSwgJmxhZGRyKSA9PSAwICYmCisJICAgIGFkZHIgPT0gKHVuc2lnbmVkIGxvbmcpbGFkZHIgJiYgZHdhcmZfbGluZW5vKGxpbmUsIGxpbmVubykgPT0gMCkgeworCQkqZm5hbWUgPSBkd2FyZl9saW5lc3JjKGxpbmUsIE5VTEwsIE5VTEwpOworCQlpZiAoISpmbmFtZSkKKwkJCS8qIGxpbmUgbnVtYmVyIGlzIHVzZWxlc3Mgd2l0aG91dCBmaWxlbmFtZSAqLworCQkJKmxpbmVubyA9IDA7CisJfQorCisJcmV0dXJuICpsaW5lbm8gPzogLUVOT0VOVDsKK30KKwogLyogQ29tcGFyZSBkaWVuYW1lIGFuZCB0bmFtZSAqLwogc3RhdGljIGJvb2wgZGllX2NvbXBhcmVfbmFtZShEd2FyZl9EaWUgKmR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpCiB7CkBAIC00OTcsNyArNTE2LDIwIEBACiBzdGF0aWMgRHdhcmZfRGllICpkaWVfZmluZF9pbmxpbmVmdW5jKER3YXJmX0RpZSAqc3BfZGllLCBEd2FyZl9BZGRyIGFkZHIsCiAJCQkJICAgICAgRHdhcmZfRGllICpkaWVfbWVtKQogewotCXJldHVybiBkaWVfZmluZF9jaGlsZChzcF9kaWUsIF9fZGllX2ZpbmRfaW5saW5lX2NiLCAmYWRkciwgZGllX21lbSk7CisJRHdhcmZfRGllIHRtcF9kaWU7CisKKwlzcF9kaWUgPSBkaWVfZmluZF9jaGlsZChzcF9kaWUsIF9fZGllX2ZpbmRfaW5saW5lX2NiLCAmYWRkciwgJnRtcF9kaWUpOworCWlmICghc3BfZGllKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIElubGluZWQgZnVuY3Rpb24gY291bGQgYmUgcmVjdXJzaXZlLiBUcmFjZSBpdCB1bnRpbCBmYWlsICovCisJd2hpbGUgKHNwX2RpZSkgeworCQltZW1jcHkoZGllX21lbSwgc3BfZGllLCBzaXplb2YoRHdhcmZfRGllKSk7CisJCXNwX2RpZSA9IGRpZV9maW5kX2NoaWxkKHNwX2RpZSwgX19kaWVfZmluZF9pbmxpbmVfY2IsICZhZGRyLAorCQkJCQkmdG1wX2RpZSk7CisJfQorCisJcmV0dXJuIGRpZV9tZW07CiB9CiAKIC8qIFdhbGtlciBvbiBsaW5lcyAoTm90ZTogbGluZSBudW1iZXIgd2lsbCBub3QgYmUgc29ydGVkKSAqLwpAQCAtMTM5NSw2ICsxNDI3LDEwIEBACiAJICAgICFkaWVfY29tcGFyZV9uYW1lKHNwX2RpZSwgcHAtPmZ1bmN0aW9uKSkKIAkJcmV0dXJuIERXQVJGX0NCX09LOwogCisJLyogQ2hlY2sgZGVjbGFyZWQgZmlsZSAqLworCWlmIChwcC0+ZmlsZSAmJiBzdHJ0YWlsY21wKHBwLT5maWxlLCBkd2FyZl9kZWNsX2ZpbGUoc3BfZGllKSkpCisJCXJldHVybiBEV0FSRl9DQl9PSzsKKwogCXBmLT5mbmFtZSA9IGR3YXJmX2RlY2xfZmlsZShzcF9kaWUpOwogCWlmIChwcC0+bGluZSkgeyAvKiBGdW5jdGlvbiByZWxhdGl2ZSBsaW5lICovCiAJCWR3YXJmX2RlY2xfbGluZShzcF9kaWUsICZwZi0+bG5vKTsKQEAgLTE0NTEsNiArMTQ4Nyw3IEBACiAJaWYgKCFkYmcpIHsKIAkJcHJfd2FybmluZygiTm8gZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIHZtbGludXggLSAiCiAJCQkicGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfREVCVUdfSU5GTz15LlxuIik7CisJCWNsb3NlKGZkKTsJLyogV2l0aG91dCBkd2ZsX2VuZCgpLCBmZCBpc24ndCBjbG9zZWQuICovCiAJCXJldHVybiAtRUJBREY7CiAJfQogCkBAIC0xNjg2LDExICsxNzIzLDkgQEAKIAlEd2FyZl9EaWUgY3VkaWUsIHNwZGllLCBpbmRpZTsKIAlEd2FyZiAqZGJnID0gTlVMTDsKIAlEd2ZsICpkd2ZsID0gTlVMTDsKLQlEd2FyZl9MaW5lICpsaW5lOwotCUR3YXJmX0FkZHIgbGFkZHIsIGVhZGRyLCBiaWFzID0gMDsKLQljb25zdCBjaGFyICp0bXA7Ci0JaW50IGxpbmVubywgcmV0ID0gMDsKLQlib29sIGZvdW5kID0gZmFsc2U7CisJRHdhcmZfQWRkciBfYWRkciwgYmFzZWFkZHIsIGJpYXMgPSAwOworCWNvbnN0IGNoYXIgKmZuYW1lID0gTlVMTCwgKmZ1bmMgPSBOVUxMLCAqdG1wOworCWludCBiYXNlbGluZSA9IDAsIGxpbmVubyA9IDAsIHJldCA9IDA7CiAKIAkvKiBPcGVuIHRoZSBsaXZlIGxpbnV4IGtlcm5lbCAqLwogCWRiZyA9IGR3ZmxfaW5pdF9saXZlX2tlcm5lbF9kd2FyZihhZGRyLCAmZHdmbCwgJmJpYXMpOwpAQCAtMTcxMSw2OCArMTc0Niw3OSBAQAogCQlnb3RvIGVuZDsKIAl9CiAKLQkvKiBGaW5kIGEgY29ycmVzcG9uZGluZyBsaW5lICovCi0JbGluZSA9IGR3YXJmX2dldHNyY19kaWUoJmN1ZGllLCAoRHdhcmZfQWRkcilhZGRyKTsKLQlpZiAobGluZSkgewotCQlpZiAoZHdhcmZfbGluZWFkZHIobGluZSwgJmxhZGRyKSA9PSAwICYmCi0JCSAgICAoRHdhcmZfQWRkcilhZGRyID09IGxhZGRyICYmCi0JCSAgICBkd2FyZl9saW5lbm8obGluZSwgJmxpbmVubykgPT0gMCkgewotCQkJdG1wID0gZHdhcmZfbGluZXNyYyhsaW5lLCBOVUxMLCBOVUxMKTsKLQkJCWlmICh0bXApIHsKLQkJCQlwcHQtPmxpbmUgPSBsaW5lbm87Ci0JCQkJcHB0LT5maWxlID0gc3RyZHVwKHRtcCk7Ci0JCQkJaWYgKHBwdC0+ZmlsZSA9PSBOVUxMKSB7Ci0JCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gZW5kOwotCQkJCX0KLQkJCQlmb3VuZCA9IHRydWU7CisJLyogRmluZCBhIGNvcnJlc3BvbmRpbmcgbGluZSAoZmlsZW5hbWUgYW5kIGxpbmVubykgKi8KKwljdV9maW5kX2xpbmVpbmZvKCZjdWRpZSwgYWRkciwgJmZuYW1lLCAmbGluZW5vKTsKKwkvKiBEb24ndCBjYXJlIHdoZXRoZXIgaXQgZmFpbGVkIG9yIG5vdCAqLworCisJLyogRmluZCBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gKG5hbWUsIGJhc2VsaW5lIGFuZCBiYXNlYWRkcikgKi8KKwlpZiAoZGllX2ZpbmRfcmVhbF9zdWJwcm9ncmFtKCZjdWRpZSwgKER3YXJmX0FkZHIpYWRkciwgJnNwZGllKSkgeworCQkvKiBHZXQgZnVuY3Rpb24gZW50cnkgaW5mb3JtYXRpb24gKi8KKwkJdG1wID0gZHdhcmZfZGllbmFtZSgmc3BkaWUpOworCQlpZiAoIXRtcCB8fAorCQkgICAgZHdhcmZfZW50cnlwYygmc3BkaWUsICZiYXNlYWRkcikgIT0gMCB8fAorCQkgICAgZHdhcmZfZGVjbF9saW5lKCZzcGRpZSwgJmJhc2VsaW5lKSAhPSAwKQorCQkJZ290byBwb3N0OworCQlmdW5jID0gdG1wOworCisJCWlmIChhZGRyID09ICh1bnNpZ25lZCBsb25nKWJhc2VhZGRyKQorCQkJLyogRnVuY3Rpb24gZW50cnkgLSBSZWxhdGl2ZSBsaW5lIG51bWJlciBpcyAwICovCisJCQlsaW5lbm8gPSBiYXNlbGluZTsKKwkJZWxzZSBpZiAoZGllX2ZpbmRfaW5saW5lZnVuYygmc3BkaWUsIChEd2FyZl9BZGRyKWFkZHIsCisJCQkJCSAgICAgJmluZGllKSkgeworCQkJaWYgKGR3YXJmX2VudHJ5cGMoJmluZGllLCAmX2FkZHIpID09IDAgJiYKKwkJCSAgICBfYWRkciA9PSBhZGRyKQorCQkJCS8qCisJCQkJICogYWRkciBpcyBhdCBhbiBpbmxpbmUgZnVuY3Rpb24gZW50cnkuCisJCQkJICogSW4gdGhpcyBjYXNlLCBsaW5lbm8gc2hvdWxkIGJlIHRoZSBjYWxsLXNpdGUKKwkJCQkgKiBsaW5lIG51bWJlci4KKwkJCQkgKi8KKwkJCQlsaW5lbm8gPSBkaWVfZ2V0X2NhbGxfbGluZW5vKCZpbmRpZSk7CisJCQllbHNlIHsKKwkJCQkvKgorCQkJCSAqIGFkZHIgaXMgaW4gYW4gaW5saW5lIGZ1bmN0aW9uIGJvZHkuCisJCQkJICogU2luY2UgbGluZW5vIHBvaW50cyBvbmUgb2YgdGhlIGxpbmVzCisJCQkJICogb2YgdGhlIGlubGluZSBmdW5jdGlvbiwgYmFzZWxpbmUgc2hvdWxkCisJCQkJICogYmUgdGhlIGVudHJ5IGxpbmUgb2YgdGhlIGlubGluZSBmdW5jdGlvbi4KKwkJCQkgKi8KKwkJCQl0bXAgPSBkd2FyZl9kaWVuYW1lKCZpbmRpZSk7CisJCQkJaWYgKHRtcCAmJgorCQkJCSAgICBkd2FyZl9kZWNsX2xpbmUoJnNwZGllLCAmYmFzZWxpbmUpID09IDApCisJCQkJCWZ1bmMgPSB0bXA7CiAJCQl9CiAJCX0KIAl9CiAKLQkvKiBGaW5kIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiAqLwotCWlmIChkaWVfZmluZF9yZWFsX3N1YnByb2dyYW0oJmN1ZGllLCAoRHdhcmZfQWRkcilhZGRyLCAmc3BkaWUpKSB7Ci0JCXRtcCA9IGR3YXJmX2RpZW5hbWUoJnNwZGllKTsKLQkJaWYgKCF0bXAgfHwgZHdhcmZfZW50cnlwYygmc3BkaWUsICZlYWRkcikgIT0gMCkKLQkJCWdvdG8gZW5kOworcG9zdDoKKwkvKiBNYWtlIGEgcmVsYXRpdmUgbGluZSBudW1iZXIgb3IgYW4gb2Zmc2V0ICovCisJaWYgKGxpbmVubykKKwkJcHB0LT5saW5lID0gbGluZW5vIC0gYmFzZWxpbmU7CisJZWxzZSBpZiAoZnVuYykKKwkJcHB0LT5vZmZzZXQgPSBhZGRyIC0gKHVuc2lnbmVkIGxvbmcpYmFzZWFkZHI7CiAKLQkJaWYgKHBwdC0+bGluZSkgewotCQkJaWYgKGRpZV9maW5kX2lubGluZWZ1bmMoJnNwZGllLCAoRHdhcmZfQWRkcilhZGRyLAotCQkJCQkJJmluZGllKSkgewotCQkJCS8qIGFkZHIgaW4gYW4gaW5saW5lIGZ1bmN0aW9uICovCi0JCQkJdG1wID0gZHdhcmZfZGllbmFtZSgmaW5kaWUpOwotCQkJCWlmICghdG1wKQotCQkJCQlnb3RvIGVuZDsKLQkJCQlyZXQgPSBkd2FyZl9kZWNsX2xpbmUoJmluZGllLCAmbGluZW5vKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGVhZGRyID09IGFkZHIpIHsJLyogRnVuY3Rpb24gZW50cnkgKi8KLQkJCQkJbGluZW5vID0gcHB0LT5saW5lOwotCQkJCQlyZXQgPSAwOwotCQkJCX0gZWxzZQotCQkJCQlyZXQgPSBkd2FyZl9kZWNsX2xpbmUoJnNwZGllLCAmbGluZW5vKTsKLQkJCX0KLQkJCWlmIChyZXQgPT0gMCkgewotCQkJCS8qIE1ha2UgYSByZWxhdGl2ZSBsaW5lIG51bWJlciAqLwotCQkJCXBwdC0+bGluZSAtPSBsaW5lbm87Ci0JCQkJZ290byBmb3VuZDsKLQkJCX0KLQkJfQotCQkvKiBXZSBkb24ndCBoYXZlIGEgbGluZSBudW1iZXIsIGxldCdzIHVzZSBvZmZzZXQgKi8KLQkJcHB0LT5vZmZzZXQgPSBhZGRyIC0gKHVuc2lnbmVkIGxvbmcpZWFkZHI7Ci1mb3VuZDoKLQkJcHB0LT5mdW5jdGlvbiA9IHN0cmR1cCh0bXApOworCS8qIER1cGxpY2F0ZSBzdHJpbmdzICovCisJaWYgKGZ1bmMpIHsKKwkJcHB0LT5mdW5jdGlvbiA9IHN0cmR1cChmdW5jKTsKIAkJaWYgKHBwdC0+ZnVuY3Rpb24gPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZW5kOwogCQl9Ci0JCWZvdW5kID0gdHJ1ZTsKIAl9Ci0KKwlpZiAoZm5hbWUpIHsKKwkJcHB0LT5maWxlID0gc3RyZHVwKGZuYW1lKTsKKwkJaWYgKHBwdC0+ZmlsZSA9PSBOVUxMKSB7CisJCQlpZiAocHB0LT5mdW5jdGlvbikgeworCQkJCWZyZWUocHB0LT5mdW5jdGlvbik7CisJCQkJcHB0LT5mdW5jdGlvbiA9IE5VTEw7CisJCQl9CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlbmQ7CisJCX0KKwl9CiBlbmQ6CiAJaWYgKGR3ZmwpCiAJCWR3ZmxfZW5kKGR3ZmwpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gZm91bmQgPyAxIDogMDsKKwlpZiAocmV0ID09IDAgJiYgKGZuYW1lIHx8IGZ1bmMpKQorCQlyZXQgPSAxOwkvKiBGb3VuZCBhIHBvaW50ICovCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg0MCw2ICsxODg2LDEwIEBACiAJc3RydWN0IGxpbmVfZmluZGVyICpsZiA9IHBhcmFtLT5kYXRhOwogCXN0cnVjdCBsaW5lX3JhbmdlICpsciA9IGxmLT5scjsKIAorCS8qIENoZWNrIGRlY2xhcmVkIGZpbGUgKi8KKwlpZiAobHItPmZpbGUgJiYgc3RydGFpbGNtcChsci0+ZmlsZSwgZHdhcmZfZGVjbF9maWxlKHNwX2RpZSkpKQorCQlyZXR1cm4gRFdBUkZfQ0JfT0s7CisKIAlpZiAoZHdhcmZfdGFnKHNwX2RpZSkgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKIAkgICAgZGllX2NvbXBhcmVfbmFtZShzcF9kaWUsIGxyLT5mdW5jdGlvbikpIHsKIAkJbGYtPmZuYW1lID0gZHdhcmZfZGVjbF9maWxlKHNwX2RpZSk7CkBAIC0xODkyLDYgKzE5NDIsNyBAQAogCWlmICghZGJnKSB7CiAJCXByX3dhcm5pbmcoIk5vIGRlYnVnIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB2bWxpbnV4IC0gIgogCQkJInBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0RFQlVHX0lORk89eS5cbiIpOworCQljbG9zZShmZCk7CS8qIFdpdGhvdXQgZHdmbF9lbmQoKSwgZmQgaXNuJ3QgY2xvc2VkLiAqLwogCQlyZXR1cm4gLUVCQURGOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCmluZGV4IGE5ZjJkN2UuLjk5YzcyMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKQEAgLTQ5OCwxMSArNDk4LDExIEBACiAJc3RydWN0IGNwdV9tYXAgKmNwdXMgPSBOVUxMOwogCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzID0gTlVMTDsKIAlQeU9iamVjdCAqcGNwdXMgPSBOVUxMLCAqcHRocmVhZHMgPSBOVUxMOwotCWludCBncm91cCA9IDAsIG92ZXJ3cml0ZSA9IDA7Ci0Jc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjcHVzIiwgInRocmVhZHMiLCAiZ3JvdXAiLCAib3ZlcndyaXRlIiwgTlVMTCwgTlVMTH07CisJaW50IGdyb3VwID0gMCwgaW5oZXJpdCA9IDA7CisJc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjcHVzIiwgInRocmVhZHMiLCAiZ3JvdXAiLCAiaW5oZXJpdCIsIE5VTEwsIE5VTEx9OwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9PaWkiLCBrd2xpc3QsCi0JCQkJCSAmcGNwdXMsICZwdGhyZWFkcywgJmdyb3VwLCAmb3ZlcndyaXRlKSkKKwkJCQkJICZwY3B1cywgJnB0aHJlYWRzLCAmZ3JvdXAsICZpbmhlcml0KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAocHRocmVhZHMgIT0gTlVMTCkKQEAgLTUxMSw3ICs1MTEsOCBAQAogCWlmIChwY3B1cyAhPSBOVUxMKQogCQljcHVzID0gKChzdHJ1Y3QgcHlyZl9jcHVfbWFwICopcGNwdXMpLT5jcHVzOwogCi0JaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMsIGdyb3VwLCBvdmVyd3JpdGUpIDwgMCkgeworCWV2c2VsLT5hdHRyLmluaGVyaXQgPSBpbmhlcml0OworCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBncm91cCkgPCAwKSB7CiAJCVB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNjc5LDcgKzY4MCw3IEBACiAJCQkJCSAmY3B1LCAmc2FtcGxlX2lkX2FsbCkpCiAJCXJldHVybiBOVUxMOwogCi0JZXZlbnQgPSBwZXJmX2V2bGlzdF9fcmVhZF9vbl9jcHUoZXZsaXN0LCBjcHUpOworCWV2ZW50ID0gcGVyZl9ldmxpc3RfX21tYXBfcmVhZChldmxpc3QsIGNwdSk7CiAJaWYgKGV2ZW50ICE9IE5VTEwpIHsKIAkJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCQlQeU9iamVjdCAqcHlldmVudCA9IHB5cmZfZXZlbnRfX25ldyhldmVudCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2V0dXAucHkgYi90b29scy9wZXJmL3V0aWwvc2V0dXAucHkKaW5kZXggZTI0ZmZhZC4uYmJjOTgyZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NldHVwLnB5CisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXR1cC5weQpAQCAtMSwxMyArMSwxOCBAQAogIyEvdXNyL2Jpbi9weXRob24yCiAKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwLCBFeHRlbnNpb24KK2Zyb20gb3MgaW1wb3J0IGdldGVudgorCitjZmxhZ3MgPSBbJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywgJy1Xbm8td3JpdGUtc3RyaW5ncyddCitjZmxhZ3MgKz0gZ2V0ZW52KCdDRkxBR1MnLCAnJykuc3BsaXQoKQogCiBwZXJmID0gRXh0ZW5zaW9uKCdwZXJmJywKIAkJICBzb3VyY2VzID0gWyd1dGlsL3B5dGhvbi5jJywgJ3V0aWwvY3R5cGUuYycsICd1dGlsL2V2bGlzdC5jJywKIAkJCSAgICAgJ3V0aWwvZXZzZWwuYycsICd1dGlsL2NwdW1hcC5jJywgJ3V0aWwvdGhyZWFkX21hcC5jJywKIAkJCSAgICAgJ3V0aWwvdXRpbC5jJywgJ3V0aWwveHlhcnJheS5jJywgJ3V0aWwvY2dyb3VwLmMnXSwKIAkJICBpbmNsdWRlX2RpcnMgPSBbJ3V0aWwvaW5jbHVkZSddLAotCQkgIGV4dHJhX2NvbXBpbGVfYXJncyA9IFsnLWZuby1zdHJpY3QtYWxpYXNpbmcnLCAnLVduby13cml0ZS1zdHJpbmdzJ10pCisJCSAgZXh0cmFfY29tcGlsZV9hcmdzID0gY2ZsYWdzLAorICAgICAgICAgICAgICAgICApCiAKIHNldHVwKG5hbWU9J3BlcmYnLAogICAgICAgdmVyc2lvbj0nMC4xJywKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwppbmRleCA4ZmMwYmQzLi5iOWE5ODVkYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwpAQCAtODUsNyArODUsNyBAQAogCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBzcGxpdHRpbmcgYSBzdHJpbmcgaW50byBhbiBhcmd2LWxpa2UgYXJyYXkuCi0gKiBvcmlnaW5hbHkgY29waWVkIGZyb20gbGliL2FyZ3Zfc3BsaXQuYworICogb3JpZ2luYWxseSBjb3BpZWQgZnJvbSBsaWIvYXJndl9zcGxpdC5jCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpza2lwX3NlcChjb25zdCBjaGFyICpjcCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCAxN2RmNzkzLi5mMDZjMTBmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC0xMTk2LDYgKzExOTYsOCBAQAogCQkJCWlmIChjdXJyX2RzbyA9PSBOVUxMKQogCQkJCQlnb3RvIG91dF9lbGZfZW5kOwogCQkJCWN1cnJfZHNvLT5rZXJuZWwgPSBzZWxmLT5rZXJuZWw7CisJCQkJY3Vycl9kc28tPmxvbmdfbmFtZSA9IHNlbGYtPmxvbmdfbmFtZTsKKwkJCQljdXJyX2Rzby0+bG9uZ19uYW1lX2xlbiA9IHNlbGYtPmxvbmdfbmFtZV9sZW47CiAJCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIoc3RhcnQsIGN1cnJfZHNvLAogCQkJCQkJICAgICBtYXAtPnR5cGUpOwogCQkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CkBAIC0xODQyLDYgKzE4NDQsNyBAQAogCWlmIChmZCA8IDApCiAJCXJldHVybiAtMTsKIAorCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCAoY2hhciAqKXZtbGludXgpOwogCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOwogCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBzeW1mc192bWxpbnV4LCBmZCwgZmlsdGVyLCAwLCAwKTsKIAljbG9zZShmZCk7CkBAIC0yNDAzLDYgKzI0MDYsOCBAQAogCWlmIChzeW1ib2xfY29uZi5pbml0aWFsaXplZCkKIAkJcmV0dXJuIDA7CiAKKwlzeW1ib2xfY29uZi5wcml2X3NpemUgPSBBTElHTihzeW1ib2xfY29uZi5wcml2X3NpemUsIHNpemVvZih1NjQpKTsKKwogCWVsZl92ZXJzaW9uKEVWX0NVUlJFTlQpOwogCWlmIChzeW1ib2xfY29uZi5zb3J0X2J5X25hbWUpCiAJCXN5bWJvbF9jb25mLnByaXZfc2l6ZSArPSAoc2l6ZW9mKHN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlKSAtCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9hbm5vdGF0ZS5jCmluZGV4IDhjMTdhODcuLjE1NjMzZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9hbm5vdGF0ZS5jCkBAIC0yNTYsMTAgKzI1Niw5IEBACiAJCQkgaW50IHJlZnJlc2gpCiB7CiAJc3RydWN0IG9iamR1bXBfbGluZSAqcG9zLCAqbjsKLQlzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTsKKwlzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXM7CiAJc3RydWN0IGFubm90YXRlX2Jyb3dzZXIgYnJvd3NlciA9IHsKIAkJLmIgPSB7Ci0JCQkuZW50cmllcyA9ICZub3Rlcy0+c3JjLT5zb3VyY2UsCiAJCQkucmVmcmVzaCA9IHVpX2Jyb3dzZXJfX2xpc3RfaGVhZF9yZWZyZXNoLAogCQkJLnNlZWsJID0gdWlfYnJvd3Nlcl9fbGlzdF9oZWFkX3NlZWssCiAJCQkud3JpdGUJID0gYW5ub3RhdGVfYnJvd3Nlcl9fd3JpdGUsCkBAIC0yODEsNiArMjgwLDggQEAKIAogCXVpX2hlbHBsaW5lX19wdXNoKCJQcmVzcyA8LSBvciBFU0MgdG8gZXhpdCIpOwogCisJbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmbm90ZXMtPnNyYy0+c291cmNlLCBub2RlKSB7CiAJCXN0cnVjdCBvYmpkdW1wX2xpbmVfcmJfbm9kZSAqcmJwb3M7CiAJCXNpemVfdCBsaW5lX2xlbiA9IHN0cmxlbihwb3MtPmxpbmUpOwpAQCAtMjkxLDYgKzI5Miw3IEBACiAJCXJicG9zLT5pZHggPSBicm93c2VyLmIubnJfZW50cmllcysrOwogCX0KIAorCWJyb3dzZXIuYi5lbnRyaWVzID0gJm5vdGVzLT5zcmMtPnNvdXJjZSwKIAlicm93c2VyLmIud2lkdGggKz0gMTg7IC8qIFBlcmNlbnRhZ2UgKi8KIAlyZXQgPSBhbm5vdGF0ZV9icm93c2VyX19ydW4oJmJyb3dzZXIsIGV2aWR4LCByZWZyZXNoKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCAmbm90ZXMtPnNyYy0+c291cmNlLCBub2RlKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCmluZGV4IDc5OGVmZGMuLjVkNzY3YzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCkBAIC04NTEsNyArODUxLDcgQEAKIAkJCWdvdG8gb3V0X2ZyZWVfc3RhY2s7CiAJCWNhc2UgJ2EnOgogCQkJaWYgKGJyb3dzZXItPnNlbGVjdGlvbiA9PSBOVUxMIHx8Ci0JCQkgICAgYnJvd3Nlci0+c2VsZWN0aW9uLT5tYXAgPT0gTlVMTCB8fAorCQkJICAgIGJyb3dzZXItPnNlbGVjdGlvbi0+c3ltID09IE5VTEwgfHwKIAkJCSAgICBicm93c2VyLT5zZWxlY3Rpb24tPm1hcC0+ZHNvLT5hbm5vdGF0ZV93YXJuZWQpCiAJCQkJY29udGludWU7CiAJCQlnb3RvIGRvX2Fubm90YXRlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS5jIGIvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS5jCmluZGV4IGQ5Njc4YTMuLjI2MThlZjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuYworKysgYi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqCiAgKiAgcGVyZm9ybWFuY2UKICAqCVBlcmZvcm1hbmNlIGlzIHBhcmFtb3VudC4KLSAqCVVud2lsbGluZyB0byBzYWNyYWZpY2UgYW55IHBlcmZvcm1hbmNlCisgKglVbndpbGxpbmcgdG8gc2FjcmlmaWNlIGFueSBwZXJmb3JtYW5jZQogICoJZm9yIHRoZSBzYWtlIG9mIGVuZXJneSBzYXZpbmcuIChoYXJkd2FyZSBkZWZhdWx0KQogICoKICAqICBub3JtYWwKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2V2ZW50ZmQuYyBiL3ZpcnQva3ZtL2V2ZW50ZmQuYwppbmRleCAzNjU2ODQ5Li43MzM1OGQyIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9ldmVudGZkLmMKKysrIGIvdmlydC9rdm0vZXZlbnRmZC5jCkBAIC05MCw3ICs5MCw3IEBACiAJICogV2Uga25vdyBubyBuZXcgZXZlbnRzIHdpbGwgYmUgc2NoZWR1bGVkIGF0IHRoaXMgcG9pbnQsIHNvIGJsb2NrCiAJICogdW50aWwgYWxsIHByZXZpb3VzbHkgb3V0c3RhbmRpbmcgZXZlbnRzIGhhdmUgY29tcGxldGVkCiAJICovCi0JZmx1c2hfd29yaygmaXJxZmQtPmluamVjdCk7CisJZmx1c2hfd29ya19zeW5jKCZpcnFmZC0+aW5qZWN0KTsKIAogCS8qCiAJICogSXQgaXMgbm93IHNhZmUgdG8gcmVsZWFzZSB0aGUgb2JqZWN0J3MgcmVzb3VyY2VzCkBAIC01NzgsNyArNTc4LDcgQEAKIAogCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAKLQkvKiBWZXJpZnkgdGhhdCB0aGVyZSBpc250IGEgbWF0Y2ggYWxyZWFkeSAqLworCS8qIFZlcmlmeSB0aGF0IHRoZXJlIGlzbid0IGEgbWF0Y2ggYWxyZWFkeSAqLwogCWlmIChpb2V2ZW50ZmRfY2hlY2tfY29sbGlzaW9uKGt2bSwgcCkpIHsKIAkJcmV0ID0gLUVFWElTVDsKIAkJZ290byB1bmxvY2tfZmFpbDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDU1NmUzZWYuLjYzMzA2NTMgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTAzNyw2ICsxMDM3LDE3IEBACiAJcmV0dXJuIGZhdWx0X3BmbjsKIH0KIAoraW50IGdldF91c2VyX3BhZ2Vfbm93YWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgd3JpdGUsIHN0cnVjdCBwYWdlICoqcGFnZSkKK3sKKwlpbnQgZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9OT1dBSVQgfCBGT0xMX0hXUE9JU09OIHwgRk9MTF9HRVQ7CisKKwlpZiAod3JpdGUpCisJCWZsYWdzIHw9IEZPTExfV1JJVEU7CisKKwlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyh0c2ssIG1tLCBzdGFydCwgMSwgZmxhZ3MsIHBhZ2UsIE5VTEwsIE5VTEwpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBjaGVja191c2VyX3BhZ2VfaHdwb2lzb24odW5zaWduZWQgbG9uZyBhZGRyKQogewogCWludCByYywgZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9IV1BPSVNPTiB8IEZPTExfV1JJVEU7CkBAIC0xMDcwLDcgKzEwODEsMTQgQEAKIAkJaWYgKHdyaXRhYmxlKQogCQkJKndyaXRhYmxlID0gd3JpdGVfZmF1bHQ7CiAKLQkJbnBhZ2VzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChhZGRyLCAxLCB3cml0ZV9mYXVsdCwgcGFnZSk7CisJCWlmIChhc3luYykgeworCQkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQkJbnBhZ2VzID0gZ2V0X3VzZXJfcGFnZV9ub3dhaXQoY3VycmVudCwgY3VycmVudC0+bW0sCisJCQkJCQkgICAgIGFkZHIsIHdyaXRlX2ZhdWx0LCBwYWdlKTsKKwkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCX0gZWxzZQorCQkJbnBhZ2VzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChhZGRyLCAxLCB3cml0ZV9mYXVsdCwKKwkJCQkJCSAgICAgcGFnZSk7CiAKIAkJLyogbWFwIHJlYWQgZmF1bHQgYXMgd3JpdGFibGUgaWYgcG9zc2libGUgKi8KIAkJaWYgKHVubGlrZWx5KCF3cml0ZV9mYXVsdCkgJiYgbnBhZ2VzID09IDEpIHsKQEAgLTEwOTMsNyArMTExMSw4IEBACiAJCQlyZXR1cm4gZ2V0X2ZhdWx0X3BmbigpOwogCiAJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJaWYgKGNoZWNrX3VzZXJfcGFnZV9od3BvaXNvbihhZGRyKSkgeworCQlpZiAobnBhZ2VzID09IC1FSFdQT0lTT04gfHwKKwkJCSghYXN5bmMgJiYgY2hlY2tfdXNlcl9wYWdlX2h3cG9pc29uKGFkZHIpKSkgewogCQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJCWdldF9wYWdlKGh3cG9pc29uX3BhZ2UpOwogCQkJcmV0dXJuIHBhZ2VfdG9fcGZuKGh3cG9pc29uX3BhZ2UpOwo=