ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGY1NTNmOGMuLmEzNDc1MjAgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMjIxMSw2ICsyMjExLDE1IEBACiBTOiAoYWRkcmVzcyBhdmFpbGFibGUgb24gcmVxdWVzdCkKIFM6IFVTQQogCitOOiBJYW4gTWNEb25hbGQKK0U6IGlhbTRAY3Mud2Fpa2F0by5hYy5uegorRTogaW1jZG56bEBnbWFpbC5jb20KK1c6IGh0dHA6Ly93YW5kLm5ldC5uei9+aWFtNAorVzogaHR0cDovL2ltY2RuemwuYmxvZ3Nwb3QuY29tCitEOiBEQ0NQLCBDQ0lEMworUzogSGFtaWx0b24KK1M6IE5ldyBaZWFsYW5kCisKIE46IFBhdHJpY2sgTWNIYXJkeQogRToga2FiZXJAdHJhc2gubmV0CiBQOiAxMDI0RC8xMjE1NUU4MCBCMTI4IDdERTYgRkYwQSBDMkIyIDQ4QkUgIEFCNEMgQzlENCA5NjRFIDEyMTUgNUU4MApAQCAtMjI0NiwxOSArMjI1NSwxMiBAQAogUzogR2VybWFueQogCiBOOiBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8KLUU6IGFjbWVAY29uZWN0aXZhLmNvbS5icgotRTogYWNtZUBrZXJuZWwub3JnCi1FOiBhY21lQGdudS5vcmcKLVc6IGh0dHA6Ly9iYXphcjIuY29uZWN0aXZhLmNvbS5ici9+YWNtZQotVzogaHR0cDovL2Fkdm9nYXRvLm9yZy9wZXJzb24vYWNtZQorRTogYWNtZUBtYW5kcml2YS5jb20KK0U6IGFjbWVAZ2hvc3Rwcm90b2NvbHMubmV0CitXOiBodHRwOi8vb29wcy5naG9zdHByb3RvY29scy5uZXQ6ODEvYmxvZy8KIFA6IDEwMjRELzkyMjRERjAxIEQ1REYgRTNCQiBFM0M4IEJDQkIgRjhBRCAgODQxQSBCNkFCIDQ2ODEgOTIyNCBERjAxCi1EOiB3YW5yb3V0ZXIgaGFja2luZwotRDogbWlzYyBNYWtlZmlsZSwgQ29uZmlnLmluLCBkcml2ZXJzIGFuZCBuZXR3b3JrIHN0YWNrcyBmaXhlcwotRDogSVBYICYgTExDIG5ldHdvcmsgc3RhY2tzIG1haW50YWluZXIKLUQ6IEN5Y2xvbSAyWCBzeW5jaHJvbm91cyBjYXJkIGRyaXZlcgotRDogd2wzNTAxIFBDTUNJQSB3aXJlbGVzcyBjYXJkIGRyaXZlcgotRDogaTE4biBmb3IgbWluaWNvbSwgbmV0LXRvb2xzLCB1dGlsLWxpbnV4LCBmZXRjaG1haWwsIGV0YwotUzogQ29uZWN0aXZhIFMuQS4KK0Q6IElQWCwgTExDLCBEQ0NQLCBjeWMyeCwgd2wzNTAxX2NzLCBuZXQvIGhhY2tzCitTOiBNYW5kcml2YQogUzogUi4gVG9jYW50aW5zLCA4OSAtIENyaXN0byBSZWkKIFM6IDgwMDUwLTQzMCAtIEN1cml0aWJhIC0gUGFyYW7hCiBTOiBCcmF6aWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCmluZGV4IDIyZTVmOTAuLmViN2RiM2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQpAQCAtNDEwLDcgKzQxMCwyNiBAQAogUHJpbnRpbmcgbnVtYmVycyBpbiBwYXJlbnRoZXNlcyAoJWQpIGFkZHMgbm8gdmFsdWUgYW5kIHNob3VsZCBiZSBhdm9pZGVkLgogCiAKLQkJQ2hhcHRlciAxMzogUmVmZXJlbmNlcworCQlDaGFwdGVyIDEzOiBBbGxvY2F0aW5nIG1lbW9yeQorCitUaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOgora21hbGxvYygpLCBremFsbG9jKCksIGtjYWxsb2MoKSwgYW5kIHZtYWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJCitkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZW0uCisKK1RoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzoKKworCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIC4uLik7CisKK1RoZSBhbHRlcm5hdGl2ZSBmb3JtIHdoZXJlIHN0cnVjdCBuYW1lIGlzIHNwZWxsZWQgb3V0IGh1cnRzIHJlYWRhYmlsaXR5IGFuZAoraW50cm9kdWNlcyBhbiBvcHBvcnR1bml0eSBmb3IgYSBidWcgd2hlbiB0aGUgcG9pbnRlciB2YXJpYWJsZSB0eXBlIGlzIGNoYW5nZWQKK2J1dCB0aGUgY29ycmVzcG9uZGluZyBzaXplb2YgdGhhdCBpcyBwYXNzZWQgdG8gYSBtZW1vcnkgYWxsb2NhdG9yIGlzIG5vdC4KKworQ2FzdGluZyB0aGUgcmV0dXJuIHZhbHVlIHdoaWNoIGlzIGEgdm9pZCBwb2ludGVyIGlzIHJlZHVuZGFudC4gVGhlIGNvbnZlcnNpb24KK2Zyb20gdm9pZCBwb2ludGVyIHRvIGFueSBvdGhlciBwb2ludGVyIHR5cGUgaXMgZ3VhcmFudGVlZCBieSB0aGUgQyBwcm9ncmFtbWluZworbGFuZ3VhZ2UuCisKKworCQlDaGFwdGVyIDE0OiBSZWZlcmVuY2VzCiAKIFRoZSBDIFByb2dyYW1taW5nIExhbmd1YWdlLCBTZWNvbmQgRWRpdGlvbgogYnkgQnJpYW4gVy4gS2VybmlnaGFuIGFuZCBEZW5uaXMgTS4gUml0Y2hpZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtaGFja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKaW5kZXggNjM2N2JiYS4uNTgyMDMyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKQEAgLTExMDUsNyArMTEwNSw3IEBACiAgICAgPC9saXN0aXRlbT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgotICAgICAgRnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncyAoX19mdW5jX18pLgorICAgICAgRnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncyAoX19GVU5DVElPTl9fKS4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQgYi9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dAppbmRleCBjOGY5YTczLi42OGE3MTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dApAQCAtMTcsNyArMTcsOSBAQAogCSogU0EgUDYwMAogCSogU0EgUDgwMAogCSogU0EgRTQwMAotCSogU0EgRTMwMAorCSogU0EgUDQwMGkKKwkqIFNBIEUyMDAKKwkqIFNBIEUyMDBpCiAKIElmIG5vZGVzIGFyZSBub3QgYWxyZWFkeSBjcmVhdGVkIGluIHRoZSAvZGV2L2NjaXNzIGRpcmVjdG9yeSwgcnVuIGFzIHJvb3Q6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWxsX3JidS50eHQKaW5kZXggYmNmYTVjMy4uOTVkN2Y2MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZWxsX3JidS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZWxsX3JidS50eHQKQEAgLTEzLDYgKzEzLDggQEAKIGFuZCBub3RlYm9va3MgKHN0YXJ0aW5nIGZyb20gdGhvc2Ugc29sZCBpbiAyMDA1KS4KIFBsZWFzZSBnbyB0byAgaHR0cDovL3N1cHBvcnQuZGVsbC5jb20gcmVnaXN0ZXIgYW5kIHlvdSBjYW4gZmluZCBpbmZvIG9uCiBPcGVuTWFuYWdlIGFuZCBEZWxsIFVwZGF0ZSBwYWNrYWdlcyAoRFVQKS4KK0xpYnNtYmlvcyBjYW4gYWxzbyBiZSB1c2VkIHRvIHVwZGF0ZSBCSU9TIG9uIERlbGwgc3lzdGVtcyBnbyB0bworaHR0cDovL2xpbnV4LmRlbGwuY29tL2xpYnNtYmlvcy8gZm9yIGRldGFpbHMuCiAKIERlbGxfUkJVIGRyaXZlciBzdXBwb3J0cyBCSU9TIHVwZGF0ZSB1c2luZyB0aGUgbW9uaWxvdGhpYyBpbWFnZSBhbmQgcGFja2V0aXplZAogaW1hZ2UgbWV0aG9kcy4gSW4gY2FzZSBvZiBtb25pb2xpdGhpYyB0aGUgZHJpdmVyIGFsbG9jYXRlcyBhIGNvbnRpZ3VvdXMgY2h1bmsKQEAgLTIyLDggKzI0LDggQEAKIG1haW50YWlucyBhIGxpbmsgbGlzdCBvZiBwYWNrZXRzIGZvciByZWFkaW5nIHRoZW0gYmFjay4KIElmIHRoZSBkZWxsX3JidSBkcml2ZXIgaXMgdW5sb2FkZWQgYWxsIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkLgogCi1UaGUgcmJ1IGRyaXZlciBuZWVkcyB0byBoYXZlIGFuIGFwcGxpY2F0aW9uIHdoaWNoIHdpbGwgaW5mb3JtIHRoZSBCSU9TIHRvCi1lbmFibGUgdGhlIHVwZGF0ZSBpbiB0aGUgbmV4dCBzeXN0ZW0gcmVib290LgorVGhlIHJidSBkcml2ZXIgbmVlZHMgdG8gaGF2ZSBhbiBhcHBsaWNhdGlvbiAoYXMgbWVudGlvbmVkIGFib3ZlKXdoaWNoIHdpbGwKK2luZm9ybSB0aGUgQklPUyB0byBlbmFibGUgdGhlIHVwZGF0ZSBpbiB0aGUgbmV4dCBzeXN0ZW0gcmVib290LgogCiBUaGUgdXNlciBzaG91bGQgbm90IHVubG9hZCB0aGUgcmJ1IGRyaXZlciBhZnRlciBkb3dubG9hZGluZyB0aGUgQklPUyBpbWFnZQogb3IgdXBkYXRpbmcuCkBAIC00Miw5ICs0NCwxMSBAQAogb2YgY29udGlndW91cyBtZW1vcnkgYW5kIHRoZSBCSU9TIGltYWdlIGlzIHNjYXR0ZXJlZCBpbiB0aGVzZSBwYWNrZXRzLgogCiBCeSBkZWZhdWx0IHRoZSBkcml2ZXIgdXNlcyBtb25vbGl0aGljIG1lbW9yeSBmb3IgdGhlIHVwZGF0ZSB0eXBlLiBUaGlzIGNhbiBiZQotY2hhbmdlZCB0byBjb250aWd1b3VzIGR1cmluZyB0aGUgZHJpdmVyIGxvYWQgdGltZSBieSBzcGVjaWZ5aW5nIHRoZSBsb2FkCitjaGFuZ2VkIHRvIHBhY2tldHMgZHVyaW5nIHRoZSBkcml2ZXIgbG9hZCB0aW1lIGJ5IHNwZWNpZnlpbmcgdGhlIGxvYWQKIHBhcmFtZXRlciBpbWFnZV90eXBlPXBhY2tldC4gIFRoaXMgY2FuIGFsc28gYmUgY2hhbmdlZCBsYXRlciBhcyBiZWxvdwogZWNobyBwYWNrZXQgPiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZGVsbF9yYnUvaW1hZ2VfdHlwZQorQWxzbyBlY2hvaW5nIGVpdGhlciBtb25vICxwYWNrZXQgb3IgaW5pdCBpbiB0byBpbWFnZV90eXBlIHdpbGwgZnJlZSB1cCB0aGUKK21lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4KIAogRG8gdGhlIHN0ZXBzIGJlbG93IHRvIGRvd25sb2FkIHRoZSBCSU9TIGltYWdlLgogMSkgZWNobyAxID4gL3N5cy9jbGFzcy9maXJtd2FyZS9kZWxsX3JidS9sb2FkaW5nCkBAIC01Myw5ICs1NywxMyBAQAogCiBUaGUgL3N5cy9jbGFzcy9maXJtd2FyZS9kZWxsX3JidS8gZW50cmllcyB3aWxsIHJlbWFpbiB0aWxsIHRoZSBmb2xsb3dpbmcgaXMKIGRvbmUuCi1lY2hvIC0xID4gL3N5cy9jbGFzcy9maXJtd2FyZS9kZWxsX3JidS9sb2FkaW5nCi0KK2VjaG8gLTEgPiAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1L2xvYWRpbmcuCiBVbnRpbCB0aGlzIHN0ZXAgaXMgY29tcGxldGVkIHRoZSBkcml2ciBjYW5ub3QgYmUgdW5sb2FkZWQuCitJZiBhbiB1c2VyIGJ5IGFjY2lkZW50IGV4ZWN1dGVzIHN0ZXBzIDEgYW5kIDMgYWJvdmUgd2l0aG91dCBleGVjdXRpbmcgc3RlcCAyOworaXQgd2lsbCBtYWtlIHRoZSAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1LyBlbnRyaWVzIHRvIGRpc2FwcGVhci4KK1RoZSBlbnRyaWVzIGNhbiBiZSByZWNyZWF0ZWQgYnkgZG9pbmcgdGhlIGZvbGxvd2luZworZWNobyBpbml0ID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2RlbGxfcmJ1L2ltYWdlX3R5cGUKK05PVEU6IGVjaG9pbmcgaW5pdCBpbiBpbWFnZV90eXBlIGRvZXMgbm90IGNoYW5nZSBpdCBvcmlnaW5hbCB2YWx1ZS4KIAogQWxzbyB0aGUgZHJpdmVyIHByb3ZpZGVzIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9kZWxsX3JidS9kYXRhIHJlYWRvbmx5IGZpbGUgdG8KIHJlYWQgYmFjayB0aGUgaW1hZ2UgZG93bmxvYWRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gY2FzZSBvZiBwYWNrZXQgdXBkYXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgppbmRleCA5NmJlYTI3Li4yNGFkZmU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCisrKyBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKQEAgLTU1LDYgKzU1LDcgQEAKIGFpY2FzbQogYWljZGIuaCoKIGFzbQorYXNtLW9mZnNldHMuKgogYXNtX29mZnNldHMuKgogYXV0b2NvbmYuaCoKIGJib290c2VjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDc4NGUwOGMuLmI2NzE4OWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTE3LDE1ICsxNyw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0Oglpb19yZW1hcF9wYWdlX3JhbmdlKCkgKG1hY3JvIG9yIGZ1bmN0aW9uKQotV2hlbjoJU2VwdGVtYmVyIDIwMDUKLVdoeToJUmVwbGFjZWQgYnkgaW9fcmVtYXBfcGZuX3JhbmdlKCkgd2hpY2ggYWxsb3dzIG1vcmUgbWVtb3J5IHNwYWNlCi0JYWRkcmVzc2FiaWx0eSAoYnkgdXNpbmcgYSBwZm4pIGFuZCBzdXBwb3J0cyBzcGFyYyAmIHNwYXJjNjQKLQlpb3NwYWNlIGFzIHBhcnQgb2YgdGhlIHBmbi4KLVdobzoJUmFuZHkgRHVubGFwIDxyZGR1bmxhcEBvc2RsLm9yZz4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CVJBVyBkcml2ZXIgKENPTkZJR19SQVdfRFJJVkVSKQogV2hlbjoJRGVjZW1iZXIgMjAwNQogV2h5OglkZWNsYXJlZCBvYnNvbGV0ZSBzaW5jZSBrZXJuZWwgMi42LjMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmVsYXlmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5ZnMudHh0CmluZGV4IGQyNGUxYjAuLmQ4MDNhYmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmVsYXlmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yZWxheWZzLnR4dApAQCAtMTUsNyArMTUsNyBAQAogCiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRhIGxvZ2dlZCBpbnRvIHRoZSBjaGFubmVsIGJ1ZmZlcnMgaXMgY29tcGxldGVseQogdXAgdG8gdGhlIHJlbGF5ZnMgY2xpZW50OyByZWxheWZzIGRvZXMgaG93ZXZlciBwcm92aWRlIGhvb2tzIHdoaWNoCi1hbGxvdyBjbGllbnRzIHRvIGltcG9zZSBzb21lIHN0dWN0dXJlIG9uIHRoZSBidWZmZXIgZGF0YS4gIE5vciBkb2VzCithbGxvdyBjbGllbnRzIHRvIGltcG9zZSBzb21lIHN0cnVjdHVyZSBvbiB0aGUgYnVmZmVyIGRhdGEuICBOb3IgZG9lcwogcmVsYXlmcyBpbXBsZW1lbnQgYW55IGZvcm0gb2YgZGF0YSBmaWx0ZXJpbmcgLSB0aGlzIGFsc28gaXMgbGVmdCB0bwogdGhlIGNsaWVudC4gIFRoZSBwdXJwb3NlIGlzIHRvIGtlZXAgcmVsYXlmcyBhcyBzaW1wbGUgYXMgcG9zc2libGUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWE2NC9tY2EudHh0IGIvRG9jdW1lbnRhdGlvbi9pYTY0L21jYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxY2M2YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9tY2EudHh0CkBAIC0wLDAgKzEsMTk0IEBACitBbiBhZC1ob2MgY29sbGVjdGlvbiBvZiBub3RlcyBvbiBJQTY0IE1DQSBhbmQgSU5JVCBwcm9jZXNzaW5nLiAgRmVlbAorZnJlZSB0byB1cGRhdGUgaXQgd2l0aCBub3RlcyBhYm91dCBhbnkgYXJlYSB0aGF0IGlzIG5vdCBjbGVhci4KKworLS0tCisKK01DQS9JTklUIGFyZSBjb21wbGV0ZWx5IGFzeW5jaHJvbm91cy4gIFRoZXkgY2FuIG9jY3VyIGF0IGFueSB0aW1lLCB3aGVuCit0aGUgT1MgaXMgaW4gYW55IHN0YXRlLiAgSW5jbHVkaW5nIHdoZW4gb25lIG9mIHRoZSBjcHVzIGlzIGFscmVhZHkKK2hvbGRpbmcgYSBzcGlubG9jay4gIFRyeWluZyB0byBnZXQgYW55IGxvY2sgZnJvbSBNQ0EvSU5JVCBzdGF0ZSBpcworYXNraW5nIGZvciBkZWFkbG9jay4gIEFsc28gdGhlIHN0YXRlIG9mIHN0cnVjdHVyZXMgdGhhdCBhcmUgcHJvdGVjdGVkCitieSBsb2NrcyBpcyBpbmRldGVybWluYXRlLCBpbmNsdWRpbmcgbGlua2VkIGxpc3RzLgorCistLS0KKworVGhlIGNvbXBsaWNhdGVkIGlhNjQgTUNBIHByb2Nlc3MuICBBbGwgb2YgdGhpcyBpcyBtYW5kYXRlZCBieSBJbnRlbCdzCitzcGVjaWZpY2F0aW9uIGZvciBpYTY0IFNBTCwgZXJyb3IgcmVjb3ZlcnkgYW5kIGFuZCB1bndpbmQsIGl0IGlzIG5vdCBhcworaWYgd2UgaGF2ZSBhIGNob2ljZSBoZXJlLgorCisqIE1DQSBvY2N1cnMgb24gb25lIGNwdSwgdXN1YWxseSBkdWUgdG8gYSBkb3VibGUgYml0IG1lbW9yeSBlcnJvci4KKyAgVGhpcyBpcyB0aGUgbW9uYXJjaCBjcHUuCisKKyogU0FMIHNlbmRzIGFuIE1DQSByZW5kZXp2b3VzIGludGVycnVwdCAod2hpY2ggaXMgYSBub3JtYWwgaW50ZXJydXB0KQorICB0byBhbGwgdGhlIG90aGVyIGNwdXMsIHRoZSBzbGF2ZXMuCisKKyogU2xhdmUgY3B1cyB0aGF0IHJlY2VpdmUgdGhlIE1DQSBpbnRlcnJ1cHQgY2FsbCBkb3duIGludG8gU0FMLCB0aGV5CisgIGVuZCB1cCBzcGlubmluZyBkaXNhYmxlZCB3aGlsZSB0aGUgTUNBIGlzIGJlaW5nIHNlcnZpY2VkLgorCisqIElmIGFueSBzbGF2ZSBjcHUgd2FzIGFscmVhZHkgc3Bpbm5pbmcgZGlzYWJsZWQgd2hlbiB0aGUgTUNBIG9jY3VycmVkCisgIHRoZW4gaXQgY2Fubm90IHNlcnZpY2UgdGhlIE1DQSBpbnRlcnJ1cHQuICBTQUwgd2FpdHMgfjIwIHNlY29uZHMgdGhlbgorICBzZW5kcyBhbiB1bm1hc2thYmxlIElOSVQgZXZlbnQgdG8gdGhlIHNsYXZlIGNwdXMgdGhhdCBoYXZlIG5vdAorICBhbHJlYWR5IHJlbmRlenZvdXNlZC4KKworKiBCZWNhdXNlIE1DQS9JTklUIGNhbiBiZSBkZWxpdmVyZWQgYXQgYW55IHRpbWUsIGluY2x1ZGluZyB3aGVuIHRoZSBjcHUKKyAgaXMgZG93biBpbiBQQUwgaW4gcGh5c2ljYWwgbW9kZSwgdGhlIHJlZ2lzdGVycyBhdCB0aGUgdGltZSBvZiB0aGUKKyAgZXZlbnQgYXJlIF9jb21wbGV0ZWx5XyB1bmRlZmluZWQuICBJbiBwYXJ0aWN1bGFyIHRoZSBNQ0EvSU5JVAorICBoYW5kbGVycyBjYW5ub3QgcmVseSBvbiB0aGUgdGhyZWFkIHBvaW50ZXIsIFBBTCBwaHlzaWNhbCBtb2RlIGNhbgorICAoYW5kIGRvZXMpIG1vZGlmeSBUUC4gIEl0IGlzIGFsbG93ZWQgdG8gZG8gdGhhdCBhcyBsb25nIGFzIGl0IHJlc2V0cworICBUUCBvbiByZXR1cm4uICBIb3dldmVyIE1DQS9JTklUIGV2ZW50cyBleHBvc2UgdXMgdG8gdGhlc2UgUEFMCisgIGludGVybmFsIFRQIGNoYW5nZXMuICBIZW5jZSBjdXJyX3Rhc2soKS4KKworKiBJZiBhbiBNQ0EvSU5JVCBldmVudCBvY2N1cnMgd2hpbGUgdGhlIGtlcm5lbCB3YXMgcnVubmluZyAobm90IHVzZXIKKyAgc3BhY2UpIGFuZCB0aGUga2VybmVsIGhhcyBjYWxsZWQgUEFMIHRoZW4gdGhlIE1DQS9JTklUIGhhbmRsZXIgY2Fubm90CisgIGFzc3VtZSB0aGF0IHRoZSBrZXJuZWwgc3RhY2sgaXMgaW4gYSBmaXQgc3RhdGUgdG8gYmUgdXNlZC4gIE1haW5seQorICBiZWNhdXNlIFBBTCBtYXkgb3IgbWF5IG5vdCBtYWludGFpbiB0aGUgc3RhY2sgcG9pbnRlciBpbnRlcm5hbGx5LgorICBCZWNhdXNlIHRoZSBNQ0EvSU5JVCBoYW5kbGVycyBjYW5ub3QgdHJ1c3QgdGhlIGtlcm5lbCBzdGFjaywgdGhleQorICBoYXZlIHRvIHVzZSB0aGVpciBvd24sIHBlci1jcHUgc3RhY2tzLiAgVGhlIE1DQS9JTklUIHN0YWNrcyBhcmUKKyAgcHJlZm9ybWF0dGVkIHdpdGgganVzdCBlbm91Z2ggdGFzayBzdGF0ZSB0byBsZXQgdGhlIHJlbGV2YW50IGhhbmRsZXJzCisgIGRvIHRoZWlyIGpvYi4KKworKiBVbmxpa2UgbW9zdCBvdGhlciBhcmNoaXRlY3R1cmVzLCB0aGUgaWE2NCBzdHJ1Y3QgdGFzayBpcyBlbWJlZGRlZCBpbgorICB0aGUga2VybmVsIHN0YWNrWzFdLiAgU28gc3dpdGNoaW5nIHRvIGEgbmV3IGtlcm5lbCBzdGFjayBtZWFucyB0aGF0CisgIHdlIHN3aXRjaCB0byBhIG5ldyB0YXNrIGFzIHdlbGwuICBCZWNhdXNlIHZhcmlvdXMgYml0cyBvZiB0aGUga2VybmVsCisgIGFzc3VtZSB0aGF0IGN1cnJlbnQgcG9pbnRzIGludG8gdGhlIHN0cnVjdCB0YXNrLCBzd2l0Y2hpbmcgdG8gYSBuZXcKKyAgc3RhY2sgYWxzbyBtZWFucyBhIG5ldyB2YWx1ZSBmb3IgY3VycmVudC4KKworKiBPbmNlIGFsbCBzbGF2ZXMgaGF2ZSByZW5kZXp2b3VzZWQgYW5kIGFyZSBzcGlubmluZyBkaXNhYmxlZCwgdGhlCisgIG1vbmFyY2ggaXMgZW50ZXJlZC4gIFRoZSBtb25hcmNoIG5vdyB0cmllcyB0byBkaWFnbm9zZSB0aGUgcHJvYmxlbQorICBhbmQgZGVjaWRlIGlmIGl0IGNhbiByZWNvdmVyIG9yIG5vdC4KKworKiBQYXJ0IG9mIHRoZSBtb25hcmNoJ3Mgam9iIGlzIHRvIGxvb2sgYXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUgb3RoZXIKKyAgdGFza3MuICBUaGUgb25seSB3YXkgdG8gZG8gdGhhdCBvbiBpYTY0IGlzIHRvIGNhbGwgdGhlIHVud2luZGVyLAorICBhcyBtYW5kYXRlZCBieSBJbnRlbC4KKworKiBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSB1bndpbmQgZGVwZW5kcyBvbiB3aGV0aGVyIGEgdGFzayBpcworICBydW5uaW5nIG9yIG5vdC4gIFRoYXQgaXMsIHdoZXRoZXIgaXQgaXMgb24gYSBjcHUgb3IgaXMgYmxvY2tlZC4gIFRoZQorICBtb25hcmNoIGhhcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0YXNrIGlzIG9uIGEgY3B1IGJlZm9yZSBpdAorICBrbm93cyBob3cgdG8gc3RhcnQgdW53aW5kaW5nIGl0LiAgVGhlIHRhc2tzIHRoYXQgcmVjZWl2ZWQgYW4gTUNBIG9yCisgIElOSVQgZXZlbnQgYXJlIG5vIGxvbmdlciBydW5uaW5nLCB0aGV5IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYmxvY2tlZAorICB0YXNrcy4gIEJ1dCAoYW5kIGl0cyBhIGJpZyBidXQpLCB0aGUgY3B1cyB0aGF0IHJlY2VpdmVkIHRoZSBNQ0EKKyAgcmVuZGV6dm91cyBpbnRlcnJ1cHQgYXJlIHN0aWxsIHJ1bm5pbmcgb24gdGhlaXIgbm9ybWFsIGtlcm5lbCBzdGFja3MhCisKKyogVG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVzZSB0d28gY2FzZXMsIHRoZSBtb25hcmNoIG11c3Qga25vdyB3aGljaAorICB0YXNrcyBhcmUgb24gYSBjcHUgYW5kIHdoaWNoIGFyZSBub3QuICBIZW5jZSBlYWNoIHNsYXZlIGNwdSB0aGF0CisgIHN3aXRjaGVzIHRvIGFuIE1DQS9JTklUIHN0YWNrLCByZWdpc3RlcnMgaXRzIG5ldyBzdGFjayB1c2luZworICBzZXRfY3Vycl90YXNrKCksIHNvIHRoZSBtb25hcmNoIGNhbiB0ZWxsIHRoYXQgdGhlIF9vcmlnaW5hbF8gdGFzayBpcworICBubyBsb25nZXIgcnVubmluZyBvbiB0aGF0IGNwdS4gIFRoYXQgZ2l2ZXMgdXMgYSBkZWNlbnQgY2hhbmNlIG9mCisgIGdldHRpbmcgYSB2YWxpZCBiYWNrdHJhY2Ugb2YgdGhlIF9vcmlnaW5hbF8gdGFzay4KKworKiBNQ0EvSU5JVCBjYW4gYmUgbmVzdGVkLCB0byBhIGRlcHRoIG9mIDIgb24gYW55IGNwdS4gIEluIHRoZSBjYXNlIG9mIGEKKyAgbmVzdGVkIGVycm9yLCB3ZSB3YW50IGRpYWdub3N0aWNzIG9uIHRoZSBNQ0EvSU5JVCBoYW5kbGVyIHRoYXQKKyAgZmFpbGVkLCBub3Qgb24gdGhlIHRhc2sgdGhhdCB3YXMgb3JpZ2luYWxseSBydW5uaW5nLiAgQWdhaW4gdGhpcworICByZXF1aXJlcyBzZXRfY3Vycl90YXNrKCkgc28gdGhlIE1DQS9JTklUIGhhbmRsZXJzIGNhbiByZWdpc3RlciB0aGVpcgorICBvd24gc3RhY2sgYXMgcnVubmluZyBvbiB0aGF0IGNwdS4gIFRoZW4gYSByZWN1cnNpdmUgZXJyb3IgZ2V0cyBhCisgIHRyYWNlIG9mIHRoZSBmYWlsaW5nIGhhbmRsZXIncyAidGFzayIuCisKK1sxXSBNeSAoS2VpdGggT3dlbnMpIG9yaWdpbmFsIGRlc2lnbiBjYWxsZWQgZm9yIGlhNjQgdG8gc2VwYXJhdGUgaXRzCisgICAgc3RydWN0IHRhc2sgYW5kIHRoZSBrZXJuZWwgc3RhY2tzLiAgVGhlbiB0aGUgTUNBL0lOSVQgZGF0YSB3b3VsZCBiZQorICAgIGNoYWluZWQgc3RhY2tzIGxpa2UgaTM4NiBpbnRlcnJ1cHQgc3RhY2tzLiAgQnV0IHRoYXQgcmVxdWlyZWQKKyAgICByYWRpY2FsIHN1cmdlcnkgb24gdGhlIHJlc3Qgb2YgaWE2NCwgcGx1cyBleHRyYSBoYXJkIHdpcmVkIFRMQgorICAgIGVudHJpZXMgd2l0aCBpdHMgYXNzb2NpYXRlZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4gIERhdmlkCisgICAgTW9zYmVyZ2VyIHZldG9lZCB0aGF0IGFwcHJvYWNoLiAgV2hpY2ggbWVhbnQgdGhhdCBzZXBhcmF0ZSBrZXJuZWwKKyAgICBzdGFja3MgbWVhbnQgc2VwYXJhdGUgInRhc2tzIiBmb3IgdGhlIE1DQS9JTklUIGhhbmRsZXJzLgorCistLS0KKworSU5JVCBpcyBsZXNzIGNvbXBsaWNhdGVkIHRoYW4gTUNBLiAgUHJlc3NpbmcgdGhlIG5taSBidXR0b24gb3IgdXNpbmcKK3RoZSBlcXVpdmFsZW50IGNvbW1hbmQgb24gdGhlIG1hbmFnZW1lbnQgY29uc29sZSBzZW5kcyBJTklUIHRvIGFsbAorY3B1cy4gIFNBTCBwaWNrcyBvbmUgb25lIG9mIHRoZSBjcHVzIGFzIHRoZSBtb25hcmNoIGFuZCB0aGUgcmVzdCBhcmUKK3NsYXZlcy4gIEFsbCB0aGUgT1MgSU5JVCBoYW5kbGVycyBhcmUgZW50ZXJlZCBhdCBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lCit0aW1lLiAgVGhlIE9TIG1vbmFyY2ggcHJpbnRzIHRoZSBzdGF0ZSBvZiBhbGwgdGFza3MgYW5kIHJldHVybnMsIGFmdGVyCit3aGljaCB0aGUgc2xhdmVzIHJldHVybiBhbmQgdGhlIHN5c3RlbSByZXN1bWVzLgorCitBdCBsZWFzdCB0aGF0IGlzIHdoYXQgaXMgc3VwcG9zZWQgdG8gaGFwcGVuLiAgQWxhcyB0aGVyZSBhcmUgYnJva2VuCit2ZXJzaW9ucyBvZiBTQUwgb3V0IHRoZXJlLiAgU29tZSBkcml2ZSBhbGwgdGhlIGNwdXMgYXMgbW9uYXJjaHMuICBTb21lCitkcml2ZSB0aGVtIGFsbCBhcyBzbGF2ZXMuICBTb21lIGRyaXZlIG9uZSBjcHUgYXMgbW9uYXJjaCwgd2FpdCBmb3IgdGhhdAorY3B1IHRvIHJldHVybiBmcm9tIHRoZSBPUyB0aGVuIGRyaXZlIHRoZSByZXN0IGFzIHNsYXZlcy4gIFNvbWUgdmVyc2lvbnMKK29mIFNBTCBjYW5ub3QgZXZlbiBjb3BlIHdpdGggcmV0dXJuaW5nIGZyb20gdGhlIE9TLCB0aGV5IHNwaW4gaW5zaWRlCitTQUwgb24gcmVzdW1lLiAgVGhlIE9TIElOSVQgY29kZSBoYXMgd29ya2Fyb3VuZHMgZm9yIHNvbWUgb2YgdGhlc2UKK2Jyb2tlbiBTQUwgc3ltcHRvbXMsIGJ1dCBzb21lIHNpbXBseSBjYW5ub3QgYmUgZml4ZWQgZnJvbSB0aGUgT1Mgc2lkZS4KKworLS0tCisKK1RoZSBzY2hlZHVsZXIgaG9va3MgdXNlZCBieSBpYTY0IChjdXJyX3Rhc2ssIHNldF9jdXJyX3Rhc2spIGFyZSBsYXllcgordmlvbGF0aW9ucy4gIFVuZm9ydHVuYXRlbHkgTUNBL0lOSVQgc3RhcnQgb2ZmIGFzIG1hc3NpdmUgbGF5ZXIKK3Zpb2xhdGlvbnMgKGNhbiBvY2N1ciBhdCBfYW55XyB0aW1lKSBhbmQgdGhleSBidWlsZCBmcm9tIHRoZXJlLgorCitBdCBsZWFzdCBpYTY0IG1ha2VzIGFuIGF0dGVtcHQgYXQgcmVjb3ZlcmluZyBmcm9tIGhhcmR3YXJlIGVycm9ycywgYnV0CitpdCBpcyBhIGRpZmZpY3VsdCBwcm9ibGVtIGJlY2F1c2Ugb2YgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgdGhlc2UKK2Vycm9ycy4gIFdoZW4gcHJvY2Vzc2luZyBhbiB1bm1hc2thYmxlIGludGVycnVwdCB3ZSBzb21ldGltZXMgbmVlZAorc3BlY2lhbCBjb2RlIHRvIGNvcGUgd2l0aCBvdXIgaW5hYmlsaXR5IHRvIHRha2UgYW55IGxvY2tzLgorCistLS0KKworSG93IGlzIGlhNjQgTUNBL0lOSVQgZGlmZmVyZW50IGZyb20geDg2IE5NST8KKworKiB4ODYgTk1JIHR5cGljYWxseSBnZXRzIGRlbGl2ZXJlZCB0byBvbmUgY3B1LiAgTUNBL0lOSVQgZ2V0cyBzZW50IHRvCisgIGFsbCBjcHVzLgorCisqIHg4NiBOTUkgY2Fubm90IGJlIG5lc3RlZC4gIE1DQS9JTklUIGNhbiBiZSBuZXN0ZWQsIHRvIGEgZGVwdGggb2YgMgorICBwZXIgY3B1LgorCisqIHg4NiBoYXMgYSBzZXBhcmF0ZSBzdHJ1Y3QgdGFzayB3aGljaCBwb2ludHMgdG8gb25lIG9mIG11bHRpcGxlIGtlcm5lbAorICBzdGFja3MuICBpYTY0IGhhcyB0aGUgc3RydWN0IHRhc2sgZW1iZWRkZWQgaW4gdGhlIHNpbmdsZSBrZXJuZWwKKyAgc3RhY2ssIHNvIHN3aXRjaGluZyBzdGFjayBtZWFucyBzd2l0Y2hpbmcgdGFzay4KKworKiB4ODYgZG9lcyBub3QgY2FsbCB0aGUgQklPUyBzbyB0aGUgTk1JIGhhbmRsZXIgZG9lcyBub3QgaGF2ZSB0byB3b3JyeQorICBhYm91dCBhbnkgcmVnaXN0ZXJzIGhhdmluZyBjaGFuZ2VkLiAgTUNBL0lOSVQgY2FuIG9jY3VyIHdoaWxlIHRoZSBjcHUKKyAgaXMgaW4gUEFMIGluIHBoeXNpY2FsIG1vZGUsIHdpdGggdW5kZWZpbmVkIHJlZ2lzdGVycyBhbmQgYW4gdW5kZWZpbmVkCisgIGtlcm5lbCBzdGFjay4KKworKiBpMzg2IGJhY2t0cmFjZSBpcyBub3QgdmVyeSBzZW5zaXRpdmUgdG8gd2hldGhlciBhIHByb2Nlc3MgaXMgcnVubmluZworICBvciBub3QuICBpYTY0IHVud2luZCBpcyB2ZXJ5LCB2ZXJ5IHNlbnNpdGl2ZSB0byB3aGV0aGVyIGEgcHJvY2VzcyBpcworICBydW5uaW5nIG9yIG5vdC4KKworLS0tCisKK1doYXQgaGFwcGVucyB3aGVuIE1DQS9JTklUIGlzIGRlbGl2ZXJlZCB3aGF0IGEgY3B1IGlzIHJ1bm5pbmcgdXNlcgorc3BhY2UgY29kZT8KKworVGhlIHVzZXIgbW9kZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBpbiB0aGUgUlNFIGFyZWEgb2YgdGhlIE1DQS9JTklUIG9uCitlbnRyeSB0byB0aGUgT1MgYW5kIGFyZSByZXN0b3JlZCBmcm9tIHRoZXJlIG9uIHJldHVybiB0byBTQUwsIHNvIHVzZXIKK21vZGUgcmVnaXN0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIGEgcmVjb3ZlcmFibGUgTUNBL0lOSVQuICBTaW5jZSB0aGUKK09TIGhhcyBubyBpZGVhIHdoYXQgdW53aW5kIGRhdGEgaXMgYXZhaWxhYmxlIGZvciB0aGUgdXNlciBzcGFjZSBzdGFjaywKK01DQS9JTklUIG5ldmVyIHRyaWVzIHRvIGJhY2t0cmFjZSB1c2VyIHNwYWNlLiAgV2hpY2ggbWVhbnMgdGhhdCB0aGUgT1MKK2RvZXMgbm90IGJvdGhlciBtYWtpbmcgdGhlIHVzZXIgc3BhY2UgcHJvY2VzcyBsb29rIGxpa2UgYSBibG9ja2VkIHRhc2ssCitpLmUuIHRoZSBPUyBkb2VzIG5vdCBjb3B5IHB0X3JlZ3MgYW5kIHN3aXRjaF9zdGFjayB0byB0aGUgdXNlciBzcGFjZQorc3RhY2suICBBbHNvIHRoZSBPUyBoYXMgbm8gaWRlYSBob3cgYmlnIHRoZSB1c2VyIHNwYWNlIFJTRSBhbmQgbWVtb3J5CitzdGFja3MgYXJlLCB3aGljaCBtYWtlcyBpdCB0b28gcmlza3kgdG8gY29weSB0aGUgc2F2ZWQgc3RhdGUgdG8gYSB1c2VyCittb2RlIHN0YWNrLgorCistLS0KKworSG93IGRvIHdlIGdldCBhIGJhY2t0cmFjZSBvbiB0aGUgdGFza3MgdGhhdCB3ZXJlIHJ1bm5pbmcgd2hlbiBNQ0EvSU5JVAord2FzIGRlbGl2ZXJlZD8KKworbWNhLmM6OjppYTY0X21jYV9tb2RpZnlfb3JpZ2luYWxfc3RhY2soKS4gIFRoYXQgaWRlbnRpZmllcyBhbmQKK3ZlcmlmaWVzIHRoZSBvcmlnaW5hbCBrZXJuZWwgc3RhY2ssIGNvcGllcyB0aGUgZGlydHkgcmVnaXN0ZXJzIGZyb20KK3RoZSBNQ0EvSU5JVCBzdGFjaydzIFJTRSB0byB0aGUgb3JpZ2luYWwgc3RhY2sncyBSU0UsIGNvcGllcyB0aGUKK3NrZWxldG9uIHN0cnVjdCBwdF9yZWdzIGFuZCBzd2l0Y2hfc3RhY2sgdG8gdGhlIG9yaWdpbmFsIHN0YWNrLCBmaWxscworaW4gdGhlIHNrZWxldG9uIHN0cnVjdHVyZXMgZnJvbSB0aGUgUEFMIG1pbnN0YXRlIGFyZWEgYW5kIHVwZGF0ZXMgdGhlCitvcmlnaW5hbCBzdGFjaydzIHRocmVhZC5rc3AuICBUaGF0IG1ha2VzIHRoZSBvcmlnaW5hbCBzdGFjayBsb29rCitleGFjdGx5IGxpa2UgYW55IG90aGVyIGJsb2NrZWQgdGFzaywgaS5lLiBpdCBub3cgYXBwZWFycyB0byBiZQorc2xlZXBpbmcuICBUbyBnZXQgYSBiYWNrdHJhY2UsIGp1c3Qgc3RhcnQgd2l0aCB0aHJlYWQua3NwIGZvciB0aGUKK29yaWdpbmFsIHRhc2sgYW5kIHVud2luZCBsaWtlIGFueSBvdGhlciBzbGVlcGluZyB0YXNrLgorCistLS0KKworSG93IGRvIHdlIGlkZW50aWZ5IHRoZSB0YXNrcyB0aGF0IHdlcmUgcnVubmluZyB3aGVuIE1DQS9JTklUIHdhcworZGVsaXZlcmVkPworCitJZiB0aGUgcHJldmlvdXMgdGFzayBoYXMgYmVlbiB2ZXJpZmllZCBhbmQgY29udmVydGVkIHRvIGEgYmxvY2tlZAorc3RhdGUsIHRoZW4gc29zLT5wcmV2X3Rhc2sgb24gdGhlIE1DQS9JTklUIHN0YWNrIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8KK3RoZSBwcmV2aW91cyB0YXNrLiAgWW91IGNhbiBsb29rIGF0IHRoYXQgZmllbGQgaW4gZHVtcHMgb3IgZGVidWdnZXJzLgorVG8gaGVscCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBoYW5kbGVyIGFuZCB0aGUgb3JpZ2luYWwgdGFza3MsCitoYW5kbGVycyBoYXZlIF9USUZfTUNBX0lOSVQgc2V0IGluIHRocmVhZF9pbmZvLmZsYWdzLgorCitUaGUgc29zIGRhdGEgaXMgYWx3YXlzIGluIHRoZSBNQ0EvSU5JVCBoYW5kbGVyIHN0YWNrLCBhdCBvZmZzZXQKK01DQV9TT1NfT0ZGU0VULiAgWW91IGNhbiBnZXQgdGhhdCB2YWx1ZSBmcm9tIG1jYV9hc20uaCBvciBjYWxjdWxhdGUgaXQKK2FzIEtFUk5FTF9TVEFDS19TSVpFIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAtIHNpemVvZihzdHJ1Y3QKK2lhNjRfc2FsX29zX3N0YXRlKSwgd2l0aCAxNiBieXRlIGFsaWdubWVudCBmb3IgYWxsIHN0cnVjdHVyZXMuCisKK0Fsc28gdGhlIGNvbW0gZmllbGQgb2YgdGhlIE1DQS9JTklUIHRhc2sgaXMgbW9kaWZpZWQgdG8gaW5jbHVkZSB0aGUgcGlkCitvZiB0aGUgb3JpZ2luYWwgdGFzaywgZm9yIGh1bWFucyB0byB1c2UuICBGb3IgZXhhbXBsZSwgYSBjb21tIGZpZWxkIG9mCisnTUNBIDEyMTU5JyBtZWFucyB0aGF0IHBpZCAxMjE1OSB3YXMgcnVubmluZyB3aGVuIHRoZSBNQ0Egd2FzCitkZWxpdmVyZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dCBiL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CmluZGV4IDFmNWY3ZDIuLjVmMDhmOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CkBAIC02NiwxMSArNjYsMTEgQEAKICAgIGMpIEVuYWJsZSAiL3Byb2Mvdm1jb3JlIHN1cHBvcnQiIChPcHRpb25hbCwgaW4gUHNldWRvIGZpbGVzeXN0ZW1zKS4KIAlDT05GSUdfUFJPQ19WTUNPUkU9eQogICAgZCkgRGlzYWJsZSBTTVAgc3VwcG9ydCBhbmQgYnVpbGQgYSBVUCBrZXJuZWwgKFVudGlsIGl0IGlzIGZpeGVkKS4KLSAgIAlDT05GSUdfU01QPW4KKwlDT05GSUdfU01QPW4KICAgIGUpIEVuYWJsZSAiTG9jYWwgQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMiLgotICAgCUNPTkZJR19YODZfVVBfQVBJQz15CisJQ09ORklHX1g4Nl9VUF9BUElDPXkKICAgIGYpIEVuYWJsZSAiSU8tQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMiCi0gICAJQ09ORklHX1g4Nl9VUF9JT0FQSUM9eQorCUNPTkZJR19YODZfVVBfSU9BUElDPXkKIAogICBOb3RlOiAgIGkpIE9wdGlvbnMgYSkgYW5kIGIpIGRlcGVuZCB1cG9uICJDb25maWd1cmUgc3RhbmRhcmQga2VybmVsIGZlYXR1cmVzCiAJICAgICAoZm9yIHNtYWxsIHN5c3RlbXMpIiAodW5kZXIgR2VuZXJhbCBzZXR1cCkuCkBAIC05NSw2ICs5NSwxMSBAQAogCSAgICBoZW5jZSBoYXZlIG1lbW9yeSBsZXNzIHRoYW4gNEdCLgogICAgICAgIGlpaSkgU3BlY2lmeSAiaXJxcG9sbCIgYXMgY29tbWFuZCBsaW5lIHBhcmFtZXRlci4gVGhpcyByZWR1Y2VzIGRyaXZlcgogICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgaW4gc2Vjb25kIGtlcm5lbCBkdWUgdG8gc2hhcmVkIGludGVycnVwdHMuCisgICAgICAgIGl2KSA8cm9vdC1kZXY+IG5lZWRzIHRvIGJlIHNwZWNpZmllZCBpbiBhIGZvcm1hdCBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICAgICB0aGUgcm9vdCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0IG9mIG1vdW50IGNvbW1hbmQuCisgICAgICAgICB2KSBJZiB5b3UgaGF2ZSBidWlsdCB0aGUgZHJpdmVycyByZXF1aXJlZCB0byBtb3VudCByb290IGZpbGUKKyAgICAgICAgICAgIHN5c3RlbSBhcyBtb2R1bGVzIGluIDxzZWNvbmQta2VybmVsPiwgdGhlbiwgc3BlY2lmeQorICAgICAgICAgICAgLS1pbml0cmQ9PGluaXRyZC1mb3Itc2Vjb25kLWtlcm5lbD4uCiAKIDUpIFN5c3RlbSByZWJvb3RzIGludG8gdGhlIHNlY29uZCBrZXJuZWwgd2hlbiBhIHBhbmljIG9jY3Vycy4gQSBtb2R1bGUgY2FuIGJlCiAgICB3cml0dGVuIHRvIGZvcmNlIHRoZSBwYW5pYyBvciAiQUxULVN5c1JxLWMiIGNhbiBiZSB1c2VkIGluaXRpYXRlIGEgY3Jhc2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dAppbmRleCBkYTcxMTAyLi42NmVhYWFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9vb3BzLXRyYWNpbmcudHh0CkBAIC0yMDUsOCArMjA1LDggQEAKIFRhaW50ZWQga2VybmVsczoKIAogU29tZSBvb3BzIHJlcG9ydHMgY29udGFpbiB0aGUgc3RyaW5nICdUYWludGVkOiAnIGFmdGVyIHRoZSBwcm9ncmFtCi1jb3VudGVyLCB0aGlzIGluZGljYXRlcyB0aGF0IHRoZSBrZXJuZWwgaGFzIGJlZW4gdGFpbnRlZCBieSBzb21lCi1tZWNoYW5pc20uICBUaGUgc3RyaW5nIGlzIGZvbGxvd2VkIGJ5IGEgc2VyaWVzIG9mIHBvc2l0aW9uIHNlbnNpdGl2ZQorY291bnRlci4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUga2VybmVsIGhhcyBiZWVuIHRhaW50ZWQgYnkgc29tZQorbWVjaGFuaXNtLiAgVGhlIHN0cmluZyBpcyBmb2xsb3dlZCBieSBhIHNlcmllcyBvZiBwb3NpdGlvbi1zZW5zaXRpdmUKIGNoYXJhY3RlcnMsIGVhY2ggcmVwcmVzZW50aW5nIGEgcGFydGljdWxhciB0YWludGVkIHZhbHVlLgogCiAgIDE6ICdHJyBpZiBhbGwgbW9kdWxlcyBsb2FkZWQgaGF2ZSBhIEdQTCBvciBjb21wYXRpYmxlIGxpY2Vuc2UsICdQJyBpZgpAQCAtMjE0LDE2ICsyMTQsMjUgQEAKICAgICAgTU9EVUxFX0xJQ0VOU0Ugb3Igd2l0aCBhIE1PRFVMRV9MSUNFTlNFIHRoYXQgaXMgbm90IHJlY29nbmlzZWQgYnkKICAgICAgaW5zbW9kIGFzIEdQTCBjb21wYXRpYmxlIGFyZSBhc3N1bWVkIHRvIGJlIHByb3ByaWV0YXJ5LgogCi0gIDI6ICdGJyBpZiBhbnkgbW9kdWxlIHdhcyBmb3JjZSBsb2FkZWQgYnkgaW5zbW9kIC1mLCAnICcgaWYgYWxsCisgIDI6ICdGJyBpZiBhbnkgbW9kdWxlIHdhcyBmb3JjZSBsb2FkZWQgYnkgImluc21vZCAtZiIsICcgJyBpZiBhbGwKICAgICAgbW9kdWxlcyB3ZXJlIGxvYWRlZCBub3JtYWxseS4KIAogICAzOiAnUycgaWYgdGhlIG9vcHMgb2NjdXJyZWQgb24gYW4gU01QIGtlcm5lbCBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQKLSAgICAgIGhhc24ndCBiZWVuIGNlcnRpZmllZCBhcyBzYWZlIHRvIHJ1biBtdWx0aXByb2Nlc3Nvci4KLQkgIEN1cnJlbnRseSB0aGlzIG9jY3VycyBvbmx5IG9uIHZhcmlvdXMgQXRobG9ucyB0aGF0IGFyZSBub3QKLQkgIFNNUCBjYXBhYmxlLgorICAgICBoYXNuJ3QgYmVlbiBjZXJ0aWZpZWQgYXMgc2FmZSB0byBydW4gbXVsdGlwcm9jZXNzb3IuCisgICAgIEN1cnJlbnRseSB0aGlzIG9jY3VycyBvbmx5IG9uIHZhcmlvdXMgQXRobG9ucyB0aGF0IGFyZSBub3QKKyAgICAgU01QIGNhcGFibGUuCisKKyAgNDogJ1InIGlmIGEgbW9kdWxlIHdhcyBmb3JjZSB1bmxvYWRlZCBieSAicm1tb2QgLWYiLCAnICcgaWYgYWxsCisgICAgIG1vZHVsZXMgd2VyZSB1bmxvYWRlZCBub3JtYWxseS4KKworICA1OiAnTScgaWYgYW55IHByb2Nlc3NvciBoYXMgcmVwb3J0ZWQgYSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiwKKyAgICAgJyAnIGlmIG5vIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9ucyBoYXZlIG9jY3VycmVkLgorCisgIDY6ICdCJyBpZiBhIHBhZ2UtcmVsZWFzZSBmdW5jdGlvbiBoYXMgZm91bmQgYSBiYWQgcGFnZSByZWZlcmVuY2Ugb3IKKyAgICAgc29tZSB1bmV4cGVjdGVkIHBhZ2UgZmxhZ3MuCiAKIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhlICdUYWludGVkOiAnIHN0cmluZyBpcyB0byB0ZWxsIGtlcm5lbAogZGVidWdnZXJzIGlmIHRoaXMgaXMgYSBjbGVhbiBrZXJuZWwgb3IgaWYgYW55dGhpbmcgdW51c3VhbCBoYXMKLW9jY3VycmVkLiAgVGFpbnRpbmcgaXMgcGVybWFuZW50LCBldmVuIGlmIGFuIG9mZmVuZGluZyBtb2R1bGUgaXMKLXVubG9hZGluZyB0aGUgdGFpbnRlZCB2YWx1ZSByZW1haW5zIHRvIGluZGljYXRlIHRoYXQgdGhlIGtlcm5lbCBpcyBub3QKK29jY3VycmVkLiAgVGFpbnRpbmcgaXMgcGVybWFuZW50OiBldmVuIGlmIGFuIG9mZmVuZGluZyBtb2R1bGUgaXMKK3VubG9hZGVkLCB0aGUgdGFpbnRlZCB2YWx1ZSByZW1haW5zIHRvIGluZGljYXRlIHRoYXQgdGhlIGtlcm5lbCBpcyBub3QKIHRydXN0d29ydGh5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wbS50eHQgYi9Eb2N1bWVudGF0aW9uL3BtLnR4dAppbmRleCBjYzYzYWUxLi4yZWExMTQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3BtLnR4dApAQCAtMzgsNiArMzgsMTIgQEAKIAogRHJpdmVyIEludGVyZmFjZSAtLSBPQlNPTEVURSwgRE8gTk9UIFVTRSEKIC0tLS0tLS0tLS0tLS0tLS0qKioqKioqKioqKioqKioqKioqKioqKioqCisKK05vdGU6IHBtX3JlZ2lzdGVyKCksIHBtX2FjY2VzcygpLCBwbV9kZXZfaWRsZSgpIGFuZCBmcmllbmRzIGFyZQorb2Jzb2xldGUuIFBsZWFzZSBkbyBub3QgdXNlIHRoZW0uIEluc3RlYWQgeW91IHNob3VsZCBwcm9wZXJseSBob29rCit5b3VyIGRyaXZlciBpbnRvIHRoZSBkcml2ZXIgbW9kZWwsIGFuZCB1c2UgaXRzIHN1c3BlbmQoKS9yZXN1bWUoKQorY2FsbGJhY2tzIHRvIGRvIHRoaXMga2luZCBvZiBzdHVmZi4KKwogSWYgeW91IGFyZSB3cml0aW5nIGEgbmV3IGRyaXZlciBvciBtYWludGFpbmluZyBhbiBvbGQgZHJpdmVyLCBpdAogc2hvdWxkIGluY2x1ZGUgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0LiAgV2l0aG91dCBwb3dlciBtYW5hZ2VtZW50CiBzdXBwb3J0LCBhIHNpbmdsZSBkcml2ZXIgbWF5IHByZXZlbnQgYSBzeXN0ZW0gd2l0aCBwb3dlciBtYW5hZ2VtZW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IGViZmNkZjIuLjEzY2JhOTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC03NSw3ICs3NSw3IEBACiAgICAgYWRzcF9tYXAJLSBQQ00gZGV2aWNlIG51bWJlciBtYXBzIGFzc2lnbmVkIHRvIHRoZSAyc3QgT1NTIGRldmljZS4KIAkJLSBEZWZhdWx0OiAxCiAgICAgbm9uYmxvY2tfb3BlbgotCQktIERvbid0IGJsb2NrIG9wZW5pbmcgYnVzeSBQQ00gZGV2aWNlcy4KKwkJLSBEb24ndCBibG9jayBvcGVuaW5nIGJ1c3kgUENNIGRldmljZXMuICBEZWZhdWx0OiAxCiAKICAgICBGb3IgZXhhbXBsZSwgd2hlbiBkc3BfbWFwPTIsIC9kZXYvZHNwIHdpbGwgYmUgbWFwcGVkIHRvIFBDTSAjMiBvZgogICAgIHRoZSBjYXJkICMwLiAgU2ltaWxhcmx5LCB3aGVuIGFkc3BfbWFwPTAsIC9kZXYvYWRzcCB3aWxsIGJlIG1hcHBlZApAQCAtMTQ4LDYgKzE0OCwxNiBAQAogICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQogICAgIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZSBvcHRpb25hbC4KICAgICAKKyAgTW9kdWxlIHNuZC1hZDE4ODkKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQW5hbG9nIERldmljZXMgQUQxODg5IGNoaXBzLgorCisgICAgYWM5N19xdWlyayAgLSBBQyc5NyB3b3JrYXJvdW5kIGZvciBzdHJhbmdlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVsOHgwIG1vZHVsZSBmb3IgZGV0YWlscy4KKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKICAgTW9kdWxlIHNuZC1hbGk1NDUxCiAgIC0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xODksMTUgKzE5OSwyMCBAQAogICBNb2R1bGUgc25kLWF0aWl4cAogICAtLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgTW9kdWxlIGZvciBBVEkgSVhQIDE1MC8yMDAvMjUwIEFDOTcgY29udHJvbGxlcnMuCisgICAgTW9kdWxlIGZvciBBVEkgSVhQIDE1MC8yMDAvMjUwLzQwMCBBQzk3IGNvbnRyb2xsZXJzLgogCi0gICAgYWM5N19jbG9jawkJLSBBQyc5NyBjbG9jayAoZGVmYWx1dCA9IDQ4MDAwKQorICAgIGFjOTdfY2xvY2sJCS0gQUMnOTcgY2xvY2sgKGRlZmF1bHQgPSA0ODAwMCkKICAgICBhYzk3X3F1aXJrCQktIEFDJzk3IHdvcmthcm91bmQgZm9yIHN0cmFuZ2UgaGFyZHdhcmUKLQkJCSAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlbDh4MCBtb2R1bGUgZm9yIGRldGFpbHMuCisJCQkgIFNlZSAiQUM5NyBRdWlyayBPcHRpb24iIHNlY3Rpb24gYmVsb3cuCiAgICAgc3BkaWZfYWNsaW5rCS0gUy9QRElGIHRyYW5zZmVyIG92ZXIgQUMtbGluayAoZGVmYXVsdCA9IDEpCiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCiAKKyAgICBBVEkgSVhQIGhhcyB0d28gZGlmZmVyZW50IG1ldGhvZHMgdG8gY29udHJvbCBTUERJRiBvdXRwdXQuICBPbmUgaXMKKyAgICBvdmVyIEFDLWxpbmsgYW5kIGFub3RoZXIgaXMgb3ZlciB0aGUgImRpcmVjdCIgU1BESUYgb3V0cHV0LiAgVGhlCisgICAgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiB0aGUgbW90aGVyYm9hcmQsIGFuZCB5b3UnbGwgbmVlZCB0bworICAgIGNob29zZSB0aGUgY29ycmVjdCBvbmUgdmlhIHNwZGlmX2FjbGluayBtb2R1bGUgb3B0aW9uLgorCiAgIE1vZHVsZSBzbmQtYXRpaXhwLW1vZGVtCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzMCw3ICsyNDUsNyBAQAogICAgIFRoZSBoYXJkd2FyZSBFUSBoYXJkd2FyZSBhbmQgU1BESUYgaXMgb25seSBwcmVzZW50IGluIHRoZSBWb3J0ZXgyIGFuZCAKICAgICBBZHZhbnRhZ2UuCiAKLSAgICBOb3RlOiBTb21lIEFMU0EgbWl4ZXIgYXBwbGljYWN0aW9ucyBkb24ndCBoYW5kbGUgdGhlIFNQRElGIHNhbXBsZXJhdGUgCisgICAgTm90ZTogU29tZSBBTFNBIG1peGVyIGFwcGxpY2F0aW9ucyBkb24ndCBoYW5kbGUgdGhlIFNQRElGIHNhbXBsZSByYXRlIAogICAgICAgICAgICBjb250cm9sIGNvcnJlY3RseS4gSWYgeW91IGhhdmUgcHJvYmxlbXMgcmVnYXJkaW5nIHRoaXMsIHRyeQogICAgICAgICAgICBhbm90aGVyIEFMU0EgY29tcGxpYW50IG1peGVyIChhbHNhbWl4ZXIgd29ya3MpLgogCkBAIC0zMDIsNyArMzE3LDcgQEAKIAogICAgIG1wdV9wb3J0CS0gMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzAsIDAgPSBkaXNhYmxlIChkZWZhdWx0KQogICAgIGZtX3BvcnQgICAgIC0gMHgzODggKGRlZmF1bHQpLCAwID0gZGlzYWJsZSAoZGVmYXVsdCkKLSAgICBzb2Z0X2FjMyAgICAtIFNvZndhcmUtY29udmVyc2lvbiBvZiByYXcgU1BESUYgcGFja2V0cyAobW9kZWwgMDMzIG9ubHkpCisgICAgc29mdF9hYzMgICAgLSBTb2Z0d2FyZS1jb252ZXJzaW9uIG9mIHJhdyBTUERJRiBwYWNrZXRzIChtb2RlbCAwMzMgb25seSkKICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSkKICAgICBqb3lzdGlja19wb3J0IC0gSm95c3RpY2sgcG9ydCBhZGRyZXNzICgwID0gZGlzYWJsZSwgMSA9IGF1dG8tZGV0ZWN0KQogCkBAIC0zODQsNyArMzk5LDcgQEAKICAgICBNb2R1bGUgZm9yIFBDSSBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQ2MTAvQ1M0NjEyL0NTNDYxNC9DUzQ2MTUvQ1M0NjIyLwogCQkJCSAgICAgICBDUzQ2MjQvQ1M0NjMwL0NTNDI4MCBQQ0kgY2hpcHMuCiAKLSAgICBleHRlcm5hbF9hbXAgICAgIC0gRm9yY2UgdG8gZW5hYmxlIGV4dGVybmFsIGFtcGxpZmVyLgorICAgIGV4dGVybmFsX2FtcCAgICAgLSBGb3JjZSB0byBlbmFibGUgZXh0ZXJuYWwgYW1wbGlmaWVyLgogICAgIHRoaW5rcGFkICAgICAgICAgLSBGb3JjZSB0byBlbmFibGUgVGhpbmtwYWQncyBDTEtSVU4gY29udHJvbC4KICAgICBtbWFwX3ZhbGlkICAgICAgIC0gU3VwcG9ydCBPU1MgbW1hcCBtb2RlIChkZWZhdWx0ID0gMCkuCiAKQEAgLTYyMCw3ICs2MzUsNyBAQAogCSAgICAgICBWSUEgVlQ4MjUxL1ZUODIzN0EKIAogICAgIG1vZGVsCS0gZm9yY2UgdGhlIG1vZGVsIG5hbWUKLSAgICBwb3NpdGlvbl9maXggLSBGaXggRE1BIHBvaW50ZXIgKDAgPSBGSUZPIHNpemUsIDEgPSBub25lLCAyID0gUE9TQlVGKQorICAgIHBvc2l0aW9uX2ZpeCAtIEZpeCBETUEgcG9pbnRlciAoMCA9IGF1dG8sIDEgPSBub25lLCAyID0gUE9TQlVGLCAzID0gRklGTyBzaXplKQogCiAgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCiAKQEAgLTY1Niw2ICs2NzEsMTEgQEAKIAkgIGFsbG91dAk1LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250LCBTUERJRiBvdXQKIAkgIGF1dG8JCWF1dG8tY29uZmlnIHJlYWRpbmcgQklPUyAoZGVmYXVsdCkKIAorICAgIElmIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZG9lc24ndCB3b3JrIGFuZCBvbmUgb2YgdGhlIGFib3ZlCisgICAgbWF0Y2hlcyB3aXRoIHlvdXIgZGV2aWNlLCByZXBvcnQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgUENJCisgICAgc3Vic3lzdGVtIElEIChvdXRwdXQgb2YgImxzcGNpIC1udiIpIHRvIEFMU0EgQlRTIG9yIGFsc2EtZGV2ZWwKKyAgICBNTCAoc2VlIHRoZSBzZWN0aW9uICJMaW5rcyBhbmQgQWRkcmVzc2VzIikuCisKICAgICBOb3RlIDI6IElmIHlvdSBnZXQgY2xpY2sgbm9pc2VzIG9uIG91dHB1dCwgdHJ5IHRoZSBtb2R1bGUgb3B0aW9uCiAJICAgIHBvc2l0aW9uX2ZpeD0xIG9yIDIuICBwb3NpdGlvbl9maXg9MSB3aWxsIHVzZSB0aGUgU0RfTFBJQgogCSAgICByZWdpc3RlciB2YWx1ZSB3aXRob3V0IEZJRk8gc2l6ZSBjb3JyZWN0aW9uIGFzIHRoZSBjdXJyZW50CkBAIC03ODMsMjAgKzgwMywxMyBAQAogCiAgICAgYWM5N19jbG9jawkgIC0gQUMnOTcgY29kZWMgY2xvY2sgYmFzZSAoMCA9IGF1dG8tZGV0ZWN0KQogICAgIGFjOTdfcXVpcmsgICAgLSBBQyc5NyB3b3JrYXJvdW5kIGZvciBzdHJhbmdlIGhhcmR3YXJlCi0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBhcmUgYWNjZXB0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGRvbid0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmcKLSAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlID0gZGlzYWJsZSB0aGUgcXVpcmsKLSAgICAgICAgICAgICAgICAgICAgICBocF9vbmx5ID0gdXNlIGhlYWRwaG9uZSBjb250cm9sIGFzIG1hc3RlcgotICAgICAgICAgICAgICAgICAgICAgIHN3YXBfaHAgPSBzd2FwIGhlYWRwaG9uZSBhbmQgbWFzdGVyIGNvbnRyb2xzCi0gICAgICAgICAgICAgICAgICAgICAgc3dhcF9zdXJyb3VuZCA9IHN3YXAgbWFzdGVyIGFuZCBzdXJyb3VuZCBjb250cm9scwotICAgICAgICAgICAgICAgICAgICAgIGFkX3NoYXJpbmcgPSBmb3IgQUQxOTg1LCB0dXJuIG9uIE9NUyBiaXQgYW5kIHVzZSBoZWFkcGhvbmUKLSAgICAgICAgICAgICAgICAgICAgICBhbGNfamFjayA9IGZvciBBTEM2NXgsIHR1cm4gb24gdGhlIGphY2sgc2Vuc2UgbW9kZQotICAgICAgICAgICAgICAgICAgICAgIGludl9lYXBkID0gaW52ZXJ0ZWQgRUFQRCBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICAgICAgIG11dGVfbGVkID0gYmluZCBFQVBEIGJpdCBmb3IgdHVybmluZyBvbi9vZmYgbXV0ZSBMRUQKLSAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSBjb3JyZXNwb25kaW5nIGludGVnZXIKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgLTEsIDAsIC4uLiBhcmUgYWNjZXB0ZWQsIHRvby4KKwkJICAgIFNlZSAiQUM5NyBRdWlyayBPcHRpb24iIHNlY3Rpb24gYmVsb3cuCiAgICAgYnVnZ3lfaXJxICAgICAtIEVuYWJsZSB3b3JrYXJvdW5kIGZvciBidWdneSBpbnRlcnJ1cHRzIG9uIHNvbWUKLSAgICAgICAgICAgICAgICAgICAgbW90aGVyYm9hcmRzIChkZWZhdWx0IG9mZikKKyAgICAgICAgICAgICAgICAgICAgbW90aGVyYm9hcmRzIChkZWZhdWx0IHllcyBvbiBuRm9yY2UgY2hpcHMsCisJCSAgICBvdGhlcndpc2Ugb2ZmKQorICAgIGJ1Z2d5X3NlbWFwaG9yZSAtIEVuYWJsZSB3b3JrYXJvdW5kIGZvciBoYXJkd2FyZXMgd2l0aCBidWdneQorCQkgICAgc2VtYXBob3JlcyAoZS5nLiBvbiBzb21lIEFTVVMgbGFwdG9wcykKKwkJICAgIChkZWZhdWx0IG9mZikKIAogICAgIE1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGJ1cy1tYXN0ZXIgY2hpcHMgKG1heCA4KS4KIApAQCAtODA4LDEzICs4MjEsNiBAQAogICAgIG1vdGhlcmJvYXJkIGhhcyB0aGVzZSBkZXZpY2VzLCB1c2UgdGhlIG5zNTU4IG9yIHNuZC1tcHU0MDEKICAgICBtb2R1bGVzLCByZXNwZWN0aXZlbHkuCiAKLSAgICBUaGUgYWM5N19xdWlyayBvcHRpb24gaXMgdXNlZCB0byBlbmFibGUvb3ZlcnJpZGUgdGhlIHdvcmthcm91bmQKLSAgICBmb3Igc3BlY2lmaWMgZGV2aWNlcy4gIFNvbWUgaGFyZHdhcmUgaGF2ZSBzd2FwcGVkIG91dHB1dCBwaW5zCi0gICAgYmV0d2VlbiBNYXN0ZXIgYW5kIEhlYWRwaG9uZSwgb3IgU3Vycm91bmQuICBUaGUgZHJpdmVyIHByb3ZpZGVzCi0gICAgdGhlIGF1dG8tZGV0ZWN0aW9uIG9mIGtub3duIHByb2JsZW1hdGljIGRldmljZXMsIGJ1dCBzb21lIG1pZ2h0Ci0gICAgYmUgdW5rbm93biBvciB3cm9uZ2x5IGRldGVjdGVkLiAgSW4gc3VjaCBhIGNhc2UsIHBhc3MgdGhlIHByb3BlcgotICAgIHZhbHVlIHdpdGggdGhpcyBvcHRpb24uCi0KICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAgICAgCiAgIE1vZHVsZSBzbmQtaW50ZWw4eDBtCkBAIC05NjYsNyArOTcyLDcgQEAKICAgICB3aXRoIG1hY2hpbmVzIHdpdGggb3RoZXIgKG1vc3QgbGlrZWx5IENTNDIzeCBvciBPUEwzU0F4KSBjaGlwcywKICAgICBldmVuIHRob3VnaCB0aGUgZGV2aWNlIGlzIGRldGVjdGVkIGluIGxzcGNpLiAgSW4gc3VjaCBhIGNhc2UsIHRyeQogICAgIG90aGVyIGRyaXZlcnMsIGUuZy4gc25kLWNzNDIzMiBvciBzbmQtb3BsM3NhMi4gIFNvbWUgaGFzIElTQS1QblAKLSAgICBidXQgc29tZSBkb2Vzbid0IGhhdmUgSVNBIFBuUC4gIFlvdSdsbCBuZWVkIHRvIHNwZWljZnkgaXNhcG5wPTAKKyAgICBidXQgc29tZSBkb2Vzbid0IGhhdmUgSVNBIFBuUC4gIFlvdSdsbCBuZWVkIHRvIHNwZWNpZnkgaXNhcG5wPTAKICAgICBhbmQgcHJvcGVyIGhhcmR3YXJlIHBhcmFtZXRlcnMgaW4gdGhlIGNhc2Ugd2l0aG91dCBJU0EgUG5QLgogCiAgICAgTm90ZTogc29tZSBsYXB0b3BzIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBBQzk3IFJFU0VULiAgRm9yIHRoZQpAQCAtMTMwMiw3ICsxMzA4LDcgQEAKIAkJICBjaGFubmVscwogCQkgIFtWSUE4MjMzL0MsIDgyMzUsIDgyMzcgb25seV0KICAgICBhYzk3X3F1aXJrICAtIEFDJzk3IHdvcmthcm91bmQgZm9yIHN0cmFuZ2UgaGFyZHdhcmUKLSAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZWw4eDAgbW9kdWxlIGZvciBkZXRhaWxzLgorCQkgIFNlZSAiQUM5NyBRdWlyayBPcHRpb24iIHNlY3Rpb24gYmVsb3cuCiAKICAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBidXMtbWFzdGVyIGNoaXBzIChtYXggOCkuCiAKQEAgLTEzMjcsMTYgKzEzMzMsMTcgQEAKIAkgICJsc3BjaSAtbnYiKS4KIAkgIElmIGR4c19zdXBwb3J0PTUgZG9lcyBub3Qgd29yaywgdHJ5IGR4c19zdXBwb3J0PTQ7IGlmIGl0CiAJICBkb2Vzbid0IHdvcmsgdG9vLCB0cnkgZHhzX3N1cHBvcnQ9MS4gIChkeHNfc3VwcG9ydD0xIGlzCi0JICB1c3VhbGx5IGZvciBvbGQgbW90aGVyYm9hcmRzLiAgVGhlIGNvcnJlY3QgaW1wbGVtZW50YXRlZAorCSAgdXN1YWxseSBmb3Igb2xkIG1vdGhlcmJvYXJkcy4gIFRoZSBjb3JyZWN0IGltcGxlbWVudGVkCiAJICBib2FyZCBzaG91bGQgd29yayB3aXRoIDQgb3IgNS4pICBJZiBpdCBzdGlsbCBkb2Vzbid0CiAJICB3b3JrIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzIG9rLCBkeHNfc3VwcG9ydD0zIGlzIHRoZQogCSAgcmlnaHQgY2hvaWNlLiAgSWYgdGhlIGRlZmF1bHQgc2V0dGluZyBkb2Vzbid0IHdvcmsgYXQgYWxsLAogCSAgdHJ5IGR4c19zdXBwb3J0PTIgdG8gZGlzYWJsZSB0aGUgRFhTIGNoYW5uZWxzLgogCSAgSW4gYW55IGNhc2VzLCBwbGVhc2UgbGV0IHVzIGtub3cgdGhlIHJlc3VsdCBhbmQgdGhlCi0JICBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBpZHMuCisJICBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBpZHMuICBTZWUgIkxpbmtzIGFuZCBBZGRyZXNzZXMiCisJICBiZWxvdy4KIAogICAgIE5vdGU6IGZvciB0aGUgTVBVNDAxIG9uIFZJQTgyM3gsIHVzZSBzbmQtbXB1NDAxIGRyaXZlcgotCSAgYWRkaXRvbmFsbHkuICBUaGUgbXB1X3BvcnQgb3B0aW9uIGlzIGZvciBWSUE2ODYgY2hpcHMgb25seS4KKwkgIGFkZGl0aW9uYWxseS4gIFRoZSBtcHVfcG9ydCBvcHRpb24gaXMgZm9yIFZJQTY4NiBjaGlwcyBvbmx5LgogCiAgIE1vZHVsZSBzbmQtdmlhODJ4eC1tb2RlbQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzOTgsOCArMTQwNSwxMCBAQAogICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiAgVGhlIG1vZHVsZSBpcyBjb21waWxlZCBvbmx5IHdoZW4KICAgICBQQ01DSUEgaXMgc3VwcG9ydGVkIG9uIGtlcm5lbC4KIAotICAgIFRvIGFjdGl2YXRlIHRoZSBkcml2ZXIgdmlhIHRoZSBjYXJkIG1hbmFnZXIsIHlvdSdsbCBuZWVkIHRvIHNldAotICAgIHVwIC9ldGMvcGNtY2lhL3Z4cG9ja2V0LmNvbmYuICBTZWUgdGhlIHNvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jLgorICAgIFdpdGggdGhlIG9sZGVyIDIuNi54IGtlcm5lbCwgdG8gYWN0aXZhdGUgdGhlIGRyaXZlciB2aWEgdGhlIGNhcmQKKyAgICBtYW5hZ2VyLCB5b3UnbGwgbmVlZCB0byBzZXQgdXAgL2V0Yy9wY21jaWEvdnhwb2NrZXQuY29uZi4gIFNlZSB0aGUKKyAgICBzb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYy4gIDIuNi4xMyBvciBsYXRlciBrZXJuZWwgcmVxdWlyZXMgbm8KKyAgICBsb25nZXIgcmVxdWlyZSBhIGNvbmZpZyBmaWxlLgogCiAgICAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB0aGUgaG90cGx1ZyBmaXJtd2FyZQogICAgIGlzIHN1cHBvcnRlZCwgdGhlIGZpcm13YXJlIGRhdGEgaXMgbG9hZGVkIHZpYSBob3RwbHVnIGF1dG9tYXRpY2FsbHkuCkBAIC0xNDExLDYgKzE0MjAsOSBAQAogCiAgICAgTm90ZTogdGhlIGRyaXZlciBpcyBidWlsZCBvbmx5IHdoZW4gQ09ORklHX0lTQSBpcyBzZXQuCiAgICAgCisgICAgTm90ZTI6IHNuZC12eHA0NDAgZHJpdmVyIGlzIG1lcmdlZCB0byBzbmQtdnhwb2NrZXQgZHJpdmVyIHNpbmNlCisgICAgICAgICAgIEFMU0EgMS4wLjEwLgorCiAgIE1vZHVsZSBzbmQteW1mcGNpCiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE0MzYsNiArMTQ0OCwzNyBAQAogICAgIE5vdGU6IHRoZSBkcml2ZXIgaXMgYnVpbGQgb25seSB3aGVuIENPTkZJR19JU0EgaXMgc2V0LgogCiAKK0FDOTcgUXVpcmsgT3B0aW9uCis9PT09PT09PT09PT09PT09PQorCitUaGUgYWM5N19xdWlyayBvcHRpb24gaXMgdXNlZCB0byBlbmFibGUvb3ZlcnJpZGUgdGhlIHdvcmthcm91bmQgZm9yCitzcGVjaWZpYyBkZXZpY2VzIG9uIGRyaXZlcnMgZm9yIG9uLWJvYXJkIEFDJzk3IGNvbnRyb2xsZXJzIGxpa2UKK3NuZC1pbnRlbDh4MC4gIFNvbWUgaGFyZHdhcmUgaGF2ZSBzd2FwcGVkIG91dHB1dCBwaW5zIGJldHdlZW4gTWFzdGVyCithbmQgSGVhZHBob25lLCBvciBTdXJyb3VuZCAodGhhbmtzIHRvIGNvbmZ1c2lvbiBvZiBBQyc5Nworc3BlY2lmaWNhdGlvbnMgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24gOi0pCisKK1RoZSBkcml2ZXIgcHJvdmlkZXMgdGhlIGF1dG8tZGV0ZWN0aW9uIG9mIGtub3duIHByb2JsZW1hdGljIGRldmljZXMsCitidXQgc29tZSBtaWdodCBiZSB1bmtub3duIG9yIHdyb25nbHkgZGV0ZWN0ZWQuICBJbiBzdWNoIGEgY2FzZSwgcGFzcwordGhlIHByb3BlciB2YWx1ZSB3aXRoIHRoaXMgb3B0aW9uLgorCitUaGUgZm9sbG93aW5nIHN0cmluZ3MgYXJlIGFjY2VwdGVkOgorICAgIC0gZGVmYXVsdAlEb24ndCBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR0aW5nCisgICAgLSBkaXNhYmxlCURpc2FibGUgdGhlIHF1aXJrCisgICAgLSBocF9vbmx5CUJpbmQgTWFzdGVyIGFuZCBIZWFkcGhvbmUgY29udHJvbHMgYXMgYSBzaW5nbGUgY29udHJvbAorICAgIC0gc3dhcF9ocAlTd2FwIGhlYWRwaG9uZSBhbmQgbWFzdGVyIGNvbnRyb2xzCisgICAgLSBzd2FwX3N1cnJvdW5kICBTd2FwIG1hc3RlciBhbmQgc3Vycm91bmQgY29udHJvbHMKKyAgICAtIGFkX3NoYXJpbmcgIEZvciBBRDE5ODUsIHR1cm4gb24gT01TIGJpdCBhbmQgdXNlIGhlYWRwaG9uZQorICAgIC0gYWxjX2phY2sJRm9yIEFMQzY1eCwgdHVybiBvbiB0aGUgamFjayBzZW5zZSBtb2RlCisgICAgLSBpbnZfZWFwZAlJbnZlcnRlZCBFQVBEIGltcGxlbWVudGF0aW9uCisgICAgLSBtdXRlX2xlZAlCaW5kIEVBUEQgYml0IGZvciB0dXJuaW5nIG9uL29mZiBtdXRlIExFRAorCitGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlciB2YWx1ZSAtMSwgMCwKKy4uLiBhcmUgIGFjY2VwdGVkLCB0b28uCisKK0ZvciBleGFtcGxlLCBpZiAiTWFzdGVyIiB2b2x1bWUgY29udHJvbCBoYXMgbm8gZWZmZWN0IG9uIHlvdXIgZGV2aWNlCitidXQgb25seSAiSGVhZHBob25lIiBkb2VzLCBwYXNzIGFjOTdfcXVpcms9aHBfb25seSBtb2R1bGUgb3B0aW9uLgorCisKIENvbmZpZ3VyaW5nIE5vbi1JU0FQTlAgQ2FyZHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTU1Myw2ICsxNTk2LDggQEAKIAkgIC0gd2hvbGUtZnJhZyAgd3JpdGUgb25seSB3aG9sZSBmcmFnbWVudHMgKG9wdGltaXphdGlvbiBhZmZlY3RpbmcKIAkJCXBsYXliYWNrIG9ubHkpCiAJICAtIG5vLXNpbGVuY2UgIGRvIG5vdCBmaWxsIHNpbGVuY2UgYWhlYWQgdG8gYXZvaWQgY2xpY2tzCisJICAtIGJ1Z2d5LXB0cglSZXR1cm5zIHRoZSB3aGl0ZXNwYWNlIGJsb2NrcyBpbiBHRVRPUFRSIGlvY3RsCisJCQlpbnN0ZWFkIG9mIGZpbGxlZCBibG9ja3MKIAogICBFeGFtcGxlOiBlY2hvICJ4MTFhbXAgMTI4IDE2Mzg0IiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC9vc3MKICAgICAgICAgICAgZWNobyAic3F1YWtlIDAgMCBkaXNhYmxlIiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wYy9vc3MKQEAgLTE1ODksOSArMTYzNCwxNCBAQAogICAgIHVzZS4KIAogCi1MaW5rcwotPT09PT0KK0xpbmtzIGFuZCBBZGRyZXNzZXMKKz09PT09PT09PT09PT09PT09PT0KIAogICBBTFNBIHByb2plY3QgaG9tZXBhZ2UKICAgICAgICBodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcKIAorICBBTFNBIEJ1ZyBUcmFja2luZyBTeXN0ZW0KKyAgICAgICBodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYnVncy8KKworICBBTFNBIERldmVsb3BlcnMgTUwKKyAgICAgICBtYWlsdG86YWxzYS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbAppbmRleCAwNDc1NDc4Li4yNGU4NTUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCkBAIC00NDcsNyArNDQ3LDcgQEAKICAgICAgICAgICAuLi4uCiAKICAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovCi0gICAgICAgICAgY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwogCkBAIC05NDksNyArOTQ5LDcgQEAKICAgICAgICAgICBBZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEKICAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiAod2l0aAogICAgICAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCi0gICAgICAgICAgPGZ1bmN0aW9uPmtjYWxsb2MoKTwvZnVuY3Rpb24+LiAKKyAgICAgICAgICA8ZnVuY3Rpb24+a3phbGxvYygpPC9mdW5jdGlvbj4uIAogCiAgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KQEAgLTk1OCw3ICs5NTgsNyBAQAogICBteWNoaXBfdCAqY2hpcDsKICAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgTlVMTCk7CiAgIC4uLi4uCi0gIGNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICBjaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIF1dPgogICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KQEAgLTExMzYsNyArMTEzNiw3IEBACiAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOwogICAgICAgICAgIH0KIAotICAgICAgICAgIGNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICAgICAgICAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CkBAIC0xMjkyLDcgKzEyOTIsNyBAQAogICAgICAgbmVlZCB0byBpbml0aWFsaXplIHRoaXMgbnVtYmVyIGFzIC0xIGJlZm9yZSBhY3R1YWwgYWxsb2NhdGlvbiwKICAgICAgIHNpbmNlIGlycSAwIGlzIHZhbGlkLiBUaGUgcG9ydCBhZGRyZXNzIGFuZCBpdHMgcmVzb3VyY2UgcG9pbnRlcgogICAgICAgY2FuIGJlIGluaXRpYWxpemVkIGFzIG51bGwgYnkKLSAgICAgIDxmdW5jdGlvbj5rY2FsbG9jKCk8L2Z1bmN0aW9uPiBhdXRvbWF0aWNhbGx5LCBzbyB5b3UKKyAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPiBhdXRvbWF0aWNhbGx5LCBzbyB5b3UKICAgICAgIGRvbid0IGhhdmUgdG8gdGFrZSBjYXJlIG9mIHJlc2V0dGluZyB0aGVtLiAKICAgICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBhNjdiZjdkLi5hZGU3NDE1IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzcwLDcgKzM3MCwxMCBAQAogUzoJTWFpbnRhaW5lZAogCiBBVURJVCBTVUJTWVNURU0KLUw6CWxpbnV4LWF1ZGl0QHJlZGhhdC5jb20gKHN1YnNjcmliZXJzLW9ubHkpCitQOglEYXZpZCBXb29kaG91c2UKK006CWR3bXcyQGluZnJhZGVhZC5vcmcKK0w6CWxpbnV4LWF1ZGl0QHJlZGhhdC5jb20KK1c6CWh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9zZ3J1YmIvYXVkaXQvCiBTOglNYWludGFpbmVkCiAKIEFYLjI1IE5FVFdPUksgTEFZRVIKQEAgLTY4Myw2ICs2ODYsMTMgQEAKIE06CWcubGlha2hvdmV0c2tpQGdteC5kZQogUzoJTWFpbnRhaW5lZAogCitEQ0NQIFBST1RPQ09MCitQOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8KK006CWFjbWVAbWFuZHJpdmEuY29tCitMOglkY2NwQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy53bHVnLm9yZy5uei9EQ0NQCitTOglNYWludGFpbmVkCisKIERFQ25ldCBORVRXT1JLIExBWUVSCiBQOglQYXRyaWNrIENhdWxmaWVsZAogTToJcGF0cmlja0B0eWtlcGVuZ3Vpbi5jb20KQEAgLTIyNTYsNiArMjI2NiwxMiBAQAogTDoJcGNpaHBkLWRpc2N1c3NAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKK1NLR0UsIFNLWTIgMTAvMTAwLzEwMDAgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVJTCitQOglTdGVwaGVuIEhlbW1pbmdlcgorTToJc2hlbW1pbmdlckBvc2RsLm9yZworTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBTUEFSQyAoc3BhcmMzMik6CiBQOglXaWxsaWFtIEwuIElyd2luCiBNOgl3bGlAaG9sb21vcnBoeS5jb20KQEAgLTIyNjgsMTIgKzIyODQsNiBAQAogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyA/CiBTOglTdXBwb3J0ZWQKIAotU1BYIE5FVFdPUksgTEFZRVIKLVA6CUpheSBTY2h1bGlzdAotTToJanNjaGxzdEBzYW1iYS5vcmcKLUw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVM6CVN1cHBvcnRlZAotCiBTUk0gKEFscGhhKSBlbnZpcm9ubWVudCBhY2Nlc3MKIFA6CUphbi1CZW5lZGljdCBHbGF3CiBNOglqYmdsYXdAbHVnLW93bC5kZQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA0ZTBkN2M2Li44Y2Y2YmVjIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAxNAotRVhUUkFWRVJTSU9OID0tcmMxCitFWFRSQVZFUlNJT04gPS1yYzIKIE5BTUU9QWZmbHVlbnQgQWxiYXRyb3NzCiAKICMgKkRPQ1VNRU5UQVRJT04qCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggNzZkZDc4MC4uMmI1ODQ0ZCAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMTQ5LDYgKzE0OSw5IEBACiAJIm1ha2UgZ2NvbmZpZyIgICAgIFggd2luZG93cyAoR3RrKSBiYXNlZCBjb25maWd1cmF0aW9uIHRvb2wuCiAJIm1ha2Ugb2xkY29uZmlnIiAgIERlZmF1bHQgYWxsIHF1ZXN0aW9ucyBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YKIAkJCSAgIHlvdXIgZXhpc3RpbmcgLi8uY29uZmlnIGZpbGUuCisJIm1ha2Ugc2lsZW50b2xkY29uZmlnIgorCQkJICAgTGlrZSBhYm92ZSwgYnV0IGF2b2lkcyBjbHV0dGVyaW5nIHRoZSBzY3JlZW4KKwkJCSAgIHdpdGggcXVlc3Rpb24gYWxyZWFkeSBhbnN3ZXJlZC4KICAgIAogCU5PVEVTIG9uICJtYWtlIGNvbmZpZyI6CiAJLSBoYXZpbmcgdW5uZWNlc3NhcnkgZHJpdmVycyB3aWxsIG1ha2UgdGhlIGtlcm5lbCBiaWdnZXIsIGFuZCBjYW4KQEAgLTE2OSw5ICsxNzIsNiBAQAogCSAgc2hvdWxkIHByb2JhYmx5IGFuc3dlciAnbicgdG8gdGhlIHF1ZXN0aW9ucyBmb3IKICAgICAgICAgICAiZGV2ZWxvcG1lbnQiLCAiZXhwZXJpbWVudGFsIiwgb3IgImRlYnVnZ2luZyIgZmVhdHVyZXMuCiAKLSAtIENoZWNrIHRoZSB0b3AgTWFrZWZpbGUgZm9yIGZ1cnRoZXIgc2l0ZS1kZXBlbmRlbnQgY29uZmlndXJhdGlvbgotICAgKGRlZmF1bHQgU1ZHQSBtb2RlIGV0YykuIAotCiBDT01QSUxJTkcgdGhlIGtlcm5lbDoKIAogIC0gTWFrZSBzdXJlIHlvdSBoYXZlIGdjYyAyLjk1LjMgYXZhaWxhYmxlLgpAQCAtMTk5LDYgKzE5OSw5IEBACiAgICBhcmUgaW5zdGFsbGluZyBhIG5ldyBrZXJuZWwgd2l0aCB0aGUgc2FtZSB2ZXJzaW9uIG51bWJlciBhcyB5b3VyCiAgICB3b3JraW5nIGtlcm5lbCwgbWFrZSBhIGJhY2t1cCBvZiB5b3VyIG1vZHVsZXMgZGlyZWN0b3J5IGJlZm9yZSB5b3UKICAgIGRvIGEgIm1ha2UgbW9kdWxlc19pbnN0YWxsIi4KKyAgIEluIGFsdGVybmF0aXZlLCBiZWZvcmUgY29tcGlsaW5nLCBlZGl0IHlvdXIgTWFrZWZpbGUgYW5kIGNoYW5nZSB0aGUKKyAgICJFWFRSQVZFUlNJT04iIGxpbmUgLSBpdHMgY29udGVudCBpcyBhcHBlbmRlZCB0byB0aGUgcmVndWxhciBrZXJuZWwKKyAgIHZlcnNpb24uCiAKICAtIEluIG9yZGVyIHRvIGJvb3QgeW91ciBuZXcga2VybmVsLCB5b3UnbGwgbmVlZCB0byBjb3B5IHRoZSBrZXJuZWwKICAgIGltYWdlIChlLmcuIC4uLi9saW51eC9hcmNoL2kzODYvYm9vdC9iekltYWdlIGFmdGVyIGNvbXBpbGF0aW9uKQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCmluZGV4IDA2MzYxMTYuLjAxZmU5OTBkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtOTc1LDYgKzk3Niw3IEBACiAJbG9uZyB0aW1lb3V0OwogCWludCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CisJaW50IG1heF9mZHNldDsKIAogCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKIAlpZiAodHZwKSB7CkBAIC05OTYsOCArOTk4LDExIEBACiAJCX0KIAl9CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZmR0ID0gZmlsZXNfZmR0YWJsZShjdXJyZW50LT5maWxlcyk7Ci0JaWYgKG4gPCAwIHx8IG4gPiBmZHQtPm1heF9mZHNldCkKKwltYXhfZmRzZXQgPSBmZHQtPm1heF9mZHNldDsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAobiA8IDAgfHwgbiA+IG1heF9mZHNldCkKIAkJZ290byBvdXRfbm9mZHM7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYwppbmRleCA5ZTM2YjA3Li5kNWRhNmIxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYwpAQCAtMzk1LDYgKzM5NSwyMiBAQAogICovCiAKIHN0YXRpYyBpbnQgX19pbml0Citpc2FfaXJxX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpcnEpCit7CisJdTggaXJxODsKKworCWlmIChpcnEgPiAwKQorCQlyZXR1cm4gaXJxOworCisJLyogVGhpcyBpbnRlcnJ1cHQgaXMgcm91dGVkIHZpYSBJU0EgYnJpZGdlLCBzbyB3ZSdsbAorCSAgIGp1c3QgaGF2ZSB0byB0cnVzdCB3aGF0ZXZlciB2YWx1ZSB0aGUgY29uc29sZSBtaWdodAorCSAgIGhhdmUgYXNzaWduZWQuICAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaXJxOCk7CisKKwlyZXR1cm4gaXJxOCAmIDB4ZjsKK30KKworc3RhdGljIGludCBfX2luaXQKIGRwMjY0X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBjaGFyIGlycV90YWJbNl1bNV0gX19pbml0ZGF0YSA9IHsKQEAgLTQwNywyNSArNDIzLDEzIEBACiAJCXsgMTYrIDMsIDE2KyAzLCAxNisgMiwgMTYrIDEsIDE2KyAwfSAgLyogSWRTZWwgMTAgc2xvdCAzICovCiAJfTsKIAljb25zdCBsb25nIG1pbl9pZHNlbCA9IDUsIG1heF9pZHNlbCA9IDEwLCBpcnFzX3Blcl9zbG90ID0gNTsKLQogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGRldi0+c3lzZGF0YTsKIAlpbnQgaXJxID0gQ09NTU9OX1RBQkxFX0xPT0tVUDsKIAotCWlmIChpcnEgPiAwKSB7CisJaWYgKGlycSA+IDApCiAJCWlycSArPSAxNiAqIGhvc2UtPmluZGV4OwotCX0gZWxzZSB7Ci0JCS8qID8/PyBUaGUgQ29udGFxIElERSBjb250cm9sbGVyIG9uIHRoZSBJU0EgYnJpZGdlIHVzZXMKLQkJICAgImxlZ2FjeSIgaW50ZXJydXB0cyAxNCBhbmQgMTUuICBJIGRvbid0IGtub3cgaWYgYW55dGhpbmcKLQkJICAgY2FuIHdpbmQgdXAgYXQgdGhlIHNhbWUgc2xvdCtwaW4gb24gaG9zZTEsIHNvIHdlJ2xsCi0JCSAgIGp1c3QgaGF2ZSB0byB0cnVzdCB3aGF0ZXZlciB2YWx1ZSB0aGUgY29uc29sZSBtaWdodAotCQkgICBoYXZlIGFzc2lnbmVkLiAgKi8KIAotCQl1OCBpcnE4OwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgJmlycTgpOwotCQlpcnEgPSBpcnE4OwotCX0KLQotCXJldHVybiBpcnE7CisJcmV0dXJuIGlzYV9pcnFfZml4dXAoZGV2LCBpcnEpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtNDUzLDcgKzQ1Nyw4IEBACiAJCXsgICAgMjQsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3fSAgLyogSWRTZWwgMTUgc2xvdCA1IFBDSTIqLwogCX07CiAJY29uc3QgbG9uZyBtaW5faWRzZWwgPSAzLCBtYXhfaWRzZWwgPSAxNSwgaXJxc19wZXJfc2xvdCA9IDU7Ci0JcmV0dXJuIENPTU1PTl9UQUJMRV9MT09LVVA7CisKKwlyZXR1cm4gaXNhX2lycV9maXh1cChkZXYsIENPTU1PTl9UQUJMRV9MT09LVVApOwogfQogCiBzdGF0aWMgdTggX19pbml0CkBAIC01MDcsNyArNTEyLDggQEAKIAkJeyAgICA0NywgICAgNDcsICAgIDQ2LCAgICA0NSwgICAgNDR9LCAvKiBJZFNlbCAxNyBzbG90IDMgKi8KIAl9OwogCWNvbnN0IGxvbmcgbWluX2lkc2VsID0gNywgbWF4X2lkc2VsID0gMTcsIGlycXNfcGVyX3Nsb3QgPSA1OwotCXJldHVybiBDT01NT05fVEFCTEVfTE9PS1VQOworCisJcmV0dXJuIGlzYV9pcnFfZml4dXAoZGV2LCBDT01NT05fVEFCTEVfTE9PS1VQKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQKQEAgLTUyNCwxNCArNTMwLDEzIEBACiAJCXsgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xfSAgLyogSWRTZWwgNyBJU0EgQnJpZGdlICovCiAJfTsKIAljb25zdCBsb25nIG1pbl9pZHNlbCA9IDEsIG1heF9pZHNlbCA9IDcsIGlycXNfcGVyX3Nsb3QgPSA1OwotCiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gZGV2LT5zeXNkYXRhOwogCWludCBpcnEgPSBDT01NT05fVEFCTEVfTE9PS1VQOwogCiAJaWYgKGlycSA+IDApCiAJCWlycSArPSAxNiAqIGhvc2UtPmluZGV4OwogCi0JcmV0dXJuIGlycTsKKwlyZXR1cm4gaXNhX2lycV9maXh1cChkZXYsIGlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL29mdy1zaGFyay5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL29mdy1zaGFyay5jCmluZGV4IDdmNmY1ZGIuLjQ2NWM1NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9vZnctc2hhcmsuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvb2Z3LXNoYXJrLmMKQEAgLTI1Niw1ICsyNTYsNSBAQAogCXRlbXBbMTFdPSdcMCc7CiAJbWVtX2xlbiA9IE9GX2dldHByb3BsZW4obyxwaGFuZGxlLCB0ZW1wKTsKIAlPRl9nZXRwcm9wKG8scGhhbmRsZSwgdGVtcCwgYnVmZmVyLCBtZW1fbGVuKTsKLQkodW5zaWduZWQgY2hhcikgcG9pbnRlclszMl0gPSAoKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyKVttZW1fbGVuLTJdOworCSogKCh1bnNpZ25lZCBjaGFyICopICZwb2ludGVyWzMyXSkgPSAoKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyKVttZW1fbGVuLTJdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCmluZGV4IDI3ODZmN2MuLmE3YmQ4NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYworKysgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKQEAgLTU1MSw3ICs1NTEsNyBAQAogCXUxNglMQ01fU1BJTUQ7CiB9OwogCi1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHBtX21lc3NhZ2VfdCwgdTMyIGxldmVsKQorc3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQogewogCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGxvY29tb19zYXZlX2RhdGEgKnNhdmU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZwppbmRleCBmNjdjYTAxLi4zMGU2NDQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmMyCi0jIFRodSBKdWwgIDcgMTY6NDE6MjEgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzCisjIFdlZCBTZXAgMTQgMTA6NTE6NTIgMjAwNQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTEzNSw3ICsxMzUsNiBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKQEAgLTE3OSw2ICsxNzgsNjggQEAKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIAogIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMjQ4LDYgKzMwOSw3IEBACiBDT05GSUdfTVREX0lYUDIwMDA9eQogIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC0zMzQsNzIgKzM5Niw4IEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNTA5LDYgKzUwNyw4IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTYzNSw3ICs2MzUsNyBAQAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lYUDIwMDAgaXMgbm90IHNldAorQ09ORklHX0kyQ19JWFAyMDAwPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldApAQCAtNjQ5LDExICs2NDksMjggQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19TRU5TT1I9eQogCiAjCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotQ09ORklHX0kyQ19TRU5TT1I9eQorIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldApAQCAtNjc5LDMwICs2OTYsMTUgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtNzcwLDYgKzc3Miw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgxMiw4ICs4MTUsNyBAQAogIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZwppbmRleCA1YzZjOTI4Li42Nzg3MjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzIKLSMgVGh1IEp1bCAgNyAxNjo0OTowMSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMKKyMgV2VkIFNlcCAxNCAxMDo1MjowMSAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMTM2LDcgKzEzNiw2IEBACiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldApAQCAtMTgwLDYgKzE3OSw2OCBAQAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogCiAjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIwogIyBEZXZpY2UgRHJpdmVycwogIwogCkBAIC0yNDksNiArMzEwLDcgQEAKIENPTkZJR19NVERfSVhQMjAwMD15CiAjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKQEAgLTMzNSw3MiArMzk3LDggQEAKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC01MTAsNiArNTA4LDggQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtNjM2LDcgKzYzNiw3IEBACiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVhQMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0lYUDIwMDA9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC02NTAsMTEgKzY1MCwyOCBAQAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1NFTlNPUj15CiAKICMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX1NFTlNPUj15CisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CkBAIC02ODAsMzAgKzY5NywxNSBAQAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX0VFUFJPTT15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCkBAIC03NzEsNiArNzczLDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtODEzLDggKzgxNiw3IEBACiAjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9SVElNRT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCmluZGV4IDZkYzQwZjYuLjM4YzlhNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjMgotIyBUaHUgSnVsICA3IDE2OjQ5OjA4IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMworIyBXZWQgU2VwIDE0IDEwOjUyOjEwIDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0xMzYsNyArMTM2LDYgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19TTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CkBAIC0xODAsNiArMTc5LDY4IEBACiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIwogIyBEZXZpY2UgRHJpdmVycwogIwogCkBAIC0yNDksNiArMzEwLDcgQEAKIENPTkZJR19NVERfSVhQMjAwMD15CiAjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKQEAgLTMzNSw3MiArMzk3LDggQEAKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNTExLDYgKzUwOSw4IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTYzNyw3ICs2MzcsNyBAQAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lYUDIwMDAgaXMgbm90IHNldAorQ09ORklHX0kyQ19JWFAyMDAwPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldApAQCAtNjUxLDExICs2NTEsMjggQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19TRU5TT1I9eQogCiAjCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotQ09ORklHX0kyQ19TRU5TT1I9eQorIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldApAQCAtNjgxLDMwICs2OTgsMTUgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtNzcyLDYgKzc3NCw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgxNCw4ICs4MTcsNyBAQAogIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZwppbmRleCBkMmJiMGI3Li4yNjFlMjM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzIKLSMgVGh1IEp1bCAgNyAxNjo0OToyMCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMKKyMgV2VkIFNlcCAxNCAxMDo1MjoyMyAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMTM2LDcgKzEzNiw2IEBACiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldApAQCAtMTgwLDYgKzE3OSw2OCBAQAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogCiAjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIwogIyBEZXZpY2UgRHJpdmVycwogIwogCkBAIC0yNDksNiArMzEwLDcgQEAKIENPTkZJR19NVERfSVhQMjAwMD15CiAjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKQEAgLTMzNSw3MiArMzk3LDggQEAKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC01MTAsNiArNTA4LDggQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtNjM2LDcgKzYzNiw3IEBACiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVhQMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0lYUDIwMDA9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC02NTAsMTEgKzY1MCwyOCBAQAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1NFTlNPUj15CiAKICMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX1NFTlNPUj15CisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CkBAIC02ODAsMzAgKzY5NywxNSBAQAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX0VFUFJPTT15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCkBAIC03NzEsNiArNzczLDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtODEzLDggKzgxNiw3IEBACiAjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9SVElNRT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCmluZGV4IDJkNmY5NjAuLjEyZWYyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjMgotIyBUaHUgSnVsICA3IDE2OjQ5OjEzIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMworIyBXZWQgU2VwIDE0IDEwOjUyOjE2IDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0xMzYsNyArMTM2LDYgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19TTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CkBAIC0xODAsNiArMTc5LDY4IEBACiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorCisjCiAjIERldmljZSBEcml2ZXJzCiAjCiAKQEAgLTI0OSw2ICszMTAsNyBAQAogQ09ORklHX01URF9JWFAyMDAwPXkKICMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwpAQCAtMzM1LDcyICszOTcsOCBAQAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIAogIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKQEAgLTUxMSw2ICs1MDksOCBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC02MzcsNyArNjM3LDcgQEAKICMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JWFAyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSVhQMjAwMD15CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKQEAgLTY1MSwxMSArNjUxLDI4IEBACiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfU0VOU09SPXkKIAogIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfU0VOU09SPXkKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKQEAgLTY4MSwzMCArNjk4LDE1IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKQEAgLTc3Miw2ICs3NzQsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CkBAIC04MTQsOCArODE3LDcgQEAKICMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKICMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX1JUSU1FPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKaW5kZXggOTQ5ZWM0NC4uMmFkNGFhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQkubG9uZwlzeXNfd2FpdDQKIC8qIDExNSAqLwkubG9uZwlzeXNfc3dhcG9mZgogCQkubG9uZwlzeXNfc3lzaW5mbwotCQkubG9uZwlzeXNfaXBjCisJCS5sb25nCXN5c19pcGNfd3JhcHBlcgogCQkubG9uZwlzeXNfZnN5bmMKIAkJLmxvbmcJc3lzX3NpZ3JldHVybl93cmFwcGVyCiAvKiAxMjAgKi8JLmxvbmcJc3lzX2Nsb25lX3dyYXBwZXIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCBkYjMwMmM2Li44MWQ0NTBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0yNzMsNiArMjczLDEwIEBACiAJCXN0cglyNSwgW3NwLCAjNF0KIAkJYglzeXNfbWJpbmQKIAorc3lzX2lwY193cmFwcGVyOgorCQlzdHIJcjUsIFtzcCwgIzRdCQlAIHB1c2ggc2l4dGggYXJnCisJCWIJc3lzX2lwYworCiAvKgogICogTm90ZTogb2ZmXzRrIChyNSkgaXMgYWx3YXlzIHVuaXRzIG9mIDRLLiAgSWYgd2UgY2FuJ3QgZG8gdGhlIHJlcXVlc3RlZAogICogb2Zmc2V0LCB3ZSByZXR1cm4gRUlOVkFMLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9hcm0va2VybmVsL3NlbWFwaG9yZS5jCmluZGV4IGFjNDIzZTMuLjRjMzFmMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2VtYXBob3JlLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogICogcmVnaXN0ZXJzIChyMCB0byByMyBhbmQgbHIpLCBidXQgbm90IGlwLCBhcyB3ZSB1c2UgaXQgYXMgYSByZXR1cm4KICAqIHZhbHVlIGluIHNvbWUgY2FzZXMuLgogICovCi1hc20oIgkuc2VjdGlvbiAuc2NoZWQudGV4dCxcImF4XCIJCVxuXAorYXNtKCIJLnNlY3Rpb24gLnNjaGVkLnRleHQsXCJheFwiLCVwcm9nYml0cwlcblwKIAkuYWxpZ24JNQkJCQlcblwKIAkuZ2xvYmwJX19kb3duX2ZhaWxlZAkJCVxuXAogX19kb3duX2ZhaWxlZDoJCQkJCVxuXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCA0NTU0Yzk2Li5lN2QyMmRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtNjI0LDYgKzYyNCw5IEBACiAJCXByaW50aygiIC0gZXh0cmEgZGF0YSA9ICVwIiwgZGF0YSk7CiAJcHJpbnRrKCJcbiIpOwogCSooaW50ICopMCA9IDA7CisKKwkvKiBBdm9pZCAibm9yZXR1cm4gZnVuY3Rpb24gZG9lcyByZXR1cm4iICovCisJZm9yICg7Oyk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fYnVnKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhZDJkNjZjLi4wOGU1OGVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjMsMjAgKzIzLDIwIEBACiAJCQkqKC5pbml0LnRleHQpCiAJCQlfZWluaXR0ZXh0ID0gLjsKIAkJX19wcm9jX2luZm9fYmVnaW4gPSAuOwotCQkJKigucHJvYy5pbmZvKQorCQkJKigucHJvYy5pbmZvLmluaXQpCiAJCV9fcHJvY19pbmZvX2VuZCA9IC47CiAJCV9fYXJjaF9pbmZvX2JlZ2luID0gLjsKLQkJCSooLmFyY2guaW5mbykKKwkJCSooLmFyY2guaW5mby5pbml0KQogCQlfX2FyY2hfaW5mb19lbmQgPSAuOwogCQlfX3RhZ3RhYmxlX2JlZ2luID0gLjsKLQkJCSooLnRhZ2xpc3QpCisJCQkqKC50YWdsaXN0LmluaXQpCiAJCV9fdGFndGFibGVfZW5kID0gLjsKIAkJLiA9IEFMSUdOKDE2KTsKIAkJX19zZXR1cF9zdGFydCA9IC47CiAJCQkqKC5pbml0LnNldHVwKQogCQlfX3NldHVwX2VuZCA9IC47CiAJCV9fZWFybHlfYmVnaW4gPSAuOwotCQkJKihfX2Vhcmx5X3BhcmFtKQorCQkJKiguZWFybHlfcGFyYW0uaW5pdCkKIAkJX19lYXJseV9lbmQgPSAuOwogCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAkJCSooLmluaXRjYWxsMS5pbml0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jCmluZGV4IGFlMWZhMDkuLjM5YjA2ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMKQEAgLTEyMyw2ICsxMjMsNyBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGl4ZHA0MjVfZGV2aWNlcywgQVJSQVlfU0laRShpeGRwNDI1X2RldmljZXMpKTsKIH0KIAorI2lmZGVmIENPTkZJR19BUkNIX0lYRFA0NjUKIE1BQ0hJTkVfU1RBUlQoSVhEUDQyNSwgIkludGVsIElYRFA0MjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQogCS8qIE1haW50YWluZXI6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gKi8KIAkucGh5c19yYW0JPSBQSFlTX09GRlNFVCwKQEAgLTEzNCw3ICsxMzUsOSBAQAogCS5ib290X3BhcmFtcwk9IDB4MDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gaXhkcDQyNV9pbml0LAogTUFDSElORV9FTkQKKyNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfSVhEUDQ2NQogTUFDSElORV9TVEFSVChJWERQNDY1LCAiSW50ZWwgSVhEUDQ2NSBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCiAJLyogTWFpbnRhaW5lcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAqLwogCS5waHlzX3JhbQk9IFBIWVNfT0ZGU0VULApAQCAtMTQ2LDcgKzE0OSw5IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMTAwLAogCS5pbml0X21hY2hpbmUJPSBpeGRwNDI1X2luaXQsCiBNQUNISU5FX0VORAorI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9QUlBNQzExMDAKIE1BQ0hJTkVfU1RBUlQoSVhDRFAxMTAwLCAiSW50ZWwgSVhDRFAxMTAwIERldmVsb3BtZW50IFBsYXRmb3JtIikKIAkvKiBNYWludGFpbmVyOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuICovCiAJLnBoeXNfcmFtCT0gUEhZU19PRkZTRVQsCkBAIC0xNTgsNiArMTYzLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGl4ZHA0MjVfaW5pdCwKIE1BQ0hJTkVfRU5ECisjZW5kaWYKIAogLyoKICAqIEF2aWxhIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIElYRFA0MjUgZXhjZXB0IHRoYXQgaXQgYWRkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggNDA1YTU1Zi4uM2U1ZjY5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC0yMCw0MCArMjAsNjYgQEAKIAlzZWxlY3QgUFhBMjV4CiAKIGNvbmZpZyBQWEFfU0hBUlBTTAotCWJvb2wgIlNIQVJQIFNMLTU2MDAgYW5kIFNMLUM3eHggTW9kZWxzIgotCXNlbGVjdCBQWEEyNXgKKwlib29sICJTSEFSUCBaYXVydXMgU0wtNTYwMCwgU0wtQzd4eCBhbmQgU0wtQ3h4MDAgTW9kZWxzIgogCXNlbGVjdCBTSEFSUF9TQ09PUAogCXNlbGVjdCBTSEFSUF9QQVJBTQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYQotCSAgU2hhcnAgU0wtNTYwMCAoUG9vZGxlKSwgU2hhcnAgU0wtQzcwMCAoQ29yZ2kpLAotCSAgU0wtQzc1MCAoU2hlcGhlcmQpIG9yIGEgU2hhcnAgU0wtQzc2MCAoSHVza3kpCi0JICBoYW5kaGVsZCBjb21wdXRlci4KKwkgIFNoYXJwIFphdXJ1cyBTTC01NjAwIChQb29kbGUpLCBTTC1DNzAwIChDb3JnaSksCisJICBTTC1DNzUwIChTaGVwaGVyZCksIFNMLUM3NjAgKEh1c2t5KSwgU0wtQzEwMDAgKEFraXRhKSwKKwkgIFNMLUMzMDAwIChTcGl0eikgb3IgU0wtQzMxMDAgKEJvcnpvaSkgaGFuZGhlbGQgY29tcHV0ZXIuCiAKIGVuZGNob2ljZQogCitpZiBQWEFfU0hBUlBTTAorCitjaG9pY2UKKwlwcm9tcHQgIlNlbGVjdCB0YXJnZXQgU2hhcnAgWmF1cnVzIGRldmljZSByYW5nZSIKKworY29uZmlnIFBYQV9TSEFSUFNMXzI1eAorCWJvb2wgIlNoYXJwIFBYQTI1eCBtb2RlbHMgKFNMLTU2MDAgYW5kIFNMLUM3eHgpIgorCXNlbGVjdCBQWEEyNXgKKworY29uZmlnIFBYQV9TSEFSUFNMXzI3eAorCWJvb2wgIlNoYXJwIFBYQTI3MCBtb2RlbHMgKFNMLUN4eDAwKSIKKwlzZWxlY3QgUFhBMjd4CisKK2VuZGNob2ljZQorCitlbmRpZgorCiBlbmRtZW51CiAKIGNvbmZpZyBNQUNIX1BPT0RMRQogCWJvb2wgIkVuYWJsZSBTaGFycCBTTC01NjAwIChQb29kbGUpIFN1cHBvcnQiCi0JZGVwZW5kcyBQWEFfU0hBUlBTTAorCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjV4CiAJc2VsZWN0IFNIQVJQX0xPQ09NTwogCiBjb25maWcgTUFDSF9DT1JHSQogCWJvb2wgIkVuYWJsZSBTaGFycCBTTC1DNzAwIChDb3JnaSkgU3VwcG9ydCIKLQlkZXBlbmRzIFBYQV9TSEFSUFNMCisJZGVwZW5kcyBQWEFfU0hBUlBTTF8yNXgKIAlzZWxlY3QgUFhBX1NIQVJQX0M3eHgKIAogY29uZmlnIE1BQ0hfU0hFUEhFUkQKIAlib29sICJFbmFibGUgU2hhcnAgU0wtQzc1MCAoU2hlcGhlcmQpIFN1cHBvcnQiCi0JZGVwZW5kcyBQWEFfU0hBUlBTTAorCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjV4CiAJc2VsZWN0IFBYQV9TSEFSUF9DN3h4CiAKIGNvbmZpZyBNQUNIX0hVU0tZCiAJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLUM3NjAgKEh1c2t5KSBTdXBwb3J0IgotCWRlcGVuZHMgUFhBX1NIQVJQU0wKKwlkZXBlbmRzIFBYQV9TSEFSUFNMXzI1eAogCXNlbGVjdCBQWEFfU0hBUlBfQzd4eAogCitjb25maWcgTUFDSF9TUElUWgorCWJvb2wgIkVuYWJsZSBTaGFycCBaYXVydXMgU0wtMzAwMCAoU3BpdHopIFN1cHBvcnQiCisJZGVwZW5kcyBQWEFfU0hBUlBTTF8yN3gKKwlzZWxlY3QgUFhBX1NIQVJQX0N4eDAwCisKK2NvbmZpZyBNQUNIX0JPUlpPSQorCWJvb2wgIkVuYWJsZSBTaGFycCBaYXVydXMgU0wtMzEwMCAoQm9yem9pKSBTdXBwb3J0IgorCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjd4CisJc2VsZWN0IFBYQV9TSEFSUF9DeHgwMAorCiBjb25maWcgUFhBMjV4CiAJYm9vbAogCWhlbHAKQEAgLTc0LDQgKzEwMCw5IEBACiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGFsbCBTaGFycCBDN3h4IG1vZGVscwogCitjb25maWcgUFhBX1NIQVJQX0N4eDAwCisJYm9vbAorCWhlbHAKKwkgIEVuYWJsZSBjb21tb24gc3VwcG9ydCBmb3IgU2hhcnAgQ3h4MDAgbW9kZWxzCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IDMzZGFlOTkuLmY2MDlhMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBvYmotJChDT05GSUdfTUFDSF9NQUlOU1RPTkUpICs9IG1haW5zdG9uZS5vCiBvYmotJChDT05GSUdfQVJDSF9QWEFfSURQKSArPSBpZHAubwogb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DN3h4KQkrPSBjb3JnaS5vIGNvcmdpX3NzcC5vIGNvcmdpX2xjZC5vIHNzcC5vCitvYmotJChDT05GSUdfUFhBX1NIQVJQX0N4eDAwKQkrPSBzcGl0ei5vIGNvcmdpX3NzcC5vIGNvcmdpX2xjZC5vIHNzcC5vCiBvYmotJChDT05GSUdfTUFDSF9QT09ETEUpCSs9IHBvb2RsZS5vCiAKICMgU3VwcG9ydCBmb3IgYmxpbmt5IGxpZ2h0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKaW5kZXggMDdiNWRkNC4uYmUzNzU4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAic2hhcnBzbC5oIgogCiAKIC8qCkBAIC05NCwxNCArOTUsMzAgQEAKIAkuaWQJCT0gLTEsCiB9OwogCitzdHJ1Y3QgY29yZ2lzc3BfbWFjaGluZm8gY29yZ2lfc3NwX21hY2hpbmZvID0geworCS5wb3J0CQk9IDEsCisJLmNzX2xjZGNvbgk9IENPUkdJX0dQSU9fTENEQ09OX0NTLAorCS5jc19hZHM3ODQ2CT0gQ09SR0lfR1BJT19BRFM3ODQ2X0NTLAorCS5jc19tYXgxMTExCT0gQ09SR0lfR1BJT19NQVgxMTExX0NTLAorCS5jbGtfbGNkY29uCT0gNzYsCisJLmNsa19hZHM3ODQ2CT0gMiwKKwkuY2xrX21heDExMTEJPSA4LAorfTsKKwogCiAvKgogICogQ29yZ2kgQmFja2xpZ2h0IERldmljZQogICovCitzdGF0aWMgc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gY29yZ2lfYmxfbWFjaGluZm8gPSB7CisJLm1heF9pbnRlbnNpdHkgPSAweDJmLAorCS5zZXRfYmxfaW50ZW5zaXR5ID0gY29yZ2lfYmxfc2V0X2ludGVuc2l0eSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvcmdpYmxfZGV2aWNlID0gewogCS5uYW1lCQk9ICJjb3JnaS1ibCIsCiAJLmRldgkJPSB7CiAgCQkucGFyZW50ID0gJmNvcmdpZmJfZGV2aWNlLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY29yZ2lfYmxfbWFjaGluZm8sCiAJfSwKIAkuaWQJCT0gLTEsCiB9OwpAQCAtMTE5LDEyICsxMzYsMjkgQEAKIC8qCiAgKiBDb3JnaSBUb3VjaCBTY3JlZW4gRGV2aWNlCiAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29yZ2l0c19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBDT1JHSV9JUlFfR1BJT19UUF9JTlQsCisJCS5lbmQJCT0gQ09SR0lfSVJRX0dQSU9fVFBfSU5ULAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29yZ2l0c19tYWNoaW5mbyAgY29yZ2lfdHNfbWFjaGluZm8gPSB7CisJLmdldF9oc3luY19sZW4gICA9IGNvcmdpX2dldF9oc3luY19sZW4sCisJLnB1dF9oc3luYyAgICAgICA9IGNvcmdpX3B1dF9oc3luYywKKwkud2FpdF9oc3luYyAgICAgID0gY29yZ2lfd2FpdF9oc3luYywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvcmdpdHNfZGV2aWNlID0gewogCS5uYW1lCQk9ICJjb3JnaS10cyIsCiAJLmRldgkJPSB7CiAgCQkucGFyZW50ID0gJmNvcmdpc3NwX2RldmljZS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNvcmdpX3RzX21hY2hpbmZvLAogCX0sCiAJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjb3JnaXRzX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY29yZ2l0c19yZXNvdXJjZXMsCiB9OwogCiAKQEAgLTE2NCwxMyArMTk4LDEwIEBACiB7CiAJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAoKCAxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykKIAkJR1BTUjEgPSBHUElPX2JpdChDT1JHSV9HUElPX1NEX1BXUik7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvZmZcbiIsIF9fRlVOQ1RJT05fXyk7CisJZWxzZQogCQlHUENSMSA9IEdQSU9fYml0KENPUkdJX0dQSU9fU0RfUFdSKTsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgY29yZ2lfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0yMjUsNyArMjU2LDIwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjb3JnaV9pbml0KHZvaWQpCiB7CisJLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KKwlQV0VSICA9IDB4MDAwMDAwMDI7CisJUEZFUiAgPSAweDAwMDAwMDAwOworCVBSRVIgID0gMHgwMDAwMDAwMjsKKwlQR1NSMCA9IDB4MDE1OEMwMDA7CisJUEdTUjEgPSAweDAwRkYwMDgwOworCVBHU1IyID0gMHgwMDAxQzAwNDsKKwkvKiBTdG9wIDMuNk1IeiBhbmQgZHJpdmUgSElHSCB0byBQQ01DSUEgYW5kIENTICovCisJUENGUiB8PSBQQ0ZSX09QREU7CisKKwljb3JnaV9zc3Bfc2V0X21hY2hpbmZvKCZjb3JnaV9zc3BfbWFjaGluZm8pOworCiAJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX1VTQl9QVUxMVVAgfCBHUElPX09VVCk7CisJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX0hTWU5DIHwgR1BJT19JTik7CiAgCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKIAlweGFfc2V0X21jaV9pbmZvKCZjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAKQEAgLTI0OCw0MiArMjkyLDE0IEBACiAJCW1pLT5iYW5rWzBdLnNpemUgPSAoNjQqMTAyNCoxMDI0KTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGNvcmdpX2luaXRfaXJxKHZvaWQpCi17Ci0JcHhhX2luaXRfaXJxKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgY29yZ2lfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0vKiAgICB2aXJ0dWFsICAgICBwaHlzaWNhbCAgICBsZW5ndGggICAgICAqLwotLyoJeyAweGYxMDAwMDAwLCAweDA4MDAwMDAwLCAweDAxMDAwMDAwLCBNVF9ERVZJQ0UgfSwqLyAvKiBMQ0RDIChyZWFkYWJsZSBmb3IgUXQgZHJpdmVyKSAqLwotLyoJeyAweGVmNzAwMDAwLCAweDEwODAwMDAwLCAweDAwMDAxMDAwLCBNVF9ERVZJQ0UgfSwqLyAgLyogU0NPT1AgKi8KLQl7IDB4ZWY4MDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIE1UX0RFVklDRSB9LCAvKiBCb290IEZsYXNoICovCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY29yZ2lfbWFwX2lvKHZvaWQpCi17Ci0JcHhhX21hcF9pbygpOwotCWlvdGFibGVfaW5pdChjb3JnaV9pb19kZXNjLEFSUkFZX1NJWkUoY29yZ2lfaW9fZGVzYykpOwotCi0JLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KLQlQV0VSICA9IDB4MDAwMDAwMDI7Ci0JUEZFUiAgPSAweDAwMDAwMDAwOwotCVBSRVIgID0gMHgwMDAwMDAwMjsKLQlQR1NSMCA9IDB4MDE1OEMwMDA7Ci0JUEdTUjEgPSAweDAwRkYwMDgwOwotCVBHU1IyID0gMHgwMDAxQzAwNDsKLQkvKiBTdG9wIDMuNk1IeiBhbmQgZHJpdmUgSElHSCB0byBQQ01DSUEgYW5kIENTICovCi0JUENGUiB8PSBQQ0ZSX09QREU7Ci19Ci0KICNpZmRlZiBDT05GSUdfTUFDSF9DT1JHSQogTUFDSElORV9TVEFSVChDT1JHSSwgIlNIQVJQIENvcmdpIikKIAkucGh5c19yYW0JPSAweGEwMDAwMDAwLAogCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuZml4dXAJCT0gZml4dXBfY29yZ2ksCi0JLm1hcF9pbwkJPSBjb3JnaV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gY29yZ2lfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gY29yZ2lfaW5pdCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECkBAIC0yOTUsOCArMzExLDggQEAKIAkucGh5c19pbwk9IDB4NDAwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmZpeHVwCQk9IGZpeHVwX2NvcmdpLAotCS5tYXBfaW8JCT0gY29yZ2lfbWFwX2lvLAotCS5pbml0X2lycQk9IGNvcmdpX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGNvcmdpX2luaXQsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCiBNQUNISU5FX0VORApAQCAtMzA4LDggKzMyNCw4IEBACiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5maXh1cAkJPSBmaXh1cF9jb3JnaSwKLQkubWFwX2lvCQk9IGNvcmdpX21hcF9pbywKLQkuaW5pdF9pcnEJPSBjb3JnaV9pbml0X2lycSwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBjb3JnaV9pbml0LAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKaW5kZXggZGVhYzI5Yy4uYzVlZmNkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKQEAgLTEsMTAgKzEsMTQgQEAKIC8qCiAgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCiAgKgotICogQ29yZ2kgTENEIFNwZWNpZmljIENvZGUgZm9yIEFUSSBJbWFnZW9uIHcxMDAgKFdhbGxhYnkpCisgKiBDb3JnaS9TcGl0eiBMQ0QgU3BlY2lmaWMgQ29kZQogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBSaWNoYXJkIFB1cmRpZQogICoKKyAqIENvbm5lY3Rpdml0eToKKyAqICAgQ29yZ2kgLSBMQ0QgdG8gQVRJIEltYWdlb24gdzEwMCAoV2FsbGFieSkKKyAqICAgU3BpdHogLSBMQ0QgdG8gUFhBIEZyYW1lYnVmZmVyCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTE0LDkgKzE4LDE3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2FraXRhLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29yZ2kuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2hhcnBzbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NwaXR6Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvc2hhcnBzbF9wYXJhbS5oPgotI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgorI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogLyogUmVnaXN0ZXIgQWRkcmVzc2VzICovCiAjZGVmaW5lIFJFU0NUTF9BRFJTICAgICAweDAwCkBAIC0xMzQsMTAgKzE0NiwxMCBAQAogfQogCiAvKiBTZXQgUGhhc2UgQWRqdWN0ICovCi1zdGF0aWMgdm9pZCBsY2R0Z19zZXRfcGhhZGFkaihzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyKQorc3RhdGljIHZvaWQgbGNkdGdfc2V0X3BoYWRhZGooaW50IG1vZGUpCiB7CiAJaW50IGFkajsKLQlzd2l0Y2gocGFyLT54cmVzKSB7CisJc3dpdGNoKG1vZGUpIHsKIAkJY2FzZSA0ODA6CiAJCWNhc2UgNjQwOgogCQkJLyogU2V0dGluZyBmb3IgVkdBICovCkBAIC0xNjEsNyArMTczLDcgQEAKIAogc3RhdGljIGludCBsY2RfaW5pdGVkOwogCi1zdGF0aWMgdm9pZCBsY2R0Z19od19pbml0KHN0cnVjdCB3MTAwZmJfcGFyICpwYXIpCitzdGF0aWMgdm9pZCBsY2R0Z19od19pbml0KGludCBtb2RlKQogewogCWlmICghbGNkX2luaXRlZCkgewogCQlpbnQgY29tYWRqOwpAQCAtMjE1LDcgKzIyNyw3IEBACiAJCWNvcmdpX3NzcF9sY2R0Z19zZW5kKFBJQ1RSTF9BRFJTLCAwKTsKIAogCQkvKiBTZXQgUGhhc2UgQWRqdWN0ICovCi0JCWxjZHRnX3NldF9waGFkYWRqKHBhcik7CisJCWxjZHRnX3NldF9waGFkYWRqKG1vZGUpOwogCiAJCS8qIEluaXRpYWxpemUgZm9yIElucHV0IFNpZ25hbHMgZnJvbSBBVEkgKi8KIAkJY29yZ2lfc3NwX2xjZHRnX3NlbmQoUE9MQ1RSTF9BRFJTLCBQT0xDVFJMX1NZTkNfUE9MX1JJU0UgfCBQT0xDVFJMX0VOX1BPTF9SSVNFCkBAIC0yMjQsMTAgKzIzNiwxMCBAQAogCiAJCWxjZF9pbml0ZWQ9MTsKIAl9IGVsc2UgewotCQlsY2R0Z19zZXRfcGhhZGFkaihwYXIpOworCQlsY2R0Z19zZXRfcGhhZGFkaihtb2RlKTsKIAl9CiAKLQlzd2l0Y2gocGFyLT54cmVzKSB7CisJc3dpdGNoKG1vZGUpIHsKIAkJY2FzZSA0ODA6CiAJCWNhc2UgNjQwOgogCQkJLyogU2V0IExjZCBSZXNvbHV0aW9uIChWR0EpICovCkBAIC0yNDIsNyArMjU0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGxjZHRnX3N1c3BlbmQoc3RydWN0IHcxMDBmYl9wYXIgKnBhcikKK3N0YXRpYyB2b2lkIGxjZHRnX3N1c3BlbmQodm9pZCkKIHsKIAkvKiA2MEh6IHggMiBmcmFtZSA9IDE2Ljdtc2VjIHggMiA9IDMzLjQgbXNlYyAqLwogCW1kZWxheSgzNCk7CkBAIC0yNzYsMTUgKzI4OCwzMCBAQAogCWxjZF9pbml0ZWQgPSAwOwogfQogCi1zdGF0aWMgc3RydWN0IHcxMDBfdGdfaW5mbyBjb3JnaV9sY2R0Z19pbmZvID0gewotCS5jaGFuZ2U9bGNkdGdfaHdfaW5pdCwKLQkuc3VzcGVuZD1sY2R0Z19zdXNwZW5kLAotCS5yZXN1bWU9bGNkdGdfaHdfaW5pdCwKLX07CiAKIC8qCiAgKiBDb3JnaSB3MTAwIEZyYW1lIEJ1ZmZlciBEZXZpY2UKICAqLworI2lmZGVmIENPTkZJR19QWEFfU0hBUlBfQzd4eAorCisjaW5jbHVkZSA8dmlkZW8vdzEwMGZiLmg+CisKK3N0YXRpYyB2b2lkIHcxMDBfbGNkdGdfc3VzcGVuZChzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyKQoreworCWxjZHRnX3N1c3BlbmQoKTsKK30KKworc3RhdGljIHZvaWQgdzEwMF9sY2R0Z19pbml0KHN0cnVjdCB3MTAwZmJfcGFyICpwYXIpCit7CisJbGNkdGdfaHdfaW5pdChwYXItPnhyZXMpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF90Z19pbmZvIGNvcmdpX2xjZHRnX2luZm8gPSB7CisJLmNoYW5nZSAgPSB3MTAwX2xjZHRnX2luaXQsCisJLnN1c3BlbmQgPSB3MTAwX2xjZHRnX3N1c3BlbmQsCisJLnJlc3VtZSAgPSB3MTAwX2xjZHRnX2luaXQsCit9OwogCiBzdGF0aWMgc3RydWN0IHcxMDBfbWVtX2luZm8gY29yZ2lfZmJfbWVtID0gewogCS5leHRfY250bCAgICAgICAgICA9IDB4MDAwNDAwMDMsCkBAIC0zOTQsMyArNDIxLDE0NSBAQAogCX0sCiAKIH07CisjZW5kaWYKKworCisvKgorICogU3BpdHogUFhBIEZyYW1lIEJ1ZmZlciBEZXZpY2UKKyAqLworI2lmZGVmIENPTkZJR19QWEFfU0hBUlBfQ3h4MDAKKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CisKK3ZvaWQgc3BpdHpfbGNkX3Bvd2VyKGludCBvbikKK3sKKwlpZiAob24pCisJCWxjZHRnX2h3X2luaXQoNDgwKTsKKwllbHNlCisJCWxjZHRnX3N1c3BlbmQoKTsKK30KKworI2VuZGlmCisKKworLyoKKyAqIENvcmdpL1NwaXR6IFRvdWNoc2NyZWVuIHRvIExDRCBpbnRlcmZhY2UKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgKCpnZXRfaHN5bmNfdGltZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIHZvaWQgaW5saW5lIHNoYXJwc2xfd2FpdF9zeW5jKGludCBncGlvKQoreworCXdoaWxlKChHUExSKGdwaW8pICYgR1BJT19iaXQoZ3BpbykpID09IDApOworCXdoaWxlKChHUExSKGdwaW8pICYgR1BJT19iaXQoZ3BpbykpICE9IDApOworfQorCisjaWZkZWYgQ09ORklHX1BYQV9TSEFSUF9DN3h4Cit1bnNpZ25lZCBsb25nIGNvcmdpX2dldF9oc3luY19sZW4odm9pZCkKK3sKKwlpZiAoIWdldF9oc3luY190aW1lKQorCQlnZXRfaHN5bmNfdGltZSA9IHN5bWJvbF9nZXQodzEwMGZiX2dldF9oc3luY2xlbik7CisJaWYgKCFnZXRfaHN5bmNfdGltZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZ2V0X2hzeW5jX3RpbWUoJmNvcmdpZmJfZGV2aWNlLmRldik7Cit9CisKK3ZvaWQgY29yZ2lfcHV0X2hzeW5jKHZvaWQpCit7CisJaWYgKGdldF9oc3luY190aW1lKQorCQlzeW1ib2xfcHV0KHcxMDBmYl9nZXRfaHN5bmNsZW4pOworfQorCit2b2lkIGNvcmdpX3dhaXRfaHN5bmModm9pZCkKK3sKKwlzaGFycHNsX3dhaXRfc3luYyhDT1JHSV9HUElPX0hTWU5DKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BYQV9TSEFSUF9DeHgwMAordW5zaWduZWQgbG9uZyBzcGl0el9nZXRfaHN5bmNfbGVuKHZvaWQpCit7CisJaWYgKCFnZXRfaHN5bmNfdGltZSkKKwkJZ2V0X2hzeW5jX3RpbWUgPSBzeW1ib2xfZ2V0KHB4YWZiX2dldF9oc3luY190aW1lKTsKKwlpZiAoIWdldF9oc3luY190aW1lKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBweGFmYl9nZXRfaHN5bmNfdGltZSgmcHhhZmJfZGV2aWNlLmRldik7Cit9CisKK3ZvaWQgc3BpdHpfcHV0X2hzeW5jKHZvaWQpCit7CisJaWYgKGdldF9oc3luY190aW1lKQorCQlzeW1ib2xfcHV0KHB4YWZiX2dldF9oc3luY190aW1lKTsKK30KKwordm9pZCBzcGl0el93YWl0X2hzeW5jKHZvaWQpCit7CisJc2hhcnBzbF93YWl0X3N5bmMoU1BJVFpfR1BJT19IU1lOQyk7Cit9CisjZW5kaWYKKworLyoKKyAqIENvcmdpL1NwaXR6IEJhY2tsaWdodCBQb3dlcgorICovCisjaWZkZWYgQ09ORklHX1BYQV9TSEFSUF9DN3h4Cit2b2lkIGNvcmdpX2JsX3NldF9pbnRlbnNpdHkoaW50IGludGVuc2l0eSkKK3sKKwlpZiAoaW50ZW5zaXR5ID4gMHgxMCkKKwkJaW50ZW5zaXR5ICs9IDB4MTA7CisKKwkvKiBCaXRzIDAtNCBhcmUgYWNjZXNzZWQgdmlhIHRoZSBTU1AgaW50ZXJmYWNlICovCisJY29yZ2lfc3NwX2JsZHV0eV9zZXQoaW50ZW5zaXR5ICYgMHgxZik7CisKKwkvKiBCaXQgNSBpcyB2aWEgU0NPT1AgKi8KKwlpZiAoaW50ZW5zaXR5ICYgMHgwMDIwKQorCQlzZXRfc2Nvb3BfZ3BpbygmY29yZ2lzY29vcF9kZXZpY2UuZGV2LCBDT1JHSV9TQ1BfQkFDS0xJR0hUX0NPTlQpOworCWVsc2UKKwkJcmVzZXRfc2Nvb3BfZ3BpbygmY29yZ2lzY29vcF9kZXZpY2UuZGV2LCBDT1JHSV9TQ1BfQkFDS0xJR0hUX0NPTlQpOworfQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BJVFopIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQk9SWk9JKQordm9pZCBzcGl0el9ibF9zZXRfaW50ZW5zaXR5KGludCBpbnRlbnNpdHkpCit7CisJaWYgKGludGVuc2l0eSA+IDB4MTApCisJCWludGVuc2l0eSArPSAweDEwOworCisJLyogQml0cyAwLTQgYXJlIGFjY2Vzc2VkIHZpYSB0aGUgU1NQIGludGVyZmFjZSAqLworCWNvcmdpX3NzcF9ibGR1dHlfc2V0KGludGVuc2l0eSAmIDB4MWYpOworCisJLyogQml0IDUgaXMgdmlhIFNDT09QICovCisJaWYgKGludGVuc2l0eSAmIDB4MDAyMCkKKwkJcmVzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcDJfZGV2aWNlLmRldiwgU1BJVFpfU0NQMl9CQUNLTElHSFRfQ09OVCk7CisJZWxzZQorCQlzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcDJfZGV2aWNlLmRldiwgU1BJVFpfU0NQMl9CQUNLTElHSFRfQ09OVCk7CisKKwlpZiAoaW50ZW5zaXR5KQorCQlzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcDJfZGV2aWNlLmRldiwgU1BJVFpfU0NQMl9CQUNLTElHSFRfT04pOworCWVsc2UKKwkJcmVzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcDJfZGV2aWNlLmRldiwgU1BJVFpfU0NQMl9CQUNLTElHSFRfT04pOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BS0lUQQordm9pZCBha2l0YV9ibF9zZXRfaW50ZW5zaXR5KGludCBpbnRlbnNpdHkpCit7CisJaWYgKGludGVuc2l0eSA+IDB4MTApCisJCWludGVuc2l0eSArPSAweDEwOworCisJLyogQml0cyAwLTQgYXJlIGFjY2Vzc2VkIHZpYSB0aGUgU1NQIGludGVyZmFjZSAqLworCWNvcmdpX3NzcF9ibGR1dHlfc2V0KGludGVuc2l0eSAmIDB4MWYpOworCisJLyogQml0IDUgaXMgdmlhIElPLUV4cGFuZGVyICovCisJaWYgKGludGVuc2l0eSAmIDB4MDAyMCkKKwkJYWtpdGFfcmVzZXRfaW9leHAoJmFraXRhaW9leHBfZGV2aWNlLmRldiwgQUtJVEFfSU9FWFBfQkFDS0xJR0hUX0NPTlQpOworCWVsc2UKKwkJYWtpdGFfc2V0X2lvZXhwKCZha2l0YWlvZXhwX2RldmljZS5kZXYsIEFLSVRBX0lPRVhQX0JBQ0tMSUdIVF9DT05UKTsKKworCWlmIChpbnRlbnNpdHkpCisJCWFraXRhX3NldF9pb2V4cCgmYWtpdGFpb2V4cF9kZXZpY2UuZGV2LCBBS0lUQV9JT0VYUF9CQUNLTElHSFRfT04pOworCWVsc2UKKwkJYWtpdGFfcmVzZXRfaW9leHAoJmFraXRhaW9leHBfZGV2aWNlLmRldiwgQUtJVEFfSU9FWFBfQkFDS0xJR0hUX09OKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwppbmRleCAzNjZhOWJkLi4wZWY0MjgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgU1NQIGNvbnRyb2wgY29kZSBmb3IgU2hhcnAgQ29yZ2kgZGV2aWNlcwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDQgUmljaGFyZCBQdXJkaWUKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBSaWNoYXJkIFB1cmRpZQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNywxNCArMTcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9zc3AuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9jb3JnaS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSAic2hhcnBzbC5oIgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvcmdpX3NzcF9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3Qgc3NwX2RldiBjb3JnaV9zc3BfZGV2Owogc3RhdGljIHN0cnVjdCBzc3Bfc3RhdGUgY29yZ2lfc3NwX3N0YXRlOworc3RhdGljIHN0cnVjdCBjb3JnaXNzcF9tYWNoaW5mbyAqc3NwX21hY2hpbmZvOwogCiAvKgogICogVGhlcmUgYXJlIHRocmVlIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBTU1AgaW50ZXJmYWNlOgpAQCAtNDgsMTIgKzUwLDEyIEBACiAJdW5zaWduZWQgbG9uZyByZXQsZmxhZzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JnaV9zc3BfbG9jaywgZmxhZyk7Ci0JR1BDUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX0FEUzc4NDZfQ1MpOworCUdQQ1Ioc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0Nik7CiAKIAlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldixkYXRhKTsKIAlyZXQgPSBzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2KTsKIAotCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19BRFM3ODQ2X0NTKTsKKwlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmdpX3NzcF9sb2NrLCBmbGFnKTsKIAogCXJldHVybiByZXQ7CkBAIC02NiwxMiArNjgsMTIgQEAKIHZvaWQgY29yZ2lfc3NwX2Fkczc4NDZfbG9jayh2b2lkKQogewogCXNwaW5fbG9jaygmY29yZ2lfc3NwX2xvY2spOwotCUdQQ1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19BRFM3ODQ2X0NTKTsKKwlHUENSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOwogfQogCiB2b2lkIGNvcmdpX3NzcF9hZHM3ODQ2X3VubG9jayh2b2lkKQogewotCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19BRFM3ODQ2X0NTKTsKKwlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOwogCXNwaW5fdW5sb2NrKCZjb3JnaV9zc3BfbG9jayk7CiB9CiAKQEAgLTk3LDIzICs5OSwyNyBAQAogICovCiB1bnNpZ25lZCBsb25nIGNvcmdpX3NzcF9kYWNfcHV0KHVsb25nIGRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOworCXVuc2lnbmVkIGxvbmcgZmxhZywgc3NjcjEgPSBTU0NSMV9TUEg7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29yZ2lfc3NwX2xvY2ssIGZsYWcpOwotCUdQQ1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19MQ0RDT05fQ1MpOworCisJaWYgKG1hY2hpbmVfaXNfc3BpdHooKSB8fCBtYWNoaW5lX2lzX2FraXRhKCkgfHwgbWFjaGluZV9pc19ib3J6b2koKSkKKwkJc3NjcjEgPSAwOwogCiAJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOwotCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9Nb3Rvcm9sYSB8IChTU0NSMF9EU1MgJiAweDA3ICkpLCBTU0NSMV9TUEgsIDAsIFNTQ1IwX1NlckNsa0Rpdig3NikpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9Nb3Rvcm9sYSB8IChTU0NSMF9EU1MgJiAweDA3ICkpLCBzc2NyMSwgMCwgU1NDUjBfU2VyQ2xrRGl2KHNzcF9tYWNoaW5mby0+Y2xrX2xjZGNvbikpOwogCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOwogCisJR1BDUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7CiAJc3NwX3dyaXRlX3dvcmQoJmNvcmdpX3NzcF9kZXYsZGF0YSk7CiAJLyogUmVhZCBudWxsIGRhdGEgYmFjayBmcm9tIGRldmljZSB0byBwcmV2ZW50IFNTUCBvdmVyZmxvdyAqLwogCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYpOworCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pOwogCiAJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOwotCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoMikpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoc3NwX21hY2hpbmZvLT5jbGtfYWRzNzg0NikpOwogCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOwotCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19MQ0RDT05fQ1MpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZ2lfc3NwX2xvY2ssIGZsYWcpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDEsOSArMTQ3LDkgQEAKIAlpbnQgdm9sdGFnZSx2b2x0YWdlMSx2b2x0YWdlMjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JnaV9zc3BfbG9jaywgZmxhZyk7Ci0JR1BDUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX01BWDExMTFfQ1MpOworCUdQQ1Ioc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7CiAJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOwotCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9Nb3Rvcm9sYSB8IChTU0NSMF9EU1MgJiAweDA3ICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoOCkpOworCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9Nb3Rvcm9sYSB8IChTU0NSMF9EU1MgJiAweDA3ICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoc3NwX21hY2hpbmZvLT5jbGtfbWF4MTExMSkpOwogCXNzcF9lbmFibGUoJmNvcmdpX3NzcF9kZXYpOwogCiAJdWRlbGF5KDEpOwpAQCAtMTYxLDkgKzE2Nyw5IEBACiAJdm9sdGFnZTI9c3NwX3JlYWRfd29yZCgmY29yZ2lfc3NwX2Rldik7CiAKIAlzc3BfZGlzYWJsZSgmY29yZ2lfc3NwX2Rldik7Ci0Jc3NwX2NvbmZpZygmY29yZ2lfc3NwX2RldiwgKFNTQ1IwX05hdGlvbmFsIHwgKFNTQ1IwX0RTUyAmIDB4MGIgKSksIDAsIDAsIFNTQ1IwX1NlckNsa0RpdigyKSk7CisJc3NwX2NvbmZpZygmY29yZ2lfc3NwX2RldiwgKFNTQ1IwX05hdGlvbmFsIHwgKFNTQ1IwX0RTUyAmIDB4MGIgKSksIDAsIDAsIFNTQ1IwX1NlckNsa0Rpdihzc3BfbWFjaGluZm8tPmNsa19hZHM3ODQ2KSk7CiAJc3NwX2VuYWJsZSgmY29yZ2lfc3NwX2Rldik7Ci0JR1BTUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX01BWDExMTFfQ1MpOworCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZ2lfc3NwX2xvY2ssIGZsYWcpOwogCiAJaWYgKHZvbHRhZ2UxICYgMHhjMCB8fCB2b2x0YWdlMiAmIDB4M2YpCkBAIC0xNzksMjUgKzE4NSwzMSBAQAogLyoKICAqICBTdXBwb3J0IFJvdXRpbmVzCiAgKi8KLWludCBfX2luaXQgY29yZ2lfc3NwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKKwordm9pZCBfX2luaXQgY29yZ2lfc3NwX3NldF9tYWNoaW5mbyhzdHJ1Y3QgY29yZ2lzc3BfbWFjaGluZm8gKm1hY2hpbmZvKQoreworCXNzcF9tYWNoaW5mbyA9IG1hY2hpbmZvOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaV9zc3BfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKIAkvKiBDaGlwIFNlbGVjdCAtIERpc2FibGUgQWxsICovCi0JR1BEUjAgfD0gR1BJT19iaXQoQ09SR0lfR1BJT19MQ0RDT05fQ1MpOyAvKiBvdXRwdXQgKi8KLQlHUFNSMCA9IEdQSU9fYml0KENPUkdJX0dQSU9fTENEQ09OX0NTKTsgIC8qIEhpZ2ggLSBEaXNhYmxlIExDRCBDb250cm9sL1RpbWluZyBHZW4gKi8KLQlHUERSMCB8PSBHUElPX2JpdChDT1JHSV9HUElPX01BWDExMTFfQ1MpOyAvKiBvdXRwdXQgKi8KLQlHUFNSMCA9IEdQSU9fYml0KENPUkdJX0dQSU9fTUFYMTExMV9DUyk7ICAvKiBIaWdoIC0gRGlzYWJsZSBNQVgxMTExKi8KLQlHUERSMCB8PSBHUElPX2JpdChDT1JHSV9HUElPX0FEUzc4NDZfQ1MpOyAgLyogb3V0cHV0ICovCi0JR1BTUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX0FEUzc4NDZfQ1MpOyAgIC8qIEhpZ2ggLSBEaXNhYmxlIEFEUzc4NDYqLworCUdQRFIoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pIHw9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKTsgLyogb3V0cHV0ICovCisJR1BTUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7ICAvKiBIaWdoIC0gRGlzYWJsZSBMQ0QgQ29udHJvbC9UaW1pbmcgR2VuICovCisJR1BEUihzc3BfbWFjaGluZm8tPmNzX21heDExMTEpIHw9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7IC8qIG91dHB1dCAqLworCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7ICAvKiBIaWdoIC0gRGlzYWJsZSBNQVgxMTExKi8KKwlHUERSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgfD0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgIC8qIG91dHB1dCAqLworCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0Nik7ICAgLyogSGlnaCAtIERpc2FibGUgQURTNzg0NiovCiAKLQlyZXQ9c3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsMSk7CisJcmV0ID0gc3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsc3NwX21hY2hpbmZvLT5wb3J0KTsKIAogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIFNTUCBoYW5kbGVyIVxuIik7CiAJZWxzZSB7CiAJCXNzcF9kaXNhYmxlKCZjb3JnaV9zc3BfZGV2KTsKLQkJc3NwX2NvbmZpZygmY29yZ2lfc3NwX2RldiwgKFNTQ1IwX05hdGlvbmFsIHwgKFNTQ1IwX0RTUyAmIDB4MGIgKSksIDAsIDAsIFNTQ1IwX1NlckNsa0RpdigyKSk7CisJCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoc3NwX21hY2hpbmZvLT5jbGtfYWRzNzg0NikpOwogCQlzc3BfZW5hYmxlKCZjb3JnaV9zc3BfZGV2KTsKIAl9CiAKQEAgLTIyMiw5ICsyMzQsOSBAQAogc3RhdGljIGludCBjb3JnaV9zc3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQogewogCWlmIChsZXZlbCA9PSBSRVNVTUVfUE9XRVJfT04pIHsKLQkJR1BTUjAgPSBHUElPX2JpdChDT1JHSV9HUElPX0xDRENPTl9DUyk7ICAvKiBIaWdoIC0gRGlzYWJsZSBMQ0QgQ29udHJvbC9UaW1pbmcgR2VuICovCi0JCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19NQVgxMTExX0NTKTsgLyogSGlnaCAtIERpc2FibGUgTUFYMTExMSovCi0JCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19BRFM3ODQ2X0NTKTsgLyogSGlnaCAtIERpc2FibGUgQURTNzg0NiovCisJCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pOyAgLyogSGlnaCAtIERpc2FibGUgTENEIENvbnRyb2wvVGltaW5nIEdlbiAqLworCQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSkgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX21heDExMTEpOyAvKiBIaWdoIC0gRGlzYWJsZSBNQVgxMTExKi8KKwkJR1BTUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgLyogSGlnaCAtIERpc2FibGUgQURTNzg0NiovCiAJCXNzcF9yZXN0b3JlX3N0YXRlKCZjb3JnaV9zc3BfZGV2LCZjb3JnaV9zc3Bfc3RhdGUpOwogCQlzc3BfZW5hYmxlKCZjb3JnaV9zc3BfZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKaW5kZXggOTIzZjZlYi4uMWYzODAzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtMTQ2LDYgKzE0NiwxMSBAQAogCS8vIG5vIEQrIHB1bGx1cDsgbHViYm9jayBjYW4ndCBjb25uZWN0L2Rpc2Nvbm5lY3QgaW4gc29mdHdhcmUKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGx1Yl9hdWRpb19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC1hYzk3IiwKKwkuaWQJCT0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNhMTExMV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IDB4MTAwMDAwMDAsCkBAIC0xOTUsNiArMjAwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzYTExMTFfZGV2aWNlLAorCSZsdWJfYXVkaW9fZGV2aWNlLAogCSZzbWM5MXhfZGV2aWNlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCA0N2NmYjhiLi5mMjU2Mzg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wb29kbGUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgogCkBAIC05Myw2ICs5NSw4MyBAQAogCS5yZXNvdXJjZQk9IGxvY29tb19yZXNvdXJjZXMsCiB9OwogCisKKy8qCisgKiBNTUMvU0QgRGV2aWNlCisgKgorICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKKyAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgorICovCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YTsKKworc3RhdGljIGludCBwb29kbGVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFyZXR1cm5fdCAoKnBvb2RsZV9kZXRlY3RfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKworCS8qIHNldHVwIEdQSU8gZm9yIFBYQTI1eCBNTUMgY29udHJvbGxlcgkqLworCXB4YV9ncGlvX21vZGUoR1BJTzZfTU1DQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU84X01NQ0NTMF9NRCk7CisJcHhhX2dwaW9fbW9kZShQT09ETEVfR1BJT19uU0RfREVURUNUIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShQT09ETEVfR1BJT19TRF9QV1IgfCBHUElPX09VVCk7CisKKwlwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOworCisJZXJyID0gcmVxdWVzdF9pcnEoUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsIHBvb2RsZV9kZXRlY3RfaW50LCBTQV9JTlRFUlJVUFQsCisJCQkgICAgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicG9vZGxlX21jaV9pbml0OiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzZXRfaXJxX3R5cGUoUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsIElSUVRfQk9USEVER0UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvb2RsZV9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQoreworCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykKKwkJR1BTUjEgPSBHUElPX2JpdChQT09ETEVfR1BJT19TRF9QV1IpOworCWVsc2UKKwkJR1BDUjEgPSBHUElPX2JpdChQT09ETEVfR1BJT19TRF9QV1IpOworfQorCitzdGF0aWMgdm9pZCBwb29kbGVfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJPSBwb29kbGVfbWNpX2luaXQsCisJLnNldHBvd2VyIAk9IHBvb2RsZV9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCT0gcG9vZGxlX21jaV9leGl0LAorfTsKKworCisvKgorICogVVNCIERldmljZSBDb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHBvb2RsZV91ZGNfY29tbWFuZChpbnQgY21kKQoreworCXN3aXRjaChjbWQpCXsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6CisJCUdQU1IoUE9PRExFX0dQSU9fVVNCX1BVTExVUCkgPSBHUElPX2JpdChQT09ETEVfR1BJT19VU0JfUFVMTFVQKTsKKwkJYnJlYWs7CisJY2FzZSBQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUOgorCQlHUENSKFBPT0RMRV9HUElPX1VTQl9QVUxMVVApID0gR1BJT19iaXQoUE9PRExFX0dQSU9fVVNCX1BVTExVUCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyB1ZGNfaW5mbyBfX2luaXRkYXRhID0geworCS8qIG5vIGNvbm5lY3QgR1BJTzsgcG9vZGxlIGNhbid0IHRlbGwgY29ubmVjdGlvbiBzdGF0dXMgKi8KKwkudWRjX2NvbW1hbmQJCT0gcG9vZGxlX3VkY19jb21tYW5kLAorfTsKKworCiAvKiBQWEFGQiBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBvb2RsZV9mYl9pbmZvIF9faW5pdGRhdGEgPSB7CiAJLnBpeGNsb2NrCT0gMTQ0NzAwLApAQCAtMTI2LDYgKzIwNSwxNSBAQAogewogCWludCByZXQgPSAwOwogCisJLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KKwlQV0VSICA9IDB4MDAwMDAwMDI7CisJUEZFUiAgPSAweDAwMDAwMDAwOworCVBSRVIgID0gMHgwMDAwMDAwMjsKKwlQR1NSMCA9IDB4MDAwMDgwMDA7CisJUEdTUjEgPSAweDAwM0YwMjAyOworCVBHU1IyID0gMHgwMDAxQzAwMDsKKwlQQ0ZSIHw9IFBDRlJfT1BERTsKKwogCS8qIGNwdSBpbml0aWFsaXplICovCiAJLyogUGdzciBSZWdpc3RlciAqLwogICAJUEdTUjAgPSAweDAxNDZkZDgwOwpAQCAtMTU1LDYgKzI0Myw5IEBACiAgICAgICAgIEdQU1IyID0gMHgwMDAwMDAwMDsKIAogCXNldF9weGFfZmJfaW5mbygmcG9vZGxlX2ZiX2luZm8pOworCXB4YV9ncGlvX21vZGUoUE9PRExFX0dQSU9fVVNCX1BVTExVUCB8IEdQSU9fT1VUKTsKKwlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CisJcHhhX3NldF9tY2lfaW5mbygmcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAogCXNjb29wX251bSA9IDE7CiAJc2Nvb3BfZGV2cyA9ICZwb29kbGVfcGNtY2lhX3Njb29wWzBdOwpAQCAtMTcxLDMyICsyNjIsMTIgQEAKIAlzaGFycHNsX3NhdmVfcGFyYW0oKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwb29kbGVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0gLyogdmlydHVhbCAgICAgcGh5c2ljYWwgICAgbGVuZ3RoICAgICAgICAgICAgICAgICAgICovCi0gIHsgMHhlZjgwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgTVRfREVWSUNFIH0sIC8qIEJvb3QgRmxhc2ggKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwb29kbGVfbWFwX2lvKHZvaWQpCi17Ci0JcHhhX21hcF9pbygpOwotCWlvdGFibGVfaW5pdChwb29kbGVfaW9fZGVzYywgQVJSQVlfU0laRShwb29kbGVfaW9fZGVzYykpOwotCi0JLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KLQlQV0VSICA9IDB4MDAwMDAwMDI7Ci0JUEZFUiAgPSAweDAwMDAwMDAwOwotCVBSRVIgID0gMHgwMDAwMDAwMjsKLQlQR1NSMCA9IDB4MDAwMDgwMDA7Ci0JUEdTUjEgPSAweDAwM0YwMjAyOwotCVBHU1IyID0gMHgwMDAxQzAwMDsKLQlQQ0ZSIHw9IFBDRlJfT1BERTsKLX0KLQogTUFDSElORV9TVEFSVChQT09ETEUsICJTSEFSUCBQb29kbGUiKQogCS5waHlzX3JhbQk9IDB4YTAwMDAwMDAsCiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5maXh1cAkJPSBmaXh1cF9wb29kbGUsCi0JLm1hcF9pbwkJPSBwb29kbGVfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGFfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IHBvb2RsZV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzdhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFNoYXJwU0wgU1NQIERyaXZlcgorICovCisKK3N0cnVjdCBjb3JnaXNzcF9tYWNoaW5mbyB7CisJaW50IHBvcnQ7CisJaW50IGNzX2xjZGNvbjsKKwlpbnQgY3NfYWRzNzg0NjsKKwlpbnQgY3NfbWF4MTExMTsKKwlpbnQgY2xrX2xjZGNvbjsKKwlpbnQgY2xrX2Fkczc4NDY7CisJaW50IGNsa19tYXgxMTExOworfTsKKwordm9pZCBjb3JnaV9zc3Bfc2V0X21hY2hpbmZvKHN0cnVjdCBjb3JnaXNzcF9tYWNoaW5mbyAqbWFjaGluZm8pOworCisvKgorICogU2hhcnBTTCBCYWNrbGlnaHQKKyAqLworCit2b2lkIGNvcmdpX2JsX3NldF9pbnRlbnNpdHkoaW50IGludGVuc2l0eSk7Cit2b2lkIHNwaXR6X2JsX3NldF9pbnRlbnNpdHkoaW50IGludGVuc2l0eSk7Cit2b2lkIGFraXRhX2JsX3NldF9pbnRlbnNpdHkoaW50IGludGVuc2l0eSk7CisKKy8qCisgKiBTaGFycFNMIFRvdWNoc2NyZWVuIERyaXZlcgorICovCisKK3Vuc2lnbmVkIGxvbmcgY29yZ2lfZ2V0X2hzeW5jX2xlbih2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgc3BpdHpfZ2V0X2hzeW5jX2xlbih2b2lkKTsKK3ZvaWQgY29yZ2lfcHV0X2hzeW5jKHZvaWQpOwordm9pZCBzcGl0el9wdXRfaHN5bmModm9pZCk7Cit2b2lkIGNvcmdpX3dhaXRfaHN5bmModm9pZCk7Cit2b2lkIHNwaXR6X3dhaXRfaHN5bmModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhhZmUzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBTdXBwb3J0IGZvciBTaGFycCBTTC1DeHgwMCBTZXJpZXMgb2YgUERBcworICogTW9kZWxzOiBTTC1DMzAwMCAoU3BpdHopLCBTTC1DMTAwMCAoQWtpdGEpIGFuZCBTTC1DMzEwMCAoQm9yem9pKQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBSaWNoYXJkIFB1cmRpZQorICoKKyAqIEJhc2VkIG9uIFNoYXJwJ3MgMi40IGtlcm5lbCBwYXRjaGVzL2x1YmJvY2suYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdWRjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb2hjaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYWtpdGEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcGl0ei5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3NoYXJwc2xfcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJzaGFycHNsLmgiCisKKy8qCisgKiBTcGl0eiBTQ09PUCBEZXZpY2UgIzEKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGl0el9zY29vcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSAweDEwODAwMDAwLAorCQkuZW5kCQk9IDB4MTA4MDBmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzY29vcF9jb25maWcgc3BpdHpfc2Nvb3Bfc2V0dXAgPSB7CisJLmlvX2RpciAJPSBTUElUWl9TQ1BfSU9fRElSLAorCS5pb19vdXQJCT0gU1BJVFpfU0NQX0lPX09VVCwKKwkuc3VzcGVuZF9jbHIgPSBTUElUWl9TQ1BfU1VTX0NMUiwKKwkuc3VzcGVuZF9zZXQgPSBTUElUWl9TQ1BfU1VTX1NFVCwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpzY29vcF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoYXJwLXNjb29wIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKyAJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaXR6X3Njb29wX3NldHVwLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaXR6X3Njb29wX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc3BpdHpfc2Nvb3BfcmVzb3VyY2VzLAorfTsKKworLyoKKyAqIFNwaXR6IFNDT09QIERldmljZSAjMgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaXR6X3Njb29wMl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSAweDA4ODAwMDQwLAorCQkuZW5kCQk9IDB4MDg4MDBmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzY29vcF9jb25maWcgc3BpdHpfc2Nvb3AyX3NldHVwID0geworCS5pb19kaXIgCT0gU1BJVFpfU0NQMl9JT19ESVIsCisJLmlvX291dAkJPSBTUElUWl9TQ1AyX0lPX09VVCwKKwkuc3VzcGVuZF9jbHIgPSBTUElUWl9TQ1AyX1NVU19DTFIsCisJLnN1c3BlbmRfc2V0ID0gU1BJVFpfU0NQMl9TVVNfU0VULAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0enNjb29wMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoYXJwLXNjb29wIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKyAJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaXR6X3Njb29wMl9zZXR1cCwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGl0el9zY29vcDJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzcGl0el9zY29vcDJfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IHNwaXR6X3BjbWNpYV9zY29vcFtdID0geworeworCS5kZXYgICAgICAgID0gJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwKKwkuaXJxICAgICAgICA9IFNQSVRaX0lSUV9HUElPX0NGX0lSUSwKKwkuY2RfaXJxICAgICA9IFNQSVRaX0lSUV9HUElPX0NGX0NELAorCS5jZF9pcnFfc3RyID0gIlBDTUNJQTAgQ0QiLAorfSx7CisJLmRldiAgICAgICAgPSAmc3BpdHpzY29vcDJfZGV2aWNlLmRldiwKKwkuaXJxICAgICAgICA9IFNQSVRaX0lSUV9HUElPX0NGMl9JUlEsCisJLmNkX2lycSAgICAgPSAtMSwKK30sCit9OworCisKKy8qCisgKiBTcGl0eiBTU1AgRGV2aWNlCisgKgorICogU2V0IHRoZSBwYXJlbnQgYXMgdGhlIHNjb29wIGRldmljZSBiZWNhdXNlIGEgbG90IG9mIFNTUCBkZXZpY2VzCisgKiBhbHNvIHVzZSBzY29vcCBmdW5jdGlvbnMgYW5kIHRoaXMgbWFrZXMgdGhlIHBvd2VyIHVwL2Rvd24gb3JkZXIKKyAqIHdvcmsgY29ycmVjdGx5LgorICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6c3NwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiY29yZ2ktc3NwIiwKKwkuZGV2CQk9IHsKKyAJCS5wYXJlbnQgPSAmc3BpdHpzY29vcF9kZXZpY2UuZGV2LAorCX0sCisJLmlkCQk9IC0xLAorfTsKKworc3RydWN0IGNvcmdpc3NwX21hY2hpbmZvIHNwaXR6X3NzcF9tYWNoaW5mbyA9IHsKKwkucG9ydAkJPSAyLAorCS5jc19sY2Rjb24JPSBTUElUWl9HUElPX0xDRENPTl9DUywKKwkuY3NfYWRzNzg0Ngk9IFNQSVRaX0dQSU9fQURTNzg0Nl9DUywKKwkuY3NfbWF4MTExMQk9IFNQSVRaX0dQSU9fTUFYMTExMV9DUywKKwkuY2xrX2xjZGNvbgk9IDUyMCwKKwkuY2xrX2Fkczc4NDYJPSAxNCwKKwkuY2xrX21heDExMTEJPSA1NiwKK307CisKKworLyoKKyAqIFNwaXR6IEJhY2tsaWdodCBEZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBjb3JnaWJsX21hY2hpbmZvIHNwaXR6X2JsX21hY2hpbmZvID0geworCS5tYXhfaW50ZW5zaXR5ID0gMHgyZiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6YmxfZGV2aWNlID0geworCS5uYW1lCQk9ICJjb3JnaS1ibCIsCisJLmRldgkJPSB7CisgCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9ibF9tYWNoaW5mbywKKwl9LAorCS5pZAkJPSAtMSwKK307CisKKworLyoKKyAqIFNwaXR6IEtleWJvYXJkIERldmljZQorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0emtiZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNwaXR6LWtleWJvYXJkIiwKKwkuaWQJCT0gLTEsCit9OworCisKKy8qCisgKiBTcGl0eiBUb3VjaCBTY3JlZW4gRGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpdHp0c19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBTUElUWl9JUlFfR1BJT19UUF9JTlQsCisJCS5lbmQJCT0gU1BJVFpfSVJRX0dQSU9fVFBfSU5ULAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29yZ2l0c19tYWNoaW5mbyAgc3BpdHpfdHNfbWFjaGluZm8gPSB7CisJLmdldF9oc3luY19sZW4gICA9IHNwaXR6X2dldF9oc3luY19sZW4sCisJLnB1dF9oc3luYyAgICAgICA9IHNwaXR6X3B1dF9oc3luYywKKwkud2FpdF9oc3luYyAgICAgID0gc3BpdHpfd2FpdF9oc3luYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6dHNfZGV2aWNlID0geworCS5uYW1lCQk9ICJjb3JnaS10cyIsCisJLmRldgkJPSB7CisgCQkucGFyZW50ID0gJnNwaXR6c3NwX2RldmljZS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaXR6X3RzX21hY2hpbmZvLAorCX0sCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGl0enRzX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc3BpdHp0c19yZXNvdXJjZXMsCit9OworCisKKy8qCisgKiBNTUMvU0QgRGV2aWNlCisgKgorICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKKyAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGE7CisKK3N0YXRpYyBpbnQgc3BpdHpfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFyZXR1cm5fdCAoKnNwaXR6X2RldGVjdF9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyOworCisJLyogc2V0dXAgR1BJTyBmb3IgUFhBMjd4IE1NQyBjb250cm9sbGVyCSovCisJcHhhX2dwaW9fbW9kZShHUElPMzJfTU1DQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMTJfTU1DQ01EX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU85Ml9NTUNEQVQwX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMDlfTU1DREFUMV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMTEwX01NQ0RBVDJfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzExMV9NTUNEQVQzX01EKTsKKwlweGFfZ3Bpb19tb2RlKFNQSVRaX0dQSU9fblNEX0RFVEVDVCB8IEdQSU9fSU4pOworCXB4YV9ncGlvX21vZGUoU1BJVFpfR1BJT19uU0RfV1AgfCBHUElPX0lOKTsKKworCXNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKKworCWVyciA9IHJlcXVlc3RfaXJxKFNQSVRaX0lSUV9HUElPX25TRF9ERVRFQ1QsIHNwaXR6X2RldGVjdF9pbnQsIFNBX0lOVEVSUlVQVCwKKwkJCSAgICAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzcGl0el9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2V0X2lycV90eXBlKFNQSVRaX0lSUV9HUElPX25TRF9ERVRFQ1QsIElSUVRfQk9USEVER0UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFBvd2VyIGNvbnRyb2wgaXMgc2hhcmVkIHdpdGggb25lIG9mIHRoZSBDRiBzbG90cyBzbyB3ZSBoYXZlIGEgbWVzcyAqLworc3RhdGljIHZvaWQgc3BpdHpfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCXVuc2lnbmVkIHNob3J0IGNwciA9IHJlYWRfc2Nvb3BfcmVnKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNDT09QX0NQUik7CisKKwlpZiAoKCAxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSB7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICIlczogb25cbiIsIF9fRlVOQ1RJT05fXyk7ICovCisJCXNldF9zY29vcF9ncGlvKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNQSVRaX1NDUF9DRl9QT1dFUik7CisJCW1kZWxheSgyKTsKKwkJd3JpdGVfc2Nvb3BfcmVnKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNDT09QX0NQUiwgY3ByIHwgMHgwNCk7CisJfSBlbHNlIHsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvZmZcbiIsIF9fRlVOQ1RJT05fXyk7ICovCisJCXdyaXRlX3Njb29wX3JlZygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9DUFIsIGNwciAmIH4weDA0KTsKKworCQlpZiAoIShjcHIgfCAweDAyKSkgeworCQkJbWRlbGF5KDEpOworCQkJcmVzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTUElUWl9TQ1BfQ0ZfUE9XRVIpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNwaXR6X21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBHUExSKFNQSVRaX0dQSU9fblNEX1dQKSAmIEdQSU9fYml0KFNQSVRaX0dQSU9fblNEX1dQKTsKK30KKworc3RhdGljIHZvaWQgc3BpdHpfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKFNQSVRaX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAJCT0gc3BpdHpfbWNpX2luaXQsCisJLmdldF9ybwkJPSBzcGl0el9tY2lfZ2V0X3JvLAorCS5zZXRwb3dlciAJPSBzcGl0el9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCT0gc3BpdHpfbWNpX2V4aXQsCit9OworCisKKy8qCisgKiBTcGl0eiBQWEEgRnJhbWVidWZmZXIKKyAqLworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc3BpdHpfcHhhZmJfaW5mbyBfX2luaXRkYXRhID0geworICAgICAgICAucGl4Y2xvY2sgICAgICAgPSAxOTIzMSwKKyAgICAgICAgLnhyZXMgICAgICAgICAgID0gNDgwLAorICAgICAgICAueXJlcyAgICAgICAgICAgPSA2NDAsCisgICAgICAgIC5icHAgICAgICAgICAgICA9IDE2LAorICAgICAgICAuaHN5bmNfbGVuICAgICAgPSA0MCwKKyAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gNDYsCisgICAgICAgIC5yaWdodF9tYXJnaW4gICA9IDEyNSwKKyAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMywKKyAgICAgICAgLnVwcGVyX21hcmdpbiAgID0gMSwKKyAgICAgICAgLmxvd2VyX21hcmdpbiAgID0gMCwKKyAgICAgICAgLnN5bmMgICAgICAgICAgID0gMCwKKyAgICAgICAgLmxjY3IwICAgICAgICAgID0gTENDUjBfQ29sb3IgfCBMQ0NSMF9TbmdsIHwgTENDUjBfQWN0IHwgTENDUjBfTEREQUxUIHwgTENDUjBfT1VDIHwgTENDUjBfQ01ESU0gfCBMQ0NSMF9SRFNUTSwKKyAgICAgICAgLmxjY3IzICAgICAgICAgID0gTENDUjNfUGl4UnNFZGcgfCBMQ0NSM19PdXRFbkgsCisgICAgICAgIC5weGFmYl9sY2RfcG93ZXIgPSBzcGl0el9sY2RfcG93ZXIsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc3BpdHpzY29vcF9kZXZpY2UsCisJJnNwaXR6c3NwX2RldmljZSwKKwkmc3BpdHprYmRfZGV2aWNlLAorCSZzcGl0enRzX2RldmljZSwKKwkmc3BpdHpibF9kZXZpY2UsCisJJnNwaXR6YmF0dGVyeV9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29tbW9uX2luaXQodm9pZCkKK3sKKwlQTUNSID0gMHgwMDsKKworCS8qIHNldHVwIHNsZWVwIG1vZGUgdmFsdWVzICovCisJUFdFUiAgPSAweDAwMDAwMDAyOworCVBGRVIgID0gMHgwMDAwMDAwMDsKKwlQUkVSICA9IDB4MDAwMDAwMDI7CisJUEdTUjAgPSAweDAxNThDMDAwOworCVBHU1IxID0gMHgwMEZGMDA4MDsKKwlQR1NSMiA9IDB4MDAwMUMwMDQ7CisKKwkvKiBTdG9wIDMuNk1IeiBhbmQgZHJpdmUgSElHSCB0byBQQ01DSUEgYW5kIENTICovCisJUENGUiB8PSBQQ0ZSX09QREU7CisKKwljb3JnaV9zc3Bfc2V0X21hY2hpbmZvKCZzcGl0el9zc3BfbWFjaGluZm8pOworCisJcHhhX2dwaW9fbW9kZShTUElUWl9HUElPX0hTWU5DIHwgR1BJT19JTik7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlweGFfc2V0X21jaV9pbmZvKCZzcGl0el9tY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhZmJfZGV2aWNlLmRldi5wYXJlbnQgPSAmc3BpdHpzc3BfZGV2aWNlLmRldjsKKwlzZXRfcHhhX2ZiX2luZm8oJnNwaXR6X3B4YWZiX2luZm8pOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfaW5pdCh2b2lkKQoreworCXNjb29wX251bSA9IDI7CisJc2Nvb3BfZGV2cyA9ICZzcGl0el9wY21jaWFfc2Nvb3BbMF07CisJc3BpdHpfYmxfbWFjaGluZm8uc2V0X2JsX2ludGVuc2l0eSA9IHNwaXR6X2JsX3NldF9pbnRlbnNpdHk7CisKKwljb21tb25faW5pdCgpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzcGl0enNjb29wMl9kZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZml4dXBfc3BpdHooc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywKKwkJc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUsIHN0cnVjdCBtZW1pbmZvICptaSkKK3sKKwlzaGFycHNsX3NhdmVfcGFyYW0oKTsKKwltaS0+bnJfYmFua3MgPSAxOworCW1pLT5iYW5rWzBdLnN0YXJ0ID0gMHhhMDAwMDAwMDsKKwltaS0+YmFua1swXS5ub2RlID0gMDsKKwltaS0+YmFua1swXS5zaXplID0gKDY0KjEwMjQqMTAyNCk7Cit9CisKKyNpZmRlZiBDT05GSUdfTUFDSF9TUElUWgorTUFDSElORV9TVEFSVChTUElUWiwgIlNIQVJQIFNwaXR6IikKKwkucGh5c19yYW0JPSAweGEwMDAwMDAwLAorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCT0gZml4dXBfc3BpdHosCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gc3BpdHpfaW5pdCwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JPUlpPSQorTUFDSElORV9TVEFSVChCT1JaT0ksICJTSEFSUCBCb3J6b2kiKQorCS5waHlzX3JhbQk9IDB4YTAwMDAwMDAsCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5maXh1cAkJPSBmaXh1cF9zcGl0eiwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBzcGl0el9pbml0LAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwppbmRleCBmODdhYTBiLi43YzA1ZjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwpAQCAtMTIsNiArMTIsNyBAQAogICoKICAqIE1vZGlmaWNhdGlvbnM6CiAgKgkwMi1NYXktMjAwNSBCSkQgIENvcGllZCBmcm9tIG1hY2gtYmFzdC5jCisgKgkyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIzMiw3ICsyMzMsNyBAQAogCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShhbnViaXNfY2xvY2tzKQogfTsKIAotdm9pZCBfX2luaXQgYW51YmlzX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGFudWJpc19tYXBfaW8odm9pZCkKIHsKIAkvKiBpbml0aWFsaXNlIHRoZSBjbG9ja3MgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IDFhMzM2N2QuLmVkMWYwN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTMxLDYgKzMxLDcgQEAKICAqICAgICAxNy1KdWwtMjAwNSBCSkQgIENoYW5nZWQgdG8gcGxhdGZvcm0gZGV2aWNlIGZvciBTdXBlcklPIDE2NTUwcwogICogICAgIDI1LUp1bC0yMDA1IEJKRCAgUmVtb3ZlZCBBU0lYIHN0YXRpYyBtYXBwaW5ncwogICogICAgIDI3LUp1bC0yMDA1IEJKRCAgRW5zdXJlIG1heGltdW0gZnJlcXVlbmN5IG9mIGkyYyBidXMKKyAqICAgICAyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQyOCw3ICs0MjksNyBAQAogCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShiYXN0X2Nsb2NrcykKIH07CiAKLXZvaWQgX19pbml0IGJhc3RfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgYmFzdF9tYXBfaW8odm9pZCkKIHsKIAkvKiBpbml0aWFsaXNlIHRoZSBjbG9ja3MgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKaW5kZXggNmZmMTg4OS4uZmIzY2IwMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMjQsNiArMjQsNyBAQAogICogICAgIDEwLUphbi0yMDA1IEJKRCAgUmVtb3ZlZCBpbmNsdWRlIG9mIHMzYzI0MTAuaAogICogICAgIDE0LUphbi0yMDA1IEJKRCAgQWRkZWQgY2xvY2sgaW5pdAogICogICAgIDEwLU1hci0yMDA1IExDVlIgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKKyAqICAgICAyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0Nyw3ICsxNDgsNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShoMTk0MF9kZXZpY2VzKQogfTsKIAotdm9pZCBfX2luaXQgaDE5NDBfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaDE5NDBfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKGgxOTQwX2lvZGVzYywgQVJSQVlfU0laRShoMTk0MF9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDApOwpAQCAtMTU1LDEzICsxNTYsMTMgQEAKIAlzM2MyNHh4X3NldF9ib2FyZCgmaDE5NDBfYm9hcmQpOwogfQogCi12b2lkIF9faW5pdCBoMTk0MF9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGgxOTQwX2luaXRfaXJxKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lycSgpOwogCiB9CiAKLXZvaWQgX19pbml0IGgxOTQwX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBoMTk0MF9pbml0KHZvaWQpCiB7CiAJc2V0X3MzYzI0MTBmYl9pbmZvKCZoMTk0MF9sY2RjZmcpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCA2NmJmNWJiLi41YzBmMmIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtOTcsNyArOTcsNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShuMzBfZGV2aWNlcykKIH07CiAKLXZvaWQgX19pbml0IG4zMF9tYXBfaW8odm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBuMzBfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKG4zMF9pb2Rlc2MsIEFSUkFZX1NJWkUobjMwX2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CkBAIC0xMDUsMTQgKzEwNSwxNCBAQAogCXMzYzI0eHhfc2V0X2JvYXJkKCZuMzBfYm9hcmQpOwogfQogCi12b2lkIF9faW5pdCBuMzBfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBuMzBfaW5pdF9pcnEodm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaXJxKCk7CiB9CiAKIC8qIEdQQjMgaXMgdGhlIGxpbmUgdGhhdCBjb250cm9scyB0aGUgcHVsbC11cCBmb3IgdGhlIFVTQiBEKyBsaW5lICovCiAKLXZvaWQgX19pbml0IG4zMF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbjMwX2luaXQodm9pZCkKIHsKIAlzM2NfZGV2aWNlX2kyYy5kZXYucGxhdGZvcm1fZGF0YSA9ICZuMzBfaTJjY2ZnOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbmV4Y29kZXIuYwppbmRleCBkMjRjMjQyLi5jMjJmODIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEYyLCBTM0MyNDEwX0dQRjJfT1VUUCk7IC8vIENBTV9HUElPNiA9PiBDQU1fUFdSRE4KIH0KIAotdm9pZCBfX2luaXQgbmV4Y29kZXJfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbmV4Y29kZXJfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKG5leGNvZGVyX2lvZGVzYywgQVJSQVlfU0laRShuZXhjb2Rlcl9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCmluZGV4IGQ5MDFlZDQuLmFkMTQ1OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogfTsKIAogCi12b2lkIF9faW5pdCBvdG9tMTFfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb3RvbTExX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhvdG9tMTFfaW9kZXNjLCBBUlJBWV9TSVpFKG90b20xMV9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwppbmRleCBhNzNkNjFjLi4yMmQ5ZTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwpAQCAtMTYsNiArMTYsNyBAQAogICoJMTQtSmFuLTIwMDUgQkpEICBBZGRlZCBuZXcgY2xvY2sgaW5pdAogICoJMTAtTWFyLTIwMDUgTENWUiBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQogICoJMTQtTWFyLTIwMDUgQkpEICBGaXhlZCBfX2lvbWVtIHdhcm5pbmdzCisgKgkyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEwOCw3ICsxMDksNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShyeDM3MTVfZGV2aWNlcykKIH07CiAKLXZvaWQgX19pbml0IHJ4MzcxNV9tYXBfaW8odm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCByeDM3MTVfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKHJ4MzcxNV9pb2Rlc2MsIEFSUkFZX1NJWkUocngzNzE1X2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTY5MzQwMDApOwpAQCAtMTE2LDcgKzExNyw3IEBACiAJczNjMjR4eF9zZXRfYm9hcmQoJnJ4MzcxNV9ib2FyZCk7CiB9CiAKLXZvaWQgX19pbml0IHJ4MzcxNV9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHJ4MzcxNV9pbml0X2lycSh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pcnEoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IDY3ZTkwM2EuLjJlZGE1NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtMjgsNiArMjgsNyBAQAogICogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIDEwLU1hci0yMDA1IExDVlIgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisgKiAyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTk3LDcgKzk4LDcgQEAKIAkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUoc21kazI0MTBfZGV2aWNlcykKIH07CiAKLXZvaWQgX19pbml0IHNtZGsyNDEwX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDEwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhzbWRrMjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoc21kazI0MTBfaW9kZXNjKSk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKQEAgLTEwNSw3ICsxMDYsNyBAQAogCXMzYzI0eHhfc2V0X2JvYXJkKCZzbWRrMjQxMF9ib2FyZCk7CiB9CiAKLXZvaWQgX19pbml0IHNtZGsyNDEwX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTBfaW5pdF9pcnEodm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaXJxKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYwppbmRleCAzNTc1MjIxLi43MjJlZjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqCTIyLUZlYi0yMDA1IEJKRCAgIFVwZGF0ZWQgZm9yIDIuNi4xMS1yYzUgcmVsZXNhCiAgKgkxMC1NYXItMjAwNSBMQ1ZSICBSZXBsYWNlZCBTM0MyNDEwX1ZBIGJ5IFMzQzI0WFhfVkEKICAqCTE0LU1hci0yMDA1IEJKRAkgIHZvaWQgX19pb21lbSBmaXhlcworICoJMjAtU2VwLTIwMDUgQkpEICAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtOTgsNyArOTksNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShzbWRrMjQ0MF9kZXZpY2VzKQogfTsKIAotdm9pZCBfX2luaXQgc21kazI0NDBfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDBfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKHNtZGsyNDQwX2lvZGVzYywgQVJSQVlfU0laRShzbWRrMjQ0MF9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDE2OTM0NDAwKTsKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXMzYzI0eHhfc2V0X2JvYXJkKCZzbWRrMjQ0MF9ib2FyZCk7CiB9CiAKLXZvaWQgX19pbml0IHNtZGsyNDQwX21hY2hpbmVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDQwX21hY2hpbmVfaW5pdCh2b2lkKQogewogCS8qIENvbmZpZ3VyZSB0aGUgTEVEcyAoZXZlbiBpZiB3ZSBoYXZlIG5vIExFRCBzdXBwb3J0KSovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKaW5kZXggOGY5YWIyOC4uNjYzYTdmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKQEAgLTI4LDYgKzI4LDcgQEAKICAqICAgICAxMC1NYXItMjAwNSBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCiAgKiAgICAgMTQtTWFyLTIwMDYgQkpEICB2b2lkIF9faW9tZW0gZml4ZXMKICAqICAgICAyMi1KdW4tMjAwNiBCSkQgIEFkZGVkIERNOTAwMCBwbGF0Zm9ybSBpbmZvcm1hdGlvbgorICogICAgIDIwLVNlcC0yMDA1IEJKRCAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzQ3LDcgKzM0OCw3IEBACiAJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQjksIDEpOwogfQogCi12b2lkIF9faW5pdCB2cjEwMDBfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgdnIxMDAwX21hcF9pbyh2b2lkKQogewogCS8qIGluaXRpYWxpc2UgY2xvY2sgc291cmNlcyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDhjYjY5MTEuLjI1ZDZhNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0xMTEsMTIgKzExMSwxMSBAQAogCiBzdGF0aWMgdm9pZCBjb2xsaWVfc2V0X3ZwcChpbnQgdnBwKQogewotCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9HUENSLCByZWFkX3Njb29wX3JlZyhTQ09PUF9HUENSKSB8IENPTExJRV9TQ1BfVlBFTik7Ci0JaWYgKHZwcCkgewotCQl3cml0ZV9zY29vcF9yZWcoU0NPT1BfR1BXUiwgcmVhZF9zY29vcF9yZWcoU0NPT1BfR1BXUikgfCBDT0xMSUVfU0NQX1ZQRU4pOwotCX0gZWxzZSB7Ci0JCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9HUFdSLCByZWFkX3Njb29wX3JlZyhTQ09PUF9HUFdSKSAmIH5DT0xMSUVfU0NQX1ZQRU4pOwotCX0KKwl3cml0ZV9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQQ1IsIHJlYWRfc2Nvb3BfcmVnKFNDT09QX0dQQ1IpIHwgQ09MTElFX1NDUF9WUEVOKTsKKwlpZiAodnBwKQorCQl3cml0ZV9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQV1IsIHJlYWRfc2Nvb3BfcmVnKFNDT09QX0dQV1IpIHwgQ09MTElFX1NDUF9WUEVOKTsKKwllbHNlCisJCXdyaXRlX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUiwgcmVhZF9zY29vcF9yZWcoU0NPT1BfR1BXUikgJiB+Q09MTElFX1NDUF9WUEVOKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGNvbGxpZV9mbGFzaF9kYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oCmluZGV4IDI3OWUzYWYuLmYwODVkNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmgKQEAgLTM5LDMgKzM5LDYgQEAKIAogc3RydWN0IGlyZGFfcGxhdGZvcm1fZGF0YTsKIHZvaWQgc2ExMXgwX3NldF9pcmRhX2RhdGEoc3RydWN0IGlyZGFfcGxhdGZvcm1fZGF0YSAqaXJkYSk7CisKK3N0cnVjdCBtY3BfcGxhdF9kYXRhOwordm9pZCBzYTExeDBfc2V0X21jcF9kYXRhKHN0cnVjdCBtY3BfcGxhdF9kYXRhICpkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IDBiNmM0ZGIuLjRhODg0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMjMzLDcgKzIzMywxNyBAQAogCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAhbW0pCiAJCWdvdG8gbm9fY29udGV4dDsKIAotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkvKgorCSAqIEFzIHBlciB4ODYsIHdlIG1heSBkZWFkbG9jayBoZXJlLiAgSG93ZXZlciwgc2luY2UgdGhlIGtlcm5lbCBvbmx5CisJICogdmFsaWRseSByZWZlcmVuY2VzIHVzZXIgc3BhY2UgZnJvbSB3ZWxsIGRlZmluZWQgYXJlYXMgb2YgdGhlIGNvZGUsCisJICogd2UgY2FuIGJ1ZyBvdXQgZWFybHkgaWYgdGhpcyBpcyBmcm9tIGNvZGUgd2hpY2ggc2hvdWxkbid0LgorCSAqLworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKCF1c2VyX21vZGUocmVncykgJiYgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPkFSTV9wYykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl9CisKIAlmYXVsdCA9IF9fZG9fcGFnZV9mYXVsdChtbSwgYWRkciwgZnNyLCB0c2spOwogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKaW5kZXggMWQ3MzlkMi4uODJlYzk1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKQEAgLTUwOSw3ICs1MDksNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtMTAyMF9wcm9jX2luZm8sI29iamVjdAogX19hcm0xMDIwX3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCA5YjcyNTY2Li43Mzc1ZmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC00OTEsNyArNDkxLDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfX2FybTEwMjBlX3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTEwMjBlX3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggMzdiNzBmYS4uNmNhNjM5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtMTAyMl9wcm9jX2luZm8sI29iamVjdAogX19hcm0xMDIyX3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggOTMxYjY5MC4uMTAzMTdlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTQ2OSw3ICs0NjksNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtMTAyNl9wcm9jX2luZm8sI29iamVjdAogX19hcm0xMDI2X3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IGQwZjFiYmIuLjhlN2UxZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtMzMyLDcgKzMzMiw3IEBACiAKIAkJLmFsaWduCiAKLQkJLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgogCiAJCS50eXBlCV9fYXJtNl9wcm9jX2luZm8sICNvYmplY3QKIF9fYXJtNl9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwppbmRleCBjNjljOWRlLi5hMTNlMDE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKQEAgLTIyMiw3ICsyMjIsNyBAQAogICogU2VlIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wcm9jaW5mby5oIGZvciBhIGRlZmluaXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUuCiAgKi8KIAkKLQkJLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgogCiAJCS50eXBlCV9fYXJtNzEwX3Byb2NfaW5mbywgI29iamVjdAogX19hcm03MTBfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggMGY0OTBhMC4uZDE2NTEzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC00NTIsNyArNDUyLDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfX2FybTkyMF9wcm9jX2luZm8sI29iamVjdAogX19hcm05MjBfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggNjJiYzM0YS4uMjNiOGVkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC00NTYsNyArNDU2LDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfX2FybTkyMl9wcm9jX2luZm8sI29iamVjdAogX19hcm05MjJfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggZWU0OWFhMi4uZWU5NWM1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC01MjEsNyArNTIxLDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfX2FybTkyNV9wcm9jX2luZm8sI29iamVjdAogX19hcm05MjVfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKaW5kZXggYmI5NWNjOS4uN2QwNDJkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCkBAIC00NzEsNyArNDcxLDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfX2FybTkyNl9wcm9jX2luZm8sI29iamVjdAogX19hcm05MjZfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IDM0ZjdlN2QuLmJkMzMwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTI0OSw3ICsyNDksNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fc2ExMTBfcHJvY19pbmZvLCNvYmplY3QKIF9fc2ExMTBfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggY2ExNGY4MC4uOTFiODkxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0yODAsNyArMjgwLDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfX3NhMTEwMF9wcm9jX2luZm8sI29iamVjdAogX19zYTExMDBfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IGViMzQ4MjMuLmNhZjNiMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCS5zaXplCWNwdV9lbGZfbmFtZSwgLiAtIGNwdV9lbGZfbmFtZQogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkvKgogCSAqIE1hdGNoIGFueSBBUk12NiBwcm9jZXNzb3IgY29yZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IGI4OGRlMjcwLi44NjFiMzU5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC01NzgsNyArNTc4LDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfXzgwMjAwX3Byb2NfaW5mbywjb2JqZWN0CiBfXzgwMjAwX3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYvYm9vdC9jb21wcmVzc2VkL2h3LWJzZS5jIGIvYXJjaC9hcm0yNi9ib290L2NvbXByZXNzZWQvaHctYnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOGYwN2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0yNi9ib290L2NvbXByZXNzZWQvaHctYnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQnJpZ2h0IFN0YXIgRW5naW5lZXJpbmcgSW5jLgotICoKLSAqIGNvZGUgZm9yIHJlYWRuZyBwYXJhbWV0ZXJzIGZyb20gdGhlCi0gKiBwYXJhbWV0ZXIgYmxvY2tzIG9mIHRoZSBib290IGJsb2NrCi0gKiBmbGFzaCBtZW1vcnkKLSAqCi0gKi8KLQotc3RhdGljIGludCBzdHJjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQotewotICB3aGlsZSAoKnMxICE9ICdcMCcgJiYgKnMxID09ICpzMikKLSAgICB7Ci0gICAgICBzMSsrOwotICAgICAgczIrKzsKLSAgICB9Ci0KLSAgcmV0dXJuICgqKHVuc2lnbmVkIGNoYXIgKikgczEpIC0gKCoodW5zaWduZWQgY2hhciAqKSBzMik7Ci19Ci0KLXN0cnVjdCBwYmxrX3QgewotICBjaGFyIHR5cGU7Ci0gIHVuc2lnbmVkIHNob3J0IHNpemU7Ci19OwotCi1zdGF0aWMgY2hhciAqYnNlX2dldGZsYXNocGFyYW0oY2hhciAqbmFtZSkgewotICB1bnNpZ25lZCBpbnQgZXNpemU7Ci0gIGNoYXIgKnEsKnI7Ci0gIHVuc2lnbmVkIGNoYXIgKnAsKmU7Ci0gIHN0cnVjdCBwYmxrX3QgKnRoZXBiID0gKHN0cnVjdCBwYmxrX3QgKikgMHgwMDAwNDAwMDsKLSAgc3RydWN0IHBibGtfdCAqYWx0cGIgPSAoc3RydWN0IHBibGtfdCAqKSAweDAwMDA2MDAwOyAgCi0gIGlmICh0aGVwYi0+dHlwZSYxKSB7Ci0gICAgaWYgKGFsdHBiLT50eXBlJjEpIHsKLSAgICAgIC8qIG5vIHZhbGlkIHBhcmFtIGJsb2NrICovIAotICAgICAgcmV0dXJuIChjaGFyKikwOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBhbHRwYiBpcyB2YWxpZCAqLwotICAgICAgc3RydWN0IHBibGtfdCAqdG1wOwotICAgICAgdG1wID0gdGhlcGI7Ci0gICAgICB0aGVwYiA9IGFsdHBiOwotICAgICAgYWx0cGIgPSB0bXA7Ci0gICAgfQotICB9Ci0gIHAgPSAoY2hhciopdGhlcGIgKyBzaXplb2Yoc3RydWN0IHBibGtfdCk7Ci0gIGUgPSBwICsgdGhlcGItPnNpemU7IAotICB3aGlsZSAocCA8IGUpIHsKLSAgICBxID0gcDsKLSAgICBlc2l6ZSA9ICpwOwotICAgIGlmIChlc2l6ZSA9PSAweEZGKSBicmVhazsKLSAgICBpZiAoZXNpemUgPT0gMCkgYnJlYWs7Ci0gICAgaWYgKGVzaXplID4gMTI3KSB7Ci0gICAgICBlc2l6ZSA9IChlc2l6ZSYweDdGKTw8OCB8IHBbMV07Ci0gICAgICBxKys7Ci0gICAgfQotICAgIHErKzsKLSAgICByPXE7Ci0gICAgaWYgKCpyICYmICgobmFtZSA9PSAwKSB8fCAoIXN0cmNtcChuYW1lLHIpKSkpIHsKLSAgICAgIHdoaWxlICgqcSsrKSA7Ci0gICAgICByZXR1cm4gcTsKLSAgICB9Ci0gICAgcCs9ZXNpemU7Ci0gIH0KLSAgcmV0dXJuIChjaGFyKikwOwotfQotCi12b2lkIGJzZV9zZXR1cCh2b2lkKSB7Ci0gIC8qIGV4dHJhY3QgdGhlIGxpbnV4IGNtZGxpbmUgZnJvbSBmbGFzaCAqLwotICBjaGFyICpuYW1lPWJzZV9nZXRmbGFzaHBhcmFtKCJsaW51eGJvb3QiKTsKLSAgY2hhciAqeCA9IChjaGFyICopMHhjMDAwMDEwMDsKLSAgaWYgKG5hbWUpIHsgCi0gICAgd2hpbGUgKCpuYW1lKSAqeCsrPSpuYW1lKys7Ci0gIH0KLSAgKng9MDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnIGIvYXJjaC9pMzg2L0tjb25maWcKaW5kZXggYjIyZjAwMy4uZDI3MDNjZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcKKysrIGIvYXJjaC9pMzg2L0tjb25maWcKQEAgLTkwOCwxMSArOTA4LDYgQEAKICAJICBUaGUgZGVmYXVsdCB5ZXMgd2lsbCBhbGxvdyB0aGUga2VybmVsIHRvIGRvIGlycSBsb2FkIGJhbGFuY2luZy4KIAkgIFNheWluZyBubyB3aWxsIGtlZXAgdGhlIGtlcm5lbCBmcm9tIGRvaW5nIGlycSBsb2FkIGJhbGFuY2luZy4KIAotY29uZmlnIEhBVkVfREVDX0xPQ0sKLQlib29sCi0JZGVwZW5kcyBvbiAoU01QIHx8IFBSRUVNUFQpICYmIFg4Nl9DTVBYQ0hHCi0JZGVmYXVsdCB5Ci0KICMgdHVybmluZyB0aGlzIG9uIHdhc3RlcyBhIGJ1bmNoIG9mIHNwYWNlLgogIyBTdW1taXQgbmVlZHMgaXQgb25seSB3aGVuIE5VTUEgaXMgb24KIGNvbmZpZyBCT09UX0lPUkVNQVAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvZWFybHlxdWlyay5jCmluZGV4IDFhZTJhZWUuLmYxYjlkMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Vhcmx5cXVpcmsuYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KIAogc3RhdGljIGludCBfX2luaXQgY2hlY2tfYnJpZGdlKGludCB2ZW5kb3IsIGludCBkZXZpY2UpCiB7CkBAIC0xNiwxNSArMTUsNiBAQAogCWlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OVklESUEpIHsKIAkJYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlID0gMTsKIAl9Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JLyoKLQkgKiBBVEkgSVhQIGNoaXBzZXRzIGdldCBkb3VibGUgdGltZXIgaW50ZXJydXB0cy4KLQkgKiBGb3Igbm93IGp1c3QgZG8gdGhpcyBmb3IgYWxsIEFUSSBjaGlwc2V0cy4KLSAJICogRklYTUU6IHRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgdGhlIG5vbiBBQ1BJIGNhc2UgdG9vLgotCSAqLwotCWlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkpCi0JCWRpc2FibGVfdGltZXJfcGluXzEgPSAxOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDFjYmI5YzAuLjM1MGVhNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KQEAgLTI4LDggKzI5LDYgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbnQgcmVib290X2NwdSA9IC0xOwotLyogc2hhbWVsZXNzbHkgZ3JhYmJlZCBmcm9tIGxpYi92c3ByaW50Zi5jIGZvciByZWFkYWJpbGl0eSAqLwotI2RlZmluZSBpc19kaWdpdChjKQkoKGMpID49ICcwJyAmJiAoYykgPD0gJzknKQogI2VuZGlmCiBzdGF0aWMgaW50IF9faW5pdCByZWJvb3Rfc2V0dXAoY2hhciAqc3RyKQogewpAQCAtNDksOSArNDgsOSBAQAogCQkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1NNUAogCQljYXNlICdzJzogLyogInNtcCIgcmVib290IGJ5IGV4ZWN1dGluZyByZXNldCBvbiBCU1Agb3Igb3RoZXIgQ1BVKi8KLQkJCWlmIChpc19kaWdpdCgqKHN0cisxKSkpIHsKKwkJCWlmIChpc2RpZ2l0KCooc3RyKzEpKSkgewogCQkJCXJlYm9vdF9jcHUgPSAoaW50KSAoKihzdHIrMSkgLSAnMCcpOwotCQkJCWlmIChpc19kaWdpdCgqKHN0cisyKSkpIAorCQkJCWlmIChpc2RpZ2l0KCooc3RyKzIpKSkKIAkJCQkJcmVib290X2NwdSA9IHJlYm9vdF9jcHUqMTAgKyAoaW50KSgqKHN0cisyKSAtICcwJyk7CiAJCQl9CiAJCQkJLyogd2Ugd2lsbCBsZWF2ZSBzb3J0aW5nIG91dCB0aGUgZmluYWwgdmFsdWUgCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKaW5kZXggZGMzOWNhNi4uOWI4YzhhMSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtODQ4LDkgKzg0OCw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJCWVsc2UgaWYgKCFtZW1jbXAoZnJvbSwgImFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSIsIDI0KSkKIAkJCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQlpZiAoIW1lbWNtcChmcm9tLCAiZGlzYWJsZV90aW1lcl9waW5fMSIsIDE5KSkKIAkJCWRpc2FibGVfdGltZXJfcGluXzEgPSAxOwogCQlpZiAoIW1lbWNtcChmcm9tLCAiZW5hYmxlX3RpbWVyX3Bpbl8xIiwgMTgpKQpAQCAtODU5LDcgKzg1Nyw3IEBACiAJCS8qIGRpc2FibGUgSU8tQVBJQyAqLwogCQllbHNlIGlmICghbWVtY21wKGZyb20sICJub2FwaWMiLCA2KSkKIAkJCWRpc2FibGVfaW9hcGljX3NldHVwKCk7Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisjZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCiAjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwppbmRleCBjNzBjZDJhLi41ZjBhOTVkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJCQkJZ290byB2YWxpZF9rNzsKIAogCQkvKiBJZiB3ZSBnZXQgaGVyZSwgaXQncyBub3QgYSBjZXJ0aWZpZWQgU01QIGNhcGFibGUgQU1EIHN5c3RlbS4gKi8KLQkJdGFpbnRlZCB8PSBUQUlOVF9VTlNBRkVfU01QOworCQlhZGRfdGFpbnQoVEFJTlRfVU5TQUZFX1NNUCk7CiAJfQogCiB2YWxpZF9rNzoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCAwOWE1OGNiLi40MzFhNTUxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCkBAIC04MDcsOCArODA3LDkgQEAKIAljd2QgPSBnZXRfZnB1X2N3ZCh0YXNrKTsKIAlzd2QgPSBnZXRfZnB1X3N3ZCh0YXNrKTsKIAlzd2l0Y2ggKHN3ZCAmIH5jd2QgJiAweDNmKSB7Ci0JCWNhc2UgMHgwMDA6Ci0JCWRlZmF1bHQ6CisJCWNhc2UgMHgwMDA6IC8qIE5vIHVubWFza2VkIGV4Y2VwdGlvbiAqLworCQkJcmV0dXJuOworCQlkZWZhdWx0OiAgICAvKiBNdWx0aXBsZSBleGNlcHRpb25zICovCiAJCQlicmVhazsKIAkJY2FzZSAweDAwMTogLyogSW52YWxpZCBPcCAqLwogCQkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9saWIvTWFrZWZpbGUgYi9hcmNoL2kzODYvbGliL01ha2VmaWxlCmluZGV4IDdiMTkzMmQuLjkxNDkzM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L2xpYi9NYWtlZmlsZQpAQCAtNyw0ICs3LDMgQEAKIAliaXRvcHMubwogCiBsaWItJChDT05GSUdfWDg2X1VTRV8zRE5PVykgKz0gbW14Lm8KLWxpYi0kKENPTkZJR19IQVZFX0RFQ19MT0NLKSArPSBkZWNfYW5kX2xvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2xpYi9kZWNfYW5kX2xvY2suYyBiL2FyY2gvaTM4Ni9saWIvZGVjX2FuZF9sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiODFiMjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9pMzg2L2xpYi9kZWNfYW5kX2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiB4ODYgdmVyc2lvbiBvZiAiYXRvbWljX2RlY19hbmRfbG9jaygpIiB1c2luZwotICogdGhlIGF0b21pYyAiY21weGNoZyIgaW5zdHJ1Y3Rpb24uCi0gKgotICogKEZvciBDUFUncyBsYWNraW5nIGNtcHhjaGcsIHdlIHVzZSB0aGUgc2xvdwotICogZ2VuZXJpYyB2ZXJzaW9uLCBhbmQgdGhpcyBvbmUgbmV2ZXIgZXZlbiBnZXRzCi0gKiBjb21waWxlZCkuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1pbnQgX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljX3QgKmF0b21pYywgc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgY291bnRlcjsKLQlpbnQgbmV3Y291bnQ7Ci0KLXJlcGVhdDoKLQljb3VudGVyID0gYXRvbWljX3JlYWQoYXRvbWljKTsKLQluZXdjb3VudCA9IGNvdW50ZXItMTsKLQotCWlmICghbmV3Y291bnQpCi0JCWdvdG8gc2xvd19wYXRoOwotCi0JYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnbCAlMSwlMiIKLQkJOiI9YSIgKG5ld2NvdW50KQotCQk6InIiIChuZXdjb3VudCksICJtIiAoYXRvbWljLT5jb3VudGVyKSwgIjAiIChjb3VudGVyKSk7Ci0KLQkvKiBJZiB0aGUgYWJvdmUgZmFpbGVkLCAiZWF4IiB3aWxsIGhhdmUgY2hhbmdlZCAqLwotCWlmIChuZXdjb3VudCAhPSBjb3VudGVyKQotCQlnb3RvIHJlcGVhdDsKLQlyZXR1cm4gMDsKLQotc2xvd19wYXRoOgotCXNwaW5fbG9jayhsb2NrKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWMpKQotCQlyZXR1cm4gMTsKLQlzcGluX3VubG9jayhsb2NrKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCBlZDI1ZDY2Li45NDVjMTVhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtMjk4LDExICsyOTgsNiBAQAogCiBzb3VyY2UgIm1tL0tjb25maWciCiAKLWNvbmZpZyBIQVZFX0RFQ19MT0NLCi0JYm9vbAotCWRlcGVuZHMgb24gKFNNUCB8fCBQUkVFTVBUKQotCWRlZmF1bHQgeQotCiBjb25maWcgSUEzMl9TVVBQT1JUCiAJYm9vbCAiU3VwcG9ydCBmb3IgTGludXgveDg2IGJpbmFyaWVzIgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9NYWtlZmlsZQppbmRleCA3MGY4ZWQyLi42NzkzMmFkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L01ha2VmaWxlCkBAIC04MiwxNyArODIsNyBAQAogYXJjaGNsZWFuOgogCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoYm9vdCkKIAotYXJjaHByZXBhcmU6ICBpbmNsdWRlL2FzbS1pYTY0Ly5vZmZzZXRzLmguc3RhbXAKLQotaW5jbHVkZS9hc20taWE2NC8ub2Zmc2V0cy5oLnN0YW1wOgotCW1rZGlyIC1wIGluY2x1ZGUvYXNtLWlhNjQKLQlbIC1zIGluY2x1ZGUvYXNtLWlhNjQvYXNtLW9mZnNldHMuaCBdIFwKLQl8fCBlY2hvICIjZGVmaW5lIElBNjRfVEFTS19TSVpFIDAiID4gaW5jbHVkZS9hc20taWE2NC9hc20tb2Zmc2V0cy5oCi0JdG91Y2ggJEAKLQotCi0KLUNMRUFOX0ZJTEVTICs9IHZtbGludXguZ3ogYm9vdGxvYWRlciBpbmNsdWRlL2FzbS1pYTY0Ly5vZmZzZXRzLmguc3RhbXAKK0NMRUFOX0ZJTEVTICs9IHZtbGludXguZ3ogYm9vdGxvYWRlcgogCiBib290OglsaWIvbGliLmEgdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJEAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggMzFkZTcwYi4uYTcyODBkOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTIxNiwxMiArMjE2LDYgQEAKIAlpZiAoIW1wbnQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnkoKElBMzJfU1RBQ0tfVE9QIC0gKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKSBicHJtLT5wKSkKLQkJCQkgICAgICA+PiBQQUdFX1NISUZUKSkgewotCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIG1wbnQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAltZW1zZXQobXBudCwgMCwgc2l6ZW9mKCptcG50KSk7CiAKIAlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCAyOGE0NTI5Li43ZTkyNjQ3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtODk5LDcgKzg5OSw3IEBACiAJaWYgKChlcnIgPSBpb3NhcGljX2luaXQocGh5c19hZGRyLCBnc2lfYmFzZSkpKQogCQlyZXR1cm4gZXJyOwogCi0jaWYgQ09ORklHX0FDUElfTlVNQQorI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKIAlhY3BpX21hcF9pb3NhcGljKGhhbmRsZSwgMCwgTlVMTCwgTlVMTCk7CiAjZW5kaWYJCQkJLyogQ09ORklHX0FDUElfTlVNQSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZjZhMjM0Mi4uNzcyMjU2NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNCw2ICs0LDcgQEAKICAqIHRvIGV4dHJhY3QgYW5kIGZvcm1hdCB0aGUgcmVxdWlyZWQgZGF0YS4KICAqLwogCisjZGVmaW5lIEFTTV9PRkZTRVRTX0MgMQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwppbmRleCBiYTBiNmExLi4wNzQxYjA2NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAJOzsKIAlsZmV0Y2guZmF1bHQgW3IxNl0sIDEyOAogCWJyLnJldC5zcHRrLm1hbnkgcnAKLUVORChwcmVmZXRjaF9zd2l0Y2hfc3RhY2spCitFTkQocHJlZmV0Y2hfc3RhY2spCiAKIEdMT0JBTF9FTlRSWShleGVjdmUpCiAJbW92IHIxNT1fX05SX2V4ZWN2ZQkJCS8vIHB1dCBzeXNjYWxsIG51bWJlciBpbiBwbGFjZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwppbmRleCA2ZTY4Mzc0Li44MGY4M2Q2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwpAQCAtODQsMjMgKzg0LDIzIEBACiAJc3RydWN0IHBhZ2UgKnA7CiAKIAkvKiB3aGV0aGVyIHBoeXNpY2FsIGFkZHJlc3MgaXMgdmFsaWQgb3Igbm90ICovCi0JaWYgKCAhaWE2NF9waHlzX2FkZHJfdmFsaWQocGFkZHIpICkgCisJaWYgKCFpYTY0X3BoeXNfYWRkcl92YWxpZChwYWRkcikpCiAJCXJldHVybiBJU09MQVRFX05HOwogCiAJLyogY29udmVydCBwaHlzaWNhbCBhZGRyZXNzIHRvIHBoeXNpY2FsIHBhZ2UgbnVtYmVyICovCiAJcCA9IHBmbl90b19wYWdlKHBhZGRyPj5QQUdFX1NISUZUKTsKIAogCS8qIGNoZWNrIHdoZXRoZXIgYSBwYWdlIG51bWJlciBoYXZlIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkIG9yIG5vdCAqLwotCWZvciggaSA9IDA7IGkgPCBudW1fcGFnZV9pc29sYXRlOyBpKysgKQotCQlpZiggcGFnZV9pc29sYXRlW2ldID09IHAgKQorCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZV9pc29sYXRlOyBpKyspCisJCWlmIChwYWdlX2lzb2xhdGVbaV0gPT0gcCkKIAkJCXJldHVybiBJU09MQVRFX09LOyAvKiBhbHJlYWR5IGxpc3RlZCAqLwogCiAJLyogbGltaXRhdGlvbiBjaGVjayAqLwotCWlmKCBudW1fcGFnZV9pc29sYXRlID09IE1BWF9QQUdFX0lTT0xBVEUgKSAKKwlpZiAobnVtX3BhZ2VfaXNvbGF0ZSA9PSBNQVhfUEFHRV9JU09MQVRFKQogCQlyZXR1cm4gSVNPTEFURV9ORzsKIAogCS8qIGtpY2sgcGFnZXMgaGF2aW5nIGF0dHJpYnV0ZSAnU0xBQicgb3IgJ1Jlc2VydmVkJyAqLwotCWlmKCBQYWdlU2xhYihwKSB8fCBQYWdlUmVzZXJ2ZWQocCkgKSAKKwlpZiAoUGFnZVNsYWIocCkgfHwgUGFnZVJlc2VydmVkKHApKQogCQlyZXR1cm4gSVNPTEFURV9ORzsKIAogCS8qIGFkZCBhdHRyaWJ1dGUgJ1Jlc2VydmVkJyBhbmQgcmVnaXN0ZXIgdGhlIHBhZ2UgKi8KQEAgLTEzOSwxMCArMTM5LDEwIEBACiAgKiBAcGVpZHg6CXBvaW50ZXIgdG8gaW5kZXggb2YgcHJvY2Vzc29yIGVycm9yIHNlY3Rpb24KICAqLwogCi1zdGF0aWMgdm9pZCAKK3N0YXRpYyB2b2lkCiBtY2FfbWFrZV9wZWlkeChzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QgKnNscGksIHBlaWR4X3RhYmxlX3QgKnBlaWR4KQogewotCS8qIAorCS8qCiAJICogY2FsY3VsYXRlIHRoZSBzdGFydCBhZGRyZXNzIG9mCiAJICogICAic3RydWN0IGNwdWlkX2luZm8iIGFuZCAic2FsX3Byb2Nlc3Nvcl9zdGF0aWNfaW5mb190Ii4KIAkgKi8KQEAgLTE2NCw3ICsxNjQsNyBAQAogfQogCiAvKioKLSAqIG1jYV9tYWtlX3NsaWR4IC0gIE1ha2UgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZCAKKyAqIG1jYV9tYWtlX3NsaWR4IC0gIE1ha2UgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQGJ1ZmZlcjoJcG9pbnRlciB0byBTQUwgZXJyb3IgcmVjb3JkCiAgKiBAc2xpZHg6CXBvaW50ZXIgdG8gaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICoKQEAgLTE3MiwxMiArMTcyLDEyIEBACiAgKgkxIGlmIHJlY29yZCBoYXMgcGxhdGZvcm0gZXJyb3IgLyAwIGlmIG5vdAogICovCiAjZGVmaW5lIExPR19JTkRFWF9BRERfU0VDVF9QVFIoc2VjdCwgcHRyKSBcCi0gICAgICAgIHsgc2xpZHhfbGlzdF90ICpobCA9ICZzbGlkeF9wb29sLmJ1ZmZlcltzbGlkeF9wb29sLmN1cl9pZHhdOyBcCi0gICAgICAgICAgaGwtPmhkciA9IHB0cjsgXAotICAgICAgICAgIGxpc3RfYWRkKCZobC0+bGlzdCwgJihzZWN0KSk7IFwKLSAgICAgICAgICBzbGlkeF9wb29sLmN1cl9pZHggPSAoc2xpZHhfcG9vbC5jdXJfaWR4ICsgMSklc2xpZHhfcG9vbC5tYXhfaWR4OyB9CisJe3NsaWR4X2xpc3RfdCAqaGwgPSAmc2xpZHhfcG9vbC5idWZmZXJbc2xpZHhfcG9vbC5jdXJfaWR4XTsgXAorCWhsLT5oZHIgPSBwdHI7IFwKKwlsaXN0X2FkZCgmaGwtPmxpc3QsICYoc2VjdCkpOyBcCisJc2xpZHhfcG9vbC5jdXJfaWR4ID0gKHNsaWR4X3Bvb2wuY3VyX2lkeCArIDEpJXNsaWR4X3Bvb2wubWF4X2lkeDsgfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogbWNhX21ha2Vfc2xpZHgodm9pZCAqYnVmZmVyLCBzbGlkeF90YWJsZV90ICpzbGlkeCkKIHsKIAlpbnQgcGxhdGZvcm1fZXJyID0gMDsKQEAgLTIxNCwyOCArMjE0LDM2IEBACiAJCXNwID0gKHNhbF9sb2dfc2VjdGlvbl9oZHJfdCAqKSgoY2hhciopYnVmZmVyICsgZXJjZF9wb3MpOwogCQlpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUFJPQ19ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCUxPR19JTkRFWF9BRERfU0VDVF9QVFIoc2xpZHgtPnByb2NfZXJyLCBzcCk7Ci0JCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUExBVF9NRU1fREVWX0VSUl9TRUNUX0dVSUQpKSB7CisJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLAorCQkJCVNBTF9QTEFUX01FTV9ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5tZW1fZGV2X2Vyciwgc3ApOwotCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwgU0FMX1BMQVRfU0VMX0RFVl9FUlJfU0VDVF9HVUlEKSkgeworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwKKwkJCQlTQUxfUExBVF9TRUxfREVWX0VSUl9TRUNUX0dVSUQpKSB7CiAJCQlwbGF0Zm9ybV9lcnIgPSAxOwogCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+c2VsX2Rldl9lcnIsIHNwKTsKLQkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX1BDSV9CVVNfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsCisJCQkJU0FMX1BMQVRfUENJX0JVU19FUlJfU0VDVF9HVUlEKSkgewogCQkJcGxhdGZvcm1fZXJyID0gMTsKIAkJCUxPR19JTkRFWF9BRERfU0VDVF9QVFIoc2xpZHgtPnBjaV9idXNfZXJyLCBzcCk7Ci0JCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUExBVF9TTUJJT1NfREVWX0VSUl9TRUNUX0dVSUQpKSB7CisJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLAorCQkJCVNBTF9QTEFUX1NNQklPU19ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5zbWJpb3NfZGV2X2Vyciwgc3ApOwotCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwgU0FMX1BMQVRfUENJX0NPTVBfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsCisJCQkJU0FMX1BMQVRfUENJX0NPTVBfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5wY2lfY29tcF9lcnIsIHNwKTsKLQkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX1NQRUNJRklDX0VSUl9TRUNUX0dVSUQpKSB7CisJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLAorCQkJCVNBTF9QTEFUX1NQRUNJRklDX0VSUl9TRUNUX0dVSUQpKSB7CiAJCQlwbGF0Zm9ybV9lcnIgPSAxOwogCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+cGxhdF9zcGVjaWZpY19lcnIsIHNwKTsKLQkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX0hPU1RfQ1RMUl9FUlJfU0VDVF9HVUlEKSkgeworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwKKwkJCQlTQUxfUExBVF9IT1NUX0NUTFJfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5ob3N0X2N0bHJfZXJyLCBzcCk7Ci0JCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUExBVF9CVVNfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsCisJCQkJU0FMX1BMQVRfQlVTX0VSUl9TRUNUX0dVSUQpKSB7CiAJCQlwbGF0Zm9ybV9lcnIgPSAxOwogCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+cGxhdF9idXNfZXJyLCBzcCk7CiAJCX0gZWxzZSB7CkBAIC0yNTMsMTUgKzI2MSwxNiBAQAogICogUmV0dXJuIHZhbHVlOgogICoJMCBvbiBTdWNjZXNzIC8gLUVOT01FTSBvbiBGYWlsdXJlCiAgKi8KLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBpbml0X3JlY29yZF9pbmRleF9wb29scyh2b2lkKQogewogCWludCBpOwogCWludCByZWNfbWF4X3NpemU7ICAvKiBNYXhpbXVtIHNpemUgb2YgU0FMIGVycm9yIHJlY29yZHMgKi8KIAlpbnQgc2VjdF9taW5fc2l6ZTsgLyogTWluaW11bSBzaXplIG9mIFNBTCBlcnJvciBzZWN0aW9ucyAqLwogCS8qIG1pbmltdW0gc2l6ZSB0YWJsZSBvZiBlYWNoIHNlY3Rpb24gKi8KLQlzdGF0aWMgaW50IHNhbF9sb2dfc2VjdF9taW5fc2l6ZXNbXSA9IHsgCi0JCXNpemVvZihzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QpICsgc2l6ZW9mKHNhbF9wcm9jZXNzb3Jfc3RhdGljX2luZm9fdCksCisJc3RhdGljIGludCBzYWxfbG9nX3NlY3RfbWluX3NpemVzW10gPSB7CisJCXNpemVvZihzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QpCisJCSsgc2l6ZW9mKHNhbF9wcm9jZXNzb3Jfc3RhdGljX2luZm9fdCksCiAJCXNpemVvZihzYWxfbG9nX21lbV9kZXZfZXJyX2luZm9fdCksCiAJCXNpemVvZihzYWxfbG9nX3NlbF9kZXZfZXJyX2luZm9fdCksCiAJCXNpemVvZihzYWxfbG9nX3BjaV9idXNfZXJyX2luZm9fdCksCkBAIC0yOTQsNyArMzAzLDggQEAKIAogCS8qIC0gMyAtICovCiAJc2xpZHhfcG9vbC5tYXhfaWR4ID0gKHJlY19tYXhfc2l6ZS9zZWN0X21pbl9zaXplKSAqIDIgKyAxOwotCXNsaWR4X3Bvb2wuYnVmZmVyID0gKHNsaWR4X2xpc3RfdCAqKSBrbWFsbG9jKHNsaWR4X3Bvb2wubWF4X2lkeCAqIHNpemVvZihzbGlkeF9saXN0X3QpLCBHRlBfS0VSTkVMKTsKKwlzbGlkeF9wb29sLmJ1ZmZlciA9IChzbGlkeF9saXN0X3QgKikKKwkJa21hbGxvYyhzbGlkeF9wb29sLm1heF9pZHggKiBzaXplb2Yoc2xpZHhfbGlzdF90KSwgR0ZQX0tFUk5FTCk7CiAKIAlyZXR1cm4gc2xpZHhfcG9vbC5idWZmZXIgPyAwIDogLUVOT01FTTsKIH0KQEAgLTMwOCw2ICszMTgsNyBAQAogICogaXNfbWNhX2dsb2JhbCAtIENoZWNrIHdoZXRoZXIgdGhpcyBNQ0EgaXMgZ2xvYmFsIG9yIG5vdAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciB0byBwYWxfYnVzX2NoZWNrX2luZm9fdAorICogQHNvczoJcG9pbnRlciB0byBoYW5kIG9mZiBzdHJ1Y3QgYmV0d2VlbiBTQUwgYW5kIE9TCiAgKgogICogUmV0dXJuIHZhbHVlOgogICoJTUNBX0lTX0xPQ0FMIC8gTUNBX0lTX0dMT0JBTApAQCAtMzE3LDExICszMjgsMTIgQEAKIGlzX21jYV9nbG9iYWwocGVpZHhfdGFibGVfdCAqcGVpZHgsIHBhbF9idXNfY2hlY2tfaW5mb190ICpwYmNpLAogCSAgICAgIHN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zKQogewotCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190ICpwc3AgPSAocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CisJcGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QgKnBzcCA9CisJCShwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCopcGVpZHhfcHNwKHBlaWR4KTsKIAotCS8qIAorCS8qCiAJICogUEFMIGNhbiByZXF1ZXN0IGEgcmVuZGV6dm91cywgaWYgdGhlIE1DQSBoYXMgYSBnbG9iYWwgc2NvcGUuCi0JICogSWYgInJ6X2Fsd2F5cyIgZmxhZyBpcyBzZXQsIFNBTCByZXF1ZXN0cyBNQ0EgcmVuZGV6dm91cyAKKwkgKiBJZiAicnpfYWx3YXlzIiBmbGFnIGlzIHNldCwgU0FMIHJlcXVlc3RzIE1DQSByZW5kZXp2b3VzCiAJICogaW4gc3BpdGUgb2YgZ2xvYmFsIE1DQS4KIAkgKiBUaGVyZWZvcmUgaXQgaXMgbG9jYWwgTUNBIHdoZW4gcmVuZGV6dm91cyBoYXMgbm90IGJlZW4gcmVxdWVzdGVkLgogCSAqIEZhaWxlZCB0byByZW5kZXp2b3VzLCB0aGUgc3lzdGVtIG11c3QgYmUgZG93bi4KQEAgLTM4MSwxMyArMzkzLDE1IEBACiAgKiBAc2xpZHg6CXBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciBvZiBwYWxfYnVzX2NoZWNrX2luZm8KKyAqIEBzb3M6CXBvaW50ZXIgdG8gaGFuZCBvZmYgc3RydWN0IGJldHdlZW4gU0FMIGFuZCBPUwogICoKICAqIFJldHVybiB2YWx1ZToKICAqCTEgb24gU3VjY2VzcyAvIDAgb24gRmFpbHVyZQogICovCiAKIHN0YXRpYyBpbnQKLXJlY292ZXJfZnJvbV9yZWFkX2Vycm9yKHNsaWR4X3RhYmxlX3QgKnNsaWR4LCBwZWlkeF90YWJsZV90ICpwZWlkeCwgcGFsX2J1c19jaGVja19pbmZvX3QgKnBiY2ksCityZWNvdmVyX2Zyb21fcmVhZF9lcnJvcihzbGlkeF90YWJsZV90ICpzbGlkeCwKKwkJCXBlaWR4X3RhYmxlX3QgKnBlaWR4LCBwYWxfYnVzX2NoZWNrX2luZm9fdCAqcGJjaSwKIAkJCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zKQogewogCXNhbF9sb2dfbW9kX2Vycm9yX2luZm9fdCAqc21laTsKQEAgLTQ1MywyNCArNDY3LDI4IEBACiAgKiBAc2xpZHg6CXBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciBvZiBwYWxfYnVzX2NoZWNrX2luZm8KKyAqIEBzb3M6CXBvaW50ZXIgdG8gaGFuZCBvZmYgc3RydWN0IGJldHdlZW4gU0FMIGFuZCBPUwogICoKICAqIFJldHVybiB2YWx1ZToKICAqCTEgb24gU3VjY2VzcyAvIDAgb24gRmFpbHVyZQogICovCiAKIHN0YXRpYyBpbnQKLXJlY292ZXJfZnJvbV9wbGF0Zm9ybV9lcnJvcihzbGlkeF90YWJsZV90ICpzbGlkeCwgcGVpZHhfdGFibGVfdCAqcGVpZHgsIHBhbF9idXNfY2hlY2tfaW5mb190ICpwYmNpLAorcmVjb3Zlcl9mcm9tX3BsYXRmb3JtX2Vycm9yKHNsaWR4X3RhYmxlX3QgKnNsaWR4LCBwZWlkeF90YWJsZV90ICpwZWlkeCwKKwkJCSAgICBwYWxfYnVzX2NoZWNrX2luZm9fdCAqcGJjaSwKIAkJCSAgICBzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnNvcykKIHsKIAlpbnQgc3RhdHVzID0gMDsKLQlwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCAqcHNwID0gKHBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190KilwZWlkeF9wc3AocGVpZHgpOworCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190ICpwc3AgPQorCQkocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CiAKIAlpZiAocHNwLT5iYyAmJiBwYmNpLT5lYiAmJiBwYmNpLT5ic2kgPT0gMCkgewogCQlzd2l0Y2gocGJjaS0+dHlwZSkgewogCQljYXNlIDE6IC8qIHBhcnRpYWwgcmVhZCAqLwogCQljYXNlIDM6IC8qIGZ1bGwgbGluZShjcHUpIHJlYWQgKi8KIAkJY2FzZSA5OiAvKiBJL08gc3BhY2UgcmVhZCAqLwotCQkJc3RhdHVzID0gcmVjb3Zlcl9mcm9tX3JlYWRfZXJyb3Ioc2xpZHgsIHBlaWR4LCBwYmNpLCBzb3MpOworCQkJc3RhdHVzID0gcmVjb3Zlcl9mcm9tX3JlYWRfZXJyb3Ioc2xpZHgsIHBlaWR4LCBwYmNpLAorCQkJCQkJCSBzb3MpOwogCQkJYnJlYWs7CiAJCWNhc2UgMDogLyogdW5rbm93biAqLwogCQljYXNlIDI6IC8qIHBhcnRpYWwgd3JpdGUgKi8KQEAgLTQ4MSw3ICs0OTksOCBAQAogCQljYXNlIDg6IC8qIHdyaXRlIGNvYWxlc2NpbmcgdHJhbnNhY3Rpb25zICovCiAJCWNhc2UgMTA6IC8qIEkvTyBzcGFjZSB3cml0ZSAqLwogCQljYXNlIDExOiAvKiBpbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0IG1lc3NhZ2UoSVBJKSAqLwotCQljYXNlIDEyOiAvKiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2Ugb3IgZXh0ZXJuYWwgdGFzayBwcmlvcml0eSBjeWNsZSAqLworCQljYXNlIDEyOiAvKiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2Ugb3IKKwkJCQlleHRlcm5hbCB0YXNrIHByaW9yaXR5IGN5Y2xlICovCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtNDk2LDYgKzUxNSw3IEBACiAgKiBAc2xpZHg6CXBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciBvZiBwYWxfYnVzX2NoZWNrX2luZm8KKyAqIEBzb3M6CXBvaW50ZXIgdG8gaGFuZCBvZmYgc3RydWN0IGJldHdlZW4gU0FMIGFuZCBPUwogICoKICAqIFJldHVybiB2YWx1ZToKICAqCTEgb24gU3VjY2VzcyAvIDAgb24gRmFpbHVyZQpAQCAtNTA5LDE1ICs1MjksMTcgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1yZWNvdmVyX2Zyb21fcHJvY2Vzc29yX2Vycm9yKGludCBwbGF0Zm9ybSwgc2xpZHhfdGFibGVfdCAqc2xpZHgsIHBlaWR4X3RhYmxlX3QgKnBlaWR4LCBwYWxfYnVzX2NoZWNrX2luZm9fdCAqcGJjaSwKK3JlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IoaW50IHBsYXRmb3JtLCBzbGlkeF90YWJsZV90ICpzbGlkeCwKKwkJCSAgICAgcGVpZHhfdGFibGVfdCAqcGVpZHgsIHBhbF9idXNfY2hlY2tfaW5mb190ICpwYmNpLAogCQkJICAgICBzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnNvcykKIHsKLQlwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCAqcHNwID0gKHBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190KilwZWlkeF9wc3AocGVpZHgpOworCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190ICpwc3AgPQorCQkocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CiAKLQkvKiAKKwkvKgogCSAqIFdlIGNhbm5vdCByZWNvdmVyIGVycm9ycyB3aXRoIG90aGVyIHRoYW4gYnVzX2NoZWNrLgogCSAqLwotCWlmIChwc3AtPmNjIHx8IHBzcC0+cmMgfHwgcHNwLT51YykgCisJaWYgKHBzcC0+Y2MgfHwgcHNwLT5yYyB8fCBwc3AtPnVjKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC01NDYsMTAgKzU2OCwxMCBAQAogCSAqIChlLmcuIGEgbG9hZCBmcm9tIHBvaXNvbmVkIG1lbW9yeSkKIAkgKiBUaGlzIG1lYW5zICJ0aGVyZSBhcmUgc29tZSBwbGF0Zm9ybSBlcnJvcnMiLgogCSAqLwotCWlmIChwbGF0Zm9ybSkgCisJaWYgKHBsYXRmb3JtKQogCQlyZXR1cm4gcmVjb3Zlcl9mcm9tX3BsYXRmb3JtX2Vycm9yKHNsaWR4LCBwZWlkeCwgcGJjaSwgc29zKTsKLQkvKiAKLQkgKiBPbiBhY2NvdW50IG9mIHN0cmFuZ2UgU0FMIGVycm9yIHJlY29yZCwgd2UgY2Fubm90IHJlY292ZXIuIAorCS8qCisJICogT24gYWNjb3VudCBvZiBzdHJhbmdlIFNBTCBlcnJvciByZWNvcmQsIHdlIGNhbm5vdCByZWNvdmVyLgogCSAqLwogCXJldHVybiAwOwogfQpAQCAtNTU3LDE0ICs1NzksMTQgQEAKIC8qKgogICogbWNhX3RyeV90b19yZWNvdmVyIC0gVHJ5IHRvIHJlY292ZXIgZnJvbSBNQ0EKICAqIEByZWM6CXBvaW50ZXIgdG8gYSBTQUwgZXJyb3IgcmVjb3JkCisgKiBAc29zOglwb2ludGVyIHRvIGhhbmQgb2ZmIHN0cnVjdCBiZXR3ZWVuIFNBTCBhbmQgT1MKICAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKgkxIG9uIFN1Y2Nlc3MgLyAwIG9uIEZhaWx1cmUKICAqLwogCiBzdGF0aWMgaW50Ci1tY2FfdHJ5X3RvX3JlY292ZXIodm9pZCAqcmVjLCAKLQlzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnNvcykKK21jYV90cnlfdG9fcmVjb3Zlcih2b2lkICpyZWMsIHN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zKQogewogCWludCBwbGF0Zm9ybV9lcnI7CiAJaW50IG5fcHJvY19lcnI7CkBAIC01ODgsNyArNjEwLDggQEAKIAl9CiAKIAkvKiBNYWtlIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uICovCi0JbWNhX21ha2VfcGVpZHgoKHNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCopc2xpZHhfZmlyc3RfZW50cnkoJnNsaWR4LnByb2NfZXJyKS0+aGRyLCAmcGVpZHgpOworCW1jYV9tYWtlX3BlaWR4KChzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QqKQorCQlzbGlkeF9maXJzdF9lbnRyeSgmc2xpZHgucHJvY19lcnIpLT5oZHIsICZwZWlkeCk7CiAKIAkvKiBFeHRyYWN0IFByb2Nlc3NvciBCVVNfQ0hFQ0tbMF0gKi8KIAkqKCh1NjQqKSZwYmNpKSA9IHBlaWR4X2NoZWNrX2luZm8oJnBlaWR4LCBidXNfY2hlY2ssIDApOwpAQCAtNTk4LDcgKzYyMSw4IEBACiAJCXJldHVybiAwOwogCQogCS8qIFRyeSB0byByZWNvdmVyIGEgcHJvY2Vzc29yIGVycm9yICovCi0JcmV0dXJuIHJlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IocGxhdGZvcm1fZXJyLCAmc2xpZHgsICZwZWlkeCwgJnBiY2ksIHNvcyk7CisJcmV0dXJuIHJlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IocGxhdGZvcm1fZXJyLCAmc2xpZHgsICZwZWlkeCwKKwkJCQkJICAgICZwYmNpLCBzb3MpOwogfQogCiAvKgpAQCAtNjExLDcgKzYzNSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogcmVnaXN0ZXIgZXh0ZXJuYWwgbWNhIGhhbmRsZXJzICovCi0JaWYgKGlhNjRfcmVnX01DQV9leHRlbnNpb24obWNhX3RyeV90b19yZWNvdmVyKSl7CQorCWlmIChpYTY0X3JlZ19NQ0FfZXh0ZW5zaW9uKG1jYV90cnlfdG9fcmVjb3ZlcikpIHsJCiAJCXByaW50ayhLRVJOX0VSUiAiaWE2NF9yZWdfTUNBX2V4dGVuc2lvbiBmYWlsZWQuXG4iKTsKIAkJa2ZyZWUoc2xpZHhfcG9vbC5idWZmZXIpOwogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5oIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmgKaW5kZXggMDIyN2I3Ni4uZTJmNmZhMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmgKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmgKQEAgLTYsNyArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIEhpZGV0b3NoaSBTZXRvIChzZXRvLmhpZGV0b3NoaUBqcC5mdWppdHN1LmNvbSkKICAqLwogLyoKLSAqIFByb2Nlc3NvciBlcnJvciBzZWN0aW9uOiAKKyAqIFByb2Nlc3NvciBlcnJvciBzZWN0aW9uOgogICoKICAqICArLXNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCAqaW5mby0tLS0tLS0tLS0tLS0rCiAgKiAgfCBzYWxfbG9nX3NlY3Rpb25faGRyX3QgaGVhZGVyOyAgICAgICAgICAgICAgfApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2X2FzbS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2X2FzbS5TCmluZGV4IDJkN2UwMjEuLjNmMjk4ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydl9hc20uUworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnZfYXNtLlMKQEAgLTEzLDQ1ICsxMyw0NSBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogR0xPQkFMX0VOVFJZKG1jYV9oYW5kbGVyX2JoaG9vaykKLQlpbnZhbGEJCQkJCQkvLyBjbGVhciBSU0UgPwotCTs7CQkJCQkJLy8KLQljb3ZlcgkJCQkJCS8vIAotCTs7CQkJCQkJLy8KLQljbHJycmIJCQkJCQkvLworCWludmFsYQkJCQkvLyBjbGVhciBSU0UgPworCTs7CisJY292ZXIKKwk7OworCWNscnJyYgogCTs7CQkJCQkJCi0JYWxsb2MJCXIxNj1hci5wZnMsMCwyLDEsMAkJLy8gbWFrZSBhIG5ldyBmcmFtZQorCWFsbG9jCXIxNj1hci5wZnMsMCwyLDEsMAkvLyBtYWtlIGEgbmV3IGZyYW1lCiAJOzsKLQltb3YJCWFyLnJzYz0wCisJbW92CWFyLnJzYz0wCiAJOzsKLQltb3YJCXIxMz1JQTY0X0tSKENVUlJFTlQpCQkvLyBjdXJyZW50IHRhc2sgcG9pbnRlcgorCW1vdglyMTM9SUE2NF9LUihDVVJSRU5UKQkvLyBjdXJyZW50IHRhc2sgcG9pbnRlcgogCTs7Ci0JbW92CQlyMj1yMTMKKwltb3YJcjI9cjEzCiAJOzsKLQlhZGRsCQlyMjI9SUE2NF9SQlNfT0ZGU0VULHIyCisJYWRkbAlyMjI9SUE2NF9SQlNfT0ZGU0VULHIyCiAJOzsKLQltb3YJCWFyLmJzcHN0b3JlPXIyMgorCW1vdglhci5ic3BzdG9yZT1yMjIKIAk7OwotCWFkZGwJCXNwPUlBNjRfU1RLX09GRlNFVC1JQTY0X1BUX1JFR1NfU0laRSxyMgorCWFkZGwJc3A9SUE2NF9TVEtfT0ZGU0VULUlBNjRfUFRfUkVHU19TSVpFLHIyCiAJOzsKLQlhZGRzCQlyMj1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjEzCisJYWRkcwlyMj1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjEzCiAJOzsKLQlzdDEJCVtyMl09cjAJCQkJLy8gY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnCi0JbW92CQlsb2MwPXIxNgotCW1vdmwJCWxvYzE9bWNhX2hhbmRsZXJfYmgJCS8vIHJlY292ZXJ5IEMgZnVuY3Rpb24KKwlzdDEJW3IyXT1yMAkJLy8gY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnCisJbW92CWxvYzA9cjE2CisJbW92bAlsb2MxPW1jYV9oYW5kbGVyX2JoCS8vIHJlY292ZXJ5IEMgZnVuY3Rpb24KIAk7OwotCW1vdgkJb3V0MD1yOAkJCQkvLyBwb2lzb25lZCBhZGRyZXNzCi0JbW92CQliNj1sb2MxCisJbW92CW91dDA9cjgJCQkvLyBwb2lzb25lZCBhZGRyZXNzCisJbW92CWI2PWxvYzEKIAk7OwotCW1vdgkJbG9jMT1ycAorCW1vdglsb2MxPXJwCiAJOzsKLQlzc20JCXBzci5pCisJc3NtCXBzci5pCiAJOzsKLQlici5jYWxsLnNwdGsubWFueSAgICBycD1iNgkJCS8vIGRvZXMgbm90IHJldHVybiAuLi4KKwlici5jYWxsLnNwdGsubWFueSBycD1iNgkJLy8gZG9lcyBub3QgcmV0dXJuIC4uLgogCTs7Ci0JbW92CQlhci5wZnM9bG9jMAotCW1vdiAJCXJwPWxvYzEKKwltb3YJYXIucGZzPWxvYzAKKwltb3YgCXJwPWxvYzEKIAk7OwotCW1vdgkJcjg9cjAKKwltb3YJcjg9cjAKIAlici5yZXQuc3B0ay5tYW55IHJwCiAJOzsKIEVORChtY2FfaGFuZGxlcl9iaGhvb2spCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDE2NTAzNTMuLmQ3MTczMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAlyZXR1cm4gMFVMOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdm9pZAogcGZtX3VucHJvdGVjdF9jdHhfY3R4c3cocGZtX2NvbnRleHRfdCAqeCwgdW5zaWduZWQgbG9uZyBmKQogewogCXNwaW5fdW5sb2NrKCYoeCktPmN0eF9sb2NrKTsKQEAgLTIyMTgsMTIgKzIyMTgsMTMgQEAKIHBmbV9mcmVlX2ZkKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMgPSBjdXJyZW50LT5maWxlczsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CisJc3RydWN0IGZkdGFibGUgKmZkdDsKIAogCS8qIAogCSAqIHRoZXJlIGllIG5vIGZkX3VuaW5zdGFsbCgpLCBzbyB3ZSBkbyBpdCBoZXJlCiAJICovCiAJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKKwlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoZmR0LT5mZFtmZF0sIE5VTEwpOwogCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9NYWtlZmlsZSBiL2FyY2gvaWE2NC9saWIvTWFrZWZpbGUKaW5kZXggNzk5NDA3ZS4uY2IxYWY1OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQvbGliL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBACiBsaWItJChDT05GSUdfTUNLSU5MRVkpCSs9IGNvcHlfcGFnZV9tY2subyBtZW1jcHlfbWNrLm8KIGxpYi0kKENPTkZJR19QRVJGTU9OKQkrPSBjYXJ0YV9yYW5kb20ubwogbGliLSQoQ09ORklHX01EX1JBSUQ1KQkrPSB4b3IubwotbGliLSQoQ09ORklHX0hBVkVfREVDX0xPQ0spICs9IGRlY19hbmRfbG9jay5vCiAKIEFGTEFHU19fX2RpdmRpMy5vCT0KIEFGTEFHU19fX3VkaXZkaTMubwk9IC1EVU5TSUdORUQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9saWIvZGVjX2FuZF9sb2NrLmMgYi9hcmNoL2lhNjQvbGliL2RlY19hbmRfbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2NlOTJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9saWIvZGVjX2FuZF9sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEplcm9tZSBNYXJjaGFuZCwgQnVsbCBTLkEuCi0gKglDbGVhbmVkIHVwIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLCBvciBhdCB5b3VyIG9wdGlvbiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBpYTY0IHZlcnNpb24gb2YgImF0b21pY19kZWNfYW5kX2xvY2soKSIgdXNpbmcgdGhlIGF0b21pYyAiY21weGNoZyIgaW5zdHJ1Y3Rpb24uICBUaGlzCi0gKiBjb2RlIGlzIGFuIGFkYXB0YXRpb24gb2YgdGhlIHg4NiB2ZXJzaW9uIG9mICJhdG9taWNfZGVjX2FuZF9sb2NrKCkiLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0vKgotICogRGVjcmVtZW50IFJFRkNPVU5UIGFuZCBpZiB0aGUgY291bnQgcmVhY2hlcyB6ZXJvLCBhY3F1aXJlIHRoZSBzcGlubG9jay4gIEJvdGggb2YgdGhlc2UKLSAqIG9wZXJhdGlvbnMgaGF2ZSB0byBiZSBkb25lIGF0b21pY2FsbHksIHNvIHRoYXQgdGhlIGNvdW50IGRvZXNuJ3QgZHJvcCB0byB6ZXJvIHdpdGhvdXQKLSAqIGFjcXVpcmluZyB0aGUgc3BpbmxvY2sgZmlyc3QuCi0gKi8KLWludAotX2F0b21pY19kZWNfYW5kX2xvY2sgKGF0b21pY190ICpyZWZjb3VudCwgc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgb2xkLCBuZXc7Ci0KLQlkbyB7Ci0JCW9sZCA9IGF0b21pY19yZWFkKHJlZmNvdW50KTsKLQkJbmV3ID0gb2xkIC0gMTsKLQotCQlpZiAodW5saWtlbHkgKG9sZCA9PSAxKSkgewotCQkJLyogb29wcywgd2UgbWF5IGJlIGRlY3JlbWVudGluZyB0byB6ZXJvLCBkbyBpdCB0aGUgc2xvdyB3YXkuLi4gKi8KLQkJCXNwaW5fbG9jayhsb2NrKTsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KHJlZmNvdW50KSkKLQkJCQlyZXR1cm4gMTsKLQkJCXNwaW5fdW5sb2NrKGxvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IHdoaWxlIChjbXB4Y2hnKCZyZWZjb3VudC0+Y291bnRlciwgb2xkLCBuZXcpICE9IG9sZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCAxZWYzOTg3ZS4uNGQxMDBmMyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTIyMCwxMSArMjIwLDYgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYSBkZXNrdG9wLCBlbWJlZGRlZAogCSAgb3IgcmVhbC10aW1lIHN5c3RlbS4gIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZXBlbmRzIG9uIChTTVAgfHwgUFJFRU1QVCkKLQlkZWZhdWx0IG4KLQogY29uZmlnIFNNUAogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCAwZWI3MWFjLi40Y2Q3MjRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMTAwOSwxMCArMTAwOSw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZWZhdWx0IHkKLQogIwogIyBTZWxlY3Qgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbnMuCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzaXJpeC5jCmluZGV4IDRkZTE1NTYuLjdhZTRhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzaXJpeC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzaXJpeC5jCkBAIC01ODEsMTggKzU4MSwxMyBAQAogCX0KIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggbWVtb3J5Li4KKwkgKiBPaywgbG9va3MgZ29vZCAtIGxldCBpdCByaXAuCiAJICovCi0JaWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnkoKG5ld2Jyay1vbGRicmspID4+IFBBR0VfU0hJRlQpKSB7CisJaWYgKGRvX2JyayhvbGRicmssIG5ld2Jyay1vbGRicmspICE9IG9sZGJyaykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0KLQkvKgotCSAqIE9rLCBsb29rcyBnb29kIC0gbGV0IGl0IHJpcC4KLQkgKi8KIAltbS0+YnJrID0gYnJrOwotCWRvX2JyayhvbGRicmssIG5ld2Jyay1vbGRicmspOwogCXJldCA9IDA7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCmluZGV4IDIxYjkyYjkuLjAzNzMwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIE1JUFMtc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4uCiAjCiAKLWxpYi15CSs9IGNzdW1fcGFydGlhbF9jb3B5Lm8gZGVjX2FuZF9sb2NrLm8gbWVtY3B5Lm8gcHJvbWxpYi5vIFwKK2xpYi15CSs9IGNzdW1fcGFydGlhbF9jb3B5Lm8gbWVtY3B5Lm8gcHJvbWxpYi5vIFwKIAkgICBzdHJsZW5fdXNlci5vIHN0cm5jcHlfdXNlci5vIHN0cm5sZW5fdXNlci5vCiAKIG9iai15CSs9IGlvbWFwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvZGVjX2FuZF9sb2NrLmMgYi9hcmNoL21pcHMvbGliL2RlY19hbmRfbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDgyYzg0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9saWIvZGVjX2FuZF9sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogTUlQUyB2ZXJzaW9uIG9mIGF0b21pY19kZWNfYW5kX2xvY2soKSB1c2luZyBjbXB4Y2hnCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0vKgotICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbm90aW9uIG9mICJkZWNyZW1lbnQgYQotICogcmVmZXJlbmNlIGNvdW50LCBhbmQgcmV0dXJuIGxvY2tlZCBpZiBpdCBkZWNyZW1lbnRlZCB0byB6ZXJvIi4KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSB1c2VkIG9uIGFueSBhcmNoaXRlY3R1cmUgdGhhdAotICogaGFzIGEgY21weGNoZywgYW5kIHdoZXJlIGF0b21pYy0+dmFsdWUgaXMgYW4gaW50IGhvbGRpbmcKLSAqIHRoZSB2YWx1ZSBvZiB0aGUgYXRvbWljIChpLmUuIHRoZSBoaWdoIGJpdHMgYXJlbid0IHVzZWQKLSAqIGZvciBhIGxvY2sgb3IgYW55dGhpbmcgbGlrZSB0aGF0KS4KLSAqLwotaW50IF9hdG9taWNfZGVjX2FuZF9sb2NrKGF0b21pY190ICphdG9taWMsIHNwaW5sb2NrX3QgKmxvY2spCi17Ci0JaW50IGNvdW50ZXI7Ci0JaW50IG5ld2NvdW50OwotCi0JZm9yICg7OykgewotCQljb3VudGVyID0gYXRvbWljX3JlYWQoYXRvbWljKTsKLQkJbmV3Y291bnQgPSBjb3VudGVyIC0gMTsKLQkJaWYgKCFuZXdjb3VudCkKLQkJCWJyZWFrOwkJLyogZG8gaXQgdGhlIHNsb3cgd2F5ICovCi0KLQkJbmV3Y291bnQgPSBjbXB4Y2hnKCZhdG9taWMtPmNvdW50ZXIsIGNvdW50ZXIsIG5ld2NvdW50KTsKLQkJaWYgKG5ld2NvdW50ID09IGNvdW50ZXIpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2sobG9jayk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljKSkKLQkJcmV0dXJuIDE7Ci0Jc3Bpbl91bmxvY2sobG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvS2NvbmZpZyBiL2FyY2gvcHBjL0tjb25maWcKaW5kZXggMzQ3ZWEyOC4uNzc2OTQxYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvS2NvbmZpZworKysgYi9hcmNoL3BwYy9LY29uZmlnCkBAIC0yNiwxMCArMjYsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEhBVkVfREVDX0xPQ0sKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBQUEMKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvdGVtcC5jIGIvYXJjaC9wcGMva2VybmVsL3RlbXAuYwppbmRleCBmZThiYjYzLi4yNmJkOGVhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvdGVtcC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC90ZW1wLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vbnZyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3BwYy9rZXJuZWwvdGltZS5jCmluZGV4IGEzYzUyODEuLjIyZDdmZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3RpbWUuYwpAQCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAKLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9udnJhbS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3BwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5MzUzNTg0Li4xN2QyZGI3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtOTYsNiArOTYsOSBAQAogCSooLmluaXQudGV4dCkKIAlfZWluaXR0ZXh0ID0gLjsKICAgfQorICAvKiAuZXhpdC50ZXh0IGlzIGRpc2NhcmRlZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLAorICAgICB0byBkZWFsIHdpdGggcmVmZXJlbmNlcyBmcm9tIF9fYnVnX3RhYmxlICovCisgIC5leGl0LnRleHQgOiB7ICooLmV4aXQudGV4dCkgfQogICAuaW5pdC5kYXRhIDogewogICAgICooLmluaXQuZGF0YSk7CiAgICAgX192dG9wX3RhYmxlX2JlZ2luID0gLjsKQEAgLTE5MCw1ICsxOTMsNiBAQAogICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQuICovCiAgIC9ESVNDQVJELyA6IHsKICAgICAqKC5leGl0Y2FsbC5leGl0KQorICAgICooLmV4aXQuZGF0YSkKICAgfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbGliL01ha2VmaWxlIGIvYXJjaC9wcGMvbGliL01ha2VmaWxlCmluZGV4IGYxZTFmYjQuLjUwMzU4ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9saWIvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBwcGMtc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4uCiAjCiAKLW9iai15CQkJOj0gY2hlY2tzdW0ubyBzdHJpbmcubyBzdHJjYXNlLm8gZGVjX2FuZF9sb2NrLm8gZGl2NjQubworb2JqLXkJCQk6PSBjaGVja3N1bS5vIHN0cmluZy5vIHN0cmNhc2UubyBkaXY2NC5vCiAKIG9iai0kKENPTkZJR184eHgpCSs9IHJoZWFwLm8KIG9iai0kKENPTkZJR19DUE0yKQkrPSByaGVhcC5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9saWIvZGVjX2FuZF9sb2NrLmMgYi9hcmNoL3BwYy9saWIvZGVjX2FuZF9sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxOGYwZDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGMvbGliL2RlY19hbmRfbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotLyoKLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG5vdGlvbiBvZiAiZGVjcmVtZW50IGEKLSAqIHJlZmVyZW5jZSBjb3VudCwgYW5kIHJldHVybiBsb2NrZWQgaWYgaXQgZGVjcmVtZW50ZWQgdG8gemVybyIuCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgdXNlZCBvbiBhbnkgYXJjaGl0ZWN0dXJlIHRoYXQKLSAqIGhhcyBhIGNtcHhjaGcsIGFuZCB3aGVyZSBhdG9taWMtPnZhbHVlIGlzIGFuIGludCBob2xkaW5nCi0gKiB0aGUgdmFsdWUgb2YgdGhlIGF0b21pYyAoaS5lLiB0aGUgaGlnaCBiaXRzIGFyZW4ndCB1c2VkCi0gKiBmb3IgYSBsb2NrIG9yIGFueXRoaW5nIGxpa2UgdGhhdCkuCi0gKi8KLWludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKQotewotCWludCBjb3VudGVyOwotCWludCBuZXdjb3VudDsKLQotCWZvciAoOzspIHsKLQkJY291bnRlciA9IGF0b21pY19yZWFkKGF0b21pYyk7Ci0JCW5ld2NvdW50ID0gY291bnRlciAtIDE7Ci0JCWlmICghbmV3Y291bnQpCi0JCQlicmVhazsJCS8qIGRvIGl0IHRoZSBzbG93IHdheSAqLwotCi0JCW5ld2NvdW50ID0gY21weGNoZygmYXRvbWljLT5jb3VudGVyLCBjb3VudGVyLCBuZXdjb3VudCk7Ci0JCWlmIChuZXdjb3VudCA9PSBjb3VudGVyKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrKGxvY2spOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pYykpCi0JCXJldHVybiAxOwotCXNwaW5fdW5sb2NrKGxvY2spOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKF9hdG9taWNfZGVjX2FuZF9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3RpbWUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3RpbWUuYwppbmRleCA0ODY0YTdkLi42MDM3Y2U3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF90aW1lLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfdGltZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbnZyYW0uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCmluZGV4IDhiOWIyMjYuLmI4ZDA4ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKQEAgLTM0LDcgKzM0LDggQEAKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBpbmRpcmVjdF9wY2kubyBwY2lfYXV0by5vIHBwYzQwNV9wY2kubwogZW5kaWYKIGVuZGlmCi1vYmotJChDT05GSUdfOHh4KQkJKz0gbTh4eF9zZXR1cC5vIHBwYzh4eF9waWMubyAkKHdkdC1tcGM4eHgteSkKK29iai0kKENPTkZJR184eHgpCQkrPSBtOHh4X3NldHVwLm8gcHBjOHh4X3BpYy5vICQod2R0LW1wYzh4eC15KSBcCisJCQkJICAgcHBjX3N5cy5vIG1wYzh4eF9kZXZpY2VzLm8gbXBjOHh4X3N5cy5vCiBpZmVxICgkKENPTkZJR184eHgpLHkpCiBvYmotJChDT05GSUdfUENJKQkJKz0gcXNwYW5fcGNpLm8gaTgyNTkubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1ZjBlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKKyAqCisgKiBNUEM4eHggRGV2aWNlIGRlc2NyaXB0aW9ucworICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIGJ5IFZpdGFseSBCb3JkdWc8dmJvcmR1Z0BydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPgorI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KKworLyogV2UgdXNlIG9mZnNldHMgZm9yIElPUkVTT1VSQ0VfTUVNIHRvIGRvIG5vdCBzZXQgZGVwZW5kZW5jZXMgYXQgY29tcGlsZSB0aW1lLgorICogVGhleSB3aWxsIGdldCBmaXhlZCB1cCBieSBtYWNoX21wYzh4eF9maXh1cAorICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW10gPSB7CisJW01QQzh4eF9DUE1fRkVDMV0gPQl7CisJCS5uYW1lID0gImZzbC1jcG0tZmVjIiwKKwkJLmlkCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMgPSAyLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pCXsKKwkJCXsKKwkJCQkubmFtZSAJPSAicmVncyIsCisJCQkJLnN0YXJ0CT0gMHhlMDAsCisJCQkJLmVuZAk9IDB4ZTg4LAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZQk9ICJpbnRlcnJ1cHQiLAorCQkJCS5zdGFydAk9IE1QQzh4eF9JTlRfRkVDMSwKKwkJCQkuZW5kCT0gTVBDOHh4X0lOVF9GRUMxLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJfSwKKwl9LAorCVtNUEM4eHhfQ1BNX0ZFQzJdID0JeworCQkubmFtZSA9ICJmc2wtY3BtLWZlYyIsCisJCS5pZAk9IDIsCisJCS5udW1fcmVzb3VyY2VzID0gMiwKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKQl7CisJCQl7CisJCQkJLm5hbWUJPSAicmVncyIsCisJCQkJLnN0YXJ0CT0gMHgxZTAwLAorCQkJCS5lbmQJPSAweDFlODgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lCT0gImludGVycnVwdCIsCisJCQkJLnN0YXJ0CT0gTVBDOHh4X0lOVF9GRUMyLAorCQkJCS5lbmQJPSBNUEM4eHhfSU5UX0ZFQzIsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQl9LAorCX0sCisJW01QQzh4eF9DUE1fU0NDMV0gPSB7CisJCS5uYW1lID0gImZzbC1jcG0tc2NjIiwKKwkJLmlkCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMgPSAzLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKKwkJCXsKKwkJCQkubmFtZQk9ICJyZWdzIiwKKwkJCQkuc3RhcnQJPSAweGEwMCwKKwkJCQkuZW5kCT0gMHhhMTgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lIAk9ICJwcmFtIiwKKwkJCQkuc3RhcnQgCT0gMHgzYzAwLAorCQkJCS5lbmQgCT0gMHgzYzgwLAorCQkJCS5mbGFncyAJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NDQzEsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU0NDMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDOHh4X0NQTV9TQ0MyXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWNwbS1zY2MiLAorCQkuaWQJPSAyLAorCQkubnVtX3Jlc291cmNlcwk9IDMsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5uYW1lCT0gInJlZ3MiLAorCQkJCS5zdGFydAk9IDB4YTIwLAorCQkJCS5lbmQJPSAweGEzOCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUgCT0gInByYW0iLAorCQkJCS5zdGFydCAJPSAweDNkMDAsCisJCQkJLmVuZCAJPSAweDNkODAsCisJCQkJLmZsYWdzIAk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKworCQkJeworCQkJCS5uYW1lCT0gImludGVycnVwdCIsCisJCQkJLnN0YXJ0CT0gTVBDOHh4X0lOVF9TQ0MyLAorCQkJCS5lbmQJPSBNUEM4eHhfSU5UX1NDQzIsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQl9LAorCX0sCisJW01QQzh4eF9DUE1fU0NDM10gPSB7CisJCS5uYW1lID0gImZzbC1jcG0tc2NjIiwKKwkJLmlkCT0gMywKKwkJLm51bV9yZXNvdXJjZXMJPSAzLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKKwkJCXsKKwkJCQkubmFtZQk9ICJyZWdzIiwKKwkJCQkuc3RhcnQJPSAweGE0MCwKKwkJCQkuZW5kCT0gMHhhNTgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lIAk9ICJwcmFtIiwKKwkJCQkuc3RhcnQgCT0gMHgzZTAwLAorCQkJCS5lbmQgCT0gMHgzZTgwLAorCQkJCS5mbGFncyAJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisKKwkJCXsKKwkJCQkubmFtZQk9ICJpbnRlcnJ1cHQiLAorCQkJCS5zdGFydAk9IE1QQzh4eF9JTlRfU0NDMywKKwkJCQkuZW5kCT0gTVBDOHh4X0lOVF9TQ0MzLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJfSwKKwl9LAorCVtNUEM4eHhfQ1BNX1NDQzRdID0geworCQkubmFtZSA9ICJmc2wtY3BtLXNjYyIsCisJCS5pZAk9IDQsCisJCS5udW1fcmVzb3VyY2VzCT0gMywKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CisJCQl7CisJCQkJLm5hbWUJPSAicmVncyIsCisJCQkJLnN0YXJ0CT0gMHhhNjAsCisJCQkJLmVuZAk9IDB4YTc4LAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSAJPSAicHJhbSIsCisJCQkJLnN0YXJ0IAk9IDB4M2YwMCwKKwkJCQkuZW5kIAk9IDB4M2Y4MCwKKwkJCQkuZmxhZ3MgCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NDQzQsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU0NDNCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDOHh4X0NQTV9TTUMxXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWNwbS1zbWMiLAorCQkuaWQJPSAxLAorCQkubnVtX3Jlc291cmNlcwk9IDIsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5uYW1lCT0gInJlZ3MiLAorCQkJCS5zdGFydAk9IDB4YTgyLAorCQkJCS5lbmQJPSAweGE5MSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NNQzEsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU01DMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDOHh4X0NQTV9TTUMyXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWNwbS1zbWMiLAorCQkuaWQJPSAyLAorCQkubnVtX3Jlc291cmNlcwk9IDIsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5uYW1lCT0gInJlZ3MiLAorCQkJCS5zdGFydAk9IDB4YTkyLAorCQkJCS5lbmQJPSAweGFhMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NNQzIsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU01DMiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1hY2hfbXBjOHh4X2ZpeHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcHBjX3N5c19maXh1cF9tZW1fcmVzb3VyY2UgKHBkZXYsIElNQVBfQUREUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1hY2hfbXBjOHh4X2luaXQodm9pZCkKK3sKKwlwcGNfc3lzX2RldmljZV9maXh1cCA9IG1hY2hfbXBjOHh4X2ZpeHVwOworCXJldHVybiAwOworfQorCitwb3N0Y29yZV9pbml0Y2FsbChtYWNoX21wYzh4eF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfc3lzLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X3N5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzJjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X3N5cy5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBhcmNoL3BwYy9wbGF0Zm9ybXMvbXBjOHh4X3N5cy5jCisgKgorICogTVBDOHh4IFN5c3RlbSBkZXNjcmlwdGlvbnMKKyAqCisgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxrdW1hci5nYWxhQGZyZWVzY2FsZS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBieSBWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfc3lzLmg+CisKK3N0cnVjdCBwcGNfc3lzX3NwZWMgKmN1cl9wcGNfc3lzX3NwZWM7IAorc3RydWN0IHBwY19zeXNfc3BlYyBwcGNfc3lzX3NwZWNzW10gPSB7CisJeworCQkucHBjX3N5c19uYW1lCT0gIk1QQzg2WCIsCisJCS5tYXNrIAkJPSAweEZGRkZGRkZGLAorCQkudmFsdWUgCQk9IDB4MDAwMDAwMDAsCisJCS5udW1fZGV2aWNlcwk9IDIsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlNUEM4eHhfQ1BNX0ZFQzEsCisJCQlNUEM4eHhfQ1BNX1NDQzEsCisJCQlNUEM4eHhfQ1BNX1NDQzIsCisJCQlNUEM4eHhfQ1BNX1NDQzMsCisJCQlNUEM4eHhfQ1BNX1NDQzQsCisJCQlNUEM4eHhfQ1BNX1NNQzEsCisJCQlNUEM4eHhfQ1BNX1NNQzIsCisJCX0sCisJfSwKKwl7CisJCS5wcGNfc3lzX25hbWUJPSAiTVBDODg1IiwKKwkJLm1hc2sgCQk9IDB4RkZGRkZGRkYsCisJCS52YWx1ZSAJCT0gMHgwMDAwMDAwMCwKKwkJLm51bV9kZXZpY2VzCT0gMywKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzh4eF9DUE1fRkVDMSwKKwkJCU1QQzh4eF9DUE1fRkVDMiwKKwkJCU1QQzh4eF9DUE1fU0NDMSwKKwkJCU1QQzh4eF9DUE1fU0NDMiwKKwkJCU1QQzh4eF9DUE1fU0NDMywKKwkJCU1QQzh4eF9DUE1fU0NDNCwKKwkJCU1QQzh4eF9DUE1fU01DMSwKKwkJCU1QQzh4eF9DUE1fU01DMiwKKwkJfSwKKwl9LAorCXsJLyogZGVmYXVsdCBtYXRjaCAqLworCQkucHBjX3N5c19uYW1lCT0gIiIsCisJCS5tYXNrIAkJPSAweDAwMDAwMDAwLAorCQkudmFsdWUgCQk9IDB4MDAwMDAwMDAsCisJfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMyLmMgYi9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMyLmMKaW5kZXggMmUwZWE5Mi4uOWE3ZTg3NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljMi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYwpAQCAtNTc1LDcgKzU3NSw3IEBACiAgKiB3ZSBuZWVkIHNvbWV0aGluZyBiZXR0ZXIgdG8gZGVhbCB3aXRoIHRoYXQuLi4gTWF5YmUgc3dpdGNoIHRvIFMxIGZvcgogICogY3B1ZnJlcSBjaGFuZ2VzCiAgKi8KLWludCBvcGVucGljMl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIHUzMiBzdGF0ZSkKK2ludCBvcGVucGljMl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQJaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3ByZXBfbnZyYW0uYyBiL2FyY2gvcHBjL3N5c2xpYi9wcmVwX252cmFtLmMKaW5kZXggMmJjZjhhMS4uODU5OTg1MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3ByZXBfbnZyYW0uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHJlcF9udnJhbS5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3ByZXBfbnZyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvS2NvbmZpZyBiL2FyY2gvcHBjNjQvS2NvbmZpZwppbmRleCBkZWNhNjhhLi5jNjU4NjUwIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L0tjb25maWcKKysrIGIvYXJjaC9wcGM2NC9LY29uZmlnCkBAIC0yOCwxMCArMjgsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEhBVkVfREVDX0xPQ0sKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBFQVJMWV9QUklOVEsKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L01ha2VmaWxlIGIvYXJjaC9wcGM2NC9NYWtlZmlsZQppbmRleCAxN2QyYzFlLi41MjFjMmE1IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L01ha2VmaWxlCisrKyBiL2FyY2gvcHBjNjQvTWFrZWZpbGUKQEAgLTEwNyw3ICsxMDcsNyBAQAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoQk9PVElNQUdFKSAkQAogCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfUFBDX1BTRVJJRVMpIDo9IHpJbWFnZQotZGVmYXVsdGltYWdlLSQoQ09ORklHX1BQQ19QTUFDKSA6PSB2bWxpbnV4CitkZWZhdWx0aW1hZ2UtJChDT05GSUdfUFBDX1BNQUMpIDo9IHpJbWFnZS52bW9kZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1BQQ19NQVBMRSkgOj0gekltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfUFBDX0lTRVJJRVMpIDo9IHZtbGludXgKIEtCVUlMRF9JTUFHRSA6PSAkKGRlZmF1bHRpbWFnZS15KQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcHBjNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMTdlMzVkMC4uMWZmNGZhMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC02OCw2ICs2OCw3IEBACiAJREVGSU5FKFRIUkVBRF9VU0VEX1ZSLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgdXNlZF92cikpOwogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCiAJREVGSU5FKE1NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIG1tKSk7CisJREVGSU5FKEFVRElUQ09OVEVYVCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBhdWRpdF9jb250ZXh0KSk7CiAKIAlERUZJTkUoRENBQ0hFTDFMSU5FU0laRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgZGxpbmVfc2l6ZSkpOwogCURFRklORShEQ0FDSEVMMUxPR0xJTkVTSVpFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBsb2dfZGxpbmVfc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcHBjNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZDEzM2E0OS4uZThjMGJiZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9lbnRyeS5TCkBAIC0yNzYsMTIgKzI3NiwyMiBAQAogX0dMT0JBTChwcGMzMl9ydF9zaWdzdXNwZW5kKQogCWJsCS5zYXZlX252Z3BycwogCWJsCS5zeXMzMl9ydF9zaWdzdXNwZW5kCi0JLyogSWYgc2lnc3VzcGVuZCgpIHJldHVybnMgemVybywgd2UgYXJlIGdvaW5nIGludG8gYSBzaWduYWwgaGFuZGxlciAqLwogNzA6CWNtcGRpCTAscjMsMAotCWJlcQkucmV0X2Zyb21fZXhjZXB0Ci0JLyogSWYgaXQgcmV0dXJuZWQgLUVJTlRSLCB3ZSBuZWVkIHRvIHJldHVybiB2aWEgc3lzY2FsbF9leGl0IHRvIHNldAorCS8qIElmIGl0IHJldHVybmVkIGFuIGVycm9yLCB3ZSBuZWVkIHRvIHJldHVybiB2aWEgc3lzY2FsbF9leGl0IHRvIHNldAogCSAgIHRoZSBTTyBiaXQgaW4gY3IwIGFuZCBwb3RlbnRpYWxseSBzdG9wIGZvciBwdHJhY2UuICovCi0JYglzeXNjYWxsX2V4aXQKKwlibmUJc3lzY2FsbF9leGl0CisJLyogSWYgc2lnc3VzcGVuZCgpIHJldHVybnMgemVybywgd2UgYXJlIGdvaW5nIGludG8gYSBzaWduYWwgaGFuZGxlci4gV2UKKwkgICBtYXkgbmVlZCB0byBjYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdCgpIHRvIG1hcmsgdGhlIGV4aXQgZnJvbSBzaWdzdXNwZW5kKCkgKi8KKyNpZmRlZiBDT05GSUdfQVVESVQKKwlsZAlyMyxQQUNBQ1VSUkVOVChyMTMpCisJbGQJcjQsQVVESVRDT05URVhUKHIzKQorCWNtcGRpCTAscjQsMAorCWJlcQkucmV0X2Zyb21fZXhjZXB0CS8qIE5vIGF1ZGl0X2NvbnRleHQ6IExlYXZlIGltbWVkaWF0ZWx5LiAqLworCWxpCXI0LCAyCQkJLyogQVVESVRTQ19GQUlMVVJFICovCisJbGkJcjUsLTQJCQkvKiBJdCdzIGFsd2F5cyAtRUlOVFIgKi8KKwlibAkuYXVkaXRfc3lzY2FsbF9leGl0CisjZW5kaWYKKwliCS5yZXRfZnJvbV9leGNlcHQKIAogX0dMT0JBTChwcGNfZm9yaykKIAlibAkuc2F2ZV9udmdwcnMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUwppbmRleCA1OGMzMTQ3Li43MmM2MTA0IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCWxkCXIzLDAocjMpCiAJbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncwkJICovCiAJYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYm5lCTk4ZgorCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCiAJbWZzcHIJcjMsUFZSCiAJc3J3aQlyMyxyMywxNgogCWNtcHdpCXIzLDB4MzcJCQkvKiBTU3RhciAgKi8KQEAgLTE4MTMsNyArMTgxMyw3IEBACiAJbGQJcjMsMChyMykKIAlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzICovCiAJYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYm5lCTk4ZgorCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCiAJbWZzcHIJcjMsUFZSCiAJc3J3aQlyMyxyMywxNgogCWNtcHdpCXIzLDB4MzcJCQkvKiBTU3RhciAqLwpAQCAtMTgzNCw3ICsxODM0LDcgQEAKIAlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzICovCiAJLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwogCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIKLQlibmUJOThmCisJYm5lCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgITAgICovCiAJTE9BREFERFIocjYsX1NEUjEpCQkvKiBPbmx5IGlmIE5PVCBMUEFSICovCiAJc3ViCXI2LHI2LHIyNgogCWxkCXI2LDAocjYpCQkvKiBnZXQgdGhlIHZhbHVlIG9mIF9TRFIxICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX2lvbW11LmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX2lvbW11LmMKaW5kZXggZjBmZDdmYi4uOGM2MzEzZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19pb21tdS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfaW9tbXUuYwpAQCAtMjY1LDggKzI2NSwxMCBAQAogCXRibC0+aXRfb2Zmc2V0ID0gcGhiLT5kbWFfd2luZG93X2Jhc2VfY3VyID4+IFBBR0VfU0hJRlQ7CiAJCiAJLyogVGVzdCBpZiB3ZSBhcmUgZ29pbmcgb3ZlciAyR0Igb2YgRE1BIHNwYWNlICovCi0JaWYgKHBoYi0+ZG1hX3dpbmRvd19iYXNlX2N1ciArIHBoYi0+ZG1hX3dpbmRvd19zaXplID4gKDFMIDw8IDMxKSkKKwlpZiAocGhiLT5kbWFfd2luZG93X2Jhc2VfY3VyICsgcGhiLT5kbWFfd2luZG93X3NpemUgPiAweDgwMDAwMDAwdWwpIHsKKwkJdWRiZ19wcmludGYoIlBDSV9ETUE6IFVuZXhwZWN0ZWQgbnVtYmVyIG9mIElPQXMgdW5kZXIgdGhpcyBQSEIuXG4iKTsKIAkJcGFuaWMoIlBDSV9ETUE6IFVuZXhwZWN0ZWQgbnVtYmVyIG9mIElPQXMgdW5kZXIgdGhpcyBQSEIuXG4iKTsgCisJfQogCQogCXBoYi0+ZG1hX3dpbmRvd19iYXNlX2N1ciArPSBwaGItPmRtYV93aW5kb3dfc2l6ZTsKIApAQCAtMzEwLDkyICszMTIsODQgQEAKIAogc3RhdGljIHZvaWQgaW9tbXVfYnVzX3NldHVwX3BTZXJpZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCAqcGRuOwotCXN0cnVjdCBwY2lfZG4gKnBjaTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaXNhX2RuLCAqaXNhX2RuX29yaWc7CisJc3RydWN0IGRldmljZV9ub2RlICp0bXA7CisJc3RydWN0IHBjaV9kbiAqcGNpOworCWludCBjaGlsZHJlbjsKIAogCURCRygiaW9tbXVfYnVzX3NldHVwX3BTZXJpZXMsIGJ1cyAlcCwgYnVzLT5zZWxmICVwXG4iLCBidXMsIGJ1cy0+c2VsZik7CiAKLQkvKiBGb3IgZWFjaCAocm9vdCkgYnVzLCB3ZSBjYXJ2ZSB1cCB0aGUgYXZhaWxhYmxlIERNQSBzcGFjZSBpbiAyNTZNQgotCSAqIHBpZWNlcy4gU2luY2UgZWFjaCBwaWVjZSBpcyB1c2VkIGJ5IG9uZSAoc3ViKSBidXMvZGV2aWNlLCB0aGF0IHdvdWxkCi0JICogZ2l2ZSBhIG1heGltdW0gb2YgNyBkZXZpY2VzIHBlciBQSEIuIEluIG1vc3QgY2FzZXMsIHRoaXMgaXMgcGxlbnR5LgorCWRuID0gcGNpX2J1c190b19PRl9ub2RlKGJ1cyk7CisJcGNpID0gUENJX0ROKGRuKTsKKworCWlmIChidXMtPnNlbGYpIHsKKwkJLyogVGhpcyBpcyBub3QgYSByb290IGJ1cywgYW55IHNldHVwIHdpbGwgYmUgZG9uZSBmb3IgdGhlCisJCSAqIGRldmljZS1zaWRlIG9mIHRoZSBicmlkZ2UgaW4gaW9tbXVfZGV2X3NldHVwX3BTZXJpZXMoKS4KKwkJICovCisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgSVNBIGJ1cyBvbiB0aGUgc3lzdGVtIGlzIHVuZGVyCisJICogdGhpcyBQSEIuCisJICovCisJaXNhX2RuID0gaXNhX2RuX29yaWcgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiaXNhIik7CisKKwl3aGlsZSAoaXNhX2RuICYmIGlzYV9kbiAhPSBkbikKKwkJaXNhX2RuID0gaXNhX2RuLT5wYXJlbnQ7CisKKwlpZiAoaXNhX2RuX29yaWcpCisJCW9mX25vZGVfcHV0KGlzYV9kbl9vcmlnKTsKKworCS8qIENvdW50IG51bWJlciBvZiBkaXJlY3QgUENJIGNoaWxkcmVuIG9mIHRoZSBQSEIuCisJICogQWxsIFBDSSBkZXZpY2Ugbm9kZXMgaGF2ZSBjbGFzcy1jb2RlIHByb3BlcnR5LCBzbyBpdCdzCisJICogYW4gZWFzeSB3YXkgdG8gZmluZCB0aGVtLgorCSAqLworCWZvciAoY2hpbGRyZW4gPSAwLCB0bXAgPSBkbi0+Y2hpbGQ7IHRtcDsgdG1wID0gdG1wLT5zaWJsaW5nKQorCQlpZiAoZ2V0X3Byb3BlcnR5KHRtcCwgImNsYXNzLWNvZGUiLCBOVUxMKSkKKwkJCWNoaWxkcmVuKys7CisKKwlEQkcoIkNoaWxkcmVuOiAlZFxuIiwgY2hpbGRyZW4pOworCisJLyogQ2FsY3VsYXRlIGFtb3VudCBvZiBETUEgd2luZG93IHBlciBzbG90LiBFYWNoIHdpbmRvdyBtdXN0IGJlCisJICogYSBwb3dlciBvZiB0d28gKGR1ZSB0byBwY2lfYWxsb2NfY29uc2lzdGVudCByZXF1aXJlbWVudHMpLgogCSAqCi0JICogVGhlIGV4Y2VwdGlvbiBpcyBvbiBQeXRob24gUEhCcyAocHJlLVBPV0VSNCkuIEhlcmUgd2UgZG9uJ3QgaGF2ZSBFQURTCi0JICogYnJpZGdlcyBiZWxvdyB0aGUgUEhCIHRvIGFsbG9jYXRlIHRoZSBzZWN0aW9uZWQgdGFibGVzIHRvLCBzbyBpbnN0ZWFkCi0JICogd2UgYWxsb2NhdGUgYSAxR0IgdGFibGUgYXQgdGhlIFBIQiBsZXZlbC4KKwkgKiBLZWVwIDI1Nk1CIGFzaWRlIGZvciBQSEJzIHdpdGggSVNBLgogCSAqLwogCi0JZG4gPSBwY2lfYnVzX3RvX09GX25vZGUoYnVzKTsKLQlwY2kgPSBkbi0+ZGF0YTsKKwlpZiAoIWlzYV9kbikgeworCQkvKiBObyBJU0EvSURFIC0ganVzdCBzZXQgd2luZG93IHNpemUgYW5kIHJldHVybiAqLworCQlwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplID0gMHg4MDAwMDAwMHVsOyAvKiBUbyBiZSBkaXZpZGVkICovCiAKLQlpZiAoIWJ1cy0+c2VsZikgewotCQkvKiBSb290IGJ1cyAqLwotCQlpZiAoaXNfcHl0aG9uKGRuKSkgewotCQkJdW5zaWduZWQgaW50ICppb2hvbGU7CisJCXdoaWxlIChwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplICogY2hpbGRyZW4gPiAweDgwMDAwMDAwdWwpCisJCQlwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplID4+PSAxOworCQlEQkcoIk5vIElTQS9JREUsIHdpbmRvdyBzaXplIGlzICV4XG4iLCBwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplKTsKKwkJcGNpLT5waGItPmRtYV93aW5kb3dfYmFzZV9jdXIgPSAwOwogCi0JCQlEQkcoIlB5dGhvbiByb290IGJ1cyAlc1xuIiwgYnVzLT5uYW1lKTsKLQotCQkJaW9ob2xlID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShkbiwgImlvLWhvbGUiLCAwKTsKLQotCQkJaWYgKGlvaG9sZSkgewotCQkJCS8qIE9uIGZpcnN0IGJ1cyB3ZSBuZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRoZQotCQkJCSAqIElTQSBhZGRyZXNzIHNwYWNlLiBKdXN0IHNraXAgdGhlIGZpcnN0IDI1Nk1CCi0JCQkJICogYWxsdG9nZXRoZXIuIFRoaXMgbGVhdmVzIDc2OE1CIGZvciB0aGUgd2luZG93LgotCQkJCSAqLwotCQkJCURCRygiUEhCIGhhcyBpby1ob2xlLCByZXNlcnZpbmcgMjU2TUJcbiIpOwotCQkJCXBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUgPSAzIDw8IDI4OwotCQkJCXBjaS0+cGhiLT5kbWFfd2luZG93X2Jhc2VfY3VyID0gMSA8PCAyODsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogMUdCIHdpbmRvdyBieSBkZWZhdWx0ICovCi0JCQkJcGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSA9IDEgPDwgMzA7Ci0JCQkJcGNpLT5waGItPmRtYV93aW5kb3dfYmFzZV9jdXIgPSAwOwotCQkJfQotCi0JCQl0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9tbXVfdGFibGUpLCBHRlBfS0VSTkVMKTsKLQotCQkJaW9tbXVfdGFibGVfc2V0cGFybXMocGNpLT5waGIsIGRuLCB0YmwpOwotCQkJcGNpLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsKTsKLQkJfSBlbHNlIHsKLQkJCS8qIERvIGEgMTI4TUIgdGFibGUgYXQgcm9vdC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSURFCi0JCQkgKiBjb250cm9sbGVyIG9uIHNvbWUgU01QLW1vZGUgUE9XRVI0IG1hY2hpbmVzLiBJdAotCQkJICogZG9lc24ndCBodXJ0IHRvIGFsbG9jYXRlIGl0IG9uIG90aGVyIG1hY2hpbmVzCi0JCQkgKiAtLSBpdCdsbCBqdXN0IGJlIHVudXNlZCBzaW5jZSBuZXcgdGFibGVzIGFyZQotCQkJICogYWxsb2NhdGVkIG9uIHRoZSBFQURTIGxldmVsLgotCQkJICoKLQkJCSAqIEFsbG9jYXRlIGF0IG9mZnNldCAxMjhNQiB0byBhdm9pZCBoYXZpbmcgdG8gZGVhbAotCQkJICogd2l0aCBJU0EgaG9sZXM7IDEyOE1CIHRhYmxlIGZvciBJREUgaXMgcGxlbnR5LgotCQkJICovCi0JCQlwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplID0gMSA8PCAyNzsKLQkJCXBjaS0+cGhiLT5kbWFfd2luZG93X2Jhc2VfY3VyID0gMSA8PCAyNzsKLQotCQkJdGJsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlvbW11X3RhYmxlKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJCWlvbW11X3RhYmxlX3NldHBhcm1zKHBjaS0+cGhiLCBkbiwgdGJsKTsKLQkJCXBjaS0+aW9tbXVfdGFibGUgPSBpb21tdV9pbml0X3RhYmxlKHRibCk7Ci0KLQkJCS8qIEFsbCBjaGlsZCBidXNlcyBoYXZlIDI1Nk1CIHRhYmxlcyAqLwotCQkJcGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSA9IDEgPDwgMjg7Ci0JCX0KLQl9IGVsc2UgewotCQlwZG4gPSBwY2lfYnVzX3RvX09GX25vZGUoYnVzLT5wYXJlbnQpOwotCi0JCWlmICghYnVzLT5wYXJlbnQtPnNlbGYgJiYgIWlzX3B5dGhvbihwZG4pKSB7Ci0JCQlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibDsKLQkJCS8qIEZpcnN0IGNoaWxkIGFuZCBub3QgcHl0aG9uIG1lYW5zIHRoaXMgaXMgdGhlIEVBRFMKLQkJCSAqIGxldmVsLiBBbGxvY2F0ZSBuZXcgdGFibGUgZm9yIHRoaXMgc2xvdCB3aXRoIDI1Nk1CCi0JCQkgKiB3aW5kb3cuCi0JCQkgKi8KLQotCQkJdGJsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlvbW11X3RhYmxlKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJCWlvbW11X3RhYmxlX3NldHBhcm1zKHBjaS0+cGhiLCBkbiwgdGJsKTsKLQotCQkJcGNpLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsKTsKLQkJfSBlbHNlIHsKLQkJCS8qIExvd2VyIHRoYW4gZmlyc3QgY2hpbGQgb3IgdW5kZXIgcHl0aG9uLCB1c2UgcGFyZW50IHRhYmxlICovCi0JCQlwY2ktPmlvbW11X3RhYmxlID0gUENJX0ROKHBkbiktPmlvbW11X3RhYmxlOwotCQl9CisJCXJldHVybjsKIAl9CisKKwkvKiBJZiB3ZSBoYXZlIElTQSwgdGhlbiB3ZSBwcm9iYWJseSBoYXZlIGFuIElERQorCSAqIGNvbnRyb2xsZXIgdG9vLiBBbGxvY2F0ZSBhIDEyOE1CIHRhYmxlIGJ1dAorCSAqIHNraXAgdGhlIGZpcnN0IDEyOE1CIHRvIGF2b2lkIHN0ZXBwaW5nIG9uIElTQQorCSAqIHNwYWNlLgorCSAqLworCXBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUgPSAweDgwMDAwMDB1bDsKKwlwY2ktPnBoYi0+ZG1hX3dpbmRvd19iYXNlX2N1ciA9IDB4ODAwMDAwMHVsOworCisJdGJsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlvbW11X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisKKwlpb21tdV90YWJsZV9zZXRwYXJtcyhwY2ktPnBoYiwgZG4sIHRibCk7CisJcGNpLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsKTsKKworCS8qIERpdmlkZSB0aGUgcmVzdCAoMS43NUdCKSBhbW9uZyB0aGUgY2hpbGRyZW4gKi8KKwlwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplID0gMHg4MDAwMDAwMHVsOworCXdoaWxlIChwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplICogY2hpbGRyZW4gPiAweDcwMDAwMDAwdWwpCisJCXBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUgPj49IDE7CisKKwlEQkcoIklTQS9JREUsIHdpbmRvdyBzaXplIGlzICV4XG4iLCBwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplKTsKKwogfQogCiAKQEAgLTQ0NiwxNCArNDQwLDI5IEBACiBzdGF0aWMgdm9pZCBpb21tdV9kZXZfc2V0dXBfcFNlcmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sICpteWRuOworCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsOwogCiAJREJHKCJpb21tdV9kZXZfc2V0dXBfcFNlcmllcywgZGV2ICVwICglcylcbiIsIGRldiwgZGV2LT5wcmV0dHlfbmFtZSk7Ci0JLyogTm93IGNvcHkgdGhlIGlvbW11X3RhYmxlIHB0ciBmcm9tIHRoZSBidXMgZGV2aWNlIGRvd24gdG8gdGhlCi0JICogcGNpIGRldmljZV9ub2RlLiAgVGhpcyBtZWFucyBnZXRfaW9tbXVfdGFibGUoKSB3b24ndCBuZWVkIHRvIHNlYXJjaAotCSAqIHVwIHRoZSBkZXZpY2UgdHJlZSB0byBmaW5kIGl0LgotCSAqLworCiAJbXlkbiA9IGRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAKKwkvKiBJZiB3ZSdyZSB0aGUgZGlyZWN0IGNoaWxkIG9mIGEgcm9vdCBidXMsIHRoZW4gd2UgbmVlZCB0byBhbGxvY2F0ZQorCSAqIGFuIGlvbW11IHRhYmxlIG91cnNlbHZlcy4gVGhlIGJ1cyBzZXR1cCBjb2RlIHNob3VsZCBoYXZlIHNldHVwCisJICogdGhlIHdpbmRvdyBzaXplcyBhbHJlYWR5LgorCSAqLworCWlmICghZGV2LT5idXMtPnNlbGYpIHsKKwkJREJHKCIgLS0+IGZpcnN0IGNoaWxkLCBubyBicmlkZ2UuIEFsbG9jYXRpbmcgaW9tbXUgdGFibGUuXG4iKTsKKwkJdGJsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlvbW11X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJCWlvbW11X3RhYmxlX3NldHBhcm1zKFBDSV9ETihkbiktPnBoYiwgZG4sIHRibCk7CisJCVBDSV9ETihteWRuKS0+aW9tbXVfdGFibGUgPSBpb21tdV9pbml0X3RhYmxlKHRibCk7CisKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoaXMgZGV2aWNlIGlzIGZ1cnRoZXIgZG93biB0aGUgYnVzIHRyZWUsIHNlYXJjaCB1cHdhcmRzIHVudGlsCisJICogYW4gYWxyZWFkeSBhbGxvY2F0ZWQgaW9tbXUgdGFibGUgaXMgZm91bmQgYW5kIHVzZSB0aGF0LgorCSAqLworCiAJd2hpbGUgKGRuICYmIGRuLT5kYXRhICYmIFBDSV9ETihkbiktPmlvbW11X3RhYmxlID09IE5VTEwpCiAJCWRuID0gZG4tPnBhcmVudDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19zZXR1cC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19zZXR1cC5jCmluZGV4IGJmYWRjY2MuLjMwMDk3MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfc2V0dXAuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX3NldHVwLmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCiAJLyogRmluZCBhbmQgaW5pdGlhbGl6ZSBQQ0kgaG9zdCBicmlkZ2VzICovCiAJaW5pdF9wY2lfY29uZmlnX3Rva2VucygpOwotCWVlaF9pbml0KCk7CiAJZmluZF9hbmRfaW5pdF9waGJzKCk7CisJZWVoX2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wY2kuYyBiL2FyY2gvcHBjNjQva2VybmVsL3BjaS5jCmluZGV4IDg2MTEzOGEuLmZmNGJlMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3BjaS5jCkBAIC0yNDYsMTEgKzI0NiwxNCBAQAogCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CiAKIAlpZiAoYWRkcjAgJiAweDAyMDAwMDAwKSB7Ci0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNOworCQlmbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgUENJX0JBU0VfQUREUkVTU19TUEFDRV9NRU1PUlk7CisJCWZsYWdzIHw9IChhZGRyMCA+PiAyMikgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0OworCQlmbGFncyB8PSAoYWRkcjAgPj4gMjgpICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8xTTsKIAkJaWYgKGFkZHIwICYgMHg0MDAwMDAwMCkKLQkJCWZsYWdzIHw9IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJCQlmbGFncyB8PSBJT1JFU09VUkNFX1BSRUZFVENICisJCQkJIHwgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0g7CiAJfSBlbHNlIGlmIChhZGRyMCAmIDB4MDEwMDAwMDApCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfSU87CisJCWZsYWdzID0gSU9SRVNPVVJDRV9JTyB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU87CiAJcmV0dXJuIGZsYWdzOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDk5Nzk5MTkuLmYyNTI2NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCkBAIC0xNzExLDYgKzE3MTEsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CiAJdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQsIG1lbV9lbmQsIHJvb207CiAJc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICpoZHI7CisJc3RydWN0IHByb21fdCAqX3Byb20gPSBQVFJSRUxPQygmcHJvbSk7CiAJY2hhciAqbmFtZXA7CiAJdTY0ICpyc3ZtYXA7CiAKQEAgLTE3NjUsNiArMTc2Niw3IEBACiAJUkVMT0MoZHRfc3RydWN0X2VuZCkgPSBQQUdFX0FMSUdOKG1lbV9zdGFydCk7CiAKIAkvKiBGaW5pc2ggaGVhZGVyICovCisJaGRyLT5ib290X2NwdWlkX3BoeXMgPSBfcHJvbS0+Y3B1OwogCWhkci0+bWFnaWMgPSBPRl9EVF9IRUFERVI7CiAJaGRyLT50b3RhbHNpemUgPSBSRUxPQyhkdF9zdHJ1Y3RfZW5kKSAtIFJFTE9DKGR0X2hlYWRlcl9zdGFydCk7CiAJaGRyLT5vZmZfZHRfc3RydWN0ID0gUkVMT0MoZHRfc3RydWN0X3N0YXJ0KSAtIFJFTE9DKGR0X2hlYWRlcl9zdGFydCk7CkBAIC0xODU0LDcgKzE4NTYsNiBAQAogCiAJY3B1X3BrZyA9IGNhbGxfcHJvbSgiaW5zdGFuY2UtdG8tcGFja2FnZSIsIDEsIDEsIHByb21fY3B1KTsKIAotCXByb21fc2V0cHJvcChjcHVfcGtnLCAibGludXgsYm9vdC1jcHUiLCBOVUxMLCAwKTsKIAlwcm9tX2dldHByb3AoY3B1X3BrZywgInJlZyIsICZnZXRwcm9wX3J2YWwsIHNpemVvZihnZXRwcm9wX3J2YWwpKTsKIAlfcHJvbS0+Y3B1ID0gZ2V0cHJvcF9ydmFsOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMKaW5kZXggNDc3NzY3Ni4uZWZhOTg1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYwpAQCAtMjI0LDEwICsyMjQsNyBAQAogCXZtYSA9IGttZW1fY2FjaGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKIAlpZiAodm1hID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5KHZkc29fcGFnZXMpKSB7Ci0JCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCiAJbWVtc2V0KHZtYSwgMCwgc2l6ZW9mKCp2bWEpKTsKIAogCS8qCkBAIC0yMzcsOCArMjM0LDEwIEBACiAJICovCiAJdmRzb19iYXNlID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgdmRzb19iYXNlLAogCQkJCSAgICAgIHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCwgMCwgMCk7Ci0JaWYgKHZkc29fYmFzZSAmIH5QQUdFX01BU0spCisJaWYgKHZkc29fYmFzZSAmIH5QQUdFX01BU0spIHsKKwkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwogCQlyZXR1cm4gKGludCl2ZHNvX2Jhc2U7CisJfQogCiAJY3VycmVudC0+dGhyZWFkLnZkc29fYmFzZSA9IHZkc29fYmFzZTsKIApAQCAtMjY2LDcgKzI2NSwxMSBAQAogCXZtYS0+dm1fb3BzID0gJnZkc29fdm1vcHM7CiAKIAlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCWluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSk7CisJaWYgKGluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSkpIHsKKwkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCW1tLT50b3RhbF92bSArPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOwogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2xpYi9NYWtlZmlsZSBiL2FyY2gvcHBjNjQvbGliL01ha2VmaWxlCmluZGV4IDc2ZmJmYTkuLjBiNmU5NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjNjQvbGliL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgcHBjNjQtc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4uCiAjCiAKLWxpYi15IDo9IGNoZWNrc3VtLm8gZGVjX2FuZF9sb2NrLm8gc3RyaW5nLm8gc3RyY2FzZS5vCitsaWIteSA6PSBjaGVja3N1bS5vIHN0cmluZy5vIHN0cmNhc2UubwogbGliLXkgKz0gY29weXBhZ2UubyBtZW1jcHkubyBjb3B5dXNlci5vIHVzZXJjb3B5Lm8KIAogIyBMb2NrIHByaW1pdGl2ZXMgYXJlIGRlZmluZWQgYXMgbm8tb3BzIGluIGluY2x1ZGUvbGludXgvc3BpbmxvY2suaApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9saWIvZGVjX2FuZF9sb2NrLmMgYi9hcmNoL3BwYzY0L2xpYi9kZWNfYW5kX2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5ZDRkYS4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYzY0L2xpYi9kZWNfYW5kX2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBwcGM2NCB2ZXJzaW9uIG9mIGF0b21pY19kZWNfYW5kX2xvY2soKSB1c2luZyBjbXB4Y2hnCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0vKgotICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbm90aW9uIG9mICJkZWNyZW1lbnQgYQotICogcmVmZXJlbmNlIGNvdW50LCBhbmQgcmV0dXJuIGxvY2tlZCBpZiBpdCBkZWNyZW1lbnRlZCB0byB6ZXJvIi4KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSB1c2VkIG9uIGFueSBhcmNoaXRlY3R1cmUgdGhhdAotICogaGFzIGEgY21weGNoZywgYW5kIHdoZXJlIGF0b21pYy0+dmFsdWUgaXMgYW4gaW50IGhvbGRpbmcKLSAqIHRoZSB2YWx1ZSBvZiB0aGUgYXRvbWljIChpLmUuIHRoZSBoaWdoIGJpdHMgYXJlbid0IHVzZWQKLSAqIGZvciBhIGxvY2sgb3IgYW55dGhpbmcgbGlrZSB0aGF0KS4KLSAqLwotaW50IF9hdG9taWNfZGVjX2FuZF9sb2NrKGF0b21pY190ICphdG9taWMsIHNwaW5sb2NrX3QgKmxvY2spCi17Ci0JaW50IGNvdW50ZXI7Ci0JaW50IG5ld2NvdW50OwotCi0JZm9yICg7OykgewotCQljb3VudGVyID0gYXRvbWljX3JlYWQoYXRvbWljKTsKLQkJbmV3Y291bnQgPSBjb3VudGVyIC0gMTsKLQkJaWYgKCFuZXdjb3VudCkKLQkJCWJyZWFrOwkJLyogZG8gaXQgdGhlIHNsb3cgd2F5ICovCi0KLQkJbmV3Y291bnQgPSBjbXB4Y2hnKCZhdG9taWMtPmNvdW50ZXIsIGNvdW50ZXIsIG5ld2NvdW50KTsKLQkJaWYgKG5ld2NvdW50ID09IGNvdW50ZXIpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2sobG9jayk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljKSkKLQkJcmV0dXJuIDE7Ci0Jc3Bpbl91bmxvY2sobG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9mYXVsdC5jIGIvYXJjaC9wcGM2NC9tbS9mYXVsdC5jCmluZGV4IDdmYmM2OGIuLmJlM2YyNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3BwYzY0L21tL2ZhdWx0LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KIAogLyoKICAqIENoZWNrIHdoZXRoZXIgdGhlIGluc3RydWN0aW9uIGF0IHJlZ3MtPm5pcCBpcyBhIHN0b3JlIHVzaW5nCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCAwODY1MjUxLi40NWQ0NGM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmM0Ci0jIEZyaSBKdWwgMjkgMTQ6NDk6MzAgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjMQorIyBXZWQgU2VwIDE0IDE2OjQ2OjE5IDIwMDUKICMKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKQEAgLTIxLDYgKzIxLDcgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtMzMsNiArMzQsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldApAQCAtOTQsNiArOTYsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiAKICMKICMgSS9PIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uCkBAIC0xNTEsOCArMTU0LDggQEAKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLUNPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKIENPTkZJR19JUFY2PXkKQEAgLTE2NSw2ICsxNjgsMTEgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIwogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldApAQCAtMjE3LDkgKzIyNSwxMSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMzLDYgKzI0Myw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTI2MCw2ICsyNzEsNyBAQAogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwpAQCAtMjgwLDcgKzI5Miw2IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCkBAIC0zODQsNiArMzk1LDEwIEBACiBDT05GSUdfVFVOPW0KIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKworIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKICMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNDUzLDEwICs0NjgsNiBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC00NjUsNiArNDc2LDcgQEAKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTQ4NSwxMSArNDk3LDEwIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTUzMyw2ICs1NDQsNyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTU3Miw2ICs1ODQsNyBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQpAQCAtNjI2LDUgKzYzOSw2IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9bQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCmluZGV4IGFiMWU0OWQyLi44NTg0ZGQ4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAKIG9iai15CTo9ICBiaXRtYXAubyB0cmFwcy5vIHRpbWUubyBwcm9jZXNzLm8gXAogICAgICAgICAgICAgc2V0dXAubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAotICAgICAgICAgICAgc2VtYXBob3JlLm8gczM5MF9leHQubyBkZWJ1Zy5vIHByb2ZpbGUubyBpcnEubworICAgICAgICAgICAgc2VtYXBob3JlLm8gczM5MF9leHQubyBkZWJ1Zy5vIHByb2ZpbGUubyBpcnEubyByZWlwbF9kaWFnLm8KIAogZXh0cmEtJChDT05GSUdfQVJDSF9TMzkwXzMxKQkrPSBoZWFkLm8gCiBleHRyYS0kKENPTkZJR19BUkNIX1MzOTBYKQkrPSBoZWFkNjQubyAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwppbmRleCA1OGZjN2ZiLi45YjMwZjRjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlibAlCQVNFRCgwZikKIAlsCSVyMTQsQkFTRUQoLkxjbGVhbnVwX2NyaXRpY2FsKQogCWJhc3IJJXIxNCwlcjE0Ci0JdG0JMCglcjEyKSwweDAxCQkjIHJldGVzdCBwcm9ibGVtIHN0YXRlIGFmdGVyIGNsZWFudXAKKwl0bQkxKCVyMTIpLDB4MDEJCSMgcmV0ZXN0IHByb2JsZW0gc3RhdGUgYWZ0ZXIgY2xlYW51cAogCWJueglCQVNFRCgxZikKIDA6CWwJJXIxNCxfX0xDX0FTWU5DX1NUQUNLCSMgYXJlIHdlIGFscmVhZHkgb24gdGhlIGFzeW5jIHN0YWNrID8KIAlzbHIJJXIxNCwlcjE1CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IGQwYzlmZmEuLjdiOWI0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCkBAIC0xMDEsNyArMTAxLDcgQEAKIAljbGMJXHBzd29yZys4KDgpLEJBU0VEKC5MY3JpdGljYWxfc3RhcnQpCiAJamwJMGYKIAlicmFzbAklcjE0LGNsZWFudXBfY3JpdGljYWwKLQl0bQkwKCVyMTIpLDB4MDEJCSMgcmV0ZXN0IHByb2JsZW0gc3RhdGUgYWZ0ZXIgY2xlYW51cAorCXRtCTEoJXIxMiksMHgwMQkJIyByZXRlc3QgcHJvYmxlbSBzdGF0ZSBhZnRlciBjbGVhbnVwCiAJam56CTFmCiAwOglsZwklcjE0LF9fTENfQVNZTkNfU1RBQ0sJIyBhcmUgd2UgYWxyZWFkeSBvbiB0aGUgYXN5bmMuIHN0YWNrID8KIAlzbGdyCSVyMTQsJXIxNQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbF9kaWFnLmMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsX2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2NiNDJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbF9kaWFnLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgKiBMaW51eCByZS1JUEwgc3VwcG9ydAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDUKKyAqCisgKiBBdXRob3Iocyk6IFZvbGtlciBTYW1lc2tlIChzYW1lc2tlQGRlLmlibS5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCByZWlwbF9kaWFnX3JjMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVpcGxfZGlhZ19yYzI7CisKKy8qCisgKiByZS1JUEwgdGhlIHN5c3RlbSB1c2luZyB0aGUgbGFzdCB1c2VkIElQTCBwYXJhbWV0ZXJzCisgKi8KK3ZvaWQgcmVpcGxfZGlhZyh2b2lkKQoreworICAgICAgICBhc20gdm9sYXRpbGUgKAorCQkiICAgbGEgICAlJXI0LDBcbiIKKwkJIiAgIGxhICAgJSVyNSwwXG4iCisgICAgICAgICAgICAgICAgIiAgIGRpYWcgJSVyNCwlMiwweDMwOFxuIgorICAgICAgICAgICAgICAgICIwOlxuIgorCQkiICAgc3QgICAlJXI0LCUwXG4iCisJCSIgICBzdCAgICUlcjUsJTFcbiIKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorI2lmZGVmIF9fczM5MHhfXworICAgICAgICAgICAgICAgICIgICAuYWxpZ24gOFxuIgorICAgICAgICAgICAgICAgICIgICAucXVhZCAwYiwgMGJcbiIKKyNlbHNlCisgICAgICAgICAgICAgICAgIiAgIC5hbGlnbiA0XG4iCisgICAgICAgICAgICAgICAgIiAgIC5sb25nIDBiLCAwYlxuIgorI2VuZGlmCisgICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIgorICAgICAgICAgICAgICAgIDogIj1tIiAocmVpcGxfZGlhZ19yYzEpLCAiPW0iIChyZWlwbF9kaWFnX3JjMikKKwkJOiAiZCIgKDMpIDogImNjIiwgIjQiLCAiNSIgKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCA1YmE1YTU0Li41MjA0Nzc4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC0yNjEsOCArMjYxLDExIEBACiAgKiBSZWJvb3QsIGhhbHQgYW5kIHBvd2VyX29mZiByb3V0aW5lcyBmb3Igbm9uIFNNUC4KICAqLwogZXh0ZXJuIHZvaWQgcmVpcGwodW5zaWduZWQgbG9uZyBkZXZubyk7CitleHRlcm4gdm9pZCByZWlwbF9kaWFnKHZvaWQpOwogc3RhdGljIHZvaWQgZG9fbWFjaGluZV9yZXN0YXJ0X25vbnNtcChjaGFyICogX191bnVzZWQpCiB7CisJcmVpcGxfZGlhZygpOworCiAJaWYgKE1BQ0hJTkVfSVNfVk0pCiAJCWNwY21kICgiSVBMIiwgTlVMTCwgMCk7CiAJZWxzZQpAQCAtNjM0LDYgKzYzNyw3IEBACiAgICAgICAgIHN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm87CiAJdW5zaWduZWQgbG9uZyBuID0gKHVuc2lnbmVkIGxvbmcpIHYgLSAxOwogCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKCFuKSB7CiAJCXNlcV9wcmludGYobSwgInZlbmRvcl9pZCAgICAgICA6IElCTS9TMzkwXG4iCiAJCQkgICAgICAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCkBAIC02NTgsNiArNjYyLDcgQEAKIAkJCSAgICAgICBjcHVpbmZvLT5jcHVfaWQuaWRlbnQsCiAJCQkgICAgICAgY3B1aW5mby0+Y3B1X2lkLm1hY2hpbmUpOwogCX0KKwlwcmVlbXB0X2VuYWJsZSgpOwogICAgICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggODUyMjJmZS4uZTEzYzg3YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC02NSw2ICs2NSw3IEBACiBleHRlcm4gY2hhciB2bXBvZmZfY21kW107CiAKIGV4dGVybiB2b2lkIHJlaXBsKHVuc2lnbmVkIGxvbmcgZGV2bm8pOworZXh0ZXJuIHZvaWQgcmVpcGxfZGlhZyh2b2lkKTsKIAogc3RhdGljIHZvaWQgc21wX2V4dF9iaXRjYWxsKGludCwgZWNfYml0X3NpZyk7CiBzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGxfb3RoZXJzKGVjX2JpdF9zaWcpOwpAQCAtMjgzLDYgKzI4NCw4IEBACiAJICogaW50ZXJydXB0ZWQgYnkgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IGFuZCBzMzkwaXJxCiAJICogbG9ja3MgYXJlIGFsd2F5cyBoZWxkIGRpc2FibGVkKS4KIAkgKi8KKwlyZWlwbF9kaWFnKCk7CisKIAlpZiAoTUFDSElORV9JU19WTSkKIAkJY3BjbWQgKCJJUEwiLCBOVUxMLCAwLCBOVUxMKTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCmluZGV4IGNkOGQzOWZiLi5hZjBlOTQxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZwpAQCAtMzMsMTQgKzMzLDYgQEAKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWJvb2wgIkRlYnVnIEJPT1RNRU0gaW5pdGlhbGl6YXRpb24iCiAKLSMgV2UgaGF2ZSBhIGN1c3RvbSBhdG9taWNfZGVjX2FuZF9sb2NrKCkgaW1wbGVtZW50YXRpb24gYnV0IGl0J3Mgbm90Ci0jIGNvbXBhdGlibGUgd2l0aCBzcGlubG9jayBkZWJ1Z2dpbmcgc28gd2UgbmVlZCB0byBmYWxsIGJhY2sgb24KLSMgdGhlIGdlbmVyaWMgdmVyc2lvbiBpbiB0aGF0IGNhc2UuCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZXBlbmRzIG9uIFNNUCAmJiAhREVCVUdfU1BJTkxPQ0sKLQlkZWZhdWx0IHkKLQogY29uZmlnIE1DT1VOVAogCWJvb2wKIAlkZXBlbmRzIG9uIFNUQUNLX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKaW5kZXggM2UwYmFkYi4uYjQ4MzQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUwpAQCAtNDIsMTkgKzQyLDE1IEBACiAgKiBleGVjdXRpbmcgKHNlZSBpbmhlcml0X2xvY2tlZF9wcm9tX21hcHBpbmdzKCkgcmFudCkuCiAgKi8KIHNwYXJjNjRfdnB0ZV9udWNsZXVzOgotCS8qIExvYWQgMHhmMDAwMDAwMCwgd2hpY2ggaXMgTE9XX09CUF9BRERSRVNTLiAgKi8KLQltb3YJCTB4ZiwgJWc1Ci0Jc2xseAkJJWc1LCAyOCwgJWc1Ci0KLQkvKiBJcyBhZGRyID49IExPV19PQlBfQUREUkVTUz8gICovCisJLyogTm90ZSB0aGF0IGt2bWFwIGJlbG93IGhhcyB2ZXJpZmllZCB0aGF0IHRoZSBhZGRyZXNzIGlzCisJICogaW4gdGhlIHJhbmdlIE1PRFVMRVNfVkFERFIgLS0+IFZNQUxMT0NfRU5EIGFscmVhZHkuICBTbworCSAqIGhlcmUgd2UgbmVlZCBvbmx5IGNoZWNrIGlmIGl0IGlzIGFuIE9CUCBhZGRyZXNzIG9yIG5vdC4KKwkgKi8KKwlzZXRoaQkJJWhpKExPV19PQlBfQUREUkVTUyksICVnNQogCWNtcAkJJWc0LCAlZzUKIAlibHUscG4JCSV4Y2MsIHNwYXJjNjRfdnB0ZV9wYXRjaG1lMQogCSBtb3YJCTB4MSwgJWc1Ci0KLQkvKiBMb2FkIDB4MTAwMDAwMDAwLCB3aGljaCBpcyBISV9PQlBfQUREUkVTUy4gICovCiAJc2xseAkJJWc1LCAzMiwgJWc1Ci0KLQkvKiBJcyBhZGRyIDwgSElfT0JQX0FERFJFU1M/ICAqLwogCWNtcAkJJWc0LCAlZzUKIAlibHUscG4JCSV4Y2MsIG9icF9pYWRkcl9wYXRjaAogCSBub3AKQEAgLTE1NiwyNiArMTUyLDI5IEBACiAgKiByYXRoZXIsIHVzZSBpbmZvcm1hdGlvbiBzYXZlZCBkdXJpbmcgaW5oZXJpdF9wcm9tX21hcHBpbmdzKCkgdXNpbmcgOGsKICAqIHBhZ2VzaXplLgogICovCisJLmFsaWduCQkzMgoga3ZtYXA6Ci0JLyogTG9hZCAweGYwMDAwMDAwLCB3aGljaCBpcyBMT1dfT0JQX0FERFJFU1MuICAqLwotCW1vdgkJMHhmLCAlZzUKLQlzbGx4CQklZzUsIDI4LCAlZzUKLQotCS8qIElzIGFkZHIgPj0gTE9XX09CUF9BRERSRVNTPyAgKi8KKwlzZXRoaQkJJWhpKE1PRFVMRVNfVkFERFIpLCAlZzUKIAljbXAJCSVnNCwgJWc1Ci0JYmx1LHBuCQkleGNjLCB2bWFsbG9jX2FkZHIKKwlibHUscG4JCSV4Y2MsIGxvbmdwYXRoCisJIG1vdgkJKFZNQUxMT0NfRU5EID4+IDI0KSwgJWc1CisJc2xseAkJJWc1LCAyNCwgJWc1CisJY21wCQklZzQsICVnNQorCWJnZXUscG4JCSV4Y2MsIGxvbmdwYXRoCisJIG5vcAorCitrdm1hcF9jaGVja19vYnA6CisJc2V0aGkJCSVoaShMT1dfT0JQX0FERFJFU1MpLCAlZzUKKwljbXAJCSVnNCwgJWc1CisJYmx1LHBuCQkleGNjLCBrdm1hcF92bWFsbG9jX2FkZHIKIAkgbW92CQkweDEsICVnNQotCi0JLyogTG9hZCAweDEwMDAwMDAwMCwgd2hpY2ggaXMgSElfT0JQX0FERFJFU1MuICAqLwogCXNsbHgJCSVnNSwgMzIsICVnNQotCi0JLyogSXMgYWRkciA8IEhJX09CUF9BRERSRVNTPyAgKi8KIAljbXAJCSVnNCwgJWc1CiAJYmx1LHBuCQkleGNjLCBvYnBfZGFkZHJfcGF0Y2gKIAkgbm9wCiAKLXZtYWxsb2NfYWRkcjoKLQkvKiBJZiB3ZSBnZXQgaGVyZSwgYSB2bWFsbG9jIGFkZHIgYWNjZXNzZWQsIGxvYWQga2VybmVsIFZQVEUuICAqLwora3ZtYXBfdm1hbGxvY19hZGRyOgorCS8qIElmIHdlIGdldCBoZXJlLCBhIHZtYWxsb2MgYWRkciB3YXMgYWNjZXNzZWQsIGxvYWQga2VybmVsIFZQVEUuICAqLwogCWxkeGEJCVslZzMgKyAlZzZdIEFTSV9OLCAlZzUKIAlicmdleixwbgklZzUsIGxvbmdwYXRoCiAJIG5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMjNhZDgzOS4uNWVmYmZmOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3BzcmNvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKiBSZXR1cm5pbmcgZnJvbSBwdHJhY2UgaXMgYSBiaXQgdHJpY2t5IGJlY2F1c2UgdGhlIHN5c2NhbGwgcmV0dXJuCiAgKiBsb3cgbGV2ZWwgY29kZSBhc3N1bWVzIGFueSB2YWx1ZSByZXR1cm5lZCB3aGljaCBpcyBuZWdhdGl2ZSBhbmQKQEAgLTEyOCwyMCArMTI5LDIwIEBACiAJICogaXMgbWFwcGVkIHRvIGluIHRoZSB1c2VyJ3MgYWRkcmVzcyBzcGFjZSwgd2UgY2FuIHNraXAgdGhlCiAJICogRC1jYWNoZSBmbHVzaC4KIAkgKi8KLQlpZiAoKHVhZGRyIF4ga2FkZHIpICYgKDFVTCA8PCAxMykpIHsKKwlpZiAoKHVhZGRyIF4gKHVuc2lnbmVkIGxvbmcpIGthZGRyKSAmICgxVUwgPDwgMTMpKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBfX3BhKGthZGRyKTsKIAkJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIGxlbjsKIAogCQlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpIHsKIAkJCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gMzIpCi0JCQkJc3BpdGZpcmVfcHV0X2RjYWNoZV90YWcodmEgJiAweDNmZTAsIDB4MCk7CisJCQkJc3BpdGZpcmVfcHV0X2RjYWNoZV90YWcoc3RhcnQgJiAweDNmZTAsIDB4MCk7CiAJCX0gZWxzZSB7CiAJCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IDMyKQogCQkJCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkJCQkic3R4YSAlJWcwLCBbJTBdICUxXG5cdCIKIAkJCQkJIm1lbWJhciAjU3luYyIKIAkJCQkJOiAvKiBubyBvdXRwdXRzICovCi0JCQkJCTogInIiICh2YSksCisJCQkJCTogInIiIChzdGFydCksCiAJCQkJCSJpIiAoQVNJX0RDQUNIRV9JTlZBTElEQVRFKSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCmluZGV4IGNiYjVlNTkuLmZiN2E1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCkBAIC0xNjMsOSArMTYzLDYgQEAKIEVYUE9SVF9TWU1CT0woYXRvbWljNjRfYWRkX3JldCk7CiBFWFBPUlRfU1lNQk9MKGF0b21pYzY0X3N1Yik7CiBFWFBPUlRfU1lNQk9MKGF0b21pYzY0X3N1Yl9yZXQpOwotI2lmZGVmIENPTkZJR19TTVAKLUVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwotI2VuZGlmCiAKIC8qIEF0b21pYyBiaXQgb3BlcmF0aW9ucy4gKi8KIEVYUE9SVF9TWU1CT0wodGVzdF9hbmRfc2V0X2JpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYV9hc20uUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TCmluZGV4IGNiYjQwNTguLmRhNDg0MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TCkBAIC0xNyw3ICsxNyw3IEBACiBfX2RvX2ludF9zdG9yZToKIAlyZAklYXNpLCAlbzQKIAl3cgklbzMsIDAsICVhc2kKLQlsZHgJWyVvMl0sICVnMworCW1vdgklbzIsICVnMwogCWNtcAklbzEsIDIKIAliZSxwbgklaWNjLCAyZgogCSBjbXAJJW8xLCA0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwppbmRleCBkYTk3MzlmLi40MjcxOGY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTE4NCwxMyArMTg0LDE0IEBACiAJCQl1bnNpZ25lZCBsb25nICpzYWRkciwgaW50IGlzX3NpZ25lZCwgaW50IGFzaSk7CiAJCiBleHRlcm4gdm9pZCBfX2RvX2ludF9zdG9yZSh1bnNpZ25lZCBsb25nICpkc3RfYWRkciwgaW50IHNpemUsCi0JCQkgICB1bnNpZ25lZCBsb25nICpzcmNfdmFsLCBpbnQgYXNpKTsKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3JjX3ZhbCwgaW50IGFzaSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19pbnRfc3RvcmUoaW50IHJlZ19udW0sIGludCBzaXplLCB1bnNpZ25lZCBsb25nICpkc3RfYWRkciwKLQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFzaSkKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFzaSwgaW50IG9yaWdfYXNpKQogewogCXVuc2lnbmVkIGxvbmcgemVybyA9IDA7Ci0JdW5zaWduZWQgbG9uZyAqc3JjX3ZhbCA9ICZ6ZXJvOworCXVuc2lnbmVkIGxvbmcgKnNyY192YWxfcCA9ICZ6ZXJvOworCXVuc2lnbmVkIGxvbmcgc3JjX3ZhbDsKIAogCWlmIChzaXplID09IDE2KSB7CiAJCXNpemUgPSA4OwpAQCAtMTk4LDcgKzE5OSwyNSBAQAogCQkgICAgICAgICh1bnNpZ25lZClmZXRjaF9yZWcocmVnX251bSwgcmVncykgOiAwKSkgPDwgMzIpIHwKIAkJCSh1bnNpZ25lZClmZXRjaF9yZWcocmVnX251bSArIDEsIHJlZ3MpOwogCX0gZWxzZSBpZiAocmVnX251bSkgewotCQlzcmNfdmFsID0gZmV0Y2hfcmVnX2FkZHIocmVnX251bSwgcmVncyk7CisJCXNyY192YWxfcCA9IGZldGNoX3JlZ19hZGRyKHJlZ19udW0sIHJlZ3MpOworCX0KKwlzcmNfdmFsID0gKnNyY192YWxfcDsKKwlpZiAodW5saWtlbHkoYXNpICE9IG9yaWdfYXNpKSkgeworCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAyOgorCQkJc3JjX3ZhbCA9IHN3YWIxNihzcmNfdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlzcmNfdmFsID0gc3dhYjMyKHNyY192YWwpOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXNyY192YWwgPSBzd2FiNjQoc3JjX3ZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAxNjoKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX07CiAJfQogCV9fZG9faW50X3N0b3JlKGRzdF9hZGRyLCBzaXplLCBzcmNfdmFsLCBhc2kpOwogfQpAQCAtMjc2LDYgKzI5NSw3IEBACiAJCWtlcm5lbF9tbmFfdHJhcF9mYXVsdCgpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJaW50IG9yaWdfYXNpLCBhc2k7CiAKIAkJYWRkciA9IGNvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbiwKIAkJCQkJCSAoKGluc24gPj4gMjUpICYgMHgxZikpOwpAQCAtMjg1LDE4ICszMDUsNDggQEAKIAkJICAgICAgIHJlZ3MtPnRwYywgZGlyc3RyaW5nc1tkaXJdLCBhZGRyLCBzaXplLAogCQkgICAgICAgcmVncy0+dV9yZWdzW1VSRUdfUkVUUENdKTsKICNlbmRpZgorCQlvcmlnX2FzaSA9IGFzaSA9IGRlY29kZV9hc2koaW5zbiwgcmVncyk7CisJCXN3aXRjaCAoYXNpKSB7CisJCWNhc2UgQVNJX05MOgorCQljYXNlIEFTSV9BSVVQTDoKKwkJY2FzZSBBU0lfQUlVU0w6CisJCWNhc2UgQVNJX1BMOgorCQljYXNlIEFTSV9TTDoKKwkJY2FzZSBBU0lfUE5GTDoKKwkJY2FzZSBBU0lfU05GTDoKKwkJCWFzaSAmPSB+MHgwODsKKwkJCWJyZWFrOworCQl9OwogCQlzd2l0Y2ggKGRpcikgewogCQljYXNlIGxvYWQ6CiAJCQlkb19pbnRfbG9hZChmZXRjaF9yZWdfYWRkcigoKGluc24+PjI1KSYweDFmKSwgcmVncyksCiAJCQkJICAgIHNpemUsICh1bnNpZ25lZCBsb25nICopIGFkZHIsCi0JCQkJICAgIGRlY29kZV9zaWduZWRuZXNzKGluc24pLAotCQkJCSAgICBkZWNvZGVfYXNpKGluc24sIHJlZ3MpKTsKKwkJCQkgICAgZGVjb2RlX3NpZ25lZG5lc3MoaW5zbiksIGFzaSk7CisJCQlpZiAodW5saWtlbHkoYXNpICE9IG9yaWdfYXNpKSkgeworCQkJCXVuc2lnbmVkIGxvbmcgdmFsX2luID0gKih1bnNpZ25lZCBsb25nICopIGFkZHI7CisJCQkJc3dpdGNoIChzaXplKSB7CisJCQkJY2FzZSAyOgorCQkJCQl2YWxfaW4gPSBzd2FiMTYodmFsX2luKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OgorCQkJCQl2YWxfaW4gPSBzd2FiMzIodmFsX2luKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA4OgorCQkJCQl2YWxfaW4gPSBzd2FiNjQodmFsX2luKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxNjoKKwkJCQlkZWZhdWx0OgorCQkJCQlCVUcoKTsKKwkJCQkJYnJlYWs7CisJCQkJfTsKKwkJCQkqKHVuc2lnbmVkIGxvbmcgKikgYWRkciA9IHZhbF9pbjsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2Ugc3RvcmU6CiAJCQlkb19pbnRfc3RvcmUoKChpbnNuPj4yNSkmMHgxZiksIHNpemUsCiAJCQkJICAgICAodW5zaWduZWQgbG9uZyAqKSBhZGRyLCByZWdzLAotCQkJCSAgICAgZGVjb2RlX2FzaShpbnNuLCByZWdzKSk7CisJCQkJICAgICBhc2ksIG9yaWdfYXNpKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L2xpYi9NYWtlZmlsZQppbmRleCBkOTY4YWViLi5jMjk1ODA2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDQgQEAKIAkgY29weV9pbl91c2VyLm8gdXNlcl9maXh1cC5vIG1lbW1vdmUubyBcCiAJIG1jb3VudC5vIGlwY3N1bS5vIHJ3c2VtLm8geG9yLm8gZmluZF9iaXQubyBkZWxheS5vCiAKLWxpYi0kKENPTkZJR19IQVZFX0RFQ19MT0NLKSArPSBkZWNfYW5kX2xvY2subwotCiBvYmoteSArPSBpb21hcC5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2RlY19hbmRfbG9jay5TIGIvYXJjaC9zcGFyYzY0L2xpYi9kZWNfYW5kX2xvY2suUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlMjg4ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2RlY19hbmRfbG9jay5TCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyogJElkOiBkZWNfYW5kX2xvY2suUyx2IDEuNSAyMDAxLzExLzE4IDAwOjEyOjU2IGRhdmVtIEV4cCAkCi0gKiBkZWNfYW5kX2xvY2suUzogU3BhcmM2NCB2ZXJzaW9uIG9mICJhdG9taWNfZGVjX2FuZF9sb2NrKCkiCi0gKiAgICAgICAgICAgICAgICAgdXNpbmcgY2FzIGFuZCBsZHN0dWIgaW5zdHJ1Y3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLQotCS50ZXh0Ci0JLmFsaWduCTY0Ci0KLQkvKiBDQVMgYmFzaWNhbGx5IHdvcmtzIGxpa2UgdGhpczoKLQkgKgotCSAqIHZvaWQgQ0FTKE1FTSwgUkVHMSwgUkVHMikKLQkgKiB7Ci0JICogICBTVEFSVF9BVE9NSUMoKTsKLQkgKiAgIGlmICgqKE1FTSkgPT0gUkVHMSkgewotCSAqICAgICBUTVAgPSAqKE1FTSk7Ci0JICogICAgICooTUVNKSA9IFJFRzI7Ci0JICogICAgIFJFRzIgPSBUTVA7Ci0JICogICB9IGVsc2UKLQkgKiAgICAgUkVHMiA9ICooTUVNKTsKLQkgKiAgIEVORF9BVE9NSUMoKTsKLQkgKiB9Ci0JICovCi0KLQkuZ2xvYmwJX2F0b21pY19kZWNfYW5kX2xvY2sKLV9hdG9taWNfZGVjX2FuZF9sb2NrOgkvKiAlbzAgPSBjb3VudGVyLCAlbzEgPSBsb2NrICovCi1sb29wMToJbGR1dwlbJW8wXSwgJWcyCi0Jc3ViY2MJJWcyLCAxLCAlZzcKLQliZSxwbgklaWNjLCBzdGFydF90b196ZXJvCi0JIG5vcAotbnplcm86CWNhcwlbJW8wXSwgJWcyLCAlZzcKLQljbXAJJWcyLCAlZzcKLQlibmUscG4JJWljYywgbG9vcDEKLQkgbW92CTAsICVnMQotCi1vdXQ6Ci0JbWVtYmFyCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZQotCXJldGwKLQkgbW92CSVnMSwgJW8wCi1zdGFydF90b196ZXJvOgotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JbGRzdwlbJWc2ICsgVElfUFJFX0NPVU5UXSwgJWczCi0JYWRkCSVnMywgMSwgJWczCi0Jc3R3CSVnMywgWyVnNiArIFRJX1BSRV9DT1VOVF0KLSNlbmRpZgotdG9femVybzoKLQlsZHN0dWIJWyVvMV0sICVnMwotCW1lbWJhcgkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKLQlicm56LHBuCSVnMywgc3Bpbl9vbl9sb2NrCi0JIG5vcAotbG9vcDI6CWNhcwlbJW8wXSwgJWcyLCAlZzcJCS8qIEFTU0VSVChnNyA9PSAwKSAqLwotCWNtcAklZzIsICVnNwotCi0JYmUscHQJJWljYywgb3V0Ci0JIG1vdgkxLCAlZzEKLQlsZHV3CVslbzBdLCAlZzIKLQlzdWJjYwklZzIsIDEsICVnNwotCWJlLHBuCSVpY2MsIGxvb3AyCi0JIG5vcAotCW1lbWJhcgkjU3RvcmVTdG9yZSB8ICNMb2FkU3RvcmUKLQlzdGIJJWcwLCBbJW8xXQotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JbGRzdwlbJWc2ICsgVElfUFJFX0NPVU5UXSwgJWczCi0Jc3ViCSVnMywgMSwgJWczCi0Jc3R3CSVnMywgWyVnNiArIFRJX1BSRV9DT1VOVF0KLSNlbmRpZgotCi0JYixwdAkleGNjLCBuemVybwotCSBub3AKLXNwaW5fb25fbG9jazoKLQlsZHViCVslbzFdLCAlZzMKLQltZW1iYXIJI0xvYWRMb2FkCi0JYnJueixwdAklZzMsIHNwaW5fb25fbG9jawotCSBub3AKLQliYSxwdAkleGNjLCB0b196ZXJvCi0JIG5vcAotCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLmkzODYgYi9hcmNoL3VtL0tjb25maWcuaTM4NgppbmRleCA4YWQxNTZhLi41ZDkyY2FjIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuaTM4NgorKysgYi9hcmNoL3VtL0tjb25maWcuaTM4NgpAQCAtNDIsMyArNDIsNyBAQAogY29uZmlnIEFSQ0hfUkVVU0VfSE9TVF9WU1lTQ0FMTF9BUkVBCiAJYm9vbAogCWRlZmF1bHQgeQorCitjb25maWcgWDg2X0NNUFhDSEcKKwlib29sCisJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlIGIvYXJjaC91bS9NYWtlZmlsZQppbmRleCBjZTk4NzI2Li41YjVhZjk1IDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlCisrKyBiL2FyY2gvdW0vTWFrZWZpbGUKQEAgLTUzLDkgKzUzLDEzIEBACiAKICMgLUR2bWFwPWtlcm5lbF92bWFwIGFmZmVjdHMgZXZlcnl0aGluZywgYW5kIHByZXZlbnRzIGFueXRoaW5nIGZyb20KICMgcmVmZXJlbmNpbmcgdGhlIGxpYnBjYXAubyBzeW1ib2wgc28gbmFtZWQuCisjCisjIFNhbWUgdGhpbmdzIGZvciBpbjZhZGRyX2xvb3BiYWNrIC0gZm91bmQgaW4gbGliYy4KIAogQ0ZMQUdTICs9ICQoQ0ZMQUdTLXkpIC1EX19hcmNoX3VtX18gLURTVUJBUkNIPVwiJChTVUJBUkNIKVwiIFwKLQkkKEFSQ0hfSU5DTFVERSkgJChNT0RFX0lOQ0xVREUpIC1Edm1hcD1rZXJuZWxfdm1hcAorCSQoQVJDSF9JTkNMVURFKSAkKE1PREVfSU5DTFVERSkgLUR2bWFwPWtlcm5lbF92bWFwIFwKKwktRGluNmFkZHJfbG9vcGJhY2s9a2VybmVsX2luNmFkZHJfbG9vcGJhY2sKKwogQUZMQUdTICs9ICQoQVJDSF9JTkNMVURFKQogCiBVU0VSX0NGTEFHUyA6PSAkKHBhdHN1YnN0IC1JJSwsJChDRkxBR1MpKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21jYXN0X3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy9tY2FzdF91c2VyLmMKaW5kZXggN2EwZDExNS4uNWRiMTM2ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL21jYXN0X3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbWNhc3RfdXNlci5jCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8c3lzL3VuLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KQEAgLTU1LDcgKzU0LDcgQEAKIAlzdHJ1Y3QgbWNhc3RfZGF0YSAqcHJpID0gZGF0YTsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IHByaS0+bWNhc3RfYWRkcjsKIAlzdHJ1Y3QgaXBfbXJlcSBtcmVxOwotCWludCBmZCA9IC1FSU5WQUwsIHllcyA9IDEsIGVyciA9IC1FSU5WQUw7OworCWludCBmZCwgeWVzID0gMSwgZXJyID0gMDsKIAogCiAJaWYgKChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB8fCAoc2luLT5zaW5fcG9ydCA9PSAwKSkKQEAgLTY2LDEzICs2NSwxNCBAQAogCWlmIChmZCA8IDApewogCQlwcmludGsoIm1jYXN0X29wZW4gOiBkYXRhIHNvY2tldCBmYWlsZWQsIGVycm5vID0gJWRcbiIsIAogCQkgICAgICAgZXJybm8pOwotCQlmZCA9IC1lcnJubzsKKwkJZXJyID0gLWVycm5vOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CiAJCXByaW50aygibWNhc3Rfb3BlbjogU09fUkVVU0VBRERSIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKIAkJCWVycm5vKTsKKwkJZXJyID0gLWVycm5vOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKQEAgLTgxLDYgKzgxLDcgQEAKIAkJICAgICAgIHNpemVvZihwcmktPnR0bCkpIDwgMCkgewogCQlwcmludGsoIm1jYXN0X29wZW46IElQX01VTFRJQ0FTVF9UVEwgZmFpbGVkLCBlcnJvciA9ICVkXG4iLAogCQkJZXJybm8pOworCQllcnIgPSAtZXJybm87CiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIApAQCAtODgsMTIgKzg5LDE0IEBACiAJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfTVVMVElDQVNUX0xPT1AsICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKIAkJcHJpbnRrKCJtY2FzdF9vcGVuOiBJUF9NVUxUSUNBU1RfTE9PUCBmYWlsZWQsIGVycm9yID0gJWRcbiIsCiAJCQllcnJubyk7CisJCWVyciA9IC1lcnJubzsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCiAJLyogYmluZCBzb2NrZXQgdG8gbWNhc3QgYWRkcmVzcyAqLwogCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopIHNpbiwgc2l6ZW9mKCpzaW4pKSA8IDApIHsKIAkJcHJpbnRrKCJtY2FzdF9vcGVuIDogZGF0YSBiaW5kIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOworCQllcnIgPSAtZXJybm87CiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0JCQogCQpAQCAtMTA4LDE0ICsxMTEsMTUgQEAKIAkJICAgICAgICJpbnRlcmZhY2Ugb24gdGhlIGhvc3QuXG4iKTsKIAkJcHJpbnRrKCJldGgwIHNob3VsZCBiZSBjb25maWd1cmVkIGluIG9yZGVyIHRvIHVzZSB0aGUgIgogCQkgICAgICAgIm11bHRpY2FzdCB0cmFuc3BvcnQuXG4iKTsKKwkJZXJyID0gLWVycm5vOwogICAgICAgICAgICAgICAgIGdvdG8gb3V0X2Nsb3NlOwogCX0KIAotIG91dDoKIAlyZXR1cm4gZmQ7CiAKICBvdXRfY2xvc2U6CiAgICAgICAgIG9zX2Nsb3NlX2ZpbGUoZmQpOworIG91dDoKICAgICAgICAgcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKaW5kZXggYzE5MGMyNC4uMTJjOTUzNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAib3MuaCIKICNpbmNsdWRlICJ1bWlkLmgiCiAjaW5jbHVkZSAiaXJxX2tlcm4uaCIKKyNpbmNsdWRlICJjaG9vc2UtbW9kZS5oIgogCiBzdGF0aWMgaW50IGRvX3VubGlua19zb2NrZXQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllciwgCiAJCQkgICAgdW5zaWduZWQgbG9uZyB3aGF0LCB2b2lkICpkYXRhKQpAQCAtMjc2LDYgKzI3Nyw3IEBACiAgICAgZ28gLSBjb250aW51ZSB0aGUgVU1MIGFmdGVyIGEgJ3N0b3AnIFxuXAogICAgIGxvZyA8c3RyaW5nPiAtIG1ha2UgVU1MIGVudGVyIDxzdHJpbmc+IGludG8gdGhlIGtlcm5lbCBsb2dcblwKICAgICBwcm9jIDxmaWxlPiAtIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBVTUwncyAvcHJvYy88ZmlsZT5cblwKKyAgICBzdGFjayA8cGlkPiAtIHJldHVybnMgdGhlIHN0YWNrIG9mIHRoZSBzcGVjaWZpZWQgcGlkXG5cCiAiCiAKIHZvaWQgbWNvbnNvbGVfaGVscChzdHJ1Y3QgbWNfcmVxdWVzdCAqcmVxKQpAQCAtNDc5LDYgKzQ4MSw1NiBAQAogfQogI2VuZGlmCiAKKy8qIE1jb25zb2xlIHN0YWNrIHRyYWNlCisgKiAgQWRkZWQgYnkgQWxsYW4gR3JhdmVzLCBKZWZmIERpa2UKKyAqICBEdW1wcyBhIHN0YWNrcyByZWdpc3RlcnMgdG8gdGhlIGxpbnV4IGNvbnNvbGUuCisgKiAgVXNhZ2Ugc3RhY2sgPHBpZD4uCisgKi8KK3ZvaWQgZG9fc3RhY2soc3RydWN0IG1jX3JlcXVlc3QgKnJlcSkKK3sKKyAgICAgICAgY2hhciAqcHRyID0gcmVxLT5yZXF1ZXN0LmRhdGE7CisgICAgICAgIGludCBwaWRfcmVxdWVzdGVkPSAtMTsKKyAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tID0gTlVMTDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvID0gTlVMTDsKKworICAgICAgICAvKiBXb3VsZCBiZSBuaWNlOgorICAgICAgICAgKiAxKSBTZW5kIHNob3dyZWdzIG91dHB1dCB0byBtY29uc29sZS4KKwkgKiAyKSBBZGQgYSB3YXkgdG8gc3RhY2sgZHVtcCBhbGwgcGlkcy4KKwkgKi8KKworICAgICAgICBwdHIgKz0gc3RybGVuKCJzdGFjayIpOworICAgICAgICB3aGlsZShpc3NwYWNlKCpwdHIpKSBwdHIrKzsKKworICAgICAgICAvKiBTaG91bGQgcmVhbGx5IGNoZWNrIGZvciBtdWx0aXBsZSBwaWRzIG9yIHJlamVjdCBiYWQgYXJncyBoZXJlICovCisgICAgICAgIC8qIFdoYXQgZG8gdGhlIGFyZ3VtZW50cyBpbiBtY29uc29sZV9yZXBseSBtZWFuPyAqLworICAgICAgICBpZihzc2NhbmYocHRyLCAiJWQiLCAmcGlkX3JlcXVlc3RlZCkgPT0gMCl7CisgICAgICAgICAgICAgICAgbWNvbnNvbGVfcmVwbHkocmVxLCAiUGxlYXNlIHNwZWNpZnkgYSBwaWQiLCAxLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmcm9tID0gY3VycmVudDsKKyAgICAgICAgdG8gPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZF9yZXF1ZXN0ZWQpOworCisgICAgICAgIGlmKCh0byA9PSBOVUxMKSB8fCAocGlkX3JlcXVlc3RlZCA9PSAwKSkgeworICAgICAgICAgICAgICAgIG1jb25zb2xlX3JlcGx5KHJlcSwgIkNvdWxkbid0IGZpbmQgdGhhdCBwaWQiLCAxLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdG8tPnRocmVhZC5zYXZlZF90YXNrID0gY3VycmVudDsKKworICAgICAgICBzd2l0Y2hfdG8oZnJvbSwgdG8sIGZyb20pOworICAgICAgICBtY29uc29sZV9yZXBseShyZXEsICJTdGFjayBEdW1wZWQgdG8gY29uc29sZSBhbmQgbWVzc2FnZSBsb2ciLCAwLCAwKTsKK30KKwordm9pZCBtY29uc29sZV9zdGFjayhzdHJ1Y3QgbWNfcmVxdWVzdCAqcmVxKQoreworCS8qIFRoaXMgY29tbWFuZCBkb2Vzbid0IHdvcmsgaW4gVFQgbW9kZSwgc28gbGV0J3MgY2hlY2sgYW5kIHRoZW4KKwkgKiBnZXQgb3V0IG9mIGhlcmUKKwkgKi8KKwlDSE9PU0VfTU9ERShtY29uc29sZV9yZXBseShyZXEsICJTb3JyeSwgdGhpcyBkb2Vzbid0IHdvcmsgaW4gVFQgbW9kZSIsCisJCQkJICAgMSwgMCksCisJCSAgICBkb19zdGFjayhyZXEpKTsKK30KKwogLyogQ2hhbmdlZCBieSBtY29uc29sZV9zZXR1cCwgd2hpY2ggaXMgX19zZXR1cCwgYW5kIGNhbGxlZCBiZWZvcmUgU01QIGlzCiAgKiBhY3RpdmUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfdXNlci5jCmluZGV4IGZlNWFmYjEzMi4uMzEwYzFmOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfdXNlci5jCkBAIC0zMCw2ICszMCw3IEBACiAJeyAiZ28iLCBtY29uc29sZV9nbywgTUNPTlNPTEVfSU5UUiB9LAogCXsgImxvZyIsIG1jb25zb2xlX2xvZywgTUNPTlNPTEVfSU5UUiB9LAogCXsgInByb2MiLCBtY29uc29sZV9wcm9jLCBNQ09OU09MRV9QUk9DIH0sCisgICAgICAgIHsgInN0YWNrIiwgbWNvbnNvbGVfc3RhY2ssIE1DT05TT0xFX0lOVFIgfSwKIH07CiAKIC8qIEluaXRpYWxpemVkIGluIG1jb25zb2xlX2luaXQsIHdoaWNoIGlzIGFuIGluaXRjYWxsICovCkBAIC0xNzIsOSArMTczLDkgQEAKIAlpZihub3RpZnlfc29jayA8IDApewogCQlub3RpZnlfc29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX0RHUkFNLCAwKTsKIAkJaWYobm90aWZ5X3NvY2sgPCAwKXsKLQkJCXByaW50aygibWNvbnNvbGVfbm90aWZ5IC0gc29ja2V0IGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKLQkJCSAgICAgICBlcnJubyk7CiAJCQllcnIgPSAtZXJybm87CisJCQlwcmludGsoIm1jb25zb2xlX25vdGlmeSAtIHNvY2tldCBmYWlsZWQsIGVycm5vID0gJWRcbiIsCisJCQkgICAgICAgZXJyKTsKIAkJfQogCX0KIAl1bmxvY2tfbm90aWZ5KCk7CkBAIC0xOTcsOCArMTk4LDggQEAKIAluID0gc2VuZHRvKG5vdGlmeV9zb2NrLCAmcGFja2V0LCBsZW4sIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnRhcmdldCwgCiAJCSAgIHNpemVvZih0YXJnZXQpKTsKIAlpZihuIDwgMCl7Ci0JCXByaW50aygibWNvbnNvbGVfbm90aWZ5IC0gc2VuZHRvIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQllcnIgPSAtZXJybm87CisJCXByaW50aygibWNvbnNvbGVfbm90aWZ5IC0gc2VuZHRvIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCX0KIAlyZXR1cm4oZXJyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9wdHkuYyBiL2FyY2gvdW0vZHJpdmVycy9wdHkuYwppbmRleCBlZDg0ZDAxLi4wMzA2YTFiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvcHR5LmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3B0eS5jCkBAIC00Myw4ICs0Myw5IEBACiAKIAlmZCA9IGdldF9wdHkoKTsKIAlpZihmZCA8IDApeworCQllcnIgPSAtZXJybm87CiAJCXByaW50aygib3Blbl9wdHMgOiBGYWlsZWQgdG8gb3BlbiBwdHNcbiIpOwotCQlyZXR1cm4oLWVycm5vKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJaWYoZGF0YS0+cmF3KXsKIAkJQ0FUQ0hfRUlOVFIoZXJyID0gdGNnZXRhdHRyKGZkLCAmZGF0YS0+dHQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF91c2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NGQyYmM0Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX3VzZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZXJ1bixJbmMgKGdsb25ub25AcmlkZ2VydW4uY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHNjaGVkLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSAiYXNtL3R5cGVzLmgiCi0jaW5jbHVkZSAidXNlcl91dGlsLmgiCi0jaW5jbHVkZSAia2Vybl91dGlsLmgiCi0jaW5jbHVkZSAidXNlci5oIgotI2luY2x1ZGUgInViZF91c2VyLmgiCi0jaW5jbHVkZSAib3MuaCIKLSNpbmNsdWRlICJjb3cuaCIKLQotI2luY2x1ZGUgPGVuZGlhbi5oPgotI2luY2x1ZGUgPGJ5dGVzd2FwLmg+Ci0KLXZvaWQgaWdub3JlX3NpZ3dpbmNoX3NpZyh2b2lkKQotewotCXNpZ25hbChTSUdXSU5DSCwgU0lHX0lHTik7Ci19Ci0KLWludCBzdGFydF9pb190aHJlYWQodW5zaWduZWQgbG9uZyBzcCwgaW50ICpmZF9vdXQpCi17Ci0JaW50IHBpZCwgZmRzWzJdLCBlcnI7Ci0KLQllcnIgPSBvc19waXBlKGZkcywgMSwgMSk7Ci0JaWYoZXJyIDwgMCl7Ci0JCXByaW50aygic3RhcnRfaW9fdGhyZWFkIC0gb3NfcGlwZSBmYWlsZWQsIGVyciA9ICVkXG4iLCAtZXJyKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Ja2VybmVsX2ZkID0gZmRzWzBdOwotCSpmZF9vdXQgPSBmZHNbMV07Ci0KLQlwaWQgPSBjbG9uZShpb190aHJlYWQsICh2b2lkICopIHNwLCBDTE9ORV9GSUxFUyB8IENMT05FX1ZNIHwgU0lHQ0hMRCwKLQkJICAgIE5VTEwpOwotCWlmKHBpZCA8IDApewotCQlwcmludGsoInN0YXJ0X2lvX3RocmVhZCAtIGNsb25lIGZhaWxlZCA6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJZXJyID0gLWVycm5vOwotCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KLQlyZXR1cm4ocGlkKTsKLQotIG91dF9jbG9zZToKLQlvc19jbG9zZV9maWxlKGZkc1swXSk7Ci0Jb3NfY2xvc2VfZmlsZShmZHNbMV0pOwotCWtlcm5lbF9mZCA9IC0xOwotCSpmZF9vdXQgPSAtMTsKLSBvdXQ6Ci0JcmV0dXJuKGVycik7Ci19Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMveHRlcm0uYyBiL2FyY2gvdW0vZHJpdmVycy94dGVybS5jCmluZGV4IDkzZGMxOTEuLjkwZTBlNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy94dGVybS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy94dGVybS5jCkBAIC0xMTAsMTMgKzExMCwxNSBAQAogCiAJZmQgPSBta3N0ZW1wKGZpbGUpOwogCWlmKGZkIDwgMCl7CisJCWVyciA9IC1lcnJubzsKIAkJcHJpbnRrKCJ4dGVybV9vcGVuIDogbWtzdGVtcCBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJaWYodW5saW5rKGZpbGUpKXsKKwkJZXJyID0gLWVycm5vOwogCQlwcmludGsoInh0ZXJtX29wZW4gOiB1bmxpbmsgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gZXJyOwogCX0KIAlvc19jbG9zZV9maWxlKGZkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2NvbW1vbi1vZmZzZXRzLmggYi9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaAppbmRleCAwYWE2MjA5Li43ODJhYzNhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaApAQCAtMTIsNCArMTIsNiBAQAogREVGSU5FX1NUUihVTV9LRVJOX05PVElDRSwgS0VSTl9OT1RJQ0UpOwogREVGSU5FX1NUUihVTV9LRVJOX0lORk8sIEtFUk5fSU5GTyk7CiBERUZJTkVfU1RSKFVNX0tFUk5fREVCVUcsIEtFUk5fREVCVUcpOwotREVGSU5FKEhPU1RfRUxGX0NMQVNTLCBFTEZfQ0xBU1MpOworREVGSU5FKFVNX0VMRl9DTEFTUywgRUxGX0NMQVNTKTsKK0RFRklORShVTV9FTEZDTEFTUzMyLCBFTEZDTEFTUzMyKTsKK0RFRklORShVTV9FTEZDTEFTUzY0LCBFTEZDTEFTUzY0KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9tY29uc29sZS5oIGIvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlLmgKaW5kZXggY2ZhMzY4ZS4uYjFiNTEyZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlLmgKQEAgLTgxLDYgKzgxLDcgQEAKIGV4dGVybiB2b2lkIG1jb25zb2xlX2dvKHN0cnVjdCBtY19yZXF1ZXN0ICpyZXEpOwogZXh0ZXJuIHZvaWQgbWNvbnNvbGVfbG9nKHN0cnVjdCBtY19yZXF1ZXN0ICpyZXEpOwogZXh0ZXJuIHZvaWQgbWNvbnNvbGVfcHJvYyhzdHJ1Y3QgbWNfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiB2b2lkIG1jb25zb2xlX3N0YWNrKHN0cnVjdCBtY19yZXF1ZXN0ICpyZXEpOwogCiBleHRlcm4gaW50IG1jb25zb2xlX2dldF9yZXF1ZXN0KGludCBmZCwgc3RydWN0IG1jX3JlcXVlc3QgKnJlcSk7CiBleHRlcm4gaW50IG1jb25zb2xlX25vdGlmeShjaGFyICpzb2NrX25hbWUsIGludCB0eXBlLCBjb25zdCB2b2lkICpkYXRhLCAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9tZW1fdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL21lbV91c2VyLmgKaW5kZXggZDY0MDRiYi4uOWZlZjQxMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL21lbV91c2VyLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL21lbV91c2VyLmgKQEAgLTUxLDcgKzUxLDYgQEAKIAogZXh0ZXJuIHZvaWQgY2hlY2tfZGV2YW5vbih2b2lkKTsKIGV4dGVybiBpbnQgaW5pdF9tZW1fdXNlcih2b2lkKTsKLWV4dGVybiBpbnQgY3JlYXRlX21lbV9maWxlKHVuc2lnbmVkIGxvbmcgbGVuKTsKIGV4dGVybiB2b2lkIHNldHVwX21lbW9yeSh2b2lkICplbnRyeSk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX2lvbWVtKGNoYXIgKmRyaXZlciwgdW5zaWduZWQgbG9uZyAqbGVuX291dCk7CiBleHRlcm4gaW50IGluaXRfbWFwcyh1bnNpZ25lZCBsb25nIHBoeXNtZW0sIHVuc2lnbmVkIGxvbmcgaW9tZW0sCkBAIC02NCwyMCArNjMsNiBAQAogZXh0ZXJuIHZvaWQgdW5tYXBfcGh5c21lbSh2b2lkKTsKIGV4dGVybiB2b2lkIG1hcF9tZW1vcnkodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHIsIGludCB3LCBpbnQgeCk7Ci1leHRlcm4gaW50IHByb3RlY3RfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIAotCQkJICBpbnQgciwgaW50IHcsIGludCB4LCBpbnQgbXVzdF9zdWNjZWVkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9rbWVtX2VuZCh2b2lkKTsKLWV4dGVybiB2b2lkIGNoZWNrX3RtcGV4ZWModm9pZCk7CiAKICNlbmRpZgotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL29zLmggYi9hcmNoL3VtL2luY2x1ZGUvb3MuaAppbmRleCA0YzM2MjQ1Li41ODMzMjlkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvb3MuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvb3MuaApAQCAtMTU3LDYgKzE1Nyw5IEBACiBleHRlcm4gdm9pZCBvc19lYXJseV9jaGVja3Modm9pZCk7CiBleHRlcm4gaW50IGNhbl9kb19za2FzKHZvaWQpOwogCisvKiBtZW0uYyAqLworZXh0ZXJuIGludCBjcmVhdGVfbWVtX2ZpbGUodW5zaWduZWQgbG9uZyBsZW4pOworCiAvKiBwcm9jZXNzLmMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIG9zX3Byb2Nlc3NfcGMoaW50IHBpZCk7CiBleHRlcm4gaW50IG9zX3Byb2Nlc3NfcGFyZW50KGludCBwaWQpOwpAQCAtMTgxLDYgKzE4NCw4IEBACiAvKiB0dC5jCiAgKiBmb3IgdHQgbW9kZSBvbmx5ICh3aWxsIGJlIGRlbGV0ZWQgaW4gZnV0dXJlLi4uKQogICovCitleHRlcm4gaW50IHByb3RlY3RfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgIGludCByLCBpbnQgdywgaW50IHgsIGludCBtdXN0X3N1Y2NlZWQpOwogZXh0ZXJuIHZvaWQgZm9yd2FyZF9wZW5kaW5nX3NpZ2lvKGludCB0YXJnZXQpOwogZXh0ZXJuIGludCBzdGFydF9mb3JrX3RyYW1wKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyB0ZW1wX3N0YWNrLAogCQkJICAgIGludCBjbG9uZV9mbGFncywgaW50ICgqdHJhbXApKHZvaWQgKikpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQppbmRleCA2MTRiOGViLi4xYTAwMDFiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgCisjCiAjIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICMKQEAgLTcsMTEgKzcsMTEgQEAKIGNsZWFuLWZpbGVzIDo9CiAKIG9iai15ID0gY29uZmlnLm8gZXhlY19rZXJuLm8gZXhpdGNvZGUubyBcCi0JaGVscGVyLm8gaW5pdF90YXNrLm8gaXJxLm8gaXJxX3VzZXIubyBrc3ltcy5vIG1haW4ubyBtZW0ubyBtZW1fdXNlci5vIFwKLQlwaHlzbWVtLm8gcHJvY2Vzc19rZXJuLm8gcHRyYWNlLm8gcmVib290Lm8gcmVzb3VyY2UubyBzaWdpb191c2VyLm8gXAotCXNpZ2lvX2tlcm4ubyBzaWduYWxfa2Vybi5vIHNpZ25hbF91c2VyLm8gc21wLm8gc3lzY2FsbF9rZXJuLm8gc3lzcnEubyBcCi0JdGVtcGZpbGUubyB0aW1lLm8gdGltZV9rZXJuLm8gdGxiLm8gdHJhcF9rZXJuLm8gdHJhcF91c2VyLm8gXAotCXVhY2Nlc3NfdXNlci5vIHVtX2FyY2gubyB1bWlkLm8gdXNlcl91dGlsLm8KKwloZWxwZXIubyBpbml0X3Rhc2subyBpcnEubyBpcnFfdXNlci5vIGtzeW1zLm8gbWFpbi5vIG1lbS5vIHBoeXNtZW0ubyBcCisJcHJvY2Vzc19rZXJuLm8gcHRyYWNlLm8gcmVib290Lm8gcmVzb3VyY2UubyBzaWdpb191c2VyLm8gc2lnaW9fa2Vybi5vIFwKKwlzaWduYWxfa2Vybi5vIHNpZ25hbF91c2VyLm8gc21wLm8gc3lzY2FsbF9rZXJuLm8gc3lzcnEubyB0aW1lLm8gXAorCXRpbWVfa2Vybi5vIHRsYi5vIHRyYXBfa2Vybi5vIHRyYXBfdXNlci5vIHVhY2Nlc3NfdXNlci5vIHVtX2FyY2gubyBcCisJdW1pZC5vIHVzZXJfdXRpbC5vCiAKIG9iai0kKENPTkZJR19CTEtfREVWX0lOSVRSRCkgKz0gaW5pdHJkLm8KIG9iai0kKENPTkZJR19HUFJPRikJKz0gZ3Byb2Zfc3ltcy5vCkBAIC0yNCw4ICsyNCw4IEBACiAKIHVzZXItb2Jqcy0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KIAotVVNFUl9PQkpTIDo9ICQodXNlci1vYmpzLXkpIGNvbmZpZy5vIGhlbHBlci5vIG1haW4ubyB0ZW1wZmlsZS5vIHRpbWUubyBcCi0JdHR5X2xvZy5vIHVtaWQubyB1c2VyX3V0aWwubworVVNFUl9PQkpTIDo9ICQodXNlci1vYmpzLXkpIGNvbmZpZy5vIGhlbHBlci5vIG1haW4ubyB0aW1lLm8gdHR5X2xvZy5vIHVtaWQubyBcCisJdXNlcl91dGlsLm8KIAogaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaGVscGVyLmMgYi9hcmNoL3VtL2tlcm5lbC9oZWxwZXIuYwppbmRleCBmODNlMWU4Li4zM2ZiMGJkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9oZWxwZXIuYworKysgYi9hcmNoL3VtL2tlcm5lbC9oZWxwZXIuYwpAQCAtODUsOCArODUsOCBAQAogCWRhdGEuZmQgPSBmZHNbMV07CiAJcGlkID0gY2xvbmUoaGVscGVyX2NoaWxkLCAodm9pZCAqKSBzcCwgQ0xPTkVfVk0gfCBTSUdDSExELCAmZGF0YSk7CiAJaWYocGlkIDwgMCl7Ci0JCXByaW50aygicnVuX2hlbHBlciA6IGNsb25lIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlyZXQgPSAtZXJybm87CisJCXByaW50aygicnVuX2hlbHBlciA6IGNsb25lIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkgICAgICB1bnNpZ25lZCBsb25nICpzdGFja19vdXQsIGludCBzdGFja19vcmRlcikKIHsKIAl1bnNpZ25lZCBsb25nIHN0YWNrLCBzcDsKLQlpbnQgcGlkLCBzdGF0dXM7CisJaW50IHBpZCwgc3RhdHVzLCBlcnI7CiAKIAlzdGFjayA9IGFsbG9jX3N0YWNrKHN0YWNrX29yZGVyLCB1bV9pbl9pbnRlcnJ1cHQoKSk7CiAJaWYoc3RhY2sgPT0gMCkgcmV0dXJuKC1FTk9NRU0pOwpAQCAtMTMwLDE2ICsxMzAsMTggQEAKIAlzcCA9IHN0YWNrICsgKHBhZ2Vfc2l6ZSgpIDw8IHN0YWNrX29yZGVyKSAtIHNpemVvZih2b2lkICopOwogCXBpZCA9IGNsb25lKHByb2MsICh2b2lkICopIHNwLCBmbGFncyB8IFNJR0NITEQsIGFyZyk7CiAJaWYocGlkIDwgMCl7CisJCWVyciA9IC1lcnJubzsKIAkJcHJpbnRrKCJydW5faGVscGVyX3RocmVhZCA6IGNsb25lIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgCiAJCSAgICAgICBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gZXJyOwogCX0KIAlpZihzdGFja19vdXQgPT0gTlVMTCl7CiAJCUNBVENIX0VJTlRSKHBpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSk7CiAJCWlmKHBpZCA8IDApeworCQkJZXJyID0gLWVycm5vOwogCQkJcHJpbnRrKCJydW5faGVscGVyX3RocmVhZCAtIHdhaXQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLAogCQkJICAgICAgIGVycm5vKTsKLQkJCXBpZCA9IC1lcnJubzsKKwkJCXBpZCA9IGVycjsKIAkJfQogCQlpZighV0lGRVhJVEVEKHN0YXR1cykgfHwgKFdFWElUU1RBVFVTKHN0YXR1cykgIT0gMCkpCiAJCQlwcmludGsoInJ1bl9oZWxwZXJfdGhyZWFkIC0gdGhyZWFkIHJldHVybmVkIHN0YXR1cyAiCkBAIC0xNTYsOCArMTU4LDggQEAKIAogCUNBVENIX0VJTlRSKHJldCA9IHdhaXRwaWQocGlkLCBOVUxMLCBXTk9IQU5HKSk7CiAJaWYocmV0IDwgMCl7CisJCXJldCA9IC1lcnJubzsKIAkJcHJpbnRrKCJoZWxwZXJfd2FpdCA6IHdhaXRwaWQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwogCX0KIAlyZXR1cm4ocmV0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2luaXRfdGFzay5jIGIvYXJjaC91bS9rZXJuZWwvaW5pdF90YXNrLmMKaW5kZXggY2Q3Yzg1Yi4uNDllZDVkZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaW5pdF90YXNrLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlICJhc20vcGd0YWJsZS5oIgogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgogI2luY2x1ZGUgIm1lbV91c2VyLmgiCisjaW5jbHVkZSAib3MuaCIKIAogc3RhdGljIHN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcyA9IElOSVRfRlM7CiBzdHJ1Y3QgbW1fc3RydWN0IGluaXRfbW0gPSBJTklUX01NKGluaXRfbW0pOwpAQCAtNDUsOCArNDYsOCBAQAogCiB2b2lkIHVucHJvdGVjdF9zdGFjayh1bnNpZ25lZCBsb25nIHN0YWNrKQogewotCXByb3RlY3RfbWVtb3J5KHN0YWNrLCAoMSA8PCBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSAqIFBBR0VfU0laRSwgCi0JCSAgICAgICAxLCAxLCAwLCAxKTsKKwlvc19wcm90ZWN0X21lbW9yeSgodm9pZCAqKSBzdGFjaywgKDEgPDwgQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUikgKiBQQUdFX1NJWkUsCisJCSAgICAgICAxLCAxLCAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL21lbS5jIGIvYXJjaC91bS9rZXJuZWwvbWVtLmMKaW5kZXggNjRmYTA2Mi4uZWEwMDhiMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvbWVtLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvbWVtLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDAzIEplZmYgRGlrZSAoamRpa2VAYWRkdG9pdC5jb20pCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KQEAgLTE5LDYgKzE5LDEwIEBACiAjaW5jbHVkZSAibWVtX3VzZXIuaCIKICNpbmNsdWRlICJ1bWxfdWFjY2Vzcy5oIgogI2luY2x1ZGUgIm9zLmgiCisjaW5jbHVkZSAibGludXgvdHlwZXMuaCIKKyNpbmNsdWRlICJsaW51eC9zdHJpbmcuaCIKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAia2Vybl9jb25zdGFudHMuaCIKIAogZXh0ZXJuIGNoYXIgX19iaW5hcnlfc3RhcnQ7CiAKQEAgLTM2OCw2ICszNzIsMTYgQEAKIAlyZXR1cm4gcHRlOwogfQogCitzdHJ1Y3QgaW9tZW1fcmVnaW9uICppb21lbV9yZWdpb25zID0gTlVMTDsKK2ludCBpb21lbV9zaXplID0gMDsKKworZXh0ZXJuIGludCBwYXJzZV9pb21lbShjaGFyICpzdHIsIGludCAqYWRkKSBfX2luaXQ7CisKK19fdW1sX3NldHVwKCJpb21lbT0iLCBwYXJzZV9pb21lbSwKKyJpb21lbT08bmFtZT4sPGZpbGU+XG4iCisiICAgIENvbmZpZ3VyZSA8ZmlsZT4gYXMgYW4gSU8gbWVtb3J5IHJlZ2lvbiBuYW1lZCA8bmFtZT4uXG5cbiIKKyk7CisKIC8qCiAgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KICAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvbWVtX3VzZXIuYyBiL2FyY2gvdW0va2VybmVsL21lbV91c2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNjYzZmQuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9rZXJuZWwvbWVtX3VzZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0vKgotICogYXJjaC91bS9rZXJuZWwvbWVtX3VzZXIuYwotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICogdXNlciBzaWRlIG1lbW9yeSByb3V0aW5lcyBmb3Igc3VwcG9ydGluZyBJTyBtZW1vcnkgaW5zaWRlIHVzZXIgbW9kZSBsaW51eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgotICogQXV0aG9yOiBSaWRnZVJ1biwgSW5jLgotICogICAgICAgICBHcmVnIExvbm5vbiBnbG9ubm9uQHJpZGdlcnVuLmNvbSBvciBpbmZvQHJpZGdlcnVuLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlICJrZXJuX3V0aWwuaCIKLSNpbmNsdWRlICJ1c2VyLmgiCi0jaW5jbHVkZSAidXNlcl91dGlsLmgiCi0jaW5jbHVkZSAibWVtX3VzZXIuaCIKLSNpbmNsdWRlICJpbml0LmgiCi0jaW5jbHVkZSAib3MuaCIKLSNpbmNsdWRlICJ0ZW1wZmlsZS5oIgotI2luY2x1ZGUgImtlcm5fY29uc3RhbnRzLmgiCi0KLSNkZWZpbmUgVEVNUE5BTUVfVEVNUExBVEUgInZtX2ZpbGUtWFhYWFhYIgotCi1zdGF0aWMgaW50IGNyZWF0ZV90bXBfZmlsZSh1bnNpZ25lZCBsb25nIGxlbikKLXsKLQlpbnQgZmQsIGVycjsKLQljaGFyIHplcm87Ci0KLQlmZCA9IG1ha2VfdGVtcGZpbGUoVEVNUE5BTUVfVEVNUExBVEUsIE5VTEwsIDEpOwotCWlmKGZkIDwgMCkgewotCQlvc19wcmludF9lcnJvcihmZCwgIm1ha2VfdGVtcGZpbGUiKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQllcnIgPSBvc19tb2RlX2ZkKGZkLCAwNzc3KTsKLQlpZihlcnIgPCAwKXsKLQkJb3NfcHJpbnRfZXJyb3IoZXJyLCAib3NfbW9kZV9mZCIpOwotCQlleGl0KDEpOwotCX0KLQllcnIgPSBvc19zZWVrX2ZpbGUoZmQsIGxlbik7Ci0JaWYoZXJyIDwgMCl7Ci0JCW9zX3ByaW50X2Vycm9yKGVyciwgIm9zX3NlZWtfZmlsZSIpOwotCQlleGl0KDEpOwotCX0KLQl6ZXJvID0gMDsKLQllcnIgPSBvc193cml0ZV9maWxlKGZkLCAmemVybywgMSk7Ci0JaWYoZXJyICE9IDEpewotCQlvc19wcmludF9lcnJvcihlcnIsICJvc193cml0ZV9maWxlIik7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JcmV0dXJuKGZkKTsKLX0KLQotdm9pZCBjaGVja190bXBleGVjKHZvaWQpCi17Ci0Jdm9pZCAqYWRkcjsKLQlpbnQgZXJyLCBmZCA9IGNyZWF0ZV90bXBfZmlsZShVTV9LRVJOX1BBR0VfU0laRSk7Ci0KLQlhZGRyID0gbW1hcChOVUxMLCBVTV9LRVJOX1BBR0VfU0laRSwKLQkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsIE1BUF9QUklWQVRFLCBmZCwgMCk7Ci0JcHJpbnRmKCJDaGVja2luZyBQUk9UX0VYRUMgbW1hcCBpbiAvdG1wLi4uIik7Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JaWYoYWRkciA9PSBNQVBfRkFJTEVEKXsKLQkJZXJyID0gZXJybm87Ci0JCXBlcnJvcigiZmFpbGVkIik7Ci0JCWlmKGVyciA9PSBFUEVSTSkKLQkJCXByaW50ZigiL3RtcCBtdXN0IGJlIG5vdCBtb3VudGVkIG5vZXhlY1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQotCXByaW50ZigiT0tcbiIpOwotCW11bm1hcChhZGRyLCBVTV9LRVJOX1BBR0VfU0laRSk7Ci0KLQlvc19jbG9zZV9maWxlKGZkKTsKLX0KLQotc3RhdGljIGludCBoYXZlX2RldmFub24gPSAwOwotCi12b2lkIGNoZWNrX2RldmFub24odm9pZCkKLXsKLQlpbnQgZmQ7Ci0KLQlwcmludGsoIkNoZWNraW5nIGZvciAvZGV2L2Fub24gb24gdGhlIGhvc3QuLi4iKTsKLQlmZCA9IG9wZW4oIi9kZXYvYW5vbiIsIE9fUkRXUik7Ci0JaWYoZmQgPCAwKXsKLQkJcHJpbnRrKCJOb3QgYXZhaWxhYmxlIChvcGVuIGZhaWxlZCB3aXRoIGVycm5vICVkKVxuIiwgZXJybm8pOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpbnRrKCJPS1xuIik7Ci0JaGF2ZV9kZXZhbm9uID0gMTsKLX0KLQotc3RhdGljIGludCBjcmVhdGVfYW5vbl9maWxlKHVuc2lnbmVkIGxvbmcgbGVuKQotewotCXZvaWQgKmFkZHI7Ci0JaW50IGZkOwotCi0JZmQgPSBvcGVuKCIvZGV2L2Fub24iLCBPX1JEV1IpOwotCWlmKGZkIDwgMCkgewotCQlvc19wcmludF9lcnJvcihmZCwgIm9wZW5pbmcgL2Rldi9hbm9uIik7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JYWRkciA9IG1tYXAoTlVMTCwgbGVuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApOwotCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7Ci0JCXBlcnJvcigibWFwcGluZyBwaHlzbWVtIGZpbGUiKTsKLQkJZXhpdCgxKTsKLQl9Ci0JbXVubWFwKGFkZHIsIGxlbik7Ci0KLQlyZXR1cm4oZmQpOwotfQotCi1pbnQgY3JlYXRlX21lbV9maWxlKHVuc2lnbmVkIGxvbmcgbGVuKQotewotCWludCBlcnIsIGZkOwotCi0JaWYoaGF2ZV9kZXZhbm9uKQotCQlmZCA9IGNyZWF0ZV9hbm9uX2ZpbGUobGVuKTsKLQllbHNlIGZkID0gY3JlYXRlX3RtcF9maWxlKGxlbik7Ci0KLQllcnIgPSBvc19zZXRfZXhlY19jbG9zZShmZCwgMSk7Ci0JaWYoZXJyIDwgMCkKLQkJb3NfcHJpbnRfZXJyb3IoZXJyLCAiZXhlY19jbG9zZSIpOwotCXJldHVybihmZCk7Ci19Ci0KLXN0cnVjdCBpb21lbV9yZWdpb24gKmlvbWVtX3JlZ2lvbnMgPSBOVUxMOwotaW50IGlvbWVtX3NpemUgPSAwOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9pb21lbShjaGFyICpzdHIsIGludCAqYWRkKQotewotCXN0cnVjdCBpb21lbV9yZWdpb24gKm5ldzsKLQlzdHJ1Y3QgdW1sX3N0YXQgYnVmOwotCWNoYXIgKmZpbGUsICpkcml2ZXI7Ci0JaW50IGZkLCBlcnIsIHNpemU7Ci0KLQlkcml2ZXIgPSBzdHI7Ci0JZmlsZSA9IHN0cmNocihzdHIsJywnKTsKLQlpZihmaWxlID09IE5VTEwpewotCQlwcmludGYoInBhcnNlX2lvbWVtIDogZmFpbGVkIHRvIHBhcnNlIGlvbWVtXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCSpmaWxlID0gJ1wwJzsKLQlmaWxlKys7Ci0JZmQgPSBvc19vcGVuX2ZpbGUoZmlsZSwgb2ZfcmR3cihPUEVORkxBR1MoKSksIDApOwotCWlmKGZkIDwgMCl7Ci0JCW9zX3ByaW50X2Vycm9yKGZkLCAicGFyc2VfaW9tZW0gLSBDb3VsZG4ndCBvcGVuIGlvIGZpbGUiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gb3Nfc3RhdF9mZChmZCwgJmJ1Zik7Ci0JaWYoZXJyIDwgMCl7Ci0JCW9zX3ByaW50X2Vycm9yKGVyciwgInBhcnNlX2lvbWVtIC0gY2Fubm90IHN0YXRfZmQgZmlsZSIpOwotCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KLQluZXcgPSBtYWxsb2Moc2l6ZW9mKCpuZXcpKTsKLQlpZihuZXcgPT0gTlVMTCl7Ci0JCXBlcnJvcigiQ291bGRuJ3QgYWxsb2NhdGUgaW9tZW1fcmVnaW9uIHN0cnVjdCIpOwotCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KLQlzaXplID0gKGJ1Zi51c3Rfc2l6ZSArIFVNX0tFUk5fUEFHRV9TSVpFKSAmIH4oVU1fS0VSTl9QQUdFX1NJWkUgLSAxKTsKLQotCSpuZXcgPSAoKHN0cnVjdCBpb21lbV9yZWdpb24pIHsgLm5leHQJCT0gaW9tZW1fcmVnaW9ucywKLQkJCQkJLmRyaXZlcgkJPSBkcml2ZXIsCi0JCQkJCS5mZAkJPSBmZCwKLQkJCQkJLnNpemUJCT0gc2l6ZSwKLQkJCQkJLnBoeXMJCT0gMCwKLQkJCQkJLnZpcnQJCT0gMCB9KTsKLQlpb21lbV9yZWdpb25zID0gbmV3OwotCWlvbWVtX3NpemUgKz0gbmV3LT5zaXplICsgVU1fS0VSTl9QQUdFX1NJWkU7Ci0KLQlyZXR1cm4oMCk7Ci0gb3V0X2Nsb3NlOgotCW9zX2Nsb3NlX2ZpbGUoZmQpOwotIG91dDoKLQlyZXR1cm4oMSk7Ci19Ci0KLV9fdW1sX3NldHVwKCJpb21lbT0iLCBwYXJzZV9pb21lbSwKLSJpb21lbT08bmFtZT4sPGZpbGU+XG4iCi0iICAgIENvbmZpZ3VyZSA8ZmlsZT4gYXMgYW4gSU8gbWVtb3J5IHJlZ2lvbiBuYW1lZCA8bmFtZT4uXG5cbiIKLSk7Ci0KLWludCBwcm90ZWN0X21lbW9yeSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgciwgaW50IHcsIGludCB4LAotCQkgICBpbnQgbXVzdF9zdWNjZWVkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBvc19wcm90ZWN0X21lbW9yeSgodm9pZCAqKSBhZGRyLCBsZW4sIHIsIHcsIHgpOwotCWlmKGVyciA8IDApewotICAgICAgICAgICAgICAgIGlmKG11c3Rfc3VjY2VlZCkKLQkJCXBhbmljKCJwcm90ZWN0IGZhaWxlZCwgZXJyID0gJWQiLCAtZXJyKTsKLQkJZWxzZSByZXR1cm4oZXJyKTsKLQl9Ci0JcmV0dXJuKDApOwotfQotCi0jaWYgMAotLyogRGVidWdnaW5nIGZhY2lsaXR5IGZvciBkdW1waW5nIHN0dWZmIG91dCB0byB0aGUgaG9zdCwgYXZvaWRpbmcgdGhlIHRpbWluZwotICogcHJvYmxlbXMgdGhhdCBjb21lIHdpdGggcHJpbnRmIGFuZCBicmVha3BvaW50cy4KLSAqIEVuYWJsZSBpbiBjYXNlIG9mIGVtZXJnZW5jeS4KLSAqLwotCi1pbnQgbG9nZ2luZyA9IDE7Ci1pbnQgbG9nZ2luZ19mZCA9IC0xOwotCi1pbnQgbG9nZ2luZ19saW5lID0gMDsKLWNoYXIgbG9nZ2luZ19idWZbNTEyXTsKLQotdm9pZCBsb2coY2hhciAqZm10LCAuLi4pCi17Ci0gICAgICAgIHZhX2xpc3QgYXA7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgICAgICBzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzOwotCi0gICAgICAgIGlmKGxvZ2dpbmcgPT0gMCkgcmV0dXJuOwotICAgICAgICBpZihsb2dnaW5nX2ZkIDwgMCl7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgPSBvZl9jcmVhdGUob2ZfdHJ1bmMob2ZfcmR3cihPUEVORkxBR1MoKSkpKTsKLSAgICAgICAgICAgICAgICBsb2dnaW5nX2ZkID0gb3Nfb3Blbl9maWxlKCJsb2ciLCBmbGFncywgMDY0NCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0gICAgICAgIHNwcmludGYobG9nZ2luZ19idWYsICIlZFx0ICV1LiV1ICAiLCBsb2dnaW5nX2xpbmUrKywgdHYudHZfc2VjLAotICAgICAgICAgICAgICAgIHR2LnR2X3VzZWMpOwotICAgICAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICAgICAgdnNwcmludGYoJmxvZ2dpbmdfYnVmW3N0cmxlbihsb2dnaW5nX2J1ZildLCBmbXQsIGFwKTsKLSAgICAgICAgdmFfZW5kKGFwKTsKLSAgICAgICAgd3JpdGUobG9nZ2luZ19mZCwgbG9nZ2luZ19idWYsIHN0cmxlbihsb2dnaW5nX2J1ZikpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3Nfa2Vybi5jCmluZGV4IGMyM2Q4YTAuLjM5Y2Y1NjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3Nfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3Nfa2Vybi5jCkBAIC0xMTMsOCArMTEzLDIzIEBACiAKIHZvaWQgKl9zd2l0Y2hfdG8odm9pZCAqcHJldiwgdm9pZCAqbmV4dCwgdm9pZCAqbGFzdCkKIHsKLQlyZXR1cm4oQ0hPT1NFX01PREUoc3dpdGNoX3RvX3R0KHByZXYsIG5leHQpLCAKLQkJCSAgIHN3aXRjaF90b19za2FzKHByZXYsIG5leHQpKSk7CisgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSA9IHByZXY7CisgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG89IG5leHQ7CisKKyAgICAgICAgdG8tPnRocmVhZC5wcmV2X3NjaGVkID0gZnJvbTsKKyAgICAgICAgc2V0X2N1cnJlbnQodG8pOworCisJZG8geworCQljdXJyZW50LT50aHJlYWQuc2F2ZWRfdGFzayA9IE5VTEwgOworCQlDSE9PU0VfTU9ERV9QUk9DKHN3aXRjaF90b190dCwgc3dpdGNoX3RvX3NrYXMsIHByZXYsIG5leHQpOworCQlpZihjdXJyZW50LT50aHJlYWQuc2F2ZWRfdGFzaykKKwkJCXNob3dfcmVncygmKGN1cnJlbnQtPnRocmVhZC5yZWdzKSk7CisJCW5leHQ9IGN1cnJlbnQtPnRocmVhZC5zYXZlZF90YXNrOworCQlwcmV2PSBjdXJyZW50OworCX0gd2hpbGUoY3VycmVudC0+dGhyZWFkLnNhdmVkX3Rhc2spOworCisgICAgICAgIHJldHVybihjdXJyZW50LT50aHJlYWQucHJldl9zY2hlZCk7CisKIH0KIAogdm9pZCBpbnRlcnJ1cHRfZW5kKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvbW9kZV9rZXJuLXNrYXMuaCBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tb2RlX2tlcm4tc2thcy5oCmluZGV4IGU0ODQ5MDAuLmM5N2E4MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tb2RlX2tlcm4tc2thcy5oCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tb2RlX2tlcm4tc2thcy5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSAiYXNtL3B0cmFjZS5oIgogCiBleHRlcm4gdm9pZCBmbHVzaF90aHJlYWRfc2thcyh2b2lkKTsKLWV4dGVybiB2b2lkICpzd2l0Y2hfdG9fc2thcyh2b2lkICpwcmV2LCB2b2lkICpuZXh0KTsKK2V4dGVybiB2b2lkIHN3aXRjaF90b19za2FzKHZvaWQgKnByZXYsIHZvaWQgKm5leHQpOwogZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkX3NrYXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZWlwLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBlc3ApOwogZXh0ZXJuIGludCBjb3B5X3RocmVhZF9za2FzKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS91YWNjZXNzLXNrYXMuaCBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS91YWNjZXNzLXNrYXMuaAppbmRleCA2ZWUzZjM5Li43ZGEwYzJkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvdWFjY2Vzcy1za2FzLmgKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3VhY2Nlc3Mtc2thcy5oCkBAIC0xOCwxMiArMTgsNiBAQAogCSAgKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkgPD0gRklYQUREUl9VU0VSX0VORCkgJiYgXAogCSAgKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkgPj0gKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSkpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9hcmVhX3NrYXMoaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybihhY2Nlc3Nfb2tfc2thcyh0eXBlLCBhZGRyLCBzaXplKSA/IDAgOiAtRUZBVUxUKTsKLX0KLQogZXh0ZXJuIGludCBjb3B5X2Zyb21fdXNlcl9za2FzKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgaW50IG4pOwogZXh0ZXJuIGludCBjb3B5X3RvX3VzZXJfc2thcyh2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIGludCBuKTsKIGV4dGVybiBpbnQgc3RybmNweV9mcm9tX3VzZXJfc2thcyhjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGludCBjb3VudCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzX2tlcm4uYwppbmRleCAzZDFiMjI3Li5lZmU5MmU4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzc19rZXJuLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJwcm9jX21tLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCiAKLXZvaWQgKnN3aXRjaF90b19za2FzKHZvaWQgKnByZXYsIHZvaWQgKm5leHQpCit2b2lkIHN3aXRjaF90b19za2FzKHZvaWQgKnByZXYsIHZvaWQgKm5leHQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCAqdG87CiAKQEAgLTM1LDE2ICszNSwxMSBAQAogCWlmKGN1cnJlbnQtPnBpZCA9PSAwKQogCQlzd2l0Y2hfdGltZXJzKDApOwogCi0JdG8tPnRocmVhZC5wcmV2X3NjaGVkID0gZnJvbTsKLQlzZXRfY3VycmVudCh0byk7Ci0KIAlzd2l0Y2hfdGhyZWFkcygmZnJvbS0+dGhyZWFkLm1vZGUuc2thcy5zd2l0Y2hfYnVmLCAKIAkJICAgICAgIHRvLT50aHJlYWQubW9kZS5za2FzLnN3aXRjaF9idWYpOwogCiAJaWYoY3VycmVudC0+cGlkID09IDApCiAJCXN3aXRjaF90aW1lcnMoMSk7Ci0KLQlyZXR1cm4oY3VycmVudC0+dGhyZWFkLnByZXZfc2NoZWQpOwogfQogCiBleHRlcm4gdm9pZCBzY2hlZHVsZV90YWlsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldik7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90ZW1wZmlsZS5jIGIvYXJjaC91bS9rZXJuZWwvdGVtcGZpbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE2NzRiYy4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2tlcm5lbC90ZW1wZmlsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlICJpbml0LmgiCi0KLS8qIE1vZGlmaWVkIGZyb20gY3JlYXRlX21lbV9maWxlIGFuZCBzdGFydF9kZWJ1Z2dlciAqLwotc3RhdGljIGNoYXIgKnRlbXBkaXIgPSBOVUxMOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZmluZF90ZW1wZGlyKHZvaWQpCi17Ci0JY2hhciAqZGlyc1tdID0geyAiVE1QIiwgIlRFTVAiLCAiVE1QRElSIiwgTlVMTCB9OwotCWludCBpOwotCWNoYXIgKmRpciA9IE5VTEw7Ci0KLQlpZih0ZW1wZGlyICE9IE5VTEwpIHJldHVybjsJLyogV2UndmUgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwotCWZvcihpID0gMDsgZGlyc1tpXTsgaSsrKXsKLQkJZGlyID0gZ2V0ZW52KGRpcnNbaV0pOwotCQlpZigoZGlyICE9IE5VTEwpICYmICgqZGlyICE9ICdcMCcpKQotCQkJYnJlYWs7Ci0JfQotCWlmKChkaXIgPT0gTlVMTCkgfHwgKCpkaXIgPT0gJ1wwJykpIAotCQlkaXIgPSAiL3RtcCI7Ci0KLQl0ZW1wZGlyID0gbWFsbG9jKHN0cmxlbihkaXIpICsgMik7Ci0JaWYodGVtcGRpciA9PSBOVUxMKXsKLQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbWFsbG9jIHRlbXBkaXIsICIKLQkJCSJlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybjsKLQl9Ci0Jc3RyY3B5KHRlbXBkaXIsIGRpcik7Ci0Jc3RyY2F0KHRlbXBkaXIsICIvIik7Ci19Ci0KLWludCBtYWtlX3RlbXBmaWxlKGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBjaGFyICoqb3V0X3RlbXBuYW1lLCBpbnQgZG9fdW5saW5rKQotewotCWNoYXIgdGVtcG5hbWVbTUFYUEFUSExFTl07Ci0JaW50IGZkOwotCi0JZmluZF90ZW1wZGlyKCk7Ci0JaWYgKCp0ZW1wbGF0ZSAhPSAnLycpCi0JCXN0cmNweSh0ZW1wbmFtZSwgdGVtcGRpcik7Ci0JZWxzZQotCQkqdGVtcG5hbWUgPSAwOwotCXN0cmNhdCh0ZW1wbmFtZSwgdGVtcGxhdGUpOwotCWZkID0gbWtzdGVtcCh0ZW1wbmFtZSk7Ci0JaWYoZmQgPCAwKXsKLQkJZnByaW50ZihzdGRlcnIsICJvcGVuIC0gY2Fubm90IGNyZWF0ZSAlczogJXNcbiIsIHRlbXBuYW1lLCAKLQkJCXN0cmVycm9yKGVycm5vKSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYoZG9fdW5saW5rICYmICh1bmxpbmsodGVtcG5hbWUpIDwgMCkpewotCQlwZXJyb3IoInVubGluayIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmKG91dF90ZW1wbmFtZSl7Ci0JCSpvdXRfdGVtcG5hbWUgPSBzdHJkdXAodGVtcG5hbWUpOwotCQlpZigqb3V0X3RlbXBuYW1lID09IE5VTEwpewotCQkJcGVycm9yKCJzdHJkdXAiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQlyZXR1cm4oZmQpOwotfQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdGxiLmMgYi9hcmNoL3VtL2tlcm5lbC90bGIuYwppbmRleCA4MGVkNjE4Li4wYTU2MmMzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90bGIuYworKysgYi9hcmNoL3VtL2tlcm5lbC90bGIuYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYocHRlX25ld3Byb3QoKnB0ZSkpewogICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0X21lbW9yeShhZGRyLCBQQUdFX1NJWkUsIDEsIDEsIDEsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgb3NfcHJvdGVjdF9tZW1vcnkoKHZvaWQgKikgYWRkciwgUEFHRV9TSVpFLCAxLCAxLCAxKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYWRkciArPSBQQUdFX1NJWkU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvbW9kZV9rZXJuLXR0LmggYi9hcmNoL3VtL2tlcm5lbC90dC9pbmNsdWRlL21vZGVfa2Vybi10dC5oCmluZGV4IGUwY2EwZTAuLjJhMzViMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvbW9kZV9rZXJuLXR0LmgKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS9tb2RlX2tlcm4tdHQuaApAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgImFzbS9wdHJhY2UuaCIKICNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgogCi1leHRlcm4gdm9pZCAqc3dpdGNoX3RvX3R0KHZvaWQgKnByZXYsIHZvaWQgKm5leHQpOworZXh0ZXJuIHZvaWQgc3dpdGNoX3RvX3R0KHZvaWQgKnByZXYsIHZvaWQgKm5leHQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGhyZWFkX3R0KHZvaWQpOwogZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkX3R0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVpcCwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgZXNwKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oIGIvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS91YWNjZXNzLXR0LmgKaW5kZXggYWE2ZGIzOC4uZGMyZWJmYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS91YWNjZXNzLXR0LmgKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS91YWNjZXNzLXR0LmgKQEAgLTMzLDEyICszMyw2IEBACiAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgPD0gKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkpKSAmJiBcCiAgICAgICAgICAgKHVuZGVyX3Rhc2tfc2l6ZShhZGRyLCBzaXplKSB8fCBpc19zdGFjayhhZGRyLCBzaXplKSkpKQogCi1zdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfYXJlYV90dChpbnQgdHlwZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybihhY2Nlc3Nfb2tfdHQodHlwZSwgYWRkciwgc2l6ZSkgPyAwIDogLUVGQVVMVCk7Ci19Ci0KIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mYXVsdF9hZGRyKHZvaWQpOwogCiBleHRlcm4gaW50IF9fZG9fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIGludCBuLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdHQvbWVtX3VzZXIuYyBiL2FyY2gvdW0va2VybmVsL3R0L21lbV91c2VyLmMKaW5kZXggMzA4NTI2Ny4uMDNlNTg5OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvbWVtX3VzZXIuYworKysgYi9hcmNoL3VtL2tlcm5lbC90dC9tZW1fdXNlci5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAidHQuaCIKICNpbmNsdWRlICJtZW1fdXNlci5oIgogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgorI2luY2x1ZGUgIm9zLmgiCiAKIHZvaWQgcmVtYXBfZGF0YSh2b2lkICpzZWdtZW50X3N0YXJ0LCB2b2lkICpzZWdtZW50X2VuZCwgaW50IHcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC9wcm9jZXNzX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3R0L3Byb2Nlc3Nfa2Vybi5jCmluZGV4IGExODlhMmIuLmNmYWEzNzNhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90dC9wcm9jZXNzX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC90dC9wcm9jZXNzX2tlcm4uYwpAQCAtMjMsMTAgKzIzLDExIEBACiAjaW5jbHVkZSAibWVtX3VzZXIuaCIKICNpbmNsdWRlICJ0bGIuaCIKICNpbmNsdWRlICJtb2RlLmgiCisjaW5jbHVkZSAibW9kZV9rZXJuLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgInR0LmgiCiAKLXZvaWQgKnN3aXRjaF90b190dCh2b2lkICpwcmV2LCB2b2lkICpuZXh0LCB2b2lkICpsYXN0KQordm9pZCBzd2l0Y2hfdG9fdHQodm9pZCAqcHJldiwgdm9pZCAqbmV4dCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sICp0bywgKnByZXZfc2NoZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM2LDggKzM3LDYgQEAKIAlmcm9tID0gcHJldjsKIAl0byA9IG5leHQ7CiAKLQl0by0+dGhyZWFkLnByZXZfc2NoZWQgPSBmcm9tOwotCiAJY3B1ID0gZnJvbS0+dGhyZWFkX2luZm8tPmNwdTsKIAlpZihjcHUgPT0gMCkKIAkJZm9yd2FyZF9pbnRlcnJ1cHRzKHRvLT50aHJlYWQubW9kZS50dC5leHRlcm5fcGlkKTsKQEAgLTUzLDcgKzUyLDYgQEAKIAlmb3J3YXJkX3BlbmRpbmdfc2lnaW8odG8tPnRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOwogCiAJYyA9IDA7Ci0Jc2V0X2N1cnJlbnQodG8pOwogCiAJZXJyID0gb3Nfd3JpdGVfZmlsZSh0by0+dGhyZWFkLm1vZGUudHQuc3dpdGNoX3BpcGVbMV0sICZjLCBzaXplb2YoYykpOwogCWlmKGVyciAhPSBzaXplb2YoYykpCkBAIC04NSw4ICs4Myw2IEBACiAKIAlmbHVzaF90bGJfYWxsKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuKGN1cnJlbnQtPnRocmVhZC5wcmV2X3NjaGVkKTsKIH0KIAogdm9pZCByZWxlYXNlX3RocmVhZF90dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMgYi9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMKaW5kZXggMDlmNmY3Yy4uZjBhMjc1OSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYwpAQCAtMzYxLDExICszNjEsNiBAQAogCXVtbF9zdGFydCA9IENIT09TRV9NT0RFX1BST0Moc2V0X3Rhc2tfc2l6ZXNfdHQsIHNldF90YXNrX3NpemVzX3NrYXMsIDAsCiAJCQkJICAgICAmaG9zdF90YXNrX3NpemUsICZ0YXNrX3NpemUpOwogCi0JLyogTmVlZCB0byBjaGVjayB0aGlzIGVhcmx5IGJlY2F1c2UgbW1hcHBpbmcgaGFwcGVucyBiZWZvcmUgdGhlCi0JICoga2VybmVsIGlzIHJ1bm5pbmcuCi0JICovCi0JY2hlY2tfdG1wZXhlYygpOwotCiAJYnJrX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIHNicmsoMCk7CiAJQ0hPT1NFX01PREVfUFJPQyhiZWZvcmVfbWVtX3R0LCBiZWZvcmVfbWVtX3NrYXMsIGJya19zdGFydCk7CiAJLyogSW5jcmVhc2UgcGh5c2ljYWwgbWVtb3J5IHNpemUgZm9yIGV4ZWMtc2hpZWxkIHVzZXJzCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC91c2VyX3V0aWwuYyBiL2FyY2gvdW0va2VybmVsL3VzZXJfdXRpbC5jCmluZGV4IDk1NGZmNjcuLjQxZDE3YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3VzZXJfdXRpbC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3VzZXJfdXRpbC5jCkBAIC0xMDksMTggKzEwOSwxNCBAQAogCWludCBlcnI7CiAKIAlDQVRDSF9FSU5UUihlcnIgPSB0Y2dldGF0dHIoZmQsICZ0dCkpOwotCWlmIChlcnIgPCAwKSB7Ci0JCQlwcmludGsoInRjZ2V0YXR0ciBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CiAKIAljZm1ha2VyYXcoJnR0KTsKIAogIAlDQVRDSF9FSU5UUihlcnIgPSB0Y3NldGF0dHIoZmQsIFRDU0FEUkFJTiwgJnR0KSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJCXByaW50aygidGNzZXRhdHRyIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJaWYoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKIAogCS8qIFhYWCB0Y3NldGF0dHIgY291bGQgaGF2ZSBhcHBsaWVkIG9ubHkgc29tZSBjaGFuZ2VzCiAJICogKGFuZCBjZm1ha2VyYXcoKSBpcyBhIHNldCBvZiBjaGFuZ2VzKSAqLwpAQCAtMTMyLDYgKzEyOCwxMiBAQAogCXN0cnVjdCB1dHNuYW1lIGhvc3Q7CiAKIAl1bmFtZSgmaG9zdCk7CisjaWYgZGVmaW5lZChVTUxfQ09ORklHX1VNTF9YODYpICYmICFkZWZpbmVkKFVNTF9DT05GSUdfNjRCSVQpCisJaWYgKCFzdHJjbXAoaG9zdC5tYWNoaW5lLCAieDg2XzY0IikpIHsKKwkJc3RyY3B5KG1hY2hpbmVfb3V0LCAiaTY4NiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCiAJc3RyY3B5KG1hY2hpbmVfb3V0LCBob3N0Lm1hY2hpbmUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlIGIvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQppbmRleCA3YTE2NjI0Li5kMTVlYzJhIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKQEAgLTMsMTEgKzMsMTEgQEAKICMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogIwogCi1vYmoteSA9IGFpby5vIGVsZl9hdXgubyBmaWxlLm8gcHJvY2Vzcy5vIHNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHR0Lm8gXAotCXR0eS5vIHVzZXJfc3ltcy5vIGRyaXZlcnMvIHN5cy0kKFNVQkFSQ0gpLworb2JqLXkgPSBhaW8ubyBlbGZfYXV4Lm8gZmlsZS5vIG1lbS5vIHByb2Nlc3MubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyBcCisJdHQubyB0dHkubyB1c2VyX3N5bXMubyBkcml2ZXJzLyBzeXMtJChTVUJBUkNIKS8KIAotVVNFUl9PQkpTIDo9IGFpby5vIGVsZl9hdXgubyBmaWxlLm8gcHJvY2Vzcy5vIHNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHR0Lm8gXAotCXR0eS5vCitVU0VSX09CSlMgOj0gYWlvLm8gZWxmX2F1eC5vIGZpbGUubyBtZW0ubyBwcm9jZXNzLm8gc2lnbmFsLm8gc3RhcnRfdXAubyBcCisJdGltZS5vIHR0Lm8gdHR5Lm8KIAogZWxmX2F1eC5vOiAkKEFSQ0hfRElSKS9rZXJuZWwtb2Zmc2V0cy5oCiBDRkxBR1NfZWxmX2F1eC5vICs9IC1JJChvYmp0cmVlKS9hcmNoL3VtCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2Fpby5jIGIvYXJjaC91bS9vcy1MaW51eC9haW8uYwppbmRleCBiMDQ4OTdjLi5mNmU2NDAyIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2Fpby5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvYWlvLmMKQEAgLTExNyw2ICsxMTcsOCBAQAogICAgICAgICBlcnIgPSBpb19zdWJtaXQoY3R4LCAxLCAmaW9jYnApOwogICAgICAgICBpZihlcnIgPiAwKQogICAgICAgICAgICAgICAgIGVyciA9IDA7CisJZWxzZQorCQllcnIgPSAtZXJybm87CiAKICBvdXQ6CiAgICAgICAgIHJldHVybiBlcnI7CkBAIC0xNDIsNyArMTQ0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJybm8gPSAlZFxuIiwgZXJybm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLQkJCWFpbyA9IChzdHJ1Y3QgYWlvX2NvbnRleHQgKikgZXZlbnQuZGF0YTsKKwkJCS8qIFRoaXMgaXMgc2FmZSBhcyB3ZSd2ZSBqdXN0IGEgcG9pbnRlciBoZXJlLiAqLworCQkJYWlvID0gKHN0cnVjdCBhaW9fY29udGV4dCAqKSAobG9uZykgZXZlbnQuZGF0YTsKIAkJCWlmKHVwZGF0ZV9haW8oYWlvLCBldmVudC5yZXMpKXsKIAkJCQlkb19haW8oY3R4LCBhaW8pOwogCQkJCWNvbnRpbnVlOwpAQCAtMzEzLDE1ICszMTYsMTYgQEAKICAgICAgICAgaW50IGVycjsKIAogICAgICAgICBpZihpb19zZXR1cCgyNTYsICZjdHgpKXsKKwkJZXJyID0gLWVycm5vOwogICAgICAgICAgICAgICAgIHByaW50aygiYWlvX3RocmVhZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb250ZXh0LCBlcnIgPSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8pOwotICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogCiAgICAgICAgIGVyciA9IHJ1bl9oZWxwZXJfdGhyZWFkKGFpb190aHJlYWQsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMT05FX0ZJTEVTIHwgQ0xPTkVfVk0gfCBTSUdDSExELCAmc3RhY2ssIDApOwogICAgICAgICBpZihlcnIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKIAogICAgICAgICBhaW9fcGlkID0gZXJyOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwX3VzZXIuYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCmluZGV4IDRiODNjNmMuLjRiYTliMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCkBAIC03NSw3ICs3NSw3IEBACiAJc3RydWN0IG1zZ2hkciBtc2c7CiAJc3RydWN0IGNtc2doZHIgKmNtc2c7CiAJc3RydWN0IGlvdmVjIGlvdjsKLQlpbnQgcGlkLCBuOworCWludCBwaWQsIG4sIGVycjsKIAogCXNwcmludGYodmVyc2lvbl9idWYsICIlZCIsIFVNTF9ORVRfVkVSU0lPTik7CiAKQEAgLTEwNSw5ICsxMDUsMTAgQEAKIAluID0gcmVjdm1zZyhtZSwgJm1zZywgMCk7CiAJKnVzZWRfb3V0ID0gbjsKIAlpZihuIDwgMCl7CisJCWVyciA9IC1lcnJubzsKIAkJcHJpbnRrKCJ0dW50YXBfb3Blbl90cmFtcCA6IHJlY3Ztc2cgZmFpbGVkIC0gZXJybm8gPSAlZFxuIiwgCiAJCSAgICAgICBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gZXJyOwogCX0KIAlDQVRDSF9FSU5UUih3YWl0cGlkKHBpZCwgTlVMTCwgMCkpOwogCkBAIC0xNDcsOSArMTQ4LDEwIEBACiAJCWlmci5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJOwogCQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgcHJpLT5kZXZfbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwogCQlpZihpb2N0bChwcmktPmZkLCBUVU5TRVRJRkYsICh2b2lkICopICZpZnIpIDwgMCl7CisJCQllcnIgPSAtZXJybm87CiAJCQlwcmludGsoIlRVTlNFVElGRiBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJCW9zX2Nsb3NlX2ZpbGUocHJpLT5mZCk7Ci0JCQlyZXR1cm4oLWVycm5vKTsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2VsZl9hdXguYyBiL2FyY2gvdW0vb3MtTGludXgvZWxmX2F1eC5jCmluZGV4IDEzOTk1MjAuLmFiMzNjYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZWxmX2F1eC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZWxmX2F1eC5jCkBAIC0xNCw3ICsxNCw4IEBACiAjaW5jbHVkZSAibWVtX3VzZXIuaCIKICNpbmNsdWRlIDxrZXJuZWwtb2Zmc2V0cy5oPgogCi0jaWYgSE9TVF9FTEZfQ0xBU1MgPT0gRUxGQ0xBU1MzMgorLyogVXNlIHRoZSBvbmUgZnJvbSB0aGUga2VybmVsIC0gdGhlIGhvc3QgbWF5IG1pc3MgaXQsIGlmIGhhdmluZyBvbGQgaGVhZGVycy4gKi8KKyNpZiBVTV9FTEZfQ0xBU1MgPT0gVU1fRUxGQ0xBU1MzMgogdHlwZWRlZiBFbGYzMl9hdXh2X3QgZWxmX2F1eHZfdDsKICNlbHNlCiB0eXBlZGVmIEVsZjY0X2F1eHZfdCBlbGZfYXV4dl90OwpAQCAtNTQsNyArNTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhX3VuLCBzbyB3ZSBoYXZlIHRvIHVzZSBhX3ZhbCwgd2hpY2ggaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsIHRoYXQncyBsZWZ0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkJCQllbGZfYXV4X3BsYXRmb3JtID0gKGNoYXIgKikgYXV4di0+YV91bi5hX3ZhbDsKKwkJCQllbGZfYXV4X3BsYXRmb3JtID0KKwkJCQkJKGNoYXIgKikgKGxvbmcpIGF1eHYtPmFfdW4uYV92YWw7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEFUX1BBR0VTWjoKIAkJCQlwYWdlX3NpemUgPSBhdXh2LT5hX3VuLmFfdmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9maWxlLmMgYi9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYwppbmRleCBmZDQ1YmIyLi5mNTU3NzNjIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYwpAQCAtMTE5LDE1ICsxMTksMTEgQEAKIAogaW50IG9zX25ld190dHlfcGdycChpbnQgZmQsIGludCBwaWQpCiB7Ci0JaWYoaW9jdGwoZmQsIFRJT0NTQ1RUWSwgMCkgPCAwKXsKLQkJcHJpbnRrKCJUSU9DU0NUVFkgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZihpb2N0bChmZCwgVElPQ1NDVFRZLCAwKSA8IDApCisJCXJldHVybiAtZXJybm87CiAKLQlpZih0Y3NldHBncnAoZmQsIHBpZCkgPCAwKXsKLQkJcHJpbnRrKCJ0Y3NldHBncnAgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZih0Y3NldHBncnAoZmQsIHBpZCkgPCAwKQorCQlyZXR1cm4gLWVycm5vOwogCiAJcmV0dXJuKDApOwogfQpAQCAtMTQ2LDE4ICsxNDIsMTIgQEAKIAlpbnQgZGlzYywgc2VuY2FwOwogCiAJZGlzYyA9IE5fU0xJUDsKLQlpZihpb2N0bChmZCwgVElPQ1NFVEQsICZkaXNjKSA8IDApewotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgc2xpcCBsaW5lIGRpc2NpcGxpbmUgLSAiCi0JCSAgICAgICAiZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJaWYoaW9jdGwoZmQsIFRJT0NTRVRELCAmZGlzYykgPCAwKQorCQlyZXR1cm4gLWVycm5vOwogCiAJc2VuY2FwID0gMDsKLQlpZihpb2N0bChmZCwgU0lPQ1NJRkVOQ0FQLCAmc2VuY2FwKSA8IDApewotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgc2xpcCBlbmNhcHN1bGF0aW9uIC0gIgotCQkgICAgICAgImVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGlvY3RsKGZkLCBTSU9DU0lGRU5DQVAsICZzZW5jYXApIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKIAogCXJldHVybigwKTsKIH0KQEAgLTE4MCwyMiArMTcwLDE1IEBACiAJaW50IGZsYWdzOwogCiAJZmxhZ3MgPSBmY250bChtYXN0ZXIsIEZfR0VURkwpOwotCWlmKGZsYWdzIDwgMCkgewotCQlwcmludGsoImZjbnRsIEZfR0VURkwgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZihmbGFncyA8IDApCisJCXJldHVybiBlcnJubzsKIAogCWlmKChmY250bChtYXN0ZXIsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyB8IE9fQVNZTkMpIDwgMCkgfHwKLQkgICAoZmNudGwobWFzdGVyLCBGX1NFVE9XTiwgb3NfZ2V0cGlkKCkpIDwgMCkpewotCQlwcmludGsoImZjbnRsIEZfU0VURkwgb3IgRl9TRVRPV04gZmFpbGVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJICAgKGZjbnRsKG1hc3RlciwgRl9TRVRPV04sIG9zX2dldHBpZCgpKSA8IDApKQorCQlyZXR1cm4gLWVycm5vOwogCi0JaWYoKGZjbnRsKHNsYXZlLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spIDwgMCkpewotCQlwcmludGsoImZjbnRsIEZfU0VURkwgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZigoZmNudGwoc2xhdmUsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPCAwKSkKKwkJcmV0dXJuIC1lcnJubzsKIAogCXJldHVybigwKTsKIH0KQEAgLTI1NSw3ICsyMzgsNyBAQAogCiBpbnQgb3Nfb3Blbl9maWxlKGNoYXIgKmZpbGUsIHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MsIGludCBtb2RlKQogewotCWludCBmZCwgZiA9IDA7CisJaW50IGZkLCBlcnIsIGYgPSAwOwogCiAJaWYoZmxhZ3MuciAmJiBmbGFncy53KSBmID0gT19SRFdSOwogCWVsc2UgaWYoZmxhZ3MucikgZiA9IE9fUkRPTkxZOwpAQCAtMjcyLDggKzI1NSw5IEBACiAJCXJldHVybigtZXJybm8pOwogCiAJaWYoZmxhZ3MuY2wgJiYgZmNudGwoZmQsIEZfU0VURkQsIDEpKXsKKwkJZXJyID0gLWVycm5vOwogCQlvc19jbG9zZV9maWxlKGZkKTsKLQkJcmV0dXJuKC1lcnJubyk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuKGZkKTsKQEAgLTM4Myw5ICszNjcsOSBAQAogCQkJcmV0dXJuKGZkKTsKIAkJfQogCQlpZihpb2N0bChmZCwgQkxLR0VUU0laRSwgJmJsb2NrcykgPCAwKXsKKwkJCWVyciA9IC1lcnJubzsKIAkJCXByaW50aygiQ291bGRuJ3QgZ2V0IHRoZSBibG9jayBzaXplIG9mIFwiJXNcIiwgIgogCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCBmaWxlLCBlcnJubyk7Ci0JCQllcnIgPSAtZXJybm87CiAJCQlvc19jbG9zZV9maWxlKGZkKTsKIAkJCXJldHVybihlcnIpOwogCQl9CkBAIC00NzMsMTEgKzQ1NywxNCBAQAogCiBpbnQgb3Nfc2V0X2ZkX2FzeW5jKGludCBmZCwgaW50IG93bmVyKQogeworCWludCBlcnI7CisKIAkvKiBYWFggVGhpcyBzaG91bGQgZG8gRl9HRVRGTCBmaXJzdCAqLwogCWlmKGZjbnRsKGZkLCBGX1NFVEZMLCBPX0FTWU5DIHwgT19OT05CTE9DSykgPCAwKXsKKwkJZXJyID0gLWVycm5vOwogCQlwcmludGsoIm9zX3NldF9mZF9hc3luYyA6IGZhaWxlZCB0byBzZXQgT19BU1lOQyBhbmQgIgogCQkgICAgICAgIk9fTk9OQkxPQ0sgb24gZmQgIyAlZCwgZXJybm8gPSAlZFxuIiwgZmQsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7CisJCXJldHVybiBlcnI7CiAJfQogI2lmZGVmIG5vdGRlZgogCWlmKGZjbnRsKGZkLCBGX1NFVEZELCAxKSA8IDApewpAQCAtNDg4LDEwICs0NzUsMTEgQEAKIAogCWlmKChmY250bChmZCwgRl9TRVRTSUcsIFNJR0lPKSA8IDApIHx8CiAJICAgKGZjbnRsKGZkLCBGX1NFVE9XTiwgb3duZXIpIDwgMCkpeworCQllcnIgPSAtZXJybm87CiAJCXByaW50aygib3Nfc2V0X2ZkX2FzeW5jIDogRmFpbGVkIHRvIGZjbnRsIEZfU0VUT1dOICIKIAkJICAgICAgICIob3IgRl9TRVRTSUcpIGZkICVkIHRvIHBpZCAlZCwgZXJybm8gPSAlZFxuIiwgZmQsIAogCQkgICAgICAgb3duZXIsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuKDApOwpAQCAtNTE2LDExICs1MDQsOSBAQAogCWlmKGJsb2NraW5nKSBmbGFncyAmPSB+T19OT05CTE9DSzsKIAllbHNlIGZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAKLQlpZihmY250bChmZCwgRl9TRVRGTCwgZmxhZ3MpIDwgMCl7Ci0JCXByaW50aygiRmFpbGVkIHRvIGNoYW5nZSBibG9ja2luZyBvbiBmZCAjICVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgZmQsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGZjbnRsKGZkLCBGX1NFVEZMLCBmbGFncykgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCiAJcmV0dXJuKDApOwogfQogCkBAIC02MDksMTEgKzU5NSw4IEBACiAJaW50IHNvY2ssIGVycjsKIAogCXNvY2sgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19ER1JBTSwgMCk7Ci0JaWYgKHNvY2sgPCAwKXsKLQkJcHJpbnRrKCJjcmVhdGVfdW5peF9zb2NrZXQgLSBzb2NrZXQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJaWYoc29jayA8IDApCisJCXJldHVybiAtZXJybm87CiAKIAlpZihjbG9zZV9vbl9leGVjKSB7CiAJCWVyciA9IG9zX3NldF9leGVjX2Nsb3NlKHNvY2ssIDEpOwpAQCAtNjI4LDExICs2MTEsOCBAQAogCXNucHJpbnRmKGFkZHIuc3VuX3BhdGgsIGxlbiwgIiVzIiwgZmlsZSk7CiAKIAllcnIgPSBiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSk7Ci0JaWYgKGVyciA8IDApewotCQlwcmludGsoImNyZWF0ZV9saXN0ZW5pbmdfc29ja2V0IGF0ICclcycgLSBiaW5kIGZhaWxlZCwgIgotCQkgICAgICAgImVycm5vID0gJWRcbiIsIGZpbGUsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CiAKIAlyZXR1cm4oc29jayk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L21lbS5jIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTcxZWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpAQCAtMCwwICsxLDE2MSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSAia2Vybl91dGlsLmgiCisjaW5jbHVkZSAidXNlci5oIgorI2luY2x1ZGUgInVzZXJfdXRpbC5oIgorI2luY2x1ZGUgIm1lbV91c2VyLmgiCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgIm9zLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK3N0YXRpYyBjaGFyICp0ZW1wZGlyID0gTlVMTDsKKworc3RhdGljIHZvaWQgX19pbml0IGZpbmRfdGVtcGRpcih2b2lkKQoreworCWNoYXIgKmRpcnNbXSA9IHsgIlRNUCIsICJURU1QIiwgIlRNUERJUiIsIE5VTEwgfTsKKwlpbnQgaTsKKwljaGFyICpkaXIgPSBOVUxMOworCisJaWYodGVtcGRpciAhPSBOVUxMKSByZXR1cm47CS8qIFdlJ3ZlIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKwlmb3IoaSA9IDA7IGRpcnNbaV07IGkrKyl7CisJCWRpciA9IGdldGVudihkaXJzW2ldKTsKKwkJaWYoKGRpciAhPSBOVUxMKSAmJiAoKmRpciAhPSAnXDAnKSkKKwkJCWJyZWFrOworCX0KKwlpZigoZGlyID09IE5VTEwpIHx8ICgqZGlyID09ICdcMCcpKQorCQlkaXIgPSAiL3RtcCI7CisKKwl0ZW1wZGlyID0gbWFsbG9jKHN0cmxlbihkaXIpICsgMik7CisJaWYodGVtcGRpciA9PSBOVUxMKXsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbWFsbG9jIHRlbXBkaXIsICIKKwkJCSJlcnJubyA9ICVkXG4iLCBlcnJubyk7CisJCXJldHVybjsKKwl9CisJc3RyY3B5KHRlbXBkaXIsIGRpcik7CisJc3RyY2F0KHRlbXBkaXIsICIvIik7Cit9CisKKy8qCisgKiBUaGlzIHByb2Mgc3RpbGwgdXNlZCBpbiB0dC1tb2RlCisgKiAoZmlsZToga2VybmVsL3R0L3B0cHJveHkvcHJveHkuYywgcHJvYzogc3RhcnRfZGVidWdnZXIpLgorICogU28gaXQgaXNuJ3QgJ3N0YXRpYycgeWV0LgorICovCitpbnQgbWFrZV90ZW1wZmlsZShjb25zdCBjaGFyICp0ZW1wbGF0ZSwgY2hhciAqKm91dF90ZW1wbmFtZSwgaW50IGRvX3VubGluaykKK3sKKwljaGFyIHRlbXBuYW1lW01BWFBBVEhMRU5dOworCWludCBmZDsKKworCWZpbmRfdGVtcGRpcigpOworCWlmICgqdGVtcGxhdGUgIT0gJy8nKQorCQlzdHJjcHkodGVtcG5hbWUsIHRlbXBkaXIpOworCWVsc2UKKwkJKnRlbXBuYW1lID0gMDsKKwlzdHJjYXQodGVtcG5hbWUsIHRlbXBsYXRlKTsKKwlmZCA9IG1rc3RlbXAodGVtcG5hbWUpOworCWlmKGZkIDwgMCl7CisJCWZwcmludGYoc3RkZXJyLCAib3BlbiAtIGNhbm5vdCBjcmVhdGUgJXM6ICVzXG4iLCB0ZW1wbmFtZSwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYoZG9fdW5saW5rICYmICh1bmxpbmsodGVtcG5hbWUpIDwgMCkpeworCQlwZXJyb3IoInVubGluayIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmKG91dF90ZW1wbmFtZSl7CisJCSpvdXRfdGVtcG5hbWUgPSBzdHJkdXAodGVtcG5hbWUpOworCQlpZigqb3V0X3RlbXBuYW1lID09IE5VTEwpeworCQkJcGVycm9yKCJzdHJkdXAiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4oZmQpOworfQorCisjZGVmaW5lIFRFTVBOQU1FX1RFTVBMQVRFICJ2bV9maWxlLVhYWFhYWCIKKworLyoKKyAqIFRoaXMgcHJvYyBpcyB1c2VkIGluIHN0YXJ0X3VwLmMKKyAqIFNvIGl0IGlzbid0ICdzdGF0aWMnLgorICovCitpbnQgY3JlYXRlX3RtcF9maWxlKHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWludCBmZCwgZXJyOworCWNoYXIgemVybzsKKworCWZkID0gbWFrZV90ZW1wZmlsZShURU1QTkFNRV9URU1QTEFURSwgTlVMTCwgMSk7CisJaWYoZmQgPCAwKSB7CisJCWV4aXQoMSk7CisJfQorCisJZXJyID0gZmNobW9kKGZkLCAwNzc3KTsKKwlpZihlcnIgPCAwKXsKKwkJcGVycm9yKCJvc19tb2RlX2ZkIik7CisJCWV4aXQoMSk7CisJfQorCisgICAgICAgIGlmIChsc2VlazY0KGZkLCBsZW4sIFNFRUtfU0VUKSA8IDApIHsKKyAJCXBlcnJvcigib3Nfc2Vla19maWxlIik7CisJCWV4aXQoMSk7CisJfQorCisJemVybyA9IDA7CisKKwllcnIgPSBvc193cml0ZV9maWxlKGZkLCAmemVybywgMSk7CisJaWYoZXJyICE9IDEpeworCQllcnJubyA9IC1lcnI7CisJCXBlcnJvcigib3Nfd3JpdGVfZmlsZSIpOworCQlleGl0KDEpOworCX0KKworCXJldHVybihmZCk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2Fub25fZmlsZSh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2lkICphZGRyOworCWludCBmZDsKKworCWZkID0gb3BlbigiL2Rldi9hbm9uIiwgT19SRFdSKTsKKwlpZihmZCA8IDApIHsKKwkJcGVycm9yKCJvcGVuaW5nIC9kZXYvYW5vbiIpOworCQlleGl0KDEpOworCX0KKworCWFkZHIgPSBtbWFwKE5VTEwsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwlpZihhZGRyID09IE1BUF9GQUlMRUQpeworCQlwZXJyb3IoIm1hcHBpbmcgcGh5c21lbSBmaWxlIik7CisJCWV4aXQoMSk7CisJfQorCW11bm1hcChhZGRyLCBsZW4pOworCisJcmV0dXJuKGZkKTsKK30KKworZXh0ZXJuIGludCBoYXZlX2RldmFub247CisKK2ludCBjcmVhdGVfbWVtX2ZpbGUodW5zaWduZWQgbG9uZyBsZW4pCit7CisJaW50IGVyciwgZmQ7CisKKwlpZihoYXZlX2RldmFub24pCisJCWZkID0gY3JlYXRlX2Fub25fZmlsZShsZW4pOworCWVsc2UgZmQgPSBjcmVhdGVfdG1wX2ZpbGUobGVuKTsKKworCWVyciA9IG9zX3NldF9leGVjX2Nsb3NlKGZkLCAxKTsKKwlpZihlcnIgPCAwKXsKKwkJZXJybm8gPSAtZXJyOworCQlwZXJyb3IoImV4ZWNfY2xvc2UiKTsKKwl9CisJcmV0dXJuKGZkKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKaW5kZXggZDMyNDEzZS4uZDljNTIzOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKQEAgLTMsNiArMyw3IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KIAorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYyBiL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYwppbmRleCAwNDBjYzE0Li42YWY4MzE3IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCkBAIC00LDE4ICs0LDIyIEBACiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSAidXNlcl91dGlsLmgiCiAjaW5jbHVkZSAia2Vybl91dGlsLmgiCiAjaW5jbHVkZSAidXNlci5oIgpAQCAtMjUsNiArMjksNyBAQAogI2luY2x1ZGUgInN5c2RlcC9zaWdjb250ZXh0LmgiCiAjaW5jbHVkZSAiaXJxX3VzZXIuaCIKICNpbmNsdWRlICJwdHJhY2VfdXNlci5oIgorI2luY2x1ZGUgIm1lbV91c2VyLmgiCiAjaW5jbHVkZSAidGltZV91c2VyLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgIm9zLmgiCkBAIC0zMiw2ICszNyw4IEBACiAjaW5jbHVkZSAiY2hvb3NlLW1vZGUuaCIKICNpbmNsdWRlICJtb2RlLmgiCiAjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgorCiAjaWZkZWYgVU1MX0NPTkZJR19NT0RFX1NLQVMKICNpbmNsdWRlICJza2FzLmgiCiAjaW5jbHVkZSAic2thc19wdHJhY2UuaCIKQEAgLTI3Niw5ICsyODMsMzggQEAKIAljaGVja19zeXNlbXUoKTsKIH0KIAorZXh0ZXJuIGludCBjcmVhdGVfdG1wX2ZpbGUodW5zaWduZWQgbG9uZyBsZW4pOworCitzdGF0aWMgdm9pZCBjaGVja190bXBleGVjKHZvaWQpCit7CisJdm9pZCAqYWRkcjsKKwlpbnQgZXJyLCBmZCA9IGNyZWF0ZV90bXBfZmlsZShVTV9LRVJOX1BBR0VfU0laRSk7CisKKwlhZGRyID0gbW1hcChOVUxMLCBVTV9LRVJOX1BBR0VfU0laRSwKKwkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJcHJpbnRmKCJDaGVja2luZyBQUk9UX0VYRUMgbW1hcCBpbiAvdG1wLi4uIik7CisJZmZsdXNoKHN0ZG91dCk7CisJaWYoYWRkciA9PSBNQVBfRkFJTEVEKXsKKwkJZXJyID0gZXJybm87CisJCXBlcnJvcigiZmFpbGVkIik7CisJCWlmKGVyciA9PSBFUEVSTSkKKwkJCXByaW50ZigiL3RtcCBtdXN0IGJlIG5vdCBtb3VudGVkIG5vZXhlY1xuIik7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiT0tcbiIpOworCW11bm1hcChhZGRyLCBVTV9LRVJOX1BBR0VfU0laRSk7CisKKwljbG9zZShmZCk7Cit9CisKIHZvaWQgb3NfZWFybHlfY2hlY2tzKHZvaWQpCiB7CiAJY2hlY2tfcHRyYWNlKCk7CisKKwkvKiBOZWVkIHRvIGNoZWNrIHRoaXMgZWFybHkgYmVjYXVzZSBtbWFwcGluZyBoYXBwZW5zIGJlZm9yZSB0aGUKKwkgKiBrZXJuZWwgaXMgcnVubmluZy4KKwkgKi8KKwljaGVja190bXBleGVjKCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5vcHJvY21tX2NtZF9wYXJhbShjaGFyICpzdHIsIGludCogYWRkKQpAQCAtMzU3LDMgKzM5Myw3MiBAQAogCXJldHVybigwKTsKIH0KICNlbmRpZgorCitpbnQgaGF2ZV9kZXZhbm9uID0gMDsKKwordm9pZCBjaGVja19kZXZhbm9uKHZvaWQpCit7CisJaW50IGZkOworCisJcHJpbnRrKCJDaGVja2luZyBmb3IgL2Rldi9hbm9uIG9uIHRoZSBob3N0Li4uIik7CisJZmQgPSBvcGVuKCIvZGV2L2Fub24iLCBPX1JEV1IpOworCWlmKGZkIDwgMCl7CisJCXByaW50aygiTm90IGF2YWlsYWJsZSAob3BlbiBmYWlsZWQgd2l0aCBlcnJubyAlZClcbiIsIGVycm5vKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50aygiT0tcbiIpOworCWhhdmVfZGV2YW5vbiA9IDE7Cit9CisKK2ludCBfX2luaXQgcGFyc2VfaW9tZW0oY2hhciAqc3RyLCBpbnQgKmFkZCkKK3sKKwlzdHJ1Y3QgaW9tZW1fcmVnaW9uICpuZXc7CisJc3RydWN0IHVtbF9zdGF0IGJ1ZjsKKwljaGFyICpmaWxlLCAqZHJpdmVyOworCWludCBmZCwgZXJyLCBzaXplOworCisJZHJpdmVyID0gc3RyOworCWZpbGUgPSBzdHJjaHIoc3RyLCcsJyk7CisJaWYoZmlsZSA9PSBOVUxMKXsKKwkJcHJpbnRmKCJwYXJzZV9pb21lbSA6IGZhaWxlZCB0byBwYXJzZSBpb21lbVxuIik7CisJCWdvdG8gb3V0OworCX0KKwkqZmlsZSA9ICdcMCc7CisJZmlsZSsrOworCWZkID0gb3Nfb3Blbl9maWxlKGZpbGUsIG9mX3Jkd3IoT1BFTkZMQUdTKCkpLCAwKTsKKwlpZihmZCA8IDApeworCQlvc19wcmludF9lcnJvcihmZCwgInBhcnNlX2lvbWVtIC0gQ291bGRuJ3Qgb3BlbiBpbyBmaWxlIik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IG9zX3N0YXRfZmQoZmQsICZidWYpOworCWlmKGVyciA8IDApeworCQlvc19wcmludF9lcnJvcihlcnIsICJwYXJzZV9pb21lbSAtIGNhbm5vdCBzdGF0X2ZkIGZpbGUiKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJbmV3ID0gbWFsbG9jKHNpemVvZigqbmV3KSk7CisJaWYobmV3ID09IE5VTEwpeworCQlwZXJyb3IoIkNvdWxkbid0IGFsbG9jYXRlIGlvbWVtX3JlZ2lvbiBzdHJ1Y3QiKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJc2l6ZSA9IChidWYudXN0X3NpemUgKyBVTV9LRVJOX1BBR0VfU0laRSkgJiB+KFVNX0tFUk5fUEFHRV9TSVpFIC0gMSk7CisKKwkqbmV3ID0gKChzdHJ1Y3QgaW9tZW1fcmVnaW9uKSB7IC5uZXh0CQk9IGlvbWVtX3JlZ2lvbnMsCisJCQkJCS5kcml2ZXIJCT0gZHJpdmVyLAorCQkJCQkuZmQJCT0gZmQsCisJCQkJCS5zaXplCQk9IHNpemUsCisJCQkJCS5waHlzCQk9IDAsCisJCQkJCS52aXJ0CQk9IDAgfSk7CisJaW9tZW1fcmVnaW9ucyA9IG5ldzsKKwlpb21lbV9zaXplICs9IG5ldy0+c2l6ZSArIFVNX0tFUk5fUEFHRV9TSVpFOworCisJcmV0dXJuKDApOworIG91dF9jbG9zZToKKwlvc19jbG9zZV9maWxlKGZkKTsKKyBvdXQ6CisJcmV0dXJuKDEpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3R0LmMgYi9hcmNoL3VtL29zLUxpbnV4L3R0LmMKaW5kZXggNWIwNDdhYi4uYTZkYjg4NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC90dC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdHQuYwpAQCAtMzYsNiArMzYsMjAgQEAKICNpbmNsdWRlICJtb2RlLmgiCiAjaW5jbHVkZSAidGVtcGZpbGUuaCIKIAoraW50IHByb3RlY3RfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCByLCBpbnQgdywgaW50IHgsCisJCSAgIGludCBtdXN0X3N1Y2NlZWQpCit7CisJaW50IGVycjsKKworCWVyciA9IG9zX3Byb3RlY3RfbWVtb3J5KCh2b2lkICopIGFkZHIsIGxlbiwgciwgdywgeCk7CisJaWYoZXJyIDwgMCl7CisgICAgICAgICAgICAgICAgaWYobXVzdF9zdWNjZWVkKQorCQkJcGFuaWMoInByb3RlY3QgZmFpbGVkLCBlcnIgPSAlZCIsIC1lcnIpOworCQllbHNlIHJldHVybihlcnIpOworCX0KKwlyZXR1cm4oMCk7Cit9CisKIC8qCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIG9ubHkgZm9yIHR0IG1vZGUgKHdpbGwgYmUgZGVsZXRlZCBpbiBmdXR1cmUuLi4pCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2xkdC5jIGIvYXJjaC91bS9zeXMtaTM4Ni9sZHQuYwppbmRleCBiZDNjMzRhLi4zNmI1YzJjIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L2xkdC5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMKQEAgLTgzLDYgKzgzLDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXAgPSBidWY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlcyA9IC1FTk9TWVM7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvS2NvbmZpZyBiL2FyY2gveDg2XzY0L0tjb25maWcKaW5kZXggZTYzMzIzZS4uMjFhZmE2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvS2NvbmZpZworKysgYi9hcmNoL3g4Nl82NC9LY29uZmlnCkBAIC0yNzcsMTEgKzI3Nyw2IEBACiBjb25maWcgSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBIQVZFX0RFQ19MT0NLCi0JYm9vbAotCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBOUl9DUFVTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTI1NikiCiAJcmFuZ2UgMiAyNTYKQEAgLTMxMyw3ICszMDgsNyBAQAogCSAgcHJlc2VudC4gIFRoZSBIUEVUIHByb3ZpZGVzIGEgc3RhYmxlIHRpbWUgYmFzZSBvbiBTTVAKIAkgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLAogCSAgYXMgaXQgaXMgb2ZmLWNoaXAuICBZb3UgY2FuIGZpbmQgdGhlIEhQRVQgc3BlYyBhdAotCSAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2xhYnMvcGxhdGNvbXAvaHBldC9ocGV0c3BlYy5odG0+LgorCSAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2hhcmR3YXJlZGVzaWduL2hwZXRzcGVjLmh0bT4uCiAKIGNvbmZpZyBYODZfUE1fVElNRVIKIAlib29sICJQTSB0aW1lciIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYwppbmRleCBjODEzMWYzLi5kOTE2MWUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCkBAIC0zNTMsMTEgKzM1Myw2IEBACiAJbXBudCA9IGttZW1fY2FjaGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKIAlpZiAoIW1wbnQpIAogCQlyZXR1cm4gLUVOT01FTTsgCi0JCi0JaWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnkoKElBMzJfU1RBQ0tfVE9QIC0gKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKSBicHJtLT5wKSk+PlBBR0VfU0hJRlQpKSB7Ci0JCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgbXBudCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KIAogCW1lbXNldChtcG50LCAwLCBzaXplb2YoKm1wbnQpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9zeXNjYWxsMzIuYyBiL2FyY2gveDg2XzY0L2lhMzIvc3lzY2FsbDMyLmMKaW5kZXggYWRiYzVmOC4uM2EwMTMyOSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9zeXNjYWxsMzIuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL3N5c2NhbGwzMi5jCkBAIC01MiwxNyArNTIsMTMgQEAKIAl2bWEgPSBrbWVtX2NhY2hlX2FsbG9jKHZtX2FyZWFfY2FjaGVwLCBTTEFCX0tFUk5FTCk7CiAJaWYgKCF2bWEpCiAJCXJldHVybiAtRU5PTUVNOwotCWlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5KG5wYWdlcykpIHsKLQkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAltZW1zZXQodm1hLCAwLCBzaXplb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7CiAJLyogQ291bGQgcmFuZG9taXplIGhlcmUgKi8KIAl2bWEtPnZtX3N0YXJ0ID0gVlNZU0NBTEwzMl9CQVNFOwogCXZtYS0+dm1fZW5kID0gVlNZU0NBTEwzMl9FTkQ7CiAJLyogTUFZV1JJVEUgdG8gYWxsb3cgZ2RiIHRvIENPVyBhbmQgc2V0IGJyZWFrcG9pbnRzICovCi0Jdm1hLT52bV9mbGFncyA9IFZNX1JFQUR8Vk1fRVhFQ3xWTV9NQVlSRUFEfFZNX01BWUVYRUN8Vk1fTUFZRVhFQ3xWTV9NQVlXUklURTsKKwl2bWEtPnZtX2ZsYWdzID0gVk1fUkVBRHxWTV9FWEVDfFZNX01BWVJFQUR8Vk1fTUFZRVhFQ3xWTV9NQVlXUklURTsKIAl2bWEtPnZtX2ZsYWdzIHw9IG1tLT5kZWZfZmxhZ3M7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwcm90ZWN0aW9uX21hcFt2bWEtPnZtX2ZsYWdzICYgN107CiAJdm1hLT52bV9vcHMgPSAmc3lzY2FsbDMyX3ZtX29wczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCmluZGV4IGViNzkyOWUuLmFiM2Y4N2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CkBAIC0yOCw2ICszMCw3IEBACiAgKiBQRk4gb2YgbGFzdCBtZW1vcnkgcGFnZS4KICAqLwogdW5zaWduZWQgbG9uZyBlbmRfcGZuOyAKK0VYUE9SVF9TWU1CT0woZW5kX3Bmbik7CiAKIC8qIAogICogZW5kX3BmbiBvbmx5IGluY2x1ZGVzIFJBTSwgd2hpbGUgZW5kX3Bmbl9tYXAgaW5jbHVkZXMgYWxsIGU4MjAgZW50cmllcy4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDUyMjk0NGEuLmM4ZWVlMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYwpAQCAtMjk5LDE1ICsyOTksNiBAQAogI2VuZGlmCiAJCQkJCS8qIFJFRC1QRU4gc2tpcCB0aGVtIG9uIG1wdGFibGVzIHRvbz8gKi8KIAkJCQkJcmV0dXJuOwotCQkJCWNhc2UgUENJX1ZFTkRPUl9JRF9BVEk6Ci0JCQkJCS8qIEFsbCB0aW1lciBpbnRlcnJ1cHRzIG9uIGF0aWl4cAotCQkJCSAgICAgICAgICAgYXJlIGRvdWJsZWQuIERpc2FibGUgb25lLiAqLwotCQkJCQlpZiAoZGlzYWJsZV90aW1lcl9waW5fMSA9PSAwKSB7Ci0JCQkJCQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8KLQkJIkFUSSBib2FyZCBkZXRlY3RlZC4gRGlzYWJsaW5nIHRpbWVyIHBpbiAxLlxuIik7Ci0JCQkJCX0KLQkJCQkJcmV0dXJuOwogCQkJCX0gCiAKIAkJCQkvKiBObyBtdWx0aS1mdW5jdGlvbiBkZXZpY2U/ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKaW5kZXggOTY5MzY1Yy4uMDgyMDNiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJCQlwYW5pY21fZm91bmQgPSAxOwogCQl9CiAKLQkJdGFpbnRlZCB8PSBUQUlOVF9NQUNISU5FX0NIRUNLOworCQlhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSyk7CiAJfQogCiAJLyogTmV2ZXIgZG8gYW55dGhpbmcgZmluYWwgaW4gdGhlIHBvbGxpbmcgdGltZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwppbmRleCA0Mzg4YjhhNS4uMzlkNDQ1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJCXwgSzdfTk1JX0VWRU5UOwogCiAJd3Jtc3IoTVNSX0s3X0VWTlRTRUwwLCBldm50c2VsLCAwKTsKLQl3cm1zcihNU1JfSzdfUEVSRkNUUjAsIC0oY3B1X2toei9ubWlfaHoqMTAwMCksIC0xKTsKKwl3cm1zcmwoTVNSX0s3X1BFUkZDVFIwLCAtKCh1NjQpY3B1X2toeiAqIDEwMDAgLyBubWlfaHopKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKIAlldm50c2VsIHw9IEs3X0VWTlRTRUxfRU5BQkxFOwogCXdybXNyKE1TUl9LN19FVk5UU0VMMCwgZXZudHNlbCwgMCk7CkBAIC00MDcsOCArNDA3LDggQEAKIAogCXdybXNyKE1TUl9QNF9DUlVfRVNDUjAsIFA0X05NSV9DUlVfRVNDUjAsIDApOwogCXdybXNyKE1TUl9QNF9JUV9DQ0NSMCwgUDRfTk1JX0lRX0NDQ1IwICYgflA0X0NDQ1JfRU5BQkxFLCAwKTsKLQlEcHJpbnRrKCJzZXR0aW5nIFA0X0lRX0NPVU5URVIwIHRvIDB4JTA4bHhcbiIsIC0oY3B1X2toei9ubWlfaHoqMTAwMCkpOwotCXdybXNyKE1TUl9QNF9JUV9DT1VOVEVSMCwgLShjcHVfa2h6L25taV9oeioxMDAwKSwgLTEpOworCURwcmludGsoInNldHRpbmcgUDRfSVFfQ09VTlRFUjAgdG8gMHglMDhseFxuIiwgLShjcHVfa2h6ICogMTAwMFVMIC8gbm1pX2h6KSk7CisJd3Jtc3JsKE1TUl9QNF9JUV9DT1VOVEVSMCwgLSgodTY0KWNwdV9raHogKiAxMDAwIC8gbm1pX2h6KSk7CiAJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CiAJd3Jtc3IoTVNSX1A0X0lRX0NDQ1IwLCBubWlfcDRfY2Njcl92YWwsIDApOwogCXJldHVybiAxOwpAQCAtNTA2LDcgKzUwNiw3IEBACiAgCQkJd3Jtc3IoTVNSX1A0X0lRX0NDQ1IwLCBubWlfcDRfY2Njcl92YWwsIDApOwogIAkJCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwogIAkJfQotCQl3cm1zcihubWlfcGVyZmN0cl9tc3IsIC0oY3B1X2toei9ubWlfaHoqMTAwMCksIC0xKTsKKwkJd3Jtc3JsKG5taV9wZXJmY3RyX21zciwgLSgodTY0KWNwdV9raHogKiAxMDAwIC8gbm1pX2h6KSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDM1MWQ4ZDYuLjIzOGY3M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCkBAIC04MzEsMTEgKzgzMSwyNiBAQAogI2VuZGlmCiB9CiAKKyNkZWZpbmUgSFdDUiAweGMwMDEwMDE1CisKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYW1kKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlpbnQgcjsKIAlpbnQgbGV2ZWw7CiAKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCS8vIERpc2FibGUgVExCIGZsdXNoIGZpbHRlciBieSBzZXR0aW5nIEhXQ1IuRkZESVM6CisJLy8gYml0IDYgb2YgbXNyIEMwMDFfMDAxNQorCS8vCisJLy8gRXJyYXRhIDYzIGZvciBTSC1CMyBzdGVwcGluZ3MKKwkvLyBFcnJhdGEgMTIyIGZvciBhbGwoPykgc3RlcHBpbmdzCisJcmRtc3JsKEhXQ1IsIHZhbHVlKTsKKwl2YWx1ZSB8PSAxIDw8IDY7CisJd3Jtc3JsKEhXQ1IsIHZhbHVlKTsKKyNlbmRpZgorCiAJLyogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKIAkgICAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkgKi8KIAljbGVhcl9iaXQoMCozMiszMSwgJmMtPng4Nl9jYXBhYmlsaXR5KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKaW5kZXggNjhlYzAzMC4uZmQ5OWRkZDAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYwpAQCAtMTc4LDEwICsxNzgsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7CiAKLSNpZmRlZiBDT05GSUdfSEFWRV9ERUNfTE9DSwotRVhQT1JUX1NZTUJPTChfYXRvbWljX2RlY19hbmRfbG9jayk7Ci0jZW5kaWYKLQogRVhQT1JUX1NZTUJPTChkaWVfY2hhaW4pOwogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9saWIvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9saWIvTWFrZWZpbGUKaW5kZXggNmIyNmExYy4uYmJhNWRiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbGliL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L2xpYi9NYWtlZmlsZQpAQCAtMTAsNSArMTAsMyBAQAogCXVzZXJjb3B5Lm8gZ2V0dXNlci5vIHB1dHVzZXIubyAgXAogCXRodW5rLm8gY2xlYXJfcGFnZS5vIGNvcHlfcGFnZS5vIGJpdHN0ci5vIGJpdG9wcy5vCiBsaWIteSArPSBtZW1jcHkubyBtZW1tb3ZlLm8gbWVtc2V0Lm8gY29weV91c2VyLm8KLQotbGliLSQoQ09ORklHX0hBVkVfREVDX0xPQ0spICs9IGRlY19hbmRfbG9jay5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9saWIvZGVjX2FuZF9sb2NrLmMgYi9hcmNoL3g4Nl82NC9saWIvZGVjX2FuZF9sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNDMzOTQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODZfNjQvbGliL2RlY19hbmRfbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIHg4NiB2ZXJzaW9uIG9mICJhdG9taWNfZGVjX2FuZF9sb2NrKCkiIHVzaW5nCi0gKiB0aGUgYXRvbWljICJjbXB4Y2hnIiBpbnN0cnVjdGlvbi4KLSAqCi0gKiAoRm9yIENQVSdzIGxhY2tpbmcgY21weGNoZywgd2UgdXNlIHRoZSBzbG93Ci0gKiBnZW5lcmljIHZlcnNpb24sIGFuZCB0aGlzIG9uZSBuZXZlciBldmVuIGdldHMKLSAqIGNvbXBpbGVkKS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLWludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKQotewotCWludCBjb3VudGVyOwotCWludCBuZXdjb3VudDsKLQotcmVwZWF0OgotCWNvdW50ZXIgPSBhdG9taWNfcmVhZChhdG9taWMpOwotCW5ld2NvdW50ID0gY291bnRlci0xOwotCi0JaWYgKCFuZXdjb3VudCkKLQkJZ290byBzbG93X3BhdGg7Ci0KLQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGdsICUxLCUyIgotCQk6Ij1hIiAobmV3Y291bnQpCi0JCToiciIgKG5ld2NvdW50KSwgIm0iIChhdG9taWMtPmNvdW50ZXIpLCAiMCIgKGNvdW50ZXIpKTsKLQotCS8qIElmIHRoZSBhYm92ZSBmYWlsZWQsICJlYXgiIHdpbGwgaGF2ZSBjaGFuZ2VkICovCi0JaWYgKG5ld2NvdW50ICE9IGNvdW50ZXIpCi0JCWdvdG8gcmVwZWF0OwotCXJldHVybiAwOwotCi1zbG93X3BhdGg6Ci0Jc3Bpbl9sb2NrKGxvY2spOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pYykpCi0JCXJldHVybiAxOwotCXNwaW5fdW5sb2NrKGxvY2spOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggMmI2MjU3Yi4uN2U4NDFhYSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC0yNiwxMCArMjYsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEhBVkVfREVDX0xPQ0sKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY29ybi9jaGFyL3BjZjg1ODMuYyBiL2RyaXZlcnMvYWNvcm4vY2hhci9wY2Y4NTgzLmMKaW5kZXggMTQxYjRjMi4uMmI4NTBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY29ybi9jaGFyL3BjZjg1ODMuYworKysgYi9kcml2ZXJzL2Fjb3JuL2NoYXIvcGNmODU4My5jCkBAIC0yMywxMiArMjMsMTMgQEAKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVtdID0geyBJMkNfQ0xJRU5UX0VORCB9Owogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9hZGRyW10gPSB7IDB4NTAsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgKmZvcmNlc1tdID0geyBOVUxMIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewogCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9hZGRyLAogCS5wcm9iZQkJCT0gaWdub3JlLAogCS5pZ25vcmUJCQk9IGlnbm9yZSwKLQkuZm9yY2UJCQk9IGlnbm9yZSwKKwkuZm9yY2VzCQkJPSBmb3JjZXMsCiB9OwogCiAjZGVmaW5lIERBVCh4KSAoKHVuc2lnbmVkIGludCkoeC0+ZGV2LmRyaXZlcl9kYXRhKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9hdHRyaWJ1dGVfY29udGFpbmVyLmMgYi9kcml2ZXJzL2Jhc2UvYXR0cmlidXRlX2NvbnRhaW5lci5jCmluZGV4IDM3M2U3YjcuLjZiMmViNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9hdHRyaWJ1dGVfY29udGFpbmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2F0dHJpYnV0ZV9jb250YWluZXIuYwpAQCAtMTUyLDEyICsxNTIsMTMgQEAKIAogCQlpZiAoIWNvbnQtPm1hdGNoKGNvbnQsIGRldikpCiAJCQljb250aW51ZTsKLQkJaWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZXJuYWxfY29udGFpbmVyKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWMgPSBremFsbG9jKHNpemVvZigqaWMpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpYykgewogCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGNsYXNzIGNvbnRhaW5lclxuIik7CiAJCQljb250aW51ZTsKIAkJfQotCQltZW1zZXQoaWMsIDAsIHNpemVvZihzdHJ1Y3QgaW50ZXJuYWxfY29udGFpbmVyKSk7CisKIAkJaWMtPmNvbnQgPSBjb250OwogCQljbGFzc19kZXZpY2VfaW5pdGlhbGl6ZSgmaWMtPmNsYXNzZGV2KTsKIAkJaWMtPmNsYXNzZGV2LmRldiA9IGdldF9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKaW5kZXggZDE2NGMzMi4uM2IxMTJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKQEAgLTE4OSwxMiArMTg5LDExIEBACiAJc3RydWN0IGNsYXNzICpjbHM7CiAJaW50IHJldHZhbDsKIAotCWNscyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGFzcyksIEdGUF9LRVJORUwpOworCWNscyA9IGt6YWxsb2Moc2l6ZW9mKCpjbHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNscykgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KLQltZW1zZXQoY2xzLCAweDAwLCBzaXplb2Yoc3RydWN0IGNsYXNzKSk7CiAKIAljbHMtPm5hbWUgPSBuYW1lOwogCWNscy0+b3duZXIgPSBvd25lcjsKQEAgLTUwMCwxMyArNDk5LDEzIEBACiAJLyogYWRkIHRoZSBuZWVkZWQgYXR0cmlidXRlcyB0byB0aGlzIGRldmljZSAqLwogCWlmIChNQUpPUihjbGFzc19kZXYtPmRldnQpKSB7CiAJCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphdHRyOwotCQlhdHRyID0ga21hbGxvYyhzaXplb2YoKmF0dHIpLCBHRlBfS0VSTkVMKTsKKwkJYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCphdHRyKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYXR0cikgewogCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJa29iamVjdF9kZWwoJmNsYXNzX2Rldi0+a29iaik7CiAJCQlnb3RvIHJlZ2lzdGVyX2RvbmU7CiAJCX0KLQkJbWVtc2V0KGF0dHIsIHNpemVvZigqYXR0ciksIDB4MDApOworCiAJCWF0dHItPmF0dHIubmFtZSA9ICJkZXYiOwogCQlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCQlhdHRyLT5hdHRyLm93bmVyID0gcGFyZW50LT5vd25lcjsKQEAgLTU3NywxMiArNTc2LDExIEBACiAJaWYgKGNscyA9PSBOVUxMIHx8IElTX0VSUihjbHMpKQogCQlnb3RvIGVycm9yOwogCi0JY2xhc3NfZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNsYXNzX2RldmljZSksIEdGUF9LRVJORUwpOworCWNsYXNzX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpjbGFzc19kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsYXNzX2RldikgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KLQltZW1zZXQoY2xhc3NfZGV2LCAweDAwLCBzaXplb2Yoc3RydWN0IGNsYXNzX2RldmljZSkpOwogCiAJY2xhc3NfZGV2LT5kZXZ0ID0gZGV2dDsKIAljbGFzc19kZXYtPmRldiA9IGRldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKaW5kZXggNWJmYTJlOS4uNGFjYjJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKQEAgLTMwMSw5ICszMDEsOSBAQAogCQkJIGNvbnN0IGNoYXIgKmZ3X25hbWUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBmaXJtd2FyZV9wcml2KSwKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpmd19wcml2KSwKIAkJCQkJCUdGUF9LRVJORUwpOwotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2xhc3NfZGV2aWNlKSwKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSBremFsbG9jKHNpemVvZigqY2xhc3NfZGV2KSwKIAkJCQkJCSBHRlBfS0VSTkVMKTsKIAogCSpjbGFzc19kZXZfcCA9IE5VTEw7CkBAIC0zMTMsOCArMzEzLDYgQEAKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9rZnJlZTsKIAl9Ci0JbWVtc2V0KGZ3X3ByaXYsIDAsIHNpemVvZiAoKmZ3X3ByaXYpKTsKLQltZW1zZXQoY2xhc3NfZGV2LCAwLCBzaXplb2YgKCpjbGFzc19kZXYpKTsKIAogCWluaXRfY29tcGxldGlvbigmZndfcHJpdi0+Y29tcGxldGlvbik7CiAJZndfcHJpdi0+YXR0cl9kYXRhID0gZmlybXdhcmVfYXR0cl9kYXRhX3RtcGw7CkBAIC00MDIsMTQgKzQwMCwxMyBAQAogCWlmICghZmlybXdhcmVfcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqZmlybXdhcmVfcCA9IGZpcm13YXJlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBmaXJtd2FyZSksIEdGUF9LRVJORUwpOworCSpmaXJtd2FyZV9wID0gZmlybXdhcmUgPSBremFsbG9jKHNpemVvZigqZmlybXdhcmUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZpcm13YXJlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGttYWxsb2Moc3RydWN0IGZpcm13YXJlKSBmYWlsZWRcbiIsCiAJCSAgICAgICBfX0ZVTkNUSU9OX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0JbWVtc2V0KGZpcm13YXJlLCAwLCBzaXplb2YgKCpmaXJtd2FyZSkpOwogCiAJcmV0dmFsID0gZndfc2V0dXBfY2xhc3NfZGV2aWNlKGZpcm13YXJlLCAmY2xhc3NfZGV2LCBuYW1lLCBkZXZpY2UsCiAJCWhvdHBsdWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21hcC5jIGIvZHJpdmVycy9iYXNlL21hcC5jCmluZGV4IDJmNDU1ZDguLmI0NDlkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tYXAuYworKysgYi9kcml2ZXJzL2Jhc2UvbWFwLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogc3RydWN0IGtvYmpfbWFwICprb2JqX21hcF9pbml0KGtvYmpfcHJvYmVfdCAqYmFzZV9wcm9iZSwgc3RydWN0IHNlbWFwaG9yZSAqc2VtKQogewogCXN0cnVjdCBrb2JqX21hcCAqcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb2JqX21hcCksIEdGUF9LRVJORUwpOwotCXN0cnVjdCBwcm9iZSAqYmFzZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9iZSksIEdGUF9LRVJORUwpOworCXN0cnVjdCBwcm9iZSAqYmFzZSA9IGt6YWxsb2Moc2l6ZW9mKCpiYXNlKSwgR0ZQX0tFUk5FTCk7CiAJaW50IGk7CiAKIAlpZiAoKHAgPT0gTlVMTCkgfHwgKGJhc2UgPT0gTlVMTCkpIHsKQEAgLTE0NCw3ICsxNDQsNiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1zZXQoYmFzZSwgMCwgc2l6ZW9mKHN0cnVjdCBwcm9iZSkpOwogCWJhc2UtPmRldiA9IDE7CiAJYmFzZS0+cmFuZ2UgPSB+MDsKIAliYXNlLT5nZXQgPSBiYXNlX3Byb2JlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCAzYTVmNGM5Li4zNjFlMjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjI1LDEzICsyMjUsMTIgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fb2JqZWN0ICpwb2JqOwogCWludCByZXR2YWw7CiAKLQlwb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBsYXRmb3JtX29iamVjdCkgKyBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG51bSwgR0ZQX0tFUk5FTCk7CisJcG9iaiA9IGt6YWxsb2Moc2l6ZW9mKCpwb2JqKSArIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogbnVtLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBvYmopIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQltZW1zZXQocG9iaiwgMCwgc2l6ZW9mKCpwb2JqKSk7CiAJcG9iai0+cGRldi5uYW1lID0gbmFtZTsKIAlwb2JqLT5wZGV2LmlkID0gaWQ7CiAJcG9iai0+cGRldi5kZXYucmVsZWFzZSA9IHBsYXRmb3JtX2RldmljZV9yZWxlYXNlX3NpbXBsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCAyOGYyYzE3Li40ODZiNmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC00NywxNCArNDcsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKICNkZWZpbmUgQ0NJU1NfRFJJVkVSX1ZFUlNJT04obWFqLG1pbixzdWJtaW4pICgobWFqPDwxNil8KG1pbjw8OCl8KHN1Ym1pbikpCi0jZGVmaW5lIERSSVZFUl9OQU1FICJIUCBDSVNTIERyaXZlciAodiAyLjYuNikiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OIENDSVNTX0RSSVZFUl9WRVJTSU9OKDIsNiw2KQorI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgQ0lTUyBEcml2ZXIgKHYgMi42LjgpIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiBDQ0lTU19EUklWRVJfVkVSU0lPTigyLDYsOCkKIAogLyogRW1iZWRkZWQgbW9kdWxlIGRvY3VtZW50YXRpb24gbWFjcm9zIC0gc2VlIG1vZHVsZXMuaCAqLwogTU9EVUxFX0FVVEhPUigiSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBIUCBDb250cm9sbGVyIFNBNXh4eCBTQTZ4eHggdmVyc2lvbiAyLjYuNiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEhQIENvbnRyb2xsZXIgU0E1eHh4IFNBNnh4eCB2ZXJzaW9uIDIuNi44Iik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiSFAgU0E1aSBTQTVpKyBTQTUzMiBTQTUzMDAgU0E1MzEyIFNBNjQxIFNBNjQyIFNBNjQwMCIKLQkJCSIgU0E2aSBQNjAwIFA4MDAgRTQwMCBFMzAwIik7CisJCQkiIFNBNmkgUDYwMCBQODAwIFA0MDAgUDQwMGkgRTIwMCBFMjAwaSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaW5jbHVkZSAiY2Npc3NfY21kLmgiCkBAIC04MywxMiArODMsMjIgQEAKIAkJMHgwRTExLCAweDQwOTEsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9DSVNTQSwKIAkJMHgxMDNDLCAweDMyMjUsIDAsIDAsIDB9LAotCXsgUENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9DSVNTQiwKKwl7IFBDSV9WRU5ET1JfSURfSFAsIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsCiAJCTB4MTAzYywgMHgzMjIzLCAwLCAwLCAwfSwKIAl7IFBDSV9WRU5ET1JfSURfSFAsIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsCi0JCTB4MTAzYywgMHgzMjMxLCAwLCAwLCAwfSwKKwkJMHgxMDNjLCAweDMyMzQsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9DSVNTQywKLQkJMHgxMDNjLCAweDMyMzMsIDAsIDAsIDB9LAorCQkweDEwM2MsIDB4MzIzNSwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0NJU1NELAorCQkweDEwM2MsIDB4MzIxMSwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0NJU1NELAorCQkweDEwM2MsIDB4MzIxMiwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0NJU1NELAorCQkweDEwM2MsIDB4MzIxMywgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0NJU1NELAorCQkweDEwM2MsIDB4MzIxNCwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0NJU1NELAorCQkweDEwM2MsIDB4MzIxNSwgMCwgMCwgMH0sCiAJezAsfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjY2lzc19wY2lfZGV2aWNlX2lkKTsKQEAgLTExMSw4ICsxMjEsMTMgQEAKIAl7IDB4NDA5MTBFMTEsICJTbWFydCBBcnJheSA2aSIsICZTQTVfYWNjZXNzfSwKIAl7IDB4MzIyNTEwM0MsICJTbWFydCBBcnJheSBQNjAwIiwgJlNBNV9hY2Nlc3N9LAogCXsgMHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCi0JeyAweDMyMzExMDNDLCAiU21hcnQgQXJyYXkgRTQwMCIsICZTQTVfYWNjZXNzfSwKLQl7IDB4MzIzMzEwM0MsICJTbWFydCBBcnJheSBFMzAwIiwgJlNBNV9hY2Nlc3N9LAorCXsgMHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCisJeyAweDMyMzUxMDNDLCAiU21hcnQgQXJyYXkgUDQwMGkiLCAmU0E1X2FjY2Vzc30sCisJeyAweDMyMTExMDNDLCAiU21hcnQgQXJyYXkgRTIwMGkiLCAmU0E1X2FjY2Vzc30sCisJeyAweDMyMTIxMDNDLCAiU21hcnQgQXJyYXkgRTIwMCIsICZTQTVfYWNjZXNzfSwKKwl7IDB4MzIxMzEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKKwl7IDB4MzIxNDEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKKwl7IDB4MzIxNTEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKIH07CiAKIC8qIEhvdyBsb25nIHRvIHdhaXQgKGluIG1pbGxlc2NvbmRzKSBmb3IgYm9hcmQgdG8gZ28gaW50byBzaW1wbGUgbW9kZSAqLwpAQCAtMTQwLDE1ICsxNTUsMjYgQEAKIAogc3RhdGljIGludCByZXZhbGlkYXRlX2FsbHZvbChjdGxyX2luZm9fdCAqaG9zdCk7CiBzdGF0aWMgaW50IGNjaXNzX3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spOwotc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spOwotc3RhdGljIGludCByZWdpc3Rlcl9uZXdfZGlzayhjdGxyX2luZm9fdCAqaCk7CitzdGF0aWMgaW50IHJlYnVpbGRfbHVuX3RhYmxlKGN0bHJfaW5mb190ICpoLCBzdHJ1Y3QgZ2VuZGlzayAqZGVsX2Rpc2spOworc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ssIGRyaXZlX2luZm9fc3RydWN0ICpkcnYsIGludCBjbGVhcl9hbGwpOwogCitzdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5KGludCBjdGxyLCBpbnQgbG9ndm9sLCBSZWFkQ2FwZGF0YV9zdHJ1Y3QgKmJ1ZiwKKwlpbnQgd2l0aGlycSwgdW5zaWduZWQgaW50ICp0b3RhbF9zaXplLCB1bnNpZ25lZCBpbnQgKmJsb2NrX3NpemUpOworc3RhdGljIHZvaWQgY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShpbnQgY3RsciwgaW50IGxvZ3ZvbCwKKwkJCWludCB3aXRoaXJxLCB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKKwkJCXVuc2lnbmVkIGludCBibG9ja19zaXplLCBJbnF1aXJ5RGF0YV9zdHJ1Y3QgKmlucV9idWZmLAorCQkJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydik7CiBzdGF0aWMgdm9pZCBjY2lzc19nZXRnZW9tZXRyeShpbnQgY250bF9udW0pOwogCiBzdGF0aWMgdm9pZCBzdGFydF9pbyggY3Rscl9pbmZvX3QgKmgpOwogc3RhdGljIGludCBzZW5kY21kKCBfX3U4IGNtZCwgaW50IGN0bHIsIHZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLAogCXVuc2lnbmVkIGludCB1c2VfdW5pdF9udW0sIHVuc2lnbmVkIGludCBsb2dfdW5pdCwgX191OCBwYWdlX2NvZGUsCiAJdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLCBpbnQgY21kX3R5cGUpOworc3RhdGljIGludCBzZW5kY21kX3dpdGhpcnEoX191OAljbWQsIGludCBjdGxyLCB2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwKKwl1bnNpZ25lZCBpbnQgdXNlX3VuaXRfbnVtLCB1bnNpZ25lZCBpbnQgbG9nX3VuaXQsIF9fdTgJcGFnZV9jb2RlLAorCWludCBjbWRfdHlwZSk7CisKK3N0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHModW5zaWduZWQgbG9uZyBjdGxyKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgaW50IGNjaXNzX3Byb2NfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgCkBAIC0yNjUsNyArMjkxLDcgQEAKIAlmb3IoaT0wOyBpPD1oLT5oaWdoZXN0X2x1bjsgaSsrKSB7CiAKICAgICAgICAgICAgICAgICBkcnYgPSAmaC0+ZHJ2W2ldOwotCQlpZiAoZHJ2LT5ibG9ja19zaXplID09IDApCisJCWlmIChkcnYtPmhlYWRzID09IDApCiAJCQljb250aW51ZTsKIAogCQl2b2xfc3ogPSBkcnYtPm5yX2Jsb2NrczsKQEAgLTM2Myw2ICszODksOCBAQAogICAgICAgICAgICAgICAgICAJcmV0dXJuIE5VTEw7CiAJCW1lbXNldChjLCAwLCBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSk7CiAKKwkJYy0+Y21kaW5kZXggPSAtMTsKKwogCQljLT5lcnJfaW5mbyA9IChFcnJvckluZm9fc3RydWN0ICopcGNpX2FsbG9jX2NvbnNpc3RlbnQoCiAJCQkJCWgtPnBkZXYsIHNpemVvZihFcnJvckluZm9fc3RydWN0KSwgCiAJCQkJCSZlcnJfZG1hX2hhbmRsZSk7CkBAIC0zOTMsNiArNDIxLDggQEAKIAkJZXJyX2RtYV9oYW5kbGUgPSBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSAKIAkJCQkJKyBpKnNpemVvZihFcnJvckluZm9fc3RydWN0KTsKICAgICAgICAgICAgICAgICBoLT5ucl9hbGxvY3MrKzsKKworCQljLT5jbWRpbmRleCA9IGk7CiAgICAgICAgIH0KIAogCWMtPmJ1c2FkZHIgPSAoX191MzIpIGNtZF9kbWFfaGFuZGxlOwpAQCAtNDUzLDYgKzQ4Myw4IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImNjaXNzX29wZW4gJXNcbiIsIGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPmRpc2tfbmFtZSk7CiAjZW5kaWYgLyogQ0NJU1NfREVCVUcgKi8gCiAKKwlpZiAoaG9zdC0+YnVzeV9pbml0aWFsaXppbmcgfHwgZHJ2LT5idXN5X2NvbmZpZ3VyaW5nKQorCQlyZXR1cm4gLUVCVVNZOwogCS8qCiAJICogUm9vdCBpcyBhbGxvd2VkIHRvIG9wZW4gcmF3IHZvbHVtZSB6ZXJvIGV2ZW4gaWYgaXQncyBub3QgY29uZmlndXJlZAogCSAqIHNvIGFycmF5IGNvbmZpZyBjYW4gc3RpbGwgd29yay4gUm9vdCBpcyBhbHNvIGFsbG93ZWQgdG8gb3BlbiBhbnkKQEAgLTc5NiwxMCArODI4LDEwIEBACiAgCQlyZXR1cm4oMCk7CiAgCX0KIAljYXNlIENDSVNTX0RFUkVHRElTSzoKLQkJcmV0dXJuIGRlcmVnaXN0ZXJfZGlzayhkaXNrKTsKKwkJcmV0dXJuIHJlYnVpbGRfbHVuX3RhYmxlKGhvc3QsIGRpc2spOwogCiAJY2FzZSBDQ0lTU19SRUdORVdEOgotCQlyZXR1cm4gcmVnaXN0ZXJfbmV3X2Rpc2soaG9zdCk7CisJCXJldHVybiByZWJ1aWxkX2x1bl90YWJsZShob3N0LCBOVUxMKTsKIAogCWNhc2UgQ0NJU1NfUEFTU1RIUlU6CiAJewpAQCAtMTE0Myw0OCArMTE3NSwzMjMgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGVyZWdpc3Rlcl9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQorLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIHRoZSB1c2FnZV9jb3VudCBvZiB0aGUgZHJpdmUgdG8gYmUgdXBkYXRlZC9hZGRlZC4KKyAqIElmIHRoZSB1c2FnZV9jb3VudCBpcyB6ZXJvIHRoZW4gdGhlIGRyaXZlIGluZm9ybWF0aW9uIHdpbGwgYmUgdXBkYXRlZCBhbmQKKyAqIHRoZSBkaXNrIHdpbGwgYmUgcmUtcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwuICBJZiBub3QgdGhlbiBpdCB3aWxsIGJlCisgKiBsZWZ0IGFsb25lIGZvciB0aGUgbmV4dCByZWJvb3QuICBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMgZGlzayAwIHdoaWNoCisgKiB3aWxsIGFsd2F5cyBiZSBsZWZ0IHJlZ2lzdGVyZWQgd2l0aCB0aGUga2VybmVsIHNpbmNlIGl0IGlzIGFsc28gdGhlCisgKiBjb250cm9sbGVyIG5vZGUuICBBbnkgY2hhbmdlcyB0byBkaXNrIDAgd2lsbCBzaG93IHVwIG9uIHRoZSBuZXh0CisgKiByZWJvb3QuCisqLworc3RhdGljIHZvaWQgY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oaW50IGN0bHIsIGludCBkcnZfaW5kZXgpCisgIHsKKwljdGxyX2luZm9fdCAqaCA9IGhiYVtjdGxyXTsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKwlSZWFkQ2FwZGF0YV9zdHJ1Y3QgKnNpemVfYnVmZiA9IE5VTEw7CisJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGJsb2NrX3NpemU7CisJdW5zaWduZWQgaW50IHRvdGFsX3NpemU7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IHJldCA9IDA7CisKKwkvKiBpZiB0aGUgZGlzayBhbHJlYWR5IGV4aXN0cyB0aGVuIGRlcmVnaXN0ZXIgaXQgYmVmb3JlIHByb2NlZWRpbmcqLworCWlmIChoLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsICE9IC0xKXsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQloLT5kcnZbZHJ2X2luZGV4XS5idXN5X2NvbmZpZ3VyaW5nID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXJldCA9IGRlcmVnaXN0ZXJfZGlzayhoLT5nZW5kaXNrW2Rydl9pbmRleF0sCisJCQkmaC0+ZHJ2W2Rydl9pbmRleF0sIDApOworCQloLT5kcnZbZHJ2X2luZGV4XS5idXN5X2NvbmZpZ3VyaW5nID0gMDsKKwl9CisKKwkvKiBJZiB0aGUgZGlzayBpcyBpbiB1c2UgcmV0dXJuICovCisJaWYgKHJldCkKKwkJcmV0dXJuOworCisKKwkvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpc2sgYW5kIG1vZGlmeSB0aGUgZHJpdmVyIHN0dXJjdHVyZSAqLworCXNpemVfYnVmZiA9IGttYWxsb2Moc2l6ZW9mKCBSZWFkQ2FwZGF0YV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKHNpemVfYnVmZiA9PSBOVUxMKQorCQlnb3RvIG1lbV9tc2c7CisJaW5xX2J1ZmYgPSBrbWFsbG9jKHNpemVvZiggSW5xdWlyeURhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGlucV9idWZmID09IE5VTEwpCisJCWdvdG8gbWVtX21zZzsKKworCWNjaXNzX3JlYWRfY2FwYWNpdHkoY3RsciwgZHJ2X2luZGV4LCBzaXplX2J1ZmYsIDEsCisJCSZ0b3RhbF9zaXplLCAmYmxvY2tfc2l6ZSk7CisJY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShjdGxyLCBkcnZfaW5kZXgsIDEsIHRvdGFsX3NpemUsIGJsb2NrX3NpemUsCisJCWlucV9idWZmLCAmaC0+ZHJ2W2Rydl9pbmRleF0pOworCisJKytoLT5udW1fbHVuczsKKwlkaXNrID0gaC0+Z2VuZGlza1tkcnZfaW5kZXhdOworCXNldF9jYXBhY2l0eShkaXNrLCBoLT5kcnZbZHJ2X2luZGV4XS5ucl9ibG9ja3MpOworCisKKwkvKiBpZiBpdCdzIHRoZSBjb250cm9sbGVyIGl0J3MgYWxyZWFkeSBhZGRlZCAqLworCWlmIChkcnZfaW5kZXgpeworCQlkaXNrLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX2NjaXNzX3JlcXVlc3QsICZoLT5sb2NrKTsKKworCQkvKiBTZXQgdXAgcXVldWUgaW5mb3JtYXRpb24gKi8KKwkJZGlzay0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSBSRUFEX0FIRUFEOworCQlibGtfcXVldWVfYm91bmNlX2xpbWl0KGRpc2stPnF1ZXVlLCBoYmFbY3Rscl0tPnBkZXYtPmRtYV9tYXNrKTsKKworCQkvKiBUaGlzIGlzIGEgaGFyZHdhcmUgaW1wb3NlZCBsaW1pdC4gKi8KKwkJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhkaXNrLT5xdWV1ZSwgTUFYU0dFTlRSSUVTKTsKKworCQkvKiBUaGlzIGlzIGEgbGltaXQgaW4gdGhlIGRyaXZlciBhbmQgY291bGQgYmUgZWxpbWluYXRlZC4gKi8KKwkJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKGRpc2stPnF1ZXVlLCBNQVhTR0VOVFJJRVMpOworCisJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkaXNrLT5xdWV1ZSwgNTEyKTsKKworCQlkaXNrLT5xdWV1ZS0+cXVldWVkYXRhID0gaGJhW2N0bHJdOworCisJCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKGRpc2stPnF1ZXVlLAorCQkJaGJhW2N0bHJdLT5kcnZbZHJ2X2luZGV4XS5ibG9ja19zaXplKTsKKworCQloLT5kcnZbZHJ2X2luZGV4XS5xdWV1ZSA9IGRpc2stPnF1ZXVlOworCQlhZGRfZGlzayhkaXNrKTsKKwl9CisKK2ZyZWVyZXQ6CisJa2ZyZWUoc2l6ZV9idWZmKTsKKwlrZnJlZShpbnFfYnVmZik7CisJcmV0dXJuOworbWVtX21zZzoKKwlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwlnb3RvIGZyZWVyZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIHRoZSBmaXJzdCBpbmRleCBvZiB0aGUgY29udHJvbGxlcnMgZHJpdmUgYXJyYXkKKyAqIHRoYXQgaGFzIGEgLTEgZm9yIHRoZSByYWlkX2xldmVsIGFuZCB3aWxsIHJldHVybiB0aGF0IGluZGV4LiAgVGhpcyBpcworICogd2hlcmUgbmV3IGRyaXZlcyB3aWxsIGJlIGFkZGVkLiAgSWYgdGhlIGluZGV4IHRvIGJlIHJldHVybmVkIGlzIGdyZWF0ZXIKKyAqIHRoYW4gdGhlIGhpZ2hlc3RfbHVuIGluZGV4IGZvciB0aGUgY29udHJvbGxlciB0aGVuIGhpZ2hlc3RfbHVuIGlzIHNldAorICogdG8gdGhpcyBuZXcgaW5kZXguICBJZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIGluZGV4ZXMgdGhlbiAtMSBpcyByZXR1cm5lZC4KKyovCitzdGF0aWMgaW50IGNjaXNzX2ZpbmRfZnJlZV9kcml2ZV9pbmRleChpbnQgY3RscikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWN0bHJfaW5mb190ICpoID0gZ2V0X2hvc3QoZGlzayk7Ci0JZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IGdldF9kcnYoZGlzayk7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaSA8IENJU1NfTUFYX0xVTjsgaSsrKXsKKwkJaWYgKGhiYVtjdGxyXS0+ZHJ2W2ldLnJhaWRfbGV2ZWwgPT0gLTEpeworCQkJaWYgKGkgPiBoYmFbY3Rscl0tPmhpZ2hlc3RfbHVuKQorCQkJCWhiYVtjdGxyXS0+aGlnaGVzdF9sdW4gPSBpOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGFuZCByZW1vdmUgbG9naWNhbCBkcml2ZXMgZnJvbSB0aGUgTG9naWNhbAorICogZHJpdmUgYXJyYXkgb2YgdGhlIGNvbnRyb2xsZXIgYW5kIG1haW50YWluIHBlcnNpc3RhbmN5IG9mIG9yZGVyaW5nCisgKiBzbyB0aGF0IG1vdW50IHBvaW50cyBhcmUgcHJlc2VydmVkIHVudGlsIHRoZSBuZXh0IHJlYm9vdC4gIFRoaXMgYWxsb3dzCisgKiBmb3IgdGhlIHJlbW92YWwgb2YgbG9naWNhbCBkcml2ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZHJpdmUgYXJyYXkKKyAqIHdpdGhvdXQgYSByZS1vcmRlcmluZyBvZiB0aG9zZSBkcml2ZXMuCisgKiBJTlBVVAorICogaAkJPSBUaGUgY29udHJvbGxlciB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb25zIG9uCisgKiBkZWxfZGlzawk9IFRoZSBkaXNrIHRvIHJlbW92ZSBpZiBzcGVjaWZpZWQuICBJZiB0aGUgdmFsdWUgZ2l2ZW4KKyAqCQkgIGlzIE5VTEwgdGhlbiBubyBkaXNrIGlzIHJlbW92ZWQuCisqLworc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgc3RydWN0IGdlbmRpc2sgKmRlbF9kaXNrKQorewogCWludCBjdGxyID0gaC0+Y3RscjsKKwlpbnQgbnVtX2x1bnM7CisJUmVwb3J0THVuRGF0YV9zdHJ1Y3QgKmxkX2J1ZmYgPSBOVUxMOworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSBOVUxMOworCWludCByZXR1cm5fY29kZTsKKwlpbnQgbGlzdGxlbmd0aCA9IDA7CisJaW50IGk7CisJaW50IGRydl9mb3VuZDsKKwlpbnQgZHJ2X2luZGV4ID0gMDsKKwlfX3UzMiBsdW5pZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFNldCBidXN5X2NvbmZpZ3VyaW5nIGZsYWcgZm9yIHRoaXMgb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCWlmIChoLT5udW1fbHVucyA+PSBDSVNTX01BWF9MVU4peworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaC0+YnVzeV9jb25maWd1cmluZyA9IDE7CisKKwkvKiBpZiBkZWxfZGlzayBpcyBOVUxMIHRoZW4gd2UgYXJlIGJlaW5nIGNhbGxlZCB0byBhZGQgYSBuZXcgZGlzaworCSAqIGFuZCB1cGRhdGUgdGhlIGxvZ2ljYWwgZHJpdmUgdGFibGUuICBJZiBpdCBpcyBub3QgTlVMTCB0aGVuCisJICogd2Ugd2lsbCBjaGVjayBpZiB0aGUgZGlzayBpcyBpbiB1c2Ugb3Igbm90LgorCSAqLworCWlmIChkZWxfZGlzayAhPSBOVUxMKXsKKwkJZHJ2ID0gZ2V0X2RydihkZWxfZGlzayk7CisJCWRydi0+YnVzeV9jb25maWd1cmluZyA9IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlyZXR1cm5fY29kZSA9IGRlcmVnaXN0ZXJfZGlzayhkZWxfZGlzaywgZHJ2LCAxKTsKKwkJZHJ2LT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKKwkJaC0+YnVzeV9jb25maWd1cmluZyA9IDA7CisJCXJldHVybiByZXR1cm5fY29kZTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlsZF9idWZmID0ga3phbGxvYyhzaXplb2YoUmVwb3J0THVuRGF0YV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGxkX2J1ZmYgPT0gTlVMTCkKKwkJCWdvdG8gbWVtX21zZzsKKworCQlyZXR1cm5fY29kZSA9IHNlbmRjbWRfd2l0aGlycShDSVNTX1JFUE9SVF9MT0csIGN0bHIsIGxkX2J1ZmYsCisJCQkJc2l6ZW9mKFJlcG9ydEx1bkRhdGFfc3RydWN0KSwgMCwgMCwgMCwKKwkJCQlUWVBFX0NNRCk7CisKKwkJaWYgKHJldHVybl9jb2RlID09IElPX09LKXsKKwkJCWxpc3RsZW5ndGggfD0gKDB4ZmYgJiAodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzBdKSkgPDwgMjQ7CisJCQlsaXN0bGVuZ3RoIHw9ICgweGZmICYgKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOTGlzdExlbmd0aFsxXSkpIDw8IDE2OworCQkJbGlzdGxlbmd0aCB8PSAoMHhmZiAmICh1bnNpZ25lZCBpbnQpKGxkX2J1ZmYtPkxVTkxpc3RMZW5ndGhbMl0pKSA8PCA4OworCQkJbGlzdGxlbmd0aCB8PSAweGZmICYgKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOTGlzdExlbmd0aFszXSk7CisJCX0gZWxzZXsgLyogcmVhZGluZyBudW1iZXIgb2YgbG9naWNhbCB2b2x1bWVzIGZhaWxlZCAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IHJlcG9ydCBsb2dpY2FsIHZvbHVtZSIKKwkJCQkiIGNvbW1hbmQgZmFpbGVkXG4iKTsKKwkJCWxpc3RsZW5ndGggPSAwOworCQkJZ290byBmcmVlcmV0OworCQl9CisKKwkJbnVtX2x1bnMgPSBsaXN0bGVuZ3RoIC8gODsJLyogOCBieXRlcyBwZXIgZW50cnkgKi8KKwkJaWYgKG51bV9sdW5zID4gQ0lTU19NQVhfTFVOKXsKKwkJCW51bV9sdW5zID0gQ0lTU19NQVhfTFVOOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IG1vcmUgbHVucyBjb25maWd1cmVkIgorCQkJCSIgb24gY29udHJvbGxlciB0aGFuIGNhbiBiZSBoYW5kbGVkIGJ5IgorCQkJCSIgdGhpcyBkcml2ZXIuXG4iKTsKKwkJfQorCisJCS8qIENvbXBhcmUgY29udHJvbGxlciBkcml2ZSBhcnJheSB0byBkcml2ZXJzIGRyaXZlIGFycmF5LgorCSAJKiBDaGVjayBmb3IgdXBkYXRlcyBpbiB0aGUgZHJpdmUgaW5mb3JtYXRpb24gYW5kIGFueSBuZXcgZHJpdmVzCisJIAkqIG9uIHRoZSBjb250cm9sbGVyLgorCSAJKi8KKwkJZm9yIChpPTA7IGkgPCBudW1fbHVuczsgaSsrKXsKKwkJCWludCBqOworCisJCQlkcnZfZm91bmQgPSAwOworCisJICAJCWx1bmlkID0gKDB4ZmYgJgorCQkJCSh1bnNpZ25lZCBpbnQpKGxkX2J1ZmYtPkxVTltpXVszXSkpIDw8IDI0OworICAgICAgICAJCWx1bmlkIHw9ICgweGZmICYKKwkJCQkodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5baV1bMl0pKSA8PCAxNjsKKyAgICAgICAgCQlsdW5pZCB8PSAoMHhmZiAmCisJCQkJKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOW2ldWzFdKSkgPDwgODsKKyAgICAgICAgCQlsdW5pZCB8PSAweGZmICYKKwkJCQkodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5baV1bMF0pOworCisJCQkvKiBGaW5kIGlmIHRoZSBMVU4gaXMgYWxyZWFkeSBpbiB0aGUgZHJpdmUgYXJyYXkKKwkJCSAqIG9mIHRoZSBjb250cm9sbGVyLiAgSWYgc28gdGhlbiB1cGRhdGUgaXRzIGluZm8KKwkJCSAqIGlmIG5vdCBpcyB1c2UuICBJZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGZpbmQKKwkJCSAqIHRoZSBmaXJzdCBmcmVlIGluZGV4IGFuZCBhZGQgaXQuCisJCQkqLworCQkJZm9yIChqPTA7IGogPD0gaC0+aGlnaGVzdF9sdW47IGorKyl7CisJCQkJaWYgKGgtPmRydltqXS5MdW5JRCA9PSBsdW5pZCl7CisJCQkJCWRydl9pbmRleCA9IGo7CisJCQkJCWRydl9mb3VuZCA9IDE7CisJCQkJfQorCQkJfQorCisJCQkvKiBjaGVjayBpZiB0aGUgZHJpdmUgd2FzIGZvdW5kIGFscmVhZHkgaW4gdGhlIGFycmF5ICovCisJCQlpZiAoIWRydl9mb3VuZCl7CisJCQkJZHJ2X2luZGV4ID0gY2Npc3NfZmluZF9mcmVlX2RyaXZlX2luZGV4KGN0bHIpOworCQkJCWlmIChkcnZfaW5kZXggPT0gLTEpCisJCQkJCWdvdG8gZnJlZXJldDsKKworCQkJfQorCQkJaC0+ZHJ2W2Rydl9pbmRleF0uTHVuSUQgPSBsdW5pZDsKKwkJCWNjaXNzX3VwZGF0ZV9kcml2ZV9pbmZvKGN0bHIsIGRydl9pbmRleCk7CisJCX0gLyogZW5kIGZvciAqLworCX0gLyogZW5kIGVsc2UgKi8KKworZnJlZXJldDoKKwlrZnJlZShsZF9idWZmKTsKKwloLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKKwkvKiBXZSByZXR1cm4gLTEgaGVyZSB0byB0ZWxsIHRoZSBBQ1UgdGhhdCB3ZSBoYXZlIHJlZ2lzdGVyZWQvdXBkYXRlZAorCSAqIGFsbCBvZiB0aGUgZHJpdmVzIHRoYXQgd2UgY2FuIGFuZCB0byBrZWVwIGl0IGZyb20gY2FsbGluZyB1cworCSAqIGFkZGl0aW9uYWwgdGltZXMuCisJKi8KKwlyZXR1cm4gLTE7CittZW1fbXNnOgorCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IG91dCBvZiBtZW1vcnlcbiIpOworCWdvdG8gZnJlZXJldDsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGRlcmVnaXN0ZXIgdGhlIGRpc2sgYW5kIGl0J3MgcXVldWUgZnJvbSB0aGUKKyAqIGtlcm5lbC4gIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgbG9jayBoZWxkIGFuZCB0aGUKKyAqIGRydiBzdHJ1Y3R1cmVzIGJ1c3lfY29uZmlndXJpbmcgZmxhZyBzZXQuICBJdCdzIHBhcmFtZXRlcnMgYXJlOgorICoKKyAqIGRpc2sgPSBUaGlzIGlzIHRoZSBkaXNrIHRvIGJlIGRlcmVnaXN0ZXJlZAorICogZHJ2ICA9IFRoaXMgaXMgdGhlIGRyaXZlX2luZm9fc3RydWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzayB0byBiZQorICogICAgICAgIGRlcmVnaXN0ZXJlZC4gIEl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaXNrIHVzZWQKKyAqICAgICAgICBieSB0aGUgZHJpdmVyLgorICogY2xlYXJfYWxsID0gVGhpcyBmbGFnIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIGRpc2sgaW5mb3JtYXRpb24KKyAqICAgICAgICAgICAgIGlzIGdvaW5nIHRvIGJlIGNvbXBsZXRlbHkgY2xlYXJlZCBvdXQgYW5kIHRoZSBoaWdoZXN0X2x1bgorICogICAgICAgICAgICAgcmVzZXQuICBTb21ldGltZXMgd2Ugd2FudCB0byBjbGVhciBvdXQgaW5mb3JtYXRpb24gYWJvdXQKKyAqICAgICAgICAgICAgIHRoZSBkaXNrIGluIHByZXBlcmF0aW9uIGZvciByZS1hZGRpbmcgaXQuICBJbiB0aGlzIGNhc2UKKyAqICAgICAgICAgICAgIHRoZSBoaWdoZXN0X2x1biBzaG91bGQgYmUgbGVmdCB1bmNoYW5nZWQgYW5kIHRoZSBMdW5JRAorICogICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSBjbGVhcmVkLgorKi8KK3N0YXRpYyBpbnQgZGVyZWdpc3Rlcl9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2LAorCQkJICAgaW50IGNsZWFyX2FsbCkKK3sKKwljdGxyX2luZm9fdCAqaCA9IGdldF9ob3N0KGRpc2spOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwogCS8qIG1ha2Ugc3VyZSBsb2dpY2FsIHZvbHVtZSBpcyBOT1QgaXMgdXNlICovCi0JaWYoIGRydi0+dXNhZ2VfY291bnQgPiAxKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOworCWlmKGNsZWFyX2FsbCB8fCAoaC0+Z2VuZGlza1swXSA9PSBkaXNrKSkgeworCWlmIChkcnYtPnVzYWdlX2NvdW50ID4gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwogCX0KLQlkcnYtPnVzYWdlX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgCWlmKCBkcnYtPnVzYWdlX2NvdW50ID4gMCApCisgICAgICAgICAgICAgICAgCXJldHVybiAtRUJVU1k7CiAKLQkvKiBpbnZhbGlkYXRlIHRoZSBkZXZpY2VzIGFuZCBkZXJlZ2lzdGVyIHRoZSBkaXNrICovIAotCWlmIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKQorCS8qIGludmFsaWRhdGUgdGhlIGRldmljZXMgYW5kIGRlcmVnaXN0ZXIgdGhlIGRpc2suICBJZiBpdCBpcyBkaXNrCisJICogemVybyBkbyBub3QgZGVyZWdpc3RlciBpdCBidXQganVzdCB6ZXJvIG91dCBpdCdzIHZhbHVlcy4gIFRoaXMKKwkgKiBhbGxvd3MgdXMgdG8gZGVsZXRlIGRpc2sgemVybyBidXQga2VlcCB0aGUgY29udHJvbGxlciByZWdpc3RlcmVkLgorCSovCisJaWYgKGgtPmdlbmRpc2tbMF0gIT0gZGlzayl7CisJCWlmIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKXsKKwkJCWJsa19jbGVhbnVwX3F1ZXVlKGRpc2stPnF1ZXVlKTsKIAkJZGVsX2dlbmRpc2soZGlzayk7CisJCQlkcnYtPnF1ZXVlID0gTlVMTDsKKwkJfQorCX0KKworCS0taC0+bnVtX2x1bnM7CisJLyogemVybyBvdXQgdGhlIGRpc2sgc2l6ZSBpbmZvICovCisJZHJ2LT5ucl9ibG9ja3MgPSAwOworCWRydi0+YmxvY2tfc2l6ZSA9IDA7CisJZHJ2LT5oZWFkcyA9IDA7CisJZHJ2LT5zZWN0b3JzID0gMDsKKwlkcnYtPmN5bGluZGVycyA9IDA7CisJZHJ2LT5yYWlkX2xldmVsID0gLTE7CS8qIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIHZhcmlhYmxlIHRvCisJCQkJICogaW5kaWNhdGUgdGhhdCB0aGlzIGVsZW1lbnQgb2YgdGhlIGRyaXZlCisJCQkJICogYXJyYXkgaXMgZnJlZS4KKwkJCQkqLworCisJaWYgKGNsZWFyX2FsbCl7CiAJLyogY2hlY2sgdG8gc2VlIGlmIGl0IHdhcyB0aGUgbGFzdCBkaXNrICovCiAJaWYgKGRydiA9PSBoLT5kcnYgKyBoLT5oaWdoZXN0X2x1bikgewogCQkvKiBpZiBzbywgZmluZCB0aGUgbmV3IGhpZ2h0ZXN0IGx1biAqLwogCQlpbnQgaSwgbmV3aGlnaGVzdCA9LTE7CiAJCWZvcihpPTA7IGk8aC0+aGlnaGVzdF9sdW47IGkrKykgewogCQkJLyogaWYgdGhlIGRpc2sgaGFzIHNpemUgPiAwLCBpdCBpcyBhdmFpbGFibGUgKi8KLQkJCWlmIChoLT5kcnZbaV0ubnJfYmxvY2tzKQorCQkJCWlmIChoLT5kcnZbaV0uaGVhZHMpCiAJCQkJbmV3aGlnaGVzdCA9IGk7CiAJCX0KIAkJaC0+aGlnaGVzdF9sdW4gPSBuZXdoaWdoZXN0OwotCQkJCQogCX0KLQktLWgtPm51bV9sdW5zOwotCS8qIHplcm8gb3V0IHRoZSBkaXNrIHNpemUgaW5mbyAqLyAKLQlkcnYtPm5yX2Jsb2NrcyA9IDA7Ci0JZHJ2LT5ibG9ja19zaXplID0gMDsKLQlkcnYtPmN5bGluZGVycyA9IDA7CisKIAlkcnYtPkx1bklEID0gMDsKKwl9CiAJcmV0dXJuKDApOwogfQorCiBzdGF0aWMgaW50IGZpbGxfY21kKENvbW1hbmRMaXN0X3N0cnVjdCAqYywgX191OCBjbWQsIGludCBjdGxyLCB2b2lkICpidWZmLAogCXNpemVfdCBzaXplLAogCXVuc2lnbmVkIGludCB1c2VfdW5pdF9udW0sIC8qIDA6IGFkZHJlc3MgdGhlIGNvbnRyb2xsZXIsCkBAIC0xNDIwLDggKzE3MjcsMTAgQEAKIAkJfQogCX0JCiAJLyogdW5sb2NrIHRoZSBidWZmZXJzIGZyb20gRE1BICovCisJYnVmZl9kbWFfaGFuZGxlLnZhbDMyLmxvd2VyID0gYy0+U0dbMF0uQWRkci5sb3dlcjsKKwlidWZmX2RtYV9oYW5kbGUudmFsMzIudXBwZXIgPSBjLT5TR1swXS5BZGRyLnVwcGVyOwogCXBjaV91bm1hcF9zaW5nbGUoIGgtPnBkZXYsIChkbWFfYWRkcl90KSBidWZmX2RtYV9oYW5kbGUudmFsLAotCQkJc2l6ZSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJCWMtPlNHWzBdLkxlbiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAljbWRfZnJlZShoLCBjLCAwKTsKICAgICAgICAgcmV0dXJuKHJldHVybl9zdGF0dXMpOwogCkBAIC0xNDk1LDE2NCArMTgwNCw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IHJlZ2lzdGVyX25ld19kaXNrKGN0bHJfaW5mb190ICpoKQotewotICAgICAgICBzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKLQlpbnQgY3RsciA9IGgtPmN0bHI7Ci0gICAgICAgIGludCBpOwotCWludCBudW1fbHVuczsKLQlpbnQgbG9ndm9sOwotCWludCBuZXdfbHVuX2ZvdW5kID0gMDsKLQlpbnQgbmV3X2x1bl9pbmRleCA9IDA7Ci0JaW50IGZyZWVfaW5kZXhfZm91bmQgPSAwOwotCWludCBmcmVlX2luZGV4ID0gMDsKLQlSZXBvcnRMdW5EYXRhX3N0cnVjdCAqbGRfYnVmZiA9IE5VTEw7Ci0JUmVhZENhcGRhdGFfc3RydWN0ICpzaXplX2J1ZmYgPSBOVUxMOwotCUlucXVpcnlEYXRhX3N0cnVjdCAqaW5xX2J1ZmYgPSBOVUxMOwotCWludCByZXR1cm5fY29kZTsKLQlpbnQgbGlzdGxlbmd0aCA9IDA7Ci0JX191MzIgbHVuaWQgPSAwOwotCXVuc2lnbmVkIGludCBibG9ja19zaXplOwotCXVuc2lnbmVkIGludCB0b3RhbF9zaXplOwotCi0gICAgICAgIGlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOwotCS8qIGlmIHdlIGhhdmUgbm8gc3BhY2UgaW4gb3VyIGRpc2sgYXJyYXkgbGVmdCB0byBhZGQgYW55dGhpbmcgKi8KLQlpZiggIGgtPm51bV9sdW5zID49IENJU1NfTUFYX0xVTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCi0JbGRfYnVmZiA9IGttYWxsb2Moc2l6ZW9mKFJlcG9ydEx1bkRhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGxkX2J1ZmYgPT0gTlVMTCkKLQkJZ290byBtZW1fbXNnOwotCW1lbXNldChsZF9idWZmLCAwLCBzaXplb2YoUmVwb3J0THVuRGF0YV9zdHJ1Y3QpKTsKLQlzaXplX2J1ZmYgPSBrbWFsbG9jKHNpemVvZiggUmVhZENhcGRhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIGlmIChzaXplX2J1ZmYgPT0gTlVMTCkKLQkJZ290byBtZW1fbXNnOwotCWlucV9idWZmID0ga21hbGxvYyhzaXplb2YoIElucXVpcnlEYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOwotICAgICAgICBpZiAoaW5xX2J1ZmYgPT0gTlVMTCkKLQkJZ290byBtZW1fbXNnOwotCQotCXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKENJU1NfUkVQT1JUX0xPRywgY3RsciwgbGRfYnVmZiwgCi0JCQlzaXplb2YoUmVwb3J0THVuRGF0YV9zdHJ1Y3QpLCAwLCAwLCAwLCBUWVBFX0NNRCk7Ci0KLQlpZiggcmV0dXJuX2NvZGUgPT0gSU9fT0spCi0JewotCQkKLQkJLy8gcHJpbnRrKCJMVU4gRGF0YVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCi0JCWxpc3RsZW5ndGggfD0gKDB4ZmYgJiAodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzBdKSkgPDwgMjQ7Ci0JCWxpc3RsZW5ndGggfD0gKDB4ZmYgJiAodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzFdKSkgPDwgMTY7Ci0JCWxpc3RsZW5ndGggfD0gKDB4ZmYgJiAodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzJdKSkgPDwgODsJCi0JCWxpc3RsZW5ndGggfD0gMHhmZiAmICh1bnNpZ25lZCBpbnQpKGxkX2J1ZmYtPkxVTkxpc3RMZW5ndGhbM10pOwotCX0gZWxzZSAvKiByZWFkaW5nIG51bWJlciBvZiBsb2dpY2FsIHZvbHVtZXMgZmFpbGVkICovCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogcmVwb3J0IGxvZ2ljYWwgdm9sdW1lIgotCQkJIiBjb21tYW5kIGZhaWxlZFxuIik7Ci0JCWxpc3RsZW5ndGggPSAwOwotCQlnb3RvIGZyZWVfZXJyOwotCX0KLQludW1fbHVucyA9IGxpc3RsZW5ndGggLyA4OyAvLyA4IGJ5dGVzIHByZSBlbnRyeQotCWlmIChudW1fbHVucyA+IENJU1NfTUFYX0xVTikKLQl7Ci0JCW51bV9sdW5zID0gQ0lTU19NQVhfTFVOOwotCX0KLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJMZW5ndGggPSAleCAleCAleCAleCA9ICVkXG4iLCBsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzBdLAotCQlsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzFdLCBsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzJdLAotCQlsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzNdLCAgbnVtX2x1bnMpOwotI2VuZGlmIAotCWZvcihpPTA7IGk8ICBudW1fbHVuczsgaSsrKQotCXsKLQkJaW50IGo7Ci0JCWludCBsdW5JRF9mb3VuZCA9IDA7Ci0KLQkgIAlsdW5pZCA9ICgweGZmICYgKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOW2ldWzNdKSkgPDwgMjQ7Ci0gICAgICAgIAlsdW5pZCB8PSAoMHhmZiAmICh1bnNpZ25lZCBpbnQpKGxkX2J1ZmYtPkxVTltpXVsyXSkpIDw8IDE2OwotICAgICAgICAJbHVuaWQgfD0gKDB4ZmYgJiAodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5baV1bMV0pKSA8PCA4OwotICAgICAgICAJbHVuaWQgfD0gMHhmZiAmICh1bnNpZ25lZCBpbnQpKGxkX2J1ZmYtPkxVTltpXVswXSk7Ci0JCQotIAkJLyogY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSBuZXcgbHVuICovIAotCQlmb3Ioaj0wOyBqIDw9IGgtPmhpZ2hlc3RfbHVuOyBqKyspCi0JCXsKLSNpZmRlZiBDQ0lTU19ERUJVRwotCQkJcHJpbnRrKCJDaGVja2luZyAlZCAleCBhZ2FpbnN0ICV4XG4iLCBqLGgtPmRydltqXS5MdW5JRCwKLQkJCQkJCWx1bmlkKTsKLSNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLwotCQkJaWYgKGgtPmRydltqXS5MdW5JRCA9PSBsdW5pZCkKLQkJCXsKLQkJCQlsdW5JRF9mb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkKLQkJfQotCQlpZiggbHVuSURfZm91bmQgPT0gMSkKLQkJCWNvbnRpbnVlOwotCQllbHNlCi0JCXsJLyogSXQgaXMgdGhlIG5ldyBsdW4gd2UgaGF2ZSBiZWVuIGxvb2tpbmcgZm9yICovCi0jaWZkZWYgQ0NJU1NfREVCVUcKLQkJCXByaW50aygibmV3IGx1biBmb3VuZCBhdCAlZFxuIiwgaSk7Ci0jZW5kaWYgLyogQ0NJU1NfREVCVUcgKi8KLQkJCW5ld19sdW5faW5kZXggPSBpOwotCQkJbmV3X2x1bl9mb3VuZCA9IDE7Ci0JCQlicmVhazsJCi0JCX0KLQkgfQotCSBpZiAoIW5ld19sdW5fZm91bmQpCi0JIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6ICBOZXcgTG9naWNhbCBWb2x1bWUgbm90IGZvdW5kXG4iKTsKLQkJZ290byBmcmVlX2VycjsKLQkgfQotCSAvKiBOb3cgZmluZCB0aGUgZnJlZSBpbmRleCAJKi8KLQlmb3IoaT0wOyBpIDxDSVNTX01BWF9MVU47IGkrKykKLQl7Ci0jaWZkZWYgQ0NJU1NfREVCVUcKLQkJcHJpbnRrKCJDaGVja2luZyBJbmRleCAlZFxuIiwgaSk7Ci0jZW5kaWYgLyogQ0NJU1NfREVCVUcgKi8KLQkJaWYoaC0+ZHJ2W2ldLkx1bklEID09IDApCi0JCXsKLSNpZmRlZiBDQ0lTU19ERUJVRwotCQkJcHJpbnRrKCJmcmVlIGluZGV4IGZvdW5kIGF0ICVkXG4iLCBpKTsKLSNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLwotCQkJZnJlZV9pbmRleF9mb3VuZCA9IDE7Ci0JCQlmcmVlX2luZGV4ID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghZnJlZV9pbmRleF9mb3VuZCkKLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiB1bmFibGUgdG8gZmluZCBmcmVlIHNsb3QgZm9yIGRpc2tcbiIpOwotCQlnb3RvIGZyZWVfZXJyOwotICAgICAgICAgfQotCi0JbG9ndm9sID0gZnJlZV9pbmRleDsKLQloLT5kcnZbbG9ndm9sXS5MdW5JRCA9IGx1bmlkOwotCQkvKiB0aGVyZSBjb3VsZCBiZSBnYXBzIGluIGx1biBudW1iZXJzLCB0cmFjayBoaWdodGVzdCAqLwotCWlmKGgtPmhpZ2hlc3RfbHVuIDwgbHVuaWQpCi0JCWgtPmhpZ2hlc3RfbHVuID0gbG9ndm9sOwotCWNjaXNzX3JlYWRfY2FwYWNpdHkoY3RsciwgbG9ndm9sLCBzaXplX2J1ZmYsIDEsCi0JCSZ0b3RhbF9zaXplLCAmYmxvY2tfc2l6ZSk7Ci0JY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShjdGxyLCBsb2d2b2wsIDEsIHRvdGFsX3NpemUsIGJsb2NrX3NpemUsCi0JCQlpbnFfYnVmZiwgJmgtPmRydltsb2d2b2xdKTsKLQloLT5kcnZbbG9ndm9sXS51c2FnZV9jb3VudCA9IDA7Ci0JKytoLT5udW1fbHVuczsKLQkvKiBzZXR1cCBwYXJ0aXRpb25zIHBlciBkaXNrICovCi0gICAgICAgIGRpc2sgPSBoLT5nZW5kaXNrW2xvZ3ZvbF07Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGgtPmRydltsb2d2b2xdLm5yX2Jsb2Nrcyk7Ci0JLyogaWYgaXQncyB0aGUgY29udHJvbGxlciBpdCdzIGFscmVhZHkgYWRkZWQgKi8KLQlpZihsb2d2b2wpCi0JCWFkZF9kaXNrKGRpc2spOwotZnJlZXJldDoKLQlrZnJlZShsZF9idWZmKTsKLQlrZnJlZShzaXplX2J1ZmYpOwotCWtmcmVlKGlucV9idWZmKTsKLQlyZXR1cm4gKGxvZ3ZvbCk7Ci1tZW1fbXNnOgotCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IG91dCBvZiBtZW1vcnlcbiIpOwotZnJlZV9lcnI6Ci0JbG9ndm9sID0gLTE7Ci0JZ290byBmcmVlcmV0OwotfQotCiBzdGF0aWMgaW50IGNjaXNzX3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJY3Rscl9pbmZvX3QgKmggPSBnZXRfaG9zdChkaXNrKTsKQEAgLTE4NTksOCArMjAxMCwxMCBAQAogCQkKIGNsZWFudXAxOgkKIAkvKiB1bmxvY2sgdGhlIGRhdGEgYnVmZmVyIGZyb20gRE1BICovCisJYnVmZl9kbWFfaGFuZGxlLnZhbDMyLmxvd2VyID0gYy0+U0dbMF0uQWRkci5sb3dlcjsKKwlidWZmX2RtYV9oYW5kbGUudmFsMzIudXBwZXIgPSBjLT5TR1swXS5BZGRyLnVwcGVyOwogCXBjaV91bm1hcF9zaW5nbGUoaW5mb19wLT5wZGV2LCAoZG1hX2FkZHJfdCkgYnVmZl9kbWFfaGFuZGxlLnZhbCwKLQkJCQlzaXplLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJCWMtPlNHWzBdLkxlbiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAljbWRfZnJlZShpbmZvX3AsIGMsIDEpOwogCXJldHVybiAoc3RhdHVzKTsKIH0gCkBAIC0yMTExLDcgKzIyNjQsMTEgQEAKIAkvKiBmaWxsIGluIHRoZSByZXF1ZXN0ICovIAogCWRydiA9IGNyZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAvLyB1bnVzZWQgaW4gc2ltcGxlIG1vZGUKLQljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsgIC8vIHVzZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0aGUgY21kIGJsb2NrIGZvciB0YWcKKwkvKiBnb3QgY29tbWFuZCBmcm9tIHBvb2wsIHNvIHVzZSB0aGUgY29tbWFuZCBibG9jayBpbmRleCBpbnN0ZWFkICovCisJLyogZm9yIGRpcmVjdCBsb29rdXBzLiAqLworCS8qIFRoZSBmaXJzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBjb250cm9sbGVyIGVycm9yIHJlcG9ydGluZy4gKi8KKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gKGMtPmNtZGluZGV4IDw8IDMpOworCWMtPkhlYWRlci5UYWcubG93ZXIgfD0gMHgwNDsgLyogZmxhZyBmb3IgZGlyZWN0IGxvb2t1cC4gKi8KIAljLT5IZWFkZXIuTFVOLkxvZ0Rldi5Wb2xJZD0gZHJ2LT5MdW5JRDsKIAljLT5IZWFkZXIuTFVOLkxvZ0Rldi5Nb2RlID0gMTsKIAljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOyAvLyAxMiBieXRlIGNvbW1hbmRzIG5vdCBpbiBGVyB5ZXQ7CkBAIC0yMTg2LDcgKzIzNDMsNyBAQAogCWN0bHJfaW5mb190ICpoID0gZGV2X2lkOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCV9fdTMyIGEsIGExOworCV9fdTMyIGEsIGExLCBhMjsKIAlpbnQgajsKIAlpbnQgc3RhcnRfcXVldWUgPSBoLT5uZXh0X3RvX3J1bjsKIApAQCAtMjIwNCwxMCArMjM2MSwyMSBAQAogCQl3aGlsZSgoYSA9IGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoKSkgIT0gRklGT19FTVBUWSkgCiAJCXsKIAkJCWExID0gYTsKKwkJCWlmICgoYSAmIDB4MDQpKSB7CisJCQkJYTIgPSAoYSA+PiAzKTsKKwkJCQlpZiAoYTIgPj0gTlJfQ01EUykgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY29udHJvbGxlciBjY2lzcyVkIGZhaWxlZCwgc3RvcHBpbmcuXG4iLCBoLT5jdGxyKTsKKwkJCQkJZmFpbF9hbGxfY21kcyhoLT5jdGxyKTsKKwkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJCX0KKworCQkJCWMgPSBoLT5jbWRfcG9vbCArIGEyOworCQkJCWEgPSBjLT5idXNhZGRyOworCisJCQl9IGVsc2UgewogCQkJYSAmPSB+MzsKLQkJCWlmICgoYyA9IGgtPmNtcFEpID09IE5VTEwpCi0JCQl7ICAKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogQ29tcGxldGlvbiBvZiAlMDhseCBpZ25vcmVkXG4iLCAodW5zaWduZWQgbG9uZylhMSk7CisJCQkJaWYgKChjID0gaC0+Y21wUSkgPT0gTlVMTCkgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogQ29tcGxldGlvbiBvZiAlMDh4IGlnbm9yZWRcbiIsIGExKTsKIAkJCQljb250aW51ZTsJCiAJCQl9IAogCQkJd2hpbGUoYy0+YnVzYWRkciAhPSBhKSB7CkBAIC0yMjE1LDYgKzIzODMsNyBAQAogCQkJCWlmIChjID09IGgtPmNtcFEpIAogCQkJCQlicmVhazsKIAkJCX0KKwkJCX0KIAkJCS8qCiAJCQkgKiBJZiB3ZSd2ZSBmb3VuZCB0aGUgY29tbWFuZCwgdGFrZSBpdCBvZmYgdGhlCiAJCQkgKiBjb21wbGV0aW9uIFEgYW5kIGZyZWUgaXQKQEAgLTI2MzQsMTIgKzI4MDMsMTYgQEAKICNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLwogCiAJaGJhW2NudGxfbnVtXS0+aGlnaGVzdF9sdW4gPSBoYmFbY250bF9udW1dLT5udW1fbHVucy0xOwotCWZvcihpPTA7IGk8ICBoYmFbY250bF9udW1dLT5udW1fbHVuczsgaSsrKQorLy8JZm9yKGk9MDsgaTwgIGhiYVtjbnRsX251bV0tPm51bV9sdW5zOyBpKyspCisJZm9yKGk9MDsgaSA8IENJU1NfTUFYX0xVTjsgaSsrKQogCXsKLQotCSAgCWx1bmlkID0gKDB4ZmYgJiAodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5baV1bM10pKSA8PCAyNDsKLSAgICAgICAgCWx1bmlkIHw9ICgweGZmICYgKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOW2ldWzJdKSkgPDwgMTY7Ci0gICAgICAgIAlsdW5pZCB8PSAoMHhmZiAmICh1bnNpZ25lZCBpbnQpKGxkX2J1ZmYtPkxVTltpXVsxXSkpIDw8IDg7CisJCWlmIChpIDwgaGJhW2NudGxfbnVtXS0+bnVtX2x1bnMpeworCQkgIAlsdW5pZCA9ICgweGZmICYgKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOW2ldWzNdKSkKKwkJCQkgPDwgMjQ7CisgICAgICAgIAkJbHVuaWQgfD0gKDB4ZmYgJiAodW5zaWduZWQgaW50KShsZF9idWZmLT5MVU5baV1bMl0pKQorCQkJCSA8PCAxNjsKKyAgICAgICAgCQlsdW5pZCB8PSAoMHhmZiAmICh1bnNpZ25lZCBpbnQpKGxkX2J1ZmYtPkxVTltpXVsxXSkpCisJCQkJIDw8IDg7CiAgICAgICAgIAlsdW5pZCB8PSAweGZmICYgKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOW2ldWzBdKTsKIAkJCiAJCWhiYVtjbnRsX251bV0tPmRydltpXS5MdW5JRCA9IGx1bmlkOwpAQCAtMjY0NywxMyArMjgyMCwxOCBAQAogCiAjaWZkZWYgQ0NJU1NfREVCVUcKIAkgIAlwcmludGsoS0VSTl9ERUJVRyAiTFVOWyVkXTogICV4ICV4ICV4ICV4ID0gJXhcbiIsIGksIAotCQlsZF9idWZmLT5MVU5baV1bMF0sIGxkX2J1ZmYtPkxVTltpXVsxXSxsZF9idWZmLT5MVU5baV1bMl0sIAotCQlsZF9idWZmLT5MVU5baV1bM10sIGhiYVtjbnRsX251bV0tPmRydltpXS5MdW5JRCk7CisJCQlsZF9idWZmLT5MVU5baV1bMF0sIGxkX2J1ZmYtPkxVTltpXVsxXSwKKwkJCWxkX2J1ZmYtPkxVTltpXVsyXSwgbGRfYnVmZi0+TFVOW2ldWzNdLAorCQkJaGJhW2NudGxfbnVtXS0+ZHJ2W2ldLkx1bklEKTsKICNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLwogCQljY2lzc19yZWFkX2NhcGFjaXR5KGNudGxfbnVtLCBpLCBzaXplX2J1ZmYsIDAsCiAJCQkmdG90YWxfc2l6ZSwgJmJsb2NrX3NpemUpOwotCQljY2lzc19nZW9tZXRyeV9pbnF1aXJ5KGNudGxfbnVtLCBpLCAwLCB0b3RhbF9zaXplLCBibG9ja19zaXplLAotCQkJaW5xX2J1ZmYsICZoYmFbY250bF9udW1dLT5kcnZbaV0pOworCQkJY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShjbnRsX251bSwgaSwgMCwgdG90YWxfc2l6ZSwKKwkJCQlibG9ja19zaXplLCBpbnFfYnVmZiwgJmhiYVtjbnRsX251bV0tPmRydltpXSk7CisJCX0gZWxzZSB7CisJCQkvKiBpbml0aWFsaXplIHJhaWRfbGV2ZWwgdG8gaW5kaWNhdGUgYSBmcmVlIHNwYWNlICovCisJCQloYmFbY250bF9udW1dLT5kcnZbaV0ucmFpZF9sZXZlbCA9IC0xOworCQl9CiAJfQogCWtmcmVlKGxkX2J1ZmYpOwogCWtmcmVlKHNpemVfYnVmZik7CkBAIC0yNzI3LDYgKzI5MDUsOSBAQAogCWkgPSBhbGxvY19jY2lzc19oYmEoKTsKIAlpZihpIDwgMCkKIAkJcmV0dXJuICgtMSk7CisKKwloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMTsKKwogCWlmIChjY2lzc19wY2lfaW5pdChoYmFbaV0sIHBkZXYpICE9IDApCiAJCWdvdG8gY2xlYW4xOwogCkBAIC0yODA3LDYgKzI5ODgsNyBAQAogCWhiYVtpXS0+YWNjZXNzLnNldF9pbnRyX21hc2soaGJhW2ldLCBDQ0lTU19JTlRSX09OKTsKIAogCWNjaXNzX3Byb2Npbml0KGkpOworCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwogCiAJZm9yKGo9MDsgaiA8IE5XRDsgaisrKSB7IC8qIG1mbSAqLwogCQlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gJihoYmFbaV0tPmRydltqXSk7CkBAIC0yODY5LDYgKzMwNTEsNyBAQAogY2xlYW4xOgogCXJlbGVhc2VfaW9fbWVtKGhiYVtpXSk7CiAJZnJlZV9oYmEoaSk7CisJaGJhW2ldLT5idXN5X2luaXRpYWxpemluZyA9IDA7CiAJcmV0dXJuKC0xKTsKIH0KIApAQCAtMjkxMyw5ICszMDk2LDEwIEBACiAJLyogcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2sgbGlzdCAqLwogCWZvciAoaiA9IDA7IGogPCBOV0Q7IGorKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGhiYVtpXS0+Z2VuZGlza1tqXTsKLQkJaWYgKGRpc2stPmZsYWdzICYgR0VOSERfRkxfVVApCi0JCQlibGtfY2xlYW51cF9xdWV1ZShkaXNrLT5xdWV1ZSk7CisJCWlmIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKSB7CiAJCQlkZWxfZ2VuZGlzayhkaXNrKTsKKwkJCWJsa19jbGVhbnVwX3F1ZXVlKGRpc2stPnF1ZXVlKTsKKwkJfQogCX0KIAogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5wZGV2LCBOUl9DTURTICogc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCksCkBAIC0yOTY0LDUgKzMxNDgsNDMgQEAKIAlyZW1vdmVfcHJvY19lbnRyeSgiY2Npc3MiLCBwcm9jX3Jvb3RfZHJpdmVyKTsKIH0KIAorc3RhdGljIHZvaWQgZmFpbF9hbGxfY21kcyh1bnNpZ25lZCBsb25nIGN0bHIpCit7CisJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBib2FyZCBpcyBhcHBhcmVudGx5IGRlYWQuICovCisJY3Rscl9pbmZvX3QgKmggPSBoYmFbY3Rscl07CisJQ29tbWFuZExpc3Rfc3RydWN0ICpjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBjb250cm9sbGVyIG5vdCByZXNwb25kaW5nLlxuIiwgaC0+Y3Rscik7CisJaC0+YWxpdmUgPSAwOwkvKiB0aGUgY29udHJvbGxlciBhcHBhcmVudGx5IGRpZWQuLi4gKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShoLT5wZGV2KTsgLyogTWFrZSBzdXJlIGl0IGlzIHJlYWxseSBkZWFkLiAqLworCisJLyogbW92ZSBldmVyeXRoaW5nIG9mZiB0aGUgcmVxdWVzdCBxdWV1ZSBvbnRvIHRoZSBjb21wbGV0ZWQgcXVldWUgKi8KKwl3aGlsZSggKGMgPSBoLT5yZXFRKSAhPSBOVUxMICkgeworCQlyZW1vdmVRKCYoaC0+cmVxUSksIGMpOworCQloLT5RZGVwdGgtLTsKKwkJYWRkUSAoJihoLT5jbXBRKSwgYyk7CisJfQorCisJLyogTm93LCBmYWlsIGV2ZXJ5dGhpbmcgb24gdGhlIGNvbXBsZXRlZCBxdWV1ZSB3aXRoIGEgSFcgZXJyb3IgKi8KKwl3aGlsZSggKGMgPSBoLT5jbXBRKSAhPSBOVUxMICkgeworCQlyZW1vdmVRKCZoLT5jbXBRLCBjKTsKKwkJYy0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgPSBDTURfSEFSRFdBUkVfRVJSOworCQlpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX1JXUkVRKSB7CisJCQljb21wbGV0ZV9jb21tYW5kKGgsIGMsIDApOworCQl9IGVsc2UgaWYgKGMtPmNtZF90eXBlID09IENNRF9JT0NUTF9QRU5EKQorCQkJY29tcGxldGUoYy0+d2FpdGluZyk7CisjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCisJCQllbHNlIGlmIChjLT5jbWRfdHlwZSA9PSBDTURfU0NTSSkKKwkJCQljb21wbGV0ZV9zY3NpX2NvbW1hbmQoYywgMCwgMCk7CisjZW5kaWYKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7CisJcmV0dXJuOworfQorCiBtb2R1bGVfaW5pdChjY2lzc19pbml0KTsKIG1vZHVsZV9leGl0KGNjaXNzX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5oIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCmluZGV4IDU2NjU4N2QuLmVmMjc3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKQEAgLTM1LDcgKzM1LDEzIEBACiAJaW50IAloZWFkczsKIAlpbnQJc2VjdG9yczsKIAlpbnQgCWN5bGluZGVyczsKLQlpbnQJcmFpZF9sZXZlbDsKKwlpbnQJcmFpZF9sZXZlbDsgLyogc2V0IHRvIC0xIHRvIGluZGljYXRlIHRoYXQKKwkJCSAgICAgKiB0aGUgZHJpdmUgaXMgbm90IGluIHVzZS9jb25maWd1cmVkCisJCQkgICAgKi8KKwlpbnQJYnVzeV9jb25maWd1cmluZzsgLypUaGlzIGlzIHNldCB3aGVuIHRoZSBkcml2ZSBpcyBiZWluZyByZW1vdmVkCisJCQkJICAgKnRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBvcGVuZWQgb3IgaXQncyBxdWV1ZQorCQkJCSAgICpmcm9tIGJlaW5nIHN0YXJ0ZWQuCisJCQkJICAqLwogfSBkcml2ZV9pbmZvX3N0cnVjdDsKIAogc3RydWN0IGN0bHJfaW5mbyAKQEAgLTgzLDYgKzg5LDcgQEAKIAlpbnQJCQlucl9hbGxvY3M7CiAJaW50CQkJbnJfZnJlZXM7IAogCWludAkJCWJ1c3lfY29uZmlndXJpbmc7CisJaW50CQkJYnVzeV9pbml0aWFsaXppbmc7CiAKIAkvKiBUaGlzIGVsZW1lbnQgaG9sZHMgdGhlIHplcm8gYmFzZWQgcXVldWUgbnVtYmVyIG9mIHRoZSBsYXN0CiAJICogcXVldWUgdG8gYmUgc3RhcnRlZC4gIEl0IGlzIHVzZWQgZm9yIGZhaXJuZXNzLgpAQCAtOTQsNiArMTAxLDcgQEAKICNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKIAl2b2lkICpzY3NpX2N0bHI7IC8qIHB0ciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBzY3NpIHJlbGF0ZWQgc3R1ZmYgKi8KICNlbmRpZgorCXVuc2lnbmVkIGNoYXIgYWxpdmU7CiB9OwogCiAvKiAgRGVmaW5pbmcgdGhlIGRpZmZlbnQgYWNjZXNzX21lbnRob2RzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oIGIvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaAppbmRleCBhODhhODg4Li41M2ZlYTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmgKQEAgLTIyNiw2ICsyMjYsMTAgQEAKICNkZWZpbmUgQ01EX01TR19ET05FCTB4MDQKICNkZWZpbmUgQ01EX01TR19USU1FT1VUIDB4MDUKIAorLyogVGhpcyBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGl2aXNpYmxlIGJ5IDggZm9yIG5ldworICogaW5kZXhpbmcgbWV0aG9kLgorICovCisjZGVmaW5lIFBBRFNJWkUgKHNpemVvZihsb25nKSAtIDQpCiB0eXBlZGVmIHN0cnVjdCBfQ29tbWFuZExpc3Rfc3RydWN0IHsKICAgQ29tbWFuZExpc3RIZWFkZXJfc3RydWN0IEhlYWRlcjsKICAgUmVxdWVzdEJsb2NrX3N0cnVjdCAgICAgIFJlcXVlc3Q7CkBAIC0yMzYsMTQgKzI0MCwxNCBAQAogICBFcnJvckluZm9fc3RydWN0ICogCSAgIGVycl9pbmZvOyAvKiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgbWVtICovIAogICBpbnQJCQkgICBjdGxyOwogICBpbnQJCQkgICBjbWRfdHlwZTsgCisgIGxvbmcJCQkgICBjbWRpbmRleDsKICAgc3RydWN0IF9Db21tYW5kTGlzdF9zdHJ1Y3QgKnByZXY7CiAgIHN0cnVjdCBfQ29tbWFuZExpc3Rfc3RydWN0ICpuZXh0OwogICBzdHJ1Y3QgcmVxdWVzdCAqCSAgIHJxOwogICBzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKICAgaW50CSByZXRyeV9jb3VudDsKLSNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKICAgdm9pZCAqIHNjc2lfY21kOwotI2VuZGlmCisgIGNoYXIgICBwYWRbUEFEU0laRV07CiB9IENvbW1hbmRMaXN0X3N0cnVjdDsKIAogLy9Db25maWd1cmF0aW9uIFRhYmxlIFN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwppbmRleCBmMTZlM2NhLi5lMTgzYTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwpAQCAtOTMsNiArOTMsNyBAQAogCUNvbW1hbmRMaXN0X3N0cnVjdCBjbWQ7CiAJRXJyb3JJbmZvX3N0cnVjdCBFcnI7CiAJX191MzIgYnVzYWRkcjsKKwlfX3UzMiBwYWQ7CiB9OwogCiAjcHJhZ21hIHBhY2soKQpAQCAtODc3LDcgKzg3OCw3IEBACiAKIHN0YXRpYyBpbnQKIGNjaXNzX3Njc2lfZG9faW5xdWlyeShjdGxyX2luZm9fdCAqYywgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLCAKLQkJIElucXVpcnlEYXRhX3N0cnVjdCAqYnVmKQorCQkgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyIGJ1ZnNpemUpCiB7CiAJaW50IHJjOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqY3A7CkBAIC05MDAsMTEgKzkwMSwxMCBAQAogCWNkYlsxXSA9IDA7CiAJY2RiWzJdID0gMDsKIAljZGJbM10gPSAwOwotCWNkYls0XSA9IHNpemVvZigqYnVmKSAmIDB4ZmY7CisJY2RiWzRdID0gYnVmc2l6ZTsKIAljZGJbNV0gPSAwOwogCXJjID0gY2Npc3Nfc2NzaV9kb19zaW1wbGVfY21kKGMsIGNwLCBzY3NpM2FkZHIsIGNkYiwgCi0JCQkJNiwgKHVuc2lnbmVkIGNoYXIgKikgYnVmLCAKLQkJCQlzaXplb2YoKmJ1ZiksIFhGRVJfUkVBRCk7CisJCQkJNiwgYnVmLCBidWZzaXplLCBYRkVSX1JFQUQpOwogCiAJaWYgKHJjICE9IDApIHJldHVybiByYzsgLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KIApAQCAtMTAwMCw5ICsxMDAwLDEwIEBACiAJICAgdGhhdCB0aG91Z2guICAKIAogCSAqLwotCisjZGVmaW5lIE9CRFJfVEFQRV9JTlFfU0laRSA0OQorI2RlZmluZSBPQkRSX1RBUEVfU0lHICIkRFItMTAiCiAJUmVwb3J0THVuRGF0YV9zdHJ1Y3QgKmxkX2J1ZmY7Ci0JSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZjsKKwl1bnNpZ25lZCBjaGFyICppbnFfYnVmZjsKIAl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcls4XTsKIAljdGxyX2luZm9fdCAqYzsKIAlfX3UzMiBudW1fbHVucz0wOwpAQCAtMTAyMCw3ICsxMDIxLDcgQEAKIAkJcmV0dXJuOwogCX0KIAltZW1zZXQobGRfYnVmZiwgMCwgcmVwb3J0bHVuc2l6ZSk7Ci0JaW5xX2J1ZmYgPSBrbWFsbG9jKHNpemVvZiggSW5xdWlyeURhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJaW5xX2J1ZmYgPSBrbWFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgIGlmIChpbnFfYnVmZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgICAgICAgICAga2ZyZWUobGRfYnVmZik7CkBAIC0xMDUxLDE5ICsxMDUyLDM2IEBACiAKIAkJLyogZm9yIGVhY2ggcGh5c2ljYWwgbHVuLCBkbyBhbiBpbnF1aXJ5ICovCiAJCWlmIChsZF9idWZmLT5MVU5baV1bM10gJiAweEMwKSBjb250aW51ZTsKLQkJbWVtc2V0KGlucV9idWZmLCAwLCBzaXplb2YoSW5xdWlyeURhdGFfc3RydWN0KSk7CisJCW1lbXNldChpbnFfYnVmZiwgMCwgT0JEUl9UQVBFX0lOUV9TSVpFKTsKIAkJbWVtY3B5KCZzY3NpM2FkZHJbMF0sICZsZF9idWZmLT5MVU5baV1bMF0sIDgpOwogCi0JCWlmIChjY2lzc19zY3NpX2RvX2lucXVpcnkoaGJhW2NudGxfbnVtXSwgCi0JCQlzY3NpM2FkZHIsIGlucV9idWZmKSAhPSAwKQotCQl7CisJCWlmIChjY2lzc19zY3NpX2RvX2lucXVpcnkoaGJhW2NudGxfbnVtXSwgc2NzaTNhZGRyLCBpbnFfYnVmZiwKKwkJCSh1bnNpZ25lZCBjaGFyKSBPQkRSX1RBUEVfSU5RX1NJWkUpICE9IDApIHsKIAkJCS8qIElucXVpcnkgZmFpbGVkIChtc2cgcHJpbnRlZCBhbHJlYWR5KSAqLwogCQkJZGV2dHlwZSA9IDA7IC8qIHNvIHdlIHdpbGwgc2tpcCB0aGlzIGRldmljZS4gKi8KIAkJfSBlbHNlIC8qIHdoYXQga2luZCBvZiBkZXZpY2UgaXMgdGhpcz8gKi8KLQkJCWRldnR5cGUgPSAoaW5xX2J1ZmYtPmRhdGFfYnl0ZVswXSAmIDB4MWYpOworCQkJZGV2dHlwZSA9IChpbnFfYnVmZlswXSAmIDB4MWYpOwogCiAJCXN3aXRjaCAoZGV2dHlwZSkKIAkJeworCQkgIGNhc2UgMHgwNTogLyogQ0QtUk9NICovIHsKKworCQkJLyogV2UgZG9uJ3QgKnJlYWxseSogc3VwcG9ydCBhY3R1YWwgQ0QtUk9NIGRldmljZXMsCisJCQkgKiBqdXN0IHRoaXMgIk9uZSBCdXR0b24gRGlzYXN0ZXIgUmVjb3ZlcnkiIHRhcGUgZHJpdmUKKwkJCSAqIHdoaWNoIHRlbXBvcmFyaWx5IHByZXRlbmRzIHRvIGJlIGEgQ0QtUk9NIGRyaXZlLgorCQkJICogU28gd2UgY2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWxseSBhbiBPQkRSIHRhcGUKKwkJCSAqIGRldmljZSBieSBjaGVja2luZyBmb3IgIiREUi0xMCIgaW4gYnl0ZXMgNDMtNDggb2YKKwkJCSAqIHRoZSBpbnF1aXJ5IGRhdGEuCisJCQkgKi8KKwkJCQljaGFyIG9iZHJfc2lnWzddOworCisJCQkJc3RybmNweShvYmRyX3NpZywgJmlucV9idWZmWzQzXSwgNik7CisJCQkJb2Jkcl9zaWdbNl0gPSAnXDAnOworCQkJCWlmIChzdHJuY21wKG9iZHJfc2lnLCBPQkRSX1RBUEVfU0lHLCA2KSAhPSAwKQorCQkJCQkvKiBOb3QgT0JEUiBkZXZpY2UsIGlnbm9yZSBpdC4gKi8KKwkJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBmYWxsIHRocm91Z2ggLiAuIC4gKi8KIAkJICBjYXNlIDB4MDE6IC8qIHNlcXVlbnRpYWwgYWNjZXNzLCAodGFwZSkgKi8KIAkJICBjYXNlIDB4MDg6IC8qIG1lZGl1bSBjaGFuZ2VyICovCiAJCQlpZiAobmN1cnJlbnQgPj0gQ0NJU1NfTUFYX1NDU0lfREVWU19QRVJfSEJBKSB7CkBAIC0xMTI2LDYgKzExNDQsNyBAQAogCiAJaW50IGJ1ZmxlbiwgZGF0YWxlbjsKIAljdGxyX2luZm9fdCAqY2k7CisJaW50IGk7CiAJaW50IGNudGxfbnVtOwogCiAKQEAgLTExMzYsOCArMTE1NSwyOCBAQAogCWNudGxfbnVtID0gY2ktPmN0bHI7CS8qIEdldCBvdXIgaW5kZXggaW50byB0aGUgaGJhW10gYXJyYXkgKi8KIAogCWlmIChmdW5jID09IDApIHsJLyogVXNlciBpcyByZWFkaW5nIGZyb20gL3Byb2Mvc2NzaS9jaXNzKj8vPyogICovCi0JCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiaG9zdG51bT0lZFxuIiwgc2gtPmhvc3Rfbm8pOyAJCisJCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiY2Npc3MlZDogU0NTSSBob3N0OiAlZFxuIiwKKwkJCQljbnRsX251bSwgc2gtPmhvc3Rfbm8pOwogCisJCS8qIHRoaXMgaW5mb3JtYXRpb24gaXMgbmVlZGVkIGJ5IGFwcHMgdG8ga25vdyB3aGljaCBjY2lzcworCQkgICBkZXZpY2UgY29ycmVzcG9uZHMgdG8gd2hpY2ggc2NzaSBob3N0IG51bWJlciB3aXRob3V0CisJCSAgIGhhdmluZyB0byBvcGVuIGEgc2NzaSB0YXJnZXQgZGV2aWNlIG5vZGUuICBUaGUgZGV2aWNlCisJCSAgIGluZm9ybWF0aW9uIGlzIG5vdCBhIGR1cGxpY2F0ZSBvZiAvcHJvYy9zY3NpL3Njc2kgYmVjYXVzZQorCQkgICB0aGUgdHdvIG1heSBiZSBvdXQgb2Ygc3luYyBkdWUgdG8gc2NzaSBob3RwbHVnLCByYXRoZXIKKwkJICAgdGhpcyBpbmZvIGlzIGZvciBhbiBhcHAgdG8gYmUgYWJsZSB0byB1c2UgdG8ga25vdyBob3cgdG8KKwkJICAgZ2V0IHRoZW0gYmFjayBpbiBzeW5jLiAqLworCisJCWZvciAoaT0wO2k8Y2Npc3NzY3NpW2NudGxfbnVtXS5uZGV2aWNlcztpKyspIHsKKwkJCXN0cnVjdCBjY2lzc19zY3NpX2Rldl90ICpzZCA9ICZjY2lzc3Njc2lbY250bF9udW1dLmRldltpXTsKKwkJCWJ1ZmxlbiArPSBzcHJpbnRmKCZidWZmZXJbYnVmbGVuXSwgImMlZGIlZHQlZGwlZCAlMDJkICIKKwkJCQkiMHglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQlzaC0+aG9zdF9ubywgc2QtPmJ1cywgc2QtPnRhcmdldCwgc2QtPmx1biwKKwkJCQlzZC0+ZGV2dHlwZSwKKwkJCQlzZC0+c2NzaTNhZGRyWzBdLCBzZC0+c2NzaTNhZGRyWzFdLAorCQkJCXNkLT5zY3NpM2FkZHJbMl0sIHNkLT5zY3NpM2FkZHJbM10sCisJCQkJc2QtPnNjc2kzYWRkcls0XSwgc2QtPnNjc2kzYWRkcls1XSwKKwkJCQlzZC0+c2NzaTNhZGRyWzZdLCBzZC0+c2NzaTNhZGRyWzddKTsKKwkJfQogCQlkYXRhbGVuID0gYnVmbGVuIC0gb2Zmc2V0OwogCQlpZiAoZGF0YWxlbiA8IDApIHsgCS8qIHRoZXkncmUgcmVhZGluZyBwYXN0IEVPRi4gKi8KIAkJCWRhdGFsZW4gPSAwOwpAQCAtMTM5OSw3ICsxNDM4LDcgQEAKIAogCUNQUV9UQVBFX0xPQ0soY3RsciwgZmxhZ3MpOwogCXNpemUgPSBzcHJpbnRmKGJ1ZmZlciArICpsZW4sIAotCQkiICAgICAgIFNlcXVlbnRpYWwgYWNjZXNzIGRldmljZXM6ICVkXG5cbiIsCisJCSJTZXF1ZW50aWFsIGFjY2VzcyBkZXZpY2VzOiAlZFxuXG4iLAogCQkJY2Npc3NzY3NpW2N0bHJdLm5kZXZpY2VzKTsKIAlDUFFfVEFQRV9VTkxPQ0soY3RsciwgZmxhZ3MpOwogCSpwb3MgKz0gc2l6ZTsgKmxlbiArPSBzaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYyBiL2RyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMKaW5kZXggNDgzZDcxYi4uYmFlZGFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jCkBAIC0yMzczLDQ0ICsyMzczLDYgQEAKIAogRVhQT1JUX1NZTUJPTChibGtkZXZfaXNzdWVfZmx1c2gpOwogCi0vKioKLSAqIGJsa2Rldl9zY3NpX2lzc3VlX2ZsdXNoX2ZuIC0gaXNzdWUgZmx1c2ggZm9yIFNDU0kgZGV2aWNlcwotICogQHE6CQlkZXZpY2UgcXVldWUKLSAqIEBkaXNrOglnZW5kaXNrCi0gKiBAZXJyb3Jfc2VjdG9yOgllcnJvciBvZmZzZXQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgIERldmljZXMgdW5kZXJzdGFuZGluZyB0aGUgU0NTSSBjb21tYW5kIHNldCwgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIGFzCi0gKiAgICBhIGhlbHBlciBmb3IgaXNzdWluZyBhIGNhY2hlIGZsdXNoLiBOb3RlOiBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gc3RvcmUKLSAqICAgIHRoZSBlcnJvciBvZmZzZXQgKGluIGNhc2Ugb2YgZXJyb3IgZmx1c2hpbmcpIGluIC0+c2VjdG9yIG9mIHN0cnVjdAotICogICAgcmVxdWVzdC4KLSAqLwotaW50IGJsa2Rldl9zY3NpX2lzc3VlX2ZsdXNoX2ZuKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCi0JCQkgICAgICAgc2VjdG9yX3QgKmVycm9yX3NlY3RvcikKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgV1JJVEUsIF9fR0ZQX1dBSVQpOwotCWludCByZXQ7Ci0KLQlycS0+ZmxhZ3MgfD0gUkVRX0JMT0NLX1BDIHwgUkVRX1NPRlRCQVJSSUVSOwotCXJxLT5zZWN0b3IgPSAwOwotCW1lbXNldChycS0+Y21kLCAwLCBzaXplb2YocnEtPmNtZCkpOwotCXJxLT5jbWRbMF0gPSAweDM1OwotCXJxLT5jbWRfbGVuID0gMTI7Ci0JcnEtPmRhdGEgPSBOVUxMOwotCXJxLT5kYXRhX2xlbiA9IDA7Ci0JcnEtPnRpbWVvdXQgPSA2MCAqIEhaOwotCi0JcmV0ID0gYmxrX2V4ZWN1dGVfcnEocSwgZGlzaywgcnEsIDApOwotCi0JaWYgKHJldCAmJiBlcnJvcl9zZWN0b3IpCi0JCSplcnJvcl9zZWN0b3IgPSBycS0+c2VjdG9yOwotCi0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQlyZXR1cm4gcmV0OwotfQotCi1FWFBPUlRfU1lNQk9MKGJsa2Rldl9zY3NpX2lzc3VlX2ZsdXNoX2ZuKTsKLQogc3RhdGljIHZvaWQgZHJpdmVfc3RhdF9hY2N0KHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IG5yX3NlY3RvcnMsIGludCBuZXdfaW8pCiB7CiAJaW50IHJ3ID0gcnFfZGF0YV9kaXIocnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKaW5kZXggNzExZDJmMy4uOTRhZjkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCkBAIC03NTAsNiArNzUwLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcGZfcXVldWU7CiAKK3N0YXRpYyB2b2lkIHBmX2VuZF9yZXF1ZXN0KGludCB1cHRvZGF0ZSkKK3sKKwlpZiAocGZfcmVxKSB7CisJCWVuZF9yZXF1ZXN0KHBmX3JlcSwgdXB0b2RhdGUpOworCQlwZl9yZXEgPSBOVUxMOworCX0KK30KKwogc3RhdGljIHZvaWQgZG9fcGZfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiBxKQogewogCWlmIChwZl9idXN5KQpAQCAtNzY1LDcgKzc3Myw3IEBACiAJcGZfY291bnQgPSBwZl9yZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKIAogCWlmIChwZl9ibG9jayArIHBmX2NvdW50ID4gZ2V0X2NhcGFjaXR5KHBmX3JlcS0+cnFfZGlzaykpIHsKLQkJZW5kX3JlcXVlc3QocGZfcmVxLCAwKTsKKwkJcGZfZW5kX3JlcXVlc3QoMCk7CiAJCWdvdG8gcmVwZWF0OwogCX0KIApAQCAtNzgwLDcgKzc4OCw3IEBACiAJCXBpX2RvX2NsYWltZWQocGZfY3VycmVudC0+cGksIGRvX3BmX3dyaXRlKTsKIAllbHNlIHsKIAkJcGZfYnVzeSA9IDA7Ci0JCWVuZF9yZXF1ZXN0KHBmX3JlcSwgMCk7CisJCXBmX2VuZF9yZXF1ZXN0KDApOwogCQlnb3RvIHJlcGVhdDsKIAl9CiB9CkBAIC03OTgsOSArODA2LDExIEBACiAJaWYgKCFwZl9jb3VudCkKIAkJcmV0dXJuIDE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBmX3NwaW5fbG9jaywgc2F2ZWRfZmxhZ3MpOwotCWVuZF9yZXF1ZXN0KHBmX3JlcSwgMSk7Ci0JcGZfY291bnQgPSBwZl9yZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKLQlwZl9idWYgPSBwZl9yZXEtPmJ1ZmZlcjsKKwlwZl9lbmRfcmVxdWVzdCgxKTsKKwlpZiAocGZfcmVxKSB7CisJCXBmX2NvdW50ID0gcGZfcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJCXBmX2J1ZiA9IHBmX3JlcS0+YnVmZmVyOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZl9zcGluX2xvY2ssIHNhdmVkX2ZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTgxMCw3ICs4MjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZWRfZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGZfc3Bpbl9sb2NrLCBzYXZlZF9mbGFncyk7Ci0JZW5kX3JlcXVlc3QocGZfcmVxLCBzdWNjZXNzKTsKKwlwZl9lbmRfcmVxdWVzdChzdWNjZXNzKTsKIAlwZl9idXN5ID0gMDsKIAlkb19wZl9yZXF1ZXN0KHBmX3F1ZXVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZl9zcGluX2xvY2ssIHNhdmVkX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKaW5kZXggN2I4MzgzNC4uN2UyMmE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKQEAgLTUsMjkgKzUsNDEgQEAKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCi0gKiBQYWNrZXQgd3JpdGluZyBsYXllciBmb3IgQVRBUEkgYW5kIFNDU0kgQ0QtUiwgQ0QtUlcsIERWRC1SLCBhbmQKLSAqIERWRC1SVyBkZXZpY2VzIChha2EgYW4gZXhlcmNpc2UgaW4gYmxvY2sgbGF5ZXIgbWFzdHVyYmF0aW9uKQotICoKLSAqCi0gKiBUT0RPOiAoY2lyY2Egb3JkZXIgb2Ygd2hlbiBJIHdpbGwgZml4IGl0KQotICogLSBPbmx5IGFibGUgdG8gd3JpdGUgb24gQ0QtUlcgbWVkaWEgcmlnaHQgbm93LgotICogLSBjaGVjayBob3N0IGFwcGxpY2F0aW9uIGNvZGUgb24gbWVkaWEgYW5kIHNldCBpdCBpbiB3cml0ZSBwYWdlCi0gKiAtIGludGVyZmFjZSBmb3IgVURGIDwtPiBwYWNrZXQgdG8gbmVnb3RpYXRlIGEgbmV3IGxvY2F0aW9uIHdoZW4gYSB3cml0ZQotICogICBmYWlscy4KLSAqIC0gaGFuZGxlIE9QQywgZXNwZWNpYWxseSBmb3IgLVJXIG1lZGlhCisgKiBQYWNrZXQgd3JpdGluZyBsYXllciBmb3IgQVRBUEkgYW5kIFNDU0kgQ0QtUlcsIERWRCtSVywgRFZELVJXIGFuZAorICogRFZELVJBTSBkZXZpY2VzLgogICoKICAqIFRoZW9yeSBvZiBvcGVyYXRpb246CiAgKgotICogV2UgdXNlIGEgY3VzdG9tIG1ha2VfcmVxdWVzdF9mbiBmdW5jdGlvbiB0aGF0IGZvcndhcmRzIHJlYWRzIGRpcmVjdGx5IHRvCi0gKiB0aGUgdW5kZXJseWluZyBDRCBkZXZpY2UuIFdyaXRlIHJlcXVlc3RzIGFyZSBlaXRoZXIgYXR0YWNoZWQgZGlyZWN0bHkgdG8KLSAqIGEgbGl2ZSBwYWNrZXRfZGF0YSBvYmplY3QsIG9yIHNpbXBseSBzdG9yZWQgc2VxdWVudGlhbGx5IGluIGEgbGlzdCBmb3IKLSAqIGxhdGVyIHByb2Nlc3NpbmcgYnkgdGhlIGtjZHJ3ZCBrZXJuZWwgdGhyZWFkLiBUaGlzIGRyaXZlciBkb2Vzbid0IHVzZQotICogYW55IGVsZXZhdG9yIGZ1bmN0aW9uYWxseSBhcyBkZWZpbmVkIGJ5IHRoZSBlbGV2YXRvcl9zIHN0cnVjdCwgYnV0IHRoZQotICogdW5kZXJseWluZyBDRCBkZXZpY2UgdXNlcyBhIHN0YW5kYXJkIGVsZXZhdG9yLgorICogQXQgdGhlIGxvd2VzdCBsZXZlbCwgdGhlcmUgaXMgdGhlIHN0YW5kYXJkIGRyaXZlciBmb3IgdGhlIENEL0RWRCBkZXZpY2UsCisgKiB0eXBpY2FsbHkgaWRlLWNkLmMgb3Igc3IuYy4gVGhpcyBkcml2ZXIgY2FuIGhhbmRsZSByZWFkIGFuZCB3cml0ZSByZXF1ZXN0cywKKyAqIGJ1dCBpdCBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHNwZWNpYWwgcmVzdHJpY3Rpb25zIHRoYXQgYXBwbHkgdG8KKyAqIHBhY2tldCB3cml0aW5nLiBPbmUgcmVzdHJpY3Rpb24gaXMgdGhhdCB3cml0ZSByZXF1ZXN0cyBtdXN0IGJlIGFsaWduZWQgdG8KKyAqIHBhY2tldCBib3VuZGFyaWVzIG9uIHRoZSBwaHlzaWNhbCBtZWRpYSwgYW5kIHRoZSBzaXplIG9mIGEgd3JpdGUgcmVxdWVzdAorICogbXVzdCBiZSBlcXVhbCB0byB0aGUgcGFja2V0IHNpemUuIEFub3RoZXIgcmVzdHJpY3Rpb24gaXMgdGhhdCBhCisgKiBHUENNRF9GTFVTSF9DQUNIRSBjb21tYW5kIGhhcyB0byBiZSBpc3N1ZWQgdG8gdGhlIGRyaXZlIGJlZm9yZSBhIHJlYWQKKyAqIGNvbW1hbmQsIGlmIHRoZSBwcmV2aW91cyBjb21tYW5kIHdhcyBhIHdyaXRlLgogICoKLSAqIFRoaXMgc3RyYXRlZ3kgbWFrZXMgaXQgcG9zc2libGUgdG8gZG8gdmVyeSBsYXRlIG1lcmdpbmcgb2YgSU8gcmVxdWVzdHMuCi0gKiBBIG5ldyBiaW8gc2VudCB0byBwa3RfbWFrZV9yZXF1ZXN0IGNhbiBiZSBtZXJnZWQgd2l0aCBhIGxpdmUgcGFja2V0X2RhdGEKLSAqIG9iamVjdCBldmVuIGlmIHRoZSBvYmplY3QgaXMgaW4gdGhlIGRhdGEgZ2F0aGVyaW5nIHN0YXRlLgorICogVGhlIHB1cnBvc2Ugb2YgdGhlIHBhY2tldCB3cml0aW5nIGRyaXZlciBpcyB0byBoaWRlIHRoZXNlIHJlc3RyaWN0aW9ucyBmcm9tCisgKiBoaWdoZXIgbGF5ZXJzLCBzdWNoIGFzIGZpbGUgc3lzdGVtcywgYW5kIHByZXNlbnQgYSBibG9jayBkZXZpY2UgdGhhdCBjYW4gYmUKKyAqIHJhbmRvbWx5IHJlYWQgYW5kIHdyaXR0ZW4gdXNpbmcgMmtCLXNpemVkIGJsb2Nrcy4KKyAqCisgKiBUaGUgbG93ZXN0IGxheWVyIGluIHRoZSBwYWNrZXQgd3JpdGluZyBkcml2ZXIgaXMgdGhlIHBhY2tldCBJL08gc2NoZWR1bGVyLgorICogSXRzIGRhdGEgaXMgZGVmaW5lZCBieSB0aGUgc3RydWN0IHBhY2tldF9pb3NjaGVkIGFuZCBpbmNsdWRlcyB0d28gYmlvCisgKiBxdWV1ZXMgd2l0aCBwZW5kaW5nIHJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzLiBUaGVzZSBxdWV1ZXMgYXJlIHByb2Nlc3NlZAorICogYnkgdGhlIHBrdF9pb3NjaGVkX3Byb2Nlc3NfcXVldWUoKSBmdW5jdGlvbi4gVGhlIHdyaXRlIHJlcXVlc3RzIGluIHRoaXMKKyAqIHF1ZXVlIGFyZSBhbHJlYWR5IHByb3Blcmx5IGFsaWduZWQgYW5kIHNpemVkLiBUaGlzIGxheWVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogaXNzdWluZyB0aGUgZmx1c2ggY2FjaGUgY29tbWFuZHMgYW5kIHNjaGVkdWxpbmcgdGhlIEkvTyBpbiBhIGdvb2Qgb3JkZXIuCisgKgorICogVGhlIG5leHQgbGF5ZXIgdHJhbnNmb3JtcyB1bmFsaWduZWQgd3JpdGUgcmVxdWVzdHMgdG8gYWxpZ25lZCB3cml0ZXMuIFRoaXMKKyAqIHRyYW5zZm9ybWF0aW9uIHJlcXVpcmVzIHJlYWRpbmcgbWlzc2luZyBwaWVjZXMgb2YgZGF0YSBmcm9tIHRoZSB1bmRlcmx5aW5nCisgKiBibG9jayBkZXZpY2UsIGFzc2VtYmxpbmcgdGhlIHBpZWNlcyB0byBmdWxsIHBhY2tldHMgYW5kIHF1ZXVpbmcgdGhlbSB0byB0aGUKKyAqIHBhY2tldCBJL08gc2NoZWR1bGVyLgorICoKKyAqIEF0IHRoZSB0b3AgbGF5ZXIgdGhlcmUgaXMgYSBjdXN0b20gbWFrZV9yZXF1ZXN0X2ZuIGZ1bmN0aW9uIHRoYXQgZm9yd2FyZHMKKyAqIHJlYWQgcmVxdWVzdHMgZGlyZWN0bHkgdG8gdGhlIGlvc2NoZWQgcXVldWUgYW5kIHB1dHMgd3JpdGUgcmVxdWVzdHMgaW4gdGhlCisgKiB1bmFsaWduZWQgd3JpdGUgcXVldWUuIEEga2VybmVsIHRocmVhZCBwZXJmb3JtcyB0aGUgbmVjZXNzYXJ5IHJlYWQKKyAqIGdhdGhlcmluZyB0byBjb252ZXJ0IHRoZSB1bmFsaWduZWQgd3JpdGVzIHRvIGFsaWduZWQgd3JpdGVzIGFuZCB0aGVuIGZlZWRzCisgKiB0aGVtIHRvIHRoZSBwYWNrZXQgSS9PIHNjaGVkdWxlci4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTAwLDEwICsxMTIsOSBAQAogCQlnb3RvIG5vX2JpbzsKIAliaW9faW5pdChiaW8pOwogCi0JYnZsID0ga21hbGxvYyhucl9pb3ZlY3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpLCBHRlBfS0VSTkVMKTsKKwlidmwgPSBrY2FsbG9jKG5yX2lvdmVjcywgc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidmwpCiAJCWdvdG8gbm9fYnZsOwotCW1lbXNldChidmwsIDAsIG5yX2lvdmVjcyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykpOwogCiAJYmlvLT5iaV9tYXhfdmVjcyA9IG5yX2lvdmVjczsKIAliaW8tPmJpX2lvX3ZlYyA9IGJ2bDsKQEAgLTEyNSwxMCArMTM2LDkgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcGFja2V0X2RhdGEgKnBrdDsKIAotCXBrdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrZXRfZGF0YSksIEdGUF9LRVJORUwpOworCXBrdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrZXRfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghcGt0KQogCQlnb3RvIG5vX3BrdDsKLQltZW1zZXQocGt0LCAwLCBzaXplb2Yoc3RydWN0IHBhY2tldF9kYXRhKSk7CiAKIAlwa3QtPndfYmlvID0gcGt0X2Jpb19hbGxvYyhQQUNLRVRfTUFYX1NJWkUpOwogCWlmICghcGt0LT53X2JpbykKQEAgLTY1OSw3ICs2NjksNiBAQAogCQl9CiAJCW9mZnMgKz0gQ0RfRlJBTUVTSVpFOwogCQlpZiAob2ZmcyA+PSBQQUdFX1NJWkUpIHsKLQkJCUJVR19PTihvZmZzID4gUEFHRV9TSVpFKTsKIAkJCW9mZnMgPSAwOwogCQkJcCsrOwogCQl9CkBAIC03MjQsMTIgKzczMyw2IEBACiAJYXRvbWljX3NldCgmcGt0LT5pb193YWl0LCAwKTsKIAlhdG9taWNfc2V0KCZwa3QtPmlvX2Vycm9ycywgMCk7CiAKLQlpZiAocGt0LT5jYWNoZV92YWxpZCkgewotCQlWUFJJTlRLKCJwa3RfZ2F0aGVyX2RhdGE6IHpvbmUgJWxseCBjYWNoZWRcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXBrdC0+c2VjdG9yKTsKLQkJZ290byBvdXRfYWNjb3VudDsKLQl9Ci0KIAkvKgogCSAqIEZpZ3VyZSBvdXQgd2hpY2ggZnJhbWVzIHdlIG5lZWQgdG8gcmVhZCBiZWZvcmUgd2UgY2FuIHdyaXRlLgogCSAqLwpAQCAtNzM4LDYgKzc0MSw3IEBACiAJZm9yIChiaW8gPSBwa3QtPm9yaWdfYmlvczsgYmlvOyBiaW8gPSBiaW8tPmJpX25leHQpIHsKIAkJaW50IGZpcnN0X2ZyYW1lID0gKGJpby0+Ymlfc2VjdG9yIC0gcGt0LT5zZWN0b3IpIC8gKENEX0ZSQU1FU0laRSA+PiA5KTsKIAkJaW50IG51bV9mcmFtZXMgPSBiaW8tPmJpX3NpemUgLyBDRF9GUkFNRVNJWkU7CisJCXBkLT5zdGF0cy5zZWNzX3cgKz0gbnVtX2ZyYW1lcyAqIChDRF9GUkFNRVNJWkUgPj4gOSk7CiAJCUJVR19PTihmaXJzdF9mcmFtZSA8IDApOwogCQlCVUdfT04oZmlyc3RfZnJhbWUgKyBudW1fZnJhbWVzID4gcGt0LT5mcmFtZXMpOwogCQlmb3IgKGYgPSBmaXJzdF9mcmFtZTsgZiA8IGZpcnN0X2ZyYW1lICsgbnVtX2ZyYW1lczsgZisrKQpAQCAtNzQ1LDYgKzc0OSwxMiBAQAogCX0KIAlzcGluX3VubG9jaygmcGt0LT5sb2NrKTsKIAorCWlmIChwa3QtPmNhY2hlX3ZhbGlkKSB7CisJCVZQUklOVEsoInBrdF9nYXRoZXJfZGF0YTogem9uZSAlbGx4IGNhY2hlZFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGt0LT5zZWN0b3IpOworCQlnb3RvIG91dF9hY2NvdW50OworCX0KKwogCS8qCiAJICogU2NoZWR1bGUgcmVhZHMgZm9yIG1pc3NpbmcgcGFydHMgb2YgdGhlIHBhY2tldC4KIAkgKi8KQEAgLTc3OCw3ICs3ODgsNiBAQAogCQlmcmFtZXNfcmVhZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3QtPnNlY3Rvcik7CiAJcGQtPnN0YXRzLnBrdF9zdGFydGVkKys7CiAJcGQtPnN0YXRzLnNlY3NfcmcgKz0gZnJhbWVzX3JlYWQgKiAoQ0RfRlJBTUVTSVpFID4+IDkpOwotCXBkLT5zdGF0cy5zZWNzX3cgKz0gcGQtPnNldHRpbmdzLnNpemU7CiB9CiAKIC8qCkBAIC03OTQsMTAgKzgwMywxMSBAQAogCQkJbGlzdF9kZWxfaW5pdCgmcGt0LT5saXN0KTsKIAkJCWlmIChwa3QtPnNlY3RvciAhPSB6b25lKQogCQkJCXBrdC0+Y2FjaGVfdmFsaWQgPSAwOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gcGt0OwogCQl9CiAJfQotCXJldHVybiBwa3Q7CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHBrdF9wdXRfcGFja2V0X2RhdGEoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgc3RydWN0IHBhY2tldF9kYXRhICpwa3QpCkBAIC05NDEsMTIgKzk1MSwxMCBAQAogCX0KIAogCXBrdCA9IHBrdF9nZXRfcGFja2V0X2RhdGEocGQsIHpvbmUpOwotCUJVR19PTighcGt0KTsKIAogCXBkLT5jdXJyZW50X3NlY3RvciA9IHpvbmUgKyBwZC0+c2V0dGluZ3Muc2l6ZTsKIAlwa3QtPnNlY3RvciA9IHpvbmU7CiAJcGt0LT5mcmFtZXMgPSBwZC0+c2V0dGluZ3Muc2l6ZSA+PiAyOwotCUJVR19PTihwa3QtPmZyYW1lcyA+IFBBQ0tFVF9NQVhfU0laRSk7CiAJcGt0LT53cml0ZV9zaXplID0gMDsKIAogCS8qCkBAIC0xNjM2LDYgKzE2NDQsMTAgQEAKIAkJcHJpbnRrKCJwa3RjZHZkOiBkZXRlY3RlZCB6ZXJvIHBhY2tldCBzaXplIVxuIik7CiAJCXBkLT5zZXR0aW5ncy5zaXplID0gMTI4OwogCX0KKwlpZiAocGQtPnNldHRpbmdzLnNpemUgPiBQQUNLRVRfTUFYX1NFQ1RPUlMpIHsKKwkJcHJpbnRrKCJwa3RjZHZkOiBwYWNrZXQgc2l6ZSBpcyB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CiAJcGQtPnNldHRpbmdzLmZwID0gdGkuZnA7CiAJcGQtPm9mZnNldCA9IChiZTMyX3RvX2NwdSh0aS50cmFja19zdGFydCkgPDwgMikgJiAocGQtPnNldHRpbmdzLnNpemUgLSAxKTsKIApAQCAtMjE5OCw3ICsyMjEwLDYgQEAKIAkgKiBObyBtYXRjaGluZyBwYWNrZXQgZm91bmQuIFN0b3JlIHRoZSBiaW8gaW4gdGhlIHdvcmsgcXVldWUuCiAJICovCiAJbm9kZSA9IG1lbXBvb2xfYWxsb2MocGQtPnJiX3Bvb2wsIEdGUF9OT0lPKTsKLQlCVUdfT04oIW5vZGUpOwogCW5vZGUtPmJpbyA9IGJpbzsKIAlzcGluX2xvY2soJnBkLT5sb2NrKTsKIAlCVUdfT04ocGQtPmJpb19xdWV1ZV9zaXplIDwgMCk7CkBAIC0yNDA2LDcgKzI0MTcsNiBAQAogCXN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKIAlWUFJJTlRLKCJwa3RfaW9jdGw6IGNtZCAleCwgZGV2ICVkOiVkXG4iLCBjbWQsIGltYWpvcihpbm9kZSksIGltaW5vcihpbm9kZSkpOwotCUJVR19PTighcGQpOwogCiAJc3dpdGNoIChjbWQpIHsKIAkvKgpAQCAtMjQ3NywxMCArMjQ4Nyw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JcGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlwZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwa3RjZHZkX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghcGQpCiAJCXJldHVybiByZXQ7Ci0JbWVtc2V0KHBkLCAwLCBzaXplb2Yoc3RydWN0IHBrdGNkdmRfZGV2aWNlKSk7CiAKIAlwZC0+cmJfcG9vbCA9IG1lbXBvb2xfY3JlYXRlKFBLVF9SQl9QT09MX1NJWkUsIHBrdF9yYl9hbGxvYywgcGt0X3JiX2ZyZWUsIE5VTEwpOwogCWlmICghcGQtPnJiX3Bvb2wpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2RyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IDg1NmMyMjcuLjA3OWVjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC0xNjgsNiArMTY4LDcgQEAKIAkJc2FmZV9mb3Jfd3JpdGUoV1JJVEVfVkVSSUZZXzEyKSwKIAkJc2FmZV9mb3Jfd3JpdGUoV1JJVEVfMTYpLAogCQlzYWZlX2Zvcl93cml0ZShXUklURV9MT05HKSwKKwkJc2FmZV9mb3Jfd3JpdGUoV1JJVEVfTE9OR18yKSwKIAkJc2FmZV9mb3Jfd3JpdGUoRVJBU0UpLAogCQlzYWZlX2Zvcl93cml0ZShHUENNRF9NT0RFX1NFTEVDVF8xMCksCiAJCXNhZmVfZm9yX3dyaXRlKE1PREVfU0VMRUNUKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwppbmRleCA2N2Q5NmI1Li41N2M0OGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCkBAIC02NSwxMyArNjUsMTUgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50IGlnbm9yZSA9IDA7CitzdGF0aWMgaW50IGlnbm9yZV9jc3IgPSAwOworc3RhdGljIGludCBpZ25vcmVfc25pZmZlciA9IDA7CiBzdGF0aWMgaW50IHJlc2V0ID0gMDsKIAogI2lmZGVmIENPTkZJR19CVF9IQ0lVU0JfU0NPCiBzdGF0aWMgaW50IGlzb2MgPSAyOwogI2VuZGlmCiAKLSNkZWZpbmUgVkVSU0lPTiAiMi44IgorI2RlZmluZSBWRVJTSU9OICIyLjkiCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBoY2lfdXNiX2RyaXZlcjsgCiAKQEAgLTk4LDYgKzEwMCw5IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGJsdWV0b290aF9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYmxhY2tsaXN0X2lkc1tdID0geworCS8qIENTUiBCbHVlQ29yZSBkZXZpY2VzICovCisJeyBVU0JfREVWSUNFKDB4MGExMiwgMHgwMDAxKSwgLmRyaXZlcl9pbmZvID0gSENJX0NTUiB9LAorCiAJLyogQnJvYWRjb20gQkNNMjAzMyB3aXRob3V0IGZpcm13YXJlICovCiAJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDMzKSwgLmRyaXZlcl9pbmZvID0gSENJX0lHTk9SRSB9LAogCkBAIC04MzYsNiArODQxLDEyIEBACiAJaWYgKGlnbm9yZSB8fCBpZC0+ZHJpdmVyX2luZm8gJiBIQ0lfSUdOT1JFKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmIChpZ25vcmVfY3NyICYmIGlkLT5kcml2ZXJfaW5mbyAmIEhDSV9DU1IpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGlnbm9yZV9zbmlmZmVyICYmIGlkLT5kcml2ZXJfaW5mbyAmIEhDSV9TTklGRkVSKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyID4gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEwNjEsNiArMTA3MiwxMiBAQAogbW9kdWxlX3BhcmFtKGlnbm9yZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZSwgIklnbm9yZSBkZXZpY2VzIGZyb20gdGhlIG1hdGNoaW5nIHRhYmxlIik7CiAKK21vZHVsZV9wYXJhbShpZ25vcmVfY3NyLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2NzciwgIklnbm9yZSBkZXZpY2VzIHdpdGggaWQgMGExMjowMDAxIik7CisKK21vZHVsZV9wYXJhbShpZ25vcmVfc25pZmZlciwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9zbmlmZmVyLCAiSWdub3JlIGRldmljZXMgd2l0aCBpZCAwYTEyOjAwMDIiKTsKKwogbW9kdWxlX3BhcmFtKHJlc2V0LCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJTZW5kIEhDSSByZXNldCBjb21tYW5kIG9uIGluaXRpYWxpemF0aW9uIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuaAppbmRleCAyOTkzNmI0Li4zNzEwMGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmgKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5oCkBAIC0zMSw5ICszMSwxMCBAQAogI2RlZmluZSBIQ0lfSUdOT1JFCQkweDAxCiAjZGVmaW5lIEhDSV9SRVNFVAkJMHgwMgogI2RlZmluZSBIQ0lfRElHSUFOU1dFUgkJMHgwNAotI2RlZmluZSBIQ0lfU05JRkZFUgkJMHgwOAotI2RlZmluZSBIQ0lfQlJPS0VOX0lTT0MJCTB4MTAKKyNkZWZpbmUgSENJX0NTUgkJCTB4MDgKKyNkZWZpbmUgSENJX1NOSUZGRVIJCTB4MTAKICNkZWZpbmUgSENJX0JDTTkyMDM1CQkweDIwCisjZGVmaW5lIEhDSV9CUk9LRU5fSVNPQwkJMHg0MAogCiAjZGVmaW5lIEhDSV9NQVhfSUZBQ0VfTlVNCTMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKaW5kZXggOTk3NjJiNi4uZGU1ZDZkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJcmVhZGwoaHAtPmlvY19yZWdzK0hQX1pYMV9QRElSX0JBU0UpOwogCQl3cml0ZWwoaHAtPmlvX3RsYl9wcywgaHAtPmlvY19yZWdzK0hQX1pYMV9UQ05GRyk7CiAJCXJlYWRsKGhwLT5pb2NfcmVncytIUF9aWDFfVENORkcpOwotCQl3cml0ZWwofihIUF9aWDFfSU9WQV9TSVpFLTEpLCBocC0+aW9jX3JlZ3MrSFBfWlgxX0lNQVNLKTsKKwkJd3JpdGVsKCh1bnNpZ25lZCBpbnQpKH4oSFBfWlgxX0lPVkFfU0laRS0xKSksIGhwLT5pb2NfcmVncytIUF9aWDFfSU1BU0spOwogCQlyZWFkbChocC0+aW9jX3JlZ3MrSFBfWlgxX0lNQVNLKTsKIAkJd3JpdGVsKGhwLT5pb3ZhX2Jhc2V8MSwgaHAtPmlvY19yZWdzK0hQX1pYMV9JQkFTRSk7CiAJCXJlYWRsKGhwLT5pb2NfcmVncytIUF9aWDFfSUJBU0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCmluZGV4IDJhMzY1NjEuLmExMjRmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYworKysgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKQEAgLTIwNTMsMTAgKzIwNTMsNiBAQAogCXN0YXRlLT5pY291bnQucnggPSBzdGF0ZS0+aWNvdW50LnR4ID0gMDsKIAlzdGF0ZS0+aWNvdW50LmZyYW1lID0gc3RhdGUtPmljb3VudC5wYXJpdHkgPSAwOwogCXN0YXRlLT5pY291bnQub3ZlcnJ1biA9IHN0YXRlLT5pY291bnQuYnJrID0gMDsKLQkvKgotCWlmKHN0YXRlLT5wb3J0ICYmIGNoZWNrX3JlZ2lvbihzdGF0ZS0+cG9ydCxSRUdJT05fTEVOR1RIKHN0YXRlKSkpCi0JICBjb250aW51ZTsKLQkqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyAidHR5UyVkIGlzIHRoZSBhbWlnYSBidWlsdGluIHNlcmlhbCBwb3J0XG4iLAogCQkgICAgICAgc3RhdGUtPmxpbmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggNThkMzczOC4uNDA3NzA4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC01MzQsNyArNTM0LDcgQEAKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAKIAlpZiAoIShjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgCiAJCXJldHVybjsKQEAgLTYxOCw3ICs2MTgsNyBAQAogCXN0cnVjdCBjaGFubmVsICpjaDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZW1haW47Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQlwY193cml0ZSBpcyBwcmltYXJpbHkgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZSBrZXJuZWwgcm91dGluZQpAQCAtNjg1LDcgKzY4NSw3IEBACiAJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCQlkYXRhTGVuID0gbWluKGJ5dGVzQXZhaWxhYmxlLCBkYXRhTGVuKTsKLQkJbWVtY3B5KGNoLT50eHB0ciArIGhlYWQsIGJ1ZiwgZGF0YUxlbik7CisJCW1lbWNweV90b2lvKGNoLT50eHB0ciArIGhlYWQsIGJ1ZiwgZGF0YUxlbik7CiAJCWJ1ZiArPSBkYXRhTGVuOwogCQloZWFkICs9IGRhdGFMZW47CiAJCWFtb3VudENvcGllZCArPSBkYXRhTGVuOwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJc3RydWN0IGNoYW5uZWwgKmNoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGhlYWQsIHRhaWw7Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCiAJcmVtYWluID0gMDsKIApAQCAtNzczLDcgKzc3Myw3IEBACiAJaW50IHJlbWFpbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjaGFubmVsICpjaDsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJdmVyaWZ5Q2hhbm5lbCByZXR1cm5zIHRoZSBjaGFubmVsIGZyb20gdGhlIHR0eSBzdHJ1Y3QKQEAgLTgzMCw3ICs4MzAsNyBAQAogCXVuc2lnbmVkIGludCB0YWlsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNoYW5uZWwgKmNoOwotCXN0cnVjdCBib2FyZF9jaGFuICpiYzsKKwlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJdmVyaWZ5Q2hhbm5lbCByZXR1cm5zIHRoZSBjaGFubmVsIGZyb20gdGhlIHR0eSBzdHJ1Y3QKIAkJaWYgaXQgaXMgdmFsaWQuICBUaGlzIHNlcnZlcyBhcyBhIHNhbml0eSBjaGVjay4KQEAgLTk3Niw3ICs5NzYsNyBAQAogCXN0cnVjdCBjaGFubmVsICpjaDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBsaW5lLCByZXR2YWwsIGJvYXJkbnVtOwotCXN0cnVjdCBib2FyZF9jaGFuICpiYzsKKwlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAl1bnNpZ25lZCBpbnQgaGVhZDsKIAogCWxpbmUgPSB0dHktPmluZGV4OwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAKIAljaC0+c3RhdHVzZmxhZ3MgPSAwOwogCiAJLyogU2F2ZSBib2FyZHMgY3VycmVudCBtb2RlbSBzdGF0dXMgKi8KLQljaC0+aW1vZGVtID0gYmMtPm1zdGF0OworCWNoLT5pbW9kZW0gPSByZWFkYigmYmMtPm1zdGF0KTsKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgICBTZXQgcmVjZWl2ZSBoZWFkIGFuZCB0YWlsIHB0cnMgdG8gZWFjaCBvdGhlci4gIFRoaXMgaW5kaWNhdGVzCkBAIC0xMzk5LDEwICsxMzk5LDEwIEBACiB7IC8qIEJlZ2luIHBvc3RfZmVwX2luaXQgKi8KIAogCWludCBpOwotCXVuc2lnbmVkIGNoYXIgKm1lbWFkZHI7Ci0Jc3RydWN0IGdsb2JhbF9kYXRhICpnZDsKKwl2b2lkIF9faW9tZW0gKm1lbWFkZHI7CisJc3RydWN0IGdsb2JhbF9kYXRhIF9faW9tZW0gKmdkOwogCXN0cnVjdCBib2FyZF9pbmZvICpiZDsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJc3RydWN0IGNoYW5uZWwgKmNoOyAKIAlpbnQgc2hyaW5rbWVtID0gMCwgbG93d2F0ZXIgOyAKICAKQEAgLTE0NjEsNyArMTQ2MSw3IEBACiAJCTggYW5kIDY0IG9mIHRoZXNlIHN0cnVjdHVyZXMuCiAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotCWJjID0gKHN0cnVjdCBib2FyZF9jaGFuICopKG1lbWFkZHIgKyBDSEFOU1RSVUNUKTsKKwliYyA9IG1lbWFkZHIgKyBDSEFOU1RSVUNUOwogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQlUaGUgYmVsb3cgYXNzaWdubWVudCB3aWxsIHNldCBnZCB0byBwb2ludCBhdCB0aGUgQkVHSU5JTkcgb2YKQEAgLTE0NzAsNyArMTQ3MCw3IEBACiAJCXBvaW50ZXIgYmVnaW5zIGF0IDB4ZDEwLgogCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotCWdkID0gKHN0cnVjdCBnbG9iYWxfZGF0YSAqKShtZW1hZGRyICsgR0xPQkFMKTsKKwlnZCA9IG1lbWFkZHIgKyBHTE9CQUw7CiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQlYRVBPUlRTIChhZGRyZXNzIDB4YzIyKSBwb2ludHMgYXQgdGhlIG51bWJlciBvZiBjaGFubmVscyB0aGUKQEAgLTE0OTMsNiArMTQ5Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYmQtPm51bXBvcnRzOyBpKyssIGNoKyssIGJjKyspICB7IC8qIEJlZ2luIGZvciBlYWNoIHBvcnQgKi8KIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdTE2IHRzZWcsIHJzZWc7CiAKIAkJY2gtPmJyZGNoYW4gICAgICAgID0gYmM7CiAJCWNoLT5tYWlsYm94ICAgICAgICA9IGdkOyAKQEAgLTE1NTMsNTAgKzE1NTQsNTMgQEAKIAkJCXNocmlua21lbSA9IDA7CiAJCX0KIAorCQl0c2VnID0gcmVhZHcoJmJjLT50c2VnKTsKKwkJcnNlZyA9IHJlYWR3KCZiYy0+cnNlZyk7CisKIAkJc3dpdGNoIChiZC0+dHlwZSkgewogCiAJCQljYXNlIFBDSVhFTToKIAkJCWNhc2UgUENJWFJKOgogCQkJY2FzZSBQQ0lYUjoKIAkJCQkvKiBDb3ZlciBhbGwgdGhlIDJNRUcgY2FyZHMgKi8KLQkJCQljaC0+dHhwdHIgPSBtZW1hZGRyICsgKCgoYmMtPnRzZWcpIDw8IDQpICYgMHgxZmZmZmYpOwotCQkJCWNoLT5yeHB0ciA9IG1lbWFkZHIgKyAoKChiYy0+cnNlZykgPDwgNCkgJiAweDFmZmZmZik7Ci0JCQkJY2gtPnR4d2luID0gRkVQV0lOIHwgKChiYy0+dHNlZykgPj4gMTEpOwotCQkJCWNoLT5yeHdpbiA9IEZFUFdJTiB8ICgoYmMtPnJzZWcpID4+IDExKTsKKwkJCQljaC0+dHhwdHIgPSBtZW1hZGRyICsgKCh0c2VnIDw8IDQpICYgMHgxZmZmZmYpOworCQkJCWNoLT5yeHB0ciA9IG1lbWFkZHIgKyAoKHJzZWcgPDwgNCkgJiAweDFmZmZmZik7CisJCQkJY2gtPnR4d2luID0gRkVQV0lOIHwgKHRzZWcgPj4gMTEpOworCQkJCWNoLT5yeHdpbiA9IEZFUFdJTiB8IChyc2VnID4+IDExKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQQ1hFTToKIAkJCWNhc2UgRUlTQVhFTToKIAkJCQkvKiBDb3ZlciBhbGwgdGhlIDMySyB3aW5kb3dlZCBjYXJkcyAqLwogCQkJCS8qIE1hc2sgZXF1YWwgdG8gd2luZG93IHNpemUgLSAxICovCi0JCQkJY2gtPnR4cHRyID0gbWVtYWRkciArICgoKGJjLT50c2VnKSA8PCA0KSAmIDB4N2ZmZik7Ci0JCQkJY2gtPnJ4cHRyID0gbWVtYWRkciArICgoKGJjLT5yc2VnKSA8PCA0KSAmIDB4N2ZmZik7Ci0JCQkJY2gtPnR4d2luID0gRkVQV0lOIHwgKChiYy0+dHNlZykgPj4gMTEpOwotCQkJCWNoLT5yeHdpbiA9IEZFUFdJTiB8ICgoYmMtPnJzZWcpID4+IDExKTsKKwkJCQljaC0+dHhwdHIgPSBtZW1hZGRyICsgKCh0c2VnIDw8IDQpICYgMHg3ZmZmKTsKKwkJCQljaC0+cnhwdHIgPSBtZW1hZGRyICsgKChyc2VnIDw8IDQpICYgMHg3ZmZmKTsKKwkJCQljaC0+dHh3aW4gPSBGRVBXSU4gfCAodHNlZyA+PiAxMSk7CisJCQkJY2gtPnJ4d2luID0gRkVQV0lOIHwgKHJzZWcgPj4gMTEpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFBDWEVWRToKIAkJCWNhc2UgUENYRToKLQkJCQljaC0+dHhwdHIgPSBtZW1hZGRyICsgKCgoYmMtPnRzZWcgLSBiZC0+bWVtb3J5X3NlZykgPDwgNCkgJiAweDFmZmYpOwotCQkJCWNoLT50eHdpbiA9IEZFUFdJTiB8ICgoYmMtPnRzZWcgLSBiZC0+bWVtb3J5X3NlZykgPj4gOSk7Ci0JCQkJY2gtPnJ4cHRyID0gbWVtYWRkciArICgoKGJjLT5yc2VnIC0gYmQtPm1lbW9yeV9zZWcpIDw8IDQpICYgMHgxZmZmKTsKLQkJCQljaC0+cnh3aW4gPSBGRVBXSU4gfCAoKGJjLT5yc2VnIC0gYmQtPm1lbW9yeV9zZWcpID4+OSApOworCQkJCWNoLT50eHB0ciA9IG1lbWFkZHIgKyAoKCh0c2VnIC0gYmQtPm1lbW9yeV9zZWcpIDw8IDQpICYgMHgxZmZmKTsKKwkJCQljaC0+dHh3aW4gPSBGRVBXSU4gfCAoKHRzZWcgLSBiZC0+bWVtb3J5X3NlZykgPj4gOSk7CisJCQkJY2gtPnJ4cHRyID0gbWVtYWRkciArICgoKHJzZWcgLSBiZC0+bWVtb3J5X3NlZykgPDwgNCkgJiAweDFmZmYpOworCQkJCWNoLT5yeHdpbiA9IEZFUFdJTiB8ICgocnNlZyAtIGJkLT5tZW1vcnlfc2VnKSA+PjkgKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQQ1hJOgogCQkJY2FzZSBQQzY0WEU6Ci0JCQkJY2gtPnR4cHRyID0gbWVtYWRkciArICgoYmMtPnRzZWcgLSBiZC0+bWVtb3J5X3NlZykgPDwgNCk7Ci0JCQkJY2gtPnJ4cHRyID0gbWVtYWRkciArICgoYmMtPnJzZWcgLSBiZC0+bWVtb3J5X3NlZykgPDwgNCk7CisJCQkJY2gtPnR4cHRyID0gbWVtYWRkciArICgodHNlZyAtIGJkLT5tZW1vcnlfc2VnKSA8PCA0KTsKKwkJCQljaC0+cnhwdHIgPSBtZW1hZGRyICsgKChyc2VnIC0gYmQtPm1lbW9yeV9zZWcpIDw8IDQpOwogCQkJCWNoLT50eHdpbiA9IGNoLT5yeHdpbiA9IDA7CiAJCQkJYnJlYWs7CiAKIAkJfSAvKiBFbmQgc3dpdGNoIGJkLT50eXBlICovCiAKIAkJY2gtPnR4YnVmaGVhZCA9IDA7Ci0JCWNoLT50eGJ1ZnNpemUgPSBiYy0+dG1heCArIDE7CisJCWNoLT50eGJ1ZnNpemUgPSByZWFkdygmYmMtPnRtYXgpICsgMTsKIAkKIAkJY2gtPnJ4YnVmaGVhZCA9IDA7Ci0JCWNoLT5yeGJ1ZnNpemUgPSBiYy0+cm1heCArIDE7CisJCWNoLT5yeGJ1ZnNpemUgPSByZWFkdygmYmMtPnJtYXgpICsgMTsKIAkKIAkJbG93d2F0ZXIgPSBjaC0+dHhidWZzaXplID49IDIwMDAgPyAxMDI0IDogKGNoLT50eGJ1ZnNpemUgLyAyKTsKIApAQCAtMTcxOCwxMSArMTcyMiwxMSBAQAogc3RhdGljIHZvaWQgZG9ldmVudChpbnQgY3JkKQogeyAvKiBCZWdpbiBkb2V2ZW50ICovCiAKLQl2b2lkICpldmVudGJ1ZjsKKwl2b2lkIF9faW9tZW0gKmV2ZW50YnVmOwogCXN0cnVjdCBjaGFubmVsICpjaCwgKmNoYW4wOwogCXN0YXRpYyBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCBib2FyZF9pbmZvICpiZDsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJdW5zaWduZWQgaW50IHRhaWwsIGhlYWQ7CiAJaW50IGV2ZW50LCBjaGFubmVsOwogCWludCBtc3RhdCwgbHN0YXQ7CkBAIC0xODE3LDcgKzE4MjEsNyBAQAogc3RhdGljIHZvaWQgZmVwY21kKHN0cnVjdCBjaGFubmVsICpjaCwgaW50IGNtZCwgaW50IHdvcmRfb3JfYnl0ZSwKICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZTIsIGludCBuY21kcywgaW50IGJ5dGVjbWQpCiB7IC8qIEJlZ2luIGZlcGNtZCAqLwotCXVuY2hhciAqbWVtYWRkcjsKKwl1bmNoYXIgX19pb21lbSAqbWVtYWRkcjsKIAl1bnNpZ25lZCBpbnQgaGVhZCwgY21kVGFpbCwgY21kU3RhcnQsIGNtZE1heDsKIAlsb25nIGNvdW50OwogCWludCBuOwpAQCAtMjAwMCw3ICsyMDA0LDcgQEAKIAogCXVuc2lnbmVkIGludCBjbWRIZWFkOwogCXN0cnVjdCB0ZXJtaW9zICp0czsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJdW5zaWduZWQgbXZhbCwgaGZsb3csIGNmbGFnLCBpZmxhZzsKIAogCWJjID0gY2gtPmJyZGNoYW47CkBAIC0yMDEwLDcgKzIwMTQsNyBAQAogCXRzID0gdHR5LT50ZXJtaW9zOwogCWlmICgodHMtPmNfY2ZsYWcgJiBDQkFVRCkgPT0gMCkgIHsgLyogQmVnaW4gQ0JBVUQgZGV0ZWN0ZWQgKi8KIAkJY21kSGVhZCA9IHJlYWR3KCZiYy0+cmluKTsKLQkJYmMtPnJvdXQgPSBjbWRIZWFkOworCQl3cml0ZXcoY21kSGVhZCwgJmJjLT5yb3V0KTsKIAkJY21kSGVhZCA9IHJlYWR3KCZiYy0+dGluKTsKIAkJLyogQ2hhbmdpbmcgYmF1ZCBpbiBtaWQtc3RyZWFtIHRyYW5zbWlzc2lvbiBjYW4gYmUgd29uZGVyZnVsICovCiAJCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjExNiw3ICsyMTIwLDcgQEAKIAl1bmNoYXIgKnJwdHI7CiAJc3RydWN0IHRlcm1pb3MgKnRzID0gTlVMTDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXN0cnVjdCBib2FyZF9jaGFuICpiYzsKKwlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAlpbnQgZGF0YVRvUmVhZCwgd3JhcGdhcCwgYnl0ZXNBdmFpbGFibGU7CiAJdW5zaWduZWQgaW50IHRhaWwsIGhlYWQ7CiAJdW5zaWduZWQgaW50IHdyYXBtYXNrOwpAQCAtMjE1NCw3ICsyMTU4LDcgQEAKIAktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCWlmICghdHR5IHx8ICF0cyB8fCAhKHRzLT5jX2NmbGFnICYgQ1JFQUQpKSAgewotCQliYy0+cm91dCA9IGhlYWQ7CisJCXdyaXRldyhoZWFkLCAmYmMtPnJvdXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjcwLDcgKzIyNzQsNyBAQAogc3RhdGljIGludCBwY190aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJdW5zaWduZWQgaW50IG1zdGF0LCBtZmxhZyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjM1MSw3ICsyMzU1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBtZmxhZywgbXN0YXQ7CiAJdW5zaWduZWQgY2hhciBzdGFydGMsIHN0b3BjOwotCXN0cnVjdCBib2FyZF9jaGFuICpiYzsKKwlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAkKQEAgLTI2MzMsNyArMjYzNyw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZlcGNhX2xvY2ssIGZsYWdzKTsKIAkJLyogSnVzdCBpbiBjYXNlIG91dHB1dCB3YXMgcmVzdW1lZCBiZWNhdXNlIG9mIGEgY2hhbmdlIGluIERpZ2ktZmxvdyAqLwogCQlpZiAoY2gtPnN0YXR1c2ZsYWdzICYgVFhTVE9QUEVEKSAgeyAvKiBCZWdpbiB0cmFuc21pdCByZXN1bWUgcmVxdWVzdGVkICovCi0JCQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJCQlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAkJCWdsb2JhbHdpbm9uKGNoKTsKIAkJCWJjID0gY2gtPmJyZGNoYW47CiAJCQlpZiAoY2gtPnN0YXR1c2ZsYWdzICYgTE9XV0FJVCkKQEAgLTI3MjcsNyArMjczMSw3IEBACiBzdGF0aWMgdm9pZCBzZXR1cF9lbXB0eV9ldmVudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgY2hhbm5lbCAqY2gpCiB7IC8qIEJlZ2luIHNldHVwX2VtcHR5X2V2ZW50ICovCiAKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmMgPSBjaC0+YnJkY2hhbjsKKwlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYyA9IGNoLT5icmRjaGFuOwogCiAJZ2xvYmFsd2lub24oY2gpOwogCWNoLT5zdGF0dXNmbGFncyB8PSBFTVBUWVdBSVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZXBjYS5oIGIvZHJpdmVycy9jaGFyL2VwY2EuaAppbmRleCAyMGVlYjVhLi40NTZkNmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZXBjYS5oCisrKyBiL2RyaXZlcnMvY2hhci9lcGNhLmgKQEAgLTEyOCwxNyArMTI4LDE3IEBACiAJdW5zaWduZWQgbG9uZyAgY19jZmxhZzsKIAl1bnNpZ25lZCBsb25nICBjX2xmbGFnOwogCXVuc2lnbmVkIGxvbmcgIGNfb2ZsYWc7Ci0JdW5zaWduZWQgY2hhciAqdHhwdHI7Ci0JdW5zaWduZWQgY2hhciAqcnhwdHI7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICp0eHB0cjsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnJ4cHRyOwogCXVuc2lnbmVkIGNoYXIgKnRtcF9idWY7CiAJc3RydWN0IGJvYXJkX2luZm8gICAgICAgICAgICpib2FyZDsKLQlzdHJ1Y3QgYm9hcmRfY2hhbgkgICAgKmJyZGNoYW47CisJc3RydWN0IGJvYXJkX2NoYW4JICAgIF9faW9tZW0gKmJyZGNoYW47CiAJc3RydWN0IGRpZ2lfc3RydWN0ICAgICAgICAgIGRpZ2lleHQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgICAgICAgICAgICp0dHk7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgIG9wZW5fd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgICAgY2xvc2Vfd2FpdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgICAgdHF1ZXVlOwotCXN0cnVjdCBnbG9iYWxfZGF0YSAJICAgICptYWlsYm94OworCXN0cnVjdCBnbG9iYWxfZGF0YSAJICAgIF9faW9tZW0gKm1haWxib3g7CiB9OwogCiBzdHJ1Y3QgYm9hcmRfaW5mbwkKQEAgLTE0OSw4ICsxNDksOCBAQAogCXVuc2lnbmVkIHNob3J0IG51bXBvcnRzOwogCXVuc2lnbmVkIGxvbmcgcG9ydDsKIAl1bnNpZ25lZCBsb25nIG1lbWJhc2U7Ci0JdW5zaWduZWQgY2hhciBfX2lvbWVtICpyZV9tYXBfcG9ydDsKLQl1bnNpZ25lZCBjaGFyICpyZV9tYXBfbWVtYmFzZTsKKwl2b2lkIF9faW9tZW0gKnJlX21hcF9wb3J0OworCXZvaWQgX19pb21lbSAqcmVfbWFwX21lbWJhc2U7CiAJdW5zaWduZWQgbG9uZyAgbWVtb3J5X3NlZzsKIAl2b2lkICggKiBtZW13aW5vbiApCShzdHJ1Y3QgYm9hcmRfaW5mbyAqLCB1bnNpZ25lZCBpbnQpIDsKIAl2b2lkICggKiBtZW13aW5vZmYgKSAJKHN0cnVjdCBib2FyZF9pbmZvICosIHVuc2lnbmVkIGludCkgOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwppbmRleCBjZGRiNzg5Li5mOTIxNzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwpAQCAtODM5LDkgKzgzOSw2IEBACiAJaHZjX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhodmNfZHJpdmVyLCAmaHZjX29wcyk7CiAKLQlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihodmNfZHJpdmVyKSkKLQkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIGh2YyBjb25zb2xlIGRyaXZlclxuIik7Ci0KIAkvKiBBbHdheXMgc3RhcnQgdGhlIGt0aHJlYWQgYmVjYXVzZSB0aGVyZSBjYW4gYmUgaG90cGx1ZyB2dHkgYWRhcHRlcnMKIAkgKiBhZGRlZCBsYXRlci4gKi8KIAlodmNfdGFzayA9IGt0aHJlYWRfcnVuKGtodmNkLCBOVUxMLCAia2h2Y2QiKTsKQEAgLTg1MSw2ICs4NDgsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihodmNfZHJpdmVyKSkKKwkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIGh2YyBjb25zb2xlIGRyaXZlclxuIik7CisKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KGh2Y19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggMWUzM2NiMC4uZTkxMjY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTgxMCwxMyArODEwLDE0IEBACiAJCQkgKiBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBjdXJzb3IgcG9zaXRpb24KIAkJCSAqLwogCQkJb2xkX29yaWdpbiArPSAodmMtPnZjX3kgLSBuZXdfcm93cy8yKSAqIG9sZF9yb3dfc2l6ZTsKLQkJCWVuZCA9IG9sZF9vcmlnaW4gKyBuZXdfc2NyZWVuX3NpemU7CisJCQllbmQgPSBvbGRfb3JpZ2luICsgKG9sZF9yb3dfc2l6ZSAqIG5ld19yb3dzKTsKIAkJfQogCX0gZWxzZQogCQkvKgogCQkgKiBDdXJzb3IgbmVhciB0aGUgdG9wLCBjb3B5IGNvbnRlbnRzIGZyb20gdGhlIHRvcCBvZiBidWZmZXIKIAkJICovCi0JCWVuZCA9IChvbGRfcm93cyA+IG5ld19yb3dzKSA/IG9sZF9vcmlnaW4gKyBuZXdfc2NyZWVuX3NpemUgOgorCQllbmQgPSAob2xkX3Jvd3MgPiBuZXdfcm93cykgPyBvbGRfb3JpZ2luICsKKwkJCShvbGRfcm93X3NpemUgKiBuZXdfcm93cykgOgogCQkJdmMtPnZjX3Njcl9lbmQ7CiAKIAl1cGRhdGVfYXR0cih2Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCmluZGV4IGZhNzg5ZWEuLjM0NDAwMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCkBAIC04NCw2ICs4NCwxNyBAQAogCiAJICBOb3Qgc3VyZT8gSXQncyBzYWZlIHRvIHNheSBOLgogCitjb25maWcgSVhQMjAwMF9XQVRDSERPRworCXRyaXN0YXRlICJJWFAyMDAwIFdhdGNoZG9nIgorCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQVJDSF9JWFAyMDAwCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRvZyB0aW1lcgorCSAgaW4gdGhlIEludGVsIElYUDIwMDAoMjQwMCwgMjgwMCwgMjg1MCkgbmV0d29yayBwcm9jZXNzb3JzLgorCSAgVGhpcyBkcml2ZXIgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIGJ5IGNob29zaW5nIE0uIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGl4cDIwMDBfd2R0LgorCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIElYUDRYWF9XQVRDSERPRwogCXRyaXN0YXRlICJJWFA0eHggV2F0Y2hkb2ciCiAJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBBUkNIX0lYUDRYWApAQCAtMTAwLDE3ICsxMTEsNiBAQAogCiAJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIAotY29uZmlnIElYUDIwMDBfV0FUQ0hET0cKLQl0cmlzdGF0ZSAiSVhQMjAwMCBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIEFSQ0hfSVhQMjAwMAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgd2F0Y2hkb2cgdGltZXIKLQkgIGluIHRoZSBJbnRlbCBJWFAyMDAwKDI0MDAsIDI4MDAsIDI4NTApIG5ldHdvcmsgcHJvY2Vzc29ycy4KLQkgIFRoaXMgZHJpdmVyIGNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZSBieSBjaG9vc2luZyBNLiBUaGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBpeHAyMDAwX3dkdC4KLQotCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCi0KIGNvbmZpZyBTM0MyNDEwX1dBVENIRE9HCiAJdHJpc3RhdGUgIlMzQzI0MTAgV2F0Y2hkb2ciCiAJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBBUkNIX1MzQzI0MTAKQEAgLTIzMyw2ICsyMzMsMTYgQEAKIAogCSAgTW9zdCBwZW9wbGUgd2lsbCBzYXkgTi4KIAorY29uZmlnIElCTUFTUgorICAgICAgICB0cmlzdGF0ZSAiSUJNIEF1dG9tYXRpYyBTZXJ2ZXIgUmVzdGFydCIKKyAgICAgICAgZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKyAgICAgICAgaGVscAorCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgSUJNIEF1dG9tYXRpYyBTZXJ2ZXIgUmVzdGFydCB3YXRjaGRvZworCSAgdGltZXIgYnVpbHRpbiBpbnRvIHNvbWUgZVNlcnZlciB4U2VyaWVzIG1hY2hpbmVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpYm1hc3IuCisKIGNvbmZpZyBXQUZFUl9XRFQKIAl0cmlzdGF0ZSAiSUNQIFdhZmVyIDU4MjMgU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CkBAIC0yNDMsNiArMjUzLDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3YWZlcjU4MjN3ZHQuCiAKK2NvbmZpZyBJNjMwMEVTQl9XRFQKKwl0cmlzdGF0ZSAiSW50ZWwgNjMwMEVTQiBUaW1lci9XYXRjaGRvZyIKKwlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NiAmJiBQQ0kKKwktLS1oZWxwLS0tCisJICBIYXJkd2FyZSBkcml2ZXIgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBidWlsdCBpbnRvIHRoZSBJbnRlbAorCSAgNjMwMEVTQiBjb250cm9sbGVyIGh1Yi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaTYzMDBlc2IuCisKIGNvbmZpZyBJOFhYX1RDTwogCXRyaXN0YXRlICJJbnRlbCBpOHh4IFRDTyBUaW1lci9XYXRjaGRvZyIKIAlkZXBlbmRzIG9uIFdBVENIRE9HICYmIChYODYgfHwgSUE2NCkgJiYgUENJCkBAIC0yOTgsNiArMzE4LDE5IEBACiAJICBZb3UgY2FuIGNvbXBpbGUgdGhpcyBkcml2ZXIgZGlyZWN0bHkgaW50byB0aGUga2VybmVsLCBvciB1c2UKIAkgIGl0IGFzIGEgbW9kdWxlLiAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYmM2MHh4d2R0LgogCitjb25maWcgU0JDODM2MF9XRFQKKwl0cmlzdGF0ZSAiU0JDODM2MCBXYXRjaGRvZyBUaW1lciIKKwlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgorCS0tLWhlbHAtLS0KKworCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgb24gdGhlIFNCQzgzNjAgU2luZ2xlCisJICBCb2FyZCBDb21wdXRlciBwcm9kdWNlZCBieSBBeGlvbXRlayBDby4sIEx0ZC4gKHd3dy5heGlvbXRlay5jb20pLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYmM4MzYwLmtvLgorCisJICBNb3N0IHBlb3BsZSB3aWxsIHNheSBOLgorCiBjb25maWcgQ1BVNV9XRFQKIAl0cmlzdGF0ZSAiU01BIENQVTUgV2F0Y2hkb2ciCiAJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKQEAgLTMzNiw2ICszNjksMTkgQEAKIAogCSAgTW9zdCBwZW9wbGUgd2lsbCBzYXkgTi4KIAorY29uZmlnIFc4Mzk3N0ZfV0RUCisJdHJpc3RhdGUgIlc4Mzk3N0YgKFBDTS01MzM1KSBXYXRjaGRvZyBUaW1lciIKKwlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIG9uIHRoZSBXODM5NzdGIEkvTyBjaGlwCisJICBhcyB1c2VkIGluIEFBRU9OJ3MgUENNLTUzMzUgU0JDIChhbmQgbGlrZWx5IG90aGVycykuICBUaGlzCisJICB3YXRjaGRvZyBzaW1wbHkgd2F0Y2hlcyB5b3VyIGtlcm5lbCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBmcmVlemUsCisJICBhbmQgaWYgaXQgZG9lcywgaXQgcmVib290cyB5b3VyIGNvbXB1dGVyIGFmdGVyIGEgY2VydGFpbiBhbW91bnQgb2YKKwkgIHRpbWUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHc4Mzk3N2Zfd2R0LgorCiBjb25maWcgTUFDSFpfV0RUCiAJdHJpc3RhdGUgIlpGIE1hY2haIFdhdGNoZG9nIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CkBAIC0zNTUsNiArNDAxLDEwIEBACiAJdHJpc3RhdGUgIk1QQzh4eCBXYXRjaGRvZyBUaW1lciIKIAlkZXBlbmRzIG9uIFdBVENIRE9HICYmIDh4eAogCitjb25maWcgTVY2NFg2MF9XRFQKKwl0cmlzdGF0ZSAiTVY2NFg2MCAoTWFydmVsbCBEaXNjb3ZlcnkpIFdhdGNoZG9nIFRpbWVyIgorCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgTVY2NFg2MAorCiBjb25maWcgQk9PS0VfV0RUCiAJdHJpc3RhdGUgIlBvd2VyUEMgQm9vay1FIFdhdGNoZG9nIFRpbWVyIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgKEJPT0tFIHx8IDR4eCkKQEAgLTM2Miw2ICs0MTIsMTcgQEAKIAkgIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0IGZvcgogCSAgbW9yZSBpbmZvcm1hdGlvbi4KIAorIyBQUEM2NCBBcmNoaXRlY3R1cmUKKworY29uZmlnIFdBVENIRE9HX1JUQVMKKwl0cmlzdGF0ZSAiUlRBUyB3YXRjaGRvZyIKKwlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFBQQ19SVEFTCisJaGVscAorCSAgVGhpcyBkcml2ZXIgYWRkcyB3YXRjaGRvZyBzdXBwb3J0IGZvciB0aGUgUlRBUyB3YXRjaGRvZy4KKworICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHdkcnRhcy4KKwogIyBNSVBTIEFyY2hpdGVjdHVyZQogCiBjb25maWcgSU5EWURPRwpAQCAtNDMwLDE2ICs0OTEsNiBAQAogCSAgbWFjaGluZXMuICBUaGUgd2F0Y2hkb2cgdGltZW91dCBwZXJpb2QgaXMgbm9ybWFsbHkgb25lIG1pbnV0ZSBidXQKIAkgIGNhbiBiZSBjaGFuZ2VkIHdpdGggYSBib290LXRpbWUgcGFyYW1ldGVyLgogCi0jIHBwYzY0IFJUQVMgd2F0Y2hkb2cKLWNvbmZpZyBXQVRDSERPR19SVEFTCi0JdHJpc3RhdGUgIlJUQVMgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBQUENfUlRBUwotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGFkZHMgd2F0Y2hkb2cgc3VwcG9ydCBmb3IgdGhlIFJUQVMgd2F0Y2hkb2cuCi0KLSAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCB3ZHJ0YXMuCi0KICMKICMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggYmM2ZjVmZS4uY2ZkMGEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMzksMjIgKzM5LDI3IEBACiBvYmotJChDT05GSUdfU0M1MjBfV0RUKSArPSBzYzUyMF93ZHQubwogb2JqLSQoQ09ORklHX0VVUk9URUNIX1dEVCkgKz0gZXVyb3RlY2h3ZHQubwogb2JqLSQoQ09ORklHX0lCNzAwX1dEVCkgKz0gaWI3MDB3ZHQubworb2JqLSQoQ09ORklHX0lCTUFTUikgKz0gaWJtYXNyLm8KIG9iai0kKENPTkZJR19XQUZFUl9XRFQpICs9IHdhZmVyNTgyM3dkdC5vCitvYmotJChDT05GSUdfSTYzMDBFU0JfV0RUKSArPSBpNjMwMGVzYi5vCiBvYmotJChDT05GSUdfSThYWF9UQ08pICs9IGk4eHhfdGNvLm8KIG9iai0kKENPTkZJR19TQzEyMDBfV0RUKSArPSBzYzEyMDB3ZHQubwogb2JqLSQoQ09ORklHX1NDeDIwMF9XRFQpICs9IHNjeDIwMF93ZHQubwogb2JqLSQoQ09ORklHXzYwWFhfV0RUKSArPSBzYmM2MHh4d2R0Lm8KK29iai0kKENPTkZJR19TQkM4MzYwX1dEVCkgKz0gc2JjODM2MC5vCiBvYmotJChDT05GSUdfQ1BVNV9XRFQpICs9IGNwdTV3ZHQubwogb2JqLSQoQ09ORklHX1c4MzYyN0hGX1dEVCkgKz0gdzgzNjI3aGZfd2R0Lm8KIG9iai0kKENPTkZJR19XODM4NzdGX1dEVCkgKz0gdzgzODc3Zl93ZHQubworb2JqLSQoQ09ORklHX1c4Mzk3N0ZfV0RUKSArPSB3ODM5NzdmX3dkdC5vCiBvYmotJChDT05GSUdfTUFDSFpfV0RUKSArPSBtYWNoendkLm8KIAogIyBQb3dlclBDIEFyY2hpdGVjdHVyZQogb2JqLSQoQ09ORklHXzh4eF9XRFQpICs9IG1wYzh4eF93ZHQubworb2JqLSQoQ09ORklHX01WNjRYNjBfV0RUKSArPSBtdjY0eDYwX3dkdC5vCitvYmotJChDT05GSUdfQk9PS0VfV0RUKSArPSBib29rZV93ZHQubwogCiAjIFBQQzY0IEFyY2hpdGVjdHVyZQogb2JqLSQoQ09ORklHX1dBVENIRE9HX1JUQVMpICs9IHdkcnRhcy5vCi1vYmotJChDT05GSUdfQk9PS0VfV0RUKSArPSBib29rZV93ZHQubwogCiAjIE1JUFMgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfSU5EWURPRykgKz0gaW5keWRvZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTYzMDBlc2IuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pNjMwMGVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNzg1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTYzMDBlc2IuYwpAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqCWk2MzAwZXNiOglXYXRjaGRvZyB0aW1lciBkcml2ZXIgZm9yIEludGVsIDYzMDBFU0IgY2hpcHNldAorICoKKyAqCShjKSBDb3B5cmlnaHQgMjAwNCBHb29nbGUgSW5jLgorICoJKGMpIENvcHlyaWdodCAyMDA1IERhdmlkIEjkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgYmFzZWQgb24gaTgxMC10Y28uYyB3aGljaCBpcyBpbiB0dXJuIGJhc2VkIG9uIHNvZnRkb2cuYworICoKKyAqIAlUaGUgdGltZXIgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZvbGxvd2luZyBJL08gY29udHJvbGxlciBodWJzOgorICogCShTZWUgdGhlIGludGVsIGRvY3VtZW50YXRpb24gb24gaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20uKQorICogCTYzMDBFU0IgY2hpcCA6IGRvY3VtZW50IG51bWJlciAzMDA2NDEtMDAzCisgKgorICogIDIwMDRZWVpaIFJvc3MgQmlybworICoJSW5pdGlhbCB2ZXJzaW9uIDAuMDEKKyAqICAyMDA0WVlaWiBSb3NzIEJpcm8KKyAqICAJVmVyc2lvbiAwLjAyCisgKiAgMjAwNTAyMTAgRGF2aWQgSORyZGVtYW4gPGRhdmlkQDJnZW4uY29tPgorICogICAgICBQb3J0ZWQgZHJpdmVyIHRvIGtlcm5lbCAyLjYKKyAqLworCisvKgorICogICAgICBJbmNsdWRlcywgZGVmaW5lcywgdmFyaWFibGVzLCBtb2R1bGUgcGFyYW1ldGVycywgLi4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBFU0JfVkVSU0lPTiAiMC4wMyIKKyNkZWZpbmUgRVNCX01PRFVMRV9OQU1FICJpNjMwMEVTQiB0aW1lciIKKyNkZWZpbmUgRVNCX0RSSVZFUl9OQU1FIEVTQl9NT0RVTEVfTkFNRSAiLCB2IiBFU0JfVkVSU0lPTgorI2RlZmluZSBQRlggRVNCX01PRFVMRV9OQU1FICI6ICIKKworLyogUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIEVTQl9DT05GSUdfUkVHICAweDYwICAgICAgICAgICAgLyogQ29uZmlnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVTQl9MT0NLX1JFRyAgICAweDY4ICAgICAgICAgICAgLyogV0RUIGxvY2sgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCisKKy8qIE1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVTQl9USU1FUjFfUkVHICBCQVNFQUREUiArIDB4MDAgLyogVGltZXIxIHZhbHVlIGFmdGVyIGVhY2ggcmVzZXQgICAgICovCisjZGVmaW5lIEVTQl9USU1FUjJfUkVHICBCQVNFQUREUiArIDB4MDQgLyogVGltZXIyIHZhbHVlIGFmdGVyIGVhY2ggcmVzZXQgICAgICovCisjZGVmaW5lIEVTQl9HSU5UU1JfUkVHICBCQVNFQUREUiArIDB4MDggLyogR2VuZXJhbCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEVTQl9SRUxPQURfUkVHICBCQVNFQUREUiArIDB4MGMgLyogUmVsb2FkIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisKKy8qIExvY2sgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBFU0JfV0RUX0ZVTkMgICAgKCAweDAxIDw8IDIgKSAgIC8qIFdhdGNoZG9nIGZ1bmN0aW9uYWxpdHkgICAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0VOQUJMRSAgKCAweDAxIDw8IDEgKSAgIC8qIEVuYWJsZSBXRFQgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0xPQ0sgICAgKCAweDAxIDw8IDAgKSAgIC8qIExvY2sgKG5vd2F5b3V0KSAgICAgICAgICAgICAgICAgICAqLworCisvKiBDb25maWcgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBFU0JfV0RUX1JFQk9PVCAgKCAweDAxIDw8IDUgKSAgIC8qIEVuYWJsZSByZWJvb3Qgb24gdGltZW91dCAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0ZSRVEgICAgKCAweDAxIDw8IDIgKSAgIC8qIERlY3JlbWVudCBmcmVxdWVuY3kgICAgICAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0lOVFRZUEUgKCAweDExIDw8IDAgKSAgIC8qIEludGVycnVwdCB0eXBlIG9uIHRpbWVyMSB0aW1lb3V0ICAqLworCisvKiBSZWxvYWQgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBFU0JfV0RUX1JFTE9BRCAoIDB4MDEgPDwgOCApICAgIC8qIHByZXZlbnQgdGltZW91dCAgICAgICAgICAgICAgICAgICAqLworCisvKiBNYWdpYyBjb25zdGFudHMgKi8KKyNkZWZpbmUgRVNCX1VOTE9DSzEgICAgIDB4ODAgICAgICAgICAgICAvKiBTdGVwIDEgdG8gdW5sb2NrIHJlc2V0IHJlZ2lzdGVycyAgKi8KKyNkZWZpbmUgRVNCX1VOTE9DSzIgICAgIDB4ODYgICAgICAgICAgICAvKiBTdGVwIDIgdG8gdW5sb2NrIHJlc2V0IHJlZ2lzdGVycyAgKi8KKworLyogaW50ZXJuYWwgdmFyaWFibGVzICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICpCQVNFQUREUjsKK3N0YXRpYyBzcGlubG9ja190IGVzYl9sb2NrOyAvKiBHdWFyZHMgdGhlIGhhcmR3YXJlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9hbGl2ZTsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZXNiX3BjaTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCB0cmlnZ2VyZWQ7IC8qIFRoZSBzdGF0dXMgb2YgdGhlIHdhdGNoZG9nIHVwb24gYm9vdCAqLworc3RhdGljIGNoYXIgZXNiX2V4cGVjdF9jbG9zZTsKKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDMwICAgLyogMzAgc2VjIGRlZmF1bHQgaGVhcnRiZWF0ICgxPGhlYXJ0YmVhdDwyKjEwMjMpICovCitzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsgIC8qIGluIHNlY29uZHMgKi8KK21vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMTxoZWFydGJlYXQ8MjA0NiwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CisKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9Q09ORklHX1dBVENIRE9HX05PV0FZT1VUKSIpOworCisvKgorICogU29tZSBpNjMwMEVTQiBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqLworCisvKgorICogUHJlcGFyZSBmb3IgcmVsb2FkaW5nIHRoZSB0aW1lciBieSB1bmxvY2tpbmcgdGhlIHByb3BlciByZWdpc3RlcnMuCisgKiBUaGlzIGlzIHBlcmZvcm1lZCBieSBmaXJzdCB3cml0aW5nIDB4ODAgZm9sbG93ZWQgYnkgMHg4NiB0byB0aGUKKyAqIHJlbG9hZCByZWdpc3Rlci4gQWZ0ZXIgdGhpcyB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzIGNhbiBiZSB3cml0dGVuCisgKiB0byBvbmNlIGJlZm9yZSB0aGV5IG5lZWQgdG8gYmUgdW5sb2NrZWQgYWdhaW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlc2JfdW5sb2NrX3JlZ2lzdGVycyh2b2lkKSB7CisgICAgICAgIHdyaXRlYihFU0JfVU5MT0NLMSwgRVNCX1JFTE9BRF9SRUcpOworICAgICAgICB3cml0ZWIoRVNCX1VOTE9DSzIsIEVTQl9SRUxPQURfUkVHKTsKK30KKworc3RhdGljIHZvaWQgZXNiX3RpbWVyX3N0YXJ0KHZvaWQpCit7CisJdTggdmFsOworCisJLyogRW5hYmxlIG9yIEVuYWJsZSArIExvY2s/ICovCisJdmFsID0gMHgwMiB8IChub3dheW91dCA/IDB4MDEgOiAweDAwKTsKKworICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2J5dGUoZXNiX3BjaSwgRVNCX0xPQ0tfUkVHLCB2YWwpOworfQorCitzdGF0aWMgaW50IGVzYl90aW1lcl9zdG9wKHZvaWQpCit7CisJdTggdmFsOworCisJc3Bpbl9sb2NrKCZlc2JfbG9jayk7CisJLyogRmlyc3QsIHJlc2V0IHRpbWVycyBhcyBzdWdnZXN0ZWQgYnkgdGhlIGRvY3MgKi8KKwllc2JfdW5sb2NrX3JlZ2lzdGVycygpOworCXdyaXRldyhFU0JfV0RUX1JFTE9BRCwgRVNCX1JFTE9BRF9SRUcpOworCS8qIFRoZW4gZGlzYWJsZSB0aGUgV0RUICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGVzYl9wY2ksIEVTQl9MT0NLX1JFRywgMHgwKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShlc2JfcGNpLCBFU0JfTE9DS19SRUcsICZ2YWwpOworCXNwaW5fdW5sb2NrKCZlc2JfbG9jayk7CisKKwkvKiBSZXR1cm5zIDAgaWYgdGhlIHRpbWVyIHdhcyBkaXNhYmxlZCwgbm9uLXplcm8gb3RoZXJ3aXNlICovCisJcmV0dXJuICh2YWwgJiAweDAxKTsKK30KKworc3RhdGljIHZvaWQgZXNiX3RpbWVyX2tlZXBhbGl2ZSh2b2lkKQoreworCXNwaW5fbG9jaygmZXNiX2xvY2spOworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisJd3JpdGV3KEVTQl9XRFRfUkVMT0FELCBFU0JfUkVMT0FEX1JFRyk7CisgICAgICAgIC8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGZsdXNoIGFueXRoaW5nIGhlcmU/ICovCisJc3Bpbl91bmxvY2soJmVzYl9sb2NrKTsKK30KKworc3RhdGljIGludCBlc2JfdGltZXJfc2V0X2hlYXJ0YmVhdChpbnQgdGltZSkKK3sKKwl1MzIgdmFsOworCisJaWYgKHRpbWUgPCAweDEgfHwgdGltZSA+ICgyICogMHgwM2ZmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJmVzYl9sb2NrKTsKKworCS8qIFdlIHNoaWZ0IGJ5IDksIHNvIGlmIHdlIGFyZSBwYXNzZWQgYSB2YWx1ZSBvZiAxIHNlYywKKwkgKiB2YWwgd2lsbCBiZSAxIDw8IDkgPSA1MTIsIHRoZW4gd3JpdGUgdGhhdCB0byB0d28KKwkgKiB0aW1lcnMgPT4gMiAqIDUxMiA9IDEwMjQgKHdoaWNoIGlzIGRlY3JlbWVudGVkIGF0IDFLSHopCisJICovCisJdmFsID0gdGltZSA8PCA5OworCisJLyogV3JpdGUgdGltZXIgMSAqLworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisJd3JpdGVsKHZhbCwgRVNCX1RJTUVSMV9SRUcpOworCisJLyogV3JpdGUgdGltZXIgMiAqLworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisgICAgICAgIHdyaXRlbCh2YWwsIEVTQl9USU1FUjJfUkVHKTsKKworICAgICAgICAvKiBSZWxvYWQgKi8KKwllc2JfdW5sb2NrX3JlZ2lzdGVycygpOworCXdyaXRldyhFU0JfV0RUX1JFTE9BRCwgRVNCX1JFTE9BRF9SRUcpOworCisJLyogRklYTUU6IERvIHdlIG5lZWQgdG8gZmx1c2ggZXZlcnl0aGluZyBvdXQ/ICovCisKKwkvKiBEb25lICovCisJaGVhcnRiZWF0ID0gdGltZTsKKwlzcGluX3VubG9jaygmZXNiX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVzYl90aW1lcl9yZWFkICh2b2lkKQoreworICAgICAgIAl1MzIgY291bnQ7CisKKwkvKiBUaGlzIGlzbid0IGRvY3VtZW50ZWQsIGFuZCBkb2Vzbid0IHRha2UgaW50bworICAgICAgICAgKiBhY291bnQgd2hpY2ggc3RhZ2UgaXMgcnVubmluZywgYnV0IGl0IGxvb2tzCisgICAgICAgICAqIGxpa2UgYSAyMCBiaXQgY291bnQgZG93biwgc28gd2UgbWlnaHQgYXMgd2VsbCByZXBvcnQgaXQuCisgICAgICAgICAqLworICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZXNiX3BjaSwgMHg2NCwgJmNvdW50KTsKKyAgICAgICAgcmV0dXJuIChpbnQpY291bnQ7Cit9CisKKy8qCisgKiAJL2Rldi93YXRjaGRvZyBoYW5kbGluZworICovCisKK3N0YXRpYyBpbnQgZXNiX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworICAgICAgICAvKiAvZGV2L3dhdGNoZG9nIGNhbiBvbmx5IGJlIG9wZW5lZCBvbmNlICovCisgICAgICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ0aW1lcl9hbGl2ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKworICAgICAgICAvKiBSZWxvYWQgYW5kIGFjdGl2YXRlIHRpbWVyICovCisgICAgICAgIGVzYl90aW1lcl9rZWVwYWxpdmUgKCk7CisgICAgICAgIGVzYl90aW1lcl9zdGFydCAoKTsKKworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIGludCBlc2JfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisgICAgICAgIC8qIFNodXQgb2ZmIHRoZSB0aW1lci4gKi8KKyAgICAgICAgaWYgKGVzYl9leHBlY3RfY2xvc2UgPT0gNDIpIHsKKyAgICAgICAgICAgICAgICBlc2JfdGltZXJfc3RvcCAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisgICAgICAgICAgICAgICAgZXNiX3RpbWVyX2tlZXBhbGl2ZSAoKTsKKyAgICAgICAgfQorICAgICAgICBjbGVhcl9iaXQoMCwgJnRpbWVyX2FsaXZlKTsKKyAgICAgICAgZXNiX2V4cGVjdF9jbG9zZSA9IDA7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBlc2Jfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCSAgc2l6ZV90IGxlbiwgbG9mZl90ICogcHBvcykKK3sKKwkvKiBTZWUgaWYgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgJ1YnIGFuZCByZWxvYWQgdGhlIHRpbWVyICovCisgICAgICAgIGlmIChsZW4pIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisKKwkJCS8qIG5vdGU6IGp1c3QgaW4gY2FzZSBzb21lb25lIHdyb3RlIHRoZSBtYWdpYyBjaGFyYWN0ZXIKKwkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLworCQkJZXNiX2V4cGVjdF9jbG9zZSA9IDA7CisKKwkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisJCQkJY2hhciBjOworCQkJCWlmKGdldF91c2VyKGMsIGRhdGEraSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWlmIChjID09ICdWJykKKwkJCQkJZXNiX2V4cGVjdF9jbG9zZSA9IDQyOworCQkJfQorCQl9CisKKwkJLyogc29tZW9uZSB3cm90ZSB0byB1cywgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgdGltZXIgKi8KKwkJZXNiX3RpbWVyX2tlZXBhbGl2ZSAoKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBlc2JfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgbmV3X29wdGlvbnMsIHJldHZhbCA9IC1FSU5WQUw7CisJaW50IG5ld19oZWFydGJlYXQ7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IGFyZ3A7CisJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCQkub3B0aW9ucyA9ICAgICAgICAgICAgICBXRElPRl9TRVRUSU1FT1VUIHwKKwkJCQkJV0RJT0ZfS0VFUEFMSVZFUElORyB8CisJCQkJCVdESU9GX01BR0lDQ0xPU0UsCisJCS5maXJtd2FyZV92ZXJzaW9uID0gICAgIDAsCisJCS5pZGVudGl0eSA9ICAgICAgICAgICAgIEVTQl9NT0RVTEVfTkFNRSwKKwl9OworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsCisJCQkJCSAgICBzaXplb2YgKGlkZW50KSkgPyAtRUZBVUxUIDogMDsKKworCQljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJCXJldHVybiBwdXRfdXNlciAoZXNiX3RpbWVyX3JlYWQoKSwgcCk7CisKKwkJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQkJcmV0dXJuIHB1dF91c2VyICh0cmlnZ2VyZWQsIHApOworCisgICAgICAgICAgICAgICAgY2FzZSBXRElPQ19LRUVQQUxJVkU6CisgICAgICAgICAgICAgICAgICAgICAgICBlc2JfdGltZXJfa2VlcGFsaXZlICgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgICAgICBjYXNlIFdESU9DX1NFVE9QVElPTlM6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldF91c2VyIChuZXdfb3B0aW9ucywgcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X29wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2JfdGltZXJfc3RvcCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2JfdGltZXJfa2VlcGFsaXZlICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2JfdGltZXJfc3RhcnQgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBXRElPQ19TRVRUSU1FT1VUOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRfdXNlcihuZXdfaGVhcnRiZWF0LCBwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc2JfdGltZXJfc2V0X2hlYXJ0YmVhdChuZXdfaGVhcnRiZWF0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZXNiX3RpbWVyX2tlZXBhbGl2ZSAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhbGwgKi8KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHV0X3VzZXIoaGVhcnRiZWF0LCBwKTsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOworICAgICAgICB9Cit9CisKKy8qCisgKiAgICAgIE5vdGlmeSBzeXN0ZW0KKyAqLworCitzdGF0aWMgaW50IGVzYl9ub3RpZnlfc3lzIChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQoreworICAgICAgICBpZiAoY29kZT09U1lTX0RPV04gfHwgY29kZT09U1lTX0hBTFQpIHsKKyAgICAgICAgICAgICAgICAvKiBUdXJuIHRoZSBXRFQgb2ZmICovCisgICAgICAgICAgICAgICAgZXNiX3RpbWVyX3N0b3AgKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKy8qCisgKiAgICAgIEtlcm5lbCBJbnRlcmZhY2VzCisgKi8KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXNiX2ZvcHMgPSB7CisgICAgICAgIC5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKKyAgICAgICAgLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKKyAgICAgICAgLndyaXRlID0gICAgICAgIGVzYl93cml0ZSwKKyAgICAgICAgLmlvY3RsID0gICAgICAgIGVzYl9pb2N0bCwKKyAgICAgICAgLm9wZW4gPSAgICAgICAgIGVzYl9vcGVuLAorICAgICAgICAucmVsZWFzZSA9ICAgICAgZXNiX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZXNiX21pc2NkZXYgPSB7CisgICAgICAgIC5taW5vciA9ICAgICAgICBXQVRDSERPR19NSU5PUiwKKyAgICAgICAgLm5hbWUgPSAgICAgICAgICJ3YXRjaGRvZyIsCisgICAgICAgIC5mb3BzID0gICAgICAgICAmZXNiX2ZvcHMsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGVzYl9ub3RpZmllciA9IHsKKyAgICAgICAgLm5vdGlmaWVyX2NhbGwgPSAgICAgICAgZXNiX25vdGlmeV9zeXMsCit9OworCisvKgorICogRGF0YSBmb3IgUENJIGRyaXZlciBpbnRlcmZhY2UKKyAqCisgKiBUaGlzIGRhdGEgb25seSBleGlzdHMgZm9yIGV4cG9ydGluZyB0aGUgc3VwcG9ydGVkCisgKiBQQ0kgaWRzIHZpYSBNT0RVTEVfREVWSUNFX1RBQkxFLiAgV2UgZG8gbm90IGFjdHVhbGx5CisgKiByZWdpc3RlciBhIHBjaV9kcml2ZXIsIGJlY2F1c2Ugc29tZW9uZSBlbHNlIG1pZ2h0IG9uZSBkYXkKKyAqIHdhbnQgdG8gcmVnaXN0ZXIgYW5vdGhlciBkcml2ZXIgb24gdGhlIHNhbWUgUENJIGlkLgorICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZXNiX3BjaV90YmxbXSA9IHsKKyAgICAgICAgeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzkpLCB9LAorICAgICAgICB7IDAsIH0sICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgbGlzdCAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgZXNiX3BjaV90YmwpOworCisvKgorICogICAgICBJbml0ICYgZXhpdCByb3V0aW5lcworICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9faW5pdCBlc2JfZ2V0ZGV2aWNlICh2b2lkKQoreworCXU4IHZhbDE7CisJdW5zaWduZWQgc2hvcnQgdmFsMjsKKworICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKyAgICAgICAgLyoKKyAgICAgICAgICogICAgICBGaW5kIHRoZSBQQ0kgZGV2aWNlCisgICAgICAgICAqLworCisgICAgICAgIGZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CisgICAgICAgICAgICAgICAgaWYgKHBjaV9tYXRjaF9pZChlc2JfcGNpX3RibCwgZGV2KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXNiX3BjaSA9IGRldjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwl9CisKKyAgICAgICAgaWYgKGVzYl9wY2kpIHsKKyAgICAgICAgCWlmIChwY2lfZW5hYmxlX2RldmljZShlc2JfcGNpKSkgeworCQkJcHJpbnRrIChLRVJOX0VSUiBQRlggImZhaWxlZCB0byBlbmFibGUgZGV2aWNlXG4iKTsKKwkJCWdvdG8gZXJyX2RldnB1dDsKKwkJfQorCisJCWlmIChwY2lfcmVxdWVzdF9yZWdpb24oZXNiX3BjaSwgMCwgRVNCX01PRFVMRV9OQU1FKSkgeworCQkJcHJpbnRrIChLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvblxuIik7CisJCQlnb3RvIGVycl9kaXNhYmxlOworCQl9CisKKwkJQkFTRUFERFIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChlc2JfcGNpLCAwKSwKKwkJCQkgICBwY2lfcmVzb3VyY2VfbGVuKGVzYl9wY2ksIDApKTsKKwkJaWYgKEJBU0VBRERSID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAJLyogU29tZXRoaW5nJ3Mgd3JvbmcgaGVyZSwgQkFTRUFERFIgaGFzIHRvIGJlIHNldCAqLworCQkJcHJpbnRrIChLRVJOX0VSUiBQRlggImZhaWxlZCB0byBnZXQgQkFTRUFERFJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfcmVsZWFzZTsKKyAgICAgICAgICAgICAgICB9CisKKwkJLyoKKwkJICogVGhlIHdhdGNoZG9nIGhhcyB0d28gdGltZXJzLCBpdCBjYW4gYmUgc2V0dXAgc28gdGhhdCB0aGUKKwkJICogZXhwaXJ5IG9mIHRpbWVyMSByZXN1bHRzIGluIGFuIGludGVycnVwdCBhbmQgdGhlIGV4cGlyeSBvZgorCQkgKiB0aW1lcjIgcmVzdWx0cyBpbiBhIHJlYm9vdC4gV2Ugc2V0IGl0IHRvIG5vdCBnZW5lcmF0ZQorCQkgKiBhbnkgaW50ZXJydXB0cyBhcyB0aGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gd2l0aCBpdAorCQkgKiByaWdodCBub3cuCisJCSAqCisJCSAqIFdlIGFsc28gZW5hYmxlIHJlYm9vdHMgYW5kIHNldCB0aGUgdGltZXIgZnJlcXVlbmN5IHRvCisJCSAqIHRoZSBQQ0kgY2xvY2sgZGl2aWRlZCBieSAyXjE1IChhcHByb3ggMUtIeikuCisJCSAqLworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZXNiX3BjaSwgRVNCX0NPTkZJR19SRUcsIDB4MDAwMyk7CisKKwkJLyogQ2hlY2sgdGhhdCB0aGUgV0RUIGlzbid0IGFscmVhZHkgbG9ja2VkICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGVzYl9wY2ksIEVTQl9MT0NLX1JFRywgJnZhbDEpOworCQlpZiAodmFsMSAmIEVTQl9XRFRfTE9DSykKKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HIFBGWCAibm93YXlvdXQgYWxyZWFkeSBzZXRcbiIpOworCisJCS8qIFNldCB0aGUgdGltZXIgdG8gd2F0Y2hkb2cgbW9kZSBhbmQgZGlzYWJsZSBpdCBmb3Igbm93ICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShlc2JfcGNpLCBFU0JfTE9DS19SRUcsIDB4MDApOworCisJCS8qIENoZWNrIGlmIHRoZSB3YXRjaGRvZyB3YXMgcHJldmlvdXNseSB0cmlnZ2VyZWQgKi8KKwkJZXNiX3VubG9ja19yZWdpc3RlcnMoKTsKKwkJdmFsMiA9IHJlYWR3KEVTQl9SRUxPQURfUkVHKTsKKwkJdHJpZ2dlcmVkID0gKHZhbDIgJiAoMHgwMSA8PCA5KSA+PiA5KTsKKworCQkvKiBSZXNldCB0cmlnZ2VyIGZsYWcgYW5kIHRpbWVycyAqLworCQllc2JfdW5sb2NrX3JlZ2lzdGVycygpOworCQl3cml0ZXcoKDB4MTEgPDwgOCksIEVTQl9SRUxPQURfUkVHKTsKKworCQkvKiBEb25lICovCisJCXJldHVybiAxOworCitlcnJfcmVsZWFzZToKKwkJcGNpX3JlbGVhc2VfcmVnaW9uKGVzYl9wY2ksIDApOworZXJyX2Rpc2FibGU6CisJCXBjaV9kaXNhYmxlX2RldmljZShlc2JfcGNpKTsKK2Vycl9kZXZwdXQ6CisJCXBjaV9kZXZfcHV0KGVzYl9wY2kpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgd2F0Y2hkb2dfaW5pdCAodm9pZCkKK3sKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBzcGluX2xvY2tfaW5pdCgmZXNiX2xvY2spOworCisgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBpcyB0aGVyZSAqLworICAgICAgICBpZiAoIWVzYl9nZXRkZXZpY2UgKCkgfHwgZXNiX3BjaSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCisgICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworICAgICAgICBpZiAoZXNiX3RpbWVyX3NldF9oZWFydGJlYXQgKGhlYXJ0YmVhdCkpIHsKKyAgICAgICAgICAgICAgICBlc2JfdGltZXJfc2V0X2hlYXJ0YmVhdCAoV0FUQ0hET0dfSEVBUlRCRUFUKTsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMTxoZWFydGJlYXQ8MjA0NiwgdXNpbmcgJWRcbiIsCisJCSAgICAgICBoZWFydGJlYXQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOworICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycl91bm1hcDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1pc2NfcmVnaXN0ZXIoJmVzYl9taXNjZGV2KTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBXQVRDSERPR19NSU5PUiwgcmV0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycl9ub3RpZmllcjsKKyAgICAgICAgfQorCisgICAgICAgIGVzYl90aW1lcl9zdG9wICgpOworCisgICAgICAgIHByaW50ayAoS0VSTl9JTkZPIFBGWCAiaW5pdGlhbGl6ZWQgKDB4JXApLiBoZWFydGJlYXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCisgICAgICAgICAgICAgICAgQkFTRUFERFIsIGhlYXJ0YmVhdCwgbm93YXlvdXQpOworCisgICAgICAgIHJldHVybiAwOworCitlcnJfbm90aWZpZXI6CisgICAgICAgIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOworZXJyX3VubWFwOgorCWlvdW5tYXAoQkFTRUFERFIpOworLyogZXJyX3JlbGVhc2U6ICovCisJcGNpX3JlbGVhc2VfcmVnaW9uKGVzYl9wY2ksIDApOworLyogZXJyX2Rpc2FibGU6ICovCisJcGNpX2Rpc2FibGVfZGV2aWNlKGVzYl9wY2kpOworLyogZXJyX2RldnB1dDogKi8KKwlwY2lfZGV2X3B1dChlc2JfcGNpKTsKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAgKHZvaWQpCit7CisJLyogU3RvcCB0aGUgdGltZXIgYmVmb3JlIHdlIGxlYXZlICovCisJaWYgKCFub3dheW91dCkKKwkJZXNiX3RpbWVyX3N0b3AgKCk7CisKKwkvKiBEZXJlZ2lzdGVyICovCisJbWlzY19kZXJlZ2lzdGVyKCZlc2JfbWlzY2Rldik7CisgICAgICAgIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOworCWlvdW5tYXAoQkFTRUFERFIpOworCXBjaV9yZWxlYXNlX3JlZ2lvbihlc2JfcGNpLCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZXNiX3BjaSk7CisJcGNpX2Rldl9wdXQoZXNiX3BjaSk7Cit9CisKK21vZHVsZV9pbml0KHdhdGNoZG9nX2luaXQpOworbW9kdWxlX2V4aXQod2F0Y2hkb2dfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIlJvc3MgQmlybyBhbmQgRGF2aWQgSORyZGVtYW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV2F0Y2hkb2cgZHJpdmVyIGZvciBJbnRlbCA2MzAwRVNCIGNoaXBzZXRzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWJtYXNyLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWJtYXNyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0YzQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pYm1hc3IuYwpAQCAtMCwwICsxLDQwNSBAQAorLyoKKyAqIElCTSBBdXRvbWF0aWMgU2VydmVyIFJlc3RhcnQgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbmRyZXkgUGFuaW4gPHBhemtlQGRvbnBhYy5ydT4KKyAqCisgKiBCYXNlZCBvbiBkcml2ZXIgd3JpdHRlbiBieSBQZXRlIFJleW5vbGRzLgorICogQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5OTgtMjAwNC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKworZW51bSB7CisJQVNNVFlQRV9VTktOT1dOLAorCUFTTVRZUEVfVE9QQVosCisJQVNNVFlQRV9KQVNQRVIsCisJQVNNVFlQRV9QRUFSTCwKKwlBU01UWVBFX0pVTklQRVIsCisJQVNNVFlQRV9TUFJVQ0UsCit9OworCisjZGVmaW5lIFBGWCAiaWJtYXNyOiAiCisKKyNkZWZpbmUgVE9QQVpfQVNSX1JFR19PRkZTRVQJNAorI2RlZmluZSBUT1BBWl9BU1JfVE9HR0xFCTB4NDAKKyNkZWZpbmUgVE9QQVpfQVNSX0RJU0FCTEUJMHg4MAorCisvKiBQRUFSTCBBU1IgUy9XIFJFR0lTVEVSIFNVUEVSSU8gUE9SVCBBRERSRVNTRVMgKi8KKyNkZWZpbmUgUEVBUkxfQkFTRQkweGUwNAorI2RlZmluZSBQRUFSTF9XUklURQkweGUwNgorI2RlZmluZSBQRUFSTF9SRUFECTB4ZTA3CisKKyNkZWZpbmUgUEVBUkxfQVNSX0RJU0FCTEVfTUFTSwkweDgwCS8qIGJpdCA3OiBkaXNhYmxlID0gMSwgZW5hYmxlID0gMCAqLworI2RlZmluZSBQRUFSTF9BU1JfVE9HR0xFX01BU0sJMHg0MAkvKiBiaXQgNjogMCwgdGhlbiAxLCB0aGVuIDAgKi8KKworLyogSkFTUEVSIE9GRlNFVCBGUk9NIFNJTyBCQVNFIEFERFIgVE8gQVNSIFMvVyBSRUdJU1RFUlMuICovCisjZGVmaW5lIEpBU1BFUl9BU1JfUkVHX09GRlNFVAkweDM4CisKKyNkZWZpbmUgSkFTUEVSX0FTUl9ESVNBQkxFX01BU0sJMHgwMQkvKiBiaXQgMDogZGlzYWJsZSA9IDEsIGVuYWJsZSA9IDAgKi8KKyNkZWZpbmUgSkFTUEVSX0FTUl9UT0dHTEVfTUFTSwkweDAyCS8qIGJpdCAxOiAwLCB0aGVuIDEsIHRoZW4gMCAqLworCisjZGVmaW5lIEpVTklQRVJfQkFTRV9BRERSRVNTCTB4NTRiCS8qIEJhc2UgYWRkcmVzcyBvZiBKdW5pcGVyIEFTUiAqLworI2RlZmluZSBKVU5JUEVSX0FTUl9ESVNBQkxFX01BU0sgMHgwMQkvKiBiaXQgMDogZGlzYWJsZSA9IDEgZW5hYmxlID0gMCAqLworI2RlZmluZSBKVU5JUEVSX0FTUl9UT0dHTEVfTUFTSwkweDAyCS8qIGJpdCAxOiAwLCB0aGVuIDEsIHRoZW4gMCAqLworCisjZGVmaW5lIFNQUlVDRV9CQVNFX0FERFJFU1MJMHgxMThlCS8qIEJhc2UgYWRkcmVzcyBvZiBTcHJ1Y2UgQVNSICovCisjZGVmaW5lIFNQUlVDRV9BU1JfRElTQUJMRV9NQVNLCTB4MDEJLyogYml0IDE6IGRpc2FibGUgPSAxIGVuYWJsZSA9IDAgKi8KKyNkZWZpbmUgU1BSVUNFX0FTUl9UT0dHTEVfTUFTSwkweDAyCS8qIGJpdCAwOiAwLCB0aGVuIDEsIHRoZW4gMCAqLworCisKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYXNyX2lzX29wZW47CitzdGF0aWMgY2hhciBhc3JfZXhwZWN0X2Nsb3NlOworCitzdGF0aWMgdW5zaWduZWQgaW50IGFzcl90eXBlLCBhc3JfYmFzZSwgYXNyX2xlbmd0aDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXNyX3JlYWRfYWRkciwgYXNyX3dyaXRlX2FkZHI7CitzdGF0aWMgdW5zaWduZWQgY2hhciBhc3JfdG9nZ2xlX21hc2ssIGFzcl9kaXNhYmxlX21hc2s7CisKK3N0YXRpYyB2b2lkIGFzcl90b2dnbGUodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZyA9IGluYihhc3JfcmVhZF9hZGRyKTsKKworCW91dGIocmVnICYgfmFzcl90b2dnbGVfbWFzaywgYXNyX3dyaXRlX2FkZHIpOworCXJlZyA9IGluYihhc3JfcmVhZF9hZGRyKTsKKworCW91dGIocmVnIHwgYXNyX3RvZ2dsZV9tYXNrLCBhc3Jfd3JpdGVfYWRkcik7CisJcmVnID0gaW5iKGFzcl9yZWFkX2FkZHIpOworCisJb3V0YihyZWcgJiB+YXNyX3RvZ2dsZV9tYXNrLCBhc3Jfd3JpdGVfYWRkcik7CisJcmVnID0gaW5iKGFzcl9yZWFkX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBhc3JfZW5hYmxlKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciByZWc7CisKKwlpZiAoYXNyX3R5cGUgPT0gQVNNVFlQRV9UT1BBWikgeworCQkvKiBhc3Jfd3JpdGVfYWRkciA9PSBhc3JfcmVhZF9hZGRyICovCisJCXJlZyA9IGluYihhc3JfcmVhZF9hZGRyKTsKKwkJb3V0YihyZWcgJiB+KFRPUEFaX0FTUl9UT0dHTEUgfCBUT1BBWl9BU1JfRElTQUJMRSksCisJCSAgICAgYXNyX3JlYWRfYWRkcik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRmlyc3QgbWFrZSBzdXJlIHRoZSBoYXJkd2FyZSB0aW1lciBpcyByZXNldCBieSB0b2dnbGluZworCQkgKiBBU1IgaGFyZHdhcmUgdGltZXIgbGluZS4KKwkJICovCisJCWFzcl90b2dnbGUoKTsKKworCQlyZWcgPSBpbmIoYXNyX3JlYWRfYWRkcik7CisJCW91dGIocmVnICYgfmFzcl9kaXNhYmxlX21hc2ssIGFzcl93cml0ZV9hZGRyKTsKKwl9CisJcmVnID0gaW5iKGFzcl9yZWFkX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBhc3JfZGlzYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgcmVnID0gaW5iKGFzcl9yZWFkX2FkZHIpOworCisJaWYgKGFzcl90eXBlID09IEFTTVRZUEVfVE9QQVopCisJCS8qIGFzcl93cml0ZV9hZGRyID09IGFzcl9yZWFkX2FkZHIgKi8KKwkJb3V0YihyZWcgfCBUT1BBWl9BU1JfVE9HR0xFIHwgVE9QQVpfQVNSX0RJU0FCTEUsCisJCSAgICAgYXNyX3JlYWRfYWRkcik7CisJZWxzZSB7CisJCW91dGIocmVnIHwgYXNyX3RvZ2dsZV9tYXNrLCBhc3Jfd3JpdGVfYWRkcik7CisJCXJlZyA9IGluYihhc3JfcmVhZF9hZGRyKTsKKworCQlvdXRiKHJlZyB8IGFzcl9kaXNhYmxlX21hc2ssIGFzcl93cml0ZV9hZGRyKTsKKwl9CisJcmVnID0gaW5iKGFzcl9yZWFkX2FkZHIpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhc3JfZ2V0X2Jhc2VfYWRkcmVzcyh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgbG93LCBoaWdoOworCWNvbnN0IGNoYXIgKnR5cGUgPSAiIjsKKworCWFzcl9sZW5ndGggPSAxOworCisJc3dpdGNoIChhc3JfdHlwZSkgeworCWNhc2UgQVNNVFlQRV9UT1BBWjoKKwkJLyogU0VMRUNUIFN1cGVySU8gQ0hJUCBGT1IgUVVFUllJTkcgKFdSSVRFIDB4MDcgVE8gQk9USCAweDJFIGFuZCAweDJGKSAqLworCQlvdXRiKDB4MDcsIDB4MmUpOworCQlvdXRiKDB4MDcsIDB4MmYpOworCisJCS8qIFNFTEVDVCBBTkQgUkVBRCBUSEUgSElHSC1OSUJCTEUgT0YgVEhFIEdQSU8gQkFTRSBBRERSRVNTICovCisJCW91dGIoMHg2MCwgMHgyZSk7CisJCWhpZ2ggPSBpbmIoMHgyZik7CisKKwkJLyogU0VMRUNUIEFORCBSRUFEIFRIRSBMT1ctTklCQkxFIE9GIFRIRSBHUElPIEJBU0UgQUREUkVTUyAqLworCQlvdXRiKDB4NjEsIDB4MmUpOworCQlsb3cgPSBpbmIoMHgyZik7CisKKwkJYXNyX2Jhc2UgPSAoaGlnaCA8PCAxNikgfCBsb3c7CisJCWFzcl9yZWFkX2FkZHIgPSBhc3Jfd3JpdGVfYWRkciA9CisJCQlhc3JfYmFzZSArIFRPUEFaX0FTUl9SRUdfT0ZGU0VUOworCQlhc3JfbGVuZ3RoID0gNTsKKworCQlicmVhazsKKworCWNhc2UgQVNNVFlQRV9KQVNQRVI6CisJCXR5cGUgPSAiSmFzcGVycyAiOworCisJCS8qIEZJWE1FOiBuZWVkIHRvIHVzZSBwY2lfY29uZmlnX2xvY2sgaGVyZSwgYnV0IGl0J3Mgbm90IGV4cG9ydGVkICovCisKKy8qCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7Ki8KKworCQkvKiBTZWxlY3QgdGhlIFN1cGVySU8gY2hpcCBpbiB0aGUgUENJIEkvTyBwb3J0IHJlZ2lzdGVyICovCisJCW91dGwoMHg4MDAwZjg1OCwgMHhjZjgpOworCisJCS8qCisJCSAqIFJlYWQgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIFN1cGVySU8gY2hpcC4KKwkJICogT25seSB0aGUgbG93ZXIgMTYgYml0cyBhcmUgdmFsaWQsIGJ1dCB0aGUgYWRkcmVzcyBpcyB3b3JkCisJCSAqIGFsaWduZWQgc28gdGhlIGxhc3QgYml0IG11c3QgYmUgbWFza2VkIG9mZi4KKwkJICovCisJCWFzcl9iYXNlID0gaW5sKDB4Y2ZjKSAmIDB4ZmZmZTsKKworLyoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOyovCisKKwkJYXNyX3JlYWRfYWRkciA9IGFzcl93cml0ZV9hZGRyID0KKwkJCWFzcl9iYXNlICsgSkFTUEVSX0FTUl9SRUdfT0ZGU0VUOworCQlhc3JfdG9nZ2xlX21hc2sgPSBKQVNQRVJfQVNSX1RPR0dMRV9NQVNLOworCQlhc3JfZGlzYWJsZV9tYXNrID0gSkFTUEVSX0FTUl9ESVNBQkxFX01BU0s7CisJCWFzcl9sZW5ndGggPSBKQVNQRVJfQVNSX1JFR19PRkZTRVQgKyAxOworCisJCWJyZWFrOworCisJY2FzZSBBU01UWVBFX1BFQVJMOgorCQl0eXBlID0gIlBlYXJscyAiOworCQlhc3JfYmFzZSA9IFBFQVJMX0JBU0U7CisJCWFzcl9yZWFkX2FkZHIgPSBQRUFSTF9SRUFEOworCQlhc3Jfd3JpdGVfYWRkciA9IFBFQVJMX1dSSVRFOworCQlhc3JfdG9nZ2xlX21hc2sgPSBQRUFSTF9BU1JfVE9HR0xFX01BU0s7CisJCWFzcl9kaXNhYmxlX21hc2sgPSBQRUFSTF9BU1JfRElTQUJMRV9NQVNLOworCQlhc3JfbGVuZ3RoID0gNDsKKwkJYnJlYWs7CisKKwljYXNlIEFTTVRZUEVfSlVOSVBFUjoKKwkJdHlwZSA9ICJKdW5pcGVycyAiOworCQlhc3JfYmFzZSA9IEpVTklQRVJfQkFTRV9BRERSRVNTOworCQlhc3JfcmVhZF9hZGRyID0gYXNyX3dyaXRlX2FkZHIgPSBhc3JfYmFzZTsKKwkJYXNyX3RvZ2dsZV9tYXNrID0gSlVOSVBFUl9BU1JfVE9HR0xFX01BU0s7CisJCWFzcl9kaXNhYmxlX21hc2sgPSBKVU5JUEVSX0FTUl9ESVNBQkxFX01BU0s7CisJCWJyZWFrOworCisJY2FzZSBBU01UWVBFX1NQUlVDRToKKwkJdHlwZSA9ICJTcHJ1Y2UncyAiOworCQlhc3JfYmFzZSA9IFNQUlVDRV9CQVNFX0FERFJFU1M7CisJCWFzcl9yZWFkX2FkZHIgPSBhc3Jfd3JpdGVfYWRkciA9IGFzcl9iYXNlOworCQlhc3JfdG9nZ2xlX21hc2sgPSBTUFJVQ0VfQVNSX1RPR0dMRV9NQVNLOworCQlhc3JfZGlzYWJsZV9tYXNrID0gU1BSVUNFX0FTUl9ESVNBQkxFX01BU0s7CisJCWJyZWFrOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oYXNyX2Jhc2UsIGFzcl9sZW5ndGgsICJpYm1hc3IiKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJhZGRyZXNzICUjeCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJCWFzcl9iYXNlKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiZm91bmQgJXNBU1IgQCBhZGRyICUjeFxuIiwgdHlwZSwgYXNyX2Jhc2UpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHNzaXplX3QgYXNyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWlmIChjb3VudCkgeworCQlpZiAoIW5vd2F5b3V0KSB7CisJCQlzaXplX3QgaTsKKworCQkJLyogSW4gY2FzZSBpdCB3YXMgc2V0IGxvbmcgYWdvICovCisJCQlhc3JfZXhwZWN0X2Nsb3NlID0gMDsKKworCQkJZm9yIChpID0gMDsgaSAhPSBjb3VudDsgaSsrKSB7CisJCQkJY2hhciBjOworCQkJCWlmIChnZXRfdXNlcihjLCBidWYgKyBpKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaWYgKGMgPT0gJ1YnKQorCQkJCQlhc3JfZXhwZWN0X2Nsb3NlID0gNDI7CisJCQl9CisJCX0KKwkJYXNyX3RvZ2dsZSgpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgYXNyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwkJLm9wdGlvbnMgPQlXRElPRl9LRUVQQUxJVkVQSU5HIHwgCisJCQkJV0RJT0ZfTUFHSUNDTE9TRSwKKwkJLmlkZW50aXR5ID0JIklCTSBBU1IiCisJfTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgX191c2VyICpwID0gYXJncDsKKwlpbnQgaGVhcnRiZWF0OworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpID8KKwkJCQktRUZBVUxUIDogMDsKKworCQljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCisJCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQkJYXNyX3RvZ2dsZSgpOworCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogVGhlIGhhcmR3YXJlIGhhcyBhIGZpeGVkIHRpbWVvdXQgdmFsdWUsIHNvIG5vIFdESU9DX1NFVFRJTUVPVVQKKwkJICogYW5kIFdESU9DX0dFVFRJTUVPVVQgYWx3YXlzIHJldHVybnMgMjU2LgorCQkgKi8KKwkJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQkJaGVhcnRiZWF0ID0gMjU2OworCQkJcmV0dXJuIHB1dF91c2VyKGhlYXJ0YmVhdCwgcCk7CisKKwkJY2FzZSBXRElPQ19TRVRPUFRJT05TOiB7CisJCQlpbnQgbmV3X29wdGlvbnMsIHJldHZhbCA9IC1FSU5WQUw7CisKKwkJCWlmIChnZXRfdXNlcihuZXdfb3B0aW9ucywgcCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmIChuZXdfb3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSB7CisJCQkJYXNyX2Rpc2FibGUoKTsKKwkJCQlyZXR2YWwgPSAwOworCQkJfQorCisJCQlpZiAobmV3X29wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisJCQkJYXNyX2VuYWJsZSgpOworCQkJCWFzcl90b2dnbGUoKTsKKwkJCQlyZXR2YWwgPSAwOworCQkJfQorCisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBhc3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZih0ZXN0X2FuZF9zZXRfYml0KDAsICZhc3JfaXNfb3BlbikpCisJCXJldHVybiAtRUJVU1k7CisKKwlhc3JfdG9nZ2xlKCk7CisJYXNyX2VuYWJsZSgpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IGFzcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChhc3JfZXhwZWN0X2Nsb3NlID09IDQyKQorCQlhc3JfZGlzYWJsZSgpOworCWVsc2UgeworCQlwcmludGsoS0VSTl9DUklUIFBGWCAidW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCWFzcl90b2dnbGUoKTsKKwl9CisJY2xlYXJfYml0KDAsICZhc3JfaXNfb3Blbik7CisJYXNyX2V4cGVjdF9jbG9zZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzcl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsJPQlub19sbHNlZWssCisJLndyaXRlID0JYXNyX3dyaXRlLAorCS5pb2N0bCA9CWFzcl9pb2N0bCwKKwkub3BlbiA9CQlhc3Jfb3BlbiwKKwkucmVsZWFzZSA9CWFzcl9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGFzcl9taXNjZGV2ID0geworCS5taW5vciA9CVdBVENIRE9HX01JTk9SLAorCS5uYW1lID0JCSJ3YXRjaGRvZyIsCisJLmZvcHMgPQkJJmFzcl9mb3BzLAorfTsKKworCitzdHJ1Y3QgaWJtYXNyX2lkIHsKKwljb25zdCBjaGFyICpkZXNjOworCWludCB0eXBlOworfTsKKworc3RhdGljIHN0cnVjdCBpYm1hc3JfaWQgX19pbml0ZGF0YSBpYm1hc3JfaWRfdGFibGVbXSA9IHsKKwl7ICJJQk0gQXV0b21hdGljIFNlcnZlciBSZXN0YXJ0IC0gZXNlcnZlciB4U2VyaWVzIDIyMCIsIEFTTVRZUEVfVE9QQVogfSwKKwl7ICJJQk0gQXV0b21hdGljIFNlcnZlciBSZXN0YXJ0IC0gTWFjaGluZSBUeXBlIDg2NzMiLCBBU01UWVBFX1BFQVJMIH0sCisJeyAiSUJNIEF1dG9tYXRpYyBTZXJ2ZXIgUmVzdGFydCAtIE1hY2hpbmUgVHlwZSA4NDgwIiwgQVNNVFlQRV9KQVNQRVIgfSwKKwl7ICJJQk0gQXV0b21hdGljIFNlcnZlciBSZXN0YXJ0IC0gTWFjaGluZSBUeXBlIDg0ODIiLCBBU01UWVBFX0pVTklQRVIgfSwKKwl7ICJJQk0gQXV0b21hdGljIFNlcnZlciBSZXN0YXJ0IC0gTWFjaGluZSBUeXBlIDg2NDgiLCBBU01UWVBFX1NQUlVDRSB9LAorCXsgTlVMTCB9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpYm1hc3JfaW5pdCh2b2lkKQoreworCXN0cnVjdCBpYm1hc3JfaWQgKmlkOworCWludCByYzsKKworCWZvciAoaWQgPSBpYm1hc3JfaWRfdGFibGU7IGlkLT5kZXNjOyBpZCsrKSB7CisJCWlmIChkbWlfZmluZF9kZXZpY2UoRE1JX0RFVl9UWVBFX09USEVSLCBpZC0+ZGVzYywgTlVMTCkpIHsKKwkJCWFzcl90eXBlID0gaWQtPnR5cGU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghYXNyX3R5cGUpCisJCXJldHVybiAtRU5PREVWOworCisJcmMgPSBtaXNjX3JlZ2lzdGVyKCZhc3JfbWlzY2Rldik7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBhc3JfZ2V0X2Jhc2VfYWRkcmVzcygpOworCWlmIChyYykgeworCQltaXNjX2RlcmVnaXN0ZXIoJmFzcl9taXNjZGV2KTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaWJtYXNyX2V4aXQodm9pZCkKK3sKKwlpZiAoIW5vd2F5b3V0KQorCQlhc3JfZGlzYWJsZSgpOworCisJbWlzY19kZXJlZ2lzdGVyKCZhc3JfbWlzY2Rldik7CisKKwlyZWxlYXNlX3JlZ2lvbihhc3JfYmFzZSwgYXNyX2xlbmd0aCk7Cit9CisKK21vZHVsZV9pbml0KGlibWFzcl9pbml0KTsKK21vZHVsZV9leGl0KGlibWFzcl9leGl0KTsKKworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQpIik7CisKK01PRFVMRV9ERVNDUklQVElPTigiSUJNIEF1dG9tYXRpYyBTZXJ2ZXIgUmVzdGFydCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJleSBQYW5pbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKaW5kZXggYzY5NGVlZS4uNzVjYTg0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90d2QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdHJ1Y3QgbXBjb3JlX3dkdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzZhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYwpAQCAtMCwwICsxLDI1MiBAQAorLyoKKyAqIG12NjR4NjBfd2R0LmMgLSBNVjY0WDYwIChNYXJ2ZWxsIERpc2NvdmVyeSkgd2F0Y2hkb2cgdXNlcnNwYWNlIGludGVyZmFjZQorICoKKyAqIEF1dGhvcjogSmFtZXMgQ2hhcG1hbiA8amNoYXBtYW5Aa2F0YWxpeC5jb20+CisgKgorICogUGxhdGZvcm0tc3BlY2lmaWMgc2V0dXAgY29kZSBzaG91bGQgY29uZmlndXJlIHRoZSBkb2cgdG8gZ2VuZXJhdGUKKyAqIGludGVycnVwdCBvciByZXNldCBhcyByZXF1aXJlZC4gIFRoaXMgY29kZSBvbmx5IGVuYWJsZXMvZGlzYWJsZXMKKyAqIGFuZCBzZXJ2aWNlcyB0aGUgd2F0Y2hkb2cuCisgKgorICogRGVyaXZlZCBmcm9tIG1wYzh4eF93ZHQuYywgd2l0aCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4KKyAqIAorICogMjAwMiAoYykgRmxvcmlhbiBTY2hpcm1lciA8am9sdEB0dXhib3gub3JnPiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8YXNtL212NjR4NjAuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiBNVjY0eDYwIFdEQyAoY29uZmlnKSByZWdpc3RlciBhY2Nlc3MgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVY2NHg2MF9XRENfQ1RMMV9NQVNLCSgzIDw8IDI0KQorI2RlZmluZSBNVjY0eDYwX1dEQ19DVEwxKHZhbCkJKCh2YWwgJiAzKSA8PCAyNCkKKyNkZWZpbmUgTVY2NHg2MF9XRENfQ1RMMl9NQVNLCSgzIDw8IDI2KQorI2RlZmluZSBNVjY0eDYwX1dEQ19DVEwyKHZhbCkJKCh2YWwgJiAzKSA8PCAyNikKKworLyogRmxhZ3MgYml0cyAqLworI2RlZmluZSBNVjY0eDYwX1dET0dfRkxBR19PUEVORUQJMAorI2RlZmluZSBNVjY0eDYwX1dET0dfRkxBR19FTkFCTEVECTEKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2ZsYWdzOworc3RhdGljIGludCB3ZHRfc3RhdHVzOworc3RhdGljIHZvaWQgX19pb21lbSAqbXY2NHg2MF9yZWdzOworc3RhdGljIGludCBtdjY0eDYwX3dkdF90aW1lb3V0OworCitzdGF0aWMgdm9pZCBtdjY0eDYwX3dkdF9yZWdfd3JpdGUodTMyIHZhbCkKK3sKKwkvKiBBbGxvdyB3cml0ZSBvbmx5IHRvIENUTDEgLyBDVEwyIGZpZWxkcywgcmV0YWluaW5nIHZhbHVlcyBpbgorCSAqIG90aGVyIGZpZWxkcy4KKwkgKi8KKwl1MzIgZGF0YSA9IHJlYWRsKG12NjR4NjBfcmVncyArIE1WNjR4NjBfV0RUX1dEQyk7CisJZGF0YSAmPSB+KE1WNjR4NjBfV0RDX0NUTDFfTUFTSyB8IE1WNjR4NjBfV0RDX0NUTDJfTUFTSyk7CisJZGF0YSB8PSB2YWw7CisJd3JpdGVsKGRhdGEsIG12NjR4NjBfcmVncyArIE1WNjR4NjBfV0RUX1dEQyk7Cit9CisKK3N0YXRpYyB2b2lkIG12NjR4NjBfd2R0X3NlcnZpY2Uodm9pZCkKK3sKKwkvKiBXcml0ZSAwMSBmb2xsb3dlZCBieSAxMCB0byBDVEwyICovCisJbXY2NHg2MF93ZHRfcmVnX3dyaXRlKE1WNjR4NjBfV0RDX0NUTDIoMHgwMSkpOworCW12NjR4NjBfd2R0X3JlZ193cml0ZShNVjY0eDYwX1dEQ19DVEwyKDB4MDIpKTsKK30KKworc3RhdGljIHZvaWQgbXY2NHg2MF93ZHRfaGFuZGxlcl9kaXNhYmxlKHZvaWQpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNVjY0eDYwX1dET0dfRkxBR19FTkFCTEVELCAmd2R0X2ZsYWdzKSkgeworCQkvKiBXcml0ZSAwMSBmb2xsb3dlZCBieSAxMCB0byBDVEwxICovCisJCW12NjR4NjBfd2R0X3JlZ193cml0ZShNVjY0eDYwX1dEQ19DVEwxKDB4MDEpKTsKKwkJbXY2NHg2MF93ZHRfcmVnX3dyaXRlKE1WNjR4NjBfV0RDX0NUTDEoMHgwMikpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm12NjR4NjBfd2R0OiB3YXRjaGRvZyBkZWFjdGl2YXRlZFxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdjY0eDYwX3dkdF9oYW5kbGVyX2VuYWJsZSh2b2lkKQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChNVjY0eDYwX1dET0dfRkxBR19FTkFCTEVELCAmd2R0X2ZsYWdzKSkgeworCQkvKiBXcml0ZSAwMSBmb2xsb3dlZCBieSAxMCB0byBDVEwxICovCisJCW12NjR4NjBfd2R0X3JlZ193cml0ZShNVjY0eDYwX1dEQ19DVEwxKDB4MDEpKTsKKwkJbXY2NHg2MF93ZHRfcmVnX3dyaXRlKE1WNjR4NjBfV0RDX0NUTDEoMHgwMikpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm12NjR4NjBfd2R0OiB3YXRjaGRvZyBhY3RpdmF0ZWRcbiIpOworCX0KK30KKworc3RhdGljIGludCBtdjY0eDYwX3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KE1WNjR4NjBfV0RPR19GTEFHX09QRU5FRCwgJndkdF9mbGFncykpCisJCXJldHVybiAtRUJVU1k7CisKKwltdjY0eDYwX3dkdF9zZXJ2aWNlKCk7CisJbXY2NHg2MF93ZHRfaGFuZGxlcl9lbmFibGUoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12NjR4NjBfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJbXY2NHg2MF93ZHRfc2VydmljZSgpOworCisjaWYgIWRlZmluZWQoQ09ORklHX1dBVENIRE9HX05PV0FZT1VUKQorCW12NjR4NjBfd2R0X2hhbmRsZXJfZGlzYWJsZSgpOworI2VuZGlmCisKKwljbGVhcl9iaXQoTVY2NHg2MF9XRE9HX0ZMQUdfT1BFTkVELCAmd2R0X2ZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtdjY0eDYwX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKKwkJCQkgc2l6ZV90IGxlbiwgbG9mZl90ICogcHBvcykKK3sKKwlpZiAoKnBwb3MgIT0gZmlsZS0+Zl9wb3MpCisJCXJldHVybiAtRVNQSVBFOworCisJaWYgKGxlbikKKwkJbXY2NHg2MF93ZHRfc2VydmljZSgpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBtdjY0eDYwX3dkdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHRpbWVvdXQ7CisJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CisJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORywKKwkJLmZpcm13YXJlX3ZlcnNpb24gPSAwLAorCQkuaWRlbnRpdHkgPSAiTVY2NHg2MCB3YXRjaGRvZyIsCisJfTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoY29weV90b191c2VyKCh2b2lkICopYXJnLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJaWYgKHB1dF91c2VyKHdkdF9zdGF0dXMsIChpbnQgKilhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXdkdF9zdGF0dXMgJj0gfldESU9GX0tFRVBBTElWRVBJTkc7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRURU1QOgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwljYXNlIFdESU9DX1NFVE9QVElPTlM6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQltdjY0eDYwX3dkdF9zZXJ2aWNlKCk7CisJCXdkdF9zdGF0dXMgfD0gV0RJT0ZfS0VFUEFMSVZFUElORzsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJdGltZW91dCA9IG12NjR4NjBfd2R0X3RpbWVvdXQgKiBIWjsKKwkJaWYgKHB1dF91c2VyKHRpbWVvdXQsIChpbnQgKilhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXY2NHg2MF93ZHRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorCS53cml0ZSA9IG12NjR4NjBfd2R0X3dyaXRlLAorCS5pb2N0bCA9IG12NjR4NjBfd2R0X2lvY3RsLAorCS5vcGVuID0gbXY2NHg2MF93ZHRfb3BlbiwKKwkucmVsZWFzZSA9IG12NjR4NjBfd2R0X3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbXY2NHg2MF93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSA9ICJ3YXRjaGRvZyIsCisJLmZvcHMgPSAmbXY2NHg2MF93ZHRfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG12NjR4NjBfd2R0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBtdjY0eDYwX3dkdF9wZGF0YSAqcGRhdGEgPSBwZC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IGJ1c19jbGsgPSAxMzM7CisKKwltdjY0eDYwX3dkdF90aW1lb3V0ID0gMTA7CisJaWYgKHBkYXRhKSB7CisJCW12NjR4NjBfd2R0X3RpbWVvdXQgPSBwZGF0YS0+dGltZW91dDsKKwkJYnVzX2NsayA9IHBkYXRhLT5idXNfY2xrOworCX0KKworCW12NjR4NjBfcmVncyA9IG12NjR4NjBfZ2V0X2JyaWRnZV92YmFzZSgpOworCisJd3JpdGVsKChtdjY0eDYwX3dkdF90aW1lb3V0ICogKGJ1c19jbGsgKiAxMDAwMDAwKSkgPj4gOCwKKwkgICAgICAgbXY2NHg2MF9yZWdzICsgTVY2NHg2MF9XRFRfV0RDKTsKKworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtdjY0eDYwX3dkdF9taXNjZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXY2NHg2MF93ZHRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJm12NjR4NjBfd2R0X21pc2NkZXYpOworCisJbXY2NHg2MF93ZHRfc2VydmljZSgpOworCW12NjR4NjBfd2R0X2hhbmRsZXJfZGlzYWJsZSgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtdjY0eDYwX3dkdF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNVjY0eDYwX1dEVF9OQU1FLAorCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlID0gbXY2NHg2MF93ZHRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG12NjR4NjBfd2R0X3JlbW92ZSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NHg2MF93ZHRfZGV2OworCitzdGF0aWMgaW50IF9faW5pdCBtdjY0eDYwX3dkdF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0lORk8gIk1WNjR4NjAgd2F0Y2hkb2cgZHJpdmVyXG4iKTsKKworCW12NjR4NjBfd2R0X2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoTVY2NHg2MF9XRFRfTkFNRSwKKwkJCQkJCQkgIC0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKG12NjR4NjBfd2R0X2RldikpIHsKKwkJcmV0ID0gUFRSX0VSUihtdjY0eDYwX3dkdF9kZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJm12NjR4NjBfd2R0X2RyaXZlcik7CisgICAgICBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG12NjR4NjBfd2R0X2V4aXQodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtdjY0eDYwX3dkdF9kZXYpOworfQorCittb2R1bGVfaW5pdChtdjY0eDYwX3dkdF9pbml0KTsKK21vZHVsZV9leGl0KG12NjR4NjBfd2R0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKYW1lcyBDaGFwbWFuIDxqY2hhcG1hbkBrYXRhbGl4LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTVY2NHg2MCB3YXRjaGRvZyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKaW5kZXggMmIxM2FmYi4uNWE4MGFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKQEAgLTI5LDI3ICsyOSwyOSBAQAogICoJSW5jbHVkZXMsIGRlZmluZXMsIHZhcmlhYmxlcywgbW9kdWxlIHBhcmFtZXRlcnMsIC4uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIEZvciBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQvLi4uICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIEZvciBtb2R1bGUgc3BlY2lmaWMgaXRlbXMgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgkvKiBGb3IgbmV3IG1vZHVsZXBhcmFtJ3MgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkvKiBGb3Igc3RhbmRhcmQgdHlwZXMgKGxpa2Ugc2l6ZV90KSAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIEZvciB0aGUgLUVOT0RFVi8uLi4gdmFsdWVzICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIEZvciBwcmludGsvcGFuaWMvLi4uICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogRm9yIG1kZWxheSBmdW5jdGlvbiAqLworI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4JLyogRm9yIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKSAqLworI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CS8qIEZvciB0aGUgd2F0Y2hkb2cgc3BlY2lmaWMgaXRlbXMgKi8KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgkvKiBGb3Igbm90aWZpZXIgc3VwcG9ydCAqLworI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgkvKiBGb3IgcmVib290X25vdGlmaWVyIHN0dWZmICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogRm9yIF9faW5pdC9fX2V4aXQvLi4uICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIEZvciBmaWxlIG9wZXJhdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4JCS8qIEZvciBwY2kgZnVuY3Rpb25zICovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIEZvciBpby1wb3J0IGFjY2VzcyAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CS8qIEZvciBzcGluX2xvY2svc3Bpbl91bmxvY2svLi4uICovCiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIEZvciBjb3B5X3RvX3VzZXIvcHV0X3VzZXIvLi4uICovCisjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBGb3IgaW5iL291dGIvLi4uICovCiAKIC8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogI2RlZmluZSBXQVRDSERPR19WRVJTSU9OICIxLjAxIgotI2RlZmluZSBXQVRDSERPR19EQVRFICIxNSBNYXIgMjAwNSIKKyNkZWZpbmUgV0FUQ0hET0dfREFURSAiMDIgU2VwIDIwMDUiCiAjZGVmaW5lIFdBVENIRE9HX0RSSVZFUl9OQU1FICJQQ0ktUEMgV2F0Y2hkb2ciCiAjZGVmaW5lIFdBVENIRE9HX05BTUUgInBjd2RfcGNpIgogI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCkBAIC0zMzUsMTIgKzMzNywxNCBAQAogCQkJCXJldHVybiAtRUZBVUxUOwogCiAJCQlpZiAobmV3X29wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgewotCQkJCXBjaXBjd2Rfc3RvcCgpOworCQkJCWlmIChwY2lwY3dkX3N0b3AoKSkKKwkJCQkJcmV0dXJuIC1FSU87CiAJCQkJcmV0dmFsID0gMDsKIAkJCX0KIAogCQkJaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgewotCQkJCXBjaXBjd2Rfc3RhcnQoKTsKKwkJCQlpZiAocGNpcGN3ZF9zdGFydCgpKQorCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQlyZXR2YWwgPSAwOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCmluZGV4IDhiMjkyYmYuLjM2MjViMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCkBAIC00NjQsNyArNDY0LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHd0Y29uX3NhdmU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3dGRhdF9zYXZlOwogCi1zdGF0aWMgaW50IHMzYzI0MTB3ZHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBzM2MyNDEwd2R0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBsZXZlbCkKIHsKIAlpZiAobGV2ZWwgPT0gU1VTUEVORF9QT1dFUl9ET1dOKSB7CiAJCS8qIFNhdmUgd2F0Y2hkb2cgc3RhdGUsIGFuZCB0dXJuIGl0IG9mZi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM4MzYwLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjODM2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2JmODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjODM2MC5jCkBAIC0wLDAgKzEsNDE0IEBACisvKgorICoJU0JDODM2MCBXYXRjaGRvZyBkcml2ZXIKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDUgV2ViY29uLCBJbmMuCisgKgorICoJQmFzZWQgb24gaWI3MDB3ZHQuYywgd2hpY2ggaXMgYmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQKKyAqICAgICAgb24gYWNxdWlyZXdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIHdkdC5jLgorICoKKyAqCShjKSBDb3B5cmlnaHQgMjAwMSBDaGFybGVzIEhvd2VzIDxjaG93ZXNAdnNvbC5uZXQ+CisgKgorICogICAgICBCYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhY3F1aXJld2R0LmMgd2hpY2gKKyAqICAgICAgIGlzIGJhc2VkIG9uIHdkdC5jLgorICoKKyAqCShjKSBDb3B5cmlnaHQgMjAwMC0yMDAxIE1hcmVrIE1pY2hhbGtpZXdpY3ogPG1hcmVrbUBsaW51eC5vcmcucGw+CisgKgorICoJQmFzZWQgb24gYWNxdWlyZXdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIHdkdC5jLgorICoJT3JpZ2luYWwgY29weXJpZ2h0IG1lc3NhZ2VzOgorICoKKyAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCQkJCWh0dHA6Ly93d3cucmVkaGF0LmNvbQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJTmVpdGhlciBBbGFuIENveCBub3IgQ3ltcnVOZXQgTHRkLiBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKKyAqCXdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZAorICoJIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqCShjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICoKKyAqICAgICAgMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICogICAgICAgICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisgKiAgICAgICAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYmM4MzYwX2lzX29wZW47CitzdGF0aWMgc3BpbmxvY2tfdCBzYmM4MzYwX2xvY2s7CitzdGF0aWMgY2hhciBleHBlY3RfY2xvc2U7CisKKyNkZWZpbmUgUEZYICJzYmM4MzYwOiAiCisKKy8qCisgKgorICogV2F0Y2hkb2cgVGltZXIgQ29uZmlndXJhdGlvbgorICoKKyAqIFRoZSBmdW5jdGlvbiBvZiB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgdG8gcmVzZXQgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5CisgKiBhbmQgaXMgZGVmaW5lZCBhdCBJL08gcG9ydCAwMTIwSCBhbmQgMDEyMUguICBUbyBlbmFibGUgdGhlIHdhdGNoZG9nIHRpbWVyCisgKiBhbmQgYWxsb3cgdGhlIHN5c3RlbSB0byByZXNldCwgd3JpdGUgYXBwcm9wcmlhdGUgdmFsdWVzIGZyb20gdGhlIHRhYmxlCisgKiBiZWxvdyB0byBJL08gcG9ydCAwMTIwSCBhbmQgMDEyMUguICBUbyBkaXNhYmxlIHRoZSB0aW1lciwgd3JpdGUgYSB6ZXJvCisgKiB2YWx1ZSB0byBJL08gcG9ydCAwMTIxSCBmb3IgdGhlIHN5c3RlbSB0byBzdG9wIHRoZSB3YXRjaGRvZyBmdW5jdGlvbi4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGRlc2NyaWJlcyBob3cgdGhlIHRpbWVyIHNob3VsZCBiZSBwcm9ncmFtbWVkIChhY2NvcmRpbmcgdG8KKyAqIHRoZSB2ZW5kb3IgZG9jdW1lbnRhdGlvbikKKyAqCisgKiBFbmFibGluZyBXYXRjaGRvZzoKKyAqIE1PViBBWCwwMDBBSCAoZW5hYmxlLCBwaGFzZSBJKQorICogTU9WIERYLDAxMjBICisgKiBPVVQgRFgsQVgKKyAqIE1PViBBWCwwMDBCSCAoZW5hYmxlLCBwaGFzZSBJSSkKKyAqIE1PViBEWCwwMTIwSAorICogT1VUIERYLEFYCisgKiBNT1YgQVgsMDAwbkggKHNldCBtdWx0aXBsaWVyIG4sIGZyb20gMS00KQorICogTU9WIERYLDAxMjBICisgKiBPVVQgRFgsQVgKKyAqIE1PViBBWCwwMDBtSCAoc2V0IGJhc2UgdGltZXIgbSwgZnJvbSAwLUYpCisgKiBNT1YgRFgsMDEyMUgKKyAqIE9VVCBEWCxBWAorICoKKyAqIFJlc2V0IHRpbWVyOgorICogTU9WIEFYLDAwMG1IIChzYW1lIGFzIHNldCBiYXNlIHRpbWVyLCBhYm92ZSkKKyAqIE1PViBEWCwwMTIxSAorICogT1VUIERYLEFYCisgKgorICogRGlzYWJsaW5nIFdhdGNoZG9nOgorICogTU9WIEFYLDAwMDBIIChhIHplcm8gdmFsdWUpCisgKiBNT1YgRFgsMDEyMEgKKyAqIE9VVCBEWCxBWAorICoKKyAqIFdhdGNoZG9nIHRpbWVvdXQgY29uZmlndXJhdGlvbiB2YWx1ZXM6CisgKgkJTgorICoJTSB8CTEJMgkzCTQKKyAqCS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCTAgfAkwLjVzCTVzCTUwcwkxMDBzCisgKgkxIHwJMXMJMTBzCTEwMHMJMjAwcworICoJMiB8CTEuNXMJMTVzCTE1MHMJMzAwcworICoJMyB8CTJzCTIwcwkyMDBzCTQwMHMKKyAqCTQgfAkyLjVzCTI1cwkyNTBzCTUwMHMKKyAqCTUgfAkzcwkzMHMJMzAwcwk2MDBzCisgKgk2IHwJMy41cwkzNXMJMzUwcwk3MDBzCisgKgk3IHwJNHMJNDBzCTQwMHMJODAwcworICoJOCB8CTQuNXMJNDVzCTQ1MHMJOTAwcworICoJOSB8CTVzCTUwcwk1MDBzCTEwMDBzCisgKglBIHwJNS41cwk1NXMJNTUwcwkxMTAwcworICoJQiB8CTZzCTYwcwk2MDBzCTEyMDBzCisgKglDIHwJNi41cwk2NXMJNjUwcwkxMzAwcworICoJRCB8CTdzCTcwcwk3MDBzCTE0MDBzCisgKglFIHwJNy41cwk3NXMJNzUwcwkxNTAwcworICoJRiB8CThzCTgwcyAJODAwcyAJMTYwMHMKKyAqCisgKiBBbm90aGVyIHdheSB0byBzYXkgdGhlIHNhbWUgdGhpbmdzIGlzOgorICogIEZvciBOPTEsIFRpbWVvdXQgPSAoTSsxKSAqIDAuNXMKKyAqICBGb3IgTj0yLCBUaW1lb3V0ID0gKE0rMSkgKiA1cworICogIEZvciBOPTMsIFRpbWVvdXQgPSAoTSsxKSAqIDUwcworICogIEZvciBOPTQsIFRpbWVvdXQgPSAoTSsxKSAqIDEwMHMKKyAqCisgKi8KKworc3RhdGljIGludCB3ZF90aW1lc1s2NF1bMl0gPSB7CisJezAsIDF9LAkJCS8qIDAgID0gMC41cyAqLworCXsxLCAxfSwJCQkvKiAxICA9IDFzICAgKi8KKwl7MiwgMX0sCQkJLyogMiAgPSAxLjVzICovCisJezMsIDF9LAkJCS8qIDMgID0gMnMgICAqLworCXs0LCAxfSwJCQkvKiA0ICA9IDIuNXMgKi8KKwl7NSwgMX0sCQkJLyogNSAgPSAzcyAgICovCisJezYsIDF9LAkJCS8qIDYgID0gMy41cyAqLworCXs3LCAxfSwJCQkvKiA3ICA9IDRzICAgKi8KKwl7OCwgMX0sCQkJLyogOCAgPSA0LjVzICovCisJezksIDF9LAkJCS8qIDkgID0gNXMgICAqLworCXsweEEsIDF9LAkJLyogMTAgPSA1LjVzICovCisJezB4QiwgMX0sCQkvKiAxMSA9IDZzICAgKi8KKwl7MHhDLCAxfSwJCS8qIDEyID0gNi41cyAqLworCXsweEQsIDF9LAkJLyogMTMgPSA3cyAgICovCisJezB4RSwgMX0sCQkvKiAxNCA9IDcuNXMgKi8KKwl7MHhGLCAxfSwJCS8qIDE1ID0gOHMgICAqLworCXswLCAyfSwJCQkvKiAxNiA9IDVzICAqLworCXsxLCAyfSwJCQkvKiAxNyA9IDEwcyAqLworCXsyLCAyfSwJCQkvKiAxOCA9IDE1cyAqLworCXszLCAyfSwJCQkvKiAxOSA9IDIwcyAqLworCXs0LCAyfSwJCQkvKiAyMCA9IDI1cyAqLworCXs1LCAyfSwJCQkvKiAyMSA9IDMwcyAqLworCXs2LCAyfSwJCQkvKiAyMiA9IDM1cyAqLworCXs3LCAyfSwJCQkvKiAyMyA9IDQwcyAqLworCXs4LCAyfSwJCQkvKiAyNCA9IDQ1cyAqLworCXs5LCAyfSwJCQkvKiAyNSA9IDUwcyAqLworCXsweEEsIDJ9LAkJLyogMjYgPSA1NXMgKi8KKwl7MHhCLCAyfSwJCS8qIDI3ID0gNjBzICovCisJezB4QywgMn0sCQkvKiAyOCA9IDY1cyAqLworCXsweEQsIDJ9LAkJLyogMjkgPSA3MHMgKi8KKwl7MHhFLCAyfSwJCS8qIDMwID0gNzVzICovCisJezB4RiwgMn0sCQkvKiAzMSA9IDgwcyAqLworCXswLCAzfSwJCQkvKiAzMiA9IDUwcyAgKi8KKwl7MSwgM30sCQkJLyogMzMgPSAxMDBzICovCisJezIsIDN9LAkJCS8qIDM0ID0gMTUwcyAqLworCXszLCAzfSwJCQkvKiAzNSA9IDIwMHMgKi8KKwl7NCwgM30sCQkJLyogMzYgPSAyNTBzICovCisJezUsIDN9LAkJCS8qIDM3ID0gMzAwcyAqLworCXs2LCAzfSwJCQkvKiAzOCA9IDM1MHMgKi8KKwl7NywgM30sCQkJLyogMzkgPSA0MDBzICovCisJezgsIDN9LAkJCS8qIDQwID0gNDUwcyAqLworCXs5LCAzfSwJCQkvKiA0MSA9IDUwMHMgKi8KKwl7MHhBLCAzfSwJCS8qIDQyID0gNTUwcyAqLworCXsweEIsIDN9LAkJLyogNDMgPSA2MDBzICovCisJezB4QywgM30sCQkvKiA0NCA9IDY1MHMgKi8KKwl7MHhELCAzfSwJCS8qIDQ1ID0gNzAwcyAqLworCXsweEUsIDN9LAkJLyogNDYgPSA3NTBzICovCisJezB4RiwgM30sCQkvKiA0NyA9IDgwMHMgKi8KKwl7MCwgNH0sCQkJLyogNDggPSAxMDBzICovCisJezEsIDR9LAkJCS8qIDQ5ID0gMjAwcyAqLworCXsyLCA0fSwJCQkvKiA1MCA9IDMwMHMgKi8KKwl7MywgNH0sCQkJLyogNTEgPSA0MDBzICovCisJezQsIDR9LAkJCS8qIDUyID0gNTAwcyAqLworCXs1LCA0fSwJCQkvKiA1MyA9IDYwMHMgKi8KKwl7NiwgNH0sCQkJLyogNTQgPSA3MDBzICovCisJezcsIDR9LAkJCS8qIDU1ID0gODAwcyAqLworCXs4LCA0fSwJCQkvKiA1NiA9IDkwMHMgKi8KKwl7OSwgNH0sCQkJLyogNTcgPSAxMDAwcyAqLworCXsweEEsIDR9LAkJLyogNTggPSAxMTAwcyAqLworCXsweEIsIDR9LAkJLyogNTkgPSAxMjAwcyAqLworCXsweEMsIDR9LAkJLyogNjAgPSAxMzAwcyAqLworCXsweEQsIDR9LAkJLyogNjEgPSAxNDAwcyAqLworCXsweEUsIDR9LAkJLyogNjIgPSAxNTAwcyAqLworCXsweEYsIDR9CQkvKiA2MyA9IDE2MDBzICovCit9OworCisjZGVmaW5lIFNCQzgzNjBfRU5BQkxFIDB4MTIwCisjZGVmaW5lIFNCQzgzNjBfQkFTRVRJTUUgMHgxMjEKKworc3RhdGljIGludCB0aW1lb3V0ID0gMjc7CitzdGF0aWMgaW50IHdkX21hcmdpbiA9IDB4QjsKK3N0YXRpYyBpbnQgd2RfbXVsdGlwbGllciA9IDI7CitzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CisKK21vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDI3KTsKK01PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIkluZGV4IGludG8gdGltZW91dCB0YWJsZSAoMC02MykgKGRlZmF1bHQ9MjcgKDYwcykpIik7Cittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LAorCQkgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQpIik7CisKKy8qCisgKglLZXJuZWwgbWV0aG9kcy4KKyAqLworCisvKiBBY3RpdmF0ZSBhbmQgcHJlLWNvbmZpZ3VyZSB3YXRjaGRvZyAqLworc3RhdGljIHZvaWQgc2JjODM2MF9hY3RpdmF0ZSh2b2lkKQoreworCS8qIEVuYWJsZSB0aGUgd2F0Y2hkb2cgKi8KKwlvdXRiKDB4MEEsIFNCQzgzNjBfRU5BQkxFKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApOworCW91dGIoMHgwQiwgU0JDODM2MF9FTkFCTEUpOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CisJLyogU2V0IHRpbWVvdXQgbXVsdGlwbGllciAqLworCW91dGIod2RfbXVsdGlwbGllciwgU0JDODM2MF9FTkFCTEUpOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CisJLyogTm90aGluZyBoYXBwZW5zIHVudGlsIGZpcnN0IHNiYzgzNjBfcGluZygpICovCit9CisKKy8qIEtlcm5lbCBwaW5ncyB3YXRjaGRvZyAqLworc3RhdGljIHZvaWQgc2JjODM2MF9waW5nKHZvaWQpCit7CisJLyogV3JpdGUgdGhlIGJhc2UgdGltZXIgcmVnaXN0ZXIgKi8KKwlvdXRiKHdkX21hcmdpbiwgU0JDODM2MF9CQVNFVElNRSk7Cit9CisKKy8qIFVzZXJzcGFjZSBwaW5ncyBrZXJuZWwgZHJpdmVyLCBvciByZXF1ZXN0cyBjbGVhbiBjbG9zZSAqLworc3RhdGljIHNzaXplX3Qgc2JjODM2MF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlpZiAoY291bnQpIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisKKwkJCS8qIEluIGNhc2UgaXQgd2FzIHNldCBsb25nIGFnbyAqLworCQkJZXhwZWN0X2Nsb3NlID0gMDsKKworCQkJZm9yIChpID0gMDsgaSAhPSBjb3VudDsgaSsrKSB7CisJCQkJY2hhciBjOworCQkJCWlmIChnZXRfdXNlcihjLCBidWYgKyBpKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaWYgKGMgPT0gJ1YnKQorCQkJCQlleHBlY3RfY2xvc2UgPSA0MjsKKwkJCX0KKwkJfQorCQlzYmM4MzYwX3BpbmcoKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHNiYzgzNjBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzcGluX2xvY2soJnNiYzgzNjBfbG9jayk7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnNiYzgzNjBfaXNfb3BlbikpIHsKKwkJc3Bpbl91bmxvY2soJnNiYzgzNjBfbG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChub3dheW91dCkKKwkJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKworCS8qIEFjdGl2YXRlIGFuZCBwaW5nIG9uY2UgdG8gc3RhcnQgdGhlIGNvdW50ZG93biAqLworCXNwaW5fdW5sb2NrKCZzYmM4MzYwX2xvY2spOworCXNiYzgzNjBfYWN0aXZhdGUoKTsKKwlzYmM4MzYwX3BpbmcoKTsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgc2JjODM2MF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzcGluX2xvY2soJnNiYzgzNjBfbG9jayk7CisJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikKKwkJb3V0YigwLCBTQkM4MzYwX0VOQUJMRSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkgICAgICAgIlNCQzgzNjAgZGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkuICBTQkM4MzYwIHdpbGwgbm90IHN0b3AhXG4iKTsKKworCWNsZWFyX2JpdCgwLCAmc2JjODM2MF9pc19vcGVuKTsKKwlleHBlY3RfY2xvc2UgPSAwOworCXNwaW5fdW5sb2NrKCZzYmM4MzYwX2xvY2spOworCXJldHVybiAwOworfQorCisvKgorICoJTm90aWZpZXIgZm9yIHN5c3RlbSBkb3duCisgKi8KKworc3RhdGljIGludCBzYmM4MzYwX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkgICAgICB2b2lkICp1bnVzZWQpCit7CisJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkgeworCQkvKiBEaXNhYmxlIHRoZSBTQkM4MzYwIFdhdGNoZG9nICovCisJCW91dGIoMCwgU0JDODM2MF9FTkFCTEUpOworCX0KKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKy8qCisgKglLZXJuZWwgSW50ZXJmYWNlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNiYzgzNjBfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorCS53cml0ZSA9IHNiYzgzNjBfd3JpdGUsCisJLm9wZW4gPSBzYmM4MzYwX29wZW4sCisJLnJlbGVhc2UgPSBzYmM4MzYwX2Nsb3NlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHNiYzgzNjBfbWlzY2RldiA9IHsKKwkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSA9ICJ3YXRjaGRvZyIsCisJLmZvcHMgPSAmc2JjODM2MF9mb3BzLAorfTsKKworLyoKKyAqCVRoZSBTQkM4MzYwIG5lZWRzIHRvIGxlYXJuIGFib3V0IHNvZnQgc2h1dGRvd25zIGluIG9yZGVyIHRvCisgKgl0dXJuIHRoZSB0aW1lYm9tYiByZWdpc3RlcnMgb2ZmLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2JjODM2MF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHNiYzgzNjBfbm90aWZ5X3N5cywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNiYzgzNjBfaW5pdCh2b2lkKQoreworCWludCByZXM7CisJdW5zaWduZWQgbG9uZyBpbnQgbXNlY29uZHMgPSA2MDAwMDsKKworCXNwaW5fbG9ja19pbml0KCZzYmM4MzYwX2xvY2spOworCXJlcyA9IG1pc2NfcmVnaXN0ZXIoJnNiYzgzNjBfbWlzY2Rldik7CisJaWYgKHJlcykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9ub21pc2M7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihTQkM4MzYwX0VOQUJMRSwgMSwgIlNCQzgzNjAiKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJFTkFCTEUgbWV0aG9kIEkvTyAlWCBpcyBub3QgYXZhaWxhYmxlLlxuIiwKKwkJICAgICAgIFNCQzgzNjBfRU5BQkxFKTsKKwkJcmVzID0gLUVJTzsKKwkJZ290byBvdXRfbm9lbmFibGVyZWc7CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oU0JDODM2MF9CQVNFVElNRSwgMSwgIlNCQzgzNjAiKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICAgICAiQkFTRVRJTUUgbWV0aG9kIEkvTyAlWCBpcyBub3QgYXZhaWxhYmxlLlxuIiwKKwkJICAgICAgIFNCQzgzNjBfQkFTRVRJTUUpOworCQlyZXMgPSAtRUlPOworCQlnb3RvIG91dF9ub2Jhc2V0aW1lcmVnOworCX0KKworCXJlcyA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmc2JjODM2MF9ub3RpZmllcik7CisJaWYgKHJlcykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyLlxuIik7CisJCWdvdG8gb3V0X25vcmVib290OworCX0KKworCWlmICh0aW1lb3V0IDwgMCB8fCB0aW1lb3V0ID4gNjMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW52YWxpZCB0aW1lb3V0IGluZGV4IChtdXN0IGJlIDAtNjMpLlxuIik7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X25vcmVib290OworCX0KKworCXdkX21hcmdpbiA9IHdkX3RpbWVzW3RpbWVvdXRdWzBdOworCXdkX211bHRpcGxpZXIgPSB3ZF90aW1lc1t0aW1lb3V0XVsxXTsKKworCWlmICh3ZF9tdWx0aXBsaWVyID09IDEpCisJCW1zZWNvbmRzID0gKHdkX21hcmdpbiArIDEpICogNTAwOworCWVsc2UgaWYgKHdkX211bHRpcGxpZXIgPT0gMikKKwkJbXNlY29uZHMgPSAod2RfbWFyZ2luICsgMSkgKiA1MDAwOworCWVsc2UgaWYgKHdkX211bHRpcGxpZXIgPT0gMykKKwkJbXNlY29uZHMgPSAod2RfbWFyZ2luICsgMSkgKiA1MDAwMDsKKwllbHNlIGlmICh3ZF9tdWx0aXBsaWVyID09IDQpCisJCW1zZWNvbmRzID0gKHdkX21hcmdpbiArIDEpICogMTAwMDAwOworCisJLyogTXkga2luZ2RvbSBmb3IgdGhlIGFiaWxpdHkgdG8gcHJpbnQgIjAuNSBzZWNvbmRzIiBpbiB0aGUga2VybmVsISAqLworCXByaW50ayhLRVJOX0lORk8gUEZYICJUaW1lb3V0IHNldCBhdCAlbGQgbXMuXG4iLCBtc2Vjb25kcyk7CisKKwlyZXR1cm4gMDsKKworICAgICAgb3V0X25vcmVib290OgorCXJlbGVhc2VfcmVnaW9uKFNCQzgzNjBfRU5BQkxFLCAxKTsKKwlyZWxlYXNlX3JlZ2lvbihTQkM4MzYwX0JBU0VUSU1FLCAxKTsKKyAgICAgIG91dF9ub2VuYWJsZXJlZzoKKyAgICAgIG91dF9ub2Jhc2V0aW1lcmVnOgorCW1pc2NfZGVyZWdpc3Rlcigmc2JjODM2MF9taXNjZGV2KTsKKyAgICAgIG91dF9ub21pc2M6CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNiYzgzNjBfZXhpdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3Rlcigmc2JjODM2MF9taXNjZGV2KTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmc2JjODM2MF9ub3RpZmllcik7CisJcmVsZWFzZV9yZWdpb24oU0JDODM2MF9FTkFCTEUsIDEpOworCXJlbGVhc2VfcmVnaW9uKFNCQzgzNjBfQkFTRVRJTUUsIDEpOworfQorCittb2R1bGVfaW5pdChzYmM4MzYwX2luaXQpOworbW9kdWxlX2V4aXQoc2JjODM2MF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSWFuIEUuIE1vcmdhbiA8aW1vcmdhbkB3ZWJjb24uY2E+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNCQzgzNjAgd2F0Y2hkb2cgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMS4wIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CisKKy8qIGVuZCBvZiBzYmM4MzYwLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM5NzdmX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmZjY0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM5NzdmX3dkdC5jCkBAIC0wLDAgKzEsNTQzIEBACisvKgorICoJVzgzOTc3RiBXYXRjaGRvZyBUaW1lciBEcml2ZXIgZm9yIFdpbmJvbmQgVzgzOTc3RiBJL08gQ2hpcAorICoKKyAqCShjKSBDb3B5cmlnaHQgMjAwNSAgSm9zZSBHb25jYWx2ZXMgPGpvc2UuZ29uY2FsdmVzQGlub3YucHQ+CisgKgorICogICAgICBCYXNlZCBvbiB3ODM4NzdmX3dkdC5jIGJ5IFNjb3R0IEplbm5pbmdzLAorICogICAgICAgICAgIGFuZCB3ZHQ5NzcuYyBieSBXb29keSBTdXdhbHNraQorICoKKyAqCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBXQVRDSERPR19WRVJTSU9OICAiMS4wMCIKKyNkZWZpbmUgV0FUQ0hET0dfTkFNRSAgICAgIlc4Mzk3N0YgV0RUIgorI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICAgIFdBVENIRE9HX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIlxuIgorCisjZGVmaW5lIElPX0lOREVYX1BPUlQgICAgIDB4M0YwCisjZGVmaW5lIElPX0RBVEFfUE9SVCAgICAgIChJT19JTkRFWF9QT1JUKzEpCisKKyNkZWZpbmUgVU5MT0NLX0RBVEEgICAgICAgMHg4NworI2RlZmluZSBMT0NLX0RBVEEgICAgICAgICAweEFBCisjZGVmaW5lIERFVklDRV9SRUdJU1RFUiAgIDB4MDcKKworI2RlZmluZQlERUZBVUxUX1RJTUVPVVQgICA0NQkJLyogZGVmYXVsdCB0aW1lb3V0IGluIHNlY29uZHMgKi8KKworc3RhdGljCWludCB0aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOworc3RhdGljCWludCB0aW1lb3V0VzsJCQkvKiB0aW1lb3V0IGluIHdhdGNoZG9nIGNvdW50ZXIgdW5pdHMgKi8KK3N0YXRpYwl1bnNpZ25lZCBsb25nIHRpbWVyX2FsaXZlOworc3RhdGljCWludCB0ZXN0bW9kZTsKK3N0YXRpYwljaGFyIGV4cGVjdF9jbG9zZTsKK3N0YXRpYwlzcGlubG9ja190IHNwaW5sb2NrOworCittb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModGltZW91dCwiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzICgxNS4uNzYzNSksIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoREVGQVVMVF9USU1FT1VUKSAiKSIpOworbW9kdWxlX3BhcmFtKHRlc3Rtb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0ZXN0bW9kZSwiV2F0Y2hkb2cgdGVzdG1vZGUgKDEgPSBubyByZWJvb3QpLCBkZWZhdWx0PTAiKTsKKworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQpIik7CisKKy8qCisgKiBTdGFydCB0aGUgd2F0Y2hkb2cKKyAqLworCitzdGF0aWMgaW50IHdkdF9zdGFydCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3BpbmxvY2ssIGZsYWdzKTsKKworCS8qIFVubG9jayB0aGUgU3VwZXJJTyBjaGlwICovCisJb3V0Yl9wKFVOTE9DS19EQVRBLElPX0lOREVYX1BPUlQpOworCW91dGJfcChVTkxPQ0tfREFUQSxJT19JTkRFWF9QT1JUKTsKKworCS8qCisJICogU2VsZWN0IGRldmljZSBBdXgyIChkZXZpY2U9OCkgdG8gc2V0IHdhdGNoZG9nIHJlZ3MgRjIsIEYzIGFuZCBGNC4KKwkgKiBGMiBoYXMgdGhlIHRpbWVvdXQgaW4gd2F0Y2hkb2cgY291bnRlciB1bml0cy4KKwkgKiBGMyBpcyBzZXQgdG8gZW5hYmxlIHdhdGNoZG9nIExFRCBibGluayBhdCB0aW1lb3V0LgorCSAqIEY0IGlzIHVzZWQgdG8ganVzdCBjbGVhciB0aGUgVElNRU9VVCdlZCBzdGF0ZSAoYml0IDApLgorCSAqLworCW91dGJfcChERVZJQ0VfUkVHSVNURVIsSU9fSU5ERVhfUE9SVCk7CisJb3V0Yl9wKDB4MDgsSU9fREFUQV9QT1JUKTsKKwlvdXRiX3AoMHhGMixJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AodGltZW91dFcsSU9fREFUQV9QT1JUKTsKKwlvdXRiX3AoMHhGMyxJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AoMHgwOCxJT19EQVRBX1BPUlQpOworCW91dGJfcCgweEY0LElPX0lOREVYX1BPUlQpOworCW91dGJfcCgweDAwLElPX0RBVEFfUE9SVCk7CisKKwkvKiBTZXQgZGV2aWNlIEF1eDIgYWN0aXZlICovCisJb3V0Yl9wKDB4MzAsSU9fSU5ERVhfUE9SVCk7CisJb3V0Yl9wKDB4MDEsSU9fREFUQV9QT1JUKTsKKworCS8qIAorCSAqIFNlbGVjdCBkZXZpY2UgQXV4MSAoZGV2PTcpIHRvIHNldCBHUDE2IGFzIHRoZSB3YXRjaGRvZyBvdXRwdXQKKwkgKiAoaW4gcmVnIEU2KSBhbmQgR1AxMyBhcyB0aGUgd2F0Y2hkb2cgTEVEIG91dHB1dCAoaW4gcmVnIEUzKS4KKwkgKiBNYXAgR1AxNiBhdCBwaW4gMTE5LgorCSAqIEluIHRlc3QgbW9kZSB3YXRjaCB0aGUgYml0IDAgb24gRjQgdG8gaW5kaWNhdGUgInRyaWdnZXJlZCIgb3IKKwkgKiBjaGVjayB3YXRjaGRvZyBMRUQgb24gU0JDLgorCSAqLworCW91dGJfcChERVZJQ0VfUkVHSVNURVIsSU9fSU5ERVhfUE9SVCk7CisJb3V0Yl9wKDB4MDcsSU9fREFUQV9QT1JUKTsKKwlpZiAoIXRlc3Rtb2RlKQorCXsKKwkJdW5zaWduZWQgcGluX21hcDsKKworCQlvdXRiX3AoMHhFNixJT19JTkRFWF9QT1JUKTsKKwkJb3V0Yl9wKDB4MEEsSU9fREFUQV9QT1JUKTsKKwkJb3V0Yl9wKDB4MkMsSU9fSU5ERVhfUE9SVCk7CisJCXBpbl9tYXAgPSBpbmJfcChJT19EQVRBX1BPUlQpOworCQlwaW5fbWFwIHw9IDB4MTA7CisJCXBpbl9tYXAgJj0gfigweDIwKTsKKwkJb3V0Yl9wKDB4MkMsSU9fSU5ERVhfUE9SVCk7CisJCW91dGJfcChwaW5fbWFwLElPX0RBVEFfUE9SVCk7CisJfQorCW91dGJfcCgweEUzLElPX0lOREVYX1BPUlQpOworCW91dGJfcCgweDA4LElPX0RBVEFfUE9SVCk7CisKKwkvKiBTZXQgZGV2aWNlIEF1eDEgYWN0aXZlICovCisJb3V0Yl9wKDB4MzAsSU9fSU5ERVhfUE9SVCk7CisJb3V0Yl9wKDB4MDEsSU9fREFUQV9QT1JUKTsKKworCS8qIExvY2sgdGhlIFN1cGVySU8gY2hpcCAqLworCW91dGJfcChMT0NLX0RBVEEsSU9fSU5ERVhfUE9SVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGlubG9jaywgZmxhZ3MpOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggImFjdGl2YXRlZC5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdG9wIHRoZSB3YXRjaGRvZworICovCisKK3N0YXRpYyBpbnQgd2R0X3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwaW5sb2NrLCBmbGFncyk7CisKKwkvKiBVbmxvY2sgdGhlIFN1cGVySU8gY2hpcCAqLworCW91dGJfcChVTkxPQ0tfREFUQSxJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AoVU5MT0NLX0RBVEEsSU9fSU5ERVhfUE9SVCk7CisKKwkvKiAKKwkgKiBTZWxlY3QgZGV2aWNlIEF1eDIgKGRldmljZT04KSB0byBzZXQgd2F0Y2hkb2cgcmVncyBGMiwgRjMgYW5kIEY0LgorCSAqIEYyIGlzIHJlc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlICh3YXRjaGRvZyB0aW1lciBkaXNhYmxlZCkuCisJICogRjMgaXMgcmVzZXQgdG8gaXRzIGRlZmF1bHQgc3RhdGUuCisJICogRjQgY2xlYXJzIHRoZSBUSU1FT1VUJ2VkIHN0YXRlIChiaXQgMCkgLSBiYWNrIHRvIGRlZmF1bHQuCisJICovCisJb3V0Yl9wKERFVklDRV9SRUdJU1RFUixJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AoMHgwOCxJT19EQVRBX1BPUlQpOworCW91dGJfcCgweEYyLElPX0lOREVYX1BPUlQpOworCW91dGJfcCgweEZGLElPX0RBVEFfUE9SVCk7CisJb3V0Yl9wKDB4RjMsSU9fSU5ERVhfUE9SVCk7CisJb3V0Yl9wKDB4MDAsSU9fREFUQV9QT1JUKTsKKwlvdXRiX3AoMHhGNCxJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AoMHgwMCxJT19EQVRBX1BPUlQpOworCW91dGJfcCgweEYyLElPX0lOREVYX1BPUlQpOworCW91dGJfcCgweDAwLElPX0RBVEFfUE9SVCk7CisKKwkvKgorCSAqIFNlbGVjdCBkZXZpY2UgQXV4MSAoZGV2PTcpIHRvIHNldCBHUDE2IChpbiByZWcgRTYpIGFuZCAKKwkgKiBHcDEzIChpbiByZWcgRTMpIGFzIGlucHV0cy4KKwkgKi8KKwlvdXRiX3AoREVWSUNFX1JFR0lTVEVSLElPX0lOREVYX1BPUlQpOworCW91dGJfcCgweDA3LElPX0RBVEFfUE9SVCk7CisJaWYgKCF0ZXN0bW9kZSkKKwl7CisJCW91dGJfcCgweEU2LElPX0lOREVYX1BPUlQpOworCQlvdXRiX3AoMHgwMSxJT19EQVRBX1BPUlQpOworCX0KKwlvdXRiX3AoMHhFMyxJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AoMHgwMSxJT19EQVRBX1BPUlQpOworCisJLyogTG9jayB0aGUgU3VwZXJJTyBjaGlwICovCisJb3V0Yl9wKExPQ0tfREFUQSxJT19JTkRFWF9QT1JUKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaW5sb2NrLCBmbGFncyk7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAic2h1dGRvd24uXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2VuZCBhIGtlZXBhbGl2ZSBwaW5nIHRvIHRoZSB3YXRjaGRvZworICogVGhpcyBpcyBkb25lIGJ5IHNpbXBseSByZS13cml0aW5nIHRoZSB0aW1lb3V0IHRvIHJlZy4gMHhGMgorICovCisKK3N0YXRpYyBpbnQgd2R0X2tlZXBhbGl2ZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3BpbmxvY2ssIGZsYWdzKTsKKworCS8qIFVubG9jayB0aGUgU3VwZXJJTyBjaGlwICovCisJb3V0Yl9wKFVOTE9DS19EQVRBLElPX0lOREVYX1BPUlQpOworCW91dGJfcChVTkxPQ0tfREFUQSxJT19JTkRFWF9QT1JUKTsKKworCS8qIFNlbGVjdCBkZXZpY2UgQXV4MiAoZGV2aWNlPTgpIHRvIGtpY2sgd2F0Y2hkb2cgcmVnIEYyICovCisJb3V0Yl9wKERFVklDRV9SRUdJU1RFUixJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AoMHgwOCxJT19EQVRBX1BPUlQpOworCW91dGJfcCgweEYyLElPX0lOREVYX1BPUlQpOworCW91dGJfcCh0aW1lb3V0VyxJT19EQVRBX1BPUlQpOworCisJLyogTG9jayB0aGUgU3VwZXJJTyBjaGlwICovCisJb3V0Yl9wKExPQ0tfREFUQSxJT19JTkRFWF9QT1JUKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0aGUgd2F0Y2hkb2cgdGltZW91dCB2YWx1ZQorICovCisKK3N0YXRpYyBpbnQgd2R0X3NldF90aW1lb3V0KGludCB0KQoreworCWludCB0bXJ2YWw7CisKKwkvKgorCSAqIENvbnZlcnQgc2Vjb25kcyB0byB3YXRjaGRvZyBjb3VudGVyIHRpbWUgdW5pdHMsIHJvdW5kaW5nIHVwLgorCSAqIE9uIFBDTS01MzM1IHdhdGNoZG9nIHVuaXRzIGFyZSAzMCBzZWNvbmRzL3N0ZXAgd2l0aCAxNSBzZWMgc3RhcnR1cCAKKwkgKiB2YWx1ZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBzdXBwbGllZCBpbiB0aGUgUENNLTUzMzUgbWFudWFsIGFuZCB3YXMKKwkgKiBjaGVja2VkIGJ5IG1lIG9uIGEgcmVhbCBib2FyZC4gVGhpcyBpcyBhIGJpdCBzdHJhbmdlIGJlY2F1c2UgVzgzOTc3ZgorCSAqIGRhdGFzaGVldCBzYXlzIGNvdW50ZXIgdW5pdCBpcyBpbiBtaW51dGVzIQorCSAqLworCWlmICh0IDwgMTUpCisJCXJldHVybiAtRUlOVkFMOworCisJdG1ydmFsID0gKCh0ICsgMTUpICsgMjkpIC8gMzA7CisKKwlpZiAodG1ydmFsID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogdGltZW91dCBpcyB0aGUgdGltZW91dCBpbiBzZWNvbmRzLCAKKwkgKiB0aW1lb3V0VyBpcyB0aGUgdGltZW91dCBpbiB3YXRjaGRvZyBjb3VudGVyIHVuaXRzLgorCSAqLworCXRpbWVvdXRXID0gdG1ydmFsOworCXRpbWVvdXQgPSAodGltZW91dFcgKiAzMCkgLSAxNTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCB0aGUgd2F0Y2hkb2cgc3RhdHVzCisgKi8KKworc3RhdGljIGludCB3ZHRfZ2V0X3N0YXR1cyhpbnQgKnN0YXR1cykKK3sKKwlpbnQgbmV3X3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwaW5sb2NrLCBmbGFncyk7CisKKwkvKiBVbmxvY2sgdGhlIFN1cGVySU8gY2hpcCAqLworCW91dGJfcChVTkxPQ0tfREFUQSxJT19JTkRFWF9QT1JUKTsKKwlvdXRiX3AoVU5MT0NLX0RBVEEsSU9fSU5ERVhfUE9SVCk7CisKKwkvKiBTZWxlY3QgZGV2aWNlIEF1eDIgKGRldmljZT04KSB0byByZWFkIHdhdGNoZG9nIHJlZyBGNCAqLworCW91dGJfcChERVZJQ0VfUkVHSVNURVIsSU9fSU5ERVhfUE9SVCk7CisJb3V0Yl9wKDB4MDgsSU9fREFUQV9QT1JUKTsKKwlvdXRiX3AoMHhGNCxJT19JTkRFWF9QT1JUKTsKKwluZXdfc3RhdHVzID0gaW5iX3AoSU9fREFUQV9QT1JUKTsKKworCS8qIExvY2sgdGhlIFN1cGVySU8gY2hpcCAqLworCW91dGJfcChMT0NLX0RBVEEsSU9fSU5ERVhfUE9SVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGlubG9jaywgZmxhZ3MpOworCisJKnN0YXR1cyA9IDA7CisJaWYgKG5ld19zdGF0dXMgJiAxKQorCQkqc3RhdHVzIHw9IFdESU9GX0NBUkRSRVNFVDsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKgkvZGV2L3dhdGNoZG9nIGhhbmRsaW5nCisgKi8KKworc3RhdGljIGludCB3ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwkvKiBJZiB0aGUgd2F0Y2hkb2cgaXMgYWxpdmUgd2UgZG9uJ3QgbmVlZCB0byBzdGFydCBpdCBhZ2FpbiAqLworCWlmKCB0ZXN0X2FuZF9zZXRfYml0KDAsICZ0aW1lcl9hbGl2ZSkgKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKG5vd2F5b3V0KQorCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOworCisJd2R0X3N0YXJ0KCk7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IHdkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCS8qCisJICogU2h1dCBvZmYgdGhlIHRpbWVyLgorCSAqIExvY2sgaXQgaW4gaWYgaXQncyBhIG1vZHVsZSBhbmQgd2Ugc2V0IG5vd2F5b3V0CisJICovCisJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikKKwl7CisJCXdkdF9zdG9wKCk7CisJCWNsZWFyX2JpdCgwLCAmdGltZXJfYWxpdmUpOworCX0gZWxzZSB7CisJCXdkdF9rZWVwYWxpdmUoKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggInVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCX0KKwlleHBlY3RfY2xvc2UgPSAwOworCXJldHVybiAwOworfQorCisvKgorICogICAgICB3ZHRfd3JpdGU6CisgKiAgICAgIEBmaWxlOiBmaWxlIGhhbmRsZSB0byB0aGUgd2F0Y2hkb2cKKyAqICAgICAgQGJ1ZjogYnVmZmVyIHRvIHdyaXRlICh1bnVzZWQgYXMgZGF0YSBkb2VzIG5vdCBtYXR0ZXIgaGVyZQorICogICAgICBAY291bnQ6IGNvdW50IG9mIGJ5dGVzCisgKiAgICAgIEBwcG9zOiBwb2ludGVyIHRvIHRoZSBwb3NpdGlvbiB0byB3cml0ZS4gTm8gc2Vla3MgYWxsb3dlZAorICoKKyAqICAgICAgQSB3cml0ZSB0byBhIHdhdGNoZG9nIGRldmljZSBpcyBkZWZpbmVkIGFzIGEga2VlcGFsaXZlIHNpZ25hbC4gQW55CisgKiAgICAgIHdyaXRlIG9mIGRhdGEgd2lsbCBkbywgYXMgd2Ugd2UgZG9uJ3QgZGVmaW5lIGNvbnRlbnQgbWVhbmluZy4KKyAqLworCitzdGF0aWMgc3NpemVfdCB3ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLworCWlmKGNvdW50KQorCXsKKwkJaWYgKCFub3dheW91dCkKKwkJeworCQkJc2l6ZV90IG9mczsKKworCQkJLyogbm90ZToganVzdCBpbiBjYXNlIHNvbWVvbmUgd3JvdGUgdGhlIG1hZ2ljIGNoYXJhY3RlciBsb25nIGFnbyAqLworCQkJZXhwZWN0X2Nsb3NlID0gMDsKKworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCWZvcihvZnMgPSAwOyBvZnMgIT0gY291bnQ7IG9mcysrKQorCQkJeworCQkJCWNoYXIgYzsKKwkJCQlpZiAoZ2V0X3VzZXIoYywgYnVmICsgb2ZzKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaWYgKGMgPT0gJ1YnKSB7CisJCQkJCWV4cGVjdF9jbG9zZSA9IDQyOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIHNvbWVvbmUgd3JvdGUgdG8gdXMsIHdlIHNob3VsZCByZXN0YXJ0IHRpbWVyICovCisJCXdkdF9rZWVwYWxpdmUoKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogICAgICB3ZHRfaW9jdGw6CisgKiAgICAgIEBpbm9kZTogaW5vZGUgb2YgdGhlIGRldmljZQorICogICAgICBAZmlsZTogZmlsZSBoYW5kbGUgdG8gdGhlIGRldmljZQorICogICAgICBAY21kOiB3YXRjaGRvZyBjb21tYW5kCisgKiAgICAgIEBhcmc6IGFyZ3VtZW50IHBvaW50ZXIKKyAqCisgKiAgICAgIFRoZSB3YXRjaGRvZyBBUEkgZGVmaW5lcyBhIGNvbW1vbiBzZXQgb2YgZnVuY3Rpb25zIGZvciBhbGwgd2F0Y2hkb2dzCisgKiAgICAgIGFjY29yZGluZyB0byB0aGVpciBhdmFpbGFibGUgZmVhdHVyZXMuCisgKi8KKworc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCS5vcHRpb25zID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX01BR0lDQ0xPU0UgfCBXRElPRl9LRUVQQUxJVkVQSU5HLAorCS5maXJtd2FyZV92ZXJzaW9uID0JMSwKKwkuaWRlbnRpdHkgPSBXQVRDSERPR19OQU1FLAorfTsKKworc3RhdGljIGludCB3ZHRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHN0YXR1czsKKwlpbnQgbmV3X29wdGlvbnMsIHJldHZhbCA9IC1FSU5WQUw7CisJaW50IG5ld190aW1lb3V0OworCXVuaW9uIHsKKwkJc3RydWN0IHdhdGNoZG9nX2luZm8gX191c2VyICppZGVudDsKKwkJaW50IF9fdXNlciAqaTsKKwl9IHVhcmc7CisKKwl1YXJnLmkgPSAoaW50IF9fdXNlciAqKWFyZzsKKworCXN3aXRjaChjbWQpCisJeworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldHVybiBjb3B5X3RvX3VzZXIodWFyZy5pZGVudCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOworCisJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJCXdkdF9nZXRfc3RhdHVzKCZzdGF0dXMpOworCQlyZXR1cm4gcHV0X3VzZXIoc3RhdHVzLCB1YXJnLmkpOworCisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXR1cm4gcHV0X3VzZXIoMCwgdWFyZy5pKTsKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQl3ZHRfa2VlcGFsaXZlKCk7CisJCXJldHVybiAwOworCisJY2FzZSBXRElPQ19TRVRPUFRJT05TOgorCQlpZiAoZ2V0X3VzZXIgKG5ld19vcHRpb25zLCB1YXJnLmkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRElTQUJMRUNBUkQpIHsKKwkJCXdkdF9zdG9wKCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisKKwkJaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgeworCQkJd2R0X3N0YXJ0KCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisKKwkJcmV0dXJuIHJldHZhbDsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJaWYgKGdldF91c2VyKG5ld190aW1lb3V0LCB1YXJnLmkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHdkdF9zZXRfdGltZW91dChuZXdfdGltZW91dCkpCisJCSAgICByZXR1cm4gLUVJTlZBTDsKKworCQl3ZHRfa2VlcGFsaXZlKCk7CisJCS8qIEZhbGwgKi8KKworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJcmV0dXJuIHB1dF91c2VyKHRpbWVvdXQsIHVhcmcuaSk7CisKKwl9Cit9CisKK3N0YXRpYyBpbnQgd2R0X25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJdm9pZCAqdW51c2VkKQoreworCWlmIChjb2RlPT1TWVNfRE9XTiB8fCBjb2RlPT1TWVNfSEFMVCkKKwkJd2R0X3N0b3AoKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF9mb3BzPQoreworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkud3JpdGUJCT0gd2R0X3dyaXRlLAorCS5pb2N0bAkJPSB3ZHRfaW9jdGwsCisJLm9wZW4JCT0gd2R0X29wZW4sCisJLnJlbGVhc2UJPSB3ZHRfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB3ZHRfbWlzY2Rldj0KK3sKKwkubWlub3IJCT0gV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUJCT0gIndhdGNoZG9nIiwKKwkuZm9wcwkJPSAmd2R0X2ZvcHMsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHdkdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHdkdF9ub3RpZnlfc3lzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdzgzOTc3Zl93ZHRfaW5pdCh2b2lkKQoreworCWludCByYzsKKworICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCBEUklWRVJfVkVSU0lPTik7CisKKwlzcGluX2xvY2tfaW5pdCgmc3BpbmxvY2spOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSB0aW1lb3V0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgCisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0CisJICovCisJaWYgKHdkdF9zZXRfdGltZW91dCh0aW1lb3V0KSkgeworCQl3ZHRfc2V0X3RpbWVvdXQoREVGQVVMVF9USU1FT1VUKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInRpbWVvdXQgdmFsdWUgbXVzdCBiZSAxNTw9dGltZW91dDw9NzYzNSwgdXNpbmcgJWRcbiIsCisJCQlERUZBVUxUX1RJTUVPVVQpOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oSU9fSU5ERVhfUE9SVCwgMiwgV0FUQ0hET0dfTkFNRSkpCisJeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJJL08gYWRkcmVzcyAweCUwNHggYWxyZWFkeSBpbiB1c2VcbiIsCisJCQlJT19JTkRFWF9QT1JUKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcmMgPSBtaXNjX3JlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7CisJaWYgKHJjKQorCXsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCQl3ZHRfbWlzY2Rldi5taW5vciwgcmMpOworCQlnb3RvIGVycl9vdXRfcmVnaW9uOworCX0KKworCXJjID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOworCWlmIChyYykKKwl7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCisJCQlyYyk7CisJCWdvdG8gZXJyX291dF9taXNjZGV2OworCX0KKworCXByaW50ayhLRVJOX0lORk8gUEZYICJpbml0aWFsaXplZC4gdGltZW91dD0lZCBzZWMgKG5vd2F5b3V0PSVkIHRlc3Rtb2RlPSVkKVxuIiwKKwkJdGltZW91dCwgbm93YXlvdXQsIHRlc3Rtb2RlKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X21pc2NkZXY6CisJbWlzY19kZXJlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7CitlcnJfb3V0X3JlZ2lvbjoKKwlyZWxlYXNlX3JlZ2lvbihJT19JTkRFWF9QT1JULDIpOworZXJyX291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3ODM5NzdmX3dkdF9leGl0KHZvaWQpCit7CisJd2R0X3N0b3AoKTsKKwltaXNjX2RlcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X25vdGlmaWVyKTsKKwlyZWxlYXNlX3JlZ2lvbihJT19JTkRFWF9QT1JULDIpOworfQorCittb2R1bGVfaW5pdCh3ODM5NzdmX3dkdF9pbml0KTsKK21vZHVsZV9leGl0KHc4Mzk3N2Zfd2R0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKb3NlIEdvbmNhbHZlcyA8am9zZS5nb25jYWx2ZXNAaW5vdi5wdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB3YXRjaGRvZyB0aW1lciBpbiBXODM5NzdGIEkvTyBjaGlwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMKaW5kZXggM2I4NjVmMy4uYjY2NzgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kZWxsX3JidS5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYwpAQCAtNTAsNyArNTAsNyBAQAogTU9EVUxFX0FVVEhPUigiQWJoYXkgU2FsdW5rZSA8YWJoYXlfc2FsdW5rZUBkZWxsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB1cGRhdGluZyBCSU9TIGltYWdlIG9uIERFTEwgc3lzdGVtcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX1ZFUlNJT04oIjIuMCIpOwogCiAjZGVmaW5lIEJJT1NfU0NBTl9MSU1JVCAweGZmZmZmZmZmCiAjZGVmaW5lIE1BWF9JTUFHRV9MRU5HVEggMTYKQEAgLTY1LDEwICs2NSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgcGFja2V0X3dyaXRlX2NvdW50OwogCXVuc2lnbmVkIGxvbmcgbnVtX3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZyBwYWNrZXRzaXplOworCWludCBlbnRyeV9jcmVhdGVkOwogfSByYnVfZGF0YTsKIAotc3RhdGljIGNoYXIgaW1hZ2VfdHlwZVtNQVhfSU1BR0VfTEVOR1RIXSA9ICJtb25vIjsKLW1vZHVsZV9wYXJhbV9zdHJpbmcoaW1hZ2VfdHlwZSwgaW1hZ2VfdHlwZSwgc2l6ZW9mKGltYWdlX3R5cGUpLCAwKTsKK3N0YXRpYyBjaGFyIGltYWdlX3R5cGVbTUFYX0lNQUdFX0xFTkdUSCArIDFdID0gIm1vbm8iOworbW9kdWxlX3BhcmFtX3N0cmluZyhpbWFnZV90eXBlLCBpbWFnZV90eXBlLCBzaXplb2YgKGltYWdlX3R5cGUpLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW1hZ2VfdHlwZSwgIkJJT1MgaW1hZ2UgdHlwZS4gY2hvb3NlLSBtb25vIG9yIHBhY2tldCIpOwogCiBzdHJ1Y3QgcGFja2V0X2RhdGEgewpAQCAtMTE0LDcgKzExNSw3IEBACiAKIAlpZiAoKHJidV9kYXRhLnBhY2tldF93cml0ZV9jb3VudCArIGxlbmd0aCkgPiByYnVfZGF0YS5wYWNrZXRzaXplKSB7CiAJCXByX2RlYnVnKCJkZWxsX3JidTolczogcGFja2V0IHNpemUgZGF0YSAiCi0JCQkgIm92ZXJydW5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkib3ZlcnJ1blxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNDYsMTIgKzE0NywxNCBAQAogCQlwcl9kZWJ1ZygiY3JlYXRlX3BhY2tldDogcGFja2V0c2l6ZSBub3Qgc3BlY2lmaWVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXNwaW5fdW5sb2NrKCZyYnVfZGF0YS5sb2NrKTsKKwluZXdwYWNrZXQgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBhY2tldF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJc3Bpbl9sb2NrKCZyYnVfZGF0YS5sb2NrKTsKIAotCW5ld3BhY2tldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrZXRfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbmV3cGFja2V0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJkZWxsX3JidTolczogZmFpbGVkIHRvIGFsbG9jYXRlIG5ldyAiCi0JCSAgICAgICAicGFja2V0XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJImRlbGxfcmJ1OiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgbmV3ICIKKwkJCSJwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTYwLDE1ICsxNjMsMTcgQEAKIAkgKiB0aGVyZSBpcyBubyB1cHBlciBsaW1pdCBvbiBtZW1vcnkKIAkgKiBhZGRyZXNzIGZvciBwYWNrZXRpemVkIG1lY2hhbmlzbQogCSAqLwotCW5ld3BhY2tldC0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAotCQkJCQkJCSAgICBvcmRlcm51bSk7CisJc3Bpbl91bmxvY2soJnJidV9kYXRhLmxvY2spOworCW5ld3BhY2tldC0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwkJb3JkZXJudW0pOworCXNwaW5fbG9jaygmcmJ1X2RhdGEubG9jayk7CiAKIAlwcl9kZWJ1ZygiY3JlYXRlX3BhY2tldDogbmV3cGFja2V0ICVwXG4iLCBuZXdwYWNrZXQtPmRhdGEpOwogCiAJaWYgKCFuZXdwYWNrZXQtPmRhdGEpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImRlbGxfcmJ1OiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgbmV3ICIKLQkJICAgICAgICJwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkiZGVsbF9yYnU6JXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgIgorCQkJInBhY2tldFxuIiwgX19GVU5DVElPTl9fKTsKIAkJa2ZyZWUobmV3cGFja2V0KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMjA0LDkgKzIwOSw4IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50Ci1kb19wYWNrZXRfcmVhZChjaGFyICpkYXRhLCBzdHJ1Y3QgbGlzdF9oZWFkICpwdGVtcF9saXN0LAotCSAgICAgICBpbnQgbGVuZ3RoLCBpbnQgYnl0ZXNfcmVhZCwgaW50ICpsaXN0X3JlYWRfY291bnQpCitzdGF0aWMgaW50IGRvX3BhY2tldF9yZWFkKGNoYXIgKmRhdGEsIHN0cnVjdCBsaXN0X2hlYWQgKnB0ZW1wX2xpc3QsCisJaW50IGxlbmd0aCwgaW50IGJ5dGVzX3JlYWQsIGludCAqbGlzdF9yZWFkX2NvdW50KQogewogCXZvaWQgKnB0ZW1wX2J1ZjsKIAlzdHJ1Y3QgcGFja2V0X2RhdGEgKm5ld3BhY2tldCA9IE5VTEw7CkBAIC0yMzksNyArMjQzLDcgQEAKIAlyZXR1cm4gYnl0ZXNfY29waWVkOwogfQogCi1zdGF0aWMgaW50IHBhY2tldF9yZWFkX2xpc3QoY2hhciAqZGF0YSwgc2l6ZV90ICogcHJlYWRfbGVuZ3RoKQorc3RhdGljIGludCBwYWNrZXRfcmVhZF9saXN0KGNoYXIgKmRhdGEsIHNpemVfdCAqcHJlYWRfbGVuZ3RoKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ZW1wX2xpc3Q7CiAJaW50IHRlbXBfY291bnQgPSAwOwpAQCAtMjU4LDggKzI2Miw3IEBACiAJcHRlbXBfbGlzdCA9ICgmcGFja2V0X2RhdGFfaGVhZC5saXN0KS0+bmV4dDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkocHRlbXBfbGlzdCkpIHsKIAkJYnl0ZXNfY29waWVkID0gZG9fcGFja2V0X3JlYWQocGRlc3QsIHB0ZW1wX2xpc3QsCi0JCQkJCSAgICAgIHJlbWFpbmluZ19ieXRlcywgYnl0ZXNfcmVhZCwKLQkJCQkJICAgICAgJnRlbXBfY291bnQpOworCQkJcmVtYWluaW5nX2J5dGVzLCBieXRlc19yZWFkLCAmdGVtcF9jb3VudCk7CiAJCXJlbWFpbmluZ19ieXRlcyAtPSBieXRlc19jb3BpZWQ7CiAJCWJ5dGVzX3JlYWQgKz0gYnl0ZXNfY29waWVkOwogCQlwZGVzdCArPSBieXRlc19jb3BpZWQ7CkBAIC0yODcsNyArMjkwLDcgQEAKIAlwdGVtcF9saXN0ID0gKCZwYWNrZXRfZGF0YV9oZWFkLmxpc3QpLT5uZXh0OwogCXdoaWxlICghbGlzdF9lbXB0eShwdGVtcF9saXN0KSkgewogCQluZXdwYWNrZXQgPQotCQkgICAgbGlzdF9lbnRyeShwdGVtcF9saXN0LCBzdHJ1Y3QgcGFja2V0X2RhdGEsIGxpc3QpOworCQkJbGlzdF9lbnRyeShwdGVtcF9saXN0LCBzdHJ1Y3QgcGFja2V0X2RhdGEsIGxpc3QpOwogCQlwbmV4dF9saXN0ID0gcHRlbXBfbGlzdC0+bmV4dDsKIAkJbGlzdF9kZWwocHRlbXBfbGlzdCk7CiAJCXB0ZW1wX2xpc3QgPSBwbmV4dF9saXN0OwpAQCAtMjk2LDggKzI5OSw4IEBACiAJCSAqIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3RhbGUgUkJVIHBhY2tldHMgbGVmdCBpbiBtZW1vcnkKIAkJICovCiAJCW1lbXNldChuZXdwYWNrZXQtPmRhdGEsIDAsIHJidV9kYXRhLnBhY2tldHNpemUpOwotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW5ld3BhY2tldC0+ZGF0YSwKLQkJCSAgIG5ld3BhY2tldC0+b3JkZXJudW0pOworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBuZXdwYWNrZXQtPmRhdGEsCisJCQluZXdwYWNrZXQtPm9yZGVybnVtKTsKIAkJa2ZyZWUobmV3cGFja2V0KTsKIAl9CiAJcmJ1X2RhdGEucGFja2V0X3dyaXRlX2NvdW50ID0gMDsKQEAgLTMxOSwxNCArMzIyLDEzIEBACiAJICogQklPUyBpbWFnZSBjb3BpZWQgaW4gbWVtb3J5LgogCSAqLwogCW1lbXNldChyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyLCAwLAotCSAgICAgICByYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyX3NpemUpOworCQlyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyX3NpemUpOwogCWlmIChyYnVfZGF0YS5kbWFfYWxsb2MgPT0gMSkKIAkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgcmJ1X2RhdGEuYmlvc19pbWFnZV9zaXplLAotCQkJCSAgcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciwKLQkJCQkgIGRlbGxfcmJ1X2RtYWFkZHIpOworCQkJcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciwgZGVsbF9yYnVfZG1hYWRkcik7CiAJZWxzZQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXIsCi0JCQkgICByYnVfZGF0YS5pbWFnZV91cGRhdGVfb3JkZXJudW0pOworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSByYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyLAorCQkJcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX29yZGVybnVtKTsKIAogCS8qCiAJICogUmUtaW5pdGlhbGl6ZSB0aGUgcmJ1X2RhdGEgdmFyaWFibGVzIGFmdGVyIGEgZnJlZQpAQCAtMzY2LDcgKzM2OCw3IEBACiAJCSAqLwogCQlpZiAoKHNpemUgIT0gMCkgJiYgKHJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXIgPT0gTlVMTCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZGVsbF9yYnU6JXM6IGNvcnJ1cHRpb24gIgotCQkJICAgICAgICJjaGVjayBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJImNoZWNrIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qCkBAIC0zODUsMTcgKzM4NywxNiBAQAogCiAJb3JkZXJudW0gPSBnZXRfb3JkZXIoc2l6ZSk7CiAJaW1hZ2VfdXBkYXRlX2J1ZmZlciA9Ci0JICAgICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBvcmRlcm51bSk7CisJCSh1bnNpZ25lZCBjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXJudW0pOwogCiAJaW1nX2J1Zl9waHlzX2FkZHIgPQotCSAgICAodW5zaWduZWQgbG9uZyl2aXJ0X3RvX3BoeXMoaW1hZ2VfdXBkYXRlX2J1ZmZlcik7CisJCSh1bnNpZ25lZCBsb25nKSB2aXJ0X3RvX3BoeXMoaW1hZ2VfdXBkYXRlX2J1ZmZlcik7CiAKIAlpZiAoaW1nX2J1Zl9waHlzX2FkZHIgPiBCSU9TX1NDQU5fTElNSVQpIHsKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylpbWFnZV91cGRhdGVfYnVmZmVyLCBvcmRlcm51bSk7CisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGltYWdlX3VwZGF0ZV9idWZmZXIsIG9yZGVybnVtKTsKIAkJb3JkZXJudW0gPSAtMTsKIAkJaW1hZ2VfdXBkYXRlX2J1ZmZlciA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBzaXplLAotCQkJCQkJCSAmZGVsbF9yYnVfZG1hYWRkciwKLQkJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCQkmZGVsbF9yYnVfZG1hYWRkciwgR0ZQX0tFUk5FTCk7CiAJCWRtYV9hbGxvYyA9IDE7CiAJfQogCkBAIC00MDUsMTMgKzQwNiwxMyBAQAogCQlyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyID0gaW1hZ2VfdXBkYXRlX2J1ZmZlcjsKIAkJcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlcl9zaXplID0gc2l6ZTsKIAkJcmJ1X2RhdGEuYmlvc19pbWFnZV9zaXplID0KLQkJICAgIHJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXJfc2l6ZTsKKwkJCXJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXJfc2l6ZTsKIAkJcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX29yZGVybnVtID0gb3JkZXJudW07CiAJCXJidV9kYXRhLmRtYV9hbGxvYyA9IGRtYV9hbGxvYzsKIAkJcmMgPSAwOwogCX0gZWxzZSB7CiAJCXByX2RlYnVnKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgaW1hZ2UgdXBkYXRlOiIKLQkJCSAic2l6ZSA9ICVsZFxuIiwgc2l6ZSk7CisJCQkic2l6ZSA9ICVsZFxuIiwgc2l6ZSk7CiAJCXJjID0gLUVOT01FTTsKIAl9CiAKQEAgLTQzOCw3ICs0MzksNyBAQAogCWlmIChwb3MgPiBpbWFnZXNpemUpIHsKIAkJcmV0dmFsID0gMDsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGVsbF9yYnU6cmVhZF9wYWNrZXRfZGF0YTogIgotCQkgICAgICAgImRhdGEgdW5kZXJydW5cbiIpOworCQkJImRhdGEgdW5kZXJydW5cbiIpOwogCQlnb3RvIHJlYWRfcmJ1X2RhdGFfZXhpdDsKIAl9CiAKQEAgLTQ2OCwxMSArNDY5LDExIEBACiAKIAkvKiBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gcmV0dXJuICovCiAJaWYgKChyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyID09IE5VTEwpIHx8Ci0JICAgIChyYnVfZGF0YS5iaW9zX2ltYWdlX3NpemUgPT0gMCkpIHsKKwkJKHJidV9kYXRhLmJpb3NfaW1hZ2Vfc2l6ZSA9PSAwKSkgewogCQlwcl9kZWJ1ZygicmVhZF9yYnVfZGF0YV9tb25vOiBpbWFnZV91cGRhdGVfYnVmZmVyICVwICwiCi0JCQkgImJpb3NfaW1hZ2Vfc2l6ZSAlbHVcbiIsCi0JCQkgcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciwKLQkJCSByYnVfZGF0YS5iaW9zX2ltYWdlX3NpemUpOworCQkJImJpb3NfaW1hZ2Vfc2l6ZSAlbHVcbiIsCisJCQlyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyLAorCQkJcmJ1X2RhdGEuYmlvc19pbWFnZV9zaXplKTsKIAkJcmV0X2NvdW50ID0gLUVOT01FTTsKIAkJZ290byByZWFkX3JidV9kYXRhX2V4aXQ7CiAJfQpAQCAtNDk3LDggKzQ5OCw4IEBACiAJcmV0dXJuIHJldF9jb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXJlYWRfcmJ1X2RhdGEoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZmZlciwgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgcmVhZF9yYnVfZGF0YShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmZmVyLAorCQkJbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQogewogCXNzaXplX3QgcmV0X2NvdW50ID0gMDsKIApAQCAtNTE1LDYyICs1MTYsMjAgQEAKIAlyZXR1cm4gcmV0X2NvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdAotcmVhZF9yYnVfaW1hZ2VfdHlwZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmZmVyLCBsb2ZmX3QgcG9zLAotCQkgICAgc2l6ZV90IGNvdW50KQotewotCWludCBzaXplID0gMDsKLQlpZiAoIXBvcykKLQkJc2l6ZSA9IHNwcmludGYoYnVmZmVyLCAiJXNcbiIsIGltYWdlX3R5cGUpOwotCXJldHVybiBzaXplOwotfQotCi1zdGF0aWMgc3NpemVfdAotd3JpdGVfcmJ1X2ltYWdlX3R5cGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZmZlciwgbG9mZl90IHBvcywKLQkJICAgICBzaXplX3QgY291bnQpCi17Ci0JaW50IHJjID0gY291bnQ7Ci0Jc3Bpbl9sb2NrKCZyYnVfZGF0YS5sb2NrKTsKLQotCWlmIChzdHJsZW4oYnVmZmVyKSA8IE1BWF9JTUFHRV9MRU5HVEgpCi0JCXNzY2FuZihidWZmZXIsICIlcyIsIGltYWdlX3R5cGUpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGVsbF9yYnU6IGltYWdlX3R5cGUgaXMgaW52YWxpZCIKLQkJICAgICAgICJtYXggY2hhcnMgPSAlZCwgXG4gaW5jb21pbmcgc3RyLS0lcy0tIFxuIiwKLQkJICAgICAgIE1BWF9JTUFHRV9MRU5HVEgsIGJ1ZmZlcik7Ci0KLQkvKiB3ZSBtdXN0IGZyZWUgYWxsIHByZXZpb3VzIGFsbG9jYXRpb25zICovCi0JcGFja2V0X2VtcHR5X2xpc3QoKTsKLQlpbWdfdXBkYXRlX2ZyZWUoKTsKLQotCXNwaW5fdW5sb2NrKCZyYnVfZGF0YS5sb2NrKTsKLQlyZXR1cm4gcmM7Ci0KLX0KLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHJidV9kYXRhX2F0dHIgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiZGF0YSIsLm93bmVyID0gVEhJU19NT0RVTEUsLm1vZGUgPSAwNDQ0fSwKLQkucmVhZCA9IHJlYWRfcmJ1X2RhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgcmJ1X2ltYWdlX3R5cGVfYXR0ciA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJpbWFnZV90eXBlIiwub3duZXIgPSBUSElTX01PRFVMRSwubW9kZSA9IDA2NDR9LAotCS5yZWFkID0gcmVhZF9yYnVfaW1hZ2VfdHlwZSwKLQkud3JpdGUgPSB3cml0ZV9yYnVfaW1hZ2VfdHlwZSwKLX07Ci0KIHN0YXRpYyB2b2lkIGNhbGxiYWNrZm5fcmJ1KGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCiB7CiAJaW50IHJjID0gMDsKIAotCWlmICghZncgfHwgIWZ3LT5zaXplKQorCWlmICghZncgfHwgIWZ3LT5zaXplKSB7CisJCXJidV9kYXRhLmVudHJ5X2NyZWF0ZWQgPSAwOwogCQlyZXR1cm47CisJfQogCiAJc3Bpbl9sb2NrKCZyYnVfZGF0YS5sb2NrKTsKIAlpZiAoIXN0cmNtcChpbWFnZV90eXBlLCAibW9ubyIpKSB7CiAJCWlmICghaW1nX3VwZGF0ZV9yZWFsbG9jKGZ3LT5zaXplKSkKIAkJCW1lbWNweShyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyLAotCQkJICAgICAgIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJCQkJZnctPmRhdGEsIGZ3LT5zaXplKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoaW1hZ2VfdHlwZSwgInBhY2tldCIpKSB7CiAJCWlmICghcmJ1X2RhdGEucGFja2V0c2l6ZSkKIAkJCXJidV9kYXRhLnBhY2tldHNpemUgPSBmdy0+c2l6ZTsKQEAgLTU4NCwxNCArNTQzLDEwMyBAQAogCXNwaW5fdW5sb2NrKCZyYnVfZGF0YS5sb2NrKTsKIAogCXJjID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIEZXX0FDVElPTl9OT0hPVFBMVUcsCi0JCQkJICAgICAiZGVsbF9yYnUiLCAmcmJ1X2RldmljZS0+ZGV2LAotCQkJCSAgICAgJmNvbnRleHQsIGNhbGxiYWNrZm5fcmJ1KTsKKwkJImRlbGxfcmJ1IiwgJnJidV9kZXZpY2UtPmRldiwgJmNvbnRleHQsIGNhbGxiYWNrZm5fcmJ1KTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImRlbGxfcmJ1OiVzIHJlcXVlc3RfZmlybXdhcmVfbm93YWl0IGZhaWxlZCIKLQkJICAgICAgICIgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOworCQkJImRlbGxfcmJ1OiVzIHJlcXVlc3RfZmlybXdhcmVfbm93YWl0IGZhaWxlZCIKKwkJCSIgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOworCWVsc2UKKwkJcmJ1X2RhdGEuZW50cnlfY3JlYXRlZCA9IDE7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHJlYWRfcmJ1X2ltYWdlX3R5cGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZmZlciwKKwkJCWxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgc2l6ZSA9IDA7CisJaWYgKCFwb3MpCisJCXNpemUgPSBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBpbWFnZV90eXBlKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfcmJ1X2ltYWdlX3R5cGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZmZlciwKKwkJCWxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgcmMgPSBjb3VudDsKKwlpbnQgcmVxX2Zpcm1fcmMgPSAwOworCWludCBpOworCXNwaW5fbG9jaygmcmJ1X2RhdGEubG9jayk7CisJLyoKKwkgKiBGaW5kIHRoZSBmaXJzdCBuZXdsaW5lIG9yIHNwYWNlCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCWlmIChidWZmZXJbaV0gPT0gJ1xuJyB8fCBidWZmZXJbaV0gPT0gJyAnKSB7CisJCQlidWZmZXJbaV0gPSAnXDAnOworCQkJYnJlYWs7CisJCX0KKwlpZiAoaSA9PSBjb3VudCkKKwkJYnVmZmVyW2NvdW50XSA9ICdcMCc7CisKKwlpZiAoc3Ryc3RyKGJ1ZmZlciwgIm1vbm8iKSkKKwkJc3RyY3B5KGltYWdlX3R5cGUsICJtb25vIik7CisJZWxzZSBpZiAoc3Ryc3RyKGJ1ZmZlciwgInBhY2tldCIpKQorCQlzdHJjcHkoaW1hZ2VfdHlwZSwgInBhY2tldCIpOworCWVsc2UgaWYgKHN0cnN0cihidWZmZXIsICJpbml0IikpIHsKKwkJLyoKKwkJICogSWYgZHVlIHRvIHRoZSB1c2VyIGVycm9yIHRoZSBkcml2ZXIgZ2V0cyBpbiBhIGJhZAorCQkgKiBzdGF0ZSB3aGVyZSBldmVuIHRob3VnaCBpdCBpcyBsb2FkZWQgLCB0aGUKKwkJICogL3N5cy9jbGFzcy9maXJtd2FyZS9kZWxsX3JidSBlbnRyaWVzIGFyZSBtaXNzaW5nLgorCQkgKiB0byBjb3ZlciB0aGlzIHNpdHVhdGlvbiB0aGUgdXNlciBjYW4gcmVjcmVhdGUgZW50cmllcworCQkgKiBieSB3cml0aW5nIGluaXQgdG8gaW1hZ2VfdHlwZS4KKwkJICovCisJCWlmICghcmJ1X2RhdGEuZW50cnlfY3JlYXRlZCkgeworCQkJc3Bpbl91bmxvY2soJnJidV9kYXRhLmxvY2spOworCQkJcmVxX2Zpcm1fcmMgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwKKwkJCQlGV19BQ1RJT05fTk9IT1RQTFVHLCAiZGVsbF9yYnUiLAorCQkJCSZyYnVfZGV2aWNlLT5kZXYsICZjb250ZXh0LAorCQkJCWNhbGxiYWNrZm5fcmJ1KTsKKwkJCWlmIChyZXFfZmlybV9yYykgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiZGVsbF9yYnU6JXMgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQiCisJCQkJCSIgZmFpbGVkICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJCQlyYyA9IC1FSU87CisJCQl9IGVsc2UKKwkJCQlyYnVfZGF0YS5lbnRyeV9jcmVhdGVkID0gMTsKKworCQkJc3Bpbl9sb2NrKCZyYnVfZGF0YS5sb2NrKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImRlbGxfcmJ1OiBpbWFnZV90eXBlIGlzIGludmFsaWRcbiIpOworCQlzcGluX3VubG9jaygmcmJ1X2RhdGEubG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHdlIG11c3QgZnJlZSBhbGwgcHJldmlvdXMgYWxsb2NhdGlvbnMgKi8KKwlwYWNrZXRfZW1wdHlfbGlzdCgpOworCWltZ191cGRhdGVfZnJlZSgpOworCXNwaW5fdW5sb2NrKCZyYnVfZGF0YS5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHJidV9kYXRhX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gImRhdGEiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm1vZGUgPSAwNDQ0LAorCX0sCisJLnJlYWQgPSByZWFkX3JidV9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHJidV9pbWFnZV90eXBlX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gImltYWdlX3R5cGUiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm1vZGUgPSAwNjQ0LAorCX0sCisJLnJlYWQgPSByZWFkX3JidV9pbWFnZV90eXBlLAorCS53cml0ZSA9IHdyaXRlX3JidV9pbWFnZV90eXBlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZGNkcmJ1X2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSAwOwpAQCAtNTk5LDExICs2NDcsMTEgQEAKIAogCWluaXRfcGFja2V0X2hlYWQoKTsKIAlyYnVfZGV2aWNlID0KLQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZGVsbF9yYnUiLCAtMSwgTlVMTCwgMCk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImRlbGxfcmJ1IiwgLTEsIE5VTEwsIDApOwogCWlmICghcmJ1X2RldmljZSkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJkZWxsX3JidTolczpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlICIKLQkJICAgICAgICJmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkiZGVsbF9yYnU6JXM6cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSAiCisJCQkiZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTYxMSwxMSArNjU5LDEyIEBACiAJc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZyYnVfZGV2aWNlLT5kZXYua29iaiwgJnJidV9pbWFnZV90eXBlX2F0dHIpOwogCiAJcmMgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgRldfQUNUSU9OX05PSE9UUExVRywKLQkJCQkgICAgICJkZWxsX3JidSIsICZyYnVfZGV2aWNlLT5kZXYsCi0JCQkJICAgICAmY29udGV4dCwgY2FsbGJhY2tmbl9yYnUpOworCQkiZGVsbF9yYnUiLCAmcmJ1X2RldmljZS0+ZGV2LCAmY29udGV4dCwgY2FsbGJhY2tmbl9yYnUpOwogCWlmIChyYykKIAkJcHJpbnRrKEtFUk5fRVJSICJkZWxsX3JidTolczpyZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCIKLQkJICAgICAgICIgZmFpbGVkICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJCSIgZmFpbGVkICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwllbHNlCisJCXJidV9kYXRhLmVudHJ5X2NyZWF0ZWQgPSAxOwogCiAJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggZWFlYmZjMS4uNGM1NjQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtNSwxMCArNSwxMCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEplc3BlciBKdWhsIDxqZXNwZXIuanVobEBnbWFpbC5jb20+CiAgKgogICogVGhlIEhhcmREaXNrIEFjdGl2ZSBQcm90ZWN0aW9uIFN5c3RlbSAoaGRhcHMpIGlzIHByZXNlbnQgaW4gdGhlIElCTSBUaGlua1BhZAotICogVDQxLCBUNDIsIFQ0MywgUjUxLCBhbmQgWDQwLCBhdCBsZWFzdC4gIEl0IHByb3ZpZGVzIGEgYmFzaWMgdHdvLWF4aXMKLSAqIGFjY2VsZXJvbWV0ZXIgYW5kIG90aGVyIGRhdGEsIHN1Y2ggYXMgdGhlIGRldmljZSdzIHRlbXBlcmF0dXJlLgorICogVDQxLCBUNDIsIFQ0MywgUjUwLCBSNTBwLCBSNTEsIGFuZCBYNDAsIGF0IGxlYXN0LiAgSXQgcHJvdmlkZXMgYSBiYXNpYworICogdHdvLWF4aXMgYWNjZWxlcm9tZXRlciBhbmQgb3RoZXIgZGF0YSwgc3VjaCBhcyB0aGUgZGV2aWNlJ3MgdGVtcGVyYXR1cmUuCiAgKgotICogQmFzZWQgb24gdGhlIGRvY3VtZW50IGJ5IE1hcmsgQS4gU21pdGggYXZhaWxhYmxlIGF0CisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgZG9jdW1lbnQgYnkgTWFyayBBLiBTbWl0aCBhdmFpbGFibGUgYXQKICAqIGh0dHA6Ly93d3cuYWxtYWRlbi5pYm0uY29tL2NzL3Blb3BsZS9tYXJrc21pdGgvdHBhcHMuaHRtbCBhbmQgYSBsb3Qgb2YgdHJpYWwKICAqIGFuZCBlcnJvci4KICAqCkBAIC0zNiwxMiArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIEhEQVBTX0xPV19QT1JUCQkweDE2MDAJLyogZmlyc3QgcG9ydCB1c2VkIGJ5IGhkYXBzICovCi0jZGVmaW5lIEhEQVBTX05SX1BPUlRTCQkweDMwCS8qIDB4MTYwMCAtIDB4MTYyZiAqLwotCi0jZGVmaW5lIFNUQVRFX0ZSRVNICQkweDUwCS8qIGFjY2VsZXJvbWV0ZXIgZGF0YSBpcyBmcmVzaCAqLwotCi0jZGVmaW5lIFJFRlJFU0hfQVNZTkMJCTB4MDAJLyogZG8gYXN5bmNocm9ub3VzIHJlZnJlc2ggKi8KLSNkZWZpbmUgUkVGUkVTSF9TWU5DCQkweDAxCS8qIGRvIHN5bmNocm9ub3VzIHJlZnJlc2ggKi8KKyNkZWZpbmUgSERBUFNfTlJfUE9SVFMJCTB4MzAJLyogbnVtYmVyIG9mIHBvcnRzOiAweDE2MDAgLSAweDE2MmYgKi8KIAogI2RlZmluZSBIREFQU19QT1JUX1NUQVRFCTB4MTYxMQkvKiBkZXZpY2Ugc3RhdGUgKi8KICNkZWZpbmUgSERBUFNfUE9SVF9ZUE9TCQkweDE2MTIJLyogeS1heGlzIHBvc2l0aW9uICovCkBAIC01Myw3ICs0OCw3IEBACiAjZGVmaW5lIEhEQVBTX1BPUlRfVU5LTk9XTgkweDE2MWMJLyogd2hhdCBpcyB0aGlzPyAqLwogI2RlZmluZSBIREFQU19QT1JUX0tNQUNUCTB4MTYxZAkvKiBrZXlib2FyZCBvciBtb3VzZSBhY3Rpdml0eSAqLwogCi0jZGVmaW5lIEhEQVBTX1JFQURfTUFTSwkJMHhmZgkvKiBzb21lIHJlYWRzIGhhdmUgdGhlIGxvdyA4IGJpdHMgc2V0ICovCisjZGVmaW5lIFNUQVRFX0ZSRVNICQkweDUwCS8qIGFjY2VsZXJvbWV0ZXIgZGF0YSBpcyBmcmVzaCAqLwogCiAjZGVmaW5lIEtFWUJEX01BU0sJCTB4MjAJLyogc2V0IGlmIGtleWJvYXJkIGFjdGl2aXR5ICovCiAjZGVmaW5lIE1PVVNFX01BU0sJCTB4NDAJLyogc2V0IGlmIG1vdXNlIGFjdGl2aXR5ICovCkBAIC02MywxMiArNTgsMTEgQEAKICNkZWZpbmUgSU5JVF9USU1FT1VUX01TRUNTCTQwMDAJLyogd2FpdCB1cCB0byA0cyBmb3IgZGV2aWNlIGluaXQgLi4uICovCiAjZGVmaW5lIElOSVRfV0FJVF9NU0VDUwkJMjAwCS8qIC4uLiBpbiAyMDBtcyBpbmNyZW1lbnRzICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owotc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgaGRhcHNfaWRldjsKKyNkZWZpbmUgSERBUFNfUE9MTF9QRVJJT0QJKEhaLzIwKQkvKiBwb2xsIGZvciBpbnB1dCBldmVyeSAxLzIwcyAqLworI2RlZmluZSBIREFQU19JTlBVVF9GVVpaCTQJLyogaW5wdXQgZXZlbnQgdGhyZXNob2xkICovCisKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoZGFwc190aW1lcjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGRhcHNfbW91c2VkZXZfdGhyZXNob2xkID0gNDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhkYXBzX3BvbGxfbXMgPSA1MDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGRhcHNfbW91c2VkZXY7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGRhcHNfaW52ZXJ0Owogc3RhdGljIHU4IGttX2FjdGl2aXR5Owogc3RhdGljIGludCByZXN0X3g7CkBAIC04MSwxNCArNzUsMTQgQEAKICAqLwogc3RhdGljIGlubGluZSB1OCBfX2dldF9sYXRjaCh1MTYgcG9ydCkKIHsKLQlyZXR1cm4gaW5iKHBvcnQpICYgSERBUFNfUkVBRF9NQVNLOworCXJldHVybiBpbmIocG9ydCkgJiAweGZmOwogfQogCiAvKgotICogX19jaGVja19sYXRjaCAtIENoZWNrIGEgcG9ydCBsYXRjaCBmb3IgYSBnaXZlbiB2YWx1ZS4gIENhbGxlcnMgbXVzdCBob2xkCi0gKiBoZGFwc19zZW0uICBSZXR1cm5zIHplcm8gaWYgdGhlIHBvcnQgY29udGFpbnMgdGhlIGdpdmVuIHZhbHVlLgorICogX19jaGVja19sYXRjaCAtIENoZWNrIGEgcG9ydCBsYXRjaCBmb3IgYSBnaXZlbiB2YWx1ZS4gIFJldHVybnMgemVybyBpZiB0aGUKKyAqIHBvcnQgY29udGFpbnMgdGhlIGdpdmVuIHZhbHVlLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2NoZWNrX2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCitzdGF0aWMgaW5saW5lIGludCBfX2NoZWNrX2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCiB7CiAJaWYgKF9fZ2V0X2xhdGNoKHBvcnQpID09IHZhbCkKIAkJcmV0dXJuIDA7CkBAIC05OSw3ICs5Myw3IEBACiAgKiBfX3dhaXRfbGF0Y2ggLSBXYWl0IHVwIHRvIDEwMHVzIGZvciBhIHBvcnQgbGF0Y2ggdG8gZ2V0IGEgY2VydGFpbiB2YWx1ZSwKICAqIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX3dhaXRfbGF0Y2godTE2IHBvcnQsIHU4IHZhbCkKK3N0YXRpYyBpbnQgX193YWl0X2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTEwOSw1OSArMTAzLDQyIEBACiAJCXVkZWxheSg1KTsKIAl9CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVJTzsKIH0KIAogLyoKLSAqIF9fZGV2aWNlX3JlZnJlc2ggLSBSZXF1ZXN0IGEgcmVmcmVzaCBmcm9tIHRoZSBhY2NlbGVyb21ldGVyLgotICoKLSAqIElmIHN5bmMgaXMgUkVGUkVTSF9TWU5DLCB3ZSBwZXJmb3JtIGEgc3luY2hyb25vdXMgcmVmcmVzaCBhbmQgd2lsbCB3YWl0LgotICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwgYW5kIG5vbnplcm8gb24gZXJyb3IuCi0gKgotICogSWYgc3luYyBpcyBSRUZSRVNIX0FTWU5DLCB3ZSBtZXJlbHkga2ljayBvZmYgYSBuZXcgcmVmcmVzaCBpZiB0aGUgZGV2aWNlIGlzCi0gKiBub3QgdXAtdG8tZGF0ZS4gIEFsd2F5cyByZXR1cm5zIHplcm8uCi0gKgotICogQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgorICogX19kZXZpY2VfcmVmcmVzaCAtIHJlcXVlc3QgYSByZWZyZXNoIGZyb20gdGhlIGFjY2VsZXJvbWV0ZXIuICBEb2VzIG5vdCB3YWl0CisgKiBmb3IgcmVmcmVzaCB0byBjb21wbGV0ZS4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwotc3RhdGljIGludCBfX2RldmljZV9yZWZyZXNoKHVuc2lnbmVkIGludCBzeW5jKQorc3RhdGljIHZvaWQgX19kZXZpY2VfcmVmcmVzaCh2b2lkKQogewotCXU4IHN0YXRlOworCXVkZWxheSgyMDApOworCWlmIChpbmIoMHgxNjA0KSAhPSBTVEFURV9GUkVTSCkgeworCQlvdXRiKDB4MTEsIDB4MTYxMCk7CisJCW91dGIoMHgwMSwgMHgxNjFmKTsKKwl9Cit9CiAKLQl1ZGVsYXkoMTAwKTsKLQotCXN0YXRlID0gaW5iKDB4MTYwNCk7Ci0JaWYgKHN0YXRlID09IFNUQVRFX0ZSRVNIKQotCQlyZXR1cm4gMDsKLQotCW91dGIoMHgxMSwgMHgxNjEwKTsKLQlvdXRiKDB4MDEsIDB4MTYxZik7Ci0JaWYgKHN5bmMgPT0gUkVGUkVTSF9BU1lOQykKLQkJcmV0dXJuIDA7Ci0KKy8qCisgKiBfX2RldmljZV9yZWZyZXNoX3N5bmMgLSByZXF1ZXN0IGEgc3luY2hyb25vdXMgcmVmcmVzaCBmcm9tIHRoZQorICogYWNjZWxlcm9tZXRlci4gIFdlIHdhaXQgZm9yIHRoZSByZWZyZXNoIHRvIGNvbXBsZXRlLiAgUmV0dXJucyB6ZXJvIGlmCisgKiBzdWNjZXNzZnVsIGFuZCBub256ZXJvIG9uIGVycm9yLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgorICovCitzdGF0aWMgaW50IF9fZGV2aWNlX3JlZnJlc2hfc3luYyh2b2lkKQoreworCV9fZGV2aWNlX3JlZnJlc2goKTsKIAlyZXR1cm4gX193YWl0X2xhdGNoKDB4MTYwNCwgU1RBVEVfRlJFU0gpOwogfQogCiAvKgotICogX19kZXZpY2VfY29tcGxldGUgLSBJbmRpY2F0ZSB0byB0aGUgYWNjZWxlcm9tZXRlciB0aGF0IHdlIGFyZSBkb25lIHJlYWRpbmcKKyAqIF9fZGV2aWNlX2NvbXBsZXRlIC0gaW5kaWNhdGUgdG8gdGhlIGFjY2VsZXJvbWV0ZXIgdGhhdCB3ZSBhcmUgZG9uZSByZWFkaW5nCiAgKiBkYXRhLCBhbmQgdGhlbiBpbml0aWF0ZSBhbiBhc3luYyByZWZyZXNoLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZpY2VfY29tcGxldGUodm9pZCkKIHsKIAlpbmIoMHgxNjFmKTsKIAlpbmIoMHgxNjA0KTsKLQlfX2RldmljZV9yZWZyZXNoKFJFRlJFU0hfQVNZTkMpOwotfQotCi1zdGF0aWMgaW50IF9faGRhcHNfcmVhZGJfb25lKHVuc2lnbmVkIGludCBwb3J0LCB1OCAqdmFsKQotewotCS8qIGRvIGEgc3luYyByZWZyZXNoIC0tIHdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIHJlYWQgZnJlc2ggZGF0YSAqLwotCWlmIChfX2RldmljZV9yZWZyZXNoKFJFRlJFU0hfU1lOQykpCi0JCXJldHVybiAtRUlPOwotCi0JKnZhbCA9IGluYihwb3J0KTsKLQlfX2RldmljZV9jb21wbGV0ZSgpOwotCi0JcmV0dXJuIDA7CisJX19kZXZpY2VfcmVmcmVzaCgpOwogfQogCiAvKgpAQCAtMTc0LDE3ICsxNTEsMjYgQEAKIAlpbnQgcmV0OwogCiAJZG93bigmaGRhcHNfc2VtKTsKLQlyZXQgPSBfX2hkYXBzX3JlYWRiX29uZShwb3J0LCB2YWwpOwotCXVwKCZoZGFwc19zZW0pOwogCisJLyogZG8gYSBzeW5jIHJlZnJlc2ggLS0gd2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2UgcmVhZCBmcmVzaCBkYXRhICovCisJcmV0ID0gX19kZXZpY2VfcmVmcmVzaF9zeW5jKCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkqdmFsID0gaW5iKHBvcnQpOworCV9fZGV2aWNlX2NvbXBsZXRlKCk7CisKK291dDoKKwl1cCgmaGRhcHNfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCisvKiBfX2hkYXBzX3JlYWRfcGFpciAtIGludGVybmFsIGxvY2tsZXNzIGhlbHBlciBmb3IgaGRhcHNfcmVhZF9wYWlyKCkuICovCiBzdGF0aWMgaW50IF9faGRhcHNfcmVhZF9wYWlyKHVuc2lnbmVkIGludCBwb3J0MSwgdW5zaWduZWQgaW50IHBvcnQyLAogCQkJICAgICBpbnQgKngsIGludCAqeSkKIHsKIAkvKiBkbyBhIHN5bmMgcmVmcmVzaCAtLSB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB3ZSByZWFkIGZyZXNoIGRhdGEgKi8KLQlpZiAoX19kZXZpY2VfcmVmcmVzaChSRUZSRVNIX1NZTkMpKQorCWlmIChfX2RldmljZV9yZWZyZXNoX3N5bmMoKSkKIAkJcmV0dXJuIC1FSU87CiAKIAkqeSA9IGludyhwb3J0Mik7CkBAIC0yMTcsMTEgKzIwMywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIGluaXRpYWxpemUgdGhlIGFjY2VsZXJvbWV0ZXIgKi8KKy8qCisgKiBoZGFwc19kZXZpY2VfaW5pdCAtIGluaXRpYWxpemUgdGhlIGFjY2VsZXJvbWV0ZXIuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcworICogYW5kIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gIENhbiBzbGVlcC4KKyAqLwogc3RhdGljIGludCBoZGFwc19kZXZpY2VfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCB0b3RhbF9tc2VjcyA9IElOSVRfVElNRU9VVF9NU0VDUzsKLQlpbnQgcmV0ID0gLUVOWElPOworCWludCB0b3RhbCwgcmV0ID0gLUVOWElPOwogCiAJZG93bigmaGRhcHNfc2VtKTsKIApAQCAtMjMxLDggKzIxOSwxMCBAQAogCQlnb3RvIG91dDsKIAogCS8qCi0JICogVGhlIDB4MDMgdmFsdWUgYXBwZWFycyB0byBvbmx5IHdvcmsgb24gc29tZSB0aGlua3BhZHMsIHN1Y2ggYXMgdGhlCi0JICogVDQycC4gIE90aGVycyByZXR1cm4gMHgwMS4KKwkgKiBNb3N0IFRoaW5rUGFkcyByZXR1cm4gMHgwMS4KKwkgKgorCSAqIE90aGVycy0tbmFtZWx5IHRoZSBSNTBwLCBUNDFwLCBhbmQgVDQycC0tcmV0dXJuIDB4MDMuICBUaGVzZSBsYXB0b3BzCisJICogaGF2ZSAiaW52ZXJ0ZWQiIGF4aXNlcy4KIAkgKgogCSAqIFRoZSAweDAyIHZhbHVlIG9jY3VycyB3aGVuIHRoZSBjaGlwIGhhcyBiZWVuIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQuCiAJICovCkBAIC0yNjcsMjQgKzI1NywyMyBAQAogCW91dGIoMHgwMSwgMHgxNjFmKTsKIAlpZiAoX193YWl0X2xhdGNoKDB4MTYxZiwgMHgwMCkpCiAJCWdvdG8gb3V0OwotCWlmIChfX2RldmljZV9yZWZyZXNoKFJFRlJFU0hfU1lOQykpCisJaWYgKF9fZGV2aWNlX3JlZnJlc2hfc3luYygpKQogCQlnb3RvIG91dDsKIAlpZiAoX193YWl0X2xhdGNoKDB4MTYxMSwgMHgwMCkpCiAJCWdvdG8gb3V0OwogCiAJLyogd2UgaGF2ZSBkb25lIG91ciBkYW5jZSwgbm93IGxldCdzIHdhaXQgZm9yIHRoZSBhcHBsYXVzZSAqLwotCXdoaWxlICh0b3RhbF9tc2VjcyA+IDApIHsKLQkJdTggaWdub3JlZDsKKwlmb3IgKHRvdGFsID0gSU5JVF9USU1FT1VUX01TRUNTOyB0b3RhbCA+IDA7IHRvdGFsIC09IElOSVRfV0FJVF9NU0VDUykgeworCQlpbnQgeCwgeTsKIAogCQkvKiBhIHJlYWQgb2YgdGhlIGRldmljZSBoZWxwcyBwdXNoIGl0IGludG8gYWN0aW9uICovCi0JCV9faGRhcHNfcmVhZGJfb25lKEhEQVBTX1BPUlRfVU5LTk9XTiwgJmlnbm9yZWQpOworCQlfX2hkYXBzX3JlYWRfcGFpcihIREFQU19QT1JUX1hQT1MsIEhEQVBTX1BPUlRfWVBPUywgJngsICZ5KTsKIAkJaWYgKCFfX3dhaXRfbGF0Y2goMHgxNjExLCAweDAyKSkgewogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJbXNsZWVwKElOSVRfV0FJVF9NU0VDUyk7Ci0JCXRvdGFsX21zZWNzIC09IElOSVRfV0FJVF9NU0VDUzsKIAl9CiAKIG91dDoKQEAgLTI5Myw5NiArMjgyLDYgQEAKIH0KIAogCi0vKiBJbnB1dCBjbGFzcyBzdHVmZiAqLwotCi0vKgotICogaGRhcHNfY2FsaWJyYXRlIC0gWmVybyBvdXQgb3VyICJyZXN0aW5nIiB2YWx1ZXMuIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KLSAqLwotc3RhdGljIHZvaWQgaGRhcHNfY2FsaWJyYXRlKHZvaWQpCi17Ci0JaW50IHgsIHk7Ci0KLQlpZiAoX19oZGFwc19yZWFkX3BhaXIoSERBUFNfUE9SVF9YUE9TLCBIREFQU19QT1JUX1lQT1MsICZ4LCAmeSkpCi0JCXJldHVybjsKLQotCXJlc3RfeCA9IHg7Ci0JcmVzdF95ID0geTsKLX0KLQotc3RhdGljIHZvaWQgaGRhcHNfbW91c2VkZXZfcG9sbCh1bnNpZ25lZCBsb25nIHVudXNlZCkKLXsKLQlpbnQgeCwgeTsKLQotCS8qIENhbm5vdCBzbGVlcC4gIFRyeSBub25ibG9ja2luZ2x5LiAgSWYgd2UgZmFpbCwgdHJ5IGFnYWluIGxhdGVyLiAqLwotCWlmIChkb3duX3RyeWxvY2soJmhkYXBzX3NlbSkpIHsKLQkJbW9kX3RpbWVyKCZoZGFwc190aW1lcixqaWZmaWVzK21zZWNzX3RvX2ppZmZpZXMoaGRhcHNfcG9sbF9tcykpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKF9faGRhcHNfcmVhZF9wYWlyKEhEQVBTX1BPUlRfWFBPUywgSERBUFNfUE9SVF9ZUE9TLCAmeCwgJnkpKQotCQlnb3RvIG91dDsKLQotCXggLT0gcmVzdF94OwotCXkgLT0gcmVzdF95OwotCWlmIChhYnMoeCkgPiBoZGFwc19tb3VzZWRldl90aHJlc2hvbGQpCi0JCWlucHV0X3JlcG9ydF9yZWwoJmhkYXBzX2lkZXYsIFJFTF9YLCB4KTsKLQlpZiAoYWJzKHkpID4gaGRhcHNfbW91c2VkZXZfdGhyZXNob2xkKQotCQlpbnB1dF9yZXBvcnRfcmVsKCZoZGFwc19pZGV2LCBSRUxfWSwgeSk7Ci0JaW5wdXRfc3luYygmaGRhcHNfaWRldik7Ci0KLQltb2RfdGltZXIoJmhkYXBzX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhoZGFwc19wb2xsX21zKSk7Ci0KLW91dDoKLQl1cCgmaGRhcHNfc2VtKTsKLX0KLQotLyoKLSAqIGhkYXBzX21vdXNlZGV2X2VuYWJsZSAtIGVuYWJsZSB0aGUgaW5wdXQgY2xhc3MgZGV2aWNlLiAgQ2FuIHNsZWVwLgotICovCi1zdGF0aWMgdm9pZCBoZGFwc19tb3VzZWRldl9lbmFibGUodm9pZCkKLXsKLQlkb3duKCZoZGFwc19zZW0pOwotCi0JLyogY2FsaWJyYXRlIHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nICovCi0JaGRhcHNfY2FsaWJyYXRlKCk7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSBpbnB1dCBjbGFzcyAqLwotCWluaXRfaW5wdXRfZGV2KCZoZGFwc19pZGV2KTsKLQloZGFwc19pZGV2LmRldiA9ICZwZGV2LT5kZXY7Ci0JaGRhcHNfaWRldi5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7Ci0JaGRhcHNfaWRldi5yZWxiaXRbMF0gPSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKLQloZGFwc19pZGV2LmtleWJpdFtMT05HKEJUTl9MRUZUKV0gPSBCSVQoQlROX0xFRlQpOwotCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmaGRhcHNfaWRldik7Ci0KLQkvKiBzdGFydCB1cCBvdXIgdGltZXIgKi8KLQlpbml0X3RpbWVyKCZoZGFwc190aW1lcik7Ci0JaGRhcHNfdGltZXIuZnVuY3Rpb24gPSBoZGFwc19tb3VzZWRldl9wb2xsOwotCWhkYXBzX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhoZGFwc19wb2xsX21zKTsKLQlhZGRfdGltZXIoJmhkYXBzX3RpbWVyKTsKLQotCWhkYXBzX21vdXNlZGV2ID0gMTsKLQotCXVwKCZoZGFwc19zZW0pOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiaGRhcHM6IGlucHV0IGRldmljZSBlbmFibGVkLlxuIik7Ci19Ci0KLS8qCi0gKiBoZGFwc19tb3VzZWRldl9kaXNhYmxlIC0gZGlzYWJsZSB0aGUgaW5wdXQgY2xhc3MgZGV2aWNlLiAgQ2FsbGVyIG11c3QgaG9sZAotICogaGRhcHNfc2VtLgotICovCi1zdGF0aWMgdm9pZCBoZGFwc19tb3VzZWRldl9kaXNhYmxlKHZvaWQpCi17Ci0JZG93bigmaGRhcHNfc2VtKTsKLQlpZiAoaGRhcHNfbW91c2VkZXYpIHsKLQkJaGRhcHNfbW91c2VkZXYgPSAwOwotCQlkZWxfdGltZXJfc3luYygmaGRhcHNfdGltZXIpOwotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmaGRhcHNfaWRldik7Ci0JfQotCXVwKCZoZGFwc19zZW0pOwotfQotCi0KIC8qIERldmljZSBtb2RlbCBzdHVmZiAqLwogCiBzdGF0aWMgaW50IGhkYXBzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTQxMiw2ICszMTEsNDkgQEAKIAkucmVzdW1lID0gaGRhcHNfcmVzdW1lCiB9OwogCisvKiBJbnB1dCBjbGFzcyBzdHVmZiAqLworCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiBoZGFwc19pZGV2ID0geworCS5uYW1lID0gImhkYXBzIiwKKwkuZXZiaXQgPSB7IEJJVChFVl9BQlMpIH0sCisJLmFic2JpdCA9IHsgQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfSwKKwkuYWJzbWluICA9IHsgW0FCU19YXSA9IC0yNTYsIFtBQlNfWV0gPSAtMjU2IH0sCisJLmFic21heCAgPSB7IFtBQlNfWF0gPSAyNTYsIFtBQlNfWV0gPSAyNTYgfSwKKwkuYWJzZnV6eiA9IHsgW0FCU19YXSA9IEhEQVBTX0lOUFVUX0ZVWlosIFtBQlNfWV0gPSBIREFQU19JTlBVVF9GVVpaIH0sCisJLmFic2ZsYXQgPSB7IFtBQlNfWF0gPSBIREFQU19JTlBVVF9GVVpaLCBbQUJTX1ldID0gSERBUFNfSU5QVVRfRlVaWiB9LAorfTsKKworLyoKKyAqIGhkYXBzX2NhbGlicmF0ZSAtIFNldCBvdXIgInJlc3RpbmciIHZhbHVlcy4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqLworc3RhdGljIHZvaWQgaGRhcHNfY2FsaWJyYXRlKHZvaWQpCit7CisJX19oZGFwc19yZWFkX3BhaXIoSERBUFNfUE9SVF9YUE9TLCBIREFQU19QT1JUX1lQT1MsICZyZXN0X3gsICZyZXN0X3kpOworfQorCitzdGF0aWMgdm9pZCBoZGFwc19tb3VzZWRldl9wb2xsKHVuc2lnbmVkIGxvbmcgdW51c2VkKQoreworCWludCB4LCB5OworCisJLyogQ2Fubm90IHNsZWVwLiAgVHJ5IG5vbmJsb2NraW5nbHkuICBJZiB3ZSBmYWlsLCB0cnkgYWdhaW4gbGF0ZXIuICovCisJaWYgKGRvd25fdHJ5bG9jaygmaGRhcHNfc2VtKSkgeworCQltb2RfdGltZXIoJmhkYXBzX3RpbWVyLGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoX19oZGFwc19yZWFkX3BhaXIoSERBUFNfUE9SVF9YUE9TLCBIREFQU19QT1JUX1lQT1MsICZ4LCAmeSkpCisJCWdvdG8gb3V0OworCisJaW5wdXRfcmVwb3J0X2FicygmaGRhcHNfaWRldiwgQUJTX1gsIHggLSByZXN0X3gpOworCWlucHV0X3JlcG9ydF9hYnMoJmhkYXBzX2lkZXYsIEFCU19ZLCB5IC0gcmVzdF95KTsKKwlpbnB1dF9zeW5jKCZoZGFwc19pZGV2KTsKKworCW1vZF90aW1lcigmaGRhcHNfdGltZXIsIGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRCk7CisKK291dDoKKwl1cCgmaGRhcHNfc2VtKTsKK30KKwogCiAvKiBTeXNmcyBGaWxlcyAqLwogCkBAIC01MTcsNjkgKzQ1OSw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBoZGFwc19tb3VzZWRldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBoZGFwc19tb3VzZWRldik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGhkYXBzX21vdXNlZGV2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCBlbmFibGU7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZSkgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZW5hYmxlID09IDEpCi0JCWhkYXBzX21vdXNlZGV2X2VuYWJsZSgpOwotCWVsc2UgaWYgKGVuYWJsZSA9PSAwKQotCQloZGFwc19tb3VzZWRldl9kaXNhYmxlKCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgaGRhcHNfcG9sbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgaGRhcHNfcG9sbF9tcyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGhkYXBzX3BvbGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXVuc2lnbmVkIGludCBwb2xsOwotCi0JaWYgKHNzY2FuZihidWYsICIldSIsICZwb2xsKSAhPSAxIHx8IHBvbGwgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaGRhcHNfcG9sbF9tcyA9IHBvbGw7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGhkYXBzX3RocmVzaG9sZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgaGRhcHNfbW91c2VkZXZfdGhyZXNob2xkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgaGRhcHNfdGhyZXNob2xkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JdW5zaWduZWQgaW50IHRocmVzaG9sZDsKLQotCWlmIChzc2NhbmYoYnVmLCAiJXUiLCAmdGhyZXNob2xkKSAhPSAxIHx8IHRocmVzaG9sZCA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQloZGFwc19tb3VzZWRldl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KIHN0YXRpYyBERVZJQ0VfQVRUUihwb3NpdGlvbiwgMDQ0NCwgaGRhcHNfcG9zaXRpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodmFyaWFuY2UsIDA0NDQsIGhkYXBzX3ZhcmlhbmNlX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHRlbXAxLCAwNDQ0LCBoZGFwc190ZW1wMV9zaG93LCBOVUxMKTsKQEAgLTU4OCwxMCArNDY3LDYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihtb3VzZV9hY3Rpdml0eSwgMDQ0NCwgaGRhcHNfbW91c2VfYWN0aXZpdHlfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FsaWJyYXRlLCAwNjQ0LCBoZGFwc19jYWxpYnJhdGVfc2hvdyxoZGFwc19jYWxpYnJhdGVfc3RvcmUpOwogc3RhdGljIERFVklDRV9BVFRSKGludmVydCwgMDY0NCwgaGRhcHNfaW52ZXJ0X3Nob3csIGhkYXBzX2ludmVydF9zdG9yZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIobW91c2VkZXYsIDA2NDQsIGhkYXBzX21vdXNlZGV2X3Nob3csIGhkYXBzX21vdXNlZGV2X3N0b3JlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihtb3VzZWRldl9wb2xsX21zLCAwNjQ0LCBoZGFwc19wb2xsX3Nob3csIGhkYXBzX3BvbGxfc3RvcmUpOwotc3RhdGljIERFVklDRV9BVFRSKG1vdXNlZGV2X3RocmVzaG9sZCwgMDY0NCwgaGRhcHNfdGhyZXNob2xkX3Nob3csCi0JCSAgIGhkYXBzX3RocmVzaG9sZF9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpoZGFwc19hdHRyaWJ1dGVzW10gPSB7CiAJJmRldl9hdHRyX3Bvc2l0aW9uLmF0dHIsCkBAIC02MDEsOSArNDc2LDYgQEAKIAkmZGV2X2F0dHJfa2V5Ym9hcmRfYWN0aXZpdHkuYXR0ciwKIAkmZGV2X2F0dHJfbW91c2VfYWN0aXZpdHkuYXR0ciwKIAkmZGV2X2F0dHJfY2FsaWJyYXRlLmF0dHIsCi0JJmRldl9hdHRyX21vdXNlZGV2LmF0dHIsCi0JJmRldl9hdHRyX21vdXNlZGV2X3RocmVzaG9sZC5hdHRyLAotCSZkZXZfYXR0cl9tb3VzZWRldl9wb2xsX21zLmF0dHIsCiAJJmRldl9hdHRyX2ludmVydC5hdHRyLAogCU5VTEwsCiB9OwpAQCAtNjE5LDcgKzQ5MSw3IEBACiAgKiBYWFg6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiBub256ZXJvIGFuZCBoYWx0IHRoZSBkZXRlY3Rpb24gcHJvY2Vzcy4KICAqIEJ1dCB0aGVyZSBpcyBhIGJ1ZyBpbiBkbWlfY2hlY2tfc3lzdGVtKCkgd2hlcmUgYSBub256ZXJvIHJldHVybiBmcm9tIHRoZQogICogZmlyc3QgbWF0Y2ggd2lsbCByZXN1bHQgaW4gYSByZXR1cm4gb2YgZmFpbHVyZSBmcm9tIGRtaV9jaGVja19zeXN0ZW0oKS4KLSAqIEkgZml4ZWQgdGhpczsgdGhlIHBhdGNoIGlzIGluIDIuNi1tbS4gIE9uY2UgaW4gTGludXMncyB0cmVlIHdlIGNhbiBtYWtlCisgKiBJIGZpeGVkIHRoaXM7IHRoZSBwYXRjaCBpcyAyLjYtZ2l0LiAgT25jZSBpbiBhIHJlbGVhc2VkIHRyZWUsIHdlIGNhbiBtYWtlCiAgKiBoZGFwc19kbWlfbWF0Y2hfaW52ZXJ0KCkgcmV0dXJuIGhkYXBzX2RtaV9tYXRjaCgpLCB3aGljaCBpbiB0dXJuIHJldHVybnMgMS4KICAqLwogc3RhdGljIGludCBoZGFwc19kbWlfbWF0Y2goc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQpAQCAtNjY4LDYgKzU0MCw3IEBACiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFQ0MiIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBUNDMiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQwIiksCisJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MSBUYWJsZXQiKSwKIAkJeyAuaWRlbnQgPSBOVUxMIH0KIAl9OwogCkBAIC02OTYsOCArNTY5LDE4IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGV2aWNlOwogCi0JaWYgKGhkYXBzX21vdXNlZGV2KQotCQloZGFwc19tb3VzZWRldl9lbmFibGUoKTsKKwkvKiBpbml0aWFsIGNhbGlicmF0ZSBmb3IgdGhlIGlucHV0IGRldmljZSAqLworCWhkYXBzX2NhbGlicmF0ZSgpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgaW5wdXQgY2xhc3MgKi8KKwloZGFwc19pZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKworCS8qIHN0YXJ0IHVwIG91ciB0aW1lciBmb3IgdGhlIGlucHV0IGRldmljZSAqLworCWluaXRfdGltZXIoJmhkYXBzX3RpbWVyKTsKKwloZGFwc190aW1lci5mdW5jdGlvbiA9IGhkYXBzX21vdXNlZGV2X3BvbGw7CisJaGRhcHNfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRDsKKwlhZGRfdGltZXIoJmhkYXBzX3RpbWVyKTsKIAogCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBkcml2ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOwogCXJldHVybiAwOwpAQCAtNzE1LDggKzU5OCw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBoZGFwc19leGl0KHZvaWQpCiB7Ci0JaGRhcHNfbW91c2VkZXZfZGlzYWJsZSgpOwotCisJZGVsX3RpbWVyX3N5bmMoJmhkYXBzX3RpbWVyKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmaGRhcHNfaWRldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmhkYXBzX2F0dHJpYnV0ZV9ncm91cCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CkBAIC03MjgsOSArNjExLDYgQEAKIG1vZHVsZV9pbml0KGhkYXBzX2luaXQpOwogbW9kdWxlX2V4aXQoaGRhcHNfZXhpdCk7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChtb3VzZWRldiwgaGRhcHNfbW91c2VkZXYsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtb3VzZWRldiwgImVuYWJsZSB0aGUgaW5wdXQgY2xhc3MgZGV2aWNlIik7Ci0KIG1vZHVsZV9wYXJhbV9uYW1lZChpbnZlcnQsIGhkYXBzX2ludmVydCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGludmVydCwgImludmVydCBkYXRhIGFsb25nIGVhY2ggYXhpcyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWtleXdlc3QuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMta2V5d2VzdC5jCmluZGV4IDM3YjQ5YzIuLmVmZjU4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMta2V5d2VzdC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMta2V5d2VzdC5jCkBAIC02MTEsNyArNjExLDYgQEAKIAkKIAlmb3IgKGk9MDsgaTxuY2hhbjsgaSsrKSB7CiAJCXN0cnVjdCBrZXl3ZXN0X2NoYW4qIGNoYW4gPSAmaWZhY2UtPmNoYW5uZWxzW2ldOwotCQl1OCBhZGRyOwogCQkKIAkJc3ByaW50ZihjaGFuLT5hZGFwdGVyLm5hbWUsICIlcyAlZCIsIG5wLT5wYXJlbnQtPm5hbWUsIGkpOwogCQljaGFuLT5pZmFjZSA9IGlmYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggZmRmNTNjZS4uNDRiNTk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC05MTQsMTkgKzkxNCwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1MzIgaTJjX3B4YV9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKwogc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19weGFfYWxnb3JpdGhtID0gewotCS5uYW1lCQk9ICJQWEEtSTJDLUFsZ29yaXRobSIsCi0JLmlkCQk9IEkyQ19BTEdPX1BYQSwKIAkubWFzdGVyX3hmZXIJPSBpMmNfcHhhX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBpMmNfcHhhX2Z1bmN0aW9uYWxpdHksCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YV9pMmMgaTJjX3B4YSA9IHsKIAkubG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKIAkud2FpdAk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKGkyY19weGEud2FpdCksCiAJLmFkYXAJPSB7Ci0JCS5uYW1lCQk9ICJweGEyeHgtaTJjIiwKLQkJLmlkCQk9IEkyQ19BTEdPX1BYQSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkuYWxnbwkJPSAmaTJjX3B4YV9hbGdvcml0aG0sCisJCS5uYW1lCQk9ICJweGEyeHgtaTJjIiwKIAkJLnJldHJpZXMJPSA1LAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggYjQ0M2IwNC4uMGIwYWE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC02MDEsNDQgKzYwMSwxNSBAQAogICovCiB1OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLSNpZiAwCi0JaWYgKCFIV0lGKGRyaXZlKS0+dWRtYV9mb3VyKQorCWlmKEhXSUYoZHJpdmUpLT51ZG1hX2ZvdXIgPT0gMCkKIAkJcmV0dXJuIDA7Ci0KLQlpZiAoZHJpdmUtPmlkLT5tYWpvcl9yZXZfbnVtKSB7Ci0JCWludCBoc3NiZCA9IDA7Ci0JCWludCBpOwotCQkvKgotCQkgKiBEZXRlcm1pbmUgaGlnaGVzdCBTdXBwb3J0ZWQgU1BFQwotCQkgKi8KLQkJZm9yIChpPTE7IGk8PTE1OyBpKyspCi0JCQlpZiAoZHJpdmUtPmlkLT5tYWpvcl9yZXZfbnVtICYgKDE8PGkpKQotCQkJCWhzc2JkKys7Ci0KLQkJc3dpdGNoIChoc3NiZCkgewotCQkJY2FzZSA3OgotCQkJY2FzZSA2OgotCQkJY2FzZSA1OgotCQkvKiBBVEEtNCBhbmQgb2xkZXIgZG8gbm90IHN1cHBvcnQgYWJvdmUgVWx0cmEgMzMgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKCh1OCkgKAorCWlmICghKGRyaXZlLT5pZC0+aHdfY29uZmlnICYgMHg2MDAwKSkKKwkJcmV0dXJuIDA7CiAjaWZuZGVmIENPTkZJR19JREVETUFfSVZCCi0JCShkcml2ZS0+aWQtPmh3X2NvbmZpZyAmIDB4NDAwMCkgJiYKKwlpZighKGRyaXZlLT5pZC0+aHdfY29uZmlnICYgMHg0MDAwKSkKKwkJcmV0dXJuIDA7CiAjZW5kaWYgLyogQ09ORklHX0lERURNQV9JVkIgKi8KLQkJIChkcml2ZS0+aWQtPmh3X2NvbmZpZyAmIDB4NjAwMCkpID8gMSA6IDApOwotCi0jZWxzZQotCi0JcmV0dXJuICgodTgpICgoSFdJRihkcml2ZSktPnVkbWFfZm91cikgJiYKLSNpZm5kZWYgQ09ORklHX0lERURNQV9JVkIKLQkJCShkcml2ZS0+aWQtPmh3X2NvbmZpZyAmIDB4NDAwMCkgJiYKLSNlbmRpZiAvKiBDT05GSUdfSURFRE1BX0lWQiAqLwotCQkJKGRyaXZlLT5pZC0+aHdfY29uZmlnICYgMHg2MDAwKSkgPyAxIDogMCk7Ci0jZW5kaWYKKwlyZXR1cm4gMTsKIH0KIAogRVhQT1JUX1NZTUJPTChlaWdodHlfbmludHlfdGhyZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwppbmRleCBkMDRmNjJhLi5hY2U4ZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwpAQCAtNTAwLDYgKzUwMCw3IEBACiAJfQogCiAJcnEuc3BlY2lhbCA9IGFyZ3M7CisJYXJncy0+cnEgPSAmcnE7CiAJcmV0dXJuIGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsICZycSwgaWRlX3dhaXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKaW5kZXggM2RlOWFiOC4uM2Q5YzdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYwpAQCAtNjA4LDcgKzYwOCw3IEBACiAKICNpZmRlZiBfX2kzODZfXwogCWlmIChkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KSB7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9ST01fQUREUkVTUywgZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCB8IFBDSV9ST01fQUREUkVTU19FTkFCTEUpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0IHwgUENJX1JPTV9BRERSRVNTX0VOQUJMRSk7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBST00gZW5hYmxlZCBhdCAweCUwOGx4XG4iLCBuYW1lLCBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYwppbmRleCBiYmRlNDYyLi5iZTMzNGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAogCWlmIChjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpIHsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIFBDSV9ST01fUkVTT1VSQ0UpKSB7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfUk9NX0FERFJFU1MsCisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLAogCQkJCWRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQgfCBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFKTsKIAkJCXByaW50ayhLRVJOX0lORk8gIkhQVDM0NTogUk9NIGVuYWJsZWQgYXQgMHglMDhseFxuIiwKIAkJCQlkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IDJiZDhiMWMuLmUyMzgzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtNDEyLDggKzQxMiw4IEBACiAKIAloZHJfc2l6ZSA9IGRhdGFfb2Zmc2V0KHJtcHBfbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MpOwogCWRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWJfcm1wcF9tYWQpIC0gaGRyX3NpemU7Ci0JcGFkID0gZGF0YV9zaXplIC0gYmUzMl90b19jcHUocm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4pOwotCWlmIChwYWQgPiBkYXRhX3NpemUgfHwgcGFkIDwgMCkKKwlwYWQgPSBJQl9NR01UX1JNUFBfREFUQSAtIGJlMzJfdG9fY3B1KHJtcHBfbWFkLT5ybXBwX2hkci5wYXlsZW5fbmV3d2luKTsKKwlpZiAocGFkID4gSUJfTUdNVF9STVBQX0RBVEEgfHwgcGFkIDwgMCkKIAkJcGFkID0gMDsKIAogCXJldHVybiBoZHJfc2l6ZSArIHJtcHBfcmVjdi0+c2VnX251bSAqIGRhdGFfc2l6ZSAtIHBhZDsKQEAgLTU4Myw2ICs1ODMsNyBAQAogewogCXN0cnVjdCBpYl9ybXBwX21hZCAqcm1wcF9tYWQ7CiAJaW50IHRpbWVvdXQ7CisJdTMyIHBheWxlbjsKIAogCXJtcHBfbWFkID0gKHN0cnVjdCBpYl9ybXBwX21hZCAqKW1hZF9zZW5kX3dyLT5zZW5kX3dyLndyLnVkLm1hZF9oZHI7CiAJaWJfc2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkciwgSUJfTUdNVF9STVBQX0ZMQUdfQUNUSVZFKTsKQEAgLTU5MCwxMSArNTkxLDkgQEAKIAogCWlmIChtYWRfc2VuZF93ci0+c2VnX251bSA9PSAxKSB7CiAJCXJtcHBfbWFkLT5ybXBwX2hkci5ybXBwX3J0aW1lX2ZsYWdzIHw9IElCX01HTVRfUk1QUF9GTEFHX0ZJUlNUOwotCQlybXBwX21hZC0+cm1wcF9oZHIucGF5bGVuX25ld3dpbiA9Ci0JCQljcHVfdG9fYmUzMihtYWRfc2VuZF93ci0+dG90YWxfc2VnICoKLQkJCQkgICAgKHNpemVvZihzdHJ1Y3QgaWJfcm1wcF9tYWQpIC0KLQkJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGliX3JtcHBfbWFkLCBkYXRhKSkgLQotCQkJCSAgICBtYWRfc2VuZF93ci0+cGFkKTsKKwkJcGF5bGVuID0gbWFkX3NlbmRfd3ItPnRvdGFsX3NlZyAqIElCX01HTVRfUk1QUF9EQVRBIC0KKwkJCSBtYWRfc2VuZF93ci0+cGFkOworCQlybXBwX21hZC0+cm1wcF9oZHIucGF5bGVuX25ld3dpbiA9IGNwdV90b19iZTMyKHBheWxlbik7CiAJCW1hZF9zZW5kX3dyLT5zZ19saXN0WzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaWJfcm1wcF9tYWQpOwogCX0gZWxzZSB7CiAJCW1hZF9zZW5kX3dyLT5zZW5kX3dyLm51bV9zZ2UgPSAyOwpAQCAtNjA4LDEwICs2MDcsOCBAQAogCiAJaWYgKG1hZF9zZW5kX3dyLT5zZWdfbnVtID09IG1hZF9zZW5kX3dyLT50b3RhbF9zZWcpIHsKIAkJcm1wcF9tYWQtPnJtcHBfaGRyLnJtcHBfcnRpbWVfZmxhZ3MgfD0gSUJfTUdNVF9STVBQX0ZMQUdfTEFTVDsKLQkJcm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4gPQotCQkJY3B1X3RvX2JlMzIoc2l6ZW9mKHN0cnVjdCBpYl9ybXBwX21hZCkgLQotCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaWJfcm1wcF9tYWQsIGRhdGEpIC0KLQkJCQkgICAgbWFkX3NlbmRfd3ItPnBhZCk7CisJCXBheWxlbiA9IElCX01HTVRfUk1QUF9EQVRBIC0gbWFkX3NlbmRfd3ItPnBhZDsKKwkJcm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4gPSBjcHVfdG9fYmUzMihwYXlsZW4pOwogCX0KIAogCS8qIDIgc2Vjb25kcyBmb3IgYW4gQUNLIHVudGlsIHdlIGNhbiBmaW5kIHRoZSBwYWNrZXQgbGlmZXRpbWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCmluZGV4IDdjMmYwMzAuLmE2NGQ2YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwpAQCAtMzM0LDEwICszMzQsMTEgQEAKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9haDsKIAkJfQotCQkvKiBWYWxpZGF0ZSB0aGF0IG1hbmFnZW1lbnQgY2xhc3MgY2FuIHN1cHBvcnQgUk1QUCAqLworCisJCS8qIFZhbGlkYXRlIHRoYXQgdGhlIG1hbmFnZW1lbnQgY2xhc3MgY2FuIHN1cHBvcnQgUk1QUCAqLwogCQlpZiAocm1wcF9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fQURNKSB7CiAJCQloZHJfbGVuID0gb2Zmc2V0b2Yoc3RydWN0IGliX3NhX21hZCwgZGF0YSk7Ci0JCQlkYXRhX2xlbiA9IGxlbmd0aDsKKwkJCWRhdGFfbGVuID0gbGVuZ3RoIC0gaGRyX2xlbjsKIAkJfSBlbHNlIGlmICgocm1wcF9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA+PSBJQl9NR01UX0NMQVNTX1ZFTkRPUl9SQU5HRTJfU1RBUlQpICYmCiAJCQkgICAgKHJtcHBfbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPD0gSUJfTUdNVF9DTEFTU19WRU5ET1JfUkFOR0UyX0VORCkpIHsKIAkJCQloZHJfbGVuID0gb2Zmc2V0b2Yoc3RydWN0IGliX3ZlbmRvcl9tYWQsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwppbmRleCAxOGYwOTgxLi43ODE1MmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwpAQCAtNDc2LDEyICs0NzYsOCBAQAogCWludCBpOwogCXU4IHN0YXR1czsKIAotCS8qIE1ha2Ugc3VyZSBFUSBzaXplIGlzIGFsaWduZWQgdG8gYSBwb3dlciBvZiAyIHNpemUuICovCi0JZm9yIChpID0gMTsgaSA8IG5lbnQ7IGkgPDw9IDEpCi0JCTsgLyogbm90aGluZyAqLwotCW5lbnQgPSBpOwotCi0JZXEtPmRldiA9IGRldjsKKwllcS0+ZGV2ICA9IGRldjsKKwllcS0+bmVudCA9IHJvdW5kdXBfcG93X29mX3R3byhtYXgobmVudCwgMikpOwogCiAJZXEtPnBhZ2VfbGlzdCA9IGttYWxsb2MobnBhZ2VzICogc2l6ZW9mICplcS0+cGFnZV9saXN0LAogCQkJCUdGUF9LRVJORUwpOwpAQCAtNTEyLDcgKzUwOCw3IEBACiAJCW1lbXNldChlcS0+cGFnZV9saXN0W2ldLmJ1ZiwgMCwgUEFHRV9TSVpFKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbmVudDsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBlcS0+bmVudDsgKytpKQogCQlzZXRfZXFlX2h3KGdldF9lcWUoZXEsIGkpKTsKIAogCWVxLT5lcW4gPSBtdGhjYV9hbGxvYygmZGV2LT5lcV90YWJsZS5hbGxvYyk7CkBAIC01MjgsOCArNTI0LDYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZV9lcTsKIAotCWVxLT5uZW50ID0gbmVudDsKLQogCW1lbXNldChlcV9jb250ZXh0LCAwLCBzaXplb2YgKmVxX2NvbnRleHQpOwogCWVxX2NvbnRleHQtPmZsYWdzICAgICAgICAgICA9IGNwdV90b19iZTMyKE1USENBX0VRX1NUQVRVU19PSyAgIHwKIAkJCQkJCSAgTVRIQ0FfRVFfT1dORVJfSFcgICAgfApAQCAtNTM4LDcgKzUzMiw3IEBACiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkKIAkJZXFfY29udGV4dC0+ZmxhZ3MgIHw9IGNwdV90b19iZTMyKE1USENBX0VRX1NUQVRFX0FSQkVMKTsKIAotCWVxX2NvbnRleHQtPmxvZ3NpemVfdXNycGFnZSA9IGNwdV90b19iZTMyKChmZnMobmVudCkgLSAxKSA8PCAyNCk7CisJZXFfY29udGV4dC0+bG9nc2l6ZV91c3JwYWdlID0gY3B1X3RvX2JlMzIoKGZmcyhlcS0+bmVudCkgLSAxKSA8PCAyNCk7CiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgewogCQllcV9jb250ZXh0LT5hcmJlbF9wZCA9IGNwdV90b19iZTMyKGRldi0+ZHJpdmVyX3BkLnBkX251bSk7CiAJfSBlbHNlIHsKQEAgLTU2OSw3ICs1NjMsNyBAQAogCWRldi0+ZXFfdGFibGUuYXJtX21hc2sgfD0gZXEtPmVxbl9tYXNrOwogCiAJbXRoY2FfZGJnKGRldiwgIkFsbG9jYXRlZCBFUSAlZCB3aXRoICVkIGVudHJpZXNcbiIsCi0JCSAgZXEtPmVxbiwgbmVudCk7CisJCSAgZXEtPmVxbiwgZXEtPm5lbnQpOwogCiAJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwppbmRleCBiY2VmMDZiLi41ZmEwMDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwpAQCAtMjI3LDcgKzIyNyw2IEBACiAJd3EtPmxhc3RfY29tcCA9IHdxLT5tYXggLSAxOwogCXdxLT5oZWFkICAgICAgPSAwOwogCXdxLT50YWlsICAgICAgPSAwOwotCXdxLT5sYXN0ICAgICAgPSBOVUxMOwogfQogCiB2b2lkIG10aGNhX3FwX2V2ZW50KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIHFwbiwKQEAgLTY4Nyw3ICs2ODYsNyBAQAogCX0KIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9USU1FT1VUKSB7Ci0JCXFwX2NvbnRleHQtPnByaV9wYXRoLmFja3RvID0gYXR0ci0+dGltZW91dDsKKwkJcXBfY29udGV4dC0+cHJpX3BhdGguYWNrdG8gPSBhdHRyLT50aW1lb3V0IDw8IDM7CiAJCXFwX3BhcmFtLT5vcHRfcGFyYW1fbWFzayB8PSBjcHVfdG9fYmUzMihNVEhDQV9RUF9PUFRQQVJfQUNLX1RJTUVPVVQpOwogCX0KIApAQCAtMTEwMyw2ICsxMTAyLDkgQEAKIAkJfQogCX0KIAorCXFwLT5zcS5sYXN0ID0gZ2V0X3NlbmRfd3FlKHFwLCBxcC0+c3EubWF4IC0gMSk7CisJcXAtPnJxLmxhc3QgPSBnZXRfcmVjdl93cWUocXAsIHFwLT5ycS5tYXggLSAxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTgzLDE1ICsxNTg1LDEzIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmIChwcmV2X3dxZSkgewotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5uZGFfb3AgPQotCQkJCWNwdV90b19iZTMyKCgoaW5kIDw8IHFwLT5zcS53cWVfc2hpZnQpICsKLQkJCQkJICAgICBxcC0+c2VuZF93cWVfb2Zmc2V0KSB8Ci0JCQkJCSAgICBtdGhjYV9vcGNvZGVbd3ItPm9wY29kZV0pOwotCQkJd21iKCk7Ci0JCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPmVlX25kcyA9Ci0JCQkJY3B1X3RvX2JlMzIoKHNpemUwID8gMCA6IE1USENBX05FWFRfREJEKSB8IHNpemUpOwotCQl9CisJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+bmRhX29wID0KKwkJCWNwdV90b19iZTMyKCgoaW5kIDw8IHFwLT5zcS53cWVfc2hpZnQpICsKKwkJCQkgICAgIHFwLT5zZW5kX3dxZV9vZmZzZXQpIHwKKwkJCQkgICAgbXRoY2Ffb3Bjb2RlW3dyLT5vcGNvZGVdKTsKKwkJd21iKCk7CisJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+ZWVfbmRzID0KKwkJCWNwdV90b19iZTMyKChzaXplMCA/IDAgOiBNVEhDQV9ORVhUX0RCRCkgfCBzaXplKTsKIAogCQlpZiAoIXNpemUwKSB7CiAJCQlzaXplMCA9IHNpemU7CkBAIC0xNjg4LDEzICsxNjg4LDExIEBACiAKIAkJcXAtPndyaWRbaW5kXSA9IHdyLT53cl9pZDsKIAotCQlpZiAobGlrZWx5KHByZXZfd3FlKSkgewotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5uZGFfb3AgPQotCQkJCWNwdV90b19iZTMyKChpbmQgPDwgcXAtPnJxLndxZV9zaGlmdCkgfCAxKTsKLQkJCXdtYigpOwotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQotCQkJCWNwdV90b19iZTMyKE1USENBX05FWFRfREJEIHwgc2l6ZSk7Ci0JCX0KKwkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5uZGFfb3AgPQorCQkJY3B1X3RvX2JlMzIoKGluZCA8PCBxcC0+cnEud3FlX3NoaWZ0KSB8IDEpOworCQl3bWIoKTsKKwkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQorCQkJY3B1X3RvX2JlMzIoTVRIQ0FfTkVYVF9EQkQgfCBzaXplKTsKIAogCQlpZiAoIXNpemUwKQogCQkJc2l6ZTAgPSBzaXplOwpAQCAtMTkwNSwxNSArMTkwMywxMyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAobGlrZWx5KHByZXZfd3FlKSkgewotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5uZGFfb3AgPQotCQkJCWNwdV90b19iZTMyKCgoaW5kIDw8IHFwLT5zcS53cWVfc2hpZnQpICsKLQkJCQkJICAgICBxcC0+c2VuZF93cWVfb2Zmc2V0KSB8Ci0JCQkJCSAgICBtdGhjYV9vcGNvZGVbd3ItPm9wY29kZV0pOwotCQkJd21iKCk7Ci0JCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPmVlX25kcyA9Ci0JCQkJY3B1X3RvX2JlMzIoTVRIQ0FfTkVYVF9EQkQgfCBzaXplKTsKLQkJfQorCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPm5kYV9vcCA9CisJCQljcHVfdG9fYmUzMigoKGluZCA8PCBxcC0+c3Eud3FlX3NoaWZ0KSArCisJCQkJICAgICBxcC0+c2VuZF93cWVfb2Zmc2V0KSB8CisJCQkJICAgIG10aGNhX29wY29kZVt3ci0+b3Bjb2RlXSk7CisJCXdtYigpOworCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPmVlX25kcyA9CisJCQljcHVfdG9fYmUzMihNVEhDQV9ORVhUX0RCRCB8IHNpemUpOwogCiAJCWlmICghc2l6ZTApIHsKIAkJCXNpemUwID0gc2l6ZTsKQEAgLTIxMjcsNSArMjEyMyw2IEBACiAJZm9yIChpID0gMDsgaSA8IDI7ICsraSkKIAkJbXRoY2FfQ09ORl9TUEVDSUFMX1FQKGRldiwgaSwgMCwgJnN0YXR1cyk7CiAKKwltdGhjYV9hcnJheV9jbGVhbnVwKCZkZXYtPnFwX3RhYmxlLnFwLCBkZXYtPmxpbWl0cy5udW1fcXBzKTsKIAltdGhjYV9hbGxvY19jbGVhbnVwKCZkZXYtPnFwX3RhYmxlLmFsbG9jKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwppbmRleCA3NWNkMmQ4Li4xODk5OGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCkBAIC0xNzIsNiArMTcyLDggQEAKIAkJCXNjYXR0ZXItPmxrZXkgPSBjcHVfdG9fYmUzMihNVEhDQV9JTlZBTF9MS0VZKTsKIAl9CiAKKwlzcnEtPmxhc3QgPSBnZXRfd3FlKHNycSwgc3JxLT5tYXggLSAxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODksNyArMTkxLDYgQEAKIAogCXNycS0+bWF4ICAgICAgPSBhdHRyLT5tYXhfd3I7CiAJc3JxLT5tYXhfZ3MgICA9IGF0dHItPm1heF9zZ2U7Ci0Jc3JxLT5sYXN0ICAgICA9IE5VTEw7CiAJc3JxLT5jb3VudGVyICA9IDA7CiAKIAlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQpAQCAtNDA5LDcgKzQxMCw3IEBACiAJCQltdGhjYV9lcnIoZGV2LCAiU1JRICUwNnggZnVsbFxuIiwgc3JxLT5zcnFuKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQkqYmFkX3dyID0gd3I7Ci0JCQlyZXR1cm4gbnJlcTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJd3FlICAgICAgID0gZ2V0X3dxZShzcnEsIGluZCk7CkBAIC00MjcsNyArNDI4LDcgQEAKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQkqYmFkX3dyID0gd3I7CiAJCQlzcnEtPmxhc3QgPSBwcmV2X3dxZTsKLQkJCXJldHVybiBucmVxOworCQkJYnJlYWs7CiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7ICsraSkgewpAQCAtNDQ2LDIwICs0NDcsMTYgQEAKIAkJCSgoc3RydWN0IG10aGNhX2RhdGFfc2VnICopIHdxZSktPmFkZHIgPSAwOwogCQl9CiAKLQkJaWYgKGxpa2VseShwcmV2X3dxZSkpIHsKLQkJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+bmRhX29wID0KLQkJCQljcHVfdG9fYmUzMigoaW5kIDw8IHNycS0+d3FlX3NoaWZ0KSB8IDEpOwotCQkJd21iKCk7Ci0JCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPmVlX25kcyA9Ci0JCQkJY3B1X3RvX2JlMzIoTVRIQ0FfTkVYVF9EQkQpOwotCQl9CisJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+bmRhX29wID0KKwkJCWNwdV90b19iZTMyKChpbmQgPDwgc3JxLT53cWVfc2hpZnQpIHwgMSk7CisJCXdtYigpOworCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPmVlX25kcyA9CisJCQljcHVfdG9fYmUzMihNVEhDQV9ORVhUX0RCRCk7CiAKIAkJc3JxLT53cmlkW2luZF0gID0gd3ItPndyX2lkOwogCQlzcnEtPmZpcnN0X2ZyZWUgPSBuZXh0X2luZDsKIAl9CiAKLQlyZXR1cm4gbnJlcTsKLQogCWlmIChsaWtlbHkobnJlcSkpIHsKIAkJX19iZTMyIGRvb3JiZWxsWzJdOwogCkBAIC01MDMsNyArNTAwLDcgQEAKIAkJCW10aGNhX2VycihkZXYsICJTUlEgJTA2eCBmdWxsXG4iLCBzcnEtPnNycW4pOwogCQkJZXJyID0gLUVOT01FTTsKIAkJCSpiYWRfd3IgPSB3cjsKLQkJCXJldHVybiBucmVxOworCQkJYnJlYWs7CiAJCX0KIAogCQl3cWUgICAgICAgPSBnZXRfd3FlKHNycSwgaW5kKTsKQEAgLTUxOSw3ICs1MTYsNyBAQAogCQlpZiAodW5saWtlbHkod3ItPm51bV9zZ2UgPiBzcnEtPm1heF9ncykpIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQkqYmFkX3dyID0gd3I7Ci0JCQlyZXR1cm4gbnJlcTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IHdyLT5udW1fc2dlOyArK2kpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAppbmRleCBiZWE5NjBiLi40ZWExYzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCkBAIC0yNTcsNyArMjU3LDcgQEAKIAogdm9pZCBpcG9pYl9tY2FzdF9yZXN0YXJ0X3Rhc2sodm9pZCAqZGV2X3B0cik7CiBpbnQgaXBvaWJfbWNhc3Rfc3RhcnRfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCk7CiAKIHZvaWQgaXBvaWJfbWNhc3RfZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGlwb2liX21jYXN0X2Rldl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwppbmRleCBlZjBlMzg5Li5mNzQ0MDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAJfQogCi0JaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoZGV2KTsKKwlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYsIDEpOwogCiAJLyoKIAkgKiBGbHVzaCB0aGUgbXVsdGljYXN0IGdyb3VwcyBmaXJzdCBzbyB3ZSBzdG9wIGFueSBtdWx0aWNhc3Qgam9pbnMuIFRoZQpAQCAtNTk5LDcgKzU5OSw3IEBACiAKIAlpcG9pYl9kYmcocHJpdiwgImNsZWFuaW5nIHVwIGliX2RldlxuIik7CiAKLQlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYpOworCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldiwgMSk7CiAKIAkvKiBEZWxldGUgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIGFuZCB0aGUgbG9jYWwgYWRkcmVzcyAqLwogCWlwb2liX21jYXN0X2Rldl9kb3duKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IDQ5ZDEyMGQuLjcwNGY0OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC0xMDA1LDYgKzEwMDUsNyBAQAogCiByZWdpc3Rlcl9mYWlsZWQ6CiAJaWJfdW5yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKCZwcml2LT5ldmVudF9oYW5kbGVyKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiBldmVudF9mYWlsZWQ6CiAJaXBvaWJfZGV2X2NsZWFudXAocHJpdi0+ZGV2KTsKQEAgLTEwNTcsNiArMTA1OCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCBkZXZfbGlzdCwgbGlzdCkgewogCQlpYl91bnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXIoJnByaXYtPmV2ZW50X2hhbmRsZXIpOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAJCWlwb2liX2Rldl9jbGVhbnVwKHByaXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCBhY2E3YWVhLi4zNmNlMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAJbWNhc3QtPmRldiA9IGRldjsKIAltY2FzdC0+Y3JlYXRlZCA9IGppZmZpZXM7Ci0JbWNhc3QtPmJhY2tvZmYgPSBIWjsKKwltY2FzdC0+YmFja29mZiA9IDE7CiAJbWNhc3QtPmxvZ2NvdW50ID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZtY2FzdC0+bGlzdCk7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpLCBzdGF0dXMpOwogCiAJaWYgKCFzdGF0dXMgJiYgIWlwb2liX21jYXN0X2pvaW5fZmluaXNoKG1jYXN0LCBtY21lbWJlcikpIHsKLQkJbWNhc3QtPmJhY2tvZmYgPSBIWjsKKwkJbWNhc3QtPmJhY2tvZmYgPSAxOwogCQlkb3duKCZtY2FzdF9tdXRleCk7CiAJCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpCiAJCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPm1jYXN0X3Rhc2spOwpAQCAtNDk2LDcgKzQ5Niw3IEBACiAJCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpCiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsoaXBvaWJfd29ya3F1ZXVlLAogCQkJCQkgICAmcHJpdi0+bWNhc3RfdGFzaywKLQkJCQkJICAgbWNhc3QtPmJhY2tvZmYpOworCQkJCQkgICBtY2FzdC0+YmFja29mZiAqIEhaKTsKIAkJdXAoJm1jYXN0X211dGV4KTsKIAl9IGVsc2UKIAkJbWNhc3QtPnF1ZXJ5X2lkID0gcmV0OwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3Q7CkBAIC02MTAsNyArNjEwLDggQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5tY2FzdF90YXNrKTsKIAl1cCgmbWNhc3RfbXV0ZXgpOwogCi0JZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CisJaWYgKGZsdXNoKQorCQlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKIAogCWlmIChwcml2LT5icm9hZGNhc3QgJiYgcHJpdi0+YnJvYWRjYXN0LT5xdWVyeSkgewogCQlpYl9zYV9jYW5jZWxfcXVlcnkocHJpdi0+YnJvYWRjYXN0LT5xdWVyeV9pZCwgcHJpdi0+YnJvYWRjYXN0LT5xdWVyeSk7CkBAIC04MzIsNyArODMzLDcgQEAKIAogCWlwb2liX2RiZ19tY2FzdChwcml2LCAicmVzdGFydGluZyBtdWx0aWNhc3QgdGFza1xuIik7CiAKLQlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYpOworCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldiwgMCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggZTU1ZGVlMy4uNDQ0Zjc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMTMyLDYgKzEzMiwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNvcmdpa2JkLgogCitjb25maWcgS0VZQk9BUkRfU1BJVFoKKwl0cmlzdGF0ZSAiU3BpdHoga2V5Ym9hcmQiCisJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXlib2FyZCBvbiB0aGUgU2hhcnAgWmF1cnVzIFNMLUMxMDAwLAorCSAgU0wtQzMwMDAgYW5kIFNsLUMzMTAwIHNlcmllcyBvZiBQREFzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGl0emtiZC4KKwogY29uZmlnIEtFWUJPQVJEX01BUExFCiAJdHJpc3RhdGUgIk1hcGxlIGJ1cyBrZXlib2FyZCIKIAlkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVCAmJiBNQVBMRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggYjAyZWVjZS4uOWNlMGI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfTkVXVE9OKQkJKz0gbmV3dG9ua2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF85OEtCRCkJCSs9IDk4a2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9DT1JHSSkJCSs9IGNvcmdpa2JkLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9TUElUWikJCSs9IHNwaXR6a2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9ISUwpCQkrPSBoaWxfa2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9ISUxfT0xEKQkJKz0gaGlsa2JkLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTQwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTAsMCArMSw0NzggQEAKKy8qCisgKiAgS2V5Ym9hcmQgZHJpdmVyIGZvciBTaGFycCBTcGl0eiwgQm9yem9pIGFuZCBBa2l0YSAoU0wtQ3h4MDAgc2VyaWVzKQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgUmljaGFyZCBQdXJkaWUKKyAqCisgKiAgQmFzZWQgb24gY29yZ2lrYmQuYworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvc3BpdHouaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisKKyNkZWZpbmUgS0JfUk9XUwkJCTcKKyNkZWZpbmUgS0JfQ09MUwkJCTExCisjZGVmaW5lIEtCX1JPV01BU0socikJCSgxIDw8IChyKSkKKyNkZWZpbmUgU0NBTkNPREUocixjKQkJKCgocik8PDQpICsgKGMpICsgMSkKKyNkZWZpbmUJTlJfU0NBTkNPREVTCQkoKEtCX1JPV1M8PDQpICsgMSkKKworI2RlZmluZSBISU5HRV9TQ0FOX0lOVEVSVkFMCSgxNTApIC8qIG1zICovCisKKyNkZWZpbmUgU1BJVFpfS0VZX0NBTEVOREVSCUtFWV9GMQorI2RlZmluZSBTUElUWl9LRVlfQUREUkVTUwlLRVlfRjIKKyNkZWZpbmUgU1BJVFpfS0VZX0ZOCQlLRVlfRjMKKyNkZWZpbmUgU1BJVFpfS0VZX0NBTkNFTAlLRVlfRjQKKyNkZWZpbmUgU1BJVFpfS0VZX0VYT0sJCUtFWV9GNQorI2RlZmluZSBTUElUWl9LRVlfRVhDQU5DRUwJS0VZX0Y2CisjZGVmaW5lIFNQSVRaX0tFWV9FWEpPR0RPV04JS0VZX0Y3CisjZGVmaW5lIFNQSVRaX0tFWV9FWEpPR1VQCUtFWV9GOAorI2RlZmluZSBTUElUWl9LRVlfSkFQMQkJS0VZX0xFRlRBTFQKKyNkZWZpbmUgU1BJVFpfS0VZX0pBUDIJCUtFWV9SSUdIVENUUkwKKyNkZWZpbmUgU1BJVFpfS0VZX1NZTkMJCUtFWV9GOQorI2RlZmluZSBTUElUWl9LRVlfTUFJTAkJS0VZX0YxMAorI2RlZmluZSBTUElUWl9LRVlfT0sJCUtFWV9GMTEKKyNkZWZpbmUgU1BJVFpfS0VZX01FTlUJCUtFWV9GMTIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3BpdHprYmRfa2V5Y29kZVtOUl9TQ0FOQ09ERVNdID0geworCTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgKi8KKwlLRVlfTEVGVENUUkwsIEtFWV8xLCBLRVlfMywgS0VZXzUsIEtFWV82LCBLRVlfNywgS0VZXzksIEtFWV8wLCBLRVlfQkFDS1NQQUNFLCBTUElUWl9LRVlfRVhPSywgU1BJVFpfS0VZX0VYQ0FOQ0VMLCAwLCAwLCAwLCAwLCAwLCAgLyogMS0xNiAqLworCTAsIEtFWV8yLCBLRVlfNCwgS0VZX1IsIEtFWV9ZLCBLRVlfOCwgS0VZX0ksIEtFWV9PLCBLRVlfUCwgU1BJVFpfS0VZX0VYSk9HRE9XTiwgU1BJVFpfS0VZX0VYSk9HVVAsIDAsIDAsIDAsIDAsIDAsIC8qIDE3LTMyICovCisJS0VZX1RBQiwgS0VZX1EsIEtFWV9FLCBLRVlfVCwgS0VZX0csIEtFWV9VLCBLRVlfSiwgS0VZX0ssIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzMtNDggKi8KKwlTUElUWl9LRVlfQ0FMRU5ERVIsIEtFWV9XLCBLRVlfUywgS0VZX0YsIEtFWV9WLCBLRVlfSCwgS0VZX00sIEtFWV9MLCAwLCAwLCBLRVlfUklHSFRTSElGVCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAvKiA0OS02NCAqLworCVNQSVRaX0tFWV9BRERSRVNTLCBLRVlfQSwgS0VZX0QsIEtFWV9DLCBLRVlfQiwgS0VZX04sIEtFWV9ET1QsIDAsIEtFWV9FTlRFUiwgS0VZX0xFRlRTSElGVCwgMCwgMCwgMCwgMCwgMCwgMCwJICAvKiA2NS04MCAqLworCVNQSVRaX0tFWV9NQUlMLCBLRVlfWiwgS0VZX1gsIEtFWV9NSU5VUywgS0VZX1NQQUNFLCBLRVlfQ09NTUEsIDAsIEtFWV9VUCwgMCwgMCwgU1BJVFpfS0VZX0ZOLCAwLCAwLCAwLCAwLCAwLCAgICAgIC8qIDgxLTk2ICovCisJS0VZX1NZU1JRLCBTUElUWl9LRVlfSkFQMSwgU1BJVFpfS0VZX0pBUDIsIFNQSVRaX0tFWV9DQU5DRUwsIFNQSVRaX0tFWV9PSywgU1BJVFpfS0VZX01FTlUsIEtFWV9MRUZULCBLRVlfRE9XTiwgS0VZX1JJR0hULCAwLCAwLCAwLCAwLCAwLCAwLCAwICAvKiA5Ny0xMTIgKi8KK307CisKK3N0YXRpYyBpbnQgc3BpdHpfc3Ryb2Jlc1tdID0geworCVNQSVRaX0dQSU9fS0VZX1NUUk9CRTAsCisJU1BJVFpfR1BJT19LRVlfU1RST0JFMSwKKwlTUElUWl9HUElPX0tFWV9TVFJPQkUyLAorCVNQSVRaX0dQSU9fS0VZX1NUUk9CRTMsCisJU1BJVFpfR1BJT19LRVlfU1RST0JFNCwKKwlTUElUWl9HUElPX0tFWV9TVFJPQkU1LAorCVNQSVRaX0dQSU9fS0VZX1NUUk9CRTYsCisJU1BJVFpfR1BJT19LRVlfU1RST0JFNywKKwlTUElUWl9HUElPX0tFWV9TVFJPQkU4LAorCVNQSVRaX0dQSU9fS0VZX1NUUk9CRTksCisJU1BJVFpfR1BJT19LRVlfU1RST0JFMTAsCit9OworCitzdGF0aWMgaW50IHNwaXR6X3NlbnNlc1tdID0geworCVNQSVRaX0dQSU9fS0VZX1NFTlNFMCwKKwlTUElUWl9HUElPX0tFWV9TRU5TRTEsCisJU1BJVFpfR1BJT19LRVlfU0VOU0UyLAorCVNQSVRaX0dQSU9fS0VZX1NFTlNFMywKKwlTUElUWl9HUElPX0tFWV9TRU5TRTQsCisJU1BJVFpfR1BJT19LRVlfU0VOU0U1LAorCVNQSVRaX0dQSU9fS0VZX1NFTlNFNiwKK307CisKK3N0cnVjdCBzcGl0emtiZCB7CisJdW5zaWduZWQgY2hhciBrZXljb2RlW0FSUkFZX1NJWkUoc3BpdHprYmRfa2V5Y29kZSldOworCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7CisJY2hhciBwaHlzWzMyXTsKKworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBodGltZXI7CisKKwl1bnNpZ25lZCBpbnQgc3VzcGVuZGVkOworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9qaWZmaWVzOworfTsKKworI2RlZmluZSBLQl9ESVNDSEFSR0VfREVMQVkJMTAKKyNkZWZpbmUgS0JfQUNUSVZBVEVfREVMQVkJMTAKKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyB0aGUga2V5Ym9hcmQgbWF0cml4CisgKiBOb3RlOiBXZSBzaG91bGQgcmVhbGx5IGJlIHVzaW5nIHB4YV9ncGlvX21vZGUgdG8gYWx0ZXIgR1BEUiBidXQgaXQKKyAqICAgICAgIHJlcXVpcmVzIGEgZnVuY3Rpb24gY2FsbCBwZXIgR1BJTyBiaXQgd2hpY2ggaXMgZXhjZXNzaXZlCisgKiAgICAgICB3aGVuIHdlIG5lZWQgdG8gYWNjZXNzIDExIGJpdHMgYXQgb25jZSwgbXVsdGlwbGUgdGltZXMuCisgKiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBiZSBjYWxsZWQgd2l0aGluIGxvY2FsX2lycV9zYXZlKCkvbG9jYWxfaXJxX3Jlc3RvcmUoKQorICogb3Igc2ltaWxhci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNwaXR6a2JkX2Rpc2NoYXJnZV9hbGwodm9pZCkKK3sKKwkvKiBTVFJPQkUgQWxsIEhpWiAqLworCUdQQ1IwICA9ICBTUElUWl9HUElPX0cwX1NUUk9CRV9CSVQ7CisJR1BEUjAgJj0gflNQSVRaX0dQSU9fRzBfU1RST0JFX0JJVDsKKwlHUENSMSAgPSAgU1BJVFpfR1BJT19HMV9TVFJPQkVfQklUOworCUdQRFIxICY9IH5TUElUWl9HUElPX0cxX1NUUk9CRV9CSVQ7CisJR1BDUjIgID0gIFNQSVRaX0dQSU9fRzJfU1RST0JFX0JJVDsKKwlHUERSMiAmPSB+U1BJVFpfR1BJT19HMl9TVFJPQkVfQklUOworCUdQQ1IzICA9ICBTUElUWl9HUElPX0czX1NUUk9CRV9CSVQ7CisJR1BEUjMgJj0gflNQSVRaX0dQSU9fRzNfU1RST0JFX0JJVDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwaXR6a2JkX2FjdGl2YXRlX2FsbCh2b2lkKQoreworCS8qIFNUUk9CRSBBTEwgLT4gSGlnaCAqLworCUdQU1IwICA9ICBTUElUWl9HUElPX0cwX1NUUk9CRV9CSVQ7CisJR1BEUjAgfD0gIFNQSVRaX0dQSU9fRzBfU1RST0JFX0JJVDsKKwlHUFNSMSAgPSAgU1BJVFpfR1BJT19HMV9TVFJPQkVfQklUOworCUdQRFIxIHw9ICBTUElUWl9HUElPX0cxX1NUUk9CRV9CSVQ7CisJR1BTUjIgID0gIFNQSVRaX0dQSU9fRzJfU1RST0JFX0JJVDsKKwlHUERSMiB8PSAgU1BJVFpfR1BJT19HMl9TVFJPQkVfQklUOworCUdQU1IzICA9ICBTUElUWl9HUElPX0czX1NUUk9CRV9CSVQ7CisJR1BEUjMgfD0gIFNQSVRaX0dQSU9fRzNfU1RST0JFX0JJVDsKKworCXVkZWxheShLQl9ESVNDSEFSR0VfREVMQVkpOworCisJLyogQ2xlYXIgYW55IGludGVycnVwdHMgd2UgbWF5IGhhdmUgdHJpZ2dlcmVkIHdoZW4gYWx0ZXJpbmcgdGhlIEdQSU8gbGluZXMgKi8KKwlHRURSMCA9IFNQSVRaX0dQSU9fRzBfU0VOU0VfQklUOworCUdFRFIxID0gU1BJVFpfR1BJT19HMV9TRU5TRV9CSVQ7CisJR0VEUjIgPSBTUElUWl9HUElPX0cyX1NFTlNFX0JJVDsKKwlHRURSMyA9IFNQSVRaX0dQSU9fRzNfU0VOU0VfQklUOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdHprYmRfYWN0aXZhdGVfY29sKGludCBjb2wpCit7CisJaW50IGdwaW8gPSBzcGl0el9zdHJvYmVzW2NvbF07CisJR1BEUjAgJj0gflNQSVRaX0dQSU9fRzBfU1RST0JFX0JJVDsKKwlHUERSMSAmPSB+U1BJVFpfR1BJT19HMV9TVFJPQkVfQklUOworCUdQRFIyICY9IH5TUElUWl9HUElPX0cyX1NUUk9CRV9CSVQ7CisJR1BEUjMgJj0gflNQSVRaX0dQSU9fRzNfU1RST0JFX0JJVDsKKwlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CisJR1BEUihncGlvKSB8PSBHUElPX2JpdChncGlvKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwaXR6a2JkX3Jlc2V0X2NvbChpbnQgY29sKQoreworCWludCBncGlvID0gc3BpdHpfc3Ryb2Jlc1tjb2xdOworCUdQRFIwICY9IH5TUElUWl9HUElPX0cwX1NUUk9CRV9CSVQ7CisJR1BEUjEgJj0gflNQSVRaX0dQSU9fRzFfU1RST0JFX0JJVDsKKwlHUERSMiAmPSB+U1BJVFpfR1BJT19HMl9TVFJPQkVfQklUOworCUdQRFIzICY9IH5TUElUWl9HUElPX0czX1NUUk9CRV9CSVQ7CisJR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCUdQRFIoZ3BpbykgfD0gR1BJT19iaXQoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwaXR6a2JkX2dldF9yb3dfc3RhdHVzKGludCBjb2wpCit7CisJcmV0dXJuICgoR1BMUjAgPj4gMTIpICYgMHgwMSkgfCAoKEdQTFIwID4+IDE2KSAmIDB4MDIpCisJCXwgKChHUExSMiA+PiAyNSkgJiAweDA0KSB8ICgoR1BMUjEgPDwgMSkgJiAweDA4KQorCQl8ICgoR1BMUjEgPj4gMCkgJiAweDEwKSB8ICgoR1BMUjEgPj4gMSkgJiAweDYwKTsKK30KKworLyoKKyAqIFRoZSBzcGl0eiBrZXlib2FyZCBvbmx5IGdlbmVyYXRlcyBpbnRlcnJ1cHRzIHdoZW4gYSBrZXkgaXMgcHJlc3NlZC4KKyAqIFdoZW4gYSBrZXkgaXMgcHJlc3NlZCwgd2UgZW5hYmxlIGEgdGltZXIgd2hpY2ggdGhlbiBzY2FucyB0aGUKKyAqIGtleWJvYXJkIHRvIGRldGVjdCB3aGVuIHRoZSBrZXkgaXMgcmVsZWFzZWQuCisgKi8KKworLyogU2NhbiB0aGUgaGFyZHdhcmUga2V5Ym9hcmQgYW5kIHB1c2ggYW55IGNoYW5nZXMgdXAgdGhyb3VnaCB0aGUgaW5wdXQgbGF5ZXIgKi8KK3N0YXRpYyB2b2lkIHNwaXR6a2JkX3NjYW5rZXlib2FyZChzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkX2RhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCByb3csIGNvbCwgcm93ZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBudW1fcHJlc3NlZCwgcHdya2V5ID0gKChHUExSKFNQSVRaX0dQSU9fT05fS0VZKSAmIEdQSU9fYml0KFNQSVRaX0dQSU9fT05fS0VZKSkgIT0gMCk7CisKKwlpZiAoc3BpdHprYmRfZGF0YS0+c3VzcGVuZGVkKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3BpdHprYmRfZGF0YS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJlZ3MpCisJCWlucHV0X3JlZ3MoJnNwaXR6a2JkX2RhdGEtPmlucHV0LCByZWdzKTsKKworCW51bV9wcmVzc2VkID0gMDsKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IEtCX0NPTFM7IGNvbCsrKSB7CisJCS8qCisJCSAqIERpc2NoYXJnZSB0aGUgb3V0cHV0IGRyaXZlciBjYXBhY2l0YXRhbmNlCisJCSAqIGluIHRoZSBrZXlib2FyZCBtYXRyaXguIChZZXMgaXQgaXMgc2lnbmlmaWNhbnQuLikKKwkJICovCisKKwkJc3BpdHprYmRfZGlzY2hhcmdlX2FsbCgpOworCQl1ZGVsYXkoS0JfRElTQ0hBUkdFX0RFTEFZKTsKKworCQlzcGl0emtiZF9hY3RpdmF0ZV9jb2woY29sKTsKKwkJdWRlbGF5KEtCX0FDVElWQVRFX0RFTEFZKTsKKworCQlyb3dkID0gc3BpdHprYmRfZ2V0X3Jvd19zdGF0dXMoY29sKTsKKwkJZm9yIChyb3cgPSAwOyByb3cgPCBLQl9ST1dTOyByb3crKykgeworCQkJdW5zaWduZWQgaW50IHNjYW5jb2RlLCBwcmVzc2VkOworCisJCQlzY2FuY29kZSA9IFNDQU5DT0RFKHJvdywgY29sKTsKKwkJCXByZXNzZWQgPSByb3dkICYgS0JfUk9XTUFTSyhyb3cpOworCisJCQlpbnB1dF9yZXBvcnRfa2V5KCZzcGl0emtiZF9kYXRhLT5pbnB1dCwgc3BpdHprYmRfZGF0YS0+a2V5Y29kZVtzY2FuY29kZV0sIHByZXNzZWQpOworCisJCQlpZiAocHJlc3NlZCkKKwkJCQludW1fcHJlc3NlZCsrOworCQl9CisJCXNwaXR6a2JkX3Jlc2V0X2NvbChjb2wpOworCX0KKworCXNwaXR6a2JkX2FjdGl2YXRlX2FsbCgpOworCisJaW5wdXRfcmVwb3J0X2tleSgmc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNQSVRaX0tFWV9TWU5DLCAoR1BMUihTUElUWl9HUElPX1NZTkMpICYgR1BJT19iaXQoU1BJVFpfR1BJT19TWU5DKSkgIT0gMCApOworCWlucHV0X3JlcG9ydF9rZXkoJnNwaXR6a2JkX2RhdGEtPmlucHV0LCBLRVlfU1VTUEVORCwgcHdya2V5KTsKKworCWlmIChwd3JrZXkgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBzcGl0emtiZF9kYXRhLT5zdXNwZW5kX2ppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkgeworCQlpbnB1dF9ldmVudCgmc3BpdHprYmRfZGF0YS0+aW5wdXQsIEVWX1BXUiwgS0VZX1NVU1BFTkQsIDEpOworCQlzcGl0emtiZF9kYXRhLT5zdXNwZW5kX2ppZmZpZXMgPSBqaWZmaWVzOworCX0KKworCWlucHV0X3N5bmMoJnNwaXR6a2JkX2RhdGEtPmlucHV0KTsKKworCS8qIGlmIGFueSBrZXlzIGFyZSBwcmVzc2VkLCBlbmFibGUgdGhlIHRpbWVyICovCisJaWYgKG51bV9wcmVzc2VkKQorCQltb2RfdGltZXIoJnNwaXR6a2JkX2RhdGEtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDApKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaXR6a2JkX2RhdGEtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIHNwaXR6IGtleWJvYXJkIGludGVycnVwdCBoYW5kbGVyLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3BpdHprYmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZF9kYXRhID0gZGV2X2lkOworCisJaWYgKCF0aW1lcl9wZW5kaW5nKCZzcGl0emtiZF9kYXRhLT50aW1lcikpIHsKKwkJLyoqIHdhaXQgY2hhdHRlcmluZyBkZWxheSAqKi8KKwkJdWRlbGF5KDIwKTsKKwkJc3BpdHprYmRfc2NhbmtleWJvYXJkKHNwaXR6a2JkX2RhdGEsIHJlZ3MpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIHNwaXR6IHRpbWVyIGNoZWNraW5nIGZvciByZWxlYXNlZCBrZXlzCisgKi8KK3N0YXRpYyB2b2lkIHNwaXR6a2JkX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkX2RhdGEgPSAoc3RydWN0IHNwaXR6a2JkICopIGRhdGE7CisJc3BpdHprYmRfc2NhbmtleWJvYXJkKHNwaXR6a2JkX2RhdGEsIE5VTEwpOworfQorCisvKgorICogVGhlIGhpbmdlIHN3aXRjaGVzIGdlbmVyYXRlIGFuIGludGVycnVwdC4KKyAqIFdlIGRlYm91bmNlIHRoZSBzd2l0Y2hlcyBhbmQgcGFzcyB0aGVtIHRvIHRoZSBpbnB1dCBzeXN0ZW0uCisgKi8KKworc3RhdGljIGlycXJldHVybl90IHNwaXR6a2JkX2hpbmdlX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmRfZGF0YSA9IGRldl9pZDsKKworCWlmICghdGltZXJfcGVuZGluZygmc3BpdHprYmRfZGF0YS0+aHRpbWVyKSkKKwkJbW9kX3RpbWVyKCZzcGl0emtiZF9kYXRhLT5odGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhJTkdFX1NDQU5fSU5URVJWQUwpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2RlZmluZSBISU5HRV9TVEFCTEVfQ09VTlQgMgorc3RhdGljIGludCBzaGFycHNsX2hpbmdlX3N0YXRlOworc3RhdGljIGludCBoaW5nZV9jb3VudDsKKworc3RhdGljIHZvaWQgc3BpdHprYmRfaGluZ2VfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmRfZGF0YSA9IChzdHJ1Y3Qgc3BpdHprYmQgKikgZGF0YTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdGF0ZSA9IEdQTFIoU1BJVFpfR1BJT19TV0EpICYgKEdQSU9fYml0KFNQSVRaX0dQSU9fU1dBKXxHUElPX2JpdChTUElUWl9HUElPX1NXQikpOworCWlmIChzdGF0ZSAhPSBzaGFycHNsX2hpbmdlX3N0YXRlKSB7CisJCWhpbmdlX2NvdW50ID0gMDsKKwkJc2hhcnBzbF9oaW5nZV9zdGF0ZSA9IHN0YXRlOworCX0gZWxzZSBpZiAoaGluZ2VfY291bnQgPCBISU5HRV9TVEFCTEVfQ09VTlQpIHsKKwkJaGluZ2VfY291bnQrKzsKKwl9CisKKwlpZiAoaGluZ2VfY291bnQgPj0gSElOR0VfU1RBQkxFX0NPVU5UKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzcGl0emtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaCgmc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXXzAsICgoR1BMUihTUElUWl9HUElPX1NXQSkgJiBHUElPX2JpdChTUElUWl9HUElPX1NXQSkpICE9IDApKTsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaCgmc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXXzEsICgoR1BMUihTUElUWl9HUElPX1NXQikgJiBHUElPX2JpdChTUElUWl9HUElPX1NXQikpICE9IDApKTsKKwkJaW5wdXRfc3luYygmc3BpdHprYmRfZGF0YS0+aW5wdXQpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaXR6a2JkX2RhdGEtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQltb2RfdGltZXIoJnNwaXR6a2JkX2RhdGEtPmh0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSElOR0VfU0NBTl9JTlRFUlZBTCkpOworCX0KK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzcGl0emtiZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1aW50MzJfdCBsZXZlbCkKK3sKKwlpZiAobGV2ZWwgPT0gU1VTUEVORF9QT1dFUl9ET1dOKSB7CisJCWludCBpOworCQlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJCXNwaXR6a2JkLT5zdXNwZW5kZWQgPSAxOworCisJCS8qIFNldCBTdHJvYmUgbGluZXMgYXMgaW5wdXRzIC0gKmV4Y2VwdCogc3Ryb2JlIGxpbmUgMCBsZWF2ZSB0aGlzCisJCSAgIGVuYWJsZWQgc28gd2UgY2FuIGRldGVjdCBhIHBvd2VyIGJ1dHRvbiBwcmVzcyBmb3IgcmVzdW1lICovCisJCWZvciAoaSA9IDE7IGkgPCBTUElUWl9LRVlfU1RST0JFX05VTTsgaSsrKQorCQkJcHhhX2dwaW9fbW9kZShzcGl0el9zdHJvYmVzW2ldIHwgR1BJT19JTik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwaXR6a2JkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVpbnQzMl90IGxldmVsKQoreworCWlmIChsZXZlbCA9PSBSRVNVTUVfUE9XRVJfT04pIHsKKwkJaW50IGk7CisJCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgU1BJVFpfS0VZX1NUUk9CRV9OVU07IGkrKykKKwkJCXB4YV9ncGlvX21vZGUoc3BpdHpfc3Ryb2Jlc1tpXSB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOworCisJCS8qIFVwb24gcmVzdW1lLCBpZ25vcmUgdGhlIHN1c3BlbmQga2V5IGZvciBhIHNob3J0IHdoaWxlICovCisJCXNwaXR6a2JkLT5zdXNwZW5kX2ppZmZpZXMgPSBqaWZmaWVzOworCQlzcGl0emtiZC0+c3VzcGVuZGVkID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBzcGl0emtiZF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgc3BpdHprYmRfcmVzdW1lCQlOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgc3BpdHprYmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQ7CisKKwlzcGl0emtiZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcGl0emtiZCksIEdGUF9LRVJORUwpOworCWlmICghc3BpdHprYmQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRldixzcGl0emtiZCk7CisJc3RyY3B5KHNwaXR6a2JkLT5waHlzLCAic3BpdHprYmQvaW5wdXQwIik7CisKKwlzcGluX2xvY2tfaW5pdCgmc3BpdHprYmQtPmxvY2spOworCisJLyogSW5pdCBLZXlib2FyZCByZXNjYW4gdGltZXIgKi8KKwlpbml0X3RpbWVyKCZzcGl0emtiZC0+dGltZXIpOworCXNwaXR6a2JkLT50aW1lci5mdW5jdGlvbiA9IHNwaXR6a2JkX3RpbWVyX2NhbGxiYWNrOworCXNwaXR6a2JkLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHNwaXR6a2JkOworCisJLyogSW5pdCBIaW5nZSBUaW1lciAqLworCWluaXRfdGltZXIoJnNwaXR6a2JkLT5odGltZXIpOworCXNwaXR6a2JkLT5odGltZXIuZnVuY3Rpb24gPSBzcGl0emtiZF9oaW5nZV90aW1lcjsKKwlzcGl0emtiZC0+aHRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgc3BpdHprYmQ7CisKKwlzcGl0emtiZC0+c3VzcGVuZF9qaWZmaWVzPWppZmZpZXM7CisKKwlpbml0X2lucHV0X2Rldigmc3BpdHprYmQtPmlucHV0KTsKKwlzcGl0emtiZC0+aW5wdXQucHJpdmF0ZSA9IHNwaXR6a2JkOworCXNwaXR6a2JkLT5pbnB1dC5uYW1lID0gIlNwaXR6IEtleWJvYXJkIjsKKwlzcGl0emtiZC0+aW5wdXQuZGV2ID0gZGV2OworCXNwaXR6a2JkLT5pbnB1dC5waHlzID0gc3BpdHprYmQtPnBoeXM7CisJc3BpdHprYmQtPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlzcGl0emtiZC0+aW5wdXQuaWQudmVuZG9yID0gMHgwMDAxOworCXNwaXR6a2JkLT5pbnB1dC5pZC5wcm9kdWN0ID0gMHgwMDAxOworCXNwaXR6a2JkLT5pbnB1dC5pZC52ZXJzaW9uID0gMHgwMTAwOworCXNwaXR6a2JkLT5pbnB1dC5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCkgfCBCSVQoRVZfUFdSKSB8IEJJVChFVl9TVyk7CisJc3BpdHprYmQtPmlucHV0LmtleWNvZGUgPSBzcGl0emtiZC0+a2V5Y29kZTsKKwlzcGl0emtiZC0+aW5wdXQua2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CisJc3BpdHprYmQtPmlucHV0LmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKHNwaXR6a2JkX2tleWNvZGUpOworCisJbWVtY3B5KHNwaXR6a2JkLT5rZXljb2RlLCBzcGl0emtiZF9rZXljb2RlLCBzaXplb2Yoc3BpdHprYmQtPmtleWNvZGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGl0emtiZF9rZXljb2RlKTsgaSsrKQorCQlzZXRfYml0KHNwaXR6a2JkLT5rZXljb2RlW2ldLCBzcGl0emtiZC0+aW5wdXQua2V5Yml0KTsKKwljbGVhcl9iaXQoMCwgc3BpdHprYmQtPmlucHV0LmtleWJpdCk7CisJc2V0X2JpdChTV18wLCBzcGl0emtiZC0+aW5wdXQuc3diaXQpOworCXNldF9iaXQoU1dfMSwgc3BpdHprYmQtPmlucHV0LnN3Yml0KTsKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmc3BpdHprYmQtPmlucHV0KTsKKwltb2RfdGltZXIoJnNwaXR6a2JkLT5odGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhJTkdFX1NDQU5fSU5URVJWQUwpKTsKKworCS8qIFNldHVwIHNlbnNlIGludGVycnVwdHMgLSBSaXNpbmdFZGdlIERldGVjdCwgc2Vuc2UgbGluZXMgYXMgaW5wdXRzICovCisJZm9yIChpID0gMDsgaSA8IFNQSVRaX0tFWV9TRU5TRV9OVU07IGkrKykgeworCQlweGFfZ3Bpb19tb2RlKHNwaXR6X3NlbnNlc1tpXSB8IEdQSU9fSU4pOworCQlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc3BpdHpfc2Vuc2VzW2ldKSwgc3BpdHprYmRfaW50ZXJydXB0LAorCQkJCQkJU0FfSU5URVJSVVBULCAiU3BpdHprYmQgU2Vuc2UiLCBzcGl0emtiZCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzcGl0emtiZDogQ2FuJ3QgZ2V0IFNlbnNlIElSUTogJWQhXG4iLCBpKTsKKwkJZWxzZQorCQkJc2V0X2lycV90eXBlKElSUV9HUElPKHNwaXR6X3NlbnNlc1tpXSksSVJRVF9SSVNJTkcpOworCX0KKworCS8qIFNldCBTdHJvYmUgbGluZXMgYXMgb3V0cHV0cyAtIHNldCBoaWdoICovCisJZm9yIChpID0gMDsgaSA8IFNQSVRaX0tFWV9TVFJPQkVfTlVNOyBpKyspCisJCXB4YV9ncGlvX21vZGUoc3BpdHpfc3Ryb2Jlc1tpXSB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOworCisJcHhhX2dwaW9fbW9kZShTUElUWl9HUElPX1NZTkMgfCBHUElPX0lOKTsKKwlweGFfZ3Bpb19tb2RlKFNQSVRaX0dQSU9fT05fS0VZIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShTUElUWl9HUElPX1NXQSB8IEdQSU9fSU4pOworCXB4YV9ncGlvX21vZGUoU1BJVFpfR1BJT19TV0IgfCBHUElPX0lOKTsKKworCXJlcXVlc3RfaXJxKFNQSVRaX0lSUV9HUElPX1NZTkMsIHNwaXR6a2JkX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAiU3BpdHprYmQgU3luYyIsIHNwaXR6a2JkKTsKKwlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19PTl9LRVksIHNwaXR6a2JkX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAiU3BpdHprYmQgUHdyT24iLCBzcGl0emtiZCk7CisJcmVxdWVzdF9pcnEoU1BJVFpfSVJRX0dQSU9fU1dBLCBzcGl0emtiZF9oaW5nZV9pc3IsIFNBX0lOVEVSUlVQVCwgIlNwaXR6a2JkIFNXQSIsIHNwaXR6a2JkKTsKKwlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19TV0IsIHNwaXR6a2JkX2hpbmdlX2lzciwgU0FfSU5URVJSVVBULCAiU3BpdHprYmQgU1dCIiwgc3BpdHprYmQpOworCisJc2V0X2lycV90eXBlKFNQSVRaX0lSUV9HUElPX1NZTkMsIElSUVRfQk9USEVER0UpOworCXNldF9pcnFfdHlwZShTUElUWl9JUlFfR1BJT19PTl9LRVksIElSUVRfQk9USEVER0UpOworCXNldF9pcnFfdHlwZShTUElUWl9JUlFfR1BJT19TV0EsIElSUVRfQk9USEVER0UpOworCXNldF9pcnFfdHlwZShTUElUWl9JUlFfR1BJT19TV0IsIElSUVRfQk9USEVER0UpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6IFNwaXR6IEtleWJvYXJkIFJlZ2lzdGVyZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3BpdHprYmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1BJVFpfS0VZX1NFTlNFX05VTTsgaSsrKQorCQlmcmVlX2lycShJUlFfR1BJTyhzcGl0el9zZW5zZXNbaV0pLCBzcGl0emtiZCk7CisKKwlmcmVlX2lycShTUElUWl9JUlFfR1BJT19TWU5DLCBzcGl0emtiZCk7CisJZnJlZV9pcnEoU1BJVFpfSVJRX0dQSU9fT05fS0VZLCBzcGl0emtiZCk7CisJZnJlZV9pcnEoU1BJVFpfSVJRX0dQSU9fU1dBLCBzcGl0emtiZCk7CisJZnJlZV9pcnEoU1BJVFpfSVJRX0dQSU9fU1dCLCBzcGl0emtiZCk7CisKKwlkZWxfdGltZXJfc3luYygmc3BpdHprYmQtPmh0aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJnNwaXR6a2JkLT50aW1lcik7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmc3BpdHprYmQtPmlucHV0KTsKKworCWtmcmVlKHNwaXR6a2JkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc3BpdHprYmRfZHJpdmVyID0geworCS5uYW1lCQk9ICJzcGl0ei1rZXlib2FyZCIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IHNwaXR6a2JkX3Byb2JlLAorCS5yZW1vdmUJCT0gc3BpdHprYmRfcmVtb3ZlLAorCS5zdXNwZW5kCT0gc3BpdHprYmRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNwaXR6a2JkX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNwaXR6a2JkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzcGl0emtiZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3BpdHprYmRfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZzcGl0emtiZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzcGl0emtiZF9pbml0KTsKK21vZHVsZV9leGl0KHNwaXR6a2JkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNwaXR6IEtleWJvYXJkIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggMDQ4OWFmNS4uMjFkNTVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtMjQsMTcgKzI0LDE3IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaDM2MDBfdHNfaW5wdXQuCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9DT1JHSQotCXRyaXN0YXRlICJDb3JnaSB0b3VjaHNjcmVlbiAoZm9yIFNoYXJwIFNMLUM3eHgpIgorCXRyaXN0YXRlICJTaGFycFNMIChDb3JnaSBhbmQgU3BpdHogc2VyaWVzKSB0b3VjaHNjcmVlbiBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAogCWRlZmF1bHQgeQkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZHJpdmVyIGZvciB0aGUgdG91Y2hzY3JlZW4gb24gdGhlIAotCSAgU2hhcnAgU0wtQzd4eCBzZXJpZXMgb2YgUERBcy4KKwkgIFNoYXJwIFNMLUM3eHggYW5kIFNMLUN4eDAwIHNlcmllcyBvZiBQREFzLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZHM3ODQ2X3RzLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNvcmdpX3RzLgogCiBjb25maWcgVE9VQ0hTQ1JFRU5fR1VOWkUKIAl0cmlzdGF0ZSAiR3VuemUgQUhMLTUxUyB0b3VjaHNjcmVlbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwppbmRleCA1ZDE5MjYxLi40YzdmYmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBUb3VjaHNjcmVlbiBkcml2ZXIgZm9yIFNoYXJwIENvcmdpIG1vZGVscyAoU0wtQzd4eCkKKyAqICBUb3VjaHNjcmVlbiBkcml2ZXIgZm9yIFNoYXJwIFNMLUM3eHggYW5kIFNMLUN4eDAwIG1vZGVscwogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBSaWNoYXJkIFB1cmRpZQogICoKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL2FyY2gvY29yZ2kuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zaGFycHNsLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgogCkBAIC00NywxNSArNDcsMjAgQEAKIAlzdHJ1Y3QgdHNfZXZlbnQgdGM7CiAJaW50IHBlbmRvd247CiAJaW50IHBvd2VyX21vZGU7CisJaW50IGlycV9ncGlvOworCXN0cnVjdCBjb3JnaXRzX21hY2hpbmZvICptYWNoaW5mbzsKIH07CiAKLSNkZWZpbmUgU1RBVFVTX0hTWU5DCQkoR1BMUihDT1JHSV9HUElPX0hTWU5DKSAmIEdQSU9fYml0KENPUkdJX0dQSU9fSFNZTkMpKQotCi0jZGVmaW5lIFN5bmNIUygpCXdoaWxlKChTVEFUVVNfSFNZTkMpID09IDApOyB3aGlsZSgoU1RBVFVTX0hTWU5DKSAhPSAwKTsKKyNpZmRlZiBDT05GSUdfUFhBMjV4CiAjZGVmaW5lIENDTlQoYSkJCWFzbSB2b2xhdGlsZSAoIm1yYyBwMTQsIDAsICUwLCBDMSwgQzAsIDAiIDogIj1yIihhKSkKICNkZWZpbmUgUE1OQ19HRVQoeCkJYXNtIHZvbGF0aWxlICgibXJjIHAxNCwgMCwgJTAsIEMwLCBDMCwgMCIgOiAiPXIiKHgpKQogI2RlZmluZSBQTU5DX1NFVCh4KQlhc20gdm9sYXRpbGUgKCJtY3IgcDE0LCAwLCAlMCwgQzAsIEMwLCAwIiA6IDogInIiKHgpKQotCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisjZGVmaW5lIENDTlQoYSkJCWFzbSB2b2xhdGlsZSAoIm1yYyBwMTQsIDAsICUwLCBDMSwgQzEsIDAiIDogIj1yIihhKSkKKyNkZWZpbmUgUE1OQ19HRVQoeCkJYXNtIHZvbGF0aWxlICgibXJjIHAxNCwgMCwgJTAsIEMwLCBDMSwgMCIgOiAiPXIiKHgpKQorI2RlZmluZSBQTU5DX1NFVCh4KQlhc20gdm9sYXRpbGUgKCJtY3IgcDE0LCAwLCAlMCwgQzAsIEMxLCAwIiA6IDogInIiKHgpKQorI2VuZGlmCiAKIC8qIEFEUzc4NDYgVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIEFEU0NUUkxfUEQwCQkoMXUgPDwgMCkJLyogUEQwICovCkBAIC02NiwxMiArNzEsMTEgQEAKICNkZWZpbmUgQURTQ1RSTF9TVFMJCSgxdSA8PCA3KQkvKiBTdGFydCBCaXQgKi8KIAogLyogRXh0ZXJuYWwgRnVuY3Rpb25zICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyB3MTAwZmJfZ2V0X2hzeW5jbGVuKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdW5zaWduZWQgaW50IGdldF9jbGtfZnJlcXVlbmN5X2toeihpbnQgaW5mbyk7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfd2FpdHRpbWUodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfd2FpdHRpbWUoc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cykKIHsKLQl1bnNpZ25lZCBsb25nIGhzeW5jX2xlbiA9IHcxMDBmYl9nZXRfaHN5bmNsZW4oJmNvcmdpZmJfZGV2aWNlLmRldik7CisJdW5zaWduZWQgbG9uZyBoc3luY19sZW4gPSBjb3JnaV90cy0+bWFjaGluZm8tPmdldF9oc3luY19sZW4oKTsKIAogCWlmIChoc3luY19sZW4pCiAJCXJldHVybiBnZXRfY2xrX2ZyZXF1ZW5jeV9raHooMCkqMTAwMC9oc3luY19sZW47CkBAIC03OSw3ICs4Myw4IEBACiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHN5bmNfcmVjZWl2ZV9kYXRhX3NlbmRfY21kKGludCBkb1JlY2l2ZSwgaW50IGRvU2VuZCwgdW5zaWduZWQgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgd2FpdF90aW1lKQorc3RhdGljIGludCBzeW5jX3JlY2VpdmVfZGF0YV9zZW5kX2NtZChzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzLCBpbnQgZG9SZWNpdmUsIGludCBkb1NlbmQsCisJCXVuc2lnbmVkIGludCBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHdhaXRfdGltZSkKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVyMSA9IDAsIHRpbWVyMiwgcG1uYyA9IDA7CiAJaW50IHBvcyA9IDA7CkBAIC05MCw3ICs5NSw3IEBACiAJCQlQTU5DX1NFVCgweDAxKTsKIAogCQkvKiBwb2xsaW5nIEhTeW5jICovCi0JCVN5bmNIUygpOworCQljb3JnaV90cy0+bWFjaGluZm8tPndhaXRfaHN5bmMoKTsKIAkJLyogZ2V0IENDTlQgKi8KIAkJQ0NOVCh0aW1lcjEpOwogCX0KQEAgLTEwOSw3ICsxMTQsNyBAQAogCQkJQ0NOVCh0aW1lcjIpOwogCQkJaWYgKHRpbWVyMi10aW1lcjEgPiB3YWl0X3RpbWUpIHsKIAkJCQkvKiB0b28gc2xvdyAtIHRpbWVvdXQsIHRyeSBhZ2FpbiAqLwotCQkJCVN5bmNIUygpOworCQkJCWNvcmdpX3RzLT5tYWNoaW5mby0+d2FpdF9oc3luYygpOwogCQkJCS8qIGdldCBPU0NSICovCiAJCQkJQ0NOVCh0aW1lcjEpOwogCQkJCS8qIFdhaXQgYWZ0ZXIgSFN5bmMgKi8KQEAgLTEzMywyMyArMTM4LDIzIEBACiAJLyogY3JpdGljYWwgc2VjdGlvbiAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAljb3JnaV9zc3BfYWRzNzg0Nl9sb2NrKCk7Ci0Jd2FpdF90aW1lPWNhbGNfd2FpdHRpbWUoKTsKKwl3YWl0X3RpbWUgPSBjYWxjX3dhaXR0aW1lKGNvcmdpX3RzKTsKIAogCS8qIFktYXhpcyAqLwotCXN5bmNfcmVjZWl2ZV9kYXRhX3NlbmRfY21kKDAsIDEsIDF1LCB3YWl0X3RpbWUpOworCXN5bmNfcmVjZWl2ZV9kYXRhX3NlbmRfY21kKGNvcmdpX3RzLCAwLCAxLCAxdSwgd2FpdF90aW1lKTsKIAogCS8qIFktYXhpcyAqLwotCXN5bmNfcmVjZWl2ZV9kYXRhX3NlbmRfY21kKDEsIDEsIDF1LCB3YWl0X3RpbWUpOworCXN5bmNfcmVjZWl2ZV9kYXRhX3NlbmRfY21kKGNvcmdpX3RzLCAxLCAxLCAxdSwgd2FpdF90aW1lKTsKIAogCS8qIFgtYXhpcyAqLwotCXkgPSBzeW5jX3JlY2VpdmVfZGF0YV9zZW5kX2NtZCgxLCAxLCA1dSwgd2FpdF90aW1lKTsKKwl5ID0gc3luY19yZWNlaXZlX2RhdGFfc2VuZF9jbWQoY29yZ2lfdHMsIDEsIDEsIDV1LCB3YWl0X3RpbWUpOwogCiAJLyogWjEgKi8KLQl4ID0gc3luY19yZWNlaXZlX2RhdGFfc2VuZF9jbWQoMSwgMSwgM3UsIHdhaXRfdGltZSk7CisJeCA9IHN5bmNfcmVjZWl2ZV9kYXRhX3NlbmRfY21kKGNvcmdpX3RzLCAxLCAxLCAzdSwgd2FpdF90aW1lKTsKIAogCS8qIFoyICovCi0JejEgPSBzeW5jX3JlY2VpdmVfZGF0YV9zZW5kX2NtZCgxLCAxLCA0dSwgd2FpdF90aW1lKTsKLQl6MiA9IHN5bmNfcmVjZWl2ZV9kYXRhX3NlbmRfY21kKDEsIDAsIDR1LCB3YWl0X3RpbWUpOworCXoxID0gc3luY19yZWNlaXZlX2RhdGFfc2VuZF9jbWQoY29yZ2lfdHMsIDEsIDEsIDR1LCB3YWl0X3RpbWUpOworCXoyID0gc3luY19yZWNlaXZlX2RhdGFfc2VuZF9jbWQoY29yZ2lfdHMsIDEsIDAsIDR1LCB3YWl0X3RpbWUpOwogCiAJLyogUG93ZXItRG93biBFbmFibGUgKi8KIAljb3JnaV9zc3BfYWRzNzg0Nl9wdXQoKDF1IDw8IEFEU0NUUkxfQURSX1NIKSB8IEFEU0NUUkxfU1RTKTsKQEAgLTE4OSw5ICsxOTQsOSBAQAogCiBzdGF0aWMgdm9pZCB0c19pbnRlcnJ1cHRfbWFpbihzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzLCBpbnQgaXNUaW1lciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaWYgKChHUExSKENPUkdJX0dQSU9fVFBfSU5UKSAmIEdQSU9fYml0KENPUkdJX0dQSU9fVFBfSU5UKSkgPT0gMCkgeworCWlmICgoR1BMUihJUlFfVE9fR1BJTyhjb3JnaV90cy0+aXJxX2dwaW8pKSAmIEdQSU9fYml0KElSUV9UT19HUElPKGNvcmdpX3RzLT5pcnFfZ3BpbykpKSA9PSAwKSB7CiAJCS8qIERpc2FibGUgSW50ZXJydXB0ICovCi0JCXNldF9pcnFfdHlwZShDT1JHSV9JUlFfR1BJT19UUF9JTlQsIElSUVRfTk9FREdFKTsKKwkJc2V0X2lycV90eXBlKGNvcmdpX3RzLT5pcnFfZ3BpbywgSVJRVF9OT0VER0UpOwogCQlpZiAocmVhZF94eWRhdGEoY29yZ2lfdHMpKSB7CiAJCQljb3JnaV90cy0+cGVuZG93biA9IDE7CiAJCQluZXdfZGF0YShjb3JnaV90cywgcmVncyk7CkBAIC0yMTAsNyArMjE1LDcgQEAKIAkJfQogCiAJCS8qIEVuYWJsZSBGYWxsaW5nIEVkZ2UgKi8KLQkJc2V0X2lycV90eXBlKENPUkdJX0lSUV9HUElPX1RQX0lOVCwgSVJRVF9GQUxMSU5HKTsKKwkJc2V0X2lycV90eXBlKGNvcmdpX3RzLT5pcnFfZ3BpbywgSVJRVF9GQUxMSU5HKTsKIAkJY29yZ2lfdHMtPnBlbmRvd24gPSAwOwogCX0KIH0KQEAgLTI1NCw3ICsyNTksNyBAQAogCiAJCWNvcmdpX3NzcF9hZHM3ODQ2X3B1dGdldCgoNHUgPDwgQURTQ1RSTF9BRFJfU0gpIHwgQURTQ1RSTF9TVFMpOwogCQkvKiBFbmFibGUgRmFsbGluZyBFZGdlICovCi0JCXNldF9pcnFfdHlwZShDT1JHSV9JUlFfR1BJT19UUF9JTlQsIElSUVRfRkFMTElORyk7CisJCXNldF9pcnFfdHlwZShjb3JnaV90cy0+aXJxX2dwaW8sIElSUVRfRkFMTElORyk7CiAJCWNvcmdpX3RzLT5wb3dlcl9tb2RlID0gUFdSX01PREVfQUNUSVZFOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI2Nyw2ICsyNzIsNyBAQAogc3RhdGljIGludCBfX2luaXQgY29yZ2l0c19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNvcmdpX3RzICpjb3JnaV90czsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAKIAlpZiAoIShjb3JnaV90cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb3JnaV90cyksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNzUsNiArMjgxLDE0IEBACiAKIAltZW1zZXQoY29yZ2lfdHMsIDAsIHNpemVvZihzdHJ1Y3QgY29yZ2lfdHMpKTsKIAorCWNvcmdpX3RzLT5tYWNoaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwljb3JnaV90cy0+aXJxX2dwaW8gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJaWYgKGNvcmdpX3RzLT5pcnFfZ3BpbyA8IDApIHsKKwkJa2ZyZWUoY29yZ2lfdHMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlpbml0X2lucHV0X2RldigmY29yZ2lfdHMtPmlucHV0KTsKIAljb3JnaV90cy0+aW5wdXQuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwogCWNvcmdpX3RzLT5pbnB1dC5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOwpAQCAtMjkzLDggKzMwNyw3IEBACiAJY29yZ2lfdHMtPmlucHV0LmlkLnByb2R1Y3QgPSAweDAwMDI7CiAJY29yZ2lfdHMtPmlucHV0LmlkLnZlcnNpb24gPSAweDAxMDA7CiAKLQlweGFfZ3Bpb19tb2RlKENPUkdJX0dQSU9fVFBfSU5UIHwgR1BJT19JTik7Ci0JcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX0hTWU5DIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShJUlFfVE9fR1BJTyhjb3JnaV90cy0+aXJxX2dwaW8pIHwgR1BJT19JTik7CiAKIAkvKiBJbml0aWFpemUgQURTNzg0NiBEaWZmZXJlbmNlIFJlZmVyZW5jZSBtb2RlICovCiAJY29yZ2lfc3NwX2Fkczc4NDZfcHV0Z2V0KCgxdSA8PCBBRFNDVFJMX0FEUl9TSCkgfCBBRFNDVFJMX1NUUyk7CkBAIC0zMTMsMTQgKzMyNiwxNCBAQAogCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmY29yZ2lfdHMtPmlucHV0KTsKIAljb3JnaV90cy0+cG93ZXJfbW9kZSA9IFBXUl9NT0RFX0FDVElWRTsKIAotCWlmIChyZXF1ZXN0X2lycShDT1JHSV9JUlFfR1BJT19UUF9JTlQsIHRzX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAidHMiLCBjb3JnaV90cykpIHsKKwlpZiAocmVxdWVzdF9pcnEoY29yZ2lfdHMtPmlycV9ncGlvLCB0c19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgInRzIiwgY29yZ2lfdHMpKSB7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZjb3JnaV90cy0+aW5wdXQpOwogCQlrZnJlZShjb3JnaV90cyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyogRW5hYmxlIEZhbGxpbmcgRWRnZSAqLwotCXNldF9pcnFfdHlwZShDT1JHSV9JUlFfR1BJT19UUF9JTlQsIElSUVRfRkFMTElORyk7CisJc2V0X2lycV90eXBlKGNvcmdpX3RzLT5pcnFfZ3BpbywgSVJRVF9GQUxMSU5HKTsKIAogCXByaW50ayhLRVJOX0lORk8gImlucHV0OiBDb3JnaSBUb3VjaHNjcmVlbiBSZWdpc3RlcmVkXG4iKTsKIApAQCAtMzMxLDggKzM0NCw5IEBACiB7CiAJc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZnJlZV9pcnEoQ09SR0lfSVJRX0dQSU9fVFBfSU5ULCBOVUxMKTsKKwlmcmVlX2lycShjb3JnaV90cy0+aXJxX2dwaW8sIE5VTEwpOwogCWRlbF90aW1lcl9zeW5jKCZjb3JnaV90cy0+dGltZXIpOworCWNvcmdpX3RzLT5tYWNoaW5mby0+cHV0X2hzeW5jKCk7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmNvcmdpX3RzLT5pbnB1dCk7CiAJa2ZyZWUoY29yZ2lfdHMpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggODMzN2IwZi4uNDg2NmZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC02MSw2ICs2MSw3IEBACiAJe1BDSV9WRU5ET1JfSURfRElHSSwgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fRSwiRGlnaSBJbnRlcm5hdGlvbmFsIiwgIkRpZ2kgRGF0YUZpcmUgTWljcm8gViAoRXVyb3BlKSJ9LAogCXtQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0lPTTJfQSwiRGlnaSBJbnRlcm5hdGlvbmFsIiwgIkRpZ2kgRGF0YUZpcmUgTWljcm8gViBJT00yIChOb3J0aCBBbWVyaWNhKSJ9LAogCXtQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0EsIkRpZ2kgSW50ZXJuYXRpb25hbCIsICJEaWdpIERhdGFGaXJlIE1pY3JvIFYgKE5vcnRoIEFtZXJpY2EpIn0sCisJe1BDSV9WRU5ET1JfSURfU0lURUNPTSwgUENJX0RFVklDRV9JRF9TSVRFQ09NX0RDMTA1VjIsICJTaXRlY29tIEV1cm9wZSIsICJEQy0xMDUgSVNETiBQQ0kifSwKIAl7MCwgMCwgTlVMTCwgTlVMTH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKaW5kZXggYzZiNWJmNy4uZGMzMzRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwpAQCAtNjExLDcgKzYxMSw3IEBACiB9IC8qIHNlZGxiYXVlcl9ldmVudCAqLwogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgc2VkbGJhdWVyX2lkc1tdID0gewotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIlNFRExCQVVFUiIsICJzcGVlZCBzdGFyIElJIiwgIlYgMy4xIiwgIihjKSA5MyAtIDk4IGNiICIsIDB4ODFmYjc5ZjUsIDB4ZjM2MTJlMWQsIDB4NmI5NWM3OGEsIDB4NTBkNDE0OWMpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiU0VETEJBVUVSIiwgInNwZWVkIHN0YXIgSUkiLCAiViAzLjEiLCAweDgxZmI3OWY1LCAweGYzNjEyZTFkLCAweDZiOTVjNzhhKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIlNFRExCQVVFUiIsICJJU0ROLUFkYXB0ZXIiLCAiNEQ2NyIsIDB4ODFmYjc5ZjUsIDB4ZTRlOWJjMTIsIDB4Mzk3YjdlOTApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiU0VETEJBVUVSIiwgIklTRE4tQWRhcHRlciIsICI0RDk4IiwgMHg4MWZiNzlmNSwgMHhlNGU5YmMxMiwgMHgyZTVjN2ZjZSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJTRURMQkFVRVIiLCAiSVNETi1BZGFwdGVyIiwgIiAoQykgOTMtOTQgVksiLCAweDgxZmI3OWY1LCAweGU0ZTliYzEyLCAweDhkYjE0M2ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaAppbmRleCAwZmRhNWM4Li45ZmZhYWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCkBAIC00NjYsMTAgKzQ2NiwxMCBAQAogI2RlZmluZSBfX2RlYnVnX3ZhcmlhYmxlIHN0NTQ4MV9kZWJ1ZwogI2luY2x1ZGUgImhpc2F4X2RlYnVnLmgiCiAKLSNpZmRlZiBDT05GSUdfSElTQVhfREVCVUcKLQogZXh0ZXJuIGludCBzdDU0ODFfZGVidWc7CiAKKyNpZmRlZiBDT05GSUdfSElTQVhfREVCVUcKKwogI2RlZmluZSBEQkdfSVNPX1BBQ0tFVChsZXZlbCx1cmIpIFwKICAgaWYgKGxldmVsICYgX19kZWJ1Z192YXJpYWJsZSkgZHVtcF9pc29fcGFja2V0KF9fRlVOQ1RJT05fXyx1cmIpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMKaW5kZXggMmZjZDA5My4uMGEyNTM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMKQEAgLTE3MiwxNCArMTcyLDE4IEBACiAJdGVzdF9hbmRfY2xlYXJfYml0KGJ1Zl9uciwgJmJfb3V0LT5idXN5KTsKIAogCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyA8IDApKSB7Ci0JCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmIHVyYi0+c3RhdHVzICE9IC1FU0hVVERPV04pIHsKLQkJCVdBUk4oInVyYiBzdGF0dXMgJWQiLHVyYi0+c3RhdHVzKTsKLQkJCWlmIChiX291dC0+YnVzeSA9PSAwKSB7Ci0JCQkJc3Q1NDgxX3VzYl9waXBlX3Jlc2V0KGFkYXB0ZXIsIChiY3MtPmNoYW5uZWwrMSkqMiB8IFVTQl9ESVJfT1VULCBOVUxMLCBOVUxMKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCURCRygxLCJ1cmIga2lsbGVkIik7IAotCQkJcmV0dXJuOyAvLyBHaXZlIHVwCisJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJCWNhc2UgLUVOT0VOVDoKKwkJCWNhc2UgLUVTSFVURE9XTjoKKwkJCWNhc2UgLUVDT05OUkVTRVQ6CisJCQkJREJHKDQsInVyYiBraWxsZWQgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQkJCXJldHVybjsgLy8gR2l2ZSB1cAorCQkJZGVmYXVsdDogCisJCQkJV0FSTigidXJiIHN0YXR1cyAlZCIsdXJiLT5zdGF0dXMpOworCQkJCWlmIChiX291dC0+YnVzeSA9PSAwKSB7CisJCQkJCXN0NTQ4MV91c2JfcGlwZV9yZXNldChhZGFwdGVyLCAoYmNzLT5jaGFubmVsKzEpKjIgfCBVU0JfRElSX09VVCwgTlVMTCwgTlVMTCk7CisJCQkJfQorCQkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC0yMDUsNyArMjA5LDkgQEAKIAliY3MtPm1vZGUgPSBtb2RlOwogCiAJLy8gQ2FuY2VsIGFsbCBVU0IgdHJhbnNmZXJzIG9uIHRoaXMgQiBjaGFubmVsCisJYl9vdXQtPnVyYlswXS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKIAl1c2JfdW5saW5rX3VyYihiX291dC0+dXJiWzBdKTsKKwliX291dC0+dXJiWzFdLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOwogCXVzYl91bmxpbmtfdXJiKGJfb3V0LT51cmJbMV0pOwogCWJfb3V0LT5idXN5ID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2QuYwppbmRleCAwNzFiMWQzLi45NDFmNzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2QuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2QuYwpAQCAtMzgyLDE2ICszODIsMjAgQEAKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoYnVmX25yLCAmZF9vdXQtPmJ1c3kpOwogCiAJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzIDwgMCkpIHsKLQkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQgJiYgdXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikgewotCQkJV0FSTigidXJiIHN0YXR1cyAlZCIsdXJiLT5zdGF0dXMpOwotCQkJaWYgKGRfb3V0LT5idXN5ID09IDApIHsKLQkJCQlzdDU0ODFfdXNiX3BpcGVfcmVzZXQoYWRhcHRlciwgRVBfRF9PVVQgfCBVU0JfRElSX09VVCwgZmlmb19yZXNldGVkLCBhZGFwdGVyKTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCURCRygxLCJ1cmIga2lsbGVkIik7IAotCQkJcmV0dXJuOyAvLyBHaXZlIHVwCisJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJCWNhc2UgLUVOT0VOVDoKKwkJCWNhc2UgLUVTSFVURE9XTjoKKwkJCWNhc2UgLUVDT05OUkVTRVQ6CisJCQkJREJHKDEsInVyYiBraWxsZWQgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDogCisJCQkJV0FSTigidXJiIHN0YXR1cyAlZCIsdXJiLT5zdGF0dXMpOworCQkJCWlmIChkX291dC0+YnVzeSA9PSAwKSB7CisJCQkJCXN0NTQ4MV91c2JfcGlwZV9yZXNldChhZGFwdGVyLCBFUF9EX09VVCB8IFVTQl9ESVJfT1VULCBmaWZvX3Jlc2V0ZWQsIGFkYXB0ZXIpOworCQkJCX0KKwkJCQlicmVhazsKIAkJfQorCQlyZXR1cm47IC8vIEdpdmUgdXAKIAl9CiAKIAlGc21FdmVudCgmYWRhcHRlci0+ZF9vdXQuZnNtLCBFVl9ET1VUX0NPTVBMRVRFLCAodm9pZCAqKSBidWZfbnIpOwpAQCAtNzA5LDE0ICs3MTMsMTQgQEAKIAogCWFkYXB0ZXItPmwxbS5mc20gPSAmbDFmc207CiAJYWRhcHRlci0+bDFtLnN0YXRlID0gU1RfTDFfRjM7Ci0JYWRhcHRlci0+bDFtLmRlYnVnID0gMTsKKwlhZGFwdGVyLT5sMW0uZGVidWcgPSBzdDU0ODFfZGVidWcgJiAweDEwMDsKIAlhZGFwdGVyLT5sMW0udXNlcmRhdGEgPSBhZGFwdGVyOwogCWFkYXB0ZXItPmwxbS5wcmludGRlYnVnID0gbDFtX2RlYnVnOwogCUZzbUluaXRUaW1lcigmYWRhcHRlci0+bDFtLCAmYWRhcHRlci0+dGltZXIpOwogCiAJYWRhcHRlci0+ZF9vdXQuZnNtLmZzbSA9ICZkb3V0X2ZzbTsKIAlhZGFwdGVyLT5kX291dC5mc20uc3RhdGUgPSBTVF9ET1VUX05PTkU7Ci0JYWRhcHRlci0+ZF9vdXQuZnNtLmRlYnVnID0gMTsKKwlhZGFwdGVyLT5kX291dC5mc20uZGVidWcgPSBzdDU0ODFfZGVidWcgJiAweDEwMDsKIAlhZGFwdGVyLT5kX291dC5mc20udXNlcmRhdGEgPSBhZGFwdGVyOwogCWFkYXB0ZXItPmRfb3V0LmZzbS5wcmludGRlYnVnID0gZG91dF9kZWJ1ZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwppbmRleCA3YWE4MTBkLi4yY2Y1ZDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwpAQCAtNDMsMTAgKzQzLDEwIEBACiBtb2R1bGVfcGFyYW0obnVtYmVyX29mX2xlZHMsIGludCwgMCk7CiAKICNpZmRlZiBDT05GSUdfSElTQVhfREVCVUcKLXN0YXRpYyBpbnQgZGVidWcgPSAweDE7CitzdGF0aWMgaW50IGRlYnVnID0gMDsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLWludCBzdDU0ODFfZGVidWc7CiAjZW5kaWYKK2ludCBzdDU0ODFfZGVidWc7CiAKIHN0YXRpYyBMSVNUX0hFQUQoYWRhcHRlcl9saXN0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKaW5kZXggYWI2MjIyMy4uZmZkNWIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCkBAIC0xMzIsMTEgKzEzMiwxNSBAQAogCXN0cnVjdCBjdHJsX21zZyAqY3RybF9tc2c7CiAJCiAJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzIDwgMCkpIHsKLQkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQgJiYgdXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikgewotCQkJV0FSTigidXJiIHN0YXR1cyAlZCIsdXJiLT5zdGF0dXMpOwotCQl9IGVsc2UgewotCQkJREJHKDEsInVyYiBraWxsZWQiKTsKLQkJCXJldHVybjsgLy8gR2l2ZSB1cAorCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCQljYXNlIC1FTk9FTlQ6CisJCQljYXNlIC1FU0hVVERPV046CisJCQljYXNlIC1FQ09OTlJFU0VUOgorCQkJCURCRygxLCJ1cmIga2lsbGVkIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJCQlyZXR1cm47IC8vIEdpdmUgdXAKKwkJCWRlZmF1bHQ6IAorCQkJCVdBUk4oInVyYiBzdGF0dXMgJWQiLHVyYi0+c3RhdHVzKTsKKwkJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMTg0LDIyICsxODgsMjIgQEAKIAlpbnQgc3RhdHVzOwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCURCRygxLCAidXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJV0FSTigibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHVyYi0+c3RhdHVzKTsKLQkJZ290byBleGl0OworCQljYXNlIDA6CisJCQkvKiBzdWNjZXNzICovCisJCQlicmVhazsKKwkJY2FzZSAtRUNPTk5SRVNFVDoKKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FU0hVVERPV046CisJCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQkJREJHKDIsICJ1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJCQlyZXR1cm47CisJCWRlZmF1bHQ6CisJCQlXQVJOKCJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgdXJiLT5zdGF0dXMpOworCQkJZ290byBleGl0OwogCX0KIAogCQotCURCR19QQUNLRVQoMSwgZGF0YSwgSU5UX1BLVF9TSVpFKTsKKwlEQkdfUEFDS0VUKDIsIGRhdGEsIElOVF9QS1RfU0laRSk7CiAJCQogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkgewogCQlnb3RvIGV4aXQ7CkBAIC0yNTAsNyArMjU0LDcgQEAKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJdTggKmJ1ZjsKIAkKLQlEQkcoMSwiIik7CisJREJHKDIsIiIpOwogCQogCWlmICgoc3RhdHVzID0gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKGRldikpIDwgMCkgewogCQlXQVJOKCJyZXNldF9jb25maWd1cmF0aW9uIGZhaWxlZCxzdGF0dXM9JWQiLHN0YXR1cyk7CkBAIC0zMzAsMTUgKzMzNCwxNyBAQAogCURCRygxLCIiKTsKIAogCS8vIFN0b3AgYW5kIGZyZWUgQ29udHJvbCBhbmQgSW50ZXJydXB0IFVSQnMKLQl1c2JfdW5saW5rX3VyYihjdHJsLT51cmIpOworCXVzYl9raWxsX3VyYihjdHJsLT51cmIpOwogCWlmIChjdHJsLT51cmItPnRyYW5zZmVyX2J1ZmZlcikKIAkJa2ZyZWUoY3RybC0+dXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCXVzYl9mcmVlX3VyYihjdHJsLT51cmIpOworCWN0cmwtPnVyYiA9IE5VTEw7CiAKLQl1c2JfdW5saW5rX3VyYihpbnRyLT51cmIpOworCXVzYl9raWxsX3VyYihpbnRyLT51cmIpOwogCWlmIChpbnRyLT51cmItPnRyYW5zZmVyX2J1ZmZlcikKIAkJa2ZyZWUoaW50ci0+dXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCXVzYl9mcmVlX3VyYihpbnRyLT51cmIpOworCWN0cmwtPnVyYiA9IE5VTEw7CiB9CiAKIC8qCkBAIC00MDYsNiArNDEyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmdXJiLT5sb2NrKTsKIAl1cmItPmRldj1kZXY7CiAJdXJiLT5waXBlPXBpcGU7CisJdXJiLT5pbnRlcnZhbCA9IDE7CiAJdXJiLT50cmFuc2Zlcl9idWZmZXI9YnVmOwogCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBudW1fcGFja2V0czsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg9bnVtX3BhY2tldHMqcGFja2V0X3NpemU7CkBAIC00NTIsNyArNDU5LDkgQEAKIAkJaWYgKHVyYltqXSkgewogCQkJaWYgKHVyYltqXS0+dHJhbnNmZXJfYnVmZmVyKQogCQkJCWtmcmVlKHVyYltqXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVyYltqXS0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKIAkJCXVzYl9mcmVlX3VyYih1cmJbal0pOworCQkJdXJiW2pdID0gTlVMTDsKIAkJfQogCX0KIAlyZXR1cm4gcmV0dmFsOwpAQCAtNDYzLDEwICs0NzIsMTEgQEAKIAlpbnQgajsKIAogCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJdXNiX3VubGlua191cmIodXJiW2pdKTsKKwkJdXNiX2tpbGxfdXJiKHVyYltqXSk7CiAJCWlmICh1cmJbal0tPnRyYW5zZmVyX2J1ZmZlcikKIAkJCWtmcmVlKHVyYltqXS0+dHJhbnNmZXJfYnVmZmVyKTsJCQkKIAkJdXNiX2ZyZWVfdXJiKHVyYltqXSk7CisJCXVyYltqXSA9IE5VTEw7CiAJfQogfQogCkBAIC00ODUsMTEgKzQ5NSwxNSBAQAogCWludCBsZW4sIGNvdW50LCBzdGF0dXM7CiAKIAlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPCAwKSkgewotCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCAmJiB1cmItPnN0YXR1cyAhPSAtRVNIVVRET1dOKSB7Ci0JCQlXQVJOKCJ1cmIgc3RhdHVzICVkIix1cmItPnN0YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQlEQkcoMSwidXJiIGtpbGxlZCIpOwotCQkJcmV0dXJuOyAvLyBHaXZlIHVwCisJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJCWNhc2UgLUVOT0VOVDoKKwkJCWNhc2UgLUVTSFVURE9XTjoKKwkJCWNhc2UgLUVDT05OUkVTRVQ6CisJCQkJREJHKDEsInVyYiBraWxsZWQgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQkJCXJldHVybjsgLy8gR2l2ZSB1cAorCQkJZGVmYXVsdDogCisJCQkJV0FSTigidXJiIHN0YXR1cyAlZCIsdXJiLT5zdGF0dXMpOworCQkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC02MzEsNyArNjQ1LDkgQEAKIAogCWluLT5tb2RlID0gbW9kZTsKIAorCWluLT51cmJbMF0tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CiAJdXNiX3VubGlua191cmIoaW4tPnVyYlswXSk7CisJaW4tPnVyYlsxXS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKIAl1c2JfdW5saW5rX3VyYihpbi0+dXJiWzFdKTsKIAogCWlmIChpbi0+bW9kZSAhPSBMMV9NT0RFX05VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMgYi9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCmluZGV4IDQwYjBkZjAuLjFlYmVkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL3NjL2luaXQuYwpAQCAtODcsNyArODcsNyBAQAogCQkJICovCiAJCQlmb3IgKGkgPSAwIDsgaSA8IE1BWF9JT19SRUdTIC0gMSA7IGkrKykgewogCQkJCWlmKCFyZXF1ZXN0X3JlZ2lvbihpb1tiXSArIGkgKiAweDQwMCwgMSwgInNjIHRlc3QiKSkgewotCQkJCQlwcl9kZWJ1ZygiY2hlY2tfcmVnaW9uIGZvciAweCV4IGZhaWxlZFxuIiwgaW9bYl0gKyBpICogMHg0MDApOworCQkJCQlwcl9kZWJ1ZygicmVxdWVzdF9yZWdpb24gZm9yIDB4JXggZmFpbGVkXG4iLCBpb1tiXSArIGkgKiAweDQwMCk7CiAJCQkJCWlvW2JdID0gMDsKIAkJCQkJYnJlYWs7CiAJCQkJfSBlbHNlCkBAIC0xODEsNyArMTgxLDcgQEAKIAkJCWZvciAoaSA9IFNSQU1fTUlOIDsgaSA8IFNSQU1fTUFYIDsgaSArPSBTUkFNX1BBR0VTSVpFKSB7CiAJCQkJcHJfZGVidWcoIkNoZWNraW5nIFJBTSBhZGRyZXNzIDB4JXguLi5cbiIsIGkpOwogCQkJCWlmKHJlcXVlc3RfcmVnaW9uKGksIFNSQU1fUEFHRVNJWkUsICJzYyB0ZXN0IikpIHsKLQkJCQkJcHJfZGVidWcoIiAgY2hlY2tfcmVnaW9uIHN1Y2NlZWRlZFxuIik7CisJCQkJCXByX2RlYnVnKCIgIHJlcXVlc3RfcmVnaW9uIHN1Y2NlZWRlZFxuIik7CiAJCQkJCW1vZGVsID0gaWRlbnRpZnlfYm9hcmQoaSwgaW9bYl0pOwogCQkJCQlyZWxlYXNlX3JlZ2lvbihpLCBTUkFNX1BBR0VTSVpFKTsKIAkJCQkJaWYgKG1vZGVsID49IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDYuaCBiL2RyaXZlcnMvbWQvcmFpZDYuaAppbmRleCBmODBlZTYzLi4zMWNiZWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2LmgKKysrIGIvZHJpdmVycy9tZC9yYWlkNi5oCkBAIC02OSw5ICs2OSwxMyBAQAogI2RlZmluZSBfX2luaXQKICNkZWZpbmUgX19leGl0CiAjZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX19hdHRyaWJ1dGVfXygoY29uc3QpKQorI2RlZmluZSBub2lubGluZSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCiAKICNkZWZpbmUgcHJlZW1wdF9lbmFibGUoKQogI2RlZmluZSBwcmVlbXB0X2Rpc2FibGUoKQorI2RlZmluZSBjcHVfaGFzX2ZlYXR1cmUoeCkgMQorI2RlZmluZSBlbmFibGVfa2VybmVsX2FsdGl2ZWMoKQorI2RlZmluZSBkaXNhYmxlX2tlcm5lbF9hbHRpdmVjKCkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsZ29zLmMgYi9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYwppbmRleCBhY2YzODZmLi41MWM2M2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYworKysgYi9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgInJhaWQ2LmgiCiAjaWZuZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjZW5kaWYKIAogc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2NhbGw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCmluZGV4IDFkZThmMDMuLmI5YWZkMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCkBAIC0yNywxNiArMjcsMjAgQEAKICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCiAjaW5jbHVkZSA8YWx0aXZlYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCisjIGluY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyMgaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjZW5kaWYKIAogLyoKLSAqIFRoaXMgaXMgdGhlIEMgZGF0YSB0eXBlIHRvIHVzZQorICogVGhpcyBpcyB0aGUgQyBkYXRhIHR5cGUgdG8gdXNlLiAgV2UgdXNlIGEgdmVjdG9yIG9mCisgKiBzaWduZWQgY2hhciBzbyB2ZWNfY21wZ3QoKSB3aWxsIGdlbmVyYXRlIHRoZSByaWdodAorICogaW5zdHJ1Y3Rpb24uCiAgKi8KIAotdHlwZWRlZiB2ZWN0b3IgdW5zaWduZWQgY2hhciB1bmF0aXZlX3Q7Cit0eXBlZGVmIHZlY3RvciBzaWduZWQgY2hhciB1bmF0aXZlX3Q7CiAKLSNkZWZpbmUgTkJZVEVTKHgpICgodmVjdG9yIHVuc2lnbmVkIGNoYXIpIHt4LHgseCx4LCB4LHgseCx4LCB4LHgseCx4LCB4LHgseCx4fSkKKyNkZWZpbmUgTkJZVEVTKHgpICgodmVjdG9yIHNpZ25lZCBjaGFyKSB7eCx4LHgseCwgeCx4LHgseCwgeCx4LHgseCwgeCx4LHgseH0pCiAjZGVmaW5lIE5TSVpFCXNpemVvZih1bmF0aXZlX3QpCiAKIC8qCkBAIC0xMDgsNyArMTEyLDExIEBACiBpbnQgcmFpZDZfaGF2ZV9hbHRpdmVjKHZvaWQpCiB7CiAJLyogVGhpcyBhc3N1bWVzIGVpdGhlciBhbGwgQ1BVcyBoYXZlIEFsdGl2ZWMgb3Igbm9uZSBkb2VzICovCisjIGlmZGVmIF9fS0VSTkVMX18KIAlyZXR1cm4gY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQUxUSVZFQyk7CisjIGVsc2UKKwlyZXR1cm4gMTsKKyMgZW5kaWYKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCmluZGV4IDU1NzgwNjcuLjc4ZTAzOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCkBAIC04LDYgKzgsOCBAQAogQ0ZMQUdTCSA9IC1JLi4gLWcgJChPUFRGTEFHUykKIExECSA9IGxkCiBQRVJMCSA9IHBlcmwKK0FSCSA9IGFyCitSQU5MSUIJID0gcmFubGliCiAKIC5jLm86CiAJJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CkBAIC0xOCwxOCArMjAsMzMgQEAKICUudWM6IC4uLyUudWMKIAljcCAtZiAkPCAkQAogCi1hbGw6CXJhaWQ2Lm8gcmFpZDZ0ZXN0CithbGw6CXJhaWQ2LmEgcmFpZDZ0ZXN0CiAKLXJhaWQ2Lm86IHJhaWQ2aW50MS5vIHJhaWQ2aW50Mi5vIHJhaWQ2aW50NC5vIHJhaWQ2aW50OC5vIHJhaWQ2aW50MTYubyBcCityYWlkNi5hOiByYWlkNmludDEubyByYWlkNmludDIubyByYWlkNmludDQubyByYWlkNmludDgubyByYWlkNmludDE2Lm8gXAogCSByYWlkNmludDMyLm8gXAogCSByYWlkNm1teC5vIHJhaWQ2c3NlMS5vIHJhaWQ2c3NlMi5vIFwKKwkgcmFpZDZhbHRpdmVjMS5vIHJhaWQ2YWx0aXZlYzIubyByYWlkNmFsdGl2ZWM0Lm8gcmFpZDZhbHRpdmVjOC5vIFwKIAkgcmFpZDZyZWNvdi5vIHJhaWQ2YWxnb3MubyBcCiAJIHJhaWQ2dGFibGVzLm8KLQkkKExEKSAtciAtbyAkQCAkXgorCSBybSAtZiAkQAorCSAkKEFSKSBjcSAkQCAkXgorCSAkKFJBTkxJQikgJEAKIAotcmFpZDZ0ZXN0OiByYWlkNi5vIHRlc3QuYworcmFpZDZ0ZXN0OiB0ZXN0LmMgcmFpZDYuYQogCSQoQ0MpICQoQ0ZMQUdTKSAtbyByYWlkNnRlc3QgJF4KIAorcmFpZDZhbHRpdmVjMS5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCisJJChQRVJMKSAuLi91bnJvbGwucGwgMSA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACisKK3JhaWQ2YWx0aXZlYzIuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAorCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDIgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorCityYWlkNmFsdGl2ZWM0LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKKwkkKFBFUkwpIC4uL3Vucm9sbC5wbCA0IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKKworcmFpZDZhbHRpdmVjOC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCisJJChQRVJMKSAuLi91bnJvbGwucGwgOCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACisKIHJhaWQ2aW50MS5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKIAkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxIDwgcmFpZDZpbnQudWMgPiAkQAogCkBAIC01Miw3ICs2OSw3IEBACiAJLi9ta3RhYmxlcyA+IHJhaWQ2dGFibGVzLmMKIAogY2xlYW46Ci0Jcm0gLWYgKi5vIG1rdGFibGVzIG1rdGFibGVzLmMgcmFpZDZpbnQudWMgcmFpZDYqLmMgcmFpZDZ0ZXN0CisJcm0gLWYgKi5vICouYSBta3RhYmxlcyBta3RhYmxlcy5jIHJhaWQ2aW50LnVjIHJhaWQ2Ki5jIHJhaWQ2dGVzdAogCiBzcG90bGVzczogY2xlYW4KIAlybSAtZiAqfgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwppbmRleCA4YjRhZDcwLi44NzdjNzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCi0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIGNoZWNrX3JlZ2lvbiwgcmVxdWVzdF9yZWdpb24JKi8KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwppbmRleCAwMTNjODM1Li41MzE5YTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzIAkJCSovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBjaGVja19yZWdpb24sIHJlcXVlc3RfcmVnaW9uCSovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCmluZGV4IDUzZDM5OWIuLjAyMjkxM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzIAkJCSovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBjaGVja19yZWdpb24sIHJlcXVlc3RfcmVnaW9uCSovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKaW5kZXggMjAyYmZlNi4uNjQxOGYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCkBAIC0xNyw3ICsxNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogY2hlY2tfcmVnaW9uLCByZXF1ZXN0X3JlZ2lvbgkqLworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKaW5kZXggYzAwMjQ1ZC4uYjIyNTZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKQEAgLTEwLDcgKzEwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzIAkJCSovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBjaGVja19yZWdpb24sIHJlcXVlc3RfcmVnaW9uCSovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwppbmRleCAzYTQ2NGEwLi42ZjAzY2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBfX3NldHVwCQkJKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogY2hlY2tfcmVnaW9uLCByZXF1ZXN0X3JlZ2lvbgkqLworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCmluZGV4IDA3MzJlZmQuLjcxOTcxZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzIAkJCSovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBjaGVja19yZWdpb24sIHJlcXVlc3RfcmVnaW9uCSovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCmluZGV4IDI0OGQ2N2YuLmIwMzU3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzIAkJCSovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBjaGVja19yZWdpb24sIHJlcXVlc3RfcmVnaW9uCSovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwppbmRleCBkN2RhOTAxLi5mMzA0ZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBjaGVja19yZWdpb24sIHJlcXVlc3RfcmVnaW9uICAgKi8KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSAgKi8KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CS8qIHJhZGlvIGNhcmQgc3RhdHVzIHJlcG9ydAkgICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlciAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKaW5kZXggMzQyZjkyZC4uNGM2ZDZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogY2hlY2tfcmVnaW9uLCByZXF1ZXN0X3JlZ2lvbiAgICovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkgICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5LCBtc2xlZXAgICAgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlciAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggYzkxMDZiMS4uNDMzNDc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTIyMSw5ICsyMjEsNyBAQAogCWludCBlcnI7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwotCWlmIChjb3JlLT50ZGE5ODg3X2NvbmYpIHsKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKLQl9CisJY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAogCWR2Yl9wbGxfY29uZmlndXJlKGNvcmUtPnBsbF9kZXNjLCBidWYsIHBhcmFtcy0+ZnJlcXVlbmN5LCAwKTsKIAlkcHJpbnRrKDEsICIlczogdHVuZXIgYXQgMHglMDJ4IGJ5dGVzOiAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCkBAIC00MDIsNiArNDAwLDkgQEAKIAkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy0+aW5mby5mcmVxdWVuY3lfbWF4ID0gZGV2LT5jb3JlLT5wbGxfZGVzYy0+bWF4OwogCX0KIAorCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCisJY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KIAlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyKCZkZXYtPmR2YiwgVEhJU19NT0RVTEUsIGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWcgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWcKaW5kZXggMzNmMjA5YS4uMTg4M2QyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vS2NvbmZpZwpAQCAtMzUsNiArMzUsMjMgQEAKIAkgIExTSUZDOTI5WAogCSAgTFNJRkM5MjlYTAogCitjb25maWcgRlVTSU9OX1NBUworCXRyaXN0YXRlICJGdXNpb24gTVBUIFNjc2lIb3N0IGRyaXZlcnMgZm9yIFNBUyIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisgCXNlbGVjdCBGVVNJT04KKwlzZWxlY3QgU0NTSV9TQVNfQVRUUlMKKwktLS1oZWxwLS0tCisJICBTQ1NJIEhPU1Qgc3VwcG9ydCBmb3IgYSBTQVMgaG9zdCBhZGFwdGVycy4KKworCSAgTGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbGxlcnM6CisKKwkgIExTSVNBUzEwNjQKKwkgIExTSVNBUzEwNjYKKwkgIExTSVNBUzEwNjgKKwkgIExTSVNBUzEwNjRFCisJICBMU0lTQVMxMDY2RQorCSAgTFNJU0FTMTA2OEUKKwogY29uZmlnIEZVU0lPTl9NQVhfU0dFCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyIGdhdGhlciBlbnRyaWVzICgxNiAtIDEyOCkiCiAJZGVwZW5kcyBvbiBGVVNJT04KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL01ha2VmaWxlCmluZGV4IDFkMmY5ZGIuLjhhMmUyNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9NYWtlZmlsZQpAQCAtMzQsNSArMzQsNiBAQAogCiBvYmotJChDT05GSUdfRlVTSU9OX1NQSSkJKz0gbXB0YmFzZS5vIG1wdHNjc2loLm8gbXB0c3BpLm8KIG9iai0kKENPTkZJR19GVVNJT05fRkMpCQkrPSBtcHRiYXNlLm8gbXB0c2NzaWgubyBtcHRmYy5vCitvYmotJChDT05GSUdfRlVTSU9OX1NBUykJKz0gbXB0YmFzZS5vIG1wdHNjc2loLm8gbXB0c2FzLm8KIG9iai0kKENPTkZJR19GVVNJT05fQ1RMKQkrPSBtcHRjdGwubwogb2JqLSQoQ09ORklHX0ZVU0lPTl9MQU4pCSs9IG1wdGxhbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IGY1MTdkMDYuLjc5MGEyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xMzUsMTMgKzEzNSwxMiBAQAogCiBzdGF0aWMgdm9pZAlNcHREaXNwbGF5SW9jQ2FwYWJpbGl0aWVzKE1QVF9BREFQVEVSICppb2MpOwogc3RhdGljIGludAlNYWtlSW9jUmVhZHkoTVBUX0FEQVBURVIgKmlvYywgaW50IGZvcmNlLCBpbnQgc2xlZXBGbGFnKTsKLS8vc3RhdGljIHUzMgltcHRfR2V0SW9jU3RhdGUoTVBUX0FEQVBURVIgKmlvYywgaW50IGNvb2tlZCk7CiBzdGF0aWMgaW50CUdldElvY0ZhY3RzKE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcsIGludCByZWFzb24pOwogc3RhdGljIGludAlHZXRQb3J0RmFjdHMoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvcnRudW0sIGludCBzbGVlcEZsYWcpOwogc3RhdGljIGludAlTZW5kSW9jSW5pdChNUFRfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBGbGFnKTsKIHN0YXRpYyBpbnQJU2VuZFBvcnRFbmFibGUoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvcnRudW0sIGludCBzbGVlcEZsYWcpOwogc3RhdGljIGludAltcHRfZG9fdXBsb2FkKE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcpOwotc3RhdGljIGludAltcHRfZG93bmxvYWRib290KE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcpOworc3RhdGljIGludAltcHRfZG93bmxvYWRib290KE1QVF9BREFQVEVSICppb2MsIE1waUZ3SGVhZGVyX3QgKnBGd0hlYWRlciwgaW50IHNsZWVwRmxhZyk7CiBzdGF0aWMgaW50CW1wdF9kaWFnX3Jlc2V0KE1QVF9BREFQVEVSICppb2MsIGludCBpZ25vcmUsIGludCBzbGVlcEZsYWcpOwogc3RhdGljIGludAlLaWNrU3RhcnQoTVBUX0FEQVBURVIgKmlvYywgaW50IGlnbm9yZSwgaW50IHNsZWVwRmxhZyk7CiBzdGF0aWMgaW50CVNlbmRJb2NSZXNldChNUFRfQURBUFRFUiAqaW9jLCB1OCByZXNldF90eXBlLCBpbnQgc2xlZXBGbGFnKTsKQEAgLTE1Miw2ICsxNTEsNyBAQAogc3RhdGljIGludAlHZXRMYW5Db25maWdQYWdlcyhNUFRfQURBUFRFUiAqaW9jKTsKIHN0YXRpYyBpbnQJR2V0RmNQb3J0UGFnZTAoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvcnRudW0pOwogc3RhdGljIGludAlHZXRJb1VuaXRQYWdlMihNUFRfQURBUFRFUiAqaW9jKTsKK2ludAkJbXB0YmFzZV9zYXNfcGVyc2lzdF9vcGVyYXRpb24oTVBUX0FEQVBURVIgKmlvYywgdTggcGVyc2lzdF9vcGNvZGUpOwogc3RhdGljIGludAltcHRfR2V0U2NzaVBvcnRTZXR0aW5ncyhNUFRfQURBUFRFUiAqaW9jLCBpbnQgcG9ydG51bSk7CiBzdGF0aWMgaW50CW1wdF9yZWFkU2NzaURldmljZVBhZ2VIZWFkZXJzKE1QVF9BREFQVEVSICppb2MsIGludCBwb3J0bnVtKTsKIHN0YXRpYyB2b2lkIAltcHRfcmVhZF9pb2NfcGdfMShNUFRfQURBUFRFUiAqaW9jKTsKQEAgLTE1OSw2ICsxNTksOCBAQAogc3RhdGljIHZvaWQJbXB0X3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyBpbnQJU2VuZEV2ZW50Tm90aWZpY2F0aW9uKE1QVF9BREFQVEVSICppb2MsIHU4IEV2U3dpdGNoKTsKIHN0YXRpYyBpbnQJU2VuZEV2ZW50QWNrKE1QVF9BREFQVEVSICppb2MsIEV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqZXZucCk7CitzdGF0aWMgaW50CW1wdF9ob3N0X3BhZ2VfYWNjZXNzX2NvbnRyb2woTVBUX0FEQVBURVIgKmlvYywgdTggYWNjZXNzX2NvbnRyb2xfdmFsdWUsIGludCBzbGVlcEZsYWcpOworc3RhdGljIGludAltcHRfaG9zdF9wYWdlX2FsbG9jKE1QVF9BREFQVEVSICppb2MsIHBJT0NJbml0X3QgaW9jX2luaXQpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQJcHJvY21wdF9zdW1tYXJ5X3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKQEAgLTE3NSw2ICsxNzcsNyBAQAogc3RhdGljIHZvaWQJbXB0X3NwX2lvY19pbmZvKE1QVF9BREFQVEVSICppb2MsIHUzMiBpb2Nfc3RhdHVzLCBNUFRfRlJBTUVfSERSICptZik7CiBzdGF0aWMgdm9pZAltcHRfZmNfbG9nX2luZm8oTVBUX0FEQVBURVIgKmlvYywgdTMyIGxvZ19pbmZvKTsKIHN0YXRpYyB2b2lkCW1wdF9zcF9sb2dfaW5mbyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgbG9nX2luZm8pOworc3RhdGljIHZvaWQJbXB0X3Nhc19sb2dfaW5mbyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgbG9nX2luZm8pOwogCiAvKiBtb2R1bGUgZW50cnkgcG9pbnQgKi8KIHN0YXRpYyBpbnQgIF9faW5pdCAgICBmdXNpb25faW5pdCAgKHZvaWQpOwpAQCAtMjA2LDYgKzIwOSwxNDQgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIGNvbW1hbmRfcmVnKTsKIH0KIAorLyoKKyAqICBQcm9jZXNzIHR1cmJvIChjb250ZXh0KSByZXBseS4uLgorICovCitzdGF0aWMgdm9pZAorbXB0X3R1cmJvX3JlcGx5KE1QVF9BREFQVEVSICppb2MsIHUzMiBwYSkKK3sKKwlNUFRfRlJBTUVfSERSICptZiA9IE5VTEw7CisJTVBUX0ZSQU1FX0hEUiAqbXIgPSBOVUxMOworCWludCByZXFfaWR4ID0gMDsKKwlpbnQgY2JfaWR4OworCisJZG1mcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJHb3QgVFVSQk8gcmVwbHkgcmVxX2lkeD0lMDh4XG4iLAorCQkJCWlvYy0+bmFtZSwgcGEpKTsKKworCXN3aXRjaCAocGEgPj4gTVBJX0NPTlRFWFRfUkVQTFlfVFlQRV9TSElGVCkgeworCWNhc2UgTVBJX0NPTlRFWFRfUkVQTFlfVFlQRV9TQ1NJX0lOSVQ6CisJCXJlcV9pZHggPSBwYSAmIDB4MDAwMEZGRkY7CisJCWNiX2lkeCA9IChwYSAmIDB4MDBGRjAwMDApID4+IDE2OworCQltZiA9IE1QVF9JTkRFWF8yX01GUFRSKGlvYywgcmVxX2lkeCk7CisJCWJyZWFrOworCWNhc2UgTVBJX0NPTlRFWFRfUkVQTFlfVFlQRV9MQU46CisJCWNiX2lkeCA9IG1wdF9sYW5faW5kZXg7CisJCS8qCisJCSAqICBCbGluZCBzZXQgb2YgbWYgdG8gTlVMTCBoZXJlIHdhcyBmYXRhbAorCQkgKiAgYWZ0ZXIgbGFuX3JlcGx5IHNheXMgImZyZWVtZSIKKwkJICogIEZpeCBzb3J0IG9mIGNvbWJpbmVkIHdpdGggYW4gb3B0aW1pemF0aW9uIGhlcmU7CisJCSAqICBhZGRlZCBleHBsaWNpdCBjaGVjayBmb3IgY2FzZSB3aGVyZSBsYW5fcmVwbHkKKwkJICogIHdhcyBqdXN0IHJldHVybmluZyAxIGFuZCBkb2luZyBub3RoaW5nIGVsc2UuCisJCSAqICBGb3IgdGhpcyBjYXNlIHNraXAgdGhlIGNhbGxiYWNrLCBidXQgc2V0IHVwCisJCSAqICBwcm9wZXIgbWYgdmFsdWUgZmlyc3QgaGVyZTotKQorCQkgKi8KKwkJaWYgKChwYSAmIDB4NTgwMDAwMDApID09IDB4NTgwMDAwMDApIHsKKwkJCXJlcV9pZHggPSBwYSAmIDB4MDAwMEZGRkY7CisJCQltZiA9IE1QVF9JTkRFWF8yX01GUFRSKGlvYywgcmVxX2lkeCk7CisJCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7CisJCQltYigpOworCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCX0KKwkJbXIgPSAoTVBUX0ZSQU1FX0hEUiAqKSBDQVNUX1UzMl9UT19QVFIocGEpOworCQlicmVhazsKKwljYXNlIE1QSV9DT05URVhUX1JFUExZX1RZUEVfU0NTSV9UQVJHRVQ6CisJCWNiX2lkeCA9IG1wdF9zdG1faW5kZXg7CisJCW1yID0gKE1QVF9GUkFNRV9IRFIgKikgQ0FTVF9VMzJfVE9fUFRSKHBhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2JfaWR4ID0gMDsKKwkJQlVHKCk7CisJfQorCisJLyogIENoZWNrIGZvciAodmFsaWQpIElPIGNhbGxiYWNrISAgKi8KKwlpZiAoY2JfaWR4IDwgMSB8fCBjYl9pZHggPj0gTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTIHx8CisJCQlNcHRDYWxsYmFja3NbY2JfaWR4XSA9PSBOVUxMKSB7CisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICIlczogSW52YWxpZCBjYl9pZHggKCVkKSFcbiIsCisJCQkJX19GVU5DVElPTl9fLCBpb2MtPm5hbWUsIGNiX2lkeCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChNcHRDYWxsYmFja3NbY2JfaWR4XShpb2MsIG1mLCBtcikpCisJCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKKyBvdXQ6CisJbWIoKTsKK30KKworc3RhdGljIHZvaWQKK21wdF9yZXBseShNUFRfQURBUFRFUiAqaW9jLCB1MzIgcGEpCit7CisJTVBUX0ZSQU1FX0hEUgkqbWY7CisJTVBUX0ZSQU1FX0hEUgkqbXI7CisJaW50CQkgcmVxX2lkeDsKKwlpbnQJCSBjYl9pZHg7CisJaW50CQkgZnJlZW1lOworCisJdTMyIHJlcGx5X2RtYV9sb3c7CisJdTE2IGlvY19zdGF0OworCisJLyogbm9uLVRVUkJPIHJlcGx5ISAgSG1tbSwgc29tZXRoaW5nIG1heSBiZSB1cC4uLgorCSAqICBOZXdlc3QgdHVyYm8gcmVwbHkgbWVjaGFuaXNtOyBnZXQgYWRkcmVzcworCSAqICB2aWEgbGVmdCBzaGlmdCAxIChnZXQgcmlkIG9mIE1QSV9BRERSRVNTX1JFUExZX0FfQklUKSEKKwkgKi8KKworCS8qIE1hcCBETUEgYWRkcmVzcyBvZiByZXBseSBoZWFkZXIgdG8gY3B1IGFkZHJlc3MuCisJICogcGEgaXMgMzIgYml0cyAtIGJ1dCB0aGUgZG1hIGFkZHJlc3MgbWF5IGJlIDMyIG9yIDY0IGJpdHMKKwkgKiBnZXQgb2Zmc2V0IGJhc2VkIG9ubHkgb25seSB0aGUgbG93IGFkZHJlc3NlcworCSAqLworCisJcmVwbHlfZG1hX2xvdyA9IChwYSA8PD0gMSk7CisJbXIgPSAoTVBUX0ZSQU1FX0hEUiAqKSgodTggKilpb2MtPnJlcGx5X2ZyYW1lcyArCisJCQkgKHJlcGx5X2RtYV9sb3cgLSBpb2MtPnJlcGx5X2ZyYW1lc19sb3dfZG1hKSk7CisKKwlyZXFfaWR4ID0gbGUxNl90b19jcHUobXItPnUuZnJhbWUuaHdoZHIubXNnY3R4dS5mbGQucmVxX2lkeCk7CisJY2JfaWR4ID0gbXItPnUuZnJhbWUuaHdoZHIubXNnY3R4dS5mbGQuY2JfaWR4OworCW1mID0gTVBUX0lOREVYXzJfTUZQVFIoaW9jLCByZXFfaWR4KTsKKworCWRtZnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiR290IG5vbi1UVVJCTyByZXBseT0lcCByZXFfaWR4PSV4IGNiX2lkeD0leCBGdW5jdGlvbj0leFxuIiwKKwkJCWlvYy0+bmFtZSwgbXIsIHJlcV9pZHgsIGNiX2lkeCwgbXItPnUuaGRyLkZ1bmN0aW9uKSk7CisJREJHX0RVTVBfUkVQTFlfRlJBTUUobXIpCisKKwkgLyogIENoZWNrL2xvZyBJT0MgbG9nIGluZm8KKwkgKi8KKwlpb2Nfc3RhdCA9IGxlMTZfdG9fY3B1KG1yLT51LnJlcGx5LklPQ1N0YXR1cyk7CisJaWYgKGlvY19zdGF0ICYgTVBJX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSkgeworCQl1MzIJIGxvZ19pbmZvID0gbGUzMl90b19jcHUobXItPnUucmVwbHkuSU9DTG9nSW5mbyk7CisJCWlmIChpb2MtPmJ1c190eXBlID09IEZDKQorCQkJbXB0X2ZjX2xvZ19pbmZvKGlvYywgbG9nX2luZm8pOworCQllbHNlIGlmIChpb2MtPmJ1c190eXBlID09IFNDU0kpCisJCQltcHRfc3BfbG9nX2luZm8oaW9jLCBsb2dfaW5mbyk7CisJCWVsc2UgaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0FTKQorCQkJbXB0X3Nhc19sb2dfaW5mbyhpb2MsIGxvZ19pbmZvKTsKKwl9CisJaWYgKGlvY19zdGF0ICYgTVBJX0lPQ1NUQVRVU19NQVNLKSB7CisJCWlmIChpb2MtPmJ1c190eXBlID09IFNDU0kgJiYKKwkJICAgIGNiX2lkeCAhPSBtcHRfc3RtX2luZGV4ICYmCisJCSAgICBjYl9pZHggIT0gbXB0X2xhbl9pbmRleCkKKwkJCW1wdF9zcF9pb2NfaW5mbyhpb2MsICh1MzIpaW9jX3N0YXQsIG1mKTsKKwl9CisKKworCS8qICBDaGVjayBmb3IgKHZhbGlkKSBJTyBjYWxsYmFjayEgICovCisJaWYgKGNiX2lkeCA8IDEgfHwgY2JfaWR4ID49IE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUyB8fAorCQkJTXB0Q2FsbGJhY2tzW2NiX2lkeF0gPT0gTlVMTCkgeworCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiJXM6IEludmFsaWQgY2JfaWR4ICglZCkhXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgaW9jLT5uYW1lLCBjYl9pZHgpOworCQlmcmVlbWUgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlmcmVlbWUgPSBNcHRDYWxsYmFja3NbY2JfaWR4XShpb2MsIG1mLCBtcik7CisKKyBvdXQ6CisJLyogIEZsdXNoIChub24tVFVSQk8pIHJlcGx5IHdpdGggYSBXUklURSEgICovCisJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPlJlcGx5RmlmbywgcGEpOworCisJaWYgKGZyZWVtZSkKKwkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOworCW1iKCk7Cit9CisKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCiAgKgltcHRfaW50ZXJydXB0IC0gTVBUIGFkYXB0ZXIgKElPQykgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuCkBAIC0yMjcsMTY0ICszNjgsMjEgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdAogbXB0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpidXNfaWQsIHN0cnVjdCBwdF9yZWdzICpyKQogewotCU1QVF9BREFQVEVSCSppb2M7Ci0JTVBUX0ZSQU1FX0hEUgkqbWY7Ci0JTVBUX0ZSQU1FX0hEUgkqbXI7Ci0JdTMyCQkgcGE7Ci0JaW50CQkgcmVxX2lkeDsKLQlpbnQJCSBjYl9pZHg7Ci0JaW50CQkgdHlwZTsKLQlpbnQJCSBmcmVlbWU7Ci0KLQlpb2MgPSAoTVBUX0FEQVBURVIgKilidXNfaWQ7CisJTVBUX0FEQVBURVIgKmlvYyA9IGJ1c19pZDsKKwl1MzIgcGE7CiAKIAkvKgogCSAqICBEcmFpbiB0aGUgcmVwbHkgRklGTyEKLQkgKgotCSAqIE5PVEVTOiBJJ3ZlIHNlZW4gdXAgdG8gMTAgcmVwbGllcyBwcm9jZXNzZWQgaW4gdGhpcyBsb29wLCBzbyBmYXIuLi4KLQkgKiBVcGRhdGU6IEkndmUgc2VlbiB1cCB0byA5MTgyIHJlcGxpZXMgcHJvY2Vzc2VkIGluIHRoaXMgbG9vcCEgPz8KLQkgKiBVcGRhdGU6IExpbWl0IG91cnNlbHZlcyB0byBwcm9jZXNzaW5nIG1heCBvZiBOIHJlcGxpZXMKLQkgKgkoYm90dG9tIG9mIGxvb3ApLgogCSAqLwogCXdoaWxlICgxKSB7Ci0KLQkJaWYgKChwYSA9IENISVBSRUdfUkVBRDMyX2RtYXN5bmMoJmlvYy0+Y2hpcC0+UmVwbHlGaWZvKSkgPT0gMHhGRkZGRkZGRikKKwkJcGEgPSBDSElQUkVHX1JFQUQzMl9kbWFzeW5jKCZpb2MtPmNoaXAtPlJlcGx5Rmlmbyk7CisJCWlmIChwYSA9PSAweEZGRkZGRkZGKQogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCi0JCWNiX2lkeCA9IDA7Ci0JCWZyZWVtZSA9IDA7Ci0KLQkJLyoKLQkJICogIENoZWNrIGZvciBub24tVFVSQk8gcmVwbHkhCi0JCSAqLwotCQlpZiAocGEgJiBNUElfQUREUkVTU19SRVBMWV9BX0JJVCkgewotCQkJdTMyIHJlcGx5X2RtYV9sb3c7Ci0JCQl1MTYgaW9jX3N0YXQ7Ci0KLQkJCS8qIG5vbi1UVVJCTyByZXBseSEgIEhtbW0sIHNvbWV0aGluZyBtYXkgYmUgdXAuLi4KLQkJCSAqICBOZXdlc3QgdHVyYm8gcmVwbHkgbWVjaGFuaXNtOyBnZXQgYWRkcmVzcwotCQkJICogIHZpYSBsZWZ0IHNoaWZ0IDEgKGdldCByaWQgb2YgTVBJX0FERFJFU1NfUkVQTFlfQV9CSVQpIQotCQkJICovCi0KLQkJCS8qIE1hcCBETUEgYWRkcmVzcyBvZiByZXBseSBoZWFkZXIgdG8gY3B1IGFkZHJlc3MuCi0JCQkgKiBwYSBpcyAzMiBiaXRzIC0gYnV0IHRoZSBkbWEgYWRkcmVzcyBtYXkgYmUgMzIgb3IgNjQgYml0cwotCQkJICogZ2V0IG9mZnNldCBiYXNlZCBvbmx5IG9ubHkgdGhlIGxvdyBhZGRyZXNzZXMKLQkJCSAqLwotCQkJcmVwbHlfZG1hX2xvdyA9IChwYSA9IChwYSA8PCAxKSk7Ci0JCQltciA9IChNUFRfRlJBTUVfSERSICopKCh1OCAqKWlvYy0+cmVwbHlfZnJhbWVzICsKLQkJCQkJIChyZXBseV9kbWFfbG93IC0gaW9jLT5yZXBseV9mcmFtZXNfbG93X2RtYSkpOwotCi0JCQlyZXFfaWR4ID0gbGUxNl90b19jcHUobXItPnUuZnJhbWUuaHdoZHIubXNnY3R4dS5mbGQucmVxX2lkeCk7Ci0JCQljYl9pZHggPSBtci0+dS5mcmFtZS5od2hkci5tc2djdHh1LmZsZC5jYl9pZHg7Ci0JCQltZiA9IE1QVF9JTkRFWF8yX01GUFRSKGlvYywgcmVxX2lkeCk7Ci0KLQkJCWRtZnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiR290IG5vbi1UVVJCTyByZXBseT0lcCByZXFfaWR4PSV4IGNiX2lkeD0leCBGdW5jdGlvbj0leFxuIiwKLQkJCQkJaW9jLT5uYW1lLCBtciwgcmVxX2lkeCwgY2JfaWR4LCBtci0+dS5oZHIuRnVuY3Rpb24pKTsKLQkJCURCR19EVU1QX1JFUExZX0ZSQU1FKG1yKQotCi0JCQkgLyogIENoZWNrL2xvZyBJT0MgbG9nIGluZm8KLQkJCSAqLwotCQkJaW9jX3N0YXQgPSBsZTE2X3RvX2NwdShtci0+dS5yZXBseS5JT0NTdGF0dXMpOwotCQkJaWYgKGlvY19zdGF0ICYgTVBJX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSkgewotCQkJCXUzMgkgbG9nX2luZm8gPSBsZTMyX3RvX2NwdShtci0+dS5yZXBseS5JT0NMb2dJbmZvKTsKLQkJCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykKLQkJCQkJbXB0X2ZjX2xvZ19pbmZvKGlvYywgbG9nX2luZm8pOwotCQkJCWVsc2UgaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkKLQkJCQkJbXB0X3NwX2xvZ19pbmZvKGlvYywgbG9nX2luZm8pOwotCQkJfQotCQkJaWYgKGlvY19zdGF0ICYgTVBJX0lPQ1NUQVRVU19NQVNLKSB7Ci0JCQkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkKLQkJCQkJbXB0X3NwX2lvY19pbmZvKGlvYywgKHUzMilpb2Nfc3RhdCwgbWYpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqICBQcm9jZXNzIHR1cmJvIChjb250ZXh0KSByZXBseS4uLgotCQkJICovCi0JCQlkbWZwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkdvdCBUVVJCTyByZXBseSByZXFfaWR4PSUwOHhcbiIsIGlvYy0+bmFtZSwgcGEpKTsKLQkJCXR5cGUgPSAocGEgPj4gTVBJX0NPTlRFWFRfUkVQTFlfVFlQRV9TSElGVCk7Ci0JCQlpZiAodHlwZSA9PSBNUElfQ09OVEVYVF9SRVBMWV9UWVBFX1NDU0lfVEFSR0VUKSB7Ci0JCQkJY2JfaWR4ID0gbXB0X3N0bV9pbmRleDsKLQkJCQltZiA9IE5VTEw7Ci0JCQkJbXIgPSAoTVBUX0ZSQU1FX0hEUiAqKSBDQVNUX1UzMl9UT19QVFIocGEpOwotCQkJfSBlbHNlIGlmICh0eXBlID09IE1QSV9DT05URVhUX1JFUExZX1RZUEVfTEFOKSB7Ci0JCQkJY2JfaWR4ID0gbXB0X2xhbl9pbmRleDsKLQkJCQkgLyogIEJsaW5kIHNldCBvZiBtZiB0byBOVUxMIGhlcmUgd2FzIGZhdGFsCi0JCQkJICogIGFmdGVyIGxhbl9yZXBseSBzYXlzICJmcmVlbWUiCi0JCQkJICogIEZpeCBzb3J0IG9mIGNvbWJpbmVkIHdpdGggYW4gb3B0aW1pemF0aW9uIGhlcmU7Ci0JCQkJICogIGFkZGVkIGV4cGxpY2l0IGNoZWNrIGZvciBjYXNlIHdoZXJlIGxhbl9yZXBseQotCQkJCSAqICB3YXMganVzdCByZXR1cm5pbmcgMSBhbmQgZG9pbmcgbm90aGluZyBlbHNlLgotCQkJCSAqICBGb3IgdGhpcyBjYXNlIHNraXAgdGhlIGNhbGxiYWNrLCBidXQgc2V0IHVwCi0JCQkJICogIHByb3BlciBtZiB2YWx1ZSBmaXJzdCBoZXJlOi0pCi0JCQkJICovCi0JCQkJaWYgKChwYSAmIDB4NTgwMDAwMDApID09IDB4NTgwMDAwMDApIHsKLQkJCQkJcmVxX2lkeCA9IHBhICYgMHgwMDAwRkZGRjsKLQkJCQkJbWYgPSBNUFRfSU5ERVhfMl9NRlBUUihpb2MsIHJlcV9pZHgpOwotCQkJCQlmcmVlbWUgPSAxOwotCQkJCQkvKgotCQkJCQkgKiAgSU1QT1JUQU5UISAgSW52YWxpZGF0ZSB0aGUgY2FsbGJhY2shCi0JCQkJCSAqLwotCQkJCQljYl9pZHggPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1mID0gTlVMTDsKLQkJCQl9Ci0JCQkJbXIgPSAoTVBUX0ZSQU1FX0hEUiAqKSBDQVNUX1UzMl9UT19QVFIocGEpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXFfaWR4ID0gcGEgJiAweDAwMDBGRkZGOwotCQkJCWNiX2lkeCA9IChwYSAmIDB4MDBGRjAwMDApID4+IDE2OwotCQkJCW1mID0gTVBUX0lOREVYXzJfTUZQVFIoaW9jLCByZXFfaWR4KTsKLQkJCQltciA9IE5VTEw7Ci0JCQl9Ci0JCQlwYSA9IDA7CQkJCQkvKiBObyByZXBseSBmbHVzaCEgKi8KLQkJfQotCi0jaWZkZWYgTVBUX0RFQlVHX0lSUQotCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKSB7Ci0JCQkvKiBWZXJpZnkgbWYsIG1yIGFyZSByZWFzb25hYmxlLgotCQkJICovCi0JCQlpZiAoKG1mKSAmJiAoKG1mID49IE1QVF9JTkRFWF8yX01GUFRSKGlvYywgaW9jLT5yZXFfZGVwdGgpKQotCQkJCXx8IChtZiA8IGlvYy0+cmVxX2ZyYW1lcykpICkgewotCQkJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCi0JCQkJCSJtcHRfaW50ZXJydXB0OiBJbnZhbGlkIG1mICglcCkhXG4iLCBpb2MtPm5hbWUsICh2b2lkICopbWYpOwotCQkJCWNiX2lkeCA9IDA7Ci0JCQkJcGEgPSAwOwotCQkJCWZyZWVtZSA9IDA7Ci0JCQl9Ci0JCQlpZiAoKHBhKSAmJiAobXIpICYmICgobXIgPj0gTVBUX0lOREVYXzJfUkZQVFIoaW9jLCBpb2MtPnJlcV9kZXB0aCkpCi0JCQkJfHwgKG1yIDwgaW9jLT5yZXBseV9mcmFtZXMpKSApIHsKLQkJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAotCQkJCQkibXB0X2ludGVycnVwdDogSW52YWxpZCByZiAoJXApIVxuIiwgaW9jLT5uYW1lLCAodm9pZCAqKW1yKTsKLQkJCQljYl9pZHggPSAwOwotCQkJCXBhID0gMDsKLQkJCQlmcmVlbWUgPSAwOwotCQkJfQotCQkJaWYgKGNiX2lkeCA+IChNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlMtMSkpIHsKLQkJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAotCQkJCQkibXB0X2ludGVycnVwdDogSW52YWxpZCBjYl9pZHggKCVkKSFcbiIsIGlvYy0+bmFtZSwgY2JfaWR4KTsKLQkJCQljYl9pZHggPSAwOwotCQkJCXBhID0gMDsKLQkJCQlmcmVlbWUgPSAwOwotCQkJfQotCQl9Ci0jZW5kaWYKLQotCQkvKiAgQ2hlY2sgZm9yICh2YWxpZCkgSU8gY2FsbGJhY2shICAqLwotCQlpZiAoY2JfaWR4KSB7Ci0JCQkvKiAgRG8gdGhlIGNhbGxiYWNrISAgKi8KLQkJCWZyZWVtZSA9ICgqKE1wdENhbGxiYWNrc1tjYl9pZHhdKSkoaW9jLCBtZiwgbXIpOwotCQl9Ci0KLQkJaWYgKHBhKSB7Ci0JCQkvKiAgRmx1c2ggKG5vbi1UVVJCTykgcmVwbHkgd2l0aCBhIFdSSVRFISAgKi8KLQkJCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5SZXBseUZpZm8sIHBhKTsKLQkJfQotCi0JCWlmIChmcmVlbWUpIHsKLQkJCS8qICBQdXQgUmVxdWVzdCBiYWNrIG9uIEZyZWVRISAgKi8KLQkJCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKLQkJfQotCi0JCW1iKCk7Ci0JfQkvKiBkcmFpbiByZXBseSBGSUZPICovCisJCWVsc2UgaWYgKHBhICYgTVBJX0FERFJFU1NfUkVQTFlfQV9CSVQpCisJCQltcHRfcmVwbHkoaW9jLCBwYSk7CisJCWVsc2UKKwkJCW1wdF90dXJib19yZXBseShpb2MsIHBhKTsKKwl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC01MDksNiArNTA3LDE0IEBACiAJCQlwQ2ZnLT53YWl0X2RvbmUgPSAxOwogCQkJd2FrZV91cCgmbXB0X3dhaXRxKTsKIAkJfQorCX0gZWxzZSBpZiAoZnVuYyA9PSBNUElfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTCkgeworCQkvKiB3ZSBzaG91bGQgYmUgYWx3YXlzIGdldHRpbmcgYSByZXBseSBmcmFtZSAqLworCQltZW1jcHkoaW9jLT5wZXJzaXN0X3JlcGx5X2ZyYW1lLCByZXBseSwKKwkJICAgIG1pbihNUFRfREVGQVVMVF9GUkFNRV9TSVpFLAorCQkgICAgNCpyZXBseS0+dS5yZXBseS5Nc2dMZW5ndGgpKTsKKwkJZGVsX3RpbWVyKCZpb2MtPnBlcnNpc3RfdGltZXIpOworCQlpb2MtPnBlcnNpc3Rfd2FpdF9kb25lID0gMTsKKwkJd2FrZV91cCgmbXB0X3dhaXRxKTsKIAl9IGVsc2UgewogCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJVbmV4cGVjdGVkIG1zZyBmdW5jdGlvbiAoPSUwMlhoKSByZXBseSByZWNlaXZlZCFcbiIsCiAJCQkJaW9jLT5uYW1lLCBmdW5jKTsKQEAgLTc1MCw2ICs3NTYsNyBAQAogCQltZiA9IGxpc3RfZW50cnkoaW9jLT5GcmVlUS5uZXh0LCBNUFRfRlJBTUVfSERSLAogCQkJCXUuZnJhbWUubGlua2FnZS5saXN0KTsKIAkJbGlzdF9kZWwoJm1mLT51LmZyYW1lLmxpbmthZ2UubGlzdCk7CisJCW1mLT51LmZyYW1lLmxpbmthZ2UuYXJnMSA9IDA7CiAJCW1mLT51LmZyYW1lLmh3aGRyLm1zZ2N0eHUuZmxkLmNiX2lkeCA9IGhhbmRsZTsJLyogYnl0ZSAqLwogCQlyZXFfb2Zmc2V0ID0gKHU4ICopbWYgLSAodTggKilpb2MtPnJlcV9mcmFtZXM7CiAJCQkJCQkJCS8qIHUxNiEgKi8KQEAgLTg0NSw2ICs4NTIsNyBAQAogCiAJLyogIFB1dCBSZXF1ZXN0IGJhY2sgb24gRnJlZVEhICAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPkZyZWVRbG9jaywgZmxhZ3MpOworCW1mLT51LmZyYW1lLmxpbmthZ2UuYXJnMSA9IDB4ZGVhZGJlYWY7IC8qIHNpZ25hdHVyZSB0byBrbm93IGlmIHRoaXMgbWYgaXMgZnJlZWQgKi8KIAlsaXN0X2FkZF90YWlsKCZtZi0+dS5mcmFtZS5saW5rYWdlLmxpc3QsICZpb2MtPkZyZWVRKTsKICNpZmRlZiBNRkNOVAogCWlvYy0+bWZjbnQtLTsKQEAgLTk3MSwxMiArOTc5LDEyMyBAQAogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkb29yYmVsbHMgKi8KIAlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+SW50U3RhdHVzLCAwKTsKLQkKKwogCXJldHVybiByOwogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKioKKyAqIG1wdF9ob3N0X3BhZ2VfYWNjZXNzX2NvbnRyb2wgLSBwcm92aWRlcyBtZWNoYW5pc20gZm9yIHRoZSBob3N0CisgKiBkcml2ZXIgdG8gY29udHJvbCB0aGUgSU9DJ3MgSG9zdCBQYWdlIEJ1ZmZlciBhY2Nlc3MuCisgKiBAaW9jOiBQb2ludGVyIHRvIE1QVCBhZGFwdGVyIHN0cnVjdHVyZQorICogQGFjY2Vzc19jb250cm9sX3ZhbHVlOiBkZWZpbmUgYml0cyBiZWxvdworICoKKyAqIEFjY2VzcyBDb250cm9sIFZhbHVlIC0gYml0c1sxNToxMl0KKyAqIDBoIFJlc2VydmVkCisgKiAxaCBFbmFibGUgQWNjZXNzIHsgTVBJX0RCX0hQQkFDX0VOQUJMRV9BQ0NFU1MgfQorICogMmggRGlzYWJsZSBBY2Nlc3MgeyBNUElfREJfSFBCQUNfRElTQUJMRV9BQ0NFU1MgfQorICogM2ggRnJlZSBCdWZmZXIgeyBNUElfREJfSFBCQUNfRlJFRV9CVUZGRVIgfQorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KKworc3RhdGljIGludAorbXB0X2hvc3RfcGFnZV9hY2Nlc3NfY29udHJvbChNUFRfQURBUFRFUiAqaW9jLCB1OCBhY2Nlc3NfY29udHJvbF92YWx1ZSwgaW50IHNsZWVwRmxhZykKK3sKKwlpbnQJIHIgPSAwOworCisJLyogcmV0dXJuIGlmIGluIHVzZSAqLworCWlmIChDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5Eb29yYmVsbCkKKwkgICAgJiBNUElfRE9PUkJFTExfQUNUSVZFKQorCSAgICByZXR1cm4gLTE7CisKKwlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+SW50U3RhdHVzLCAwKTsKKworCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5Eb29yYmVsbCwKKwkJKChNUElfRlVOQ1RJT05fSE9TVF9QQUdFQlVGX0FDQ0VTU19DT05UUk9MCisJCSA8PE1QSV9ET09SQkVMTF9GVU5DVElPTl9TSElGVCkgfAorCQkgKGFjY2Vzc19jb250cm9sX3ZhbHVlPDwxMikpKTsKKworCS8qIFdhaXQgZm9yIElPQyB0byBjbGVhciBEb29yYmVsbCBTdGF0dXMgYml0ICovCisJaWYgKChyID0gV2FpdEZvckRvb3JiZWxsQWNrKGlvYywgNSwgc2xlZXBGbGFnKSkgPCAwKSB7CisJCXJldHVybiAtMjsKKwl9ZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworLyoqCisgKgltcHRfaG9zdF9wYWdlX2FsbG9jIC0gYWxsb2NhdGUgc3lzdGVtIG1lbW9yeSBmb3IgdGhlIGZ3CisgKglJZiB3ZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaW4gcGFzdCwgdGhlbiByZXNlbmQgdGhlIHNhbWUgcG9pbnRlci4KKyAqCWlvY0A6IFBvaW50ZXIgdG8gcG9pbnRlciB0byBJT0MgYWRhcHRlcgorICoJaW9jX2luaXRAOiBQb2ludGVyIHRvIGlvYyBpbml0IGNvbmZpZyBwYWdlCisgKgorICoJUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorbXB0X2hvc3RfcGFnZV9hbGxvYyhNUFRfQURBUFRFUiAqaW9jLCBwSU9DSW5pdF90IGlvY19pbml0KQoreworCWNoYXIJKnBzZ2U7CisJaW50CWZsYWdzX2xlbmd0aDsKKwl1MzIJaG9zdF9wYWdlX2J1ZmZlcl9zej0wOworCisJaWYoIWlvYy0+SG9zdFBhZ2VCdWZmZXIpIHsKKworCQlob3N0X3BhZ2VfYnVmZmVyX3N6ID0KKwkJICAgIGxlMzJfdG9fY3B1KGlvYy0+ZmFjdHMuSG9zdFBhZ2VCdWZmZXJTR0UuRmxhZ3NMZW5ndGgpICYgMHhGRkZGRkY7CisKKwkJaWYoIWhvc3RfcGFnZV9idWZmZXJfc3opCisJCQlyZXR1cm4gMDsgLyogZncgZG9lc24ndCBuZWVkIGFueSBob3N0IGJ1ZmZlcnMgKi8KKworCQkvKiBzcGluIHRpbGwgd2UgZ2V0IGVub3VnaCBtZW1vcnkgKi8KKwkJd2hpbGUoaG9zdF9wYWdlX2J1ZmZlcl9zeiA+IDApIHsKKworCQkJaWYoKGlvYy0+SG9zdFBhZ2VCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKKwkJCSAgICBpb2MtPnBjaWRldiwKKwkJCSAgICBob3N0X3BhZ2VfYnVmZmVyX3N6LAorCQkJICAgICZpb2MtPkhvc3RQYWdlQnVmZmVyX2RtYSkpICE9IE5VTEwpIHsKKworCQkJCWRpbml0cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCisJCQkJICAgICJob3N0X3BhZ2VfYnVmZmVyIEAgJXAsIGRtYSBAICV4LCBzej0lZCBieXRlc1xuIiwKKwkJCQkgICAgaW9jLT5uYW1lLAorCQkJCSAgICBpb2MtPkhvc3RQYWdlQnVmZmVyLAorCQkJCSAgICBpb2MtPkhvc3RQYWdlQnVmZmVyX2RtYSwKKwkJCQkgICAgaG9zdF9wYWdlX2J1ZmZlcl9zeikpOworCQkJCWlvYy0+YWxsb2NfdG90YWwgKz0gaG9zdF9wYWdlX2J1ZmZlcl9zejsKKwkJCQlpb2MtPkhvc3RQYWdlQnVmZmVyX3N6ID0gaG9zdF9wYWdlX2J1ZmZlcl9zejsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaG9zdF9wYWdlX2J1ZmZlcl9zeiAtPSAoNCoxMDI0KTsKKwkJfQorCX0KKworCWlmKCFpb2MtPkhvc3RQYWdlQnVmZmVyKSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQKKwkJICAgICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGZvciBob3N0X3BhZ2VfYnVmZmVyIVxuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCXJldHVybiAtOTk5OworCX0KKworCXBzZ2UgPSAoY2hhciAqKSZpb2NfaW5pdC0+SG9zdFBhZ2VCdWZmZXJTR0U7CisJZmxhZ3NfbGVuZ3RoID0gTVBJX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJICAgIE1QSV9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgfAorCSAgICBNUElfU0dFX0ZMQUdTXzMyX0JJVF9BRERSRVNTSU5HIHwKKwkgICAgTVBJX1NHRV9GTEFHU19IT1NUX1RPX0lPQyB8CisJICAgIE1QSV9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUjsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID09IHNpemVvZih1NjQpKSB7CisJICAgIGZsYWdzX2xlbmd0aCB8PSBNUElfU0dFX0ZMQUdTXzY0X0JJVF9BRERSRVNTSU5HOworCX0KKwlmbGFnc19sZW5ndGggPSBmbGFnc19sZW5ndGggPDwgTVBJX1NHRV9GTEFHU19TSElGVDsKKwlmbGFnc19sZW5ndGggfD0gaW9jLT5Ib3N0UGFnZUJ1ZmZlcl9zejsKKwltcHRfYWRkX3NnZShwc2dlLCBmbGFnc19sZW5ndGgsIGlvYy0+SG9zdFBhZ2VCdWZmZXJfZG1hKTsKKwlpb2MtPmZhY3RzLkhvc3RQYWdlQnVmZmVyU0dFID0gaW9jX2luaXQtPkhvc3RQYWdlQnVmZmVyU0dFOworCityZXR1cm4gMDsKK30KKworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworLyoqCiAgKgltcHRfdmVyaWZ5X2FkYXB0ZXIgLSBHaXZlbiBhIHVuaXF1ZSBJT0MgaWRlbnRpZmllciwgc2V0IHBvaW50ZXIgdG8KICAqCXRoZSBhc3NvY2lhdGVkIE1QVCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqCUBpb2NpZDogSU9DIHVuaXF1ZSBpZGVudGlmaWVyIChpbnRlZ2VyKQpAQCAtMTA4NCw3ICsxMjAzLDcgQEAKIAogCS8qIEluaXRpbGl6ZSBTQ1NJIENvbmZpZyBEYXRhIHN0cnVjdHVyZQogCSAqLwotCW1lbXNldCgmaW9jLT5zcGlfZGF0YSwgMCwgc2l6ZW9mKFNjc2lDZmdEYXRhKSk7CisJbWVtc2V0KCZpb2MtPnNwaV9kYXRhLCAwLCBzaXplb2YoU3BpQ2ZnRGF0YSkpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcnVubmluZyBjb25maWdRIGhlYWQuCiAJICovCkBAIC0xMjEzLDYgKzEzMzIsMzMgQEAKIAkJaW9jLT5wcm9kX25hbWUgPSAiTFNJNTNDMTAzNSI7CiAJCWlvYy0+YnVzX3R5cGUgPSBTQ1NJOwogCX0KKwllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY0KSB7CisJCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjQiOworCQlpb2MtPmJ1c190eXBlID0gU0FTOworCQlpb2MtPmVycmF0YV9mbGFnXzEwNjQgPSAxOworCX0KKwllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY2KSB7CisJCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjYiOworCQlpb2MtPmJ1c190eXBlID0gU0FTOworCQlpb2MtPmVycmF0YV9mbGFnXzEwNjQgPSAxOworCX0KKwllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY4KSB7CisJCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjgiOworCQlpb2MtPmJ1c190eXBlID0gU0FTOworCQlpb2MtPmVycmF0YV9mbGFnXzEwNjQgPSAxOworCX0KKwllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY0RSkgeworCQlpb2MtPnByb2RfbmFtZSA9ICJMU0lTQVMxMDY0RSI7CisJCWlvYy0+YnVzX3R5cGUgPSBTQVM7CisJfQorCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjZFKSB7CisJCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjZFIjsKKwkJaW9jLT5idXNfdHlwZSA9IFNBUzsKKwl9CisJZWxzZSBpZiAocGRldi0+ZGV2aWNlID09IE1QSV9NQU5VRkFDVFBBR0VfREVWSURfU0FTMTA2OEUpIHsKKwkJaW9jLT5wcm9kX25hbWUgPSAiTFNJU0FTMTA2OEUiOworCQlpb2MtPmJ1c190eXBlID0gU0FTOworCX0KIAogCWlmIChpb2MtPmVycmF0YV9mbGFnXzEwNjQpCiAJCXBjaV9kaXNhYmxlX2lvX2FjY2VzcyhwZGV2KTsKQEAgLTE2MDQsOCArMTc1MCwyMyBAQAogCQkJICovCiAJCQlpZiAocmV0ID09IDApIHsKIAkJCQlyYyA9IG1wdF9kb191cGxvYWQoaW9jLCBzbGVlcEZsYWcpOwotCQkJCWlmIChyYyAhPSAwKQorCQkJCWlmIChyYyA9PSAwKSB7CisJCQkJCWlmIChpb2MtPmFsdF9pb2MgJiYgaW9jLT5hbHRfaW9jLT5jYWNoZWRfZncpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBNYWludGFpbiBvbmx5IG9uZSBwb2ludGVyIHRvIEZXIG1lbW9yeQorCQkJCQkJICogc28gdGhlcmUgd2lsbCBub3QgYmUgdHdvIGF0dGVtcHQgdG8KKwkJCQkJCSAqIGRvd25sb2FkYm9vdCBvbmJvYXJkIGR1YWwgZnVuY3Rpb24KKwkJCQkJCSAqIGNoaXBzIChtcHRfYWRhcHRlcl9kaXNhYmxlLAorCQkJCQkJICogbXB0X2RpYWdfcmVzZXQpCisJCQkJCQkgKi8KKwkJCQkJCWlvYy0+Y2FjaGVkX2Z3ID0gTlVMTDsKKwkJCQkJCWRkbHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiOiBtcHRfdXBsb2FkOiAgYWx0XyVzIGhhcyBjYWNoZWRfZnc9JXAgXG4iLAorCQkJCQkJCWlvYy0+bmFtZSwgaW9jLT5hbHRfaW9jLT5uYW1lLCBpb2MtPmFsdF9pb2MtPmNhY2hlZF9mdykpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTSAiOiBmaXJtd2FyZSB1cGxvYWQgZmFpbHVyZSFcbiIpOworCQkJCQlyZXQgPSAtNTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC0xNjQwLDcgKzE4MDEsMjIgQEAKIAkgKglhbmQgd2UgdHJ5IEdldExhbkNvbmZpZ1BhZ2VzIGFnYWluLi4uCiAJICovCiAJaWYgKChyZXQgPT0gMCkgJiYgKHJlYXNvbiA9PSBNUFRfSE9TVEVWRU5UX0lPQ19CUklOR1VQKSkgewotCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykgeworCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpIHsKKworCQkJLyogY2xlYXIgcGVyc2lzdGVuY3kgdGFibGUgKi8KKwkJCWlmKGlvYy0+ZmFjdHMuSU9DRXhjZXB0aW9ucyAmCisJCQkgICAgTVBJX0lPQ0ZBQ1RTX0VYQ0VQVF9QRVJTSVNURU5UX1RBQkxFX0ZVTEwpIHsKKwkJCQlyZXQgPSBtcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbihpb2MsCisJCQkJICAgIE1QSV9TQVNfT1BfQ0xFQVJfTk9UX1BSRVNFTlQpOworCQkJCWlmKHJldCAhPSAwKQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCS8qIEZpbmQgSU0gdm9sdW1lcworCQkJICovCisJCQltcHRfZmluZEltVm9sdW1lcyhpb2MpOworCisJCX0gZWxzZSBpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykgewogCQkJLyoKIAkJCSAqICBQcmUtZmV0Y2ggRkMgcG9ydCBXV04gYW5kIHN0dWZmLi4uCiAJCQkgKiAgKEZDUG9ydFBhZ2UwX3Qgc3R1ZmYpCkBAIC0xNzgzLDcgKzE5NTksNyBAQAogCiAJaWYgKGlvYy0+Y2FjaGVkX2Z3ICE9IE5VTEwpIHsKIAkJZGRscHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogbXB0X2FkYXB0ZXJfZGlzYWJsZTogUHVzaGluZyBGVyBvbnRvIGFkYXB0ZXJcbiIpKTsKLQkJaWYgKChyZXQgPSBtcHRfZG93bmxvYWRib290KGlvYywgTk9fU0xFRVApKSA8IDApIHsKKwkJaWYgKChyZXQgPSBtcHRfZG93bmxvYWRib290KGlvYywgKE1waUZ3SGVhZGVyX3QgKilpb2MtPmNhY2hlZF9mdywgTk9fU0xFRVApKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgTVlOQU0KIAkJCQkiOiBmaXJtd2FyZSBkb3dubG9hZGJvb3QgZmFpbHVyZSAoJWQpIVxuIiwgcmV0KTsKIAkJfQpAQCAtMTgzMSw5ICsyMDA3LDkgQEAKIAl9CiAKIAlrZnJlZShpb2MtPnNwaV9kYXRhLm52cmFtKTsKLQlrZnJlZShpb2MtPnNwaV9kYXRhLnBJb2NQZzMpOworCWtmcmVlKGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMpOwogCWlvYy0+c3BpX2RhdGEubnZyYW0gPSBOVUxMOwotCWlvYy0+c3BpX2RhdGEucElvY1BnMyA9IE5VTEw7CisJaW9jLT5yYWlkX2RhdGEucElvY1BnMyA9IE5VTEw7CiAKIAlpZiAoaW9jLT5zcGlfZGF0YS5wSW9jUGc0ICE9IE5VTEwpIHsKIAkJc3ogPSBpb2MtPnNwaV9kYXRhLklvY1BnNFN6OwpAQCAtMTg1Miw2ICsyMDI4LDIzIEBACiAKIAlrZnJlZShpb2MtPkNoYWluVG9DaGFpbik7CiAJaW9jLT5DaGFpblRvQ2hhaW4gPSBOVUxMOworCisJaWYgKGlvYy0+SG9zdFBhZ2VCdWZmZXIgIT0gTlVMTCkgeworCQlpZigocmV0ID0gbXB0X2hvc3RfcGFnZV9hY2Nlc3NfY29udHJvbChpb2MsCisJCSAgICBNUElfREJfSFBCQUNfRlJFRV9CVUZGRVIsIE5PX1NMRUVQKSkgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIE1ZTkFNCisJCQkgICAiOiAlczogaG9zdCBwYWdlIGJ1ZmZlcnMgZnJlZSBmYWlsZWQgKCVkKSFcbiIsCisJCQkgICAgX19GVU5DVElPTl9fLCByZXQpOworCQl9CisJCWRleGl0cHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogJXMgSG9zdFBhZ2VCdWZmZXIgZnJlZSAgQCAlcCwgc3o9JWQgYnl0ZXNcbiIsCisJCSAJaW9jLT5uYW1lLCBpb2MtPkhvc3RQYWdlQnVmZmVyLCBpb2MtPkhvc3RQYWdlQnVmZmVyX3N6KSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGlvYy0+SG9zdFBhZ2VCdWZmZXJfc3osCisJCQkJaW9jLT5Ib3N0UGFnZUJ1ZmZlciwKKwkJCQlpb2MtPkhvc3RQYWdlQnVmZmVyX2RtYSk7CisJCWlvYy0+SG9zdFBhZ2VCdWZmZXIgPSBOVUxMOworCQlpb2MtPkhvc3RQYWdlQnVmZmVyX3N6ID0gMDsKKwkJaW9jLT5hbGxvY190b3RhbCAtPSBpb2MtPkhvc3RQYWdlQnVmZmVyX3N6OworCX0KIH0KIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtMjAzNCw3ICsyMjI3LDcgQEAKIAkgKiAgTG9vcCBoZXJlIHdhaXRpbmcgZm9yIElPQyB0byBjb21lIFJFQURZLgogCSAqLwogCWlpID0gMDsKLQljbnRkbiA9ICgoc2xlZXBGbGFnID09IENBTl9TTEVFUCkgPyBIWiA6IDEwMDApICogMTU7CS8qIDE1IHNlY29uZHMgKi8KKwljbnRkbiA9ICgoc2xlZXBGbGFnID09IENBTl9TTEVFUCkgPyBIWiA6IDEwMDApICogNTsJLyogNSBzZWNvbmRzICovCiAKIAl3aGlsZSAoKGlvY19zdGF0ZSA9IG1wdF9HZXRJb2NTdGF0ZShpb2MsIDEpKSAhPSBNUElfSU9DX1NUQVRFX1JFQURZKSB7CiAJCWlmIChpb2Nfc3RhdGUgPT0gTVBJX0lPQ19TVEFURV9PUEVSQVRJT05BTCkgewpAQCAtMjIxMiw2ICsyNDA1LDcgQEAKIAkJCQlsZTMyX3RvX2NwdShmYWN0cy0+Q3VycmVudFNlbnNlQnVmZmVySGlnaEFkZHIpOwogCQlmYWN0cy0+Q3VyUmVwbHlGcmFtZVNpemUgPQogCQkJCWxlMTZfdG9fY3B1KGZhY3RzLT5DdXJSZXBseUZyYW1lU2l6ZSk7CisJCWZhY3RzLT5JT0NDYXBhYmlsaXRpZXMgPSBsZTMyX3RvX2NwdShmYWN0cy0+SU9DQ2FwYWJpbGl0aWVzKTsKIAogCQkvKgogCQkgKiBIYW5kbGUgTkVXICghKSBJT0NGYWN0c1JlcGx5IGZpZWxkcyBpbiBNUEktMS4wMS54eApAQCAtMjM4MywxMyArMjU3NywyNSBAQAogCWRkbHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAidXBsb2FkX2Z3ICVkIGZhY3RzLkZsYWdzPSV4XG4iLAogCQkgICBpb2MtPm5hbWUsIGlvYy0+dXBsb2FkX2Z3LCBpb2MtPmZhY3RzLkZsYWdzKSk7CiAKLQlpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykKKwlpZihpb2MtPmJ1c190eXBlID09IFNBUykKKwkJaW9jX2luaXQuTWF4RGV2aWNlcyA9IGlvYy0+ZmFjdHMuTWF4RGV2aWNlczsKKwllbHNlIGlmKGlvYy0+YnVzX3R5cGUgPT0gRkMpCiAJCWlvY19pbml0Lk1heERldmljZXMgPSBNUFRfTUFYX0ZDX0RFVklDRVM7CiAJZWxzZQogCQlpb2NfaW5pdC5NYXhEZXZpY2VzID0gTVBUX01BWF9TQ1NJX0RFVklDRVM7Ci0JCiAJaW9jX2luaXQuTWF4QnVzZXMgPSBNUFRfTUFYX0JVUzsKKwlkaW5pdHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiZmFjdHMuTXNnVmVyc2lvbj0leFxuIiwKKwkJICAgaW9jLT5uYW1lLCBpb2MtPmZhY3RzLk1zZ1ZlcnNpb24pKTsKKwlpZiAoaW9jLT5mYWN0cy5Nc2dWZXJzaW9uID49IE1QSV9WRVJTSU9OXzAxXzA1KSB7CisJCS8vIHNldCBNc2dWZXJzaW9uIGFuZCBIZWFkZXJWZXJzaW9uIGhvc3QgZHJpdmVyIHdhcyBidWlsdCB3aXRoCisJCWlvY19pbml0Lk1zZ1ZlcnNpb24gPSBjcHVfdG9fbGUxNihNUElfVkVSU0lPTik7CisJICAgICAgICBpb2NfaW5pdC5IZWFkZXJWZXJzaW9uID0gY3B1X3RvX2xlMTYoTVBJX0hFQURFUl9WRVJTSU9OKTsKIAorCQlpZiAoaW9jLT5mYWN0cy5GbGFncyAmIE1QSV9JT0NGQUNUU19GTEFHU19IT1NUX1BBR0VfQlVGRkVSX1BFUlNJU1RFTlQpIHsKKwkJCWlvY19pbml0Lkhvc3RQYWdlQnVmZmVyU0dFID0gaW9jLT5mYWN0cy5Ib3N0UGFnZUJ1ZmZlclNHRTsKKwkJfSBlbHNlIGlmKG1wdF9ob3N0X3BhZ2VfYWxsb2MoaW9jLCAmaW9jX2luaXQpKQorCQkJcmV0dXJuIC05OTsKKwl9CiAJaW9jX2luaXQuUmVwbHlGcmFtZVNpemUgPSBjcHVfdG9fbGUxNihpb2MtPnJlcGx5X3N6KTsJLyogaW4gQllURVMgKi8KIAogCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPT0gc2l6ZW9mKHU2NCkpIHsKQEAgLTI0MDMsMTcgKzI2MDksMjEgQEAKIAkJaW9jX2luaXQuSG9zdE1mYUhpZ2hBZGRyID0gY3B1X3RvX2xlMzIoMCk7CiAJCWlvY19pbml0LlNlbnNlQnVmZmVySGlnaEFkZHIgPSBjcHVfdG9fbGUzMigwKTsKIAl9Ci0JCQorCiAJaW9jLT5mYWN0cy5DdXJyZW50SG9zdE1mYUhpZ2hBZGRyID0gaW9jX2luaXQuSG9zdE1mYUhpZ2hBZGRyOwogCWlvYy0+ZmFjdHMuQ3VycmVudFNlbnNlQnVmZmVySGlnaEFkZHIgPSBpb2NfaW5pdC5TZW5zZUJ1ZmZlckhpZ2hBZGRyOworCWlvYy0+ZmFjdHMuTWF4RGV2aWNlcyA9IGlvY19pbml0Lk1heERldmljZXM7CisJaW9jLT5mYWN0cy5NYXhCdXNlcyA9IGlvY19pbml0Lk1heEJ1c2VzOwogCiAJZGhzcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJTZW5kaW5nIElPQ0luaXQgKHJlcSBAICVwKVxuIiwKIAkJCWlvYy0+bmFtZSwgJmlvY19pbml0KSk7CiAKIAlyID0gbXB0X2hhbmRzaGFrZV9yZXFfcmVwbHlfd2FpdChpb2MsIHNpemVvZihJT0NJbml0X3QpLCAodTMyKikmaW9jX2luaXQsCiAJCQkJc2l6ZW9mKE1QSURlZmF1bHRSZXBseV90KSwgKHUxNiopJmluaXRfcmVwbHksIDEwIC8qc2Vjb25kcyovLCBzbGVlcEZsYWcpOwotCWlmIChyICE9IDApCisJaWYgKHIgIT0gMCkgeworCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJTZW5kaW5nIElPQ0luaXQgZmFpbGVkKCVkKSFcbiIsaW9jLT5uYW1lLCByKTsKIAkJcmV0dXJuIHI7CisJfQogCiAJLyogTm8gbmVlZCB0byBieXRlIHN3YXAgdGhlIG11bHRpYnl0ZSBmaWVsZHMgaW4gdGhlIHJlcGx5CiAJICogc2luY2Ugd2UgZG9uJ3QgZXZlbiBsb29rIGF0IGl0J3MgY29udGVudHMuCkBAIC0yNDcyLDcgKzI2ODIsNyBAQAogewogCVBvcnRFbmFibGVfdAkJIHBvcnRfZW5hYmxlOwogCU1QSURlZmF1bHRSZXBseV90CSByZXBseV9idWY7Ci0JaW50CSBpaTsKKwlpbnQJIHJjOwogCWludAkgcmVxX3N6OwogCWludAkgcmVwbHlfc3o7CiAKQEAgLTI0OTQsMjIgKzI3MDQsMTUgQEAKIAogCS8qIFJBSUQgRlcgbWF5IHRha2UgYSBsb25nIHRpbWUgdG8gZW5hYmxlCiAJICovCi0JaWYgKGlvYy0+YnVzX3R5cGUgPT0gRkMpIHsKLQkJaWkgPSBtcHRfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KGlvYywgcmVxX3N6LCAodTMyKikmcG9ydF9lbmFibGUsCi0JCQkJcmVwbHlfc3osICh1MTYqKSZyZXBseV9idWYsIDY1IC8qc2Vjb25kcyovLCBzbGVlcEZsYWcpOwotCX0gZWxzZSB7Ci0JCWlpID0gbXB0X2hhbmRzaGFrZV9yZXFfcmVwbHlfd2FpdChpb2MsIHJlcV9zeiwgKHUzMiopJnBvcnRfZW5hYmxlLAorCWlmICggKGlvYy0+ZmFjdHMuUHJvZHVjdElEICYgTVBJX0ZXX0hFQURFUl9QSURfUFJPRF9NQVNLKQorCQkJPiBNUElfRldfSEVBREVSX1BJRF9QUk9EX1RBUkdFVF9TQ1NJICkgeworCQlyYyA9IG1wdF9oYW5kc2hha2VfcmVxX3JlcGx5X3dhaXQoaW9jLCByZXFfc3osICh1MzIqKSZwb3J0X2VuYWJsZSwKIAkJCQlyZXBseV9zeiwgKHUxNiopJnJlcGx5X2J1ZiwgMzAwIC8qc2Vjb25kcyovLCBzbGVlcEZsYWcpOworCX0gZWxzZSB7CisJCXJjID0gbXB0X2hhbmRzaGFrZV9yZXFfcmVwbHlfd2FpdChpb2MsIHJlcV9zeiwgKHUzMiopJnBvcnRfZW5hYmxlLAorCQkJCXJlcGx5X3N6LCAodTE2KikmcmVwbHlfYnVmLCAzMCAvKnNlY29uZHMqLywgc2xlZXBGbGFnKTsKIAl9Ci0KLQlpZiAoaWkgIT0gMCkKLQkJcmV0dXJuIGlpOwotCi0JLyogV2UgZG8gbm90IGV2ZW4gbG9vayBhdCB0aGUgcmVwbHksIHNvIHdlIG5lZWQgbm90Ci0JICogc3dhcCB0aGUgbXVsdGktYnl0ZSBmaWVsZHMuCi0JICovCi0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qCkBAIC0yNjY2LDkgKzI4NjksOCBAQAogICoJCTwwIGZvciBmdyB1cGxvYWQgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotbXB0X2Rvd25sb2FkYm9vdChNUFRfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBGbGFnKQorbXB0X2Rvd25sb2FkYm9vdChNUFRfQURBUFRFUiAqaW9jLCBNcGlGd0hlYWRlcl90ICpwRndIZWFkZXIsIGludCBzbGVlcEZsYWcpCiB7Ci0JTXBpRndIZWFkZXJfdAkJKnBGd0hlYWRlcjsKIAlNcGlFeHRJbWFnZUhlYWRlcl90CSpwRXh0SW1hZ2U7CiAJdTMyCQkJIGZ3U2l6ZTsKIAl1MzIJCQkgZGlhZzB2YWw7CkBAIC0yNjc5LDE4ICsyODgxLDggQEAKIAl1MzIJCQkgbG9hZF9hZGRyOwogCXUzMiAJCQkgaW9jX3N0YXRlPTA7CiAKLQlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdDogZncgc2l6ZSAweCV4LCBpb2MgRlcgUHRyICVwXG4iLAotCQkJCWlvYy0+bmFtZSwgaW9jLT5mYWN0cy5GV0ltYWdlU2l6ZSwgaW9jLT5jYWNoZWRfZncpKTsKLQotCWlmICggaW9jLT5mYWN0cy5GV0ltYWdlU2l6ZSA9PSAwICkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGlvYy0+Y2FjaGVkX2Z3ID09IE5VTEwpCi0JCXJldHVybiAtMjsKLQotCS8qIHByZXZlbnQgYSBzZWNvbmQgZG93bmxvYWRib290IGFuZCBtZW1vcnkgZnJlZSB3aXRoIGFsdF9pb2MgKi8KLQlpZiAoaW9jLT5hbHRfaW9jICYmIGlvYy0+YWx0X2lvYy0+Y2FjaGVkX2Z3KQotCQlpb2MtPmFsdF9pb2MtPmNhY2hlZF9mdyA9IE5VTEw7CisJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJkb3dubG9hZGJvb3Q6IGZ3IHNpemUgMHgleCAoJWQpLCBGVyBQdHIgJXBcbiIsCisJCQkJaW9jLT5uYW1lLCBwRndIZWFkZXItPkltYWdlU2l6ZSwgcEZ3SGVhZGVyLT5JbWFnZVNpemUsIHBGd0hlYWRlcikpOwogCiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UsIDB4RkYpOwogCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5Xcml0ZVNlcXVlbmNlLCBNUElfV1JTRVFfMVNUX0tFWV9WQUxVRSk7CkBAIC0yNzE4LDE2ICsyOTEwLDE3IEBACiAJCQkJaW9jLT5uYW1lLCBjb3VudCkpOwogCQkJYnJlYWs7CiAJCX0KLQkJLyogd2FpdCAxIHNlYyAqLworCQkvKiB3YWl0IC4xIHNlYyAqLwogCQlpZiAoc2xlZXBGbGFnID09IENBTl9TTEVFUCkgewotCQkJbXNsZWVwX2ludGVycnVwdGlibGUgKDEwMDApOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUgKDEwMCk7CiAJCX0gZWxzZSB7Ci0JCQltZGVsYXkgKDEwMDApOworCQkJbWRlbGF5ICgxMDApOwogCQl9CiAJfQogCiAJaWYgKCBjb3VudCA9PSAzMCApIHsKLQkJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJkb3dubG9hZGJvb3QgZmFpbGVkISBVbmFibGUgdG8gUkVTRVRfQURBUFRFUiBkaWFnMHZhbD0leFxuIiwKKwkJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJkb3dubG9hZGJvb3QgZmFpbGVkISAiCisJCSJVbmFibGUgdG8gZ2V0IE1QSV9ESUFHX0RSV0UgbW9kZSwgZGlhZzB2YWw9JXhcbiIsCiAJCWlvYy0+bmFtZSwgZGlhZzB2YWwpKTsKIAkJcmV0dXJuIC0zOwogCX0KQEAgLTI3NDIsNyArMjkzNSw2IEBACiAJLyogU2V0IHRoZSBEaWFnUndFbiBhbmQgRGlzYWJsZSBBUk0gYml0cyAqLwogCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5EaWFnbm9zdGljLCAoTVBJX0RJQUdfUldfRU5BQkxFIHwgTVBJX0RJQUdfRElTQUJMRV9BUk0pKTsKIAotCXBGd0hlYWRlciA9IChNcGlGd0hlYWRlcl90ICopIGlvYy0+Y2FjaGVkX2Z3OwogCWZ3U2l6ZSA9IChwRndIZWFkZXItPkltYWdlU2l6ZSArIDMpLzQ7CiAJcHRyRncgPSAodTMyICopIHBGd0hlYWRlcjsKIApAQCAtMjc5MiwxOSArMjk4NCwzOCBAQAogCS8qIENsZWFyIHRoZSBpbnRlcm5hbCBmbGFzaCBiYWQgYml0IC0gYXV0b2luY3JlbWVudGluZyByZWdpc3RlciwKIAkgKiBzbyBtdXN0IGRvIHR3byB3cml0ZXMuCiAJICovCi0JQ0hJUFJFR19QSU9fV1JJVEUzMigmaW9jLT5waW9fY2hpcC0+RGlhZ1J3QWRkcmVzcywgMHgzRjAwMDAwMCk7Ci0JZGlhZ1J3RGF0YSA9IENISVBSRUdfUElPX1JFQUQzMigmaW9jLT5waW9fY2hpcC0+RGlhZ1J3RGF0YSk7Ci0JZGlhZ1J3RGF0YSB8PSAweDQwMDAwMDA7Ci0JQ0hJUFJFR19QSU9fV1JJVEUzMigmaW9jLT5waW9fY2hpcC0+RGlhZ1J3QWRkcmVzcywgMHgzRjAwMDAwMCk7Ci0JQ0hJUFJFR19QSU9fV1JJVEUzMigmaW9jLT5waW9fY2hpcC0+RGlhZ1J3RGF0YSwgZGlhZ1J3RGF0YSk7CisJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgeworCQkvKgorCQkgKiAxMDMwIGFuZCAxMDM1IEgvVyBlcnJhdGEsIHdvcmthcm91bmQgdG8gYWNjZXNzCisJCSAqIHRoZSBDbGVhckZsYXNoQmFkU2lnbmF0dXJlQml0CisJCSAqLworCQlDSElQUkVHX1BJT19XUklURTMyKCZpb2MtPnBpb19jaGlwLT5EaWFnUndBZGRyZXNzLCAweDNGMDAwMDAwKTsKKwkJZGlhZ1J3RGF0YSA9IENISVBSRUdfUElPX1JFQUQzMigmaW9jLT5waW9fY2hpcC0+RGlhZ1J3RGF0YSk7CisJCWRpYWdSd0RhdGEgfD0gMHg0MDAwMDAwMDsKKwkJQ0hJUFJFR19QSU9fV1JJVEUzMigmaW9jLT5waW9fY2hpcC0+RGlhZ1J3QWRkcmVzcywgMHgzRjAwMDAwMCk7CisJCUNISVBSRUdfUElPX1dSSVRFMzIoJmlvYy0+cGlvX2NoaXAtPkRpYWdSd0RhdGEsIGRpYWdSd0RhdGEpOworCisJfSBlbHNlIC8qIGlmKChpb2MtPmJ1c190eXBlID09IFNBUykgfHwgKGlvYy0+YnVzX3R5cGUgPT0gRkMpKSAqLyB7CisJCWRpYWcwdmFsID0gQ0hJUFJFR19SRUFEMzIoJmlvYy0+Y2hpcC0+RGlhZ25vc3RpYyk7CisJCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5EaWFnbm9zdGljLCBkaWFnMHZhbCB8CisJCSAgICBNUElfRElBR19DTEVBUl9GTEFTSF9CQURfU0lHKTsKKworCQkvKiB3YWl0IDEgbXNlYyAqLworCQlpZiAoc2xlZXBGbGFnID09IENBTl9TTEVFUCkgeworCQkJbXNsZWVwX2ludGVycnVwdGlibGUgKDEpOworCQl9IGVsc2UgeworCQkJbWRlbGF5ICgxKTsKKwkJfQorCX0KIAogCWlmIChpb2MtPmVycmF0YV9mbGFnXzEwNjQpCiAJCXBjaV9kaXNhYmxlX2lvX2FjY2Vzcyhpb2MtPnBjaWRldik7CiAKIAlkaWFnMHZhbCA9IENISVBSRUdfUkVBRDMyKCZpb2MtPmNoaXAtPkRpYWdub3N0aWMpOwotCWRkbHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiZG93bmxvYWRib290IGRpYWcwdmFsPSV4LCB0dXJuaW5nIG9mZiBQUkVWRU5UX0lPQ19CT09ULCBESVNBQkxFX0FSTVxuIiwKKwlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdCBkaWFnMHZhbD0leCwgIgorCQkidHVybmluZyBvZmYgUFJFVkVOVF9JT0NfQk9PVCwgRElTQUJMRV9BUk0sIFJXX0VOQUJMRVxuIiwKIAkJaW9jLT5uYW1lLCBkaWFnMHZhbCkpOwotCWRpYWcwdmFsICY9IH4oTVBJX0RJQUdfUFJFVkVOVF9JT0NfQk9PVCB8IE1QSV9ESUFHX0RJU0FCTEVfQVJNKTsKKwlkaWFnMHZhbCAmPSB+KE1QSV9ESUFHX1BSRVZFTlRfSU9DX0JPT1QgfCBNUElfRElBR19ESVNBQkxFX0FSTSB8IE1QSV9ESUFHX1JXX0VOQUJMRSk7CiAJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJkb3dubG9hZGJvb3Qgbm93IGRpYWcwdmFsPSV4XG4iLAogCQlpb2MtPm5hbWUsIGRpYWcwdmFsKSk7CiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkRpYWdub3N0aWMsIGRpYWcwdmFsKTsKQEAgLTI4MTIsMTAgKzMwMjMsMjMgQEAKIAkvKiBXcml0ZSAweEZGIHRvIHJlc2V0IHRoZSBzZXF1ZW5jZXIgKi8KIAlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSwgMHhGRik7CiAKKwlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpIHsKKwkJaW9jX3N0YXRlID0gbXB0X0dldElvY1N0YXRlKGlvYywgMCk7CisJCWlmICggKEdldElvY0ZhY3RzKGlvYywgc2xlZXBGbGFnLAorCQkJCU1QVF9IT1NURVZFTlRfSU9DX0JSSU5HVVApKSAhPSAwICkgeworCQkJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJHZXRJb2NGYWN0cyBmYWlsZWQ6IElvY1N0YXRlPSV4XG4iLAorCQkJCQlpb2MtPm5hbWUsIGlvY19zdGF0ZSkpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9CisKIAlmb3IgKGNvdW50PTA7IGNvdW50PEhaKjIwOyBjb3VudCsrKSB7CiAJCWlmICgoaW9jX3N0YXRlID0gbXB0X0dldElvY1N0YXRlKGlvYywgMCkpICYgTVBJX0lPQ19TVEFURV9SRUFEWSkgewogCQkJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJkb3dubG9hZGJvb3Qgc3VjY2Vzc2Z1bCEgKGNvdW50PSVkKSBJb2NTdGF0ZT0leFxuIiwKIAkJCQkJaW9jLT5uYW1lLCBjb3VudCwgaW9jX3N0YXRlKSk7CisJCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KIAkJCWlmICgoU2VuZElvY0luaXQoaW9jLCBzbGVlcEZsYWcpKSAhPSAwKSB7CiAJCQkJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJkb3dubG9hZGJvb3Q6IFNlbmRJb2NJbml0IGZhaWxlZFxuIiwKIAkJCQkJaW9jLT5uYW1lKSk7CkBAIC0zMDQ5LDEyICszMjczLDEzIEBACiAKIAkJCQkvKiB3YWl0IDEgc2VjICovCiAJCQkJaWYgKHNsZWVwRmxhZyA9PSBDQU5fU0xFRVApIHsKLQkJCQkJc3NsZWVwKDEpOworCQkJCQltc2xlZXBfaW50ZXJydXB0aWJsZSAoMTAwMCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJbWRlbGF5ICgxMDAwKTsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAoKGNvdW50ID0gbXB0X2Rvd25sb2FkYm9vdChpb2MsIHNsZWVwRmxhZykpIDwgMCkgeworCQkJaWYgKChjb3VudCA9IG1wdF9kb3dubG9hZGJvb3QoaW9jLAorCQkJCShNcGlGd0hlYWRlcl90ICopaW9jLT5jYWNoZWRfZncsIHNsZWVwRmxhZykpIDwgMCkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgTVlOQU0KIAkJCQkJIjogZmlybXdhcmUgZG93bmxvYWRib290IGZhaWx1cmUgKCVkKSFcbiIsIGNvdW50KTsKIAkJCX0KQEAgLTM2MzcsNyArMzg2Miw3IEBACiAJaW50IGNvdW50ID0gMDsKIAl1MzIgaW50c3RhdD0wOwogCi0JY250ZG4gPSAoKHNsZWVwRmxhZyA9PSBDQU5fU0xFRVApID8gSFogOiAxMDAwKSAqIGhvd2xvbmc7CisJY250ZG4gPSAxMDAwICogaG93bG9uZzsKIAogCWlmIChzbGVlcEZsYWcgPT0gQ0FOX1NMRUVQKSB7CiAJCXdoaWxlICgtLWNudGRuKSB7CkBAIC0zNjg3LDcgKzM5MTIsNyBAQAogCWludCBjb3VudCA9IDA7CiAJdTMyIGludHN0YXQ9MDsKIAotCWNudGRuID0gKChzbGVlcEZsYWcgPT0gQ0FOX1NMRUVQKSA/IEhaIDogMTAwMCkgKiBob3dsb25nOworCWNudGRuID0gMTAwMCAqIGhvd2xvbmc7CiAJaWYgKHNsZWVwRmxhZyA9PSBDQU5fU0xFRVApIHsKIAkJd2hpbGUgKC0tY250ZG4pIHsKIAkJCWludHN0YXQgPSBDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5JbnRTdGF0dXMpOwpAQCAtNDAwMSw2ICs0MjI2LDg1IEBACiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCisgKgltcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbiAtIFBlcmZvcm0gb3BlcmF0aW9uIG9uIFNBUyBQZXJzaXRlbnQgVGFibGUKKyAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCisgKglAc2FzX2FkZHJlc3M6IDY0Yml0IFNBUyBBZGRyZXNzIGZvciBvcGVyYXRpb24uCisgKglAdGFyZ2V0X2lkOiBzcGVjaWZpZWQgdGFyZ2V0IGZvciBvcGVyYXRpb24KKyAqCUBidXM6IHNwZWNpZmllZCBidXMgZm9yIG9wZXJhdGlvbgorICoJQHBlcnNpc3Rfb3Bjb2RlOiBzZWUgYmVsb3cKKyAqCisgKglNUElfU0FTX09QX0NMRUFSX05PVF9QUkVTRU5UIC0gRnJlZSBhbGwgcGVyc2lzdCBUYXJnZXRJRCBtYXBwaW5ncyBmb3IKKyAqCQlkZXZpY2VzIG5vdCBjdXJyZW50bHkgcHJlc2VudC4KKyAqCU1QSV9TQVNfT1BfQ0xFQVJfQUxMX1BFUlNJU1RFTlQgLSBDbGVhciBhbCBwZXJzaXN0IFRhcmdldElEIG1hcHBpbmdzCisgKgorICoJTk9URTogRG9uJ3QgdXNlIG5vdCB0aGlzIGZ1bmN0aW9uIGR1cmluZyBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKglSZXR1cm5zOiAwIGZvciBzdWNjZXNzLCBub24temVybyBlcnJvcgorICovCisKKy8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KK2ludAorbXB0YmFzZV9zYXNfcGVyc2lzdF9vcGVyYXRpb24oTVBUX0FEQVBURVIgKmlvYywgdTggcGVyc2lzdF9vcGNvZGUpCit7CisJU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdAkqc2FzSW9Vbml0Q250clJlcTsKKwlTYXNJb1VuaXRDb250cm9sUmVwbHlfdAkJKnNhc0lvVW5pdENudHJSZXBseTsKKwlNUFRfRlJBTUVfSERSCQkJKm1mID0gTlVMTDsKKwlNUElIZWFkZXJfdAkJCSptcGlfaGRyOworCisKKwkvKiBpbnN1cmUgZ2FyYmFnZSBpcyBub3Qgc2VudCB0byBmdyAqLworCXN3aXRjaChwZXJzaXN0X29wY29kZSkgeworCisJY2FzZSBNUElfU0FTX09QX0NMRUFSX05PVF9QUkVTRU5UOgorCWNhc2UgTVBJX1NBU19PUF9DTEVBUl9BTExfUEVSU0lTVEVOVDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKworCXByaW50aygiJXM6IHBlcnNpc3Rfb3Bjb2RlPSV4XG4iLF9fRlVOQ1RJT05fXywgcGVyc2lzdF9vcGNvZGUpOworCisJLyogR2V0IGEgTUYgZm9yIHRoaXMgY29tbWFuZC4KKwkgKi8KKwlpZiAoKG1mID0gbXB0X2dldF9tc2dfZnJhbWUobXB0X2Jhc2VfaW5kZXgsIGlvYykpID09IE5VTEwpIHsKKwkJcHJpbnRrKCIlczogbm8gbXNnIGZyYW1lcyFcbiIsX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC0xOworICAgICAgICB9CisKKwltcGlfaGRyID0gKE1QSUhlYWRlcl90ICopIG1mOworCXNhc0lvVW5pdENudHJSZXEgPSAoU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCAqKW1mOworCW1lbXNldChzYXNJb1VuaXRDbnRyUmVxLDAsc2l6ZW9mKFNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QpKTsKKwlzYXNJb1VuaXRDbnRyUmVxLT5GdW5jdGlvbiA9IE1QSV9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOworCXNhc0lvVW5pdENudHJSZXEtPk1zZ0NvbnRleHQgPSBtcGlfaGRyLT5Nc2dDb250ZXh0OworCXNhc0lvVW5pdENudHJSZXEtPk9wZXJhdGlvbiA9IHBlcnNpc3Rfb3Bjb2RlOworCisJaW5pdF90aW1lcigmaW9jLT5wZXJzaXN0X3RpbWVyKTsKKwlpb2MtPnBlcnNpc3RfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBpb2M7CisJaW9jLT5wZXJzaXN0X3RpbWVyLmZ1bmN0aW9uID0gbXB0X3RpbWVyX2V4cGlyZWQ7CisJaW9jLT5wZXJzaXN0X3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqMTAgLyogMTAgc2VjICovOworCWlvYy0+cGVyc2lzdF93YWl0X2RvbmU9MDsKKwlhZGRfdGltZXIoJmlvYy0+cGVyc2lzdF90aW1lcik7CisJbXB0X3B1dF9tc2dfZnJhbWUobXB0X2Jhc2VfaW5kZXgsIGlvYywgbWYpOworCXdhaXRfZXZlbnQobXB0X3dhaXRxLCBpb2MtPnBlcnNpc3Rfd2FpdF9kb25lKTsKKworCXNhc0lvVW5pdENudHJSZXBseSA9CisJICAgIChTYXNJb1VuaXRDb250cm9sUmVwbHlfdCAqKWlvYy0+cGVyc2lzdF9yZXBseV9mcmFtZTsKKwlpZiAobGUxNl90b19jcHUoc2FzSW9Vbml0Q250clJlcGx5LT5JT0NTdGF0dXMpICE9IE1QSV9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoIiVzOiBJT0NTdGF0dXM9MHglWCBJT0NMb2dJbmZvPTB4JVhcbiIsCisJCSAgICBfX0ZVTkNUSU9OX18sCisJCSAgICBzYXNJb1VuaXRDbnRyUmVwbHktPklPQ1N0YXR1cywKKwkJICAgIHNhc0lvVW5pdENudHJSZXBseS0+SU9DTG9nSW5mbyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlwcmludGsoIiVzOiBzdWNjZXNzXG4iLF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIDA7Cit9CisKKy8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KKy8qCiAgKglHZXRJb1VuaXRQYWdlMiAtIFJldHJpZXZlIEJJT1MgdmVyc2lvbiBhbmQgYm9vdCBvcmRlciBpbmZvcm1hdGlvbi4KICAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCiAgKgpAQCAtNDM0MCwxMCArNDY0NCwxMCBAQAogCWlmIChtcHRfY29uZmlnKGlvYywgJmNmZykgIT0gMCkKIAkJZ290byBkb25lX2FuZF9mcmVlOwogCi0JaWYgKCAobWVtID0gKHU4ICopaW9jLT5zcGlfZGF0YS5wSW9jUGcyKSA9PSBOVUxMICkgeworCWlmICggKG1lbSA9ICh1OCAqKWlvYy0+cmFpZF9kYXRhLnBJb2NQZzIpID09IE5VTEwgKSB7CiAJCW1lbSA9IGttYWxsb2MoaW9jcGFnZTJzeiwgR0ZQX0FUT01JQyk7CiAJCWlmIChtZW0pIHsKLQkJCWlvYy0+c3BpX2RhdGEucElvY1BnMiA9IChJT0NQYWdlMl90ICopIG1lbTsKKwkJCWlvYy0+cmFpZF9kYXRhLnBJb2NQZzIgPSAoSU9DUGFnZTJfdCAqKSBtZW07CiAJCX0gZWxzZSB7CiAJCQlnb3RvIGRvbmVfYW5kX2ZyZWU7CiAJCX0KQEAgLTQzNjAsNyArNDY2NCw3IEBACiAJCS8qIEF0IGxlYXN0IDEgUkFJRCBWb2x1bWUKIAkJICovCiAJCXBJb2NSdiA9IHBJb2MyLT5SYWlkVm9sdW1lOwotCQlpb2MtPnNwaV9kYXRhLmlzUmFpZCA9IDA7CisJCWlvYy0+cmFpZF9kYXRhLmlzUmFpZCA9IDA7CiAJCWZvciAoamogPSAwOyBqaiA8IG5Wb2xzOyBqaisrLCBwSW9jUnYrKykgewogCQkJdmlkID0gcElvY1J2LT5Wb2x1bWVJRDsKIAkJCXZidXMgPSBwSW9jUnYtPlZvbHVtZUJ1czsKQEAgLTQzNjksNyArNDY3Myw3IEBACiAJCQkvKiBmaW5kIHRoZSBtYXRjaAogCQkJICovCiAJCQlpZiAodmJ1cyA9PSAwKSB7Ci0JCQkJaW9jLT5zcGlfZGF0YS5pc1JhaWQgfD0gKDEgPDwgdmlkKTsKKwkJCQlpb2MtPnJhaWRfZGF0YS5pc1JhaWQgfD0gKDEgPDwgdmlkKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogRXJyb3IhIEFsd2F5cyBidXMgMAogCQkJCSAqLwpAQCAtNDQwNCw4ICs0NzA4LDggQEAKIAogCS8qIEZyZWUgdGhlIG9sZCBwYWdlCiAJICovCi0Ja2ZyZWUoaW9jLT5zcGlfZGF0YS5wSW9jUGczKTsKLQlpb2MtPnNwaV9kYXRhLnBJb2NQZzMgPSBOVUxMOworCWtmcmVlKGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMpOworCWlvYy0+cmFpZF9kYXRhLnBJb2NQZzMgPSBOVUxMOwogCiAJLyogVGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBoeXNpY2FsIGRpc2suCiAJICogUmVhZCBhbmQgc2F2ZSBJT0MgUGFnZSAzCkBAIC00NDQyLDcgKzQ3NDYsNyBAQAogCQltZW0gPSBrbWFsbG9jKGlvY3BhZ2Uzc3osIEdGUF9BVE9NSUMpOwogCQlpZiAobWVtKSB7CiAJCQltZW1jcHkobWVtLCAodTggKilwSW9jMywgaW9jcGFnZTNzeik7Ci0JCQlpb2MtPnNwaV9kYXRhLnBJb2NQZzMgPSAoSU9DUGFnZTNfdCAqKSBtZW07CisJCQlpb2MtPnJhaWRfZGF0YS5wSW9jUGczID0gKElPQ1BhZ2UzX3QgKikgbWVtOwogCQl9CiAJfQogCkBAIC01MzY2LDggKzU2NzAsOCBAQAogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCi1zdGF0aWMgY2hhciAqCi1FdmVudERlc2NyaXB0aW9uU3RyKHU4IGV2ZW50LCB1MzIgZXZEYXRhMCkKK3N0YXRpYyB2b2lkCitFdmVudERlc2NyaXB0aW9uU3RyKHU4IGV2ZW50LCB1MzIgZXZEYXRhMCwgY2hhciAqZXZTdHIpCiB7CiAJY2hhciAqZHM7CiAKQEAgLTU0MjAsOCArNTcyNCw5NSBAQAogCQkJZHMgPSAiRXZlbnRzKE9GRikgQ2hhbmdlIjsKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfSU5URUdSQVRFRF9SQUlEOgotCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQiOworCXsKKwkJdTggUmVhc29uQ29kZSA9ICh1OCkoZXZEYXRhMCA+PiAxNik7CisJCXN3aXRjaCAoUmVhc29uQ29kZSkgeworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1ZPTFVNRV9DUkVBVEVEIDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZDogVm9sdW1lIENyZWF0ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfVk9MVU1FX0RFTEVURUQgOgorCQkJZHMgPSAiSW50ZWdyYXRlZCBSYWlkOiBWb2x1bWUgRGVsZXRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19WT0xVTUVfU0VUVElOR1NfQ0hBTkdFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFZvbHVtZSBTZXR0aW5ncyBDaGFuZ2VkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1ZPTFVNRV9TVEFUVVNfQ0hBTkdFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFZvbHVtZSBTdGF0dXMgQ2hhbmdlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19WT0xVTUVfUEhZU0RJU0tfQ0hBTkdFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFZvbHVtZSBQaHlzZGlzayBDaGFuZ2VkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1BIWVNESVNLX0NSRUFURUQgOgorCQkJZHMgPSAiSW50ZWdyYXRlZCBSYWlkOiBQaHlzZGlzayBDcmVhdGVkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1BIWVNESVNLX0RFTEVURUQgOgorCQkJZHMgPSAiSW50ZWdyYXRlZCBSYWlkOiBQaHlzZGlzayBEZWxldGVkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1BIWVNESVNLX1NFVFRJTkdTX0NIQU5HRUQgOgorCQkJZHMgPSAiSW50ZWdyYXRlZCBSYWlkOiBQaHlzZGlzayBTZXR0aW5ncyBDaGFuZ2VkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1BIWVNESVNLX1NUQVRVU19DSEFOR0VEIDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZDogUGh5c2Rpc2sgU3RhdHVzIENoYW5nZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfRE9NQUlOX1ZBTF9ORUVERUQgOgorCQkJZHMgPSAiSW50ZWdyYXRlZCBSYWlkOiBEb21haW4gVmFsaWRhdGlvbiBOZWVkZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfU01BUlRfREFUQSA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ7IFNtYXJ0IERhdGEiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUkVQTEFDRV9BQ1RJT05fU1RBUlRFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFJlcGxhY2UgQWN0aW9uIFN0YXJ0ZWQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQiOwogCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBNUElfRVZFTlRfU0NTSV9ERVZJQ0VfU1RBVFVTX0NIQU5HRToKKwkJZHMgPSAiU0NTSSBEZXZpY2UgU3RhdHVzIENoYW5nZSI7CisJCWJyZWFrOworCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKKwl7CisJCXU4IFJlYXNvbkNvZGUgPSAodTgpKGV2RGF0YTAgPj4gMTYpOworCQlzd2l0Y2ggKFJlYXNvbkNvZGUpIHsKKwkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FEREVEOgorCQkJZHMgPSAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBBZGRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX05PVF9SRVNQT05ESU5HOgorCQkJZHMgPSAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBEZWxldGVkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQToKKwkJCWRzID0gIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogU01BUlQgRGF0YSI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX05PX1BFUlNJU1RfQURERUQ6CisJCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IE5vIFBlcnNpc3RhbmN5IEFkZGVkIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHMgPSAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBVbmtub3duIjsKKwkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgTVBJX0VWRU5UX09OX0JVU19USU1FUl9FWFBJUkVEOgorCQlkcyA9ICJCdXMgVGltZXIgRXhwaXJlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJX0VWRU5UX1FVRVVFX0ZVTEw6CisJCWRzID0gIlF1ZXVlIEZ1bGwiOworCQlicmVhazsKKwljYXNlIE1QSV9FVkVOVF9TQVNfU0VTOgorCQlkcyA9ICJTQVMgU0VTIEV2ZW50IjsKKwkJYnJlYWs7CisJY2FzZSBNUElfRVZFTlRfUEVSU0lTVEVOVF9UQUJMRV9GVUxMOgorCQlkcyA9ICJQZXJzaXN0ZW50IFRhYmxlIEZ1bGwiOworCQlicmVhazsKKwljYXNlIE1QSV9FVkVOVF9TQVNfUEhZX0xJTktfU1RBVFVTOgorCQlkcyA9ICJTQVMgUEhZIExpbmsgU3RhdHVzIjsKKwkJYnJlYWs7CisJY2FzZSBNUElfRVZFTlRfU0FTX0RJU0NPVkVSWV9FUlJPUjoKKwkJZHMgPSAiU0FTIERpc2NvdmVyeSBFcnJvciI7CisJCWJyZWFrOworCiAJLyoKIAkgKiAgTVBUIGJhc2UgImN1c3RvbSIgZXZlbnRzIG1heSBiZSBhZGRlZCBoZXJlLi4uCiAJICovCkBAIC01NDI5LDcgKzU4MjAsNyBAQAogCQlkcyA9ICJVbmtub3duIjsKIAkJYnJlYWs7CiAJfQotCXJldHVybiBkczsKKwlzdHJjcHkoZXZTdHIsZHMpOwogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCkBAIC01NDUxLDcgKzU4NDIsNyBAQAogCWludCBpaTsKIAlpbnQgciA9IDA7CiAJaW50IGhhbmRsZXJzID0gMDsKLQljaGFyICpldlN0cjsKKwljaGFyIGV2U3RyWzEwMF07CiAJdTggZXZlbnQ7CiAKIAkvKgpAQCAtNTQ2NCw3ICs1ODU1LDcgQEAKIAkJZXZEYXRhMCA9IGxlMzJfdG9fY3B1KHBFdmVudFJlcGx5LT5EYXRhWzBdKTsKIAl9CiAKLQlldlN0ciA9IEV2ZW50RGVzY3JpcHRpb25TdHIoZXZlbnQsIGV2RGF0YTApOworCUV2ZW50RGVzY3JpcHRpb25TdHIoZXZlbnQsIGV2RGF0YTAsIGV2U3RyKTsKIAlkZXZ0cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJNUFQgZXZlbnQgKCVzPSUwMlhoKSBkZXRlY3RlZCFcbiIsCiAJCQlpb2MtPm5hbWUsCiAJCQlldlN0ciwKQEAgLTU0ODEsMjAgKzU4NzIsNiBAQAogCSAqICBEbyBnZW5lcmFsIC8gYmFzZSBkcml2ZXIgZXZlbnQgcHJvY2Vzc2luZwogCSAqLwogCXN3aXRjaChldmVudCkgewotCWNhc2UgTVBJX0VWRU5UX05PTkU6CQkJLyogMDAgKi8KLQljYXNlIE1QSV9FVkVOVF9MT0dfREFUQToJCS8qIDAxICovCi0JY2FzZSBNUElfRVZFTlRfU1RBVEVfQ0hBTkdFOgkJLyogMDIgKi8KLQljYXNlIE1QSV9FVkVOVF9VTklUX0FUVEVOVElPTjoJCS8qIDAzICovCi0JY2FzZSBNUElfRVZFTlRfSU9DX0JVU19SRVNFVDoJCS8qIDA0ICovCi0JY2FzZSBNUElfRVZFTlRfRVhUX0JVU19SRVNFVDoJCS8qIDA1ICovCi0JY2FzZSBNUElfRVZFTlRfUkVTQ0FOOgkJCS8qIDA2ICovCi0JY2FzZSBNUElfRVZFTlRfTElOS19TVEFUVVNfQ0hBTkdFOgkvKiAwNyAqLwotCWNhc2UgTVBJX0VWRU5UX0xPT1BfU1RBVEVfQ0hBTkdFOgkvKiAwOCAqLwotCWNhc2UgTVBJX0VWRU5UX0xPR09VVDoJCQkvKiAwOSAqLwotCWNhc2UgTVBJX0VWRU5UX0lOVEVHUkFURURfUkFJRDoJCS8qIDBCICovCi0JY2FzZSBNUElfRVZFTlRfU0NTSV9ERVZJQ0VfU1RBVFVTX0NIQU5HRToJLyogMEMgKi8KLQlkZWZhdWx0OgotCQlicmVhazsKIAljYXNlIE1QSV9FVkVOVF9FVkVOVF9DSEFOR0U6CQkvKiAwQSAqLwogCQlpZiAoZXZEYXRhTGVuKSB7CiAJCQl1OCBldlN0YXRlID0gZXZEYXRhMCAmIDB4RkY7CkBAIC01NTA3LDYgKzU4ODQsOCBAQAogCQkJfQogCQl9CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCS8qCkBAIC01NjUzLDYgKzYwMzIsMTExIEBACiAJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIkxvZ0luZm8oMHglMDh4KTogRi9XOiAlc1xuIiwgaW9jLT5uYW1lLCBsb2dfaW5mbywgZGVzYyk7CiB9CiAKKy8qIHN0cmluZ3MgZm9yIHNhcyBsb2dpbmZvICovCisJc3RhdGljIGNoYXIgKm9yaWdpbmF0b3Jfc3RyW10gPSB7CisJCSJJT1AiLAkJCQkJCS8qIDAwaCAqLworCQkiUEwiLAkJCQkJCS8qIDAxaCAqLworCQkiSVIiCQkJCQkJLyogMDJoICovCisJfTsKKwlzdGF0aWMgY2hhciAqaW9wX2NvZGVfc3RyW10gPSB7CisJCU5VTEwsCQkJCQkJLyogMDBoICovCisJCSJJbnZhbGlkIFNBUyBBZGRyZXNzIiwJCQkJLyogMDFoICovCisJCU5VTEwsCQkJCQkJLyogMDJoICovCisJCSJJbnZhbGlkIFBhZ2UiLAkJCQkJLyogMDNoICovCisJCU5VTEwsCQkJCQkJLyogMDRoICovCisJCSJUYXNrIFRlcm1pbmF0ZWQiCQkJCS8qIDA1aCAqLworCX07CisJc3RhdGljIGNoYXIgKnBsX2NvZGVfc3RyW10gPSB7CisJCU5VTEwsCQkJCQkJLyogMDBoICovCisJCSJPcGVuIEZhaWx1cmUiLAkJCQkJLyogMDFoICovCisJCSJJbnZhbGlkIFNjYXR0ZXIgR2F0aGVyIExpc3QiLAkJCS8qIDAyaCAqLworCQkiV3JvbmcgUmVsYXRpdmUgT2Zmc2V0IG9yIEZyYW1lIExlbmd0aCIsCS8qIDAzaCAqLworCQkiRnJhbWUgVHJhbnNmZXIgRXJyb3IiLAkJCQkvKiAwNGggKi8KKwkJIlRyYW5zbWl0IEZyYW1lIENvbm5lY3RlZCBMb3ciLAkJCS8qIDA1aCAqLworCQkiU0FUQSBOb24tTkNRIFJXIEVycm9yIEJpdCBTZXQiLAkJLyogMDZoICovCisJCSJTQVRBIFJlYWQgTG9nIFJlY2VpdmUgRGF0YSBFcnJvciIsCQkvKiAwN2ggKi8KKwkJIlNBVEEgTkNRIEZhaWwgQWxsIENvbW1hbmRzIEFmdGVyIEVycm9yIiwJLyogMDhoICovCisJCSJTQVRBIEVycm9yIGluIFJlY2VpdmUgU2V0IERldmljZSBCaXQgRklTIiwJLyogMDloICovCisJCSJSZWNlaXZlIEZyYW1lIEludmFsaWQgTWVzc2FnZSIsCQkvKiAwQWggKi8KKwkJIlJlY2VpdmUgQ29udGV4dCBNZXNzYWdlIFZhbGlkIEVycm9yIiwJCS8qIDBCaCAqLworCQkiUmVjZWl2ZSBGcmFtZSBDdXJyZW50IEZyYW1lIEVycm9yIiwJCS8qIDBDaCAqLworCQkiU0FUQSBMaW5rIERvd24iLAkJCQkvKiAwRGggKi8KKwkJIkRpc2NvdmVyeSBTQVRBIEluaXQgVyBJT1MiLAkJCS8qIDBFaCAqLworCQkiQ29uZmlnIEludmFsaWQgUGFnZSIsCQkJCS8qIDBGaCAqLworCQkiRGlzY292ZXJ5IFNBVEEgSW5pdCBUaW1lb3V0IiwJCQkvKiAxMGggKi8KKwkJIlJlc2V0IiwJCQkJCS8qIDExaCAqLworCQkiQWJvcnQiLAkJCQkJLyogMTJoICovCisJCSJJTyBOb3QgWWV0IEV4ZWN1dGVkIiwJCQkJLyogMTNoICovCisJCSJJTyBFeGVjdXRlZCIsCQkJCQkvKiAxNGggKi8KKwkJTlVMTCwJCQkJCQkvKiAxNWggKi8KKwkJTlVMTCwJCQkJCQkvKiAxNmggKi8KKwkJTlVMTCwJCQkJCQkvKiAxN2ggKi8KKwkJTlVMTCwJCQkJCQkvKiAxOGggKi8KKwkJTlVMTCwJCQkJCQkvKiAxOWggKi8KKwkJTlVMTCwJCQkJCQkvKiAxQWggKi8KKwkJTlVMTCwJCQkJCQkvKiAxQmggKi8KKwkJTlVMTCwJCQkJCQkvKiAxQ2ggKi8KKwkJTlVMTCwJCQkJCQkvKiAxRGggKi8KKwkJTlVMTCwJCQkJCQkvKiAxRWggKi8KKwkJTlVMTCwJCQkJCQkvKiAxRmggKi8KKwkJIkVuY2xvc3VyZSBNYW5hZ2VtZW50IgkJCQkvKiAyMGggKi8KKwl9OworCisvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCisvKgorICoJbXB0X3Nhc19sb2dfaW5mbyAtIExvZyBpbmZvcm1hdGlvbiByZXR1cm5lZCBmcm9tIFNBUyBJT0MuCisgKglAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQorICoJQGxvZ19pbmZvOiBVMzIgTG9nSW5mbyByZXBseSB3b3JkIGZyb20gdGhlIElPQworICoKKyAqCVJlZmVyIHRvIGxzaS9tcGlfbG9nX3Nhcy5oLgorICovCitzdGF0aWMgdm9pZAorbXB0X3Nhc19sb2dfaW5mbyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgbG9nX2luZm8pCit7Cit1bmlvbiBsb2dpbmZvX3R5cGUgeworCXUzMglsb2dpbmZvOworCXN0cnVjdCB7CisJCXUzMglzdWJjb2RlOjE2OworCQl1MzIJY29kZTo4OworCQl1MzIJb3JpZ2luYXRvcjo0OworCQl1MzIJYnVzX3R5cGU6NDsKKwl9ZHc7Cit9OworCXVuaW9uIGxvZ2luZm9fdHlwZSBzYXNfbG9naW5mbzsKKwljaGFyICpjb2RlX2Rlc2MgPSBOVUxMOworCisJc2FzX2xvZ2luZm8ubG9naW5mbyA9IGxvZ19pbmZvOworCWlmICgoc2FzX2xvZ2luZm8uZHcuYnVzX3R5cGUgIT0gMyAvKlNBUyovKSAmJgorCSAgICAoc2FzX2xvZ2luZm8uZHcub3JpZ2luYXRvciA8IHNpemVvZihvcmlnaW5hdG9yX3N0cikvc2l6ZW9mKGNoYXIqKSkpCisJCXJldHVybjsKKwlpZiAoKHNhc19sb2dpbmZvLmR3Lm9yaWdpbmF0b3IgPT0gMCAvKklPUCovKSAmJgorCSAgICAoc2FzX2xvZ2luZm8uZHcuY29kZSA8IHNpemVvZihpb3BfY29kZV9zdHIpL3NpemVvZihjaGFyKikpKSB7CisJCWNvZGVfZGVzYyA9IGlvcF9jb2RlX3N0cltzYXNfbG9naW5mby5kdy5jb2RlXTsKKwl9ZWxzZSBpZiAoKHNhc19sb2dpbmZvLmR3Lm9yaWdpbmF0b3IgPT0gMSAvKlBMKi8pICYmCisJICAgIChzYXNfbG9naW5mby5kdy5jb2RlIDwgc2l6ZW9mKHBsX2NvZGVfc3RyKS9zaXplb2YoY2hhciopICkpIHsKKwkJY29kZV9kZXNjID0gcGxfY29kZV9zdHJbc2FzX2xvZ2luZm8uZHcuY29kZV07CisJfQorCisJaWYgKGNvZGVfZGVzYyAhPSBOVUxMKQorCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAorCQkJIkxvZ0luZm8oMHglMDh4KTogT3JpZ2luYXRvcj17JXN9LCBDb2RlPXslc30sIgorCQkJIiBTdWJDb2RlKDB4JTA0eClcbiIsCisJCQlpb2MtPm5hbWUsCisJCQlsb2dfaW5mbywKKwkJCW9yaWdpbmF0b3Jfc3RyW3Nhc19sb2dpbmZvLmR3Lm9yaWdpbmF0b3JdLAorCQkJY29kZV9kZXNjLAorCQkJc2FzX2xvZ2luZm8uZHcuc3ViY29kZSk7CisJZWxzZQorCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAorCQkJIkxvZ0luZm8oMHglMDh4KTogT3JpZ2luYXRvcj17JXN9LCBDb2RlPSgweCUwMngpLCIKKwkJCSIgU3ViQ29kZSgweCUwNHgpXG4iLAorCQkJaW9jLT5uYW1lLAorCQkJbG9nX2luZm8sCisJCQlvcmlnaW5hdG9yX3N0cltzYXNfbG9naW5mby5kdy5vcmlnaW5hdG9yXSwKKwkJCXNhc19sb2dpbmZvLmR3LmNvZGUsCisJCQlzYXNfbG9naW5mby5kdy5zdWJjb2RlKTsKK30KKwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKICAqCW1wdF9zcF9pb2NfaW5mbyAtIElPQyBpbmZvcm1hdGlvbiByZXR1cm5lZCBmcm9tIFNDU0kgUGFyYWxsZWwgSU9DLgpAQCAtNTgxNCw2ICs2Mjk4LDcgQEAKIEVYUE9SVF9TWU1CT0wobXB0X3JlYWRfaW9jX3BnXzMpOwogRVhQT1JUX1NZTUJPTChtcHRfYWxsb2NfZndfbWVtb3J5KTsKIEVYUE9SVF9TWU1CT0wobXB0X2ZyZWVfZndfbWVtb3J5KTsKK0VYUE9SVF9TWU1CT0wobXB0YmFzZV9zYXNfcGVyc2lzdF9vcGVyYXRpb24pOwogCiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggZjQ4MjdkOS4uNzUxMDUyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJsc2kvbXBpX2ZjLmgiCQkvKiBGaWJyZSBDaGFubmVsIChsb3dsZXZlbCkgc3VwcG9ydCAqLwogI2luY2x1ZGUgImxzaS9tcGlfdGFyZy5oIgkvKiBTQ1NJL0ZDUCBUYXJnZXQgcHJvdGNvbCBzdXBwb3J0ICovCiAjaW5jbHVkZSAibHNpL21waV90b29sLmgiCS8qIFRvb2xzIHN1cHBvcnQgKi8KKyNpbmNsdWRlICJsc2kvbXBpX3Nhcy5oIgkvKiBTQVMgc3VwcG9ydCAqLwogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAKQEAgLTc2LDggKzc3LDggQEAKICNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSAiIE1PRFVMRUFVVEhPUgogI2VuZGlmCiAKLSNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjAzLjAyIgotI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDMuMDIiCisjZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wMy4wMyIKKyNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjAzLjAzIgogI2RlZmluZSBXSEFUX01BR0lDX1NUUklORwkJIkAiICIoIiAiIyIgIikiCiAKICNkZWZpbmUgc2hvd19tcHRtb2RfdmVyKHMsdmVyKSAgXApAQCAtNDIzLDcgKzQyNCw3IEBACiAvKgogICogIEV2ZW50IFN0cnVjdHVyZSBhbmQgZGVmaW5lCiAgKi8KLSNkZWZpbmUgTVBUQ1RMX0VWRU5UX0xPR19TSVpFCQkoMHgwMDAwMDAwQSkKKyNkZWZpbmUgTVBUQ1RMX0VWRU5UX0xPR19TSVpFCQkoMHgwMDAwMDAwMzIpCiB0eXBlZGVmIHN0cnVjdCBfbXB0X2lvY3RsX2V2ZW50cyB7CiAJdTMyCWV2ZW50OwkJLyogU3BlY2lmaWVkIGJ5IGRlZmluZSBhYm92ZSAqLwogCXUzMglldmVudENvbnRleHQ7CS8qIEluZGV4IG9yIGNvdW50ZXIgKi8KQEAgLTQ1MSwxNiArNDUyLDEzIEBACiAjZGVmaW5lIE1QVF9TQ1NJQ0ZHX0FMTF9JRFMJCTB4MDIJLyogV3JpdGVTRFAxIHRvIGFsbCBJRFMgKi8KIC8qICNkZWZpbmUgTVBUX1NDU0lDRkdfQkxLX05FR08JCTB4MTAJICAgV3JpdGVTRFAxIHdpdGggV0RUUiBhbmQgU0RUUiBkaXNhYmxlZCAqLwogCi10eXBlZGVmCXN0cnVjdCBfU2NzaUNmZ0RhdGEgewordHlwZWRlZglzdHJ1Y3QgX1NwaUNmZ0RhdGEgewogCXUzMgkJIFBvcnRGbGFnczsKIAlpbnQJCSpudnJhbTsJCQkvKiB0YWJsZSBvZiBkZXZpY2UgTlZSQU0gdmFsdWVzICovCi0JSU9DUGFnZTJfdAkqcElvY1BnMjsJCS8qIHRhYmxlIG9mIFJhaWQgVm9sdW1lcyAqLwotCUlPQ1BhZ2UzX3QJKnBJb2NQZzM7CQkvKiB0YWJsZSBvZiBwaHlzaWNhbCBkaXNrcyAqLwogCUlPQ1BhZ2U0X3QJKnBJb2NQZzQ7CQkvKiBTRVAgZGV2aWNlcyBhZGRyZXNzaW5nICovCiAJZG1hX2FkZHJfdAkgSW9jUGc0X2RtYTsJCS8qIFBoeXMgQWRkciBvZiBJT0NQYWdlNCBkYXRhICovCiAJaW50CQkgSW9jUGc0U3o7CQkvKiBJT0NQYWdlNCBzaXplICovCiAJdTgJCSBkdlN0YXR1c1tNUFRfTUFYX1NDU0lfREVWSUNFU107Ci0JaW50CQkgaXNSYWlkOwkJLyogYml0IGZpZWxkLCAxIGlmIFJBSUQgKi8KIAl1OAkJIG1pblN5bmNGYWN0b3I7CQkvKiAweEZGIGlmIGFzeW5jICovCiAJdTgJCSBtYXhTeW5jT2Zmc2V0OwkJLyogMCBpZiBhc3luYyAqLwogCXU4CQkgbWF4QnVzV2lkdGg7CQkvKiAwIGlmIG5hcnJvdywgMSBpZiB3aWRlICovCkBAIC00NzIsMTAgKzQ3MCwyOCBAQAogCXU4CQkgZHZTY2hlZHVsZWQ7CQkvKiAxIGlmIHNjaGVkdWxlZCAqLwogCXU4CQkgZm9yY2VEdjsJCS8qIDEgdG8gZm9yY2UgRFYgc2NoZWR1bGluZyAqLwogCXU4CQkgbm9RYXM7CQkJLyogRGlzYWJsZSBRQVMgZm9yIHRoaXMgYWRhcHRlciAqLwotCXU4CQkgU2FmX1RlOwkJLyogMSB0byBmb3JjZSBhbGwgUHJvY2Vzc29ycyBhcyBTQUYtVEUgaWYgSW5xdWlyeSBkYXRhIGxlbmd0aCBpcyB0b28gc2hvcnQgdG8gY2hlY2sgZm9yIFNBRi1URSAqLworCXU4CQkgU2FmX1RlOwkJLyogMSB0byBmb3JjZSBhbGwgUHJvY2Vzc29ycyBhcworCQkJCQkJICogU0FGLVRFIGlmIElucXVpcnkgZGF0YSBsZW5ndGgKKwkJCQkJCSAqIGlzIHRvbyBzaG9ydCB0byBjaGVjayBmb3IgU0FGLVRFCisJCQkJCQkgKi8KIAl1OAkJIG1wdF9kdjsJCS8qIGNvbW1hbmQgbGluZSBvcHRpb246IGVuaGFuY2VkPTEsIGJhc2ljPTAgKi8KKwl1OAkJIGJ1c19yZXNldDsJCS8qIDEgdG8gYWxsb3cgYnVzIHJlc2V0ICovCiAJdTgJCSByc3ZkWzFdOwotfSBTY3NpQ2ZnRGF0YTsKK31TcGlDZmdEYXRhOworCit0eXBlZGVmCXN0cnVjdCBfU2FzQ2ZnRGF0YSB7CisJdTgJCSBwdENsZWFyOwkJLyogMSB0byBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZQorCQkJCQkJICogcGVyc2lzdGVudCB0YWJsZS4KKwkJCQkJCSAqIDAgdG8gZGlzYWJsZQorCQkJCQkJICogYXV0b21hdGljIGNsZWFyaW5nLgorCQkJCQkJICovCit9U2FzQ2ZnRGF0YTsKKwordHlwZWRlZglzdHJ1Y3QgX1JhaWRDZmdEYXRhIHsKKwlJT0NQYWdlMl90CSpwSW9jUGcyOwkJLyogdGFibGUgb2YgUmFpZCBWb2x1bWVzICovCisJSU9DUGFnZTNfdAkqcElvY1BnMzsJCS8qIHRhYmxlIG9mIHBoeXNpY2FsIGRpc2tzICovCisJaW50CQkgaXNSYWlkOwkJLyogYml0IGZpZWxkLCAxIGlmIFJBSUQgKi8KK31SYWlkQ2ZnRGF0YTsKIAogLyoKICAqICBBZGFwdGVyIFN0cnVjdHVyZSAtIHBjaV9kZXYgc3BlY2lmaWMuIE1heGltdW06IE1QVF9NQVhfQURBUFRFUlMKQEAgLTUzMCwxMSArNTQ2LDE2IEBACiAJdTgJCQkqc2Vuc2VfYnVmX3Bvb2w7CiAJZG1hX2FkZHJfdAkJIHNlbnNlX2J1Zl9wb29sX2RtYTsKIAl1MzIJCQkgc2Vuc2VfYnVmX2xvd19kbWE7CisJdTgJCQkqSG9zdFBhZ2VCdWZmZXI7IC8qIFNBUyAtIGhvc3QgcGFnZSBidWZmZXIgc3VwcG9ydCAqLworCXUzMgkJCUhvc3RQYWdlQnVmZmVyX3N6OworCWRtYV9hZGRyX3QJCUhvc3RQYWdlQnVmZmVyX2RtYTsKIAlpbnQJCQkgbXRycl9yZWc7CiAJc3RydWN0IHBjaV9kZXYJCSpwY2lkZXY7CS8qIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi8KIAl1OAkJCV9faW9tZW0gKm1lbW1hcDsJLyogbW1hcCBhZGRyZXNzICovCiAJc3RydWN0IFNjc2lfSG9zdAkqc2g7CQkvKiBTY3NpIEhvc3QgcG9pbnRlciAqLwotCVNjc2lDZmdEYXRhCQlzcGlfZGF0YTsJLyogU2NzaSBjb25maWcuIGRhdGEgKi8KKwlTcGlDZmdEYXRhCQlzcGlfZGF0YTsJLyogU2NzaSBjb25maWcuIGRhdGEgKi8KKwlSYWlkQ2ZnRGF0YQkJcmFpZF9kYXRhOwkvKiBSYWlkIGNvbmZpZy4gZGF0YSAqLworCVNhc0NmZ0RhdGEJCXNhc19kYXRhOwkvKiBTYXMgY29uZmlnLiBkYXRhICovCiAJTVBUX0lPQ1RMCQkqaW9jdGw7CQkvKiBpb2N0bCBkYXRhIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmlvY19kZW50cnk7CiAJc3RydWN0IF9NUFRfQURBUFRFUgkqYWx0X2lvYzsJLyogcHRyIHRvIDkyOSBib3VuZCBhZGFwdGVyIHBvcnQgKi8KQEAgLTU1NCwzMSArNTc1LDM1IEBACiAjZWxzZQogCXUzMgkJCSBtZmNudDsKICNlbmRpZgotCXUzMgkJCSBOQl9mb3JfNjRfYnl0ZV9mcmFtZTsgICAgICAgCisJdTMyCQkJIE5CX2Zvcl82NF9ieXRlX2ZyYW1lOwogCXUzMgkJCSBoc19yZXFbTVBUX01BWF9GUkFNRV9TSVpFL3NpemVvZih1MzIpXTsKIAl1MTYJCQkgaHNfcmVwbHlbTVBUX01BWF9GUkFNRV9TSVpFL3NpemVvZih1MTYpXTsKIAlJT0NGYWN0c1JlcGx5X3QJCSBmYWN0czsKIAlQb3J0RmFjdHNSZXBseV90CSBwZmFjdHNbMl07CiAJRkNQb3J0UGFnZTBfdAkJIGZjX3BvcnRfcGFnZTBbMl07CisJc3RydWN0IHRpbWVyX2xpc3QJIHBlcnNpc3RfdGltZXI7CS8qIHBlcnNpc3QgdGFibGUgdGltZXIgKi8KKwlpbnQJCQkgcGVyc2lzdF93YWl0X2RvbmU7IC8qIHBlcnNpc3QgY29tcGxldGlvbiBmbGFnICovCisJdTgJCQkgcGVyc2lzdF9yZXBseV9mcmFtZVtNUFRfREVGQVVMVF9GUkFNRV9TSVpFXTsgLyogcGVyc2lzdCByZXBseSAqLwogCUxBTlBhZ2UwX3QJCSBsYW5fY25mZ19wYWdlMDsKIAlMQU5QYWdlMV90CQkgbGFuX2NuZmdfcGFnZTE7Ci0JLyogIAorCS8qCiAJICogRGVzY3JpcHRpb246IGVycmF0YV9mbGFnXzEwNjQKIAkgKiBJZiBhIFBDSVggcmVhZCBvY2N1cnMgd2l0aGluIDEgb3IgMiBjeWNsZXMgYWZ0ZXIgdGhlIGNoaXAgcmVjZWl2ZXMKIAkgKiBhIHNwbGl0IGNvbXBsZXRpb24gZm9yIGEgcmVhZCBkYXRhLCBhbiBpbnRlcm5hbCBhZGRyZXNzIHBvaW50ZXIgaW5jb3JyZWN0bHkKIAkgKiBpbmNyZW1lbnRzIGJ5IDMyIGJ5dGVzCiAJICovCi0JaW50CQkJIGVycmF0YV9mbGFnXzEwNjQ7CQorCWludAkJCSBlcnJhdGFfZmxhZ18xMDY0OwogCXU4CQkJIEZpcnN0V2hvSW5pdDsKIAl1OAkJCSB1cGxvYWRfZnc7CS8qIElmIHNldCwgZG8gYSBmdyB1cGxvYWQgKi8KIAl1OAkJCSByZWxvYWRfZnc7CS8qIEZvcmNlIGEgRlcgUmVsb2FkIG9uIG5leHQgcmVzZXQgKi8KLQl1OAkJCSBOQlNoaWZ0RmFjdG9yOyAgLyogTkIgU2hpZnQgRmFjdG9yIGJhc2VkIG9uIEJsb2NrIFNpemUgKEZhY3RzKSAgKi8gICAgIAorCXU4CQkJIE5CU2hpZnRGYWN0b3I7ICAvKiBOQiBTaGlmdCBGYWN0b3IgYmFzZWQgb24gQmxvY2sgU2l6ZSAoRmFjdHMpICAqLwogCXU4CQkJIHBhZDFbNF07CiAJaW50CQkJIERvbmVDdHg7CiAJaW50CQkJIFRhc2tDdHg7CiAJaW50CQkJIEludGVybmFsQ3R4OwotCXN0cnVjdCBsaXN0X2hlYWQJIGxpc3Q7IAorCXN0cnVjdCBsaXN0X2hlYWQJIGxpc3Q7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldGRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSBzYXNfdG9wb2xvZ3k7CiB9IE1QVF9BREFQVEVSOwogCiAvKgpAQCAtOTY0LDYgKzk4OSw3IEBACiBleHRlcm4gdm9pZAkgbXB0X2ZyZWVfZndfbWVtb3J5KE1QVF9BREFQVEVSICppb2MpOwogZXh0ZXJuIGludAkgbXB0X2ZpbmRJbVZvbHVtZXMoTVBUX0FEQVBURVIgKmlvYyk7CiBleHRlcm4gaW50CSBtcHRfcmVhZF9pb2NfcGdfMyhNUFRfQURBUFRFUiAqaW9jKTsKK2V4dGVybiBpbnQJIG1wdGJhc2Vfc2FzX3BlcnNpc3Rfb3BlcmF0aW9uKE1QVF9BREFQVEVSICppb2MsIHU4IHBlcnNpc3Rfb3Bjb2RlKTsKIAogLyoKICAqICBQdWJsaWMgZGF0YSBkZWNsJ3MuLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IDc1NzdjMjQuLmNiMmQ1OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtMTMyNiw3ICsxMzI2LDcgQEAKIAkJICovCiAJCWlmIChoZCAmJiBoZC0+VGFyZ2V0cykgewogCQkJbXB0X2ZpbmRJbVZvbHVtZXMoaW9jKTsKLQkJCXBJb2MyID0gaW9jLT5zcGlfZGF0YS5wSW9jUGcyOworCQkJcElvYzIgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGcyOwogCQkJZm9yICggaWQgPSAwOyBpZCA8PSBtYXhfaWQ7ICkgewogCQkJCWlmICggcElvYzIgJiYgcElvYzItPk51bUFjdGl2ZVZvbHVtZXMgKSB7CiAJCQkJCWlmICggaWQgPT0gcElvYzItPlJhaWRWb2x1bWVbMF0uVm9sdW1lSUQgKSB7CkBAIC0xMzQ4LDcgKzEzNDgsNyBAQAogCQkJCQkJLS1tYXhXb3Jkc0xlZnQ7CiAJCQkJCQlnb3RvIG5leHRfaWQ7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlwSW9jMyA9IGlvYy0+c3BpX2RhdGEucElvY1BnMzsKKwkJCQkJCXBJb2MzID0gaW9jLT5yYWlkX2RhdGEucElvY1BnMzsKICAgICAgICAgICAgIAkJCQkJZm9yICggamogPSAwOyBqaiA8IHBJb2MzLT5OdW1QaHlzRGlza3M7IGpqKysgKSB7CiAgICAgICAgICAgICAgICAgICAgIAkJCQkJaWYgKCBwSW9jMy0+UGh5c0Rpc2tbampdLlBoeXNEaXNrSUQgPT0gaWQgKQogCQkJCQkJCQlnb3RvIG5leHRfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggMTM3NzFhYi4uYTYyOGJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCiAJCQkiU2tpcHBpbmcgaW9jPSVwIGJlY2F1c2UgU0NTSSBJbml0aWF0b3IgbW9kZSBpcyBOT1QgZW5hYmxlZCFcbiIsCiAJCQlpb2MtPm5hbWUsIGlvYyk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAl9CiAKIAlzaCA9IHNjc2lfaG9zdF9hbGxvYygmbXB0ZmNfZHJpdmVyX3RlbXBsYXRlLCBzaXplb2YoTVBUX1NDU0lfSE9TVCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKaW5kZXggNTI3OTRiZS4uZWQzYzg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCkBAIC0zMTIsNyArMzEyLDEyIEBACiBtcHRfbGFuX2lvY19yZXNldChNUFRfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGlvYy0+bmV0ZGV2OwotCXN0cnVjdCBtcHRfbGFuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtcHRfbGFuX3ByaXYgKnByaXY7CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybigxKTsKKwllbHNlCisJCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJZGxwcmludGsoKEtFUk5fSU5GTyBNWU5BTSAiOiBJT0MgJXNfcmVzZXQgcm91dGVkIHRvIExBTiBkcml2ZXIhXG4iLAogCQkJcmVzZXRfcGhhc2U9PU1QVF9JT0NfU0VUVVBfUkVTRVQgPyAic2V0dXAiIDogKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5ODIwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTAsMCArMSwxMjM1IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKKyAqICAgICAgRm9yIHVzZSB3aXRoIExTSSBMb2dpYyBQQ0kgY2hpcC9hZGFwdGVyKHMpCisgKiAgICAgIHJ1bm5pbmcgTFNJIExvZ2ljIEZ1c2lvbiBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgTFNJIExvZ2ljIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzptcHRfbGludXhfZGV2ZWxvcGVyQGxzaWwuY29tKQorICogIENvcHlyaWdodCAoYykgMjAwNSBEZWxsCisgKi8KKy8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KKy8qCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBOTyBXQVJSQU5UWQorICAgIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorICAgIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUCisgICAgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisgICAgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorICAgIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICAgIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsCisgICAgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAgICBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorICAgIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZCisgICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgICAgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAgICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgICAgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgICAgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUworCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgorCisjaW5jbHVkZSAibXB0YmFzZS5oIgorI2luY2x1ZGUgIm1wdHNjc2loLmgiCisKKworI2RlZmluZSBteV9OQU1FCQkiRnVzaW9uIE1QVCBTQVMgSG9zdCBkcml2ZXIiCisjZGVmaW5lIG15X1ZFUlNJT04JTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCisjZGVmaW5lIE1ZTkFNCQkibXB0c2FzIgorCitNT0RVTEVfQVVUSE9SKE1PRFVMRUFVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04obXlfTkFNRSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgbXB0X3BxX2ZpbHRlcjsKK21vZHVsZV9wYXJhbShtcHRfcHFfZmlsdGVyLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtcHRfcHFfZmlsdGVyLAorCQkiRW5hYmxlIHBlcmlwaGVyYWwgcXVhbGlmaWVyIGZpbHRlcjogZW5hYmxlPTEgICIKKwkJIihkZWZhdWx0PTApIik7CisKK3N0YXRpYyBpbnQgbXB0X3B0X2NsZWFyOworbW9kdWxlX3BhcmFtKG1wdF9wdF9jbGVhciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXB0X3B0X2NsZWFyLAorCQkiQ2xlYXIgcGVyc2lzdGVuY3kgdGFibGU6IGVuYWJsZT0xICAiCisJCSIoZGVmYXVsdD1NUFRTQ1NJSF9QVF9DTEVBUj0wKSIpOworCitzdGF0aWMgaW50CW1wdHNhc0RvbmVDdHggPSAtMTsKK3N0YXRpYyBpbnQJbXB0c2FzVGFza0N0eCA9IC0xOworc3RhdGljIGludAltcHRzYXNJbnRlcm5hbEN0eCA9IC0xOyAvKiBVc2VkIG9ubHkgZm9yIGludGVybmFsIGNvbW1hbmRzICovCisKKworLyoKKyAqIFNBUyB0b3BvbG9neSBzdHJ1Y3R1cmVzCisgKgorICogVGhlIE1QVCBGdXNpb24gZmlybXdhcmUgaW50ZXJmYWNlIHNwcmVhZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiBTQVMgdG9wb2xvZ3kgb3ZlciBtYW55IG1hbnVmYWN0dXJlIHBhZ2VzLCB0aHVzIHdlIG5lZWQgc29tZSBkYXRhCisgKiBzdHJ1Y3R1cmUgdG8gY29sbGVjdCBpdCBhbmQgcHJvY2VzcyBpdCBmb3IgdGhlIFNBUyB0cmFuc3BvcnQgY2xhc3MuCisgKi8KKworc3RydWN0IG1wdHNhc19kZXZpbmZvIHsKKwl1MTYJaGFuZGxlOwkJLyogdW5pcXVlIGlkIHRvIGFkZHJlc3MgdGhpcyBkZXZpY2UgKi8KKwl1OAlwaHlfaWQ7CQkvKiBwaHkgbnVtYmVyIG9mIHBhcmVudCBkZXZpY2UgKi8KKwl1OAlwb3J0X2lkOwkvKiBzYXMgcGh5c2ljYWwgcG9ydCB0aGlzIGRldmljZQorCQkJCSAgIGlzIGFzc29jJ2Qgd2l0aCAqLworCXU4CXRhcmdldDsJCS8qIGxvZ2ljYWwgdGFyZ2V0IGlkIG9mIHRoaXMgZGV2aWNlICovCisJdTgJYnVzOwkJLyogbG9naWNhbCBidXMgbnVtYmVyIG9mIHRoaXMgZGV2aWNlICovCisJdTY0CXNhc19hZGRyZXNzOyAgICAvKiBXV04gb2YgdGhpcyBkZXZpY2UsCisJCQkJICAgU0FUQSBpcyBhc3NpZ25lZCBieSBIQkEsZXhwYW5kZXIgKi8KKwl1MzIJZGV2aWNlX2luZm87CS8qIGJpdGZpZWxkIGRldGFpbGVkIGluZm8gYWJvdXQgdGhpcyBkZXZpY2UgKi8KK307CisKK3N0cnVjdCBtcHRzYXNfcGh5aW5mbyB7CisJdTgJcGh5X2lkOyAJCS8qIHBoeSBpbmRleCAqLworCXU4CXBvcnRfaWQ7IAkJLyogcG9ydCBudW1iZXIgdGhpcyBwaHkgaXMgcGFydCBvZiAqLworCXU4CW5lZ290aWF0ZWRfbGlua19yYXRlOwkvKiBuZWdvJ2QgbGluayByYXRlIGZvciB0aGlzIHBoeSAqLworCXU4CWh3X2xpbmtfcmF0ZTsgCQkvKiBoYXJkd2FyZSBtYXgvbWluIHBoeXMgbGluayByYXRlICovCisJdTgJcHJvZ3JhbW1lZF9saW5rX3JhdGU7CS8qIHByb2dyYW1tZWQgbWF4L21pbiBwaHkgbGluayByYXRlICovCisJc3RydWN0IG1wdHNhc19kZXZpbmZvIGlkZW50aWZ5OwkvKiBwb2ludCB0byBwaHkgZGV2aWNlIGluZm8gKi8KKwlzdHJ1Y3QgbXB0c2FzX2RldmluZm8gYXR0YWNoZWQ7CS8qIHBvaW50IHRvIGF0dGFjaGVkIGRldmljZSBpbmZvICovCisJc3RydWN0IHNhc19ycGh5ICpycGh5OworfTsKKworc3RydWN0IG1wdHNhc19wb3J0aW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXUxNgkJaGFuZGxlOwkJLyogdW5pcXVlIGlkIHRvIGFkZHJlc3MgdGhpcyAqLworCXU4CQludW1fcGh5czsJLyogbnVtYmVyIG9mIHBoeXMgKi8KKwlzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvOworfTsKKworLyoKKyAqIFRoaXMgaXMgcHJldHR5IHVnbHkuICBXZSB3aWxsIGJlIGFibGUgdG8gc2VyaW91c2x5IGNsZWFuIGl0IHVwCisgKiBvbmNlIHRoZSBEViBjb2RlIGluIG1wdHNjc2loIGdvZXMgYXdheSBhbmQgd2UgY2FuIHByb3Blcmx5CisgKiBpbXBsZW1lbnQgLT50YXJnZXRfYWxsb2MuCisgKi8KK3N0YXRpYyBpbnQKK21wdHNhc19zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0ID0gZGV2aWNlLT5ob3N0OworCU1QVF9TQ1NJX0hPU1QJCSpoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IHNhc19ycGh5CQkqcnBoeTsKKwlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvCSpwOworCVZpcnREZXZpY2UJCSp2ZGV2OworCXVpbnQJCQl0YXJnZXQgPSBkZXZpY2UtPmlkOworCWludCBpOworCisJaWYgKCh2ZGV2ID0gaGQtPlRhcmdldHNbdGFyZ2V0XSkgIT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwl2ZGV2ID0ga21hbGxvYyhzaXplb2YoVmlydERldmljZSksIEdGUF9LRVJORUwpOworCWlmICghdmRldikgeworCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJzbGF2ZV9hbGxvYyBrbWFsbG9jKCV6ZCkgRkFJTEVEIVxuIiwKKwkJCQloZC0+aW9jLT5uYW1lLCBzaXplb2YoVmlydERldmljZSkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQodmRldiwgMCwgc2l6ZW9mKFZpcnREZXZpY2UpKTsKKwl2ZGV2LT50ZmxhZ3MgPSBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTfE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfSU5RVUlSWTsKKwl2ZGV2LT5pb2NfaWQgPSBoZC0+aW9jLT5pZDsKKworCXJwaHkgPSBkZXZfdG9fcnBoeShkZXZpY2UtPnNkZXZfdGFyZ2V0LT5kZXYucGFyZW50KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZoZC0+aW9jLT5zYXNfdG9wb2xvZ3ksIGxpc3QpIHsKKwkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9waHlzOyBpKyspIHsKKwkJCWlmIChwLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5zYXNfYWRkcmVzcyA9PQorCQkJCQlycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgeworCQkJCXZkZXYtPnRhcmdldF9pZCA9CisJCQkJCXAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnRhcmdldDsKKwkJCQl2ZGV2LT5idXNfaWQgPSBwLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5idXM7CisJCQkJaGQtPlRhcmdldHNbZGV2aWNlLT5pZF0gPSB2ZGV2OworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJcHJpbnRrKCJObyBtYXRjaGluZyBTQVMgZGV2aWNlIGZvdW5kISFcbiIpOworCWtmcmVlKHZkZXYpOworCXJldHVybiAtRU5PREVWOworCisgb3V0OgorCXZkZXYtPm51bV9sdW5zKys7CisJZGV2aWNlLT5ob3N0ZGF0YSA9IHZkZXY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG1wdHNhc19kcml2ZXJfdGVtcGxhdGUgPSB7CisJLnByb2NfbmFtZQkJCT0gIm1wdHNhcyIsCisJLnByb2NfaW5mbwkJCT0gbXB0c2NzaWhfcHJvY19pbmZvLAorCS5uYW1lCQkJCT0gIk1QVCBTUEkgSG9zdCIsCisJLmluZm8JCQkJPSBtcHRzY3NpaF9pbmZvLAorCS5xdWV1ZWNvbW1hbmQJCQk9IG1wdHNjc2loX3FjbWQsCisJLnNsYXZlX2FsbG9jCQkJPSBtcHRzYXNfc2xhdmVfYWxsb2MsCisJLnNsYXZlX2NvbmZpZ3VyZQkJPSBtcHRzY3NpaF9zbGF2ZV9jb25maWd1cmUsCisJLnNsYXZlX2Rlc3Ryb3kJCQk9IG1wdHNjc2loX3NsYXZlX2Rlc3Ryb3ksCisJLmNoYW5nZV9xdWV1ZV9kZXB0aCAJCT0gbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5laF9hYm9ydF9oYW5kbGVyCQk9IG1wdHNjc2loX2Fib3J0LAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcgk9IG1wdHNjc2loX2Rldl9yZXNldCwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJCT0gbXB0c2NzaWhfYnVzX3Jlc2V0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gbXB0c2NzaWhfaG9zdF9yZXNldCwKKwkuYmlvc19wYXJhbQkJCT0gbXB0c2NzaWhfYmlvc19wYXJhbSwKKwkuY2FuX3F1ZXVlCQkJPSBNUFRfRkNfQ0FOX1FVRVVFLAorCS50aGlzX2lkCQkJPSAtMSwKKwkuc2dfdGFibGVzaXplCQkJPSBNUFRfU0NTSV9TR19ERVBUSCwKKwkubWF4X3NlY3RvcnMJCQk9IDgxOTIsCisJLmNtZF9wZXJfbHVuCQkJPSA3LAorCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCit9OworCitzdGF0aWMgc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSBtcHRzYXNfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKm1wdHNhc190cmFuc3BvcnRfdGVtcGxhdGU7CisKKyNpZmRlZiBTQVNERUJVRworc3RhdGljIHZvaWQgbXB0c2FzX3ByaW50X3BoeV9kYXRhKE1QSV9TQVNfSU9fVU5JVDBfUEhZX0RBVEEgKnBoeV9kYXRhKQoreworCXByaW50aygiLS0tLSBJTyBVTklUIFBBR0UgMCAtLS0tLS0tLS0tLS1cbiIpOworCXByaW50aygiSGFuZGxlPTB4JVhcbiIsCisJCWxlMTZfdG9fY3B1KHBoeV9kYXRhLT5BdHRhY2hlZERldmljZUhhbmRsZSkpOworCXByaW50aygiQ29udHJvbGxlciBIYW5kbGU9MHglWFxuIiwKKwkJbGUxNl90b19jcHUocGh5X2RhdGEtPkNvbnRyb2xsZXJEZXZIYW5kbGUpKTsKKwlwcmludGsoIlBvcnQ9MHglWFxuIiwgcGh5X2RhdGEtPlBvcnQpOworCXByaW50aygiUG9ydCBGbGFncz0weCVYXG4iLCBwaHlfZGF0YS0+UG9ydEZsYWdzKTsKKwlwcmludGsoIlBIWSBGbGFncz0weCVYXG4iLCBwaHlfZGF0YS0+UGh5RmxhZ3MpOworCXByaW50aygiTmVnb3RpYXRlZCBMaW5rIFJhdGU9MHglWFxuIiwgcGh5X2RhdGEtPk5lZ290aWF0ZWRMaW5rUmF0ZSk7CisJcHJpbnRrKCJDb250cm9sbGVyIFBIWSBEZXZpY2UgSW5mbz0weCVYXG4iLAorCQlsZTMyX3RvX2NwdShwaHlfZGF0YS0+Q29udHJvbGxlclBoeURldmljZUluZm8pKTsKKwlwcmludGsoIkRpc2NvdmVyeVN0YXR1cz0weCVYXG4iLAorCQlsZTMyX3RvX2NwdShwaHlfZGF0YS0+RGlzY292ZXJ5U3RhdHVzKSk7CisJcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBtcHRzYXNfcHJpbnRfcGh5X3BnMChTYXNQaHlQYWdlMF90ICpwZzApCit7CisJX19sZTY0IHNhc19hZGRyZXNzOworCisJbWVtY3B5KCZzYXNfYWRkcmVzcywgJnBnMC0+U0FTQWRkcmVzcywgc2l6ZW9mKF9fbGU2NCkpOworCisJcHJpbnRrKCItLS0tIFNBUyBQSFkgUEFHRSAwIC0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRrKCJBdHRhY2hlZCBEZXZpY2UgSGFuZGxlPTB4JVhcbiIsCisJCQlsZTE2X3RvX2NwdShwZzAtPkF0dGFjaGVkRGV2SGFuZGxlKSk7CisJcHJpbnRrKCJTQVMgQWRkcmVzcz0weCVsbFhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHNhc19hZGRyZXNzKSk7CisJcHJpbnRrKCJBdHRhY2hlZCBQSFkgSWRlbnRpZmllcj0weCVYXG4iLCBwZzAtPkF0dGFjaGVkUGh5SWRlbnRpZmllcik7CisJcHJpbnRrKCJBdHRhY2hlZCBEZXZpY2UgSW5mbz0weCVYXG4iLAorCQkJbGUzMl90b19jcHUocGcwLT5BdHRhY2hlZERldmljZUluZm8pKTsKKwlwcmludGsoIlByb2dyYW1tZWQgTGluayBSYXRlPTB4JVhcbiIsIHBnMC0+UHJvZ3JhbW1lZExpbmtSYXRlKTsKKwlwcmludGsoIkNoYW5nZSBDb3VudD0weCVYXG4iLCBwZzAtPkNoYW5nZUNvdW50KTsKKwlwcmludGsoIlBIWSBJbmZvPTB4JVhcbiIsIGxlMzJfdG9fY3B1KHBnMC0+UGh5SW5mbykpOworCXByaW50aygiXG4iKTsKK30KKworc3RhdGljIHZvaWQgbXB0c2FzX3ByaW50X2RldmljZV9wZzAoU2FzRGV2aWNlUGFnZTBfdCAqcGcwKQoreworCV9fbGU2NCBzYXNfYWRkcmVzczsKKworCW1lbWNweSgmc2FzX2FkZHJlc3MsICZwZzAtPlNBU0FkZHJlc3MsIHNpemVvZihfX2xlNjQpKTsKKworCXByaW50aygiLS0tLSBTQVMgREVWSUNFIFBBR0UgMCAtLS0tLS0tLS1cbiIpOworCXByaW50aygiSGFuZGxlPTB4JVhcbiIgLGxlMTZfdG9fY3B1KHBnMC0+RGV2SGFuZGxlKSk7CisJcHJpbnRrKCJFbmNsb3N1cmUgSGFuZGxlPTB4JVhcbiIsIGxlMTZfdG9fY3B1KHBnMC0+RW5jbG9zdXJlSGFuZGxlKSk7CisJcHJpbnRrKCJTbG90PTB4JVhcbiIsIGxlMTZfdG9fY3B1KHBnMC0+U2xvdCkpOworCXByaW50aygiU0FTIEFkZHJlc3M9MHglbGxYXG4iLCBsZTY0X3RvX2NwdShzYXNfYWRkcmVzcykpOworCXByaW50aygiVGFyZ2V0IElEPTB4JVhcbiIsIHBnMC0+VGFyZ2V0SUQpOworCXByaW50aygiQnVzPTB4JVhcbiIsIHBnMC0+QnVzKTsKKwlwcmludGsoIlBoeU51bT0weCVYXG4iLCBwZzAtPlBoeU51bSk7CisJcHJpbnRrKCJBY2Nlc3NTdGF0dXM9MHglWFxuIiwgbGUxNl90b19jcHUocGcwLT5BY2Nlc3NTdGF0dXMpKTsKKwlwcmludGsoIkRldmljZSBJbmZvPTB4JVhcbiIsIGxlMzJfdG9fY3B1KHBnMC0+RGV2aWNlSW5mbykpOworCXByaW50aygiRmxhZ3M9MHglWFxuIiwgbGUxNl90b19jcHUocGcwLT5GbGFncykpOworCXByaW50aygiUGh5c2ljYWwgUG9ydD0weCVYXG4iLCBwZzAtPlBoeXNpY2FsUG9ydCk7CisJcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBtcHRzYXNfcHJpbnRfZXhwYW5kZXJfcGcxKFNhc0V4cGFuZGVyUGFnZTFfdCAqcGcxKQoreworCXByaW50aygiLS0tLSBTQVMgRVhQQU5ERVIgUEFHRSAxIC0tLS0tLS0tLS0tLVxuIik7CisKKwlwcmludGsoIlBoeXNpY2FsIFBvcnQ9MHglWFxuIiwgcGcxLT5QaHlzaWNhbFBvcnQpOworCXByaW50aygiUEhZIElkZW50aWZpZXI9MHglWFxuIiwgcGcxLT5QaHkpOworCXByaW50aygiTmVnb3RpYXRlZCBMaW5rIFJhdGU9MHglWFxuIiwgcGcxLT5OZWdvdGlhdGVkTGlua1JhdGUpOworCXByaW50aygiUHJvZ3JhbW1lZCBMaW5rIFJhdGU9MHglWFxuIiwgcGcxLT5Qcm9ncmFtbWVkTGlua1JhdGUpOworCXByaW50aygiSGFyZHdhcmUgTGluayBSYXRlPTB4JVhcbiIsIHBnMS0+SHdMaW5rUmF0ZSk7CisJcHJpbnRrKCJPd25lciBEZXZpY2UgSGFuZGxlPTB4JVhcbiIsCisJCQlsZTE2X3RvX2NwdShwZzEtPk93bmVyRGV2SGFuZGxlKSk7CisJcHJpbnRrKCJBdHRhY2hlZCBEZXZpY2UgSGFuZGxlPTB4JVhcbiIsCisJCQlsZTE2X3RvX2NwdShwZzEtPkF0dGFjaGVkRGV2SGFuZGxlKSk7Cit9CisjZWxzZQorI2RlZmluZSBtcHRzYXNfcHJpbnRfcGh5X2RhdGEocGh5X2RhdGEpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1wdHNhc19wcmludF9waHlfcGcwKHBnMCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbXB0c2FzX3ByaW50X2RldmljZV9wZzAocGcwKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBtcHRzYXNfcHJpbnRfZXhwYW5kZXJfcGcxKHBnMSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgaW50CittcHRzYXNfc2FzX2lvX3VuaXRfcGcwKE1QVF9BREFQVEVSICppb2MsIHN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbykKK3sKKwlDb25maWdFeHRlbmRlZFBhZ2VIZWFkZXJfdCBoZHI7CisJQ09ORklHUEFSTVMgY2ZnOworCVNhc0lPVW5pdFBhZ2UwX3QgKmJ1ZmZlcjsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJaW50IGVycm9yLCBpOworCisJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOworCWhkci5FeHRQYWdlTGVuZ3RoID0gMDsKKwloZHIuUGFnZU51bWJlciA9IDA7CisJaGRyLlJlc2VydmVkMSA9IDA7CisJaGRyLlJlc2VydmVkMiA9IDA7CisJaGRyLlBhZ2VUeXBlID0gTVBJX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwloZHIuRXh0UGFnZVR5cGUgPSBNUElfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOworCisJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKKwljZmcucGh5c0FkZHIgPSAtMTsKKwljZmcucGFnZUFkZHIgPSAwOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwljZmcuZGlyID0gMDsJLyogcmVhZCAqLworCWNmZy50aW1lb3V0ID0gMTA7CisKKwllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCWlmICghaGRyLkV4dFBhZ2VMZW5ndGgpIHsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkJCSAgICAmZG1hX2hhbmRsZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcucGh5c0FkZHIgPSBkbWFfaGFuZGxlOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCisJcG9ydF9pbmZvLT5udW1fcGh5cyA9IGJ1ZmZlci0+TnVtUGh5czsKKwlwb3J0X2luZm8tPnBoeV9pbmZvID0ga2NhbGxvYyhwb3J0X2luZm8tPm51bV9waHlzLAorCQlzaXplb2Yoc3RydWN0IG1wdHNhc19waHlpbmZvKSxHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnRfaW5mby0+cGh5X2luZm8pIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykgeworCQltcHRzYXNfcHJpbnRfcGh5X2RhdGEoJmJ1ZmZlci0+UGh5RGF0YVtpXSk7CisJCXBvcnRfaW5mby0+cGh5X2luZm9baV0ucGh5X2lkID0gaTsKKwkJcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5wb3J0X2lkID0KKwkJICAgIGJ1ZmZlci0+UGh5RGF0YVtpXS5Qb3J0OworCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLm5lZ290aWF0ZWRfbGlua19yYXRlID0KKwkJICAgIGJ1ZmZlci0+UGh5RGF0YVtpXS5OZWdvdGlhdGVkTGlua1JhdGU7CisJfQorCisgb3V0X2ZyZWVfY29uc2lzdGVudDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkgICAgYnVmZmVyLCBkbWFfaGFuZGxlKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50CittcHRzYXNfc2FzX3BoeV9wZzAoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbywKKwkJdTMyIGZvcm0sIHUzMiBmb3JtX3NwZWNpZmljKQoreworCUNvbmZpZ0V4dGVuZGVkUGFnZUhlYWRlcl90IGhkcjsKKwlDT05GSUdQQVJNUyBjZmc7CisJU2FzUGh5UGFnZTBfdCAqYnVmZmVyOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlpbnQgZXJyb3I7CisKKwloZHIuUGFnZVZlcnNpb24gPSBNUElfU0FTUEhZMF9QQUdFVkVSU0lPTjsKKwloZHIuRXh0UGFnZUxlbmd0aCA9IDA7CisJaGRyLlBhZ2VOdW1iZXIgPSAwOworCWhkci5SZXNlcnZlZDEgPSAwOworCWhkci5SZXNlcnZlZDIgPSAwOworCWhkci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJaGRyLkV4dFBhZ2VUeXBlID0gTVBJX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfUEhZOworCisJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKKwljZmcuZGlyID0gMDsJLyogcmVhZCAqLworCWNmZy50aW1lb3V0ID0gMTA7CisKKwkvKiBHZXQgUGh5IFBnIDAgZm9yIGVhY2ggUGh5LiAqLworCWNmZy5waHlzQWRkciA9IC0xOworCWNmZy5wYWdlQWRkciA9IGZvcm0gKyBmb3JtX3NwZWNpZmljOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlpZiAoIWhkci5FeHRQYWdlTGVuZ3RoKSB7CisJCWVycm9yID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlidWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJCSAgICAgICZkbWFfaGFuZGxlKTsKKwlpZiAoIWJ1ZmZlcikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNmZy5waHlzQWRkciA9IGRtYV9oYW5kbGU7CisJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCisJZXJyb3IgPSBtcHRfY29uZmlnKGlvYywgJmNmZyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CisKKwltcHRzYXNfcHJpbnRfcGh5X3BnMChidWZmZXIpOworCisJcGh5X2luZm8tPmh3X2xpbmtfcmF0ZSA9IGJ1ZmZlci0+SHdMaW5rUmF0ZTsKKwlwaHlfaW5mby0+cHJvZ3JhbW1lZF9saW5rX3JhdGUgPSBidWZmZXItPlByb2dyYW1tZWRMaW5rUmF0ZTsKKwlwaHlfaW5mby0+aWRlbnRpZnkuaGFuZGxlID0gbGUxNl90b19jcHUoYnVmZmVyLT5Pd25lckRldkhhbmRsZSk7CisJcGh5X2luZm8tPmF0dGFjaGVkLmhhbmRsZSA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+QXR0YWNoZWREZXZIYW5kbGUpOworCisgb3V0X2ZyZWVfY29uc2lzdGVudDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkgICAgYnVmZmVyLCBkbWFfaGFuZGxlKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50CittcHRzYXNfc2FzX2RldmljZV9wZzAoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19kZXZpbmZvICpkZXZpY2VfaW5mbywKKwkJdTMyIGZvcm0sIHUzMiBmb3JtX3NwZWNpZmljKQoreworCUNvbmZpZ0V4dGVuZGVkUGFnZUhlYWRlcl90IGhkcjsKKwlDT05GSUdQQVJNUyBjZmc7CisJU2FzRGV2aWNlUGFnZTBfdCAqYnVmZmVyOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlfX2xlNjQgc2FzX2FkZHJlc3M7CisJaW50IGVycm9yOworCisJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0RFVklDRTBfUEFHRVZFUlNJT047CisJaGRyLkV4dFBhZ2VMZW5ndGggPSAwOworCWhkci5QYWdlTnVtYmVyID0gMDsKKwloZHIuUmVzZXJ2ZWQxID0gMDsKKwloZHIuUmVzZXJ2ZWQyID0gMDsKKwloZHIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCWhkci5FeHRQYWdlVHlwZSA9IE1QSV9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0RFVklDRTsKKworCWNmZy5jZmdoZHIuZWhkciA9ICZoZHI7CisJY2ZnLnBhZ2VBZGRyID0gZm9ybSArIGZvcm1fc3BlY2lmaWM7CisJY2ZnLnBoeXNBZGRyID0gLTE7CisJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCWNmZy5kaXIgPSAwOwkvKiByZWFkICovCisJY2ZnLnRpbWVvdXQgPSAxMDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJaWYgKCFoZHIuRXh0UGFnZUxlbmd0aCkgeworCQllcnJvciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhkci5FeHRQYWdlTGVuZ3RoICogNCwKKwkJCQkgICAgICAmZG1hX2hhbmRsZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcucGh5c0FkZHIgPSBkbWFfaGFuZGxlOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCisJbXB0c2FzX3ByaW50X2RldmljZV9wZzAoYnVmZmVyKTsKKworCWRldmljZV9pbmZvLT5oYW5kbGUgPSBsZTE2X3RvX2NwdShidWZmZXItPkRldkhhbmRsZSk7CisJZGV2aWNlX2luZm8tPnBoeV9pZCA9IGJ1ZmZlci0+UGh5TnVtOworCWRldmljZV9pbmZvLT5wb3J0X2lkID0gYnVmZmVyLT5QaHlzaWNhbFBvcnQ7CisJZGV2aWNlX2luZm8tPnRhcmdldCA9IGJ1ZmZlci0+VGFyZ2V0SUQ7CisJZGV2aWNlX2luZm8tPmJ1cyA9IGJ1ZmZlci0+QnVzOworCW1lbWNweSgmc2FzX2FkZHJlc3MsICZidWZmZXItPlNBU0FkZHJlc3MsIHNpemVvZihfX2xlNjQpKTsKKwlkZXZpY2VfaW5mby0+c2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShzYXNfYWRkcmVzcyk7CisJZGV2aWNlX2luZm8tPmRldmljZV9pbmZvID0KKwkgICAgbGUzMl90b19jcHUoYnVmZmVyLT5EZXZpY2VJbmZvKTsKKworIG91dF9mcmVlX2NvbnNpc3RlbnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJICAgIGJ1ZmZlciwgZG1hX2hhbmRsZSk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorbXB0c2FzX3Nhc19leHBhbmRlcl9wZzAoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvLAorCQl1MzIgZm9ybSwgdTMyIGZvcm1fc3BlY2lmaWMpCit7CisJQ29uZmlnRXh0ZW5kZWRQYWdlSGVhZGVyX3QgaGRyOworCUNPTkZJR1BBUk1TIGNmZzsKKwlTYXNFeHBhbmRlclBhZ2UwX3QgKmJ1ZmZlcjsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJaW50IGVycm9yOworCisJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTjsKKwloZHIuRXh0UGFnZUxlbmd0aCA9IDA7CisJaGRyLlBhZ2VOdW1iZXIgPSAwOworCWhkci5SZXNlcnZlZDEgPSAwOworCWhkci5SZXNlcnZlZDIgPSAwOworCWhkci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJaGRyLkV4dFBhZ2VUeXBlID0gTVBJX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfRVhQQU5ERVI7CisKKwljZmcuY2ZnaGRyLmVoZHIgPSAmaGRyOworCWNmZy5waHlzQWRkciA9IC0xOworCWNmZy5wYWdlQWRkciA9IGZvcm0gKyBmb3JtX3NwZWNpZmljOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwljZmcuZGlyID0gMDsJLyogcmVhZCAqLworCWNmZy50aW1lb3V0ID0gMTA7CisKKwllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJaWYgKCFoZHIuRXh0UGFnZUxlbmd0aCkgeworCQllcnJvciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhkci5FeHRQYWdlTGVuZ3RoICogNCwKKwkJCQkgICAgICAmZG1hX2hhbmRsZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcucGh5c0FkZHIgPSBkbWFfaGFuZGxlOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCisJLyogc2F2ZSBjb25maWcgZGF0YSAqLworCXBvcnRfaW5mby0+bnVtX3BoeXMgPSBidWZmZXItPk51bVBoeXM7CisJcG9ydF9pbmZvLT5oYW5kbGUgPSBsZTE2X3RvX2NwdShidWZmZXItPkRldkhhbmRsZSk7CisJcG9ydF9pbmZvLT5waHlfaW5mbyA9IGtjYWxsb2MocG9ydF9pbmZvLT5udW1fcGh5cywKKwkJc2l6ZW9mKHN0cnVjdCBtcHRzYXNfcGh5aW5mbyksR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0X2luZm8tPnBoeV9pbmZvKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCX0KKworIG91dF9mcmVlX2NvbnNpc3RlbnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJICAgIGJ1ZmZlciwgZG1hX2hhbmRsZSk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorbXB0c2FzX3Nhc19leHBhbmRlcl9wZzEoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbywKKwkJdTMyIGZvcm0sIHUzMiBmb3JtX3NwZWNpZmljKQoreworCUNvbmZpZ0V4dGVuZGVkUGFnZUhlYWRlcl90IGhkcjsKKwlDT05GSUdQQVJNUyBjZmc7CisJU2FzRXhwYW5kZXJQYWdlMV90ICpidWZmZXI7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCWludCBlcnJvcjsKKworCWhkci5QYWdlVmVyc2lvbiA9IE1QSV9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT047CisJaGRyLkV4dFBhZ2VMZW5ndGggPSAwOworCWhkci5QYWdlTnVtYmVyID0gMTsKKwloZHIuUmVzZXJ2ZWQxID0gMDsKKwloZHIuUmVzZXJ2ZWQyID0gMDsKKwloZHIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCWhkci5FeHRQYWdlVHlwZSA9IE1QSV9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0VYUEFOREVSOworCisJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKKwljZmcucGh5c0FkZHIgPSAtMTsKKwljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKKwljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KKwljZmcudGltZW91dCA9IDEwOworCisJZXJyb3IgPSBtcHRfY29uZmlnKGlvYywgJmNmZyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCWlmICghaGRyLkV4dFBhZ2VMZW5ndGgpIHsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkJICAgICAgJmRtYV9oYW5kbGUpOworCWlmICghYnVmZmVyKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY2ZnLnBoeXNBZGRyID0gZG1hX2hhbmRsZTsKKwljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisKKwllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKworCisJbXB0c2FzX3ByaW50X2V4cGFuZGVyX3BnMShidWZmZXIpOworCisJLyogc2F2ZSBjb25maWcgZGF0YSAqLworCXBoeV9pbmZvLT5waHlfaWQgPSBidWZmZXItPlBoeTsKKwlwaHlfaW5mby0+cG9ydF9pZCA9IGJ1ZmZlci0+UGh5c2ljYWxQb3J0OworCXBoeV9pbmZvLT5uZWdvdGlhdGVkX2xpbmtfcmF0ZSA9IGJ1ZmZlci0+TmVnb3RpYXRlZExpbmtSYXRlOworCXBoeV9pbmZvLT5wcm9ncmFtbWVkX2xpbmtfcmF0ZSA9IGJ1ZmZlci0+UHJvZ3JhbW1lZExpbmtSYXRlOworCXBoeV9pbmZvLT5od19saW5rX3JhdGUgPSBidWZmZXItPkh3TGlua1JhdGU7CisJcGh5X2luZm8tPmlkZW50aWZ5LmhhbmRsZSA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+T3duZXJEZXZIYW5kbGUpOworCXBoeV9pbmZvLT5hdHRhY2hlZC5oYW5kbGUgPSBsZTE2X3RvX2NwdShidWZmZXItPkF0dGFjaGVkRGV2SGFuZGxlKTsKKworCisgb3V0X2ZyZWVfY29uc2lzdGVudDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkgICAgYnVmZmVyLCBkbWFfaGFuZGxlKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZAorbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKHN0cnVjdCBzYXNfaWRlbnRpZnkgKmlkZW50aWZ5LAorCQlzdHJ1Y3QgbXB0c2FzX2RldmluZm8gKmRldmljZV9pbmZvKQoreworCXUxNiBwcm90b2NvbHM7CisKKwlpZGVudGlmeS0+c2FzX2FkZHJlc3MgPSBkZXZpY2VfaW5mby0+c2FzX2FkZHJlc3M7CisJaWRlbnRpZnktPnBoeV9pZGVudGlmaWVyID0gZGV2aWNlX2luZm8tPnBoeV9pZDsKKworCS8qCisJICogRmlsbCBpbiBQaHkgSW5pdGlhdG9yIFBvcnQgUHJvdG9jb2wuCisJICogQml0cyA2OjMsIG1vcmUgdGhhbiBvbmUgYml0IGNhbiBiZSBzZXQsIGZhbGwgdGhyb3VnaCBjYXNlcy4KKwkgKi8KKwlwcm90b2NvbHMgPSBkZXZpY2VfaW5mby0+ZGV2aWNlX2luZm8gJiAweDc4OworCWlkZW50aWZ5LT5pbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgPSAwOworCWlmIChwcm90b2NvbHMgJiBNUElfU0FTX0RFVklDRV9JTkZPX1NTUF9JTklUSUFUT1IpCisJCWlkZW50aWZ5LT5pbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NTUDsKKwlpZiAocHJvdG9jb2xzICYgTVBJX1NBU19ERVZJQ0VfSU5GT19TVFBfSU5JVElBVE9SKQorCQlpZGVudGlmeS0+aW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TVFA7CisJaWYgKHByb3RvY29scyAmIE1QSV9TQVNfREVWSUNFX0lORk9fU01QX0lOSVRJQVRPUikKKwkJaWRlbnRpZnktPmluaXRpYXRvcl9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU01QOworCWlmIChwcm90b2NvbHMgJiBNUElfU0FTX0RFVklDRV9JTkZPX1NBVEFfSE9TVCkKKwkJaWRlbnRpZnktPmluaXRpYXRvcl9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU0FUQTsKKworCS8qCisJICogRmlsbCBpbiBQaHkgVGFyZ2V0IFBvcnQgUHJvdG9jb2wuCisJICogQml0cyAxMDo3LCBtb3JlIHRoYW4gb25lIGJpdCBjYW4gYmUgc2V0LCBmYWxsIHRocm91Z2ggY2FzZXMuCisJICovCisJcHJvdG9jb2xzID0gZGV2aWNlX2luZm8tPmRldmljZV9pbmZvICYgMHg3ODA7CisJaWRlbnRpZnktPnRhcmdldF9wb3J0X3Byb3RvY29scyA9IDA7CisJaWYgKHByb3RvY29scyAmIE1QSV9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkKKwkJaWRlbnRpZnktPnRhcmdldF9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU1NQOworCWlmIChwcm90b2NvbHMgJiBNUElfU0FTX0RFVklDRV9JTkZPX1NUUF9UQVJHRVQpCisJCWlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NUUDsKKwlpZiAocHJvdG9jb2xzICYgTVBJX1NBU19ERVZJQ0VfSU5GT19TTVBfVEFSR0VUKQorCQlpZGVudGlmeS0+dGFyZ2V0X3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TTVA7CisJaWYgKHByb3RvY29scyAmIE1QSV9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UpCisJCWlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NBVEE7CisKKwkvKgorCSAqIEZpbGwgaW4gQXR0YWNoZWQgZGV2aWNlIHR5cGUuCisJICovCisJc3dpdGNoIChkZXZpY2VfaW5mby0+ZGV2aWNlX2luZm8gJgorCQkJTVBJX1NBU19ERVZJQ0VfSU5GT19NQVNLX0RFVklDRV9UWVBFKSB7CisJY2FzZSBNUElfU0FTX0RFVklDRV9JTkZPX05PX0RFVklDRToKKwkJaWRlbnRpZnktPmRldmljZV90eXBlID0gU0FTX1BIWV9VTlVTRUQ7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19ERVZJQ0VfSU5GT19FTkRfREVWSUNFOgorCQlpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPSBTQVNfRU5EX0RFVklDRTsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX0RFVklDRV9JTkZPX0VER0VfRVhQQU5ERVI6CisJCWlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9IFNBU19FREdFX0VYUEFOREVSX0RFVklDRTsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX0RFVklDRV9JTkZPX0ZBTk9VVF9FWFBBTkRFUjoKKwkJaWRlbnRpZnktPmRldmljZV90eXBlID0gU0FTX0ZBTk9VVF9FWFBBTkRFUl9ERVZJQ0U7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBtcHRzYXNfcHJvYmVfb25lX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBtcHRzYXNfcGh5aW5mbyAqcGh5X2luZm8sIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qgc2FzX3BoeSAqcG9ydDsKKwlpbnQgZXJyb3I7CisKKwlwb3J0ID0gc2FzX3BoeV9hbGxvYyhkZXYsIGluZGV4KTsKKwlpZiAoIXBvcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJcG9ydC0+cG9ydF9pZGVudGlmaWVyID0gcGh5X2luZm8tPnBvcnRfaWQ7CisJbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKCZwb3J0LT5pZGVudGlmeSwgJnBoeV9pbmZvLT5pZGVudGlmeSk7CisKKwkvKgorCSAqIFNldCBOZWdvdGlhdGVkIGxpbmsgcmF0ZS4KKwkgKi8KKwlzd2l0Y2ggKHBoeV9pbmZvLT5uZWdvdGlhdGVkX2xpbmtfcmF0ZSkgeworCWNhc2UgTVBJX1NBU19JT1VOSVQwX1JBVEVfUEhZX0RJU0FCTEVEOgorCQlwb3J0LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0gU0FTX1BIWV9ESVNBQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX0lPVU5JVDBfUkFURV9GQUlMRURfU1BFRURfTkVHT1RJQVRJT046CisJCXBvcnQtPm5lZ290aWF0ZWRfbGlua3JhdGUgPSBTQVNfTElOS19SQVRFX0ZBSUxFRDsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX0lPVU5JVDBfUkFURV8xXzU6CisJCXBvcnQtPm5lZ290aWF0ZWRfbGlua3JhdGUgPSBTQVNfTElOS19SQVRFXzFfNV9HQlBTOworCQlicmVhazsKKwljYXNlIE1QSV9TQVNfSU9VTklUMF9SQVRFXzNfMDoKKwkJcG9ydC0+bmVnb3RpYXRlZF9saW5rcmF0ZSA9IFNBU19MSU5LX1JBVEVfM18wX0dCUFM7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19JT1VOSVQwX1JBVEVfU0FUQV9PT0JfQ09NUExFVEU6CisJY2FzZSBNUElfU0FTX0lPVU5JVDBfUkFURV9VTktOT1dOOgorCWRlZmF1bHQ6CisJCXBvcnQtPm5lZ290aWF0ZWRfbGlua3JhdGUgPSBTQVNfTElOS19SQVRFX1VOS05PV047CisJCWJyZWFrOworCX0KKworCS8qCisJICogU2V0IE1heCBoYXJkd2FyZSBsaW5rIHJhdGUuCisJICovCisJc3dpdGNoIChwaHlfaW5mby0+aHdfbGlua19yYXRlICYgTVBJX1NBU19QSFkwX1BSQVRFX01BWF9SQVRFX01BU0spIHsKKwljYXNlIE1QSV9TQVNfUEhZMF9IV1JBVEVfTUFYX1JBVEVfMV81OgorCQlwb3J0LT5tYXhpbXVtX2xpbmtyYXRlX2h3ID0gU0FTX0xJTktfUkFURV8xXzVfR0JQUzsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX1BIWTBfUFJBVEVfTUFYX1JBVEVfM18wOgorCQlwb3J0LT5tYXhpbXVtX2xpbmtyYXRlX2h3ID0gU0FTX0xJTktfUkFURV8zXzBfR0JQUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBTZXQgTWF4IHByb2dyYW1tZWQgbGluayByYXRlLgorCSAqLworCXN3aXRjaCAocGh5X2luZm8tPnByb2dyYW1tZWRfbGlua19yYXRlICYKKwkJCU1QSV9TQVNfUEhZMF9QUkFURV9NQVhfUkFURV9NQVNLKSB7CisJY2FzZSBNUElfU0FTX1BIWTBfUFJBVEVfTUFYX1JBVEVfMV81OgorCQlwb3J0LT5tYXhpbXVtX2xpbmtyYXRlID0gU0FTX0xJTktfUkFURV8xXzVfR0JQUzsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX1BIWTBfUFJBVEVfTUFYX1JBVEVfM18wOgorCQlwb3J0LT5tYXhpbXVtX2xpbmtyYXRlID0gU0FTX0xJTktfUkFURV8zXzBfR0JQUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBTZXQgTWluIGhhcmR3YXJlIGxpbmsgcmF0ZS4KKwkgKi8KKwlzd2l0Y2ggKHBoeV9pbmZvLT5od19saW5rX3JhdGUgJiBNUElfU0FTX1BIWTBfSFdSQVRFX01JTl9SQVRFX01BU0spIHsKKwljYXNlIE1QSV9TQVNfUEhZMF9IV1JBVEVfTUlOX1JBVEVfMV81OgorCQlwb3J0LT5taW5pbXVtX2xpbmtyYXRlX2h3ID0gU0FTX0xJTktfUkFURV8xXzVfR0JQUzsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX1BIWTBfUFJBVEVfTUlOX1JBVEVfM18wOgorCQlwb3J0LT5taW5pbXVtX2xpbmtyYXRlX2h3ID0gU0FTX0xJTktfUkFURV8zXzBfR0JQUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBTZXQgTWluIHByb2dyYW1tZWQgbGluayByYXRlLgorCSAqLworCXN3aXRjaCAocGh5X2luZm8tPnByb2dyYW1tZWRfbGlua19yYXRlICYKKwkJCU1QSV9TQVNfUEhZMF9QUkFURV9NSU5fUkFURV9NQVNLKSB7CisJY2FzZSBNUElfU0FTX1BIWTBfUFJBVEVfTUlOX1JBVEVfMV81OgorCQlwb3J0LT5taW5pbXVtX2xpbmtyYXRlID0gU0FTX0xJTktfUkFURV8xXzVfR0JQUzsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX1BIWTBfUFJBVEVfTUlOX1JBVEVfM18wOgorCQlwb3J0LT5taW5pbXVtX2xpbmtyYXRlID0gU0FTX0xJTktfUkFURV8zXzBfR0JQUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZXJyb3IgPSBzYXNfcGh5X2FkZChwb3J0KTsKKwlpZiAoZXJyb3IpIHsKKwkJc2FzX3BoeV9mcmVlKHBvcnQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJaWYgKHBoeV9pbmZvLT5hdHRhY2hlZC5oYW5kbGUpIHsKKwkJc3RydWN0IHNhc19ycGh5ICpycGh5OworCisJCXJwaHkgPSBzYXNfcnBoeV9hbGxvYyhwb3J0KTsKKwkJaWYgKCFycGh5KQorCQkJcmV0dXJuIDA7IC8qIG5vbi1mYXRhbDogYW4gcnBoeSBjYW4gYmUgYWRkZWQgbGF0ZXIgKi8KKworCQltcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oJnJwaHktPmlkZW50aWZ5LCAmcGh5X2luZm8tPmF0dGFjaGVkKTsKKwkJZXJyb3IgPSBzYXNfcnBoeV9hZGQocnBoeSk7CisJCWlmIChlcnJvcikgeworCQkJc2FzX3JwaHlfZnJlZShycGh5KTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCXBoeV9pbmZvLT5ycGh5ID0gcnBoeTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXB0c2FzX3Byb2JlX2hiYV9waHlzKE1QVF9BREFQVEVSICppb2MsIGludCAqaW5kZXgpCit7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvOworCXUzMiBoYW5kbGUgPSAweEZGRkY7CisJaW50IGVycm9yID0gLUVOT01FTSwgaTsKKworCXBvcnRfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpwb3J0X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnRfaW5mbykKKwkJZ290byBvdXQ7CisJbWVtc2V0KHBvcnRfaW5mbywgMCwgc2l6ZW9mKCpwb3J0X2luZm8pKTsKKworCWVycm9yID0gbXB0c2FzX3Nhc19pb191bml0X3BnMChpb2MsIHBvcnRfaW5mbyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9mcmVlX3BvcnRfaW5mbzsKKworCWxpc3RfYWRkX3RhaWwoJnBvcnRfaW5mby0+bGlzdCwgJmlvYy0+c2FzX3RvcG9sb2d5KTsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyspIHsKKwkJbXB0c2FzX3Nhc19waHlfcGcwKGlvYywgJnBvcnRfaW5mby0+cGh5X2luZm9baV0sCisJCQkoTVBJX1NBU19QSFlfUEdBRF9GT1JNX1BIWV9OVU1CRVIgPDwKKwkJCSBNUElfU0FTX1BIWV9QR0FEX0ZPUk1fU0hJRlQpLCBpKTsKKworCQltcHRzYXNfc2FzX2RldmljZV9wZzAoaW9jLCAmcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeSwKKwkJCShNUElfU0FTX0RFVklDRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFIDw8CisJCQkgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwgaGFuZGxlKTsKKwkJaGFuZGxlID0gcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5oYW5kbGU7CisKKwkJaWYgKHBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQuaGFuZGxlKSB7CisJCQltcHRzYXNfc2FzX2RldmljZV9wZzAoaW9jLAorCQkJCSZwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmF0dGFjaGVkLAorCQkJCShNUElfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFIDw8CisJCQkJIE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9TSElGVCksCisJCQkJcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5oYW5kbGUpOworCQl9CisKKwkJbXB0c2FzX3Byb2JlX29uZV9waHkoJmlvYy0+c2gtPnNob3N0X2dlbmRldiwKKwkJCQkgICAgICZwb3J0X2luZm8tPnBoeV9pbmZvW2ldLCAqaW5kZXgpOworCQkoKmluZGV4KSsrOworCX0KKworCXJldHVybiAwOworCisgb3V0X2ZyZWVfcG9ydF9pbmZvOgorCWtmcmVlKHBvcnRfaW5mbyk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorbXB0c2FzX3Byb2JlX2V4cGFuZGVyX3BoeXMoTVBUX0FEQVBURVIgKmlvYywgdTMyICpoYW5kbGUsIGludCAqaW5kZXgpCit7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvLCAqcDsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNLCBpLCBqOworCisJcG9ydF9pbmZvID0ga21hbGxvYyhzaXplb2YoKnBvcnRfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghcG9ydF9pbmZvKQorCQlnb3RvIG91dDsKKwltZW1zZXQocG9ydF9pbmZvLCAwLCBzaXplb2YoKnBvcnRfaW5mbykpOworCisJZXJyb3IgPSBtcHRzYXNfc2FzX2V4cGFuZGVyX3BnMChpb2MsIHBvcnRfaW5mbywKKwkJKE1QSV9TQVNfRVhQQU5EX1BHQURfRk9STV9HRVRfTkVYVF9IQU5ETEUgPDwKKwkJIE1QSV9TQVNfRVhQQU5EX1BHQURfRk9STV9TSElGVCksICpoYW5kbGUpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9wb3J0X2luZm87CisKKwkqaGFuZGxlID0gcG9ydF9pbmZvLT5oYW5kbGU7CisKKwlsaXN0X2FkZF90YWlsKCZwb3J0X2luZm8tPmxpc3QsICZpb2MtPnNhc190b3BvbG9neSk7CisJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykgeworCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CisKKwkJbXB0c2FzX3Nhc19leHBhbmRlcl9wZzEoaW9jLCAmcG9ydF9pbmZvLT5waHlfaW5mb1tpXSwKKwkJCShNUElfU0FTX0VYUEFORF9QR0FEX0ZPUk1fSEFORExFX1BIWV9OVU0gPDwKKwkJCSBNUElfU0FTX0VYUEFORF9QR0FEX0ZPUk1fU0hJRlQpLCAoaSA8PCAxNikgKyAqaGFuZGxlKTsKKworCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5oYW5kbGUpIHsKKwkJCW1wdHNhc19zYXNfZGV2aWNlX3BnMChpb2MsCisJCQkJJnBvcnRfaW5mby0+cGh5X2luZm9baV0uaWRlbnRpZnksCisJCQkJKE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUgPDwKKwkJCQkgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwKKwkJCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmlkZW50aWZ5LmhhbmRsZSk7CisJCX0KKworCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5oYW5kbGUpIHsKKwkJCW1wdHNhc19zYXNfZGV2aWNlX3BnMChpb2MsCisJCQkJJnBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQsCisJCQkJKE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUgPDwKKwkJCQkgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwKKwkJCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmhhbmRsZSk7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBmaW5kIGEgcGFyZW50IHBvcnQgaGFuZGxlIHRoaXMgZXhwYW5kZXIgaXMKKwkJICogYXR0YWNoZWQgdG8gYW5vdGhlciBleHBhbmRlciwgZWxzZSBpdCBoYW5ncyBvZiB0aGUKKwkJICogSEJBIHBoeXMuCisJCSAqLworCQlwYXJlbnQgPSAmaW9jLT5zaC0+c2hvc3RfZ2VuZGV2OworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZpb2MtPnNhc190b3BvbG9neSwgbGlzdCkgeworCQkJZm9yIChqID0gMDsgaiA8IHAtPm51bV9waHlzOyBqKyspIHsKKwkJCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5oYW5kbGUgPT0KKwkJCQkJCXAtPnBoeV9pbmZvW2pdLmF0dGFjaGVkLmhhbmRsZSkKKwkJCQkJcGFyZW50ID0gJnAtPnBoeV9pbmZvW2pdLnJwaHktPmRldjsKKwkJCX0KKwkJfQorCisJCW1wdHNhc19wcm9iZV9vbmVfcGh5KHBhcmVudCwgJnBvcnRfaW5mby0+cGh5X2luZm9baV0sICppbmRleCk7CisJCSgqaW5kZXgpKys7CisJfQorCisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV9wb3J0X2luZm86CisJa2ZyZWUocG9ydF9pbmZvKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZAorbXB0c2FzX3NjYW5fc2FzX3RvcG9sb2d5KE1QVF9BREFQVEVSICppb2MpCit7CisJdTMyIGhhbmRsZSA9IDB4RkZGRjsKKwlpbnQgaW5kZXggPSAwOworCisJbXB0c2FzX3Byb2JlX2hiYV9waHlzKGlvYywgJmluZGV4KTsKKwl3aGlsZSAoIW1wdHNhc19wcm9iZV9leHBhbmRlcl9waHlzKGlvYywgJmhhbmRsZSwgJmluZGV4KSkKKwkJOworfQorCitzdGF0aWMgaW50CittcHRzYXNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpzaDsKKwlNUFRfU0NTSV9IT1NUCQkqaGQ7CisJTVBUX0FEQVBURVIgCQkqaW9jOworCXVuc2lnbmVkIGxvbmcJCSBmbGFnczsKKwlpbnQJCQkgc3osIGlpOworCWludAkJCSBudW1TR0UgPSAwOworCWludAkJCSBzY2FsZTsKKwlpbnQJCQkgaW9jX2NhcDsKKwl1OAkJCSptZW07CisJaW50CQkJZXJyb3I9MDsKKwlpbnQJCQlyOworCisJciA9IG1wdF9hdHRhY2gocGRldixpZCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaW9jID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlvYy0+RG9uZUN0eCA9IG1wdHNhc0RvbmVDdHg7CisJaW9jLT5UYXNrQ3R4ID0gbXB0c2FzVGFza0N0eDsKKwlpb2MtPkludGVybmFsQ3R4ID0gbXB0c2FzSW50ZXJuYWxDdHg7CisKKwkvKiAgQWRkZWQgc2FuaXR5IGNoZWNrIG9uIHJlYWRpbmVzcyBvZiB0aGUgTVBUIGFkYXB0ZXIuCisJICovCisJaWYgKGlvYy0+bGFzdF9zdGF0ZSAhPSBNUElfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCisJCSAgIlNraXBwaW5nIGJlY2F1c2UgaXQncyBub3Qgb3BlcmF0aW9uYWwhXG4iLAorCQkgIGlvYy0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghaW9jLT5hY3RpdmUpIHsKKwkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIlNraXBwaW5nIGJlY2F1c2UgaXQncyBkaXNhYmxlZCFcbiIsCisJCSAgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogIFNhbml0eSBjaGVjayAtIGVuc3VyZSBhdCBsZWFzdCAxIHBvcnQgaXMgSU5JVElBVE9SIGNhcGFibGUKKwkgKi8KKwlpb2NfY2FwID0gMDsKKwlmb3IgKGlpID0gMDsgaWkgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IGlpKyspIHsKKwkJaWYgKGlvYy0+cGZhY3RzW2lpXS5Qcm90b2NvbEZsYWdzICYKKwkJCQlNUElfUE9SVEZBQ1RTX1BST1RPQ09MX0lOSVRJQVRPUikKKwkJCWlvY19jYXArKzsKKwl9CisKKwlpZiAoIWlvY19jYXApIHsKKwkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKKwkJCSJTa2lwcGluZyBpb2M9JXAgYmVjYXVzZSBTQ1NJIEluaXRpYXRvciBtb2RlICIKKwkJCSJpcyBOT1QgZW5hYmxlZCFcbiIsIGlvYy0+bmFtZSwgaW9jKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2ggPSBzY3NpX2hvc3RfYWxsb2MoJm1wdHNhc19kcml2ZXJfdGVtcGxhdGUsIHNpemVvZihNUFRfU0NTSV9IT1NUKSk7CisJaWYgKCFzaCkgeworCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAorCQkJIlVuYWJsZSB0byByZWdpc3RlciBjb250cm9sbGVyIHdpdGggU0NTSSBzdWJzeXN0ZW1cbiIsCisJCQlpb2MtPm5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+RnJlZVFsb2NrLCBmbGFncyk7CisKKwkvKiBBdHRhY2ggdGhlIFNDU0kgSG9zdCB0byB0aGUgSU9DIHN0cnVjdHVyZQorCSAqLworCWlvYy0+c2ggPSBzaDsKKworCXNoLT5pb19wb3J0ID0gMDsKKwlzaC0+bl9pb19wb3J0ID0gMDsKKwlzaC0+aXJxID0gMDsKKworCS8qIHNldCAxNiBieXRlIGNkYidzICovCisJc2gtPm1heF9jbWRfbGVuID0gMTY7CisKKwlzaC0+bWF4X2lkID0gaW9jLT5wZmFjdHMtPk1heERldmljZXMgKyAxOworCisJc2gtPnRyYW5zcG9ydHQgPSBtcHRzYXNfdHJhbnNwb3J0X3RlbXBsYXRlOworCisJc2gtPm1heF9sdW4gPSBNUFRfTEFTVF9MVU4gKyAxOworCXNoLT5tYXhfY2hhbm5lbCA9IDA7CisJc2gtPnRoaXNfaWQgPSBpb2MtPnBmYWN0c1swXS5Qb3J0U0NTSUlEOworCisJLyogUmVxdWlyZWQgZW50cnkuCisJICovCisJc2gtPnVuaXF1ZV9pZCA9IGlvYy0+aWQ7CisKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5zYXNfdG9wb2xvZ3kpOworCisJLyogVmVyaWZ5IHRoYXQgd2Ugd29uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtCisJICogbnVtYmVyIG9mIGNoYWluIGJ1ZmZlcnMKKwkgKiBXZSBjYW4gb3B0aW1pemU6ICBaWiA9IHJlcV9zei9zaXplb2YoU0dFKQorCSAqIEZvciAzMmJpdCBTR0UnczoKKwkgKiAgbnVtU0dFID0gMSArIChaWi0xKSoobWF4Q2hhaW4gLTEpICsgWloKKwkgKiAgICAgICAgICAgICAgICsgKHJlcV9zeiAtIDY0KS9zaXplb2YoU0dFKQorCSAqIEEgc2xpZ2h0bHkgZGlmZmVyZW50IGFsZ29yaXRobSBpcyByZXF1aXJlZCBmb3IKKwkgKiA2NGJpdCBTR0VzLgorCSAqLworCXNjYWxlID0gaW9jLT5yZXFfc3ovKHNpemVvZihkbWFfYWRkcl90KSArIHNpemVvZih1MzIpKTsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID09IHNpemVvZih1NjQpKSB7CisJCW51bVNHRSA9IChzY2FsZSAtIDEpICoKKwkJICAoaW9jLT5mYWN0cy5NYXhDaGFpbkRlcHRoLTEpICsgc2NhbGUgKworCQkgIChpb2MtPnJlcV9zeiAtIDYwKSAvIChzaXplb2YoZG1hX2FkZHJfdCkgKworCQkgIHNpemVvZih1MzIpKTsKKwl9IGVsc2UgeworCQludW1TR0UgPSAxICsgKHNjYWxlIC0gMSkgKgorCQkgIChpb2MtPmZhY3RzLk1heENoYWluRGVwdGgtMSkgKyBzY2FsZSArCisJCSAgKGlvYy0+cmVxX3N6IC0gNjQpIC8gKHNpemVvZihkbWFfYWRkcl90KSArCisJCSAgc2l6ZW9mKHUzMikpOworCX0KKworCWlmIChudW1TR0UgPCBzaC0+c2dfdGFibGVzaXplKSB7CisJCS8qIFJlc2V0IHRoaXMgdmFsdWUgKi8KKwkJZHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVAorCQkgICJSZXNldHRpbmcgc2dfdGFibGVzaXplIHRvICVkIGZyb20gJWRcbiIsCisJCSAgaW9jLT5uYW1lLCBudW1TR0UsIHNoLT5zZ190YWJsZXNpemUpKTsKKwkJc2gtPnNnX3RhYmxlc2l6ZSA9IG51bVNHRTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPkZyZWVRbG9jaywgZmxhZ3MpOworCisJaGQgPSAoTVBUX1NDU0lfSE9TVCAqKSBzaC0+aG9zdGRhdGE7CisJaGQtPmlvYyA9IGlvYzsKKworCS8qIFNDU0kgbmVlZHMgc2NzaV9jbW5kIGxvb2t1cCB0YWJsZSEKKwkgKiAod2l0aCBzaXplIGVxdWFsIHRvIHJlcV9kZXB0aCpQdHJTeiEpCisJICovCisJc3ogPSBpb2MtPnJlcV9kZXB0aCAqIHNpemVvZih2b2lkICopOworCW1lbSA9IGttYWxsb2Moc3osIEdGUF9BVE9NSUMpOworCWlmIChtZW0gPT0gTlVMTCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gbXB0c2FzX3Byb2JlX2ZhaWxlZDsKKwl9CisKKwltZW1zZXQobWVtLCAwLCBzeik7CisJaGQtPlNjc2lMb29rdXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKikgbWVtOworCisJZHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiU2NzaUxvb2t1cCBAICVwLCBzej0lZFxuIiwKKwkJIGlvYy0+bmFtZSwgaGQtPlNjc2lMb29rdXAsIHN6KSk7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBkZXZpY2Ugc3RydWN0dXJlcy4KKwkgKiBBIG5vbi1OdWxsIHBvaW50ZXIgYXQgYW4gb2Zmc2V0CisJICogaW5kaWNhdGVzIGEgZGV2aWNlIGV4aXN0cy4KKwkgKiBtYXhfaWQgPSAxICsgbWF4aW11bSBpZCAoaG9zdHMuaCkKKwkgKi8KKwlzeiA9IHNoLT5tYXhfaWQgKiBzaXplb2Yodm9pZCAqKTsKKwltZW0gPSBrbWFsbG9jKHN6LCBHRlBfQVRPTUlDKTsKKwlpZiAobWVtID09IE5VTEwpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG1wdHNhc19wcm9iZV9mYWlsZWQ7CisJfQorCisJbWVtc2V0KG1lbSwgMCwgc3opOworCWhkLT5UYXJnZXRzID0gKFZpcnREZXZpY2UgKiopIG1lbTsKKworCWRwcmludGsoKEtFUk5fSU5GTworCSAgIiAgVGFyZ2V0cyBAICVwLCBzej0lZFxuIiwgaGQtPlRhcmdldHMsIHN6KSk7CisKKwkvKiBDbGVhciB0aGUgVE0gZmxhZ3MKKwkgKi8KKwloZC0+dG1QZW5kaW5nID0gMDsKKwloZC0+dG1TdGF0ZSA9IFRNX1NUQVRFX05PTkU7CisJaGQtPnJlc2V0UGVuZGluZyA9IDA7CisJaGQtPmFib3J0U0NwbnQgPSBOVUxMOworCisJLyogQ2xlYXIgdGhlIHBvaW50ZXIgdXNlZCB0byBzdG9yZQorCSAqIHNpbmdsZS10aHJlYWRlZCBjb21tYW5kcywgaS5lLiwgdGhvc2UKKwkgKiBpc3N1ZWQgZHVyaW5nIGEgYnVzIHNjYW4sIGR2IGFuZAorCSAqIGNvbmZpZ3VyYXRpb24gcGFnZXMuCisJICovCisJaGQtPmNtZFB0ciA9IE5VTEw7CisKKwkvKiBJbml0aWFsaXplIHRoaXMgU0NTSSBIb3N0cycgdGltZXJzCisJICogVG8gdXNlLCBzZXQgdGhlIHRpbWVyIGV4cGlyZXMgZmllbGQKKwkgKiBhbmQgYWRkX3RpbWVyCisJICovCisJaW5pdF90aW1lcigmaGQtPnRpbWVyKTsKKwloZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBoZDsKKwloZC0+dGltZXIuZnVuY3Rpb24gPSBtcHRzY3NpaF90aW1lcl9leHBpcmVkOworCisJaGQtPm1wdF9wcV9maWx0ZXIgPSBtcHRfcHFfZmlsdGVyOworCWlvYy0+c2FzX2RhdGEucHRDbGVhciA9IG1wdF9wdF9jbGVhcjsKKworCWlmIChpb2MtPnNhc19kYXRhLnB0Q2xlYXI9PTEpIHsKKwkJbXB0YmFzZV9zYXNfcGVyc2lzdF9vcGVyYXRpb24oCisJCSAgICBpb2MsIE1QSV9TQVNfT1BfQ0xFQVJfQUxMX1BFUlNJU1RFTlQpOworCX0KKworCWRkdnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVAorCQkibXB0X3BxX2ZpbHRlciAleCBtcHRfcHFfZmlsdGVyICV4XG4iLAorCQlpb2MtPm5hbWUsCisJCW1wdF9wcV9maWx0ZXIsCisJCW1wdF9wcV9maWx0ZXIpKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhkLT5zY2FuZHZfd2FpdHEpOworCWhkLT5zY2FuZHZfd2FpdF9kb25lID0gMDsKKwloZC0+bGFzdF9xdWV1ZV9mdWxsID0gMDsKKworCWVycm9yID0gc2NzaV9hZGRfaG9zdChzaCwgJmlvYy0+cGNpZGV2LT5kZXYpOworCWlmIChlcnJvcikgeworCQlkcHJpbnRrKChLRVJOX0VSUiBNWU5BTQorCQkgICJzY3NpX2FkZF9ob3N0IGZhaWxlZFxuIikpOworCQlnb3RvIG1wdHNhc19wcm9iZV9mYWlsZWQ7CisJfQorCisJbXB0c2FzX3NjYW5fc2FzX3RvcG9sb2d5KGlvYyk7CisKKwlyZXR1cm4gMDsKKworbXB0c2FzX3Byb2JlX2ZhaWxlZDoKKworCW1wdHNjc2loX3JlbW92ZShwZGV2KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtcHRzYXNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCU1QVF9BREFQVEVSICppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcCwgKm47CisKKwlzYXNfcmVtb3ZlX2hvc3QoaW9jLT5zaCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmlvYy0+c2FzX3RvcG9sb2d5LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJa2ZyZWUocCk7CisJfQorCisJbXB0c2NzaWhfcmVtb3ZlKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXB0c2FzX3BjaV90YWJsZVtdID0geworCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY2LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2OCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRFLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NkUsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY4RSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXswfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtcHRzYXNfcGNpX3RhYmxlKTsKKworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXB0c2FzX2RyaXZlciA9IHsKKwkubmFtZQkJPSAibXB0c2FzIiwKKwkuaWRfdGFibGUJPSBtcHRzYXNfcGNpX3RhYmxlLAorCS5wcm9iZQkJPSBtcHRzYXNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtcHRzYXNfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBtcHRzY3NpaF9zaHV0ZG93biwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IG1wdHNjc2loX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtcHRzY3NpaF9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0CittcHRzYXNfaW5pdCh2b2lkKQoreworCXNob3dfbXB0bW9kX3ZlcihteV9OQU1FLCBteV9WRVJTSU9OKTsKKworCW1wdHNhc190cmFuc3BvcnRfdGVtcGxhdGUgPQorCSAgICBzYXNfYXR0YWNoX3RyYW5zcG9ydCgmbXB0c2FzX3RyYW5zcG9ydF9mdW5jdGlvbnMpOworCWlmICghbXB0c2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltcHRzYXNEb25lQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX2lvX2RvbmUsIE1QVFNBU19EUklWRVIpOworCW1wdHNhc1Rhc2tDdHggPSBtcHRfcmVnaXN0ZXIobXB0c2NzaWhfdGFza21nbXRfY29tcGxldGUsIE1QVFNBU19EUklWRVIpOworCW1wdHNhc0ludGVybmFsQ3R4ID0KKwkJbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3NjYW5kdl9jb21wbGV0ZSwgTVBUU0FTX0RSSVZFUik7CisKKwlpZiAobXB0X2V2ZW50X3JlZ2lzdGVyKG1wdHNhc0RvbmVDdHgsIG1wdHNjc2loX2V2ZW50X3Byb2Nlc3MpID09IDApIHsKKwkJZGV2dHByaW50aygoS0VSTl9JTkZPIE1ZTkFNCisJCSAgIjogUmVnaXN0ZXJlZCBmb3IgSU9DIGV2ZW50IG5vdGlmaWNhdGlvbnNcbiIpKTsKKwl9CisKKwlpZiAobXB0X3Jlc2V0X3JlZ2lzdGVyKG1wdHNhc0RvbmVDdHgsIG1wdHNjc2loX2lvY19yZXNldCkgPT0gMCkgeworCQlkcHJpbnRrKChLRVJOX0lORk8gTVlOQU0KKwkJICAiOiBSZWdpc3RlcmVkIGZvciBJT0MgcmVzZXQgbm90aWZpY2F0aW9uc1xuIikpOworCX0KKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtcHRzYXNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CittcHRzYXNfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXB0c2FzX2RyaXZlcik7CisJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdHNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCisJbXB0X3Jlc2V0X2RlcmVnaXN0ZXIobXB0c2FzRG9uZUN0eCk7CisJbXB0X2V2ZW50X2RlcmVnaXN0ZXIobXB0c2FzRG9uZUN0eCk7CisKKwltcHRfZGVyZWdpc3RlcihtcHRzYXNJbnRlcm5hbEN0eCk7CisJbXB0X2RlcmVnaXN0ZXIobXB0c2FzVGFza0N0eCk7CisJbXB0X2RlcmVnaXN0ZXIobXB0c2FzRG9uZUN0eCk7Cit9CisKK21vZHVsZV9pbml0KG1wdHNhc19pbml0KTsKK21vZHVsZV9leGl0KG1wdHNhc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwppbmRleCA0YTAwM2RjLi41Y2IwN2ViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKICNpbmNsdWRlICJtcHRiYXNlLmgiCiAjaW5jbHVkZSAibXB0c2NzaWguaCIKQEAgLTkzLDggKzk0LDkgQEAKIAogI2RlZmluZSBNUFRfSUNGTEFHX0JVRl9DQVAJMHgwMQkvKiBSZWFkQnVmZmVyIFJlYWQgQ2FwYWNpdHkgZm9ybWF0ICovCiAjZGVmaW5lIE1QVF9JQ0ZMQUdfRUNITwkJMHgwMgkvKiBSZWFkQnVmZmVyIEVjaG8gYnVmZmVyIGZvcm1hdCAqLwotI2RlZmluZSBNUFRfSUNGTEFHX1BIWVNfRElTSwkweDA0CS8qIEFueSBTQ1NJIElPIGJ1dCBkbyBQaHlzIERpc2sgRm9ybWF0ICovCi0jZGVmaW5lIE1QVF9JQ0ZMQUdfVEFHR0VEX0NNRAkweDA4CS8qIERvIHRhZ2dlZCBJTyAqLworI2RlZmluZSBNUFRfSUNGTEFHX0VCT1MJCTB4MDQJLyogUmVhZEJ1ZmZlciBFY2hvIGJ1ZmZlciBoYXMgRUJPUyAqLworI2RlZmluZSBNUFRfSUNGTEFHX1BIWVNfRElTSwkweDA4CS8qIEFueSBTQ1NJIElPIGJ1dCBkbyBQaHlzIERpc2sgRm9ybWF0ICovCisjZGVmaW5lIE1QVF9JQ0ZMQUdfVEFHR0VEX0NNRAkweDEwCS8qIERvIHRhZ2dlZCBJTyAqLwogI2RlZmluZSBNUFRfSUNGTEFHX0RJRF9SRVNFVAkweDIwCS8qIEJ1cyBSZXNldCBvY2N1cnJlZCB3aXRoIHRoaXMgY29tbWFuZCAqLwogI2RlZmluZSBNUFRfSUNGTEFHX1JFU0VSVkVECTB4NDAJLyogUmVzZXJ2ZWQgaGFzIGJlZW4gaXNzdWVkICovCiAKQEAgLTE1OSw2ICsxNjEsOCBAQAogc3RhdGljIGludAltcHRzY3NpaF9kb19jbWQoTVBUX1NDU0lfSE9TVCAqaGQsIElOVEVSTkFMX0NNRCAqaW9jbWQpOwogc3RhdGljIGludAltcHRzY3NpaF9zeW5jaHJvbml6ZV9jYWNoZShNUFRfU0NTSV9IT1NUICpoZCwgaW50IHBvcnRudW0pOwogCitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0ICAgbXB0c2NzaWhfcGVyc2lzdFRhc2s7CisKICNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KIHN0YXRpYyBpbnQJbXB0c2NzaWhfZG9fcmFpZChNUFRfU0NTSV9IT1NUICpoZCwgdTggYWN0aW9uLCBJTlRFUk5BTF9DTUQgKmlvKTsKIHN0YXRpYyB2b2lkCW1wdHNjc2loX2RvbWFpblZhbGlkYXRpb24odm9pZCAqaGQpOwpAQCAtMTY3LDYgKzE3MSw3IEBACiBzdGF0aWMgaW50CW1wdHNjc2loX2RvRHYoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBjaGFubmVsLCBpbnQgdGFyZ2V0KTsKIHN0YXRpYyB2b2lkCW1wdHNjc2loX2R2X3Bhcm1zKE1QVF9TQ1NJX0hPU1QgKmhkLCBEVlBBUkFNRVRFUlMgKmR2LHZvaWQgKnBQYWdlKTsKIHN0YXRpYyB2b2lkCW1wdHNjc2loX2ZpbGxidWYoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgaW50IGluZGV4LCBpbnQgd2lkdGgpOworc3RhdGljIHZvaWQJbXB0c2NzaWhfc2V0X2R2ZmxhZ3NfcmFpZChNUFRfU0NTSV9IT1NUICpoZCwgaW50IGlkKTsKICNlbmRpZgogCiB2b2lkIAkJbXB0c2NzaWhfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICopOwpAQCAtNjA2LDExICs2MTEsMjQgQEAKIAkJeGZlcl9jbnQgPSBsZTMyX3RvX2NwdShwU2NzaVJlcGx5LT5UcmFuc2ZlckNvdW50KTsKIAkJc2MtPnJlc2lkID0gc2MtPnJlcXVlc3RfYnVmZmxlbiAtIHhmZXJfY250OwogCisJCS8qCisJCSAqICBpZiB3ZSBnZXQgYSBkYXRhIHVuZGVycnVuIGluZGljYXRpb24sIHlldCBubyBkYXRhIHdhcworCQkgKiAgdHJhbnNmZXJyZWQgYW5kIHRoZSBTQ1NJIHN0YXR1cyBpbmRpY2F0ZXMgdGhhdCB0aGUKKwkJICogIGNvbW1hbmQgd2FzIG5ldmVyIHN0YXJ0ZWQsIGNoYW5nZSB0aGUgZGF0YSB1bmRlcnJ1bgorCQkgKiAgdG8gc3VjY2VzcworCQkgKi8KKwkJaWYgKHN0YXR1cyA9PSBNUElfSU9DU1RBVFVTX1NDU0lfREFUQV9VTkRFUlJVTiAmJiB4ZmVyX2NudCA9PSAwICYmCisJCSAgICAoc2NzaV9zdGF0dXMgPT0gTVBJX1NDU0lfU1RBVFVTX0JVU1kgfHwKKwkJICAgICBzY3NpX3N0YXR1cyA9PSBNUElfU0NTSV9TVEFUVVNfUkVTRVJWQVRJT05fQ09ORkxJQ1QgfHwKKwkJICAgICBzY3NpX3N0YXR1cyA9PSBNUElfU0NTSV9TVEFUVVNfVEFTS19TRVRfRlVMTCkpIHsKKwkJCXN0YXR1cyA9IE1QSV9JT0NTVEFUVVNfU1VDQ0VTUzsKKwkJfQorCiAJCWRyZXBseXByaW50aygoS0VSTl9OT1RJQ0UgIlJlcGx5IGhhPSVkIGlkPSVkIGx1bj0lZDpcbiIKIAkJCSJJT0NTdGF0dXM9JTA0eGggU0NTSVN0YXRlPSUwMnhoIFNDU0lTdGF0dXM9JTAyeGhcbiIKIAkJCSJyZXNpZD0lZCBidWZmbGVuPSVkIHhmZXJfY250PSVkXG4iLAogCQkJaW9jLT5pZCwgcFNjc2lSZXEtPlRhcmdldElELCBwU2NzaVJlcS0+TFVOWzFdLAotCQkJc3RhdHVzLCBzY3NpX3N0YXRlLCBzY3NpX3N0YXR1cywgc2MtPnJlc2lkLCAKKwkJCXN0YXR1cywgc2NzaV9zdGF0ZSwgc2NzaV9zdGF0dXMsIHNjLT5yZXNpZCwKIAkJCXNjLT5yZXF1ZXN0X2J1ZmZsZW4sIHhmZXJfY250KSk7CiAKIAkJaWYgKHNjc2lfc3RhdGUgJiBNUElfU0NTSV9TVEFURV9BVVRPU0VOU0VfVkFMSUQpCkBAIC02MTksOCArNjM3LDExIEBACiAJCS8qCiAJCSAqICBMb29rIGZvciArIGR1bXAgRkNQIFJlc3BvbnNlSW5mb1tdIQogCQkgKi8KLQkJaWYgKHNjc2lfc3RhdGUgJiBNUElfU0NTSV9TVEFURV9SRVNQT05TRV9JTkZPX1ZBTElEKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgRkNQX1Jlc3BvbnNlSW5mbz0lMDh4aFxuIiwKKwkJaWYgKHNjc2lfc3RhdGUgJiBNUElfU0NTSV9TVEFURV9SRVNQT05TRV9JTkZPX1ZBTElEICYmCisJCSAgICBwU2NzaVJlcGx5LT5SZXNwb25zZUluZm8pIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiaGE9JWQgaWQ9JWQgbHVuPSVkOiAiCisJCQkiRkNQX1Jlc3BvbnNlSW5mbz0lMDh4aFxuIiwKKwkJCWlvYy0+aWQsIHBTY3NpUmVxLT5UYXJnZXRJRCwgcFNjc2lSZXEtPkxVTlsxXSwKIAkJCWxlMzJfdG9fY3B1KHBTY3NpUmVwbHktPlJlc3BvbnNlSW5mbykpOwogCQl9CiAKQEAgLTY2MSwyMyArNjgyLDEzIEBACiAJCQlicmVhazsKIAogCQljYXNlIE1QSV9JT0NTVEFUVVNfU0NTSV9SRVNJRFVBTF9NSVNNQVRDSDoJLyogMHgwMDQ5ICovCi0JCQlpZiAoIHhmZXJfY250ID49IHNjLT51bmRlcmZsb3cgKSB7Ci0JCQkJLyogU3VmZmljaWVudCBkYXRhIHRyYW5zZmVyIG9jY3VycmVkICovCisJCQlzYy0+cmVzaWQgPSBzYy0+cmVxdWVzdF9idWZmbGVuIC0geGZlcl9jbnQ7CisJCQlpZigoeGZlcl9jbnQ9PTApfHwoc2MtPnVuZGVyZmxvdyA+IHhmZXJfY250KSkKKwkJCQlzYy0+cmVzdWx0PURJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQkJZWxzZSAvKiBTdWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgb2NjdXJyZWQgKi8KIAkJCQlzYy0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCBzY3NpX3N0YXR1czsKLQkJCX0gZWxzZSBpZiAoIHhmZXJfY250ID09IDAgKSB7Ci0JCQkJLyogQSBDUkMgRXJyb3IgY2F1c2VzIHRoaXMgY29uZGl0aW9uOyByZXRyeSAqLwotCQkJCXNjLT5yZXN1bHQgPSAoRFJJVkVSX1NFTlNFIDw8IDI0KSB8IChESURfT0sgPDwgMTYpIHwKLQkJCQkJKENIRUNLX0NPTkRJVElPTiA8PCAxKTsKLQkJCQlzYy0+c2Vuc2VfYnVmZmVyWzBdID0gMHg3MDsKLQkJCQlzYy0+c2Vuc2VfYnVmZmVyWzJdID0gTk9fU0VOU0U7Ci0JCQkJc2MtPnNlbnNlX2J1ZmZlclsxMl0gPSAwOwotCQkJCXNjLT5zZW5zZV9idWZmZXJbMTNdID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJc2MtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OwotCQkJfQotCQkJZHJlcGx5cHJpbnRrKChLRVJOX05PVElDRQotCQkJICAgICJSRVNJRFVBTF9NSVNNQVRDSDogcmVzdWx0PSV4IG9uIGlkPSVkXG4iLAotCQkJICAgIHNjLT5yZXN1bHQsIHNjLT5kZXZpY2UtPmlkKSk7CisJCQlkcmVwbHlwcmludGsoKEtFUk5fTk9USUNFIAorCQkJICAgICJSRVNJRFVBTF9NSVNNQVRDSDogcmVzdWx0PSV4IG9uIGlkPSVkXG4iLCBzYy0+cmVzdWx0LCBzYy0+ZGV2aWNlLT5pZCkpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBNUElfSU9DU1RBVFVTX1NDU0lfREFUQV9VTkRFUlJVTjoJCS8qIDB4MDA0NSAqLwpAQCAtNjkyLDcgKzcwMywxMCBAQAogCQkJCTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHhmZXJfY250IDwgc2MtPnVuZGVyZmxvdykgewotCQkJCQlzYy0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCQkJCWlmIChzY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9CVVNZKQorCQkJCQkJc2MtPnJlc3VsdCA9IFNBTV9TVEFUX0JVU1k7CisJCQkJCWVsc2UKKwkJCQkJCXNjLT5yZXN1bHQgPSBESURfU09GVF9FUlJPUiA8PCAxNjsKIAkJCQl9CiAJCQkJaWYgKHNjc2lfc3RhdGUgJiAoTVBJX1NDU0lfU1RBVEVfQVVUT1NFTlNFX0ZBSUxFRCB8IE1QSV9TQ1NJX1NUQVRFX05PX1NDU0lfU1RBVFVTKSkgewogCQkJCQkvKiBXaGF0IHRvIGRvPwpAQCAtNzE3LDggKzczMSwxMCBAQAogCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19TQ1NJX1JFQ09WRVJFRF9FUlJPUjoJLyogMHgwMDQwICovCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19TVUNDRVNTOgkJCS8qIDB4MDAwMCAqLwotCQkJc2NzaV9zdGF0dXMgPSBwU2NzaVJlcGx5LT5TQ1NJU3RhdHVzOwotCQkJc2MtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgc2NzaV9zdGF0dXM7CisJCQlpZiAoc2NzaV9zdGF0dXMgPT0gTVBJX1NDU0lfU1RBVFVTX0JVU1kpCisJCQkJc2MtPnJlc3VsdCA9IChESURfQlVTX0JVU1kgPDwgMTYpIHwgc2NzaV9zdGF0dXM7CisJCQllbHNlCisJCQkJc2MtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgc2NzaV9zdGF0dXM7CiAJCQlpZiAoc2NzaV9zdGF0ZSA9PSAwKSB7CiAJCQkJOwogCQkJfSBlbHNlIGlmIChzY3NpX3N0YXRlICYgTVBJX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEKSB7CkBAIC04OTAsMTIgKzkwNiwxMyBAQAogCVNDU0lJT1JlcXVlc3RfdAkqbWYgPSBOVUxMOwogCWludAkJIGlpOwogCWludAkJIG1heCA9IGhkLT5pb2MtPnJlcV9kZXB0aDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzYzsKIAogCWRzcHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogc2VhcmNoX3J1bm5pbmcgdGFyZ2V0ICVkIGx1biAlZCBtYXggJWRcbiIsCiAJCQl0YXJnZXQsIGx1biwgbWF4KSk7CiAKIAlmb3IgKGlpPTA7IGlpIDwgbWF4OyBpaSsrKSB7Ci0JCWlmIChoZC0+U2NzaUxvb2t1cFtpaV0gIT0gTlVMTCkgeworCQlpZiAoKHNjID0gaGQtPlNjc2lMb29rdXBbaWldKSAhPSBOVUxMKSB7CiAKIAkJCW1mID0gKFNDU0lJT1JlcXVlc3RfdCAqKU1QVF9JTkRFWF8yX01GUFRSKGhkLT5pb2MsIGlpKTsKIApAQCAtOTEwLDkgKzkyNywyMiBAQAogCQkJaGQtPlNjc2lMb29rdXBbaWldID0gTlVMTDsKIAkJCW1wdHNjc2loX2ZyZWVDaGFpbkJ1ZmZlcnMoaGQtPmlvYywgaWkpOwogCQkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGhkLT5pb2MsIChNUFRfRlJBTUVfSERSICopbWYpOworCQkJaWYgKHNjLT51c2Vfc2cpIHsKKwkJCQlwY2lfdW5tYXBfc2coaGQtPmlvYy0+cGNpZGV2LAorCQkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgc2MtPnJlcXVlc3RfYnVmZmVyLAorCQkJCQlzYy0+dXNlX3NnLAorCQkJCQlzYy0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQkJfSBlbHNlIGlmIChzYy0+cmVxdWVzdF9idWZmbGVuKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShoZC0+aW9jLT5wY2lkZXYsCisJCQkJCXNjLT5TQ3AuZG1hX2hhbmRsZSwKKwkJCQkJc2MtPnJlcXVlc3RfYnVmZmxlbiwKKwkJCQkJc2MtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKwkJCX0KKwkJCXNjLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKwkJCXNjLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJCXNjLT5zY3NpX2RvbmUoc2MpOwogCQl9CiAJfQotCiAJcmV0dXJuOwogfQogCkBAIC05NjcsOCArOTk3LDEwIEBACiAJdW5zaWduZWQgbG9uZwkgCWZsYWdzOwogCWludCBzejE7CiAKLQlpZighaG9zdCkKKwlpZighaG9zdCkgeworCQltcHRfZGV0YWNoKHBkZXYpOwogCQlyZXR1cm47CisJfQogCiAJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKIApAQCAtMTI1Niw4ICsxMjg4LDcgQEAKIAlNUFRfU0NTSV9IT1NUCQkqaGQ7CiAJTVBUX0ZSQU1FX0hEUgkJKm1mOwogCVNDU0lJT1JlcXVlc3RfdAkJKnBTY3NpUmVxOwotCVZpcnREZXZpY2UJCSpwVGFyZ2V0OwotCWludAkgdGFyZ2V0OworCVZpcnREZXZpY2UJCSpwVGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAJaW50CSBsdW47CiAJdTMyCSBkYXRhbGVuOwogCXUzMgkgc2NzaWN0bDsKQEAgLTEyNjcsMTIgKzEyOTgsOSBAQAogCWludAkgaWk7CiAKIAloZCA9IChNUFRfU0NTSV9IT1NUICopIFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCXRhcmdldCA9IFNDcG50LT5kZXZpY2UtPmlkOwogCWx1biA9IFNDcG50LT5kZXZpY2UtPmx1bjsKIAlTQ3BudC0+c2NzaV9kb25lID0gZG9uZTsKIAotCXBUYXJnZXQgPSBoZC0+VGFyZ2V0c1t0YXJnZXRdOwotCiAJZG1mcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJxY21kOiBTQ3BudD0lcCwgZG9uZSgpPSVwXG4iLAogCQkJKGhkICYmIGhkLT5pb2MpID8gaGQtPmlvYy0+bmFtZSA6ICJpb2M/IiwgU0NwbnQsIGRvbmUpKTsKIApAQCAtMTMxNSw3ICsxMzQzLDcgQEAKIAkvKiBEZWZhdWx0IHRvIHVudGFnZ2VkLiBPbmNlIGEgdGFyZ2V0IHN0cnVjdHVyZSBoYXMgYmVlbiBhbGxvY2F0ZWQsCiAJICogdXNlIHRoZSBJbnF1aXJ5IGRhdGEgdG8gZGV0ZXJtaW5lIGlmIGRldmljZSBzdXBwb3J0cyB0YWdnZWQuCiAJICovCi0JaWYgKCAgIHBUYXJnZXQKKwlpZiAocFRhcmdldAogCSAgICAmJiAocFRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19RX1lFUykKIAkgICAgJiYgKFNDcG50LT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpKSB7CiAJCXNjc2ljdGwgPSBzY3NpZGlyIHwgTVBJX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CkBAIC0xMzI1LDggKzEzNTMsOCBAQAogCiAJLyogVXNlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiB0byBzZXQgdXAgdGhlIG1lc3NhZ2UgZnJhbWUKIAkgKi8KLQlwU2NzaVJlcS0+VGFyZ2V0SUQgPSAodTgpIHRhcmdldDsKLQlwU2NzaVJlcS0+QnVzID0gKHU4KSBTQ3BudC0+ZGV2aWNlLT5jaGFubmVsOworCXBTY3NpUmVxLT5UYXJnZXRJRCA9ICh1OCkgcFRhcmdldC0+dGFyZ2V0X2lkOworCXBTY3NpUmVxLT5CdXMgPSBwVGFyZ2V0LT5idXNfaWQ7CiAJcFNjc2lSZXEtPkNoYWluT2Zmc2V0ID0gMDsKIAlwU2NzaVJlcS0+RnVuY3Rpb24gPSBNUElfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUOwogCXBTY3NpUmVxLT5DREJMZW5ndGggPSBTQ3BudC0+Y21kX2xlbjsKQEAgLTEzNzgsNyArMTQwNiw3IEBACiAKICNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KIAlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpbnQgZHZTdGF0dXMgPSBoZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1t0YXJnZXRdOworCQlpbnQgZHZTdGF0dXMgPSBoZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1twVGFyZ2V0LT50YXJnZXRfaWRdOwogCQlpbnQgaXNzdWVDbWQgPSAxOwogCiAJCWlmIChkdlN0YXR1cyB8fCBoZC0+aW9jLT5zcGlfZGF0YS5mb3JjZUR2KSB7CkBAIC0xNDI2LDYgKzE0NTQsNyBAQAogCXJldHVybiAwOwogCiAgZmFpbDoKKwloZC0+U2NzaUxvb2t1cFtteV9pZHhdID0gTlVMTDsKIAltcHRzY3NpaF9mcmVlQ2hhaW5CdWZmZXJzKGhkLT5pb2MsIG15X2lkeCk7CiAJbXB0X2ZyZWVfbXNnX2ZyYW1lKGhkLT5pb2MsIG1mKTsKIAlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKQEAgLTE3MTMsMjQgKzE3NDIsMjMgQEAKIAlNUFRfRlJBTUVfSERSCSptZjsKIAl1MzIJCSBjdHgyYWJvcnQ7CiAJaW50CQkgc2NwbnRfaWR4OworCWludAkJIHJldHZhbDsKIAogCS8qIElmIHdlIGNhbid0IGxvY2F0ZSBvdXIgaG9zdCBhZGFwdGVyIHN0cnVjdHVyZSwgcmV0dXJuIEZBSUxFRCBzdGF0dXMuCiAJICovCiAJaWYgKChoZCA9IChNUFRfU0NTSV9IT1NUICopIFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhKSA9PSBOVUxMKSB7CiAJCVNDcG50LT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CiAJCVNDcG50LT5zY3NpX2RvbmUoU0NwbnQpOwotCQlkZmFpbHByaW50aygoS0VSTl9XQVJOSU5HIE1ZTkFNICI6IG1wdHNjc2loX2Fib3J0OiAiCisJCWRmYWlscHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogbXB0c2NzaWhfYWJvcnQ6ICIKIAkJCSAgICJDYW4ndCBsb2NhdGUgaG9zdCEgKHNjPSVwKVxuIiwKIAkJCSAgIFNDcG50KSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCiAJaW9jID0gaGQtPmlvYzsKLQlpZiAoaGQtPnJlc2V0UGVuZGluZykKKwlpZiAoaGQtPnJlc2V0UGVuZGluZykgewogCQlyZXR1cm4gRkFJTEVEOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogPj4gQXR0ZW1wdGluZyB0YXNrIGFib3J0ISAoc2M9JXApXG4iLAotCSAgICAgICBoZC0+aW9jLT5uYW1lLCBTQ3BudCk7CisJfQogCiAJaWYgKGhkLT50aW1lb3V0cyA8IC0xKQogCQloZC0+dGltZW91dHMrKzsKQEAgLTE3MzgsMTYgKzE3NjYsMjAgQEAKIAkvKiBGaW5kIHRoaXMgY29tbWFuZAogCSAqLwogCWlmICgoc2NwbnRfaWR4ID0gU0NQTlRfVE9fTE9PS1VQX0lEWChTQ3BudCkpIDwgMCkgewotCQkvKiBDbWQgbm90IGZvdW5kIGluIFNjc2lMb29rdXAuIAorCQkvKiBDbWQgbm90IGZvdW5kIGluIFNjc2lMb29rdXAuCiAJCSAqIERvIE9TIGNhbGxiYWNrLgogCQkgKi8KIAkJU0NwbnQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKLQkJZHRtcHJpbnRrKChLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IG1wdHNjc2loX2Fib3J0OiAiCisJCWR0bXByaW50aygoS0VSTl9JTkZPIE1ZTkFNICI6ICVzOiBtcHRzY3NpaF9hYm9ydDogIgogCQkJICAgIkNvbW1hbmQgbm90IGluIHRoZSBhY3RpdmUgbGlzdCEgKHNjPSVwKVxuIiwKIAkJCSAgIGhkLT5pb2MtPm5hbWUsIFNDcG50KSk7CiAJCXJldHVybiBTVUNDRVNTOwogCX0KIAorCXByaW50ayhLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IGF0dGVtcHRpbmcgdGFzayBhYm9ydCEgKHNjPSVwKVxuIiwKKwkgICAgICAgaGQtPmlvYy0+bmFtZSwgU0NwbnQpOworCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CisKIAkvKiBNb3N0IGltcG9ydGFudCEgIFNldCBUYXNrTXNnQ29udGV4dCB0byBTQ3BudCdzIE1zZ0NvbnRleHQhCiAJICogKHRoZSBJTyB0byBiZSBBQk9SVCdkKQogCSAqCkBAIC0xNzYwLDM4ICsxNzkyLDIyIEBACiAKIAloZC0+YWJvcnRTQ3BudCA9IFNDcG50OwogCi0JaWYgKG1wdHNjc2loX1RNSGFuZGxlcihoZCwgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLAorCXJldHZhbCA9IG1wdHNjc2loX1RNSGFuZGxlcihoZCwgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLAogCQlTQ3BudC0+ZGV2aWNlLT5jaGFubmVsLCBTQ3BudC0+ZGV2aWNlLT5pZCwgU0NwbnQtPmRldmljZS0+bHVuLAotCQljdHgyYWJvcnQsIDIgLyogMiBzZWNvbmQgdGltZW91dCAqLykKLQkJPCAwKSB7CisJCWN0eDJhYm9ydCwgMiAvKiAyIHNlY29uZCB0aW1lb3V0ICovKTsKIAotCQkvKiBUaGUgVE0gcmVxdWVzdCBmYWlsZWQgYW5kIHRoZSBzdWJzZXF1ZW50IEZXLXJlbG9hZCBmYWlsZWQhCi0JCSAqIEZhdGFsIGVycm9yIGNhc2UuCi0JCSAqLwotCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiRXJyb3IgaXNzdWluZyBhYm9ydCB0YXNrISAoc2M9JXApXG4iLAotCQkgICAgICAgaGQtPmlvYy0+bmFtZSwgU0NwbnQpOworCXByaW50ayAoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiB0YXNrIGFib3J0OiAlcyAoc2M9JXApXG4iLAorCQloZC0+aW9jLT5uYW1lLAorCQkoKHJldHZhbCA9PSAwKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiICksIFNDcG50KTsKIAotCQkvKiBXZSBtdXN0IGNsZWFyIG91ciBwZW5kaW5nIGZsYWcgYmVmb3JlIGNsZWFyaW5nIG91ciBzdGF0ZS4KLQkJICovCisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gU1VDQ0VTUzsKKworCWlmKHJldHZhbCAhPSBGQUlMRUQgKSB7CiAJCWhkLT50bVBlbmRpbmcgPSAwOwogCQloZC0+dG1TdGF0ZSA9IFRNX1NUQVRFX05PTkU7Ci0KLQkJLyogVW5tYXAgdGhlIERNQSBidWZmZXJzLCBpZiBhbnkuICovCi0JCWlmIChTQ3BudC0+dXNlX3NnKSB7Ci0JCQlwY2lfdW5tYXBfc2coaW9jLT5wY2lkZXYsIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgU0NwbnQtPnJlcXVlc3RfYnVmZmVyLAotCQkJCSAgICBTQ3BudC0+dXNlX3NnLCBTQ3BudC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQl9IGVsc2UgaWYgKFNDcG50LT5yZXF1ZXN0X2J1ZmZsZW4pIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoaW9jLT5wY2lkZXYsIFNDcG50LT5TQ3AuZG1hX2hhbmRsZSwKLQkJCQlTQ3BudC0+cmVxdWVzdF9idWZmbGVuLCBTQ3BudC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQl9Ci0JCWhkLT5TY3NpTG9va3VwW3NjcG50X2lkeF0gPSBOVUxMOwotCQlTQ3BudC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwotCQlTQ3BudC0+c2NzaV9kb25lKFNDcG50KTsJCS8qIElzc3VlIHRoZSBjb21tYW5kIGNhbGxiYWNrICovCi0JCW1wdHNjc2loX2ZyZWVDaGFpbkJ1ZmZlcnMoaW9jLCBzY3BudF9pZHgpOwotCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7Ci0JCXJldHVybiBGQUlMRUQ7CiAJfQotCXJldHVybiBTVUNDRVNTOworCXJldHVybiBGQUlMRUQ7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KQEAgLTE4MDcsMTEgKzE4MjMsMTIgQEAKIG1wdHNjc2loX2Rldl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQpCiB7CiAJTVBUX1NDU0lfSE9TVAkqaGQ7CisJaW50CQkgcmV0dmFsOwogCiAJLyogSWYgd2UgY2FuJ3QgbG9jYXRlIG91ciBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLCByZXR1cm4gRkFJTEVEIHN0YXR1cy4KIAkgKi8KIAlpZiAoKGhkID0gKE1QVF9TQ1NJX0hPU1QgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpID09IE5VTEwpewotCQlkdG1wcmludGsoKEtFUk5fV0FSTklORyBNWU5BTSAiOiBtcHRzY3NpaF9kZXZfcmVzZXQ6ICIKKwkJZHRtcHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogbXB0c2NzaWhfZGV2X3Jlc2V0OiAiCiAJCQkgICAiQ2FuJ3QgbG9jYXRlIGhvc3QhIChzYz0lcClcbiIsCiAJCQkgICBTQ3BudCkpOwogCQlyZXR1cm4gRkFJTEVEOwpAQCAtMTgyMCwyNCArMTgzNywyNiBAQAogCWlmIChoZC0+cmVzZXRQZW5kaW5nKQogCQlyZXR1cm4gRkFJTEVEOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogPj4gQXR0ZW1wdGluZyB0YXJnZXQgcmVzZXQhIChzYz0lcClcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogYXR0ZW1wdGluZyB0YXJnZXQgcmVzZXQhIChzYz0lcClcbiIsCiAJICAgICAgIGhkLT5pb2MtPm5hbWUsIFNDcG50KTsKKwlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwogCi0JaWYgKG1wdHNjc2loX1RNSGFuZGxlcihoZCwgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQsCisJcmV0dmFsID0gbXB0c2NzaWhfVE1IYW5kbGVyKGhkLCBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVCwKIAkJU0NwbnQtPmRldmljZS0+Y2hhbm5lbCwgU0NwbnQtPmRldmljZS0+aWQsCi0JCTAsIDAsIDUgLyogNSBzZWNvbmQgdGltZW91dCAqLykKLQkJPCAwKXsKLQkJLyogVGhlIFRNIHJlcXVlc3QgZmFpbGVkIGFuZCB0aGUgc3Vic2VxdWVudCBGVy1yZWxvYWQgZmFpbGVkIQotCQkgKiBGYXRhbCBlcnJvciBjYXNlLgotCQkgKi8KLQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIkVycm9yIHByb2Nlc3NpbmcgVGFza01nbXQgcmVxdWVzdCAoc2M9JXApXG4iLAotCQkgCQloZC0+aW9jLT5uYW1lLCBTQ3BudCk7CisJCTAsIDAsIDUgLyogNSBzZWNvbmQgdGltZW91dCAqLyk7CisKKwlwcmludGsgKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogdGFyZ2V0IHJlc2V0OiAlcyAoc2M9JXApXG4iLAorCQloZC0+aW9jLT5uYW1lLAorCQkoKHJldHZhbCA9PSAwKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiICksIFNDcG50KTsKKworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIFNVQ0NFU1M7CisKKwlpZihyZXR2YWwgIT0gRkFJTEVEICkgewogCQloZC0+dG1QZW5kaW5nID0gMDsKIAkJaGQtPnRtU3RhdGUgPSBUTV9TVEFURV9OT05FOwotCQlyZXR1cm4gRkFJTEVEOwogCX0KLQotCXJldHVybiBTVUNDRVNTOworCXJldHVybiBGQUlMRUQ7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KQEAgLTE4NTMsNDEgKzE4NzIsMzkgQEAKIG1wdHNjc2loX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQpCiB7CiAJTVBUX1NDU0lfSE9TVAkqaGQ7Ci0Jc3BpbmxvY2tfdAkqaG9zdF9sb2NrID0gU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrOworCWludAkJIHJldHZhbDsKIAogCS8qIElmIHdlIGNhbid0IGxvY2F0ZSBvdXIgaG9zdCBhZGFwdGVyIHN0cnVjdHVyZSwgcmV0dXJuIEZBSUxFRCBzdGF0dXMuCiAJICovCiAJaWYgKChoZCA9IChNUFRfU0NTSV9IT1NUICopIFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhKSA9PSBOVUxMKXsKLQkJZHRtcHJpbnRrKChLRVJOX1dBUk5JTkcgTVlOQU0gIjogbXB0c2NzaWhfYnVzX3Jlc2V0OiAiCisJCWR0bXByaW50aygoS0VSTl9JTkZPIE1ZTkFNICI6IG1wdHNjc2loX2J1c19yZXNldDogIgogCQkJICAgIkNhbid0IGxvY2F0ZSBob3N0ISAoc2M9JXApXG4iLAogCQkJICAgU0NwbnQgKSApOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAotCXByaW50ayhLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6ID4+IEF0dGVtcHRpbmcgYnVzIHJlc2V0ISAoc2M9JXApXG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IGF0dGVtcHRpbmcgYnVzIHJlc2V0ISAoc2M9JXApXG4iLAogCSAgICAgICBoZC0+aW9jLT5uYW1lLCBTQ3BudCk7CisJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIAogCWlmIChoZC0+dGltZW91dHMgPCAtMSkKIAkJaGQtPnRpbWVvdXRzKys7CiAKLQkvKiBXZSBhcmUgbm93IHJlYWR5IHRvIGV4ZWN1dGUgdGhlIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0LiAqLwotCWlmIChtcHRzY3NpaF9UTUhhbmRsZXIoaGQsIE1QSV9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUkVTRVRfQlVTLAotCQlTQ3BudC0+ZGV2aWNlLT5jaGFubmVsLCAwLCAwLCAwLCA1IC8qIDUgc2Vjb25kIHRpbWVvdXQgKi8pCi0JICAgIDwgMCl7CisJcmV0dmFsID0gbXB0c2NzaWhfVE1IYW5kbGVyKGhkLCBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1JFU0VUX0JVUywKKwkJU0NwbnQtPmRldmljZS0+Y2hhbm5lbCwgMCwgMCwgMCwgNSAvKiA1IHNlY29uZCB0aW1lb3V0ICovKTsKIAotCQkvKiBUaGUgVE0gcmVxdWVzdCBmYWlsZWQgYW5kIHRoZSBzdWJzZXF1ZW50IEZXLXJlbG9hZCBmYWlsZWQhCi0JCSAqIEZhdGFsIGVycm9yIGNhc2UuCi0JCSAqLwotCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAotCQkgICAgICAgIkVycm9yIHByb2Nlc3NpbmcgVGFza01nbXQgcmVxdWVzdCAoc2M9JXApXG4iLAotCQkgICAgICAgaGQtPmlvYy0+bmFtZSwgU0NwbnQpOworCXByaW50ayAoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiBidXMgcmVzZXQ6ICVzIChzYz0lcClcbiIsCisJCWhkLT5pb2MtPm5hbWUsCisJCSgocmV0dmFsID09IDApID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIgKSwgU0NwbnQpOworCisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gU1VDQ0VTUzsKKworCWlmKHJldHZhbCAhPSBGQUlMRUQgKSB7CiAJCWhkLT50bVBlbmRpbmcgPSAwOwogCQloZC0+dG1TdGF0ZSA9IFRNX1NUQVRFX05PTkU7Ci0JCXNwaW5fbG9ja19pcnEoaG9zdF9sb2NrKTsKLQkJcmV0dXJuIEZBSUxFRDsKIAl9Ci0KLQlyZXR1cm4gU1VDQ0VTUzsKKwlyZXR1cm4gRkFJTEVEOwogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCkBAIC0yMTY5LDcgKzIxODYsNyBAQAogCXZkZXYtPnJhaWRWb2x1bWUgPSAwOwogCWhkLT5UYXJnZXRzW2RldmljZS0+aWRdID0gdmRldjsKIAlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpZiAoaGQtPmlvYy0+c3BpX2RhdGEuaXNSYWlkICYgKDEgPDwgZGV2aWNlLT5pZCkpIHsKKwkJaWYgKGhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgJiAoMSA8PCBkZXZpY2UtPmlkKSkgewogCQkJdmRldi0+cmFpZFZvbHVtZSA9IDE7CiAJCQlkZHZ0cHJpbnRrKChLRVJOX0lORk8KIAkJCSAgICAiUkFJRCBWb2x1bWUgQCBpZCAlZFxuIiwgZGV2aWNlLT5pZCkpOwpAQCAtMjE4MCwyMiArMjE5Nyw3IEBACiAKICBvdXQ6CiAJdmRldi0+bnVtX2x1bnMrKzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCAKLW1wdHNjc2loX2lzX3JhaWRfdm9sdW1lKE1QVF9TQ1NJX0hPU1QgKmhkLCB1aW50IGlkKQotewotCWludCBpOwotCi0JaWYgKCFoZC0+aW9jLT5zcGlfZGF0YS5pc1JhaWQgfHwgIWhkLT5pb2MtPnNwaV9kYXRhLnBJb2NQZzMpCi0JCXJldHVybiAwOwotCi0JZm9yIChpID0gMDsgaSA8IGhkLT5pb2MtPnNwaV9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsgaSsrKSB7Ci0JCWlmIChpZCA9PSBoZC0+aW9jLT5zcGlfZGF0YS5wSW9jUGczLT5QaHlzRGlza1tpXS5QaHlzRGlza0lEKQotCQkJcmV0dXJuIDE7Ci0JfQotCisJZGV2aWNlLT5ob3N0ZGF0YSA9IHZkZXY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMjYsNyArMjIyOCw3IEBACiAJaGQtPlRhcmdldHNbdGFyZ2V0XSA9IE5VTEw7CiAKIAlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpZiAobXB0c2NzaWhfaXNfcmFpZF92b2x1bWUoaGQsIHRhcmdldCkpIHsKKwkJaWYgKG1wdHNjc2loX2lzX3BoeXNfZGlzayhoZC0+aW9jLCB0YXJnZXQpKSB7CiAJCQloZC0+aW9jLT5zcGlfZGF0YS5mb3JjZUR2IHw9IE1QVF9TQ1NJQ0ZHX1JFTE9BRF9JT0NfUEczOwogCQl9IGVsc2UgewogCQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbdGFyZ2V0XSA9CkBAIC0yNDM5LDYgKzI0NDEsNyBAQAogewogCU1QVF9TQ1NJX0hPU1QJKmhkOwogCXVuc2lnbmVkIGxvbmcJIGZsYWdzOworCWludCAJCWlpOwogCiAJZHRtcHJpbnRrKChLRVJOX1dBUk5JTkcgTVlOQU0KIAkJCSI6IElPQyAlc19yZXNldCByb3V0ZWQgdG8gU0NTSSBob3N0IGRyaXZlciFcbiIsCkBAIC0yNDk2LDExICsyNDk5LDggQEAKIAogCQkvKiBTY3NpTG9va3VwIGluaXRpYWxpemF0aW9uCiAJCSAqLwotCQl7Ci0JCQlpbnQgaWk7Ci0JCQlmb3IgKGlpPTA7IGlpIDwgaGQtPmlvYy0+cmVxX2RlcHRoOyBpaSsrKQotCQkJCWhkLT5TY3NpTG9va3VwW2lpXSA9IE5VTEw7Ci0JCX0KKwkJZm9yIChpaT0wOyBpaSA8IGhkLT5pb2MtPnJlcV9kZXB0aDsgaWkrKykKKwkJCWhkLT5TY3NpTG9va3VwW2lpXSA9IE5VTEw7CiAKIAkJLyogMi4gQ2hhaW4gQnVmZmVyIGluaXRpYWxpemF0aW9uCiAJCSAqLwpAQCAtMjU0OSw2ICsyNTQ5LDE2IEBACiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KKy8qIHdvcmsgcXVldWUgdGhyZWFkIHRvIGNsZWFyIHRoZSBwZXJzaXRlbmN5IHRhYmxlICovCitzdGF0aWMgdm9pZAorbXB0c2NzaWhfc2FzX3BlcnNpc3RfY2xlYXJfdGFibGUodm9pZCAqIGFyZykKK3sKKwlNUFRfQURBUFRFUiAqaW9jID0gKE1QVF9BREFQVEVSICopYXJnOworCisJbXB0YmFzZV9zYXNfcGVyc2lzdF9vcGVyYXRpb24oaW9jLCBNUElfU0FTX09QX0NMRUFSX05PVF9QUkVTRU5UKTsKK30KKworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogaW50CiBtcHRzY3NpaF9ldmVudF9wcm9jZXNzKE1QVF9BREFQVEVSICppb2MsIEV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqcEV2UmVwbHkpCiB7CkBAIC0yNTU4LDE4ICsyNTY4LDE4IEBACiAJZGV2dHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiTVBUIGV2ZW50ICg9JTAyWGgpIHJvdXRlZCB0byBTQ1NJIGhvc3QgZHJpdmVyIVxuIiwKIAkJCWlvYy0+bmFtZSwgZXZlbnQpKTsKIAorCWlmIChpb2MtPnNoID09IE5VTEwgfHwKKwkJKChoZCA9IChNUFRfU0NTSV9IT1NUICopaW9jLT5zaC0+aG9zdGRhdGEpID09IE5VTEwpKQorCQlyZXR1cm4gMTsKKwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE1QSV9FVkVOVF9VTklUX0FUVEVOVElPTjoJCQkvKiAwMyAqLwogCQkvKiBGSVhNRSEgKi8KIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfSU9DX0JVU19SRVNFVDoJCQkvKiAwNCAqLwogCWNhc2UgTVBJX0VWRU5UX0VYVF9CVVNfUkVTRVQ6CQkJLyogMDUgKi8KLQkJaGQgPSBOVUxMOwotCQlpZiAoaW9jLT5zaCkgewotCQkJaGQgPSAoTVBUX1NDU0lfSE9TVCAqKSBpb2MtPnNoLT5ob3N0ZGF0YTsKLQkJCWlmIChoZCAmJiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKSAmJiAoaGQtPnNvZnRfcmVzZXRzIDwgLTEpKQotCQkJCWhkLT5zb2Z0X3Jlc2V0cysrOwotCQl9CisJCWlmIChoZCAmJiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKSAmJiAoaGQtPnNvZnRfcmVzZXRzIDwgLTEpKQorCQkJaGQtPnNvZnRfcmVzZXRzKys7CiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX0xPR09VVDoJCQkJLyogMDkgKi8KIAkJLyogRklYTUUhICovCkBAIC0yNTg4LDY5ICsyNTk4LDI0IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNUElfRVZFTlRfSU5URUdSQVRFRF9SQUlEOgkJCS8qIDBCICovCisJeworCQlwTXBpRXZlbnREYXRhUmFpZF90IHBSYWlkRXZlbnREYXRhID0KKwkJICAgIChwTXBpRXZlbnREYXRhUmFpZF90KSBwRXZSZXBseS0+RGF0YTsKICNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KLQkJLyogbmVnb052cmFtIHNldCB0byAwIGlmIERWIGVuYWJsZWQgYW5kIHRvIFVTRV9OVlJBTSBpZgotCQkgKiBpZiBEViBkaXNhYmxlZC4gTmVlZCB0byBjaGVjayBmb3IgdGFyZ2V0IG1vZGUuCi0JCSAqLwotCQloZCA9IE5VTEw7Ci0JCWlmIChpb2MtPnNoKQotCQkJaGQgPSAoTVBUX1NDU0lfSE9TVCAqKSBpb2MtPnNoLT5ob3N0ZGF0YTsKLQotCQlpZiAoaGQgJiYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgJiYgKGhkLT5uZWdvTnZyYW0gPT0gMCkpIHsKLQkJCVNjc2lDZmdEYXRhCSpwU3BpOwotCQkJSW9jM1BoeXNEaXNrX3QJKnBQRGlzazsKLQkJCWludAkJIG51bVBEaXNrOwotCQkJdTgJCSByZWFzb247Ci0JCQl1OAkJIHBoeXNEaXNrTnVtOwotCi0JCQlyZWFzb24gPSAobGUzMl90b19jcHUocEV2UmVwbHktPkRhdGFbMF0pICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0JCQlpZiAocmVhc29uID09IE1QSV9FVkVOVF9SQUlEX1JDX0RPTUFJTl9WQUxfTkVFREVEKSB7Ci0JCQkJLyogTmV3IG9yIHJlcGxhY2VkIGRpc2suCi0JCQkJICogU2V0IERWIGZsYWcgYW5kIHNjaGVkdWxlIERWLgotCQkJCSAqLwotCQkJCXBTcGkgPSAmaW9jLT5zcGlfZGF0YTsKLQkJCQlwaHlzRGlza051bSA9IChsZTMyX3RvX2NwdShwRXZSZXBseS0+RGF0YVswXSkgJiAweEZGMDAwMDAwKSA+PiAyNDsKLQkJCQlkZHZ0cHJpbnRrKCgiRFYgcmVxdWVzdGVkIGZvciBwaHlzIGRpc2sgaWQgJWRcbiIsIHBoeXNEaXNrTnVtKSk7Ci0JCQkJaWYgKHBTcGktPnBJb2NQZzMpIHsKLQkJCQkJcFBEaXNrID0gIHBTcGktPnBJb2NQZzMtPlBoeXNEaXNrOwotCQkJCQludW1QRGlzayA9cFNwaS0+cElvY1BnMy0+TnVtUGh5c0Rpc2tzOwotCi0JCQkJCXdoaWxlIChudW1QRGlzaykgewotCQkJCQkJaWYgKHBoeXNEaXNrTnVtID09IHBQRGlzay0+UGh5c0Rpc2tOdW0pIHsKLQkJCQkJCQlwU3BpLT5kdlN0YXR1c1twUERpc2stPlBoeXNEaXNrSURdID0gKE1QVF9TQ1NJQ0ZHX05FRURfRFYgfCBNUFRfU0NTSUNGR19EVl9OT1RfRE9ORSk7Ci0JCQkJCQkJcFNwaS0+Zm9yY2VEdiA9IE1QVF9TQ1NJQ0ZHX05FRURfRFY7Ci0JCQkJCQkJZGR2dHByaW50aygoIk5FRURfRFYgc2V0IGZvciBwaHlzIGRpc2sgaWQgJWRcbiIsIHBQRGlzay0+UGh5c0Rpc2tJRCkpOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQkJcFBEaXNrKys7Ci0JCQkJCQludW1QRGlzay0tOwotCQkJCQl9Ci0KLQkJCQkJaWYgKG51bVBEaXNrID09IDApIHsKLQkJCQkJCS8qIFRoZSBwaHlzaWNhbCBkaXNrIHRoYXQgbmVlZHMgRFYgd2FzIG5vdCBmb3VuZAotCQkJCQkJICogaW4gdGhlIHN0b3JlZCBJT0MgUGFnZSAzLiBUaGUgZHJpdmVyIG11c3QgcmVsb2FkCi0JCQkJCQkgKiB0aGlzIHBhZ2UuIERWIHJvdXRpbmUgd2lsbCBzZXQgdGhlIE5FRURfRFYgZmxhZyBmb3IKLQkJCQkJCSAqIGFsbCBwaHlzIGRpc2tzIHRoYXQgaGF2ZSBEVl9OT1RfRE9ORSBzZXQuCi0JCQkJCQkgKi8KLQkJCQkJCXBTcGktPmZvcmNlRHYgPSBNUFRfU0NTSUNGR19ORUVEX0RWIHwgTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzM7Ci0JCQkJCQlkZHZ0cHJpbnRrKCgicGh5cyBkaXNrICVkIG5vdCBmb3VuZC4gU2V0dGluZyByZWxvYWQgSU9DIFBnMyBGbGFnXG4iLCBwaHlzRGlza051bSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9CisJCS8qIERvbWFpbiBWYWxpZGF0aW9uIE5lZWRlZCAqLworCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJICYmCisJCSAgICBwUmFpZEV2ZW50RGF0YS0+UmVhc29uQ29kZSA9PQorCQkgICAgTVBJX0VWRU5UX1JBSURfUkNfRE9NQUlOX1ZBTF9ORUVERUQpCisJCQltcHRzY3NpaF9zZXRfZHZmbGFnc19yYWlkKGhkLCBwUmFpZEV2ZW50RGF0YS0+UGh5c0Rpc2tOdW0pOwogI2VuZGlmCisJCWJyZWFrOworCX0KIAotI2lmIGRlZmluZWQoTVBUX0RFQlVHX0RWKSB8fCBkZWZpbmVkKE1QVF9ERUJVR19EVl9USU5ZKQotCQlwcmludGsoIlJhaWQgRXZlbnQgUkY6ICIpOwotCQl7Ci0JCQl1MzIgKm0gPSAodTMyICopcEV2UmVwbHk7Ci0JCQlpbnQgaWk7Ci0JCQlpbnQgbiA9IChpbnQpcEV2UmVwbHktPk1zZ0xlbmd0aDsKLQkJCWZvciAoaWk9NjsgaWkgPCBuOyBpaSsrKQotCQkJCXByaW50aygiICUwOHgiLCBsZTMyX3RvX2NwdShtW2lpXSkpOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0jZW5kaWYKKwkvKiBQZXJzaXN0ZW50IHRhYmxlIGlzIGZ1bGwuICovCisJY2FzZSBNUElfRVZFTlRfUEVSU0lTVEVOVF9UQUJMRV9GVUxMOgorCQlJTklUX1dPUksoJm1wdHNjc2loX3BlcnNpc3RUYXNrLAorCQkgICAgbXB0c2NzaWhfc2FzX3BlcnNpc3RfY2xlYXJfdGFibGUsKHZvaWQgKilpb2MpOworCQlzY2hlZHVsZV93b3JrKCZtcHRzY3NpaF9wZXJzaXN0VGFzayk7CiAJCWJyZWFrOwogCiAJY2FzZSBNUElfRVZFTlRfTk9ORToJCQkJLyogMDAgKi8KQEAgLTI2ODcsNyArMjY1Miw3IEBACiB7CiAJaW50CQlpbmRleGVkX2x1biwgbHVuX2luZGV4OwogCVZpcnREZXZpY2UJKnZkZXY7Ci0JU2NzaUNmZ0RhdGEJKnBTcGk7CisJU3BpQ2ZnRGF0YQkqcFNwaTsKIAljaGFyCQlkYXRhXzU2OwogCiAJZGluaXRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImluaXRUYXJnZXQgYnVzPSVkIGlkPSVkIGx1bj0lZCBoZD0lcFxuIiwKQEAgLTI3OTQsNyArMjc1OSw3IEBACiBzdGF0aWMgdm9pZAogbXB0c2NzaWhfc2V0VGFyZ2V0TmVnb1Bhcm1zKE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0RGV2aWNlICp0YXJnZXQsIGNoYXIgYnl0ZTU2KQogewotCVNjc2lDZmdEYXRhICpwc3BpX2RhdGEgPSAmaGQtPmlvYy0+c3BpX2RhdGE7CisJU3BpQ2ZnRGF0YSAqcHNwaV9kYXRhID0gJmhkLT5pb2MtPnNwaV9kYXRhOwogCWludCAgaWQgPSAoaW50KSB0YXJnZXQtPnRhcmdldF9pZDsKIAlpbnQgIG52cmFtOwogCVZpcnREZXZpY2UJKnZkZXY7CkBAIC0yOTczLDExICsyOTM4LDEzIEBACiBzdGF0aWMgdm9pZAogbXB0c2NzaWhfc2V0X2R2ZmxhZ3MoTVBUX1NDU0lfSE9TVCAqaGQsIFNDU0lJT1JlcXVlc3RfdCAqcFJlcSkKIHsKKwlNUFRfQURBUFRFUgkqaW9jID0gaGQtPmlvYzsKIAl1OCBjbWQ7Ci0JU2NzaUNmZ0RhdGEgKnBTcGk7CisJU3BpQ2ZnRGF0YQkqcFNwaTsKIAotCWRkdnRwcmludGsoKCIgc2V0X2R2ZmxhZ3M6IGlkPSVkIGx1bj0lZCBuZWdvTnZyYW09JXggY21kPSV4XG4iLCAKLQkJcFJlcS0+VGFyZ2V0SUQsIHBSZXEtPkxVTlsxXSwgaGQtPm5lZ29OdnJhbSwgcFJlcS0+Q0RCWzBdKSk7CisJZGR2dHByaW50aygoTVlJT0Nfc19OT1RFX0ZNVAorCQkiIHNldF9kdmZsYWdzOiBpZD0lZCBsdW49JWQgbmVnb052cmFtPSV4IGNtZD0leFxuIiwKKwkJaGQtPmlvYy0+bmFtZSwgcFJlcS0+VGFyZ2V0SUQsIHBSZXEtPkxVTlsxXSwgaGQtPm5lZ29OdnJhbSwgcFJlcS0+Q0RCWzBdKSk7CiAKIAlpZiAoKHBSZXEtPkxVTlsxXSAhPSAwKSB8fCAoaGQtPm5lZ29OdnJhbSAhPSAwKSkKIAkJcmV0dXJuOwpAQCAtMjk4NSwxMiArMjk1MiwxMiBAQAogCWNtZCA9IHBSZXEtPkNEQlswXTsKIAogCWlmICgoY21kID09IFJFQURfQ0FQQUNJVFkpIHx8IChjbWQgPT0gTU9ERV9TRU5TRSkpIHsKLQkJcFNwaSA9ICZoZC0+aW9jLT5zcGlfZGF0YTsKLQkJaWYgKChwU3BpLT5pc1JhaWQgJiAoMSA8PCBwUmVxLT5UYXJnZXRJRCkpICYmIHBTcGktPnBJb2NQZzMpIHsKKwkJcFNwaSA9ICZpb2MtPnNwaV9kYXRhOworCQlpZiAoKGlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IHBSZXEtPlRhcmdldElEKSkgJiYgaW9jLT5yYWlkX2RhdGEucElvY1BnMykgewogCQkJLyogU2V0IE5FRURfRFYgZm9yIGFsbCBoaWRkZW4gZGlza3MKIAkJCSAqLwotCQkJSW9jM1BoeXNEaXNrX3QgKnBQRGlzayA9ICBwU3BpLT5wSW9jUGczLT5QaHlzRGlzazsKLQkJCWludAkJbnVtUERpc2sgPSBwU3BpLT5wSW9jUGczLT5OdW1QaHlzRGlza3M7CisJCQlJb2MzUGh5c0Rpc2tfdCAqcFBEaXNrID0gIGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrOworCQkJaW50CQludW1QRGlzayA9IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsKIAogCQkJd2hpbGUgKG51bVBEaXNrKSB7CiAJCQkJcFNwaS0+ZHZTdGF0dXNbcFBEaXNrLT5QaHlzRGlza0lEXSB8PSBNUFRfU0NTSUNGR19ORUVEX0RWOwpAQCAtMzAwNCw2ICsyOTcxLDUwIEBACiAJfQogfQogCisvKiBtcHRzY3NpaF9yYWlkX3NldF9kdl9mbGFncygpCisgKgorICogTmV3IG9yIHJlcGxhY2VkIGRpc2suIFNldCBEViBmbGFnIGFuZCBzY2hlZHVsZSBEVi4KKyAqLworc3RhdGljIHZvaWQKK21wdHNjc2loX3NldF9kdmZsYWdzX3JhaWQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBpZCkKK3sKKwlNUFRfQURBUFRFUgkqaW9jID0gaGQtPmlvYzsKKwlTcGlDZmdEYXRhCSpwU3BpID0gJmlvYy0+c3BpX2RhdGE7CisJSW9jM1BoeXNEaXNrX3QJKnBQRGlzazsKKwlpbnQJCSBudW1QRGlzazsKKworCWlmIChoZC0+bmVnb052cmFtICE9IDApCisJCXJldHVybjsKKworCWRkdnRwcmludGsoKCJEViByZXF1ZXN0ZWQgZm9yIHBoeXMgZGlzayBpZCAlZFxuIiwgaWQpKTsKKwlpZiAoaW9jLT5yYWlkX2RhdGEucElvY1BnMykgeworCQlwUERpc2sgPSAgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7CisJCW51bVBEaXNrID0gaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOworCQl3aGlsZSAobnVtUERpc2spIHsKKwkJCWlmIChpZCA9PSBwUERpc2stPlBoeXNEaXNrTnVtKSB7CisJCQkJcFNwaS0+ZHZTdGF0dXNbcFBEaXNrLT5QaHlzRGlza0lEXSA9CisJCQkJICAgIChNUFRfU0NTSUNGR19ORUVEX0RWIHwgTVBUX1NDU0lDRkdfRFZfTk9UX0RPTkUpOworCQkJCXBTcGktPmZvcmNlRHYgPSBNUFRfU0NTSUNGR19ORUVEX0RWOworCQkJCWRkdnRwcmludGsoKCJORUVEX0RWIHNldCBmb3IgcGh5cyBkaXNrIGlkICVkXG4iLAorCQkJCSAgICBwUERpc2stPlBoeXNEaXNrSUQpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBQRGlzaysrOworCQkJbnVtUERpc2stLTsKKwkJfQorCisJCWlmIChudW1QRGlzayA9PSAwKSB7CisJCQkvKiBUaGUgcGh5c2ljYWwgZGlzayB0aGF0IG5lZWRzIERWIHdhcyBub3QgZm91bmQKKwkJCSAqIGluIHRoZSBzdG9yZWQgSU9DIFBhZ2UgMy4gVGhlIGRyaXZlciBtdXN0IHJlbG9hZAorCQkJICogdGhpcyBwYWdlLiBEViByb3V0aW5lIHdpbGwgc2V0IHRoZSBORUVEX0RWIGZsYWcgZm9yCisJCQkgKiBhbGwgcGh5cyBkaXNrcyB0aGF0IGhhdmUgRFZfTk9UX0RPTkUgc2V0LgorCQkJICovCisJCQlwU3BpLT5mb3JjZUR2ID0gTVBUX1NDU0lDRkdfTkVFRF9EViB8IE1QVF9TQ1NJQ0ZHX1JFTE9BRF9JT0NfUEczOworCQkJZGR2dHByaW50aygoInBoeXMgZGlzayAlZCBub3QgZm91bmQuIFNldHRpbmcgcmVsb2FkIElPQyBQZzMgRmxhZ1xuIixpZCkpOworCQl9CisJfQorfQorCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKgogICogSWYgbm8gVGFyZ2V0LCBidXMgcmVzZXQgb24gMXN0IEkvTy4gU2V0IHRoZSBmbGFnIHRvCkBAIC0zMDkxLDcgKzMxMDIsNyBAQAogCU1QVF9BREFQVEVSCQkqaW9jID0gaGQtPmlvYzsKIAlDb25maWdfdAkJKnBSZXE7CiAJU0NTSURldmljZVBhZ2UxX3QJKnBEYXRhOwotCVZpcnREZXZpY2UJCSpwVGFyZ2V0OworCVZpcnREZXZpY2UJCSpwVGFyZ2V0PU5VTEw7CiAJTVBUX0ZSQU1FX0hEUgkJKm1mOwogCWRtYV9hZGRyX3QJCSBkYXRhRG1hOwogCXUxNgkJCSByZXFfaWR4OwpAQCAtMzE5MCw3ICszMjAxLDcgQEAKICNlbmRpZgogCiAJCWlmIChmbGFncyAmIE1QVF9TQ1NJQ0ZHX0JMS19ORUdPKQotCQkJbmVnb0ZsYWdzID0gTVBUX1RBUkdFVF9OT19ORUdPX1dJREUgfCBNUFRfVEFSR0VUX05PX05FR09fU1lOQzsKKwkJCW5lZ29GbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fV0lERSB8IE1QVF9UQVJHRVRfTk9fTkVHT19TWU5DOwogCiAJCW1wdHNjc2loX3NldERldmljZVBhZ2UxRmxhZ3Mod2lkdGgsIGZhY3Rvciwgb2Zmc2V0LAogCQkJCQkmcmVxdWVzdGVkLCAmY29uZmlndXJhdGlvbiwgbmVnb0ZsYWdzKTsKQEAgLTQwMTEsNyArNDAyMiw3IEBACiAKIAkJLyogSWYgdGFyZ2V0IFB0ciBOVUxMIG9yIGlmIHRoaXMgdGFyZ2V0IGlzIE5PVCBhIGRpc2ssIHNraXAuCiAJCSAqLwotCQlpZiAoKHBUYXJnZXQpICYmIChwVGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKSl7CisJCWlmICgocFRhcmdldCkgJiYgKHBUYXJnZXQtPmlucV9kYXRhWzBdID09IFRZUEVfRElTSykpewogCQkJZm9yIChsdW49MDsgbHVuIDw9IE1QVF9MQVNUX0xVTjsgbHVuKyspIHsKIAkJCQkvKiBJZiBMVU4gcHJlc2VudCwgaXNzdWUgdGhlIGNvbW1hbmQKIAkJCQkgKi8KQEAgLTQxMDYsOSArNDExNyw5IEBACiAKIAkJCWlmICgoaW9jLT5zcGlfZGF0YS5mb3JjZUR2ICYgTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzMpICE9IDApIHsKIAkJCQltcHRfcmVhZF9pb2NfcGdfMyhpb2MpOwotCQkJCWlmIChpb2MtPnNwaV9kYXRhLnBJb2NQZzMpIHsKLQkJCQkJSW9jM1BoeXNEaXNrX3QgKnBQRGlzayA9IGlvYy0+c3BpX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7Ci0JCQkJCWludAkJbnVtUERpc2sgPSBpb2MtPnNwaV9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsKKwkJCQlpZiAoaW9jLT5yYWlkX2RhdGEucElvY1BnMykgeworCQkJCQlJb2MzUGh5c0Rpc2tfdCAqcFBEaXNrID0gaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7CisJCQkJCWludAkJbnVtUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7CiAKIAkJCQkJd2hpbGUgKG51bVBEaXNrKSB7CiAJCQkJCQlpZiAoaW9jLT5zcGlfZGF0YS5kdlN0YXR1c1twUERpc2stPlBoeXNEaXNrSURdICYgTVBUX1NDU0lDRkdfRFZfTk9UX0RPTkUpCkBAIC00MTQ3LDcgKzQxNTgsNyBAQAogCQkJCQlpc1BoeXNEaXNrID0gbXB0c2NzaWhfaXNfcGh5c19kaXNrKGlvYywgaWQpOwogCQkJCQlpZiAoaXNQaHlzRGlzaykgewogCQkJCQkJZm9yIChpaT0wOyBpaSA8IE1QVF9NQVhfU0NTSV9ERVZJQ0VTOyBpaSsrKSB7Ci0JCQkJCQkJaWYgKGhkLT5pb2MtPnNwaV9kYXRhLmlzUmFpZCAmICgxIDw8IGlpKSkgeworCQkJCQkJCWlmIChoZC0+aW9jLT5yYWlkX2RhdGEuaXNSYWlkICYgKDEgPDwgaWkpKSB7CiAJCQkJCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW2lpXSB8PSBNUFRfU0NTSUNGR19EVl9QRU5ESU5HOwogCQkJCQkJCX0KIAkJCQkJCX0KQEAgLTQxNjYsNyArNDE3Nyw3IEBACiAKIAkJCQkJaWYgKGlzUGh5c0Rpc2spIHsKIAkJCQkJCWZvciAoaWk9MDsgaWkgPCBNUFRfTUFYX1NDU0lfREVWSUNFUzsgaWkrKykgewotCQkJCQkJCWlmIChoZC0+aW9jLT5zcGlfZGF0YS5pc1JhaWQgJiAoMSA8PCBpaSkpIHsKKwkJCQkJCQlpZiAoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IGlpKSkgewogCQkJCQkJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpaV0gJj0gfk1QVF9TQ1NJQ0ZHX0RWX1BFTkRJTkc7CiAJCQkJCQkJfQogCQkJCQkJfQpAQCAtNDE4OCwyMSArNDE5OSwyMSBAQAogCiAvKiBTZWFyY2ggSU9DIHBhZ2UgMyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBoaWRkZW4gcGh5c2ljYWwgZGlzawogICovCi1zdGF0aWMgaW50IAorLyogU2VhcmNoIElPQyBwYWdlIDMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgaGlkZGVuIHBoeXNpY2FsIGRpc2sKKyAqLworc3RhdGljIGludAogbXB0c2NzaWhfaXNfcGh5c19kaXNrKE1QVF9BREFQVEVSICppb2MsIGludCBpZCkKIHsKLQlpZiAoaW9jLT5zcGlfZGF0YS5wSW9jUGczKSB7Ci0JCUlvYzNQaHlzRGlza190ICpwUERpc2sgPSAgaW9jLT5zcGlfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKLQkJaW50CQludW1QRGlzayA9IGlvYy0+c3BpX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOworCWludCBpOwogCi0JCXdoaWxlIChudW1QRGlzaykgewotCQkJaWYgKHBQRGlzay0+UGh5c0Rpc2tJRCA9PSBpZCkgewotCQkJCXJldHVybiAxOwotCQkJfQotCQkJcFBEaXNrKys7Ci0JCQludW1QRGlzay0tOwotCQl9CisJaWYgKCFpb2MtPnJhaWRfZGF0YS5pc1JhaWQgfHwgIWlvYy0+cmFpZF9kYXRhLnBJb2NQZzMpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsgaSsrKSB7CisJCWlmIChpZCA9PSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlza1tpXS5QaHlzRGlza0lEKQorCQkJcmV0dXJuIDE7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MDgsNyArNDQxOSw3IEBACiAJLyogU2tpcCB0aGlzIElEPyBTZXQgY2ZnLmNmZ2hkci5oZHIgdG8gZm9yY2UgY29uZmlnIHBhZ2Ugd3JpdGUKIAkgKi8KIAl7Ci0JCVNjc2lDZmdEYXRhICpwc3BpX2RhdGEgPSAmaGQtPmlvYy0+c3BpX2RhdGE7CisJCVNwaUNmZ0RhdGEgKnBzcGlfZGF0YSA9ICZoZC0+aW9jLT5zcGlfZGF0YTsKIAkJaWYgKHBzcGlfZGF0YS0+bnZyYW0gJiYgKHBzcGlfZGF0YS0+bnZyYW1baWRdICE9IE1QVF9IT1NUX05WUkFNX0lOVkFMSUQpKSB7CiAJCQkvKiBTZXQgdGhlIGZhY3RvciBmcm9tIG52cmFtICovCiAJCQluZmFjdG9yID0gKHBzcGlfZGF0YS0+bnZyYW1baWRdICYgTVBUX05WUkFNX1NZTkNfTUFTSykgPj4gODsKQEAgLTQ0MzgsMTEgKzQ0NDksMTEgQEAKIAl9CiAKIAkvKiBGaW5pc2ggaW9jbWQgaW5pdGl0aWFsaXphdGlvbiAtIGhpZGRlbiBvciB2aXNpYmxlIGRpc2s/ICovCi0JaWYgKGlvYy0+c3BpX2RhdGEucElvY1BnMykgeworCWlmIChpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7CiAJCS8qIFNlYXJjaCBJT0MgcGFnZSAzIGZvciBtYXRjaGluZyBpZAogCQkgKi8KLQkJSW9jM1BoeXNEaXNrX3QgKnBQRGlzayA9ICBpb2MtPnNwaV9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrOwotCQlpbnQJCW51bVBEaXNrID0gaW9jLT5zcGlfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7CisJCUlvYzNQaHlzRGlza190ICpwUERpc2sgPSAgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7CisJCWludAkJbnVtUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7CiAKIAkJd2hpbGUgKG51bVBEaXNrKSB7CiAJCQlpZiAocFBEaXNrLT5QaHlzRGlza0lEID09IGlkKSB7CkBAIC00NDY2LDcgKzQ0NzcsNyBAQAogCS8qIFJBSUQgVm9sdW1lIElEJ3MgbWF5IGRvdWJsZSBmb3IgYSBwaHlzaWNhbCBkZXZpY2UuIElmIFJBSUQgYnV0CiAJICogbm90IGEgcGh5c2ljYWwgSUQgYXMgd2VsbCwgc2tpcCBEVi4KIAkgKi8KLQlpZiAoKGhkLT5pb2MtPnNwaV9kYXRhLmlzUmFpZCAmICgxIDw8IGlkKSkgJiYgIShpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfUEhZU19ESVNLKSkKKwlpZiAoKGhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgJiAoMSA8PCBpZCkpICYmICEoaW9jbWQuZmxhZ3MgJiBNUFRfSUNGTEFHX1BIWVNfRElTSykpCiAJCWdvdG8gdGFyZ2V0X2RvbmU7CiAKIApAQCAtNDgxNSw2ICs0ODI2LDggQEAKIAkJCQkJbm90RG9uZSA9IDA7CiAJCQkJCWlmIChpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfRUNITykgewogCQkJCQkJYnVmc2l6ZSA9ICAoKHBidWYxWzJdICYgMHgxRikgPDw4KSB8IHBidWYxWzNdOworCQkJCQkJaWYgKHBidWYxWzBdICYgMHgwMSkKKwkJCQkJCQlpb2NtZC5mbGFncyB8PSBNUFRfSUNGTEFHX0VCT1M7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlidWZzaXplID0gIHBidWYxWzFdPDwxNiB8IHBidWYxWzJdPDw4IHwgcGJ1ZjFbM107CiAJCQkJCX0KQEAgLTQ5MTEsNiArNDkyNCw5IEBACiAJCX0KIAkJaW9jbWQuZmxhZ3MgJj0gfk1QVF9JQ0ZMQUdfRElEX1JFU0VUOwogCisJCWlmIChpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfRUJPUykKKwkJCWdvdG8gc2tpcF9SZXNlcnZlOworCiAJCXJlcGVhdCA9IDU7CiAJCXdoaWxlIChyZXBlYXQgJiYgKCEoaW9jbWQuZmxhZ3MgJiBNUFRfSUNGTEFHX1JFU0VSVkVEKSkpIHsKIAkJCWlvY21kLmNtZCA9IFJFU0VSVkU7CkBAIC00OTU0LDYgKzQ5NzAsNyBAQAogCQkJfQogCQl9CiAKK3NraXBfUmVzZXJ2ZToKIAkJbXB0c2NzaWhfZmlsbGJ1ZihwYnVmMSwgc3osIHBhdHQsIDEpOwogCQlpb2NtZC5jbWQgPSBXUklURV9CVUZGRVI7CiAJCWlvY21kLmRhdGFfZG1hID0gYnVmMV9kbWE7CkBAIC01MTk4LDExICs1MjE1LDEyIEBACiAJCSAqIElmIG5vdCBhbiBMVkQgYnVzLCB0aGUgYWRhcHRlciBtaW5TeW5jRmFjdG9yIGhhcyBiZWVuCiAJCSAqIGFscmVhZHkgdGhyb3R0bGVkIGJhY2suCiAJCSAqLworCQluZWdvRmxhZ3MgPSBoZC0+aW9jLT5zcGlfZGF0YS5ub1FhczsKIAkJaWYgKChoZC0+VGFyZ2V0cykmJigocFRhcmdldCA9IGhkLT5UYXJnZXRzWyhpbnQpaWRdKSAhPSBOVUxMKSAmJiAhcFRhcmdldC0+cmFpZFZvbHVtZSkgewogCQkJd2lkdGggPSBwVGFyZ2V0LT5tYXhXaWR0aDsKIAkJCW9mZnNldCA9IHBUYXJnZXQtPm1heE9mZnNldDsKIAkJCWZhY3RvciA9IHBUYXJnZXQtPm1pblN5bmNGYWN0b3I7Ci0JCQluZWdvRmxhZ3MgPSBwVGFyZ2V0LT5uZWdvRmxhZ3M7CisJCQluZWdvRmxhZ3MgfD0gcFRhcmdldC0+bmVnb0ZsYWdzOwogCQl9IGVsc2UgewogCQkJaWYgKGhkLT5pb2MtPnNwaV9kYXRhLm52cmFtICYmIChoZC0+aW9jLT5zcGlfZGF0YS5udnJhbVtpZF0gIT0gTVBUX0hPU1RfTlZSQU1fSU5WQUxJRCkpIHsKIAkJCQlkYXRhID0gaGQtPmlvYy0+c3BpX2RhdGEubnZyYW1baWRdOwpAQCAtNTIyMyw3ICs1MjQxLDYgQEAKIAkJCX0KIAogCQkJLyogU2V0IHRoZSBuZWdvdGlhdGlvbiBmbGFncyAqLwotCQkJbmVnb0ZsYWdzID0gaGQtPmlvYy0+c3BpX2RhdGEubm9RYXM7CiAJCQlpZiAoIXdpZHRoKQogCQkJCW5lZ29GbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fV0lERTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCmluZGV4IDUxYzAyNTUuLjk3MWZkYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaS5oCisgKiAgbGludXgvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCiAgKiAgICAgIEhpZ2ggcGVyZm9ybWFuY2UgU0NTSSAvIEZpYnJlIENoYW5uZWwgU0NTSSBIb3N0IGRldmljZSBkcml2ZXIuCiAgKiAgICAgIEZvciB1c2Ugd2l0aCBQQ0kgY2hpcC9hZGFwdGVyKHMpOgogICogICAgICAgICAgTFNJRkM5eHgvTFNJNDA5eHggRmlicmUgQ2hhbm5lbApAQCAtNTMsOCArNTMsOCBAQAogICoJU0NTSSBQdWJsaWMgc3R1ZmYuLi4KICAqLwogCi0jZGVmaW5lIE1QVF9TQ1NJX0NNRF9QRVJfREVWX0hJR0gJMzEKLSNkZWZpbmUgTVBUX1NDU0lfQ01EX1BFUl9ERVZfTE9XCTcKKyNkZWZpbmUgTVBUX1NDU0lfQ01EX1BFUl9ERVZfSElHSAk2NAorI2RlZmluZSBNUFRfU0NTSV9DTURfUEVSX0RFVl9MT1cJMzIKIAogI2RlZmluZSBNUFRfU0NTSV9DTURfUEVSX0xVTgkJNwogCkBAIC03Nyw2ICs3Nyw3IEBACiAjZGVmaW5lIE1QVFNDU0lIX01BWF9XSURUSCAgICAgICAgICAgICAgMQogI2RlZmluZSBNUFRTQ1NJSF9NSU5fU1lOQyAgICAgICAgICAgICAgIDB4MDgKICNkZWZpbmUgTVBUU0NTSUhfU0FGX1RFICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1QVFNDU0lIX1BUX0NMRUFSICAgICAgICAgICAgICAgMAogCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggNTg3ZDEyNy4uNWMwZTMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJCSJTa2lwcGluZyBpb2M9JXAgYmVjYXVzZSBTQ1NJIEluaXRpYXRvciBtb2RlIGlzIE5PVCBlbmFibGVkIVxuIiwKIAkJCWlvYy0+bmFtZSwgaW9jKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAwOwogCX0KIAogCXNoID0gc2NzaV9ob3N0X2FsbG9jKCZtcHRzcGlfZHJpdmVyX3RlbXBsYXRlLCBzaXplb2YoTVBUX1NDU0lfSE9TVCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9jb25maWctb3NtLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2NvbmZpZy1vc20uYwppbmRleCBhZjMyYWI0Li4xMDQzMmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2NvbmZpZy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2NvbmZpZy1vc20uYwpAQCAtNTYsOCArNTYsMTEgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAjaWZkZWYgQ09ORklHX0kyT19DT05GSUdfT0xEX0lPQ1RMCi0JaWYgKGkyb19jb25maWdfb2xkX2luaXQoKSkKKwlpZiAoaTJvX2NvbmZpZ19vbGRfaW5pdCgpKSB7CisJCW9zbV9lcnIoIm9sZCBjb25maWcgaGFuZGxlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQlpMm9fZHJpdmVyX3VucmVnaXN0ZXIoJmkyb19jb25maWdfZHJpdmVyKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAjZW5kaWYKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zaGFycHNsLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NoYXJwc2wtZmxhc2guYwppbmRleCBkMTVkYTZmLi5iN2YwOTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NoYXJwc2wtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NoYXJwc2wtZmxhc2guYwpAQCAtODIsNyArODIsNyBAQAogCX0gZWxzZSBpZiAobWFjaGluZV9pc190b3NhKCkpIHsKIAkJc2hhcnBzbF9wYXJ0aXRpb25zWzBdLnNpemU9MHgwMDZhMDAwMDsKIAkJc2hhcnBzbF9wYXJ0aXRpb25zWzBdLm9mZnNldD0weDAwMTYwMDAwOwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19zcGl0eigpKSB7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX3NwaXR6KCkgfHwgbWFjaGluZV9pc19ha2l0YSgpIHx8IG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKIAkJc2hhcnBzbF9wYXJ0aXRpb25zWzBdLnNpemU9MHgwMDZiMDAwMDsKIAkJc2hhcnBzbF9wYXJ0aXRpb25zWzBdLm9mZnNldD0weDAwMTQwMDAwOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYyBiL2RyaXZlcnMvbXRkL25hbmQvc2hhcnBzbC5jCmluZGV4IDk4NTNiODcuLjg4YjViNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hhcnBzbC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc2hhcnBzbC5jCkBAIC0yMjEsMTAgKzIyMSwxNiBAQAogCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTI1ICogMTAyNCAqIDEwMjQ7CiAJCX0gZWxzZSBpZiAobWFjaGluZV9pc19odXNreSgpKSB7CiAJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemU9NTMgKiAxMDI0ICogMTAyNDsKLQkJfSAJCQorCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfc3BpdHooKSkgeworCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTUgKiAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2FraXRhKCkpIHsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT01OCAqIDEwMjQgKiAxMDI0OworCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT0zMiAqIDEwMjQgKiAxMDI0OworCQl9CiAJfQogCi0JaWYgKG1hY2hpbmVfaXNfaHVza3koKSkgeworCWlmIChtYWNoaW5lX2lzX2h1c2t5KCkgfHwgbWFjaGluZV9pc19ib3J6b2koKSkgewogCQkvKiBOZWVkIHRvIHVzZSBzbWFsbCBlcmFzZWJsb2NrIHNpemUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KIAkJc2hhcnBzbF9tdGQtPmZsYWdzIHw9IE1URF9OT19WSVJUQkxPQ0tTOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggMzRiODBkZS4uYmM1Mzc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTM1Myw4ICszNTMsNiBAQAogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOwogCXN0cnVjdCBjcF9leHRyYV9zdGF0cwljcF9zdGF0czsKLQlzdHJ1Y3QgY3BfZG1hX3N0YXRzCSpuaWNfc3RhdHM7Ci0JZG1hX2FkZHJfdAkJbmljX3N0YXRzX2RtYTsKIAogCXVuc2lnbmVkCQlyeF90YWlsCQlfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAJc3RydWN0IGNwX2Rlc2MJCSpyeF9yaW5nOwpAQCAtMTE0MywxMCArMTE0MSw2IEBACiAJY3AtPnJ4X3JpbmcgPSBtZW07CiAJY3AtPnR4X3JpbmcgPSAmY3AtPnJ4X3JpbmdbQ1BfUlhfUklOR19TSVpFXTsKIAotCW1lbSArPSAoQ1BfUklOR19CWVRFUyAtIENQX1NUQVRTX1NJWkUpOwotCWNwLT5uaWNfc3RhdHMgPSBtZW07Ci0JY3AtPm5pY19zdGF0c19kbWEgPSBjcC0+cmluZ19kbWEgKyAoQ1BfUklOR19CWVRFUyAtIENQX1NUQVRTX1NJWkUpOwotCiAJcmV0dXJuIGNwX2luaXRfcmluZ3MoY3ApOwogfQogCkBAIC0xMTg3LDcgKzExODEsNiBAQAogCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3AtPnBkZXYsIENQX1JJTkdfQllURVMsIGNwLT5yeF9yaW5nLCBjcC0+cmluZ19kbWEpOwogCWNwLT5yeF9yaW5nID0gTlVMTDsKIAljcC0+dHhfcmluZyA9IE5VTEw7Ci0JY3AtPm5pY19zdGF0cyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgY3Bfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE1MTYsMTMgKzE1MDksMTcgQEAKIAkJCQkgIHN0cnVjdCBldGh0b29sX3N0YXRzICplc3RhdHMsIHU2NCAqdG1wX3N0YXRzKQogewogCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNwX2RtYV9zdGF0cyAqbmljX3N0YXRzOworCWRtYV9hZGRyX3QgZG1hOwogCWludCBpOwogCi0JbWVtc2V0KGNwLT5uaWNfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgY3BfZG1hX3N0YXRzKSk7CisJbmljX3N0YXRzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY3AtPnBkZXYsIHNpemVvZigqbmljX3N0YXRzKSwgJmRtYSk7CisJaWYgKCFuaWNfc3RhdHMpCisJCXJldHVybjsKIAogCS8qIGJlZ2luIE5JQyBzdGF0aXN0aWNzIGR1bXAgKi8KLQljcHczMihTdGF0c0FkZHIgKyA0LCAoY3AtPm5pY19zdGF0c19kbWEgPj4gMTYpID4+IDE2KTsKLQljcHczMihTdGF0c0FkZHIsIChjcC0+bmljX3N0YXRzX2RtYSAmIDB4ZmZmZmZmZmYpIHwgRHVtcFN0YXRzKTsKKwljcHczMihTdGF0c0FkZHIgKyA0LCAodTY0KWRtYSA+PiAzMik7CisJY3B3MzIoU3RhdHNBZGRyLCAoKHU2NClkbWEgJiBETUFfMzJCSVRfTUFTSykgfCBEdW1wU3RhdHMpOwogCWNwcjMyKFN0YXRzQWRkcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CkBAIC0xNTMyLDI0ICsxNTI5LDI3IEBACiAJfQogCWNwdzMyKFN0YXRzQWRkciwgMCk7CiAJY3B3MzIoU3RhdHNBZGRyICsgNCwgMCk7CisJY3ByMzIoU3RhdHNBZGRyKTsKIAogCWkgPSAwOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoY3AtPm5pY19zdGF0cy0+dHhfb2spOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoY3AtPm5pY19zdGF0cy0+cnhfb2spOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoY3AtPm5pY19zdGF0cy0+dHhfZXJyKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnJ4X2Vycik7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShjcC0+bmljX3N0YXRzLT5yeF9maWZvKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPmZyYW1lX2FsaWduKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnR4X29rXzFjb2wpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoY3AtPm5pY19zdGF0cy0+dHhfb2tfbWNvbCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShjcC0+bmljX3N0YXRzLT5yeF9va19waHlzKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnJ4X29rX2JjYXN0KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnJ4X29rX21jYXN0KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnR4X2Fib3J0KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnR4X3VuZGVycnVuKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KG5pY19zdGF0cy0+dHhfb2spOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUobmljX3N0YXRzLT5yeF9vayk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShuaWNfc3RhdHMtPnR4X2Vycik7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShuaWNfc3RhdHMtPnJ4X2Vycik7CisJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShuaWNfc3RhdHMtPnJ4X2ZpZm8pOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUobmljX3N0YXRzLT5mcmFtZV9hbGlnbik7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShuaWNfc3RhdHMtPnR4X29rXzFjb2wpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUobmljX3N0YXRzLT50eF9va19tY29sKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KG5pY19zdGF0cy0+cnhfb2tfcGh5cyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShuaWNfc3RhdHMtPnJ4X29rX2JjYXN0KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KG5pY19zdGF0cy0+cnhfb2tfbWNhc3QpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUobmljX3N0YXRzLT50eF9hYm9ydCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShuaWNfc3RhdHMtPnR4X3VuZGVycnVuKTsKIAl0bXBfc3RhdHNbaSsrXSA9IGNwLT5jcF9zdGF0cy5yeF9mcmFnczsKIAlpZiAoaSAhPSBDUF9OVU1fU1RBVFMpCiAJCUJVRygpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChjcC0+cGRldiwgc2l6ZW9mKCpuaWNfc3RhdHMpLCBuaWNfc3RhdHMsIGRtYSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgY3BfZXRodG9vbF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBhNTg0ZjAzLi5kOGFkYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTE5NTEsNyArMTk1MSw3IEBACiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydCB0aGUgTWFydmVsbCBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHgvU0stOTV4eAogCSAgYW5kIHJlbGF0ZWQgR2lnYWJpdCBFdGhlcm5ldCBhZGFwdGVycy4gSXQgaXMgYSBuZXcgc21hbGxlciBkcml2ZXIKLQkgIGRyaXZlciB3aXRoIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgbW9yZSBjb21wbGV0ZSBldGh0b29sIHN1cHBvcnQuCisJICB3aXRoIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgbW9yZSBjb21wbGV0ZSBldGh0b29sIHN1cHBvcnQuCiAKIAkgIEl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGxpbmsgZmFpbG92ZXIgYW5kIG5ldHdvcmsgbWFuYWdlbWVudCAKIAkgIGZlYXR1cmVzIHRoYXQgInBvcnRhYmxlIiB2ZW5kb3Igc3VwcGxpZWQgc2s5OGxpbiBkcml2ZXIgZG9lcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MGlvLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tOTBpby5jCmluZGV4IDUyYzc3Y2IuLjFmMDMwMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MGlvLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTkwaW8uYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYWRkciwgQVJDTkVUX1RPVEFMX1NJWkUsICJjb205MGlvIHByb2JlIikpIHsKLQkJQlVHTVNHKERfSU5JVF9SRUFTT05TLCAiSU8gY2hlY2tfcmVnaW9uICV4LSV4IGZhaWxlZC5cbiIsCisJCUJVR01TRyhEX0lOSVRfUkVBU09OUywgIklPIHJlcXVlc3RfcmVnaW9uICV4LSV4IGZhaWxlZC5cbiIsCiAJCSAgICAgICBpb2FkZHIsIGlvYWRkciArIEFSQ05FVF9UT1RBTF9TSVpFIC0gMSk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCUJVR01TRyhEX05PUk1BTCwgIkNhbid0IGdldCBJUlEgJWQhXG4iLCBkZXYtPmlycSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQkvKiBSZXNlcnZlIHRoZSBJL08gcmVnaW9uIC0gZ3VhcmFudGVlZCB0byB3b3JrIGJ5IGNoZWNrX3JlZ2lvbiAqLworCS8qIFJlc2VydmUgdGhlIEkvTyByZWdpb24gKi8KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBBUkNORVRfVE9UQUxfU0laRSwgImFyY25ldCAoQ09NOTB4eC1JTykiKSkgewogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDk0YzlmNjguLjkwNDQ5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMjg3OSw2ICsyODc5LDcgQEAKIAkJICogVGhpcyB0YXJnZXQgaXMgbm90IG9uIGEgVkxBTgogCQkgKi8KIAkJaWYgKHJ0LT51LmRzdC5kZXYgPT0gYm9uZC0+ZGV2KSB7CisJCQlpcF9ydF9wdXQocnQpOwogCQkJZHByaW50aygiYmFzYTogcnRkZXYgPT0gYm9uZC0+ZGV2OiBhcnBfc2VuZFxuIik7CiAJCQlib25kX2FycF9zZW5kKHNsYXZlLT5kZXYsIEFSUE9QX1JFUVVFU1QsIHRhcmdldHNbaV0sCiAJCQkJICAgICAgYm9uZC0+bWFzdGVyX2lwLCAwKTsKQEAgLTI4OTgsNiArMjg5OSw3IEBACiAJCX0KIAogCQlpZiAodmxhbl9pZCkgeworCQkJaXBfcnRfcHV0KHJ0KTsKIAkJCWJvbmRfYXJwX3NlbmQoc2xhdmUtPmRldiwgQVJQT1BfUkVRVUVTVCwgdGFyZ2V0c1tpXSwKIAkJCQkgICAgICB2bGFuLT52bGFuX2lwLCB2bGFuX2lkKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjkwOSw2ICsyOTExLDcgQEAKIAkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIE5JUFFVQUQoZmwuZmw0X2RzdCksCiAJCQkgICAgICAgcnQtPnUuZHN0LmRldiA/IHJ0LT51LmRzdC5kZXYtPm5hbWUgOiAiTlVMTCIpOwogCQl9CisJCWlwX3J0X3B1dChydCk7CiAJfQogfQogCkBAIC01MDM2LDYgKzUwMzksMTQgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2VycjoKKwkvKgorCSAqIHJ0bmxfdW5sb2NrKCkgd2lsbCBydW4gbmV0ZGV2X3J1bl90b2RvKCksIHB1dHRpbmcgdGhlCisJICogdGh1cy1mYXItcmVnaXN0ZXJlZCBib25kaW5nIGRldmljZXMgaW50byBhIHN0YXRlIHdoaWNoCisJICogdW5yZWdpZ2lzdGVyX25ldGRldmljZSgpIHdpbGwgYWNjZXB0CisJICovCisJcnRubF91bmxvY2soKTsKKwlydG5sX2xvY2soKTsKKwogCS8qIGZyZWUgYW5kIHVucmVnaXN0ZXIgYWxsIGJvbmRzIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgYWRkZWQgKi8KIAlib25kX2ZyZWVfYWxsKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCAyNWNjMjBlLi5mYmYxYzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xMzg3LDEzICsxMzg3LDEzIEBACiAJCW5zLT5jb2xsaXNpb25zICs9IG5pYy0+dHhfY29sbGlzaW9uczsKIAkJbnMtPnR4X2Vycm9ycyArPSBsZTMyX3RvX2NwdShzLT50eF9tYXhfY29sbGlzaW9ucykgKwogCQkJbGUzMl90b19jcHUocy0+dHhfbG9zdF9jcnMpOwotCQlucy0+cnhfZHJvcHBlZCArPSBsZTMyX3RvX2NwdShzLT5yeF9yZXNvdXJjZV9lcnJvcnMpOwogCQlucy0+cnhfbGVuZ3RoX2Vycm9ycyArPSBsZTMyX3RvX2NwdShzLT5yeF9zaG9ydF9mcmFtZV9lcnJvcnMpICsKIAkJCW5pYy0+cnhfb3Zlcl9sZW5ndGhfZXJyb3JzOwogCQlucy0+cnhfY3JjX2Vycm9ycyArPSBsZTMyX3RvX2NwdShzLT5yeF9jcmNfZXJyb3JzKTsKIAkJbnMtPnJ4X2ZyYW1lX2Vycm9ycyArPSBsZTMyX3RvX2NwdShzLT5yeF9hbGlnbm1lbnRfZXJyb3JzKTsKIAkJbnMtPnJ4X292ZXJfZXJyb3JzICs9IGxlMzJfdG9fY3B1KHMtPnJ4X292ZXJydW5fZXJyb3JzKTsKIAkJbnMtPnJ4X2ZpZm9fZXJyb3JzICs9IGxlMzJfdG9fY3B1KHMtPnJ4X292ZXJydW5fZXJyb3JzKTsKKwkJbnMtPnJ4X21pc3NlZF9lcnJvcnMgKz0gbGUzMl90b19jcHUocy0+cnhfcmVzb3VyY2VfZXJyb3JzKTsKIAkJbnMtPnJ4X2Vycm9ycyArPSBsZTMyX3RvX2NwdShzLT5yeF9jcmNfZXJyb3JzKSArCiAJCQlsZTMyX3RvX2NwdShzLT5yeF9hbGlnbm1lbnRfZXJyb3JzKSArCiAJCQlsZTMyX3RvX2NwdShzLT5yeF9zaG9ydF9mcmFtZV9lcnJvcnMpICsKQEAgLTE3MjcsMTIgKzE3MjcsMTAgQEAKIAogCWlmKHVubGlrZWx5KCEocmZkX3N0YXR1cyAmIGNiX29rKSkpIHsKIAkJLyogRG9uJ3QgaW5kaWNhdGUgaWYgaGFyZHdhcmUgaW5kaWNhdGVzIGVycm9ycyAqLwotCQluaWMtPm5ldF9zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfSBlbHNlIGlmKGFjdHVhbF9zaXplID4gRVRIX0RBVEFfTEVOICsgVkxBTl9FVEhfSExFTikgewogCQkvKiBEb24ndCBpbmRpY2F0ZSBvdmVyc2l6ZWQgZnJhbWVzICovCiAJCW5pYy0+cnhfb3Zlcl9sZW5ndGhfZXJyb3JzKys7Ci0JCW5pYy0+bmV0X3N0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9IGVsc2UgewogCQluaWMtPm5ldF9zdGF0cy5yeF9wYWNrZXRzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggN2M4YTBhMi4uZWU2ODdjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjU0NCw3ICsyNTQ0LDYgQEAKIAkJYWRhcHRlci0+c3RhdHMuY3JjZXJycyArIGFkYXB0ZXItPnN0YXRzLmFsZ25lcnJjICsKIAkJYWRhcHRlci0+c3RhdHMucmxlYyArIGFkYXB0ZXItPnN0YXRzLm1wYyArIAogCQlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyOwotCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9kcm9wcGVkID0gYWRhcHRlci0+c3RhdHMubXBjOwogCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMucmxlYzsKIAlhZGFwdGVyLT5uZXRfc3RhdHMucnhfY3JjX2Vycm9ycyA9IGFkYXB0ZXItPnN0YXRzLmNyY2VycnM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2ZyYW1lX2Vycm9ycyA9IGFkYXB0ZXItPnN0YXRzLmFsZ25lcnJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggNWM1NTUzNy4uODlkNmQ2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC0xNjE2LDggKzE2MTYsNiBAQAogCSAgICBhZGFwdGVyLT5zdGF0cy5pY2JjICsKIAkgICAgYWRhcHRlci0+c3RhdHMuZWNiYyArIGFkYXB0ZXItPnN0YXRzLm1wYzsKIAotCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9kcm9wcGVkID0gYWRhcHRlci0+c3RhdHMubXBjOwotCiAJLyogc2VlIGFib3ZlCiAJICogYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5ybGVjOwogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IGM4MjllNmEuLmRkNDUxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTQyOCw3ICs0MjgsNyBAQAogCQkJCURCR19QUklOVChJTklUX0RCRywgCiAJCQkJIiVzOiBaZXJvIERNQSBhZGRyZXNzIGZvciBUeERMLiAiLCBkZXYtPm5hbWUpOwogCQkJCURCR19QUklOVChJTklUX0RCRywgCi0JCQkJIlZpcnR1YWwgYWRkcmVzcyAlbGx4XG4iLCAodTY0KXRtcF92KTsKKwkJCQkiVmlydHVhbCBhZGRyZXNzICVwXG4iLCB0bXBfdik7CiAJCQkJdG1wX3YgPSBwY2lfYWxsb2NfY29uc2lzdGVudChuaWMtPnBkZXYsCiAJCQkJCQkgICAgIFBBR0VfU0laRSwgJnRtcF9wKTsKIAkJCQlpZiAoIXRtcF92KSB7CkBAIC02NTcsOSArNjU3LDEwIEBACiAJCQkJCSAgICBtYWNfY29udHJvbC0+emVyb2RtYV92aXJ0X2FkZHIsCiAJCQkJCSAgICAoZG1hX2FkZHJfdCkwKTsKIAkJCURCR19QUklOVChJTklUX0RCRywgCi0JCQkiJXM6IEZyZWVpbmcgVHhETCB3aXRoIHplcm8gRE1BIGFkZHIuICIsIGRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoSU5JVF9EQkcsICJWaXJ0dWFsIGFkZHJlc3MgJWxseFxuIiwKLQkJCSh1NjQpKG1hY19jb250cm9sLT56ZXJvZG1hX3ZpcnRfYWRkcikpOworCQkJICAJIiVzOiBGcmVlaW5nIFR4REwgd2l0aCB6ZXJvIERNQSBhZGRyLiAiLAorCQkJCWRldi0+bmFtZSk7CisJCQlEQkdfUFJJTlQoSU5JVF9EQkcsICJWaXJ0dWFsIGFkZHJlc3MgJXBcbiIsCisJCQkJbWFjX2NvbnRyb2wtPnplcm9kbWFfdmlydF9hZGRyKTsKIAkJfQogCQlrZnJlZShtYWNfY29udHJvbC0+Zmlmb3NbaV0ubGlzdF9pbmZvKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCmluZGV4IDZlZTQ3NzEuLjJlNzJkNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCkBAIC01MjE2LDE3ICs1MjE2LDE1IEBACiAJeyBQQ0lfVkVORE9SX0lEXzNDT00sIDB4ODBlYiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDQzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgMHg0MzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0RMSU5LLCAweDRjMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKy8qIERMaW5rIGNhcmQgZG9lcyBub3QgaGF2ZSB2YWxpZCBWUEQgc28gdGhpcyBkcml2ZXIgZ2FncworICoJeyBQQ0lfVkVORE9SX0lEX0RMSU5LLCAweDRjMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKyAqLwogCXsgUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLSNpZiAwCS8qIGRvbid0IGhhbmRsZSBZdWtvbjIgY2FyZHMgYXQgdGhlIG1vbWVudCAtLSBtbGluZG5lckBzeXNrb25uZWN0LmRlICovCi0JeyBQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCXsgUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLSNlbmRpZgogCXsgUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDUwMDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQ05FVCwgMHg0MzRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0xJTktTWVMsIDB4MTAzMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgUENJX1ZFTkRPUl9JRF9MSU5LU1lTLCAweDEwMzIsIFBDSV9BTllfSUQsIDB4MDAxNSwgfSwKIAl7IFBDSV9WRU5ET1JfSURfTElOS1NZUywgMHgxMDY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JeyAwLCB9CisJeyAwIH0KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBza2dlX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IGQ3Yzk4NTEuLjAyMDgyNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJza2dlLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJza2dlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuOSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICIgIgogCiAjZGVmaW5lIERFRkFVTFRfVFhfUklOR19TSVpFCTEyOApAQCAtNjY5LDcgKzY2OSw3IEBACiAJCQkJICAgICBQSFlfTV9MRURfQkxJTktfUlQoQkxJTktfODRNUykgfAogCQkJCSAgICAgUEhZX01fTEVEQ19UWF9DVFJMIHwKIAkJCQkgICAgIFBIWV9NX0xFRENfRFBfQ1RSTCk7Ci0JCQorCiAJCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9PVkVSLAogCQkJCSAgICAgUEhZX01fTEVEX01PX1JYKE1PX0xFRF9PRkYpIHwKIAkJCQkgICAgIChza2dlLT5zcGVlZCA9PSBTUEVFRF8xMDAgPwpAQCAtODc2LDcgKzg3Niw3IEBACiAKIHN0YXRpYyB2b2lkIHNrZ2VfbGlua191cChzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlKQogewotCXNrZ2Vfd3JpdGU4KHNrZ2UtPmh3LCBTS19SRUcoc2tnZS0+cG9ydCwgTE5LX0xFRF9SRUcpLCAKKwlza2dlX3dyaXRlOChza2dlLT5odywgU0tfUkVHKHNrZ2UtPnBvcnQsIExOS19MRURfUkVHKSwKIAkJICAgIExFRF9CTEtfT0ZGfExFRF9TWU5DX09GRnxMRURfT04pOwogCiAJbmV0aWZfY2Fycmllcl9vbihza2dlLT5uZXRkZXYpOwpAQCAtOTg3LDYgKzk4Nyw4IEBACiB7CiAJY29uc3QgdTggemVyb1s4XSAgPSB7IDAgfTsKIAorCXNrZ2Vfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfTVNLKSwgMCk7CisKIAkvKiByZXNldCB0aGUgc3RhdGlzdGljcyBtb2R1bGUgKi8KIAl4bV93cml0ZTMyKGh3LCBwb3J0LCBYTV9HUF9QT1JULCBYTV9HUF9SRVNfU1RBVCk7CiAJeG1fd3JpdGUxNihodywgcG9ydCwgWE1fSU1TSywgMHhmZmZmKTsJLyogZGlzYWJsZSBYTUFDIElSUXMgKi8KQEAgLTEwMjEsOCArMTAyMyw2IEBACiAJKHZvaWQpIHhtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfQkNPTV9TVEFUKTsKIAlzdGF0dXMgPSB4bV9waHlfcmVhZChodywgcG9ydCwgUEhZX0JDT01fU1RBVCk7CiAKLQlwcl9kZWJ1ZygiYmNvbV9jaGVja19saW5rIHN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOwotCiAJaWYgKChzdGF0dXMgJiBQSFlfU1RfTFNZTkMpID09IDApIHsKIAkJdTE2IGNtZCA9IHhtX3JlYWQxNihodywgcG9ydCwgWE1fTU1VX0NNRCk7CiAJCWNtZCAmPSB+KFhNX01NVV9FTkFfUlggfCBYTV9NTVVfRU5BX1RYKTsKQEAgLTExMDYsOCArMTEwNiw2IEBACiAJCXsgMHgxNywgMHgwMDEzIH0sIHsgMHgxNSwgMHgwQTA0IH0sIHsgMHgxOCwgMHgwNDIwIH0sCiAJfTsKIAotCXByX2RlYnVnKCJiY29tX3BoeV9pbml0XG4iKTsKLQogCS8qIHJlYWQgSWQgZnJvbSBleHRlcm5hbCBQSFkgKGFsbCBoYXZlIHRoZSBzYW1lIGFkZHJlc3MpICovCiAJaWQxID0geG1fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9YTUFDX0lEMSk7CiAKQEAgLTEzNDAsNiArMTMzOCw4IEBACiAJaW50IHBvcnQgPSBza2dlLT5wb3J0OwogCXUzMiByZWc7CiAKKwlnZW5lc2lzX3Jlc2V0KGh3LCBwb3J0KTsKKwogCS8qIENsZWFyIFR4IHBhY2tldCBhcmJpdGVyIHRpbWVvdXQgSVJRICovCiAJc2tnZV93cml0ZTE2KGh3LCBCM19QQV9DVFJMLAogCQkgICAgIHBvcnQgPT0gMCA/IFBBX0NMUl9UT19UWDEgOiBQQV9DTFJfVE9fVFgyKTsKQEAgLTE0NjUsNyArMTQ2NSw2IEBACiAJdTE2IGNtZDsKIAl1MzIgbW9kZSwgbXNrOwogCi0JcHJfZGVidWcoImdlbmVzaXNfbGlua191cFxuIik7CiAJY21kID0geG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKTsKIAogCS8qCkBAIC0xNTc4LDcgKzE1NzcsNiBAQAogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2W3BvcnRdKTsKIAl1MTYgY3RybCwgY3QxMDAwLCBhZHY7CiAKLQlwcl9kZWJ1ZygieXVrb25faW5pdFxuIik7CiAJaWYgKHNrZ2UtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJdTE2IGVjdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9DVFJMKTsKIApAQCAtMTY3Nyw5ICsxNjc1LDExIEBACiAKIAkvKiBXQSBjb2RlIGZvciBDT01BIG1vZGUgLS0gc2V0IFBIWSByZXNldCAqLwogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0xJVEUgJiYKLQkgICAgaHctPmNoaXBfcmV2ID49IENISVBfUkVWX1lVX0xJVEVfQTMpCi0JCXNrZ2Vfd3JpdGUzMihodywgQjJfR1BfSU8sCi0JCQkgICAgIChza2dlX3JlYWQzMihodywgQjJfR1BfSU8pIHwgR1BfRElSXzkgfCBHUF9JT185KSk7CisJICAgIGh3LT5jaGlwX3JldiA+PSBDSElQX1JFVl9ZVV9MSVRFX0EzKSB7CisJCXJlZyA9IHNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7CisJCXJlZyB8PSBHUF9ESVJfOSB8IEdQX0lPXzk7CisJCXNrZ2Vfd3JpdGUzMihodywgQjJfR1BfSU8sIHJlZyk7CisJfQogCiAJLyogaGFyZCByZXNldCAqLwogCXNrZ2Vfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIEdQSFlfQ1RSTCksIEdQQ19SU1RfU0VUKTsKQEAgLTE2ODcsMTAgKzE2ODcsMTIgQEAKIAogCS8qIFdBIGNvZGUgZm9yIENPTUEgbW9kZSAtLSBjbGVhciBQSFkgcmVzZXQgKi8KIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9MSVRFICYmCi0JICAgIGh3LT5jaGlwX3JldiA+PSBDSElQX1JFVl9ZVV9MSVRFX0EzKQotCQlza2dlX3dyaXRlMzIoaHcsIEIyX0dQX0lPLAotCQkJICAgICAoc2tnZV9yZWFkMzIoaHcsIEIyX0dQX0lPKSB8IEdQX0RJUl85KQotCQkJICAgICAmIH5HUF9JT185KTsKKwkgICAgaHctPmNoaXBfcmV2ID49IENISVBfUkVWX1lVX0xJVEVfQTMpIHsKKwkJcmVnID0gc2tnZV9yZWFkMzIoaHcsIEIyX0dQX0lPKTsKKwkJcmVnIHw9IEdQX0RJUl85OworCQlyZWcgJj0gfkdQX0lPXzk7CisJCXNrZ2Vfd3JpdGUzMihodywgQjJfR1BfSU8sIHJlZyk7CisJfQogCiAJLyogU2V0IGhhcmR3YXJlIGNvbmZpZyBtb2RlICovCiAJcmVnID0gR1BDX0lOVF9QT0xfSEkgfCBHUENfRElTX0ZDIHwgR1BDX0RJU19TTEVFUCB8CkBAIC0xNzI5LDcgKzE3MzEsNyBAQAogCX0KIAogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCByZWcpOwotCXNrZ2VfcmVhZDE2KGh3LCBHTUFDX0lSUV9TUkMpOworCXNrZ2VfcmVhZDE2KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfU1JDKSk7CiAKIAl5dWtvbl9pbml0KGh3LCBwb3J0KTsKIApAQCAtMTgwMSwyMCArMTgwMywyNiBAQAogCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwogCWludCBwb3J0ID0gc2tnZS0+cG9ydDsKIAotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0xJVEUgJiYKLQkgICAgaHctPmNoaXBfcmV2ID49IENISVBfUkVWX1lVX0xJVEVfQTMpIHsKLQkJc2tnZV93cml0ZTMyKGh3LCBCMl9HUF9JTywKLQkJCSAgICAgc2tnZV9yZWFkMzIoaHcsIEIyX0dQX0lPKSB8IEdQX0RJUl85IHwgR1BfSU9fOSk7Ci0JfQorCXNrZ2Vfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfTVNLKSwgMCk7CisJeXVrb25fcmVzZXQoaHcsIHBvcnQpOwogCiAJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwsCiAJCQkgZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCkKIAkJCSAmIH4oR01fR1BDUl9UWF9FTkF8R01fR1BDUl9SWF9FTkEpKTsKIAlnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMKTsKIAorCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0xJVEUgJiYKKwkgICAgaHctPmNoaXBfcmV2ID49IENISVBfUkVWX1lVX0xJVEVfQTMpIHsKKwkJdTMyIGlvID0gc2tnZV9yZWFkMzIoaHcsIEIyX0dQX0lPKTsKKworCQlpbyB8PSBHUF9ESVJfOSB8IEdQX0lPXzk7CisJCXNrZ2Vfd3JpdGUzMihodywgQjJfR1BfSU8sIGlvKTsKKwkJc2tnZV9yZWFkMzIoaHcsIEIyX0dQX0lPKTsKKwl9CisKIAkvKiBzZXQgR1BIWSBDb250cm9sIHJlc2V0ICovCi0Jc2tnZV93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgR1BIWV9DVFJMKSwgR1BDX1JTVF9TRVQpOwotCXNrZ2Vfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19SU1RfU0VUKTsKKwlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdQSFlfQ1RSTCksIEdQQ19SU1RfU0VUKTsKKwlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19SU1RfU0VUKTsKIH0KIAogc3RhdGljIHZvaWQgeXVrb25fZ2V0X3N0YXRzKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UsIHU2NCAqZGF0YSkKQEAgLTE4NzMsMTAgKzE4ODEsOCBAQAogCWludCBwb3J0ID0gc2tnZS0+cG9ydDsKIAl1MTYgcmVnOwogCi0JcHJfZGVidWcoInl1a29uX2xpbmtfdXBcbiIpOwotCiAJLyogRW5hYmxlIFRyYW5zbWl0IEZJRk8gVW5kZXJydW4gKi8KLQlza2dlX3dyaXRlOChodywgR01BQ19JUlFfTVNLLCBHTUFDX0RFRl9NU0spOworCXNrZ2Vfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfTVNLKSwgR01BQ19ERUZfTVNLKTsKIAogCXJlZyA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOwogCWlmIChza2dlLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgfHwgc2tnZS0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKQEAgLTE4OTYsNyArMTkwMiw2IEBACiAJaW50IHBvcnQgPSBza2dlLT5wb3J0OwogCXUxNiBjdHJsOwogCi0JcHJfZGVidWcoInl1a29uX2xpbmtfZG93blxuIik7CiAJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgMCk7CiAKIAljdHJsID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7CkBAIC0yMTEyLDcgKzIxMTcsNiBAQAogCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIocnhxYWRkcltwb3J0XSwgUV9DU1IpLCBDU1JfU1RBUlQgfCBDU1JfSVJRX0NMX0YpOwogCXNrZ2VfbGVkKHNrZ2UsIExFRF9NT0RFX09OKTsKIAotCXByX2RlYnVnKCJza2dlX3VwIGNvbXBsZXRlZFxuIik7CiAJcmV0dXJuIDA7CiAKICBmcmVlX3J4X3Jpbmc6CkBAIC0yMTM1LDE1ICsyMTM5LDIwIEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKKwlza2dlX3dyaXRlOChza2dlLT5odywgU0tfUkVHKHNrZ2UtPnBvcnQsIExOS19MRURfUkVHKSwgTEVEX09GRik7CisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKKwkJZ2VuZXNpc19zdG9wKHNrZ2UpOworCWVsc2UKKwkJeXVrb25fc3RvcChza2dlKTsKKworCWh3LT5pbnRyX21hc2sgJj0gfnBvcnRpcnFtYXNrW3NrZ2UtPnBvcnRdOworCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CisKIAkvKiBTdG9wIHRyYW5zbWl0dGVyICovCiAJc2tnZV93cml0ZTgoaHcsIFFfQUREUih0eHFhZGRyW3BvcnRdLCBRX0NTUiksIENTUl9TVE9QKTsKIAlza2dlX3dyaXRlMzIoaHcsIFJCX0FERFIodHhxYWRkcltwb3J0XSwgUkJfQ1RSTCksCiAJCSAgICAgUkJfUlNUX1NFVHxSQl9ESVNfT1BfTUQpOwogCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKLQkJZ2VuZXNpc19zdG9wKHNrZ2UpOwotCWVsc2UKLQkJeXVrb25fc3RvcChza2dlKTsKIAogCS8qIERpc2FibGUgRm9yY2UgU3luYyBiaXQgYW5kIEVuYWJsZSBBbGxvYyBiaXQgKi8KIAlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYQV9DVFJMKSwKQEAgLTIzNjcsOCArMjM3Niw2IEBACiAJdTMyIG1vZGU7CiAJdTggZmlsdGVyWzhdOwogCi0JcHJfZGVidWcoImdlbmVzaXNfc2V0X211bHRpY2FzdCBmbGFncz0leCBjb3VudD0lZFxuIiwgZGV2LT5mbGFncywgZGV2LT5tY19jb3VudCk7Ci0KIAltb2RlID0geG1fcmVhZDMyKGh3LCBwb3J0LCBYTV9NT0RFKTsKIAltb2RlIHw9IFhNX01EX0VOQV9IQVNIOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCkBAIC0yNTMwLDggKzI1MzcsNiBAQAogCXVuc2lnbmVkIGludCB0b19kbyA9IG1pbihkZXYtPnF1b3RhLCAqYnVkZ2V0KTsKIAl1bnNpZ25lZCBpbnQgd29ya19kb25lID0gMDsKIAotCXByX2RlYnVnKCJza2dlX3BvbGxcbiIpOwotCiAJZm9yIChlID0gcmluZy0+dG9fY2xlYW47IHdvcmtfZG9uZSA8IHRvX2RvOyBlID0gZS0+bmV4dCkgewogCQlzdHJ1Y3Qgc2tnZV9yeF9kZXNjICpyZCA9IGUtPmRlc2M7CiAJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yNjcyLDkgKzI2NzcsOSBAQAogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpIHsKIAkJLyogY2xlYXIgeG1hYyBlcnJvcnMgKi8KIAkJaWYgKGh3c3RhdHVzICYgKElTX05PX1NUQVRfTTF8SVNfTk9fVElTVF9NMSkpCi0JCQlza2dlX3dyaXRlMTYoaHcsIFNLX1JFRygwLCBSWF9NRkZfQ1RSTDEpLCBNRkZfQ0xSX0lOU1RBVCk7CisJCQlza2dlX3dyaXRlMTYoaHcsIFJYX01GRl9DVFJMMSwgTUZGX0NMUl9JTlNUQVQpOwogCQlpZiAoaHdzdGF0dXMgJiAoSVNfTk9fU1RBVF9NMnxJU19OT19USVNUX00yKSkKLQkJCXNrZ2Vfd3JpdGUxNihodywgU0tfUkVHKDAsIFJYX01GRl9DVFJMMiksIE1GRl9DTFJfSU5TVEFUKTsKKwkJCXNrZ2Vfd3JpdGUxNihodywgUlhfTUZGX0NUUkwyLCBNRkZfQ0xSX0lOU1RBVCk7CiAJfSBlbHNlIHsKIAkJLyogVGltZXN0YW1wICh1bnVzZWQpIG92ZXJmbG93ICovCiAJCWlmIChod3N0YXR1cyAmIElTX0lSUV9USVNUX09WKQpAQCAtMzAwMCw5ICszMDA1LDYgQEAKIAogCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CiAKLQlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9HRU5FU0lTKQotCQlza2dlX3dyaXRlOChodywgR01BQ19JUlFfTVNLLCAwKTsKLQogCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKQEAgLTMyMzAsNiArMzIzMiwxMSBAQAogCWRldjAgPSBody0+ZGV2WzBdOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldjApOwogCisJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwlza2dlX3dyaXRlMTYoaHcsIEIwX0xFRCwgTEVEX1NUQVRfT0ZGKTsKKwlza2dlX3BjaV9jbGVhcihodyk7CisJc2tnZV93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1JTVF9TRVQpOworCiAJdGFza2xldF9raWxsKCZody0+ZXh0X3Rhc2tsZXQpOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBodyk7CkBAIC0zMjM4LDcgKzMyNDUsNyBAQAogCWlmIChkZXYxKQogCQlmcmVlX25ldGRldihkZXYxKTsKIAlmcmVlX25ldGRldihkZXYwKTsKLQlza2dlX3dyaXRlMTYoaHcsIEIwX0xFRCwgTEVEX1NUQVRfT0ZGKTsKKwogCWlvdW5tYXAoaHctPnJlZ3MpOwogCWtmcmVlKGh3KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC0zMjU3LDcgKzMyNjQsMTAgQEAKIAkJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQkJc2tnZV9kb3duKGRldik7CisJCQkJaWYgKHNrZ2UtPndvbCkKKwkJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJCWVsc2UKKwkJCQkJc2tnZV9kb3duKGRldik7CiAJCQl9CiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAJCQl3b2wgfD0gc2tnZS0+d29sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5oIGIvZHJpdmVycy9uZXQvc2tnZS5oCmluZGV4IGYxNjgwYmUuLmVmYmY5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuaAorKysgYi9kcml2ZXJzL25ldC9za2dlLmgKQEAgLTIwMDgsNyArMjAwOCw3IEBACiAJR01fSVNfUlhfRkZfT1IJPSAxPDwxLAkvKiBSZWNlaXZlIEZJRk8gT3ZlcnJ1biAqLwogCUdNX0lTX1JYX0NPTVBMCT0gMTw8MCwJLyogRnJhbWUgUmVjZXB0aW9uIENvbXBsZXRlICovCiAKLSNkZWZpbmUgR01BQ19ERUZfTVNLCShHTV9JU19UWF9DT19PViB8IEdNX0lTX1JYX0NPX09WIHwgR01fSVNfVFhfRkZfVVIpCisjZGVmaW5lIEdNQUNfREVGX01TSwkoR01fSVNfUlhfRkZfT1IgfCBHTV9JU19UWF9GRl9VUikKIAogLyoJR01BQ19MSU5LX0NUUkwJMTYgYml0CUdNQUMgTGluayBDb250cm9sIFJlZyAoWVVLT04gb25seSkgKi8KIAkJCQkJCS8qIEJpdHMgMTUuLiAyOglyZXNlcnZlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDRlMTkyMjAuLmM3OTZmNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTE4MTcsNiArMTgxNywxMCBAQAogCS8qIExFRHMgYWN0aXZlIGluIGJvdGggbW9kZXMsIGF1dG9zZW5zZSBwcmlvID0gZmliZXIgKi8KIAlzcGlkZXJfbmV0X3dyaXRlX3BoeShjYXJkLT5uZXRkZXYsIDEsIE1JSV9OQ09ORklHLCAweDk0NWYpOwogCisJLyogc3dpdGNoIG9mZiBmaWJyZSBhdXRvbmVnICovCisJc3BpZGVyX25ldF93cml0ZV9waHkoY2FyZC0+bmV0ZGV2LCAxLCBNSUlfTkNPTkZJRywgMHhmYzAxKTsKKwlzcGlkZXJfbmV0X3dyaXRlX3BoeShjYXJkLT5uZXRkZXYsIDEsIDB4MGIsIDB4MDAwNCk7CisKIAlwaHktPmRlZi0+b3BzLT5yZWFkX2xpbmsocGh5KTsKIAlwcl9pbmZvKCJGb3VuZCAlcyB3aXRoICVpIE1icHMsICVzLWR1cGxleC5cbiIsIHBoeS0+ZGVmLT5uYW1lLAogCQlwaHktPnNwZWVkLCBwaHktPmR1cGxleD09MSA/ICJGdWxsIiA6ICJIYWxmIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDc1OTlmNTIuLjgxZjRhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02Nyw4ICs2Nyw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjM5IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIlNlcHRlbWJlciA1LCAyMDA1IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNDAiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiU2VwdGVtYmVyIDE1LCAyMDA1IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTM0NDIsMzEgKzM0NDIsNDcgQEAKIAlzY2hlZHVsZV93b3JrKCZ0cC0+cmVzZXRfdGFzayk7CiB9CiAKKy8qIFRlc3QgZm9yIERNQSBidWZmZXJzIGNyb3NzaW5nIGFueSA0R0IgYm91bmRhcmllczogNEcsIDhHLCBldGMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRnM180Z19vdmVyZmxvd190ZXN0KGRtYV9hZGRyX3QgbWFwcGluZywgaW50IGxlbikKK3sKKwl1MzIgYmFzZSA9ICh1MzIpIG1hcHBpbmcgJiAweGZmZmZmZmZmOworCisJcmV0dXJuICgoYmFzZSA+IDB4ZmZmZmRjYzApICYmCisJCShiYXNlICsgbGVuICsgOCA8IGJhc2UpKTsKK30KKwogc3RhdGljIHZvaWQgdGczX3NldF90eGQoc3RydWN0IHRnMyAqLCBpbnQsIGRtYV9hZGRyX3QsIGludCwgdTMyLCB1MzIpOwogCiBzdGF0aWMgaW50IHRpZ29uM180Z2JfaHdidWdfd29ya2Fyb3VuZChzdHJ1Y3QgdGczICp0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgdTMyIGd1aWx0eV9lbnRyeSwgaW50IGd1aWx0eV9sZW4sCi0JCQkJICAgICAgIHUzMiBsYXN0X3BsdXNfb25lLCB1MzIgKnN0YXJ0LCB1MzIgbXNzKQorCQkJCSAgICAgICB1MzIgbGFzdF9wbHVzX29uZSwgdTMyICpzdGFydCwKKwkJCQkgICAgICAgdTMyIGJhc2VfZmxhZ3MsIHUzMiBtc3MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwotCWRtYV9hZGRyX3QgbmV3X2FkZHI7CisJZG1hX2FkZHJfdCBuZXdfYWRkciA9IDA7CiAJdTMyIGVudHJ5ID0gKnN0YXJ0OwotCWludCBpOworCWludCBpLCByZXQgPSAwOwogCiAJaWYgKCFuZXdfc2tiKSB7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC0xOworCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworCQkvKiBOZXcgU0tCIGlzIGd1YXJhbnRlZWQgdG8gYmUgbGluZWFyLiAqLworCQllbnRyeSA9ICpzdGFydDsKKwkJbmV3X2FkZHIgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGRldiwgbmV3X3NrYi0+ZGF0YSwgbmV3X3NrYi0+bGVuLAorCQkJCQkgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkvKiBNYWtlIHN1cmUgbmV3IHNrYiBkb2VzIG5vdCBjcm9zcyBhbnkgNEcgYm91bmRhcmllcy4KKwkJICogRHJvcCB0aGUgcGFja2V0IGlmIGl0IGRvZXMuCisJCSAqLworCQlpZiAodGczXzRnX292ZXJmbG93X3Rlc3QobmV3X2FkZHIsIG5ld19za2ItPmxlbikpIHsKKwkJCXJldCA9IC0xOworCQkJZGV2X2tmcmVlX3NrYihuZXdfc2tiKTsKKwkJCW5ld19za2IgPSBOVUxMOworCQl9IGVsc2UgeworCQkJdGczX3NldF90eGQodHAsIGVudHJ5LCBuZXdfYWRkciwgbmV3X3NrYi0+bGVuLAorCQkJCSAgICBiYXNlX2ZsYWdzLCAxIHwgKG1zcyA8PCAxKSk7CisJCQkqc3RhcnQgPSBORVhUX1RYKGVudHJ5KTsKKwkJfQogCX0KIAotCS8qIE5ldyBTS0IgaXMgZ3VhcmFudGVlZCB0byBiZSBsaW5lYXIuICovCi0JZW50cnkgPSAqc3RhcnQ7Ci0JbmV3X2FkZHIgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGRldiwgbmV3X3NrYi0+ZGF0YSwgbmV3X3NrYi0+bGVuLAotCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7Ci0JdGczX3NldF90eGQodHAsIGVudHJ5LCBuZXdfYWRkciwgbmV3X3NrYi0+bGVuLAotCQkgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSA/Ci0JCSAgICBUWERfRkxBR19UQ1BVRFBfQ1NVTSA6IDAsIDEgfCAobXNzIDw8IDEpKTsKLQkqc3RhcnQgPSBORVhUX1RYKGVudHJ5KTsKLQogCS8qIE5vdyBjbGVhbiB1cCB0aGUgc3cgcmluZyBlbnRyaWVzLiAqLwogCWkgPSAwOwogCXdoaWxlIChlbnRyeSAhPSBsYXN0X3BsdXNfb25lKSB7CkBAIC0zNDkxLDcgKzM1MDcsNyBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdGczX3NldF90eGQoc3RydWN0IHRnMyAqdHAsIGludCBlbnRyeSwKQEAgLTM1MTcsMTkgKzM1MzMsMTAgQEAKIAl0eGQtPnZsYW5fdGFnID0gdmxhbl90YWcgPDwgVFhEX1ZMQU5fVEFHX1NISUZUOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB0ZzNfNGdfb3ZlcmZsb3dfdGVzdChkbWFfYWRkcl90IG1hcHBpbmcsIGludCBsZW4pCi17Ci0JdTMyIGJhc2UgPSAodTMyKSBtYXBwaW5nICYgMHhmZmZmZmZmZjsKLQotCXJldHVybiAoKGJhc2UgPiAweGZmZmZkY2MwKSAmJgotCQkoYmFzZSArIGxlbiArIDggPCBiYXNlKSk7Ci19Ci0KIHN0YXRpYyBpbnQgdGczX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwotCXVuc2lnbmVkIGludCBpOwogCXUzMiBsZW4sIGVudHJ5LCBiYXNlX2ZsYWdzLCBtc3M7CiAJaW50IHdvdWxkX2hpdF9od2J1ZzsKIApAQCAtMzYyNCw3ICszNjMxLDcgQEAKIAl3b3VsZF9oaXRfaHdidWcgPSAwOwogCiAJaWYgKHRnM180Z19vdmVyZmxvd190ZXN0KG1hcHBpbmcsIGxlbikpCi0JCXdvdWxkX2hpdF9od2J1ZyA9IGVudHJ5ICsgMTsKKwkJd291bGRfaGl0X2h3YnVnID0gMTsKIAogCXRnM19zZXRfdHhkKHRwLCBlbnRyeSwgbWFwcGluZywgbGVuLCBiYXNlX2ZsYWdzLAogCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkgfCAobXNzIDw8IDEpKTsKQEAgLTM2NDgsMTIgKzM2NTUsOCBAQAogCQkJdHAtPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IE5VTEw7CiAJCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnRwLT50eF9idWZmZXJzW2VudHJ5XSwgbWFwcGluZywgbWFwcGluZyk7CiAKLQkJCWlmICh0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKSB7Ci0JCQkJLyogT25seSBvbmUgc2hvdWxkIG1hdGNoLiAqLwotCQkJCWlmICh3b3VsZF9oaXRfaHdidWcpCi0JCQkJCUJVRygpOwotCQkJCXdvdWxkX2hpdF9od2J1ZyA9IGVudHJ5ICsgMTsKLQkJCX0KKwkJCWlmICh0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKQorCQkJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKIAkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKIAkJCQl0ZzNfc2V0X3R4ZCh0cCwgZW50cnksIG1hcHBpbmcsIGxlbiwKQEAgLTM2NjksMzQgKzM2NzIsMTUgQEAKIAlpZiAod291bGRfaGl0X2h3YnVnKSB7CiAJCXUzMiBsYXN0X3BsdXNfb25lID0gZW50cnk7CiAJCXUzMiBzdGFydDsKLQkJdW5zaWduZWQgaW50IGxlbiA9IDA7CiAKLQkJd291bGRfaGl0X2h3YnVnIC09IDE7Ci0JCWVudHJ5ID0gZW50cnkgLSAxIC0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJZW50cnkgJj0gKFRHM19UWF9SSU5HX1NJWkUgLSAxKTsKLQkJc3RhcnQgPSBlbnRyeTsKLQkJaSA9IDA7Ci0JCXdoaWxlIChlbnRyeSAhPSBsYXN0X3BsdXNfb25lKSB7Ci0JCQlpZiAoaSA9PSAwKQotCQkJCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7Ci0JCQllbHNlCi0JCQkJbGVuID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpLTFdLnNpemU7Ci0KLQkJCWlmIChlbnRyeSA9PSB3b3VsZF9oaXRfaHdidWcpCi0JCQkJYnJlYWs7Ci0KLQkJCWkrKzsKLQkJCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7Ci0KLQkJfQorCQlzdGFydCA9IGVudHJ5IC0gMSAtIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCXN0YXJ0ICY9IChURzNfVFhfUklOR19TSVpFIC0gMSk7CiAKIAkJLyogSWYgdGhlIHdvcmthcm91bmQgZmFpbHMgZHVlIHRvIG1lbW9yeS9tYXBwaW5nCiAJCSAqIGZhaWx1cmUsIHNpbGVudGx5IGRyb3AgdGhpcyBwYWNrZXQuCiAJCSAqLwotCQlpZiAodGlnb24zXzRnYl9od2J1Z193b3JrYXJvdW5kKHRwLCBza2IsCi0JCQkJCQllbnRyeSwgbGVuLAotCQkJCQkJbGFzdF9wbHVzX29uZSwKLQkJCQkJCSZzdGFydCwgbXNzKSkKKwkJaWYgKHRpZ29uM180Z2JfaHdidWdfd29ya2Fyb3VuZCh0cCwgc2tiLCBsYXN0X3BsdXNfb25lLAorCQkJCQkJJnN0YXJ0LCBiYXNlX2ZsYWdzLCBtc3MpKQogCQkJZ290byBvdXRfdW5sb2NrOwogCiAJCWVudHJ5ID0gc3RhcnQ7CkBAIC05MjcxLDYgKzkyNTUsOCBAQAogCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB3cml0ZV9yZW9yZGVyX2NoaXBzZXRzW10gPSB7CiAJCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwKIAkJICAgICAgICAgICAgIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQykgfSwKKwkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELAorCQkgICAgICAgICAgICAgUENJX0RFVklDRV9JRF9BTURfSzhfTkIpIH0sCiAJCXsgfSwKIAl9OwogCXUzMiBtaXNjX2N0cmxfcmVnOwpAQCAtOTI4NSw3ICs5MjcxLDcgQEAKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfU1VOXzU3MFg7CiAjZW5kaWYKIAotCS8qIElmIHdlIGhhdmUgYW4gQU1EIDc2MiBjaGlwc2V0LCB3cml0ZQorCS8qIElmIHdlIGhhdmUgYW4gQU1EIDc2MiBvciBLOCBjaGlwc2V0LCB3cml0ZQogCSAqIHJlb3JkZXJpbmcgdG8gdGhlIG1haWxib3ggcmVnaXN0ZXJzIGRvbmUgYnkgdGhlIGhvc3QKIAkgKiBjb250cm9sbGVyIGNhbiBjYXVzZSBtYWpvciB0cm91Ymxlcy4gIFdlIHJlYWQgYmFjayBmcm9tCiAJICogZXZlcnkgbWFpbGJveCByZWdpc3RlciB3cml0ZSB0byBmb3JjZSB0aGUgd3JpdGVzIHRvIGJlCkBAIC05NTMyLDcgKzk1MTgsNyBAQAogCQl0cC0+d3JpdGUzMl9yeF9tYm94ID0gdGczX3dyaXRlX2luZGlyZWN0X21ib3g7CiAKIAkJaW91bm1hcCh0cC0+cmVncyk7Ci0JCXRwLT5yZWdzID0gMDsKKwkJdHAtPnJlZ3MgPSBOVUxMOwogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwogCQlwY2lfY21kICY9IH5QQ0lfQ09NTUFORF9NRU1PUlk7CkBAIC0xMDY4MCw3ICsxMDY2Niw3IEBACiBlcnJfb3V0X2lvdW5tYXA6CiAJaWYgKHRwLT5yZWdzKSB7CiAJCWlvdW5tYXAodHAtPnJlZ3MpOwotCQl0cC0+cmVncyA9IDA7CisJCXRwLT5yZWdzID0gTlVMTDsKIAl9CiAKIGVycl9vdXRfZnJlZV9kZXY6CkBAIC0xMDcwNSw3ICsxMDY5MSw3IEBACiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCWlmICh0cC0+cmVncykgewogCQkJaW91bm1hcCh0cC0+cmVncyk7Ci0JCQl0cC0+cmVncyA9IDA7CisJCQl0cC0+cmVncyA9IE5VTEw7CiAJCX0KIAkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKaW5kZXggMjZjYzRmNi4uNjBkMWUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogc3RhdGljIGludCB4aXJjb21fY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB4aXJjb21fdXAoc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqeGlyY29tX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNpZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCB4aXJjb21fcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCmluZGV4IDQ4YzAzYzEuLmEwMWVmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYwpAQCAtNzIsNyArNzIsNyBAQAogCX0KIAlza2JfcmVzZXJ2ZShza2IsIDQpOwogCWNpc2NvX2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBDSVNDT19LRUVQQUxJVkUsIE5VTEwsIE5VTEwsIDApOwotCWRhdGEgPSAoY2lzY29fcGFja2V0Kilza2ItPmRhdGE7CisJZGF0YSA9IChjaXNjb19wYWNrZXQqKShza2ItPmRhdGEgKyA0KTsKIAogCWRhdGEtPnR5cGUgPSBodG9ubCh0eXBlKTsKIAlkYXRhLT5wYXIxID0gaHRvbmwocGFyMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggMmJlNjVkMy4uMDY5OThjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNjg1Miw3ICs2ODUyLDEwIEBACiAJLyogQWRkIGZyZXF1ZW5jeSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKIAlpd2UudS5mcmVxLm0gPSBsZTE2X3RvX2NwdShic3MtPmRzQ2hhbm5lbCk7Ci0JaXdlLnUuZnJlcS5tID0gZnJlcXVlbmN5X2xpc3RbaXdlLnUuZnJlcS5tXSAqIDEwMDAwMDsKKwkvKiBpd2UudS5mcmVxLm0gY29udGFpbnQgdGhlIGNoYW5uZWwgKHN0YXJ0aW5nIDEpLCBvdXIgCisJICogZnJlcXVlbmN5X2xpc3QgYXJyYXkgc3RhcnQgYXQgaW5kZXggMC4uLgorCSAqLworCWl3ZS51LmZyZXEubSA9IGZyZXF1ZW5jeV9saXN0W2l3ZS51LmZyZXEubSAtIDFdICogMTAwMDAwOwogCWl3ZS51LmZyZXEuZSA9IDE7CiAJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCmluZGV4IGQxZmIxYmEuLmJlZGQ3ZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCkBAIC02MjksNiArNjI5LDcgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ2FibGV0cm9uIiwgIlJvYW1BYm91dCA4MDIuMTEgRFMiLCAweDMyZDQ0NWY1LCAweGVkZWZmZDkwKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiV2lyZWxlc3MgTEFOIFBDQy0xMSIsIDB4NTI2MTQ0MGYsIDB4YTY0MDU1ODQpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJXaXJlbGVzcyBMQU4gUENDQS0xMSIsIDB4NTI2MTQ0MGYsIDB4ZGY2MTE1ZjkpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2FfSy5LLiIsICJXaXJlbGVzc19MQU5fUENDQi0xMSIsIDB4MjllMzMzMTEsIDB4ZWU3YTI3YWUpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJEIiwgIkxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgMHg3MWIxODU4OSwgMHhmMTQ0ZTNhYyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkQiLCAiTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiLCAweDcxYjE4NTg5LCAweGI2ZjFiMGFiKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRUxTQSIsICJBaXJMYW5jZXIgTUMtMTEiLCAweDQ1MDdhMzNhLCAweGVmNTRmMGUzKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKaW5kZXggODEyMmZlNy4uYjFiYTQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKQEAgLTU1OCw3ICs1NTgsNyBAQAogCXBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKGlibXBocF9wY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgQ0FDSEUpOwogCXBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKGlibXBocF9wY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIExBVEVOQ1kpOwogCi0JcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAoaWJtcGhwX3BjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIDB4MDBMKTsKKwlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZCAoaWJtcGhwX3BjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIDB4MDBMKTsKIAlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChpYm1waHBfcGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBERVZJQ0VFTkFCTEUpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggMGUwOTQ3Ni4uODk4ZjZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtMjUyNiw3ICsyNTI2LDYgQEAKIAlpbnQgY2xvb3A7CiAJdTggdGVtcF9ieXRlOwogCXU4IGNsYXNzX2NvZGU7Ci0JdTE2IHRlbXBfd29yZDsKIAl1MzIgcmM7CiAJdTMyIHRlbXBfcmVnaXN0ZXI7CiAJdTMyIGJhc2U7CkBAIC0yNjgyLDggKzI2ODEsNyBAQAogCQl9CQkvKiBFbmQgb2YgYmFzZSByZWdpc3RlciBsb29wICovCiAKIAkJLyogZGlzYWJsZSBST00gYmFzZSBBZGRyZXNzICovCi0JCXRlbXBfd29yZCA9IDB4MDBMOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIHRlbXBfd29yZCk7CisJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIDB4MDApOwogCiAJCS8qIFNldCBIUCBwYXJhbWV0ZXJzIChDYWNoZSBMaW5lIFNpemUsIExhdGVuY3kgVGltZXIpICovCiAJCXJjID0gcGNpZWhwcm1fc2V0X2hwcChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwppbmRleCA3ODNiNWFiLi45MWM5OTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCkBAIC0yODI0LDggKzI4MjQsNyBAQAogCQl9CiAjZW5kaWYKIAkJLyogRGlzYWJsZSBST00gYmFzZSBBZGRyZXNzICovCi0JCXRlbXBfd29yZCA9IDB4MDBMOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIHRlbXBfd29yZCk7CisJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIDB4MDApOwogCiAJCS8qIFNldCBIUCBwYXJhbWV0ZXJzIChDYWNoZSBMaW5lIFNpemUsIExhdGVuY3kgVGltZXIpICovCiAJCXJjID0gc2hwY2hwcm1fc2V0X2hwcChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggOTkyZGI4OS4uMjU5ZDI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMwOSwxNyArMzA5LDI1IEBACiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBtICsgUENJX1BNX0NUUkwsICZwbWNzcik7CiAKLQkvKiBJZiB3ZSdyZSBpbiBEMywgZm9yY2UgZW50aXJlIHdvcmQgdG8gMC4KKwkvKiBJZiB3ZSdyZSAoZWZmZWN0aXZlbHkpIGluIEQzLCBmb3JjZSBlbnRpcmUgd29yZCB0byAwLgogCSAqIFRoaXMgZG9lc24ndCBhZmZlY3QgUE1FX1N0YXR1cywgZGlzYWJsZXMgUE1FX0VuLCBhbmQKIAkgKiBzZXRzIFBvd2VyU3RhdGUgdG8gMC4KIAkgKi8KLQlpZiAoZGV2LT5jdXJyZW50X3N0YXRlID49IFBDSV9EM2hvdCkgewotCQlpZiAoIShwbWNzciAmIFBDSV9QTV9DVFJMX05PX1NPRlRfUkVTRVQpKQorCXN3aXRjaCAoZGV2LT5jdXJyZW50X3N0YXRlKSB7CisJY2FzZSBQQ0lfVU5LTk9XTjogLyogQm9vdC11cCAqLworCQlpZiAoKHBtY3NyICYgUENJX1BNX0NUUkxfU1RBVEVfTUFTSykgPT0gUENJX0QzaG90CisJCSAmJiAhKHBtY3NyICYgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVCkpCiAJCQluZWVkX3Jlc3RvcmUgPSAxOworCQkvKiBGYWxsLXRocm91Z2g6IGZvcmNlIHRvIEQwICovCisJY2FzZSBQQ0lfRDNob3Q6CisJY2FzZSBQQ0lfRDNjb2xkOgorCWNhc2UgUENJX1BPV0VSX0VSUk9SOgogCQlwbWNzciA9IDA7Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcG1jc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7CiAJCXBtY3NyIHw9IHN0YXRlOworCQlicmVhazsKIAl9CiAKIAkvKiBlbnRlciBzcGVjaWZpZWQgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggMzliYTY0MC4uODA5NjlmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTM3Niw2ICszNzYsNyBAQAogICAgIHNvY2tldF90IGkgPSBpbWlub3IoaW5vZGUpOwogICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogICAgIHVzZXJfaW5mb190ICp1c2VyOworICAgIHN0YXRpYyBpbnQgd2FybmluZ19wcmludGVkID0gMDsKIAogICAgIGRzX2RiZygwLCAiZHNfb3Blbihzb2NrZXQgJWQpXG4iLCBpKTsKIApAQCAtNDA3LDYgKzQwOCwxNyBAQAogICAgIHMtPnVzZXIgPSB1c2VyOwogICAgIGZpbGUtPnByaXZhdGVfZGF0YSA9IHVzZXI7CiAKKyAgICBpZiAoIXdhcm5pbmdfcHJpbnRlZCkgeworCSAgICBwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IERldGVjdGVkIGRlcHJlY2F0ZWQgUENNQ0lBIGlvY3RsICIKKwkJCSJ1c2FnZS5cbiIpOworCSAgICBwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IFRoaXMgaW50ZXJmYWNlIHdpbGwgc29vbiBiZSByZW1vdmVkIGZyb20gIgorCQkJInRoZSBrZXJuZWw7IHBsZWFzZSBleHBlY3QgYnJlYWthZ2UgdW5sZXNzIHlvdSB1cGdyYWRlICIKKwkJCSJ0byBuZXcgdG9vbHMuXG4iKTsKKwkgICAgcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBzZWUgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC8iCisJCQkidXRpbHMva2VybmVsL3BjbWNpYS9wY21jaWEuaHRtbCBmb3IgZGV0YWlscy5cbiIpOworCSAgICB3YXJuaW5nX3ByaW50ZWQgPSAxOworICAgIH0KKwogICAgIGlmIChzLT5wY21jaWFfc3RhdGUucHJlc2VudCkKIAlxdWV1ZV9ldmVudCh1c2VyLCBDU19FVkVOVF9DQVJEX0lOU0VSVElPTik7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCmluZGV4IGYwOTk3YzMuLmJhNGQ3OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCkBAIC0xMDQ1LDcgKzEwNDUsMTggQEAKIHsKIAlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQ7CiAJaW50IHJldDsKLQkKKworCS8qCisJICogSWYgd2UgZmFpbGVkIHRvIGFzc2lnbiBwcm9wZXIgYnVzIG51bWJlcnMgZm9yIHRoaXMgY2FyZGJ1cworCSAqIGNvbnRyb2xsZXIgZHVyaW5nIFBDSSBwcm9iZSwgaXRzIHN1Ym9yZGluYXRlIHBjaV9idXMgaXMgTlVMTC4KKwkgKiBCYWlsIG91dCBpZiBzby4KKwkgKi8KKwlpZiAoIWRldi0+c3Vib3JkaW5hdGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJZZW50YTogbm8gYnVzIGFzc29jaWF0ZWQgd2l0aCAlcyEgIgorCQkJIih0cnkgJ3BjaT1hc3NpZ24tYnVzc2VzJylcbiIsIHBjaV9uYW1lKGRldikpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlzb2NrZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgeWVudGFfc29ja2V0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzb2NrZXQpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKaW5kZXggYWFjODNjZS4uYTFjNTJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBkcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCiAgKiAgIFMvMzkwIGNvbW1vbiBJL08gcm91dGluZXMgLS0gYmxhY2tsaXN0aW5nIG9mIHNwZWNpZmljIGRldmljZXMKLSAqICAgJFJldmlzaW9uOiAxLjM0ICQKKyAqICAgJFJldmlzaW9uOiAxLjM1ICQKICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwKICAqCQkJICAgICAgSUJNIENvcnBvcmF0aW9uCkBAIC0zNSw3ICszNSw3IEBACiAgKi8KIAogLyogNjU1MzYgYml0cyB0byBpbmRpY2F0ZSBpZiBhIGRldm5vIGlzIGJsYWNrbGlzdGVkIG9yIG5vdCAqLwotI2RlZmluZSBfX0JMX0RFVl9XT1JEUyAoX19NQVhfU1VCQ0hBTk5FTFMgKyAoOCpzaXplb2YobG9uZykgLSAxKSAvIFwKKyNkZWZpbmUgX19CTF9ERVZfV09SRFMgKChfX01BWF9TVUJDSEFOTkVMUyArICg4KnNpemVvZihsb25nKSAtIDEpKSAvIFwKIAkJCSAoOCpzaXplb2YobG9uZykpKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgYmxfZGV2W19fQkxfREVWX1dPUkRTXTsKIHR5cGVkZWYgZW51bSB7YWRkLCBmcmVlfSByYW5nZV9hY3Rpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jCmluZGV4IDZhZWVmM2IuLjBjYjQ3ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jCkBAIC02ODIsOSArNjgyLDYgQEAKIAlkZWxfdGltZXIoJmNvbmZpZ190aW1lcik7CiAJZGVsX3RpbWVyKCZjbGVhbnVwX3RpbWVyKTsKIAotCWlmICh6OTBfZGV2aWNlX3dvcmspCi0JCWRlc3Ryb3lfd29ya3F1ZXVlKHo5MF9kZXZpY2Vfd29yayk7Ci0KIAlkZXN0cm95X3o5MGNyeXB0KCk7CiAKIAlQUklOVEtOKCJVbmxvYWRlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwppbmRleCA5NmNhODYzLi4wZGI0ZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkSWQ6IGN0Y21haW4uYyx2IDEuNzQgMjAwNS8wMy8yNCAwOTowNDoxNyBtc2Nod2lkZSBFeHAgJAorICogJElkOiBjdGNtYWluLmMsdiAxLjc4IDIwMDUvMDkvMDcgMTI6MTg6MDIgcGF2bGljIEV4cCAkCiAgKgogICogQ1RDIC8gRVNDT04gbmV0d29yayBkcml2ZXIKICAqCkBAIC0zNywxMCArMzcsOSBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKLSAqIFJFTEVBU0UtVEFHOiBDVEMvRVNDT04gbmV0d29yayBkcml2ZXIgJFJldmlzaW9uOiAxLjc0ICQKKyAqIFJFTEVBU0UtVEFHOiBDVEMvRVNDT04gbmV0d29yayBkcml2ZXIgJFJldmlzaW9uOiAxLjc4ICQKICAqCiAgKi8KLQwKICN1bmRlZiBERUJVRwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEzNSw3ICsxMzQsNyBAQAogCSJUWCBkb3duIiwKIAkiUmVzdGFydCIsCiB9OwotDAorCiAvKioKICAqIEV2ZW50cyBvZiB0aGUgY2hhbm5lbCBzdGF0ZW1hY2hpbmUKICAqLwpAQCAtMjQ5LDcgKzI0OCw3IEBACiBwcmludF9iYW5uZXIodm9pZCkKIHsKIAlzdGF0aWMgaW50IHByaW50ZWQgPSAwOwotCWNoYXIgdmJ1ZltdID0gIiRSZXZpc2lvbjogMS43NCAkIjsKKwljaGFyIHZidWZbXSA9ICIkUmV2aXNpb246IDEuNzggJCI7CiAJY2hhciAqdmVyc2lvbiA9IHZidWY7CiAKIAlpZiAocHJpbnRlZCkKQEAgLTMzNCw3ICszMzMsNyBAQAogCSJSZXN0YXJ0aW5nIiwKIAkiTm90IG9wZXJhdGlvbmFsIiwKIH07Ci0MCisKICNpZmRlZiBERUJVRwogLyoqCiAgKiBEdW1wIGhlYWRlciBhbmQgZmlyc3QgMTYgYnl0ZXMgb2YgYW4gc2tfYnVmZiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgpAQCAtNjcxLDcgKzY3MCw3IEBACiBmc21fYWN0aW9uX25vcChmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiB9Ci0MCisKIC8qKgogICogQWN0aW9ucyBmb3IgY2hhbm5lbCAtIHN0YXRlbWFjaGluZXMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNTE0LDcgKzE1MTMsNiBAQAogIAlmc21fYWRkdGltZXIoJnByaXZwdHItPnJlc3RhcnRfdGltZXIsIDEwMDAsIERFVl9FVkVOVF9SRVNUQVJULCBkZXYpOwogfQogCi0MCiAvKioKICAqIFRoZSBzdGF0ZW1hY2hpbmUgZm9yIGEgY2hhbm5lbC4KICAqLwpAQCAtMTYyNSw3ICsxNjIzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgQ0hfRlNNX0xFTiA9IHNpemVvZiAoY2hfZnNtKSAvIHNpemVvZiAoZnNtX25vZGUpOwotDAorCiAvKioKICAqIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHNldHVwIGFuZCBkZXZpY2UgZGV0ZWN0aW9uLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTk3Niw3ICsxOTc0LDcgQEAKIAkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX0lSUSwgY2gpOwogCiB9Ci0MCisKIC8qKgogICogQWN0aW9ucyBmb3IgaW50ZXJmYWNlIC0gc3RhdGVtYWNoaW5lLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjIwOSwxMyArMjIwNywxOCBAQAogCWludCByYyA9IDA7CiAKIAlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwkvKiB3ZSBuZWVkIHRvIGFjcXVpcmUgdGhlIGxvY2sgZm9yIHRlc3RpbmcgdGhlIHN0YXRlCisJICogb3RoZXJ3aXNlIHdlIGNhbiBoYXZlIGFuIElSUSBjaGFuZ2luZyB0aGUgc3RhdGUgdG8gCisJICogVFhJRExFIGFmdGVyIHRoZSB0ZXN0IGJ1dCBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsb2NrLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+Y29sbGVjdF9sb2NrLCBzYXZlZmxhZ3MpOwogCWlmIChmc21fZ2V0c3RhdGUoY2gtPmZzbSkgIT0gQ0hfU1RBVEVfVFhJRExFKSB7CiAJCWludCBsID0gc2tiLT5sZW4gKyBMTF9IRUFERVJfTEVOR1RIOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+Y29sbGVjdF9sb2NrLCBzYXZlZmxhZ3MpOwotCQlpZiAoY2gtPmNvbGxlY3RfbGVuICsgbCA+IGNoLT5tYXhfYnVmc2l6ZSAtIDIpCi0JCQlyYyA9IC1FQlVTWTsKLQkJZWxzZSB7CisJCWlmIChjaC0+Y29sbGVjdF9sZW4gKyBsID4gY2gtPm1heF9idWZzaXplIC0gMikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0gZWxzZSB7CiAJCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKIAkJCWhlYWRlci5sZW5ndGggPSBsOwogCQkJaGVhZGVyLnR5cGUgPSBza2ItPnByb3RvY29sOwpAQCAtMjIzMSw3ICsyMjM0LDcgQEAKIAkJaW50IGNjd19pZHg7CiAJCXN0cnVjdCBza19idWZmICpuc2tiOwogCQl1bnNpZ25lZCBsb25nIGhpOwotCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7CiAJCS8qKgogCQkgKiBQcm90ZWN0IHNrYiBhZ2FpbnN0IGJlZWluZyBmcmVlJ2QgYnkgdXBwZXIKIAkJICogbGF5ZXJzLgpAQCAtMjI1Niw2ICsyMjU5LDcgQEAKIAkJCWlmICghbnNrYikgewogCQkJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwogCQkJCXNrYl9wdWxsKHNrYiwgTExfSEVBREVSX0xFTkdUSCArIDIpOworCQkJCWN0Y19jbGVhcl9idXN5KGNoLT5uZXRkZXYpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfSBlbHNlIHsKIAkJCQltZW1jcHkoc2tiX3B1dChuc2tiLCBza2ItPmxlbiksCkBAIC0yMjgxLDYgKzIyODUsNyBAQAogCQkJCSAqLwogCQkJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwogCQkJCXNrYl9wdWxsKHNrYiwgTExfSEVBREVSX0xFTkdUSCArIDIpOworCQkJCWN0Y19jbGVhcl9idXN5KGNoLT5uZXRkZXYpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAKQEAgLTIzMjcsOSArMjMzMiwxMCBAQAogCQl9CiAJfQogCisJY3RjX2NsZWFyX2J1c3koY2gtPm5ldGRldik7CiAJcmV0dXJuIHJjOwogfQotDAorCiAvKioKICAqIEludGVyZmFjZSBBUEkgZm9yIHVwcGVyIG5ldHdvcmsgbGF5ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNDIxLDcgKzI0MjcsNiBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmICh0cmFuc21pdF9za2IocHJpdnB0ci0+Y2hhbm5lbFtXUklURV0sIHNrYikgIT0gMCkKIAkJcmMgPSAxOwotCWN0Y19jbGVhcl9idXN5KGRldik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yNjEwLDcgKzI2MTUsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotDAogc3RhdGljIHZvaWQKIGN0Y19uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKQEAgLTI2ODUsNyArMjY4OSw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0KIHN0YXRpYyBzc2l6ZV90CiBjdGNfdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKaW5kZXggM2EwMjg1Ni4uMmFkNDc5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgInFldGhfbXBjLmgiCiAKLSNkZWZpbmUgVkVSU0lPTl9RRVRIX0ggCQkiJFJldmlzaW9uOiAxLjEzOSAkIgorI2RlZmluZSBWRVJTSU9OX1FFVEhfSCAJCSIkUmV2aXNpb246IDEuMTQyICQiCiAKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAjZGVmaW5lIFFFVEhfVkVSU0lPTl9JUFY2IAkiOklQdjYiCkBAIC0xMTcyLDcgKzExNzIsNyBAQAogcWV0aF9yZWFsbG9jX2J1ZmZlcl9wb29sKHN0cnVjdCBxZXRoX2NhcmQgKiwgaW50KTsKIAogZXh0ZXJuIGludAotcWV0aF9zZXRfbGFyZ2Vfc2VuZChzdHJ1Y3QgcWV0aF9jYXJkICopOworcWV0aF9zZXRfbGFyZ2Vfc2VuZChzdHJ1Y3QgcWV0aF9jYXJkICosIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzKTsKIAogZXh0ZXJuIHZvaWQKIHFldGhfZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCmluZGV4IDc5Yzc0ZjMuLjg2NTgyY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyAoJFJldmlzaW9uOiAxLjIxNCAkKQorICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyAoJFJldmlzaW9uOiAxLjIyNCAkKQogICoKICAqIExpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0CiAgKgpAQCAtMTIsNyArMTIsNyBAQAogICoJCQkgIEZyYW5rIFBhdmxpYyAocGF2bGljQGRlLmlibS5jb20pIGFuZAogICoJCSAJICBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+CiAgKgotICogICAgJFJldmlzaW9uOiAxLjIxNCAkCSAkRGF0ZTogMjAwNS8wNS8wNCAyMDoxOToxOCAkCisgKiAgICAkUmV2aXNpb246IDEuMjI0ICQJICREYXRlOiAyMDA1LzA1LzA0IDIwOjE5OjE4ICQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI5LDE0ICsyOSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0vKioqCi0gKiBleWUgY2F0Y2hlcjsganVzdCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0gKi8KLXZvaWQgdm9sYXRpbGUKLXFldGhfZXllY2F0Y2hlcih2b2lkKQotewotCXJldHVybjsKLX0KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODAsNyArNzIsNyBAQAogI2luY2x1ZGUgInFldGhfZWRkcC5oIgogI2luY2x1ZGUgInFldGhfdHNvLmgiCiAKLSNkZWZpbmUgVkVSU0lPTl9RRVRIX0MgIiRSZXZpc2lvbjogMS4yMTQgJCIKKyNkZWZpbmUgVkVSU0lPTl9RRVRIX0MgIiRSZXZpc2lvbjogMS4yMjQgJCIKIHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0gInFldGggUy8zOTAgT1NBLUV4cHJlc3MgZHJpdmVyIjsKIAogLyoqCkBAIC0yNzU5LDExICsyNzUxLDkgQEAKIAkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lOwogI2VuZGlmCiAJaWYgKHJjKXsKLQkJUUVUSF9EQkZfU1BSSU5URih0cmFjZSwgMCwgInFldGhfZmx1c2hfYnVmZmVyczogZG9fUURJTyAiCi0JCQkJICJyZXR1cm5lZCBlcnJvciAoJWkpIG9uIGRldmljZSAlcy4iLAotCQkJCSByYywgQ0FSRF9EREVWX0lEKHF1ZXVlLT5jYXJkKSk7CiAJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJmbHVzaGJ1ZiIpOwogCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIiBlcnIlZCIsIHJjKTsKKwkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIlcyIsIENBUkRfRERFVl9JRChxdWV1ZS0+Y2FyZCkpOwogCQlxdWV1ZS0+Y2FyZC0+c3RhdHMudHhfZXJyb3JzICs9IGNvdW50OwogCQkvKiB0aGlzIG11c3Qgbm90IGhhcHBlbiB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcy4gaWYgaXQKIAkJICogaGFwcGVucyBzb21ldGhpbmcgaXMgcmVhbGx5IHdyb25nIC0+IHJlY292ZXIgKi8KQEAgLTI5MDksMTEgKzI4OTksOCBAQAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJxZG91aGRsIik7CiAJaWYgKHN0YXR1cyAmIFFESU9fU1RBVFVTX0xPT0tfRk9SX0VSUk9SKSB7CiAJCWlmIChzdGF0dXMgJiBRRElPX1NUQVRVU19BQ1RJVkFURV9DSEVDS19DT05ESVRJT04pewotCQkJUUVUSF9EQkZfU1BSSU5URih0cmFjZSwgMiwgIk9uIGRldmljZSAlczogIgotCQkJCQkgInJlY2VpdmVkIGFjdGl2ZSBjaGVjayAiCi0JCQkJICAgICAgICAgImNvbmRpdGlvbiAoMHglMDh4KS4iLAotCQkJCQkgQ0FSRF9CVVNfSUQoY2FyZCksIHN0YXR1cyk7Ci0JCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2hrY29uZCIpOworCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImFjaGtjb25kIik7CisJCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwogCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIlMDh4Iiwgc3RhdHVzKTsKIAkJCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKIAkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CkBAIC0zMzU2LDI2ICszMzQzLDMyIEBACiBzdGF0aWMgaW50CiBxZXRoX2hhbHRfY2hhbm5lbHMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYzEgPSAwLCByYzI9MCwgcmMzID0gMDsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsMywiaGFsdGNocyIpOwotCWlmICgocmMgPSBxZXRoX2hhbHRfY2hhbm5lbCgmY2FyZC0+cmVhZCkpKQotCQlyZXR1cm4gcmM7Ci0JaWYgKChyYyA9IHFldGhfaGFsdF9jaGFubmVsKCZjYXJkLT53cml0ZSkpKQotCQlyZXR1cm4gcmM7Ci0JcmV0dXJuICBxZXRoX2hhbHRfY2hhbm5lbCgmY2FyZC0+ZGF0YSk7CisJcmMxID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPnJlYWQpOworCXJjMiA9IHFldGhfaGFsdF9jaGFubmVsKCZjYXJkLT53cml0ZSk7CisJcmMzID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPmRhdGEpOworCWlmIChyYzEpCisJCXJldHVybiByYzE7CisJaWYgKHJjMikgCisJCXJldHVybiByYzI7CisJcmV0dXJuIHJjMzsKIH0KIHN0YXRpYyBpbnQKIHFldGhfY2xlYXJfY2hhbm5lbHMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYzEgPSAwLCByYzI9MCwgcmMzID0gMDsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsMywiY2xlYXJjaHMiKTsKLQlpZiAoKHJjID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT5yZWFkKSkpCi0JCXJldHVybiByYzsKLQlpZiAoKHJjID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT53cml0ZSkpKQotCQlyZXR1cm4gcmM7Ci0JcmV0dXJuICBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPmRhdGEpOworCXJjMSA9IHFldGhfY2xlYXJfY2hhbm5lbCgmY2FyZC0+cmVhZCk7CisJcmMyID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT53cml0ZSk7CisJcmMzID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT5kYXRhKTsKKwlpZiAocmMxKQorCQlyZXR1cm4gcmMxOworCWlmIChyYzIpIAorCQlyZXR1cm4gcmMyOworCXJldHVybiByYzM7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTM0NDUsMjMgKzM0MzgsMjMgQEAKIAl9CiAJaWYgKChyYyA9IHFldGhfY21fZW5hYmxlKGNhcmQpKSl7CiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiMmVyciVkIiwgcmMpOwotCQlyZXR1cm4gcmM7CisJCWdvdG8gb3V0X3FkaW87CiAJfQogCWlmICgocmMgPSBxZXRoX2NtX3NldHVwKGNhcmQpKSl7CiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiM2VyciVkIiwgcmMpOwotCQlyZXR1cm4gcmM7CisJCWdvdG8gb3V0X3FkaW87CiAJfQogCWlmICgocmMgPSBxZXRoX3VscF9lbmFibGUoY2FyZCkpKXsKIAkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI0ZXJyJWQiLCByYyk7Ci0JCXJldHVybiByYzsKKwkJZ290byBvdXRfcWRpbzsKIAl9CiAJaWYgKChyYyA9IHFldGhfdWxwX3NldHVwKGNhcmQpKSl7CiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNWVyciVkIiwgcmMpOwotCQlyZXR1cm4gcmM7CisJCWdvdG8gb3V0X3FkaW87CiAJfQogCWlmICgocmMgPSBxZXRoX2FsbG9jX3FkaW9fYnVmZmVycyhjYXJkKSkpewogCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjVlcnIlZCIsIHJjKTsKLQkJcmV0dXJuIHJjOworCQlnb3RvIG91dF9xZGlvOwogCX0KIAlpZiAoKHJjID0gcWV0aF9xZGlvX2VzdGFibGlzaChjYXJkKSkpewogCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjZlcnIlZCIsIHJjKTsKQEAgLTM3OTUsMTIgKzM3ODgsMTYgQEAKIHFldGhfcHJlcGFyZV9za2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKipza2IsCiAJCSBzdHJ1Y3QgcWV0aF9oZHIgKipoZHIsIGludCBpcHYpCiB7CisJaW50IHJjOwogI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KIAl1MTYgKnRhZzsKICNlbmRpZgogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgInByZXBza2IiKTsKIAorICAgICAgICByYyA9IHFldGhfcmVhbGxvY19oZWFkcm9vbShjYXJkLCBza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgICAgIHJldHVybiByYzsKICNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCiAJaWYgKGNhcmQtPnZsYW5ncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudCgqc2tiKSAmJgogCSAgICAoKGlwdiA9PSA2KSB8fCBjYXJkLT5vcHRpb25zLmxheWVyMikgKSB7CkBAIC00MjUxLDcgKzQyNDgsOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdm9pZCAqaGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdm9pZCAqaGRyLCAKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZWxlbXMpCiB7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CiAKQEAgLTQyNjEsOSArNDI1OSwxMCBAQAogICAgICAgICBpZiAoZWxlbWVudHNfbmVlZGVkID09IDAgKQogICAgICAgICAgICAgICAgIGVsZW1lbnRzX25lZWRlZCA9IDEgKyAoKCgoKHVuc2lnbmVkIGxvbmcpIGhkcikgJSBQQUdFX1NJWkUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBza2ItPmxlbikgPj4gUEFHRV9TSElGVCk7Ci0gICAgICAgIGlmIChlbGVtZW50c19uZWVkZWQgPiBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkpeworCWlmICgoZWxlbWVudHNfbmVlZGVkICsgZWxlbXMpID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKXsKICAgICAgICAgICAgICAgICBQUklOVF9FUlIoInFldGhfZG9fc2VuZF9wYWNrZXQ6IGludmFsaWQgc2l6ZSBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJJUCBwYWNrZXQuIERpc2NhcmRlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIklQIHBhY2tldCAoTnVtYmVyPSVkIC8gTGVuZ3RoPSVkKS4gRGlzY2FyZGVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnRzX25lZWRlZCtlbGVtcyksIHNrYi0+bGVuKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZWxlbWVudHNfbmVlZGVkOwpAQCAtNDI3NSw3ICs0Mjc0LDcgQEAKIAlpbnQgaXB2ID0gMDsKIAlpbnQgY2FzdF90eXBlOwogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlOwotCXN0cnVjdCBxZXRoX2hkciAqaGRyOworCXN0cnVjdCBxZXRoX2hkciAqaGRyID0gTlVMTDsKIAlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKIAllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwogCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKQEAgLTQzMzcsOSArNDMzNiwxMSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9IGVsc2UgewotCQllbGVtZW50c19uZWVkZWQgKz0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwodm9pZCopIGhkciwgc2tiKTsKLQkJaWYgKCFlbGVtZW50c19uZWVkZWQpCisJCWludCBlbGVtcyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsKHZvaWQqKSBoZHIsIHNrYiwKKwkJCQkJCSBlbGVtZW50c19uZWVkZWQpOworCQlpZiAoIWVsZW1zKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsZW1lbnRzX25lZWRlZCArPSBlbGVtczsKIAl9CiAKIAlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKQEAgLTQ1MDQsNyArNDUwNSwxMSBAQAogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJhcnBzdG5vZSIpOwogCi0JLyogVE9ETzogcmVhbGx5IG5vdCBzdXBwb3J0ZWQgYnkgR3Vlc3RMQU4/ICovCisJLyoKKwkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gb25seSBzdXBwb3J0cyB0aGUgQVJQIGFzc2lzdCBmdW5jdGlvbgorCSAqIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLCBidXQgbm90IElQQV9DTURfQVNTX0FSUF9TRVRfTk9fRU5UUklFUzsKKwkgKiB0aHVzIHdlIHNheSBFT1BOT1RTVVBQIGZvciB0aGlzIEFSUCBmdW5jdGlvbgorCSAqLwogCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLElQQV9BUlBfUFJPQ0VTU0lORykpIHsKQEAgLTQ2ODEsMTQgKzQ2ODYsNiBAQAogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJhcnBxdWVyeSIpOwogCi0JLyoKLQkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gIGRvZXMgb25seSBkZWxpdmVyIGFsbCB6ZXJvcyBvbiBxdWVyeSBhcnAsCi0JICogZXZlbiB0aG91Z2ggYXJwIHByb2Nlc3NpbmcgaXMgc3VwcG9ydGVkIChhY2NvcmRpbmcgdG8gSVBBIHN1cHAuCi0JICogZnVuY3MgZmxhZ3MpOyBzaW5jZSBhbGwgemVyb3MgaXMgbm8gdmFsdWVhYmxlIGluZm9ybWF0aW9uLAotCSAqIHdlIHNheSBFT1BOT1RTVVBQIGZvciBhbGwgQVJQIGZ1bmN0aW9ucwotCSAqLwotCS8qaWYgKGNhcmQtPmluZm8uZ3Vlc3RsYW4pCi0JCXJldHVybiAtRU9QTk9UU1VQUDsgKi8KIAlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsLypJUEFfUVVFUllfQVJQX0FERFJfSU5GTyovCiAJCQkgICAgICAgSVBBX0FSUF9QUk9DRVNTSU5HKSkgewogCQlQUklOVF9XQVJOKCJBUlAgcHJvY2Vzc2luZyBub3Qgc3VwcG9ydGVkICIKQEAgLTQ4OTQsMTAgKzQ4OTEsOSBAQAogCVFFVEhfREJGX1RFWFQodHJhY2UsMywiYXJwYWRlbnQiKTsKIAogCS8qCi0JICogY3VycmVudGx5IEd1ZXN0TEFOICBkb2VzIG9ubHkgZGVsaXZlciBhbGwgemVyb3Mgb24gcXVlcnkgYXJwLAotCSAqIGV2ZW4gdGhvdWdoIGFycCBwcm9jZXNzaW5nIGlzIHN1cHBvcnRlZCAoYWNjb3JkaW5nIHRvIElQQSBzdXBwLgotCSAqIGZ1bmNzIGZsYWdzKTsgc2luY2UgYWxsIHplcm9zIGlzIG5vIHZhbHVlYWJsZSBpbmZvcm1hdGlvbiwKLQkgKiB3ZSBzYXkgRU9QTk9UU1VQUCBmb3IgYWxsIEFSUCBmdW5jdGlvbnMKKwkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gb25seSBzdXBwb3J0cyB0aGUgQVJQIGFzc2lzdCBmdW5jdGlvbgorCSAqIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLCBidXQgbm90IElQQV9DTURfQVNTX0FSUF9BRERfRU5UUlk7CisJICogdGh1cyB3ZSBzYXkgRU9QTk9UU1VQUCBmb3IgdGhpcyBBUlAgZnVuY3Rpb24KIAkgKi8KIAlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtNDkzNywxMCArNDkzMyw5IEBACiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJhcnBybWVudCIpOwogCiAJLyoKLQkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gIGRvZXMgb25seSBkZWxpdmVyIGFsbCB6ZXJvcyBvbiBxdWVyeSBhcnAsCi0JICogZXZlbiB0aG91Z2ggYXJwIHByb2Nlc3NpbmcgaXMgc3VwcG9ydGVkIChhY2NvcmRpbmcgdG8gSVBBIHN1cHAuCi0JICogZnVuY3MgZmxhZ3MpOyBzaW5jZSBhbGwgemVyb3MgaXMgbm8gdmFsdWVhYmxlIGluZm9ybWF0aW9uLAotCSAqIHdlIHNheSBFT1BOT1RTVVBQIGZvciBhbGwgQVJQIGZ1bmN0aW9ucworCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCisJICogSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sIGJ1dCBub3QgSVBBX0NNRF9BU1NfQVJQX1JFTU9WRV9FTlRSWTsKKwkgKiB0aHVzIHdlIHNheSBFT1BOT1RTVVBQIGZvciB0aGlzIEFSUCBmdW5jdGlvbgogCSAqLwogCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC00OTc4LDExICs0OTczLDEwIEBACiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJhcnBmbHVzaCIpOwogCiAJLyoKLQkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gIGRvZXMgb25seSBkZWxpdmVyIGFsbCB6ZXJvcyBvbiBxdWVyeSBhcnAsCi0JICogZXZlbiB0aG91Z2ggYXJwIHByb2Nlc3NpbmcgaXMgc3VwcG9ydGVkIChhY2NvcmRpbmcgdG8gSVBBIHN1cHAuCi0JICogZnVuY3MgZmxhZ3MpOyBzaW5jZSBhbGwgemVyb3MgaXMgbm8gdmFsdWVhYmxlIGluZm9ybWF0aW9uLAotCSAqIHdlIHNheSBFT1BOT1RTVVBQIGZvciBhbGwgQVJQIGZ1bmN0aW9ucwotCSAqLworCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCisJICogSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sIGJ1dCBub3QgSVBBX0NNRF9BU1NfQVJQX0ZMVVNIX0NBQ0hFOworCSAqIHRodXMgd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIHRoaXMgQVJQIGZ1bmN0aW9uCisJKi8KIAlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbiB8fCAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsSVBBX0FSUF9QUk9DRVNTSU5HKSkgewpAQCAtNzAzOCwxNCArNzAzMiwxNiBAQAogfQogCiBpbnQKLXFldGhfc2V0X2xhcmdlX3NlbmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3FldGhfc2V0X2xhcmdlX3NlbmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgdHlwZSkKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGNhcmQtPmRldiA9PSBOVUxMKQorCWlmIChjYXJkLT5kZXYgPT0gTlVMTCkgeworCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwogCQlyZXR1cm4gMDsKLQorCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7CisJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKIAlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgewogCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6CiAJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHOwpAQCAtNzA2Niw3ICs3MDYyLDYgQEAKIAkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyk7CiAJCWJyZWFrOwogCX0KLQogCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC04MjU3LDcgKzgyNTIsNiBAQAogewogCWludCByYz0wOwogCi0JcWV0aF9leWVjYXRjaGVyKCk7CiAJUFJJTlRfSU5GTygibG9hZGluZyAlcyAoJXMvJXMvJXMvJXMvJXMvJXMvJXMgJXMgJXMpXG4iLAogCQkgICB2ZXJzaW9uLCBWRVJTSU9OX1FFVEhfQywgVkVSU0lPTl9RRVRIX0gsCiAJCSAgIFZFUlNJT05fUUVUSF9NUENfSCwgVkVSU0lPTl9RRVRIX01QQ19DLApAQCAtODMzOCw3ICs4MzMyLDYgQEAKIAlwcmludGsoInFldGg6IHJlbW92ZWRcbiIpOwogfQogCi1FWFBPUlRfU1lNQk9MKHFldGhfZXllY2F0Y2hlcik7CiBtb2R1bGVfaW5pdChxZXRoX2luaXQpOwogbW9kdWxlX2V4aXQocWV0aF9leGl0KTsKIE1PRFVMRV9BVVRIT1IoIkZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKaW5kZXggOThiZWRiMC4uZGRhMTA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jICgkUmV2aXNpb246IDEuNTEgJCkKKyAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyAoJFJldmlzaW9uOiAxLjU0ICQpCiAgKgogICogTGludXggb24gelNlcmllcyBPU0EgRXhwcmVzcyBhbmQgSGlwZXJTb2NrZXRzIHN1cHBvcnQKICAqIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIHJlbGF0ZWQgdG8gc3lzZnMuCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAicWV0aF9tcGMuaCIKICNpbmNsdWRlICJxZXRoX2ZzLmgiCiAKLWNvbnN0IGNoYXIgKlZFUlNJT05fUUVUSF9TWVNfQyA9ICIkUmV2aXNpb246IDEuNTEgJCI7Citjb25zdCBjaGFyICpWRVJTSU9OX1FFVEhfU1lTX0MgPSAiJFJldmlzaW9uOiAxLjU0ICQiOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03MjIsMTAgKzcyMiwxMyBAQAogCiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgeworICAgICAgICAgICAgICAgIFBSSU5UX1dBUk4oIkxheWVyMiBvbiBIaXBlcnNvY2tldHMgaXMgbm90IHN1cHBvcnRlZCEgXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOworICAgICAgICB9CiAKIAlpZiAoKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCi0JICAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkgfHwKLQkgICAgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU0FFKSkKKwkgICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKQEAgLTc3MSw5ICs3NzQsNyBAQAogCiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQogCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7Ci0KIAlpZiAoIXN0cmNtcCh0bXAsICJubyIpKXsKIAkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9OTzsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiRUREUCIpKSB7CkBAIC03ODYsMTAgKzc4Nyw4IEBACiAJfQogCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gdHlwZSkKIAkJcmV0dXJuIGNvdW50OwotCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IHR5cGU7Ci0JaWYgKChyYyA9IHFldGhfc2V0X2xhcmdlX3NlbmQoY2FyZCkpKQorCWlmICgocmMgPSBxZXRoX3NldF9sYXJnZV9zZW5kKGNhcmQsIHR5cGUpKSkJCiAJCXJldHVybiByYzsKLQogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZQppbmRleCBmYzE0NTMwLi5kNmE3OGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogemZjcC1vYmpzIDo9IHpmY3BfYXV4Lm8gemZjcF9jY3cubyB6ZmNwX3Njc2kubyB6ZmNwX2VycC5vIHpmY3BfcWRpby5vIFwKLQkgICAgIHpmY3BfZnNmLm8gemZjcF9zeXNmc19hZGFwdGVyLm8gemZjcF9zeXNmc19wb3J0Lm8gXAorCSAgICAgemZjcF9mc2YubyB6ZmNwX2RiZi5vIHpmY3Bfc3lzZnNfYWRhcHRlci5vIHpmY3Bfc3lzZnNfcG9ydC5vIFwKIAkgICAgIHpmY3Bfc3lzZnNfdW5pdC5vIHpmY3Bfc3lzZnNfZHJpdmVyLm8KIAogb2JqLSQoQ09ORklHX1pGQ1ApICs9IHpmY3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggYmZlM2JhNy4uMGI1MDg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC0xMjIsOTUgKzEyMiw2IEBACiAKICNkZWZpbmUgWkZDUF9MT0dfQVJFQQkJCVpGQ1BfTE9HX0FSRUFfT1RIRVIKIAotc3RhdGljIGlubGluZSBpbnQKLXpmY3BfZnNmX3JlcV9pc19zY3NpX2NtbmQoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKLXsKLQlyZXR1cm4gKChmc2ZfcmVxLT5mc2ZfY29tbWFuZCA9PSBGU0ZfUVRDQl9GQ1BfQ01ORCkgJiYKLQkJIShmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfVEFTS19NQU5BR0VNRU5UKSk7Ci19Ci0KLXZvaWQKLXpmY3BfY21kX2RiZl9ldmVudF9mc2YoY29uc3QgY2hhciAqdGV4dCwgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwKLQkJICAgICAgIHZvaWQgKmFkZF9kYXRhLCBpbnQgYWRkX2xlbmd0aCkKLXsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQ7Ci0JaW50IGxldmVsID0gMzsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmRiZl9sb2NrLCBmbGFncyk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9pc19zY3NpX2NtbmQoZnNmX3JlcSkpIHsKLQkJc2NzaV9jbW5kID0gZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2suc2NzaV9jbW5kOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAiZnNmZXJyb3IiKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5jbWRfZGJmLCBsZXZlbCwgdGV4dCk7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAmZnNmX3JlcSwKLQkJCSAgICBzaXplb2YgKHVuc2lnbmVkIGxvbmcpKTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZmc2ZfcmVxLT5zZXFfbm8sCi0JCQkgICAgc2l6ZW9mICh1MzIpKTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZzY3NpX2NtbmQsCi0JCQkgICAgc2l6ZW9mICh1bnNpZ25lZCBsb25nKSk7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAmc2NzaV9jbW5kLT5jbW5kLAotCQkJICAgIG1pbihaRkNQX0NNRF9EQkZfTEVOR1RILCAoaW50KXNjc2lfY21uZC0+Y21kX2xlbikpOwotCQlmb3IgKGkgPSAwOyBpIDwgYWRkX2xlbmd0aDsgaSArPSBaRkNQX0NNRF9EQkZfTEVOR1RIKQotCQkJZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwKLQkJCQkgICAgbGV2ZWwsCi0JCQkJICAgIChjaGFyICopIGFkZF9kYXRhICsgaSwKLQkJCQkgICAgbWluKFpGQ1BfQ01EX0RCRl9MRU5HVEgsIGFkZF9sZW5ndGggLSBpKSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmRiZl9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIFhYWCBhZGRpdGlvbmFsbHkgbG9nIHVuaXQgaWYgYXZhaWxhYmxlICovCi0vKiAtLS0+IGludHJvZHVjZSBuZXcgcGFyYW1ldGVyIGZvciB1bml0LCBzZWUgMi40IGNvZGUgKi8KLXZvaWQKLXpmY3BfY21kX2RiZl9ldmVudF9zY3NpKGNvbnN0IGNoYXIgKnRleHQsIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCkKLXsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwotCXVuaW9uIHpmY3BfcmVxX2RhdGEgKnJlcV9kYXRhOwotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7Ci0JaW50IGxldmVsID0gKChob3N0X2J5dGUoc2NzaV9jbW5kLT5yZXN1bHQpICE9IDApID8gMSA6IDUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlhZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9jbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwotCXJlcV9kYXRhID0gKHVuaW9uIHpmY3BfcmVxX2RhdGEgKikgc2NzaV9jbW5kLT5ob3N0X3NjcmliYmxlOwotCWZzZl9yZXEgPSAocmVxX2RhdGEgPyByZXFfZGF0YS0+c2VuZF9mY3BfY29tbWFuZF90YXNrLmZzZl9yZXEgOiBOVUxMKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZGJmX2xvY2ssIGZsYWdzKTsKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAiaG9zdGJ5dGUiKTsKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCB0ZXh0KTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5jbWRfZGJmLCBsZXZlbCwgJnNjc2lfY21uZC0+cmVzdWx0LCBzaXplb2YgKHUzMikpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAmc2NzaV9jbW5kLAotCQkgICAgc2l6ZW9mICh1bnNpZ25lZCBsb25nKSk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZzY3NpX2NtbmQtPmNtbmQsCi0JCSAgICBtaW4oWkZDUF9DTURfREJGX0xFTkdUSCwgKGludClzY3NpX2NtbmQtPmNtZF9sZW4pKTsKLQlpZiAobGlrZWx5KGZzZl9yZXEpKSB7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAmZnNmX3JlcSwKLQkJCSAgICBzaXplb2YgKHVuc2lnbmVkIGxvbmcpKTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZmc2ZfcmVxLT5zZXFfbm8sCi0JCQkgICAgc2l6ZW9mICh1MzIpKTsKLQl9IGVsc2UgewotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAiIik7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICIiKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZGJmX2xvY2ssIGZsYWdzKTsKLX0KLQotdm9pZAotemZjcF9pbl9lbHNfZGJmX2V2ZW50KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKnRleHQsCi0JCSAgICAgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyLCBpbnQgbGVuZ3RoKQotewotCWludCBsZXZlbCA9IDE7Ci0JaW50IGk7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmluX2Vsc19kYmYsIGxldmVsLCB0ZXh0KTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5pbl9lbHNfZGJmLCBsZXZlbCwgJnN0YXR1c19idWZmZXItPmRfaWQsIDgpOwotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gWkZDUF9JTl9FTFNfREJGX0xFTkdUSCkKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+aW5fZWxzX2RiZiwKLQkJCSAgICBsZXZlbCwKLQkJCSAgICAoY2hhciAqKSBzdGF0dXNfYnVmZmVyLT5wYXlsb2FkICsgaSwKLQkJCSAgICBtaW4oWkZDUF9JTl9FTFNfREJGX0xFTkdUSCwgbGVuZ3RoIC0gaSkpOwotfQotCiAvKioKICAqIHpmY3BfZGV2aWNlX3NldHVwIC0gc2V0dXAgZnVuY3Rpb24KICAqIEBzdHI6IHBvaW50ZXIgdG8gcGFyYW1ldGVyIHN0cmluZwpAQCAtMTAxNyw4MSArOTI4LDYgQEAKIAkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZGF0YV9naWRfcG4pOwogfQogCi0vKioKLSAqIHpmY3BfYWRhcHRlcl9kZWJ1Z19yZWdpc3RlciAtIHJlZ2lzdGVycyBkZWJ1ZyBmZWF0dXJlIGZvciBhbiBhZGFwdGVyCi0gKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIGZvciB3aGljaCBkZWJ1ZyBmZWF0dXJlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZAotICogcmV0dXJuOiAtRU5PTUVNIG9uIGVycm9yLCAwIG90aGVyd2lzZQotICovCi1pbnQKLXpmY3BfYWRhcHRlcl9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCWNoYXIgZGJmX25hbWVbMjBdOwotCi0JLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgU0NTSSBjb21tYW5kIGZhaWx1cmVzIChob3N0Ynl0ZSkgKi8KLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+ZGJmX2xvY2spOwotCi0Jc3ByaW50ZihkYmZfbmFtZSwgWkZDUF9DTURfREJGX05BTUUgIiVzIiwKLQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JYWRhcHRlci0+Y21kX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBaRkNQX0NNRF9EQkZfSU5ERVgsCi0JCQkJCSAgWkZDUF9DTURfREJGX0FSRUFTLAotCQkJCQkgIFpGQ1BfQ01EX0RCRl9MRU5HVEgpOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+Y21kX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+Y21kX2RiZiwgWkZDUF9DTURfREJGX0xFVkVMKTsKLQotCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIFNDU0kgY29tbWFuZCBhYm9ydHMgKi8KLQlzcHJpbnRmKGRiZl9uYW1lLCBaRkNQX0FCT1JUX0RCRl9OQU1FICIlcyIsCi0JCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCWFkYXB0ZXItPmFib3J0X2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBaRkNQX0FCT1JUX0RCRl9JTkRFWCwKLQkJCQkJICAgIFpGQ1BfQUJPUlRfREJGX0FSRUFTLAotCQkJCQkgICAgWkZDUF9BQk9SVF9EQkZfTEVOR1RIKTsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPmFib3J0X2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+YWJvcnRfZGJmLCBaRkNQX0FCT1JUX0RCRl9MRVZFTCk7Ci0KLQkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBpbmNvbWluZyBFTFMgY29tbWFuZHMgKi8KLQlzcHJpbnRmKGRiZl9uYW1lLCBaRkNQX0lOX0VMU19EQkZfTkFNRSAiJXMiLAotCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQlhZGFwdGVyLT5pbl9lbHNfZGJmID0gZGVidWdfcmVnaXN0ZXIoZGJmX25hbWUsIFpGQ1BfSU5fRUxTX0RCRl9JTkRFWCwKLQkJCQkJICAgICBaRkNQX0lOX0VMU19EQkZfQVJFQVMsCi0JCQkJCSAgICAgWkZDUF9JTl9FTFNfREJGX0xFTkdUSCk7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5pbl9lbHNfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5pbl9lbHNfZGJmLCBaRkNQX0lOX0VMU19EQkZfTEVWRUwpOwotCi0JLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgZXJwIGV2ZW50cyAqLwotCXNwcmludGYoZGJmX25hbWUsIFpGQ1BfRVJQX0RCRl9OQU1FICIlcyIsCi0JCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCWFkYXB0ZXItPmVycF9kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgWkZDUF9FUlBfREJGX0lOREVYLAotCQkJCQkgIFpGQ1BfRVJQX0RCRl9BUkVBUywKLQkJCQkJICBaRkNQX0VSUF9EQkZfTEVOR1RIKTsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPmVycF9kYmYsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGFkYXB0ZXItPmVycF9kYmYsIFpGQ1BfRVJQX0RCRl9MRVZFTCk7Ci0KLQlpZiAoIShhZGFwdGVyLT5jbWRfZGJmICYmIGFkYXB0ZXItPmFib3J0X2RiZiAmJgotCSAgICAgIGFkYXB0ZXItPmluX2Vsc19kYmYgJiYgYWRhcHRlci0+ZXJwX2RiZikpIHsKLQkJemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoYWRhcHRlcik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotCi19Ci0KLS8qKgotICogemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVycyBkZWJ1ZyBmZWF0dXJlIGZvciBhbiBhZGFwdGVyCi0gKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIGZvciB3aGljaCBkZWJ1ZyBmZWF0dXJlcyBzaG91bGQgYmUgdW5yZWdpc3RlcmVkCi0gKi8KLXZvaWQKLXpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0gCWRlYnVnX3VucmVnaXN0ZXIoYWRhcHRlci0+YWJvcnRfZGJmKTsKLSAJZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5jbWRfZGJmKTsKLSAJZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5lcnBfZGJmKTsKLSAJZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5pbl9lbHNfZGJmKTsKLQlhZGFwdGVyLT5hYm9ydF9kYmYgPSBOVUxMOwotCWFkYXB0ZXItPmNtZF9kYmYgPSBOVUxMOwotCWFkYXB0ZXItPmVycF9kYmYgPSBOVUxMOwotCWFkYXB0ZXItPmluX2Vsc19kYmYgPSBOVUxMOwotfQotCiB2b2lkCiB6ZmNwX2R1bW15X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTQ2MiwxMCArMTI5OCw2IEBACiAJLyogc2VlIEZDLUZTICovCiAJbm9fZW50cmllcyA9IChmY3BfcnNjbl9oZWFkLT5wYXlsb2FkX2xlbiAvIDQpOwogCi0JemZjcF9pbl9lbHNfZGJmX2V2ZW50KGFkYXB0ZXIsICIjI3JzY24iLCBzdGF0dXNfYnVmZmVyLAotCQkJICAgICAgZmNwX3JzY25faGVhZC0+cGF5bG9hZF9sZW4pOwotCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAidW5zb2xfZWxzX3JzY246Iik7CiAJZm9yIChpID0gMTsgaSA8IG5vX2VudHJpZXM7IGkrKykgewogCQkvKiBza2lwIGhlYWQgYW5kIHN0YXJ0IHdpdGggMXN0IGVsZW1lbnQgKi8KIAkJZmNwX3JzY25fZWxlbWVudCsrOwpAQCAtMTQ5Nyw4ICsxMzI5LDYgQEAKIAkJCSAgICAoWkZDUF9TVEFUVVNfUE9SVF9ESURfRElELCAmcG9ydC0+c3RhdHVzKSkgewogCQkJCVpGQ1BfTE9HX0lORk8oImluY29taW5nIFJTQ04sIHRyeWluZyB0byBvcGVuICIKIAkJCQkJICAgICAgInBvcnQgMHglMDE2THhcbiIsIHBvcnQtPnd3cG4pOwotCQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkJCSAidW5zb2xfZWxzX3JzY251OiIpOwogCQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsCiAJCQkJCQkgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKTsKIAkJCQljb250aW51ZTsKQEAgLTE1MjQsOCArMTM1NCw2IEBACiAJCQkJICovCiAJCQkJWkZDUF9MT0dfSU5GTygiaW5jb21pbmcgUlNDTiwgdHJ5aW5nIHRvIG9wZW4gIgogCQkJCQkgICAgICAicG9ydCAweCUwMTZMeFxuIiwgcG9ydC0+d3dwbik7Ci0JCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCQkJICJ1bnNvbF9lbHNfcnNjbms6Iik7CiAJCQkJemZjcF90ZXN0X2xpbmsocG9ydCk7CiAJCQl9CiAJCX0KQEAgLTE1NDEsOCArMTM2OSw2IEBACiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JemZjcF9pbl9lbHNfZGJmX2V2ZW50KGFkYXB0ZXIsICIjI3Bsb2dpIiwgc3RhdHVzX2J1ZmZlciwgMjgpOwotCiAJcmVhZF9sb2NrX2lycXNhdmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KSB7CiAJCWlmIChwb3J0LT53d3BuID09ICgqKHd3bl90ICopICYgZWxzX2xvZ2ktPm5wb3J0X3d3bikpCkBAIC0xNTU2LDggKzEzODIsNiBAQAogCQkJICAgICAgIHN0YXR1c19idWZmZXItPmRfaWQsCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJfSBlbHNlIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAidW5zb2xfZWxzX3Bsb2dpOiIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAmZWxzX2xvZ2ktPm5wb3J0X3d3biwgOCk7CiAJCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwKTsKIAl9CiB9CkBAIC0xNTcwLDggKzEzOTQsNiBAQAogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXpmY3BfaW5fZWxzX2RiZl9ldmVudChhZGFwdGVyLCAiIyNsb2dvIiwgc3RhdHVzX2J1ZmZlciwgMTYpOwotCiAJcmVhZF9sb2NrX2lycXNhdmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KSB7CiAJCWlmIChwb3J0LT53d3BuID09IGVsc19sb2dvLT5ucG9ydF93d3BuKQpAQCAtMTU4NSw4ICsxNDA3LDYgQEAKIAkJCSAgICAgICBzdGF0dXNfYnVmZmVyLT5kX2lkLAogCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCX0gZWxzZSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwgInVuc29sX2Vsc19sb2dvOiIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAmZWxzX2xvZ28tPm5wb3J0X3d3cG4sIDgpOwogCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCk7CiAJfQogfQpAQCAtMTU5NSw3ICsxNDE1LDYgQEAKIHpmY3BfZnNmX2luY29taW5nX2Vsc191bmtub3duKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlcikKIHsKLQl6ZmNwX2luX2Vsc19kYmZfZXZlbnQoYWRhcHRlciwgIiMjdW5kZWYiLCBzdGF0dXNfYnVmZmVyLCAyNCk7CiAJWkZDUF9MT0dfTk9STUFMKCJ3YXJuaW5nOiB1bmtub3duIGluY29taW5nIEVMUyAweCUwOHggIgogCQkJImZvciBhZGFwdGVyICVzXG4iLCAqKHUzMiAqKSAoc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCksCiAJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKQEAgLTE2MDksMTAgKzE0MjgsMTEgQEAKIAl1MzIgZWxzX3R5cGU7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKIAotCXN0YXR1c19idWZmZXIgPSBmc2ZfcmVxLT5kYXRhLnN0YXR1c19yZWFkLmJ1ZmZlcjsKKwlzdGF0dXNfYnVmZmVyID0gKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopIGZzZl9yZXEtPmRhdGE7CiAJZWxzX3R5cGUgPSAqKHUzMiAqKSAoc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCk7CiAJYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CiAKKwl6ZmNwX3Nhbl9kYmZfZXZlbnRfaW5jb21pbmdfZWxzKGZzZl9yZXEpOwogCWlmIChlbHNfdHlwZSA9PSBMU19QTE9HSSkKIAkJemZjcF9mc2ZfaW5jb21pbmdfZWxzX3Bsb2dpKGFkYXB0ZXIsIHN0YXR1c19idWZmZXIpOwogCWVsc2UgaWYgKGVsc190eXBlID09IExTX0xPR08pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCBiMzBhYmFiLi4wZmM0NjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTIwMiwxOSArMjAyLDkgQEAKIHpmY3BfY2N3X3NldF9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjY3dfZGV2aWNlKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCiAJZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOwotCS8qIG1pZ2h0IGJlIHJhY3ksIGJ1dCB3ZSBjYW5ub3QgdGFrZSBjb25maWdfbG9jayBkdWUgdG8gdGhlIGZhY3QgdGhhdAotCSAgIGZjX3JlbW90ZV9wb3J0X2RlbGV0ZSBtaWdodCBzbGVlcCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KQotCQlpZiAocG9ydC0+cnBvcnQpIHsKLQkJCXJwb3J0ID0gcG9ydC0+cnBvcnQ7Ci0JCQlwb3J0LT5ycG9ydCA9IE5VTEw7Ci0JCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocnBvcnQpOwotCQl9CiAJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjZmYjNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyAqCisgKiBsaW51eC9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCisgKgorICogRkNQIGFkYXB0ZXIgZHJpdmVyIGZvciBJQk0gZVNlcnZlciB6U2VyaWVzCisgKgorICogRGVidWdnaW5nIGZhY2lsaXRpZXMKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA1CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2RlZmluZSBaRkNQX0RCRl9SRVZJU0lPTiAiJFJldmlzaW9uJCIKKworI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSAiemZjcF9leHQuaCIKKworc3RhdGljIHUzMiBkYmZzaXplID0gNDsKKworbW9kdWxlX3BhcmFtKGRiZnNpemUsIHVpbnQsIDA0MDApOworTU9EVUxFX1BBUk1fREVTQyhkYmZzaXplLAorCQkgIm51bWJlciBvZiBwYWdlcyBmb3IgZWFjaCBkZWJ1ZyBmZWF0dXJlIGFyZWEgKGRlZmF1bHQgNCkiKTsKKworI2RlZmluZSBaRkNQX0xPR19BUkVBCQkJWkZDUF9MT0dfQVJFQV9PVEhFUgorCitzdGF0aWMgaW5saW5lIGludAoremZjcF9kYmZfc3RjayhjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICpsYWJlbCwgdW5zaWduZWQgbG9uZyBsb25nIHN0Y2spCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHNlYzsKKwlzdHJ1Y3QgdGltZXNwZWMgeHRpbWU7CisJaW50IGxlbiA9IDA7CisKKwlzdGNrIC09IDB4ODEyNmQ2MGU0NjAwMDAwMExMIC0gKDB4M2MyNjcwMExMICogMTAwMDAwMCAqIDQwOTYpOworCXNlYyA9IHN0Y2sgPj4gMTI7CisJZG9fZGl2KHNlYywgMTAwMDAwMCk7CisJeHRpbWUudHZfc2VjID0gc2VjOworCXN0Y2sgLT0gKHNlYyAqIDEwMDAwMDApIDw8IDEyOworCXh0aW1lLnR2X25zZWMgPSAoKHN0Y2sgKiAxMDAwKSA+PiAxMik7CisJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiUtMjRzJTAxMWx1OiUwNmx1XG4iLAorCQkgICAgICAgbGFiZWwsIHh0aW1lLnR2X3NlYywgeHRpbWUudHZfbnNlYyk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHpmY3BfZGJmX3RhZyhjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgY2hhciAqdGFnKQoreworCWludCBsZW4gPSAwLCBpOworCisJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiUtMjRzIiwgbGFiZWwpOworCWZvciAoaSA9IDA7IGkgPCBaRkNQX0RCRl9UQUdfU0laRTsgaSsrKQorCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiJWMiLCB0YWdbaV0pOworCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludAoremZjcF9kYmZfdmlldyhjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmc7CisJaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiJS0yNHMiLCBsYWJlbCk7CisJdmFfc3RhcnQoYXJnLCBmb3JtYXQpOworCWxlbiArPSB2c3ByaW50ZihvdXRfYnVmICsgbGVuLCBmb3JtYXQsIGFyZyk7CisJdmFfZW5kKGFyZyk7CisJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50Cit6ZmNwX2RiZl92aWV3X2R1bXAoY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqbGFiZWwsCisJCSAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgaW50IG9mZnNldCwgaW50IHRvdGFsX3NpemUpCit7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID09IDApCisJCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICIlLTI0cyAgIiwgbGFiZWwpOworCisJd2hpbGUgKGJ1Zmxlbi0tKSB7CisJCWlmIChvZmZzZXQgPiAwKSB7CisJCQlpZiAoKG9mZnNldCAlIDMyKSA9PSAwKQorCQkJCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiUtMjRjICAiLCAnICcpOworCQkJZWxzZSBpZiAoKG9mZnNldCAlIDQpID09IDApCisJCQkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiAiKTsKKwkJfQorCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiJTAyeCIsICpidWZmZXIrKyk7CisJCWlmICgrK29mZnNldCA9PSB0b3RhbF9zaXplKSB7CisJCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHRvdGFsX3NpemUgPT0gMCkKKwkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW5saW5lIGludAoremZjcF9kYmZfdmlld19oZWFkZXIoZGVidWdfaW5mb190ICogaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LCBpbnQgYXJlYSwKKwkJICAgICBkZWJ1Z19lbnRyeV90ICogZW50cnksIGNoYXIgKm91dF9idWYpCit7CisJc3RydWN0IHpmY3BfZGJmX2R1bXAgKmR1bXAgPSAoc3RydWN0IHpmY3BfZGJmX2R1bXAgKilERUJVR19EQVRBKGVudHJ5KTsKKwlpbnQgbGVuID0gMDsKKworCWlmIChzdHJuY21wKGR1bXAtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgIT0gMCkgeworCQlsZW4gKz0gemZjcF9kYmZfc3RjayhvdXRfYnVmICsgbGVuLCAidGltZXN0YW1wIiwKKwkJCQkgICAgIGVudHJ5LT5pZC5zdGNrKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImNwdSIsICIlMDJpIiwKKwkJCQkgICAgIGVudHJ5LT5pZC5maWVsZHMuY3B1aWQpOworCX0gZWxzZSB7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3X2R1bXAob3V0X2J1ZiArIGxlbiwgTlVMTCwKKwkJCQkJICBkdW1wLT5kYXRhLAorCQkJCQkgIGR1bXAtPnNpemUsCisJCQkJCSAgZHVtcC0+b2Zmc2V0LCBkdW1wLT50b3RhbF9zaXplKTsKKwkJaWYgKChkdW1wLT5vZmZzZXQgKyBkdW1wLT5zaXplKSA9PSBkdW1wLT50b3RhbF9zaXplKQorCQkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworaW5saW5lIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOworCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IGZzZl9yZXEtPnF0Y2I7CisJdW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwgKnByb3Rfc3RhdHVzX3F1YWwgPQorCSAgICAmcXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWw7CisJdW5pb24gZnNmX3N0YXR1c19xdWFsICpmc2Zfc3RhdHVzX3F1YWwgPSAmcXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQ7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0OworCXN0cnVjdCB6ZmNwX3NlbmRfZWxzICpzZW5kX2VsczsKKwlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPmhiYV9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlICpyZXNwb25zZSA9ICZyZWMtPnR5cGUucmVzcG9uc2U7CisJaW50IGxldmVsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJc3RybmNweShyZWMtPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSk7CisKKwlpZiAoKHF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cyAhPSBGU0ZfUFJPVF9HT09EKSAmJgorCSAgICAocXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzICE9IEZTRl9QUk9UX0ZTRl9TVEFUVVNfUFJFU0VOVEVEKSkgeworCQlzdHJuY3B5KHJlYy0+dGFnMiwgInBlcnIiLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJCWxldmVsID0gMTsKKwl9IGVsc2UgaWYgKHF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzICE9IEZTRl9HT09EKSB7CisJCXN0cm5jcHkocmVjLT50YWcyLCAiZmVyciIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJbGV2ZWwgPSAxOworCX0gZWxzZSBpZiAoKGZzZl9yZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCkgfHwKKwkJICAgKGZzZl9yZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX09QRU5fTFVOKSkgeworCQlzdHJuY3B5KHJlYy0+dGFnMiwgIm9wZW4iLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJCWxldmVsID0gNDsKKwl9IGVsc2UgaWYgKChwcm90X3N0YXR1c19xdWFsLT5kb3VibGV3b3JkWzBdICE9IDApIHx8CisJCSAgIChwcm90X3N0YXR1c19xdWFsLT5kb3VibGV3b3JkWzFdICE9IDApIHx8CisJCSAgIChmc2Zfc3RhdHVzX3F1YWwtPmRvdWJsZXdvcmRbMF0gIT0gMCkgfHwKKwkJICAgKGZzZl9zdGF0dXNfcXVhbC0+ZG91Ymxld29yZFsxXSAhPSAwKSkgeworCQlzdHJuY3B5KHJlYy0+dGFnMiwgInF1YWwiLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJCWxldmVsID0gMzsKKwl9IGVsc2UgeworCQlzdHJuY3B5KHJlYy0+dGFnMiwgIm5vcm0iLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJCWxldmVsID0gNjsKKwl9CisKKwlyZXNwb25zZS0+ZnNmX2NvbW1hbmQgPSBmc2ZfcmVxLT5mc2ZfY29tbWFuZDsKKwlyZXNwb25zZS0+ZnNmX3JlcWlkID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcTsKKwlyZXNwb25zZS0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOworCXJlc3BvbnNlLT5mc2ZfaXNzdWVkID0gZnNmX3JlcS0+aXNzdWVkOworCXJlc3BvbnNlLT5mc2ZfcHJvdF9zdGF0dXMgPSBxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXM7CisJcmVzcG9uc2UtPmZzZl9zdGF0dXMgPSBxdGNiLT5oZWFkZXIuZnNmX3N0YXR1czsKKwltZW1jcHkocmVzcG9uc2UtPmZzZl9wcm90X3N0YXR1c19xdWFsLAorCSAgICAgICBwcm90X3N0YXR1c19xdWFsLCBGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFKTsKKwltZW1jcHkocmVzcG9uc2UtPmZzZl9zdGF0dXNfcXVhbCwKKwkgICAgICAgZnNmX3N0YXR1c19xdWFsLCBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFKTsKKwlyZXNwb25zZS0+ZnNmX3JlcV9zdGF0dXMgPSBmc2ZfcmVxLT5zdGF0dXM7CisJcmVzcG9uc2UtPnNiYWxfZmlyc3QgPSBmc2ZfcmVxLT5zYmFsX2ZpcnN0OworCXJlc3BvbnNlLT5zYmFsX2N1cnIgPSBmc2ZfcmVxLT5zYmFsX2N1cnI7CisJcmVzcG9uc2UtPnNiYWxfbGFzdCA9IGZzZl9yZXEtPnNiYWxfbGFzdDsKKwlyZXNwb25zZS0+cG9vbCA9IGZzZl9yZXEtPnBvb2wgIT0gTlVMTDsKKwlyZXNwb25zZS0+ZXJwX2FjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXEtPmVycF9hY3Rpb247CisKKwlzd2l0Y2ggKGZzZl9yZXEtPmZzZl9jb21tYW5kKSB7CisJY2FzZSBGU0ZfUVRDQl9GQ1BfQ01ORDoKKwkJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQpCisJCQlicmVhazsKKwkJc2NzaV9jbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilmc2ZfcmVxLT5kYXRhOworCQlpZiAoc2NzaV9jbW5kICE9IE5VTEwpIHsKKwkJCXJlc3BvbnNlLT5kYXRhLnNlbmRfZmNwLnNjc2lfY21uZAorCQkJICAgID0gKHVuc2lnbmVkIGxvbmcpc2NzaV9jbW5kOworCQkJcmVzcG9uc2UtPmRhdGEuc2VuZF9mY3Auc2NzaV9zZXJpYWwKKwkJCSAgICA9IHNjc2lfY21uZC0+c2VyaWFsX251bWJlcjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElEOgorCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfUE9SVDoKKwljYXNlIEZTRl9RVENCX0NMT1NFX1BIWVNJQ0FMX1BPUlQ6CisJCXBvcnQgPSAoc3RydWN0IHpmY3BfcG9ydCAqKWZzZl9yZXEtPmRhdGE7CisJCXJlc3BvbnNlLT5kYXRhLnBvcnQud3dwbiA9IHBvcnQtPnd3cG47CisJCXJlc3BvbnNlLT5kYXRhLnBvcnQuZF9pZCA9IHBvcnQtPmRfaWQ7CisJCXJlc3BvbnNlLT5kYXRhLnBvcnQucG9ydF9oYW5kbGUgPSBxdGNiLT5oZWFkZXIucG9ydF9oYW5kbGU7CisJCWJyZWFrOworCisJY2FzZSBGU0ZfUVRDQl9PUEVOX0xVTjoKKwljYXNlIEZTRl9RVENCX0NMT1NFX0xVTjoKKwkJdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopZnNmX3JlcS0+ZGF0YTsKKwkJcG9ydCA9IHVuaXQtPnBvcnQ7CisJCXJlc3BvbnNlLT5kYXRhLnVuaXQud3dwbiA9IHBvcnQtPnd3cG47CisJCXJlc3BvbnNlLT5kYXRhLnVuaXQuZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47CisJCXJlc3BvbnNlLT5kYXRhLnVuaXQucG9ydF9oYW5kbGUgPSBxdGNiLT5oZWFkZXIucG9ydF9oYW5kbGU7CisJCXJlc3BvbnNlLT5kYXRhLnVuaXQubHVuX2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5sdW5faGFuZGxlOworCQlicmVhazsKKworCWNhc2UgRlNGX1FUQ0JfU0VORF9FTFM6CisJCXNlbmRfZWxzID0gKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopZnNmX3JlcS0+ZGF0YTsKKwkJcmVzcG9uc2UtPmRhdGEuc2VuZF9lbHMuZF9pZCA9IHF0Y2ItPmJvdHRvbS5zdXBwb3J0LmRfaWQ7CisJCXJlc3BvbnNlLT5kYXRhLnNlbmRfZWxzLmxzX2NvZGUgPSBzZW5kX2Vscy0+bHNfY29kZSA+PiAyNDsKKwkJYnJlYWs7CisKKwljYXNlIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5EOgorCWNhc2UgRlNGX1FUQ0JfU0VORF9HRU5FUklDOgorCWNhc2UgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEE6CisJY2FzZSBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEE6CisJY2FzZSBGU0ZfUVRDQl9ET1dOTE9BRF9DT05UUk9MX0ZJTEU6CisJY2FzZSBGU0ZfUVRDQl9VUExPQURfQ09OVFJPTF9GSUxFOgorCQlicmVhazsKKwl9CisKKwlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCBsZXZlbCwKKwkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7Cit9CisKK2lubGluZSB2b2lkCit6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnN0YXR1c19idWZmZXIpCit7CisJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5oYmFfZGJmX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOworCW1lbXNldChyZWMsIDAsIHNpemVvZihzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCkpOworCXN0cm5jcHkocmVjLT50YWcsICJzdGF0IiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCXN0cm5jcHkocmVjLT50YWcyLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKKworCXJlYy0+dHlwZS5zdGF0dXMuZmFpbGVkID0gYWRhcHRlci0+c3RhdHVzX3JlYWRfZmFpbGVkOworCWlmIChzdGF0dXNfYnVmZmVyICE9IE5VTEwpIHsKKwkJcmVjLT50eXBlLnN0YXR1cy5zdGF0dXNfdHlwZSA9IHN0YXR1c19idWZmZXItPnN0YXR1c190eXBlOworCQlyZWMtPnR5cGUuc3RhdHVzLnN0YXR1c19zdWJ0eXBlID0gc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3N1YnR5cGU7CisJCW1lbWNweSgmcmVjLT50eXBlLnN0YXR1cy5xdWV1ZV9kZXNpZ25hdG9yLAorCQkgICAgICAgJnN0YXR1c19idWZmZXItPnF1ZXVlX2Rlc2lnbmF0b3IsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yKSk7CisKKwkJc3dpdGNoIChzdGF0dXNfYnVmZmVyLT5zdGF0dXNfdHlwZSkgeworCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TRU5TRV9EQVRBX0FWQUlMOgorCQkJcmVjLT50eXBlLnN0YXR1cy5wYXlsb2FkX3NpemUgPQorCQkJICAgIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfU0VOU0VfREFUQV9BVkFJTDsKKwkJCWJyZWFrOworCisJCWNhc2UgRlNGX1NUQVRVU19SRUFEX0JJVF9FUlJPUl9USFJFU0hPTEQ6CisJCQlyZWMtPnR5cGUuc3RhdHVzLnBheWxvYWRfc2l6ZSA9CisJCQkgICAgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9CSVRfRVJST1JfVEhSRVNIT0xEOworCQkJYnJlYWs7CisKKwkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfTElOS19ET1dOOgorCQkJc3dpdGNoIChzdGF0dXNfYnVmZmVyLT5zdGF0dXNfc3VidHlwZSkgeworCQkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX05PX1BIWVNJQ0FMX0xJTks6CisJCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfRkRJU0NfRkFJTEVEOgorCQkJCXJlYy0+dHlwZS5zdGF0dXMucGF5bG9hZF9zaXplID0KKwkJCQkJc2l6ZW9mKHN0cnVjdCBmc2ZfbGlua19kb3duX2luZm8pOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfRkVBVFVSRV9VUERBVEVfQUxFUlQ6CisJCQlyZWMtPnR5cGUuc3RhdHVzLnBheWxvYWRfc2l6ZSA9CisJCQkgICAgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9GRUFUVVJFX1VQREFURV9BTEVSVDsKKwkJCWJyZWFrOworCQl9CisJCW1lbWNweSgmcmVjLT50eXBlLnN0YXR1cy5wYXlsb2FkLAorCQkgICAgICAgJnN0YXR1c19idWZmZXItPnBheWxvYWQsIHJlYy0+dHlwZS5zdGF0dXMucGF5bG9hZF9zaXplKTsKKwl9CisKKwlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCAyLAorCQkgICAgcmVjLCBzaXplb2Yoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKK30KKworaW5saW5lIHZvaWQKK3pmY3BfaGJhX2RiZl9ldmVudF9xZGlvKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBzdGF0dXMsCisJCQl1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwgdW5zaWduZWQgaW50IHNpZ2FfZXJyb3IsCisJCQlpbnQgc2JhbF9pbmRleCwgaW50IHNiYWxfY291bnQpCit7CisJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5oYmFfZGJmX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOworCW1lbXNldChyZWMsIDAsIHNpemVvZihzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCkpOworCXN0cm5jcHkocmVjLT50YWcsICJxZGlvIiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCXJlYy0+dHlwZS5xZGlvLnN0YXR1cyA9IHN0YXR1czsKKwlyZWMtPnR5cGUucWRpby5xZGlvX2Vycm9yID0gcWRpb19lcnJvcjsKKwlyZWMtPnR5cGUucWRpby5zaWdhX2Vycm9yID0gc2lnYV9lcnJvcjsKKwlyZWMtPnR5cGUucWRpby5zYmFsX2luZGV4ID0gc2JhbF9pbmRleDsKKwlyZWMtPnR5cGUucWRpby5zYmFsX2NvdW50ID0gc2JhbF9jb3VudDsKKwlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCAwLAorCQkgICAgcmVjLCBzaXplb2Yoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3pmY3BfaGJhX2RiZl92aWV3X3Jlc3BvbnNlKGNoYXIgKm91dF9idWYsCisJCQkgICBzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9yZXNwb25zZSAqcmVjKQoreworCWludCBsZW4gPSAwOworCisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9jb21tYW5kIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+ZnNmX2NvbW1hbmQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2ZfcmVxaWQiLCAiMHglMEx4IiwKKwkJCSAgICAgcmVjLT5mc2ZfcmVxaWQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2Zfc2Vxbm8iLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5mc2Zfc2Vxbm8pOworCWxlbiArPSB6ZmNwX2RiZl9zdGNrKG91dF9idWYgKyBsZW4sICJmc2ZfaXNzdWVkIiwgcmVjLT5mc2ZfaXNzdWVkKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3Byb3Rfc3RhdHVzIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+ZnNmX3Byb3Rfc3RhdHVzKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3N0YXR1cyIsICIweCUwOHgiLAorCQkJICAgICByZWMtPmZzZl9zdGF0dXMpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3X2R1bXAob3V0X2J1ZiArIGxlbiwgImZzZl9wcm90X3N0YXR1c19xdWFsIiwKKwkJCQkgIHJlYy0+ZnNmX3Byb3Rfc3RhdHVzX3F1YWwsCisJCQkJICBGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFLAorCQkJCSAgMCwgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRSk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAiZnNmX3N0YXR1c19xdWFsIiwKKwkJCQkgIHJlYy0+ZnNmX3N0YXR1c19xdWFsLAorCQkJCSAgRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSwKKwkJCQkgIDAsIEZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkUpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2ZfcmVxX3N0YXR1cyIsICIweCUwOHgiLAorCQkJICAgICByZWMtPmZzZl9yZXFfc3RhdHVzKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2JhbF9maXJzdCIsICIweCUwMngiLAorCQkJICAgICByZWMtPnNiYWxfZmlyc3QpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzYmFsX2N1cnIiLCAiMHglMDJ4IiwKKwkJCSAgICAgcmVjLT5zYmFsX2N1cnIpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzYmFsX2xhc3QiLCAiMHglMDJ4IiwKKwkJCSAgICAgcmVjLT5zYmFsX2xhc3QpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJwb29sIiwgIjB4JTAyeCIsIHJlYy0+cG9vbCk7CisKKwlzd2l0Y2ggKHJlYy0+ZnNmX2NvbW1hbmQpIHsKKwljYXNlIEZTRl9RVENCX0ZDUF9DTU5EOgorCQlpZiAocmVjLT5mc2ZfcmVxX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQpCisJCQlicmVhazsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfY21uZCIsICIweCUwTHgiLAorCQkJCSAgICAgcmVjLT5kYXRhLnNlbmRfZmNwLnNjc2lfY21uZCk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX3NlcmlhbCIsICIweCUwMTZMeCIsCisJCQkJICAgICByZWMtPmRhdGEuc2VuZF9mY3Auc2NzaV9zZXJpYWwpOworCQlicmVhazsKKworCWNhc2UgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElEOgorCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfUE9SVDoKKwljYXNlIEZTRl9RVENCX0NMT1NFX1BIWVNJQ0FMX1BPUlQ6CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJ3d3BuIiwgIjB4JTAxNkx4IiwKKwkJCQkgICAgIHJlYy0+ZGF0YS5wb3J0Lnd3cG4pOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZF9pZCIsICIweCUwNngiLAorCQkJCSAgICAgcmVjLT5kYXRhLnBvcnQuZF9pZCk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJwb3J0X2hhbmRsZSIsICIweCUwOHgiLAorCQkJCSAgICAgcmVjLT5kYXRhLnBvcnQucG9ydF9oYW5kbGUpOworCQlicmVhazsKKworCWNhc2UgRlNGX1FUQ0JfT1BFTl9MVU46CisJY2FzZSBGU0ZfUVRDQl9DTE9TRV9MVU46CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJ3d3BuIiwgIjB4JTAxNkx4IiwKKwkJCQkgICAgIHJlYy0+ZGF0YS51bml0Lnd3cG4pOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmNwX2x1biIsICIweCUwMTZMeCIsCisJCQkJICAgICByZWMtPmRhdGEudW5pdC5mY3BfbHVuKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInBvcnRfaGFuZGxlIiwgIjB4JTA4eCIsCisJCQkJICAgICByZWMtPmRhdGEudW5pdC5wb3J0X2hhbmRsZSk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJsdW5faGFuZGxlIiwgIjB4JTA4eCIsCisJCQkJICAgICByZWMtPmRhdGEudW5pdC5sdW5faGFuZGxlKTsKKwkJYnJlYWs7CisKKwljYXNlIEZTRl9RVENCX1NFTkRfRUxTOgorCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZF9pZCIsICIweCUwNngiLAorCQkJCSAgICAgcmVjLT5kYXRhLnNlbmRfZWxzLmRfaWQpOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAibHNfY29kZSIsICIweCUwMngiLAorCQkJCSAgICAgcmVjLT5kYXRhLnNlbmRfZWxzLmxzX2NvZGUpOworCQlicmVhazsKKworCWNhc2UgRlNGX1FUQ0JfQUJPUlRfRkNQX0NNTkQ6CisJY2FzZSBGU0ZfUVRDQl9TRU5EX0dFTkVSSUM6CisJY2FzZSBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQToKKwljYXNlIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQToKKwljYXNlIEZTRl9RVENCX0RPV05MT0FEX0NPTlRST0xfRklMRToKKwljYXNlIEZTRl9RVENCX1VQTE9BRF9DT05UUk9MX0ZJTEU6CisJCWJyZWFrOworCX0KKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZmNwX2hiYV9kYmZfdmlld19zdGF0dXMoY2hhciAqb3V0X2J1Ziwgc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfc3RhdHVzICpyZWMpCit7CisJaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmFpbGVkIiwgIjB4JTAyeCIsIHJlYy0+ZmFpbGVkKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic3RhdHVzX3R5cGUiLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5zdGF0dXNfdHlwZSk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInN0YXR1c19zdWJ0eXBlIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+c3RhdHVzX3N1YnR5cGUpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3X2R1bXAob3V0X2J1ZiArIGxlbiwgInF1ZXVlX2Rlc2lnbmF0b3IiLAorCQkJCSAgKGNoYXIgKikmcmVjLT5xdWV1ZV9kZXNpZ25hdG9yLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBmc2ZfcXVldWVfZGVzaWduYXRvciksCisJCQkJICAwLCBzaXplb2Yoc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yKSk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAicGF5bG9hZCIsCisJCQkJICAoY2hhciAqKSZyZWMtPnBheWxvYWQsCisJCQkJICByZWMtPnBheWxvYWRfc2l6ZSwgMCwgcmVjLT5wYXlsb2FkX3NpemUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3pmY3BfaGJhX2RiZl92aWV3X3FkaW8oY2hhciAqb3V0X2J1Ziwgc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcWRpbyAqcmVjKQoreworCWludCBsZW4gPSAwOworCisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInN0YXR1cyIsICIweCUwOHgiLCByZWMtPnN0YXR1cyk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInFkaW9fZXJyb3IiLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5xZGlvX2Vycm9yKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2lnYV9lcnJvciIsICIweCUwOHgiLAorCQkJICAgICByZWMtPnNpZ2FfZXJyb3IpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzYmFsX2luZGV4IiwgIjB4JTAyeCIsCisJCQkgICAgIHJlYy0+c2JhbF9pbmRleCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNiYWxfY291bnQiLCAiMHglMDJ4IiwKKwkJCSAgICAgcmVjLT5zYmFsX2NvdW50KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQKK3pmY3BfaGJhX2RiZl92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKiBpZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCisJCQkgY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqaW5fYnVmKQoreworCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICpyZWMgPSAoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKilpbl9idWY7CisJaW50IGxlbiA9IDA7CisKKwlpZiAoc3RybmNtcChyZWMtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gKz0gemZjcF9kYmZfdGFnKG91dF9idWYgKyBsZW4sICJ0YWciLCByZWMtPnRhZyk7CisJaWYgKGlzYWxwaGEocmVjLT50YWcyWzBdKSkKKwkJbGVuICs9IHpmY3BfZGJmX3RhZyhvdXRfYnVmICsgbGVuLCAidGFnMiIsIHJlYy0+dGFnMik7CisJaWYgKHN0cm5jbXAocmVjLT50YWcsICJyZXNwIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCisJCWxlbiArPSB6ZmNwX2hiYV9kYmZfdmlld19yZXNwb25zZShvdXRfYnVmICsgbGVuLAorCQkJCQkJICAmcmVjLT50eXBlLnJlc3BvbnNlKTsKKwllbHNlIGlmIChzdHJuY21wKHJlYy0+dGFnLCAic3RhdCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQorCQlsZW4gKz0gemZjcF9oYmFfZGJmX3ZpZXdfc3RhdHVzKG91dF9idWYgKyBsZW4sCisJCQkJCQkmcmVjLT50eXBlLnN0YXR1cyk7CisJZWxzZSBpZiAoc3RybmNtcChyZWMtPnRhZywgInFkaW8iLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwkJbGVuICs9IHpmY3BfaGJhX2RiZl92aWV3X3FkaW8ob3V0X2J1ZiArIGxlbiwgJnJlYy0+dHlwZS5xZGlvKTsKKworCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9oYmFfZGJmX3ZpZXcgPSB7CisJInN0cnVjdHVyZWQiLAorCU5VTEwsCisJJnpmY3BfZGJmX3ZpZXdfaGVhZGVyLAorCSZ6ZmNwX2hiYV9kYmZfdmlld19mb3JtYXQsCisJTlVMTCwKKwlOVUxMCit9OworCitpbmxpbmUgdm9pZAorX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fY3QoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLAorCQkJICAgICAgdTMyIHNfaWQsIHUzMiBkX2lkLCB2b2lkICpidWZmZXIsIGludCBidWZsZW4pCit7CisJc3RydWN0IHpmY3Bfc2VuZF9jdCAqc2VuZF9jdCA9IChzdHJ1Y3QgemZjcF9zZW5kX2N0ICopZnNmX3JlcS0+ZGF0YTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gc2VuZF9jdC0+cG9ydDsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgY3RfaGRyICpoZWFkZXIgPSAoc3RydWN0IGN0X2hkciAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPnNhbl9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0ICpjdCA9ICZyZWMtPnR5cGUuY3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zYW5fZGJmX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQocmVjLCAwLCBzaXplb2Yoc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQpKTsKKwlzdHJuY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwlyZWMtPmZzZl9yZXFpZCA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJcmVjLT5mc2Zfc2Vxbm8gPSBmc2ZfcmVxLT5zZXFfbm87CisJcmVjLT5zX2lkID0gc19pZDsKKwlyZWMtPmRfaWQgPSBkX2lkOworCWlmIChzdHJuY21wKHRhZywgIm9jdGMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgeworCQljdC0+dHlwZS5yZXF1ZXN0LmNtZF9yZXFfY29kZSA9IGhlYWRlci0+Y21kX3JzcF9jb2RlOworCQljdC0+dHlwZS5yZXF1ZXN0LnJldmlzaW9uID0gaGVhZGVyLT5yZXZpc2lvbjsKKwkJY3QtPnR5cGUucmVxdWVzdC5nc190eXBlID0gaGVhZGVyLT5nc190eXBlOworCQljdC0+dHlwZS5yZXF1ZXN0LmdzX3N1YnR5cGUgPSBoZWFkZXItPmdzX3N1YnR5cGU7CisJCWN0LT50eXBlLnJlcXVlc3Qub3B0aW9ucyA9IGhlYWRlci0+b3B0aW9uczsKKwkJY3QtPnR5cGUucmVxdWVzdC5tYXhfcmVzX3NpemUgPSBoZWFkZXItPm1heF9yZXNfc2l6ZTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAodGFnLCAicmN0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7CisJCWN0LT50eXBlLnJlc3BvbnNlLmNtZF9yc3BfY29kZSA9IGhlYWRlci0+Y21kX3JzcF9jb2RlOworCQljdC0+dHlwZS5yZXNwb25zZS5yZXZpc2lvbiA9IGhlYWRlci0+cmV2aXNpb247CisJCWN0LT50eXBlLnJlc3BvbnNlLnJlYXNvbl9jb2RlID0gaGVhZGVyLT5yZWFzb25fY29kZTsKKwkJY3QtPnR5cGUucmVzcG9uc2UucmVhc29uX2NvZGVfZXhwbCA9IGhlYWRlci0+cmVhc29uX2NvZGVfZXhwbDsKKwkJY3QtPnR5cGUucmVzcG9uc2UudmVuZG9yX3VuaXF1ZSA9IGhlYWRlci0+dmVuZG9yX3VuaXF1ZTsKKwl9CisJY3QtPnBheWxvYWRfc2l6ZSA9CisJICAgIG1pbihidWZsZW4gLSAoaW50KXNpemVvZihzdHJ1Y3QgY3RfaGRyKSwgWkZDUF9EQkZfQ1RfUEFZTE9BRCk7CisJbWVtY3B5KGN0LT5wYXlsb2FkLCBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGN0X2hkciksIGN0LT5wYXlsb2FkX3NpemUpOworCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNhbl9kYmYsIDMsCisJCSAgICByZWMsIHNpemVvZihzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworfQorCitpbmxpbmUgdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworCXN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0ID0gKHN0cnVjdCB6ZmNwX3NlbmRfY3QgKilmc2ZfcmVxLT5kYXRhOworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjdC0+cG9ydDsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKworCV96ZmNwX3Nhbl9kYmZfZXZlbnRfY29tbW9uX2N0KCJvY3RjIiwgZnNmX3JlcSwKKwkJCQkgICAgICBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KSwKKwkJCQkgICAgICBwb3J0LT5kX2lkLCB6ZmNwX3NnX3RvX2FkZHJlc3MoY3QtPnJlcSksCisJCQkJICAgICAgY3QtPnJlcS0+bGVuZ3RoKTsKK30KKworaW5saW5lIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2N0X3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IHpmY3Bfc2VuZF9jdCAqY3QgPSAoc3RydWN0IHpmY3Bfc2VuZF9jdCAqKWZzZl9yZXEtPmRhdGE7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGN0LT5wb3J0OworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCisJX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fY3QoInJjdGMiLCBmc2ZfcmVxLCBwb3J0LT5kX2lkLAorCQkJCSAgICAgIGZjX2hvc3RfcG9ydF9pZChhZGFwdGVyLT5zY3NpX2hvc3QpLAorCQkJCSAgICAgIHpmY3Bfc2dfdG9fYWRkcmVzcyhjdC0+cmVzcCksCisJCQkJICAgICAgY3QtPnJlc3AtPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fZWxzKGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLAorCQkJICAgICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHUzMiBzX2lkLAorCQkJICAgICAgIHUzMiBkX2lkLCB1OCBsc19jb2RlLCB2b2lkICpidWZmZXIsIGludCBidWZsZW4pCit7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5zYW5fZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqZHVtcCA9IChzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqKXJlYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBvZmZzZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworCWRvIHsKKwkJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkKSk7CisJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJc3RybmNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJCQlyZWMtPmZzZl9yZXFpZCA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJCQlyZWMtPmZzZl9zZXFubyA9IGZzZl9yZXEtPnNlcV9ubzsKKwkJCXJlYy0+c19pZCA9IHNfaWQ7CisJCQlyZWMtPmRfaWQgPSBkX2lkOworCQkJcmVjLT50eXBlLmVscy5sc19jb2RlID0gbHNfY29kZTsKKwkJCWJ1ZmxlbiA9IG1pbihidWZsZW4sIFpGQ1BfREJGX0VMU19NQVhfUEFZTE9BRCk7CisJCQlyZWMtPnR5cGUuZWxzLnBheWxvYWRfc2l6ZSA9IGJ1ZmxlbjsKKwkJCW1lbWNweShyZWMtPnR5cGUuZWxzLnBheWxvYWQsCisJCQkgICAgICAgYnVmZmVyLCBtaW4oYnVmbGVuLCBaRkNQX0RCRl9FTFNfUEFZTE9BRCkpOworCQkJb2Zmc2V0ICs9IG1pbihidWZsZW4sIFpGQ1BfREJGX0VMU19QQVlMT0FEKTsKKwkJfSBlbHNlIHsKKwkJCXN0cm5jcHkoZHVtcC0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJCWR1bXAtPnRvdGFsX3NpemUgPSBidWZsZW47CisJCQlkdW1wLT5vZmZzZXQgPSBvZmZzZXQ7CisJCQlkdW1wLT5zaXplID0gbWluKGJ1ZmxlbiAtIG9mZnNldCwKKwkJCQkJIChpbnQpc2l6ZW9mKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkKQorCQkJCQkgLSAoaW50KXNpemVvZihzdHJ1Y3QgemZjcF9kYmZfZHVtcCkpOworCQkJbWVtY3B5KGR1bXAtPmRhdGEsIGJ1ZmZlciArIG9mZnNldCwgZHVtcC0+c2l6ZSk7CisJCQlvZmZzZXQgKz0gZHVtcC0+c2l6ZTsKKwkJfQorCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5zYW5fZGJmLCBsZXZlbCwKKwkJCSAgICByZWMsIHNpemVvZihzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCkpOworCX0gd2hpbGUgKG9mZnNldCA8IGJ1Zmxlbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7Cit9CisKK2lubGluZSB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworCXN0cnVjdCB6ZmNwX3NlbmRfZWxzICplbHMgPSAoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKilmc2ZfcmVxLT5kYXRhOworCisJX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fZWxzKCJvZWxzIiwgMiwgZnNmX3JlcSwKKwkJCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGVscy0+YWRhcHRlci0+c2NzaV9ob3N0KSwKKwkJCQkgICAgICAgZWxzLT5kX2lkLAorCQkJCSAgICAgICAqKHU4ICopIHpmY3Bfc2dfdG9fYWRkcmVzcyhlbHMtPnJlcSksCisJCQkJICAgICAgIHpmY3Bfc2dfdG9fYWRkcmVzcyhlbHMtPnJlcSksCisJCQkJICAgICAgIGVscy0+cmVxLT5sZW5ndGgpOworfQorCitpbmxpbmUgdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKmVscyA9IChzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKWZzZl9yZXEtPmRhdGE7CisKKwlfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9lbHMoInJlbHMiLCAyLCBmc2ZfcmVxLCBlbHMtPmRfaWQsCisJCQkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChlbHMtPmFkYXB0ZXItPnNjc2lfaG9zdCksCisJCQkJICAgICAgICoodTggKikgemZjcF9zZ190b19hZGRyZXNzKGVscy0+cmVxKSwKKwkJCQkgICAgICAgemZjcF9zZ190b19hZGRyZXNzKGVscy0+cmVzcCksCisJCQkJICAgICAgIGVscy0+cmVzcC0+bGVuZ3RoKTsKK30KKworaW5saW5lIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOworCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyID0KKwkgICAgKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopZnNmX3JlcS0+ZGF0YTsKKwlpbnQgbGVuZ3RoID0gKGludClzdGF0dXNfYnVmZmVyLT5sZW5ndGggLQorCSAgICAoaW50KSgodm9pZCAqKSZzdGF0dXNfYnVmZmVyLT5wYXlsb2FkIC0gKHZvaWQgKilzdGF0dXNfYnVmZmVyKTsKKworCV96ZmNwX3Nhbl9kYmZfZXZlbnRfY29tbW9uX2VscygiaWVscyIsIDEsIGZzZl9yZXEsIHN0YXR1c19idWZmZXItPmRfaWQsCisJCQkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChhZGFwdGVyLT5zY3NpX2hvc3QpLAorCQkJCSAgICAgICAqKHU4ICopIHN0YXR1c19idWZmZXItPnBheWxvYWQsCisJCQkJICAgICAgICh2b2lkICopc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCwgbGVuZ3RoKTsKK30KKworc3RhdGljIGludAoremZjcF9zYW5fZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKKwkJCSBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYpCit7CisJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgKnJlYyA9IChzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqKWluX2J1ZjsKKwljaGFyICpidWZmZXIgPSBOVUxMOworCWludCBidWZsZW4gPSAwLCB0b3RhbCA9IDA7CisJaW50IGxlbiA9IDA7CisKKwlpZiAoc3RybmNtcChyZWMtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gKz0gemZjcF9kYmZfdGFnKG91dF9idWYgKyBsZW4sICJ0YWciLCByZWMtPnRhZyk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFpZCIsICIweCUwTHgiLAorCQkJICAgICByZWMtPmZzZl9yZXFpZCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9zZXFubyIsICIweCUwOHgiLAorCQkJICAgICByZWMtPmZzZl9zZXFubyk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNfaWQiLCAiMHglMDZ4IiwgcmVjLT5zX2lkKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZF9pZCIsICIweCUwNngiLCByZWMtPmRfaWQpOworCisJaWYgKHN0cm5jbXAocmVjLT50YWcsICJvY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImNtZF9yZXFfY29kZSIsICIweCUwNHgiLAorCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVxdWVzdC5jbWRfcmVxX2NvZGUpOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAicmV2aXNpb24iLCAiMHglMDJ4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlcXVlc3QucmV2aXNpb24pOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZ3NfdHlwZSIsICIweCUwMngiLAorCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVxdWVzdC5nc190eXBlKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImdzX3N1YnR5cGUiLCAiMHglMDJ4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlcXVlc3QuZ3Nfc3VidHlwZSk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJvcHRpb25zIiwgIjB4JTAyeCIsCisJCQkJICAgICByZWMtPnR5cGUuY3QudHlwZS5yZXF1ZXN0Lm9wdGlvbnMpOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAibWF4X3Jlc19zaXplIiwgIjB4JTA0eCIsCisJCQkJICAgICByZWMtPnR5cGUuY3QudHlwZS5yZXF1ZXN0Lm1heF9yZXNfc2l6ZSk7CisJCXRvdGFsID0gcmVjLT50eXBlLmN0LnBheWxvYWRfc2l6ZTsKKwkJYnVmZmVyID0gcmVjLT50eXBlLmN0LnBheWxvYWQ7CisJCWJ1ZmxlbiA9IG1pbih0b3RhbCwgWkZDUF9EQkZfQ1RfUEFZTE9BRCk7CisJfSBlbHNlIGlmIChzdHJuY21wKHJlYy0+dGFnLCAicmN0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJjbWRfcnNwX2NvZGUiLCAiMHglMDR4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlc3BvbnNlLmNtZF9yc3BfY29kZSk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJyZXZpc2lvbiIsICIweCUwMngiLAorCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVzcG9uc2UucmV2aXNpb24pOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAicmVhc29uX2NvZGUiLCAiMHglMDJ4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlc3BvbnNlLnJlYXNvbl9jb2RlKTsKKwkJbGVuICs9CisJCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJyZWFzb25fY29kZV9leHBsIiwgIjB4JTAyeCIsCisJCQkJICByZWMtPnR5cGUuY3QudHlwZS5yZXNwb25zZS5yZWFzb25fY29kZV9leHBsKTsKKwkJbGVuICs9CisJCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJ2ZW5kb3JfdW5pcXVlIiwgIjB4JTAyeCIsCisJCQkJICByZWMtPnR5cGUuY3QudHlwZS5yZXNwb25zZS52ZW5kb3JfdW5pcXVlKTsKKwkJdG90YWwgPSByZWMtPnR5cGUuY3QucGF5bG9hZF9zaXplOworCQlidWZmZXIgPSByZWMtPnR5cGUuY3QucGF5bG9hZDsKKwkJYnVmbGVuID0gbWluKHRvdGFsLCBaRkNQX0RCRl9DVF9QQVlMT0FEKTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAocmVjLT50YWcsICJvZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDAgfHwKKwkJICAgc3RybmNtcChyZWMtPnRhZywgInJlbHMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCB8fAorCQkgICBzdHJuY21wKHJlYy0+dGFnLCAiaWVscyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJsc19jb2RlIiwgIjB4JTAyeCIsCisJCQkJICAgICByZWMtPnR5cGUuZWxzLmxzX2NvZGUpOworCQl0b3RhbCA9IHJlYy0+dHlwZS5lbHMucGF5bG9hZF9zaXplOworCQlidWZmZXIgPSByZWMtPnR5cGUuZWxzLnBheWxvYWQ7CisJCWJ1ZmxlbiA9IG1pbih0b3RhbCwgWkZDUF9EQkZfRUxTX1BBWUxPQUQpOworCX0KKworCWxlbiArPSB6ZmNwX2RiZl92aWV3X2R1bXAob3V0X2J1ZiArIGxlbiwgInBheWxvYWQiLAorCQkJCSAgYnVmZmVyLCBidWZsZW4sIDAsIHRvdGFsKTsKKworCWlmIChidWZsZW4gPT0gdG90YWwpCisJCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9zYW5fZGJmX3ZpZXcgPSB7CisJInN0cnVjdHVyZWQiLAorCU5VTEwsCisJJnpmY3BfZGJmX3ZpZXdfaGVhZGVyLAorCSZ6ZmNwX3Nhbl9kYmZfdmlld19mb3JtYXQsCisJTlVMTCwKKwlOVUxMCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK196ZmNwX3Njc2lfZGJmX2V2ZW50X2NvbW1vbihjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKKwkJCSAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKKwkJCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpuZXdfZnNmX3JlcSkKK3sKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxID0KKwkgICAgKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKilzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGU7CisJc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+c2NzaV9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9kdW1wICpkdW1wID0gKHN0cnVjdCB6ZmNwX2RiZl9kdW1wICopcmVjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGZjcF9yc3BfaXUgKmZjcF9yc3A7CisJY2hhciAqZmNwX3JzcF9pbmZvID0gTlVMTCwgKmZjcF9zbnNfaW5mbyA9IE5VTEw7CisJaW50IG9mZnNldCA9IDAsIGJ1ZmxlbiA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2NzaV9kYmZfbG9jaywgZmxhZ3MpOworCWRvIHsKKwkJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCkpOworCQlpZiAob2Zmc2V0ID09IDApIHsKKwkJCXN0cm5jcHkocmVjLT50YWcsIHRhZywgWkZDUF9EQkZfVEFHX1NJWkUpOworCQkJc3RybmNweShyZWMtPnRhZzIsIHRhZzIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJCWlmIChzY3NpX2NtbmQtPmRldmljZSkgeworCQkJCXJlYy0+c2NzaV9pZCA9IHNjc2lfY21uZC0+ZGV2aWNlLT5pZDsKKwkJCQlyZWMtPnNjc2lfbHVuID0gc2NzaV9jbW5kLT5kZXZpY2UtPmx1bjsKKwkJCX0KKwkJCXJlYy0+c2NzaV9yZXN1bHQgPSBzY3NpX2NtbmQtPnJlc3VsdDsKKwkJCXJlYy0+c2NzaV9jbW5kID0gKHVuc2lnbmVkIGxvbmcpc2NzaV9jbW5kOworCQkJcmVjLT5zY3NpX3NlcmlhbCA9IHNjc2lfY21uZC0+c2VyaWFsX251bWJlcjsKKwkJCW1lbWNweShyZWMtPnNjc2lfb3Bjb2RlLAorCQkJICAgICAgICZzY3NpX2NtbmQtPmNtbmQsCisJCQkgICAgICAgbWluKChpbnQpc2NzaV9jbW5kLT5jbWRfbGVuLAorCQkJCSAgIFpGQ1BfREJGX1NDU0lfT1BDT0RFKSk7CisJCQlyZWMtPnNjc2lfcmV0cmllcyA9IHNjc2lfY21uZC0+cmV0cmllczsKKwkJCXJlYy0+c2NzaV9hbGxvd2VkID0gc2NzaV9jbW5kLT5hbGxvd2VkOworCQkJaWYgKGZzZl9yZXEgIT0gTlVMTCkgeworCQkJCWZjcF9yc3AgPSAoc3RydWN0IGZjcF9yc3BfaXUgKikKKwkJCQkgICAgJihmc2ZfcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX3JzcCk7CisJCQkJZmNwX3JzcF9pbmZvID0KKwkJCQkgICAgemZjcF9nZXRfZmNwX3JzcF9pbmZvX3B0cihmY3BfcnNwKTsKKwkJCQlmY3Bfc25zX2luZm8gPQorCQkJCSAgICB6ZmNwX2dldF9mY3Bfc25zX2luZm9fcHRyKGZjcF9yc3ApOworCisJCQkJcmVjLT50eXBlLmZjcC5yc3BfdmFsaWRpdHkgPQorCQkJCSAgICBmY3BfcnNwLT52YWxpZGl0eS52YWx1ZTsKKwkJCQlyZWMtPnR5cGUuZmNwLnJzcF9zY3NpX3N0YXR1cyA9CisJCQkJICAgIGZjcF9yc3AtPnNjc2lfc3RhdHVzOworCQkJCXJlYy0+dHlwZS5mY3AucnNwX3Jlc2lkID0gZmNwX3JzcC0+ZmNwX3Jlc2lkOworCQkJCWlmIChmY3BfcnNwLT52YWxpZGl0eS5iaXRzLmZjcF9yc3BfbGVuX3ZhbGlkKQorCQkJCQlyZWMtPnR5cGUuZmNwLnJzcF9jb2RlID0KKwkJCQkJICAgICooZmNwX3JzcF9pbmZvICsgMyk7CisJCQkJaWYgKGZjcF9yc3AtPnZhbGlkaXR5LmJpdHMuZmNwX3Nuc19sZW5fdmFsaWQpIHsKKwkJCQkJYnVmbGVuID0gbWluKChpbnQpZmNwX3JzcC0+ZmNwX3Nuc19sZW4sCisJCQkJCQkgICAgIFpGQ1BfREJGX1NDU0lfTUFYX0ZDUF9TTlNfSU5GTyk7CisJCQkJCXJlYy0+dHlwZS5mY3Auc25zX2luZm9fbGVuID0gYnVmbGVuOworCQkJCQltZW1jcHkocmVjLT50eXBlLmZjcC5zbnNfaW5mbywKKwkJCQkJICAgICAgIGZjcF9zbnNfaW5mbywKKwkJCQkJICAgICAgIG1pbihidWZsZW4sCisJCQkJCQkgICBaRkNQX0RCRl9TQ1NJX0ZDUF9TTlNfSU5GTykpOworCQkJCQlvZmZzZXQgKz0gbWluKGJ1ZmxlbiwKKwkJCQkJCSAgICAgIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPKTsKKwkJCQl9CisKKwkJCQlyZWMtPmZzZl9yZXFpZCA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJCQkJcmVjLT5mc2Zfc2Vxbm8gPSBmc2ZfcmVxLT5zZXFfbm87CisJCQkJcmVjLT5mc2ZfaXNzdWVkID0gZnNmX3JlcS0+aXNzdWVkOworCQkJfQorCQkJaWYgKG5ld19mc2ZfcmVxICE9IE5VTEwpIHsKKwkJCQlyZWMtPnR5cGUubmV3X2ZzZl9yZXEuZnNmX3JlcWlkID0KKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpCisJCQkJICAgIG5ld19mc2ZfcmVxOworCQkJCXJlYy0+dHlwZS5uZXdfZnNmX3JlcS5mc2Zfc2Vxbm8gPQorCQkJCSAgICBuZXdfZnNmX3JlcS0+c2VxX25vOworCQkJCXJlYy0+dHlwZS5uZXdfZnNmX3JlcS5mc2ZfaXNzdWVkID0KKwkJCQkgICAgbmV3X2ZzZl9yZXEtPmlzc3VlZDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cm5jcHkoZHVtcC0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJCWR1bXAtPnRvdGFsX3NpemUgPSBidWZsZW47CisJCQlkdW1wLT5vZmZzZXQgPSBvZmZzZXQ7CisJCQlkdW1wLT5zaXplID0gbWluKGJ1ZmxlbiAtIG9mZnNldCwKKwkJCQkJIChpbnQpc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgICB6ZmNwX3Njc2lfZGJmX3JlY29yZCkgLQorCQkJCQkgKGludClzaXplb2Yoc3RydWN0IHpmY3BfZGJmX2R1bXApKTsKKwkJCW1lbWNweShkdW1wLT5kYXRhLCBmY3Bfc25zX2luZm8gKyBvZmZzZXQsIGR1bXAtPnNpemUpOworCQkJb2Zmc2V0ICs9IGR1bXAtPnNpemU7CisJCX0KKwkJZGVidWdfZXZlbnQoYWRhcHRlci0+c2NzaV9kYmYsIGxldmVsLAorCQkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCkpOworCX0gd2hpbGUgKG9mZnNldCA8IGJ1Zmxlbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2NzaV9kYmZfbG9jaywgZmxhZ3MpOworfQorCitpbmxpbmUgdm9pZAoremZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsCisJCQkgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kKQoreworCV96ZmNwX3Njc2lfZGJmX2V2ZW50X2NvbW1vbigicnNsdCIsCisJCQkJICAgIHRhZywgbGV2ZWwsIGFkYXB0ZXIsIHNjc2lfY21uZCwgTlVMTCk7Cit9CisKK2lubGluZSB2b2lkCit6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kLAorCQkJICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpuZXdfZnNmX3JlcSkKK3sKKwlfemZjcF9zY3NpX2RiZl9ldmVudF9jb21tb24oImFicnQiLAorCQkJCSAgICB0YWcsIDEsIGFkYXB0ZXIsIHNjc2lfY21uZCwgbmV3X2ZzZl9yZXEpOworfQorCitpbmxpbmUgdm9pZAoremZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldChjb25zdCBjaGFyICp0YWcsIHU4IGZsYWcsIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsCisJCQkgICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCkKK3sKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKKworCV96ZmNwX3Njc2lfZGJmX2V2ZW50X2NvbW1vbihmbGFnID09IEZDUF9UQVJHRVRfUkVTRVQgPyAidHJzdCIgOiAibHJzdCIsCisJCQkJICAgIHRhZywgMSwgYWRhcHRlciwgc2NzaV9jbW5kLCBOVUxMKTsKK30KKworc3RhdGljIGludAoremZjcF9zY3NpX2RiZl92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKiBpZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCisJCQkgIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZikKK3sKKwlzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgKnJlYyA9CisJICAgIChzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgKilpbl9idWY7CisJaW50IGxlbiA9IDA7CisKKwlpZiAoc3RybmNtcChyZWMtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gKz0gemZjcF9kYmZfdGFnKG91dF9idWYgKyBsZW4sICJ0YWciLCByZWMtPnRhZyk7CisJbGVuICs9IHpmY3BfZGJmX3RhZyhvdXRfYnVmICsgbGVuLCAidGFnMiIsIHJlYy0+dGFnMik7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfaWQiLCAiMHglMDh4IiwgcmVjLT5zY3NpX2lkKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9sdW4iLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5zY3NpX2x1bik7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfcmVzdWx0IiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+c2NzaV9yZXN1bHQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX2NtbmQiLCAiMHglMEx4IiwKKwkJCSAgICAgcmVjLT5zY3NpX2NtbmQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX3NlcmlhbCIsICIweCUwMTZMeCIsCisJCQkgICAgIHJlYy0+c2NzaV9zZXJpYWwpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3X2R1bXAob3V0X2J1ZiArIGxlbiwgInNjc2lfb3Bjb2RlIiwKKwkJCQkgIHJlYy0+c2NzaV9vcGNvZGUsCisJCQkJICBaRkNQX0RCRl9TQ1NJX09QQ09ERSwKKwkJCQkgIDAsIFpGQ1BfREJGX1NDU0lfT1BDT0RFKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9yZXRyaWVzIiwgIjB4JTAyeCIsCisJCQkgICAgIHJlYy0+c2NzaV9yZXRyaWVzKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9hbGxvd2VkIiwgIjB4JTAyeCIsCisJCQkgICAgIHJlYy0+c2NzaV9hbGxvd2VkKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3JlcWlkIiwgIjB4JTBMeCIsCisJCQkgICAgIHJlYy0+ZnNmX3JlcWlkKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3NlcW5vIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+ZnNmX3NlcW5vKTsKKwlsZW4gKz0gemZjcF9kYmZfc3RjayhvdXRfYnVmICsgbGVuLCAiZnNmX2lzc3VlZCIsIHJlYy0+ZnNmX2lzc3VlZCk7CisJaWYgKHN0cm5jbXAocmVjLT50YWcsICJyc2x0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKKwkJbGVuICs9CisJCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmY3BfcnNwX3ZhbGlkaXR5IiwgIjB4JTAyeCIsCisJCQkJICByZWMtPnR5cGUuZmNwLnJzcF92YWxpZGl0eSk7CisJCWxlbiArPQorCQkgICAgemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmNwX3JzcF9zY3NpX3N0YXR1cyIsCisJCQkJICAiMHglMDJ4IiwgcmVjLT50eXBlLmZjcC5yc3Bfc2NzaV9zdGF0dXMpOworCQlsZW4gKz0KKwkJICAgIHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZjcF9yc3BfcmVzaWQiLCAiMHglMDh4IiwKKwkJCQkgIHJlYy0+dHlwZS5mY3AucnNwX3Jlc2lkKTsKKwkJbGVuICs9CisJCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmY3BfcnNwX2NvZGUiLCAiMHglMDh4IiwKKwkJCQkgIHJlYy0+dHlwZS5mY3AucnNwX2NvZGUpOworCQlsZW4gKz0KKwkJICAgIHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZjcF9zbnNfaW5mb19sZW4iLCAiMHglMDh4IiwKKwkJCQkgIHJlYy0+dHlwZS5mY3Auc25zX2luZm9fbGVuKTsKKwkJbGVuICs9CisJCSAgICB6ZmNwX2RiZl92aWV3X2R1bXAob3V0X2J1ZiArIGxlbiwgImZjcF9zbnNfaW5mbyIsCisJCQkJICAgICAgIHJlYy0+dHlwZS5mY3Auc25zX2luZm8sCisJCQkJICAgICAgIG1pbigoaW50KXJlYy0+dHlwZS5mY3Auc25zX2luZm9fbGVuLAorCQkJCQkgICBaRkNQX0RCRl9TQ1NJX0ZDUF9TTlNfSU5GTyksIDAsCisJCQkJICAgICAgIHJlYy0+dHlwZS5mY3Auc25zX2luZm9fbGVuKTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAocmVjLT50YWcsICJhYnJ0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFpZF9hYm9ydCIsICIweCUwTHgiLAorCQkJCSAgICAgcmVjLT50eXBlLm5ld19mc2ZfcmVxLmZzZl9yZXFpZCk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2Zfc2Vxbm9fYWJvcnQiLCAiMHglMDh4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5uZXdfZnNmX3JlcS5mc2Zfc2Vxbm8pOworCQlsZW4gKz0gemZjcF9kYmZfc3RjayhvdXRfYnVmICsgbGVuLCAiZnNmX2lzc3VlZCIsCisJCQkJICAgICByZWMtPnR5cGUubmV3X2ZzZl9yZXEuZnNmX2lzc3VlZCk7CisJfSBlbHNlIGlmICgoc3RybmNtcChyZWMtPnRhZywgInRyc3QiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgfHwKKwkJICAgKHN0cm5jbXAocmVjLT50YWcsICJscnN0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApKSB7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2ZfcmVxaWRfcmVzZXQiLCAiMHglMEx4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5uZXdfZnNmX3JlcS5mc2ZfcmVxaWQpOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3NlcW5vX3Jlc2V0IiwgIjB4JTA4eCIsCisJCQkJICAgICByZWMtPnR5cGUubmV3X2ZzZl9yZXEuZnNmX3NlcW5vKTsKKwkJbGVuICs9IHpmY3BfZGJmX3N0Y2sob3V0X2J1ZiArIGxlbiwgImZzZl9pc3N1ZWQiLAorCQkJCSAgICAgcmVjLT50eXBlLm5ld19mc2ZfcmVxLmZzZl9pc3N1ZWQpOworCX0KKworCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9zY3NpX2RiZl92aWV3ID0geworCSJzdHJ1Y3R1cmVkIiwKKwlOVUxMLAorCSZ6ZmNwX2RiZl92aWV3X2hlYWRlciwKKwkmemZjcF9zY3NpX2RiZl92aWV3X2Zvcm1hdCwKKwlOVUxMLAorCU5VTEwKK307CisKKy8qKgorICogemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyIC0gcmVnaXN0ZXJzIGRlYnVnIGZlYXR1cmUgZm9yIGFuIGFkYXB0ZXIKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgZm9yIHdoaWNoIGRlYnVnIGZlYXR1cmVzIHNob3VsZCBiZSByZWdpc3RlcmVkCisgKiByZXR1cm46IC1FTk9NRU0gb24gZXJyb3IsIDAgb3RoZXJ3aXNlCisgKi8KK2ludCB6ZmNwX2FkYXB0ZXJfZGVidWdfcmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwljaGFyIGRiZl9uYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CisKKwkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyByZWNvdmVyeSBhY3Rpdml0eSAqLworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5lcnBfZGJmX2xvY2spOworCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX2VycCIsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCWFkYXB0ZXItPmVycF9kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgZGJmc2l6ZSwgMiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHpmY3BfZXJwX2RiZl9yZWNvcmQpKTsKKwlpZiAoIWFkYXB0ZXItPmVycF9kYmYpCisJCWdvdG8gZmFpbGVkOworCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+ZXJwX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKKwlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+ZXJwX2RiZiwgMyk7CisKKwkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBIQkEgKEZTRiBhbmQgUURJTykgY29uZGl0aW9ucyAqLworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5oYmFfZGJmX2xvY2spOworCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX2hiYSIsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCWFkYXB0ZXItPmhiYV9kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgZGJmc2l6ZSwgMSwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQpKTsKKwlpZiAoIWFkYXB0ZXItPmhiYV9kYmYpCisJCWdvdG8gZmFpbGVkOworCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+aGJhX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPmhiYV9kYmYsICZ6ZmNwX2hiYV9kYmZfdmlldyk7CisJZGVidWdfc2V0X2xldmVsKGFkYXB0ZXItPmhiYV9kYmYsIDMpOworCisJLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgU0FOIGNvbW1hbmQgZmFpbHVyZXMgYW5kIHJlY292ZXJ5ICovCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnNhbl9kYmZfbG9jayk7CisJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfc2FuIiwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJYWRhcHRlci0+c2FuX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAxLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCkpOworCWlmICghYWRhcHRlci0+c2FuX2RiZikKKwkJZ290byBmYWlsZWQ7CisJZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5zYW5fZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOworCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+c2FuX2RiZiwgJnpmY3Bfc2FuX2RiZl92aWV3KTsKKwlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+c2FuX2RiZiwgNik7CisKKwkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBTQ1NJIGNvbW1hbmQgZmFpbHVyZXMgYW5kIHJlY292ZXJ5ICovCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnNjc2lfZGJmX2xvY2spOworCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX3Njc2kiLCB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwlhZGFwdGVyLT5zY3NpX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAxLAorCQkJCQkgICBzaXplb2Yoc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkKSk7CisJaWYgKCFhZGFwdGVyLT5zY3NpX2RiZikKKwkJZ290byBmYWlsZWQ7CisJZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5zY3NpX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnNjc2lfZGJmLCAmemZjcF9zY3NpX2RiZl92aWV3KTsKKwlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+c2NzaV9kYmYsIDMpOworCisJcmV0dXJuIDA7CisKKyBmYWlsZWQ6CisJemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoYWRhcHRlcik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoqCisgKiB6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXJzIGRlYnVnIGZlYXR1cmUgZm9yIGFuIGFkYXB0ZXIKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgZm9yIHdoaWNoIGRlYnVnIGZlYXR1cmVzIHNob3VsZCBiZSB1bnJlZ2lzdGVyZWQKKyAqLwordm9pZCB6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCWRlYnVnX3VucmVnaXN0ZXIoYWRhcHRlci0+c2NzaV9kYmYpOworCWRlYnVnX3VucmVnaXN0ZXIoYWRhcHRlci0+c2FuX2RiZik7CisJZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5oYmFfZGJmKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPmVycF9kYmYpOworCWFkYXB0ZXItPnNjc2lfZGJmID0gTlVMTDsKKwlhZGFwdGVyLT5zYW5fZGJmID0gTlVMTDsKKwlhZGFwdGVyLT5oYmFfZGJmID0gTlVMTDsKKwlhZGFwdGVyLT5lcnBfZGJmID0gTlVMTDsKK30KKworI3VuZGVmIFpGQ1BfTE9HX0FSRUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDQ1NWU5MDIuLmQ4MWI3MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtNjYsNyArNjYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKiBHRU5FUkFMIERFRklORVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiB6ZmNwIHZlcnNpb24gbnVtYmVyLCBpdCBjb25zaXN0cyBvZiBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC1sZXZlbCBudW1iZXIgKi8KLSNkZWZpbmUgWkZDUF9WRVJTSU9OCQkiNC4zLjAiCisjZGVmaW5lIFpGQ1BfVkVSU0lPTgkJIjQuNS4wIgogCiAvKioKICAqIHpmY3Bfc2dfdG9fYWRkcmVzcyAtIGRldGVybWluZSBrZXJuZWwgYWRkcmVzcyBmcm9tIHN0cnVjdCBzY2F0dGVybGlzdApAQCAtMTU0LDEzICsxNTQsMTcgQEAKICNkZWZpbmUgWkZDUF9FWENIQU5HRV9DT05GSUdfREFUQV9GSVJTVF9TTEVFUAkxMDAKICNkZWZpbmUgWkZDUF9FWENIQU5HRV9DT05GSUdfREFUQV9SRVRSSUVTCTcKIAorLyogUmV0cnkgNSB0aW1lcyBldmVyeSAyIHNlY29uZCwgdGhlbiBldmVyeSBtaW51dGUgKi8KKyNkZWZpbmUgWkZDUF9FWENIQU5HRV9QT1JUX0RBVEFfU0hPUlRfUkVUUklFUwk1CisjZGVmaW5lIFpGQ1BfRVhDSEFOR0VfUE9SVF9EQVRBX1NIT1JUX1NMRUVQCTIwMAorI2RlZmluZSBaRkNQX0VYQ0hBTkdFX1BPUlRfREFUQV9MT05HX1NMRUVQCTYwMDAKKwogLyogdGltZW91dCB2YWx1ZSBmb3IgImRlZmF1bHQgdGltZXIiIGZvciBmc2YgcmVxdWVzdHMgKi8KICNkZWZpbmUgWkZDUF9GU0ZfUkVRVUVTVF9USU1FT1VUICg2MCpIWik7CiAKIC8qKioqKioqKioqKioqKiogRklCUkUgQ0hBTk5FTCBQUk9UT0NPTCBTUEVDSUZJQyBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB3d25fdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIGZjX2lkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBmY3BfbHVuX3Q7CiAvKiBkYXRhIGxlbmd0aCBmaWVsZCBtYXkgYmUgYXQgdmFyaWFibGUgcG9zaXRpb24gaW4gRkNQLTIgRkNQX0NNTkQgSVUgKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIGZjcF9kbF90OwpAQCAtMjgxLDYgKzI4NSwxNzEgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCisgKiBEQkYgc3R1ZmYKKyAqLworI2RlZmluZSBaRkNQX0RCRl9UQUdfU0laRSAgICAgIDQKKworc3RydWN0IHpmY3BfZGJmX2R1bXAgeworCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CisJdTMyIHRvdGFsX3NpemU7CQkvKiBzaXplIG9mIHRvdGFsIGR1bXAgZGF0YSAqLworCXUzMiBvZmZzZXQ7CQkvKiBob3cgbXVjaCBkYXRhIGhhcyBiZWluZyBhbHJlYWR5IGR1bXBlZCAqLworCXUzMiBzaXplOwkJLyogaG93IG11Y2ggZGF0YSBjb21lcyB3aXRoIHRoaXMgcmVjb3JkICovCisJdTggZGF0YVtdOwkJLyogZHVtcCBkYXRhICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogRklYTUU6IHRvIGJlIGluZmxhdGVkIHdoZW4gcmV3b3JraW5nIHRoZSBlcnAgZGJmICovCitzdHJ1Y3QgemZjcF9lcnBfZGJmX3JlY29yZCB7CisJdTggZHVtbXlbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlIHsKKwl1MzIgZnNmX2NvbW1hbmQ7CisJdTY0IGZzZl9yZXFpZDsKKwl1MzIgZnNmX3NlcW5vOworCXU2NCBmc2ZfaXNzdWVkOworCXUzMiBmc2ZfcHJvdF9zdGF0dXM7CisJdTMyIGZzZl9zdGF0dXM7CisJdTggZnNmX3Byb3Rfc3RhdHVzX3F1YWxbRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRV07CisJdTggZnNmX3N0YXR1c19xdWFsW0ZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkVdOworCXUzMiBmc2ZfcmVxX3N0YXR1czsKKwl1OCBzYmFsX2ZpcnN0OworCXU4IHNiYWxfY3VycjsKKwl1OCBzYmFsX2xhc3Q7CisJdTggcG9vbDsKKwl1NjQgZXJwX2FjdGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1NjQgc2NzaV9jbW5kOworCQkJdTY0IHNjc2lfc2VyaWFsOworCQl9IHNlbmRfZmNwOworCQlzdHJ1Y3QgeworCQkJdTY0IHd3cG47CisJCQl1MzIgZF9pZDsKKwkJCXUzMiBwb3J0X2hhbmRsZTsKKwkJfSBwb3J0OworCQlzdHJ1Y3QgeworCQkJdTY0IHd3cG47CisJCQl1NjQgZmNwX2x1bjsKKwkJCXUzMiBwb3J0X2hhbmRsZTsKKwkJCXUzMiBsdW5faGFuZGxlOworCQl9IHVuaXQ7CisJCXN0cnVjdCB7CisJCQl1MzIgZF9pZDsKKwkJCXU4IGxzX2NvZGU7CisJCX0gc2VuZF9lbHM7CisJfSBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3N0YXR1cyB7CisJdTggZmFpbGVkOworCXUzMiBzdGF0dXNfdHlwZTsKKwl1MzIgc3RhdHVzX3N1YnR5cGU7CisJc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yCisJIHF1ZXVlX2Rlc2lnbmF0b3I7CisJdTMyIHBheWxvYWRfc2l6ZTsKKyNkZWZpbmUgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRAkJCQk4MAorI2RlZmluZSBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX1NFTlNFX0RBVEFfQVZBSUwJCTMyCisjZGVmaW5lIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfQklUX0VSUk9SX1RIUkVTSE9MRAk1NgorI2RlZmluZSBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX0ZFQVRVUkVfVVBEQVRFX0FMRVJUCTIgKiBzaXplb2YodTMyKQorCXU4IHBheWxvYWRbWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcWRpbyB7CisJdTMyIHN0YXR1czsKKwl1MzIgcWRpb19lcnJvcjsKKwl1MzIgc2lnYV9lcnJvcjsKKwl1OCBzYmFsX2luZGV4OworCXU4IHNiYWxfY291bnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgeworCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CisJdTggdGFnMltaRkNQX0RCRl9UQUdfU0laRV07CisJdW5pb24geworCQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9yZXNwb25zZSByZXNwb25zZTsKKwkJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfc3RhdHVzIHN0YXR1czsKKwkJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcWRpbyBxZGlvOworCX0gdHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTE2IGNtZF9yZXFfY29kZTsKKwkJCXU4IHJldmlzaW9uOworCQkJdTggZ3NfdHlwZTsKKwkJCXU4IGdzX3N1YnR5cGU7CisJCQl1OCBvcHRpb25zOworCQkJdTE2IG1heF9yZXNfc2l6ZTsKKwkJfSByZXF1ZXN0OworCQlzdHJ1Y3QgeworCQkJdTE2IGNtZF9yc3BfY29kZTsKKwkJCXU4IHJldmlzaW9uOworCQkJdTggcmVhc29uX2NvZGU7CisJCQl1OCByZWFzb25fY29kZV9leHBsOworCQkJdTggdmVuZG9yX3VuaXF1ZTsKKwkJfSByZXNwb25zZTsKKwl9IHR5cGU7CisJdTMyIHBheWxvYWRfc2l6ZTsKKyNkZWZpbmUgWkZDUF9EQkZfQ1RfUEFZTE9BRAkyNAorCXU4IHBheWxvYWRbWkZDUF9EQkZfQ1RfUEFZTE9BRF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfZWxzIHsKKwl1OCBsc19jb2RlOworCXUzMiBwYXlsb2FkX3NpemU7CisjZGVmaW5lIFpGQ1BfREJGX0VMU19QQVlMT0FECTMyCisjZGVmaW5lIFpGQ1BfREJGX0VMU19NQVhfUEFZTE9BRCAxMDI0CisJdTggcGF5bG9hZFtaRkNQX0RCRl9FTFNfUEFZTE9BRF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgeworCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CisJdTY0IGZzZl9yZXFpZDsKKwl1MzIgZnNmX3NlcW5vOworCXUzMiBzX2lkOworCXUzMiBkX2lkOworCXVuaW9uIHsKKwkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3QgY3Q7CisJCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2VscyBlbHM7CisJfSB0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCB7CisJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1OCB0YWcyW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1MzIgc2NzaV9pZDsKKwl1MzIgc2NzaV9sdW47CisJdTMyIHNjc2lfcmVzdWx0OworCXU2NCBzY3NpX2NtbmQ7CisJdTY0IHNjc2lfc2VyaWFsOworI2RlZmluZSBaRkNQX0RCRl9TQ1NJX09QQ09ERQkxNgorCXU4IHNjc2lfb3Bjb2RlW1pGQ1BfREJGX1NDU0lfT1BDT0RFXTsKKwl1OCBzY3NpX3JldHJpZXM7CisJdTggc2NzaV9hbGxvd2VkOworCXU2NCBmc2ZfcmVxaWQ7CisJdTMyIGZzZl9zZXFubzsKKwl1NjQgZnNmX2lzc3VlZDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1NjQgZnNmX3JlcWlkOworCQkJdTMyIGZzZl9zZXFubzsKKwkJCXU2NCBmc2ZfaXNzdWVkOworCQl9IG5ld19mc2ZfcmVxOworCQlzdHJ1Y3QgeworCQkJdTggcnNwX3ZhbGlkaXR5OworCQkJdTggcnNwX3Njc2lfc3RhdHVzOworCQkJdTMyIHJzcF9yZXNpZDsKKwkJCXU4IHJzcF9jb2RlOworI2RlZmluZSBaRkNQX0RCRl9TQ1NJX0ZDUF9TTlNfSU5GTwkxNgorI2RlZmluZSBaRkNQX0RCRl9TQ1NJX01BWF9GQ1BfU05TX0lORk8JMjU2CisJCQl1MzIgc25zX2luZm9fbGVuOworCQkJdTggc25zX2luZm9bWkZDUF9EQkZfU0NTSV9GQ1BfU05TX0lORk9dOworCQl9IGZjcDsKKwl9IHR5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKICAqIEZDLUZTIHN0dWZmCiAgKi8KICNkZWZpbmUgUl9BX1RPVgkJCQkxMCAvKiBzZWNvbmRzICovCkBAIC0zMzksMzQgKzUwOCw2IEBACiAgKi8KICNkZWZpbmUgWkZDUF9DVF9USU1FT1VUCQkJKDMgKiBSX0FfVE9WKQogCi0KLS8qKioqKioqKioqKioqKioqKiBTMzkwIERFQlVHIEZFQVRVUkUgU1BFQ0lGSUMgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogZGVidWcgZmVhdHVyZSBlbnRyaWVzIHBlciBhZGFwdGVyICovCi0jZGVmaW5lIFpGQ1BfRVJQX0RCRl9JTkRFWCAgICAgMSAKLSNkZWZpbmUgWkZDUF9FUlBfREJGX0FSRUFTICAgICAyCi0jZGVmaW5lIFpGQ1BfRVJQX0RCRl9MRU5HVEggICAgMTYKLSNkZWZpbmUgWkZDUF9FUlBfREJGX0xFVkVMICAgICAzCi0jZGVmaW5lIFpGQ1BfRVJQX0RCRl9OQU1FICAgICAgInpmY3BlcnAiCi0KLSNkZWZpbmUgWkZDUF9DTURfREJGX0lOREVYICAgICAyCi0jZGVmaW5lIFpGQ1BfQ01EX0RCRl9BUkVBUyAgICAgMQotI2RlZmluZSBaRkNQX0NNRF9EQkZfTEVOR1RIICAgIDgKLSNkZWZpbmUgWkZDUF9DTURfREJGX0xFVkVMICAgICAzCi0jZGVmaW5lIFpGQ1BfQ01EX0RCRl9OQU1FICAgICAgInpmY3BjbWQiCi0KLSNkZWZpbmUgWkZDUF9BQk9SVF9EQkZfSU5ERVggICAyCi0jZGVmaW5lIFpGQ1BfQUJPUlRfREJGX0FSRUFTICAgMQotI2RlZmluZSBaRkNQX0FCT1JUX0RCRl9MRU5HVEggIDgKLSNkZWZpbmUgWkZDUF9BQk9SVF9EQkZfTEVWRUwgICA2Ci0jZGVmaW5lIFpGQ1BfQUJPUlRfREJGX05BTUUgICAgInpmY3BhYnQiCi0KLSNkZWZpbmUgWkZDUF9JTl9FTFNfREJGX0lOREVYICAyCi0jZGVmaW5lIFpGQ1BfSU5fRUxTX0RCRl9BUkVBUyAgMQotI2RlZmluZSBaRkNQX0lOX0VMU19EQkZfTEVOR1RIIDgKLSNkZWZpbmUgWkZDUF9JTl9FTFNfREJGX0xFVkVMICA2Ci0jZGVmaW5lIFpGQ1BfSU5fRUxTX0RCRl9OQU1FICAgInpmY3BlbHMiCi0KIC8qKioqKioqKioqKioqKioqKioqKiBMT0dHSU5HIE1BQ1JPUyBBTkQgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTUwMSw2ICs2NDIsNyBAQAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfS0lMTAkweDAwMDAwMDgwCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1BFTkRJTkcJCTB4MDAwMDAxMDAKICNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRAkweDAwMDAwMjAwCisjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfWFBPUlRfT0sJCTB4MDAwMDA4MDAKIAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX1NDU0lfVVAJCQlcCiAJCShaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEIHwJXApAQCAtNjM1LDQ1ICs3NzcsNiBAQAogCW1lbXBvb2xfdCAqZGF0YV9naWRfcG47CiB9OwogCi1zdHJ1Y3QgIHpmY3BfZXhjaGFuZ2VfY29uZmlnX2RhdGF7Ci19OwotCi1zdHJ1Y3QgemZjcF9vcGVuX3BvcnQgewotICAgICAgICBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwotfTsKLQotc3RydWN0IHpmY3BfY2xvc2VfcG9ydCB7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLX07Ci0KLXN0cnVjdCB6ZmNwX29wZW5fdW5pdCB7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKLX07Ci0KLXN0cnVjdCB6ZmNwX2Nsb3NlX3VuaXQgewotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7Ci19OwotCi1zdHJ1Y3QgemZjcF9jbG9zZV9waHlzaWNhbF9wb3J0IHsKLSAgICAgICAgc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLX07Ci0KLXN0cnVjdCB6ZmNwX3NlbmRfZmNwX2NvbW1hbmRfdGFzayB7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwotIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9qaWZmaWVzOwotfTsKLQotc3RydWN0IHpmY3Bfc2VuZF9mY3BfY29tbWFuZF90YXNrX21hbmFnZW1lbnQgewotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7Ci19OwotCi1zdHJ1Y3QgemZjcF9hYm9ydF9mY3BfY29tbWFuZCB7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwotfTsKLQogLyoKICAqIGhlYWRlciBmb3IgQ1RfSVUKICAqLwpAQCAtNzAyLDcgKzgwNSw3IEBACiAvKiBGU19BQ0MgSVUgYW5kIGRhdGEgdW5pdCBmb3IgR0lEX1BOIG5hbWVzZXJ2ZXIgcmVxdWVzdCAqLwogc3RydWN0IGN0X2l1X2dpZF9wbl9yZXNwIHsKIAlzdHJ1Y3QgY3RfaGRyIGhlYWRlcjsKLQlmY19pZF90IGRfaWQ7CisJdTMyIGRfaWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdHlwZWRlZiB2b2lkICgqemZjcF9zZW5kX2N0X2hhbmRsZXJfdCkodW5zaWduZWQgbG9uZyk7CkBAIC03NjgsNyArODcxLDcgQEAKIHN0cnVjdCB6ZmNwX3NlbmRfZWxzIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7Ci0JZmNfaWRfdCBkX2lkOworCXUzMiBkX2lkOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcmVxOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcmVzcDsKIAl1bnNpZ25lZCBpbnQgcmVxX2NvdW50OwpAQCAtNzgxLDMzICs4ODQsNiBAQAogCWludCBzdGF0dXM7CiB9OwogCi1zdHJ1Y3QgemZjcF9zdGF0dXNfcmVhZCB7Ci0Jc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKmJ1ZmZlcjsKLX07Ci0KLXN0cnVjdCB6ZmNwX2ZzZl9kb25lIHsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGU7Ci0JaW50IHN0YXR1czsKLX07Ci0KLS8qIHJlcXVlc3Qgc3BlY2lmaWMgZGF0YSAqLwotdW5pb24gemZjcF9yZXFfZGF0YSB7Ci0Jc3RydWN0IHpmY3BfZXhjaGFuZ2VfY29uZmlnX2RhdGEgZXhjaGFuZ2VfY29uZmlnX2RhdGE7Ci0Jc3RydWN0IHpmY3Bfb3Blbl9wb3J0CQkgIG9wZW5fcG9ydDsKLQlzdHJ1Y3QgemZjcF9jbG9zZV9wb3J0CQkgIGNsb3NlX3BvcnQ7Ci0Jc3RydWN0IHpmY3Bfb3Blbl91bml0CQkgIG9wZW5fdW5pdDsKLQlzdHJ1Y3QgemZjcF9jbG9zZV91bml0CQkgIGNsb3NlX3VuaXQ7Ci0Jc3RydWN0IHpmY3BfY2xvc2VfcGh5c2ljYWxfcG9ydAkgIGNsb3NlX3BoeXNpY2FsX3BvcnQ7Ci0Jc3RydWN0IHpmY3Bfc2VuZF9mY3BfY29tbWFuZF90YXNrIHNlbmRfZmNwX2NvbW1hbmRfdGFzazsKLSAgICAgICAgc3RydWN0IHpmY3Bfc2VuZF9mY3BfY29tbWFuZF90YXNrX21hbmFnZW1lbnQKLQkJCQkJICBzZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudDsKLQlzdHJ1Y3QgemZjcF9hYm9ydF9mY3BfY29tbWFuZAkgIGFib3J0X2ZjcF9jb21tYW5kOwotCXN0cnVjdCB6ZmNwX3NlbmRfY3QgKnNlbmRfY3Q7Ci0Jc3RydWN0IHpmY3Bfc2VuZF9lbHMgKnNlbmRfZWxzOwotCXN0cnVjdCB6ZmNwX3N0YXR1c19yZWFkIAkgIHN0YXR1c19yZWFkOwotCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCAqcG9ydF9kYXRhOwotfTsKLQogc3RydWN0IHpmY3BfcWRpb19xdWV1ZSB7CiAJc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXJbUURJT19NQVhfQlVGRkVSU19QRVJfUV07IC8qIFNCQUxzICovCiAJdTgJCSAgIGZyZWVfaW5kZXg7CSAgICAgIC8qIGluZGV4IG9mIG5leHQgZnJlZSBiZnIKQEAgLTgzOCwyMSArOTE0LDE5IEBACiAJYXRvbWljX3QgICAgICAgICAgICAgICAgcmVmY291bnQ7ICAgICAgICAgIC8qIHJlZmVyZW5jZSBjb3VudCAqLwogCXdhaXRfcXVldWVfaGVhZF90CXJlbW92ZV93cTsgICAgICAgICAvKiBjYW4gYmUgdXNlZCB0byB3YWl0IGZvcgogCQkJCQkJICAgICAgcmVmY291bnQgZHJvcCB0byB6ZXJvICovCi0Jd3duX3QJCQl3d25uOwkgICAgICAgICAgIC8qIFdXTk4gKi8KLQl3d25fdAkJCXd3cG47CSAgICAgICAgICAgLyogV1dQTiAqLwotCWZjX2lkX3QJCQlzX2lkOwkgICAgICAgICAgIC8qIE5fUG9ydCBJRCAqLwogCXd3bl90CQkJcGVlcl93d25uOwkgICAvKiBQMlAgcGVlciBXV05OICovCiAJd3duX3QJCQlwZWVyX3d3cG47CSAgIC8qIFAyUCBwZWVyIFdXUE4gKi8KLQlmY19pZF90CQkJcGVlcl9kX2lkOwkgICAvKiBQMlAgcGVlciBEX0lEICovCisJdTMyCQkJcGVlcl9kX2lkOwkgICAvKiBQMlAgcGVlciBEX0lEICovCisJd3duX3QJCQlwaHlzaWNhbF93d3BuOyAgICAgLyogV1dQTiBvZiBwaHlzaWNhbCBwb3J0ICovCisJdTMyCQkJcGh5c2ljYWxfc19pZDsgICAgIC8qIGxvY2FsIEZDIHBvcnQgSUQgKi8KIAlzdHJ1Y3QgY2N3X2RldmljZSAgICAgICAqY2N3X2RldmljZTsJICAgLyogUy8zOTAgY2N3IGRldmljZSAqLwogCXU4CQkJZmNfc2VydmljZV9jbGFzczsKIAl1MzIJCQlmY190b3BvbG9neTsJICAgLyogRkMgdG9wb2xvZ3kgKi8KLQl1MzIJCQlmY19saW5rX3NwZWVkOwkgICAvKiBGQyBpbnRlcmZhY2Ugc3BlZWQgKi8KIAl1MzIJCQloeWRyYV92ZXJzaW9uOwkgICAvKiBIeWRyYSB2ZXJzaW9uICovCiAJdTMyCQkJZnNmX2xpY192ZXJzaW9uOwotICAgICAgICB1MzIJCQlzdXBwb3J0ZWRfZmVhdHVyZXM7Lyogb2YgRkNQIGNoYW5uZWwgKi8KKwl1MzIJCQlhZGFwdGVyX2ZlYXR1cmVzOyAgLyogRkNQIGNoYW5uZWwgZmVhdHVyZXMgKi8KKwl1MzIJCQljb25uZWN0aW9uX2ZlYXR1cmVzOyAvKiBob3N0IGNvbm5lY3Rpb24gZmVhdHVyZXMgKi8KICAgICAgICAgdTMyCQkJaGFyZHdhcmVfdmVyc2lvbjsgIC8qIG9mIEZDUCBjaGFubmVsICovCi0gICAgICAgIHU4CQkJc2VyaWFsX251bWJlclszMl07IC8qIG9mIGhhcmR3YXJlICovCiAJc3RydWN0IFNjc2lfSG9zdAkqc2NzaV9ob3N0OwkgICAvKiBQb2ludGVyIHRvIG1pZC1sYXllciAqLwogCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIHNjc2lfaG9zdF9ubzsgICAgICAvKiBBc3NpZ25lZCBob3N0IG51bWJlciAqLwogCXVuc2lnbmVkIGNoYXIJCW5hbWVbOV07CkBAIC04ODksMTEgKzk2MywxOCBAQAogCXUzMgkJCWVycF9sb3dfbWVtX2NvdW50OyAvKiBuciBvZiBlcnAgYWN0aW9ucyB3YWl0aW5nCiAJCQkJCQkgICAgICBmb3IgbWVtb3J5ICovCiAJc3RydWN0IHpmY3BfcG9ydAkqbmFtZXNlcnZlcl9wb3J0OyAgLyogYWRhcHRlcidzIG5hbWVzZXJ2ZXIgKi8KLSAgICAgICAgZGVidWdfaW5mb190ICAgICAgICAgICAgKmVycF9kYmY7ICAgICAgICAgIC8qIFMvMzkwIGRlYnVnIGZlYXR1cmVzICovCi0JZGVidWdfaW5mb190ICAgICAgICAgICAgKmFib3J0X2RiZjsKLQlkZWJ1Z19pbmZvX3QgICAgICAgICAgICAqaW5fZWxzX2RiZjsKLQlkZWJ1Z19pbmZvX3QgICAgICAgICAgICAqY21kX2RiZjsKLQlzcGlubG9ja190ICAgICAgICAgICAgICBkYmZfbG9jazsKKwlkZWJ1Z19pbmZvX3QJCSplcnBfZGJmOworCWRlYnVnX2luZm9fdAkJKmhiYV9kYmY7CisJZGVidWdfaW5mb190CQkqc2FuX2RiZjsgICAgICAgICAgLyogZGVidWcgZmVhdHVyZSBhcmVhcyAqLworCWRlYnVnX2luZm9fdAkJKnNjc2lfZGJmOworCXNwaW5sb2NrX3QJCWVycF9kYmZfbG9jazsKKwlzcGlubG9ja190CQloYmFfZGJmX2xvY2s7CisJc3BpbmxvY2tfdAkJc2FuX2RiZl9sb2NrOworCXNwaW5sb2NrX3QJCXNjc2lfZGJmX2xvY2s7CisJc3RydWN0IHpmY3BfZXJwX2RiZl9yZWNvcmQJZXJwX2RiZl9idWY7CisJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQJaGJhX2RiZl9idWY7CisJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQJc2FuX2RiZl9idWY7CisJc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkCXNjc2lfZGJmX2J1ZjsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyX21lbXBvb2wJcG9vbDsgICAgICAvKiBBZGFwdGVyIG1lbW9yeSBwb29scyAqLwogCXN0cnVjdCBxZGlvX2luaXRpYWxpemUgIHFkaW9faW5pdF9kYXRhOyAgICAvKiBmb3IgcWRpb19lc3RhYmxpc2ggKi8KIAlzdHJ1Y3QgZGV2aWNlICAgICAgICAgICBnZW5lcmljX3NlcnZpY2VzOyAgLyogZGlyZWN0b3J5IGZvciBXS0EgcG9ydHMgKi8KQEAgLTkxOSw3ICsxMDAwLDcgQEAKIAlhdG9taWNfdAkgICAgICAgc3RhdHVzOwkgICAgICAgLyogc3RhdHVzIG9mIHRoaXMgcmVtb3RlIHBvcnQgKi8KIAl3d25fdAkJICAgICAgIHd3bm47CSAgICAgICAvKiBXV05OIGlmIGtub3duICovCiAJd3duX3QJCSAgICAgICB3d3BuOwkgICAgICAgLyogV1dQTiAqLwotCWZjX2lkX3QJCSAgICAgICBkX2lkOwkgICAgICAgLyogRF9JRCAqLworCXUzMgkJICAgICAgIGRfaWQ7CSAgICAgICAvKiBEX0lEICovCiAJdTMyCQkgICAgICAgaGFuZGxlOwkgICAgICAgLyogaGFuZGxlIGFzc2lnbmVkIGJ5IEZTRiAqLwogCXN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gZXJwX2FjdGlvbjsgICAgIC8qIHBlbmRpbmcgZXJyb3IgcmVjb3ZlcnkgKi8KICAgICAgICAgYXRvbWljX3QgICAgICAgICAgICAgICBlcnBfY291bnRlcjsKQEAgLTk2MywxMSArMTA0NCwxMyBAQAogCXUzMgkJICAgICAgIGZzZl9jb21tYW5kOyAgICAvKiBGU0YgQ29tbWFuZCBjb3B5ICovCiAJc3RydWN0IGZzZl9xdGNiCSAgICAgICAqcXRjYjsJICAgICAgIC8qIGFkZHJlc3Mgb2YgYXNzb2NpYXRlZCBRVENCICovCiAJdTMyCQkgICAgICAgc2VxX25vOyAgICAgICAgIC8qIFNlcXVlbmNlIG51bWJlciBvZiByZXF1ZXN0ICovCi0gICAgICAgIHVuaW9uIHpmY3BfcmVxX2RhdGEgICAgZGF0YTsgICAgICAgICAgIC8qIEluZm8gZmllbGRzIG9mIHJlcXVlc3QgKi8gCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgZGF0YTsgICAgICAgICAgIC8qIHByaXZhdGUgZGF0YSBvZiByZXF1ZXN0ICovIAogCXN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb247ICAgIC8qIHVzZWQgaWYgdGhpcyByZXF1ZXN0IGlzCiAJCQkJCQkgIGlzc3VlZCBvbiBiZWhhbGYgb2YgZXJwICovCiAJbWVtcG9vbF90CSAgICAgICAqcG9vbDsJICAgICAgIC8qIHVzZWQgaWYgcmVxdWVzdCB3YXMgYWxsb2FjdGVkCiAJCQkJCQkgIGZyb20gZW1lcmdlbmN5IHBvb2wgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgICAgIGlzc3VlZDsgICAgICAgICAvKiByZXF1ZXN0IHNlbnQgdGltZSAoU1RDSykgKi8KKwlzdHJ1Y3QgemZjcF91bml0ICAgICAgICp1bml0OwogfTsKIAogdHlwZWRlZiB2b2lkIHpmY3BfZnNmX3JlcV9oYW5kbGVyX3Qoc3RydWN0IHpmY3BfZnNmX3JlcSopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggY2I0ZjYxMi4uMDIzZjRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC04Miw2ICs4Miw3IEBACiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9xZGlvKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2Yoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZl94Y29uZmlnKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CitzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2ZfeHBvcnQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZl9zdGF0dXNyZWFkKAogCXN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiAKQEAgLTM0NSwxMyArMzQ2LDEzIEBACiAKIAkvKiBhY2MuIHRvIEZDLUZTLCBoYXJkX25wb3J0X2lkIGluIEFESVNDIHNob3VsZCBub3QgYmUgc2V0IGZvciBwb3J0cwogCSAgIHdpdGhvdXQgRkMtQUwtMiBjYXBhYmlsaXR5LCBzbyB3ZSBkb24ndCBzZXQgaXQgKi8KLQlhZGlzYy0+d3dwbiA9IGFkYXB0ZXItPnd3cG47Ci0JYWRpc2MtPnd3bm4gPSBhZGFwdGVyLT53d25uOwotCWFkaXNjLT5ucG9ydF9pZCA9IGFkYXB0ZXItPnNfaWQ7CisJYWRpc2MtPnd3cG4gPSBmY19ob3N0X3BvcnRfbmFtZShhZGFwdGVyLT5zY3NpX2hvc3QpOworCWFkaXNjLT53d25uID0gZmNfaG9zdF9ub2RlX25hbWUoYWRhcHRlci0+c2NzaV9ob3N0KTsKKwlhZGlzYy0+bnBvcnRfaWQgPSBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KTsKIAlaRkNQX0xPR19JTkZPKCJBRElTQyByZXF1ZXN0IGZyb20gc19pZCAweCUwOHggdG8gZF9pZCAweCUwOHggIgogCQkgICAgICAiKHd3cG49MHglMDE2THgsIHd3bm49MHglMDE2THgsICIKIAkJICAgICAgImhhcmRfbnBvcnRfaWQ9MHglMDh4LCBucG9ydF9pZD0weCUwOHgpXG4iLAotCQkgICAgICBhZGFwdGVyLT5zX2lkLCBzZW5kX2Vscy0+ZF9pZCwgKHd3bl90KSBhZGlzYy0+d3dwbiwKKwkJICAgICAgYWRpc2MtPm5wb3J0X2lkLCBzZW5kX2Vscy0+ZF9pZCwgKHd3bl90KSBhZGlzYy0+d3dwbiwKIAkJICAgICAgKHd3bl90KSBhZGlzYy0+d3dubiwgYWRpc2MtPmhhcmRfbnBvcnRfaWQsCiAJCSAgICAgIGFkaXNjLT5ucG9ydF9pZCk7CiAKQEAgLTQwNCw3ICs0MDUsNyBAQAogCXN0cnVjdCB6ZmNwX3NlbmRfZWxzICpzZW5kX2VsczsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0JZmNfaWRfdCBkX2lkOworCXUzMiBkX2lkOwogCXN0cnVjdCB6ZmNwX2xzX2FkaXNjX2FjYyAqYWRpc2M7CiAKIAlzZW5kX2VscyA9IChzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKSBkYXRhOwpAQCAtNDM1LDkgKzQzNiw5IEBACiAJWkZDUF9MT0dfSU5GTygiQURJU0MgcmVzcG9uc2UgZnJvbSBkX2lkIDB4JTA4eCB0byBzX2lkICIKIAkJICAgICAgIjB4JTA4eCAod3dwbj0weCUwMTZMeCwgd3dubj0weCUwMTZMeCwgIgogCQkgICAgICAiaGFyZF9ucG9ydF9pZD0weCUwOHgsIG5wb3J0X2lkPTB4JTA4eClcbiIsCi0JCSAgICAgIGRfaWQsIGFkYXB0ZXItPnNfaWQsICh3d25fdCkgYWRpc2MtPnd3cG4sCi0JCSAgICAgICh3d25fdCkgYWRpc2MtPnd3bm4sIGFkaXNjLT5oYXJkX25wb3J0X2lkLAotCQkgICAgICBhZGlzYy0+bnBvcnRfaWQpOworCQkgICAgICBkX2lkLCBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KSwKKwkJICAgICAgKHd3bl90KSBhZGlzYy0+d3dwbiwgKHd3bl90KSBhZGlzYy0+d3dubiwKKwkJICAgICAgYWRpc2MtPmhhcmRfbnBvcnRfaWQsIGFkaXNjLT5ucG9ydF9pZCk7CiAKIAkvKiBzZXQgd3dubiBmb3IgcG9ydCAqLwogCWlmIChwb3J0LT53d25uID09IDApCkBAIC04ODYsNyArODg3LDcgQEAKIHpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX2ZzZnJlcShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSA9IE5VTEw7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAKIAlpZiAoZXJwX2FjdGlvbi0+ZnNmX3JlcSkgewpAQCAtODk2LDcgKzg5Nyw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZnNmX3JlcSwgJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9oZWFkLCBsaXN0KQogCQkgICAgaWYgKGZzZl9yZXEgPT0gZXJwX2FjdGlvbi0+ZnNmX3JlcSkKIAkJCWJyZWFrOwotCQlpZiAoZnNmX3JlcSA9PSBlcnBfYWN0aW9uLT5mc2ZfcmVxKSB7CisJCWlmIChmc2ZfcmVxICYmIChmc2ZfcmVxLT5lcnBfYWN0aW9uID09IGVycF9hY3Rpb24pKSB7CiAJCQkvKiBmc2ZfcmVxIHN0aWxsIGV4aXN0cyAqLwogCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9jYV9yZXEiKTsKIAkJCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZmc2ZfcmVxLApAQCAtMjI1OCwxNiArMjI1OSwyMSBAQAogc3RhdGljIGludAogemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewotCWludCByZXR2YWw7CisJaW50IHhjb25maWcsIHhwb3J0OwogCi0JLyogZG8gJ2V4Y2hhbmdlIGNvbmZpZ3VyYXRpb24gZGF0YScgKi8KLQlyZXR2YWwgPSB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3hjb25maWcoZXJwX2FjdGlvbik7Ci0JaWYgKHJldHZhbCA9PSBaRkNQX0VSUF9GQUlMRUQpCi0JCXJldHVybiByZXR2YWw7CisJaWYgKGF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKKwkJCSAgICAgJmVycF9hY3Rpb24tPmFkYXB0ZXItPnN0YXR1cykpIHsKKwkJemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZl94cG9ydChlcnBfYWN0aW9uKTsKKwkJYXRvbWljX3NldCgmZXJwX2FjdGlvbi0+YWRhcHRlci0+ZXJwX2NvdW50ZXIsIDApOworCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOworCX0KIAotCS8qIHN0YXJ0IHRoZSBkZXNpcmVkIG51bWJlciBvZiBTdGF0dXMgUmVhZHMgKi8KLQlyZXR2YWwgPSB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3N0YXR1c3JlYWQoZXJwX2FjdGlvbik7Ci0JcmV0dXJuIHJldHZhbDsKKwl4Y29uZmlnID0gemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZl94Y29uZmlnKGVycF9hY3Rpb24pOworCXhwb3J0ICAgPSB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3hwb3J0KGVycF9hY3Rpb24pOworCWlmICgoeGNvbmZpZyA9PSBaRkNQX0VSUF9GQUlMRUQpIHx8ICh4cG9ydCA9PSBaRkNQX0VSUF9GQUlMRUQpKQorCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOworCisJcmV0dXJuIHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2Zfc3RhdHVzcmVhZChlcnBfYWN0aW9uKTsKIH0KIAogLyoKQEAgLTIyOTEsNyArMjI5Nyw5IEBACiAJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfSE9TVF9DT05fSU5JVCwKIAkJCQkgICZhZGFwdGVyLT5zdGF0dXMpOwogCQlaRkNQX0xPR19ERUJVRygiRG9pbmcgZXhjaGFuZ2UgY29uZmlnIGRhdGFcbiIpOworCQl3cml0ZV9sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7CiAJCXpmY3BfZXJwX2FjdGlvbl90b19ydW5uaW5nKGVycF9hY3Rpb24pOworCQl3cml0ZV91bmxvY2soJmFkYXB0ZXItPmVycF9sb2NrKTsKIAkJemZjcF9lcnBfdGltZW91dF9pbml0KGVycF9hY3Rpb24pOwogCQlpZiAoemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGEoZXJwX2FjdGlvbikpIHsKIAkJCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKQEAgLTIzNDgsNiArMjM1Niw3NiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBpbnQKK3pmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2ZfeHBvcnQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKK3sKKwlpbnQgcmV0dmFsID0gWkZDUF9FUlBfU1VDQ0VFREVEOworCWludCByZXRyaWVzOworCWludCBzbGVlcDsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKKworCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWFBPUlRfT0ssICZhZGFwdGVyLT5zdGF0dXMpOworCisJZm9yIChyZXRyaWVzID0gMDsgOyByZXRyaWVzKyspIHsKKwkJWkZDUF9MT0dfREVCVUcoIkRvaW5nIGV4Y2hhbmdlIHBvcnQgZGF0YVxuIik7CisJCXpmY3BfZXJwX2FjdGlvbl90b19ydW5uaW5nKGVycF9hY3Rpb24pOworCQl6ZmNwX2VycF90aW1lb3V0X2luaXQoZXJwX2FjdGlvbik7CisJCWlmICh6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGEoZXJwX2FjdGlvbiwgYWRhcHRlciwgTlVMTCkpIHsKKwkJCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKKwkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgImFfZnN0eF94ZiIpOworCQkJWkZDUF9MT0dfSU5GTygiZXJyb3I6IGluaXRpYXRpb24gb2YgZXhjaGFuZ2Ugb2YgIgorCQkJCSAgICAgICJwb3J0IGRhdGEgZmFpbGVkIGZvciBhZGFwdGVyICVzXG4iLAorCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQkJYnJlYWs7CisJCX0KKwkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAiYV9mc3R4X3hvayIpOworCQlaRkNQX0xPR19ERUJVRygiWGNoYW5nZSB1bmRlcndheVxuIik7CisKKwkJLyoKKwkJICogV2h5IHRoaXMgd29ya3M6CisJCSAqIEJvdGggdGhlIG5vcm1hbCBjb21wbGV0aW9uIGhhbmRsZXIgYXMgd2VsbCBhcyB0aGUgdGltZW91dAorCQkgKiBoYW5kbGVyIHdpbGwgZG8gYW4gJ3VwJyB3aGVuIHRoZSAnZXhjaGFuZ2UgcG9ydCBkYXRhJworCQkgKiByZXF1ZXN0IGNvbXBsZXRlcyBvciB0aW1lcyBvdXQuIFRodXMsIHRoZSBzaWduYWwgdG8gZ28gb24KKwkJICogd29uJ3QgYmUgbG9zdCB1dGlsaXppbmcgdGhpcyBzZW1hcGhvcmUuCisJCSAqIEZ1cnRoZXJtb3JlLCB0aGlzICdhZGFwdGVyX3Jlb3BlbicgYWN0aW9uIGlzCisJCSAqIGd1YXJhbnRlZWQgdG8gYmUgdGhlIG9ubHkgYWN0aW9uIGJlaW5nIHRoZXJlIChoaWdoZXN0IGFjdGlvbgorCQkgKiB3aGljaCBwcmV2ZW50cyBvdGhlciBhY3Rpb25zIGZyb20gYmVpbmcgY3JlYXRlZCkuCisJCSAqIFJlc3VsdGluZyBmcm9tIHRoYXQsIHRoZSB3YWtlIHNpZ25hbCByZWNvZ25pemVkIGhlcmUKKwkJICogX211c3RfIGJlIHRoZSBvbmUgYmVsb25naW5nIHRvIHRoZSAnZXhjaGFuZ2UgcG9ydAorCQkgKiBkYXRhJyByZXF1ZXN0LgorCQkgKi8KKwkJZG93bigmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7CisJCWlmIChlcnBfYWN0aW9uLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpIHsKKwkJCVpGQ1BfTE9HX0lORk8oImVycm9yOiBleGNoYW5nZSBvZiBwb3J0IGRhdGEgIgorCQkJCSAgICAgICJmb3IgYWRhcHRlciAlcyB0aW1lZCBvdXRcbiIsCisJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELAorCQkJCSAgICAgICZhZGFwdGVyLT5zdGF0dXMpKQorCQkJYnJlYWs7CisKKwkJWkZDUF9MT0dfREVCVUcoImhvc3QgY29ubmVjdGlvbiBzdGlsbCBpbml0aWFsaXNpbmcuLi4gIgorCQkJICAgICAgICJ3YWl0aW5nIGFuZCByZXRyeWluZy4uLlxuIik7CisJCS8qIHNsZWVwIGEgbGl0dGxlIGJpdCBiZWZvcmUgcmV0cnkgKi8KKwkJc2xlZXAgPSByZXRyaWVzIDwgWkZDUF9FWENIQU5HRV9QT1JUX0RBVEFfU0hPUlRfUkVUUklFUyA/CisJCQkJWkZDUF9FWENIQU5HRV9QT1JUX0RBVEFfU0hPUlRfU0xFRVAgOgorCQkJCVpGQ1BfRVhDSEFOR0VfUE9SVF9EQVRBX0xPTkdfU0xFRVA7CisJCW1zbGVlcChqaWZmaWVzX3RvX21zZWNzKHNsZWVwKSk7CisJfQorCisJaWYgKGF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKKwkJCSAgICAgJmFkYXB0ZXItPnN0YXR1cykpIHsKKwkJWkZDUF9MT0dfSU5GTygiZXJyb3I6IGV4Y2hhbmdlIG9mIHBvcnQgZGF0YSBmb3IgIgorCQkJICAgICAgImFkYXB0ZXIgJXMgZmFpbGVkXG4iLAorCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKgogICogZnVuY3Rpb246CQogICoKQEAgLTMxOTQsMTEgKzMyNzIsMTkgQEAKIAkJLyogZmFsbCB0aHJvdWdoICEhISAqLwogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlRfRk9SQ0VEOgotCQlpZiAoYXRvbWljX3Rlc3RfbWFzawotCQkgICAgKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsICZwb3J0LT5zdGF0dXMpCi0JCSAgICAmJiBwb3J0LT5lcnBfYWN0aW9uLmFjdGlvbiA9PQotCQkgICAgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRCkgewotCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAicGZfYWN0ZW5xX2RycCIpOworCQlpZiAoYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLAorCQkJCSAgICAgJnBvcnQtPnN0YXR1cykpIHsKKwkJCWlmIChwb3J0LT5lcnBfYWN0aW9uLmFjdGlvbiAhPQorCQkJICAgIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQpIHsKKwkJCQlaRkNQX0xPR19JTkZPKCJkcm9wcGVkIGVycCBhY3Rpb24gJWkgKHBvcnQgIgorCQkJCQkgICAgICAiMHglMDE2THgsIGFjdGlvbiBpbiB1c2U6ICVpKVxuIiwKKwkJCQkJICAgICAgYWN0aW9uLCBwb3J0LT53d3BuLAorCQkJCQkgICAgICBwb3J0LT5lcnBfYWN0aW9uLmFjdGlvbik7CisJCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LAorCQkJCQkJICJwZl9hY3RlbnFfZHJwIik7CisJCQl9IGVsc2UgCisJCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LAorCQkJCQkJICJwZl9hY3RlbnFfZHJwY3AiKTsKIAkJCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICZwb3J0LT53d3BuLAogCQkJCSAgICBzaXplb2YgKHd3bl90KSk7CiAJCQlnb3RvIG91dDsKQEAgLTM1ODksNiArMzY3NSw5IEBACiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpCisJCXJldHVybjsKKwogCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgImFfYWNjZXNzX3JlY292ZXIiKTsKIAlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmYWRhcHRlci0+bmFtZSwgOCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IGNkOThhMmQuLmMzNzgyMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtOTYsNyArOTYsOCBAQAogZXh0ZXJuIGludCAgemZjcF9mc2ZfY2xvc2VfdW5pdChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwogCiBleHRlcm4gaW50ICB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwotZXh0ZXJuIGludCAgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKK2V4dGVybiBpbnQgIHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICosCisJCQkJCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKIAkJCQkJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICopOwogZXh0ZXJuIGludCAgemZjcF9mc2ZfY29udHJvbF9maWxlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqKiwKIAkJCQkgIHUzMiwgdTMyLCBzdHJ1Y3QgemZjcF9zZ19saXN0ICopOwpAQCAtMTA5LDcgKzExMCw2IEBACiBleHRlcm4gaW50IHpmY3BfZnNmX3NlbmRfY3Qoc3RydWN0IHpmY3Bfc2VuZF9jdCAqLCBtZW1wb29sX3QgKiwKIAkJCSAgICBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwogZXh0ZXJuIGludCB6ZmNwX2ZzZl9zZW5kX2VscyhzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKTsKLWV4dGVybiBpbnQgIHpmY3BfZnNmX3JlcV93YWl0X2FuZF9jbGVhbnVwKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKiwgaW50LCB1MzIgKik7CiBleHRlcm4gaW50ICB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2soc3RydWN0IHpmY3BfYWRhcHRlciAqLAogCQkJCQkgICBzdHJ1Y3QgemZjcF91bml0ICosCiAJCQkJCSAgIHN0cnVjdCBzY3NpX2NtbmQgKiwKQEAgLTE4Miw5ICsxODIsMjUgQEAKIGV4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2NoYW5nZWQoc3RydWN0IHpmY3BfdW5pdCAqKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEFVWCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZXh0ZXJuIHZvaWQgemZjcF9jbWRfZGJmX2V2ZW50X2ZzZihjb25zdCBjaGFyICosIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKiwKLQkJCQkgICB2b2lkICosIGludCk7Ci1leHRlcm4gdm9pZCB6ZmNwX2NtZF9kYmZfZXZlbnRfc2NzaShjb25zdCBjaGFyICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2luX2Vsc19kYmZfZXZlbnQoc3RydWN0IHpmY3BfYWRhcHRlciAqLCBjb25zdCBjaGFyICosCi0JCQkJICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbChjb25zdCBjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKKwkJCQkJIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopOworZXh0ZXJuIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oc3RydWN0IHpmY3BfYWRhcHRlciAqLAorCQkJCSAgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAorCQkJCSAgICBpbnQsIGludCk7CisKK2V4dGVybiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworCitleHRlcm4gdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdChjb25zdCBjaGFyICosIGludCwgc3RydWN0IHpmY3BfYWRhcHRlciAqLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICopOworZXh0ZXJuIHZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydChjb25zdCBjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICosCisJCQkJICAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoY29uc3QgY2hhciAqLCB1OCwgc3RydWN0IHpmY3BfdW5pdCAqLAorCQkJCQkgc3RydWN0IHNjc2lfY21uZCAqKTsKKwogI2VuZGlmCS8qIFpGQ1BfRVhUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IGMwMDdiNjQuLjNiMGZjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtNTksNiArNTksOCBAQAogc3RhdGljIGludCB6ZmNwX2ZzZl9wcm90c3RhdHVzX2V2YWwoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIHN0YXRpYyBpbnQgemZjcF9mc2ZfZnNmc3RhdHVzX2V2YWwoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIHN0YXRpYyBpbnQgemZjcF9mc2ZfZnNmc3RhdHVzX3F1YWxfZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworc3RhdGljIHZvaWQgemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChzdHJ1Y3QgemZjcF9hZGFwdGVyICosCisJc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyAqKTsKIHN0YXRpYyBpbnQgemZjcF9mc2ZfcmVxX2Rpc3BhdGNoKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9yZXFfZGlzbWlzcyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogCkBAIC0yODUsNTEgKzI4Nyw1MSBAQAogewogCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOworCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IGZzZl9yZXEtPnF0Y2I7CisJdW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwgKnByb3Rfc3RhdHVzX3F1YWwgPQorCQkmcXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWw7CiAKLQlaRkNQX0xPR19ERUJVRygiUVRDQiBpcyBhdCAlcFxuIiwgZnNmX3JlcS0+cXRjYik7CisJemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl9yZXNwb25zZShmc2ZfcmVxKTsKIAogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKSB7CiAJCVpGQ1BfTE9HX0RFQlVHKCJmc2ZfcmVxIDB4JWx4IGhhcyBiZWVuIGRpc21pc3NlZFxuIiwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZykgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOyAvKiBvbmx5IGZvciBTQ1NJIGNtbmRzLiAqLwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJkaXNtaXNzIiwgZnNmX3JlcSwgTlVMTCwgMCk7CiAJCWdvdG8gc2tpcF9wcm90c3RhdHVzOwogCX0KIAogCS8qIGxvZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IEZTRiAoaWYgYW55KSAqLwotCWlmICh1bmxpa2VseShmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX2xlbmd0aCkpIHsKKwlpZiAodW5saWtlbHkocXRjYi0+aGVhZGVyLmxvZ19sZW5ndGgpKSB7CiAJCS8qIGRvIG5vdCB0cnVzdCB0aGVtIDstKSAqLwotCQlpZiAoZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmxvZ19zdGFydCA+IHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKSB7CisJCWlmIChxdGNiLT5oZWFkZXIubG9nX3N0YXJ0ID4gc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYikpIHsKIAkJCVpGQ1BfTE9HX05PUk1BTAogCQkJICAgICgiYnVnOiBVTFAgKEZTRiBsb2dnaW5nKSBsb2cgZGF0YSBzdGFydHMgIgogCQkJICAgICAiYmV5b25kIGVuZCBvZiBwYWNrZXQgaGVhZGVyLiBJZ25vcmVkLiAiCiAJCQkgICAgICIoc3RhcnQ9JWksIHNpemU9JWxpKVxuIiwKLQkJCSAgICAgZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmxvZ19zdGFydCwKKwkJCSAgICAgcXRjYi0+aGVhZGVyLmxvZ19zdGFydCwKIAkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYikpOwogCQkJZ290byBmb3JnZXRfbG9nOwogCQl9Ci0JCWlmICgoc2l6ZV90KSAoZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmxvZ19zdGFydCArCi0JCSAgICAgZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmxvZ19sZW5ndGgpCisJCWlmICgoc2l6ZV90KSAocXRjYi0+aGVhZGVyLmxvZ19zdGFydCArIHF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoKQogCQkgICAgPiBzaXplb2Yoc3RydWN0IGZzZl9xdGNiKSkgewogCQkJWkZDUF9MT0dfTk9STUFMKCJidWc6IFVMUCAoRlNGIGxvZ2dpbmcpIGxvZyBkYXRhIGVuZHMgIgogCQkJCQkiYmV5b25kIGVuZCBvZiBwYWNrZXQgaGVhZGVyLiBJZ25vcmVkLiAiCiAJCQkJCSIoc3RhcnQ9JWksIGxlbmd0aD0laSwgc2l6ZT0lbGkpXG4iLAotCQkJCQlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX3N0YXJ0LAotCQkJCQlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX2xlbmd0aCwKKwkJCQkJcXRjYi0+aGVhZGVyLmxvZ19zdGFydCwKKwkJCQkJcXRjYi0+aGVhZGVyLmxvZ19sZW5ndGgsCiAJCQkJCXNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKTsKIAkJCWdvdG8gZm9yZ2V0X2xvZzsKIAkJfQogCQlaRkNQX0xPR19UUkFDRSgiVUxQIGxvZyBkYXRhOiBcbiIpOwogCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX1RSQUNFLAotCQkJICAgICAgKGNoYXIgKikgZnNmX3JlcS0+cXRjYiArCi0JCQkgICAgICBmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX3N0YXJ0LAotCQkJICAgICAgZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmxvZ19sZW5ndGgpOworCQkJICAgICAgKGNoYXIgKikgcXRjYiArIHF0Y2ItPmhlYWRlci5sb2dfc3RhcnQsCisJCQkgICAgICBxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCk7CiAJfQogIGZvcmdldF9sb2c6CiAKIAkvKiBldmFsdWF0ZSBGU0YgUHJvdG9jb2wgU3RhdHVzICovCi0Jc3dpdGNoIChmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMpIHsKKwlzd2l0Y2ggKHF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cykgewogCiAJY2FzZSBGU0ZfUFJPVF9HT09EOgogCWNhc2UgRlNGX1BST1RfRlNGX1NUQVRVU19QUkVTRU5URUQ6CkBAIC0zNDAsMTQgKzM0Miw5IEBACiAJCQkJIm1pY3JvY29kZSBvZiB2ZXJzaW9uIDB4JXgsIHRoZSBkZXZpY2UgZHJpdmVyICIKIAkJCQkib25seSBzdXBwb3J0cyAweCV4LiBBYm9ydGluZy5cbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKLQkJCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbC4KLQkJCQl2ZXJzaW9uX2Vycm9yLmZzZl92ZXJzaW9uLCBaRkNQX1FUQ0JfVkVSU0lPTik7Ci0JCS8qIHN0b3Agb3BlcmF0aW9uIGZvciB0aGlzIGFkYXB0ZXIgKi8KLQkJZGVidWdfdGV4dF9leGNlcHRpb24oYWRhcHRlci0+ZXJwX2RiZiwgMCwgInByb3RfdmVyX2VyciIpOworCQkJCXByb3Rfc3RhdHVzX3F1YWwtPnZlcnNpb25fZXJyb3IuZnNmX3ZlcnNpb24sCisJCQkJWkZDUF9RVENCX1ZFUlNJT04pOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJxdmVyc2VyciIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzU1LDE2ICszNTIsMTAgQEAKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IFNlcXVlbmNlIG51bWJlciBtaXNtYXRjaCBiZXR3ZWVuICIKIAkJCQkiZHJpdmVyICgweCV4KSBhbmQgYWRhcHRlciAlcyAoMHgleCkuICIKIAkJCQkiUmVzdGFydGluZyBhbGwgb3BlcmF0aW9ucyBvbiB0aGlzIGFkYXB0ZXIuXG4iLAotCQkJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vLAorCQkJCXF0Y2ItPnByZWZpeC5yZXFfc2VxX25vLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCi0JCQkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwuCi0JCQkJc2VxdWVuY2VfZXJyb3IuZXhwX3JlcV9zZXFfbm8pOwotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihhZGFwdGVyLT5lcnBfZGJmLCAwLCAicHJvdF9zZXFfZXJyIik7Ci0JCS8qIHJlc3RhcnQgb3BlcmF0aW9uIG9uIHRoaXMgYWRhcHRlciAqLworCQkJCXByb3Rfc3RhdHVzX3F1YWwtPnNlcXVlbmNlX2Vycm9yLmV4cF9yZXFfc2VxX25vKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInNlcW5vZXJyIiwgZnNmX3JlcSwKLQkJCQkgICAgICAgJmZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9wcm90X3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwpAQCAtMzc1LDExNiArMzY2LDM1IEBACiAJCQkJInRoYXQgdXNlZCBvbiBhZGFwdGVyICVzLiAiCiAJCQkJIlN0b3BwaW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgYWRhcHRlci5cbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsICJwcm90X3Vuc3VwX3F0Y2IiKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigidW5zcXRjYnQiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9QUk9UX0hPU1RfQ09OTkVDVElPTl9JTklUSUFMSVpJTkc6Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoImhjb25pbml0IiwgZnNmX3JlcSwKLQkJCQkgICAgICAgJmZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9wcm90X3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0hPU1RfQ09OX0lOSVQsCiAJCQkJJihhZGFwdGVyLT5zdGF0dXMpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAicHJvdF9jb25faW5pdCIpOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1BST1RfRFVQTElDQVRFX1JFUVVFU1RfSUQ6Ci0JCWlmIChmc2ZfcmVxLT5xdGNiKSB7CiAJCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogVGhlIHJlcXVlc3QgaWRlbnRpZmllciAweCVMeCAiCiAJCQkJCSJ0byB0aGUgYWRhcHRlciAlcyBpcyBhbWJpZ3VvdXMuICIKLQkJCQkJIlN0b3BwaW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgIgotCQkJCQkiYWRhcHRlci5cbiIsCi0JCQkJCSoodW5zaWduZWQgbG9uZyBsb25nICopCi0JCQkJCSgmZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuCi0JCQkJCSByZXFfaGFuZGxlKSwKKwkJCQkiU3RvcHBpbmcgYWxsIG9wZXJhdGlvbnMgb24gdGhpcyBhZGFwdGVyLlxuIiwKKwkJCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyopCisJCQkJKCZxdGNiLT5ib3R0b20uc3VwcG9ydC5yZXFfaGFuZGxlKSwKIAkJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCX0gZWxzZSB7Ci0JCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogVGhlIHJlcXVlc3QgaWRlbnRpZmllciAlcCAiCi0JCQkJCSJ0byB0aGUgYWRhcHRlciAlcyBpcyBhbWJpZ3VvdXMuICIKLQkJCQkJIlN0b3BwaW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgIgotCQkJCQkiYWRhcHRlci4gIgotCQkJCQkiKGJ1ZzogZ290IHRoaXMgZm9yIGFuIHVuc29saWNpdGVkICIKLQkJCQkJInN0YXR1cyByZWFkIHJlcXVlc3QpXG4iLAotCQkJCQlmc2ZfcmVxLAotCQkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJfQotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihhZGFwdGVyLT5lcnBfZGJmLCAwLCAicHJvdF9kdXBfaWQiKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigiZHVwcmVxaWQiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9QUk9UX0xJTktfRE9XTjoKLQkJLyoKLQkJICogJ3Rlc3QgYW5kIHNldCcgaXMgbm90IGF0b21pYyBoZXJlIC0KLQkJICogaXQncyBvayBhcyBsb25nIGFzIGNhbGxzIHRvIG91ciByZXNwb25zZSBxdWV1ZSBoYW5kbGVyCi0JCSAqIChhbmQgdGh1cyBleGVjdXRpb24gb2YgdGhpcyBjb2RlIGhlcmUpIGFyZSBzZXJpYWxpemVkCi0JCSAqIGJ5IHRoZSBxZGlvIG1vZHVsZQotCQkgKi8KLQkJaWYgKCFhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsCi0JCQkJICAgICAgJmFkYXB0ZXItPnN0YXR1cykpIHsKLQkJCXN3aXRjaCAoZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwuCi0JCQkJbG9jYWxsaW5rX2Vycm9yLmNvZGUpIHsKLQkJCWNhc2UgRlNGX1BTUV9MSU5LX05PTElHSFQ6Ci0JCQkJWkZDUF9MT0dfSU5GTygiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyAiCi0JCQkJCSAgICAgICJpcyBkb3duIChubyBsaWdodCBkZXRlY3RlZCkuXG4iLAotCQkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKAotCQkJCQkJICAgICAgYWRhcHRlcikpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGU0ZfUFNRX0xJTktfV1JBUFBMVUc6Ci0JCQkJWkZDUF9MT0dfSU5GTygiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyAiCi0JCQkJCSAgICAgICJpcyBkb3duICh3cmFwIHBsdWcgZGV0ZWN0ZWQpLlxuIiwKLQkJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcigKLQkJCQkJCSAgICAgIGFkYXB0ZXIpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgRlNGX1BTUV9MSU5LX05PRkNQOgotCQkJCVpGQ1BfTE9HX0lORk8oIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgIgotCQkJCQkgICAgICAiaXMgZG93biAoYWRqYWNlbnQgbm9kZSBvbiAiCi0JCQkJCSAgICAgICJsaW5rIGRvZXMgbm90IHN1cHBvcnQgRkNQKS5cbiIsCi0JCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoCi0JCQkJCQkgICAgICBhZGFwdGVyKSk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVpGQ1BfTE9HX0lORk8oIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgIgotCQkJCQkgICAgICAiaXMgZG93biAiCi0JCQkJCSAgICAgICIod2FybmluZzogdW5rbm93biByZWFzb24gIgotCQkJCQkgICAgICAiY29kZSkuXG4iLAotCQkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKAotCQkJCQkJICAgICAgYWRhcHRlcikpOwotCQkJCWJyZWFrOwotCi0JCQl9Ci0JCQkvKgotCQkJICogRHVlIHRvIHRoZSAnZXJwIGZhaWxlZCcgZmxhZyB0aGUgYWRhcHRlciB3b24ndAotCQkJICogYmUgcmVjb3ZlcmVkIGJ1dCB3aWxsIGJlIGp1c3Qgc2V0IHRvICdibG9ja2VkJwotCQkJICogc3RhdGUuIEFsbCBzdWJvcmRpbmFyeSBkZXZpY2VzIHdpbGwgaGF2ZSBzdGF0ZQotCQkJICogJ2Jsb2NrZWQnIGFuZCAnZXJwIGZhaWxlZCcsIHRvby4KLQkJCSAqIFRodXMgdGhlIGFkYXB0ZXIgaXMgc3RpbGwgYWJsZSB0byBwcm92aWRlCi0JCQkgKiAnbGluayB1cCcgc3RhdHVzIHdpdGhvdXQgYmVpbmcgZmxvb2RlZCB3aXRoCi0JCQkgKiByZXF1ZXN0cy4KLQkJCSAqIChub3RlOiBldmVuICdjbG9zZSBwb3J0JyBpcyBub3QgcGVybWl0dGVkKQotCQkJICovCi0JCQlaRkNQX0xPR19JTkZPKCJTdG9wcGluZyBhbGwgb3BlcmF0aW9ucyBmb3IgYWRhcHRlciAiCi0JCQkJICAgICAgIiVzLlxuIiwKLQkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VEIHwKLQkJCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJCSZhZGFwdGVyLT5zdGF0dXMpOwotCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7Ci0JCX0KKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChhZGFwdGVyLAorCQkJCQkgICAgICZwcm90X3N0YXR1c19xdWFsLT5saW5rX2Rvd25faW5mbyk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfUFJPVF9SRUVTVF9RVUVVRToKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAicHJvdF9yZWVzdF9xdWV1ZSIpOwotCQlaRkNQX0xPR19JTkZPKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyIHdpdGggIgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgd2l0aCAiCiAJCQkgICAgICAiJXMgd2FzIHJlLXBsdWdnZWQuICIKIAkJCSAgICAgICJSZS1zdGFydGluZyBvcGVyYXRpb25zIG9uIHRoaXMgYWRhcHRlci5cbiIsCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKQEAgLTQ5NSw5ICs0MDUsNiBAQAogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLAogCQkJCQlaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VECiAJCQkJCXwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJyZWVzdHF1ZSIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtNTA3LDEyICs0MTQsNyBAQAogCQkJCSJSZXN0YXJ0aW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgIgogCQkJCSJhZGFwdGVyLlxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAwLCAicHJvdF9lcnJfc3RhIik7Ci0JCS8qIHJlc3RhcnQgb3BlcmF0aW9uIG9uIHRoaXMgYWRhcHRlciAqLwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigicHJvdGVycnMiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CkBAIC01MjQsMTEgKzQyNiw3IEBACiAJCQkJIlN0b3BwaW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgYWRhcHRlci4gIgogCQkJCSIoZGVidWcgaW5mbyAweCV4KS5cbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKLQkJCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsICJwcm90X2ludmFsOiIpOwotCQlkZWJ1Z19leGNlcHRpb24oYWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzLAotCQkJCXNpemVvZiAodTMyKSk7CisJCQkJcXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAl9CkBAIC01NjgsMjggKzQ2NiwxOCBAQAogCQkJCSIoZGVidWcgaW5mbyAweCV4KS5cbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihmc2ZfcmVxLT5hZGFwdGVyKSwKIAkJCQlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQpOwotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSAgICAgImZzZl9zX3Vua25vd24iKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihmc2ZfcmVxLT5hZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigidW5rbm93bmMiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9GQ1BfUlNQX0FWQUlMQUJMRToKIAkJWkZDUF9MT0dfREVCVUcoIkZDUCBTZW5zZSBkYXRhIHdpbGwgYmUgcHJlc2VudGVkIHRvIHRoZSAiCiAJCQkgICAgICAgIlNDU0kgc3RhY2suXG4iKTsKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAzLCAiZnNmX3NfcnNwIik7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDIsICJmc2Zfc19hc3RhdHVzIik7CiAJCXpmY3BfZnNmX2ZzZnN0YXR1c19xdWFsX2V2YWwoZnNmX3JlcSk7CiAJCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQogCiAgc2tpcF9mc2ZzdGF0dXM6CkBAIC02MTcsNDQgKzUwNSwyOCBAQAogCiAJc3dpdGNoIChmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAljYXNlIEZTRl9TUV9GQ1BfUlNQX0FWQUlMQUJMRToKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCA0LCAiZnNmX3NxX3JzcCIpOwogCQlicmVhazsKIAljYXNlIEZTRl9TUV9SRVRSWV9JRl9QT1NTSUJMRToKIAkJLyogVGhlIFNDU0ktc3RhY2sgbWF5IG5vdyBpc3N1ZSByZXRyaWVzIG9yIGVzY2FsYXRlICovCi0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMiwgImZzZl9zcV9yZXRyeSIpOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJzcXJldHJ5IiwgZnNmX3JlcSwKLQkJCQkgICAgICAgJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NRX0NPTU1BTkRfQUJPUlRFRDoKIAkJLyogQ2FycnkgdGhlIGFib3J0ZWQgc3RhdGUgb24gdG8gdXBwZXIgbGF5ZXIgKi8KLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAyLCAiZnNmX3NxX2Fib3J0Iik7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInNxYWJvcnQiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVEVEOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9TUV9OT19SRUNPTToKLQkJZGVidWdfdGV4dF9leGNlcHRpb24oZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkgICAgICJmc2Zfc3Ffbm9fcmVjIik7CiAJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBObyByZWNvbW1lbmRhdGlvbiBjb3VsZCBiZSBnaXZlbiBmb3IgYSIKIAkJCQkicHJvYmxlbSBvbiB0aGUgYWRhcHRlciAlcyAiCiAJCQkJIlN0b3BwaW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgYWRhcHRlci4gIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGZzZl9yZXEtPmFkYXB0ZXIpKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihmc2ZfcmVxLT5hZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigic3FucmVjb20iLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1FfVUxQX1BST0dSQU1NSU5HX0VSUk9SOgogCQlaRkNQX0xPR19OT1JNQUwoImVycm9yOiBub3QgZW5vdWdoIFNCQUxzIGZvciBkYXRhIHRyYW5zZmVyICIKIAkJCQkiKGFkYXB0ZXIgJXMpXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoZnNmX3JlcS0+YWRhcHRlcikpOwotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSAgICAgImZzZl9zcV91bHBfZXJyIik7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NRX0lOVk9LRV9MSU5LX1RFU1RfUFJPQ0VEVVJFOgpAQCAtNjY4LDEzICs1NDAsNiBAQAogCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX05PUk1BTCwKIAkJCSAgICAgIChjaGFyICopICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLAogCQkJICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLCAiZnNmX3NxX2ludmFsOiIpOwotCQlkZWJ1Z19leGNlcHRpb24oZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdLAotCQkJCXNpemVvZiAodTMyKSk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInNxdW5kZWYiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJfQpAQCAtNjgyLDYgKzU0NywxMTAgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKioKKyAqIHpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwgLSBldmFsdWF0ZSBsaW5rIGRvd24gaW5mb3JtYXRpb24gYmxvY2sKKyAqLworc3RhdGljIHZvaWQKK3pmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyAqbGlua19kb3duKQoreworCXN3aXRjaCAobGlua19kb3duLT5lcnJvcl9jb2RlKSB7CisJY2FzZSBGU0ZfUFNRX0xJTktfTk9fTElHSFQ6CisJCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkiKG5vIGxpZ2h0IGRldGVjdGVkKVxuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfV1JBUF9QTFVHOgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJIih3cmFwIHBsdWcgZGV0ZWN0ZWQpXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwljYXNlIEZTRl9QU1FfTElOS19OT19GQ1A6CisJCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkiKGFkamFjZW50IG5vZGUgb24gbGluayBkb2VzIG5vdCBzdXBwb3J0IEZDUClcbiIsCisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCWJyZWFrOworCWNhc2UgRlNGX1BTUV9MSU5LX0ZJUk1XQVJFX1VQREFURToKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSIoZmlybXdhcmUgdXBkYXRlIGluIHByb2dyZXNzKVxuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJCWJyZWFrOworCWNhc2UgRlNGX1BTUV9MSU5LX0lOVkFMSURfV1dQTjoKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSIoZHVwbGljYXRlIG9yIGludmFsaWQgV1dQTiBkZXRlY3RlZClcbiIsCisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCWJyZWFrOworCWNhc2UgRlNGX1BTUV9MSU5LX05PX05QSVZfU1VQUE9SVDoKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSIobm8gc3VwcG9ydCBmb3IgTlBJViBieSBGYWJyaWMpXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwljYXNlIEZTRl9QU1FfTElOS19OT19GQ1BfUkVTT1VSQ0VTOgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJIihvdXQgb2YgcmVzb3VyY2UgaW4gRkNQIGRhdWdodGVyY2FyZClcbiIsCisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCWJyZWFrOworCWNhc2UgRlNGX1BTUV9MSU5LX05PX0ZBQlJJQ19SRVNPVVJDRVM6CisJCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkiKG91dCBvZiByZXNvdXJjZSBpbiBGYWJyaWMpXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwljYXNlIEZTRl9QU1FfTElOS19GQUJSSUNfTE9HSU5fVU5BQkxFOgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJIih1bmFibGUgdG8gRmFicmljIGxvZ2luKVxuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfV1dQTl9BU1NJR05NRU5UX0NPUlJVUFRFRDoKKwkJWkZDUF9MT0dfTk9STUFMKCJXV1BOIGFzc2lnbm1lbnQgZmlsZSBjb3JydXB0ZWQgb24gYWRhcHRlciAlc1xuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfTU9ERV9UQUJMRV9DVVJSVVBURUQ6CisJCVpGQ1BfTE9HX05PUk1BTCgiTW9kZSB0YWJsZSBjb3JydXB0ZWQgb24gYWRhcHRlciAlc1xuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfTk9fV1dQTl9BU1NJR05NRU5UOgorCQlaRkNQX0xPR19OT1JNQUwoIk5vIFdXUE4gZm9yIGFzc2lnbm1lbnQgdGFibGUgb24gYWRhcHRlciAlc1xuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSIod2FybmluZzogdW5rbm93biByZWFzb24gY29kZSAlZClcbiIsCisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKKwkJCQlsaW5rX2Rvd24tPmVycm9yX2NvZGUpOworCX0KKworCWlmIChhZGFwdGVyLT5jb25uZWN0aW9uX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTlBJVl9NT0RFKQorCQlaRkNQX0xPR19ERUJVRygiRGVidWcgaW5mb3JtYXRpb24gdG8gbGluayBkb3duOiAiCisJCSAgICAgICAgICAgICAgICJwcmltYXJ5X3N0YXR1cz0weCUwMnggIgorCQkgICAgICAgICAgICAgICAiaW9lcnJfY29kZT0weCUwMnggIgorCQkgICAgICAgICAgICAgICAiYWN0aW9uX2NvZGU9MHglMDJ4ICIKKwkJICAgICAgICAgICAgICAgInJlYXNvbl9jb2RlPTB4JTAyeCAiCisJCSAgICAgICAgICAgICAgICJleHBsYW5hdGlvbl9jb2RlPTB4JTAyeCAiCisJCSAgICAgICAgICAgICAgICJ2ZW5kb3Jfc3BlY2lmaWNfY29kZT0weCUwMnhcbiIsCisJCQkJbGlua19kb3duLT5wcmltYXJ5X3N0YXR1cywKKwkJCQlsaW5rX2Rvd24tPmlvZXJyX2NvZGUsCisJCQkJbGlua19kb3duLT5hY3Rpb25fY29kZSwKKwkJCQlsaW5rX2Rvd24tPnJlYXNvbl9jb2RlLAorCQkJCWxpbmtfZG93bi0+ZXhwbGFuYXRpb25fY29kZSwKKwkJCQlsaW5rX2Rvd24tPnZlbmRvcl9zcGVjaWZpY19jb2RlKTsKKworCWlmICghYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELAorCQkJICAgICAgJmFkYXB0ZXItPnN0YXR1cykpIHsKKwkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsCisJCQkJJmFkYXB0ZXItPnN0YXR1cyk7CisJCXN3aXRjaCAobGlua19kb3duLT5lcnJvcl9jb2RlKSB7CisJCWNhc2UgRlNGX1BTUV9MSU5LX05PX0xJR0hUOgorCQljYXNlIEZTRl9QU1FfTElOS19XUkFQX1BMVUc6CisJCWNhc2UgRlNGX1BTUV9MSU5LX05PX0ZDUDoKKwkJY2FzZSBGU0ZfUFNRX0xJTktfRklSTVdBUkVfVVBEQVRFOgorCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKGFkYXB0ZXIpOworCQl9CisJfQorfQorCiAvKgogICogZnVuY3Rpb246CXpmY3BfZnNmX3JlcV9kaXNwYXRjaAogICoKQEAgLTY5NiwxMSArNjY1LDYgQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWlmICh1bmxpa2VseShmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpKSB7Ci0JCVpGQ1BfTE9HX1RSQUNFKCJmc2ZfcmVxPSVwLCBRVENCPSVwXG4iLCBmc2ZfcmVxLCBmc2ZfcmVxLT5xdGNiKTsKLQkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9UUkFDRSwKLQkJCSAgICAgIChjaGFyICopIGZzZl9yZXEtPnF0Y2IsIHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKTsKLQl9CiAKIAlzd2l0Y2ggKGZzZl9yZXEtPmZzZl9jb21tYW5kKSB7CiAKQEAgLTc2MCwxMyArNzI0LDEzIEBACiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBDb21tYW5kIGlzc3VlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBpcyAiCiAJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgdGhlIGFkYXB0ZXIgJXNcbiIsCi0JCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihmc2ZfcmVxLT5hZGFwdGVyKSk7CisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCWlmIChmc2ZfcmVxLT5mc2ZfY29tbWFuZCAhPSBmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQpCiAJCQlaRkNQX0xPR19OT1JNQUwKIAkJCSAgICAoImJ1ZzogQ29tbWFuZCBpc3N1ZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgZGlmZmVycyAiCiAJCQkgICAgICJmcm9tIHRoZSBjb21tYW5kIHJldHVybmVkIGJ5IHRoZSBhZGFwdGVyICVzICIKIAkJCSAgICAgIihkZWJ1ZyBpbmZvIDB4JXgsIDB4JXgpLlxuIiwKLQkJCSAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihmc2ZfcmVxLT5hZGFwdGVyKSwKKwkJCSAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKIAkJCSAgICAgZnNmX3JlcS0+ZnNmX2NvbW1hbmQsCiAJCQkgICAgIGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2ZfY29tbWFuZCk7CiAJfQpAQCAtNzc0LDggKzczOCw2IEBACiAJaWYgKCFlcnBfYWN0aW9uKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9mcmgiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwogCXpmY3BfZXJwX2FzeW5jX2hhbmRsZXIoZXJwX2FjdGlvbiwgMCk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtODIxLDcgKzc4Myw3IEBACiAJCWdvdG8gZmFpbGVkX2J1ZjsKIAl9CiAJbWVtc2V0KHN0YXR1c19idWZmZXIsIDAsIHNpemVvZiAoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIpKTsKLQlmc2ZfcmVxLT5kYXRhLnN0YXR1c19yZWFkLmJ1ZmZlciA9IHN0YXR1c19idWZmZXI7CisJZnNmX3JlcS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzdGF0dXNfYnVmZmVyOwogCiAJLyogaW5zZXJ0IHBvaW50ZXIgdG8gcmVzcGVjdGl2ZSBidWZmZXIgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKGZzZl9yZXEpOwpAQCAtODQ2LDYgKzgwOCw3IEBACiAgZmFpbGVkX2J1ZjoKIAl6ZmNwX2ZzZl9yZXFfZnJlZShmc2ZfcmVxKTsKICBmYWlsZWRfcmVxX2NyZWF0ZToKKwl6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKCJmYWlsIiwgYWRhcHRlciwgTlVMTCk7CiAgb3V0OgogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXF1ZXN0X3F1ZXVlLnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CkBAIC04NTksNyArODIyLDcgQEAKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzdGF0dXNfYnVmZmVyID0gZnNmX3JlcS0+ZGF0YS5zdGF0dXNfcmVhZC5idWZmZXI7CisJc3RhdHVzX2J1ZmZlciA9IChzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqKSBmc2ZfcmVxLT5kYXRhOwogCWFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwogCiAJcmVhZF9sb2NrX2lycXNhdmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwpAQCAtOTE4LDM4ICs4ODEsMzMgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKIAlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlciA9Ci0JICAgIGZzZl9yZXEtPmRhdGEuc3RhdHVzX3JlYWQuYnVmZmVyOworCQkoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKikgZnNmX3JlcS0+ZGF0YTsKIAogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKSB7CisJCXpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woImRpc20iLCBhZGFwdGVyLCBzdGF0dXNfYnVmZmVyKTsKIAkJbWVtcG9vbF9mcmVlKHN0YXR1c19idWZmZXIsIGFkYXB0ZXItPnBvb2wuZGF0YV9zdGF0dXNfcmVhZCk7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKGZzZl9yZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKKwl6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKCJyZWFkIiwgYWRhcHRlciwgc3RhdHVzX2J1ZmZlcik7CisKIAlzd2l0Y2ggKHN0YXR1c19idWZmZXItPnN0YXR1c190eXBlKSB7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9QT1JUX0NMT1NFRDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAidW5zb2xfcGNsb3NlZDoiKTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywKLQkJCSAgICAmc3RhdHVzX2J1ZmZlci0+ZF9pZCwgc2l6ZW9mICh1MzIpKTsKIAkJemZjcF9mc2Zfc3RhdHVzX3JlYWRfcG9ydF9jbG9zZWQoZnNmX3JlcSk7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfSU5DT01JTkdfRUxTOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJ1bnNvbF9lbHM6Iik7CiAJCXpmY3BfZnNmX2luY29taW5nX2Vscyhmc2ZfcmVxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9TRU5TRV9EQVRBX0FWQUlMOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJ1bnNvbF9zZW5zZToiKTsKIAkJWkZDUF9MT0dfSU5GTygidW5zb2xpY2l0ZWQgc2Vuc2UgZGF0YSByZWNlaXZlZCAoYWRhcHRlciAlcylcbiIsCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLSAgICAgICAgICAgICAgICBaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX05PUk1BTCwgKGNoYXIgKikgc3RhdHVzX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlcikpOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0JJVF9FUlJPUl9USFJFU0hPTEQ6Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInVuc29sX2JpdF9lcnI6Iik7CiAJCVpGQ1BfTE9HX05PUk1BTCgiQml0IGVycm9yIHRocmVzaG9sZCBkYXRhIHJlY2VpdmVkOlxuIik7CiAJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfTk9STUFMLAogCQkJICAgICAgKGNoYXIgKikgc3RhdHVzX2J1ZmZlciwKQEAgLTk1NywxNyArOTE1LDMyIEBACiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfTElOS19ET1dOOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsICJ1bnNvbF9saW5rX2Rvd246Iik7Ci0JCVpGQ1BfTE9HX0lORk8oIkxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duXG4iLAorCQlzd2l0Y2ggKHN0YXR1c19idWZmZXItPnN0YXR1c19zdWJ0eXBlKSB7CisJCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9OT19QSFlTSUNBTF9MSU5LOgorCQkJWkZDUF9MT0dfSU5GTygiUGh5c2ljYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd25cbiIsCisJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCQlicmVhazsKKwkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0ZESVNDX0ZBSUxFRDoKKwkJCVpGQ1BfTE9HX0lORk8oIkxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkgICAgICAiZHVlIHRvIGZhaWxlZCBGRElTQyBsb2dpblxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKLQkJCQkmYWRhcHRlci0+c3RhdHVzKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlcik7CisJCQlicmVhazsKKwkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0ZJUk1XQVJFX1VQREFURToKKwkJCVpGQ1BfTE9HX0lORk8oIkxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkgICAgICAiZHVlIHRvIGZpcm13YXJlIHVwZGF0ZSBvbiBhZGFwdGVyXG4iLAorCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlaRkNQX0xPR19JTkZPKCJMb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJICAgICAgImR1ZSB0byB1bmtub3duIHJlYXNvblxuIiwKKwkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJfTsKKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChhZGFwdGVyLAorCQkJKHN0cnVjdCBmc2ZfbGlua19kb3duX2luZm8gKikgJnN0YXR1c19idWZmZXItPnBheWxvYWQpOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0xJTktfVVA6Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMiwgInVuc29sX2xpbmtfdXA6Iik7Ci0JCVpGQ1BfTE9HX0lORk8oIkxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyB3YXMgcmVwbHVnZ2VkLiAiCisJCVpGQ1BfTE9HX05PUk1BTCgiTG9jYWwgbGluayB0byBhZGFwdGVyICVzIHdhcyByZXBsdWdnZWQuICIKIAkJCSAgICAgICJSZXN0YXJ0aW5nIG9wZXJhdGlvbnMgb24gdGhpcyBhZGFwdGVyXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCS8qIEFsbCBwb3J0cyBzaG91bGQgYmUgbWFya2VkIGFzIHJlYWR5IHRvIHJ1biBhZ2FpbiAqLwpAQCAtOTgwLDM1ICs5NTMsNDAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9DRkRDX1VQREFURUQ6Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMiwgInVuc29sX2NmZGNfdXBkYXRlOiIpOwotCQlaRkNQX0xPR19JTkZPKCJDRkRDIGhhcyBiZWVuIHVwZGF0ZWQgb24gdGhlIGFkYXB0ZXIgJXNcbiIsCisJCVpGQ1BfTE9HX05PUk1BTCgiQ0ZEQyBoYXMgYmVlbiB1cGRhdGVkIG9uIHRoZSBhZGFwdGVyICVzXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfYWNjZXNzX2NoYW5nZWQoYWRhcHRlcik7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfQ0ZEQ19IQVJERU5FRDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAidW5zb2xfY2ZkY19oYXJkZW46Iik7CiAJCXN3aXRjaCAoc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3N1YnR5cGUpIHsKIAkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0NGRENfSEFSREVORURfT05fU0U6Ci0JCQlaRkNQX0xPR19JTkZPKCJDRkRDIG9mIGFkYXB0ZXIgJXMgc2F2ZWQgb24gU0VcbiIsCisJCQlaRkNQX0xPR19OT1JNQUwoIkNGREMgb2YgYWRhcHRlciAlcyBzYXZlZCBvbiBTRVxuIiwKIAkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJCWJyZWFrOwogCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfQ0ZEQ19IQVJERU5FRF9PTl9TRTI6Ci0JCQlaRkNQX0xPR19JTkZPKCJDRkRDIG9mIGFkYXB0ZXIgJXMgaGFzIGJlZW4gY29waWVkICIKKwkJCVpGQ1BfTE9HX05PUk1BTCgiQ0ZEQyBvZiBhZGFwdGVyICVzIGhhcyBiZWVuIGNvcGllZCAiCiAJCQkJICAgICAgInRvIHRoZSBzZWNvbmRhcnkgU0VcbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCVpGQ1BfTE9HX0lORk8oIkNGREMgb2YgYWRhcHRlciAlcyBoYXMgYmVlbiBoYXJkZW5lZFxuIiwKKwkJCVpGQ1BfTE9HX05PUk1BTCgiQ0ZEQyBvZiBhZGFwdGVyICVzIGhhcyBiZWVuIGhhcmRlbmVkXG4iLAogCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBGU0ZfU1RBVFVTX1JFQURfRkVBVFVSRV9VUERBVEVfQUxFUlQ6CisJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMiwgInVuc29sX2ZlYXR1cmVzOiIpOworCQlaRkNQX0xPR19JTkZPKCJMaXN0IG9mIHN1cHBvcnRlZCBmZWF0dXJlcyBvbiBhZGFwdGVyICVzIGhhcyAiCisJCQkgICAgICAiYmVlbiBjaGFuZ2VkIGZyb20gMHglMDhYIHRvIDB4JTA4WFxuIiwKKwkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCisJCQkgICAgICAqKHUzMiopIChzdGF0dXNfYnVmZmVyLT5wYXlsb2FkICsgNCksCisJCQkgICAgICAqKHUzMiopIChzdGF0dXNfYnVmZmVyLT5wYXlsb2FkKSk7CisJCWFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgPSAqKHUzMiopIHN0YXR1c19idWZmZXItPnBheWxvYWQ7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAwLCAidW5zb2xfdW5rbm93bjoiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJnN0YXR1c19idWZmZXItPnN0YXR1c190eXBlLCBzaXplb2YgKHUzMikpOwotCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogQW4gdW5zb2xpY2l0ZWQgc3RhdHVzIHBhY2tldCBvZiB1bmtub3duICIKKwkJWkZDUF9MT0dfTk9STUFMKCJ3YXJuaW5nOiBBbiB1bnNvbGljaXRlZCBzdGF0dXMgcGFja2V0IG9mIHVua25vd24gIgogCQkJCSJ0eXBlIHdhcyByZWNlaXZlZCAoZGVidWcgaW5mbyAweCV4KVxuIiwKIAkJCQlzdGF0dXNfYnVmZmVyLT5zdGF0dXNfdHlwZSk7CiAJCVpGQ1BfTE9HX0RFQlVHKCJEdW1wIG9mIHN0YXR1c19yZWFkX2J1ZmZlciAlcDpcbiIsCkBAIC0xMDkzLDcgKzEwNzEsNyBAQAogICAgICAgICBzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAgICAgICAgIHNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAotCWZzZl9yZXEtPmRhdGEuYWJvcnRfZmNwX2NvbW1hbmQudW5pdCA9IHVuaXQ7CisJZnNmX3JlcS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB1bml0OwogCiAJLyogc2V0IGhhbmRsZXMgb2YgdW5pdCBhbmQgaXRzIHBhcmVudCBwb3J0IGluIFFUQ0IgKi8KIAlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubHVuX2hhbmRsZSA9IHVuaXQtPmhhbmRsZTsKQEAgLTExMzksNyArMTExNyw3IEBACiB6ZmNwX2ZzZl9hYm9ydF9mY3BfY29tbWFuZF9oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKm5ld19mc2ZfcmVxKQogewogCWludCByZXR2YWwgPSAtRUlOVkFMOwotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBuZXdfZnNmX3JlcS0+ZGF0YS5hYm9ydF9mY3BfY29tbWFuZC51bml0OworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJdW5zaWduZWQgY2hhciBzdGF0dXNfcXVhbCA9CiAJICAgIG5ld19mc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMF07CiAKQEAgLTExNTAsNiArMTEyOCw4IEBACiAJCWdvdG8gc2tpcF9mc2ZzdGF0dXM7CiAJfQogCisJdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIG5ld19mc2ZfcmVxLT5kYXRhOworCiAJLyogZXZhbHVhdGUgRlNGIHN0YXR1cyBpbiBRVENCICovCiAJc3dpdGNoIChuZXdfZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMpIHsKIApAQCAtMTM2NCw3ICsxMzQ0LDcgQEAKICAgICAgICAgICAgICAgICBzYmFsZVszXS5hZGRyID0gemZjcF9zZ190b19hZGRyZXNzKCZjdC0+cmVzcFswXSk7CiAgICAgICAgICAgICAgICAgc2JhbGVbM10ubGVuZ3RoID0gY3QtPnJlc3BbMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgIHNiYWxlWzNdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKLSAgICAgICAgfSBlbHNlIGlmIChhZGFwdGVyLT5zdXBwb3J0ZWRfZmVhdHVyZXMgJgorCX0gZWxzZSBpZiAoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmCiAgICAgICAgICAgICAgICAgICAgRlNGX0ZFQVRVUkVfRUxTX0NUX0NIQUlORURfU0JBTFMpIHsKICAgICAgICAgICAgICAgICAvKiB0cnkgdG8gdXNlIGNoYWluZWQgU0JBTHMgKi8KICAgICAgICAgICAgICAgICBieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGZzZl9yZXEsCkBAIC0xNDE0LDcgKzEzOTQsOSBAQAogCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZSA9IHBvcnQtPmhhbmRsZTsKIAlmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5zZXJ2aWNlX2NsYXNzID0gYWRhcHRlci0+ZmNfc2VydmljZV9jbGFzczsKIAlmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC50aW1lb3V0ID0gY3QtPnRpbWVvdXQ7Ci0gICAgICAgIGZzZl9yZXEtPmRhdGEuc2VuZF9jdCA9IGN0OworICAgICAgICBmc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGN0OworCisJemZjcF9zYW5fZGJmX2V2ZW50X2N0X3JlcXVlc3QoZnNmX3JlcSk7CiAKIAkvKiBzdGFydCBRRElPIHJlcXVlc3QgZm9yIHRoaXMgRlNGIHJlcXVlc3QgKi8KIAlyZXQgPSB6ZmNwX2ZzZl9yZXFfc2VuZChmc2ZfcmVxLCBjdC0+dGltZXIpOwpAQCAtMTQ0NSwxMCArMTQyNywxMCBAQAogICogemZjcF9mc2Zfc2VuZF9jdF9oYW5kbGVyIC0gaGFuZGxlciBmb3IgR2VuZXJpYyBTZXJ2aWNlIHJlcXVlc3RzCiAgKiBAZnNmX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9mc2ZfcmVxCiAgKgotICogRGF0YSBzcGVjaWZpYyBmb3IgdGhlIEdlbmVyaWMgU2VydmljZSByZXF1ZXN0IGlzIHBhc3NlZCBieQotICogZnNmX3JlcS0+ZGF0YS5zZW5kX2N0Ci0gKiBVc3VhbGx5IGEgc3BlY2lmaWMgaGFuZGxlciBmb3IgdGhlIHJlcXVlc3QgaXMgY2FsbGVkIHZpYQotICogZnNmX3JlcS0+ZGF0YS5zZW5kX2N0LT5oYW5kbGVyIGF0IGVuZCBvZiB0aGlzIGZ1bmN0aW9uLgorICogRGF0YSBzcGVjaWZpYyBmb3IgdGhlIEdlbmVyaWMgU2VydmljZSByZXF1ZXN0IGlzIHBhc3NlZCB1c2luZworICogZnNmX3JlcS0+ZGF0YS4gVGhlcmUgd2UgZmluZCB0aGUgcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9zZW5kX2N0LgorICogVXN1YWxseSBhIHNwZWNpZmljIGhhbmRsZXIgZm9yIHRoZSBDVCByZXF1ZXN0IGlzIGNhbGxlZCB3aGljaCBpcworICogZm91bmQgaW4gdGhpcyBzdHJ1Y3R1cmUuCiAgKi8KIHN0YXRpYyBpbnQKIHpmY3BfZnNmX3NlbmRfY3RfaGFuZGxlcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQpAQCAtMTQ2Miw3ICsxNDQ0LDcgQEAKIAl1MTYgc3VidGFibGUsIHJ1bGUsIGNvdW50ZXI7CiAKIAlhZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKLQlzZW5kX2N0ID0gZnNmX3JlcS0+ZGF0YS5zZW5kX2N0OworCXNlbmRfY3QgPSAoc3RydWN0IHpmY3Bfc2VuZF9jdCAqKSBmc2ZfcmVxLT5kYXRhOwogCXBvcnQgPSBzZW5kX2N0LT5wb3J0OwogCWhlYWRlciA9ICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXI7CiAJYm90dG9tID0gJmZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0OwpAQCAtMTQ3NCw2ICsxNDU2LDcgQEAKIAlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1cykgewogCiAgICAgICAgIGNhc2UgRlNGX0dPT0Q6CisJCXpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXNwb25zZShmc2ZfcmVxKTsKICAgICAgICAgICAgICAgICByZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtMTYzNCw3ICsxNjE3LDcgQEAKIHsKIAl2b2xhdGlsZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQlmY19pZF90IGRfaWQ7CisJdTMyIGRfaWQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAgICAgICAgIGludCBieXRlczsKQEAgLTE2NjQsNyArMTY0Nyw3IEBACiAgICAgICAgICAgICAgICAgc2JhbGVbM10uYWRkciA9IHpmY3Bfc2dfdG9fYWRkcmVzcygmZWxzLT5yZXNwWzBdKTsKICAgICAgICAgICAgICAgICBzYmFsZVszXS5sZW5ndGggPSBlbHMtPnJlc3BbMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgIHNiYWxlWzNdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKLSAgICAgICAgfSBlbHNlIGlmIChhZGFwdGVyLT5zdXBwb3J0ZWRfZmVhdHVyZXMgJgorCX0gZWxzZSBpZiAoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmCiAgICAgICAgICAgICAgICAgICAgRlNGX0ZFQVRVUkVfRUxTX0NUX0NIQUlORURfU0JBTFMpIHsKICAgICAgICAgICAgICAgICAvKiB0cnkgdG8gdXNlIGNoYWluZWQgU0JBTHMgKi8KICAgICAgICAgICAgICAgICBieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGZzZl9yZXEsCkBAIC0xNzE0LDEwICsxNjk3LDEyIEBACiAJZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZF9pZCA9IGRfaWQ7CiAJZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuc2VydmljZV9jbGFzcyA9IGFkYXB0ZXItPmZjX3NlcnZpY2VfY2xhc3M7CiAJZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQudGltZW91dCA9IFpGQ1BfRUxTX1RJTUVPVVQ7Ci0JZnNmX3JlcS0+ZGF0YS5zZW5kX2VscyA9IGVsczsKKwlmc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVsczsKIAogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShmc2ZfcmVxLCBmc2ZfcmVxLT5zYmFsX2N1cnIsIDApOwogCisJemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXF1ZXN0KGZzZl9yZXEpOworCiAJLyogc3RhcnQgUURJTyByZXF1ZXN0IGZvciB0aGlzIEZTRiByZXF1ZXN0ICovCiAJcmV0ID0gemZjcF9mc2ZfcmVxX3NlbmQoZnNmX3JlcSwgZWxzLT50aW1lcik7CiAJaWYgKHJldCkgewpAQCAtMTc0NiwyMyArMTczMSwyMyBAQAogICogemZjcF9mc2Zfc2VuZF9lbHNfaGFuZGxlciAtIGhhbmRsZXIgZm9yIEVMUyBjb21tYW5kcwogICogQGZzZl9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfZnNmX3JlcQogICoKLSAqIERhdGEgc3BlY2lmaWMgZm9yIHRoZSBFTFMgY29tbWFuZCBpcyBwYXNzZWQgYnkKLSAqIGZzZl9yZXEtPmRhdGEuc2VuZF9lbHMKLSAqIFVzdWFsbHkgYSBzcGVjaWZpYyBoYW5kbGVyIGZvciB0aGUgY29tbWFuZCBpcyBjYWxsZWQgdmlhCi0gKiBmc2ZfcmVxLT5kYXRhLnNlbmRfZWxzLT5oYW5kbGVyIGF0IGVuZCBvZiB0aGlzIGZ1bmN0aW9uLgorICogRGF0YSBzcGVjaWZpYyBmb3IgdGhlIEVMUyBjb21tYW5kIGlzIHBhc3NlZCB1c2luZworICogZnNmX3JlcS0+ZGF0YS4gVGhlcmUgd2UgZmluZCB0aGUgcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9zZW5kX2Vscy4KKyAqIFVzdWFsbHkgYSBzcGVjaWZpYyBoYW5kbGVyIGZvciB0aGUgRUxTIGNvbW1hbmQgaXMgY2FsbGVkIHdoaWNoIGlzCisgKiBmb3VuZCBpbiB0aGlzIHN0cnVjdHVyZS4KICAqLwogc3RhdGljIGludCB6ZmNwX2ZzZl9zZW5kX2Vsc19oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwotCWZjX2lkX3QgZF9pZDsKKwl1MzIgZF9pZDsKIAlzdHJ1Y3QgZnNmX3F0Y2JfaGVhZGVyICpoZWFkZXI7CiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9zdXBwb3J0ICpib3R0b207CiAJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKnNlbmRfZWxzOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCXUxNiBzdWJ0YWJsZSwgcnVsZSwgY291bnRlcjsKIAotCXNlbmRfZWxzID0gZnNmX3JlcS0+ZGF0YS5zZW5kX2VsczsKKwlzZW5kX2VscyA9IChzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKSBmc2ZfcmVxLT5kYXRhOwogCWFkYXB0ZXIgPSBzZW5kX2Vscy0+YWRhcHRlcjsKIAlwb3J0ID0gc2VuZF9lbHMtPnBvcnQ7CiAJZF9pZCA9IHNlbmRfZWxzLT5kX2lkOwpAQCAtMTc3NSw2ICsxNzYwLDcgQEAKIAlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1cykgewogCiAJY2FzZSBGU0ZfR09PRDoKKwkJemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXNwb25zZShmc2ZfcmVxKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTE5NTQsNyArMTk0MCw5IEBACiAKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5xdGNiLT5ib3R0b20uY29uZmlnLmZlYXR1cmVfc2VsZWN0aW9uID0KLQkJKEZTRl9GRUFUVVJFX0NGREMgfCBGU0ZfRkVBVFVSRV9MVU5fU0hBUklORyk7CisJCQlGU0ZfRkVBVFVSRV9DRkRDIHwKKwkJCUZTRl9GRUFUVVJFX0xVTl9TSEFSSU5HIHwKKwkJCUZTRl9GRUFUVVJFX1VQREFURV9BTEVSVDsKIAogCS8qIHN0YXJ0IFFESU8gcmVxdWVzdCBmb3IgdGhpcyBGU0YgcmVxdWVzdCAqLwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKGVycF9hY3Rpb24tPmZzZl9yZXEsICZlcnBfYWN0aW9uLT50aW1lcik7CkBAIC0xOTkwLDI5ICsxOTc4LDM2IEBACiB7CiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9jb25maWcgKmJvdHRvbTsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGFkYXB0ZXItPnNjc2lfaG9zdDsKIAogCWJvdHRvbSA9ICZmc2ZfcmVxLT5xdGNiLT5ib3R0b20uY29uZmlnOwogCVpGQ1BfTE9HX0RFQlVHKCJsb3cvaGlnaCBRVENCIHZlcnNpb24gMHgleC8weCV4IG9mIEZTRlxuIiwKIAkJICAgICAgIGJvdHRvbS0+bG93X3F0Y2JfdmVyc2lvbiwgYm90dG9tLT5oaWdoX3F0Y2JfdmVyc2lvbik7CiAJYWRhcHRlci0+ZnNmX2xpY192ZXJzaW9uID0gYm90dG9tLT5saWNfdmVyc2lvbjsKLQlhZGFwdGVyLT5zdXBwb3J0ZWRfZmVhdHVyZXMgPSBib3R0b20tPnN1cHBvcnRlZF9mZWF0dXJlczsKKwlhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzID0gYm90dG9tLT5hZGFwdGVyX2ZlYXR1cmVzOworCWFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgPSBib3R0b20tPmNvbm5lY3Rpb25fZmVhdHVyZXM7CiAJYWRhcHRlci0+cGVlcl93d3BuID0gMDsKIAlhZGFwdGVyLT5wZWVyX3d3bm4gPSAwOwogCWFkYXB0ZXItPnBlZXJfZF9pZCA9IDA7CiAKIAlpZiAoeGNoZ19vaykgewotCQlhZGFwdGVyLT53d25uID0gYm90dG9tLT5ucG9ydF9zZXJ2X3BhcmFtLnd3bm47Ci0JCWFkYXB0ZXItPnd3cG4gPSBib3R0b20tPm5wb3J0X3NlcnZfcGFyYW0ud3dwbjsKLQkJYWRhcHRlci0+c19pZCA9IGJvdHRvbS0+c19pZCAmIFpGQ1BfRElEX01BU0s7CisJCWZjX2hvc3Rfbm9kZV9uYW1lKHNob3N0KSA9IGJvdHRvbS0+bnBvcnRfc2Vydl9wYXJhbS53d25uOworCQlmY19ob3N0X3BvcnRfbmFtZShzaG9zdCkgPSBib3R0b20tPm5wb3J0X3NlcnZfcGFyYW0ud3dwbjsKKwkJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9IGJvdHRvbS0+c19pZCAmIFpGQ1BfRElEX01BU0s7CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gYm90dG9tLT5mY19saW5rX3NwZWVkOworCQlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKHNob3N0KSA9IEZDX0NPU19DTEFTUzIgfCBGQ19DT1NfQ0xBU1MzOwogCQlhZGFwdGVyLT5mY190b3BvbG9neSA9IGJvdHRvbS0+ZmNfdG9wb2xvZ3k7Ci0JCWFkYXB0ZXItPmZjX2xpbmtfc3BlZWQgPSBib3R0b20tPmZjX2xpbmtfc3BlZWQ7CiAJCWFkYXB0ZXItPmh5ZHJhX3ZlcnNpb24gPSBib3R0b20tPmFkYXB0ZXJfdHlwZTsKKwkJaWYgKGFkYXB0ZXItPnBoeXNpY2FsX3d3cG4gPT0gMCkKKwkJCWFkYXB0ZXItPnBoeXNpY2FsX3d3cG4gPSBmY19ob3N0X3BvcnRfbmFtZShzaG9zdCk7CisJCWlmIChhZGFwdGVyLT5waHlzaWNhbF9zX2lkID09IDApCisJCQlhZGFwdGVyLT5waHlzaWNhbF9zX2lkID0gZmNfaG9zdF9wb3J0X2lkKHNob3N0KTsKIAl9IGVsc2UgewotCQlhZGFwdGVyLT53d25uID0gMDsKLQkJYWRhcHRlci0+d3dwbiA9IDA7Ci0JCWFkYXB0ZXItPnNfaWQgPSAwOworCQlmY19ob3N0X25vZGVfbmFtZShzaG9zdCkgPSAwOworCQlmY19ob3N0X3BvcnRfbmFtZShzaG9zdCkgPSAwOworCQlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0gMDsKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKIAkJYWRhcHRlci0+ZmNfdG9wb2xvZ3kgPSAwOwotCQlhZGFwdGVyLT5mY19saW5rX3NwZWVkID0gMDsKIAkJYWRhcHRlci0+aHlkcmFfdmVyc2lvbiA9IDA7CiAJfQogCkBAIC0yMDIyLDI2ICsyMDE3LDI4IEBACiAJCWFkYXB0ZXItPnBlZXJfd3dubiA9IGJvdHRvbS0+cGxvZ2lfcGF5bG9hZC53d25uOwogCX0KIAotCWlmKGFkYXB0ZXItPnN1cHBvcnRlZF9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UKXsKKwlpZiAoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UKSB7CiAJCWFkYXB0ZXItPmhhcmR3YXJlX3ZlcnNpb24gPSBib3R0b20tPmhhcmR3YXJlX3ZlcnNpb247Ci0JCW1lbWNweShhZGFwdGVyLT5zZXJpYWxfbnVtYmVyLCBib3R0b20tPnNlcmlhbF9udW1iZXIsIDE3KTsKLQkJRUJDQVNDKGFkYXB0ZXItPnNlcmlhbF9udW1iZXIsIHNpemVvZihhZGFwdGVyLT5zZXJpYWxfbnVtYmVyKSk7CisJCW1lbWNweShmY19ob3N0X3NlcmlhbF9udW1iZXIoc2hvc3QpLCBib3R0b20tPnNlcmlhbF9udW1iZXIsCisJCSAgICAgICBtaW4oRkNfU0VSSUFMX05VTUJFUl9TSVpFLCAxNykpOworCQlFQkNBU0MoZmNfaG9zdF9zZXJpYWxfbnVtYmVyKHNob3N0KSwKKwkJICAgICAgIG1pbihGQ19TRVJJQUxfTlVNQkVSX1NJWkUsIDE3KSk7CiAJfQogCiAJWkZDUF9MT0dfTk9STUFMKCJUaGUgYWRhcHRlciAlcyByZXBvcnRlZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcmlzdGljczpcbiIKLQkJICAgICAgIldXTk4gMHglMDE2THgsICIKLQkJICAgICAgIldXUE4gMHglMDE2THgsICIKLQkJICAgICAgIlNfSUQgMHglMDh4LFxuIgotCQkgICAgICAiYWRhcHRlciB2ZXJzaW9uIDB4JXgsICIKLQkJICAgICAgIkxJQyB2ZXJzaW9uIDB4JXgsICIKLQkJICAgICAgIkZDIGxpbmsgc3BlZWQgJWQgR2Ivc1xuIiwKLQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKLQkJICAgICAgYWRhcHRlci0+d3dubiwKLQkJICAgICAgYWRhcHRlci0+d3dwbiwKLQkJICAgICAgKHVuc2lnbmVkIGludCkgYWRhcHRlci0+c19pZCwKLQkJICAgICAgYWRhcHRlci0+aHlkcmFfdmVyc2lvbiwKLQkJICAgICAgYWRhcHRlci0+ZnNmX2xpY192ZXJzaW9uLAotCQkgICAgICBhZGFwdGVyLT5mY19saW5rX3NwZWVkKTsKKwkJCSJXV05OIDB4JTAxNkx4LCAiCisJCQkiV1dQTiAweCUwMTZMeCwgIgorCQkJIlNfSUQgMHglMDh4LFxuIgorCQkJImFkYXB0ZXIgdmVyc2lvbiAweCV4LCAiCisJCQkiTElDIHZlcnNpb24gMHgleCwgIgorCQkJIkZDIGxpbmsgc3BlZWQgJWQgR2Ivc1xuIiwKKwkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCisJCQkod3duX3QpIGZjX2hvc3Rfbm9kZV9uYW1lKHNob3N0KSwKKwkJCSh3d25fdCkgZmNfaG9zdF9wb3J0X25hbWUoc2hvc3QpLAorCQkJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSwKKwkJCWFkYXB0ZXItPmh5ZHJhX3ZlcnNpb24sCisJCQlhZGFwdGVyLT5mc2ZfbGljX3ZlcnNpb24sCisJCQlmY19ob3N0X3NwZWVkKHNob3N0KSk7CiAJaWYgKFpGQ1BfUVRDQl9WRVJTSU9OIDwgYm90dG9tLT5sb3dfcXRjYl92ZXJzaW9uKSB7CiAJCVpGQ1BfTE9HX05PUk1BTCgiZXJyb3I6IHRoZSBhZGFwdGVyICVzICIKIAkJCQkib25seSBzdXBwb3J0cyBuZXdlciBjb250cm9sIGJsb2NrICIKQEAgLTIwNjIsNyArMjA1OSw2IEBACiAJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCk7CiAJCXJldHVybiAtRUlPOwogCX0KLQl6ZmNwX3NldF9mY19ob3N0X2F0dHJzKGFkYXB0ZXIpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDc4LDExICsyMDc0LDEyIEBACiB7CiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9jb25maWcgKmJvdHRvbTsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKKwlzdHJ1Y3QgZnNmX3F0Y2IgKnF0Y2IgPSBmc2ZfcmVxLT5xdGNiOwogCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikKIAkJcmV0dXJuIC1FSU87CiAKLQlzd2l0Y2ggKGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzKSB7CisJc3dpdGNoIChxdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgewogCiAJY2FzZSBGU0ZfR09PRDoKIAkJaWYgKHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19ldmFsdWF0ZShmc2ZfcmVxLCAxKSkKQEAgLTIxMTIsNyArMjEwOSw3IEBACiAJCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOwogCQkJcmV0dXJuIC1FSU87CiAJCWNhc2UgRlNGX1RPUE9fRkFCUklDOgotCQkJWkZDUF9MT0dfSU5GTygiU3dpdGNoZWQgZmFicmljIGZpYnJlY2hhbm5lbCAiCisJCQlaRkNQX0xPR19OT1JNQUwoIlN3aXRjaGVkIGZhYnJpYyBmaWJyZWNoYW5uZWwgIgogCQkJCSAgICAgICJuZXR3b3JrIGRldGVjdGVkIGF0IGFkYXB0ZXIgJXMuXG4iLAogCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCQkJYnJlYWs7CkBAIC0yMTMwLDcgKzIxMjcsNyBAQAogCQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWJvdHRvbSA9ICZmc2ZfcmVxLT5xdGNiLT5ib3R0b20uY29uZmlnOworCQlib3R0b20gPSAmcXRjYi0+Ym90dG9tLmNvbmZpZzsKIAkJaWYgKGJvdHRvbS0+bWF4X3F0Y2Jfc2l6ZSA8IHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKSB7CiAJCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogTWF4aW11bSBRVENCIHNpemUgKCVkIGJ5dGVzKSAiCiAJCQkJCSJhbGxvd2VkIGJ5IHRoZSBhZGFwdGVyICVzICIKQEAgLTIxNTUsMTIgKzIxNTIsMTAgQEAKIAkJaWYgKHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19ldmFsdWF0ZShmc2ZfcmVxLCAwKSkKIAkJCXJldHVybiAtRUlPOwogCi0JCVpGQ1BfTE9HX0lORk8oIkxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duXG4iLAotCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1hDT05GSUdfT0sgfAotCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsCi0JCQkJJmFkYXB0ZXItPnN0YXR1cyk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKGFkYXB0ZXIpOworCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YQ09ORklHX09LLCAmYWRhcHRlci0+c3RhdHVzKTsKKworCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKGFkYXB0ZXIsCisJCQkmcXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbC5saW5rX2Rvd25faW5mbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwgImZzZi1zdGF0LW5nIik7CkBAIC0yMTc0LDExICsyMTY5LDEzIEBACiAKIC8qKgogICogemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhIC0gcmVxdWVzdCBpbmZvcm1hdGlvbiBhYm91dCBsb2NhbCBwb3J0CisgKiBAZXJwX2FjdGlvbjogRVJQIGFjdGlvbiBmb3IgdGhlIGFkYXB0ZXIgZm9yIHdoaWNoIHBvcnQgZGF0YSBpcyByZXF1ZXN0ZWQKICAqIEBhZGFwdGVyOiBmb3Igd2hpY2ggcG9ydCBkYXRhIGlzIHJlcXVlc3RlZAogICogQGRhdGE6IHJlc3BvbnNlIHRvIGV4Y2hhbmdlIHBvcnQgZGF0YSByZXF1ZXN0CiAgKi8KIGludAotemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCit6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbiwKKwkJCSAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCAqZGF0YSkKIHsKIAl2b2xhdGlsZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CkBAIC0yMTg3LDcgKzIxODQsNyBAQAogICAgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOwogCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcjsKIAotICAgICAgICBpZighKGFkYXB0ZXItPnN1cHBvcnRlZF9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UKSl7CisJaWYgKCEoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UKSkgewogCQlaRkNQX0xPR19JTkZPKCJlcnJvcjogZXhjaGFuZ2UgcG9ydCBkYXRhICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIG5vdCBzdXBwb3J0ZWQgYnkgYWRhcHRlciAlc1xuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwpAQCAtMjIxMSwxMiArMjIwOCwxOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoZXJwX2FjdGlvbikgeworCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gZnNmX3JlcTsKKwkJZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CisJfQorCisJaWYgKGRhdGEpCisJZnNmX3JlcS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkYXRhOworCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKGZzZl9yZXEsIGZzZl9yZXEtPnNiYWxfY3VyciwgMCk7CiAgICAgICAgIHNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKICAgICAgICAgc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCi0gICAgICAgIGZzZl9yZXEtPmRhdGEucG9ydF9kYXRhID0gZGF0YTsKLQogCWluaXRfdGltZXIodGltZXIpOwogCXRpbWVyLT5mdW5jdGlvbiA9IHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyOwogCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXI7CkBAIC0yMjI4LDYgKzIyMzEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQgb24gdGhlIGFkYXB0ZXIgJXNcbiIsCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUoZnNmX3JlcSk7CisJCWlmIChlcnBfYWN0aW9uKQorCQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXF1ZXN0X3F1ZXVlLnF1ZXVlX2xvY2ssCiAJCQkJCWxvY2tfZmxhZ3MpOwogCQlnb3RvIG91dDsKQEAgLTIyNTYsMjEgKzIyNjEsNDIgQEAKIHN0YXRpYyB2b2lkCiB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewotCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCAqYm90dG9tOwotCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCAqZGF0YSA9IGZzZl9yZXEtPmRhdGEucG9ydF9kYXRhOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gYWRhcHRlci0+c2NzaV9ob3N0OworCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IGZzZl9yZXEtPnF0Y2I7CisJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpib3R0b20sICpkYXRhOwogCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgeworCXN3aXRjaCAocXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMpIHsKICAgICAgICAgY2FzZSBGU0ZfR09PRDoKLSAgICAgICAgICAgICAgICBib3R0b20gPSAmZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnBvcnQ7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGRhdGEsIGJvdHRvbSwgc2l6ZW9mKCpkYXRhKSk7CisJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1hQT1JUX09LLCAmYWRhcHRlci0+c3RhdHVzKTsKKworCQlib3R0b20gPSAmcXRjYi0+Ym90dG9tLnBvcnQ7CisJCWRhdGEgPSAoc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0KikgZnNmX3JlcS0+ZGF0YTsKKwkJaWYgKGRhdGEpCisJCQltZW1jcHkoZGF0YSwgYm90dG9tLCBzaXplb2Yoc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0KSk7CisJCWlmIChhZGFwdGVyLT5jb25uZWN0aW9uX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTlBJVl9NT0RFKSB7CisJCQlhZGFwdGVyLT5waHlzaWNhbF93d3BuID0gYm90dG9tLT53d3BuOworCQkJYWRhcHRlci0+cGh5c2ljYWxfc19pZCA9IGJvdHRvbS0+ZmNfcG9ydF9pZDsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPnBoeXNpY2FsX3d3cG4gPSBmY19ob3N0X3BvcnRfbmFtZShzaG9zdCk7CisJCQlhZGFwdGVyLT5waHlzaWNhbF9zX2lkID0gZmNfaG9zdF9wb3J0X2lkKHNob3N0KTsKKwkJfQorCQlmY19ob3N0X21heGZyYW1lX3NpemUoc2hvc3QpID0gYm90dG9tLT5tYXhpbXVtX2ZyYW1lX3NpemU7CisJCWJyZWFrOworCisJY2FzZSBGU0ZfRVhDSEFOR0VfQ09ORklHX0RBVEFfSU5DT01QTEVURToKKwkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWFBPUlRfT0ssICZhZGFwdGVyLT5zdGF0dXMpOworCisJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoYWRhcHRlciwKKwkJCSZxdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLmxpbmtfZG93bl9pbmZvKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsICJ4Y2hnLXBvcnQtbmciKTsKLSAgICAgICAgICAgICAgICBkZWJ1Z19ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAorCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsICJ4Y2hnLXBvcnQtbmciKTsKKwkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMCwKIAkJCSAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMsIHNpemVvZih1MzIpKTsKIAl9CiB9CkBAIC0yMzEyLDcgKzIzMzgsNyBAQAogCiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZF9pZCA9IGVycF9hY3Rpb24tPnBvcnQtPmRfaWQ7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOSU5HLCAmZXJwX2FjdGlvbi0+cG9ydC0+c3RhdHVzKTsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxLT5kYXRhLm9wZW5fcG9ydC5wb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVycF9hY3Rpb24tPnBvcnQ7CiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAKIAkvKiBzdGFydCBRRElPIHJlcXVlc3QgZm9yIHRoaXMgRlNGIHJlcXVlc3QgKi8KQEAgLTIzNTMsNyArMjM3OSw3IEBACiAJc3RydWN0IGZzZl9xdGNiX2hlYWRlciAqaGVhZGVyOwogCXUxNiBzdWJ0YWJsZSwgcnVsZSwgY291bnRlcjsKIAotCXBvcnQgPSBmc2ZfcmVxLT5kYXRhLm9wZW5fcG9ydC5wb3J0OworCXBvcnQgPSAoc3RydWN0IHpmY3BfcG9ydCAqKSBmc2ZfcmVxLT5kYXRhOwogCWhlYWRlciA9ICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXI7CiAKIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKSB7CkBAIC0yNTY2LDcgKzI1OTIsNyBAQAogICAgICAgICBzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0NMT1NJTkcsICZlcnBfYWN0aW9uLT5wb3J0LT5zdGF0dXMpOwotCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEuY2xvc2VfcG9ydC5wb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVycF9hY3Rpb24tPnBvcnQ7CiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+cXRjYi0+aGVhZGVyLnBvcnRfaGFuZGxlID0KIAkgICAgZXJwX2FjdGlvbi0+cG9ydC0+aGFuZGxlOwpAQCAtMjYwNiw3ICsyNjMyLDcgQEAKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCi0JcG9ydCA9IGZzZl9yZXEtPmRhdGEuY2xvc2VfcG9ydC5wb3J0OworCXBvcnQgPSAoc3RydWN0IHpmY3BfcG9ydCAqKSBmc2ZfcmVxLT5kYXRhOwogCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikgewogCQkvKiBkb24ndCBjaGFuZ2UgcG9ydCBzdGF0dXMgaW4gb3VyIGJvb2trZWVwaW5nICovCkBAIC0yNzAzLDggKzI3MjksOCBAQAogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19QT1JUX1BIWVNfQ0xPU0lORywKIAkJCSZlcnBfYWN0aW9uLT5wb3J0LT5zdGF0dXMpOwogCS8qIHNhdmUgYSBwb2ludGVyIHRvIHRoaXMgcG9ydCAqLwotCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEuY2xvc2VfcGh5c2ljYWxfcG9ydC5wb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKLQkvKiBwb3J0IHRvIGJlIGNsb3NlZWQgKi8KKwllcnBfYWN0aW9uLT5mc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVycF9hY3Rpb24tPnBvcnQ7CisJLyogcG9ydCB0byBiZSBjbG9zZWQgKi8KIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPQogCSAgICBlcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7CiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CkBAIC0yNzQ3LDcgKzI3NzMsNyBAQAogCXN0cnVjdCBmc2ZfcXRjYl9oZWFkZXIgKmhlYWRlcjsKIAl1MTYgc3VidGFibGUsIHJ1bGUsIGNvdW50ZXI7CiAKLQlwb3J0ID0gZnNmX3JlcS0+ZGF0YS5jbG9zZV9waHlzaWNhbF9wb3J0LnBvcnQ7CisJcG9ydCA9IChzdHJ1Y3QgemZjcF9wb3J0ICopIGZzZl9yZXEtPmRhdGE7CiAJaGVhZGVyID0gJmZzZl9yZXEtPnF0Y2ItPmhlYWRlcjsKIAogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpIHsKQEAgLTI5MDgsMTAgKzI5MzQsMTEgQEAKIAkJZXJwX2FjdGlvbi0+cG9ydC0+aGFuZGxlOwogCWVycF9hY3Rpb24tPmZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmZjcF9sdW4gPQogCQllcnBfYWN0aW9uLT51bml0LT5mY3BfbHVuOworCWlmICghKGVycF9hY3Rpb24tPmFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpKQogCWVycF9hY3Rpb24tPmZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0Lm9wdGlvbiA9CiAJCUZTRl9PUEVOX0xVTl9TVVBQUkVTU19CT1hJTkc7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOSU5HLCAmZXJwX2FjdGlvbi0+dW5pdC0+c3RhdHVzKTsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxLT5kYXRhLm9wZW5fdW5pdC51bml0ID0gZXJwX2FjdGlvbi0+dW5pdDsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVycF9hY3Rpb24tPnVuaXQ7CiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAKIAkvKiBzdGFydCBRRElPIHJlcXVlc3QgZm9yIHRoaXMgRlNGIHJlcXVlc3QgKi8KQEAgLTI5NTUsOSArMjk4Miw5IEBACiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9zdXBwb3J0ICpib3R0b207CiAJc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yICpxdWV1ZV9kZXNpZ25hdG9yOwogCXUxNiBzdWJ0YWJsZSwgcnVsZSwgY291bnRlcjsKLQl1MzIgYWxsb3dlZCwgZXhjbHVzaXZlLCByZWFkd3JpdGU7CisJaW50IGV4Y2x1c2l2ZSwgcmVhZHdyaXRlOwogCi0JdW5pdCA9IGZzZl9yZXEtPmRhdGEub3Blbl91bml0LnVuaXQ7CisJdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIGZzZl9yZXEtPmRhdGE7CiAKIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKSB7CiAJCS8qIGRvbid0IGNoYW5nZSB1bml0IHN0YXR1cyBpbiBvdXIgYm9va2tlZXBpbmcgKi8KQEAgLTI5NjksMTAgKzI5OTYsNiBAQAogCWJvdHRvbSA9ICZmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydDsKIAlxdWV1ZV9kZXNpZ25hdG9yID0gJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLmZzZl9xdWV1ZV9kZXNpZ25hdG9yOwogCi0JYWxsb3dlZCAgID0gYm90dG9tLT5sdW5fYWNjZXNzX2luZm8gJiBGU0ZfVU5JVF9BQ0NFU1NfT1BFTl9MVU5fQUxMT1dFRDsKLQlleGNsdXNpdmUgPSBib3R0b20tPmx1bl9hY2Nlc3NfaW5mbyAmIEZTRl9VTklUX0FDQ0VTU19FWENMVVNJVkU7Ci0JcmVhZHdyaXRlID0gYm90dG9tLT5sdW5fYWNjZXNzX2luZm8gJiBGU0ZfVU5JVF9BQ0NFU1NfT1VUQk9VTkRfVFJBTlNGRVI7Ci0KIAlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0RFTklFRCB8CiAJCQkgIFpGQ1BfU1RBVFVTX1VOSVRfU0hBUkVEIHwKIAkJCSAgWkZDUF9TVEFUVVNfVU5JVF9SRUFET05MWSwKQEAgLTMxNDYsMTAgKzMxNjksMTUgQEAKIAkJCSAgICAgICB1bml0LT5oYW5kbGUpOwogCQkvKiBtYXJrIHVuaXQgYXMgb3BlbiAqLwogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4sICZ1bml0LT5zdGF0dXMpOwotCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0RFTklFRCB8Ci0JCSAgICAgICAgICAgICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfQk9YRUQsCi0JCSAgICAgICAgICAgICAgICAgICZ1bml0LT5zdGF0dXMpOwotCQlpZiAoYWRhcHRlci0+c3VwcG9ydGVkX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTFVOX1NIQVJJTkcpeworCisJCWlmICghKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpICYmCisJCSAgICAoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0xVTl9TSEFSSU5HKSAmJgorCQkgICAgKGFkYXB0ZXItPmNjd19kZXZpY2UtPmlkLmRldl9tb2RlbCAhPSBaRkNQX0RFVklDRV9NT0RFTF9QUklWKSkgeworCQkJZXhjbHVzaXZlID0gKGJvdHRvbS0+bHVuX2FjY2Vzc19pbmZvICYKKwkJCQkJRlNGX1VOSVRfQUNDRVNTX0VYQ0xVU0lWRSk7CisJCQlyZWFkd3JpdGUgPSAoYm90dG9tLT5sdW5fYWNjZXNzX2luZm8gJgorCQkJCQlGU0ZfVU5JVF9BQ0NFU1NfT1VUQk9VTkRfVFJBTlNGRVIpOworCiAJCQlpZiAoIWV4Y2x1c2l2ZSkKIAkJICAgICAgICAgICAgICAgIGF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19VTklUX1NIQVJFRCwKIAkJCQkJCSZ1bml0LT5zdGF0dXMpOwpAQCAtMzI0Miw3ICszMjcwLDcgQEAKIAkgICAgZXJwX2FjdGlvbi0+cG9ydC0+aGFuZGxlOwogCWVycF9hY3Rpb24tPmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sdW5faGFuZGxlID0gZXJwX2FjdGlvbi0+dW5pdC0+aGFuZGxlOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQ0xPU0lORywgJmVycF9hY3Rpb24tPnVuaXQtPnN0YXR1cyk7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZGF0YS5jbG9zZV91bml0LnVuaXQgPSBlcnBfYWN0aW9uLT51bml0OworCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZXJwX2FjdGlvbi0+dW5pdDsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAogCS8qIHN0YXJ0IFFESU8gcmVxdWVzdCBmb3IgdGhpcyBGU0YgcmVxdWVzdCAqLwpAQCAtMzI4MSw3ICszMzA5LDcgQEAKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCi0JdW5pdCA9IGZzZl9yZXEtPmRhdGEuY2xvc2VfdW5pdC51bml0OwkvKiByZXN0b3JlIHVuaXQgKi8KKwl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgZnNmX3JlcS0+ZGF0YTsKIAogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpIHsKIAkJLyogZG9uJ3QgY2hhbmdlIHVuaXQgc3RhdHVzIGluIG91ciBib29ra2VlcGluZyAqLwpAQCAtMzMwNSw5ICszMzMzLDYgQEAKIAkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAogCQkJCSAiZnNmX3NfcGhhbmRfbnYiKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInBvcnRoaW52IiwgZnNmX3JlcSwKLQkJCQkgICAgICAgJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zMzI2LDkgKzMzNTEsNiBAQAogCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCiAJCQkJICJmc2Zfc19saGFuZF9udiIpOwogCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih1bml0LT5wb3J0LCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigibHVuaGludiIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzQzNiwyMSArMzQ1OCwxNCBAQAogCQlnb3RvIGZhaWxlZF9yZXFfY3JlYXRlOwogCX0KIAotCS8qCi0JICogYXNzb2NpYXRlIEZTRiByZXF1ZXN0IHdpdGggU0NTSSByZXF1ZXN0Ci0JICogKG5lZWQgdGhpcyBmb3IgbG9vayB1cCBvbiBhYm9ydCkKLQkgKi8KLQlmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFzay5mc2ZfcmVxID0gZnNmX3JlcTsKLQlzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAoY2hhciAqKSAmKGZzZl9yZXEtPmRhdGEpOworCXpmY3BfdW5pdF9nZXQodW5pdCk7CisJZnNmX3JlcS0+dW5pdCA9IHVuaXQ7CiAKLQkvKgotCSAqIGFzc29jaWF0ZSBTQ1NJIGNvbW1hbmQgd2l0aCBGU0YgcmVxdWVzdAotCSAqIChuZWVkIHRoaXMgZm9yIGxvb2sgdXAgb24gbm9ybWFsIGNvbW1hbmQgY29tcGxldGlvbikKLQkgKi8KLQlmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFzay5zY3NpX2NtbmQgPSBzY3NpX2NtbmQ7Ci0JZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2suc3RhcnRfamlmZmllcyA9IGppZmZpZXM7Ci0JZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2sudW5pdCA9IHVuaXQ7Ci0JWkZDUF9MT0dfREVCVUcoInVuaXQ9JXAsIGZjcF9sdW49MHglMDE2THhcbiIsIHVuaXQsIHVuaXQtPmZjcF9sdW4pOworCS8qIGFzc29jaWF0ZSBGU0YgcmVxdWVzdCB3aXRoIFNDU0kgcmVxdWVzdCAoZm9yIGxvb2sgdXAgb24gYWJvcnQpICovCisJc2NzaV9jbW5kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKikgZnNmX3JlcTsKKworCS8qIGFzc29jaWF0ZSBTQ1NJIGNvbW1hbmQgd2l0aCBGU0YgcmVxdWVzdCAqLworCWZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgc2NzaV9jbW5kOwogCiAJLyogc2V0IGhhbmRsZXMgb2YgdW5pdCBhbmQgaXRzIHBhcmVudCBwb3J0IGluIFFUQ0IgKi8KIAlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubHVuX2hhbmRsZSA9IHVuaXQtPmhhbmRsZTsKQEAgLTM1ODQsNiArMzU5OSw3IEBACiAgc2VuZF9mYWlsZWQ6CiAgbm9fZml0OgogIGZhaWxlZF9zY3NpX2NtbmQ6CisJemZjcF91bml0X3B1dCh1bml0KTsKIAl6ZmNwX2ZzZl9yZXFfZnJlZShmc2ZfcmVxKTsKIAlmc2ZfcmVxID0gTlVMTDsKIAlzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwpAQCAtMzY0MCw3ICszNjU2LDcgQEAKIAkgKiBob2xkIGEgcG9pbnRlciB0byB0aGUgdW5pdCBiZWluZyB0YXJnZXQgb2YgdGhpcwogCSAqIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0CiAJICovCi0JZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudC51bml0ID0gdW5pdDsKKwlmc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHVuaXQ7CiAKIAkvKiBzZXQgRlNGIHJlbGF0ZWQgZmllbGRzIGluIFFUQ0IgKi8KIAlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubHVuX2hhbmRsZSA9IHVuaXQtPmhhbmRsZTsKQEAgLTM3MDYsOSArMzcyMiw5IEBACiAJaGVhZGVyID0gJmZzZl9yZXEtPnF0Y2ItPmhlYWRlcjsKIAogCWlmICh1bmxpa2VseShmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfVEFTS19NQU5BR0VNRU5UKSkKLQkJdW5pdCA9IGZzZl9yZXEtPmRhdGEuc2VuZF9mY3BfY29tbWFuZF90YXNrX21hbmFnZW1lbnQudW5pdDsKKwkJdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIGZzZl9yZXEtPmRhdGE7CiAJZWxzZQotCQl1bml0ID0gZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2sudW5pdDsKKwkJdW5pdCA9IGZzZl9yZXEtPnVuaXQ7CiAKIAlpZiAodW5saWtlbHkoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKSkgewogCQkvKiBnbyBkaXJlY3RseSB0byBjYWxscyBvZiBzcGVjaWFsIGhhbmRsZXJzICovCkBAIC0zNzY1LDEwICszNzgxLDYgQEAKIAkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAogCQkJCSAiZnNmX3NfaGFuZF9taXMiKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoImhhbmRtaXNtIiwKLQkJCQkgICAgICAgZnNmX3JlcSwKLQkJCQkgICAgICAgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzc4OSwxMCArMzgwMSw2IEBACiAJCWRlYnVnX3RleHRfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCiAJCQkJICAgICAiZnNmX3NfY2xhc3NfbnN1cCIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJ1bnNjbGFzcyIsCi0JCQkJICAgICAgIGZzZl9yZXEsCi0JCQkJICAgICAgICZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM4MTEsMTAgKzM4MTksNiBAQAogCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCiAJCQkJICJmc2Zfc19mY3BfbHVuX252Iik7CiAJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJmbHVuaW52IiwKLQkJCQkgICAgICAgZnNmX3JlcSwKLQkJCQkgICAgICAgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzg1MywxMCArMzg1Nyw2IEBACiAJCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKIAkJCQkgImZzZl9zX2Rpcl9pbmRfbnYiKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bih1bml0LT5wb3J0LT5hZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigiZGlyaW52IiwKLQkJCQkgICAgICAgZnNmX3JlcSwKLQkJCQkgICAgICAgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzg3MiwxMCArMzg3Miw2IEBACiAJCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKIAkJCQkgImZzZl9zX2NtZF9sZW5fbnYiKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bih1bml0LT5wb3J0LT5hZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigiY2xlbmludiIsCi0JCQkJICAgICAgIGZzZl9yZXEsCi0JCQkJICAgICAgICZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM5NDcsNiArMzk0Myw4IEBACiAJCSAgICB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudF9oYW5kbGVyKGZzZl9yZXEpOwogCX0gZWxzZSB7CiAJCXJldHZhbCA9IHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFza19oYW5kbGVyKGZzZl9yZXEpOworCQlmc2ZfcmVxLT51bml0ID0gTlVMTDsKKwkJemZjcF91bml0X3B1dCh1bml0KTsKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM5NzAsMTAgKzM5NjgsMTAgQEAKIAl1MzIgc25zX2xlbjsKIAljaGFyICpmY3BfcnNwX2luZm8gPSB6ZmNwX2dldF9mY3BfcnNwX2luZm9fcHRyKGZjcF9yc3BfaXUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IGZzZl9yZXEtPmRhdGEuc2VuZF9mY3BfY29tbWFuZF90YXNrLnVuaXQ7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IGZzZl9yZXEtPnVuaXQ7CiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmZnNmX3JlcS0+YWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwotCXNjcG50ID0gZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2suc2NzaV9jbW5kOworCXNjcG50ID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgZnNmX3JlcS0+ZGF0YTsKIAlpZiAodW5saWtlbHkoIXNjcG50KSkgewogCQlaRkNQX0xPR19ERUJVRwogCQkgICAgKCJDb21tYW5kIHdpdGggZnNmX3JlcSAlcCBpcyBub3QgYXNzb2NpYXRlZCB0byAiCkBAIC00MDQzLDcgKzQwNDEsNiBAQAogCQkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9ERUJVRywKIAkJCQkgICAgICAoY2hhciAqKSAmZnNmX3JlcS0+cXRjYi0+CiAJCQkJICAgICAgYm90dG9tLmlvLmZjcF9jbW5kLCBGU0ZfRkNQX0NNTkRfU0laRSk7Ci0JCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJjbGVubWlzIiwgZnNmX3JlcSwgTlVMTCwgMCk7CiAJCQlzZXRfaG9zdF9ieXRlKCZzY3BudC0+cmVzdWx0LCBESURfRVJST1IpOwogCQkJZ290byBza2lwX2ZzZnN0YXR1czsKIAkJY2FzZSBSU1BfQ09ERV9GSUVMRF9JTlZBTElEOgpAQCAtNDA2Miw3ICs0MDU5LDYgQEAKIAkJCQkgICAgICAoY2hhciAqKSAmZnNmX3JlcS0+cXRjYi0+CiAJCQkJICAgICAgYm90dG9tLmlvLmZjcF9jbW5kLCBGU0ZfRkNQX0NNTkRfU0laRSk7CiAJCQlzZXRfaG9zdF9ieXRlKCZzY3BudC0+cmVzdWx0LCBESURfRVJST1IpOwotCQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigiY29kZWludiIsIGZzZl9yZXEsIE5VTEwsIDApOwogCQkJZ290byBza2lwX2ZzZnN0YXR1czsKIAkJY2FzZSBSU1BfQ09ERV9ST19NSVNNQVRDSDoKIAkJCS8qIGhhcmR3YXJlIGJ1ZyAqLwpAQCAtNDA3OSw3ICs0MDc1LDYgQEAKIAkJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfREVCVUcsCiAJCQkJICAgICAgKGNoYXIgKikgJmZzZl9yZXEtPnF0Y2ItPgogCQkJCSAgICAgIGJvdHRvbS5pby5mY3BfY21uZCwgRlNGX0ZDUF9DTU5EX1NJWkUpOwotCQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigiY29kZW1pc20iLCBmc2ZfcmVxLCBOVUxMLCAwKTsKIAkJCXNldF9ob3N0X2J5dGUoJnNjcG50LT5yZXN1bHQsIERJRF9FUlJPUik7CiAJCQlnb3RvIHNraXBfZnNmc3RhdHVzOwogCQlkZWZhdWx0OgpAQCAtNDA5Niw3ICs0MDkxLDYgQEAKIAkJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfREVCVUcsCiAJCQkJICAgICAgKGNoYXIgKikgJmZzZl9yZXEtPnF0Y2ItPgogCQkJCSAgICAgIGJvdHRvbS5pby5mY3BfY21uZCwgRlNGX0ZDUF9DTU5EX1NJWkUpOwotCQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigidW5kZWZmY3AiLCBmc2ZfcmVxLCBOVUxMLCAwKTsKIAkJCXNldF9ob3N0X2J5dGUoJnNjcG50LT5yZXN1bHQsIERJRF9FUlJPUik7CiAJCQlnb3RvIHNraXBfZnNmc3RhdHVzOwogCQl9CkBAIC00MTU4LDE5ICs0MTUyLDE3IEBACiAgc2tpcF9mc2ZzdGF0dXM6CiAJWkZDUF9MT0dfREVCVUcoInNjcG50LT5yZXN1bHQgPTB4JXhcbiIsIHNjcG50LT5yZXN1bHQpOwogCi0JemZjcF9jbWRfZGJmX2V2ZW50X3Njc2koInJlc3BvbnNlIiwgc2NwbnQpOworCWlmIChzY3BudC0+cmVzdWx0ICE9IDApCisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KCJlcnJvIiwgMywgZnNmX3JlcS0+YWRhcHRlciwgc2NwbnQpOworCWVsc2UgaWYgKHNjcG50LT5yZXRyaWVzID4gMCkKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoInJldHIiLCA0LCBmc2ZfcmVxLT5hZGFwdGVyLCBzY3BudCk7CisJZWxzZQorCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdCgibm9ybSIsIDYsIGZzZl9yZXEtPmFkYXB0ZXIsIHNjcG50KTsKIAogCS8qIGNsZWFudXAgcG9pbnRlciAobmVlZCB0aGlzIGVzcGVjaWFsbHkgZm9yIGFib3J0KSAqLwogCXNjcG50LT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAotCS8qCi0JICogTk9URToKLQkgKiBhY2NvcmRpbmcgdG8gdGhlIG91dGNvbWUgb2YgYSBkaXNjdXNzaW9uIG9uIGxpbnV4LXNjc2kgd2UKLQkgKiBkb24ndCBuZWVkIHRvIGdyYWIgdGhlIGlvX3JlcXVlc3RfbG9jayBoZXJlIHNpbmNlIHdlIHVzZQotCSAqIHRoZSBuZXcgZWgKLQkgKi8KIAkvKiBhbHdheXMgY2FsbCBiYWNrICovCi0KIAkoc2NwbnQtPnNjc2lfZG9uZSkgKHNjcG50KTsKIAogCS8qCkBAIC00MTk4LDggKzQxOTAsNyBAQAogCXN0cnVjdCBmY3BfcnNwX2l1ICpmY3BfcnNwX2l1ID0gKHN0cnVjdCBmY3BfcnNwX2l1ICopCiAJICAgICYoZnNmX3JlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9yc3ApOwogCWNoYXIgKmZjcF9yc3BfaW5mbyA9IHpmY3BfZ2V0X2ZjcF9yc3BfaW5mb19wdHIoZmNwX3JzcF9pdSk7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9Ci0JICAgIGZzZl9yZXEtPmRhdGEuc2VuZF9mY3BfY29tbWFuZF90YXNrX21hbmFnZW1lbnQudW5pdDsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgZnNmX3JlcS0+ZGF0YTsKIAogCWRlbF90aW1lcigmZnNmX3JlcS0+YWRhcHRlci0+c2NzaV9lcl90aW1lcik7CiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikgewpAQCAtNDI3Niw3ICs0MjY3LDcgQEAKIAlpbnQgZGlyZWN0aW9uOwogCWludCByZXR2YWwgPSAwOwogCi0JaWYgKCEoYWRhcHRlci0+c3VwcG9ydGVkX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfQ0ZEQykpIHsKKwlpZiAoIShhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfQ0ZEQykpIHsKIAkJWkZDUF9MT0dfSU5GTygiY2ZkYyBub3Qgc3VwcG9ydGVkIChhZGFwdGVyICVzKVxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCQlyZXR2YWwgPSAtRU9QTk9UU1VQUDsKQEAgLTQ1NDksNTIgKzQ1NDAsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQotLyoKLSAqIGZ1bmN0aW9uOiAgICB6ZmNwX2ZzZl9yZXFfd2FpdF9hbmRfY2xlYW51cAotICoKLSAqIHB1cnBvc2U6Ci0gKgotICogRklYTUUoZGVzaWduKTogc2lnbmFsIHNlZW1zIHRvIGJlIDwwICEhIQotICogcmV0dXJuczoJMAktIHJlcXVlc3QgY29tcGxldGVkICgqc3RhdHVzIGlzIHZhbGlkKSwgY2xlYW51cCBzdWNjLgotICoJCTwwCS0gcmVxdWVzdCBjb21wbGV0ZWQgKCpzdGF0dXMgaXMgdmFsaWQpLCBjbGVhbnVwIGZhaWxlZAotICoJCT4wCS0gc2lnbmFsIHdoaWNoIGludGVycnVwdGVkIHdhaXRpbmcgKCpzdGF0dXMgaW52YWxpZCksCi0gKgkJCSAgcmVxdWVzdCBub3QgY29tcGxldGVkLCBubyBjbGVhbnVwCi0gKgotICoJCSpzdGF0dXMgaXMgYSBjb3B5IG9mIHN0YXR1cyBvZiBjb21wbGV0ZWQgZnNmX3JlcQotICovCi1pbnQKLXpmY3BfZnNmX3JlcV93YWl0X2FuZF9jbGVhbnVwKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsCi0JCQkgICAgICBpbnQgaW50ZXJydXB0aWJsZSwgdTMyICogc3RhdHVzKQotewotCWludCByZXR2YWwgPSAwOwotCWludCBzaWduYWwgPSAwOwotCi0JaWYgKGludGVycnVwdGlibGUpIHsKLQkJX193YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZnNmX3JlcS0+Y29tcGxldGlvbl93cSwKLQkJCQkJICAgZnNmX3JlcS0+c3RhdHVzICYKLQkJCQkJICAgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCwKLQkJCQkJICAgc2lnbmFsKTsKLQkJaWYgKHNpZ25hbCkgewotCQkJWkZDUF9MT0dfREVCVUcoIkNhdWdodCBzaWduYWwgJWkgd2hpbGUgd2FpdGluZyBmb3IgdGhlICIKLQkJCQkgICAgICAgImNvbXBsZXRpb24gb2YgdGhlIHJlcXVlc3QgYXQgJXBcbiIsCi0JCQkJICAgICAgIHNpZ25hbCwgZnNmX3JlcSk7Ci0JCQlyZXR2YWwgPSBzaWduYWw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSB7Ci0JCV9fd2FpdF9ldmVudChmc2ZfcmVxLT5jb21wbGV0aW9uX3dxLAotCQkJICAgICBmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKLQl9Ci0KLQkqc3RhdHVzID0gZnNmX3JlcS0+c3RhdHVzOwotCi0JLyogY2xlYW51cCByZXF1ZXN0ICovCi0JemZjcF9mc2ZfcmVxX2ZyZWUoZnNmX3JlcSk7Ci0gb3V0OgotCXJldHVybiByZXR2YWw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50CiB6ZmNwX2ZzZl9yZXFfc2JhbF9jaGVjayh1bnNpZ25lZCBsb25nICpmbGFncywKIAkJCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnF1ZXVlLCBpbnQgbmVlZGVkKQpAQCAtNDYxMCwxNSArNDU1NSwxNiBAQAogICogc2V0IHF0Y2IgcG9pbnRlciBpbiBmc2ZfcmVxIGFuZCBpbml0aWFsaXplIFFUQ0IKICAqLwogc3RhdGljIGlubGluZSB2b2lkCi16ZmNwX2ZzZl9yZXFfcXRjYl9pbml0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHUzMiBmc2ZfY21kKQoremZjcF9mc2ZfcmVxX3F0Y2JfaW5pdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewogCWlmIChsaWtlbHkoZnNmX3JlcS0+cXRjYiAhPSBOVUxMKSkgeworCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucmVxX3NlcV9ubyA9IGZzZl9yZXEtPmFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwogCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucmVxX2lkID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcTsKIAkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnVscF9pbmZvID0gWkZDUF9VTFBfSU5GT19WRVJTSU9OOwotCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucXRjYl90eXBlID0gZnNmX3F0Y2JfdHlwZVtmc2ZfY21kXTsKKwkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnF0Y2JfdHlwZSA9IGZzZl9xdGNiX3R5cGVbZnNmX3JlcS0+ZnNmX2NvbW1hbmRdOwogCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucXRjYl92ZXJzaW9uID0gWkZDUF9RVENCX1ZFUlNJT047CiAJCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5yZXFfaGFuZGxlID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcTsKLQkJZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9jb21tYW5kID0gZnNmX2NtZDsKKwkJZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9jb21tYW5kID0gZnNmX3JlcS0+ZnNmX2NvbW1hbmQ7CiAJfQogfQogCkBAIC00Njg2LDcgKzQ2MzIsMTAgQEAKIAkJZ290byBmYWlsZWRfZnNmX3JlcTsKIAl9CiAKLSAgICAgICAgemZjcF9mc2ZfcmVxX3F0Y2JfaW5pdChmc2ZfcmVxLCBmc2ZfY21kKTsKKwlmc2ZfcmVxLT5hZGFwdGVyID0gYWRhcHRlcjsKKwlmc2ZfcmVxLT5mc2ZfY29tbWFuZCA9IGZzZl9jbWQ7CisKKyAgICAgICAgemZjcF9mc2ZfcmVxX3F0Y2JfaW5pdChmc2ZfcmVxKTsKIAogCS8qIGluaXRpYWxpemUgd2FpdHF1ZXVlIHdoaWNoIG1heSBiZSB1c2VkIHRvIHdhaXQgb24gCiAJICAgdGhpcyByZXF1ZXN0IGNvbXBsZXRpb24gKi8KQEAgLTQ3MDgsOCArNDY1NywxMCBAQAogCQlnb3RvIGZhaWxlZF9zYmFsczsKIAl9CiAKLQlmc2ZfcmVxLT5hZGFwdGVyID0gYWRhcHRlcjsJLyogcG9pbnRlciB0byAicGFyZW50IiBhZGFwdGVyICovCi0JZnNmX3JlcS0+ZnNmX2NvbW1hbmQgPSBmc2ZfY21kOworCWlmIChmc2ZfcmVxLT5xdGNiKSB7CisJCWZzZl9yZXEtPnNlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOworCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucmVxX3NlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOworCX0KIAlmc2ZfcmVxLT5zYmFsX251bWJlciA9IDE7CiAJZnNmX3JlcS0+c2JhbF9maXJzdCA9IHJlcV9xdWV1ZS0+ZnJlZV9pbmRleDsKIAlmc2ZfcmVxLT5zYmFsX2N1cnIgPSByZXFfcXVldWUtPmZyZWVfaW5kZXg7CkBAIC00NzYwLDkgKzQ3MTEsOSBAQAogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcmVxX3F1ZXVlOwogCXZvbGF0aWxlIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKKwlpbnQgaW5jX3NlcV9ubzsKIAlpbnQgbmV3X2Rpc3RhbmNlX2Zyb21faW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGluY19zZXFfbm8gPSAxOwogCWludCByZXR2YWwgPSAwOwogCiAJYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CkBAIC00Nzc2LDIzICs0NzI3LDEzIEBACiAJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9UUkFDRSwgKGNoYXIgKikgc2JhbGVbMV0uYWRkciwKIAkJICAgICAgc2JhbGVbMV0ubGVuZ3RoKTsKIAotCS8qIHNldCBzZXF1ZW5jZSBjb3VudGVyIGluIFFUQ0IgKi8KLQlpZiAobGlrZWx5KGZzZl9yZXEtPnF0Y2IpKSB7Ci0JCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87Ci0JCWZzZl9yZXEtPnNlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwotCQlaRkNQX0xPR19UUkFDRSgiRlNGIHJlcXVlc3QgJXAgb2YgYWRhcHRlciAlcyBnZXRzICIKLQkJCSAgICAgICAiRlNGIHNlcXVlbmNlIGNvdW50ZXIgdmFsdWUgb2YgJWlcbiIsCi0JCQkgICAgICAgZnNmX3JlcSwKLQkJCSAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAotCQkJICAgICAgIGZzZl9yZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vKTsKLQl9IGVsc2UKLQkJaW5jX3NlcV9ubyA9IDA7Ci0KIAkvKiBwdXQgYWxsb2NhdGVkIEZTRiByZXF1ZXN0IGF0IGxpc3QgdGFpbCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmZzZl9yZXEtPmxpc3QsICZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfaGVhZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAorCWluY19zZXFfbm8gPSAoZnNmX3JlcS0+cXRjYiAhPSBOVUxMKTsKKwogCS8qIGZpZ3VyZSBvdXQgZXhwaXJhdGlvbiB0aW1lIG9mIHRpbWVvdXQgYW5kIHN0YXJ0IHRpbWVvdXQgKi8KIAlpZiAodW5saWtlbHkodGltZXIpKSB7CiAJCXRpbWVyLT5leHBpcmVzICs9IGppZmZpZXM7CkBAIC00ODIyLDYgKzQ3NjMsOCBAQAogCXJlcV9xdWV1ZS0+ZnJlZV9pbmRleCAlPSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyAgLyogd3JhcCBpZiBuZWVkZWQgKi8KIAluZXdfZGlzdGFuY2VfZnJvbV9pbnQgPSB6ZmNwX3FkaW9fZGV0ZXJtaW5lX3BjaShyZXFfcXVldWUsIGZzZl9yZXEpOwogCisJZnNmX3JlcS0+aXNzdWVkID0gZ2V0X2Nsb2NrKCk7CisKIAlyZXR2YWwgPSBkb19RRElPKGFkYXB0ZXItPmNjd19kZXZpY2UsCiAJCQkgUURJT19GTEFHX1NZTkNfT1VUUFVULAogCQkJIDAsIGZzZl9yZXEtPnNiYWxfZmlyc3QsIGZzZl9yZXEtPnNiYWxfbnVtYmVyLCBOVUxMKTsKQEAgLTQ4NjAsMTUgKzQ4MDMsMTEgQEAKIAkJICogcm91dGluZXMgIHJlc3VsdGluZyBpbiBtaXNzaW5nIHNlcXVlbmNlIGNvdW50ZXIgdmFsdWVzCiAJCSAqIG90aGVyd2lzZSwKIAkJICovCisKIAkJLyogRG9uJ3QgaW5jcmVhc2UgZm9yIHVuc29saWNpdGVkIHN0YXR1cyAqLwotCQlpZiAobGlrZWx5KGluY19zZXFfbm8pKSB7CisJCWlmIChpbmNfc2VxX25vKQogCQkJYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm8rKzsKLQkJCVpGQ1BfTE9HX1RSQUNFCi0JCQkgICAgKCJGU0Ygc2VxdWVuY2UgY291bnRlciB2YWx1ZSBvZiBhZGFwdGVyICVzICIKLQkJCSAgICAgImluY3JlYXNlZCB0byAlaVxuIiwKLQkJCSAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKLQkJCSAgICAgYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm8pOwotCQl9CisKIAkJLyogY291bnQgRlNGIHJlcXVlc3RzIHBlbmRpbmcgKi8KIAkJYXRvbWljX2luYygmYWRhcHRlci0+ZnNmX3JlcXNfYWN0aXZlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAppbmRleCAwNzE0MGRmLi40ODcxOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKQEAgLTExNiw2ICsxMTYsNyBAQAogI2RlZmluZSBGU0ZfSU5WQUxJRF9DT01NQU5EX09QVElPTiAgICAgICAgICAgICAgMHgwMDAwMDBFNQogLyogI2RlZmluZSBGU0ZfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYgICovCiAKKyNkZWZpbmUgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRQkJMTYKICNkZWZpbmUgRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRQkJMTYKIAogLyogRlNGIHN0YXR1cyBxdWFsaWZpZXIsIHJlY29tbWVuZGF0aW9ucyAqLwpAQCAtMTM5LDkgKzE0MCwxOCBAQAogI2RlZmluZSBGU0ZfU1FfQ0ZEQ19TVUJUQUJMRV9MVU4JCTB4MDAwNAogCiAvKiBGU0Ygc3RhdHVzIHF1YWxpZmllciAobW9zdCBzaWduaWZpY2FudCA0IGJ5dGVzKSwgbG9jYWwgbGluayBkb3duICovCi0jZGVmaW5lIEZTRl9QU1FfTElOS19OT0xJR0hUCQkJMHgwMDAwMDAwNAotI2RlZmluZSBGU0ZfUFNRX0xJTktfV1JBUFBMVUcJCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEZTRl9QU1FfTElOS19OT0ZDUAkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRlNGX1BTUV9MSU5LX05PX0xJR0hUCQkJMHgwMDAwMDAwNAorI2RlZmluZSBGU0ZfUFNRX0xJTktfV1JBUF9QTFVHCQkJMHgwMDAwMDAwOAorI2RlZmluZSBGU0ZfUFNRX0xJTktfTk9fRkNQCQkJMHgwMDAwMDAxMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfRklSTVdBUkVfVVBEQVRFCQkweDAwMDAwMDIwCisjZGVmaW5lIEZTRl9QU1FfTElOS19JTlZBTElEX1dXUE4JCTB4MDAwMDAxMDAKKyNkZWZpbmUgRlNGX1BTUV9MSU5LX05PX05QSVZfU1VQUE9SVAkJMHgwMDAwMDIwMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfTk9fRkNQX1JFU09VUkNFUwkJMHgwMDAwMDQwMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfTk9fRkFCUklDX1JFU09VUkNFUwkweDAwMDAwODAwCisjZGVmaW5lIEZTRl9QU1FfTElOS19GQUJSSUNfTE9HSU5fVU5BQkxFCTB4MDAwMDEwMDAKKyNkZWZpbmUgRlNGX1BTUV9MSU5LX1dXUE5fQVNTSUdOTUVOVF9DT1JSVVBURUQJMHgwMDAwMjAwMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfTU9ERV9UQUJMRV9DVVJSVVBURUQJMHgwMDAwNDAwMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfTk9fV1dQTl9BU1NJR05NRU5UCQkweDAwMDA4MDAwCiAKIC8qIHBheWxvYWQgc2l6ZSBpbiBzdGF0dXMgcmVhZCBidWZmZXIgKi8KICNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1BBWUxPQURfU0laRQkJNDAzMgpAQCAtMTU0LDE1ICsxNjQsMjEgQEAKICNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX0lOQ09NSU5HX0VMUwkJMHgwMDAwMDAwMgogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU0VOU0VfREFUQV9BVkFJTCAgICAgICAgMHgwMDAwMDAwMwogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfQklUX0VSUk9SX1RIUkVTSE9MRAkweDAwMDAwMDA0Ci0jZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9MSU5LX0RPV04JCTB4MDAwMDAwMDUgLyogRklYTUU6IHJlYWxseT8gKi8KKyNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX0xJTktfRE9XTgkJMHgwMDAwMDAwNQogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfTElOS19VUCAgICAgICAgICAJMHgwMDAwMDAwNgogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfQ0ZEQ19VUERBVEVECQkweDAwMDAwMDBBCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9DRkRDX0hBUkRFTkVECQkweDAwMDAwMDBCCisjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9GRUFUVVJFX1VQREFURV9BTEVSVAkweDAwMDAwMDBDCiAKIC8qIHN0YXR1cyBzdWJ0eXBlcyBpbiBzdGF0dXMgcmVhZCBidWZmZXIgKi8KICNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1NVQl9DTE9TRV9QSFlTX1BPUlQJMHgwMDAwMDAwMQogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0VSUk9SX1BPUlQJCTB4MDAwMDAwMDIKIAorLyogc3RhdHVzIHN1YnR5cGVzIGZvciBsaW5rIGRvd24gKi8KKyNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1NVQl9OT19QSFlTSUNBTF9MSU5LCTB4MDAwMDAwMDAKKyNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1NVQl9GRElTQ19GQUlMRUQJMHgwMDAwMDAwMQorI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0ZJUk1XQVJFX1VQREFURQkweDAwMDAwMDAyCisKIC8qIHN0YXR1cyBzdWJ0eXBlcyBmb3IgQ0ZEQyAqLwogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0NGRENfSEFSREVORURfT05fU0UJMHgwMDAwMDAwMgogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0NGRENfSEFSREVORURfT05fU0UyIDB4MDAwMDAwMEYKQEAgLTE5MywxMSArMjA5LDE1IEBACiAjZGVmaW5lIEZTRl9RVENCX0xPR19TSVpFCQkJMTAyNAogCiAvKiBjaGFubmVsIGZlYXR1cmVzICovCi0jZGVmaW5lIEZTRl9GRUFUVVJFX1FUQ0JfU1VQUFJFU1NJT04gICAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEZTRl9GRUFUVVJFX0NGREMJCQkweDAwMDAwMDAyCiAjZGVmaW5lIEZTRl9GRUFUVVJFX0xVTl9TSEFSSU5HCQkJMHgwMDAwMDAwNAogI2RlZmluZSBGU0ZfRkVBVFVSRV9IQkFBUElfTUFOQUdFTUVOVCAgICAgICAgICAgMHgwMDAwMDAxMAogI2RlZmluZSBGU0ZfRkVBVFVSRV9FTFNfQ1RfQ0hBSU5FRF9TQkFMUyAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGU0ZfRkVBVFVSRV9VUERBVEVfQUxFUlQJCTB4MDAwMDAxMDAKKworLyogaG9zdCBjb25uZWN0aW9uIGZlYXR1cmVzICovCisjZGVmaW5lIEZTRl9GRUFUVVJFX05QSVZfTU9ERQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRlNGX0ZFQVRVUkVfVk1fQVNTSUdORURfV1dQTgkJMHgwMDAwMDAwMgogCiAvKiBvcHRpb24gKi8KICNkZWZpbmUgRlNGX09QRU5fTFVOX1NVUFBSRVNTX0JPWElORwkJMHgwMDAwMDAwMQpAQCAtMzA1LDE1ICszMjUsMjMgQEAKIAl1MzIgcmVzMVszXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgZnNmX3F1YWxfbG9jYWxsaW5rX2Vycm9yIHsKLQl1MzIgY29kZTsKLQl1MzIgcmVzMVszXTsKK3N0cnVjdCBmc2ZfbGlua19kb3duX2luZm8geworCXUzMiBlcnJvcl9jb2RlOworCXUzMiByZXMxOworCXU4IHJlczJbMl07CisJdTggcHJpbWFyeV9zdGF0dXM7CisJdTggaW9lcnJfY29kZTsKKwl1OCBhY3Rpb25fY29kZTsKKwl1OCByZWFzb25fY29kZTsKKwl1OCBleHBsYW5hdGlvbl9jb2RlOworCXU4IHZlbmRvcl9zcGVjaWZpY19jb2RlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHVuaW9uIGZzZl9wcm90X3N0YXR1c19xdWFsIHsKKwl1NjQgZG91Ymxld29yZFtGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFIC8gc2l6ZW9mKHU2NCldOwogCXN0cnVjdCBmc2ZfcXVhbF92ZXJzaW9uX2Vycm9yICAgdmVyc2lvbl9lcnJvcjsKIAlzdHJ1Y3QgZnNmX3F1YWxfc2VxdWVuY2VfZXJyb3IgIHNlcXVlbmNlX2Vycm9yOwotCXN0cnVjdCBmc2ZfcXVhbF9sb2NhbGxpbmtfZXJyb3IgbG9jYWxsaW5rX2Vycm9yOworCXN0cnVjdCBmc2ZfbGlua19kb3duX2luZm8gbGlua19kb3duX2luZm87CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGZzZl9xdGNiX3ByZWZpeCB7CkBAIC0zMzEsNyArMzU5LDkgQEAKIAl1OCAgYnl0ZVtGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFXTsKIAl1MTYgaGFsZndvcmRbRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSAvIHNpemVvZiAodTE2KV07CiAJdTMyIHdvcmRbRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSAvIHNpemVvZiAodTMyKV07CisJdTY0IGRvdWJsZXdvcmRbRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSAvIHNpemVvZih1NjQpXTsKIAlzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IgZnNmX3F1ZXVlX2Rlc2lnbmF0b3I7CisJc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyBsaW5rX2Rvd25faW5mbzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZnNmX3F0Y2JfaGVhZGVyIHsKQEAgLTQwNiw4ICs0MzYsOCBAQAogCXUzMiBsb3dfcXRjYl92ZXJzaW9uOwogCXUzMiBtYXhfcXRjYl9zaXplOwogCXUzMiBtYXhfZGF0YV90cmFuc2Zlcl9zaXplOwotCXUzMiBzdXBwb3J0ZWRfZmVhdHVyZXM7Ci0JdTggIHJlczFbNF07CisJdTMyIGFkYXB0ZXJfZmVhdHVyZXM7CisJdTMyIGNvbm5lY3Rpb25fZmVhdHVyZXM7CiAJdTMyIGZjX3RvcG9sb2d5OwogCXUzMiBmY19saW5rX3NwZWVkOwogCXUzMiBhZGFwdGVyX3R5cGU7CkBAIC00MjUsNyArNDU1LDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQgewotCXU4IHJlczFbOF07CisJdTY0IHd3cG47CiAJdTMyIGZjX3BvcnRfaWQ7CiAJdTMyIHBvcnRfdHlwZTsKIAl1MzIgcG9ydF9zdGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggMjRlMTZlYy4uZDcxOWY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTU0LDggKzU0LDcgQEAKIHN0YXRpYyBxZGlvX2hhbmRsZXJfdCB6ZmNwX3FkaW9fcmVxdWVzdF9oYW5kbGVyOwogc3RhdGljIHFkaW9faGFuZGxlcl90IHpmY3BfcWRpb19yZXNwb25zZV9oYW5kbGVyOwogc3RhdGljIGludCB6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcl9jaGVjayhzdHJ1Y3QgemZjcF9hZGFwdGVyICosCi0JCQkJCSB1bnNpZ25lZCBpbnQsCi0JCQkJCSB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgaW50LCBpbnQpOwogCiAjZGVmaW5lIFpGQ1BfTE9HX0FSRUEgICAgICAgICAgICAgICAgICAgWkZDUF9MT0dfQVJFQV9RRElPCiAKQEAgLTIxNCwyMiArMjEzLDEyIEBACiAgKgogICovCiBzdGF0aWMgaW5saW5lIGludAotemZjcF9xZGlvX2hhbmRsZXJfZXJyb3JfY2hlY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwgdW5zaWduZWQgaW50IHNpZ2FfZXJyb3IpCit6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcl9jaGVjayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgc3RhdHVzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHFkaW9fZXJyb3IsIHVuc2lnbmVkIGludCBzaWdhX2Vycm9yLAorCQkJICAgICAgaW50IGZpcnN0X2VsZW1lbnQsIGludCBlbGVtZW50c19wcm9jZXNzZWQpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoWkZDUF9MT0dfQ0hFQ0soWkZDUF9MT0dfTEVWRUxfVFJBQ0UpKSB7Ci0JCWlmIChzdGF0dXMgJiBRRElPX1NUQVRVU19JTkJPVU5EX0lOVCkgewotCQkJWkZDUF9MT0dfVFJBQ0UoInN0YXR1cyBpcyIKLQkJCQkgICAgICAgIiBRRElPX1NUQVRVU19JTkJPVU5EX0lOVCBcbiIpOwotCQl9Ci0JCWlmIChzdGF0dXMgJiBRRElPX1NUQVRVU19PVVRCT1VORF9JTlQpIHsKLQkJCVpGQ1BfTE9HX1RSQUNFKCJzdGF0dXMgaXMiCi0JCQkJICAgICAgICIgUURJT19TVEFUVVNfT1VUQk9VTkRfSU5UIFxuIik7Ci0JCX0KLQl9CiAJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFFESU9fU1RBVFVTX0xPT0tfRk9SX0VSUk9SKSkgewogCQlyZXR2YWwgPSAtRUlPOwogCkBAIC0yMzcsOSArMjI2LDEwIEBACiAJCQkgICAgICAicWRpb19lcnJvcj0weCV4LCBzaWdhX2Vycm9yPTB4JXgpXG4iLAogCQkJICAgICAgc3RhdHVzLCBxZGlvX2Vycm9yLCBzaWdhX2Vycm9yKTsKIAotCQkvKiBSZXN0YXJ0aW5nIElPIG9uIHRoZSBmYWlsZWQgYWRhcHRlciBmcm9tIHNjcmF0Y2ggKi8KLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAicWRpb19lcnIiKTsKKwkJemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oYWRhcHRlciwgc3RhdHVzLCBxZGlvX2Vycm9yLCBzaWdhX2Vycm9yLAorCQkJCWZpcnN0X2VsZW1lbnQsIGVsZW1lbnRzX3Byb2Nlc3NlZCk7CiAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgCSogUmVzdGFydGluZyBJTyBvbiB0aGUgZmFpbGVkIGFkYXB0ZXIgZnJvbSBzY3JhdGNoLgogICAgICAgICAgICAgICAgICogU2luY2Ugd2UgaGF2ZSBiZWVuIHVzaW5nIHRoaXMgYWRhcHRlciwgaXQgaXMgc2F2ZSB0byBhc3N1bWUKICAgICAgICAgICAgICAgICAqIHRoYXQgaXQgaXMgbm90IGZhaWxlZCBidXQgcmVjb3ZlcmFibGUuIFRoZSBjYXJkIHNlZW1zIHRvCiAgICAgICAgICAgICAgICAgKiByZXBvcnQgbGluay11cCBldmVudHMgYnkgc2VsZi1pbml0aWF0ZWQgcXVldWUgc2h1dGRvd24uCkBAIC0yODIsNyArMjcyLDggQEAKIAkJICAgICAgIGZpcnN0X2VsZW1lbnQsIGVsZW1lbnRzX3Byb2Nlc3NlZCk7CiAKIAlpZiAodW5saWtlbHkoemZjcF9xZGlvX2hhbmRsZXJfZXJyb3JfY2hlY2soYWRhcHRlciwgc3RhdHVzLCBxZGlvX2Vycm9yLAotCQkJCQkgICAgICAgICAgIHNpZ2FfZXJyb3IpKSkKKwkJCQkJCSAgIHNpZ2FfZXJyb3IsIGZpcnN0X2VsZW1lbnQsCisJCQkJCQkgICBlbGVtZW50c19wcm9jZXNzZWQpKSkKIAkJZ290byBvdXQ7CiAJLyoKIAkgKiB3ZSBzdG9yZWQgYWRkcmVzcyBvZiBzdHJ1Y3QgemZjcF9hZGFwdGVyICBkYXRhIHN0cnVjdHVyZQpAQCAtMzM0LDcgKzMyNSw4IEBACiAJcXVldWUgPSAmYWRhcHRlci0+cmVzcG9uc2VfcXVldWU7CiAKIAlpZiAodW5saWtlbHkoemZjcF9xZGlvX2hhbmRsZXJfZXJyb3JfY2hlY2soYWRhcHRlciwgc3RhdHVzLCBxZGlvX2Vycm9yLAotCQkJCQkgICAgICAgICAgIHNpZ2FfZXJyb3IpKSkKKwkJCQkJCSAgIHNpZ2FfZXJyb3IsIGZpcnN0X2VsZW1lbnQsCisJCQkJCQkgICBlbGVtZW50c19wcm9jZXNzZWQpKSkKIAkJZ290byBvdXQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCAzMWE3NjA2Li4zZGNkMWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtNDQsNyArNDQsOCBAQAogc3RhdGljIGludCB6ZmNwX3Njc2lfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2VoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKik7CiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9ob3N0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgemZjcF90YXNrX21hbmFnZW1lbnRfZnVuY3Rpb24oc3RydWN0IHpmY3BfdW5pdCAqLCB1OCk7CitzdGF0aWMgaW50IHpmY3BfdGFza19tYW5hZ2VtZW50X2Z1bmN0aW9uKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgsCisJCQkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCiBzdGF0aWMgc3RydWN0IHpmY3BfdW5pdCAqemZjcF91bml0X2xvb2t1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCwgc2NzaV9pZF90LAogCQkJCQkgIHNjc2lfbHVuX3QpOwpAQCAtMjQyLDcgKzI0MywxMCBAQAogemZjcF9zY3NpX2NvbW1hbmRfZmFpbChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCwgaW50IHJlc3VsdCkKIHsKIAlzZXRfaG9zdF9ieXRlKCZzY3BudC0+cmVzdWx0LCByZXN1bHQpOwotCXpmY3BfY21kX2RiZl9ldmVudF9zY3NpKCJmYWlsaW5nIiwgc2NwbnQpOworCWlmICgoc2NwbnQtPmRldmljZSAhPSBOVUxMKSAmJiAoc2NwbnQtPmRldmljZS0+aG9zdCAhPSBOVUxMKSkKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoImZhaWwiLCA0LAorCQkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXSwKKwkJCXNjcG50KTsKIAkvKiByZXR1cm4gZGlyZWN0bHkgKi8KIAlzY3BudC0+c2NzaV9kb25lKHNjcG50KTsKIH0KQEAgLTQxNCw2NyArNDE4LDM4IEBACiAJcmV0dXJuIChzdHJ1Y3QgemZjcF9wb3J0ICopIE5VTEw7CiB9CiAKLS8qCi0gKiBmdW5jdGlvbjoJemZjcF9zY3NpX2VoX2Fib3J0X2hhbmRsZXIKKy8qKgorICogemZjcF9zY3NpX2VoX2Fib3J0X2hhbmRsZXIgLSBhYm9ydCB0aGUgc3BlY2lmaWVkIFNDU0kgY29tbWFuZAorICogQHNjcG50OiBwb2ludGVyIHRvIHNjc2lfY21uZCB0byBiZSBhYm9ydGVkIAorICogUmV0dXJuOiBTVUNDRVNTIC0gY29tbWFuZCBoYXMgYmVlbiBhYm9ydGVkIGFuZCBjbGVhbmVkIHVwIGluIGludGVybmFsCisgKiAgICAgICAgICBib29ra2VlcGluZywgU0NTSSBzdGFjayB3b24ndCBiZSBjYWxsZWQgZm9yIGFib3J0ZWQgY29tbWFuZAorICogICAgICAgICBGQUlMRUQgLSBvdGhlcndpc2UKICAqCi0gKiBwdXJwb3NlOgl0cmllcyB0byBhYm9ydCB0aGUgc3BlY2lmaWVkICh0aW1lZCBvdXQpIFNDU0kgY29tbWFuZAotICoKLSAqIG5vdGU6IAlXZSBkbyBub3QgbmVlZCB0byBjYXJlIGZvciBhIFNDU0kgY29tbWFuZCB3aGljaCBjb21wbGV0ZXMKLSAqCQlub3JtYWxseSBidXQgbGF0ZSBkdXJpbmcgdGhpcyBhYm9ydCByb3V0aW5lIHJ1bnMuCi0gKgkJV2UgYXJlIGFsbG93ZWQgdG8gcmV0dXJuIGxhdGUgY29tbWFuZHMgdG8gdGhlIFNDU0kgc3RhY2suCi0gKgkJSXQgdHJhY2tzIHRoZSBzdGF0ZSBvZiBjb21tYW5kcyBhbmQgd2lsbCBoYW5kbGUgbGF0ZSBjb21tYW5kcy4KLSAqCQkoVXN1YWxseSwgdGhlIG5vcm1hbCBjb21wbGV0aW9uIG9mIGxhdGUgY29tbWFuZHMgaXMgaWdub3JlZCB3aXRoCi0gKgkJcmVzcGVjdCB0byB0aGUgcnVubmluZyBhYm9ydCBvcGVyYXRpb24uIEdyZXAgZm9yICdkb25lX2xhdGUnCi0gKgkJaW4gdGhlIFNDU0kgc3RhY2tzIHNvdXJjZXMuKQotICoKLSAqIHJldHVybnM6CVNVQ0NFU1MJLSBjb21tYW5kIGhhcyBiZWVuIGFib3J0ZWQgYW5kIGNsZWFuZWQgdXAgaW4gaW50ZXJuYWwKLSAqCQkJICBib29ra2VlcGluZywKLSAqCQkJICBTQ1NJIHN0YWNrIHdvbid0IGJlIGNhbGxlZCBmb3IgYWJvcnRlZCBjb21tYW5kCi0gKgkJRkFJTEVECS0gb3RoZXJ3aXNlCisgKiBXZSBkbyBub3QgbmVlZCB0byBjYXJlIGZvciBhIFNDU0kgY29tbWFuZCB3aGljaCBjb21wbGV0ZXMgbm9ybWFsbHkKKyAqIGJ1dCBsYXRlIGR1cmluZyB0aGlzIGFib3J0IHJvdXRpbmUgcnVucy4gIFdlIGFyZSBhbGxvd2VkIHRvIHJldHVybgorICogbGF0ZSBjb21tYW5kcyB0byB0aGUgU0NTSSBzdGFjay4gIEl0IHRyYWNrcyB0aGUgc3RhdGUgb2YgY29tbWFuZHMgYW5kCisgKiB3aWxsIGhhbmRsZSBsYXRlIGNvbW1hbmRzLiAgKFVzdWFsbHksIHRoZSBub3JtYWwgY29tcGxldGlvbiBvZiBsYXRlCisgKiBjb21tYW5kcyBpcyBpZ25vcmVkIHdpdGggcmVzcGVjdCB0byB0aGUgcnVubmluZyBhYm9ydCBvcGVyYXRpb24uKQogICovCiBpbnQKLV9femZjcF9zY3NpX2VoX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCit6ZmNwX3Njc2lfZWhfYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKKyAJc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0OworIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJaW50IHJldHZhbCA9IFNVQ0NFU1M7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqbmV3X2ZzZl9yZXEsICpvbGRfZnNmX3JlcTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSB1bml0LT5wb3J0OwotCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdCA9IHNjcG50LT5kZXZpY2UtPmhvc3Q7Ci0JdW5pb24gemZjcF9yZXFfZGF0YSAqcmVxX2RhdGEgPSBOVUxMOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKm5ld19mc2ZfcmVxID0gTlVMTDsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpvbGRfZnNmX3JlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBzdGF0dXMgPSAwOwogCi0JLyogdGhlIGNvbXBvbmVudHMgb2YgYSBhYm9ydF9kYmYgcmVjb3JkIChmaXhlZCBzaXplIHJlY29yZCkgKi8KLQl1NjQgZGJmX3Njc2lfY21uZCA9ICh1bnNpZ25lZCBsb25nKSBzY3BudDsKLQljaGFyIGRiZl9vcGNvZGVbWkZDUF9BQk9SVF9EQkZfTEVOR1RIXTsKLQl3d25fdCBkYmZfd3duID0gcG9ydC0+d3dwbjsKLQlmY3BfbHVuX3QgZGJmX2ZjcF9sdW4gPSB1bml0LT5mY3BfbHVuOwotCXU2NCBkYmZfcmV0cmllcyA9IHNjcG50LT5yZXRyaWVzOwotCXU2NCBkYmZfYWxsb3dlZCA9IHNjcG50LT5hbGxvd2VkOwotCXU2NCBkYmZfdGltZW91dCA9IDA7Ci0JdTY0IGRiZl9mc2ZfcmVxID0gMDsKLQl1NjQgZGJmX2ZzZl9zdGF0dXMgPSAwOwotCXU2NCBkYmZfZnNmX3F1YWxbMl0gPSB7IDAsIDAgfTsKLQljaGFyIGRiZl9yZXN1bHRbWkZDUF9BQk9SVF9EQkZfTEVOR1RIXSA9ICIjI3VuZGVmIjsKLQotCW1lbXNldChkYmZfb3Bjb2RlLCAwLCBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpOwotCW1lbWNweShkYmZfb3Bjb2RlLAotCSAgICAgICBzY3BudC0+Y21uZCwKLQkgICAgICAgbWluKHNjcG50LT5jbWRfbGVuLCAodW5zaWduZWQgY2hhcikgWkZDUF9BQk9SVF9EQkZfTEVOR1RIKSk7CisJc2NzaV9ob3N0ID0gc2NwbnQtPmRldmljZS0+aG9zdDsKKwlhZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9ob3N0LT5ob3N0ZGF0YVswXTsKKwl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAKIAlaRkNQX0xPR19JTkZPKCJhYm9ydGluZyBzY3NpX2NtbmQ9JXAgb24gYWRhcHRlciAlc1xuIiwKIAkJICAgICAgc2NwbnQsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKHNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKLQotCS8qCi0JICogUmFjZSBjb25kaXRpb24gYmV0d2VlbiBub3JtYWwgKGxhdGUpIGNvbXBsZXRpb24gYW5kIGFib3J0IGhhcwotCSAqIHRvIGJlIGF2b2lkZWQuCi0JICogVGhlIGVudGlyaXR5IG9mIGFsbCBhY2Nlc3NlcyB0byBzY3NpX3JlcSBoYXZlIHRvIGJlIGF0b21pYy4KLQkgKiBzY3NpX3JlcSBpcyB1c3VhbGx5IHBhcnQgb2YgdGhlIGZzZl9yZXEgYW5kIHRodXMgd2UgYmxvY2sgdGhlCi0JICogcmVsZWFzZSBvZiBmc2ZfcmVxIGFzIGxvbmcgYXMgd2UgbmVlZCB0byBhY2Nlc3Mgc2NzaV9yZXEuCi0JICovCisJLyogYXZvaWQgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBsYXRlIG5vcm1hbCBjb21wbGV0aW9uIGFuZCBhYm9ydCAqLwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwogCiAJLyoKQEAgLTQ4NCwxNDQgKzQ1OSw0NyBAQAogCSAqIHRoaXMgcm91dGluZSByZXR1cm5zLiAoc2NwbnQgaXMgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGlzIHJvdXRpbmUKIAkgKiBhbmQgbXVzdCBub3QgZGlzYXBwZWFyIGR1cmluZyBhYm9ydCBldmVuIG9uIGxhdGUgY29tcGxldGlvbi4pCiAJICovCi0JcmVxX2RhdGEgPSAodW5pb24gemZjcF9yZXFfZGF0YSAqKSBzY3BudC0+aG9zdF9zY3JpYmJsZTsKLQkvKiBERUJVRyAqLwotCVpGQ1BfTE9HX0RFQlVHKCJyZXFfZGF0YT0lcFxuIiwgcmVxX2RhdGEpOwotCWlmICghcmVxX2RhdGEpIHsKLQkJWkZDUF9MT0dfREVCVUcoImxhdGUgY29tbWFuZCBjb21wbGV0aW9uIG92ZXJ0b29rIGFib3J0XG4iKTsKLQkJLyoKLQkJICogVGhhdCdzIGl0LgotCQkgKiBEbyBub3QgaW5pdGlhdGUgYWJvcnQgYnV0IHJldHVybiBTVUNDRVNTLgotCQkgKi8KLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKLQkJcmV0dmFsID0gU1VDQ0VTUzsKLQkJc3RybmNweShkYmZfcmVzdWx0LCAiIyNsYXRlMSIsIFpGQ1BfQUJPUlRfREJGX0xFTkdUSCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEZpZ3VyZSBvdXQgd2hpY2ggZnNmX3JlcSBuZWVkcyB0byBiZSBhYm9ydGVkLiAqLwotCW9sZF9mc2ZfcmVxID0gcmVxX2RhdGEtPnNlbmRfZmNwX2NvbW1hbmRfdGFzay5mc2ZfcmVxOwotCi0JZGJmX2ZzZl9yZXEgPSAodW5zaWduZWQgbG9uZykgb2xkX2ZzZl9yZXE7Ci0JZGJmX3RpbWVvdXQgPQotCSAgICAoamlmZmllcyAtIHJlcV9kYXRhLT5zZW5kX2ZjcF9jb21tYW5kX3Rhc2suc3RhcnRfamlmZmllcykgLyBIWjsKLQotCVpGQ1BfTE9HX0RFQlVHKCJvbGRfZnNmX3JlcT0lcFxuIiwgb2xkX2ZzZl9yZXEpOworCW9sZF9mc2ZfcmVxID0gKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKikgc2NwbnQtPmhvc3Rfc2NyaWJibGU7CiAJaWYgKCFvbGRfZnNmX3JlcSkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwotCQlaRkNQX0xPR19OT1JNQUwoImJ1Zzogbm8gb2xkIGZzZiByZXF1ZXN0IGZvdW5kXG4iKTsKLQkJWkZDUF9MT0dfTk9STUFMKCJyZXFfZGF0YTpcbiIpOwotCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX05PUk1BTCwKLQkJCSAgICAgIChjaGFyICopIHJlcV9kYXRhLCBzaXplb2YgKHVuaW9uIHpmY3BfcmVxX2RhdGEpKTsKLQkJWkZDUF9MT0dfTk9STUFMKCJzY3NpX2NtbmQ6XG4iKTsKLQkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9OT1JNQUwsCi0JCQkgICAgICAoY2hhciAqKSBzY3BudCwgc2l6ZW9mIChzdHJ1Y3Qgc2NzaV9jbW5kKSk7Ci0JCXJldHZhbCA9IEZBSUxFRDsKLQkJc3RybmNweShkYmZfcmVzdWx0LCAiIyNidWc6ciIsIFpGQ1BfQUJPUlRfREJGX0xFTkdUSCk7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoImx0ZTEiLCBhZGFwdGVyLCBzY3BudCwgbmV3X2ZzZl9yZXEpOworCQlyZXR2YWwgPSBTVUNDRVNTOwogCQlnb3RvIG91dDsKIAl9Ci0Jb2xkX2ZzZl9yZXEtPmRhdGEuc2VuZF9mY3BfY29tbWFuZF90YXNrLnNjc2lfY21uZCA9IE5VTEw7Ci0JLyogbWFyayBvbGQgcmVxdWVzdCBhcyBiZWluZyBhYm9ydGVkICovCisJb2xkX2ZzZl9yZXEtPmRhdGEgPSAwOwogCW9sZF9mc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUSU5HOwotCS8qCi0JICogV2UgaGF2ZSB0byBjb2xsZWN0IGFsbCBpbmZvcm1hdGlvbiAoZS5nLiB1bml0KSBuZWVkZWQgYnkgCi0JICogemZjcF9mc2ZfYWJvcnRfZmNwX2NvbW1hbmQgYmVmb3JlIGNhbGxpbmcgdGhhdCByb3V0aW5lCi0JICogc2luY2UgdGhhdCByb3V0aW5lIGlzIG5vdCBhbGxvd2VkIHRvIGFjY2VzcwotCSAqIGZzZl9yZXEgd2hpY2ggaXQgaXMgZ29pbmcgdG8gYWJvcnQuCi0JICogVGhpcyBpcyBiZWNhdXNlIG9mIHdlIG5lZWQgdG8gcmVsZWFzZSBmc2ZfcmVxX2xpc3RfbG9jawotCSAqIGJlZm9yZSBjYWxsaW5nIHpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kLgotCSAqIFNpbmNlIHRoaXMgbG9jayB3aWxsIG5vdCBiZSBoZWxkLCBmc2ZfcmVxIG1heSBjb21wbGV0ZQotCSAqIGxhdGUgYW5kIG1heSBiZSByZWxlYXNlZCBtZWFud2hpbGUuCi0JICovCi0JWkZDUF9MT0dfREVCVUcoInVuaXQgMHglMDE2THggKCVwKVxuIiwgdW5pdC0+ZmNwX2x1biwgdW5pdCk7CiAKLQkvKgotCSAqIFdlIGJsb2NrIChjYWxsIHNjaGVkdWxlKQotCSAqIFRoYXQncyB3aHkgd2UgbXVzdCByZWxlYXNlIHRoZSBsb2NrIGFuZCBlbmFibGUgdGhlCi0JICogaW50ZXJydXB0cyBiZWZvcmUuCi0JICogT24gdGhlIG90aGVyIGhhbmQgd2UgZG8gbm90IG5lZWQgdGhlIGxvY2sgYW55bW9yZSBzaW5jZQotCSAqIGFsbCBjcml0aWNhbCBhY2Nlc3NlcyB0byBzY3NpX3JlcSBhcmUgZG9uZS4KLQkgKi8KKwkvKiBkb24ndCBhY2Nlc3Mgb2xkX2ZzZl9yZXEgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBhYm9ydF9sb2NrICovCiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAkvKiBjYWxsIEZTRiByb3V0aW5lIHdoaWNoIGRvZXMgdGhlIGFib3J0ICovCiAJbmV3X2ZzZl9yZXEgPSB6ZmNwX2ZzZl9hYm9ydF9mY3BfY29tbWFuZCgodW5zaWduZWQgbG9uZykgb2xkX2ZzZl9yZXEsCiAJCQkJCQkgYWRhcHRlciwgdW5pdCwgMCk7Ci0JWkZDUF9MT0dfREVCVUcoIm5ld19mc2ZfcmVxPSVwXG4iLCBuZXdfZnNmX3JlcSk7CiAJaWYgKCFuZXdfZnNmX3JlcSkgeworCQlaRkNQX0xPR19JTkZPKCJlcnJvcjogaW5pdGlhdGlvbiBvZiBBYm9ydCBGQ1AgQ21uZCBmYWlsZWRcbiIpOwogCQlyZXR2YWwgPSBGQUlMRUQ7Ci0JCVpGQ1BfTE9HX05PUk1BTCgiZXJyb3I6IGluaXRpYXRpb24gb2YgQWJvcnQgRkNQIENtbmQgIgotCQkJCSJmYWlsZWRcbiIpOwotCQlzdHJuY3B5KGRiZl9yZXN1bHQsICIjI25vcmVzIiwgWkZDUF9BQk9SVF9EQkZfTEVOR1RIKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogd2FpdCBmb3IgY29tcGxldGlvbiBvZiBhYm9ydCAqLwotCVpGQ1BfTE9HX0RFQlVHKCJ3YWl0aW5nIGZvciBjbGVhbnVwLi4uXG4iKTsKLSNpZiAxCi0JLyoKLQkgKiBGSVhNRToKLQkgKiBjb3B5aW5nIHpmY3BfZnNmX3JlcV93YWl0X2FuZF9jbGVhbnVwIGNvZGUgaXMgbm90IHJlYWxseSBuaWNlCi0JICovCiAJX193YWl0X2V2ZW50KG5ld19mc2ZfcmVxLT5jb21wbGV0aW9uX3dxLAogCQkgICAgIG5ld19mc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKLQlzdGF0dXMgPSBuZXdfZnNmX3JlcS0+c3RhdHVzOwotCWRiZl9mc2Zfc3RhdHVzID0gbmV3X2ZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzOwotCS8qCi0JICogUmFscGhzIHNwZWNpYWwgZGVidWcgbG9hZCBwcm92aWRlcyB0aW1lc3RhbXBzIGluIHRoZSBGU0YKLQkgKiBzdGF0dXMgcXVhbGlmaWVyLiBUaGlzIG1pZ2h0IGJlIHNwZWNpZmllZCBsYXRlciBpZiBiZWluZwotCSAqIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFib3J0cy4KLQkgKi8KLQlkYmZfZnNmX3F1YWxbMF0gPQotCSAgICAqKHU2NCAqKSAmIG5ld19mc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMF07Ci0JZGJmX2ZzZl9xdWFsWzFdID0KLQkgICAgKih1NjQgKikgJiBuZXdfZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbC53b3JkWzJdOwotCXpmY3BfZnNmX3JlcV9mcmVlKG5ld19mc2ZfcmVxKTsKLSNlbHNlCi0JcmV0dmFsID0gemZjcF9mc2ZfcmVxX3dhaXRfYW5kX2NsZWFudXAobmV3X2ZzZl9yZXEsCi0JCQkJCSAgICAgICBaRkNQX1VOSU5URVJSVVBUSUJMRSwgJnN0YXR1cyk7Ci0jZW5kaWYKLQlaRkNQX0xPR19ERUJVRygiV2FpdGluZyBmb3IgY2xlYW51cCBjb21wbGV0ZSwgc3RhdHVzPTB4JXhcbiIsIHN0YXR1cyk7CisKIAkvKiBzdGF0dXMgc2hvdWxkIGJlIHZhbGlkIHNpbmNlIHNpZ25hbHMgd2VyZSBub3QgcGVybWl0dGVkICovCi0JaWYgKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVFNVQ0NFRURFRCkgeworCWlmIChuZXdfZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUU1VDQ0VFREVEKSB7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoIm9rYXkiLCBhZGFwdGVyLCBzY3BudCwgbmV3X2ZzZl9yZXEpOwogCQlyZXR2YWwgPSBTVUNDRVNTOwotCQlzdHJuY3B5KGRiZl9yZXN1bHQsICIjI3N1Y2MiLCBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpOwotCX0gZWxzZSBpZiAoc3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUTk9UTkVFREVEKSB7CisJfSBlbHNlIGlmIChuZXdfZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUTk9UTkVFREVEKSB7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoImx0ZTIiLCBhZGFwdGVyLCBzY3BudCwgbmV3X2ZzZl9yZXEpOwogCQlyZXR2YWwgPSBTVUNDRVNTOwotCQlzdHJuY3B5KGRiZl9yZXN1bHQsICIjI2xhdGUyIiwgWkZDUF9BQk9SVF9EQkZfTEVOR1RIKTsKIAl9IGVsc2UgeworCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJmYWlsIiwgYWRhcHRlciwgc2NwbnQsIG5ld19mc2ZfcmVxKTsKIAkJcmV0dmFsID0gRkFJTEVEOwotCQlzdHJuY3B5KGRiZl9yZXN1bHQsICIjI2ZhaWwiLCBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpOwogCX0KLQorCXpmY3BfZnNmX3JlcV9mcmVlKG5ld19mc2ZfcmVxKTsKICBvdXQ6Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+YWJvcnRfZGJmLCAxLCAmZGJmX3Njc2lfY21uZCwgc2l6ZW9mICh1NjQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfb3Bjb2RlLCBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl93d24sIHNpemVvZiAod3duX3QpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfZmNwX2x1biwgc2l6ZW9mIChmY3BfbHVuX3QpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfcmV0cmllcywgc2l6ZW9mICh1NjQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfYWxsb3dlZCwgc2l6ZW9mICh1NjQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfdGltZW91dCwgc2l6ZW9mICh1NjQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfZnNmX3JlcSwgc2l6ZW9mICh1NjQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfZnNmX3N0YXR1cywgc2l6ZW9mICh1NjQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfZnNmX3F1YWxbMF0sIHNpemVvZiAodTY0KSk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+YWJvcnRfZGJmLCAxLCAmZGJmX2ZzZl9xdWFsWzFdLCBzaXplb2YgKHU2NCkpOwotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+YWJvcnRfZGJmLCAxLCBkYmZfcmVzdWx0KTsKLQotCXNwaW5fbG9ja19pcnEoc2NzaV9ob3N0LT5ob3N0X2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKLWludAotemZjcF9zY3NpX2VoX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdCA9IHNjcG50LT5kZXZpY2UtPmhvc3Q7Ci0Jc3Bpbl9sb2NrX2lycShzY3NpX2hvc3QtPmhvc3RfbG9jayk7Ci0JcmMgPSBfX3pmY3Bfc2NzaV9laF9hYm9ydF9oYW5kbGVyKHNjcG50KTsKLQlzcGluX3VubG9ja19pcnEoc2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCXJldHVybiByYzsKLX0KLQogLyoKICAqIGZ1bmN0aW9uOgl6ZmNwX3Njc2lfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIKICAqCkBAIC02NTEsOCArNTI5LDkgQEAKIAkgKi8KIAlpZiAoIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfVU5JVF9OT1RTVVBQVU5JVFJFU0VULAogCQkJICAgICAgJnVuaXQtPnN0YXR1cykpIHsKLQkJcmV0dmFsID0KLQkJICAgIHpmY3BfdGFza19tYW5hZ2VtZW50X2Z1bmN0aW9uKHVuaXQsIEZDUF9MT0dJQ0FMX1VOSVRfUkVTRVQpOworCQlyZXR2YWwgPSB6ZmNwX3Rhc2tfbWFuYWdlbWVudF9mdW5jdGlvbih1bml0LAorCQkJCQkJICAgICAgIEZDUF9MT0dJQ0FMX1VOSVRfUkVTRVQsCisJCQkJCQkgICAgICAgc2NwbnQpOwogCQlpZiAocmV0dmFsKSB7CiAJCQlaRkNQX0xPR19ERUJVRygidW5pdCByZXNldCBmYWlsZWQgKHVuaXQ9JXApXG4iLCB1bml0KTsKIAkJCWlmIChyZXR2YWwgPT0gLUVOT1RTVVBQKQpAQCAtNjY4LDcgKzU0Nyw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCX0KLQlyZXR2YWwgPSB6ZmNwX3Rhc2tfbWFuYWdlbWVudF9mdW5jdGlvbih1bml0LCBGQ1BfVEFSR0VUX1JFU0VUKTsKKwlyZXR2YWwgPSB6ZmNwX3Rhc2tfbWFuYWdlbWVudF9mdW5jdGlvbih1bml0LCBGQ1BfVEFSR0VUX1JFU0VULCBzY3BudCk7CiAJaWYgKHJldHZhbCkgewogCQlaRkNQX0xPR19ERUJVRygidGFyZ2V0IHJlc2V0IGZhaWxlZCAodW5pdD0lcClcbiIsIHVuaXQpOwogCQlyZXR2YWwgPSBGQUlMRUQ7CkBAIC02ODEsMTIgKzU2MCwxMiBAQAogfQogCiBzdGF0aWMgaW50Ci16ZmNwX3Rhc2tfbWFuYWdlbWVudF9mdW5jdGlvbihzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCB0bV9mbGFncykKK3pmY3BfdGFza19tYW5hZ2VtZW50X2Z1bmN0aW9uKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IHRtX2ZsYWdzLAorCQkJICAgICAgc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7Ci0JaW50IHJldHZhbDsKLQlpbnQgc3RhdHVzOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7CisJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBpc3N1ZSB0YXNrIG1hbmFnZW1lbnQgZnVuY3Rpb24gKi8KIAlmc2ZfcmVxID0gemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrX21hbmFnZW1lbnQKQEAgLTY5Niw3MCArNTc1LDYzIEBACiAJCQkgICAgICAiZmFpbGVkIGZvciB1bml0IDB4JTAxNkx4IG9uIHBvcnQgMHglMDE2THggb24gICIKIAkJCSAgICAgICJhZGFwdGVyICVzXG4iLCB1bml0LT5mY3BfbHVuLCB1bml0LT5wb3J0LT53d3BuLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoIm5yZXMiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfd2FpdF9hbmRfY2xlYW51cChmc2ZfcmVxLAotCQkJCQkgICAgICAgWkZDUF9VTklOVEVSUlVQVElCTEUsICZzdGF0dXMpOworCV9fd2FpdF9ldmVudChmc2ZfcmVxLT5jb21wbGV0aW9uX3dxLAorCQkgICAgIGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOworCiAJLyoKIAkgKiBjaGVjayBjb21wbGV0aW9uIHN0YXR1cyBvZiB0YXNrIG1hbmFnZW1lbnQgZnVuY3Rpb24KLQkgKiAoc3RhdHVzIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgc2luY2Ugbm8gc2lnbmFscyBwZXJtaXR0ZWQpCiAJICovCi0JaWYgKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UTUZVTkNGQUlMRUQpCisJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UTUZVTkNGQUlMRUQpIHsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgiZmFpbCIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CiAJCXJldHZhbCA9IC1FSU87Ci0JZWxzZSBpZiAoc3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RNRlVOQ05PVFNVUFApCisJfSBlbHNlIGlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfVE1GVU5DTk9UU1VQUCkgeworCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJuc3VwIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKIAkJcmV0dmFsID0gLUVOT1RTVVBQOwotCWVsc2UKLQkJcmV0dmFsID0gMDsKKwl9IGVsc2UKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgib2theSIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CisKKwl6ZmNwX2ZzZl9yZXFfZnJlZShmc2ZfcmVxKTsKICBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOgl6ZmNwX3Njc2lfZWhfYnVzX3Jlc2V0X2hhbmRsZXIKLSAqCi0gKiBwdXJwb3NlOgotICoKLSAqIHJldHVybnM6CisvKioKKyAqIHpmY3Bfc2NzaV9laF9idXNfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGJ1cyAocmVvcGVuIGFkYXB0ZXIpCiAgKi8KIGludAogemZjcF9zY3NpX2VoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50KQogewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0Kikgc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CiAKLQl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAJWkZDUF9MT0dfTk9STUFMKCJidXMgcmVzZXQgYmVjYXVzZSBvZiBwcm9ibGVtcyB3aXRoICIKIAkJCSJ1bml0IDB4JTAxNkx4XG4iLCB1bml0LT5mY3BfbHVuKTsKLQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwKTsKLQl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwotCXJldHZhbCA9IFNVQ0NFU1M7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7CisJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKLS8qCi0gKiBmdW5jdGlvbjoJemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlcgotICoKLSAqIHB1cnBvc2U6Ci0gKgotICogcmV0dXJuczoKKy8qKgorICogemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGhvc3QgKHJlb3BlbiBhZGFwdGVyKQogICovCiBpbnQKIHpmY3Bfc2NzaV9laF9ob3N0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCiB7Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQqKSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKIAotCXVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlaRkNQX0xPR19OT1JNQUwoImhvc3QgcmVzZXQgYmVjYXVzZSBvZiBwcm9ibGVtcyB3aXRoICIKIAkJCSJ1bml0IDB4JTAxNkx4XG4iLCB1bml0LT5mY3BfbHVuKTsKLQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwKTsKLQl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwotCXJldHZhbCA9IFNVQ0NFU1M7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7CisJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKIC8qCkBAIC04MjYsMTAgKzY5OCwxNiBAQAogemZjcF9hZGFwdGVyX3Njc2lfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAKIAlzaG9zdCA9IGFkYXB0ZXItPnNjc2lfaG9zdDsKIAlpZiAoIXNob3N0KQogCQlyZXR1cm47CisJcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkKKwkJaWYgKHBvcnQtPnJwb3J0KQorCQkJcG9ydC0+cnBvcnQgPSBOVUxMOworCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAlmY19yZW1vdmVfaG9zdChzaG9zdCk7CiAJc2NzaV9yZW1vdmVfaG9zdChzaG9zdCk7CiAJc2NzaV9ob3N0X3B1dChzaG9zdCk7CkBAIC05MDQsMTggKzc4Miw2IEBACiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQKLXpmY3Bfc2V0X2ZjX2hvc3RfYXR0cnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGFkYXB0ZXItPnNjc2lfaG9zdDsKLQotCWZjX2hvc3Rfbm9kZV9uYW1lKHNob3N0KSA9IGFkYXB0ZXItPnd3bm47Ci0JZmNfaG9zdF9wb3J0X25hbWUoc2hvc3QpID0gYWRhcHRlci0+d3dwbjsKLQlzdHJuY3B5KGZjX2hvc3Rfc2VyaWFsX251bWJlcihzaG9zdCksIGFkYXB0ZXItPnNlcmlhbF9udW1iZXIsCi0gICAgICAgICAgICAgICAgbWluKEZDX1NFUklBTF9OVU1CRVJfU0laRSwgMzIpKTsKLQlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKHNob3N0KSA9IEZDX0NPU19DTEFTUzIgfCBGQ19DT1NfQ0xBU1MzOwotfQotCiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgemZjcF90cmFuc3BvcnRfZnVuY3Rpb25zID0gewogCS5nZXRfc3RhcmdldF9wb3J0X2lkID0gemZjcF9nZXRfcG9ydF9pZCwKIAkuZ2V0X3N0YXJnZXRfcG9ydF9uYW1lID0gemZjcF9nZXRfcG9ydF9uYW1lLApAQCAtOTI3LDcgKzc5MywxMCBAQAogCS5zaG93X2hvc3Rfbm9kZV9uYW1lID0gMSwKIAkuc2hvd19ob3N0X3BvcnRfbmFtZSA9IDEsCiAJLnNob3dfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyA9IDEsCisJLnNob3dfaG9zdF9tYXhmcmFtZV9zaXplID0gMSwKIAkuc2hvd19ob3N0X3NlcmlhbF9udW1iZXIgPSAxLAorCS5zaG93X2hvc3Rfc3BlZWQgPSAxLAorCS5zaG93X2hvc3RfcG9ydF9pZCA9IDEsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnNfYWRhcHRlci5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc19hZGFwdGVyLmMKaW5kZXggZTczNDVhNy4uMGNkNDM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc19hZGFwdGVyLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc19hZGFwdGVyLmMKQEAgLTYyLDIxICs2MiwxOCBAQAogc3RhdGljIERFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPLCB6ZmNwX3N5c2ZzX2FkYXB0ZXJfIyNfbmFtZSMjX3Nob3csIE5VTEwpOwogCiBaRkNQX0RFRklORV9BREFQVEVSX0FUVFIoc3RhdHVzLCAiMHglMDh4XG4iLCBhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSk7Ci1aRkNQX0RFRklORV9BREFQVEVSX0FUVFIod3dubiwgIjB4JTAxNmxseFxuIiwgYWRhcHRlci0+d3dubik7Ci1aRkNQX0RFRklORV9BREFQVEVSX0FUVFIod3dwbiwgIjB4JTAxNmxseFxuIiwgYWRhcHRlci0+d3dwbik7Ci1aRkNQX0RFRklORV9BREFQVEVSX0FUVFIoc19pZCwgIjB4JTA2eFxuIiwgYWRhcHRlci0+c19pZCk7CiBaRkNQX0RFRklORV9BREFQVEVSX0FUVFIocGVlcl93d25uLCAiMHglMDE2bGx4XG4iLCBhZGFwdGVyLT5wZWVyX3d3bm4pOwogWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKHBlZXJfd3dwbiwgIjB4JTAxNmxseFxuIiwgYWRhcHRlci0+cGVlcl93d3BuKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihwZWVyX2RfaWQsICIweCUwNnhcbiIsIGFkYXB0ZXItPnBlZXJfZF9pZCk7CitaRkNQX0RFRklORV9BREFQVEVSX0FUVFIocGh5c2ljYWxfd3dwbiwgIjB4JTAxNmxseFxuIiwgYWRhcHRlci0+cGh5c2ljYWxfd3dwbik7CitaRkNQX0RFRklORV9BREFQVEVSX0FUVFIocGh5c2ljYWxfc19pZCwgIjB4JTA2eFxuIiwgYWRhcHRlci0+cGh5c2ljYWxfc19pZCk7CiBaRkNQX0RFRklORV9BREFQVEVSX0FUVFIoY2FyZF92ZXJzaW9uLCAiMHglMDR4XG4iLCBhZGFwdGVyLT5oeWRyYV92ZXJzaW9uKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihsaWNfdmVyc2lvbiwgIjB4JTA4eFxuIiwgYWRhcHRlci0+ZnNmX2xpY192ZXJzaW9uKTsKLVpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihmY19saW5rX3NwZWVkLCAiJWQgR2Ivc1xuIiwgYWRhcHRlci0+ZmNfbGlua19zcGVlZCk7CiBaRkNQX0RFRklORV9BREFQVEVSX0FUVFIoZmNfc2VydmljZV9jbGFzcywgIiVkXG4iLCBhZGFwdGVyLT5mY19zZXJ2aWNlX2NsYXNzKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihmY190b3BvbG9neSwgIiVzXG4iLAogCQkJIGZjX3RvcG9sb2dpZXNbYWRhcHRlci0+ZmNfdG9wb2xvZ3ldKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihoYXJkd2FyZV92ZXJzaW9uLCAiMHglMDh4XG4iLAogCQkJIGFkYXB0ZXItPmhhcmR3YXJlX3ZlcnNpb24pOwotWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKHNlcmlhbF9udW1iZXIsICIlMTdzXG4iLCBhZGFwdGVyLT5zZXJpYWxfbnVtYmVyKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihzY3NpX2hvc3Rfbm8sICIweCV4XG4iLCBhZGFwdGVyLT5zY3NpX2hvc3Rfbm8pOwogWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKGluX3JlY292ZXJ5LCAiJWRcbiIsIGF0b21pY190ZXN0X21hc2sKIAkJCSAoWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSwgJmFkYXB0ZXItPnN0YXR1cykpOwpAQCAtMjU1LDIxICsyNTIsMTggQEAKIAkmZGV2X2F0dHJfaW5fcmVjb3ZlcnkuYXR0ciwKIAkmZGV2X2F0dHJfcG9ydF9yZW1vdmUuYXR0ciwKIAkmZGV2X2F0dHJfcG9ydF9hZGQuYXR0ciwKLQkmZGV2X2F0dHJfd3dubi5hdHRyLAotCSZkZXZfYXR0cl93d3BuLmF0dHIsCi0JJmRldl9hdHRyX3NfaWQuYXR0ciwKIAkmZGV2X2F0dHJfcGVlcl93d25uLmF0dHIsCiAJJmRldl9hdHRyX3BlZXJfd3dwbi5hdHRyLAogCSZkZXZfYXR0cl9wZWVyX2RfaWQuYXR0ciwKKwkmZGV2X2F0dHJfcGh5c2ljYWxfd3dwbi5hdHRyLAorCSZkZXZfYXR0cl9waHlzaWNhbF9zX2lkLmF0dHIsCiAJJmRldl9hdHRyX2NhcmRfdmVyc2lvbi5hdHRyLAogCSZkZXZfYXR0cl9saWNfdmVyc2lvbi5hdHRyLAotCSZkZXZfYXR0cl9mY19saW5rX3NwZWVkLmF0dHIsCiAJJmRldl9hdHRyX2ZjX3NlcnZpY2VfY2xhc3MuYXR0ciwKIAkmZGV2X2F0dHJfZmNfdG9wb2xvZ3kuYXR0ciwKIAkmZGV2X2F0dHJfc2NzaV9ob3N0X25vLmF0dHIsCiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl9oYXJkd2FyZV92ZXJzaW9uLmF0dHIsCi0JJmRldl9hdHRyX3NlcmlhbF9udW1iZXIuYXR0ciwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jIGIvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYwppbmRleCBkYmFkN2YzLi4yNGVkNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CQkvKiByZXF1ZXN0X3JlZ2lvbiwgY2hlY2tfcmVnaW9uICovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CQkvKiByZXF1ZXN0X3JlZ2lvbiAqLwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vZWJ1cy5oPgkJCS8qIEVCdXMgZGV2aWNlCQkJCQkqLwogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgkJCS8qIE9wZW5Qcm9tIExpYnJhcnkgCQkJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCmluZGV4IGM5MzJiM2IuLjg3NmQxZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwpAQCAtMTEwOSwxNSArMTEwOSw2IEBACiAJcmV0dXJuICgwKTsKIH0KIAotdWludDY0X3QKLWFoY19saW51eF9nZXRfbWVtc2l6ZSh2b2lkKQotewotCXN0cnVjdCBzeXNpbmZvIHNpOwotCi0Jc2lfbWVtaW5mbygmc2kpOwotCXJldHVybiAoKHVpbnQ2NF90KXNpLnRvdGFscmFtIDw8IFBBR0VfU0hJRlQpOwotfQotCiAvKgogICogUGxhY2UgdGhlIFNDU0kgYnVzIGludG8gYSBrbm93biBzdGF0ZSBieSBlaXRoZXIgcmVzZXR0aW5nIGl0LAogICogb3IgZm9yY2luZyB0cmFuc2ZlciBuZWdvdGlhdGlvbnMgb24gdGhlIG5leHQgY29tbWFuZCB0byBhbnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCmluZGV4IGM1Mjk5NjIuLmJlOWVkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaApAQCAtNDk0LDggKzQ5NCw2IEBACiBpbnQJCWFoY19saW51eF9yZWdpc3Rlcl9ob3N0KHN0cnVjdCBhaGNfc29mdGMgKiwKIAkJCQkJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIAotdWludDY0X3QJYWhjX2xpbnV4X2dldF9tZW1zaXplKHZvaWQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByZXR0eSBQcmludGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGluZm9fc3RyIHsKIAljaGFyICpidWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbV9wY2kuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCmluZGV4IDBkNDRhNjkuLjNjZTc3ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCkBAIC0xODAsNiArMTgwLDcgQEAKIAlzdHJ1Y3QJCSBhaGNfcGNpX2lkZW50aXR5ICplbnRyeTsKIAljaGFyCQkqbmFtZTsKIAlpbnQJCSBlcnJvcjsKKwlzdHJ1Y3QgZGV2aWNlCSpkZXYgPSAmcGRldi0+ZGV2OwogCiAJcGNpID0gcGRldjsKIAllbnRyeSA9IGFoY19maW5kX3BjaV9kZXZpY2UocGNpKTsKQEAgLTIwOSwxMSArMjEwLDEyIEBACiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNAotCSAmJiBhaGNfbGludXhfZ2V0X21lbXNpemUoKSA+IDB4ODAwMDAwMDAKLQkgJiYgcGNpX3NldF9kbWFfbWFzayhwZGV2LCBtYXNrXzM5Yml0KSA9PSAwKSB7CisJICAgICYmIGFoYy0+ZmVhdHVyZXMgJiBBSENfTEFSR0VfU0NCUworCSAgICAmJiBkbWFfc2V0X21hc2soZGV2LCBtYXNrXzM5Yml0KSA9PSAwCisJICAgICYmIGRtYV9nZXRfcmVxdWlyZWRfbWFzayhkZXYpID4gRE1BXzMyQklUX01BU0spIHsKIAkJYWhjLT5mbGFncyB8PSBBSENfMzlCSVRfQUREUkVTU0lORzsKIAl9IGVsc2UgewotCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJaWYgKGRtYV9zZXRfbWFzayhkZXYsIERNQV8zMkJJVF9NQVNLKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWljN3h4eDogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogICAgICAgICAgICAgICAgIAlyZXR1cm4gKC1FTk9ERVYpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jIGIvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwppbmRleCBlNjE1M2ZlLi5hOGNmYmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMKQEAgLTk5Niw2ICs5OTYsNyBAQAogI2lmZGVmIEVEX0RCR1AJCQogCXByaW50aygic2VuZF9zODcwOiBwcmRhZGRyXzIgMHglOHggdG1wY2lwICV4IHRhcmdldF9pZCAlZFxuIiwgZGV2LT5pZFtjXVt0YXJnZXRfaWRdLnByZGFkZHIsdG1wY2lwLHRhcmdldF9pZCk7CiAjZW5kaWYJCisJZGV2LT5pZFtjXVt0YXJnZXRfaWRdLnByZGFkZHIgPSBkZXYtPmlkW2NdW3RhcmdldF9pZF0ucHJkX2J1czsKIAlvdXRsKGRldi0+aWRbY11bdGFyZ2V0X2lkXS5wcmRhZGRyLCB0bXBjaXApOwogCXRtcGNpcCA9IHRtcGNpcCAtIDI7CiAJb3V0YigweDA2LCB0bXBjaXApOwpAQCAtMjU3Miw3ICsyNTczLDcgQEAKIAkJZm9yIChrID0gMDsgayA8IDE2OyBrKyspIHsKIAkJCWlmICghYXRwX2Rldi0+aWRbal1ba10ucHJkX3RhYmxlKQogCQkJCWNvbnRpbnVlOwotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCBhdHBfZGV2LT5pZFtqXVtrXS5wcmRfdGFibGUsIGF0cF9kZXYtPmlkW2pdW2tdLnByZGFkZHIpOworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCBhdHBfZGV2LT5pZFtqXVtrXS5wcmRfdGFibGUsIGF0cF9kZXYtPmlkW2pdW2tdLnByZF9idXMpOwogCQkJYXRwX2Rldi0+aWRbal1ba10ucHJkX3RhYmxlID0gTlVMTDsKIAkJfQogCX0KQEAgLTI1ODQsMTIgKzI1ODUsMTMgQEAKIAlpbnQgYyxrOwogCWZvcihjPTA7YyA8IDI7YysrKSB7CiAJICAgCWZvcihrPTA7azwxNjtrKyspIHsKLQkgICAJCQlhdHBfZGV2LT5pZFtjXVtrXS5wcmRfdGFibGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCAmKGF0cF9kZXYtPmlkW2NdW2tdLnByZGFkZHIpKTsKKwkgICAJCQlhdHBfZGV2LT5pZFtjXVtrXS5wcmRfdGFibGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCAmKGF0cF9kZXYtPmlkW2NdW2tdLnByZF9idXMpKTsKIAkgICAJCQlpZiAoIWF0cF9kZXYtPmlkW2NdW2tdLnByZF90YWJsZSkgewogCSAgIAkJCQlwcmludGsoImF0cDg3MHVfaW5pdF90YWJsZXMgZmFpbFxuIik7CiAJCQkJYXRwODcwdV9mcmVlX3RhYmxlcyhob3N0KTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KKwkJCWF0cF9kZXYtPmlkW2NdW2tdLnByZGFkZHIgPSBhdHBfZGV2LT5pZFtjXVtrXS5wcmRfYnVzOwogCQkJYXRwX2Rldi0+aWRbY11ba10uZGV2c3A9MHgyMDsKIAkJCWF0cF9kZXYtPmlkW2NdW2tdLmRldnR5cGUgPSAweDdmOwogCQkJYXRwX2Rldi0+aWRbY11ba10uY3Vycl9yZXEgPSBOVUxMOwkJCSAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0cDg3MHUuaCBiL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmgKaW5kZXggODlmNDNhZi4uNjJiYWU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0cDg3MHUuaAorKysgYi9kcml2ZXJzL3Njc2kvYXRwODcwdS5oCkBAIC01NCw4ICs1NCw5IEBACiAJCXVuc2lnbmVkIGxvbmcgdHJhbl9sZW47CiAJCXVuc2lnbmVkIGxvbmcgbGFzdF9sZW47CiAJCXVuc2lnbmVkIGNoYXIgKnByZF9wb3M7Ci0JCXVuc2lnbmVkIGNoYXIgKnByZF90YWJsZTsKLQkJZG1hX2FkZHJfdCBwcmRhZGRyOworCQl1bnNpZ25lZCBjaGFyICpwcmRfdGFibGU7CS8qIEtlcm5lbCBhZGRyZXNzIG9mIFBSRCB0YWJsZSAqLworCQlkbWFfYWRkcl90IHByZF9idXM7CQkvKiBCdXMgYWRkcmVzcyBvZiBQUkQgKi8KKwkJZG1hX2FkZHJfdCBwcmRhZGRyOwkJLyogRHluYW1pY2FsbHkgdXBkYXRlZCBpbiBkcml2ZXIgKi8KIAkJc3RydWN0IHNjc2lfY21uZCAqY3Vycl9yZXE7CiAJfSBpZFsyXVsxNl07CiAgICAgCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmRfbWNzLmMgYi9kcml2ZXJzL3Njc2kvZmRfbWNzLmMKaW5kZXggZmE2NTJmOGEuLmQ1OWQ0NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mZF9tY3MuYworKysgYi9kcml2ZXJzL3Njc2kvZmRfbWNzLmMKQEAgLTEzNjAsMyArMTM2MCw1IEBACiAJLnVzZV9jbHVzdGVyaW5nIAkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiB9OwogI2luY2x1ZGUgInNjc2lfbW9kdWxlLmMiCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKaW5kZXggODU1MDNmYS4uZjJhNzJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hvc3RzLmMKKysrIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKQEAgLTk4LDYgKzk4LDcgQEAKIAkJc3dpdGNoIChvbGRzdGF0ZSkgewogCQljYXNlIFNIT1NUX0NSRUFURUQ6CiAJCWNhc2UgU0hPU1RfUlVOTklORzoKKwkJY2FzZSBTSE9TVF9DQU5DRUxfUkVDT1ZFUlk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gaWxsZWdhbDsKQEAgLTEwNywxMiArMTA4LDMxIEBACiAJY2FzZSBTSE9TVF9ERUw6CiAJCXN3aXRjaCAob2xkc3RhdGUpIHsKIAkJY2FzZSBTSE9TVF9DQU5DRUw6CisJCWNhc2UgU0hPU1RfREVMX1JFQ09WRVJZOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGlsbGVnYWw7CiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIFNIT1NUX0NBTkNFTF9SRUNPVkVSWToKKwkJc3dpdGNoIChvbGRzdGF0ZSkgeworCQljYXNlIFNIT1NUX0NBTkNFTDoKKwkJY2FzZSBTSE9TVF9SRUNPVkVSWToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBpbGxlZ2FsOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTSE9TVF9ERUxfUkVDT1ZFUlk6CisJCXN3aXRjaCAob2xkc3RhdGUpIHsKKwkJY2FzZSBTSE9TVF9DQU5DRUxfUkVDT1ZFUlk6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gaWxsZWdhbDsKKwkJfQorCQlicmVhazsKIAl9CiAJc2hvc3QtPnNob3N0X3N0YXRlID0gc3RhdGU7CiAJcmV0dXJuIDA7CkBAIC0xMzQsMTMgKzE1NCwyNCBAQAogICoqLwogdm9pZCBzY3NpX3JlbW92ZV9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJZG93bigmc2hvc3QtPnNjYW5fbXV0ZXgpOwotCXNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX0NBTkNFTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9DQU5DRUwpKQorCQlpZiAoc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfQ0FOQ0VMX1JFQ09WRVJZKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQl1cCgmc2hvc3QtPnNjYW5fbXV0ZXgpOworCQkJcmV0dXJuOworCQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJdXAoJnNob3N0LT5zY2FuX211dGV4KTsKIAlzY3NpX2ZvcmdldF9ob3N0KHNob3N0KTsKIAlzY3NpX3Byb2NfaG9zdF9ybShzaG9zdCk7CiAKLQlzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9ERUwpOworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfREVMKSkKKwkJQlVHX09OKHNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX0RFTF9SRUNPVkVSWSkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJdHJhbnNwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIAljbGFzc19kZXZpY2VfdW5yZWdpc3Rlcigmc2hvc3QtPnNob3N0X2NsYXNzZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm1tY2EuYyBiL2RyaXZlcnMvc2NzaS9pYm1tY2EuYwppbmRleCA2ZTU0YzdkLi4xOTM5MmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKKysrIGIvZHJpdmVycy9zY3NpL2libW1jYS5jCkBAIC00NjAsNiArNDYwLDggQEAKIE1PRFVMRV9QQVJNKG5vcm1hbCwgIjFpIik7CiBNT0RVTEVfUEFSTShhbnNpLCAiMWkiKTsKICNlbmRpZgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAjZW5kaWYKIC8qY291bnRlciBvZiBjb25jdXJyZW50IGRpc2sgcmVhZC93cml0ZXMsIHRvIHR1cm4gb24vb2ZmIGRpc2sgbGVkICovCiBzdGF0aWMgaW50IGRpc2tfcndfaW5fcHJvZ3Jlc3MgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCA1YjE0OTM0Li5mZjI1MjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtNzI3LDYgKzcyNywxNiBAQAogCQlpZiAoaG9zdGRhdGEtPm1hZGFwdGVyX2luZm8ucG9ydF9tYXhfdHh1WzBdKSAKIAkJCWhvc3RkYXRhLT5ob3N0LT5tYXhfc2VjdG9ycyA9IAogCQkJCWhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvLnBvcnRfbWF4X3R4dVswXSA+PiA5OworCQkKKwkJaWYgKGhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvLm9zX3R5cGUgPT0gMyAmJgorCQkgICAgc3RyY21wKGhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvLnNycF92ZXJzaW9uLCAiMS42YSIpIDw9IDApIHsKKwkJCXByaW50aygiaWJtdnNjc2k6IGhvc3QgKFZlci4gJXMpIGRvZXNuJ3Qgc3VwcG9ydCBsYXJnZSIKKwkJCSAgICAgICAidHJhbnNmZXJzXG4iLAorCQkJICAgICAgIGhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvLnNycF92ZXJzaW9uKTsKKwkJCXByaW50aygiaWJtdnNjc2k6IGxpbWl0aW5nIHNjYXR0ZXJsaXN0cyB0byAlZFxuIiwKKwkJCSAgICAgICBNQVhfSU5ESVJFQ1RfQlVGUyk7CisJCQlob3N0ZGF0YS0+aG9zdC0+c2dfdGFibGVzaXplID0gTUFYX0lORElSRUNUX0JVRlM7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKaW5kZXggNWNjNTNjZC4uZDkyMjczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKQEAgLTI0NjUsOSArMjQ2NSwxMiBAQAogICoKICAqCUxPQ0tJTkc6CiAgKglOb25lLiAgKGV4ZWN1dGluZyBpbiBrZXJuZWwgdGhyZWFkIGNvbnRleHQpCisgKgorICoJUkVUVVJOUzoKKyAqCU5vbi16ZXJvIGlmIHFjIGNvbXBsZXRlZCwgemVybyBvdGhlcndpc2UuCiAgKi8KIAotc3RhdGljIHZvaWQgYXRhX3Bpb19jb21wbGV0ZSAoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgYXRhX3Bpb19jb21wbGV0ZSAoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCXU4IGRydl9zdGF0OwpAQCAtMjQ4NiwxNCArMjQ4OSwxNCBAQAogCQlpZiAoZHJ2X3N0YXQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkgewogCQkJYXAtPnBpb190YXNrX3N0YXRlID0gUElPX1NUX0xBU1RfUE9MTDsKIAkJCWFwLT5waW9fdGFza190aW1lb3V0ID0gamlmZmllcyArIEFUQV9UTU9VVF9QSU87Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAogCWRydl9zdGF0ID0gYXRhX3dhaXRfaWRsZShhcCk7CiAJaWYgKCFhdGFfb2soZHJ2X3N0YXQpKSB7CiAJCWFwLT5waW9fdGFza19zdGF0ZSA9IFBJT19TVF9FUlI7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKQEAgLTI1MDIsNiArMjUwNSwxMCBAQAogCWFwLT5waW9fdGFza19zdGF0ZSA9IFBJT19TVF9JRExFOwogCiAJYXRhX3BvbGxfcWNfY29tcGxldGUocWMsIGRydl9zdGF0KTsKKworCS8qIGFub3RoZXIgY29tbWFuZCBtYXkgc3RhcnQgYXQgdGhpcyBwb2ludCAqLworCisJcmV0dXJuIDE7CiB9CiAKIApAQCAtMjcwOSw3ICsyNzE2LDcgQEAKIAogbmV4dF9zZzoKIAlpZiAodW5saWtlbHkocWMtPmN1cnNnID49IHFjLT5uX2VsZW0pKSB7Ci0JCS8qIAorCQkvKgogCQkgKiBUaGUgZW5kIG9mIHFjLT5zZyBpcyByZWFjaGVkIGFuZCB0aGUgZGV2aWNlIGV4cGVjdHMKIAkJICogbW9yZSBkYXRhIHRvIHRyYW5zZmVyLiBJbiBvcmRlciBub3QgdG8gb3ZlcnJ1biBxYy0+c2cKIAkJICogYW5kIGZ1bGZpbGwgbGVuZ3RoIHNwZWNpZmllZCBpbiB0aGUgYnl0ZSBjb3VudCByZWdpc3RlciwKQEAgLTI3MjEsNyArMjcyOCw3IEBACiAJCXVuc2lnbmVkIGludCBpOwogCiAJCWlmICh3b3JkcykgLyogd2FybmluZyBpZiBieXRlcyA+IDEgKi8KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSV1OiAldSBieXRlcyB0cmFpbGluZyBkYXRhXG4iLCAKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSV1OiAldSBieXRlcyB0cmFpbGluZyBkYXRhXG4iLAogCQkJICAgICAgIGFwLT5pZCwgYnl0ZXMpOwogCiAJCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKQpAQCAtMjg0OSw5ICsyODU2LDcgQEAKIAlpZiAoaXNfYXRhcGlfdGFza2ZpbGUoJnFjLT50ZikpIHsKIAkJLyogbm8gbW9yZSBkYXRhIHRvIHRyYW5zZmVyIG9yIHVuc3VwcG9ydGVkIEFUQVBJIGNvbW1hbmQgKi8KIAkJaWYgKChzdGF0dXMgJiBBVEFfRFJRKSA9PSAwKSB7Ci0JCQlhcC0+cGlvX3Rhc2tfc3RhdGUgPSBQSU9fU1RfSURMRTsKLQotCQkJYXRhX3BvbGxfcWNfY29tcGxldGUocWMsIHN0YXR1cyk7CisJCQlhcC0+cGlvX3Rhc2tfc3RhdGUgPSBQSU9fU1RfTEFTVDsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0yODg3LDcgKzI4OTIsMTIgQEAKIHN0YXRpYyB2b2lkIGF0YV9waW9fdGFzayh2b2lkICpfZGF0YSkKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHFjX2NvbXBsZXRlZDsKKworZnNtX3N0YXJ0OgorCXRpbWVvdXQgPSAwOworCXFjX2NvbXBsZXRlZCA9IDA7CiAKIAlzd2l0Y2ggKGFwLT5waW9fdGFza19zdGF0ZSkgewogCWNhc2UgUElPX1NUX0lETEU6CkBAIC0yODk4LDcgKzI5MDgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUElPX1NUX0xBU1Q6Ci0JCWF0YV9waW9fY29tcGxldGUoYXApOworCQlxY19jb21wbGV0ZWQgPSBhdGFfcGlvX2NvbXBsZXRlKGFwKTsKIAkJYnJlYWs7CiAKIAljYXNlIFBJT19TVF9QT0xMOgpAQCAtMjkxMywxMCArMjkyMyw5IEBACiAJfQogCiAJaWYgKHRpbWVvdXQpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhhdGFfd3EsICZhcC0+cGlvX3Rhc2ssCi0JCQkJICAgdGltZW91dCk7Ci0JZWxzZQotCQlxdWV1ZV93b3JrKGF0YV93cSwgJmFwLT5waW9fdGFzayk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhhdGFfd3EsICZhcC0+cGlvX3Rhc2ssIHRpbWVvdXQpOworCWVsc2UgaWYgKCFxY19jb21wbGV0ZWQpCisJCWdvdG8gZnNtX3N0YXJ0OwogfQogCiBzdGF0aWMgdm9pZCBhdGFwaV9yZXF1ZXN0X3NlbnNlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCAzZTliNjQxLi4yM2QwOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTIwMSw2ICsyMDEsNyBAQAogcWxhMjEwMF9wY2lfY29uZmlnKHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7CiAJdWludDE2X3QgdywgbXdpOworCXVpbnQzMl90IGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAKQEAgLTIxNSw5ICsyMTYsOSBAQAogCXBjaV93cml0ZV9jb25maWdfd29yZChoYS0+cGRldiwgUENJX0NPTU1BTkQsIHcpOwogCiAJLyogUmVzZXQgZXhwYW5zaW9uIFJPTSBhZGRyZXNzIGRlY29kZSBlbmFibGUgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCAmdyk7Ci0JdyAmPSB+UENJX1JPTV9BRERSRVNTX0VOQUJMRTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgdyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGhhLT5wZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZkKTsKKwlkICY9IH5QQ0lfUk9NX0FERFJFU1NfRU5BQkxFOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgZCk7CiAKIAkvKiBHZXQgUENJIGJ1cyBpbmZvcm1hdGlvbi4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKQEAgLTIzNyw2ICsyMzgsNyBAQAogcWxhMjMwMF9wY2lfY29uZmlnKHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7CiAJdWludDE2X3QJdywgbXdpOworCXVpbnQzMl90CWQ7CiAJdW5zaWduZWQgbG9uZyAgIGZsYWdzID0gMDsKIAl1aW50MzJfdAljbnQ7CiAJc3RydWN0IGRldmljZV9yZWdfMnh4eCBfX2lvbWVtICpyZWcgPSAmaGEtPmlvYmFzZS0+aXNwOwpAQCAtMzAyLDkgKzMwNCw5IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhhLT5wZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg4MCk7CiAKIAkvKiBSZXNldCBleHBhbnNpb24gUk9NIGFkZHJlc3MgZGVjb2RlIGVuYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZ3KTsKLQl3ICY9IH5QQ0lfUk9NX0FERFJFU1NfRU5BQkxFOwotCXBjaV93cml0ZV9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCB3KTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgJmQpOworCWQgJj0gflBDSV9ST01fQUREUkVTU19FTkFCTEU7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCBkKTsKIAogCS8qIEdldCBQQ0kgYnVzIGluZm9ybWF0aW9uLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwpAQCAtMzI0LDYgKzMyNiw3IEBACiBxbGEyNHh4X3BjaV9jb25maWcoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKIAl1aW50MTZfdCB3LCBtd2k7CisJdWludDMyX3QgZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKIAlpbnQgcGNpeF9jbWRfcmVnLCBwY2llX2RjdGxfcmVnOwpAQCAtMzY2LDkgKzM2OSw5IEBACiAJfQogCiAJLyogUmVzZXQgZXhwYW5zaW9uIFJPTSBhZGRyZXNzIGRlY29kZSBlbmFibGUgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCAmdyk7Ci0JdyAmPSB+UENJX1JPTV9BRERSRVNTX0VOQUJMRTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgdyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGhhLT5wZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZkKTsKKwlkICY9IH5QQ0lfUk9NX0FERFJFU1NfRU5BQkxFOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgZCk7CiAKIAkvKiBHZXQgUENJIGJ1cyBpbmZvcm1hdGlvbi4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKaW5kZXggYTYzZjkzMS4uYjIyN2U1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdF9zZXQtPmRldik7CiAJdW5zaWduZWQgaW50IGNmZ19hZGRyID0gZ2V0X3Njcl9jZmdfYWRkcihhcC0+cG9ydF9ubywgc2NfcmVnLCBwZGV2LT5kZXZpY2UpOwotCXUzMiB2YWwsIHZhbDI7CisJdTMyIHZhbCwgdmFsMiA9IDA7CiAJdTggcG1yOwogCiAJaWYgKHNjX3JlZyA9PSBTQ1JfRVJST1IpIC8qIGRvZXNuJ3QgZXhpc3QgaW4gUENJIGNmZyBzcGFjZSAqLwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKGVudC0+ZGV2aWNlICE9IDB4MTgyKSB7CiAJCWlmICgocG1yICYgU0lTX1BNUl9DT01CSU5FRCkgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2F0YV9zaXM6IERldGVjdGVkIFNpUyAxODAvMTgxIGNoaXBzZXQgaW4gU0FUQSBtb2RlXG4iKTsKLQkJCXBvcnQyX3N0YXJ0PTB4NjQ7CisJCQlwb3J0Ml9zdGFydCA9IDY0OwogCQl9CiAJCWVsc2UgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2F0YV9zaXM6IERldGVjdGVkIFNpUyAxODAvMTgxIGNoaXBzZXQgaW4gY29tYmluZWQgbW9kZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCBhNzgwNTQ2Li4xZjBlYmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTEyNjUsOSArMTI2NSw4IEBACiAJCWxpc3RfZm9yX2VhY2hfc2FmZShsaCwgbGhfc2YsICZhY3RpdmVfbGlzdCkgewogCQkJc2NtZCA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBzY3NpX2NtbmQsIGVoX2VudHJ5KTsKIAkJCWxpc3RfZGVsX2luaXQobGgpOwotCQkJaWYgKHJlY292ZXJ5KSB7Ci0JCQkJc2NzaV9laF9zY21kX2FkZChzY21kLCBTQ1NJX0VIX0NBTkNFTF9DTUQpOwotCQkJfSBlbHNlIHsKKwkJCWlmIChyZWNvdmVyeSAmJgorCQkJICAgICFzY3NpX2VoX3NjbWRfYWRkKHNjbWQsIFNDU0lfRUhfQ0FOQ0VMX0NNRCkpIHsKIAkJCQlzY21kLT5yZXN1bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKIAkJCQlzY3NpX2ZpbmlzaF9jb21tYW5kKHNjbWQpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCmluZGV4IDA3YjU1NGEuLjY0ZmM5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCXsiUkVMSVNZUyIsICJTY29ycGlvIiwgTlVMTCwgQkxJU1RfTk9MVU59LAkvKiByZXNwb25kcyB0byBhbGwgbHVuICovCiAJeyJTQU5LWU8iLCAiQ1A1MjUiLCAiNi42NCIsIEJMSVNUX05PTFVOfSwJLyogY2F1c2VzIGZhaWxlZCBSRVEgU0VOU0UsIGV4dHJhIHJlc2V0ICovCiAJeyJURVhFTCIsICJDRC1ST00iLCAiMS4wNiIsIEJMSVNUX05PTFVOfSwKKwl7InRyYW5zdGVjIiwgIlQ1MDA4IiwgIjAwMDEiLCBCTElTVF9OT1JFUE9SVExVTiB9LAogCXsiWUFNQUhBIiwgIkNEUjEwMCIsICIxLjAwIiwgQkxJU1RfTk9MVU59LAkvKiBsb2NrcyB1cCAqLwogCXsiWUFNQUhBIiwgIkNEUjEwMiIsICIxLjAwIiwgQkxJU1RfTk9MVU59LAkvKiBsb2NrcyB1cCAqLwogCXsiWUFNQUhBIiwgIkNSVzg0MjRTIiwgIjEuMCIsIEJMSVNUX05PTFVOfSwJLyogbG9ja3MgdXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDg5NWM5NDUuLmFkNTM0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtNTAsNyArNTAsNyBAQAogdm9pZCBzY3NpX2VoX3dha2V1cChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKIAlpZiAoc2hvc3QtPmhvc3RfYnVzeSA9PSBzaG9zdC0+aG9zdF9mYWlsZWQpIHsKLQkJdXAoc2hvc3QtPmVoX3dhaXQpOworCQl3YWtlX3VwX3Byb2Nlc3Moc2hvc3QtPmVoYW5kbGVyKTsKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoNSwKIAkJCQlwcmludGsoIldha2luZyBlcnJvciBoYW5kbGVyIHRocmVhZFxuIikpOwogCX0KQEAgLTY4LDE5ICs2OCwyNCBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2NtZC0+ZGV2aWNlLT5ob3N0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CiAKLQlpZiAoc2hvc3QtPmVoX3dhaXQgPT0gTlVMTCkKKwlpZiAoIXNob3N0LT5laGFuZGxlcikKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKHNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX1JFQ09WRVJZKSkKKwkJaWYgKHNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX0NBTkNFTF9SRUNPVkVSWSkpCisJCQlnb3RvIG91dF91bmxvY2s7CiAKKwlyZXQgPSAxOwogCXNjbWQtPmVoX2VmbGFncyB8PSBlaF9mbGFnOwogCWxpc3RfYWRkX3RhaWwoJnNjbWQtPmVoX2VudHJ5LCAmc2hvc3QtPmVoX2NtZF9xKTsKLQlzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9SRUNPVkVSWSk7CiAJc2hvc3QtPmhvc3RfZmFpbGVkKys7CiAJc2NzaV9laF93YWtldXAoc2hvc3QpOworIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xNzYsOCArMTgxLDggQEAKIAkJfQogCiAJaWYgKHVubGlrZWx5KCFzY3NpX2VoX3NjbWRfYWRkKHNjbWQsIFNDU0lfRUhfQ0FOQ0VMX0NNRCkpKSB7Ci0JCXBhbmljKCJFcnJvciBoYW5kbGVyIHRocmVhZCBub3QgcHJlc2VudCBhdCAlcCAlcCAlcyAlZCIsCi0JCSAgICAgIHNjbWQsIHNjbWQtPmRldmljZS0+aG9zdCwgX19GSUxFX18sIF9fTElORV9fKTsKKwkJc2NtZC0+cmVzdWx0IHw9IERJRF9USU1FX09VVCA8PCAxNjsKKwkJX19zY3NpX2RvbmUoc2NtZCk7CiAJfQogfQogCkBAIC0xOTYsOCArMjAxLDcgQEAKIHsKIAlpbnQgb25saW5lOwogCi0Jd2FpdF9ldmVudChzZGV2LT5ob3N0LT5ob3N0X3dhaXQsIChzZGV2LT5ob3N0LT5zaG9zdF9zdGF0ZSAhPQotCQkJCQkgICBTSE9TVF9SRUNPVkVSWSkpOworCXdhaXRfZXZlbnQoc2Rldi0+aG9zdC0+aG9zdF93YWl0LCAhc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNkZXYtPmhvc3QpKTsKIAogCW9ubGluZSA9IHNjc2lfZGV2aWNlX29ubGluZShzZGV2KTsKIApAQCAtMTQ0MSw2ICsxNDQ1LDcgQEAKIHN0YXRpYyB2b2lkIHNjc2lfcmVzdGFydF9vcGVyYXRpb25zKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKIAkgKiBJZiB0aGUgZG9vciB3YXMgbG9ja2VkLCB3ZSBuZWVkIHRvIGluc2VydCBhIGRvb3IgbG9jayByZXF1ZXN0CkBAIC0xNDYwLDcgKzE0NjUsMTEgQEAKIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiB3YWtpbmcgdXAgaG9zdCB0byByZXN0YXJ0XG4iLAogCQkJCQkgIF9fRlVOQ1RJT05fXykpOwogCi0Jc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfUlVOTklORyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9SVU5OSU5HKSkKKwkJaWYgKHNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX0NBTkNFTCkpCisJCQlCVUdfT04oc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfREVMKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAl3YWtlX3VwKCZzaG9zdC0+aG9zdF93YWl0KTsKIApAQCAtMTU4Miw0MCArMTU5MSwzMSBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gKHN0cnVjdCBTY3NpX0hvc3QgKikgZGF0YTsKIAlpbnQgcnRuOwotCURFQ0xBUkVfTVVURVhfTE9DS0VEKHNlbSk7CiAKIAljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKLQlzaG9zdC0+ZWhfd2FpdCA9ICZzZW07CiAKKwkKIAkvKgotCSAqIFdha2UgdXAgdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdXMuCisJICogTm90ZSAtIHdlIGFsd2F5cyB1c2UgVEFTS19JTlRFUlJVUFRJQkxFIGV2ZW4gaWYgdGhlIG1vZHVsZQorCSAqIHdhcyBsb2FkZWQgYXMgcGFydCBvZiB0aGUga2VybmVsLiAgVGhlIHJlYXNvbiBpcyB0aGF0CisJICogVU5JTlRFUlJVUFRJQkxFIHdvdWxkIGNhdXNlIHRoaXMgdGhyZWFkIHRvIGJlIGNvdW50ZWQgaW4KKwkgKiB0aGUgbG9hZCBhdmVyYWdlIGFzIGEgcnVubmluZyBwcm9jZXNzLCBhbmQgYW4gaW50ZXJydXB0aWJsZQorCSAqIHdhaXQgZG9lc24ndC4KIAkgKi8KLQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIldha2UgdXAgcGFyZW50IG9mIgotCQkJCQkgICIgc2NzaV9laF8lZFxuIixzaG9zdC0+aG9zdF9ubykpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaWYgKHNob3N0LT5ob3N0X2ZhaWxlZCA9PSAwIHx8CisJCSAgICBzaG9zdC0+aG9zdF9mYWlsZWQgIT0gc2hvc3QtPmhvc3RfYnVzeSkgeworCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMSwgcHJpbnRrKCJFcnJvciBoYW5kbGVyIgorCQkJCQkJCSAgIiBzY3NpX2VoXyVkIgorCQkJCQkJCSAgIiBzbGVlcGluZ1xuIiwKKwkJCQkJCQkgIHNob3N0LT5ob3N0X25vKSk7CisJCQlzY2hlZHVsZSgpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKLQl3aGlsZSAoMSkgewotCQkvKgotCQkgKiBJZiB3ZSBnZXQgYSBzaWduYWwsIGl0IG1lYW5zIHdlIGFyZSBzdXBwb3NlZCB0byBnbwotCQkgKiBhd2F5IGFuZCBkaWUuICBUaGlzIHR5cGljYWxseSBoYXBwZW5zIGlmIHRoZSB1c2VyIGlzCi0JCSAqIHRyeWluZyB0byB1bmxvYWQgYSBtb2R1bGUuCi0JCSAqLwotCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgxLCBwcmludGsoIkVycm9yIGhhbmRsZXIiCi0JCQkJCQkgICIgc2NzaV9laF8lZCIKLQkJCQkJCSAgIiBzbGVlcGluZ1xuIixzaG9zdC0+aG9zdF9ubykpOwotCi0JCS8qCi0JCSAqIE5vdGUgLSB3ZSBhbHdheXMgdXNlIGRvd25faW50ZXJydXB0aWJsZSB3aXRoIHRoZSBzZW1hcGhvcmUKLQkJICogZXZlbiBpZiB0aGUgbW9kdWxlIHdhcyBsb2FkZWQgYXMgcGFydCBvZiB0aGUga2VybmVsLiAgVGhlCi0JCSAqIHJlYXNvbiBpcyB0aGF0IGRvd24oKSB3aWxsIGNhdXNlIHRoaXMgdGhyZWFkIHRvIGJlIGNvdW50ZWQKLQkJICogaW4gdGhlIGxvYWQgYXZlcmFnZSBhcyBhIHJ1bm5pbmcgcHJvY2VzcywgYW5kIGRvd24KLQkJICogaW50ZXJydXB0aWJsZSBkb2Vzbid0LiAgR2l2ZW4gdGhhdCB3ZSBuZWVkIHRvIGFsbG93IHRoaXMKLQkJICogdGhyZWFkIHRvIGRpZSBpZiB0aGUgZHJpdmVyIHdhcyBsb2FkZWQgYXMgYSBtb2R1bGUsIHVzaW5nCi0JCSAqIHNlbWFwaG9yZXMgaXNuJ3QgdW5yZWFzb25hYmxlLgotCQkgKi8KLQkJZG93bl9pbnRlcnJ1cHRpYmxlKCZzZW0pOwotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0KKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgxLCBwcmludGsoIkVycm9yIGhhbmRsZXIiCiAJCQkJCQkgICIgc2NzaV9laF8lZCB3YWtpbmciCiAJCQkJCQkgICIgdXBcbiIsc2hvc3QtPmhvc3Rfbm8pKTsKQEAgLTE2NDIsNyArMTY0Miw3IEBACiAJCSAqIHdoaWNoIGFyZSBzdGlsbCBvbmxpbmUuCiAJCSAqLwogCQlzY3NpX3Jlc3RhcnRfb3BlcmF0aW9ucyhzaG9zdCk7Ci0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl9CiAKIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgxLCBwcmludGsoIkVycm9yIGhhbmRsZXIgc2NzaV9laF8lZCIKQEAgLTE2NTEsNyArMTY1MSw3IEBACiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCBub2JvZHkgdHJpZXMgdG8gd2FrZSB1cyB1cCBhZ2Fpbi4KIAkgKi8KLQlzaG9zdC0+ZWhfd2FpdCA9IE5VTEw7CisJc2hvc3QtPmVoYW5kbGVyID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKaW5kZXggYjdmZGRhYy4uZGU3Zjk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAkgKiBlcnJvciBwcm9jZXNzaW5nLCBhcyBsb25nIGFzIHRoZSBkZXZpY2Ugd2FzIG9wZW5lZAogCSAqIG5vbi1ibG9ja2luZyAqLwogCWlmIChmaWxwICYmIGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCWlmIChzZGV2LT5ob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSkKKwkJaWYgKHNjc2lfaG9zdF9pbl9yZWNvdmVyeShzZGV2LT5ob3N0KSkKIAkJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSBpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDg2M2JiNjQuLmRjOWM3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0xMTgsNyArMTE4LDYgQEAKIAlyZXEtPmZsYWdzICY9IH5SRVFfRE9OVFBSRVA7CiAJcmVxLT5zcGVjaWFsID0gKHJlcS0+ZmxhZ3MgJiBSRVFfU1BFQ0lBTCkgPyBjbWQtPnNjX3JlcXVlc3QgOiBOVUxMOwogCi0Jc2NzaV9yZWxlYXNlX2J1ZmZlcnMoY21kKTsKIAlzY3NpX3B1dF9jb21tYW5kKGNtZCk7CiB9CiAKQEAgLTE0MCwxNCArMTM5LDEyIEBACiAgKiAgICAgICAgICAgICAgY29tbWFuZHMuCiAgKiBOb3RlczogICAgICAgVGhpcyBjb3VsZCBiZSBjYWxsZWQgZWl0aGVyIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQgb3IgYQogICogICAgICAgICAgICAgIG5vcm1hbCBwcm9jZXNzIGNvbnRleHQuCi0gKiBOb3RlczoJVXBvbiByZXR1cm4sIGNtZCBpcyBhIHN0YWxlIHBvaW50ZXIuCiAgKi8KIGludCBzY3NpX3F1ZXVlX2luc2VydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCByZWFzb24pCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlID0gY21kLT5kZXZpY2U7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkZXZpY2UtPnJlcXVlc3RfcXVldWU7Ci0Jc3RydWN0IHJlcXVlc3QgKnJlcSA9IGNtZC0+cmVxdWVzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJU0NTSV9MT0dfTUxRVUVVRSgxLApAQCAtMTg4LDkgKzE4NSw4IEBACiAJICogZnVuY3Rpb24uICBUaGUgU0NTSSByZXF1ZXN0IGZ1bmN0aW9uIGRldGVjdHMgdGhlIGJsb2NrZWQgY29uZGl0aW9uCiAJICogYW5kIHBsdWdzIHRoZSBxdWV1ZSBhcHByb3ByaWF0ZWx5LgogICAgICAgICAgKi8KLQlzY3NpX3VucHJlcF9yZXF1ZXN0KHJlcSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCWJsa19yZXF1ZXVlX3JlcXVlc3QocSwgcmVxKTsKKwlibGtfcmVxdWV1ZV9yZXF1ZXN0KHEsIGNtZC0+cmVxdWVzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKIAlzY3NpX3J1bl9xdWV1ZShxKTsKQEAgLTQ1MSw3ICs0NDcsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXNob3N0LT5ob3N0X2J1c3ktLTsKLQlpZiAodW5saWtlbHkoKHNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSkgJiYKKwlpZiAodW5saWtlbHkoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNob3N0KSAmJgogCQkgICAgIHNob3N0LT5ob3N0X2ZhaWxlZCkpCiAJCXNjc2lfZWhfd2FrZXVwKHNob3N0KTsKIAlzcGluX3VubG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKQEAgLTEyNjgsNiArMTI2NCw3IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoY21kLT5jbW5kLCByZXEtPmNtZCwgc2l6ZW9mKGNtZC0+Y21uZCkpOworCQkJY21kLT5jbWRfbGVuID0gcmVxLT5jbWRfbGVuOwogCQkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpCiAJCQkJY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAJCQllbHNlIGlmIChyZXEtPmRhdGFfbGVuKQpAQCAtMTM0Miw3ICsxMzM5LDcgQEAKIAkJCQkgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKIAkJCQkgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0JaWYgKHNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSkKKwlpZiAoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNob3N0KSkKIAkJcmV0dXJuIDA7CiAJaWYgKHNob3N0LT5ob3N0X2J1c3kgPT0gMCAmJiBzaG9zdC0+aG9zdF9ibG9ja2VkKSB7CiAJCS8qCkBAIC0xNTE0LDcgKzE1MTEsNiBAQAogCSAqIGNhc2VzIChob3N0IGxpbWl0cyBvciBzZXR0aW5ncykgc2hvdWxkIHJ1biB0aGUgcXVldWUgYXQgc29tZQogCSAqIGxhdGVyIHRpbWUuCiAJICovCi0Jc2NzaV91bnByZXBfcmVxdWVzdChyZXEpOwogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJYmxrX3JlcXVldWVfcmVxdWVzdChxLCByZXEpOwogCXNkZXYtPmRldmljZV9idXN5LS07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggYjg2ZjE3MC4uZmNmOWY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMTQ2NiwyMyArMTQ2NiwxNyBAQAogCiB2b2lkIHNjc2lfZm9yZ2V0X2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0Jc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCAqdG1wOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyoKLQkgKiBPaywgdGhpcyBsb29rIGEgYml0IHN0cmFuZ2UuICBXZSBhbHdheXMgbG9vayBmb3IgdGhlIGZpcnN0IGRldmljZQotCSAqIG9uIHRoZSBsaXN0IGFzIHNjc2lfcmVtb3ZlX2RldmljZSByZW1vdmVzIHRoZW0gZnJvbSBpdCAtIHRodXMgd2UKLQkgKiBhbHNvIGhhdmUgdG8gcmVsZWFzZSB0aGUgbG9jay4KLQkgKiBXZSBkb24ndCBuZWVkIHRvIGdldCBhbm90aGVyIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGJlZm9yZQotCSAqIHJlbGVhc2luZyB0aGUgbG9jayBhcyB3ZSBhbHJlYWR5IG93biB0aGUgcmVmZXJlbmNlIGZyb20KLQkgKiBzY3NpX3JlZ2lzdGVyX2RldmljZSB0aGF0J3MgcmVsZWFzZSBpbiBzY3NpX3JlbW92ZV9kZXZpY2UuICBBbmQKLQkgKiBhZnRlciB0aGF0IHdlIGRvbid0IGxvb2sgYXQgc2RldiBhbnltb3JlLgotCSAqLworIHJlc3RhcnQ6CiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGFyZ2V0LCB0bXAsICZzaG9zdC0+X190YXJnZXRzLCBzaWJsaW5ncykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RldiwgJnNob3N0LT5fX2RldmljZXMsIHNpYmxpbmdzKSB7CisJCWlmIChzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfREVMKQorCQkJY29udGludWU7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlzY3NpX3JlbW92ZV90YXJnZXQoJnN0YXJnZXQtPmRldik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJX19zY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CisJCWdvdG8gcmVzdGFydDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBiODA1MmQ1Li43MmE2NTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTU3LDYgKzU3LDggQEAKIAl7IFNIT1NUX0NBTkNFTCwgImNhbmNlbCIgfSwKIAl7IFNIT1NUX0RFTCwgImRlbGV0ZWQiIH0sCiAJeyBTSE9TVF9SRUNPVkVSWSwgInJlY292ZXJ5IiB9LAorCXsgU0hPU1RfQ0FOQ0VMX1JFQ09WRVJZLCAiY2FuY2VsL3JlY292ZXJ5IiB9LAorCXsgU0hPU1RfREVMX1JFQ09WRVJZLCAiZGVsZXRlZC9yZWNvdmVyeSIsIH0sCiB9OwogY29uc3QgY2hhciAqc2NzaV9ob3N0X3N0YXRlX25hbWUoZW51bSBzY3NpX2hvc3Rfc3RhdGUgc3RhdGUpCiB7CkBAIC03MDcsOSArNzA5LDExIEBACiAgKiovCiB2b2lkIHNjc2lfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0JZG93bigmc2Rldi0+aG9zdC0+c2Nhbl9tdXRleCk7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OworCisJZG93bigmc2hvc3QtPnNjYW5fbXV0ZXgpOwogCV9fc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwotCXVwKCZzZGV2LT5ob3N0LT5zY2FuX211dGV4KTsKKwl1cCgmc2hvc3QtPnNjYW5fbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX3JlbW92ZV9kZXZpY2UpOwogCkBAIC03MTcsMTcgKzcyMSwyMCBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCAqdG1wOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlzdGFyZ2V0LT5yZWFwX3JlZisrOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZGV2LCB0bXAsICZzaG9zdC0+X19kZXZpY2VzLCBzaWJsaW5ncykgeworIHJlc3RhcnQ6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGV2LCAmc2hvc3QtPl9fZGV2aWNlcywgc2libGluZ3MpIHsKIAkJaWYgKHNkZXYtPmNoYW5uZWwgIT0gc3RhcmdldC0+Y2hhbm5lbCB8fAotCQkgICAgc2Rldi0+aWQgIT0gc3RhcmdldC0+aWQpCisJCSAgICBzZGV2LT5pZCAhPSBzdGFyZ2V0LT5pZCB8fAorCQkgICAgc2Rldi0+c2Rldl9zdGF0ZSA9PSBTREVWX0RFTCkKIAkJCWNvbnRpbnVlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwogCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWdvdG8gcmVzdGFydDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggZGU1NjRiMy4uOWExZGMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTIzNSw2ICsyMzUsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJbWVtY3B5KFNDcG50LT5jbW5kLCBycS0+Y21kLCBzaXplb2YoU0NwbnQtPmNtbmQpKTsKKwkJU0NwbnQtPmNtZF9sZW4gPSBycS0+Y21kX2xlbjsKIAkJaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSkKIAkJCVNDcG50LT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAJCWVsc2UgaWYgKHJxLT5kYXRhX2xlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggOWVhNDc2NS4uNGQwOWE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJCWlmIChzZHAtPmRldGFjaGVkKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJaWYgKHNkcC0+ZGV2aWNlLT5ob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSkKKwkJCWlmIChzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2RwLT5kZXZpY2UtPmhvc3QpKQogCQkJCXJldHVybiAtRUJVU1k7CiAJCX0gZWxzZSBpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZHAtPmRldmljZSkpCiAJCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCBjZTYzZmM4Li41NjE5MDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAJCQlyZXR1cm4gMDsKIAogCQltZW1jcHkoU0NwbnQtPmNtbmQsIHJxLT5jbWQsIHNpemVvZihTQ3BudC0+Y21uZCkpOworCQlTQ3BudC0+Y21kX2xlbiA9IHJxLT5jbWRfbGVuOwogCQlpZiAoIXJxLT5kYXRhX2xlbikKIAkJCVNDcG50LT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9OT05FOwogCQllbHNlIGlmIChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGE5MzMwOGEuLmQwMDFjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC00MjA2LDYgKzQyMDYsNyBAQAogCQlyZXR1cm4gMDsKIAogCW1lbWNweShTQ3BudC0+Y21uZCwgcnEtPmNtZCwgc2l6ZW9mKFNDcG50LT5jbW5kKSk7CisJU0NwbnQtPmNtZF9sZW4gPSBycS0+Y21kX2xlbjsKIAogCWlmIChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCiAJCVNDcG50LT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jIGIvZHJpdmVycy9zZXJpYWwvMjEyODUuYwppbmRleCBhZWMzOWZiLi5iNWNmMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOwogfQogCi1leHRlcm4gc3RydWN0IHVhcnRfZHJpdmVyIHNlcmlhbDIxMjg1X3JlZzsKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsMjEyODVfcmVnOwogCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgc2VyaWFsMjEyODVfY29uc29sZSA9CiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKaW5kZXggOTc4ZTEyNC4uNjc5ZTY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtNjg5LDcgKzY4OSw3IEBACiAJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgdWFydF9kcml2ZXIgYW1iYV9yZWc7CitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGFtYmFfcmVnOwogc3RhdGljIHN0cnVjdCBjb25zb2xlIGFtYmFfY29uc29sZSA9IHsKIAkubmFtZQkJPSAidHR5QU0iLAogCS53cml0ZQkJPSBwbDAxMF9jb25zb2xlX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IDU2MDcxMzAuLjFmZjYyOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTcwMSw3ICs3MDEsNyBAQAogCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKCZ1YXAtPnBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOwogfQogCi1leHRlcm4gc3RydWN0IHVhcnRfZHJpdmVyIGFtYmFfcmVnOworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBhbWJhX3JlZzsKIHN0YXRpYyBzdHJ1Y3QgY29uc29sZSBhbWJhX2NvbnNvbGUgPSB7CiAJLm5hbWUJCT0gInR0eUFNQSIsCiAJLndyaXRlCQk9IHBsMDExX2NvbnNvbGVfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jIGIvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYwppbmRleCBkODIyODk2Li43OGMxZjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKQEAgLTUyNSw3ICs1MjUsNyBAQAogCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOwogfQogCi1leHRlcm4gc3RydWN0IHVhcnRfZHJpdmVyIGNscHM3MTF4X3JlZzsKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgY2xwczcxMXhfcmVnOwogc3RhdGljIHN0cnVjdCBjb25zb2xlIGNscHM3MTF4X2NvbnNvbGUgPSB7CiAJLm5hbWUJCT0gInR0eUNMIiwKIAkud3JpdGUJCT0gY2xwczcxMXh1YXJ0X2NvbnNvbGVfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IGEzY2QwZWUuLjA1ODVhYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03ODEsNyArNzgxLDcgQEAKIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludAotbXBjNTJ4eF91YXJ0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK21wYzUyeHhfdWFydF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgbGV2ZWwpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IGVhYTBhZjguLjY3MmIzNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC01ODksOCArNTg5LDggQEAKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEUKIAotZXh0ZXJuIHN0cnVjdCB1YXJ0X3B4YV9wb3J0IHNlcmlhbF9weGFfcG9ydHNbXTsKLWV4dGVybiBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsX3B4YV9yZWc7CitzdGF0aWMgc3RydWN0IHVhcnRfcHhhX3BvcnQgc2VyaWFsX3B4YV9wb3J0c1tdOworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzZXJpYWxfcHhhX3JlZzsKIAogI2RlZmluZSBCT1RIX0VNUFRZIChVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCAxMjI1YjE0Li5kZDhhZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtNzk5LDcgKzc5OSw3IEBACiAJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMoJnNwb3J0LT5wb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKIH0KIAotZXh0ZXJuIHN0cnVjdCB1YXJ0X2RyaXZlciBzYTExMDBfcmVnOworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzYTExMDBfcmVnOwogc3RhdGljIHN0cnVjdCBjb25zb2xlIHNhMTEwMF9jb25zb2xlID0gewogCS5uYW1lCQk9ICJ0dHlTQSIsCiAJLndyaXRlCQk9IHNhMTEwMF9jb25zb2xlX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKaW5kZXggODMwMjM3Ni4uZDAxZGJlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCkBAIC02MzIsNyArNjMyLDcgQEAKIAlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyAocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgdWFydF9kcml2ZXIgbGg3YTQweF9yZWc7CitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGxoN2E0MHhfcmVnOwogc3RhdGljIHN0cnVjdCBjb25zb2xlIGxoN2E0MHhfY29uc29sZSA9IHsKIAkubmFtZQkJPSAidHR5QU0iLAogCS53cml0ZQkJPSBsaDdhNDB4dWFydF9jb25zb2xlX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy90Yy96cy5jIGIvZHJpdmVycy90Yy96cy5jCmluZGV4IDQzODJlZTYuLjZiZWQ4NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGMvenMuYworKysgYi9kcml2ZXJzL3RjL3pzLmMKQEAgLTE2ODMsNyArMTY4Myw3IEBACiAjaWZuZGVmIENPTkZJR19TRVJJQUxfREVDX0NPTlNPTEUKIAkJCS8qCiAJCQkgKiBXZSdyZSBjYWxsZWQgZWFybHkgYW5kIG1lbW9yeSBtYW5hZ21lbnQgaXNuJ3QgdXAsIHlldC4KLQkJCSAqIFRodXMgY2hlY2tfcmVnaW9uIHdvdWxkIGZhaWwuCisJCQkgKiBUaHVzIHJlcXVlc3RfcmVnaW9uIHdvdWxkIGZhaWwuCiAJCQkgKi8KIAkJCWlmICghcmVxdWVzdF9yZWdpb24oKHVuc2lnbmVkIGxvbmcpCiAJCQkJCSB6c19jaGFubmVsc1tuX2NoYW5uZWxzXS5jb250cm9sLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDYxNTg3NGUuLjc3M2FlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTY1MCw2ICs2NTAsNyBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfU09GVF9DVVJTT1IKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUgblZpZGlhIGNoaXBzLCBUTlQKIAkgIGFuZCBuZXdlci4gRm9yIHZlcnkgb2xkIGNoaXBzZXRzLCBzdWNoIGFzIHRoZSBSSVZBMTI4LCB0aGVuIHVzZQpAQCAtNzUzLDcgKzc1NCw4IEBACiAKIGNvbmZpZyBGQl9JODEwX0kyQwogCWJvb2wgIkVuYWJsZSBEREMgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCX0k4MTAgJiYgSTJDICYmIEZCX0k4MTBfR1RGCisJZGVwZW5kcyBvbiBGQl9JODEwICYmIEZCX0k4MTBfR1RGCisJc2VsZWN0IEkyQwogCXNlbGVjdCBJMkNfQUxHT0JJVAogCWhlbHAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkveGxpbml0LmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS94bGluaXQuYwppbmRleCA5MjY0M2FmLi4wYmVhMGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS94bGluaXQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS94bGluaXQuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJY29uc3Qgc3RydWN0IHhsX2NhcmRfY2ZnX3QgKiBjYXJkID0gJmNhcmRfY2ZnW3hsX2NhcmRdOwogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IChzdHJ1Y3QgYXR5ZmJfcGFyICopIGluZm8tPnBhcjsKIAl1bmlvbiBhdHlfcGxsIHBsbDsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAJdTMyIHRlbXA7CiAJCiAJYXR5X3N0XzgoQ09ORklHX1NUQVQwLCAweDg1LCBwYXIpOwpAQCAtMjUyLDkgKzI1MiwxMiBAQAogCWF0eV9zdF9sZTMyKDB4RUMsIDB4MDAwMDAwMDAsIHBhcik7CiAJYXR5X3N0X2xlMzIoMHhGQywgMHgwMDAwMDAwMCwgcGFyKTsKIAorI2lmIGRlZmluZWQgKENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QpCisJaW50IGk7CiAJZm9yIChpPTA7IGk8c2l6ZW9mKGxjZF90YmwpL3NpemVvZihsY2RfdGJsX3QpOyBpKyspIHsKIAkJYXR5X3N0X2xjZChsY2RfdGJsW2ldLmxjZF9yZWcsIGxjZF90YmxbaV0udmFsLCBwYXIpOwogCX0KKyNlbmRpZgogCiAJYXR5X3N0X2xlMTYoQ09ORklHX1NUQVQwLCAweDAwQTQsIHBhcik7CiAJbWRlbGF5KDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCmluZGV4IDM1M2NiM2YuLjYzMGYyZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwpAQCAtMTksMTcgKzE5LDE4IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoLXB4YS9jb3JnaS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2hhcnBzbC5oPgogCi0jZGVmaW5lIENPUkdJX01BWF9JTlRFTlNJVFkgCQkweDNlCiAjZGVmaW5lIENPUkdJX0RFRkFVTFRfSU5URU5TSVRZCQkweDFmCi0jZGVmaW5lIENPUkdJX0xJTUlUX01BU0sJCQkweDBiCisjZGVmaW5lIENPUkdJX0xJTUlUX01BU0sJCTB4MGIKIAogc3RhdGljIGludCBjb3JnaWJsX3Bvd2VybW9kZSA9IEZCX0JMQU5LX1VOQkxBTks7CiBzdGF0aWMgaW50IGN1cnJlbnRfaW50ZW5zaXR5ID0gMDsKIHN0YXRpYyBpbnQgY29yZ2libF9saW1pdCA9IDA7CitzdGF0aWMgdm9pZCAoKmNvcmdpYmxfbWFjaF9zZXRfaW50ZW5zaXR5KShpbnQgaW50ZW5zaXR5KTsKIHN0YXRpYyBzcGlubG9ja190IGJsX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGNvcmdpYmxfZGF0YTsKIAogc3RhdGljIHZvaWQgY29yZ2libF9zZW5kX2ludGVuc2l0eShpbnQgaW50ZW5zaXR5KQogewpAQCAtNDMsMTggKzQ0LDEwIEBACiAJCQlpbnRlbnNpdHkgJj0gQ09SR0lfTElNSVRfTUFTSzsKIAl9CiAKLQkvKiBTa2lwIDB4MjAgYXMgaXQgd2lsbCBibGFuayB0aGUgZGlzcGxheSAqLwotCWlmIChpbnRlbnNpdHkgPj0gMHgyMCkKLQkJaW50ZW5zaXR5Kys7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmxfbG9jaywgZmxhZ3MpOwotCS8qIEJpdHMgMC00IGFyZSBhY2Nlc3NlZCB2aWEgdGhlIFNTUCBpbnRlcmZhY2UgKi8KLQljb3JnaV9zc3BfYmxkdXR5X3NldChpbnRlbnNpdHkgJiAweDFmKTsKLQkvKiBCaXQgNSBpcyB2aWEgU0NPT1AgKi8KLQlpZiAoaW50ZW5zaXR5ICYgMHgwMDIwKQotCQlzZXRfc2Nvb3BfZ3BpbygmY29yZ2lzY29vcF9kZXZpY2UuZGV2LCBDT1JHSV9TQ1BfQkFDS0xJR0hUX0NPTlQpOwotCWVsc2UKLQkJcmVzZXRfc2Nvb3BfZ3BpbygmY29yZ2lzY29vcF9kZXZpY2UuZGV2LCBDT1JHSV9TQ1BfQkFDS0xJR0hUX0NPTlQpOworCisJY29yZ2libF9tYWNoX3NldF9pbnRlbnNpdHkoaW50ZW5zaXR5KTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTEzLDggKzEwNiw4IEBACiAKIHN0YXRpYyBpbnQgY29yZ2libF9zZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCwgaW50IGludGVuc2l0eSkKIHsKLQlpZiAoaW50ZW5zaXR5ID4gQ09SR0lfTUFYX0lOVEVOU0lUWSkKLQkJaW50ZW5zaXR5ID0gQ09SR0lfTUFYX0lOVEVOU0lUWTsKKwlpZiAoaW50ZW5zaXR5ID4gY29yZ2libF9kYXRhLm1heF9icmlnaHRuZXNzKQorCQlpbnRlbnNpdHkgPSBjb3JnaWJsX2RhdGEubWF4X2JyaWdodG5lc3M7CiAJY29yZ2libF9zZW5kX2ludGVuc2l0eShpbnRlbnNpdHkpOwogCWN1cnJlbnRfaW50ZW5zaXR5PWludGVuc2l0eTsKIAlyZXR1cm4gMDsKQEAgLTE0MSw3ICsxMzQsNiBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZ2V0X3Bvd2VyICAgICAgPSBjb3JnaWJsX2dldF9wb3dlciwKIAkuc2V0X3Bvd2VyICAgICAgPSBjb3JnaWJsX3NldF9wb3dlciwKLQkubWF4X2JyaWdodG5lc3MgPSBDT1JHSV9NQVhfSU5URU5TSVRZLAogCS5nZXRfYnJpZ2h0bmVzcyA9IGNvcmdpYmxfZ2V0X2ludGVuc2l0eSwKIAkuc2V0X2JyaWdodG5lc3MgPSBjb3JnaWJsX3NldF9pbnRlbnNpdHksCiB9OwpAQCAtMTUwLDEyICsxNDIsMTggQEAKIAogc3RhdGljIGludCBfX2luaXQgY29yZ2libF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gKm1hY2hpbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJY29yZ2libF9kYXRhLm1heF9icmlnaHRuZXNzID0gbWFjaGluZm8tPm1heF9pbnRlbnNpdHk7CisJY29yZ2libF9tYWNoX3NldF9pbnRlbnNpdHkgPSBtYWNoaW5mby0+c2V0X2JsX2ludGVuc2l0eTsKKwogCWNvcmdpX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyICgiY29yZ2ktYmwiLAogCQlOVUxMLCAmY29yZ2libF9kYXRhKTsKIAlpZiAoSVNfRVJSIChjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIgKGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOwogCiAJY29yZ2libF9zZXRfaW50ZW5zaXR5KE5VTEwsIENPUkdJX0RFRkFVTFRfSU5URU5TSVRZKTsKKwljb3JnaWJsX2xpbWl0X2ludGVuc2l0eSgwKTsKIAogCXByaW50aygiQ29yZ2kgQmFja2xpZ2h0IERyaXZlciBJbml0aWFsaXplZC5cbiIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCAyZTkzMjI0Li4wZmM4YmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtNzY3LDcgKzc2Nyw3IEBACiAJY29uc3QgY2hhciAqZGlzcGxheV9kZXNjID0gImZyYW1lIGJ1ZmZlciBkZXZpY2UiOwogCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbZmdfY29uc29sZV07CiAJc3RydWN0IHZjX2RhdGEgKnZjID0gdmNfY29uc1tmZ19jb25zb2xlXS5kOwotCXN0cnVjdCBmb250X2Rlc2MgKmZvbnQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmZvbnQgPSBOVUxMOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gTlVMTDsKIAlzdHJ1Y3QgZmJjb25fb3BzICpvcHM7CkBAIC04NDEsNyArODQxLDcgQEAKIAkJCQkJCWluZm8tPnZhci55cmVzKTsKIAkJdmMtPnZjX2ZvbnQud2lkdGggPSBmb250LT53aWR0aDsKIAkJdmMtPnZjX2ZvbnQuaGVpZ2h0ID0gZm9udC0+aGVpZ2h0OwotCQl2Yy0+dmNfZm9udC5kYXRhID0gcC0+Zm9udGRhdGEgPSBmb250LT5kYXRhOworCQl2Yy0+dmNfZm9udC5kYXRhID0gKHZvaWQgKikocC0+Zm9udGRhdGEgPSBmb250LT5kYXRhKTsKIAkJdmMtPnZjX2ZvbnQuY2hhcmNvdW50ID0gMjU2OyAvKiBGSVhNRSAgTmVlZCB0byBzdXBwb3J0IG1vcmUgZm9udHMgKi8KIAl9CiAKQEAgLTk0MSw3ICs5NDEsNyBAQAogCSAgIGZiLCBjb3B5IHRoZSBmb250IGZyb20gdGhhdCBjb25zb2xlICovCiAJdCA9ICZmYl9kaXNwbGF5W3N2Yy0+dmNfbnVtXTsKIAlpZiAoIXZjLT52Y19mb250LmRhdGEpIHsKLQkJdmMtPnZjX2ZvbnQuZGF0YSA9IHAtPmZvbnRkYXRhID0gdC0+Zm9udGRhdGE7CisJCXZjLT52Y19mb250LmRhdGEgPSAodm9pZCAqKShwLT5mb250ZGF0YSA9IHQtPmZvbnRkYXRhKTsKIAkJdmMtPnZjX2ZvbnQud2lkdGggPSAoKmRlZmF1bHRfbW9kZSktPnZjX2ZvbnQud2lkdGg7CiAJCXZjLT52Y19mb250LmhlaWdodCA9ICgqZGVmYXVsdF9tb2RlKS0+dmNfZm9udC5oZWlnaHQ7CiAJCXAtPnVzZXJmb250ID0gdC0+dXNlcmZvbnQ7CkBAIC0xMTg4LDcgKzExODgsNyBAQAogCQlyZXR1cm47CiAJdCA9ICZmYl9kaXNwbGF5W3N2Yy0+dmNfbnVtXTsKIAlpZiAoIXZjLT52Y19mb250LmRhdGEpIHsKLQkJdmMtPnZjX2ZvbnQuZGF0YSA9IHAtPmZvbnRkYXRhID0gdC0+Zm9udGRhdGE7CisJCXZjLT52Y19mb250LmRhdGEgPSAodm9pZCAqKShwLT5mb250ZGF0YSA9IHQtPmZvbnRkYXRhKTsKIAkJdmMtPnZjX2ZvbnQud2lkdGggPSAoKmRlZmF1bHRfbW9kZSktPnZjX2ZvbnQud2lkdGg7CiAJCXZjLT52Y19mb250LmhlaWdodCA9ICgqZGVmYXVsdF9tb2RlKS0+dmNfZm9udC5oZWlnaHQ7CiAJCXAtPnVzZXJmb250ID0gdC0+dXNlcmZvbnQ7CkBAIC0xNjg3LDYgKzE2ODcsOCBAQAogCWNhc2UgU01fRE9XTjoKIAkJaWYgKGNvdW50ID4gdmMtPnZjX3Jvd3MpCS8qIE1heGltdW0gcmVhbGlzdGljIHNpemUgKi8KIAkJCWNvdW50ID0gdmMtPnZjX3Jvd3M7CisJCWlmIChsb2dvX3Nob3duID49IDApCisJCQlnb3RvIHJlZHJhd19kb3duOwogCQlzd2l0Y2ggKHAtPnNjcm9sbG1vZGUpIHsKIAkJY2FzZSBTQ1JPTExfTU9WRToKIAkJCW9wcy0+Ym1vdmUodmMsIGluZm8sIHQsIDAsIHQgKyBjb3VudCwgMCwKQEAgLTIxNDgsNyArMjE1MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsCi0JCQkgICAgIHU4ICogZGF0YSwgaW50IHVzZXJmb250KQorCQkJICAgICBjb25zdCB1OCAqIGRhdGEsIGludCB1c2VyZm9udCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKQEAgLTIxNjYsNyArMjE2OCw3IEBACiAJCWNudCA9IEZOVENIQVJDTlQoZGF0YSk7CiAJZWxzZQogCQljbnQgPSAyNTY7Ci0JdmMtPnZjX2ZvbnQuZGF0YSA9IHAtPmZvbnRkYXRhID0gZGF0YTsKKwl2Yy0+dmNfZm9udC5kYXRhID0gKHZvaWQgKikocC0+Zm9udGRhdGEgPSBkYXRhKTsKIAlpZiAoKHAtPnVzZXJmb250ID0gdXNlcmZvbnQpKQogCQlSRUZDT1VOVChkYXRhKSsrOwogCXZjLT52Y19mb250LndpZHRoID0gdzsKQEAgLTIzMjMsNyArMjMyNSw3IEBACiAJCSAgICB0bXAtPnZjX2ZvbnQud2lkdGggPT0gdyAmJgogCQkgICAgIW1lbWNtcChmYl9kaXNwbGF5W2ldLmZvbnRkYXRhLCBuZXdfZGF0YSwgc2l6ZSkpIHsKIAkJCWtmcmVlKG5ld19kYXRhIC0gRk9OVF9FWFRSQV9XT1JEUyAqIHNpemVvZihpbnQpKTsKLQkJCW5ld19kYXRhID0gZmJfZGlzcGxheVtpXS5mb250ZGF0YTsKKwkJCW5ld19kYXRhID0gKHU4ICopZmJfZGlzcGxheVtpXS5mb250ZGF0YTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMjMzMyw3ICsyMzM1LDcgQEAKIHN0YXRpYyBpbnQgZmJjb25fc2V0X2RlZl9mb250KHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGNvbnNvbGVfZm9udCAqZm9udCwgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07Ci0Jc3RydWN0IGZvbnRfZGVzYyAqZjsKKwljb25zdCBzdHJ1Y3QgZm9udF9kZXNjICpmOwogCiAJaWYgKCFuYW1lKQogCQlmID0gZ2V0X2RlZmF1bHRfZm9udChpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmggYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaAppbmRleCAwOGJlZmFmLi4wNzM4Y2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaAorKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaApAQCAtMzAsNyArMzAsNyBAQAogICAgIC8qIEZpbGxlZCBpbiBieSB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSAqLwogICAgIHVfc2hvcnQgaW52ZXJzZTsgICAgICAgICAgICAgICAgLyogIT0gMCB0ZXh0IGJsYWNrIG9uIHdoaXRlIGFzIGRlZmF1bHQgKi8KICAgICAvKiBGaWxsZWQgaW4gYnkgdGhlIGxvdy1sZXZlbCBjb25zb2xlIGRyaXZlciAqLwotICAgIHVfY2hhciAqZm9udGRhdGE7CisgICAgY29uc3QgdV9jaGFyICpmb250ZGF0YTsKICAgICBpbnQgdXNlcmZvbnQ7ICAgICAgICAgICAgICAgICAgIC8qICE9IDAgaWYgZm9udGRhdGEga21hbGxvYygpZWQgKi8KICAgICB1X3Nob3J0IHNjcm9sbG1vZGU7ICAgICAgICAgICAgIC8qIFNjcm9sbCBNZXRob2QgKi8KICAgICBzaG9ydCB5c2Nyb2xsOyAgICAgICAgICAgICAgICAgIC8qIEhhcmR3YXJlIHNjcm9sbGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfMTB4MTguYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250XzEweDE4LmMKaW5kZXggZmYwYWY5Ni4uZTZhYTBlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfMTB4MTguYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF8xMHgxOC5jCkBAIC03LDcgKzcsNyBAQAogCiAjZGVmaW5lIEZPTlREQVRBTUFYIDkyMTYKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfMTB4MThbRk9OVERBVEFNQVhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfMTB4MThbRk9OVERBVEFNQVhdID0gewogCiAJLyogMCAweDAwICdeQCcgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCkBAIC01MTMyLDcgKzUxMzIsNyBAQAogfTsKIAogCi1zdHJ1Y3QgZm9udF9kZXNjIGZvbnRfMTB4MTggPSB7Citjb25zdCBzdHJ1Y3QgZm9udF9kZXNjIGZvbnRfMTB4MTggPSB7CiAJRk9OVDEweDE4X0lEWCwKIAkiMTB4MTgiLAogCTEwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfNngxMS5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfNngxMS5jCmluZGV4IGM1MmYxMjkuLjg5OTc2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250XzZ4MTEuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF82eDExLmMKQEAgLTgsNyArOCw3IEBACiAKICNkZWZpbmUgRk9OVERBVEFNQVggKDExKjI1NikKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfNngxMVtGT05UREFUQU1BWF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmb250ZGF0YV82eDExW0ZPTlREQVRBTUFYXSA9IHsKIAogCS8qIDAgMHgwMCAnXkAnICovCiAJMHgwMCwgLyogMDAwMDAwMDAgKi8KQEAgLTMzNDEsNyArMzM0MSw3IEBACiB9OwogCiAKLXN0cnVjdCBmb250X2Rlc2MgZm9udF92Z2FfNngxMSA9IHsKK2NvbnN0IHN0cnVjdCBmb250X2Rlc2MgZm9udF92Z2FfNngxMSA9IHsKIAlWR0E2eDExX0lEWCwKIAkiUHJvRm9udDZ4MTEiLAogCTYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF83eDE0LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF83eDE0LmMKaW5kZXggMWZhN2ZjZi4uYmJmMTE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfN3gxNC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250Xzd4MTQuYwpAQCAtNyw3ICs3LDcgQEAKIAogI2RlZmluZSBGT05UREFUQU1BWCAzNTg0CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZvbnRkYXRhXzd4MTRbRk9OVERBVEFNQVhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfN3gxNFtGT05UREFUQU1BWF0gPSB7CiAKIAkvKiAwIDB4MDAgJ15AJyAqLwogCTB4MDAsIC8qIDAwMDAwMDAgKi8KQEAgLTQxMDgsNyArNDEwOCw3IEBACiB9OwogCiAKLXN0cnVjdCBmb250X2Rlc2MgZm9udF83eDE0ID0geworY29uc3Qgc3RydWN0IGZvbnRfZGVzYyBmb250Xzd4MTQgPSB7CiAJRk9OVDd4MTRfSURYLAogCSI3eDE0IiwKIAk3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfOHgxNi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfOHgxNi5jCmluZGV4IGU2ZjhkYmEuLjc0ZmU4NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250Xzh4MTYuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF84eDE2LmMKQEAgLTgsNyArOCw3IEBACiAKICNkZWZpbmUgRk9OVERBVEFNQVggNDA5NgogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBmb250ZGF0YV84eDE2W0ZPTlREQVRBTUFYXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZvbnRkYXRhXzh4MTZbRk9OVERBVEFNQVhdID0gewogCiAJLyogMCAweDAwICdeQCcgKi8KIAkweDAwLCAvKiAwMDAwMDAwMCAqLwpAQCAtNDYyMSw3ICs0NjIxLDcgQEAKIH07CiAKIAotc3RydWN0IGZvbnRfZGVzYyBmb250X3ZnYV84eDE2ID0geworY29uc3Qgc3RydWN0IGZvbnRfZGVzYyBmb250X3ZnYV84eDE2ID0gewogCVZHQTh4MTZfSURYLAogCSJWR0E4eDE2IiwKIAk4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfOHg4LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF84eDguYwppbmRleCA1N2ZiZTI2Li4yNjE5OWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF84eDguYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF84eDguYwpAQCAtOCw3ICs4LDcgQEAKIAogI2RlZmluZSBGT05UREFUQU1BWCAyMDQ4CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZvbnRkYXRhXzh4OFtGT05UREFUQU1BWF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmb250ZGF0YV84eDhbRk9OVERBVEFNQVhdID0gewogCiAJLyogMCAweDAwICdeQCcgKi8KIAkweDAwLCAvKiAwMDAwMDAwMCAqLwpAQCAtMjU3Myw3ICsyNTczLDcgQEAKIH07CiAKIAotc3RydWN0IGZvbnRfZGVzYyBmb250X3ZnYV84eDggPSB7Citjb25zdCBzdHJ1Y3QgZm9udF9kZXNjIGZvbnRfdmdhXzh4OCA9IHsKIAlWR0E4eDhfSURYLAogCSJWR0E4eDgiLAogCTgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9hY29ybl84eDguYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X2Fjb3JuXzh4OC5jCmluZGV4IGQ1NjU1MDUuLjJkMmUzOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X2Fjb3JuXzh4OC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X2Fjb3JuXzh4OC5jCkBAIC0zLDcgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZvbnQuaD4KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgYWNvcm5kYXRhXzh4OFtdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWNvcm5kYXRhXzh4OFtdID0gewogLyogMDAgKi8gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIF5AICovCiAvKiAwMSAqLyAgMHg3ZSwgMHg4MSwgMHhhNSwgMHg4MSwgMHhiZCwgMHg5OSwgMHg4MSwgMHg3ZSwgLyogXkEgKi8KIC8qIDAyICovICAweDdlLCAweGZmLCAweGJkLCAweGZmLCAweGMzLCAweGU3LCAweGZmLCAweDdlLCAvKiBeQiAqLwpAQCAtMjYyLDcgKzI2Miw3IEBACiAvKiBGRiAqLyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAogfTsKIAotc3RydWN0IGZvbnRfZGVzYyBmb250X2Fjb3JuXzh4OCA9IHsKK2NvbnN0IHN0cnVjdCBmb250X2Rlc2MgZm9udF9hY29ybl84eDggPSB7CiAJQUNPUk44eDhfSURYLAogCSJBY29ybjh4OCIsCiAJOCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X21pbmlfNHg2LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9taW5pXzR4Ni5jCmluZGV4IDU5M2I5NTUuLmQ4MTgyMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X21pbmlfNHg2LmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfbWluaV80eDYuYwpAQCAtNDMsNyArNDMsNyBAQAogCiAjZGVmaW5lIEZPTlREQVRBTUFYIDE1MzYKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfbWluaV80eDZbRk9OVERBVEFNQVhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfbWluaV80eDZbRk9OVERBVEFNQVhdID0gewogCiAJLyp7Ki8KIAkgIAkvKiAgIENoYXIgMDogJyAnICAqLwpAQCAtMjE0Nyw3ICsyMTQ3LDcgQEAKIAkvKn0qLwogfTsKIAotc3RydWN0IGZvbnRfZGVzYyBmb250X21pbmlfNHg2ID0geworY29uc3Qgc3RydWN0IGZvbnRfZGVzYyBmb250X21pbmlfNHg2ID0gewogCU1JTkk0eDZfSURYLAogCSJNSU5JNHg2IiwKIAk0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfcGVhcmxfOHg4LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9wZWFybF84eDguYwppbmRleCA1ZmE5NWYxLi5lNjQ2Yzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9wZWFybF84eDguYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9wZWFybF84eDguYwpAQCAtMTMsNyArMTMsNyBAQAogCiAjZGVmaW5lIEZPTlREQVRBTUFYIDIwNDgKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfcGVhcmw4eDhbRk9OVERBVEFNQVhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfcGVhcmw4eDhbRk9OVERBVEFNQVhdID0gewogCiAgICAvKiAwIDB4MDAgJ15AJyAqLwogICAgMHgwMCwgLyogMDAwMDAwMDAgKi8KQEAgLTI1NzcsNyArMjU3Nyw3IEBACiAKIH07CiAKLXN0cnVjdCBmb250X2Rlc2MgZm9udF9wZWFybF84eDggPSB7Citjb25zdCBzdHJ1Y3QgZm9udF9kZXNjIGZvbnRfcGVhcmxfOHg4ID0gewogCVBFQVJMOHg4X0lEWCwKIAkiUEVBUkw4eDgiLAogCTgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9zdW4xMngyMi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfc3VuMTJ4MjIuYwppbmRleCBjN2JkOTY3Li5hYjVlYjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9zdW4xMngyMi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X3N1bjEyeDIyLmMKQEAgLTIsNyArMiw3IEBACiAKICNkZWZpbmUgRk9OVERBVEFNQVggMTEyNjQKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfc3VuMTJ4MjJbRk9OVERBVEFNQVhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfc3VuMTJ4MjJbRk9OVERBVEFNQVhdID0gewogCiAJLyogMCAweDAwICdeQCcgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTYxNTEsNyArNjE1MSw3IEBACiB9OwogCiAKLXN0cnVjdCBmb250X2Rlc2MgZm9udF9zdW5fMTJ4MjIgPSB7Citjb25zdCBzdHJ1Y3QgZm9udF9kZXNjIGZvbnRfc3VuXzEyeDIyID0gewogCVNVTjEyeDIyX0lEWCwKIAkiU1VOMTJ4MjIiLAogCTEyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfc3VuOHgxNi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfc3VuOHgxNi5jCmluZGV4IDJhZjNhYjMuLjQxZjkxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X3N1bjh4MTYuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9zdW44eDE2LmMKQEAgLTIsNyArMiw3IEBACiAKICNkZWZpbmUgRk9OVERBVEFNQVggNDA5NgogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBmb250ZGF0YV9zdW44eDE2W0ZPTlREQVRBTUFYXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZvbnRkYXRhX3N1bjh4MTZbRk9OVERBVEFNQVhdID0gewogLyogKi8gMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKIC8qICovIDB4MDAsMHgwMCwweDdlLDB4ODEsMHhhNSwweDgxLDB4ODEsMHhiZCwweDk5LDB4ODEsMHg4MSwweDdlLDB4MDAsMHgwMCwweDAwLDB4MDAsCiAvKiAqLyAweDAwLDB4MDAsMHg3ZSwweGZmLDB4ZGIsMHhmZiwweGZmLDB4YzMsMHhlNywweGZmLDB4ZmYsMHg3ZSwweDAwLDB4MDAsMHgwMCwweDAwLApAQCAtMjYxLDcgKzI2MSw3IEBACiAvKiAqLyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAogfTsKIAotc3RydWN0IGZvbnRfZGVzYyBmb250X3N1bl84eDE2ID0geworY29uc3Qgc3RydWN0IGZvbnRfZGVzYyBmb250X3N1bl84eDE2ID0gewogCVNVTjh4MTZfSURYLAogCSJTVU44eDE2IiwKIAk4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRzLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udHMuYwppbmRleCBlNzliMjk3Li40ZmQwN2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udHMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udHMuYwpAQCAtMjMsNyArMjMsNyBAQAogCiAjZGVmaW5lIE5PX0ZPTlRTCiAKLXN0YXRpYyBzdHJ1Y3QgZm9udF9kZXNjICpmb250c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmZvbnRzW10gPSB7CiAjaWZkZWYgQ09ORklHX0ZPTlRfOHg4CiAjdW5kZWYgTk9fRk9OVFMKICAgICAmZm9udF92Z2FfOHg4LApAQCAtODQsNyArODQsNyBAQAogICoKICAqLwogCi1zdHJ1Y3QgZm9udF9kZXNjICpmaW5kX2ZvbnQoY2hhciAqbmFtZSkKK2NvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmZpbmRfZm9udChjb25zdCBjaGFyICpuYW1lKQogewogICAgdW5zaWduZWQgaW50IGk7CiAKQEAgLTEwOCwxMCArMTA4LDEwIEBACiAgKgogICovCiAKLXN0cnVjdCBmb250X2Rlc2MgKmdldF9kZWZhdWx0X2ZvbnQoaW50IHhyZXMsIGludCB5cmVzKQorY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqZ2V0X2RlZmF1bHRfZm9udChpbnQgeHJlcywgaW50IHlyZXMpCiB7CiAgICAgaW50IGksIGMsIGNjOwotICAgIHN0cnVjdCBmb250X2Rlc2MgKmYsICpnOworICAgIGNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmYsICpnOwogCiAgICAgZyA9IE5VTEw7CiAgICAgY2MgPSAtMTAwMDA7CkBAIC0xMzgsNyArMTM4LDYgQEAKICAgICByZXR1cm4gZzsKIH0KIAotRVhQT1JUX1NZTUJPTChmb250cyk7CiBFWFBPUlRfU1lNQk9MKGZpbmRfZm9udCk7CiBFWFBPUlRfU1lNQk9MKGdldF9kZWZhdWx0X2ZvbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggMDcwNWNkNy4uNmVmNmY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtMTAyMCw3ICsxMDIwLDkgQEAKIHN0YXRpYyBpbnQgdmdhY29uX3Jlc2l6ZShzdHJ1Y3QgdmNfZGF0YSAqYywgdW5zaWduZWQgaW50IHdpZHRoLAogCQkJCXVuc2lnbmVkIGludCBoZWlnaHQpCiB7Ci0JaWYgKHdpZHRoICUgMiB8fCB3aWR0aCA+IE9SSUdfVklERU9fQ09MUyB8fCBoZWlnaHQgPiBPUklHX1ZJREVPX0xJTkVTKQorCWlmICh3aWR0aCAlIDIgfHwgd2lkdGggPiBPUklHX1ZJREVPX0NPTFMgfHwKKwkgICAgaGVpZ2h0ID4gKE9SSUdfVklERU9fTElORVMgKiB2Z2FfZGVmYXVsdF9mb250X2hlaWdodCkvCisJICAgIGMtPnZjX2ZvbnQuaGVpZ2h0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChDT05fSVNfVklTSUJMRShjKSAmJiAhdmdhX2lzX2dmeCkgLyogd2hvIGtub3dzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiY3Z0LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiY3Z0LmMKaW5kZXggY2ZhNjFiNS4uMGI2YWYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmN2dC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJjdnQuYwpAQCAtMjcyLDExICsyNzIsMTEgQEAKIHsKIAltb2RlLT5yZWZyZXNoID0gY3Z0LT5mX3JlZnJlc2g7CiAJbW9kZS0+cGl4Y2xvY2sgPSBLSFoyUElDT1MoY3Z0LT5waXhjbG9jay8xMDAwKTsKLQltb2RlLT5sZWZ0X21hcmdpbiA9IGN2dC0+aF9mcm9udF9wb3JjaDsKLQltb2RlLT5yaWdodF9tYXJnaW4gPSBjdnQtPmhfYmFja19wb3JjaDsKKwltb2RlLT5sZWZ0X21hcmdpbiA9IGN2dC0+aF9iYWNrX3BvcmNoOworCW1vZGUtPnJpZ2h0X21hcmdpbiA9IGN2dC0+aF9mcm9udF9wb3JjaDsKIAltb2RlLT5oc3luY19sZW4gPSBjdnQtPmhzeW5jOwotCW1vZGUtPnVwcGVyX21hcmdpbiA9IGN2dC0+dl9mcm9udF9wb3JjaDsKLQltb2RlLT5sb3dlcl9tYXJnaW4gPSBjdnQtPnZfYmFja19wb3JjaDsKKwltb2RlLT51cHBlcl9tYXJnaW4gPSBjdnQtPnZfYmFja19wb3JjaDsKKwltb2RlLT5sb3dlcl9tYXJnaW4gPSBjdnQtPnZfZnJvbnRfcG9yY2g7CiAJbW9kZS0+dnN5bmNfbGVuID0gY3Z0LT52c3luYzsKIAogCW1vZGUtPnN5bmMgJj0gfihGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggY2FiZDUzYy4uNmMyMjQ0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtNDI1LDcgKzQyNSw3IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBpbXhmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IGlteGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBsZXZlbCkKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJcHJfZGVidWcoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKaW5kZXggOThlMDBkOC4uZTAyZGE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIAl2YWRkcl90IHZtOwogCXVuc2lnbmVkIGludCBvZmZzOwogCXVuc2lnbmVkIGludCBvZmZzMjsKLQl1bnNpZ25lZCBjaGFyIHN0b3JlOworCXVuc2lnbmVkIGNoYXIgc3RvcmUsIG9yaWc7CiAJdW5zaWduZWQgY2hhciBieXRlc1szMl07CiAJdW5zaWduZWQgY2hhciogdG1wOwogCkBAIC0xMjk4LDcgKzEyOTgsOCBAQAogCWlmIChtYXhTaXplID4gMHgyMDAwMDAwKSBtYXhTaXplID0gMHgyMDAwMDAwOwogCiAJbWdhX291dGIoTV9FWFRWR0FfSU5ERVgsIDB4MDMpOwotCW1nYV9vdXRiKE1fRVhUVkdBX0RBVEEsIG1nYV9pbmIoTV9FWFRWR0FfREFUQSkgfCAweDgwKTsKKwlvcmlnID0gbWdhX2luYihNX0VYVFZHQV9EQVRBKTsKKwltZ2Ffb3V0YihNX0VYVFZHQV9EQVRBLCBvcmlnIHwgMHg4MCk7CiAKIAlzdG9yZSA9IG1nYV9yZWFkYih2bSwgMHgxMjM0KTsKIAl0bXAgPSBieXRlczsKQEAgLTEzMjMsNyArMTMyNCw3IEBACiAJbWdhX3dyaXRlYih2bSwgMHgxMjM0LCBzdG9yZSk7CiAKIAltZ2Ffb3V0YihNX0VYVFZHQV9JTkRFWCwgMHgwMyk7Ci0JbWdhX291dGIoTV9FWFRWR0FfREFUQSwgbWdhX2luYihNX0VYVFZHQV9EQVRBKSAmIH4weDgwKTsKKwltZ2Ffb3V0YihNX0VYVFZHQV9EQVRBLCBvcmlnKTsKIAogCSpyZWFsU2l6ZSA9IG9mZnMgLSAweDEwMDAwMDsKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTQpAQCAtMTg1OCw2ICsxODU5LDggQEAKIAkJCQkJCQl0byB5cmVzX3ZpcnR1YWwgKiB4cmVzX3ZpcnR1YWwgPCAyXjMyICovCiAJfQogCW1hdHJveGZiX2luaXRfZml4KFBNSU5GTzIpOworCUFDQ0VTU19GQklORk8oZmJjb24uc2NyZWVuX2Jhc2UpID0gdmFkZHJfdmEoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSkpOworCW1hdHJveGZiX3VwZGF0ZV9maXgoUE1JTkZPMik7CiAJLyogTm9ybWFsaXplIHZhbHVlcyAobmFtZWx5IHlyZXNfdmlydHVhbCkgKi8KIAltYXRyb3hmYl9jaGVja192YXIoJnZlc2FmYl9kZWZpbmVkLCAmQUNDRVNTX0ZCSU5GTyhmYmNvbikpOwogCS8qIEFuZCBwdXQgaXQgaW50byAiY3VycmVudCIgdmFyLiBEbyBOT1QgcHJvZ3JhbSBoYXJkd2FyZSB5ZXQsIG9yIHdlJ2xsIG5vdCB0YWtlIG92ZXIKQEAgLTIwMTAsMTEgKzIwMTMsMTEgQEAKIAl9CiAJLyogbm90IG1hdGNoLi4uICovCiAJaWYgKCFiLT52ZW5kb3IpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGRldiA+IDApIHsKIAkJLyogbm90IHJlcXVlc3RlZCBvbmUuLi4gKi8KIAkJZGV2LS07Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9pMmMuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2kyYy5jCmluZGV4IGFjZTQ4NGYuLjEyZjI4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2kyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2kyYy5jCkBAIC0yMDksMTAgKzIwOSwxMyBAQAogCiAJaWYgKCFlZGlkICYmIGNvbm4gPT0gMSkgewogCQkvKiB0cnkgdG8gZ2V0IGZyb20gZmlybXdhcmUgKi8KLQkJZWRpZCA9IGttYWxsb2MoRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwotCQlpZiAoZWRpZCkKLQkJCW1lbWNweShlZGlkLCBmYl9maXJtd2FyZV9lZGlkKGluZm8tPmRldmljZSksCi0JCQkgICAgICAgRURJRF9MRU5HVEgpOworCQljb25zdCB1OCAqZSA9IGZiX2Zpcm13YXJlX2VkaWQoaW5mby0+ZGV2aWNlKTsKKworCQlpZiAoZSAhPSBOVUxMKSB7CisJCQllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoZWRpZCkKKwkJCQltZW1jcHkoZWRpZCwgZSwgRURJRF9MRU5HVEgpOworCQl9CiAJfQogCiAJaWYgKG91dF9lZGlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwppbmRleCAzNjIwZGUwLi5hN2YwMjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwpAQCAtODkzLDcgKzg5Myw3IEBACiAJaW50IGksIHNldCA9IGN1cnNvci0+c2V0OwogCXUxNiBmZywgYmc7CiAKLQlpZiAoIWh3Y3VyIHx8IGN1cnNvci0+aW1hZ2Uud2lkdGggPiBNQVhfQ1VSUyB8fCBjdXJzb3ItPmltYWdlLmhlaWdodCA+IE1BWF9DVVJTKQorCWlmIChjdXJzb3ItPmltYWdlLndpZHRoID4gTUFYX0NVUlMgfHwgY3Vyc29yLT5pbWFnZS5oZWlnaHQgPiBNQVhfQ1VSUykKIAkJcmV0dXJuIC1FTlhJTzsKIAogCU5WU2hvd0hpZGVDdXJzb3IocGFyLCAwKTsKQEAgLTEzNTYsNiArMTM1Niw5IEBACiAJaW5mby0+cGl4bWFwLnNpemUgPSA4ICogMTAyNDsKIAlpbmZvLT5waXhtYXAuZmxhZ3MgPSBGQl9QSVhNQVBfU1lTVEVNOwogCisJaWYgKCFod2N1cikKKwkgICAgaW5mby0+ZmJvcHMtPmZiX2N1cnNvciA9IHNvZnRfY3Vyc29yOworCiAJaW5mby0+dmFyLmFjY2VsX2ZsYWdzID0gKCFub2FjY2VsKTsKIAogCXN3aXRjaCAocGFyLT5BcmNoaXRlY3R1cmUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG0zZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG0zZmIuYwppbmRleCBlMGRhZDk0Li4yZTExYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbTNmYi5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNpbmNsdWRlIDx2aWRlby9mYmNvbi5oPgogI2luY2x1ZGUgPHZpZGVvL2ZiY29uLW1mYi5oPgpAQCAtMjU5NCw3ICsyNTk1LDcgQEAKIHsKIAljaGFyICpuZXh0OwogCi0JaWYgKCEoQ0hBUl9JU19OVU0ob3B0aW9uc1swXSkpKSB7CisJaWYgKCEoaXNkaWdpdChvcHRpb25zWzBdKSkpIHsKIAkJKCpibikgPSAwOwogCQlyZXR1cm4gKG9wdGlvbnMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKaW5kZXggOTU5NDA0YS4uM2M5ODQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKQEAgLTI3NCwxMCArMjc0LDEzIEBACiAKIAlpZiAoIWVkaWQpIHsKIAkJLyogdHJ5IHRvIGdldCBmcm9tIGZpcm13YXJlICovCi0JCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKLQkJaWYgKGVkaWQpCi0JCQltZW1jcHkoZWRpZCwgZmJfZmlybXdhcmVfZWRpZChpbmZvLT5kZXZpY2UpLAotCQkJICAgICAgIEVESURfTEVOR1RIKTsKKwkJY29uc3QgdTggKmUgPSBmYl9maXJtd2FyZV9lZGlkKGluZm8tPmRldmljZSk7CisKKwkJaWYgKGUpIHsKKwkJCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwkJCWlmIChlZGlkKQorCQkJCW1lbWNweShlZGlkLCBlLCBFRElEX0xFTkdUSCk7CisJCX0KIAl9CiAKIAlpZiAob3V0X2VkaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaAppbmRleCBkNmY5NDc0Li5lYTE3ZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLmgKQEAgLTYwLDggKzYwLDYgQEAKIAogI2RlZmluZSBTM19TQVZBR0VfU0VSSUVTKGNoaXApICAgICgoY2hpcD49UzNfU0FWQUdFM0QpICYmIChjaGlwPD1TM19TQVZBR0UyMDAwKSkKIAotI2RlZmluZSBTM19NT0JJTEVfVFdJU1RFUl9TRVJJRVMoY2hpcCkgKChjaGlwPT1TM19UV0lTVEVSKSB8fCAoY2hpcCA9PSBTM19QUk9TQVZBR0VERFIpKQotCiAvKiBDaGlwIHRhZ3MuICBUaGVzZSBhcmUgdXNlZCB0byBncm91cCB0aGUgYWRhcHRlcnMgaW50bwogICogcmVsYXRlZCBmYW1pbGllcy4KICAqLwpAQCAtNzQsOCArNzIsNiBAQAogICBTM19QUk9TQVZBR0UsCiAgIFMzX1NVUEVSU0FWQUdFLAogICBTM19TQVZBR0UyMDAwLAotICBTM19QUk9TQVZBR0VERFIsCi0gIFMzX1RXSVNURVIsCiAgIFMzX0xBU1QKIH0gc2F2YWdlX2NoaXBzZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggYjVjYTNlZi4uN2MyODU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTE3NzMsOCArMTc3Myw3IEBACiAJCX0KIAl9CiAKLQlpZiAoUzNfU0FWQUdFX01PQklMRV9TRVJJRVMocGFyLT5jaGlwKSB8fAotCSAgICAoUzNfTU9CSUxFX1RXSVNURVJfU0VSSUVTKHBhci0+Y2hpcCkgJiYgIXBhci0+Y3J0b25seSkpCisJaWYgKFMzX1NBVkFHRV9NT0JJTEVfU0VSSUVTKHBhci0+Y2hpcCkgJiYgIXBhci0+Y3J0b25seSkKIAkJcGFyLT5kaXNwbGF5X3R5cGUgPSBESVNQX0xDRDsKIAllbHNlIGlmIChkdmkgfHwgKHBhci0+Y2hpcCA9PSBTM19TQVZBR0U0ICYmIHBhci0+ZHZpKSkKIAkJcGFyLT5kaXNwbGF5X3R5cGUgPSBESVNQX0RGUDsKQEAgLTE3ODMsNyArMTc4Miw3IEBACiAKIAkvKiBDaGVjayBMQ0QgcGFuZWwgcGFycm1hdGlvbiAqLwogCi0JaWYgKHBhci0+Y2hpcCA9PSBTM19TQVZBR0VfTVgpIHsKKwlpZiAocGFyLT5kaXNwbGF5X3R5cGUgPT0gRElTUF9MQ0QpIHsKIAkJdW5zaWduZWQgY2hhciBjcjZiID0gVkdBckNSKCAweDZiICk7CiAKIAkJaW50IHBhbmVsWCA9IChWR0FyU0VRICgweDYxKSArCkBAIC0xOTIyLDE1ICsxOTIxLDE1IEBACiAJCXNucHJpbnRmIChpbmZvLT5maXguaWQsIDE2LCAiUHJvU2F2YWdlS00iKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9BQ0NFTF9TM1RXSVNURVJfUDoKLQkJcGFyLT5jaGlwID0gUzNfVFdJU1RFUjsKKwkJcGFyLT5jaGlwID0gUzNfUFJPU0FWQUdFOwogCQlzbnByaW50ZiAoaW5mby0+Zml4LmlkLCAxNiwgIlR3aXN0ZXJQIik7CiAJCWJyZWFrOwogCWNhc2UgRkJfQUNDRUxfUzNUV0lTVEVSX0s6Ci0JCXBhci0+Y2hpcCA9IFMzX1RXSVNURVI7CisJCXBhci0+Y2hpcCA9IFMzX1BST1NBVkFHRTsKIAkJc25wcmludGYgKGluZm8tPmZpeC5pZCwgMTYsICJUd2lzdGVySyIpOwogCQlicmVhazsKIAljYXNlIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFI6Ci0JCXBhci0+Y2hpcCA9IFMzX1BST1NBVkFHRUREUjsKKwkJcGFyLT5jaGlwID0gUzNfUFJPU0FWQUdFOwogCQlzbnByaW50ZiAoaW5mby0+Zml4LmlkLCAxNiwgIlByb1NhdmFnZUREUiIpOwogCQlicmVhazsKIAljYXNlIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFJLOgpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCAzOGY2MjY4Li4wZTExZTMxIDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtNTYyLDYgKzU2Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2tpb2NiKHN0cnVjdCBraW9jYiAqaW9jYikKIHsKIAlraW9jYkNsZWFyTG9ja2VkKGlvY2IpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJd2FrZV91cF9iaXQoJmlvY2ItPmtpX2ZsYWdzLCBLSUZfTE9DS0VEKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCBhYzNmYjllLi5hNzE5ZTE1IDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtNDQsNiArNDQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3lzY2FsbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CQkvKiBzaW9jZGV2cHJpdmF0ZV9pb2N0bCAqLwogCkBAIC0xNDg3LDYgKzE0ODksOCBAQAogCiAJCS8qIGV4ZWN2ZSBzdWNjZXNzICovCiAJCXNlY3VyaXR5X2Jwcm1fZnJlZShicHJtKTsKKwkJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOworCQl1cGRhdGVfbWVtX2hpd2F0ZXIoY3VycmVudCk7CiAJCWtmcmVlKGJwcm0pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggNzM3NmI2MTIuLmZiMTAzODYgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0xMDIsNyArMTAyLDggQEAKIAkJbGlzdF9kZWxfaW5pdCgmZGVudHJ5LT5kX2FsaWFzKTsKIAkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpOworCQlpZiAoIWlub2RlLT5pX25saW5rKQorCQkJZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpOwogCQlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9pcHV0KQogCQkJZGVudHJ5LT5kX29wLT5kX2lwdXQoZGVudHJ5LCBpbm9kZSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggNmFiMWRkMC4uNDAzYjkwYSAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTIzMSw4ICsyMzEsOSBAQAogCiBzdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlX2luaXQoc3RydWN0IHBvbGxfc2FmZXdha2UgKnBzdyk7CiBzdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlKHN0cnVjdCBwb2xsX3NhZmV3YWtlICpwc3csIHdhaXRfcXVldWVfaGVhZF90ICp3cSk7Ci1zdGF0aWMgaW50IGVwX2dldGZkKGludCAqZWZkLCBzdHJ1Y3QgaW5vZGUgKiplaW5vZGUsIHN0cnVjdCBmaWxlICoqZWZpbGUpOwotc3RhdGljIGludCBlcF9maWxlX2luaXQoc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBlcF9nZXRmZChpbnQgKmVmZCwgc3RydWN0IGlub2RlICoqZWlub2RlLCBzdHJ1Y3QgZmlsZSAqKmVmaWxlLAorCQkgICAgc3RydWN0IGV2ZW50cG9sbCAqZXApOworc3RhdGljIGludCBlcF9hbGxvYyhzdHJ1Y3QgZXZlbnRwb2xsICoqcGVwKTsKIHN0YXRpYyB2b2lkIGVwX2ZyZWUoc3RydWN0IGV2ZW50cG9sbCAqZXApOwogc3RhdGljIHN0cnVjdCBlcGl0ZW0gKmVwX2ZpbmQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZmQpOwogc3RhdGljIHZvaWQgZXBfdXNlX2VwaXRlbShzdHJ1Y3QgZXBpdGVtICplcGkpOwpAQCAtNTAxLDM4ICs1MDIsMzcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZXBvbGxfY3JlYXRlKGludCBzaXplKQogewogCWludCBlcnJvciwgZmQ7CisJc3RydWN0IGV2ZW50cG9sbCAqZXA7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAogCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBzeXNfZXBvbGxfY3JlYXRlKCVkKVxuIiwKIAkJICAgICBjdXJyZW50LCBzaXplKSk7CiAKLQkvKiBTYW5pdHkgY2hlY2sgb24gdGhlIHNpemUgcGFyYW1ldGVyICovCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgb24gdGhlIHNpemUgcGFyYW1ldGVyLCBhbmQgY3JlYXRlIHRoZSBpbnRlcm5hbCBkYXRhCisJICogc3RydWN0dXJlICggInN0cnVjdCBldmVudHBvbGwiICkuCisJICovCiAJZXJyb3IgPSAtRUlOVkFMOwotCWlmIChzaXplIDw9IDApCisJaWYgKHNpemUgPD0gMCB8fCAoZXJyb3IgPSBlcF9hbGxvYygmZXApKSAhPSAwKQogCQlnb3RvIGVleGl0XzE7CiAKIAkvKgogCSAqIENyZWF0ZXMgYWxsIHRoZSBpdGVtcyBuZWVkZWQgdG8gc2V0dXAgYW4gZXZlbnRwb2xsIGZpbGUuIFRoYXQgaXMsCiAJICogYSBmaWxlIHN0cnVjdHVyZSwgYW5kIGlub2RlIGFuZCBhIGZyZWUgZmlsZSBkZXNjcmlwdG9yLgogCSAqLwotCWVycm9yID0gZXBfZ2V0ZmQoJmZkLCAmaW5vZGUsICZmaWxlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZWV4aXRfMTsKLQotCS8qIFNldHVwIHRoZSBmaWxlIGludGVybmFsIGRhdGEgc3RydWN0dXJlICggInN0cnVjdCBldmVudHBvbGwiICkgKi8KLQllcnJvciA9IGVwX2ZpbGVfaW5pdChmaWxlKTsKKwllcnJvciA9IGVwX2dldGZkKCZmZCwgJmlub2RlLCAmZmlsZSwgZXApOwogCWlmIChlcnJvcikKIAkJZ290byBlZXhpdF8yOwogCi0KIAlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX2NyZWF0ZSglZCkgPSAlZFxuIiwKIAkJICAgICBjdXJyZW50LCBzaXplLCBmZCkpOwogCiAJcmV0dXJuIGZkOwogCiBlZXhpdF8yOgotCXN5c19jbG9zZShmZCk7CisJZXBfZnJlZShlcCk7CisJa2ZyZWUoZXApOwogZWV4aXRfMToKIAlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX2NyZWF0ZSglZCkgPSAlZFxuIiwKIAkJICAgICBjdXJyZW50LCBzaXplLCBlcnJvcikpOwpAQCAtNzA2LDcgKzcwNiw4IEBACiAvKgogICogQ3JlYXRlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGJlIHVzZWQgYnkgdGhlIGVwb2xsIGludGVyZmFjZS4KICAqLwotc3RhdGljIGludCBlcF9nZXRmZChpbnQgKmVmZCwgc3RydWN0IGlub2RlICoqZWlub2RlLCBzdHJ1Y3QgZmlsZSAqKmVmaWxlKQorc3RhdGljIGludCBlcF9nZXRmZChpbnQgKmVmZCwgc3RydWN0IGlub2RlICoqZWlub2RlLCBzdHJ1Y3QgZmlsZSAqKmVmaWxlLAorCQkgICAgc3RydWN0IGV2ZW50cG9sbCAqZXApCiB7CiAJc3RydWN0IHFzdHIgdGhpczsKIAljaGFyIG5hbWVbMzJdOwpAQCAtNzU2LDcgKzc1Nyw3IEBACiAJZmlsZS0+Zl9vcCA9ICZldmVudHBvbGxfZm9wczsKIAlmaWxlLT5mX21vZGUgPSBGTU9ERV9SRUFEOwogCWZpbGUtPmZfdmVyc2lvbiA9IDA7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBlcDsKIAogCS8qIEluc3RhbGwgdGhlIG5ldyBzZXR1cCBmaWxlIGludG8gdGhlIGFsbG9jYXRlZCBmZC4gKi8KIAlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKQEAgLTc3NywxNCArNzc4LDEzIEBACiB9CiAKIAotc3RhdGljIGludCBlcF9maWxlX2luaXQoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGVwX2FsbG9jKHN0cnVjdCBldmVudHBvbGwgKipwZXApCiB7Ci0Jc3RydWN0IGV2ZW50cG9sbCAqZXA7CisJc3RydWN0IGV2ZW50cG9sbCAqZXAgPSBremFsbG9jKHNpemVvZigqZXApLCBHRlBfS0VSTkVMKTsKIAotCWlmICghKGVwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGV2ZW50cG9sbCksIEdGUF9LRVJORUwpKSkKKwlpZiAoIWVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChlcCwgMCwgc2l6ZW9mKCplcCkpOwogCXJ3bG9ja19pbml0KCZlcC0+bG9jayk7CiAJaW5pdF9yd3NlbSgmZXAtPnNlbSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndxKTsKQEAgLTc5Miw5ICs3OTIsOSBAQAogCUlOSVRfTElTVF9IRUFEKCZlcC0+cmRsbGlzdCk7CiAJZXAtPnJiciA9IFJCX1JPT1Q7CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBlcDsKKwkqcGVwID0gZXA7CiAKLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogZXBfZmlsZV9pbml0KCkgZXA9JXBcbiIsCisJRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX2FsbG9jKCkgZXA9JXBcbiIsCiAJCSAgICAgY3VycmVudCwgZXApKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCAxNGRkMDM5Li5hMDRhNTc1IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC00MjEsMTEgKzQyMSw2IEBACiAJaWYgKCFtcG50KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5KGFyZ19zaXplID4+IFBBR0VfU0hJRlQpKSB7Ci0JCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgbXBudCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQogCW1lbXNldChtcG50LCAwLCBzaXplb2YoKm1wbnQpKTsKIAogCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CkBAIC03NDUsOCArNzQwLDggQEAKICAgICAgICAgfQogCiAJLyoKLQkgKiBOb3cgdGhlcmUgYXJlIHJlYWxseSBubyBvdGhlciB0aHJlYWRzIGF0IGFsbCwKLQkgKiBzbyBpdCdzIHNhZmUgdG8gc3RvcCB0ZWxsaW5nIHRoZW0gdG8ga2lsbCB0aGVtc2VsdmVzLgorCSAqIFRoZXJlIG1heSBiZSBvbmUgdGhyZWFkIGxlZnQgd2hpY2ggaXMganVzdCBleGl0aW5nLAorCSAqIGJ1dCBpdCdzIHNhZmUgdG8gc3RvcCB0ZWxsaW5nIHRoZSBncm91cCB0byBraWxsIHRoZW1zZWx2ZXMuCiAJICovCiAJc2lnLT5mbGFncyA9IDA7CiAKQEAgLTc4NSw3ICs3ODAsNiBAQAogCQkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBvbGRzaWdoYW5kKTsKIAl9CiAKLQlCVUdfT04oIXRocmVhZF9ncm91cF9lbXB0eShjdXJyZW50KSk7CiAJQlVHX09OKCF0aHJlYWRfZ3JvdXBfbGVhZGVyKGN1cnJlbnQpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDYyZmZhOTEuLjcxMzQ0MDMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKKysrIGIvZnMvZmF0L2ZpbGUuYwpAQCAtMTIsMzkgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAKLXN0YXRpYyBzc2l6ZV90IGZhdF9maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGJ1ZiwgY291bnQsIHBvcyk7Ci0JaWYgKHJldHZhbCA+IDApIHsKLQkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCU1TRE9TX0koaW5vZGUpLT5pX2F0dHJzIHw9IEFUVFJfQVJDSDsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0vLwkJY2hlY2sgdGhlIGxvY2tpbmcgcnVsZXMKLS8vCQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0vLwkJCWZhdF9zeW5jX2lub2RlKGlub2RlKTsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHNzaXplX3QgZmF0X2ZpbGVfd3JpdGV2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IGdlbmVyaWNfZmlsZV93cml0ZXYoZmlscCwgaW92LCBucl9zZWdzLCBwcG9zKTsKLQlpZiAocmV0dmFsID4gMCkgewotCQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJTVNET1NfSShpbm9kZSktPmlfYXR0cnMgfD0gQVRUUl9BUkNIOwotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IGZhdF9nZW5lcmljX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE0OCw5ICsxMTUsOSBAQAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKIAkucmVhZHYJCT0gZ2VuZXJpY19maWxlX3JlYWR2LAotCS53cml0ZXYJCT0gZmF0X2ZpbGVfd3JpdGV2LAorCS53cml0ZXYJCT0gZ2VuZXJpY19maWxlX3dyaXRldiwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCi0JLmFpb193cml0ZQk9IGZhdF9maWxlX2Fpb193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkuaW9jdGwJCT0gZmF0X2dlbmVyaWNfaW9jdGwsCiAJLmZzeW5jCQk9IGZpbGVfZnN5bmMsCmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IGE3Y2JlNjguLmUyZWZmZTIgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC0xMDIsNiArMTAyLDE5IEBACiAJCQkJICAmTVNET1NfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+bW11X3ByaXZhdGUpOwogfQogCitzdGF0aWMgaW50IGZhdF9jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWludCBlcnIgPSBnZW5lcmljX2NvbW1pdF93cml0ZShmaWxlLCBwYWdlLCBmcm9tLCB0byk7CisJaWYgKCFlcnIgJiYgIShNU0RPU19JKGlub2RlKS0+aV9hdHRycyAmIEFUVFJfQVJDSCkpIHsKKwkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJCU1TRE9TX0koaW5vZGUpLT5pX2F0dHJzIHw9IEFUVFJfQVJDSDsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzZWN0b3JfdCBfZmF0X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQogewogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZywgYmxvY2ssIGZhdF9nZXRfYmxvY2spOwpAQCAtMTEyLDcgKzEyNSw3IEBACiAJLndyaXRlcGFnZQk9IGZhdF93cml0ZXBhZ2UsCiAJLnN5bmNfcGFnZQk9IGJsb2NrX3N5bmNfcGFnZSwKIAkucHJlcGFyZV93cml0ZQk9IGZhdF9wcmVwYXJlX3dyaXRlLAotCS5jb21taXRfd3JpdGUJPSBnZW5lcmljX2NvbW1pdF93cml0ZSwKKwkuY29tbWl0X3dyaXRlCT0gZmF0X2NvbW1pdF93cml0ZSwKIAkuYm1hcAkJPSBfZmF0X2JtYXAKIH07CiAKQEAgLTI4Nyw5ICszMDAsOSBAQAogCWlub2RlLT5pX2Jsa3NpemUgPSBzYmktPmNsdXN0ZXJfc2l6ZTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAoKGlub2RlLT5pX3NpemUgKyAoc2JpLT5jbHVzdGVyX3NpemUgLSAxKSkKIAkJCSAgICYgfigobG9mZl90KXNiaS0+Y2x1c3Rlcl9zaXplIC0gMSkpID4+IDk7Ci0JaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfc2VjID0KKwlpbm9kZS0+aV9tdGltZS50dl9zZWMgPQogCQlkYXRlX2RvczJ1bml4KGxlMTZfdG9fY3B1KGRlLT50aW1lKSwgbGUxNl90b19jcHUoZGUtPmRhdGUpKTsKLQlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IDA7CisJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJaWYgKHNiaS0+b3B0aW9ucy5pc3ZmYXQpIHsKIAkJaW50IHNlY3MgPSBkZS0+Y3RpbWVfY3MgLyAxMDA7CiAJCWludCBjc2VjcyA9IGRlLT5jdGltZV9jcyAlIDEwMDsKQEAgLTI5Nyw4ICszMTAsMTEgQEAKIAkJCWRhdGVfZG9zMnVuaXgobGUxNl90b19jcHUoZGUtPmN0aW1lKSwKIAkJCQkgICAgICBsZTE2X3RvX2NwdShkZS0+Y2RhdGUpKSArIHNlY3M7CiAJCWlub2RlLT5pX2N0aW1lLnR2X25zZWMgPSBjc2VjcyAqIDEwMDAwMDAwOworCQlpbm9kZS0+aV9hdGltZS50dl9zZWMgPQorCQkJZGF0ZV9kb3MydW5peChsZTE2X3RvX2NwdSgwKSwgbGUxNl90b19jcHUoZGUtPmFkYXRlKSk7CisJCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSAwOwogCX0gZWxzZQotCQlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lOworCQlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwMCw3ICs1MTYsOSBAQAogCXJhd19lbnRyeS0+c3RhcnRoaSA9IGNwdV90b19sZTE2KE1TRE9TX0koaW5vZGUpLT5pX2xvZ3N0YXJ0ID4+IDE2KTsKIAlmYXRfZGF0ZV91bml4MmRvcyhpbm9kZS0+aV9tdGltZS50dl9zZWMsICZyYXdfZW50cnktPnRpbWUsICZyYXdfZW50cnktPmRhdGUpOwogCWlmIChzYmktPm9wdGlvbnMuaXN2ZmF0KSB7CisJCV9fbGUxNiBhdGltZTsKIAkJZmF0X2RhdGVfdW5peDJkb3MoaW5vZGUtPmlfY3RpbWUudHZfc2VjLCZyYXdfZW50cnktPmN0aW1lLCZyYXdfZW50cnktPmNkYXRlKTsKKwkJZmF0X2RhdGVfdW5peDJkb3MoaW5vZGUtPmlfYXRpbWUudHZfc2VjLCZhdGltZSwmcmF3X2VudHJ5LT5hZGF0ZSk7CiAJCXJhd19lbnRyeS0+Y3RpbWVfY3MgPSAoaW5vZGUtPmlfY3RpbWUudHZfc2VjICYgMSkgKiAxMDAgKwogCQkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyAvIDEwMDAwMDAwOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCAyMTI3YTdiLi5mZDA2NmIyIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC02OSwxMyArNjksOSBAQAogCiBzdGF0aWMgdm9pZCBfX2ZyZWVfZmR0YWJsZShzdHJ1Y3QgZmR0YWJsZSAqZmR0KQogewotCWludCBmZHNldF9zaXplLCBmZGFycmF5X3NpemU7Ci0KLQlmZHNldF9zaXplID0gZmR0LT5tYXhfZmRzZXQgLyA4OwotCWZkYXJyYXlfc2l6ZSA9IGZkdC0+bWF4X2ZkcyAqIHNpemVvZihzdHJ1Y3QgZmlsZSAqKTsKLQlmcmVlX2Zkc2V0KGZkdC0+b3Blbl9mZHMsIGZkc2V0X3NpemUpOwotCWZyZWVfZmRzZXQoZmR0LT5jbG9zZV9vbl9leGVjLCBmZHNldF9zaXplKTsKLQlmcmVlX2ZkX2FycmF5KGZkdC0+ZmQsIGZkYXJyYXlfc2l6ZSk7CisJZnJlZV9mZHNldChmZHQtPm9wZW5fZmRzLCBmZHQtPm1heF9mZHNldCk7CisJZnJlZV9mZHNldChmZHQtPmNsb3NlX29uX2V4ZWMsIGZkdC0+bWF4X2Zkc2V0KTsKKwlmcmVlX2ZkX2FycmF5KGZkdC0+ZmQsIGZkdC0+bWF4X2Zkcyk7CiAJa2ZyZWUoZmR0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggYzJjMDliNC4uZjdkYWE1ZiAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC0xMjQsNiArMTI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTIyMDUsNiArMjIwNiw3IEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCWogPSAwOworCXJjdV9yZWFkX2xvY2soKTsKIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwpAQCAtMjIyMiw2ICsyMjI0LDcgQEAKIAkJCXNldCA+Pj0gMTsKIAkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiBFWFBPUlRfU1lNQk9MKHN0ZWFsX2xvY2tzKTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDIxZDg1ZjEuLjA0M2Q1ODcgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIG91dDoKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dAogCQkgICAgICYmIG5kICYmIG5kLT5kZW50cnkgJiYgbmQtPmRlbnRyeS0+ZF9pbm9kZSkpCi0JCWF1ZGl0X2lub2RlKG5hbWUsIG5kLT5kZW50cnktPmRfaW5vZGUpOworCQlhdWRpdF9pbm9kZShuYW1lLCBuZC0+ZGVudHJ5LT5kX2lub2RlLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cHJvYy5jIGIvZnMvbmZzZC9uZnM0cHJvYy5jCmluZGV4IGUwOGVkYzEuLjM2MWI0MDAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHByb2MuYworKysgYi9mcy9uZnNkL25mczRwcm9jLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1uZnNkNF9vcGVuKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKQorbmZzZDRfb3BlbihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfb3BlbiAqb3Blbiwgc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcikKIHsKIAlpbnQgc3RhdHVzOwogCWRwcmludGsoIk5GU0Q6IG5mc2Q0X29wZW4gZmlsZW5hbWUgJS4qcyBvcF9zdGF0ZW93bmVyICVwXG4iLApAQCAtMjM4LDggKzIzOCwxMCBAQAogCSAqLwogCXN0YXR1cyA9IG5mc2Q0X3Byb2Nlc3Nfb3BlbjIocnFzdHAsIGN1cnJlbnRfZmgsIG9wZW4pOwogb3V0OgotCWlmIChvcGVuLT5vcF9zdGF0ZW93bmVyKQorCWlmIChvcGVuLT5vcF9zdGF0ZW93bmVyKSB7CiAJCW5mczRfZ2V0X3N0YXRlb3duZXIob3Blbi0+b3Bfc3RhdGVvd25lcik7CisJCSpyZXBsYXlfb3duZXIgPSBvcGVuLT5vcF9zdGF0ZW93bmVyOworCX0KIAluZnM0X3VubG9ja19zdGF0ZSgpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC04MDksOCArODExLDcgQEAKIAkJCW9wLT5zdGF0dXMgPSBuZnNkNF9hY2Nlc3MocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5hY2Nlc3MpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1BfQ0xPU0U6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfY2xvc2UocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5jbG9zZSk7Ci0JCQlyZXBsYXlfb3duZXIgPSBvcC0+dS5jbG9zZS5jbF9zdGF0ZW93bmVyOworCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2Nsb3NlKHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUuY2xvc2UsICZyZXBsYXlfb3duZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1BfQ09NTUlUOgogCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2NvbW1pdChycXN0cCwgY3VycmVudF9maCwgJm9wLT51LmNvbW1pdCk7CkBAIC04MzEsMTUgKzgzMiwxMyBAQAogCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2xpbmsocnFzdHAsIGN1cnJlbnRfZmgsIHNhdmVfZmgsICZvcC0+dS5saW5rKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QX0xPQ0s6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfbG9jayhycXN0cCwgY3VycmVudF9maCwgJm9wLT51LmxvY2spOwotCQkJcmVwbGF5X293bmVyID0gb3AtPnUubG9jay5sa19zdGF0ZW93bmVyOworCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2xvY2socnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5sb2NrLCAmcmVwbGF5X293bmVyKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QX0xPQ0tUOgogCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2xvY2t0KHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUubG9ja3QpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1BfTE9DS1U6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfbG9ja3UocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5sb2NrdSk7Ci0JCQlyZXBsYXlfb3duZXIgPSBvcC0+dS5sb2NrdS5sdV9zdGF0ZW93bmVyOworCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2xvY2t1KHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUubG9ja3UsICZyZXBsYXlfb3duZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1BfTE9PS1VQOgogCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2xvb2t1cChycXN0cCwgY3VycmVudF9maCwgJm9wLT51Lmxvb2t1cCk7CkBAIC04NTMsMTYgKzg1MiwxMyBAQAogCQkJCW9wLT5zdGF0dXMgPSBuZnNfb2s7CiAJCQlicmVhazsKIAkJY2FzZSBPUF9PUEVOOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X29wZW4ocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5vcGVuKTsKLQkJCXJlcGxheV9vd25lciA9IG9wLT51Lm9wZW4ub3Bfc3RhdGVvd25lcjsKKwkJCW9wLT5zdGF0dXMgPSBuZnNkNF9vcGVuKHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUub3BlbiwgJnJlcGxheV9vd25lcik7CiAJCQlicmVhazsKIAkJY2FzZSBPUF9PUEVOX0NPTkZJUk06Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfb3Blbl9jb25maXJtKHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUub3Blbl9jb25maXJtKTsKLQkJCXJlcGxheV9vd25lciA9IG9wLT51Lm9wZW5fY29uZmlybS5vY19zdGF0ZW93bmVyOworCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X29wZW5fY29uZmlybShycXN0cCwgY3VycmVudF9maCwgJm9wLT51Lm9wZW5fY29uZmlybSwgJnJlcGxheV9vd25lcik7CiAJCQlicmVhazsKIAkJY2FzZSBPUF9PUEVOX0RPV05HUkFERToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9vcGVuX2Rvd25ncmFkZShycXN0cCwgY3VycmVudF9maCwgJm9wLT51Lm9wZW5fZG93bmdyYWRlKTsKLQkJCXJlcGxheV9vd25lciA9IG9wLT51Lm9wZW5fZG93bmdyYWRlLm9kX3N0YXRlb3duZXI7CisJCQlvcC0+c3RhdHVzID0gbmZzZDRfb3Blbl9kb3duZ3JhZGUocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5vcGVuX2Rvd25ncmFkZSwgJnJlcGxheV9vd25lcik7CiAJCQlicmVhazsKIAkJY2FzZSBPUF9QVVRGSDoKIAkJCW9wLT5zdGF0dXMgPSBuZnNkNF9wdXRmaChycXN0cCwgY3VycmVudF9maCwgJm9wLT51LnB1dGZoKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IGI4M2Y4ZmIuLjZiYmVmZDAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtNjI0LDcgKzYyNCw3IEBACiAJY2ItPmNiX2lkZW50ID0gc2UtPnNlX2NhbGxiYWNrX2lkZW50OwogCXJldHVybjsKIG91dF9lcnI6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTkZTRDogdGhpcyBjbGllbnQgKGNsaWVudGlkICUwOHgvJTA4eCkgIgorCWRwcmludGsoS0VSTl9JTkZPICJORlNEOiB0aGlzIGNsaWVudCAoY2xpZW50aWQgJTA4eC8lMDh4KSAiCiAJCSJ3aWxsIG5vdCByZWNlaXZlIGRlbGVnYXRpb25zXG4iLAogCQljbHAtPmNsX2NsaWVudGlkLmNsX2Jvb3QsIGNscC0+Y2xfY2xpZW50aWQuY2xfaWQpOwogCkBAIC02NzgsMTMgKzY3OCwxMiBAQAogCWludCAJCQlzdGF0dXM7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgZG5hbWVbSEVYRElSX0xFTl07CiAJCi0Jc3RhdHVzID0gbmZzZXJyX2ludmFsOwogCWlmICghY2hlY2tfbmFtZShjbG5hbWUpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIG5mc2Vycl9pbnZhbDsKIAogCXN0YXR1cyA9IG5mczRfbWFrZV9yZWNfY2xpZG5hbWUoZG5hbWUsICZjbG5hbWUpOwogCWlmIChzdGF0dXMpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogCiAJICogWFhYIFRoZSBEdXBsaWNhdGUgUmVxdWVzdCBDYWNoZSAoRFJDKSBoYXMgYmVlbiBjaGVja2VkICg/PykKQEAgLTIwMTQsNyArMjAxMyw3IEBACiB7CiAJaWYgKHN0YXRlaWQtPnNpX2Jvb3QgPT0gYm9vdF90aW1lKQogCQlyZXR1cm4gMDsKLQlwcmludGsoIk5GU0Q6IHN0YWxlIHN0YXRlaWQgKCUwOHgvJTA4eC8lMDh4LyUwOHgpIVxuIiwKKwlkcHJpbnRrKCJORlNEOiBzdGFsZSBzdGF0ZWlkICglMDh4LyUwOHgvJTA4eC8lMDh4KSFcbiIsCiAJCXN0YXRlaWQtPnNpX2Jvb3QsIHN0YXRlaWQtPnNpX3N0YXRlb3duZXJpZCwgc3RhdGVpZC0+c2lfZmlsZWlkLAogCQlzdGF0ZWlkLT5zaV9nZW5lcmF0aW9uKTsKIAlyZXR1cm4gMTsKQEAgLTIyNzUsNyArMjI3NCw3IEBACiAKIGNoZWNrX3JlcGxheToKIAlpZiAoc2VxaWQgPT0gc29wLT5zb19zZXFpZCAtIDEpIHsKLQkJcHJpbnRrKCJORlNEOiBwcmVwcm9jZXNzX3NlcWlkX29wOiByZXRyYW5zbWlzc2lvbj9cbiIpOworCQlkcHJpbnRrKCJORlNEOiBwcmVwcm9jZXNzX3NlcWlkX29wOiByZXRyYW5zbWlzc2lvbj9cbiIpOwogCQkvKiBpbmRpY2F0ZSByZXBsYXkgdG8gY2FsbGluZyBmdW5jdGlvbiAqLwogCQlyZXR1cm4gTkZTRVJSX1JFUExBWV9NRTsKIAl9CkBAIC0yMjg2LDcgKzIyODUsNyBAQAogfQogCiBpbnQKLW5mc2Q0X29wZW5fY29uZmlybShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfb3Blbl9jb25maXJtICpvYykKK25mc2Q0X29wZW5fY29uZmlybShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfb3Blbl9jb25maXJtICpvYywgc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcikKIHsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcDsKQEAgLTIzMjAsOCArMjMxOSwxMCBAQAogCiAJbmZzZDRfY3JlYXRlX2NsaWRfZGlyKHNvcC0+c29fY2xpZW50KTsKIG91dDoKLQlpZiAob2MtPm9jX3N0YXRlb3duZXIpCisJaWYgKG9jLT5vY19zdGF0ZW93bmVyKSB7CiAJCW5mczRfZ2V0X3N0YXRlb3duZXIob2MtPm9jX3N0YXRlb3duZXIpOworCQkqcmVwbGF5X293bmVyID0gb2MtPm9jX3N0YXRlb3duZXI7CisJfQogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTIzNTIsNyArMjM1Myw3IEBACiB9CiAKIGludAotbmZzZDRfb3Blbl9kb3duZ3JhZGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlICpvZCkKK25mc2Q0X29wZW5fZG93bmdyYWRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZSAqb2QsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKipyZXBsYXlfb3duZXIpCiB7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHA7CkBAIC0yMzk0LDggKzIzOTUsMTAgQEAKIAltZW1jcHkoJm9kLT5vZF9zdGF0ZWlkLCAmc3RwLT5zdF9zdGF0ZWlkLCBzaXplb2Yoc3RhdGVpZF90KSk7CiAJc3RhdHVzID0gbmZzX29rOwogb3V0OgotCWlmIChvZC0+b2Rfc3RhdGVvd25lcikKKwlpZiAob2QtPm9kX3N0YXRlb3duZXIpIHsKIAkJbmZzNF9nZXRfc3RhdGVvd25lcihvZC0+b2Rfc3RhdGVvd25lcik7CisJCSpyZXBsYXlfb3duZXIgPSBvZC0+b2Rfc3RhdGVvd25lcjsKKwl9CiAJbmZzNF91bmxvY2tfc3RhdGUoKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMjQwNCw3ICsyNDA3LDcgQEAKICAqIG5mczRfdW5sb2NrX3N0YXRlKCkgY2FsbGVkIGFmdGVyIGVuY29kZQogICovCiBpbnQKLW5mc2Q0X2Nsb3NlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9jbG9zZSAqY2xvc2UpCituZnNkNF9jbG9zZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfY2xvc2UgKmNsb3NlLCBzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqcmVwbGF5X293bmVyKQogewogCWludCBzdGF0dXM7CiAJc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwOwpAQCAtMjQzMCw4ICsyNDMzLDEwIEBACiAJLyogcmVsZWFzZV9zdGF0ZV9vd25lcigpIGNhbGxzIG5mc2RfY2xvc2UoKSBpZiBuZWVkZWQgKi8KIAlyZWxlYXNlX3N0YXRlX293bmVyKHN0cCwgT1BFTl9TVEFURSk7CiBvdXQ6Ci0JaWYgKGNsb3NlLT5jbF9zdGF0ZW93bmVyKQorCWlmIChjbG9zZS0+Y2xfc3RhdGVvd25lcikgewogCQluZnM0X2dldF9zdGF0ZW93bmVyKGNsb3NlLT5jbF9zdGF0ZW93bmVyKTsKKwkJKnJlcGxheV9vd25lciA9IGNsb3NlLT5jbF9zdGF0ZW93bmVyOworCX0KIAluZnM0X3VubG9ja19zdGF0ZSgpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0yNTAwLDggKzI1MDUsNyBAQAogCQkJICAgIChsb2NhbC0+c3Rfc3RhdGVpZC5zaV9maWxlaWQgPT0gZl9pZCkpCiAJCQkJcmV0dXJuIGxvY2FsOwogCQl9Ci0JfSBlbHNlCi0JCXByaW50aygiTkZTRDogZmluZF9zdGF0ZWlkOiBFUlJPUjogbm8gc3RhdGUgZmxhZ1xuIik7CisJfQogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNjI0LDcgKzI2MjgsOSBAQAogCXNvcC0+c29faXNfb3Blbl9vd25lciA9IDA7CiAJc29wLT5zb19pZCA9IGN1cnJlbnRfb3duZXJpZCsrOwogCXNvcC0+c29fY2xpZW50ID0gY2xwOwotCXNvcC0+c29fc2VxaWQgPSBsb2NrLT5sa19uZXdfbG9ja19zZXFpZDsKKwkvKiBJdCBpcyB0aGUgb3Blbm93bmVyIHNlcWlkIHRoYXQgd2lsbCBiZSBpbmNyZW1lbnRlZCBpbiBlbmNvZGUgaW4gdGhlCisJICogY2FzZSBvZiBuZXcgbG9ja293bmVyczsgc28gaW5jcmVtZW50IHRoZSBsb2NrIHNlcWlkIG1hbnVhbGx5OiAqLworCXNvcC0+c29fc2VxaWQgPSBsb2NrLT5sa19uZXdfbG9ja19zZXFpZCArIDE7CiAJc29wLT5zb19jb25maXJtZWQgPSAxOwogCXJwID0gJnNvcC0+c29fcmVwbGF5OwogCXJwLT5ycF9zdGF0dXMgPSBORlNFUlJfU0VSVkVSRkFVTFQ7CkBAIC0yNjc2LDkgKzI2ODIsMTAgQEAKICAqICBMT0NLIG9wZXJhdGlvbiAKICAqLwogaW50Ci1uZnNkNF9sb2NrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9sb2NrICpsb2NrKQorbmZzZDRfbG9jayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfbG9jayAqbG9jaywgc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcikKIHsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpvcGVuX3NvcCA9IE5VTEw7CisJc3RydWN0IG5mczRfc3RhdGVvd25lciAqbG9ja19zb3AgPSBOVUxMOwogCXN0cnVjdCBuZnM0X3N0YXRlaWQgKmxvY2tfc3RwOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCXN0cnVjdCBmaWxlX2xvY2sgZmlsZV9sb2NrOwpAQCAtMjcwNSwxOSArMjcxMiwxOSBAQAogCQlzdHJ1Y3QgbmZzNF9maWxlICpmcDsKIAkJCiAJCXN0YXR1cyA9IG5mc2Vycl9zdGFsZV9jbGllbnRpZDsKLQkJaWYgKFNUQUxFX0NMSUVOVElEKCZsb2NrLT5sa19uZXdfY2xpZW50aWQpKSB7Ci0JCQlwcmludGsoIk5GU0Q6IG5mc2Q0X2xvY2s6IGNsaWVudGlkIGlzIHN0YWxlIVxuIik7CisJCWlmIChTVEFMRV9DTElFTlRJRCgmbG9jay0+bGtfbmV3X2NsaWVudGlkKSkKIAkJCWdvdG8gb3V0OwotCQl9CiAKIAkJLyogdmFsaWRhdGUgYW5kIHVwZGF0ZSBvcGVuIHN0YXRlaWQgYW5kIG9wZW4gc2VxaWQgKi8KIAkJc3RhdHVzID0gbmZzNF9wcmVwcm9jZXNzX3NlcWlkX29wKGN1cnJlbnRfZmgsIAogCQkJCSAgICAgICAgbG9jay0+bGtfbmV3X29wZW5fc2VxaWQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICZsb2NrLT5sa19uZXdfb3Blbl9zdGF0ZWlkLAogCQkgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GSCB8IE9QRU5fU1RBVEUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICZvcGVuX3NvcCwgJm9wZW5fc3RwLCBsb2NrKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2stPmxrX3N0YXRlb3duZXIsICZvcGVuX3N0cCwKKwkJCQkJbG9jayk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKKwkJb3Blbl9zb3AgPSBsb2NrLT5sa19zdGF0ZW93bmVyOwogCQkvKiBjcmVhdGUgbG9ja293bmVyIGFuZCBsb2NrIHN0YXRlaWQgKi8KIAkJZnAgPSBvcGVuX3N0cC0+c3RfZmlsZTsKIAkJc3RyaGFzaHZhbCA9IGxvY2tfb3duZXJzdHJfaGFzaHZhbChmcC0+ZmlfaW5vZGUsIApAQCAtMjcyNywxNiArMjczNCwxNSBAQAogCQkgKiB0aGUgc2FtZSBmaWxlLCBvciBzaG91bGQgdGhleSBqdXN0IGJlIGFsbG93ZWQgKGFuZAogCQkgKiBjcmVhdGUgbmV3IHN0YXRlaWRzKT8gKi8KIAkJc3RhdHVzID0gbmZzZXJyX3Jlc291cmNlOwotCQlpZiAoIShsb2NrLT5sa19zdGF0ZW93bmVyID0gYWxsb2NfaW5pdF9sb2NrX3N0YXRlb3duZXIoc3RyaGFzaHZhbCwgb3Blbl9zb3AtPnNvX2NsaWVudCwgb3Blbl9zdHAsIGxvY2spKSkKKwkJbG9ja19zb3AgPSBhbGxvY19pbml0X2xvY2tfc3RhdGVvd25lcihzdHJoYXNodmFsLAorCQkJCW9wZW5fc29wLT5zb19jbGllbnQsIG9wZW5fc3RwLCBsb2NrKTsKKwkJaWYgKGxvY2tfc29wID09IE5VTEwpCiAJCQlnb3RvIG91dDsKLQkJaWYgKChsb2NrX3N0cCA9IGFsbG9jX2luaXRfbG9ja19zdGF0ZWlkKGxvY2stPmxrX3N0YXRlb3duZXIsIAotCQkJCQkJZnAsIG9wZW5fc3RwKSkgPT0gTlVMTCkgewotCQkJcmVsZWFzZV9zdGF0ZW93bmVyKGxvY2stPmxrX3N0YXRlb3duZXIpOwotCQkJbG9jay0+bGtfc3RhdGVvd25lciA9IE5VTEw7CisJCWxvY2tfc3RwID0gYWxsb2NfaW5pdF9sb2NrX3N0YXRlaWQobG9ja19zb3AsIGZwLCBvcGVuX3N0cCk7CisJCWlmIChsb2NrX3N0cCA9PSBOVUxMKSB7CisJCQlyZWxlYXNlX3N0YXRlb3duZXIobG9ja19zb3ApOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJLyogYnVtcCB0aGUgb3BlbiBzZXFpZCB1c2VkIHRvIGNyZWF0ZSB0aGUgbG9jayAqLwotCQlvcGVuX3NvcC0+c29fc2VxaWQrKzsKIAl9IGVsc2UgewogCQkvKiBsb2NrIChsb2NrIG93bmVyICsgbG9jayBzdGF0ZWlkKSBhbHJlYWR5IGV4aXN0cyAqLwogCQlzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc2VxaWRfb3AoY3VycmVudF9maCwKQEAgLTI3NDYsMTIgKzI3NTIsMTMgQEAKIAkJCQkgICAgICAgJmxvY2stPmxrX3N0YXRlb3duZXIsICZsb2NrX3N0cCwgbG9jayk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKKwkJbG9ja19zb3AgPSBsb2NrLT5sa19zdGF0ZW93bmVyOwogCX0KIAkvKiBsb2NrLT5sa19zdGF0ZW93bmVyIGFuZCBsb2NrX3N0cCBoYXZlIGJlZW4gY3JlYXRlZCBvciBmb3VuZCAqLwogCWZpbHAgPSBsb2NrX3N0cC0+c3RfdmZzX2ZpbGU7CiAKIAlpZiAoKHN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgY3VycmVudF9maCwgU19JRlJFRywgTUFZX0xPQ0spKSkgewotCQlwcmludGsoIk5GU0Q6IG5mc2Q0X2xvY2s6IHBlcm1pc3Npb24gZGVuaWVkIVxuIik7CisJCWRwcmludGsoIk5GU0Q6IG5mc2Q0X2xvY2s6IHBlcm1pc3Npb24gZGVuaWVkIVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjc3Niw3ICsyNzgzLDcgQEAKIAkJCXN0YXR1cyA9IG5mc2Vycl9pbnZhbDsKIAkJZ290byBvdXQ7CiAJfQotCWZpbGVfbG9jay5mbF9vd25lciA9IChmbF9vd25lcl90KSBsb2NrLT5sa19zdGF0ZW93bmVyOworCWZpbGVfbG9jay5mbF9vd25lciA9IChmbF9vd25lcl90KWxvY2tfc29wOwogCWZpbGVfbG9jay5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCWZpbGVfbG9jay5mbF9maWxlID0gZmlscDsKIAlmaWxlX2xvY2suZmxfZmxhZ3MgPSBGTF9QT1NJWDsKQEAgLTI4MzIsMTQgKzI4MzksMTMgQEAKIAkJICogQW4gZXJyb3IgZW5jb3VudGVyZWQgYWZ0ZXIgaW5zdGFudGlhdGlvbiBvZiB0aGUgbmV3CiAJCSAqIHN0YXRlaWQgaGFzIGZvcmNlZCB1cyB0byBkZXN0cm95IGl0LgogCQkgKi8KLQkJaWYgKCFzZXFpZF9tdXRhdGluZ19lcnIoc3RhdHVzKSkKLQkJCW9wZW5fc29wLT5zb19zZXFpZC0tOwotCiAJCXJlbGVhc2Vfc3RhdGVfb3duZXIobG9ja19zdHAsIExPQ0tfU1RBVEUpOwogCX0KIG91dDoKLQlpZiAobG9jay0+bGtfc3RhdGVvd25lcikKKwlpZiAobG9jay0+bGtfc3RhdGVvd25lcikgewogCQluZnM0X2dldF9zdGF0ZW93bmVyKGxvY2stPmxrX3N0YXRlb3duZXIpOworCQkqcmVwbGF5X293bmVyID0gbG9jay0+bGtfc3RhdGVvd25lcjsKKwl9CiAJbmZzNF91bmxvY2tfc3RhdGUoKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMjg2NiwxMyArMjg3MiwxMSBAQAogCW5mczRfbG9ja19zdGF0ZSgpOwogCiAJc3RhdHVzID0gbmZzZXJyX3N0YWxlX2NsaWVudGlkOwotCWlmIChTVEFMRV9DTElFTlRJRCgmbG9ja3QtPmx0X2NsaWVudGlkKSkgewotCQlwcmludGsoIk5GU0Q6IG5mc2Q0X2xvY2t0OiBjbGllbnRpZCBpcyBzdGFsZSFcbiIpOworCWlmIChTVEFMRV9DTElFTlRJRCgmbG9ja3QtPmx0X2NsaWVudGlkKSkKIAkJZ290byBvdXQ7Ci0JfQogCiAJaWYgKChzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsIGN1cnJlbnRfZmgsIFNfSUZSRUcsIDApKSkgewotCQlwcmludGsoIk5GU0Q6IG5mc2Q0X2xvY2t0OiBmaF92ZXJpZnkoKSBmYWlsZWQhXG4iKTsKKwkJZHByaW50aygiTkZTRDogbmZzZDRfbG9ja3Q6IGZoX3ZlcmlmeSgpIGZhaWxlZCFcbiIpOwogCQlpZiAoc3RhdHVzID09IG5mc2Vycl9zeW1saW5rKQogCQkJc3RhdHVzID0gbmZzZXJyX2ludmFsOwogCQlnb3RvIG91dDsKQEAgLTI5MzAsNyArMjkzNCw3IEBACiB9CiAKIGludAotbmZzZDRfbG9ja3Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X2xvY2t1ICpsb2NrdSkKK25mc2Q0X2xvY2t1KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9sb2NrdSAqbG9ja3UsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKipyZXBsYXlfb3duZXIpCiB7CiAJc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwOwogCXN0cnVjdCBmaWxlICpmaWxwID0gTlVMTDsKQEAgLTI5NzYsNyArMjk4MCw3IEBACiAJaWYgKGZpbGVfbG9jay5mbF9vcHMgJiYgZmlsZV9sb2NrLmZsX29wcy0+ZmxfcmVsZWFzZV9wcml2YXRlKQogCQlmaWxlX2xvY2suZmxfb3BzLT5mbF9yZWxlYXNlX3ByaXZhdGUoJmZpbGVfbG9jayk7CiAJaWYgKHN0YXR1cykgewotCQlwcmludGsoIk5GU0Q6IG5mczRfbG9ja3U6IHBvc2l4X2xvY2tfZmlsZSBmYWlsZWQhXG4iKTsKKwkJZHByaW50aygiTkZTRDogbmZzNF9sb2NrdTogcG9zaXhfbG9ja19maWxlIGZhaWxlZCFcbiIpOwogCQlnb3RvIG91dF9uZnNlcnI7CiAJfQogCS8qCkBAIC0yOTg2LDggKzI5OTAsMTAgQEAKIAltZW1jcHkoJmxvY2t1LT5sdV9zdGF0ZWlkLCAmc3RwLT5zdF9zdGF0ZWlkLCBzaXplb2Yoc3RhdGVpZF90KSk7CiAKIG91dDoKLQlpZiAobG9ja3UtPmx1X3N0YXRlb3duZXIpCisJaWYgKGxvY2t1LT5sdV9zdGF0ZW93bmVyKSB7CiAJCW5mczRfZ2V0X3N0YXRlb3duZXIobG9ja3UtPmx1X3N0YXRlb3duZXIpOworCQkqcmVwbGF5X293bmVyID0gbG9ja3UtPmx1X3N0YXRlb3duZXI7CisJfQogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJcmV0dXJuIHN0YXR1czsKIApAQCAtMzAzNiwxMCArMzA0Miw4IEBACiAJLyogWFhYIGNoZWNrIGZvciBsZWFzZSBleHBpcmF0aW9uICovCiAKIAlzdGF0dXMgPSBuZnNlcnJfc3RhbGVfY2xpZW50aWQ7Ci0JaWYgKFNUQUxFX0NMSUVOVElEKGNsaWQpKSB7Ci0JCXByaW50aygiTkZTRDogbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXI6IGNsaWVudGlkIGlzIHN0YWxlIVxuIik7CisJaWYgKFNUQUxFX0NMSUVOVElEKGNsaWQpKQogCQlyZXR1cm4gc3RhdHVzOwotCX0KIAogCW5mczRfbG9ja19zdGF0ZSgpOwogCmRpZmYgLS1naXQgYS9mcy9udGZzL0NoYW5nZUxvZyBiL2ZzL250ZnMvQ2hhbmdlTG9nCmluZGV4IDQ5ZWFmYmQuLmM3ZTkyMzcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvQ2hhbmdlTG9nCisrKyBiL2ZzL250ZnMvQ2hhbmdlTG9nCkBAIC05Miw2ICs5Miw4IEBACiAJICBhbiBvY3RhbCBudW1iZXIgdG8gY29uZm9ybSB0byBob3cgY2htb2QoMSkgd29ya3MsIHRvby4gIFRoYW5rcyB0bwogCSAgR2l1c2VwcGUgQmlsb3R0YSBhbmQgSG9yc3Qgdm9uIEJyYW5kIGZvciBwb2ludGluZyBvdXQgdGhlIGVycm9ycyBvZgogCSAgbXkgd2F5cy4KKwktIEZpeCB2YXJpb3VzIGJ1Z3MgaW4gdGhlIHJ1bmxpc3QgbWVyZ2luZyBjb2RlLiAgKEJhc2VkIG9uIGxpYm50ZnMKKwkgIGNoYW5nZXMgYnkgUmljaGFyZCBSdXNzb24uKQogCiAyLjEuMjMgLSBJbXBsZW1lbnQgZXh0ZW5zaW9uIG9mIHJlc2lkZW50IGZpbGVzIGFuZCBtYWtlIHdyaXRpbmcgc2FmZSBhcyB3ZWxsIGFzCiAJIG1hbnkgYnVnIGZpeGVzLCBjbGVhbnVwcywgYW5kIGVuaGFuY2VtZW50cy4uLgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9hb3BzLmMgYi9mcy9udGZzL2FvcHMuYwppbmRleCBiNmNjOGNmLi41ZTgwYzA3IDEwMDY0NAotLS0gYS9mcy9udGZzL2FvcHMuYworKysgYi9mcy9udGZzL2FvcHMuYwpAQCAtNTksMzkgKzU5LDQ5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZpcnN0LCAqdG1wOwogCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBpbm9kZSAqdmk7CiAJbnRmc19pbm9kZSAqbmk7CiAJaW50IHBhZ2VfdXB0b2RhdGUgPSAxOwogCiAJcGFnZSA9IGJoLT5iX3BhZ2U7Ci0JbmkgPSBOVEZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7CisJdmkgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCW5pID0gTlRGU19JKHZpKTsKIAogCWlmIChsaWtlbHkodXB0b2RhdGUpKSB7Ci0JCXM2NCBmaWxlX29mcywgaW5pdGlhbGl6ZWRfc2l6ZTsKKwkJbG9mZl90IGlfc2l6ZTsKKwkJczY0IGZpbGVfb2ZzLCBpbml0X3NpemU7CiAKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAKIAkJZmlsZV9vZnMgPSAoKHM2NClwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArCiAJCQkJYmhfb2Zmc2V0KGJoKTsKIAkJcmVhZF9sb2NrX2lycXNhdmUoJm5pLT5zaXplX2xvY2ssIGZsYWdzKTsKLQkJaW5pdGlhbGl6ZWRfc2l6ZSA9IG5pLT5pbml0aWFsaXplZF9zaXplOworCQlpbml0X3NpemUgPSBuaS0+aW5pdGlhbGl6ZWRfc2l6ZTsKKwkJaV9zaXplID0gaV9zaXplX3JlYWQodmkpOwogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZuaS0+c2l6ZV9sb2NrLCBmbGFncyk7CisJCWlmICh1bmxpa2VseShpbml0X3NpemUgPiBpX3NpemUpKSB7CisJCQkvKiBSYWNlIHdpdGggc2hyaW5raW5nIHRydW5jYXRlLiAqLworCQkJaW5pdF9zaXplID0gaV9zaXplOworCQl9CiAJCS8qIENoZWNrIGZvciB0aGUgY3VycmVudCBidWZmZXIgaGVhZCBvdmVyZmxvd2luZy4gKi8KLQkJaWYgKGZpbGVfb2ZzICsgYmgtPmJfc2l6ZSA+IGluaXRpYWxpemVkX3NpemUpIHsKLQkJCWNoYXIgKmFkZHI7Ci0JCQlpbnQgb2ZzID0gMDsKKwkJaWYgKHVubGlrZWx5KGZpbGVfb2ZzICsgYmgtPmJfc2l6ZSA+IGluaXRfc2l6ZSkpIHsKKwkJCXU4ICprYWRkcjsKKwkJCWludCBvZnM7CiAKLQkJCWlmIChmaWxlX29mcyA8IGluaXRpYWxpemVkX3NpemUpCi0JCQkJb2ZzID0gaW5pdGlhbGl6ZWRfc2l6ZSAtIGZpbGVfb2ZzOwotCQkJYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0JJT19TUkNfSVJRKTsKLQkJCW1lbXNldChhZGRyICsgYmhfb2Zmc2V0KGJoKSArIG9mcywgMCwgYmgtPmJfc2l6ZSAtIG9mcyk7CisJCQlvZnMgPSAwOworCQkJaWYgKGZpbGVfb2ZzIDwgaW5pdF9zaXplKQorCQkJCW9mcyA9IGluaXRfc2l6ZSAtIGZpbGVfb2ZzOworCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSk7CisJCQltZW1zZXQoa2FkZHIgKyBiaF9vZmZzZXQoYmgpICsgb2ZzLCAwLAorCQkJCQliaC0+Yl9zaXplIC0gb2ZzKTsKKwkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX0JJT19TUkNfSVJRKTsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCQkJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9CSU9fU1JDX0lSUSk7CiAJCX0KIAl9IGVsc2UgewogCQljbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQlTZXRQYWdlRXJyb3IocGFnZSk7Ci0JCW50ZnNfZXJyb3IobmktPnZvbC0+c2IsICJCdWZmZXIgSS9PIGVycm9yLCBsb2dpY2FsIGJsb2NrICVsbHUuIiwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOworCQludGZzX2Vycm9yKG5pLT52b2wtPnNiLCAiQnVmZmVyIEkvTyBlcnJvciwgbG9naWNhbCBibG9jayAiCisJCQkJIjB4JWxseC4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOwogCX0KIAlmaXJzdCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0xMjQsNyArMTM0LDcgQEAKIAkJaWYgKGxpa2VseShwYWdlX3VwdG9kYXRlICYmICFQYWdlRXJyb3IocGFnZSkpKQogCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCX0gZWxzZSB7Ci0JCWNoYXIgKmFkZHI7CisJCXU4ICprYWRkcjsKIAkJdW5zaWduZWQgaW50IGksIHJlY3M7CiAJCXUzMiByZWNfc2l6ZTsKIApAQCAtMTMyLDEyICsxNDIsMTIgQEAKIAkJcmVjcyA9IFBBR0VfQ0FDSEVfU0laRSAvIHJlY19zaXplOwogCQkvKiBTaG91bGQgaGF2ZSBiZWVuIHZlcmlmaWVkIGJlZm9yZSB3ZSBnb3QgaGVyZS4uLiAqLwogCQlCVUdfT04oIXJlY3MpOwotCQlhZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fQklPX1NSQ19JUlEpOworCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0JJT19TUkNfSVJRKTsKIAkJZm9yIChpID0gMDsgaSA8IHJlY3M7IGkrKykKLQkJCXBvc3RfcmVhZF9tc3RfZml4dXAoKE5URlNfUkVDT1JEKikoYWRkciArCisJCQlwb3N0X3JlYWRfbXN0X2ZpeHVwKChOVEZTX1JFQ09SRCopKGthZGRyICsKIAkJCQkJaSAqIHJlY19zaXplKSwgcmVjX3NpemUpOworCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9CSU9fU1JDX0lSUSk7CiAJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX0JJT19TUkNfSVJRKTsKIAkJaWYgKGxpa2VseShwYWdlX3VwdG9kYXRlICYmICFQYWdlRXJyb3IocGFnZSkpKQogCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCX0KQEAgLTE2OCw4ICsxNzgsMTEgQEAKICAqLwogc3RhdGljIGludCBudGZzX3JlYWRfYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJbG9mZl90IGlfc2l6ZTsKIAlWQ04gdmNuOwogCUxDTiBsY247CisJczY0IGluaXRfc2l6ZTsKKwlzdHJ1Y3QgaW5vZGUgKnZpOwogCW50ZnNfaW5vZGUgKm5pOwogCW50ZnNfdm9sdW1lICp2b2w7CiAJcnVubGlzdF9lbGVtZW50ICpybDsKQEAgLTE4MCw3ICsxOTMsOCBAQAogCWludCBpLCBucjsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzOwogCi0JbmkgPSBOVEZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7CisJdmkgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCW5pID0gTlRGU19JKHZpKTsKIAl2b2wgPSBuaS0+dm9sOwogCiAJLyogJE1GVC8kREFUQSBtdXN0IGhhdmUgaXRzIGNvbXBsZXRlIHJ1bmxpc3QgaW4gbWVtb3J5IGF0IGFsbCB0aW1lcy4gKi8KQEAgLTE5OSwxMSArMjEzLDI4IEBACiAJYmggPSBoZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOwogCUJVR19PTighYmgpOwogCisJLyoKKwkgKiBXZSBtYXkgYmUgcmFjaW5nIHdpdGggdHJ1bmNhdGUuICBUbyBhdm9pZCBzb21lIG9mIHRoZSBwcm9ibGVtcyB3ZQorCSAqIG5vdyB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIHZhcmlvdXMgc2l6ZXMgYW5kIHVzZSB0aG9zZSBmb3IgdGhlIHdob2xlCisJICogb2YgdGhlIGZ1bmN0aW9uLiAgSW4gY2FzZSBvZiBhbiBleHRlbmRpbmcgdHJ1bmNhdGUgaXQganVzdCBtZWFucyB3ZQorCSAqIG1heSBsZWF2ZSBzb21lIGJ1ZmZlcnMgdW5tYXBwZWQgd2hpY2ggYXJlIG5vdyBhbGxvY2F0ZWQuICBUaGlzIGlzCisJICogbm90IGEgcHJvYmxlbSBzaW5jZSB0aGVzZSBidWZmZXJzIHdpbGwganVzdCBnZXQgbWFwcGVkIHdoZW4gYSB3cml0ZQorCSAqIG9jY3Vycy4gIEluIGNhc2Ugb2YgYSBzaHJpbmtpbmcgdHJ1bmNhdGUsIHdlIHdpbGwgZGV0ZWN0IHRoaXMgbGF0ZXIKKwkgKiBvbiBkdWUgdG8gdGhlIHJ1bmxpc3QgYmVpbmcgaW5jb21wbGV0ZSBhbmQgaWYgdGhlIHBhZ2UgaXMgYmVpbmcKKwkgKiBmdWxseSB0cnVuY2F0ZWQsIHRydW5jYXRlIHdpbGwgdGhyb3cgaXQgYXdheSBhcyBzb29uIGFzIHdlIHVubG9jaworCSAqIGl0IHNvIG5vIG5lZWQgdG8gd29ycnkgd2hhdCB3ZSBkbyB3aXRoIGl0LgorCSAqLwogCWlibG9jayA9IChzNjQpcGFnZS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBibG9ja3NpemVfYml0cyk7CiAJcmVhZF9sb2NrX2lycXNhdmUoJm5pLT5zaXplX2xvY2ssIGZsYWdzKTsKIAlsYmxvY2sgPSAobmktPmFsbG9jYXRlZF9zaXplICsgYmxvY2tzaXplIC0gMSkgPj4gYmxvY2tzaXplX2JpdHM7Ci0JemJsb2NrID0gKG5pLT5pbml0aWFsaXplZF9zaXplICsgYmxvY2tzaXplIC0gMSkgPj4gYmxvY2tzaXplX2JpdHM7CisJaW5pdF9zaXplID0gbmktPmluaXRpYWxpemVkX3NpemU7CisJaV9zaXplID0gaV9zaXplX3JlYWQodmkpOwogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJm5pLT5zaXplX2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoaW5pdF9zaXplID4gaV9zaXplKSkgeworCQkvKiBSYWNlIHdpdGggc2hyaW5raW5nIHRydW5jYXRlLiAqLworCQlpbml0X3NpemUgPSBpX3NpemU7CisJfQorCXpibG9jayA9IChpbml0X3NpemUgKyBibG9ja3NpemUgLSAxKSA+PiBibG9ja3NpemVfYml0czsKIAogCS8qIExvb3AgdGhyb3VnaCBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIHBhZ2UuICovCiAJcmwgPSBOVUxMOwpAQCAtMzY2LDYgKzM5Nyw4IEBACiAgKi8KIHN0YXRpYyBpbnQgbnRmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJbG9mZl90IGlfc2l6ZTsKKwlzdHJ1Y3QgaW5vZGUgKnZpOwogCW50ZnNfaW5vZGUgKm5pLCAqYmFzZV9uaTsKIAl1OCAqa2FkZHI7CiAJbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDsKQEAgLTM4NCwxNCArNDE3LDE3IEBACiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlyZXR1cm4gMDsKIAl9Ci0JbmkgPSBOVEZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7CisJdmkgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCW5pID0gTlRGU19JKHZpKTsKIAkvKgogCSAqIE9ubHkgJERBVEEgYXR0cmlidXRlcyBjYW4gYmUgZW5jcnlwdGVkIGFuZCBvbmx5IHVubmFtZWQgJERBVEEKIAkgKiBhdHRyaWJ1dGVzIGNhbiBiZSBjb21wcmVzc2VkLiAgSW5kZXggcm9vdCBjYW4gaGF2ZSB0aGUgZmxhZ3Mgc2V0IGJ1dAogCSAqIHRoaXMgbWVhbnMgdG8gY3JlYXRlIGNvbXByZXNzZWQvZW5jcnlwdGVkIGZpbGVzLCBub3QgdGhhdCB0aGUKLQkgKiBhdHRyaWJ1dGUgaXMgY29tcHJlc3NlZC9lbmNyeXB0ZWQuCisJICogYXR0cmlidXRlIGlzIGNvbXByZXNzZWQvZW5jcnlwdGVkLiAgTm90ZSB3ZSBuZWVkIHRvIGNoZWNrIGZvcgorCSAqIEFUX0lOREVYX0FMTE9DQVRJT04gc2luY2UgdGhpcyBpcyB0aGUgdHlwZSBvZiBib3RoIGRpcmVjdG9yeSBhbmQKKwkgKiBpbmRleCBpbm9kZXMuCiAJICovCi0JaWYgKG5pLT50eXBlICE9IEFUX0lOREVYX1JPT1QpIHsKKwlpZiAobmktPnR5cGUgIT0gQVRfSU5ERVhfQUxMT0NBVElPTikgewogCQkvKiBJZiBhdHRyaWJ1dGUgaXMgZW5jcnlwdGVkLCBkZW55IGFjY2VzcywganVzdCBsaWtlIE5UNC4gKi8KIAkJaWYgKE5Jbm9FbmNyeXB0ZWQobmkpKSB7CiAJCQlCVUdfT04obmktPnR5cGUgIT0gQVRfREFUQSk7CkBAIC00NTYsNyArNDkyLDEyIEBACiAJcmVhZF9sb2NrX2lycXNhdmUoJm5pLT5zaXplX2xvY2ssIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoYXR0cl9sZW4gPiBuaS0+aW5pdGlhbGl6ZWRfc2l6ZSkpCiAJCWF0dHJfbGVuID0gbmktPmluaXRpYWxpemVkX3NpemU7CisJaV9zaXplID0gaV9zaXplX3JlYWQodmkpOwogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJm5pLT5zaXplX2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoYXR0cl9sZW4gPiBpX3NpemUpKSB7CisJCS8qIFJhY2Ugd2l0aCBzaHJpbmtpbmcgdHJ1bmNhdGUuICovCisJCWF0dHJfbGVuID0gaV9zaXplOworCX0KIAlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAkvKiBDb3B5IHRoZSBkYXRhIHRvIHRoZSBwYWdlLiAqLwogCW1lbWNweShrYWRkciwgKHU4KiljdHgtPmF0dHIgKwpAQCAtMTM0MSw5ICsxMzgyLDExIEBACiAJICogT25seSAkREFUQSBhdHRyaWJ1dGVzIGNhbiBiZSBlbmNyeXB0ZWQgYW5kIG9ubHkgdW5uYW1lZCAkREFUQQogCSAqIGF0dHJpYnV0ZXMgY2FuIGJlIGNvbXByZXNzZWQuICBJbmRleCByb290IGNhbiBoYXZlIHRoZSBmbGFncyBzZXQgYnV0CiAJICogdGhpcyBtZWFucyB0byBjcmVhdGUgY29tcHJlc3NlZC9lbmNyeXB0ZWQgZmlsZXMsIG5vdCB0aGF0IHRoZQotCSAqIGF0dHJpYnV0ZSBpcyBjb21wcmVzc2VkL2VuY3J5cHRlZC4KKwkgKiBhdHRyaWJ1dGUgaXMgY29tcHJlc3NlZC9lbmNyeXB0ZWQuICBOb3RlIHdlIG5lZWQgdG8gY2hlY2sgZm9yCisJICogQVRfSU5ERVhfQUxMT0NBVElPTiBzaW5jZSB0aGlzIGlzIHRoZSB0eXBlIG9mIGJvdGggZGlyZWN0b3J5IGFuZAorCSAqIGluZGV4IGlub2Rlcy4KIAkgKi8KLQlpZiAobmktPnR5cGUgIT0gQVRfSU5ERVhfUk9PVCkgeworCWlmIChuaS0+dHlwZSAhPSBBVF9JTkRFWF9BTExPQ0FUSU9OKSB7CiAJCS8qIElmIGZpbGUgaXMgZW5jcnlwdGVkLCBkZW55IGFjY2VzcywganVzdCBsaWtlIE5UNC4gKi8KIAkJaWYgKE5Jbm9FbmNyeXB0ZWQobmkpKSB7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTEzNzksOCArMTQyMiw4IEBACiAJCQl1bnNpZ25lZCBpbnQgb2ZzID0gaV9zaXplICYgflBBR0VfQ0FDSEVfTUFTSzsKIAkJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCQkJbWVtc2V0KGthZGRyICsgb2ZzLCAwLCBQQUdFX0NBQ0hFX1NJWkUgLSBvZnMpOwotCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAkJfQogCQkvKiBIYW5kbGUgbXN0IHByb3RlY3RlZCBhdHRyaWJ1dGVzLiAqLwogCQlpZiAoTklub01zdFByb3RlY3RlZChuaSkpCkBAIC0xNDQzLDM0ICsxNDg2LDMzIEBACiAJQlVHX09OKFBhZ2VXcml0ZWJhY2socGFnZSkpOwogCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKLQkvKgotCSAqIEhlcmUsIHdlIGRvIG5vdCBuZWVkIHRvIHplcm8gdGhlIG91dCBvZiBib3VuZHMgYXJlYSBldmVyeXRpbWUKLQkgKiBiZWNhdXNlIHRoZSBiZWxvdyBtZW1jcHkoKSBhbHJlYWR5IHRha2VzIGNhcmUgb2YgdGhlCi0JICogbW1hcC1hdC1lbmQtb2YtZmlsZSByZXF1aXJlbWVudHMuICBJZiB0aGUgZmlsZSBpcyBjb252ZXJ0ZWQgdG8gYQotCSAqIG5vbi1yZXNpZGVudCBvbmUsIHRoZW4gdGhlIGNvZGUgcGF0aCB1c2UgaXMgc3dpdGNoZWQgdG8gdGhlCi0JICogbm9uLXJlc2lkZW50IG9uZSB3aGVyZSB0aGUgemVyb2luZyBoYXBwZW5zIG9uIGVhY2ggbnRmc193cml0ZXBhZ2UoKQotCSAqIGludm9jYXRpb24uCi0JICovCiAJYXR0cl9sZW4gPSBsZTMyX3RvX2NwdShjdHgtPmF0dHItPmRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKTsKIAlpX3NpemUgPSBpX3NpemVfcmVhZCh2aSk7CiAJaWYgKHVubGlrZWx5KGF0dHJfbGVuID4gaV9zaXplKSkgeworCQkvKiBSYWNlIHdpdGggc2hyaW5raW5nIHRydW5jYXRlIG9yIGEgZmFpbGVkIHRydW5jYXRlLiAqLwogCQlhdHRyX2xlbiA9IGlfc2l6ZTsKLQkJY3R4LT5hdHRyLT5kYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCA9IGNwdV90b19sZTMyKGF0dHJfbGVuKTsKKwkJLyoKKwkJICogSWYgdGhlIHRydW5jYXRlIGZhaWxlZCwgZml4IGl0IHVwIG5vdy4gIElmIGEgY29uY3VycmVudAorCQkgKiB0cnVuY2F0ZSwgd2UgZG8gaXRzIGpvYiwgc28gaXQgZG9lcyBub3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKwkJICovCisJCWVyciA9IG50ZnNfcmVzaWRlbnRfYXR0cl92YWx1ZV9yZXNpemUoY3R4LT5tcmVjLCBjdHgtPmF0dHIsCisJCQkJYXR0cl9sZW4pOworCQkvKiBTaHJpbmtpbmcgY2Fubm90IGZhaWwuICovCisJCUJVR19PTihlcnIpOwogCX0KIAlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAkvKiBDb3B5IHRoZSBkYXRhIGZyb20gdGhlIHBhZ2UgdG8gdGhlIG1mdCByZWNvcmQuICovCiAJbWVtY3B5KCh1OCopY3R4LT5hdHRyICsKIAkJCWxlMTZfdG9fY3B1KGN0eC0+YXR0ci0+ZGF0YS5yZXNpZGVudC52YWx1ZV9vZmZzZXQpLAogCQkJa2FkZHIsIGF0dHJfbGVuKTsKLQlmbHVzaF9kY2FjaGVfbWZ0X3JlY29yZF9wYWdlKGN0eC0+bnRmc19pbm8pOwogCS8qIFplcm8gb3V0IG9mIGJvdW5kcyBhcmVhIGluIHRoZSBwYWdlIGNhY2hlIHBhZ2UuICovCiAJbWVtc2V0KGthZGRyICsgYXR0cl9sZW4sIDAsIFBBR0VfQ0FDSEVfU0laRSAtIGF0dHJfbGVuKTsKLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0KKwlmbHVzaF9kY2FjaGVfbWZ0X3JlY29yZF9wYWdlKGN0eC0+bnRmc19pbm8pOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCS8qIFdlIGFyZSBkb25lIHdpdGggdGhlIHBhZ2UuICovCiAJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCi0JLyogTWFyayB0aGUgbWZ0IHJlY29yZCBkaXJ0eSwgc28gaXQgZ2V0cyB3cml0dGVuIGJhY2suICovCisJLyogRmluYWxseSwgbWFyayB0aGUgbWZ0IHJlY29yZCBkaXJ0eSwgc28gaXQgZ2V0cyB3cml0dGVuIGJhY2suICovCiAJbWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC0+bnRmc19pbm8pOwogCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCXVubWFwX21mdF9yZWNvcmQoYmFzZV9uaSk7CmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmMgYi9mcy9udGZzL2lub2RlLmMKaW5kZXggZGM0YmJlMy4uN2VjMDQ1MSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5jCisrKyBiL2ZzL250ZnMvaW5vZGUuYwpAQCAtMTE2Niw2ICsxMTY2LDggQEAKICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtZXJybm8gb24gZXJyb3IuICBJbiB0aGUgZXJyb3IgY2FzZSwgdGhlIGlub2RlIHdpbGwKICAqIGhhdmUgaGFkIG1ha2VfYmFkX2lub2RlKCkgZXhlY3V0ZWQgb24gaXQuCisgKgorICogTm90ZSB0aGlzIGNhbm5vdCBiZSBjYWxsZWQgZm9yIEFUX0lOREVYX0FMTE9DQVRJT04uCiAgKi8KIHN0YXRpYyBpbnQgbnRmc19yZWFkX2xvY2tlZF9hdHRyX2lub2RlKHN0cnVjdCBpbm9kZSAqYmFzZV92aSwgc3RydWN0IGlub2RlICp2aSkKIHsKQEAgLTEyNDIsOCArMTI0NCw4IEBACiAJCQl9CiAJCX0KIAkJLyoKLQkJICogVGhlIGVuY3J5cHRpb24gZmxhZyBzZXQgaW4gYW4gaW5kZXggcm9vdCBqdXN0IG1lYW5zIHRvCi0JCSAqIGNvbXByZXNzIGFsbCBmaWxlcy4KKwkJICogVGhlIGNvbXByZXNzZWQvc3BhcnNlIGZsYWcgc2V0IGluIGFuIGluZGV4IHJvb3QganVzdCBtZWFucworCQkgKiB0byBjb21wcmVzcyBhbGwgZmlsZXMuCiAJCSAqLwogCQlpZiAoTklub01zdFByb3RlY3RlZChuaSkgJiYgbmktPnR5cGUgIT0gQVRfSU5ERVhfUk9PVCkgewogCQkJbnRmc19lcnJvcih2aS0+aV9zYiwgIkZvdW5kIG1zdCBwcm90ZWN0ZWQgYXR0cmlidXRlICIKQEAgLTEzMTksOCArMTMyMSw3IEBACiAJCQkJCSJ0aGUgbWFwcGluZyBwYWlycyBhcnJheS4iKTsKIAkJCWdvdG8gdW5tX2Vycl9vdXQ7CiAJCX0KLQkJaWYgKChOSW5vQ29tcHJlc3NlZChuaSkgfHwgTklub1NwYXJzZShuaSkpICYmCi0JCQkJbmktPnR5cGUgIT0gQVRfSU5ERVhfUk9PVCkgeworCQlpZiAoTklub0NvbXByZXNzZWQobmkpIHx8IE5Jbm9TcGFyc2UobmkpKSB7CiAJCQlpZiAoYS0+ZGF0YS5ub25fcmVzaWRlbnQuY29tcHJlc3Npb25fdW5pdCAhPSA0KSB7CiAJCQkJbnRmc19lcnJvcih2aS0+aV9zYiwgIkZvdW5kIG5vbnN0YW5kYXJkICIKIAkJCQkJCSJjb21wcmVzc2lvbiB1bml0ICgldSBpbnN0ZWFkICIKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWFsbG9jLmggYi9mcy9udGZzL21hbGxvYy5oCmluZGV4IDMyODhiY2MuLjAwNjk0NmUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWFsbG9jLmgKKysrIGIvZnMvbnRmcy9tYWxsb2MuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBtYWxsb2MuaCAtIE5URlMga2VybmVsIG1lbW9yeSBoYW5kbGluZy4gUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgQW50b24gQWx0YXBhcm1ha292CiAgKgogICogVGhpcyBwcm9ncmFtL2luY2x1ZGUgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuYwppbmRleCBmNWIyYWM5Li4wNjFiNWZmIDEwMDY0NAotLS0gYS9mcy9udGZzL3J1bmxpc3QuYworKysgYi9mcy9udGZzL3J1bmxpc3QuYwpAQCAtMiw3ICsyLDcgQEAKICAqIHJ1bmxpc3QuYyAtIE5URlMgcnVubGlzdCBoYW5kbGluZyBjb2RlLiAgUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdgotICogQ29weXJpZ2h0IChjKSAyMDAyIFJpY2hhcmQgUnVzc29uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBSaWNoYXJkIFJ1c3NvbgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKQEAgLTE1OCwxNyArMTU4LDIxIEBACiAJQlVHX09OKCFkc3QpOwogCUJVR19PTighc3JjKTsKIAotCWlmICgoZHN0LT5sY24gPCAwKSB8fCAoc3JjLT5sY24gPCAwKSkgeyAgIC8qIEFyZSB3ZSBtZXJnaW5nIGhvbGVzPyAqLwotCQlpZiAoZHN0LT5sY24gPT0gTENOX0hPTEUgJiYgc3JjLT5sY24gPT0gTENOX0hPTEUpCi0JCQlyZXR1cm4gVFJVRTsKKwkvKiBXZSBjYW4gbWVyZ2UgdW5tYXBwZWQgcmVnaW9ucyBldmVuIGlmIHRoZXkgYXJlIG1pc2FsaWduZWQuICovCisJaWYgKChkc3QtPmxjbiA9PSBMQ05fUkxfTk9UX01BUFBFRCkgJiYgKHNyYy0+bGNuID09IExDTl9STF9OT1RfTUFQUEVEKSkKKwkJcmV0dXJuIFRSVUU7CisJLyogSWYgdGhlIHJ1bnMgYXJlIG1pc2FsaWduZWQsIHdlIGNhbm5vdCBtZXJnZSB0aGVtLiAqLworCWlmICgoZHN0LT52Y24gKyBkc3QtPmxlbmd0aCkgIT0gc3JjLT52Y24pCiAJCXJldHVybiBGQUxTRTsKLQl9Ci0JaWYgKChkc3QtPmxjbiArIGRzdC0+bGVuZ3RoKSAhPSBzcmMtPmxjbikgLyogQXJlIHRoZSBydW5zIGNvbnRpZ3VvdXM/ICovCi0JCXJldHVybiBGQUxTRTsKLQlpZiAoKGRzdC0+dmNuICsgZHN0LT5sZW5ndGgpICE9IHNyYy0+dmNuKSAvKiBBcmUgdGhlIHJ1bnMgbWlzYWxpZ25lZD8gKi8KLQkJcmV0dXJuIEZBTFNFOwotCi0JcmV0dXJuIFRSVUU7CisJLyogSWYgYm90aCBydW5zIGFyZSBub24tc3BhcnNlIGFuZCBjb250aWd1b3VzLCB3ZSBjYW4gbWVyZ2UgdGhlbS4gKi8KKwlpZiAoKGRzdC0+bGNuID49IDApICYmIChzcmMtPmxjbiA+PSAwKSAmJgorCQkJKChkc3QtPmxjbiArIGRzdC0+bGVuZ3RoKSA9PSBzcmMtPmxjbikpCisJCXJldHVybiBUUlVFOworCS8qIElmIHdlIGFyZSBtZXJnaW5nIHR3byBob2xlcywgd2UgY2FuIG1lcmdlIHRoZW0uICovCisJaWYgKChkc3QtPmxjbiA9PSBMQ05fSE9MRSkgJiYgKHNyYy0+bGNuID09IExDTl9IT0xFKSkKKwkJcmV0dXJuIFRSVUU7CisJLyogQ2Fubm90IG1lcmdlLiAqLworCXJldHVybiBGQUxTRTsKIH0KIAogLyoqCkBAIC0yMTQsMTQgKzIxOCwxNSBAQAogc3RhdGljIGlubGluZSBydW5saXN0X2VsZW1lbnQgKm50ZnNfcmxfYXBwZW5kKHJ1bmxpc3RfZWxlbWVudCAqZHN0LAogCQlpbnQgZHNpemUsIHJ1bmxpc3RfZWxlbWVudCAqc3JjLCBpbnQgc3NpemUsIGludCBsb2MpCiB7Ci0JQk9PTCByaWdodDsKLQlpbnQgbWFnaWM7CisJQk9PTCByaWdodCA9IEZBTFNFOwkvKiBSaWdodCBlbmQgb2YgQHNyYyBuZWVkcyBtZXJnaW5nLiAqLworCWludCBtYXJrZXI7CQkvKiBFbmQgb2YgdGhlIGluc2VydGVkIHJ1bnMuICovCiAKIAlCVUdfT04oIWRzdCk7CiAJQlVHX09OKCFzcmMpOwogCiAJLyogRmlyc3QsIGNoZWNrIGlmIHRoZSByaWdodCBoYW5kIGVuZCBuZWVkcyBtZXJnaW5nLiAqLwotCXJpZ2h0ID0gbnRmc19hcmVfcmxfbWVyZ2VhYmxlKHNyYyArIHNzaXplIC0gMSwgZHN0ICsgbG9jICsgMSk7CisJaWYgKChsb2MgKyAxKSA8IGRzaXplKQorCQlyaWdodCA9IG50ZnNfYXJlX3JsX21lcmdlYWJsZShzcmMgKyBzc2l6ZSAtIDEsIGRzdCArIGxvYyArIDEpOwogCiAJLyogU3BhY2UgcmVxdWlyZWQ6IEBkc3Qgc2l6ZSArIEBzcmMgc2l6ZSwgbGVzcyBvbmUgaWYgd2UgbWVyZ2VkLiAqLwogCWRzdCA9IG50ZnNfcmxfcmVhbGxvYyhkc3QsIGRzaXplLCBkc2l6ZSArIHNzaXplIC0gcmlnaHQpOwpAQCAtMjM2LDE4ICsyNDEsMTkgQEAKIAlpZiAocmlnaHQpCiAJCV9fbnRmc19ybF9tZXJnZShzcmMgKyBzc2l6ZSAtIDEsIGRzdCArIGxvYyArIDEpOwogCi0JbWFnaWMgPSBsb2MgKyBzc2l6ZTsKKwkvKiBGaXJzdCBydW4gYWZ0ZXIgdGhlIEBzcmMgcnVucyB0aGF0IGhhdmUgYmVlbiBpbnNlcnRlZC4gKi8KKwltYXJrZXIgPSBsb2MgKyBzc2l6ZSArIDE7CiAKIAkvKiBNb3ZlIHRoZSB0YWlsIG9mIEBkc3Qgb3V0IG9mIHRoZSB3YXksIHRoZW4gY29weSBpbiBAc3JjLiAqLwotCW50ZnNfcmxfbW0oZHN0LCBtYWdpYyArIDEsIGxvYyArIDEgKyByaWdodCwgZHNpemUgLSBsb2MgLSAxIC0gcmlnaHQpOworCW50ZnNfcmxfbW0oZHN0LCBtYXJrZXIsIGxvYyArIDEgKyByaWdodCwgZHNpemUgLSAobG9jICsgMSArIHJpZ2h0KSk7CiAJbnRmc19ybF9tYyhkc3QsIGxvYyArIDEsIHNyYywgMCwgc3NpemUpOwogCiAJLyogQWRqdXN0IHRoZSBzaXplIG9mIHRoZSBwcmVjZWRpbmcgaG9sZS4gKi8KIAlkc3RbbG9jXS5sZW5ndGggPSBkc3RbbG9jICsgMV0udmNuIC0gZHN0W2xvY10udmNuOwogCiAJLyogV2UgbWF5IGhhdmUgY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlLCBzbyBmaXggdGhlIGVuZCBtYXJrZXIgKi8KLQlpZiAoZHN0W21hZ2ljICsgMV0ubGNuID09IExDTl9FTk9FTlQpCi0JCWRzdFttYWdpYyArIDFdLnZjbiA9IGRzdFttYWdpY10udmNuICsgZHN0W21hZ2ljXS5sZW5ndGg7CisJaWYgKGRzdFttYXJrZXJdLmxjbiA9PSBMQ05fRU5PRU5UKQorCQlkc3RbbWFya2VyXS52Y24gPSBkc3RbbWFya2VyIC0gMV0udmNuICsgZHN0W21hcmtlciAtIDFdLmxlbmd0aDsKIAogCXJldHVybiBkc3Q7CiB9CkBAIC0yNzksMTggKzI4NSwxNyBAQAogc3RhdGljIGlubGluZSBydW5saXN0X2VsZW1lbnQgKm50ZnNfcmxfaW5zZXJ0KHJ1bmxpc3RfZWxlbWVudCAqZHN0LAogCQlpbnQgZHNpemUsIHJ1bmxpc3RfZWxlbWVudCAqc3JjLCBpbnQgc3NpemUsIGludCBsb2MpCiB7Ci0JQk9PTCBsZWZ0ID0gRkFMU0U7Ci0JQk9PTCBkaXNjID0gRkFMU0U7CS8qIERpc2NvbnRpbnVpdHkgKi8KLQlCT09MIGhvbGUgPSBGQUxTRTsJLyogRm9sbG93aW5nIGEgaG9sZSAqLwotCWludCBtYWdpYzsKKwlCT09MIGxlZnQgPSBGQUxTRTsJLyogTGVmdCBlbmQgb2YgQHNyYyBuZWVkcyBtZXJnaW5nLiAqLworCUJPT0wgZGlzYyA9IEZBTFNFOwkvKiBEaXNjb250aW51aXR5IGJldHdlZW4gQGRzdCBhbmQgQHNyYy4gKi8KKwlpbnQgbWFya2VyOwkJLyogRW5kIG9mIHRoZSBpbnNlcnRlZCBydW5zLiAqLwogCiAJQlVHX09OKCFkc3QpOwogCUJVR19PTighc3JjKTsKIAotCS8qIGRpc2MgPT4gRGlzY29udGludWl0eSBiZXR3ZWVuIHRoZSBlbmQgb2YgQGRzdCBhbmQgdGhlIHN0YXJ0IG9mIEBzcmMuCi0JICoJICAgVGhpcyBtZWFucyB3ZSBtaWdodCBuZWVkIHRvIGluc2VydCBhIGhvbGUuCi0JICogaG9sZSA9PiBAZHN0IGVuZHMgd2l0aCBhIGhvbGUgb3IgYW4gdW5tYXBwZWQgcmVnaW9uIHdoaWNoIHdlIGNhbgotCSAqCSAgIGV4dGVuZCB0byBtYXRjaCB0aGUgZGlzY29udGludWl0eS4gKi8KKwkvKgorCSAqIGRpc2MgPT4gRGlzY29udGludWl0eSBiZXR3ZWVuIHRoZSBlbmQgb2YgQGRzdCBhbmQgdGhlIHN0YXJ0IG9mIEBzcmMuCisJICoJICAgVGhpcyBtZWFucyB3ZSBtaWdodCBuZWVkIHRvIGluc2VydCBhICJub3QgbWFwcGVkIiBydW4uCisJICovCiAJaWYgKGxvYyA9PSAwKQogCQlkaXNjID0gKHNyY1swXS52Y24gPiAwKTsKIAllbHNlIHsKQEAgLTMwMyw1OCArMzA4LDQ5IEBACiAJCQltZXJnZWRfbGVuZ3RoICs9IHNyYy0+bGVuZ3RoOwogCiAJCWRpc2MgPSAoc3JjWzBdLnZjbiA+IGRzdFtsb2MgLSAxXS52Y24gKyBtZXJnZWRfbGVuZ3RoKTsKLQkJaWYgKGRpc2MpCi0JCQlob2xlID0gKGRzdFtsb2MgLSAxXS5sY24gPT0gTENOX0hPTEUpOwogCX0KLQotCS8qIFNwYWNlIHJlcXVpcmVkOiBAZHN0IHNpemUgKyBAc3JjIHNpemUsIGxlc3Mgb25lIGlmIHdlIG1lcmdlZCwgcGx1cwotCSAqIG9uZSBpZiB0aGVyZSB3YXMgYSBkaXNjb250aW51aXR5LCBsZXNzIG9uZSBmb3IgYSB0cmFpbGluZyBob2xlLiAqLwotCWRzdCA9IG50ZnNfcmxfcmVhbGxvYyhkc3QsIGRzaXplLCBkc2l6ZSArIHNzaXplIC0gbGVmdCArIGRpc2MgLSBob2xlKTsKKwkvKgorCSAqIFNwYWNlIHJlcXVpcmVkOiBAZHN0IHNpemUgKyBAc3JjIHNpemUsIGxlc3Mgb25lIGlmIHdlIG1lcmdlZCwgcGx1cworCSAqIG9uZSBpZiB0aGVyZSB3YXMgYSBkaXNjb250aW51aXR5LgorCSAqLworCWRzdCA9IG50ZnNfcmxfcmVhbGxvYyhkc3QsIGRzaXplLCBkc2l6ZSArIHNzaXplIC0gbGVmdCArIGRpc2MpOwogCWlmIChJU19FUlIoZHN0KSkKIAkJcmV0dXJuIGRzdDsKIAkvKgogCSAqIFdlIGFyZSBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgZnJvbSBoZXJlIHNvIGNhbiBzdGFydCBtb2RpZnlpbmcgdGhlCiAJICogb3JpZ2luYWwgcnVubGlzdC4KIAkgKi8KLQogCWlmIChsZWZ0KQogCQlfX250ZnNfcmxfbWVyZ2UoZHN0ICsgbG9jIC0gMSwgc3JjKTsKLQotCW1hZ2ljID0gbG9jICsgc3NpemUgLSBsZWZ0ICsgZGlzYyAtIGhvbGU7CisJLyoKKwkgKiBGaXJzdCBydW4gYWZ0ZXIgdGhlIEBzcmMgcnVucyB0aGF0IGhhdmUgYmVlbiBpbnNlcnRlZC4KKwkgKiBOb21pbmFsbHksICBAbWFya2VyIGVxdWFscyBAbG9jICsgQHNzaXplLCBpLmUuIGxvY2F0aW9uICsgbnVtYmVyIG9mCisJICogcnVucyBpbiBAc3JjLiAgSG93ZXZlciwgaWYgQGxlZnQsIHRoZW4gdGhlIGZpcnN0IHJ1biBpbiBAc3JjIGhhcworCSAqIGJlZW4gbWVyZ2VkIHdpdGggb25lIGluIEBkc3QuICBBbmQgaWYgQGRpc2MsIHRoZW4gQGRzdCBhbmQgQHNyYyBkbworCSAqIG5vdCBtZWV0IGFuZCB3ZSBuZWVkIGFuIGV4dHJhIHJ1biB0byBmaWxsIHRoZSBnYXAuCisJICovCisJbWFya2VyID0gbG9jICsgc3NpemUgLSBsZWZ0ICsgZGlzYzsKIAogCS8qIE1vdmUgdGhlIHRhaWwgb2YgQGRzdCBvdXQgb2YgdGhlIHdheSwgdGhlbiBjb3B5IGluIEBzcmMuICovCi0JbnRmc19ybF9tbShkc3QsIG1hZ2ljLCBsb2MsIGRzaXplIC0gbG9jKTsKLQludGZzX3JsX21jKGRzdCwgbG9jICsgZGlzYyAtIGhvbGUsIHNyYywgbGVmdCwgc3NpemUgLSBsZWZ0KTsKKwludGZzX3JsX21tKGRzdCwgbWFya2VyLCBsb2MsIGRzaXplIC0gbG9jKTsKKwludGZzX3JsX21jKGRzdCwgbG9jICsgZGlzYywgc3JjLCBsZWZ0LCBzc2l6ZSAtIGxlZnQpOwogCi0JLyogQWRqdXN0IHRoZSBWQ04gb2YgdGhlIGxhc3QgcnVuIC4uLiAqLwotCWlmIChkc3RbbWFnaWNdLmxjbiA8PSBMQ05fSE9MRSkKLQkJZHN0W21hZ2ljXS52Y24gPSBkc3RbbWFnaWMgLSAxXS52Y24gKyBkc3RbbWFnaWMgLSAxXS5sZW5ndGg7CisJLyogQWRqdXN0IHRoZSBWQ04gb2YgdGhlIGZpcnN0IHJ1biBhZnRlciB0aGUgaW5zZXJ0aW9uLi4uICovCisJZHN0W21hcmtlcl0udmNuID0gZHN0W21hcmtlciAtIDFdLnZjbiArIGRzdFttYXJrZXIgLSAxXS5sZW5ndGg7CiAJLyogLi4uIGFuZCB0aGUgbGVuZ3RoLiAqLwotCWlmIChkc3RbbWFnaWNdLmxjbiA9PSBMQ05fSE9MRSB8fCBkc3RbbWFnaWNdLmxjbiA9PSBMQ05fUkxfTk9UX01BUFBFRCkKLQkJZHN0W21hZ2ljXS5sZW5ndGggPSBkc3RbbWFnaWMgKyAxXS52Y24gLSBkc3RbbWFnaWNdLnZjbjsKKwlpZiAoZHN0W21hcmtlcl0ubGNuID09IExDTl9IT0xFIHx8IGRzdFttYXJrZXJdLmxjbiA9PSBMQ05fUkxfTk9UX01BUFBFRCkKKwkJZHN0W21hcmtlcl0ubGVuZ3RoID0gZHN0W21hcmtlciArIDFdLnZjbiAtIGRzdFttYXJrZXJdLnZjbjsKIAotCS8qIFdyaXRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIHRoZXJlJ3MgYSBkaXNjb250aW51aXR5LiAqLworCS8qIFdyaXRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIHRoZXJlIGlzIGEgZGlzY29udGludWl0eS4gKi8KIAlpZiAoZGlzYykgewotCQlpZiAoaG9sZSkKLQkJCWRzdFtsb2MgLSAxXS5sZW5ndGggPSBkc3RbbG9jXS52Y24gLSBkc3RbbG9jIC0gMV0udmNuOwotCQllbHNlIHsKLQkJCWlmIChsb2MgPiAwKSB7Ci0JCQkJZHN0W2xvY10udmNuID0gZHN0W2xvYyAtIDFdLnZjbiArCi0JCQkJCQlkc3RbbG9jIC0gMV0ubGVuZ3RoOwotCQkJCWRzdFtsb2NdLmxlbmd0aCA9IGRzdFtsb2MgKyAxXS52Y24gLQotCQkJCQkJZHN0W2xvY10udmNuOwotCQkJfSBlbHNlIHsKLQkJCQlkc3RbbG9jXS52Y24gPSAwOwotCQkJCWRzdFtsb2NdLmxlbmd0aCA9IGRzdFtsb2MgKyAxXS52Y247Ci0JCQl9Ci0JCQlkc3RbbG9jXS5sY24gPSBMQ05fUkxfTk9UX01BUFBFRDsKKwkJaWYgKGxvYyA+IDApIHsKKwkJCWRzdFtsb2NdLnZjbiA9IGRzdFtsb2MgLSAxXS52Y24gKyBkc3RbbG9jIC0gMV0ubGVuZ3RoOworCQkJZHN0W2xvY10ubGVuZ3RoID0gZHN0W2xvYyArIDFdLnZjbiAtIGRzdFtsb2NdLnZjbjsKKwkJfSBlbHNlIHsKKwkJCWRzdFtsb2NdLnZjbiA9IDA7CisJCQlkc3RbbG9jXS5sZW5ndGggPSBkc3RbbG9jICsgMV0udmNuOwogCQl9Ci0KLQkJbWFnaWMgKz0gaG9sZTsKLQotCQlpZiAoZHN0W21hZ2ljXS5sY24gPT0gTENOX0VOT0VOVCkKLQkJCWRzdFttYWdpY10udmNuID0gZHN0W21hZ2ljIC0gMV0udmNuICsKLQkJCQkJZHN0W21hZ2ljIC0gMV0ubGVuZ3RoOworCQlkc3RbbG9jXS5sY24gPSBMQ05fUkxfTk9UX01BUFBFRDsKIAl9CiAJcmV0dXJuIGRzdDsKIH0KQEAgLTM4NSwyMCArMzgxLDIzIEBACiBzdGF0aWMgaW5saW5lIHJ1bmxpc3RfZWxlbWVudCAqbnRmc19ybF9yZXBsYWNlKHJ1bmxpc3RfZWxlbWVudCAqZHN0LAogCQlpbnQgZHNpemUsIHJ1bmxpc3RfZWxlbWVudCAqc3JjLCBpbnQgc3NpemUsIGludCBsb2MpCiB7Ci0JQk9PTCBsZWZ0ID0gRkFMU0U7Ci0JQk9PTCByaWdodDsKLQlpbnQgbWFnaWM7CisJQk9PTCBsZWZ0ID0gRkFMU0U7CS8qIExlZnQgZW5kIG9mIEBzcmMgbmVlZHMgbWVyZ2luZy4gKi8KKwlCT09MIHJpZ2h0ID0gRkFMU0U7CS8qIFJpZ2h0IGVuZCBvZiBAc3JjIG5lZWRzIG1lcmdpbmcuICovCisJaW50IHRhaWw7CQkvKiBTdGFydCBvZiB0YWlsIG9mIEBkc3QuICovCisJaW50IG1hcmtlcjsJCS8qIEVuZCBvZiB0aGUgaW5zZXJ0ZWQgcnVucy4gKi8KIAogCUJVR19PTighZHN0KTsKIAlCVUdfT04oIXNyYyk7CiAKLQkvKiBGaXJzdCwgbWVyZ2UgdGhlIGxlZnQgYW5kIHJpZ2h0IGVuZHMsIGlmIG5lY2Vzc2FyeS4gKi8KLQlyaWdodCA9IG50ZnNfYXJlX3JsX21lcmdlYWJsZShzcmMgKyBzc2l6ZSAtIDEsIGRzdCArIGxvYyArIDEpOworCS8qIEZpcnN0LCBzZWUgaWYgdGhlIGxlZnQgYW5kIHJpZ2h0IGVuZHMgbmVlZCBtZXJnaW5nLiAqLworCWlmICgobG9jICsgMSkgPCBkc2l6ZSkKKwkJcmlnaHQgPSBudGZzX2FyZV9ybF9tZXJnZWFibGUoc3JjICsgc3NpemUgLSAxLCBkc3QgKyBsb2MgKyAxKTsKIAlpZiAobG9jID4gMCkKIAkJbGVmdCA9IG50ZnNfYXJlX3JsX21lcmdlYWJsZShkc3QgKyBsb2MgLSAxLCBzcmMpOwotCi0JLyogQWxsb2NhdGUgc29tZSBzcGFjZS4gV2UnbGwgbmVlZCBsZXNzIGlmIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aAotCSAqIGVuZHMgd2VyZSBtZXJnZWQuICovCisJLyoKKwkgKiBBbGxvY2F0ZSBzb21lIHNwYWNlLiAgV2Ugd2lsbCBuZWVkIGxlc3MgaWYgdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoCisJICogZW5kcyBnZXQgbWVyZ2VkLgorCSAqLwogCWRzdCA9IG50ZnNfcmxfcmVhbGxvYyhkc3QsIGRzaXplLCBkc2l6ZSArIHNzaXplIC0gbGVmdCAtIHJpZ2h0KTsKIAlpZiAoSVNfRVJSKGRzdCkpCiAJCXJldHVybiBkc3Q7CkBAIC00MDYsMjEgKzQwNSwzNyBAQAogCSAqIFdlIGFyZSBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgZnJvbSBoZXJlIHNvIGNhbiBzdGFydCBtb2RpZnlpbmcgdGhlCiAJICogb3JpZ2luYWwgcnVubGlzdHMuCiAJICovCisKKwkvKiBGaXJzdCwgbWVyZ2UgdGhlIGxlZnQgYW5kIHJpZ2h0IGVuZHMsIGlmIG5lY2Vzc2FyeS4gKi8KIAlpZiAocmlnaHQpCiAJCV9fbnRmc19ybF9tZXJnZShzcmMgKyBzc2l6ZSAtIDEsIGRzdCArIGxvYyArIDEpOwogCWlmIChsZWZ0KQogCQlfX250ZnNfcmxfbWVyZ2UoZHN0ICsgbG9jIC0gMSwgc3JjKTsKLQotCS8qIEZJWE1FOiBXaGF0IGRvZXMgdGhpcyBtZWFuPyAoQUlBKSAqLwotCW1hZ2ljID0gbG9jICsgc3NpemUgLSBsZWZ0OworCS8qCisJICogT2Zmc2V0IG9mIHRoZSB0YWlsIG9mIEBkc3QuICBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIG91dCBvZiB0aGUgd2F5CisJICogdG8gbWFrZSBzcGFjZSBmb3IgdGhlIHJ1bnMgdG8gYmUgY29waWVkIGZyb20gQHNyYywgaS5lLiB0aGUgZmlyc3QKKwkgKiBydW4gb2YgdGhlIHRhaWwgb2YgQGRzdC4KKwkgKiBOb21pbmFsbHksIEB0YWlsIGVxdWFscyBAbG9jICsgMSwgaS5lLiBsb2NhdGlvbiwgc2tpcHBpbmcgdGhlCisJICogcmVwbGFjZWQgcnVuLiAgSG93ZXZlciwgaWYgQHJpZ2h0LCB0aGVuIG9uZSBvZiBAZHN0J3MgcnVucyBpcworCSAqIGFscmVhZHkgbWVyZ2VkIGludG8gQHNyYy4KKwkgKi8KKwl0YWlsID0gbG9jICsgcmlnaHQgKyAxOworCS8qCisJICogRmlyc3QgcnVuIGFmdGVyIHRoZSBAc3JjIHJ1bnMgdGhhdCBoYXZlIGJlZW4gaW5zZXJ0ZWQsIGkuZS4gd2hlcmUKKwkgKiB0aGUgdGFpbCBvZiBAZHN0IG5lZWRzIHRvIGJlIG1vdmVkIHRvLgorCSAqIE5vbWluYWxseSwgQG1hcmtlciBlcXVhbHMgQGxvYyArIEBzc2l6ZSwgaS5lLiBsb2NhdGlvbiArIG51bWJlciBvZgorCSAqIHJ1bnMgaW4gQHNyYy4gIEhvd2V2ZXIsIGlmIEBsZWZ0LCB0aGVuIHRoZSBmaXJzdCBydW4gaW4gQHNyYyBoYXMKKwkgKiBiZWVuIG1lcmdlZCB3aXRoIG9uZSBpbiBAZHN0LgorCSAqLworCW1hcmtlciA9IGxvYyArIHNzaXplIC0gbGVmdDsKIAogCS8qIE1vdmUgdGhlIHRhaWwgb2YgQGRzdCBvdXQgb2YgdGhlIHdheSwgdGhlbiBjb3B5IGluIEBzcmMuICovCi0JbnRmc19ybF9tbShkc3QsIG1hZ2ljLCBsb2MgKyByaWdodCArIDEsIGRzaXplIC0gbG9jIC0gcmlnaHQgLSAxKTsKKwludGZzX3JsX21tKGRzdCwgbWFya2VyLCB0YWlsLCBkc2l6ZSAtIHRhaWwpOwogCW50ZnNfcmxfbWMoZHN0LCBsb2MsIHNyYywgbGVmdCwgc3NpemUgLSBsZWZ0KTsKIAotCS8qIFdlIG1heSBoYXZlIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSwgc28gZml4IHRoZSBlbmQgbWFya2VyICovCi0JaWYgKGRzdFttYWdpY10ubGNuID09IExDTl9FTk9FTlQpCi0JCWRzdFttYWdpY10udmNuID0gZHN0W21hZ2ljIC0gMV0udmNuICsgZHN0W21hZ2ljIC0gMV0ubGVuZ3RoOworCS8qIFdlIG1heSBoYXZlIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSwgc28gZml4IHRoZSBlbmQgbWFya2VyLiAqLworCWlmIChkc2l6ZSAtIHRhaWwgPiAwICYmIGRzdFttYXJrZXJdLmxjbiA9PSBMQ05fRU5PRU5UKQorCQlkc3RbbWFya2VyXS52Y24gPSBkc3RbbWFya2VyIC0gMV0udmNuICsgZHN0W21hcmtlciAtIDFdLmxlbmd0aDsKIAlyZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggMmZhYzU4Yy4uZjBkOTBjZiAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtNzM4LDUyICs3MzgsMTUgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLS8qCi0gKiBOb3RlIHRoYXQgd2hpbGUgdGhlIGZsYWcgdmFsdWUgKGxvdyB0d28gYml0cykgZm9yIHN5c19vcGVuIG1lYW5zOgotICoJMDAgLSByZWFkLW9ubHkKLSAqCTAxIC0gd3JpdGUtb25seQotICoJMTAgLSByZWFkLXdyaXRlCi0gKgkxMSAtIHNwZWNpYWwKLSAqIGl0IGlzIGNoYW5nZWQgaW50bwotICoJMDAgLSBubyBwZXJtaXNzaW9ucyBuZWVkZWQKLSAqCTAxIC0gcmVhZC1wZXJtaXNzaW9uCi0gKgkxMCAtIHdyaXRlLXBlcm1pc3Npb24KLSAqCTExIC0gcmVhZC13cml0ZQotICogZm9yIHRoZSBpbnRlcm5hbCByb3V0aW5lcyAoaWUgb3Blbl9uYW1laSgpL2ZvbGxvd19saW5rKCkgZXRjKS4gMDAgaXMKLSAqIHVzZWQgYnkgc3ltbGlua3MuCi0gKi8KLXN0cnVjdCBmaWxlICpmaWxwX29wZW4oY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKQorc3RhdGljIHN0cnVjdCBmaWxlICpfX2RlbnRyeV9vcGVuKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJCWludCBmbGFncywgc3RydWN0IGZpbGUgKmYpCiB7Ci0JaW50IG5hbWVpX2ZsYWdzLCBlcnJvcjsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCi0JbmFtZWlfZmxhZ3MgPSBmbGFnczsKLQlpZiAoKG5hbWVpX2ZsYWdzKzEpICYgT19BQ0NNT0RFKQotCQluYW1laV9mbGFncysrOwotCWlmIChuYW1laV9mbGFncyAmIE9fVFJVTkMpCi0JCW5hbWVpX2ZsYWdzIHw9IDI7Ci0KLQllcnJvciA9IG9wZW5fbmFtZWkoZmlsZW5hbWUsIG5hbWVpX2ZsYWdzLCBtb2RlLCAmbmQpOwotCWlmICghZXJyb3IpCi0JCXJldHVybiBkZW50cnlfb3BlbihuZC5kZW50cnksIG5kLm1udCwgZmxhZ3MpOwotCi0JcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwotfQotCi1FWFBPUlRfU1lNQk9MKGZpbHBfb3Blbik7Ci0KLXN0cnVjdCBmaWxlICpkZW50cnlfb3BlbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGZpbGUgKiBmOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSAtRU5GSUxFOwotCWYgPSBnZXRfZW1wdHlfZmlscCgpOwotCWlmICghZikKLQkJZ290byBjbGVhbnVwX2RlbnRyeTsKIAlmLT5mX2ZsYWdzID0gZmxhZ3M7Ci0JZi0+Zl9tb2RlID0gKChmbGFncysxKSAmIE9fQUNDTU9ERSkgfCBGTU9ERV9MU0VFSyB8IEZNT0RFX1BSRUFEIHwgRk1PREVfUFdSSVRFOworCWYtPmZfbW9kZSA9ICgoZmxhZ3MrMSkgJiBPX0FDQ01PREUpIHwgRk1PREVfTFNFRUsgfAorCQkJCUZNT0RFX1BSRUFEIHwgRk1PREVfUFdSSVRFOwogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmIChmLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQllcnJvciA9IGdldF93cml0ZV9hY2Nlc3MoaW5vZGUpOwpAQCAtODI4LDEyICs3OTEsNjMgQEAKIAlmLT5mX3Zmc21udCA9IE5VTEw7CiBjbGVhbnVwX2ZpbGU6CiAJcHV0X2ZpbHAoZik7Ci1jbGVhbnVwX2RlbnRyeToKIAlkcHV0KGRlbnRyeSk7CiAJbW50cHV0KG1udCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCisvKgorICogTm90ZSB0aGF0IHdoaWxlIHRoZSBmbGFnIHZhbHVlIChsb3cgdHdvIGJpdHMpIGZvciBzeXNfb3BlbiBtZWFuczoKKyAqCTAwIC0gcmVhZC1vbmx5CisgKgkwMSAtIHdyaXRlLW9ubHkKKyAqCTEwIC0gcmVhZC13cml0ZQorICoJMTEgLSBzcGVjaWFsCisgKiBpdCBpcyBjaGFuZ2VkIGludG8KKyAqCTAwIC0gbm8gcGVybWlzc2lvbnMgbmVlZGVkCisgKgkwMSAtIHJlYWQtcGVybWlzc2lvbgorICoJMTAgLSB3cml0ZS1wZXJtaXNzaW9uCisgKgkxMSAtIHJlYWQtd3JpdGUKKyAqIGZvciB0aGUgaW50ZXJuYWwgcm91dGluZXMgKGllIG9wZW5fbmFtZWkoKS9mb2xsb3dfbGluaygpIGV0YykuIDAwIGlzCisgKiB1c2VkIGJ5IHN5bWxpbmtzLgorICovCitzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKK3sKKwlpbnQgbmFtZWlfZmxhZ3MsIGVycm9yOworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IGZpbGUgKmY7CisKKwluYW1laV9mbGFncyA9IGZsYWdzOworCWlmICgobmFtZWlfZmxhZ3MrMSkgJiBPX0FDQ01PREUpCisJCW5hbWVpX2ZsYWdzKys7CisJaWYgKG5hbWVpX2ZsYWdzICYgT19UUlVOQykKKwkJbmFtZWlfZmxhZ3MgfD0gMjsKKworCWVycm9yID0gLUVORklMRTsKKwlmID0gZ2V0X2VtcHR5X2ZpbHAoKTsKKwlpZiAoZiA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisKKwllcnJvciA9IG9wZW5fbmFtZWkoZmlsZW5hbWUsIG5hbWVpX2ZsYWdzLCBtb2RlLCAmbmQpOworCWlmICghZXJyb3IpCisJCXJldHVybiBfX2RlbnRyeV9vcGVuKG5kLmRlbnRyeSwgbmQubW50LCBmbGFncywgZik7CisKKwlwdXRfZmlscChmKTsKKwlyZXR1cm4gRVJSX1BUUihlcnJvcik7Cit9CitFWFBPUlRfU1lNQk9MKGZpbHBfb3Blbik7CisKK3N0cnVjdCBmaWxlICpkZW50cnlfb3BlbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgZmxhZ3MpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBmaWxlICpmOworCisJZXJyb3IgPSAtRU5GSUxFOworCWYgPSBnZXRfZW1wdHlfZmlscCgpOworCWlmIChmID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKworCXJldHVybiBfX2RlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBmbGFncywgZik7Cit9CiBFWFBPUlRfU1lNQk9MKGRlbnRyeV9vcGVuKTsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCBkODhkNTE4Li5kODRlZWNhIDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTE4MCwxMiArMTgxLDE0IEBACiAJCXAtPmdpZCwgcC0+ZWdpZCwgcC0+c2dpZCwgcC0+ZnNnaWQpOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAl0YXNrX2xvY2socCk7CisJcmN1X3JlYWRfbG9jaygpOwogCWlmIChwLT5maWxlcykKIAkJZmR0ID0gZmlsZXNfZmR0YWJsZShwLT5maWxlcyk7CiAJYnVmZmVyICs9IHNwcmludGYoYnVmZmVyLAogCQkiRkRTaXplOlx0JWRcbiIKIAkJIkdyb3VwczpcdCIsCiAJCWZkdCA/IGZkdC0+bWF4X2ZkcyA6IDApOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJZ3JvdXBfaW5mbyA9IHAtPmdyb3VwX2luZm87CiAJZ2V0X2dyb3VwX2luZm8oZ3JvdXBfaW5mbyk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDIzZGI0NTIuLmZiMzRmODggMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0zNDAsNiArMzQwLDUyIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorCisvKiBTYW1lIGFzIHByb2Nfcm9vdF9saW5rLCBidXQgdGhpcyBhZGRpb25hbGx5IHRyaWVzIHRvIGdldCBmcyBmcm9tIG90aGVyCisgKiB0aHJlYWRzIGluIHRoZSBncm91cCAqLworc3RhdGljIGludCBwcm9jX3Rhc2tfcm9vdF9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKipkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqKm1udCkKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKKwlpbnQgcmVzdWx0ID0gLUVOT0VOVDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlciA9IHByb2NfdGFzayhpbm9kZSk7CisKKwl0YXNrX2xvY2sobGVhZGVyKTsKKwlmcyA9IGxlYWRlci0+ZnM7CisJaWYgKGZzKSB7CisJCWF0b21pY19pbmMoJmZzLT5jb3VudCk7CisJCXRhc2tfdW5sb2NrKGxlYWRlcik7CisJfSBlbHNlIHsKKwkJLyogVHJ5IHRvIGdldCBmcyBmcm9tIG90aGVyIHRocmVhZHMgKi8KKwkJdGFza191bmxvY2sobGVhZGVyKTsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gbGVhZGVyOworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlpZiAocGlkX2FsaXZlKHRhc2spKSB7CisJCQl3aGlsZSAoKHRhc2sgPSBuZXh0X3RocmVhZCh0YXNrKSkgIT0gbGVhZGVyKSB7CisJCQkJdGFza19sb2NrKHRhc2spOworCQkJCWZzID0gdGFzay0+ZnM7CisJCQkJaWYgKGZzKSB7CisJCQkJCWF0b21pY19pbmMoJmZzLT5jb3VudCk7CisJCQkJCXRhc2tfdW5sb2NrKHRhc2spOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJdGFza191bmxvY2sodGFzayk7CisJCQl9CisJCX0KKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCX0KKworCWlmIChmcykgeworCQlyZWFkX2xvY2soJmZzLT5sb2NrKTsKKwkJKm1udCA9IG1udGdldChmcy0+cm9vdG1udCk7CisJCSpkZW50cnkgPSBkZ2V0KGZzLT5yb290KTsKKwkJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKwkJcmVzdWx0ID0gMDsKKwkJcHV0X2ZzX3N0cnVjdChmcyk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKwogI2RlZmluZSBNQVlfUFRSQUNFKHRhc2spIFwKIAkodGFzayA9PSBjdXJyZW50IHx8IFwKIAkodGFzay0+cGFyZW50ID09IGN1cnJlbnQgJiYgXApAQCAtNDcxLDE0ICs1MTcsMTQgQEAKIAogLyogcGVybWlzc2lvbiBjaGVja3MgKi8KIAotc3RhdGljIGludCBwcm9jX2NoZWNrX3Jvb3Qoc3RydWN0IGlub2RlICppbm9kZSkKKy8qIElmIHRoZSBwcm9jZXNzIGJlaW5nIHJlYWQgaXMgc2VwYXJhdGVkIGJ5IGNocm9vdCBmcm9tIHRoZSByZWFkaW5nIHByb2Nlc3MsCisgKiBkb24ndCBsZXQgdGhlIHJlYWRlciBhY2Nlc3MgdGhlIHRocmVhZHMuCisgKi8KK3N0YXRpYyBpbnQgcHJvY19jaGVja19jaHJvb3Qoc3RydWN0IGRlbnRyeSAqcm9vdCwgc3RydWN0IHZmc21vdW50ICp2ZnNtbnQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGUsICpiYXNlLCAqcm9vdDsKLQlzdHJ1Y3QgdmZzbW91bnQgKm91cl92ZnNtbnQsICp2ZnNtbnQsICptbnQ7CisJc3RydWN0IGRlbnRyeSAqZGUsICpiYXNlOworCXN0cnVjdCB2ZnNtb3VudCAqb3VyX3Zmc21udCwgKm1udDsKIAlpbnQgcmVzID0gMDsKLQotCWlmIChwcm9jX3Jvb3RfbGluayhpbm9kZSwgJnJvb3QsICZ2ZnNtbnQpKSAvKiBFd3d3Li4uICovCi0JCXJldHVybiAtRU5PRU5UOwogCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCW91cl92ZnNtbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPnJvb3RtbnQpOwogCWJhc2UgPSBkZ2V0KGN1cnJlbnQtPmZzLT5yb290KTsKQEAgLTUxMSw2ICs1NTcsMTYgQEAKIAlnb3RvIGV4aXQ7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY19jaGVja19yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGRlbnRyeSAqcm9vdDsKKwlzdHJ1Y3QgdmZzbW91bnQgKnZmc21udDsKKworCWlmIChwcm9jX3Jvb3RfbGluayhpbm9kZSwgJnJvb3QsICZ2ZnNtbnQpKSAvKiBFd3d3Li4uICovCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBwcm9jX2NoZWNrX2Nocm9vdChyb290LCB2ZnNtbnQpOworfQorCiBzdGF0aWMgaW50IHByb2NfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJaWYgKGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCkgIT0gMCkKQEAgLTUxOCw2ICs1NzQsMjAgQEAKIAlyZXR1cm4gcHJvY19jaGVja19yb290KGlub2RlKTsKIH0KIAorc3RhdGljIGludCBwcm9jX3Rhc2tfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IGRlbnRyeSAqcm9vdDsKKwlzdHJ1Y3QgdmZzbW91bnQgKnZmc21udDsKKworCWlmIChnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpICE9IDApCisJCXJldHVybiAtRUFDQ0VTOworCisJaWYgKHByb2NfdGFza19yb290X2xpbmsoaW5vZGUsICZyb290LCAmdmZzbW50KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gcHJvY19jaGVja19jaHJvb3Qocm9vdCwgdmZzbW50KTsKK30KKwogZXh0ZXJuIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wOwogc3RhdGljIGludCBtYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC0xNDE5LDcgKzE0ODksNyBAQAogCiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY190YXNrX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmxvb2t1cAkJPSBwcm9jX3Rhc2tfbG9va3VwLAotCS5wZXJtaXNzaW9uCT0gcHJvY19wZXJtaXNzaW9uLAorCS5wZXJtaXNzaW9uCT0gcHJvY190YXNrX3Blcm1pc3Npb24sCiB9OwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggYzlmMTc4Zi4uYzIwYmFiZCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtNjY3LDcgKzY2Nyw3IEBACiAJaWYgKHRoLT50X3RyYW5zX2lkKSB7CiAJCWludCBlcnI7CiAJCS8vIHVwZGF0ZSBhbnkgY2hhbmdlcyB3ZSBtYWRlIHRvIGJsayBjb3VudAotCQlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCWVyciA9CiAJCSAgICBqb3VybmFsX2VuZCh0aCwgaW5vZGUtPmlfc2IsCiAJCQkJSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAzICsgMSArCkBAIC04NTUsMTcgKzg1NSwxOCBAQAogCiAJCWlmICh0aC0+dF90cmFuc19pZCkgewogCQkJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7Ci0JCQlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsJLy8gQW5kIHVwZGF0ZSBvbi1kaXNrIG1ldGFkYXRhCisJCQkvLyB0aGlzIHNldHMgdGhlIHByb3BlciBmbGFncyBmb3IgT19TWU5DIHRvIHRyaWdnZXIgYSBjb21taXQKKwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAkJfSBlbHNlCi0JCQlpbm9kZS0+aV9zYi0+c19vcC0+ZGlydHlfaW5vZGUoaW5vZGUpOworCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKIAkJc2RfdXBkYXRlID0gMTsKIAl9CiAJaWYgKHRoLT50X3RyYW5zX2lkKSB7CiAJCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwogCQlpZiAoIXNkX3VwZGF0ZSkKLQkJCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgaW5vZGUpOworCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCXN0YXR1cyA9IGpvdXJuYWxfZW5kKHRoLCB0aC0+dF9zdXBlciwgdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR2YWwgPSBzdGF0dXM7CkBAIC0xMzIwLDcgKzEzMjEsNyBAQAogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAJCQlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oaW5vZGUpOwotCQkJcmVpc2VyZnNfdXBkYXRlX3NkKCZ0aCwgaW5vZGUpOworCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCQllcnIgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCAxKTsKIAkJCWlmIChlcnIpIHsKIAkJCQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggMWE4YTFiZi4uZDc2ZWU2YyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0yNjM5LDYgKzI2MzksMTIgQEAKIAkJfQogCQlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oaW5vZGUpOwogCQlpbm9kZS0+aV9zaXplID0gcG9zOworCQkvKgorCQkgKiB0aGlzIHdpbGwganVzdCBuZXN0IGludG8gb3VyIHRyYW5zYWN0aW9uLiAgSXQncyBpbXBvcnRhbnQKKwkJICogdG8gdXNlIG1hcmtfaW5vZGVfZGlydHkgc28gdGhlIGlub2RlIGdldHMgcHVzaGVkIGFyb3VuZCBvbiB0aGUKKwkJICogZGlydHkgbGlzdHMsIGFuZCBzbyB0aGF0IE9fU1lOQyB3b3JrcyBhcyBleHBlY3RlZAorCQkgKi8KKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCXJlaXNlcmZzX3VwZGF0ZV9zZCgmbXl0aCwgaW5vZGUpOwogCQl1cGRhdGVfc2QgPSAxOwogCQlyZXQgPSBqb3VybmFsX2VuZCgmbXl0aCwgaW5vZGUtPmlfc2IsIDEpOwpAQCAtMjY0OSwyMSArMjY1NSwxMyBAQAogCWlmICh0aCkgewogCQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAkJaWYgKCF1cGRhdGVfc2QpCi0JCQlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKKwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQlyZXQgPSByZWlzZXJmc19lbmRfcGVyc2lzdGVudF90cmFuc2FjdGlvbih0aCk7CiAJCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CiAKLQkvKiB3ZSB0ZXN0IGZvciBPX1NZTkMgaGVyZSBzbyB3ZSBjYW4gY29tbWl0IHRoZSB0cmFuc2FjdGlvbgotCSAqKiBmb3IgYW55IHBhY2tlZCB0YWlscyB0aGUgZmlsZSBtaWdodCBoYXZlIGhhZAotCSAqLwotCWlmIChmICYmIChmLT5mX2ZsYWdzICYgT19TWU5DKSkgewotCQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKLQkJcmV0ID0gcmVpc2VyZnNfY29tbWl0X2Zvcl9pbm9kZShpbm9kZSk7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7Ci0JfQogICAgICAgb3V0OgogCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCmluZGV4IDIyYjUzZTMuLjgzOTNiZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmgKQEAgLTMzOSwxMyArMzM5LDYgQEAKICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQogI2VuZGlmCiAKLSNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHN0YXJ0LCBidXNhZGRyLCBzaXplLCBwcm90KQlcCi0oewkJCQkJCQkJXAotCXZvaWQgKnZhID0gKHZvaWQgX19mb3JjZSAqKWlvcmVtYXAoYnVzYWRkciwgc2l6ZSk7CVwKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHZpcnRfdG9fcGh5cyh2YSkgPj4gUEFHRV9TSElGVDsJXAotCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwZm4sIHNpemUsIHByb3QpOwkJXAotfSkKLQogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGZuLCBzaXplLCBwcm90KQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwZm4sIHNpemUsIHByb3QpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKaW5kZXggNjgxYjZhNi4uNzljOTA4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKQEAgLTY0LDEwICs2NCw2IEBACiAjZGVmaW5lIE5PREVfTUFYX01FTV9TSElGVAkyNgogI2RlZmluZSBOT0RFX01BWF9NRU1fU0laRQkoMSA8PCBOT0RFX01BWF9NRU1fU0hJRlQpCiAKLSNlbHNlCi0KLSNkZWZpbmUgUEZOX1RPX05JRChhZGRyKQkoMCkKLQogI2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaAppbmRleCBkYzQ3MzVjLi40NTM1MWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oCkBAIC0zNiw2ICszNiw0IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peHAyMDAwLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhwMjAwMC1yZWdzLmgKaW5kZXggNzU2MjNmOC4uMzJhZWNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peHAyMDAwLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4cDIwMDAtcmVncy5oCkBAIC0zNzAsOCArMzcwLDYgQEAKICNkZWZpbmUgR0xPQkFMX1JFR19CQVNFCQkJKElYUDIwMDBfR0xPQkFMX1JFR19WSVJUX0JBU0UgKyAweDBhMDApCiAjZGVmaW5lIEdMT0JBTF9SRUcoeCkJCQkodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKEdMT0JBTF9SRUdfQkFTRSB8ICh4KSkKIAotI2RlZmluZSBJWFAyMDAwX1BST0RfSUQJCQlHTE9CQUxfUkVHKDB4MDApCi0KICNkZWZpbmUgSVhQMjAwMF9NQUpfUFJPRF9UWVBFX01BU0sJMHgwMDFGMDAwMAogI2RlZmluZSBJWFAyMDAwX01BSl9QUk9EX1RZUEVfSVhQMjAwMAkweDAwMDAwMDAwCiAjZGVmaW5lIElYUDIwMDBfTUlOX1BST0RfVFlQRV9NQVNLIAkweDAwMDBGRjAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmgKaW5kZXggYzBjYWYzZS4uYWJkY2Y1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGxhdGZvcm0uaApAQCAtMzEsMjAgKzMxLDI0IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBQaWNrdXAgbG9jYWxfaXJxXyBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGl4cDIwMDBfcmVnX3dyaXRlKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnJlZywgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgaXhwMjAwMF9yZWdfd3JpdGUodm9sYXRpbGUgdm9pZCAqcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGR1bW15OworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqcmVnID0gdmFsOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilyZWcpID0gdmFsOwogCWJhcnJpZXIoKTsKLQlkdW1teSA9ICpyZWc7CisJZHVtbXkgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcmVnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAjZWxzZQotI2RlZmluZQlpeHAyMDAwX3JlZ193cml0ZShyZWcsIHZhbCkgKCpyZWcgPSB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgaXhwMjAwMF9yZWdfd3JpdGUodm9sYXRpbGUgdm9pZCAqcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcmVnKSA9IHZhbDsKK30KICNlbmRpZgkvKiBJWERQMjQwMCB8fCBJWERQMjQwMSAqLworI2RlZmluZSBpeHAyMDAwX3JlZ19yZWFkKHJlZykJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilyZWcpKQogCiAvKgogICogQm9hcmRzIG1heSBtdWx0aXBsZXggZGlmZmVyZW50IGRldmljZXMgb24gdGhlIDJuZCBjaGFubmVsIG9mIApAQCAtODQsNyArODgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGl4cDIwMDBfaGFzX2Jyb2tlbl9zbG93cG9ydCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgaWQgPSAqSVhQMjAwMF9QUk9EX0lEOworCXVuc2lnbmVkIGxvbmcgaWQgPSAqSVhQMjAwMF9QUk9EVUNUX0lEOwogCXVuc2lnbmVkIGxvbmcgaWRfcHJvZCA9IGlkICYgKElYUDIwMDBfTUFKX1BST0RfVFlQRV9NQVNLIHwKIAkJCQkgICAgICBJWFAyMDAwX01JTl9QUk9EX1RZUEVfTUFTSyk7CiAJcmV0dXJuICgoKGlkX3Byb2QgPT0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L21lbW9yeS5oCmluZGV4IDdlMmZlYTMuLmM2NTBlNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaApAQCAtODUsMTAgKzg1LDYgQEAKICAgICAgICAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIDB4MDFmZmZmZmYpID4+IFBBR0VfU0hJRlQpCiAjIGVuZGlmCiAKLSNlbHNlCi0KLSMgZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCmluZGV4IDg0ZjgxZTMuLmVmMzJkNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaApAQCAtODYsNiArODYsNSBAQAogCiAjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDE1MTAgKi8KIAotI2RlZmluZSBQSFlTX1RPX05JRChhZGRyKSAoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYWtpdGEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9ha2l0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMWZiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYWtpdGEuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogSGFyZHdhcmUgc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIFNMLUMxMDAwIChBa2l0YSkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUmljaGFyZCBQdXJkaWUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisvKiBBa2l0YSBJTyBFeHBhbmRlciBHUElPcyAqLworCisjZGVmaW5lIEFLSVRBX0lPRVhQX1JFU0VSVkVEXzcgICAgICAoMSA8PCA3KQorI2RlZmluZSBBS0lUQV9JT0VYUF9JUl9PTiAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgQUtJVEFfSU9FWFBfQUtJTl9QVUxMVVAgICAgICgxIDw8IDUpCisjZGVmaW5lIEFLSVRBX0lPRVhQX0JBQ0tMSUdIVF9DT05UICAoMSA8PCA0KQorI2RlZmluZSBBS0lUQV9JT0VYUF9CQUNLTElHSFRfT04gICAgKDEgPDwgMykKKyNkZWZpbmUgQUtJVEFfSU9FWFBfTUlDX0JJQVMgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIEFLSVRBX0lPRVhQX1JFU0VSVkVEXzEgICAgICAoMSA8PCAxKQorI2RlZmluZSBBS0lUQV9JT0VYUF9SRVNFUlZFRF8wICAgICAgKDEgPDwgMCkKKworLyogRGlyZWN0aW9uIEJpdGZpZWxkICAwPW91dHB1dCAgMT1pbnB1dCAqLworI2RlZmluZSBBS0lUQV9JT0VYUF9JT19ESVIJMAorLyogRGVmYXVsdCBWYWx1ZXMgKi8KKyNkZWZpbmUgQUtJVEFfSU9FWFBfSU9fT1VUCShBS0lUQV9JT0VYUF9JUl9PTiB8IEFLSVRBX0lPRVhQX0FLSU5fUFVMTFVQKQorCit2b2lkIGFraXRhX3NldF9pb2V4cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgYml0bWFzayk7Cit2b2lkIGFraXRhX3Jlc2V0X2lvZXhwKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBiaXRtYXNrKTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2NvcmdpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvY29yZ2kuaAppbmRleCA0YjdhYTBiLi5lNTU0Y2FhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvY29yZ2kuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvY29yZ2kuaApAQCAtMTA2LDE3ICsxMDYsNSBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29yZ2lzc3BfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29yZ2lmYl9kZXZpY2U7CiAKLS8qCi0gKiBFeHRlcm5hbCBGdW5jdGlvbnMKLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29yZ2lfc3NwX2Fkczc4NDZfcHV0Z2V0KHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29yZ2lfc3NwX2Fkczc4NDZfZ2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgY29yZ2lfc3NwX2Fkczc4NDZfcHV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1leHRlcm4gdm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl9sb2NrKHZvaWQpOwotZXh0ZXJuIHZvaWQgY29yZ2lfc3NwX2Fkczc4NDZfdW5sb2NrKHZvaWQpOwotZXh0ZXJuIHZvaWQgY29yZ2lfc3NwX2xjZHRnX3NlbmQgKHVuc2lnbmVkIGNoYXIgYWRycywgdW5zaWduZWQgY2hhciBkYXRhKTsKLWV4dGVybiB2b2lkIGNvcmdpX3NzcF9ibGR1dHlfc2V0KGludCBkdXR5KTsKLWV4dGVybiBpbnQgY29yZ2lfc3NwX21heDExMTFfZ2V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX0NPUkdJX0ggICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZW1vcnkuaAppbmRleCAyMTdhODBiLi41OGJhZDk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21lbW9yeS5oCkBAIC02NywxMCArNjcsNiBAQAogI2RlZmluZSBMT0NBTF9NQVBfTlIoYWRkcikgXAogCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICYgMHgwM2ZmZmZmZikgPj4gUEFHRV9TSElGVCkKIAotI2Vsc2UKLQotI2RlZmluZSBQRk5fVE9fTklEKGFkZHIpCSgwKQotCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcG9vZGxlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcG9vZGxlLmgKaW5kZXggNThiZGE5ZC4uNmI1YWM1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3Bvb2RsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wb29kbGUuaApAQCAtMzcsMjQgKzM3LDI1IEBACiAjZGVmaW5lIFBPT0RMRV9HUElPX25TRF9ERVRFQ1QJCSg5KQogI2RlZmluZSBQT09ETEVfR1BJT19NQUlOX0JBVF9MT1cJKDEzKQogI2RlZmluZSBQT09ETEVfR1BJT19CQVRfQ09WRVIJCSgxMykKKyNkZWZpbmUgUE9PRExFX0dQSU9fVVNCX1BVTExVUAkJKDIwKQogI2RlZmluZSBQT09ETEVfR1BJT19BRENfVEVNUF9PTgkJKDIxKQogI2RlZmluZSBQT09ETEVfR1BJT19CWVBBU1NfT04JCSgzNikKICNkZWZpbmUgUE9PRExFX0dQSU9fQ0hSR19PTgkJKDM4KQogI2RlZmluZSBQT09ETEVfR1BJT19DSFJHX0ZVTEwJCSgxNikKIAogLyogUFhBIEdQSU9zICovCi0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19PTl9LRVkJCUlSUV9HUElPMAotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQUNfSU4JCUlSUV9HUElPMQotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fSFBfSU4JCUlSUV9HUElPNAotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQ08JCUlSUV9HUElPMTYKLSNkZWZpbmUgUE9PRExFX0lSUV9HUElPX1RQX0lOVAkJSVJRX0dQSU81Ci0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19XQUtFVVAJCUlSUV9HUElPMTEKLSNkZWZpbmUgUE9PRExFX0lSUV9HUElPX0dBX0lOVAkJSVJRX0dQSU8xMAotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQ0ZfSVJRCQlJUlFfR1BJTzE3Ci0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19DRl9DRAkJSVJRX0dQSU8xNAotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fblNEX0lOVAkJSVJRX0dQSU84Ci0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNUCUlSUV9HUElPOQotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fTUFJTl9CQVRfTE9XCUlSUV9HUElPMTMKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX09OX0tFWQkJSVJRX0dQSU8oMCkKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX0FDX0lOCQlJUlFfR1BJTygxKQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fSFBfSU4JCUlSUV9HUElPKDQpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19DTwkJSVJRX0dQSU8oMTYpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19UUF9JTlQJCUlSUV9HUElPKDUpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19XQUtFVVAJCUlSUV9HUElPKDExKQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fR0FfSU5UCQlJUlFfR1BJTygxMCkKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX0NGX0lSUQkJSVJRX0dQSU8oMTcpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19DRl9DRAkJSVJRX0dQSU8oMTQpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19uU0RfSU5UCQlJUlFfR1BJTyg4KQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVAlJUlFfR1BJTyg5KQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fTUFJTl9CQVRfTE9XCUlSUV9HUElPKDEzKQogCiAvKiBTQ09PUCBHUElPcyAqLwogI2RlZmluZSBQT09ETEVfU0NPT1BfQ0hBUkdFX09OCVNDT09QX0dQQ1JfUEExMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzExZjJiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIFNoYXJwU0wgU1NQIERyaXZlcgorICovCisKK3Vuc2lnbmVkIGxvbmcgY29yZ2lfc3NwX2Fkczc4NDZfcHV0Z2V0KHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgbG9uZyBjb3JnaV9zc3BfYWRzNzg0Nl9nZXQodm9pZCk7Cit2b2lkIGNvcmdpX3NzcF9hZHM3ODQ2X3B1dCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl9sb2NrKHZvaWQpOwordm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl91bmxvY2sodm9pZCk7Cit2b2lkIGNvcmdpX3NzcF9sY2R0Z19zZW5kICh1bnNpZ25lZCBjaGFyIGFkcnMsIHVuc2lnbmVkIGNoYXIgZGF0YSk7Cit2b2lkIGNvcmdpX3NzcF9ibGR1dHlfc2V0KGludCBkdXR5KTsKK2ludCBjb3JnaV9zc3BfbWF4MTExMV9nZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKKworLyoKKyAqIFNoYXJwU0wgVG91Y2hzY3JlZW4gRHJpdmVyCisgKi8KKworc3RydWN0IGNvcmdpdHNfbWFjaGluZm8geworCXVuc2lnbmVkIGxvbmcgKCpnZXRfaHN5bmNfbGVuKSh2b2lkKTsKKwl2b2lkICgqcHV0X2hzeW5jKSh2b2lkKTsKKwl2b2lkICgqd2FpdF9oc3luYykodm9pZCk7Cit9OworCisvKgorICogU2hhcnBTTCBCYWNrbGlnaHQKKyAqLworCitzdHJ1Y3QgY29yZ2libF9tYWNoaW5mbyB7CisJaW50IG1heF9pbnRlbnNpdHk7CisJdm9pZCAoKnNldF9ibF9pbnRlbnNpdHkpKGludCBpbnRlbnNpdHkpOworfTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NwaXR6LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3BpdHouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmUxZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NwaXR6LmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBIYXJkd2FyZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgU0wtQ3gwMDAgc2VyaWVzIG9mIFBEQXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQWxleGFuZGVyIFd5a2VzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUmljaGFyZCBQdXJkaWUKKyAqCisgKiBCYXNlZCBvbiBTaGFycCdzIDIuNCBrZXJuZWwgcGF0Y2hlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1BJVFpfSAorI2RlZmluZSBfX0FTTV9BUkNIX1NQSVRaX0ggIDEKKyNlbmRpZgorCisvKiBTcGl0ei9Ba2l0YSBHUElPcyAqLworCisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX0lOVCAgICAgICAgICgwKSAvKiBLZXkgSW50ZXJydXB0ICovCisjZGVmaW5lIFNQSVRaX0dQSU9fUkVTRVQgICAgICAgICAgICgxKQorI2RlZmluZSBTUElUWl9HUElPX25TRF9ERVRFQ1QgICAgICAoOSkKKyNkZWZpbmUgU1BJVFpfR1BJT19UUF9JTlQgICAgICAgICAgKDExKSAvKiBUb3VjaCBQYW5lbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU1BJVFpfR1BJT19BS19JTlQgICAgICAgICAgKDEzKSAvKiBSZW1vdGUgQ29udHJvbCAqLworI2RlZmluZSBTUElUWl9HUElPX0FEUzc4NDZfQ1MgICAgICAoMTQpCisjZGVmaW5lIFNQSVRaX0dQSU9fU1lOQyAgICAgICAgICAgICgxNikKKyNkZWZpbmUgU1BJVFpfR1BJT19NQVgxMTExX0NTICAgICAgKDIwKQorI2RlZmluZSBTUElUWl9HUElPX0ZBVEFMX0JBVCAgICAgICAoMjEpCisjZGVmaW5lIFNQSVRaX0dQSU9fSFNZTkMgICAgICAgICAgICgyMikKKyNkZWZpbmUgU1BJVFpfR1BJT19uU0RfQ0xLICAgICAgICAgKDMyKQorI2RlZmluZSBTUElUWl9HUElPX1VTQl9ERVZJQ0UgICAgICAoMzUpCisjZGVmaW5lIFNQSVRaX0dQSU9fVVNCX0hPU1QgICAgICAgICgzNykKKyNkZWZpbmUgU1BJVFpfR1BJT19VU0JfQ09OTkVDVCAgICAgKDQxKQorI2RlZmluZSBTUElUWl9HUElPX0xDRENPTl9DUyAgICAgICAoNTMpCisjZGVmaW5lIFNQSVRaX0dQSU9fblBDRSAgICAgICAgICAgICg1NCkKKyNkZWZpbmUgU1BJVFpfR1BJT19uU0RfV1AgICAgICAgICAgKDgxKQorI2RlZmluZSBTUElUWl9HUElPX09OX1JFU0VUICAgICAgICAoODkpCisjZGVmaW5lIFNQSVRaX0dQSU9fQkFUX0NPVkVSICAgICAgICg5MCkKKyNkZWZpbmUgU1BJVFpfR1BJT19DRl9DRCAgICAgICAgICAgKDk0KQorI2RlZmluZSBTUElUWl9HUElPX09OX0tFWSAgICAgICAgICAoOTUpCisjZGVmaW5lIFNQSVRaX0dQSU9fU1dBICAgICAgICAgICAgICg5NykKKyNkZWZpbmUgU1BJVFpfR1BJT19TV0IgICAgICAgICAgICAgKDk2KQorI2RlZmluZSBTUElUWl9HUElPX0NIUkdfRlVMTCAgICAgICAoMTAxKQorI2RlZmluZSBTUElUWl9HUElPX0NPICAgICAgICAgICAgICAoMTAxKQorI2RlZmluZSBTUElUWl9HUElPX0NGX0lSUSAgICAgICAgICAoMTA1KQorI2RlZmluZSBTUElUWl9HUElPX0FDX0lOICAgICAgICAgICAoMTE1KQorI2RlZmluZSBTUElUWl9HUElPX0hQX0lOICAgICAgICAgICAoMTE2KQorCisvKiBTcGl0eiBPbmx5IEdQSU9zICovCisKKyNkZWZpbmUgU1BJVFpfR1BJT19DRjJfSVJRICAgICAgICAgKDEwNikgLyogQ0Ygc2xvdDEgUmVhZHkgKi8KKyNkZWZpbmUgU1BJVFpfR1BJT19DRjJfQ0QgICAgICAgICAgKDkzKQorCisKKy8qIFNwaXR6L0FraXRhIEtleWJvYXJkIERlZmluaXRpb25zICovCisKKyNkZWZpbmUgU1BJVFpfS0VZX1NUUk9CRV9OVU0gICAgICAgICAoMTEpCisjZGVmaW5lIFNQSVRaX0tFWV9TRU5TRV9OVU0gICAgICAgICAgKDcpCisjZGVmaW5lIFNQSVRaX0dQSU9fRzBfU1RST0JFX0JJVCAgICAgMHgwZjgwMDAwMAorI2RlZmluZSBTUElUWl9HUElPX0cxX1NUUk9CRV9CSVQgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgU1BJVFpfR1BJT19HMl9TVFJPQkVfQklUICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFNQSVRaX0dQSU9fRzNfU1RST0JFX0JJVCAgICAgMHgwMDA0MTg4MAorI2RlZmluZSBTUElUWl9HUElPX0cwX1NFTlNFX0JJVCAgICAgIDB4MDAwMjEwMDAKKyNkZWZpbmUgU1BJVFpfR1BJT19HMV9TRU5TRV9CSVQgICAgICAweDAwMDAwMGQ0CisjZGVmaW5lIFNQSVRaX0dQSU9fRzJfU0VOU0VfQklUICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBTUElUWl9HUElPX0czX1NFTlNFX0JJVCAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBTUElUWl9HUElPX0tFWV9TVFJPQkUwICAgICAgIDg4CisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NUUk9CRTEgICAgICAgMjMKKyNkZWZpbmUgU1BJVFpfR1BJT19LRVlfU1RST0JFMiAgICAgICAyNAorI2RlZmluZSBTUElUWl9HUElPX0tFWV9TVFJPQkUzICAgICAgIDI1CisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NUUk9CRTQgICAgICAgMjYKKyNkZWZpbmUgU1BJVFpfR1BJT19LRVlfU1RST0JFNSAgICAgICAyNworI2RlZmluZSBTUElUWl9HUElPX0tFWV9TVFJPQkU2ICAgICAgIDUyCisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NUUk9CRTcgICAgICAgMTAzCisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NUUk9CRTggICAgICAgMTA3CisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NUUk9CRTkgICAgICAgMTA4CisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NUUk9CRTEwICAgICAgMTE0CisKKyNkZWZpbmUgU1BJVFpfR1BJT19LRVlfU0VOU0UwICAgICAgICAxMgorI2RlZmluZSBTUElUWl9HUElPX0tFWV9TRU5TRTEgICAgICAgIDE3CisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NFTlNFMiAgICAgICAgOTEKKyNkZWZpbmUgU1BJVFpfR1BJT19LRVlfU0VOU0UzICAgICAgICAzNAorI2RlZmluZSBTUElUWl9HUElPX0tFWV9TRU5TRTQgICAgICAgIDM2CisjZGVmaW5lIFNQSVRaX0dQSU9fS0VZX1NFTlNFNSAgICAgICAgMzgKKyNkZWZpbmUgU1BJVFpfR1BJT19LRVlfU0VOU0U2ICAgICAgICAzOQorCisKKy8qIFNwaXR6IFNjb29wIERldmljZSAoTm8uIDEpIEdQSU9zICovCisvKiBTdXNwZW5kIFN0YXRlcyBpbiBjb21tZW50cyAqLworI2RlZmluZSBTUElUWl9TQ1BfTEVEX0dSRUVOICAgICBTQ09PUF9HUENSX1BBMTEgIC8qIEtlZXAgKi8KKyNkZWZpbmUgU1BJVFpfU0NQX0pLX0IgICAgICAgICAgU0NPT1BfR1BDUl9QQTEyICAvKiBLZWVwICovCisjZGVmaW5lIFNQSVRaX1NDUF9DSFJHX09OICAgICAgIFNDT09QX0dQQ1JfUEExMyAgLyogS2VlcCAqLworI2RlZmluZSBTUElUWl9TQ1BfTVVURV9MICAgICAgICBTQ09PUF9HUENSX1BBMTQgIC8qIExvdyAqLworI2RlZmluZSBTUElUWl9TQ1BfTVVURV9SICAgICAgICBTQ09PUF9HUENSX1BBMTUgIC8qIExvdyAqLworI2RlZmluZSBTUElUWl9TQ1BfQ0ZfUE9XRVIgICAgICBTQ09PUF9HUENSX1BBMTYgIC8qIEtlZXAgKi8KKyNkZWZpbmUgU1BJVFpfU0NQX0xFRF9PUkFOR0UgICAgU0NPT1BfR1BDUl9QQTE3ICAvKiBLZWVwICovCisjZGVmaW5lIFNQSVRaX1NDUF9KS19BICAgICAgICAgIFNDT09QX0dQQ1JfUEExOCAgLyogTG93ICovCisjZGVmaW5lIFNQSVRaX1NDUF9BRENfVEVNUF9PTiAgIFNDT09QX0dQQ1JfUEExOSAgLyogTG93ICovCisKKyNkZWZpbmUgU1BJVFpfU0NQX0lPX0RJUiAgICAgIChTUElUWl9TQ1BfTEVEX0dSRUVOIHwgU1BJVFpfU0NQX0pLX0IgfCBTUElUWl9TQ1BfQ0hSR19PTiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElUWl9TQ1BfTVVURV9MIHwgU1BJVFpfU0NQX01VVEVfUiB8IFNQSVRaX1NDUF9MRURfT1JBTkdFIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSVRaX1NDUF9DRl9QT1dFUiB8IFNQSVRaX1NDUF9KS19BIHwgU1BJVFpfU0NQX0FEQ19URU1QX09OKQorI2RlZmluZSBTUElUWl9TQ1BfSU9fT1VUICAgICAgKFNQSVRaX1NDUF9DSFJHX09OIHwgU1BJVFpfU0NQX01VVEVfTCB8IFNQSVRaX1NDUF9NVVRFX1IpCisjZGVmaW5lIFNQSVRaX1NDUF9TVVNfQ0xSICAgICAoU1BJVFpfU0NQX01VVEVfTCB8IFNQSVRaX1NDUF9NVVRFX1IgfCBTUElUWl9TQ1BfSktfQSB8IFNQSVRaX1NDUF9BRENfVEVNUF9PTikKKyNkZWZpbmUgU1BJVFpfU0NQX1NVU19TRVQgICAgIDAKKworLyogU3BpdHogU2Nvb3AgRGV2aWNlIChOby4gMikgR1BJT3MgKi8KKy8qIFN1c3BlbmQgU3RhdGVzIGluIGNvbW1lbnRzICovCisjZGVmaW5lIFNQSVRaX1NDUDJfSVJfT04gICAgICAgICAgIFNDT09QX0dQQ1JfUEExMSAgLyogSGlnaCAqLworI2RlZmluZSBTUElUWl9TQ1AyX0FLSU5fUFVMTFVQICAgICBTQ09PUF9HUENSX1BBMTIgIC8qIEtlZXAgKi8KKyNkZWZpbmUgU1BJVFpfU0NQMl9SRVNFUlZFRF8xICAgICAgU0NPT1BfR1BDUl9QQTEzICAvKiBIaWdoICovCisjZGVmaW5lIFNQSVRaX1NDUDJfUkVTRVJWRURfMiAgICAgIFNDT09QX0dQQ1JfUEExNCAgLyogTG93ICovCisjZGVmaW5lIFNQSVRaX1NDUDJfUkVTRVJWRURfMyAgICAgIFNDT09QX0dQQ1JfUEExNSAgLyogTG93ICovCisjZGVmaW5lIFNQSVRaX1NDUDJfUkVTRVJWRURfNCAgICAgIFNDT09QX0dQQ1JfUEExNiAgLyogTG93ICovCisjZGVmaW5lIFNQSVRaX1NDUDJfQkFDS0xJR0hUX0NPTlQgIFNDT09QX0dQQ1JfUEExNyAgLyogTG93ICovCisjZGVmaW5lIFNQSVRaX1NDUDJfQkFDS0xJR0hUX09OICAgIFNDT09QX0dQQ1JfUEExOCAgLyogTG93ICovCisjZGVmaW5lIFNQSVRaX1NDUDJfTUlDX0JJQVMgICAgICAgIFNDT09QX0dQQ1JfUEExOSAgLyogTG93ICovCisKKyNkZWZpbmUgU1BJVFpfU0NQMl9JT19ESVIgKFNQSVRaX1NDUDJfSVJfT04gfCBTUElUWl9TQ1AyX0FLSU5fUFVMTFVQIHwgU1BJVFpfU0NQMl9SRVNFUlZFRF8xIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJVFpfU0NQMl9SRVNFUlZFRF8yIHwgU1BJVFpfU0NQMl9SRVNFUlZFRF8zIHwgU1BJVFpfU0NQMl9SRVNFUlZFRF80IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJVFpfU0NQMl9CQUNLTElHSFRfQ09OVCB8IFNQSVRaX1NDUDJfQkFDS0xJR0hUX09OIHwgU1BJVFpfU0NQMl9NSUNfQklBUykKKworI2RlZmluZSBTUElUWl9TQ1AyX0lPX09VVCAgIChTUElUWl9TQ1AyX0lSX09OIHwgU1BJVFpfU0NQMl9BS0lOX1BVTExVUCB8IFNQSVRaX1NDUDJfUkVTRVJWRURfMSkKKyNkZWZpbmUgU1BJVFpfU0NQMl9TVVNfQ0xSICAoU1BJVFpfU0NQMl9SRVNFUlZFRF8yIHwgU1BJVFpfU0NQMl9SRVNFUlZFRF8zIHwgU1BJVFpfU0NQMl9SRVNFUlZFRF80IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElUWl9TQ1AyX0JBQ0tMSUdIVF9DT05UIHwgU1BJVFpfU0NQMl9CQUNLTElHSFRfT04gfCBTUElUWl9TQ1AyX01JQ19CSUFTKQorI2RlZmluZSBTUElUWl9TQ1AyX1NVU19TRVQgIChTUElUWl9TQ1AyX0lSX09OIHwgU1BJVFpfU0NQMl9SRVNFUlZFRF8xKQorCisKKy8qIFNwaXR6IElSUSBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFNQSVRaX0lSUV9HUElPX0tFWV9JTlQgICAgICAgIElSUV9HUElPKFNQSVRaX0dQSU9fS0VZX0lOVCkKKyNkZWZpbmUgU1BJVFpfSVJRX0dQSU9fQUNfSU4gICAgICAgICAgSVJRX0dQSU8oU1BJVFpfR1BJT19BQ19JTikKKyNkZWZpbmUgU1BJVFpfSVJRX0dQSU9fQUtfSU5UICAgICAgICAgSVJRX0dQSU8oU1BJVFpfR1BJT19BS19JTlQpCisjZGVmaW5lIFNQSVRaX0lSUV9HUElPX0hQX0lOICAgICAgICAgIElSUV9HUElPKFNQSVRaX0dQSU9fSFBfSU4pCisjZGVmaW5lIFNQSVRaX0lSUV9HUElPX1RQX0lOVCAgICAgICAgIElSUV9HUElPKFNQSVRaX0dQSU9fVFBfSU5UKQorI2RlZmluZSBTUElUWl9JUlFfR1BJT19TWU5DICAgICAgICAgICBJUlFfR1BJTyhTUElUWl9HUElPX1NZTkMpCisjZGVmaW5lIFNQSVRaX0lSUV9HUElPX09OX0tFWSAgICAgICAgIElSUV9HUElPKFNQSVRaX0dQSU9fT05fS0VZKQorI2RlZmluZSBTUElUWl9JUlFfR1BJT19TV0EgICAgICAgICAgICBJUlFfR1BJTyhTUElUWl9HUElPX1NXQSkKKyNkZWZpbmUgU1BJVFpfSVJRX0dQSU9fU1dCICAgICAgICAgICAgSVJRX0dQSU8oU1BJVFpfR1BJT19TV0IpCisjZGVmaW5lIFNQSVRaX0lSUV9HUElPX0JBVF9DT1ZFUiAgICAgIElSUV9HUElPKFNQSVRaX0dQSU9fQkFUX0NPVkVSKQorI2RlZmluZSBTUElUWl9JUlFfR1BJT19GQVRBTF9CQVQgICAgICBJUlFfR1BJTyhTUElUWl9HUElPX0ZBVEFMX0JBVCkKKyNkZWZpbmUgU1BJVFpfSVJRX0dQSU9fQ08gICAgICAgICAgICAgSVJRX0dQSU8oU1BJVFpfR1BJT19DTykKKyNkZWZpbmUgU1BJVFpfSVJRX0dQSU9fQ0ZfSVJRICAgICAgICAgSVJRX0dQSU8oU1BJVFpfR1BJT19DRl9JUlEpCisjZGVmaW5lIFNQSVRaX0lSUV9HUElPX0NGX0NEICAgICAgICAgIElSUV9HUElPKFNQSVRaX0dQSU9fQ0ZfQ0QpCisjZGVmaW5lIFNQSVRaX0lSUV9HUElPX0NGMl9JUlEgICAgICAgIElSUV9HUElPKFNQSVRaX0dQSU9fQ0YyX0lSUSkKKyNkZWZpbmUgU1BJVFpfSVJRX0dQSU9fblNEX0lOVCAgICAgICAgSVJRX0dQSU8oU1BJVFpfR1BJT19uU0RfSU5UKQorI2RlZmluZSBTUElUWl9JUlFfR1BJT19uU0RfREVURUNUICAgICBJUlFfR1BJTyhTUElUWl9HUElPX25TRF9ERVRFQ1QpCisKKy8qCisgKiBTaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzCisgKi8KK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6c2Nvb3BfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpzY29vcDJfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpzc3BfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBzaGFycHNsX2NoYXJnZXJfbWFjaGluZm8gc3BpdHpfcG1fbWFjaGluZm87CisKK2V4dGVybiB2b2lkIHNwaXR6X2xjZF9wb3dlcihpbnQgb24pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCmluZGV4IDMyZDNkNWIuLjg3NDNmZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKQEAgLTk5LDEwICs5OSw2IEBACiAjZGVmaW5lIExPQ0FMX01BUF9OUihhZGRyKSBcCiAJKCgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDA3ZmZmZmZmKSA+PiBQQUdFX1NISUZUKQogCi0jZWxzZQotCi0jZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mdXRleC5oIGIvaW5jbHVkZS9hc20tYXJtL2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hcm1fdHdkLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYXJtX3R3ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWQ1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYXJtX3R3ZC5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19BU01fSEFSRFdBUkVfVFdEX0gKKyNkZWZpbmUgX19BU01fSEFSRFdBUkVfVFdEX0gKKworI2RlZmluZSBUV0RfVElNRVJfTE9BRCAJCTB4MDAKKyNkZWZpbmUgVFdEX1RJTUVSX0NPVU5URVIJCTB4MDQKKyNkZWZpbmUgVFdEX1RJTUVSX0NPTlRST0wJCTB4MDgKKyNkZWZpbmUgVFdEX1RJTUVSX0lOVFNUQVQJCTB4MEMKKworI2RlZmluZSBUV0RfV0RPR19MT0FECQkJMHgyMAorI2RlZmluZSBUV0RfV0RPR19DT1VOVEVSCQkweDI0CisjZGVmaW5lIFRXRF9XRE9HX0NPTlRST0wJCTB4MjgKKyNkZWZpbmUgVFdEX1dET0dfSU5UU1RBVAkJMHgyQworI2RlZmluZSBUV0RfV0RPR19SRVNFVFNUQVQJCTB4MzAKKyNkZWZpbmUgVFdEX1dET0dfRElTQUJMRQkJMHgzNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaAppbmRleCA1NmM2YmY0Li40ZmE5NTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oCkBAIC01MCw3ICs1MCw3IEBACiAgKi8KICNkZWZpbmUgTUFDSElORV9TVEFSVChfdHlwZSxfbmFtZSkJCVwKIGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgX19tYWNoX2Rlc2NfIyNfdHlwZQlcCi0gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5hcmNoLmluZm8iKSkpID0gewlcCisgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5hcmNoLmluZm8uaW5pdCIpKSkgPSB7CVwKIAkubnIJCT0gTUFDSF9UWVBFXyMjX3R5cGUsCVwKIAkubmFtZQkJPSBfbmFtZSwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCmluZGV4IGU0N2JlYTcuLmE4YTkzM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKQEAgLTE2MCwxMiArMTYwLDI1IEBACiAjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCQkJCQlcCiAJKCggKHBhZ2UpIC0gcGFnZV96b25lKHBhZ2UpLT56b25lX21lbV9tYXApCQlcCiAJICArIHBhZ2Vfem9uZShwYWdlKS0+em9uZV9zdGFydF9wZm4pCisKICNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkJCQkJXAogCShQRk5fVE9fTUFQQkFTRShwZm4pICsgTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfU0hJRlQpKQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKFBGTl9UT19OSUQocGZuKSA8IE1BWF9OVU1OT0RFUykKKworI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJCQkJCVwKKwkoewkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBuaWQgPSBQRk5fVE9fTklEKHBmbik7CQlcCisJCWludCB2YWxpZCA9IG5pZCA8IE1BWF9OVU1OT0RFUzsJCQlcCisJCWlmICh2YWxpZCkgewkJCQkJXAorCQkJcGdfZGF0YV90ICpub2RlID0gTk9ERV9EQVRBKG5pZCk7CVwKKwkJCXZhbGlkID0gKHBmbiAtIG5vZGUtPm5vZGVfc3RhcnRfcGZuKSA8CVwKKwkJCQlub2RlLT5ub2RlX3NwYW5uZWRfcGFnZXM7CVwKKwkJfQkJCQkJCVwKKwkJdmFsaWQ7CQkJCQkJXAorCX0pCiAKICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkJCQkJXAogCShBRERSX1RPX01BUEJBU0Uoa2FkZHIpICsgTE9DQUxfTUFQX05SKGthZGRyKSkKKwogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCShLVkFERFJfVE9fTklEKGthZGRyKSA8IE1BWF9OVU1OT0RFUykKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCmluZGV4IDQ3OGM0OWIuLjM2NmJhZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaApAQCAtNDQ1LDEyICs0NDUsOSBAQAogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQogCiAvKgotICogcmVtYXAgYSBwaHlzaWNhbCBhZGRyZXNzIGBwaHlzJyBvZiBzaXplIGBzaXplJyB3aXRoIHBhZ2UgcHJvdGVjdGlvbiBgcHJvdCcKKyAqIHJlbWFwIGEgcGh5c2ljYWwgcGFnZSBgcGZuJyBvZiBzaXplIGBzaXplJyB3aXRoIHBhZ2UgcHJvdGVjdGlvbiBgcHJvdCcKICAqIGludG8gdmlydHVhbCBhZGRyZXNzIGBmcm9tJwogICovCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLGZyb20scGh5cyxzaXplLHByb3QpIFwKLQkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgZnJvbSwgKHBoeXMpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCi0KICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSxmcm9tLHBmbixzaXplLHByb3QpIFwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgZnJvbSwgcGZuLCBzaXplLCBwcm90KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaCBiL2luY2x1ZGUvYXNtLWFybS9zZXR1cC5oCmluZGV4IGFkY2JkNzkuLmVhM2VkMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zZXR1cC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zZXR1cC5oCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlpbnQgKCpwYXJzZSkoY29uc3Qgc3RydWN0IHRhZyAqKTsKIH07CiAKLSNkZWZpbmUgX190YWcgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIudGFnbGlzdCIpKSkKKyNkZWZpbmUgX190YWcgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIudGFnbGlzdC5pbml0IikpKQogI2RlZmluZSBfX3RhZ3RhYmxlKHRhZywgZm4pIFwKIHN0YXRpYyBzdHJ1Y3QgdGFndGFibGUgX190YWd0YWJsZV8jI2ZuIF9fdGFnID0geyB0YWcsIGZuIH0KIApAQCAtMjEzLDYgKzIxMyw2IEBACiAKICNkZWZpbmUgX19lYXJseV9wYXJhbShuYW1lLGZuKQkJCQkJXAogc3RhdGljIHN0cnVjdCBlYXJseV9wYXJhbXMgX19lYXJseV8jI2ZuIF9fYXR0cmlidXRlX3VzZWRfXwlcCi1fX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiX19lYXJseV9wYXJhbSIpKSkgPSB7IG5hbWUsIGZuIH0KK19fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZWFybHlfcGFyYW0uaW5pdCIpKSkgPSB7IG5hbWUsIGZuIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9mdXRleC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaAppbmRleCA0YTBhMDBkLi5mNjAyY2Y1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oCkBAIC0yOTQsMTIgKzI5NCw5IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgogCiAvKgotICogcmVtYXAgYSBwaHlzaWNhbCBhZGRyZXNzIGBwaHlzJyBvZiBzaXplIGBzaXplJyB3aXRoIHBhZ2UgcHJvdGVjdGlvbiBgcHJvdCcKKyAqIHJlbWFwIGEgcGh5c2ljYWwgcGFnZSBgcGZuJyBvZiBzaXplIGBzaXplJyB3aXRoIHBhZ2UgcHJvdGVjdGlvbiBgcHJvdCcKICAqIGludG8gdmlydHVhbCBhZGRyZXNzIGBmcm9tJwogICovCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLGZyb20scGh5cyxzaXplLHByb3QpIFwKLQkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgZnJvbSwgKHBoeXMpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCi0KICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSxmcm9tLHBmbixzaXplLHByb3QpIFwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgZnJvbSwgcGZuLCBzaXplLCBwcm90KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1jcmlzL2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1mcnYvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKaW5kZXggZDBhOWMyZi4uNDczZmI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCkBAIC01MDAsOSArNTAwLDYgQEAKICNkZWZpbmUgUGFnZVNraXAocGFnZSkJCSgwKQogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCiAKLSNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKLQkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKLQogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAogCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9mdXRleC5oIGIvaW5jbHVkZS9hc20taDgzMDAvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaAppbmRleCA2OTA3NmViLi5mNmUyOTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcGd0YWJsZS5oCkBAIC01Miw4ICs1Miw2IEBACiAgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCiAgKi8KICNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkgICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCiAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLWkzODYvZnV0ZXguaAppbmRleCA0NGI5ZGI4Li5lN2EyNzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9mdXRleC5oCkBAIC02MSw3ICs2MSw3IEBACiAJaWYgKG9wID09IEZVVEVYX09QX1NFVCkKIAkJX19mdXRleF9hdG9taWNfb3AxKCJ4Y2hnbCAlMCwgJTIiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKIAllbHNlIHsKLSNpZm5kZWYgQ09ORklHX1g4Nl9CU1dBUAorI2lmICFkZWZpbmVkKENPTkZJR19YODZfQlNXQVApICYmICFkZWZpbmVkKENPTkZJR19VTUwpCiAJCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAzKQogCQkJcmV0ID0gLUVOT1NZUzsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAppbmRleCA0N2JjMWZmLi5kMTAxYWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaApAQCAtNDMxLDkgKzQzMSw2IEBACiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKICNlbmRpZiAvKiBDT05GSUdfRkxBVE1FTSAqLwogCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCi0KICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9mdXRleC5oIGIvaW5jbHVkZS9hc20taWE2NC9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgKaW5kZXggMmUzNGMwNi4uMzMzOWM3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgKQEAgLTQ0MywxMCArNDQzLDYgQEAKICNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJCSgocHRlX3ZhbChwdGUpIDw8IDEpID4+IDMpCiAjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCQkoKHB0ZV90KSB7ICgob2ZmKSA8PCAyKSB8IF9QQUdFX0ZJTEUgfSkKIAotLyogWFhYIGlzIHRoaXMgcmlnaHQ/ICovCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCi0KICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKaW5kZXggZmM1NDQ5Mi4uYTc5ZDFhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oCkBAIC01Nyw3ICs1Nyw5IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vZnB1Lmg+CisjaWZuZGVmIEFTTV9PRkZTRVRTX0MKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNlbmRpZgogCiAvKgogICogQmFzZS0yIGxvZ2FyaXRobSBvZiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgcGVyIHRhc2sgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKaW5kZXggY2Y0YTk1MC4uMTcxYjIyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaApAQCAtNSw3ICs1LDkgQEAKICNpZm5kZWYgX0FTTV9JQTY0X1RIUkVBRF9JTkZPX0gKICNkZWZpbmUgX0FTTV9JQTY0X1RIUkVBRF9JTkZPX0gKIAorI2lmbmRlZiBBU01fT0ZGU0VUU19DCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCkBAIC01MSw5ICs1MywxNCBAQAogCX0sCQkJCQlcCiB9CiAKKyNpZm5kZWYgQVNNX09GRlNFVFNfQwogLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KICNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCSgoc3RydWN0IHRocmVhZF9pbmZvICopICgoY2hhciAqKSBjdXJyZW50ICsgSUE2NF9UQVNLX1NJWkUpKQogI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCSgoc3RydWN0IHRocmVhZF9pbmZvICopICgoY2hhciAqKSAodHNrKSArIElBNjRfVEFTS19TSVpFKSkKKyNlbHNlCisjZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAwKQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCSgoc3RydWN0IHRocmVhZF9pbmZvICopIDApCisjZW5kaWYKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkJLyogbm90aGluZyAqLwogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1RBU0tfU1RSVUNUX0FMTE9DQVRPUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9mdXRleC5oIGIvaW5jbHVkZS9hc20tbTMyci9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKaW5kZXggZGE4MDVlOS4uMzg4ZTVlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKQEAgLTM3OCw5ICszNzgsNiBAQAogLyogTmVlZHMgdG8gYmUgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gbGludXgvbW0uaCwgYXMgaXQgaXMgYXJjaCBkZXBlbmRlbnQgKi8KICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQogCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCVwKLQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQotCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9mdXRleC5oIGIvaW5jbHVkZS9hc20tbTY4ay9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKaW5kZXggMGM4N2ZjOC4uYWRkMTI5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKQEAgLTE0MSw5ICsxNDEsNiBAQAogCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKIAotI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyLCBzaXplLCBwcm90KQkJXAotCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQotCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9mdXRleC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGd0YWJsZS5oCmluZGV4IGUyYTY5ZmYuLjAwODkzMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BndGFibGUuaApAQCAtNTYsOCArNTYsNiBAQAogICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZS4KICAqLwogI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCiAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKaW5kZXggZGJlMTNkYS4uY2JkMTY3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKQEAgLTM1OCwxNiArMzU4LDYgQEAKIGV4dGVybiBwaHlzX3QgZml4dXBfYmlncGh5c19hZGRyKHBoeXNfdCBwaHlzX2FkZHIsIHBoeXNfdCBzaXplKTsKIGV4dGVybiBpbnQgcmVtYXBfcGZuX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwogCi1zdGF0aWMgaW5saW5lIGludCBpb19yZW1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIHZhZGRyLAotCQl1bnNpZ25lZCBsb25nIHBhZGRyLAotCQl1bnNpZ25lZCBsb25nIHNpemUsCi0JCXBncHJvdF90IHByb3QpCi17Ci0JcGh5c190IHBoeXNfYWRkcl9oaWdoID0gZml4dXBfYmlncGh5c19hZGRyKHBhZGRyLCBzaXplKTsKLQlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBoeXNfYWRkcl9oaWdoID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBpb19yZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgdmFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgcGZuLApAQCAtMzc4LDggKzM2OCw2IEBACiAJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpOwogfQogI2Vsc2UKLSNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKLQkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKaW5kZXggZjAwMWJiMC4uODIwYzZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCkBAIC00OTgsOSArNDk4LDYgQEAKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAotI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyLCBzaXplLCBwcm90KQkJXAotCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQotCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9mdXRleC5oIGIvaW5jbHVkZS9hc20tcHBjL2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBwYy9pcnEuaAppbmRleCA1NTc1MjQ3Li5iZDk2NzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lycS5oCkBAIC0xMzgsNiArMTM4LDE2IEBACiAjZGVmaW5lCVNJVV9JUlE3CSgxNCkKICNkZWZpbmUJU0lVX0xFVkVMNwkoMTUpCiAKKyNkZWZpbmUgTVBDOHh4X0lOVF9GRUMxCQlTSVVfTEVWRUwxCisjZGVmaW5lIE1QQzh4eF9JTlRfRkVDMgkJU0lVX0xFVkVMMworCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDMQkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzEpCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDMgkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzIpCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDMwkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzMpCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDNAkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzQpCisjZGVmaW5lIE1QQzh4eF9JTlRfU01DMQkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NNQzEpCisjZGVmaW5lIE1QQzh4eF9JTlRfU01DMgkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NNQzIpCisKIC8qIFRoZSBpbnRlcm5hbCBpbnRlcnJ1cHRzIHdlIGNhbiBjb25maWd1cmUgYXMgd2Ugc2VlIGZpdC4KICAqIE15IHBlcnNvbmFsIHByZWZlcmVuY2UgaXMgQ1BNIGF0IGxldmVsIDIsIHdoaWNoIHB1dHMgaXQgYWJvdmUgdGhlCiAgKiBNQlggUENJL0lTQS9JREUgaW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaAppbmRleCBkYzhlNTk4Li4yMDhhMmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oCkBAIC05Nyw2ICs5NywyMiBAQAogCiBzdHJ1Y3QgcHRfcmVnczsKIAorZW51bSBwcGNfc3lzX2RldmljZXMgeworCU1QQzh4eF9DUE1fRkVDMSwKKwlNUEM4eHhfQ1BNX0ZFQzIsCisJTVBDOHh4X0NQTV9JMkMsCisJTVBDOHh4X0NQTV9TQ0MxLAorCU1QQzh4eF9DUE1fU0NDMiwKKwlNUEM4eHhfQ1BNX1NDQzMsCisJTVBDOHh4X0NQTV9TQ0M0LAorCU1QQzh4eF9DUE1fU1BJLAorCU1QQzh4eF9DUE1fTUNDMSwKKwlNUEM4eHhfQ1BNX01DQzIsCisJTVBDOHh4X0NQTV9TTUMxLAorCU1QQzh4eF9DUE1fU01DMiwKKwlNUEM4eHhfQ1BNX1VTQiwKK307CisKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogQ09ORklHXzh4eCAqLwogI2VuZGlmIC8qIF9fQ09ORklHXzh4eF9ERUZTICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oIGIvaW5jbHVkZS9hc20tcHBjL212NjR4NjAuaAppbmRleCA4MzU5MzBkLi43NWMyZmZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmgKQEAgLTExOSw2ICsxMTksMTQgQEAKIAogI2RlZmluZQlNVjY0eDYwXzY0QklUX1dJTl9DT1VOVAkJCTI0CiAKKy8qIFdhdGNoZG9nIFBsYXRmb3JtIERldmljZSwgRHJpdmVyIERhdGEgKi8KKyNkZWZpbmUJTVY2NHg2MF9XRFRfTkFNRQkJCSJ3ZHQiCisKK3N0cnVjdCBtdjY0eDYwX3dkdF9wZGF0YSB7CisJaW50CXRpbWVvdXQ7CS8qIHdhdGNoZG9nIGV4cGlyeSBpbiBzZWNvbmRzLCBkZWZhdWx0IDEwICovCisJaW50CWJ1c19jbGs7CS8qIGJ1cyBjbG9jayBpbiBNSHosIGRlZmF1bHQgMTMzICovCit9OworCiAvKgogICogRGVmaW5lIGEgc3RydWN0dXJlIHRoYXQncyB1c2VkIHRvIHBhc3MgaW4gY29uZmlnIGluZm9ybWF0aW9uIHRvIHRoZQogICogY29yZSByb3V0aW5lcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCmluZGV4IDkyZjMwYjIuLmVlZTYwMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaApAQCAtODEyLDE1ICs4MTIsNiBAQAogI2lmZGVmIENPTkZJR19QSFlTXzY0QklUCiBleHRlcm4gaW50IHJlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBmcm9tLAogCQkJdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKLXN0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCXVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJCXVuc2lnbmVkIGxvbmcgcGFkZHIsCi0JCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJcGdwcm90X3QgcHJvdCkKLXsKLQlwaHlzX2FkZHJfdCBwYWRkcjY0ID0gZml4dXBfYmlncGh5c19hZGRyKHBhZGRyLCBzaXplKTsKLQlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyNjQgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCk7Ci19CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJdW5zaWduZWQgbG9uZyB2YWRkciwKQEAgLTgzMiw4ICs4MjMsNiBAQAogCXJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHI2NCA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KTsKIH0KICNlbHNlCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmggYi9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCmluZGV4IDA0OGY3YzguLjU0OWY0NDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmgKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxhc20vbXBjODN4eC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfODV4eCkKICNpbmNsdWRlIDxhc20vbXBjODV4eC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQorI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19NUEM1Mnh4KQogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19NUEMxMFhfQlJJREdFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLXBwYy9zZWdtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMmY3NDIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3NlZ21lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1wcGMvdGxiZmx1c2guaAppbmRleCA5ODUwZjUzLi45YWZlZTRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdGxiZmx1c2guaApAQCAtNzIsNyArNzIsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlX25vaGFzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogCXsgX3RsYmllKHZtYWRkcik7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCXsgX190bGJpYSgpOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1zaC9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCmluZGV4IGVjYjkwOTUuLjBmNGJjYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKQEAgLTI3Nyw5ICsyNzcsNiBAQAogCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKIAotI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyLCBzaXplLCBwcm90KQkJXAotCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQotCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXNoNjQvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZnV0ZXguaApAQCAtMTQsNyArMTQsNyBAQAogCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKIAlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKIAlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOwotCWludCBvbGR2YWwgPSAwLCByZXQsIHRlbTsKKwlpbnQgb2xkdmFsID0gMCwgcmV0OwogCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKIAkJb3BhcmcgPSAxIDw8IG9wYXJnOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCmluZGV4IDc4YWM2YmUuLjUxZGI0MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCkBAIC00ODIsOSArNDgyLDYgQEAKICNkZWZpbmUgUGFnZVNraXAocGFnZSkJCSgwKQogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCiAKLSNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKLQkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKLQogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAogCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZWZsdXNoLmgKaW5kZXggNTFiMjZlODEuLmVkZWRkMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCkBAIC00LDEzICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0vKiBGbHVzaGluZyBmb3IgRC1jYWNoZSBhbGlhcyBoYW5kbGluZyBpcyBvbmx5IG5lZWRlZCBpZgotICogdGhlIHBhZ2Ugc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMTZLLgotICovCi0jaWYgUEFHRV9TSElGVCA8IDE0Ci0jZGVmaW5lIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQotI2VuZGlmCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mdXRleC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCmluZGV4IDRjMTA5ODQuLmMzOTNmODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogI2lmbmRlZiBNQVhfSFdJRlMKICMgaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCmluZGV4IGM5ZjhlZjIuLjdmOGQ3NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCkBAIC0yMSw2ICsyMSwxMyBAQAogI2RlZmluZSBQQUdFX1NJWkUgICAgKF9BQygxLFVMKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sgICAgKH4oUEFHRV9TSVpFLTEpKQogCisvKiBGbHVzaGluZyBmb3IgRC1jYWNoZSBhbGlhcyBoYW5kbGluZyBpcyBvbmx5IG5lZWRlZCBpZgorICogdGhlIHBhZ2Ugc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMTZLLgorICovCisjaWYgUEFHRV9TSElGVCA8IDE0CisjZGVmaW5lIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQorI2VuZGlmCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCmluZGV4IGI5YjE5MTQuLmE5NjA2N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIFBhZ2UgdGFibGUgYWxsb2NhdGlvbi9mcmVlaW5nLiAqLwogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKaW5kZXggYTJiNGY1ZS4uYTI5N2Y2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKQEAgLTI0LDIxICsyNCwyMyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY29uc3QuaD4KIAotLyogVGhlIGtlcm5lbCBpbWFnZSBvY2N1cGllcyAweDQwMDAwMDAgdG8gMHgxMDAwMDAwICg0TUIgLS0+IDE2TUIpLgotICogVGhlIHBhZ2UgY29weSBibG9ja29wcyB1c2UgMHgxMDAwMDAwIHRvIDB4MTgwMDAwMDAgKDE2TUIgLS0+IDI0TUIpLgorLyogVGhlIGtlcm5lbCBpbWFnZSBvY2N1cGllcyAweDQwMDAwMDAgdG8gMHgxMDAwMDAwICg0TUIgLS0+IDMyTUIpLgorICogVGhlIHBhZ2UgY29weSBibG9ja29wcyBjYW4gdXNlIDB4MjAwMDAwMCB0byAweDEwMDAwMDAwLgogICogVGhlIFBST00gcmVzaWRlcyBpbiBhbiBhcmVhIHNwYW5uaW5nIDB4ZjAwMDAwMDAgdG8gMHgxMDAwMDAwMDAuCi0gKiBUaGUgdm1hbGxvYyBhcmVhIHNwYW5zIDB4MTQwMDAwMDAwIHRvIDB4MjAwMDAwMDAwLgorICogVGhlIHZtYWxsb2MgYXJlYSBzcGFucyAweDEwMDAwMDAwMCB0byAweDIwMDAwMDAwMC4KKyAqIFNpbmNlIG1vZHVsZXMgbmVlZCB0byBiZSBpbiB0aGUgbG93ZXN0IDMyLWJpdHMgb2YgdGhlIGFkZHJlc3Mgc3BhY2UsCisgKiB3ZSBwbGFjZSB0aGVtIHJpZ2h0IGJlZm9yZSB0aGUgT0JQIGFyZWEgZnJvbSAweDEwMDAwMDAwIHRvIDB4ZjAwMDAwMDAuCiAgKiBUaGVyZSBpcyBhIHNpbmdsZSBzdGF0aWMga2VybmVsIFBNRCB3aGljaCBtYXBzIGZyb20gMHgwIHRvIGFkZHJlc3MKICAqIDB4NDAwMDAwMDAwLgogICovCi0jZGVmaW5lCVRMQlRFTVBfQkFTRQkJX0FDKDB4MDAwMDAwMDAwMTAwMDAwMCxVTCkKLSNkZWZpbmUgTU9EVUxFU19WQUREUgkJX0FDKDB4MDAwMDAwMDAwMjAwMDAwMCxVTCkKLSNkZWZpbmUgTU9EVUxFU19MRU4JCV9BQygweDAwMDAwMDAwN2UwMDAwMDAsVUwpCi0jZGVmaW5lIE1PRFVMRVNfRU5ECQlfQUMoMHgwMDAwMDAwMDgwMDAwMDAwLFVMKQotI2RlZmluZSBWTUFMTE9DX1NUQVJUCQlfQUMoMHgwMDAwMDAwMTQwMDAwMDAwLFVMKQotI2RlZmluZSBWTUFMTE9DX0VORAkJX0FDKDB4MDAwMDAwMDIwMDAwMDAwMCxVTCkKKyNkZWZpbmUJVExCVEVNUF9CQVNFCQlfQUMoMHgwMDAwMDAwMDAyMDAwMDAwLFVMKQorI2RlZmluZSBNT0RVTEVTX1ZBRERSCQlfQUMoMHgwMDAwMDAwMDEwMDAwMDAwLFVMKQorI2RlZmluZSBNT0RVTEVTX0xFTgkJX0FDKDB4MDAwMDAwMDBlMDAwMDAwMCxVTCkKKyNkZWZpbmUgTU9EVUxFU19FTkQJCV9BQygweDAwMDAwMDAwZjAwMDAwMDAsVUwpCiAjZGVmaW5lIExPV19PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDBmMDAwMDAwMCxVTCkKICNkZWZpbmUgSElfT0JQX0FERFJFU1MJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNQUxMT0NfRU5ECQlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKQogCiAvKiBYWFggQWxsIG9mIHRoaXMgbmVlZHMgdG8gYmUgcmV0aG91Z2h0IHNvIHdlIGNhbiB0YWtlIGFkdmFudGFnZQogICogWFhYIGNoZWV0YWgncyBmdWxsIDY0LWJpdCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UsIGllLiBubyBtb3JlIGhvbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS11bS9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjE0MmVlMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vZnV0ZXguaApAQCAtMSw1MyArMSwxMiBAQAotI2lmbmRlZiBfQVNNX0ZVVEVYX0gKLSNkZWZpbmUgX0FTTV9GVVRFWF9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fVU1fRlVURVhfSAorI2RlZmluZSBfX1VNX0ZVVEVYX0gKIAogI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgaW5saW5lIGludAotZnV0ZXhfYXRvbWljX29wX2ludXNlciAoaW50IGVuY29kZWRfb3AsIGludCBfX3VzZXIgKnVhZGRyKQotewotCWludCBvcCA9IChlbmNvZGVkX29wID4+IDI4KSAmIDc7Ci0JaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwotCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwotCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOwotCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKLQkJb3BhcmcgPSAxIDw8IG9wYXJnOworI2luY2x1ZGUgImFzbS9hcmNoL2Z1dGV4LmgiCiAKLQlpZiAoISBhY2Nlc3Nfb2sgKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpbmNfcHJlZW1wdF9jb3VudCgpOwotCi0Jc3dpdGNoIChvcCkgewotCWNhc2UgRlVURVhfT1BfU0VUOgotCWNhc2UgRlVURVhfT1BfQUREOgotCWNhc2UgRlVURVhfT1BfT1I6Ci0JY2FzZSBGVVRFWF9PUF9BTkROOgotCWNhc2UgRlVURVhfT1BfWE9SOgotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9TWVM7Ci0JfQotCi0JZGVjX3ByZWVtcHRfY291bnQoKTsKLQotCWlmICghcmV0KSB7Ci0JCXN3aXRjaCAoY21wKSB7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0VROiByZXQgPSAob2xkdmFsID09IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9ORTogcmV0ID0gKG9sZHZhbCAhPSBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfTFQ6IHJldCA9IChvbGR2YWwgPCBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfR0U6IHJldCA9IChvbGR2YWwgPj0gY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0xFOiByZXQgPSAob2xkdmFsIDw9IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9HVDogcmV0ID0gKG9sZHZhbCA+IGNtcGFyZyk7IGJyZWFrOwotCQlkZWZhdWx0OiByZXQgPSAtRU5PU1lTOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaAppbmRleCBiMmZjOTRmLi4yZDI0MjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKQEAgLTIxLDYgKzIxLDcgQEAKIAkgKiBjb3B5X3RocmVhZCkgdG8gbWFyayB0aGF0IHdlIGFyZSBiZWdpbiBjYWxsZWQgZnJvbSB1c2Vyc3BhY2UgKGZvcmsgLwogCSAqIHZmb3JrIC8gY2xvbmUpLCBhbmQgcmVzZXQgdG8gMCBhZnRlci4gSXQgaXMgbGVmdCB0byAwIHdoZW4gY2FsbGVkCiAJICogZnJvbSBrZXJuZWxzcGFjZSAoaS5lLiBrZXJuZWxfdGhyZWFkKCkgb3IgZm9ya19pZGxlKCksIGFzIG9mIDIuNi4xMSkuICovCisJc3RydWN0IHRhc2tfc3RydWN0ICpzYXZlZF90YXNrOwogCWludCBmb3JraW5nOwogCWludCBuc3lzY2FsbHM7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9zeXN0ZW0taTM4Ni5oCmluZGV4IGVhODM4MWQuLmM0MzYyNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1pMzg2LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc3lzdGVtLWkzODYuaApAQCAtMyw2ICszLDQgQEAKIAogI2luY2x1ZGUgImFzbS9zeXN0ZW0tZ2VuZXJpYy5oIgogICAgIAotI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS12ODUwL2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2Rlc2MuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kZXNjLmgKaW5kZXggNTk0ZTYxMC4uNjhhYzNjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2Rlc2MuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZGVzYy5oCkBAIC04LDYgKzgsOCBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCmluZGV4IDFkYzExMGIuLjJjYjQ4MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaApAQCAtNDIxLDkgKzQyMSw2IEBACiAKIGV4dGVybiBpbnQga2Vybl9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcik7IAogCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCi0KICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ3RhYmxlLmgKaW5kZXggODgzZWJjMi4uOTg3ZTNiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGd0YWJsZS5oCkBAIC00NDEsMTEgKzQ0MSwxMSBAQAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOwogCiAvKgotICogcmVtYXAgYSBwaHlzaWNhbCBhZGRyZXNzIGBwaHlzJyBvZiBzaXplIGBzaXplJyB3aXRoIHBhZ2UgcHJvdGVjdGlvbiBgcHJvdCcKKyAqIHJlbWFwIGEgcGh5c2ljYWwgcGFnZSBgcGZuJyBvZiBzaXplIGBzaXplJyB3aXRoIHBhZ2UgcHJvdGVjdGlvbiBgcHJvdCcKICAqIGludG8gdmlydHVhbCBhZGRyZXNzIGBmcm9tJwogICovCi0jZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLGZyb20scGh5cyxzaXplLHByb3QpIFwKLSAgICAgICAgICAgICAgICByZW1hcF9wZm5fcmFuZ2Uodm1hLCBmcm9tLCAocGh5cykgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSxmcm9tLHBmbixzaXplLHByb3QpIFwKKyAgICAgICAgICAgICAgICByZW1hcF9wZm5fcmFuZ2Uodm1hLCBmcm9tLCBwZm4sIHNpemUsIHByb3QpCiAKIAogLyogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IDY4YWJhMGMuLmIyYTI1MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTUxLDcgKzUxLDggQEAKICNkZWZpbmUgQVVESVRfV0FUQ0hfTElTVAkxMDA5CS8qIExpc3QgYWxsIGZpbGUvZGlyIHdhdGNoZXMgKi8KICNkZWZpbmUgQVVESVRfU0lHTkFMX0lORk8JMTAxMAkvKiBHZXQgaW5mbyBhYm91dCBzZW5kZXIgb2Ygc2lnbmFsIHRvIGF1ZGl0ZCAqLwogCi0jZGVmaW5lIEFVRElUX0ZJUlNUX1VTRVJfTVNHCTExMDAJLyogVXNlcnNwYWNlIG1lc3NhZ2VzIHVuaW50ZXJlc3RpbmcgdG8ga2VybmVsICovCisjZGVmaW5lIEFVRElUX0ZJUlNUX1VTRVJfTVNHCTExMDAJLyogVXNlcnNwYWNlIG1lc3NhZ2VzIG1vc3RseSB1bmludGVyZXN0aW5nIHRvIGtlcm5lbCAqLworI2RlZmluZSBBVURJVF9VU0VSX0FWQwkJMTEwNwkvKiBXZSBmaWx0ZXIgdGhpcyBkaWZmZXJlbnRseSAqLwogI2RlZmluZSBBVURJVF9MQVNUX1VTRVJfTVNHCTExOTkKICAKICNkZWZpbmUgQVVESVRfREFFTU9OX1NUQVJUICAgICAgMTIwMCAgICAvKiBEYWVtb24gc3RhcnR1cCByZWNvcmQgKi8KQEAgLTc1LDEwICs3NiwxNSBAQAogI2RlZmluZSBBVURJVF9LRVJORUwJCTIwMDAJLyogQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4gKi8KIAogLyogUnVsZSBmbGFncyAqLwotI2RlZmluZSBBVURJVF9QRVJfVEFTSyAweDAxCS8qIEFwcGx5IHJ1bGUgYXQgdGFzayBjcmVhdGlvbiAobm90IHN5c2NhbGwpICovCi0jZGVmaW5lIEFVRElUX0FUX0VOVFJZIDB4MDIJLyogQXBwbHkgcnVsZSBhdCBzeXNjYWxsIGVudHJ5ICovCi0jZGVmaW5lIEFVRElUX0FUX0VYSVQgIDB4MDQJLyogQXBwbHkgcnVsZSBhdCBzeXNjYWxsIGV4aXQgKi8KLSNkZWZpbmUgQVVESVRfUFJFUEVORCAgMHgxMAkvKiBQcmVwZW5kIHRvIGZyb250IG9mIGxpc3QgKi8KKyNkZWZpbmUgQVVESVRfRklMVEVSX1VTRVIJMHgwMAkvKiBBcHBseSBydWxlIHRvIHVzZXItZ2VuZXJhdGVkIG1lc3NhZ2VzICovCisjZGVmaW5lIEFVRElUX0ZJTFRFUl9UQVNLCTB4MDEJLyogQXBwbHkgcnVsZSBhdCB0YXNrIGNyZWF0aW9uIChub3Qgc3lzY2FsbCkgKi8KKyNkZWZpbmUgQVVESVRfRklMVEVSX0VOVFJZCTB4MDIJLyogQXBwbHkgcnVsZSBhdCBzeXNjYWxsIGVudHJ5ICovCisjZGVmaW5lIEFVRElUX0ZJTFRFUl9XQVRDSAkweDAzCS8qIEFwcGx5IHJ1bGUgdG8gZmlsZSBzeXN0ZW0gd2F0Y2hlcyAqLworI2RlZmluZSBBVURJVF9GSUxURVJfRVhJVAkweDA0CS8qIEFwcGx5IHJ1bGUgYXQgc3lzY2FsbCBleGl0ICovCisKKyNkZWZpbmUgQVVESVRfTlJfRklMVEVSUwk1CisKKyNkZWZpbmUgQVVESVRfRklMVEVSX1BSRVBFTkQJMHgxMAkvKiBQcmVwZW5kIHRvIGZyb250IG9mIGxpc3QgKi8KIAogLyogUnVsZSBhY3Rpb25zICovCiAjZGVmaW5lIEFVRElUX05FVkVSICAgIDAJLyogRG8gbm90IGJ1aWxkIGNvbnRleHQgaWYgcnVsZSBtYXRjaGVzICovCkBAIC0xOTksNiArMjA1LDcgQEAKIHN0cnVjdCBhdWRpdF9idWZmZXI7CiBzdHJ1Y3QgYXVkaXRfY29udGV4dDsKIHN0cnVjdCBpbm9kZTsKK3N0cnVjdCBuZXRsaW5rX3NrYl9wYXJtczsKIAogI2RlZmluZSBBVURJVFNDX0lOVkFMSUQgMAogI2RlZmluZSBBVURJVFNDX1NVQ0NFU1MgMQpAQCAtMjE1LDcgKzIyMiw3IEBACiBleHRlcm4gdm9pZCBhdWRpdF9zeXNjYWxsX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgZmFpbGVkLCBsb25nIHJldHVybl9jb2RlKTsKIGV4dGVybiB2b2lkIGF1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBhdWRpdF9wdXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCBhdWRpdF9pbm9kZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBmbGFncyk7CiAKIAkJCQkvKiBQcml2YXRlIEFQSSAoZm9yIGF1ZGl0LmMgb25seSkgKi8KIGV4dGVybiBpbnQgIGF1ZGl0X3JlY2VpdmVfZmlsdGVyKGludCB0eXBlLCBpbnQgcGlkLCBpbnQgdWlkLCBpbnQgc2VxLApAQCAtMjMwLDYgKzIzNyw3IEBACiBleHRlcm4gaW50IGF1ZGl0X3NvY2thZGRyKGludCBsZW4sIHZvaWQgKmFkZHIpOwogZXh0ZXJuIGludCBhdWRpdF9hdmNfcGF0aChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiB2b2lkIGF1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CitleHRlcm4gaW50IGF1ZGl0X2ZpbHRlcl91c2VyKHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqY2IsIGludCB0eXBlKTsKICNlbHNlCiAjZGVmaW5lIGF1ZGl0X2FsbG9jKHQpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X2ZyZWUodCkgZG8geyA7IH0gd2hpbGUgKDApCkBAIC0yMzcsNyArMjQ1LDcgQEAKICNkZWZpbmUgYXVkaXRfc3lzY2FsbF9leGl0KHQsZixyKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfZ2V0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfcHV0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYXVkaXRfaW5vZGUobixpKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfaW5vZGUobixpLGYpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9yZWNlaXZlX2ZpbHRlcih0LHAsdSxzLGQsbCkgKHsgLUVPUE5PVFNVUFA7IH0pCiAjZGVmaW5lIGF1ZGl0c2NfZ2V0X3N0YW1wKGMsdCxzKSBkbyB7IEJVRygpOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9nZXRfbG9naW51aWQoYykgKHsgLTE7IH0pCkBAIC0yNDYsMTYgKzI1NCwxNyBAQAogI2RlZmluZSBhdWRpdF9zb2NrYWRkcihsZW4sIGFkZHIpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X2F2Y19wYXRoKGRlbnRyeSwgbW50KSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9zaWduYWxfaW5mbyhzLHQpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9maWx0ZXJfdXNlcihjYix0KSAoeyAxOyB9KQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVVESVQKIC8qIFRoZXNlIGFyZSBkZWZpbmVkIGluIGF1ZGl0LmMgKi8KIAkJCQkvKiBQdWJsaWMgQVBJICovCi1leHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZyhzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LCBpbnQgdHlwZSwKLQkJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKLQkJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDMsNCkpKTsKK2V4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIGludCBnZnBfbWFzaywKKwkJCQkgICAgICBpbnQgdHlwZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJCQkJICAgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50Ziw0LDUpKSk7CiAKLWV4dGVybiBzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9sb2dfc3RhcnQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCxpbnQgdHlwZSk7CitleHRlcm4gc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfbG9nX3N0YXJ0KHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIGludCBnZnBfbWFzaywgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfZm9ybWF0KHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCQkJICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMiwzKSkpOwpAQCAtMjc0LDkgKzI4MywxMCBAQAogCQkJCQkgICAgIGludCBkb25lLCBpbnQgbXVsdGksCiAJCQkJCSAgICAgdm9pZCAqcGF5bG9hZCwgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfbG9zdChjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIGF1ZGl0X25ldGxpbmtfc2VtOwogI2Vsc2UKLSNkZWZpbmUgYXVkaXRfbG9nKGMsdCxmLC4uLikgZG8geyA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGF1ZGl0X2xvZ19zdGFydChjLHQpICh7IE5VTEw7IH0pCisjZGVmaW5lIGF1ZGl0X2xvZyhjLGcsdCxmLC4uLikgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X2xvZ19zdGFydChjLGcsdCkgKHsgTlVMTDsgfSkKICNkZWZpbmUgYXVkaXRfbG9nX3Zmb3JtYXQoYixmLGEpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9sb2dfZm9ybWF0KGIsZiwuLi4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9sb2dfZW5kKGIpIGRvIHsgOyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCmluZGV4IDVmZGU2ZjQuLjA0YmQ3NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgKQEAgLTUsNiArNSwxMCBAQAogICogbGludXgvYnl0ZW9yZGVyX2dlbmVyaWMuaAogICogR2VuZXJpYyBCeXRlLXJlb3JkZXJpbmcgc3VwcG9ydAogICoKKyAqIFRoZSAiLi4uIHAiIG1hY3JvcywgbGlrZSBsZTY0X3RvX2NwdXAsIGNhbiBiZSB1c2VkIHdpdGggcG9pbnRlcnMKKyAqIHRvIHVuYWxpZ25lZCBkYXRhLCBidXQgdGhlcmUgd2lsbCBiZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgb24gCisgKiBzb21lIGFyY2hpdGVjdHVyZXMuICBVc2UgZ2V0X3VuYWxpZ25lZCBmb3IgdW5hbGlnbmVkIGRhdGEuCisgKgogICogRnJhbmNvaXMtUmVuZSBSaWRlYXUgPGZhcmVAdHVuZXMub3JnPiAxOTk3MDcwNwogICogICAgZ2F0aGVyZWQgYWxsIHRoZSBnb29kIGlkZWFzIGZyb20gYWxsIGFzbS1mb28vYnl0ZW9yZGVyLmggaW50byBvbmUgZmlsZSwKICAqICAgIGNsZWFuZWQgdGhlbSB1cC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNjcC5oIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKaW5kZXggOGJmNGJhYy4uNzFmYWI0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKQEAgLTQsMTYgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0vKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhbiBJbnRlcm5ldCAoRENDUCkgc29ja2V0IGFkZHJlc3MuICovCi1zdHJ1Y3Qgc29ja2FkZHJfZGNjcCB7Ci0JX191MTYJc2RjY3BfZmFtaWx5OwkvKiBBZGRyZXNzIGZhbWlseSAgICovCi0JX191MTYJc2RjY3BfcG9ydDsJLyogUG9ydCBudW1iZXIJICAgICovCi0JX191MzIJc2RjY3BfYWRkcjsJLyogSW50ZXJuZXQgYWRkcmVzcyAqLwotCV9fdTMyCXNkY2NwX3NlcnZpY2U7CS8qIFNlcnZpY2UJICAgICovCi0JLyogUGFkIHRvIHNpemUgb2YgYHN0cnVjdCBzb2NrYWRkcic6IDE2IGJ5dGVzIC4gKi8KLQlfX3UzMglzZGNjcF9wYWQ7Ci19OwotCiAvKioKICAqIHN0cnVjdCBkY2NwX2hkciAtIGdlbmVyaWMgcGFydCBvZiBEQ0NQIHBhY2tldCBoZWFkZXIKICAqCkBAIC0xODgsNiArMTc4LDExIEBACiAKIC8qIERDQ1Agc29ja2V0IG9wdGlvbnMgKi8KICNkZWZpbmUgRENDUF9TT0NLT1BUX1BBQ0tFVF9TSVpFCTEKKyNkZWZpbmUgRENDUF9TT0NLT1BUX1NFUlZJQ0UJCTIKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0NDSURfUlhfSU5GTwkxMjgKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0NDSURfVFhfSU5GTwkxOTIKKworI2RlZmluZSBEQ0NQX1NFUlZJQ0VfTElTVF9NQVhfTEVOICAgICAgMzIKIAogI2lmZGVmIF9fS0VSTkVMX18KIApAQCAtMzM3LDcgKzMzMiw4IEBACiAgICovCiBzdHJ1Y3QgZGNjcF9vcHRpb25zIHsKIAlfX3U2NAlkY2Nwb19zZXF1ZW5jZV93aW5kb3c7Ci0JX191OAlkY2Nwb19jY2lkOworCV9fdTgJZGNjcG9fcnhfY2NpZDsKKwlfX3U4CWRjY3BvX3R4X2NjaWQ7CiAJX191OAlkY2Nwb19zZW5kX2Fja192ZWN0b3I7CiAJX191OAlkY2Nwb19zZW5kX25kcF9jb3VudDsKIH07CkBAIC0zNjAsMTQgKzM1Niw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9kZWF0aF9yb3cgZGNjcF9kZWF0aF9yb3c7CiAKLS8qIFJlYWQgYWJvdXQgdGhlIEVDTiBub25jZSB0byBzZWUgd2h5IGl0IGlzIDI1MyAqLwotI2RlZmluZSBEQ0NQX01BWF9BQ0tfVkVDVE9SX0xFTiAyNTMKLQogc3RydWN0IGRjY3Bfb3B0aW9uc19yZWNlaXZlZCB7Ci0JdTMyCWRjY3Bvcl9uZHA6MjQsCi0JCWRjY3Bvcl9hY2tfdmVjdG9yX2xlbjo4OwotCXUzMglkY2Nwb3JfYWNrX3ZlY3Rvcl9pZHg6MTA7Ci0JLyogMjIgYml0cyBob2xlLCB0cnkgdG8gcGFjayAqLworCXUzMglkY2Nwb3JfbmRwOyAvKiBvbmx5IDI0IGJpdHMgKi8KIAl1MzIJZGNjcG9yX3RpbWVzdGFtcDsKIAl1MzIJZGNjcG9yX3RpbWVzdGFtcF9lY2hvOwogCXUzMglkY2Nwb3JfZWxhcHNlZF90aW1lOwpAQCAtMzgyLDYgKzM3MiwyNyBAQAogCURDQ1BfUk9MRV9TRVJWRVIsCiB9OwogCitzdHJ1Y3QgZGNjcF9zZXJ2aWNlX2xpc3QgeworCV9fdTMyCWRjY3BzbF9ucjsKKwlfX3UzMglkY2Nwc2xfbGlzdFswXTsKK307CisKKyNkZWZpbmUgRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUgaHRvbmwoKF9fdTMyKS0xKQorCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2xpc3RfaGFzX3NlcnZpY2UoY29uc3Qgc3RydWN0IGRjY3Bfc2VydmljZV9saXN0ICpzbCwKKwkJCQkJY29uc3QgdTMyIHNlcnZpY2UpCit7CisJaWYgKGxpa2VseShzbCAhPSBOVUxMKSkgeworCQl1MzIgaSA9IHNsLT5kY2Nwc2xfbnI7CisJCXdoaWxlIChpLS0pCisJCQlpZiAoc2wtPmRjY3BzbF9saXN0W2ldID09IHNlcnZpY2UpCisJCQkJcmV0dXJuIDE7IAorCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRjY3BfYWNrdmVjOworCiAvKioKICAqIHN0cnVjdCBkY2NwX3NvY2sgLSBEQ0NQIHNvY2tldCBzdGF0ZQogICoKQEAgLTQwMiw3ICs0MTMsNyBAQAogICogQGRjY3BzX3BhY2tldF9zaXplIC0gU2V0IHRocnUgc2V0c29ja29wdAogICogQGRjY3BzX3JvbGUgLSBSb2xlIG9mIHRoaXMgc29jaywgb25lIG9mICVkY2NwX3JvbGUKICAqIEBkY2Nwc19uZHBfY291bnQgLSBudW1iZXIgb2YgTm9uIERhdGEgUGFja2V0cyBzaW5jZSBsYXN0IGRhdGEgcGFja2V0Ci0gKiBAZGNjcHNfaGNfcnhfYWNrcGt0cyAtIHJlY2VpdmVyIGhhbGYgY29ubmVjdGlvbiBhY2tlZCBwYWNrZXRzCisgKiBAZGNjcHNfaGNfcnhfYWNrdmVjIC0gcnggaGFsZiBjb25uZWN0aW9uIGFjayB2ZWN0b3IKICAqLwogc3RydWN0IGRjY3Bfc29jayB7CiAJLyogaW5ldF9jb25uZWN0aW9uX3NvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgZGNjcF9zb2NrICovCkBAIC00MTcsNyArNDI4LDggQEAKIAlfX3U2NAkJCQlkY2Nwc19nc3M7CiAJX191NjQJCQkJZGNjcHNfZ3NyOwogCV9fdTY0CQkJCWRjY3BzX2dhcjsKLQl1bnNpZ25lZCBsb25nCQkJZGNjcHNfc2VydmljZTsKKwlfX3UzMgkJCQlkY2Nwc19zZXJ2aWNlOworCXN0cnVjdCBkY2NwX3NlcnZpY2VfbGlzdAkqZGNjcHNfc2VydmljZV9saXN0OwogCXN0cnVjdCB0aW1ldmFsCQkJZGNjcHNfdGltZXN0YW1wX3RpbWU7CiAJX191MzIJCQkJZGNjcHNfdGltZXN0YW1wX2VjaG87CiAJX191MzIJCQkJZGNjcHNfcGFja2V0X3NpemU7CkBAIC00MjYsNyArNDM4LDcgQEAKIAlfX3UzMgkJCQlkY2Nwc19wbXR1X2Nvb2tpZTsKIAlfX3UzMgkJCQlkY2Nwc19tc3NfY2FjaGU7CiAJc3RydWN0IGRjY3Bfb3B0aW9ucwkJZGNjcHNfb3B0aW9uczsKLQlzdHJ1Y3QgZGNjcF9hY2twa3RzCQkqZGNjcHNfaGNfcnhfYWNrcGt0czsKKwlzdHJ1Y3QgZGNjcF9hY2t2ZWMJCSpkY2Nwc19oY19yeF9hY2t2ZWM7CiAJdm9pZAkJCQkqZGNjcHNfaGNfcnhfY2NpZF9wcml2YXRlOwogCXZvaWQJCQkJKmRjY3BzX2hjX3R4X2NjaWRfcHJpdmF0ZTsKIAlzdHJ1Y3QgY2NpZAkJCSpkY2Nwc19oY19yeF9jY2lkOwpAQCAtNDQzLDYgKzQ1NSwxMSBAQAogCXJldHVybiAoc3RydWN0IGRjY3Bfc29jayAqKXNrOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkY2NwX3NlcnZpY2Vfbm90X2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gZGNjcF9zayhzayktPmRjY3BzX3NlcnZpY2UgPT0gRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUU7Cit9CisKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZGNjcF9yb2xlKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlzd2l0Y2ggKGRjY3Bfc2soc2spLT5kY2Nwc19yb2xlKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggODJlMzljZC4uYzY5ODA1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtNjE5LDcgKzYxOSw3IEBACiAJX191MzIgaGVpZ2h0OyAgICAgICAgICAgICAgIC8qIGhlaWdodCBvZiBlYWNoIHRpbGUgaW4gc2NhbmxpbmVzICovCiAJX191MzIgZGVwdGg7ICAgICAgICAgICAgICAgIC8qIGNvbG9yIGRlcHRoIG9mIGVhY2ggdGlsZSAqLwogCV9fdTMyIGxlbmd0aDsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdGlsZXMgaW4gdGhlIG1hcCAqLwotCV9fdTggICpkYXRhOyAgICAgICAgICAgICAgICAvKiBhY3R1YWwgdGlsZSBtYXA6IGEgYml0bWFwIGFycmF5LCBwYWNrZWQKKwljb25zdCBfX3U4ICpkYXRhOyAgICAgICAgICAgLyogYWN0dWFsIHRpbGUgbWFwOiBhIGJpdG1hcCBhcnJheSwgcGFja2VkCiAJCQkJICAgICAgIHRvIHRoZSBuZWFyZXN0IGJ5dGUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZm9udC5oIGIvaW5jbHVkZS9saW51eC9mb250LmgKaW5kZXggOGZjODBhNy4uNTNiMTI5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mb250LmgKKysrIGIvaW5jbHVkZS9saW51eC9mb250LmgKQEAgLTE1LDkgKzE1LDkgQEAKIAogc3RydWN0IGZvbnRfZGVzYyB7CiAgICAgaW50IGlkeDsKLSAgICBjaGFyICpuYW1lOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgdm9pZCAqZGF0YTsKKyAgICBjb25zdCB2b2lkICpkYXRhOwogICAgIGludCBwcmVmOwogfTsKIApAQCAtMzIsNyArMzIsNyBAQAogI2RlZmluZSBBQ09STjh4OF9JRFgJOAogI2RlZmluZQlNSU5JNHg2X0lEWAk5CiAKLWV4dGVybiBzdHJ1Y3QgZm9udF9kZXNjCWZvbnRfdmdhXzh4OCwKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZm9udF9kZXNjCWZvbnRfdmdhXzh4OCwKIAkJCWZvbnRfdmdhXzh4MTYsCiAJCQlmb250X3BlYXJsXzh4OCwKIAkJCWZvbnRfdmdhXzZ4MTEsCkBAIC00NSwxMSArNDUsMTEgQEAKIAogLyogRmluZCBhIGZvbnQgd2l0aCBhIHNwZWNpZmljIG5hbWUgKi8KIAotZXh0ZXJuIHN0cnVjdCBmb250X2Rlc2MgKmZpbmRfZm9udChjaGFyICpuYW1lKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZm9udF9kZXNjICpmaW5kX2ZvbnQoY29uc3QgY2hhciAqbmFtZSk7CiAKIC8qIEdldCB0aGUgZGVmYXVsdCBmb250IGZvciBhIHNwZWNpZmljIHNjcmVlbiBzaXplICovCiAKLWV4dGVybiBzdHJ1Y3QgZm9udF9kZXNjICpnZXRfZGVmYXVsdF9mb250KGludCB4cmVzLCBpbnQgeXJlcyk7CitleHRlcm4gY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqZ2V0X2RlZmF1bHRfZm9udChpbnQgeHJlcywgaW50IHlyZXMpOwogCiAvKiBNYXguIGxlbmd0aCBmb3IgdGhlIG5hbWUgb2YgYSBwcmVkZWZpbmVkIGZvbnQgKi8KICNkZWZpbmUgTUFYX0ZPTlRfTkFNRQkzMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggYmUzNTMzMi4uM2Q0OWEzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0yMzAsMTEgKzIzMCw2IEBACiAJc3RydWN0IGRldmljZSBkZXY7CQkvKiB0aGUgYWRhcHRlciBkZXZpY2UgKi8KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsJLyogdGhlIGNsYXNzIGRldmljZSAqLwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMgCi0JLyogTm8gbmVlZCB0byBzZXQgdGhpcyB3aGVuIHlvdSBpbml0aWFsaXplIHRoZSBhZGFwdGVyICAgICAgICAgICovCi0JaW50IGlub2RlOwotI2VuZGlmIC8qIGRlZiBDT05GSUdfUFJPQ19GUyAqLwotCiAJaW50IG5yOwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCmluZGV4IDE3ZDBjMGQuLmVlZjA4NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCkBAIC00Miw4ICs0Miw4IEBACiBzdHJ1Y3Qgdmxhbl9ldGhoZHIgewogICAgdW5zaWduZWQgY2hhcgloX2Rlc3RbRVRIX0FMRU5dOwkgICAvKiBkZXN0aW5hdGlvbiBldGggYWRkcgkqLwogICAgdW5zaWduZWQgY2hhcgloX3NvdXJjZVtFVEhfQUxFTl07CSAgIC8qIHNvdXJjZSBldGhlciBhZGRyCSovCi0gICB1bnNpZ25lZCBzaG9ydCAgICAgICBoX3ZsYW5fcHJvdG87ICAgICAgICAgICAgICAvKiBTaG91bGQgYWx3YXlzIGJlIDB4ODEwMCAqLwotICAgdW5zaWduZWQgc2hvcnQgICAgICAgaF92bGFuX1RDSTsgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBWTEFOIElEICovCisgICBfX2JlMTYgICAgICAgICAgICAgICBoX3ZsYW5fcHJvdG87ICAgICAgICAgICAgICAvKiBTaG91bGQgYWx3YXlzIGJlIDB4ODEwMCAqLworICAgX19iZTE2ICAgICAgICAgICAgICAgaF92bGFuX1RDSTsgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBWTEFOIElEICovCiAgICB1bnNpZ25lZCBzaG9ydAloX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOyAvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAob3IgbGVuKSAqLwogfTsKIApAQCAtNTUsOCArNTUsOCBAQAogfQogCiBzdHJ1Y3Qgdmxhbl9oZHIgewotICAgdW5zaWduZWQgc2hvcnQgICAgICAgaF92bGFuX1RDSTsgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBWTEFOIElEICovCi0gICB1bnNpZ25lZCBzaG9ydCAgICAgICBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOyAvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAob3IgbGVuKSAqLworICAgX19iZTE2ICAgICAgICAgICAgICAgaF92bGFuX1RDSTsgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBWTEFOIElEICovCisgICBfX2JlMTYgICAgICAgICAgICAgICBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOyAvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAob3IgbGVuKSAqLwogfTsKIAogI2RlZmluZSBWTEFOX1ZJRF9NQVNLCTB4ZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmggYi9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmgKaW5kZXggMDZiOWFmNy4uNWZkMjBkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCisrKyBiL2luY2x1ZGUvbGludXgvam95c3RpY2suaApAQCAtMTExLDI5ICsxMTEsMzAgQEAKICNkZWZpbmUgSlNfU0VUX0FMTAkJOAogCiBzdHJ1Y3QgSlNfREFUQV9UWVBFIHsKLQlfX3MzMiBidXR0b25zOwotCV9fczMyIHg7Ci0JX19zMzIgeTsKKwlpbnQzMl90IGJ1dHRvbnM7CisJaW50MzJfdCB4OworCWludDMyX3QgeTsKIH07CiAKIHN0cnVjdCBKU19EQVRBX1NBVkVfVFlQRV8zMiB7Ci0JX19zMzIgSlNfVElNRU9VVDsKLQlfX3MzMiBCVVNZOwotCV9fczMyIEpTX0VYUElSRVRJTUU7Ci0JX19zMzIgSlNfVElNRUxJTUlUOworCWludDMyX3QgSlNfVElNRU9VVDsKKwlpbnQzMl90IEJVU1k7CisJaW50MzJfdCBKU19FWFBJUkVUSU1FOworCWludDMyX3QgSlNfVElNRUxJTUlUOwogCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfU0FWRTsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX0NPUlI7CiB9OwogCiBzdHJ1Y3QgSlNfREFUQV9TQVZFX1RZUEVfNjQgewotCV9fczMyIEpTX1RJTUVPVVQ7Ci0JX19zMzIgQlVTWTsKLQlfX3M2NCBKU19FWFBJUkVUSU1FOwotCV9fczY0IEpTX1RJTUVMSU1JVDsKKwlpbnQzMl90IEpTX1RJTUVPVVQ7CisJaW50MzJfdCBCVVNZOworCWludDY0X3QgSlNfRVhQSVJFVElNRTsKKwlpbnQ2NF90IEpTX1RJTUVMSU1JVDsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX1NBVkU7CiAJc3RydWN0IEpTX0RBVEFfVFlQRSBKU19DT1JSOwogfTsKIAorI2lmZGVmIF9fS0VSTkVMX18KICNpZiBCSVRTX1BFUl9MT05HID09IDY0CiAjZGVmaW5lIEpTX0RBVEFfU0FWRV9UWVBFIEpTX0RBVEFfU0FWRV9UWVBFXzY0CiAjZWxpZiBCSVRTX1BFUl9MT05HID09IDMyCkBAIC0xNDEsNSArMTQyLDYgQEAKICNlbHNlCiAjZXJyb3IgVW5leHBlY3RlZCBCSVRTX1BFUl9MT05HCiAjZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX0pPWVNUSUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDY4N2JhOGMuLjQzNjdjZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMzA3LDggKzMwNyw4IEBACiAJY2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CS8qIFBhZGRpbmc6IGxpYmM1IHVzZXMgdGhpcy4uICovCiB9OwogCi1leHRlcm4gdm9pZCBCVUlMRF9CVUcodm9pZCk7Ci0jZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pIGRvIHsgaWYgKGNvbmRpdGlvbikgQlVJTERfQlVHKCk7IH0gd2hpbGUoMCkKKy8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgY29uZGl0aW9uIGlzIGZhbHNlICovCisjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiBleHRlcm4gaW50IHJhbmRvbWl6ZV92YV9zcGFjZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4MmQ3MDI0Li4wOTdiM2EzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMzYsNiArMTM2LDcgQEAKICNkZWZpbmUgVk1fRVhFQwkJMHgwMDAwMDAwNAogI2RlZmluZSBWTV9TSEFSRUQJMHgwMDAwMDAwOAogCisvKiBtcHJvdGVjdCgpIGhhcmRjb2RlcyBWTV9NQVlSRUFEID4+IDQgPT0gVk1fUkVBRCwgYW5kIHNvIGZvciByL3cveCBiaXRzLiAqLwogI2RlZmluZSBWTV9NQVlSRUFECTB4MDAwMDAwMTAJLyogbGltaXRzIGZvciBtcHJvdGVjdCgpIGV0YyAqLwogI2RlZmluZSBWTV9NQVlXUklURQkweDAwMDAwMDIwCiAjZGVmaW5lIFZNX01BWUVYRUMJMHgwMDAwMDA0MApAQCAtMzUwLDcgKzM1MSw4IEBACiAgKiBvbmx5IG9uZSBjb3B5IGluIG1lbW9yeSwgYXQgbW9zdCwgbm9ybWFsbHkuCiAgKgogICogRm9yIHRoZSBub24tcmVzZXJ2ZWQgcGFnZXMsIHBhZ2VfY291bnQocGFnZSkgZGVub3RlcyBhIHJlZmVyZW5jZSBjb3VudC4KLSAqICAgcGFnZV9jb3VudCgpID09IDAgbWVhbnMgdGhlIHBhZ2UgaXMgZnJlZS4KKyAqICAgcGFnZV9jb3VudCgpID09IDAgbWVhbnMgdGhlIHBhZ2UgaXMgZnJlZS4gcGFnZS0+bHJ1IGlzIHRoZW4gdXNlZCBmb3IKKyAqICAgZnJlZWxpc3QgbWFuYWdlbWVudCBpbiB0aGUgYnVkZHkgYWxsb2NhdG9yLgogICogICBwYWdlX2NvdW50KCkgPT0gMSBtZWFucyB0aGUgcGFnZSBpcyB1c2VkIGZvciBleGFjdGx5IG9uZSBwdXJwb3NlCiAgKiAgIChlLmcuIGEgcHJpdmF0ZSBkYXRhIHBhZ2Ugb2Ygb25lIHByb2Nlc3MpLgogICoKQEAgLTM3NiwxMCArMzc4LDggQEAKICAqIGF0dGFjaGVzLCBwbHVzIDEgaWYgYHByaXZhdGUnIGNvbnRhaW5zIHNvbWV0aGluZywgcGx1cyBvbmUgZm9yCiAgKiB0aGUgcGFnZSBjYWNoZSBpdHNlbGYuCiAgKgotICogQWxsIHBhZ2VzIGJlbG9uZ2luZyB0byBhbiBpbm9kZSBhcmUgaW4gdGhlc2UgZG91Ymx5IGxpbmtlZCBsaXN0czoKLSAqIG1hcHBpbmctPmNsZWFuX3BhZ2VzLCBtYXBwaW5nLT5kaXJ0eV9wYWdlcyBhbmQgbWFwcGluZy0+bG9ja2VkX3BhZ2VzOwotICogdXNpbmcgdGhlIHBhZ2UtPmxpc3QgbGlzdF9oZWFkLiBUaGVzZSBmaWVsZHMgYXJlIGFsc28gdXNlZCBmb3IKLSAqIGZyZWVsaXN0IG1hbmFnZW1ldCAod2hlbiBwYWdlX2NvdW50KCk9PTApLgorICogSW5zdGVhZCBvZiBrZWVwaW5nIGRpcnR5L2NsZWFuIHBhZ2VzIGluIHBlciBhZGRyZXNzLXNwYWNlIGxpc3RzLCB3ZSBpbnN0ZWFkCisgKiBub3cgdGFnIHBhZ2VzIGFzIGRpcnR5L3VuZGVyIHdyaXRlYmFjayBpbiB0aGUgcmFkaXggdHJlZS4KICAqCiAgKiBUaGVyZSBpcyBhbHNvIGEgcGVyLW1hcHBpbmcgcmFkaXggdHJlZSBtYXBwaW5nIGluZGV4IHRvIHRoZSBwYWdlCiAgKiBpbiBtZW1vcnkgaWYgcHJlc2VudC4gVGhlIHRyZWUgaXMgcm9vdGVkIGF0IG1hcHBpbmctPnJvb3QuICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCmluZGV4IDdlMDMzZTkuLmJhY2U3MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaApAQCAtMTMzLDExICsxMzMsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaWNtcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2N0cC5oPgogCiAvKiBwZXIgY29ubnRyYWNrOiBwcm90b2NvbCBwcml2YXRlIGRhdGEgKi8KIHVuaW9uIGlwX2Nvbm50cmFja19wcm90byB7CiAJLyogaW5zZXJ0IGNvbm50cmFjayBwcm90byBwcml2YXRlIGRhdGEgaGVyZSAqLworCXN0cnVjdCBpcF9jdF9ncmUgZ3JlOwogCXN0cnVjdCBpcF9jdF9zY3RwIHNjdHA7CiAJc3RydWN0IGlwX2N0X3RjcCB0Y3A7CiAJc3RydWN0IGlwX2N0X2ljbXAgaWNtcDsKQEAgLTE0OCw2ICsxNTAsNyBAQAogfTsKIAogLyogQWRkIHByb3RvY29sIGhlbHBlciBpbmNsdWRlIGZpbGUgaGVyZSAqLworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcHRwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2FtYW5kYS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaXJjLmg+CkBAIC0xNTUsMTIgKzE1OCwyMCBAQAogLyogcGVyIGNvbm50cmFjazogYXBwbGljYXRpb24gaGVscGVyIHByaXZhdGUgZGF0YSAqLwogdW5pb24gaXBfY29ubnRyYWNrX2hlbHAgewogCS8qIGluc2VydCBjb25udHJhY2sgaGVscGVyIHByaXZhdGUgZGF0YSAobWFzdGVyKSBoZXJlICovCisJc3RydWN0IGlwX2N0X3BwdHBfbWFzdGVyIGN0X3BwdHBfaW5mbzsKIAlzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciBjdF9mdHBfaW5mbzsKIAlzdHJ1Y3QgaXBfY3RfaXJjX21hc3RlciBjdF9pcmNfaW5mbzsKIH07CiAKICNpZmRlZiBDT05GSUdfSVBfTkZfTkFUX05FRURFRAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9wcHRwLmg+CisKKy8qIHBlciBjb25udHJhY2s6IG5hdCBhcHBsaWNhdGlvbiBoZWxwZXIgcHJpdmF0ZSBkYXRhICovCit1bmlvbiBpcF9jb25udHJhY2tfbmF0X2hlbHAgeworCS8qIGluc2VydCBuYXQgaGVscGVyIHByaXZhdGUgZGF0YSBoZXJlICovCisJc3RydWN0IGlwX25hdF9wcHRwIG5hdF9wcHRwX2luZm87Cit9OwogI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMjIzLDYgKzIzNCw3IEBACiAjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgaXBfbmF0X2luZm8gaW5mbzsKKwkJdW5pb24gaXBfY29ubnRyYWNrX25hdF9oZWxwIGhlbHA7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERV9NT0RVTEUpCiAJCWludCBtYXNxX2luZGV4OwpAQCAtMzcyLDcgKzM4NCw3IEBACiBfX2lwX2Nvbm50cmFja19leHBlY3RfZmluZChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CiAKIGV4dGVybiBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqCi1pcF9jb25udHJhY2tfZXhwZWN0X2ZpbmRfZ2V0KGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKK2lwX2Nvbm50cmFja19leHBlY3RfZmluZChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CiAKIGV4dGVybiBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgogX19pcF9jb25udHJhY2tfZmluZChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3BwdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3BwdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODllMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHB0cC5oCkBAIC0wLDAgKzEsMzMyIEBACisvKiBQUFRQIGNvbnN0YW50cyBhbmQgc3RydWN0cyAqLworI2lmbmRlZiBfQ09OTlRSQUNLX1BQVFBfSAorI2RlZmluZSBfQ09OTlRSQUNLX1BQVFBfSAorCisvKiBzdGF0ZSBvZiB0aGUgY29udHJvbCBzZXNzaW9uICovCitlbnVtIHBwdHBfY3RybHNlc3Nfc3RhdGUgeworCVBQVFBfU0VTU0lPTl9OT05FLAkJCS8qIG5vIHNlc3Npb24gcHJlc2VudCAqLworCVBQVFBfU0VTU0lPTl9FUlJPUiwJCQkvKiBzb21lIHNlc3Npb24gZXJyb3IgKi8KKwlQUFRQX1NFU1NJT05fU1RPUFJFUSwJCQkvKiBzdG9wX3Nlc3MgcmVxdWVzdCBzZWVuICovCisJUFBUUF9TRVNTSU9OX1JFUVVFU1RFRCwJCQkvKiBzdGFydF9zZXNzIHJlcXVlc3Qgc2VlbiAqLworCVBQVFBfU0VTU0lPTl9DT05GSVJNRUQsCQkJLyogc2Vzc2lvbiBlc3RhYmxpc2hlZCAqLworfTsKKworLyogc3RhdGUgb2YgdGhlIGNhbGwgaW5zaWRlIHRoZSBjb250cm9sIHNlc3Npb24gKi8KK2VudW0gcHB0cF9jdHJsY2FsbF9zdGF0ZSB7CisJUFBUUF9DQUxMX05PTkUsCisJUFBUUF9DQUxMX0VSUk9SLAorCVBQVFBfQ0FMTF9PVVRfUkVRLAorCVBQVFBfQ0FMTF9PVVRfQ09ORiwKKwlQUFRQX0NBTExfSU5fUkVRLAorCVBQVFBfQ0FMTF9JTl9SRVAsCisJUFBUUF9DQUxMX0lOX0NPTkYsCisJUFBUUF9DQUxMX0NMRUFSX1JFUSwKK307CisKKworLyogY29ubnRyYWNrIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGlwX2N0X3BwdHBfbWFzdGVyIHsKKwllbnVtIHBwdHBfY3RybHNlc3Nfc3RhdGUgc3N0YXRlOwkvKiBzZXNzaW9uIHN0YXRlICovCisKKwkvKiBldmVyeXRoaW5nIGJlbG93IGlzIGdvaW5nIHRvIGJlIHBlci1leHBlY3RhdGlvbiBpbiBuZXduYXQsCisJICogc2luY2UgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBjYWxsIHdpdGhpbiBvbmUgc2Vzc2lvbiAqLworCWVudW0gcHB0cF9jdHJsY2FsbF9zdGF0ZSBjc3RhdGU7CS8qIGNhbGwgc3RhdGUgKi8KKwl1X2ludDE2X3QgcGFjX2NhbGxfaWQ7CQkJLyogY2FsbCBpZCBvZiBQQUMsIGhvc3QgYnl0ZSBvcmRlciAqLworCXVfaW50MTZfdCBwbnNfY2FsbF9pZDsJCQkvKiBjYWxsIGlkIG9mIFBOUywgaG9zdCBieXRlIG9yZGVyICovCisKKwkvKiBpbiBwcmUtMi42LjExIHRoaXMgdXNlZCB0byBiZSBwZXItZXhwZWN0LiBOb3cgaXQgaXMgcGVyLWNvbm50cmFjaworCSAqIGFuZCB0aGVyZWZvcmUgaW1wb3NlcyBhIGZpeGVkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgbWFwcyAqLworCXN0cnVjdCBpcF9jdF9ncmVfa2V5bWFwICprZXltYXBfb3JpZywgKmtleW1hcF9yZXBseTsKK307CisKKy8qIGNvbm50cmFja19leHBlY3QgcHJpdmF0ZSBtZW1iZXIgKi8KK3N0cnVjdCBpcF9jdF9wcHRwX2V4cGVjdCB7CisJZW51bSBwcHRwX2N0cmxjYWxsX3N0YXRlIGNzdGF0ZTsgCS8qIGNhbGwgc3RhdGUgKi8KKwl1X2ludDE2X3QgcGFjX2NhbGxfaWQ7CQkJLyogY2FsbCBpZCBvZiBQQUMgKi8KKwl1X2ludDE2X3QgcG5zX2NhbGxfaWQ7CQkJLyogY2FsbCBpZCBvZiBQTlMgKi8KK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBJUF9DT05OVFJfUFBUUAkJUFBUUF9DT05UUk9MX1BPUlQKKworI2RlZmluZSBQUFRQX0NPTlRST0xfUE9SVAkxNzIzCisKKyNkZWZpbmUgUFBUUF9QQUNLRVRfQ09OVFJPTAkxCisjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVQJMgorCisjZGVmaW5lIFBQVFBfTUFHSUNfQ09PS0lFCTB4MWEyYjNjNGQKKworc3RydWN0IHBwdHBfcGt0X2hkciB7CisJX191MTYJcGFja2V0TGVuZ3RoOworCV9fdTE2CXBhY2tldFR5cGU7CisJX191MzIJbWFnaWNDb29raWU7Cit9OworCisvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIHZhbHVlcyAqLworI2RlZmluZSBQUFRQX1NUQVJUX1NFU1NJT05fUkVRVUVTVAkxCisjZGVmaW5lIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVBMWQkyCisjZGVmaW5lIFBQVFBfU1RPUF9TRVNTSU9OX1JFUVVFU1QJMworI2RlZmluZSBQUFRQX1NUT1BfU0VTU0lPTl9SRVBMWQkJNAorI2RlZmluZSBQUFRQX0VDSE9fUkVRVUVTVAkJNQorI2RlZmluZSBQUFRQX0VDSE9fUkVQTFkJCQk2CisjZGVmaW5lIFBQVFBfT1VUX0NBTExfUkVRVUVTVAkJNworI2RlZmluZSBQUFRQX09VVF9DQUxMX1JFUExZCQk4CisjZGVmaW5lIFBQVFBfSU5fQ0FMTF9SRVFVRVNUCQk5CisjZGVmaW5lIFBQVFBfSU5fQ0FMTF9SRVBMWQkJMTAKKyNkZWZpbmUgUFBUUF9JTl9DQUxMX0NPTk5FQ1QJCTExCisjZGVmaW5lIFBQVFBfQ0FMTF9DTEVBUl9SRVFVRVNUCQkxMgorI2RlZmluZSBQUFRQX0NBTExfRElTQ09OTkVDVF9OT1RJRlkJMTMKKyNkZWZpbmUgUFBUUF9XQU5fRVJST1JfTk9USUZZCQkxNAorI2RlZmluZSBQUFRQX1NFVF9MSU5LX0lORk8JCTE1CisKKyNkZWZpbmUgUFBUUF9NU0dfTUFYCQkJMTUKKworLyogUHB0cEdlbmVyYWxFcnJvciB2YWx1ZXMgKi8KKyNkZWZpbmUgUFBUUF9FUlJPUl9DT0RFX05PTkUJCTAKKyNkZWZpbmUgUFBUUF9OT1RfQ09OTkVDVEVECQkxCisjZGVmaW5lIFBQVFBfQkFEX0ZPUk1BVAkJCTIKKyNkZWZpbmUgUFBUUF9CQURfVkFMVUUJCQkzCisjZGVmaW5lIFBQVFBfTk9fUkVTT1VSQ0UJCTQKKyNkZWZpbmUgUFBUUF9CQURfQ0FMTElECQkJNQorI2RlZmluZSBQUFRQX1JFTU9WRV9ERVZJQ0VfRVJST1IJNgorCitzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgeworCV9fdTE2CW1lc3NhZ2VUeXBlOworCV9fdTE2CXJlc2VydmVkOworfTsKKworLyogRnJhbWluZ0NhcGFiaWxpdHkgQml0bWFwIFZhbHVlcyAqLworI2RlZmluZSBQUFRQX0ZSQU1FX0NBUF9BU1lOQwkJMHgxCisjZGVmaW5lIFBQVFBfRlJBTUVfQ0FQX1NZTkMJCTB4MgorCisvKiBCZWFyZXJDYXBhYmlsaXR5IEJpdG1hcCBWYWx1ZXMgKi8KKyNkZWZpbmUgUFBUUF9CRUFSRVJfQ0FQX0FOQUxPRwkJMHgxCisjZGVmaW5lIFBQVFBfQkVBUkVSX0NBUF9ESUdJVEFMCQkweDIKKworc3RydWN0IFBwdHBTdGFydFNlc3Npb25SZXF1ZXN0IHsKKwlfX3UxNglwcm90b2NvbFZlcnNpb247CisJX191OAlyZXNlcnZlZDE7CisJX191OAlyZXNlcnZlZDI7CisJX191MzIJZnJhbWluZ0NhcGFiaWxpdHk7CisJX191MzIJYmVhcmVyQ2FwYWJpbGl0eTsKKwlfX3UxNgltYXhDaGFubmVsczsKKwlfX3UxNglmaXJtd2FyZVJldmlzaW9uOworCV9fdTgJaG9zdE5hbWVbNjRdOworCV9fdTgJdmVuZG9yU3RyaW5nWzY0XTsKK307CisKKy8qIFBwdHBTdGFydFNlc3Npb25SZXN1bHRDb2RlIFZhbHVlcyAqLworI2RlZmluZSBQUFRQX1NUQVJUX09LCQkJMQorI2RlZmluZSBQUFRQX1NUQVJUX0dFTkVSQUxfRVJST1IJMgorI2RlZmluZSBQUFRQX1NUQVJUX0FMUkVBRFlfQ09OTkVDVEVECTMKKyNkZWZpbmUgUFBUUF9TVEFSVF9OT1RfQVVUSE9SSVpFRAk0CisjZGVmaW5lIFBQVFBfU1RBUlRfVU5LTk9XTl9QUk9UT0NPTAk1CisKK3N0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVwbHkgeworCV9fdTE2CXByb3RvY29sVmVyc2lvbjsKKwlfX3U4CXJlc3VsdENvZGU7CisJX191OAlnZW5lcmFsRXJyb3JDb2RlOworCV9fdTMyCWZyYW1pbmdDYXBhYmlsaXR5OworCV9fdTMyCWJlYXJlckNhcGFiaWxpdHk7CisJX191MTYJbWF4Q2hhbm5lbHM7CisJX191MTYJZmlybXdhcmVSZXZpc2lvbjsKKwlfX3U4CWhvc3ROYW1lWzY0XTsKKwlfX3U4CXZlbmRvclN0cmluZ1s2NF07Cit9OworCisvKiBQcHRwU3RvcFJlYXNvbnMgKi8KKyNkZWZpbmUgUFBUUF9TVE9QX05PTkUJCQkxCisjZGVmaW5lIFBQVFBfU1RPUF9QUk9UT0NPTAkJMgorI2RlZmluZSBQUFRQX1NUT1BfTE9DQUxfU0hVVERPV04JMworCitzdHJ1Y3QgUHB0cFN0b3BTZXNzaW9uUmVxdWVzdCB7CisJX191OAlyZWFzb247Cit9OworCisvKiBQcHRwU3RvcFNlc3Npb25SZXN1bHRDb2RlICovCisjZGVmaW5lIFBQVFBfU1RPUF9PSwkJCTEKKyNkZWZpbmUgUFBUUF9TVE9QX0dFTkVSQUxfRVJST1IJCTIKKworc3RydWN0IFBwdHBTdG9wU2Vzc2lvblJlcGx5IHsKKwlfX3U4CXJlc3VsdENvZGU7CisJX191OAlnZW5lcmFsRXJyb3JDb2RlOworfTsKKworc3RydWN0IFBwdHBFY2hvUmVxdWVzdCB7CisJX191MzIgaWRlbnROdW1iZXI7Cit9OworCisvKiBQcHRwRWNob1JlcGx5UmVzdWx0Q29kZSAqLworI2RlZmluZSBQUFRQX0VDSE9fT0sJCQkxCisjZGVmaW5lIFBQVFBfRUNIT19HRU5FUkFMX0VSUk9SCQkyCisKK3N0cnVjdCBQcHRwRWNob1JlcGx5IHsKKwlfX3UzMglpZGVudE51bWJlcjsKKwlfX3U4CXJlc3VsdENvZGU7CisJX191OAlnZW5lcmFsRXJyb3JDb2RlOworCV9fdTE2CXJlc2VydmVkOworfTsKKworLyogUHB0cEZyYW1pbmdUeXBlICovCisjZGVmaW5lIFBQVFBfQVNZTkNfRlJBTUlORwkJMQorI2RlZmluZSBQUFRQX1NZTkNfRlJBTUlORwkJMgorI2RlZmluZSBQUFRQX0RPTlRfQ0FSRV9GUkFNSU5HCQkzCisKKy8qIFBwdHBDYWxsQmVhcmVyVHlwZSAqLworI2RlZmluZSBQUFRQX0FOQUxPR19UWVBFCQkxCisjZGVmaW5lIFBQVFBfRElHSVRBTF9UWVBFCQkyCisjZGVmaW5lIFBQVFBfRE9OVF9DQVJFX0JFQVJFUl9UWVBFCTMKKworc3RydWN0IFBwdHBPdXRDYWxsUmVxdWVzdCB7CisJX191MTYJY2FsbElEOworCV9fdTE2CWNhbGxTZXJpYWxOdW1iZXI7CisJX191MzIJbWluQlBTOworCV9fdTMyCW1heEJQUzsKKwlfX3UzMgliZWFyZXJUeXBlOworCV9fdTMyCWZyYW1pbmdUeXBlOworCV9fdTE2CXBhY2tldFdpbmRvdzsKKwlfX3UxNglwYWNrZXRQcm9jRGVsYXk7CisJX191MTYJcmVzZXJ2ZWQxOworCV9fdTE2CXBob25lTnVtYmVyTGVuZ3RoOworCV9fdTE2CXJlc2VydmVkMjsKKwlfX3U4CXBob25lTnVtYmVyWzY0XTsKKwlfX3U4CXN1YkFkZHJlc3NbNjRdOworfTsKKworLyogUHB0cENhbGxSZXN1bHRDb2RlICovCisjZGVmaW5lIFBQVFBfT1VUQ0FMTF9DT05ORUNUCQkxCisjZGVmaW5lIFBQVFBfT1VUQ0FMTF9HRU5FUkFMX0VSUk9SCTIKKyNkZWZpbmUgUFBUUF9PVVRDQUxMX05PX0NBUlJJRVIJCTMKKyNkZWZpbmUgUFBUUF9PVVRDQUxMX0JVU1kJCTQKKyNkZWZpbmUgUFBUUF9PVVRDQUxMX05PX0RJQUxfVE9ORQk1CisjZGVmaW5lIFBQVFBfT1VUQ0FMTF9USU1FT1VUCQk2CisjZGVmaW5lIFBQVFBfT1VUQ0FMTF9ET05UX0FDQ0VQVAk3CisKK3N0cnVjdCBQcHRwT3V0Q2FsbFJlcGx5IHsKKwlfX3UxNgljYWxsSUQ7CisJX191MTYJcGVlcnNDYWxsSUQ7CisJX191OAlyZXN1bHRDb2RlOworCV9fdTgJZ2VuZXJhbEVycm9yQ29kZTsKKwlfX3UxNgljYXVzZUNvZGU7CisJX191MzIJY29ubmVjdFNwZWVkOworCV9fdTE2CXBhY2tldFdpbmRvdzsKKwlfX3UxNglwYWNrZXRQcm9jRGVsYXk7CisJX191MzIJcGh5c0NoYW5uZWxJRDsKK307CisKK3N0cnVjdCBQcHRwSW5DYWxsUmVxdWVzdCB7CisJX191MTYJY2FsbElEOworCV9fdTE2CWNhbGxTZXJpYWxOdW1iZXI7CisJX191MzIJY2FsbEJlYXJlclR5cGU7CisJX191MzIJcGh5c0NoYW5uZWxJRDsKKwlfX3UxNglkaWFsZWROdW1iZXJMZW5ndGg7CisJX191MTYJZGlhbGluZ051bWJlckxlbmd0aDsKKwlfX3U4CWRpYWxlZE51bWJlcls2NF07CisJX191OAlkaWFsaW5nTnVtYmVyWzY0XTsKKwlfX3U4CXN1YkFkZHJlc3NbNjRdOworfTsKKworLyogUHB0cEluQ2FsbFJlc3VsdENvZGUgKi8KKyNkZWZpbmUgUFBUUF9JTkNBTExfQUNDRVBUCQkxCisjZGVmaW5lIFBQVFBfSU5DQUxMX0dFTkVSQUxfRVJST1IJMgorI2RlZmluZSBQUFRQX0lOQ0FMTF9ET05UX0FDQ0VQVAkJMworCitzdHJ1Y3QgUHB0cEluQ2FsbFJlcGx5IHsKKwlfX3UxNgljYWxsSUQ7CisJX191MTYJcGVlcnNDYWxsSUQ7CisJX191OAlyZXN1bHRDb2RlOworCV9fdTgJZ2VuZXJhbEVycm9yQ29kZTsKKwlfX3UxNglwYWNrZXRXaW5kb3c7CisJX191MTYJcGFja2V0UHJvY0RlbGF5OworCV9fdTE2CXJlc2VydmVkOworfTsKKworc3RydWN0IFBwdHBJbkNhbGxDb25uZWN0ZWQgeworCV9fdTE2CXBlZXJzQ2FsbElEOworCV9fdTE2CXJlc2VydmVkOworCV9fdTMyCWNvbm5lY3RTcGVlZDsKKwlfX3UxNglwYWNrZXRXaW5kb3c7CisJX191MTYJcGFja2V0UHJvY0RlbGF5OworCV9fdTMyCWNhbGxGcmFtaW5nVHlwZTsKK307CisKK3N0cnVjdCBQcHRwQ2xlYXJDYWxsUmVxdWVzdCB7CisJX191MTYJY2FsbElEOworCV9fdTE2CXJlc2VydmVkOworfTsKKworc3RydWN0IFBwdHBDYWxsRGlzY29ubmVjdE5vdGlmeSB7CisJX191MTYJY2FsbElEOworCV9fdTgJcmVzdWx0Q29kZTsKKwlfX3U4CWdlbmVyYWxFcnJvckNvZGU7CisJX191MTYJY2F1c2VDb2RlOworCV9fdTE2CXJlc2VydmVkOworCV9fdTgJY2FsbFN0YXRpc3RpY3NbMTI4XTsKK307CisKK3N0cnVjdCBQcHRwV2FuRXJyb3JOb3RpZnkgeworCV9fdTE2CXBlZXJzQ2FsbElEOworCV9fdTE2CXJlc2VydmVkOworCV9fdTMyCWNyY0Vycm9yczsKKwlfX3UzMglmcmFtaW5nRXJyb3JzOworCV9fdTMyCWhhcmR3YXJlT3ZlclJ1bnM7CisJX191MzIJYnVmZmVyT3ZlclJ1bnM7CisJX191MzIJdGltZW91dEVycm9yczsKKwlfX3UzMglhbGlnbm1lbnRFcnJvcnM7Cit9OworCitzdHJ1Y3QgUHB0cFNldExpbmtJbmZvIHsKKwlfX3UxNglwZWVyc0NhbGxJRDsKKwlfX3UxNglyZXNlcnZlZDsKKwlfX3UzMglzZW5kQWNjbTsKKwlfX3UzMglyZWN2QWNjbTsKK307CisKKworc3RydWN0IHBwdHBfcHJpdl9kYXRhIHsKKwlfX3UxNgljYWxsX2lkOworCV9fdTE2CW1jYWxsX2lkOworCV9fdTE2CXBjYWxsX2lkOworfTsKKwordW5pb24gcHB0cF9jdHJsX3VuaW9uIHsKKwkJc3RydWN0IFBwdHBTdGFydFNlc3Npb25SZXF1ZXN0CXNyZXE7CisJCXN0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVwbHkJc3JlcDsKKwkJc3RydWN0IFBwdHBTdG9wU2Vzc2lvblJlcXVlc3QJc3RyZXE7CisJCXN0cnVjdCBQcHRwU3RvcFNlc3Npb25SZXBseQlzdHJlcDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgUHB0cE91dENhbGxSZXF1ZXN0ICAgICAgIG9jcmVxOworICAgICAgICAgICAgICAgIHN0cnVjdCBQcHRwT3V0Q2FsbFJlcGx5ICAgICAgICAgb2NhY2s7CisgICAgICAgICAgICAgICAgc3RydWN0IFBwdHBJbkNhbGxSZXF1ZXN0ICAgICAgICBpY3JlcTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgUHB0cEluQ2FsbFJlcGx5ICAgICAgICAgIGljYWNrOworICAgICAgICAgICAgICAgIHN0cnVjdCBQcHRwSW5DYWxsQ29ubmVjdGVkICAgICAgaWNjb247CisJCXN0cnVjdCBQcHRwQ2xlYXJDYWxsUmVxdWVzdAljbHJyZXE7CisgICAgICAgICAgICAgICAgc3RydWN0IFBwdHBDYWxsRGlzY29ubmVjdE5vdGlmeSBkaXNjOworICAgICAgICAgICAgICAgIHN0cnVjdCBQcHRwV2FuRXJyb3JOb3RpZnkgICAgICAgd2FuZXJyOworICAgICAgICAgICAgICAgIHN0cnVjdCBQcHRwU2V0TGlua0luZm8gICAgICAgICAgc2V0bGluazsKK307CisKK2V4dGVybiBpbnQKKygqaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCkoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJCSAgdW5pb24gcHB0cF9jdHJsX3VuaW9uICpwcHRwUmVxKTsKKworZXh0ZXJuIGludAorKCppcF9uYXRfcHB0cF9ob29rX2luYm91bmQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICBzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgKmN0bGgsCisJCQkgIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSk7CisKK2V4dGVybiBpbnQKKygqaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKShzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwX29yaWcsCisJCQkgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cF9yZXBseSk7CisKK2V4dGVybiB2b2lkCisoKmlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pKHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0NPTk5UUkFDS19QUFRQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwOTBlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oCkBAIC0wLDAgKzEsMTE0IEBACisjaWZuZGVmIF9DT05OVFJBQ0tfUFJPVE9fR1JFX0gKKyNkZWZpbmUgX0NPTk5UUkFDS19QUk9UT19HUkVfSAorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyogR1JFIFBST1RPQ09MIEhFQURFUiAqLworCisvKiBHUkUgVmVyc2lvbiBmaWVsZCAqLworI2RlZmluZSBHUkVfVkVSU0lPTl8xNzAxCTB4MAorI2RlZmluZSBHUkVfVkVSU0lPTl9QUFRQCTB4MQorCisvKiBHUkUgUHJvdG9jb2wgZmllbGQgKi8KKyNkZWZpbmUgR1JFX1BST1RPQ09MX1BQVFAJMHg4ODBCCisKKy8qIEdSRSBGbGFncyAqLworI2RlZmluZSBHUkVfRkxBR19DCQkweDgwCisjZGVmaW5lIEdSRV9GTEFHX1IJCTB4NDAKKyNkZWZpbmUgR1JFX0ZMQUdfSwkJMHgyMAorI2RlZmluZSBHUkVfRkxBR19TCQkweDEwCisjZGVmaW5lIEdSRV9GTEFHX0EJCTB4ODAKKworI2RlZmluZSBHUkVfSVNfQyhmKQkoKGYpJkdSRV9GTEFHX0MpCisjZGVmaW5lIEdSRV9JU19SKGYpCSgoZikmR1JFX0ZMQUdfUikKKyNkZWZpbmUgR1JFX0lTX0soZikJKChmKSZHUkVfRkxBR19LKQorI2RlZmluZSBHUkVfSVNfUyhmKQkoKGYpJkdSRV9GTEFHX1MpCisjZGVmaW5lIEdSRV9JU19BKGYpCSgoZikmR1JFX0ZMQUdfQSkKKworLyogR1JFIGlzIGEgbWVzczogRm91ciBkaWZmZXJlbnQgc3RhbmRhcmRzICovCitzdHJ1Y3QgZ3JlX2hkciB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191MTYJcmVjOjMsCisJCXNycjoxLAorCQlzZXE6MSwKKwkJa2V5OjEsCisJCXJvdXRpbmc6MSwKKwkJY3N1bToxLAorCQl2ZXJzaW9uOjMsCisJCXJlc2VydmVkOjQsCisJCWFjazoxOworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191MTYJY3N1bToxLAorCQlyb3V0aW5nOjEsCisJCWtleToxLAorCQlzZXE6MSwKKwkJc3JyOjEsCisJCXJlYzozLAorCQlhY2s6MSwKKwkJcmVzZXJ2ZWQ6NCwKKwkJdmVyc2lvbjozOworI2Vsc2UKKyNlcnJvciAiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKKyNlbmRpZgorCV9fdTE2CXByb3RvY29sOworfTsKKworLyogbW9kaWZpZWQgR1JFIGhlYWRlciBmb3IgUFBUUCAqLworc3RydWN0IGdyZV9oZHJfcHB0cCB7CisJX191OCAgZmxhZ3M7CQkvKiBiaXRmaWVsZCAqLworCV9fdTggIHZlcnNpb247CQkvKiBzaG91bGQgYmUgR1JFX1ZFUlNJT05fUFBUUCAqLworCV9fdTE2IHByb3RvY29sOwkJLyogc2hvdWxkIGJlIEdSRV9QUk9UT0NPTF9QUFRQICovCisJX191MTYgcGF5bG9hZF9sZW47CS8qIHNpemUgb2YgcHBwIHBheWxvYWQsIG5vdCBpbmMuIGdyZSBoZWFkZXIgKi8KKwlfX3UxNiBjYWxsX2lkOwkJLyogcGVlcidzIGNhbGxfaWQgZm9yIHRoaXMgc2Vzc2lvbiAqLworCV9fdTMyIHNlcTsJCS8qIHNlcXVlbmNlIG51bWJlci4gIFByZXNlbnQgaWYgUz09MSAqLworCV9fdTMyIGFjazsJCS8qIHNlcSBudW1iZXIgb2YgaGlnaGVzdCBwYWNrZXQgcmVjaWV2ZWQgYnkgKi8KKwkJCQkvKiAgc2VuZGVyIGluIHRoaXMgc2Vzc2lvbiAqLworfTsKKworCisvKiB0aGlzIGlzIHBhcnQgb2YgaXBfY29ubnRyYWNrICovCitzdHJ1Y3QgaXBfY3RfZ3JlIHsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtX3RpbWVvdXQ7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3Q7CitzdHJ1Y3QgaXBfY29ubnRyYWNrOworCisvKiBzdHJ1Y3R1cmUgZm9yIG9yaWdpbmFsIDwtPiByZXBseSBrZXltYXAgKi8KK3N0cnVjdCBpcF9jdF9ncmVfa2V5bWFwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIHR1cGxlOworfTsKKworLyogYWRkIG5ldyB0dXBsZS0+a2V5X3JlcGx5IHBhaXIgdG8ga2V5bWFwICovCitpbnQgaXBfY3RfZ3JlX2tleW1hcF9hZGQoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdCwKKwkJCSBpbnQgcmVwbHkpOworCisvKiBkZWxldGUga2V5bWFwIGVudHJpZXMgKi8KK3ZvaWQgaXBfY3RfZ3JlX2tleW1hcF9kZXN0cm95KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KTsKKworCisvKiBnZXQgcG9pbnRlciB0byBncmUga2V5LCBpZiBwcmVzZW50ICovCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdCAqZ3JlX2tleShzdHJ1Y3QgZ3JlX2hkciAqZ3JlaCkKK3sKKwlpZiAoIWdyZWgtPmtleSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGdyZWgtPmNzdW0gfHwgZ3JlaC0+cm91dGluZykKKwkJcmV0dXJuICh1X2ludDMyX3QgKikgKGdyZWgrc2l6ZW9mKCpncmVoKSs0KTsKKwlyZXR1cm4gKHVfaW50MzJfdCAqKSAoZ3JlaCtzaXplb2YoKmdyZWgpKTsKK30KKworLyogZ2V0IHBvaW50ZXIgb3QgZ3JlIGNzdW0sIGlmIHByZXNlbnQgKi8KK3N0YXRpYyBpbmxpbmUgdV9pbnQxNl90ICpncmVfY3N1bShzdHJ1Y3QgZ3JlX2hkciAqZ3JlaCkKK3sKKwlpZiAoIWdyZWgtPmNzdW0pCisJCXJldHVybiBOVUxMOworCXJldHVybiAodV9pbnQxNl90ICopIChncmVoK3NpemVvZigqZ3JlaCkpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0NPTk5UUkFDS19QUk9UT19HUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKaW5kZXggYzMzZjBiNS4uMTRkYzBmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oCkBAIC0yOCw2ICsyOCw5IEBACiAJc3RydWN0IHsKIAkJdV9pbnQxNl90IHBvcnQ7CiAJfSBzY3RwOworCXN0cnVjdCB7CisJCXVfaW50MTZfdCBrZXk7CS8qIGtleSBpcyAzMmJpdCwgcHB0cCBvbmx5IHVzZXMgMTYgKi8KKwl9IGdyZTsKIH07CiAKIC8qIFRoZSBtYW5pcHVsYWJsZSBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KQEAgLTYxLDYgKzY0LDEwIEBACiAJCQlzdHJ1Y3QgewogCQkJCXVfaW50MTZfdCBwb3J0OwogCQkJfSBzY3RwOworCQkJc3RydWN0IHsKKwkJCQl1X2ludDE2X3Qga2V5OwkvKiBrZXkgaXMgMzJiaXQsIAorCQkJCQkJICogcHB0cCBvbmx5IHVzZXMgMTYgKi8KKwkJCX0gZ3JlOwogCQl9IHU7CiAKIAkJLyogVGhlIHByb3RvY29sLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcHB0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcHB0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjY2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9wcHRwLmgKQEAgLTAsMCArMSwxMSBAQAorLyogUFBUUCBjb25zdGFudHMgYW5kIHN0cnVjdHMgKi8KKyNpZm5kZWYgX05BVF9QUFRQX0gKKyNkZWZpbmUgX05BVF9QUFRQX0gKKworLyogY29ubnRyYWNrIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGlwX25hdF9wcHRwIHsKKwl1X2ludDE2X3QgcG5zX2NhbGxfaWQ7CQkvKiBOQVQnZWQgUE5TIGNhbGwgaWQgKi8KKwl1X2ludDE2X3QgcGFjX2NhbGxfaWQ7CQkvKiBOQVQnZWQgUEFDIGNhbGwgaWQgKi8KK307CisKKyNlbmRpZiAvKiBfTkFUX1BQVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAppbmRleCA1OGM3MmE1Li41OWY3MGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaApAQCAtNDU1LDYgKzQ1NSw5IEBACiAKIC8qIENoZWNrIGZvciBhbiBleHRlbnNpb24gKi8KIGV4dGVybiBpbnQgaXA2dF9leHRfaGRyKHU4IG5leHRoZHIpOworLyogZmluZCBzcGVjaWZpZWQgaGVhZGVyIGFuZCBnZXQgb2Zmc2V0IHRvIGl0ICovCitleHRlcm4gaW50IGlwdjZfZmluZF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpvZmZzZXQsCisJCQkgdTggdGFyZ2V0KTsKIAogI2RlZmluZSBJUDZUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBpcDZ0X2VudHJ5KS0xKSkgJiB+KF9fYWxpZ25vZl9fKHN0cnVjdCBpcDZ0X2VudHJ5KS0xKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCA3YmJkMjU5Li5iZGViZGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBORVRMSU5LX0lQNl9GVwkJMTMKICNkZWZpbmUgTkVUTElOS19ETlJUTVNHCQkxNAkvKiBERUNuZXQgcm91dGluZyBtZXNzYWdlcyAqLwogI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UCTE1CS8qIEtlcm5lbCBtZXNzYWdlcyB0byB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgTkVUTElOS19HRU5FUklDCQkxNgogCiAjZGVmaW5lIE1BWF9MSU5LUyAzMgkJCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC94ZHI0LmggYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyNC5oCmluZGV4IDRkMjRkNjUuLjg5MDM2ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC94ZHI0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaApAQCAtNDM4LDE3ICs0MzgsMjIgQEAKIGV4dGVybiBpbnQgbmZzZDRfcHJvY2Vzc19vcGVuMihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCAKIAkJc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pOwogZXh0ZXJuIGludCBuZnNkNF9vcGVuX2NvbmZpcm0oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgCi0JCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0gKm9jKTsKKwkJc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW5fY29uZmlybSAqb2MsCisJCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKiopOwogZXh0ZXJuICBpbnQgbmZzZDRfY2xvc2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgCi0JCXN0cnVjdCBuZnNkNF9jbG9zZSAqY2xvc2UpOworCQlzdHJ1Y3QgbmZzZDRfY2xvc2UgKmNsb3NlLAorCQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqcmVwbGF5X293bmVyKTsKIGV4dGVybiBpbnQgbmZzZDRfb3Blbl9kb3duZ3JhZGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgCi0JCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZSAqb2QpOworCQlzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfb3Blbl9kb3duZ3JhZGUgKm9kLAorCQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqcmVwbGF5X293bmVyKTsKIGV4dGVybiBpbnQgbmZzZDRfbG9jayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCAKLQkJc3RydWN0IG5mc2Q0X2xvY2sgKmxvY2spOworCQlzdHJ1Y3QgbmZzZDRfbG9jayAqbG9jaywKKwkJc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcik7CiBleHRlcm4gaW50IG5mc2Q0X2xvY2t0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIAogCQlzdHJ1Y3QgbmZzZDRfbG9ja3QgKmxvY2t0KTsKIGV4dGVybiBpbnQgbmZzZDRfbG9ja3Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgCi0JCXN0cnVjdCBuZnNkNF9sb2NrdSAqbG9ja3UpOworCQlzdHJ1Y3QgbmZzZDRfbG9ja3UgKmxvY2t1LAorCQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqcmVwbGF5X293bmVyKTsKIGV4dGVybiBpbnQKIG5mc2Q0X3JlbGVhc2VfbG9ja293bmVyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCiAJCXN0cnVjdCBuZnNkNF9yZWxlYXNlX2xvY2tvd25lciAqcmxvY2tvd25lcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGVlMGFiN2E1Li5jNDlkMjhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNDQ3LDYgKzQ0NywxMCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU183NTQyCTB4MTIwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU183NTQzCTB4MTIwMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU183NTQxCTB4MTIwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjEwCTB4NjAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjEyCTB4NjAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjE1CTB4NjAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180MjgxCTB4NjAwNQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSUJNCQkweDEwMTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fRklSRV9DT1JBTAkweDAwMGEKQEAgLTQ4Nyw2ICs0OTEsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDIJMHg5MDYwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUQJCTB4MTAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQgkJMHgxMTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFCQkweDIwMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTEFOQ0VfSE9NRQkweDIwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0NTSQkJMHgyMDIwCkBAIC02ODIsNyArNjg3LDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MzI2CQkweDYzMjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDAxCQkweDcwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDEyCQkweDcwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDEzCQkweDcwMTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDE2CQkweDcwMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDE4CQkweDcwMTgKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0hQCQkweDEwM2MKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRUcJMHgxMDA1CkBAIC03MTMsMTAgKzcyMCwxMiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfRVZFUkVTVAkweDEyODIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX0FVWAkweDEyOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX1JNUDMJMHgxMzAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfQ0lTUwkJMHgzMjEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0EJCTB4MzIyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1NCCQkweDMyMjIKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9aWDJfSU9DCTB4NDAzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDCQkweDMyMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTRAkJMHgzMjM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfWlgyX0lPQwkweDQwMzEKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BDVEVDSAkJMHgxMDQyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENURUNIX1JaMTAwMAkweDEwMDAKQEAgLTk5MSw2ICsxMDAwLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODQ5QQkweDAzNTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4XzEJMHgwMzZlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OAkweDA4NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc5CTB4MDg3OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NDc0CTB4ODQ3NAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lFUlJBCQkweDEwYTgKQEAgLTExMDksNiArMTExOSw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTUFHSUNHUkFQSF9OTTIxNjAgMHgwMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTUFHSUNNRURJQV8yNTZBViAgICAgICAweDAwMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19NQUdJQ0dSQVBIXzEyOFpWUExVUyAgIDB4MDA4MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU8gMHg4MDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZaWF9BVURJTyAweDgwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlhMX1BMVVNfQVVESU8gMHg4MDE2CiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BU1AJCTB4MTBjZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FTUF9BQlA5NDAJMHgxMjAwCkBAIC0xMTU1LDEwICsxMTY4LDEzIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJfU01CVVMJMHgwMDY0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJfSURFCTB4MDA2NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMgkJMHgwMDY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJfTU9ERU0JCTB4MDA2OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyX0FVRElPCQkweDAwNmEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfU01CVVMJMHgwMDg0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJTX0lERQkweDAwODUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzQJCTB4MDA4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyU19NT0RFTQkweDAwODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4X0FVRElPCQkweDAwOGEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzUJCTB4MDA4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyU19TQVRBCTB4MDA4ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9JVE5UMgkJMHgwMEEwCkBAIC0xMTczLDYgKzExODksNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzX1NNQlVTCTB4MDBkNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzX0lERQkweDAwZDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMJCTB4MDBkNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AzX01PREVNCQkweDAwZDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19BVURJTwkJMHgwMGRhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF83CQkweDAwZGYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1MJCTB4MDBlMQpAQCAtMTE4MCw2ICsxMTk3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU01CVVMJMHgwMGU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTX0lERQkweDAwZTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzYJCTB4MDBlNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzhTX0FVRElPCQkweDAwZWEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU0FUQTIJMHgwMGVlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfU0RSCTB4MDEwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0REUgkweDAxMDEKQEAgLTEyMzAsNiArMTI0OCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDFfQVVESU8JCTB4MDFiMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfU01CVVMJMHgwMWI0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9JREUJCTB4MDFiYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AxX01PREVNCQkweDAxYzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEJCTB4MDFjMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyCQkweDAxZTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTMJCTB4MDIwMApAQCAtMTMzNCw2ICsxMzUzLDEzIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTY5CTB4ODE2OQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfWElMSU5YCQkweDEwZWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTk2CTB4M2ZjMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOAkweDNmYzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPCTB4M2ZjMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QQURfT1JfUFNUIDB4M2ZjMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMCTB4M2ZjNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCAweDNmYzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1BfTUFESSAweDNmYzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UVVJCT1BBTQkJMHg0MDIwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUlVFVklTSU9OCTB4MTBmYQpAQCAtMTgwOSw2ICsxODM1LDE0IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NjgJMHgxOTY4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0FVRElPUENJCTB4MTk2OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19FU1MxOTc4CTB4MTk3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPXzEJMHgxOTg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk8JMHgxOTg5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0NBTllPTjNEXzJMRQkweDE5OTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfQ0FOWU9OM0RfMgkweDE5OTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzMJMHgxOTk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zXzEJMHgxOTk5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zX0hXCTB4MTk5YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NQUVTVFJPM18yCTB4MTk5YgogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0FUU0FHRU0JCTB4MTI2NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVFNBR0VNX05JQ0NZCTB4MTAxNgpAQCAtMTk2OCw2ICsyMDAyLDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MTUNfU1NJCQkweDAwMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MTUNfVDEJCTB4MDAwNgogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUFSSUFOCQkweDEzODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJJQU5fUFJPRElGX1BMVVMgMHgyMDQ4CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORVRHRUFSCQkweDEzODUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRHRUFSX0dBNjIwCTB4NjIwYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVEdFQVJfR0E2MjIJMHg2MjJhCkBAIC0yMDU2LDYgKzIwOTMsMTAgQEAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USU1FRElBCQkweDE0MDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USU1FRElBXzE4ODkJMHg3MTY4CiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JQ0UJCTB4MTQxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lDRV8xNzEyCQkweDE3MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WVDE3MjQJCTB4MTcyNAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfT1hTRU1JCQkweDE0MTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTJQQ0k4NDAJMHg4NDAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTU0CTB4OTUwMQpAQCAtMjIxMiw2ICsyMjUzLDkgQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lORklOSUNPTgkJMHgxODIwCiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSVRFQ09NCQkweDE4MmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSVRFQ09NX0RDMTA1VjIJMHgzMDY5CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1BTUElOCQkweDE4NjcKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RESSAgICAgICAgICAgICAgIDB4MTkyRQpAQCAtMjUzNiw2ICsyNTgwLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0JYXzEJMHg3MTkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNCWF8yCTB4NzE5MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzQ0ME1YCTB4NzE5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzQ0ME1YXzYJMHg3MTk2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNNWF8wCTB4NzE5OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMQkweDcxOTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M01YXzIJMHg3MTlhCkBAIC0yNjQyLDYgKzI2ODcsMTEgQEAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UVFRFQ0gJCTB4MDM1NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUVEVDSF9NQzMyMgkweDAwMEEKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUJMHhlYTYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMgkweDk4OTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTMyX1BSTwkweDk4OTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTMyXzgJMHg5ODk4CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BUksJCTB4ZWRkOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSS19TVElORwkJMHhhMDkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJLX1NUSU5HQVJLCTB4YTA5OQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wa3RjZHZkLmggYi9pbmNsdWRlL2xpbnV4L3BrdGNkdmQuaAppbmRleCA0YjMyYmNlLi4yYzE3N2U0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdGNkdmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BrdGNkdmQuaApAQCAtMTY2LDYgKzE2Niw5IEBACiAvKgogICogMzIgYnVmZmVycyBvZiAyMDQ4IGJ5dGVzCiAgKi8KKyNpZiAoUEFHRV9TSVpFICUgQ0RfRlJBTUVTSVpFKSAhPSAwCisjZXJyb3IgIlBBR0VfU0laRSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgQ0RfRlJBTUVTSVpFIgorI2VuZGlmCiAjZGVmaW5lIFBBQ0tFVF9NQVhfU0laRQkJMzIKICNkZWZpbmUgUEFHRVNfUEVSX1BBQ0tFVAkoUEFDS0VUX01BWF9TSVpFICogQ0RfRlJBTUVTSVpFIC8gUEFHRV9TSVpFKQogI2RlZmluZSBQQUNLRVRfTUFYX1NFQ1RPUlMJKFBBQ0tFVF9NQVhfU0laRSAqIENEX0ZSQU1FU0laRSA+PiA5KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDM4Yzg2NTQuLjQ5ZTYxN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEyMSw2ICsxMjEsMTcgQEAKICNkZWZpbmUgc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCVwKIAlzZXRfbWIoKHRzayktPnN0YXRlLCAoc3RhdGVfdmFsdWUpKQogCisvKgorICogc2V0X2N1cnJlbnRfc3RhdGUoKSBpbmNsdWRlcyBhIGJhcnJpZXIgc28gdGhhdCB0aGUgd3JpdGUgb2YgY3VycmVudC0+c3RhdGUKKyAqIGlzIGNvcnJlY3RseSBzZXJpYWxpc2VkIHdydCB0aGUgY2FsbGVyJ3Mgc3Vic2VxdWVudCB0ZXN0IG9mIHdoZXRoZXIgdG8KKyAqIGFjdHVhbGx5IHNsZWVwOgorICoKKyAqCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKyAqCWlmIChkb19pX25lZWRfdG9fc2xlZXAoKSkKKyAqCQlzY2hlZHVsZSgpOworICoKKyAqIElmIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCBzdWNoIHNlcmlhbGlzYXRpb24gdGhlbiB1c2UgX19zZXRfY3VycmVudF9zdGF0ZSgpCisgKi8KICNkZWZpbmUgX19zZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQlcCiAJZG8geyBjdXJyZW50LT5zdGF0ZSA9IChzdGF0ZV92YWx1ZSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDU1YjAyZTEuLjBlNDM0NjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTE5MDcsNiArMTkwNywxMSBAQAogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX3NlY3VyaXR5CShzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKTsKIGV4dGVybiBpbnQgbW9kX3JlZ19zZWN1cml0eQkoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcyk7CiBleHRlcm4gaW50IG1vZF91bnJlZ19zZWN1cml0eQkoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcyk7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqc2VjdXJpdHlmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCisJCQkJCSAgICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyk7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqc2VjdXJpdHlmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCk7CitleHRlcm4gdm9pZCBzZWN1cml0eWZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCiAKICNlbHNlIC8qIENPTkZJR19TRUNVUklUWSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDQyNWY1OGMuLmE2ZjAzZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTUwOCw1ICs1MDgsNyBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX2lvcHJpb19zZXQoaW50IHdoaWNoLCBpbnQgd2hvLCBpbnQgaW9wcmlvKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfaW9wcmlvX2dldChpbnQgd2hpY2gsIGludCB3aG8pOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRfbWVtcG9saWN5KGludCBtb2RlLCB1bnNpZ25lZCBsb25nIF9fdXNlciAqbm1hc2ssCisJCQkJCXVuc2lnbmVkIGxvbmcgbWF4bm9kZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZnJjLmggYi9pbmNsdWRlL2xpbnV4L3RmcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGFiNzgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90ZnJjLmgKQEAgLTAsMCArMSwzNSBAQAorI2lmbmRlZiBfTElOVVhfVEZSQ19IXworI2RlZmluZSBfTElOVVhfVEZSQ19IXworLyoKKyAqICBpbmNsdWRlL2xpbnV4L3RmcmMuaAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIFVuaXZlcnNpdHkgb2YgV2Fpa2F0bywgSGFtaWx0b24sIE5ldyBaZWFsYW5kLgorICogIENvcHlyaWdodCAoYykgMjAwNSBJYW4gTWNEb25hbGQgPGlhbTRAY3Mud2Fpa2F0by5hYy5uej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAzIE5pbHMtRXJpayBNYXR0c3NvbiwgSm9hY2ltIEhhZ2dtYXJrLCBNYWdudXMgRXJpeHpvbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdGZyY19yeF9pbmZvIHsKKyAgCV9fdTMyIHRmcmNyeF94X3JlY3Y7CisJX191MzIgdGZyY3J4X3J0dDsKKyAgCV9fdTMyIHRmcmNyeF9wOworfTsKKworc3RydWN0IHRmcmNfdHhfaW5mbyB7CisJX191MzIgdGZyY3R4X3g7CisJX191MzIgdGZyY3R4X3hfcmVjdjsKKwlfX3UzMiB0ZnJjdHhfeF9jYWxjOworCV9fdTMyIHRmcmN0eF9ydHQ7CisJX191MzIgdGZyY3R4X3A7CisJX191MzIgdGZyY3R4X3J0bzsKKwlfX3UzMiB0ZnJjdHhfaXBpOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9URlJDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCBmNjIzYTMzLi44OWEwNTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTYwLDEyICs2MCwxNyBAQAogCSAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQogCiBlbnVtIHY0bDJfYnVmX3R5cGUgewotCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAgPSAxLAotCVY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICAgPSAyLAotCVY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSAgPSAzLAotCVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgICAgPSA0LAotCVY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVCAgICAgPSA1LAotCVY0TDJfQlVGX1RZUEVfUFJJVkFURSAgICAgICAgPSAweDgwLAorCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAgICAgID0gMSwKKwlWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAgICAgICA9IDIsCisJVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZICAgICAgPSAzLAorCVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgICAgICAgID0gNCwKKwlWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQgICAgICAgICA9IDUsCisjaWYgMQorCS8qIEV4cGVyaW1lbnRhbCBTbGljZWQgVkJJICovCisJVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgPSA2LAorCVY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgID0gNywKKyNlbmRpZgorCVY0TDJfQlVGX1RZUEVfUFJJVkFURSAgICAgICAgICAgID0gMHg4MCwKIH07CiAKIGVudW0gdjRsMl9jdHJsX3R5cGUgewpAQCAtMTQ5LDIwICsxNTQsMjQgQEAKIH07CiAKIC8qIFZhbHVlcyBmb3IgJ2NhcGFiaWxpdGllcycgZmllbGQgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fQ0FQVFVSRQkweDAwMDAwMDAxICAvKiBJcyBhIHZpZGVvIGNhcHR1cmUgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVAkweDAwMDAwMDAyICAvKiBJcyBhIHZpZGVvIG91dHB1dCBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1ZFUkxBWQkweDAwMDAwMDA0ICAvKiBDYW4gZG8gdmlkZW8gb3ZlcmxheSAqLwotI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRQkweDAwMDAwMDEwICAvKiBJcyBhIFZCSSBjYXB0dXJlIGRldmljZSAqLwotI2RlZmluZSBWNEwyX0NBUF9WQklfT1VUUFVUCTB4MDAwMDAwMjAgIC8qIElzIGEgVkJJIG91dHB1dCBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUJMHgwMDAwMDEwMCAgLyogUkRTIGRhdGEgY2FwdHVyZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCSAgICAgICAgMHgwMDAwMDAwMSAgLyogSXMgYSB2aWRlbyBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQJICAgICAgICAweDAwMDAwMDAyICAvKiBJcyBhIHZpZGVvIG91dHB1dCBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1ZFUkxBWQkgICAgICAgIDB4MDAwMDAwMDQgIC8qIENhbiBkbyB2aWRlbyBvdmVybGF5ICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9DQVBUVVJFCSAgICAgICAgMHgwMDAwMDAxMCAgLyogSXMgYSByYXcgVkJJIGNhcHR1cmUgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9PVVRQVVQJICAgICAgICAweDAwMDAwMDIwICAvKiBJcyBhIHJhdyBWQkkgb3V0cHV0IGRldmljZSAqLworI2lmIDEKKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFCTB4MDAwMDAwNDAgIC8qIElzIGEgc2xpY2VkIFZCSSBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVAkweDAwMDAwMDgwICAvKiBJcyBhIHNsaWNlZCBWQkkgb3V0cHV0IGRldmljZSAqLworI2VuZGlmCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19DQVBUVVJFCSAgICAgICAgMHgwMDAwMDEwMCAgLyogUkRTIGRhdGEgY2FwdHVyZSAqLwogCi0jZGVmaW5lIFY0TDJfQ0FQX1RVTkVSCQkweDAwMDEwMDAwICAvKiBoYXMgYSB0dW5lciAqLwotI2RlZmluZSBWNEwyX0NBUF9BVURJTwkJMHgwMDAyMDAwMCAgLyogaGFzIGF1ZGlvIHN1cHBvcnQgKi8KLSNkZWZpbmUgVjRMMl9DQVBfUkFESU8JCTB4MDAwNDAwMDAgIC8qIGlzIGEgcmFkaW8gZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1RVTkVSCQkgICAgICAgIDB4MDAwMTAwMDAgIC8qIGhhcyBhIHR1bmVyICovCisjZGVmaW5lIFY0TDJfQ0FQX0FVRElPCQkgICAgICAgIDB4MDAwMjAwMDAgIC8qIGhhcyBhdWRpbyBzdXBwb3J0ICovCisjZGVmaW5lIFY0TDJfQ0FQX1JBRElPCQkgICAgICAgIDB4MDAwNDAwMDAgIC8qIGlzIGEgcmFkaW8gZGV2aWNlICovCiAKLSNkZWZpbmUgVjRMMl9DQVBfUkVBRFdSSVRFICAgICAgMHgwMTAwMDAwMCAgLyogcmVhZC93cml0ZSBzeXN0ZW1jYWxscyAqLwotI2RlZmluZSBWNEwyX0NBUF9BU1lOQ0lPICAgICAgICAweDAyMDAwMDAwICAvKiBhc3luYyBJL08gKi8KLSNkZWZpbmUgVjRMMl9DQVBfU1RSRUFNSU5HICAgICAgMHgwNDAwMDAwMCAgLyogc3RyZWFtaW5nIEkvTyBpb2N0bHMgKi8KKyNkZWZpbmUgVjRMMl9DQVBfUkVBRFdSSVRFICAgICAgICAgICAgICAweDAxMDAwMDAwICAvKiByZWFkL3dyaXRlIHN5c3RlbWNhbGxzICovCisjZGVmaW5lIFY0TDJfQ0FQX0FTWU5DSU8gICAgICAgICAgICAgICAgMHgwMjAwMDAwMCAgLyogYXN5bmMgSS9PICovCisjZGVmaW5lIFY0TDJfQ0FQX1NUUkVBTUlORyAgICAgICAgICAgICAgMHgwNDAwMDAwMCAgLyogc3RyZWFtaW5nIEkvTyBpb2N0bHMgKi8KIAogLyoKICAqCVYgSSBEIEUgTyAgIEkgTSBBIEcgRSAgIEYgTyBSIE0gQSBUCkBAIC04MDksNiArODE4LDggQEAKICAqCURhdGEgc2VydmljZXMgQVBJIGJ5IE1pY2hhZWwgU2NoaW1lawogICovCiAKKy8qIFJhdyBWQkkgKi8KKwogc3RydWN0IHY0bDJfdmJpX2Zvcm1hdAogewogCV9fdTMyCXNhbXBsaW5nX3JhdGU7CQkvKiBpbiAxIEh6ICovCkBAIC04MjUsNiArODM2LDU0IEBACiAjZGVmaW5lIFY0TDJfVkJJX1VOU1lOQwkJKDE8PCAwKQogI2RlZmluZSBWNEwyX1ZCSV9JTlRFUkxBQ0VECSgxPDwgMSkKIAorI2lmIDEKKy8qIFNsaWNlZCBWQkkKKyAqCisgKiAgICBUaGlzIGltcGxlbWVudHMgaXMgYSBwcm9wb3NhbCBWNEwyIEFQSSB0byBhbGxvdyBTTElDRUQgVkJJCisgKiByZXF1aXJlZCBmb3Igc29tZSBoYXJkd2FyZSBlbmNvZGVycy4gSXQgc2hvdWxkIGNoYW5nZSB3aXRob3V0CisgKiBub3RpY2UgaW4gdGhlIGRlZmluaXRpdmUgaW1wbGVtZW50YXRpb24uCisgKi8KKworc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQKK3sKKyAgICAgICAgX191MTYgICBzZXJ2aWNlX3NldDsKKyAgICAgICAgLyogc2VydmljZV9saW5lc1swXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBmaXJzdCBmaWVsZAorICAgICAgICAgICBzZXJ2aWNlX2xpbmVzWzFdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIHNlY29uZCBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxdWFscyBmcmFtZSBsaW5lcyAzMTMtMzM2IGZvciA2MjUgbGluZSB2aWRlbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkcywgMjYzLTI4NiBmb3IgNTI1IGxpbmUgc3RhbmRhcmRzKSAqLworICAgICAgICBfX3UxNiAgIHNlcnZpY2VfbGluZXNbMl1bMjRdOworICAgICAgICBfX3UzMiAgIGlvX3NpemU7CisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMl07ICAgICAgICAgICAgLyogbXVzdCBiZSB6ZXJvICovCit9OworCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgICAgICAgICAgKDB4MDAwMSkKKyNkZWZpbmUgVjRMMl9TTElDRURfVlBTICAgICAgICAgICAgICAgICAoMHgwNDAwKQorI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSAgICAgICAgICgweDEwMDApCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgICAgICAgICAgICAgKDB4NDAwMCkKKworI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNTI1ICAgICAgICAgICAgIChWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSkKKyNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzYyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfVEVMRVRFWFRfQiB8IFY0TDJfU0xJQ0VEX1ZQUyB8IFY0TDJfU0xJQ0VEX1dTU182MjUpCisKK3N0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwCit7CisgICAgICAgIF9fdTE2ICAgc2VydmljZV9zZXQ7CisgICAgICAgIC8qIHNlcnZpY2VfbGluZXNbMF1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgZmlyc3QgZmllbGQKKyAgICAgICAgICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZHMsIDI2My0yODYgZm9yIDUyNSBsaW5lIHN0YW5kYXJkcykgKi8KKyAgICAgICAgX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKKyAgICAgICAgX191MzIgICByZXNlcnZlZFs0XTsgICAgLyogbXVzdCBiZSAwICovCit9OworCitzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEKK3sKKyAgICAgICAgX191MzIgICBpZDsKKyAgICAgICAgX191MzIgICBmaWVsZDsgICAgICAgICAgLyogMDogZmlyc3QgZmllbGQsIDE6IHNlY29uZCBmaWVsZCAqLworICAgICAgICBfX3UzMiAgIGxpbmU7ICAgICAgICAgICAvKiAxLTIzICovCisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIG11c3QgYmUgMCAqLworICAgICAgICBfX3U4ICAgIGRhdGFbNDhdOworfTsKKyNlbmRpZgogCiAvKgogICoJQSBHIEcgUiBFIEcgQSBUIEUgICBTIFQgUiBVIEMgVCBVIFIgRSBTCkBAIC04MzcsMTAgKzg5NiwxMyBAQAogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOwogCXVuaW9uCiAJewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CXBpeDsgIC8vIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQotCQlzdHJ1Y3QgdjRsMl93aW5kb3cJd2luOyAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZCi0JCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQJdmJpOyAgLy8gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRQotCQlfX3U4CXJhd19kYXRhWzIwMF07ICAgICAgICAvLyB1c2VyLWRlZmluZWQKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdAkgICAgICAgIHBpeDsgICAgIC8vIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQorCQlzdHJ1Y3QgdjRsMl93aW5kb3cJICAgICAgICB3aW47ICAgICAvLyBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkKKwkJc3RydWN0IHY0bDJfdmJpX2Zvcm1hdAkgICAgICAgIHZiaTsgICAgIC8vIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUKKyNpZiAxCisJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0CXNsaWNlZDsgIC8vIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFCisjZW5kaWYKKwkJX191OAlyYXdfZGF0YVsyMDBdOyAgICAgICAgICAgICAgICAgICAvLyB1c2VyLWRlZmluZWQKIAl9IGZtdDsKIH07CiAKQEAgLTkxNiw2ICs5NzgsOSBAQAogI2RlZmluZSBWSURJT0NfRU5VTUFVRE9VVAlfSU9XUiAoJ1YnLCA2Niwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCiAjZGVmaW5lIFZJRElPQ19HX1BSSU9SSVRZICAgICAgIF9JT1IgICgnVicsIDY3LCBlbnVtIHY0bDJfcHJpb3JpdHkpCiAjZGVmaW5lIFZJRElPQ19TX1BSSU9SSVRZICAgICAgIF9JT1cgICgnVicsIDY4LCBlbnVtIHY0bDJfcHJpb3JpdHkpCisjaWYgMQorI2RlZmluZSBWSURJT0NfR19TTElDRURfVkJJX0NBUCBfSU9SICAoJ1YnLCA2OSwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXApCisjZW5kaWYKIAogLyogZm9yIGNvbXBhdGliaWxpdHksIHdpbGwgZ28gYXdheSBzb21lIGRheSAqLwogI2RlZmluZSBWSURJT0NfT1ZFUkxBWV9PTEQgICAgIAlfSU9XUiAoJ1YnLCAxNCwgaW50KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IDM3MWU3ZDMuLmZhMmQxMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTQ2Myw2ICs0NjMsMTcgQEAKIAlfX3M4ICAgICByc3NpOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgSENJX0VWX0VYVEVOREVEX0lOUVVJUllfUkVTVUxUCTB4MkYKK3N0cnVjdCBleHRlbmRlZF9pbnF1aXJ5X2luZm8geworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4ICAgICBwc2Nhbl9yZXBfbW9kZTsKKwlfX3U4ICAgICBwc2Nhbl9wZXJpb2RfbW9kZTsKKwlfX3U4ICAgICBkZXZfY2xhc3NbM107CisJX191MTYgICAgY2xvY2tfb2Zmc2V0OworCV9fczggICAgIHJzc2k7CisJX191OCAgICAgZGF0YVsyNDBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKICNkZWZpbmUgSENJX0VWX0NPTk5fQ09NUExFVEUgCTB4MDMKIHN0cnVjdCBoY2lfZXZfY29ubl9jb21wbGV0ZSB7CiAJX191OCAgICAgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggZTQyNjY0MS4uMDZiNDIzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAorKysgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC04NCw2ICs4NCw3IEBACiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTl9TRVEJMHgwNDAwCQkvKiBtdXN0IGRvIGlucHV0IHNlcSBhZGp1c3QgKi8KICNkZWZpbmUgSVBfVlNfQ09OTl9GX1NFUV9NQVNLCTB4MDYwMAkJLyogaW4vb3V0IHNlcXVlbmNlIG1hc2sgKi8KICNkZWZpbmUgSVBfVlNfQ09OTl9GX05PX0NQT1JUCTB4MDgwMAkJLyogbm8gY2xpZW50IHBvcnQgc2V0IHlldCAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfVEVNUExBVEUJMHgxMDAwCQkvKiB0ZW1wbGF0ZSwgbm90IGNvbm5lY3Rpb24gKi8KIAogLyogTW92ZSBpdCB0byBiZXR0ZXIgcGxhY2Ugb25lIGRheSwgZm9yIG5vdyBrZWVwIGl0IHVuaXF1ZSAqLwogI2RlZmluZSBORkNfSVBWU19QUk9QRVJUWQkweDEwMDAwCkBAIC03MzksNiArNzQwLDggQEAKIAogZXh0ZXJuIHN0cnVjdCBpcF92c19jb25uICppcF92c19jb25uX2luX2dldAogKGludCBwcm90b2NvbCwgX191MzIgc19hZGRyLCBfX3UxNiBzX3BvcnQsIF9fdTMyIGRfYWRkciwgX191MTYgZF9wb3J0KTsKK2V4dGVybiBzdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY3RfaW5fZ2V0CisoaW50IHByb3RvY29sLCBfX3UzMiBzX2FkZHIsIF9fdTE2IHNfcG9ydCwgX191MzIgZF9hZGRyLCBfX3UxNiBkX3BvcnQpOwogZXh0ZXJuIHN0cnVjdCBpcF92c19jb25uICppcF92c19jb25uX291dF9nZXQKIChpbnQgcHJvdG9jb2wsIF9fdTMyIHNfYWRkciwgX191MTYgc19wb3J0LCBfX3UzMiBkX2FkZHIsIF9fdTE2IGRfcG9ydCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaCBiL2luY2x1ZGUvcmRtYS9pYl9tYWQuaAppbmRleCA1MzE4NGEzLi4wZTI5M2ZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oCkBAIC0xMDgsNiArMTA4LDEzIEBACiAjZGVmaW5lIElCX1FQMV9RS0VZCTB4ODAwMTAwMDAKICNkZWZpbmUgSUJfUVBfU0VUX1FLRVkJMHg4MDAwMDAwMAogCitlbnVtIHsKKwlJQl9NR01UX01BRF9EQVRBID0gMjMyLAorCUlCX01HTVRfUk1QUF9EQVRBID0gMjIwLAorCUlCX01HTVRfVkVORE9SX0RBVEEgPSAyMTYsCisJSUJfTUdNVF9TQV9EQVRBID0gMjAwCit9OworCiBzdHJ1Y3QgaWJfbWFkX2hkciB7CiAJdTgJYmFzZV92ZXJzaW9uOwogCXU4CW1nbXRfY2xhc3M7CkBAIC0xNDksMjAgKzE1NiwyMCBAQAogCiBzdHJ1Y3QgaWJfbWFkIHsKIAlzdHJ1Y3QgaWJfbWFkX2hkcgltYWRfaGRyOwotCXU4CQkJZGF0YVsyMzJdOworCXU4CQkJZGF0YVtJQl9NR01UX01BRF9EQVRBXTsKIH07CiAKIHN0cnVjdCBpYl9ybXBwX21hZCB7CiAJc3RydWN0IGliX21hZF9oZHIJbWFkX2hkcjsKIAlzdHJ1Y3QgaWJfcm1wcF9oZHIJcm1wcF9oZHI7Ci0JdTgJCQlkYXRhWzIyMF07CisJdTgJCQlkYXRhW0lCX01HTVRfUk1QUF9EQVRBXTsKIH07CiAKIHN0cnVjdCBpYl9zYV9tYWQgewogCXN0cnVjdCBpYl9tYWRfaGRyCW1hZF9oZHI7CiAJc3RydWN0IGliX3JtcHBfaGRyCXJtcHBfaGRyOwogCXN0cnVjdCBpYl9zYV9oZHIJc2FfaGRyOwotCXU4CQkJZGF0YVsyMDBdOworCXU4CQkJZGF0YVtJQl9NR01UX1NBX0RBVEFdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpYl92ZW5kb3JfbWFkIHsKQEAgLTE3MCw3ICsxNzcsNyBAQAogCXN0cnVjdCBpYl9ybXBwX2hkcglybXBwX2hkcjsKIAl1OAkJCXJlc2VydmVkOwogCXU4CQkJb3VpWzNdOwotCXU4CQkJZGF0YVsyMTZdOworCXU4CQkJZGF0YVtJQl9NR01UX1ZFTkRPUl9EQVRBXTsKIH07CiAKIHN0cnVjdCBpYl9jbGFzc19wb3J0X2luZm8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAppbmRleCA5MTYxNDRiLi42OTMxM2JhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCkBAIC00MzksNiArNDM5LDggQEAKIAlTSE9TVF9DQU5DRUwsCiAJU0hPU1RfREVMLAogCVNIT1NUX1JFQ09WRVJZLAorCVNIT1NUX0NBTkNFTF9SRUNPVkVSWSwKKwlTSE9TVF9ERUxfUkVDT1ZFUlksCiB9OwogCiBzdHJ1Y3QgU2NzaV9Ib3N0IHsKQEAgLTQ2NSw4ICs0NjcsNiBAQAogCiAJc3RydWN0IGxpc3RfaGVhZAllaF9jbWRfcTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAgKiBlaGFuZGxlcjsgIC8qIEVycm9yIHJlY292ZXJ5IHRocmVhZC4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgKiBlaF93YWl0OyAgIC8qIFRoZSBlcnJvciByZWNvdmVyeSB0aHJlYWQgd2FpdHMKLQkJCQkJICAgICAgb24gdGhpcy4gKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgKiBlaF9hY3Rpb247IC8qIFdhaXQgZm9yIHNwZWNpZmljIGFjdGlvbnMgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LiAqLwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGVoX2FjdGl2ZToxOyAvKiBJbmRpY2F0ZXMgdGhlIGVoIHRocmVhZCBpcyBhd2FrZSBhbmQgYWN0aXZlIGlmCkBAIC02MjEsNiArNjIxLDEzIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBTY3NpX0hvc3QsIHNob3N0X2dlbmRldik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfaG9zdF9pbl9yZWNvdmVyeShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlyZXR1cm4gc2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JFQ09WRVJZIHx8CisJCXNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9DQU5DRUxfUkVDT1ZFUlkgfHwKKwkJc2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX0RFTF9SRUNPVkVSWTsKK30KKwogZXh0ZXJuIGludCBzY3NpX3F1ZXVlX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBzY3NpX2ZsdXNoX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAppbmRleCAxMTVkYjA1Li5iMGQ0NDU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaApAQCAtMTAzLDggKzEwMyw4IEBACiAJCQkJCSAgICAgaW5jYXBhYmxlIG9mIHJlcG9ydGluZyAqLwogI2RlZmluZSBGQ19QT1JUU1BFRURfMUdCSVQJCTEKICNkZWZpbmUgRkNfUE9SVFNQRUVEXzJHQklUCQkyCi0jZGVmaW5lIEZDX1BPUlRTUEVFRF8xMEdCSVQJCTQKLSNkZWZpbmUgRkNfUE9SVFNQRUVEXzRHQklUCQk4CisjZGVmaW5lIEZDX1BPUlRTUEVFRF80R0JJVAkJNAorI2RlZmluZSBGQ19QT1JUU1BFRURfMTBHQklUCQk4CiAjZGVmaW5lIEZDX1BPUlRTUEVFRF9OT1RfTkVHT1RJQVRFRAkoMSA8PCAxNSkgLyogU3BlZWQgbm90IGVzdGFibGlzaGVkICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvcmUuaCBiL2luY2x1ZGUvc291bmQvY29yZS5oCmluZGV4IDNkYzQxZmQuLjI2MTYwYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29yZS5oCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC0xNjgsNiArMTY4LDkgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzaHV0ZG93bl9zbGVlcDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlZV93b3JrcTsJLyogZm9yIGZyZWUgaW4gd29ya3F1ZXVlICovCiAJc3RydWN0IGRldmljZSAqZGV2OworI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKKwlzdHJ1Y3Qgc25kX2dlbmVyaWNfZGV2aWNlICpnZW5lcmljX2RldjsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BNCiAJaW50ICgqcG1fc3VzcGVuZCkoc25kX2NhcmRfdCAqY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKTsKQEAgLTE3Niw5ICsxNzksNiBAQAogCXVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZTsJLyogcG93ZXIgc3RhdGUgKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlIHBvd2VyX2xvY2s7CS8qIHBvd2VyIGxvY2sgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBwb3dlcl9zbGVlcDsKLSNpZmRlZiBDT05GSUdfU05EX0dFTkVSSUNfUE0KLQlzdHJ1Y3Qgc25kX2dlbmVyaWNfZGV2aWNlICpwbV9kZXY7CS8qIGZvciBJU0EgKi8KLSNlbmRpZgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfTUlYRVJfT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfTUlYRVJfT1NTX01PRFVMRSkKQEAgLTM0OCw2ICszNDgsOCBAQAogI2lmbmRlZiBzbmRfY2FyZF9zZXRfZGV2CiAjZGVmaW5lIHNuZF9jYXJkX3NldF9kZXYoY2FyZCxkZXZwdHIpICgoY2FyZCktPmRldiA9IChkZXZwdHIpKQogI2VuZGlmCisvKiByZWdpc3RlciBhIGdlbmVyaWMgZGV2aWNlIChmb3IgSVNBLCBldGMpICovCitpbnQgc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KHNuZF9jYXJkX3QgKmNhcmQpOwogCiAvKiBkZXZpY2UuYyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eC5oIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHguaAppbmRleCA5Yjk0NTEwLi5iMGMwZTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eC5oCisrKyBiL2luY2x1ZGUvc291bmQvY3M0Nnh4LmgKQEAgLTI5LDE5ICsyOSw2IEBACiAjaW5jbHVkZSAiYWM5N19jb2RlYy5oIgogI2luY2x1ZGUgImNzNDZ4eF9kc3Bfc3Bvcy5oIgogCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfQ0lSUlVTCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0lSUlVTICAgICAgICAgICAgMHgxMDEzCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9DSVJSVVNfNDYxMAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjEwICAgICAgIDB4NjAwMQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTIKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNDYxMiAgICAgICAweDYwMDMKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjE1Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTUgICAgICAgMHg2MDA0Ci0jZW5kaWYKLQogLyoKICAqICBEaXJlY3QgcmVnaXN0ZXJzCiAgKi8KQEAgLTE3MTUsNyArMTcwMiw2IEBACiAJdm9pZCAoKmFjdGl2ZV9jdHJsKShjczQ2eHhfdCAqLCBpbnQpOwogICAJdm9pZCAoKm1peGVyX2luaXQpKGNzNDZ4eF90ICopOwogCi0Jc3RydWN0IHBjaV9kZXYgKmFjcGlfZGV2OwogCWludCBhY3BpX3BvcnQ7CiAJc25kX2tjb250cm9sX3QgKmVhcGRfc3dpdGNoOyAvKiBmb3IgYW1wbGlmaWVyIGhhY2sgKi8KIAlpbnQgYWNjZXB0X3ZhbGlkOwkvKiBhY2NlcHQgbW1hcCB2YWxpZCAoZm9yIE9TUykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKaW5kZXggNGUzOTkzZC4uNjdiZjNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKQEAgLTM1LDEzICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9DUkVBVElWRQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NSRUFUSVZFCQkweDExMDIKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0NSRUFUSVZFX0VNVTEwSzEKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9DUkVBVElWRV9FTVUxMEsxCTB4MDAwMgotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gREVGSU5FUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIEVNVVBBR0VTSVpFICAgICA0MDk2CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbS5oIGIvaW5jbHVkZS9zb3VuZC9wY20uaAppbmRleCBkNjM2MWRhYi4uMmIyM2E1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC05MDMsMTMgKzkwMywxNiBAQAogaW50IHNuZF9wY21fZm9ybWF0X2xpbmVhcihzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CiBpbnQgc25kX3BjbV9mb3JtYXRfbGl0dGxlX2VuZGlhbihzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CiBpbnQgc25kX3BjbV9mb3JtYXRfYmlnX2VuZGlhbihzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7Ci0vKgorI2lmIDAgLyoganVzdCBmb3IgRG9jQm9vayAqLworLyoqCiAgKiBzbmRfcGNtX2Zvcm1hdF9jcHVfZW5kaWFuIC0gQ2hlY2sgdGhlIFBDTSBmb3JtYXQgaXMgQ1BVLWVuZGlhbgogICogQGZvcm1hdDogdGhlIGZvcm1hdCB0byBjaGVjawogICoKICAqIFJldHVybnMgMSBpZiB0aGUgZ2l2ZW4gUENNIGZvcm1hdCBpcyBDUFUtZW5kaWFuLCAwIGlmCiAgKiBvcHBvc2l0ZSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGVuZGlhbiBub3Qgc3BlY2lmaWVkLgogICovCitpbnQgc25kX3BjbV9mb3JtYXRfY3B1X2VuZGlhbihzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CisjZW5kaWYgLyogRG9jQm9vayAqLwogI2lmZGVmIFNORFJWX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgc25kX3BjbV9mb3JtYXRfY3B1X2VuZGlhbihmb3JtYXQpIHNuZF9wY21fZm9ybWF0X2xpdHRsZV9lbmRpYW4oZm9ybWF0KQogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtX29zcy5oIGIvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKaW5kZXggNTE4NzI4NS4uMGI2N2M5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKQEAgLTMyLDcgKzMyLDggQEAKIAkJICAgICBibG9jazoxLAogCQkgICAgIG5vbmJsb2NrOjEsCiAJCSAgICAgcGFydGlhbGZyYWc6MSwKLQkJICAgICBub3NpbGVuY2U6MTsKKwkJICAgICBub3NpbGVuY2U6MSwKKwkJICAgICBidWdneXB0cjoxOwogCXVuc2lnbmVkIGludCBwZXJpb2RzOwogCXVuc2lnbmVkIGludCBwZXJpb2Rfc2l6ZTsKIAlzbmRfcGNtX29zc19zZXR1cF90ICpuZXh0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC90cmlkZW50LmggYi9pbmNsdWRlL3NvdW5kL3RyaWRlbnQuaAppbmRleCBmNTI1NGVjLi5hNDA4ZDM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3RyaWRlbnQuaAorKysgYi9pbmNsdWRlL3NvdW5kL3RyaWRlbnQuaApAQCAtMzMsMjMgKzMzLDYgQEAKIC8vI2luY2x1ZGUgImFpbnN0cl9nZjEuaCIKICNpbmNsdWRlICJhaW5zdHJfc2ltcGxlLmgiCiAKLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9UUklERU5UCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJJREVOVAkJMHgxMDIzCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9EWCAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9EWAkweDIwMDAKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX05YIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX05YCTB4MjAwMQotI2VuZGlmCi0KLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9TSQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJCQkweDEwMzkKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1NJXzcwMTgKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDE4CQkweDcwMTgKLSNlbmRpZgotCiAjZGVmaW5lIFRSSURFTlRfREVWSUNFX0lEX0RYCQkoKFBDSV9WRU5ET1JfSURfVFJJREVOVDw8MTYpfFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgpCiAjZGVmaW5lIFRSSURFTlRfREVWSUNFX0lEX05YCQkoKFBDSV9WRU5ET1JfSURfVFJJREVOVDw8MTYpfFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfTlgpCiAjZGVmaW5lIFRSSURFTlRfREVWSUNFX0lEX1NJNzAxOAkoKFBDSV9WRU5ET1JfSURfU0k8PDE2KXxQQ0lfREVWSUNFX0lEX1NJXzcwMTgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaCBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCmluZGV4IDhkMTliZmEuLmVlMzJhZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCkBAIC0xLDMgKzEsMyBAQAogLyogaW5jbHVkZS92ZXJzaW9uLmguICBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8KICNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMTByYzEiCi0jZGVmaW5lIENPTkZJR19TTkRfREFURSAiIChUdWUgQXVnIDMwIDA1OjMxOjA4IDIwMDUgVVRDKSIKKyNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIgKE1vbiBTZXAgMTIgMDg6MTM6MDkgMjAwNSBVVEMpIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC95bWZwY2kuaCBiL2luY2x1ZGUvc291bmQveW1mcGNpLmgKaW5kZXggOWEzYzFlNi4uYzNiY2NiZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQveW1mcGNpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC95bWZwY2kuaApAQCAtMjgsMjggKzI4LDYgQEAKICNpbmNsdWRlICJ0aW1lci5oIgogI2luY2x1ZGUgPGxpbnV4L2dhbWVwb3J0Lmg+CiAKLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9ZQU1BSEEKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ZQU1BSEEgICAgICAgICAgICAweDEwNzMKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1lBTUFIQV83MjQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzI0CTB4MDAwNAotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzcyNEYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzI0RgkweDAwMGQKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwCTB4MDAwYQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc0MEMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwQwkweDAwMGMKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQ0CTB4MDAxMAotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc1NAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NTQJMHgwMDEyCi0jZW5kaWYKLQogLyoKICAqICBEaXJlY3QgcmVnaXN0ZXJzCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vcG0zZmIuaCBiL2luY2x1ZGUvdmlkZW8vcG0zZmIuaAppbmRleCA4ZDNjZWY1Li42ZjRlYTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3BtM2ZiLmgKKysrIGIvaW5jbHVkZS92aWRlby9wbTNmYi5oCkBAIC0xMTQyLDkgKzExNDIsNiBAQAogLyogZG8gd2Ugd2FudCBhY2NlbGVyYXRlZCBjb25zb2xlICAqLwogI2RlZmluZSBQTTNGQl9VU0VfQUNDRUwgMQogCi0vKiB1c2VmdWwgPyAqLwotI2RlZmluZSBDSEFSX0lTX05VTShhKSAgKCgoKGEpID49ICcwJykgJiYgKChhKSA8PSAnOScpKSA/IDEgOiAwKQotCiAvKiBmb3IgZHJpdmVyIGRlYnVnZ2luZyBPTkxZICovCiAvKiAwID0gYXNzZXJ0IG9ubHksIDEgPSBlcnJvciwgMiA9IGluZm8sIDMrID0gdmVyYm9zZSAqLwogLyogZGVmaW5lIFBNM0ZCX01BU1RFUl9ERUJVRyAxICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3cxMDBmYi5oIGIvaW5jbHVkZS92aWRlby93MTAwZmIuaAppbmRleCBlNmRhMmQ3Li42NzdkNDAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3cxMDBmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vdzEwMGZiLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogdW5zaWduZWQgbG9uZyB3MTAwZmJfZ3Bpb19yZWFkKGludCBwb3J0KTsKIHZvaWQgdzEwMGZiX2dwaW9fd3JpdGUoaW50IHBvcnQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpOwordW5zaWduZWQgbG9uZyB3MTAwZmJfZ2V0X2hzeW5jbGVuKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIC8qIExDRCBTcGVjaWZpYyBSb3V0aW5lcyBhbmQgQ29uZmlnICovCiBzdHJ1Y3QgdzEwMF90Z19pbmZvIHsKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDAyYzVjZTYuLjBjNWQ5YTMgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNDY2LDYgKzQ2NiwxNCBAQAogZXh0ZXJuIGNoYXIgX19pbml0cmFtZnNfc3RhcnRbXSwgX19pbml0cmFtZnNfZW5kW107CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmcmVlX2luaXRyZCh2b2lkKQoreworCWZyZWVfaW5pdHJkX21lbShpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOworCWluaXRyZF9zdGFydCA9IDA7CisJaW5pdHJkX2VuZCA9IDA7Cit9CisKICNlbmRpZgogCiB2b2lkIF9faW5pdCBwb3B1bGF0ZV9yb290ZnModm9pZCkKQEAgLTQ4NCw3ICs0OTIsNyBAQAogCQkJcHJpbnRrKCIgaXQgaXNcbiIpOwogCQkJdW5wYWNrX3RvX3Jvb3RmcygoY2hhciAqKWluaXRyZF9zdGFydCwKIAkJCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0LCAwKTsKLQkJCWZyZWVfaW5pdHJkX21lbShpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOworCQkJZnJlZV9pbml0cmQoKTsKIAkJCXJldHVybjsKIAkJfQogCQlwcmludGsoIml0IGlzbid0ICglcyk7IGxvb2tzIGxpa2UgYW4gaW5pdHJkXG4iLCBlcnIpOwpAQCAtNDkzLDcgKzUwMSw3IEBACiAJCQlzeXNfd3JpdGUoZmQsIChjaGFyICopaW5pdHJkX3N0YXJ0LAogCQkJCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0KTsKIAkJCXN5c19jbG9zZShmZCk7Ci0JCQlmcmVlX2luaXRyZF9tZW0oaW5pdHJkX3N0YXJ0LCBpbml0cmRfZW5kKTsKKwkJCWZyZWVfaW5pdHJkKCk7CiAJCX0KIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggN2YwNjk5Ny4uODMwOTZiNiAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTc5LDYgKzc5LDggQEAKIAogLyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIGF1ZGl0X2J1ZmZlcnMgYWxsb3dlZC4gKi8KIHN0YXRpYyBpbnQJYXVkaXRfYmFja2xvZ19saW1pdCA9IDY0Oworc3RhdGljIGludAlhdWRpdF9iYWNrbG9nX3dhaXRfdGltZSA9IDYwICogSFo7CitzdGF0aWMgaW50CWF1ZGl0X2JhY2tsb2dfd2FpdF9vdmVyZmxvdyA9IDA7CiAKIC8qIFRoZSBpZGVudGl0eSBvZiB0aGUgdXNlciBzaHV0dGluZyBkb3duIHRoZSBhdWRpdCBzeXN0ZW0uICovCiB1aWRfdAkJYXVkaXRfc2lnX3VpZCA9IC0xOwpAQCAtMTA2LDE4ICsxMDgsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGF1ZGl0X3NrYl9xdWV1ZTsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmthdWRpdGRfdGFzazsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChrYXVkaXRkX3dhaXQpOwotCi0vKiBUaGVyZSBhcmUgdGhyZWUgbGlzdHMgb2YgcnVsZXMgLS0gb25lIHRvIHNlYXJjaCBhdCB0YXNrIGNyZWF0aW9uCi0gKiB0aW1lLCBvbmUgdG8gc2VhcmNoIGF0IHN5c2NhbGwgZW50cnkgdGltZSwgYW5kIGFub3RoZXIgdG8gc2VhcmNoIGF0Ci0gKiBzeXNjYWxsIGV4aXQgdGltZS4gKi8KLXN0YXRpYyBMSVNUX0hFQUQoYXVkaXRfdHNrbGlzdCk7Ci1zdGF0aWMgTElTVF9IRUFEKGF1ZGl0X2VudGxpc3QpOwotc3RhdGljIExJU1RfSEVBRChhdWRpdF9leHRsaXN0KTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhdWRpdF9iYWNrbG9nX3dhaXQpOwogCiAvKiBUaGUgbmV0bGluayBzb2NrZXQgaXMgb25seSB0byBiZSByZWFkIGJ5IDEgQ1BVLCB3aGljaCBsZXRzIHVzIGFzc3VtZQogICogdGhhdCBsaXN0IGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIG5ldmVyIGhhcHBlbiBzaW11bHRhbmVvdXNseSBpbgogICogYXVkaXRzYy5jICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChhdWRpdF9uZXRsaW5rX3NlbSk7CitERUNMQVJFX01VVEVYKGF1ZGl0X25ldGxpbmtfc2VtKTsKIAogLyogQVVESVRfQlVGU0laIGlzIHRoZSBzaXplIG9mIHRoZSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIGZvcm1hdHRpbmcKICAqIGF1ZGl0IHJlY29yZHMuICBTaW5jZSBwcmludGsgdXNlcyBhIDEwMjQgYnl0ZSBidWZmZXIsIHRoaXMgYnVmZmVyCkBAIC0xMzcsNiArMTMzLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICBsaXN0OwogCXN0cnVjdCBza19idWZmICAgICAgICpza2I7CS8qIGZvcm1hdHRlZCBza2IgcmVhZHkgdG8gc2VuZCAqLwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHg7CS8qIE5VTEwgb3IgYXNzb2NpYXRlZCBjb250ZXh0ICovCisJaW50CQkgICAgIGdmcF9tYXNrOwogfTsKIAogc3RhdGljIHZvaWQgYXVkaXRfc2V0X3BpZChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgcGlkX3QgcGlkKQpAQCAtMTQ1LDExICsxNDIsNiBAQAogCW5saC0+bmxtc2dfcGlkID0gcGlkOwogfQogCi1zdHJ1Y3QgYXVkaXRfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgIGxpc3Q7Ci0Jc3RydWN0IGF1ZGl0X3J1bGUgcnVsZTsKLX07Ci0KIHN0YXRpYyB2b2lkIGF1ZGl0X3BhbmljKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJc3dpdGNoIChhdWRpdF9mYWlsdXJlKQpAQCAtMjMzLDcgKzIyNSw3IEBACiB7CiAJaW50IG9sZAkJID0gYXVkaXRfcmF0ZV9saW1pdDsKIAlhdWRpdF9yYXRlX2xpbWl0ID0gbGltaXQ7Ci0JYXVkaXRfbG9nKE5VTEwsIEFVRElUX0NPTkZJR19DSEFOR0UsIAorCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLCAKIAkJCSJhdWRpdF9yYXRlX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKIAkJCWF1ZGl0X3JhdGVfbGltaXQsIG9sZCwgbG9naW51aWQpOwogCXJldHVybiBvbGQ7CkBAIC0yNDMsNyArMjM1LDcgQEAKIHsKIAlpbnQgb2xkCQkgPSBhdWRpdF9iYWNrbG9nX2xpbWl0OwogCWF1ZGl0X2JhY2tsb2dfbGltaXQgPSBsaW1pdDsKLQlhdWRpdF9sb2coTlVMTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKIAkJCSJhdWRpdF9iYWNrbG9nX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKIAkJCWF1ZGl0X2JhY2tsb2dfbGltaXQsIG9sZCwgbG9naW51aWQpOwogCXJldHVybiBvbGQ7CkBAIC0yNTUsNyArMjQ3LDcgQEAKIAlpZiAoc3RhdGUgIT0gMCAmJiBzdGF0ZSAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlhdWRpdF9lbmFibGVkID0gc3RhdGU7Ci0JYXVkaXRfbG9nKE5VTEwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCiAJCQkiYXVkaXRfZW5hYmxlZD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCiAJCQlhdWRpdF9lbmFibGVkLCBvbGQsIGxvZ2ludWlkKTsKIAlyZXR1cm4gb2xkOwpAQCAtMjY5LDcgKzI2MSw3IEBACiAJICAgICYmIHN0YXRlICE9IEFVRElUX0ZBSUxfUEFOSUMpCiAJCXJldHVybiAtRUlOVkFMOwogCWF1ZGl0X2ZhaWx1cmUgPSBzdGF0ZTsKLQlhdWRpdF9sb2coTlVMTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKIAkJCSJhdWRpdF9mYWlsdXJlPSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKIAkJCWF1ZGl0X2ZhaWx1cmUsIG9sZCwgbG9naW51aWQpOwogCXJldHVybiBvbGQ7CkBAIC0yODEsNiArMjczLDcgQEAKIAogCXdoaWxlICgxKSB7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhdWRpdF9za2JfcXVldWUpOworCQl3YWtlX3VwKCZhdWRpdF9iYWNrbG9nX3dhaXQpOwogCQlpZiAoc2tiKSB7CiAJCQlpZiAoYXVkaXRfcGlkKSB7CiAJCQkJaW50IGVyciA9IG5ldGxpbmtfdW5pY2FzdChhdWRpdF9zb2NrLCBza2IsIGF1ZGl0X3BpZCwgMCk7CkBAIC0yOTAsNyArMjgzLDcgQEAKIAkJCQkJYXVkaXRfcGlkID0gMDsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXNcbiIsIHNrYi0+ZGF0YSArIE5MTVNHX1NQQUNFKDApKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzXG4iLCBza2ItPmRhdGEgKyBOTE1TR19TUEFDRSgwKSk7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC00MjMsNyArNDE2LDcgQEAKIAkJaWYgKHN0YXR1c19nZXQtPm1hc2sgJiBBVURJVF9TVEFUVVNfUElEKSB7CiAJCQlpbnQgb2xkICAgPSBhdWRpdF9waWQ7CiAJCQlhdWRpdF9waWQgPSBzdGF0dXNfZ2V0LT5waWQ7Ci0JCQlhdWRpdF9sb2coTlVMTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAogCQkJCSJhdWRpdF9waWQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAogCQkJCSAgYXVkaXRfcGlkLCBvbGQsIGxvZ2ludWlkKTsKIAkJfQpAQCAtNDM1LDE1ICs0MjgsMjEgQEAKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9VU0VSOgogCWNhc2UgQVVESVRfRklSU1RfVVNFUl9NU0cuLi5BVURJVF9MQVNUX1VTRVJfTVNHOgotCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBtc2dfdHlwZSk7Ci0JCWlmICghYWIpCi0JCQlicmVhazsJLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCi0JCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCi0JCQkJICJ1c2VyIHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSIKLQkJCQkgIiBtc2c9JyUuMTAyNHMnIiwKLQkJCQkgcGlkLCB1aWQsIGxvZ2ludWlkLCAoY2hhciAqKWRhdGEpOwotCQlhdWRpdF9zZXRfcGlkKGFiLCBwaWQpOwotCQlhdWRpdF9sb2dfZW5kKGFiKTsKKwkJaWYgKCFhdWRpdF9lbmFibGVkICYmIG1zZ190eXBlICE9IEFVRElUX1VTRVJfQVZDKQorCQkJcmV0dXJuIDA7CisKKwkJZXJyID0gYXVkaXRfZmlsdGVyX3VzZXIoJk5FVExJTktfQ0Ioc2tiKSwgbXNnX3R5cGUpOworCQlpZiAoZXJyID09IDEpIHsKKwkJCWVyciA9IDA7CisJCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBtc2dfdHlwZSk7CisJCQlpZiAoYWIpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCQkJICJ1c2VyIHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSBtc2c9JyUuMTAyNHMnIiwKKwkJCQkJCSBwaWQsIHVpZCwgbG9naW51aWQsIChjaGFyICopZGF0YSk7CisJCQkJYXVkaXRfc2V0X3BpZChhYiwgcGlkKTsKKwkJCQlhdWRpdF9sb2dfZW5kKGFiKTsKKwkJCX0KKwkJfQogCQlicmVhazsKIAljYXNlIEFVRElUX0FERDoKIAljYXNlIEFVRElUX0RFTDoKQEAgLTUyMyw3ICs1MjIsNyBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmF1ZGl0X3NrYl9xdWV1ZSk7CiAJYXVkaXRfaW5pdGlhbGl6ZWQgPSAxOwogCWF1ZGl0X2VuYWJsZWQgPSBhdWRpdF9kZWZhdWx0OwotCWF1ZGl0X2xvZyhOVUxMLCBBVURJVF9LRVJORUwsICJpbml0aWFsaXplZCIpOworCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9LRVJORUwsICJpbml0aWFsaXplZCIpOwogCXJldHVybiAwOwogfQogX19pbml0Y2FsbChhdWRpdF9pbml0KTsKQEAgLTU2MSw3ICs1NjAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGF1ZGl0X2J1ZmZlciAqIGF1ZGl0X2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LAotCQkJCQkJaW50IGdmcF9tYXNrLCBpbnQgdHlwZSkKKwkJCQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgaW50IHR5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiA9IE5VTEw7CkBAIC01ODcsNiArNTg2LDcgQEAKIAkJZ290byBlcnI7CiAKIAlhYi0+Y3R4ID0gY3R4OworCWFiLT5nZnBfbWFzayA9IGdmcF9tYXNrOwogCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilza2JfcHV0KGFiLT5za2IsIE5MTVNHX1NQQUNFKDApKTsKIAlubGgtPm5sbXNnX3R5cGUgPSB0eXBlOwogCW5saC0+bmxtc2dfZmxhZ3MgPSAwOwpAQCAtNjA2LDI2ICs2MDYsMjcgQEAKICAqICh0aW1lc3RhbXAsc2VyaWFsKSB0dXBsZSBpcyB1bmlxdWUgZm9yIGVhY2ggc3lzY2FsbCBhbmQgaXMgbGl2ZSBmcm9tCiAgKiBzeXNjYWxsIGVudHJ5IHRvIHN5c2NhbGwgZXhpdC4KICAqCi0gKiBBdG9taWMgdmFsdWVzIGFyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgMjQtYml0LCBzbyB3ZSBjb3VudCBkb3duLgotICoKICAqIE5PVEU6IEFub3RoZXIgcG9zc2liaWxpdHkgaXMgdG8gc3RvcmUgdGhlIGZvcm1hdHRlZCByZWNvcmRzIG9mZiB0aGUKICAqIGF1ZGl0IGNvbnRleHQgKGZvciB0aG9zZSByZWNvcmRzIHRoYXQgaGF2ZSBhIGNvbnRleHQpLCBhbmQgZW1pdCB0aGVtCiAgKiBhbGwgYXQgc3lzY2FsbCBleGl0LiAgSG93ZXZlciwgdGhpcyBjb3VsZCBkZWxheSB0aGUgcmVwb3J0aW5nIG9mCiAgKiBzaWduaWZpY2FudCBlcnJvcnMgdW50aWwgc3lzY2FsbCBleGl0IChvciBuZXZlciwgaWYgdGhlIHN5c3RlbQogICogaGFsdHMpLiAqLworCiB1bnNpZ25lZCBpbnQgYXVkaXRfc2VyaWFsKHZvaWQpCiB7Ci0Jc3RhdGljIGF0b21pY190IHNlcmlhbCA9IEFUT01JQ19JTklUKDB4ZmZmZmZmKTsKLQl1bnNpZ25lZCBpbnQgYSwgYjsKKwlzdGF0aWMgc3BpbmxvY2tfdCBzZXJpYWxfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKwlzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaWFsX2xvY2ssIGZsYWdzKTsKIAlkbyB7Ci0JCWEgPSBhdG9taWNfcmVhZCgmc2VyaWFsKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNlcmlhbCkpCi0JCQlhdG9taWNfc2V0KCZzZXJpYWwsIDB4ZmZmZmZmKTsKLQkJYiA9IGF0b21pY19yZWFkKCZzZXJpYWwpOwotCX0gd2hpbGUgKGIgIT0gYSAtIDEpOworCQlyZXQgPSArK3NlcmlhbDsKKwl9IHdoaWxlICh1bmxpa2VseSghcmV0KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAweGZmZmZmZiAtIGI7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2dldF9zdGFtcChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LCAKQEAgLTY0NSwxNyArNjQ2LDQzIEBACiAgKiBzeXNjYWxsLCB0aGVuIHRoZSBzeXNjYWxsIGlzIG1hcmtlZCBhcyBhdWRpdGFibGUgYW5kIGFuIGF1ZGl0IHJlY29yZAogICogd2lsbCBiZSB3cml0dGVuIGF0IHN5c2NhbGwgZXhpdC4gIElmIHRoZXJlIGlzIG5vIGFzc29jaWF0ZWQgdGFzaywgdHNrCiAgKiBzaG91bGQgYmUgTlVMTC4gKi8KLXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2xvZ19zdGFydChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LCBpbnQgdHlwZSkKKworc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfbG9nX3N0YXJ0KHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIGludCBnZnBfbWFzaywKKwkJCQkgICAgIGludCB0eXBlKQogewogCXN0cnVjdCBhdWRpdF9idWZmZXIJKmFiCT0gTlVMTDsKIAlzdHJ1Y3QgdGltZXNwZWMJCXQ7CiAJdW5zaWduZWQgaW50CQlzZXJpYWw7CisJaW50IHJlc2VydmU7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X3N0YXJ0ID0gamlmZmllczsKIAogCWlmICghYXVkaXRfaW5pdGlhbGl6ZWQpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKGF1ZGl0X2JhY2tsb2dfbGltaXQKLQkgICAgJiYgc2tiX3F1ZXVlX2xlbigmYXVkaXRfc2tiX3F1ZXVlKSA+IGF1ZGl0X2JhY2tsb2dfbGltaXQpIHsKKwlpZiAoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKQorCQlyZXNlcnZlID0gMDsKKwllbHNlCisJCXJlc2VydmUgPSA1OyAvKiBBbGxvdyBhdG9taWMgY2FsbGVycyB0byBnbyB1cCB0byBmaXZlIAorCQkJCWVudHJpZXMgb3ZlciB0aGUgbm9ybWFsIGJhY2tsb2cgbGltaXQgKi8KKworCXdoaWxlIChhdWRpdF9iYWNrbG9nX2xpbWl0CisJICAgICAgICYmIHNrYl9xdWV1ZV9sZW4oJmF1ZGl0X3NrYl9xdWV1ZSkgPiBhdWRpdF9iYWNrbG9nX2xpbWl0ICsgcmVzZXJ2ZSkgeworCQlpZiAoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUICYmIGF1ZGl0X2JhY2tsb2dfd2FpdF90aW1lCisJCSAgICAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0X3N0YXJ0ICsgYXVkaXRfYmFja2xvZ193YWl0X3RpbWUpKSB7CisKKwkJCS8qIFdhaXQgZm9yIGF1ZGl0ZCB0byBkcmFpbiB0aGUgcXVldWUgYSBsaXR0bGUgKi8KKwkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWFkZF93YWl0X3F1ZXVlKCZhdWRpdF9iYWNrbG9nX3dhaXQsICZ3YWl0KTsKKworCQkJaWYgKGF1ZGl0X2JhY2tsb2dfbGltaXQgJiYKKwkJCSAgICBza2JfcXVldWVfbGVuKCZhdWRpdF9za2JfcXVldWUpID4gYXVkaXRfYmFja2xvZ19saW1pdCkKKwkJCQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfc3RhcnQgKyBhdWRpdF9iYWNrbG9nX3dhaXRfdGltZSAtIGppZmZpZXMpOworCisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmYXVkaXRfYmFja2xvZ193YWl0LCAmd2FpdCk7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoYXVkaXRfcmF0ZV9jaGVjaygpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJhdWRpdDogYXVkaXRfYmFja2xvZz0lZCA+ICIKQEAgLTY2MywxMCArNjkwLDEyIEBACiAJCQkgICAgICAgc2tiX3F1ZXVlX2xlbigmYXVkaXRfc2tiX3F1ZXVlKSwKIAkJCSAgICAgICBhdWRpdF9iYWNrbG9nX2xpbWl0KTsKIAkJYXVkaXRfbG9nX2xvc3QoImJhY2tsb2cgbGltaXQgZXhjZWVkZWQiKTsKKwkJYXVkaXRfYmFja2xvZ193YWl0X3RpbWUgPSBhdWRpdF9iYWNrbG9nX3dhaXRfb3ZlcmZsb3c7CisJCXdha2VfdXAoJmF1ZGl0X2JhY2tsb2dfd2FpdCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWFiID0gYXVkaXRfYnVmZmVyX2FsbG9jKGN0eCwgR0ZQX0FUT01JQywgdHlwZSk7CisJYWIgPSBhdWRpdF9idWZmZXJfYWxsb2MoY3R4LCBnZnBfbWFzaywgdHlwZSk7CiAJaWYgKCFhYikgewogCQlhdWRpdF9sb2dfbG9zdCgib3V0IG9mIG1lbW9yeSBpbiBhdWRpdF9sb2dfc3RhcnQiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC02OTAsNyArNzE5LDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWItPnNrYjsKIAlpbnQgcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIHNrYl9oZWFkcm9vbShza2IpLCBleHRyYSwKLQkJCQkgICBHRlBfQVRPTUlDKTsKKwkJCQkgICBhYi0+Z2ZwX21hc2spOwogCWlmIChyZXQgPCAwKSB7CiAJCWF1ZGl0X2xvZ19sb3N0KCJvdXQgb2YgbWVtb3J5IGluIGF1ZGl0X2V4cGFuZCIpOwogCQlyZXR1cm4gMDsKQEAgLTgwOSw3ICs4MzgsNyBAQAogCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICVzIiwgcHJlZml4KTsKIAogCS8qIFdlIHdpbGwgYWxsb3cgMTEgc3BhY2VzIGZvciAnIChkZWxldGVkKScgdG8gYmUgYXBwZW5kZWQgKi8KLQlwYXRoID0ga21hbGxvYyhQQVRIX01BWCsxMSwgR0ZQX0tFUk5FTCk7CisJcGF0aCA9IGttYWxsb2MoUEFUSF9NQVgrMTEsIGFiLT5nZnBfbWFzayk7CiAJaWYgKCFwYXRoKSB7CiAJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICI8bm8gbWVtb3J5PiIpOwogCQlyZXR1cm47CkBAIC04NDEsNyArODcwLDcgQEAKIAkJCWFiLT5za2IgPSBOVUxMOwogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZrYXVkaXRkX3dhaXQpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKCIlc1xuIiwgYWItPnNrYi0+ZGF0YSArIE5MTVNHX1NQQUNFKDApKTsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiJXNcbiIsIGFiLT5za2ItPmRhdGEgKyBOTE1TR19TUEFDRSgwKSk7CiAJCX0KIAl9CiAJYXVkaXRfYnVmZmVyX2ZyZWUoYWIpOwpAQCAtODUwLDEyICs4NzksMTMgQEAKIC8qIExvZyBhbiBhdWRpdCByZWNvcmQuICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjYWxscwogICogYXVkaXRfbG9nX3N0YXJ0LCBhdWRpdF9sb2dfdmZvcm1hdCwgYW5kIGF1ZGl0X2xvZ19lbmQuICBJdCBtYXkgYmUKICAqIGNhbGxlZCBpbiBhbnkgY29udGV4dC4gKi8KLXZvaWQgYXVkaXRfbG9nKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIGludCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgYXVkaXRfbG9nKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIGludCBnZnBfbWFzaywgaW50IHR5cGUsIAorCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKIAl2YV9saXN0IGFyZ3M7CiAKLQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjdHgsIHR5cGUpOworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGN0eCwgZ2ZwX21hc2ssIHR5cGUpOwogCWlmIChhYikgewogCQl2YV9zdGFydChhcmdzLCBmbXQpOwogCQlhdWRpdF9sb2dfdmZvcm1hdChhYiwgZm10LCBhcmdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdHNjLmMgYi9rZXJuZWwvYXVkaXRzYy5jCmluZGV4IGU3NWY4NGUuLjg4Njk2ZjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdHNjLmMKKysrIGIva2VybmVsL2F1ZGl0c2MuYwpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogLyogMCA9IG5vIGNoZWNraW5nCkBAIC05NSw2ICs5OCw3IEBACiAJdWlkX3QJCXVpZDsKIAlnaWRfdAkJZ2lkOwogCWRldl90CQlyZGV2OworCXVuc2lnbmVkCWZsYWdzOwogfTsKIAogc3RydWN0IGF1ZGl0X2F1eF9kYXRhIHsKQEAgLTE2Nyw5ICsxNzEsMTYgQEAKIC8qIFRoZXJlIGFyZSB0aHJlZSBsaXN0cyBvZiBydWxlcyAtLSBvbmUgdG8gc2VhcmNoIGF0IHRhc2sgY3JlYXRpb24KICAqIHRpbWUsIG9uZSB0byBzZWFyY2ggYXQgc3lzY2FsbCBlbnRyeSB0aW1lLCBhbmQgYW5vdGhlciB0byBzZWFyY2ggYXQKICAqIHN5c2NhbGwgZXhpdCB0aW1lLiAqLwotc3RhdGljIExJU1RfSEVBRChhdWRpdF90c2tsaXN0KTsKLXN0YXRpYyBMSVNUX0hFQUQoYXVkaXRfZW50bGlzdCk7Ci1zdGF0aWMgTElTVF9IRUFEKGF1ZGl0X2V4dGxpc3QpOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgYXVkaXRfZmlsdGVyX2xpc3RbQVVESVRfTlJfRklMVEVSU10gPSB7CisJTElTVF9IRUFEX0lOSVQoYXVkaXRfZmlsdGVyX2xpc3RbMF0pLAorCUxJU1RfSEVBRF9JTklUKGF1ZGl0X2ZpbHRlcl9saXN0WzFdKSwKKwlMSVNUX0hFQURfSU5JVChhdWRpdF9maWx0ZXJfbGlzdFsyXSksCisJTElTVF9IRUFEX0lOSVQoYXVkaXRfZmlsdGVyX2xpc3RbM10pLAorCUxJU1RfSEVBRF9JTklUKGF1ZGl0X2ZpbHRlcl9saXN0WzRdKSwKKyNpZiBBVURJVF9OUl9GSUxURVJTICE9IDUKKyNlcnJvciBGaXggYXVkaXRfZmlsdGVyX2xpc3QgaW5pdGlhbGlzZXIKKyNlbmRpZgorfTsKIAogc3RydWN0IGF1ZGl0X2VudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICBsaXN0OwpAQCAtMTc5LDkgKzE5MCwzNiBAQAogCiBleHRlcm4gaW50IGF1ZGl0X3BpZDsKIAorLyogQ29weSBydWxlIGZyb20gdXNlci1zcGFjZSB0byBrZXJuZWwtc3BhY2UuICBDYWxsZWQgZnJvbSAKKyAqIGF1ZGl0X2FkZF9ydWxlIGR1cmluZyBBVURJVF9BREQuICovCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9jb3B5X3J1bGUoc3RydWN0IGF1ZGl0X3J1bGUgKmQsIHN0cnVjdCBhdWRpdF9ydWxlICpzKQoreworCWludCBpOworCisJaWYgKHMtPmFjdGlvbiAhPSBBVURJVF9ORVZFUgorCSAgICAmJiBzLT5hY3Rpb24gIT0gQVVESVRfUE9TU0lCTEUKKwkgICAgJiYgcy0+YWN0aW9uICE9IEFVRElUX0FMV0FZUykKKwkJcmV0dXJuIC0xOworCWlmIChzLT5maWVsZF9jb3VudCA8IDAgfHwgcy0+ZmllbGRfY291bnQgPiBBVURJVF9NQVhfRklFTERTKQorCQlyZXR1cm4gLTE7CisJaWYgKChzLT5mbGFncyAmIH5BVURJVF9GSUxURVJfUFJFUEVORCkgPj0gQVVESVRfTlJfRklMVEVSUykKKwkJcmV0dXJuIC0xOworCisJZC0+ZmxhZ3MJPSBzLT5mbGFnczsKKwlkLT5hY3Rpb24JPSBzLT5hY3Rpb247CisJZC0+ZmllbGRfY291bnQJPSBzLT5maWVsZF9jb3VudDsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+ZmllbGRfY291bnQ7IGkrKykgeworCQlkLT5maWVsZHNbaV0gPSBzLT5maWVsZHNbaV07CisJCWQtPnZhbHVlc1tpXSA9IHMtPnZhbHVlc1tpXTsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFVRElUX0JJVE1BU0tfU0laRTsgaSsrKSBkLT5tYXNrW2ldID0gcy0+bWFza1tpXTsKKwlyZXR1cm4gMDsKK30KKwogLyogQ2hlY2sgdG8gc2VlIGlmIHR3byBydWxlcyBhcmUgaWRlbnRpY2FsLiAgSXQgaXMgY2FsbGVkIGZyb20KKyAqIGF1ZGl0X2FkZF9ydWxlIGR1cmluZyBBVURJVF9BREQgYW5kIAogICogYXVkaXRfZGVsX3J1bGUgZHVyaW5nIEFVRElUX0RFTC4gKi8KLXN0YXRpYyBpbnQgYXVkaXRfY29tcGFyZV9ydWxlKHN0cnVjdCBhdWRpdF9ydWxlICphLCBzdHJ1Y3QgYXVkaXRfcnVsZSAqYikKK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2NvbXBhcmVfcnVsZShzdHJ1Y3QgYXVkaXRfcnVsZSAqYSwgc3RydWN0IGF1ZGl0X3J1bGUgKmIpCiB7CiAJaW50IGk7CiAKQEAgLTIxMCwxOSArMjQ4LDM3IEBACiAvKiBOb3RlIHRoYXQgYXVkaXRfYWRkX3J1bGUgYW5kIGF1ZGl0X2RlbF9ydWxlIGFyZSBjYWxsZWQgdmlhCiAgKiBhdWRpdF9yZWNlaXZlKCkgaW4gYXVkaXQuYywgYW5kIGFyZSBwcm90ZWN0ZWQgYnkKICAqIGF1ZGl0X25ldGxpbmtfc2VtLiAqLwotc3RhdGljIGlubGluZSBpbnQgYXVkaXRfYWRkX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwKLQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2FkZF9ydWxlKHN0cnVjdCBhdWRpdF9ydWxlICpydWxlLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKLQlpZiAoZW50cnktPnJ1bGUuZmxhZ3MgJiBBVURJVF9QUkVQRU5EKSB7Ci0JCWVudHJ5LT5ydWxlLmZsYWdzICY9IH5BVURJVF9QUkVQRU5EOworCXN0cnVjdCBhdWRpdF9lbnRyeSAgKmVudHJ5OworCisJLyogRG8gbm90IHVzZSB0aGUgX3JjdSBpdGVyYXRvciBoZXJlLCBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5CisJICogYWRkaXRpb24gcm91dGluZS4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBsaXN0KSB7CisJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlbnRyeS0+cnVsZSkpIHsKKwkJCXJldHVybiAtRUVYSVNUOworCQl9CisJfQorCisJaWYgKCEoZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChhdWRpdF9jb3B5X3J1bGUoJmVudHJ5LT5ydWxlLCBydWxlKSkgeworCQlrZnJlZShlbnRyeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChlbnRyeS0+cnVsZS5mbGFncyAmIEFVRElUX0ZJTFRFUl9QUkVQRU5EKSB7CisJCWVudHJ5LT5ydWxlLmZsYWdzICY9IH5BVURJVF9GSUxURVJfUFJFUEVORDsKIAkJbGlzdF9hZGRfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CiAJfSBlbHNlIHsKIAkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCBsaXN0KTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXVkaXRfZnJlZV9ydWxlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9mcmVlX3J1bGUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYXVkaXRfZW50cnksIHJjdSk7CiAJa2ZyZWUoZSk7CkBAIC0yNDUsODIgKzMwMSw4MiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JcmV0dXJuIC1FRkFVTFQ7CQkvKiBObyBtYXRjaGluZyBydWxlICovCisJcmV0dXJuIC1FTk9FTlQ7CQkvKiBObyBtYXRjaGluZyBydWxlICovCiB9CiAKLS8qIENvcHkgcnVsZSBmcm9tIHVzZXItc3BhY2UgdG8ga2VybmVsLXNwYWNlLiAgQ2FsbGVkIGR1cmluZwotICogQVVESVRfQURELiAqLwotc3RhdGljIGludCBhdWRpdF9jb3B5X3J1bGUoc3RydWN0IGF1ZGl0X3J1bGUgKmQsIHN0cnVjdCBhdWRpdF9ydWxlICpzKQorc3RhdGljIGludCBhdWRpdF9saXN0X3J1bGVzKHZvaWQgKl9kZXN0KQogeworCWludCBwaWQsIHNlcTsKKwlpbnQgKmRlc3QgPSBfZGVzdDsKKwlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwogCWludCBpOwogCi0JaWYgKHMtPmFjdGlvbiAhPSBBVURJVF9ORVZFUgotCSAgICAmJiBzLT5hY3Rpb24gIT0gQVVESVRfUE9TU0lCTEUKLQkgICAgJiYgcy0+YWN0aW9uICE9IEFVRElUX0FMV0FZUykKLQkJcmV0dXJuIC0xOwotCWlmIChzLT5maWVsZF9jb3VudCA8IDAgfHwgcy0+ZmllbGRfY291bnQgPiBBVURJVF9NQVhfRklFTERTKQotCQlyZXR1cm4gLTE7CisJcGlkID0gZGVzdFswXTsKKwlzZXEgPSBkZXN0WzFdOworCWtmcmVlKGRlc3QpOwogCi0JZC0+ZmxhZ3MJPSBzLT5mbGFnczsKLQlkLT5hY3Rpb24JPSBzLT5hY3Rpb247Ci0JZC0+ZmllbGRfY291bnQJPSBzLT5maWVsZF9jb3VudDsKLQlmb3IgKGkgPSAwOyBpIDwgZC0+ZmllbGRfY291bnQ7IGkrKykgewotCQlkLT5maWVsZHNbaV0gPSBzLT5maWVsZHNbaV07Ci0JCWQtPnZhbHVlc1tpXSA9IHMtPnZhbHVlc1tpXTsKKwlkb3duKCZhdWRpdF9uZXRsaW5rX3NlbSk7CisKKwkvKiBUaGUgKl9yY3UgaXRlcmF0b3JzIG5vdCBuZWVkZWQgaGVyZSBiZWNhdXNlIHdlIGFyZQorCSAgIGFsd2F5cyBjYWxsZWQgd2l0aCBhdWRpdF9uZXRsaW5rX3NlbSBoZWxkLiAqLworCWZvciAoaT0wOyBpPEFVRElUX05SX0ZJTFRFUlM7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYXVkaXRfZmlsdGVyX2xpc3RbaV0sIGxpc3QpCisJCQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAwLCAxLAorCQkJCQkgJmVudHJ5LT5ydWxlLCBzaXplb2YoZW50cnktPnJ1bGUpKTsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IEFVRElUX0JJVE1BU0tfU0laRTsgaSsrKSBkLT5tYXNrW2ldID0gcy0+bWFza1tpXTsKKwlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAxLCAxLCBOVUxMLCAwKTsKKwkKKwl1cCgmYXVkaXRfbmV0bGlua19zZW0pOwogCXJldHVybiAwOwogfQogCiBpbnQgYXVkaXRfcmVjZWl2ZV9maWx0ZXIoaW50IHR5cGUsIGludCBwaWQsIGludCB1aWQsIGludCBzZXEsIHZvaWQgKmRhdGEsCiAJCQkJCQkJdWlkX3QgbG9naW51aWQpCiB7Ci0JdTMyCQkgICBmbGFnczsKLQlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCWludCAqZGVzdDsKIAlpbnQJCSAgIGVyciA9IDA7CisJdW5zaWduZWQgbGlzdG5yOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBVURJVF9MSVNUOgotCQkvKiBUaGUgKl9yY3UgaXRlcmF0b3JzIG5vdCBuZWVkZWQgaGVyZSBiZWNhdXNlIHdlIGFyZQotCQkgICBhbHdheXMgY2FsbGVkIHdpdGggYXVkaXRfbmV0bGlua19zZW0gaGVsZC4gKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmF1ZGl0X3Rza2xpc3QsIGxpc3QpCi0JCQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAwLCAxLAotCQkJCQkgJmVudHJ5LT5ydWxlLCBzaXplb2YoZW50cnktPnJ1bGUpKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmF1ZGl0X2VudGxpc3QsIGxpc3QpCi0JCQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAwLCAxLAotCQkJCQkgJmVudHJ5LT5ydWxlLCBzaXplb2YoZW50cnktPnJ1bGUpKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmF1ZGl0X2V4dGxpc3QsIGxpc3QpCi0JCQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAwLCAxLAotCQkJCQkgJmVudHJ5LT5ydWxlLCBzaXplb2YoZW50cnktPnJ1bGUpKTsKLQkJYXVkaXRfc2VuZF9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVCwgMSwgMSwgTlVMTCwgMCk7CisJCS8qIFdlIGNhbid0IGp1c3Qgc3BldyBvdXQgdGhlIHJ1bGVzIGhlcmUgYmVjYXVzZSB3ZSBtaWdodCBmaWxsCisJCSAqIHRoZSBhdmFpbGFibGUgc29ja2V0IGJ1ZmZlciBzcGFjZSBhbmQgZGVhZGxvY2sgd2FpdGluZyBmb3IKKwkJICogYXVkaXRjdGwgdG8gcmVhZCBmcm9tIGl0Li4uIHdoaWNoIGlzbid0IGV2ZXIgZ29pbmcgdG8KKwkJICogaGFwcGVuIGlmIHdlJ3JlIGFjdHVhbGx5IHJ1bm5pbmcgaW4gdGhlIGNvbnRleHQgb2YgYXVkaXRjdGwKKwkJICogdHJ5aW5nIHRvIF9zZW5kXyB0aGUgc3R1ZmYgKi8KKwkJIAorCQlkZXN0ID0ga21hbGxvYygyICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRlc3QpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZGVzdFswXSA9IHBpZDsKKwkJZGVzdFsxXSA9IHNlcTsKKworCQl0c2sgPSBrdGhyZWFkX3J1bihhdWRpdF9saXN0X3J1bGVzLCBkZXN0LCAiYXVkaXRfbGlzdF9ydWxlcyIpOworCQlpZiAoSVNfRVJSKHRzaykpIHsKKwkJCWtmcmVlKGRlc3QpOworCQkJZXJyID0gUFRSX0VSUih0c2spOworCQl9CiAJCWJyZWFrOwogCWNhc2UgQVVESVRfQUREOgotCQlpZiAoIShlbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoYXVkaXRfY29weV9ydWxlKCZlbnRyeS0+cnVsZSwgZGF0YSkpIHsKLQkJCWtmcmVlKGVudHJ5KTsKKwkJbGlzdG5yID0oKHN0cnVjdCBhdWRpdF9ydWxlICopZGF0YSktPmZsYWdzICYgfkFVRElUX0ZJTFRFUl9QUkVQRU5EOworCQlpZiAobGlzdG5yID49IEFVRElUX05SX0ZJTFRFUlMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlmbGFncyA9IGVudHJ5LT5ydWxlLmZsYWdzOwotCQlpZiAoIWVyciAmJiAoZmxhZ3MgJiBBVURJVF9QRVJfVEFTSykpCi0JCQllcnIgPSBhdWRpdF9hZGRfcnVsZShlbnRyeSwgJmF1ZGl0X3Rza2xpc3QpOwotCQlpZiAoIWVyciAmJiAoZmxhZ3MgJiBBVURJVF9BVF9FTlRSWSkpCi0JCQllcnIgPSBhdWRpdF9hZGRfcnVsZShlbnRyeSwgJmF1ZGl0X2VudGxpc3QpOwotCQlpZiAoIWVyciAmJiAoZmxhZ3MgJiBBVURJVF9BVF9FWElUKSkKLQkJCWVyciA9IGF1ZGl0X2FkZF9ydWxlKGVudHJ5LCAmYXVkaXRfZXh0bGlzdCk7Ci0JCWF1ZGl0X2xvZyhOVUxMLCBBVURJVF9DT05GSUdfQ0hBTkdFLCAKLQkJCQkiYXVpZD0ldSBhZGRlZCBhbiBhdWRpdCBydWxlXG4iLCBsb2dpbnVpZCk7CisKKwkJZXJyID0gYXVkaXRfYWRkX3J1bGUoZGF0YSwgJmF1ZGl0X2ZpbHRlcl9saXN0W2xpc3Rucl0pOworCQlpZiAoIWVycikKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCSAgImF1aWQ9JXUgYWRkZWQgYW4gYXVkaXQgcnVsZVxuIiwgbG9naW51aWQpOwogCQlicmVhazsKIAljYXNlIEFVRElUX0RFTDoKLQkJZmxhZ3MgPSgoc3RydWN0IGF1ZGl0X3J1bGUgKilkYXRhKS0+ZmxhZ3M7Ci0JCWlmICghZXJyICYmIChmbGFncyAmIEFVRElUX1BFUl9UQVNLKSkKLQkJCWVyciA9IGF1ZGl0X2RlbF9ydWxlKGRhdGEsICZhdWRpdF90c2tsaXN0KTsKLQkJaWYgKCFlcnIgJiYgKGZsYWdzICYgQVVESVRfQVRfRU5UUlkpKQotCQkJZXJyID0gYXVkaXRfZGVsX3J1bGUoZGF0YSwgJmF1ZGl0X2VudGxpc3QpOwotCQlpZiAoIWVyciAmJiAoZmxhZ3MgJiBBVURJVF9BVF9FWElUKSkKLQkJCWVyciA9IGF1ZGl0X2RlbF9ydWxlKGRhdGEsICZhdWRpdF9leHRsaXN0KTsKLQkJYXVkaXRfbG9nKE5VTEwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkJImF1aWQ9JXUgcmVtb3ZlZCBhbiBhdWRpdCBydWxlXG4iLCBsb2dpbnVpZCk7CisJCWxpc3RuciA9KChzdHJ1Y3QgYXVkaXRfcnVsZSAqKWRhdGEpLT5mbGFncyAmIH5BVURJVF9GSUxURVJfUFJFUEVORDsKKwkJaWYgKGxpc3RuciA+PSBBVURJVF9OUl9GSUxURVJTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZXJyID0gYXVkaXRfZGVsX3J1bGUoZGF0YSwgJmF1ZGl0X2ZpbHRlcl9saXN0W2xpc3Rucl0pOworCQlpZiAoIWVycikKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCSAgImF1aWQ9JXUgcmVtb3ZlZCBhbiBhdWRpdCBydWxlXG4iLCBsb2dpbnVpZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzg0LDggKzQ0MCwxMiBAQAogCQkJCXJlc3VsdCA9IChjdHgtPnJldHVybl9jb2RlID09IHZhbHVlKTsKIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX1NVQ0NFU1M6Ci0JCQlpZiAoY3R4ICYmIGN0eC0+cmV0dXJuX3ZhbGlkKQotCQkJCXJlc3VsdCA9IChjdHgtPnJldHVybl92YWxpZCA9PSBBVURJVFNDX1NVQ0NFU1MpOworCQkJaWYgKGN0eCAmJiBjdHgtPnJldHVybl92YWxpZCkgeworCQkJCWlmICh2YWx1ZSkKKwkJCQkJcmVzdWx0ID0gKGN0eC0+cmV0dXJuX3ZhbGlkID09IEFVRElUU0NfU1VDQ0VTUyk7CisJCQkJZWxzZQorCQkJCQlyZXN1bHQgPSAoY3R4LT5yZXR1cm5fdmFsaWQgPT0gQVVESVRTQ19GQUlMVVJFKTsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0RFVk1BSk9SOgogCQkJaWYgKGN0eCkgewpAQCAtNDU0LDcgKzUxNCw3IEBACiAJZW51bSBhdWRpdF9zdGF0ZSAgIHN0YXRlOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZhdWRpdF90c2tsaXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmF1ZGl0X2ZpbHRlcl9saXN0W0FVRElUX0ZJTFRFUl9UQVNLXSwgbGlzdCkgewogCQlpZiAoYXVkaXRfZmlsdGVyX3J1bGVzKHRzaywgJmUtPnJ1bGUsIE5VTEwsICZzdGF0ZSkpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIHN0YXRlOwpAQCAtNDc0LDIyICs1MzQsODYgQEAKIAkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKLQllbnVtIGF1ZGl0X3N0YXRlICAgc3RhdGU7Ci0JaW50CQkgICB3b3JkID0gQVVESVRfV09SRChjdHgtPm1ham9yKTsKLQlpbnQJCSAgIGJpdCAgPSBBVURJVF9CSVQoY3R4LT5tYWpvcik7CisJZW51bSBhdWRpdF9zdGF0ZSBzdGF0ZTsKKworCWlmIChhdWRpdF9waWQgJiYgdHNrLT50Z2lkID09IGF1ZGl0X3BpZCkKKwkJcmV0dXJuIEFVRElUX0RJU0FCTEVEOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIGxpc3QsIGxpc3QpIHsKLQkJaWYgKChlLT5ydWxlLm1hc2tbd29yZF0gJiBiaXQpID09IGJpdAotIAkJICAgICYmIGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBjdHgsICZzdGF0ZSkpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJcmV0dXJuIHN0YXRlOwotCQl9CisJaWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CisJCSAgICBpbnQgd29yZCA9IEFVRElUX1dPUkQoY3R4LT5tYWpvcik7CisJCSAgICBpbnQgYml0ICA9IEFVRElUX0JJVChjdHgtPm1ham9yKTsKKworCQkgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgbGlzdCwgbGlzdCkgeworCQkJICAgIGlmICgoZS0+cnVsZS5tYXNrW3dvcmRdICYgYml0KSA9PSBiaXQKKwkJCQkmJiBhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgY3R4LCAmc3RhdGUpKSB7CisJCQkJICAgIHJjdV9yZWFkX3VubG9jaygpOworCQkJCSAgICByZXR1cm4gc3RhdGU7CisJCQkgICAgfQorCQkgICAgfQogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gQVVESVRfQlVJTERfQ09OVEVYVDsKIH0KIAorc3RhdGljIGludCBhdWRpdF9maWx0ZXJfdXNlcl9ydWxlcyhzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKmNiLAorCQkJICAgICAgc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUsCisJCQkgICAgICBlbnVtIGF1ZGl0X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBydWxlLT5maWVsZF9jb3VudDsgaSsrKSB7CisJCXUzMiBmaWVsZCAgPSBydWxlLT5maWVsZHNbaV0gJiB+QVVESVRfTkVHQVRFOworCQl1MzIgdmFsdWUgID0gcnVsZS0+dmFsdWVzW2ldOworCQlpbnQgcmVzdWx0ID0gMDsKKworCQlzd2l0Y2ggKGZpZWxkKSB7CisJCWNhc2UgQVVESVRfUElEOgorCQkJcmVzdWx0ID0gKGNiLT5jcmVkcy5waWQgPT0gdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfVUlEOgorCQkJcmVzdWx0ID0gKGNiLT5jcmVkcy51aWQgPT0gdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfR0lEOgorCQkJcmVzdWx0ID0gKGNiLT5jcmVkcy5naWQgPT0gdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTE9HSU5VSUQ6CisJCQlyZXN1bHQgPSAoY2ItPmxvZ2ludWlkID09IHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJ1bGUtPmZpZWxkc1tpXSAmIEFVRElUX05FR0FURSkKKwkJCXJlc3VsdCA9ICFyZXN1bHQ7CisJCWlmICghcmVzdWx0KQorCQkJcmV0dXJuIDA7CisJfQorCXN3aXRjaCAocnVsZS0+YWN0aW9uKSB7CisJY2FzZSBBVURJVF9ORVZFUjogICAgKnN0YXRlID0gQVVESVRfRElTQUJMRUQ7CSAgICBicmVhazsKKwljYXNlIEFVRElUX1BPU1NJQkxFOiAqc3RhdGUgPSBBVURJVF9CVUlMRF9DT05URVhUOyAgYnJlYWs7CisJY2FzZSBBVURJVF9BTFdBWVM6ICAgKnN0YXRlID0gQVVESVRfUkVDT1JEX0NPTlRFWFQ7IGJyZWFrOworCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGF1ZGl0X2ZpbHRlcl91c2VyKHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqY2IsIGludCB0eXBlKQoreworCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKKwllbnVtIGF1ZGl0X3N0YXRlICAgc3RhdGU7CisJaW50IHJldCA9IDE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmF1ZGl0X2ZpbHRlcl9saXN0W0FVRElUX0ZJTFRFUl9VU0VSXSwgbGlzdCkgeworCQlpZiAoYXVkaXRfZmlsdGVyX3VzZXJfcnVsZXMoY2IsICZlLT5ydWxlLCAmc3RhdGUpKSB7CisJCQlpZiAoc3RhdGUgPT0gQVVESVRfRElTQUJMRUQpCisJCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHJldDsgLyogQXVkaXQgYnkgZGVmYXVsdCAqLworfQorCiAvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0YXNrX2xvY2soKSBoZWxkLiAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYXVkaXRfZ2V0X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkJCQkgICAgICBpbnQgcmV0dXJuX3ZhbGlkLApAQCAtNTA0LDcgKzYyOCw3IEBACiAKIAlpZiAoY29udGV4dC0+aW5fc3lzY2FsbCAmJiAhY29udGV4dC0+YXVkaXRhYmxlKSB7CiAJCWVudW0gYXVkaXRfc3RhdGUgc3RhdGU7Ci0JCXN0YXRlID0gYXVkaXRfZmlsdGVyX3N5c2NhbGwodHNrLCBjb250ZXh0LCAmYXVkaXRfZXh0bGlzdCk7CisJCXN0YXRlID0gYXVkaXRfZmlsdGVyX3N5c2NhbGwodHNrLCBjb250ZXh0LCAmYXVkaXRfZmlsdGVyX2xpc3RbQVVESVRfRklMVEVSX0VYSVRdKTsKIAkJaWYgKHN0YXRlID09IEFVRElUX1JFQ09SRF9DT05URVhUKQogCQkJY29udGV4dC0+YXVkaXRhYmxlID0gMTsKIAl9CkBAIC02NzksMTMgKzgwMywxMyBAQAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF1ZGl0X2xvZ19leGl0KHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0KQorc3RhdGljIHZvaWQgYXVkaXRfbG9nX2V4aXQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGludCBnZnBfbWFzaykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEgKmF1eDsKIAotCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIEFVRElUX1NZU0NBTEwpOworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIGdmcF9tYXNrLCBBVURJVF9TWVNDQUxMKTsKIAlpZiAoIWFiKQogCQlyZXR1cm47CQkvKiBhdWRpdF9wYW5pYyBoYXMgYmVlbiBjYWxsZWQgKi8KIAlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXJjaD0leCBzeXNjYWxsPSVkIiwKQEAgLTcxNyw3ICs4NDEsNyBAQAogCiAJZm9yIChhdXggPSBjb250ZXh0LT5hdXg7IGF1eDsgYXV4ID0gYXV4LT5uZXh0KSB7CiAKLQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgYXV4LT50eXBlKTsKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgYXV4LT50eXBlKTsKIAkJaWYgKCFhYikKIAkJCWNvbnRpbnVlOyAvKiBhdWRpdF9wYW5pYyBoYXMgYmVlbiBjYWxsZWQgKi8KIApAQCAtNzU0LDE0ICs4NzgsMTQgQEAKIAl9CiAKIAlpZiAoY29udGV4dC0+cHdkICYmIGNvbnRleHQtPnB3ZG1udCkgewotCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBBVURJVF9DV0QpOworCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBHRlBfS0VSTkVMLCBBVURJVF9DV0QpOwogCQlpZiAoYWIpIHsKIAkJCWF1ZGl0X2xvZ19kX3BhdGgoYWIsICJjd2Q9IiwgY29udGV4dC0+cHdkLCBjb250ZXh0LT5wd2RtbnQpOwogCQkJYXVkaXRfbG9nX2VuZChhYik7CiAJCX0KIAl9CiAJZm9yIChpID0gMDsgaSA8IGNvbnRleHQtPm5hbWVfY291bnQ7IGkrKykgewotCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBBVURJVF9QQVRIKTsKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgQVVESVRfUEFUSCk7CiAJCWlmICghYWIpCiAJCQljb250aW51ZTsgLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCiAKQEAgLTc3MCw2ICs4OTQsOCBAQAogCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSIpOwogCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgY29udGV4dC0+bmFtZXNbaV0ubmFtZSk7CiAJCX0KKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBmbGFncz0leFxuIiwgY29udGV4dC0+bmFtZXNbaV0uZmxhZ3MpOworCQkJIAogCQlpZiAoY29udGV4dC0+bmFtZXNbaV0uaW5vICE9ICh1bnNpZ25lZCBsb25nKS0xKQogCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBpbm9kZT0lbHUgZGV2PSUwMng6JTAyeCBtb2RlPSUjbyIKIAkJCQkJICAgICAiIG91aWQ9JXUgb2dpZD0ldSByZGV2PSUwMng6JTAyeCIsCkBAIC03OTksOSArOTI1LDExIEBACiAJCXJldHVybjsKIAogCS8qIENoZWNrIGZvciBzeXN0ZW0gY2FsbHMgdGhhdCBkbyBub3QgZ28gdGhyb3VnaCB0aGUgZXhpdAotCSAqIGZ1bmN0aW9uIChlLmcuLCBleGl0X2dyb3VwKSwgdGhlbiBmcmVlIGNvbnRleHQgYmxvY2suICovCi0JaWYgKGNvbnRleHQtPmluX3N5c2NhbGwgJiYgY29udGV4dC0+YXVkaXRhYmxlICYmIGNvbnRleHQtPnBpZCAhPSBhdWRpdF9waWQpCi0JCWF1ZGl0X2xvZ19leGl0KGNvbnRleHQpOworCSAqIGZ1bmN0aW9uIChlLmcuLCBleGl0X2dyb3VwKSwgdGhlbiBmcmVlIGNvbnRleHQgYmxvY2suIAorCSAqIFdlIHVzZSBHRlBfQVRPTUlDIGhlcmUgYmVjYXVzZSB3ZSBtaWdodCBiZSBkb2luZyB0aGlzIAorCSAqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBpZGxlIHRocmVhZCAqLworCWlmIChjb250ZXh0LT5pbl9zeXNjYWxsICYmIGNvbnRleHQtPmF1ZGl0YWJsZSkKKwkJYXVkaXRfbG9nX2V4aXQoY29udGV4dCwgR0ZQX0FUT01JQyk7CiAKIAlhdWRpdF9mcmVlX2NvbnRleHQoY29udGV4dCk7CiB9CkBAIC04NzYsMTEgKzEwMDQsMTEgQEAKIAogCXN0YXRlID0gY29udGV4dC0+c3RhdGU7CiAJaWYgKHN0YXRlID09IEFVRElUX1NFVFVQX0NPTlRFWFQgfHwgc3RhdGUgPT0gQVVESVRfQlVJTERfQ09OVEVYVCkKLQkJc3RhdGUgPSBhdWRpdF9maWx0ZXJfc3lzY2FsbCh0c2ssIGNvbnRleHQsICZhdWRpdF9lbnRsaXN0KTsKKwkJc3RhdGUgPSBhdWRpdF9maWx0ZXJfc3lzY2FsbCh0c2ssIGNvbnRleHQsICZhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9GSUxURVJfRU5UUlldKTsKIAlpZiAobGlrZWx5KHN0YXRlID09IEFVRElUX0RJU0FCTEVEKSkKIAkJcmV0dXJuOwogCi0JY29udGV4dC0+c2VyaWFsICAgICA9IGF1ZGl0X3NlcmlhbCgpOworCWNvbnRleHQtPnNlcmlhbCAgICAgPSAwOwogCWNvbnRleHQtPmN0aW1lICAgICAgPSBDVVJSRU5UX1RJTUU7CiAJY29udGV4dC0+aW5fc3lzY2FsbCA9IDE7CiAJY29udGV4dC0+YXVkaXRhYmxlICA9ICEhKHN0YXRlID09IEFVRElUX1JFQ09SRF9DT05URVhUKTsKQEAgLTkwMywxMCArMTAzMSwxMCBAQAogCS8qIE5vdCBoYXZpbmcgYSBjb250ZXh0IGhlcmUgaXMgb2ssIHNpbmNlIHRoZSBwYXJlbnQgbWF5IGhhdmUKIAkgKiBjYWxsZWQgX19wdXRfdGFza19zdHJ1Y3QuICovCiAJaWYgKGxpa2VseSghY29udGV4dCkpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKLQlpZiAoY29udGV4dC0+aW5fc3lzY2FsbCAmJiBjb250ZXh0LT5hdWRpdGFibGUgJiYgY29udGV4dC0+cGlkICE9IGF1ZGl0X3BpZCkKLQkJYXVkaXRfbG9nX2V4aXQoY29udGV4dCk7CisJaWYgKGNvbnRleHQtPmluX3N5c2NhbGwgJiYgY29udGV4dC0+YXVkaXRhYmxlKQorCQlhdWRpdF9sb2dfZXhpdChjb250ZXh0LCBHRlBfS0VSTkVMKTsKIAogCWNvbnRleHQtPmluX3N5c2NhbGwgPSAwOwogCWNvbnRleHQtPmF1ZGl0YWJsZSAgPSAwOwpAQCAtOTE5LDkgKzEwNDcsOSBAQAogCX0gZWxzZSB7CiAJCWF1ZGl0X2ZyZWVfbmFtZXMoY29udGV4dCk7CiAJCWF1ZGl0X2ZyZWVfYXV4KGNvbnRleHQpOwotCQlhdWRpdF96ZXJvX2NvbnRleHQoY29udGV4dCwgY29udGV4dC0+c3RhdGUpOwogCQl0c2stPmF1ZGl0X2NvbnRleHQgPSBjb250ZXh0OwogCX0KKyBvdXQ6CiAJcHV0X3Rhc2tfc3RydWN0KHRzayk7CiB9CiAKQEAgLTk5Niw3ICsxMTI0LDcgQEAKIAogLyogU3RvcmUgdGhlIGlub2RlIGFuZCBkZXZpY2UgZnJvbSBhIGxvb2t1cC4gIENhbGxlZCBmcm9tCiAgKiBmcy9uYW1laS5jOnBhdGhfbG9va3VwKCkuICovCi12b2lkIGF1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGF1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGZsYWdzKQogewogCWludCBpZHg7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwpAQCAtMTAyMiwxNyArMTE1MCwyMCBAQAogCQkrK2NvbnRleHQtPmlub19jb3VudDsKICNlbmRpZgogCX0KLQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgPSBpbm9kZS0+aV9pbm87Ci0JY29udGV4dC0+bmFtZXNbaWR4XS5kZXYJID0gaW5vZGUtPmlfc2ItPnNfZGV2OwotCWNvbnRleHQtPm5hbWVzW2lkeF0ubW9kZSA9IGlub2RlLT5pX21vZGU7Ci0JY29udGV4dC0+bmFtZXNbaWR4XS51aWQgID0gaW5vZGUtPmlfdWlkOwotCWNvbnRleHQtPm5hbWVzW2lkeF0uZ2lkICA9IGlub2RlLT5pX2dpZDsKLQljb250ZXh0LT5uYW1lc1tpZHhdLnJkZXYgPSBpbm9kZS0+aV9yZGV2OworCWNvbnRleHQtPm5hbWVzW2lkeF0uZmxhZ3MgPSBmbGFnczsKKwljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gaW5vZGUtPmlfaW5vOworCWNvbnRleHQtPm5hbWVzW2lkeF0uZGV2CSAgPSBpbm9kZS0+aV9zYi0+c19kZXY7CisJY29udGV4dC0+bmFtZXNbaWR4XS5tb2RlICA9IGlub2RlLT5pX21vZGU7CisJY29udGV4dC0+bmFtZXNbaWR4XS51aWQgICA9IGlub2RlLT5pX3VpZDsKKwljb250ZXh0LT5uYW1lc1tpZHhdLmdpZCAgID0gaW5vZGUtPmlfZ2lkOworCWNvbnRleHQtPm5hbWVzW2lkeF0ucmRldiAgPSBpbm9kZS0+aV9yZGV2OwogfQogCiB2b2lkIGF1ZGl0c2NfZ2V0X3N0YW1wKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsCiAJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKnQsIHVuc2lnbmVkIGludCAqc2VyaWFsKQogeworCWlmICghY3R4LT5zZXJpYWwpCisJCWN0eC0+c2VyaWFsID0gYXVkaXRfc2VyaWFsKCk7CiAJdC0+dHZfc2VjICA9IGN0eC0+Y3RpbWUudHZfc2VjOwogCXQtPnR2X25zZWMgPSBjdHgtPmN0aW1lLnR2X25zZWM7CiAJKnNlcmlhbCAgICA9IGN0eC0+c2VyaWFsOwpAQCAtMTA0NCw3ICsxMTc1LDcgQEAKIAlpZiAodGFzay0+YXVkaXRfY29udGV4dCkgewogCQlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKIAotCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBBVURJVF9MT0dJTik7CisJCWFiID0gYXVkaXRfbG9nX3N0YXJ0KE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0xPR0lOKTsKIAkJaWYgKGFiKSB7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibG9naW4gcGlkPSVkIHVpZD0ldSAiCiAJCQkJIm9sZCBhdWlkPSV1IG5ldyBhdWlkPSV1IiwKQEAgLTExNTMsNyArMTI4NCw3IEBACiAJZXh0ZXJuIHBpZF90IGF1ZGl0X3NpZ19waWQ7CiAJZXh0ZXJuIHVpZF90IGF1ZGl0X3NpZ191aWQ7CiAKLQlpZiAodW5saWtlbHkoYXVkaXRfcGlkICYmIHQtPnBpZCA9PSBhdWRpdF9waWQpKSB7CisJaWYgKHVubGlrZWx5KGF1ZGl0X3BpZCAmJiB0LT50Z2lkID09IGF1ZGl0X3BpZCkpIHsKIAkJaWYgKHNpZyA9PSBTSUdURVJNIHx8IHNpZyA9PSBTSUdIVVApIHsKIAkJCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHggPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwogCQkJYXVkaXRfc2lnX3BpZCA9IGN1cnJlbnQtPnBpZDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDZkMjA4OWEuLmVlNmQ4YjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMzcxLDYgKzM3MSwxMiBAQAogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CiAKIAlqID0gMDsKKworCS8qCisJICogSXQgaXMgc2FmZSB0byBkZXJlZmVyZW5jZSB0aGUgZmQgdGFibGUgd2l0aG91dCBSQ1Ugb3IKKwkgKiAtPmZpbGVfbG9jayBiZWNhdXNlIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZQorCSAqIGZpbGVzIHN0cnVjdHVyZS4KKwkgKi8KIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggODE0OWYzNi4uNTMzY2UyNyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xMDYyLDcgKzEwNjIsOCBAQAogCSAqIHBhcmVudCdzIENQVSkuIFRoaXMgYXZvaWRzIGFsb3Qgb2YgbmFzdHkgcmFjZXMuCiAJICovCiAJcC0+Y3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCWlmICh1bmxpa2VseSghY3B1X2lzc2V0KHRhc2tfY3B1KHApLCBwLT5jcHVzX2FsbG93ZWQpKSkKKwlpZiAodW5saWtlbHkoIWNwdV9pc3NldCh0YXNrX2NwdShwKSwgcC0+Y3B1c19hbGxvd2VkKSB8fAorCQkJIWNwdV9vbmxpbmUodGFza19jcHUocCkpKSkKIAkJc2V0X3Rhc2tfY3B1KHAsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDRiMzlkMzcuLmZmNWM1MDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KQEAgLTQ5OCw3ICs0OTksNyBAQAogewogCWludCByZXQgPSAoZmxhZ3MgJiBPX1RSVU5DKTsKIAlpZiAocmV0KQotCQl0YWludGVkIHw9IFRBSU5UX0ZPUkNFRF9NT0RVTEU7CisJCWFkZF90YWludChUQUlOVF9GT1JDRURfTU9EVUxFKTsKIAlyZXR1cm4gcmV0OwogfQogI2Vsc2UKQEAgLTg5Nyw3ICs4OTgsNyBAQAogCWlmICghKHRhaW50ZWQgJiBUQUlOVF9GT1JDRURfTU9EVUxFKSkgewogCQlwcmludGsoIiVzOiBubyB2ZXJzaW9uIGZvciBcIiVzXCIgZm91bmQ6IGtlcm5lbCB0YWludGVkLlxuIiwKIAkJICAgICAgIG1vZC0+bmFtZSwgc3ltbmFtZSk7Ci0JCXRhaW50ZWQgfD0gVEFJTlRfRk9SQ0VEX01PRFVMRTsKKwkJYWRkX3RhaW50KFRBSU5UX0ZPUkNFRF9NT0RVTEUpOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTEzNTIsNyArMTM1Myw3IEBACiAJaWYgKCFtb2QtPmxpY2Vuc2VfZ3Bsb2sgJiYgISh0YWludGVkICYgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbW9kdWxlIGxpY2Vuc2UgJyVzJyB0YWludHMga2VybmVsLlxuIiwKIAkJICAgICAgIG1vZC0+bmFtZSwgbGljZW5zZSk7Ci0JCXRhaW50ZWQgfD0gVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFOworCQlhZGRfdGFpbnQoVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKIAl9CiB9CiAKQEAgLTE2MTAsNyArMTYxMSw3IEBACiAJbW9kbWFnaWMgPSBnZXRfbW9kaW5mbyhzZWNoZHJzLCBpbmZvaW5kZXgsICJ2ZXJtYWdpYyIpOwogCS8qIFRoaXMgaXMgYWxsb3dlZDogbW9kcHJvYmUgLS1mb3JjZSB3aWxsIGludmFsaWRhdGUgaXQuICovCiAJaWYgKCFtb2RtYWdpYykgewotCQl0YWludGVkIHw9IFRBSU5UX0ZPUkNFRF9NT0RVTEU7CisJCWFkZF90YWludChUQUlOVF9GT1JDRURfTU9EVUxFKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG5vIHZlcnNpb24gbWFnaWMsIHRhaW50aW5nIGtlcm5lbC5cbiIsCiAJCSAgICAgICBtb2QtPm5hbWUpOwogCX0gZWxzZSBpZiAoIXNhbWVfbWFnaWMobW9kbWFnaWMsIHZlcm1hZ2ljKSkgewpAQCAtMTczOSw3ICsxNzQwLDcgQEAKIAkgICAgKG1vZC0+bnVtX2dwbF9zeW1zICYmICFncGxjcmNpbmRleCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHZlcnNpb25zIGZvciBleHBvcnRlZCBzeW1ib2xzLiIKIAkJICAgICAgICIgVGFpbnRpbmcga2VybmVsLlxuIiwgbW9kLT5uYW1lKTsKLQkJdGFpbnRlZCB8PSBUQUlOVF9GT1JDRURfTU9EVUxFOworCQlhZGRfdGFpbnQoVEFJTlRfRk9SQ0VEX01PRFVMRSk7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBhOTY3NjA1Li40YjhmMGY5IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC00ODgsNiArNDg4LDExIEBACiAKIF9fc2V0dXAoInRpbWUiLCBwcmludGtfdGltZV9zZXR1cCk7CiAKK19fYXR0cmlidXRlX18oKHdlYWspKSB1bnNpZ25lZCBsb25nIGxvbmcgcHJpbnRrX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7Cit9CisKIC8qCiAgKiBUaGlzIGlzIHByaW50ay4gIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4gIFdlIHdhbnQgaXQgdG8gd29yay4KICAqIApAQCAtNTY1LDcgKzU3MCw3IEBACiAJCQkJCWxvZ2xldl9jaGFyID0gZGVmYXVsdF9tZXNzYWdlX2xvZ2xldmVsCiAJCQkJCQkrICcwJzsKIAkJCQl9Ci0JCQkJdCA9IHNjaGVkX2Nsb2NrKCk7CisJCQkJdCA9IHByaW50a19jbG9jaygpOwogCQkJCW5hbm9zZWNfcmVtID0gZG9fZGl2KHQsIDEwMDAwMDAwMDApOwogCQkJCXRsZW4gPSBzcHJpbnRmKHRidWYsCiAJCQkJCQkiPCVjPlslNWx1LiUwNmx1XSAiLApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCA4MWIzYTk2Li4xZjMxYTUyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjk0LDYgKzI5NCwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2xvY2tfc3dpdGNoKHJ1bnF1ZXVlX3QgKnJxLCB0YXNrX3QgKnByZXYpCiB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJLyogdGhpcyBpcyBhIHZhbGlkIGNhc2Ugd2hlbiBhbm90aGVyIHRhc2sgcmVsZWFzZXMgdGhlIHNwaW5sb2NrICovCisJcnEtPmxvY2sub3duZXIgPSBjdXJyZW50OworI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiB9CiAKQEAgLTE1MjksMTAgKzE1MzMsNiBAQAogCSAqCQlNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgogCSAqLwogCXByZXZfdGFza19mbGFncyA9IHByZXYtPmZsYWdzOwotI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSwotCS8qIHRoaXMgaXMgYSB2YWxpZCBjYXNlIHdoZW4gYW5vdGhlciB0YXNrIHJlbGVhc2VzIHRoZSBzcGlubG9jayAqLwotCXJxLT5sb2NrLm93bmVyID0gY3VycmVudDsKLSNlbmRpZgogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKIAlmaW5pc2hfbG9ja19zd2l0Y2gocnEsIHByZXYpOwogCWlmIChtbSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCBjODA0MTJiLi5mNzIzNTIyIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xNzI4LDggKzE3MjgsNyBAQAogCQkJZXJyb3IgPSBwdXRfdXNlcihjdXJyZW50LT5wZGVhdGhfc2lnbmFsLCAoaW50IF9fdXNlciAqKWFyZzIpOwogCQkJYnJlYWs7CiAJCWNhc2UgUFJfR0VUX0RVTVBBQkxFOgotCQkJaWYgKGN1cnJlbnQtPm1tLT5kdW1wYWJsZSkKLQkJCQllcnJvciA9IDE7CisJCQllcnJvciA9IGN1cnJlbnQtPm1tLT5kdW1wYWJsZTsKIAkJCWJyZWFrOwogCQljYXNlIFBSX1NFVF9EVU1QQUJMRToKIAkJCWlmIChhcmcyIDwgMCB8fCBhcmcyID4gMikgewpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCBmNDE1MmZjLi4zYmExMGZhIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtMTE1MSwxOSArMTE1MSwyMiBAQAogIG91dDoKIAlyZXR1cm4gdGltZW91dCA8IDAgPyAwIDogdGltZW91dDsKIH0KLQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV90aW1lb3V0KTsKIAorLyoKKyAqIFdlIGNhbiB1c2UgX19zZXRfY3VycmVudF9zdGF0ZSgpIGhlcmUgYmVjYXVzZSBzY2hlZHVsZV90aW1lb3V0KCkgY2FsbHMKKyAqIHNjaGVkdWxlKCkgdW5jb25kaXRpb25hbGx5LgorICovCiBzaWduZWQgbG9uZyBfX3NjaGVkIHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShzaWduZWQgbG9uZyB0aW1lb3V0KQogewotICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisgICAgICAgX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogICAgICAgIHJldHVybiBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUpOwogCiBzaWduZWQgbG9uZyBfX3NjaGVkIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpCiB7Ci0gICAgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworICAgICAgIF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogICAgICAgIHJldHVybiBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSk7CmRpZmYgLS1naXQgYS9saWIvZGVjX2FuZF9sb2NrLmMgYi9saWIvZGVjX2FuZF9sb2NrLmMKaW5kZXggMjM3N2FmMC4uMzA1YTk2NiAxMDA2NDQKLS0tIGEvbGliL2RlY19hbmRfbG9jay5jCisrKyBiL2xpYi9kZWNfYW5kX2xvY2suYwpAQCAtMSw3ICsxLDQxIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCisjaWZkZWYgX19IQVZFX0FSQ0hfQ01QWENIRworLyoKKyAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG5vdGlvbiBvZiAiZGVjcmVtZW50IGEKKyAqIHJlZmVyZW5jZSBjb3VudCwgYW5kIHJldHVybiBsb2NrZWQgaWYgaXQgZGVjcmVtZW50ZWQgdG8gemVybyIuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgdXNlZCBvbiBhbnkgYXJjaGl0ZWN0dXJlIHRoYXQKKyAqIGhhcyBhIGNtcHhjaGcsIGFuZCB3aGVyZSBhdG9taWMtPnZhbHVlIGlzIGFuIGludCBob2xkaW5nCisgKiB0aGUgdmFsdWUgb2YgdGhlIGF0b21pYyAoaS5lLiB0aGUgaGlnaCBiaXRzIGFyZW4ndCB1c2VkCisgKiBmb3IgYSBsb2NrIG9yIGFueXRoaW5nIGxpa2UgdGhhdCkuCisgKi8KK2ludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKQoreworCWludCBjb3VudGVyOworCWludCBuZXdjb3VudDsKKworCWZvciAoOzspIHsKKwkJY291bnRlciA9IGF0b21pY19yZWFkKGF0b21pYyk7CisJCW5ld2NvdW50ID0gY291bnRlciAtIDE7CisJCWlmICghbmV3Y291bnQpCisJCQlicmVhazsJCS8qIGRvIGl0IHRoZSBzbG93IHdheSAqLworCisJCW5ld2NvdW50ID0gY21weGNoZygmYXRvbWljLT5jb3VudGVyLCBjb3VudGVyLCBuZXdjb3VudCk7CisJCWlmIChuZXdjb3VudCA9PSBjb3VudGVyKQorCQkJcmV0dXJuIDA7CisJfQorCisJc3Bpbl9sb2NrKGxvY2spOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pYykpCisJCXJldHVybiAxOworCXNwaW5fdW5sb2NrKGxvY2spOworCXJldHVybiAwOworfQorI2Vsc2UKIC8qCiAgKiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZS1uZXV0cmFsLCBidXQgc2xvdywKICAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBub3Rpb24gb2YgImRlY3JlbWVudApAQCAtMzMsNSArNjcsNiBAQAogCXNwaW5fdW5sb2NrKGxvY2spOwogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIEVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggNGU5OTM3YS4uMzkxZmZjNSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0yOSw3ICsyOSw3IEBACiAJICBJZiB1bnN1cmUsIGNob29zZSB0aGlzIG9wdGlvbiAoRmxhdCBNZW1vcnkpIG92ZXIgYW55IG90aGVyLgogCiBjb25maWcgRElTQ09OVElHTUVNX01BTlVBTAotCWJvb2wgIkRpc2NvbnRpZ2lvdXMgTWVtb3J5IgorCWJvb2wgIkRpc2NvbnRpZ3VvdXMgTWVtb3J5IgogCWRlcGVuZHMgb24gQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCiAJaGVscAogCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgZW5oYW5jZWQgc3VwcG9ydCBmb3IgZGlzY29udGlndW91cwpAQCAtNTIsNyArNTIsNyBAQAogCSAgbWVtb3J5IGhvdHBsdWcgc3lzdGVtcy4gIFRoaXMgaXMgbm9ybWFsLgogCiAJICBGb3IgbWFueSBvdGhlciBzeXN0ZW1zLCB0aGlzIHdpbGwgYmUgYW4gYWx0ZXJuYXRpdmUgdG8KLQkgICJEaXNjb250aWdpb3VzIE1lbW9yeSIuICBUaGlzIG9wdGlvbiBwcm92aWRlcyBzb21lIHBvdGVudGlhbAorCSAgIkRpc2NvbnRpZ3VvdXMgTWVtb3J5Ii4gIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHNvbWUgcG90ZW50aWFsCiAJICBwZXJmb3JtYW5jZSBiZW5lZml0cywgYWxvbmcgd2l0aCBkZWNyZWFzZWQgY29kZSBjb21wbGV4aXR5LAogCSAgYnV0IGl0IGlzIG5ld2VyLCBhbmQgbW9yZSBleHBlcmltZW50YWwuCiAKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggYWZhMDZlMS4uOTAzM2YwOCAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTMzMyw4ICszMzMsMTMgQEAKIAkJaWYgKHByZXYgJiYgcHJldi0+dm1fZW5kIDwgdm1hLT52bV9zdGFydCkKIAkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCQlpZiAoKGZsYWdzICYgTVBPTF9NRl9TVFJJQ1QpICYmICFpc192bV9odWdldGxiX3BhZ2Uodm1hKSkgeworCQkJdW5zaWduZWQgbG9uZyBlbmR2bWEgPSB2bWEtPnZtX2VuZDsKKwkJCWlmIChlbmR2bWEgPiBlbmQpCisJCQkJZW5kdm1hID0gZW5kOworCQkJaWYgKHZtYS0+dm1fc3RhcnQgPiBzdGFydCkKKwkJCQlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJCQllcnIgPSBjaGVja19wZ2RfcmFuZ2Uodm1hLT52bV9tbSwKLQkJCQkJICAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIG5vZGVzKTsKKwkJCQkJICAgc3RhcnQsIGVuZHZtYSwgbm9kZXMpOwogCQkJaWYgKGVycikgewogCQkJCWZpcnN0ID0gRVJSX1BUUihlcnIpOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDEyMzM0YWUuLmZhMTFkOTEgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTE2NDAsNyArMTY0MCw3IEBACiAvKgogICogR2V0IHJpZCBvZiBwYWdlIHRhYmxlIGluZm9ybWF0aW9uIGluIHRoZSBpbmRpY2F0ZWQgcmVnaW9uLgogICoKLSAqIENhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZC4KKyAqIENhbGxlZCB3aXRoIHRoZSBtbSBzZW1hcGhvcmUgaGVsZC4KICAqLwogc3RhdGljIHZvaWQgdW5tYXBfcmVnaW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LApAQCAtMTk5Myw2ICsxOTkzLDkgQEAKIAlfX3ZtYSA9IGZpbmRfdm1hX3ByZXBhcmUobW0sdm1hLT52bV9zdGFydCwmcHJldiwmcmJfbGluaywmcmJfcGFyZW50KTsKIAlpZiAoX192bWEgJiYgX192bWEtPnZtX3N0YXJ0IDwgdm1hLT52bV9lbmQpCiAJCXJldHVybiAtRU5PTUVNOworCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0FDQ09VTlQpICYmCisJICAgICBzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5KHZtYV9wYWdlcyh2bWEpKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJdm1hX2xpbmsobW0sIHZtYSwgcHJldiwgcmJfbGluaywgcmJfcGFyZW50KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jCmluZGV4IGU5ZmJkMDEuLjU3NTc3ZjYgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKKysrIGIvbW0vbXByb3RlY3QuYwpAQCAtMjQ4LDcgKzI0OCw4IEBACiAKIAkJbmV3ZmxhZ3MgPSB2bV9mbGFncyB8ICh2bWEtPnZtX2ZsYWdzICYgfihWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDKSk7CiAKLQkJaWYgKChuZXdmbGFncyAmIH4obmV3ZmxhZ3MgPj4gNCkpICYgMHhmKSB7CisJCS8qIG5ld2ZsYWdzID4+IDQgc2hpZnQgVk1fTUFZJSBpbiBwbGFjZSBvZiBWTV8lICovCisJCWlmICgobmV3ZmxhZ3MgJiB+KG5ld2ZsYWdzID4+IDQpKSAmIChWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDKSkgewogCQkJZXJyb3IgPSAtRUFDQ0VTOwogCQkJZ290byBvdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBjNTgyM2MzLi5hZTI5MDMzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CkBAIC0xMTcsNyArMTE4LDcgQEAKIAlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKIAlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwotCXRhaW50ZWQgfD0gVEFJTlRfQkFEX1BBR0U7CisJYWRkX3RhaW50KFRBSU5UX0JBRF9QQUdFKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggOWU4NzZkNi4uNDM3ZDMzOCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtNjU5LDcgKzY1OSw3IEBACiAgCSoga21lbV9jYWNoZV9jcmVhdGUoKSwgb3IgX19rbWFsbG9jKCksIGJlZm9yZQogIAkqIHRoZSBnZW5lcmljIGNhY2hlcyBhcmUgaW5pdGlhbGl6ZWQuCiAgCSovCi0JQlVHX09OKGNzaXplcC0+Y3NfY2FjaGVwID09IE5VTEwpOworCUJVR19PTihtYWxsb2Nfc2l6ZXNbSU5ERVhfQUNdLmNzX2NhY2hlcCA9PSBOVUxMKTsKICNlbmRpZgogCXdoaWxlIChzaXplID4gY3NpemVwLT5jc19zaXplKQogCQljc2l6ZXArKzsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYTc0MDc3OC4uMGVhNzFlOCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTEyNTgsOSArMTI1OCw5IEBACiAJCXBnZGF0LT5rc3dhcGRfbWF4X29yZGVyID0gb3JkZXI7CiAJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIF9fR0ZQX0hBUkRXQUxMKSkKIAkJcmV0dXJuOwotCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmem9uZS0+em9uZV9wZ2RhdC0+a3N3YXBkX3dhaXQpKQorCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmcGdkYXQtPmtzd2FwZF93YWl0KSkKIAkJcmV0dXJuOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmem9uZS0+em9uZV9wZ2RhdC0+a3N3YXBkX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGdkYXQtPmtzd2FwZF93YWl0KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwppbmRleCAxNDVmNWNkLi5iNzQ4NjQ4IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuYworKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJdW5zaWduZWQgc2hvcnQgdmlkOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAl1bnNpZ25lZCBzaG9ydCB2bGFuX1RDSTsKLQl1bnNpZ25lZCBzaG9ydCBwcm90bzsKKwlfX2JlMTYgcHJvdG87CiAKIAkvKiB2bGFuX1RDSSA9IG50b2hzKGdldF91bmFsaWduZWQoJnZoZHItPmhfdmxhbl9UQ0kpKTsgKi8KIAl2bGFuX1RDSSA9IG50b2hzKHZoZHItPmhfdmxhbl9UQ0kpOwpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCAyYmRkNTYyLi42MGY2ZjMyIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMTQwLDYgKzE0MCw3IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK3NvdXJjZSAibmV0L25ldGZpbHRlci9LY29uZmlnIgogc291cmNlICJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWciCiBzb3VyY2UgIm5ldC9kZWNuZXQvbmV0ZmlsdGVyL0tjb25maWciCkBAIC0yMDYsOCArMjA3LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwa3RnZW4uCiAKLXNvdXJjZSAibmV0L25ldGZpbHRlci9LY29uZmlnIgotCiBlbmRtZW51CiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IGQ2ZGEwOTMuLmI2MWI0ZTggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNTU4LDYgKzU1OCwzNSBAQAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCisvKiBFeHRlbmRlZCBJbnF1aXJ5IFJlc3VsdCAqLworc3RhdGljIGlubGluZSB2b2lkIGhjaV9leHRlbmRlZF9pbnF1aXJ5X3Jlc3VsdF9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlucXVpcnlfZGF0YSBkYXRhOworCXN0cnVjdCBleHRlbmRlZF9pbnF1aXJ5X2luZm8gKmluZm8gPSAoc3RydWN0IGV4dGVuZGVkX2lucXVpcnlfaW5mbyAqKSAoc2tiLT5kYXRhICsgMSk7CisJaW50IG51bV9yc3AgPSAqKChfX3U4ICopIHNrYi0+ZGF0YSk7CisKKwlCVF9EQkcoIiVzIG51bV9yc3AgJWQiLCBoZGV2LT5uYW1lLCBudW1fcnNwKTsKKworCWlmICghbnVtX3JzcCkKKwkJcmV0dXJuOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJZm9yICg7IG51bV9yc3A7IG51bV9yc3AtLSkgeworCQliYWNweSgmZGF0YS5iZGFkZHIsICZpbmZvLT5iZGFkZHIpOworCQlkYXRhLnBzY2FuX3JlcF9tb2RlICAgICA9IGluZm8tPnBzY2FuX3JlcF9tb2RlOworCQlkYXRhLnBzY2FuX3BlcmlvZF9tb2RlICA9IGluZm8tPnBzY2FuX3BlcmlvZF9tb2RlOworCQlkYXRhLnBzY2FuX21vZGUgICAgICAgICA9IDB4MDA7CisJCW1lbWNweShkYXRhLmRldl9jbGFzcywgaW5mby0+ZGV2X2NsYXNzLCAzKTsKKwkJZGF0YS5jbG9ja19vZmZzZXQgICAgICAgPSBpbmZvLT5jbG9ja19vZmZzZXQ7CisJCWRhdGEucnNzaSAgICAgICAgICAgICAgID0gaW5mby0+cnNzaTsKKwkJaW5mbysrOworCQloY2lfaW5xdWlyeV9jYWNoZV91cGRhdGUoaGRldiwgJmRhdGEpOworCX0KKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworfQorCiAvKiBDb25uZWN0IFJlcXVlc3QgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfY29ubl9yZXF1ZXN0X2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTk0MCw2ICs5NjksMTAgQEAKIAkJaGNpX2lucXVpcnlfcmVzdWx0X3dpdGhfcnNzaV9ldnQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSV9FVl9FWFRFTkRFRF9JTlFVSVJZX1JFU1VMVDoKKwkJaGNpX2V4dGVuZGVkX2lucXVpcnlfcmVzdWx0X2V2dChoZGV2LCBza2IpOworCQlicmVhazsKKwogCWNhc2UgSENJX0VWX0NPTk5fUkVRVUVTVDoKIAkJaGNpX2Nvbm5fcmVxdWVzdF9ldnQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggOTBlMTllYi4uZjQ5ZTdlOSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtMzYzLDYgKzM2MywxMSBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKIAl3cml0ZV9sb2NrX2JoKCZyZmNvbW1fc2tfbGlzdC5sb2NrKTsKIAogCWlmIChzYS0+cmNfY2hhbm5lbCAmJiBfX3JmY29tbV9nZXRfc29ja19ieV9hZGRyKHNhLT5yY19jaGFubmVsLCAmc2EtPnJjX2JkYWRkcikpIHsKQEAgLTM5MywxNCArMzk4LDE4IEBACiAJaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEggfHwgYWxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfcmMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfT1BFTiAmJiBzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQpCi0JCXJldHVybiAtRUJBREZEOwotCi0JaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWxvY2tfc29jayhzayk7CiAKKwlpZiAoc2stPnNrX3N0YXRlICE9IEJUX09QRU4gJiYgc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EKSB7CisJCWVyciA9IC1FQkFERkQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKwogCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1Q7CiAJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmc2EtPnJjX2JkYWRkcik7CiAJcmZjb21tX3BpKHNrKS0+Y2hhbm5lbCA9IHNhLT5yY19jaGFubmVsOwpAQCAtNDEwLDYgKzQxOSw3IEBACiAJCWVyciA9IGJ0X3NvY2tfd2FpdF9zdGF0ZShzaywgQlRfQ09OTkVDVEVELAogCQkJCXNvY2tfc25kdGltZW8oc2ssIGZsYWdzICYgT19OT05CTE9DSykpOwogCitkb25lOgogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQyOCw2ICs0MzgsMTEgQEAKIAkJZ290byBkb25lOwogCX0KIAorCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCiAJaWYgKCFyZmNvbW1fcGkoc2spLT5jaGFubmVsKSB7CiAJCWJkYWRkcl90ICpzcmMgPSAmYnRfc2soc2spLT5zcmM7CiAJCXU4IGNoYW5uZWw7CkBAIC00NzIsNiArNDg3LDExIEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKwogCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJiBPX05PTkJMT0NLKTsKIAogCUJUX0RCRygic2sgJXAgdGltZW8gJWxkIiwgc2ssIHRpbWVvKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IDJkNTJmZWUuLmQ4ZTM2YjcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtMjE0LDkgKzIxNCwxMSBAQAogCQkJCSAgICAgLnRvcyA9IFJUX1RPUyhpcGgtPnRvcyl9IH0sIC5wcm90byA9IDB9OwogCiAJCQlpZiAoIWlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCAmZmwpKSB7Ci0JCQkJLyogQnJpZGdlZC1hbmQtRE5BVCdlZCB0cmFmZmljIGRvZXNuJ3QKLQkJCQkgKiByZXF1aXJlIGlwX2ZvcndhcmRpbmcuICovCi0JCQkJaWYgKCgoc3RydWN0IGRzdF9lbnRyeSAqKXJ0KS0+ZGV2ID09IGRldikgeworCQkJCS8qIC0gQnJpZGdlZC1hbmQtRE5BVCdlZCB0cmFmZmljIGRvZXNuJ3QKKwkJCQkgKiAgIHJlcXVpcmUgaXBfZm9yd2FyZGluZy4KKwkJCQkgKiAtIERlYWwgd2l0aCByZWRpcmVjdGVkIHRyYWZmaWMuICovCisJCQkJaWYgKCgoc3RydWN0IGRzdF9lbnRyeSAqKXJ0KS0+ZGV2ID09IGRldiB8fAorCQkJCSAgICBydC0+cnRfdHlwZSA9PSBSVE5fTE9DQUwpIHsKIAkJCQkJc2tiLT5kc3QgPSAoc3RydWN0IGRzdF9lbnRyeSAqKXJ0OwogCQkJCQlnb3RvIGJyaWRnZWRfZG5hdDsKIAkJCQl9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9NYWtlZmlsZSBiL25ldC9kY2NwL01ha2VmaWxlCmluZGV4IGZiOTdiYjAuLjM0NGE4ZGEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL01ha2VmaWxlCisrKyBiL25ldC9kY2NwL01ha2VmaWxlCkBAIC0zLDYgKzMsOCBAQAogZGNjcC15IDo9IGNjaWQubyBpbnB1dC5vIGlwdjQubyBtaW5pc29ja3MubyBvcHRpb25zLm8gb3V0cHV0Lm8gcHJvdG8ubyBcCiAJICB0aW1lci5vCiAKK2RjY3AtJChDT05GSUdfSVBfRENDUF9BQ0tWRUMpICs9IGFja3ZlYy5vCisKIG9iai0kKENPTkZJR19JTkVUX0RDQ1BfRElBRykgKz0gZGNjcF9kaWFnLm8KIAogZGNjcF9kaWFnLXkgOj0gZGlhZy5vCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuYyBiL25ldC9kY2NwL2Fja3ZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzAyODMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZGNjcC9hY2t2ZWMuYwpAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqICBuZXQvZGNjcC9hY2t2ZWMuYworICoKKyAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRENDUCBwcm90b2NvbAorICogIENvcHlyaWdodCAoYykgMjAwNSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAZ2hvc3Rwcm90b2NvbHMubmV0PgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlOworICovCisKKyNpbmNsdWRlICJhY2t2ZWMuaCIKKyNpbmNsdWRlICJkY2NwLmgiCisKKyNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCitpbnQgZGNjcF9pbnNlcnRfb3B0aW9uX2Fja3ZlYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwlzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2ID0gZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYzsKKwlpbnQgbGVuID0gYXYtPmRjY3Bhdl92ZWNfbGVuICsgMjsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJdTMyIGVsYXBzZWRfdGltZTsKKwl1bnNpZ25lZCBjaGFyICp0bywgKmZyb207CisKKwlkY2NwX3RpbWVzdGFtcChzaywgJm5vdyk7CisJZWxhcHNlZF90aW1lID0gdGltZXZhbF9kZWx0YSgmbm93LCAmYXYtPmRjY3Bhdl90aW1lKSAvIDEwOworCisJaWYgKGVsYXBzZWRfdGltZSAhPSAwKQorCQlkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHNrLCBza2IsIGVsYXBzZWRfdGltZSk7CisKKwlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArIGxlbiA+IERDQ1BfTUFYX09QVF9MRU4pCisJCXJldHVybiAtMTsKKworCS8qCisJICogWFhYOiBub3cgd2UgaGF2ZSBqdXN0IG9uZSBhY2sgdmVjdG9yIHNlbnQgcmVjb3JkLCBzbworCSAqIHdlIGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gYmUgY2xlYXJlZC4KKwkgKgorCSAqIE9mIGNvdXJzZSB0aGlzIGlzIG5vdCBhY2NlcHRhYmxlLCBidXQgdGhpcyBpcyBqdXN0IGZvcgorCSAqIGJhc2ljIHRlc3Rpbmcgbm93LgorCSAqLworCWlmIChhdi0+ZGNjcGF2X2Fja19zZXFubyAhPSBEQ0NQX01BWF9TRVFOTyArIDEpCisJCXJldHVybiAtMTsKKworCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKz0gbGVuOworCisJdG8gICAgPSBza2JfcHVzaChza2IsIGxlbik7CisJKnRvKysgPSBEQ0NQT19BQ0tfVkVDVE9SXzA7CisJKnRvKysgPSBsZW47CisKKwlsZW4gID0gYXYtPmRjY3Bhdl92ZWNfbGVuOworCWZyb20gPSBhdi0+ZGNjcGF2X2J1ZiArIGF2LT5kY2NwYXZfYnVmX2hlYWQ7CisKKwkvKiBDaGVjayBpZiBidWZfaGVhZCB3cmFwcyAqLworCWlmIChhdi0+ZGNjcGF2X2J1Zl9oZWFkICsgbGVuID4gYXYtPmRjY3Bhdl92ZWNfbGVuKSB7CisJCWNvbnN0IHUzMiB0YWlsc2l6ZSA9IChhdi0+ZGNjcGF2X3ZlY19sZW4gLSBhdi0+ZGNjcGF2X2J1Zl9oZWFkKTsKKworCQltZW1jcHkodG8sIGZyb20sIHRhaWxzaXplKTsKKwkJdG8gICArPSB0YWlsc2l6ZTsKKwkJbGVuICAtPSB0YWlsc2l6ZTsKKwkJZnJvbSA9IGF2LT5kY2NwYXZfYnVmOworCX0KKworCW1lbWNweSh0bywgZnJvbSwgbGVuKTsKKwkvKgorCSAqCUZyb20gZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0OgorCSAqCisJICoJRm9yIGVhY2ggYWNrbm93bGVkZ2VtZW50IGl0IHNlbmRzLCB0aGUgSEMtUmVjZWl2ZXIgd2lsbCBhZGQgYW4KKwkgKglhY2tub3dsZWRnZW1lbnQgcmVjb3JkLiAgYWNrX3NlcW5vIHdpbGwgZXF1YWwgdGhlIEhDLVJlY2VpdmVyCisJICoJc2VxdWVuY2UgbnVtYmVyIGl0IHVzZWQgZm9yIHRoZSBhY2sgcGFja2V0OyBhY2tfcHRyIHdpbGwgZXF1YWwKKwkgKglidWZfaGVhZDsgYWNrX2Fja25vIHdpbGwgZXF1YWwgYnVmX2Fja25vOyBhbmQgYWNrX25vbmNlIHdpbGwKKwkgKgllcXVhbCBidWZfbm9uY2UuCisJICoKKwkgKiBUaGlzIGltcGxlbWVudGlvbiB1c2VzIGp1c3Qgb25lIGFjayByZWNvcmQgZm9yIG5vdy4KKwkgKi8KKwlhdi0+ZGNjcGF2X2Fja19zZXFubyA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcTsKKwlhdi0+ZGNjcGF2X2Fja19wdHIgICA9IGF2LT5kY2NwYXZfYnVmX2hlYWQ7CisJYXYtPmRjY3Bhdl9hY2tfYWNrbm8gPSBhdi0+ZGNjcGF2X2J1Zl9hY2tubzsKKwlhdi0+ZGNjcGF2X2Fja19ub25jZSA9IGF2LT5kY2NwYXZfYnVmX25vbmNlOworCWF2LT5kY2NwYXZfc2VudF9sZW4gID0gYXYtPmRjY3Bhdl92ZWNfbGVuOworCisJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgVmVjdG9yIDAsIGxlbj0lZCwgYWNrX3NlcW5vPSVsbHUsICIKKwkJICAgICAgImFja19hY2tubz0lbGx1XG4iLAorCQkgICAgICBkZWJ1Z19wcmVmaXgsIGF2LT5kY2NwYXZfc2VudF9sZW4sCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXYtPmRjY3Bhdl9hY2tfc2Vxbm8sCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXYtPmRjY3Bhdl9hY2tfYWNrbm8pOworCXJldHVybiAtMTsKK30KKworc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyhjb25zdCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKK3sKKwlzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2ID0ga21hbGxvYyhzaXplb2YoKmF2KSArIGxlbiwgcHJpb3JpdHkpOworCisJaWYgKGF2ICE9IE5VTEwpIHsKKwkJYXYtPmRjY3Bhdl9idWZfbGVuCT0gbGVuOworCQlhdi0+ZGNjcGF2X2J1Zl9oZWFkCT0KKwkJCWF2LT5kY2NwYXZfYnVmX3RhaWwgPSBhdi0+ZGNjcGF2X2J1Zl9sZW4gLSAxOworCQlhdi0+ZGNjcGF2X2J1Zl9hY2tubwk9CisJCQlhdi0+ZGNjcGF2X2Fja19hY2tubyA9IGF2LT5kY2NwYXZfYWNrX3NlcW5vID0gfjBMTFU7CisJCWF2LT5kY2NwYXZfYnVmX25vbmNlID0gYXYtPmRjY3Bhdl9idWZfbm9uY2UgPSAwOworCQlhdi0+ZGNjcGF2X2Fja19wdHIJPSAwOworCQlhdi0+ZGNjcGF2X3RpbWUudHZfc2VjCT0gMDsKKwkJYXYtPmRjY3Bhdl90aW1lLnR2X3VzZWMJPSAwOworCQlhdi0+ZGNjcGF2X3NlbnRfbGVuCT0gYXYtPmRjY3Bhdl92ZWNfbGVuID0gMDsKKwl9CisKKwlyZXR1cm4gYXY7Cit9CisKK3ZvaWQgZGNjcF9hY2t2ZWNfZnJlZShzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQoreworCWtmcmVlKGF2KTsKK30KKworc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19zdGF0ZShjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlyZXR1cm4gYXYtPmRjY3Bhdl9idWZbaW5kZXhdICYgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19sZW4oY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdiwKKwkJCQkgY29uc3QgdW5zaWduZWQgaW50IGluZGV4KQoreworCXJldHVybiBhdi0+ZGNjcGF2X2J1ZltpbmRleF0gJiBEQ0NQX0FDS1ZFQ19MRU5fTUFTSzsKK30KKworLyoKKyAqIElmIHNldmVyYWwgcGFja2V0cyBhcmUgbWlzc2luZywgdGhlIEhDLVJlY2VpdmVyIG1heSBwcmVmZXIgdG8gZW50ZXIgbXVsdGlwbGUKKyAqIGJ5dGVzIHdpdGggcnVuIGxlbmd0aCAwLCByYXRoZXIgdGhhbiBhIHNpbmdsZSBieXRlIHdpdGggYSBsYXJnZXIgcnVuIGxlbmd0aDsKKyAqIHRoaXMgc2ltcGxpZmllcyB0YWJsZSB1cGRhdGVzIGlmIG9uZSBvZiB0aGUgbWlzc2luZyBwYWNrZXRzIGFycml2ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX3NldF9idWZfaGVhZF9zdGF0ZShzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBwYWNrZXRzLAorCQkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyIHN0YXRlKQoreworCXVuc2lnbmVkIGludCBnYXA7CisJc2lnbmVkIGxvbmcgbmV3X2hlYWQ7CisKKwlpZiAoYXYtPmRjY3Bhdl92ZWNfbGVuICsgcGFja2V0cyA+IGF2LT5kY2NwYXZfYnVmX2xlbikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJZ2FwCSA9IHBhY2tldHMgLSAxOworCW5ld19oZWFkID0gYXYtPmRjY3Bhdl9idWZfaGVhZCAtIHBhY2tldHM7CisKKwlpZiAobmV3X2hlYWQgPCAwKSB7CisJCWlmIChnYXAgPiAwKSB7CisJCQltZW1zZXQoYXYtPmRjY3Bhdl9idWYsIERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRCwKKwkJCSAgICAgICBnYXAgKyBuZXdfaGVhZCArIDEpOworCQkJZ2FwID0gLW5ld19oZWFkOworCQl9CisJCW5ld19oZWFkICs9IGF2LT5kY2NwYXZfYnVmX2xlbjsKKwl9IAorCisJYXYtPmRjY3Bhdl9idWZfaGVhZCA9IG5ld19oZWFkOworCisJaWYgKGdhcCA+IDApCisJCW1lbXNldChhdi0+ZGNjcGF2X2J1ZiArIGF2LT5kY2NwYXZfYnVmX2hlYWQgKyAxLAorCQkgICAgICAgRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVELCBnYXApOworCisJYXYtPmRjY3Bhdl9idWZbYXYtPmRjY3Bhdl9idWZfaGVhZF0gPSBzdGF0ZTsKKwlhdi0+ZGNjcGF2X3ZlY19sZW4gKz0gcGFja2V0czsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEltcGxlbWVudHMgdGhlIGRyYWZ0LWlldGYtZGNjcC1zcGVjLTExLnR4dCBBcHBlbmRpeCBBCisgKi8KK2ludCBkY2NwX2Fja3ZlY19hZGQoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgY29uc3QgdTY0IGFja25vLCBjb25zdCB1OCBzdGF0ZSkKK3sKKwkvKgorCSAqIENoZWNrIGF0IHRoZSByaWdodCBwbGFjZXMgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsLCBpZiBpdCBpcywgdGVsbCB0aGUKKwkgKiBjYWxsZXIgdG8gc3RhcnQgZHJvcHBpbmcgcGFja2V0cyB0aWxsIHRoZSBIQy1TZW5kZXIgYWNrcyBvdXIgQUNLCisJICogdmVjdG9ycywgd2hlbiB3ZSB3aWxsIGZyZWUgdXAgc3BhY2UgaW4gZGNjcGF2X2J1Zi4KKwkgKgorCSAqIFdlIG1heSB3ZWxsIGRlY2lkZSB0byBkbyBidWZmZXIgY29tcHJlc3Npb24sIGV0YywgYnV0IGZvciBub3cgbGV0cworCSAqIGp1c3QgZHJvcC4KKwkgKgorCSAqIEZyb20gQXBwZW5kaXggQToKKwkgKgorCSAqCU9mIGNvdXJzZSwgdGhlIGNpcmN1bGFyIGJ1ZmZlciBtYXkgb3ZlcmZsb3csIGVpdGhlciB3aGVuIHRoZQorCSAqCUhDLVNlbmRlciBpcyBzZW5kaW5nIGRhdGEgYXQgYSB2ZXJ5IGhpZ2ggcmF0ZSwgd2hlbiB0aGUKKwkgKglIQy1SZWNlaXZlcidzIGFja25vd2xlZGdlbWVudHMgYXJlIG5vdCByZWFjaGluZyB0aGUgSEMtU2VuZGVyLAorCSAqCW9yIHdoZW4gdGhlIEhDLVNlbmRlciBpcyBmb3JnZXR0aW5nIHRvIGFja25vd2xlZGdlIHRob3NlIGFja3MKKwkgKgkoc28gdGhlIEhDLVJlY2VpdmVyIGlzIHVuYWJsZSB0byBjbGVhbiB1cCBvbGQgc3RhdGUpLiBJbiB0aGlzCisJICoJY2FzZSwgdGhlIEhDLVJlY2VpdmVyIHNob3VsZCBlaXRoZXIgY29tcHJlc3MgdGhlIGJ1ZmZlciAoYnkKKwkgKglpbmNyZWFzaW5nIHJ1biBsZW5ndGhzIHdoZW4gcG9zc2libGUpLCB0cmFuc2ZlciBpdHMgc3RhdGUgdG8KKwkgKglhIGxhcmdlciBidWZmZXIsIG9yLCBhcyBhIGxhc3QgcmVzb3J0LCBkcm9wIGFsbCByZWNlaXZlZAorCSAqCXBhY2tldHMsIHdpdGhvdXQgcHJvY2Vzc2luZyB0aGVtIHdoYXRzb2V2ZXIsIHVudGlsIGl0cyBidWZmZXIKKwkgKglzaHJpbmtzIGFnYWluLgorCSAqLworCisJLyogU2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFja25vIGJlaW5nIGluc2VydGVkICovCisJaWYgKGF2LT5kY2NwYXZfdmVjX2xlbiA9PSAwKSB7CisJCWF2LT5kY2NwYXZfYnVmW2F2LT5kY2NwYXZfYnVmX2hlYWRdID0gc3RhdGU7CisJCWF2LT5kY2NwYXZfdmVjX2xlbiA9IDE7CisJfSBlbHNlIGlmIChhZnRlcjQ4KGFja25vLCBhdi0+ZGNjcGF2X2J1Zl9hY2tubykpIHsKKwkJY29uc3QgdTY0IGRlbHRhID0gZGNjcF9kZWx0YV9zZXFubyhhdi0+ZGNjcGF2X2J1Zl9hY2tubywKKwkJCQkJCSAgIGFja25vKTsKKworCQkvKgorCQkgKiBMb29rIGlmIHRoZSBzdGF0ZSBvZiB0aGlzIHBhY2tldCBpcyB0aGUgc2FtZSBhcyB0aGUKKwkJICogcHJldmlvdXMgYWNrbm8gYW5kIGlmIHNvIGlmIHdlIGNhbiBidW1wIHRoZSBoZWFkIGxlbi4KKwkJICovCisJCWlmIChkZWx0YSA9PSAxICYmCisJCSAgICBkY2NwX2Fja3ZlY19zdGF0ZShhdiwgYXYtPmRjY3Bhdl9idWZfaGVhZCkgPT0gc3RhdGUgJiYKKwkJICAgIChkY2NwX2Fja3ZlY19sZW4oYXYsIGF2LT5kY2NwYXZfYnVmX2hlYWQpIDwKKwkJICAgICBEQ0NQX0FDS1ZFQ19MRU5fTUFTSykpCisJCQlhdi0+ZGNjcGF2X2J1Zlthdi0+ZGNjcGF2X2J1Zl9oZWFkXSsrOworCQllbHNlIGlmIChkY2NwX2Fja3ZlY19zZXRfYnVmX2hlYWRfc3RhdGUoYXYsIGRlbHRhLCBzdGF0ZSkpCisJCQlyZXR1cm4gLUVOT0JVRlM7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQS4xLjIuICBPbGQgUGFja2V0cworCQkgKgorCQkgKglXaGVuIGEgcGFja2V0IHdpdGggU2VxdWVuY2UgTnVtYmVyIFMgYXJyaXZlcywgYW5kCisJCSAqCVMgPD0gYnVmX2Fja25vLCB0aGUgSEMtUmVjZWl2ZXIgd2lsbCBzY2FuIHRoZSB0YWJsZQorCQkgKglmb3IgdGhlIGJ5dGUgY29ycmVzcG9uZGluZyB0byBTLiAoSW5kZXhpbmcgc3RydWN0dXJlcworCQkgKgljb3VsZCByZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBzY2FuLikKKwkJICovCisJCXU2NCBkZWx0YSA9IGRjY3BfZGVsdGFfc2Vxbm8oYWNrbm8sIGF2LT5kY2NwYXZfYnVmX2Fja25vKTsKKwkJdW5zaWduZWQgaW50IGluZGV4ID0gYXYtPmRjY3Bhdl9idWZfaGVhZDsKKworCQl3aGlsZSAoMSkgeworCQkJY29uc3QgdTggbGVuID0gZGNjcF9hY2t2ZWNfbGVuKGF2LCBpbmRleCk7CisJCQljb25zdCB1OCBzdGF0ZSA9IGRjY3BfYWNrdmVjX3N0YXRlKGF2LCBpbmRleCk7CisJCQkvKgorCQkJICogdmFsaWQgcGFja2V0cyBub3QgeWV0IGluIGRjY3Bhdl9idWYgaGF2ZSBhIHJlc2VydmVkCisJCQkgKiBlbnRyeSwgd2l0aCBhIGxlbiBlcXVhbCB0byAwLgorCQkJICovCisJCQlpZiAoc3RhdGUgPT0gRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVEICYmCisJCQkgICAgbGVuID09IDAgJiYgZGVsdGEgPT0gMCkgeyAvKiBGb3VuZCBvdXIKKwkJCQkJCQkgcmVzZXJ2ZWQgc2VhdCEgKi8KKwkJCQlkY2NwX3ByX2RlYnVnKCJGb3VuZCAlbGx1IHJlc2VydmVkIHNlYXQhXG4iLAorCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFja25vKTsKKwkJCQlhdi0+ZGNjcGF2X2J1ZltpbmRleF0gPSBzdGF0ZTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCS8qIGxlbiA9PSAwIG1lYW5zIG9uZSBwYWNrZXQgKi8KKwkJCWlmIChkZWx0YSA8IGxlbiArIDEpCisJCQkJZ290byBvdXRfZHVwbGljYXRlOworCisJCQlkZWx0YSAtPSBsZW4gKyAxOworCQkJaWYgKCsraW5kZXggPT0gYXYtPmRjY3Bhdl9idWZfbGVuKQorCQkJCWluZGV4ID0gMDsKKwkJfQorCX0KKworCWF2LT5kY2NwYXZfYnVmX2Fja25vID0gYWNrbm87CisJZGNjcF90aW1lc3RhbXAoc2ssICZhdi0+ZGNjcGF2X3RpbWUpOworb3V0OgorCWRjY3BfcHJfZGVidWcoIiIpOworCXJldHVybiAwOworCitvdXRfZHVwbGljYXRlOgorCS8qIER1cGxpY2F0ZSBwYWNrZXQgKi8KKwlkY2NwX3ByX2RlYnVnKCJSZWNlaXZlZCBhIGR1cCBvciBhbHJlYWR5IGNvbnNpZGVyZWQgbG9zdCAiCisJCSAgICAgICJwYWNrZXQ6ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYWNrbm8pOworCXJldHVybiAtRUlMU0VROworfQorCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKK3ZvaWQgZGNjcF9hY2t2ZWN0b3JfcHJpbnQoY29uc3QgdTY0IGFja25vLCBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZWN0b3IsIGludCBsZW4pCit7CisJaWYgKCFkY2NwX2RlYnVnKQorCQlyZXR1cm47CisKKwlwcmludGsoIkFDSyB2ZWN0b3IgbGVuPSVkLCBhY2tubz0lbGx1IHwiLCBsZW4sCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWNrbm8pOworCisJd2hpbGUgKGxlbi0tKSB7CisJCWNvbnN0IHU4IHN0YXRlID0gKCp2ZWN0b3IgJiBEQ0NQX0FDS1ZFQ19TVEFURV9NQVNLKSA+PiA2OworCQljb25zdCB1OCBybCA9ICp2ZWN0b3IgJiBEQ0NQX0FDS1ZFQ19MRU5fTUFTSzsKKworCQlwcmludGsoIiVkLCVkfCIsIHN0YXRlLCBybCk7CisJCSsrdmVjdG9yOworCX0KKworCXByaW50aygiXG4iKTsKK30KKwordm9pZCBkY2NwX2Fja3ZlY19wcmludChjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQoreworCWRjY3BfYWNrdmVjdG9yX3ByaW50KGF2LT5kY2NwYXZfYnVmX2Fja25vLAorCQkJICAgICBhdi0+ZGNjcGF2X2J1ZiArIGF2LT5kY2NwYXZfYnVmX2hlYWQsCisJCQkgICAgIGF2LT5kY2NwYXZfdmVjX2xlbik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfdHJvd19hd2F5X2Fja19yZWNvcmQoc3RydWN0IGRjY3BfYWNrdmVjICphdikKK3sKKwkvKgorCSAqIEFzIHdlJ3JlIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGFjayB2ZWN0b3Igc2l6ZSAoZGNjcGF2X3ZlY19sZW4pIGFuZAorCSAqIHRoZSBzZW50IGFjayB2ZWN0b3Igc2l6ZSAoZGNjcGF2X3NlbnRfbGVuKSB3ZSBkb24ndCBuZWVkCisJICogZGNjcGF2X2J1Zl90YWlsIGF0IGFsbCwgYnV0IGtlZXAgdGhpcyBjb2RlIGhlcmUgYXMgaW4gdGhlIGZ1dHVyZQorCSAqIHdlJ2xsIGltcGxlbWVudCBhIHZlY3RvciBvZiBhY2sgcmVjb3JkcywgYXMgc3VnZ2VzdGVkIGluCisJICogZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0IEFwcGVuZGl4IEEuIC1hY21lCisJICovCisjaWYgMAorCWF2LT5kY2NwYXZfYnVmX3RhaWwgPSBhdi0+ZGNjcGF2X2Fja19wdHIgKyAxOworCWlmIChhdi0+ZGNjcGF2X2J1Zl90YWlsID49IGF2LT5kY2NwYXZfdmVjX2xlbikKKwkJYXYtPmRjY3Bhdl9idWZfdGFpbCAtPSBhdi0+ZGNjcGF2X3ZlY19sZW47CisjZW5kaWYKKwlhdi0+ZGNjcGF2X3ZlY19sZW4gLT0gYXYtPmRjY3Bhdl9zZW50X2xlbjsKK30KKwordm9pZCBkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrbm8oc3RydWN0IGRjY3BfYWNrdmVjICphdiwgc3RydWN0IHNvY2sgKnNrLAorCQkJCSBjb25zdCB1NjQgYWNrbm8pCit7CisJLyogQ2hlY2sgaWYgd2UgYWN0dWFsbHkgc2VudCBhbiBBQ0sgdmVjdG9yICovCisJaWYgKGF2LT5kY2NwYXZfYWNrX3NlcW5vID09IERDQ1BfTUFYX1NFUU5PICsgMSkKKwkJcmV0dXJuOworCisJaWYgKGFja25vID09IGF2LT5kY2NwYXZfYWNrX3NlcW5vKSB7CisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKKwkJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwkJY29uc3QgY2hhciAqZGVidWdfcHJlZml4ID0gZHAtPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCA/CisJCQkJCSJDTElFTlQgcnggYWNrOiAiIDogInNlcnZlciByeCBhY2s6ICI7CisjZW5kaWYKKwkJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgcGFja2V0IDAsIGxlbj0lZCwgYWNrX3NlcW5vPSVsbHUsICIKKwkJCSAgICAgICJhY2tfYWNrbm89JWxsdSwgQUNLRUQhXG4iLAorCQkJICAgICAgZGVidWdfcHJlZml4LCAxLAorCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdi0+ZGNjcGF2X2Fja19zZXFubywKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXYtPmRjY3Bhdl9hY2tfYWNrbm8pOworCQlkY2NwX2Fja3ZlY190cm93X2F3YXlfYWNrX3JlY29yZChhdik7CisJCWF2LT5kY2NwYXZfYWNrX3NlcW5vID0gRENDUF9NQVhfU0VRTk8gKyAxOworCX0KK30KKworc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja3ZlY3RvcihzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCQkgICAgc3RydWN0IHNvY2sgKnNrLCB1NjQgYWNrbm8sCisJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGxlbiwKKwkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3RvcikKK3sKKwl1bnNpZ25lZCBjaGFyIGk7CisKKwkvKiBDaGVjayBpZiB3ZSBhY3R1YWxseSBzZW50IGFuIEFDSyB2ZWN0b3IgKi8KKwlpZiAoYXYtPmRjY3Bhdl9hY2tfc2Vxbm8gPT0gRENDUF9NQVhfU0VRTk8gKyAxKQorCQlyZXR1cm47CisJLyoKKwkgKiBXZSdyZSBpbiB0aGUgcmVjZWl2ZXIgaGFsZiBjb25uZWN0aW9uLCBzbyBpZiB0aGUgcmVjZWl2ZWQgYW4gQUNLCisJICogdmVjdG9yIGFja25vIChlLmcuIDUwKSBiZWZvcmUgZGNjcGF2X2Fja19zZXFubyAoZS5nLiA1MiksIHdlJ3JlCisJICogbm90IGludGVyZXN0ZWQuCisJICoKKwkgKiBFeHRyYSBleHBsYW5hdGlvbiB3aXRoIGV4YW1wbGU6CisJICogCisJICogaWYgd2UgcmVjZWl2ZWQgYW4gQUNLIHZlY3RvciB3aXRoIGFja25vIDUwLCBpdCBjYW4gb25seSBiZSBhY2tpbmcKKwkgKiA1MCwgNDksIDQ4LCBldGMsIG5vdCA1MiAodGhlIHNlcW5vIGZvciB0aGUgQUNLIHZlY3RvciB3ZSBzZW50KS4KKwkgKi8KKwkvKiBkY2NwX3ByX2RlYnVnKCJpcyAlbGx1IDwgJWxsdT8gIiwgYWNrbm8sIGF2LT5kY2NwYXZfYWNrX3NlcW5vKTsgKi8KKwlpZiAoYmVmb3JlNDgoYWNrbm8sIGF2LT5kY2NwYXZfYWNrX3NlcW5vKSkgeworCQkvKiBkY2NwX3ByX2RlYnVnX2NhdCgieWVzXG4iKTsgKi8KKwkJcmV0dXJuOworCX0KKwkvKiBkY2NwX3ByX2RlYnVnX2NhdCgibm9cbiIpOyAqLworCisJaSA9IGxlbjsKKwl3aGlsZSAoaS0tKSB7CisJCWNvbnN0IHU4IHJsID0gKnZlY3RvciAmIERDQ1BfQUNLVkVDX0xFTl9NQVNLOworCQl1NjQgYWNrbm9fZW5kX3JsOworCisJCWRjY3Bfc2V0X3NlcW5vKCZhY2tub19lbmRfcmwsIGFja25vIC0gcmwpOworCisJCS8qCisJCSAqIGRjY3BfcHJfZGVidWcoImlzICVsbHUgPD0gJWxsdSA8PSAlbGx1PyAiLCBhY2tub19lbmRfcmwsCisJCSAqIGF2LT5kY2NwYXZfYWNrX3NlcW5vLCBhY2tubyk7CisJCSAqLworCQlpZiAoYmV0d2VlbjQ4KGF2LT5kY2NwYXZfYWNrX3NlcW5vLCBhY2tub19lbmRfcmwsIGFja25vKSkgeworCQkJY29uc3QgdTggc3RhdGUgPSAoKnZlY3RvciAmCisJCQkJCSAgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSykgPj4gNjsKKwkJCS8qIGRjY3BfcHJfZGVidWdfY2F0KCJ5ZXNcbiIpOyAqLworCisJCQlpZiAoc3RhdGUgIT0gRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVEKSB7CisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKKwkJCQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCQkJCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9CisJCQkJCWRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPworCQkJCQkiQ0xJRU5UIHJ4IGFjazogIiA6ICJzZXJ2ZXIgcnggYWNrOiAiOworI2VuZGlmCisJCQkJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgdmVjdG9yIDAsIGxlbj0lZCwgIgorCQkJCQkgICAgICAiYWNrX3NlcW5vPSVsbHUsIGFja19hY2tubz0lbGx1LCAiCisJCQkJCSAgICAgICJBQ0tFRCFcbiIsCisJCQkJCSAgICAgIGRlYnVnX3ByZWZpeCwgbGVuLAorCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgICAgICBhdi0+ZGNjcGF2X2Fja19zZXFubywKKwkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJICAgICAgYXYtPmRjY3Bhdl9hY2tfYWNrbm8pOworCQkJCWRjY3BfYWNrdmVjX3Ryb3dfYXdheV9hY2tfcmVjb3JkKGF2KTsKKwkJCX0KKwkJCS8qCisJCQkgKiBJZiBkY2NwYXZfYWNrX3NlcW5vIHdhcyBub3QgcmVjZWl2ZWQsIG5vIHByb2JsZW0KKwkJCSAqIHdlJ2xsIHNlbmQgYW5vdGhlciBBQ0sgdmVjdG9yLgorCQkJICovCisJCQlhdi0+ZGNjcGF2X2Fja19zZXFubyA9IERDQ1BfTUFYX1NFUU5PICsgMTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGRjY3BfcHJfZGVidWdfY2F0KCJub1xuIik7ICovCisKKwkJZGNjcF9zZXRfc2Vxbm8oJmFja25vLCBhY2tub19lbmRfcmwgLSAxKTsKKwkJKyt2ZWN0b3I7CisJfQorfQorCitpbnQgZGNjcF9hY2t2ZWNfcGFyc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBjb25zdCB1OCBvcHQsIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKQoreworCWlmIChsZW4gPiBEQ0NQX01BWF9BQ0tWRUNfTEVOKQorCQlyZXR1cm4gLTE7CisKKwkvKiBkY2NwX2Fja3ZlY3Rvcl9wcmludChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLCB2YWx1ZSwgbGVuKTsgKi8KKwlkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrdmVjdG9yKGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAorCQkJCQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAorCQkJCSAgICAgICAgbGVuLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTUxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZGNjcC9hY2t2ZWMuaApAQCAtMCwwICsxLDEzMyBAQAorI2lmbmRlZiBfQUNLVkVDX0gKKyNkZWZpbmUgX0FDS1ZFQ19ICisvKgorICogIG5ldC9kY2NwL2Fja3ZlYy5oCisgKgorICogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEQ0NQIHByb3RvY29sCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBtYW5kcml2YS5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogUmVhZCBhYm91dCB0aGUgRUNOIG5vbmNlIHRvIHNlZSB3aHkgaXQgaXMgMjUzICovCisjZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19MRU4gMjUzCisKKyNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQJMAorI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9FQ05fTUFSS0VECSgxIDw8IDYpCisjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRAkoMyA8PCA2KQorCisjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX01BU0sJCTB4QzAgLyogMTEwMDAwMDAgKi8KKyNkZWZpbmUgRENDUF9BQ0tWRUNfTEVOX01BU0sJCTB4M0YgLyogMDAxMTExMTEgKi8KKworLyoqIHN0cnVjdCBkY2NwX2Fja3ZlYyAtIGFjayB2ZWN0b3IKKyAqCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHRoZSBvbmUgZGVmaW5lZCBpbiB0aGUgRENDUCBkcmFmdAorICogQXBwZW5kaXggQS4KKyAqCisgKiBAZGNjcGF2X2J1Zl9oZWFkIC0gY2lyY3VsYXIgYnVmZmVyIGhlYWQKKyAqIEBkY2NwYXZfYnVmX3RhaWwgLSBjaXJjdWxhciBidWZmZXIgdGFpbAorICogQGRjY3Bhdl9idWZfYWNrbm8gLSBhY2sgIyBvZiB0aGUgbW9zdCByZWNlbnQgcGFja2V0IGFja25vd2xlZGdlYWJsZSBpbiB0aGUKKyAqIAkJICAgICAgIGJ1ZmZlciAoaS5lLiAlZGNjcGF2X2J1Zl9oZWFkKQorICogQGRjY3Bhdl9idWZfbm9uY2UgLSB0aGUgb25lLWJpdCBzdW0gb2YgdGhlIEVDTiBOb25jZXMgb24gYWxsIHBhY2tldHMgYWNrZWQKKyAqIAkJICAgICAgIGJ5IHRoZSBidWZmZXIgd2l0aCBTdGF0ZSAwCisgKgorICogQWRkaXRpb25hbGx5LCB0aGUgSEMtUmVjZWl2ZXIgbXVzdCBrZWVwIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiBBY2sgVmVjdG9ycyBpdCBoYXMgcmVjZW50bHkgc2VudC4gRm9yIGVhY2ggcGFja2V0IHNlbnQgY2FycnlpbmcgYW4KKyAqIEFjayBWZWN0b3IsIGl0IHJlbWVtYmVycyBmb3VyIHZhcmlhYmxlczoKKyAqCisgKiBAZGNjcGF2X2Fja19zZXFubyAtIHRoZSBTZXF1ZW5jZSBOdW1iZXIgdXNlZCBmb3IgdGhlIHBhY2tldAorICogCQkgICAgICAgKEhDLVJlY2VpdmVyIHNlcW5vKQorICogQGRjY3Bhdl9hY2tfcHRyIC0gdGhlIHZhbHVlIG9mIGJ1Zl9oZWFkIGF0IHRoZSB0aW1lIG9mIGFja25vd2xlZGdlbWVudC4KKyAqIEBkY2NwYXZfYWNrX2Fja25vIC0gdGhlIEFja25vd2xlZGdlbWVudCBOdW1iZXIgdXNlZCBmb3IgdGhlIHBhY2tldAorICogCQkgICAgICAgKEhDLVNlbmRlciBzZXFubykKKyAqIEBkY2NwYXZfYWNrX25vbmNlIC0gdGhlIG9uZS1iaXQgc3VtIG9mIHRoZSBFQ04gTm9uY2VzIGZvciBhbGwgU3RhdGUgMC4KKyAqCisgKiBAZGNjcGF2X2J1Zl9sZW4JLSBjaXJjdWxhciBidWZmZXIgbGVuZ3RoCisgKiBAZGNjcGF2X3RpbWUJCS0gdGhlIHRpbWUgaW4gdXNlY3MKKyAqIEBkY2NwYXZfYnVmIC0gY2lyY3VsYXIgYnVmZmVyIG9mIGFja25vd2xlZGdlYWJsZSBwYWNrZXRzCisgKi8KK3N0cnVjdCBkY2NwX2Fja3ZlYyB7CisJdW5zaWduZWQgaW50CWRjY3Bhdl9idWZfaGVhZDsKKwl1bnNpZ25lZCBpbnQJZGNjcGF2X2J1Zl90YWlsOworCXU2NAkJZGNjcGF2X2J1Zl9hY2tubzsKKwl1NjQJCWRjY3Bhdl9hY2tfc2Vxbm87CisJdTY0CQlkY2NwYXZfYWNrX2Fja25vOworCXVuc2lnbmVkIGludAlkY2NwYXZfYWNrX3B0cjsKKwl1bnNpZ25lZCBpbnQJZGNjcGF2X3NlbnRfbGVuOworCXVuc2lnbmVkIGludAlkY2NwYXZfdmVjX2xlbjsKKwl1bnNpZ25lZCBpbnQJZGNjcGF2X2J1Zl9sZW47CisJc3RydWN0IHRpbWV2YWwJZGNjcGF2X3RpbWU7CisJdTgJCWRjY3Bhdl9idWZfbm9uY2U7CisJdTgJCWRjY3Bhdl9hY2tfbm9uY2U7CisJdTgJCWRjY3Bhdl9idWZbMF07Cit9OworCitzdHJ1Y3Qgc29jazsKK3N0cnVjdCBza19idWZmOworCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfQUNLVkVDCitleHRlcm4gc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyh1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CitleHRlcm4gdm9pZCBkY2NwX2Fja3ZlY19mcmVlKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYpOworCitleHRlcm4gaW50IGRjY3BfYWNrdmVjX2FkZChzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICBjb25zdCB1NjQgYWNrbm8sIGNvbnN0IHU4IHN0YXRlKTsKKworZXh0ZXJuIHZvaWQgZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja25vKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCisJCQkJCXN0cnVjdCBzb2NrICpzaywgY29uc3QgdTY0IGFja25vKTsKK2V4dGVybiBpbnQgZGNjcF9hY2t2ZWNfcGFyc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBjb25zdCB1OCBvcHQsIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKTsKKworZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb25fYWNrdmVjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX3BlbmRpbmcoY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdikKK3sKKwlyZXR1cm4gYXYtPmRjY3Bhdl9zZW50X2xlbiAhPSBhdi0+ZGNjcGF2X3ZlY19sZW47Cit9CisjZWxzZSAvKiBDT05GSUdfSVBfRENDUF9BQ0tWRUMgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyh1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2Fja3ZlY19mcmVlKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX2FkZChzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICBjb25zdCB1NjQgYWNrbm8sIGNvbnN0IHU4IHN0YXRlKQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRjY3BfYWNrdmVjX2NoZWNrX3Jjdl9hY2tubyhzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCQkgICAgICAgc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1NjQgYWNrbm8pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX3BhcnNlKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgY29uc3QgdTggb3B0LCBjb25zdCB1OCAqdmFsdWUsIGNvbnN0IHU4IGxlbikKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfaW5zZXJ0X29wdGlvbl9hY2t2ZWMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX3BlbmRpbmcoY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfSVBfRENDUF9BQ0tWRUMgKi8KKyNlbmRpZiAvKiBfQUNLVkVDX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWQuaCBiL25ldC9kY2NwL2NjaWQuaAppbmRleCA5NjJmMWU5Li4yMWU1NTE0IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkLmgKKysrIGIvbmV0L2RjY3AvY2NpZC5oCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTQsNiArNTUsMTQgQEAKIAkJCQkJICAgICAgIHN0cnVjdCB0Y3BfaW5mbyAqaW5mbyk7CiAJdm9pZAkJKCpjY2lkX2hjX3R4X2dldF9pbmZvKShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgICBzdHJ1Y3QgdGNwX2luZm8gKmluZm8pOworCWludAkJKCpjY2lkX2hjX3J4X2dldHNvY2tvcHQpKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSBjb25zdCBpbnQgb3B0bmFtZSwgaW50IGxlbiwKKwkJCQkJCSB1MzIgX191c2VyICpvcHR2YWwsCisJCQkJCQkgaW50IF9fdXNlciAqb3B0bGVuKTsKKwlpbnQJCSgqY2NpZF9oY190eF9nZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgY29uc3QgaW50IG9wdG5hbWUsIGludCBsZW4sCisJCQkJCQkgdTMyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkJIGludCBfX3VzZXIgKm9wdGxlbik7CiB9OwogCiBleHRlcm4gaW50CSAgIGNjaWRfcmVnaXN0ZXIoc3RydWN0IGNjaWQgKmNjaWQpOwpAQCAtMTc3LDQgKzE4NiwyNiBAQAogCWlmIChjY2lkLT5jY2lkX2hjX3R4X2dldF9pbmZvICE9IE5VTEwpCiAJCWNjaWQtPmNjaWRfaGNfdHhfZ2V0X2luZm8oc2ssIGluZm8pOwogfQorCitzdGF0aWMgaW5saW5lIGludCBjY2lkX2hjX3J4X2dldHNvY2tvcHQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkJY29uc3QgaW50IG9wdG5hbWUsIGludCBsZW4sCisJCQkJCXUzMiBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWludCByYyA9IC1FTk9QUk9UT09QVDsKKwlpZiAoY2NpZC0+Y2NpZF9oY19yeF9nZXRzb2Nrb3B0ICE9IE5VTEwpCisJCXJjID0gY2NpZC0+Y2NpZF9oY19yeF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBsZW4sCisJCQkJCQkgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2NpZF9oY190eF9nZXRzb2Nrb3B0KHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCWNvbnN0IGludCBvcHRuYW1lLCBpbnQgbGVuLAorCQkJCQl1MzIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpbnQgcmMgPSAtRU5PUFJPVE9PUFQ7CisJaWYgKGNjaWQtPmNjaWRfaGNfdHhfZ2V0c29ja29wdCAhPSBOVUxMKQorCQlyYyA9IGNjaWQtPmNjaWRfaGNfdHhfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgbGVuLAorCQkJCQkJIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gcmM7Cit9CiAjZW5kaWYgLyogX0NDSURfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKaW5kZXggMzhhYTg0OS4uYWE2OGUwYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCkBAIC0xMTIwLDYgKzExMjAsNjAgQEAKIAlpbmZvLT50Y3BpX3J0dCA9IGhjdHgtPmNjaWQzaGN0eF9ydHQ7CiB9CiAKK3N0YXRpYyBpbnQgY2NpZDNfaGNfcnhfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBvcHRuYW1lLCBpbnQgbGVuLAorCQkJCSAgdTMyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJY29uc3Qgc3RydWN0IGNjaWQzX2hjX3J4X3NvY2sgKmhjcnggPSBjY2lkM19oY19yeF9zayhzayk7CisJY29uc3Qgdm9pZCAqdmFsOworCQorCS8qIExpc3RlbiBzb2NrcyBkb2Vzbid0IGhhdmUgYSBwcml2YXRlIENDSUQgYmxvY2sgKi8KKwlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfTElTVEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgRENDUF9TT0NLT1BUX0NDSURfUlhfSU5GTzoKKwkJaWYgKGxlbiA8IHNpemVvZihoY3J4LT5jY2lkM2hjcnhfdGZyYykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuID0gc2l6ZW9mKGhjcngtPmNjaWQzaGNyeF90ZnJjKTsKKwkJdmFsID0gJmhjcngtPmNjaWQzaGNyeF90ZnJjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCX0KKworCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikgfHwgY29weV90b191c2VyKG9wdHZhbCwgdmFsLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjaWQzX2hjX3R4X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgb3B0bmFtZSwgaW50IGxlbiwKKwkJCQkgIHUzMiBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWNvbnN0IHN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZDNfaGNfdHhfc2soc2spOworCWNvbnN0IHZvaWQgKnZhbDsKKwkKKwkvKiBMaXN0ZW4gc29ja3MgZG9lc24ndCBoYXZlIGEgcHJpdmF0ZSBDQ0lEIGJsb2NrICovCisJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0xJU1RFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIERDQ1BfU09DS09QVF9DQ0lEX1RYX0lORk86CisJCWlmIChsZW4gPCBzaXplb2YoaGN0eC0+Y2NpZDNoY3R4X3RmcmMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxlbiA9IHNpemVvZihoY3R4LT5jY2lkM2hjdHhfdGZyYyk7CisJCXZhbCA9ICZoY3R4LT5jY2lkM2hjdHhfdGZyYzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwl9CisKKwlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8IGNvcHlfdG9fdXNlcihvcHR2YWwsIHZhbCwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBjY2lkIGNjaWQzID0gewogCS5jY2lkX2lkCQkgICA9IDMsCiAJLmNjaWRfbmFtZQkJICAgPSAiY2NpZDMiLApAQCAtMTEzOSw2ICsxMTkzLDggQEAKIAkuY2NpZF9oY19yeF9wYWNrZXRfcmVjdgkgICA9IGNjaWQzX2hjX3J4X3BhY2tldF9yZWN2LAogCS5jY2lkX2hjX3J4X2dldF9pbmZvCSAgID0gY2NpZDNfaGNfcnhfZ2V0X2luZm8sCiAJLmNjaWRfaGNfdHhfZ2V0X2luZm8JICAgPSBjY2lkM19oY190eF9nZXRfaW5mbywKKwkuY2NpZF9oY19yeF9nZXRzb2Nrb3B0CSAgID0gY2NpZDNfaGNfcnhfZ2V0c29ja29wdCwKKwkuY2NpZF9oY190eF9nZXRzb2Nrb3B0CSAgID0gY2NpZDNfaGNfdHhfZ2V0c29ja29wdCwKIH07CiAgCiBtb2R1bGVfcGFyYW0oY2NpZDNfZGVidWcsIGludCwgMDQ0NCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAppbmRleCBlYjI0ODc3Li4wYmRlNDU4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGZyYy5oPgogCiAjZGVmaW5lIFRGUkNfTUlOX1BBQ0tFVF9TSVpFCSAgIDE2CiAjZGVmaW5lIFRGUkNfU1REX1BBQ0tFVF9TSVpFCSAgMjU2CkBAIC05MywxMiArOTQsMTUgQEAKICAgKiBAY2NpZDNoY3R4X2hpc3QgLSBQYWNrZXQgaGlzdG9yeQogICAqLwogc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgewotCXUzMgkJCQljY2lkM2hjdHhfeDsKLQl1MzIJCQkJY2NpZDNoY3R4X3hfcmVjdjsKLQl1MzIJCQkJY2NpZDNoY3R4X3hfY2FsYzsKKwlzdHJ1Y3QgdGZyY190eF9pbmZvCQljY2lkM2hjdHhfdGZyYzsKKyNkZWZpbmUgY2NpZDNoY3R4X3gJCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfeAorI2RlZmluZSBjY2lkM2hjdHhfeF9yZWN2CQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfeF9yZWN2CisjZGVmaW5lIGNjaWQzaGN0eF94X2NhbGMJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF94X2NhbGMKKyNkZWZpbmUgY2NpZDNoY3R4X3J0dAkJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF9ydHQKKyNkZWZpbmUgY2NpZDNoY3R4X3AJCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfcAorI2RlZmluZSBjY2lkM2hjdHhfdF9ydG8JCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfcnRvCisjZGVmaW5lIGNjaWQzaGN0eF90X2lwaQkJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF9pcGkKIAl1MTYJCQkJY2NpZDNoY3R4X3M7Ci0JdTMyCQkJCWNjaWQzaGN0eF9ydHQ7Ci0JdTMyCQkJCWNjaWQzaGN0eF9wOwogICAJdTgJCQkJY2NpZDNoY3R4X3N0YXRlOwogCXU4CQkJCWNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudDsKIAl1OAkJCQljY2lkM2hjdHhfaWRsZTsKQEAgLTEwNiwxOSArMTEwLDE5IEBACiAJc3RydWN0IHRpbWVyX2xpc3QJCWNjaWQzaGN0eF9ub19mZWVkYmFja190aW1lcjsKIAlzdHJ1Y3QgdGltZXZhbAkJCWNjaWQzaGN0eF90X2xkOwogCXN0cnVjdCB0aW1ldmFsCQkJY2NpZDNoY3R4X3Rfbm9tOwotCXUzMgkJCQljY2lkM2hjdHhfdF9ydG87Ci0JdTMyCQkJCWNjaWQzaGN0eF90X2lwaTsKIAl1MzIJCQkJY2NpZDNoY3R4X2RlbHRhOwogCXN0cnVjdCBsaXN0X2hlYWQJCWNjaWQzaGN0eF9oaXN0OwogCXN0cnVjdCBjY2lkM19vcHRpb25zX3JlY2VpdmVkCWNjaWQzaGN0eF9vcHRpb25zX3JlY2VpdmVkOwogfTsKIAogc3RydWN0IGNjaWQzX2hjX3J4X3NvY2sgeworCXN0cnVjdCB0ZnJjX3J4X2luZm8JY2NpZDNoY3J4X3RmcmM7CisjZGVmaW5lIGNjaWQzaGNyeF94X3JlY3YJY2NpZDNoY3J4X3RmcmMudGZyY3J4X3hfcmVjdgorI2RlZmluZSBjY2lkM2hjcnhfcnR0CQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcnR0CisjZGVmaW5lIGNjaWQzaGNyeF9wCQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcAogICAJdTY0CQkJY2NpZDNoY3J4X3NlcW5vX2xhc3RfY291bnRlcjo0OCwKIAkJCQljY2lkM2hjcnhfc3RhdGU6OCwKIAkJCQljY2lkM2hjcnhfbGFzdF9jb3VudGVyOjQ7Ci0JdTMyCQkJY2NpZDNoY3J4X3J0dDsKLSAgCXUzMgkJCWNjaWQzaGNyeF9wOwogICAJdTMyCQkJY2NpZDNoY3J4X2J5dGVzX3JlY3Y7CiAgIAlzdHJ1Y3QgdGltZXZhbAkJY2NpZDNoY3J4X3RzdGFtcF9sYXN0X2ZlZWRiYWNrOwogICAJc3RydWN0IHRpbWV2YWwJCWNjaWQzaGNyeF90c3RhbXBfbGFzdF9hY2s7CkBAIC0xMjcsNyArMTMxLDYgQEAKICAgCXUxNgkJCWNjaWQzaGNyeF9zOwogICAJdTMyCQkJY2NpZDNoY3J4X3BpbnY7CiAgIAl1MzIJCQljY2lkM2hjcnhfZWxhcHNlZF90aW1lOwotICAJdTMyCQkJY2NpZDNoY3J4X3hfcmVjdjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgKmNjaWQzX2hjX3R4X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RjY3AuaCBiL25ldC9kY2NwL2RjY3AuaAppbmRleCA5NWM0NjMwYi4uNTg3MWMwMiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPG5ldC9zbm1wLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CisjaW5jbHVkZSAiYWNrdmVjLmgiCiAKICNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwogZXh0ZXJuIGludCBkY2NwX2RlYnVnOwpAQCAtMjU4LDEzICsyNTksMTIgQEAKIGV4dGVybiB2b2lkCSAgIGRjY3Bfc2VuZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBhY3RpdmUpOwogCiBzdHJ1Y3QgZGNjcF9za2JfY2IgewotCV9fdTggZGNjcGRfdHlwZTsKLQlfX3U4IGRjY3BkX3Jlc2V0X2NvZGU7Ci0JX191OCBkY2NwZF9zZXJ2aWNlOwotCV9fdTggZGNjcGRfY2N2YWw7CisJX191OCAgZGNjcGRfdHlwZTo0OworCV9fdTggIGRjY3BkX2NjdmFsOjQ7CisJX191OCAgZGNjcGRfcmVzZXRfY29kZTsKKwlfX3UxNiBkY2NwZF9vcHRfbGVuOwogCV9fdTY0IGRjY3BkX3NlcTsKIAlfX3U2NCBkY2NwZF9hY2tfc2VxOwotCWludCAgZGNjcGRfb3B0X2xlbjsKIH07CiAKICNkZWZpbmUgRENDUF9TS0JfQ0IoX19za2IpICgoc3RydWN0IGRjY3Bfc2tiX2NiICopJigoX19za2IpLT5jYlswXSkpCkBAIC0zNTksNiArMzU5LDE3IEBACiAJCSAgICAgICAoZHAtPmRjY3BzX2dzcyAtCiAJCQlkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZXF1ZW5jZV93aW5kb3cgKyAxKSk7CiB9CisJCQkJCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2Fja19wZW5kaW5nKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwljb25zdCBzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXJldHVybiBkcC0+ZGNjcHNfdGltZXN0YW1wX2VjaG8gIT0gMCB8fAorI2lmZGVmIENPTkZJR19JUF9EQ0NQX0FDS1ZFQworCSAgICAgICAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yICYmCisJCWRjY3BfYWNrdmVjX3BlbmRpbmcoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYykpIHx8CisjZW5kaWYKKwkgICAgICAgaW5ldF9jc2tfYWNrX3NjaGVkdWxlZChzayk7Cit9CiAKIGV4dGVybiB2b2lkIGRjY3BfaW5zZXJ0X29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkIGRjY3BfaW5zZXJ0X29wdGlvbl9lbGFwc2VkX3RpbWUoc3RydWN0IHNvY2sgKnNrLApAQCAtMzcyLDY1ICszODMsNiBAQAogCiBleHRlcm4gc3RydWN0IHNvY2tldCAqZGNjcF9jdGxfc29ja2V0OwogCi0jZGVmaW5lIERDQ1BfQUNLUEtUU19TVEFURV9SRUNFSVZFRAkwCi0jZGVmaW5lIERDQ1BfQUNLUEtUU19TVEFURV9FQ05fTUFSS0VECSgxIDw8IDYpCi0jZGVmaW5lIERDQ1BfQUNLUEtUU19TVEFURV9OT1RfUkVDRUlWRUQJKDMgPDwgNikKLQotI2RlZmluZSBEQ0NQX0FDS1BLVFNfU1RBVEVfTUFTSwkJMHhDMCAvKiAxMTAwMDAwMCAqLwotI2RlZmluZSBEQ0NQX0FDS1BLVFNfTEVOX01BU0sJCTB4M0YgLyogMDAxMTExMTEgKi8KLQotLyoqIHN0cnVjdCBkY2NwX2Fja3BrdHMgLSBhY2tub3dsZWRnZWFibGUgcGFja2V0cwotICoKLSAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgdGhlIG9uZSBkZWZpbmVkIGluIHRoZSBEQ0NQIGRyYWZ0Ci0gKiBBcHBlbmRpeCBBLgotICoKLSAqIEBkY2NwYXBfYnVmX2hlYWQgLSBjaXJjdWxhciBidWZmZXIgaGVhZAotICogQGRjY3BhcF9idWZfdGFpbCAtIGNpcmN1bGFyIGJ1ZmZlciB0YWlsCi0gKiBAZGNjcGFwX2J1Zl9hY2tubyAtIGFjayAjIG9mIHRoZSBtb3N0IHJlY2VudCBwYWNrZXQgYWNrbm93bGVkZ2VhYmxlIGluIHRoZQotICogCQkgICAgICAgYnVmZmVyIChpLmUuICVkY2NwYXBfYnVmX2hlYWQpCi0gKiBAZGNjcGFwX2J1Zl9ub25jZSAtIHRoZSBvbmUtYml0IHN1bSBvZiB0aGUgRUNOIE5vbmNlcyBvbiBhbGwgcGFja2V0cyBhY2tlZAotICogCQkgICAgICAgYnkgdGhlIGJ1ZmZlciB3aXRoIFN0YXRlIDAKLSAqCi0gKiBBZGRpdGlvbmFsbHksIHRoZSBIQy1SZWNlaXZlciBtdXN0IGtlZXAgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIEFjayBWZWN0b3JzIGl0IGhhcyByZWNlbnRseSBzZW50LiBGb3IgZWFjaCBwYWNrZXQgc2VudCBjYXJyeWluZyBhbgotICogQWNrIFZlY3RvciwgaXQgcmVtZW1iZXJzIGZvdXIgdmFyaWFibGVzOgotICoKLSAqIEBkY2NwYXBfYWNrX3NlcW5vIC0gdGhlIFNlcXVlbmNlIE51bWJlciB1c2VkIGZvciB0aGUgcGFja2V0Ci0gKiAJCSAgICAgICAoSEMtUmVjZWl2ZXIgc2Vxbm8pCi0gKiBAZGNjcGFwX2Fja19wdHIgLSB0aGUgdmFsdWUgb2YgYnVmX2hlYWQgYXQgdGhlIHRpbWUgb2YgYWNrbm93bGVkZ2VtZW50LgotICogQGRjY3BhcF9hY2tfYWNrbm8gLSB0aGUgQWNrbm93bGVkZ2VtZW50IE51bWJlciB1c2VkIGZvciB0aGUgcGFja2V0Ci0gKiAJCSAgICAgICAoSEMtU2VuZGVyIHNlcW5vKQotICogQGRjY3BhcF9hY2tfbm9uY2UgLSB0aGUgb25lLWJpdCBzdW0gb2YgdGhlIEVDTiBOb25jZXMgZm9yIGFsbCBTdGF0ZSAwLgotICoKLSAqIEBkY2NwYXBfYnVmX2xlbiAtIGNpcmN1bGFyIGJ1ZmZlciBsZW5ndGgKLSAqIEBkY2NwYXBfdGltZQkJLSB0aGUgdGltZSBpbiB1c2VjcwotICogQGRjY3BhcF9idWYgLSBjaXJjdWxhciBidWZmZXIgb2YgYWNrbm93bGVkZ2VhYmxlIHBhY2tldHMKLSAqLwotc3RydWN0IGRjY3BfYWNrcGt0cyB7Ci0JdW5zaWduZWQgaW50CQlkY2NwYXBfYnVmX2hlYWQ7Ci0JdW5zaWduZWQgaW50CQlkY2NwYXBfYnVmX3RhaWw7Ci0JdTY0CQkJZGNjcGFwX2J1Zl9hY2tubzsKLQl1NjQJCQlkY2NwYXBfYWNrX3NlcW5vOwotCXU2NAkJCWRjY3BhcF9hY2tfYWNrbm87Ci0JdW5zaWduZWQgaW50CQlkY2NwYXBfYWNrX3B0cjsKLQl1bnNpZ25lZCBpbnQJCWRjY3BhcF9idWZfdmVjdG9yX2xlbjsKLQl1bnNpZ25lZCBpbnQJCWRjY3BhcF9hY2tfdmVjdG9yX2xlbjsKLQl1bnNpZ25lZCBpbnQJCWRjY3BhcF9idWZfbGVuOwotCXN0cnVjdCB0aW1ldmFsCQlkY2NwYXBfdGltZTsKLQl1OAkJCWRjY3BhcF9idWZfbm9uY2U7Ci0JdTgJCQlkY2NwYXBfYWNrX25vbmNlOwotCXU4CQkJZGNjcGFwX2J1ZlswXTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgZGNjcF9hY2twa3RzICoKLQkJZGNjcF9hY2twa3RzX2FsbG9jKHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpOwotZXh0ZXJuIHZvaWQgZGNjcF9hY2twa3RzX2ZyZWUoc3RydWN0IGRjY3BfYWNrcGt0cyAqYXApOwotZXh0ZXJuIGludCBkY2NwX2Fja3BrdHNfYWRkKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgICAgdTY0IGFja25vLCB1OCBzdGF0ZSk7Ci1leHRlcm4gdm9pZCBkY2NwX2Fja3BrdHNfY2hlY2tfcmN2X2Fja25vKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLAotCQkJCQkgc3RydWN0IHNvY2sgKnNrLCB1NjQgYWNrbm8pOwotCiBleHRlcm4gdm9pZCBkY2NwX3RpbWVzdGFtcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0aW1ldmFsICp0dik7CiAKIHN0YXRpYyBpbmxpbmUgc3VzZWNvbmRzX3QgdGltZXZhbF91c2Vjcyhjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpCkBAIC00NzEsMTUgKzQyMyw0IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLWV4dGVybiB2b2lkIGRjY3BfYWNrdmVjdG9yX3ByaW50KGNvbnN0IHU2NCBhY2tubywKLQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqdmVjdG9yLCBpbnQgbGVuKTsKLWV4dGVybiB2b2lkIGRjY3BfYWNrcGt0c19wcmludChjb25zdCBzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGRjY3BfYWNrdmVjdG9yX3ByaW50KGNvbnN0IHU2NCBhY2tubywKLQkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdmVjdG9yLAotCQkJCQlpbnQgbGVuKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2Fja3BrdHNfcHJpbnQoY29uc3Qgc3RydWN0IGRjY3BfYWNrcGt0cyAqYXApIHsgfQotI2VuZGlmCi0KICNlbmRpZiAvKiBfRENDUF9IICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pbnB1dC5jIGIvbmV0L2RjY3AvaW5wdXQuYwppbmRleCBjNjBiYzM0Li4xYjZiMmNiIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pbnB1dC5jCisrKyBiL25ldC9kY2NwL2lucHV0LmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKKyNpbmNsdWRlICJhY2t2ZWMuaCIKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgogCkBAIC01MCw3ICs1MSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlkY2NwX3NldF9zdGF0ZShzaywgRENDUF9DTE9TSU5HKTsKKwlpZiAoc2stPnNrX3N0YXRlICE9IERDQ1BfQ0xPU0lORykKKwkJZGNjcF9zZXRfc3RhdGUoc2ssIERDQ1BfQ0xPU0lORyk7CiAJZGNjcF9zZW5kX2Nsb3NlKHNrLCAwKTsKIH0KIApAQCAtNTksOCArNjEsOCBAQAogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKIAlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKQotCQlkY2NwX2Fja3BrdHNfY2hlY2tfcmN2X2Fja25vKGRwLT5kY2Nwc19oY19yeF9hY2twa3RzLCBzaywKLQkJCQkJICAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxKTsKKwkJZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja25vKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAorCQkJCQkgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSk7CiB9CiAKIHN0YXRpYyBpbnQgZGNjcF9jaGVja19zZXFubyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNjMsMzcgKzE2NSwxMSBAQAogCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxICE9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKIAkJZGNjcF9ldmVudF9hY2tfcmVjdihzaywgc2tiKTsKIAotCS8qCi0JICogRklYTUU6IGNoZWNrIEVDTiB0byBzZWUgaWYgd2Ugc2hvdWxkIHVzZQotCSAqIERDQ1BfQUNLUEtUU19TVEFURV9FQ05fTUFSS0VECi0JICovCi0JaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcikgewotCQlzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCA9IGRwLT5kY2Nwc19oY19yeF9hY2twa3RzOwotCi0JCWlmIChkY2NwX2Fja3BrdHNfYWRkKGRwLT5kY2Nwc19oY19yeF9hY2twa3RzLCBzaywKLQkJCQkgICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKLQkJCQkgICAgIERDQ1BfQUNLUEtUU19TVEFURV9SRUNFSVZFRCkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiRENDUDogYWNrbm93bGVkZ2VhYmxlICIKLQkJCQkJCSAgICAicGFja2V0cyBidWZmZXIgZnVsbCFcbiIpOwotCQkJYXAtPmRjY3BhcF9hY2tfc2Vxbm8gPSBEQ0NQX01BWF9TRVFOTyArIDE7Ci0JCQlpbmV0X2Nza19zY2hlZHVsZV9hY2soc2spOwotCQkJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX0RBQ0ssCi0JCQkJCQkgIFRDUF9ERUxBQ0tfTUlOLAotCQkJCQkJICBEQ0NQX1JUT19NQVgpOwotCQkJZ290byBkaXNjYXJkOwotCQl9Ci0KLQkJLyoKLQkJICogRklYTUU6IHRoaXMgYWN0aXZhdGlvbiBpcyBwcm9iYWJseSB3cm9uZywgaGF2ZSB0byBzdHVkeSBtb3JlCi0JCSAqIFRDUCBkZWxhY2sgbWFjaGluZXJ5IGFuZCBob3cgaXQgZml0cyBpbnRvIERDQ1AgZHJhZnQsIGJ1dAotCQkgKiBmb3Igbm93IGl0IGtpbmRhICJ3b3JrcyIgOCkKLQkJICovCi0JCWlmICghaW5ldF9jc2tfYWNrX3NjaGVkdWxlZChzaykpIHsKLQkJCWluZXRfY3NrX3NjaGVkdWxlX2Fjayhzayk7Ci0JCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfREFDSywgNSAqIEhaLAotCQkJCQkJICBEQ0NQX1JUT19NQVgpOwotCQl9Ci0JfQorCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKKwkgICAgZGNjcF9hY2t2ZWNfYWRkKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAorCQkJICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKKwkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRCkpCisJCWdvdG8gZGlzY2FyZDsKIAogCWNjaWRfaGNfcnhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrLCBza2IpOwogCWNjaWRfaGNfdHhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOwpAQCAtMzgzLDkgKzM1OSw5IEBACiAJfQogCiBvdXRfaW52YWxpZF9wYWNrZXQ6Ci0JcmV0dXJuIDE7IC8qIGRjY3BfdjRfZG9fcmN2IHdpbGwgc2VuZCBhIHJlc2V0LCBidXQuLi4KLQkJICAgICBGSVhNRTogdGhlIHJlc2V0IGNvZGUgc2hvdWxkIGJlCi0JCQkgICAgRENDUF9SRVNFVF9DT0RFX1BBQ0tFVF9FUlJPUiAqLworCS8qIGRjY3BfdjRfZG9fcmN2IHdpbGwgc2VuZCBhIHJlc2V0ICovCisJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9QQUNLRVRfRVJST1I7CisJcmV0dXJuIDE7IAogfQogCiBzdGF0aWMgaW50IGRjY3BfcmN2X3Jlc3BvbmRfcGFydG9wZW5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssCkBAIC00MzIsNiArNDA4LDcgQEAKIAkJCSAgIHN0cnVjdCBkY2NwX2hkciAqZGgsIHVuc2lnbmVkIGxlbikKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBkY2NwX3NrYl9jYiAqZGNiID0gRENDUF9TS0JfQ0Ioc2tiKTsKIAljb25zdCBpbnQgb2xkX3N0YXRlID0gc2stPnNrX3N0YXRlOwogCWludCBxdWV1ZWQgPSAwOwogCkBAIC00NzIsNyArNDQ5LDggQEAKIAkJaWYgKGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX1JFU0VUKQogCQkJZ290byBkaXNjYXJkOwogCi0JCS8qIENhbGxlciAoZGNjcF92NF9kb19yY3YpIHdpbGwgc2VuZCBSZXNldChObyBDb25uZWN0aW9uKSovCisJCS8qIENhbGxlciAoZGNjcF92NF9kb19yY3YpIHdpbGwgc2VuZCBSZXNldCAqLworCQlkY2ItPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTjsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC00ODYsMzYgKzQ2NCwxNyBAQAogCQlpZiAoZGNjcF9wYXJzZV9vcHRpb25zKHNrLCBza2IpKQogCQkJZ290byBkaXNjYXJkOwogCi0JCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxICE9Ci0JCSAgICBEQ0NQX1BLVF9XSVRIT1VUX0FDS19TRVEpCisJCWlmIChkY2ItPmRjY3BkX2Fja19zZXEgIT0gRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKQogCQkJZGNjcF9ldmVudF9hY2tfcmVjdihzaywgc2tiKTsKIAogCQljY2lkX2hjX3J4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgc2tiKTsKIAkJY2NpZF9oY190eF9wYWNrZXRfcmVjdihkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIHNrYik7CiAKLQkJLyoKLQkJICogRklYTUU6IGNoZWNrIEVDTiB0byBzZWUgaWYgd2Ugc2hvdWxkIHVzZQotCQkgKiBEQ0NQX0FDS1BLVFNfU1RBVEVfRUNOX01BUktFRAotCQkgKi8KLQkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcikgewotCQkJaWYgKGRjY3BfYWNrcGt0c19hZGQoZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMsIHNrLAotCQkJCQkgICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKLQkJCQkJICAgICBEQ0NQX0FDS1BLVFNfU1RBVEVfUkVDRUlWRUQpKQotCQkJCWdvdG8gZGlzY2FyZDsKLQkJCS8qCi0JCQkgKiBGSVhNRTogdGhpcyBhY3RpdmF0aW9uIGlzIHByb2JhYmx5IHdyb25nLCBoYXZlIHRvCi0JCQkgKiBzdHVkeSBtb3JlIFRDUCBkZWxhY2sgbWFjaGluZXJ5IGFuZCBob3cgaXQgZml0cyBpbnRvCi0JCQkgKiBEQ0NQIGRyYWZ0LCBidXQgZm9yIG5vdyBpdCBraW5kYSAid29ya3MiIDgpCi0JCQkgKi8KLQkJCWlmICgoZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMtPmRjY3BhcF9hY2tfc2Vxbm8gPT0KLQkJCSAgICAgRENDUF9NQVhfU0VRTk8gKyAxKSAmJgotCQkJICAgICFpbmV0X2Nza19hY2tfc2NoZWR1bGVkKHNrKSkgewotCQkJCWluZXRfY3NrX3NjaGVkdWxlX2Fjayhzayk7Ci0JCQkJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX0RBQ0ssCi0JCQkJCQkJICBUQ1BfREVMQUNLX01JTiwKLQkJCQkJCQkgIERDQ1BfUlRPX01BWCk7Ci0JCQl9Ci0JCX0KKyAJCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKKwkJICAgIGRjY3BfYWNrdmVjX2FkZChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKKyAJCQkJICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKKyAJCQkJICAgIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVEKSkKKyAJCQlnb3RvIGRpc2NhcmQ7CiAJfQogCiAJLyoKQEAgLTU1MCw4ICs1MDksNyBAQAogCQkgICAgIGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX1JFUVVFU1QpIHx8CiAJCSAgICAoc2stPnNrX3N0YXRlID09IERDQ1BfUkVTUE9ORCAmJgogCQkgICAgIGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX0RBVEEpKSB7Ci0JCWRjY3Bfc2VuZF9zeW5jKHNrLCBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCi0JCQkgICAgICAgRENDUF9QS1RfU1lOQyk7CisJCWRjY3Bfc2VuZF9zeW5jKHNrLCBkY2ItPmRjY3BkX3NlcSwgRENDUF9QS1RfU1lOQyk7CiAJCWdvdG8gZGlzY2FyZDsKIAl9IGVsc2UgaWYgKGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX0NMT1NFUkVRKSB7CiAJCWRjY3BfcmN2X2Nsb3NlcmVxKHNrLCBza2IpOwpAQCAtNTYxLDggKzUxOSwxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAodW5saWtlbHkoZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfU1lOQykpIHsKKwkJZGNjcF9zZW5kX3N5bmMoc2ssIGRjYi0+ZGNjcGRfc2VxLCBEQ0NQX1BLVF9TWU5DQUNLKTsKKwkJZ290byBkaXNjYXJkOworCX0KKwogCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJY2FzZSBEQ0NQX0NMT1NFRDoKKwkJZGNiLT5kY2NwZF9yZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047CiAJCXJldHVybiAxOwogCiAJY2FzZSBEQ0NQX1JFUVVFU1RJTkc6CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggMmFmYWE0Ni4uNDBmZTZhZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIAorI2luY2x1ZGUgImFja3ZlYy5oIgogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJkY2NwLmgiCiAKQEAgLTI0Niw2ICsyNDcsOSBAQAogCiAJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfQ0xJRU5UOwogCisJaWYgKGRjY3Bfc2VydmljZV9ub3RfaW5pdGlhbGl6ZWQoc2spKQorCQlyZXR1cm4gLUVQUk9UTzsKKwogCWlmIChhZGRyX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNjYxLDYgKzY2NSwxNiBAQAogCQkJCQkgICBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYmFkX3NlcnZpY2VfY29kZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCWNvbnN0IF9fdTMyIHNlcnZpY2UpCit7CisJY29uc3Qgc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKworCWlmIChkcC0+ZGNjcHNfc2VydmljZSA9PSBzZXJ2aWNlKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIWRjY3BfbGlzdF9oYXNfc2VydmljZShkcC0+ZGNjcHNfc2VydmljZV9saXN0LCBzZXJ2aWNlKTsKK30KKwogaW50IGRjY3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7CkBAIC02NjksMTMgKzY4MywyMiBAQAogCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcTsKIAljb25zdCBfX3UzMiBzYWRkciA9IHNrYi0+bmguaXBoLT5zYWRkcjsKIAljb25zdCBfX3UzMiBkYWRkciA9IHNrYi0+bmguaXBoLT5kYWRkcjsKKyAJY29uc3QgX191MzIgc2VydmljZSA9IGRjY3BfaGRyX3JlcXVlc3Qoc2tiKS0+ZGNjcGhfcmVxX3NlcnZpY2U7CisJc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOworCV9fdTggcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9UT09fQlVTWTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwogCiAJLyogTmV2ZXIgYW5zd2VyIHRvIERDQ1BfUEtUX1JFUVVFU1RzIHNlbmQgdG8gYnJvYWRjYXN0IG9yIG11bHRpY2FzdCAqLwogCWlmICgoKHN0cnVjdCBydGFibGUgKilza2ItPmRzdCktPnJ0X2ZsYWdzICYKLQkgICAgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKQorCSAgICAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpIHsKKwkJcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OOwogCQlnb3RvIGRyb3A7CisJfQogCisJaWYgKGRjY3BfYmFkX3NlcnZpY2VfY29kZShzaywgc2VydmljZSkpIHsKKwkJcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9CQURfU0VSVklDRV9DT0RFOworCQlnb3RvIGRyb3A7CisgCX0KIAkvKgogCSAqIFRXIGJ1Y2tldHMgYXJlIGNvbnZlcnRlZCB0byBvcGVuIHJlcXVlc3RzIHdpdGhvdXQKIAkgKiBsaW1pdGF0aW9ucywgdGhleSBjb25zZXJ2ZSByZXNvdXJjZXMgYW5kIHBlZXIgaXMKQEAgLTcxOCw5ICs3NDEsOSBAQAogCSAqIGRjY3BfY3JlYXRlX29wZW5yZXFfY2hpbGQuCiAJICovCiAJZHJlcSA9IGRjY3BfcnNrKHJlcSk7Ci0JZHJlcS0+ZHJlcV9pc3IgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7Ci0JZHJlcS0+ZHJlcV9pc3MgPSBkY2NwX3Y0X2luaXRfc2VxdWVuY2Uoc2ssIHNrYik7Ci0JZHJlcS0+ZHJlcV9zZXJ2aWNlID0gZGNjcF9oZHJfcmVxdWVzdChza2IpLT5kY2NwaF9yZXFfc2VydmljZTsKKwlkcmVxLT5kcmVxX2lzcgkgICA9IGRjYi0+ZGNjcGRfc2VxOworCWRyZXEtPmRyZXFfaXNzCSAgID0gZGNjcF92NF9pbml0X3NlcXVlbmNlKHNrLCBza2IpOworCWRyZXEtPmRyZXFfc2VydmljZSA9IHNlcnZpY2U7CiAKIAlpZiAoZGNjcF92NF9zZW5kX3Jlc3BvbnNlKHNrLCByZXEsIGRzdCkpCiAJCWdvdG8gZHJvcF9hbmRfZnJlZTsKQEAgLTczNSw2ICs3NTgsNyBAQAogCV9fcmVxc2tfZnJlZShyZXEpOwogZHJvcDoKIAlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9BVFRFTVBURkFJTFMpOworCWRjYi0+ZGNjcGRfcmVzZXRfY29kZSA9IHJlc2V0X2NvZGU7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xMDA1LDcgKzEwMjksNiBAQAogCXJldHVybiAwOwogCiByZXNldDoKLQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9yZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047CiAJZGNjcF92NF9jdGxfc2VuZF9yZXNldChza2IpOwogZGlzY2FyZDoKIAlrZnJlZV9za2Ioc2tiKTsKQEAgLTEwOTAsNDUgKzExMTMsNyBAQAogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKIAlkaCA9IGRjY3BfaGRyKHNrYik7Ci0jaWYgMAotCS8qCi0JICogVXNlIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8gc2ltdWxhdGUgc29tZSBEQVRBL0RBVEFBQ0sgbG9zcyB0byB0ZXN0Ci0JICogZGNjcF9hY2twa3RzX2FkZCwgeW91J2xsIGdldCBzb21ldGhpbmcgbGlrZSB0aGlzIG9uIGEgc2Vzc2lvbiB0aGF0Ci0JICogc2VuZHMgMTAgREFUQS9EQVRBQUNLIHBhY2tldHM6Ci0JICoKLQkgKiBhY2twa3RzX3ByaW50OiAyODE0NzM1OTY0Njc0MjIgfDAsMHwzLDB8MCwwfDMsMHwwLDB8MywwfDAsMHwzLDB8MCwxfAotCSAqCi0JICogMCwgMCBtZWFuczogRENDUF9BQ0tQS1RTX1NUQVRFX1JFQ0VJVkVELCBSTEUgPT0ganVzdCB0aGlzIHBhY2tldAotCSAqIDAsIDEgbWVhbnM6IERDQ1BfQUNLUEtUU19TVEFURV9SRUNFSVZFRCwgUkxFID09IHR3byBhZGphY2VudCBwYWNrZXRzCi0JICogCQkJCQkJICAgd2l0aCB0aGUgc2FtZSBzdGF0ZQotCSAqIDMsIDAgbWVhbnM6IERDQ1BfQUNLUEtUU19TVEFURV9OT1RfUkVDRUlWRUQsIFJMRSA9PSBqdXN0IHRoaXMgcGFja2V0Ci0JICoKLQkgKiBTby4uLgotCSAqCi0JICogMjgxNDczNTk2NDY3NDIyIHdhcyByZWNlaXZlZAotCSAqIDI4MTQ3MzU5NjQ2NzQyMSB3YXMgbm90IHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDIwIHdhcyByZWNlaXZlZAotCSAqIDI4MTQ3MzU5NjQ2NzQxOSB3YXMgbm90IHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDE4IHdhcyByZWNlaXZlZAotCSAqIDI4MTQ3MzU5NjQ2NzQxNyB3YXMgbm90IHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDE2IHdhcyByZWNlaXZlZAotCSAqIDI4MTQ3MzU5NjQ2NzQxNSB3YXMgbm90IHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDE0IHdhcyByZWNlaXZlZAotCSAqIDI4MTQ3MzU5NjQ2NzQxMyB3YXMgcmVjZWl2ZWQgKHRoaXMgb25lIHdhcyB0aGUgM3dheSBoYW5kc2hha2UKLQkgKiAJCQkJIFJFU1BPTlNFKQotCSAqCi0JICovCi0JaWYgKGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX0RBVEEgfHwKLQkgICAgZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfREFUQUFDSykgewotCQlzdGF0aWMgaW50IGRpc2NhcmQgPSAwOwogCi0JCWlmIChkaXNjYXJkKSB7Ci0JCQlkaXNjYXJkID0gMDsKLQkJCWdvdG8gZGlzY2FyZF9pdDsKLQkJfQotCQlkaXNjYXJkID0gMTsKLQl9Ci0jZW5kaWYKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEgID0gZGNjcF9oZHJfc2VxKHNrYik7CiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9IGRoLT5kY2NwaF90eXBlOwogCkBAIC0xMjQyLDExICsxMjI3LDkgQEAKIAlkb19nZXR0aW1lb2ZkYXkoJmRwLT5kY2Nwc19lcG9jaCk7CiAKIAlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKSB7Ci0JCWRwLT5kY2Nwc19oY19yeF9hY2twa3RzID0KLQkJCWRjY3BfYWNrcGt0c19hbGxvYyhEQ0NQX01BWF9BQ0tfVkVDVE9SX0xFTiwKLQkJCQkJICAgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKGRwLT5kY2Nwc19oY19yeF9hY2twa3RzID09IE5VTEwpCisJCWRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPSBkY2NwX2Fja3ZlY19hbGxvYyhEQ0NQX01BWF9BQ0tWRUNfTEVOLAorCQkJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMjU4LDE2ICsxMjQxLDE4IEBACiAJICogc2V0c29ja29wdChDQ0lEcy1JLXdhbnQvYWNjZXB0KS4gLWFjbWUKIAkgKi8KIAlpZiAobGlrZWx5KCFkY2NwX2N0bF9zb2NrZXRfaW5pdCkpIHsKLQkJZHAtPmRjY3BzX2hjX3J4X2NjaWQgPSBjY2lkX2luaXQoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fY2NpZCwKKwkJZHAtPmRjY3BzX2hjX3J4X2NjaWQgPSBjY2lkX2luaXQoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fcnhfY2NpZCwKIAkJCQkJCSBzayk7Ci0JCWRwLT5kY2Nwc19oY190eF9jY2lkID0gY2NpZF9pbml0KGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX2NjaWQsCisJCWRwLT5kY2Nwc19oY190eF9jY2lkID0gY2NpZF9pbml0KGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3R4X2NjaWQsCiAJCQkJCQkgc2spOwogCSAgICAJaWYgKGRwLT5kY2Nwc19oY19yeF9jY2lkID09IE5VTEwgfHwKIAkJICAgIGRwLT5kY2Nwc19oY190eF9jY2lkID09IE5VTEwpIHsKIAkJCWNjaWRfZXhpdChkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgc2spOwogCQkJY2NpZF9leGl0KGRwLT5kY2Nwc19oY190eF9jY2lkLCBzayk7Ci0JCQlkY2NwX2Fja3BrdHNfZnJlZShkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cyk7Ci0JCQlkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cyA9IE5VTEw7CisJCQlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKSB7CisJCQkJZGNjcF9hY2t2ZWNfZnJlZShkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKTsKKwkJCQlkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID0gTlVMTDsKKwkJCX0KIAkJCWRwLT5kY2Nwc19oY19yeF9jY2lkID0gZHAtPmRjY3BzX2hjX3R4X2NjaWQgPSBOVUxMOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTEyODAsNiArMTI2NSw3IEBACiAJc2stPnNrX3dyaXRlX3NwYWNlID0gZGNjcF93cml0ZV9zcGFjZTsKIAlkcC0+ZGNjcHNfbXNzX2NhY2hlID0gNTM2OwogCWRwLT5kY2Nwc19yb2xlID0gRENDUF9ST0xFX1VOREVGSU5FRDsKKwlkcC0+ZGNjcHNfc2VydmljZSA9IERDQ1BfU0VSVklDRV9JTlZBTElEX1ZBTFVFOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzAxLDEwICsxMjg3LDE3IEBACiAJaWYgKGluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2ggIT0gTlVMTCkKIAkJaW5ldF9wdXRfcG9ydCgmZGNjcF9oYXNoaW5mbywgc2spOwogCisJaWYgKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QgIT0gTlVMTCkgeworCQlrZnJlZShkcC0+ZGNjcHNfc2VydmljZV9saXN0KTsKKwkJZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCA9IE5VTEw7CisJfQorCiAJY2NpZF9oY19yeF9leGl0KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzayk7CiAJY2NpZF9oY190eF9leGl0KGRwLT5kY2Nwc19oY190eF9jY2lkLCBzayk7Ci0JZGNjcF9hY2twa3RzX2ZyZWUoZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMpOwotCWRwLT5kY2Nwc19oY19yeF9hY2twa3RzID0gTlVMTDsKKwlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKSB7CisJCWRjY3BfYWNrdmVjX2ZyZWUoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyk7CisJCWRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPSBOVUxMOworCX0KIAljY2lkX2V4aXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKIAljY2lkX2V4aXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKTsKIAlkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9IGRwLT5kY2Nwc19oY190eF9jY2lkID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL21pbmlzb2Nrcy5jIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKaW5kZXggMTg0NjFiYy4uMTM5MzQ2MSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxuZXQveGZybS5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD4KIAorI2luY2x1ZGUgImFja3ZlYy5oIgogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJkY2NwLmgiCiAKQEAgLTkzLDIyICs5NCwyNCBAQAogCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKm5ld2ljc2sgPSBpbmV0X2Nzayhzayk7CiAJCXN0cnVjdCBkY2NwX3NvY2sgKm5ld2RwID0gZGNjcF9zayhuZXdzayk7CiAKLQkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMgPSBOVUxMOwotCQluZXdkcC0+ZGNjcHNfcm9sZSA9IERDQ1BfUk9MRV9TRVJWRVI7Ci0JCW5ld2ljc2stPmljc2tfcnRvID0gRENDUF9USU1FT1VUX0lOSVQ7CisJCW5ld2RwLT5kY2Nwc19yb2xlCSAgID0gRENDUF9ST0xFX1NFUlZFUjsKKwkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAgPSBOVUxMOworCQluZXdkcC0+ZGNjcHNfc2VydmljZV9saXN0ICA9IE5VTEw7CisJCW5ld2RwLT5kY2Nwc19zZXJ2aWNlCSAgID0gZHJlcS0+ZHJlcV9zZXJ2aWNlOworCQluZXdpY3NrLT5pY3NrX3J0bwkgICA9IERDQ1BfVElNRU9VVF9JTklUOwogCQlkb19nZXR0aW1lb2ZkYXkoJm5ld2RwLT5kY2Nwc19lcG9jaCk7CiAKIAkJaWYgKG5ld2RwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcikgewotCQkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMgPQotCQkJCWRjY3BfYWNrcGt0c19hbGxvYyhEQ0NQX01BWF9BQ0tfVkVDVE9SX0xFTiwKLQkJCQkJCSAgIEdGUF9BVE9NSUMpOworCQkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9CisJCQkJZGNjcF9hY2t2ZWNfYWxsb2MoRENDUF9NQVhfQUNLVkVDX0xFTiwKKwkJCQkJCSAgR0ZQX0FUT01JQyk7CiAJCQkvKgogCQkJICogWFhYOiBXZSdyZSB1c2luZyB0aGUgc2FtZSBDQ0lEcyBzZXQgb24gdGhlIHBhcmVudCwKIAkJCSAqIGkuZS4gc2tfY2xvbmUgY29waWVkIHRoZSBtYXN0ZXIgc29jayBhbmQgbGVmdCB0aGUKIAkJCSAqIENDSUQgcG9pbnRlcnMgZm9yIHRoaXMgY2hpbGQsIHRoYXQgaXMgd2h5IHdlIGRvIHRoZQogCQkJICogX19jY2lkX2dldCBjYWxscy4KIAkJCSAqLwotCQkJaWYgKHVubGlrZWx5KG5ld2RwLT5kY2Nwc19oY19yeF9hY2twa3RzID09IE5VTEwpKQorCQkJaWYgKHVubGlrZWx5KG5ld2RwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPT0gTlVMTCkpCiAJCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCkBAIC0xMTYsNyArMTE5LDcgQEAKIAkJCQkJICAgICBuZXdzaykgIT0gMCB8fAogCQkJICAgICBjY2lkX2hjX3R4X2luaXQobmV3ZHAtPmRjY3BzX2hjX3R4X2NjaWQsCiAJCQkJICAgICAJICAgICBuZXdzaykgIT0gMCkpIHsKLQkJCWRjY3BfYWNrcGt0c19mcmVlKG5ld2RwLT5kY2Nwc19oY19yeF9hY2twa3RzKTsKKwkJCWRjY3BfYWNrdmVjX2ZyZWUobmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyk7CiAJCQljY2lkX2hjX3J4X2V4aXQobmV3ZHAtPmRjY3BzX2hjX3J4X2NjaWQsIG5ld3NrKTsKIAkJCWNjaWRfaGNfdHhfZXhpdChuZXdkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgbmV3c2spOwogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggZDRjNDI0Mi4uMGE3NjQyNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtMTgsMTkgKzE4LDE1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKKyNpbmNsdWRlICJhY2t2ZWMuaCIKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgogCi1zdGF0aWMgdm9pZCBkY2NwX2Fja3BrdHNfY2hlY2tfcmN2X2Fja3ZlY3RvcihzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCwKLQkJCQkJICAgICBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgY29uc3QgdTY0IGFja25vLAotCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGVuLAotCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3Rvcik7Ci0KIC8qIHN0b3JlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBjb25uZWN0aW9uLiBtYXkgYmUgY2hhbmdlZCB3aXRoIHN5c2N0bCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBkY2NwX29wdGlvbnMgZGNjcG9fZGVmYXVsdF92YWx1ZXMgPSB7CiAJLmRjY3BvX3NlcXVlbmNlX3dpbmRvdwkgID0gRENDUEZfSU5JVElBTF9TRVFVRU5DRV9XSU5ET1csCi0JLmRjY3BvX2NjaWQJCSAgPSBEQ0NQRl9JTklUSUFMX0NDSUQsCisJLmRjY3BvX3J4X2NjaWQJCSAgPSBEQ0NQRl9JTklUSUFMX0NDSUQsCisJLmRjY3BvX3R4X2NjaWQJCSAgPSBEQ0NQRl9JTklUSUFMX0NDSUQsCiAJLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcgkgID0gRENDUEZfSU5JVElBTF9TRU5EX0FDS19WRUNUT1IsCiAJLmRjY3BvX3NlbmRfbmRwX2NvdW50CSAgPSBEQ0NQRl9JTklUSUFMX1NFTkRfTkRQX0NPVU5ULAogfTsKQEAgLTExMywyNSArMTA5LDEzIEBACiAJCQkJICAgICAgb3B0X3JlY3YtPmRjY3Bvcl9uZHApOwogCQkJYnJlYWs7CiAJCWNhc2UgRENDUE9fQUNLX1ZFQ1RPUl8wOgotCQkJaWYgKGxlbiA+IERDQ1BfTUFYX0FDS19WRUNUT1JfTEVOKQotCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOwotCisJCWNhc2UgRENDUE9fQUNLX1ZFQ1RPUl8xOgogCQkJaWYgKHBrdF90eXBlID09IERDQ1BfUEtUX0RBVEEpCiAJCQkJY29udGludWU7CiAKLQkJCW9wdF9yZWN2LT5kY2Nwb3JfYWNrX3ZlY3Rvcl9sZW4gPSBsZW47Ci0JCQlvcHRfcmVjdi0+ZGNjcG9yX2Fja192ZWN0b3JfaWR4ID0gdmFsdWUgLSBvcHRpb25zOwotCi0JCQlkY2NwX3ByX2RlYnVnKCIlc0FDSyB2ZWN0b3IgMCwgbGVuPSVkLCBhY2tfYWNrbm89JWxsdVxuIiwKLQkJCQkgICAgICBkZWJ1Z19wcmVmaXgsIGxlbiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCSAgICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEpOwotCQkJZGNjcF9hY2t2ZWN0b3JfcHJpbnQoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSwKLQkJCQkJICAgICB2YWx1ZSwgbGVuKTsKLQkJCWRjY3BfYWNrcGt0c19jaGVja19yY3ZfYWNrdmVjdG9yKGRwLT5kY2Nwc19oY19yeF9hY2twa3RzLAotCQkJCQkJCSBzaywKLQkJCQkJCSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAotCQkJCQkJCSBsZW4sIHZhbHVlKTsKKwkJCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKKwkJCSAgICBkY2NwX2Fja3ZlY19wYXJzZShzaywgc2tiLCBvcHQsIHZhbHVlLCBsZW4pKQorCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOwogCQkJYnJlYWs7CiAJCWNhc2UgRENDUE9fVElNRVNUQU1QOgogCQkJaWYgKGxlbiAhPSA0KQpAQCAtMzUyLDg2ICszMzYsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKTsKIAotc3RhdGljIHZvaWQgZGNjcF9pbnNlcnRfb3B0aW9uX2Fja192ZWN0b3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLQljb25zdCBjaGFyICpkZWJ1Z19wcmVmaXggPSBkcC0+ZGNjcHNfcm9sZSA9PSBEQ0NQX1JPTEVfQ0xJRU5UID8KLQkJCQkJIkNMSUVOVCBUWCBvcHQ6ICIgOiAic2VydmVyIFRYIG9wdDogIjsKLSNlbmRpZgotCXN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwID0gZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHM7Ci0JaW50IGxlbiA9IGFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW4gKyAyOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQl1MzIgZWxhcHNlZF90aW1lOwotCXVuc2lnbmVkIGNoYXIgKnRvLCAqZnJvbTsKLQotCWRjY3BfdGltZXN0YW1wKHNrLCAmbm93KTsKLQllbGFwc2VkX3RpbWUgPSB0aW1ldmFsX2RlbHRhKCZub3csICZhcC0+ZGNjcGFwX3RpbWUpIC8gMTA7Ci0KLQlpZiAoZWxhcHNlZF90aW1lICE9IDApCi0JCWRjY3BfaW5zZXJ0X29wdGlvbl9lbGFwc2VkX3RpbWUoc2ssIHNrYiwgZWxhcHNlZF90aW1lKTsKLQotCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICsgbGVuID4gRENDUF9NQVhfT1BUX0xFTikgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIkRDQ1A6IHBhY2tldCB0b28gc21hbGwgdG8gIgotCQkJCQkgImluc2VydCBBQ0sgVmVjdG9yIVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFhYWDogbm93IHdlIGhhdmUganVzdCBvbmUgYWNrIHZlY3RvciBzZW50IHJlY29yZCwgc28KLQkgKiB3ZSBoYXZlIHRvIHdhaXQgZm9yIGl0IHRvIGJlIGNsZWFyZWQuCi0JICoKLQkgKiBPZiBjb3Vyc2UgdGhpcyBpcyBub3QgYWNjZXB0YWJsZSwgYnV0IHRoaXMgaXMganVzdCBmb3IKLQkgKiBiYXNpYyB0ZXN0aW5nIG5vdy4KLQkgKi8KLQlpZiAoYXAtPmRjY3BhcF9hY2tfc2Vxbm8gIT0gRENDUF9NQVhfU0VRTk8gKyAxKQotCQlyZXR1cm47Ci0KLQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICs9IGxlbjsKLQotCXRvICAgID0gc2tiX3B1c2goc2tiLCBsZW4pOwotCSp0bysrID0gRENDUE9fQUNLX1ZFQ1RPUl8wOwotCSp0bysrID0gbGVuOwotCi0JbGVuICA9IGFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW47Ci0JZnJvbSA9IGFwLT5kY2NwYXBfYnVmICsgYXAtPmRjY3BhcF9idWZfaGVhZDsKLQotCS8qIENoZWNrIGlmIGJ1Zl9oZWFkIHdyYXBzICovCi0JaWYgKGFwLT5kY2NwYXBfYnVmX2hlYWQgKyBsZW4gPiBhcC0+ZGNjcGFwX2J1Zl9sZW4pIHsKLQkJY29uc3QgdW5zaWduZWQgaW50IHRhaWxzaXplID0gKGFwLT5kY2NwYXBfYnVmX2xlbiAtCi0JCQkJCSAgICAgICBhcC0+ZGNjcGFwX2J1Zl9oZWFkKTsKLQotCQltZW1jcHkodG8sIGZyb20sIHRhaWxzaXplKTsKLQkJdG8gICArPSB0YWlsc2l6ZTsKLQkJbGVuICAtPSB0YWlsc2l6ZTsKLQkJZnJvbSA9IGFwLT5kY2NwYXBfYnVmOwotCX0KLQotCW1lbWNweSh0bywgZnJvbSwgbGVuKTsKLQkvKgotCSAqCUZyb20gZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0OgotCSAqCi0JICoJRm9yIGVhY2ggYWNrbm93bGVkZ2VtZW50IGl0IHNlbmRzLCB0aGUgSEMtUmVjZWl2ZXIgd2lsbCBhZGQgYW4KLQkgKglhY2tub3dsZWRnZW1lbnQgcmVjb3JkLiAgYWNrX3NlcW5vIHdpbGwgZXF1YWwgdGhlIEhDLVJlY2VpdmVyCi0JICoJc2VxdWVuY2UgbnVtYmVyIGl0IHVzZWQgZm9yIHRoZSBhY2sgcGFja2V0OyBhY2tfcHRyIHdpbGwgZXF1YWwKLQkgKglidWZfaGVhZDsgYWNrX2Fja25vIHdpbGwgZXF1YWwgYnVmX2Fja25vOyBhbmQgYWNrX25vbmNlIHdpbGwKLQkgKgllcXVhbCBidWZfbm9uY2UuCi0JICoKLQkgKiBUaGlzIGltcGxlbWVudGlvbiB1c2VzIGp1c3Qgb25lIGFjayByZWNvcmQgZm9yIG5vdy4KLQkgKi8KLQlhcC0+ZGNjcGFwX2Fja19zZXFubwkgID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxOwotCWFwLT5kY2NwYXBfYWNrX3B0cgkgID0gYXAtPmRjY3BhcF9idWZfaGVhZDsKLQlhcC0+ZGNjcGFwX2Fja19hY2tubwkgID0gYXAtPmRjY3BhcF9idWZfYWNrbm87Ci0JYXAtPmRjY3BhcF9hY2tfbm9uY2UJICA9IGFwLT5kY2NwYXBfYnVmX25vbmNlOwotCWFwLT5kY2NwYXBfYWNrX3ZlY3Rvcl9sZW4gPSBhcC0+ZGNjcGFwX2J1Zl92ZWN0b3JfbGVuOwotCi0JZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgVmVjdG9yIDAsIGxlbj0lZCwgYWNrX3NlcW5vPSVsbHUsICIKLQkJICAgICAgImFja19hY2tubz0lbGx1XG4iLAotCQkgICAgICBkZWJ1Z19wcmVmaXgsIGFwLT5kY2NwYXBfYWNrX3ZlY3Rvcl9sZW4sCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFwLT5kY2NwYXBfYWNrX3NlcW5vLAotCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhcC0+ZGNjcGFwX2Fja19hY2tubyk7Ci19Ci0KIHZvaWQgZGNjcF90aW1lc3RhbXAoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGltZXZhbCAqdHYpCiB7CiAJY29uc3Qgc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTUyOCw5ICs0MzIsOCBAQAogCiAJaWYgKCFkY2NwX3BhY2tldF93aXRob3V0X2Fjayhza2IpKSB7CiAJCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKLQkJICAgIChkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cy0+ZGNjcGFwX2J1Zl9hY2tubyAhPQotCQkgICAgIERDQ1BfTUFYX1NFUU5PICsgMSkpCi0JCQlkY2NwX2luc2VydF9vcHRpb25fYWNrX3ZlY3Rvcihzaywgc2tiKTsKKwkJICAgIGRjY3BfYWNrdmVjX3BlbmRpbmcoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYykpCisJCQlkY2NwX2luc2VydF9vcHRpb25fYWNrdmVjKHNrLCBza2IpOwogCQlpZiAoZHAtPmRjY3BzX3RpbWVzdGFtcF9lY2hvICE9IDApCiAJCQlkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wX2VjaG8oc2ssIHNrYik7CiAJfQpAQCAtNTU3LDMzMSArNDYwLDMgQEAKIAkJfQogCX0KIH0KLQotc3RydWN0IGRjY3BfYWNrcGt0cyAqZGNjcF9hY2twa3RzX2FsbG9jKGNvbnN0IHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCi17Ci0Jc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAgPSBrbWFsbG9jKHNpemVvZigqYXApICsgbGVuLCBwcmlvcml0eSk7Ci0KLQlpZiAoYXAgIT0gTlVMTCkgewotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi0JCW1lbXNldChhcC0+ZGNjcGFwX2J1ZiwgMHhGRiwgbGVuKTsKLSNlbmRpZgotCQlhcC0+ZGNjcGFwX2J1Zl9sZW4gICA9IGxlbjsKLQkJYXAtPmRjY3BhcF9idWZfaGVhZCAgPQotCQkJYXAtPmRjY3BhcF9idWZfdGFpbCA9Ci0JCQkJYXAtPmRjY3BhcF9idWZfbGVuIC0gMTsKLQkJYXAtPmRjY3BhcF9idWZfYWNrbm8gPQotCQkJYXAtPmRjY3BhcF9hY2tfYWNrbm8gPQotCQkJCWFwLT5kY2NwYXBfYWNrX3NlcW5vID0gRENDUF9NQVhfU0VRTk8gKyAxOwotCQlhcC0+ZGNjcGFwX2J1Zl9ub25jZSA9IGFwLT5kY2NwYXBfYnVmX25vbmNlID0gMDsKLQkJYXAtPmRjY3BhcF9hY2tfcHRyICAgPSAwOwotCQlhcC0+ZGNjcGFwX3RpbWUudHZfc2VjID0gMDsKLQkJYXAtPmRjY3BhcF90aW1lLnR2X3VzZWMgPSAwOwotCQlhcC0+ZGNjcGFwX2J1Zl92ZWN0b3JfbGVuID0gYXAtPmRjY3BhcF9hY2tfdmVjdG9yX2xlbiA9IDA7Ci0JfQotCi0JcmV0dXJuIGFwOwotfQotCi12b2lkIGRjY3BfYWNrcGt0c19mcmVlKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwKQotewotCWlmIChhcCAhPSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLQkJbWVtc2V0KGFwLCAweEZGLCBzaXplb2YoKmFwKSArIGFwLT5kY2NwYXBfYnVmX2xlbik7Ci0jZW5kaWYKLQkJa2ZyZWUoYXApOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3BrdHNfc3RhdGUoY29uc3Qgc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAsCi0JCQkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlyZXR1cm4gYXAtPmRjY3BhcF9idWZbaW5kZXhdICYgRENDUF9BQ0tQS1RTX1NUQVRFX01BU0s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggZGNjcF9hY2twa3RzX2xlbihjb25zdCBzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCwKLQkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlyZXR1cm4gYXAtPmRjY3BhcF9idWZbaW5kZXhdICYgRENDUF9BQ0tQS1RTX0xFTl9NQVNLOwotfQotCi0vKgotICogSWYgc2V2ZXJhbCBwYWNrZXRzIGFyZSBtaXNzaW5nLCB0aGUgSEMtUmVjZWl2ZXIgbWF5IHByZWZlciB0byBlbnRlciBtdWx0aXBsZQotICogYnl0ZXMgd2l0aCBydW4gbGVuZ3RoIDAsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGJ5dGUgd2l0aCBhIGxhcmdlciBydW4gbGVuZ3RoOwotICogdGhpcyBzaW1wbGlmaWVzIHRhYmxlIHVwZGF0ZXMgaWYgb25lIG9mIHRoZSBtaXNzaW5nIHBhY2tldHMgYXJyaXZlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2twa3RzX3NldF9idWZfaGVhZF9zdGF0ZShzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCwKLQkJCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IHBhY2tldHMsCi0JCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RhdGUpCi17Ci0JdW5zaWduZWQgaW50IGdhcDsKLQlzaWduZWQgbG9uZyBuZXdfaGVhZDsKLQotCWlmIChhcC0+ZGNjcGFwX2J1Zl92ZWN0b3JfbGVuICsgcGFja2V0cyA+IGFwLT5kY2NwYXBfYnVmX2xlbikKLQkJcmV0dXJuIC1FTk9CVUZTOwotCi0JZ2FwCSA9IHBhY2tldHMgLSAxOwotCW5ld19oZWFkID0gYXAtPmRjY3BhcF9idWZfaGVhZCAtIHBhY2tldHM7Ci0KLQlpZiAobmV3X2hlYWQgPCAwKSB7Ci0JCWlmIChnYXAgPiAwKSB7Ci0JCQltZW1zZXQoYXAtPmRjY3BhcF9idWYsIERDQ1BfQUNLUEtUU19TVEFURV9OT1RfUkVDRUlWRUQsCi0JCQkgICAgICAgZ2FwICsgbmV3X2hlYWQgKyAxKTsKLQkJCWdhcCA9IC1uZXdfaGVhZDsKLQkJfQotCQluZXdfaGVhZCArPSBhcC0+ZGNjcGFwX2J1Zl9sZW47Ci0JfSAKLQotCWFwLT5kY2NwYXBfYnVmX2hlYWQgPSBuZXdfaGVhZDsKLQotCWlmIChnYXAgPiAwKQotCQltZW1zZXQoYXAtPmRjY3BhcF9idWYgKyBhcC0+ZGNjcGFwX2J1Zl9oZWFkICsgMSwKLQkJICAgICAgIERDQ1BfQUNLUEtUU19TVEFURV9OT1RfUkVDRUlWRUQsIGdhcCk7Ci0KLQlhcC0+ZGNjcGFwX2J1ZlthcC0+ZGNjcGFwX2J1Zl9oZWFkXSA9IHN0YXRlOwotCWFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW4gKz0gcGFja2V0czsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEltcGxlbWVudHMgdGhlIGRyYWZ0LWlldGYtZGNjcC1zcGVjLTExLnR4dCBBcHBlbmRpeCBBCi0gKi8KLWludCBkY2NwX2Fja3BrdHNfYWRkKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCi0JCSAgICAgdTY0IGFja25vLCB1OCBzdGF0ZSkKLXsKLQkvKgotCSAqIENoZWNrIGF0IHRoZSByaWdodCBwbGFjZXMgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsLCBpZiBpdCBpcywgdGVsbCB0aGUKLQkgKiBjYWxsZXIgdG8gc3RhcnQgZHJvcHBpbmcgcGFja2V0cyB0aWxsIHRoZSBIQy1TZW5kZXIgYWNrcyBvdXIgQUNLCi0JICogdmVjdG9ycywgd2hlbiB3ZSB3aWxsIGZyZWUgdXAgc3BhY2UgaW4gZGNjcGFwX2J1Zi4KLQkgKgotCSAqIFdlIG1heSB3ZWxsIGRlY2lkZSB0byBkbyBidWZmZXIgY29tcHJlc3Npb24sIGV0YywgYnV0IGZvciBub3cgbGV0cwotCSAqIGp1c3QgZHJvcC4KLQkgKgotCSAqIEZyb20gQXBwZW5kaXggQToKLQkgKgotCSAqCU9mIGNvdXJzZSwgdGhlIGNpcmN1bGFyIGJ1ZmZlciBtYXkgb3ZlcmZsb3csIGVpdGhlciB3aGVuIHRoZQotCSAqCUhDLVNlbmRlciBpcyBzZW5kaW5nIGRhdGEgYXQgYSB2ZXJ5IGhpZ2ggcmF0ZSwgd2hlbiB0aGUKLQkgKglIQy1SZWNlaXZlcidzIGFja25vd2xlZGdlbWVudHMgYXJlIG5vdCByZWFjaGluZyB0aGUgSEMtU2VuZGVyLAotCSAqCW9yIHdoZW4gdGhlIEhDLVNlbmRlciBpcyBmb3JnZXR0aW5nIHRvIGFja25vd2xlZGdlIHRob3NlIGFja3MKLQkgKgkoc28gdGhlIEhDLVJlY2VpdmVyIGlzIHVuYWJsZSB0byBjbGVhbiB1cCBvbGQgc3RhdGUpLiBJbiB0aGlzCi0JICoJY2FzZSwgdGhlIEhDLVJlY2VpdmVyIHNob3VsZCBlaXRoZXIgY29tcHJlc3MgdGhlIGJ1ZmZlciAoYnkKLQkgKglpbmNyZWFzaW5nIHJ1biBsZW5ndGhzIHdoZW4gcG9zc2libGUpLCB0cmFuc2ZlciBpdHMgc3RhdGUgdG8KLQkgKglhIGxhcmdlciBidWZmZXIsIG9yLCBhcyBhIGxhc3QgcmVzb3J0LCBkcm9wIGFsbCByZWNlaXZlZAotCSAqCXBhY2tldHMsIHdpdGhvdXQgcHJvY2Vzc2luZyB0aGVtIHdoYXRzb2V2ZXIsIHVudGlsIGl0cyBidWZmZXIKLQkgKglzaHJpbmtzIGFnYWluLgotCSAqLwotCi0JLyogU2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFja25vIGJlaW5nIGluc2VydGVkICovCi0JaWYgKGFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW4gPT0gMCkgewotCQlhcC0+ZGNjcGFwX2J1ZlthcC0+ZGNjcGFwX2J1Zl9oZWFkXSA9IHN0YXRlOwotCQlhcC0+ZGNjcGFwX2J1Zl92ZWN0b3JfbGVuID0gMTsKLQl9IGVsc2UgaWYgKGFmdGVyNDgoYWNrbm8sIGFwLT5kY2NwYXBfYnVmX2Fja25vKSkgewotCQljb25zdCB1NjQgZGVsdGEgPSBkY2NwX2RlbHRhX3NlcW5vKGFwLT5kY2NwYXBfYnVmX2Fja25vLAotCQkJCQkJICAgYWNrbm8pOwotCi0JCS8qCi0JCSAqIExvb2sgaWYgdGhlIHN0YXRlIG9mIHRoaXMgcGFja2V0IGlzIHRoZSBzYW1lIGFzIHRoZQotCQkgKiBwcmV2aW91cyBhY2tubyBhbmQgaWYgc28gaWYgd2UgY2FuIGJ1bXAgdGhlIGhlYWQgbGVuLgotCQkgKi8KLQkJaWYgKGRlbHRhID09IDEgJiYKLQkJICAgIGRjY3BfYWNrcGt0c19zdGF0ZShhcCwgYXAtPmRjY3BhcF9idWZfaGVhZCkgPT0gc3RhdGUgJiYKLQkJICAgIChkY2NwX2Fja3BrdHNfbGVuKGFwLCBhcC0+ZGNjcGFwX2J1Zl9oZWFkKSA8Ci0JCSAgICAgRENDUF9BQ0tQS1RTX0xFTl9NQVNLKSkKLQkJCWFwLT5kY2NwYXBfYnVmW2FwLT5kY2NwYXBfYnVmX2hlYWRdKys7Ci0JCWVsc2UgaWYgKGRjY3BfYWNrcGt0c19zZXRfYnVmX2hlYWRfc3RhdGUoYXAsIGRlbHRhLCBzdGF0ZSkpCi0JCQlyZXR1cm4gLUVOT0JVRlM7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogQS4xLjIuICBPbGQgUGFja2V0cwotCQkgKgotCQkgKglXaGVuIGEgcGFja2V0IHdpdGggU2VxdWVuY2UgTnVtYmVyIFMgYXJyaXZlcywgYW5kCi0JCSAqCVMgPD0gYnVmX2Fja25vLCB0aGUgSEMtUmVjZWl2ZXIgd2lsbCBzY2FuIHRoZSB0YWJsZQotCQkgKglmb3IgdGhlIGJ5dGUgY29ycmVzcG9uZGluZyB0byBTLiAoSW5kZXhpbmcgc3RydWN0dXJlcwotCQkgKgljb3VsZCByZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBzY2FuLikKLQkJICovCi0JCXU2NCBkZWx0YSA9IGRjY3BfZGVsdGFfc2Vxbm8oYWNrbm8sIGFwLT5kY2NwYXBfYnVmX2Fja25vKTsKLQkJdW5zaWduZWQgaW50IGluZGV4ID0gYXAtPmRjY3BhcF9idWZfaGVhZDsKLQotCQl3aGlsZSAoMSkgewotCQkJY29uc3QgdTggbGVuID0gZGNjcF9hY2twa3RzX2xlbihhcCwgaW5kZXgpOwotCQkJY29uc3QgdTggc3RhdGUgPSBkY2NwX2Fja3BrdHNfc3RhdGUoYXAsIGluZGV4KTsKLQkJCS8qCi0JCQkgKiB2YWxpZCBwYWNrZXRzIG5vdCB5ZXQgaW4gZGNjcGFwX2J1ZiBoYXZlIGEgcmVzZXJ2ZWQKLQkJCSAqIGVudHJ5LCB3aXRoIGEgbGVuIGVxdWFsIHRvIDAuCi0JCQkgKi8KLQkJCWlmIChzdGF0ZSA9PSBEQ0NQX0FDS1BLVFNfU1RBVEVfTk9UX1JFQ0VJVkVEICYmCi0JCQkgICAgbGVuID09IDAgJiYgZGVsdGEgPT0gMCkgeyAvKiBGb3VuZCBvdXIKLQkJCQkJCQkgcmVzZXJ2ZWQgc2VhdCEgKi8KLQkJCQlkY2NwX3ByX2RlYnVnKCJGb3VuZCAlbGx1IHJlc2VydmVkIHNlYXQhXG4iLAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhY2tubyk7Ci0JCQkJYXAtPmRjY3BhcF9idWZbaW5kZXhdID0gc3RhdGU7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQkvKiBsZW4gPT0gMCBtZWFucyBvbmUgcGFja2V0ICovCi0JCQlpZiAoZGVsdGEgPCBsZW4gKyAxKQotCQkJCWdvdG8gb3V0X2R1cGxpY2F0ZTsKLQotCQkJZGVsdGEgLT0gbGVuICsgMTsKLQkJCWlmICgrK2luZGV4ID09IGFwLT5kY2NwYXBfYnVmX2xlbikKLQkJCQlpbmRleCA9IDA7Ci0JCX0KLQl9Ci0KLQlhcC0+ZGNjcGFwX2J1Zl9hY2tubyA9IGFja25vOwotCWRjY3BfdGltZXN0YW1wKHNrLCAmYXAtPmRjY3BhcF90aW1lKTsKLW91dDoKLQlkY2NwX3ByX2RlYnVnKCIiKTsKLQlkY2NwX2Fja3BrdHNfcHJpbnQoYXApOwotCXJldHVybiAwOwotCi1vdXRfZHVwbGljYXRlOgotCS8qIER1cGxpY2F0ZSBwYWNrZXQgKi8KLQlkY2NwX3ByX2RlYnVnKCJSZWNlaXZlZCBhIGR1cCBvciBhbHJlYWR5IGNvbnNpZGVyZWQgbG9zdCAiCi0JCSAgICAgICJwYWNrZXQ6ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGFja25vKTsKLQlyZXR1cm4gLUVJTFNFUTsKLX0KLQotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi12b2lkIGRjY3BfYWNrdmVjdG9yX3ByaW50KGNvbnN0IHU2NCBhY2tubywgY29uc3QgdW5zaWduZWQgY2hhciAqdmVjdG9yLAotCQkJICBpbnQgbGVuKQotewotCWlmICghZGNjcF9kZWJ1ZykKLQkJcmV0dXJuOwotCi0JcHJpbnRrKCJBQ0sgdmVjdG9yIGxlbj0lZCwgYWNrbm89JWxsdSB8IiwgbGVuLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhY2tubyk7Ci0KLQl3aGlsZSAobGVuLS0pIHsKLQkJY29uc3QgdTggc3RhdGUgPSAoKnZlY3RvciAmIERDQ1BfQUNLUEtUU19TVEFURV9NQVNLKSA+PiA2OwotCQljb25zdCB1OCBybCA9ICgqdmVjdG9yICYgRENDUF9BQ0tQS1RTX0xFTl9NQVNLKTsKLQotCQlwcmludGsoIiVkLCVkfCIsIHN0YXRlLCBybCk7Ci0JCSsrdmVjdG9yOwotCX0KLQotCXByaW50aygiXG4iKTsKLX0KLQotdm9pZCBkY2NwX2Fja3BrdHNfcHJpbnQoY29uc3Qgc3RydWN0IGRjY3BfYWNrcGt0cyAqYXApCi17Ci0JZGNjcF9hY2t2ZWN0b3JfcHJpbnQoYXAtPmRjY3BhcF9idWZfYWNrbm8sCi0JCQkgICAgIGFwLT5kY2NwYXBfYnVmICsgYXAtPmRjY3BhcF9idWZfaGVhZCwKLQkJCSAgICAgYXAtPmRjY3BhcF9idWZfdmVjdG9yX2xlbik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgZGNjcF9hY2twa3RzX3Ryb3dfYXdheV9hY2tfcmVjb3JkKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwKQotewotCS8qCi0JICogQXMgd2UncmUga2VlcGluZyB0cmFjayBvZiB0aGUgYWNrIHZlY3RvciBzaXplCi0JICogKGRjY3BhcF9idWZfdmVjdG9yX2xlbikgYW5kIHRoZSBzZW50IGFjayB2ZWN0b3Igc2l6ZQotCSAqIChkY2NwYXBfYWNrX3ZlY3Rvcl9sZW4pIHdlIGRvbid0IG5lZWQgZGNjcGFwX2J1Zl90YWlsIGF0IGFsbCwgYnV0Ci0JICoga2VlcCB0aGlzIGNvZGUgaGVyZSBhcyBpbiB0aGUgZnV0dXJlIHdlJ2xsIGltcGxlbWVudCBhIHZlY3RvciBvZgotCSAqIGFjayByZWNvcmRzLCBhcyBzdWdnZXN0ZWQgaW4gZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0Ci0JICogQXBwZW5kaXggQS4gLWFjbWUKLQkgKi8KLSNpZiAwCi0JYXAtPmRjY3BhcF9idWZfdGFpbCA9IGFwLT5kY2NwYXBfYWNrX3B0ciArIDE7Ci0JaWYgKGFwLT5kY2NwYXBfYnVmX3RhaWwgPj0gYXAtPmRjY3BhcF9idWZfbGVuKQotCQlhcC0+ZGNjcGFwX2J1Zl90YWlsIC09IGFwLT5kY2NwYXBfYnVmX2xlbjsKLSNlbmRpZgotCWFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW4gLT0gYXAtPmRjY3BhcF9hY2tfdmVjdG9yX2xlbjsKLX0KLQotdm9pZCBkY2NwX2Fja3BrdHNfY2hlY2tfcmN2X2Fja25vKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJIHU2NCBhY2tubykKLXsKLQkvKiBDaGVjayBpZiB3ZSBhY3R1YWxseSBzZW50IGFuIEFDSyB2ZWN0b3IgKi8KLQlpZiAoYXAtPmRjY3BhcF9hY2tfc2Vxbm8gPT0gRENDUF9NQVhfU0VRTk8gKyAxKQotCQlyZXR1cm47Ci0KLQlpZiAoYWNrbm8gPT0gYXAtPmRjY3BhcF9hY2tfc2Vxbm8pIHsKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotCQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCQljb25zdCBjaGFyICpkZWJ1Z19wcmVmaXggPSBkcC0+ZGNjcHNfcm9sZSA9PSBEQ0NQX1JPTEVfQ0xJRU5UID8KLQkJCQkJIkNMSUVOVCByeCBhY2s6ICIgOiAic2VydmVyIHJ4IGFjazogIjsKLSNlbmRpZgotCQlkY2NwX3ByX2RlYnVnKCIlc0FDSyBwYWNrZXQgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgotCQkJICAgICAgImFja19hY2tubz0lbGx1LCBBQ0tFRCFcbiIsCi0JCQkgICAgICBkZWJ1Z19wcmVmaXgsIDEsCi0JCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhcC0+ZGNjcGFwX2Fja19zZXFubywKLQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFwLT5kY2NwYXBfYWNrX2Fja25vKTsKLQkJZGNjcF9hY2twa3RzX3Ryb3dfYXdheV9hY2tfcmVjb3JkKGFwKTsKLQkJYXAtPmRjY3BhcF9hY2tfc2Vxbm8gPSBEQ0NQX01BWF9TRVFOTyArIDE7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkY2NwX2Fja3BrdHNfY2hlY2tfcmN2X2Fja3ZlY3RvcihzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCwKLQkJCQkJICAgICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBhY2tubywKLQkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGxlbiwKLQkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZWN0b3IpCi17Ci0JdW5zaWduZWQgY2hhciBpOwotCi0JLyogQ2hlY2sgaWYgd2UgYWN0dWFsbHkgc2VudCBhbiBBQ0sgdmVjdG9yICovCi0JaWYgKGFwLT5kY2NwYXBfYWNrX3NlcW5vID09IERDQ1BfTUFYX1NFUU5PICsgMSkKLQkJcmV0dXJuOwotCS8qCi0JICogV2UncmUgaW4gdGhlIHJlY2VpdmVyIGhhbGYgY29ubmVjdGlvbiwgc28gaWYgdGhlIHJlY2VpdmVkIGFuIEFDSwotCSAqIHZlY3RvciBhY2tubyAoZS5nLiA1MCkgYmVmb3JlIGRjY3BhcF9hY2tfc2Vxbm8gKGUuZy4gNTIpLCB3ZSdyZQotCSAqIG5vdCBpbnRlcmVzdGVkLgotCSAqCi0JICogRXh0cmEgZXhwbGFuYXRpb24gd2l0aCBleGFtcGxlOgotCSAqIAotCSAqIGlmIHdlIHJlY2VpdmVkIGFuIEFDSyB2ZWN0b3Igd2l0aCBhY2tubyA1MCwgaXQgY2FuIG9ubHkgYmUgYWNraW5nCi0JICogNTAsIDQ5LCA0OCwgZXRjLCBub3QgNTIgKHRoZSBzZXFubyBmb3IgdGhlIEFDSyB2ZWN0b3Igd2Ugc2VudCkuCi0JICovCi0JLyogZGNjcF9wcl9kZWJ1ZygiaXMgJWxsdSA8ICVsbHU/ICIsIGFja25vLCBhcC0+ZGNjcGFwX2Fja19zZXFubyk7ICovCi0JaWYgKGJlZm9yZTQ4KGFja25vLCBhcC0+ZGNjcGFwX2Fja19zZXFubykpIHsKLQkJLyogZGNjcF9wcl9kZWJ1Z19jYXQoInllc1xuIik7ICovCi0JCXJldHVybjsKLQl9Ci0JLyogZGNjcF9wcl9kZWJ1Z19jYXQoIm5vXG4iKTsgKi8KLQotCWkgPSBsZW47Ci0Jd2hpbGUgKGktLSkgewotCQljb25zdCB1OCBybCA9ICgqdmVjdG9yICYgRENDUF9BQ0tQS1RTX0xFTl9NQVNLKTsKLQkJdTY0IGFja25vX2VuZF9ybDsKLQotCQlkY2NwX3NldF9zZXFubygmYWNrbm9fZW5kX3JsLCBhY2tubyAtIHJsKTsKLQotCQkvKgotCQkgKiBkY2NwX3ByX2RlYnVnKCJpcyAlbGx1IDw9ICVsbHUgPD0gJWxsdT8gIiwgYWNrbm9fZW5kX3JsLAotCQkgKiBhcC0+ZGNjcGFwX2Fja19zZXFubywgYWNrbm8pOwotCQkgKi8KLQkJaWYgKGJldHdlZW40OChhcC0+ZGNjcGFwX2Fja19zZXFubywgYWNrbm9fZW5kX3JsLCBhY2tubykpIHsKLQkJCWNvbnN0IHU4IHN0YXRlID0gKCp2ZWN0b3IgJgotCQkJCQkgIERDQ1BfQUNLUEtUU19TVEFURV9NQVNLKSA+PiA2OwotCQkJLyogZGNjcF9wcl9kZWJ1Z19jYXQoInllc1xuIik7ICovCi0KLQkJCWlmIChzdGF0ZSAhPSBEQ0NQX0FDS1BLVFNfU1RBVEVfTk9UX1JFQ0VJVkVEKSB7Ci0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLQkJCQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCQkJCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9Ci0JCQkJCWRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPwotCQkJCQkiQ0xJRU5UIHJ4IGFjazogIiA6ICJzZXJ2ZXIgcnggYWNrOiAiOwotI2VuZGlmCi0JCQkJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgdmVjdG9yIDAsIGxlbj0lZCwgIgotCQkJCQkgICAgICAiYWNrX3NlcW5vPSVsbHUsIGFja19hY2tubz0lbGx1LCAiCi0JCQkJCSAgICAgICJBQ0tFRCFcbiIsCi0JCQkJCSAgICAgIGRlYnVnX3ByZWZpeCwgbGVuLAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCQkgICAgICBhcC0+ZGNjcGFwX2Fja19zZXFubywKLQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkJICAgICAgYXAtPmRjY3BhcF9hY2tfYWNrbm8pOwotCQkJCWRjY3BfYWNrcGt0c190cm93X2F3YXlfYWNrX3JlY29yZChhcCk7Ci0JCQl9Ci0JCQkvKgotCQkJICogSWYgZGNjcGFwX2Fja19zZXFubyB3YXMgbm90IHJlY2VpdmVkLCBubyBwcm9ibGVtCi0JCQkgKiB3ZSdsbCBzZW5kIGFub3RoZXIgQUNLIHZlY3Rvci4KLQkJCSAqLwotCQkJYXAtPmRjY3BhcF9hY2tfc2Vxbm8gPSBEQ0NQX01BWF9TRVFOTyArIDE7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBkY2NwX3ByX2RlYnVnX2NhdCgibm9cbiIpOyAqLwotCi0JCWRjY3Bfc2V0X3NlcW5vKCZhY2tubywgYWNrbm9fZW5kX3JsIC0gMSk7Ci0JCSsrdmVjdG9yOwotCX0KLX0KZGlmZiAtLWdpdCBhL25ldC9kY2NwL291dHB1dC5jIGIvbmV0L2RjY3Avb3V0cHV0LmMKaW5kZXggZWE2ZDBlOS4uNDc4NmJkYyAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3V0cHV0LmMKKysrIGIvbmV0L2RjY3Avb3V0cHV0LmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKKyNpbmNsdWRlICJhY2t2ZWMuaCIKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgogCkBAIC04NSw3ICs4Niw3IEBACiAJCXN3aXRjaCAoZGNiLT5kY2NwZF90eXBlKSB7CiAJCWNhc2UgRENDUF9QS1RfUkVRVUVTVDoKIAkJCWRjY3BfaGRyX3JlcXVlc3Qoc2tiKS0+ZGNjcGhfcmVxX3NlcnZpY2UgPQotCQkJCQkJCWRjYi0+ZGNjcGRfc2VydmljZTsKKwkJCQkJCQlkcC0+ZGNjcHNfc2VydmljZTsKIAkJCWJyZWFrOwogCQljYXNlIERDQ1BfUEtUX1JFU0VUOgogCQkJZGNjcF9oZHJfcmVzZXQoc2tiKS0+ZGNjcGhfcmVzZXRfY29kZSA9CkBAIC0yMjUsNyArMjI2LDYgQEAKIAkJZXJyID0gZGNjcF93YWl0X2Zvcl9jY2lkKHNrLCBza2IsIHRpbWVvKTsKIAogCWlmIChlcnIgPT0gMCkgewotCQljb25zdCBzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCA9IGRwLT5kY2Nwc19oY19yeF9hY2twa3RzOwogCQlzdHJ1Y3QgZGNjcF9za2JfY2IgKmRjYiA9IERDQ1BfU0tCX0NCKHNrYik7CiAJCWNvbnN0IGludCBsZW4gPSBza2ItPmxlbjsKIApAQCAtMjM2LDE1ICsyMzYsNyBAQAogCQkJCQkJICBpbmV0X2NzayhzayktPmljc2tfcnRvLAogCQkJCQkJICBEQ0NQX1JUT19NQVgpOwogCQkJZGNiLT5kY2NwZF90eXBlID0gRENDUF9QS1RfREFUQUFDSzsKLQkJCS8qCi0JCQkgKiBGSVhNRTogd2UgcmVhbGx5IHNob3VsZCBoYXZlIGEKLQkJCSAqIGRjY3BzX2Fja19wZW5kaW5nIG9yIHVzZSBpY3NrLgotCQkJICovCi0JCX0gZWxzZSBpZiAoaW5ldF9jc2tfYWNrX3NjaGVkdWxlZChzaykgfHwKLQkJCSAgIGRwLT5kY2Nwc190aW1lc3RhbXBfZWNobyAhPSAwIHx8Ci0JCQkgICAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yICYmCi0JCQkgICAgYXAtPmRjY3BhcF9idWZfYWNrbm8gIT0gRENDUF9NQVhfU0VRTk8gKyAxICYmCi0JCQkgICAgYXAtPmRjY3BhcF9hY2tfc2Vxbm8gPT0gRENDUF9NQVhfU0VRTk8gKyAxKSkKKwkJfSBlbHNlIGlmIChkY2NwX2Fja19wZW5kaW5nKHNrKSkKIAkJCWRjYi0+ZGNjcGRfdHlwZSA9IERDQ1BfUEtUX0RBVEFBQ0s7CiAJCWVsc2UKIAkJCWRjYi0+ZGNjcGRfdHlwZSA9IERDQ1BfUEtUX0RBVEE7CkBAIC0yNzAsNiArMjYyLDcgQEAKIAkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7CiAJc3RydWN0IGRjY3BfaGRyICpkaDsKKwlzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKmRyZXE7CiAJY29uc3QgaW50IGRjY3BfaGVhZGVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSArCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkgKwogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcl9yZXNwb25zZSk7CkBAIC0yODUsOCArMjc4LDkgQEAKIAlza2ItPmRzdCA9IGRzdF9jbG9uZShkc3QpOwogCXNrYi0+Y3N1bSA9IDA7CiAKKwlkcmVxID0gZGNjcF9yc2socmVxKTsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID0gRENDUF9QS1RfUkVTUE9OU0U7Ci0JRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxICA9IGRjY3BfcnNrKHJlcSktPmRyZXFfaXNzOworCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSAgPSBkcmVxLT5kcmVxX2lzczsKIAlkY2NwX2luc2VydF9vcHRpb25zKHNrLCBza2IpOwogCiAJc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7CkBAIC0zMDAsOCArMjk0LDkgQEAKIAkJCSAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4pIC8gNDsKIAlkaC0+ZGNjcGhfdHlwZQk9IERDQ1BfUEtUX1JFU1BPTlNFOwogCWRoLT5kY2NwaF94CT0gMTsKLQlkY2NwX2hkcl9zZXRfc2VxKGRoLCBkY2NwX3JzayhyZXEpLT5kcmVxX2lzcyk7Ci0JZGNjcF9oZHJfc2V0X2FjayhkY2NwX2hkcl9hY2tfYml0cyhza2IpLCBkY2NwX3JzayhyZXEpLT5kcmVxX2lzcik7CisJZGNjcF9oZHJfc2V0X3NlcShkaCwgZHJlcS0+ZHJlcV9pc3MpOworCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwgZHJlcS0+ZHJlcV9pc3IpOworCWRjY3BfaGRyX3Jlc3BvbnNlKHNrYiktPmRjY3BoX3Jlc3Bfc2VydmljZSA9IGRyZXEtPmRyZXFfc2VydmljZTsKIAogCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY2hlY2tzdW0oc2tiLCBpbmV0X3JzayhyZXEpLT5sb2NfYWRkciwKIAkJCQkJICAgICAgaW5ldF9yc2socmVxKS0+cm10X2FkZHIpOwpAQCAtMzk3LDkgKzM5Miw2IEBACiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfRENDUF9IRUFERVIpOwogCiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9IERDQ1BfUEtUX1JFUVVFU1Q7Ci0JLyogRklYTUU6IHNldCBzZXJ2aWNlIHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLCBjb21pbmcKLQkgKiBmcm9tIHVzZXJzcGFjZSovCi0JRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VydmljZSA9IDA7CiAJc2tiLT5jc3VtID0gMDsKIAlza2Jfc2V0X293bmVyX3coc2tiLCBzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDE4YTBlNjkuLmExY2ZkMGUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtOTQsNyArOTQsMTUgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrKQogewotCWRjY3Bfc2soc2spLT5kY2Nwc19yb2xlID0gRENDUF9ST0xFX0xJU1RFTjsKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCisJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfTElTVEVOOworCS8qCisJICogQXBwcyBuZWVkIHRvIHVzZSBzZXRzb2Nrb3B0KERDQ1BfU09DS09QVF9TRVJWSUNFKQorCSAqIGJlZm9yZSBjYWxsaW5nIGxpc3RlbigpCisJICovCisJaWYgKGRjY3Bfc2VydmljZV9ub3RfaW5pdGlhbGl6ZWQoc2spKQorCQlyZXR1cm4gLUVQUk9UTzsKIAlyZXR1cm4gaW5ldF9jc2tfbGlzdGVuX3N0YXJ0KHNrLCBUQ1BfU1lOUV9IU0laRSk7CiB9CiAKQEAgLTIwMiw2ICsyMTAsNDIgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCitzdGF0aWMgaW50IGRjY3Bfc2V0c29ja29wdF9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTMyIHNlcnZpY2UsCisJCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBkY2NwX3NlcnZpY2VfbGlzdCAqc2wgPSBOVUxMOworCisJaWYgKHNlcnZpY2UgPT0gRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUgfHwgCisJICAgIG9wdGxlbiA+IERDQ1BfU0VSVklDRV9MSVNUX01BWF9MRU4gKiBzaXplb2YodTMyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3B0bGVuID4gc2l6ZW9mKHNlcnZpY2UpKSB7CisJCXNsID0ga21hbGxvYyhvcHRsZW4sIEdGUF9LRVJORUwpOworCQlpZiAoc2wgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNsLT5kY2Nwc2xfbnIgPSBvcHRsZW4gLyBzaXplb2YodTMyKSAtIDE7CisJCWlmIChjb3B5X2Zyb21fdXNlcihzbC0+ZGNjcHNsX2xpc3QsCisJCQkJICAgb3B0dmFsICsgc2l6ZW9mKHNlcnZpY2UpLAorCQkJCSAgIG9wdGxlbiAtIHNpemVvZihzZXJ2aWNlKSkgfHwKKwkJICAgIGRjY3BfbGlzdF9oYXNfc2VydmljZShzbCwgRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUpKSB7CisJCQlrZnJlZShzbCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCWxvY2tfc29jayhzayk7CisJZHAtPmRjY3BzX3NlcnZpY2UgPSBzZXJ2aWNlOworCisJaWYgKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QgIT0gTlVMTCkKKwkJa2ZyZWUoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCk7CisKKwlkcC0+ZGNjcHNfc2VydmljZV9saXN0ID0gc2w7CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGRjY3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewpAQCAtMjE4LDggKzI2MiwxMCBAQAogCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopb3B0dmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlsb2NrX3NvY2soc2spOworCWlmIChvcHRuYW1lID09IERDQ1BfU09DS09QVF9TRVJWSUNFKQorCQlyZXR1cm4gZGNjcF9zZXRzb2Nrb3B0X3NlcnZpY2Uoc2ssIHZhbCwgb3B0dmFsLCBvcHRsZW4pOwogCisJbG9ja19zb2NrKHNrKTsKIAlkcCA9IGRjY3Bfc2soc2spOwogCWVyciA9IDA7CiAKQEAgLTIzNiw2ICsyODIsMzcgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGRjY3BfZ2V0c29ja29wdF9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKKwkJCQkgICB1MzIgX191c2VyICpvcHR2YWwsCisJCQkJICAgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWNvbnN0IHN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJY29uc3Qgc3RydWN0IGRjY3Bfc2VydmljZV9saXN0ICpzbDsKKwlpbnQgZXJyID0gLUVOT0VOVCwgc2xlbiA9IDAsIHRvdGFsX2xlbiA9IHNpemVvZih1MzIpOworCisJbG9ja19zb2NrKHNrKTsKKwlpZiAoZGNjcF9zZXJ2aWNlX25vdF9pbml0aWFsaXplZChzaykpCisJCWdvdG8gb3V0OworCisJaWYgKChzbCA9IGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QpICE9IE5VTEwpIHsKKwkJc2xlbiA9IHNsLT5kY2Nwc2xfbnIgKiBzaXplb2YodTMyKTsKKwkJdG90YWxfbGVuICs9IHNsZW47CisJfQorCisJZXJyID0gLUVJTlZBTDsKKwlpZiAodG90YWxfbGVuID4gbGVuKQorCQlnb3RvIG91dDsKKworCWVyciA9IDA7CisJaWYgKHB1dF91c2VyKHRvdGFsX2xlbiwgb3B0bGVuKSB8fAorCSAgICBwdXRfdXNlcihkcC0+ZGNjcHNfc2VydmljZSwgb3B0dmFsKSB8fAorCSAgICAoc2wgIT0gTlVMTCAmJiBjb3B5X3RvX3VzZXIob3B0dmFsICsgMSwgc2wtPmRjY3BzbF9saXN0LCBzbGVuKSkpCisJCWVyciA9IC1FRkFVTFQ7CitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgZGNjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKQEAgLTI0OCw4ICszMjUsNyBAQAogCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTsKLQlpZiAobGVuIDwgMCkKKwlpZiAobGVuIDwgc2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTI1Nyw3ICszMzMsMTcgQEAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIERDQ1BfU09DS09QVF9QQUNLRVRfU0laRToKIAkJdmFsID0gZHAtPmRjY3BzX3BhY2tldF9zaXplOworCQlsZW4gPSBzaXplb2YoZHAtPmRjY3BzX3BhY2tldF9zaXplKTsKIAkJYnJlYWs7CisJY2FzZSBEQ0NQX1NPQ0tPUFRfU0VSVklDRToKKwkJcmV0dXJuIGRjY3BfZ2V0c29ja29wdF9zZXJ2aWNlKHNrLCBsZW4sCisJCQkJCSAgICAgICAodTMyIF9fdXNlciAqKW9wdHZhbCwgb3B0bGVuKTsKKwljYXNlIDEyOCAuLi4gMTkxOgorCQlyZXR1cm4gY2NpZF9oY19yeF9nZXRzb2Nrb3B0KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgb3B0bmFtZSwKKwkJCQkJICAgICBsZW4sICh1MzIgX191c2VyICopb3B0dmFsLCBvcHRsZW4pOworCWNhc2UgMTkyIC4uLiAyNTU6CisJCXJldHVybiBjY2lkX2hjX3R4X2dldHNvY2tvcHQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBvcHRuYW1lLAorCQkJCQkgICAgIGxlbiwgKHUzMiBfX3VzZXIgKilvcHR2YWwsIG9wdGxlbik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCAxYjYzYjQ4Li41MGMwNTE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40MDMiCisjZGVmaW5lIFZFUlNJT04gIjAuNDA0IgogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTIyNCw3ICsyMjQsNyBAQAogICBDb25zaWRlciBhIG5vZGUgJ24nIGFuZCBpdHMgcGFyZW50ICd0cCcuCiAKICAgSWYgbiBpcyBhIGxlYWYsIGV2ZXJ5IGJpdCBpbiBpdHMga2V5IGlzIHNpZ25pZmljYW50LiBJdHMgcHJlc2VuY2UgaXMgCi0gIG5lY2Vzc2l0YWRlZCBieSBwYXRoIGNvbXByZXNzaW9uLCBzaW5jZSBkdXJpbmcgYSB0cmVlIHRyYXZlcnNhbCAod2hlbiAKKyAgbmVjZXNzaXRhdGVkIGJ5IHBhdGggY29tcHJlc3Npb24sIHNpbmNlIGR1cmluZyBhIHRyZWUgdHJhdmVyc2FsICh3aGVuIAogICBzZWFyY2hpbmcgZm9yIGEgbGVhZiAtIHVubGVzcyB3ZSBhcmUgZG9pbmcgYW4gaW5zZXJ0aW9uKSB3ZSB3aWxsIGNvbXBsZXRlbHkgCiAgIGlnbm9yZSBhbGwgc2tpcHBlZCBiaXRzIHdlIGVuY291bnRlci4gVGh1cyB3ZSBuZWVkIHRvIHZlcmlmeSwgYXQgdGhlIGVuZCBvZiAKICAgYSBwb3RlbnRpYWxseSBzdWNjZXNzZnVsIHNlYXJjaCwgdGhhdCB3ZSBoYXZlIGluZGVlZCBiZWVuIHdhbGtpbmcgdGhlIApAQCAtODM2LDExICs4MzYsMTIgQEAKICNlbmRpZgogfQogCi0vKiByZWFkc2lkZSBtb3N0IHVzZSByY3VfcmVhZF9sb2NrIGN1cnJlbnRseSBkdW1wIHJvdXRpbmVzCisvKiByZWFkc2lkZSBtdXN0IHVzZSByY3VfcmVhZF9sb2NrIGN1cnJlbnRseSBkdW1wIHJvdXRpbmVzCiAgdmlhIGdldF9mYV9oZWFkIGFuZCBkdW1wICovCiAKLXN0YXRpYyBzdHJ1Y3QgbGVhZl9pbmZvICpmaW5kX2xlYWZfaW5mbyhzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgaW50IHBsZW4pCitzdGF0aWMgc3RydWN0IGxlYWZfaW5mbyAqZmluZF9sZWFmX2luZm8oc3RydWN0IGxlYWYgKmwsIGludCBwbGVuKQogeworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmwtPmxpc3Q7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGxlYWZfaW5mbyAqbGk7CiAKQEAgLTg1Myw3ICs4NTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKiBnZXRfZmFfaGVhZChzdHJ1Y3QgbGVhZiAqbCwgaW50IHBsZW4pCiB7Ci0Jc3RydWN0IGxlYWZfaW5mbyAqbGkgPSBmaW5kX2xlYWZfaW5mbygmbC0+bGlzdCwgcGxlbik7CisJc3RydWN0IGxlYWZfaW5mbyAqbGkgPSBmaW5kX2xlYWZfaW5mbyhsLCBwbGVuKTsKIAogCWlmICghbGkpCiAJCXJldHVybiBOVUxMOwpAQCAtMTA4NSw3ICsxMDg2LDcgQEAKIAl9CiAKIAlpZiAodHAgJiYgdHAtPnBvcyArIHRwLT5iaXRzID4gMzIpCi0JCXByaW50aygiRVJST1IgdHA9JXAgcG9zPSVkLCBiaXRzPSVkLCBrZXk9JTB4IHBsZW49JWRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImZpYl90cmllIHRwPSVwIHBvcz0lZCwgYml0cz0lZCwga2V5PSUweCBwbGVuPSVkXG4iLAogCQkgICAgICAgdHAsIHRwLT5wb3MsIHRwLT5iaXRzLCBrZXksIHBsZW4pOwogCiAJLyogUmViYWxhbmNlIHRoZSB0cmllICovCkBAIC0xMjQ4LDcgKzEyNDksNyBAQAogfQogCiAKLS8qIHNob3VsZCBiZSBjbGFsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqLworLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2xlYWYoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBsZWFmICpsLAogCQkJICAgICB0X2tleSBrZXksIGludCAqcGxlbiwgY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsCiAJCQkgICAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpCkBAIC0xNTkwLDcgKzE1OTEsNyBAQAogCXJ0bXNnX2ZpYihSVE1fREVMUk9VVEUsIGh0b25sKGtleSksIGZhLCBwbGVuLCB0Yi0+dGJfaWQsIG5saGRyLCByZXEpOwogCiAJbCA9IGZpYl9maW5kX25vZGUodCwga2V5KTsKLQlsaSA9IGZpbmRfbGVhZl9pbmZvKCZsLT5saXN0LCBwbGVuKTsKKwlsaSA9IGZpbmRfbGVhZl9pbmZvKGwsIHBsZW4pOwogCiAJbGlzdF9kZWxfcmN1KCZmYS0+ZmFfbGlzdCk7CiAKQEAgLTE3MTQsNyArMTcxNSw2IEBACiAKIAl0LT5yZXZpc2lvbisrOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaCA9IDA7IChsID0gbmV4dGxlYWYodCwgbCkpICE9IE5VTEw7IGgrKykgewogCQlmb3VuZCArPSB0cmllX2ZsdXNoX2xlYWYodCwgbCk7CiAKQEAgLTE3MjIsNyArMTcyMiw2IEBACiAJCQl0cmllX2xlYWZfcmVtb3ZlKHQsIGxsLT5rZXkpOwogCQlsbCA9IGw7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOyAgCiAKIAlpZiAobGwgJiYgaGxpc3RfZW1wdHkoJmxsLT5saXN0KSkKIAkJdHJpZV9sZWFmX3JlbW92ZSh0LCBsbC0+a2V5KTsKQEAgLTE4MzMsMTYgKzE4MzIsNyBAQAogCQkJaSsrOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGZhLT5mYV9pbmZvLT5maWJfbmggPT0gTlVMTCkgewotCQkJcHJpbnRrKCJUcmllIGVycm9yIF9maWJfbmg9TlVMTCBpbiBmYVslZF0gaz0lMDh4IHBsZW49JWRcbiIsIGksIGtleSwgcGxlbik7Ci0JCQlpKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoZmEtPmZhX2luZm8gPT0gTlVMTCkgewotCQkJcHJpbnRrKCJUcmllIGVycm9yIGZhX2luZm89TlVMTCBpbiBmYVslZF0gaz0lMDh4IHBsZW49JWRcbiIsIGksIGtleSwgcGxlbik7Ci0JCQlpKys7Ci0JCQljb250aW51ZTsKLQkJfQorCQlCVUdfT04oIWZhLT5mYV9pbmZvKTsKIAogCQlpZiAoZmliX2R1bXBfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCSAgY2ItPm5saC0+bmxtc2dfc2VxLApAQCAtMTk2NSw3ICsxOTU1LDcgQEAKIAkJdHJpZV9tYWluID0gdDsKIAogCWlmIChpZCA9PSBSVF9UQUJMRV9MT0NBTCkKLQkJcHJpbnRrKCJJUHY0IEZJQjogVXNpbmcgTEMtdHJpZSB2ZXJzaW9uICVzXG4iLCBWRVJTSU9OKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSVB2NCBGSUI6IFVzaW5nIExDLXRyaWUgdmVyc2lvbiAlc1xuIiwgVkVSU0lPTik7CiAKIAlyZXR1cm4gdGI7CiB9CkBAIC0yMDI5LDcgKzIwMTksNyBAQAogCQlpdGVyLT50bm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKIAkJaXRlci0+dHJpZSA9IHQ7CiAJCWl0ZXItPmluZGV4ID0gMDsKLQkJaXRlci0+ZGVwdGggPSAwOworCQlpdGVyLT5kZXB0aCA9IDE7CiAJCXJldHVybiBuOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTIyNzQsMTEgKzIyNjQsMTIgQEAKIAkJCQlzZXFfcHV0cyhzZXEsICI8bG9jYWw+OlxuIik7CiAJCQllbHNlCiAJCQkJc2VxX3B1dHMoc2VxLCAiPG1haW4+OlxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlzZXFfaW5kZW50KHNlcSwgaXRlci0+ZGVwdGgtMSk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIiAgKy0tICVkLiVkLiVkLiVkLyVkXG4iLAotCQkJCSAgIE5JUFFVQUQocHJmKSwgdG4tPnBvcyk7Ci0JCX0KKwkJfSAKKwkJc2VxX2luZGVudChzZXEsIGl0ZXItPmRlcHRoLTEpOworCQlzZXFfcHJpbnRmKHNlcSwgIiAgKy0tICVkLiVkLiVkLiVkLyVkICVkICVkICVkXG4iLAorCQkJICAgTklQUVVBRChwcmYpLCB0bi0+cG9zLCB0bi0+Yml0cywgdG4tPmZ1bGxfY2hpbGRyZW4sIAorCQkJICAgdG4tPmVtcHR5X2NoaWxkcmVuKTsKKwkJCiAJfSBlbHNlIHsKIAkJc3RydWN0IGxlYWYgKmwgPSAoc3RydWN0IGxlYWYgKikgbjsKIAkJaW50IGk7CkBAIC0yMjg3LDcgKzIyNzgsNyBAQAogCQlzZXFfaW5kZW50KHNlcSwgaXRlci0+ZGVwdGgpOwogCQlzZXFfcHJpbnRmKHNlcSwgIiAgfC0tICVkLiVkLiVkLiVkXG4iLCBOSVBRVUFEKHZhbCkpOwogCQlmb3IgKGkgPSAzMjsgaSA+PSAwOyBpLS0pIHsKLQkJCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gZmluZF9sZWFmX2luZm8oJmwtPmxpc3QsIGkpOworCQkJc3RydWN0IGxlYWZfaW5mbyAqbGkgPSBmaW5kX2xlYWZfaW5mbyhsLCBpKTsKIAkJCWlmIChsaSkgewogCQkJCXN0cnVjdCBmaWJfYWxpYXMgKmZhOwogCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGZhLCAmbGktPmZhbGgsIGZhX2xpc3QpIHsKQEAgLTIzODMsNyArMjM3NCw3IEBACiAJCXJldHVybiAwOwogCiAJZm9yIChpPTMyOyBpPj0wOyBpLS0pIHsKLQkJc3RydWN0IGxlYWZfaW5mbyAqbGkgPSBmaW5kX2xlYWZfaW5mbygmbC0+bGlzdCwgaSk7CisJCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gZmluZF9sZWFmX2luZm8obCwgaSk7CiAJCXN0cnVjdCBmaWJfYWxpYXMgKmZhOwogCQl1MzIgbWFzaywgcHJlZml4OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggNDQ2MDdmNC4uNzBjNDRlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKIAl9CiAJcG1jLT5zb3VyY2VzID0gTlVMTDsKIAlwbWMtPnNmbW9kZSA9IE1DQVNUX0VYQ0xVREU7Ci0JcG1jLT5zZmNvdW50W01DQVNUX0VYQ0xVREVdID0gMDsKKwlwbWMtPnNmY291bnRbTUNBU1RfSU5DTFVERV0gPSAwOwogCXBtYy0+c2Zjb3VudFtNQ0FTVF9FWENMVURFXSA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMKaW5kZXggZTExOTUyZS4uZjgyOGZhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMKQEAgLTE5Niw2ICsxOTYsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZpcF92c19jb25uX3RhYltoYXNoXSwgY19saXN0KSB7CiAJCWlmIChzX2FkZHI9PWNwLT5jYWRkciAmJiBzX3BvcnQ9PWNwLT5jcG9ydCAmJgogCQkgICAgZF9wb3J0PT1jcC0+dnBvcnQgJiYgZF9hZGRyPT1jcC0+dmFkZHIgJiYKKwkJICAgICgoIXNfcG9ydCkgXiAoIShjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSkgJiYKIAkJICAgIHByb3RvY29sPT1jcC0+cHJvdG9jb2wpIHsKIAkJCS8qIEhJVCAqLwogCQkJYXRvbWljX2luYygmY3AtPnJlZmNudCk7CkBAIC0yMjcsNiArMjI4LDQwIEBACiAJcmV0dXJuIGNwOwogfQogCisvKiBHZXQgcmVmZXJlbmNlIHRvIGNvbm5lY3Rpb24gdGVtcGxhdGUgKi8KK3N0cnVjdCBpcF92c19jb25uICppcF92c19jdF9pbl9nZXQKKyhpbnQgcHJvdG9jb2wsIF9fdTMyIHNfYWRkciwgX191MTYgc19wb3J0LCBfX3UzMiBkX2FkZHIsIF9fdTE2IGRfcG9ydCkKK3sKKwl1bnNpZ25lZCBoYXNoOworCXN0cnVjdCBpcF92c19jb25uICpjcDsKKworCWhhc2ggPSBpcF92c19jb25uX2hhc2hrZXkocHJvdG9jb2wsIHNfYWRkciwgc19wb3J0KTsKKworCWN0X3JlYWRfbG9jayhoYXNoKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZpcF92c19jb25uX3RhYltoYXNoXSwgY19saXN0KSB7CisJCWlmIChzX2FkZHI9PWNwLT5jYWRkciAmJiBzX3BvcnQ9PWNwLT5jcG9ydCAmJgorCQkgICAgZF9wb3J0PT1jcC0+dnBvcnQgJiYgZF9hZGRyPT1jcC0+dmFkZHIgJiYKKwkJICAgIGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9URU1QTEFURSAmJgorCQkgICAgcHJvdG9jb2w9PWNwLT5wcm90b2NvbCkgeworCQkJLyogSElUICovCisJCQlhdG9taWNfaW5jKCZjcC0+cmVmY250KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWNwID0gTlVMTDsKKworICBvdXQ6CisJY3RfcmVhZF91bmxvY2soaGFzaCk7CisKKwlJUF9WU19EQkcoNywgInRlbXBsYXRlIGxvb2t1cC9pbiAlcyAldS4ldS4ldS4ldTolZC0+JXUuJXUuJXUuJXU6JWQgJXNcbiIsCisJCSAgaXBfdnNfcHJvdG9fbmFtZShwcm90b2NvbCksCisJCSAgTklQUVVBRChzX2FkZHIpLCBudG9ocyhzX3BvcnQpLAorCQkgIE5JUFFVQUQoZF9hZGRyKSwgbnRvaHMoZF9wb3J0KSwKKwkJICBjcD8iaGl0Ijoibm90IGhpdCIpOworCisJcmV0dXJuIGNwOworfQogCiAvKgogICogIEdldHMgaXBfdnNfY29ubiBhc3NvY2lhdGVkIHdpdGggc3VwcGxpZWQgcGFyYW1ldGVycyBpbiB0aGUgaXBfdnNfY29ubl90YWIuCkBAIC0zNjcsNyArNDAyLDcgQEAKIAkJICBhdG9taWNfcmVhZCgmZGVzdC0+cmVmY250KSk7CiAKIAkvKiBVcGRhdGUgdGhlIGNvbm5lY3Rpb24gY291bnRlcnMgKi8KLQlpZiAoY3AtPmNwb3J0IHx8IChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7CisJaWYgKCEoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkgewogCQkvKiBJdCBpcyBhIG5vcm1hbCBjb25uZWN0aW9uLCBzbyBpbmNyZWFzZSB0aGUgaW5hY3RpdmUKIAkJICAgY29ubmVjdGlvbiBjb3VudGVyIGJlY2F1c2UgaXQgaXMgaW4gVENQIFNZTlJFQ1YKIAkJICAgc3RhdGUgKGluYWN0aXZlKSBvciBvdGhlciBwcm90b2NvbCBpbmFjaXZlIHN0YXRlICovCkBAIC00MDYsNyArNDQxLDcgQEAKIAkJICBhdG9taWNfcmVhZCgmZGVzdC0+cmVmY250KSk7CiAKIAkvKiBVcGRhdGUgdGhlIGNvbm5lY3Rpb24gY291bnRlcnMgKi8KLQlpZiAoY3AtPmNwb3J0IHx8IChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7CisJaWYgKCEoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkgewogCQkvKiBJdCBpcyBhIG5vcm1hbCBjb25uZWN0aW9uLCBzbyBkZWNyZWFzZSB0aGUgaW5hY3Rjb25ucwogCQkgICBvciBhY3RpdmVjb25ucyBjb3VudGVyICovCiAJCWlmIChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpIHsKQEAgLTQ2Nyw3ICs1MDIsNyBAQAogCQkvKgogCQkgKiBJbnZhbGlkYXRlIHRoZSBjb25uZWN0aW9uIHRlbXBsYXRlCiAJCSAqLwotCQlpZiAoY3QtPmNwb3J0KSB7CisJCWlmIChjdC0+dnBvcnQgIT0gNjU1MzUpIHsKIAkJCWlmIChpcF92c19jb25uX3VuaGFzaChjdCkpIHsKIAkJCQljdC0+ZHBvcnQgPSA2NTUzNTsKIAkJCQljdC0+dnBvcnQgPSA2NTUzNTsKQEAgLTc3Niw3ICs4MTEsNyBAQAogCQljdF93cml0ZV9sb2NrX2JoKGhhc2gpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZpcF92c19jb25uX3RhYltoYXNoXSwgY19saXN0KSB7Ci0JCQlpZiAoIWNwLT5jcG9ydCAmJiAhKGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpCisJCQlpZiAoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKQogCQkJCS8qIGNvbm5lY3Rpb24gdGVtcGxhdGUgKi8KIAkJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCAzYWM3ZWVjLi45ODFjYzMyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMjQzLDEwICsyNDMsMTAgQEAKIAlpZiAocG9ydHNbMV0gPT0gc3ZjLT5wb3J0KSB7CiAJCS8qIENoZWNrIGlmIGEgdGVtcGxhdGUgYWxyZWFkeSBleGlzdHMgKi8KIAkJaWYgKHN2Yy0+cG9ydCAhPSBGVFBQT1JUKQotCQkJY3QgPSBpcF92c19jb25uX2luX2dldChpcGgtPnByb3RvY29sLCBzbmV0LCAwLAorCQkJY3QgPSBpcF92c19jdF9pbl9nZXQoaXBoLT5wcm90b2NvbCwgc25ldCwgMCwKIAkJCQkJICAgICAgIGlwaC0+ZGFkZHIsIHBvcnRzWzFdKTsKIAkJZWxzZQotCQkJY3QgPSBpcF92c19jb25uX2luX2dldChpcGgtPnByb3RvY29sLCBzbmV0LCAwLAorCQkJY3QgPSBpcF92c19jdF9pbl9nZXQoaXBoLT5wcm90b2NvbCwgc25ldCwgMCwKIAkJCQkJICAgICAgIGlwaC0+ZGFkZHIsIDApOwogCiAJCWlmICghY3QgfHwgIWlwX3ZzX2NoZWNrX3RlbXBsYXRlKGN0KSkgewpAQCAtMjcyLDE0ICsyNzIsMTQgQEAKIAkJCQkJCSAgICBpcGgtPmRhZGRyLAogCQkJCQkJICAgIHBvcnRzWzFdLAogCQkJCQkJICAgIGRlc3QtPmFkZHIsIGRlc3QtPnBvcnQsCi0JCQkJCQkgICAgMCwKKwkJCQkJCSAgICBJUF9WU19DT05OX0ZfVEVNUExBVEUsCiAJCQkJCQkgICAgZGVzdCk7CiAJCQllbHNlCiAJCQkJY3QgPSBpcF92c19jb25uX25ldyhpcGgtPnByb3RvY29sLAogCQkJCQkJICAgIHNuZXQsIDAsCiAJCQkJCQkgICAgaXBoLT5kYWRkciwgMCwKIAkJCQkJCSAgICBkZXN0LT5hZGRyLCAwLAotCQkJCQkJICAgIDAsCisJCQkJCQkgICAgSVBfVlNfQ09OTl9GX1RFTVBMQVRFLAogCQkJCQkJICAgIGRlc3QpOwogCQkJaWYgKGN0ID09IE5VTEwpCiAJCQkJcmV0dXJuIE5VTEw7CkBAIC0yOTgsMTAgKzI5OCwxMCBAQAogCQkgKiBwb3J0IHplcm8gdGVtcGxhdGU6IDxwcm90b2NvbCxjYWRkciwwLHZhZGRyLDAsZGFkZHIsMD4KIAkJICovCiAJCWlmIChzdmMtPmZ3bWFyaykKLQkJCWN0ID0gaXBfdnNfY29ubl9pbl9nZXQoSVBQUk9UT19JUCwgc25ldCwgMCwKKwkJCWN0ID0gaXBfdnNfY3RfaW5fZ2V0KElQUFJPVE9fSVAsIHNuZXQsIDAsCiAJCQkJCSAgICAgICBodG9ubChzdmMtPmZ3bWFyayksIDApOwogCQllbHNlCi0JCQljdCA9IGlwX3ZzX2Nvbm5faW5fZ2V0KGlwaC0+cHJvdG9jb2wsIHNuZXQsIDAsCisJCQljdCA9IGlwX3ZzX2N0X2luX2dldChpcGgtPnByb3RvY29sLCBzbmV0LCAwLAogCQkJCQkgICAgICAgaXBoLT5kYWRkciwgMCk7CiAKIAkJaWYgKCFjdCB8fCAhaXBfdnNfY2hlY2tfdGVtcGxhdGUoY3QpKSB7CkBAIC0zMjYsMTQgKzMyNiwxNCBAQAogCQkJCQkJICAgIHNuZXQsIDAsCiAJCQkJCQkgICAgaHRvbmwoc3ZjLT5md21hcmspLCAwLAogCQkJCQkJICAgIGRlc3QtPmFkZHIsIDAsCi0JCQkJCQkgICAgMCwKKwkJCQkJCSAgICBJUF9WU19DT05OX0ZfVEVNUExBVEUsCiAJCQkJCQkgICAgZGVzdCk7CiAJCQllbHNlCiAJCQkJY3QgPSBpcF92c19jb25uX25ldyhpcGgtPnByb3RvY29sLAogCQkJCQkJICAgIHNuZXQsIDAsCiAJCQkJCQkgICAgaXBoLT5kYWRkciwgMCwKIAkJCQkJCSAgICBkZXN0LT5hZGRyLCAwLAotCQkJCQkJICAgIDAsCisJCQkJCQkgICAgSVBfVlNfQ09OTl9GX1RFTVBMQVRFLAogCQkJCQkJICAgIGRlc3QpOwogCQkJaWYgKGN0ID09IE5VTEwpCiAJCQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IDU3NGQxZjUuLjJlNWNlZDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jCkBAIC0yOTcsMTYgKzI5NywyNCBAQAogCiAJcCA9IChjaGFyICopYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2cpOwogCWZvciAoaT0wOyBpPG0tPm5yX2Nvbm5zOyBpKyspIHsKKwkJdW5zaWduZWQgZmxhZ3M7CisKIAkJcyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uICopcDsKLQkJY3AgPSBpcF92c19jb25uX2luX2dldChzLT5wcm90b2NvbCwKLQkJCQkgICAgICAgcy0+Y2FkZHIsIHMtPmNwb3J0LAotCQkJCSAgICAgICBzLT52YWRkciwgcy0+dnBvcnQpOworCQlmbGFncyA9IG50b2hzKHMtPmZsYWdzKTsKKwkJaWYgKCEoZmxhZ3MgJiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKQorCQkJY3AgPSBpcF92c19jb25uX2luX2dldChzLT5wcm90b2NvbCwKKwkJCQkJICAgICAgIHMtPmNhZGRyLCBzLT5jcG9ydCwKKwkJCQkJICAgICAgIHMtPnZhZGRyLCBzLT52cG9ydCk7CisJCWVsc2UKKwkJCWNwID0gaXBfdnNfY3RfaW5fZ2V0KHMtPnByb3RvY29sLAorCQkJCQkgICAgICAgcy0+Y2FkZHIsIHMtPmNwb3J0LAorCQkJCQkgICAgICAgcy0+dmFkZHIsIHMtPnZwb3J0KTsKIAkJaWYgKCFjcCkgewogCQkJY3AgPSBpcF92c19jb25uX25ldyhzLT5wcm90b2NvbCwKIAkJCQkJICAgIHMtPmNhZGRyLCBzLT5jcG9ydCwKIAkJCQkJICAgIHMtPnZhZGRyLCBzLT52cG9ydCwKIAkJCQkJICAgIHMtPmRhZGRyLCBzLT5kcG9ydCwKLQkJCQkJICAgIG50b2hzKHMtPmZsYWdzKSwgTlVMTCk7CisJCQkJCSAgICBmbGFncywgTlVMTCk7CiAJCQlpZiAoIWNwKSB7CiAJCQkJSVBfVlNfRVJSKCJpcF92c19jb25uX25ldyBmYWlsZWRcbiIpOwogCQkJCXJldHVybjsKQEAgLTMxNSwxMSArMzIzLDExIEBACiAJCX0gZWxzZSBpZiAoIWNwLT5kZXN0KSB7CiAJCQkvKiBpdCBpcyBhbiBlbnRyeSBjcmVhdGVkIGJ5IHRoZSBzeW5jaHJvbml6YXRpb24gKi8KIAkJCWNwLT5zdGF0ZSA9IG50b2hzKHMtPnN0YXRlKTsKLQkJCWNwLT5mbGFncyA9IG50b2hzKHMtPmZsYWdzKSB8IElQX1ZTX0NPTk5fRl9IQVNIRUQ7CisJCQljcC0+ZmxhZ3MgPSBmbGFncyB8IElQX1ZTX0NPTk5fRl9IQVNIRUQ7CiAJCX0JLyogTm90ZSB0aGF0IHdlIGRvbid0IHRvdWNoIGl0cyBzdGF0ZSBhbmQgZmxhZ3MKIAkJCSAgIGlmIGl0IGlzIGEgbm9ybWFsIGVudHJ5LiAqLwogCi0JCWlmIChudG9ocyhzLT5mbGFncykgJiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKKwkJaWYgKGZsYWdzICYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiAJCQlvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopJnNbMV07CiAJCQltZW1jcHkoJmNwLT5pbl9zZXEsIG9wdCwgc2l6ZW9mKCpvcHQpKTsKIAkJCXAgKz0gRlVMTF9DT05OX1NJWkU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDMwYWE4ZTIuLjNjZjliNDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCkBAIC01MSw2ICs1MSwxNCBAQAogCSAgCiAJICBJRiB1bnN1cmUsIHNheSBgTicuCiAKK2NvbmZpZyBJUF9ORl9DT05OVFJBQ0tfTkVUTElOSworCXRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJworCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLICYmIE5FVEZJTFRFUl9ORVRMSU5LCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0shPXkgfHwgTkVURklMVEVSX05FVExJTkshPW0KKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlCisKKwogY29uZmlnIElQX05GX0NUX1BST1RPX1NDVFAKIAl0cmlzdGF0ZSAgJ1NDVFAgcHJvdG9jb2wgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpJwogCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLICYmIEVYUEVSSU1FTlRBTApAQCAtMTI5LDYgKzEzNywyMiBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIElQX05GX1BQVFAKKwl0cmlzdGF0ZSAgJ1BQVFAgcHJvdG9jb2wgc3VwcG9ydCcKKwloZWxwCisJICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBQVFAgKFBvaW50IHRvIFBvaW50IFR1bm5lbGxpbmcKKwkgIFByb3RvY29sLCBSRkMyNjM3KSBjb25uY2VjdGlvbiB0cmFja2luZyBhbmQgTkFULiAKKwkKKwkgIElmIHlvdSBhcmUgcnVubmluZyBQUFRQIHNlc3Npb25zIG92ZXIgYSBzdGF0ZWZ1bCBmaXJld2FsbCBvciBOQVQKKwkgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuICAKKwkKKwkgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC4KKwkgIEZvciBtb3JlIGluZm8sIHJlYWQgdG9wIG9mIHRoZSBmaWxlCisJICBuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3BwdHAuYworCQorCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAorCSAgRG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dC4gIElmIHVuc3VyZSwgc2F5IGBOJy4KKwogY29uZmlnIElQX05GX1FVRVVFCiAJdHJpc3RhdGUgIklQIFVzZXJzcGFjZSBxdWV1ZWluZyB2aWEgTkVUTElOSyAoT0JTT0xFVEUpIgogCWhlbHAKQEAgLTYxMyw2ICs2MzcsMTIgQEAKIAlkZWZhdWx0IElQX05GX05BVCBpZiBJUF9ORl9BTUFOREE9eQogCWRlZmF1bHQgbSBpZiBJUF9ORl9BTUFOREE9bQogCitjb25maWcgSVBfTkZfTkFUX1BQVFAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gSVBfTkZfTkFUIT1uICYmIElQX05GX1BQVFAhPW4KKwlkZWZhdWx0IElQX05GX05BVCBpZiBJUF9ORl9QUFRQPXkKKwlkZWZhdWx0IG0gaWYgSVBfTkZfUFBUUD1tCisKICMgbWFuZ2xlICsgc3BlY2lmaWMgdGFyZ2V0cwogY29uZmlnIElQX05GX01BTkdMRQogCXRyaXN0YXRlICJQYWNrZXQgbWFuZ2xpbmciCkBAIC03NzQsMTEgKzgwNCw1IEBACiAJICBBbGxvd3MgYWx0ZXJpbmcgdGhlIEFSUCBwYWNrZXQgcGF5bG9hZDogc291cmNlIGFuZCBkZXN0aW5hdGlvbgogCSAgaGFyZHdhcmUgYW5kIG5ldHdvcmsgYWRkcmVzc2VzLgogCi1jb25maWcgSVBfTkZfQ09OTlRSQUNLX05FVExJTksKLSAgICAgICAgdHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnCi0gICAgICAgIGRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLICYmIE5FVEZJTFRFUl9ORVRMSU5LCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlCi0KIGVuZG1lbnUKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDFiYTBkYjcuLjNkNDVkM2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTYsNiArNiw5IEBACiBpcF9jb25udHJhY2stb2Jqcwk6PSBpcF9jb25udHJhY2tfc3RhbmRhbG9uZS5vIGlwX2Nvbm50cmFja19jb3JlLm8gaXBfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBpcF9jb25udHJhY2tfcHJvdG9fdGNwLm8gaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5vIGlwX2Nvbm50cmFja19wcm90b19pY21wLm8KIGlwdGFibGVfbmF0LW9ianMJOj0gaXBfbmF0X3N0YW5kYWxvbmUubyBpcF9uYXRfcnVsZS5vIGlwX25hdF9jb3JlLm8gaXBfbmF0X2hlbHBlci5vIGlwX25hdF9wcm90b191bmtub3duLm8gaXBfbmF0X3Byb3RvX3RjcC5vIGlwX25hdF9wcm90b191ZHAubyBpcF9uYXRfcHJvdG9faWNtcC5vCiAKK2lwX2Nvbm50cmFja19wcHRwLW9ianMJOj0gaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLm8gaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5vCitpcF9uYXRfcHB0cC1vYmpzCTo9IGlwX25hdF9oZWxwZXJfcHB0cC5vIGlwX25hdF9wcm90b19ncmUubworCiAjIGNvbm5lY3Rpb24gdHJhY2tpbmcKIG9iai0kKENPTkZJR19JUF9ORl9DT05OVFJBQ0spICs9IGlwX2Nvbm50cmFjay5vCiAKQEAgLTE3LDYgKzIwLDcgQEAKIG9iai0kKENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQKSArPSBpcF9jb25udHJhY2tfcHJvdG9fc2N0cC5vCiAKICMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzCitvYmotJChDT05GSUdfSVBfTkZfUFBUUCkgKz0gaXBfY29ubnRyYWNrX3BwdHAubwogb2JqLSQoQ09ORklHX0lQX05GX0FNQU5EQSkgKz0gaXBfY29ubnRyYWNrX2FtYW5kYS5vCiBvYmotJChDT05GSUdfSVBfTkZfVEZUUCkgKz0gaXBfY29ubnRyYWNrX3RmdHAubwogb2JqLSQoQ09ORklHX0lQX05GX0ZUUCkgKz0gaXBfY29ubnRyYWNrX2Z0cC5vCkBAIC0yNCw2ICsyOCw3IEBACiBvYmotJChDT05GSUdfSVBfTkZfTkVUQklPU19OUykgKz0gaXBfY29ubnRyYWNrX25ldGJpb3NfbnMubwogCiAjIE5BVCBoZWxwZXJzIAorb2JqLSQoQ09ORklHX0lQX05GX05BVF9QUFRQKSArPSBpcF9uYXRfcHB0cC5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX0FNQU5EQSkgKz0gaXBfbmF0X2FtYW5kYS5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX1RGVFApICs9IGlwX25hdF90ZnRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9OQVRfRlRQKSArPSBpcF9uYXRfZnRwLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMTljYmExNi4uYzFmODJlMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCiAvKiBKdXN0IGZpbmQgYSBleHBlY3RhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgdHVwbGUuICovCiBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqCi1pcF9jb25udHJhY2tfZXhwZWN0X2ZpbmRfZ2V0KGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoraXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICppOwogCQpAQCAtMTE0Myw3ICsxMTQzLDEwIEBACiAJCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkgewogCQkJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBleHRyYV9qaWZmaWVzOwogCQkJYWRkX3RpbWVyKCZjdC0+dGltZW91dCk7Ci0JCQlpcF9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9SRUZSRVNILCBza2IpOworCQkJLyogRklYTUU6IFdlIGxvb3NlIHNvbWUgUkVGUkVTSCBldmVudHMgaWYgdGhpcyBmdW5jdGlvbgorCQkJICogaXMgY2FsbGVkIHdpdGhvdXQgYW4gc2tiLiAgSSdsbCBmaXggdGhpcyBsYXRlciAtSFcgKi8KKwkJCWlmIChza2IpCisJCQkJaXBfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUkVGUkVTSCwgc2tiKTsKIAkJfQogCQljdF9hZGRfY291bnRlcnMoY3QsIGN0aW5mbywgc2tiKTsKIAkJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYwppbmRleCAxYjc5ZWMzLi5kNzdkNmIzZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCkBAIC0yOSw5ICsyOSw5IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwX2Z0cF9sb2NrKTsKIAogI2RlZmluZSBNQVhfUE9SVFMgOAotc3RhdGljIGludCBwb3J0c1tNQVhfUE9SVFNdOworc3RhdGljIHNob3J0IHBvcnRzW01BWF9QT1JUU107CiBzdGF0aWMgaW50IHBvcnRzX2M7Ci1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIGludCwgJnBvcnRzX2MsIDA0MDApOworbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCBzaG9ydCwgJnBvcnRzX2MsIDA0MDApOwogCiBzdGF0aWMgaW50IGxvb3NlOwogbW9kdWxlX3BhcmFtKGxvb3NlLCBpbnQsIDA2MDApOwpAQCAtNDUwLDcgKzQ1MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXBfY29ubnRyYWNrX2hlbHBlciBmdHBbTUFYX1BPUlRTXTsKLXN0YXRpYyBjaGFyIGZ0cF9uYW1lc1tNQVhfUE9SVFNdWzEwXTsKK3N0YXRpYyBjaGFyIGZ0cF9uYW1lc1tNQVhfUE9SVFNdW3NpemVvZigiZnRwLTY1NTM1IildOwogCiAvKiBOb3QgX19leGl0OiBjYWxsZWQgZnJvbSBpbml0KCkgKi8KIHN0YXRpYyB2b2lkIGZpbmkodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWRiNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jCkBAIC0wLDAgKzEsODA1IEBACisvKgorICogaXBfY29ubnRyYWNrX3BwdHAuYwktIFZlcnNpb24gMy4wCisgKgorICogQ29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0IGZvciBQUFRQIChQb2ludCB0byBQb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wpLgorICogUFBUUCBpcyBhIGEgcHJvdG9jb2wgZm9yIGNyZWF0aW5nIHZpcnR1YWwgcHJpdmF0ZSBuZXR3b3Jrcy4KKyAqIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiBkZWZpbmVkIGJ5IE1pY3Jvc29mdCBhbmQgc29tZSB2ZW5kb3JzCisgKiB3b3JraW5nIHdpdGggTWljcm9zb2Z0LiAgUFBUUCBpcyBidWlsdCBvbiB0b3Agb2YgYSBtb2RpZmllZAorICogdmVyc2lvbiBvZiB0aGUgSW50ZXJuZXQgR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gUHJvdG9jb2wuCisgKiBHUkUgaXMgZGVmaW5lZCBpbiBSRkMgMTcwMSBhbmQgUkZDIDE3MDIuICBEb2N1bWVudGF0aW9uIG9mCisgKiBQUFRQIGNhbiBiZSBmb3VuZCBpbiBSRkMgMjYzNworICoKKyAqIChDKSAyMDAwLTIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqCisgKiBEZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgZnVuZGVkIGJ5IEFzdGFybyBBRyAoaHR0cDovL3d3dy5hc3Rhcm8uY29tLykKKyAqCisgKiBMaW1pdGF0aW9uczoKKyAqIAkgLSBXZSBibGluZGx5IGFzc3VtZSB0aGF0IGNvbnRyb2wgY29ubmVjdGlvbnMgYXJlIGFsd2F5cworICogCSAgIGVzdGFibGlzaGVkIGluIFBOUy0+UEFDIGRpcmVjdGlvbi4gIFRoaXMgaXMgYSB2aW9sYXRpb24KKyAqIAkgICBvZiBSRkZDMjY3MworICogCSAtIFdlIGNhbiBvbmx5IHN1cHBvcnQgb25lIHNpbmdsZSBjYWxsIHdpdGhpbiBlYWNoIHNlc3Npb24KKyAqCisgKiBUT0RPOgorICoJIC0gdGVzdGluZyBvZiBpbmNvbWluZyBQUFRQIGNhbGxzIAorICoKKyAqIENoYW5nZXM6IAorICogCTIwMDItMDItMDUgLSBWZXJzaW9uIDEuMworICogCSAgLSBDYWxsIGlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKCkgZnJvbSAKKyAqIAkgICAgcHB0cF9kZXN0cm95X3NpYmxpbmdzKCkgdG8gZGVzdHJveSBleHBlY3RhdGlvbnMgaW4gY2FzZQorICogCSAgICBDQUxMX0RJU0NPTk5FQ1RfTk9USUZZIG9yIHRjcCBmaW4gcGFja2V0IHdhcyBzZWVuCisgKiAJICAgIChQaGlsaXAgQ3JhaWcgPHBoaWxpcGNAc25hcGdlYXIuY29tPikKKyAqIAkgIC0gQWRkIFZlcnNpb24gaW5mb3JtYXRpb24gYXQgbW9kdWxlIGxvYWR0aW1lCisgKiAJMjAwMi0wMi0xMCAtIFZlcnNpb24gMS42CisgKiAJICAtIG1vdmUgdG8gQzk5IHN0eWxlIGluaXRpYWxpemVycworICogCSAgLSByZW1vdmUgc2Vjb25kIGV4cGVjdGF0aW9uIGlmIGZpcnN0IGFycml2ZXMKKyAqIAkyMDA0LTEwLTIyIC0gVmVyc2lvbiAyLjAKKyAqIAkgIC0gbWVyZ2UgTWFuZHJha2UncyAyLjYueCBwb3J0IHdpdGggcmVjZW50IDIuNi54IEFQSSBjaGFuZ2VzCisgKiAJICAtIGZpeCBsb3RzIG9mIGxpbmVhciBza2IgYXNzdW1wdGlvbnMgZnJvbSBNYW5kcmFrZSdzIHBvcnQKKyAqIAkyMDA1LTA2LTEwIC0gVmVyc2lvbiAyLjEKKyAqIAkgIC0gdXNlIGlwX2Nvbm50cmFja19leHBlY3RfZnJlZSgpIGluc3RlYWQgb2Yga2ZyZWUoKSBvbiB0aGUKKyAqIAkgICAgZXhwZWN0J3MgKHdoaWNoIGFyZSBmcm9tIHRoZSBzbGFiIGZvciBxdWl0ZSBzb21lIHRpbWUpCisgKiAJMjAwNS0wNi0xMCAtIFZlcnNpb24gMy4wCisgKiAJICAtIHBvcnQgaGVscGVyIHRvIHBvc3QtMi42LjExIEFQSSBjaGFuZ2VzLAorICogCSAgICBmdW5kZWQgYnkgT3hjb2RhIE5ldEJveCBCbHVlIChodHRwOi8vd3d3Lm5ldGJveGJsdWUuY29tLykKKyAqIAkyMDA1LTA3LTMwIC0gVmVyc2lvbiAzLjEKKyAqIAkgIC0gcG9ydCBoZWxwZXIgdG8gMi42LjEzIEFQSSBjaGFuZ2VzCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHB0cC5oPgorCisjZGVmaW5lIElQX0NUX1BQVFBfVkVSU0lPTiAiMy4xIgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgbW9kdWxlIGZvciBQUFRQIik7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBfcHB0cF9sb2NrKTsKKworaW50CisoKmlwX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICBzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgKmN0bGgsCisJCQkgIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSk7CisKK2ludAorKCppcF9uYXRfcHB0cF9ob29rX2luYm91bmQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICBzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgKmN0bGgsCisJCQkgIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSk7CisKK2ludAorKCppcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUpKHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHBlY3Rfb3JpZywKKwkJCSAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0X3JlcGx5KTsKKwordm9pZAorKCppcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKShzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisKKyNpZiAwCisvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIG5hbWVzICovCitjb25zdCBjaGFyICpwcHRwX21zZ19uYW1lW10gPSB7CisJIlVOS05PV05fTUVTU0FHRSIsCisJIlNUQVJUX1NFU1NJT05fUkVRVUVTVCIsCisJIlNUQVJUX1NFU1NJT05fUkVQTFkiLAorCSJTVE9QX1NFU1NJT05fUkVRVUVTVCIsCisJIlNUT1BfU0VTU0lPTl9SRVBMWSIsCisJIkVDSE9fUkVRVUVTVCIsCisJIkVDSE9fUkVQTFkiLAorCSJPVVRfQ0FMTF9SRVFVRVNUIiwKKwkiT1VUX0NBTExfUkVQTFkiLAorCSJJTl9DQUxMX1JFUVVFU1QiLAorCSJJTl9DQUxMX1JFUExZIiwKKwkiSU5fQ0FMTF9DT05ORUNUIiwKKwkiQ0FMTF9DTEVBUl9SRVFVRVNUIiwKKwkiQ0FMTF9ESVNDT05ORUNUX05PVElGWSIsCisJIldBTl9FUlJPUl9OT1RJRlkiLAorCSJTRVRfTElOS19JTkZPIgorfTsKK0VYUE9SVF9TWU1CT0wocHB0cF9tc2dfbmFtZSk7CisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhLRVJOX0RFQlVHICIlczolczogIiBmb3JtYXQsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgU0VDUyAqSFoKKyNkZWZpbmUgTUlOUyAqIDYwIFNFQ1MKKyNkZWZpbmUgSE9VUlMgKiA2MCBNSU5TCisKKyNkZWZpbmUgUFBUUF9HUkVfVElNRU9VVCAJCSgxMCBNSU5TKQorI2RlZmluZSBQUFRQX0dSRV9TVFJFQU1fVElNRU9VVCAJKDUgSE9VUlMpCisKK3N0YXRpYyB2b2lkIHBwdHBfZXhwZWN0Zm4oc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlERUJVR1AoImluY3JlYXNpbmcgdGltZW91dHNcbiIpOworCisJLyogaW5jcmVhc2UgdGltZW91dCBvZiBHUkUgZGF0YSBjaGFubmVsIGNvbm50cmFjayBlbnRyeSAqLworCWN0LT5wcm90by5ncmUudGltZW91dCA9IFBQVFBfR1JFX1RJTUVPVVQ7CisJY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCA9IFBQVFBfR1JFX1NUUkVBTV9USU1FT1VUOworCisJLyogQ2FuIHlvdSBzZWUgaG93IHJ1c3R5IHRoaXMgY29kZSBpcywgY29tcGFyZWQgd2l0aCB0aGUgcHJlLTIuNi4xMQorCSAqIG9uZT8gVGhhdCdzIHdoYXQgaGFwcGVuZWQgdG8gbXkgc2hpbnkgbmV3bmF0IG9mIDIwMDIgOyggLUhXICovCisKKwlpZiAoIWlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pIHsKKwkJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSBpbnZfdDsKKwkJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cF9vdGhlcjsKKworCQkvKiBvYnZpb3VzbHkgdGhpcyB0dXBsZSBpbnZlcnNpb24gb25seSB3b3JrcyB1bnRpbCB5b3UgZG8gTkFUICovCisJCWludmVydF90dXBsZXByKCZpbnZfdCwgJmV4cC0+dHVwbGUpOworCQlERUJVR1AoInRyeWluZyB0byB1bmV4cGVjdCBvdGhlciBkaXI6ICIpOworCQlEVU1QX1RVUExFKCZpbnZfdCk7CisJCisJCWV4cF9vdGhlciA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZCgmaW52X3QpOworCQlpZiAoZXhwX290aGVyKSB7CisJCQkvKiBkZWxldGUgb3RoZXIgZXhwZWN0YXRpb24uICAqLworCQkJREVCVUdQKCJmb3VuZFxuIik7CisJCQlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBfb3RoZXIpOworCQkJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwX290aGVyKTsKKwkJfSBlbHNlIHsKKwkJCURFQlVHUCgibm90IGZvdW5kXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHdlIG5lZWQgbW9yZSB0aGFuIHNpbXBsZSBpbnZlcnNpb24gKi8KKwkJaXBfbmF0X3BwdHBfaG9va19leHBlY3RmbihjdCwgZXhwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGVzdHJveV9zaWJsaW5nX29yX2V4cChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0KQoreworCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCisJREVCVUdQKCJ0cnlpbmcgdG8gdGltZW91dCBjdCBvciBleHAgZm9yIHR1cGxlICIpOworCURVTVBfVFVQTEUodCk7CisKKwloID0gaXBfY29ubnRyYWNrX2ZpbmRfZ2V0KHQsIE5VTEwpOworCWlmIChoKSAgeworCQlzdHJ1Y3QgaXBfY29ubnRyYWNrICpzaWJsaW5nID0gdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKKwkJREVCVUdQKCJzZXR0aW5nIHRpbWVvdXQgb2YgY29ubnRyYWNrICVwIHRvIDBcbiIsIHNpYmxpbmcpOworCQlzaWJsaW5nLT5wcm90by5ncmUudGltZW91dCA9IDA7CisJCXNpYmxpbmctPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCA9IDA7CisJCS8qIHJlZnJlc2hfYWNjdCB3aWxsIG5vdCBtb2RpZnkgY291bnRlcnMgaWYgc2tiID09IE5VTEwgKi8KKwkJaWYgKGRlbF90aW1lcigmc2libGluZy0+dGltZW91dCkpCisJCQlzaWJsaW5nLT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKXNpYmxpbmcpOworCQlpcF9jb25udHJhY2tfcHV0KHNpYmxpbmcpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlleHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQodCk7CisJCWlmIChleHApIHsKKwkJCURFQlVHUCgidW5leHBlY3RfcmVsYXRlZCBvZiBleHBlY3QgJXBcbiIsIGV4cCk7CisJCQlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHApOworCQkJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyogdGltZW91dCBHUkUgZGF0YSBjb25uZWN0aW9ucyAqLworc3RhdGljIHZvaWQgcHB0cF9kZXN0cm95X3NpYmxpbmdzKHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KQoreworCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgdDsKKworCS8qIFNpbmNlIGN0LT5zaWJsaW5nX2xpc3QgaGFzIGxpdGVyYWxseSBydXN0ZWQgYXdheSBpbiAyLjYuMTEsIAorCSAqIHdlIG5vdyBuZWVkIGFub3RoZXIgd2F5IHRvIGZpbmQgb3V0IGFib3V0IG91ciBzaWJsaW5nCisJICogY29udHJhY2sgYW5kIGV4cGVjdHMuLi4gLUhXICovCisKKwkvKiB0cnkgb3JpZ2luYWwgKHBucy0+cGFjKSB0dXBsZSAqLworCW1lbWNweSgmdCwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwgc2l6ZW9mKHQpKTsKKwl0LmRzdC5wcm90b251bSA9IElQUFJPVE9fR1JFOworCXQuc3JjLnUuZ3JlLmtleSA9IGh0b25zKGN0LT5oZWxwLmN0X3BwdHBfaW5mby5wbnNfY2FsbF9pZCk7CisJdC5kc3QudS5ncmUua2V5ID0gaHRvbnMoY3QtPmhlbHAuY3RfcHB0cF9pbmZvLnBhY19jYWxsX2lkKTsKKworCWlmICghZGVzdHJveV9zaWJsaW5nX29yX2V4cCgmdCkpCisJCURFQlVHUCgiZmFpbGVkIHRvIHRpbWVvdXQgb3JpZ2luYWwgcG5zLT5wYWMgY3QvZXhwXG4iKTsKKworCS8qIHRyeSByZXBseSAocGFjLT5wbnMpIHR1cGxlICovCisJbWVtY3B5KCZ0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLCBzaXplb2YodCkpOworCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CisJdC5zcmMudS5ncmUua2V5ID0gaHRvbnMoY3QtPmhlbHAuY3RfcHB0cF9pbmZvLnBhY19jYWxsX2lkKTsKKwl0LmRzdC51LmdyZS5rZXkgPSBodG9ucyhjdC0+aGVscC5jdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQpOworCisJaWYgKCFkZXN0cm95X3NpYmxpbmdfb3JfZXhwKCZ0KSkKKwkJREVCVUdQKCJmYWlsZWQgdG8gdGltZW91dCByZXBseSBwYWMtPnBucyBjdC9leHBcbiIpOworfQorCisvKiBleHBlY3QgR1JFIGNvbm5lY3Rpb25zIChQTlMtPlBBQyBhbmQgUEFDLT5QTlMgZGlyZWN0aW9uKSAqLworc3RhdGljIGlubGluZSBpbnQKK2V4cF9ncmUoc3RydWN0IGlwX2Nvbm50cmFjayAqbWFzdGVyLAorCXVfaW50MzJfdCBzZXEsCisJdV9pbnQxNl90IGNhbGxpZCwKKwl1X2ludDE2X3QgcGVlcl9jYWxsaWQpCit7CisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSBpbnZfdHVwbGU7CisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSBleHBfdHVwbGVzW10gPSB7CisJCS8qIHR1cGxlIGluIG9yaWdpbmFsIGRpcmVjdGlvbiwgUE5TLT5QQUMgKi8KKwkJeyAuc3JjID0geyAuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5pcCwKKwkJCSAgIC51ID0geyAuZ3JlID0geyAua2V5ID0gcGVlcl9jYWxsaWQgfSB9CisJCQkgfSwKKwkJICAuZHN0ID0geyAuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5pcCwKKwkJCSAgIC51ID0geyAuZ3JlID0geyAua2V5ID0gY2FsbGlkIH0gfSwKKwkJCSAgIC5wcm90b251bSA9IElQUFJPVE9fR1JFCisJCQkgfSwKKwkJIH0sCisJCS8qIHR1cGxlIGluIHJlcGx5IGRpcmVjdGlvbiwgUEFDLT5QTlMgKi8KKwkJeyAuc3JjID0geyAuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy5pcCwKKwkJCSAgIC51ID0geyAuZ3JlID0geyAua2V5ID0gY2FsbGlkIH0gfQorCQkJIH0sCisJCSAgLmRzdCA9IHsgLmlwID0gbWFzdGVyLT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5kc3QuaXAsCisJCQkgICAudSA9IHsgLmdyZSA9IHsgLmtleSA9IHBlZXJfY2FsbGlkIH0gfSwKKwkJCSAgIC5wcm90b251bSA9IElQUFJPVE9fR1JFCisJCQkgfSwKKwkJIH0KKwl9OworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHBfb3JpZywgKmV4cF9yZXBseTsKKwlpbnQgcmV0ID0gMTsKKworCWV4cF9vcmlnID0gaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhtYXN0ZXIpOworCWlmIChleHBfb3JpZyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWV4cF9yZXBseSA9IGlwX2Nvbm50cmFja19leHBlY3RfYWxsb2MobWFzdGVyKTsKKwlpZiAoZXhwX3JlcGx5ID09IE5VTEwpCisJCWdvdG8gb3V0X3B1dF9vcmlnOworCisJbWVtY3B5KCZleHBfb3JpZy0+dHVwbGUsICZleHBfdHVwbGVzWzBdLCBzaXplb2YoZXhwX29yaWctPnR1cGxlKSk7CisKKwlleHBfb3JpZy0+bWFzay5zcmMuaXAgPSAweGZmZmZmZmZmOworCWV4cF9vcmlnLT5tYXNrLnNyYy51LmFsbCA9IDA7CisJZXhwX29yaWctPm1hc2suZHN0LnUuYWxsID0gMDsKKwlleHBfb3JpZy0+bWFzay5kc3QudS5ncmUua2V5ID0gMHhmZmZmOworCWV4cF9vcmlnLT5tYXNrLmRzdC5pcCA9IDB4ZmZmZmZmZmY7CisJZXhwX29yaWctPm1hc2suZHN0LnByb3RvbnVtID0gMHhmZjsKKwkJCisJZXhwX29yaWctPm1hc3RlciA9IG1hc3RlcjsKKwlleHBfb3JpZy0+ZXhwZWN0Zm4gPSBwcHRwX2V4cGVjdGZuOworCWV4cF9vcmlnLT5mbGFncyA9IDA7CisKKwlleHBfb3JpZy0+ZGlyID0gSVBfQ1RfRElSX09SSUdJTkFMOworCisJLyogYm90aCBleHBlY3RhdGlvbnMgYXJlIGlkZW50aWNhbCBhcGFydCBmcm9tIHR1cGxlICovCisJbWVtY3B5KGV4cF9yZXBseSwgZXhwX29yaWcsIHNpemVvZigqZXhwX3JlcGx5KSk7CisJbWVtY3B5KCZleHBfcmVwbHktPnR1cGxlLCAmZXhwX3R1cGxlc1sxXSwgc2l6ZW9mKGV4cF9yZXBseS0+dHVwbGUpKTsKKworCWV4cF9yZXBseS0+ZGlyID0gIWV4cF9vcmlnLT5kaXI7CisKKwlpZiAoaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKQorCQlyZXQgPSBpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUoZXhwX29yaWcsIGV4cF9yZXBseSk7CisJZWxzZSB7CisKKwkJREVCVUdQKCJjYWxsaW5nIGV4cGVjdF9yZWxhdGVkIFBOUy0+UEFDIik7CisJCURVTVBfVFVQTEUoJmV4cF9vcmlnLT50dXBsZSk7CisKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHBfb3JpZykgIT0gMCkgeworCQkJREVCVUdQKCJjYW5ub3QgZXhwZWN0X3JlbGF0ZWQoKVxuIik7CisJCQlnb3RvIG91dF9wdXRfYm90aDsKKwkJfQorCisJCURFQlVHUCgiY2FsbGluZyBleHBlY3RfcmVsYXRlZCBQQUMtPlBOUyIpOworCQlEVU1QX1RVUExFKCZleHBfcmVwbHktPnR1cGxlKTsKKworCQlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cF9yZXBseSkgIT0gMCkgeworCQkJREVCVUdQKCJjYW5ub3QgZXhwZWN0X3JlbGF0ZWQoKVxuIik7CisJCQlnb3RvIG91dF91bmV4cGVjdF9vcmlnOworCQl9CisKKwkJLyogQWRkIEdSRSBrZXltYXAgZW50cmllcyAqLworCQlpZiAoaXBfY3RfZ3JlX2tleW1hcF9hZGQobWFzdGVyLCAmZXhwX3JlcGx5LT50dXBsZSwgMCkgIT0gMCkgeworCQkJREVCVUdQKCJjYW5ub3Qga2V5bWFwX2FkZCgpIGV4cFxuIik7CisJCQlnb3RvIG91dF91bmV4cGVjdF9ib3RoOworCQl9CisKKwkJaW52ZXJ0X3R1cGxlcHIoJmludl90dXBsZSwgJmV4cF9yZXBseS0+dHVwbGUpOworCQlpZiAoaXBfY3RfZ3JlX2tleW1hcF9hZGQobWFzdGVyLCAmaW52X3R1cGxlLCAxKSAhPSAwKSB7CisJCQlpcF9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3kobWFzdGVyKTsKKwkJCURFQlVHUCgiY2Fubm90IGtleW1hcF9hZGQoKSBleHBfaW52XG4iKTsKKwkJCWdvdG8gb3V0X3VuZXhwZWN0X2JvdGg7CisJCX0KKwkJcmV0ID0gMDsKKwl9CisKK291dF9wdXRfYm90aDoKKwlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHBfcmVwbHkpOworb3V0X3B1dF9vcmlnOgorCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cF9vcmlnKTsKK291dDoKKwlyZXR1cm4gcmV0OworCitvdXRfdW5leHBlY3RfYm90aDoKKwlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBfcmVwbHkpOworb3V0X3VuZXhwZWN0X29yaWc6CisJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwX29yaWcpOworCWdvdG8gb3V0X3B1dF9ib3RoOworfQorCitzdGF0aWMgaW5saW5lIGludCAKK3BwdHBfaW5ib3VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgc3RydWN0IHRjcGhkciAqdGNwaCwKKwkJIHVuc2lnbmVkIGludCBuZXh0aGRyX29mZiwKKwkJIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgX2N0bGgsICpjdGxoOworCXVuc2lnbmVkIGludCByZXFsZW47CisJdW5pb24gcHB0cF9jdHJsX3VuaW9uIF9wcHRwUmVxLCAqcHB0cFJlcTsKKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvOworCXVfaW50MTZfdCBtc2csICpjaWQsICpwY2lkOworCXVfaW50MzJfdCBzZXE7CQorCisJY3RsaCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgbmV4dGhkcl9vZmYsIHNpemVvZihfY3RsaCksICZfY3RsaCk7CisJaWYgKCFjdGxoKSB7CisJCURFQlVHUCgiZXJyb3IgZHVyaW5nIHNrYl9oZWFkZXJfcG9pbnRlclxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCW5leHRoZHJfb2ZmICs9IHNpemVvZihfY3RsaCk7CisJZGF0YWxlbiAtPSBzaXplb2YoX2N0bGgpOworCisJcmVxbGVuID0gZGF0YWxlbjsKKwlpZiAocmVxbGVuID4gc2l6ZW9mKCpwcHRwUmVxKSkKKwkJcmVxbGVuID0gc2l6ZW9mKCpwcHRwUmVxKTsKKwlwcHRwUmVxID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBuZXh0aGRyX29mZiwgcmVxbGVuLCAmX3BwdHBSZXEpOworCWlmICghcHB0cFJlcSkgeworCQlERUJVR1AoImVycm9yIGR1cmluZyBza2JfaGVhZGVyX3BvaW50ZXJcbiIpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCW1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKTsKKwlERUJVR1AoImluYm91bmQgY29udHJvbCBtZXNzYWdlICVzXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCisJc3dpdGNoIChtc2cpIHsKKwljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVBMWToKKwkJaWYgKHJlcWxlbiA8IHNpemVvZihfcHB0cFJlcS5zcmVwKSkgeworCQkJREVCVUdQKCIlczogc2hvcnQgcGFja2V0XG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXJ2ZXIgY29uZmlybXMgbmV3IGNvbnRyb2wgc2Vzc2lvbiAqLworCQlpZiAoaW5mby0+c3N0YXRlIDwgUFBUUF9TRVNTSU9OX1JFUVVFU1RFRCkgeworCQkJREVCVUdQKCIlcyB3aXRob3V0IFNUQVJUX1NFU1NfUkVRVUVTVFxuIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBwdHBSZXEtPnNyZXAucmVzdWx0Q29kZSA9PSBQUFRQX1NUQVJUX09LKQorCQkJaW5mby0+c3N0YXRlID0gUFBUUF9TRVNTSU9OX0NPTkZJUk1FRDsKKwkJZWxzZSAKKwkJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9FUlJPUjsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZOgorCQlpZiAocmVxbGVuIDwgc2l6ZW9mKF9wcHRwUmVxLnN0cmVwKSkgeworCQkJREVCVUdQKCIlczogc2hvcnQgcGFja2V0XG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXJ2ZXIgY29uZmlybXMgZW5kIG9mIGNvbnRyb2wgc2Vzc2lvbiAqLworCQlpZiAoaW5mby0+c3N0YXRlID4gUFBUUF9TRVNTSU9OX1NUT1BSRVEpIHsKKwkJCURFQlVHUCgiJXMgd2l0aG91dCBTVE9QX1NFU1NfUkVRVUVTVFxuIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBwdHBSZXEtPnN0cmVwLnJlc3VsdENvZGUgPT0gUFBUUF9TVE9QX09LKQorCQkJaW5mby0+c3N0YXRlID0gUFBUUF9TRVNTSU9OX05PTkU7CisJCWVsc2UKKwkJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9FUlJPUjsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfT1VUX0NBTExfUkVQTFk6CisJCWlmIChyZXFsZW4gPCBzaXplb2YoX3BwdHBSZXEub2NhY2spKSB7CisJCQlERUJVR1AoIiVzOiBzaG9ydCBwYWNrZXRcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHNlcnZlciBhY2NlcHRlZCBjYWxsLCB3ZSBub3cgZXhwZWN0IEdSRSBmcmFtZXMgKi8KKwkJaWYgKGluZm8tPnNzdGF0ZSAhPSBQUFRQX1NFU1NJT05fQ09ORklSTUVEKSB7CisJCQlERUJVR1AoIiVzIGJ1dCBubyBzZXNzaW9uXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfT1VUX1JFUSAmJgorCQkgICAgaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9PVVRfQ09ORikgeworCQkJREVCVUdQKCIlcyB3aXRob3V0IE9VVENBTExfUkVRXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBwdHBSZXEtPm9jYWNrLnJlc3VsdENvZGUgIT0gUFBUUF9PVVRDQUxMX0NPTk5FQ1QpIHsKKwkJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9OT05FOworCQkJYnJlYWs7CisJCX0KKworCQljaWQgPSAmcHB0cFJlcS0+b2NhY2suY2FsbElEOworCQlwY2lkID0gJnBwdHBSZXEtPm9jYWNrLnBlZXJzQ2FsbElEOworCisJCWluZm8tPnBhY19jYWxsX2lkID0gbnRvaHMoKmNpZCk7CisJCQorCQlpZiAoaHRvbnMoaW5mby0+cG5zX2NhbGxfaWQpICE9ICpwY2lkKSB7CisJCQlERUJVR1AoIiVzIGZvciB1bmtub3duIGNhbGxpZCAldVxuIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10sIG50b2hzKCpwY2lkKSk7CisJCQlicmVhazsKKwkJfQorCisJCURFQlVHUCgiJXMsIENJRD0lWCwgUENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLCAKKwkJCW50b2hzKCpjaWQpLCBudG9ocygqcGNpZCkpOworCQkKKwkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX09VVF9DT05GOworCisJCXNlcSA9IG50b2hsKHRjcGgtPnNlcSkgKyBzaXplb2Yoc3RydWN0IHBwdHBfcGt0X2hkcikKKwkJCQkgICAgICAgKyBzaXplb2Yoc3RydWN0IFBwdHBDb250cm9sSGVhZGVyKQorCQkJCSAgICAgICArICgodm9pZCAqKXBjaWQgLSAodm9pZCAqKXBwdHBSZXEpOworCQkJCisJCWlmIChleHBfZ3JlKGN0LCBzZXEsICpjaWQsICpwY2lkKSAhPSAwKQorCQkJcHJpbnRrKCJpcF9jb25udHJhY2tfcHB0cDogZXJyb3IgZHVyaW5nIGV4cF9ncmVcbiIpOworCQlicmVhazsKKworCWNhc2UgUFBUUF9JTl9DQUxMX1JFUVVFU1Q6CisJCWlmIChyZXFsZW4gPCBzaXplb2YoX3BwdHBSZXEuaWNhY2spKSB7CisJCQlERUJVR1AoIiVzOiBzaG9ydCBwYWNrZXRcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHNlcnZlciB0ZWxscyB1cyBhYm91dCBpbmNvbWluZyBjYWxsIHJlcXVlc3QgKi8KKwkJaWYgKGluZm8tPnNzdGF0ZSAhPSBQUFRQX1NFU1NJT05fQ09ORklSTUVEKSB7CisJCQlERUJVR1AoIiVzIGJ1dCBubyBzZXNzaW9uXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJcGNpZCA9ICZwcHRwUmVxLT5pY2Fjay5wZWVyc0NhbGxJRDsKKwkJREVCVUdQKCIlcywgUENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocygqcGNpZCkpOworCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfSU5fUkVROworCQlpbmZvLT5wYWNfY2FsbF9pZCA9IG50b2hzKCpwY2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfSU5fQ0FMTF9DT05ORUNUOgorCQlpZiAocmVxbGVuIDwgc2l6ZW9mKF9wcHRwUmVxLmljY29uKSkgeworCQkJREVCVUdQKCIlczogc2hvcnQgcGFja2V0XG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXJ2ZXIgdGVsbHMgdXMgYWJvdXQgaW5jb21pbmcgY2FsbCBlc3RhYmxpc2hlZCAqLworCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfU0VTU0lPTl9DT05GSVJNRUQpIHsKKwkJCURFQlVHUCgiJXMgYnV0IG5vIHNlc3Npb25cbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKKwkJICAgICYmIGluZm8tPnNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgeworCQkJREVCVUdQKCIlcyBidXQgbmV2ZXIgc2VudCBJTl9DQUxMX1JFUExZXG4iLAorCQkJCXBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCisJCXBjaWQgPSAmcHB0cFJlcS0+aWNjb24ucGVlcnNDYWxsSUQ7CisJCWNpZCA9ICZpbmZvLT5wYWNfY2FsbF9pZDsKKworCQlpZiAoaW5mby0+cG5zX2NhbGxfaWQgIT0gbnRvaHMoKnBjaWQpKSB7CisJCQlERUJVR1AoIiVzIGZvciB1bmtub3duIENhbGxJRCAldVxuIiwgCisJCQkJcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocygqY2lkKSk7CisJCQlicmVhazsKKwkJfQorCisJCURFQlVHUCgiJXMsIFBDSUQ9JVhcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSwgbnRvaHMoKnBjaWQpKTsKKwkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX0lOX0NPTkY7CisKKwkJLyogd2UgZXhwZWN0IGEgR1JFIGNvbm5lY3Rpb24gZnJvbSBQQUMgdG8gUE5TICovCisJCXNlcSA9IG50b2hsKHRjcGgtPnNlcSkgKyBzaXplb2Yoc3RydWN0IHBwdHBfcGt0X2hkcikKKwkJCQkgICAgICAgKyBzaXplb2Yoc3RydWN0IFBwdHBDb250cm9sSGVhZGVyKQorCQkJCSAgICAgICArICgodm9pZCAqKXBjaWQgLSAodm9pZCAqKXBwdHBSZXEpOworCQkJCisJCWlmIChleHBfZ3JlKGN0LCBzZXEsICpjaWQsICpwY2lkKSAhPSAwKQorCQkJcHJpbnRrKCJpcF9jb25udHJhY2tfcHB0cDogZXJyb3IgZHVyaW5nIGV4cF9ncmVcbiIpOworCisJCWJyZWFrOworCisJY2FzZSBQUFRQX0NBTExfRElTQ09OTkVDVF9OT1RJRlk6CisJCWlmIChyZXFsZW4gPCBzaXplb2YoX3BwdHBSZXEuZGlzYykpIHsKKwkJCURFQlVHUCgiJXM6IHNob3J0IHBhY2tldFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogc2VydmVyIGNvbmZpcm1zIGRpc2Nvbm5lY3QgKi8KKwkJY2lkID0gJnBwdHBSZXEtPmRpc2MuY2FsbElEOworCQlERUJVR1AoIiVzLCBDSUQ9JVhcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSwgbnRvaHMoKmNpZCkpOworCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfTk9ORTsKKworCQkvKiB1bnRyYWNrIHRoaXMgY2FsbCBpZCwgdW5leHBlY3QgR1JFIHBhY2tldHMgKi8KKwkJcHB0cF9kZXN0cm95X3NpYmxpbmdzKGN0KTsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfV0FOX0VSUk9SX05PVElGWToKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfRUNIT19SRVFVRVNUOgorCWNhc2UgUFBUUF9FQ0hPX1JFUExZOgorCQkvKiBJIGRvbid0IGhhdmUgdG8gZXhwbGFpbiB0aGVzZSA7KSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR1AoImludmFsaWQgJXMgKFRZPSVkKVxuIiwgKG1zZyA8PSBQUFRQX01TR19NQVgpCisJCQk/IHBwdHBfbXNnX25hbWVbbXNnXTpwcHRwX21zZ19uYW1lWzBdLCBtc2cpOworCQlicmVhazsKKwl9CisKKworCWlmIChpcF9uYXRfcHB0cF9ob29rX2luYm91bmQpCisJCXJldHVybiBpcF9uYXRfcHB0cF9ob29rX2luYm91bmQocHNrYiwgY3QsIGN0aW5mbywgY3RsaCwKKwkJCQkJCXBwdHBSZXEpOworCisJcmV0dXJuIE5GX0FDQ0VQVDsKKworfQorCitzdGF0aWMgaW5saW5lIGludAorcHB0cF9vdXRib3VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCisJCSAgdW5zaWduZWQgaW50IG5leHRoZHJfb2ZmLAorCQkgIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciBfY3RsaCwgKmN0bGg7CisJdW5zaWduZWQgaW50IHJlcWxlbjsKKwl1bmlvbiBwcHRwX2N0cmxfdW5pb24gX3BwdHBSZXEsICpwcHRwUmVxOworCXN0cnVjdCBpcF9jdF9wcHRwX21hc3RlciAqaW5mbyA9ICZjdC0+aGVscC5jdF9wcHRwX2luZm87CisJdV9pbnQxNl90IG1zZywgKmNpZCwgKnBjaWQ7CisKKwljdGxoID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBuZXh0aGRyX29mZiwgc2l6ZW9mKF9jdGxoKSwgJl9jdGxoKTsKKwlpZiAoIWN0bGgpCisJCXJldHVybiBORl9BQ0NFUFQ7CisJbmV4dGhkcl9vZmYgKz0gc2l6ZW9mKF9jdGxoKTsKKwlkYXRhbGVuIC09IHNpemVvZihfY3RsaCk7CisJCisJcmVxbGVuID0gZGF0YWxlbjsKKwlpZiAocmVxbGVuID4gc2l6ZW9mKCpwcHRwUmVxKSkKKwkJcmVxbGVuID0gc2l6ZW9mKCpwcHRwUmVxKTsKKwlwcHRwUmVxID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBuZXh0aGRyX29mZiwgcmVxbGVuLCAmX3BwdHBSZXEpOworCWlmICghcHB0cFJlcSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCW1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKTsKKwlERUJVR1AoIm91dGJvdW5kIGNvbnRyb2wgbWVzc2FnZSAlc1xuIiwgcHB0cF9tc2dfbmFtZVttc2ddKTsKKworCXN3aXRjaCAobXNnKSB7CisJY2FzZSBQUFRQX1NUQVJUX1NFU1NJT05fUkVRVUVTVDoKKwkJLyogY2xpZW50IHJlcXVlc3RzIGZvciBuZXcgY29udHJvbCBzZXNzaW9uICovCisJCWlmIChpbmZvLT5zc3RhdGUgIT0gUFBUUF9TRVNTSU9OX05PTkUpIHsKKwkJCURFQlVHUCgiJXMgYnV0IHdlIGFscmVhZHkgaGF2ZSBvbmUiLAorCQkJCXBwdHBfbXNnX25hbWVbbXNnXSk7CisJCX0KKwkJaW5mby0+c3N0YXRlID0gUFBUUF9TRVNTSU9OX1JFUVVFU1RFRDsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX1NUT1BfU0VTU0lPTl9SRVFVRVNUOgorCQkvKiBjbGllbnQgcmVxdWVzdHMgZW5kIG9mIGNvbnRyb2wgc2Vzc2lvbiAqLworCQlpbmZvLT5zc3RhdGUgPSBQUFRQX1NFU1NJT05fU1RPUFJFUTsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfT1VUX0NBTExfUkVRVUVTVDoKKwkJaWYgKHJlcWxlbiA8IHNpemVvZihfcHB0cFJlcS5vY3JlcSkpIHsKKwkJCURFQlVHUCgiJXM6IHNob3J0IHBhY2tldFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddKTsKKwkJCS8qIEZJWE1FOiBicmVhazsgKi8KKwkJfQorCisJCS8qIGNsaWVudCBpbml0aWF0aW5nIGNvbm5lY3Rpb24gdG8gc2VydmVyICovCisJCWlmIChpbmZvLT5zc3RhdGUgIT0gUFBUUF9TRVNTSU9OX0NPTkZJUk1FRCkgeworCQkJREVCVUdQKCIlcyBidXQgbm8gc2Vzc2lvblxuIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX09VVF9SRVE7CisJCS8qIHRyYWNrIFBOUyBjYWxsIGlkICovCisJCWNpZCA9ICZwcHRwUmVxLT5vY3JlcS5jYWxsSUQ7CisJCURFQlVHUCgiJXMsIENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocygqY2lkKSk7CisJCWluZm8tPnBuc19jYWxsX2lkID0gbnRvaHMoKmNpZCk7CisJCWJyZWFrOworCWNhc2UgUFBUUF9JTl9DQUxMX1JFUExZOgorCQlpZiAocmVxbGVuIDwgc2l6ZW9mKF9wcHRwUmVxLmljYWNrKSkgeworCQkJREVCVUdQKCIlczogc2hvcnQgcGFja2V0XG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBjbGllbnQgYW5zd2VycyBpbmNvbWluZyBjYWxsICovCisJCWlmIChpbmZvLT5jc3RhdGUgIT0gUFBUUF9DQUxMX0lOX1JFUQorCQkgICAgJiYgaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVApIHsKKwkJCURFQlVHUCgiJXMgd2l0aG91dCBpbmNhbGxfcmVxXG4iLCAKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBwdHBSZXEtPmljYWNrLnJlc3VsdENvZGUgIT0gUFBUUF9JTkNBTExfQUNDRVBUKSB7CisJCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfTk9ORTsKKwkJCWJyZWFrOworCQl9CisJCXBjaWQgPSAmcHB0cFJlcS0+aWNhY2sucGVlcnNDYWxsSUQ7CisJCWlmIChpbmZvLT5wYWNfY2FsbF9pZCAhPSBudG9ocygqcGNpZCkpIHsKKwkJCURFQlVHUCgiJXMgZm9yIHVua25vd24gY2FsbCAldVxuIiwgCisJCQkJcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocygqcGNpZCkpOworCQkJYnJlYWs7CisJCX0KKwkJREVCVUdQKCIlcywgQ0lEPSVYXG4iLCBwcHRwX21zZ19uYW1lW21zZ10sIG50b2hzKCpwY2lkKSk7CisJCS8qIHBhcnQgdHdvIG9mIHRoZSB0aHJlZS13YXkgaGFuZHNoYWtlICovCisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9JTl9SRVA7CisJCWluZm8tPnBuc19jYWxsX2lkID0gbnRvaHMocHB0cFJlcS0+aWNhY2suY2FsbElEKTsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfQ0FMTF9DTEVBUl9SRVFVRVNUOgorCQkvKiBjbGllbnQgcmVxdWVzdHMgaGFuZ3VwIG9mIGNhbGwgKi8KKwkJaWYgKGluZm8tPnNzdGF0ZSAhPSBQUFRQX1NFU1NJT05fQ09ORklSTUVEKSB7CisJCQlERUJVR1AoIkNMRUFSX0NBTEwgYnV0IG5vIHNlc3Npb25cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogRlVUVVJFOiBpdGVyYXRlIG92ZXIgYWxsIGNhbGxzIGFuZCBjaGVjayBpZgorCQkgKiBjYWxsIElEIGlzIHZhbGlkLiAgV2UgZG9uJ3QgZG8gdGhpcyB3aXRob3V0IG5ld25hdCwKKwkJICogYmVjYXVzZSB3ZSBvbmx5IGtub3cgYWJvdXQgbGFzdCBjYWxsICovCisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9DTEVBUl9SRVE7CisJCWJyZWFrOworCWNhc2UgUFBUUF9TRVRfTElOS19JTkZPOgorCQlicmVhazsKKwljYXNlIFBQVFBfRUNIT19SRVFVRVNUOgorCWNhc2UgUFBUUF9FQ0hPX1JFUExZOgorCQkvKiBJIGRvbid0IGhhdmUgdG8gZXhwbGFpbiB0aGVzZSA7KSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR1AoImludmFsaWQgJXMgKFRZPSVkKVxuIiwgKG1zZyA8PSBQUFRQX01TR19NQVgpPyAKKwkJCXBwdHBfbXNnX25hbWVbbXNnXTpwcHRwX21zZ19uYW1lWzBdLCBtc2cpOworCQkvKiB1bmtub3duOiBubyBuZWVkIHRvIGNyZWF0ZSBHUkUgbWFzcSB0YWJsZSBlbnRyeSAqLworCQlicmVhazsKKwl9CisJCisJaWYgKGlwX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpCisJCXJldHVybiBpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kKHBza2IsIGN0LCBjdGluZm8sIGN0bGgsCisJCQkJCQkgcHB0cFJlcSk7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCisKKy8qIHRyYWNrIGNhbGxlciBpZCBpbnNpZGUgY29udHJvbCBjb25uZWN0aW9uLCBjYWxsIGV4cGVjdF9yZWxhdGVkICovCitzdGF0aWMgaW50IAorY29ubnRyYWNrX3BwdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCisKK3sKKwlzdHJ1Y3QgcHB0cF9wa3RfaGRyIF9wcHRwaCwgKnBwdHBoOworCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0Y3BoOworCXVfaW50MzJfdCB0Y3BsZW4gPSAoKnBza2IpLT5sZW4gLSAoKnBza2IpLT5uaC5pcGgtPmlobCAqIDQ7CisJdV9pbnQzMl90IGRhdGFsZW47CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvOworCXVuc2lnbmVkIGludCBuZXh0aGRyX29mZjsKKworCWludCBvbGRzc3RhdGUsIG9sZGNzdGF0ZTsKKwlpbnQgcmV0OworCisJLyogZG9uJ3QgZG8gYW55IHRyYWNraW5nIGJlZm9yZSB0Y3AgaGFuZHNoYWtlIGNvbXBsZXRlICovCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAKKwkgICAgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEK0lQX0NUX0lTX1JFUExZKSB7CisJCURFQlVHUCgiY3RpbmZvID0gJXUsIHNraXBwaW5nXG4iLCBjdGluZm8pOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKwkKKwluZXh0aGRyX29mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQ7CisJdGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgbmV4dGhkcl9vZmYsIHNpemVvZihfdGNwaCksICZfdGNwaCk7CisJQlVHX09OKCF0Y3BoKTsKKwluZXh0aGRyX29mZiArPSB0Y3BoLT5kb2ZmICogNDsKKyAJZGF0YWxlbiA9IHRjcGxlbiAtIHRjcGgtPmRvZmYgKiA0OworCisJaWYgKHRjcGgtPmZpbiB8fCB0Y3BoLT5yc3QpIHsKKwkJREVCVUdQKCJSU1QvRklOIHJlY2VpdmVkLCB0aW1lb3V0aW5nIEdSRVxuIik7CisJCS8qIGNhbid0IGRvIHRoaXMgYWZ0ZXIgcmVhbCBuZXduYXQgKi8KKwkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX05PTkU7CisKKwkJLyogdW50cmFjayB0aGlzIGNhbGwgaWQsIHVuZXhwZWN0IEdSRSBwYWNrZXRzICovCisJCXBwdHBfZGVzdHJveV9zaWJsaW5ncyhjdCk7CisJfQorCisJcHB0cGggPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIG5leHRoZHJfb2ZmLCBzaXplb2YoX3BwdHBoKSwgJl9wcHRwaCk7CisJaWYgKCFwcHRwaCkgeworCQlERUJVR1AoIm5vIGZ1bGwgUFBUUCBoZWFkZXIsIGNhbid0IHRyYWNrXG4iKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisJbmV4dGhkcl9vZmYgKz0gc2l6ZW9mKF9wcHRwaCk7CisJZGF0YWxlbiAtPSBzaXplb2YoX3BwdHBoKTsKKworCS8qIGlmIGl0J3Mgbm90IGEgY29udHJvbCBtZXNzYWdlIHdlIGNhbid0IGRvIGFueXRoaW5nIHdpdGggaXQgKi8KKwlpZiAobnRvaHMocHB0cGgtPnBhY2tldFR5cGUpICE9IFBQVFBfUEFDS0VUX0NPTlRST0wgfHwKKwkgICAgbnRvaGwocHB0cGgtPm1hZ2ljQ29va2llKSAhPSBQUFRQX01BR0lDX0NPT0tJRSkgeworCQlERUJVR1AoIm5vdCBhIGNvbnRyb2wgcGFja2V0XG4iKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwlvbGRzc3RhdGUgPSBpbmZvLT5zc3RhdGU7CisJb2xkY3N0YXRlID0gaW5mby0+Y3N0YXRlOworCisJc3Bpbl9sb2NrX2JoKCZpcF9wcHRwX2xvY2spOworCisJLyogRklYTUU6IFdlIGp1c3QgYmxpbmRseSBhc3N1bWUgdGhhdCB0aGUgY29udHJvbCBjb25uZWN0aW9uIGlzIGFsd2F5cworCSAqIGVzdGFibGlzaGVkIGZyb20gUE5TLT5QQUMuICBIb3dldmVyLCBSRkMgbWFrZXMgbm8gZ3VhcmFudGVlICovCisJaWYgKGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpCisJCS8qIGNsaWVudCAtPiBzZXJ2ZXIgKFBOUyAtPiBQQUMpICovCisJCXJldCA9IHBwdHBfb3V0Ym91bmRfcGt0KHBza2IsIHRjcGgsIG5leHRoZHJfb2ZmLCBkYXRhbGVuLCBjdCwKKwkJCQkJY3RpbmZvKTsKKwllbHNlCisJCS8qIHNlcnZlciAtPiBjbGllbnQgKFBBQyAtPiBQTlMpICovCisJCXJldCA9IHBwdHBfaW5ib3VuZF9wa3QocHNrYiwgdGNwaCwgbmV4dGhkcl9vZmYsIGRhdGFsZW4sIGN0LAorCQkJCSAgICAgICBjdGluZm8pOworCURFQlVHUCgic3N0YXRlOiAlZC0+JWQsIGNzdGF0ZTogJWQtPiVkXG4iLAorCQlvbGRzc3RhdGUsIGluZm8tPnNzdGF0ZSwgb2xkY3N0YXRlLCBpbmZvLT5jc3RhdGUpOworCXNwaW5fdW5sb2NrX2JoKCZpcF9wcHRwX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyogY29udHJvbCBwcm90b2NvbCBoZWxwZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgaXBfY29ubnRyYWNrX2hlbHBlciBwcHRwID0geyAKKwkubGlzdCA9IHsgTlVMTCwgTlVMTCB9LAorCS5uYW1lID0gInBwdHAiLCAKKwkubWUgPSBUSElTX01PRFVMRSwKKwkubWF4X2V4cGVjdGVkID0gMiwKKwkudGltZW91dCA9IDUgKiA2MCwKKwkudHVwbGUgPSB7IC5zcmMgPSB7IC5pcCA9IDAsIAorCQkgCSAgICAudSA9IHsgLnRjcCA9IHsgLnBvcnQgPSAgCisJCQkJICAgIF9fY29uc3RhbnRfaHRvbnMoUFBUUF9DT05UUk9MX1BPUlQpIH0gfSAKKwkJCSAgfSwgCisJCSAgIC5kc3QgPSB7IC5pcCA9IDAsIAorCQkJICAgIC51ID0geyAuYWxsID0gMCB9LAorCQkJICAgIC5wcm90b251bSA9IElQUFJPVE9fVENQCisJCQkgIH0gCisJCSB9LAorCS5tYXNrID0geyAuc3JjID0geyAuaXAgPSAwLCAKKwkJCSAgIC51ID0geyAudGNwID0geyAucG9ydCA9IDB4ZmZmZiB9IH0gCisJCQkgfSwgCisJCSAgLmRzdCA9IHsgLmlwID0gMCwgCisJCQkgICAudSA9IHsgLmFsbCA9IDAgfSwKKwkJCSAgIC5wcm90b251bSA9IDB4ZmYgCisJCSAJIH0gCisJCX0sCisJLmhlbHAgPSBjb25udHJhY2tfcHB0cF9oZWxwCit9OworCitleHRlcm4gdm9pZCBfX2V4aXQgaXBfY3RfcHJvdG9fZ3JlX2Zpbmkodm9pZCk7CitleHRlcm4gaW50IF9faW5pdCBpcF9jdF9wcm90b19ncmVfaW5pdCh2b2lkKTsKKworLyogaXBfY29ubnRyYWNrX3BwdHAgaW5pdGlhbGl6YXRpb24gKi8KK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlpbnQgcmV0Y29kZTsKKyAKKwlyZXRjb2RlID0gaXBfY3RfcHJvdG9fZ3JlX2luaXQoKTsKKwlpZiAocmV0Y29kZSA8IDApCisJCXJldHVybiByZXRjb2RlOworCisJREVCVUdQKCIgcmVnaXN0ZXJpbmcgaGVscGVyXG4iKTsKKwlpZiAoKHJldGNvZGUgPSBpcF9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZwcHRwKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgY29ubnRyYWNrIGFwcGxpY2F0aW9uICIKKwkJCQkiaGVscGVyIGZvciBwcHRwOiAlZFxuIiwgcmV0Y29kZSk7CisJCWlwX2N0X3Byb3RvX2dyZV9maW5pKCk7CisJCXJldHVybiByZXRjb2RlOworCX0KKworCXByaW50aygiaXBfY29ubnRyYWNrX3BwdHAgdmVyc2lvbiAlcyBsb2FkZWRcbiIsIElQX0NUX1BQVFBfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJaXBfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKCZwcHRwKTsKKwlpcF9jdF9wcm90b19ncmVfZmluaSgpOworCXByaW50aygiaXBfY29ubnRyYWNrX3BwdHAgdmVyc2lvbiAlcyB1bmxvYWRlZFxuIiwgSVBfQ1RfUFBUUF9WRVJTSU9OKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKworRVhQT1JUX1NZTUJPTChpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kKTsKK0VYUE9SVF9TWU1CT0woaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kKTsKK0VYUE9SVF9TWU1CT0woaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKTsKK0VYUE9SVF9TWU1CT0woaXBfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19pcmMuYwppbmRleCBkN2E4YTk4Li4xNTQ1NzQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAjZGVmaW5lIE1BWF9QT1JUUyA4Ci1zdGF0aWMgaW50IHBvcnRzW01BWF9QT1JUU107CitzdGF0aWMgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTsKIHN0YXRpYyBpbnQgcG9ydHNfYzsKIHN0YXRpYyBpbnQgbWF4X2RjY19jaGFubmVscyA9IDg7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0ID0gMzAwOwpAQCAtNTIsNyArNTIsNyBAQAogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklSQyAoRENDKSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCBpbnQsICZwb3J0c19jLCAwNDAwKTsKK21vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgc2hvcnQsICZwb3J0c19jLCAwNDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocG9ydHMsICJwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnMiKTsKIG1vZHVsZV9wYXJhbShtYXhfZGNjX2NoYW5uZWxzLCBpbnQsIDA0MDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfZGNjX2NoYW5uZWxzLCAibWF4IG51bWJlciBvZiBleHBlY3RlZCBEQ0MgY2hhbm5lbHMgcGVyIElSQyBzZXNzaW9uIik7CkBAIC0yNDAsNyArMjQwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyIGlyY19oZWxwZXJzW01BWF9QT1JUU107Ci1zdGF0aWMgY2hhciBpcmNfbmFtZXNbTUFYX1BPUlRTXVsxMF07CitzdGF0aWMgY2hhciBpcmNfbmFtZXNbTUFYX1BPUlRTXVtzaXplb2YoImlyYy02NTUzNSIpXTsKIAogc3RhdGljIHZvaWQgZmluaSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCBiYjcyNDY2Li43MWVmMTlkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KQEAgLTMxLDYgKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CiAKKyNkZWZpbmUgTk1CRF9QT1JUCTEzNworCiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTmV0QklPUyBuYW1lIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC00NCw3ICs0NSw2IEBACiB7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICgqcHNrYiktPm5oLmlwaDsKLQlzdHJ1Y3QgdWRwaGRyIF91aCwgKnVoOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikoKnBza2IpLT5kc3Q7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXVfaW50MzJfdCBtYXNrID0gMDsKQEAgLTcyLDIwICs3MiwxNSBAQAogCWlmIChtYXNrID09IDApCiAJCWdvdG8gb3V0OwogCi0JdWggPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIGlwaC0+aWhsICogNCwgc2l6ZW9mKF91aCksICZfdWgpOwotCUJVR19PTih1aCA9PSBOVUxMKTsKLQogCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpOwogCWlmIChleHAgPT0gTlVMTCkKIAkJZ290byBvdXQ7Ci0JbWVtc2V0KCZleHAtPnR1cGxlLCAwLCBzaXplb2YoZXhwLT50dXBsZSkpOwotCWV4cC0+dHVwbGUuc3JjLmlwICAgICAgICAgPSBpcGgtPmRhZGRyICYgbWFzazsKLQlleHAtPnR1cGxlLmRzdC5pcCAgICAgICAgID0gaXBoLT5zYWRkcjsKLQlleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0gdWgtPnNvdXJjZTsKLQlleHAtPnR1cGxlLmRzdC5wcm90b251bSAgID0gSVBQUk9UT19VRFA7CiAKLQltZW1zZXQoJmV4cC0+bWFzaywgMCwgc2l6ZW9mKGV4cC0+bWFzaykpOworCWV4cC0+dHVwbGUgICAgICAgICAgICAgICAgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7CisJZXhwLT50dXBsZS5zcmMudS51ZHAucG9ydCA9IG50b2hzKE5NQkRfUE9SVCk7CisKIAlleHAtPm1hc2suc3JjLmlwICAgICAgICAgID0gbWFzazsKKwlleHAtPm1hc2suc3JjLnUudWRwLnBvcnQgID0gMHhGRkZGOwogCWV4cC0+bWFzay5kc3QuaXAgICAgICAgICAgPSAweEZGRkZGRkZGOwogCWV4cC0+bWFzay5kc3QudS51ZHAucG9ydCAgPSAweEZGRkY7CiAJZXhwLT5tYXNrLmRzdC5wcm90b251bSAgICA9IDB4RkY7CkBAIC0xMDcsNyArMTAyLDcgQEAKIAkJLnNyYyA9IHsKIAkJCS51ID0gewogCQkJCS51ZHAgPSB7Ci0JCQkJCS5wb3J0CT0gX19jb25zdGFudF9odG9ucygxMzcpLAorCQkJCQkucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoTk1CRF9QT1JUKSwKIAkJCQl9CiAJCQl9CiAJCX0sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDE1YWVmMzUuLmIwOGE0MzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xMjcwLDcgKzEyNzAsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldCgmdHVwbGUpOworCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZCgmdHVwbGUpOwogCWlmICghZXhwKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAkJCXJldHVybiBlcnI7CiAKIAkJLyogYnVtcCB1c2FnZSBjb3VudCB0byAyICovCi0JCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoJnR1cGxlKTsKKwkJZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKCZ0dXBsZSk7CiAJCWlmICghZXhwKQogCQkJcmV0dXJuIC1FTk9FTlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlM2NiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jIC0gVmVyc2lvbiAzLjAgCisgKgorICogQ29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoZWxwZXIgbW9kdWxlIGZvciBHUkUuCisgKgorICogR1JFIGlzIGEgZ2VuZXJpYyBlbmNhcHN1bGF0aW9uIHByb3RvY29sLCB3aGljaCBpcyBnZW5lcmFsbHkgbm90IHZlcnkKKyAqIHN1aXRlZCBmb3IgTkFULCBhcyBpdCBoYXMgbm8gcHJvdG9jb2wtc3BlY2lmaWMgcGFydCBhcyBwb3J0IG51bWJlcnMuCisgKgorICogSXQgaGFzIGFuIG9wdGlvbmFsIGtleSBmaWVsZCwgd2hpY2ggbWF5IGhlbHAgdXMgZGlzdGluZ3Vpc2hpbmcgdHdvIAorICogY29ubmVjdGlvbnMgYmV0d2VlbiB0aGUgc2FtZSB0d28gaG9zdHMuCisgKgorICogR1JFIGlzIGRlZmluZWQgaW4gUkZDIDE3MDEgYW5kIFJGQyAxNzAyLCBhcyB3ZWxsIGFzIFJGQyAyNzg0IAorICoKKyAqIFBQVFAgaXMgYnVpbHQgb24gdG9wIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBHUkUsIGFuZCBoYXMgYSBtYW5kYXRvcnkKKyAqIGZpZWxkIGNhbGxlZCAiQ2FsbElEIiwgd2hpY2ggc2VydmVzIHVzIGZvciB0aGUgc2FtZSBwdXJwb3NlIGFzIHRoZSBrZXkKKyAqIGZpZWxkIGluIHBsYWluIEdSRS4KKyAqCisgKiBEb2N1bWVudGF0aW9uIGFib3V0IFBQVFAgY2FuIGJlIGZvdW5kIGluIFJGQyAyNjM3CisgKgorICogKEMpIDIwMDAtMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqIERldmVsb3BtZW50IG9mIHRoaXMgY29kZSBmdW5kZWQgYnkgQXN0YXJvIEFHIChodHRwOi8vd3d3LmFzdGFyby5jb20vKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0YXRpYyBERUZJTkVfUldMT0NLKGlwX2N0X2dyZV9sb2NrKTsKKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQorI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NvcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHB0cC5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoZWxwZXIgZm9yIEdSRSIpOworCisvKiBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBpcF9jb25udHJhY2tfcHJvdG9fdWRwLmMgKi8KKyNkZWZpbmUgR1JFX1RJTUVPVVQJCSgzMCpIWikKKyNkZWZpbmUgR1JFX1NUUkVBTV9USU1FT1VUCSgxODAqSFopCisKKyNpZiAwCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhLRVJOX0RFQlVHICIlczolczogIiBmb3JtYXQsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCisjZGVmaW5lIERVTVBfVFVQTEVfR1JFKHgpIHByaW50aygiJXUuJXUuJXUuJXU6MHgleCAtPiAldS4ldS4ldS4ldToweCV4XG4iLCBcCisJCQlOSVBRVUFEKCh4KS0+c3JjLmlwKSwgbnRvaHMoKHgpLT5zcmMudS5ncmUua2V5KSwgXAorCQkJTklQUVVBRCgoeCktPmRzdC5pcCksIG50b2hzKCh4KS0+ZHN0LnUuZ3JlLmtleSkpCisjZWxzZQorI2RlZmluZSBERUJVR1AoeCwgYXJncy4uLikKKyNkZWZpbmUgRFVNUF9UVVBMRV9HUkUoeCkKKyNlbmRpZgorCQkJCQorLyogR1JFIEtFWU1BUCBIQU5ETElORyBGVU5DVElPTlMgKi8KK3N0YXRpYyBMSVNUX0hFQUQoZ3JlX2tleW1hcF9saXN0KTsKKworc3RhdGljIGlubGluZSBpbnQgZ3JlX2tleV9jbXBmbihjb25zdCBzdHJ1Y3QgaXBfY3RfZ3JlX2tleW1hcCAqa20sCisJCQkJY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdCkKK3sKKwlyZXR1cm4gKChrbS0+dHVwbGUuc3JjLmlwID09IHQtPnNyYy5pcCkgJiYKKwkJKGttLT50dXBsZS5kc3QuaXAgPT0gdC0+ZHN0LmlwKSAmJgorCQkoa20tPnR1cGxlLmRzdC5wcm90b251bSA9PSB0LT5kc3QucHJvdG9udW0pICYmCisJCShrbS0+dHVwbGUuZHN0LnUuYWxsID09IHQtPmRzdC51LmFsbCkpOworfQorCisvKiBsb29rIHVwIHRoZSBzb3VyY2Uga2V5IGZvciBhIGdpdmVuIHR1cGxlICovCitzdGF0aWMgdV9pbnQzMl90IGdyZV9rZXltYXBfbG9va3VwKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQpCit7CisJc3RydWN0IGlwX2N0X2dyZV9rZXltYXAgKmttOworCXVfaW50MzJfdCBrZXkgPSAwOworCisJcmVhZF9sb2NrX2JoKCZpcF9jdF9ncmVfbG9jayk7CisJa20gPSBMSVNUX0ZJTkQoJmdyZV9rZXltYXBfbGlzdCwgZ3JlX2tleV9jbXBmbiwKKwkJCXN0cnVjdCBpcF9jdF9ncmVfa2V5bWFwICosIHQpOworCWlmIChrbSkKKwkJa2V5ID0ga20tPnR1cGxlLnNyYy51LmdyZS5rZXk7CisJcmVhZF91bmxvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKKwkKKwlERUJVR1AoImxvb2t1cCBzcmMga2V5IDB4JXggdXAga2V5IGZvciAiLCBrZXkpOworCURVTVBfVFVQTEVfR1JFKHQpOworCisJcmV0dXJuIGtleTsKK30KKworLyogYWRkIGEgc2luZ2xlIGtleW1hcCBlbnRyeSwgYXNzb2NpYXRlIHdpdGggc3BlY2lmaWVkIG1hc3RlciBjdCAqLworaW50CitpcF9jdF9ncmVfa2V5bWFwX2FkZChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0LCBpbnQgcmVwbHkpCit7CisJc3RydWN0IGlwX2N0X2dyZV9rZXltYXAgKipleGlzdF9rbSwgKmttLCAqb2xkOworCisJaWYgKCFjdC0+aGVscGVyIHx8IHN0cmNtcChjdC0+aGVscGVyLT5uYW1lLCAicHB0cCIpKSB7CisJCURFQlVHUCgicmVmdXNpbmcgdG8gYWRkIEdSRSBrZXltYXAgdG8gbm9uLXBwdHAgc2Vzc2lvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIXJlcGx5KSAKKwkJZXhpc3Rfa20gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9vcmlnOworCWVsc2UKKwkJZXhpc3Rfa20gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9yZXBseTsKKworCWlmICgqZXhpc3Rfa20pIHsKKwkJLyogY2hlY2sgd2hldGhlciBpdCdzIGEgcmV0cmFuc21pc3Npb24gKi8KKwkJb2xkID0gTElTVF9GSU5EKCZncmVfa2V5bWFwX2xpc3QsIGdyZV9rZXlfY21wZm4sCisJCQkJc3RydWN0IGlwX2N0X2dyZV9rZXltYXAgKiwgdCk7CisJCWlmIChvbGQgPT0gKmV4aXN0X2ttKSB7CisJCQlERUJVR1AoInJldHJhbnNtaXNzaW9uXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJREVCVUdQKCJ0cnlpbmcgdG8gb3ZlcnJpZGUga2V5bWFwXyVzIGZvciBjdCAlcFxuIiwgCisJCQlyZXBseT8gInJlcGx5Ijoib3JpZyIsIGN0KTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJa20gPSBrbWFsbG9jKHNpemVvZigqa20pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWttKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweSgma20tPnR1cGxlLCB0LCBzaXplb2YoKnQpKTsKKwkqZXhpc3Rfa20gPSBrbTsKKworCURFQlVHUCgiYWRkaW5nIG5ldyBlbnRyeSAlcDogIiwga20pOworCURVTVBfVFVQTEVfR1JFKCZrbS0+dHVwbGUpOworCisJd3JpdGVfbG9ja19iaCgmaXBfY3RfZ3JlX2xvY2spOworCWxpc3RfYXBwZW5kKCZncmVfa2V5bWFwX2xpc3QsIGttKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKiBkZXN0cm95IHRoZSBrZXltYXAgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggc3BlY2lmaWVkIG1hc3RlciBjdCAqLwordm9pZCBpcF9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3koc3RydWN0IGlwX2Nvbm50cmFjayAqY3QpCit7CisJREVCVUdQKCJlbnRlcmluZyBmb3IgY3QgJXBcbiIsIGN0KTsKKworCWlmICghY3QtPmhlbHBlciB8fCBzdHJjbXAoY3QtPmhlbHBlci0+bmFtZSwgInBwdHAiKSkgeworCQlERUJVR1AoInJlZnVzaW5nIHRvIGRlc3Ryb3kgR1JFIGtleW1hcCB0byBub24tcHB0cCBzZXNzaW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlX2xvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKKwlpZiAoY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9vcmlnKSB7CisJCURFQlVHUCgicmVtb3ZpbmcgJXAgZnJvbSBsaXN0XG4iLCAKKwkJCWN0LT5oZWxwLmN0X3BwdHBfaW5mby5rZXltYXBfb3JpZyk7CisJCWxpc3RfZGVsKCZjdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX29yaWctPmxpc3QpOworCQlrZnJlZShjdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX29yaWcpOworCQljdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX29yaWcgPSBOVUxMOworCX0KKwlpZiAoY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9yZXBseSkgeworCQlERUJVR1AoInJlbW92aW5nICVwIGZyb20gbGlzdFxuIiwKKwkJCWN0LT5oZWxwLmN0X3BwdHBfaW5mby5rZXltYXBfcmVwbHkpOworCQlsaXN0X2RlbCgmY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9yZXBseS0+bGlzdCk7CisJCWtmcmVlKGN0LT5oZWxwLmN0X3BwdHBfaW5mby5rZXltYXBfcmVwbHkpOworCQljdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX3JlcGx5ID0gTlVMTDsKKwl9CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9jdF9ncmVfbG9jayk7Cit9CisKKworLyogUFVCTElDIENPTk5UUkFDSyBQUk9UTyBIRUxQRVIgRlVOQ1RJT05TICovCisKKy8qIGludmVydCBncmUgcGFydCBvZiB0dXBsZSAqLworc3RhdGljIGludCBncmVfaW52ZXJ0X3R1cGxlKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm9yaWcpCit7CisJdHVwbGUtPmRzdC51LmdyZS5rZXkgPSBvcmlnLT5zcmMudS5ncmUua2V5OworCXR1cGxlLT5zcmMudS5ncmUua2V5ID0gb3JpZy0+ZHN0LnUuZ3JlLmtleTsKKworCXJldHVybiAxOworfQorCisvKiBncmUgaGRyIGluZm8gdG8gdHVwbGUgKi8KK3N0YXRpYyBpbnQgZ3JlX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlzdHJ1Y3QgZ3JlX2hkcl9wcHRwIF9wZ3JlaGRyLCAqcGdyZWhkcjsKKwl1X2ludDMyX3Qgc3Jja2V5OworCXN0cnVjdCBncmVfaGRyIF9ncmVoZHIsICpncmVoZHI7CisKKwkvKiBmaXJzdCBvbmx5IGRlbGluZWFyaXplIG9sZCBSRkMxNzAxIEdSRSBoZWFkZXIgKi8KKwlncmVoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBkYXRhb2ZmLCBzaXplb2YoX2dyZWhkciksICZfZ3JlaGRyKTsKKwlpZiAoIWdyZWhkciB8fCBncmVoZHItPnZlcnNpb24gIT0gR1JFX1ZFUlNJT05fUFBUUCkgeworCQkvKiB0cnkgdG8gYmVoYXZlIGxpa2UgImlwX2Nvbm50cmFja19wcm90b19nZW5lcmljIiAqLworCQl0dXBsZS0+c3JjLnUuYWxsID0gMDsKKwkJdHVwbGUtPmRzdC51LmFsbCA9IDA7CisJCXJldHVybiAxOworCX0KKworCS8qIFBQVFAgaGVhZGVyIGlzIHZhcmlhYmxlIGxlbmd0aCwgb25seSBuZWVkIHVwIHRvIHRoZSBjYWxsX2lkIGZpZWxkICovCisJcGdyZWhkciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIDgsICZfcGdyZWhkcik7CisJaWYgKCFwZ3JlaGRyKQorCQlyZXR1cm4gMTsKKworCWlmIChudG9ocyhncmVoZHItPnByb3RvY29sKSAhPSBHUkVfUFJPVE9DT0xfUFBUUCkgeworCQlERUJVR1AoIkdSRV9WRVJTSU9OX1BQVFAgYnV0IHVua25vd24gcHJvdG9cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0dXBsZS0+ZHN0LnUuZ3JlLmtleSA9IHBncmVoZHItPmNhbGxfaWQ7CisJc3Jja2V5ID0gZ3JlX2tleW1hcF9sb29rdXAodHVwbGUpOworCXR1cGxlLT5zcmMudS5ncmUua2V5ID0gc3Jja2V5OworCisJcmV0dXJuIDE7Cit9CisKKy8qIHByaW50IGdyZSBwYXJ0IG9mIHR1cGxlICovCitzdGF0aWMgaW50IGdyZV9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3Jja2V5PTB4JXggZHN0a2V5PTB4JXggIiwgCisJCQkgIG50b2hzKHR1cGxlLT5zcmMudS5ncmUua2V5KSwKKwkJCSAgbnRvaHModHVwbGUtPmRzdC51LmdyZS5rZXkpKTsKK30KKworLyogcHJpbnQgcHJpdmF0ZSBkYXRhIGZvciBjb25udHJhY2sgKi8KK3N0YXRpYyBpbnQgZ3JlX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QpCit7CisJcmV0dXJuIHNlcV9wcmludGYocywgInRpbWVvdXQ9JXUsIHN0cmVhbV90aW1lb3V0PSV1ICIsCisJCQkgIChjdC0+cHJvdG8uZ3JlLnRpbWVvdXQgLyBIWiksCisJCQkgIChjdC0+cHJvdG8uZ3JlLnN0cmVhbV90aW1lb3V0IC8gSFopKTsKK30KKworLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIGFuZCBtYXkgbW9kaWZ5IGNvbm50cmFjayAqLworc3RhdGljIGludCBncmVfcGFja2V0KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pCit7CisJLyogSWYgd2UndmUgc2VlbiB0cmFmZmljIGJvdGggd2F5cywgdGhpcyBpcyBhIEdSRSBjb25uZWN0aW9uLgorCSAqIEV4dGVuZCB0aW1lb3V0LiAqLworCWlmIChjdC0+c3RhdHVzICYgSVBTX1NFRU5fUkVQTFkpIHsKKwkJaXBfY3RfcmVmcmVzaF9hY2N0KGN0LCBjb25udHJhY2tpbmZvLCBza2IsCisJCQkJICAgY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCk7CisJCS8qIEFsc28sIG1vcmUgbGlrZWx5IHRvIGJlIGltcG9ydGFudCwgYW5kIG5vdCBhIHByb2JlLiAqLworCQlzZXRfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpOworCX0gZWxzZQorCQlpcF9jdF9yZWZyZXNoX2FjY3QoY3QsIGNvbm50cmFja2luZm8sIHNrYiwKKwkJCQkgICBjdC0+cHJvdG8uZ3JlLnRpbWVvdXQpOworCQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKKy8qIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQuICovCitzdGF0aWMgaW50IGdyZV9uZXcoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7IAorCURFQlVHUCgiOiAiKTsKKwlEVU1QX1RVUExFX0dSRSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKKworCS8qIGluaXRpYWxpemUgdG8gc2FuZSB2YWx1ZS4gIElkZWFsbHkgYSBjb25udHJhY2sgaGVscGVyCisJICogKGUuZy4gaW4gY2FzZSBvZiBwcHRwKSBpcyBpbmNyZWFzaW5nIHRoZW0gKi8KKwljdC0+cHJvdG8uZ3JlLnN0cmVhbV90aW1lb3V0ID0gR1JFX1NUUkVBTV9USU1FT1VUOworCWN0LT5wcm90by5ncmUudGltZW91dCA9IEdSRV9USU1FT1VUOworCisJcmV0dXJuIDE7Cit9CisKKy8qIENhbGxlZCB3aGVuIGEgY29ubnRyYWNrIGVudHJ5IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBoYXNoZXMKKyAqIGFuZCBpcyBhYm91dCB0byBiZSBkZWxldGVkIGZyb20gbWVtb3J5ICovCitzdGF0aWMgdm9pZCBncmVfZGVzdHJveShzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCkKK3sKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrICptYXN0ZXIgPSBjdC0+bWFzdGVyOworCURFQlVHUCgiIGVudGVyaW5nXG4iKTsKKworCWlmICghbWFzdGVyKQorCQlERUJVR1AoIm5vIG1hc3RlciAhPyFcbiIpOworCWVsc2UKKwkJaXBfY3RfZ3JlX2tleW1hcF9kZXN0cm95KG1hc3Rlcik7Cit9CisKKy8qIHByb3RvY29sIGhlbHBlciBzdHJ1Y3QgKi8KK3N0YXRpYyBzdHJ1Y3QgaXBfY29ubnRyYWNrX3Byb3RvY29sIGdyZSA9IHsgCisJLnByb3RvCQkgPSBJUFBST1RPX0dSRSwKKwkubmFtZQkJID0gImdyZSIsIAorCS5wa3RfdG9fdHVwbGUJID0gZ3JlX3BrdF90b190dXBsZSwKKwkuaW52ZXJ0X3R1cGxlCSA9IGdyZV9pbnZlcnRfdHVwbGUsCisJLnByaW50X3R1cGxlCSA9IGdyZV9wcmludF90dXBsZSwKKwkucHJpbnRfY29ubnRyYWNrID0gZ3JlX3ByaW50X2Nvbm50cmFjaywKKwkucGFja2V0CQkgPSBncmVfcGFja2V0LAorCS5uZXcJCSA9IGdyZV9uZXcsCisJLmRlc3Ryb3kJID0gZ3JlX2Rlc3Ryb3ksCisJLm1lIAkJID0gVEhJU19NT0RVTEUsCisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTkspIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOS19NT0RVTEUpCisJLnR1cGxlX3RvX25mYXR0ciA9IGlwX2N0X3BvcnRfdHVwbGVfdG9fbmZhdHRyLAorCS5uZmF0dHJfdG9fdHVwbGUgPSBpcF9jdF9wb3J0X25mYXR0cl90b190dXBsZSwKKyNlbmRpZgorfTsKKworLyogaXBfY29ubnRyYWNrX3Byb3RvX2dyZSBpbml0aWFsaXphdGlvbiAqLworaW50IF9faW5pdCBpcF9jdF9wcm90b19ncmVfaW5pdCh2b2lkKQoreworCXJldHVybiBpcF9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJmdyZSk7Cit9CisKK3ZvaWQgX19leGl0IGlwX2N0X3Byb3RvX2dyZV9maW5pKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbjsKKworCS8qIGRlbGV0ZSBhbGwga2V5bWFwIGVudHJpZXMgKi8KKwl3cml0ZV9sb2NrX2JoKCZpcF9jdF9ncmVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgJmdyZV9rZXltYXBfbGlzdCkgeworCQlERUJVR1AoImRlbGV0aW5nIGtleW1hcCAlcCBhdCBtb2R1bGUgdW5sb2FkIHRpbWVcbiIsIHBvcyk7CisJCWxpc3RfZGVsKHBvcyk7CisJCWtmcmVlKHBvcyk7CisJfQorCXdyaXRlX3VubG9ja19iaCgmaXBfY3RfZ3JlX2xvY2spOworCisJaXBfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJmdyZSk7IAorfQorCitFWFBPUlRfU1lNQk9MKGlwX2N0X2dyZV9rZXltYXBfYWRkKTsKK0VYUE9SVF9TWU1CT0woaXBfY3RfZ3JlX2tleW1hcF9kZXN0cm95KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggYWUzZTNlNi4uZDNjNzgwOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTk5MywxMSArOTkzLDExIEBACiAKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyk7CiBFWFBPUlRfU1lNQk9MKGlwX2Nvbm50cmFja19leHBlY3RfcHV0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlwX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQpOworRVhQT1JUX1NZTUJPTF9HUEwoX19pcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKTsKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKTsKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX2V4cGVjdF9saXN0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKF9faXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlwX2N0X3VubGlua19leHBlY3QpOwogCiBFWFBPUlRfU1lNQk9MKGlwX2Nvbm50cmFja190dXBsZV90YWtlbik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3RmdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfdGZ0cC5jCmluZGV4IGQyYjU5MDUuLmE3ODczNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfdGZ0cC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfdGZ0cC5jCkBAIC0yNiw5ICsyNiw5IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyBpbnQgcG9ydHNbTUFYX1BPUlRTXTsKK3N0YXRpYyBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdOwogc3RhdGljIGludCBwb3J0c19jOwotbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCBpbnQsICZwb3J0c19jLCAwNDAwKTsKK21vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgc2hvcnQsICZwb3J0c19jLCAwNDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocG9ydHMsICJwb3J0IG51bWJlcnMgb2YgdGZ0cCBzZXJ2ZXJzIik7CiAKICNpZiAwCkBAIC0xMDAsNyArMTAwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyIHRmdHBbTUFYX1BPUlRTXTsKLXN0YXRpYyBjaGFyIHRmdHBfbmFtZXNbTUFYX1BPUlRTXVsxMF07CitzdGF0aWMgY2hhciB0ZnRwX25hbWVzW01BWF9QT1JUU11bc2l6ZW9mKCJ0ZnRwLTY1NTM1IildOwogCiBzdGF0aWMgdm9pZCBmaW5pKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jCmluZGV4IDFhZGVkYjcuLmMzZWE4OTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jCkBAIC01NzgsNiArNTc4LDggQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpcF9uYXRfcG9ydF9uZmF0dHJfdG9fcmFuZ2UpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBfbmF0X3BvcnRfcmFuZ2VfdG9fbmZhdHRyKTsKICNlbmRpZgogCiBpbnQgX19pbml0IGlwX25hdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkZDA2OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX3BwdHAuYwpAQCAtMCwwICsxLDQwMSBAQAorLyoKKyAqIGlwX25hdF9wcHRwLmMJLSBWZXJzaW9uIDMuMAorICoKKyAqIE5BVCBzdXBwb3J0IGZvciBQUFRQIChQb2ludCB0byBQb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wpLgorICogUFBUUCBpcyBhIGEgcHJvdG9jb2wgZm9yIGNyZWF0aW5nIHZpcnR1YWwgcHJpdmF0ZSBuZXR3b3Jrcy4KKyAqIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiBkZWZpbmVkIGJ5IE1pY3Jvc29mdCBhbmQgc29tZSB2ZW5kb3JzCisgKiB3b3JraW5nIHdpdGggTWljcm9zb2Z0LiAgUFBUUCBpcyBidWlsdCBvbiB0b3Agb2YgYSBtb2RpZmllZAorICogdmVyc2lvbiBvZiB0aGUgSW50ZXJuZXQgR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gUHJvdG9jb2wuCisgKiBHUkUgaXMgZGVmaW5lZCBpbiBSRkMgMTcwMSBhbmQgUkZDIDE3MDIuICBEb2N1bWVudGF0aW9uIG9mCisgKiBQUFRQIGNhbiBiZSBmb3VuZCBpbiBSRkMgMjYzNworICoKKyAqIChDKSAyMDAwLTIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqCisgKiBEZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgZnVuZGVkIGJ5IEFzdGFybyBBRyAoaHR0cDovL3d3dy5hc3Rhcm8uY29tLykKKyAqCisgKiBUT0RPOiAtIE5BVCB0byBhIHVuaXF1ZSB0dXBsZSwgbm90IHRvIFRDUCBzb3VyY2UgcG9ydAorICogCSAgIChuZWVkcyBuZXRmaWx0ZXIgdHVwbGUgcmVzZXJ2YXRpb24pCisgKgorICogQ2hhbmdlczoKKyAqICAgICAyMDAyLTAyLTEwIC0gVmVyc2lvbiAxLjMKKyAqICAgICAgIC0gVXNlIGlwX25hdF9tYW5nbGVfdGNwX3BhY2tldCgpIGJlY2F1c2Ugb2YgY2xvbmVkIHNrYidzCisgKgkgICBpbiBsb2NhbCBjb25uZWN0aW9ucyAoUGhpbGlwIENyYWlnIDxwaGlsaXBjQHNuYXBnZWFyLmNvbT4pCisgKiAgICAgICAtIGFkZCBjaGVja3MgZm9yIG1hZ2ljQ29va2llIGFuZCBwcHRwIHZlcnNpb24KKyAqICAgICAgIC0gbWFrZSBhcmd1bWVudCBsaXN0IG9mIHBwdHBfe291dCxpbn1ib3VuZF9wYWNrZXQoKSBzaG9ydGVyCisgKiAgICAgICAtIG1vdmUgdG8gQzk5IHN0eWxlIGluaXRpYWxpemVycworICogICAgICAgLSBwcmludCB2ZXJzaW9uIG51bWJlciBhdCBtb2R1bGUgbG9hZHRpbWUKKyAqICAgICAyMDAzLTA5LTIyIC0gVmVyc2lvbiAxLjUKKyAqICAgICAgIC0gdXNlIFNOQVRlZCB0Y3Agc291cmNlcG9ydCBhcyBjYWxsaWQsIHNpbmNlIHdlIGdldCBjYWxsZWQgYmVmb3JlCisgKgkgICBUQ1AgaGVhZGVyIGlzIG1hbmdsZWQgKFBoaWxpcCBDcmFpZyA8cGhpbGlwY0BzbmFwZ2Vhci5jb20+KQorICogICAgIDIwMDQtMTAtMjIgLSBWZXJzaW9uIDIuMAorICogICAgICAgLSBrZXJuZWwgMi42LnggdmVyc2lvbgorICogICAgIDIwMDUtMDYtMTAgLSBWZXJzaW9uIDMuMAorICogICAgICAgLSBrZXJuZWwgPj0gMi42LjExIHZlcnNpb24sCisgKgkgICBmdW5kZWQgYnkgT3hjb2RhIE5ldEJveCBCbHVlIChodHRwOi8vd3d3Lm5ldGJveGJsdWUuY29tLykKKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9wcHRwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcHRwLmg+CisKKyNkZWZpbmUgSVBfTkFUX1BQVFBfVkVSU0lPTiAiMy4wIgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRmaWx0ZXIgTkFUIGhlbHBlciBtb2R1bGUgZm9yIFBQVFAiKTsKKworCisjaWYgMAorZXh0ZXJuIGNvbnN0IGNoYXIgKnBwdHBfbXNnX25hbWVbXTsKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzOiAiIGZvcm1hdCwgX19GSUxFX18sIFwKKwkJCQkgICAgICAgX19GVU5DVElPTl9fLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcHRwX25hdF9leHBlY3RlZChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJc3RydWN0IGlwX2Nvbm50cmFjayAqbWFzdGVyID0gY3QtPm1hc3RlcjsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqb3RoZXJfZXhwOworCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgdDsKKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmN0X3BwdHBfaW5mbzsKKwlzdHJ1Y3QgaXBfbmF0X3BwdHAgKm5hdF9wcHRwX2luZm87CisKKwljdF9wcHRwX2luZm8gPSAmbWFzdGVyLT5oZWxwLmN0X3BwdHBfaW5mbzsKKwluYXRfcHB0cF9pbmZvID0gJm1hc3Rlci0+bmF0LmhlbHAubmF0X3BwdHBfaW5mbzsKKworCS8qIEFuZCBoZXJlIGdvZXMgdGhlIGdyYW5kIGZpbmFsZSBvZiBjb3Jyb3Npb24uLi4gKi8KKworCWlmIChleHAtPmRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpIHsKKwkJREVCVUdQKCJ3ZSBhcmUgUE5TLT5QQUNcbiIpOworCQkvKiB0aGVyZWZvcmUsIGJ1aWxkIHR1cGxlIGZvciBQQUMtPlBOUyAqLworCQl0LnNyYy5pcCA9IG1hc3Rlci0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLmlwOworCQl0LnNyYy51LmdyZS5rZXkgPSBodG9ucyhtYXN0ZXItPmhlbHAuY3RfcHB0cF9pbmZvLnBhY19jYWxsX2lkKTsKKwkJdC5kc3QuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC5pcDsKKwkJdC5kc3QudS5ncmUua2V5ID0gaHRvbnMobWFzdGVyLT5oZWxwLmN0X3BwdHBfaW5mby5wbnNfY2FsbF9pZCk7CisJCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CisJfSBlbHNlIHsKKwkJREVCVUdQKCJ3ZSBhcmUgUEFDLT5QTlNcbiIpOworCQkvKiBidWlsZCB0dXBsZSBmb3IgUE5TLT5QQUMgKi8KKwkJdC5zcmMuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5pcDsKKwkJdC5zcmMudS5ncmUua2V5ID0gCisJCQlodG9ucyhtYXN0ZXItPm5hdC5oZWxwLm5hdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQpOworCQl0LmRzdC5pcCA9IG1hc3Rlci0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LmlwOworCQl0LmRzdC51LmdyZS5rZXkgPSAKKwkJCWh0b25zKG1hc3Rlci0+bmF0LmhlbHAubmF0X3BwdHBfaW5mby5wYWNfY2FsbF9pZCk7CisJCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CisJfQorCisJREVCVUdQKCJ0cnlpbmcgdG8gdW5leHBlY3Qgb3RoZXIgZGlyOiAiKTsKKwlEVU1QX1RVUExFKCZ0KTsKKwlvdGhlcl9leHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQoJnQpOworCWlmIChvdGhlcl9leHApIHsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQob3RoZXJfZXhwKTsKKwkJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQob3RoZXJfZXhwKTsKKwkJREVCVUdQKCJzdWNjZXNzXG4iKTsKKwl9IGVsc2UgeworCQlERUJVR1AoIm5vdCBmb3VuZCFcbiIpOworCX0KKworCWlwX25hdF9mb2xsb3dfbWFzdGVyKGN0LCBleHApOworfQorCisvKiBvdXRib3VuZCBwYWNrZXRzID09IGZyb20gUE5TIHRvIFBBQyAqLworc3RhdGljIGludAorcHB0cF9vdXRib3VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJICB1bmlvbiBwcHRwX2N0cmxfdW5pb24gKnBwdHBSZXEpCisKK3sKKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmN0X3BwdHBfaW5mbyA9ICZjdC0+aGVscC5jdF9wcHRwX2luZm87CisJc3RydWN0IGlwX25hdF9wcHRwICpuYXRfcHB0cF9pbmZvID0gJmN0LT5uYXQuaGVscC5uYXRfcHB0cF9pbmZvOworCisJdV9pbnQxNl90IG1zZywgKmNpZCA9IE5VTEwsIG5ld19jYWxsaWQ7CisKKwluZXdfY2FsbGlkID0gaHRvbnMoY3RfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZCk7CisJCisJc3dpdGNoIChtc2cgPSBudG9ocyhjdGxoLT5tZXNzYWdlVHlwZSkpIHsKKwkJY2FzZSBQUFRQX09VVF9DQUxMX1JFUVVFU1Q6CisJCQljaWQgPSAmcHB0cFJlcS0+b2NyZXEuY2FsbElEOworCQkJLyogRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgd2FudCB0byByZXNlcnZlIGEgY2FsbCBJRAorCQkJICogaGVyZS4gIGN1cnJlbnQgbmV0ZmlsdGVyIE5BVCBjb3JlIGlzIG5vdCBhYmxlIHRvIGRvCisJCQkgKiB0aGlzIDooIEZvciBub3cgd2UgdXNlIFRDUCBzb3VyY2UgcG9ydC4gVGhpcyBicmVha3MKKwkJCSAqIG11bHRpcGxlIGNhbGxzIHdpdGhpbiBvbmUgY29udHJvbCBzZXNzaW9uICovCisKKwkJCS8qIHNhdmUgb3JpZ2luYWwgY2FsbCBJRCBpbiBuYXRfaW5mbyAqLworCQkJbmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQgPSBjdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkOworCisJCQkvKiBkb24ndCB1c2UgdGNwaC0+c291cmNlIHNpbmNlIHdlIGFyZSBhdCBhIERTVG1hbmlwCisJCQkgKiBob29rIChlLmcuIFBSRVJPVVRJTkcpIGFuZCBwa3QgaXMgbm90IG1hbmdsZWQgeWV0ICovCisJCQluZXdfY2FsbGlkID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC51LnRjcC5wb3J0OworCisJCQkvKiBzYXZlIG5ldyBjYWxsIElEIGluIGN0IGluZm8gKi8KKwkJCWN0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQgPSBudG9ocyhuZXdfY2FsbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIFBQVFBfSU5fQ0FMTF9SRVBMWToKKwkJCWNpZCA9ICZwcHRwUmVxLT5pY3JlcS5jYWxsSUQ7CisJCQlicmVhazsKKwkJY2FzZSBQUFRQX0NBTExfQ0xFQVJfUkVRVUVTVDoKKwkJCWNpZCA9ICZwcHRwUmVxLT5jbHJyZXEuY2FsbElEOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVR1AoInVua25vd24gb3V0Ym91bmQgcGFja2V0IDB4JTA0eDolc1xuIiwgbXNnLAorCQkJICAgICAgKG1zZyA8PSBQUFRQX01TR19NQVgpPyAKKwkJCSAgICAgIHBwdHBfbXNnX25hbWVbbXNnXTpwcHRwX21zZ19uYW1lWzBdKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCWNhc2UgUFBUUF9TRVRfTElOS19JTkZPOgorCQkJLyogb25seSBuZWVkIHRvIE5BVCBpbiBjYXNlIFBBQyBpcyBiZWhpbmQgTkFUIGJveCAqLworCQljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVFVRVNUOgorCQljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVBMWToKKwkJY2FzZSBQUFRQX1NUT1BfU0VTU0lPTl9SRVFVRVNUOgorCQljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZOgorCQljYXNlIFBQVFBfRUNIT19SRVFVRVNUOgorCQljYXNlIFBQVFBfRUNIT19SRVBMWToKKwkJCS8qIG5vIG5lZWQgdG8gYWx0ZXIgcGFja2V0ICovCisJCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCS8qIG9ubHkgT1VUX0NBTExfUkVRVUVTVCwgSU5fQ0FMTF9SRVBMWSwgQ0FMTF9DTEVBUl9SRVFVRVNUIHBhc3MKKwkgKiBkb3duIHRvIGhlcmUgKi8KKworCUlQX05GX0FTU0VSVChjaWQpOworCisJREVCVUdQKCJhbHRlcmluZyBjYWxsIGlkIGZyb20gMHglMDR4IHRvIDB4JTA0eFxuIiwKKwkJbnRvaHMoKmNpZCksIG50b2hzKG5ld19jYWxsaWQpKTsKKworCS8qIG1hbmdsZSBwYWNrZXQgKi8KKwlpZiAoaXBfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sCisJCSh2b2lkICopY2lkIC0gKCh2b2lkICopY3RsaCAtIHNpemVvZihzdHJ1Y3QgcHB0cF9wa3RfaGRyKSksCisJCQkJIAlzaXplb2YobmV3X2NhbGxpZCksIAorCQkJCQkoY2hhciAqKSZuZXdfY2FsbGlkLAorCQkJCSAJc2l6ZW9mKG5ld19jYWxsaWQpKSA9PSAwKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBpbnQKK3BwdHBfZXhwX2dyZShzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0X29yaWcsCisJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0X3JlcGx5KQoreworCXN0cnVjdCBpcF9jdF9wcHRwX21hc3RlciAqY3RfcHB0cF9pbmZvID0gCisJCQkJJmV4cGVjdF9vcmlnLT5tYXN0ZXItPmhlbHAuY3RfcHB0cF9pbmZvOworCXN0cnVjdCBpcF9uYXRfcHB0cCAqbmF0X3BwdHBfaW5mbyA9IAorCQkJCSZleHBlY3Rfb3JpZy0+bWFzdGVyLT5uYXQuaGVscC5uYXRfcHB0cF9pbmZvOworCisJc3RydWN0IGlwX2Nvbm50cmFjayAqY3QgPSBleHBlY3Rfb3JpZy0+bWFzdGVyOworCisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSBpbnZfdDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICpvcmlnX3QsICpyZXBseV90OworCisJLyogc2F2ZSBvcmlnaW5hbCBQQUMgY2FsbCBJRCBpbiBuYXRfaW5mbyAqLworCW5hdF9wcHRwX2luZm8tPnBhY19jYWxsX2lkID0gY3RfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZDsKKworCS8qIGFsdGVyIGV4cGVjdGF0aW9uICovCisJb3JpZ190ID0gJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTsKKwlyZXBseV90ID0gJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZTsKKworCS8qIGFsdGVyIGV4cGVjdGF0aW9uIGZvciBQTlMtPlBBQyBkaXJlY3Rpb24gKi8KKwlpbnZlcnRfdHVwbGVwcigmaW52X3QsICZleHBlY3Rfb3JpZy0+dHVwbGUpOworCWV4cGVjdF9vcmlnLT5zYXZlZF9wcm90by5ncmUua2V5ID0gaHRvbnMobmF0X3BwdHBfaW5mby0+cGFjX2NhbGxfaWQpOworCWV4cGVjdF9vcmlnLT50dXBsZS5zcmMudS5ncmUua2V5ID0gaHRvbnMobmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQpOworCWV4cGVjdF9vcmlnLT50dXBsZS5kc3QudS5ncmUua2V5ID0gaHRvbnMoY3RfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZCk7CisJaW52X3Quc3JjLmlwID0gcmVwbHlfdC0+c3JjLmlwOworCWludl90LmRzdC5pcCA9IHJlcGx5X3QtPmRzdC5pcDsKKwlpbnZfdC5zcmMudS5ncmUua2V5ID0gaHRvbnMobmF0X3BwdHBfaW5mby0+cGFjX2NhbGxfaWQpOworCWludl90LmRzdC51LmdyZS5rZXkgPSBodG9ucyhjdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkKTsKKworCWlmICghaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cGVjdF9vcmlnKSkgeworCQlERUJVR1AoInN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIGV4cGVjdFxuIik7CisJfSBlbHNlIHsKKwkJREVCVUdQKCJjYW4ndCBleHBlY3RfcmVsYXRlZChleHBlY3Rfb3JpZylcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBhbHRlciBleHBlY3RhdGlvbiBmb3IgUEFDLT5QTlMgZGlyZWN0aW9uICovCisJaW52ZXJ0X3R1cGxlcHIoJmludl90LCAmZXhwZWN0X3JlcGx5LT50dXBsZSk7CisJZXhwZWN0X3JlcGx5LT5zYXZlZF9wcm90by5ncmUua2V5ID0gaHRvbnMobmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQpOworCWV4cGVjdF9yZXBseS0+dHVwbGUuc3JjLnUuZ3JlLmtleSA9IGh0b25zKG5hdF9wcHRwX2luZm8tPnBhY19jYWxsX2lkKTsKKwlleHBlY3RfcmVwbHktPnR1cGxlLmRzdC51LmdyZS5rZXkgPSBodG9ucyhjdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkKTsKKwlpbnZfdC5zcmMuaXAgPSBvcmlnX3QtPnNyYy5pcDsKKwlpbnZfdC5kc3QuaXAgPSBvcmlnX3QtPmRzdC5pcDsKKwlpbnZfdC5zcmMudS5ncmUua2V5ID0gaHRvbnMobmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQpOworCWludl90LmRzdC51LmdyZS5rZXkgPSBodG9ucyhjdF9wcHRwX2luZm8tPnBhY19jYWxsX2lkKTsKKworCWlmICghaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cGVjdF9yZXBseSkpIHsKKwkJREVCVUdQKCJzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBleHBlY3RcbiIpOworCX0gZWxzZSB7CisJCURFQlVHUCgiY2FuJ3QgZXhwZWN0X3JlbGF0ZWQoZXhwZWN0X3JlcGx5KVxuIik7CisJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cGVjdF9vcmlnKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGlwX2N0X2dyZV9rZXltYXBfYWRkKGN0LCAmZXhwZWN0X3JlcGx5LT50dXBsZSwgMCkgPCAwKSB7CisJCURFQlVHUCgiY2FuJ3QgcmVnaXN0ZXIgb3JpZ2luYWwga2V5bWFwXG4iKTsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwZWN0X29yaWcpOworCQlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBlY3RfcmVwbHkpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoaXBfY3RfZ3JlX2tleW1hcF9hZGQoY3QsICZpbnZfdCwgMSkgPCAwKSB7CisJCURFQlVHUCgiY2FuJ3QgcmVnaXN0ZXIgcmVwbHkga2V5bWFwXG4iKTsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwZWN0X29yaWcpOworCQlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBlY3RfcmVwbHkpOworCQlpcF9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3koY3QpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogaW5ib3VuZCBwYWNrZXRzID09IGZyb20gUEFDIHRvIFBOUyAqLworc3RhdGljIGludAorcHB0cF9pbmJvdW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgc3RydWN0IFBwdHBDb250cm9sSGVhZGVyICpjdGxoLAorCQkgdW5pb24gcHB0cF9jdHJsX3VuaW9uICpwcHRwUmVxKQoreworCXN0cnVjdCBpcF9uYXRfcHB0cCAqbmF0X3BwdHBfaW5mbyA9ICZjdC0+bmF0LmhlbHAubmF0X3BwdHBfaW5mbzsKKwl1X2ludDE2X3QgbXNnLCBuZXdfY2lkID0gMCwgbmV3X3BjaWQsICpwY2lkID0gTlVMTCwgKmNpZCA9IE5VTEw7CisKKwlpbnQgcmV0ID0gTkZfQUNDRVBULCBydjsKKworCW5ld19wY2lkID0gaHRvbnMobmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQpOworCisJc3dpdGNoIChtc2cgPSBudG9ocyhjdGxoLT5tZXNzYWdlVHlwZSkpIHsKKwljYXNlIFBQVFBfT1VUX0NBTExfUkVQTFk6CisJCXBjaWQgPSAmcHB0cFJlcS0+b2NhY2sucGVlcnNDYWxsSUQ7CQorCQljaWQgPSAmcHB0cFJlcS0+b2NhY2suY2FsbElEOworCQlicmVhazsKKwljYXNlIFBQVFBfSU5fQ0FMTF9DT05ORUNUOgorCQlwY2lkID0gJnBwdHBSZXEtPmljY29uLnBlZXJzQ2FsbElEOworCQlicmVhazsKKwljYXNlIFBQVFBfSU5fQ0FMTF9SRVFVRVNUOgorCQkvKiBvbmx5IG5lZWQgdG8gbmF0IGluIGNhc2UgUEFDIGlzIGJlaGluZCBOQVQgYm94ICovCisJCWJyZWFrOworCWNhc2UgUFBUUF9XQU5fRVJST1JfTk9USUZZOgorCQlwY2lkID0gJnBwdHBSZXEtPndhbmVyci5wZWVyc0NhbGxJRDsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0NBTExfRElTQ09OTkVDVF9OT1RJRlk6CisJCXBjaWQgPSAmcHB0cFJlcS0+ZGlzYy5jYWxsSUQ7CisJCWJyZWFrOworCWNhc2UgUFBUUF9TRVRfTElOS19JTkZPOgorCQlwY2lkID0gJnBwdHBSZXEtPnNldGxpbmsucGVlcnNDYWxsSUQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJREVCVUdQKCJ1bmtub3duIGluYm91bmQgcGFja2V0ICVzXG4iLCAobXNnIDw9IFBQVFBfTVNHX01BWCk/IAorCQkJcHB0cF9tc2dfbmFtZVttc2ddOnBwdHBfbXNnX25hbWVbMF0pOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgUFBUUF9TVEFSVF9TRVNTSU9OX1JFUVVFU1Q6CisJY2FzZSBQUFRQX1NUQVJUX1NFU1NJT05fUkVQTFk6CisJY2FzZSBQUFRQX1NUT1BfU0VTU0lPTl9SRVFVRVNUOgorCWNhc2UgUFBUUF9TVE9QX1NFU1NJT05fUkVQTFk6CisJY2FzZSBQUFRQX0VDSE9fUkVRVUVTVDoKKwljYXNlIFBQVFBfRUNIT19SRVBMWToKKwkJLyogbm8gbmVlZCB0byBhbHRlciBwYWNrZXQgKi8KKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBvbmx5IE9VVF9DQUxMX1JFUExZLCBJTl9DQUxMX0NPTk5FQ1QsIElOX0NBTExfUkVRVUVTVCwKKwkgKiBXQU5fRVJST1JfTk9USUZZLCBDQUxMX0RJU0NPTk5FQ1RfTk9USUZZIHBhc3MgZG93biBoZXJlICovCisKKwkvKiBtYW5nbGUgcGFja2V0ICovCisJSVBfTkZfQVNTRVJUKHBjaWQpOworCURFQlVHUCgiYWx0ZXJpbmcgcGVlciBjYWxsIGlkIGZyb20gMHglMDR4IHRvIDB4JTA0eFxuIiwKKwkJbnRvaHMoKnBjaWQpLCBudG9ocyhuZXdfcGNpZCkpOworCQorCXJ2ID0gaXBfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sIAorCQkJCSAgICAgICh2b2lkICopcGNpZCAtICgodm9pZCAqKWN0bGggLSBzaXplb2Yoc3RydWN0IHBwdHBfcGt0X2hkcikpLAorCQkJCSAgICAgIHNpemVvZihuZXdfcGNpZCksIChjaGFyICopJm5ld19wY2lkLCAKKwkJCQkgICAgICBzaXplb2YobmV3X3BjaWQpKTsKKwlpZiAocnYgIT0gTkZfQUNDRVBUKSAKKwkJcmV0dXJuIHJ2OworCisJaWYgKG5ld19jaWQpIHsKKwkJSVBfTkZfQVNTRVJUKGNpZCk7CisJCURFQlVHUCgiYWx0ZXJpbmcgY2FsbCBpZCBmcm9tIDB4JTA0eCB0byAweCUwNHhcbiIsCisJCQludG9ocygqY2lkKSwgbnRvaHMobmV3X2NpZCkpOworCQlydiA9IGlwX25hdF9tYW5nbGVfdGNwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLCAKKwkJCQkJICAgICAgKHZvaWQgKiljaWQgLSAoKHZvaWQgKiljdGxoIC0gc2l6ZW9mKHN0cnVjdCBwcHRwX3BrdF9oZHIpKSwgCisJCQkJCSAgICAgIHNpemVvZihuZXdfY2lkKSwKKwkJCQkJICAgICAgKGNoYXIgKikmbmV3X2NpZCwgCisJCQkJCSAgICAgIHNpemVvZihuZXdfY2lkKSk7CisJCWlmIChydiAhPSBORl9BQ0NFUFQpCisJCQlyZXR1cm4gcnY7CisJfQorCisJLyogY2hlY2sgZm9yIGVhcmxpZXIgcmV0dXJuIHZhbHVlIG9mICdzd2l0Y2gnIGFib3ZlICovCisJaWYgKHJldCAhPSBORl9BQ0NFUFQpCisJCXJldHVybiByZXQ7CisKKwkvKiBncmVhdCwgYXQgbGVhc3Qgd2UgZG9uJ3QgbmVlZCB0byByZXNpemUgcGFja2V0cyAqLworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKKworZXh0ZXJuIGludCBfX2luaXQgaXBfbmF0X3Byb3RvX2dyZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19leGl0IGlwX25hdF9wcm90b19ncmVfZmluaSh2b2lkKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlERUJVR1AoIiVzOiByZWdpc3RlcmluZyBOQVQgaGVscGVyXG4iLCBfX0ZJTEVfXyk7CisKKwlyZXQgPSBpcF9uYXRfcHJvdG9fZ3JlX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCUJVR19PTihpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kKTsKKwlpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kID0gJnBwdHBfb3V0Ym91bmRfcGt0OworCisJQlVHX09OKGlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCk7CisJaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kID0gJnBwdHBfaW5ib3VuZF9wa3Q7CisKKwlCVUdfT04oaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKTsKKwlpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUgPSAmcHB0cF9leHBfZ3JlOworCisJQlVHX09OKGlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pOworCWlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4gPSAmcHB0cF9uYXRfZXhwZWN0ZWQ7CisKKwlwcmludGsoImlwX25hdF9wcHRwIHZlcnNpb24gJXMgbG9hZGVkXG4iLCBJUF9OQVRfUFBUUF9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3sKKwlERUJVR1AoImNsZWFudXBfbW9kdWxlXG4iICk7CisKKwlpcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuID0gTlVMTDsKKwlpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUgPSBOVUxMOworCWlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCA9IE5VTEw7CisJaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCA9IE5VTEw7CisKKwlpcF9uYXRfcHJvdG9fZ3JlX2ZpbmkoKTsKKwkvKiBNYWtlIHN1cmUgbm9vbmUgY2FsbHMgaXQsIG1lYW53aGlsZSAqLworCXN5bmNocm9uaXplX25ldCgpOworCisJcHJpbnRrKCJpcF9uYXRfcHB0cCB2ZXJzaW9uICVzIHVubG9hZGVkXG4iLCBJUF9OQVRfUFBUUF9WRVJTSU9OKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMTI4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogaXBfbmF0X3Byb3RvX2dyZS5jIC0gVmVyc2lvbiAyLjAKKyAqCisgKiBOQVQgcHJvdG9jb2wgaGVscGVyIG1vZHVsZSBmb3IgR1JFLgorICoKKyAqIEdSRSBpcyBhIGdlbmVyaWMgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCwgd2hpY2ggaXMgZ2VuZXJhbGx5IG5vdCB2ZXJ5CisgKiBzdWl0ZWQgZm9yIE5BVCwgYXMgaXQgaGFzIG5vIHByb3RvY29sLXNwZWNpZmljIHBhcnQgYXMgcG9ydCBudW1iZXJzLgorICoKKyAqIEl0IGhhcyBhbiBvcHRpb25hbCBrZXkgZmllbGQsIHdoaWNoIG1heSBoZWxwIHVzIGRpc3Rpbmd1aXNoaW5nIHR3byAKKyAqIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIHNhbWUgdHdvIGhvc3RzLgorICoKKyAqIEdSRSBpcyBkZWZpbmVkIGluIFJGQyAxNzAxIGFuZCBSRkMgMTcwMiwgYXMgd2VsbCBhcyBSRkMgMjc4NCAKKyAqCisgKiBQUFRQIGlzIGJ1aWx0IG9uIHRvcCBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgR1JFLCBhbmQgaGFzIGEgbWFuZGF0b3J5CisgKiBmaWVsZCBjYWxsZWQgIkNhbGxJRCIsIHdoaWNoIHNlcnZlcyB1cyBmb3IgdGhlIHNhbWUgcHVycG9zZSBhcyB0aGUga2V5CisgKiBmaWVsZCBpbiBwbGFpbiBHUkUuCisgKgorICogRG9jdW1lbnRhdGlvbiBhYm91dCBQUFRQIGNhbiBiZSBmb3VuZCBpbiBSRkMgMjYzNworICoKKyAqIChDKSAyMDAwLTIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqCisgKiBEZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgZnVuZGVkIGJ5IEFzdGFybyBBRyAoaHR0cDovL3d3dy5hc3Rhcm8uY29tLykKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5ldGZpbHRlciBOQVQgcHJvdG9jb2wgaGVscGVyIG1vZHVsZSBmb3IgR1JFIik7CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczolczogIiBmb3JtYXQsIF9fRklMRV9fLCBcCisJCQkJICAgICAgIF9fRlVOQ1RJT05fXywgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERFQlVHUCh4LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qIGlzIGtleSBpbiBnaXZlbiByYW5nZSBiZXR3ZWVuIG1pbiBhbmQgbWF4ICovCitzdGF0aWMgaW50CitncmVfaW5fcmFuZ2UoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgICBlbnVtIGlwX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKKwkgICAgIGNvbnN0IHVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byAqbWluLAorCSAgICAgY29uc3QgdW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvICptYXgpCit7CisJdV9pbnQzMl90IGtleTsKKworCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKKwkJa2V5ID0gdHVwbGUtPnNyYy51LmdyZS5rZXk7CisJZWxzZQorCQlrZXkgPSB0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKKworCXJldHVybiBudG9obChrZXkpID49IG50b2hsKG1pbi0+Z3JlLmtleSkKKwkJJiYgbnRvaGwoa2V5KSA8PSBudG9obChtYXgtPmdyZS5rZXkpOworfQorCisvKiBnZW5lcmF0ZSB1bmlxdWUgdHVwbGUgLi4uICovCitzdGF0aWMgaW50IAorZ3JlX3VuaXF1ZV90dXBsZShzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJIGNvbnN0IHN0cnVjdCBpcF9uYXRfcmFuZ2UgKnJhbmdlLAorCQkgZW51bSBpcF9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCSBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjb25udHJhY2spCit7CisJc3RhdGljIHVfaW50MTZfdCBrZXk7CisJdV9pbnQxNl90ICprZXlwdHI7CisJdW5zaWduZWQgaW50IG1pbiwgaSwgcmFuZ2Vfc2l6ZTsKKworCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKKwkJa2V5cHRyID0gJnR1cGxlLT5zcmMudS5ncmUua2V5OworCWVsc2UKKwkJa2V5cHRyID0gJnR1cGxlLT5kc3QudS5ncmUua2V5OworCisJaWYgKCEocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCkpIHsKKwkJREVCVUdQKCIlcDogTkFUaW5nIEdSRSBQUFRQXG4iLCBjb25udHJhY2spOworCQltaW4gPSAxOworCQlyYW5nZV9zaXplID0gMHhmZmZmOworCX0gZWxzZSB7CisJCW1pbiA9IG50b2hsKHJhbmdlLT5taW4uZ3JlLmtleSk7CisJCXJhbmdlX3NpemUgPSBudG9obChyYW5nZS0+bWF4LmdyZS5rZXkpIC0gbWluICsgMTsKKwl9CisKKwlERUJVR1AoIm1pbiA9ICV1LCByYW5nZV9zaXplID0gJXVcbiIsIG1pbiwgcmFuZ2Vfc2l6ZSk7IAorCisJZm9yIChpID0gMDsgaSA8IHJhbmdlX3NpemU7IGkrKywga2V5KyspIHsKKwkJKmtleXB0ciA9IGh0b25sKG1pbiArIGtleSAlIHJhbmdlX3NpemUpOworCQlpZiAoIWlwX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjb25udHJhY2spKQorCQkJcmV0dXJuIDE7CisJfQorCisJREVCVUdQKCIlcDogbm8gTkFUIG1hcHBpbmdcbiIsIGNvbm50cmFjayk7CisKKwlyZXR1cm4gMDsKK30KKworLyogbWFuaXB1bGF0ZSBhIEdSRSBwYWNrZXQgYWNjb3JkaW5nIHRvIG1hbmlwdHlwZSAqLworc3RhdGljIGludAorZ3JlX21hbmlwX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJICAgICAgdW5zaWduZWQgaW50IGlwaGRyb2ZmLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCSAgICAgIGVudW0gaXBfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlKQoreworCXN0cnVjdCBncmVfaGRyICpncmVoOworCXN0cnVjdCBncmVfaGRyX3BwdHAgKnBncmVoOworCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKSgoKnBza2IpLT5kYXRhICsgaXBoZHJvZmYpOworCXVuc2lnbmVkIGludCBoZHJvZmYgPSBpcGhkcm9mZiArIGlwaC0+aWhsKjQ7CisKKwkvKiBwZ3JlaCBpbmNsdWRlcyB0d28gb3B0aW9uYWwgMzJiaXQgZmllbGRzIHdoaWNoIGFyZSBub3QgcmVxdWlyZWQKKwkgKiB0byBiZSB0aGVyZS4gIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgJzgnIGNvbWVzIGZyb20gKi8KKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsIGhkcm9mZiArIHNpemVvZigqcGdyZWgpLTgpKQorCQlyZXR1cm4gMDsKKworCWdyZWggPSAodm9pZCAqKSgqcHNrYiktPmRhdGEgKyBoZHJvZmY7CisJcGdyZWggPSAoc3RydWN0IGdyZV9oZHJfcHB0cCAqKSBncmVoOworCisJLyogd2Ugb25seSBoYXZlIGRlc3RpbmF0aW9uIG1hbmlwIG9mIGEgcGFja2V0LCBzaW5jZSAnc291cmNlIGtleScgCisJICogaXMgbm90IHByZXNlbnQgaW4gdGhlIHBhY2tldCBpdHNlbGYgKi8KKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9EU1QpIHsKKwkJLyoga2V5IG1hbmlwdWxhdGlvbiBpcyBhbHdheXMgZGVzdCAqLworCQlzd2l0Y2ggKGdyZWgtPnZlcnNpb24pIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFncmVoLT5rZXkpIHsKKwkJCQlERUJVR1AoImNhbid0IG5hdCBHUkUgdy9vIGtleVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZ3JlaC0+Y3N1bSkgeworCQkJCS8qIEZJWE1FOiBOZXZlciB0ZXN0ZWQgdGhpcyBjb2RlLi4uICovCisJCQkJKihncmVfY3N1bShncmVoKSkgPSAKKwkJCQkJaXBfbmF0X2NoZWF0X2NoZWNrKH4qKGdyZV9rZXkoZ3JlaCkpLAorCQkJCQkJCXR1cGxlLT5kc3QudS5ncmUua2V5LAorCQkJCQkJCSooZ3JlX2NzdW0oZ3JlaCkpKTsKKwkJCX0KKwkJCSooZ3JlX2tleShncmVoKSkgPSB0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKKwkJCWJyZWFrOworCQljYXNlIEdSRV9WRVJTSU9OX1BQVFA6CisJCQlERUJVR1AoImNhbGxfaWQgLT4gMHglMDR4XG4iLCAKKwkJCQludG9obCh0dXBsZS0+ZHN0LnUuZ3JlLmtleSkpOworCQkJcGdyZWgtPmNhbGxfaWQgPSBodG9ucyhudG9obCh0dXBsZS0+ZHN0LnUuZ3JlLmtleSkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVR1AoImNhbid0IG5hdCB1bmtub3duIEdSRSB2ZXJzaW9uXG4iKTsKKwkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qIHByaW50IG91dCBhIG5hdCB0dXBsZSAqLworc3RhdGljIHVuc2lnbmVkIGludCAKK2dyZV9wcmludChjaGFyICpidWZmZXIsIAorCSAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqbWF0Y2gsCisJICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICptYXNrKQoreworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCisJaWYgKG1hc2stPnNyYy51LmdyZS5rZXkpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgInNyY2tleT0weCV4ICIsIAorCQkJCW50b2hsKG1hdGNoLT5zcmMudS5ncmUua2V5KSk7CisKKwlpZiAobWFzay0+ZHN0LnUuZ3JlLmtleSkKKwkJbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiZHN0a2V5PTB4JXggIiwKKwkJCQludG9obChtYXRjaC0+c3JjLnUuZ3JlLmtleSkpOworCisJcmV0dXJuIGxlbjsKK30KKworLyogcHJpbnQgYSByYW5nZSBvZiBrZXlzICovCitzdGF0aWMgdW5zaWduZWQgaW50IAorZ3JlX3ByaW50X3JhbmdlKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IGlwX25hdF9yYW5nZSAqcmFuZ2UpCit7CisJaWYgKHJhbmdlLT5taW4uZ3JlLmtleSAhPSAwIAorCSAgICB8fCByYW5nZS0+bWF4LmdyZS5rZXkgIT0gMHhGRkZGKSB7CisJCWlmIChyYW5nZS0+bWluLmdyZS5rZXkgPT0gcmFuZ2UtPm1heC5ncmUua2V5KQorCQkJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAia2V5IDB4JXggIiwKKwkJCQkJbnRvaGwocmFuZ2UtPm1pbi5ncmUua2V5KSk7CisJCWVsc2UKKwkJCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgImtleXMgMHgldS0weCV1ICIsCisJCQkJCW50b2hsKHJhbmdlLT5taW4uZ3JlLmtleSksCisJCQkJCW50b2hsKHJhbmdlLT5tYXguZ3JlLmtleSkpOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogbmF0IGhlbHBlciBzdHJ1Y3QgKi8KK3N0YXRpYyBzdHJ1Y3QgaXBfbmF0X3Byb3RvY29sIGdyZSA9IHsgCisJLm5hbWUJCT0gIkdSRSIsIAorCS5wcm90b251bQk9IElQUFJPVE9fR1JFLAorCS5tYW5pcF9wa3QJPSBncmVfbWFuaXBfcGt0LAorCS5pbl9yYW5nZQk9IGdyZV9pbl9yYW5nZSwKKwkudW5pcXVlX3R1cGxlCT0gZ3JlX3VuaXF1ZV90dXBsZSwKKwkucHJpbnQJCT0gZ3JlX3ByaW50LAorCS5wcmludF9yYW5nZQk9IGdyZV9wcmludF9yYW5nZSwKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LX01PRFVMRSkKKwkucmFuZ2VfdG9fbmZhdHRyCT0gaXBfbmF0X3BvcnRfcmFuZ2VfdG9fbmZhdHRyLAorCS5uZmF0dHJfdG9fcmFuZ2UJPSBpcF9uYXRfcG9ydF9uZmF0dHJfdG9fcmFuZ2UsCisjZW5kaWYKK307CisJCQkJICAKK2ludCBfX2luaXQgaXBfbmF0X3Byb3RvX2dyZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGlwX25hdF9wcm90b2NvbF9yZWdpc3RlcigmZ3JlKTsKK30KKwordm9pZCBfX2V4aXQgaXBfbmF0X3Byb3RvX2dyZV9maW5pKHZvaWQpCit7CisJaXBfbmF0X3Byb3RvY29sX3VucmVnaXN0ZXIoJmdyZSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCA3ZDM4OTEzLi45YmNiMzk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgpAQCAtMzAsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTFVTVEVSSVAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KIAotI2RlZmluZSBDTFVTVEVSSVBfVkVSU0lPTiAiMC43IgorI2RlZmluZSBDTFVTVEVSSVBfVkVSU0lPTiAiMC44IgogCiAjZGVmaW5lIERFQlVHX0NMVVNURVJJUAogCkBAIC00OSwxMyArNTAsMTQgQEAKIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkJLyogbGlzdCBvZiBhbGwgY29uZmlncyAqLwogCWF0b21pY190IHJlZmNvdW50OwkJCS8qIHJlZmVyZW5jZSBjb3VudCAqLworCWF0b21pY190IGVudHJpZXM7CQkJLyogbnVtYmVyIG9mIGVudHJpZXMvcnVsZXMKKwkJCQkJCSAqIHJlZmVyZW5jaW5nIHVzICovCiAKIAl1X2ludDMyX3QgY2x1c3RlcmlwOwkJCS8qIHRoZSBJUCBhZGRyZXNzICovCiAJdV9pbnQ4X3QgY2x1c3Rlcm1hY1tFVEhfQUxFTl07CQkvKiB0aGUgTUFDIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwkJCS8qIGRldmljZSAqLwogCXVfaW50MTZfdCBudW1fdG90YWxfbm9kZXM7CQkvKiB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgKi8KLQl1X2ludDE2X3QgbnVtX2xvY2FsX25vZGVzOwkJLyogbnVtYmVyIG9mIGxvY2FsIG5vZGVzICovCi0JdV9pbnQxNl90IGxvY2FsX25vZGVzW0NMVVNURVJJUF9NQVhfTk9ERVNdOwkvKiBub2RlIG51bWJlciBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcgbG9jYWxfbm9kZXM7CQkvKiBub2RlIG51bWJlciBhcnJheSAqLwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsJCS8qIHByb2MgZGlyIGVudHJ5ICovCkBAIC02Niw4ICs2OCw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoY2x1c3RlcmlwX2NvbmZpZ3MpOwogCi0vKiBjbHVzdGVyaXBfbG9jayBwcm90ZWN0cyB0aGUgY2x1c3RlcmlwX2NvbmZpZ3MgbGlzdCBfQU5EXyB0aGUgY29uZmlndXJhYmxlCi0gKiBkYXRhIHdpdGhpbiBhbGwgc3RydWN0dXJzZXMgKG51bV9sb2NhbF9ub2RlcywgbG9jYWxfbm9kZXNbXSkgKi8KKy8qIGNsdXN0ZXJpcF9sb2NrIHByb3RlY3RzIHRoZSBjbHVzdGVyaXBfY29uZmlncyBsaXN0ICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhjbHVzdGVyaXBfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtNzYsMjMgKzc3LDQ4IEBACiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkCi1jbHVzdGVyaXBfY29uZmlnX2dldChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykgeworY2x1c3RlcmlwX2NvbmZpZ19nZXQoc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMpCit7CiAJYXRvbWljX2luYygmYy0+cmVmY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWNsdXN0ZXJpcF9jb25maWdfcHV0KHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjKSB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmMtPnJlZmNvdW50KSkgeworY2x1c3RlcmlwX2NvbmZpZ19wdXQoc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmMtPnJlZmNvdW50KSkKKwkJa2ZyZWUoYyk7Cit9CisKKy8qIGluY3JlYXNlIHRoZSBjb3VudCBvZiBlbnRyaWVzKHJ1bGVzKSB1c2luZy9yZWZlcmVuY2luZyB0aGlzIGNvbmZpZyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbHVzdGVyaXBfY29uZmlnX2VudHJ5X2dldChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykKK3sKKwlhdG9taWNfaW5jKCZjLT5lbnRyaWVzKTsKK30KKworLyogZGVjcmVhc2UgdGhlIGNvdW50IG9mIGVudHJpZXMgdXNpbmcvcmVmZXJlbmNpbmcgdGhpcyBjb25maWcuICBJZiBsYXN0CisgKiBlbnRyeShydWxlKSBpcyByZW1vdmVkLCByZW1vdmUgdGhlIGNvbmZpZyBmcm9tIGxpc3RzLCBidXQgZG9uJ3QgZnJlZSBpdAorICogeWV0LCBzaW5jZSBwcm9jLWZpbGVzIGNvdWxkIHN0aWxsIGJlIGhvbGRpbmcgcmVmZXJlbmNlcyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbHVzdGVyaXBfY29uZmlnX2VudHJ5X3B1dChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYy0+ZW50cmllcykpIHsKIAkJd3JpdGVfbG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQlsaXN0X2RlbCgmYy0+bGlzdCk7CiAJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOworCiAJCWRldl9tY19kZWxldGUoYy0+ZGV2LCBjLT5jbHVzdGVybWFjLCBFVEhfQUxFTiwgMCk7CiAJCWRldl9wdXQoYy0+ZGV2KTsKLQkJa2ZyZWUoYyk7CisKKwkJLyogSW4gY2FzZSBhbnlvbmUgc3RpbGwgYWNjZXNzZXMgdGhlIGZpbGUsIHRoZSBvcGVuL2Nsb3NlCisJCSAqIGZ1bmN0aW9ucyBhcmUgYWxzbyBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IG9uIHRoZWlyIG93biwKKwkJICogc28gaXQncyBzYWZlIHRvIHJlbW92ZSB0aGUgZW50cnkgZXZlbiBpZiBpdCdzIGluIHVzZS4gKi8KKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCQlyZW1vdmVfcHJvY19lbnRyeShjLT5wZGUtPm5hbWUsIGMtPnBkZS0+cGFyZW50KTsKKyNlbmRpZgogCX0KIH0KIAotCiBzdGF0aWMgc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKgogX19jbHVzdGVyaXBfY29uZmlnX2ZpbmQodV9pbnQzMl90IGNsdXN0ZXJpcCkKIHsKQEAgLTExMSw3ICsxMzcsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICoKLWNsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQodV9pbnQzMl90IGNsdXN0ZXJpcCkKK2NsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQodV9pbnQzMl90IGNsdXN0ZXJpcCwgaW50IGVudHJ5KQogewogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjOwogCkBAIC0xMjIsMTEgKzE0OCwyNCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJYXRvbWljX2luYygmYy0+cmVmY291bnQpOworCWlmIChlbnRyeSkKKwkJYXRvbWljX2luYygmYy0+ZW50cmllcyk7CiAJcmVhZF91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAogCXJldHVybiBjOwogfQogCitzdGF0aWMgdm9pZAorY2x1c3RlcmlwX2NvbmZpZ19pbml0X25vZGVsaXN0KHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvICppKQoreworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IGktPm51bV9sb2NhbF9ub2RlczsgbisrKSB7CisJCXNldF9iaXQoaS0+bG9jYWxfbm9kZXNbbl0gLSAxLCAmYy0+bG9jYWxfbm9kZXMpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICoKIGNsdXN0ZXJpcF9jb25maWdfaW5pdChzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyAqaSwgdV9pbnQzMl90IGlwLAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE0MywxMSArMTgyLDExIEBACiAJYy0+Y2x1c3RlcmlwID0gaXA7CiAJbWVtY3B5KCZjLT5jbHVzdGVybWFjLCAmaS0+Y2x1c3Rlcm1hYywgRVRIX0FMRU4pOwogCWMtPm51bV90b3RhbF9ub2RlcyA9IGktPm51bV90b3RhbF9ub2RlczsKLQljLT5udW1fbG9jYWxfbm9kZXMgPSBpLT5udW1fbG9jYWxfbm9kZXM7Ci0JbWVtY3B5KCZjLT5sb2NhbF9ub2RlcywgJmktPmxvY2FsX25vZGVzLCBzaXplb2YoYy0+bG9jYWxfbm9kZXMpKTsKKwljbHVzdGVyaXBfY29uZmlnX2luaXRfbm9kZWxpc3QoYywgaSk7CiAJYy0+aGFzaF9tb2RlID0gaS0+aGFzaF9tb2RlOwogCWMtPmhhc2hfaW5pdHZhbCA9IGktPmhhc2hfaW5pdHZhbDsKIAlhdG9taWNfc2V0KCZjLT5yZWZjb3VudCwgMSk7CisJYXRvbWljX3NldCgmYy0+ZW50cmllcywgMSk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCS8qIGNyZWF0ZSBwcm9jIGRpciBlbnRyeSAqLwpAQCAtMTcxLDUzICsyMTAsMjggQEAKIHN0YXRpYyBpbnQKIGNsdXN0ZXJpcF9hZGRfbm9kZShzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYywgdV9pbnQxNl90IG5vZGVudW0pCiB7Ci0JaW50IGk7CiAKLQl3cml0ZV9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0KLQlpZiAoYy0+bnVtX2xvY2FsX25vZGVzID49IENMVVNURVJJUF9NQVhfTk9ERVMKLQkgICAgfHwgbm9kZW51bSA+IENMVVNURVJJUF9NQVhfTk9ERVMpIHsKLQkJd3JpdGVfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CisJaWYgKG5vZGVudW0gPT0gMCB8fAorCSAgICBub2RlbnVtID4gYy0+bnVtX3RvdGFsX25vZGVzKQogCQlyZXR1cm4gMTsKLQl9CiAKLQkvKiBjaGVjayBpZiB3ZSBhbHJhZHkgaGF2ZSB0aGlzIG51bWJlciBpbiBvdXIgYXJyYXkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYy0+bnVtX2xvY2FsX25vZGVzOyBpKyspIHsKLQkJaWYgKGMtPmxvY2FsX25vZGVzW2ldID09IG5vZGVudW0pIHsKLQkJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9CisJLyogY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgbnVtYmVyIGluIG91ciBiaXRmaWVsZCAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KG5vZGVudW0gLSAxLCAmYy0+bG9jYWxfbm9kZXMpKQorCQlyZXR1cm4gMTsKIAotCWMtPmxvY2FsX25vZGVzW2MtPm51bV9sb2NhbF9ub2RlcysrXSA9IG5vZGVudW07Ci0KLQl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogY2x1c3RlcmlwX2RlbF9ub2RlKHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjLCB1X2ludDE2X3Qgbm9kZW51bSkKIHsKLQlpbnQgaTsKLQotCXdyaXRlX2xvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKLQotCWlmIChjLT5udW1fbG9jYWxfbm9kZXMgPD0gMSB8fCBub2RlbnVtID4gQ0xVU1RFUklQX01BWF9OT0RFUykgewotCQl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKKwlpZiAobm9kZW51bSA9PSAwIHx8CisJICAgIG5vZGVudW0gPiBjLT5udW1fdG90YWxfbm9kZXMpCiAJCXJldHVybiAxOwotCX0KIAkJCi0JZm9yIChpID0gMDsgaSA8IGMtPm51bV9sb2NhbF9ub2RlczsgaSsrKSB7Ci0JCWlmIChjLT5sb2NhbF9ub2Rlc1tpXSA9PSBub2RlbnVtKSB7Ci0JCQlpbnQgc2l6ZSA9IHNpemVvZih1X2ludDE2X3QpKihjLT5udW1fbG9jYWxfbm9kZXMtKGkrMSkpOwotCQkJbWVtbW92ZSgmYy0+bG9jYWxfbm9kZXNbaV0sICZjLT5sb2NhbF9ub2Rlc1tpKzFdLCBzaXplKTsKLQkJCWMtPm51bV9sb2NhbF9ub2Rlcy0tOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KG5vZGVudW0gLSAxLCAmYy0+bG9jYWxfbm9kZXMpKQorCQlyZXR1cm4gMDsKIAotCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCXJldHVybiAxOwogfQogCkBAIC0yODUsMjUgKzI5OSw3IEBACiBzdGF0aWMgaW5saW5lIGludAogY2x1c3RlcmlwX3Jlc3BvbnNpYmxlKHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjb25maWcsIHVfaW50MzJfdCBoYXNoKQogewotCWludCBpOwotCi0JcmVhZF9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0KLQlpZiAoY29uZmlnLT5udW1fbG9jYWxfbm9kZXMgPT0gMCkgewotCQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5udW1fbG9jYWxfbm9kZXM7IGkrKykgewotCQlpZiAoY29uZmlnLT5sb2NhbF9ub2Rlc1tpXSA9PSBoYXNoKSB7Ci0JCQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHRlc3RfYml0KGhhc2ggLSAxLCAmY29uZmlnLT5sb2NhbF9ub2Rlcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKQEAgLTQxNSw4ICs0MTEsMjYgQEAKIAogCS8qIEZJWE1FOiBmdXJ0aGVyIHNhbml0eSBjaGVja3MgKi8KIAotCWNvbmZpZyA9IGNsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQoZS0+aXAuZHN0LnNfYWRkcik7Ci0JaWYgKCFjb25maWcpIHsKKwljb25maWcgPSBjbHVzdGVyaXBfY29uZmlnX2ZpbmRfZ2V0KGUtPmlwLmRzdC5zX2FkZHIsIDEpOworCWlmIChjb25maWcpIHsKKwkJaWYgKGNpcGluZm8tPmNvbmZpZyAhPSBOVUxMKSB7CisJCQkvKiBDYXNlIEE6IFRoaXMgaXMgYW4gZW50cnkgdGhhdCBnZXRzIHJlbG9hZGVkLCBzaW5jZQorCQkJICogaXQgc3RpbGwgaGFzIGEgY2lwaW5mby0+Y29uZmlnIHBvaW50ZXIuIFNpbXBseQorCQkJICogaW5jcmVhc2UgdGhlIGVudHJ5IHJlZmNvdW50IGFuZCByZXR1cm4gKi8KKwkJCWlmIChjaXBpbmZvLT5jb25maWcgIT0gY29uZmlnKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJDTFVTVEVSSVA6IFJlbG9hZGVkIGVudHJ5ICIKKwkJCQkgICAgICAgImhhcyBpbnZhbGlkIGNvbmZpZyBwb2ludGVyIVxuIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQljbHVzdGVyaXBfY29uZmlnX2VudHJ5X2dldChjaXBpbmZvLT5jb25maWcpOworCQl9IGVsc2UgeworCQkJLyogQ2FzZSBCOiBUaGlzIGlzIGEgbmV3IHJ1bGUgcmVmZXJyaW5nIHRvIGFuIGV4aXN0aW5nCisJCQkgKiBjbHVzdGVyaXAgY29uZmlnLiAqLworCQkJY2lwaW5mby0+Y29uZmlnID0gY29uZmlnOworCQkJY2x1c3RlcmlwX2NvbmZpZ19lbnRyeV9nZXQoY2lwaW5mby0+Y29uZmlnKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIENhc2UgQzogVGhpcyBpcyBhIGNvbXBsZXRlbHkgbmV3IGNsdXN0ZXJpcCBjb25maWcgKi8KIAkJaWYgKCEoY2lwaW5mby0+ZmxhZ3MgJiBDTFVTVEVSSVBfRkxBR19ORVcpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDTFVTVEVSSVA6IG5vIGNvbmZpZyBmb3VuZCBmb3IgJXUuJXUuJXUuJXUsIG5lZWQgJ25ldydcbiIsIE5JUFFVQUQoZS0+aXAuZHN0LnNfYWRkcikpOwogCQkJcmV0dXJuIDA7CkBAIC00NDMsMTAgKzQ1Nyw5IEBACiAJCQl9CiAJCQlkZXZfbWNfYWRkKGNvbmZpZy0+ZGV2LGNvbmZpZy0+Y2x1c3Rlcm1hYywgRVRIX0FMRU4sIDApOwogCQl9CisJCWNpcGluZm8tPmNvbmZpZyA9IGNvbmZpZzsKIAl9CiAKLQljaXBpbmZvLT5jb25maWcgPSBjb25maWc7Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtNDU1LDEzICs0NjgsMTAgQEAKIHsKIAlzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyAqY2lwaW5mbyA9IG1hdGNoaW5mbzsKIAotCS8qIHdlIGZpcnN0IHJlbW92ZSB0aGUgcHJvYyBlbnRyeSBhbmQgdGhlbiBkcm9wIHRoZSByZWZlcmVuY2UKLQkgKiBjb3VudC4gIEluIGNhc2UgYW55b25lIHN0aWxsIGFjY2Vzc2VzIHRoZSBmaWxlLCB0aGUgb3Blbi9jbG9zZQotCSAqIGZ1bmN0aW9ucyBhcmUgYWxzbyBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IG9uIHRoZWlyIG93biAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoY2lwaW5mby0+Y29uZmlnLT5wZGUtPm5hbWUsCi0JCQkgIGNpcGluZm8tPmNvbmZpZy0+cGRlLT5wYXJlbnQpOwotI2VuZGlmCisJLyogaWYgbm8gbW9yZSBlbnRyaWVzIGFyZSByZWZlcmVuY2luZyB0aGUgY29uZmlnLCByZW1vdmUgaXQKKwkgKiBmcm9tIHRoZSBsaXN0IGFuZCBkZXN0cm95IHRoZSBwcm9jIGVudHJ5ICovCisJY2x1c3RlcmlwX2NvbmZpZ19lbnRyeV9wdXQoY2lwaW5mby0+Y29uZmlnKTsKKwogCWNsdXN0ZXJpcF9jb25maWdfcHV0KGNpcGluZm8tPmNvbmZpZyk7CiB9CiAKQEAgLTUzMyw3ICs1NDMsNyBAQAogCiAJLyogaWYgdGhlcmUgaXMgbm8gY2x1c3RlcmlwIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcnAgcmVwbHkncyAKIAkgKiBzb3VyY2UgaXAsIHdlIGRvbid0IHdhbnQgdG8gbWFuZ2xlIGl0ICovCi0JYyA9IGNsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQocGF5bG9hZC0+c3JjX2lwKTsKKwljID0gY2x1c3RlcmlwX2NvbmZpZ19maW5kX2dldChwYXlsb2FkLT5zcmNfaXAsIDApOwogCWlmICghYykKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIApAQCAtNTc0LDU2ICs1ODQsNjkgQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKK3N0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uIHsKKwl1bnNpZ25lZCBpbnQgcG9zOwkvKiBwb3NpdGlvbiAqLworCXVuc2lnbmVkIGludCB3ZWlnaHQ7CS8qIG51bWJlciBvZiBiaXRzIHNldCA9PSBzaXplICovCisJdW5zaWduZWQgaW50IGJpdDsJLyogY3VycmVudCBiaXQgKi8KKwl1bnNpZ25lZCBsb25nIHZhbDsJLyogY3VycmVudCB2YWx1ZSAqLworfTsKKwogc3RhdGljIHZvaWQgKmNsdXN0ZXJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7CiAJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBwZGUtPmRhdGE7Ci0JdW5zaWduZWQgaW50ICpub2RlaWR4OworCXVuc2lnbmVkIGludCB3ZWlnaHQ7CisJdV9pbnQzMl90IGxvY2FsX25vZGVzOworCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHg7CiAKLQlyZWFkX2xvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKLQlpZiAoKnBvcyA+PSBjLT5udW1fbG9jYWxfbm9kZXMpCisJLyogRklYTUU6IHBvc3NpYmxlIHJhY2UgKi8KKwlsb2NhbF9ub2RlcyA9IGMtPmxvY2FsX25vZGVzOworCXdlaWdodCA9IGh3ZWlnaHQzMihsb2NhbF9ub2Rlcyk7CisJaWYgKCpwb3MgPj0gd2VpZ2h0KQogCQlyZXR1cm4gTlVMTDsKIAotCW5vZGVpZHggPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5vZGVpZHgpCisJaWR4ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNsdXN0ZXJpcF9zZXFfcG9zaXRpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkeCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQkqbm9kZWlkeCA9ICpwb3M7Ci0JcmV0dXJuIG5vZGVpZHg7CisJaWR4LT5wb3MgPSAqcG9zOworCWlkeC0+d2VpZ2h0ID0gd2VpZ2h0OworCWlkeC0+Yml0ID0gZmZzKGxvY2FsX25vZGVzKTsKKwlpZHgtPnZhbCA9IGxvY2FsX25vZGVzOworCWNsZWFyX2JpdChpZHgtPmJpdCAtIDEsICZpZHgtPnZhbCk7CisKKwlyZXR1cm4gaWR4OwogfQogCiBzdGF0aWMgdm9pZCAqY2x1c3RlcmlwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOwotCXVuc2lnbmVkIGludCAqbm9kZWlkeCA9ICh1bnNpZ25lZCBpbnQgKil2OworCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHggPSAoc3RydWN0IGNsdXN0ZXJpcF9zZXFfcG9zaXRpb24gKil2OwogCi0JKnBvcyA9ICsrKCpub2RlaWR4KTsKLQlpZiAoKnBvcyA+PSBjLT5udW1fbG9jYWxfbm9kZXMpIHsKKwkqcG9zID0gKytpZHgtPnBvczsKKwlpZiAoKnBvcyA+PSBpZHgtPndlaWdodCkgewogCQlrZnJlZSh2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXJldHVybiBub2RlaWR4OworCWlkeC0+Yml0ID0gZmZzKGlkeC0+dmFsKTsKKwljbGVhcl9iaXQoaWR4LT5iaXQgLSAxLCAmaWR4LT52YWwpOworCXJldHVybiBpZHg7CiB9CiAKIHN0YXRpYyB2b2lkIGNsdXN0ZXJpcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7CiAJa2ZyZWUodik7Ci0KLQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGNsdXN0ZXJpcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOwotCXVuc2lnbmVkIGludCAqbm9kZWlkeCA9ICh1bnNpZ25lZCBpbnQgKil2OworCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHggPSAoc3RydWN0IGNsdXN0ZXJpcF9zZXFfcG9zaXRpb24gKil2OwogCi0JaWYgKCpub2RlaWR4ICE9IDApIAorCWlmIChpZHgtPnBvcyAhPSAwKSAKIAkJc2VxX3B1dGMocywgJywnKTsKLQlzZXFfcHJpbnRmKHMsICIldSIsIGMtPmxvY2FsX25vZGVzWypub2RlaWR4XSk7CiAKLQlpZiAoKm5vZGVpZHggPT0gYy0+bnVtX2xvY2FsX25vZGVzLTEpCisJc2VxX3ByaW50ZihzLCAiJXUiLCBpZHgtPmJpdCk7CisKKwlpZiAoaWR4LT5wb3MgPT0gaWR4LT53ZWlnaHQgLSAxKQogCQlzZXFfcHV0YyhzLCAnXG4nKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwppbmRleCAyZjNlMTgxLi4yNzVhMTc0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwpAQCAtOTAsNiArOTAsMTIgQEAKIAlJUF9ORl9BU1NFUlQoY3QgJiYgKGN0aW5mbyA9PSBJUF9DVF9ORVcgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURUQKIAkgICAgICAgICAgICAgICAgICAgIHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpKTsKIAorCS8qIFNvdXJjZSBhZGRyZXNzIGlzIDAuMC4wLjAgLSBsb2NhbGx5IGdlbmVyYXRlZCBwYWNrZXQgdGhhdCBpcworCSAqIHByb2JhYmx5IG5vdCBzdXBwb3NlZCB0byBiZSBtYXNxdWVyYWRlZC4KKwkgKi8KKwlpZiAoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5pcCA9PSAwKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCiAJbXIgPSB0YXJnaW5mbzsKIAlydCA9IChzdHJ1Y3QgcnRhYmxlICopKCpwc2tiKS0+ZHN0OwogCW5ld3NyYyA9IGluZXRfc2VsZWN0X2FkZHIob3V0LCBydC0+cnRfZ2F0ZXdheSwgUlRfU0NPUEVfVU5JVkVSU0UpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jCmluZGV4IGQyZTEzNDQuLjcxNWNiNjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVESVJFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFRElSRUNULmMKQEAgLTg4LDE0ICs4OCwxOCBAQAogCQluZXdkc3QgPSBodG9ubCgweDdGMDAwMDAxKTsKIAllbHNlIHsKIAkJc3RydWN0IGluX2RldmljZSAqaW5kZXY7CisJCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKIAotCQkvKiBEZXZpY2UgbWlnaHQgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBpbl9kZXZpY2UuICovCi0JCWluZGV2ID0gKHN0cnVjdCBpbl9kZXZpY2UgKikoKnBza2IpLT5kZXYtPmlwX3B0cjsKLQkJaWYgKGluZGV2ID09IE5VTEwgfHwgaW5kZXYtPmlmYV9saXN0ID09IE5VTEwpCisJCW5ld2RzdCA9IDA7CisJCQorCQlyY3VfcmVhZF9sb2NrKCk7CisJCWluZGV2ID0gX19pbl9kZXZfZ2V0KCgqcHNrYiktPmRldik7CisJCWlmIChpbmRldiAmJiAoaWZhID0gaW5kZXYtPmlmYV9saXN0KSkKKwkJCW5ld2RzdCA9IGlmYS0+aWZhX2xvY2FsOworCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQlpZiAoIW5ld2RzdCkKIAkJCXJldHVybiBORl9EUk9QOwotCi0JCS8qIEdyYWIgZmlyc3QgYWRkcmVzcyBvbiBpbnRlcmZhY2UuICovCi0JCW5ld2RzdCA9IGluZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsOwogCX0KIAogCS8qIFRyYW5zZmVyIGZyb20gb3JpZ2luYWwgcmFuZ2UuICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDMwNGJiMGEuLjRiMGQ3ZTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAogCQkJaWYgKHR5cGUgJiYgY29kZSkgewogCQkJCWdldF91c2VyKGZsLT5mbF9pY21wX3R5cGUsIHR5cGUpOwotCQkJCV9fZ2V0X3VzZXIoZmwtPmZsX2ljbXBfY29kZSwgY29kZSk7CisJCQkgICAgICAgIGdldF91c2VyKGZsLT5mbF9pY21wX2NvZGUsIGNvZGUpOwogCQkJCXByb2JlZCA9IDE7CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMjkyMjJiOTYuLmE3NTM3YzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC05NzksMTQgKzk3OSwxOSBAQAogCQkJaWYgKCFiZWZvcmUoVENQX1NLQl9DQihza2IpLT5zZXEsIGVuZF9zZXEpKQogCQkJCWJyZWFrOwogCisJCQlpbl9zYWNrID0gIWFmdGVyKHN0YXJ0X3NlcSwgVENQX1NLQl9DQihza2IpLT5zZXEpICYmCisJCQkJIWJlZm9yZShlbmRfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEpOworCiAJCQlwY291bnQgPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCi0JCQlpZiAocGNvdW50ID4gMSAmJgotCQkJICAgIChhZnRlcihzdGFydF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKSB8fAotCQkJICAgICBiZWZvcmUoZW5kX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKSkpIHsKKwkJCWlmIChwY291bnQgPiAxICYmICFpbl9zYWNrICYmCisJCQkgICAgYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCBzdGFydF9zZXEpKSB7CiAJCQkJdW5zaWduZWQgaW50IHBrdF9sZW47CiAKLQkJCQlpZiAoYWZ0ZXIoc3RhcnRfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSkpCisJCQkJaW5fc2FjayA9ICFhZnRlcihzdGFydF9zZXEsCisJCQkJCQkgVENQX1NLQl9DQihza2IpLT5zZXEpOworCisJCQkJaWYgKCFpbl9zYWNrKQogCQkJCQlwa3RfbGVuID0gKHN0YXJ0X3NlcSAtCiAJCQkJCQkgICBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAJCQkJZWxzZQpAQCAtOTk5LDkgKzEwMDQsNiBAQAogCiAJCQlmYWNrX2NvdW50ICs9IHBjb3VudDsKIAotCQkJaW5fc2FjayA9ICFhZnRlcihzdGFydF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKSAmJgotCQkJCSFiZWZvcmUoZW5kX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKTsKLQogCQkJc2Fja2VkID0gVENQX1NLQl9DQihza2IpLT5zYWNrZWQ7CiAKIAkJCS8qIEFjY291bnQgRC1TQUNLIGZvciByZXRyYW5zbWl0dGVkIHBhY2tldC4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCBhODhkYjI4Li5iMWE2M2IyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC0zODQsNyArMzg0LDcgQEAKIAkJbmV3dHAtPmZydG9fY291bnRlciA9IDA7CiAJCW5ld3RwLT5mcnRvX2hpZ2htYXJrID0gMDsKIAotCQluZXdpY3NrLT5pY3NrX2NhX29wcyA9ICZ0Y3BfcmVubzsKKwkJbmV3aWNzay0+aWNza19jYV9vcHMgPSAmdGNwX2luaXRfY29uZ2VzdGlvbl9vcHM7CiAKIAkJdGNwX3NldF9jYV9zdGF0ZShuZXdzaywgVENQX0NBX09wZW4pOwogCQl0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggYzEwZTQ0My4uNWRkNmRkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDM1LDYgKzQzNSw4IEBACiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOwogCXUxNiBmbGFnczsKIAorCUJVR19PTihsZW4gPj0gc2tiLT5sZW4pOworCiAJbnNpemUgPSBza2JfaGVhZGxlbihza2IpIC0gbGVuOwogCWlmIChuc2l6ZSA8IDApCiAJCW5zaXplID0gMDsKQEAgLTQ1OSw5ICs0NjEsNyBAQAogCWZsYWdzID0gVENQX1NLQl9DQihza2IpLT5mbGFnczsKIAlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3MgJiB+KFRDUENCX0ZMQUdfRklOfFRDUENCX0ZMQUdfUFNIKTsKIAlUQ1BfU0tCX0NCKGJ1ZmYpLT5mbGFncyA9IGZsYWdzOwotCVRDUF9TS0JfQ0IoYnVmZiktPnNhY2tlZCA9Ci0JCShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmCi0JCSAoVENQQ0JfTE9TVCB8IFRDUENCX0VWRVJfUkVUUkFOUyB8IFRDUENCX0FUX1RBSUwpKTsKKwlUQ1BfU0tCX0NCKGJ1ZmYpLT5zYWNrZWQgPSBUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZDsKIAlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfQVRfVEFJTDsKIAogCWlmICghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9IVykgewpAQCAtNDk5LDYgKzQ5OSwxMiBAQAogCQkJdGNwX3NrYl9wY291bnQoYnVmZik7CiAKIAkJdHAtPnBhY2tldHNfb3V0IC09IGRpZmY7CisKKwkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX0FDS0VEKQorCQkJdHAtPnNhY2tlZF9vdXQgLT0gZGlmZjsKKwkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpCisJCQl0cC0+cmV0cmFuc19vdXQgLT0gZGlmZjsKKwogCQlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9MT1NUKSB7CiAJCQl0cC0+bG9zdF9vdXQgLT0gZGlmZjsKIAkJCXRwLT5sZWZ0X291dCAtPSBkaWZmOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggMjlmZWQ2ZS4uNTE5ODk5ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC0xOTY4LDcgKzE5NjgsNyBAQAogCX0KIAlwbWMtPm1jYV9zb3VyY2VzID0gTlVMTDsKIAlwbWMtPm1jYV9zZm1vZGUgPSBNQ0FTVF9FWENMVURFOwotCXBtYy0+bWNhX3NmY291bnRbTUNBU1RfRVhDTFVERV0gPSAwOworCXBtYy0+bWNhX3NmY291bnRbTUNBU1RfSU5DTFVERV0gPSAwOwogCXBtYy0+bWNhX3NmY291bnRbTUNBU1RfRVhDTFVERV0gPSAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCAxY2I4YWRiLi4yZGE1MTRiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTE5NTUsNiArMTk1NSw1NyBAQAogI2VuZGlmCiB9CiAKKy8qCisgKiBmaW5kIHNwZWNpZmllZCBoZWFkZXIgdXAgdG8gdHJhbnNwb3J0IHByb3RvY29sIGhlYWRlci4KKyAqIElmIGZvdW5kIHRhcmdldCBoZWFkZXIsIHRoZSBvZmZzZXQgdG8gdGhlIGhlYWRlciBpcyBzZXQgdG8gKm9mZnNldAorICogYW5kIHJldHVybiAwLiBvdGhlcndpc2UsIHJldHVybiAtMS4KKyAqCisgKiBOb3RlczogLSBub24tMXN0IEZyYWdtZW50IEhlYWRlciBpc24ndCBza2lwcGVkLgorICoJICAtIEVTUCBoZWFkZXIgaXNuJ3Qgc2tpcHBlZC4KKyAqCSAgLSBUaGUgdGFyZ2V0IGhlYWRlciBtYXkgYmUgdHJhbmNhdGVkLgorICovCitpbnQgaXB2Nl9maW5kX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwgdTggdGFyZ2V0KQoreworCXVuc2lnbmVkIGludCBzdGFydCA9ICh1OCopKHNrYi0+bmguaXB2NmggKyAxKSAtIHNrYi0+ZGF0YTsKKwl1OCBuZXh0aGRyID0gc2tiLT5uaC5pcHY2aC0+bmV4dGhkcjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBzdGFydDsKKworCXdoaWxlIChuZXh0aGRyICE9IHRhcmdldCkgeworCQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDsKKwkJdW5zaWduZWQgaW50IGhkcmxlbjsKKworCQlpZiAoKCFpcHY2X2V4dF9oZHIobmV4dGhkcikpIHx8IG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKQorCQkJcmV0dXJuIC0xOworCQlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHN0YXJ0LCBzaXplb2YoX2hkciksICZfaGRyKTsKKwkJaWYgKGhwID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisJCWlmIChuZXh0aGRyID09IE5FWFRIRFJfRlJBR01FTlQpIHsKKwkJCXVuc2lnbmVkIHNob3J0IF9mcmFnX29mZiwgKmZwOworCQkJZnAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLAorCQkJCQkJc3RhcnQrb2Zmc2V0b2Yoc3RydWN0IGZyYWdfaGRyLAorCQkJCQkJCSAgICAgICBmcmFnX29mZiksCisJCQkJCQlzaXplb2YoX2ZyYWdfb2ZmKSwKKwkJCQkJCSZfZnJhZ19vZmYpOworCQkJaWYgKGZwID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCisJCQlpZiAobnRvaHMoKmZwKSAmIH4weDcpCisJCQkJcmV0dXJuIC0xOworCQkJaGRybGVuID0gODsKKwkJfSBlbHNlIGlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkKKwkJCWhkcmxlbiA9IChocC0+aGRybGVuICsgMikgPDwgMjsgCisJCWVsc2UKKwkJCWhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTsgCisKKwkJbmV4dGhkciA9IGhwLT5uZXh0aGRyOworCQlsZW4gLT0gaGRybGVuOworCQlzdGFydCArPSBoZHJsZW47CisJfQorCisJKm9mZnNldCA9IHN0YXJ0OworCXJldHVybiAwOworfQorCiBFWFBPUlRfU1lNQk9MKGlwNnRfcmVnaXN0ZXJfdGFibGUpOwogRVhQT1JUX1NZTUJPTChpcDZ0X3VucmVnaXN0ZXJfdGFibGUpOwogRVhQT1JUX1NZTUJPTChpcDZ0X2RvX3RhYmxlKTsKQEAgLTE5NjMsNiArMjAxNCw3IEBACiBFWFBPUlRfU1lNQk9MKGlwNnRfcmVnaXN0ZXJfdGFyZ2V0KTsKIEVYUE9SVF9TWU1CT0woaXA2dF91bnJlZ2lzdGVyX3RhcmdldCk7CiBFWFBPUlRfU1lNQk9MKGlwNnRfZXh0X2hkcik7CitFWFBPUlRfU1lNQk9MKGlwdjZfZmluZF9oZHIpOwogCiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKaW5kZXggZDViOTRmMS4uZGRlMzc3OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCkBAIC00OCw5MiArNDgsMjEgQEAKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAogICAgICAgaW50ICpob3Rkcm9wKQogewotCXN0cnVjdCBpcF9hdXRoX2hkciAqYWggPSBOVUxMLCBfYWg7CisJc3RydWN0IGlwX2F1dGhfaGRyICphaCwgX2FoOwogCWNvbnN0IHN0cnVjdCBpcDZ0X2FoICphaGluZm8gPSBtYXRjaGluZm87Ci0JdW5zaWduZWQgaW50IHRlbXA7Ci0JaW50IGxlbjsKLQl1OCBuZXh0aGRyOwogCXVuc2lnbmVkIGludCBwdHI7CiAJdW5zaWduZWQgaW50IGhkcmxlbiA9IDA7CiAKLQkvKkRFQlVHUCgiSVB2NiBBSCBlbnRlcmVkXG4iKTsqLwotCS8qIGlmIChvcHQtPmF1dGggPT0gMCkgcmV0dXJuIDA7Ci0JKiBJdCBkb2VzIG5vdCBmaWxsZWQgb24gb3V0cHV0ICovCi0KLQkvKiB0eXBlIG9mIHRoZSAxc3QgZXh0aGRyICovCi0JbmV4dGhkciA9IHNrYi0+bmguaXB2NmgtPm5leHRoZHI7Ci0JLyogcG9pbnRlciB0byB0aGUgMXN0IGV4dGhkciAqLwotCXB0ciA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7Ci0JLyogYXZhaWxhYmxlIGxlbmd0aCAqLwotCWxlbiA9IHNrYi0+bGVuIC0gcHRyOwotCXRlbXAgPSAwOwotCi0Jd2hpbGUgKGlwNnRfZXh0X2hkcihuZXh0aGRyKSkgewotCQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDsKLQotCQlERUJVR1AoImlwdjZfYWggaGVhZGVyIGl0ZXJhdGlvbiBcbiIpOwotCi0JCS8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi8KLQkJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSkKLQkJCXJldHVybiAwOwotCQkvKiBObyBtb3JlIGV4dGhkciAtPiBldmFsdWF0ZSAqLwotCQlpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpCi0JCQlicmVhazsKLQkJLyogRVNQIC0+IGV2YWx1YXRlICovCi0JCWlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKQotCQkJYnJlYWs7Ci0KLQkJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfaGRyKSwgJl9oZHIpOwotCQlCVUdfT04oaHAgPT0gTlVMTCk7Ci0KLQkJLyogQ2FsY3VsYXRlIHRoZSBoZWFkZXIgbGVuZ3RoICovCi0JCWlmIChuZXh0aGRyID09IE5FWFRIRFJfRlJBR01FTlQpCi0JCQloZHJsZW4gPSA4OwotCQllbHNlIGlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkKLQkJCWhkcmxlbiA9IChocC0+aGRybGVuKzIpPDwyOwotCQllbHNlCi0JCQloZHJsZW4gPSBpcHY2X29wdGxlbihocCk7Ci0KLQkJLyogQUggLT4gZXZhbHVhdGUgKi8KLQkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9BVVRIKSB7Ci0JCQl0ZW1wIHw9IE1BU0tfQUg7Ci0JCQlicmVhazsKLQkJfQotCi0JCQotCQkvKiBzZXQgdGhlIGZsYWcgKi8KLQkJc3dpdGNoIChuZXh0aGRyKSB7Ci0JCWNhc2UgTkVYVEhEUl9IT1A6Ci0JCWNhc2UgTkVYVEhEUl9ST1VUSU5HOgotCQljYXNlIE5FWFRIRFJfRlJBR01FTlQ6Ci0JCWNhc2UgTkVYVEhEUl9BVVRIOgotCQljYXNlIE5FWFRIRFJfREVTVDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREVCVUdQKCJpcHY2X2FoIG1hdGNoOiB1bmtub3duIG5leHRoZWFkZXIgJXVcbiIsbmV4dGhkcik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCW5leHRoZHIgPSBocC0+bmV4dGhkcjsKLQkJbGVuIC09IGhkcmxlbjsKLQkJcHRyICs9IGhkcmxlbjsKLQkJaWYgKHB0ciA+IHNrYi0+bGVuKSB7Ci0JCQlERUJVR1AoImlwdjZfYWg6IG5ldyBwb2ludGVyIHRvbyBsYXJnZSEgXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogQUggaGVhZGVyIG5vdCBmb3VuZCAqLwotCWlmICh0ZW1wICE9IE1BU0tfQUgpCisJaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX0FVVEgpIDwgMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpcF9hdXRoX2hkcikpeworCWFoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2FoKSwgJl9haCk7CisJaWYgKGFoID09IE5VTEwpIHsKIAkJKmhvdGRyb3AgPSAxOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlhaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9haCksICZfYWgpOwotCUJVR19PTihhaCA9PSBOVUxMKTsKKwloZHJsZW4gPSAoYWgtPmhkcmxlbiArIDIpIDw8IDI7CiAKIAlERUJVR1AoIklQdjYgQUggTEVOICV1ICV1ICIsIGhkcmxlbiwgYWgtPmhkcmxlbik7CiAJREVCVUdQKCJSRVMgJTA0WCAiLCBhaC0+cmVzZXJ2ZWQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZHN0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9kc3QuYwppbmRleCA1NDA5MjVlLi5jNDUwYTYzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9kc3QuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9kc3QuYwpAQCAtNjMsOCArNjMsNiBAQAogICAgICAgIHN0cnVjdCBpcHY2X29wdF9oZHIgX29wdHNoLCAqb2g7CiAgICAgICAgY29uc3Qgc3RydWN0IGlwNnRfb3B0cyAqb3B0aW5mbyA9IG1hdGNoaW5mbzsKICAgICAgICB1bnNpZ25lZCBpbnQgdGVtcDsKLSAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwotICAgICAgIHU4IG5leHRoZHI7CiAgICAgICAgdW5zaWduZWQgaW50IHB0cjsKICAgICAgICB1bnNpZ25lZCBpbnQgaGRybGVuID0gMDsKICAgICAgICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKQEAgLTcyLDk3ICs3MCwyNSBAQAogICAgICAgIHU4IF9vcHRsZW4sICpscCA9IE5VTEw7CiAgICAgICAgdW5zaWduZWQgaW50IG9wdGxlbjsKICAgICAgICAKLSAgICAgICAvKiB0eXBlIG9mIHRoZSAxc3QgZXh0aGRyICovCi0gICAgICAgbmV4dGhkciA9IHNrYi0+bmguaXB2NmgtPm5leHRoZHI7Ci0gICAgICAgLyogcG9pbnRlciB0byB0aGUgMXN0IGV4dGhkciAqLwotICAgICAgIHB0ciA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7Ci0gICAgICAgLyogYXZhaWxhYmxlIGxlbmd0aCAqLwotICAgICAgIGxlbiA9IHNrYi0+bGVuIC0gcHRyOwotICAgICAgIHRlbXAgPSAwOwotCi0gICAgICAgIHdoaWxlIChpcDZ0X2V4dF9oZHIobmV4dGhkcikpIHsKLSAgICAgICAgICAgICAgIHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkciwgKmhwOwotCi0gICAgICAgICAgICAgIERFQlVHUCgiaXB2Nl9vcHRzIGhlYWRlciBpdGVyYXRpb24gXG4iKTsKLQotICAgICAgICAgICAgICAvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgIC8qIE5vIG1vcmUgZXh0aGRyIC0+IGV2YWx1YXRlICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvKiBFU1AgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkgewotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotCSAgICAgIGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2hkciksICZfaGRyKTsKLQkgICAgICBCVUdfT04oaHAgPT0gTlVMTCk7Ci0KLSAgICAgICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBoZWFkZXIgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9GUkFHTUVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gODsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9BVVRIKQotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gKGhwLT5oZHJsZW4rMik8PDI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gaXB2Nl9vcHRsZW4oaHApOwotCi0gICAgICAgICAgICAgIC8qIE9QVFMgLT4gZXZhbHVhdGUgKi8KICNpZiBIT1BCWUhPUAotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfSE9QKSB7Ci0gICAgICAgICAgICAgICAgICAgICB0ZW1wIHw9IE1BU0tfSE9QT1BUUzsKKwlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfSE9QKSA8IDApCiAjZWxzZQotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfREVTVCkgewotICAgICAgICAgICAgICAgICAgICAgdGVtcCB8PSBNQVNLX0RTVE9QVFM7CisJaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX0RFU1QpIDwgMCkKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KKwkJcmV0dXJuIDA7CiAKLQotICAgICAgICAgICAgICAvKiBzZXQgdGhlIGZsYWcgKi8KLSAgICAgICAgICAgICAgc3dpdGNoIChuZXh0aGRyKXsKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9IT1A6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfUk9VVElORzoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9GUkFHTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9BVVRIOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0RFU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHUCgiaXB2Nl9vcHRzIG1hdGNoOiB1bmtub3duIG5leHRoZWFkZXIgJXVcbiIsbmV4dGhkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5leHRoZHIgPSBocC0+bmV4dGhkcjsKLSAgICAgICAgICAgICAgICBsZW4gLT0gaGRybGVuOwotICAgICAgICAgICAgICAgIHB0ciArPSBoZHJsZW47Ci0JCWlmICggcHRyID4gc2tiLT5sZW4gKSB7Ci0JCQlERUJVR1AoImlwdjZfb3B0czogbmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlISBcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLSAgICAgICAgfQotCi0gICAgICAgLyogT1BUSU9OUyBoZWFkZXIgbm90IGZvdW5kICovCi0jaWYgSE9QQllIT1AKLSAgICAgICBpZiAoIHRlbXAgIT0gTUFTS19IT1BPUFRTICkgcmV0dXJuIDA7Ci0jZWxzZQotICAgICAgIGlmICggdGVtcCAhPSBNQVNLX0RTVE9QVFMgKSByZXR1cm4gMDsKLSNlbmRpZgotCi0gICAgICAgaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKXsKKyAgICAgICBvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksICZfb3B0c2gpOworICAgICAgIGlmIChvaCA9PSBOVUxMKXsKIAkgICAgICAgKmhvdGRyb3AgPSAxOwogICAgICAgIAkJcmV0dXJuIDA7CiAgICAgICAgfQogCi0gICAgICAgaWYgKGxlbiA8IGhkcmxlbil7CisgICAgICAgaGRybGVuID0gaXB2Nl9vcHRsZW4ob2gpOworICAgICAgIGlmIChza2ItPmxlbiAtIHB0ciA8IGhkcmxlbil7CiAJICAgICAgIC8qIFBhY2tldCBzbWFsbGVyIHRoYW4gaXQncyBsZW5ndGggZmllbGQgKi8KICAgICAgICAJCXJldHVybiAwOwogICAgICAgIH0KIAotICAgICAgIG9oID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHNoKSwgJl9vcHRzaCk7Ci0gICAgICAgQlVHX09OKG9oID09IE5VTEwpOwotCiAgICAgICAgREVCVUdQKCJJUHY2IE9QVFMgTEVOICV1ICV1ICIsIGhkcmxlbiwgb2gtPmhkcmxlbik7CiAKICAgICAgICBERUJVR1AoImxlbiAlMDJYICUwNFggJTAyWCAiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXNwLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9lc3AuYwppbmRleCBlMzlkZDIzLi4yNGJjMGNkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9lc3AuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9lc3AuYwpAQCAtNDgsODcgKzQ4LDIyIEBACiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKICAgICAgIGludCAqaG90ZHJvcCkKIHsKLQlzdHJ1Y3QgaXBfZXNwX2hkciBfZXNwLCAqZWggPSBOVUxMOworCXN0cnVjdCBpcF9lc3BfaGRyIF9lc3AsICplaDsKIAljb25zdCBzdHJ1Y3QgaXA2dF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0JdW5zaWduZWQgaW50IHRlbXA7Ci0JaW50IGxlbjsKLQl1OCBuZXh0aGRyOwogCXVuc2lnbmVkIGludCBwdHI7CiAKIAkvKiBNYWtlIHN1cmUgdGhpcyBpc24ndCBhbiBldmlsIHBhY2tldCAqLwogCS8qREVCVUdQKCJpcHY2X2VzcCBlbnRlcmVkIFxuIik7Ki8KIAotCS8qIHR5cGUgb2YgdGhlIDFzdCBleHRoZHIgKi8KLQluZXh0aGRyID0gc2tiLT5uaC5pcHY2aC0+bmV4dGhkcjsKLQkvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovCi0JcHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLQkvKiBhdmFpbGFibGUgbGVuZ3RoICovCi0JbGVuID0gc2tiLT5sZW4gLSBwdHI7Ci0JdGVtcCA9IDA7Ci0KLQl3aGlsZSAoaXA2dF9leHRfaGRyKG5leHRoZHIpKSB7Ci0JCXN0cnVjdCBpcHY2X29wdF9oZHIgX2hkciwgKmhwOwotCQlpbnQgaGRybGVuOwotCi0JCURFQlVHUCgiaXB2Nl9lc3AgaGVhZGVyIGl0ZXJhdGlvbiBcbiIpOwotCi0JCS8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi8KLQkJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSkKLQkJCXJldHVybiAwOwotCQkvKiBObyBtb3JlIGV4dGhkciAtPiBldmFsdWF0ZSAqLwotCQlpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpCi0JCQlicmVhazsKLQkJLyogRVNQIC0+IGV2YWx1YXRlICovCi0JCWlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7Ci0JCQl0ZW1wIHw9IE1BU0tfRVNQOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7Ci0JCUJVR19PTihocCA9PSBOVUxMKTsKLQotCQkvKiBDYWxjdWxhdGUgdGhlIGhlYWRlciBsZW5ndGggKi8KLQkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9GUkFHTUVOVCkKLQkJCWhkcmxlbiA9IDg7Ci0JCWVsc2UgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9BVVRIKQotCQkJaGRybGVuID0gKGhwLT5oZHJsZW4rMik8PDI7Ci0JCWVsc2UKLQkJCWhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTsKLQotCQkvKiBzZXQgdGhlIGZsYWcgKi8KLQkJc3dpdGNoIChuZXh0aGRyKSB7Ci0JCWNhc2UgTkVYVEhEUl9IT1A6Ci0JCWNhc2UgTkVYVEhEUl9ST1VUSU5HOgotCQljYXNlIE5FWFRIRFJfRlJBR01FTlQ6Ci0JCWNhc2UgTkVYVEhEUl9BVVRIOgotCQljYXNlIE5FWFRIRFJfREVTVDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREVCVUdQKCJpcHY2X2VzcCBtYXRjaDogdW5rbm93biBuZXh0aGVhZGVyICV1XG4iLG5leHRoZHIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQluZXh0aGRyID0gaHAtPm5leHRoZHI7Ci0JCWxlbiAtPSBoZHJsZW47Ci0JCXB0ciArPSBoZHJsZW47Ci0JCWlmIChwdHIgPiBza2ItPmxlbikgewotCQkJREVCVUdQKCJpcHY2X2VzcDogbmV3IHBvaW50ZXIgdG9vIGxhcmdlISBcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBFU1AgaGVhZGVyIG5vdCBmb3VuZCAqLwotCWlmICh0ZW1wICE9IE1BU0tfRVNQKQorCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgTkVYVEhEUl9FU1ApIDwgMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSkgeworCWVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2VzcCksICZfZXNwKTsKKwlpZiAoZWggPT0gTlVMTCkgewogCQkqaG90ZHJvcCA9IDE7CiAJCXJldHVybiAwOwogCX0KIAotCWVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2VzcCksICZfZXNwKTsKLQlCVUdfT04oZWggPT0gTlVMTCk7Ci0KIAlERUJVR1AoIklQdjYgRVNQIFNQSSAldSAlMDhYXG4iLCBudG9obChlaC0+c3BpKSwgbnRvaGwoZWgtPnNwaSkpOwogCiAJcmV0dXJuIChlaCAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCmluZGV4IDRiZmEzMGEuLjA4NWQ1ZjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKQEAgLTQ4LDkwICs0OCwxOCBAQAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCiAgICAgICBpbnQgKmhvdGRyb3ApCiB7Ci0gICAgICAgc3RydWN0IGZyYWdfaGRyIF9mcmFnLCAqZmggPSBOVUxMOworICAgICAgIHN0cnVjdCBmcmFnX2hkciBfZnJhZywgKmZoOwogICAgICAgIGNvbnN0IHN0cnVjdCBpcDZ0X2ZyYWcgKmZyYWdpbmZvID0gbWF0Y2hpbmZvOwotICAgICAgIHVuc2lnbmVkIGludCB0ZW1wOwotICAgICAgIGludCBsZW47Ci0gICAgICAgdTggbmV4dGhkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcHRyOwotICAgICAgIHVuc2lnbmVkIGludCBoZHJsZW4gPSAwOwogCi0gICAgICAgLyogdHlwZSBvZiB0aGUgMXN0IGV4dGhkciAqLwotICAgICAgIG5leHRoZHIgPSBza2ItPm5oLmlwdjZoLT5uZXh0aGRyOwotICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi8KLSAgICAgICBwdHIgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotICAgICAgIC8qIGF2YWlsYWJsZSBsZW5ndGggKi8KLSAgICAgICBsZW4gPSBza2ItPmxlbiAtIHB0cjsKLSAgICAgICB0ZW1wID0gMDsKKwlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfRlJBR01FTlQpIDwgMCkKKwkJcmV0dXJuIDA7CiAKLSAgICAgICAgd2hpbGUgKGlwNnRfZXh0X2hkcihuZXh0aGRyKSkgewotICAgICAgICAgICAgICAgc3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7Ci0KLSAgICAgICAgICAgICAgREVCVUdQKCJpcHY2X2ZyYWcgaGVhZGVyIGl0ZXJhdGlvbiBcbiIpOwotCi0gICAgICAgICAgICAgIC8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi8KLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgLyogTm8gbW9yZSBleHRoZHIgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpIHsKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8qIEVTUCAtPiBldmFsdWF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0JICAgICAgaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfaGRyKSwgJl9oZHIpOwotCSAgICAgIEJVR19PTihocCA9PSBOVUxMKTsKLQotICAgICAgICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIGhlYWRlciBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSA4OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dGhkciA9PSBORVhUSERSX0FVVEgpCi0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSAoaHAtPmhkcmxlbisyKTw8MjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSBpcHY2X29wdGxlbihocCk7Ci0KLSAgICAgICAgICAgICAgLyogRlJBRyAtPiBldmFsdWF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfRlJBR01FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgIHRlbXAgfD0gTUFTS19GUkFHTUVOVDsKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgICAvKiBzZXQgdGhlIGZsYWcgKi8KLSAgICAgICAgICAgICAgc3dpdGNoIChuZXh0aGRyKXsKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9IT1A6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfUk9VVElORzoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9GUkFHTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9BVVRIOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0RFU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHUCgiaXB2Nl9mcmFnIG1hdGNoOiB1bmtub3duIG5leHRoZWFkZXIgJXVcbiIsbmV4dGhkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5leHRoZHIgPSBocC0+bmV4dGhkcjsKLSAgICAgICAgICAgICAgICBsZW4gLT0gaGRybGVuOwotICAgICAgICAgICAgICAgIHB0ciArPSBoZHJsZW47Ci0JCWlmICggcHRyID4gc2tiLT5sZW4gKSB7Ci0JCQlERUJVR1AoImlwdjZfZnJhZzogbmV3IHBvaW50ZXIgdG9vIGxhcmdlISBcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLSAgICAgICAgfQotCi0gICAgICAgLyogRlJBRyBoZWFkZXIgbm90IGZvdW5kICovCi0gICAgICAgaWYgKCB0ZW1wICE9IE1BU0tfRlJBR01FTlQgKSByZXR1cm4gMDsKLQotICAgICAgIGlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKSl7Ci0JICAgICAgICpob3Rkcm9wID0gMTsKLSAgICAgICAJCXJldHVybiAwOwotICAgICAgIH0KLQotICAgICAgIGZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2ZyYWcpLCAmX2ZyYWcpOwotICAgICAgIEJVR19PTihmaCA9PSBOVUxMKTsKKwlmaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9mcmFnKSwgJl9mcmFnKTsKKwlpZiAoZmggPT0gTlVMTCl7CisJCSpob3Rkcm9wID0gMTsKKwkJcmV0dXJuIDA7CisJfQogCiAgICAgICAgREVCVUdQKCJJTkZPICUwNFggIiwgZmgtPmZyYWdfb2ZmKTsKICAgICAgICBERUJVR1AoIk9GRlNFVCAlMDRYICIsIG50b2hzKGZoLT5mcmFnX29mZikgJiB+MHg3KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKaW5kZXggMjdmMzY1MC4uMWQwOTQ4NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKQEAgLTYzLDggKzYzLDYgQEAKICAgICAgICBzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9vcHRzaCwgKm9oOwogICAgICAgIGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdGluZm8gPSBtYXRjaGluZm87CiAgICAgICAgdW5zaWduZWQgaW50IHRlbXA7Ci0gICAgICAgdW5zaWduZWQgaW50IGxlbjsKLSAgICAgICB1OCBuZXh0aGRyOwogICAgICAgIHVuc2lnbmVkIGludCBwdHI7CiAgICAgICAgdW5zaWduZWQgaW50IGhkcmxlbiA9IDA7CiAgICAgICAgdW5zaWduZWQgaW50IHJldCA9IDA7CkBAIC03Miw5NyArNzAsMjUgQEAKICAgICAgICB1OCBfb3B0bGVuLCAqbHAgPSBOVUxMOwogICAgICAgIHVuc2lnbmVkIGludCBvcHRsZW47CiAgICAgICAgCi0gICAgICAgLyogdHlwZSBvZiB0aGUgMXN0IGV4dGhkciAqLwotICAgICAgIG5leHRoZHIgPSBza2ItPm5oLmlwdjZoLT5uZXh0aGRyOwotICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi8KLSAgICAgICBwdHIgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotICAgICAgIC8qIGF2YWlsYWJsZSBsZW5ndGggKi8KLSAgICAgICBsZW4gPSBza2ItPmxlbiAtIHB0cjsKLSAgICAgICB0ZW1wID0gMDsKLQotICAgICAgICB3aGlsZSAoaXA2dF9leHRfaGRyKG5leHRoZHIpKSB7Ci0gICAgICAgICAgICAgICBzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDsKLQotICAgICAgICAgICAgICBERUJVR1AoImlwdjZfb3B0cyBoZWFkZXIgaXRlcmF0aW9uIFxuIik7Ci0KLSAgICAgICAgICAgICAgLyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqLwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAvKiBObyBtb3JlIGV4dGhkciAtPiBldmFsdWF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfTk9ORSkgewotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLyogRVNQIC0+IGV2YWx1YXRlICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9FU1ApIHsKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLQkgICAgICBocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7Ci0JICAgICAgQlVHX09OKGhwID09IE5VTEwpOwotCi0gICAgICAgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgaGVhZGVyIGxlbmd0aCAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfRlJBR01FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IChocC0+aGRybGVuKzIpPDwyOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTsKLQotICAgICAgICAgICAgICAvKiBPUFRTIC0+IGV2YWx1YXRlICovCiAjaWYgSE9QQllIT1AKLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0hPUCkgewotICAgICAgICAgICAgICAgICAgICAgdGVtcCB8PSBNQVNLX0hPUE9QVFM7CisJaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX0hPUCkgPCAwKQogI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0RFU1QpIHsKLSAgICAgICAgICAgICAgICAgICAgIHRlbXAgfD0gTUFTS19EU1RPUFRTOworCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgTkVYVEhEUl9ERVNUKSA8IDApCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9CisJCXJldHVybiAwOwogCi0KLSAgICAgICAgICAgICAgLyogc2V0IHRoZSBmbGFnICovCi0gICAgICAgICAgICAgIHN3aXRjaCAobmV4dGhkcil7Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfSE9QOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX1JPVVRJTkc6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfRlJBR01FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfQVVUSDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9ERVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR1AoImlwdjZfb3B0cyBtYXRjaDogdW5rbm93biBuZXh0aGVhZGVyICV1XG4iLG5leHRoZHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXh0aGRyID0gaHAtPm5leHRoZHI7Ci0gICAgICAgICAgICAgICAgbGVuIC09IGhkcmxlbjsKLSAgICAgICAgICAgICAgICBwdHIgKz0gaGRybGVuOwotCQlpZiAoIHB0ciA+IHNrYi0+bGVuICkgewotCQkJREVCVUdQKCJpcHY2X29wdHM6IG5ldyBwb2ludGVyIGlzIHRvbyBsYXJnZSEgXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0gICAgICAgIH0KLQotICAgICAgIC8qIE9QVElPTlMgaGVhZGVyIG5vdCBmb3VuZCAqLwotI2lmIEhPUEJZSE9QCi0gICAgICAgaWYgKCB0ZW1wICE9IE1BU0tfSE9QT1BUUyApIHJldHVybiAwOwotI2Vsc2UKLSAgICAgICBpZiAoIHRlbXAgIT0gTUFTS19EU1RPUFRTICkgcmV0dXJuIDA7Ci0jZW5kaWYKLQotICAgICAgIGlmIChsZW4gPCAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSl7CisgICAgICAgb2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0c2gpLCAmX29wdHNoKTsKKyAgICAgICBpZiAob2ggPT0gTlVMTCl7CiAJICAgICAgICpob3Rkcm9wID0gMTsKICAgICAgICAJCXJldHVybiAwOwogICAgICAgIH0KIAotICAgICAgIGlmIChsZW4gPCBoZHJsZW4peworICAgICAgIGhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTsKKyAgICAgICBpZiAoc2tiLT5sZW4gLSBwdHIgPCBoZHJsZW4pewogCSAgICAgICAvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0J3MgbGVuZ3RoIGZpZWxkICovCiAgICAgICAgCQlyZXR1cm4gMDsKICAgICAgICB9CiAKLSAgICAgICBvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksICZfb3B0c2gpOwotICAgICAgIEJVR19PTihvaCA9PSBOVUxMKTsKLQogICAgICAgIERFQlVHUCgiSVB2NiBPUFRTIExFTiAldSAldSAiLCBoZHJsZW4sIG9oLT5oZHJsZW4pOwogCiAgICAgICAgREVCVUdQKCJsZW4gJTAyWCAlMDRYICUwMlggIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCmluZGV4IDJiYjY3MDAuLmJlYjJmZDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYwpAQCAtNTAsOTggKzUwLDI5IEBACiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKICAgICAgIGludCAqaG90ZHJvcCkKIHsKLSAgICAgICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgX3JvdXRlLCAqcmggPSBOVUxMOworICAgICAgIHN0cnVjdCBpcHY2X3J0X2hkciBfcm91dGUsICpyaDsKICAgICAgICBjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gbWF0Y2hpbmZvOwogICAgICAgIHVuc2lnbmVkIGludCB0ZW1wOwotICAgICAgIHVuc2lnbmVkIGludCBsZW47Ci0gICAgICAgdTggbmV4dGhkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcHRyOwogICAgICAgIHVuc2lnbmVkIGludCBoZHJsZW4gPSAwOwogICAgICAgIHVuc2lnbmVkIGludCByZXQgPSAwOwogICAgICAgIHN0cnVjdCBpbjZfYWRkciAqYXAsIF9hZGRyOwogCi0gICAgICAgLyogdHlwZSBvZiB0aGUgMXN0IGV4dGhkciAqLwotICAgICAgIG5leHRoZHIgPSBza2ItPm5oLmlwdjZoLT5uZXh0aGRyOwotICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi8KLSAgICAgICBwdHIgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotICAgICAgIC8qIGF2YWlsYWJsZSBsZW5ndGggKi8KLSAgICAgICBsZW4gPSBza2ItPmxlbiAtIHB0cjsKLSAgICAgICB0ZW1wID0gMDsKKwlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfUk9VVElORykgPCAwKQorCQlyZXR1cm4gMDsKIAotICAgICAgICB3aGlsZSAoaXA2dF9leHRfaGRyKG5leHRoZHIpKSB7Ci0gICAgICAgICAgICAgICBzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDsKLQotICAgICAgICAgICAgICBERUJVR1AoImlwdjZfcnQgaGVhZGVyIGl0ZXJhdGlvbiBcbiIpOwotCi0gICAgICAgICAgICAgIC8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi8KLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgLyogTm8gbW9yZSBleHRoZHIgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpIHsKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8qIEVTUCAtPiBldmFsdWF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0JICAgICAgaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfaGRyKSwgJl9oZHIpOwotCSAgICAgIEJVR19PTihocCA9PSBOVUxMKTsKLQotICAgICAgICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIGhlYWRlciBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSA4OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dGhkciA9PSBORVhUSERSX0FVVEgpCi0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSAoaHAtPmhkcmxlbisyKTw8MjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSBpcHY2X29wdGxlbihocCk7Ci0KLSAgICAgICAgICAgICAgLyogUk9VVElORyAtPiBldmFsdWF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfUk9VVElORykgewotICAgICAgICAgICAgICAgICAgICAgdGVtcCB8PSBNQVNLX1JPVVRJTkc7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgLyogc2V0IHRoZSBmbGFnICovCi0gICAgICAgICAgICAgIHN3aXRjaCAobmV4dGhkcil7Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfSE9QOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX1JPVVRJTkc6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfRlJBR01FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfQVVUSDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9ERVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR1AoImlwdjZfcnQgbWF0Y2g6IHVua25vd24gbmV4dGhlYWRlciAldVxuIixuZXh0aGRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV4dGhkciA9IGhwLT5uZXh0aGRyOwotICAgICAgICAgICAgICAgIGxlbiAtPSBoZHJsZW47Ci0gICAgICAgICAgICAgICAgcHRyICs9IGhkcmxlbjsKLQkJaWYgKCBwdHIgPiBza2ItPmxlbiApIHsKLQkJCURFQlVHUCgiaXB2Nl9ydDogbmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlISBcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLSAgICAgICAgfQotCi0gICAgICAgLyogUk9VVElORyBoZWFkZXIgbm90IGZvdW5kICovCi0gICAgICAgaWYgKCB0ZW1wICE9IE1BU0tfUk9VVElORyApIHJldHVybiAwOwotCi0gICAgICAgaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X3J0X2hkcikpeworICAgICAgIHJoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX3JvdXRlKSwgJl9yb3V0ZSk7CisgICAgICAgaWYgKHJoID09IE5VTEwpewogCSAgICAgICAqaG90ZHJvcCA9IDE7CiAgICAgICAgCQlyZXR1cm4gMDsKICAgICAgICB9CiAKLSAgICAgICBpZiAobGVuIDwgaGRybGVuKXsKKyAgICAgICBoZHJsZW4gPSBpcHY2X29wdGxlbihyaCk7CisgICAgICAgaWYgKHNrYi0+bGVuIC0gcHRyIDwgaGRybGVuKXsKIAkgICAgICAgLyogUGNrZXQgc21hbGxlciB0aGFuIGl0cyBsZW5ndGggZmllbGQgKi8KICAgICAgICAJCXJldHVybiAwOwogICAgICAgIH0KIAotICAgICAgIHJoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX3JvdXRlKSwgJl9yb3V0ZSk7Ci0gICAgICAgQlVHX09OKHJoID09IE5VTEwpOwotCiAgICAgICAgREVCVUdQKCJJUHY2IFJUIExFTiAldSAldSAiLCBoZHJsZW4sIHJoLT5oZHJsZW4pOwogICAgICAgIERFQlVHUCgiVFlQRSAlMDRYICIsIHJoLT50eXBlKTsKICAgICAgICBERUJVR1AoIlNHU19MRUZUICV1ICUwMlhcbiIsIHJoLT5zZWdtZW50c19sZWZ0LCByaC0+c2VnbWVudHNfbGVmdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jCmluZGV4IDVhYTM2OTEuLmExMjY1YTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCisrKyBiL25ldC9pcHY2L3Jhdy5jCkBAIC02MjcsNyArNjI3LDcgQEAKIAogCQkJaWYgKHR5cGUgJiYgY29kZSkgewogCQkJCWdldF91c2VyKGZsLT5mbF9pY21wX3R5cGUsIHR5cGUpOwotCQkJCV9fZ2V0X3VzZXIoZmwtPmZsX2ljbXBfY29kZSwgY29kZSk7CisJCQkJZ2V0X3VzZXIoZmwtPmZsX2ljbXBfY29kZSwgY29kZSk7CiAJCQkJcHJvYmVkID0gMTsKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA2OWIxNDY4Li42MDAxOTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtNDA1LDkgKzQwNSw4IEBACiAJCQkJY29udGludWU7CiAKIAkJCWlmICghaXB2Nl9hZGRyX2FueSgmbnAtPnJjdl9zYWRkcikpIHsKLQkJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZucC0+cmN2X3NhZGRyLCBsb2NfYWRkcikpCi0JCQkJCXJldHVybiBzOwotCQkJCWNvbnRpbnVlOworCQkJCWlmICghaXB2Nl9hZGRyX2VxdWFsKCZucC0+cmN2X3NhZGRyLCBsb2NfYWRkcikpCisJCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYoIWluZXQ2X21jX2NoZWNrKHMsIGxvY19hZGRyLCBybXRfYWRkcikpCiAJCQkJY29udGludWU7CkBAIC02NDAsNiArNjM5LDcgQEAKIAlpbnQgdGNsYXNzID0gLTE7CiAJaW50IGNvcmtyZXEgPSB1cC0+Y29ya2ZsYWcgfHwgbXNnLT5tc2dfZmxhZ3MmTVNHX01PUkU7CiAJaW50IGVycjsKKwlpbnQgY29ubmVjdGVkID0gMDsKIAogCS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgY2hlY2sgKi8KIAlpZiAoc2luNikgewpAQCAtNzQ5LDYgKzc0OSw3IEBACiAJCWZsLT5mbF9pcF9kcG9ydCA9IGluZXQtPmRwb3J0OwogCQlkYWRkciA9ICZucC0+ZGFkZHI7CiAJCWZsLT5mbDZfZmxvd2xhYmVsID0gbnAtPmZsb3dfbGFiZWw7CisJCWNvbm5lY3RlZCA9IDE7CiAJfQogCiAJaWYgKCFmbC0+b2lmKQpAQCAtNzcxLDYgKzc3Miw3IEBACiAJCX0KIAkJaWYgKCEob3B0LT5vcHRfbmZsZW58b3B0LT5vcHRfZmxlbikpCiAJCQlvcHQgPSBOVUxMOworCQljb25uZWN0ZWQgPSAwOwogCX0KIAlpZiAob3B0ID09IE5VTEwpCiAJCW9wdCA9IG5wLT5vcHQ7CkBAIC03ODgsMTAgKzc5MCwxMyBAQAogCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC0+Zmw2X2RzdCk7CiAJCWlwdjZfYWRkcl9jb3B5KCZmbC0+Zmw2X2RzdCwgcnQwLT5hZGRyKTsKIAkJZmluYWxfcCA9ICZmaW5hbDsKKwkJY29ubmVjdGVkID0gMDsKIAl9CiAKLQlpZiAoIWZsLT5vaWYgJiYgaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmZmwtPmZsNl9kc3QpKQorCWlmICghZmwtPm9pZiAmJiBpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZmbC0+Zmw2X2RzdCkpIHsKIAkJZmwtPm9pZiA9IG5wLT5tY2FzdF9vaWY7CisJCWNvbm5lY3RlZCA9IDA7CisJfQogCiAJZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsIGZsKTsKIAlpZiAoZXJyKQpAQCAtODQ3LDcgKzg1Miw3IEBACiAJZWxzZSBpZiAoIWNvcmtyZXEpCiAJCWVyciA9IHVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB1cCk7CiAKLQlpZiAoZHN0KQorCWlmIChkc3QgJiYgY29ubmVjdGVkKQogCQlpcDZfZHN0X3N0b3JlKHNrLCBkc3QsCiAJCQkgICAgICBpcHY2X2FkZHJfZXF1YWwoJmZsLT5mbDZfZHN0LCAmbnAtPmRhZGRyKSA/CiAJCQkgICAgICAmbnAtPmRhZGRyIDogTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCA4NjkwZjE3Li5lZTg2NWQ4IDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTM2LDYgKzM2LDExIEBACiAgKglNaWNoYWwgT3N0cm93c2tpICAgICAgICA6ICAgICAgIE1vZHVsZSBpbml0aWFsaXphdGlvbiBjbGVhbnVwLgogICogICAgICAgICBVbGlzZXMgQWxvbnNvICAgICAgICA6ICAgICAgIEZyYW1lIG51bWJlciBsaW1pdCByZW1vdmFsIGFuZCAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfc2V0X3JpbmcgbWVtb3J5IGxlYWsuCisgKgkJRXJpYyBCaWVkZXJtYW4JOglBbGxvdyBmb3IgPiA4IGJ5dGUgaGFyZHdhcmUgYWRkcmVzc2VzLgorICoJCQkJCVRoZSBjb252ZW50aW9uIGlzIHRoYXQgbG9uZ2VyIGFkZHJlc3NlcworICoJCQkJCXdpbGwgc2ltcGx5IGV4dGVuZCB0aGUgaGFyZHdhcmUgYWRkcmVzcworICoJCQkJCWJ5dGUgYXJyYXlzIGF0IHRoZSBlbmQgb2Ygc29ja2FkZHJfbGwgCisgKgkJCQkJYW5kIHBhY2tldF9tcmVxLgogICoKICAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE2MSw3ICsxNjYsMTcgQEAKIAlpbnQJCQljb3VudDsKIAl1bnNpZ25lZCBzaG9ydAkJdHlwZTsKIAl1bnNpZ25lZCBzaG9ydAkJYWxlbjsKLQl1bnNpZ25lZCBjaGFyCQlhZGRyWzhdOworCXVuc2lnbmVkIGNoYXIJCWFkZHJbTUFYX0FERFJfTEVOXTsKK307CisvKiBpZGVudGljYWwgdG8gc3RydWN0IHBhY2tldF9tcmVxIGV4Y2VwdCBpdCBoYXMKKyAqIGEgbG9uZ2VyIGFkZHJlc3MgZmllbGQuCisgKi8KK3N0cnVjdCBwYWNrZXRfbXJlcV9tYXgKK3sKKwlpbnQJCW1yX2lmaW5kZXg7CisJdW5zaWduZWQgc2hvcnQJbXJfdHlwZTsKKwl1bnNpZ25lZCBzaG9ydAltcl9hbGVuOworCXVuc2lnbmVkIGNoYXIJbXJfYWRkcmVzc1tNQVhfQUREUl9MRU5dOwogfTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUApAQCAtNzE2LDYgKzczMSw4IEBACiAJCWVyciA9IC1FSU5WQUw7CiAJCWlmIChtc2ctPm1zZ19uYW1lbGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCiAJCQlnb3RvIG91dDsKKwkJaWYgKG1zZy0+bXNnX25hbWVsZW4gPCAoc2FkZHItPnNsbF9oYWxlbiArIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9sbCwgc2xsX2FkZHIpKSkKKwkJCWdvdG8gb3V0OwogCQlpZmluZGV4CT0gc2FkZHItPnNsbF9pZmluZGV4OwogCQlwcm90bwk9IHNhZGRyLT5zbGxfcHJvdG9jb2w7CiAJCWFkZHIJPSBzYWRkci0+c2xsX2FkZHI7CkBAIC03NDQsNiArNzYxLDEyIEBACiAJaWYgKGRldi0+aGFyZF9oZWFkZXIpIHsKIAkJaW50IHJlczsKIAkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKHNhZGRyKSB7CisJCQlpZiAoc2FkZHItPnNsbF9oYWxlbiAhPSBkZXYtPmFkZHJfbGVuKQorCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQlpZiAoc2FkZHItPnNsbF9oYXR5cGUgIT0gZGV2LT50eXBlKQorCQkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KIAkJcmVzID0gZGV2LT5oYXJkX2hlYWRlcihza2IsIGRldiwgbnRvaHMocHJvdG8pLCBhZGRyLCBOVUxMLCBsZW4pOwogCQlpZiAoc29jay0+dHlwZSAhPSBTT0NLX0RHUkFNKSB7CiAJCQlza2ItPnRhaWwgPSBza2ItPmRhdGE7CkBAIC0xMDQ1LDYgKzEwNjgsNyBAQAogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGNvcGllZCwgZXJyOworCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2xsOwogCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoZmxhZ3MgJiB+KE1TR19QRUVLfE1TR19ET05UV0FJVHxNU0dfVFJVTkN8TVNHX0NNU0dfQ09NUEFUKSkKQEAgLTEwNTcsMTYgKzEwODEsNiBAQAogI2VuZGlmCiAKIAkvKgotCSAqCUlmIHRoZSBhZGRyZXNzIGxlbmd0aCBmaWVsZCBpcyB0aGVyZSB0byBiZSBmaWxsZWQgaW4sIHdlIGZpbGwKLQkgKglpdCBpbiBub3cuCi0JICovCi0KLQlpZiAoc29jay0+dHlwZSA9PSBTT0NLX1BBQ0tFVCkKLQkJbXNnLT5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfcGt0KTsKLQllbHNlCi0JCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKTsKLQotCS8qCiAJICoJQ2FsbCB0aGUgZ2VuZXJpYyBkYXRhZ3JhbSByZWNlaXZlci4gVGhpcyBoYW5kbGVzIGFsbCBzb3J0cwogCSAqCW9mIGhvcnJpYmxlIHJhY2VzIGFuZCByZS1lbnRyYW5jeSBzbyB3ZSBjYW4gZm9yZ2V0IGFib3V0IGl0CiAJICoJaW4gdGhlIHByb3RvY29sIGxheWVycy4KQEAgLTEwODcsNiArMTEwMSwxNyBAQAogCQlnb3RvIG91dDsKIAogCS8qCisJICoJSWYgdGhlIGFkZHJlc3MgbGVuZ3RoIGZpZWxkIGlzIHRoZXJlIHRvIGJlIGZpbGxlZCBpbiwgd2UgZmlsbAorCSAqCWl0IGluIG5vdy4KKwkgKi8KKworCXNsbCA9IChzdHJ1Y3Qgc29ja2FkZHJfbGwqKXNrYi0+Y2I7CisJaWYgKHNvY2stPnR5cGUgPT0gU09DS19QQUNLRVQpCisJCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3BrdCk7CisJZWxzZQorCQltc2ctPm1zZ19uYW1lbGVuID0gc2xsLT5zbGxfaGFsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfbGwsIHNsbF9hZGRyKTsKKworCS8qCiAJICoJWW91IGxvc2UgYW55IGRhdGEgYmV5b25kIHRoZSBidWZmZXIgeW91IGdhdmUuIElmIGl0IHdvcnJpZXMgYQogCSAqCXVzZXIgcHJvZ3JhbSB0aGV5IGNhbiBhc2sgdGhlIGRldmljZSBmb3IgaXRzIE1UVSBhbnl3YXkuCiAJICovCkBAIC0xMTY2LDcgKzExOTEsNyBAQAogCQlzbGwtPnNsbF9oYXR5cGUgPSAwOwkvKiBCYWQ6IHdlIGhhdmUgbm8gQVJQSFJEX1VOU1BFQyAqLwogCQlzbGwtPnNsbF9oYWxlbiA9IDA7CiAJfQotCSp1YWRkcl9sZW4gPSBzaXplb2YoKnNsbCk7CisJKnVhZGRyX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9sbCwgc2xsX2FkZHIpICsgc2xsLT5zbGxfaGFsZW47CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExOTksNyArMTIyNCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHBhY2tldF9tY19hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFja2V0X21yZXEgKm1yZXEpCitzdGF0aWMgaW50IHBhY2tldF9tY19hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFja2V0X21yZXFfbWF4ICptcmVxKQogewogCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOwogCXN0cnVjdCBwYWNrZXRfbWNsaXN0ICptbCwgKmk7CkBAIC0xMjQ5LDcgKzEyNzQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcGFja2V0X21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFja2V0X21yZXEgKm1yZXEpCitzdGF0aWMgaW50IHBhY2tldF9tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhY2tldF9tcmVxX21heCAqbXJlcSkKIHsKIAlzdHJ1Y3QgcGFja2V0X21jbGlzdCAqbWwsICoqbWxwOwogCkBAIC0xMzE1LDExICsxMzQwLDE3IEBACiAJY2FzZSBQQUNLRVRfQUREX01FTUJFUlNISVA6CQogCWNhc2UgUEFDS0VUX0RST1BfTUVNQkVSU0hJUDoKIAl7Ci0JCXN0cnVjdCBwYWNrZXRfbXJlcSBtcmVxOwotCQlpZiAob3B0bGVuPHNpemVvZihtcmVxKSkKKwkJc3RydWN0IHBhY2tldF9tcmVxX21heCBtcmVxOworCQlpbnQgbGVuID0gb3B0bGVuOworCQltZW1zZXQoJm1yZXEsIDAsIHNpemVvZihtcmVxKSk7CisJCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IHBhY2tldF9tcmVxKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJm1yZXEsb3B0dmFsLHNpemVvZihtcmVxKSkpCisJCWlmIChsZW4gPiBzaXplb2YobXJlcSkpCisJCQlsZW4gPSBzaXplb2YobXJlcSk7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbXJlcSxvcHR2YWwsbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOworCQlpZiAobGVuIDwgKG1yZXEubXJfYWxlbiArIG9mZnNldG9mKHN0cnVjdCBwYWNrZXRfbXJlcSwgbXJfYWRkcmVzcykpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChvcHRuYW1lID09IFBBQ0tFVF9BRERfTUVNQkVSU0hJUCkKIAkJCXJldCA9IHBhY2tldF9tY19hZGQoc2ssICZtcmVxKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGM2OTllOTMuLmY5MjY0NDcgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTE4NjIsNyArMTg2Miw4IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXRfZnJlZWlvdjsKIAl9Ci0JZXJyID0gX19wdXRfdXNlcihtc2dfc3lzLm1zZ19mbGFncywgQ09NUEFUX0ZMQUdTKG1zZykpOworCWVyciA9IF9fcHV0X3VzZXIoKG1zZ19zeXMubXNnX2ZsYWdzICYgfk1TR19DTVNHX0NPTVBBVCksCisJCQkgQ09NUEFUX0ZMQUdTKG1zZykpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWVpb3Y7CiAJaWYgKE1TR19DTVNHX0NPTVBBVCAmIGZsYWdzKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1MTg4NWI1Li4zMGVjM2VmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtNTEyLDE1ICs1MTIsMTQgQEAKIHN0YXRpYyB2b2lkCiBzdmNfdWRwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IHN2Y19zb2NrCSpzdnNrID0gKHN0cnVjdCBzdmNfc29jayAqKShzay0+c2tfdXNlcl9kYXRhKTsKKwlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2sgPSAoc3RydWN0IHN2Y19zb2NrICopc2stPnNrX3VzZXJfZGF0YTsKIAotCWlmICghc3ZzaykKLQkJZ290byBvdXQ7Ci0JZHByaW50aygic3ZjOiBzb2NrZXQgJXAoaW5ldCAlcCksIGNvdW50PSVkLCBidXN5PSVkXG4iLAotCQlzdnNrLCBzaywgY291bnQsIHRlc3RfYml0KFNLX0JVU1ksICZzdnNrLT5za19mbGFncykpOwotCXNldF9iaXQoU0tfREFUQSwgJnN2c2stPnNrX2ZsYWdzKTsKLQlzdmNfc29ja19lbnF1ZXVlKHN2c2spOwotIG91dDoKKwlpZiAoc3ZzaykgeworCQlkcHJpbnRrKCJzdmM6IHNvY2tldCAlcChpbmV0ICVwKSwgY291bnQ9JWQsIGJ1c3k9JWRcbiIsCisJCQlzdnNrLCBzaywgY291bnQsIHRlc3RfYml0KFNLX0JVU1ksICZzdnNrLT5za19mbGFncykpOworCQlzZXRfYml0KFNLX0RBVEEsICZzdnNrLT5za19mbGFncyk7CisJCXN2Y19zb2NrX2VucXVldWUoc3Zzayk7CisJfQogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsKIH0KQEAgLTU0MCw3ICs1MzksNyBAQAogCX0KIAogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlJQQyBzdmNfd3JpdGVfc3BhY2U6IHNvbWUgc2xlZXBpbmcgb24gJXBcbiIsCisJCWRwcmludGsoIlJQQyBzdmNfd3JpdGVfc3BhY2U6IHNvbWVvbmUgc2xlZXBpbmcgb24gJXBcbiIsCiAJCSAgICAgICBzdnNrKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNrLT5za19zbGVlcCk7CiAJfQpAQCAtNjkyLDMxICs2OTEsMjkgQEAKIHN0YXRpYyB2b2lkCiBzdmNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgaW50IGNvdW50X3VudXNlZCkKIHsKLQlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2s7CisJc3RydWN0IHN2Y19zb2NrCSpzdnNrID0gKHN0cnVjdCBzdmNfc29jayAqKXNrLT5za191c2VyX2RhdGE7CiAKIAlkcHJpbnRrKCJzdmM6IHNvY2tldCAlcCBUQ1AgKGxpc3Rlbikgc3RhdGUgY2hhbmdlICVkXG4iLAotCQkJc2ssIHNrLT5za19zdGF0ZSk7CisJCXNrLCBzay0+c2tfc3RhdGUpOwogCi0JaWYgIChzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikgewotCQkvKgotCQkgKiBUaGlzIGNhbGxiYWNrIG1heSBjYWxsZWQgdHdpY2Ugd2hlbiBhIG5ldyBjb25uZWN0aW9uCi0JCSAqIGlzIGVzdGFibGlzaGVkIGFzIGEgY2hpbGQgc29ja2V0IGluaGVyaXRzIGV2ZXJ5dGhpbmcKLQkJICogZnJvbSBhIHBhcmVudCBMSVNURU4gc29ja2V0LgotCQkgKiAxKSBkYXRhX3JlYWR5IG1ldGhvZCBvZiB0aGUgcGFyZW50IHNvY2tldCB3aWxsIGJlIGNhbGxlZAotCQkgKiAgICB3aGVuIG9uZSBvZiBjaGlsZCBzb2NrZXRzIGJlY29tZSBFU1RBQkxJU0hFRC4KLQkJICogMikgZGF0YV9yZWFkeSBtZXRob2Qgb2YgdGhlIGNoaWxkIHNvY2tldCBtYXkgYmUgY2FsbGVkCi0JCSAqICAgIHdoZW4gaXQgcmVjZWl2ZXMgZGF0YSBiZWZvcmUgdGhlIHNvY2tldCBpcyBhY2NlcHRlZC4KLQkJICogSW4gY2FzZSBvZiAyLCB3ZSBzaG91bGQgaWdub3JlIGl0IHNpbGVudGx5LgotCQkgKi8KLQkJZ290byBvdXQ7CisJLyoKKwkgKiBUaGlzIGNhbGxiYWNrIG1heSBjYWxsZWQgdHdpY2Ugd2hlbiBhIG5ldyBjb25uZWN0aW9uCisJICogaXMgZXN0YWJsaXNoZWQgYXMgYSBjaGlsZCBzb2NrZXQgaW5oZXJpdHMgZXZlcnl0aGluZworCSAqIGZyb20gYSBwYXJlbnQgTElTVEVOIHNvY2tldC4KKwkgKiAxKSBkYXRhX3JlYWR5IG1ldGhvZCBvZiB0aGUgcGFyZW50IHNvY2tldCB3aWxsIGJlIGNhbGxlZAorCSAqICAgIHdoZW4gb25lIG9mIGNoaWxkIHNvY2tldHMgYmVjb21lIEVTVEFCTElTSEVELgorCSAqIDIpIGRhdGFfcmVhZHkgbWV0aG9kIG9mIHRoZSBjaGlsZCBzb2NrZXQgbWF5IGJlIGNhbGxlZAorCSAqICAgIHdoZW4gaXQgcmVjZWl2ZXMgZGF0YSBiZWZvcmUgdGhlIHNvY2tldCBpcyBhY2NlcHRlZC4KKwkgKiBJbiBjYXNlIG9mIDIsIHdlIHNob3VsZCBpZ25vcmUgaXQgc2lsZW50bHkuCisJICovCisJaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7CisJCWlmIChzdnNrKSB7CisJCQlzZXRfYml0KFNLX0NPTk4sICZzdnNrLT5za19mbGFncyk7CisJCQlzdmNfc29ja19lbnF1ZXVlKHN2c2spOworCQl9IGVsc2UKKwkJCXByaW50aygic3ZjOiBzb2NrZXQgJXA6IG5vIHVzZXIgZGF0YVxuIiwgc2spOwogCX0KLQlpZiAoIShzdnNrID0gKHN0cnVjdCBzdmNfc29jayAqKSBzay0+c2tfdXNlcl9kYXRhKSkgewotCQlwcmludGsoInN2Yzogc29ja2V0ICVwOiBubyB1c2VyIGRhdGFcbiIsIHNrKTsKLQkJZ290byBvdXQ7Ci0JfQotCXNldF9iaXQoU0tfQ09OTiwgJnN2c2stPnNrX2ZsYWdzKTsKLQlzdmNfc29ja19lbnF1ZXVlKHN2c2spOwotIG91dDoKKwogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKHNrLT5za19zbGVlcCk7CiB9CkBAIC03MjcsMTggKzcyNCwxNyBAQAogc3RhdGljIHZvaWQKIHN2Y190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2s7CisJc3RydWN0IHN2Y19zb2NrCSpzdnNrID0gKHN0cnVjdCBzdmNfc29jayAqKXNrLT5za191c2VyX2RhdGE7CiAKIAlkcHJpbnRrKCJzdmM6IHNvY2tldCAlcCBUQ1AgKGNvbm5lY3RlZCkgc3RhdGUgY2hhbmdlICVkIChzdnNrICVwKVxuIiwKLQkJCXNrLCBzay0+c2tfc3RhdGUsIHNrLT5za191c2VyX2RhdGEpOworCQlzaywgc2stPnNrX3N0YXRlLCBzay0+c2tfdXNlcl9kYXRhKTsKIAotCWlmICghKHN2c2sgPSAoc3RydWN0IHN2Y19zb2NrICopIHNrLT5za191c2VyX2RhdGEpKSB7CisJaWYgKCFzdnNrKQogCQlwcmludGsoInN2Yzogc29ja2V0ICVwOiBubyB1c2VyIGRhdGFcbiIsIHNrKTsKLQkJZ290byBvdXQ7CisJZWxzZSB7CisJCXNldF9iaXQoU0tfQ0xPU0UsICZzdnNrLT5za19mbGFncyk7CisJCXN2Y19zb2NrX2VucXVldWUoc3Zzayk7CiAJfQotCXNldF9iaXQoU0tfQ0xPU0UsICZzdnNrLT5za19mbGFncyk7Ci0Jc3ZjX3NvY2tfZW5xdWV1ZShzdnNrKTsKLSBvdXQ6CiAJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoc2stPnNrX3NsZWVwKTsKIH0KQEAgLTc0NiwxNSArNzQyLDE0IEBACiBzdGF0aWMgdm9pZAogc3ZjX3RjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgaW50IGNvdW50KQogewotCXN0cnVjdCBzdmNfc29jayAqCXN2c2s7CisJc3RydWN0IHN2Y19zb2NrICpzdnNrID0gKHN0cnVjdCBzdmNfc29jayAqKXNrLT5za191c2VyX2RhdGE7CiAKIAlkcHJpbnRrKCJzdmM6IHNvY2tldCAlcCBUQ1AgZGF0YSByZWFkeSAoc3ZzayAlcClcbiIsCi0JCQlzaywgc2stPnNrX3VzZXJfZGF0YSk7Ci0JaWYgKCEoc3ZzayA9IChzdHJ1Y3Qgc3ZjX3NvY2sgKikoc2stPnNrX3VzZXJfZGF0YSkpKQotCQlnb3RvIG91dDsKLQlzZXRfYml0KFNLX0RBVEEsICZzdnNrLT5za19mbGFncyk7Ci0Jc3ZjX3NvY2tfZW5xdWV1ZShzdnNrKTsKLSBvdXQ6CisJCXNrLCBzay0+c2tfdXNlcl9kYXRhKTsKKwlpZiAoc3ZzaykgeworCQlzZXRfYml0KFNLX0RBVEEsICZzdnNrLT5za19mbGFncyk7CisJCXN2Y19zb2NrX2VucXVldWUoc3Zzayk7CisJfQogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L0tjb25maWcgYi9zZWN1cml0eS9LY29uZmlnCmluZGV4IGRjZjA0YTAuLjY0ZDNmMWUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L0tjb25maWcKKysrIGIvc2VjdXJpdHkvS2NvbmZpZwpAQCAtMzUsNiArMzUsNyBAQAogCiBjb25maWcgU0VDVVJJVFkKIAlib29sICJFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVscyIKKwlkZXBlbmRzIG9uIFNZU0ZTCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgeW91IHRvIGNob29zZSBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kdWxlcyB0byBiZQogCSAgY29uZmlndXJlZCBpbnRvIHlvdXIga2VybmVsLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvTWFrZWZpbGUgYi9zZWN1cml0eS9NYWtlZmlsZQppbmRleCAxOTdjYzJmLi44Y2JiZjJmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9NYWtlZmlsZQpAQCAtMTEsNyArMTEsNyBAQAogZW5kaWYKIAogIyBPYmplY3QgZmlsZSBsaXN0cwotb2JqLSQoQ09ORklHX1NFQ1VSSVRZKQkJCSs9IHNlY3VyaXR5Lm8gZHVtbXkubworb2JqLSQoQ09ORklHX1NFQ1VSSVRZKQkJCSs9IHNlY3VyaXR5Lm8gZHVtbXkubyBpbm9kZS5vCiAjIE11c3QgcHJlY2VkZSBjYXBhYmlsaXR5Lm8gaW4gb3JkZXIgdG8gc3RhY2sgcHJvcGVybHkuCiBvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCkJCSs9IHNlbGludXgvYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUykJKz0gY29tbW9uY2FwLm8gY2FwYWJpbGl0eS5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbm9kZS5jIGIvc2VjdXJpdHkvaW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk2NDUwCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW5vZGUuYwpAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqICBpbm9kZS5jIC0gc2VjdXJpdHlmcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBCYXNlZCBvbiBmcy9kZWJ1Z2ZzL2lub2RlLmMgd2hpY2ggaGFkIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoQykgMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA0IElCTSBJbmMuCisgKi8KKworLyogI2RlZmluZSBERUJVRyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKworI2RlZmluZSBTRUNVUklUWUZTX01BR0lDCTB4NzM2MzY2NzMKKworc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbW91bnQ7CitzdGF0aWMgaW50IG1vdW50X2NvdW50OworCisvKgorICogVE9ETzoKKyAqICAgSSB0aGluayBJIGNhbiBnZXQgcmlkIG9mIHRoZXNlIGRlZmF1bHRfZmlsZV9vcHMsIGJ1dCBub3QgcXVpdGUgc3VyZS4uLgorICovCitzdGF0aWMgc3NpemVfdCBkZWZhdWx0X3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRlZmF1bHRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChpbm9kZS0+dS5nZW5lcmljX2lwKQorCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZmF1bHRfZmlsZV9vcHMgPSB7CisJLnJlYWQgPQkJZGVmYXVsdF9yZWFkX2ZpbGUsCisJLndyaXRlID0JZGVmYXVsdF93cml0ZV9maWxlLAorCS5vcGVuID0JCWRlZmF1bHRfb3BlbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgZGV2X3QgZGV2KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpOworCisJaWYgKGlub2RlKSB7CisJCWlub2RlLT5pX21vZGUgPSBtb2RlOworCQlpbm9kZS0+aV91aWQgPSAwOworCQlpbm9kZS0+aV9naWQgPSAwOworCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCQlpbm9kZS0+aV9ibG9ja3MgPSAwOworCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCQlkZWZhdWx0OgorCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgU19JRlJFRzoKKwkJCWlub2RlLT5pX2ZvcCA9ICZkZWZhdWx0X2ZpbGVfb3BzOworCQkJYnJlYWs7CisJCWNhc2UgU19JRkRJUjoKKwkJCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKKwkJCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CisKKwkJCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLworCQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBpbm9kZTsKK30KKworLyogU01QLXNhZmUgKi8KK3N0YXRpYyBpbnQgbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSBpbnQgbW9kZSwgZGV2X3QgZGV2KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpbm9kZSA9IGdldF9pbm9kZShkaXItPmlfc2IsIG1vZGUsIGRldik7CisJaWYgKGlub2RlKSB7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJCWRnZXQoZGVudHJ5KTsKKwkJZXJyb3IgPSAwOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJaW50IHJlczsKKworCW1vZGUgPSAobW9kZSAmIChTX0lSV1hVR08gfCBTX0lTVlRYKSkgfCBTX0lGRElSOworCXJlcyA9IG1rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKKwlpZiAoIXJlcykKKwkJZGlyLT5pX25saW5rKys7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBjcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJbW9kZSA9IChtb2RlICYgU19JQUxMVUdPKSB8IFNfSUZSRUc7CisJcmV0dXJuIG1rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBkZW50cnktPmRfaW5vZGUgJiYgIWRfdW5oYXNoZWQoZGVudHJ5KTsKK30KKworc3RhdGljIGludCBmaWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCit7CisJc3RhdGljIHN0cnVjdCB0cmVlX2Rlc2NyIGZpbGVzW10gPSB7eyIifX07CisKKwlyZXR1cm4gc2ltcGxlX2ZpbGxfc3VwZXIoc2IsIFNFQ1VSSVRZRlNfTUFHSUMsIGZpbGVzKTsKK30KKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAorCQkJCSAgICAgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKKwkJCQkJdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZ2V0X3NiX3NpbmdsZShmc190eXBlLCBmbGFncywgZGF0YSwgZmlsbF9zdXBlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBmc190eXBlID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJzZWN1cml0eWZzIiwKKwkuZ2V0X3NiID0JZ2V0X3NiLAorCS5raWxsX3NiID0Ja2lsbF9saXR0ZXJfc3VwZXIsCit9OworCitzdGF0aWMgaW50IGNyZWF0ZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkgIHN0cnVjdCBkZW50cnkgKipkZW50cnkpCit7CisJaW50IGVycm9yID0gMDsKKworCSpkZW50cnkgPSBOVUxMOworCisJLyogSWYgdGhlIHBhcmVudCBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBjcmVhdGUgaXQgaW4gdGhlIHJvb3QuCisJICogV2UgbmVlZCB0aGUgcm9vdCBkZW50cnkgdG8gZG8gdGhpcywgd2hpY2ggaXMgaW4gdGhlIHN1cGVyCisJICogYmxvY2suIEEgcG9pbnRlciB0byB0aGF0IGlzIGluIHRoZSBzdHJ1Y3QgdmZzbW91bnQgdGhhdCB3ZQorCSAqIGhhdmUgYXJvdW5kLgorCSAqLworCWlmICghcGFyZW50ICkgeworCQlpZiAobW91bnQgJiYgbW91bnQtPm1udF9zYikgeworCQkJcGFyZW50ID0gbW91bnQtPm1udF9zYi0+c19yb290OworCQl9CisJfQorCWlmICghcGFyZW50KSB7CisJCXByX2RlYnVnKCJzZWN1cml0eWZzOiBBaCEgY2FuIG5vdCBmaW5kIGEgcGFyZW50IVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWRvd24oJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCSpkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBwYXJlbnQsIHN0cmxlbihuYW1lKSk7CisJaWYgKCFJU19FUlIoZGVudHJ5KSkgeworCQlpZiAoKG1vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpCisJCQllcnJvciA9IG1rZGlyKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJCWVsc2UKKwkJCWVycm9yID0gY3JlYXRlKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJfSBlbHNlCisJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOworCXVwKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBzZWN1cml0eWZzX2NyZWF0ZV9maWxlIC0gY3JlYXRlIGEgZmlsZSBpbiB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtCisgKgorICogQG5hbWU6IGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KKyAqIEBtb2RlOiB0aGUgcGVybWlzc2lvbiB0aGF0IHRoZSBmaWxlIHNob3VsZCBoYXZlCisgKiBAcGFyZW50OiBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBkZW50cnkgZm9yIHRoaXMgZmlsZS4gIFRoaXMgc2hvdWxkIGJlIGEKKyAqICAgICAgICAgIGRpcmVjdG9yeSBkZW50cnkgaWYgc2V0LiAgSWYgdGhpcyBwYXJhbWF0ZXIgaXMgTlVMTCwgdGhlbiB0aGUKKyAqICAgICAgICAgIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSByb290IG9mIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0uCisgKiBAZGF0YTogYSBwb2ludGVyIHRvIHNvbWV0aGluZyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB3YW50IHRvIGdldCB0byBsYXRlcgorICogICAgICAgIG9uLiAgVGhlIGlub2RlLnUuZ2VuZXJpY19pcCBwb2ludGVyIHdpbGwgcG9pbnQgdG8gdGhpcyB2YWx1ZSBvbgorICogICAgICAgIHRoZSBvcGVuKCkgY2FsbC4KKyAqIEBmb3BzOiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yCisgKiAgICAgICAgdGhpcyBmaWxlLgorICoKKyAqIFRoaXMgaXMgdGhlIGJhc2ljICJjcmVhdGUgYSBmaWxlIiBmdW5jdGlvbiBmb3Igc2VjdXJpdHlmcy4gIEl0IGFsbG93cyBmb3IgYQorICogd2lkZSByYW5nZSBvZiBmbGV4aWJpbGl0eSBpbiBjcmVhdGVpbmcgYSBmaWxlLCBvciBhIGRpcmVjdG9yeSAoaWYgeW91CisgKiB3YW50IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSwgdGhlIHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigpIGZ1bmN0aW9uIGlzCisgKiByZWNvbW1lbmRlZCB0byBiZSB1c2VkIGluc3RlYWQuKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1Y2NlZWRzLiAgVGhpcworICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgc2VjdXJpdHlmc19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzCisgKiB0byBiZSByZW1vdmVkIChubyBhdXRvbWF0aWMgY2xlYW51cCBoYXBwZW5zIGlmIHlvdXIgbW9kdWxlIGlzIHVubG9hZGVkLAorICogeW91IGFyZSByZXNwb25zaWJsZSBoZXJlLikgIElmIGFuIGVycm9yIG9jY3VycywgTlVMTCB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqIElmIHNlY3VyaXR5ZnMgaXMgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbCwgdGhlIHZhbHVlIC1FTk9ERVYgd2lsbCBiZQorICogcmV0dXJuZWQuICBJdCBpcyBub3Qgd2lzZSB0byBjaGVjayBmb3IgdGhpcyB2YWx1ZSwgYnV0IHJhdGhlciwgY2hlY2sgZm9yCisgKiBOVUxMIG9yICFOVUxMIGluc3RlYWQgYXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciAjaWZkZWYgaW4gdGhlIGNhbGxpbmcKKyAqIGNvZGUuCisgKi8KK3N0cnVjdCBkZW50cnkgKnNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLAorCQkJCSAgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gTlVMTDsKKwlpbnQgZXJyb3I7CisKKwlwcl9kZWJ1Zygic2VjdXJpdHlmczogY3JlYXRpbmcgZmlsZSAnJXMnXG4iLG5hbWUpOworCisJZXJyb3IgPSBzaW1wbGVfcGluX2ZzKCJzZWN1cml0eWZzIiwgJm1vdW50LCAmbW91bnRfY291bnQpOworCWlmIChlcnJvcikgeworCQlkZW50cnkgPSBFUlJfUFRSKGVycm9yKTsKKwkJZ290byBleGl0OworCX0KKworCWVycm9yID0gY3JlYXRlX2J5X25hbWUobmFtZSwgbW9kZSwgcGFyZW50LCAmZGVudHJ5KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7CisJCXNpbXBsZV9yZWxlYXNlX2ZzKCZtb3VudCwgJm1vdW50X2NvdW50KTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJaWYgKGZvcHMpCisJCQlkZW50cnktPmRfaW5vZGUtPmlfZm9wID0gZm9wczsKKwkJaWYgKGRhdGEpCisJCQlkZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcCA9IGRhdGE7CisJfQorZXhpdDoKKwlyZXR1cm4gZGVudHJ5OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlmc19jcmVhdGVfZmlsZSk7CisKKy8qKgorICogc2VjdXJpdHlmc19jcmVhdGVfZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5IGluIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0KKyAqCisgKiBAbmFtZTogYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0bworICogICAgICAgIGNyZWF0ZS4KKyAqIEBwYXJlbnQ6IGEgcG9pbnRlciB0byB0aGUgcGFyZW50IGRlbnRyeSBmb3IgdGhpcyBmaWxlLiAgVGhpcyBzaG91bGQgYmUgYQorICogICAgICAgICAgZGlyZWN0b3J5IGRlbnRyeSBpZiBzZXQuICBJZiB0aGlzIHBhcmFtYXRlciBpcyBOVUxMLCB0aGVuIHRoZQorICogICAgICAgICAgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGRpcmVjdG9yeSBpbiBzZWN1cml0eWZzIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gYSBkZW50cnkgaWYgaXQgc3VjY2VlZHMuICBUaGlzCisgKiBwb2ludGVyIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBzZWN1cml0eWZzX3JlbW92ZSgpIGZ1bmN0aW9uIHdoZW4gdGhlIGZpbGUgaXMKKyAqIHRvIGJlIHJlbW92ZWQgKG5vIGF1dG9tYXRpYyBjbGVhbnVwIGhhcHBlbnMgaWYgeW91ciBtb2R1bGUgaXMgdW5sb2FkZWQsCisgKiB5b3UgYXJlIHJlc3BvbnNpYmxlIGhlcmUuKSAgSWYgYW4gZXJyb3Igb2NjdXJzLCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogSWYgc2VjdXJpdHlmcyBpcyBub3QgZW5hYmxlZCBpbiB0aGUga2VybmVsLCB0aGUgdmFsdWUgLUVOT0RFViB3aWxsIGJlCisgKiByZXR1cm5lZC4gIEl0IGlzIG5vdCB3aXNlIHRvIGNoZWNrIGZvciB0aGlzIHZhbHVlLCBidXQgcmF0aGVyLCBjaGVjayBmb3IKKyAqIE5VTEwgb3IgIU5VTEwgaW5zdGVhZCBhcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yICNpZmRlZiBpbiB0aGUgY2FsbGluZworICogY29kZS4KKyAqLworc3RydWN0IGRlbnRyeSAqc2VjdXJpdHlmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlmc19jcmVhdGVfZmlsZShuYW1lLAorCQkJCSAgICAgIFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUlVHTyB8IFNfSVhVR08sCisJCQkJICAgICAgcGFyZW50LCBOVUxMLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5ZnNfY3JlYXRlX2Rpcik7CisKKy8qKgorICogc2VjdXJpdHlmc19yZW1vdmUgLSByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtCisgKgorICogQGRlbnRyeTogYSBwb2ludGVyIHRvIGEgdGhlIGRlbnRyeSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gYmUKKyAqICAgICAgICAgIHJlbW92ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4gc2VjdXJpdHlmcyB0aGF0IHdhcyBwcmV2aW91c2x5CisgKiBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIGFub3RoZXIgc2VjdXJpdHlmcyBmdW5jdGlvbiAobGlrZQorICogc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgpIG9yIHZhcmlhbnRzIHRoZXJlb2YuKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gYmUgY2FsbGVkIGluIG9yZGVyIGZvciB0aGUgZmlsZSB0byBiZQorICogcmVtb3ZlZCwgbm8gYXV0b21hdGljIGNsZWFudXAgb2YgZmlsZXMgd2lsbCBoYXBwZW4gd2hlbiBhIG1vZHVsZSBpcworICogcmVtb3ZlZCwgeW91IGFyZSByZXNwb25zaWJsZSBoZXJlLgorICovCit2b2lkIHNlY3VyaXR5ZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisKKwlpZiAoIWRlbnRyeSkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKKwlpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5kX2lub2RlKQorCQlyZXR1cm47CisKKwlkb3duKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwlpZiAocG9zaXRpdmUoZGVudHJ5KSkgeworCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCQlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCQkJc2ltcGxlX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwkJCWVsc2UKKwkJCQlzaW1wbGVfdW5saW5rKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwkJCWRwdXQoZGVudHJ5KTsKKwkJfQorCX0KKwl1cCgmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJc2ltcGxlX3JlbGVhc2VfZnMoJm1vdW50LCAmbW91bnRfY291bnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlmc19yZW1vdmUpOworCitzdGF0aWMgZGVjbF9zdWJzeXMoc2VjdXJpdHksIE5VTEwsIE5VTEwpOworCitzdGF0aWMgaW50IF9faW5pdCBzZWN1cml0eWZzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJa3NldF9zZXRfa3NldF9zKCZzZWN1cml0eV9zdWJzeXMsIGtlcm5lbF9zdWJzeXMpOworCXJldHZhbCA9IHN1YnN5c3RlbV9yZWdpc3Rlcigmc2VjdXJpdHlfc3Vic3lzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZnNfdHlwZSk7CisJaWYgKHJldHZhbCkKKwkJc3Vic3lzdGVtX3VucmVnaXN0ZXIoJnNlY3VyaXR5X3N1YnN5cyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNlY3VyaXR5ZnNfZXhpdCh2b2lkKQoreworCXNpbXBsZV9yZWxlYXNlX2ZzKCZtb3VudCwgJm1vdW50X2NvdW50KTsKKwl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmZzX3R5cGUpOworCXN1YnN5c3RlbV91bnJlZ2lzdGVyKCZzZWN1cml0eV9zdWJzeXMpOworfQorCitjb3JlX2luaXRjYWxsKHNlY3VyaXR5ZnNfaW5pdCk7Cittb2R1bGVfZXhpdChzZWN1cml0eWZzX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWNsdmwuYyBiL3NlY3VyaXR5L3NlY2x2bC5jCmluZGV4IDk2YjFmMjEuLjFjYWFjMDEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY2x2bC5jCisrKyBiL3NlY3VyaXR5L3NlY2x2bC5jCkBAIC0xMTksNjkgKzExOSw2IEBACiAJfSB3aGlsZSAoMCkKIAogLyoqCi0gKiBrb2JqZWN0IHN0dWZmCi0gKi8KLQotc3RydWN0IHN1YnN5c3RlbSBzZWNsdmxfc3Vic3lzOwotCi1zdHJ1Y3Qgc2VjbHZsX29iaiB7Ci0JY2hhciAqbmFtZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNsb3RfbGlzdDsKLQlzdHJ1Y3Qga29iamVjdCBrb2JqOwotfTsKLQotLyoqCi0gKiBUaGVyZSBpcyBhIHNlY2x2bF9hdHRyaWJ1dGUgc3RydWN0IGZvciBlYWNoIGZpbGUgaW4gc3lzZnMuCi0gKgotICogSW4gb3VyIGNhc2UsIHdlIGhhdmUgb25lIG9mIHRoZXNlIHN0cnVjdHMgZm9yICJwYXNzd2QiIGFuZCBhbm90aGVyCi0gKiBmb3IgInNlY2x2bCIuCi0gKi8KLXN0cnVjdCBzZWNsdmxfYXR0cmlidXRlIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCgqc2hvdykgKHN0cnVjdCBzZWNsdmxfb2JqICosIGNoYXIgKik7Ci0Jc3NpemVfdCgqc3RvcmUpIChzdHJ1Y3Qgc2VjbHZsX29iaiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Ci19OwotCi0vKioKLSAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIG9uZSBvZiB0aGUgZmlsZXMgaW4gc3lzZnMgaXMgYmVpbmcKLSAqIHdyaXR0ZW4gdG8uICBhdHRyaWJ1dGUtPnN0b3JlIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB0byB3aGF0ZXZlciB0aGUKLSAqIHN0cnVjdCBzZWNsdmxfYXR0cmlidXRlIHN0b3JlIGZ1bmN0aW9uIHBvaW50ZXIgcG9pbnRzIHRvLiAgSXQgaXMKLSAqIHVuaXF1ZSBmb3IgInBhc3N3ZCIgYW5kICJzZWNsdmwiLgotICovCi1zdGF0aWMgc3NpemVfdAotc2VjbHZsX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCSAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzZWNsdmxfb2JqICpvYmogPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHNlY2x2bF9vYmosIGtvYmopOwotCXN0cnVjdCBzZWNsdmxfYXR0cmlidXRlICphdHRyaWJ1dGUgPQotCSAgICBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHNlY2x2bF9hdHRyaWJ1dGUsIGF0dHIpOwotCXJldHVybiBhdHRyaWJ1dGUtPnN0b3JlID8gYXR0cmlidXRlLT5zdG9yZShvYmosIGJ1ZiwgbGVuKSA6IC1FSU87Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1zZWNsdmxfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlY2x2bF9vYmogKm9iaiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Qgc2VjbHZsX29iaiwga29iaik7Ci0Jc3RydWN0IHNlY2x2bF9hdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9Ci0JICAgIGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3Qgc2VjbHZsX2F0dHJpYnV0ZSwgYXR0cik7Ci0JcmV0dXJuIGF0dHJpYnV0ZS0+c2hvdyA/IGF0dHJpYnV0ZS0+c2hvdyhvYmosIGJ1ZikgOiAtRUlPOwotfQotCi0vKioKLSAqIENhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBzaG93IGFuZCBzdG9yZQotICovCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBzZWNsdmxmc19zeXNmc19vcHMgPSB7Ci0JLnNob3cgPSBzZWNsdmxfYXR0cl9zaG93LAotCS5zdG9yZSA9IHNlY2x2bF9hdHRyX3N0b3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgc2VjbHZsX2t0eXBlID0gewotCS5zeXNmc19vcHMgPSAmc2VjbHZsZnNfc3lzZnNfb3BzCi19OwotCi1kZWNsX3N1YnN5cyhzZWNsdmwsICZzZWNsdmxfa3R5cGUsIE5VTEwpOwotCi0vKioKICAqIFRoZSBhY3R1YWwgc2VjdXJpdHkgbGV2ZWwuICBSYW5nZXMgYmV0d2VlbiAtMSBhbmQgMiBpbmNsdXNpdmUuCiAgKi8KIHN0YXRpYyBpbnQgc2VjbHZsOwpAQCAtMjEzLDk3ICsxNTAsNDQgQEAKIH0KIAogLyoqCi0gKiBDYWxsZWQgd2hlbmV2ZXIgdGhlIHVzZXIgcmVhZHMgdGhlIHN5c2ZzIGhhbmRsZSB0byB0aGlzIGtlcm5lbAotICogb2JqZWN0Ci0gKi8KLXN0YXRpYyBzc2l6ZV90IHNlY2x2bF9yZWFkX2ZpbGUoc3RydWN0IHNlY2x2bF9vYmogKm9iaiwgY2hhciAqYnVmZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHNlY2x2bCk7Ci19Ci0KLS8qKgogICogc2VjdXJpdHkgbGV2ZWwgYWR2YW5jZW1lbnQgcnVsZXM6CiAgKiAgIFZhbGlkIGxldmVscyBhcmUgLTEgdGhyb3VnaCAyLCBpbmNsdXNpdmUuCiAgKiAgIEZyb20gLTEsIHN0dWNrLiAgWyBpbiBjYXNlIGNvbXBpbGVkIGludG8ga2VybmVsIF0KICAqICAgRnJvbSAwIG9yIGFib3ZlLCBjYW4gb25seSBpbmNyZW1lbnQuCiAgKi8KLXN0YXRpYyBpbnQgZG9fc2VjbHZsX2FkdmFuY2UoaW50IG5ld2x2bCkKK3N0YXRpYyB2b2lkIGRvX3NlY2x2bF9hZHZhbmNlKHZvaWQgKmRhdGEsIHU2NCB2YWwpCiB7Ci0JaWYgKG5ld2x2bCA8PSBzZWNsdmwpIHsKLQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJDYW5ub3QgYWR2YW5jZSB0byBzZWNsdmwgIgotCQkJICAgICAgIlslZF1cbiIsIG5ld2x2bCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlpbnQgcmV0OworCWludCBuZXdsdmwgPSAoaW50KXZhbDsKKworCXJldCA9IHNlY2x2bF9zYW5pdHkobmV3bHZsKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKIAlpZiAobmV3bHZsID4gMikgewogCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkNhbm5vdCBhZHZhbmNlIHRvIHNlY2x2bCAiCiAJCQkgICAgICAiWyVkXVxuIiwgbmV3bHZsKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybjsKIAl9CiAJaWYgKHNlY2x2bCA9PSAtMSkgewogCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIk5vdCBhbGxvd2VkIHRvIGFkdmFuY2UgdG8gIgogCQkJICAgICAgInNlY2x2bCBbJWRdXG4iLCBzZWNsdmwpOwotCQlyZXR1cm4gLUVQRVJNOworCQlyZXR1cm47CiAJfQotCXNlY2x2bCA9IG5ld2x2bDsKLQlyZXR1cm4gMDsKKwlzZWNsdmwgPSBuZXdsdmw7ICAvKiB3b3VsZCBpdCBiZSBtb3JlICJjb3JyZWN0IiB0byBzZXQgKmRhdGE/ICovCisJcmV0dXJuOwogfQogCi0vKioKLSAqIENhbGxlZCB3aGVuZXZlciB0aGUgdXNlciB3cml0ZXMgdG8gdGhlIHN5c2ZzIGhhbmRsZSB0byB0aGlzIGtlcm5lbAotICogb2JqZWN0IChzZWNsdmwvc2VjbHZsKS4gIEl0IGV4cGVjdHMgYSBzaW5nbGUtZGlnaXQgbnVtYmVyLgotICovCi1zdGF0aWMgc3NpemVfdAotc2VjbHZsX3dyaXRlX2ZpbGUoc3RydWN0IHNlY2x2bF9vYmogKm9iaiwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQorc3RhdGljIHU2NCBzZWNsdmxfaW50X2dldCh2b2lkICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWlmIChjb3VudCA+IDIgfHwgKGNvdW50ID09IDIgJiYgYnVmZlsxXSAhPSAnXG4nKSkgewotCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkludmFsaWQgdmFsdWUgcGFzc2VkIHRvICIKLQkJCSAgICAgICJzZWNsdmw6IFslc11cbiIsIGJ1ZmYpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdmFsID0gYnVmZlswXSAtIDQ4OwotCWlmIChzZWNsdmxfc2FuaXR5KHZhbCkpIHsKLQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJJbGxlZ2FsIHNlY3VyZSBsZXZlbCAiCi0JCQkgICAgICAicmVxdWVzdGVkOiBbJWRdXG4iLCAoaW50KXZhbCk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCWlmIChkb19zZWNsdmxfYWR2YW5jZSh2YWwpKSB7Ci0JCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsICJGYWlsdXJlIGFkdmFuY2luZyBzZWN1cml0eSBsZXZlbCAiCi0JCQkgICAgICAidG8gJWx1XG4iLCB2YWwpOwotCX0KLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuICooaW50ICopZGF0YTsKIH0KIAotLyogR2VuZXJhdGUgc3lzZnNfYXR0cl9zZWNsdmwgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VjbHZsX2F0dHJpYnV0ZSBzeXNmc19hdHRyX3NlY2x2bCA9Ci1fX0FUVFIoc2VjbHZsLCAoU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSKSwgc2VjbHZsX3JlYWRfZmlsZSwKLSAgICAgICBzZWNsdmxfd3JpdGVfZmlsZSk7CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShzZWNsdmxfZmlsZV9vcHMsIHNlY2x2bF9pbnRfZ2V0LCBkb19zZWNsdmxfYWR2YW5jZSwgIiVsbGRcbiIpOwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBoYXNoZWRQYXNzd29yZFtTSEExX0RJR0VTVF9TSVpFXTsKIAogLyoqCi0gKiBDYWxsZWQgd2hlbmV2ZXIgdGhlIHVzZXIgcmVhZHMgdGhlIHN5c2ZzIHBhc3N3ZCBoYW5kbGUuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHNlY2x2bF9yZWFkX3Bhc3N3ZChzdHJ1Y3Qgc2VjbHZsX29iaiAqb2JqLCBjaGFyICpidWZmKQotewotCS8qIFNvIGp1c3QgaG93IGdvb2QgKmlzKiB5b3VyIHBhc3N3b3JkPyA6LSkgKi8KLQljaGFyIHRtcFszXTsKLQlpbnQgaSA9IDA7Ci0JYnVmZlswXSA9ICdcMCc7Ci0JaWYgKGhpZGVIYXNoKSB7Ci0JCS8qIFNlY3VyaXR5IHRocm91Z2ggb2JzY3VyaXR5ICovCi0JCXJldHVybiAwOwotCX0KLQl3aGlsZSAoaSA8IFNIQTFfRElHRVNUX1NJWkUpIHsKLQkJc25wcmludGYodG1wLCAzLCAiJTAyeCIsIGhhc2hlZFBhc3N3b3JkW2ldKTsKLQkJc3RybmNhdChidWZmLCB0bXAsIDIpOwotCQlpKys7Ci0JfQotCXN0cmNhdChidWZmLCAiXG4iKTsKLQlyZXR1cm4gKChTSEExX0RJR0VTVF9TSVpFICogMikgKyAxKTsKLX0KLQotLyoqCiAgKiBDb252ZXJ0cyBhIGJsb2NrIG9mIHBsYWludGV4dCBvZiBpbnRvIGl0cyBTSEExIGhhc2hlZCB2YWx1ZS4KICAqCiAgKiBJdCB3b3VsZCBiZSBuaWNlIGlmIGNyeXB0byBoYWQgYSB3cmFwcGVyIHRvIGRvIHRoaXMgZm9yIHVzIGxpbmVhcgpAQCAtMzQ3LDEyICsyMzEsMTUgQEAKICAqIG9iamVjdC4gIEl0IGhhc2hlcyB0aGUgcGFzc3dvcmQgYW5kIGNvbXBhcmVzIHRoZSBoYXNoZWQgcmVzdWx0cy4KICAqLwogc3RhdGljIHNzaXplX3QKLXNlY2x2bF93cml0ZV9wYXNzd2Qoc3RydWN0IHNlY2x2bF9vYmogKm9iaiwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQorcGFzc3dkX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIHRtcFtTSEExX0RJR0VTVF9TSVpFXTsKKwljaGFyICpwYWdlOwogCWludCByYzsKIAlpbnQgbGVuOworCiAJaWYgKCEqcGFzc3dkICYmICEqc2hhMV9wYXNzd2QpIHsKIAkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkF0dGVtcHQgdG8gcGFzc3dvcmQtdW5sb2NrIHRoZSAiCiAJCQkgICAgICAic2VjbHZsIG1vZHVsZSwgYnV0IG5laXRoZXIgYSBwbGFpbiB0ZXh0ICIKQEAgLTM2MywzMiArMjUwLDQ1IEBACiAJCQkgICAgICAibWFpbnRhaW5lciBhYm91dCB0aGlzIGV2ZW50LlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlsZW4gPSBzdHJsZW4oYnVmZik7CisKKwlpZiAoY291bnQgPCAwIHx8IGNvdW50ID49IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCpwcG9zICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCWxlbiA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKHBhZ2UsIGJ1ZiwgY291bnQpKQorCQlnb3RvIG91dDsKKwkKKwlsZW4gPSBzdHJsZW4ocGFnZSk7CiAJLyogYGBlY2hvICJzZWNyZXQiID4gc2VjbHZsL3Bhc3N3ZCcnIGluY2x1ZGVzIGEgbmV3bGluZSAqLwotCWlmIChidWZmW2xlbiAtIDFdID09ICdcbicpIHsKKwlpZiAocGFnZVtsZW4gLSAxXSA9PSAnXG4nKQogCQlsZW4tLTsKLQl9CiAJLyogSGFzaCB0aGUgcGFzc3dvcmQsIHRoZW4gY29tcGFyZSB0aGUgaGFzaGVkIHZhbHVlcyAqLwotCWlmICgocmMgPSBwbGFpbnRleHRfdG9fc2hhMSh0bXAsIGJ1ZmYsIGxlbikpKSB7CisJaWYgKChyYyA9IHBsYWludGV4dF90b19zaGExKHRtcCwgcGFnZSwgbGVuKSkpIHsKIAkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkVycm9yIGhhc2hpbmcgcGFzc3dvcmQ6IHJjID0gIgogCQkJICAgICAgIlslZF1cbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgU0hBMV9ESUdFU1RfU0laRTsgaSsrKSB7Ci0JCWlmIChoYXNoZWRQYXNzd29yZFtpXSAhPSB0bXBbaV0pIHsKKwkJaWYgKGhhc2hlZFBhc3N3b3JkW2ldICE9IHRtcFtpXSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCX0KIAl9CiAJc2VjbHZsX3ByaW50aygwLCBLRVJOX0lORk8sCiAJCSAgICAgICJQYXNzd29yZCBhY2NlcHRlZDsgc2VjbHZsIHJlZHVjZWQgdG8gMC5cbiIpOwogCXNlY2x2bCA9IDA7Ci0JcmV0dXJuIGNvdW50OworCWxlbiA9IGNvdW50OworCitvdXQ6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOworCXJldHVybiBsZW47CiB9CiAKLS8qIEdlbmVyYXRlIHN5c2ZzX2F0dHJfcGFzc3dkICovCi1zdGF0aWMgc3RydWN0IHNlY2x2bF9hdHRyaWJ1dGUgc3lzZnNfYXR0cl9wYXNzd2QgPQotX19BVFRSKHBhc3N3ZCwgKFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiksIHNlY2x2bF9yZWFkX3Bhc3N3ZCwKLSAgICAgICBzZWNsdmxfd3JpdGVfcGFzc3dkKTsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhc3N3ZF9maWxlX29wcyA9IHsKKwkud3JpdGUgPSBwYXNzd2Rfd3JpdGVfZmlsZSwKK307CiAKIC8qKgogICogRXhwbGljaXRlbHkgZGlzYWxsb3cgcHRyYWNlJ2luZyB0aGUgaW5pdCBwcm9jZXNzLgpAQCAtNTc5LDkgKzQ3OSw4IEBACiAgKi8KIHN0YXRpYyBpbnQgc2VjbHZsX3Vtb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQogewotCWlmIChjdXJyZW50LT5waWQgPT0gMSkgeworCWlmIChjdXJyZW50LT5waWQgPT0gMSkKIAkJcmV0dXJuIDA7Ci0JfQogCWlmIChzZWNsdmwgPT0gMikgewogCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gdW5tb3VudCBpbiBzZWN1cmUgIgogCQkJICAgICAgImxldmVsICVkXG4iLCBzZWNsdmwpOwpAQCAtNjQ3LDIyICs1NDYsMzQgQEAKIH0KIAogLyoqCi0gKiBTeXNmcyByZWdpc3RyYXRpb25zCisgKiBzZWN1cml0eWZzIHJlZ2lzdHJhdGlvbnMKICAqLwotc3RhdGljIGludCBkb1N5c2ZzUmVnaXN0cmF0aW9ucyh2b2lkKQorc3RydWN0IGRlbnRyeSAqZGlyX2lubywgKnNlY2x2bF9pbm8sICpwYXNzd2RfaW5vOworCitzdGF0aWMgaW50IHNlY2x2bGZzX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JaW50IHJjID0gMDsKLQlpZiAoKHJjID0gc3Vic3lzdGVtX3JlZ2lzdGVyKCZzZWNsdmxfc3Vic3lzKSkpIHsKLQkJc2VjbHZsX3ByaW50aygwLCBLRVJOX1dBUk5JTkcsCi0JCQkgICAgICAiRXJyb3IgWyVkXSByZWdpc3RlcmluZyBzZWNsdmwgc3Vic3lzdGVtXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0Jc3lzZnNfY3JlYXRlX2ZpbGUoJnNlY2x2bF9zdWJzeXMua3NldC5rb2JqLCAmc3lzZnNfYXR0cl9zZWNsdmwuYXR0cik7CisJZGlyX2lubyA9IHNlY3VyaXR5ZnNfY3JlYXRlX2Rpcigic2VjbHZsIiwgTlVMTCk7CisJaWYgKCFkaXJfaW5vKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXNlY2x2bF9pbm8gPSBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJzZWNsdmwiLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQlkaXJfaW5vLCAmc2VjbHZsLCAmc2VjbHZsX2ZpbGVfb3BzKTsKKwlpZiAoIXNlY2x2bF9pbm8pCisJCWdvdG8gb3V0X2RlbGRpcjsKIAlpZiAoKnBhc3N3ZCB8fCAqc2hhMV9wYXNzd2QpIHsKLQkJc3lzZnNfY3JlYXRlX2ZpbGUoJnNlY2x2bF9zdWJzeXMua3NldC5rb2JqLAotCQkJCSAgJnN5c2ZzX2F0dHJfcGFzc3dkLmF0dHIpOworCQlwYXNzd2RfaW5vID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgicGFzc3dkIiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJZGlyX2lubywgTlVMTCwgJnBhc3N3ZF9maWxlX29wcyk7CisJCWlmICghcGFzc3dkX2lubykKKwkJCWdvdG8gb3V0X2RlbGY7CiAJfQogCXJldHVybiAwOworCitvdXRfZGVsZGlyOgorCXNlY3VyaXR5ZnNfcmVtb3ZlKGRpcl9pbm8pOworb3V0X2RlbGY6CisJc2VjdXJpdHlmc19yZW1vdmUoc2VjbHZsX2lubyk7CisKKwlyZXR1cm4gLUVGQVVMVDsKIH0KIAogLyoqCkBAIC02NzcsOCArNTg4LDYgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQotCXN5c2ZzX2F0dHJfc2VjbHZsLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKLQlzeXNmc19hdHRyX3Bhc3N3ZC5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJaWYgKGluaXRsdmwgPCAtMSB8fCBpbml0bHZsID4gMikgewogCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiRXJyb3I6IGJhZCBpbml0aWFsIHNlY3VyZWxldmVsICIKIAkJCSAgICAgICJbJWRdLlxuIiwgaW5pdGx2bCk7CkBAIC03MDYsNyArNjE1LDcgQEAKIAkJfQkJLyogaWYgcHJpbWFyeSBtb2R1bGUgcmVnaXN0ZXJlZCAqLwogCQlzZWNvbmRhcnkgPSAxOwogCX0JCQkvKiBpZiB3ZSByZWdpc3RlcmVkIG91cnNlbHZlcyB3aXRoIHRoZSBzZWN1cml0eSBmcmFtZXdvcmsgKi8KLQlpZiAoKHJjID0gZG9TeXNmc1JlZ2lzdHJhdGlvbnMoKSkpIHsKKwlpZiAoKHJjID0gc2VjbHZsZnNfcmVnaXN0ZXIoKSkpIHsKIAkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkVycm9yIHJlZ2lzdGVyaW5nIHdpdGggc3lzZnNcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNzI0LDEyICs2MzMsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IHNlY2x2bF9leGl0KHZvaWQpCiB7Ci0Jc3lzZnNfcmVtb3ZlX2ZpbGUoJnNlY2x2bF9zdWJzeXMua3NldC5rb2JqLCAmc3lzZnNfYXR0cl9zZWNsdmwuYXR0cik7Ci0JaWYgKCpwYXNzd2QgfHwgKnNoYTFfcGFzc3dkKSB7Ci0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzZWNsdmxfc3Vic3lzLmtzZXQua29iaiwKLQkJCQkgICZzeXNmc19hdHRyX3Bhc3N3ZC5hdHRyKTsKLQl9Ci0Jc3Vic3lzdGVtX3VucmVnaXN0ZXIoJnNlY2x2bF9zdWJzeXMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKHNlY2x2bF9pbm8pOworCWlmICgqcGFzc3dkIHx8ICpzaGExX3Bhc3N3ZCkKKwkJc2VjdXJpdHlmc19yZW1vdmUocGFzc3dkX2lubyk7CisJc2VjdXJpdHlmc19yZW1vdmUoZGlyX2lubyk7CiAJaWYgKHNlY29uZGFyeSA9PSAxKSB7CiAJCW1vZF91bnJlZ19zZWN1cml0eShNWV9OQU1FLCAmc2VjbHZsX29wcyk7CiAJfSBlbHNlIGlmICh1bnJlZ2lzdGVyX3NlY3VyaXR5KCZzZWNsdmxfb3BzKSkgewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggY2Y2MDIwZi4uMTJlNGZiNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAlhdmNfbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiYXZjX25vZGUiLCBzaXplb2Yoc3RydWN0IGF2Y19ub2RlKSwKIAkJCQkJICAgICAwLCBTTEFCX1BBTklDLCBOVUxMLCBOVUxMKTsKIAotCWF1ZGl0X2xvZyhjdXJyZW50LT5hdWRpdF9jb250ZXh0LCBBVURJVF9LRVJORUwsICJBVkMgSU5JVElBTElaRURcbiIpOworCWF1ZGl0X2xvZyhjdXJyZW50LT5hdWRpdF9jb250ZXh0LCBHRlBfS0VSTkVMLCBBVURJVF9LRVJORUwsICJBVkMgSU5JVElBTElaRURcbiIpOwogfQogCiBpbnQgYXZjX2dldF9oYXNoX3N0YXRzKGNoYXIgKnBhZ2UpCkBAIC01NTAsNyArNTUwLDcgQEAKIAkJCXJldHVybjsKIAl9CiAKLQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjdXJyZW50LT5hdWRpdF9jb250ZXh0LCBBVURJVF9BVkMpOworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsIEdGUF9BVE9NSUMsIEFVRElUX0FWQyk7CiAJaWYgKCFhYikKIAkJcmV0dXJuOwkJLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCiAJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImF2YzogICVzICIsIGRlbmllZCA/ICJkZW5pZWQiIDogImdyYW50ZWQiKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBmNDBjODIyLi42ZTQ5MzdmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zMzg5LDcgKzMzODksNyBAQAogCWVyciA9IHNlbGludXhfbmxtc2dfbG9va3VwKGlzZWMtPnNjbGFzcywgbmxoLT5ubG1zZ190eXBlLCAmcGVybSk7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID09IC1FSU5WQUwpIHsKLQkJCWF1ZGl0X2xvZyhjdXJyZW50LT5hdWRpdF9jb250ZXh0LCBBVURJVF9TRUxJTlVYX0VSUiwKKwkJCWF1ZGl0X2xvZyhjdXJyZW50LT5hdWRpdF9jb250ZXh0LCBHRlBfS0VSTkVMLCBBVURJVF9TRUxJTlVYX0VSUiwKIAkJCQkgICJTRUxpbnV4OiAgdW5yZWNvZ25pemVkIG5ldGxpbmsgbWVzc2FnZSIKIAkJCQkgICIgdHlwZT0laHUgZm9yIHNjbGFzcz0laHVcbiIsCiAJCQkJICBubGgtPm5sbXNnX3R5cGUsIGlzZWMtPnNjbGFzcyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggOTJiODlkYy4uYWVjZGRlZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCWdvdG8gb3V0OwogCWlmIChjb250ZXh0X3N0cnVjdF90b19zdHJpbmcodGNvbnRleHQsICZ0LCAmdGxlbikgPCAwKQogCQlnb3RvIG91dDsKLQlhdWRpdF9sb2coY3VycmVudC0+YXVkaXRfY29udGV4dCwgQVVESVRfU0VMSU5VWF9FUlIsCisJYXVkaXRfbG9nKGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSLAogCSAgICAgICAgICAic2VjdXJpdHlfdmFsaWRhdGVfdHJhbnNpdGlvbjogIGRlbmllZCBmb3IiCiAJICAgICAgICAgICIgb2xkY29udGV4dD0lcyBuZXdjb250ZXh0PSVzIHRhc2tjb250ZXh0PSVzIHRjbGFzcz0lcyIsCiAJICAgICAgICAgIG8sIG4sIHQsIHBvbGljeWRiLnBfY2xhc3NfdmFsX3RvX25hbWVbdGNsYXNzLTFdKTsKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCQlnb3RvIG91dDsKIAlpZiAoY29udGV4dF9zdHJ1Y3RfdG9fc3RyaW5nKG5ld2NvbnRleHQsICZuLCAmbmxlbikgPCAwKQogCQlnb3RvIG91dDsKLQlhdWRpdF9sb2coY3VycmVudC0+YXVkaXRfY29udGV4dCwgQVVESVRfU0VMSU5VWF9FUlIsCisJYXVkaXRfbG9nKGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSLAogCQkgICJzZWN1cml0eV9jb21wdXRlX3NpZDogIGludmFsaWQgY29udGV4dCAlcyIKIAkJICAiIGZvciBzY29udGV4dD0lcyIKIAkJICAiIHRjb250ZXh0PSVzIgpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL0tjb25maWcgYi9zb3VuZC9hcm0vS2NvbmZpZwppbmRleCAyZTRhNWUwLi4wODY0YTdjIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vS2NvbmZpZworKysgYi9zb3VuZC9hcm0vS2NvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIAl0cmlzdGF0ZSAiU0ExMXh4IFVEQTEzNDFUUyBkcml2ZXIgKGlQYXEgSDM2MDApIgogCWRlcGVuZHMgb24gQVJDSF9TQTExMDAgJiYgU05EICYmIEwzCiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIENvbXBhcSBpUGFxIEgzeDAwIGhhbmRoZWxkIGNvbXB1dGVyCiAJICBhbmQgd2FudCB0byB1c2UgaXRzIFBoaWxpcHMgVURBIDEzNDEgYXVkaW8gY2hpcC4KZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IDk4ODc3MDMuLmIyZDVkYjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWFjaV9zdXNwZW5kKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCB1MzIgc3RhdGUpCitzdGF0aWMgaW50IGFhY2lfc3VzcGVuZChzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXNuZF9jYXJkX3QgKmNhcmQgPSBhbWJhX2dldF9kcnZkYXRhKGRldik7CiAJcmV0dXJuIGNhcmQgPyBhYWNpX2RvX3N1c3BlbmQoY2FyZCkgOiAwOwpAQCAtOTAwLDYgKzkwMCw4IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKKwlzbmRfY2FyZF9zZXRfZGV2KGFhY2ktPmNhcmQsICZkZXYtPmRldik7CisKIAlyZXQgPSBzbmRfY2FyZF9yZWdpc3RlcihhYWNpLT5jYXJkKTsKIAlpZiAocmV0ID09IDApIHsKIAkJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMsIGZpZm8gJWRcbiIsIGFhY2ktPmNhcmQtPmxvbmduYW1lLApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwppbmRleCAxNzRiYzAzLi42ZWU5MTIyIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYworKysgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwpAQCAtMjEsNyArMjEsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQgSEFMIGxheWVyIChwYXRjaGVzIGZyb20gQnJpYW4pCiAgKi8KIAotLyogJElkOiBzYTExeHgtdWRhMTM0MS5jLHYgMS4yMSAyMDA1LzAxLzI4IDE5OjM0OjA0IHRpd2FpIEV4cCAkICovCisvKiAkSWQ6IHNhMTF4eC11ZGExMzQxLmMsdiAxLjIzIDIwMDUvMDkvMDkgMTM6MjI6MzQgdGl3YWkgRXhwICQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgpAQCAtOTE4LDcgKzkxOCw3IEBACiAJaWYgKGNhcmQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzYTExeHhfdWRhMTM0MSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzYTExeHhfdWRhMTM0MSksIEdGUF9LRVJORUwpOworCXNhMTF4eF91ZGExMzQxID0ga3phbGxvYyhzaXplb2YoKnNhMTF4eF91ZGExMzQxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNhMTF4eF91ZGExMzQxID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwkKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+c1swXS5kbWFfbG9jayk7CkBAIC05NDYsNiArOTQ2LDkgQEAKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSDM2MDAgVURBMTM0MVRTIik7CiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkNvbXBhcSBpUEFRIEgzNjAwIHdpdGggUGhpbGlwcyBVREExMzQxVFMiKTsKICAgICAgICAgCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBub2RldjsKKwogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpID09IDApIHsKIAkJcHJpbnRrKCBLRVJOX0lORk8gImlQQVEgYXVkaW8gc3VwcG9ydCBpbml0aWFsaXplZFxuIiApOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvS2NvbmZpZyBiL3NvdW5kL2NvcmUvS2NvbmZpZwppbmRleCBkMWU4MDBiLi40OGNmNDVjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL0tjb25maWcKKysrIGIvc291bmQvY29yZS9LY29uZmlnCkBAIC05OSw2ICs5OSwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXJ0Y3RpbWVyLgogCitjb25maWcgU05EX1NFUV9SVENUSU1FUl9ERUZBVUxUCisJYm9vbCAiVXNlIFJUQyBhcyBkZWZhdWx0IHNlcXVlbmNlciB0aW1lciIKKwlkZXBlbmRzIG9uIFNORF9SVENUSU1FUiAmJiBTTkRfU0VRVUVOQ0VSCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgaGVyZSB0byB1c2UgdGhlIFJUQyB0aW1lciBhcyB0aGUgZGVmYXVsdCBzZXF1ZW5jZXIKKwkgIHRpbWVyLiAgVGhpcyBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCBiZWNhdXNlIGl0IGVuc3VyZXMKKwkgIHByZWNpc2UgTUlESSB0aW1pbmcgZXZlbiB3aGVuIHRoZSBzeXN0ZW0gdGltZXIgcnVucyBhdCBsZXNzCisJICB0aGFuIDEwMDAgSHouCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgWS4KKwogY29uZmlnIFNORF9WRVJCT1NFX1BSSU5USwogCWJvb2wgIlZlcmJvc2UgcHJpbnRrIgogCWRlcGVuZHMgb24gU05ECkBAIC0xMjgsNiArMTQwLDYgQEAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGV4dHJhLXZlcmJvc2UgbG9nIG1lc3NhZ2VzIHByaW50ZWQgd2hlbgogCSAgZGV0ZWN0aW5nIGRldmljZXMuCiAKLWNvbmZpZyBTTkRfR0VORVJJQ19QTQorY29uZmlnIFNORF9HRU5FUklDX0RSSVZFUgogCWJvb2wKIAlkZXBlbmRzIG9uIFNORApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCAyMjdmM2NmLi43MzZlZGYzIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtNjksNyArNjksNyBAQAogCQllcnIgPSAtRUZBVUxUOwogCQlnb3RvIF9fZXJyb3IyOwogCX0KLQljdGwgPSBrY2FsbG9jKDEsIHNpemVvZigqY3RsKSwgR0ZQX0tFUk5FTCk7CisJY3RsID0ga3phbGxvYyhzaXplb2YoKmN0bCksIEdGUF9LRVJORUwpOwogCWlmIChjdGwgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIF9fZXJyb3I7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJCQlnb3RvIF9mb3VuZDsKIAkJCX0KIAkJfQotCQlldiA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpldiksIEdGUF9BVE9NSUMpOworCQlldiA9IGt6YWxsb2Moc2l6ZW9mKCpldiksIEdGUF9BVE9NSUMpOwogCQlpZiAoZXYpIHsKIAkJCWV2LT5pZCA9ICppZDsKIAkJCWV2LT5tYXNrID0gbWFzazsKQEAgLTE5NSw3ICsxOTUsNyBAQAogCQogCXNuZF9ydW50aW1lX2NoZWNrKGNvbnRyb2wgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOwogCXNuZF9ydW50aW1lX2NoZWNrKGNvbnRyb2wtPmNvdW50ID4gMCwgcmV0dXJuIE5VTEwpOwotCWtjdGwgPSBrY2FsbG9jKDEsIHNpemVvZigqa2N0bCkgKyBzaXplb2Yoc25kX2tjb250cm9sX3ZvbGF0aWxlX3QpICogY29udHJvbC0+Y291bnQsIEdGUF9LRVJORUwpOworCWtjdGwgPSBremFsbG9jKHNpemVvZigqa2N0bCkgKyBzaXplb2Yoc25kX2tjb250cm9sX3ZvbGF0aWxlX3QpICogY29udHJvbC0+Y291bnQsIEdGUF9LRVJORUwpOwogCWlmIChrY3RsID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCSprY3RsID0gKmNvbnRyb2w7CkBAIC01MjEsNyArNTIxLDcgQEAKIHsKIAlzbmRfY3RsX2NhcmRfaW5mb190ICppbmZvOwogCi0JaW5mbyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG93bl9yZWFkKCZzbmRfaW9jdGxfcndzZW0pOwpAQCAtOTI5LDcgKzkyOSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlwcml2YXRlX3NpemUgKj0gaW5mby0+Y291bnQ7Ci0JdWUgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdXNlcl9lbGVtZW50KSArIHByaXZhdGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJdWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNlcl9lbGVtZW50KSArIHByaXZhdGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXVlLT5pbmZvID0gKmluZm87CkBAIC0xMTg1LDcgKzExODUsNyBAQAogewogCXNuZF9rY3RsX2lvY3RsX3QgKnBuOwogCi0JcG4gPSBrY2FsbG9jKDEsIHNpemVvZihzbmRfa2N0bF9pb2N0bF90KSwgR0ZQX0tFUk5FTCk7CisJcG4gPSBremFsbG9jKHNpemVvZihzbmRfa2N0bF9pb2N0bF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBuID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXBuLT5maW9jdGwgPSBmY247CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2xfY29tcGF0LmMgYi9zb3VuZC9jb3JlL2NvbnRyb2xfY29tcGF0LmMKaW5kZXggN2ZkYWJlYS4uMjA3YzdkZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9jb250cm9sX2NvbXBhdC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbF9jb21wYXQuYwpAQCAtOTIsNyArOTIsNyBAQAogCXN0cnVjdCBzbmRydl9jdGxfZWxlbV9pbmZvICpkYXRhOwogCWludCBlcnI7CiAKLQlkYXRhID0ga2NhbGxvYygxLCBzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjcxLDcgKzI3MSw3IEBACiAJc3RydWN0IHNuZHJ2X2N0bF9lbGVtX3ZhbHVlICpkYXRhOwogCWludCBlcnIsIHR5cGUsIGNvdW50OwogCi0JZGF0YSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI5MSw3ICsyOTEsNyBAQAogCXN0cnVjdCBzbmRydl9jdGxfZWxlbV92YWx1ZSAqZGF0YTsKIAlpbnQgZXJyLCB0eXBlLCBjb3VudDsKIAotCWRhdGEgPSBrY2FsbG9jKDEsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zMTMsNyArMzEzLDcgQEAKIAlzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1faW5mbyAqZGF0YTsKIAlpbnQgZXJyOwogCi0JZGF0YSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvZGV2aWNlLmMgYi9zb3VuZC9jb3JlL2RldmljZS5jCmluZGV4IGNhMDBhZDcuLjFmNTA5ZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvZGV2aWNlLmMKKysrIGIvc291bmQvY29yZS9kZXZpY2UuYwpAQCAtNDksNyArNDksNyBAQAogCXNuZF9hc3NlcnQoY2FyZCAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlzbmRfYXNzZXJ0KGRldmljZV9kYXRhICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCXNuZF9hc3NlcnQob3BzICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwotCWRldiA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkZXYtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9od2RlcC5jIGIvc291bmQvY29yZS9od2RlcC5jCmluZGV4IDk5N2RkNDEuLjkzODNmMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaHdkZXAuYworKysgYi9zb3VuZC9jb3JlL2h3ZGVwLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCXNuZF9hc3NlcnQocmh3ZGVwICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKIAkqcmh3ZGVwID0gTlVMTDsKIAlzbmRfYXNzZXJ0KGNhcmQgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7Ci0JaHdkZXAgPSBrY2FsbG9jKDEsIHNpemVvZigqaHdkZXApLCBHRlBfS0VSTkVMKTsKKwlod2RlcCA9IGt6YWxsb2Moc2l6ZW9mKCpod2RlcCksIEdGUF9LRVJORUwpOwogCWlmIChod2RlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlod2RlcC0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luZm8uYyBiL3NvdW5kL2NvcmUvaW5mby5jCmluZGV4IDdmOGJkZjcuLjM3MDI0ZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5mby5jCisrKyBiL3NvdW5kL2NvcmUvaW5mby5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJICAgIAlnb3RvIF9fZXJyb3I7CiAJCX0KIAl9Ci0JZGF0YSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIF9fZXJyb3I7CkBAIC0zMDQsNyArMzA0LDcgQEAKIAlzd2l0Y2ggKGVudHJ5LT5jb250ZW50KSB7CiAJY2FzZSBTTkRSVl9JTkZPX0NPTlRFTlRfVEVYVDoKIAkJaWYgKG1vZGUgPT0gT19SRE9OTFkgfHwgbW9kZSA9PSBPX1JEV1IpIHsKLQkJCWJ1ZmZlciA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpidWZmZXIpLCBHRlBfS0VSTkVMKTsKKwkJCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKCpidWZmZXIpLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChidWZmZXIgPT0gTlVMTCkgewogCQkJCWtmcmVlKGRhdGEpOwogCQkJCWVyciA9IC1FTk9NRU07CkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJCWRhdGEtPnJidWZmZXIgPSBidWZmZXI7CiAJCX0KIAkJaWYgKG1vZGUgPT0gT19XUk9OTFkgfHwgbW9kZSA9PSBPX1JEV1IpIHsKLQkJCWJ1ZmZlciA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpidWZmZXIpLCBHRlBfS0VSTkVMKTsKKwkJCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKCpidWZmZXIpLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChidWZmZXIgPT0gTlVMTCkgewogCQkJCWlmIChtb2RlID09IE9fUkRXUikgewogCQkJCQl2ZnJlZShkYXRhLT5yYnVmZmVyLT5idWZmZXIpOwpAQCAtNzUyLDcgKzc1Miw3IEBACiBzdGF0aWMgc25kX2luZm9fZW50cnlfdCAqc25kX2luZm9fY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc25kX2luZm9fZW50cnlfdCAqZW50cnk7Ci0JZW50cnkgPSBrY2FsbG9jKDEsIHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOwogCWlmIChlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAllbnRyeS0+bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IGQ3MmY1OGYuLmE1NzAyMDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC03Miw3ICs3Miw3IEBACiAKIAlpZiAoZXh0cmFfc2l6ZSA8IDApCiAJCWV4dHJhX3NpemUgPSAwOwotCWNhcmQgPSBrY2FsbG9jKDEsIHNpemVvZigqY2FyZCkgKyBleHRyYV9zaXplLCBHRlBfS0VSTkVMKTsKKwljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpICsgZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNhcmQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHhpZCkgewpAQCAtMjI2LDggKzIyNiwxMCBAQAogCXJldHVybiAwOwkKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19TTkRfR0VORVJJQ19QTSkKLXN0YXRpYyB2b2lkIHNuZF9nZW5lcmljX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBzbmRfZ2VuZXJpY19kZXZpY2UgKmRldik7CisjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgorc3RhdGljIHZvaWQgc25kX2dlbmVyaWNfZGV2aWNlX3VucmVnaXN0ZXIoc25kX2NhcmRfdCAqY2FyZCk7CisjZWxzZQorI2RlZmluZSBzbmRfZ2VuZXJpY19kZXZpY2VfdW5yZWdpc3Rlcih4KSAvKk5PUCovCiAjZW5kaWYKIAogLyoqCkBAIC0yNTMsMTQgKzI1NSw3IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAl3YWtlX3VwKCZjYXJkLT5wb3dlcl9zbGVlcCk7Ci0jaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX1BNCi0JaWYgKGNhcmQtPnBtX2RldikgewotCQlzbmRfZ2VuZXJpY19kZXZpY2VfdW5yZWdpc3RlcihjYXJkLT5wbV9kZXYpOwotCQljYXJkLT5wbV9kZXYgPSBOVUxMOwotCX0KICNlbmRpZgotI2VuZGlmCi0KIAkvKiB3YWl0LCB1bnRpbCBhbGwgZGV2aWNlcyBhcmUgcmVhZHkgZm9yIHRoZSBmcmVlIG9wZXJhdGlvbiAqLwogCXdhaXRfZXZlbnQoY2FyZC0+c2h1dGRvd25fc2xlZXAsIGNhcmQtPmZpbGVzID09IE5VTEwpOwogCkBAIC0yODgsNiArMjgzLDcgQEAKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInVuYWJsZSB0byBmcmVlIGNhcmQgaW5mb1xuIik7CiAJCS8qIE5vdCBmYXRhbCBlcnJvciAqLwogCX0KKwlzbmRfZ2VuZXJpY19kZXZpY2VfdW5yZWdpc3RlcihjYXJkKTsKIAl3aGlsZSAoY2FyZC0+c19mX29wcykgewogCQlzX2Zfb3BzID0gY2FyZC0+c19mX29wczsKIAkJY2FyZC0+c19mX29wcyA9IHNfZl9vcHMtPm5leHQ7CkBAIC02NjUsNiArNjYxLDk2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSCisvKgorICogZ2VuZXJpYyBkZXZpY2Ugd2l0aG91dCBhIHByb3BlciBidXMgdXNpbmcgcGxhdGZvcm1fZGV2aWNlCisgKiAoZS5nLiBJU0EpCisgKi8KK3N0cnVjdCBzbmRfZ2VuZXJpY19kZXZpY2UgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKKwlzbmRfY2FyZF90ICpjYXJkOworfTsKKworI2RlZmluZSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpCWNvbnRhaW5lcl9vZih0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSwgc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSwgcGRldiktPmNhcmQKKworI2RlZmluZSBTTkRfR0VORVJJQ19OQU1FCSJzbmRfZ2VuZXJpYyIKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzbmRfZ2VuZXJpY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgbGV2ZWwpOworc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpOworI2VuZGlmCisKKy8qIGluaXRpYWxpemVkIGluIHNvdW5kLmMgKi8KK3N0cnVjdCBkZXZpY2VfZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlciA9IHsKKwkubmFtZQkJPSBTTkRfR0VORVJJQ19OQU1FLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gc25kX2dlbmVyaWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9nZW5lcmljX3Jlc3VtZSwKKyNlbmRpZgorfTsKKwordm9pZCBzbmRfZ2VuZXJpY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfZGV2aWNlX3JlZ2lzdGVyKHNuZF9jYXJkX3QgKmNhcmQpCit7CisJc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSAqZGV2OworCWludCBlcnI7CisKKwlpZiAoY2FyZC0+Z2VuZXJpY19kZXYpCisJCXJldHVybiAwOyAvKiBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoISBkZXYpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWxsb2NhdGUgZ2VuZXJpY19kZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYtPnBkZXYubmFtZSA9IFNORF9HRU5FUklDX05BTUU7CisJZGV2LT5wZGV2LmlkID0gY2FyZC0+bnVtYmVyOworCWRldi0+cGRldi5kZXYucmVsZWFzZSA9IHNuZF9nZW5lcmljX2RldmljZV9yZWxlYXNlOworCWRldi0+Y2FyZCA9IGNhcmQ7CisJaWYgKChlcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+cGRldikpIDwgMCkgeworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gZXJyOworCX0KKwljYXJkLT5nZW5lcmljX2RldiA9IGRldjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX2dlbmVyaWNfZGV2aWNlX3VucmVnaXN0ZXIoc25kX2NhcmRfdCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX2dlbmVyaWNfZGV2aWNlICpkZXYgPSBjYXJkLT5nZW5lcmljX2RldjsKKwlpZiAoZGV2KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnBkZXYpOworCQlrZnJlZShkZXYpOworCQljYXJkLT5nZW5lcmljX2RldiA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIHNuZF9jYXJkX3NldF9nZW5lcmljX2RldiAtIGFzc2lnbiB0aGUgZ2VuZXJpYyBkZXZpY2UgdG8gdGhlIGNhcmQKKyAqIEBjYXJkOiBzb3VuZGNhcmQgc3RydWN0dXJlCisgKgorICogQXNzaWducyBhIGdlbmVyaWMgZGV2aWNlIHRvIHRoZSBjYXJkLiAgVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBhcyB0aGUKKyAqIGxhc3QgcmVzb3J0LCBmb3IgZGV2aWNlcyB3aXRob3V0IGFueSBwcm9wZXIgYnVzLiAgVGh1cyB0aGlzIHdvbid0IG92ZXJyaWRlCisgKiB0aGUgZGV2aWNlIGFscmVhZHkgYXNzaWduZWQgdG8gdGhlIGNhcmQuCisgKiAKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoc25kX2NhcmRfdCAqY2FyZCkKK3sKKwlpbnQgZXJyOworCWlmICgoZXJyID0gc25kX2dlbmVyaWNfZGV2aWNlX3JlZ2lzdGVyKGNhcmQpKSA8IDApCisJCXJldHVybiBlcnI7CisJaWYgKCEgY2FyZC0+ZGV2KQorCQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZjYXJkLT5nZW5lcmljX2Rldi0+cGRldi5kZXYpOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIgKi8KKwogI2lmZGVmIENPTkZJR19QTQogLyoqCiAgKiAgc25kX3Bvd2VyX3dhaXQgLSB3YWl0IHVudGlsIHRoZSBwb3dlci1zdGF0ZSBpcyBjaGFuZ2VkLgpAQCAtNzMwLDc1ICs4MTYsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX1BNCi0vKgotICogdXNlIHBsYXRmb3JtX2RldmljZSBmb3IgZ2VuZXJpYyBwb3dlci1tYW5hZ2VtZW50IHdpdGhvdXQgYSBwcm9wZXIgYnVzCi0gKiAoZS5nLiBJU0EpCi0gKi8KLXN0cnVjdCBzbmRfZ2VuZXJpY19kZXZpY2UgewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKLQlzbmRfY2FyZF90ICpjYXJkOwotfTsKLQotI2RlZmluZSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpCWNvbnRhaW5lcl9vZih0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSwgc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSwgcGRldiktPmNhcmQKLQotI2RlZmluZSBTTkRfR0VORVJJQ19OQU1FCSJzbmRfZ2VuZXJpY19wbSIKLQotc3RhdGljIGludCBzbmRfZ2VuZXJpY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgbGV2ZWwpOwotc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc25kX2dlbmVyaWNfZHJpdmVyID0gewotCS5uYW1lCQk9IFNORF9HRU5FUklDX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQJPSBzbmRfZ2VuZXJpY19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX2dlbmVyaWNfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBnZW5lcmljX2RyaXZlcl9yZWdpc3RlcmVkOwotCi1zdGF0aWMgdm9pZCBnZW5lcmljX2RyaXZlcl91bnJlZ2lzdGVyKHZvaWQpCi17Ci0JaWYgKGdlbmVyaWNfZHJpdmVyX3JlZ2lzdGVyZWQpIHsKLQkJZ2VuZXJpY19kcml2ZXJfcmVnaXN0ZXJlZC0tOwotCQlpZiAoISBnZW5lcmljX2RyaXZlcl9yZWdpc3RlcmVkKQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9nZW5lcmljX2RyaXZlcik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSAqc25kX2dlbmVyaWNfZGV2aWNlX3JlZ2lzdGVyKHNuZF9jYXJkX3QgKmNhcmQpCi17Ci0Jc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSAqZGV2OwotCi0JaWYgKCEgZ2VuZXJpY19kcml2ZXJfcmVnaXN0ZXJlZCkgewotCQlpZiAoZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZ2VuZXJpY19kcml2ZXIpIDwgMCkKLQkJCXJldHVybiBOVUxMOwotCX0KLQlnZW5lcmljX2RyaXZlcl9yZWdpc3RlcmVkKys7Ci0KLQlkZXYgPSBrY2FsbG9jKDEsIHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgZGV2KSB7Ci0JCWdlbmVyaWNfZHJpdmVyX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZGV2LT5wZGV2Lm5hbWUgPSBTTkRfR0VORVJJQ19OQU1FOwotCWRldi0+cGRldi5pZCA9IGNhcmQtPm51bWJlcjsKLQlkZXYtPmNhcmQgPSBjYXJkOwotCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+cGRldikgPCAwKSB7Ci0JCWtmcmVlKGRldik7Ci0JCWdlbmVyaWNfZHJpdmVyX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBkZXY7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF9nZW5lcmljX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBzbmRfZ2VuZXJpY19kZXZpY2UgKmRldikKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT5wZGV2KTsKLQlrZnJlZShkZXYpOwotCWdlbmVyaWNfZHJpdmVyX3VucmVnaXN0ZXIoKTsKLX0KLQorI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKIC8qIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcyBmb3Igc25kX2dlbmVyaWMgcGxhdGZvcm0gZGV2aWNlICovCiBzdGF0aWMgaW50IHNuZF9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBsZXZlbCkKIHsKQEAgLTg0NiwxMyArODY0LDEyIEBACiAJCQkJIGludCAoKnJlc3VtZSkoc25kX2NhcmRfdCAqKSwKIAkJCQkgdm9pZCAqcHJpdmF0ZV9kYXRhKQogewotCWNhcmQtPnBtX2RldiA9IHNuZF9nZW5lcmljX2RldmljZV9yZWdpc3RlcihjYXJkKTsKLQlpZiAoISBjYXJkLT5wbV9kZXYpCi0JCXJldHVybiAtRU5PTUVNOwotCXNuZF9jYXJkX3NldF9wbV9jYWxsYmFjayhjYXJkLCBzdXNwZW5kLCByZXN1bWUsIHByaXZhdGVfZGF0YSk7Ci0JcmV0dXJuIDA7CisJaW50IGVycjsKKwlpZiAoKGVyciA9IHNuZF9nZW5lcmljX2RldmljZV9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiBzbmRfY2FyZF9zZXRfcG1fY2FsbGJhY2soY2FyZCwgc3VzcGVuZCwgcmVzdW1lLCBwcml2YXRlX2RhdGEpOwogfQotI2VuZGlmIC8qIENPTkZJR19TTkRfR0VORVJJQ19QTSAqLworI2VuZGlmIC8qIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIgKi8KIAogI2lmZGVmIENPTkZJR19QQ0kKIGludCBzbmRfY2FyZF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21lbWFsbG9jLmMgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmMKaW5kZXggMzlhNTRhNC4uOTExMjRkZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9tZW1hbGxvYy5jCisrKyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuYwpAQCAtNTkwLDcgKzU5MCw3IEBACiAKIAkJYWxsb2NlZCA9IDA7CiAJCXBjaSA9IE5VTEw7Ci0JCXdoaWxlICgocGNpID0gcGNpX2ZpbmRfZGV2aWNlKHZlbmRvciwgZGV2aWNlLCBwY2kpKSAhPSBOVUxMKSB7CisJCXdoaWxlICgocGNpID0gcGNpX2dldF9kZXZpY2UodmVuZG9yLCBkZXZpY2UsIHBjaSkpICE9IE5VTEwpIHsKIAkJCWlmIChtYXNrID4gMCAmJiBtYXNrIDwgMHhmZmZmZmZmZikgewogCQkJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgbWFzaykgPCAwIHx8CiAJCQkJICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIG1hc2spIDwgMCkgewpAQCAtNjA0LDYgKzYwNCw3IEBACiAJCQkJaWYgKHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBzbmRfZG1hX3BjaV9kYXRhKHBjaSksCiAJCQkJCQkJc2l6ZSwgJmRtYWIpIDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgInNuZC1wYWdlLWFsbG9jOiBjYW5ub3QgYWxsb2NhdGUgYnVmZmVyIHBhZ2VzIChzaXplID0gJWQpXG4iLCBzaXplKTsKKwkJCQkJcGNpX2Rldl9wdXQocGNpKTsKIAkJCQkJcmV0dXJuIChpbnQpY291bnQ7CiAJCQkJfQogCQkJCXNuZF9kbWFfcmVzZXJ2ZV9idWYoJmRtYWIsIHNuZF9kbWFfcGNpX2J1Zl9pZChwY2kpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWVtb3J5LmMgYi9zb3VuZC9jb3JlL21lbW9yeS5jCmluZGV4IDI5MWI0NzYuLjhmYTg4OGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWVtb3J5LmMKKysrIGIvc291bmQvY29yZS9tZW1vcnkuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiBpbnQgY29weV90b191c2VyX2Zyb21pbyh2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgc2l6ZV90IGNvdW50KQogewogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDMzIpCi0JcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsIChjb25zdCB2b2lkKilzcmMsIGNvdW50KSA/IC1FRkFVTFQgOiAwOworCXJldHVybiBjb3B5X3RvX3VzZXIoZHN0LCAoY29uc3Qgdm9pZCBfX2ZvcmNlKilzcmMsIGNvdW50KSA/IC1FRkFVTFQgOiAwOwogI2Vsc2UKIAljaGFyIGJ1ZlsyNTZdOwogCXdoaWxlIChjb3VudCkgewpAQCAtMjgwLDcgKzI4MCw3IEBACiBpbnQgY29weV9mcm9tX3VzZXJfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IGNvdW50KQogewogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDMzIpCi0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKCh2b2lkKilkc3QsIHNyYywgY291bnQpID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgY291bnQpID8gLUVGQVVMVCA6IDA7CiAjZWxzZQogCWNoYXIgYnVmWzI1Nl07CiAJd2hpbGUgKGNvdW50KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jCmluZGV4IDk4ZmMwNzYuLjY5ZTEwNTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jCkBAIC01Myw3ICs1Myw3IEBACiAJZXJyID0gc25kX2NhcmRfZmlsZV9hZGQoY2FyZCwgZmlsZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZm1peGVyID0ga2NhbGxvYygxLCBzaXplb2YoKmZtaXhlciksIEdGUF9LRVJORUwpOworCWZtaXhlciA9IGt6YWxsb2Moc2l6ZW9mKCpmbWl4ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZm1peGVyID09IE5VTEwpIHsKIAkJc25kX2NhcmRfZmlsZV9yZW1vdmUoY2FyZCwgZmlsZSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTE3LDggKzUxNyw4IEBACiAJCXVwX3JlYWQoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAkJcmV0dXJuOwogCX0KLQl1aW5mbyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp1aW5mbyksIEdGUF9LRVJORUwpOwotCXVjdGwgPSBrY2FsbG9jKDEsIHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOworCXVpbmZvID0ga3phbGxvYyhzaXplb2YoKnVpbmZvKSwgR0ZQX0tFUk5FTCk7CisJdWN0bCA9IGt6YWxsb2Moc2l6ZW9mKCp1Y3RsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVpbmZvID09IE5VTEwgfHwgdWN0bCA9PSBOVUxMKQogCQlnb3RvIF9fdW5hbGxvYzsKIAlzbmRfcnVudGltZV9jaGVjaygha2N0bC0+aW5mbyhrY3RsLCB1aW5mbyksIGdvdG8gX191bmFsbG9jKTsKQEAgLTU1MSw4ICs1NTEsOCBAQAogCQl1cF9yZWFkKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CiAJCXJldHVybjsKIAl9Ci0JdWluZm8gPSBrY2FsbG9jKDEsIHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKLQl1Y3RsID0ga2NhbGxvYygxLCBzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKKwl1aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp1aW5mbyksIEdGUF9LRVJORUwpOworCXVjdGwgPSBremFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOwogCWlmICh1aW5mbyA9PSBOVUxMIHx8IHVjdGwgPT0gTlVMTCkKIAkJZ290byBfX3VuYWxsb2M7CiAJc25kX3J1bnRpbWVfY2hlY2soIWtjdGwtPmluZm8oa2N0bCwgdWluZm8pLCBnb3RvIF9fdW5hbGxvYyk7CkBAIC02MTIsOCArNjEyLDggQEAKIAlkb3duX3JlYWQoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAlpZiAoKGtjdGwgPSBzbmRfY3RsX2ZpbmRfbnVtaWQoY2FyZCwgbnVtaWQpKSA9PSBOVUxMKQogCQlyZXR1cm47Ci0JdWluZm8gPSBrY2FsbG9jKDEsIHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKLQl1Y3RsID0ga2NhbGxvYygxLCBzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKKwl1aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp1aW5mbyksIEdGUF9LRVJORUwpOworCXVjdGwgPSBremFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOwogCWlmICh1aW5mbyA9PSBOVUxMIHx8IHVjdGwgPT0gTlVMTCkKIAkJZ290byBfX3VuYWxsb2M7CiAJc25kX3J1bnRpbWVfY2hlY2soIWtjdGwtPmluZm8oa2N0bCwgdWluZm8pLCBnb3RvIF9fdW5hbGxvYyk7CkBAIC02NDksOCArNjQ5LDggQEAKIAkJdXBfcmVhZCgmZm1peGVyLT5jYXJkLT5jb250cm9sc19yd3NlbSk7CiAJCXJldHVybjsKIAl9Ci0JdWluZm8gPSBrY2FsbG9jKDEsIHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKLQl1Y3RsID0ga2NhbGxvYygxLCBzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKKwl1aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp1aW5mbyksIEdGUF9LRVJORUwpOworCXVjdGwgPSBremFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOwogCWlmICh1aW5mbyA9PSBOVUxMIHx8IHVjdGwgPT0gTlVMTCkKIAkJZ290byBfX3VuYWxsb2M7CiAJc25kX3J1bnRpbWVfY2hlY2soIWtjdGwtPmluZm8oa2N0bCwgdWluZm8pLCBnb3RvIF9fdW5hbGxvYyk7CkBAIC03NjgsOCArNzY4LDggQEAKIAlzbmRfY3RsX2VsZW1fdmFsdWVfdCAqdWN0bDsKIAlpbnQgZXJyLCBpZHg7CiAJCi0JdWluZm8gPSBrY2FsbG9jKDEsIHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKLQl1Y3RsID0ga2NhbGxvYygxLCBzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKKwl1aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp1aW5mbyksIEdGUF9LRVJORUwpOworCXVjdGwgPSBremFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOwogCWlmICh1aW5mbyA9PSBOVUxMIHx8IHVjdGwgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIF9fdW5sb2NrOwpAQCAtODEzLDggKzgxMyw4IEBACiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCi0JdWluZm8gPSBrY2FsbG9jKDEsIHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKLQl1Y3RsID0ga2NhbGxvYygxLCBzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKKwl1aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp1aW5mbyksIEdGUF9LRVJORUwpOworCXVjdGwgPSBremFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOwogCWlmICh1aW5mbyA9PSBOVUxMIHx8IHVjdGwgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIF9fdW5sb2NrOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IGExM2JkN2IuLjg0MmMyOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTg1MCw3ICs4NTAsOSBAQAogCQkJCQlyZXR1cm4geGZlciA+IDAgPyB4ZmVyIDogLUVBR0FJTjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXRtcCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sIChjb25zdCBjaGFyICopYnVmLCBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzLCAwKTsKKwkJCXRtcCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sCisJCQkJCQkgKGNvbnN0IGNoYXIgX19mb3JjZSAqKWJ1ZiwKKwkJCQkJCSBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzLCAwKTsKIAkJCWlmICh0bXAgPD0gMCkKIAkJCQlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IHRtcDsKIAkJCXJ1bnRpbWUtPm9zcy5ieXRlcyArPSB0bXA7CkBAIC05MjYsNyArOTI4LDggQEAKIAkJCXhmZXIgKz0gdG1wOwogCQkJcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkIC09IHRtcDsKIAkJfSBlbHNlIHsKLQkJCXRtcCA9IHNuZF9wY21fb3NzX3JlYWQyKHN1YnN0cmVhbSwgKGNoYXIgKilidWYsIHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMsIDApOworCQkJdG1wID0gc25kX3BjbV9vc3NfcmVhZDIoc3Vic3RyZWFtLCAoY2hhciBfX2ZvcmNlICopYnVmLAorCQkJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcywgMCk7CiAJCQlpZiAodG1wIDw9IDApCiAJCQkJcmV0dXJuIHhmZXIgPiAwID8gKHNuZF9wY21fc2ZyYW1lc190KXhmZXIgOiB0bXA7CiAJCQlydW50aW1lLT5vc3MuYnl0ZXMgKz0gdG1wOwpAQCAtMTU0MCw3ICsxNTQzLDExIEBACiAJfSBlbHNlIHsKIAkJZGVsYXkgPSBzbmRfcGNtX29zc19ieXRlcyhzdWJzdHJlYW0sIGRlbGF5KTsKIAkJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCQlpbmZvLmJsb2NrcyA9IChydW50aW1lLT5vc3MuYnVmZmVyX2J5dGVzIC0gZGVsYXkgLSBmaXh1cCkgLyBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzOworCQkJc25kX3BjbV9vc3Nfc2V0dXBfdCAqc2V0dXAgPSBzdWJzdHJlYW0tPm9zcy5zZXR1cDsKKwkJCWlmIChzZXR1cCAmJiBzZXR1cC0+YnVnZ3lwdHIpCisJCQkJaW5mby5ibG9ja3MgPSAocnVudGltZS0+b3NzLmJ1ZmZlcl9ieXRlcyAtIGRlbGF5IC0gZml4dXApIC8gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlczsKKwkJCWVsc2UKKwkJCQlpbmZvLmJsb2NrcyA9IChkZWxheSArIGZpeHVwKSAvIHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXM7CiAJCQlpbmZvLmJ5dGVzID0gKHJ1bnRpbWUtPm9zcy5ieXRlcyAtIGRlbGF5KSAmIElOVF9NQVg7CiAJCX0gZWxzZSB7CiAJCQlkZWxheSArPSBmaXh1cDsKQEAgLTE3MzMsNyArMTc0MCw3IEBACiAJc25kX2Fzc2VydChycGNtX29zc19maWxlICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKIAkqcnBjbV9vc3NfZmlsZSA9IE5VTEw7CiAKLQlwY21fb3NzX2ZpbGUgPSBrY2FsbG9jKDEsIHNpemVvZigqcGNtX29zc19maWxlKSwgR0ZQX0tFUk5FTCk7CisJcGNtX29zc19maWxlID0ga3phbGxvYyhzaXplb2YoKnBjbV9vc3NfZmlsZSksIEdGUF9LRVJORUwpOwogCWlmIChwY21fb3NzX2ZpbGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIzNDcsNiArMjM1NCw4IEBACiAJCQkJdGVtcGxhdGUucGFydGlhbGZyYWcgPSAxOwogCQkJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgIm5vLXNpbGVuY2UiKSkgewogCQkJCXRlbXBsYXRlLm5vc2lsZW5jZSA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiYnVnZ3ktcHRyIikpIHsKKwkJCQl0ZW1wbGF0ZS5idWdneXB0ciA9IDE7CiAJCQl9CiAJCX0gd2hpbGUgKCpzdHIpOwogCQlpZiAoc2V0dXAgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5jIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5jCmluZGV4IDY0MzA0MTAuLmZjMjMzNzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQogCXNuZF9hc3NlcnQocGx1ZyAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlzbmRfYXNzZXJ0KHNyY19mb3JtYXQgIT0gTlVMTCAmJiBkc3RfZm9ybWF0ICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwotCXBsdWdpbiA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpwbHVnaW4pICsgZXh0cmEsIEdGUF9LRVJORUwpOworCXBsdWdpbiA9IGt6YWxsb2Moc2l6ZW9mKCpwbHVnaW4pICsgZXh0cmEsIEdGUF9LRVJORUwpOwogCWlmIChwbHVnaW4gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcGx1Z2luLT5uYW1lID0gbmFtZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDlmNGM5MjAuLjFiZTQ3MGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtNTk3LDcgKzU5Nyw3IEBACiAJfQogCXByZXYgPSBOVUxMOwogCWZvciAoaWR4ID0gMCwgcHJldiA9IE5VTEw7IGlkeCA8IHN1YnN0cmVhbV9jb3VudDsgaWR4KyspIHsKLQkJc3Vic3RyZWFtID0ga2NhbGxvYygxLCBzaXplb2YoKnN1YnN0cmVhbSksIEdGUF9LRVJORUwpOworCQlzdWJzdHJlYW0gPSBremFsbG9jKHNpemVvZigqc3Vic3RyZWFtKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChzdWJzdHJlYW0gPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzdWJzdHJlYW0tPnBjbSA9IHBjbTsKQEAgLTY1Nyw3ICs2NTcsNyBAQAogCXNuZF9hc3NlcnQocnBjbSAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CiAJKnJwY20gPSBOVUxMOwogCXNuZF9hc3NlcnQoY2FyZCAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqcGNtKSwgR0ZQX0tFUk5FTCk7CisJcGNtID0ga3phbGxvYyhzaXplb2YoKnBjbSksIEdGUF9LRVJORUwpOwogCWlmIChwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcGNtLT5jYXJkID0gY2FyZDsKQEAgLTc5NSw3ICs3OTUsNyBAQAogCWlmIChzdWJzdHJlYW0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlydW50aW1lID0ga2NhbGxvYygxLCBzaXplb2YoKnJ1bnRpbWUpLCBHRlBfS0VSTkVMKTsKKwlydW50aW1lID0ga3phbGxvYyhzaXplb2YoKnJ1bnRpbWUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocnVudGltZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCAwMDgyOTE0Li4wNTAzOTgwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtNTI0LDYgKzUyNCw5IEBACiAKIC8qKgogICogc25kX2ludGVydmFsX2RpdiAtIHJlZmluZSB0aGUgaW50ZXJ2YWwgdmFsdWUgd2l0aCBkaXZpc2lvbgorICogQGE6IGRpdmlkZW5kCisgKiBAYjogZGl2aXNvcgorICogQGM6IHF1b3RpZW50CiAgKgogICogYyA9IGEgLyBiCiAgKgpAQCAtNTU1LDcgKzU1OCwxMSBAQAogCiAvKioKICAqIHNuZF9pbnRlcnZhbF9tdWxkaXZrIC0gcmVmaW5lIHRoZSBpbnRlcnZhbCB2YWx1ZQotICoKKyAqIEBhOiBkaXZpZGVuZCAxCisgKiBAYjogZGl2aWRlbmQgMgorICogQGs6IGRpdmlzb3IgKGFzIGludGVnZXIpCisgKiBAYzogcmVzdWx0CisgICoKICAqIGMgPSBhICogYiAvIGsKICAqCiAgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLCB6ZXJvIGlmIG5vdCBjaGFuZ2VkLgpAQCAtNTgyLDYgKzU4OSwxMCBAQAogCiAvKioKICAqIHNuZF9pbnRlcnZhbF9tdWxrZGl2IC0gcmVmaW5lIHRoZSBpbnRlcnZhbCB2YWx1ZQorICogQGE6IGRpdmlkZW5kIDEKKyAqIEBrOiBkaXZpZGVuZCAyIChhcyBpbnRlZ2VyKQorICogQGI6IGRpdmlzb3IKKyAqIEBjOiByZXN1bHQKICAqCiAgKiBjID0gYSAqIGsgLyBiCiAgKgpAQCAtNjE4LDYgKzYyOSwxMSBAQAogCiAvKioKICAqIHNuZF9pbnRlcnZhbF9yYXRudW0gLSByZWZpbmUgdGhlIGludGVydmFsIHZhbHVlCisgKiBAaTogaW50ZXJ2YWwgdG8gcmVmaW5lCisgKiBAcmF0c19jb3VudDogbnVtYmVyIG9mIHJhdG51bV90IAorICogQHJhdHM6IHJhdG51bV90IGFycmF5CisgKiBAbnVtcDogcG9pbnRlciB0byBzdG9yZSB0aGUgcmVzdWx0YW50IG51bWVyYXRvcgorICogQGRlbnA6IHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdGFudCBkZW5vbWluYXRvcgogICoKICAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIHZhbHVlIGlzIGNoYW5nZWQsIHplcm8gaWYgbm90IGNoYW5nZWQuCiAgKi8KQEAgLTcxNSw2ICs3MzEsMTEgQEAKIAogLyoqCiAgKiBzbmRfaW50ZXJ2YWxfcmF0ZGVuIC0gcmVmaW5lIHRoZSBpbnRlcnZhbCB2YWx1ZQorICogQGk6IGludGVydmFsIHRvIHJlZmluZQorICogQHJhdHNfY291bnQ6IG51bWJlciBvZiByYXRkZW5fdAorICogQHJhdHM6IHJhdGRlbl90IGFycmF5CisgKiBAbnVtcDogcG9pbnRlciB0byBzdG9yZSB0aGUgcmVzdWx0YW50IG51bWVyYXRvcgorICogQGRlbnA6IHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdGFudCBkZW5vbWluYXRvcgogICoKICAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIHZhbHVlIGlzIGNoYW5nZWQsIHplcm8gaWYgbm90IGNoYW5nZWQuCiAgKi8KQEAgLTkzNiw2ICs5NTcsMTEgQEAKIAogLyoqCiAgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzaworICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCisgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIG1hc2sKKyAqIEBtYXNrOiB0aGUgYml0bWFwIG1hc2sKKyAqCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSBtYXNrIHBhcmFtZXRlci4KICAqLwogaW50IHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAogCQkJICAgICAgIHVfaW50MzJfdCBtYXNrKQpAQCAtOTUxLDYgKzk3NywxMSBAQAogCiAvKioKICAqIHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrNjQKKyAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQorICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCisgKiBAbWFzazogdGhlIDY0Yml0IGJpdG1hcCBtYXNrCisgKgorICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0KHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAogCQkJCSB1X2ludDY0X3QgbWFzaykKQEAgLTk2Nyw2ICs5OTgsMTAgQEAKIAogLyoqCiAgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcgorICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCisgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIGludGVnZXIgY29uc3RyYWludAorICoKKyAqIEFwcGx5IHRoZSBjb25zdHJhaW50IG9mIGludGVnZXIgdG8gYW4gaW50ZXJ2YWwgcGFyYW1ldGVyLgogICovCiBpbnQgc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUsIHNuZF9wY21faHdfcGFyYW1fdCB2YXIpCiB7CkBAIC05NzYsNiArMTAxMSwxMiBAQAogCiAvKioKICAqIHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgKKyAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQorICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYW5nZQorICogQG1pbjogdGhlIG1pbmltYWwgdmFsdWUKKyAqIEBtYXg6IHRoZSBtYXhpbWFsIHZhbHVlCisgKiAKKyAqIEFwcGx5IHRoZSBtaW4vbWF4IHJhbmdlIGNvbnN0cmFpbnQgdG8gYW4gaW50ZXJ2YWwgcGFyYW1ldGVyLgogICovCiBpbnQgc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgc25kX3BjbV9od19wYXJhbV90IHZhciwKIAkJCQkgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkKQEAgLTk5OSw2ICsxMDQwLDEyIEBACiAKIC8qKgogICogc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QKKyAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQorICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCisgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIGxpc3QgY29uc3RyYWludAorICogQGw6IGxpc3QKKyAqIAorICogQXBwbHkgdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgdG8gYW4gaW50ZXJ2YWwgcGFyYW1ldGVyLgogICovCiBpbnQgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGNvbmQsCkBAIC0xMDI3LDYgKzEwNzQsMTAgQEAKIAogLyoqCiAgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtcworICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCisgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKKyAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgcmF0bnVtcyBjb25zdHJhaW50CisgKiBAcjogcmF0bnVtc190IGNvbnN0cmlhbnRzCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtcyhzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgCiAJCQkJICB1bnNpZ25lZCBpbnQgY29uZCwKQEAgLTEwNTQsNiArMTEwNSwxMCBAQAogCiAvKioKICAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zCisgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKKyAqIEBjb25kOiBjb25kaXRpb24gYml0cworICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRkZW5zIGNvbnN0cmFpbnQKKyAqIEByOiByYXRkZW5zX3QgY29uc3RyaWFudHMKICAqLwogaW50IHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCAKIAkJCQkgIHVuc2lnbmVkIGludCBjb25kLApAQCAtMTA3OSw2ICsxMTM0LDEwIEBACiAKIC8qKgogICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cworICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCisgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKKyAqIEB3aWR0aDogc2FtcGxlIGJpdHMgd2lkdGgKKyAqIEBtc2JpdHM6IG1zYml0cyB3aWR0aAogICovCiBpbnQgc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgCiAJCQkJIHVuc2lnbmVkIGludCBjb25kLApAQCAtMTEwMSw2ICsxMTYwLDEwIEBACiAKIC8qKgogICogc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAKKyAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQorICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCisgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIHN0ZXAgY29uc3RyYWludAorICogQHN0ZXA6IHN0ZXAgc2l6ZQogICovCiBpbnQgc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGNvbmQsCkBAIC0xMTI2LDYgKzExODksOSBAQAogCiAvKioKICAqIHNuZF9wY21faHdfY29uc3RyYWludF9wb3cyCisgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKKyAqIEBjb25kOiBjb25kaXRpb24gYml0cworICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBwb3dlci1vZi0yIGNvbnN0cmFpbnQKICAqLwogaW50IHNuZF9wY21faHdfY29uc3RyYWludF9wb3cyKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBjb25kLApAQCAtMTE2Miw3ICsxMjI4LDcgQEAKIH0KIAogI2lmIDAKLS8qKgorLyoKICAqIHNuZF9wY21faHdfcGFyYW1fYW55CiAgKi8KIGludCBzbmRfcGNtX2h3X3BhcmFtX2FueShzbmRfcGNtX3QgKnBjbSwgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zLApAQCAtMTE4NSw3ICsxMjUxLDcgQEAKIH0KIAogI2lmIDAKLS8qKgorLyoKICAqIHNuZF9wY21faHdfcGFyYW1zX2FueQogICoKICAqIEZpbGwgUEFSQU1TIHdpdGggZnVsbCBjb25maWd1cmF0aW9uIHNwYWNlIGJvdW5kYXJpZXMKQEAgLTExOTksNiArMTI2NSw5IEBACiAKIC8qKgogICogc25kX3BjbV9od19wYXJhbV92YWx1ZQorICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQorICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAogICoKICAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGZpZWxkIFBBUiBpZiBpdCdzIGZpeGVkIGluIGNvbmZpZ3VyYXRpb24gc3BhY2UgCiAgKiAgZGVmaW5lZCBieSBQQVJBTVMuIFJldHVybiAtRUlOVkFMIG90aGVyd2lzZQpAQCAtMTIyOCw2ICsxMjk3LDkgQEAKIAogLyoqCiAgKiBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlX21pbgorICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQorICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAogICoKICAqIFJldHVybiB0aGUgbWluaW11bSB2YWx1ZSBmb3IgZmllbGQgUEFSLgogICovCkBAIC0xMjUxLDYgKzEzMjMsOSBAQAogCiAvKioKICAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWVfbWF4CisgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCisgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKKyAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCiAgKgogICogUmV0dXJuIHRoZSBtYXhpbXVtIHZhbHVlIGZvciBmaWVsZCBQQVIuCiAgKi8KQEAgLTEzMDIsNyArMTM3Nyw3IEBACiB9CiAJCiAjaWYgMAotLyoqCisvKgogICogc25kX3BjbV9od19wYXJhbV9zZXRpbnRlZ2VyCiAgKgogICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKQEAgLTEzNDcsNiArMTQyMiwxMCBAQAogCiAvKioKICAqIHNuZF9wY21faHdfcGFyYW1fZmlyc3QKKyAqIEBwY206IFBDTSBpbnN0YW5jZQorICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQorICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAogICoKICAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgUEFSQU1TIHJlbW92ZSBmcm9tIFBBUiBhbGwgCiAgKiB2YWx1ZXMgPiBtaW5pbXVtLiBSZWR1Y2UgY29uZmlndXJhdGlvbiBzcGFjZSBhY2NvcmRpbmdseS4KQEAgLTEzODgsNiArMTQ2NywxMCBAQAogCiAvKioKICAqIHNuZF9wY21faHdfcGFyYW1fbGFzdAorICogQHBjbTogUENNIGluc3RhbmNlCisgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCisgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKKyAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCiAgKgogICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKICAqIHZhbHVlcyA8IG1heGltdW0uIFJlZHVjZSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY29yZGluZ2x5LgpAQCAtMTQzOSw2ICsxNTIyLDExIEBACiAKIC8qKgogICogc25kX3BjbV9od19wYXJhbV9taW4KKyAqIEBwY206IFBDTSBpbnN0YW5jZQorICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQorICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCisgKiBAdmFsOiBtaW5pbWFsIHZhbHVlCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAogICoKICAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgUEFSQU1TIHJlbW92ZSBmcm9tIFBBUiBhbGwgCiAgKiB2YWx1ZXMgPCBWQUwuIFJlZHVjZSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY29yZGluZ2x5LgpAQCAtMTQ5NCw2ICsxNTgyLDExIEBACiAKIC8qKgogICogc25kX3BjbV9od19wYXJhbV9tYXgKKyAqIEBwY206IFBDTSBpbnN0YW5jZQorICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQorICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCisgKiBAdmFsOiBtYXhpbWFsIHZhbHVlCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAogICoKICAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgUEFSQU1TIHJlbW92ZSBmcm9tIFBBUiBhbGwgCiAgKiAgdmFsdWVzID49IFZBTCArIDEuIFJlZHVjZSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY29yZGluZ2x5LgpAQCAtMTU2NSw2ICsxNjU4LDExIEBACiAKIC8qKgogICogc25kX3BjbV9od19wYXJhbV9zZXQKKyAqIEBwY206IFBDTSBpbnN0YW5jZQorICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQorICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCisgKiBAdmFsOiB2YWx1ZSB0byBzZXQKKyAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCiAgKgogICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKICAqIHZhbHVlcyAhPSBWQUwuIFJlZHVjZSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY29yZGluZ2x5LgpAQCAtMTU5OSw2ICsxNjk3LDEwIEBACiAKIC8qKgogICogc25kX3BjbV9od19wYXJhbV9tYXNrCisgKiBAcGNtOiBQQ00gaW5zdGFuY2UKKyAqIEBwYXJhbXM6IHRoZSBod19wYXJhbXMgaW5zdGFuY2UKKyAqIEB2YXI6IHBhcmFtZXRlciB0byByZXRyaWV2ZQorICogQHZhbDogbWFzayB0byBhcHBseQogICoKICAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgUEFSQU1TIHJlbW92ZSBmcm9tIFBBUiBhbGwgdmFsdWVzCiAgKiBub3QgY29udGFpbmVkIGluIE1BU0suIFJlZHVjZSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY29yZGluZ2x5LgpAQCAtMTY3MSw2ICsxNzczLDExIEBACiAKIC8qKgogICogc25kX3BjbV9od19wYXJhbV9uZWFyCisgKiBAcGNtOiBQQ00gaW5zdGFuY2UKKyAqIEBwYXJhbXM6IHRoZSBod19wYXJhbXMgaW5zdGFuY2UKKyAqIEB2YXI6IHBhcmFtZXRlciB0byByZXRyaWV2ZQorICogQGJlc3Q6IHZhbHVlIHRvIHNldAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yIE5VTEwKICAqCiAgKiBJbnNpZGUgY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IFBBUkFNUyBzZXQgUEFSIHRvIHRoZSBhdmFpbGFibGUgdmFsdWUKICAqIG5lYXJlc3QgdG8gVkFMLiBSZWR1Y2UgY29uZmlndXJhdGlvbiBzcGFjZSBhY2NvcmRpbmdseS4KQEAgLTE3NDcsNiArMTg1NCw4IEBACiAKIC8qKgogICogc25kX3BjbV9od19wYXJhbV9jaG9vc2UKKyAqIEBwY206IFBDTSBpbnN0YW5jZQorICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICoKICAqIENob29zZSBvbmUgY29uZmlndXJhdGlvbiBmcm9tIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMKICAqIFRoZSBjb25maWd1cmF0aW9uIGNob3NlbiBpcyB0aGF0IG9idGFpbmVkIGZpeGluZyBpbiB0aGlzIG9yZGVyOgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWVtb3J5LmMgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwppbmRleCA5YTE3NGZiLi5iM2Y1MzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYworKysgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIC8qKgogICogc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbCAtIHByZS1hbGxvY2F0aW9uIGZvciBjb250aW5vdXMgbWVtb3J5IHR5cGUgKGFsbCBzdWJzdHJlYW1zKQotICogQHN1YnN0cmVhbTogdGhlIHBjbSBzdWJzdHJlYW0gaW5zdGFuY2UKKyAqIEBwY206IHRoZSBwY20gaW5zdGFuY2UKICAqIEB0eXBlOiBETUEgdHlwZSAoU05EUlZfRE1BX1RZUEVfKikKICAqIEBkYXRhOiBETUEgdHlwZSBkZXBlbmRhbnQgZGF0YQogICogQHNpemU6IHRoZSByZXF1ZXN0ZWQgcHJlLWFsbG9jYXRpb24gc2l6ZSBpbiBieXRlcwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJaWYgKHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hcmVhICE9IE5VTEwgJiYgc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmJ5dGVzID49IHNpemUpIHsKIAkJZG1hYiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7IC8qIHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBidWZmZXIgKi8KIAl9IGVsc2UgewotCQlkbWFiID0ga2NhbGxvYygxLCBzaXplb2YoKmRtYWIpLCBHRlBfS0VSTkVMKTsKKwkJZG1hYiA9IGt6YWxsb2Moc2l6ZW9mKCpkbWFiKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghIGRtYWIpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZG1hYi0+ZGV2ID0gc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmRldjsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggMDNjMTcxNS4uNjdhYmViYSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTg1OSw2ICs4NTksNyBAQAogCiAvKioKICAqIHNuZF9wY21fc3RhcnQKKyAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCiAgKgogICogU3RhcnQgYWxsIGxpbmtlZCBzdHJlYW1zLgogICovCkBAIC05MDgsNiArOTA5LDggQEAKIAogLyoqCiAgKiBzbmRfcGNtX3N0b3AKKyAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCisgKiBAc3RhdGU6IFBDTSBzdGF0ZSBhZnRlciBzdG9wcGluZyB0aGUgc3RyZWFtCiAgKgogICogVHJ5IHRvIHN0b3AgYWxsIHJ1bm5pbmcgc3RyZWFtcyBpbiB0aGUgc3Vic3RyZWFtIGdyb3VwLgogICogVGhlIHN0YXRlIG9mIGVhY2ggc3RyZWFtIGlzIGNoYW5nZWQgdG8gdGhlIGdpdmVuIHZhbHVlIGFmdGVyIHRoYXQgdW5jb25kaXRpb25hbGx5LgpAQCAtOTE5LDYgKzkyMiw3IEBACiAKIC8qKgogICogc25kX3BjbV9kcmFpbl9kb25lCisgKiBAc3Vic3RyZWFtOiB0aGUgUENNIHN1YnN0cmVhbQogICoKICAqIFN0b3AgdGhlIERNQSBvbmx5IHdoZW4gdGhlIGdpdmVuIHN0cmVhbSBpcyBwbGF5YmFjay4KICAqIFRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIFNFVFVQLgpAQCAtMTA0MCw2ICsxMDQ0LDcgQEAKIAogLyoqCiAgKiBzbmRfcGNtX3N1c3BlbmQKKyAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtCiAgKgogICogVHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBsaW5rZWQgc3RyZWFtcy4KICAqIEFmdGVyIHRoaXMgY2FsbCwgYWxsIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gU1VTUEVOREVEIHN0YXRlLgpAQCAtMTA1Nyw2ICsxMDYyLDcgQEAKIAogLyoqCiAgKiBzbmRfcGNtX3N1c3BlbmRfYWxsCisgKiBAcGNtOiB0aGUgUENNIGluc3RhbmNlCiAgKgogICogVHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBzdWJzdHJlYW1zIGluIHRoZSBnaXZlbiBwY20uCiAgKiBBZnRlciB0aGlzIGNhbGwsIGFsbCBzdHJlYW1zIGFyZSBjaGFuZ2VkIHRvIFNVU1BFTkRFRCBzdGF0ZS4KQEAgLTEyNzIsNiArMTI3OCw5IEBACiAKIC8qKgogICogc25kX3BjbV9wcmVwYXJlCisgKiBAc3Vic3RyZWFtOiB0aGUgUENNIHN1YnN0cmVhbSBpbnN0YW5jZQorICoKKyAqIFByZXBhcmUgdGhlIFBDTSBzdWJzdHJlYW0gdG8gYmUgdHJpZ2dlcmFibGUuCiAgKi8KIGludCBzbmRfcGNtX3ByZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQogewpAQCAtMTk5Miw3ICsyMDAxLDcgQEAKIAlzbmRfYXNzZXJ0KHJwY21fZmlsZSAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CiAJKnJwY21fZmlsZSA9IE5VTEw7CiAKLQlwY21fZmlsZSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpwY21fZmlsZSksIEdGUF9LRVJORUwpOworCXBjbV9maWxlID0ga3phbGxvYyhzaXplb2YoKnBjbV9maWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBjbV9maWxlID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9yYXdtaWRpLmMgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwppbmRleCBlZGJhNDExLi43YzIwZWFmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3Jhd21pZGkuYworKysgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiB7CiAJc25kX3Jhd21pZGlfcnVudGltZV90ICpydW50aW1lOwogCi0JaWYgKChydW50aW1lID0ga2NhbGxvYygxLCBzaXplb2YoKnJ1bnRpbWUpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKHJ1bnRpbWUgPSBremFsbG9jKHNpemVvZigqcnVudGltZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmcnVudGltZS0+bG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcnVudGltZS0+c2xlZXApOwpAQCAtOTg0LDcgKzk4NCw5IEBACiAJCQlzcGluX2xvY2tfaXJxKCZydW50aW1lLT5sb2NrKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnJ1bnRpbWUtPmxvY2spOwotCQljb3VudDEgPSBzbmRfcmF3bWlkaV9rZXJuZWxfcmVhZDEoc3Vic3RyZWFtLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgY291bnQsIDApOworCQljb3VudDEgPSBzbmRfcmF3bWlkaV9rZXJuZWxfcmVhZDEoc3Vic3RyZWFtLAorCQkJCQkJICAodW5zaWduZWQgY2hhciBfX2ZvcmNlICopYnVmLAorCQkJCQkJICBjb3VudCwgMCk7CiAJCWlmIChjb3VudDEgPCAwKQogCQkJcmV0dXJuIHJlc3VsdCA+IDAgPyByZXN1bHQgOiBjb3VudDE7CiAJCXJlc3VsdCArPSBjb3VudDE7CkBAIC0xMTA3LDcgKzExMDksNyBAQAogLyoqCiAgKiBzbmRfcmF3bWlkaV90cmFuc21pdCAtIGNvcHkgZnJvbSB0aGUgYnVmZmVyIHRvIHRoZSBkZXZpY2UKICAqIEBzdWJzdHJlYW06IHRoZSByYXdtaWRpIHN1YnN0cmVhbQotICogQGJ1ZjogdGhlIGJ1ZmZlciBwb2ludGVyCisgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHBvaW50ZXIKICAqIEBjb3VudDogdGhlIGRhdGEgc2l6ZSB0byB0cmFuc2ZlcgogICogCiAgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSBidWZmZXIgdG8gdGhlIGRldmljZSBhbmQgYWR2YW5jZXMgdGhlIHBvaW50ZXIuCkBAIC0xMjEzLDcgKzEyMTUsOSBAQAogCQkJc3Bpbl9sb2NrX2lycSgmcnVudGltZS0+bG9jayk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZydW50aW1lLT5sb2NrKTsKLQkJY291bnQxID0gc25kX3Jhd21pZGlfa2VybmVsX3dyaXRlMShzdWJzdHJlYW0sICh1bnNpZ25lZCBjaGFyICopYnVmLCBjb3VudCwgMCk7CisJCWNvdW50MSA9IHNuZF9yYXdtaWRpX2tlcm5lbF93cml0ZTEoc3Vic3RyZWFtLAorCQkJCQkJICAgKHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKWJ1ZiwKKwkJCQkJCSAgIGNvdW50LCAwKTsKIAkJaWYgKGNvdW50MSA8IDApCiAJCQlyZXR1cm4gcmVzdWx0ID4gMCA/IHJlc3VsdCA6IGNvdW50MTsKIAkJcmVzdWx0ICs9IGNvdW50MTsKQEAgLTEzNzAsNyArMTM3NCw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmc3RyZWFtLT5zdWJzdHJlYW1zKTsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvdW50OyBpZHgrKykgewotCQlzdWJzdHJlYW0gPSBrY2FsbG9jKDEsIHNpemVvZigqc3Vic3RyZWFtKSwgR0ZQX0tFUk5FTCk7CisJCXN1YnN0cmVhbSA9IGt6YWxsb2Moc2l6ZW9mKCpzdWJzdHJlYW0pLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHN1YnN0cmVhbSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXN1YnN0cmVhbS0+c3RyZWFtID0gZGlyZWN0aW9uOwpAQCAtMTQxMyw3ICsxNDE3LDcgQEAKIAlzbmRfYXNzZXJ0KHJyYXdtaWRpICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKIAkqcnJhd21pZGkgPSBOVUxMOwogCXNuZF9hc3NlcnQoY2FyZCAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlybWlkaSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpybWlkaSksIEdGUF9LRVJORUwpOworCXJtaWRpID0ga3phbGxvYyhzaXplb2YoKnJtaWRpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJtaWRpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXJtaWRpLT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL2luc3RyL2FpbnN0cl9nZjEuYyBiL3NvdW5kL2NvcmUvc2VxL2luc3RyL2FpbnN0cl9nZjEuYwppbmRleCAzMmU5MWM2Li4yMDdjMmM1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9pbnN0ci9haW5zdHJfZ2YxLmMKKysrIGIvc291bmQvY29yZS9zZXEvaW5zdHIvYWluc3RyX2dmMS5jCkBAIC02MSw3ICs2MSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCSpkYXRhICs9IHNpemVvZih4cCk7CiAJKmxlbiAtPSBzaXplb2YoeHApOwotCXdwID0ga2NhbGxvYygxLCBzaXplb2YoKndwKSwgZ2ZwX21hc2spOworCXdwID0ga3phbGxvYyhzaXplb2YoKndwKSwgZ2ZwX21hc2spOwogCWlmICh3cCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAl3cC0+c2hhcmVfaWRbMF0gPSBsZTMyX3RvX2NwdSh4cC5zaGFyZV9pZFswXSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9pbnN0ci9haW5zdHJfaXcuYyBiL3NvdW5kL2NvcmUvc2VxL2luc3RyL2FpbnN0cl9pdy5jCmluZGV4IDI2MjJiODYuLmIzY2VlMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL2luc3RyL2FpbnN0cl9pdy5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL2luc3RyL2FpbnN0cl9pdy5jCkBAIC05Miw3ICs5Miw3IEBACiAJCXBvaW50c19zaXplID0gKGxlMTZfdG9fY3B1KHJ4Lm5hdHRhY2spICsgbGUxNl90b19jcHUocngubnJlbGVhc2UpKSAqIDIgKiBzaXplb2YoX191MTYpOwogCQlpZiAocG9pbnRzX3NpemUgPiAqbGVuKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJwID0ga2NhbGxvYygxLCBzaXplb2YoKnJwKSArIHBvaW50c19zaXplLCBnZnBfbWFzayk7CisJCXJwID0ga3phbGxvYyhzaXplb2YoKnJwKSArIHBvaW50c19zaXplLCBnZnBfbWFzayk7CiAJCWlmIChycCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXJwLT5uYXR0YWNrID0gbGUxNl90b19jcHUocngubmF0dGFjayk7CkBAIC0xMzksNyArMTM5LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJKmRhdGEgKz0gc2l6ZW9mKHhwKTsKIAkqbGVuIC09IHNpemVvZih4cCk7Ci0Jd3AgPSBrY2FsbG9jKDEsIHNpemVvZigqd3ApLCBnZnBfbWFzayk7CisJd3AgPSBremFsbG9jKHNpemVvZigqd3ApLCBnZnBfbWFzayk7CiAJaWYgKHdwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXdwLT5zaGFyZV9pZFswXSA9IGxlMzJfdG9fY3B1KHhwLnNoYXJlX2lkWzBdKTsKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQkJc25kX3NlcV9pd2ZmZmZfaW5zdHJfZnJlZShvcHMsIGlwLCBhdG9taWMpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJbHAgPSBrY2FsbG9jKDEsIHNpemVvZigqbHApLCBnZnBfbWFzayk7CisJCWxwID0ga3phbGxvYyhzaXplb2YoKmxwKSwgZ2ZwX21hc2spOwogCQlpZiAobHAgPT0gTlVMTCkgewogCQkJc25kX3NlcV9pd2ZmZmZfaW5zdHJfZnJlZShvcHMsIGlwLCBhdG9taWMpOwogCQkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19pbml0LmMgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19pbml0LmMKaW5kZXggYmFjNGI0Zi4uMWFiMWNmOCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfaW5pdC5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2luaXQuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJaW50IGksIHJjOwogCXNlcV9vc3NfZGV2aW5mb190ICpkcDsKIAotCWlmICgoZHAgPSBrY2FsbG9jKDEsIHNpemVvZigqZHApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCWlmICgoZHAgPSBremFsbG9jKHNpemVvZigqZHApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBtYWxsb2MgZGV2aWNlIGluZm9cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19taWRpLmMgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19taWRpLmMKaW5kZXggOWFlY2U2Yy4uZjBlOTVjOCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfbWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX21pZGkuYwpAQCAtNzYsOCArNzYsOCBAQAogCXNuZF9zZXFfY2xpZW50X2luZm9fdCAqY2xpbmZvOwogCXNuZF9zZXFfcG9ydF9pbmZvX3QgKnBpbmZvOwogCi0JY2xpbmZvID0ga2NhbGxvYygxLCBzaXplb2YoKmNsaW5mbyksIEdGUF9LRVJORUwpOwotCXBpbmZvID0ga2NhbGxvYygxLCBzaXplb2YoKnBpbmZvKSwgR0ZQX0tFUk5FTCk7CisJY2xpbmZvID0ga3phbGxvYyhzaXplb2YoKmNsaW5mbyksIEdGUF9LRVJORUwpOworCXBpbmZvID0ga3phbGxvYyhzaXplb2YoKnBpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgY2xpbmZvIHx8ICEgcGluZm8pIHsKIAkJa2ZyZWUoY2xpbmZvKTsKIAkJa2ZyZWUocGluZm8pOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJLyoKIAkgKiBhbGxvY2F0ZSBtaWRpIGluZm8gcmVjb3JkCiAJICovCi0JaWYgKChtZGV2ID0ga2NhbGxvYygxLCBzaXplb2YoKm1kZXYpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCWlmICgobWRldiA9IGt6YWxsb2Moc2l6ZW9mKCptZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgbWFsbG9jIG1pZGkgaW5mb1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX3JlYWRxLmMgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19yZWFkcS5jCmluZGV4IDBhNmYyYTYuLjU1NTcxZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX3JlYWRxLmMKKysrIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfcmVhZHEuYwpAQCAtNDYsNyArNDYsNyBAQAogewogCXNlcV9vc3NfcmVhZHFfdCAqcTsKIAotCWlmICgocSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpxKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKHEgPSBremFsbG9jKHNpemVvZigqcSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IG1hbGxvYyByZWFkIHF1ZXVlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3Nfc3ludGguYyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX3N5bnRoLmMKaW5kZXggMWE3NzM2Yy4uODI1N2ZjZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3Nfc3ludGguYworKysgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19zeW50aC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAlzbmRfc2VxX29zc19yZWdfdCAqcmVnID0gU05EUlZfU0VRX0RFVklDRV9BUkdQVFIoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKChyZWMgPSBrY2FsbG9jKDEsIHNpemVvZigqcmVjKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKHJlYyA9IGt6YWxsb2Moc2l6ZW9mKCpyZWMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBtYWxsb2Mgc3ludGggaW5mb1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTQ5OSw3ICs0OTksNyBAQAogCiAJc3lzZXggPSBkcC0+c3ludGhzW2Rldl0uc3lzZXg7CiAJaWYgKHN5c2V4ID09IE5VTEwpIHsKLQkJc3lzZXggPSBrY2FsbG9jKDEsIHNpemVvZigqc3lzZXgpLCBHRlBfS0VSTkVMKTsKKwkJc3lzZXggPSBremFsbG9jKHNpemVvZigqc3lzZXgpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHN5c2V4ID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZHAtPnN5bnRoc1tkZXZdLnN5c2V4ID0gc3lzZXg7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc190aW1lci5jIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfdGltZXIuYwppbmRleCA0MmNhOTQ5Li42NGQ1OTRiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc190aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX3RpbWVyLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIHsKIAlzZXFfb3NzX3RpbWVyX3QgKnJlYzsKIAotCXJlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZWMpLCBHRlBfS0VSTkVMKTsKKwlyZWMgPSBremFsbG9jKHNpemVvZigqcmVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlYyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3Nfd3JpdGVxLmMgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc193cml0ZXEuYwppbmRleCA4N2Y4NWY3Li5iMjAzNzgwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc193cml0ZXEuYworKysgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc193cml0ZXEuYwpAQCAtMzgsNyArMzgsNyBAQAogCXNlcV9vc3Nfd3JpdGVxX3QgKnE7CiAJc25kX3NlcV9jbGllbnRfcG9vbF90IHBvb2w7CiAKLQlpZiAoKHEgPSBrY2FsbG9jKDEsIHNpemVvZigqcSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgocSA9IGt6YWxsb2Moc2l6ZW9mKCpxKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXEtPmRwID0gZHA7CiAJcS0+bWF4bGVuID0gbWF4bGVuOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXEuYwppbmRleCA3NDQ5ZDJhLi4yNDY0NDE1MCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxLmMKQEAgLTQzLDcgKzQzLDEzIEBACiBpbnQgc2VxX2RlZmF1bHRfdGltZXJfY2xhc3MgPSBTTkRSVl9USU1FUl9DTEFTU19HTE9CQUw7CiBpbnQgc2VxX2RlZmF1bHRfdGltZXJfc2NsYXNzID0gU05EUlZfVElNRVJfU0NMQVNTX05PTkU7CiBpbnQgc2VxX2RlZmF1bHRfdGltZXJfY2FyZCA9IC0xOwotaW50IHNlcV9kZWZhdWx0X3RpbWVyX2RldmljZSA9IFNORFJWX1RJTUVSX0dMT0JBTF9TWVNURU07CitpbnQgc2VxX2RlZmF1bHRfdGltZXJfZGV2aWNlID0KKyNpZmRlZiBDT05GSUdfU05EX1NFUV9SVENUSU1FUl9ERUZBVUxUCisJU05EUlZfVElNRVJfR0xPQkFMX1JUQworI2Vsc2UKKwlTTkRSVl9USU1FUl9HTE9CQUxfU1lTVEVNCisjZW5kaWYKKwk7CiBpbnQgc2VxX2RlZmF1bHRfdGltZXJfc3ViZGV2aWNlID0gMDsKIGludCBzZXFfZGVmYXVsdF90aW1lcl9yZXNvbHV0aW9uID0gMDsJLyogSHogKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IGQ4Zjc2YWYuLmE4ODZkYjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCWNsaWVudF90ICpjbGllbnQ7CiAKIAkvKiBpbml0IGNsaWVudCBkYXRhICovCi0JY2xpZW50ID0ga2NhbGxvYygxLCBzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2xpZW50ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCWNsaWVudC0+cG9vbCA9IHNuZF9zZXFfcG9vbF9uZXcocG9vbHNpemUpOwpAQCAtNDEzLDcgKzQxMyw5IEBACiAJCQl9CiAJCQljb3VudCAtPSBzaXplb2Yoc25kX3NlcV9ldmVudF90KTsKIAkJCWJ1ZiArPSBzaXplb2Yoc25kX3NlcV9ldmVudF90KTsKLQkJCWVyciA9IHNuZF9zZXFfZXhwYW5kX3Zhcl9ldmVudCgmY2VsbC0+ZXZlbnQsIGNvdW50LCAoY2hhciAqKWJ1ZiwgMCwgc2l6ZW9mKHNuZF9zZXFfZXZlbnRfdCkpOworCQkJZXJyID0gc25kX3NlcV9leHBhbmRfdmFyX2V2ZW50KCZjZWxsLT5ldmVudCwgY291bnQsCisJCQkJCQkgICAgICAgKGNoYXIgX19mb3JjZSAqKWJ1ZiwgMCwKKwkJCQkJCSAgICAgICBzaXplb2Yoc25kX3NlcV9ldmVudF90KSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlicmVhazsKIAkJCXJlc3VsdCArPSBlcnI7CkBAIC0xMDA5LDcgKzEwMTEsOCBAQAogCQkJfQogCQkJLyogc2V0IHVzZXIgc3BhY2UgcG9pbnRlciAqLwogCQkJZXZlbnQuZGF0YS5leHQubGVuID0gZXh0bGVuIHwgU05EUlZfU0VRX0VYVF9VU1JQVFI7Ci0JCQlldmVudC5kYXRhLmV4dC5wdHIgPSAoY2hhciopYnVmICsgc2l6ZW9mKHNuZF9zZXFfZXZlbnRfdCk7CisJCQlldmVudC5kYXRhLmV4dC5wdHIgPSAoY2hhciBfX2ZvcmNlICopYnVmCisJCQkJCQkrIHNpemVvZihzbmRfc2VxX2V2ZW50X3QpOwogCQkJbGVuICs9IGV4dGxlbjsgLyogaW5jcmVtZW50IGRhdGEgbGVuZ3RoICovCiAJCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2RldmljZS5jIGIvc291bmQvY29yZS9zZXEvc2VxX2RldmljZS5jCmluZGV4IDRkODBmMzkuLjI1MmI1MjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9kZXZpY2UuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfZGV2aWNlLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWlmIChvcHMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXYgPSBrY2FsbG9jKDEsIHNpemVvZigqZGV2KSoyICsgYXJnc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldikqMiArIGFyZ3NpemUsIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQl1bmxvY2tfZHJpdmVyKG9wcyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfZHVtbXkuYwppbmRleCBlYTk0NWE1Li41ZGQwZTZhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfZHVtbXkuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfZHVtbXkuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJc25kX3NlcV9wb3J0X2NhbGxiYWNrX3QgcGNiOwogCXNuZF9zZXFfZHVtbXlfcG9ydF90ICpyZWM7CiAKLQlpZiAoKHJlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZWMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKHJlYyA9IGt6YWxsb2Moc2l6ZW9mKCpyZWMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZWMtPmNsaWVudCA9IG15X2NsaWVudDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9maWZvLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfZmlmby5jCmluZGV4IDNiNzY0N2MuLjQ3NjdjZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9maWZvLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX2ZpZm8uYwpAQCAtMzMsNyArMzMsNyBAQAogewogCWZpZm9fdCAqZjsKIAotCWYgPSBrY2FsbG9jKDEsIHNpemVvZigqZiksIEdGUF9LRVJORUwpOworCWYgPSBremFsbG9jKHNpemVvZigqZiksIEdGUF9LRVJORUwpOwogCWlmIChmID09IE5VTEwpIHsKIAkJc25kX3ByaW50ZCgibWFsbG9jIGZhaWxlZCBmb3Igc25kX3NlcV9maWZvX25ldygpIFxuIik7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2luc3RyLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfaW5zdHIuYwppbmRleCA1YjQwZWEyLi4wMTlkNDNhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfaW5zdHIuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfaW5zdHIuYwpAQCAtNTMsNyArNTMsNyBAQAogewogCXNuZF9zZXFfa2luc3RyX3QgKmluc3RyOwogCQotCWluc3RyID0ga2NhbGxvYygxLCBzaXplb2Yoc25kX3NlcV9raW5zdHJfdCkgKyBhZGRfbGVuLCBhdG9taWMgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7CisJaW5zdHIgPSBremFsbG9jKHNpemVvZihzbmRfc2VxX2tpbnN0cl90KSArIGFkZF9sZW4sIGF0b21pYyA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKTsKIAlpZiAoaW5zdHIgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJaW5zdHItPmFkZF9sZW4gPSBhZGRfbGVuOwpAQCAtNzcsNyArNzcsNyBAQAogewogCXNuZF9zZXFfa2luc3RyX2xpc3RfdCAqbGlzdDsKIAotCWxpc3QgPSBrY2FsbG9jKDEsIHNpemVvZihzbmRfc2VxX2tpbnN0cl9saXN0X3QpLCBHRlBfS0VSTkVMKTsKKwlsaXN0ID0ga3phbGxvYyhzaXplb2Yoc25kX3NlcV9raW5zdHJfbGlzdF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGxpc3QgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmxpc3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX21lbW9yeS5jIGIvc291bmQvY29yZS9zZXEvc2VxX21lbW9yeS5jCmluZGV4IDAzYWNiMmQuLmQ0ZDdkMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9tZW1vcnkuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmMKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCXBvb2xfdCAqcG9vbDsKIAogCS8qIGNyZWF0ZSBwb29sIGJsb2NrICovCi0JcG9vbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBvb2wgPT0gTlVMTCkgewogCQlzbmRfcHJpbnRkKCJzZXE6IG1hbGxvYyBmYWlsZWQgZm9yIHBvb2xcbiIpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jCmluZGV4IDQzNzQ4MjkuLmI0Njc0YWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX21pZGkuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJY2xpZW50ID0gc3ludGhzW2NhcmQtPm51bWJlcl07CiAJaWYgKGNsaWVudCA9PSBOVUxMKSB7CiAJCW5ld2NsaWVudCA9IDE7Ci0JCWNsaWVudCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKKwkJY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwogCQlpZiAoY2xpZW50ID09IE5VTEwpIHsKIAkJCXVwKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlrZnJlZShpbmZvKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpX2V2ZW50LmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaV9ldmVudC5jCmluZGV4IDYwM2I2MzcuLjJkYzFhZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpX2V2ZW50LmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX21pZGlfZXZlbnQuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJc25kX21pZGlfZXZlbnRfdCAqZGV2OwogCiAJKnJkZXYgPSBOVUxMOwotCWRldiA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoYnVmc2l6ZSA+IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jIGIvc291bmQvY29yZS9zZXEvc2VxX3BvcnRzLmMKaW5kZXggYjk3Njk1MS4uNTdlYzMxZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX3BvcnRzLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX3BvcnRzLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCX0KIAogCS8qIGNyZWF0ZSBhIG5ldyBwb3J0ICovCi0JbmV3X3BvcnQgPSBrY2FsbG9jKDEsIHNpemVvZigqbmV3X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwluZXdfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfcG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghIG5ld19wb3J0KSB7CiAJCXNuZF9wcmludGQoIm1hbGxvYyBmYWlsZWQgZm9yIHJlZ2lzdGVyaW5nIGNsaWVudCBwb3J0XG4iKTsKIAkJcmV0dXJuIE5VTEw7CS8qIGZhaWx1cmUsIG91dCBvZiBtZW1vcnkgKi8KQEAgLTQ4OCw3ICs0ODgsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGV4Y2x1c2l2ZTsKIAotCXN1YnMgPSBrY2FsbG9jKDEsIHNpemVvZigqc3VicyksIEdGUF9LRVJORUwpOworCXN1YnMgPSBremFsbG9jKHNpemVvZigqc3VicyksIEdGUF9LRVJORUwpOwogCWlmICghIHN1YnMpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCmluZGV4IGE1MTk3MzJlLi5jZDY0MWJjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYwpAQCAtNTksNyArNTksNyBAQAogewogCXByaW9xX3QgKmY7CiAKLQlmID0ga2NhbGxvYygxLCBzaXplb2YoKmYpLCBHRlBfS0VSTkVMKTsKKwlmID0ga3phbGxvYyhzaXplb2YoKmYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZiA9PSBOVUxMKSB7CiAJCXNuZF9wcmludGQoIm9vcHM6IG1hbGxvYyBmYWlsZWQgZm9yIHNuZF9zZXFfcHJpb3FfbmV3KClcbiIpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9xdWV1ZS5jIGIvc291bmQvY29yZS9zZXEvc2VxX3F1ZXVlLmMKaW5kZXggOThkZTJlNy4uNWY1YzNjYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX3F1ZXVlLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX3F1ZXVlLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogewogCXF1ZXVlX3QgKnE7CiAKLQlxID0ga2NhbGxvYygxLCBzaXplb2YoKnEpLCBHRlBfS0VSTkVMKTsKKwlxID0ga3phbGxvYyhzaXplb2YoKnEpLCBHRlBfS0VSTkVMKTsKIAlpZiAocSA9PSBOVUxMKSB7CiAJCXNuZF9wcmludGQoIm1hbGxvYyBmYWlsZWQgZm9yIHNuZF9zZXFfcXVldWVfbmV3KClcbiIpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9zeXN0ZW0uYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9zeXN0ZW0uYwppbmRleCBlOGYwYTY2Li4wZDllZmY4IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfc3lzdGVtLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX3N5c3RlbS5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlzbmRfc2VxX2NsaWVudF9pbmZvX3QgKmluZjsKIAlzbmRfc2VxX3BvcnRfaW5mb190ICpwb3J0OwogCi0JaW5mID0ga2NhbGxvYygxLCBzaXplb2YoKmluZiksIEdGUF9LRVJORUwpOwotCXBvcnQgPSBrY2FsbG9jKDEsIHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOworCWluZiA9IGt6YWxsb2Moc2l6ZW9mKCppbmYpLCBHRlBfS0VSTkVMKTsKKwlwb3J0ID0ga3phbGxvYyhzaXplb2YoKnBvcnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBpbmYgfHwgISBwb3J0KSB7CiAJCWtmcmVlKGluZik7CiAJCWtmcmVlKHBvcnQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX3RpbWVyLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYwppbmRleCBhN2Y3NmZjLi5iNTdhM2MwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYwpAQCAtNjAsNyArNjAsNyBAQAogewogCXNlcV90aW1lcl90ICp0bXI7CiAJCi0JdG1yID0ga2NhbGxvYygxLCBzaXplb2YoKnRtciksIEdGUF9LRVJORUwpOworCXRtciA9IGt6YWxsb2Moc2l6ZW9mKCp0bXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAodG1yID09IE5VTEwpIHsKIAkJc25kX3ByaW50ZCgibWFsbG9jIGZhaWxlZCBmb3Igc25kX3NlcV90aW1lcl9uZXcoKSBcbiIpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV92aXJtaWRpLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfdmlybWlkaS5jCmluZGV4IGE2NjQ4NGI1Li5lNGY1MTJhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfdmlybWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV92aXJtaWRpLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXNuZF92aXJtaWRpX3QgKnZtaWRpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl2bWlkaSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp2bWlkaSksIEdGUF9LRVJORUwpOworCXZtaWRpID0ga3phbGxvYyhzaXplb2YoKnZtaWRpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHZtaWRpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXZtaWRpLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CkBAIC0yMzMsNyArMjMzLDcgQEAKIAlzbmRfcmF3bWlkaV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc25kX3Zpcm1pZGlfdCAqdm1pZGk7CiAKLQl2bWlkaSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp2bWlkaSksIEdGUF9LRVJORUwpOworCXZtaWRpID0ga3phbGxvYyhzaXplb2YoKnZtaWRpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHZtaWRpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXZtaWRpLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CkBAIC01MDgsNyArNTA4LDcgQEAKIAkJCQkgICAmcm1pZGkpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJc3RyY3B5KHJtaWRpLT5uYW1lLCBybWlkaS0+aWQpOwotCXJkZXYgPSBrY2FsbG9jKDEsIHNpemVvZigqcmRldiksIEdGUF9LRVJORUwpOworCXJkZXYgPSBremFsbG9jKHNpemVvZigqcmRldiksIEdGUF9LRVJORUwpOwogCWlmIChyZGV2ID09IE5VTEwpIHsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIHJtaWRpKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NvdW5kLmMgYi9zb3VuZC9jb3JlL3NvdW5kLmMKaW5kZXggMzI3MWU5Mi4uOWU3NmJkZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zb3VuZC5jCisrKyBiL3NvdW5kL2NvcmUvc291bmQuYwpAQCAtMzI4LDYgKzMyOCwxMCBAQAogICogIElOSVQgUEFSVAogICovCiAKKyNpZmRlZiBDT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSCitleHRlcm4gc3RydWN0IGRldmljZV9kcml2ZXIgc25kX2dlbmVyaWNfZHJpdmVyOworI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IGFsc2Ffc291bmRfaW5pdCh2b2lkKQogewogCXNob3J0IGNvbnRyb2xudW07CkBAIC0zNTQsNiArMzU4LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXNuZF9pbmZvX21pbm9yX3JlZ2lzdGVyKCk7CisjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgorCWRyaXZlcl9yZWdpc3Rlcigmc25kX2dlbmVyaWNfZHJpdmVyKTsKKyNlbmRpZgogCWZvciAoY29udHJvbG51bSA9IDA7IGNvbnRyb2xudW0gPCBjYXJkc19saW1pdDsgY29udHJvbG51bSsrKQogCQlkZXZmc19ta19jZGV2KE1LREVWKG1ham9yLCBjb250cm9sbnVtPDw1KSwgU19JRkNIUiB8IGRldmljZV9tb2RlLCAic25kL2NvbnRyb2xDJWQiLCBjb250cm9sbnVtKTsKICNpZm5kZWYgTU9EVUxFCkBAIC0zNjksNiArMzc2LDkgQEAKIAlmb3IgKGNvbnRyb2xudW0gPSAwOyBjb250cm9sbnVtIDwgY2FyZHNfbGltaXQ7IGNvbnRyb2xudW0rKykKIAkJZGV2ZnNfcmVtb3ZlKCJzbmQvY29udHJvbEMlZCIsIGNvbnRyb2xudW0pOwogCisjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgorCWRyaXZlcl91bnJlZ2lzdGVyKCZzbmRfZ2VuZXJpY19kcml2ZXIpOworI2VuZGlmCiAJc25kX2luZm9fbWlub3JfdW5yZWdpc3RlcigpOwogCXNuZF9pbmZvX2RvbmUoKTsKIAlzbmRfbWVtb3J5X2RvbmUoKTsKQEAgLTQxNiwxMCArNDI2LDEzIEBACiBFWFBPUlRfU1lNQk9MKHNuZF9jb21wb25lbnRfYWRkKTsKIEVYUE9SVF9TWU1CT0woc25kX2NhcmRfZmlsZV9hZGQpOwogRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9maWxlX3JlbW92ZSk7CisjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgorRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYpOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BNCiBFWFBPUlRfU1lNQk9MKHNuZF9wb3dlcl93YWl0KTsKIEVYUE9SVF9TWU1CT0woc25kX2NhcmRfc2V0X3BtX2NhbGxiYWNrKTsKLSNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfU05EX0dFTkVSSUNfUE0pCisjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgogRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9zZXRfZ2VuZXJpY19wbV9jYWxsYmFjayk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggNDEwNGY2ZS4uMjJiMTA0NiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtOTgsNyArOTgsNyBAQAogc3RhdGljIHNuZF90aW1lcl9pbnN0YW5jZV90ICpzbmRfdGltZXJfaW5zdGFuY2VfbmV3KGNoYXIgKm93bmVyLCBzbmRfdGltZXJfdCAqdGltZXIpCiB7CiAJc25kX3RpbWVyX2luc3RhbmNlX3QgKnRpbWVyaTsKLQl0aW1lcmkgPSBrY2FsbG9jKDEsIHNpemVvZigqdGltZXJpKSwgR0ZQX0tFUk5FTCk7CisJdGltZXJpID0ga3phbGxvYyhzaXplb2YoKnRpbWVyaSksIEdGUF9LRVJORUwpOwogCWlmICh0aW1lcmkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJdGltZXJpLT5vd25lciA9IGtzdHJkdXAob3duZXIsIEdGUF9LRVJORUwpOwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJc25kX2Fzc2VydCh0aWQgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwogCXNuZF9hc3NlcnQocnRpbWVyICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKIAkqcnRpbWVyID0gTlVMTDsKLQl0aW1lciA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp0aW1lciksIEdGUF9LRVJORUwpOworCXRpbWVyID0ga3phbGxvYyhzaXplb2YoKnRpbWVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHRpbWVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXRpbWVyLT50bXJfY2xhc3MgPSB0aWQtPmRldl9jbGFzczsKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJCXJldHVybiBlcnI7CiAJc3RyY3B5KHRpbWVyLT5uYW1lLCAic3lzdGVtIHRpbWVyIik7CiAJdGltZXItPmh3ID0gc25kX3RpbWVyX3N5c3RlbTsKLQlwcml2ID0ga2NhbGxvYygxLCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKSB7CiAJCXNuZF90aW1lcl9mcmVlKHRpbWVyKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjAyLDcgKzEyMDIsNyBAQAogewogCXNuZF90aW1lcl91c2VyX3QgKnR1OwogCQotCXR1ID0ga2NhbGxvYygxLCBzaXplb2YoKnR1KSwgR0ZQX0tFUk5FTCk7CisJdHUgPSBremFsbG9jKHNpemVvZigqdHUpLCBHRlBfS0VSTkVMKTsKIAlpZiAodHUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc3Bpbl9sb2NrX2luaXQoJnR1LT5xbG9jayk7CkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogCXQgPSB0dS0+dGltZXJpLT50aW1lcjsKIAlzbmRfYXNzZXJ0KHQgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAKLQlpbmZvID0ga2NhbGxvYygxLCBzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKKwlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpbmZvLT5jYXJkID0gdC0+Y2FyZCA/IHQtPmNhcmQtPm51bWJlciA6IC0xOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9LY29uZmlnIGIvc291bmQvZHJpdmVycy9LY29uZmlnCmluZGV4IDNiMmJlZTEuLmVmY2I0ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvS2NvbmZpZworKysgYi9zb3VuZC9kcml2ZXJzL0tjb25maWcKQEAgLTI5LDYgKzI5LDcgQEAKIAl0cmlzdGF0ZSAiRHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkIgogCWRlcGVuZHMgb24gU05ECiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHRoZSBkdW1teSBkcml2ZXIuICBUaGlzIGRyaXZlciBkb2VzCiAJICBub3RoaW5nLCBidXQgZW11bGF0ZXMgdmFyaW91cyBtaXhlciBjb250cm9scyBhbmQgUENNIGRldmljZXMuCkBAIC00NCw2ICs0NSw3IEBACiAJZGVwZW5kcyBvbiBTTkRfU0VRVUVOQ0VSCiAJc2VsZWN0IFNORF9USU1FUgogCXNlbGVjdCBTTkRfUkFXTUlESQorCXNlbGVjdCBTTkRfR0VORVJJQ19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIHZpcnR1YWwgTUlESSBkcml2ZXIuICBUaGlzIGRyaXZlcgogCSAgYWxsb3dzIHRvIGNvbm5lY3QgYXBwbGljYXRpb25zIHVzaW5nIHJhdyBNSURJIGRldmljZXMgdG8KQEAgLTU5LDYgKzYxLDcgQEAKIAlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfVElNRVIKIAlzZWxlY3QgU05EX1JBV01JREkKKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgVG8gdXNlIGEgTU9UVSBNaWRpVGltZVBpZWNlIEFWIG11bHRpcG9ydCBNSURJIGFkYXB0ZXIKIAkgIGNvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydCwgc2F5IFkgaGVyZSBhbmQgbWFrZSBzdXJlIHRoYXQKQEAgLTcyLDYgKzc1LDcgQEAKIAlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfVElNRVIKIAlzZWxlY3QgU05EX1JBV01JREkKKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgVG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNSURJIHNlcmlhbCBwb3J0IGludGVyZmFjZXMsIHNheSBZIGhlcmUKIAkgIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvYWxzYS9zZXJpYWwtdTE2NTUwLnR4dD4uCkBAIC04OCw2ICs5Miw3IEBACiAJdHJpc3RhdGUgIkdlbmVyaWMgTVBVLTQwMSBVQVJUIGRyaXZlciIKIAlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIE1JREkgcG9ydHMgY29tcGF0aWJsZSB3aXRoCiAJICB0aGUgUm9sYW5kIE1QVS00MDEgaW50ZXJmYWNlIGluIFVBUlQgbW9kZS4KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCBhNjE2NDBjLi42NGVmN2Y2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIAlzbmRfY2FyZF9kdW1teV9wY21fdCAqZHBjbTsKIAlpbnQgZXJyOwogCi0JZHBjbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpkcGNtKSwgR0ZQX0tFUk5FTCk7CisJZHBjbSA9IGt6YWxsb2Moc2l6ZW9mKCpkcGNtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaW5pdF90aW1lcigmZHBjbS0+dGltZXIpOwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJc25kX2NhcmRfZHVtbXlfcGNtX3QgKmRwY207CiAJaW50IGVycjsKIAotCWRwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZHBjbSksIEdGUF9LRVJORUwpOworCWRwY20gPSBremFsbG9jKHNpemVvZigqZHBjbSksIEdGUF9LRVJORUwpOwogCWlmIChkcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWluaXRfdGltZXIoJmRwY20tPnRpbWVyKTsKQEAgLTYwMCw2ICs2MDAsMTAgQEAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiRHVtbXkiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiRHVtbXkiKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiRHVtbXkgJWkiLCBkZXYgKyAxKTsKKworCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gX19ub2RldjsKKwogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpID09IDApIHsKIAkJc25kX2R1bW15X2NhcmRzW2Rldl0gPSBjYXJkOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKaW5kZXggY2IzNmVjYi4uNTRlMmZmOSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKQEAgLTc3LDIwICs3NywyNiBAQAogCQlzdHJjYXQoY2FyZC0+bG9uZ25hbWUsICJwb2xsZWQiKTsKIAl9CiAKLQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLAotCQkJCU1QVTQwMV9IV19NUFU0MDEsCi0JCQkJcG9ydFtkZXZdLCAwLAotCQkJCWlycVtkZXZdLCBpcnFbZGV2XSA+PSAwID8gU0FfSU5URVJSVVBUIDogMCwgTlVMTCkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsCisJCQkJICAgICAgIE1QVTQwMV9IV19NUFU0MDEsCisJCQkJICAgICAgIHBvcnRbZGV2XSwgMCwKKwkJCQkgICAgICAgaXJxW2Rldl0sIGlycVtkZXZdID49IDAgPyBTQV9JTlRFUlJVUFQgOiAwLCBOVUxMKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTVBVNDAxIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgcG9ydFtkZXZdKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gX2VycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKIAkqcmNhcmQgPSBjYXJkOwogCXJldHVybiAwOworCisgX2VycjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tcHU0MDFfcHJvYmUoaW50IGRldikKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCmluZGV4IDBmODNjNTIuLmZlM2Y5MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxX3VhcnQuYwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAJCSpycmF3bWlkaSA9IE5VTEw7CiAJaWYgKChlcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2FyZCwgIk1QVS00MDFVIiwgZGV2aWNlLCAxLCAxLCAmcm1pZGkpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JbXB1ID0ga2NhbGxvYygxLCBzaXplb2YoKm1wdSksIEdGUF9LRVJORUwpOworCW1wdSA9IGt6YWxsb2Moc2l6ZW9mKCptcHUpLCBHRlBfS0VSTkVMKTsKIAlpZiAobXB1ID09IE5VTEwpIHsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIHJtaWRpKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210cGF2LmMgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKaW5kZXggMTI4MGE1Ny4uM2EyNWM4OSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHBhdi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwpAQCAtNjg4LDcgKzY4OCw3IEBACiAKIHN0YXRpYyBtdHBhdl90ICpuZXdfbXRwYXYodm9pZCkKIHsKLQltdHBhdl90ICpuY3JkID0ga2NhbGxvYygxLCBzaXplb2YoKm5jcmQpLCBHRlBfS0VSTkVMKTsKKwltdHBhdl90ICpuY3JkID0ga3phbGxvYyhzaXplb2YoKm5jcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAobmNyZCAhPSBOVUxMKSB7CiAJCXNwaW5fbG9ja19pbml0KCZuY3JkLT5zcGlubG9jayk7CiAKQEAgLTc1Nyw2ICs3NTcsOSBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIF9fZXJyb3I7CiAKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NldF9nZW5lcmljX2RldihtdHBfY2FyZC0+Y2FyZCkpIDwgMCkKKwkJZ290byBfX2Vycm9yOworCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIobXRwX2NhcmQtPmNhcmQpOwkvLyBkb24ndCBzbmRfY2FyZF9yZWdpc3RlciB1bnRpbCBBRlRFUiBhbGwgY2FyZHMgcmVvdXJjZXMgZG9uZSEKIAogCS8vcHJpbnRrKCJzbmRfY2FyZF9yZWdpc3RlciByZXR1cm5lZCAlZFxuIiwgZXJyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX2xpYi5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKaW5kZXggYzMxM2U1Mi4uMWY4NGQ3OCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKQEAgLTM1NCw3ICszNTQsNyBAQAogCWludCBlcnI7CiAKIAkqcm9wbDMgPSBOVUxMOwotCW9wbDMgPSBrY2FsbG9jKDEsIHNpemVvZigqb3BsMyksIEdGUF9LRVJORUwpOworCW9wbDMgPSBremFsbG9jKHNpemVvZigqb3BsMyksIEdGUF9LRVJORUwpOwogCWlmIChvcGwzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCmluZGV4IDMzZGEzMzQuLjIxYTJiNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJfQogCiAJCXNpemUgPSBzaXplb2YoKnB1dCkgKyBzaXplb2YoZm1feGluc3RydW1lbnRfdCk7Ci0JCXB1dCA9IGtjYWxsb2MoMSwgc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXB1dCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChwdXQgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCQkvKiBidWlsZCBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X2xpYi5jIGIvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbGliLmMKaW5kZXggODI2MTQ2NC4uMzgwYzJjNyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbGliLmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWlmIChyb3BsNCkKIAkJKnJvcGw0ID0gTlVMTDsKIAotCW9wbDQgPSBrY2FsbG9jKDEsIHNpemVvZigqb3BsNCksIEdGUF9LRVJORUwpOworCW9wbDQgPSBremFsbG9jKHNpemVvZigqb3BsNCksIEdGUF9LRVJORUwpOwogCWlmICghb3BsNCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKaW5kZXggOTg2ZGYzNS4uNDE2MTcyZSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKKysrIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKQEAgLTc3OSw3ICs3NzksNyBAQAogCWludCBlcnI7CiAKIAotCWlmICgodWFydCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp1YXJ0KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKCh1YXJ0ID0ga3phbGxvYyhzaXplb2YoKnVhcnQpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdWFydC0+YWRhcHRvciA9IGFkYXB0b3I7CiAJdWFydC0+Y2FyZCA9IGNhcmQ7CkBAIC05MjgsMTUgKzkyOCwxMSBAQAogCQkJCQliYXNlW2Rldl0sCiAJCQkJCWFkYXB0b3JbZGV2XSwKIAkJCQkJZHJvcG9uZnVsbFtkZXZdLAotCQkJCQkmdWFydCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkJJnVhcnQpKSA8IDApCisJCWdvdG8gX2VycjsKIAotCWlmICgoZXJyID0gc25kX3VhcnQxNjU1MF9ybWlkaSh1YXJ0LCAwLCBvdXRzW2Rldl0sIGluc1tkZXZdLCAmdWFydC0+cm1pZGkpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfdWFydDE2NTUwX3JtaWRpKHVhcnQsIDAsIG91dHNbZGV2XSwgaW5zW2Rldl0sICZ1YXJ0LT5ybWlkaSkpIDwgMCkKKwkJZ290byBfZXJyOwogCiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQgc3BlZWQgJWQgZGl2ICVkIG91dHMgJWQgaW5zICVkIGFkYXB0b3IgJXMgZHJvcG9uZnVsbCAlZCIsCiAJCWNhcmQtPnNob3J0bmFtZSwKQEAgLTk0OSwxMiArOTQ1LDE4IEBACiAJCWFkYXB0b3JfbmFtZXNbdWFydC0+YWRhcHRvcl0sCiAJCXVhcnQtPmRyb3Bfb25fZnVsbCk7CiAKLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKIAlzbmRfc2VyaWFsX2NhcmRzW2Rldl0gPSBjYXJkOwogCXJldHVybiAwOworCisgX2VycjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9zZXJpYWxfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwppbmRleCA1OTM3NzExLi5hZjEyMTg1IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwpAQCAtMTE2LDYgKzExNiwxMCBAQAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJWaXJNSURJIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlZpck1JREkiKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiVmlydHVhbCBNSURJIENhcmQgJWkiLCBkZXYgKyAxKTsKKworCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gX19ub2RldjsKKwogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpID09IDApIHsKIAkJc25kX3Zpcm1pZGlfY2FyZHNbZGV2XSA9IGNhcmQ7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYwppbmRleCBjNmZhNWFmLi40Njk3YjFkIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYwpAQCAtNzgyLDcgKzc4Miw3IEBACiAKIAlzbmRfYXNzZXJ0KGNhcmQgJiYgaHcgJiYgb3BzLCByZXR1cm4gTlVMTCk7CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApICsgZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSArIGV4dHJhX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghIGNoaXApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidnhfY29yZTogbm8gbWVtb3J5XG4iKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jIGIvc291bmQvZHJpdmVycy92eC92eF9wY20uYwppbmRleCBkNGJlY2Y0Li5jMjMxMmQ5IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgcGlwZSByZWNvcmQgKi8KLQlwaXBlID0ga2NhbGxvYygxLCBzaXplb2YoKnBpcGUpLCBHRlBfS0VSTkVMKTsKKwlwaXBlID0ga3phbGxvYyhzaXplb2YoKnBpcGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBwaXBlKSB7CiAJCS8qIHJlbGVhc2UgdGhlIHBpcGUgKi8KIAkJdnhfaW5pdF9ybWgoJnJtaCwgQ01EX0ZSRUVfUElQRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvY3M4NDI3LmMgYi9zb3VuZC9pMmMvY3M4NDI3LmMKaW5kZXggYTNmZGE4NS4uYTIxZjdkNSAxMDA2NDQKLS0tIGEvc291bmQvaTJjL2NzODQyNy5jCisrKyBiL3NvdW5kL2kyYy9jczg0MjcuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAKIAlpZiAoKGVyciA9IHNuZF9pMmNfZGV2aWNlX2NyZWF0ZShidXMsICJDUzg0MjciLCBDUzg0MjdfQUREUiB8IChhZGRyICYgNyksICZkZXZpY2UpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JY2hpcCA9IGRldmljZS0+cHJpdmF0ZV9kYXRhID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0gZGV2aWNlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpIHsKIAkgICAgICAJc25kX2kyY19kZXZpY2VfZnJlZShkZXZpY2UpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9pMmMuYyBiL3NvdW5kL2kyYy9pMmMuYwppbmRleCBlOGZhN2UxLi5lNGU1MDViIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvaTJjLmMKKysrIGIvc291bmQvaTJjL2kyYy5jCkBAIC04MSw3ICs4MSw3IEBACiAJfTsKIAogCSpyaTJjID0gTlVMTDsKLQlidXMgPSBrY2FsbG9jKDEsIHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CisJYnVzID0ga3phbGxvYyhzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOwogCWlmIChidXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaW5pdF9NVVRFWCgmYnVzLT5sb2NrX211dGV4KTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAJKnJkZXZpY2UgPSBOVUxMOwogCXNuZF9hc3NlcnQoYnVzICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKLQlkZXZpY2UgPSBrY2FsbG9jKDEsIHNpemVvZigqZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJZGV2aWNlID0ga3phbGxvYyhzaXplb2YoKmRldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZGV2aWNlLT5hZGRyID0gYWRkcjsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMgYi9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jCmluZGV4IGUxMzEyMmYuLjEwM2E3ZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMKKysrIGIvc291bmQvaTJjL2wzL3VkYTEzNDEuYwpAQCAtMTcsNyArMTcsNyBAQAogICogMjAwMi0wNS0xMiAgIFRvbWFzIEthc3BhcmVrICBhbm90aGVyIGNvZGUgY2xlYW51cAogICovCiAKLS8qICRJZDogdWRhMTM0MS5jLHYgMS4xNSAyMDA1LzAxLzAzIDEyOjA1OjIwIHRpd2FpIEV4cCAkICovCisvKiAkSWQ6IHVkYTEzNDEuYyx2IDEuMTYgMjAwNS8wOS8wOSAxMzoyMjozNCB0aXdhaSBFeHAgJCAqLwogCiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02NzAsNyArNjcwLDcgQEAKIAogCXNuZF9hc3NlcnQoY2FyZCAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CiAKLQl1ZGExMzQxID0ga2NhbGxvYygxLCBzaXplb2YoKnVkYTEzNDEpLCBHRlBfS0VSTkVMKTsKKwl1ZGExMzQxID0ga3phbGxvYyhzaXplb2YoKnVkYTEzNDEpLCBHRlBfS0VSTkVMKTsKIAlpZiAodWRhMTM0MSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKICAgICAgICAgIApAQCAtNzA3LDcgKzcwNyw3IEBACiB7CiAJc3RydWN0IHVkYTEzNDEgKnVkYTsKIAotCXVkYSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp1ZGEpLCAwLCBHRlBfS0VSTkVMKTsKKwl1ZGEgPSBremFsbG9jKHNpemVvZigqdWRhKSwgMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1ZGEpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvb3RoZXIvYWs0MTE0LmMgYi9zb3VuZC9pMmMvb3RoZXIvYWs0MTE0LmMKaW5kZXggNWFkZGUzMC4uYWY1ZWFkYyAxMDA2NDQKLS0tIGEvc291bmQvaTJjL290aGVyL2FrNDExNC5jCisrKyBiL3NvdW5kL2kyYy9vdGhlci9hazQxMTQuYwpAQCAtOTIsNyArOTIsNyBAQAogCQkuZGV2X2ZyZWUgPSAgICAgc25kX2FrNDExNF9kZXZfZnJlZSwKIAl9OwogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL290aGVyL2FrNDExNy5jIGIvc291bmQvaTJjL290aGVyL2FrNDExNy5jCmluZGV4IDA0MTljNDMzLi5kNTFiNTFkIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvb3RoZXIvYWs0MTE3LmMKKysrIGIvc291bmQvaTJjL290aGVyL2FrNDExNy5jCkBAIC04Myw3ICs4Myw3IEBACiAJCS5kZXZfZnJlZSA9ICAgICBzbmRfYWs0MTE3X2Rldl9mcmVlLAogCX07CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvdGVhNjMzMHQuYyBiL3NvdW5kL2kyYy90ZWE2MzMwdC5jCmluZGV4IDJkYThkN2YuLmZkNjVkYTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy90ZWE2MzMwdC5jCisrKyBiL3NvdW5kL2kyYy90ZWE2MzMwdC5jCkBAIC0yODEsNyArMjgxLDcgQEAKIAl1OCBkZWZhdWx0X3RyZWJsZSwgZGVmYXVsdF9iYXNzOwogCXVuc2lnbmVkIGNoYXIgYnl0ZXNbN107CiAKLQl0ZWEgPSBrY2FsbG9jKDEsIHNpemVvZigqdGVhKSwgR0ZQX0tFUk5FTCk7CisJdGVhID0ga3phbGxvYyhzaXplb2YoKnRlYSksIEdGUF9LRVJORUwpOwogCWlmICh0ZWEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKChlcnIgPSBzbmRfaTJjX2RldmljZV9jcmVhdGUoYnVzLCAiVEVBNjMzMFQiLCBURUE2MzMwVF9BRERSLCAmZGV2aWNlKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvS2NvbmZpZyBiL3NvdW5kL2lzYS9LY29uZmlnCmluZGV4IDVjMzk0ODMuLjVkNmMzMDBhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvS2NvbmZpZworKysgYi9zb3VuZC9pc2EvS2NvbmZpZwpAQCAtNiwxMiArNiwxMiBAQAogY29uZmlnIFNORF9BRDE4NDhfTElCCiAgICAgICAgIHRyaXN0YXRlCiAgICAgICAgIHNlbGVjdCBTTkRfUENNCi0Jc2VsZWN0IFNORF9HRU5FUklDX1BNCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCiBjb25maWcgU05EX0NTNDIzMV9MSUIKICAgICAgICAgdHJpc3RhdGUKICAgICAgICAgc2VsZWN0IFNORF9QQ00KLQlzZWxlY3QgU05EX0dFTkVSSUNfUE0KKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAKIGNvbmZpZyBTTkRfQUQxODE2QQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBTb3VuZFBvcnQgQUQxODE2QSIKQEAgLTk3LDYgKzk3LDcgQEAKIAlzZWxlY3QgU05EX09QTDNfTElCCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFU1MgQXVkaW9Ecml2ZSBFUzY4OCBvcgogCSAgRVMxNjg4IGNoaXBzLgpAQCAtMTEwLDcgKzExMSw3IEBACiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1BDTQotCXNlbGVjdCBTTkRfR0VORVJJQ19QTQorCXNlbGVjdCBTTkRfR0VORVJJQ19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRVNTIEF1ZGlvRHJpdmUgRVMxOHh4IGNoaXBzLgogCkBAIC0xMjYsNiArMTI3LDcgQEAKIAlzZWxlY3QgU05EX1JBV01JREkKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBTTkRfR1VTX1NZTlRICisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBHcmF2aXMgVWx0cmFTb3VuZCBDbGFzc2ljCiAJICBzb3VuZGNhcmRzLgpAQCAtMTQwLDYgKzE0Miw3IEBACiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IFNORF9HVVNfU1lOVEgKKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEdyYXZpcyBVbHRyYVNvdW5kIEV4dHJlbWUKIAkgIHNvdW5kY2FyZHMuCkBAIC0xNTMsNiArMTU2LDcgQEAKIAlzZWxlY3QgU05EX1JBV01JREkKIAlzZWxlY3QgU05EX0NTNDIzMV9MSUIKIAlzZWxlY3QgU05EX0dVU19TWU5USAorCXNlbGVjdCBTTkRfR0VORVJJQ19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgR3JhdmlzIFVsdHJhU291bmQgTUFYCiAJICBzb3VuZGNhcmRzLgpAQCAtMTY2LDcgKzE3MCw3IEBACiAJc2VsZWN0IFNORF9SQVdNSURJCiAJc2VsZWN0IFNORF9DUzQyMzFfTElCCiAJc2VsZWN0IFNORF9HVVNfU1lOVEgKLQlzZWxlY3QgSVNBUE5QCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBTUQgSW50ZXJXYXZlIGJhc2VkCiAJICBzb3VuZGNhcmRzIChHcmF2aXMgVWx0cmFTb3VuZCBQbHVnICYgUGxheSwgU1RCIFNvdW5kUmFnZTMyLApAQCAtMTgxLDcgKzE4NSw3IEBACiAJc2VsZWN0IFNORF9SQVdNSURJCiAJc2VsZWN0IFNORF9DUzQyMzFfTElCCiAJc2VsZWN0IFNORF9HVVNfU1lOVEgKLQlzZWxlY3QgSVNBUE5QCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBTUQgSW50ZXJXYXZlIGJhc2VkCiAJICBzb3VuZGNhcmRzIHdpdGggYSBURUE2MzMwVCBiYXNzIGFuZCB0cmVibGUgcmVndWxhdG9yCkBAIC0yMjQsNiArMjI4LDcgQEAKIAlzZWxlY3QgU05EX09QTDNfTElCCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIE9wdGkKIAkgIDgyQzkzeCBjaGlwcy4KQEAgLTIzNyw2ICsyNDIsNyBAQAogCXNlbGVjdCBTTkRfT1BMM19MSUIKIAlzZWxlY3QgU05EX1JBV01JREkKIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfR0VORVJJQ19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ3JlYXRpdmUgU291bmQgQmxhc3RlciAxLjAvCiAJICAyLjAvUHJvICg4LWJpdCkgb3IgMTAwJSBjb21wYXRpYmxlIHNvdW5kY2FyZHMuCkBAIC0yNTAsNiArMjU2LDcgQEAKIAlzZWxlY3QgU05EX09QTDNfTElCCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBTb3VuZCBCbGFzdGVyIDE2IHNvdW5kY2FyZHMKIAkgIChpbmNsdWRpbmcgdGhlIFBsdWcgYW5kIFBsYXkgdmVyc2lvbikuCkBAIC0yNjMsNiArMjcwLDcgQEAKIAlzZWxlY3QgU05EX09QTDNfTElCCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBTb3VuZCBCbGFzdGVyIEFXRSBzb3VuZGNhcmRzCiAJICAoaW5jbHVkaW5nIHRoZSBQbHVnIGFuZCBQbGF5IHZlcnNpb24pLgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKaW5kZXggYWU4NjAzNi4uMjdhOWRjZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCkBAIC01OTEsNyArNTkxLDcgQEAKIAogCSpyY2hpcCA9IE5VTEw7CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAljaGlwLT5pcnEgPSAtMTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDhjMzk5MzQuLjNlYmNjNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtOTEsMzUgKzkxLDM2IEBACiAJCQkJICAgICBpcnFbZGV2XSwKIAkJCQkgICAgIGRtYTFbZGV2XSwKIAkJCQkgICAgIHRoaW5rcGFkW2Rldl0gPyBBRDE4NDhfSFdfVEhJTktQQUQgOiBBRDE4NDhfSFdfREVURUNULAotCQkJCSAgICAgJmNoaXApKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJCQkJICAgICAmY2hpcCkpIDwgMCkKKwkJZ290byBfZXJyOwogCi0JaWYgKChlcnIgPSBzbmRfYWQxODQ4X3BjbShjaGlwLCAwLCAmcGNtKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmICgoZXJyID0gc25kX2FkMTg0OF9taXhlcihjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2FkMTg0OF9wY20oY2hpcCwgMCwgJnBjbSkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfYWQxODQ4X21peGVyKGNoaXApKSA8IDApCisJCWdvdG8gX2VycjsKKwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBRDE4NDgiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUpOwogCiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsCiAJCXBjbS0+bmFtZSwgY2hpcC0+cG9ydCwgaXJxW2Rldl0sIGRtYTFbZGV2XSk7CiAKLQlpZiAodGhpbmtwYWRbZGV2XSkgeworCWlmICh0aGlua3BhZFtkZXZdKQogCQlzdHJjYXQoY2FyZC0+bG9uZ25hbWUsICIgW1RoaW5rcGFkXSIpOwotCX0KIAotCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NldF9nZW5lcmljX2RldihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKKwogCXNuZF9hZDE4NDhfY2FyZHNbZGV2XSA9IGNhcmQ7CiAJcmV0dXJuIDA7CisKKyBfZXJyOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2FkMTg0OF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OF9saWIuYyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4X2xpYi5jCmluZGV4IGJjNjQyZGMuLjMwMzg2MWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4X2xpYi5jCkBAIC04OTAsNyArODkwLDcgQEAKIAlpbnQgZXJyOwogCiAJKnJjaGlwID0gTlVMTDsKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NtaTgzMzAuYyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKaW5kZXggMWZjZThiOS4uNTI1MjIwNiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NtaTgzMzAuYworKysgYi9zb3VuZC9pc2EvY21pODMzMC5jCkBAIC00MzgsMzMgKzQzOCwzNyBAQAogLyoKICAqLwogCisjaWZkZWYgQ09ORklHX1BOUAorI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJaXNhcG5wW2Rldl0KKyNlbHNlCisjZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpCQkwCisjZW5kaWYKKworI2RlZmluZSBQRlgJImNtaTgzMzA6ICIKKwogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NtaTgzMzBfcHJvYmUoaW50IGRldiwKIAkJCQkgICAgICAgc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCiB7CiAJc25kX2NhcmRfdCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2NtaTgzMzAgKmFjYXJkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIGVycjsKIAotI2lmZGVmIENPTkZJR19QTlAKLQlpZiAoIWlzYXBucFtkZXZdKSB7Ci0jZW5kaWYKKwlpZiAoISBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KSkgewogCQlpZiAod3NzcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQkJc25kX3ByaW50aygic3BlY2lmeSB3c3Nwb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJzcGVjaWZ5IHdzc3BvcnRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHNicG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQkJc25kX3ByaW50aygic3BlY2lmeSBzYnBvcnRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInNwZWNpZnkgc2Jwb3J0XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0jaWZkZWYgQ09ORklHX1BOUAogCX0KLSNlbmRpZgorCiAJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKIAkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSk7CiAJaWYgKGNhcmQgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJjb3VsZCBub3QgZ2V0IGEgbmV3IGNhcmRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiY291bGQgbm90IGdldCBhIG5ldyBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWFjYXJkID0gKHN0cnVjdCBzbmRfY21pODMzMCAqKWNhcmQtPnByaXZhdGVfZGF0YTsKQEAgLTQ3Myw5ICs0NzcsOCBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAoaXNhcG5wW2Rldl0pIHsKIAkJaWYgKChlcnIgPSBzbmRfY21pODMzMF9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpIDwgMCkgewotCQkJc25kX3ByaW50aygiUG5QIGRldGVjdGlvbiBmYWlsZWRcbiIpOwotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXJldHVybiBlcnI7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiUG5QIGRldGVjdGlvbiBmYWlsZWRcbiIpOworCQkJZ290byBfZXJyOwogCQl9CiAJCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwogCX0KQEAgLTQ4NywxNCArNDkwLDEzIEBACiAJCQkJICAgICB3c3NkbWFbZGV2XSwKIAkJCQkgICAgIEFEMTg0OF9IV19ERVRFQ1QsCiAJCQkJICAgICAmYWNhcmQtPndzcykpIDwgMCkgewotCQlzbmRfcHJpbnRrKCIoQUQxODQ4KSBkZXZpY2UgYnVzeT8/XG4iKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihBRDE4NDgpIGRldmljZSBidXN5Pz9cbiIpOworCQlnb3RvIF9lcnI7CiAJfQogCWlmIChhY2FyZC0+d3NzLT5oYXJkd2FyZSAhPSBBRDE4NDhfSFdfQ01JODMzMCkgewotCQlzbmRfcHJpbnRrKCIoQUQxODQ4KSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQUQxODQ4KSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBfZXJyOwogCX0KIAogCWlmICgoZXJyID0gc25kX3NiZHNwX2NyZWF0ZShjYXJkLCBzYnBvcnRbZGV2XSwKQEAgLTUwMywzMiArNTA1LDI2IEBACiAJCQkJICAgIHNiZG1hOFtkZXZdLAogCQkJCSAgICBzYmRtYTE2W2Rldl0sCiAJCQkJICAgIFNCX0hXX0FVVE8sICZhY2FyZC0+c2IpKSA8IDApIHsKLQkJc25kX3ByaW50aygiKFNCMTYpIGRldmljZSBidXN5Pz9cbiIpOwotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKFNCMTYpIGRldmljZSBidXN5Pz9cbiIpOworCQlnb3RvIF9lcnI7CiAJfQogCWlmIChhY2FyZC0+c2ItPmhhcmR3YXJlICE9IFNCX0hXXzE2KSB7Ci0JCXNuZF9wcmludGsoIihTQjE2KSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoU0IxNikgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CisJCWdvdG8gX2VycjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWNhcmQtPndzcy0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfYWQxODQ4X291dChhY2FyZC0+d3NzLCBBRDE4NDhfTUlTQ19JTkZPLCAweDQwKTsgLyogc3dpdGNoIG9uIE1PREUyICovCiAJZm9yIChpID0gQ01JODMzMF9STVVYM0Q7IGkgPD0gQ01JODMzMF9DRElOR0FJTjsgaSsrKQogCQlzbmRfYWQxODQ4X291dChhY2FyZC0+d3NzLCBpLCBzbmRfY21pODMzMF9pbWFnZVtpIC0gQ01JODMzMF9STVVYM0RdKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY2FyZC0+d3NzLT5yZWdfbG9jaywgZmxhZ3MpOwogCiAJaWYgKChlcnIgPSBzbmRfY21pODMzMF9taXhlcihjYXJkLCBhY2FyZCkpIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gY3JlYXRlIG1peGVyc1xuIik7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gY3JlYXRlIG1peGVyc1xuIik7CisJCWdvdG8gX2VycjsKIAl9CiAKIAlpZiAoKGVyciA9IHNuZF9jbWk4MzMwX3BjbShjYXJkLCBhY2FyZCkpIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOwotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZ290byBfZXJyOwogCX0KIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDTUk4MzMwL0MzRCIpOwpAQCAtNTM5LDE2ICs1MzUsMjEgQEAKIAkJd3NzaXJxW2Rldl0sCiAJCXdzc2RtYVtkZXZdKTsKIAotCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NldF9nZW5lcmljX2RldihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKIAogCWlmIChwY2FyZCkKIAkJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIGNhcmQpOwogCWVsc2UKIAkJc25kX2NtaTgzMzBfbGVnYWN5W2Rldl0gPSBjYXJkOwogCXJldHVybiAwOworCisgX2VycjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKICNpZmRlZiBDT05GSUdfUE5QCkBAIC01OTQsMTAgKzU5NSw4IEBACiAJZm9yIChkZXYgPSAwOyBkZXYgPCBTTkRSVl9DQVJEUzsgZGV2KyspIHsKIAkJaWYgKCFlbmFibGVbZGV2XSkKIAkJCWNvbnRpbnVlOwotI2lmZGVmIENPTkZJR19QTlAKLQkJaWYgKGlzYXBucFtkZXZdKQorCQlpZiAoaXNfaXNhcG5wX3NlbGVjdGVkKGRldikpCiAJCQljb250aW51ZTsKLSNlbmRpZgogCQlpZiAoc25kX2NtaTgzMzBfcHJvYmUoZGV2LCBOVUxMLCBOVUxMKSA+PSAwKQogCQkJY2FyZHMrKzsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwppbmRleCA3NjQwODM3Li45YmU1NDE2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKQEAgLTc2LDE1ICs3NiwxNSBAQAogCWludCBlcnI7CiAKIAlpZiAocG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IHBvcnRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGlycVtkZXZdID09IFNORFJWX0FVVE9fSVJRKSB7Ci0JCXNuZF9wcmludGsoInNwZWNpZnkgaXJxXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic3BlY2lmeSBpcnFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGRtYTFbZGV2XSA9PSBTTkRSVl9BVVRPX0RNQSkgewotCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IGRtYTFcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IGRtYTFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CkBAIC05NiwxNSArOTYsMTEgQEAKIAkJCQkgICAgIGRtYTFbZGV2XSwKIAkJCQkgICAgIGRtYTJbZGV2XSwKIAkJCQkgICAgIENTNDIzMV9IV19ERVRFQ1QsCi0JCQkJICAgICAwLCAmY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkgICAgIDAsICZjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfcGNtKGNoaXAsIDAsICZwY20pKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfY3M0MjMxX3BjbShjaGlwLCAwLCAmcGNtKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQ1M0MjMxIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lKTsKQEAgLTExMywxNCArMTA5LDEwIEBACiAJaWYgKGRtYTJbZGV2XSA+PSAwKQogCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lICsgc3RybGVuKGNhcmQtPmxvbmduYW1lKSwgIiYlZCIsIGRtYTJbZGV2XSk7CiAKLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfbWl4ZXIoY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfdGltZXIoY2hpcCwgMCwgTlVMTCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoKGVyciA9IHNuZF9jczQyMzFfbWl4ZXIoY2hpcCkpIDwgMCkKKwkJZ290byBfZXJyOworCWlmICgoZXJyID0gc25kX2NzNDIzMV90aW1lcihjaGlwLCAwLCBOVUxMKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJaWYgKG1wdV9pcnFbZGV2XSA9PSBTTkRSVl9BVVRPX0lSUSkKQEAgLTEzMCwxNCArMTIyLDIwIEBACiAJCQkJCW1wdV9pcnFbZGV2XSwKIAkJCQkJbXB1X2lycVtkZXZdID49IDAgPyBTQV9JTlRFUlJVUFQgOiAwLAogCQkJCQlOVUxMKSA8IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImNzNDIzMTogTVBVNDAxIG5vdCBkZXRlY3RlZFxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjczQyMzE6IE1QVTQwMSBub3QgZGV0ZWN0ZWRcbiIpOwogCX0KLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NldF9nZW5lcmljX2RldihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKIAlzbmRfY3M0MjMxX2NhcmRzW2Rldl0gPSBjYXJkOwogCXJldHVybiAwOworCisgX2VycjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9jczQyMzFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzFfbGliLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMV9saWIuYwppbmRleCAzMTk5OTQxLi4zMjMxODI1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMV9saWIuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMV9saWIuYwpAQCAtMTQ4MCw3ICsxNDgwLDcgQEAKIAljczQyMzFfdCAqY2hpcDsKIAogCSpyY2hpcCA9IE5VTEw7Ci0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY2hpcC0+aGFyZHdhcmUgPSBoYXJkd2FyZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCmluZGV4IDM5ZjRlZmYuLmQyODMxNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwpAQCAtMzg3LDYgKzM4NywxMiBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19QTlAKKyNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCWlzYXBucFtkZXZdCisjZWxzZQorI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJMAorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzeF9wcm9iZShpbnQgZGV2LCBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKIHsKQEAgLTM5NywyMCArNDAzLDE2IEBACiAJb3BsM190ICpvcGwzOwogCWludCBlcnI7CiAKLSNpZmRlZiBDT05GSUdfUE5QCi0JaWYgKCFpc2FwbnBbZGV2XSkgewotI2VuZGlmCisJaWYgKCEgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikpIHsKIAkJaWYgKHBvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJCXNuZF9wcmludGsoInNwZWNpZnkgcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IHBvcnRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGNwb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IGNwb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInNwZWNpZnkgY3BvcnRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLSNpZmRlZiBDT05GSUdfUE5QCiAJfQotI2VuZGlmCiAJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKIAkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2NzNDIzNikpOwogCWlmIChjYXJkID09IE5VTEwpCkBAIC00MjEsOCArNDIzLDcgQEAKIAlpZiAoaXNhcG5wW2Rldl0pIHsKIAkJaWYgKChlcnIgPSBzbmRfY2FyZF9jczQyMzZfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKTwwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlzYXBucCBkZXRlY3Rpb24gZmFpbGVkIGFuZCBwcm9iaW5nIGZvciAiIElERU5UICIgaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJcmV0dXJuIC1FTlhJTzsKKwkJCWdvdG8gX2VycjsKIAkJfQogCQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAl9CkBAIC00MzAsOCArNDMxLDggQEAKIAlpZiAoc2JfcG9ydFtkZXZdID4gMCAmJiBzYl9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKQogCQlpZiAoKGFjYXJkLT5yZXNfc2JfcG9ydCA9IHJlcXVlc3RfcmVnaW9uKHNiX3BvcnRbZGV2XSwgMTYsIElERU5UICIgU0IiKSkgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIElERU5UICI6IHVuYWJsZSB0byByZWdpc3RlciBTQiBwb3J0IGF0IDB4JWx4XG4iLCBzYl9wb3J0W2Rldl0pOwotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBfZXJyOwogCQl9CiAKICNpZmRlZiBDUzQyMzIKQEAgLTQ0MywxOCArNDQ0LDE0IEBACiAJCQkJICAgICBkbWEyW2Rldl0sCiAJCQkJICAgICBDUzQyMzFfSFdfREVURUNULAogCQkJCSAgICAgMCwKLQkJCQkgICAgICZjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmICgoZXJyID0gc25kX2NzNDIzMV9wY20oY2hpcCwgMCwgJnBjbSkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfbWl4ZXIoY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkgICAgICZjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jczQyMzFfcGNtKGNoaXAsIDAsICZwY20pKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2NzNDIzMV9taXhlcihjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKICNlbHNlIC8qIENTNDIzNiAqLwogCWlmICgoZXJyID0gc25kX2NzNDIzNl9jcmVhdGUoY2FyZCwKQEAgLTQ2NSwxOCArNDYyLDE0IEBACiAJCQkJICAgICBkbWEyW2Rldl0sCiAJCQkJICAgICBDUzQyMzFfSFdfREVURUNULAogCQkJCSAgICAgMCwKLQkJCQkgICAgICZjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmICgoZXJyID0gc25kX2NzNDIzNl9wY20oY2hpcCwgMCwgJnBjbSkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9jczQyMzZfbWl4ZXIoY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkgICAgICZjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2NzNDIzNl9taXhlcihjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAjZW5kaWYKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBwY20tPm5hbWUpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSk7CkBAIC00ODgsMjEgKzQ4MSwxNyBAQAogCWlmIChkbWEyW2Rldl0gPj0gMCkKIAkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSArIHN0cmxlbihjYXJkLT5sb25nbmFtZSksICImJWQiLCBkbWEyW2Rldl0pOwogCi0JaWYgKChlcnIgPSBzbmRfY3M0MjMxX3RpbWVyKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfY3M0MjMxX3RpbWVyKGNoaXAsIDAsIE5VTEwpKSA8IDApCisJCWdvdG8gX2VycjsKIAogCWlmIChmbV9wb3J0W2Rldl0gPiAwICYmIGZtX3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLAogCQkJCSAgICBmbV9wb3J0W2Rldl0sIGZtX3BvcnRbZGV2XSArIDIsCiAJCQkJICAgIE9QTDNfSFdfT1BMM19DUywgMCwgJm9wbDMpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIElERU5UICI6IE9QTDMgbm90IGRldGVjdGVkXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgSURFTlQgIjogT1BMMyBub3QgZGV0ZWN0ZWRcbiIpOwogCQl9IGVsc2UgewotCQkJaWYgKChlcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KKwkJCWlmICgoZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpKSA8IDApCisJCQkJZ290byBfZXJyOwogCQl9CiAJfQogCkBAIC01MTMsMTcgKzUwMiwyMyBAQAogCQkJCQltcHVfcG9ydFtkZXZdLCAwLAogCQkJCQltcHVfaXJxW2Rldl0sCiAJCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gU0FfSU5URVJSVVBUIDogMCwgTlVMTCkgPCAwKQotCQkJcHJpbnRrKEtFUk5fRVJSIElERU5UICI6IE1QVTQwMSBub3QgZGV0ZWN0ZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBJREVOVCAiOiBNUFU0MDEgbm90IGRldGVjdGVkXG4iKTsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAJaWYgKHBjYXJkKQogCQlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CiAJZWxzZQogCQlzbmRfY3M0MjM2X2xlZ2FjeVtkZXZdID0gY2FyZDsKIAlyZXR1cm4gMDsKKworIF9lcnI6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOwogfQogCiAjaWZkZWYgQ09ORklHX1BOUApAQCAtNTY5LDEwICs1NjQsOCBAQAogCWZvciAoZGV2ID0gMDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7CiAJCWlmICghZW5hYmxlW2Rldl0pCiAJCQljb250aW51ZTsKLSNpZmRlZiBDT05GSUdfUE5QCi0JCWlmIChpc2FwbnBbZGV2XSkKKwkJaWYgKGlzX2lzYXBucF9zZWxlY3RlZChkZXYpKQogCQkJY29udGludWU7Ci0jZW5kaWYKIAkJaWYgKHNuZF9jYXJkX2NzNDIzeF9wcm9iZShkZXYsIE5VTEwsIE5VTEwpID49IDApCiAJCQljYXJkcysrOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCmluZGV4IGM1ZWFlYzAuLjI2YTdkMzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtNzAsNiArNzAsNyBAQAogCiBzdGF0aWMgc25kX2NhcmRfdCAqc25kX2F1ZGlvZHJpdmVfY2FyZHNbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QVFI7CiAKKyNkZWZpbmUgUEZYCSJlczE2ODg6ICIKIAogc3RhdGljIGludCBfX2luaXQgc25kX2F1ZGlvZHJpdmVfcHJvYmUoaW50IGRldikKIHsKQEAgLTg5LDQ3ICs5MCw0MSBAQAogCXhpcnEgPSBpcnFbZGV2XTsKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewogCQlpZiAoKHhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcykpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgSVJRXG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gX2VycjsKIAkJfQogCX0KIAl4bXB1X2lycSA9IG1wdV9pcnFbZGV2XTsKIAl4ZG1hID0gZG1hOFtkZXZdOwogCWlmICh4ZG1hID09IFNORFJWX0FVVE9fRE1BKSB7CiAJCWlmICgoeGRtYSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQVxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUFcbiIpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBfZXJyOwogCQl9CiAJfQogCiAJaWYgKChlcnIgPSBzbmRfZXMxNjg4X2NyZWF0ZShjYXJkLCBwb3J0W2Rldl0sIG1wdV9wb3J0W2Rldl0sCiAJCQkJICAgICB4aXJxLCB4bXB1X2lycSwgeGRtYSwKLQkJCQkgICAgIEVTMTY4OF9IV19BVVRPLCAmY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9lczE2ODhfcGNtKGNoaXAsIDAsICZwY20pKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JaWYgKChlcnIgPSBzbmRfZXMxNjg4X21peGVyKGNoaXApKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJCQkJICAgICBFUzE2ODhfSFdfQVVUTywgJmNoaXApKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2VzMTY4OF9wY20oY2hpcCwgMCwgJnBjbSkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfZXMxNjg4X21peGVyKGNoaXApKSA8IDApCisJCWdvdG8gX2VycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJFUzE2ODgiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVpLCBkbWEgJWkiLCBwY20tPm5hbWUsIGNoaXAtPnBvcnQsIHhpcnEsIHhkbWEpOwogCiAJaWYgKChzbmRfb3BsM19jcmVhdGUoY2FyZCwgY2hpcC0+cG9ydCwgY2hpcC0+cG9ydCArIDIsIE9QTDNfSFdfT1BMMywgMCwgJm9wbDMpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJlczE2ODg6IG9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBjaGlwLT5wb3J0KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIm9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBjaGlwLT5wb3J0KTsKIAl9IGVsc2UgewotCQlpZiAoKGVyciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoKGVyciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKQorCQkJZ290byBfZXJyOwogCX0KIAogCWlmICh4bXB1X2lycSA+PSAwICYmIHhtcHVfaXJxICE9IFNORFJWX0FVVE9fSVJRICYmIGNoaXAtPm1wdV9wb3J0ID4gMCkgewpAQCAtMTM3LDE4ICsxMzIsMjIgQEAKIAkJCQkJICAgICAgIGNoaXAtPm1wdV9wb3J0LCAwLAogCQkJCQkgICAgICAgeG1wdV9pcnEsCiAJCQkJCSAgICAgICBTQV9JTlRFUlJVUFQsCi0JCQkJCSAgICAgICBOVUxMKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQkJCQkgICAgICAgTlVMTCkpIDwgMCkKKwkJCWdvdG8gX2VycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKIAlzbmRfYXVkaW9kcml2ZV9jYXJkc1tkZXZdID0gY2FyZDsKIAlyZXR1cm4gMDsKIAorIF9lcnI6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfYXVkaW9kcml2ZV9sZWdhY3lfYXV0b19wcm9iZSh1bnNpZ25lZCBsb25nIHhwb3J0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYwppbmRleCAxN2Y2OGQwLi5hYWM4OTg3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYworKysgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJaW50IGVycjsKIAogCSpyY2hpcCA9IE5VTEw7Ci0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY2hpcC0+aXJxID0gLTE7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxOHh4LmMgYi9zb3VuZC9pc2EvZXMxOHh4LmMKaW5kZXggMWQ4MzJiMi4uZDBlYTE5ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTh4eC5jCisrKyBiL3NvdW5kL2lzYS9lczE4eHguYwpAQCAtMTY4Niw3ICsxNjg2LDcgQEAKIAlpbnQgZXJyOwogCiAJKnJjaGlwID0gTlVMTDsKLSAgICAgICAgY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CkBAIC0xOTg4LDYgKzE5ODgsMTIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKKyNpZmRlZiBDT05GSUdfUE5QCisjZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpCQlpc2FwbnBbZGV2XQorI2Vsc2UKKyNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCTAKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYXVkaW9kcml2ZV9wcm9iZShpbnQgZGV2LCBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJCSAgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQogewpAQCAtMTk5Niw3ICsyMDAyLDYgQEAKIAlpbnQgeGlycSwgeGRtYTEsIHhkbWEyOwogCXNuZF9jYXJkX3QgKmNhcmQ7CiAJc3RydWN0IHNuZF9hdWRpb2RyaXZlICphY2FyZDsKLQlzbmRfcmF3bWlkaV90ICpybWlkaSA9IE5VTEw7CiAJZXMxOHh4X3QgKmNoaXA7CiAJb3BsM190ICpvcGwzOwogCWludCBlcnI7CkBAIC0yMDE5LDI1ICsyMDI0LDI1IEBACiAJeGlycSA9IGlycVtkZXZdOwogCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CiAJCWlmICgoeGlycSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lycShwb3NzaWJsZV9pcnFzKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBfZXJyOwogCQl9CiAJfQogCXhkbWExID0gZG1hMVtkZXZdOwogICAgICAgICBpZiAoeGRtYTEgPT0gU05EUlZfQVVUT19ETUEpIHsKICAgICAgICAgICAgICAgICBpZiAoKHhkbWExID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYXMpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUExXG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gX2VycjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAl4ZG1hMiA9IGRtYTJbZGV2XTsKICAgICAgICAgaWYgKHhkbWEyID09IFNORFJWX0FVVE9fRE1BKSB7CiAgICAgICAgICAgICAgICAgaWYgKCh4ZG1hMiA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIF9lcnI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTIwNDYsMTAgKzIwNTEsOCBAQAogCQkJCQkgbXB1X3BvcnRbZGV2XSwKIAkJCQkJIGZtX3BvcnRbZGV2XSwKIAkJCQkJIHhpcnEsIHhkbWExLCB4ZG1hMiwKLQkJCQkJICZjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCQkJCQkgJmNoaXApKSA8IDApCisJCWdvdG8gX2VycjsKIAogCXNwcmludGYoY2FyZC0+ZHJpdmVyLCAiRVMleCIsIGNoaXAtPnZlcnNpb24pOwogCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAiRVNTIEF1ZGlvRHJpdmUgRVMleCIsIGNoaXAtPnZlcnNpb24pOwpAQCAtMjA2NCwyMyArMjA2NywxOCBAQAogCQkJY2hpcC0+cG9ydCwKIAkJCXhpcnEsIHhkbWExKTsKIAotCWlmICgoZXJyID0gc25kX2VzMTh4eF9wY20oY2hpcCwgMCwgTlVMTCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9lczE4eHhfbWl4ZXIoY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoKGVyciA9IHNuZF9lczE4eHhfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2VzMTh4eF9taXhlcihjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKIAlpZiAoZm1fcG9ydFtkZXZdID4gMCAmJiBmbV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7CiAJCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwgY2hpcC0+Zm1fcG9ydCwgY2hpcC0+Zm1fcG9ydCArIDIsIE9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIm9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBjaGlwLT5mbV9wb3J0KTsKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAib3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGNoaXAtPmZtX3BvcnQpOwogCQl9IGVsc2UgewotCQkJaWYgKChlcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KKwkJCWlmICgoZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpKSA8IDApCisJCQkJZ290byBfZXJyOwogCQl9CiAJfQogCkBAIC0yMDg4LDI1ICsyMDg2LDI4IEBACiAJCWlmICgoZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfRVMxOFhYLAogCQkJCQkgICAgICAgY2hpcC0+bXB1X3BvcnQsIDAsCiAJCQkJCSAgICAgICB4aXJxLCAwLAotCQkJCQkgICAgICAgJnJtaWRpKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQljaGlwLT5ybWlkaSA9IHJtaWRpOworCQkJCQkgICAgICAgJmNoaXAtPnJtaWRpKSkgPCAwKQorCQkJZ290byBfZXJyOwogCX0KIAorCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKKwogCS8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KIAlzbmRfY2FyZF9zZXRfaXNhX3BtX2NhbGxiYWNrKGNhcmQsIHNuZF9lczE4eHhfc3VzcGVuZCwgc25kX2VzMTh4eF9yZXN1bWUsIGNoaXApOwogCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCiAJaWYgKHBjYXJkKQogCQlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CiAJZWxzZQogCQlzbmRfYXVkaW9kcml2ZV9sZWdhY3lbZGV2XSA9IGNhcmQ7CiAJcmV0dXJuIDA7CisKKyBfZXJyOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2F1ZGlvZHJpdmVfcHJvYmVfbGVnYWN5X3BvcnQodW5zaWduZWQgbG9uZyB4cG9ydCkKQEAgLTIxMTcsMTAgKzIxMTgsOCBAQAogCWZvciAoIDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7CiAJCWlmICghZW5hYmxlW2Rldl0gfHwgcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkKIAkJCWNvbnRpbnVlOwotI2lmZGVmIENPTkZJR19QTlAKLQkJaWYgKGlzYXBucFtkZXZdKQorCQlpZiAoaXNfaXNhcG5wX3NlbGVjdGVkKGRldikpCiAJCQljb250aW51ZTsKLSNlbmRpZgogCQlwb3J0W2Rldl0gPSB4cG9ydDsKIAkJcmVzID0gc25kX2F1ZGlvZHJpdmVfcHJvYmUoZGV2LCBOVUxMLCBOVUxMKTsKIAkJaWYgKHJlcyA8IDApCkBAIC0yMTc3LDEwICsyMTc2LDggQEAKIAlmb3IgKGRldiA9IDA7IGRldiA8IFNORFJWX0NBUkRTOyBkZXYrKykgewogCQlpZiAoIWVuYWJsZVtkZXZdIHx8IHBvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpCiAJCQljb250aW51ZTsKLSNpZmRlZiBDT05GSUdfUE5QCi0JCWlmIChpc2FwbnBbZGV2XSkKKwkJaWYgKGlzX2lzYXBucF9zZWxlY3RlZChkZXYpKQogCQkJY29udGludWU7Ci0jZW5kaWYKIAkJaWYgKHNuZF9hdWRpb2RyaXZlX3Byb2JlKGRldiwgTlVMTCwgTlVMTCkgPj0gMCkKIAkJCWNhcmRzKys7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfbWFpbi5jIGIvc291bmQvaXNhL2d1cy9ndXNfbWFpbi5jCmluZGV4IGE2MzZkOWMuLjhmMjg3MmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX21haW4uYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19tYWluLmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCX07CiAKIAkqcmd1cyA9IE5VTEw7Ci0JZ3VzID0ga2NhbGxvYygxLCBzaXplb2YoKmd1cyksIEdGUF9LRVJORUwpOworCWd1cyA9IGt6YWxsb2Moc2l6ZW9mKCpndXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZ3VzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWd1cy0+Z2YxLmlycSA9IC0xOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfbWVtX3Byb2MuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX21lbV9wcm9jLmMKaW5kZXggODg2NzYzZi4uN2Y5NmFjMiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfbWVtX3Byb2MuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19tZW1fcHJvYy5jCkBAIC05OCw3ICs5OCw3IEBACiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDQ7IGlkeCsrKSB7CiAJCWlmIChndXMtPmdmMS5tZW1fYWxsb2MuYmFua3NfOFtpZHhdLnNpemUgPiAwKSB7Ci0JCQlwcml2ID0ga2NhbGxvYygxLCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwkJCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCQkJaWYgKHByaXYgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCXByaXYtPmd1cyA9IGd1czsKQEAgLTExNSw3ICsxMTUsNyBAQAogCX0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDQ7IGlkeCsrKSB7CiAJCWlmIChndXMtPmdmMS5yb21fcHJlc2VudCAmICgxIDw8IGlkeCkpIHsKLQkJCXByaXYgPSBrY2FsbG9jKDEsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCQkJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocHJpdiA9PSBOVUxMKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJcHJpdi0+cm9tID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jIGIvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKaW5kZXggYjc1MDY2YS4uYmViMDEzNiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKQEAgLTY2Niw3ICs2NjYsNyBAQAogCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCBlcnI7CiAKLQlwY21wID0ga2NhbGxvYygxLCBzaXplb2YoKnBjbXApLCBHRlBfS0VSTkVMKTsKKwlwY21wID0ga3phbGxvYyhzaXplb2YoKnBjbXApLCBHRlBfS0VSTkVMKTsKIAlpZiAocGNtcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlwY21wLT5ndXMgPSBndXM7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCmluZGV4IGE5OWZhNTAuLjM5Y2VmMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCkBAIC03Miw0MCArNzIsMjQgQEAKIAogc3RhdGljIHNuZF9jYXJkX3QgKnNuZF9ndXNjbGFzc2ljX2NhcmRzW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUFRSOwogCisjZGVmaW5lIFBGWAkiZ3VzY2xhc3NpYzogIgogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfZ3VzY2xhc3NpY19kZXRlY3Qoc25kX2d1c19jYXJkX3QgKiBndXMpCiB7Ci0Jc25kX2dmMV9pX3dyaXRlOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCwgMCk7CS8qIHJlc2V0IEdGMSAqLwotI2lmZGVmIENPTkZJR19TTkRfREVCVUdfREVURUNUCi0JewotCQl1bnNpZ25lZCBjaGFyIGQ7CisJdW5zaWduZWQgY2hhciBkOwogCi0JCWlmICgoKGQgPSBzbmRfZ2YxX2lfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQpKSAmIDB4MDcpICE9IDApIHsKLQkJCXNuZF9wcmludGsoIlsweCVseF0gY2hlY2sgMSBmYWlsZWQgLSAweCV4XG4iLCBndXMtPmdmMS5wb3J0LCBkKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotI2Vsc2UKLQlpZiAoKHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkgJiAweDA3KSAhPSAwKQorCXNuZF9nZjFfaV93cml0ZTgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQsIDApOwkvKiByZXNldCBHRjEgKi8KKwlpZiAoKChkID0gc25kX2dmMV9pX2xvb2s4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VUKSkgJiAweDA3KSAhPSAwKSB7CisJCXNuZF9wcmludGRkKCJbMHglbHhdIGNoZWNrIDEgZmFpbGVkIC0gMHgleFxuIiwgZ3VzLT5nZjEucG9ydCwgZCk7CiAJCXJldHVybiAtRU5PREVWOwotI2VuZGlmCisJfQogCXVkZWxheSgxNjApOwogCXNuZF9nZjFfaV93cml0ZTgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQsIDEpOwkvKiByZWxlYXNlIHJlc2V0ICovCiAJdWRlbGF5KDE2MCk7Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVR19ERVRFQ1QKLQl7Ci0JCXVuc2lnbmVkIGNoYXIgZDsKLQotCQlpZiAoKChkID0gc25kX2dmMV9pX2xvb2s4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VUKSkgJiAweDA3KSAhPSAxKSB7Ci0JCQlzbmRfcHJpbnRrKCJbMHglbHhdIGNoZWNrIDIgZmFpbGVkIC0gMHgleFxuIiwgZ3VzLT5nZjEucG9ydCwgZCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLSNlbHNlCi0JaWYgKChzbmRfZ2YxX2lfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQpICYgMHgwNykgIT0gMSkKKwlpZiAoKChkID0gc25kX2dmMV9pX2xvb2s4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VUKSkgJiAweDA3KSAhPSAxKSB7CisJCXNuZF9wcmludGRkKCJbMHglbHhdIGNoZWNrIDIgZmFpbGVkIC0gMHgleFxuIiwgZ3VzLT5nZjEucG9ydCwgZCk7CiAJCXJldHVybiAtRU5PREVWOwotI2VuZGlmCi0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNywyNSArMTIxLDI1IEBACiAJeGlycSA9IGlycVtkZXZdOwogCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CiAJCWlmICgoeGlycSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lycShwb3NzaWJsZV9pcnFzKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBfZXJyOwogCQl9CiAJfQogCXhkbWExID0gZG1hMVtkZXZdOwogCWlmICh4ZG1hMSA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQlpZiAoKHhkbWExID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYXMpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMVxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUExXG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gX2VycjsKIAkJfQogCX0KIAl4ZG1hMiA9IGRtYTJbZGV2XTsKIAlpZiAoeGRtYTIgPT0gU05EUlZfQVVUT19ETUEpIHsKIAkJaWYgKCh4ZG1hMiA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIF9lcnI7CiAJCX0KIAl9CiAKQEAgLTE2NCw0NyArMTQ4LDQ4IEBACiAJCQkJICBwb3J0W2Rldl0sCiAJCQkJICB4aXJxLCB4ZG1hMSwgeGRtYTIsCiAJCQkgICAgICAgICAgMCwgY2hhbm5lbHNbZGV2XSwgcGNtX2NoYW5uZWxzW2Rldl0sCi0JCQkgICAgICAgICAgMCwgJmd1cykpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9ndXNjbGFzc2ljX2RldGVjdChndXMpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJCQkgICAgICAgICAgMCwgJmd1cykpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfZ3VzY2xhc3NpY19kZXRlY3QoZ3VzKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKIAlzbmRfZ3VzY2xhc3NpY19pbml0KGRldiwgZ3VzKTsKLQlpZiAoKGVyciA9IHNuZF9ndXNfaW5pdGlhbGl6ZShndXMpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfZ3VzX2luaXRpYWxpemUoZ3VzKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKIAlpZiAoZ3VzLT5tYXhfZmxhZyB8fCBndXMtPmVzc19mbGFnKSB7Ci0JCXNuZF9wcmludGRkKCJHVVMgQ2xhc3NpYyBvciBBQ0Ugc291bmRjYXJkIHdhcyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGd1cy0+Z2YxLnBvcnQpOwotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkdVUyBDbGFzc2ljIG9yIEFDRSBzb3VuZGNhcmQgd2FzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZ3VzLT5nZjEucG9ydCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gX2VycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfZ2YxX25ld19taXhlcihndXMpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JaWYgKChlcnIgPSBzbmRfZ2YxX3BjbV9uZXcoZ3VzLCAwLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCisJaWYgKChlcnIgPSBzbmRfZ2YxX25ld19taXhlcihndXMpKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2dmMV9wY21fbmV3KGd1cywgMCwgMCwgTlVMTCkpIDwgMCkKKwkJZ290byBfZXJyOworCiAJaWYgKCFndXMtPmFjZV9mbGFnKSB7Ci0JCWlmICgoZXJyID0gc25kX2dmMV9yYXdtaWRpX25ldyhndXMsIDAsIE5VTEwpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWlmICgoZXJyID0gc25kX2dmMV9yYXdtaWRpX25ldyhndXMsIDAsIE5VTEwpKSA8IDApCisJCQlnb3RvIF9lcnI7CiAJfQogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUgKyBzdHJsZW4oY2FyZC0+bG9uZ25hbWUpLCAiIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsIGd1cy0+Z2YxLnBvcnQsIHhpcnEsIHhkbWExKTsKIAlpZiAoZG1hMiA+PSAwKQogCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lICsgc3RybGVuKGNhcmQtPmxvbmduYW1lKSwgIiYlZCIsIHhkbWEyKTsKLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NldF9nZW5lcmljX2RldihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKKwogCXNuZF9ndXNjbGFzc2ljX2NhcmRzW2Rldl0gPSBjYXJkOwogCXJldHVybiAwOworCisgX2VycjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF9ndXNjbGFzc2ljX2xlZ2FjeV9hdXRvX3Byb2JlKHVuc2lnbmVkIGxvbmcgeHBvcnQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCmluZGV4IGJjNmZlY2IuLmQyZTdjYjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCkBAIC04Nyw2ICs4Nyw3IEBACiAKIHN0YXRpYyBzbmRfY2FyZF90ICpzbmRfZ3VzZXh0cmVtZV9jYXJkc1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BUUjsKIAorI2RlZmluZSBQRlgJImd1c2V4dHJlbWU6ICIKIAogc3RhdGljIGludCBfX2luaXQgc25kX2d1c2V4dHJlbWVfZGV0ZWN0KGludCBkZXYsCiAJCQkJCXNuZF9jYXJkX3QgKiBjYXJkLApAQCAtOTQsNiArOTUsNyBAQAogCQkJCQllczE2ODhfdCAqZXMxNjg4KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBkOwogCiAJLyoKIAkgKiBUaGlzIGlzIG1haW4gc3R1ZmYgLSBlbmFibGUgYWNjZXNzIHRvIEdGMSBjaGlwLi4uCkBAIC0xMjMsMzYgKzEyNSwxNyBAQAogCXVkZWxheSgxMDApOwogCiAJc25kX2dmMV9pX3dyaXRlOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCwgMCk7CS8qIHJlc2V0IEdGMSAqLwotI2lmZGVmIENPTkZJR19TTkRfREVCVUdfREVURUNUCi0JewotCQl1bnNpZ25lZCBjaGFyIGQ7Ci0KLQkJaWYgKCgoZCA9IHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkpICYgMHgwNykgIT0gMCkgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBjaGVjayAxIGZhaWxlZCAtIDB4JXhcbiIsIGd1cy0+Z2YxLnBvcnQsIGQpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0jZWxzZQotCWlmICgoc25kX2dmMV9pX2xvb2s4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VUKSAmIDB4MDcpICE9IDApCisJaWYgKCgoZCA9IHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkpICYgMHgwNykgIT0gMCkgeworCQlzbmRfcHJpbnRkZCgiWzB4JWx4XSBjaGVjayAxIGZhaWxlZCAtIDB4JXhcbiIsIGd1cy0+Z2YxLnBvcnQsIGQpOwogCQlyZXR1cm4gLUVJTzsKLSNlbmRpZgorCX0KIAl1ZGVsYXkoMTYwKTsKIAlzbmRfZ2YxX2lfd3JpdGU4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VULCAxKTsJLyogcmVsZWFzZSByZXNldCAqLwogCXVkZWxheSgxNjApOwotI2lmZGVmIENPTkZJR19TTkRfREVCVUdfREVURUNUCi0JewotCQl1bnNpZ25lZCBjaGFyIGQ7Ci0KLQkJaWYgKCgoZCA9IHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkpICYgMHgwNykgIT0gMSkgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBjaGVjayAyIGZhaWxlZCAtIDB4JXhcbiIsIGd1cy0+Z2YxLnBvcnQsIGQpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0jZWxzZQotCWlmICgoc25kX2dmMV9pX2xvb2s4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VUKSAmIDB4MDcpICE9IDEpCisJaWYgKCgoZCA9IHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkpICYgMHgwNykgIT0gMSkgeworCQlzbmRfcHJpbnRkZCgiWzB4JWx4XSBjaGVjayAyIGZhaWxlZCAtIDB4JXhcbiIsIGd1cy0+Z2YxLnBvcnQsIGQpOwogCQlyZXR1cm4gLUVJTzsKLSNlbmRpZgotCisJfQogCXJldHVybiAwOwogfQogCkBAIC0yMDUsNyArMTg4LDcgQEAKIAl4Z2YxX2lycSA9IGdmMV9pcnFbZGV2XTsKIAlpZiAoeGdmMV9pcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKIAkJaWYgKCh4Z2YxX2lycSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lycShwb3NzaWJsZV9nZjFfaXJxcykpIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUSBmb3IgR0YxXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgSVJRIGZvciBHRjFcbiIpOwogCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTIxMyw3ICsxOTYsNyBAQAogCXhlc3NfaXJxID0gaXJxW2Rldl07CiAJaWYgKHhlc3NfaXJxID09IFNORFJWX0FVVE9fSVJRKSB7CiAJCWlmICgoeGVzc19pcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfZXNzX2lycXMpKSA8IDApIHsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlEgZm9yIEVTMTY4OFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUSBmb3IgRVMxNjg4XG4iKTsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yMjYsNyArMjA5LDcgQEAKIAl4Z2YxX2RtYSA9IGRtYTFbZGV2XTsKIAlpZiAoeGdmMV9kbWEgPT0gU05EUlZfQVVUT19ETUEpIHsKIAkJaWYgKCh4Z2YxX2RtYSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9nZjFfZG1hcykpIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQSBmb3IgR0YxXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BIGZvciBHRjFcbiIpOwogCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTIzNCw3ICsyMTcsNyBAQAogCXhlc3NfZG1hID0gZG1hOFtkZXZdOwogCWlmICh4ZXNzX2RtYSA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQlpZiAoKHhlc3NfZG1hID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2Vzc19kbWFzKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BIGZvciBFUzE2ODhcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEgZm9yIEVTMTY4OFxuIik7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjY0LDcgKzI0Nyw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFndXMtPmVzc19mbGFnKSB7Ci0JCXNuZF9wcmludGRkKCJHVVMgRXh0cmVtZSBzb3VuZGNhcmQgd2FzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZ3VzLT5nZjEucG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJHVVMgRXh0cmVtZSBzb3VuZGNhcmQgd2FzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZ3VzLT5nZjEucG9ydCk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTI4Nyw3ICsyNzAsNyBAQAogCiAJaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBlczE2ODgtPnBvcnQsIGVzMTY4OC0+cG9ydCArIDIsCiAJCQkgICAgT1BMM19IV19PUEwzLCAwLCAmb3BsMykgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ3VzZXh0cmVtZTogb3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGVzMTY4OC0+cG9ydCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImd1c2V4dHJlbWU6IG9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBlczE2ODgtPnBvcnQpOwogCX0gZWxzZSB7CiAJCWlmICgoZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDIsIE5VTEwpKSA8IDApCiAJCQlnb3RvIG91dDsKQEAgLTMwMyw2ICsyODYsMTAgQEAKIAogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJHcmF2aXMgVWx0cmFTb3VuZCBFeHRyZW1lIGF0IDB4JWx4LCBpcnEgJWkmJWksIGRtYSAlaSYlaSIsCiAJCWVzMTY4OC0+cG9ydCwgeGdmMV9pcnEsIHhlc3NfaXJxLCB4Z2YxX2RtYSwgeGVzc19kbWEpOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBvdXQ7CisKIAlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwppbmRleCA0MDBmZjM0Li4wYmI0NGI1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKQEAgLTgyLDM5ICs4MiwyNSBAQAogCiBzdGF0aWMgc25kX2NhcmRfdCAqc25kX2d1c21heF9jYXJkc1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BUUjsKIAorI2RlZmluZSBQRlgJImd1c21heDogIgogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfZ3VzbWF4X2RldGVjdChzbmRfZ3VzX2NhcmRfdCAqIGd1cykKIHsKLQlzbmRfZ2YxX2lfd3JpdGU4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VULCAwKTsJLyogcmVzZXQgR0YxICovCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVR19ERVRFQ1QKLQl7Ci0JCXVuc2lnbmVkIGNoYXIgZDsKKwl1bnNpZ25lZCBjaGFyIGQ7CiAKLQkJaWYgKCgoZCA9IHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkpICYgMHgwNykgIT0gMCkgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBjaGVjayAxIGZhaWxlZCAtIDB4JXhcbiIsIGd1cy0+Z2YxLnBvcnQsIGQpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0jZWxzZQotCWlmICgoc25kX2dmMV9pX2xvb2s4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VUKSAmIDB4MDcpICE9IDApCisJc25kX2dmMV9pX3dyaXRlOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCwgMCk7CS8qIHJlc2V0IEdGMSAqLworCWlmICgoKGQgPSBzbmRfZ2YxX2lfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQpKSAmIDB4MDcpICE9IDApIHsKKwkJc25kX3ByaW50ZGQoIlsweCVseF0gY2hlY2sgMSBmYWlsZWQgLSAweCV4XG4iLCBndXMtPmdmMS5wb3J0LCBkKTsKIAkJcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKKwl9CiAJdWRlbGF5KDE2MCk7CiAJc25kX2dmMV9pX3dyaXRlOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCwgMSk7CS8qIHJlbGVhc2UgcmVzZXQgKi8KIAl1ZGVsYXkoMTYwKTsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHX0RFVEVDVAotCXsKLQkJdW5zaWduZWQgY2hhciBkOwotCi0JCWlmICgoKGQgPSBzbmRfZ2YxX2lfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQpKSAmIDB4MDcpICE9IDEpIHsKLQkJCXNuZF9wcmludGsoIlsweCVseF0gY2hlY2sgMiBmYWlsZWQgLSAweCV4XG4iLCBndXMtPmdmMS5wb3J0LCBkKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotI2Vsc2UKLQlpZiAoKHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkgJiAweDA3KSAhPSAxKQorCWlmICgoKGQgPSBzbmRfZ2YxX2lfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQpKSAmIDB4MDcpICE9IDEpIHsKKwkJc25kX3ByaW50ZGQoIlsweCVseF0gY2hlY2sgMiBmYWlsZWQgLSAweCV4XG4iLCBndXMtPmdmMS5wb3J0LCBkKTsKIAkJcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM5LDI1ICsyMjUsMjUgQEAKIAl4aXJxID0gaXJxW2Rldl07CiAJaWYgKHhpcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKIAkJaWYgKCh4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgSVJRXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIF9lcnI7CiAJCX0KIAl9CiAJeGRtYTEgPSBkbWExW2Rldl07CiAJaWYgKHhkbWExID09IFNORFJWX0FVVE9fRE1BKSB7CiAJCWlmICgoeGRtYTEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hcykpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUExXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTFcbiIpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBfZXJyOwogCQl9CiAJfQogCXhkbWEyID0gZG1hMltkZXZdOwogCWlmICh4ZG1hMiA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQlpZiAoKHhkbWEyID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYXMpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gX2VycjsKIAkJfQogCX0KIApAQCAtMjY2LDMxICsyNTIsMjggQEAKIAkJCQkgIC14aXJxLCB4ZG1hMSwgeGRtYTIsCiAJCQkJICAwLCBjaGFubmVsc1tkZXZdLAogCQkJCSAgcGNtX2NoYW5uZWxzW2Rldl0sCi0JCQkJICAwLCAmZ3VzKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmICgoZXJyID0gc25kX2d1c21heF9kZXRlY3QoZ3VzKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCQkJCSAgMCwgJmd1cykpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfZ3VzbWF4X2RldGVjdChndXMpKSA8IDApCisJCWdvdG8gX2VycjsKKwogCW1heGNhcmQtPmd1c19zdGF0dXNfcmVnID0gZ3VzLT5nZjEucmVnX2lycXN0YXQ7CiAJbWF4Y2FyZC0+cGNtX3N0YXR1c19yZWcgPSBndXMtPmdmMS5wb3J0ICsgMHgxMGMgKyAyOwogCXNuZF9ndXNtYXhfaW5pdChkZXYsIGNhcmQsIGd1cyk7Ci0JaWYgKChlcnIgPSBzbmRfZ3VzX2luaXRpYWxpemUoZ3VzKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2d1c19pbml0aWFsaXplKGd1cykpIDwgMCkKKwkJZ290byBfZXJyOworCiAJaWYgKCFndXMtPm1heF9mbGFnKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiR1VTIE1BWCBzb3VuZGNhcmQgd2FzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZ3VzLT5nZjEucG9ydCk7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiR1VTIE1BWCBzb3VuZGNhcmQgd2FzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZ3VzLT5nZjEucG9ydCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gX2VycjsKIAl9CiAKIAlpZiAocmVxdWVzdF9pcnEoeGlycSwgc25kX2d1c21heF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgIkdVUyBNQVgiLCAodm9pZCAqKW1heGNhcmQpKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ3VzbWF4OiB1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHhpcnEpOwotCQlyZXR1cm4gLUVCVVNZOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCB4aXJxKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIF9lcnI7CiAJfQogCW1heGNhcmQtPmlycSA9IHhpcnE7CiAJCkBAIC0zMDEsNTAgKzI4NCw0NiBAQAogCQkJCSAgICAgQ1M0MjMxX0hXU0hBUkVfSVJRIHwKIAkJCQkgICAgIENTNDIzMV9IV1NIQVJFX0RNQTEgfAogCQkJCSAgICAgQ1M0MjMxX0hXU0hBUkVfRE1BMiwKLQkJCQkgICAgICZjczQyMzEpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JaWYgKChlcnIgPSBzbmRfY3M0MjMxX3BjbShjczQyMzEsIDAsIE5VTEwpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JaWYgKChlcnIgPSBzbmRfY3M0MjMxX21peGVyKGNzNDIzMSkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfdGltZXIoY3M0MjMxLCAyLCBOVUxMKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmIChwY21fY2hhbm5lbHNbZGV2XSA+IDApIHsKLQkJaWYgKChlcnIgPSBzbmRfZ2YxX3BjbV9uZXcoZ3VzLCAxLCAxLCBOVUxMKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQlpZiAoKGVyciA9IHNuZF9ndXNtYXhfbWl4ZXIoY3M0MjMxKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCQkJCSAgICAgJmNzNDIzMSkpIDwgMCkKKwkJZ290byBfZXJyOwogCi0JaWYgKChlcnIgPSBzbmRfZ2YxX3Jhd21pZGlfbmV3KGd1cywgMCwgTlVMTCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gc25kX2NzNDIzMV9wY20oY3M0MjMxLCAwLCBOVUxMKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jczQyMzFfbWl4ZXIoY3M0MjMxKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jczQyMzFfdGltZXIoY3M0MjMxLCAyLCBOVUxMKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAocGNtX2NoYW5uZWxzW2Rldl0gPiAwKSB7CisJCWlmICgoZXJyID0gc25kX2dmMV9wY21fbmV3KGd1cywgMSwgMSwgTlVMTCkpIDwgMCkKKwkJCWdvdG8gX2VycjsKIAl9CisJaWYgKChlcnIgPSBzbmRfZ3VzbWF4X21peGVyKGNzNDIzMSkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfZ2YxX3Jhd21pZGlfbmV3KGd1cywgMCwgTlVMTCkpIDwgMCkKKwkJZ290byBfZXJyOwogCiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSArIHN0cmxlbihjYXJkLT5sb25nbmFtZSksICIgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwgZ3VzLT5nZjEucG9ydCwgeGlycSwgeGRtYTEpOwogCWlmICh4ZG1hMiA+PSAwKQogCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lICsgc3RybGVuKGNhcmQtPmxvbmduYW1lKSwgIiYlaSIsIHhkbWEyKTsKLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NldF9nZW5lcmljX2RldihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKIAkJCiAJbWF4Y2FyZC0+Z3VzID0gZ3VzOwogCW1heGNhcmQtPmNzNDIzMSA9IGNzNDIzMTsKIAlzbmRfZ3VzbWF4X2NhcmRzW2Rldl0gPSBjYXJkOwogCXJldHVybiAwOworCisgX2VycjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF9ndXNtYXhfbGVnYWN5X2F1dG9fcHJvYmUodW5zaWduZWQgbG9uZyB4cG9ydCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCmluZGV4IDQ2ZTg2N2QuLjM1OGNiYTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKKysrIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwpAQCAtNzMsNiArNzMsMTIgQEAKIHN0YXRpYyBpbnQgcGNtX2NoYW5uZWxzW1NORFJWX0NBUkRTXSA9IHtbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMn07CiBzdGF0aWMgaW50IGVmZmVjdFtTTkRSVl9DQVJEU10gPSB7WzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDB9OwogCisjaWZkZWYgU05EUlZfU1RCCisjZGVmaW5lIFBGWCAiaW50ZXJ3YXZlLXN0YjogIgorI2Vsc2UKKyNkZWZpbmUgUEZYICJpbnRlcndhdmU6ICIKKyNlbmRpZgorCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIEludGVyV2F2ZSBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKQEAgLTI0OSwzOCArMjU1LDIwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIHJldjEsIHJldjI7CisJaW50IGQ7CiAKIAlzbmRfZ2YxX2lfd3JpdGU4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VULCAwKTsJLyogcmVzZXQgR0YxICovCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVR19ERVRFQ1QKLQl7Ci0JCWludCBkOwotCi0JCWlmICgoKGQgPSBzbmRfZ2YxX2lfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQpKSAmIDB4MDcpICE9IDApIHsKLQkJCXNuZF9wcmludGsoIlsweCVseF0gY2hlY2sgMSBmYWlsZWQgLSAweCV4XG4iLCBndXMtPmdmMS5wb3J0LCBkKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotI2Vsc2UKLQlpZiAoKHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkgJiAweDA3KSAhPSAwKQorCWlmICgoKGQgPSBzbmRfZ2YxX2lfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfUkVTRVQpKSAmIDB4MDcpICE9IDApIHsKKwkJc25kX3ByaW50ZGQoIlsweCVseF0gY2hlY2sgMSBmYWlsZWQgLSAweCV4XG4iLCBndXMtPmdmMS5wb3J0LCBkKTsKIAkJcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKKwl9CiAJdWRlbGF5KDE2MCk7CiAJc25kX2dmMV9pX3dyaXRlOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCwgMSk7CS8qIHJlbGVhc2UgcmVzZXQgKi8KIAl1ZGVsYXkoMTYwKTsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHX0RFVEVDVAotCXsKLQkJaW50IGQ7Ci0KLQkJaWYgKCgoZCA9IHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkpICYgMHgwNykgIT0gMSkgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBjaGVjayAyIGZhaWxlZCAtIDB4JXhcbiIsIGd1cy0+Z2YxLnBvcnQsIGQpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0jZWxzZQotCWlmICgoc25kX2dmMV9pX2xvb2s4KGd1cywgU05EUlZfR0YxX0dCX1JFU0VUKSAmIDB4MDcpICE9IDEpCisJaWYgKCgoZCA9IHNuZF9nZjFfaV9sb29rOChndXMsIFNORFJWX0dGMV9HQl9SRVNFVCkpICYgMHgwNykgIT0gMSkgeworCQlzbmRfcHJpbnRkZCgiWzB4JWx4XSBjaGVjayAyIGZhaWxlZCAtIDB4JXhcbiIsIGd1cy0+Z2YxLnBvcnQsIGQpOwogCQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotCisJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPnJlZ19sb2NrLCBmbGFncyk7CiAJcmV2MSA9IHNuZF9nZjFfbG9vazgoZ3VzLCBTTkRSVl9HRjFfR0JfVkVSU0lPTl9OVU1CRVIpOwogCXNuZF9nZjFfd3JpdGU4KGd1cywgU05EUlZfR0YxX0dCX1ZFUlNJT05fTlVNQkVSLCB+cmV2MSk7CkBAIC02ODYsMzUgKzY3NCwzMyBAQAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9pbnRlcndhdmVfZnJlZTsKICNpZmRlZiBDT05GSUdfUE5QCiAJaWYgKGlzYXBucFtkZXZdKSB7Ci0JCWlmIChzbmRfaW50ZXJ3YXZlX3BucChkZXYsIGl3Y2FyZCwgcGNhcmQsIHBpZCkpIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQlpZiAoKGVyciA9IHNuZF9pbnRlcndhdmVfcG5wKGRldiwgaXdjYXJkLCBwY2FyZCwgcGlkKSkgPCAwKQorCQkJZ290byBfZXJyOwogCQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAl9CiAjZW5kaWYKIAl4aXJxID0gaXJxW2Rldl07CiAJaWYgKHhpcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKIAkJaWYgKCh4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgSVJRXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIF9lcnI7CiAJCX0KIAl9CiAJeGRtYTEgPSBkbWExW2Rldl07CiAJaWYgKHhkbWExID09IFNORFJWX0FVVE9fRE1BKSB7CiAJCWlmICgoeGRtYTEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hcykpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUExXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTFcbiIpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBfZXJyOwogCQl9CiAJfQogCXhkbWEyID0gZG1hMltkZXZdOwogCWlmICh4ZG1hMiA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQlpZiAoKHhkbWEyID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYXMpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gX2VycjsKIAkJfQogCX0KIApAQCAtNzIyLDMyICs3MDgsMjggQEAKIAkJCQkgIHBvcnRbZGV2XSwKIAkJCQkgIC14aXJxLCB4ZG1hMSwgeGRtYTIsCiAJCQkJICAwLCAzMiwKLQkJCQkgIHBjbV9jaGFubmVsc1tkZXZdLCBlZmZlY3RbZGV2XSwgJmd1cykpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkgIHBjbV9jaGFubmVsc1tkZXZdLCBlZmZlY3RbZGV2XSwgJmd1cykpIDwgMCkKKwkJZ290byBfZXJyOworCiAJaWYgKChlcnIgPSBzbmRfaW50ZXJ3YXZlX2RldGVjdChpd2NhcmQsIGd1cywgZGV2CiAjaWZkZWYgU05EUlZfU1RCCiAgICAgICAgICAgICAsICZpMmNfYnVzCiAjZW5kaWYKLQkgICAgKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCSAgICApKSA8IDApCisJCWdvdG8gX2VycjsKKwogCWl3Y2FyZC0+Z3VzX3N0YXR1c19yZWcgPSBndXMtPmdmMS5yZWdfaXJxc3RhdDsKIAlpd2NhcmQtPnBjbV9zdGF0dXNfcmVnID0gZ3VzLT5nZjEucG9ydCArIDB4MTBjICsgMjsKIAogCXNuZF9pbnRlcndhdmVfaW5pdChkZXYsIGd1cyk7CiAJc25kX2ludGVyd2F2ZV9kZXRlY3RfbWVtb3J5KGd1cyk7Ci0JaWYgKChlcnIgPSBzbmRfZ3VzX2luaXRpYWxpemUoZ3VzKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2d1c19pbml0aWFsaXplKGd1cykpIDwgMCkKKwkJZ290byBfZXJyOwogCiAJaWYgKHJlcXVlc3RfaXJxKHhpcnEsIHNuZF9pbnRlcndhdmVfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJJbnRlcldhdmUiLCAodm9pZCAqKWl3Y2FyZCkpIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJc25kX3ByaW50aygidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCB4aXJxKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgeGlycSk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBfZXJyOwogCX0KIAlpd2NhcmQtPmlycSA9IHhpcnE7CiAKQEAgLTc1OCwzNCArNzQwLDI4IEBACiAJCQkJICAgICBDUzQyMzFfSFdTSEFSRV9JUlEgfAogCQkJCSAgICAgQ1M0MjMxX0hXU0hBUkVfRE1BMSB8CiAJCQkJICAgICBDUzQyMzFfSFdTSEFSRV9ETUEyLAotCQkJCSAgICAgJmNzNDIzMSkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfcGNtKGNzNDIzMSwgMCwgJnBjbSkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkgICAgICZjczQyMzEpKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2NzNDIzMV9wY20oY3M0MjMxLCAwLCAmcGNtKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKIAlzcHJpbnRmKHBjbS0+bmFtZSArIHN0cmxlbihwY20tPm5hbWUpLCAiIHJldiAlYyIsIGd1cy0+cmV2aXNpb24gKyAnQScpOwogCXN0cmNhdChwY20tPm5hbWUsICIgKGNvZGVjKSIpOwotCWlmICgoZXJyID0gc25kX2NzNDIzMV90aW1lcihjczQyMzEsIDIsIE5VTEwpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JaWYgKChlcnIgPSBzbmRfY3M0MjMxX21peGVyKGNzNDIzMSkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKworCWlmICgoZXJyID0gc25kX2NzNDIzMV90aW1lcihjczQyMzEsIDIsIE5VTEwpKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2NzNDIzMV9taXhlcihjczQyMzEpKSA8IDApCisJCWdvdG8gX2VycjsKKwogCWlmIChwY21fY2hhbm5lbHNbZGV2XSA+IDApIHsKLQkJaWYgKChlcnIgPSBzbmRfZ2YxX3BjbV9uZXcoZ3VzLCAxLCAxLCBOVUxMKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoKGVyciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDEsIDEsIE5VTEwpKSA8IDApCisJCQlnb3RvIF9lcnI7CiAJfQotCWlmICgoZXJyID0gc25kX2ludGVyd2F2ZV9taXhlcihjczQyMzEpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfaW50ZXJ3YXZlX21peGVyKGNzNDIzMSkpIDwgMCkKKwkJZ290byBfZXJyOworCiAjaWZkZWYgU05EUlZfU1RCCiAJewogCQlzbmRfY3RsX2VsZW1faWRfdCBpZDEsIGlkMjsKQEAgLTc5NSwyOCArNzcxLDIwIEBACiAJCXN0cmNweShpZDEubmFtZSwgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKTsKIAkJc3RyY3B5KGlkMi5uYW1lLCBpZDEubmFtZSk7CiAJCWlkMi5pbmRleCA9IDE7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9yZW5hbWVfaWQoY2FyZCwgJmlkMSwgJmlkMikpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKChlcnIgPSBzbmRfY3RsX3JlbmFtZV9pZChjYXJkLCAmaWQxLCAmaWQyKSkgPCAwKQorCQkJZ290byBfZXJyOwogCQlzdHJjcHkoaWQxLm5hbWUsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIik7CiAJCXN0cmNweShpZDIubmFtZSwgaWQxLm5hbWUpOwotCQlpZiAoKGVyciA9IHNuZF9jdGxfcmVuYW1lX2lkKGNhcmQsICZpZDEsICZpZDIpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWlmICgoZXJyID0gc25kX3RlYTYzMzB0X3VwZGF0ZV9taXhlcihjYXJkLCBpMmNfYnVzLCAwLCAxKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoKGVyciA9IHNuZF9jdGxfcmVuYW1lX2lkKGNhcmQsICZpZDEsICZpZDIpKSA8IDApCisJCQlnb3RvIF9lcnI7CisJCWlmICgoZXJyID0gc25kX3RlYTYzMzB0X3VwZGF0ZV9taXhlcihjYXJkLCBpMmNfYnVzLCAwLCAxKSkgPCAwKQorCQkJZ290byBfZXJyOwogCX0KICNlbmRpZgogCiAJZ3VzLT51YXJ0X2VuYWJsZSA9IG1pZGlbZGV2XTsKLQlpZiAoKGVyciA9IHNuZF9nZjFfcmF3bWlkaV9uZXcoZ3VzLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2dmMV9yYXdtaWRpX25ldyhndXMsIDAsIE5VTEwpKSA8IDApCisJCWdvdG8gX2VycjsKIAogI2lmbmRlZiBTTkRSVl9TVEIKIAlzdHIgPSAiQU1EIEludGVyV2F2ZSI7CkBAIC04MzUsMTAgKzgwMywxMSBAQAogCWlmICh4ZG1hMiA+PSAwKQogCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lICsgc3RybGVuKGNhcmQtPmxvbmduYW1lKSwgIiYlZCIsIHhkbWEyKTsKIAotCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NldF9nZW5lcmljX2RldihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKIAkKIAlpd2NhcmQtPmNzNDIzMSA9IGNzNDIzMTsKIAlpd2NhcmQtPmd1cyA9IGd1czsKQEAgLTg0Nyw2ICs4MTYsMTAgQEAKIAllbHNlCiAJCXNuZF9pbnRlcndhdmVfbGVnYWN5W2RldisrXSA9IGNhcmQ7CiAJcmV0dXJuIDA7CisKKyBfZXJyOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2ludGVyd2F2ZV9wcm9iZV9sZWdhY3lfcG9ydCh1bnNpZ25lZCBsb25nIHhwb3J0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wbDNzYTIuYyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKaW5kZXggNzViZDZlYy4uZTJkMmJhYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wbDNzYTIuYworKysgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCkBAIC0xNDMsNiArMTQzLDggQEAKIAogc3RhdGljIHNuZF9jYXJkX3QgKnNuZF9vcGwzc2EyX2xlZ2FjeVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BUUjsKIAorI2RlZmluZSBQRlgJIm9wbDNzYTI6ICIKKwogI2lmZGVmIENPTkZJR19QTlAKIAogc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNuZF9vcGwzc2EyX3BucGJpb3NpZHNbXSA9IHsKQEAgLTIzMSw3ICsyMzMsNyBAQAogCWNhcmQgPSBjaGlwLT5jYXJkOwogCXBvcnQgPSBjaGlwLT5wb3J0OwogCWlmICgoY2hpcC0+cmVzX3BvcnQgPSByZXF1ZXN0X3JlZ2lvbihwb3J0LCAyLCAiT1BMMy1TQSBjb250cm9sIikpID09IE5VTEwpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAib3BsM3NhMjogY2FuJ3QgZ3JhYiBwb3J0IDB4JWx4XG4iLCBwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IGdyYWIgcG9ydCAweCVseFxuIiwgcG9ydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCS8vIHNuZF9wcmludGsoIlJFRyAwQSA9IDB4JXhcbiIsIHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgMHgwYSkpOwpAQCAtNjY4LDYgKzY3MCwxMiBAQAogCXJldHVybiBzbmRfb3BsM3NhMl9mcmVlKGNoaXApOwogfQogCisjaWZkZWYgQ09ORklHX1BOUAorI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJaXNhcG5wW2Rldl0KKyNlbHNlCisjZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpCQkwCisjZW5kaWYKKwogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wbDNzYTJfcHJvYmUoaW50IGRldiwKIAkJCQkgICAgICAgc3RydWN0IHBucF9kZXYgKnBkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKQEAgLTY4MywzNCArNjkxLDMxIEBACiAJfTsKIAlpbnQgZXJyOwogCi0jaWZkZWYgQ09ORklHX1BOUAotCWlmICghaXNhcG5wW2Rldl0pIHsKLSNlbmRpZgorCWlmICghIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpKSB7CiAJCWlmIChwb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IHBvcnRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInNwZWNpZnkgcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAod3NzX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJCXNuZF9wcmludGsoInNwZWNpZnkgd3NzX3BvcnRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInNwZWNpZnkgd3NzX3BvcnRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGZtX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJCXNuZF9wcmludGsoInNwZWNpZnkgZm1fcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAic3BlY2lmeSBmbV9wb3J0XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChtaWRpX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJCXNuZF9wcmludGsoInNwZWNpZnkgbWlkaV9wb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJzcGVjaWZ5IG1pZGlfcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotI2lmZGVmIENPTkZJR19QTlAKIAl9Ci0jZW5kaWYKKwogCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwogCWlmIChjYXJkID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJPUEwzU0EyIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIllhbWFoYSBPUEwzLVNBMiIpOwotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBfX2Vycm9yOwpAQCAtNzQyLDcgKzc0Nyw3IEBACiAJaWYgKChlcnIgPSBzbmRfb3BsM3NhMl9kZXRlY3QoY2hpcCkpIDwgMCkKIAkJZ290byBfX2Vycm9yOwogCWlmIChyZXF1ZXN0X2lycSh4aXJxLCBzbmRfb3BsM3NhMl9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgIk9QTDMtU0EyIiwgKHZvaWQgKiljaGlwKSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJvcGwzc2EyOiBjYW4ndCBncmFiIElSUSAlZFxuIiwgeGlycSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCBncmFiIElSUSAlZFxuIiwgeGlycSk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gX19lcnJvcjsKIAl9CkBAIC03OTUsNiArODAwLDkgQEAKIAlpZiAoZG1hMiA+PSAwKQogCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lICsgc3RybGVuKGNhcmQtPmxvbmduYW1lKSwgIiYlZCIsIHhkbWEyKTsKIAorCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gX19lcnJvcjsKKwogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKIAkJZ290byBfX2Vycm9yOwogCkBAIC04NTIsOCArODYwLDEwIEBACiAgICAgICAgIGludCByZXM7CiAKICAgICAgICAgZm9yICggOyBkZXYgPCBTTkRSVl9DQVJEUzsgZGV2KyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVuYWJsZVtkZXZdIHx8ICFpc2FwbnBbZGV2XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCQlpZiAoIWVuYWJsZVtkZXZdKQorCQkJY29udGludWU7CisJCWlmIChpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KSkKKwkJCWNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHJlcyA9IHNuZF9vcGwzc2EyX3Byb2JlKGRldiwgTlVMTCwgY2FyZCwgaWQpOwogICAgICAgICAgICAgICAgIGlmIChyZXMgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IDQxMWE3MDIuLjczNTczY2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMTAzOCw4ICsxMDM4LDcgQEAKIAogCWNoaXAtPmNfZG1hX3NpemUgPSBzaXplOwogCXNuZF9vcHRpOTN4X291dF9tYXNrKGNoaXAsIE9QVGk5M1hfSUZBQ0VfQ09ORiwKLQkJT1BUaTkzWF9DQVBUVVJFX0VOQUJMRSB8IE9QVGk5M1hfQ0FQVFVSRV9QSU8sCi0JCSh1bnNpZ25lZCBjaGFyKX4oT1BUaTkzWF9DQVBUVVJFX0VOQUJMRSB8IE9QVGk5M1hfQ0FQVFVSRV9QSU8pKTsKKwkJT1BUaTkzWF9DQVBUVVJFX0VOQUJMRSB8IE9QVGk5M1hfQ0FQVFVSRV9QSU8sIDApOwogCiAJc25kX2RtYV9wcm9ncmFtKGNoaXAtPmRtYTIsIHJ1bnRpbWUtPmRtYV9hZGRyLCBzaXplLAogCQlETUFfTU9ERV9SRUFEIHwgRE1BX0FVVE9JTklUKTsKQEAgLTEyNzQsNyArMTI3Myw3IEBACiAJb3B0aTkzeF90ICpjb2RlYzsKIAogCSpyY29kZWMgPSBOVUxMOwotCWNvZGVjID0ga2NhbGxvYygxLCBzaXplb2YoKmNvZGVjKSwgR0ZQX0tFUk5FTCk7CisJY29kZWMgPSBremFsbG9jKHNpemVvZigqY29kZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPmlycSA9IC0xOwpAQCAtMTg5NSw4ICsxODk0LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX29wdGk5eHhfcHJvYmUoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLAotCQkJCQkgICAgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQorc3RhdGljIGludCBzbmRfY2FyZF9vcHRpOXh4X3Byb2JlKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKIHsKIAlzdGF0aWMgbG9uZyBwb3NzaWJsZV9wb3J0c1tdID0gezB4NTMwLCAweGU4MCwgMHhmNDAsIDB4NjA0LCAtMX07CiAJc3RhdGljIGxvbmcgcG9zc2libGVfbXB1X3BvcnRzW10gPSB7MHgzMDAsIDB4MzEwLCAweDMyMCwgMHgzMzAsIC0xfTsKQEAgLTE5NjYsNiArMTk2NSwxMCBAQAogCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQorCQlpZiAoKGVycm9yID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApIHsKKwkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KICNpZmRlZiBDT05GSUdfUE5QCiAJfQogI2VuZGlmCS8qIENPTkZJR19QTlAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMgYi9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCmluZGV4IDAyOGFmNDAuLjUzNzU3MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKKysrIGIvc291bmQvaXNhL3NiL2VtdTgwMDAuYwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAlpZiAoc2VxX3BvcnRzIDw9IDApCiAJCXJldHVybiAwOwogCi0JaHcgPSBrY2FsbG9jKDEsIHNpemVvZigqaHcpLCBHRlBfS0VSTkVMKTsKKwlodyA9IGt6YWxsb2Moc2l6ZW9mKCpodyksIEdGUF9LRVJORUwpOwogCWlmIChodyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmaHctPnJlZ19sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwX3BjbS5jIGIvc291bmQvaXNhL3NiL2VtdTgwMDBfcGNtLmMKaW5kZXggZGI1ZWI4Yi4uMDIwOTc5MCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VtdTgwMDBfcGNtLmMKKysrIGIvc291bmQvaXNhL3NiL2VtdTgwMDBfcGNtLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCWVtdThrX3BjbV90ICpyZWM7CiAJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwogCi0JcmVjID0ga2NhbGxvYygxLCBzaXplb2YoKnJlYyksIEdGUF9LRVJORUwpOworCXJlYyA9IGt6YWxsb2Moc2l6ZW9mKCpyZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISByZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2IxNi5jIGIvc291bmQvaXNhL3NiL3NiMTYuYwppbmRleCA2MGUyYzUzLi43ODg4NzgzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2IxNi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKQEAgLTM1MSw2ICszNTEsMTIgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfUE5QCisjZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpCQlpc2FwbnBbZGV2XQorI2Vsc2UKKyNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCTAKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfc2IxNl9wcm9iZShpbnQgZGV2LAogCQkJCSBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKQEAgLTM3OCwxMCArMzg0LDggQEAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfc2IxNl9mcmVlOwogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAoaXNhcG5wW2Rldl0pIHsKLQkJaWYgKChlcnIgPSBzbmRfY2FyZF9zYjE2X3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWlmICgoZXJyID0gc25kX2NhcmRfc2IxNl9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKQorCQkJZ290byBfZXJyOwogCQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAl9CiAjZW5kaWYKQEAgLTM4OSw0MSArMzkzLDM3IEBACiAJeGlycSA9IGlycVtkZXZdOwogCXhkbWE4ID0gZG1hOFtkZXZdOwogCXhkbWExNiA9IGRtYTE2W2Rldl07Ci0jaWZkZWYgQ09ORklHX1BOUAotCWlmICghaXNhcG5wW2Rldl0pIHsKLSNlbmRpZgotCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7Ci0JCWlmICgoeGlycSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lycShwb3NzaWJsZV9pcnFzKSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoISBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KSkgeworCQlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgeworCQkJaWYgKCh4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpKSA8IDApIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7CisJCQkJZXJyID0gLUVCVVNZOworCQkJCWdvdG8gX2VycjsKKwkJCX0KIAkJfQotCX0KLQlpZiAoeGRtYTggPT0gU05EUlZfQVVUT19ETUEpIHsKLQkJaWYgKCh4ZG1hOCA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzOCkpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgOC1iaXQgRE1BXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCWlmICh4ZG1hOCA9PSBTTkRSVl9BVVRPX0RNQSkgeworCQkJaWYgKCh4ZG1hOCA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzOCkpIDwgMCkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgOC1iaXQgRE1BXG4iKTsKKwkJCQllcnIgPSAtRUJVU1k7CisJCQkJZ290byBfZXJyOworCQkJfQogCQl9Ci0JfQotCWlmICh4ZG1hMTYgPT0gU05EUlZfQVVUT19ETUEpIHsKLQkJaWYgKCh4ZG1hMTYgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hczE2KSkgPCAwKSB7Ci0JCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSAxNi1iaXQgRE1BXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCWlmICh4ZG1hMTYgPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJCWlmICgoeGRtYTE2ID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYXMxNikpIDwgMCkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgMTYtYml0IERNQVxuIik7CisJCQkJZXJyID0gLUVCVVNZOworCQkJCWdvdG8gX2VycjsKKwkJCX0KIAkJfQotCX0KLQkvKiBub24tUG5QIEZNIHBvcnQgYWRkcmVzcyBpcyBoYXJkd2lyZWQgd2l0aCBiYXNlIHBvcnQgYWRkcmVzcyAqLwotCWZtX3BvcnRbZGV2XSA9IHBvcnRbZGV2XTsKLQkvKiBibG9jayB0aGUgMHgzODggcG9ydCB0byBhdm9pZCBQblAgY29uZmxpY3RzICovCi0JYWNhcmQtPmZtX3JlcyA9IHJlcXVlc3RfcmVnaW9uKDB4Mzg4LCA0LCAiU291bmRCbGFzdGVyIEZNIik7CisJCS8qIG5vbi1QblAgRk0gcG9ydCBhZGRyZXNzIGlzIGhhcmR3aXJlZCB3aXRoIGJhc2UgcG9ydCBhZGRyZXNzICovCisJCWZtX3BvcnRbZGV2XSA9IHBvcnRbZGV2XTsKKwkJLyogYmxvY2sgdGhlIDB4Mzg4IHBvcnQgdG8gYXZvaWQgUG5QIGNvbmZsaWN0cyAqLworCQlhY2FyZC0+Zm1fcmVzID0gcmVxdWVzdF9yZWdpb24oMHgzODgsIDQsICJTb3VuZEJsYXN0ZXIgRk0iKTsKICNpZmRlZiBTTkRSVl9TQkFXRV9FTVU4MDAwCi0JLyogbm9uLVBuUCBBV0UgcG9ydCBhZGRyZXNzIGlzIGhhcmR3aXJlZCB3aXRoIGJhc2UgcG9ydCBhZGRyZXNzICovCi0JYXdlX3BvcnRbZGV2XSA9IHBvcnRbZGV2XSArIDB4NDAwOworCQkvKiBub24tUG5QIEFXRSBwb3J0IGFkZHJlc3MgaXMgaGFyZHdpcmVkIHdpdGggYmFzZSBwb3J0IGFkZHJlc3MgKi8KKwkJYXdlX3BvcnRbZGV2XSA9IHBvcnRbZGV2XSArIDB4NDAwOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BOUAogCX0KLSNlbmRpZgogCiAJaWYgKChlcnIgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsCiAJCQkJICAgIHBvcnRbZGV2XSwKQEAgLTQzMiwyOCArNDMyLDIwIEBACiAJCQkJICAgIHhkbWE4LAogCQkJCSAgICB4ZG1hMTYsCiAJCQkJICAgIFNCX0hXX0FVVE8sCi0JCQkJICAgICZjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCQkJCSAgICAmY2hpcCkpIDwgMCkKKwkJZ290byBfZXJyOworCiAJaWYgKGNoaXAtPmhhcmR3YXJlICE9IFNCX0hXXzE2KSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXNuZF9wcmludGRkKCJTQiAxNiBjaGlwIHdhcyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIHBvcnRbZGV2XSk7Ci0JCXJldHVybiAtRU5PREVWOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiU0IgMTYgY2hpcCB3YXMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBwb3J0W2Rldl0pOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIF9lcnI7CiAJfQogCWNoaXAtPm1wdV9wb3J0ID0gbXB1X3BvcnRbZGV2XTsKLSNpZmRlZiBDT05GSUdfUE5QCi0JaWYgKCFpc2FwbnBbZGV2XSAmJiAoZXJyID0gc25kX3NiMTZkc3BfY29uZmlndXJlKGNoaXApKSA8IDApIHsKLSNlbHNlCi0JaWYgKChlcnIgPSBzbmRfc2IxNmRzcF9jb25maWd1cmUoY2hpcCkpIDwgMCkgewotI2VuZGlmCi0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCWlmICgoZXJyID0gc25kX3NiMTZkc3BfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CisJaWYgKCEgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikgJiYgKGVyciA9IHNuZF9zYjE2ZHNwX2NvbmZpZ3VyZShjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKKwlpZiAoKGVyciA9IHNuZF9zYjE2ZHNwX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLAogI2lmZGVmIFNORFJWX1NCQVdFX0VNVTgwMDAKQEAgLTQ3NCwxMCArNDY2LDggQEAKIAlpZiAoY2hpcC0+bXB1X3BvcnQgPiAwICYmIGNoaXAtPm1wdV9wb3J0ICE9IFNORFJWX0FVVE9fUE9SVCkgewogCQlpZiAoKGVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX1NCLAogCQkJCQkgICAgICAgY2hpcC0+bXB1X3BvcnQsIDAsCi0JCQkJCSAgICAgICB4aXJxLCAwLCAmY2hpcC0+cm1pZGkpKSA8IDApIHsKLQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQlyZXR1cm4gLUVOWElPOwotCQl9CisJCQkJCSAgICAgICB4aXJxLCAwLCAmY2hpcC0+cm1pZGkpKSA8IDApCisJCQlnb3RvIF9lcnI7CiAJCWNoaXAtPnJtaWRpX2NhbGxiYWNrID0gc25kX21wdTQwMV91YXJ0X2ludGVycnVwdDsKIAl9CiAKQEAgLTQ5OSwxNyArNDg5LDEzIEBACiAjZWxzZQogCQkJaW50IHNlcWRldiA9IDE7CiAjZW5kaWYKLQkJCWlmICgoZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIHNlcWRldiwgJnN5bnRoKSkgPCAwKSB7Ci0JCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCQlyZXR1cm4gLUVOWElPOwotCQkJfQorCQkJaWYgKChlcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgc2VxZGV2LCAmc3ludGgpKSA8IDApCisJCQkJZ290byBfZXJyOwogCQl9CiAJfQogCi0JaWYgKChlcnIgPSBzbmRfc2JtaXhlcl9uZXcoY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KKwlpZiAoKGVyciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKICNpZmRlZiBDT05GSUdfU05EX1NCMTZfQ1NQCiAJLyogQ1NQIGNoaXAgb24gU0IxNkFTUC9BV0UzMiAqLwpAQCAtNTI1LDExICs1MTEsMTEgQEAKICNlbmRpZgogI2lmZGVmIFNORFJWX1NCQVdFX0VNVTgwMDAKIAlpZiAoYXdlX3BvcnRbZGV2XSA+IDApIHsKLQkJaWYgKHNuZF9lbXU4MDAwX25ldyhjYXJkLCAxLCBhd2VfcG9ydFtkZXZdLAotCQkJCSAgICBzZXFfcG9ydHNbZGV2XSwgTlVMTCkgPCAwKSB7CisJCWlmICgoZXJyID0gc25kX2VtdTgwMDBfbmV3KGNhcmQsIDEsIGF3ZV9wb3J0W2Rldl0sCisJCQkJCSAgIHNlcV9wb3J0c1tkZXZdLCBOVUxMKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmF0YWwgZXJyb3IgLSBFTVUtODAwMCBzeW50aGVzaXplciBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGF3ZV9wb3J0W2Rldl0pOwotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXJldHVybiAtRU5YSU87CisKKwkJCWdvdG8gX2VycjsKIAkJfQogCX0KICNlbmRpZgpAQCAtNTQxLDE1ICs1MjcsMjEgQEAKIAkJKG1pY19hZ2NbZGV2XSA/IDB4MDAgOiAweDAxKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bWl4ZXJfbG9jaywgZmxhZ3MpOwogCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCiAJaWYgKHBjYXJkKQogCQlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CiAJZWxzZQogCQlzbmRfc2IxNl9sZWdhY3lbZGV2XSA9IGNhcmQ7CiAJcmV0dXJuIDA7CisKKyBfZXJyOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc25kX3NiMTZfcHJvYmVfbGVnYWN5X3BvcnQodW5zaWduZWQgbG9uZyB4cG9ydCkKQEAgLTU2MCwxMCArNTUyLDggQEAKIAlmb3IgKCA7IGRldiA8IFNORFJWX0NBUkRTOyBkZXYrKykgewogCQlpZiAoIWVuYWJsZVtkZXZdIHx8IHBvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpCiAJCQljb250aW51ZTsKLSNpZmRlZiBDT05GSUdfUE5QCi0JCWlmIChpc2FwbnBbZGV2XSkKKwkJaWYgKGlzX2lzYXBucF9zZWxlY3RlZChkZXYpKQogCQkJY29udGludWU7Ci0jZW5kaWYKIAkJcG9ydFtkZXZdID0geHBvcnQ7CiAJCXJlcyA9IHNuZF9zYjE2X3Byb2JlKGRldiwgTlVMTCwgTlVMTCk7CiAJCWlmIChyZXMgPCAwKQpAQCAtNjIxLDEwICs2MTEsOCBAQAogCWZvciAoZGV2ID0gMDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7CiAJCWlmICghZW5hYmxlW2Rldl0gfHwgcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkKIAkJCWNvbnRpbnVlOwotI2lmZGVmIENPTkZJR19QTlAKLQkJaWYgKGlzYXBucFtkZXZdKQorCQlpZiAoaXNfaXNhcG5wX3NlbGVjdGVkKGRldikpCiAJCQljb250aW51ZTsKLSNlbmRpZgogCQlpZiAoIXNuZF9zYjE2X3Byb2JlKGRldiwgTlVMTCwgTlVMTCkpIHsKIAkJCWNhcmRzKys7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjE2X2NzcC5jIGIvc291bmQvaXNhL3NiL3NiMTZfY3NwLmMKaW5kZXggZDY0NzkwYi4uNzE5MmQ0YyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTZfY3NwLmMKKysrIGIvc291bmQvaXNhL3NiL3NiMTZfY3NwLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCWlmICgoZXJyID0gc25kX2h3ZGVwX25ldyhjaGlwLT5jYXJkLCAiU0IxNi1DU1AiLCBkZXZpY2UsICZodykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICgocCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKHAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCXNuZF9kZXZpY2VfZnJlZShjaGlwLT5jYXJkLCBodyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCBlMmNiYzQyLi5jNDFhYzI1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0xMDcsNTQgKzEwNyw0NyBAQAogCQkJCSAgICBkbWE4W2Rldl0sCiAJCQkJICAgIC0xLAogCQkJCSAgICBTQl9IV19BVVRPLAotCQkJCSAgICAmY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkgICAgJmNoaXApKSA8IDApCisJCWdvdG8gX2VycjsKKwogCWlmIChjaGlwLT5oYXJkd2FyZSA+PSBTQl9IV18xNikgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gU0JfSFdfQUxTMTAwKQotCQkJc25kX3ByaW50ZGQoIkFMUzEwMCBjaGlwIGRldGVjdGVkIGF0IDB4JWx4LCB0cnkgc25kLWFsczEwMCBtb2R1bGVcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiQUxTMTAwIGNoaXAgZGV0ZWN0ZWQgYXQgMHglbHgsIHRyeSBzbmQtYWxzMTAwIG1vZHVsZVxuIiwKIAkJCQkgICAgcG9ydFtkZXZdKTsKIAkJZWxzZQotCQkJc25kX3ByaW50ZGQoIlNCIDE2IGNoaXAgZGV0ZWN0ZWQgYXQgMHglbHgsIHRyeSBzbmQtc2IxNiBtb2R1bGVcbiIsCi0JCQkJICAgIHBvcnRbZGV2XSk7Ci0JCXJldHVybiAtRU5PREVWOworCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlNCIDE2IGNoaXAgZGV0ZWN0ZWQgYXQgMHglbHgsIHRyeSBzbmQtc2IxNiBtb2R1bGVcbiIsCisJCQkJICAgcG9ydFtkZXZdKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBfZXJyOwogCX0KIAotCWlmICgoZXJyID0gc25kX3NiOGRzcF9wY20oY2hpcCwgMCwgTlVMTCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlpZiAoKGVyciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX3NiOGRzcF9wY20oY2hpcCwgMCwgTlVMTCkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfc2JtaXhlcl9uZXcoY2hpcCkpIDwgMCkKKwkJZ290byBfZXJyOworCiAJaWYgKGNoaXAtPmhhcmR3YXJlID09IFNCX0hXXzEwIHx8IGNoaXAtPmhhcmR3YXJlID09IFNCX0hXXzIwKSB7CiAJCWlmICgoZXJyID0gc25kX29wbDNfY3JlYXRlKGNhcmQsIGNoaXAtPnBvcnQgKyA4LCAwLAogCQkJCQkgICBPUEwzX0hXX0FVVE8sIDEsCiAJCQkJCSAgICZvcGwzKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzYjg6IG5vIE9QTCBkZXZpY2UgYXQgMHglbHhcbiIsIGNoaXAtPnBvcnQgKyA4KTsKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJzYjg6IG5vIE9QTCBkZXZpY2UgYXQgMHglbHhcbiIsIGNoaXAtPnBvcnQgKyA4KTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICgoZXJyID0gc25kX29wbDNfY3JlYXRlKGNhcmQsIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyLAogCQkJCQkgICBPUEwzX0hXX0FVVE8sIDEsCiAJCQkJCSAgICZvcGwzKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzYjg6IG5vIE9QTCBkZXZpY2UgYXQgMHglbHgtMHglbHhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAic2I4OiBubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4XG4iLAogCQkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyKTsKIAkJfQogCX0KIAlpZiAoZXJyID49IDApIHsKLQkJaWYgKChlcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKChlcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkKKwkJCWdvdG8gX2VycjsKIAl9CiAKLQlpZiAoKGVyciA9IHNuZF9zYjhkc3BfbWlkaShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX3NiOGRzcF9taWRpKGNoaXAsIDAsIE5VTEwpKSA8IDApCisJCWdvdG8gX2VycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsIGNoaXAtPmhhcmR3YXJlID09IFNCX0hXX1BSTyA/ICJTQiBQcm8iIDogIlNCOCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUpOwpAQCAtMTYyLDEyICsxNTUsMTkgQEAKIAkJY2hpcC0+bmFtZSwKIAkJY2hpcC0+cG9ydCwKIAkJaXJxW2Rldl0sIGRtYThbZGV2XSk7Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CisKIAlzbmRfc2I4X2NhcmRzW2Rldl0gPSBjYXJkOwogCXJldHVybiAwOworCisgX2VycjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF9jYXJkX3NiOF9sZWdhY3lfYXV0b19wcm9iZSh1bnNpZ25lZCBsb25nIHhwb3J0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jIGIvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCmluZGV4IDViNmJkZTIuLmYwZjIwNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCiAJc25kX2Fzc2VydChyX2NoaXAgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwogCSpyX2NoaXAgPSBOVUxMOwotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2dhbGF4eS5jIGIvc291bmQvaXNhL3NnYWxheHkuYwppbmRleCAxN2Y1ODViLi41MmYyMjk0IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2dhbGF4eS5jCisrKyBiL3NvdW5kL2lzYS9zZ2FsYXh5LmMKQEAgLTY3LDYgKzY3LDggQEAKIAogc3RhdGljIHNuZF9jYXJkX3QgKnNuZF9zZ2FsYXh5X2NhcmRzW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUFRSOwogCisjZGVmaW5lIFBGWAkic2dhbGF4eTogIgorCiAvKgogCiAgKi8KQEAgLTEzNSw3ICsxMzcsNyBAQAogCX0KIAogI2lmIDAKLQlzbmRfcHJpbnRkZCgic2dhbGF4eSAtIHNldHRpbmcgdXAgSVJRL0RNQSBmb3IgV1NTXG4iKTsKKwlzbmRfcHJpbnRkZChQRlggInNldHRpbmcgdXAgSVJRL0RNQSBmb3IgV1NTXG4iKTsKICNlbmRpZgogCiAgICAgICAgIC8qIGluaXRpYWxpemUgSVJRIGZvciBXU1MgY29kZWMgKi8KQEAgLTE2MCw3ICsxNjIsNyBAQAogc3RhdGljIGludCBfX2luaXQgc25kX3NnYWxheHlfZGV0ZWN0KGludCBkZXYsIGludCBpcnEsIGludCBkbWEpCiB7CiAjaWYgMAotCXNuZF9wcmludGRkKCJzZ2FsYXh5IC0gc3dpdGNoaW5nIHRvIFdTUyBtb2RlXG4iKTsKKwlzbmRfcHJpbnRkZChQRlggInN3aXRjaGluZyB0byBXU1MgbW9kZVxuIik7CiAjZW5kaWYKIAogCS8qIHN3aXRjaCB0byBXU1MgbW9kZSAqLwpAQCAtMjIzLDExICsyMjUsMTEgQEAKIAlhZDE4NDhfdCAqY2hpcDsKIAogCWlmIChzYnBvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50aygic3BlY2lmeSBTQiBwb3J0XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInNwZWNpZnkgU0IgcG9ydFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAod3NzcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IFdTUyBwb3J0XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInNwZWNpZnkgV1NTIHBvcnRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CkBAIC0yMzcsNDYgKzIzOSwzOSBAQAogCXhpcnEgPSBpcnFbZGV2XTsKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewogCQlpZiAoKHhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcykpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgSVJRXG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gX2VycjsKIAkJfQogCX0KIAl4ZG1hMSA9IGRtYTFbZGV2XTsKICAgICAgICAgaWYgKHhkbWExID09IFNORFJWX0FVVE9fRE1BKSB7CiAJCWlmICgoeGRtYTEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hcykpIDwgMCkgewotCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUFcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BXG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gX2VycjsKIAkJfQogCX0KIAotCWlmICgoZXJyID0gc25kX3NnYWxheHlfZGV0ZWN0KGRldiwgeGlycSwgeGRtYTEpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfc2dhbGF4eV9kZXRlY3QoZGV2LCB4aXJxLCB4ZG1hMSkpIDwgMCkKKwkJZ290byBfZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfYWQxODQ4X2NyZWF0ZShjYXJkLCB3c3Nwb3J0W2Rldl0gKyA0LAogCQkJCSAgICAgeGlycSwgeGRtYTEsCi0JCQkJICAgICBBRDE4NDhfSFdfREVURUNULCAmY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQkgICAgIEFEMTg0OF9IV19ERVRFQ1QsICZjaGlwKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9hZDE4NDhfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKLQkJc25kX3ByaW50ZGQoInNnYWxheHkgLSBlcnJvciBjcmVhdGluZyBuZXcgYWQxODQ4IFBDTSBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOworCQlzbmRfcHJpbnRkZChQRlggImVycm9yIGNyZWF0aW5nIG5ldyBhZDE4NDggUENNIGRldmljZVxuIik7CisJCWdvdG8gX2VycjsKIAl9CiAJaWYgKChlcnIgPSBzbmRfYWQxODQ4X21peGVyKGNoaXApKSA8IDApIHsKLQkJc25kX3ByaW50ZGQoInNnYWxheHkgLSBlcnJvciBjcmVhdGluZyBuZXcgYWQxODQ4IG1peGVyXG4iKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKKwkJc25kX3ByaW50ZGQoUEZYICJlcnJvciBjcmVhdGluZyBuZXcgYWQxODQ4IG1peGVyXG4iKTsKKwkJZ290byBfZXJyOwogCX0KLQlpZiAoc25kX3NnYWxheHlfbWl4ZXIoY2hpcCkgPCAwKSB7Ci0JCXNuZF9wcmludGRkKCJzZ2FsYXh5IC0gdGhlIG1peGVyIHJld3JpdGUgZmFpbGVkXG4iKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKKwlpZiAoKGVyciA9IHNuZF9zZ2FsYXh5X21peGVyKGNoaXApKSA8IDApIHsKKwkJc25kX3ByaW50ZGQoUEZYICJ0aGUgbWl4ZXIgcmV3cml0ZSBmYWlsZWRcbiIpOworCQlnb3RvIF9lcnI7CiAJfQogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNvdW5kIEdhbGF4eSIpOwpAQCAtMjg0LDEyICsyNzksMTggQEAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiU291bmQgR2FsYXh5IGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsCiAJCXdzc3BvcnRbZGV2XSwgeGlycSwgeGRtYTEpOwogCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gX2VycjsKKworCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCiAJc25kX3NnYWxheHlfY2FyZHNbZGV2XSA9IGNhcmQ7CiAJcmV0dXJuIDA7CisKKyBfZXJyOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX3NnYWxheHlfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NzY2FwZS5jIGIvc291bmQvaXNhL3NzY2FwZS5jCmluZGV4IDM5NTllZDYuLjlmNmI1OGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zc2NhcGUuYworKysgYi9zb3VuZC9pc2Evc3NjYXBlLmMKQEAgLTEyNjIsMTEgKzEyNjIsNiBAQAogCSAqLwogCXNzY2FwZV93cml0ZShzc2NhcGUsIEdBX0lOVEVOQV9SRUcsIDB4ODApOwogCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBGYWlsZWQgdG8gcmVnaXN0ZXIgc291bmQgY2FyZFxuIik7Ci0JCWdvdG8gX3JlbGVhc2VfY2FyZDsKLQl9Ci0KIAkvKgogCSAqIEluaXRpYWxpemUgbWl4ZXIKIAkgKi8KQEAgLTEzOTYsNiArMTM5MSwxMyBAQAogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKIAkJCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOworCisJCQlpZiAoKHJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogRmFpbGVkIHRvIHJlZ2lzdGVyIHNvdW5kIGNhcmRcbiIpOworCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwogCQkJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIGNhcmQpOwogCQkJKytzc2NhcGVfY2FyZHM7CiAJCQkrK2lkeDsKQEAgLTE0NjAsNiArMTQ2MiwxNiBAQAogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKKwkJaWYgKChyZXQgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKChyZXQgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogRmFpbGVkIHRvIHJlZ2lzdGVyIHNvdW5kIGNhcmRcbiIpOworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwogCQlzc2NhcGVfY2FyZFtzc2NhcGVfY2FyZHNdID0gY2FyZDsKIAkJcGFyYW1zKys7CiAJCXNzY2FwZV9jYXJkcysrOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKaW5kZXggNzliMDIyMC4uMGE1NzJlMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCkBAIC02MjIsNiArNjIyLDExIEBACiAJCSBpY3MyMTE1X3BvcnRbZGV2XSwKIAkJIGljczIxMTVfaXJxW2Rldl0pOwogCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9LY29uZmlnIGIvc291bmQvbWlwcy9LY29uZmlnCmluZGV4IDUzMWY4YmEuLjI0MzNiNzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvS2NvbmZpZworKysgYi9zb3VuZC9taXBzL0tjb25maWcKQEAgLTgsNiArOCw3IEBACiAJZGVwZW5kcyBvbiAoU09DX0FVMTAwMCB8fCBTT0NfQVUxMTAwIHx8IFNPQ19BVTE1MDApICYmIFNORAogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJc2VsZWN0IFNORF9HRU5FUklDX0RSSVZFUgogCWhlbHAKIAkgIEFMU0EgU291bmQgZHJpdmVyIGZvciB0aGUgQXUxeDAwJ3MgQUM5NyBwb3J0LgogCmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL2F1MXgwMC5jIGIvc291bmQvbWlwcy9hdTF4MDAuYwppbmRleCBjMjA1MjJiLi4zZjk2ODRmIDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL2F1MXgwMC5jCisrKyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKQEAgLTY2Nyw2ICs2NjcsMTEgQEAKIAlzdHJjcHkoYXUxMDAwLT5jYXJkLT5zaG9ydG5hbWUsICJBdTEwMDAtQUM5NyIpOwogCXNwcmludGYoYXUxMDAwLT5jYXJkLT5sb25nbmFtZSwgIkFNRCBBdTEwMDAtLUFDOTcgQUxTQSBEcml2ZXIiKTsKIAorCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGF1MTAwMC0+Y2FyZCkpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGF1MTAwMC0+Y2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihhdTEwMDAtPmNhcmQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShhdTEwMDAtPmNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggZDdhOGY5Zi4uZjU2MGRkOCAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC04ODAsNiArODgwLDggQEAKICAgICAgICAgICAgICAgICBnb3RvIGZyZWVfYW5kX3JldDsKICAgICAgICAgfQogCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGFkZXYtPmRldik7CisKIAkqcmNoaXAgPSBoOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDFlNDU4OTE5Li5hNWQ1OTNjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtMzE2LDYgKzMxNiwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXltZnBjaS4KIAorY29uZmlnIFNORF9BRDE4ODkKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQxODg5IgorCWRlcGVuZHMgb24gU05ECisJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkIEFDOTcgc291bmQKKwkgIGRldmljZSBmb3VuZCBpbiBwYXJ0aWN1bGFyIG9uIHRoZSBIZXdsZXR0LVBhY2thcmQgW0JDSl0teHh4MAorCSAgY2xhc3MgUEEtUklTQyB3b3Jrc3RhdGlvbnMsIHVzaW5nIHRoZSBBRDE4MTkgY29kZWMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWFkMTg4OS4KKwogY29uZmlnIFNORF9BTFM0MDAwCiAJdHJpc3RhdGUgIkF2YW5jZSBMb2dpYyBBTFM0MDAwIgogCWRlcGVuZHMgb24gU05EICYmIElTQV9ETUFfQVBJCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvTWFrZWZpbGUgYi9zb3VuZC9wY2kvTWFrZWZpbGUKaW5kZXggYjQwNTc1Yy4uNDJmYWJmYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKICMgQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KICMKIAorc25kLWFkMTg4OS1vYmpzIDo9IGFkMTg4OS5vCiBzbmQtYWxzNDAwMC1vYmpzIDo9IGFsczQwMDAubwogc25kLWF0aWl4cC1vYmpzIDo9IGF0aWl4cC5vCiBzbmQtYXRpaXhwLW1vZGVtLW9ianMgOj0gYXRpaXhwX21vZGVtLm8KQEAgLTI1LDYgKzI2LDcgQEAKIHNuZC12aWE4Mnh4LW1vZGVtLW9ianMgOj0gdmlhODJ4eF9tb2RlbS5vCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKK29iai0kKENPTkZJR19TTkRfQUQxODg5KSArPSBzbmQtYWQxODg5Lm8KIG9iai0kKENPTkZJR19TTkRfQUxTNDAwMCkgKz0gc25kLWFsczQwMDAubwogb2JqLSQoQ09ORklHX1NORF9BVElJWFApICs9IHNuZC1hdGlpeHAubwogb2JqLSQoQ09ORklHX1NORF9BVElJWFBfTU9ERU0pICs9IHNuZC1hdGlpeHAtbW9kZW0ubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IDU1MDFmNDQuLmU2NGNiMDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTExMiw2ICsxMTIsNyBAQAogeyAweDQxNGM0NzIzLCAweGZmZmZmZmZmLCAiQUxDNjUwRiIsCQlOVUxMLAlOVUxMIH0sIC8qIGFscmVhZHkgcGF0Y2hlZCAqLwogeyAweDQxNGM0NzIwLCAweGZmZmZmZmYwLCAiQUxDNjUwIiwJCXBhdGNoX2FsYzY1MCwJTlVMTCB9LAogeyAweDQxNGM0NzYwLCAweGZmZmZmZmYwLCAiQUxDNjU1IiwJCXBhdGNoX2FsYzY1NSwJTlVMTCB9LAoreyAweDQxNGM0NzgxLCAweGZmZmZmZmZmLCAiQUxDNjU4RCIsCQlOVUxMLAlOVUxMIH0sIC8qIGFscmVhZHkgcGF0Y2hlZCAqLwogeyAweDQxNGM0NzgwLCAweGZmZmZmZmYwLCAiQUxDNjU4IiwJCXBhdGNoX2FsYzY1NSwJTlVMTCB9LAogeyAweDQxNGM0NzkwLCAweGZmZmZmZmYwLCAiQUxDODUwIiwJCXBhdGNoX2FsYzg1MCwJTlVMTCB9LAogeyAweDQxNGM0NzMwLCAweGZmZmZmZmZmLCAiQUxDMTAxIiwJCU5VTEwsCQlOVUxMIH0sCkBAIC0xNzk2LDcgKzE3OTcsNyBAQAogCiAJc25kX2Fzc2VydChjYXJkICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKIAlzbmRfYXNzZXJ0KHJidXMgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwotCWJ1cyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTsKKwlidXMgPSBremFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlidXMtPmNhcmQgPSBjYXJkOwpAQCAtMTkwNSw3ICsxOTA2LDcgQEAKIAl9CiAKIAljYXJkID0gYnVzLT5jYXJkOwotCWFjOTcgPSBrY2FsbG9jKDEsIHNpemVvZigqYWM5NyksIEdGUF9LRVJORUwpOworCWFjOTcgPSBremFsbG9jKHNpemVvZigqYWM5NyksIEdGUF9LRVJORUwpOwogCWlmIChhYzk3ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWFjOTctPnByaXZhdGVfZGF0YSA9IHRlbXBsYXRlLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2lkLmggYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2lkLmgKaW5kZXggZGFkZjM4Ny4uNmQ3MzUxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19pZC5oCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfaWQuaApAQCAtNTIsNiArNTIsNyBAQAogI2RlZmluZSBBQzk3X0lEX0FMQzY1MEYJCTB4NDE0YzQ3MjMKICNkZWZpbmUgQUM5N19JRF9BTEM2NTUJCTB4NDE0YzQ3NjAKICNkZWZpbmUgQUM5N19JRF9BTEM2NTgJCTB4NDE0YzQ3ODAKKyNkZWZpbmUgQUM5N19JRF9BTEM2NThECQkweDQxNGM0NzgxCiAjZGVmaW5lIEFDOTdfSURfQUxDODUwCQkweDQxNGM0NzkwCiAjZGVmaW5lIEFDOTdfSURfWU1GNzUzCQkweDU5NGQ0ODAzCiAjZGVmaW5lIEFDOTdfSURfVlQxNjE2CQkweDQ5NDM0NTUxCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKaW5kZXggYjU4NDE3Mi4uMDQ1ZGRjNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwpAQCAtMjEzNCw3ICsyMTM0LDEzIEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCWFjOTctPnNwZWMuZGV2X2ZsYWdzID0gKGFjOTctPmlkID09IDB4NDE0YzQ3ODApOyAvKiBBTEM2NTggKi8KKwlpZiAoYWM5Ny0+aWQgPT0gQUM5N19JRF9BTEM2NTgpIHsKKwkJYWM5Ny0+c3BlYy5kZXZfZmxhZ3MgPSAxOyAvKiBBTEM2NTggKi8KKwkJaWYgKChzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfQUxDNjUwX1JFVklTSU9OKSAmIDB4M2YpID09IDIpIHsKKwkJCWFjOTctPmlkID0gQUM5N19JRF9BTEM2NThEOworCQkJYWM5Ny0+c3BlYy5kZXZfZmxhZ3MgPSAyOworCQl9CisJfQogCiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX2FsYzY1NV9vcHM7CiAKQEAgLTIxNDMsMTAgKzIxNDksMTUgQEAKIAogCS8qIGFkanVzdCBkZWZhdWx0IHZhbHVlcyAqLwogCXZhbCA9IHNuZF9hYzk3X3JlYWQoYWM5NywgMHg3YSk7IC8qIG1pc2MgY29udHJvbCAqLwotCWlmIChhYzk3LT5pZCA9PSAweDQxNGM0NzgwKSAvKiBBTEM2NTggKi8KKwlpZiAoYWM5Ny0+c3BlYy5kZXZfZmxhZ3MpIC8qIEFMQzY1OCAqLwogCQl2YWwgJj0gfigxIDw8IDEpOyAvKiBQaW4gNDcgaXMgc3BkaWYgaW5wdXQgcGluICovCi0JZWxzZSAvKiBBTEM2NTUgKi8KLQkJdmFsIHw9ICgxIDw8IDEpOyAvKiBQaW4gNDcgaXMgc3BkaWYgaW5wdXQgcGluICovCisJZWxzZSB7IC8qIEFMQzY1NSAqLworCQlpZiAoYWM5Ny0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDE0NjIgJiYKKwkJICAgIGFjOTctPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMTMxKSAvKiBNU0kgUzI3MCBsYXB0b3AgKi8KKwkJCXZhbCAmPSB+KDEgPDwgMSk7IC8qIFBpbiA0NyBpcyBFQVBEIChmb3IgaW50ZXJuYWwgc3BlYWtlcikgKi8KKwkJZWxzZQorCQkJdmFsIHw9ICgxIDw8IDEpOyAvKiBQaW4gNDcgaXMgc3BkaWYgaW5wdXQgcGluICovCisJfQogCXZhbCAmPSB+KDEgPDwgMTIpOyAvKiB2cmVmIGVuYWJsZSAqLwogCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIDB4N2EsIHZhbCk7CiAJLyogc2V0IGRlZmF1bHQ6IHNwZGlmLWluIGVuYWJsZWQsCkBAIC0yMTU5LDYgKzIxNzAsMTEgQEAKIAkvKiBmdWxsIERBQyB2b2x1bWUgKi8KIAlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X0FMQzY1MF9TVVJSX0RBQ19WT0wsIDB4MDgwOCk7CiAJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgQUM5N19BTEM2NTBfTEZFX0RBQ19WT0wsIDB4MDgwOCk7CisKKwkvKiB1cGRhdGUgdW5kb2N1bWVudGVkIGJpdC4uLiAqLworCWlmIChhYzk3LT5pZCA9PSBBQzk3X0lEX0FMQzY1OEQpCisJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIDB4NzQsIDB4MDgwMCwgMHgwODAwKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hazQ1MzFfY29kZWMuYyBiL3NvdW5kL3BjaS9hYzk3L2FrNDUzMV9jb2RlYy5jCmluZGV4IGY5Y2UwZmQuLjQwMzJjNTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FrNDUzMV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FrNDUzMV9jb2RlYy5jCkBAIC0zNTcsNyArMzU3LDcgQEAKIAlzbmRfYXNzZXJ0KHJhazQ1MzEgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwogCSpyYWs0NTMxID0gTlVMTDsKIAlzbmRfYXNzZXJ0KGNhcmQgIT0gTlVMTCAmJiBfYWs0NTMxICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKLQlhazQ1MzEgPSBrY2FsbG9jKDEsIHNpemVvZigqYWs0NTMxKSwgR0ZQX0tFUk5FTCk7CisJYWs0NTMxID0ga3phbGxvYyhzaXplb2YoKmFrNDUzMSksIEdGUF9LRVJORUwpOwogCWlmIChhazQ1MzEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJKmFrNDUzMSA9ICpfYWs0NTMxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5jIGIvc291bmQvcGNpL2FkMTg4OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDk5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvYWQxODg5LmMKQEAgLTAsMCArMSwxMDkwIEBACisvKiBBbmFsb2cgRGV2aWNlcyAxODg5IGF1ZGlvIGRyaXZlcgorICoKKyAqIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBBRDE4ODkgUENJIGF1ZGlvIGNoaXBzZXQgZm91bmQKKyAqIG9uIHRoZSBIUCBQQS1SSVNDIFtCQ0pdLXh4eDAgd29ya3N0YXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCBLeWxlIE1jTWFydGluIDxreWxlQHBhcmlzYy1saW51eC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIFRoaWJhdXQgVmFyZW5lIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKiAgIEJhc2VkIG9uIHRoZSBPU1MgQUQxODg5IGRyaXZlciBieSBSYW5kb2xwaCBDaHVuZyA8dGF1c3FAZGViaWFuLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFRPRE86CisgKglEbyB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZiBDQ1MgcmVnaXN0ZXI/CisgKglNYXliZSB3ZSBjb3VsZCB1c2UgZmluZXIgZ3JhaW5lZCBsb2NraW5nIChzZXBhcmF0ZSBsb2NrcyBmb3IgcGIvY2FwKT8KKyAqIFdpc2hsaXN0OgorICoJQ29udHJvbCBJbnRlcmZhY2UgKG1peGVyKSBzdXBwb3J0CisgKglCZXR0ZXIgQUM5NyBzdXBwb3J0IChWU1IuLi4pPworICoJUE0gc3VwcG9ydAorICoJTUlESSBzdXBwb3J0CisgKglHYW1lIFBvcnQgc3VwcG9ydAorICoJU0cgRE1BIHN1cHBvcnQgKHRoaXMgd2lsbCBuZWVkICphbG90KiBvZiB3b3JrKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJhZDE4ODkuaCIKKyNpbmNsdWRlICJhYzk3L2FjOTdfaWQuaCIKKworI2RlZmluZQlBRDE4ODlfRFJWVkVSCSIkUmV2aXNpb246IDEuMyAkIgorCitNT0RVTEVfQVVUSE9SKCJLeWxlIE1jTWFydGluIDxreWxlQHBhcmlzYy1saW51eC5vcmc+LCBUaGliYXV0IFZhcmVuZSA8dC1ib25lQHBhcmlzYy1saW51eC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEMTg4OSBBTFNBIHNvdW5kIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7QW5hbG9nIERldmljZXMsQUQxODg5fX0iKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgdGhlIEFEMTg4OSBzb3VuZGNhcmQuIik7CisKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgdGhlIEFEMTg4OSBzb3VuZGNhcmQuIik7CisKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgQUQxODg5IHNvdW5kY2FyZC4iKTsKKworc3RhdGljIGNoYXIgKmFjOTdfcXVpcmtbU05EUlZfQ0FSRFNdOworbW9kdWxlX3BhcmFtX2FycmF5KGFjOTdfcXVpcmssIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYWM5N19xdWlyaywgIkFDJzk3IHdvcmthcm91bmQgZm9yIHN0cmFuZ2UgaGFyZHdhcmUuIik7CisKKyNkZWZpbmUgREVWTkFNRSAiYWQxODg5IgorI2RlZmluZSBQRlgJREVWTkFNRSAiOiAiCisKKy8qIGxldCdzIHVzZSB0aGUgZ2xvYmFsIHNvdW5kIGRlYnVnIGludGVyZmFjZXMgKi8KKyNkZWZpbmUgYWQxODg5X2RlYnVnKGZtdCwgYXJnLi4uKSBzbmRfcHJpbnRkKEtFUk5fREVCVUcgZm10LCAjIyBhcmcpCisKKy8qIGtlZXAgdHJhY2sgb2Ygc29tZSBodyByZWdpc3RlcnMgKi8KK3N0cnVjdCBhZDE4ODlfcmVnaXN0ZXJfc3RhdGUgeworCXUxNiByZWc7CS8qIHJlZyBzZXR1cCAqLworCXUzMiBhZGRyOwkvKiBkbWEgYmFzZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBzaXplOwkvKiBETUEgYnVmZmVyIHNpemUgKi8KK307CisKK3N0cnVjdCBzbmRfYWQxODg5IHsKKwlzbmRfY2FyZF90ICpjYXJkOworCXN0cnVjdCBwY2lfZGV2ICpwY2k7CisKKwlpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgYmFyOworCXZvaWQgX19pb21lbSAqaW9iYXNlOworCisJYWM5N190ICphYzk3OworCWFjOTdfYnVzX3QgKmFjOTdfYnVzOworCXNuZF9wY21fdCAqcGNtOworCXNuZF9pbmZvX2VudHJ5X3QgKnByb2M7CisKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpwc3ViczsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpjc3ViczsKKworCS8qIHBsYXliYWNrIHJlZ2lzdGVyIHN0YXRlICovCisJc3RydWN0IGFkMTg4OV9yZWdpc3Rlcl9zdGF0ZSB3YXZlOworCXN0cnVjdCBhZDE4ODlfcmVnaXN0ZXJfc3RhdGUgcmFtYzsKKworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBpbmxpbmUgdTE2CithZDE4ODlfcmVhZHcoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAsIHVuc2lnbmVkIHJlZykKK3sKKwlyZXR1cm4gcmVhZHcoY2hpcC0+aW9iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithZDE4ODlfd3JpdGV3KHN0cnVjdCBzbmRfYWQxODg5ICpjaGlwLCB1bnNpZ25lZCByZWcsIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgY2hpcC0+aW9iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIKK2FkMTg4OV9yZWFkbChzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCwgdW5zaWduZWQgcmVnKQoreworCXJldHVybiByZWFkbChjaGlwLT5pb2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FkMTg4OV93cml0ZWwoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAsIHVuc2lnbmVkIHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBjaGlwLT5pb2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FkMTg4OV91bm11dGUoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXApCit7CisJdTE2IHN0OworCXN0ID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1dBREEpICYgCisJCX4oQURfRFNfV0FEQV9SV0FNIHwgQURfRFNfV0FEQV9MV0FNKTsKKwlhZDE4ODlfd3JpdGV3KGNoaXAsIEFEX0RTX1dBREEsIHN0KTsKKwlhZDE4ODlfcmVhZHcoY2hpcCwgQURfRFNfV0FEQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWQxODg5X211dGUoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXApCit7CisJdTE2IHN0OworCXN0ID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1dBREEpIHwgQURfRFNfV0FEQV9SV0FNIHwgQURfRFNfV0FEQV9MV0FNOworCWFkMTg4OV93cml0ZXcoY2hpcCwgQURfRFNfV0FEQSwgc3QpOworCWFkMTg4OV9yZWFkdyhjaGlwLCBBRF9EU19XQURBKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithZDE4ODlfbG9hZF9hZGNfYnVmZmVyX2FkZHJlc3Moc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAsIHUzMiBhZGRyZXNzKQoreworCWFkMTg4OV93cml0ZWwoY2hpcCwgQURfRE1BX0FEQ0JBLCBhZGRyZXNzKTsKKwlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9BRENDQSwgYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWQxODg5X2xvYWRfYWRjX2J1ZmZlcl9jb3VudChzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCwgdTMyIGNvdW50KQoreworCWFkMTg4OV93cml0ZWwoY2hpcCwgQURfRE1BX0FEQ0JDLCBjb3VudCk7CisJYWQxODg5X3dyaXRlbChjaGlwLCBBRF9ETUFfQURDQ0MsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithZDE4ODlfbG9hZF9hZGNfaW50ZXJydXB0X2NvdW50KHN0cnVjdCBzbmRfYWQxODg5ICpjaGlwLCB1MzIgY291bnQpCit7CisJYWQxODg5X3dyaXRlbChjaGlwLCBBRF9ETUFfQURDSUIsIGNvdW50KTsKKwlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9BRENJQywgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FkMTg4OV9sb2FkX3dhdmVfYnVmZmVyX2FkZHJlc3Moc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAsIHUzMiBhZGRyZXNzKQoreworCWFkMTg4OV93cml0ZWwoY2hpcCwgQURfRE1BX1dBVkJBLCBhZGRyZXNzKTsKKwlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9XQVZDQSwgYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWQxODg5X2xvYWRfd2F2ZV9idWZmZXJfY291bnQoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAsIHUzMiBjb3VudCkKK3sKKwlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9XQVZCQywgY291bnQpOworCWFkMTg4OV93cml0ZWwoY2hpcCwgQURfRE1BX1dBVkNDLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWQxODg5X2xvYWRfd2F2ZV9pbnRlcnJ1cHRfY291bnQoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAsIHUzMiBjb3VudCkKK3sKKwlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9XQVZJQiwgY291bnQpOworCWFkMTg4OV93cml0ZWwoY2hpcCwgQURfRE1BX1dBVklDLCBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkCithZDE4ODlfY2hhbm5lbF9yZXNldChzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCwgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJdTE2IHJlZzsKKwkKKwlpZiAoY2hhbm5lbCAmIEFEX0NIQU5fV0FWKSB7CisJCS8qIERpc2FibGUgd2F2ZSBjaGFubmVsICovCisJCXJlZyA9IGFkMTg4OV9yZWFkdyhjaGlwLCBBRF9EU19XU01DKSAmIH5BRF9EU19XU01DX1dBRU47CisJCWFkMTg4OV93cml0ZXcoY2hpcCwgQURfRFNfV1NNQywgcmVnKTsKKwkJY2hpcC0+d2F2ZS5yZWcgPSByZWc7CisJCQorCQkvKiBkaXNhYmxlIElSUXMgKi8KKwkJcmVnID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RNQV9XQVYpOworCQlyZWcgJj0gQURfRE1BX0lNX0RJUzsKKwkJcmVnICY9IH5BRF9ETUFfTE9PUDsKKwkJYWQxODg5X3dyaXRldyhjaGlwLCBBRF9ETUFfV0FWLCByZWcpOworCisJCS8qIGNsZWFyIElSUSBhbmQgYWRkcmVzcyBjb3VudGVycyBhbmQgcG9pbnRlcnMgKi8KKwkJYWQxODg5X2xvYWRfd2F2ZV9idWZmZXJfYWRkcmVzcyhjaGlwLCAweDApOworCQlhZDE4ODlfbG9hZF93YXZlX2J1ZmZlcl9jb3VudChjaGlwLCAweDApOworCQlhZDE4ODlfbG9hZF93YXZlX2ludGVycnVwdF9jb3VudChjaGlwLCAweDApOworCisJCS8qIGZsdXNoICovCisJCWFkMTg4OV9yZWFkdyhjaGlwLCBBRF9ETUFfV0FWKTsKKwl9CisJCisJaWYgKGNoYW5uZWwgJiBBRF9DSEFOX0FEQykgeworCQkvKiBEaXNhYmxlIEFEQyBjaGFubmVsICovCisJCXJlZyA9IGFkMTg4OV9yZWFkdyhjaGlwLCBBRF9EU19SQU1DKSAmIH5BRF9EU19SQU1DX0FERU47CisJCWFkMTg4OV93cml0ZXcoY2hpcCwgQURfRFNfUkFNQywgcmVnKTsKKwkJY2hpcC0+cmFtYy5yZWcgPSByZWc7CisKKwkJcmVnID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RNQV9BREMpOworCQlyZWcgJj0gQURfRE1BX0lNX0RJUzsKKwkJcmVnICY9IH5BRF9ETUFfTE9PUDsKKwkJYWQxODg5X3dyaXRldyhjaGlwLCBBRF9ETUFfQURDLCByZWcpOworCQorCQlhZDE4ODlfbG9hZF9hZGNfYnVmZmVyX2FkZHJlc3MoY2hpcCwgMHgwKTsKKwkJYWQxODg5X2xvYWRfYWRjX2J1ZmZlcl9jb3VudChjaGlwLCAweDApOworCQlhZDE4ODlfbG9hZF9hZGNfaW50ZXJydXB0X2NvdW50KGNoaXAsIDB4MCk7CisKKwkJLyogZmx1c2ggKi8KKwkJYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RNQV9BREMpOworCX0KK30KKworc3RhdGljIGlubGluZSB1MTYKK3NuZF9hZDE4ODlfYWM5N19yZWFkKGFjOTdfdCAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBzbmRfYWQxODg5ICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBhZDE4ODlfcmVhZHcoY2hpcCwgQURfQUM5N19CQVNFICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbmRfYWQxODg5X2FjOTdfd3JpdGUoYWM5N190ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKwlhZDE4ODlfd3JpdGV3KGNoaXAsIEFEX0FDOTdfQkFTRSArIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludAorc25kX2FkMTg4OV9hYzk3X3JlYWR5KHN0cnVjdCBzbmRfYWQxODg5ICpjaGlwKQoreworCWludCByZXRyeSA9IDQwMDsgLyogYXZlcmFnZSBuZWVkcyAzNTIgbXNlYyAqLworCQorCXdoaWxlICghKGFkMTg4OV9yZWFkdyhjaGlwLCBBRF9BQzk3X0FDSUMpICYgQURfQUM5N19BQ0lDX0FDUkRZKSAKKwkJCSYmIC0tcmV0cnkpCisJCW1kZWxheSgxKTsKKwlpZiAoIXJldHJ5KSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJbJXNdIExpbmsgaXMgbm90IHJlYWR5LlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlPOworCX0KKwlhZDE4ODlfZGVidWcoIlslc10gcmVhZHkgYWZ0ZXIgJWQgbXNcbiIsIF9fRlVOQ1RJT05fXywgNDAwIC0gcmV0cnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgCitzbmRfYWQxODg5X2h3X3BhcmFtcyhzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sCisJCQlzbmRfcGNtX2h3X3BhcmFtc190ICpod19wYXJhbXMpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworfQorCitzdGF0aWMgaW50CitzbmRfYWQxODg5X2h3X2ZyZWUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBzbmRfcGNtX2hhcmR3YXJlX3Qgc25kX2FkMTg4OV9wbGF5YmFja19odyA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfCBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMgfCBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9IDgwMDAsCS8qIGRvY3Mgc2F5IDcwMDAsIGJ1dCB3ZSdyZSBsYXp5ICovCisJLnJhdGVfbWF4ID0gNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSBCVUZGRVJfQllURVNfTUFYLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gUEVSSU9EX0JZVEVTX01JTiwKKwkucGVyaW9kX2J5dGVzX21heCA9IFBFUklPRF9CWVRFU19NQVgsCisJLnBlcmlvZHNfbWluID0gUEVSSU9EU19NSU4sCisJLnBlcmlvZHNfbWF4ID0gUEVSSU9EU19NQVgsCisJLyouZmlmb19zaXplID0gMCwqLworfTsKKworc3RhdGljIHNuZF9wY21faGFyZHdhcmVfdCBzbmRfYWQxODg5X2NhcHR1cmVfaHcgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPSA0ODAwMCwJLyogZG9jcyBzYXkgd2UgY291bGQgdG8gVlNSLCBidXQgd2UncmUgbGF6eSAqLworCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gQlVGRkVSX0JZVEVTX01BWCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IFBFUklPRF9CWVRFU19NSU4sCisJLnBlcmlvZF9ieXRlc19tYXggPSBQRVJJT0RfQllURVNfTUFYLAorCS5wZXJpb2RzX21pbiA9IFBFUklPRFNfTUlOLAorCS5wZXJpb2RzX21heCA9IFBFUklPRFNfTUFYLAorCS8qLmZpZm9fc2l6ZSA9IDAsKi8KK307CisKK3N0YXRpYyBpbnQKK3NuZF9hZDE4ODlfcGxheWJhY2tfb3BlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzcykKK3sKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCXNuZF9wY21fcnVudGltZV90ICpydCA9IHNzLT5ydW50aW1lOworCisJY2hpcC0+cHN1YnMgPSBzczsKKwlydC0+aHcgPSBzbmRfYWQxODg5X3BsYXliYWNrX2h3OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NuZF9hZDE4ODlfY2FwdHVyZV9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnNzKQoreworCXN0cnVjdCBzbmRfYWQxODg5ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ0ID0gc3MtPnJ1bnRpbWU7CisKKwljaGlwLT5jc3VicyA9IHNzOworCXJ0LT5odyA9IHNuZF9hZDE4ODlfY2FwdHVyZV9odzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzbmRfYWQxODg5X3BsYXliYWNrX2Nsb3NlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnNzKQoreworCXN0cnVjdCBzbmRfYWQxODg5ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisJY2hpcC0+cHN1YnMgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzbmRfYWQxODg5X2NhcHR1cmVfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3MpCit7CisJc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKTsKKwljaGlwLT5jc3VicyA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NuZF9hZDE4ODlfcGxheWJhY2tfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzcykKK3sKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCXNuZF9wY21fcnVudGltZV90ICpydCA9IHNzLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHNzKTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3MpOworCXUxNiByZWc7CisKKwlhZDE4ODlfY2hhbm5lbF9yZXNldChjaGlwLCBBRF9DSEFOX1dBVik7CisKKwlyZWcgPSBhZDE4ODlfcmVhZHcoY2hpcCwgQURfRFNfV1NNQyk7CisJCisJLyogTWFzayBvdXQgMTYtYml0IC8gU3RlcmVvICovCisJcmVnICY9IH4oQURfRFNfV1NNQ19XQTE2IHwgQURfRFNfV1NNQ19XQVNUKTsKKworCWlmIChzbmRfcGNtX2Zvcm1hdF93aWR0aChydC0+Zm9ybWF0KSA9PSAxNikKKwkJcmVnIHw9IEFEX0RTX1dTTUNfV0ExNjsKKworCWlmIChydC0+Y2hhbm5lbHMgPiAxKQorCQlyZWcgfD0gQURfRFNfV1NNQ19XQVNUOworCisJLyogbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGNsb2JiZXIgb3Vyc2VsdmVzICovCisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCisJY2hpcC0+d2F2ZS5zaXplID0gc2l6ZTsKKwljaGlwLT53YXZlLnJlZyA9IHJlZzsKKwljaGlwLT53YXZlLmFkZHIgPSBydC0+ZG1hX2FkZHI7CisKKwlhZDE4ODlfd3JpdGV3KGNoaXAsIEFEX0RTX1dTTUMsIGNoaXAtPndhdmUucmVnKTsKKwkKKwkvKiBTZXQgc2FtcGxlIHJhdGVzIG9uIHRoZSBjb2RlYyAqLworCWFkMTg4OV93cml0ZXcoY2hpcCwgQURfRFNfV0FTLCBydC0+cmF0ZSk7CisKKwkvKiBTZXQgdXAgRE1BICovCisJYWQxODg5X2xvYWRfd2F2ZV9idWZmZXJfYWRkcmVzcyhjaGlwLCBjaGlwLT53YXZlLmFkZHIpOworCWFkMTg4OV9sb2FkX3dhdmVfYnVmZmVyX2NvdW50KGNoaXAsIHNpemUpOworCWFkMTg4OV9sb2FkX3dhdmVfaW50ZXJydXB0X2NvdW50KGNoaXAsIGNvdW50KTsKKworCS8qIHdyaXRlcyBmbHVzaCAqLworCWFkMTg4OV9yZWFkdyhjaGlwLCBBRF9EU19XU01DKTsKKwkKKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCQorCWFkMTg4OV9kZWJ1ZygicHJlcGFyZSBwbGF5YmFjazogYWRkciA9IDB4JXgsIGNvdW50ID0gJXUsICIKKwkJCSJzaXplID0gJXUsIHJlZyA9IDB4JXgsIHJhdGUgPSAldVxuIiwgY2hpcC0+d2F2ZS5hZGRyLAorCQkJY291bnQsIHNpemUsIHJlZywgcnQtPnJhdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzbmRfYWQxODg5X2NhcHR1cmVfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzcykKK3sKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCXNuZF9wY21fcnVudGltZV90ICpydCA9IHNzLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHNzKTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3MpOworCXUxNiByZWc7CisKKwlhZDE4ODlfY2hhbm5lbF9yZXNldChjaGlwLCBBRF9DSEFOX0FEQyk7CisJCisJcmVnID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1JBTUMpOworCisJLyogTWFzayBvdXQgMTYtYml0IC8gU3RlcmVvICovCisJcmVnICY9IH4oQURfRFNfUkFNQ19BRDE2IHwgQURfRFNfUkFNQ19BRFNUKTsKKworCWlmIChzbmRfcGNtX2Zvcm1hdF93aWR0aChydC0+Zm9ybWF0KSA9PSAxNikKKwkJcmVnIHw9IEFEX0RTX1JBTUNfQUQxNjsKKworCWlmIChydC0+Y2hhbm5lbHMgPiAxKQorCQlyZWcgfD0gQURfRFNfUkFNQ19BRFNUOworCisJLyogbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGNsb2JiZXIgb3Vyc2VsdmVzICovCisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCisJY2hpcC0+cmFtYy5zaXplID0gc2l6ZTsKKwljaGlwLT5yYW1jLnJlZyA9IHJlZzsKKwljaGlwLT5yYW1jLmFkZHIgPSBydC0+ZG1hX2FkZHI7CisKKwlhZDE4ODlfd3JpdGV3KGNoaXAsIEFEX0RTX1JBTUMsIGNoaXAtPnJhbWMucmVnKTsKKworCS8qIFNldCB1cCBETUEgKi8KKwlhZDE4ODlfbG9hZF9hZGNfYnVmZmVyX2FkZHJlc3MoY2hpcCwgY2hpcC0+cmFtYy5hZGRyKTsKKwlhZDE4ODlfbG9hZF9hZGNfYnVmZmVyX2NvdW50KGNoaXAsIHNpemUpOworCWFkMTg4OV9sb2FkX2FkY19pbnRlcnJ1cHRfY291bnQoY2hpcCwgY291bnQpOworCisJLyogd3JpdGVzIGZsdXNoICovCisJYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1JBTUMpOworCQorCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCisJYWQxODg5X2RlYnVnKCJwcmVwYXJlIGNhcHR1cmU6IGFkZHIgPSAweCV4LCBjb3VudCA9ICV1LCAiCisJCQkic2l6ZSA9ICV1LCByZWcgPSAweCV4LCByYXRlID0gJXVcbiIsIGNoaXAtPnJhbWMuYWRkciwKKwkJCWNvdW50LCBzaXplLCByZWcsIHJ0LT5yYXRlKTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBpcyBjYWxsZWQgaW4gYXRvbWljIGNvbnRleHQgd2l0aCBJUlEgZGlzYWJsZWQuCisgICBNdXN0IGJlIGFzIGZhc3QgYXMgcG9zc2libGUgYW5kIG5vdCBzbGVlcC4KKyAgIERNQSBzaG91bGQgYmUgKnRyaWdnZXJlZCogYnkgdGhpcyBjYWxsLgorICAgVGhlIFdTTUMgIldBRU4iIGJpdCB0cmlnZ2VycyBETUEgV2F2ZSBPbi9PZmYgKi8KK3N0YXRpYyBpbnQKK3NuZF9hZDE4ODlfcGxheWJhY2tfdHJpZ2dlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzcywgaW50IGNtZCkKK3sKKwl1MTYgd3NtYzsKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCQorCXdzbWMgPSBhZDE4ODlfcmVhZHcoY2hpcCwgQURfRFNfV1NNQyk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCS8qIGVuYWJsZSBETUEgbG9vcCAmIGludGVycnVwdHMgKi8KKwkJYWQxODg5X3dyaXRldyhjaGlwLCBBRF9ETUFfV0FWLCBBRF9ETUFfTE9PUCB8IEFEX0RNQV9JTV9DTlQpOworCQl3c21jIHw9IEFEX0RTX1dTTUNfV0FFTjsKKwkJLyogMSB0byBjbGVhciBDSFNTIGJpdCAqLworCQlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9DSFNTLCBBRF9ETUFfQ0hTU19XQVZTKTsKKwkJYWQxODg5X3VubXV0ZShjaGlwKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlhZDE4ODlfbXV0ZShjaGlwKTsKKwkJd3NtYyAmPSB+QURfRFNfV1NNQ19XQUVOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkKKwljaGlwLT53YXZlLnJlZyA9IHdzbWM7CisJYWQxODg5X3dyaXRldyhjaGlwLCBBRF9EU19XU01DLCB3c21jKTsJCisJYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1dTTUMpOwkvKiBmbHVzaCAqLworCisJLyogcmVzZXQgdGhlIGNoaXAgd2hlbiBTVE9QIC0gd2lsbCBkaXNhYmxlIElSUXMgKi8KKwlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUT1ApCisJCWFkMTg4OV9jaGFubmVsX3Jlc2V0KGNoaXAsIEFEX0NIQU5fV0FWKTsKKworCXJldHVybiAwOworfQorCisvKiB0aGlzIGlzIGNhbGxlZCBpbiBhdG9taWMgY29udGV4dCB3aXRoIElSUSBkaXNhYmxlZC4KKyAgIE11c3QgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZSBhbmQgbm90IHNsZWVwLgorICAgRE1BIHNob3VsZCBiZSAqdHJpZ2dlcmVkKiBieSB0aGlzIGNhbGwuCisgICBUaGUgUkFNQyAiQURFTiIgYml0IHRyaWdnZXJzIERNQSBBREMgT24vT2ZmICovCitzdGF0aWMgaW50CitzbmRfYWQxODg5X2NhcHR1cmVfdHJpZ2dlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzcywgaW50IGNtZCkKK3sKKwl1MTYgcmFtYzsKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCisJcmFtYyA9IGFkMTg4OV9yZWFkdyhjaGlwLCBBRF9EU19SQU1DKTsKKwkKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCS8qIGVuYWJsZSBETUEgbG9vcCAmIGludGVycnVwdHMgKi8KKwkJYWQxODg5X3dyaXRldyhjaGlwLCBBRF9ETUFfQURDLCBBRF9ETUFfTE9PUCB8IEFEX0RNQV9JTV9DTlQpOworCQlyYW1jIHw9IEFEX0RTX1JBTUNfQURFTjsKKwkJLyogMSB0byBjbGVhciBDSFNTIGJpdCAqLworCQlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9DSFNTLCBBRF9ETUFfQ0hTU19BRENTKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlyYW1jICY9IH5BRF9EU19SQU1DX0FERU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkKKwljaGlwLT5yYW1jLnJlZyA9IHJhbWM7CisJYWQxODg5X3dyaXRldyhjaGlwLCBBRF9EU19SQU1DLCByYW1jKTsJCisJYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1JBTUMpOwkvKiBmbHVzaCAqLworCQorCS8qIHJlc2V0IHRoZSBjaGlwIHdoZW4gU1RPUCAtIHdpbGwgZGlzYWJsZSBJUlFzICovCisJaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QKQorCQlhZDE4ODlfY2hhbm5lbF9yZXNldChjaGlwLCBBRF9DSEFOX0FEQyk7CisJCQorCXJldHVybiAwOworfQorCisvKiBDYWxsZWQgaW4gYXRvbWljIGNvbnRleHQgd2l0aCBJUlEgZGlzYWJsZWQgKi8KK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX2FkMTg4OV9wbGF5YmFja19wb2ludGVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnNzKQoreworCXNpemVfdCBwdHIgPSAwOworCXN0cnVjdCBzbmRfYWQxODg5ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisKKwlpZiAodW5saWtlbHkoIShjaGlwLT53YXZlLnJlZyAmIEFEX0RTX1dTTUNfV0FFTikpKQorCQlyZXR1cm4gMDsKKworCXB0ciA9IGFkMTg4OV9yZWFkbChjaGlwLCBBRF9ETUFfV0FWQ0EpOworCXB0ciAtPSBjaGlwLT53YXZlLmFkZHI7CisJCisJc25kX2Fzc2VydCgocHRyID49IDApICYmIChwdHIgPCBjaGlwLT53YXZlLnNpemUpLCByZXR1cm4gMCk7CisJCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzcy0+cnVudGltZSwgcHRyKTsKK30KKworLyogQ2FsbGVkIGluIGF0b21pYyBjb250ZXh0IHdpdGggSVJRIGRpc2FibGVkICovCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9hZDE4ODlfY2FwdHVyZV9wb2ludGVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnNzKQoreworCXNpemVfdCBwdHIgPSAwOworCXN0cnVjdCBzbmRfYWQxODg5ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisKKwlpZiAodW5saWtlbHkoIShjaGlwLT5yYW1jLnJlZyAmIEFEX0RTX1JBTUNfQURFTikpKQorCQlyZXR1cm4gMDsKKworCXB0ciA9IGFkMTg4OV9yZWFkbChjaGlwLCBBRF9ETUFfQURDQ0EpOworCXB0ciAtPSBjaGlwLT5yYW1jLmFkZHI7CisKKwlzbmRfYXNzZXJ0KChwdHIgPj0gMCkgJiYgKHB0ciA8IGNoaXAtPnJhbWMuc2l6ZSksIHJldHVybiAwKTsKKwkKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHNzLT5ydW50aW1lLCBwdHIpOworfQorCitzdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfYWQxODg5X3BsYXliYWNrX29wcyA9IHsKKwkub3BlbiA9IHNuZF9hZDE4ODlfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPSBzbmRfYWQxODg5X3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bCA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBzbmRfYWQxODg5X2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNuZF9hZDE4ODlfaHdfZnJlZSwKKwkucHJlcGFyZSA9IHNuZF9hZDE4ODlfcGxheWJhY2tfcHJlcGFyZSwKKwkudHJpZ2dlciA9IHNuZF9hZDE4ODlfcGxheWJhY2tfdHJpZ2dlciwKKwkucG9pbnRlciA9IHNuZF9hZDE4ODlfcGxheWJhY2tfcG9pbnRlciwgCit9OworCitzdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfYWQxODg5X2NhcHR1cmVfb3BzID0geworCS5vcGVuID0gc25kX2FkMTg4OV9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0gc25kX2FkMTg4OV9jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bCA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBzbmRfYWQxODg5X2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNuZF9hZDE4ODlfaHdfZnJlZSwKKwkucHJlcGFyZSA9IHNuZF9hZDE4ODlfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyID0gc25kX2FkMTg4OV9jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBzbmRfYWQxODg5X2NhcHR1cmVfcG9pbnRlciwgCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QKK3NuZF9hZDE4ODlfaW50ZXJydXB0KGludCBpcnEsIAorCQkgICAgIHZvaWQgKmRldl9pZCwgCisJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBzdDsKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IGRldl9pZDsKKworCXN0ID0gYWQxODg5X3JlYWRsKGNoaXAsIEFEX0RNQV9ESVNSKTsKKworCS8qIGNsZWFyIElTUiAqLworCWFkMTg4OV93cml0ZWwoY2hpcCwgQURfRE1BX0RJU1IsIHN0KTsKKworCXN0ICY9IEFEX0lOVFJfTUFTSzsKKworCWlmICh1bmxpa2VseSghc3QpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoc3QgJiAoQURfRE1BX0RJU1JfUE1BSXxBRF9ETUFfRElTUl9QVEFJKSkKKwkJYWQxODg5X2RlYnVnKCJVbmV4cGVjdGVkIG1hc3RlciBvciB0YXJnZXQgYWJvcnQgaW50ZXJydXB0IVxuIik7CisKKwlpZiAoKHN0ICYgQURfRE1BX0RJU1JfV0FWSSkgJiYgY2hpcC0+cHN1YnMpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cHN1YnMpOworCWlmICgoc3QgJiBBRF9ETUFfRElTUl9BRENJKSAmJiBjaGlwLT5jc3VicykKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5jc3Vicyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIAorc25kX2FkMTg4OV9wY21fZnJlZShzbmRfcGNtX3QgKnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IHBjbS0+cHJpdmF0ZV9kYXRhOworCWNoaXAtPnBjbSA9IE5VTEw7CisJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzbmRfYWQxODg5X3BjbV9pbml0KHN0cnVjdCBzbmRfYWQxODg5ICpjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKipycGNtKQoreworCWludCBlcnI7CisJc25kX3BjbV90ICpwY207CisKKwlpZiAocnBjbSkKKwkJKnJwY20gPSBOVUxMOworCisJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgY2hpcC0+Y2FyZC0+ZHJpdmVyLCBkZXZpY2UsIDEsIDEsICZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgCisJCQkmc25kX2FkMTg4OV9wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCSZzbmRfYWQxODg5X2NhcHR1cmVfb3BzKTsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlwY20tPnByaXZhdGVfZnJlZSA9IHNuZF9hZDE4ODlfcGNtX2ZyZWU7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlzdHJjcHkocGNtLT5uYW1lLCBjaGlwLT5jYXJkLT5zaG9ydG5hbWUpOworCQorCWNoaXAtPnBjbSA9IHBjbTsKKwljaGlwLT5wc3VicyA9IE5VTEw7CisJY2hpcC0+Y3N1YnMgPSBOVUxMOworCisJZXJyID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCQkJCXNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKKwkJCQkJCUJVRkZFUl9CWVRFU19NQVggLyAyLAorCQkJCQkJQlVGRkVSX0JZVEVTX01BWCk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiYnVmZmVyIGFsbG9jYXRpb24gZXJyb3I6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwkKKwlpZiAocnBjbSkKKwkJKnJwY20gPSBwY207CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzbmRfYWQxODg5X3Byb2NfcmVhZChzbmRfaW5mb19lbnRyeV90ICplbnRyeSwgc25kX2luZm9fYnVmZmVyX3QgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJdTE2IHJlZzsKKwlpbnQgdG1wOworCisJcmVnID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1dTTUMpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIldhdmUgb3V0cHV0OiAlc1xuIiwKKwkJCShyZWcgJiBBRF9EU19XU01DX1dBRU4pID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiV2F2ZSBDaGFubmVsczogJXNcbiIsCisJCQkocmVnICYgQURfRFNfV1NNQ19XQVNUKSA/ICJzdGVyZW8iIDogIm1vbm8iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJXYXZlIFF1YWxpdHk6ICVkLWJpdCBsaW5lYXJcbiIsCisJCQkocmVnICYgQURfRFNfV1NNQ19XQTE2KSA/IDE2IDogOCk7CisJCisJLyogV0FSUSBpcyBhdCBvZmZzZXQgMTIgKi8KKwl0bXAgPSAocmVnICYgQURfRFNfV1NNQ19XQVJRKSA/CisJCQkoKChyZWcgJiBBRF9EU19XU01DX1dBUlEgPj4gMTIpICYgMHgwMSkgPyAxMiA6IDE4KSA6IDQ7CisJdG1wIC89IChyZWcgJiBBRF9EU19XU01DX1dBU1QpID8gMiA6IDE7CisJCisJc25kX2lwcmludGYoYnVmZmVyLCAiV2F2ZSBGSUZPOiAlZCAlcyB3b3Jkc1xuXG4iLCB0bXAsCisJCQkocmVnICYgQURfRFNfV1NNQ19XQVNUKSA/ICJzdGVyZW8iIDogIm1vbm8iKTsKKwkJCQkKKwkKKwlzbmRfaXByaW50ZihidWZmZXIsICJTeW50aGVzaXMgb3V0cHV0OiAlc1xuIiwKKwkJCXJlZyAmIEFEX0RTX1dTTUNfU1lFTiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCQorCS8qIFNZUlEgaXMgYXQgb2Zmc2V0IDQgKi8KKwl0bXAgPSAocmVnICYgQURfRFNfV1NNQ19TWVJRKSA/CisJCQkoKChyZWcgJiBBRF9EU19XU01DX1NZUlEgPj4gNCkgJiAweDAxKSA/IDEyIDogMTgpIDogNDsKKwl0bXAgLz0gKHJlZyAmIEFEX0RTX1dTTUNfV0FTVCkgPyAyIDogMTsKKwkKKwlzbmRfaXByaW50ZihidWZmZXIsICJTeW50aGVzaXMgRklGTzogJWQgJXMgd29yZHNcblxuIiwgdG1wLAorCQkJKHJlZyAmIEFEX0RTX1dTTUNfV0FTVCkgPyAic3RlcmVvIiA6ICJtb25vIik7CisKKwlyZWcgPSBhZDE4ODlfcmVhZHcoY2hpcCwgQURfRFNfUkFNQyk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiQURDIGlucHV0OiAlc1xuIiwKKwkJCShyZWcgJiBBRF9EU19SQU1DX0FERU4pID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiQURDIENoYW5uZWxzOiAlc1xuIiwKKwkJCShyZWcgJiBBRF9EU19SQU1DX0FEU1QpID8gInN0ZXJlbyIgOiAibW9ubyIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFEQyBRdWFsaXR5OiAlZC1iaXQgbGluZWFyXG4iLAorCQkJKHJlZyAmIEFEX0RTX1JBTUNfQUQxNikgPyAxNiA6IDgpOworCQorCS8qIEFDUlEgaXMgYXQgb2Zmc2V0IDQgKi8KKwl0bXAgPSAocmVnICYgQURfRFNfUkFNQ19BQ1JRKSA/CisJCQkoKChyZWcgJiBBRF9EU19SQU1DX0FDUlEgPj4gNCkgJiAweDAxKSA/IDEyIDogMTgpIDogNDsKKwl0bXAgLz0gKHJlZyAmIEFEX0RTX1JBTUNfQURTVCkgPyAyIDogMTsKKwkKKwlzbmRfaXByaW50ZihidWZmZXIsICJBREMgRklGTzogJWQgJXMgd29yZHNcblxuIiwgdG1wLAorCQkJKHJlZyAmIEFEX0RTX1JBTUNfQURTVCkgPyAic3RlcmVvIiA6ICJtb25vIik7CisJCisJc25kX2lwcmludGYoYnVmZmVyLCAiUmVzYW1wbGVyIGlucHV0OiAlc1xuIiwKKwkJCXJlZyAmIEFEX0RTX1JBTUNfUkVFTiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCQkJCisJLyogUkVSUSBpcyBhdCBvZmZzZXQgMTIgKi8KKwl0bXAgPSAocmVnICYgQURfRFNfUkFNQ19SRVJRKSA/CisJCQkoKChyZWcgJiBBRF9EU19SQU1DX1JFUlEgPj4gMTIpICYgMHgwMSkgPyAxMiA6IDE4KSA6IDQ7CisJdG1wIC89IChyZWcgJiBBRF9EU19SQU1DX0FEU1QpID8gMiA6IDE7CisJCisJc25kX2lwcmludGYoYnVmZmVyLCAiUmVzYW1wbGVyIEZJRk86ICVkICVzIHdvcmRzXG5cbiIsIHRtcCwKKwkJCShyZWcgJiBBRF9EU19XU01DX1dBU1QpID8gInN0ZXJlbyIgOiAibW9ubyIpOworCQkJCQorCQorCS8qIGRvYyBzYXlzIExTQiByZXByZXNlbnRzIC0xLjVkQiwgYnV0IHRoZSBtYXggdmFsdWUgKC05NC41ZEIpCisJc3VnZ2VzdHMgdGhhdCBMU0IgaXMgLTNkQiwgd2hpY2ggaXMgbW9yZSBjb2hlcmVudCB3aXRoIHRoZSBsb2dhcml0aG1pYworCW5hdHVyZSBvZiB0aGUgZEIgc2NhbGUgKi8KKwlyZWcgPSBhZDE4ODlfcmVhZHcoY2hpcCwgQURfRFNfV0FEQSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiTGVmdDogJXMsIC0lZCBkQlxuIiwKKwkJCShyZWcgJiBBRF9EU19XQURBX0xXQU0pID8gIm11dGUiIDogInVubXV0ZSIsCisJCQkoKHJlZyAmIEFEX0RTX1dBREFfTFdBQSkgPj4gOCkgKiAzKTsKKwlyZWcgPSBhZDE4ODlfcmVhZHcoY2hpcCwgQURfRFNfV0FEQSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiUmlnaHQ6ICVzLCAtJWQgZEJcbiIsCisJCQkocmVnICYgQURfRFNfV0FEQV9SV0FNKSA/ICJtdXRlIiA6ICJ1bm11dGUiLAorCQkJKChyZWcgJiBBRF9EU19XQURBX1JXQUEpID4+IDgpICogMyk7CisJCisJcmVnID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX1dBUyk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiV2F2ZSBzYW1wbGVyYXRlOiAldSBIelxuIiwgcmVnKTsKKwlyZWcgPSBhZDE4ODlfcmVhZHcoY2hpcCwgQURfRFNfUkVTKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJSZXNhbXBsZXIgc2FtcGxlcmF0ZTogJXUgSHpcbiIsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdAorc25kX2FkMTg4OV9wcm9jX2luaXQoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXApCit7CisJc25kX2luZm9fZW50cnlfdCAqZW50cnk7CisKKwlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsIGNoaXAtPmNhcmQtPmRyaXZlciwgJmVudHJ5KSkKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCAxMDI0LCBzbmRfYWQxODg5X3Byb2NfcmVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWM5N19xdWlyayBhYzk3X3F1aXJrc1tdID0geworCXsKKwkJLnN1YnZlbmRvciA9IDB4MTFkNCwJLyogQUQgKi8KKwkJLnN1YmRldmljZSA9IDB4MTg4OSwJLyogQUQxODg5ICovCisJCS5jb2RlY19pZCA9IEFDOTdfSURfQUQxODE5LAorCQkubmFtZSA9ICJBRDE4ODkiLAorCQkudHlwZSA9IEFDOTdfVFVORV9IUF9PTkxZCisJfSwKKwl7IH0gLyogdGVybWluYXRvciAqLworfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0CitzbmRfYWQxODg5X2FjOTdfeGluaXQoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXApCit7CisJdTE2IHJlZzsKKworCXJlZyA9IGFkMTg4OV9yZWFkdyhjaGlwLCBBRF9BQzk3X0FDSUMpOworCXJlZyB8PSBBRF9BQzk3X0FDSUNfQUNSRDsJCS8qIFJlc2V0IERpc2FibGUgKi8KKwlhZDE4ODlfd3JpdGV3KGNoaXAsIEFEX0FDOTdfQUNJQywgcmVnKTsKKwlhZDE4ODlfcmVhZHcoY2hpcCwgQURfQUM5N19BQ0lDKTsJLyogZmx1c2ggcG9zdGVkIHdyaXRlICovCisJdWRlbGF5KDEwKTsKKwkvKiBJbnRlcmZhY2UgRW5hYmxlICovCisJcmVnIHw9IEFEX0FDOTdfQUNJQ19BQ0lFOworCWFkMTg4OV93cml0ZXcoY2hpcCwgQURfQUM5N19BQ0lDLCByZWcpOworCQorCXNuZF9hZDE4ODlfYWM5N19yZWFkeShjaGlwKTsKKworCS8qIEF1ZGlvIFN0cmVhbSBPdXRwdXQgfCBWYXJpYWJsZSBTYW1wbGUgUmF0ZSBNb2RlICovCisJcmVnID0gYWQxODg5X3JlYWR3KGNoaXAsIEFEX0FDOTdfQUNJQyk7CisJcmVnIHw9IEFEX0FDOTdfQUNJQ19BU09FIHwgQURfQUM5N19BQ0lDX1ZTUk07CisJYWQxODg5X3dyaXRldyhjaGlwLCBBRF9BQzk3X0FDSUMsIHJlZyk7CisJYWQxODg5X3JlYWR3KGNoaXAsIEFEX0FDOTdfQUNJQyk7IC8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLworCit9CisKK3N0YXRpYyB2b2lkCitzbmRfYWQxODg5X2FjOTdfYnVzX2ZyZWUoYWM5N19idXNfdCAqYnVzKQoreworCXN0cnVjdCBzbmRfYWQxODg5ICpjaGlwID0gYnVzLT5wcml2YXRlX2RhdGE7CisJY2hpcC0+YWM5N19idXMgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc25kX2FkMTg4OV9hYzk3X2ZyZWUoYWM5N190ICphYzk3KQoreworCXN0cnVjdCBzbmRfYWQxODg5ICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCWNoaXAtPmFjOTcgPSBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX2FkMTg4OV9hYzk3X2luaXQoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAsIGNvbnN0IGNoYXIgKnF1aXJrX292ZXJyaWRlKQoreworCWludCBlcnI7CisJYWM5N190ZW1wbGF0ZV90IGFjOTc7CisJc3RhdGljIGFjOTdfYnVzX29wc190IG9wcyA9IHsKKwkJLndyaXRlID0gc25kX2FkMTg4OV9hYzk3X3dyaXRlLAorCQkucmVhZCA9IHNuZF9hZDE4ODlfYWM5N19yZWFkLAorCX07CisKKwkvKiBkb2luZyB0aGF0IGhlcmUsIGl0IHdvcmtzLiAqLworCXNuZF9hZDE4ODlfYWM5N194aW5pdChjaGlwKTsKKworCWVyciA9IHNuZF9hYzk3X2J1cyhjaGlwLT5jYXJkLCAwLCAmb3BzLCBjaGlwLCAmY2hpcC0+YWM5N19idXMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCQorCWNoaXAtPmFjOTdfYnVzLT5wcml2YXRlX2ZyZWUgPSBzbmRfYWQxODg5X2FjOTdfYnVzX2ZyZWU7CisKKwltZW1zZXQoJmFjOTcsIDAsIHNpemVvZihhYzk3KSk7CisJYWM5Ny5wcml2YXRlX2RhdGEgPSBjaGlwOworCWFjOTcucHJpdmF0ZV9mcmVlID0gc25kX2FkMTg4OV9hYzk3X2ZyZWU7CisJYWM5Ny5wY2kgPSBjaGlwLT5wY2k7CisKKwllcnIgPSBzbmRfYWM5N19taXhlcihjaGlwLT5hYzk3X2J1cywgJmFjOTcsICZjaGlwLT5hYzk3KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwkJCisJc25kX2FjOTdfdHVuZV9oYXJkd2FyZShjaGlwLT5hYzk3LCBhYzk3X3F1aXJrcywgcXVpcmtfb3ZlcnJpZGUpOworCQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzbmRfYWQxODg5X2ZyZWUoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXApCit7CisJaWYgKGNoaXAtPmlycSA8IDApCisJCWdvdG8gc2tpcF9odzsKKworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCisJYWQxODg5X211dGUoY2hpcCk7CisKKwkvKiBUdXJuIG9mZiBpbnRlcnJ1cHQgb24gY291bnQgYW5kIHplcm8gRE1BIHJlZ2lzdGVycyAqLworCWFkMTg4OV9jaGFubmVsX3Jlc2V0KGNoaXAsIEFEX0NIQU5fV0FWIHwgQURfQ0hBTl9BREMpOworCisJLyogY2xlYXIgRElTUi4gSWYgd2UgZG9uJ3QsIHdlJ2QgYmV0dGVyIGp1bXAgb2ZmIHRoZSBFaWZmZWwgVG93ZXIgKi8KKwlhZDE4ODlfd3JpdGVsKGNoaXAsIEFEX0RNQV9ESVNSLCBBRF9ETUFfRElTUl9QVEFJIHwgQURfRE1BX0RJU1JfUE1BSSk7CisJYWQxODg5X3JlYWRsKGNoaXAsIEFEX0RNQV9ESVNSKTsJLyogZmx1c2gsIGRhbW1pdCEgKi8KKworCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisKKwlzeW5jaHJvbml6ZV9pcnEoY2hpcC0+aXJxKTsKKwkKKwlpZiAoY2hpcC0+aXJxID49IDApCisJCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQqKWNoaXApOworCitza2lwX2h3OgorCWlmIChjaGlwLT5pb2Jhc2UpCisJCWlvdW5tYXAoY2hpcC0+aW9iYXNlKTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKworCWtmcmVlKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorc25kX2FkMTg4OV9kZXZfZnJlZShzbmRfZGV2aWNlX3QgKmRldmljZSkgCit7CisJc3RydWN0IHNuZF9hZDE4ODkgKmNoaXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOworCXJldHVybiBzbmRfYWQxODg5X2ZyZWUoY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzbmRfYWQxODg5X2luaXQoc3RydWN0IHNuZF9hZDE4ODkgKmNoaXApIAoreworCWFkMTg4OV93cml0ZXcoY2hpcCwgQURfRFNfQ0NTLCBBRF9EU19DQ1NfQ0xLRU4pOyAvKiB0dXJuIG9uIGNsb2NrICovCisJYWQxODg5X3JlYWR3KGNoaXAsIEFEX0RTX0NDUyk7CS8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLworCisJbWRlbGF5KDEwKTsKKworCS8qIGVuYWJsZSBNYXN0ZXIgYW5kIFRhcmdldCBhYm9ydCBpbnRlcnJ1cHRzICovCisJYWQxODg5X3dyaXRlbChjaGlwLCBBRF9ETUFfRElTUiwgQURfRE1BX0RJU1JfUE1BRSB8IEFEX0RNQV9ESVNSX1BUQUUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzbmRfYWQxODg5X2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLAorCQkgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCSAgc3RydWN0IHNuZF9hZDE4ODkgKipyY2hpcCkKK3sKKwlpbnQgZXJyOworCisJc3RydWN0IHNuZF9hZDE4ODkgKmNoaXA7CisJc3RhdGljIHNuZF9kZXZpY2Vfb3BzX3Qgb3BzID0geworCQkuZGV2X2ZyZWUgPSBzbmRfYWQxODg5X2Rldl9mcmVlLAorCX07CisKKwkqcmNoaXAgPSBOVUxMOworCisJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCisJCXJldHVybiBlcnI7CisJCisJLyogY2hlY2sgUENJIGF2YWlsYWJpbGl0eSAoMzJiaXQgRE1BKSAqLworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHhmZmZmZmZmZikgPCAwIHx8CisJICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIDB4ZmZmZmZmZmYpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJvciBzZXR0aW5nIDMyLWJpdCBETUEgbWFzay5cbiIpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBhbGxvY2F0ZSBjaGlwIHNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvLWZpbGxlZCBtZW1vcnkgKi8KKwlpZiAoKGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljaGlwLT5jYXJkID0gY2FyZDsKKwljYXJkLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCWNoaXAtPnBjaSA9IHBjaTsKKwljaGlwLT5pcnEgPSAtMTsKKworCS8qICgxKSBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLworCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksIGNhcmQtPmRyaXZlcikpIDwgMCkKKwkJZ290byBmcmVlX2FuZF9yZXQ7CisKKwljaGlwLT5iYXIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKKwljaGlwLT5pb2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoY2hpcC0+YmFyLCBwY2lfcmVzb3VyY2VfbGVuKHBjaSwgMCkpOworCWlmIChjaGlwLT5pb2Jhc2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gcmVzZXJ2ZSByZWdpb24uXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGZyZWVfYW5kX3JldDsKKwl9CisJCisJcGNpX3NldF9tYXN0ZXIocGNpKTsKKworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsJLyogb25seSBub3cgY2FuIHdlIGNhbGwgYWQxODg5X2ZyZWUgKi8KKworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2FkMTg4OV9pbnRlcnJ1cHQsCisJCQlTQV9JTlRFUlJVUFR8U0FfU0hJUlEsIGNhcmQtPmRyaXZlciwgKHZvaWQqKWNoaXApKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCBvYnRhaW4gSVJRICVkXG4iLCBwY2ktPmlycSk7CisJCXNuZF9hZDE4ODlfZnJlZShjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwljaGlwLT5pcnEgPSBwY2ktPmlycTsKKwlzeW5jaHJvbml6ZV9pcnEoY2hpcC0+aXJxKTsKKworCS8qICgyKSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hpcCBoYXJkd2FyZSAqLworCWlmICgoZXJyID0gc25kX2FkMTg4OV9pbml0KGNoaXApKSA8IDApIHsKKwkJc25kX2FkMTg4OV9mcmVlKGNoaXApOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSkgPCAwKSB7CisJCXNuZF9hZDE4ODlfZnJlZShjaGlwKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKKwkqcmNoaXAgPSBjaGlwOworCisJcmV0dXJuIDA7CisKK2ZyZWVfYW5kX3JldDoKKwlpZiAoY2hpcCkKKwkJa2ZyZWUoY2hpcCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX2FkMTg4OV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKKwlpbnQgZXJyOworCXN0YXRpYyBpbnQgZGV2bm87CisJc25kX2NhcmRfdCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX2FkMTg4OSAqY2hpcDsKKworCS8qICgxKSAqLworCWlmIChkZXZubyA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFlbmFibGVbZGV2bm9dKSB7CisJCWRldm5vKys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCS8qICgyKSAqLworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCAwKTsKKwkvKiBYWFggUkVWSVNJVDogd2UgY2FuIHByb2JhYmx5IGFsbG9jYXRlIGNoaXAgaW4gdGhpcyBjYWxsICovCisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQUQxODg5Iik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkFuYWxvZyBEZXZpY2VzIEFEMTg4OSIpOworCisJLyogKDMpICovCisJZXJyID0gc25kX2FkMTg4OV9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZnJlZV9hbmRfcmV0OworCisJLyogKDQpICovCisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisJCWNhcmQtPnNob3J0bmFtZSwgY2hpcC0+YmFyLCBjaGlwLT5pcnEpOworCisJLyogKDUpICovCisJLyogcmVnaXN0ZXIgQUM5NyBtaXhlciAqLworCWVyciA9IHNuZF9hZDE4ODlfYWM5N19pbml0KGNoaXAsIGFjOTdfcXVpcmtbZGV2bm9dKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmcmVlX2FuZF9yZXQ7CisJCisJZXJyID0gc25kX2FkMTg4OV9wY21faW5pdChjaGlwLCAwLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmcmVlX2FuZF9yZXQ7CisKKwkvKiByZWdpc3RlciBwcm9jIGludGVyZmFjZSAqLworCXNuZF9hZDE4ODlfcHJvY19pbml0KGNoaXApOworCisJLyogKDYpICovCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZnJlZV9hbmRfcmV0OworCisJLyogKDcpICovCisJcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisKKwlkZXZubysrOworCXJldHVybiAwOworCitmcmVlX2FuZF9yZXQ6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK3NuZF9hZDE4ODlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc25kX2NhcmRfZnJlZShwY2lfZ2V0X2RydmRhdGEocGNpKSk7CisJcGNpX3NldF9kcnZkYXRhKHBjaSwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWQxODg5X2lkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FOQUxPR19ERVZJQ0VTLCBQQ0lfREVWSUNFX0lEX0FEMTg4OUpTKSB9LAorCXsgMCwgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX2FkMTg4OV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWQxODg5X3BjaSA9IHsKKwkubmFtZSA9ICJBRDE4ODkgQXVkaW8iLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pZF90YWJsZSA9IHNuZF9hZDE4ODlfaWRzLAorCS5wcm9iZSA9IHNuZF9hZDE4ODlfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hZDE4ODlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CithbHNhX2FkMTg4OV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFkMTg4OV9wY2kpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK2Fsc2FfYWQxODg5X2Zpbmkodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkMTg4OV9wY2kpOworfQorCittb2R1bGVfaW5pdChhbHNhX2FkMTg4OV9pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfYWQxODg5X2ZpbmkpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5oIGIvc291bmQvcGNpL2FkMTg4OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmRhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvYWQxODg5LmgKQEAgLTAsMCArMSwxODkgQEAKKy8qIEFuYWxvZyBEZXZpY2VzIDE4ODkgYXVkaW8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIEt5bGUgTWNNYXJ0aW4gPGt5bGVAcGFyaXNjLWxpbnV4Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fQUQxODg5X0hfXworI2RlZmluZSBfX0FEMTg4OV9IX18KKworI2RlZmluZSBBRF9EU19XU01DCTB4MDAgLyogd2F2ZS9zeW50aGVzaXMgY2hhbm5lbCBtaXhlciBjb250cm9sICovCisjZGVmaW5lICBBRF9EU19XU01DX1NZRU4gMHgwMDA0IC8qIHN5bnRoZXNpcyBjaGFubmVsIGVuYWJsZSAqLworI2RlZmluZSAgQURfRFNfV1NNQ19TWVJRIDB4MDAzMCAvKiBzeW50aC4gZmlmbyByZXF1ZXN0IHBvaW50ICovCisjZGVmaW5lICBBRF9EU19XU01DX1dBMTYgMHgwMTAwIC8qIHdhdmUgY2hhbm5lbCAxNmJpdCBzZWxlY3QgKi8KKyNkZWZpbmUgIEFEX0RTX1dTTUNfV0FTVCAweDAyMDAgLyogd2F2ZSBjaGFubmVsIHN0ZXJlbyBzZWxlY3QgKi8KKyNkZWZpbmUgIEFEX0RTX1dTTUNfV0FFTiAweDA0MDAgLyogd2F2ZSBjaGFubmVsIGVuYWJsZSAqLworI2RlZmluZSAgQURfRFNfV1NNQ19XQVJRIDB4MzAwMCAvKiB3YXZlIGZpZm8gcmVxdWVzdCBwb2ludCAqLworCisjZGVmaW5lIEFEX0RTX1JBTUMJMHgwMiAvKiByZXNhbXBsZXIvQURDIGNoYW5uZWwgbWl4ZXIgY29udHJvbCAqLworI2RlZmluZSAgQURfRFNfUkFNQ19BRDE2IDB4MDAwMSAvKiBBREMgY2hhbm5lbCAxNmJpdCBzZWxlY3QgKi8KKyNkZWZpbmUgIEFEX0RTX1JBTUNfQURTVCAweDAwMDIgLyogQURDIGNoYW5uZWwgc3RlcmVvIHNlbGVjdCAqLworI2RlZmluZSAgQURfRFNfUkFNQ19BREVOIDB4MDAwNCAvKiBBREMgY2hhbm5lbCBlbmFibGUgKi8KKyNkZWZpbmUgIEFEX0RTX1JBTUNfQUNSUSAweDAwMzAgLyogQURDIGZpZm8gcmVxdWVzdCBwb2ludCAqLworI2RlZmluZSAgQURfRFNfUkFNQ19SRUVOIDB4MDQwMCAvKiByZXNhbXBsZXIgY2hhbm5lbCBlbmFibGUgKi8KKyNkZWZpbmUgIEFEX0RTX1JBTUNfUkVSUSAweDMwMDAgLyogcmVzLiBmaWZvIHJlcXVlc3QgcG9pbnQgKi8KKworI2RlZmluZSBBRF9EU19XQURBCTB4MDQgLyogd2F2ZSBjaGFubmVsIG1peCBhdHRlbnVhdGlvbiAqLworI2RlZmluZSAgQURfRFNfV0FEQV9SV0FNIDB4MDA4MCAvKiByaWdodCB3YXZlIG11dGUgKi8KKyNkZWZpbmUgIEFEX0RTX1dBREFfUldBQSAweDAwMWYgLyogcmlnaHQgd2F2ZSBhdHRlbnVhdGlvbiAqLworI2RlZmluZSAgQURfRFNfV0FEQV9MV0FNIDB4ODAwMCAvKiBsZWZ0IHdhdmUgbXV0ZSAqLworI2RlZmluZSAgQURfRFNfV0FEQV9MV0FBIDB4M2UwMCAvKiBsZWZ0IHdhdmUgYXR0ZW51YXRpb24gKi8KKworI2RlZmluZSBBRF9EU19TWURBCTB4MDYgLyogc3ludGhlc2lzIGNoYW5uZWwgbWl4IGF0dGVudWF0aW9uICovCisjZGVmaW5lICBBRF9EU19TWURBX1JTWU0gMHgwMDgwIC8qIHJpZ2h0IHN5bnRoZXNpcyBtdXRlICovCisjZGVmaW5lICBBRF9EU19TWURBX1JTWUEgMHgwMDFmIC8qIHJpZ2h0IHN5bnRoZXNpcyBhdHRlbnVhdGlvbiAqLworI2RlZmluZSAgQURfRFNfU1lEQV9MU1lNIDB4ODAwMCAvKiBsZWZ0IHN5bnRoZXNpcyBtdXRlICovCisjZGVmaW5lICBBRF9EU19TWURBX0xTWUEgMHgzZTAwIC8qIGxlZnQgc3ludGhlc2lzIGF0dGVudWF0aW9uICovCisKKyNkZWZpbmUgQURfRFNfV0FTCTB4MDggLyogd2F2ZSBjaGFubmVsIHNhbXBsZSByYXRlICovCisjZGVmaW5lICBBRF9EU19XQVNfV0FTICAgMHhmZmZmIC8qIHNhbXBsZSByYXRlIG1hc2sgKi8KKworI2RlZmluZSBBRF9EU19SRVMJMHgwYSAvKiByZXNhbXBsZXIgY2hhbm5lbCBzYW1wbGUgcmF0ZSAqLworI2RlZmluZSAgQURfRFNfUkVTX1JFUyAgIDB4ZmZmZiAvKiBzYW1wbGUgcmF0ZSBtYXNrICovCisKKyNkZWZpbmUgQURfRFNfQ0NTCTB4MGMgLyogY2hpcCBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSAgQURfRFNfQ0NTX0FETyAgIDB4MDAwMSAvKiBBREMgY2hhbm5lbCBvdmVyZmxvdyAqLworI2RlZmluZSAgQURfRFNfQ0NTX1JFTyAgIDB4MDAwMiAvKiByZXNhbXBsZXIgY2hhbm5lbCBvdmVyZmxvdyAqLworI2RlZmluZSAgQURfRFNfQ0NTX1NZVSAgIDB4MDAwNCAvKiBzeW50aGVzaXMgY2hhbm5lbCB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgIEFEX0RTX0NDU19XQVUgICAweDAwMDggLyogd2F2ZSBjaGFubmVsIHVuZGVyZmxvdyAqLworLyogYml0cyA0IC0+IDcsIDksIDExIC0+IDE0IHJlc2VydmVkICovCisjZGVmaW5lICBBRF9EU19DQ1NfWFREICAgMHgwMTAwIC8qIHh0ZCBkZWxheSBjb250cm9sICg0MDk2IGNsb2NrIGN5Y2xlcykgKi8KKyNkZWZpbmUgIEFEX0RTX0NDU19QREFMTCAweDA0MDAgLyogcG93ZXIgKi8KKyNkZWZpbmUgIEFEX0RTX0NDU19DTEtFTiAweDgwMDAgLyogY2xvY2sgKi8KKworI2RlZmluZSBBRF9ETUFfUkVTQkEJMHg0MCAvKiBSRVMgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFEX0RNQV9SRVNDQQkweDQ0IC8qIFJFUyBjdXJyZW50IGFkZHJlc3MgKi8KKyNkZWZpbmUgQURfRE1BX1JFU0JDCTB4NDggLyogUkVTIGJhc2UgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX1JFU0NDCTB4NGMgLyogUkVTIGN1cnJlbnQgY291bnQgKi8KKworI2RlZmluZSBBRF9ETUFfQURDQkEJMHg1MCAvKiBBREMgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFEX0RNQV9BRENDQQkweDU0IC8qIEFEQyBjdXJyZW50IGFkZHJlc3MgKi8KKyNkZWZpbmUgQURfRE1BX0FEQ0JDCTB4NTggLyogQURDIGJhc2UgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX0FEQ0NDCTB4NWMgLyogQURDIGN1cnJlbnQgY291bnQgKi8KKworI2RlZmluZSBBRF9ETUFfU1lOQkEJMHg2MCAvKiBzeW50aCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQURfRE1BX1NZTkNBCTB4NjQgLyogc3ludGggY3VycmVudCBhZGRyZXNzICovCisjZGVmaW5lIEFEX0RNQV9TWU5CQwkweDY4IC8qIHN5bnRoIGJhc2UgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX1NZTkNDCTB4NmMgLyogc3ludGggY3VycmVudCBjb3VudCAqLworCisjZGVmaW5lIEFEX0RNQV9XQVZCQQkweDcwIC8qIHdhdmUgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFEX0RNQV9XQVZDQQkweDc0IC8qIHdhdmUgY3VycmVudCBhZGRyZXNzICovCisjZGVmaW5lIEFEX0RNQV9XQVZCQwkweDc4IC8qIHdhdmUgYmFzZSBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfV0FWQ0MJMHg3YyAvKiB3YXZlIGN1cnJlbnQgY291bnQgKi8KKworI2RlZmluZSBBRF9ETUFfUkVTSUMJMHg4MCAvKiBSRVMgZG1hIGludGVycnVwdCBjdXJyZW50IGJ5dGUgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX1JFU0lCCTB4ODQgLyogUkVTIGRtYSBpbnRlcnJ1cHQgYmFzZSBieXRlIGNvdW50ICovCisKKyNkZWZpbmUgQURfRE1BX0FEQ0lDCTB4ODggLyogQURDIGRtYSBpbnRlcnJ1cHQgY3VycmVudCBieXRlIGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9BRENJQgkweDhjIC8qIEFEQyBkbWEgaW50ZXJydXB0IGJhc2UgYnl0ZSBjb3VudCAqLworCisjZGVmaW5lIEFEX0RNQV9TWU5JQwkweDkwIC8qIHN5bnRoIGRtYSBpbnRlcnJ1cHQgY3VycmVudCBieXRlIGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9TWU5JQgkweDk0IC8qIHN5bnRoIGRtYSBpbnRlcnJ1cHQgYmFzZSBieXRlIGNvdW50ICovCisKKyNkZWZpbmUgQURfRE1BX1dBVklDCTB4OTggLyogd2F2ZSBkbWEgaW50ZXJydXB0IGN1cnJlbnQgYnl0ZSBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfV0FWSUIJMHg5YyAvKiB3YXZlIGRtYSBpbnRlcnJ1cHQgYmFzZSBieXRlIGNvdW50ICovCisKKyNkZWZpbmUgIEFEX0RNQV9JQ0MJMHhmZmZmZmYgLyogY3VycmVudCBieXRlIGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgIEFEX0RNQV9JQkMJMHhmZmZmZmYgLyogYmFzZSBieXRlIGNvdW50IG1hc2sgKi8KKy8qIGJpdHMgMjQgLT4gMzEgcmVzZXJ2ZWQgKi8KKworLyogNCBieXRlcyBwYWQgKi8KKyNkZWZpbmUgQURfRE1BX0FEQwkweGE4CS8qIEFEQyAgICAgIGRtYSBjb250cm9sIGFuZCBzdGF0dXMgKi8KKyNkZWZpbmUgQURfRE1BX1NZTlRICTB4YjAJLyogU3ludGggICAgZG1hIGNvbnRyb2wgYW5kIHN0YXR1cyAqLworI2RlZmluZSBBRF9ETUFfV0FWCTB4YjgJLyogd2F2ZSAgICAgZG1hIGNvbnRyb2wgYW5kIHN0YXR1cyAqLworI2RlZmluZSBBRF9ETUFfUkVTCTB4YTAJLyogUmVzYW1wbGUgZG1hIGNvbnRyb2wgYW5kIHN0YXR1cyAqLworCisjZGVmaW5lICBBRF9ETUFfU0dERQkweDAwMDEgLyogU0dEIG1vZGUgZW5hYmxlICovCisjZGVmaW5lICBBRF9ETUFfTE9PUAkweDAwMDIgLyogbG9vcCBlbmFibGUgKi8KKyNkZWZpbmUgIEFEX0RNQV9JTQkweDAwMGMgLyogaW50ZXJydXB0IG1vZGUgbWFzayAqLworI2RlZmluZSAgQURfRE1BX0lNX0RJUwkofkFEX0RNQV9JTSkJLyogZGlzYWJsZSAqLworI2RlZmluZSAgQURfRE1BX0lNX0NOVAkweDAwMDQgLyogaW50ZXJydXB0IG9uIGNvdW50ICovCisjZGVmaW5lICBBRF9ETUFfSU1fU0dECTB4MDAwOCAvKiBpbnRlcnJ1cHQgb24gU0dEIGZsYWcgKi8KKyNkZWZpbmUgIEFEX0RNQV9JTV9FT0wJMHgwMDBjIC8qIGludGVycnVwdCBvbiBFbmQgb2YgTGlua2VkIExpc3QgKi8KKyNkZWZpbmUgIEFEX0RNQV9TR0RTCTB4MDAzMCAvKiBTR0Qgc3RhdHVzICovCisjZGVmaW5lICBBRF9ETUFfU0ZMRwkweDAwNDAgLyogU0dEIGZsYWcgKi8KKyNkZWZpbmUgIEFEX0RNQV9FT0wJMHgwMDgwIC8qIFNHRCBlbmQgb2YgbGlzdCAqLworLyogYml0cyA4IC0+IDE1IHJlc2VydmVkICovCisKKyNkZWZpbmUgQURfRE1BX0RJU1IJMHhjMCAvKiBkbWEgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgQURfRE1BX0RJU1JfUkVTSSAweDAwMDAwMSAvKiByZXNhbXBsZXIgY2hhbm5lbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIEFEX0RNQV9ESVNSX0FEQ0kgMHgwMDAwMDIgLyogQURDIGNoYW5uZWwgaW50ZXJydXB0ICovCisjZGVmaW5lICBBRF9ETUFfRElTUl9TWU5JIDB4MDAwMDA0IC8qIHN5bnRoZXNpcyBjaGFubmVsIGludGVycnVwdCAqLworI2RlZmluZSAgQURfRE1BX0RJU1JfV0FWSSAweDAwMDAwOCAvKiB3YXZlIGNoYW5uZWwgaW50ZXJydXB0ICovCisvKiBiaXRzIDQsIDUgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgIEFEX0RNQV9ESVNSX1NFUFMgMHgwMDAwNDAgLyogc2VyaWFsIGVlcHJvbSBzdGF0dXMgKi8KKy8qIGJpdHMgNyAtPiAxMyByZXNlcnZlZCAqLworI2RlZmluZSAgQURfRE1BX0RJU1JfUE1BSSAweDAwNDAwMCAvKiBwY2kgbWFzdGVyIGFib3J0IGludGVycnVwdCAqLworI2RlZmluZSAgQURfRE1BX0RJU1JfUFRBSSAweDAwODAwMCAvKiBwY2kgdGFyZ2V0IGFib3J0IGludGVycnVwdCAqLworI2RlZmluZSAgQURfRE1BX0RJU1JfUFRBRSAweDAxMDAwMCAvKiBwY2kgdGFyZ2V0IGFib3J0IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIEFEX0RNQV9ESVNSX1BNQUUgMHgwMjAwMDAgLyogcGNpIG1hc3RlciBhYm9ydCBpbnRlcnJ1cHQgZW5hYmxlICovCisvKiBiaXRzIDE5IC0+IDMxIHJlc2VydmVkICovCisKKy8qIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBBRF9JTlRSX01BU0sgICAgIChBRF9ETUFfRElTUl9SRVNJfEFEX0RNQV9ESVNSX0FEQ0l8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEX0RNQV9ESVNSX1dBVkl8QURfRE1BX0RJU1JfU1lOSXwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQURfRE1BX0RJU1JfUE1BSXxBRF9ETUFfRElTUl9QVEFJKQorCisjZGVmaW5lIEFEX0RNQV9DSFNTCTB4YzQgLyogZG1hIGNoYW5uZWwgc3RvcCBzdGF0dXMgKi8KKyNkZWZpbmUgIEFEX0RNQV9DSFNTX1JFU1MgMHgwMDAwMDEgLyogcmVzYW1wbGVyIGNoYW5uZWwgc3RvcHBlZCAqLworI2RlZmluZSAgQURfRE1BX0NIU1NfQURDUyAweDAwMDAwMiAvKiBBREMgY2hhbm5lbCBzdG9wcGVkICovCisjZGVmaW5lICBBRF9ETUFfQ0hTU19TWU5TIDB4MDAwMDA0IC8qIHN5bnRoZXNpcyBjaGFubmVsIHN0b3BwZWQgKi8KKyNkZWZpbmUgIEFEX0RNQV9DSFNTX1dBVlMgMHgwMDAwMDggLyogd2F2ZSBjaGFubmVsIHN0b3BwZWQgKi8KKworI2RlZmluZSBBRF9HUElPX0lQQwkweGM4CS8qIGdwaW8gcG9ydCBjb250cm9sICovCisjZGVmaW5lIEFEX0dQSU9fT1AJMHhjYQkvKiBncGlvIG91dHB1dCBwb3J0IHN0YXR1cyAqLworI2RlZmluZSBBRF9HUElPX0lQCTB4Y2MJLyogZ3BpbyAgaW5wdXQgcG9ydCBzdGF0dXMgKi8KKworI2RlZmluZSBBRF9BQzk3X0JBU0UJMHgxMDAJLyogYWM5NyBiYXNlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQURfQUM5N19SRVNFVCAgIDB4MTAwICAgLyogcmVzZXQgKi8KKworI2RlZmluZSBBRF9BQzk3X1BXUl9DVEwJMHgxMjYJLyogPT0gQUM5N19QT1dFUkRPV04gKi8KKyNkZWZpbmUgIEFEX0FDOTdfUFdSX0FEQyAweDAwMDEgLyogQURDIHJlYWR5IHN0YXR1cyAqLworI2RlZmluZSAgQURfQUM5N19QV1JfREFDIDB4MDAwMiAvKiBEQUMgcmVhZHkgc3RhdHVzICovCisjZGVmaW5lICBBRF9BQzk3X1BXUl9QUjAgMHgwMTAwIC8qIFBSMCAoQURDKSBwb3dlcmRvd24gKi8KKyNkZWZpbmUgIEFEX0FDOTdfUFdSX1BSMSAweDAyMDAgLyogUFIxIChEQUMpIHBvd2VyZG93biAqLworCisjZGVmaW5lIEFEX01JU0NfQ1RMICAgICAweDE3NiAvKiBtaXNjIGNvbnRyb2wgKi8KKyNkZWZpbmUgIEFEX01JU0NfQ1RMX0RBQ1ogICAweDgwMDAgLyogc2V0IGZvciB6ZXJvIGZpbGwsIHVuc2V0IGZvciByZXBlYXQgKi8KKyNkZWZpbmUgIEFEX01JU0NfQ1RMX0FSU1IgICAweDAwMDEgLyogc2V0IGZvciBTUjEsIHVuc2V0IGZvciBTUjAgKi8KKyNkZWZpbmUgIEFEX01JU0NfQ1RMX0FMU1IgICAweDAxMDAKKyNkZWZpbmUgIEFEX01JU0NfQ1RMX0RMU1IgICAweDA0MDAKKyNkZWZpbmUgIEFEX01JU0NfQ1RMX0RSU1IgICAweDAwMDQKKworI2RlZmluZSBBRF9BQzk3X1NSMCAgICAgMHgxNzggLyogc2FtcGxlIHJhdGUgMCwgMHhiYjgwID09IDQ4SyAqLworI2RlZmluZSAgQURfQUM5N19TUjBfNDhLIDB4YmI4MCAvKiA0OEtIeiAqLworI2RlZmluZSBBRF9BQzk3X1NSMSAgICAgMHgxN2EgLyogc2FtcGxlIHJhdGUgMSAqLworCisjZGVmaW5lIEFEX0FDOTdfQUNJQwkweDE4MCAvKiBhYzk3IGNvZGVjIGludGVyZmFjZSBjb250cm9sICovCisjZGVmaW5lICBBRF9BQzk3X0FDSUNfQUNJRSAgMHgwMDAxIC8qIGFuYWxvZyBjb2RlYyBpbnRlcmZhY2UgZW5hYmxlICovCisjZGVmaW5lICBBRF9BQzk3X0FDSUNfQUNSRCAgMHgwMDAyIC8qIGFuYWxvZyBjb2RlYyByZXNldCBkaXNhYmxlICovCisjZGVmaW5lICBBRF9BQzk3X0FDSUNfQVNPRSAgMHgwMDA0IC8qIGF1ZGlvIHN0cmVhbSBvdXRwdXQgZW5hYmxlICovCisjZGVmaW5lICBBRF9BQzk3X0FDSUNfVlNSTSAgMHgwMDA4IC8qIHZhcmlhYmxlIHNhbXBsZSByYXRlIG1vZGUgKi8KKyNkZWZpbmUgIEFEX0FDOTdfQUNJQ19GU0RIICAweDAxMDAgLyogZm9yY2UgU0RBVEFfT1VUIGhpZ2ggKi8KKyNkZWZpbmUgIEFEX0FDOTdfQUNJQ19GU1lIICAweDAyMDAgLyogZm9yY2Ugc3luYyBoaWdoICovCisjZGVmaW5lICBBRF9BQzk3X0FDSUNfQUNSRFkgMHg4MDAwIC8qIGFuYWxvZyBjb2RlYyByZWFkeSBzdGF0dXMgKi8KKy8qIGJpdHMgMTAgLT4gMTQgcmVzZXJ2ZWQgKi8KKworCisjZGVmaW5lIEFEX0RTX01FTVNJWkUJNTEyCisjZGVmaW5lIEFEX09QTF9NRU1TSVpFCTE2CisjZGVmaW5lIEFEX01JRElfTUVNU0laRQkxNgorCisjZGVmaW5lIEFEX1dBVl9TVEFURQkwCisjZGVmaW5lIEFEX0FEQ19TVEFURQkxCisjZGVmaW5lIEFEX01BWF9TVEFURVMJMgorCisjZGVmaW5lIEFEX0NIQU5fV0FWCTB4MDAwMQorI2RlZmluZSBBRF9DSEFOX0FEQwkweDAwMDIKKyNkZWZpbmUgQURfQ0hBTl9SRVMJMHgwMDA0CisjZGVmaW5lIEFEX0NIQU5fU1lOCTB4MDAwOAorCisKKy8qIFRoZSBjaGlwIHdvdWxkIHN1cHBvcnQgNCBHQiBidWZmZXJzIGFuZCAxNiBNQiBwZXJpb2RzLAorICogYnV0IGxldCdzIG5vdCBvdmVyZG8gaXQgLi4uICovCisjZGVmaW5lIEJVRkZFUl9CWVRFU19NQVgJKDI1NiAqIDEwMjQpCisjZGVmaW5lIFBFUklPRF9CWVRFU19NSU4JMzIKKyNkZWZpbmUgUEVSSU9EX0JZVEVTX01BWAkoQlVGRkVSX0JZVEVTX01BWCAvIDIpCisjZGVmaW5lIFBFUklPRFNfTUlOCQkyCisjZGVmaW5lIFBFUklPRFNfTUFYCQkoQlVGRkVSX0JZVEVTX01BWCAvIFBFUklPRF9CWVRFU19NSU4pCisKKyNlbmRpZiAvKiBfX0FEMTg4OV9IX18gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCA0OTQzMjk5Li5kNjgzZjc3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC03OCwxNSArNzgsNyBAQAogICogIENvbnN0YW50cyBkZWZpbml0aW9uCiAgKi8KIAotI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0FMSQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMSQkweDEwYjkKLSNlbmRpZgotCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfQUxJXzU0NTEKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTElfNTQ1MQkweDU0NTEKLSNlbmRpZgotCi0jZGVmaW5lIERFVklDRV9JRF9BTEk1NDUxCSgoUENJX1ZFTkRPUl9JRF9BTEk8PDE2KXxQQ0lfREVWSUNFX0lEX0FMSV81NDUxKQorI2RlZmluZSBERVZJQ0VfSURfQUxJNTQ1MQkoKFBDSV9WRU5ET1JfSURfQUw8PDE2KXxQQ0lfREVWSUNFX0lEX0FMX001NDUxKQogCiAKICNkZWZpbmUgQUxJX0NIQU5ORUxTCQkzMgpAQCAtMzI2LDEzICszMTgsMTIgQEAKIHN0YXRpYyB2b2lkIGFsaV9yZWFkX2NmZyh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBkZXZpY2VpZCkKIHsKIAl1bnNpZ25lZCBpbnQgZHdWYWw7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCWludCBpLGo7CiAKLQotICAgICAgICBwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKHZlbmRvciwgZGV2aWNlaWQsIHBjaV9kZXYpOwotICAgICAgICBpZiAocGNpX2RldiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiA7CisJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwgZGV2aWNlaWQsIE5VTEwpOworCWlmIChwY2lfZGV2ID09IE5VTEwpCisJCXJldHVybiA7CiAKIAlwcmludGsoIlxuTSV4IFBDSSBDRkdcbiIsIGRldmljZWlkKTsKIAlwcmludGsoIiAgICAiKTsKQEAgLTM0OSw2ICszNDAsNyBAQAogCQl9CiAJCXByaW50aygiXG4iKTsKIAl9CisJcGNpX2Rldl9wdXQocGNpX2Rldik7CiAgfQogc3RhdGljIHZvaWQgYWxpX3JlYWRfYWM5N3JlZ3MoYWxpX3QgKmNvZGVjLCBpbnQgc2Vjb25kYXJ5KQogewpAQCAtMjExNiw2ICsyMTA4LDggQEAKICNpZmRlZiBDT05GSUdfUE0KIAlrZnJlZShjb2RlYy0+aW1hZ2UpOwogI2VuZGlmCisJcGNpX2Rldl9wdXQoY29kZWMtPnBjaV9tMTUzMyk7CisJcGNpX2Rldl9wdXQoY29kZWMtPnBjaV9tNzEwMSk7CiAJa2ZyZWUoY29kZWMpOwogCXJldHVybiAwOwogfQpAQCAtMjMwNSw3ICsyMjk5LDcgQEAKIAljb2RlYy0+Y2hyZWdzLmRhdGEuYWludGVuID0gMHgwMDsKIAogCS8qIE0xNTMzOiBzb3V0aGJyaWRnZSAqLwotICAgICAgIAlwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKDB4MTBiOSwgMHgxNTMzLCBOVUxMKTsKKwlwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoMHgxMGI5LCAweDE1MzMsIE5VTEwpOwogCWNvZGVjLT5wY2lfbTE1MzMgPSBwY2lfZGV2OwogCWlmICghIGNvZGVjLT5wY2lfbTE1MzMpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWxpNTQ1MTogY2Fubm90IGZpbmQgQUxpIDE1MzMgY2hpcC5cbiIpOwpAQCAtMjMxMyw3ICsyMzA3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCS8qIE03MTAxOiBwb3dlciBtYW5hZ2VtZW50ICovCi0gICAgICAgCXBjaV9kZXYgPSBwY2lfZmluZF9kZXZpY2UoMHgxMGI5LCAweDcxMDEsIE5VTEwpOworCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZSgweDEwYjksIDB4NzEwMSwgTlVMTCk7CiAJY29kZWMtPnBjaV9tNzEwMSA9IHBjaV9kZXY7CiAJaWYgKCEgY29kZWMtPnBjaV9tNzEwMSAmJiBjb2RlYy0+cmV2aXNpb24gPT0gQUxJXzU0NTFfVjAyKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImFsaTU0NTE6IGNhbm5vdCBmaW5kIEFMaSA3MTAxIGNoaXAuXG4iKTsKQEAgLTI0MTcsNiArMjQxMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQUxJIDU0NTEiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hbGlfaWRzLAogCS5wcm9iZSA9IHNuZF9hbGlfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hbGlfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IGNhMjhiMjIuLjE5NmVjMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtNzcwLDYgKzc3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQUxTNDAwMCIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2FsczQwMDBfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2FsczQwMDBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYXJkX2FsczQwMDBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCAxODhkZjA4Li4yNDFlYWNmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0xNDUzLDYgKzE0NTMsNyBAQAogCQkJYXRpaXhwX2RtYV90ICpkbWEgPSAmY2hpcC0+ZG1hc1tpXTsKIAkJCWlmIChkbWEtPnN1YnN0cmVhbSAmJiBkbWEtPnN1c3BlbmRlZCkgewogCQkJCWRtYS0+b3BzLT5lbmFibGVfZG1hKGNoaXAsIDEpOworCQkJCWRtYS0+c3Vic3RyZWFtLT5vcHMtPnByZXBhcmUoZG1hLT5zdWJzdHJlYW0pOwogCQkJCXdyaXRlbCgodTMyKWRtYS0+ZGVzY19idWYuYWRkciB8IEFUSV9SRUdfTElOS1BUUl9FTiwKIAkJCQkgICAgICAgY2hpcC0+cmVtYXBfYWRkciArIGRtYS0+b3BzLT5sbHBfb2Zmc2V0KTsKIAkJCQl3cml0ZWwoZG1hLT5zYXZlZF9jdXJwdHIsIGNoaXAtPnJlbWFwX2FkZHIgKyBkbWEtPm9wcy0+ZHRfY3VyKTsKQEAgLTE1MzAsNyArMTUzMSw3IEBACiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE2NDQsNiArMTY0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQVRJIElYUCBBQzk3IGNvbnRyb2xsZXIiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hdGlpeHBfaWRzLAogCS5wcm9iZSA9IHNuZF9hdGlpeHBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hdGlpeHBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCA4ZDIwMDI5Li44YTU5NTk4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0xMjA4LDcgKzEyMDgsNyBAQAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzE4LDYgKzEzMTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFUSSBJWFAgTUM5NyBjb250cm9sbGVyIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYXRpaXhwX2lkcywKIAkucHJvYmUgPSBzbmRfYXRpaXhwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYXRpaXhwX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwppbmRleCBmNjIzNmM2Li4wNGI2OTVkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKQEAgLTc5LDE5ICs3OSwyMSBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX3ZvcnRleF93b3JrYXJvdW5kKHN0cnVjdCBwY2lfZGV2ICp2b3J0ZXgsIGludCBmaXgpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnZpYTsKKwlzdHJ1Y3QgcGNpX2RldiAqdmlhID0gTlVMTDsKIAogCS8qIGF1dG9kZXRlY3QgaWYgd29ya2Fyb3VuZHMgYXJlIHJlcXVpcmVkICovCiAJaWYgKGZpeCA9PSAyNTUpIHsKIAkJLyogVklBIEtUMTMzICovCi0JCXZpYSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODM2NV8xLCBOVUxMKTsKKwkJdmlhID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsCisJCQlQQ0lfREVWSUNFX0lEX1ZJQV84MzY1XzEsIE5VTEwpOwogCQkvKiBWSUEgQXBvbGxvICovCiAJCWlmICh2aWEgPT0gTlVMTCkgewotCQkJdmlhID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMSwgTlVMTCk7Ci0JCX0KLQkJLyogQU1EIElyb25nYXRlICovCi0JCWlmICh2aWEgPT0gTlVMTCkgewotCQkJdmlhID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDcsIE5VTEwpOworCQkJdmlhID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsCisJCQkJUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzEsIE5VTEwpOworCQkJLyogQU1EIElyb25nYXRlICovCisJCQlpZiAodmlhID09IE5VTEwpCisJCQkJdmlhID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsCisJCQkJCVBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNywgTlVMTCk7CiAJCX0KIAkJaWYgKHZpYSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyBDQVJEX05BTUUgIjogQWN0aXZhdGluZyBsYXRlbmN5IHdvcmthcm91bmQuLi5cbiIpOwpAQCAtMTAxLDEzICsxMDMsMTcgQEAKIAl9IGVsc2UgewogCQlpZiAoZml4ICYgMHgxKQogCQkJdm9ydGV4X2ZpeF9sYXRlbmN5KHZvcnRleCk7Ci0JCWlmICgoZml4ICYgMHgyKSAmJiAodmlhID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MzY1XzEsIE5VTEwpKSkKKwkJaWYgKChmaXggJiAweDIpICYmICh2aWEgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwKKwkJCQlQQ0lfREVWSUNFX0lEX1ZJQV84MzY1XzEsIE5VTEwpKSkKIAkJCXZvcnRleF9maXhfYWdwX2JyaWRnZSh2aWEpOwotCQlpZiAoKGZpeCAmIDB4NCkgJiYgKHZpYSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzEsIE5VTEwpKSkKKwkJaWYgKChmaXggJiAweDQpICYmICh2aWEgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwKKwkJCQlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMSwgTlVMTCkpKQogCQkJdm9ydGV4X2ZpeF9hZ3BfYnJpZGdlKHZpYSk7Ci0JCWlmICgoZml4ICYgMHg4KSAmJiAodmlhID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDcsIE5VTEwpKSkKKwkJaWYgKChmaXggJiAweDgpICYmICh2aWEgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKKwkJCQlQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDcsIE5VTEwpKSkKIAkJCXZvcnRleF9maXhfYWdwX2JyaWRnZSh2aWEpOwogCX0KKwlwY2lfZGV2X3B1dCh2aWEpOwogfQogCiAvLyBjb21wb25lbnQtZGVzdHJ1Y3RvcgpAQCAtMTUwLDcgKzE1Niw3IEBACiAJfQogCXBjaV9zZXRfZG1hX21hc2socGNpLCBWT1JURVhfRE1BX01BU0spOwogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM2Nyw2ICszNzMsNyBAQAogLy8gcGNpX2RyaXZlciBkZWZpbml0aW9uCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gQ0FSRF9OQU1FX1NIT1JULAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92b3J0ZXhfaWRzLAogCS5wcm9iZSA9IHNuZF92b3J0ZXhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF92b3J0ZXhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDcyYmJhN2IuLmQ1MjYxYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMTM0NSw3ICsxMzQ1LDcgQEAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUxMSw2ICsxNTExLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJBWkYzMzI4IiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYXpmMzMyOF9pZHMsCiAJLnByb2JlID0gc25kX2F6ZjMzMjhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hemYzMzI4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IGM1NTU3ZWEuLjIyMzZjOTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC01OSwxNiArNTksNiBAQAogTU9EVUxFX1BBUk1fREVTQyhsb2FkX2FsbCwgIkFsbG93IHRvIGxvYWQgdGhlIG5vbi13aGl0ZWxpc3RlZCBjYXJkcyIpOwogCiAKLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUgMHgxMDllCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCAweDA4NzgKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzkKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc5IDB4MDg3OQotI2VuZGlmCi0KIC8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgUkVHX0lOVF9TVEFUCQkweDEwMAkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCiAjZGVmaW5lIFJFR19JTlRfTUFTSwkJMHgxMDQJLyogaW50ZXJydXB0IG1hc2sgKi8KQEAgLTcyMCw3ICs3MTAsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlwKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTkxMSw2ICs5MDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkJ0ODd4IiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYnQ4N3hfaWRzLAogCS5wcm9iZSA9IHNuZF9idDg3eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2J0ODd4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggN2UyN2JmYy4uYmEwNzk2MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGVycjsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCiAJaWYgKGVwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00MTksNyArNDE5LDcgQEAKIAlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgZXJyOwogCi0JZXBjbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7CisJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVwY20gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHNuZF9wcmludGsoIm9wZW5fY2FwdHVyZV9jaGFubmVsOiBmYWlsZWQgZXBjbSBhbGxvY1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTE0NCw3ICsxMTQ0LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAgIAotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM5MCw2ICsxMzkwLDcgQEAKIC8vIHBjaV9kcml2ZXIgZGVmaW5pdGlvbgogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJDQTAxMDYiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jYTAxMDZfaWRzLAogCS5wcm9iZSA9IHNuZF9jYTAxMDZfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYTAxMDZfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21peGVyLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9taXhlci5jCmluZGV4IGI2Yjg4ODIuLmMxMGU0YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21peGVyLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWl4ZXIuYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiBzdGF0aWMgc25kX2tjb250cm9sX25ld190IHNuZF9jYTAxMDZfdm9sdW1lX2NvbnRyb2xfYW5hbG9nX2Zyb250ID0KIHsKICAgICAgICAgLmlmYWNlID0gICAgICAgIFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotICAgICAgICAubmFtZSA9ICAgICAgICAgIkFuYWxvZyBGcm9udCBWb2x1bWUiLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIkFuYWxvZyBGcm9udCBQbGF5YmFjayBWb2x1bWUiLAogICAgICAgICAuaW5mbyA9ICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfaW5mbywKICAgICAgICAgLmdldCA9ICAgICAgICAgIHNuZF9jYTAxMDZfdm9sdW1lX2dldF9hbmFsb2dfZnJvbnQsCiAgICAgICAgIC5wdXQgPSAgICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9wdXRfYW5hbG9nX2Zyb250CkBAIC00OTAsNyArNDkwLDcgQEAKIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX2NhMDEwNl92b2x1bWVfY29udHJvbF9hbmFsb2dfY2VudGVyX2xmZSA9CiB7CiAgICAgICAgIC5pZmFjZSA9ICAgICAgICBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLSAgICAgICAgLm5hbWUgPSAgICAgICAgICJBbmFsb2cgQ2VudGVyL0xGRSBWb2x1bWUiLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIkFuYWxvZyBDZW50ZXIvTEZFIFBsYXliYWNrIFZvbHVtZSIsCiAgICAgICAgIC5pbmZvID0gICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9pbmZvLAogICAgICAgICAuZ2V0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfZ2V0X2FuYWxvZ19jZW50ZXJfbGZlLAogICAgICAgICAucHV0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfcHV0X2FuYWxvZ19jZW50ZXJfbGZlCkBAIC00OTgsNyArNDk4LDcgQEAKIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX2NhMDEwNl92b2x1bWVfY29udHJvbF9hbmFsb2dfdW5rbm93biA9CiB7CiAgICAgICAgIC5pZmFjZSA9ICAgICAgICBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLSAgICAgICAgLm5hbWUgPSAgICAgICAgICJBbmFsb2cgU2lkZSBWb2x1bWUiLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIkFuYWxvZyBTaWRlIFBsYXliYWNrIFZvbHVtZSIsCiAgICAgICAgIC5pbmZvID0gICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9pbmZvLAogICAgICAgICAuZ2V0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfZ2V0X2FuYWxvZ191bmtub3duLAogICAgICAgICAucHV0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfcHV0X2FuYWxvZ191bmtub3duCkBAIC01MDYsNyArNTA2LDcgQEAKIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX2NhMDEwNl92b2x1bWVfY29udHJvbF9hbmFsb2dfcmVhciA9CiB7CiAgICAgICAgIC5pZmFjZSA9ICAgICAgICBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLSAgICAgICAgLm5hbWUgPSAgICAgICAgICJBbmFsb2cgUmVhciBWb2x1bWUiLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIkFuYWxvZyBSZWFyIFBsYXliYWNrIFZvbHVtZSIsCiAgICAgICAgIC5pbmZvID0gICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9pbmZvLAogICAgICAgICAuZ2V0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfZ2V0X2FuYWxvZ19yZWFyLAogICAgICAgICAucHV0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfcHV0X2FuYWxvZ19yZWFyCkBAIC01MTQsNyArNTE0LDcgQEAKIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX2NhMDEwNl92b2x1bWVfY29udHJvbF9zcGRpZl9mcm9udCA9CiB7CiAgICAgICAgIC5pZmFjZSA9ICAgICAgICBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLSAgICAgICAgLm5hbWUgPSAgICAgICAgICJTUERJRiBGcm9udCBWb2x1bWUiLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIlNQRElGIEZyb250IFBsYXliYWNrIFZvbHVtZSIsCiAgICAgICAgIC5pbmZvID0gICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9pbmZvLAogICAgICAgICAuZ2V0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfZ2V0X3NwZGlmX2Zyb250LAogICAgICAgICAucHV0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfcHV0X3NwZGlmX2Zyb250CkBAIC01MjIsNyArNTIyLDcgQEAKIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX2NhMDEwNl92b2x1bWVfY29udHJvbF9zcGRpZl9jZW50ZXJfbGZlID0KIHsKICAgICAgICAgLmlmYWNlID0gICAgICAgIFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotICAgICAgICAubmFtZSA9ICAgICAgICAgIlNQRElGIENlbnRlci9MRkUgVm9sdW1lIiwKKyAgICAgICAgLm5hbWUgPSAgICAgICAgICJTUERJRiBDZW50ZXIvTEZFIFBsYXliYWNrIFZvbHVtZSIsCiAgICAgICAgIC5pbmZvID0gICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9pbmZvLAogICAgICAgICAuZ2V0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfZ2V0X3NwZGlmX2NlbnRlcl9sZmUsCiAgICAgICAgIC5wdXQgPSAgICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9wdXRfc3BkaWZfY2VudGVyX2xmZQpAQCAtNTMwLDcgKzUzMCw3IEBACiBzdGF0aWMgc25kX2tjb250cm9sX25ld190IHNuZF9jYTAxMDZfdm9sdW1lX2NvbnRyb2xfc3BkaWZfdW5rbm93biA9CiB7CiAgICAgICAgIC5pZmFjZSA9ICAgICAgICBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLSAgICAgICAgLm5hbWUgPSAgICAgICAgICJTUERJRiBVbmtub3duIFZvbHVtZSIsCisgICAgICAgIC5uYW1lID0gICAgICAgICAiU1BESUYgVW5rbm93biBQbGF5YmFjayBWb2x1bWUiLAogICAgICAgICAuaW5mbyA9ICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfaW5mbywKICAgICAgICAgLmdldCA9ICAgICAgICAgIHNuZF9jYTAxMDZfdm9sdW1lX2dldF9zcGRpZl91bmtub3duLAogICAgICAgICAucHV0ID0gICAgICAgICAgc25kX2NhMDEwNl92b2x1bWVfcHV0X3NwZGlmX3Vua25vd24KQEAgLTUzOCw3ICs1MzgsNyBAQAogc3RhdGljIHNuZF9rY29udHJvbF9uZXdfdCBzbmRfY2EwMTA2X3ZvbHVtZV9jb250cm9sX3NwZGlmX3JlYXIgPQogewogICAgICAgICAuaWZhY2UgPSAgICAgICAgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0gICAgICAgIC5uYW1lID0gICAgICAgICAiU1BESUYgUmVhciBWb2x1bWUiLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIlNQRElGIFJlYXIgUGxheWJhY2sgVm9sdW1lIiwKICAgICAgICAgLmluZm8gPSAgICAgICAgIHNuZF9jYTAxMDZfdm9sdW1lX2luZm8sCiAgICAgICAgIC5nZXQgPSAgICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9nZXRfc3BkaWZfcmVhciwKICAgICAgICAgLnB1dCA9ICAgICAgICAgIHNuZF9jYTAxMDZfdm9sdW1lX3B1dF9zcGRpZl9yZWFyCkBAIC01NDcsNyArNTQ3LDcgQEAKIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX2NhMDEwNl92b2x1bWVfY29udHJvbF9mZWVkYmFjayA9CiB7CiAgICAgICAgIC5pZmFjZSA9ICAgICAgICBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLSAgICAgICAgLm5hbWUgPSAgICAgICAgICJDQVBUVVJFIGZlZWRiYWNrIGludG8gUExBWUJBQ0siLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIkNBUFRVUkUgZmVlZGJhY2sgUGxheWJhY2sgVm9sdW1lIiwKICAgICAgICAgLmluZm8gPSAgICAgICAgIHNuZF9jYTAxMDZfdm9sdW1lX2luZm8sCiAgICAgICAgIC5nZXQgPSAgICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9nZXRfZmVlZGJhY2ssCiAgICAgICAgIC5wdXQgPSAgICAgICAgICBzbmRfY2EwMTA2X3ZvbHVtZV9wdXRfZmVlZGJhY2sKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCBiMDk4YjUxLi4xZWIzMzE1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC03OSwxMyArNzksNiBAQAogTU9EVUxFX1BBUk1fREVTQyhqb3lzdGlja19wb3J0LCAiSm95c3RpY2sgcG9ydCBhZGRyZXNzLiIpOwogI2VuZGlmCiAKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczOAkweDAxMTEKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3MzhCCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczOEIJMHgwMTEyCi0jZW5kaWYKLQogLyoKICAqIENNOHgzOCByZWdpc3RlcnMgZGVmaW5pdGlvbgogICovCkBAIC0zNDgsMjUgKzM0MSw2IEBACiAKIAogLyoKLSAqIHBjaSBpZHMKLSAqLwotI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0NNRURJQQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NNRURJQSAgICAgICAgIDB4MTNGNgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9DTUVESUFfQ004MzM4QSAweDAxMDAKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTgzMzhCCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEIgMHgwMTAxCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczOCAgMHgwMTExCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4QgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3MzhCIDB4MDExMgotI2VuZGlmCi0KLS8qCiAgKiBjaGFubmVscyBmb3IgcGxheWJhY2sgLyBjYXB0dXJlCiAgKi8KICNkZWZpbmUgQ01fQ0hfUExBWQkwCkBAIC0yODAxLDcgKzI3NzUsNyBAQAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY20gPSBrY2FsbG9jKDEsIHNpemVvZigqY20pLCBHRlBfS0VSTkVMKTsKKwljbSA9IGt6YWxsb2Moc2l6ZW9mKCpjbSksIEdGUF9LRVJORUwpOwogCWlmIChjbSA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMwNjMsNiArMzAzNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQy1NZWRpYSBQQ0kiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jbWlwY2lfaWRzLAogCS5wcm9iZSA9IHNuZF9jbWlwY2lfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jbWlwY2lfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCBjN2EzNzBkLi5kYzg3ZTAxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC01NywxNyArNTcsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhkdWFsX2NvZGVjLCAiU2Vjb25kYXJ5IENvZGVjIElEICgwID0gZGlzYWJsZWQpLiIpOwogCiAvKgotICoKLSAqLwotCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfQ0lSUlVTCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0lSUlVTICAgICAgICAgICAgMHgxMDEzCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9DSVJSVVNfNDI4MQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180MjgxCTB4NjAwNQotI2VuZGlmCi0KLS8qCiAgKiAgRGlyZWN0IHJlZ2lzdGVycwogICovCiAKQEAgLTEzOTQsNyArMTM4Myw3IEBACiAJKnJjaGlwID0gTlVMTDsKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIxMTksNiArMjEwOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQ1M0MjgxIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfY3M0MjgxX2lkcywKIAkucHJvYmUgPSBzbmRfY3M0MjgxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY3M0MjgxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwppbmRleCBiOWZmZjRlLi4zMmI0Zjg0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlNvdW5kIEZ1c2lvbiBDUzQ2eHgiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jczQ2eHhfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2NzNDZ4eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhcmRfY3M0Nnh4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCmluZGV4IDRiMDUyMTUuLjZlMzg1NWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCkBAIC0xMzA0LDcgKzEzMDQsNyBAQAogCWNzNDZ4eF9wY21fdCAqIGNwY207CiAJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKLQljcGNtID0ga2NhbGxvYygxLCBzaXplb2YoKmNwY20pLCBHRlBfS0VSTkVMKTsKKwljcGNtID0ga3phbGxvYyhzaXplb2YoKmNwY20pLCBHRlBfS0VSTkVMKTsKIAlpZiAoY3BjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKQEAgLTM1MjUsMTcgKzM1MjUsNiBAQAogCiAKIC8qCi0gKiBwaWl4NCBwY2kgaWRzCi0gKi8KLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9JTlRFTAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lOVEVMIDB4ODA4NgotI2VuZGlmIC8qIFBDSV9WRU5ET1JfSURfSU5URUwgKi8KLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMyAweDcxMTMKLSNlbmRpZiAvKiBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMyAqLwotCi0vKgogICoJSGFuZGxlIHRoZSBDTEtSVU4gb24gYSB0aGlua3BhZC4gV2UgbXVzdCBkaXNhYmxlIENMS1JVTiBzdXBwb3J0CiAgKgl3aGVuZXZlciB3ZSBuZWVkIHRvIGJlYXQgb24gdGhlIGNoaXAuCiAgKgpAQCAtMzU0OCw3ICszNTM3LDcgQEAKIHsKIAl1MTYgY29udHJvbCwgbnZhbDsKIAkKLQlpZiAoY2hpcC0+YWNwaV9kZXYgPT0gTlVMTCkKKwlpZiAoIWNoaXAtPmFjcGlfcG9ydCkKIAkJcmV0dXJuOwogCiAJY2hpcC0+YW1wbGlmaWVyICs9IGNoYW5nZTsKQEAgLTM1NzEsMTUgKzM1NjAsMjAgQEAKICAqLwogc3RhdGljIHZvaWQgY2xrcnVuX2luaXQoY3M0Nnh4X3QgKmNoaXApCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJdTggcHA7CiAKLQljaGlwLT5hY3BpX2RldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMywgTlVMTCk7Ci0JaWYgKGNoaXAtPmFjcGlfZGV2ID09IE5VTEwpCisJY2hpcC0+YWNwaV9wb3J0ID0gMDsKKwkKKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkJUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzMsIE5VTEwpOworCWlmIChwZGV2ID09IE5VTEwpCiAJCXJldHVybjsJCS8qIE5vdCBhIHRoaW5rcGFkIHRoYXRzIGZvciBzdXJlICovCiAKIAkvKiBGaW5kIHRoZSBjb250cm9sIHBvcnQgKi8JCQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGNoaXAtPmFjcGlfZGV2LCAweDQxLCAmcHApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsICZwcCk7CiAJY2hpcC0+YWNwaV9wb3J0ID0gcHAgPDwgODsKKwlwY2lfZGV2X3B1dChwZGV2KTsKIH0KIAogCkBAIC0zNzgwLDcgKzM3NzQsNyBAQAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggZmMzNzdjNC4uYjBlMDBmMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtMjIzLDYgKzIyMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRU1VMTBLMV9BdWRpZ3kiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lbXUxMGsxX2lkcywKIAkucHJvYmUgPSBzbmRfY2FyZF9lbXUxMGsxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9lbXUxMGsxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCmluZGV4IGU2OWQ1YjcuLmU4N2U4NDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCkBAIC03NTQsMTIgKzc1NCwxMSBAQAogCSAuZW11MTBrMV9jaGlwID0gMSwKIAkgLmFjOTdfY2hpcCA9IDEsCiAJIC5zYmxpdmU1MSA9IDF9ICwKLQkvKiBUZXN0ZWQgYnkgYWxzYSBidWd0cmFjayB1c2VyICJodXMiIDEydGggU2VwdCAyMDA1ICovCisJLyogVGVzdGVkIGJ5IGFsc2EgYnVndHJhY2sgdXNlciAiaHVzIiBidWcgIzEyOTcgMTJ0aCBBdWcgMjAwNSAqLwogCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDAyLCAuc3Vic3lzdGVtID0gMHg4MDYxMTEwMiwKLQkgLmRyaXZlciA9ICJFTVUxMEsxIiwgLm5hbWUgPSAiU0JMaXZlISBQbGF5ZXIgNS4xIFtTQjAwNjBdIiwgCisJIC5kcml2ZXIgPSAiRU1VMTBLMSIsIC5uYW1lID0gIlNCTGl2ZSEgUGxhdGludW0gNS4xIFtTQjAwNjBdIiwgCiAJIC5pZCA9ICJMaXZlIiwKIAkgLmVtdTEwazFfY2hpcCA9IDEsCi0JIC5hYzk3X2NoaXAgPSAxLAogCSAuc2JsaXZlNTEgPSAxfSAsCiAJey52ZW5kb3IgPSAweDExMDIsIC5kZXZpY2UgPSAweDAwMDIsIC5zdWJzeXN0ZW0gPSAweDgwNTExMTAyLAogCSAuZHJpdmVyID0gIkVNVTEwSzEiLCAubmFtZSA9ICJTQkxpdmUhIFZhbHVlIFtDVDQ4NTBdIiwgCkBAIC04NjUsNyArODY0LDcgQEAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVtdSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCplbXUpLCBHRlBfS0VSTkVMKTsKKwllbXUgPSBremFsbG9jKHNpemVvZigqZW11KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVtdSA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IDUyYzc4MjYuLmFkMTU3NTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTLCA2NCkpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCi0JZXBjbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7CisJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZXBjbS0+ZW11ID0gY2hpcDsKQEAgLTU3MSw3ICs1NzEsNyBAQAogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywgNjQpKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC05MjAsNyArOTIwLDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAgIAotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTYxNSw2ICsxNjE1LDcgQEAKIC8vIHBjaV9kcml2ZXIgZGVmaW5pdGlvbgogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJFTVUxMEsxWCIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2VtdTEwazF4X2lkcywKIAkucHJvYmUgPSBzbmRfZW11MTBrMXhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9lbXUxMGsxeF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKaW5kZXggNjM3YzU1NS4uNjQ2YjVkOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCkBAIC00NzAsNyArNDcwLDcgQEAKIHsKIAl1X2ludDMyX3QgKmNvZGU7CiAJc25kX2Fzc2VydCgqcHRyIDwgNTEyLCByZXR1cm4pOwotCWNvZGUgPSAodV9pbnQzMl90ICopaWNvZGUtPmNvZGUgKyAoKnB0cikgKiAyOworCWNvZGUgPSAodV9pbnQzMl90IF9fZm9yY2UgKilpY29kZS0+Y29kZSArICgqcHRyKSAqIDI7CiAJc2V0X2JpdCgqcHRyLCBpY29kZS0+Y29kZV92YWxpZCk7CiAJY29kZVswXSA9ICgoeCAmIDB4M2ZmKSA8PCAxMCkgfCAoeSAmIDB4M2ZmKTsKIAljb2RlWzFdID0gKChvcCAmIDB4MGYpIDw8IDIwKSB8ICgociAmIDB4M2ZmKSA8PCAxMCkgfCAoYSAmIDB4M2ZmKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogewogCXVfaW50MzJfdCAqY29kZTsKIAlzbmRfYXNzZXJ0KCpwdHIgPCAxMDI0LCByZXR1cm4pOwotCWNvZGUgPSAodV9pbnQzMl90ICopaWNvZGUtPmNvZGUgKyAoKnB0cikgKiAyOworCWNvZGUgPSAodV9pbnQzMl90IF9fZm9yY2UgKilpY29kZS0+Y29kZSArICgqcHRyKSAqIDI7CiAJc2V0X2JpdCgqcHRyLCBpY29kZS0+Y29kZV92YWxpZCk7CiAJY29kZVswXSA9ICgoeCAmIDB4N2ZmKSA8PCAxMikgfCAoeSAmIDB4N2ZmKTsKIAljb2RlWzFdID0gKChvcCAmIDB4MGYpIDw8IDI0KSB8ICgociAmIDB4N2ZmKSA8PCAxMikgfCAoYSAmIDB4N2ZmKTsKQEAgLTEwMzYsMTMgKzEwMzYsMTMgQEAKIAlzcGluX2xvY2tfaW5pdCgmZW11LT5meDgwMTAuaXJxX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZlbXUtPmZ4ODAxMC5ncHJfY3RsKTsKIAotCWlmICgoaWNvZGUgPSBrY2FsbG9jKDEsIHNpemVvZigqaWNvZGUpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCB8fAorCWlmICgoaWNvZGUgPSBremFsbG9jKHNpemVvZigqaWNvZGUpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCB8fAogCSAgICAoaWNvZGUtPmdwcl9tYXAgPSAodV9pbnQzMl90IF9fdXNlciAqKWtjYWxsb2MoNTEyICsgMjU2ICsgMjU2ICsgMiAqIDEwMjQsIHNpemVvZih1X2ludDMyX3QpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCB8fAogCSAgICAoY29udHJvbHMgPSBrY2FsbG9jKFNORF9FTVUxMEsxX0dQUl9DT05UUk9MUywgc2l6ZW9mKCpjb250cm9scyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gX19lcnI7CiAJfQotCWdwcl9tYXAgPSAodTMyICopaWNvZGUtPmdwcl9tYXA7CisJZ3ByX21hcCA9ICh1MzIgX19mb3JjZSAqKWljb2RlLT5ncHJfbWFwOwogCiAJaWNvZGUtPnRyYW1fZGF0YV9tYXAgPSBpY29kZS0+Z3ByX21hcCArIDUxMjsKIAlpY29kZS0+dHJhbV9hZGRyX21hcCA9IGljb2RlLT50cmFtX2RhdGFfbWFwICsgMjU2OwpAQCAtMTQzMSw3ICsxNDMxLDcgQEAKICBfX2VycjoKIAlrZnJlZShjb250cm9scyk7CiAJaWYgKGljb2RlICE9IE5VTEwpIHsKLQkJa2ZyZWUoKHZvaWQgKilpY29kZS0+Z3ByX21hcCk7CisJCWtmcmVlKCh2b2lkIF9fZm9yY2UgKilpY29kZS0+Z3ByX21hcCk7CiAJCWtmcmVlKGljb2RlKTsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTE1MDMsMTUgKzE1MDMsMTUgQEAKIAlzcGluX2xvY2tfaW5pdCgmZW11LT5meDgwMTAuaXJxX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZlbXUtPmZ4ODAxMC5ncHJfY3RsKTsKIAotCWlmICgoaWNvZGUgPSBrY2FsbG9jKDEsIHNpemVvZigqaWNvZGUpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGljb2RlID0ga3phbGxvYyhzaXplb2YoKmljb2RlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmICgoaWNvZGUtPmdwcl9tYXAgPSAodV9pbnQzMl90IF9fdXNlciAqKWtjYWxsb2MoMjU2ICsgMTYwICsgMTYwICsgMiAqIDUxMiwgc2l6ZW9mKHVfaW50MzJfdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMIHx8CiAgICAgICAgICAgICAoY29udHJvbHMgPSBrY2FsbG9jKFNORF9FTVUxMEsxX0dQUl9DT05UUk9MUywgc2l6ZW9mKGVtdTEwazFfZng4MDEwX2NvbnRyb2xfZ3ByX3QpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCB8fAotCSAgICAoaXBjbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCppcGNtKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkgICAgKGlwY20gPSBremFsbG9jKHNpemVvZigqaXBjbSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gX19lcnI7CiAJfQotCWdwcl9tYXAgPSAodTMyICopaWNvZGUtPmdwcl9tYXA7CisJZ3ByX21hcCA9ICh1MzIgX19mb3JjZSAqKWljb2RlLT5ncHJfbWFwOwogCiAJaWNvZGUtPnRyYW1fZGF0YV9tYXAgPSBpY29kZS0+Z3ByX21hcCArIDI1NjsKIAlpY29kZS0+dHJhbV9hZGRyX21hcCA9IGljb2RlLT50cmFtX2RhdGFfbWFwICsgMTYwOwpAQCAtMjAzMiw3ICsyMDMyLDcgQEAKIAlrZnJlZShpcGNtKTsKIAlrZnJlZShjb250cm9scyk7CiAJaWYgKGljb2RlICE9IE5VTEwpIHsKLQkJa2ZyZWUoKHZvaWQgKilpY29kZS0+Z3ByX21hcCk7CisJCWtmcmVlKCh2b2lkIF9fZm9yY2UgKilpY29kZS0+Z3ByX21hcCk7CiAJCWtmcmVlKGljb2RlKTsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTIyMTcsNyArMjIxNyw3IEBACiAJCWtmcmVlKGlwY20pOwogCQlyZXR1cm4gcmVzOwogCWNhc2UgU05EUlZfRU1VMTBLMV9JT0NUTF9QQ01fUEVFSzoKLQkJaXBjbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCppcGNtKSwgR0ZQX0tFUk5FTCk7CisJCWlwY20gPSBremFsbG9jKHNpemVvZigqaXBjbSksIEdGUF9LRVJORUwpOwogCQlpZiAoaXBjbSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmIChjb3B5X2Zyb21fdXNlcihpcGNtLCBhcmdwLCBzaXplb2YoKmlwY20pKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwppbmRleCA5YzM1ZjZkLi42NmJhMjdhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgaTsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKQEAgLTEwNDksNyArMTA0OSw3IEBACiAJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGksIGVycjsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJZW11MTBrMV9wY21fdCAqZXBjbTsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKQEAgLTExMzAsNyArMTEzMCw3IEBACiAJZW11MTBrMV9wY21fdCAqZXBjbTsKIAlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKQEAgLTExNzAsNyArMTE3MCw3IEBACiAJaW50IG5lZnggPSBlbXUtPmF1ZGlneSA/IDY0IDogMzI7CiAJaW50IGlkeDsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwppbmRleCBhMTY5MTMzLi5kNTljN2YzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgZXJyOwogCi0JZXBjbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7CisJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgIC8vc25kX3ByaW50aygiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7CiAKIAlpZiAoZXBjbSA9PSBOVUxMKQpAQCAtMjE0LDcgKzIxNCw3IEBACiAJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGVycjsKIAotCWVwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOworCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwogCS8vc25kX3ByaW50aygiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7CiAKIAlpZiAoZXBjbSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VuczEzNzAuYyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKaW5kZXggZjA2Yjk1Zi4uYmVmOWE1OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VuczEzNzAuYworKysgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCkBAIC0xMDAsMTMgKzEwMCw2IEBACiAjZW5kaWYKICNlbmRpZiAvKiBTVVBQT1JUX0pPWVNUSUNLICovCiAKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9FTlNPTklRX0NUNTg4MAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VOU09OSVFfQ1Q1ODgwICAgIDB4NTg4MAotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9FUzEzNzEKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9FTlNPTklRX0VTMTM3MQkweDEzNzEKLSNlbmRpZgotCiAvKiBFUzEzNzEgY2hpcCBJRCAqLwogLyogVGhpcyBpcyBhIGxpdHRsZSBjb25mdXNpbmcgYmVjYXVzZSBhbGwgRVMxMzcxIGNvbXBhdGlibGUgY2hpcHMgaGF2ZSB0aGUKICAgIHNhbWUgREVWSUNFX0lELCB0aGUgb25seSB0aGluZyBkaWZmZXJlbnRpYXRpbmcgdGhlbSBpcyB0aGUgUkVWX0lEIGZpZWxkLgpAQCAtMTk1MCw3ICsxOTQzLDcgQEAKIAkqcmVuc29uaXEgPSBOVUxMOwogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVuc29uaXEgPSBrY2FsbG9jKDEsIHNpemVvZigqZW5zb25pcSksIEdGUF9LRVJORUwpOworCWVuc29uaXEgPSBremFsbG9jKHNpemVvZigqZW5zb25pcSksIEdGUF9LRVJORUwpOwogCWlmIChlbnNvbmlxID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjM5NCw2ICsyMzg3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hdWRpb3BjaV9pZHMsCiAJLnByb2JlID0gc25kX2F1ZGlvcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYXVkaW9wY2lfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5MzguYyBiL3NvdW5kL3BjaS9lczE5MzguYwppbmRleCBiNDkyNzc3Li4xN2ZhODBjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTM4LmMKKysrIGIvc291bmQvcGNpL2VzMTkzOC5jCkBAIC03NiwxMyArNzYsNiBAQAogI2RlZmluZSBTVVBQT1JUX0pPWVNUSUNLIDEKICNlbmRpZgogCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfRVNTCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfRVNTCQkweDEyNWQKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VTU19FUzE5MzgKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfRVMxOTM4CTB4MTk2OQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsJLyogRW5hYmxlIHRoaXMgY2FyZCAqLwpAQCAtMTUwMSw3ICsxNDk0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOwogICAgICAgICB9CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE3NTMsNiArMTc0Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRVNTIEVTMTkzOCAoU29sby0xKSIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2VzMTkzOF9pZHMsCiAJLnByb2JlID0gc25kX2VzMTkzOF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2VzMTkzOF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IDlkN2EyODcuLmVjZGNhZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTE2MCwyNSArMTYwLDYgQEAKICNlbmRpZgogCiAKLS8qIFBDSSBEZXYgSUQncyAqLwotCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfRVNTCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfRVNTCTB4MTI1RAotI2VuZGlmCi0KLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FU1NfT0xECTB4MTI4NQkvKiBQbGF0Zm9ybSBUZWNoLCB0aGUgcGVvcGxlIHRoZSBFU1MKLQkJCQkJICAgd2FzIGJvdWdodCBmb3JtICovCi0KLSNpZm5kZWYgUENJX0RFVklDRV9JRF9FU1NfTTJFCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX00yRQkweDE5NzgKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VTU19NMgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NMgkweDE5NjgKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VTU19NMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NMQkweDAxMDAKLSNlbmRpZgotCiAjZGVmaW5lIE5SX0FQVVMJCQk2NAogI2RlZmluZSBOUl9BUFVfUkVHUwkJMTYKIApAQCAtMTU5Niw3ICsxNTc3LDcgQEAKIAlpZiAoYXB1MSA8IDApCiAJCXJldHVybiBhcHUxOwogCi0JZXMgPSBrY2FsbG9jKDEsIHNpemVvZigqZXMpLCBHRlBfS0VSTkVMKTsKKwllcyA9IGt6YWxsb2Moc2l6ZW9mKCplcyksIEdGUF9LRVJORUwpOwogCWlmICghZXMpIHsKIAkJc25kX2VzMTk2OF9mcmVlX2FwdV9wYWlyKGNoaXAsIGFwdTEpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE2NDEsNyArMTYyMiw3IEBACiAJCXJldHVybiBhcHUyOwogCX0KIAkKLQllcyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCplcyksIEdGUF9LRVJORUwpOworCWVzID0ga3phbGxvYyhzaXplb2YoKmVzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlcykgewogCQlzbmRfZXMxOTY4X2ZyZWVfYXB1X3BhaXIoY2hpcCwgYXB1MSk7CiAJCXNuZF9lczE5NjhfZnJlZV9hcHVfcGFpcihjaGlwLCBhcHUyKTsKQEAgLTI1ODgsNyArMjU2OSw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgY2hpcCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNzgyLDYgKzI3NjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkVTMTk2OCAoRVNTIE1hZXN0cm8pIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZXMxOTY4X2lkcywKIAkucHJvYmUgPSBzbmRfZXMxOTY4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZXMxOTY4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZm04MDEuYyBiL3NvdW5kL3BjaS9mbTgwMS5jCmluZGV4IDM2YjJmNjIuLmU1Y2ZhMmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0xMjYzLDcgKzEyNjMsNyBAQAogCSpyY2hpcCA9IE5VTEw7CiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNDYyLDYgKzE0NjIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkZNODAxIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZm04MDFfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2ZtODAxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9mbTgwMV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggMjBmNzc2Mi4uMzgxNTQwMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC0yODgsNyArMjg4LDcgQEAKIHsKIAlzdHJ1Y3QgaGRhX2J1c191bnNvbGljaXRlZCAqdW5zb2w7CiAKLQl1bnNvbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp1bnNvbCksIEdGUF9LRVJORUwpOworCXVuc29sID0ga3phbGxvYyhzaXplb2YoKnVuc29sKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgdW5zb2wpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW4ndCBhbGxvY2F0ZSB1bnNvbGljaXRlZCBxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJaWYgKGJ1c3ApCiAJCSpidXNwID0gTlVMTDsKIAotCWJ1cyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTsKKwlidXMgPSBremFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1cyA9PSBOVUxMKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGFsbG9jYXRlIHN0cnVjdCBoZGFfYnVzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQljb2RlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjb2RlYyksIEdGUF9LRVJORUwpOworCWNvZGVjID0ga3phbGxvYyhzaXplb2YoKmNvZGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNvZGVjID09IE5VTEwpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWxsb2NhdGUgc3RydWN0IGhkYV9jb2RlY1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggNjNhMjlhOC4uYmI1M2JjZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC01MDUsNiArNTA1LDcgQEAKIHN0cnVjdCBoZGFfcGNtIHsKIAljaGFyICpuYW1lOwogCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSBzdHJlYW1bMl07CisJdW5zaWduZWQgaW50IGlzX21vZGVtOwkvKiBtb2RlbSBjb2RlYz8gKi8KIH07CiAKIC8qIGNvZGVjIGluZm9ybWF0aW9uICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKaW5kZXggMTIyOTIyNy4uNWI4MjlhMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwpAQCAtOTgsNyArOTgsNyBAQAogCXN0cnVjdCBoZGFfZ25vZGUgKm5vZGU7CiAJaW50IG5jb25uczsKIAotCW5vZGUgPSBrY2FsbG9jKDEsIHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOworCW5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCW5vZGUtPm5pZCA9IG5pZDsKQEAgLTg4Niw3ICs4ODYsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGRhX2dlbmVyaWM6IGNhbid0IGFsbG9jYXRlIHNwZWNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDE1MTA3ZGYuLjk1OTBlY2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtNjIsNyArNjIsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG1vZGVsLCBjaGFycCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1vZGVsLCAiVXNlIHRoZSBnaXZlbiBib2FyZCBtb2RlbC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwb3NpdGlvbl9maXgsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvc2l0aW9uX2ZpeCwgIkZpeCBETUEgcG9pbnRlciAoMCA9IEZJRk8gc2l6ZSwgMSA9IG5vbmUsIDIgPSBQT1NCVUYpLiIpOworTU9EVUxFX1BBUk1fREVTQyhwb3NpdGlvbl9maXgsICJGaXggRE1BIHBvaW50ZXIgKDAgPSBhdXRvLCAxID0gbm9uZSwgMiA9IFBPU0JVRiwgMyA9IEZJRk8gc2l6ZSkuIik7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0ludGVsLCBJQ0g2fSwiCkBAIC0xNjQsNyArMTY0LDkgQEAKIC8qIG1heCBidWZmZXIgc2l6ZSAtIG5vIGgvdyBsaW1pdCwgeW91IGNhbiBpbmNyZWFzZSBhcyB5b3UgbGlrZSAqLwogI2RlZmluZSBBWlhfTUFYX0JVRl9TSVpFCSgxMDI0KjEwMjQqMTAyNCkKIC8qIG1heCBudW1iZXIgb2YgUENNIGRldmljcyBwZXIgY2FyZCAqLwotI2RlZmluZSBBWlhfTUFYX1BDTVMJCTgKKyNkZWZpbmUgQVpYX01BWF9BVURJT19QQ01TCTYKKyNkZWZpbmUgQVpYX01BWF9NT0RFTV9QQ01TCTIKKyNkZWZpbmUgQVpYX01BWF9QQ01TCQkoQVpYX01BWF9BVURJT19QQ01TICsgQVpYX01BWF9NT0RFTV9QQ01TKQogCiAvKiBSSVJCIGludCBtYXNrOiBvdmVycnVuWzJdLCByZXNwb25zZVswXSAqLwogI2RlZmluZSBSSVJCX0lOVF9SRVNQT05TRQkweDAxCkBAIC0yMTEsOSArMjEzLDEwIEBACiAKIC8qIHBvc2l0aW9uIGZpeCBtb2RlICovCiBlbnVtIHsKLQlQT1NfRklYX0ZJRk8sCisJUE9TX0ZJWF9BVVRPLAogCVBPU19GSVhfTk9ORSwKLQlQT1NfRklYX1BPU0JVRgorCVBPU19GSVhfUE9TQlVGLAorCVBPU19GSVhfRklGTywKIH07CiAKIC8qIERlZmluZXMgZm9yIEFUSSBIRCBBdWRpbyBzdXBwb3J0IGluIFNCNDUwIHNvdXRoIGJyaWRnZSAqLwpAQCAtMjQzLDYgKzI0Niw3IEBACiAJdW5zaWduZWQgaW50IGZyYWdzaXplOwkJLyogc2l6ZSBvZiBlYWNoIHBlcmlvZCBpbiBieXRlcyAqLwogCXVuc2lnbmVkIGludCBmcmFnczsJCS8qIG51bWJlciBmb3IgcGVyaW9kIGluIHRoZSBwbGF5IGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBmaWZvX3NpemU7CQkvKiBGSUZPIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgbGFzdF9wb3M7CQkvKiBsYXN0IHVwZGF0ZWQgcGVyaW9kIHBvc2l0aW9uICovCiAKIAl2b2lkIF9faW9tZW0gKnNkX2FkZHI7CQkvKiBzdHJlYW0gZGVzY3JpcHRvciBwb2ludGVyICovCiAKQEAgLTI1Niw2ICsyNjAsNyBAQAogCiAJdW5zaWduZWQgaW50IG9wZW5lZDogMTsKIAl1bnNpZ25lZCBpbnQgcnVubmluZzogMTsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kX3VwZGF0aW5nOiAxOwogfTsKIAogLyogQ09SQi9SSVJCICovCkBAIC03MjQsMTEgKzcyOSw5IEBACiAJLyogaW5pdGlhbGl6ZSB0aGUgY29kZWMgY29tbWFuZCBJL08gKi8KIAlhenhfaW5pdF9jbWRfaW8oY2hpcCk7CiAKLQlpZiAoY2hpcC0+cG9zaXRpb25fZml4ID09IFBPU19GSVhfUE9TQlVGKSB7Ci0JCS8qIHByb2dyYW0gdGhlIHBvc2l0aW9uIGJ1ZmZlciAqLwotCQlhenhfd3JpdGVsKGNoaXAsIERQTEJBU0UsICh1MzIpY2hpcC0+cG9zYnVmLmFkZHIpOwotCQlhenhfd3JpdGVsKGNoaXAsIERQVUJBU0UsIHVwcGVyXzMyYml0KGNoaXAtPnBvc2J1Zi5hZGRyKSk7Ci0JfQorCS8qIHByb2dyYW0gdGhlIHBvc2l0aW9uIGJ1ZmZlciAqLworCWF6eF93cml0ZWwoY2hpcCwgRFBMQkFTRSwgKHUzMiljaGlwLT5wb3NidWYuYWRkcik7CisJYXp4X3dyaXRlbChjaGlwLCBEUFVCQVNFLCB1cHBlcl8zMmJpdChjaGlwLT5wb3NidWYuYWRkcikpOwogCiAJLyogRm9yIEFUSSBTQjQ1MCBhemFsaWEgSEQgYXVkaW8sIHdlIG5lZWQgdG8gZW5hYmxlIHNub29wICovCiAJaWYgKGNoaXAtPmRyaXZlcl90eXBlID09IEFaWF9EUklWRVJfQVRJKSB7CkBAIC03NjMsOSArNzY2LDExIEBACiAJCWlmIChzdGF0dXMgJiBhenhfZGV2LT5zZF9pbnRfc3RhX21hc2spIHsKIAkJCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfU1RTLCBTRF9JTlRfTUFTSyk7CiAJCQlpZiAoYXp4X2Rldi0+c3Vic3RyZWFtICYmIGF6eF9kZXYtPnJ1bm5pbmcpIHsKKwkJCQlhenhfZGV2LT5wZXJpb2RfdXBkYXRpbmcgPSAxOwogCQkJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChhenhfZGV2LT5zdWJzdHJlYW0pOwogCQkJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCQkJCWF6eF9kZXYtPnBlcmlvZF91cGRhdGluZyA9IDA7CiAJCQl9CiAJCX0KIAl9CkBAIC04NjYsMTEgKzg3MSw5IEBACiAJLyogdXBwZXIgQkRMIGFkZHJlc3MgKi8KIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCB1cHBlcl8zMmJpdChhenhfZGV2LT5iZGxfYWRkcikpOwogCi0JaWYgKGNoaXAtPnBvc2l0aW9uX2ZpeCA9PSBQT1NfRklYX1BPU0JVRikgewotCQkvKiBlbmFibGUgdGhlIHBvc2l0aW9uIGJ1ZmZlciAqLwotCQlpZiAoISAoYXp4X3JlYWRsKGNoaXAsIERQTEJBU0UpICYgSUNINl9EUExCQVNFX0VOQUJMRSkpCi0JCQlhenhfd3JpdGVsKGNoaXAsIERQTEJBU0UsICh1MzIpY2hpcC0+cG9zYnVmLmFkZHIgfCBJQ0g2X0RQTEJBU0VfRU5BQkxFKTsKLQl9CisJLyogZW5hYmxlIHRoZSBwb3NpdGlvbiBidWZmZXIgKi8KKwlpZiAoISAoYXp4X3JlYWRsKGNoaXAsIERQTEJBU0UpICYgSUNINl9EUExCQVNFX0VOQUJMRSkpCisJCWF6eF93cml0ZWwoY2hpcCwgRFBMQkFTRSwgKHUzMiljaGlwLT5wb3NidWYuYWRkciB8IElDSDZfRFBMQkFTRV9FTkFCTEUpOwogCiAJLyogc2V0IHRoZSBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgaW4gdGhlIGRlc2NyaXB0b3IgY29udHJvbCByZWdpc3RlciAqLwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGwoYXp4X2RldiwgU0RfQ1RMKSB8IFNEX0lOVF9NQVNLKTsKQEAgLTEwNzgsNiArMTA4MSw3IEBACiAJCWF6eF9kZXYtPmZpZm9fc2l6ZSA9IGF6eF9zZF9yZWFkdyhhenhfZGV2LCBTRF9GSUZPU0laRSkgKyAxOwogCWVsc2UKIAkJYXp4X2Rldi0+Zmlmb19zaXplID0gMDsKKwlhenhfZGV2LT5sYXN0X3BvcyA9IDA7CiAKIAlyZXR1cm4gaGluZm8tPm9wcy5wcmVwYXJlKGhpbmZvLCBhcGNtLT5jb2RlYywgYXp4X2Rldi0+c3RyZWFtX3RhZywKIAkJCQkgIGF6eF9kZXYtPmZvcm1hdF92YWwsIHN1YnN0cmVhbSk7CkBAIC0xMTMzLDYgKzExMzcsMjYgQEAKIAkJcG9zID0gYXp4X3NkX3JlYWRsKGF6eF9kZXYsIFNEX0xQSUIpOwogCQlpZiAoY2hpcC0+cG9zaXRpb25fZml4ID09IFBPU19GSVhfRklGTykKIAkJCXBvcyArPSBhenhfZGV2LT5maWZvX3NpemU7CisJCWVsc2UgaWYgKGNoaXAtPnBvc2l0aW9uX2ZpeCA9PSBQT1NfRklYX0FVVE8gJiYgYXp4X2Rldi0+cGVyaW9kX3VwZGF0aW5nKSB7CisJCQkvKiBjaGVjayB0aGUgdmFsaWRpdHkgb2YgRE1BIHBvc2l0aW9uICovCisJCQl1bnNpZ25lZCBpbnQgZGlmZiA9IDA7CisJCQlhenhfZGV2LT5sYXN0X3BvcyArPSBhenhfZGV2LT5mcmFnc2l6ZTsKKwkJCWlmIChhenhfZGV2LT5sYXN0X3BvcyA+IHBvcykKKwkJCQlkaWZmID0gYXp4X2Rldi0+bGFzdF9wb3MgLSBwb3M7CisJCQlpZiAoYXp4X2Rldi0+bGFzdF9wb3MgPj0gYXp4X2Rldi0+YnVmc2l6ZSkgeworCQkJCWlmIChwb3MgPCBhenhfZGV2LT5mcmFnc2l6ZSkKKwkJCQkJZGlmZiA9IDA7CisJCQkJYXp4X2Rldi0+bGFzdF9wb3MgPSAwOworCQkJfQorCQkJaWYgKGRpZmYgPiAwICYmIGRpZmYgPD0gYXp4X2Rldi0+Zmlmb19zaXplKQorCQkJCXBvcyArPSBhenhfZGV2LT5maWZvX3NpemU7CisJCQllbHNlIHsKKwkJCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9pbnRlbDogRE1BIHBvc2l0aW9uIGZpeCAlZCwgc3dpdGNoaW5nIHRvIHBvc2J1ZlxuIiwgZGlmZik7CisJCQkJY2hpcC0+cG9zaXRpb25fZml4ID0gUE9TX0ZJWF9QT1NCVUY7CisJCQkJcG9zID0gKmF6eF9kZXYtPnBvc2J1ZjsKKwkJCX0KKwkJCWF6eF9kZXYtPnBlcmlvZF91cGRhdGluZyA9IDA7CisJCX0KIAl9CiAJaWYgKHBvcyA+PSBhenhfZGV2LT5idWZzaXplKQogCQlwb3MgPSAwOwpAQCAtMTIwMywxMiArMTIyNywzMyBAQAogCWlmICgoZXJyID0gc25kX2hkYV9idWlsZF9wY21zKGNoaXAtPmJ1cykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCS8qIGNyZWF0ZSBhdWRpbyBQQ01zICovCiAJcGNtX2RldiA9IDA7CiAJbGlzdF9mb3JfZWFjaChwLCAmY2hpcC0+YnVzLT5jb2RlY19saXN0KSB7CiAJCWNvZGVjID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGRhX2NvZGVjLCBsaXN0KTsKIAkJZm9yIChjID0gMDsgYyA8IGNvZGVjLT5udW1fcGNtczsgYysrKSB7CisJCQlpZiAoY29kZWMtPnBjbV9pbmZvW2NdLmlzX21vZGVtKQorCQkJCWNvbnRpbnVlOyAvKiBjcmVhdGUgbGF0ZXIgKi8KKwkJCWlmIChwY21fZGV2ID49IEFaWF9NQVhfQVVESU9fUENNUykgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJUb28gbWFueSBhdWRpbyBQQ01zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWVyciA9IGNyZWF0ZV9jb2RlY19wY20oY2hpcCwgY29kZWMsICZjb2RlYy0+cGNtX2luZm9bY10sIHBjbV9kZXYpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCXBjbV9kZXYrKzsKKwkJfQorCX0KKworCS8qIGNyZWF0ZSBtb2RlbSBQQ01zICovCisJcGNtX2RldiA9IEFaWF9NQVhfQVVESU9fUENNUzsKKwlsaXN0X2Zvcl9lYWNoKHAsICZjaGlwLT5idXMtPmNvZGVjX2xpc3QpIHsKKwkJY29kZWMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoZGFfY29kZWMsIGxpc3QpOworCQlmb3IgKGMgPSAwOyBjIDwgY29kZWMtPm51bV9wY21zOyBjKyspIHsKKwkJCWlmICghIGNvZGVjLT5wY21faW5mb1tjXS5pc19tb2RlbSkKKwkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjcmVhdGVkICovCiAJCQlpZiAocGNtX2RldiA+PSBBWlhfTUFYX1BDTVMpIHsKLQkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAiVG9vIG1hbnkgUENNc1xuIik7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIlRvbyBtYW55IG1vZGVtIFBDTXNcbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJZXJyID0gY3JlYXRlX2NvZGVjX3BjbShjaGlwLCBjb2RlYywgJmNvZGVjLT5wY21faW5mb1tjXSwgcGNtX2Rldik7CkBAIC0xMjQ0LDggKzEyODksNyBAQAogCQlhenhfZGV2X3QgKmF6eF9kZXYgPSAmY2hpcC0+YXp4X2RldltpXTsKIAkJYXp4X2Rldi0+YmRsID0gKHUzMiAqKShjaGlwLT5iZGwuYXJlYSArIG9mZik7CiAJCWF6eF9kZXYtPmJkbF9hZGRyID0gY2hpcC0+YmRsLmFkZHIgKyBvZmY7Ci0JCWlmIChjaGlwLT5wb3NpdGlvbl9maXggPT0gUE9TX0ZJWF9QT1NCVUYpCi0JCQlhenhfZGV2LT5wb3NidWYgPSAodm9sYXRpbGUgdTMyICopKGNoaXAtPnBvc2J1Zi5hcmVhICsgaSAqIDgpOworCQlhenhfZGV2LT5wb3NidWYgPSAodm9sYXRpbGUgdTMyICopKGNoaXAtPnBvc2J1Zi5hcmVhICsgaSAqIDgpOwogCQkvKiBvZmZzZXQ6IFNESTA9MHg4MCwgU0RJMT0weGEwLCAuLi4gU0RPMz0weDE2MCAqLwogCQlhenhfZGV2LT5zZF9hZGRyID0gY2hpcC0+cmVtYXBfYWRkciArICgweDIwICogaSArIDB4ODApOwogCQkvKiBpbnQgbWFzazogU0RJMD0weDAxLCBTREkxPTB4MDIsIC4uLiBTRE8zPTB4ODAgKi8KQEAgLTEzNTgsNyArMTQwMiw3IEBACiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAkKIAlpZiAoTlVMTCA9PSBjaGlwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJjYW5ub3QgYWxsb2NhdGUgY2hpcFxuIik7CkBAIC0xNDM3LDEzICsxNDgxLDExIEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJjYW5ub3QgYWxsb2NhdGUgQkRMXG4iKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWlmIChjaGlwLT5wb3NpdGlvbl9maXggPT0gUE9TX0ZJWF9QT1NCVUYpIHsKLQkJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcG9zaXRpb24gYnVmZmVyICovCi0JCWlmICgoZXJyID0gc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKLQkJCQkJICAgICAgIGNoaXAtPm51bV9zdHJlYW1zICogOCwgJmNoaXAtPnBvc2J1ZikpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggImNhbm5vdCBhbGxvY2F0ZSBwb3NidWZcbiIpOwotCQkJZ290byBlcnJvdXQ7Ci0JCX0KKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBwb3NpdGlvbiBidWZmZXIgKi8KKwlpZiAoKGVyciA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisJCQkJICAgICAgIGNoaXAtPm51bV9zdHJlYW1zICogOCwgJmNoaXAtPnBvc2J1ZikpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAiY2Fubm90IGFsbG9jYXRlIHBvc2J1ZlxuIik7CisJCWdvdG8gZXJyb3V0OwogCX0KIAkvKiBhbGxvY2F0ZSBDT1JCL1JJUkIgKi8KIAlpZiAoKGVyciA9IGF6eF9hbGxvY19jbWRfaW8oY2hpcCkpIDwgMCkKQEAgLTE1NjEsNiArMTYwMyw3IEBACiAvKiBwY2lfZHJpdmVyIGRlZmluaXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSERBIEludGVsIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBhenhfaWRzLAogCS5wcm9iZSA9IGF6eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoYXp4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggZGUxMjE3Yi4uMDhmNmE2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtMjA3LDYgKzIwNyw4IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiVmVuZG9yIElkOiAweCV4XG4iLCBjb2RlYy0+dmVuZG9yX2lkKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJTdWJzeXN0ZW0gSWQ6IDB4JXhcbiIsIGNvZGVjLT5zdWJzeXN0ZW1faWQpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlJldmlzaW9uIElkOiAweCV4XG4iLCBjb2RlYy0+cmV2aXNpb25faWQpOworCWlmICghIGNvZGVjLT5hZmcpCisJCXJldHVybjsKIAlzbmRfaXByaW50ZihidWZmZXIsICJEZWZhdWx0IFBDTTogIik7CiAJcHJpbnRfcGNtX2NhcHMoYnVmZmVyLCBjb2RlYywgY29kZWMtPmFmZyk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiRGVmYXVsdCBBbXAtSW4gY2FwczogIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCBiY2ViODNhLi5kYTY4NzRkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTQ2NSw3ICs0NjUsNyBAQAogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKIAotCXNwZWMgPSBrY2FsbG9jKDEsIHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02MjMsNyArNjIzLDcgQEAKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CiAKLQlzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzY0LDcgKzc2NCw3IEBACiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwogCi0Jc3BlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCmluZGV4IDA3ZmI0ZjUuLjUyM2MzNjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwpAQCAtNjY3LDcgKzY2Nyw3IEBACiB7CiAJc3RydWN0IGNtaV9zcGVjICpzcGVjOwogCi0Jc3BlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggZWViOTAwYS4uODQ5YjViNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTE1MjYsNiArMTUyNiw3IEBACiAJLyogQmFjayAzIGphY2ssIGZyb250IDIgamFjayAoSW50ZXJuYWwgYWRkIEF1eC1JbikgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDI1LCAucGNpX3N1YmRldmljZSA9IDB4ZTMxMCwgLmNvbmZpZyA9IEFMQzg4MF8zU1QgfSwKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDRkLCAucGNpX3N1YmRldmljZSA9IDB4ODFkNiwgLmNvbmZpZyA9IEFMQzg4MF8zU1QgfSwgCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0ZCwgLnBjaV9zdWJkZXZpY2UgPSAweDgxYTAsIC5jb25maWcgPSBBTEM4ODBfM1NUIH0sCiAKIAkvKiBCYWNrIDMgamFjayBwbHVzIDEgU1BESUYgb3V0IGphY2ssIGZyb250IDIgamFjayAqLwogCXsgLm1vZGVsbmFtZSA9ICIzc3RhY2stZGlnb3V0IiwgLmNvbmZpZyA9IEFMQzg4MF8zU1RfRElHIH0sCkBAIC0xNTgxLDYgKzE1ODIsNyBAQAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxOTczLCAuY29uZmlnID0gQUxDODgwX0FTVVNfRElHIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDE5YjMsIC5jb25maWcgPSBBTEM4ODBfQVNVU19ESUcgfSwKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTExMywgLmNvbmZpZyA9IEFMQzg4MF9BU1VTX0RJRyB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxMTczLCAuY29uZmlnID0gQUxDODgwX0FTVVNfRElHIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDE5OTMsIC5jb25maWcgPSBBTEM4ODBfQVNVUyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxMGMzLCAuY29uZmlnID0gQUxDODgwX0FTVVNfRElHIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDExMzMsIC5jb25maWcgPSBBTEM4ODBfQVNVUyB9LApAQCAtMjA5Myw3ICsyMDk1LDcgQEAKIAlpbnQgYm9hcmRfY29uZmlnOwogCWludCBpLCBlcnI7CiAKLQlzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjM2NSw3ICsyMzY3LDcgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CiAJaW50IGJvYXJkX2NvbmZpZzsKIAotCXNwZWMgPSBrY2FsbG9jKDEsIHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yNjE1LDcgKzI2MTcsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKIAotCXNwZWMgPSBrY2FsbG9jKDEsIHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwppbmRleCBiMDI3MGQxLi5kMDE0YjdiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKQEAgLTIxNCw2ICsyMTQsNyBAQAogCWluZm8tPm5hbWUgPSAiU2kzMDU0IE1vZGVtIjsKIAlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSBzaTMwNTRfcGNtOwogCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdICA9IHNpMzA1NF9wY207CisJaW5mby0+aXNfbW9kZW0gPSAxOwogCXJldHVybiAwOwogfQogCkBAIC0yODIsNyArMjgzLDcgQEAKIAogc3RhdGljIGludCBwYXRjaF9zaTMwNTQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IHNpMzA1NF9zcGVjICpzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3Qgc2kzMDU0X3NwZWMgKnNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA5ZDUwM2RhLi4zM2E4YWRhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC05MTksNyArOTE5LDcgQEAKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKIAlpbnQgZXJyOwogCi0Jc3BlYyAgPSBrY2FsbG9jKDEsIHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtOTU3LDcgKzk1Nyw3IEBACiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CiAJaW50IGVycjsKIAotCXNwZWMgID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jIGIvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMKaW5kZXggNDQwNWQ5Ni4uMmUwYTMxNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMKQEAgLTE3OTYsNyArMTc5Niw3IEBACiAJfQogCiAJLyogdG8gcmVtZWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzIG9mIENTODQxNSAqLwotCWljZS0+YWttID0ga2NhbGxvYygxLCBzaXplb2YoYWttNHh4eF90KSwgR0ZQX0tFUk5FTCk7CisJaWNlLT5ha20gPSBremFsbG9jKHNpemVvZihha200eHh4X3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBpY2UtPmFrbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWNlLT5ha21fY29kZWNzID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBiOTdmNTBkLi5hNmQ5ODAxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0xMDAsMTIgKzEwMCw2IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkobW9kZWwsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobW9kZWwsICJVc2UgdGhlIGdpdmVuIGJvYXJkIG1vZGVsLiIpOwogCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfSUNFCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfSUNFCQkweDE0MTIKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lDRV8xNzEyCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUNFXzE3MTIJCTB4MTcxMgotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaWNlMTcxMl9pZHNbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfSUNFLCBQQ0lfREVWSUNFX0lEX0lDRV8xNzEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sICAgLyogSUNFMTcxMiAqLwpAQCAtMjUzNSw3ICsyNTI5LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQlpY2UgPSBrY2FsbG9jKDEsIHNpemVvZigqaWNlKSwgR0ZQX0tFUk5FTCk7CisJaWNlID0ga3phbGxvYyhzaXplb2YoKmljZSksIEdGUF9LRVJORUwpOwogCWlmIChpY2UgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNzQxLDYgKzI3MzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIklDRTE3MTIiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9pY2UxNzEyX2lkcywKIAkucHJvYmUgPSBzbmRfaWNlMTcxMl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2ljZTE3MTJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCBjN2FmNWU1Li5jM2NlOGY5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCkBAIC04MywxMiArODMsNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG1vZGVsLCBjaGFycCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1vZGVsLCAiVXNlIHRoZSBnaXZlbiBib2FyZCBtb2RlbC4iKTsKIAotI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0lDRQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lDRQkJMHgxNDEyCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9WVDE3MjQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9WVDE3MjQJCTB4MTcyNAotI2VuZGlmCiAKIC8qIEJvdGggVlQxNzIwIGFuZCBWVDE3MjQgaGF2ZSB0aGUgc2FtZSBQQ0kgSURzICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3Z0MTcyNF9pZHNbXSA9IHsKQEAgLTIxMzAsNyArMjEyNCw3IEBACiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpY2UgPSBrY2FsbG9jKDEsIHNpemVvZigqaWNlKSwgR0ZQX0tFUk5FTCk7CisJaWNlID0ga3phbGxvYyhzaXplb2YoKmljZSksIEdGUF9LRVJORUwpOwogCWlmIChpY2UgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMzIxLDYgKzIzMTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIklDRTE3MjQiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92dDE3MjRfaWRzLAogCS5wcm9iZSA9IHNuZF92dDE3MjRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF92dDE3MjRfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYwppbmRleCAzZmIyOTdiOS4uMjQzNzg3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJCWljZS0+bnVtX3RvdGFsX2RhY3MgPSAyOwogCQlpY2UtPm51bV90b3RhbF9hZGNzID0gMjsKIAotCQlhayA9IGljZS0+YWttID0ga2NhbGxvYygxLCBzaXplb2YoYWttNHh4eF90KSwgR0ZQX0tFUk5FTCk7CisJCWFrID0gaWNlLT5ha20gPSBremFsbG9jKHNpemVvZihha200eHh4X3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCEgYWspCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJaWNlLT5ha21fY29kZWNzID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9waGFzZS5jCmluZGV4IDViZjczNGIuLmRjZjFlOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcGhhc2UuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJfQogCiAJLy8gSW5pdGlhbGl6ZSBhbmFsb2cgY2hpcHMKLQlhayA9IGljZS0+YWttID0ga2NhbGxvYygxLCBzaXplb2YoYWttNHh4eF90KSwgR0ZQX0tFUk5FTCk7CisJYWsgPSBpY2UtPmFrbSA9IGt6YWxsb2Moc2l6ZW9mKGFrbTR4eHhfdCksIEdGUF9LRVJORUwpOwogCWlmICghIGFrKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpY2UtPmFrbV9jb2RlY3MgPSAxOwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJaWNlLT5udW1fdG90YWxfYWRjcyA9IDI7CiAKIAkvLyBJbml0aWFsaXplIGFuYWxvZyBjaGlwcwotCWFrID0gaWNlLT5ha20gPSBrY2FsbG9jKDEsIHNpemVvZihha200eHh4X3QpLCBHRlBfS0VSTkVMKTsKKwlhayA9IGljZS0+YWttID0ga3phbGxvYyhzaXplb2YoYWttNHh4eF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhaykKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWNlLT5ha21fY29kZWNzID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3BvbnRpcy5jIGIvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKaW5kZXggMjVmODI3ZC4uYTVmODUyYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKQEAgLTc4MSw3ICs3ODEsNyBAQAogCWljZS0+bnVtX3RvdGFsX2FkY3MgPSAyOwogCiAJLyogdG8gcmVtZWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCi0JaWNlLT5ha20gPSBrY2FsbG9jKDEsIHNpemVvZihha200eHh4X3QpLCBHRlBfS0VSTkVMKTsKKwlpY2UtPmFrbSA9IGt6YWxsb2Moc2l6ZW9mKGFrbTR4eHhfdCksIEdGUF9LRVJORUwpOwogCWlmICghIGljZS0+YWttKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpY2UtPmFrbV9jb2RlY3MgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCA3YjU0ODQxLi4xYTk2MTk4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtNjksNiArNjksNyBAQAogc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCiBzdGF0aWMgaW50IGFjOTdfY2xvY2tbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAwfTsKIHN0YXRpYyBjaGFyICphYzk3X3F1aXJrW1NORFJWX0NBUkRTXTsKK3N0YXRpYyBpbnQgYnVnZ3lfc2VtYXBob3JlW1NORFJWX0NBUkRTXTsKIHN0YXRpYyBpbnQgYnVnZ3lfaXJxW1NORFJWX0NBUkRTXTsKIHN0YXRpYyBpbnQgeGJveFtTTkRSVl9DQVJEU107CiAKQEAgLTg2LDYgKzg3LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoYWM5N19jbG9jaywgIkFDJzk3IGNvZGVjIGNsb2NrICgwID0gYXV0by1kZXRlY3QpLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGFjOTdfcXVpcmssIGNoYXJwLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWM5N19xdWlyaywgIkFDJzk3IHdvcmthcm91bmQgZm9yIHN0cmFuZ2UgaGFyZHdhcmUuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoYnVnZ3lfc2VtYXBob3JlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYnVnZ3lfc2VtYXBob3JlLCAiRW5hYmxlIHdvcmthcm91bmQgZm9yIGhhcmR3YXJlcyB3aXRoIHByb2JsZW1hdGljIGNvZGVjIHNlbWFwaG9yZXMuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoYnVnZ3lfaXJxLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYnVnZ3lfaXJxLCAiRW5hYmxlIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGludGVycnVwdHMgb24gc29tZSBtb3RoZXJib2FyZHMuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoeGJveCwgYm9vbCwgTlVMTCwgMDQ0NCk7CkBAIC05NCw2MiArOTcsNiBAQAogLyoKICAqICBEaXJlY3QgcmVnaXN0ZXJzCiAgKi8KLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDEgICAgICAgMHgyNDE1Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9JTlRFTF84MjkwMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTAxICAgICAgIDB4MjQyNQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkEgICAgIDB4MjQ0NQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfNDQwTVgKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF80NDBNWCAgICAgICAweDcxOTUKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gzCTB4MjQ4NQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDQJMHgyNGM1Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g1Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINQkweDI0ZDUKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl81Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzUJMHgyNWE2Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xOAkweDI2NmUKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMjAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIwCTB4MjdkZQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8xNAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTQJMHgyNjk4Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9TSV83MDEyCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzAxMgkJMHg3MDEyCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9OVklESUFfTUNQX0FVRElPCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUF9BVURJTwkweDAxYjEKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzgwNF9BVURJTwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzgwNF9BVURJTyAweDAwNTkKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyX0FVRElPCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJfQVVESU8JMHgwMDZhCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4X0FVRElPCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0NLOF9BVURJTwkweDAwOGEKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AzX0FVRElPCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDNfQVVESU8JMHgwMGRhCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4U19BVURJTwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzhTX0FVRElPCTB4MDBlYQotI2VuZGlmCi0KIGVudW0geyBERVZJQ0VfSU5URUwsIERFVklDRV9JTlRFTF9JQ0g0LCBERVZJQ0VfU0lTLCBERVZJQ0VfQUxJLCBERVZJQ0VfTkZPUkNFIH07CiAKICNkZWZpbmUgSUNIUkVHKHgpIElDSF9SRUdfIyN4CkBAIC00MjMsNiArMzcwLDcgQEAKIAl1bnNpZ25lZCBmaXhfbm9jYWNoZTogMTsgCS8qIHdvcmthcm91bmQgZm9yIDQ0ME1YICovCiAJdW5zaWduZWQgYnVnZ3lfaXJxOiAxOwkJLyogd29ya2Fyb3VuZCBmb3IgYnVnZ3kgbW9ib3MgKi8KIAl1bnNpZ25lZCB4Ym94OiAxOwkJLyogd29ya2Fyb3VuZCBmb3IgWGJveCBBQyc5NyBkZXRlY3Rpb24gKi8KKwl1bnNpZ25lZCBidWdneV9zZW1hcGhvcmU6IDE7CS8qIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGNvZGVjIHNlbWFwaG9yZSAqLwogCiAJaW50IHNwZGlmX2lkeDsJLyogU1BESUYgQkFSIGluZGV4OyAqX1NQQkFSIG9yIC0xIGlmIHVzZSBQQ01PVVQgKi8KIAl1bnNpZ25lZCBpbnQgc2RtX3NhdmVkOwkvKiBTRE0gcmVnIHZhbHVlICovCkBAIC01NzcsNiArNTI1LDkgQEAKIAlpZiAoKGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKSAmIGNvZGVjKSA9PSAwKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmIChjaGlwLT5idWdneV9zZW1hcGhvcmUpCisJCXJldHVybiAwOyAvKiBqdXN0IGlnbm9yZSAuLi4gKi8KKwogCS8qIEFueW9uZSBob2xkaW5nIGEgc2VtYXBob3JlIGZvciAxIG1zZWMgc2hvdWxkIGJlIHNob3QuLi4gKi8KIAl0aW1lID0gMTAwOwogICAgICAgCWRvIHsKQEAgLTE3NTksNiArMTcxMCwxMiBAQAogCQkudHlwZSA9IEFDOTdfVFVORV9BTENfSkFDSwogCX0sCiAJeworCQkuc3VidmVuZG9yID0gMHgxMDE0LAorCQkuc3ViZGV2aWNlID0gMHgwMjY3LAorCQkubmFtZSA9ICJJQk0gTmV0VmlzdGEgQTMwcCIsCS8qIEFEMTk4MUIgKi8KKwkJLnR5cGUgPSBBQzk3X1RVTkVfSFBfT05MWQorCX0sCisJewogCQkuc3VidmVuZG9yID0gMHgxMDI4LAogCQkuc3ViZGV2aWNlID0gMHgwMGQ4LAogCQkubmFtZSA9ICJEZWxsIFByZWNpc2lvbiA1MzAiLAkvKiBBRDE4ODUgKi8KQEAgLTI1OTksNiArMjU1Niw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZWw4eDBfY3JlYXRlKHNuZF9jYXJkX3QgKiBjYXJkLAogCQkJCQkgc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgZGV2aWNlX3R5cGUsCisJCQkJCSBpbnQgYnVnZ3lfc2VtLAogCQkJCQkgaW50ZWw4eDBfdCAqKiByX2ludGVsOHgwKQogewogCWludGVsOHgwX3QgKmNoaXA7CkBAIC0yNjQ2LDcgKzI2MDQsNyBAQAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNjU2LDYgKzI2MTQsNyBAQAogCWNoaXAtPmNhcmQgPSBjYXJkOwogCWNoaXAtPnBjaSA9IHBjaTsKIAljaGlwLT5pcnEgPSAtMTsKKwljaGlwLT5idWdneV9zZW1hcGhvcmUgPSBidWdneV9zZW07CiAKIAlpZiAocGNpLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCAmJgogCSAgICBwY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzQ0ME1YKQpAQCAtMjc5NSwxOSArMjc1NCwxOSBAQAogCXVuc2lnbmVkIGludCBpZDsKIAljb25zdCBjaGFyICpzOwogfSBzaG9ydG5hbWVzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDEsICJJbnRlbCA4MjgwMUFBLUlDSCIgfSwKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MDEsICJJbnRlbCA4MjkwMUFCLUlDSDAiIH0sCi0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkEsICJJbnRlbCA4MjgwMUJBLUlDSDIiIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfNSwgIkludGVsIDgyODAxQUEtSUNIIiB9LAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzUsICJJbnRlbCA4MjkwMUFCLUlDSDAiIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfNCwgIkludGVsIDgyODAxQkEtSUNIMiIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfNDQwTVgsICJJbnRlbCA0NDBNWCIgfSwKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMywgIkludGVsIDgyODAxQ0EtSUNIMyIgfSwKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINCwgIkludGVsIDgyODAxREItSUNINCIgfSwKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINSwgIkludGVsIElDSDUiIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfNSwgIkludGVsIDgyODAxQ0EtSUNIMyIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl81LCAiSW50ZWwgODI4MDFEQi1JQ0g0IiB9LAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzUsICJJbnRlbCBJQ0g1IiB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9FU0JfNSwgIkludGVsIDYzMDBFU0IiIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTgsICJJbnRlbCBJQ0g2IiB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIwLCAiSW50ZWwgSUNINyIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8xNCwgIkludGVsIEVTQjIiIH0sCiAJeyBQQ0lfREVWSUNFX0lEX1NJXzcwMTIsICJTaVMgU0k3MDEyIiB9LAotCXsgUENJX0RFVklDRV9JRF9OVklESUFfTUNQX0FVRElPLCAiTlZpZGlhIG5Gb3JjZSIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDFfQVVESU8sICJOVmlkaWEgbkZvcmNlIiB9LAogCXsgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMl9BVURJTywgIk5WaWRpYSBuRm9yY2UyIiB9LAogCXsgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19BVURJTywgIk5WaWRpYSBuRm9yY2UzIiB9LAogCXsgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4U19BVURJTywgIk5WaWRpYSBDSzhTIiB9LApAQCAtMjg2MCw3ICsyODE5LDggQEAKIAkJfQogCX0KIAotCWlmICgoZXJyID0gc25kX2ludGVsOHgwX2NyZWF0ZShjYXJkLCBwY2ksIHBjaV9pZC0+ZHJpdmVyX2RhdGEsICZjaGlwKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfaW50ZWw4eDBfY3JlYXRlKGNhcmQsIHBjaSwgcGNpX2lkLT5kcml2ZXJfZGF0YSwKKwkJCQkgICAgICAgYnVnZ3lfc2VtYXBob3JlW2Rldl0sICZjaGlwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjkwNCw2ICsyODY0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJJbnRlbCBJQ0giLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9pbnRlbDh4MF9pZHMsCiAJLnByb2JlID0gc25kX2ludGVsOHgwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaW50ZWw4eDBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCBiYjc1OGM3Li45ZTIwNjBkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC03Myw1MSArNzMsNiBAQAogLyoKICAqICBEaXJlY3QgcmVnaXN0ZXJzCiAgKi8KLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxXzYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMV82ICAgICAweDI0MTYKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTAxXzYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjkwMV82ICAgICAweDI0MjYKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfNgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfNiAgIDB4MjQ0NgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfNDQwTVhfNgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzQ0ME1YXzYgICAgIDB4NzE5NgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIM182Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIM182CTB4MjQ4NgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINF82Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINF82CTB4MjRjNgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINV82Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINV82CTB4MjRkNgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl82Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl82CTB4MjY2ZAotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN182Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN182CTB4MjdkZAotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfU0lfNzAxMwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTMJCTB4NzAxMwotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUF9NT0RFTQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1BfTU9ERU0JMHgwMWMxCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMl9NT0RFTQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyX01PREVNCTB4MDA2OQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJTX01PREVNCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJTX01PREVNIDB4MDA4OQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDNfTU9ERU0KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19NT0RFTQkweDAwZDkKLSNlbmRpZgotCi0KIGVudW0geyBERVZJQ0VfSU5URUwsIERFVklDRV9TSVMsIERFVklDRV9BTEksIERFVklDRV9ORk9SQ0UgfTsKIAogI2RlZmluZSBJQ0hSRUcoeCkgSUNIX1JFR18jI3gKQEAgLTExNTgsNyArMTExMyw3IEBACiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEyODMsMTggKzEyMzgsMTggQEAKIAl1bnNpZ25lZCBpbnQgaWQ7CiAJY29uc3QgY2hhciAqczsKIH0gc2hvcnRuYW1lc1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxXzYsICJJbnRlbCA4MjgwMUFBLUlDSCIgfSwKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MDFfNiwgIkludGVsIDgyOTAxQUItSUNIMCIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV82LCAiSW50ZWwgODI4MDFBQS1JQ0giIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfNiwgIkludGVsIDgyOTAxQUItSUNIMCIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV82LCAiSW50ZWwgODI4MDFCQS1JQ0gyIiB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF80NDBNWF82LCAiSW50ZWwgNDQwTVgiIH0sCi0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDNfNiwgIkludGVsIDgyODAxQ0EtSUNIMyIgfSwKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINF82LCAiSW50ZWwgODI4MDFEQi1JQ0g0IiB9LAotCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g1XzYsICJJbnRlbCBJQ0g1IiB9LAotCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzYsICJJbnRlbCBJQ0g2IiB9LAotCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzYsICJJbnRlbCBJQ0g3IiB9LAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzYsICJJbnRlbCA4MjgwMUNBLUlDSDMiIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfNiwgIkludGVsIDgyODAxREItSUNINCIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl82LCAiSW50ZWwgSUNINSIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xNywgIkludGVsIElDSDYiIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMTksICJJbnRlbCBJQ0g3IiB9LAogCXsgMHg3NDQ2LCAiQU1EIEFNRDc2OCIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfU0lfNzAxMywgIlNpUyBTSTcwMTMiIH0sCi0JeyBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1BfTU9ERU0sICJOVmlkaWEgbkZvcmNlIiB9LAorCXsgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMV9NT0RFTSwgIk5WaWRpYSBuRm9yY2UiIH0sCiAJeyBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyX01PREVNLCAiTlZpZGlhIG5Gb3JjZTIiIH0sCiAJeyBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyU19NT0RFTSwgIk5WaWRpYSBuRm9yY2UycyIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDNfTU9ERU0sICJOVmlkaWEgbkZvcmNlMyIgfSwKQEAgLTEzNzEsNiArMTMyNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSW50ZWwgSUNIIE1vZGVtIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaW50ZWw4eDBtX2lkcywKIAkucHJvYmUgPSBzbmRfaW50ZWw4eDBtX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaW50ZWw4eDBtX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IGQyYWE5YzguLjA5ZjljYmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yMjIwLDcgKzIyMjAsNyBAQAogICAgICAgICBpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCi0gICAgICAgIGtvcmcxMjEyID0ga2NhbGxvYygxLCBzaXplb2YoKmtvcmcxMjEyKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGtvcmcxMjEyID0ga3phbGxvYyhzaXplb2YoKmtvcmcxMjEyKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgIGlmIChrb3JnMTIxMiA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwpAQCAtMjUzNCw2ICsyNTM0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJrb3JnMTIxMiIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2tvcmcxMjEyX2lkcywKIAkucHJvYmUgPSBzbmRfa29yZzEyMTJfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9rb3JnMTIxMl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCAzOWI1ZTdkLi4yNjkzYjZmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtODcyLDM1ICs4NzIsNiBAQAogLyoKICAqIHBjaSBpZHMKICAqLwotCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfRVNTCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfRVNTICAgICAgICAgMHgxMjVECi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdST18xCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk9fMQkweDE5ODgKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk8JMHgxOTg5Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9FU1NfQ0FOWU9OM0RfMkxFCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0NBTllPTjNEXzJMRQkweDE5OTAKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VTU19DQU5ZT04zRF8yCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0NBTllPTjNEXzIJMHgxOTkyCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzMJMHgxOTk4Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzNfMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NQUVTVFJPM18xCTB4MTk5OQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zX0hXCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zX0hXCTB4MTk5YQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zXzIKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzNfMgkweDE5OWIKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX20zX2lkc1tdID0gewogCXtQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdST18xLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMH0sCkBAIC0yNjg5LDcgKzI2NjAsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjg5MCw2ICsyODYxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJNYWVzdHJvMyIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX20zX2lkcywKIAkucHJvYmUgPSBzbmRfbTNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9tM19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggNmM4NjhkOS4uMWE2MmM3ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0xMDA0LDcgKzEwMDQsNyBAQAogCQkuZGV2X2ZyZWUgPSBzbmRfbWl4YXJ0X2NoaXBfZGV2X2ZyZWUsCiAJfTsKIAotCW1nci0+Y2hpcFtpZHhdID0gY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJbWdyLT5jaGlwW2lkeF0gPSBjaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBjaGlwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBhbGxvY2F0ZSBjaGlwXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjkyLDcgKzEyOTIsNyBAQAogCiAJLyoKIAkgKi8KLQltZ3IgPSBrY2FsbG9jKDEsIHNpemVvZigqbWdyKSwgR0ZQX0tFUk5FTCk7CisJbWdyID0ga3phbGxvYyhzaXplb2YoKm1nciksIEdGUF9LRVJORUwpOwogCWlmICghIG1ncikgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNDI0LDYgKzE0MjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkRpZ2lncmFtIG1pWGFydCIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX21peGFydF9pZHMsCiAJLnByb2JlID0gc25kX21peGFydF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX21peGFydF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwppbmRleCAyYmJlYjEwLi41YzU1YTNiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYworKysgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwpAQCAtMjU5LDIxICsyNTksNiBAQAogLyoKICAqIFBDSSBpZHMKICAqLwotCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfTkVPTUFHSUMKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORU9NRUdJQyAweDEwYzgKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU8KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NkFWX0FVRElPIDB4ODAwNQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZaWF9BVURJTwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2WlhfQVVESU8gMHg4MDA2Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlhMX1BMVVNfQVVESU8KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlhMX1BMVVNfQVVESU8gMHg4MDE2Ci0jZW5kaWYKLQotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX25tMjU2X2lkc1tdID0gewogCXtQQ0lfVkVORE9SX0lEX05FT01BR0lDLCBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU8sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX05FT01BR0lDLCBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2WlhfQVVESU8sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApAQCAtODQwLDcgKzgyNSw3IEBACiAJcnVudGltZS0+aHcgPSAqaHdfcHRyOwogCXJ1bnRpbWUtPmh3LmJ1ZmZlcl9ieXRlc19tYXggPSBzLT5idWZzaXplOwogCXJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19tYXggPSBzLT5idWZzaXplIC8gMjsKLQlydW50aW1lLT5kbWFfYXJlYSA9ICh2b2lkKikgcy0+YnVmcHRyOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gKHZvaWQgX19mb3JjZSAqKSBzLT5idWZwdHI7CiAJcnVudGltZS0+ZG1hX2FkZHIgPSBzLT5idWZwdHJfYWRkcjsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSBzLT5idWZzaXplOwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHM7CkBAIC0xNDA0LDcgKzEzODksNyBAQAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNjgzLDYgKzE2NjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIk5lb01hZ2ljIDI1NiIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX25tMjU2X2lkcywKIAkucHJvYmUgPSBzbmRfbm0yNTZfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9ubTI1Nl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTMyLmMgYi9zb3VuZC9wY2kvcm1lMzIuYwppbmRleCA0NTZiZTM5Li5jZDMxM2FmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lMzIuYworKysgYi9zb3VuZC9wY2kvcm1lMzIuYwpAQCAtMTkyLDIwICsxOTIsNiBAQAogI2RlZmluZSBSTUUzMl9QUk9fUkVWSVNJT05fV0lUSF84NDE0IDE1MAogCiAKLS8qIFBDSSB2ZW5kb3IvZGV2aWNlIElEJ3MgKi8KLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9YSUxJTlhfUk1FCi0jIGRlZmluZSBQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUgMHhlYTYwCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9ESUdJMzIKLSMgZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSTMyIDB4OTg5NgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfRElHSTMyX1BSTwotIyBkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJMzJfUFJPIDB4OTg5NwotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfRElHSTMyXzgKLSMgZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSTMyXzggMHg5ODk4Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3Qgc25kX3JtZTMyIHsKIAlzcGlubG9ja190IGxvY2s7CiAJaW50IGlycTsKQEAgLTI0MiwxMSArMjI4LDExIEBACiB9IHJtZTMyX3Q7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcm1lMzJfaWRzW10gPSB7Ci0Je1BDSV9WRU5ET1JfSURfWElMSU5YX1JNRSwgUENJX0RFVklDRV9JRF9ESUdJMzIsCisJe1BDSV9WRU5ET1JfSURfWElMSU5YX1JNRSwgUENJX0RFVklDRV9JRF9STUVfRElHSTMyLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLH0sCi0Je1BDSV9WRU5ET1JfSURfWElMSU5YX1JNRSwgUENJX0RFVklDRV9JRF9ESUdJMzJfOCwKKwl7UENJX1ZFTkRPUl9JRF9YSUxJTlhfUk1FLCBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfOCwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCx9LAotCXtQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfRElHSTMyX1BSTywKKwl7UENJX1ZFTkRPUl9JRF9YSUxJTlhfUk1FLCBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfUFJPLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLH0sCiAJezAsfQogfTsKQEAgLTI1NCw3ICsyNDAsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNuZF9ybWUzMl9pZHMpOwogCiAjZGVmaW5lIFJNRTMyX0lTV09SS0lORyhybWUzMikgKChybWUzMiktPndjcmVnICYgUk1FMzJfV0NSX1NUQVJUKQotI2RlZmluZSBSTUUzMl9QUk9fV0lUSF84NDE0KHJtZTMyKSAoKHJtZTMyKS0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ESUdJMzJfUFJPICYmIChybWUzMiktPnJldiA9PSBSTUUzMl9QUk9fUkVWSVNJT05fV0lUSF84NDE0KQorI2RlZmluZSBSTUUzMl9QUk9fV0lUSF84NDE0KHJtZTMyKSAoKHJtZTMyKS0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9STUVfRElHSTMyX1BSTyAmJiAocm1lMzIpLT5yZXYgPT0gUk1FMzJfUFJPX1JFVklTSU9OX1dJVEhfODQxNCkKIAogc3RhdGljIGludCBzbmRfcm1lMzJfcGxheWJhY2tfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKIApAQCAtNTQxLDIxICs1MjcsMjEgQEAKIAkJCVJNRTMyX1dDUl9GUkVRXzE7CiAJCWJyZWFrOwogCWNhc2UgNjQwMDA6Ci0JCWlmIChybWUzMi0+cGNpLT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9ESUdJMzJfUFJPKQorCQlpZiAocm1lMzItPnBjaS0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk8pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcm1lMzItPndjcmVnIHw9IFJNRTMyX1dDUl9EU19CTTsKIAkJcm1lMzItPndjcmVnID0gKHJtZTMyLT53Y3JlZyB8IFJNRTMyX1dDUl9GUkVRXzApICYgCiAJCQl+Uk1FMzJfV0NSX0ZSRVFfMTsKIAkJYnJlYWs7CiAJY2FzZSA4ODIwMDoKLQkJaWYgKHJtZTMyLT5wY2ktPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0RJR0kzMl9QUk8pCisJCWlmIChybWUzMi0+cGNpLT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9STUVfRElHSTMyX1BSTykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlybWUzMi0+d2NyZWcgfD0gUk1FMzJfV0NSX0RTX0JNOwogCQlybWUzMi0+d2NyZWcgPSAocm1lMzItPndjcmVnIHwgUk1FMzJfV0NSX0ZSRVFfMSkgJiAKIAkJCX5STUUzMl9XQ1JfRlJFUV8wOwogCQlicmVhazsKIAljYXNlIDk2MDAwOgotCQlpZiAocm1lMzItPnBjaS0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfRElHSTMyX1BSTykKKwkJaWYgKHJtZTMyLT5wY2ktPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfUFJPKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJtZTMyLT53Y3JlZyB8PSBSTUUzMl9XQ1JfRFNfQk07CiAJCXJtZTMyLT53Y3JlZyA9IChybWUzMi0+d2NyZWcgfCBSTUUzMl9XQ1JfRlJFUV8wKSB8IApAQCAtNjkyLDcgKzY3OCw4IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9IGVsc2UgewotCQlydW50aW1lLT5kbWFfYXJlYSA9ICh2b2lkICopKHJtZTMyLT5pb2Jhc2UgKyBSTUUzMl9JT19EQVRBX0JVRkZFUik7CisJCXJ1bnRpbWUtPmRtYV9hcmVhID0gKHZvaWQgX19mb3JjZSAqKShybWUzMi0+aW9iYXNlICsKKwkJCQkJCSAgICAgUk1FMzJfSU9fREFUQV9CVUZGRVIpOwogCQlydW50aW1lLT5kbWFfYWRkciA9IHJtZTMyLT5wb3J0ICsgUk1FMzJfSU9fREFUQV9CVUZGRVI7CiAJCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IFJNRTMyX0JVRkZFUl9TSVpFOwogCX0KQEAgLTc0Niw3ICs3MzMsOCBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfSBlbHNlIHsKLQkJcnVudGltZS0+ZG1hX2FyZWEgPSAodm9pZCAqKXJtZTMyLT5pb2Jhc2UgKyBSTUUzMl9JT19EQVRBX0JVRkZFUjsKKwkJcnVudGltZS0+ZG1hX2FyZWEgPSAodm9pZCBfX2ZvcmNlICopcm1lMzItPmlvYmFzZSArCisJCQkJCVJNRTMyX0lPX0RBVEFfQlVGRkVSOwogCQlydW50aW1lLT5kbWFfYWRkciA9IHJtZTMyLT5wb3J0ICsgUk1FMzJfSU9fREFUQV9CVUZGRVI7CiAJCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IFJNRTMyX0JVRkZFUl9TSVpFOwogCX0KQEAgLTg5Myw3ICs4ODEsNyBAQAogCQlydW50aW1lLT5odyA9IHNuZF9ybWUzMl9zcGRpZl9mZF9pbmZvOwogCWVsc2UKIAkJcnVudGltZS0+aHcgPSBzbmRfcm1lMzJfc3BkaWZfaW5mbzsKLQlpZiAocm1lMzItPnBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRElHSTMyX1BSTykgeworCWlmIChybWUzMi0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9STUVfRElHSTMyX1BSTykgewogCQlydW50aW1lLT5ody5yYXRlcyB8PSBTTkRSVl9QQ01fUkFURV82NDAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDA7CiAJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gOTYwMDA7CiAJfQpAQCAtMTQyMCw4ICsxNDA4LDggQEAKIAl9CiAKIAkvKiBzZXQgdXAgQUxTQSBwY20gZGV2aWNlIGZvciBBREFUICovCi0JaWYgKChwY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0RJR0kzMikgfHwKLQkgICAgKHBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRElHSTMyX1BSTykpIHsKKwlpZiAoKHBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMikgfHwKKwkgICAgKHBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk8pKSB7CiAJCS8qIEFEQVQgaXMgbm90IGF2YWlsYWJsZSBvbiBESUdJMzIgYW5kIERJR0kzMiBQcm8gKi8KIAkJcm1lMzItPmFkYXRfcGNtID0gTlVMTDsKIAl9CkBAIC0xNjUxLDExICsxNjM5LDExIEBACiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAlzd2l0Y2ggKHJtZTMyLT5wY2ktPmRldmljZSkgewotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJMzI6Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RJR0kzMl84OgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTMyOgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTMyXzg6CiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKIAkJYnJlYWs7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RJR0kzMl9QUk86CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfUFJPOgogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNjgyLDExICsxNjcwLDExIEBACiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHNuZF9ybWUzMl9nZXRpbnB1dHR5cGUocm1lMzIpOwogCiAJc3dpdGNoIChybWUzMi0+cGNpLT5kZXZpY2UpIHsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTMyOgotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJMzJfODoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMjoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl84OgogCQlpdGVtcyA9IDM7CiAJCWJyZWFrOwotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJMzJfUFJPOgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTMyX1BSTzoKIAkJaXRlbXMgPSA0OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTcwOSwxMSArMTY5NywxMSBAQAogCWludCBjaGFuZ2UsIGl0ZW1zID0gMzsKIAogCXN3aXRjaCAocm1lMzItPnBjaS0+ZGV2aWNlKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RJR0kzMjoKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTMyXzg6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzI6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfODoKIAkJaXRlbXMgPSAzOwogCQlicmVhazsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTMyX1BSTzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk86CiAJCWl0ZW1zID0gNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE5OTQsMTMgKzE5ODIsMTMgQEAKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJEaWdpMzIiKTsKIAlzd2l0Y2ggKHJtZTMyLT5wY2ktPmRldmljZSkgewotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJMzI6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzI6CiAJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJSTUUgRGlnaTMyIik7CiAJCWJyZWFrOwotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJMzJfODoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl84OgogCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiUk1FIERpZ2kzMi84Iik7CiAJCWJyZWFrOwotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJMzJfUFJPOgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTMyX1BSTzoKIAkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlJNRSBEaWdpMzIgUFJPIik7CiAJCWJyZWFrOwogCX0KQEAgLTIwMjQsNiArMjAxMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPQkJIlJNRSBEaWdpMzIiLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9CXNuZF9ybWUzMl9pZHMsCiAJLnByb2JlID0Jc25kX3JtZTMyX3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcChzbmRfcm1lMzJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5Ni5jIGIvc291bmQvcGNpL3JtZTk2LmMKaW5kZXggOTY0NWU5MC4uYzQ5NWNhZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2LmMKKysrIGIvc291bmQvcGNpL3JtZTk2LmMKQEAgLTIwMCwyNSArMjAwLDYgQEAKICNkZWZpbmUgUk1FOTZfQUQxODUyX1ZPTF9CSVRTIDE0CiAjZGVmaW5lIFJNRTk2X0FEMTg1NV9WT0xfQklUUyAxMAogCi0vKgotICogUENJIHZlbmRvci9kZXZpY2UgaWRzLCBjb3VsZCBpbiB0aGUgZnV0dXJlIGJlIGRlZmluZWQgaW4gPGxpbnV4L3BjaS5oPiwKLSAqIHRoZXJlZm9yZSAjaWZuZGVmIGlzIHVzZWQuCi0gKi8KLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9YSUxJTlgKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9YSUxJTlggMHgxMGVlCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9ESUdJOTYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJOTYgMHgzZmMwCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9ESUdJOTZfOAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84IDB4M2ZjMQotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUFJPCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUFJPIDB4M2ZjMgotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUEFEX09SX1BTVAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84X1BBRF9PUl9QU1QgMHgzZmMzCi0jZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3Qgc25kX3JtZTk2IHsKIAlzcGlubG9ja190ICAgIGxvY2s7CkBAIC0yNTIsMTMgKzIzMywxMyBAQAogfSBybWU5Nl90OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2X2lkc1tdID0gewotCXsgUENJX1ZFTkRPUl9JRF9YSUxJTlgsIFBDSV9ERVZJQ0VfSURfRElHSTk2LAorCXsgUENJX1ZFTkRPUl9JRF9YSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NiwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX1hJTElOWCwgUENJX0RFVklDRV9JRF9ESUdJOTZfOCwKKwl7IFBDSV9WRU5ET1JfSURfWElMSU5YLCBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX1hJTElOWCwgUENJX0RFVklDRV9JRF9ESUdJOTZfOF9QUk8sCisJeyBQQ0lfVkVORE9SX0lEX1hJTElOWCwgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKLQl7IFBDSV9WRU5ET1JfSURfWElMSU5YLCBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84X1BBRF9PUl9QU1QsCisJeyBQQ0lfVkVORE9SX0lEX1hJTElOWCwgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUEFEX09SX1BTVCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIAogCXsgMCwgfQogfTsKQEAgLTI2NywxMiArMjQ4LDEyIEBACiAKICNkZWZpbmUgUk1FOTZfSVNQTEFZSU5HKHJtZTk2KSAoKHJtZTk2KS0+d2NyZWcgJiBSTUU5Nl9XQ1JfU1RBUlQpCiAjZGVmaW5lIFJNRTk2X0lTUkVDT1JESU5HKHJtZTk2KSAoKHJtZTk2KS0+d2NyZWcgJiBSTUU5Nl9XQ1JfU1RBUlRfMikKLSNkZWZpbmUJUk1FOTZfSEFTX0FOQUxPR19JTihybWU5NikgKChybWU5NiktPnBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUEFEX09SX1BTVCkKLSNkZWZpbmUJUk1FOTZfSEFTX0FOQUxPR19PVVQocm1lOTYpICgocm1lOTYpLT5wY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84X1BSTyB8fCBcCi0JCQkJICAgICAocm1lOTYpLT5wY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84X1BBRF9PUl9QU1QpCisjZGVmaW5lCVJNRTk2X0hBU19BTkFMT0dfSU4ocm1lOTYpICgocm1lOTYpLT5wY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QQURfT1JfUFNUKQorI2RlZmluZQlSTUU5Nl9IQVNfQU5BTE9HX09VVChybWU5NikgKChybWU5NiktPnBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BSTyB8fCBcCisJCQkJICAgICAocm1lOTYpLT5wY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QQURfT1JfUFNUKQogI2RlZmluZQlSTUU5Nl9EQUNfSVNfMTg1MihybWU5NikgKFJNRTk2X0hBU19BTkFMT0dfT1VUKHJtZTk2KSAmJiAocm1lOTYpLT5yZXYgPj0gNCkKLSNkZWZpbmUJUk1FOTZfREFDX0lTXzE4NTUocm1lOTYpICgoKHJtZTk2KS0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ESUdJOTZfOF9QQURfT1JfUFNUICYmIChybWU5NiktPnJldiA8IDQpIHx8IFwKLQkJCSAgICAgICAgICAoKHJtZTk2KS0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ESUdJOTZfOF9QUk8gJiYgKHJtZTk2KS0+cmV2ID09IDIpKQorI2RlZmluZQlSTUU5Nl9EQUNfSVNfMTg1NShybWU5NikgKCgocm1lOTYpLT5wY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QQURfT1JfUFNUICYmIChybWU5NiktPnJldiA8IDQpIHx8IFwKKwkJCSAgICAgICAgICAoKHJtZTk2KS0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPICYmIChybWU5NiktPnJldiA9PSAyKSkKICNkZWZpbmUJUk1FOTZfMTg1WF9NQVhfT1VUKHJtZTk2KSAoKDEgPDwgKFJNRTk2X0RBQ19JU18xODUyKHJtZTk2KSA/IFJNRTk2X0FEMTg1Ml9WT0xfQklUUyA6IFJNRTk2X0FEMTg1NV9WT0xfQklUUykpIC0gMSkKIAogc3RhdGljIGludApAQCAtODQ5LDkgKzgzMCw5IEBACiAJCQlSTUU5Nl9XQ1JfSU5QXzE7CiAJCWJyZWFrOwogCWNhc2UgUk1FOTZfSU5QVVRfWExSOgotCQlpZiAoKHJtZTk2LT5wY2ktPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84X1BBRF9PUl9QU1QgJiYKLQkJICAgICBybWU5Ni0+cGNpLT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9ESUdJOTZfOF9QUk8pIHx8Ci0JCSAgICAocm1lOTYtPnBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUEFEX09SX1BTVCAmJgorCQlpZiAoKHJtZTk2LT5wY2ktPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QQURfT1JfUFNUICYmCisJCSAgICAgcm1lOTYtPnBjaS0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BSTykgfHwKKwkJICAgIChybWU5Ni0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUEFEX09SX1BTVCAmJgogCQkgICAgIHJtZTk2LT5yZXYgPiA0KSkKIAkJewogCQkJLyogT25seSBEaWdpOTYvOCBQUk8gYW5kIERpZ2k5Ni84IFBBRCBzdXBwb3J0cyBYTFIgKi8KQEAgLTk4NSw3ICs5NjYsOCBAQAogCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCBlcnIsIHJhdGUsIGR1bW15OwogCi0JcnVudGltZS0+ZG1hX2FyZWEgPSAodm9pZCAqKShybWU5Ni0+aW9iYXNlICsgUk1FOTZfSU9fUExBWV9CVUZGRVIpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gKHZvaWQgX19mb3JjZSAqKShybWU5Ni0+aW9iYXNlICsKKwkJCQkJICAgICBSTUU5Nl9JT19QTEFZX0JVRkZFUik7CiAJcnVudGltZS0+ZG1hX2FkZHIgPSBybWU5Ni0+cG9ydCArIFJNRTk2X0lPX1BMQVlfQlVGRkVSOwogCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IFJNRTk2X0JVRkZFUl9TSVpFOwogCkBAIC0xMDM3LDcgKzEwMTksOCBAQAogCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCBlcnIsIGlzYWRhdCwgcmF0ZTsKIAkKLQlydW50aW1lLT5kbWFfYXJlYSA9ICh2b2lkICopKHJtZTk2LT5pb2Jhc2UgKyBSTUU5Nl9JT19SRUNfQlVGRkVSKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9ICh2b2lkIF9fZm9yY2UgKikocm1lOTYtPmlvYmFzZSArCisJCQkJCSAgICAgUk1FOTZfSU9fUkVDX0JVRkZFUik7CiAJcnVudGltZS0+ZG1hX2FkZHIgPSBybWU5Ni0+cG9ydCArIFJNRTk2X0lPX1JFQ19CVUZGRVI7CiAJcnVudGltZS0+ZG1hX2J5dGVzID0gUk1FOTZfQlVGRkVSX1NJWkU7CiAKQEAgLTE2MTUsNyArMTU5OCw3IEBACiAJcm1lOTYtPnNwZGlmX3BjbS0+aW5mb19mbGFncyA9IDA7CiAKIAkvKiBzZXQgdXAgQUxTQSBwY20gZGV2aWNlIGZvciBBREFUICovCi0JaWYgKHBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRElHSTk2KSB7CisJaWYgKHBjaS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NikgewogCQkvKiBBREFUIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGJhc2UgbW9kZWwgKi8KIAkJcm1lOTYtPmFkYXRfcGNtID0gTlVMTDsKIAl9IGVsc2UgewpAQCAtMTg3NSwxNCArMTg1OCwxNCBAQAogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJc3dpdGNoIChybWU5Ni0+cGNpLT5kZXZpY2UpIHsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2OgotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJOTZfODoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NjoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84OgogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CiAJCWJyZWFrOwotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJOTZfOF9QUk86CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QUk86CiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gNDsKIAkJYnJlYWs7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84X1BBRF9PUl9QU1Q6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QQURfT1JfUFNUOgogCQlpZiAocm1lOTYtPnJldiA+IDQpIHsKIAkJCS8qIFBTVCAqLwogCQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA0OwpAQCAtMTkxMiwxNCArMTg5NSwxNCBAQAogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBzbmRfcm1lOTZfZ2V0aW5wdXR0eXBlKHJtZTk2KTsKIAkKIAlzd2l0Y2ggKHJtZTk2LT5wY2ktPmRldmljZSkgewotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJOTY6Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84OgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTk2OgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTk2Xzg6CiAJCWl0ZW1zID0gMzsKIAkJYnJlYWs7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RJR0k5Nl84X1BSTzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BSTzoKIAkJaXRlbXMgPSA0OwogCQlicmVhazsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUEFEX09SX1BTVDoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BBRF9PUl9QU1Q6CiAJCWlmIChybWU5Ni0+cmV2ID4gNCkgewogCQkJLyogZm9yIGhhbmRsaW5nIFBTVCBjYXNlLCAoSU5QVVRfQU5BTE9HIGlzIG1vdmVkIHRvIElOUFVUX1hMUiAqLwogCQkJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPT0gUk1FOTZfSU5QVVRfQU5BTE9HKSB7CkBAIC0xOTQ5LDE0ICsxOTMyLDE0IEBACiAJaW50IGNoYW5nZSwgaXRlbXMgPSAzOwogCQogCXN3aXRjaCAocm1lOTYtPnBjaS0+ZGV2aWNlKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RJR0k5NjoKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2Xzg6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTY6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfODoKIAkJaXRlbXMgPSAzOwogCQlicmVhazsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUFJPOgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPOgogCQlpdGVtcyA9IDQ7CiAJCWJyZWFrOwotCWNhc2UgUENJX0RFVklDRV9JRF9ESUdJOTZfOF9QQURfT1JfUFNUOgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUEFEX09SX1BTVDoKIAkJaWYgKHJtZTk2LT5yZXYgPiA0KSB7CiAJCQlpdGVtcyA9IDQ7CiAJCX0gZWxzZSB7CkBAIC0xOTcwLDcgKzE5NTMsNyBAQAogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gJSBpdGVtczsKIAkKIAkvKiBzcGVjaWFsIGNhc2UgZm9yIFBTVCAqLwotCWlmIChybWU5Ni0+cGNpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ESUdJOTZfOF9QQURfT1JfUFNUICYmIHJtZTk2LT5yZXYgPiA0KSB7CisJaWYgKHJtZTk2LT5wY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QQURfT1JfUFNUICYmIHJtZTk2LT5yZXYgPiA0KSB7CiAJCWlmICh2YWwgPT0gUk1FOTZfSU5QVVRfWExSKSB7CiAJCQl2YWwgPSBSTUU5Nl9JTlBVVF9BTkFMT0c7CiAJCX0KQEAgLTIzOTIsMTYgKzIzNzUsMTYgQEAKIAkKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiRGlnaTk2Iik7CiAJc3dpdGNoIChybWU5Ni0+cGNpLT5kZXZpY2UpIHsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2OgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTk2OgogCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiUk1FIERpZ2k5NiIpOwogCQlicmVhazsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2Xzg6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfODoKIAkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlJNRSBEaWdpOTYvOCIpOwogCQlicmVhazsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUFJPOgorCWNhc2UgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPOgogCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiUk1FIERpZ2k5Ni84IFBSTyIpOwogCQlicmVhazsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRElHSTk2XzhfUEFEX09SX1BTVDoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BBRF9PUl9QU1Q6CiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHJtZTk2LT5wY2ksIDgsICZ2YWwpOwogCQlpZiAodmFsIDwgNSkgewogCQkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlJNRSBEaWdpOTYvOCBQQUQiKTsKQEAgLTI0MzAsNiArMjQxMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiUk1FIERpZ2k5NiIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3JtZTk2X2lkcywKIAkucHJvYmUgPSBzbmRfcm1lOTZfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9ybWU5Nl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCmluZGV4IDY2OTQ4NjYuLjUyNTI1ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKQEAgLTM3MCwxMyArMzcwLDYgQEAKICNkZWZpbmUgVU5JVFlfR0FJTiAgICAgICAgICAgICAgICAgICAgICAgMzI3NjgKICNkZWZpbmUgTUlOVVNfSU5GSU5JVFlfR0FJTiAgICAgICAgICAgICAgMAogCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfWElMSU5YCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfWElMSU5YCQkweDEwZWUKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCAweDNmYzUKLSNlbmRpZgotCiAvKiB0aGUgc2l6ZSBvZiBhIHN1YnN0cmVhbSAoMSBtb25vIGRhdGEgc3RyZWFtKSAqLwogCiAjZGVmaW5lIEhEU1BfQ0hBTk5FTF9CVUZGRVJfU0FNUExFUyAgKDE2KjEwMjQpCkBAIC00ODk5LDYgKzQ4OTIsNyBAQAogCX0KIAkKIAlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpIHsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkhhbW1lcmZhbGwgRFNQIik7CiAJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLCAKIAkJCWhkc3AtPnBvcnQsIGhkc3AtPmlycSk7CiAJICAgIApAQCAtNTIyMiw2ICs1MjE2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICAgICAiUk1FIEhhbW1lcmZhbGwgRFNQIiwKKwkub3duZXIgPSAgICBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaGRzcF9pZHMsCiAJLnByb2JlID0gICAgc25kX2hkc3BfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9oZHNwX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCA1ZDc4NmQxLi5mYzNmMzI4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTMwMSwxOCArMzAxLDYgQEAKICNkZWZpbmUgVU5JVFlfR0FJTiAgICAgICAgICAzMjc2OAkvKiA9IDY1NTM2LzIgKi8KICNkZWZpbmUgTUlOVVNfSU5GSU5JVFlfR0FJTiAwCiAKLS8qIFBDSSBpbmZvICovCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfWElMSU5YCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfWElMSU5YCQkweDEwZWUKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCAweDNmYzUKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUF9NQURJCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQX01BREkgMHgzZmM2Ci0jZW5kaWYKLQotCiAvKiBOdW1iZXIgb2YgY2hhbm5lbHMgZm9yIGRpZmZlcmVudCBTcGVlZCBNb2RlcyAqLwogI2RlZmluZSBNQURJX1NTX0NIQU5ORUxTICAgICAgIDY0CiAjZGVmaW5lIE1BRElfRFNfQ0hBTk5FTFMgICAgICAgMzIKQEAgLTM2NTIsNiArMzY0MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiUk1FIEhhbW1lcmZhbGwgRFNQIE1BREkiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9oZHNwbV9pZHMsCiAJLnByb2JlID0gc25kX2hkc3BtX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaGRzcG1fcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCA4ZWU0ZDZmLi5iNjAwZjQ1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0xMjAsMTMgKzEyMCw2IEBACiAKICNkZWZpbmUgUk1FOTY1Ml9SRVYxNV9idWZfcG9zKHgpICgoKCh4KSYweEUwMDAwMDAwKT4+MjYpfCgoeCkmUk1FOTY1Ml9idWZfcG9zKSkKIAotI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1hJTElOWAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1hJTElOWAkJMHgxMGVlCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMCTB4M2ZjNAotI2VuZGlmCi0KIC8qIGFtb3VudCBvZiBpbyBzcGFjZSB3ZSByZW1hcCBmb3IgcmVnaXN0ZXIgYWNjZXNzLiBpJ20gbm90IHN1cmUgd2UKICAgIGV2ZW4gbmVlZCB0aGlzIG11Y2gsIGJ1dCAxSyBpcyBuaWNlIHJvdW5kIG51bWJlciA6KQogKi8KQEAgLTI2NjEsNiArMjY1NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUJICA9ICJSTUUgRGlnaTk2NTIgKEhhbW1lcmZhbGwpIiwKKwkub3duZXIJICA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9ybWU5NjUyX2lkcywKIAkucHJvYmUJICA9IHNuZF9ybWU5NjUyX3Byb2JlLAogCS5yZW1vdmUJICA9IF9fZGV2ZXhpdF9wKHNuZF9ybWU5NjUyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCA2MGVjYjJiLi4xZjZjMmJmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTUwLDEzICs1MCw2IEBACiAjZGVmaW5lIFNVUFBPUlRfSk9ZU1RJQ0sgMQogI2VuZGlmCiAKLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9TMwotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1MzICAgICAgICAgICAgIDB4NTMzMwotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfUzNfU09OSUNWSUJFUwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1NPTklDVklCRVMgIDB4Y2EwMAotI2VuZGlmCi0KIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsJLyogRW5hYmxlIHRoaXMgY2FyZCAqLwpAQCAtMTI1Nyw3ICsxMjUwLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOwogICAgICAgICB9CiAKLQlzb25pYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzb25pYyksIEdGUF9LRVJORUwpOworCXNvbmljID0ga3phbGxvYyhzaXplb2YoKnNvbmljKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNvbmljID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUxNSw2ICsxNTA4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJTMyBTb25pY1ZpYmVzIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfc29uaWNfaWRzLAogCS5wcm9iZSA9IHNuZF9zb25pY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3NvbmljX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKaW5kZXggOTQwZDUzMS4uYThjYThlMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwpAQCAtMTc3LDYgKzE3Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiVHJpZGVudDREV2F2ZUF1ZGlvIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdHJpZGVudF9pZHMsCiAJLnByb2JlID0gc25kX3RyaWRlbnRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF90cmlkZW50X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCmluZGV4IGYzMGQ5ZDkuLjc3N2RhOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCkBAIC0yOTYwLDcgKzI5NjAsNyBAQAogCQkucmVhZCA9IHNuZF90cmlkZW50X2NvZGVjX3JlYWQsCiAJfTsKIAotCXVjdGwgPSBrY2FsbG9jKDEsIHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOworCXVjdGwgPSBremFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOwogCWlmICghdWN0bCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM1NDYsNyArMzU0Niw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCQotCXRyaWRlbnQgPSBrY2FsbG9jKDEsIHNpemVvZigqdHJpZGVudCksIEdGUF9LRVJORUwpOworCXRyaWRlbnQgPSBremFsbG9jKHNpemVvZigqdHJpZGVudCksIEdGUF9LRVJORUwpOwogCWlmICh0cmlkZW50ID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggNTZjNmU1Mi4uNmRiN2RlNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0xMDQsMTQgKzEwNCw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGR4c19zdXBwb3J0LCAiU3VwcG9ydCBmb3IgRFhTIGNoYW5uZWxzICgwID0gYXV0bywgMSA9IGVuYWJsZSwgMiA9IGRpc2FibGUsIDMgPSA0OGsgb25seSwgNCA9IG5vIFZSQSwgNSA9IGVuYWJsZSBhbnkgc2FtcGxlIHJhdGUpIik7CiAKIAotLyogcGNpIGlkcyAqLwotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNQkweDMwNTgKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzXzUKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzM181CTB4MzA1OQotI2VuZGlmCi0KIC8qIHJldmlzaW9uIG51bWJlcnMgZm9yIHZpYTY4NiAqLwogI2RlZmluZSBWSUFfUkVWXzY4Nl9BCQkweDEwCiAjZGVmaW5lIFZJQV9SRVZfNjg2X0IJCTB4MTEKQEAgLTE5MzUsMTEgKzE5MjcsMTIgQEAKIAkJICogRFhTIGNoYW5uZWxzIGRvbid0IHdvcmsgcHJvcGVybHkgd2l0aCBWUkEgaWYgTUM5NyBpcyBkaXNhYmxlZC4KIAkJICovCiAJCXN0cnVjdCBwY2lfZGV2ICpwY2k7Ci0JCXBjaSA9IHBjaV9maW5kX2RldmljZSgweDExMDYsIDB4MzA2OCwgTlVMTCk7IC8qIE1DOTcgKi8KKwkJcGNpID0gcGNpX2dldF9kZXZpY2UoMHgxMTA2LCAweDMwNjgsIE5VTEwpOyAvKiBNQzk3ICovCiAJCWlmIChwY2kpIHsKIAkJCXVuc2lnbmVkIGNoYXIgZGF0YTsKIAkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaSwgMHg0NCwgJmRhdGEpOwogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaSwgMHg0NCwgZGF0YSB8IDB4NDApOworCQkJcGNpX2Rldl9wdXQocGNpKTsKIAkJfQogCX0KIApAQCAtMjA2NSw3ICsyMDU4LDcgQEAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICgoY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yMzUwLDYgKzIzNDMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlZJQSA4Mnh4IEF1ZGlvIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdmlhODJ4eF9pZHMsCiAJLnByb2JlID0gc25kX3ZpYTgyeHhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF92aWE4Mnh4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA1ODcyZDQzLi43ZWFjNmY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKQEAgLTEwODMsNyArMTA4Myw3IEBACiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoKGNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJaWYgKChjaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTIwNyw2ICsxMjA3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJWSUEgODJ4eCBNb2RlbSIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ZpYTgyeHhfbW9kZW1faWRzLAogCS5wcm9iZSA9IHNuZF92aWE4Mnh4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdmlhODJ4eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCBkY2E2YmQyLi4yYTdhZDlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtMjUyLDYgKzI1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRGlnaWdyYW0gVlgyMjIiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92eDIyMl9pZHMsCiAJLnByb2JlID0gc25kX3Z4MjIyX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdngyMjJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCmluZGV4IDViNWI2MjQuLjJlNjlhYmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwpAQCAtMzUyLDYgKzM1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiWWFtYWhhIERTLVhHIFBDSSIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ltZnBjaV9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfeW1mcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF95bWZwY2lfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwppbmRleCAwNTQ4MzY0Li4yN2ZhNTIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCkBAIC04MzksNyArODM5LDcgQEAKIAlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAl5bWZwY2lfcGNtX3QgKnlwY207CiAKLQl5cGNtID0ga2NhbGxvYygxLCBzaXplb2YoKnlwY20pLCBHRlBfS0VSTkVMKTsKKwl5cGNtID0ga3phbGxvYyhzaXplb2YoKnlwY20pLCBHRlBfS0VSTkVMKTsKIAlpZiAoeXBjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAl5cGNtLT5jaGlwID0gY2hpcDsKQEAgLTk1Nyw3ICs5NTcsNyBAQAogCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXltZnBjaV9wY21fdCAqeXBjbTsKIAotCXlwY20gPSBrY2FsbG9jKDEsIHNpemVvZigqeXBjbSksIEdGUF9LRVJORUwpOworCXlwY20gPSBremFsbG9jKHNpemVvZigqeXBjbSksIEdGUF9LRVJORUwpOwogCWlmICh5cGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXlwY20tPmNoaXAgPSBjaGlwOwpAQCAtMjI3MCw3ICsyMjcwLDcgQEAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jCmluZGV4IGEyMTMyZTMuLjAyMDhjNTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogewogCXBkYWNmX3QgKmNoaXA7CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAljaGlwLT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9LY29uZmlnIGIvc291bmQvcHBjL0tjb25maWcKaW5kZXggNzUyMTNiZi4uMjA2YjkzMyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL0tjb25maWcKKysrIGIvc291bmQvcHBjL0tjb25maWcKQEAgLTEzLDExICsxMywyNCBAQAogCXRyaXN0YXRlICJQb3dlck1hYyAoQVdBQ1MsIERBQ0EsIEJ1cmd1bmR5LCBUdW1ibGVyLCBLZXl3ZXN0KSIKIAlkZXBlbmRzIG9uIFNORCAmJiBJMkMgJiYgSU5QVVQgJiYgUFBDX1BNQUMKIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfR0VORVJJQ19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGludGVncmF0ZWQgc291bmQgZGV2aWNlLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtcG93ZXJtYWMuCiAKLWVuZG1lbnUKK2NvbmZpZyBTTkRfUE9XRVJNQUNfQVVUT19EUkMKKwlib29sICJUb2dnbGUgRFJDIGF1dG9tYXRpY2FsbHkgYXQgaGVhZHBob25lL2xpbmUgcGx1Zy1pbiIKKwlkZXBlbmRzIG9uIFNORF9QT1dFUk1BQworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdXRvbWF0aWMgdG9nZ2xlIG9mIERSQyAoZHluYW1pYworCSAgcmFuZ2UgY29tcHJlc3Npb24pIG9uIFR1bWJsZXIvU25hcHBlci4KKwkgIElmIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBEUkMgaXMgdHVybmVkIG9mZiB3aGVuIHRoZQorCSAgaGVhZHBob25lL2xpbmUgamFjayBpcyBwbHVnZ2VkLCBhbmQgdHVybmVkIG9uIHdoZW4gdW5wbHVnZ2VkLgogCisJICBOb3RlIHRoYXQgeW91IGNhbiB0dXJuIG9uL29mZiBEUkMgbWFudWFsbHkgZXZlbiB3aXRob3V0IHRoaXMKKwkgIG9wdGlvbi4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggYzg5ZTgyZS4uZTM1YjQ4ZCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC05ODgsNiArOTg4LDcgQEAKIAkJY2FzZSAweDMzOgogCQljYXNlIDB4Mjk6CiAJCWNhc2UgMHgyNDoKKwkJY2FzZSAweDVjOgogCQkJY2hpcC0+bnVtX2ZyZXFzID0gQVJSQVlfU0laRSh0dW1ibGVyX2ZyZXFzKTsKIAkJCWNoaXAtPm1vZGVsID0gUE1BQ19TTkFQUEVSOwogCQkJY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7IC8qIEZJWE1FOiBjaGVjayB0aGlzICovCkBAIC0xMTU5LDcgKzExNjAsNyBAQAogCXNuZF9ydW50aW1lX2NoZWNrKGNoaXBfcmV0dXJuLCByZXR1cm4gLUVJTlZBTCk7CiAJKmNoaXBfcmV0dXJuID0gTlVMTDsKIAotCWNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWNoaXAtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3Bvd2VybWFjLmMgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwppbmRleCAyMzFmNjQzLi5hNmQ4Y2JmIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvcG93ZXJtYWMuYworKysgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwpAQCAtMTMxLDYgKzEzMSw5IEBACiAJaWYgKGVuYWJsZV9iZWVwKQogCQlzbmRfcG1hY19hdHRhY2hfYmVlcChjaGlwKTsKIAorCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gX19lcnJvcjsKKwogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKIAkJZ290byBfX2Vycm9yOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCBiOTQ0MzdjLi42NTM4NGFmIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTk0OCw3ICs5NDgsNiBAQAogCQkJbXNsZWVwKDEwKTsKIAkJY2hlY2tfbXV0ZShjaGlwLCAmbWl4LT5hbXBfbXV0ZSwgMSwgbWl4LT5hdXRvX211dGVfbm90aWZ5LAogCQkJICAgY2hpcC0+c3BlYWtlcl9zd19jdGwpOwotCQltaXgtPmRyY19lbmFibGUgPSAwOwogCX0gZWxzZSB7CiAJCS8qIHVubXV0ZSBzcGVha2VyLCBtdXRlIG90aGVycyAqLwogCQljaGVja19tdXRlKGNoaXAsICZtaXgtPmFtcF9tdXRlLCAwLCBtaXgtPmF1dG9fbXV0ZV9ub3RpZnksCkBAIC05NjAsMjAgKzk1OSwyMSBAQAogCQlpZiAobWl4LT5saW5lX211dGUuYWRkciAhPSAwKQogCQkJY2hlY2tfbXV0ZShjaGlwLCAmbWl4LT5saW5lX211dGUsIDEsIG1peC0+YXV0b19tdXRlX25vdGlmeSwKIAkJCQkgICBjaGlwLT5saW5lb3V0X3N3X2N0bCk7Ci0JCW1peC0+ZHJjX2VuYWJsZSA9IDE7CiAJfQotCWlmIChtaXgtPmF1dG9fbXV0ZV9ub3RpZnkpIHsKKwlpZiAobWl4LT5hdXRvX211dGVfbm90aWZ5KQogCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKIAkJCQkgICAgICAgJmNoaXAtPmhwX2RldGVjdF9jdGwtPmlkKTsKKworI2lmZGVmIENPTkZJR19TTkRfUE9XRVJNQUNfQVVUT19EUkMKKwltaXgtPmRyY19lbmFibGUgPSAhIChoZWFkcGhvbmUgfHwgbGluZW91dCk7CisJaWYgKG1peC0+YXV0b19tdXRlX25vdGlmeSkKIAkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCiAJCQkgICAgICAgJmNoaXAtPmRyY19zd19jdGwtPmlkKTsKLQl9Ci0KLQkvKiBmaXJzdCBzZXQgdGhlIERSQyBzbyB0aGUgc3BlYWtlciBkbyBub3QgZXhwbG9kZSAtUmVuZVIgKi8KIAlpZiAoY2hpcC0+bW9kZWwgPT0gUE1BQ19UVU1CTEVSKQogCQl0dW1ibGVyX3NldF9kcmMobWl4KTsKIAllbHNlCiAJCXNuYXBwZXJfc2V0X2RyYyhtaXgpOworI2VuZGlmCiAKIAkvKiByZXNldCB0aGUgbWFzdGVyIHZvbHVtZSBzbyB0aGUgY29ycmVjdCBhbXBsaWZpY2F0aW9uIGlzIGFwcGxpZWQgKi8KIAl0dW1ibGVyX3NldF9tYXN0ZXJfdm9sdW1lKG1peCk7CkBAIC0xMzcwLDYgKzEzNzAsMTcgQEAKIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGNoaXAtPmRyY19zd19jdGwpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKKwkvKiBzZXQgaW5pdGlhbCBEUkMgcmFuZ2UgdG8gNjAlICovCisJaWYgKGNoaXAtPm1vZGVsID09IFBNQUNfVFVNQkxFUikKKwkJbWl4LT5kcmNfcmFuZ2UgPSAoVEFTMzAwMV9EUkNfTUFYICogNikgLyAxMDsKKwllbHNlCisJCW1peC0+ZHJjX3JhbmdlID0gKFRBUzMwMDRfRFJDX01BWCAqIDYpIC8gMTA7CisJbWl4LT5kcmNfZW5hYmxlID0gMTsgLyogd2lsbCBiZSBjaGFuZ2VkIGxhdGVyIGlmIEFVVE9fRFJDIGlzIHNldCAqLworCWlmIChjaGlwLT5tb2RlbCA9PSBQTUFDX1RVTUJMRVIpCisJCXR1bWJsZXJfc2V0X2RyYyhtaXgpOworCWVsc2UKKwkJc25hcHBlcl9zZXRfZHJjKG1peCk7CisKICNpZmRlZiBDT05GSUdfUE0KIAljaGlwLT5zdXNwZW5kID0gdHVtYmxlcl9zdXNwZW5kOwogCWNoaXAtPnJlc3VtZSA9IHR1bWJsZXJfcmVzdW1lOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvS2NvbmZpZyBiL3NvdW5kL3NwYXJjL0tjb25maWcKaW5kZXggMjVhOGE1NS4uMDlhYjEzOCAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvS2NvbmZpZworKysgYi9zb3VuZC9zcGFyYy9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogCXRyaXN0YXRlICJTdW4gQU1ENzkzMCIKIAlkZXBlbmRzIG9uIFNCVVMgJiYgU05ECiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEFNRDc5MzAgc291bmQgZGV2aWNlIG9uIFN1bi4KIApAQCAtMTcsNiArMTgsNyBAQAogCXRyaXN0YXRlICJTdW4gQ1M0MjMxIgogCWRlcGVuZHMgb24gU05ECiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0dFTkVSSUNfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzMSBzb3VuZCBkZXZpY2Ugb24gU3VuLgogCkBAIC0yNyw2ICsyOSw3IEBACiAJdHJpc3RhdGUgIlN1biBEQlJJIgogCWRlcGVuZHMgb24gU05EICYmIFNCVVMKIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfR0VORVJJQ19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgREJSSSBzb3VuZCBkZXZpY2Ugb24gU3VuLgogCmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKaW5kZXggYmQ4YTg1MC4uNDZkNTA0YiAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvYW1kNzkzMC5jCisrKyBiL3NvdW5kL3NwYXJjL2FtZDc5MzAuYwpAQCAtOTY3LDcgKzk2Nyw3IEBACiAJaW50IGVycjsKIAogCSpyYW1kID0gTlVMTDsKLQlhbWQgPSBrY2FsbG9jKDEsIHNpemVvZigqYW1kKSwgR0ZQX0tFUk5FTCk7CisJYW1kID0ga3phbGxvYyhzaXplb2YoKmFtZCksIEdGUF9LRVJORUwpOwogCWlmIChhbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEwODgsNiArMTA4OCw5IEBACiAJaWYgKChlcnIgPSBzbmRfYW1kNzkzMF9taXhlcihhbWQpKSA8IDApCiAJCWdvdG8gb3V0X2VycjsKIAorCWlmICgoZXJyID0gc25kX2NhcmRfc2V0X2dlbmVyaWNfZGV2KGNhcmQpKSA8IDApCisJCWdvdG8gb3V0X2VycjsKKwogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKIAkJZ290byBvdXRfZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9jczQyMzEuYyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCmluZGV4IDM2ZjlmZTQuLmY0MzYxYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jCisrKyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAogI2RlZmluZSBDUzQyMzFfR0xPQkFMSVJRCTB4MDEJLyogSVJRIGlzIGFjdGl2ZSAqLwogCi0vKiBkZWZpbml0aW9ucyBmb3IgY29kZWMgaXJxIHN0YXR1cyAqLworLyogZGVmaW5pdGlvbnMgZm9yIGNvZGVjIGlycSBzdGF0dXMgLSBDUzQyMzFfSVJRX1NUQVRVUwkqLwogCiAjZGVmaW5lIENTNDIzMV9QTEFZQkFDS19JUlEJMHgxMAogI2RlZmluZSBDUzQyMzFfUkVDT1JEX0lSUQkweDIwCkBAIC00MDIsNyArNDAyLDcgQEAKIAkgICAgIAl1ZGVsYXkoMTAwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygib3V0bTogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJCXNuZF9wcmludGRkKCJvdXRtOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKICNlbmRpZgogCWlmIChjaGlwLT5jYWxpYnJhdGVfbXV0ZSkgewogCQljaGlwLT5pbWFnZVtyZWddICY9IG1hc2s7CkBAIC00MjUsNiArNDI1LDEwIEBACiAJICAgICB0aW1lb3V0ID4gMCAmJiAoX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKSAmIENTNDIzMV9JTklUKTsKIAkgICAgIHRpbWVvdXQtLSkKIAkgICAgIAl1ZGVsYXkoMTAwKTsKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisJaWYgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKKwkJc25kX3ByaW50ZGQoIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisjZW5kaWYKIAlfX2NzNDIzMV93cml0ZWIoY2hpcCwgY2hpcC0+bWNlX2JpdCB8IHJlZywgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKTsKIAlfX2NzNDIzMV93cml0ZWIoY2hpcCwgdmFsdWUsIENTNDIzMVAoY2hpcCwgUkVHKSk7CiAJbWIoKTsKQEAgLTQ0MCwxNSArNDQ0LDEyIEBACiAJICAgICAJdWRlbGF5KDEwMCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmIChfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJCXNuZF9wcmludGRkKCJvdXQ6IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOwogI2VuZGlmCiAJX19jczQyMzFfd3JpdGViKGNoaXAsIGNoaXAtPm1jZV9iaXQgfCByZWcsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CiAJX19jczQyMzFfd3JpdGViKGNoaXAsIHZhbHVlLCBDUzQyMzFQKGNoaXAsIFJFRykpOwogCWNoaXAtPmltYWdlW3JlZ10gPSB2YWx1ZTsKIAltYigpOwotI2lmIDAKLQlwcmludGsoImNvZGVjIG91dCAtIHJlZyAweCV4ID0gMHgleFxuIiwgY2hpcC0+bWNlX2JpdCB8IHJlZywgdmFsdWUpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9jczQyMzFfaW4oY3M0MjMxX3QgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnKQpAQCAtNDYyLDYxICs0NjMsMTQgQEAKIAkgICAgIAl1ZGVsYXkoMTAwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygiaW46IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4XG4iLCByZWcpOworCQlzbmRfcHJpbnRkZCgiaW46IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4XG4iLCByZWcpOwogI2VuZGlmCiAJX19jczQyMzFfd3JpdGViKGNoaXAsIGNoaXAtPm1jZV9iaXQgfCByZWcsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CiAJbWIoKTsKIAlyZXQgPSBfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFRykpOwotI2lmIDAKLQlwcmludGsoImNvZGVjIGluIC0gcmVnIDB4JXggPSAweCV4XG4iLCBjaGlwLT5tY2VfYml0IHwgcmVnLCByZXQpOwotI2VuZGlmCiAJcmV0dXJuIHJldDsKIH0KIAotI2lmIDAKLQotc3RhdGljIHZvaWQgc25kX2NzNDIzMV9kZWJ1ZyhjczQyMzFfdCAqY2hpcCkKLXsKLQlwcmludGsoIkNTNDIzMSBSRUdTOiAgICAgIElOREVYID0gMHglMDJ4ICAiLAotCSAgICAgICBfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpKTsKLQlwcmludGsoIiAgICAgICAgICAgICAgICAgU1RBVFVTID0gMHglMDJ4XG4iLAotCSAgICAgICBfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFNUQVRVUykpKTsKLQlwcmludGsoIiAgMHgwMDogbGVmdCBpbnB1dCAgICAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDApKTsKLQlwcmludGsoIiAgMHgxMDogYWx0IDEgKENGSUcgMikgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTApKTsKLQlwcmludGsoIiAgMHgwMTogcmlnaHQgaW5wdXQgICAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDEpKTsKLQlwcmludGsoIiAgMHgxMTogYWx0IDIgKENGSUcgMykgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTEpKTsKLQlwcmludGsoIiAgMHgwMjogR0YxIGxlZnQgaW5wdXQgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDIpKTsKLQlwcmludGsoIiAgMHgxMjogbGVmdCBsaW5lIGluICAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTIpKTsKLQlwcmludGsoIiAgMHgwMzogR0YxIHJpZ2h0IGlucHV0ID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDMpKTsKLQlwcmludGsoIiAgMHgxMzogcmlnaHQgbGluZSBpbiAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTMpKTsKLQlwcmludGsoIiAgMHgwNDogQ0QgbGVmdCBpbnB1dCAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDQpKTsKLQlwcmludGsoIiAgMHgxNDogdGltZXIgbG93ICAgICAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTQpKTsKLQlwcmludGsoIiAgMHgwNTogQ0QgcmlnaHQgaW5wdXQgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDUpKTsKLQlwcmludGsoIiAgMHgxNTogdGltZXIgaGlnaCAgICAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTUpKTsKLQlwcmludGsoIiAgMHgwNjogbGVmdCBvdXRwdXQgICAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDYpKTsKLQlwcmludGsoIiAgMHgxNjogbGVmdCBNSUMgKFBuUCkgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTYpKTsKLQlwcmludGsoIiAgMHgwNzogcmlnaHQgb3V0cHV0ICAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDcpKTsKLQlwcmludGsoIiAgMHgxNzogcmlnaHQgTUlDIChQblApID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTcpKTsKLQlwcmludGsoIiAgMHgwODogcGxheWJhY2sgZm9ybWF0ID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDgpKTsKLQlwcmludGsoIiAgMHgxODogSVJRIHN0YXR1cyAgICAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTgpKTsKLQlwcmludGsoIiAgMHgwOTogaWZhY2UgKENGSUcgMSkgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MDkpKTsKLQlwcmludGsoIiAgMHgxOTogbGVmdCBsaW5lIG91dCAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MTkpKTsKLQlwcmludGsoIiAgMHgwYTogcGluIGNvbnRyb2wgICAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MGEpKTsKLQlwcmludGsoIiAgMHgxYTogbW9ubyBjb250cm9sICAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MWEpKTsKLQlwcmludGsoIiAgMHgwYjogaW5pdCAmIHN0YXR1cyAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MGIpKTsKLQlwcmludGsoIiAgMHgxYjogcmlnaHQgbGluZSBvdXQgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MWIpKTsKLQlwcmludGsoIiAgMHgwYzogcmV2aXNpb24gJiBtb2RlID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MGMpKTsKLQlwcmludGsoIiAgMHgxYzogcmVjb3JkIGZvcm1hdCAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MWMpKTsKLQlwcmludGsoIiAgMHgwZDogbG9vcGJhY2sgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MGQpKTsKLQlwcmludGsoIiAgMHgxZDogdmFyIGZyZXEgKFBuUCkgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MWQpKTsKLQlwcmludGsoIiAgMHgwZTogcGx5IHVwciBjb3VudCAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MGUpKTsKLQlwcmludGsoIiAgMHgxZTogcmVjIHVwciBjb3VudCAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MWUpKTsKLQlwcmludGsoIiAgMHgwZjogcGx5IGx3ciBjb3VudCAgID0gMHglMDJ4ICAiLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MGYpKTsKLQlwcmludGsoIiAgMHgxZjogcmVjIGx3ciBjb3VudCAgID0gMHglMDJ4XG4iLCBzbmRfY3M0MjMxX2luKGNoaXAsIDB4MWYpKTsKLX0KLQotI2VuZGlmCi0KIC8qCiAgKiAgQ1M0MjMxIGRldGVjdGlvbiAvIE1DRSByb3V0aW5lcwogICovCkBAIC01MjgsMTEgKzQ4MiwxMiBAQAogCS8qIGh1aC4uIGxvb2tzIGxpa2UgdGhpcyBzZXF1ZW5jZSBpcyBwcm9wZXIgZm9yIENTNDIzMUEgY2hpcCAoR1VTIE1BWCkgKi8KIAlmb3IgKHRpbWVvdXQgPSA1OyB0aW1lb3V0ID4gMDsgdGltZW91dC0tKQogCQlfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpOworCiAJLyogZW5kIG9mIGNsZWFudXAgc2VxdWVuY2UgKi8KLQlmb3IgKHRpbWVvdXQgPSAyNTA7CisJZm9yICh0aW1lb3V0ID0gNTAwOwogCSAgICAgdGltZW91dCA+IDAgJiYgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCk7CiAJICAgICB0aW1lb3V0LS0pCi0JICAgICAJdWRlbGF5KDEwMCk7CisJICAgICAJdWRlbGF5KDEwMDApOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfY3M0MjMxX21jZV91cChjczQyMzFfdCAqY2hpcCkKQEAgLTU0NSwxMiArNTAwLDEyIEBACiAJCXVkZWxheSgxMDApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAoX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJtY2VfdXAgLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIik7CisJCXNuZF9wcmludGRkKCJtY2VfdXAgLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIik7CiAjZW5kaWYKIAljaGlwLT5tY2VfYml0IHw9IENTNDIzMV9NQ0U7CiAJdGltZW91dCA9IF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX3VwIFslcF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGRkKCJtY2VfdXAgWyVwXTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKIAlpZiAoISh0aW1lb3V0ICYgQ1M0MjMxX01DRSkpCiAJCV9fY3M0MjMxX3dyaXRlYihjaGlwLCBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC01NjMsMTggKzUxOCwxNSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAlzbmRfY3M0MjMxX2J1c3lfd2FpdChjaGlwKTsKLSNpZiAwCi0JcHJpbnRrKCIoMSkgdGltZW91dCA9ICVpXG4iLCB0aW1lb3V0KTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAoX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJtY2VfZG93biBbJXBdIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CisJCXNuZF9wcmludGRkKCJtY2VfZG93biBbJXBdIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CiAjZW5kaWYKIAljaGlwLT5tY2VfYml0ICY9IH5DUzQyMzFfTUNFOwogCXRpbWVvdXQgPSBfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpOwogCV9fY3M0MjMxX3dyaXRlYihjaGlwLCBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJtY2VfZG93biBbJXBdOiBzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRkZCgibWNlX2Rvd24gWyVwXTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKIAlpZiAoKHRpbWVvdXQgJiBDUzQyMzFfTUNFKSA9PSAwKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwpAQCAtNTkwLDkgKzU0Miw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KLSNpZiAwCi0JcHJpbnRrKCIoMikgdGltZW91dCA9ICVpLCBqaWZmaWVzID0gJWxpXG4iLCB0aW1lb3V0LCBqaWZmaWVzKTsKLSNlbmRpZgorCiAJLyogaW4gMTBtcyBpbmNyZW1lbnRzLCBjaGVjayBjb25kaXRpb24sIHVwIHRvIDI1MG1zICovCiAJdGltZW91dCA9IDI1OwogCXdoaWxlIChzbmRfY3M0MjMxX2luKGNoaXAsIENTNDIzMV9URVNUX0lOSVQpICYgQ1M0MjMxX0NBTElCX0lOX1BST0dSRVNTKSB7CkBAIC02MDQsOSArNTU0LDcgQEAKIAkJbXNsZWVwKDEwKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0jaWYgMAotCXByaW50aygiKDMpIGppZmZpZXMgPSAlbGlcbiIsIGppZmZpZXMpOwotI2VuZGlmCisKIAkvKiBpbiAxMG1zIGluY3JlbWVudHMsIGNoZWNrIGNvbmRpdGlvbiwgdXAgdG8gMTAwbXMgKi8KIAl0aW1lb3V0ID0gMTA7CiAJd2hpbGUgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkgewpAQCAtNjE5LDU0ICs1NjcsNTggQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwotI2lmIDAKLQlwcmludGsoIig0KSBqaWZmaWVzID0gJWxpXG4iLCBqaWZmaWVzKTsKLQlzbmRfcHJpbnRrKCJtY2VfZG93biAtIGV4aXQgPSAweCV4XG4iLCBfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpKTsKLSNlbmRpZgogfQogCi0jaWYgMCAvKiBVbnVzZWQgZm9yIG5vdy4uLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzbmRfY3M0MjMxX2dldF9jb3VudCh1bnNpZ25lZCBjaGFyIGZvcm1hdCwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jc3dpdGNoIChmb3JtYXQgJiAweGUwKSB7Ci0JY2FzZSBDUzQyMzFfTElORUFSXzE2OgotCWNhc2UgQ1M0MjMxX0xJTkVBUl8xNl9CSUc6Ci0JCXNpemUgPj49IDE7Ci0JCWJyZWFrOwotCWNhc2UgQ1M0MjMxX0FEUENNXzE2OgotCQlyZXR1cm4gc2l6ZSA+PiAyOwotCX0KLQlpZiAoZm9ybWF0ICYgQ1M0MjMxX1NURVJFTykKLQkJc2l6ZSA+Pj0gMTsKLQlyZXR1cm4gc2l6ZTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgRUJVU19TVVBQT1JUCiBzdGF0aWMgdm9pZCBzbmRfY3M0MjMxX2VidXNfYWR2YW5jZV9kbWEoc3RydWN0IGVidXNfZG1hX2luZm8gKnAsIHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgdW5zaWduZWQgaW50ICpwZXJpb2RzX3NlbnQpCiB7CiAJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKIAl3aGlsZSAoMSkgewotCQl1bnNpZ25lZCBpbnQgZG1hX3NpemUgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKLQkJdW5zaWduZWQgaW50IG9mZnNldCA9IGRtYV9zaXplICogKCpwZXJpb2RzX3NlbnQpOworCQl1bnNpZ25lZCBpbnQgcGVyaW9kX3NpemUgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IHBlcmlvZF9zaXplICogKCpwZXJpb2RzX3NlbnQpOwogCi0JCWlmIChkbWFfc2l6ZSA+PSAoMSA8PCAyNCkpCisJCWlmIChwZXJpb2Rfc2l6ZSA+PSAoMSA8PCAyNCkpCiAJCQlCVUcoKTsKIAotCQlpZiAoZWJ1c19kbWFfcmVxdWVzdChwLCBydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgZG1hX3NpemUpKQorCQlpZiAoZWJ1c19kbWFfcmVxdWVzdChwLCBydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgcGVyaW9kX3NpemUpKQogCQkJcmV0dXJuOwotI2lmIDAKLQkJcHJpbnRrKCJlYnVzX2FkdmFuY2U6IFNlbnQgcGVyaW9kICV1IChzaXplWyV4XSBvZmZzZXRbJXhdKVxuIiwKLQkJICAgICAgICgqcGVyaW9kc19zZW50KSwgZG1hX3NpemUsIG9mZnNldCk7Ci0jZW5kaWYKIAkJKCpwZXJpb2RzX3NlbnQpID0gKCgqcGVyaW9kc19zZW50KSArIDEpICUgcnVudGltZS0+cGVyaW9kczsKIAl9CiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgY3M0MjMxX2RtYV90cmlnZ2VyKGNzNDIzMV90ICpjaGlwLCB1bnNpZ25lZCBpbnQgd2hhdCwgaW50IG9uKQorI2lmZGVmIFNCVVNfU1VQUE9SVAorc3RhdGljIHZvaWQgc25kX2NzNDIzMV9zYnVzX2FkdmFuY2VfZG1hKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgdW5zaWduZWQgaW50ICpwZXJpb2RzX3NlbnQpCiB7CisJY3M0MjMxX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwl1bnNpZ25lZCBpbnQgcGVyaW9kX3NpemUgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcGVyaW9kX3NpemUgKiAoKnBlcmlvZHNfc2VudCAlIHJ1bnRpbWUtPnBlcmlvZHMpOworCisJaWYgKHJ1bnRpbWUtPnBlcmlvZF9zaXplID4gMHhmZmZmICsgMSkKKwkJQlVHKCk7CisKKwlzd2l0Y2ggKHN1YnN0cmVhbS0+c3RyZWFtKSB7CisJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOgorCQlzYnVzX3dyaXRlbChydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgY2hpcC0+cG9ydCArIEFQQ1BOVkEpOworCQlzYnVzX3dyaXRlbChwZXJpb2Rfc2l6ZSwgY2hpcC0+cG9ydCArIEFQQ1BOQyk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOgorCQlzYnVzX3dyaXRlbChydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgY2hpcC0+cG9ydCArIEFQQ0NOVkEpOworCQlzYnVzX3dyaXRlbChwZXJpb2Rfc2l6ZSwgY2hpcC0+cG9ydCArIEFQQ0NOQyk7CisJCWJyZWFrOworCX0KKworCSgqcGVyaW9kc19zZW50KSA9ICgqcGVyaW9kc19zZW50ICsgMSkgJSBydW50aW1lLT5wZXJpb2RzOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNzNDIzMV9kbWFfdHJpZ2dlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHVuc2lnbmVkIGludCB3aGF0LCBpbnQgb24pCit7CisJY3M0MjMxX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKICNpZmRlZiBFQlVTX1NVUFBPUlQKIAlpZiAoY2hpcC0+ZmxhZ3MgJiBDUzQyMzFfRkxBR19FQlVTKSB7CiAJCWlmICh3aGF0ICYgQ1M0MjMxX1BMQVlCQUNLX0VOQUJMRSkgewpAQCAtNjk0LDYgKzY0Niw2MCBAQAogCX0gZWxzZSB7CiAjZW5kaWYKICNpZmRlZiBTQlVTX1NVUFBPUlQKKwl1MzIgY3NyID0gc2J1c19yZWFkbChjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKwkvKiBJIGRvbid0IGtub3cgd2h5LCBidXQgb24gc2J1cyB0aGUgcGVyaW9kIGNvdW50ZXIgbXVzdAorCSAqIG9ubHkgc3RhcnQgY291bnRpbmcgYWZ0ZXIgdGhlIGZpcnN0IHBlcmlvZCBpcyBzZW50LgorCSAqIFRoZXJlZm9yZSB0aGlzIGR1bW15IHRoaW5nLgorCSAqLworCXVuc2lnbmVkIGludCBkdW1teSA9IDA7CisKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIENTNDIzMV9QTEFZQkFDS19FTkFCTEU6CisJCWlmIChvbikgeworCQkJY3NyICY9IH5BUENfWElOVF9QTEFZOworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKworCQkJY3NyICY9IH5BUENfUFBBVVNFOworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKworCQkJc25kX2NzNDIzMV9zYnVzX2FkdmFuY2VfZG1hKHN1YnN0cmVhbSwgJmR1bW15KTsKKworCQkJY3NyIHw9ICBBUENfR0VOTF9JTlQgfCBBUENfUExBWV9JTlQgfCBBUENfWElOVF9FTkEgfAorCQkJCUFQQ19YSU5UX1BMQVkgfCBBUENfWElOVF9FTVBUIHwgQVBDX1hJTlRfR0VOTCB8CisJCQkJQVBDX1hJTlRfUEVOQSB8IEFQQ19QRE1BX1JFQURZOworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKwkJfSBlbHNlIHsKKwkJCWNzciB8PSBBUENfUFBBVVNFOworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKworCQkJY3NyICY9IH5BUENfUERNQV9SRUFEWTsKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDUzQyMzFfUkVDT1JEX0VOQUJMRToKKwkJaWYgKG9uKSB7CisJCQljc3IgJj0gfkFQQ19YSU5UX0NBUFQ7CisJCQlzYnVzX3dyaXRlbChjc3IsIGNoaXAtPnBvcnQgKyBBUENDU1IpOworCisJCQljc3IgJj0gfkFQQ19DUEFVU0U7CisJCQlzYnVzX3dyaXRlbChjc3IsIGNoaXAtPnBvcnQgKyBBUENDU1IpOworCisJCQlzbmRfY3M0MjMxX3NidXNfYWR2YW5jZV9kbWEoc3Vic3RyZWFtLCAmZHVtbXkpOworCisJCQljc3IgfD0gIEFQQ19HRU5MX0lOVCB8IEFQQ19DQVBUX0lOVCB8IEFQQ19YSU5UX0VOQSB8CisJCQkJQVBDX1hJTlRfQ0FQVCB8IEFQQ19YSU5UX0NFTVAgfCBBUENfWElOVF9HRU5MIHwKKwkJCQlBUENfQ0RNQV9SRUFEWTsKKworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKwkJfSBlbHNlIHsKKwkJCWNzciB8PSBBUENfQ1BBVVNFOworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKworCQkJY3NyICY9IH5BUENfQ0RNQV9SRUFEWTsKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisJCX0KKwkJYnJlYWs7CisJfQogI2VuZGlmCiAjaWZkZWYgRUJVU19TVVBQT1JUCiAJfQpAQCAtNzI1LDI1ICs3MzEsMTIgQEAKIAkJCX0KIAkJfQogCi0jaWYgMAotCQlwcmludGsoIlRSSUdHRVI6IHdoYXRbJXhdIG9uKCVkKVxuIiwKLQkJICAgICAgIHdoYXQsIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpKTsKLSNlbmRpZgotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpIHsKLQkJCWNzNDIzMV9kbWFfdHJpZ2dlcihjaGlwLCB3aGF0LCAxKTsKKwkJCWNzNDIzMV9kbWFfdHJpZ2dlcihzdWJzdHJlYW0sIHdoYXQsIDEpOwogCQkJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdIHw9IHdoYXQ7Ci0JCQlpZiAod2hhdCAmIENTNDIzMV9QTEFZQkFDS19FTkFCTEUpIHsKLQkJCQlzbmRfY3M0MjMxX291dChjaGlwLCBDUzQyMzFfUExZX0xXUl9DTlQsIDB4ZmYpOwotCQkJCXNuZF9jczQyMzFfb3V0KGNoaXAsIENTNDIzMV9QTFlfVVBSX0NOVCwgMHhmZik7Ci0JCQl9Ci0JCQlpZiAod2hhdCAmIENTNDIzMV9SRUNPUkRfRU5BQkxFKSB7Ci0JCQkJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX1JFQ19MV1JfQ05ULCAweGZmKTsKLQkJCQlzbmRfY3M0MjMxX291dChjaGlwLCBDUzQyMzFfUkVDX1VQUl9DTlQsIDB4ZmYpOwotCQkJfQogCQl9IGVsc2UgewotCQkJY3M0MjMxX2RtYV90cmlnZ2VyKGNoaXAsIHdoYXQsIDApOworCQkJY3M0MjMxX2RtYV90cmlnZ2VyKHN1YnN0cmVhbSwgd2hhdCwgMCk7CiAJCQljaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0gJj0gfndoYXQ7CiAJCX0KIAkJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX0lGQUNFX0NUUkwsCkBAIC03NTUsOSArNzQ4LDcgQEAKIAkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotI2lmIDAKLQlzbmRfY3M0MjMxX2RlYnVnKGNoaXApOwotI2VuZGlmCisKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC03OTAsOSArNzgxLDYgQEAKIAl9CiAJaWYgKGNoYW5uZWxzID4gMSkKIAkJcmZvcm1hdCB8PSBDUzQyMzFfU1RFUkVPOwotI2lmIDAKLQlzbmRfcHJpbnRrKCJnZXRfZm9ybWF0OiAweCV4IChtb2RlPTB4JXgpXG4iLCBmb3JtYXQsIG1vZGUpOwotI2VuZGlmCiAJcmV0dXJuIHJmb3JtYXQ7CiB9CiAKQEAgLTk0NCw3ICs5MzIsNyBAQAogCXNuZF9jczQyMzFfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMSlcbiIpOworCXNuZF9wcmludGRkKCJpbml0OiAoMSlcbiIpOwogI2VuZGlmCiAJc25kX2NzNDIzMV9tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKQEAgLTk1Nyw3ICs5NDUsNyBAQAogCXNuZF9jczQyMzFfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMilcbiIpOworCXNuZF9wcmludGRkKCJpbml0OiAoMilcbiIpOwogI2VuZGlmCiAKIAlzbmRfY3M0MjMxX21jZV91cChjaGlwKTsKQEAgLTk2Nyw3ICs5NTUsNyBAQAogCXNuZF9jczQyMzFfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMykgLSBhZmVpID0gMHgleFxuIiwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdKTsKKwlzbmRfcHJpbnRkZCgiaW5pdDogKDMpIC0gYWZlaSA9IDB4JXhcbiIsIGNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8xXSk7CiAjZW5kaWYKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC05ODEsNyArOTY5LDcgQEAKIAlzbmRfY3M0MjMxX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDQpXG4iKTsKKwlzbmRfcHJpbnRkZCgiaW5pdDogKDQpXG4iKTsKICNlbmRpZgogCiAJc25kX2NzNDIzMV9tY2VfdXAoY2hpcCk7CkBAIC05OTEsNyArOTc5LDcgQEAKIAlzbmRfY3M0MjMxX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDUpXG4iKTsKKwlzbmRfcHJpbnRkZCgiaW5pdDogKDUpXG4iKTsKICNlbmRpZgogfQogCkBAIC0xMDIyLDYgKzEwMTAsNyBAQAogCQkgICAgICAgQ1M0MjMxX1JFQ09SRF9JUlEgfAogCQkgICAgICAgQ1M0MjMxX1RJTUVSX0lSUSk7CiAJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX0lSUV9TVEFUVVMsIDApOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwogCiAJY2hpcC0+bW9kZSA9IG1vZGU7CkBAIC0xMTM2LDExICsxMTI1LDIxIEBACiBzdGF0aWMgaW50IHNuZF9jczQyMzFfcGxheWJhY2tfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCiB7CiAJY3M0MjMxX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKIAljaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0gJj0gfihDUzQyMzFfUExBWUJBQ0tfRU5BQkxFIHwKIAkJCQkJICAgIENTNDIzMV9QTEFZQkFDS19QSU8pOworCisJaWYgKHJ1bnRpbWUtPnBlcmlvZF9zaXplID4gMHhmZmZmICsgMSkKKwkJQlVHKCk7CisKKwlzbmRfY3M0MjMxX291dChjaGlwLCBDUzQyMzFfUExZX0xXUl9DTlQsIChydW50aW1lLT5wZXJpb2Rfc2l6ZSAtIDEpICYgMHgwMGZmKTsKKwlzbmRfY3M0MjMxX291dChjaGlwLCBDUzQyMzFfUExZX1VQUl9DTlQsIChydW50aW1lLT5wZXJpb2Rfc2l6ZSAtIDEpID4+IDggJiAweDAwZmYpOworCWNoaXAtPnBfcGVyaW9kc19zZW50ID0gMDsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMTE3MiwxMiArMTE3MSwxNiBAQAogc3RhdGljIGludCBzbmRfY3M0MjMxX2NhcHR1cmVfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCiB7CiAJY3M0MjMxX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICY9IH4oQ1M0MjMxX1JFQ09SRF9FTkFCTEUgfAogCQkJCQkgICAgQ1M0MjMxX1JFQ09SRF9QSU8pOwogCisJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX1JFQ19MV1JfQ05ULCAocnVudGltZS0+cGVyaW9kX3NpemUgLSAxKSAmIDB4MDBmZik7CisJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX1JFQ19MV1JfQ05ULCAocnVudGltZS0+cGVyaW9kX3NpemUgLSAxKSA+PiA4ICYgMHgwMGZmKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMTE5Niw1MyArMTE5OSw2MSBAQAogCQljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbS0+cnVudGltZS0+b3ZlcnJhbmdlKys7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF9jczQyMzFfZ2VuZXJpY19pbnRlcnJ1cHQoY3M0MjMxX3QgKmNoaXApCitzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2NzNDIzMV9nZW5lcmljX2ludGVycnVwdChjczQyMzFfdCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCisJLypUaGlzIGlzIElSUSBpcyBub3QgcmFpc2VkIGJ5IHRoZSBjczQyMzEqLworCWlmICghKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgU1RBVFVTKSkgJiBDUzQyMzFfR0xPQkFMSVJRKSkKKwkJcmV0dXJuIElSUV9OT05FOworCiAJc3RhdHVzID0gc25kX2NzNDIzMV9pbihjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUyk7Ci0JaWYgKCFzdGF0dXMpCi0JCXJldHVybjsKIAogCWlmIChzdGF0dXMgJiBDUzQyMzFfVElNRVJfSVJRKSB7CiAJCWlmIChjaGlwLT50aW1lcikKIAkJCXNuZF90aW1lcl9pbnRlcnJ1cHQoY2hpcC0+dGltZXIsIGNoaXAtPnRpbWVyLT5zdGlja3MpOwogCX0JCQotCWlmIChzdGF0dXMgJiBDUzQyMzFfUExBWUJBQ0tfSVJRKQotCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7Ci0JaWYgKHN0YXR1cyAmIENTNDIzMV9SRUNPUkRfSVJRKSB7CisKKwlpZiAoc3RhdHVzICYgQ1M0MjMxX1JFQ09SRF9JUlEpCiAJCXNuZF9jczQyMzFfb3ZlcnJhbmdlKGNoaXApOwotCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKLQl9CiAKIAkvKiBBQ0sgdGhlIENTNDIzMSBpbnRlcnJ1cHQuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAlzbmRfY3M0MjMxX291dG0oY2hpcCwgQ1M0MjMxX0lSUV9TVEFUVVMsIH5DUzQyMzFfQUxMX0lSUVMgfCB+c3RhdHVzLCAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIFNCVVNfU1VQUE9SVAogc3RhdGljIGlycXJldHVybl90IHNuZF9jczQyMzFfc2J1c19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAljczQyMzFfdCAqY2hpcCA9IGRldl9pZDsKLQl1MzIgY3NyOwotCi0JY3NyID0gc2J1c19yZWFkbChjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKLQlpZiAoIShjc3IgJiAoQVBDX0lOVF9QRU5ESU5HIHwKLQkJICAgICBBUENfUExBWV9JTlQgfAotCQkgICAgIEFQQ19DQVBUX0lOVCB8Ci0JCSAgICAgQVBDX0dFTkxfSU5UIHwKLQkJICAgICBBUENfWElOVF9QRU1QIHwKLQkJICAgICBBUENfWElOVF9DRU1QKSkpCi0JCXJldHVybiBJUlFfTk9ORTsKIAogCS8qIEFDSyB0aGUgQVBDIGludGVycnVwdC4gKi8KKwl1MzIgY3NyID0gc2J1c19yZWFkbChjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKwogCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CiAKLQlzbmRfY3M0MjMxX2dlbmVyaWNfaW50ZXJydXB0KGNoaXApOworCWlmICgoY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICYgQ1M0MjMxX1BMQVlCQUNLX0VOQUJMRSkgJiYKKwkgICAgKGNzciAmIEFQQ19QTEFZX0lOVCkgJiYKKwkgICAgKGNzciAmIEFQQ19YSU5UX1BOVkEpICYmCisJICAgICEoY3NyICYgQVBDX1hJTlRfRU1QVCkpIHsKKwkJc25kX2NzNDIzMV9zYnVzX2FkdmFuY2VfZG1hKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSwKKwkJCQkJICAgICZjaGlwLT5wX3BlcmlvZHNfc2VudCk7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKKwl9CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYgKChjaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0gJiBDUzQyMzFfUkVDT1JEX0VOQUJMRSkgJiYKKwkgICAgKGNzciAmIEFQQ19DQVBUX0lOVCkgJiYKKwkgICAgKGNzciAmIEFQQ19YSU5UX0NOVkEpKSB7CisJCXNuZF9jczQyMzFfc2J1c19hZHZhbmNlX2RtYShjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSwKKwkJCQkJICAgICZjaGlwLT5jX3BlcmlvZHNfc2VudCk7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pOworCX0KKworCXJldHVybiBzbmRfY3M0MjMxX2dlbmVyaWNfaW50ZXJydXB0KGNoaXApOwogfQogI2VuZGlmCiAKQEAgLTEyOTAsNyArMTMwMSw4IEBACiAjaWZkZWYgRUJVU19TVVBQT1JUCiAJfQogI2VuZGlmCi0JcHRyICs9IChwZXJpb2RfYnl0ZXMgLSByZXNpZHVlKTsKKwlwdHIgKz0gcGVyaW9kX2J5dGVzIC0gcmVzaWR1ZTsKKwogCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBwdHIpOwogfQogCkBAIC0xMzE0LDcgKzEzMjYsNyBAQAogI2lmZGVmIEVCVVNfU1VQUE9SVAogCX0KICNlbmRpZgotCXB0ciArPSAocGVyaW9kX2J5dGVzIC0gcmVzaWR1ZSk7CisJcHRyICs9IHBlcmlvZF9ieXRlcyAtIHJlc2lkdWU7CiAJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHB0cik7CiB9CiAKQEAgLTEzMjgsOSArMTM0MCw2IEBACiAJaW50IGksIGlkLCB2ZXJzOwogCXVuc2lnbmVkIGNoYXIgKnB0cjsKIAotI2lmIDAKLQlzbmRfY3M0MjMxX2RlYnVnKGNoaXApOwotI2VuZGlmCiAJaWQgPSB2ZXJzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgewogCQltYigpOwpAQCAtMTkxNSw2ICsxOTI0LDkgQEAKIAlpZiAoKGVyciA9IHNuZF9jczQyMzFfdGltZXIoY2hpcCkpIDwgMCkKIAkJZ290byBvdXRfZXJyOwogCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBvdXRfZXJyOworCiAJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTE5NjYsNyArMTk3OCw3IEBACiAJaW50IGVycjsKIAogCSpyY2hpcCA9IE5VTEw7Ci0JY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5ODIsMTMgKzE5OTQsMTMgQEAKIAljaGlwLT5wb3J0ID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgMCwKIAkJCQkgIGNoaXAtPnJlZ3Nfc2l6ZSwgImNzNDIzMSIpOwogCWlmICghY2hpcC0+cG9ydCkgewotCQlzbmRfcHJpbnRrKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBtYXAgY2hpcCByZWdpc3RlcnMuXG4iLCBkZXYpOworCQlzbmRfcHJpbnRkZCgiY3M0MjMxLSVkOiBVbmFibGUgdG8gbWFwIGNoaXAgcmVnaXN0ZXJzLlxuIiwgZGV2KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHJlcXVlc3RfaXJxKHNkZXYtPmlycXNbMF0sIHNuZF9jczQyMzFfc2J1c19pbnRlcnJ1cHQsCiAJCQlTQV9TSElSUSwgImNzNDIzMSIsIGNoaXApKSB7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIGdyYWIgU0JVUyBJUlEgJXNcbiIsCisJCXNuZF9wcmludGRkKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBncmFiIFNCVVMgSVJRICVzXG4iLAogCQkJICAgZGV2LAogCQkJICAgX19pcnFfaXRvYShzZGV2LT5pcnFzWzBdKSk7CiAJCXNuZF9jczQyMzFfc2J1c19mcmVlKGNoaXApOwpAQCAtMjA4MCw3ICsyMDkyLDcgQEAKIAlpbnQgZXJyOwogCiAJKnJjaGlwID0gTlVMTDsKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjExMCwyOSArMjEyMiwyOSBAQAogCWNoaXAtPmViMmMucmVncyA9IGlvcmVtYXAoZWRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIDB4MTApOwogCWlmICghY2hpcC0+cG9ydCB8fCAhY2hpcC0+ZWIycC5yZWdzIHx8ICFjaGlwLT5lYjJjLnJlZ3MpIHsKIAkJc25kX2NzNDIzMV9lYnVzX2ZyZWUoY2hpcCk7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIG1hcCBjaGlwIHJlZ2lzdGVycy5cbiIsIGRldik7CisJCXNuZF9wcmludGRkKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBtYXAgY2hpcCByZWdpc3RlcnMuXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoZWJ1c19kbWFfcmVnaXN0ZXIoJmNoaXAtPmViMmMpKSB7CiAJCXNuZF9jczQyMzFfZWJ1c19mcmVlKGNoaXApOwotCQlzbmRfcHJpbnRrKCJjczQyMzEtJWQ6IFVuYWJsZSB0byByZWdpc3RlciBFQlVTIGNhcHR1cmUgRE1BXG4iLCBkZXYpOworCQlzbmRfcHJpbnRkZCgiY3M0MjMxLSVkOiBVbmFibGUgdG8gcmVnaXN0ZXIgRUJVUyBjYXB0dXJlIERNQVxuIiwgZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJaWYgKGVidXNfZG1hX2lycV9lbmFibGUoJmNoaXAtPmViMmMsIDEpKSB7CiAJCXNuZF9jczQyMzFfZWJ1c19mcmVlKGNoaXApOwotCQlzbmRfcHJpbnRrKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBlbmFibGUgRUJVUyBjYXB0dXJlIElSUVxuIiwgZGV2KTsKKwkJc25kX3ByaW50ZGQoImNzNDIzMS0lZDogVW5hYmxlIHRvIGVuYWJsZSBFQlVTIGNhcHR1cmUgSVJRXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmIChlYnVzX2RtYV9yZWdpc3RlcigmY2hpcC0+ZWIycCkpIHsKIAkJc25kX2NzNDIzMV9lYnVzX2ZyZWUoY2hpcCk7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIHJlZ2lzdGVyIEVCVVMgcGxheSBETUFcbiIsIGRldik7CisJCXNuZF9wcmludGRkKCJjczQyMzEtJWQ6IFVuYWJsZSB0byByZWdpc3RlciBFQlVTIHBsYXkgRE1BXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAoZWJ1c19kbWFfaXJxX2VuYWJsZSgmY2hpcC0+ZWIycCwgMSkpIHsKIAkJc25kX2NzNDIzMV9lYnVzX2ZyZWUoY2hpcCk7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIGVuYWJsZSBFQlVTIHBsYXkgSVJRXG4iLCBkZXYpOworCQlzbmRfcHJpbnRkZCgiY3M0MjMxLSVkOiBVbmFibGUgdG8gZW5hYmxlIEVCVVMgcGxheSBJUlFcbiIsIGRldik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9kYnJpLmMgYi9zb3VuZC9zcGFyYy9kYnJpLmMKaW5kZXggOTQxYzdiMS4uYjVjNGMxNSAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvZGJyaS5jCisrKyBiL3NvdW5kL3NwYXJjL2RicmkuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIERCUkkgc291bmQgY2hpcCBmb3VuZCBvbiBTcGFyY3MuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWFydGluIEhhYmV0cyAobWhhYmV0c0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTWFydGluIEhhYmV0cyAobWhhYmV0c0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCiAgKgogICogQmFzZWQgZW50aXJlbHkgdXBvbiBkcml2ZXJzL3NidXMvYXVkaW8vZGJyaS5jIHdoaWNoIGlzOgogICogQ29weXJpZ2h0IChDKSAxOTk3IFJ1ZG9sZiBLb2VuaWcgKHJma29lbmlnQGltbWQ0LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlKQpAQCAtNDMsNiArNDMsMTIgQEAKICAqIGF1ZGlvIGRldmljZXMuIEJ1dCB0aGUgU1VOIEhXIGdyb3VwIGRlY2lkZWQgYWdhaW5zdCBpdCwgYXQgbGVhc3Qgb24gbXkKICAqIExYIHRoZSBzcGVha2VyYm94IGNvbm5lY3RvciBoYXMgYXQgbGVhc3QgMSBwaW4gbWlzc2luZyBhbmQgMSB3cm9uZ2x5CiAgKiBjb25uZWN0ZWQuCisgKgorICogSSd2ZSB0cmllZCB0byBzdGljayB0byB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIG5hbWluZyBjb252ZW50aW9uczoKKyAqIHNuZF8qCUFMU0Egc3R1ZmYKKyAqIGNzNDIxNV8qCUNTNDIxNSBjb2RlYyBzcGVjZmljIHN0dWZmCisgKiBkYnJpXyoJREJSSSBoaWdoLWxldmVsIHN0dWZmCisgKiBvdGhlcglEQlJJIGxvdy1sZXZlbCBzdHVmZgogICovCiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KQEAgLTg3LDcgKzkzLDcgQEAKICNkZWZpbmUgRF9ERVNDCSgxPDw1KQogCiBzdGF0aWMgaW50IGRicmlfZGVidWcgPSAwOwotbW9kdWxlX3BhcmFtKGRicmlfZGVidWcsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oZGJyaV9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGJyaV9kZWJ1ZywgIkRlYnVnIHZhbHVlIGZvciBTdW4gREJSSSBzb3VuZGNhcmQuIik7CiAKICNpZmRlZiBEQlJJX0RFQlVHCkBAIC0zMjAsNyArMzI2LDggQEAKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CS8qIGRicmkgSFcgcmVncyAqLwogCWludCBkYnJpX3ZlcnNpb247CS8qICdlJyBhbmQgdXAgaXMgT0sgKi8KIAlpbnQgZGJyaV9pcnFwOwkJLyogaW50ciBxdWV1ZSBwb2ludGVyICovCi0JaW50IHdhaXRfc2VlbjsKKwlpbnQgd2FpdF9zZW5kOwkJLyogc2VxdWVuY2Ugb2YgY29tbWFuZCBidWZmZXJzIHNlbmQgKi8KKwlpbnQgd2FpdF9hY2tkOwkJLyogc2VxdWVuY2Ugb2YgY29tbWFuZCBidWZmZXJzIGFja25vd2xlZGdlZCAqLwogCiAJc3RydWN0IGRicmlfcGlwZSBwaXBlc1tEQlJJX05PX1BJUEVTXTsJLyogREJSSSdzIDMyIGRhdGEgcGlwZXMgKi8KIAlzdHJ1Y3QgZGJyaV9kZXNjIGRlc2NzW0RCUklfTk9fREVTQ1NdOwpAQCAtNjI1LDE2ICs2MzIsMTMgQEAKIAogQ29tbWFuZHMgYXJlIHNlbnQgdG8gdGhlIERCUkkgYnkgYnVpbGRpbmcgYSBsaXN0IG9mIHRoZW0gaW4gbWVtb3J5LAogdGhlbiB3cml0aW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBsaXN0IGl0ZW0gdG8gREJSSSByZWdpc3RlciA4LgotVGhlIGxpc3QgaXMgdGVybWluYXRlZCB3aXRoIGEgV0FJVCBjb21tYW5kLCB3aGljaCBjYW4gZ2VuZXJhdGUgYQotQ1BVIGludGVycnVwdCBpZiByZXF1aXJlZC4KK1RoZSBsaXN0IGlzIHRlcm1pbmF0ZWQgd2l0aCBhIFdBSVQgY29tbWFuZCwgd2hpY2ggZ2VuZXJhdGVzIGEKK0NQVSBpbnRlcnJ1cHQgdG8gc2lnbmFsIGNvbXBsZXRpb24uCiAKIFNpbmNlIHRoZSBEQlJJIGNhbiBydW4gaW4gcGFyYWxsZWwgd2l0aCB0aGUgQ1BVLCBzZXZlcmFsIG1lYW5zIG9mCi1zeW5jaHJvbml6YXRpb24gcHJlc2VudCB0aGVtc2VsdmVzLiAgVGhlIG9yaWdpbmFsIHNjaGVtZSAoUnVkb2xmJ3MpCi13YXMgdG8gc2V0IGEgZmxhZyB3aGVuIHdlICJjbWRsb2NrImVkIHRoZSBEQlJJLCBjbGVhciB0aGUgZmxhZyB3aGVuCi1hbiBpbnRlcnJ1cHQgc2lnbmFsZWQgY29tcGxldGlvbiwgYW5kIHdhaXQgb24gYSB3YWl0X3F1ZXVlIGlmIGEgcm91dGluZQotYXR0ZW1wdGVkIHRvIGNtZGxvY2sgd2hpbGUgdGhlIGZsYWcgd2FzIHNldC4gIFRoZSBwcm9ibGVtcyBhcm9zZSB3aGVuCi13ZSB0cmllZCB0byBjbWRsb2NrIGZyb20gaW5zaWRlIGFuIGludGVycnVwdCBoYW5kbGVyLCB3aGljaCBtaWdodAotY2F1c2Ugc2NoZWR1bGluZyBpbiBhbiBpbnRlcnJ1cHQgKGlmIHdlIHdhaXRlZCksIGV0YywgZXRjCitzeW5jaHJvbml6YXRpb24gcHJlc2VudCB0aGVtc2VsdmVzLiAgVGhlIG1ldGhvZCBpbXBsZW1lbnRlZCBoZXJlIGlzIGNsb3NlCit0byB0aGUgb3JpZ2luYWwgc2NoZW1lIChSdWRvbGYncyksIGFuZCB1c2VzIDIgY291bnRlcnMgKHdhaXRfc2VuZCBhbmQKK3dhaXRfYWNrZCkgdG8gc3luY2hyb25pemUgdGhlIGNvbW1hbmQgYnVmZmVyIGJldHdlZW4gdGhlIENQVSBhbmQgdGhlIERCUkkuCiAKIEEgbW9yZSBzb3BoaXN0aWNhdGVkIHNjaGVtZSBtaWdodCBpbnZvbHZlIGEgY2lyY3VsYXIgY29tbWFuZCBidWZmZXIKIG9yIGFuIGFycmF5IG9mIGNvbW1hbmQgYnVmZmVycy4gIEEgcm91dGluZSBjb3VsZCBmaWxsIG9uZSB3aXRoCkBAIC02NDIsNzAgKzY0Niw3NSBAQAogY29tcGxldGlvbiBvZiB0aGUgY3VycmVudCBjb21tYW5kIGJ1ZmZlciwgbG9vayBvbiB0aGUgbGlzdCBmb3IKIHRoZSBuZXh0IG9uZS4KIAotSSd2ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBzb21ldGhpbmcgbXVjaCBzaW1wbGVyIC0gYWZ0ZXIgZWFjaCBjb21tYW5kLAotdGhlIENQVSB3YWl0cyBmb3IgdGhlIERCUkkgdG8gZmluaXNoIHRoZSBjb21tYW5kIGJ5IHBvbGxpbmcgdGhlIFAgYml0Ci1pbiBEQlJJIHJlZ2lzdGVyIDAuICBJJ3ZlIHRyaWVkIHRvIGltcGxlbWVudCB0aGlzIGluIHN1Y2ggYSB3YXkKLXRoYXQgbWlnaHQgbWFrZSBpbXBsZW1lbnRpbmcgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgc2NoZW1lIGVhc2llci4KLQogRXZlcnkgdGltZSBhIHJvdXRpbmUgd2FudHMgdG8gd3JpdGUgY29tbWFuZHMgdG8gdGhlIERCUkksIGl0IG11c3QKIGZpcnN0IGNhbGwgZGJyaV9jbWRsb2NrKCkgYW5kIGdldCBhbiBpbml0aWFsIHBvaW50ZXIgaW50byBkYnJpLT5kbWEtPmNtZAotaW4gcmV0dXJuLiAgQWZ0ZXIgdGhlIGNvbW1hbmRzIGhhdmUgYmVlbiB3cml0ZW4sIGRicmlfY21kc2VuZCgpIGlzCi1jYWxsZWQgd2l0aCB0aGUgZmluYWwgcG9pbnRlciB2YWx1ZS4KK2luIHJldHVybi4gZGJyaV9jbWRsb2NrKCkgd2lsbCBibG9jayBpZiB0aGUgcHJldmlvdXMgY29tbWFuZHMgaGF2ZSBub3QKK2JlZW4gY29tcGxldGVkIHlldC4gQWZ0ZXIgdGhpcyB0aGUgY29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwKK2FuZCBkYnJpX2NtZHNlbmQoKSBpcyBjYWxsZWQgd2l0aCB0aGUgZmluYWwgcG9pbnRlciB2YWx1ZSB0byBzZW5kIHRoZW0KK3RvIHRoZSBEQlJJLgogCiAqLwogCitzdGF0aWMgdm9pZCBkYnJpX3Byb2Nlc3NfaW50ZXJydXB0X2J1ZmZlcihzbmRfZGJyaV90ICogZGJyaSk7CisKIGVudW0gZGJyaV9sb2NrX3QgeyBOb0dldExvY2ssIEdldExvY2sgfTsKKyNkZWZpbmUgTUFYTE9PUFMgMTAKIAogc3RhdGljIHZvbGF0aWxlIHMzMiAqZGJyaV9jbWRsb2NrKHNuZF9kYnJpX3QgKiBkYnJpLCBlbnVtIGRicmlfbG9ja190IGdldCkKIHsKKwlpbnQgbWF4bG9vcHMgPSBNQVhMT09QUzsKKwogI2lmbmRlZiBTTVAKIAlpZiAoKGdldCA9PSBHZXRMb2NrKSAmJiBzcGluX2lzX2xvY2tlZCgmZGJyaS0+bG9jaykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBjbWRsb2NrIGNhbGxlZCB3aGlsZSBpbiBzcGlubG9jay4iKTsKIAl9CiAjZW5kaWYKIAorCS8qIERlbGF5IGlmIHByZXZpb3VzIGNvbW1hbmRzIGFyZSBzdGlsbCBiZWluZyBwcm9jZXNzZWQgKi8KKwl3aGlsZSAoKC0tbWF4bG9vcHMpID4gMCAmJiAoZGJyaS0+d2FpdF9zZW5kICE9IGRicmktPndhaXRfYWNrZCkpIHsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMSk7CisJCS8qIElmIGRicmlfY21kbG9jaygpIGdvdCBjYWxsZWQgZnJvbSBpbnNpZGUgdGhlCisJCSAqIGludGVycnVwdCBoYW5kbGVyLCB0aGlzIHdpbGwgZG8gdGhlIHByb2Nlc3NpbmcuCisJCSAqLworCQlkYnJpX3Byb2Nlc3NfaW50ZXJydXB0X2J1ZmZlcihkYnJpKTsKKwl9CisJaWYgKG1heGxvb3BzID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBDaGlwIG5ldmVyIGNvbXBsZXRlZCBjb21tYW5kIGJ1ZmZlciAlZFxuIiwKKwkJCWRicmktPndhaXRfc2VuZCk7CisJfSBlbHNlIHsKKwkJZHByaW50ayhEX0NNRCwgIkNoaXAgY29tcGxldGVkIGNvbW1hbmQgYnVmZmVyICglZClcbiIsCisJCQlNQVhMT09QUyAtIG1heGxvb3BzIC0gMSk7CisJfQorCiAJLyppZiAoZ2V0ID09IEdldExvY2spIHNwaW5fbG9jaygmZGJyaS0+bG9jayk7ICovCiAJcmV0dXJuICZkYnJpLT5kbWEtPmNtZFswXTsKIH0KIAotc3RhdGljIHZvaWQgZGJyaV9wcm9jZXNzX2ludGVycnVwdF9idWZmZXIoc25kX2RicmlfdCAqKTsKLQogc3RhdGljIHZvaWQgZGJyaV9jbWRzZW5kKHNuZF9kYnJpX3QgKiBkYnJpLCB2b2xhdGlsZSBzMzIgKiBjbWQpCiB7Ci0JaW50IE1BWExPT1BTID0gMTAwMDAwMDsKLQlpbnQgbWF4bG9vcHMgPSBNQVhMT09QUzsKIAl2b2xhdGlsZSBzMzIgKnB0cjsKKwl1MzIJcmVnOwogCiAJZm9yIChwdHIgPSAmZGJyaS0+ZG1hLT5jbWRbMF07IHB0ciA8IGNtZDsgcHRyKyspIHsKIAkJZHByaW50ayhEX0NNRCwgImNtZDogJWx4OiUwOHhcbiIsICh1bnNpZ25lZCBsb25nKXB0ciwgKnB0cik7CiAJfQogCiAJaWYgKChjbWQgLSAmZGJyaS0+ZG1hLT5jbWRbMF0pID49IERCUklfTk9fQ01EUyAtIDEpIHsKLQkJcHJpbnRrKCJEQlJJOiBDb21tYW5kIGJ1ZmZlciBvdmVyZmxvdyEgKGJ1ZyBpbiBkcml2ZXIpXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBDb21tYW5kIGJ1ZmZlciBvdmVyZmxvdyEgKGJ1ZyBpbiBkcml2ZXIpXG4iKTsKIAkJLyogSWdub3JlIHRoZSBsYXN0IHBhcnQuICovCiAJCWNtZCA9ICZkYnJpLT5kbWEtPmNtZFtEQlJJX05PX0NNRFMgLSAzXTsKIAl9CiAKKwlkYnJpLT53YWl0X3NlbmQrKzsKKwlkYnJpLT53YWl0X3NlbmQgJj0gMHhmZmZmOwkvKiByZXN0cmljdCBpdCB0byBhIDE2IGJpdCBjb3VudGVyLiAqLwogCSooY21kKyspID0gREJSSV9DTUQoRF9QQVVTRSwgMCwgMCk7Ci0JKihjbWQrKykgPSBEQlJJX0NNRChEX1dBSVQsIDEsIDApOwotCWRicmktPndhaXRfc2VlbiA9IDA7CisJKihjbWQrKykgPSBEQlJJX0NNRChEX1dBSVQsIDEsIGRicmktPndhaXRfc2VuZCk7CisKKwkvKiBTZXQgY29tbWFuZCBwb2ludGVyIGFuZCBzaWduYWwgaXQgaXMgdmFsaWQuICovCiAJc2J1c193cml0ZWwoZGJyaS0+ZG1hX2R2bWEsIGRicmktPnJlZ3MgKyBSRUc4KTsKLQl3aGlsZSAoKC0tbWF4bG9vcHMpID4gMCAmJiAoc2J1c19yZWFkbChkYnJpLT5yZWdzICsgUkVHMCkgJiBEX1ApKQotCQliYXJyaWVyKCk7Ci0JaWYgKG1heGxvb3BzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBDaGlwIG5ldmVyIGNvbXBsZXRlZCBjb21tYW5kIGJ1ZmZlclxuIik7Ci0JCWRwcmludGsoRF9DTUQsICJEQlJJOiBDaGlwIG5ldmVyIGNvbXBsZXRlZCBjb21tYW5kIGJ1ZmZlclxuIik7Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKCgtLW1heGxvb3BzKSA+IDAgJiYgKCFkYnJpLT53YWl0X3NlZW4pKQotCQkJZGJyaV9wcm9jZXNzX2ludGVycnVwdF9idWZmZXIoZGJyaSk7Ci0JCWlmIChtYXhsb29wcyA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IENoaXAgbmV2ZXIgYWNrZWQgV0FJVFxuIik7Ci0JCQlkcHJpbnRrKERfQ01ELCAiREJSSTogQ2hpcCBuZXZlciBhY2tlZCBXQUlUXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoRF9DTUQsICJDaGlwIGNvbXBsZXRlZCBjb21tYW5kICIKLQkJCQkiYnVmZmVyICglZClcbiIsIE1BWExPT1BTIC0gbWF4bG9vcHMpOwotCQl9Ci0JfQorCXJlZyA9IHNidXNfcmVhZGwoZGJyaS0+cmVncyArIFJFRzApOworCXJlZyB8PSBEX1A7CisJc2J1c193cml0ZWwocmVnLCBkYnJpLT5yZWdzICsgUkVHMCk7CiAKIAkvKnNwaW5fdW5sb2NrKCZkYnJpLT5sb2NrKTsgKi8KIH0KQEAgLTc1NywxMCArNzY2LDExIEBACiAJZm9yIChuID0gMDsgbiA8IERCUklfTk9fUElQRVM7IG4rKykKIAkJZGJyaS0+cGlwZXNbbl0uZGVzYyA9IGRicmktPnBpcGVzW25dLmZpcnN0X2Rlc2MgPSAtMTsKIAotCS8qIFdlIHNob3VsZCBxdWVyeSB0aGUgb3BlbnByb20gdG8gc2VlIHdoYXQgYnVyc3Qgc2l6ZXMgdGhpcwotCSAqIFNCdXMgc3VwcG9ydHMuICBGb3Igbm93LCBqdXN0IGRpc2FibGUgYWxsIFNCdXMgYnVyc3RzICovCisJLyogQSBicnV0ZSBhcHByb2FjaCAtIERCUkkgZmFsbHMgYmFjayB0byB3b3JraW5nIGJ1cnN0IHNpemUgYnkgaXRzZWxmCisJICogT24gU1MyMCBEX1MgZG9lcyBub3Qgd29yaywgc28gZG8gbm90IHRyeSBzbyBoaWdoLiAqLwogCXRtcCA9IHNidXNfcmVhZGwoZGJyaS0+cmVncyArIFJFRzApOwotCXRtcCAmPSB+KERfRyB8IERfUyB8IERfRSk7CisJdG1wIHw9IERfRyB8IERfRTsKKwl0bXAgJj0gfkRfUzsKIAlzYnVzX3dyaXRlbCh0bXAsIGRicmktPnJlZ3MgKyBSRUcwKTsKIAogCS8qCkBAIC04MDUsMTMgKzgxNSwxMyBAQAogCXZvbGF0aWxlIGludCAqY21kOwogCiAJaWYgKHBpcGUgPCAwIHx8IHBpcGUgPiAzMSkgewotCQlwcmludGsoIkRCUkk6IHJlc2V0X3BpcGUgY2FsbGVkIHdpdGggaWxsZWdhbCBwaXBlIG51bWJlclxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiREJSSTogcmVzZXRfcGlwZSBjYWxsZWQgd2l0aCBpbGxlZ2FsIHBpcGUgbnVtYmVyXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNkcCA9IGRicmktPnBpcGVzW3BpcGVdLnNkcDsKIAlpZiAoc2RwID09IDApIHsKLQkJcHJpbnRrKCJEQlJJOiByZXNldF9waXBlIGNhbGxlZCBvbiB1bmluaXRpYWxpemVkIHBpcGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IHJlc2V0X3BpcGUgY2FsbGVkIG9uIHVuaW5pdGlhbGl6ZWQgcGlwZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgzNCwxMiArODQ0LDEyIEBACiBzdGF0aWMgdm9pZCBzZXR1cF9waXBlKHNuZF9kYnJpX3QgKiBkYnJpLCBpbnQgcGlwZSwgaW50IHNkcCkKIHsKIAlpZiAocGlwZSA8IDAgfHwgcGlwZSA+IDMxKSB7Ci0JCXByaW50aygiREJSSTogc2V0dXBfcGlwZSBjYWxsZWQgd2l0aCBpbGxlZ2FsIHBpcGUgbnVtYmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBzZXR1cF9waXBlIGNhbGxlZCB3aXRoIGlsbGVnYWwgcGlwZSBudW1iZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKChzZHAgJiAweGY4MDApICE9IHNkcCkgewotCQlwcmludGsoIkRCUkk6IHNldHVwX3BpcGUgY2FsbGVkIHdpdGggc3RyYW5nZSBTRFAgdmFsdWVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IHNldHVwX3BpcGUgY2FsbGVkIHdpdGggc3RyYW5nZSBTRFAgdmFsdWVcbiIpOwogCQkvKiBzZHAgJj0gMHhmODAwOyAqLwogCX0KIApAQCAtODcyLDEzICs4ODIsMTMgQEAKIAlpbnQgbmV4dHBpcGU7CiAKIAlpZiAocGlwZSA8IDAgfHwgcGlwZSA+IDMxIHx8IGJhc2VwaXBlIDwgMCB8fCBiYXNlcGlwZSA+IDMxKSB7Ci0JCXByaW50awotCQkgICAgKCJEQlJJOiBsaW5rX3RpbWVfc2xvdCBjYWxsZWQgd2l0aCBpbGxlZ2FsIHBpcGUgbnVtYmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgIkRCUkk6IGxpbmtfdGltZV9zbG90IGNhbGxlZCB3aXRoIGlsbGVnYWwgcGlwZSBudW1iZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGRicmktPnBpcGVzW3BpcGVdLnNkcCA9PSAwIHx8IGRicmktPnBpcGVzW2Jhc2VwaXBlXS5zZHAgPT0gMCkgewotCQlwcmludGsoIkRCUkk6IGxpbmtfdGltZV9zbG90IGNhbGxlZCBvbiB1bmluaXRpYWxpemVkIHBpcGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IGxpbmtfdGltZV9zbG90IGNhbGxlZCBvbiB1bmluaXRpYWxpemVkIHBpcGVcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC05NjAsOCArOTcwLDggQEAKIAlpbnQgdmFsOwogCiAJaWYgKHBpcGUgPCAwIHx8IHBpcGUgPiAzMSB8fCBwcmV2cGlwZSA8IDAgfHwgcHJldnBpcGUgPiAzMSkgewotCQlwcmludGsKLQkJICAgICgiREJSSTogdW5saW5rX3RpbWVfc2xvdCBjYWxsZWQgd2l0aCBpbGxlZ2FsIHBpcGUgbnVtYmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgIkRCUkk6IHVubGlua190aW1lX3Nsb3QgY2FsbGVkIHdpdGggaWxsZWdhbCBwaXBlIG51bWJlclxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMDEsMjIgKzEwMTEsMjIgQEAKIAl2b2xhdGlsZSBzMzIgKmNtZDsKIAogCWlmIChwaXBlIDwgMTYgfHwgcGlwZSA+IDMxKSB7Ci0JCXByaW50aygiREJSSTogeG1pdF9maXhlZDogSWxsZWdhbCBwaXBlIG51bWJlclxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiREJSSTogeG1pdF9maXhlZDogSWxsZWdhbCBwaXBlIG51bWJlclxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoRF9TRFBfTU9ERShkYnJpLT5waXBlc1twaXBlXS5zZHApID09IDApIHsKLQkJcHJpbnRrKCJEQlJJOiB4bWl0X2ZpeGVkOiBVbmluaXRpYWxpemVkIHBpcGUgJWRcbiIsIHBpcGUpOworCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IHhtaXRfZml4ZWQ6IFVuaW5pdGlhbGl6ZWQgcGlwZSAlZFxuIiwgcGlwZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoRF9TRFBfTU9ERShkYnJpLT5waXBlc1twaXBlXS5zZHApICE9IERfU0RQX0ZJWEVEKSB7Ci0JCXByaW50aygiREJSSTogeG1pdF9maXhlZDogTm9uLWZpeGVkIHBpcGUgJWRcbiIsIHBpcGUpOworCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IHhtaXRfZml4ZWQ6IE5vbi1maXhlZCBwaXBlICVkXG4iLCBwaXBlKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghKGRicmktPnBpcGVzW3BpcGVdLnNkcCAmIERfU0RQX1RPX1NFUikpIHsKLQkJcHJpbnRrKCJEQlJJOiB4bWl0X2ZpeGVkOiBDYWxsZWQgb24gcmVjZWl2ZSBwaXBlICVkXG4iLCBwaXBlKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiB4bWl0X2ZpeGVkOiBDYWxsZWQgb24gcmVjZWl2ZSBwaXBlICVkXG4iLCBwaXBlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTAzNiwxNyArMTA0NiwxNyBAQAogc3RhdGljIHZvaWQgcmVjdl9maXhlZChzbmRfZGJyaV90ICogZGJyaSwgaW50IHBpcGUsIHZvbGF0aWxlIF9fdTMyICogcHRyKQogewogCWlmIChwaXBlIDwgMTYgfHwgcGlwZSA+IDMxKSB7Ci0JCXByaW50aygiREJSSTogcmVjdl9maXhlZCBjYWxsZWQgd2l0aCBpbGxlZ2FsIHBpcGUgbnVtYmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiByZWN2X2ZpeGVkIGNhbGxlZCB3aXRoIGlsbGVnYWwgcGlwZSBudW1iZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKERfU0RQX01PREUoZGJyaS0+cGlwZXNbcGlwZV0uc2RwKSAhPSBEX1NEUF9GSVhFRCkgewotCQlwcmludGsoIkRCUkk6IHJlY3ZfZml4ZWQgY2FsbGVkIG9uIG5vbi1maXhlZCBwaXBlICVkXG4iLCBwaXBlKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiByZWN2X2ZpeGVkIGNhbGxlZCBvbiBub24tZml4ZWQgcGlwZSAlZFxuIiwgcGlwZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoZGJyaS0+cGlwZXNbcGlwZV0uc2RwICYgRF9TRFBfVE9fU0VSKSB7Ci0JCXByaW50aygiREJSSTogcmVjdl9maXhlZCBjYWxsZWQgb24gdHJhbnNtaXQgcGlwZSAlZFxuIiwgcGlwZSk7CisJCXByaW50ayhLRVJOX0VSUiAiREJSSTogcmVjdl9maXhlZCBjYWxsZWQgb24gdHJhbnNtaXQgcGlwZSAlZFxuIiwgcGlwZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNzUsMTIgKzEwODUsMTIgQEAKIAlpbnQgbGFzdF9kZXNjID0gLTE7CiAKIAlpZiAoaW5mby0+cGlwZSA8IDAgfHwgaW5mby0+cGlwZSA+IDE1KSB7Ci0JCXByaW50aygiREJSSTogc2V0dXBfZGVzY3M6IElsbGVnYWwgcGlwZSBudW1iZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IHNldHVwX2Rlc2NzOiBJbGxlZ2FsIHBpcGUgbnVtYmVyXG4iKTsKIAkJcmV0dXJuIC0yOwogCX0KIAogCWlmIChkYnJpLT5waXBlc1tpbmZvLT5waXBlXS5zZHAgPT0gMCkgewotCQlwcmludGsoIkRCUkk6IHNldHVwX2Rlc2NzOiBVbmluaXRpYWxpemVkIHBpcGUgJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiREJSSTogc2V0dXBfZGVzY3M6IFVuaW5pdGlhbGl6ZWQgcGlwZSAlZFxuIiwKIAkJICAgICAgIGluZm8tPnBpcGUpOwogCQlyZXR1cm4gLTI7CiAJfQpAQCAtMTA5MCwyMCArMTEwMCwyMCBAQAogCiAJaWYgKHN0cmVhbW5vID09IERCUklfUExBWSkgewogCQlpZiAoIShkYnJpLT5waXBlc1tpbmZvLT5waXBlXS5zZHAgJiBEX1NEUF9UT19TRVIpKSB7Ci0JCQlwcmludGsoIkRCUkk6IHNldHVwX2Rlc2NzOiBDYWxsZWQgb24gcmVjZWl2ZSBwaXBlICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBzZXR1cF9kZXNjczogQ2FsbGVkIG9uIHJlY2VpdmUgcGlwZSAlZFxuIiwKIAkJCSAgICAgICBpbmZvLT5waXBlKTsKIAkJCXJldHVybiAtMjsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChkYnJpLT5waXBlc1tpbmZvLT5waXBlXS5zZHAgJiBEX1NEUF9UT19TRVIpIHsKLQkJCXByaW50awotCQkJICAgICgiREJSSTogc2V0dXBfZGVzY3M6IENhbGxlZCBvbiB0cmFuc21pdCBwaXBlICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSIAorCQkJICAgICJEQlJJOiBzZXR1cF9kZXNjczogQ2FsbGVkIG9uIHRyYW5zbWl0IHBpcGUgJWRcbiIsCiAJCQkgICAgIGluZm8tPnBpcGUpOwogCQkJcmV0dXJuIC0yOwogCQl9CiAJCS8qIFNob3VsZCBiZSBhYmxlIHRvIHF1ZXVlIG11bHRpcGxlIGJ1ZmZlcnMgdG8gcmVjZWl2ZSBvbiBhIHBpcGUgKi8KIAkJaWYgKHBpcGVfYWN0aXZlKGRicmksIGluZm8tPnBpcGUpKSB7Ci0JCQlwcmludGsoIkRCUkk6IHJlY3Zfb25fcGlwZTogQ2FsbGVkIG9uIGFjdGl2ZSBwaXBlICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiByZWN2X29uX3BpcGU6IENhbGxlZCBvbiBhY3RpdmUgcGlwZSAlZFxuIiwKIAkJCSAgICAgICBpbmZvLT5waXBlKTsKIAkJCXJldHVybiAtMjsKIAkJfQpAQCAtMTEyMCw3ICsxMTMwLDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoZGVzYyA9PSBEQlJJX05PX0RFU0NTKSB7Ci0JCQlwcmludGsoIkRCUkk6IHNldHVwX2Rlc2NzOiBObyBkZXNjcmlwdG9yc1xuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IHNldHVwX2Rlc2NzOiBObyBkZXNjcmlwdG9yc1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMTE2NSw3ICsxMTc1LDcgQEAKIAl9CiAKIAlpZiAoZmlyc3RfZGVzYyA9PSAtMSB8fCBsYXN0X2Rlc2MgPT0gLTEpIHsKLQkJcHJpbnRrKCJEQlJJOiBzZXR1cF9kZXNjczogTm90IGVub3VnaCBkZXNjcmlwdG9ycyBhdmFpbGFibGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IHNldHVwX2Rlc2NzOiBOb3QgZW5vdWdoIGRlc2NyaXB0b3JzIGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEyNzAsNyArMTI4MCw3IEBACiAJCWludCBkaXZpc29yID0gMTIyODggLyBjbG9ja3JhdGU7CiAKIAkJaWYgKGRpdmlzb3IgPiAyNTUgfHwgZGl2aXNvciAqIGNsb2NrcmF0ZSAhPSAxMjI4OCkKLQkJCXByaW50aygiREJSSTogaWxsZWdhbCBiaXRzX3Blcl9mcmFtZSBpbiBzZXR1cF9jaGlcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBpbGxlZ2FsIGJpdHNfcGVyX2ZyYW1lIGluIHNldHVwX2NoaVxuIik7CiAKIAkJKihjbWQrKykgPSBEQlJJX0NNRChEX0NISSwgMCwgRF9DSElfQ0hJQ00oZGl2aXNvcikgfCBEX0NISV9GRAogCQkJCSAgICB8IERfQ0hJX0JQRihiaXRzX3Blcl9mcmFtZSkpOwpAQCAtMTQ3NCw3ICsxNDg0LDYgQEAKIAkvKiBUZW1wb3JhcmlseSBtdXRlIG91dHB1dHMsIGFuZCB3YWl0IDEvODAwMCBzZWMgKDEyNSB1cykKIAkgKiB0byBtYWtlIHN1cmUgdGhpcyB0YWtlcy4gIFRoaXMgYXZvaWRzIGNsaWNraW5nIG5vaXNlcy4KIAkgKi8KLQogCWNzNDIxNV9zZXRkYXRhKGRicmksIDEpOwogCXVkZWxheSgxMjUpOwogCkBAIC0xNTMwLDggKzE1MzksOCBAQAogCXRtcCB8PSBEX0M7CQkvKiBFbmFibGUgQ0hJICovCiAJc2J1c193cml0ZWwodG1wLCBkYnJpLT5yZWdzICsgUkVHMCk7CiAKLQlmb3IgKGkgPSA2NDsgKChkYnJpLT5tbS5zdGF0dXMgJiAweGU0KSAhPSAweDIwKTsgLS1pKSB7Ci0JCXVkZWxheSgxMjUpOworCWZvciAoaSA9IDEwOyAoKGRicmktPm1tLnN0YXR1cyAmIDB4ZTQpICE9IDB4MjApOyAtLWkpIHsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMSk7CiAJfQogCWlmIChpID09IDApIHsKIAkJZHByaW50ayhEX01NLCAiQ1M0MjE1IGRpZG4ndCByZXNwb25kIHRvIENMQiAoMHglMDJ4KVxuIiwKQEAgLTE2NzgsOCArMTY4Nyw4IEBACiBDb21wbGljYXRlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGJ5IGRlZGljYXRlZCBmdW5jdGlvbnMgKHdoaWNoCiBhcHBlYXIgZmlyc3QgaW4gdGhpcyBmaWxlKS4gIEFueSBwZW5kaW5nIGludGVycnVwdHMgY2FuIGJlIHNlcnZpY2VkIGJ5CiBjYWxsaW5nIGRicmlfcHJvY2Vzc19pbnRlcnJ1cHRfYnVmZmVyKCksIHdoaWNoIHdvcmtzIGV2ZW4gaWYgdGhlIENQVSdzCi1pbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBkYnJpX2NtZHNlbmQoKQotdG8gbWFrZSBzdXJlIHdlJ3JlIHN5bmNlZCB1cCB3aXRoIHRoZSBjaGlwIGFmdGVyIGVhY2ggY29tbWFuZCBzZXF1ZW5jZSwKK2ludGVycnVwdHMgYXJlIGRpc2FibGVkLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGRicmlfY21kbG9jaygpCit0byBtYWtlIHN1cmUgd2UncmUgc3luY2VkIHVwIHdpdGggdGhlIGNoaXAgYmVmb3JlIGVhY2ggY29tbWFuZCBzZXF1ZW5jZSwKIGV2ZW4gaWYgd2UncmUgcnVubmluZyBjbGknZWQuCiAKICovCkBAIC0xNzY1LDExICsxNzc0LDEzIEBACiAgKiBDYWxsZWQgYnkgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciB3aGVuIERCUkkgc2lnbmFscyB0cmFuc21pc3Npb24gY29tcGxldGUKICAqIG9uIGEgcGlwZSAoaW50ZXJydXB0IHRyaWdnZXJlZCBieSB0aGUgQiBiaXQgaW4gYSB0cmFuc21pdCBkZXNjcmlwdG9yKS4KICAqCi0gKiBXYWxrcyB0aHJvdWdoIHRoZSBwaXBlJ3MgbGlzdCBvZiB0cmFuc21pdCBidWZmZXIgZGVzY3JpcHRvcnMsIHJlbGVhc2luZwotICogZWFjaCBvbmUncyBETUEgYnVmZmVyIChpZiBwcmVzZW50KSwgZmxhZ2dpbmcgdGhlIGRlc2NyaXB0b3IgYXZhaWxhYmxlLAotICogYW5kIHNpZ25hbGluZyBpdHMgY2FsbGJhY2sgcm91dGluZSAoaWYgcHJlc2VudCksIGJlZm9yZSBwcm9jZWVkaW5nCi0gKiB0byB0aGUgbmV4dCBvbmUuICBTdG9wcyB3aGVuIHRoZSBmaXJzdCBkZXNjcmlwdG9yIGlzIGZvdW5kIHdpdGhvdXQKKyAqIFdhbGtzIHRocm91Z2ggdGhlIHBpcGUncyBsaXN0IG9mIHRyYW5zbWl0IGJ1ZmZlciBkZXNjcmlwdG9ycyBhbmQgbWFya3MKKyAqIHRoZW0gYXMgYXZhaWxhYmxlLiBTdG9wcyB3aGVuIHRoZSBmaXJzdCBkZXNjcmlwdG9yIGlzIGZvdW5kIHdpdGhvdXQKICAqIFRCQyAoVHJhbnNtaXQgQnVmZmVyIENvbXBsZXRlKSBzZXQsIG9yIHdlJ3ZlIHJ1biB0aHJvdWdoIHRoZW0gYWxsLgorICoKKyAqIFRoZSBETUEgYnVmZmVycyBhcmUgbm90IHJlbGVhc2VkLCBidXQgcmUtdXNlZC4gU2luY2UgdGhlIHRyYW5zbWl0IGJ1ZmZlcgorICogZGVzY3JpcHRvcnMgYXJlIG5vdCBjbG9iYmVyZWQsIHRoZXkgY2FuIGJlIHJlLXN1Ym1pdHRlZCBhcyBpcy4gVGhpcyBpcworICogZG9uZSBieSB0aGUgeG1pdF9kZXNjcygpIHRhc2tsZXQgYWJvdmUgc2luY2UgdGhhdCBjb3VsZCB0YWtlIGxvbmdlci4KICAqLwogCiBzdGF0aWMgdm9pZCB0cmFuc21pc3Npb25fY29tcGxldGVfaW50cihzbmRfZGJyaV90ICogZGJyaSwgaW50IHBpcGUpCkBAIC0xODg1LDcgKzE4OTYsMTEgQEAKIAl9CiAKIAlpZiAoY2hhbm5lbCA9PSBEX0lOVFJfQ01EICYmIGNvbW1hbmQgPT0gRF9XQUlUKSB7Ci0JCWRicmktPndhaXRfc2VlbisrOworCQlkYnJpLT53YWl0X2Fja2QgPSB2YWw7CisJCWlmIChkYnJpLT53YWl0X3NlbmQgIT0gdmFsKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlByb2Nlc3Npbmcgd2FpdCBjb21tYW5kICVkIHdoZW4gJWQgd2FzIHNlbmQuXG4iLAorCQkJICAgICAgIHZhbCwgZGJyaS0+d2FpdF9zZW5kKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xOTk0LDggKzIwMDksNyBAQAogCQkgKiBUaGUgb25seSBvbmUgSSd2ZSBzZWVuIGlzIE1SUiwgd2hpY2ggd2lsbCBiZSB0cmlnZ2VyZWQKIAkJICogaWYgeW91IGxldCBhIHRyYW5zbWl0IHBpcGUgdW5kZXJydW4sIHRoZW4gdHJ5IHRvIENEUCBpdC4KIAkJICoKLQkJICogSWYgdGhlc2UgdGhpbmdzIHBlcnNpc3QsIHdlIHNob3VsZCBwcm9iYWJseSByZXNldAotCQkgKiBhbmQgcmUtaW5pdCB0aGUgY2hpcC4KKwkJICogSWYgdGhlc2UgdGhpbmdzIHBlcnNpc3QsIHdlIHJlc2V0IHRoZSBjaGlwLgogCQkgKi8KIAkJaWYgKCgrK2VycmNudCkgJSAxMCA9PSAwKSB7CiAJCQlkcHJpbnRrKERfSU5ULCAiSW50ZXJydXB0IGVycm9ycyBleGNlZWRlZC5cbiIpOwpAQCAtMjA5NCw3ICsyMTA4LDcgQEAKIAogCWlmICgocmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKIAkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpKSA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAibWFsbG9jX3BhZ2VzIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgIm1hbGxvY19wYWdlcyBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTI0NTUsOCArMjQ2OSw3IEBACiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IE5VTV9DUzQyMTVfQ09OVFJPTFM7IGlkeCsrKSB7CiAJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKLQkJCQkgICAgICAgc25kX2N0bF9uZXcxKCZkYnJpX2NvbnRyb2xzW2lkeF0sCi0JCQkJCQkgICAgZGJyaSkpKSA8IDApCisJCQkJc25kX2N0bF9uZXcxKCZkYnJpX2NvbnRyb2xzW2lkeF0sIGRicmkpKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTI0OTAsOCArMjUwMyw2IEBACiAJaW50IHBpcGU7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiZGVidWc9JWRcbiIsIGRicmlfZGVidWcpOwogCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiQ0hJIHBpcGUgaW49JWQsIG91dD0lZFxuIiwKLQkJICAgIGRicmktPmNoaV9pbl9waXBlLCBkYnJpLT5jaGlfb3V0X3BpcGUpOwogCWZvciAocGlwZSA9IDA7IHBpcGUgPCAzMjsgcGlwZSsrKSB7CiAJCWlmIChwaXBlX2FjdGl2ZShkYnJpLCBwaXBlKSkgewogCQkJc3RydWN0IGRicmlfcGlwZSAqcHB0ciA9ICZkYnJpLT5waXBlc1twaXBlXTsKQEAgLTI1MDYsMTggKzI1MTcsNiBAQAogCQl9CiAJfQogfQotCi1zdGF0aWMgdm9pZCBkYnJpX2RlYnVnX3dyaXRlKHNuZF9pbmZvX2VudHJ5X3QgKiBlbnRyeSwKLQkJCSAgICAgc25kX2luZm9fYnVmZmVyX3QgKiBidWZmZXIpCi17Ci0JY2hhciBsaW5lWzgwXTsKLQlpbnQgaTsKLQotCWlmIChzbmRfaW5mb19nZXRfbGluZShidWZmZXIsIGxpbmUsIDgwKSA9PSAwKSB7Ci0JCXNzY2FuZihsaW5lLCAiJWRcbiIsICZpKTsKLQkJZGJyaV9kZWJ1ZyA9IGkgJiAweDNmOwotCX0KLX0KICNlbmRpZgogCiB2b2lkIHNuZF9kYnJpX3Byb2Moc25kX2RicmlfdCAqIGRicmkpCkBAIC0yNTMxLDkgKzI1MzAsNyBAQAogI2lmZGVmIERCUklfREVCVUcKIAllcnIgPSBzbmRfY2FyZF9wcm9jX25ldyhkYnJpLT5jYXJkLCAiZGVidWciLCAmZW50cnkpOwogCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgZGJyaSwgNDA5NiwgZGJyaV9kZWJ1Z19yZWFkKTsKLQllbnRyeS0+bW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUjsgLyogV3JpdGFibGUgZm9yIHJvb3QgKi8KLQllbnRyeS0+Yy50ZXh0LndyaXRlX3NpemUgPSAyNTY7Ci0JZW50cnktPmMudGV4dC53cml0ZSA9IGRicmlfZGVidWdfd3JpdGU7CisJZW50cnktPm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTzsJLyogUmVhZGFibGUgb25seS4gKi8KICNlbmRpZgogfQogCkBAIC0yNjM3LDcgKzI2MzQsMTEgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JcHJvbV9nZXRwcm9wZXJ0eShwcm9tX25vZGUsICJpbnRyIiwgKGNoYXIgKikmaXJxLCBzaXplb2YoaXJxKSk7CisJZXJyID0gcHJvbV9nZXRwcm9wZXJ0eShwcm9tX25vZGUsICJpbnRyIiwgKGNoYXIgKikmaXJxLCBzaXplb2YoaXJxKSk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJLSVkOiBGaXJtd2FyZSBub2RlIGxhY2tzIElSUSBwcm9wZXJ0eS5cbiIsIGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCiAJCQkgICAgc2l6ZW9mKHNuZF9kYnJpX3QpKTsKQEAgLTI2NTcsMjYgKzI2NTgsMjAgQEAKIAl9CiAKIAlkYnJpID0gKHNuZF9kYnJpX3QgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOwotCWlmICgoZXJyID0gc25kX2RicmlfcGNtKGRicmkpKSA8IDApIHsKLQkJc25kX2RicmlfZnJlZShkYnJpKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfZGJyaV9wY20oZGJyaSkpIDwgMCkKKwkJZ290byBfZXJyOwogCi0JaWYgKChlcnIgPSBzbmRfZGJyaV9taXhlcihkYnJpKSkgPCAwKSB7Ci0JCXNuZF9kYnJpX2ZyZWUoZGJyaSk7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmICgoZXJyID0gc25kX2RicmlfbWl4ZXIoZGJyaSkpIDwgMCkKKwkJZ290byBfZXJyOwogCiAJLyogL3Byb2MgZmlsZSBoYW5kbGluZyAqLwogCXNuZF9kYnJpX3Byb2MoZGJyaSk7CiAKLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKLQkJc25kX2RicmlfZnJlZShkYnJpKTsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKChlcnIgPSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19kZXYoY2FyZCkpIDwgMCkKKwkJZ290byBfZXJyOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlnb3RvIF9lcnI7CiAKIAlwcmludGsoS0VSTl9JTkZPICJhdWRpbyVkIGF0ICVwIChpcnEgJWQpIGlzIERCUkkoJWMpK0NTNDIxNSglZClcbiIsCiAJICAgICAgIGRldiwgZGJyaS0+cmVncywKQEAgLTI2ODQsNiArMjY3OSwxMSBAQAogCWRldisrOwogCiAJcmV0dXJuIDA7CisKKyBfZXJyOgorCXNuZF9kYnJpX2ZyZWUoZGJyaSk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBQcm9iZSBmb3IgdGhlIGRicmkgY2hpcCBhbmQgdGhlbiBhdHRhY2ggdGhlIGRyaXZlci4gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eC5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4LmMKaW5kZXggNjBkMGIyYy4uOWUyYjRjMCAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4LmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4LmMKQEAgLTQwLDcgKzQwLDcgQEAKIAlzbmRfZW11eF90ICplbXU7CiAKIAkqcmVtdSA9IE5VTEw7Ci0JZW11ID0ga2NhbGxvYygxLCBzaXplb2YoKmVtdSksIEdGUF9LRVJORUwpOworCWVtdSA9IGt6YWxsb2Moc2l6ZW9mKCplbXUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW11ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKaW5kZXggZTQxYjI4ZC4uOGNjZDMzZiAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJaW50IGksIHR5cGUsIGNhcDsKIAogCS8qIEFsbG9jYXRlIHN0cnVjdHVyZXMgZm9yIHRoaXMgY2hhbm5lbCAqLwotCWlmICgocCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKHAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCXNuZF9wcmludGsoIm5vIG1lbW9yeVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMgYi9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCmluZGV4IDkwMWE3ZGIuLmQwOTI1ZWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKKysrIGIvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJfQogCiAJLyogbm90IGZvdW5kIC0tIGNyZWF0ZSBhIG5ldyBvbmUgKi8KLQlzZiA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzZiksIEdGUF9LRVJORUwpOworCXNmID0ga3phbGxvYyhzaXplb2YoKnNmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNmID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXNmLT5pZCA9IHNmbGlzdC0+Zm9udHNfc2l6ZTsKQEAgLTM0Niw3ICszNDYsNyBAQAogewogCXNuZF9zZl96b25lX3QgKnpwOwogCi0JaWYgKCh6cCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp6cCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgoenAgPSBremFsbG9jKHNpemVvZigqenApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJenAtPm5leHQgPSBzZi0+em9uZXM7CiAJc2YtPnpvbmVzID0genA7CkBAIC0zNzcsNyArMzc3LDcgQEAKIHsKIAlzbmRfc2Zfc2FtcGxlX3QgKnNwOwogCi0JaWYgKChzcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgoc3AgPSBremFsbG9jKHNpemVvZigqc3ApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlzcC0+bmV4dCA9IHNmLT5zYW1wbGVzOwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAKIHsKIAlzbmRfc2ZfbGlzdF90ICpzZmxpc3Q7CiAKLQlpZiAoKHNmbGlzdCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzZmxpc3QpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKHNmbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpzZmxpc3QpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpbml0X01VVEVYKCZzZmxpc3QtPnByZXNldHNfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvdXRpbF9tZW0uYyBiL3NvdW5kL3N5bnRoL3V0aWxfbWVtLmMKaW5kZXggOGIxMzFhMS4uNWY3NWJmMyAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvdXRpbF9tZW0uYworKysgYi9zb3VuZC9zeW50aC91dGlsX21lbS5jCkBAIC0zOCw3ICszOCw3IEBACiB7CiAJc25kX3V0aWxfbWVtaGRyX3QgKmhkcjsKIAotCWhkciA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpoZHIpLCBHRlBfS0VSTkVMKTsKKwloZHIgPSBremFsbG9jKHNpemVvZigqaGRyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGhkciA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAloZHItPnNpemUgPSBtZW1zaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCBiZmJlYzU4Li5kNWFlMjA1NSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTE0MzksOSArMTQzOSwxMSBAQAogCiBzdGF0aWMgc25kX3BjbV9oYXJkd2FyZV90IHNuZF91c2JfcGxheWJhY2sgPQogewotCS5pbmZvID0JCQkoU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCQkJU05EUlZfUENNX0lORk9fQkFUQ0ggfAorCQkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiwKIAkuYnVmZmVyX2J5dGVzX21heCA9CSgyNTYqMTAyNCksCiAJLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKIAkucGVyaW9kX2J5dGVzX21heCA9CSgxMjgqMTAyNCksCkBAIC0xNDUxLDkgKzE0NTMsMTEgQEAKIAogc3RhdGljIHNuZF9wY21faGFyZHdhcmVfdCBzbmRfdXNiX2NhcHR1cmUgPQogewotCS5pbmZvID0JCQkoU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCQkJU05EUlZfUENNX0lORk9fQkFUQ0ggfAorCQkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiwKIAkuYnVmZmVyX2J5dGVzX21heCA9CSgyNTYqMTAyNCksCiAJLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKIAkucGVyaW9kX2J5dGVzX21heCA9CSgxMjgqMTAyNCksCkBAIC0zMTMyLDcgKzMxMzYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBjaGlwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1pZGkuYyBiL3NvdW5kL3VzYi91c2JtaWRpLmMKaW5kZXggOTNkZWRkZS4uZTBkMDM2NSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1pZGkuYworKysgYi9zb3VuZC91c2IvdXNibWlkaS5jCkBAIC04NDEsNyArODQxLDcgQEAKIAlpbnQgbGVuZ3RoOwogCiAJcmVwLT5pbiA9IE5VTEw7Ci0JZXAgPSBrY2FsbG9jKDEsIHNpemVvZigqZXApLCBHRlBfS0VSTkVMKTsKKwllcCA9IGt6YWxsb2Moc2l6ZW9mKCplcCksIEdGUF9LRVJORUwpOwogCWlmICghZXApCiAJCXJldHVybiAtRU5PTUVNOwogCWVwLT51bWlkaSA9IHVtaWRpOwpAQCAtOTEzLDcgKzkxMyw3IEBACiAJdm9pZCogYnVmZmVyOwogCiAJcmVwLT5vdXQgPSBOVUxMOwotCWVwID0ga2NhbGxvYygxLCBzaXplb2YoKmVwKSwgR0ZQX0tFUk5FTCk7CisJZXAgPSBremFsbG9jKHNpemVvZigqZXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcC0+dW1pZGkgPSB1bWlkaTsKQEAgLTE1MzcsNyArMTUzNyw3IEBACiAJaW50IG91dF9wb3J0cywgaW5fcG9ydHM7CiAJaW50IGksIGVycjsKIAotCXVtaWRpID0ga2NhbGxvYygxLCBzaXplb2YoKnVtaWRpKSwgR0ZQX0tFUk5FTCk7CisJdW1pZGkgPSBremFsbG9jKHNpemVvZigqdW1pZGkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVtaWRpKQogCQlyZXR1cm4gLUVOT01FTTsKIAl1bWlkaS0+Y2hpcCA9IGNoaXA7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IGZhNzA1NmYuLmMzYzA4YzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlci5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCkBAIC04MjQsNyArODI0LDcgQEAKIAlpZiAoY2hlY2tfaWdub3JlZF9jdGwoc3RhdGUsIHVuaXRpZCwgY29udHJvbCkpCiAJCXJldHVybjsKIAotCWN2YWwgPSBrY2FsbG9jKDEsIHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOworCWN2YWwgPSBremFsbG9jKHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOwogCWlmICghIGN2YWwpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IG1hbGxvYyBrY29udHJvbFxuIik7CiAJCXJldHVybjsKQEAgLTk5Nyw3ICs5OTcsNyBAQAogCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCAwKSkKIAkJcmV0dXJuOwogCi0JY3ZhbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CisJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgY3ZhbCkKIAkJcmV0dXJuOwogCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQAogCQkJY29udGludWU7CiAJCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCB2YWxpbmZvLT5jb250cm9sKSkKIAkJCWNvbnRpbnVlOwotCQljdmFsID0ga2NhbGxvYygxLCBzaXplb2YoKmN2YWwpLCBHRlBfS0VSTkVMKTsKKwkJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghIGN2YWwpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBtYWxsb2Mga2NvbnRyb2xcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNDMwLDcgKzE0MzAsNyBAQAogCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCAwKSkKIAkJcmV0dXJuIDA7CiAKLQljdmFsID0ga2NhbGxvYygxLCBzaXplb2YoKmN2YWwpLCBHRlBfS0VSTkVMKTsKKwljdmFsID0ga3phbGxvYyhzaXplb2YoKmN2YWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBjdmFsKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBtYWxsb2Mga2NvbnRyb2xcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE5NDUsNyArMTk0NSw3IEBACiAKIAlzdHJjcHkoY2hpcC0+Y2FyZC0+bWl4ZXJuYW1lLCAiVVNCIE1peGVyIik7CiAKLQltaXhlciA9IGtjYWxsb2MoMSwgc2l6ZW9mKCptaXhlciksIEdGUF9LRVJORUwpOworCW1peGVyID0ga3phbGxvYyhzaXplb2YoKm1peGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaXhlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWl4ZXItPmNoaXAgPSBjaGlwOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5YXVkaW8uYyBiL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeWF1ZGlvLmMKaW5kZXggNjJkZmQyOC4uMGYwOWUwZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5YXVkaW8uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnlhdWRpby5jCkBAIC05NTcsNyArOTU3LDcgQEAKIAogCWZvciAoaSA9IHBsYXliYWNrX2VuZHBvaW50ID8gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA6IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRTsKIAkgICAgIGkgPD0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOyArK2kpIHsKLQkJdXNYMllfc3Vic3RyZWFtW2ldID0ga2NhbGxvYygxLCBzaXplb2Yoc25kX3VzWDJZX3N1YnN0cmVhbV90KSwgR0ZQX0tFUk5FTCk7CisJCXVzWDJZX3N1YnN0cmVhbVtpXSA9IGt6YWxsb2Moc2l6ZW9mKHNuZF91c1gyWV9zdWJzdHJlYW1fdCksIEdGUF9LRVJORUwpOwogCQlpZiAoTlVMTCA9PSB1c1gyWV9zdWJzdHJlYW1baV0pIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBtYWxsb2NcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07Cg==