ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDc5MTZiZDkuLmJjZGY1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNjcyLDcgKzY3Miw2IEBACiAJdW5zaWduZWQgaW50IGx2ZHNfYm9yZGVyX2JpdHM7CiAJLyogUGFuZWwgZml0dGVyIHBsYWNlbWVudCBhbmQgc2l6ZSBmb3IgSXJvbmxha2UrICovCiAJdTMyIHBjaF9wZl9wb3MsIHBjaF9wZl9zaXplOwotCWludCBwYW5lbF90MywgcGFuZWxfdDEyOwogCiAJc3RydWN0IGRybV9jcnRjICpwbGFuZV90b19jcnRjX21hcHBpbmdbMl07CiAJc3RydWN0IGRybV9jcnRjICpwaXBlX3RvX2NydGNfbWFwcGluZ1syXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDU1OTZlOGUuLjc5M2NhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMzMxOCw5ICszMzE4LDI4IEBACiAjZGVmaW5lICBQQU5FTF9QT1dFUl9PRkYJKDAgPDwgMCkKICNkZWZpbmUgIFBBTkVMX1BPV0VSX09OCQkoMSA8PCAwKQogI2RlZmluZSBQQ0hfUFBfT05fREVMQVlTCTB4YzcyMDgKKyNkZWZpbmUgIFBBTkVMX1BPUlRfU0VMRUNUX01BU0sJKDMgPDwgMzApCisjZGVmaW5lICBQQU5FTF9QT1JUX1NFTEVDVF9MVkRTCSgwIDw8IDMwKQorI2RlZmluZSAgUEFORUxfUE9SVF9TRUxFQ1RfRFBBCSgxIDw8IDMwKQogI2RlZmluZSAgRURQX1BBTkVMCQkoMSA8PCAzMCkKKyNkZWZpbmUgIFBBTkVMX1BPUlRfU0VMRUNUX0RQQwkoMiA8PCAzMCkKKyNkZWZpbmUgIFBBTkVMX1BPUlRfU0VMRUNUX0RQRAkoMyA8PCAzMCkKKyNkZWZpbmUgIFBBTkVMX1BPV0VSX1VQX0RFTEFZX01BU0sJKDB4MWZmZjAwMDApCisjZGVmaW5lICBQQU5FTF9QT1dFUl9VUF9ERUxBWV9TSElGVAkxNgorI2RlZmluZSAgUEFORUxfTElHSFRfT05fREVMQVlfTUFTSwkoMHgxZmZmKQorI2RlZmluZSAgUEFORUxfTElHSFRfT05fREVMQVlfU0hJRlQJMAorCiAjZGVmaW5lIFBDSF9QUF9PRkZfREVMQVlTCTB4YzcyMGMKKyNkZWZpbmUgIFBBTkVMX1BPV0VSX0RPV05fREVMQVlfTUFTSwkoMHgxZmZmMDAwMCkKKyNkZWZpbmUgIFBBTkVMX1BPV0VSX0RPV05fREVMQVlfU0hJRlQJMTYKKyNkZWZpbmUgIFBBTkVMX0xJR0hUX09GRl9ERUxBWV9NQVNLCSgweDFmZmYpCisjZGVmaW5lICBQQU5FTF9MSUdIVF9PRkZfREVMQVlfU0hJRlQJMAorCiAjZGVmaW5lIFBDSF9QUF9ESVZJU09SCQkweGM3MjEwCisjZGVmaW5lICBQUF9SRUZFUkVOQ0VfRElWSURFUl9NQVNLCSgweGZmZmZmZjAwKQorI2RlZmluZSAgUFBfUkVGRVJFTkNFX0RJVklERVJfU0hJRlQJOAorI2RlZmluZSAgUEFORUxfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSwkoMHgxZikKKyNkZWZpbmUgIFBBTkVMX1BPV0VSX0NZQ0xFX0RFTEFZX1NISUZUCTAKIAogI2RlZmluZSBQQ0hfRFBfQgkJMHhlNDEwMAogI2RlZmluZSBQQ0hfRFBCX0FVWF9DSF9DVEwJMHhlNDExMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oCmluZGV4IDVmOGU0ZWQuLjM1ZDJhNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IKkgMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IMKpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTQ0NiwxMSArNDQ2LDExIEBACiAjZGVmaW5lIEVEUF9WU1dJTkdfMV8yVgkJMwogCiBzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSB7Ci0JdTE2IHQzOwotCXUxNiB0NzsKKwl1MTYgdDFfdDM7CisJdTE2IHQ4OwogCXUxNiB0OTsKIAl1MTYgdDEwOwotCXUxNiB0MTI7CisJdTE2IHQxMV90MTI7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGVkcF9saW5rX3BhcmFtcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCBhMTc4NDE0Li5hZDY4MmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTU5LDYgKzU5LDExIEBACiAJYm9vbCBpc19wY2hfZWRwOwogCXVpbnQ4X3QJdHJhaW5fc2V0WzRdOwogCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07CisJaW50IHBhbmVsX3Bvd2VyX3VwX2RlbGF5OworCWludCBwYW5lbF9wb3dlcl9kb3duX2RlbGF5OworCWludCBwYW5lbF9wb3dlcl9jeWNsZV9kZWxheTsKKwlpbnQgYmFja2xpZ2h0X29uX2RlbGF5OworCWludCBiYWNrbGlnaHRfb2ZmX2RlbGF5OwogfTsKIAogLyoqCkBAIC03NzAsNiArNzc1LDkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9wbGxfb24oc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKK3N0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9wbGxfb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKIHN0YXRpYyB2b2lkCiBpbnRlbF9kcF9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtNzc5LDYgKzc4NywxNCBAQAogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGludGVsX2RwLT5iYXNlLmJhc2UuY3J0YzsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAKKwkvKiBUdXJuIG9uIHRoZSBlRFAgUExMIGlmIG5lZWRlZCAqLworCWlmIChpc19lZHAoaW50ZWxfZHApKSB7CisJCWlmICghaXNfcGNoX2VkcChpbnRlbF9kcCkpCisJCQlpcm9ubGFrZV9lZHBfcGxsX29uKGVuY29kZXIpOworCQllbHNlCisJCQlpcm9ubGFrZV9lZHBfcGxsX29mZihlbmNvZGVyKTsKKwl9CisKIAlpbnRlbF9kcC0+RFAgPSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOwogCWludGVsX2RwLT5EUCB8PSBpbnRlbF9kcC0+Y29sb3JfcmFuZ2U7CiAKQEAgLTgzOCwxNiArODU0LDE2IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwLT5iYXNlLmJhc2UuZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIHBwOworCXUzMiBwcCwgcHBfc3RhdHVzOwogCiAJaWYgKCFpc19lZHAoaW50ZWxfZHApKQogCQlyZXR1cm47CisJRFJNX0RFQlVHX0tNUygiVHVybiBlRFAgVkREIG9uXG4iKTsKIAkvKgogCSAqIElmIHRoZSBwYW5lbCB3YXNuJ3Qgb24sIG1ha2Ugc3VyZSB0aGVyZSdzIG5vdCBhIGN1cnJlbnRseQogCSAqIGFjdGl2ZSBQUCBzZXF1ZW5jZSBiZWZvcmUgZW5hYmxpbmcgQVVYIFZERC4KIAkgKi8KLQlpZiAoIShJOTE1X1JFQUQoUENIX1BQX1NUQVRVUykgJiBQUF9PTikpCi0JCW1zbGVlcChkZXZfcHJpdi0+cGFuZWxfdDMpOworCXBwX3N0YXR1cyA9IEk5MTVfUkVBRChQQ0hfUFBfU1RBVFVTKTsKIAogCXBwID0gSTkxNV9SRUFEKFBDSF9QUF9DT05UUk9MKTsKIAlwcCAmPSB+UEFORUxfVU5MT0NLX01BU0s7CkBAIC04NTUsNiArODcxLDEyIEBACiAJcHAgfD0gRURQX0ZPUkNFX1ZERDsKIAlJOTE1X1dSSVRFKFBDSF9QUF9DT05UUk9MLCBwcCk7CiAJUE9TVElOR19SRUFEKFBDSF9QUF9DT05UUk9MKTsKKwlEUk1fREVCVUdfS01TKCJQQ0hfUFBfU1RBVFVTOiAweCUwOHggUENIX1BQX0NPTlRST0w6IDB4JTA4eFxuIiwKKwkJICAgICAgSTkxNV9SRUFEKFBDSF9QUF9TVEFUVVMpLCBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpKTsKKwlpZiAoIShwcF9zdGF0dXMgJiBQUF9PTikpIHsKKwkJbXNsZWVwKGludGVsX2RwLT5wYW5lbF9wb3dlcl91cF9kZWxheSk7CisJCURSTV9ERUJVR19LTVMoImVEUCBWREQgd2FzIG5vdCBvblxuIik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpcm9ubGFrZV9lZHBfcGFuZWxfdmRkX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQpAQCAtODY1LDYgKzg4Nyw3IEBACiAKIAlpZiAoIWlzX2VkcChpbnRlbF9kcCkpCiAJCXJldHVybjsKKwlEUk1fREVCVUdfS01TKCJUdXJuIGVEUCBWREQgb2ZmXG4iKTsKIAlwcCA9IEk5MTVfUkVBRChQQ0hfUFBfQ09OVFJPTCk7CiAJcHAgJj0gflBBTkVMX1VOTE9DS19NQVNLOwogCXBwIHw9IFBBTkVMX1VOTE9DS19SRUdTOwpAQCAtODczLDcgKzg5Niw5IEBACiAJUE9TVElOR19SRUFEKFBDSF9QUF9DT05UUk9MKTsKIAogCS8qIE1ha2Ugc3VyZSBzZXF1ZW5jZXIgaXMgaWRsZSBiZWZvcmUgYWxsb3dpbmcgc3Vic2VxdWVudCBhY3Rpdml0eSAqLwotCW1zbGVlcChkZXZfcHJpdi0+cGFuZWxfdDEyKTsKKwlEUk1fREVCVUdfS01TKCJQQ0hfUFBfU1RBVFVTOiAweCUwOHggUENIX1BQX0NPTlRST0w6IDB4JTA4eFxuIiwKKwkJICAgICAgSTkxNV9SRUFEKFBDSF9QUF9TVEFUVVMpLCBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpKTsKKwltc2xlZXAoaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2N5Y2xlX2RlbGF5KTsKIH0KIAogLyogUmV0dXJucyB0cnVlIGlmIHRoZSBwYW5lbCB3YXMgYWxyZWFkeSBvbiB3aGVuIGNhbGxlZCAqLwpAQCAtODg0LDcgKzkwOSw3IEBACiAJdTMyIHBwLCBpZGxlX29uX21hc2sgPSBQUF9PTiB8IFBQX1NFUVVFTkNFX1NUQVRFX09OX0lETEU7CiAKIAlpZiAoIWlzX2VkcChpbnRlbF9kcCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAJaWYgKEk5MTVfUkVBRChQQ0hfUFBfU1RBVFVTKSAmIFBQX09OKQogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtOTEzLDggKzkzOCwxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgaXJvbmxha2VfZWRwX3BhbmVsX29mZiAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9wYW5lbF9vZmYoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogeworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBwcCwgaWRsZV9vZmZfbWFzayA9IFBQX09OIHwgUFBfU0VRVUVOQ0VfTUFTSyB8CiAJCVBQX0NZQ0xFX0RFTEFZX0FDVElWRSB8IFBQX1NFUVVFTkNFX1NUQVRFX01BU0s7CkBAIC05MzMsNiArOTYwLDcgQEAKIAlwcCAmPSB+UE9XRVJfVEFSR0VUX09OOwogCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIHBwKTsKIAlQT1NUSU5HX1JFQUQoUENIX1BQX0NPTlRST0wpOworCW1zbGVlcChpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkpOwogCiAJaWYgKHdhaXRfZm9yKChJOTE1X1JFQUQoUENIX1BQX1NUQVRVUykgJiBpZGxlX29mZl9tYXNrKSA9PSAwLCA1MDAwKSkKIAkJRFJNX0VSUk9SKCJwYW5lbCBvZmYgd2FpdCB0aW1lZCBvdXQ6IDB4JTA4eFxuIiwKQEAgLTk0MywxMSArOTcxLDE1IEBACiAJUE9TVElOR19SRUFEKFBDSF9QUF9DT05UUk9MKTsKIH0KIAotc3RhdGljIHZvaWQgaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vbiAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9iYWNrbGlnaHRfb24gKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwLT5iYXNlLmJhc2UuZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIHBwOwogCisJaWYgKCFpc19lZHAoaW50ZWxfZHApKQorCQlyZXR1cm47CisKIAlEUk1fREVCVUdfS01TKCJcbiIpOwogCS8qCiAJICogSWYgd2UgZW5hYmxlIHRoZSBiYWNrbGlnaHQgcmlnaHQgYXdheSBmb2xsb3dpbmcgYSBwYW5lbCBwb3dlcgpAQCAtOTU1LDI1ICs5ODcsMzIgQEAKIAkgKiBsaW5rLiAgU28gZGVsYXkgYSBiaXQgdG8gbWFrZSBzdXJlIHRoZSBpbWFnZSBpcyBzb2xpZCBiZWZvcmUKIAkgKiBhbGxvd2luZyBpdCB0byBhcHBlYXIuCiAJICovCi0JbXNsZWVwKDMwMCk7CisJbXNsZWVwKGludGVsX2RwLT5iYWNrbGlnaHRfb25fZGVsYXkpOwogCXBwID0gSTkxNV9SRUFEKFBDSF9QUF9DT05UUk9MKTsKIAlwcCAmPSB+UEFORUxfVU5MT0NLX01BU0s7CiAJcHAgfD0gUEFORUxfVU5MT0NLX1JFR1M7CiAJcHAgfD0gRURQX0JMQ19FTkFCTEU7CiAJSTkxNV9XUklURShQQ0hfUFBfQ09OVFJPTCwgcHApOworCVBPU1RJTkdfUkVBRChQQ0hfUFBfQ09OVFJPTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9iYWNrbGlnaHRfb2ZmIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vZmYgKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwLT5iYXNlLmJhc2UuZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIHBwOwogCisJaWYgKCFpc19lZHAoaW50ZWxfZHApKQorCQlyZXR1cm47CisKIAlEUk1fREVCVUdfS01TKCJcbiIpOwogCXBwID0gSTkxNV9SRUFEKFBDSF9QUF9DT05UUk9MKTsKIAlwcCAmPSB+UEFORUxfVU5MT0NLX01BU0s7CiAJcHAgfD0gUEFORUxfVU5MT0NLX1JFR1M7CiAJcHAgJj0gfkVEUF9CTENfRU5BQkxFOwogCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIHBwKTsKKwlQT1NUSU5HX1JFQUQoUENIX1BQX0NPTlRST0wpOworCW1zbGVlcChpbnRlbF9kcC0+YmFja2xpZ2h0X29mZl9kZWxheSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9wbGxfb24oc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTAzNiw0MCArMTA3NSwzMSBAQAogc3RhdGljIHZvaWQgaW50ZWxfZHBfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCiAJLyogV2FrZSB1cCB0aGUgc2luayBmaXJzdCAqLwogCWlyb25sYWtlX2VkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOwogCWludGVsX2RwX3NpbmtfZHBtcyhpbnRlbF9kcCwgRFJNX01PREVfRFBNU19PTik7CiAJaXJvbmxha2VfZWRwX3BhbmVsX3ZkZF9vZmYoaW50ZWxfZHApOwogCi0JaWYgKGlzX2VkcChpbnRlbF9kcCkpIHsKLQkJaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vZmYoZGV2KTsKLQkJaXJvbmxha2VfZWRwX3BhbmVsX29mZihkZXYpOwotCQlpZiAoIWlzX3BjaF9lZHAoaW50ZWxfZHApKQotCQkJaXJvbmxha2VfZWRwX3BsbF9vbihlbmNvZGVyKTsKLQkJZWxzZQotCQkJaXJvbmxha2VfZWRwX3BsbF9vZmYoZW5jb2Rlcik7Ci0JfQorCS8qIE1ha2Ugc3VyZSB0aGUgcGFuZWwgaXMgb2ZmIGJlZm9yZSB0cnlpbmcgdG8KKwkgKiBjaGFuZ2UgdGhlIG1vZGUKKwkgKi8KKwlpcm9ubGFrZV9lZHBfYmFja2xpZ2h0X29mZihpbnRlbF9kcCk7CiAJaW50ZWxfZHBfbGlua19kb3duKGludGVsX2RwKTsKKwlpcm9ubGFrZV9lZHBfcGFuZWxfb2ZmKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9kcF9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewogCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAogCWlyb25sYWtlX2VkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOwotCisJaW50ZWxfZHBfc2lua19kcG1zKGludGVsX2RwLCBEUk1fTU9ERV9EUE1TX09OKTsKIAlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKTsKLQogCWlyb25sYWtlX2VkcF9wYW5lbF9vbihpbnRlbF9kcCk7CiAJaXJvbmxha2VfZWRwX3BhbmVsX3ZkZF9vZmYoaW50ZWxfZHApOwotCiAJaW50ZWxfZHBfY29tcGxldGVfbGlua190cmFpbihpbnRlbF9kcCk7Ci0KLQlpZiAoaXNfZWRwKGludGVsX2RwKSkKLQkJaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vbihkZXYpOworCWlyb25sYWtlX2VkcF9iYWNrbGlnaHRfb24oaW50ZWxfZHApOwogCiAJaW50ZWxfZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNfT047CiB9CkBAIC0xMDg1LDEwICsxMTE1LDEwIEBACiAJaWYgKG1vZGUgIT0gRFJNX01PREVfRFBNU19PTikgewogCQlpcm9ubGFrZV9lZHBfcGFuZWxfdmRkX29uKGludGVsX2RwKTsKIAkJaWYgKGlzX2VkcChpbnRlbF9kcCkpCi0JCQlpcm9ubGFrZV9lZHBfYmFja2xpZ2h0X29mZihkZXYpOworCQkJaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vZmYoaW50ZWxfZHApOwogCQlpbnRlbF9kcF9zaW5rX2RwbXMoaW50ZWxfZHAsIG1vZGUpOwogCQlpbnRlbF9kcF9saW5rX2Rvd24oaW50ZWxfZHApOwotCQlpcm9ubGFrZV9lZHBfcGFuZWxfb2ZmKGRldik7CisJCWlyb25sYWtlX2VkcF9wYW5lbF9vZmYoZW5jb2Rlcik7CiAJCWlmIChpc19lZHAoaW50ZWxfZHApICYmICFpc19wY2hfZWRwKGludGVsX2RwKSkKIAkJCWlyb25sYWtlX2VkcF9wbGxfb2ZmKGVuY29kZXIpOwogCQlpcm9ubGFrZV9lZHBfcGFuZWxfdmRkX29mZihpbnRlbF9kcCk7CkBAIC0xMTAwLDEwICsxMTMwLDkgQEAKIAkJCWlyb25sYWtlX2VkcF9wYW5lbF9vbihpbnRlbF9kcCk7CiAJCQlpcm9ubGFrZV9lZHBfcGFuZWxfdmRkX29mZihpbnRlbF9kcCk7CiAJCQlpbnRlbF9kcF9jb21wbGV0ZV9saW5rX3RyYWluKGludGVsX2RwKTsKKwkJCWlyb25sYWtlX2VkcF9iYWNrbGlnaHRfb24oaW50ZWxfZHApOwogCQl9IGVsc2UKIAkJCWlyb25sYWtlX2VkcF9wYW5lbF92ZGRfb2ZmKGludGVsX2RwKTsKLQkJaWYgKGlzX2VkcChpbnRlbF9kcCkpCi0JCQlpcm9ubGFrZV9lZHBfYmFja2xpZ2h0X29uKGRldik7CiAJfQogCWludGVsX2RwLT5kcG1zX21vZGUgPSBtb2RlOwogfQpAQCAtMTYyNiw2ICsxNjU1LDcgQEAKIAogCUk5MTVfV1JJVEUoaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQICYgfkRQX1BPUlRfRU4pOwogCVBPU1RJTkdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisJbXNsZWVwKGludGVsX2RwLT5wYW5lbF9wb3dlcl9kb3duX2RlbGF5KTsKIH0KIAogc3RhdGljIGJvb2wKQEAgLTIxMTcsMTYgKzIxNDcsNTEgQEAKIAkvKiBDYWNoZSBzb21lIERQQ0QgZGF0YSBpbiB0aGUgZURQIGNhc2UgKi8KIAlpZiAoaXNfZWRwKGludGVsX2RwKSkgewogCQlib29sIHJldDsKLQkJdTMyIHBwX29uLCBwcF9kaXY7CisJCXN0cnVjdCBlZHBfcG93ZXJfc2VxCWN1ciwgdmJ0OworCQl1MzIgcHBfb24sIHBwX29mZiwgcHBfZGl2OwogCiAJCXBwX29uID0gSTkxNV9SRUFEKFBDSF9QUF9PTl9ERUxBWVMpOworCQlwcF9vZmYgPSBJOTE1X1JFQUQoUENIX1BQX09GRl9ERUxBWVMpOwogCQlwcF9kaXYgPSBJOTE1X1JFQUQoUENIX1BQX0RJVklTT1IpOwogCi0JCS8qIEdldCBUMyAmIFQxMiB2YWx1ZXMgKG5vdGU6IFZFU0Egbm90IGJzcGVjIHRlcm1pbm9sb2d5KSAqLwotCQlkZXZfcHJpdi0+cGFuZWxfdDMgPSAocHBfb24gJiAweDFmZmYwMDAwKSA+PiAxNjsKLQkJZGV2X3ByaXYtPnBhbmVsX3QzIC89IDEwOyAvKiB0MyBpbiAxMDB1cyB1bml0cyAqLwotCQlkZXZfcHJpdi0+cGFuZWxfdDEyID0gcHBfZGl2ICYgMHhmOwotCQlkZXZfcHJpdi0+cGFuZWxfdDEyICo9IDEwMDsgLyogdDEyIGluIDEwMG1zIHVuaXRzICovCisJCS8qIFB1bGwgdGltaW5nIHZhbHVlcyBvdXQgb2YgcmVnaXN0ZXJzICovCisJCWN1ci50MV90MyA9IChwcF9vbiAmIFBBTkVMX1BPV0VSX1VQX0RFTEFZX01BU0spID4+CisJCQlQQU5FTF9QT1dFUl9VUF9ERUxBWV9TSElGVDsKKworCQljdXIudDggPSAocHBfb24gJiBQQU5FTF9MSUdIVF9PTl9ERUxBWV9NQVNLKSA+PgorCQkJUEFORUxfTElHSFRfT05fREVMQVlfU0hJRlQ7CisJCQorCQljdXIudDkgPSAocHBfb2ZmICYgUEFORUxfTElHSFRfT0ZGX0RFTEFZX01BU0spID4+CisJCQlQQU5FTF9MSUdIVF9PRkZfREVMQVlfU0hJRlQ7CisKKwkJY3VyLnQxMCA9IChwcF9vZmYgJiBQQU5FTF9QT1dFUl9ET1dOX0RFTEFZX01BU0spID4+CisJCQlQQU5FTF9QT1dFUl9ET1dOX0RFTEFZX1NISUZUOworCisJCWN1ci50MTFfdDEyID0gKChwcF9kaXYgJiBQQU5FTF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLKSA+PgorCQkJICAgICAgIFBBTkVMX1BPV0VSX0NZQ0xFX0RFTEFZX1NISUZUKSAqIDEwMDA7CisKKwkJRFJNX0RFQlVHX0tNUygiY3VyIHQxX3QzICVkIHQ4ICVkIHQ5ICVkIHQxMCAlZCB0MTFfdDEyICVkXG4iLAorCQkJICAgICAgY3VyLnQxX3QzLCBjdXIudDgsIGN1ci50OSwgY3VyLnQxMCwgY3VyLnQxMV90MTIpOworCisJCXZidCA9IGRldl9wcml2LT5lZHAucHBzOworCisJCURSTV9ERUJVR19LTVMoInZidCB0MV90MyAlZCB0OCAlZCB0OSAlZCB0MTAgJWQgdDExX3QxMiAlZFxuIiwKKwkJCSAgICAgIHZidC50MV90MywgdmJ0LnQ4LCB2YnQudDksIHZidC50MTAsIHZidC50MTFfdDEyKTsKKworI2RlZmluZSBnZXRfZGVsYXkoZmllbGQpCSgobWF4KGN1ci5maWVsZCwgdmJ0LmZpZWxkKSArIDkpIC8gMTApCisKKwkJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX3VwX2RlbGF5ID0gZ2V0X2RlbGF5KHQxX3QzKTsKKwkJaW50ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSA9IGdldF9kZWxheSh0OCk7CisJCWludGVsX2RwLT5iYWNrbGlnaHRfb2ZmX2RlbGF5ID0gZ2V0X2RlbGF5KHQ5KTsKKwkJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25fZGVsYXkgPSBnZXRfZGVsYXkodDEwKTsKKwkJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2N5Y2xlX2RlbGF5ID0gZ2V0X2RlbGF5KHQxMV90MTIpOworCisJCURSTV9ERUJVR19LTVMoInBhbmVsIHBvd2VyIHVwIGRlbGF5ICVkLCBwb3dlciBkb3duIGRlbGF5ICVkLCBwb3dlciBjeWNsZSBkZWxheSAlZFxuIiwKKwkJCSAgICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl91cF9kZWxheSwgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25fZGVsYXksCisJCQkgICAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkpOworCisJCURSTV9ERUJVR19LTVMoImJhY2tsaWdodCBvbiBkZWxheSAlZCwgb2ZmIGRlbGF5ICVkXG4iLAorCQkJICAgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSwgaW50ZWxfZHAtPmJhY2tsaWdodF9vZmZfZGVsYXkpOwogCiAJCWlyb25sYWtlX2VkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOwogCQlyZXQgPSBpbnRlbF9kcF9nZXRfZHBjZChpbnRlbF9kcCk7Cg==