ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCmluZGV4IDk5ZDIwOWUuLjI2Mjc1NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICAgaTJjLXZpYXByby5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3IgaGFyZHdhcmUKICAgICAgICAgICAgICAgbW9uaXRvcmluZwotICAgIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDIgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAorICAgIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDIgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCiAgICAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAogICAgIE1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KIApAQCAtNDYsOSArNDYsOSBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnZ0NTk2X3BkZXY7CiAKLSNkZWZpbmUgU01CQkExCSAgIAkgMHg5MAotI2RlZmluZSBTTUJCQTIgICAgIAkgMHg4MAotI2RlZmluZSBTTUJCQTMgICAgIAkgMHhEMAorI2RlZmluZSBTTUJCQTEJCTB4OTAKKyNkZWZpbmUgU01CQkEyCQkweDgwCisjZGVmaW5lIFNNQkJBMwkJMHhEMAogCiAvKiBTTUJ1cyBhZGRyZXNzIG9mZnNldHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB2dDU5Nl9zbWJhOwpAQCAtNjgsMjYgKzY4LDI2IEBACiAvKiBQQ0kgQWRkcmVzcyBDb25zdGFudHMgKi8KIAogLyogU01CdXMgZGF0YSBpbiBjb25maWd1cmF0aW9uIHNwYWNlIGNhbiBiZSBmb3VuZCBpbiB0d28gcGxhY2VzLAotICAgV2UgdHJ5IHRvIHNlbGVjdCB0aGUgYmV0dGVyIG9uZSovCisgICBXZSB0cnkgdG8gc2VsZWN0IHRoZSBiZXR0ZXIgb25lICovCiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbWJfY2ZfaHN0Y2ZnID0gMHhEMjsKIAotI2RlZmluZSBTTUJIU1RDRkcgICAoc21iX2NmX2hzdGNmZykKLSNkZWZpbmUgU01CU0xWQyAgICAgKHNtYl9jZl9oc3RjZmcgKyAxKQotI2RlZmluZSBTTUJTSERXMSAgICAoc21iX2NmX2hzdGNmZyArIDIpCi0jZGVmaW5lIFNNQlNIRFcyICAgIChzbWJfY2ZfaHN0Y2ZnICsgMykKLSNkZWZpbmUgU01CUkVWICAgICAgKHNtYl9jZl9oc3RjZmcgKyA0KQorI2RlZmluZSBTTUJIU1RDRkcJKHNtYl9jZl9oc3RjZmcpCisjZGVmaW5lIFNNQlNMVkMJCShzbWJfY2ZfaHN0Y2ZnICsgMSkKKyNkZWZpbmUgU01CU0hEVzEJKHNtYl9jZl9oc3RjZmcgKyAyKQorI2RlZmluZSBTTUJTSERXMgkoc21iX2NmX2hzdGNmZyArIDMpCisjZGVmaW5lIFNNQlJFVgkJKHNtYl9jZl9oc3RjZmcgKyA0KQogCiAvKiBPdGhlciBzZXR0aW5ncyAqLwogI2RlZmluZSBNQVhfVElNRU9VVAk1MDAKICNkZWZpbmUgRU5BQkxFX0lOVDkJMAogCiAvKiBWVDgyQzU5NiBjb25zdGFudHMgKi8KLSNkZWZpbmUgVlQ1OTZfUVVJQ0sgICAgICAweDAwCi0jZGVmaW5lIFZUNTk2X0JZVEUgICAgICAgMHgwNAotI2RlZmluZSBWVDU5Nl9CWVRFX0RBVEEgIDB4MDgKLSNkZWZpbmUgVlQ1OTZfV09SRF9EQVRBICAweDBDCi0jZGVmaW5lIFZUNTk2X0JMT0NLX0RBVEEgMHgxNAorI2RlZmluZSBWVDU5Nl9RVUlDSwkJMHgwMAorI2RlZmluZSBWVDU5Nl9CWVRFCQkweDA0CisjZGVmaW5lIFZUNTk2X0JZVEVfREFUQQkJMHgwOAorI2RlZmluZSBWVDU5Nl9XT1JEX0RBVEEJCTB4MEMKKyNkZWZpbmUgVlQ1OTZfQkxPQ0tfREFUQQkweDE0CiAKIAogLyogSWYgZm9yY2UgaXMgc2V0IHRvIGFueXRoaW5nIGRpZmZlcmVudCBmcm9tIDAsIHdlIGZvcmNpYmx5IGVuYWJsZSB0aGUKQEAgLTExNSwxOSArMTE1LDE5IEBACiAJaW50IHRpbWVvdXQgPSAwOwogCiAJZGV2X2RiZygmdnQ1OTZfYWRhcHRlci5kZXYsICJUcmFuc2FjdGlvbiAocHJlKTogQ05UPSUwMngsIENNRD0lMDJ4LCAiCi0JCSJBREQ9JTAyeCwgREFUMD0lMDJ4LCBEQVQxPSUwMnhcbiIsIGluYl9wKFNNQkhTVENOVCksIAotCQlpbmJfcChTTUJIU1RDTUQpLCBpbmJfcChTTUJIU1RBREQpLCBpbmJfcChTTUJIU1REQVQwKSwgCisJCSJBREQ9JTAyeCwgREFUMD0lMDJ4LCBEQVQxPSUwMnhcbiIsIGluYl9wKFNNQkhTVENOVCksCisJCWluYl9wKFNNQkhTVENNRCksIGluYl9wKFNNQkhTVEFERCksIGluYl9wKFNNQkhTVERBVDApLAogCQlpbmJfcChTTUJIU1REQVQxKSk7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIFNNQnVzIGhvc3QgaXMgcmVhZHkgdG8gc3RhcnQgdHJhbnNtaXR0aW5nICovCiAJaWYgKCh0ZW1wID0gaW5iX3AoU01CSFNUU1RTKSkgJiAweDFGKSB7CiAJCWRldl9kYmcoJnZ0NTk2X2FkYXB0ZXIuZGV2LCAiU01CdXMgYnVzeSAoMHglMDJ4KS4gIgotCQkJCSJSZXNldHRpbmcuLi5cbiIsIHRlbXApOwotCQkKKwkJCSJSZXNldHRpbmcuLi5cbiIsIHRlbXApOworCiAJCW91dGJfcCh0ZW1wLCBTTUJIU1RTVFMpOwogCQlpZiAoKHRlbXAgPSBpbmJfcChTTUJIU1RTVFMpKSAmIDB4MUYpIHsKIAkJCWRldl9kYmcoJnZ0NTk2X2FkYXB0ZXIuZGV2LCAiRmFpbGVkISAoMHglMDJ4KVxuIiwgdGVtcCk7Ci0JCQkKKwogCQkJcmV0dXJuIC0xOwogCQl9IGVsc2UgewogCQkJZGV2X2RiZygmdnQ1OTZfYWRhcHRlci5kZXYsICJTdWNjZXNzZnVsbCFcbiIpOwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLyogc3RhcnQgdGhlIHRyYW5zYWN0aW9uIGJ5IHNldHRpbmcgYml0IDYgKi8KIAlvdXRiX3AoaW5iKFNNQkhTVENOVCkgfCAweDA0MCwgU01CSFNUQ05UKTsKIAotCS8qIFdlIHdpbGwgYWx3YXlzIHdhaXQgZm9yIGEgZnJhY3Rpb24gb2YgYSBzZWNvbmQhIAorCS8qIFdlIHdpbGwgYWx3YXlzIHdhaXQgZm9yIGEgZnJhY3Rpb24gb2YgYSBzZWNvbmQhCiAJICAgSSBkb24ndCBrbm93IGlmIFZJQSBuZWVkcyB0aGlzLCBJbnRlbCBkaWQgICovCiAJZG8gewogCQltc2xlZXAoMSk7CkBAIC0xNzcsMTYgKzE3NywxNiBAQAogCiAJZGV2X2RiZygmdnQ1OTZfYWRhcHRlci5kZXYsICJUcmFuc2FjdGlvbiAocG9zdCk6IENOVD0lMDJ4LCBDTUQ9JTAyeCwgIgogCQkiQUREPSUwMngsIERBVDA9JTAyeCwgREFUMT0lMDJ4XG4iLCBpbmJfcChTTUJIU1RDTlQpLAotCQlpbmJfcChTTUJIU1RDTUQpLCBpbmJfcChTTUJIU1RBREQpLCBpbmJfcChTTUJIU1REQVQwKSwgCisJCWluYl9wKFNNQkhTVENNRCksIGluYl9wKFNNQkhTVEFERCksIGluYl9wKFNNQkhTVERBVDApLAogCQlpbmJfcChTTUJIU1REQVQxKSk7Ci0JCisKIAlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiBSZXR1cm4gLTEgb24gZXJyb3IuICovCiBzdGF0aWMgczMyIHZ0NTk2X2FjY2VzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHUxNiBhZGRyLAotCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwKLQkJaW50IHNpemUsICB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKKwkJdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwKKwkJaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQogewogCWludCBpLCBsZW47CiAKQEAgLTI1Niw3ICsyNTYsNyBAQAogCWNhc2UgVlQ1OTZfQllURToKIAkJLyogV2hlcmUgaXMgdGhlIHJlc3VsdCBwdXQ/IEkgYXNzdW1lIGhlcmUgaXQgaXMgaW4KIAkJICogU01CSFNUREFUMCBidXQgaXQgbWlnaHQganVzdCBhcyB3ZWxsIGJlIGluIHRoZQotCQkgKiBTTUJIU1RDTUQuIE5vIGNsdWUgaW4gdGhlIGRvY3MgCisJCSAqIFNNQkhTVENNRC4gTm8gY2x1ZSBpbiB0aGUgZG9jcwogCQkgKi8KIAkJZGF0YS0+Ynl0ZSA9IGluYl9wKFNNQkhTVERBVDApOwogCQlicmVhazsKQEAgLTMwMiw3ICszMDIsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAlpbnQgZXJyb3IgPSAtRU5PREVWOwotCQorCiAJLyogRGV0ZXJtaW5lIHRoZSBhZGRyZXNzIG9mIHRoZSBTTUJ1cyBhcmVhcyAqLwogCWlmIChmb3JjZV9hZGRyKSB7CiAJCXZ0NTk2X3NtYmEgPSBmb3JjZV9hZGRyICYgMHhmZmYwOwpAQCAtMzMzLDEwICszMzMsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0gZm91bmQ6Citmb3VuZDoKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHZ0NTk2X3NtYmEsIDgsICJ2aWFwcm8tc21idXMiKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCi0JCSAgICAgICAgdnQ1OTZfc21iYSk7CisJCQl2dDU5Nl9zbWJhKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0zNDgsMTMgKzM0OCwxMyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgaWQtPmRyaXZlcl9kYXRhLCB2dDU5Nl9zbWJhKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFNNQkhTVENGRywgdGVtcCB8IDB4MDEpOwogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiV0FSTklORzogU01CdXMgaW50ZXJmYWNlIHNldCB0byBuZXcgIgotCQkgICAgICJhZGRyZXNzIDB4JTA0eCFcbiIsIHZ0NTk2X3NtYmEpOworCQkJICJhZGRyZXNzIDB4JTA0eCFcbiIsIHZ0NTk2X3NtYmEpOwogCX0gZWxzZSBpZiAoKHRlbXAgJiAxKSA9PSAwKSB7CiAJCWlmIChmb3JjZSkgewotCQkJLyogTk9URTogVGhpcyBhc3N1bWVzIEkvTyBzcGFjZSBhbmQgb3RoZXIgYWxsb2NhdGlvbnMgCi0JCQkgKiBXRVJFIGRvbmUgYnkgdGhlIEJpb3MhICBEb24ndCBjb21wbGFpbiBpZiB5b3VyIAotCQkJICogaGFyZHdhcmUgZG9lcyB3ZWlyZCB0aGluZ3MgYWZ0ZXIgZW5hYmxpbmcgdGhpcy4gCi0JCQkgKiA6JykgQ2hlY2sgZm9yIEJpb3MgdXBkYXRlcyBiZWZvcmUgcmVzb3J0aW5nIHRvIAorCQkJLyogTk9URTogVGhpcyBhc3N1bWVzIEkvTyBzcGFjZSBhbmQgb3RoZXIgYWxsb2NhdGlvbnMKKwkJCSAqIFdFUkUgZG9uZSBieSB0aGUgQmlvcyEgIERvbid0IGNvbXBsYWluIGlmIHlvdXIKKwkJCSAqIGhhcmR3YXJlIGRvZXMgd2VpcmQgdGhpbmdzIGFmdGVyIGVuYWJsaW5nIHRoaXMuCisJCQkgKiA6JykgQ2hlY2sgZm9yIEJpb3MgdXBkYXRlcyBiZWZvcmUgcmVzb3J0aW5nIHRvCiAJCQkgKiB0aGlzLgogCQkJICovCiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgU01CSFNUQ0ZHLCB0ZW1wIHwgMSk7CkBAIC0zODEsOCArMzgxLDggQEAKIAogCXZ0NTk2X2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJc25wcmludGYodnQ1OTZfYWRhcHRlci5uYW1lLCBJMkNfTkFNRV9TSVpFLAotCQkJIlNNQnVzIFZpYSBQcm8gYWRhcHRlciBhdCAlMDR4IiwgdnQ1OTZfc21iYSk7Ci0JCisJCSAiU01CdXMgVmlhIFBybyBhZGFwdGVyIGF0ICUwNHgiLCB2dDU5Nl9zbWJhKTsKKwogCXZ0NTk2X3BkZXYgPSBwY2lfZGV2X2dldChwZGV2KTsKIAlpZiAoaTJjX2FkZF9hZGFwdGVyKCZ2dDU5Nl9hZGFwdGVyKSkgewogCQlwY2lfZGV2X3B1dCh2dDU5Nl9wZGV2KTsKQEAgLTM5NSw3ICszOTUsNyBAQAogCSAqLwogCXJldHVybiAtRU5PREVWOwogCi0gcmVsZWFzZV9yZWdpb246CityZWxlYXNlX3JlZ2lvbjoKIAlyZWxlYXNlX3JlZ2lvbih2dDU5Nl9zbWJhLCA4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC00MjAsNyArNDIwLDcgQEAKIAl7IDAsIH0KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgdnQ1OTZfaWRzKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2dDU5Nl9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdnQ1OTZfZHJpdmVyID0gewogCS5uYW1lCQk9ICJ2dDU5Nl9zbWJ1cyIsCg==